[
  {
    "path": ".gitattributes",
    "content": "* text=auto\nCHANGELOG.md export-ignore\n*.css linguist-language=php\n*.js linguist-language=php\n*.scss linguist-language=php\n"
  },
  {
    "path": ".gitignore",
    "content": "/node_modules\n/public/hot\n/public/storage\n/storage/*.key\n/vendor\n/.idea\n/.vagrant\nHomestead.json\nHomestead.yaml\nnpm-debug.log\nyarn-error.log\n.env\n\n_ide_helper.php\n/config/debugbar.php\n/public/assets/js\n/public/assets/css/styles.css\n/public/uploads/\n"
  },
  {
    "path": "app/Activities/BaseActivity.php",
    "content": "<?php\nnamespace App\\Activities;\n\nuse App\\Models\\Activity;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Models\\User;\nuse Carbon\\Carbon;\n\nclass BaseActivity\n{\n    public function addArticleActivity(User $user, Article $article, $extra_data = [], $indentifier = null)\n    {\n        $causer      = 'u' . $user->id;\n        $indentifier = $indentifier ?: 'a' . $article->id;\n\n        $data = array_merge([\n            'article_type' => 'article',\n            'article_id' => $article->id,\n            'article_slug' => $article->slug,\n            'article_title' => $article->title,\n        ], $extra_data);\n\n        $this->addActivity($causer, $user, $indentifier, $data);\n    }\n    public function addQuestionActivity(User $user, Question $question, $extra_data = [], $indentifier = null)\n    {\n        $causer      = 'u' . $user->id;\n        $indentifier = $indentifier ?: 'q' . $question->id;\n\n        $data = array_merge([\n            'article_type' => 'question',\n            'article_id' => $question->id,\n            'article_slug' => $question->slug,\n            'article_title' => $question->title,\n        ], $extra_data);\n\n        $this->addActivity($causer, $user, $indentifier, $data);\n    }\n\n    public function addActivity($causer, $user, $indentifier, $data)\n    {\n        $type = class_basename(get_class($this));\n\n        $activities[] = [\n            'causer'      => $causer,\n            'user_id'     => $user->id,\n            'type'        => $type,\n            'indentifier' => $indentifier,\n            'data'        => serialize($data),\n            'created_at' => Carbon::now(),\n            'updated_at' => Carbon::now(),\n        ];\n\n        Activity::insert($activities);\n    }\n\n\n    public function removeBy($causer, $indentifier)\n    {\n        Activity::where('causer', $causer)\n            ->where('indentifier', $indentifier)\n            ->where('type', class_basename(get_class($this)))\n            ->delete();\n    }\n}"
  },
  {
    "path": "app/Activities/UserCommentArticle.php",
    "content": "<?php\nnamespace App\\Activities;\n\nclass UserCommentArticle extends BaseActivity\n{\n    /**\n     * When use vote a article, insert into activities a record\n     *\n     * @param $user\n     * @param $article\n     */\n    public function generate($user, $article)\n    {\n        $this->addArticleActivity($user, $article);\n    }\n\n    public function remove($user, $article)\n    {\n        $this->removeBy('u'.$user->id, 'a'.$article->id);\n    }\n}"
  },
  {
    "path": "app/Activities/UserFollowedUser.php",
    "content": "<?php\n\nnamespace App\\Activities;\n\nclass UserFollowedUser extends BaseActivity\n{\n    /**\n     * When use vote a article, insert into activities a record\n     *\n     * @param $user\n     * @param $question\n     */\n    public function generate($user, $following)\n    {\n        $causer = 'u' . $user->id;\n        $indentifier = 'u' . $following->id;\n        $data = array_merge([\n            'following_user_name' => $following->user_name,\n            'following_id' => $following->id,\n        ]);\n        $this->addActivity($causer, $user, $indentifier, $data);\n    }\n\n    public function remove($user, $following)\n    {\n        $this->removeBy('u' . $user->id, 'u' . $following->id);\n    }\n}"
  },
  {
    "path": "app/Activities/UserReplyQuestion.php",
    "content": "<?php\nnamespace App\\Activities;\n\nclass UserReplyQuestion extends BaseActivity\n{\n    /**\n     * When use vote a article, insert into activities a record\n     *\n     * @param $user\n     * @param $question\n     */\n    public function generate($user, $question)\n    {\n        $this->addQuestionActivity($user, $question);\n    }\n\n    public function remove($user, $question)\n    {\n        $this->removeBy('u'.$user->id, 'q'.$question->id);\n    }\n}"
  },
  {
    "path": "app/Activities/UserUpvoteArticle.php",
    "content": "<?php\nnamespace App\\Activities;\n\nclass UserUpvoteArticle extends BaseActivity\n{\n    /**\n     * When use vote a article, insert into activities a record\n     *\n     * @param $user\n     * @param $article\n     */\n    public function generate($user, $article)\n    {\n        $this->addArticleActivity($user, $article);\n    }\n\n    public function remove($user, $article)\n    {\n        $this->removeBy('u'.$user->id, 'a'.$article->id);\n    }\n}"
  },
  {
    "path": "app/Activities/UserUpvoteQuestion.php",
    "content": "<?php\nnamespace App\\Activities;\n\nclass UserUpvoteQuestion extends BaseActivity\n{\n    /**\n     * When use vote a article, insert into activities a record\n     *\n     * @param $user\n     * @param $article\n     */\n    public function generate($user, $question)\n    {\n        $this->addQuestionActivity($user, $question);\n    }\n\n    public function remove($user, $question)\n    {\n        $this->removeBy('u'.$user->id, 'q'.$question->id);\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Core/CreatorListener.php",
    "content": "<?php namespace Codehaoshi\\Core;\n\ninterface CreatorListener\n{\n    public function creatorFailed($errors);\n    public function creatorSucceed($model);\n}\n"
  },
  {
    "path": "app/Codehaoshi/Creators/CommentCreator.php",
    "content": "<?php\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Activities\\UserCommentArticle;\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse App\\Notifications\\ReceivedComment;\nuse App\\Tools\\Markdowner;\nuse Carbon\\Carbon;\nuse Codehaoshi\\Core\\CreatorListener;\nuse Auth;\nuse Codehaoshi\\Notification\\Metion;\n\nclass CommentCreator\n{\n    protected $metion;\n\n    public function __construct(Metion $metion)\n    {\n        $this->metion = $metion;\n    }\n\n    public function create(CreatorListener $observer, $data)\n    {\n        // 检查是否重复发布评论\n        if ($this->isDuplicateComment($data)) {\n\n            return $observer->creatorFailed('请不要发布重复评论。');\n        }\n\n        $data['user_id'] = Auth::id();\n        $data['body'] = $this->metion->parse($data['body']);\n\n        $markdown = new Markdowner();\n        $data['body_original'] = $data['body'];\n        $data['body'] = $markdown->convertMarkdownToHtml($data['body']);\n\n        $comment = Comment::create($data);\n\n        if (!$comment) {\n            return $observer->creatorFailed($comment->getErrors());\n        }\n\n        // Add the comment user\n        $article = Article::findOrFail($data['article_id']);\n        $article->last_comment_user_id = Auth::id();\n        $article->comment_count++;\n        $article->updated_at = Carbon::now()->toDateTimeString();\n        $article->save();\n\n\n        Auth::user()->increment('comment_count', 1);\n        // Todo 用户评论后发送站内通知消息给被评论文章的作者\n        User::findOrFail($article['user_id'])->notify(new ReceivedComment($comment));\n        app(UserCommentArticle::class)->generate(Auth::user(), $article);\n\n        return $observer->creatorSucceed($comment);\n    }\n\n    protected function isDuplicateComment($data)\n    {\n        $lastComment = Comment::where('user_id', Auth::id())\n            ->where('article_id', $data['article_id'])\n            ->orderBy('created_at', 'desc')\n            ->first();\n        return count($lastComment) && strcmp($lastComment->body_original, $data['body']) === 0;\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Creators/ReplyCreator.php",
    "content": "<?php\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Activities\\UserReplyQuestion;\nuse App\\Models\\Question;\nuse App\\Models\\Reply;\nuse App\\Models\\User;\nuse App\\Notifications\\ReceivedReply;\nuse App\\Tools\\Markdowner;\nuse Carbon\\Carbon;\nuse Codehaoshi\\Core\\CreatorListener;\nuse Auth;\nuse Codehaoshi\\Notification\\Metion;\n\nclass ReplyCreator\n{\n    protected $metion;\n\n    public function __construct(Metion $metion)\n    {\n        $this->metion = $metion;\n    }\n\n    public function create(CreatorListener $observer, $data)\n    {\n        // 检查是否重复发布评论\n        if ($this->isDuplicateReply($data)) {\n\n            return $observer->creatorFailed('请不要发布重复评论。');\n        }\n\n        $data['user_id'] = Auth::id();\n        $data['body'] = $this->metion->parse($data['body']);\n\n        $markdown = new Markdowner;\n        $data['body_original'] = $data['body'];\n        $data['body'] = $markdown->convertMarkdownToHtml($data['body']);\n\n        $reply = Reply::create($data);\n\n        if (!$reply) {\n            return $observer->creatorFailed($reply->getErrors());\n        }\n\n        // Add the comment user\n        $question = Question::findOrFail($data['question_id']);\n        $question->last_reply_user_id = Auth::id();\n        $question->reply_count++;\n        $question->updated_at = Carbon::now()->toDateTimeString();\n        $question->save();\n\n\n        Auth::user()->increment('reply_count', 1);\n        // Todo 用户评论后发送站内通知消息给被评论文章的作者\n        User::findOrFail($question['user_id'])->notify(new ReceivedReply($reply));\n        app(UserReplyQuestion::class)->generate(Auth::user(), $question);\n\n        return $observer->creatorSucceed($reply);\n    }\n\n    protected function isDuplicateReply($data)\n    {\n        $lastReply = Reply::where('user_id', Auth::id())\n            ->where('question_id', $data['question_id'])\n            ->orderBy('created_at', 'desc')\n            ->first();\n        return count($lastReply) && strcmp($lastReply->body_original, $data['body']) === 0;\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Creators/UserCreator.php",
    "content": "<?php\n\n\nnamespace App\\Codehaoshi\\Creators;\n\nuse App\\Codehaoshi\\Listeners\\UserCreatorListener;\nuse App\\Repositories\\UserRepository;\n\nclass UserCreator\n{\n    protected $userModel;\n\n    public function __construct(UserRepository $user)\n    {\n        $this->userModel = $user;\n    }\n\n    public function create(UserCreatorListener $observre, $userData)\n    {\n        if($userData['password']) {\n            $userData['password'] = bcrypt($userData['password']);\n        }\n\n        $user = $this->userModel->store($userData);\n        if (!$user) {\n            return $observre->userValidationError($user->getErrors());\n        }\n\n        if($userData['image_url']) {\n            $user->cacheAvatar();\n        }\n\n        return $observre->userCreated($user);\n    }\n}\n"
  },
  {
    "path": "app/Codehaoshi/Handler/BackupHandler.php",
    "content": "<?php\n\nnamespace APp\\Codehaoshi\\Handler;\n\nuse Illuminate\\Support\\Facades\\Mail;\nuse Naux\\Mail\\SendCloudTemplate;\n\nclass BackupHandler\n{\n    public function send($notifications)\n    {\n        $data = [\n            'info' => $notifications\n        ];\n        $template = new SendCloudTemplate('codehaoshi_notification', $data);//模板调用名称-zhihu_app_register\n\n        Mail::raw($template, function ($message) {\n            $message->from('18313852226@sina.cn', 'code 好事');\n\n            $message->to('185429135@qq.com');//发给谁\n        });\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Handler/ImageUploadHandler.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Handler;\n\nuse App\\Http\\Requests\\ImageUploadRequest;\nuse App\\Tools\\FileManager\\BaseManager;\n\nclass ImageUploadHandler\n{\n\n    /**\n     * @var UploadedFile $file\n     */\n    protected $file;\n    protected $allowed_extensions = [\"image/jpeg\", \"image/png\", \"image/gif\"];\n\n    protected $manger;\n    protected $baseManager;\n\n    public function __construct()\n    {\n        $this->baseManager = new BaseManager();\n    }\n\n    public function fileUpload(ImageUploadRequest $request, $img)\n    {\n        $result = $this->baseManager->storeUploadImgByConfigPath($img, $request->path);\n        $res = ['status' => 1, 'msg' => $result['relative_url']];\n        return response()->json($res);\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Listeners/UserCreatorListener.php",
    "content": "<?php\nnamespace App\\Codehaoshi\\Listeners;\n\ninterface UserCreatorListener\n{\n    public function userValidationError($errors);\n    public function userCreated($user);\n}\n"
  },
  {
    "path": "app/Codehaoshi/Notification/Metion.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Notification;\n\nuse App\\Models\\User;\n\nclass Metion\n{\n    public $body_parsed;\n    public $users = [];\n    public $usernames;\n    public $body_original;\n\n    public function parse($body)\n    {\n        $this->body_original = $body;\n        $this->usernames = $this->getMentionedUsername();\n\n        count($this->usernames) > 0 && $this->users = User::whereIn('user_name', $this->usernames)->get();\n        $this->replace();\n        return $this->body_parsed;\n    }\n\n\n    protected function getMentionedUsername()\n    {\n        preg_match_all(\"/(\\S*)\\@([^\\r\\n\\s]*)/i\", $this->body_original, $atlist_tmp);\n        $usernames = [];\n\n        foreach ($atlist_tmp[2] as $k => $v) {\n            if ($atlist_tmp[1][$k] || strlen($v) > 25) {\n                continue;\n            }\n            $usernames[] = $v;\n        }\n        return array_unique($usernames);\n    }\n\n    public function replace()\n    {\n        $this->body_parsed = $this->body_original;\n\n        foreach ($this->users as $user) {\n            $search = '@' . $user->user_name;\n            $place = '[' . $search . '](' . route('users.show', $user->id) . ')';\n            $this->body_parsed = str_replace($search, $place, $this->body_parsed);\n        }\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Selectors/ArticleSelector.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Selectors;\n\nuse App\\Repositories\\ArticleRepository;\n\nclass ArticleSelector\n{\n    protected  $articleRepository;\n\n    public function __construct(ArticleRepository $articleRepository)\n    {\n        $this->articleRepository = $articleRepository;\n    }\n    public function articleInfoWithPrevAndNext($id)\n    {\n\n        return [\n            'prev' => $this->articleRepository->getByIdWithoutException($id, '<'),\n            'next' => $this->articleRepository->getByIdWithoutException($id , '>'),\n        ];\n\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Selectors/QuestionSelector.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Selectors;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\QuestionRepository;\n\nclass QuestionSelector\n{\n    protected  $questionRepository;\n\n    public function __construct(QuestionRepository $questionRepository)\n    {\n        $this->questionRepository = $questionRepository;\n    }\n    public function questionInfoWithPrevAndNext($id)\n    {\n\n        return [\n            'prev' => $this->questionRepository->getByIdWithoutException($id, '<'),\n            'next' => $this->questionRepository->getByIdWithoutException($id , '>'),\n        ];\n\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Stat/Stat.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Stat;\n\nuse App\\Repositories\\ArticleCategoryRepository;\nuse App\\Repositories\\QuestionCategoryRepository;\nuse Cache;\n\nclass Stat\n{\n    protected $articleCategoryRepository;\n    protected $questionCategoryRepository;\n    const CACHE_KEY = 'site_stat';\n    const CACHE_MINUTES = 10;\n\n    public function __construct(ArticleCategoryRepository $articleCategoryRepository, QuestionCategoryRepository $questionCategoryRepository)\n    {\n        $this->articleCategoryRepository = $articleCategoryRepository;\n        $this->questionCategoryRepository = $questionCategoryRepository;\n    }\n\n    public function getCategoryAndQuestion()\n    {\n        return Cache::remember(self::CACHE_KEY, self::CACHE_MINUTES, function () {\n            $entity = new StatEntity();\n            $entity->questionList = $this->questionCategoryRepository->getAllData('*', false);\n            $entity->categoryList = $this->articleCategoryRepository->getAllData('*', false);\n            $entity->categoryList->each(function($item, $key) {\n                $item->recent_update = $item->articles()->max('created_at');\n            });\n            $entity->questionList->each(function($item, $key) {\n                $item->recent_update = $item->questions()->max('created_at');\n            });\n            return $entity;\n        });\n    }\n}"
  },
  {
    "path": "app/Codehaoshi/Stat/StatEntity.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Stat;\n\nclass StatEntity\n{\n    public $categoryList;\n    public $questionList;\n}"
  },
  {
    "path": "app/Codehaoshi/Vote/Voter.php",
    "content": "<?php\n\nnamespace Codehaoshi\\Vote;\n\nuse App\\Activities\\UserUpvoteArticle;\nuse App\\Activities\\UserUpvoteQuestion;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Models\\User;\nuse App\\Notifications\\UserVoteArticle;\nuse App\\Notifications\\UserVoteQuestion;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass Voter\n{\n    public function articleUpVote(Article $article)\n    {\n        $query = $article->votes();\n        if ($query->ByWhom(Auth::id())->count()) {\n            $result = 0;\n        } else {\n            $result = $query->create(['user_id' => Auth::id()]);\n\n            User::findOrfail($article->user_id)->notify(new UserVoteArticle($article));\n            app(UserUpvoteArticle::class)->generate(Auth::user(), $article);\n\n            $article->increment('vote_count', 1);\n        }\n\n        return $result ? ['status' => 1] : ['status' => -1];\n    }\n\n    public function articleDownVote(Article $article)\n    {\n        $query = $article->votes()->ByWhom(Auth::id());\n        if (!$query->count()) {\n            $result = 0;\n        } else {\n            $result = $query->delete();\n            $article->decrement('vote_count', 1);\n            app(UserUpvoteArticle::class)->remove(Auth::user(), $article);\n        }\n        return $result ? ['status' => 1] : ['status' => -1];\n    }\n\n    public function questionUpVote(Question $question)\n    {\n        $query = $question->votes();\n        if ($query->ByWhom(Auth::id())->count()) {\n            $result = 0;\n        } else {\n            $result = $query->create(['user_id' => Auth::id()]);\n\n            User::findOrfail($question->user_id)->notify(new UserVoteQuestion($question));\n            app(UserUpvoteQuestion::class)->generate(Auth::user(), $question);\n\n            $question->increment('vote_count', 1);\n        }\n\n        return $result ? ['status' => 1] : ['status' => -1];\n    }\n\n    public function questionDownVote(Question $question)\n    {\n        $query = $question->votes()->ByWhom(Auth::id());\n        if (!$query->count()) {\n            $result = 0;\n        } else {\n            $result = $query->delete();\n            $question->decrement('vote_count', 1);\n            app(UserUpvoteQuestion::class)->remove(Auth::user(), $question);\n        }\n        return $result ? ['status' => 1] : ['status' => -1];\n    }\n}"
  },
  {
    "path": "app/Console/Commands/BaseCommand.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse Illuminate\\Console\\Command;\n\nclass BaseCommand extends Command\n{\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Exec sheel with pretty print.\n     *\n     * @param  string $command\n     * @return mixed\n     */\n    public function execShellWithPrettyPrint($command)\n    {\n        $this->info('-- Start to install -');\n        $this->info($command);\n        $output = shell_exec($command);\n        $this->info($output);\n        $this->info('----');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/BindAdmin.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\nuse App\\Models\\Role;\nuse App\\Models\\User;\n\nclass BindAdmin extends BaseCommand\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'bindAdmin:Ucer';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'Bind Ucer to the role supper_admin';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        $this->info('-- Start... --');\n        $supper_admin = Role::findOrFail(1);\n        User::findOrFail(1)->attachRole($supper_admin);\n        User::findOrFail(1)->update(['is_admin'=>'yes']);\n        $this->info('-- The end --');\n    }\n}\n"
  },
  {
    "path": "app/Console/Commands/CodehaoshiInstall.php",
    "content": "<?php\n\nnamespace App\\Console\\Commands;\n\n\nclass CodehaoshiInstall extends BaseCommand\n{\n    /**\n     * The name and signature of the console command.\n     *\n     * @var string\n     */\n    protected $signature = 'codehaoshi:install';\n\n    /**\n     * The console command description.\n     *\n     * @var string\n     */\n    protected $description = 'First install the website';\n\n    /**\n     * Create a new command instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        parent::__construct();\n    }\n\n    /**\n     * Execute the console command.\n     *\n     * @return mixed\n     */\n    public function handle()\n    {\n        $this->execShellWithPrettyPrint('php artisan key:generate');\n        $this->execShellWithPrettyPrint('php artisan migrate');\n        $this->execShellWithPrettyPrint('php artisan passport:install');\n        $this->execShellWithPrettyPrint('php artisan db:seed --class=RolesTableSeeder');\n        $this->execShellWithPrettyPrint('php artisan db:seed --class=PermissionsTableSeeder');\n    }\n\n\n}\n"
  },
  {
    "path": "app/Console/Kernel.php",
    "content": "<?php\n\nnamespace App\\Console;\n\nuse App\\Console\\Commands\\BindAdmin;\nuse App\\Console\\Commands\\CodehaoshiInstall;\nuse Illuminate\\Console\\Scheduling\\Schedule;\nuse Illuminate\\Foundation\\Console\\Kernel as ConsoleKernel;\n\nclass Kernel extends ConsoleKernel\n{\n    /**\n     * The Artisan commands provided by your application.\n     *\n     * @var array\n     */\n    protected $commands = [\n        CodehaoshiInstall::class,\n        BindAdmin::class,\n    ];\n\n    /**\n     * Define the application's command schedule.\n     *\n     * @param  \\Illuminate\\Console\\Scheduling\\Schedule  $schedule\n     * @return void\n     */\n    protected function schedule(Schedule $schedule)\n    {\n//         $schedule->command('inspire')\n//                  ->hourly();\n//        $schedule->command('backup:clean')->daily()->everyMinute();\n        $schedule->command('backup:run --only-db')->daily();\n        $schedule->command('backup:run')->weekly();\n  //      $schedule->command('backup:run --only-db')->everyMinute();\n    }\n\n    /**\n     * Register the Closure based commands for the application.\n     *\n     * @return void\n     */\n    protected function commands()\n    {\n        require base_path('routes/console.php');\n    }\n}\n"
  },
  {
    "path": "app/Exceptions/Handler.php",
    "content": "<?php\n\nnamespace App\\Exceptions;\n\nuse Exception;\nuse Illuminate\\Auth\\AuthenticationException;\nuse Illuminate\\Foundation\\Exceptions\\Handler as ExceptionHandler;\n\nclass Handler extends ExceptionHandler\n{\n    /**\n     * A list of the exception types that should not be reported.\n     *\n     * @var array\n     */\n    protected $dontReport = [\n        \\Illuminate\\Auth\\AuthenticationException::class,\n        \\Illuminate\\Auth\\Access\\AuthorizationException::class,\n        \\Symfony\\Component\\HttpKernel\\Exception\\HttpException::class,\n        \\Illuminate\\Database\\Eloquent\\ModelNotFoundException::class,\n        \\Illuminate\\Session\\TokenMismatchException::class,\n        \\Illuminate\\Validation\\ValidationException::class,\n    ];\n\n    /**\n     * Report or log an exception.\n     *\n     * This is a great spot to send exceptions to Sentry, Bugsnag, etc.\n     *\n     * @param  \\Exception  $exception\n     * @return void\n     */\n    public function report(Exception $exception)\n    {\n        parent::report($exception);\n    }\n\n    /**\n     * Render an exception into an HTTP response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Exception  $exception\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function render($request, Exception $exception)\n    {\n        return parent::render($request, $exception);\n    }\n\n    /**\n     * Convert an authentication exception into an unauthenticated response.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Illuminate\\Auth\\AuthenticationException  $exception\n     * @return \\Illuminate\\Http\\Response\n     */\n    protected function unauthenticated($request, AuthenticationException $exception)\n    {\n        if ($request->expectsJson()) {\n            return response()->json(['error' => 'Unauthenticated.'], 401);\n        }\n\n        return redirect()->guest(route('login'));\n    }\n}\n"
  },
  {
    "path": "app/Helpers.php",
    "content": "<?php\nuse Illuminate\\Contracts\\Routing\\UrlGenerator;\n\n/**\n * Generate a url for the dashboard application.\n *\n * @param  string $path\n * @param  mixed $parameters\n * @param  bool $secure\n * @return \\Illuminate\\Contracts\\Routing\\UrlGenerator|string\n */\nfunction dashboardUrl($path = null, $parameters = [], $secure = null)\n{\n    if (is_null($path)) {\n        return app(UrlGenerator::class);\n    }\n    $path = '/dashboard' . $path;\n    return app(UrlGenerator::class)->to($path, $parameters, $secure);\n}\n\n/**\n *  Put session to flash.\n * @param string $status\n * @param string $msg\n * @param string $key\n */\nfunction flash($status = 'success', $msg = '操作成功', $key = 'toastrMsg')\n{\n    session()->flash($key, ['status' => $status, 'msg' => $msg]);\n}\n\n/**\n * @param $text\n * @param array $parameters\n * @return mixed\n */\nfunction lang($text, $parameters = [])\n{\n    return str_replace('codehaoshi.', '', trans('codehaoshi.' . $text, $parameters));\n}\n\n/**\n * @param string $url\n * @param int $status\n * @param string $msg\n * @param array $data\n * @return array\n */\nfunction ajaxReturn($url = \"\", $status = 1, $msg = '操作成功', $data = [])\n{\n    return ['status' => $status, 'msg' => $msg, 'url' => $url, 'data' => $data];\n}\n\nfunction ajaxReturnError($url = \"\", $status = 0, $msg = '操作失败', $data = [])\n{\n    return ['status' => $status, 'msg' => $msg, 'url' => $url, 'data' => $data];\n}\n\n/**\n * @param $array\n * @param $all\n * @return string\n */\nfunction roleOrPermissionDataHandle($array, $all)\n{\n    $str = \"\";\n    $intersect = array_intersect($array, array_column($all, 'id'));\n    if (count($all) > 0) {\n        foreach ($all as $key => $vo) {\n            $intro = \"【\" . $vo['display_name'] . \"】\";\n            $str .= '{ \"id\": \"' . $vo['id'] . '\", \"pId\":\"0\", \"name\":\"' . $vo['name'] . $intro . '\"';\n\n            if (!empty($array) && in_array($vo['id'], $intersect)) {\n                $str .= ' ,\"checked\":1';\n            }\n\n            $str .= '},';\n        }\n    }\n    return \"[\" . substr($str, 0, -1) . \"]\";\n}\n\n\nfunction getCdnDomain()\n{\n    return config('app.url_static') ?: config('app.url');\n}\n\nfunction getTagWeight($useCount)\n{\n    $style = 'mini';\n    if ($useCount >= 2 && $useCount < 5) {\n        $style = 'tiny';\n    } elseif ($useCount >= 5 && $useCount < 10) {\n        $style = 'small';\n    } elseif ($useCount >= 10 && $useCount < 50) {\n        $style = 'large';\n    } elseif ($useCount >= 50) {\n        $style = 'big';\n    }\n    return $style;\n}\n\nfunction getDateWithSub($date)\n{\n    $the_time = strtotime($date);\n    $now_time = time();\n    $show_time = $the_time;\n\n    $dur = $now_time - $show_time;\n\n    if($dur < 60){\n        return $dur.'秒前';\n    }else if($dur < 3600){\n        return floor($dur/60).'分钟前';\n    }else if($dur < 86400) {\n        return floor($dur/3600).'小时前';\n    }else if($dur < 259200) {//3天内\n        return floor($dur / 86400) . '天前';\n    }else{\n        return substr($date,0,-8);\n    }\n    return substr($date,0,-8);\n}"
  },
  {
    "path": "app/Http/Controllers/ActivityController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Repositories\\UserRepository;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass ActivityController extends Controller\n{\n    protected $userRepository;\n    protected $article;\n    protected $question;\n\n    public function __construct(UserRepository $userRepository, Article $article, Question $question)\n    {\n        $this->userRepository = $userRepository;\n        $this->article = $article;\n        $this->question = $question;\n    }\n\n    public function index($user_name, $view = null, Request $request)\n    {\n        $user = $this->userRepository->getByName($user_name);\n\n        if (!isset($user)) abort(404);\n\n        switch ($view) {\n            case 'article':\n                $activities = $this->article->getArticlesWithWhoFilter('default', 10, $user->id);;\n                break;\n            case 'question':\n                $activities = $this->question->getArticlesWithWhoFilter('default', 10, $user->id);;\n                break;\n            case 'following':\n                $activities = $user->followings;;\n                break;\n            case 'followed':\n                $activities = $user->followers;\n                break;\n            case 'vote':\n                $activities = $user->activities()->recent()->whereIn('type', ['UserUpvoteArticle', 'UserUpvoteQuestion'])->paginate(10);\n                break;\n            default:\n                $activities = $user->activities()->recent()->paginate(10);\n                break;\n        }\n        $user_name = $user->user_name;\n\n        return view('users.personal-center', [\n            'info' => $user,\n            'activities' => $activities,\n            'view' => $view,\n            'nowUrl' => $request->url(),\n            'articleView' => route('user_center', ['user_name' => $user_name, 'view' => 'article']),\n            'questionView' => route('user_center', ['user_name' => $user_name, 'view' => 'question']),\n            'followingView' => route('user_center', ['user_name' => $user_name, 'view' => 'following']),\n            'followedView' => route('user_center', ['user_name' => $user_name, 'view' => 'followed']),\n            'defaultView' => route('user_center', ['user_name' => $user_name, 'view' => null]),\n            'voteView' => route('user_center', ['user_name' => $user_name, 'view' => 'vote']),\n        ]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Apicontroller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse League\\Fractal\\Manager;\nuse League\\Fractal\\Resource\\Collection;\nuse League\\Fractal\\Resource\\Item;\n\nclass Apicontroller extends Controller\n{\n\n    /**\n     * @var int $statusCode\n     */\n    protected $statusCode = 200;\n\n    const CODE_WRONG_ARGS = 'GEN-FUBARGS';\n    const CODE_NOT_FOUND = 'GEN-LIKETHEWIND';\n    const CODE_INTERNAL_ERROR = 'GEN-AAAGGH';\n    const CODE_UNAUTHORIZED = 'GEN-MAYBGTFO';\n    const CODE_FORBIDDEN = 'GEN-GTFO';\n    const CODE_INVALID_MIME_TYPE = 'GEN-UMWUT';\n\n    /**\n     * @var Manager $fractal\n     */\n    protected $fractal;\n\n    public function __construct()\n    {\n        $this->fractal = new Manager;\n\n        if (isset($_GET['include'])) {\n            $this->fractal->parseIncludes($_GET['include']);\n        }\n    }\n\n    /**\n     * Respond the collection data.\n     *\n     * @param $collection\n     * @param $callback\n     * @return mixed\n     */\n    public function respondWithCollection($collection, $callback)\n    {\n        $resource = new Collection($collection, $callback);\n\n        $rootScope = $this->fractal->createData($resource);\n\n        return $this->respondWithArray($rootScope->toArray());\n    }\n\n    /**\n     * Respond the data.\n     *\n     * @param array $array\n     * @param array $headers\n     * @return mixed\n     */\n    public function respondWithArray(array $array, array $headers = [])\n    {\n        return response()->json($array, $this->statusCode, $headers);\n    }\n\n    /**\n     * Respond the error message.\n     *\n     * @param  string $message\n     * @param  string $errorCode\n     * @return json\n     */\n    protected function respondWithError($message, $errorCode)\n    {\n        if ($this->statusCode === 200) {\n            trigger_error(\n                \"You better have a really good reason for erroring on a 200...\",\n                E_USER_WARNING\n            );\n        }\n\n        return $this->respondWithArray([\n            'error' => [\n                'code' => $errorCode,\n                'http_code' => $this->statusCode,\n                'message' => $message,\n            ]\n        ]);\n    }\n\n    /**\n     * Respond the error of 'Wrong Arguments'.\n     *\n     * @param  string $message\n     * @return json\n     */\n    public function errorWrongArgs($message = 'Wrong Arguments')\n    {\n        return $this->setStatusCode(400)\n            ->respondWithError($message, self::CODE_WRONG_ARGS);\n    }\n\n    /**\n     * Get the status code.\n     *\n     * @return int $statusCode\n     */\n    public function getStatusCode()\n    {\n        return $this->statusCode;\n    }\n\n    /**\n     * Set the status code.\n     *\n     * @param $statusCode\n     * @return $this\n     */\n    public function setStatusCode($statusCode)\n    {\n        $this->statusCode = $statusCode;\n\n        return $this;\n    }\n\n    /**\n     * Respond the error of 'Unauthorized'.\n     *\n     * @param  string $message\n     * @return json\n     */\n    public function errorUnauthorized($message = 'Unauthorized')\n    {\n        return $this->setStatusCode(401)\n            ->respondWithError($message, self::CODE_UNAUTHORIZED);\n    }\n\n    /**\n     * Respond the item data.\n     *\n     * @param $item\n     * @param $callback\n     * @return mixed\n     */\n    public function respondWithItem($item, $callback)\n    {\n        $resource = new Item($item, $callback);\n\n        $rootScope = $this->fractal->createData($resource);\n\n        return $this->respondWithArray($rootScope->toArray());\n    }\n\n    /**\n     * Repond a no content response.\n     *\n     * @return response\n     */\n    public function noContent()\n    {\n        return response()->json(null, 204);\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/ArticleController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Transformers\\UserTransformer;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass ArticleController extends Apicontroller\n{\n    public function voteUser(ArticleRepository $articleRepository, $article_id)\n    {\n        $info = $articleRepository->getById($article_id)->votes()->orderBy('created_at', 'desc')->with('user')->get()->pluck('user');\n        return $this->respondWithArray($info->toArray());\n    }\n\n    public function vote(ArticleRepository $articleRepository, Request $request, $article_id)\n    {\n        $article = $articleRepository->getById($article_id);\n        if ($request->type == 'up') {\n            $result = app('Codehaoshi\\Vote\\Voter')->articleUpVote($article);\n            if ($result['status'] == 1) return $this->respondWithItem(Auth::user(), new UserTransformer);\n        } else {\n            $result = app('Codehaoshi\\Vote\\Voter')->articleDownVote($article);\n        }\n        if ($result['status'] === 1) return $this->noContent();\n        return $this->errorWrongArgs('出错了，请稍后再试');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/CommentController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserCommentArticle;\nuse App\\Codehaoshi\\Creators\\CommentCreator;\nuse App\\Http\\Requests\\StoreReplyOrCommentRequest;\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\CommentRepository;\nuse App\\Transformers\\CommentTransformer;\nuse Codehaoshi\\Core\\CreatorListener;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass CommentController extends Apicontroller implements CreatorListener\n{\n    protected $commentRepository;\n    protected $articleRepository;\n\n    public function __construct(ArticleRepository $articleRepository, CommentRepository $commentRepository)\n    {\n        parent::__construct();\n        $this->commentRepository = $commentRepository;\n        $this->articleRepository = $articleRepository;\n    }\n\n    public function show(Request $request, $article_id)\n    {\n        $article = $this->articleRepository->getById($article_id);\n        $replies = $article->getCommentsWithLimit(config('codehaoshi.comments_perpage', '200'), $request->order_by);\n        return $this->respondWithCollection($replies, new CommentTransformer);\n    }\n\n\n    public function store(StoreReplyOrCommentRequest $request)\n    {\n        return app(CommentCreator::class)->create($this, $request->all());\n    }\n\n    public function creatorSucceed($comment)\n    {\n        return $this->respondWithItem($comment, new CommentTransformer);\n    }\n\n    public function creatorFailed($error)\n    {\n        return $this->errorWrongArgs($error);\n    }\n\n    public function destroy($comment_id)\n    {\n        $comment = $this->commentRepository->getById($comment_id);\n        $this->authorize('delete', $comment);\n        $comment->delete();\n        $articleModel = $comment->article();\n        $this->articleRepository->decrementCommentCount($articleModel);\n        $article = $this->articleRepository->getById($comment->article_id);\n        $this->articleRepository->generateLastReplyUserInfo($article);\n        app(UserCommentArticle::class)->remove(Auth::user(), $article);\n\n        return $this->noContent();\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/FollowerController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserFollowedUser;\nuse App\\Notifications\\NewUserFollowNotification;\nuse App\\Repositories\\UserRepository;\nuse Auth;\n\nclass FollowerController extends Apicontroller\n{\n\n    /**\n     * @var UserRepository\n     */\n    protected $userRepository;\n\n    /**\n     * FollowersController constructor.\n     * @param $user\n     */\n    public function __construct(UserRepository $userRepository)\n    {\n        parent::__construct();\n        $this->userRepository = $userRepository;\n    }\n\n    /**\n     * @param $id\n     * @return \\Illuminate\\Http\\JsonResponse\n     */\n    public function index($id)\n    {\n        $author = $this->userRepository->getById($id);\n        return response()->json(['followed' => Auth::user()->isFollowing($author)]);\n    }\n\n    /**\n     * Follow or unfollow the other user.\n     *\n     * @param  int $id\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function doFollow()\n    {\n        $id = request('user');\n        $userToFollow = $this->userRepository->getById(request('user'));\n\n        $user = Auth::user();\n\n        if ($user->isFollowing($id)) {\n            app(UserFollowedUser::class)->remove($user, $userToFollow);\n            $user->unfollow($id);\n            $userToFollow->decrement('follower_count');\n            return response()->json(['followed' => false]);\n        } else {\n            $user->follow($id);\n\n            $userToFollow->notify(new NewUserFollowNotification());\n            $userToFollow->increment('follower_count');\n            app(UserFollowedUser::class)->generate($user, $userToFollow);\n        }\n        return response()->json(['followed' => true]);\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/QuestionController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Repositories\\QuestionRepository;\nuse App\\Transformers\\UserTransformer;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass QuestionController extends Apicontroller\n{\n    public function voteUser(QuestionRepository $questionRepository, $question_id)\n    {\n        $info = $questionRepository->getById($question_id)->votes()->orderBy('created_at', 'desc')->with('user')->get()->pluck('user');\n        return $this->respondWithArray($info->toArray());\n    }\n\n    public function vote(QuestionRepository $questionRepository, Request $request, $question_id)\n    {\n        $question = $questionRepository->getById($question_id);\n        if ($request->type == 'up') {\n            $result = app('Codehaoshi\\Vote\\Voter')->questionUpVote($question);\n            if ($result['status'] == 1) return $this->respondWithItem(Auth::user(), new UserTransformer);\n        } else {\n            $result = app('Codehaoshi\\Vote\\Voter')->questionDownVote($question);\n        }\n        if ($result['status'] === 1) return $this->noContent();\n        return $this->errorWrongArgs('出错了，请稍后再试');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/ReplyController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Activities\\UserReplyQuestion;\nuse App\\Codehaoshi\\Creators\\ReplyCreator;\nuse App\\Http\\Requests\\StoreReplyOrCommentRequest;\nuse App\\Repositories\\QuestionRepository;\nuse App\\Repositories\\ReplyRepository;\nuse App\\Transformers\\ReplyTransformer;\nuse Codehaoshi\\Core\\CreatorListener;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass ReplyController extends Apicontroller implements CreatorListener\n{\n    protected $replyRepository;\n    protected $questionRepository;\n\n    public function __construct(QuestionRepository $questionRepository, ReplyRepository $replyRepository)\n    {\n        parent::__construct();\n        $this->replyRepository = $replyRepository;\n        $this->questionRepository = $questionRepository;\n    }\n\n    public function show(Request $request, $question_id)\n    {\n        $question = $this->questionRepository->getById($question_id);\n        $replies = $question->getRepliesWithLimit(config('codehaoshi.comments_perpage', '200'), $request->order_by);\n        return $this->respondWithCollection($replies, new ReplyTransformer);\n    }\n\n    public function store(StoreReplyOrCommentRequest $request)\n    {\n        return app(ReplyCreator::class)->create($this, $request->all());\n    }\n\n    public function creatorSucceed($reply)\n    {\n        return $this->respondWithItem($reply, new ReplyTransformer);\n    }\n\n    public function creatorFailed($error)\n    {\n        return $this->errorWrongArgs($error);\n    }\n\n    public function destroy($reply_id)\n    {\n        $reply = $this->replyRepository->getById($reply_id);\n        $this->authorize('delete', $reply);\n        $reply->delete();\n        $questionModel = $reply->question();\n        $this->questionRepository->decrementReplyCount($questionModel);\n        $question = $this->questionRepository->getById($reply->question_id);\n        $this->questionRepository->generateLastReplyUserInfo($question);\n        app(UserReplyQuestion::class)->remove(Auth::user(), $question);\n\n        return $this->noContent();\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/UploadController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\ImageUploadRequest;\nuse App\\Models\\User;\nuse App\\Tools\\FileManager\\BaseManager;\n\nclass UploadController extends Controller\n{\n    protected $manger;\n    protected $baseManager;\n\n    public function __construct()\n    {\n        $this->baseManager = new BaseManager();\n    }\n\n    public function fileUpload(ImageUploadRequest $request)\n    {\n        if (!$request->hasFile('myfile')) {\n            return ajaxReturnError('', '找不到文件');\n        }\n        $img = $request->file('myfile');\n        $result = $this->baseManager->storeUploadImgByConfigPath($img, $request->path);\n        $res = ['status' => 1, 'msg' => $result['relative_url']];\n\n        if ($request->path == 'avatar') {\n            $user = (new User)->findOrFail($request->id);\n            $user->avatar = $result['relative_url'];\n            $user->save();\n        }\n        return response()->json($res);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Api/Votecontroller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Api;\n\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\n\nclass Votecontroller extends Controller\n{\n    public function vote($article_id)\n    {\n        return 333;\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/ArticlesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Http\\Requests\\ArticleRequest;\nuse App\\Models\\Article;\nuse App\\Repositories\\ArticleCategoryRepository;\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\QuestionRepository;\nuse App\\Repositories\\TagRepository;\nuse Codehaoshi\\Selectors\\ArticleSelector;\nuse Auth;\n\nclass ArticlesController extends Controller\n{\n    protected $articleRepository;\n    protected $articleCategoryRepository;\n    protected $tagRepository;\n    protected $questionRepository;\n\n    public function __construct(ArticleCategoryRepository $articleCategoryRepository, ArticleRepository $articleRepository, TagRepository $tagRepository, QuestionRepository $questionRepository)\n    {\n        $this->tagRepository = $tagRepository;\n        $this->articleRepository = $articleRepository;\n        $this->articleCategoryRepository = $articleCategoryRepository;\n        $this->questionRepository = $questionRepository;\n    }\n\n    /**\n     * Get article list by category\n     *\n     * @param $slug\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function index($slug)\n    {\n        $category = $this->articleCategoryRepository->getInfoBySlug($slug);\n        $articles = $this->articleRepository->getThisModel()->getArticlesWithFilter('category', 20, $category->id);\n\n        $hotArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('hot', 5);\n        $recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n\n        return view('articles.article-list', compact('articles', 'category', 'hotArticles', 'recentArticles', 'tags'));\n    }\n\n    /**\n     * Show article-info page\n     * @param $slug\n     * @param Article $articleModel\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function show($slug, Article $articleModel)\n    {\n        $article = $this->articleRepository->getArticleInfoBySlug($slug);\n\n        if ($article->is_draft == 'yes' || $article->only_owner_can_see == 'yes') {\n            $this->authorize('showDraft', $article);\n        }\n\n        $article->increment('view_count');\n\n        $recentArticles = $articleModel->withoutDraft()->withoutPrivate()->where('id', '<>', $article['id'])->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);\n\n        $prevAndNext = app(ArticleSelector::class)->articleInfoWithPrevAndNext($article->id);\n        return view('articles.show', ['info' => $article,\n            'recentArticles' => $recentArticles,\n            'prev' => $prevAndNext['prev'],\n            'next' => $prevAndNext['next']\n        ]);\n    }\n\n\n    /**\n     * Get All articles\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function allArticles()\n    {\n        $articles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 20);\n        return view('articles.all-articles', compact('articles'));\n    }\n\n\n    public function create()\n    {\n        $recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n\n        $catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        return view('articles.create', compact('tagList', 'catList', 'recentQuestions', 'recentArticles', 'tags'));\n    }\n\n    public function store(ArticleRequest $request)\n    {\n        $data = array_merge($request->all(), ['user_id' => Auth::id()]);\n        $res  =$this->articleRepository->store($data);\n\n        $this->articleCategoryRepository->getById($request->category_id)->increment('article_count');\n        Auth::user()->increment('article_count');\n\n        $this->articleRepository->syncTag(explode(',', $request->tags));\n        flash('info', '文章发布成功');\n        return redirect()->route('article.show', ['slug' => $res->slug]);\n    }\n\n    public function edit($id)\n    {\n        $recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n\n        $catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        $info = $this->articleRepository->getById($id);\n        $infoTag = implode(',', array_column($info->tags->toArray(), 'id'));\n\n        return view('articles.edit',compact('info','infoTag', 'catList', 'tagList', 'tags', 'recentArticles', 'recentQuestions'));\n    }\n\n    public function update(ArticleRequest $request, $id)\n    {\n        $oldData = $this->articleRepository->getById($id)->category_id;\n        if ($oldData != $request->category_id) {\n            $this->articleCategoryRepository->getById($request->category_id)->increment('article_count');\n            $this->articleCategoryRepository->getById($oldData)->decrement('article_count');\n        }\n        $data = $request->only('title', 'category_id', 'description', 'content', 'tags', 'is_draft');\n        $res = $this->articleRepository->update($id, $data);\n\n        $this->articleRepository->syncTag(explode(',', $request->tags));\n        flash('info', '文章更新成功');\n        return redirect()->route('article.show', ['slug' => $res->slug]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ForgotPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\SendsPasswordResetEmails;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Password;\n\nclass ForgotPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset emails and\n    | includes a trait which assists in sending these notifications from\n    | your application to your users. Feel free to explore this trait.\n    |\n    */\n\n    use SendsPasswordResetEmails;\n\n    /**\n     * Send a reset link to the given user.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function sendResetLinkEmail(Request $request)\n    {\n        $this->validateEmail($request);\n\n        // We will send the password reset link to this user. Once we have attempted\n        // to send the link, we will examine the response then see the message we\n        // need to show to the user. Finally, we'll send out a proper response.\n        $response = $this->broker()->sendResetLink(\n            $request->only('email')\n        );\n\n        return $response == Password::RESET_LINK_SENT\n            ? $this->sendResetLinkResponse($response, $request)\n            : $this->sendResetLinkFailedResponse($request, $response);\n    }\n    /**\n     * Get the response for a successful password reset link.\n     *\n     * @param  string  $response\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    protected function sendResetLinkResponse($response, $request)\n    {\n        return back()->with('status', trans($response))->with('old-email', $request->email);;\n    }\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/LoginController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Codehaoshi\\Creators\\UserCreator;\nuse App\\Codehaoshi\\Listeners\\UserCreatorListener;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Auth\\Traits\\SocialiteHelper;\nuse App\\Repositories\\UserRepository;\nuse Illuminate\\Foundation\\Auth\\AuthenticatesUsers;\nuse Illuminate\\Http\\Request;\nuse Session;\nuse Auth;\nuse Carbon\\Carbon;\n\nclass LoginController extends Controller implements UserCreatorListener\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Login Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles authenticating users for the application and\n    | redirecting them to your home screen. The controller uses a trait\n    | to conveniently provide its functionality to your applications.\n    |\n    */\n\n    use AuthenticatesUsers, SocialiteHelper;\n\n    /**\n     * Where to redirect users after login.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/';\n    protected $userRepository;\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct(UserRepository $userRepository)\n    {\n        $this->middleware('guest')->except('logout');\n        $this->userRepository = $userRepository;\n    }\n\n//    public function username()\n//    {\n//        return ['user_name','email'];\n//    }\n\n    /**\n     * Show the application's login form.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function showLoginForm()\n    {\n        return view('auth.signin');\n    }\n\n    /**\n     * ----------------------------------------\n     * GithubAuthenticatorListener Delegate\n     * ----------------------------------------\n     */\n    public function userNotFound($driver, $registerUserData)\n    {\n        if ($driver == 'github') {\n            $oauthData['image_url'] = $registerUserData->avatar;\n            $oauthData['github_id'] = $registerUserData->user['id'];\n            $oauthData['github_name'] = $registerUserData->user['login'];\n            $oauthData['nickname'] = $registerUserData->nickname;\n            $oauthData['user_name'] = $registerUserData->user['login'];\n            $oauthData['email'] = $registerUserData->email;\n        } elseif ($driver == 'wechat') {\n            return '暂不支持微信登录';\n        }\n        $oauthData['register_source'] = $driver;\n        $oauthData['status'] = 1;\n        $oauthData['password'] = '';\n\n        Session::put('oauthData', $oauthData);\n\n        return app(UserCreator::class)->create($this, $oauthData);\n    }\n\n    /**\n     * Implements UserCreatorLister\n     *\n     * @param  [type] $errors [description]\n     * @return [type]         [description]\n     */\n    public function userValidationError($errors)\n    {\n        return redirect('/');\n    }\n\n    /**\n     * Implements UserCreatorLister.\n     * When user was created success, excute this method\n     *\n     * @param  [type] $user [description]\n     * @return [type]       [description]\n     */\n    public function userCreated($user)\n    {\n        $this->userRepository->save($user, ['last_actived_at' => Carbon::now()]);\n\n        Auth::login($user, true);\n        Session::forget('oauthData');\n\n        flash('info', lang('login_Successful'));\n        return redirect('/');\n    }\n\n    /**\n     * User's account had been disabled\n     *\n     * @return \\Illuminate\\Http\\RedirectResponse|\\Illuminate\\Routing\\Redirector\n     */\n    public function accountDisabled()\n    {\n        Session::forget('oauthData');\n        flash('error', lang('sorry,your account has been disabled.'));\n        return redirect('/');\n    }\n\n    /**\n     * Log the user out of the application.\n     *\n     * @param  \\Illuminate\\Http\\Request $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function logout()\n    {\n        Auth::logout();\n        flash('info', lang('operation succeeded.'));\n        return redirect('/');\n    }\n\n    /**\n     * to login user\n     * @param  [type] $user [description]\n     * @return [type]       [description]\n     */\n    private function loginUser($user)\n    {\n        return $this->userCreated($user);\n    }\n\n\n    /**\n     * Handle a login request to the application.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @return \\Illuminate\\Http\\RedirectResponse|\\Illuminate\\Http\\Response\n     */\n    public function login(Request $request)\n    {\n        $this->validateLogin($request);\n\n        // If the class is using the ThrottlesLogins trait, we can automatically throttle\n        // the login attempts for this application. We'll key this by the username and\n        // the IP address of the client making these requests into this application.\n        if ($this->hasTooManyLoginAttempts($request)) {\n            $this->fireLockoutEvent($request);\n\n            return $this->sendLockoutResponse($request);\n        }\n\n        if ($this->attemptLogin($request)) {\n            flash('info', '登录成功');\n            $this->userRepository->save(Auth::user(), ['last_actived_at' => Carbon::now()]);\n            return $this->sendLoginResponse($request);\n        }\n\n        // If the login attempt was unsuccessful we will increment the number of attempts\n        // to login and redirect the user back to the login form. Of course, when this\n        // user surpasses their maximum number of attempts they will get locked out.\n        $this->incrementLoginAttempts($request);\n\n        return $this->sendFailedLoginResponse($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/RegisterController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Codehaoshi\\Listeners\\UserCreatorListener;\nuse App\\Models\\User;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Illuminate\\Support\\Facades\\Validator;\nuse Illuminate\\Foundation\\Auth\\RegistersUsers;\nuse Auth;\nuse Session;\n\nclass RegisterController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Register Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller handles the registration of new users as well as their\n    | validation and creation. By default this controller uses a trait to\n    | provide this functionality without requiring any additional code.\n    |\n    */\n\n    use RegistersUsers;\n\n    /**\n     * Where to redirect users after registration.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n\n    /**\n     * Show the application's login form.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function showRegistrationForm()\n    {\n        return view('auth.signup');\n    }\n\n    /**\n     * Get a validator for an incoming registration request.\n     *\n     * @param  array $data\n     * @return \\Illuminate\\Contracts\\Validation\\Validator\n     */\n    protected function validator(array $data)\n    {\n        return Validator::make($data, [\n            'user_name' => 'alpha_num|required|unique:users',\n            'email' => 'email|required|unique:users',\n            'password' => 'required|confirmed|min:6',\n        ]);\n    }\n\n    /**\n     * Create a new user instance after a valid registration.\n     *\n     * @param  array $data\n     * @return User\n     */\n    protected function create(array $data)\n    {\n        return User::create([\n            'user_name' => $data['user_name'],\n            'email' => $data['email'],\n            'password' => bcrypt($data['password']),\n            'avatar' => '/assets/dashboard/images/head_default.gif',\n            'register_source' => 'front-register',\n            'status' => 1,\n            'is_admin' => 'no',\n        ]);\n    }\n\n    /**\n     * Handle a registration request for the application.\n     *\n     * @param  \\Illuminate\\Http\\Request $request\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function register(Request $request)\n    {\n        $data = $request->all();\n        $this->validator($data)->validate();\n\n        $this->guard()->login($this->create($data));\n        flash('info', '注册成功，欢迎加入');\n\n        return redirect()->to($this->redirectTo);\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/ResetPasswordController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth;\n\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Foundation\\Auth\\ResetsPasswords;\n\nclass ResetPasswordController extends Controller\n{\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Controller\n    |--------------------------------------------------------------------------\n    |\n    | This controller is responsible for handling password reset requests\n    | and uses a simple trait to include this behavior. You're free to\n    | explore this trait and override any methods you wish to tweak.\n    |\n    */\n\n    use ResetsPasswords;\n\n    /**\n     * Where to redirect users after resetting their password.\n     *\n     * @var string\n     */\n    protected $redirectTo = '/';\n\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('guest');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Auth/Traits/SocialiteHelper.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Auth\\Traits;\n\nuse Socialite;\nuse Auth;\nuse Flash;\nuse Illuminate\\Http\\Request;\nuse Session;\n\ntrait SocialiteHelper\n{\n    protected $oauthDrivers = ['github' => 'github', 'wechat' => 'weixin'];\n\n    /**\n     * Redirect the user to the GitHub authentication page.\n     *\n     * @return Response\n     */\n    public function redirectToGithubProvider(Request $request)\n    {\n        $driver = 'github';\n        if (Auth::check() && Auth::user()->register_source == $driver) {\n            return redirect('/');\n        }\n\n        return Socialite::driver($driver)->redirect();\n    }\n\n\n    /**\n     * Obtain the user information from GitHub.\n     *\n     * @return Response\n     */\n    public function handleGithubProviderCallback(Request $request)\n    {\n        $driver = 'github';\n\n        if (\n        (Auth::check() && Auth::user()->register_source == $driver) // If is github register user signined.\n        ) {\n            return redirect()->intended('/');\n        }\n\n        $oauthUser = Socialite::driver($driver)->user();\n        $user = $this->userRepository->getFirstRecordByWhere([$driver . '_id' => $oauthUser->id]);// Select database is existence the user.\n\n        if (Auth::check()) {  // TODO\n            if ($user && $user->id != Auth::id()) {\n                flash('error', 'Sorry, this socialite account has been registed.', ['driver' => $driver]);\n            } else {\n                return '绑定账号功能待完善';\n            }\n\n        } else {\n            if ($user) {\n                if ($user->status < 1) return $this->accountDisabled();\n                return $this->loginUser($user);\n            }\n            return $this->userNotFound($driver, $oauthUser);\n        }\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/CommentsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Codehaoshi\\Creators\\CommentCreator;\nuse App\\Http\\Requests\\StoreReplyOrCommentRequest;\nuse App\\Repositories\\ArticleRepository;\nuse Codehaoshi\\Core\\CreatorListener;\n\nclass CommentsController extends Controller implements CreatorListener\n{\n\n    protected $articleRepository;\n\n    public function __construct(ArticleRepository $articleRepository)\n    {\n        $this->middleware('auth');\n        $this->articleRepository = $articleRepository;\n    }\n\n    public function store(StoreReplyOrCommentRequest $request)\n    {\n        return app(CommentCreator::class)->create($this, $request->except('_token'));\n    }\n\n    public function creatorSucceed($article)\n    {\n        flash('info', lang('Operation succeed.'));\n        $articleSlug = $this->articleRepository->getById($article->article_id)->slug;\n        return redirect()->route('article.show', ['slug' => $articleSlug]);\n    }\n\n    public function creatorFailed($error)\n    {\n        flash('error', '发布失败:' . $error);\n        return redirect('/');\n\n    }\n\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Controller.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Foundation\\Bus\\DispatchesJobs;\nuse Illuminate\\Routing\\Controller as BaseController;\nuse Illuminate\\Foundation\\Validation\\ValidatesRequests;\nuse Illuminate\\Foundation\\Auth\\Access\\AuthorizesRequests;\n\nclass Controller extends BaseController\n{\n    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/AboutsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Repositories\\AboutRepository;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\n\nclass AboutsController extends Controller\n{\n    protected $about;\n\n    public function __construct(AboutRepository $about)\n    {\n        $this->about = $about;\n    }\n\n    public function abouts()\n    {\n        $list = $this->about->getAllData('*', false);\n        return view('dashboard.abouts.about-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.abouts.create');\n    }\n\n    public function store(Request $request)\n    {\n        $data = $request->all();\n\n        $this->about->store($data);\n        return ajaxReturn(dashboardUrl('/abouts'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.abouts.edit', ['info' => $this->about->getById($id)]);\n    }\n\n    public function update(Request $request, $id)\n    {\n        $data = $request->all();\n        $this->about->update($id, $data);\n        return ajaxReturn(dashboardUrl('/abouts'));\n    }\n\n    public function destroy($id)\n    {\n        $this->about->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/ArticleCategoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreArticleCategoryRequest;\nuse App\\Http\\Requests\\UpdateArticleCategoryRequest;\nuse App\\Repositories\\ArticleCategoryRepository;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Tools\\FileManager\\BaseManager;\n\nclass ArticleCategoryController extends Controller\n{\n\n    protected $articleCategoryRepository;\n    protected $baseManager;\n\n    public function __construct(ArticleCategoryRepository $articleCategoryRepository, BaseManager $baseManager)\n    {\n        $this->articleCategoryRepository = $articleCategoryRepository;\n        $this->baseManager = $baseManager;\n    }\n\n    public function articleCategories()\n    {\n        $list = $this->articleCategoryRepository->getAllData('*', false);\n        return view('dashboard.article-categories.category-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.article-categories.create');\n    }\n\n    public function store(StoreArticleCategoryRequest $request)\n    {\n        $data = array_merge($request->all(), [\n            'image_url' => $this->baseManager->moveFileTorealPath($request->image_url),\n            'weight' => $request->weight ?: 50\n        ]);\n\n        $this->articleCategoryRepository->store($data);\n        return ajaxReturn(dashboardUrl('/articleCategory'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.article-categories.edit', ['info' => $this->articleCategoryRepository->getById($id)]);\n    }\n\n    public function update(UpdateArticleCategoryRequest $request, $id)\n    {\n        $data = array_merge($request->all(), [\n            'image_url' => $this->baseManager->moveFileTorealPath($request->image_url),\n            'weight' => $request->weight ?: 50\n        ]);\n        $this->articleCategoryRepository->update($id, $data);\n        return ajaxReturn(dashboardUrl('/articleCategory'));\n    }\n\n    public function destroy($id)\n    {\n        $permissions = $this->articleCategoryRepository->getById($id)->articles()->count();\n        if ($permissions > 0) return ajaxReturnError('', 0, '有文章正在使用该分类，不允许删除');\n\n        $this->articleCategoryRepository->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/ArticlesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Controllers\\Dashboard\\Traits\\ArticleHelper;\nuse App\\Http\\Requests\\ArticleRequest;\nuse App\\Repositories\\ArticleCategoryRepository;\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\TagRepository;\nuse Config;\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass ArticlesController extends Controller\n{\n    use ArticleHelper;\n\n    protected $articleRepository;\n    protected $articleCategoryRepository;\n    protected $tagRepository;\n\n    public function __construct(ArticleCategoryRepository $articleCategoryRepository, ArticleRepository $articleRepository, TagRepository $tagRepository)\n    {\n        $this->articleRepository = $articleRepository;\n        $this->articleCategoryRepository = $articleCategoryRepository;\n        $this->tagRepository = $tagRepository;\n    }\n\n    public function articles()\n    {\n        $category_list = $this->articleCategoryRepository->getAllData('*', false);\n        return view('dashboard.articles.article-list', compact('category_list'));\n    }\n\n    /**\n     * Article List ajax page date\n     *\n     * @param Request $request\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function ajaxArticles(Request $request)\n    {\n        $order = $request->order?: 'weight';\n        $sort = $request->sort?: 'asc';\n        $keywords = $request->keywords;\n        $is_hot = $request->is_hot;\n        $only_owner_can_see = $request->only_owner_can_see;\n        $is_excellent = $request->is_excellent;\n        $is_draft = $request->is_draft;\n        $category_id = $request->cat_id;\n\n        $where = [];\n        if ($request->keywords) {\n            $where[] = ['title', 'like', \"%$keywords%\"];\n        }\n        if($is_hot) $where[] = ['is_hot' , '=', $is_hot];\n        if($only_owner_can_see) $where[] = ['only_owner_can_see' , '=', $only_owner_can_see];\n        if($is_excellent) $where[] = ['is_excellent' , '=', $is_excellent];\n        if($is_draft) $where[] = ['is_draft' , '=', $is_draft];\n        if($category_id) $where[] = ['category_id' , '=', $category_id];\n\n        $lists = $this->articleRepository->page($where, Config::get('dashboard.pagesize'), $order, $sort);\n        return view('dashboard.articles.ajax-article-list', compact('lists', 'order', 'sort'));\n\n    }\n\n    public function create()\n    {\n        $catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n\n        return view('dashboard.articles.create', ['catList' => $catList, 'tagList' => $tagList]);\n    }\n\n    public function store(ArticleRequest $request)\n    {\n        $data = $this->handleArticleDate($request->all());\n        $this->articleRepository->store($data);\n\n        $this->articleCategoryRepository->getById($request->category_id)->increment('article_count');\n        Auth::user()->increment('article_count');\n\n        $this->articleRepository->syncTag(explode(',', $request->tags));\n        return ajaxReturn(dashboardUrl('/article'));\n    }\n\n    public function edit($id)\n    {\n        $catList = $this->articleCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        $model = $this->articleRepository->getById($id);\n\n        $attribute = $this->handleArticleDateToStr($model);\n\n        return view('dashboard.articles.edit', ['info' => $model,\n            'catList' => $catList, 'tagList' => $tagList,\n            'tags' => array_column($model->tags->toArray(), 'id'),\n            'attribute' => $attribute\n        ]);\n    }\n\n    public function update(ArticleRequest $request, $id)\n    {\n        $oldData = $this->articleRepository->getById($id)->category_id;\n        if ($oldData != $request->category_id) {\n            $this->articleCategoryRepository->getById($request->category_id)->increment('article_count');\n            $this->articleCategoryRepository->getById($oldData)->decrement('article_count');\n        }\n        $data = $this->handleArticleDate($request->all());\n        unset($data['user_id']);\n        $this->articleRepository->update($id, $data);\n\n        $this->articleRepository->syncTag(explode(',', $request->tags));\n        return ajaxReturn(dashboardUrl('/article'));\n    }\n\n\n    public function destroy($id)\n    {\n        $info = $this->articleRepository->getById($id);\n        $this->articleCategoryRepository->getById($info->category_id)->decrement('article_count');\n        Auth::user()->decrement('article_count');\n\n        $info->tags()->sync([]);\n\n        $this->articleRepository->destroy($id);\n\n        return ajaxReturn(dashboardUrl('/article'));\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/IndexController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Models\\Role;\nuse App\\Models\\User;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse Config;\nuse DB;\n\nclass IndexController extends Controller\n{\n\n    public function __construct()\n    {\n        $this->user = new User();\n        $this->role = new Role();\n//        $this->permission = new Permission();\n    }\n\n    public function index()\n    {\n//        dd(Config::get('dashboardMenu.leftMenu'));\n        return view('dashboard.index.index', ['menu_list' => Config::get('dashboardMenu.leftMenu')]);\n    }\n\n    public function welcome()\n    {\n        return view('dashboard.index.welcome');\n    }\n\n    /*修改某个表的一个字段值公共方法*/\n    public function commonStatusHandle(Request $request)\n    {\n        $data = $request->all();\n        $id = $data['id'];\n        $table = $data['table'];\n        $column = $data['column'];\n        $value = $data['value'];\n\n        $rs = DB::table($table)->where(['id' => $id])->update([$column => $value]);\n        if ($rs) return ajaxReturn();\n        return ajaxReturnError();\n    }\n\n    public function test($model)\n    {\n        $res = $this->$model->saveFunction();\n        dd($res);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/LinksController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Repositories\\LinkRepository;\nuse Illuminate\\Http\\Request;\n\nclass LinksController extends Controller\n{\n    protected $link;\n\n    public function __construct(LinkRepository $link)\n    {\n        $this->link = $link;\n    }\n\n    public function links()\n    {\n        $list = $this->link->getAllData('*', false);\n        return view('dashboard.links.link-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.links.create');\n    }\n\n    public function store(Request $request)\n    {\n        $data = $request->all();\n\n        $this->link->store($data);\n        return ajaxReturn(dashboardUrl('/links'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.links.edit', ['info' => $this->link->getById($id)]);\n    }\n\n    public function update(Request $request, $id)\n    {\n        $data = $request->all();\n        $this->link->update($id, $data);\n        return ajaxReturn(dashboardUrl('/links'));\n    }\n\n    public function destroy($id)\n    {\n        $this->link->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/PermissionsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StorePermissionRequest;\nuse App\\Http\\Requests\\UpdatePermissionRequest;\nuse App\\Repositories\\PermissionRepository;\nuse Illuminate\\Http\\Request;\nuse App\\Http\\Controllers\\Controller;\nuse Config;\n\nclass PermissionsController extends Controller\n{\n    protected $permissionRepository;\n\n    public function __construct(PermissionRepository $permissionRepository)\n    {\n        $this->permissionRepository = $permissionRepository;\n    }\n\n    public function roles()\n    {\n        return view('dashboard.permissions.permission-list');\n    }\n\n    public function ajaxPermissions(Request $request)\n    {\n        $keywords = $request->keywords;\n        $where = [];\n        if ($request->keywords) {\n            $where[] = ['name', 'like', \"%$keywords%\"];\n        }\n\n        $list = $this->permissionRepository->page($where, Config::get('dashboard.pagesize'), 'created_at', 'desc');\n\n        return view('dashboard.permissions.ajax-permission-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.permissions.create');\n    }\n\n    public function store(StorePermissionRequest $request)\n    {\n        $this->permissionRepository->store($request->all());\n        return ajaxReturn(dashboardUrl('/permission'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.permissions.edit', ['info' => $this->permissionRepository->getById($id)]);\n    }\n\n    public function update(UpdatePermissionRequest $request, $id)\n    {\n        $this->permissionRepository->update($id, $request->all());\n        return ajaxReturn(dashboardUrl('/permission'));\n    }\n\n    public function destroy($id)\n    {\n        $permissions = $this->permissionRepository->getById($id)->roles()->count();\n        if ($permissions > 0) return ajaxReturnError('', 0, '有角色正在使用该权限，不允许删除');\n\n        $this->permissionRepository->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/QuestionCategoryController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreQuestionCategoryRequest;\nuse App\\Http\\Requests\\UpdateQuestionCategoryRequest;\nuse App\\Repositories\\QuestionCategoryRepository;\nuse App\\Http\\Controllers\\Controller;\nuse App\\Tools\\FileManager\\BaseManager;\n\nclass QuestionCategoryController extends Controller\n{\n    protected $questionCategoryRepository;\n    protected $baseManager;\n\n    public function __construct(QuestionCategoryRepository $questionCategoryRepository, BaseManager $baseManager)\n    {\n        $this->questionCategoryRepository = $questionCategoryRepository;\n        $this->baseManager = $baseManager;\n    }\n\n    public function questionCategories()\n    {\n        $list = $this->questionCategoryRepository->getAllData('*', false);\n        return view('dashboard.question-categories.category-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.question-categories.create');\n    }\n\n    public function store(StoreQuestionCategoryRequest $request)\n    {\n        $data = array_merge($request->all(), [\n            'image_url' => $this->baseManager->moveFileTorealPath($request->image_url,'question'),\n            'weight' => $request->weight ?: 50\n        ]);\n\n        $this->questionCategoryRepository->store($data);\n        return ajaxReturn(dashboardUrl('/questionCategory'));\n    }\n\n\n    public function edit($id)\n    {\n        return view('dashboard.question-categories.edit', ['info' => $this->questionCategoryRepository->getById($id)]);\n    }\n    public function update(UpdateQuestionCategoryRequest $request, $id)\n    {\n        $data = array_merge($request->all(), [\n            'image_url' => $this->baseManager->moveFileTorealPath($request->image_url, 'question'),\n            'weight' => $request->weight ?: 50\n        ]);\n        $this->questionCategoryRepository->update($id, $data);\n        return ajaxReturn(dashboardUrl('/questionCategory'));\n    }\n\n    public function destroy($id)\n    {\n        $permissions = $this->questionCategoryRepository->getById($id)->questions()->count();\n        if ($permissions > 0) return ajaxReturnError('', 0, '有问题正在使用该分类，不允许删除');\n\n        $this->questionCategoryRepository->destroy($id);\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/QuestionsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Controllers\\Dashboard\\Traits\\ArticleHelper;\nuse App\\Http\\Requests\\QuestionRequest;\nuse App\\Repositories\\QuestionCategoryRepository;\nuse App\\Repositories\\QuestionRepository;\nuse App\\Repositories\\TagRepository;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Auth;\nuse Config;\n\nclass QuestionsController extends Controller\n{\n    use ArticleHelper;\n    protected $questionRepository;\n    protected $questionCategoryRepository;\n    protected $tagRepository;\n\n    public function __construct(QuestionCategoryRepository $questionCategoryRepository, QuestionRepository $questionRepository, TagRepository $tagRepository)\n    {\n        $this->questionRepository = $questionRepository;\n        $this->questionCategoryRepository = $questionCategoryRepository;\n        $this->tagRepository = $tagRepository;\n    }\n\n    public function questions()\n    {\n        $category_list = $this->questionCategoryRepository->getAllData('*', false);\n        return view('dashboard.questions.question-list', compact('category_list'));\n    }\n\n    /**\n     * Article List ajax page date\n     *\n     * @param Request $request\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function ajaxQuestions(Request $request)\n    {\n        $order = $request->order?: 'weight';\n        $sort = $request->sort?: 'asc';\n        $keywords = $request->keywords;\n        $is_hot = $request->is_hot;\n        $only_owner_can_see = $request->only_owner_can_see;\n        $is_excellent = $request->is_excellent;\n        $is_draft = $request->is_draft;\n        $category_id = $request->cat_id;\n\n        $where = [];\n        if ($request->keywords) {\n            $where[] = ['title', 'like', \"%$keywords%\"];\n        }\n        if($is_hot) $where[] = ['is_hot' , '=', $is_hot];\n        if($only_owner_can_see) $where[] = ['only_owner_can_see' , '=', $only_owner_can_see];\n        if($is_excellent) $where[] = ['is_excellent' , '=', $is_excellent];\n        if($is_draft) $where[] = ['is_draft' , '=', $is_draft];\n        if($category_id) $where[] = ['category_id' , '=', $category_id];\n\n        $lists = $this->questionRepository->page($where, Config::get('dashboard.pagesize'), $order, $sort);\n        return view('dashboard.questions.ajax-question-list', compact('lists', 'order', 'sort'));\n\n    }\n\n    public function create()\n    {\n        $catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n\n        return view('dashboard.questions.create', ['catList' => $catList, 'tagList' => $tagList]);\n    }\n\n    public function store(QuestionRequest $request)\n    {\n        $data = $this->handleArticleDate($request->all());\n\n        $this->questionRepository->store($data);\n\n        $this->questionCategoryRepository->getById($request->category_id)->increment('question_count');\n        Auth::user()->increment('question_count');\n\n        $this->questionRepository->syncTag(explode(',', $request->tags));\n        return ajaxReturn(dashboardUrl('/question'));\n    }\n\n\n    public function edit($id)\n    {\n        $catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        $model = $this->questionRepository->getById($id);\n\n        $attribute = $this->handleArticleDateToStr($model);\n\n        return view('dashboard.questions.edit', ['info' => $model,\n            'catList' => $catList, 'tagList' => $tagList,\n            'tags' => array_column($model->tags->toArray(), 'id'),\n            'attribute' => $attribute\n        ]);\n    }\n\n    public function update(QuestionRequest $request, $id)\n    {\n        $oldData = $this->questionRepository->getById($id)->category_id;\n        if ($oldData != $request->category_id) {\n            $this->questionCategoryRepository->getById($request->category_id)->increment('question_count');\n            $this->questionCategoryRepository->getById($oldData)->decrement('question_count');\n        }\n        $data = $this->handleArticleDate($request->all());\n        unset($data['user_id']);\n        $this->questionRepository->update($id, $data);\n\n        $this->questionRepository->syncTag(explode(',', $request->tags));\n        return ajaxReturn(dashboardUrl('/question'));\n    }\n\n\n    public function destroy($id)\n    {\n        $info = $this->questionRepository->getById($id);\n        $this->questionCategoryRepository->getById($info->category_id)->decrement('question_count');\n        Auth::user()->decrement('question_count');\n\n        $info->tags()->sync([]);\n\n        $this->questionRepository->destroy($id);\n\n        return ajaxReturn(dashboardUrl('/question'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/RolesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\n\nuse App\\Http\\Controllers\\Controller;\nuse App\\Http\\Requests\\StoreRoleRequest;\nuse App\\Http\\Requests\\UpdateRoleRequest;\nuse App\\Repositories\\PermissionRepository;\nuse App\\Repositories\\RoleRepository;\nuse Illuminate\\Http\\Request;\nuse Config;\n\nclass RolesController extends Controller\n{\n    protected $roleRepository;\n    protected $permissionRepository;\n\n    public function __construct(RoleRepository $roleRepository, PermissionRepository $permissionRepository)\n    {\n        $this->roleRepository = $roleRepository;\n        $this->permissionRepository = $permissionRepository;\n    }\n\n    public function roles()\n    {\n        return view('dashboard.roles.role-list');\n    }\n\n    public function ajaxRoles(Request $request)\n    {\n        $keywords = $request->keywords;\n        $where = [];\n        if ($request->keywords) {\n            $where[] = ['name', 'like', \"%$keywords%\"];\n        }\n\n        $list = $this->roleRepository->page($where, Config::get('dashboard.pagesize'), 'created_at', 'desc');\n\n        return view('dashboard.roles.ajax-role-list', ['lists' => $list]);\n\n    }\n\n    public function create()\n    {\n        return view('dashboard.roles.create');\n    }\n\n    public function store(StoreRoleRequest $request)\n    {\n        $this->roleRepository->store($request->all());\n        return ajaxReturn(dashboardUrl('/role'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.roles.edit', ['info' => $this->roleRepository->getById($id)]);\n    }\n\n    public function update(UpdateRoleRequest $request, $id)\n    {\n        $this->roleRepository->update($id, $request->all());\n        return ajaxReturn(dashboardUrl('/role'));\n    }\n\n    public function giveRolePermissions(Request $request)\n    {\n        $permissions = $this->roleRepository->getById($request->id)->cachedPermissions();\n        return response()->json(\n            ajaxReturn('', 1, '成功',\n                roleOrPermissionDataHandle(array_column($permissions->toArray(), 'id'), $this->permissionRepository->getAllData(['id', 'name', 'display_name'])\n                )));\n    }\n\n    public function giveRolePermissionsStore(Request $request)\n    {\n        $ids = [];\n        if ($request->data) {\n            $ids = explode(',', $request->data);\n        }\n        $this->roleRepository->syncPermission($ids, $request->id);\n        return ajaxReturn(redirect()->back());\n    }\n\n    public function destroy($id)\n    {\n        $permissions = $this->roleRepository->getById($id)->users()->count();\n        if ($permissions > 0) return ajaxReturnError('', 0, '有用户正在使用该角色，不允许删除');\n\n        $this->roleRepository->syncPermission([], $id);\n        $this->roleRepository->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/TagsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreTagRequest;\nuse App\\Http\\Requests\\UpdateTagRequest;\nuse App\\Repositories\\TagRepository;\nuse App\\Http\\Controllers\\Controller;\n\nclass TagsController extends Controller\n{\n\n    protected $tagRepository;\n\n    public function __construct(TagRepository $tagRepository)\n    {\n        $this->tagRepository = $tagRepository;\n    }\n\n    public function tags()\n    {\n        $list = $this->tagRepository->getAllData('*', false);\n        return view('dashboard.tags.tag-list', ['lists' => $list]);\n    }\n\n    public function create()\n    {\n        return view('dashboard.tags.create');\n    }\n\n    public function store(StoreTagRequest $request)\n    {\n        $this->tagRepository->store($request->all());\n        return ajaxReturn(dashboardUrl('/tag'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.tags.edit', ['info' => $this->tagRepository->getById($id)]);\n    }\n\n    public function update(UpdateTagRequest $request, $id)\n    {\n        $this->tagRepository->update($id, $request->all());\n        return ajaxReturn(dashboardUrl('/tag'));\n    }\n\n\n    public function destroy($id)\n    {\n        $tagArticle = $this->tagRepository->getById($id)->articles()->count();\n        if ($tagArticle > 0) return ajaxReturnError('', 0, '该标签下有文章，不允许删除');\n//        if ($tagArticle > 0) return ajaxReturnError('', 0, '该标签下有问题，不允许删除'); // TODO\n\n        $this->tagRepository->destroy($id);\n\n        return ajaxReturn(dashboardUrl('/tag'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/Dashboard/Traits/ArticleHelper.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard\\Traits;\n\nuse Auth;\nuse Carbon\\Carbon;\n\ntrait ArticleHelper\n{\n    protected function handleArticleDate($data)\n    {\n        $attribute['is_excellent'] = $attribute['is_hot'] = $attribute['only_owner_can_see'] = $attribute['is_draft'] = 'no';\n\n        $attribute['user_id'] = Auth::id();\n        if (strstr($data['attribute'], '1')) $attribute['is_excellent'] = 'yes';\n        if (strstr($data['attribute'], '2')) $attribute['is_hot'] = 'yes';\n        if (strstr($data['attribute'], '3')) $attribute['only_owner_can_see'] = 'yes';\n        if (strstr($data['attribute'], '4')) $attribute['is_draft'] = 'yes';\n        $attribute['published_at'] = isset($data['published_at']) ?: Carbon::now();\n        $attribute['weight'] = isset($data['weight']) ?: 50;\n\n        return array_merge($data, $attribute);\n    }\n\n    protected function handleArticleDateToStr($model)\n    {\n        $attribute = [];\n        if ($model->is_excellent == 'yes') $attribute[] = '1';\n        if ($model->is_hot == 'yes') $attribute[] = '2';\n        if ($model->only_owner_can_see == 'yes') $attribute[] = '3';\n        if ($model->is_draft == 'yes') $attribute[] = '4';\n        if (count($attribute) > 0) {\n            return implode(',', $attribute);\n        } else {\n            return '';\n        }\n    }\n}"
  },
  {
    "path": "app/Http/Controllers/Dashboard/UsersController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers\\Dashboard;\n\nuse App\\Http\\Requests\\StoreUserRequest;\nuse App\\Http\\Requests\\UpdateUserRequest;\nuse App\\Repositories\\RoleRepository;\nuse App\\Repositories\\UserRepository;\nuse App\\Http\\Controllers\\Controller;\nuse Illuminate\\Http\\Request;\nuse Config;\nuse Auth;\n\nclass UsersController extends Controller\n{\n    protected $userRepository;\n    protected $roleRepository;\n\n    public function __construct(UserRepository $userRepository, RoleRepository $roleRepository)\n    {\n        $this->userRepository = $userRepository;\n        $this->roleRepository = $roleRepository;\n    }\n\n    public function users()\n    {\n        return view('dashboard.users.user-list');\n    }\n\n    public function ajaxUsers(Request $request)\n    {\n        $keywords = $request->keywords;\n        $where = [];\n        if ($request->keywords) {\n            $where['k'][] = ['user_name', 'like', \"%$keywords%\"];\n            $where['k2'][] = ['email', 'like', \"%$keywords%\"];\n        }\n\n        $list = $this->userRepository->page($where, Config::get('dashboard.pagesize'));\n\n        return view('dashboard.users.ajax-user-list', ['lists' => $list]);\n\n    }\n\n    public function create()\n    {\n        return view('dashboard.users.create');\n    }\n\n    public function store(StoreUserRequest $request)\n    {\n        $data = array_merge($request->all(), [\n            'avatar' => '/assets/dashboard/images/head_default.gif',\n            'register_source' => 'admin',\n            'password' => bcrypt($request->password),\n            'status' => 1\n        ]);\n        $this->userRepository->store($data);\n        return ajaxReturn(dashboardUrl('/user'));\n    }\n\n    public function edit($id)\n    {\n        return view('dashboard.users.edit', ['info' => $this->userRepository->getById($id)]);\n    }\n\n    public function update(UpdateUserRequest $request, $id)\n    {\n        $data = $request->all();\n        if ($request->password) {\n            $data = array_merge($data, [\n                'password' => bcrypt($request->password)\n            ]);\n        } else {\n            unset($data['password']);\n        }\n        $this->userRepository->update($id, $data);\n        return ajaxReturn(dashboardUrl('/user'));\n    }\n\n    public function destroy($id)\n    {\n        if (Auth::user()->id == $id) {\n            return ajaxReturnError('', 0, '您不能删除您自己');\n        }\n        $user = $this->userRepository->getById($id);\n        $article = $user->articles()->count();\n        $question = $user->questions()->count();\n        if( $article > 0 || $question > 0) return ajaxReturnError('', 0, '用户发表过文章或问题，不允许删除');\n\n        $this->userRepository->syncRole([], $id);\n        $this->userRepository->destroy($id);\n\n        return ajaxReturn(redirect()->back());\n    }\n\n    public function giveUserRoles(Request $request)\n    {\n        $roles = $this->userRepository->getById($request->id)->cachedRoles();\n        return response()->json(\n            ajaxReturn('', 1, '成功',\n                roleOrPermissionDataHandle(array_column($roles->toArray(), 'id'), $this->roleRepository->getAllData(['id', 'name', 'display_name'])\n                )));\n    }\n\n    public function giveUserRolesStore(Request $request)\n    {\n        $ids = [];\n        if ($request->data) {\n            $ids = explode(',', $request->data);\n        }\n        $this->userRepository->syncRole($ids, $request->id);\n        return ajaxReturn(redirect()->back());\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/HomeController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\n\nclass HomeController extends Controller\n{\n    /**\n     * Create a new controller instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        $this->middleware('auth');\n    }\n\n    /**\n     * Show the application dashboard.\n     *\n     * @return \\Illuminate\\Http\\Response\n     */\n    public function index()\n    {\n        return view('home');\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/NotificationsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse Illuminate\\Http\\Request;\nuse Auth;\n\nclass NotificationsController extends Controller\n{\n    public function unread()\n    {\n        return redirect()->route('notifications.index');\n    }\n\n    public function index()\n    {\n        $user = Auth::user();\n        $user->unreadNotifications->markAsRead();\n        $notifications = $user->notifications;\n        return view('messages.notifications', compact('notifications'));\n    }\n\n    public function messages()\n    {\n        return view('messages.message');\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/PagesController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Models\\About;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\nuse App\\Models\\User;\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\QuestionRepository;\nuse App\\Repositories\\TagRepository;\nuse Illuminate\\Http\\Request;\n\nclass PagesController extends Controller\n{\n    public function home(Article $article, Question $question)\n    {\n        $tenExcellentArticles = $article->getArticlesWithFilter('excellent', 10);\n        $tenExcellentQuestions = $question->getArticlesWithFilter('excellent', 10);\n\n        return view('pages.home', compact('tenExcellentArticles', 'tenExcellentQuestions'));\n    }\n\n    public function search(Request $request)\n    {\n        $query = $request->q;\n        $article_search = Article::search($query, null, true)->withoutDraft()->WithoutPrivate()->recent()->weightAsc()->paginate(20);\n        $question_search = Question::search($query, null, true)->withoutDraft()->WithoutPrivate()->recent()->weightAsc()->paginate(20);\n        return view('pages.search', compact('article_search', 'question_search', 'query'));\n    }\n\n    public function about(ArticleRepository $articleRepository, QuestionRepository $questionRepository, TagRepository $tagRepository)\n    {\n        $info = About::where('is_enabled', 'yes')->first() ;\n\n        $recentArticles = $articleRepository->getThisModel()->withoutDraft()->withoutPrivate()->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);\n        $recentQuestions = $questionRepository->getThisModel()->withoutDraft()->withoutPrivate()->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);\n        $tags = $tagRepository->getAllTagWithCount();\n\n        return view('pages.about', compact('info', 'recentArticles', 'recentQuestions', 'tags'));\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Controllers/QuestionsController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Http\\Requests\\ImageUploadRequest;\nuse App\\Http\\Requests\\QuestionRequest;\nuse App\\Models\\Question;\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\QuestionCategoryRepository;\nuse App\\Repositories\\QuestionRepository;\nuse App\\Repositories\\TagRepository;\nuse App\\Tools\\FileManager\\BaseManager;\nuse Codehaoshi\\Selectors\\QuestionSelector;\nuse Auth;\n\nclass QuestionsController extends Controller\n{\n    protected $questionCategoryRepository;\n    protected $articleRepository;\n    protected $questionRepository;\n    protected $tagRepository;\n\n    public function __construct(QuestionCategoryRepository $questionCategoryRepository, QuestionRepository $questionRepository, TagRepository $tagRepository, ArticleRepository $articleRepository)\n    {\n        $this->questionCategoryRepository = $questionCategoryRepository;\n        $this->questionRepository = $questionRepository;\n        $this->tagRepository = $tagRepository;\n        $this->articleRepository = $articleRepository;\n    }\n\n\n    /**\n     * Show article-info page\n     * @param $slug\n     * @param Article $articleModel\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function show($slug, Question $questionModel)\n    {\n        $question = $this->questionRepository->getQuestionInfoBySlug($slug);\n        //sdfsadf\n        if ($question->is_draft == 'yes' || $question->only_owner_can_see == 'yes') {\n            $this->authorize('showDraft', $question);\n        }\n\n        $question->increment('view_count');\n\n        $recentQuestions = $questionModel->withoutDraft()->withoutPrivate()->where('id', '<>', $question['id'])->orderBy('created_at', 'desc')->select('id', 'title', 'slug')->paginate(6);\n\n        $prevAndNext = app(QuestionSelector::class)->questionInfoWithPrevAndNext($question->id);\n        return view('questions.show', ['info' => $question,\n            'recentQuestions' => $recentQuestions,\n            'prev' => $prevAndNext['prev'],\n            'next' => $prevAndNext['next']\n        ]);\n    }\n\n    /**\n     * Get article list by category\n     *\n     * @param $slug\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function index($slug)\n    {\n        $category = $this->questionCategoryRepository->getInfoBySlug($slug);\n        $questions = $this->questionRepository->getThisModel()->getArticlesWithFilter('category', 20, $category->id);\n\n        $hotQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('hot', 5);\n        $recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n        return view('questions.question-list', compact('questions', 'category', 'hotQuestions', 'recentQuestions', 'tags'));\n    }\n\n    /**\n     * Get All articles\n     *\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function allQuestions()\n    {\n        $questions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 20);\n        return view('questions.all-questions', compact('questions'));\n    }\n\n    public function create()\n    {\n        $recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n\n        $catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        return view('questions.create', compact('tagList', 'catList', 'recentQuestions', 'recentArticles', 'tags'));\n    }\n\n    public function store(QuestionRequest $request)\n    {\n        $data = array_merge($request->all(), ['user_id' => Auth::id()]);\n        $res  =$this->questionRepository->store($data);\n\n        $this->questionCategoryRepository->getById($request->category_id)->increment('question_count');\n        Auth::user()->increment('question_count');\n\n        $this->questionRepository->syncTag(explode(',', $request->tags));\n        flash('info', '问题发布成功');\n        return redirect()->route('question.show', ['slug' => $res->slug]);\n    }\n\n    public function uploadImage(ImageUploadRequest $request)\n    {\n        if ($file = $request->file('file')) {\n            try {\n                $upload_status = app(BaseManager::class)->storeUploadImgByConfigPath($file, 'front_images');\n            } catch (\\Exception $exception) {\n                return ['error' => $exception->getMessage()];\n            }\n            $data['filename'] = $upload_status['url'];\n\n        } else {\n            $data['error'] = 'Error while uploading file';\n        }\n        return $data;\n    }\n\n    public function edit($id)\n    {\n        $recentArticles = $this->articleRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $recentQuestions = $this->questionRepository->getThisModel()->getArticlesWithFilter('recent', 5);\n        $tags = $this->tagRepository->getAllTagWithCount();\n\n        $catList = $this->questionCategoryRepository->getAllData(['id', 'name'], false);\n        $tagList = $this->tagRepository->getAllData(['id', 'tag'], false);\n        $info = $this->questionRepository->getById($id);\n        $infoTag = implode(',', array_column($info->tags->toArray(), 'id'));\n\n        return view('questions.edit',compact('info','infoTag', 'catList', 'tagList', 'tags', 'recentArticles', 'recentQuestions'));\n    }\n\n    public function update(QuestionRequest $request, $id)\n    {\n        $oldData = $this->questionRepository->getById($id)->category_id;\n        if ($oldData != $request->category_id) {\n            $this->questionCategoryRepository->getById($request->category_id)->increment('question_count');\n            $this->questionCategoryRepository->getById($oldData)->decrement('question_count');\n        }\n        $data = $request->only('title', 'category_id', 'description', 'content', 'tags', 'is_draft', 'slug');\n        $res = $this->questionRepository->update($id, $data);\n\n        $this->questionRepository->syncTag(explode(',', $request->tags));\n        flash('info', '问题更新成功');\n        return redirect()->route('question.show', ['slug' => $res->slug]);\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/TagController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\nuse App\\Repositories\\ArticleRepository;\nuse App\\Repositories\\TagRepository;\n\nclass TagController extends Controller\n{\n    protected $tagRepository;\n    protected $articleRepository;\n\n    public function __construct(ArticleRepository $articleRepository, TagRepository $tagRepository)\n    {\n        $this->tagRepository = $tagRepository;\n        $this->articleRepository = $articleRepository;\n    }\n\n    public function show($slug, $type = null)\n    {\n        $tag = $this->tagRepository->getTagInfoBySlug($slug);\n\n        if (!$tag) abort(404);\n        $articles = $tag->articles->take(15);\n        $questions = $tag->questions->take(15);\n\n        if($type)  return view('tags.show-question', compact('articles', 'tag', 'questions'));\n        return view('tags.show-article', compact('articles', 'tag' ,'questions'));\n    }\n}\n"
  },
  {
    "path": "app/Http/Controllers/UserController.php",
    "content": "<?php\n\nnamespace App\\Http\\Controllers;\n\n\nuse App\\Http\\Requests\\ResetPasswordRequest;\nuse App\\Models\\User;\nuse App\\Repositories\\UserRepository;\nuse Illuminate\\Http\\Request;\n\nclass UserController extends Controller\n{\n\n    protected $userRepository;\n\n    public function __construct(UserRepository $userRepository)\n    {\n        $this->userRepository = $userRepository;\n\n    }\n\n    /**\n     * To check is current user has the permission to edit the infomation\n     *\n     * @param $id\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function edit($id)\n    {\n        $user = $this->userRepository->getById($id);\n        $this->authorize('update', $user); // Use UserPolicy's update function\n        return view('users.edit', ['info' => $user]);\n    }\n\n    /**\n     * @param $id\n     * @param UpdateUserRequest $request\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function update($id, Request $request)\n    {\n        $user = $this->userRepository->getById($id);\n        $this->authorize('update', $user);\n        try {\n            $this->userRepository->save($user, $request->except(['user_name', 'email', '_token', '']));\n\n            flash('info', '操作成功');\n        } catch (\\Exception $e) {\n            flash('error', $e);\n        }\n        return redirect()->back();\n    }\n\n    /**\n     * @param $id\n     * @return \\Illuminate\\Contracts\\View\\Factory|\\Illuminate\\View\\View\n     */\n    public function editPassword($id)\n    {\n        $user = $this->userRepository->getById($id);\n        $this->authorize('update', $user);\n        return view('users.edit-password', ['info' => $user]);\n    }\n\n    /**\n     * @param $id\n     * @param ResetPasswordRequest $request\n     * @return \\Illuminate\\Http\\RedirectResponse\n     */\n    public function updatePassword($id, ResetPasswordRequest $request)\n    {\n        $user = $this->userRepository->getById($id);\n        $this->authorize('update', $user);\n\n        $this->userRepository->changePassword($user, $request->password);\n        flash('info', '密码修改成功!');\n        return redirect()->back();\n    }\n\n    public function editEmail($id)\n    {\n        return view('users.edit-email');\n    }\n\n}\n"
  },
  {
    "path": "app/Http/Kernel.php",
    "content": "<?php\n\nnamespace App\\Http;\n\nuse Illuminate\\Foundation\\Http\\Kernel as HttpKernel;\n\nclass Kernel extends HttpKernel\n{\n    /**\n     * The application's global HTTP middleware stack.\n     *\n     * These middleware are run during every request to your application.\n     *\n     * @var array\n     */\n    protected $middleware = [\n        \\Illuminate\\Foundation\\Http\\Middleware\\CheckForMaintenanceMode::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ValidatePostSize::class,\n        \\App\\Http\\Middleware\\TrimStrings::class,\n        \\Illuminate\\Foundation\\Http\\Middleware\\ConvertEmptyStringsToNull::class,\n\n        // Self add pjax\n        \\Spatie\\Pjax\\Middleware\\FilterIfPjax::class,\n    ];\n\n    /**\n     * The application's route middleware groups.\n     *\n     * @var array\n     */\n    protected $middlewareGroups = [\n        'web' => [\n            \\App\\Http\\Middleware\\EncryptCookies::class,\n            \\Illuminate\\Cookie\\Middleware\\AddQueuedCookiesToResponse::class,\n            \\Illuminate\\Session\\Middleware\\StartSession::class,\n            // \\Illuminate\\Session\\Middleware\\AuthenticateSession::class,\n            \\Illuminate\\View\\Middleware\\ShareErrorsFromSession::class,\n            \\App\\Http\\Middleware\\VerifyCsrfToken::class,\n            \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n            // Self Add Webs\n            \\Laravel\\Passport\\Http\\Middleware\\CreateFreshApiToken::class,\n        ],\n\n        'api' => [\n            'throttle:60,1',\n            'bindings',\n        ],\n    ];\n\n    /**\n     * The application's route middleware.\n     *\n     * These middleware may be assigned to groups or used individually.\n     *\n     * @var array\n     */\n    protected $routeMiddleware = [\n        'auth' => \\Illuminate\\Auth\\Middleware\\Authenticate::class,\n        'auth.basic' => \\Illuminate\\Auth\\Middleware\\AuthenticateWithBasicAuth::class,\n        'bindings' => \\Illuminate\\Routing\\Middleware\\SubstituteBindings::class,\n        'can' => \\Illuminate\\Auth\\Middleware\\Authorize::class,\n        'guest' => \\App\\Http\\Middleware\\RedirectIfAuthenticated::class,\n        'throttle' => \\Illuminate\\Routing\\Middleware\\ThrottleRequests::class,\n        // Self Add RouteMiddleware\n        'role' => \\Ucer\\Entrust\\Middlewares\\EntrustRole::class,\n        'permission' => \\Ucer\\Entrust\\Middlewares\\EntrustPermission::class,\n        'ability' => \\Ucer\\Entrust\\Middlewares\\EntrustAbility::class,\n        'admin' => \\App\\Http\\Middleware\\MustBeAdmin::class\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/EncryptCookies.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Cookie\\Middleware\\EncryptCookies as BaseEncrypter;\n\nclass EncryptCookies extends BaseEncrypter\n{\n    /**\n     * The names of the cookies that should not be encrypted.\n     *\n     * @var array\n     */\n    protected $except = [\n        //\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/MustBeAdmin.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Auth;\n\nclass MustBeAdmin\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request $request\n     * @param  \\Closure $next\n     * @return mixed\n     */\n    public function handle($request, Closure $next)\n    {\n        // Determine whether the current user is an administrator\n        if (Auth::guest() || (Auth::user()->is_admin != 'yes')) {\n            abort(403);\n        }\n        return $next($request);\n\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/RedirectIfAuthenticated.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Closure;\nuse Illuminate\\Support\\Facades\\Auth;\n\nclass RedirectIfAuthenticated\n{\n    /**\n     * Handle an incoming request.\n     *\n     * @param  \\Illuminate\\Http\\Request  $request\n     * @param  \\Closure  $next\n     * @param  string|null  $guard\n     * @return mixed\n     */\n    public function handle($request, Closure $next, $guard = null)\n    {\n        if (Auth::guard($guard)->check()) {\n            return redirect('/');\n        }\n\n        return $next($request);\n    }\n}\n"
  },
  {
    "path": "app/Http/Middleware/TrimStrings.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\TrimStrings as BaseTrimmer;\n\nclass TrimStrings extends BaseTrimmer\n{\n    /**\n     * The names of the attributes that should not be trimmed.\n     *\n     * @var array\n     */\n    protected $except = [\n        'password',\n        'password_confirmation',\n    ];\n}\n"
  },
  {
    "path": "app/Http/Middleware/VerifyCsrfToken.php",
    "content": "<?php\n\nnamespace App\\Http\\Middleware;\n\nuse Illuminate\\Foundation\\Http\\Middleware\\VerifyCsrfToken as BaseVerifier;\n\nclass VerifyCsrfToken extends BaseVerifier\n{\n    /**\n     * The URIs that should be excluded from CSRF verification.\n     *\n     * @var array\n     */\n    protected $except = [\n        'file/upload'\n    ];\n}\n"
  },
  {
    "path": "app/Http/Requests/ArticleRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ArticleRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'title' => 'required|min:3',\n            'category_id' => 'required',\n            'description' => 'required',\n            'content' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ImageUploadRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ImageUploadRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'image' => 'image|mimes:jpeg,jpg,png,gif',\n            'file' => 'image|mimes:jpeg,jpg,png,gif',\n            'myfile' => 'image|mimes:jpeg,jpg,png,gif',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/QuestionRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass QuestionRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'title' => 'required|min:3',\n            'category_id' => 'required',\n            'description' => 'required',\n            'content' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/ResetPasswordRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass ResetPasswordRequest extends FormRequest\n{\n    /**\n     * Determine if the user is authorized to make this request.\n     *\n     * @return bool\n     */\n    public function authorize()\n    {\n        return true;\n    }\n\n    /**\n     * Get the validation rules that apply to the request.\n     *\n     * @return array\n     */\n    public function rules()\n    {\n        return [\n            'password' => 'required|confirmed|min:6',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreArticleCategoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreArticleCategoryRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n            'slug' => 'required|unique:article_categories',\n            'image_url' => 'required',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StorePermissionRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StorePermissionRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'name' => 'required|unique:permissions',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreQuestionCategoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreQuestionCategoryRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'name' => 'required',\n            'slug' => 'required|unique:question_categories',\n            'image_url' => 'required',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreReplyOrCommentRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreReplyOrCommentRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'body'     => 'required|min:2',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreRoleRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreRoleRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'name' => 'required|unique:roles',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreTagRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreTagRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'tag' => 'required',\n            'slug' => 'required|unique:tags',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/StoreUserRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\n\nclass StoreUserRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        return [\n            'user_name' => 'alpha_num|required|unique:users',\n            'email' => 'email|required|unique:users',\n            'password' => 'required|confirmed|min:6',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateArticleCategoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdateArticleCategoryRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'name' => 'required',\n            'slug' => 'required', Rule::unique('article_categories')->ignore($id),\n            'image_url' => 'required',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdatePermissionRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdatePermissionRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'name' => 'required', Rule::unique('permissions')->ignore($id),\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateQuestionCategoryRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdateQuestionCategoryRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'name' => 'required',\n            'slug' => 'required', Rule::unique('question_categories')->ignore($id),\n            'image_url' => 'required',\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateRoleRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdateRoleRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'name' => 'required', Rule::unique('roles')->ignore($id),\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateTagRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdateTagRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'tag' => 'required',\n            'slug' => 'required', Rule::unique('tags')->ignore($id),\n            'description' => 'required',\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Http/Requests/UpdateUserRequest.php",
    "content": "<?php\n\nnamespace App\\Http\\Requests;\n\nuse Illuminate\\Foundation\\Http\\FormRequest;\nuse Illuminate\\Validation\\Rule;\n\nclass UpdateUserRequest extends FormRequest\n{\n    public function authorize()\n    {\n        return true;\n    }\n\n    public function rules()\n    {\n        $id = $this->route('id');\n        return [\n            'user_name' => 'alpha_num|required', Rule::unique('users')->ignore($id),\n            'email' => 'email|required', Rule::unique('users')->ignore($id),\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Models/About.php",
    "content": "<?php\n\nnamespace App\\Models;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse App\\Tools\\Markdowner;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass About extends Model\n{\n    use SoftDeletes;\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n    protected $fillable = ['title', 'content', 'is_enabled'];\n    /**\n     * @param $value\n     */\n    public function setContentAttribute($value)\n    {\n        $data = [\n            'raw' => $value,\n            'html' => (new Markdowner)->convertMarkdownToHtml($value)\n        ];\n        $this->attributes['content'] = json_encode($data);\n    }\n}\n"
  },
  {
    "path": "app/Models/Activity.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Activity extends Model\n{\n    protected $fillable = ['causer', 'indentifier', 'type', 'data', 'user_id'];\n\n    public function user()\n    {\n        return $this->belongsTo(User::class);\n    }\n    public function scopeRecent($query)\n    {\n        return $query->orderBy('id', 'desc');\n    }\n\n    public function getDataAttribute($value)\n    {\n        return unserialize($value);\n    }\n}\n"
  },
  {
    "path": "app/Models/Article.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\ArticleFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse App\\Tools\\Markdowner;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Nicolaslopezj\\Searchable\\SearchableTrait;\n\nclass Article extends Model\n{\n    use SoftDeletes, ArticleFilterable, SearchableTrait;\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n    protected $fillable = [\n        'title', 'category_id', 'user_id',\n        'weight', 'is_excellent', 'is_hot', 'only_owner_can_see',\n        'is_draft', 'slug', 'content', 'description', 'published_at'\n    ];\n\n    /**\n     * Searchable rules.\n     *\n     * @var array\n     */\n    protected $searchable = [\n        /**\n         * Columns and their priority in search results.\n         * Columns with higher values are more important.\n         * Columns with equal values have equal importance.\n         *\n         * @var array\n         */\n        'columns' => [\n            'articles.slug' => 5,\n            'articles.title' => 5,\n            'articles.content' => 5,\n            'articles.description' =>5,\n        ],\n    ];\n\n\n    /**\n     * @return mixed\n     */\n    public function category()\n    {\n        return $this->belongsTo(ArticleCategory::class);\n    }\n\n    public function user()\n    {\n        return $this->belongsTo(User::class);\n    }\n\n\n    /**\n     * Get the category for the blog article.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\BelongsTo\n     */\n    public function tags()\n    {\n        return $this->morphToMany(Tag::class, 'taggable');\n    }\n\n    /**\n     * Set the title and the readable slug.\n     *\n     * @param $value\n     */\n    public function setTitleAttribute($value)\n    {\n        $this->attributes['title'] = $value;\n\n        if (!config('services.youdao.appKey') || !config('services.youdao.appSecret')) {\n            $this->setUniqueSlug($value, str_random(7));\n        } else {\n            $this->setUniqueSlug(translug($value), '');\n        }\n    }\n\n    /**\n     * Set the unique slug.\n     *\n     * @param $value\n     * @param $extra\n     */\n    public function setUniqueSlug($value, $extra)\n    {\n        $slug = str_slug($value . '-' . $extra);\n\n        if (static::whereSlug($slug)->exists()) {\n            $this->setUniqueSlug($slug, (int)$extra + 1);\n            return;\n        }\n\n        $this->attributes['slug'] = $slug;\n    }\n\n    /**\n     * @param $value\n     */\n    public function setContentAttribute($value)\n    {\n        $data = [\n            'raw' => $value,\n            'html' => (new Markdowner)->convertMarkdownToHtml($value)\n        ];\n        $this->attributes['content'] = json_encode($data);\n    }\n\n\n    public function getCommentsWithLimit($limit = 30, $order = 'created_at')\n    {\n        $pageName = 'page';\n        // Default display the latest reply\n        $latest_page = is_null(request($pageName)) ? ceil($this->comment_count / $limit) : 1;\n        $query = $this->comments()->with('user');\n\n        $query = ($order == 'vote_count') ? $query->orderBy('vote_count', 'desc') : $query->orderBy('created_at', 'asc');\n\n        return $query->paginate($limit, ['*'], $pageName, $latest_page);\n    }\n\n    public function comments()\n    {\n        return $this->hasMany(Comment::class);\n    }\n\n    public function votes()\n    {\n        return $this->morphMany(Vote::class, 'votable');\n    }\n\n}\n"
  },
  {
    "path": "app/Models/ArticleCategory.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass ArticleCategory extends Model\n{\n    use SoftDeletes;\n\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n    protected $fillable = [\n        'name', 'slug', 'image_url', 'weight', 'description', 'style'\n    ];\n\n    /**\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\HasMany\n     */\n    public function articles()\n    {\n        return $this->hasMany(Article::class, 'category_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Comment.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\BaseFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Notifications\\Notifiable;\n\nclass Comment extends Model\n{\n    use SoftDeletes,BaseFilterable,Notifiable;\n\n    protected $fillable = [\n        'body',\n        'user_id',\n        'article_id',\n        'body_original',\n    ];\n\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n\n    public function user()\n    {\n        return $this->belongsTo(User::class, 'user_id');\n    }\n\n    public function article()\n    {\n        return $this->belongsTo(Article::class);\n    }\n}\n\n"
  },
  {
    "path": "app/Models/Follower.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Follower extends Model\n{\n    protected $fillable = ['follower_id', 'followed_id'];\n}\n"
  },
  {
    "path": "app/Models/Link.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Link extends Model\n{\n    protected $fillable = ['title', 'link', 'type', 'is_enabled'];\n\n}\n"
  },
  {
    "path": "app/Models/Permission.php",
    "content": "<?php\n\nnamespace App\\Models;\n\n\nuse Ucer\\Entrust\\EntrustPermission;\n\nclass Permission extends EntrustPermission\n{\n    protected $fillable = ['name', 'display_name', 'description'];\n\n    public function saveFunction()\n    {\n//        $this->name         = 'create-post';\n//        $this->display_name = 'Create Posts'; // optional\n//// Allow a user to...\n//        $this->description  = 'create new blog posts'; // optional\n//        $this->save();\n//\n//        $this->name         = 'edit-user';\n//        $this->display_name = 'Edit Users'; // optional\n//// Allow a user to...\n//        $this->description  = 'edit existing users'; // optional\n//        $this->save();\n        return 'success';\n    }\n}\n"
  },
  {
    "path": "app/Models/Question.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\ArticleFilterable;\nuse App\\Tools\\Markdowner;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Nicolaslopezj\\Searchable\\SearchableTrait;\n\nclass Question extends Model\n{\n    use SoftDeletes, ArticleFilterable,SearchableTrait;\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n    protected $fillable = [\n        'title', 'category_id', 'user_id',\n        'weight', 'is_excellent', 'is_hot', 'only_owner_can_see',\n        'is_draft', 'slug', 'content', 'description', 'published_at'\n    ];\n\n\n    /**\n     * Searchable rules.\n     *\n     * @var array\n     */\n    protected $searchable = [\n        /**\n         * Columns and their priority in search results.\n         * Columns with higher values are more important.\n         * Columns with equal values have equal importance.\n         *\n         * @var array\n         */\n        'columns' => [\n            'questions.slug' => 5,\n            'questions.title' => 3,\n            'questions.content' => 1,\n            'questions.description' =>2,\n        ],\n    ];\n\n    /**\n     * @return mixed\n     */\n    public function category()\n    {\n        return $this->belongsTo(QuestionCategory::class);\n    }\n\n    public function replies()\n    {\n        return $this->hasMany(Reply::class);\n    }\n\n    public function user()\n    {\n        return $this->belongsTo(User::class);\n    }\n    /**\n     * Get the category for the blog article.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\BelongsTo\n     */\n    public function tags()\n    {\n        return $this->morphToMany(Tag::class, 'taggable');\n    }\n\n    public function votes()\n    {\n        return $this->morphMany(Vote::class, 'votable');\n    }\n    /**\n     * Set the title and the readable slug.\n     *\n     * @param $value\n     */\n    public function setTitleAttribute($value)\n    {\n        $this->attributes['title'] = $value;\n\n        if (!config('services.youdao.appKey') || !config('services.youdao.appSecret')) {\n            $this->setUniqueSlug($value, str_random(7));\n        } else {\n            $this->setUniqueSlug(translug($value), '');\n        }\n    }\n\n    /**\n     * Set the unique slug.\n     *\n     * @param $value\n     * @param $extra\n     */\n    public function setUniqueSlug($value, $extra)\n    {\n        $slug = str_slug($value . '-' . $extra);\n\n        if (static::whereSlug($slug)->exists()) {\n            $this->setUniqueSlug($slug, (int)$extra + 1);\n            return;\n        }\n\n        $this->attributes['slug'] = $slug;\n    }\n\n    /**\n     * @param $value\n     */\n    public function setContentAttribute($value)\n    {\n        $data = [\n            'raw' => $value,\n            'html' => (new Markdowner)->convertMarkdownToHtml($value)\n        ];\n        $this->attributes['content'] = json_encode($data);\n    }\n\n\n    public function getRepliesWithLimit($limit = 30, $order = 'created_at')\n    {\n        $pageName = 'page';\n        // Default display the latest reply\n        $latest_page = is_null(request($pageName)) ? ceil($this->reply_count / $limit) : 1;\n        $query = $this->replies()->with('user');\n\n        $query = ($order == 'vote_count') ? $query->orderBy('vote_count', 'desc') : $query->orderBy('created_at', 'asc');\n\n        return $query->paginate($limit, ['*'], $pageName, $latest_page);\n    }\n\n}\n"
  },
  {
    "path": "app/Models/QuestionCategory.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass QuestionCategory extends Model\n{\n    use SoftDeletes;\n\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n    protected $fillable = [\n        'name', 'slug', 'image_url', 'weight', 'description', 'style'\n    ];\n\n    /**\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\HasMany\n     */\n    public function questions()\n    {\n        return $this->hasMany(Question::class, 'category_id');\n    }\n}\n"
  },
  {
    "path": "app/Models/Reply.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\BaseFilterable;\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Notifications\\Notifiable;\n\nclass Reply extends Model\n{\n    use SoftDeletes,BaseFilterable,Notifiable;\n\n    protected $fillable = [\n        'body',\n        'user_id',\n        'question_id',\n        'body_original',\n    ];\n\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n\n    public function user()\n    {\n        return $this->belongsTo(User::class, 'user_id');\n    }\n\n    public function question()\n    {\n        return $this->belongsTo(Question::class);\n    }\n}\n"
  },
  {
    "path": "app/Models/Role.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Ucer\\Entrust\\EntrustRole;\nuse Ucer\\Entrust\\Traits\\EntrustRoleTrait;\n\nclass Role extends EntrustRole\n{\n    use EntrustRoleTrait;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = ['name', 'display_name', 'description'];\n\n    public function saveFunction()\n    {\n//        $this->name = 'owner';\n//        $this->display_name = 'Project Owner'; // optional\n//        $this->description = 'User is the owner of a given project'; // optional\n//        $this->save();\n\n//        $this->name = 'admin';\n//        $this->display_name = 'User Administrator'; // optional\n//        $this->description = 'User is allowed to manage and edit other users'; // optional\n//        $this->save();\n        $result = 'success';\n        $role = $this->findOrFail(1);\n//        $role->attachPermission(1); // 为角色 1 添加1权限\n//        $role->attachPermissions(['1','2']);\n//        $role->detachPermission(1);\n//        $role->detachPermissions(['1','2']);\n//        $result = $role->hasPermission('edit-user');\n\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "app/Models/SiteStatus.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass SiteStatus extends Model\n{\n    public static function newImage()\n    {\n    }\n}\n"
  },
  {
    "path": "app/Models/Tag.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\n\nclass Tag extends Model\n{\n    use SoftDeletes;\n    /**\n     * The attributes that should be mutated to dates.\n     *\n     * @var array\n     */\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'tag', 'slug', 'description', 'style'\n    ];\n\n    /**\n     * Get all of the articles that are assigned this tag.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\MorpheByMany\n     */\n    public function articles()\n    {\n        return $this->morphedByMany(Article::class, 'taggable');\n    }\n\n    public function questions()\n    {\n        return $this->morphedByMany(Question::class, 'taggable');\n    }\n\n}\n"
  },
  {
    "path": "app/Models/Traits/ArticleFilterable.php",
    "content": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait ArticleFilterable\n{\n\n    public function getArticlesWithFilter($filter, $limit = 5, $category_id = 0)\n    {\n\n        $filter = $this->getArticleFilter($filter);\n\n        return $this->applyFilter($filter, $category_id)\n            ->with('user', 'category')\n            ->paginate($limit);\n    }\n\n    public function getArticlesWithWhoFilter($filter, $limit = 5, $user_id = 0)\n    {\n\n        $filter = $this->getArticleFilter($filter);\n\n        return $this->applyFilter($filter,0)\n            ->where('user_id', '=', $user_id)\n            ->paginate($limit);\n    }\n\n    protected function getArticleFilter($request_filter)\n    {\n        $filters = ['hot', 'recent', 'excellent', 'category'];\n        if (in_array($request_filter, $filters)) {\n            return $request_filter;\n        }\n        return 'default';\n    }\n\n    public function applyFilter($filter, $category_id)\n    {\n        $query = $this->withoutDraft()->WithoutPrivate();\n\n        switch ($filter) {\n            case 'hot' :\n                return $query->weightAsc()->hot();\n                break;\n            case 'recent':\n                return $query->recent()->weightAsc();\n                break;\n            case 'excellent':\n                return $query->excellent()->weightAsc();\n                break;\n            case 'category':\n                return $query->category($category_id)->weightAsc()->recent();\n                break;\n            case 'default':\n                return $query->weightAsc()->recent();\n                break;\n        }\n    }\n\n    public function scopeVote($query, $sort=\"asc\")\n    {\n        return $query->orderBy('vote_count', $sort);\n    }\n    public function scopeRecent($query)\n    {\n        return $query->orderBy('created_at', 'desc');\n    }\n\n    public function scopeWeightAsc($query)\n    {\n        return $query->orderBy('weight', 'asc');\n    }\n\n    public function scopeHot($query)\n    {\n        return $query->where('is_hot', 'yes');\n    }\n\n    public function scopeExcellent($query)\n    {\n        return $query->where('is_excellent', '=', 'yes');\n    }\n\n    public function scopeWithoutDraft($query)\n    {\n        return $query->where('is_draft', '=', 'no');\n    }\n\n    public function scopeWithoutPrivate($query)\n    {\n        return $query->where('only_owner_can_see', '=', 'no');\n    }\n\n    public function scopeCategory($query, $category_id)\n    {\n        return $query->where('category_id', '=', $category_id);\n    }\n}"
  },
  {
    "path": "app/Models/Traits/BaseFilterable.php",
    "content": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait BaseFilterable\n{\n\n    public function scopeRecent($query)\n    {\n        return $query->orderBy('created_at', 'desc');\n    }\n}"
  },
  {
    "path": "app/Models/Traits/FollowerHelper.php",
    "content": "<?php\n\nnamespace App\\Models\\Traits;\n\ntrait FollowerHelper\n{\n    /**\n     * Check if user is followed by given user.\n     *\n     * @param $user\n     *\n     * @return bool\n     */\n    public function isFollowedBy($user)\n    {\n        return $this->followers->contains($user);\n    }\n\n    /**\n     * Check if user is following given user.\n     *\n     * @param $user\n     *\n     * @return bool\n     */\n    public function isFollowing($user)\n    {\n        return $this->followings->contains($user);\n    }\n    /**\n     * Return user followers.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany\n     */\n    public function followers()\n    {\n        return $this->belongsToMany(__CLASS__, 'followers', 'follow_id', 'user_id')->withTimestamps();\n    }\n\n    /**\n     * Return user following users.\n     *\n     * @return \\Illuminate\\Database\\Eloquent\\Relations\\BelongsToMany\n     */\n    public function followings()\n    {\n        return $this->belongsToMany(__CLASS__, 'followers', 'user_id', 'follow_id')->withTimestamps();// 用户1正在关注哪些用户\n    }\n\n    /**\n     * Follow a user or users.\n     *\n     * @param int|array $user\n     *\n     * @return int\n     */\n    public function follow($user)\n    {\n        return $this->followings()->sync((array)$user, false);\n    }\n\n    /**\n     * Unfollow a user or users.\n     *\n     * @param int|array $user\n     *\n     * @return int\n     */\n    public function unfollow($user)\n    {\n        return $this->followings()->detach((array)$user);\n    }\n\n\n}"
  },
  {
    "path": "app/Models/Traits/UserAvatorHelper.php",
    "content": "<?php\nnamespace App\\Models\\Traits;\n\nuse GuzzleHttp\\Client;\n\ntrait UserAvatorHelper\n{\n    public function cacheAvatar()\n    {\n\n        $uploadAvatarPath = '/'.env('UPLOAD_PATH', 'uploads').'/'.config('codehaoshi.uploadsPath.avatar');\n        // Download Image\n        $guzzle = new Client();\n        $response = $guzzle->get($this->image_url);\n        // Get next\n\n        $content_type = explode('/', $response->getHeader('Content-Type')[0]);\n        $ext = array_pop($content_type);\n\n        $avatar_name = $this->id . '_' . time() . '.' . $ext;\n        $base_path = public_path($uploadAvatarPath);\n        $save_path = $base_path. $avatar_name;\n\n        if (!file_exists($base_path)) {\n            mkdir($base_path, 0777, true);\n        }\n        //Save File\n        $content = $response->getBody()->getContents();\n        file_put_contents($save_path, $content);\n\n        //Delete old file\n        if ($this->avatar) {\n            @unlink($base_path. $this->avatar);\n        }\n        //Save to database\n        $this->avatar = $uploadAvatarPath.$avatar_name;\n        $this->save();\n    }\n}\n"
  },
  {
    "path": "app/Models/User.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse App\\Models\\Traits\\FollowerHelper;\nuse App\\Models\\Traits\\UserAvatorHelper;\nuse App\\Tools\\UserMailer;\nuse Illuminate\\Database\\Eloquent\\SoftDeletes;\nuse Illuminate\\Notifications\\Notifiable;\nuse Illuminate\\Foundation\\Auth\\User as Authenticatable;\nuse Laravel\\Passport\\HasApiTokens;\nuse Ucer\\Entrust\\Traits\\EntrustUserTrait;\n\nclass User extends Authenticatable\n{\n    use HasApiTokens, Notifiable, UserAvatorHelper,FollowerHelper;\n    use EntrustUserTrait, SoftDeletes;\n\n    /**\n     * The attributes that are mass assignable.\n     *\n     * @var array\n     */\n    protected $fillable = [\n        'user_name', 'email',\n        'city',\n        'introduction',\n        'password', 'image_url',\n        'github_id', 'github_name',\n        'nickname', 'register_source',\n        'status', 'last_actived_at', 'is_admin',\n        'company', 'personal_website',\n        'avatar'\n    ];\n    /**\n     * 需要被转换成日期的属性。\n     *\n     * @var array\n     */\n    protected $dates = ['created_at', 'updated_at', 'deleted_at'];\n\n    /**\n     * The attributes that should be hidden for arrays.\n     *\n     * @var array\n     */\n    protected $hidden = [\n        'password', 'remember_token',\n    ];\n\n    public function activities()\n    {\n        return $this->hasMany(Activity::class);\n    }\n\n    public function articles()\n    {\n        return $this->hasMany(Article::class);\n    }\n\n    public function questions()\n    {\n        return $this->hasMany(Question::class);\n    }\n\n    /**\n     * send password reset email to user's email base on token.\n     *\n     * @param string $token\n     */\n    public function sendPasswordResetNotification($token)\n    {\n        (new UserMailer)->passwordReset($this->email, $token);\n    }\n\n    public function saveFunction()\n    {\n        $user = $this->findOrFail(6);\n\n//        $user->attachRole(6); // 为用户 1 添加两1身份\n        $user->attachRoles(['1', '2']); // 为用户 1 添加两个身份\n\n//        $user->detachRole(1); // 移除用户1的1身份\n//        $user->detachRoles(); // 移除用户1的所有身份\n\n        $result = 'success';\n//        $result = $user->hasRole(['admin','owner']); // 不加第二个参数，只匹配数组中的第一个身份:w\n//         $result = $user->hasRole(['admin','owner','hellow'],true); // 加 ture 参数 后要完全匹配\n//        $result = $user->hasRole('admin');\n//        $result = $user->can('edit-user');\n//        $result = $user->ability(array('admin', 'owner'), array('create-post', 'edit-user'));\n\n        return $result;\n    }\n}\n"
  },
  {
    "path": "app/Models/Vote.php",
    "content": "<?php\n\nnamespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\n\nclass Vote extends Model\n{\n    protected $fillable = ['user_id'];\n\n    public function user()\n    {\n        return $this->belongsTo(User::class);\n    }\n\n    public function scopeByWhom($query, $user_id)\n    {\n        return $query->where('user_id', '=', $user_id);\n    }\n}"
  },
  {
    "path": "app/Notifications/NewUserFollowNotification.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Auth;\n\nclass NewUserFollowNotification extends Notification implements ShouldQueue\n{\n    use Queueable;\n\n    /**\n     * Create a new notification instance.\n     *\n     * @return void\n     */\n    public function __construct()\n    {\n        //\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the mail representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return \\Illuminate\\Notifications\\Messages\\MailMessage\n     */\n    public function toMail($notifiable)\n    {\n        return (new MailMessage)\n            ->line('The introduction to the notification.')\n            ->action('Notification Action', url('/'))\n            ->line('Thank you for using our application!');\n    }\n\n    /**\n     * @param $notifiable\n     * @return array\n     */\n    public function toDatabase($notifiable)//注意方法的命名格式\n    {\n        return [\n            'user_name' => Auth::user()->user_name,\n        ];\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        return [\n            //\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Notifications/ReceivedComment.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\n\nclass ReceivedComment extends Notification implements ShouldQueue\n{\n    use Queueable;\n\n    protected $comment;\n\n    /**\n     * Create a new notification instance.\n     *\n     * @return void\n     */\n    public function __construct(Comment $comment)\n    {\n        $this->comment = $comment;\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the mail representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return \\Illuminate\\Notifications\\Messages\\MailMessage\n     */\n    public function toMail($notifiable)\n    {\n        $comment = $this->comment;\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        $comment = $this->comment;\n        $article = Article::findOrFail($comment->article_id);\n        $user = User::findOrFail($comment->user_id);\n        return [\n            'user_id' => $comment->user_id,\n            'user_name' => $user->user_name,\n            'article_id' => $comment->article_id,\n            'article_title' => $article->title,\n            'article_slug' => $article->slug,\n            'comment_content' => $comment->body,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Notifications/ReceivedReply.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Commentdd;\nuse App\\Models\\Question;\nuse App\\Models\\Reply;\nuse App\\Models\\User;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\n\nclass ReceivedReply extends Notification implements ShouldQueue\n{\n    use Queueable;\n\n    protected $reply;\n\n    /**\n     * Create a new notification instance.\n     *\n     * @return void\n     */\n    public function __construct(Reply $reply)\n    {\n        $this->reply = $reply;\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the mail representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return \\Illuminate\\Notifications\\Messages\\MailMessage\n     */\n    public function toMail($notifiable)\n    {\n        $comment = $this->reply;\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        $comment = $this->reply;\n        $question = Question::findOrFail($comment->question_id);\n        $user = User::findOrFail($comment->user_id);\n        return [\n            'user_id' => $comment->user_id,\n            'user_name' => $user->user_name,\n            'question_id' => $comment->question_id,\n            'question_title' => $question->title,\n            'question_slug' => $question->slug,\n            'comment_content' => $comment->body,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Notifications/UserVoteArticle.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Article;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Auth;\n\nclass UserVoteArticle extends Notification implements ShouldQueue\n{\n    use Queueable;\n\n    protected $article;\n\n    /**\n     * Create a new notification instance.\n     *\n     * @return void\n     */\n    public function __construct(Article $article)\n    {\n        $this->article = $article;\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the mail representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return \\Illuminate\\Notifications\\Messages\\MailMessage\n     */\n    public function toMail($notifiable)\n    {\n        return (new MailMessage)\n            ->line('The introduction to the notification.')\n            ->action('Notification Action', url('/'))\n            ->line('Thank you for using our application!');\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        return [\n            'user_name' => Auth::user()->user_name,\n            'article_slug' => $this->article->slug,\n            'article_title' => $this->article->title,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Notifications/UserVoteQuestion.php",
    "content": "<?php\n\nnamespace App\\Notifications;\n\nuse App\\Models\\Question;\nuse Illuminate\\Bus\\Queueable;\nuse Illuminate\\Notifications\\Notification;\nuse Illuminate\\Contracts\\Queue\\ShouldQueue;\nuse Illuminate\\Notifications\\Messages\\MailMessage;\nuse Auth;\n\nclass UserVoteQuestion extends Notification implements ShouldQueue\n{\n    use Queueable;\n\n    protected $question;\n\n    /**\n     * Create a new notification instance.\n     *\n     * @return void\n     */\n    public function __construct(Question $question)\n    {\n        $this->question = $question;\n    }\n\n    /**\n     * Get the notification's delivery channels.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function via($notifiable)\n    {\n        return ['database'];\n    }\n\n    /**\n     * Get the mail representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return \\Illuminate\\Notifications\\Messages\\MailMessage\n     */\n    public function toMail($notifiable)\n    {\n        return (new MailMessage)\n            ->line('The introduction to the notification.')\n            ->action('Notification Action', url('/'))\n            ->line('Thank you for using our application!');\n    }\n\n    /**\n     * Get the array representation of the notification.\n     *\n     * @param  mixed $notifiable\n     * @return array\n     */\n    public function toArray($notifiable)\n    {\n        return [\n            'user_name' => Auth::user()->user_name,\n            'question_slug' => $this->question->slug,\n            'question_title' => $this->question->title,\n        ];\n    }\n}\n"
  },
  {
    "path": "app/Policies/ArticlePolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Article;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass ArticlePolicy\n{\n    use HandlesAuthorization;\n\n\n    public function showDraft(User $user, Article $article)\n    {\n        return  $article->user_id == $user->id || $user->hasRole('supper_admin');\n\n    }\n}\n"
  },
  {
    "path": "app/Policies/CommentPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Comment;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass CommentPolicy\n{\n    use HandlesAuthorization;\n\n    public function delete(User $user, Comment $comment)\n    {\n        return $user->hasRole('supper_admin') || $user->id == $comment->user_id;\n    }\n}"
  },
  {
    "path": "app/Policies/QuestionPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Question;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass QuestionPolicy\n{\n    use HandlesAuthorization;\n\n\n    public function showDraft(User $user, Question $article)\n    {\n        return  $article->user_id == $user->id || $user->hasRole('supper_admin');\n    }\n}\n"
  },
  {
    "path": "app/Policies/ReplyPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\Reply;\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass ReplyPolicy\n{\n    use HandlesAuthorization;\n\n    public function delete(User $user, Reply $reply)\n    {\n        return $user->hasRole('supper_admin') || $user->id == $reply->user_id;\n    }\n}"
  },
  {
    "path": "app/Policies/UserPolicy.php",
    "content": "<?php\n\nnamespace App\\Policies;\n\nuse App\\Models\\User;\nuse Illuminate\\Auth\\Access\\HandlesAuthorization;\n\nclass UserPolicy\n{\n    use HandlesAuthorization;\n\n    public function update(User $currentUser,User $user)\n    {\n        return $currentUser->id ==$user->id;\n    }\n}\n"
  },
  {
    "path": "app/Providers/AppServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\n\nclass AppServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n    }\n\n    /**\n     * Register any application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/AuthServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\nuse App\\Models\\Question;\nuse App\\Models\\Reply;\nuse App\\Models\\User;\nuse App\\Policies\\ArticlePolicy;\nuse App\\Policies\\CommentPolicy;\nuse App\\Policies\\QuestionPolicy;\nuse App\\Policies\\ReplyPolicy;\nuse App\\Policies\\UserPolicy;\nuse Illuminate\\Foundation\\Support\\Providers\\AuthServiceProvider as ServiceProvider;\nuse Laravel\\Passport\\Passport;\n\nclass AuthServiceProvider extends ServiceProvider\n{\n    /**\n     * The policy mappings for the application.\n     *\n     * @var array\n     */\n    protected $policies = [\n        'App\\Model' => 'App\\Policies\\ModelPolicy',\n        Article::class => ArticlePolicy::class,\n        Question::class => QuestionPolicy::class,\n        Comment::class => CommentPolicy::class,\n        User::class => UserPolicy::class,\n        Reply::class => ReplyPolicy::class,\n\n    ];\n\n    /**\n     * Register any authentication / authorization services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        $this->registerPolicies();\n\n        Passport::routes();\n\n    }\n}\n"
  },
  {
    "path": "app/Providers/BroadcastServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\ServiceProvider;\nuse Illuminate\\Support\\Facades\\Broadcast;\n\nclass BroadcastServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap any application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        Broadcast::routes();\n\n        require base_path('routes/channels.php');\n    }\n}\n"
  },
  {
    "path": "app/Providers/CommonDataServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse App\\Models\\Link;\nuse Illuminate\\Support\\Facades\\View;\nuse Illuminate\\Support\\ServiceProvider;\n\nclass CommonDataServiceProvider extends ServiceProvider\n{\n    /**\n     * Bootstrap the application services.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        View::composer('*', function ($view) {\n            $view->with('authUser', \\Auth::user());\n            $categoryAndQuestions = app('Codehaoshi\\Stat\\Stat')->getCategoryAndQuestion();\n            $view->with('categoryList', $categoryAndQuestions->categoryList);\n            $view->with('questionCategoryList', $categoryAndQuestions->questionList);\n\n            $view->with('linkList',Link::where('is_enabled' , 'yes')->where('type', 'link')->get());\n            $view->with('recommendList',Link::where('is_enabled' , 'yes')->where('type', 'recommend')->get());\n        });\n    }\n\n    /**\n     * Register the application services.\n     *\n     * @return void\n     */\n    public function register()\n    {\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/EventServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Event;\nuse Illuminate\\Foundation\\Support\\Providers\\EventServiceProvider as ServiceProvider;\n\nclass EventServiceProvider extends ServiceProvider\n{\n    /**\n     * The event listener mappings for the application.\n     *\n     * @var array\n     */\n    protected $listen = [\n        'App\\Events\\Event' => [\n            'App\\Listeners\\EventListener',\n        ],\n    ];\n\n    /**\n     * Register any events for your application.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        parent::boot();\n\n        //\n    }\n}\n"
  },
  {
    "path": "app/Providers/RouteServiceProvider.php",
    "content": "<?php\n\nnamespace App\\Providers;\n\nuse Illuminate\\Support\\Facades\\Route;\nuse Illuminate\\Foundation\\Support\\Providers\\RouteServiceProvider as ServiceProvider;\n\nclass RouteServiceProvider extends ServiceProvider\n{\n    /**\n     * This namespace is applied to your controller routes.\n     *\n     * In addition, it is set as the URL generator's root namespace.\n     *\n     * @var string\n     */\n    protected $namespace = 'App\\Http\\Controllers';\n\n    /**\n     * Define your route model bindings, pattern filters, etc.\n     *\n     * @return void\n     */\n    public function boot()\n    {\n        //\n\n        parent::boot();\n    }\n\n    /**\n     * Define the routes for the application.\n     *\n     * @return void\n     */\n    public function map()\n    {\n        $this->mapApiRoutes();\n\n        $this->mapWebRoutes();\n\n        //\n    }\n\n    /**\n     * Define the \"web\" routes for the application.\n     *\n     * These routes all receive session state, CSRF protection, etc.\n     *\n     * @return void\n     */\n    protected function mapWebRoutes()\n    {\n        Route::middleware('web')\n             ->namespace($this->namespace)\n             ->group(base_path('routes/web.php'));\n    }\n\n    /**\n     * Define the \"api\" routes for the application.\n     *\n     * These routes are typically stateless.\n     *\n     * @return void\n     */\n    protected function mapApiRoutes()\n    {\n        Route::prefix('api')\n             ->middleware('api')\n             ->namespace($this->namespace)\n             ->group(base_path('routes/api.php'));\n    }\n}\n"
  },
  {
    "path": "app/Repositories/AboutRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\n\n\nuse App\\Models\\About;\n\nclass AboutRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(About $about)\n    {\n        $this->model = $about;\n    }\n}"
  },
  {
    "path": "app/Repositories/ArticleCategoryRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\ArticleCategory;\n\nclass ArticleCategoryRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(ArticleCategory $articleCategory)\n    {\n        $this->model = $articleCategory;\n    }\n\n\n    public function getInfoBySlug($slug)\n    {\n        return $this->model->where('slug', $slug)->firstOrFail();\n    }\n}"
  },
  {
    "path": "app/Repositories/ArticleRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Article;\nuse App\\Models\\Comment;\n\nclass ArticleRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Article $article)\n    {\n        $this->model = $article;\n    }\n\n    /**\n     * Sync the tags for the article.\n     *\n     * @param  int $number\n     * @return Paginate\n     */\n    public function syncTag($tags = '')\n    {\n        $this->model->tags()->sync($tags);\n    }\n\n    public function getArticleInfoBySlug($slug)\n    {\n        return $this->model->where('slug', $slug)->with('user', 'category')->firstOrFail();\n    }\n\n    public function decrementCommentCount($model)\n    {\n        return $model->decrement('comment_count');\n    }\n\n\n    public function generateLastReplyUserInfo($articleModel)\n    {\n        $lastComment = $articleModel->comments()->recent()->first();\n        $articleModel->last_comment_user_id = $lastComment ? $lastComment->user_id : 0;\n        $articleModel->save();\n    }\n\n    /**\n     * Get one record without draft scope\n     *\n     * @param $id\n     * @return mixed\n     */\n    public function getByIdWithoutException($id, $type = '>' ,$field = ['id','title','slug'])\n    {\n        return $this->model->withoutDraft()->where('id' , $type, $id)->select($field)->first();\n    }\n}"
  },
  {
    "path": "app/Repositories/BaseRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\ntrait BaseRepository\n{\n\n    /**\n     * Store a new record.\n     *\n     * @param  $input\n     * @return User\n     */\n    public function store($input)\n    {\n        return $this->save($this->model, $input);\n    }\n\n    /**\n     * Save the input's data.\n     *\n     * @param  $model\n     * @param  $input\n     * @return mixed\n     */\n    public function save($model, $input)\n    {\n        $model->fill($input);\n\n        $model->save();\n\n        return $model;\n    }\n\n    /**\n     * Get one record without draft scope\n     *\n     * @param $id\n     * @return mixed\n     */\n    public function getById($id)\n    {\n        return $this->model->findOrFail($id);\n    }\n\n\n    /**\n     * Delete the draft article.\n     *\n     * @param int $id\n     * @return boolean\n     */\n    public function destroy($id)\n    {\n        return $this->getById($id)->delete();\n    }\n\n    /**\n     * @param $field\n     * @return mixed\n     */\n    public function getAllData($field = \"*\", $needToArray = true)\n    {\n        if ($needToArray) {\n            return $this->model->select($field)->get()->toArray();\n        } else {\n            return $this->model->select($field)->get();\n        }\n    }\n\n    /**\n     * To judge the record is existence in you table\n     *\n     * @param $where\n     */\n    public function getFirstRecordByWhere($where)\n    {\n        return $this->model->where($where)->first();\n    }\n\n    /**\n     * @param $id\n     * @param $input\n     * @return mixed\n     */\n    public function update($id, $input)\n    {\n        $this->model = $this->getById($id);\n\n        return $this->save($this->model, $input);\n    }\n\n    /**\n     * return  paginate list\n     *\n     * @param int $pagesize\n     * @param string $sort\n     * @param string $sortColumn\n     * @return mixed\n     */\n    public function page($where = false, $pagesize = 20, $sortColumn = 'weight', $sort = 'asc')\n    {\n        if ($where) {\n            if($sortColumn != 'created_at'){\n                return $this->model->where($where)->orderBy($sortColumn, $sort)->orderBy('created_at', 'desc')->paginate($pagesize);\n            }\n            return $this->model->where($where)->orderBy($sortColumn, $sort)->paginate($pagesize);\n        } else {\n            return $this->model->orderBy($sortColumn, $sort)->paginate($pagesize);\n        }\n    }\n\n    public function getThisModel()\n    {\n        return $this->model;\n    }\n\n    /**\n     * Get all the records\n     *\n     * @return array User\n     */\n    public function all()\n    {\n        return $this->model->get();\n    }\n}"
  },
  {
    "path": "app/Repositories/CommentRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Comment;\n\nclass CommentRepository\n{\n    use BaseRepository;\n\n    protected $model;\n\n    public function __construct(Comment $comment)\n    {\n        $this->model = $comment;\n    }\n}"
  },
  {
    "path": "app/Repositories/LinkRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\Link;\n\nclass LinkRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Link $link)\n    {\n        $this->model = $link;\n    }\n}"
  },
  {
    "path": "app/Repositories/PermissionRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Permission;\n\nclass PermissionRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Permission $permission)\n    {\n        $this->model = $permission;\n    }\n}"
  },
  {
    "path": "app/Repositories/QuestionCategoryRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\QuestionCategory;\n\nclass QuestionCategoryRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(QuestionCategory $questionCategory)\n    {\n        $this->model = $questionCategory;\n    }\n\n\n    public function getInfoBySlug($slug)\n    {\n        return $this->model->where('slug', $slug)->firstOrFail();\n    }\n}"
  },
  {
    "path": "app/Repositories/QuestionRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Question;\n\nclass QuestionRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Question $article)\n    {\n        $this->model = $article;\n    }\n    /**\n     * Sync the tags for the article.\n     *\n     * @param  int $number\n     * @return Paginate\n     */\n    public function syncTag($tags = '')\n    {\n        $this->model->tags()->sync($tags);\n    }\n\n    public function getQuestionInfoBySlug($slug)\n    {\n        return $this->model->where('slug', $slug)->with('user', 'category')->firstOrFail();\n    }\n\n    /**\n     * Get one record without draft scope\n     *\n     * @param $id\n     * @return mixed\n     */\n    public function getByIdWithoutException($id, $type = '>' ,$field = ['id','title','slug'])\n    {\n        return $this->model->withoutDraft()->where('id' , $type, $id)->select($field)->first();\n    }\n\n    public function decrementReplyCount($model)\n    {\n        return $model->decrement('reply_count');\n    }\n\n\n    public function generateLastReplyUserInfo($questionModel)\n    {\n        $lastComment = $questionModel->replies()->recent()->first();\n        $questionModel->last_reply_user_id = $lastComment ? $lastComment->user_id : 0;\n        $questionModel->save();\n    }\n}"
  },
  {
    "path": "app/Repositories/ReplyRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\n\nuse App\\Models\\Reply;\n\nclass ReplyRepository\n{\n    use BaseRepository;\n\n    protected $model;\n\n    public function __construct(Reply $comment)\n    {\n        $this->model = $comment;\n    }\n}"
  },
  {
    "path": "app/Repositories/RoleRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Role;\n\nclass RoleRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Role $role)\n    {\n        $this->model = $role;\n    }\n\n\n    /**\n     * @param $id\n     * @param $input\n     * @return mixed\n     */\n    public function update($id, $input)\n    {\n        $this->model = $this->getById($id);\n\n        return $this->save($this->model, $input);\n    }\n\n\n    /**\n     * Sync the tags for the article.\n     * @param array $roleIds\n     * @param int $userId\n     */\n    public function syncPermission($permissionIds = [], $userId = 0)\n    {\n        $this->getById($userId)->perms()->sync($permissionIds);\n    }\n}"
  },
  {
    "path": "app/Repositories/TagRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\Tag;\nuse DB;\n\nclass TagRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(Tag $tag)\n    {\n        $this->model = $tag;\n    }\n\n    /**\n     * get All tags with used count as weight\n     */\n    public function getAllTagWithCount()\n    {\n        $tags = $this->all();\n        $tags = $tags->each( function ($item, $key) {\n            $item->weight = DB::table('taggables')->where('tag_id', '=', $item->id)->count();\n        });\n        return $tags;\n    }\n\n\n    public function getTagInfoBySlug($slug)\n    {\n        return $this->model->where('slug', $slug)->firstOrFail();\n    }\n\n}"
  },
  {
    "path": "app/Repositories/UserRepository.php",
    "content": "<?php\n\nnamespace App\\Repositories;\n\nuse App\\Models\\User;\n\nclass UserRepository\n{\n    use BaseRepository;\n    protected $model;\n\n    public function __construct(User $user)\n    {\n        $this->model = $user;\n    }\n\n    /**\n     * return  paginate list\n     *\n     * @param int $pagesize\n     * @param string $sort\n     * @param string $sortColumn\n     * @return mixed\n     */\n    public function page($where = false, $pagesize = 20, $sortColumn = 'last_actived_at', $sort = 'desc')\n    {\n        if ($where) {\n            return $this->model->where($where['k'])->orWhere($where['k2'])->orderBy($sortColumn, $sort)->paginate($pagesize);\n        } else {\n            return $this->model->orderBy($sortColumn, $sort)->paginate($pagesize);\n        }\n    }\n\n    /**\n     * Sync the tags for the article.\n     * @param array $roleIds\n     * @param int $userId\n     */\n    public function syncRole($roleIds = [], $userId = 0)\n    {\n        $this->getById($userId)->roles()->sync($roleIds);\n    }\n\n    /**\n     * @param $user\n     * @param $password\n     * @return mixed\n     */\n    public function changePassword($user,$password)\n    {\n        return $user->update(['password'=>bcrypt($password)]);\n    }\n\n    /**\n     * Get the user by name.\n     *\n     * @param  string $name\n     * @return mixed\n     */\n    public function getByName($user_name)\n    {\n        return $this->model\n            ->where('user_name', $user_name)\n            ->first();\n    }\n}"
  },
  {
    "path": "app/Tools/FileManager/BaseManager.php",
    "content": "<?php\n\nnamespace App\\Tools\\FileManager;\n\nuse Illuminate\\Support\\Facades\\Storage;\n\nclass BaseManager\n{\n\n\n    /**\n     * @var $disk\n     */\n    protected $disk;\n\n    /**\n     * UpyunManager constructor.\n     */\n    public function __construct()\n    {\n        $this->disk = Storage::disk(config('filesystems.default'));\n\n    }\n\n    /**\n     * @param $img\n     * @return array|bool\n     */\n    public function storeUploadImgByConfigPath($img, $configPath = 'temp')\n    {\n        $savePath = config('codehaoshi.uploadsPath.' . $configPath) . date('Y') . '/' . date('m');\n\n        $path = $img->store($savePath, 'public');\n\n        $realPath = env('UPLOAD_PATH', 'uploads') . '/' . $path;\n        return [\n            'real_path' => $savePath,\n            'relative_url' => '/' . $realPath,\n            'url' => asset($realPath),\n        ];\n    }\n\n    public function moveFileTorealPath($tempFile, $realPathDir = 'article')\n    {\n        if (strstr($tempFile, '/temp/')) {\n            $newFile = str_replace('/temp/', '/' . $realPathDir . '/', $tempFile);\n            $new_dir = public_path(dirname($newFile));\n            if (!is_dir($new_dir)) mkdir($new_dir, 0777, true);\n            rename(public_path($tempFile), public_path($newFile));\n\n            return $newFile;\n        } else {\n            return $tempFile;\n        }\n\n    }\n\n}\n"
  },
  {
    "path": "app/Tools/FileManager/UpyunManager.php",
    "content": "<?php\n\nnamespace App\\Tools\\FileManager;\n\n\nuse Symfony\\Component\\HttpFoundation\\File\\UploadedFile;\n\nclass UpyunManager extends BaseManager\n{\n\n    /**\n     * Handle the file upload.\n     *\n     * @param \\Symfony\\Component\\HttpFoundation\\File\\UploadedFile $file\n     * @param string                                              $dir\n     * @param string                                              $name\n     *\n     * @return array|bool\n     */\n    public function store(UploadedFile $file, $dir = 'article', $name = '')\n    {\n        $hashName = empty($name)\n            ? str_ireplace('.jpeg', '.jpg', $file->hashName())\n            : $name;\n\n        $mime = $file->getMimeType();\n\n        $realPath = $this->disk->put($dir, $file);\n\n        return [\n            'success' => true,\n            'filename' => $hashName,\n            'original_name' => $file->getClientOriginalName(),\n            'mime' => $mime,\n            'size' => human_filesize($file->getClientSize()),\n            'real_path' => $realPath,\n            'relative_url' => '/'.$realPath,\n            'url' => $this->disk->getUrl($realPath),\n        ];\n    }\n}"
  },
  {
    "path": "app/Tools/Mailer.php",
    "content": "<?php\n\nnamespace App\\Tools;\n\nuse Naux\\Mail\\SendCloudTemplate;\nuse Mail;\n\nclass Mailer\n{\n    /**\n     * @param $template\n     * @param $email\n     * @param array $data\n     */\n    protected function sendTo($template, $email, array $data)\n    {\n        $content = new SendCloudTemplate($template, $data);\n\n        Mail::raw($content, function ($message) use ($email) {\n            $message->from('18313852226@qq.com', 'Code好事');\n            $message->to($email);\n        });\n    }\n}"
  },
  {
    "path": "app/Tools/Markdowner.php",
    "content": "<?php\n\nnamespace App\\Tools;\n\nuse Parsedown;\nuse League\\HTMLToMarkdown\\HtmlConverter;\n\nclass Markdowner\n{\n    /**\n     * @var HtmlConverter\n     */\n    protected $htmlConverter;\n\n    /**\n     * @var Parsedown\n     */\n    protected $markdownConverter;\n\n    /**\n     * Markdowner constructor.\n     */\n    public function __construct()\n    {\n        $this->htmlConverter = new HtmlConverter();\n\n        $this->markdownConverter = new Parsedown();\n    }\n\n    /**\n     * Convert Markdown To Html.\n     *\n     * @param $markdown\n     * @return string\n     */\n    public function convertMarkdownToHtml($markdown)\n    {\n        return $this->markdownConverter\n                    ->setBreaksEnabled(true)\n                    ->text($markdown);\n    }\n\n    /**\n     * Convert Html To Markdown.\n     *\n     * @param $html\n     * @return string\n     */\n    public function convertHtmlToMarkdown($html)\n    {\n        return $this->htmlConverter->convert($html);\n    }\n}\n"
  },
  {
    "path": "app/Tools/UserMailer.php",
    "content": "<?php\nnamespace App\\Tools;\nuse Auth;\n\n/**\n * Class UserMailer\n * @package App\\Mailer\n */\nclass UserMailer extends Mailer\n{\n    /**\n     * @param $email\n     * @param $token\n     */\n    public function passwordReset($email, $token)\n    {\n        $data = ['url' => url('password/reset', $token)];\n\n        $this->sendTo('codehaoshi_password_reset', $email, $data);\n    }\n}\n"
  },
  {
    "path": "app/Transformers/CommentTransformer.php",
    "content": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\Comment;\nuse League\\Fractal\\TransformerAbstract;\n\nclass CommentTransformer extends TransformerAbstract\n{\n    protected $availableIncludes = [ 'user' ];\n\n    public function transform(Comment $comment)\n    {\n\n        return [\n            'id'            => $comment->id,\n            'user_id'       => $comment->user_id,\n            'user_name'      => isset($comment->user) ? $comment->user->user_name : 'Null',\n            'avatar'        => isset($comment->user) ? $comment->user->avatar : config('codehaoshi.default_avatar'),\n            'content_raw'   => $comment->body,\n            'created_at'    => $comment->created_at->diffForHumans(),\n            'vote_count'    => $comment->vote_count,\n        ];\n    }\n\n    /**\n     * Include User\n     *\n     * @param Comment $comment\n     * @return \\League\\Fractal\\Resource\\Collection\n     */\n    public function includeUser(Comment $comment)\n    {\n        $user = $comment->user;\n\n        return $this->item($user, new UserTransformer);\n    }\n\n}\n"
  },
  {
    "path": "app/Transformers/ReplyTransformer.php",
    "content": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\Reply;\nuse League\\Fractal\\TransformerAbstract;\n\nclass ReplyTransformer extends TransformerAbstract\n{\n    protected $availableIncludes = [ 'user' ];\n\n    public function transform(Reply $reply)\n    {\n\n        return [\n            'id'            => $reply->id,\n            'user_id'       => $reply->user_id,\n            'user_name'      => isset($reply->user) ? $reply->user->user_name : 'Null',\n            'avatar'        => isset($reply->user) ? $reply->user->avatar : config('codehaoshi.default_avatar'),\n            'content_raw'   => $reply->body,\n            'created_at'    => $reply->created_at->diffForHumans(),\n            'vote_count'    => $reply->vote_count,\n        ];\n    }\n\n    /**\n     * Include User\n     *\n     * @param Comment $comment\n     * @return \\League\\Fractal\\Resource\\Collection\n     */\n    public function includeUser(Reply $reply)\n    {\n        $user = $reply->user;\n\n        return $this->item($user, new UserTransformer);\n    }\n\n}\n"
  },
  {
    "path": "app/Transformers/UserTransformer.php",
    "content": "<?php\n\nnamespace App\\Transformers;\n\nuse App\\Models\\User;\nuse League\\Fractal\\TransformerAbstract;\n\nclass UserTransformer extends TransformerAbstract\n{\n    public function transform(User $user)\n    {\n        return [\n            'id' => $user->id,\n            'avatar' => $user->avatar,\n            'user_name' => $user->name,\n            'created_at' => $user->created_at->toDateTimeString(),\n        ];\n    }\n}\n"
  },
  {
    "path": "artisan",
    "content": "#!/usr/bin/env php\n<?php\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so that we do not have to worry about the\n| loading of any our classes \"manually\". Feels great to relax.\n|\n*/\n\nrequire __DIR__.'/bootstrap/autoload.php';\n\n$app = require_once __DIR__.'/bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Artisan Application\n|--------------------------------------------------------------------------\n|\n| When we run the console application, the current CLI command will be\n| executed in this console and the response sent back to a terminal\n| or another output device for the developers. Here goes nothing!\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Console\\Kernel::class);\n\n$status = $kernel->handle(\n    $input = new Symfony\\Component\\Console\\Input\\ArgvInput,\n    new Symfony\\Component\\Console\\Output\\ConsoleOutput\n);\n\n/*\n|--------------------------------------------------------------------------\n| Shutdown The Application\n|--------------------------------------------------------------------------\n|\n| Once Artisan has finished running, we will fire off the shutdown events\n| so that any final work may be done by the application before we shut\n| down the process. This is the last thing to happen to the request.\n|\n*/\n\n$kernel->terminate($input, $status);\n\nexit($status);\n"
  },
  {
    "path": "bootstrap/app.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Create The Application\n|--------------------------------------------------------------------------\n|\n| The first thing we will do is create a new Laravel application instance\n| which serves as the \"glue\" for all the components of Laravel, and is\n| the IoC container for the system binding all of the various parts.\n|\n*/\n\n$app = new Illuminate\\Foundation\\Application(\n    realpath(__DIR__.'/../')\n);\n\n/*\n|--------------------------------------------------------------------------\n| Bind Important Interfaces\n|--------------------------------------------------------------------------\n|\n| Next, we need to bind some important interfaces into the container so\n| we will be able to resolve them when needed. The kernels serve the\n| incoming requests to this application from both the web and CLI.\n|\n*/\n\n$app->singleton(\n    Illuminate\\Contracts\\Http\\Kernel::class,\n    App\\Http\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Console\\Kernel::class,\n    App\\Console\\Kernel::class\n);\n\n$app->singleton(\n    Illuminate\\Contracts\\Debug\\ExceptionHandler::class,\n    App\\Exceptions\\Handler::class\n);\n\n/*\n|--------------------------------------------------------------------------\n| Return The Application\n|--------------------------------------------------------------------------\n|\n| This script returns the application instance. The instance is given to\n| the calling script so we can separate the building of the instances\n| from the actual running of the application and sending responses.\n|\n*/\n\nreturn $app;\n"
  },
  {
    "path": "bootstrap/autoload.php",
    "content": "<?php\n\ndefine('LARAVEL_START', microtime(true));\n\n/*\n|--------------------------------------------------------------------------\n| Register The Composer Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader\n| for our application. We just need to utilize it! We'll require it\n| into the script here so we do not have to manually load any of\n| our application's PHP classes. It just feels great to relax.\n|\n*/\n\nrequire __DIR__.'/../vendor/autoload.php';\n"
  },
  {
    "path": "bootstrap/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "composer.json",
    "content": "{\n  \"name\": \"laravel/laravel\",\n  \"description\": \"The Laravel Framework.\",\n  \"keywords\": [\n    \"framework\",\n    \"laravel\"\n  ],\n  \"license\": \"MIT\",\n  \"type\": \"project\",\n  \"require\": {\n    \"php\": \">=5.6.4\",\n    \"guzzlehttp/guzzle\": \"^6.3\",\n    \"jellybool/translug\": \"^2.0\",\n    \"laravel/framework\": \"5.5.*\",\n    \"laravel/passport\": \"^3.0\",\n    \"laravel/scout\": \"^3.0\",\n    \"laravel/socialite\": \"^3.0\",\n    \"laravel/tinker\": \"~1.0\",\n    \"league/fractal\": \"^0.16.0\",\n    \"league/html-to-markdown\": \"^4.4\",\n    \"naux/sendcloud\": \"^1.1\",\n    \"nicolaslopezj/searchable\": \"1.*\",\n    \"overtrue/easy-sms\": \"^0.0.9\",\n    \"overtrue/laravel-lang\": \"~3.0\",\n    \"predis/predis\": \"^1.1\",\n    \"rap2hpoutre/laravel-log-viewer\": \"^0.10.4\",\n    \"spatie/laravel-backup\": \"^4.19\",\n    \"spatie/laravel-pjax\": \"^1.3\",\n    \"ucer/entrust\": \"^1.0.1\"\n  },\n  \"require-dev\": {\n    \"barryvdh/laravel-debugbar\": \"^2.4\",\n    \"fzaninotto/faker\": \"~1.4\",\n    \"mockery/mockery\": \"0.9.*\",\n    \"phpunit/phpunit\": \"~5.7\"\n  },\n  \"autoload\": {\n    \"classmap\": [\n      \"database\"\n    ],\n    \"psr-4\": {\n      \"App\\\\\": \"app/\",\n      \"Codehaoshi\\\\\": \"app/Codehaoshi\"\n    },\n    \"files\": [\n      \"app/Helpers.php\"\n    ]\n  },\n  \"autoload-dev\": {\n    \"psr-4\": {\n      \"Tests\\\\\": \"tests/\"\n    }\n  },\n  \"scripts\": {\n    \"post-root-package-install\": [\n      \"php -r \\\"file_exists('.env') || copy('.env.example', '.env');\\\"\"\n    ],\n    \"post-create-project-cmd\": [\n      \"php artisan key:generate\"\n    ],\n    \"post-install-cmd\": [\n      \"Illuminate\\\\Foundation\\\\ComposerScripts::postInstall\",\n      \"php artisan optimize\"\n    ],\n    \"post-update-cmd\": [\n      \"Illuminate\\\\Foundation\\\\ComposerScripts::postUpdate\",\n      \"php artisan optimize\"\n    ]\n  },\n  \"config\": {\n    \"preferred-install\": \"dist\",\n    \"sort-packages\": true,\n    \"optimize-autoloader\": true\n  }\n}\n"
  },
  {
    "path": "config/app.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Name\n    |--------------------------------------------------------------------------\n    |\n    | This value is the name of your application. This value is used when the\n    | framework needs to place the application's name in a notification or\n    | any other location as required by the application or its packages.\n    */\n\n    'name' => env('APP_NAME', 'Laravel'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Environment\n    |--------------------------------------------------------------------------\n    |\n    | This value determines the \"environment\" your application is currently\n    | running in. This may determine how you prefer to configure various\n    | services your application utilizes. Set this in your \".env\" file.\n    |\n    */\n\n    'env' => env('APP_ENV', 'production'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Debug Mode\n    |--------------------------------------------------------------------------\n    |\n    | When your application is in debug mode, detailed error messages with\n    | stack traces will be shown on every error that occurs within your\n    | application. If disabled, a simple generic error page is shown.\n    |\n    */\n\n    'debug' => env('APP_DEBUG', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application URL\n    |--------------------------------------------------------------------------\n    |\n    | This URL is used by the console to properly generate URLs when using\n    | the Artisan command line tool. You should set this to the root of\n    | your application so that it is used when running Artisan tasks.\n    |\n    */\n\n    'url' => env('APP_URL', 'http://localhost'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Timezone\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default timezone for your application, which\n    | will be used by the PHP date and date-time functions. We have gone\n    | ahead and set this to a sensible default for you out of the box.\n    |\n    */\n\n    'timezone' => 'PRC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Locale Configuration\n    |--------------------------------------------------------------------------\n    |\n    | The application locale determines the default locale that will be used\n    | by the translation service provider. You are free to set this value\n    | to any of the locales which will be supported by the application.\n    |\n    */\n\n    'locale' => 'zh-CN',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Application Fallback Locale\n    |--------------------------------------------------------------------------\n    |\n    | The fallback locale determines the locale to use when the current one\n    | is not available. You may change the value to correspond to any of\n    | the language folders that are provided through your application.\n    |\n    */\n\n    'fallback_locale' => 'en',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Encryption Key\n    |--------------------------------------------------------------------------\n    |\n    | This key is used by the Illuminate encrypter service and should be set\n    | to a random, 32 character string, otherwise these encrypted strings\n    | will not be safe. Please do this before deploying an application!\n    |\n    */\n\n    'key' => env('APP_KEY'),\n\n    'cipher' => 'AES-256-CBC',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Logging Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the log settings for your application. Out of\n    | the box, Laravel uses the Monolog PHP logging library. This gives\n    | you a variety of powerful log handlers / formatters to utilize.\n    |\n    | Available Settings: \"single\", \"daily\", \"syslog\", \"errorlog\"\n    |\n    */\n\n    'log' => env('APP_LOG', 'daily'),\n    'log_max_files' => 30,\n\n    'log_level' => env('APP_LOG_LEVEL', 'debug'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Autoloaded Service Providers\n    |--------------------------------------------------------------------------\n    |\n    | The service providers listed here will be automatically loaded on the\n    | request to your application. Feel free to add your own services to\n    | this array to grant expanded functionality to your applications.\n    |\n    */\n\n    'providers' => [\n\n        /*\n         * Laravel Framework Service Providers...\n         */\n        Illuminate\\Auth\\AuthServiceProvider::class,\n        Illuminate\\Broadcasting\\BroadcastServiceProvider::class,\n        Illuminate\\Bus\\BusServiceProvider::class,\n        Illuminate\\Cache\\CacheServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\ConsoleSupportServiceProvider::class,\n        Illuminate\\Cookie\\CookieServiceProvider::class,\n        Illuminate\\Database\\DatabaseServiceProvider::class,\n        Illuminate\\Encryption\\EncryptionServiceProvider::class,\n        Illuminate\\Filesystem\\FilesystemServiceProvider::class,\n        Illuminate\\Foundation\\Providers\\FoundationServiceProvider::class,\n        Illuminate\\Hashing\\HashServiceProvider::class,\n        Illuminate\\Mail\\MailServiceProvider::class,\n        Illuminate\\Notifications\\NotificationServiceProvider::class,\n        Illuminate\\Pagination\\PaginationServiceProvider::class,\n        Illuminate\\Pipeline\\PipelineServiceProvider::class,\n        Illuminate\\Queue\\QueueServiceProvider::class,\n        Illuminate\\Redis\\RedisServiceProvider::class,\n        Illuminate\\Auth\\Passwords\\PasswordResetServiceProvider::class,\n        Illuminate\\Session\\SessionServiceProvider::class,\n//        Illuminate\\Translation\\TranslationServiceProvider::class,\n        Overtrue\\LaravelLang\\TranslationServiceProvider::class,\n        Illuminate\\Validation\\ValidationServiceProvider::class,\n        Illuminate\\View\\ViewServiceProvider::class,\n\n        /*\n         * Package Service Providers...\n         */\n        Laravel\\Tinker\\TinkerServiceProvider::class,\n\n        /*\n         * Application Service Providers...\n         */\n        App\\Providers\\AppServiceProvider::class,\n        App\\Providers\\AuthServiceProvider::class,\n        // App\\Providers\\BroadcastServiceProvider::class,\n        App\\Providers\\EventServiceProvider::class,\n        App\\Providers\\RouteServiceProvider::class,\n\n        // Self Add Providers...\n        Laravel\\Passport\\PassportServiceProvider::class,\n//        Barryvdh\\Debugbar\\ServiceProvider::class,\n        Ucer\\Entrust\\EntrustServiceProvider::class,\n        Laravel\\Socialite\\SocialiteServiceProvider::class,\n        \\JellyBool\\Translug\\TranslugServiceProvider::class,\n        App\\Providers\\CommonDataServiceProvider::class,\n        Spatie\\Backup\\BackupServiceProvider::class,\n        Rap2hpoutre\\LaravelLogViewer\\LaravelLogViewerServiceProvider::class,\n        Naux\\Mail\\SendCloudServiceProvider::class,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Class Aliases\n    |--------------------------------------------------------------------------\n    |\n    | This array of class aliases will be registered when this application\n    | is started. However, feel free to register as many as you wish as\n    | the aliases are \"lazy\" loaded so they don't hinder performance.\n    |\n    */\n\n    'aliases' => [\n\n        'App' => Illuminate\\Support\\Facades\\App::class,\n        'Artisan' => Illuminate\\Support\\Facades\\Artisan::class,\n        'Auth' => Illuminate\\Support\\Facades\\Auth::class,\n        'Blade' => Illuminate\\Support\\Facades\\Blade::class,\n        'Broadcast' => Illuminate\\Support\\Facades\\Broadcast::class,\n        'Bus' => Illuminate\\Support\\Facades\\Bus::class,\n        'Cache' => Illuminate\\Support\\Facades\\Cache::class,\n        'Config' => Illuminate\\Support\\Facades\\Config::class,\n        'Cookie' => Illuminate\\Support\\Facades\\Cookie::class,\n        'Crypt' => Illuminate\\Support\\Facades\\Crypt::class,\n        'DB' => Illuminate\\Support\\Facades\\DB::class,\n        'Eloquent' => Illuminate\\Database\\Eloquent\\Model::class,\n        'Event' => Illuminate\\Support\\Facades\\Event::class,\n        'File' => Illuminate\\Support\\Facades\\File::class,\n        'Gate' => Illuminate\\Support\\Facades\\Gate::class,\n        'Hash' => Illuminate\\Support\\Facades\\Hash::class,\n        'Lang' => Illuminate\\Support\\Facades\\Lang::class,\n        'Log' => Illuminate\\Support\\Facades\\Log::class,\n        'Mail' => Illuminate\\Support\\Facades\\Mail::class,\n        'Notification' => Illuminate\\Support\\Facades\\Notification::class,\n        'Password' => Illuminate\\Support\\Facades\\Password::class,\n        'Queue' => Illuminate\\Support\\Facades\\Queue::class,\n        'Redirect' => Illuminate\\Support\\Facades\\Redirect::class,\n        'Redis' => Illuminate\\Support\\Facades\\Redis::class,\n        'Request' => Illuminate\\Support\\Facades\\Request::class,\n        'Response' => Illuminate\\Support\\Facades\\Response::class,\n        'Route' => Illuminate\\Support\\Facades\\Route::class,\n        'Schema' => Illuminate\\Support\\Facades\\Schema::class,\n        'Session' => Illuminate\\Support\\Facades\\Session::class,\n        'Storage' => Illuminate\\Support\\Facades\\Storage::class,\n        'URL' => Illuminate\\Support\\Facades\\URL::class,\n        'Validator' => Illuminate\\Support\\Facades\\Validator::class,\n        'View' => Illuminate\\Support\\Facades\\View::class,\n\n        // Self Add aliases\n        'Socialite' => Laravel\\Socialite\\Facades\\Socialite::class,\n        'Translug' => \\JellyBool\\Translug\\TranslugFacade::class,\n//        'Entrust' => \\Ucer\\Entrust\\EntrustFacade::class,\n\n    ],\n\n];\n"
  },
  {
    "path": "config/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Defaults\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default authentication \"guard\" and password\n    | reset options for your application. You may change these defaults\n    | as required, but they're a perfect start for most applications.\n    |\n    */\n\n    'defaults' => [\n        'guard' => 'web',\n        'passwords' => 'users',\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Guards\n    |--------------------------------------------------------------------------\n    |\n    | Next, you may define every authentication guard for your application.\n    | Of course, a great default configuration has been defined for you\n    | here which uses session storage and the Eloquent user provider.\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | Supported: \"session\", \"token\"\n    |\n    */\n\n    'guards' => [\n        'web' => [\n            'driver' => 'session',\n            'provider' => 'users',\n        ],\n\n        'api' => [\n            'driver' => 'passport',\n            'provider' => 'users',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Providers\n    |--------------------------------------------------------------------------\n    |\n    | All authentication drivers have a user provider. This defines how the\n    | users are actually retrieved out of your database or other storage\n    | mechanisms used by this application to persist your user's data.\n    |\n    | If you have multiple user tables or models you may configure multiple\n    | sources which represent each model / table. These sources may then\n    | be assigned to any extra authentication guards you have defined.\n    |\n    | Supported: \"database\", \"eloquent\"\n    |\n    */\n\n    'providers' => [\n        'users' => [\n            'driver' => 'eloquent',\n            'model' => \\App\\Models\\User::class,\n            'table' => 'users',\n        ],\n\n        // 'users' => [\n        //     'driver' => 'database',\n        //     'table' => 'users',\n        // ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Resetting Passwords\n    |--------------------------------------------------------------------------\n    |\n    | You may specify multiple password reset configurations if you have more\n    | than one user table or model in the application and you want to have\n    | separate password reset settings based on the specific user types.\n    |\n    | The expire time is the number of minutes that the reset token should be\n    | considered valid. This security feature keeps tokens short-lived so\n    | they have less time to be guessed. You may change this as needed.\n    |\n    */\n\n    'passwords' => [\n        'users' => [\n            'provider' => 'users',\n            'table' => 'password_resets',\n            'expire' => 60,\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/broadcasting.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Broadcaster\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default broadcaster that will be used by the\n    | framework when an event needs to be broadcast. You may set this to\n    | any of the connections defined in the \"connections\" array below.\n    |\n    | Supported: \"pusher\", \"redis\", \"log\", \"null\"\n    |\n    */\n\n    'default' => env('BROADCAST_DRIVER', 'null'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Broadcast Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the broadcast connections that will be used\n    | to broadcast events to other systems or over websockets. Samples of\n    | each available type of connection are provided inside this array.\n    |\n    */\n\n    'connections' => [\n\n        'pusher' => [\n            'driver' => 'pusher',\n            'key' => env('PUSHER_APP_KEY'),\n            'secret' => env('PUSHER_APP_SECRET'),\n            'app_id' => env('PUSHER_APP_ID'),\n            'options' => [\n                //\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n        'log' => [\n            'driver' => 'log',\n        ],\n\n        'null' => [\n            'driver' => 'null',\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/cache.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default cache connection that gets used while\n    | using this caching library. This connection is used when another is\n    | not explicitly specified when executing a given caching function.\n    |\n    | Supported: \"apc\", \"array\", \"database\", \"file\", \"memcached\", \"redis\"\n    |\n    */\n\n    'default' => env('CACHE_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Stores\n    |--------------------------------------------------------------------------\n    |\n    | Here you may define all of the cache \"stores\" for your application as\n    | well as their drivers. You may even define multiple stores for the\n    | same cache driver to group types of items stored in your caches.\n    |\n    */\n\n    'stores' => [\n\n        'apc' => [\n            'driver' => 'apc',\n        ],\n\n        'array' => [\n            'driver' => 'array',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'cache',\n            'connection' => null,\n        ],\n\n        'file' => [\n            'driver' => 'file',\n            'path' => storage_path('framework/cache/data'),\n        ],\n\n        'memcached' => [\n            'driver' => 'memcached',\n            'persistent_id' => env('MEMCACHED_PERSISTENT_ID'),\n            'sasl' => [\n                env('MEMCACHED_USERNAME'),\n                env('MEMCACHED_PASSWORD'),\n            ],\n            'options' => [\n                // Memcached::OPT_CONNECT_TIMEOUT  => 2000,\n            ],\n            'servers' => [\n                [\n                    'host' => env('MEMCACHED_HOST', '127.0.0.1'),\n                    'port' => env('MEMCACHED_PORT', 11211),\n                    'weight' => 100,\n                ],\n            ],\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Cache Key Prefix\n    |--------------------------------------------------------------------------\n    |\n    | When utilizing a RAM based store such as APC or Memcached, there might\n    | be other applications utilizing the same cache. So, we'll specify a\n    | value to get prefixed to all our keys so we can avoid collisions.\n    |\n    */\n\n    'prefix' => 'laravel',\n\n];\n"
  },
  {
    "path": "config/codehaoshi.php",
    "content": "<?php\nreturn [\n    'thirdLogin' => [\n        'github' => true,\n        'qq' => false\n    ],\n    'uploadsPath' => [\n        'avatar' => 'avatar/',\n        'temp' => 'temp/',\n        'article' => 'article/',\n        'question' => 'question/'\n    ],\n    'dashboard' => [\n        'pagesize' => 20\n    ],\n    'comments_perpage' => 200,\n    'default_avatar' => '/images/header_default.gif',\n    // Social Share\n    'social_share' => [\n        'article_share'    => env('ARTICLE_SHARE') ?: true,\n        'discussion_share' => env('DISCUSSION_SHARE') ?: true,\n        'sites'            => env('SOCIAL_SHARE_SITES') ?: 'qzone,qq,weibo,wechat,douban,twitter',\n        'mobile_sites'     => env('SOCIAL_SHARE_MOBILE_SITES') ?: 'qzone,qq,weibo,wechat,douban,twitter',\n    ],\n    'notice' => [\n        'home_page_article' => 'Record some cool articles.',\n        'home_page_question' => 'A hodgepodge of problems.',\n        'info_page_article' => 'Good good study.',\n        'info_page_question' => 'Day day up.',\n    ],\n    'description' => 'Loading . . .'\n\n\n];\n"
  },
  {
    "path": "config/dashboardMenu.php",
    "content": "<?php\n//http://fontawesome.io/icons/\nreturn [\n    'leftMenu' => [\n        [\n            'name' => '用户管理',\n            'style' => 'users',\n            'sun' => [\n                [\n                    'name' => '用户管理',\n                    'href' => '/dashboard/user',\n                ],\n                [\n                    'name' => '角色管理',\n                    'href' => '/dashboard/role',\n                ],\n                [\n                    'name' => '权限管理',\n                    'href' => '/dashboard/permission',\n                ],\n            ]\n        ],\n\n        [\n            'name' => '内容管理',\n            'style' => 'ils',\n            'sun'  => [\n                [\n                    'name' => '文章分类',\n                    'href' => '/dashboard/articleCategory',\n                ],\n                [\n                    'name' => '文章管理',\n                    'href' => '/dashboard/article',\n                ],\n                [\n                    'name' => '标签管理',\n                    'href' => '/dashboard/tag',\n                ]\n            ]\n        ],\n\n\n        [\n            'name' => '问题管理',\n            'style' => 'question',\n            'sun'  => [\n                [\n                    'name' => '问题分类',\n                    'href' => '/dashboard/questionCategory',\n                ],\n                [\n                    'name' => '问题管理',\n                    'href' => '/dashboard/question',\n                ],\n            ]\n        ],\n\n        [\n            'name' => '站点管理',\n            'style' => 'gear',\n            'sun'  => [\n                [\n                    'name' => '友情链接',\n                    'href' => '/dashboard/links',\n                ],\n                [\n                    'name' => '关于我们',\n                    'href' => '/dashboard/abouts',\n                ],\n            ]\n        ]\n    ],\n];"
  },
  {
    "path": "config/database.php",
    "content": "<?php\n\nreturn [\n\n\t/*\n\t   |--------------------------------------------------------------------------\n\t   | Default Database Connection Name\n\t   |--------------------------------------------------------------------------\n\t   |\n\t   | Here you may specify which of the database connections below you wish\n\t   | to use as your default connection for all database work. Of course\n\t   | you may use many connections at once using the Database library.\n\t   |\n\t */\n\n\t'default' => env('DB_CONNECTION', 'mysql'),\n\n\t/*\n\t   |--------------------------------------------------------------------------\n\t   | Database Connections\n\t   |--------------------------------------------------------------------------\n\t   |\n\t   | Here are each of the database connections setup for your application.\n\t   | Of course, examples of configuring each database platform that is\n\t   | supported by Laravel is shown below to make development simple.\n\t   |\n\t   |\n\t   | All database work in Laravel is done through the PHP PDO facilities\n\t   | so make sure you have the driver for your particular database of\n\t   | choice installed on your machine before you begin development.\n\t   |\n\t */\n\n\t'connections' => [\n\n\t\t'sqlite' => [\n\t\t\t'driver' => 'sqlite',\n\t\t\t'database' => env('DB_DATABASE', database_path('database.sqlite')),\n\t\t\t'prefix' => '',\n\t\t],\n\n\t\t'mysql' => [\n\t\t\t'driver' => 'mysql',\n\t\t\t'host' => env('DB_HOST', '127.0.0.1'),\n\t\t\t'port' => env('DB_PORT', '3306'),\n\t\t\t'database' => env('DB_DATABASE', 'forge'),\n\t\t\t'username' => env('DB_USERNAME', 'forge'),\n\t\t\t'password' => env('DB_PASSWORD', ''),\n\t\t\t'unix_socket' => env('DB_SOCKET', ''),\n\t\t\t'charset' => 'utf8mb4',\n\t\t\t'collation' => 'utf8mb4_unicode_ci',\n\t\t\t'prefix' => '',\n\t\t\t'strict' => true,\n\t\t\t'engine' => null,\n\t\t\t'dump'  => [\n\t\t\t\t'dump_binary_path' => '/usr/local/mysql/bin',\n\t\t\t],\n\t\t],\n\n\t\t'pgsql' => [\n\t\t\t'driver' => 'pgsql',\n\t\t\t'host' => env('DB_HOST', '127.0.0.1'),\n\t\t\t'port' => env('DB_PORT', '5432'),\n\t\t\t'database' => env('DB_DATABASE', 'forge'),\n\t\t\t'username' => env('DB_USERNAME', 'forge'),\n\t\t\t'password' => env('DB_PASSWORD', ''),\n\t\t\t'charset' => 'utf8',\n\t\t\t'prefix' => '',\n\t\t\t'schema' => 'public',\n\t\t\t'sslmode' => 'prefer',\n\t\t],\n\n\t\t'sqlsrv' => [\n\t\t\t'driver' => 'sqlsrv',\n\t\t\t'host' => env('DB_HOST', 'localhost'),\n\t\t\t'port' => env('DB_PORT', '1433'),\n\t\t\t'database' => env('DB_DATABASE', 'forge'),\n\t\t\t'username' => env('DB_USERNAME', 'forge'),\n\t\t\t'password' => env('DB_PASSWORD', ''),\n\t\t\t'charset' => 'utf8',\n\t\t\t'prefix' => '',\n\t\t],\n\n\t\t],\n\n\t\t/*\n\t\t   |--------------------------------------------------------------------------\n\t\t   | Migration Repository Table\n\t\t   |--------------------------------------------------------------------------\n\t\t   |\n\t\t   | This table keeps track of all the migrations that have already run for\n\t\t   | your application. Using this information, we can determine which of\n\t\t   | the migrations on disk haven't actually been run in the database.\n\t\t   |\n\t\t */\n\n\t\t'migrations' => 'migrations',\n\n\t\t/*\n\t\t   |--------------------------------------------------------------------------\n\t\t   | Redis Databases\n\t\t   |--------------------------------------------------------------------------\n\t\t   |\n\t\t   | Redis is an open source, fast, and advanced key-value store that also\n\t\t   | provides a richer set of commands than a typical key-value systems\n\t\t   | such as APC or Memcached. Laravel makes it easy to dig right in.\n\t\t   |\n\t\t */\n\n\t\t'redis' => [\n\n\t\t\t'client' => 'predis',\n\n\t\t\t'default' => [\n\t\t\t\t'host' => env('REDIS_HOST', '127.0.0.1'),\n\t\t\t\t'password' => env('REDIS_PASSWORD', null),\n\t\t\t\t'port' => env('REDIS_PORT', 6379),\n\t\t\t\t'database' => 0,\n\t\t\t],\n\t\t\t'session' => [\n\t\t\t\t'host'     => env('REDIS_HOST', 'localhost'),\n\t\t\t\t'password' => env('REDIS_PASSWORD', null),\n\t\t\t\t'port'     => env('REDIS_PORT', 6379),\n\t\t\t\t'database' => 1,\n\t\t\t],\n\n\t\t],\n\n\t\t];\n"
  },
  {
    "path": "config/entrust.php",
    "content": "<?php\n\n/**\n * This file is part of Entrust,\n * a role & permission management solution for Laravel.\n *\n * @license MIT\n * @package Zizaco\\Entrust\n */\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust Role Model\n    |--------------------------------------------------------------------------\n    |\n    | This is the Role model used by Entrust to create correct relations.  Update\n    | the role if it is in a different namespace.\n    |\n    */\n    'role' => 'App\\Models\\Role',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust Roles Table\n    |--------------------------------------------------------------------------\n    |\n    | This is the roles table used by Entrust to save roles to the database.\n    |\n    */\n    'roles_table' => 'roles',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust Permission Model\n    |--------------------------------------------------------------------------\n    |\n    | This is the Permission model used by Entrust to create correct relations.\n    | Update the permission if it is in a different namespace.\n    |\n    */\n    'permission' => 'App\\Models\\Permission',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust Permissions Table\n    |--------------------------------------------------------------------------\n    |\n    | This is the permissions table used by Entrust to save permissions to the\n    | database.\n    |\n    */\n    'permissions_table' => 'permissions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust permission_role Table\n    |--------------------------------------------------------------------------\n    |\n    | This is the permission_role table used by Entrust to save relationship\n    | between permissions and roles to the database.\n    |\n    */\n    'permission_role_table' => 'permission_role',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Entrust role_user Table\n    |--------------------------------------------------------------------------\n    |\n    | This is the role_user table used by Entrust to save assigned roles to the\n    | database.\n    |\n    */\n    'role_user_table' => 'role_user',\n\n    /*\n    |--------------------------------------------------------------------------\n    | User Foreign key on Entrust's role_user Table (Pivot)\n    |--------------------------------------------------------------------------\n    */\n    'user_foreign_key' => 'user_id',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Role Foreign key on Entrust's role_user and permission_role Tables (Pivot)\n    |--------------------------------------------------------------------------\n    */\n    'role_foreign_key' => 'role_id',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Permission Foreign key on Entrust's permission_role Table (Pivot)\n    |--------------------------------------------------------------------------\n    */\n    'permission_foreign_key' => 'permission_id',\n];\n"
  },
  {
    "path": "config/filesystems.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the default filesystem disk that should be used\n    | by the framework. The \"local\" disk, as well as a variety of cloud\n    | based disks are available to your application. Just store away!\n    |\n    */\n\n    'default' => env('FILESYSTEM_DRIVER', 'public'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Cloud Filesystem Disk\n    |--------------------------------------------------------------------------\n    |\n    | Many applications store files both locally and in the cloud. For this\n    | reason, you may specify a default \"cloud\" driver here. This driver\n    | will be bound as the Cloud disk implementation in the container.\n    |\n    */\n\n    'cloud' => env('FILESYSTEM_CLOUD', 's3'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Filesystem Disks\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure as many filesystem \"disks\" as you wish, and you\n    | may even configure multiple disks of the same driver. Defaults have\n    | been setup for each driver as an example of the required options.\n    |\n    | Supported Drivers: \"local\", \"ftp\", \"s3\", \"rackspace\"\n    |\n    */\n\n    'disks' => [\n\n        'local' => [\n            'driver' => 'local',\n            'root' => storage_path('app'),\n        ],\n\n        'public' => [\n            'driver' => 'local',\n            'root' => public_path(env('UPLOAD_PATH','uploads')),\n        ],\n        'backup' => [\n            'driver' => 'local',\n            'root'   => env('BACKUP_DISK', storage_path('app')),\n        ],\n        'qiniu' => [\n            'driver'     => 'qiniu',\n            'access_key' => env('QINIU_ACCESS_KEY', 'xxxxxxxxxxxxxxxx'),\n            'secret_key' => env('QINIU_SECRET_KEY', 'xxxxxxxxxxxxxxxx'),\n            'bucket'     => env('QINIU_BUCKET', 'test'),\n            'domain'     => env('QINIU_DOMAIN', 'xxx.clouddn.com'), // or host: https://xxxx.clouddn.com\n        ],\n\n        's3' => [\n            'driver' => 's3',\n            'key' => env('AWS_KEY'),\n            'secret' => env('AWS_SECRET'),\n            'region' => env('AWS_REGION'),\n            'bucket' => env('AWS_BUCKET'),\n        ],\n\n    ],\n\n];\n"
  },
  {
    "path": "config/laravel-backup.php",
    "content": "<?php\nuse APp\\Codehaoshi\\Handler\\BackupHandler;\n\nreturn [\n\n    'backup' => [\n\n        /*\n         * The name of this application. You can use this name to monitor\n         * the backups.\n         */\n        'name' => 'codehaoshi.com',\n\n        'source' => [\n\n            'files' => [\n\n                /*\n                 * The list of directories and files that will be included in the backup.\n                 */\n                'include' => [\n                    base_path(),\n                ],\n\n                /*\n                 * These directories and files will be excluded from the backup.\n                 *\n                 * Directories used by the backup process will automatically be excluded.\n                 */\n                'exclude' => [\n                    base_path('vendor'),\n                    base_path('node_modules'),\n                    public_path('assets/dashboard'),\n                    storage_path()\n                ],\n\n                /*\n                 * Determines if symlinks should be followed.\n                 */\n                'followLinks' => false,\n            ],\n\n            /*\n             * The names of the connections to the databases that should be backed up\n             * MySQL, PostgreSQL, SQLite and Mongo databases are supported.\n             */\n            'databases' => [\n                'mysql',\n            ],\n        ],\n\n        /*\n         * The database dump can be gzipped to decrease diskspace usage.\n         */\n        'gzip_database_dump' => false,\n\n        'destination' => [\n\n            /*\n             * The filename prefix used for the backup zip file.\n             */\n            'filename_prefix' => '',\n\n            /*\n             * The disk names on which the backups will be stored.\n             */\n            'disks' => [\n                'backup',\n            ],\n        ],\n    ],\n\n    /*\n     * You can get notified when specific events occur. Out of the box you can use 'mail' and 'slack'.\n     * For Slack you need to install guzzlehttp/guzzle.\n     *\n     * You can also use your own notification classes, just make sure the class is named after one of\n     * the `Spatie\\Backup\\Events` classes.\n     */\n    'notifications' => [\n\n        'notifications' => [\n            \\Spatie\\Backup\\Notifications\\Notifications\\BackupHasFailed::class         => ['mail'],\n            \\Spatie\\Backup\\Notifications\\Notifications\\UnhealthyBackupWasFound::class => ['mail'],\n            \\Spatie\\Backup\\Notifications\\Notifications\\CleanupHasFailed::class        => ['mail'],\n            \\Spatie\\Backup\\Notifications\\Notifications\\BackupWasSuccessful::class     => ['mail'],\n            \\Spatie\\Backup\\Notifications\\Notifications\\HealthyBackupWasFound::class   => ['mail'],\n            \\Spatie\\Backup\\Notifications\\Notifications\\CleanupWasSuccessful::class    => ['mail'],\n        ],\n\n        /*\n         * Here you can specify the notifiable to which the notifications should be sent. The default\n         * notifiable will use the variables specified in this config file.\n         */\n        'notifiable' => \\Spatie\\Backup\\Notifications\\Notifiable::class,\n\n        'mail' => [\n            'from' => 'code好事',\n            'to' => '18313852226@sina.cn',\n        ],\n\n        'slack' => [\n            'webhook_url' => '',\n\n            /*\n             * If this is set to null the default channel of the webhook will be used.\n             */\n            'channel' => null,\n        ],\n    ],\n\n    /*\n     * Here you can specify which backups should be monitored.\n     * If a backup does not meet the specified requirements the\n     * UnHealthyBackupWasFound event will be fired.\n     */\n    'monitorBackups' => [\n        [\n            'name' => env('APP_URL'),\n            'disks' => ['local'],\n            'newestBackupsShouldNotBeOlderThanDays' => 1,\n            'storageUsedMayNotBeHigherThanMegabytes' => 5000,\n        ],\n\n        /*\n        [\n            'name' => 'name of the second app',\n            'disks' => ['local', 's3'],\n            'newestBackupsShouldNotBeOlderThanDays' => 1,\n            'storageUsedMayNotBeHigherThanMegabytes' => 5000,\n        ],\n        */\n    ],\n\n    'cleanup' => [\n        /*\n         * The strategy that will be used to cleanup old backups. The default strategy\n         * will keep all backups for a certain amount of days. After that period only\n         * a daily backup will be kept. After that period only weekly backups will\n         * be kept and so on.\n         *\n         * No matter how you configure it the default strategy will never\n         * delete the newest backup.\n         */\n        'strategy' => \\Spatie\\Backup\\Tasks\\Cleanup\\Strategies\\DefaultStrategy::class,\n\n        'defaultStrategy' => [\n\n            /*\n             * The number of days for which backups must be kept.\n             */\n            'keepAllBackupsForDays' => 7,\n\n            /*\n             * The number of days for which daily backups must be kept.\n             */\n            'keepDailyBackupsForDays' => 16,\n\n            /*\n             * The number of weeks for which one weekly backup must be kept.\n             */\n            'keepWeeklyBackupsForWeeks' => 8,\n\n            /*\n             * The number of months for which one monthly backup must be kept.\n             */\n            'keepMonthlyBackupsForMonths' => 4,\n\n            /*\n             * The number of years for which one yearly backup must be kept.\n             */\n            'keepYearlyBackupsForYears' => 2,\n\n            /*\n             * After cleaning up the backups remove the oldest backup until\n             * this amount of megabytes has been reached.\n             */\n            'deleteOldestBackupsWhenUsingMoreMegabytesThan' => 5000,\n        ],\n    ],\n];\n"
  },
  {
    "path": "config/mail.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Mail Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel supports both SMTP and PHP's \"mail\" function as drivers for the\n    | sending of e-mail. You may specify which one you're using throughout\n    | your application here. By default, Laravel is setup for SMTP mail.\n    |\n    | Supported: \"smtp\", \"sendmail\", \"mailgun\", \"mandrill\", \"ses\",\n    |            \"sparkpost\", \"log\", \"array\"\n    |\n    */\n\n    'driver' => env('MAIL_DRIVER', 'smtp'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Address\n    |--------------------------------------------------------------------------\n    |\n    | Here you may provide the host address of the SMTP server used by your\n    | applications. A default option is provided that is compatible with\n    | the Mailgun mail service which will provide reliable deliveries.\n    |\n    */\n\n    'host' => env('MAIL_HOST', 'smtp.mailgun.org'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Host Port\n    |--------------------------------------------------------------------------\n    |\n    | This is the SMTP port used by your application to deliver e-mails to\n    | users of the application. Like the host we have set this value to\n    | stay compatible with the Mailgun e-mail application by default.\n    |\n    */\n\n    'port' => env('MAIL_PORT', 587),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Global \"From\" Address\n    |--------------------------------------------------------------------------\n    |\n    | You may wish for all e-mails sent by your application to be sent from\n    | the same address. Here, you may specify a name and address that is\n    | used globally for all e-mails that are sent by your application.\n    |\n    */\n\n    'from' => [\n        'address' => env('MAIL_FROM_ADDRESS', '18313852226@sina.cn'),\n        'name' => env('MAIL_FROM_NAME', 'Code好事'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | E-Mail Encryption Protocol\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the encryption protocol that should be used when\n    | the application send e-mail messages. A sensible default using the\n    | transport layer security protocol should provide great security.\n    |\n    */\n\n    'encryption' => env('MAIL_ENCRYPTION', 'tls'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | SMTP Server Username\n    |--------------------------------------------------------------------------\n    |\n    | If your SMTP server requires a username for authentication, you should\n    | set it here. This will get used to authenticate with your server on\n    | connection. You may also set the \"password\" value below this one.\n    |\n    */\n\n    'username' => env('MAIL_USERNAME'),\n\n    'password' => env('MAIL_PASSWORD'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Sendmail System Path\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"sendmail\" driver to send e-mails, we will need to know\n    | the path to where Sendmail lives on this server. A default path has\n    | been provided here, which will work well on most of your systems.\n    |\n    */\n\n    'sendmail' => '/usr/sbin/sendmail -bs',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Markdown Mail Settings\n    |--------------------------------------------------------------------------\n    |\n    | If you are using Markdown based email rendering, you may configure your\n    | theme and component paths here, allowing you to customize the design\n    | of the emails. Or, you may simply stick with the Laravel defaults!\n    |\n    */\n\n    'markdown' => [\n        'theme' => 'default',\n\n        'paths' => [\n            resource_path('views/vendor/mail'),\n        ],\n    ],\n\n];\n"
  },
  {
    "path": "config/queue.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Queue Driver\n    |--------------------------------------------------------------------------\n    |\n    | Laravel's queue API supports an assortment of back-ends via a single\n    | API, giving you convenient access to each back-end using the same\n    | syntax for each one. Here you may set the default queue driver.\n    |\n    | Supported: \"sync\", \"database\", \"beanstalkd\", \"sqs\", \"redis\", \"null\"\n    |\n    */\n\n    'default' => env('QUEUE_DRIVER', 'sync'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Connections\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure the connection information for each server that\n    | is used by your application. A default configuration has been added\n    | for each back-end shipped with Laravel. You are free to add more.\n    |\n    */\n\n    'connections' => [\n\n        'sync' => [\n            'driver' => 'sync',\n        ],\n\n        'database' => [\n            'driver' => 'database',\n            'table' => 'jobs',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'beanstalkd' => [\n            'driver' => 'beanstalkd',\n            'host' => 'localhost',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n        'sqs' => [\n            'driver' => 'sqs',\n            'key' => 'your-public-key',\n            'secret' => 'your-secret-key',\n            'prefix' => 'https://sqs.us-east-1.amazonaws.com/your-account-id',\n            'queue' => 'your-queue-name',\n            'region' => 'us-east-1',\n        ],\n\n        'redis' => [\n            'driver' => 'redis',\n            'connection' => 'default',\n            'queue' => 'default',\n            'retry_after' => 90,\n        ],\n\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Failed Queue Jobs\n    |--------------------------------------------------------------------------\n    |\n    | These options configure the behavior of failed queue job logging so you\n    | can control which database and table are used to store the jobs that\n    | have failed. You may change them to any database / table you wish.\n    |\n    */\n\n    'failed' => [\n        'database' => env('DB_CONNECTION', 'mysql'),\n        'table' => 'failed_jobs',\n    ],\n\n];\n"
  },
  {
    "path": "config/scout.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Search Engine\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default search connection that gets used while\n    | using Laravel Scout. This connection is used when syncing all models\n    | to the search service. You should adjust this based on your needs.\n    |\n    | Supported: \"algolia\", \"null\"\n    |\n    */\n\n    'driver' => env('SCOUT_DRIVER', 'algolia'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Index Prefix\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify a prefix that will be applied to all search index\n    | names used by Scout. This prefix may be useful if you have multiple\n    | \"tenants\" or applications sharing the same search infrastructure.\n    |\n    */\n\n    'prefix' => env('SCOUT_PREFIX', ''),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Queue Data Syncing\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to control if the operations that sync your data\n    | with your search engines are queued. When this is set to \"true\" then\n    | all automatic data syncing will get queued for better performance.\n    |\n    */\n\n    'queue' => env('SCOUT_QUEUE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Chuck Sizes\n    |--------------------------------------------------------------------------\n    |\n    | These options allow you to control the maximum chunk size when you are\n    | mass importing data into the search engine. This allows you to fine\n    | tune these chunk sizes based on the capabilites of your machines.\n    |\n    */\n\n    'chunk' => [\n        'searchable' => 500,\n        'unsearchable' => 500,\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Algolia Configuration\n    |--------------------------------------------------------------------------\n    |\n    | Here you may configure your Algolia settings. Algolia is a cloud hosted\n    | search engine which works great with Scout out of the box. Just plug\n    | in your application ID and admin API key to get started searching.\n    |\n    */\n\n    'algolia' => [\n        'id' => env('ALGOLIA_APP_ID', ''),\n        'secret' => env('ALGOLIA_SECRET', ''),\n    ],\n\n];\n"
  },
  {
    "path": "config/services.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Third Party Services\n    |--------------------------------------------------------------------------\n    |\n    | This file is for storing the credentials for third party services such\n    | as Stripe, Mailgun, SparkPost and others. This file provides a sane\n    | default location for this type of information, allowing packages\n    | to have a conventional place to find your various credentials.\n    |\n    */\n\n    'mailgun' => [\n        'domain' => env('MAILGUN_DOMAIN'),\n        'secret' => env('MAILGUN_SECRET'),\n    ],\n\n    'ses' => [\n        'key' => env('SES_KEY'),\n        'secret' => env('SES_SECRET'),\n        'region' => 'us-east-1',\n    ],\n\n    'sparkpost' => [\n        'secret' => env('SPARKPOST_SECRET'),\n    ],\n\n    'stripe' => [\n        'model' => App\\User::class,\n        'key' => env('STRIPE_KEY'),\n        'secret' => env('STRIPE_SECRET'),\n    ],\n    // Self add services config\n    'github' => [\n        'client_id'     => env('CLIENT_ID'),\n        'client_secret' => env('CLIENT_SECRET'),\n        'redirect'      => str_finish(env('APP_URL'), '/').'login/github/callback',// str_finish方法是 laravel 自带的助手函数\n    ],\n    'youdao' => [\n        'appKey' => env('YOUDAO_APP_KEY'),\n        'appSecret' => env('YOUDAO_APP_SECRET'),\n    ],\n\n];\n"
  },
  {
    "path": "config/session.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Default Session Driver\n    |--------------------------------------------------------------------------\n    |\n    | This option controls the default session \"driver\" that will be used on\n    | requests. By default, we will use the lightweight native driver but\n    | you may specify any of the other wonderful drivers provided here.\n    |\n    | Supported: \"file\", \"cookie\", \"database\", \"apc\",\n    |            \"memcached\", \"redis\", \"array\"\n    |\n    */\n\n    'driver' => env('SESSION_DRIVER', 'file'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Lifetime\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify the number of minutes that you wish the session\n    | to be allowed to remain idle before it expires. If you want them\n    | to immediately expire on the browser closing, set that option.\n    |\n    */\n\n    'lifetime' => 120,\n\n    'expire_on_close' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Encryption\n    |--------------------------------------------------------------------------\n    |\n    | This option allows you to easily specify that all of your session data\n    | should be encrypted before it is stored. All encryption will be run\n    | automatically by Laravel and you can use the Session like normal.\n    |\n    */\n\n    'encrypt' => false,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session File Location\n    |--------------------------------------------------------------------------\n    |\n    | When using the native session driver, we need a location where session\n    | files may be stored. A default has been set for you but a different\n    | location may be specified. This is only needed for file sessions.\n    |\n    */\n\n    'files' => storage_path('framework/sessions'),\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Connection\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" or \"redis\" session drivers, you may specify a\n    | connection that should be used to manage these sessions. This should\n    | correspond to a connection in your database configuration options.\n    |\n    */\n\n    'connection' => 'session',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Database Table\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"database\" session driver, you may specify the table we\n    | should use to manage the sessions. Of course, a sensible default is\n    | provided for you; however, you are free to change this as needed.\n    |\n    */\n\n    'table' => 'sessions',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cache Store\n    |--------------------------------------------------------------------------\n    |\n    | When using the \"apc\" or \"memcached\" session drivers, you may specify a\n    | cache store that should be used for these sessions. This value must\n    | correspond with one of the application's configured cache stores.\n    |\n    */\n\n    'store' => null,\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Sweeping Lottery\n    |--------------------------------------------------------------------------\n    |\n    | Some session drivers must manually sweep their storage location to get\n    | rid of old sessions from storage. Here are the chances that it will\n    | happen on a given request. By default, the odds are 2 out of 100.\n    |\n    */\n\n    'lottery' => [2, 100],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Name\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the name of the cookie used to identify a session\n    | instance by ID. The name specified here will get used every time a\n    | new session cookie is created by the framework for every driver.\n    |\n    */\n\n    'cookie' => 'laravel_session',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Path\n    |--------------------------------------------------------------------------\n    |\n    | The session cookie path determines the path for which the cookie will\n    | be regarded as available. Typically, this will be the root path of\n    | your application but you are free to change this when necessary.\n    |\n    */\n\n    'path' => '/',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Session Cookie Domain\n    |--------------------------------------------------------------------------\n    |\n    | Here you may change the domain of the cookie used to identify a session\n    | in your application. This will determine which domains the cookie is\n    | available to in your application. A sensible default has been set.\n    |\n    */\n\n    'domain' => env('SESSION_DOMAIN', null),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTPS Only Cookies\n    |--------------------------------------------------------------------------\n    |\n    | By setting this option to true, session cookies will only be sent back\n    | to the server if the browser has a HTTPS connection. This will keep\n    | the cookie from being sent to you if it can not be done securely.\n    |\n    */\n\n    'secure' => env('SESSION_SECURE_COOKIE', false),\n\n    /*\n    |--------------------------------------------------------------------------\n    | HTTP Access Only\n    |--------------------------------------------------------------------------\n    |\n    | Setting this value to true will prevent JavaScript from accessing the\n    | value of the cookie and the cookie will only be accessible through\n    | the HTTP protocol. You are free to modify this option if needed.\n    |\n    */\n\n    'http_only' => true,\n\n];\n"
  },
  {
    "path": "config/view.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | View Storage Paths\n    |--------------------------------------------------------------------------\n    |\n    | Most templating systems load templates from disk. Here you may specify\n    | an array of paths that should be checked for your views. Of course\n    | the usual Laravel view path has already been registered for you.\n    |\n    */\n\n    'paths' => [\n        resource_path('views'),\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Compiled View Path\n    |--------------------------------------------------------------------------\n    |\n    | This option determines where all the compiled Blade templates will be\n    | stored for your application. Typically, this is within the storage\n    | directory. However, as usual, you are free to change this value.\n    |\n    */\n\n    'compiled' => realpath(storage_path('framework/views')),\n\n];\n"
  },
  {
    "path": "database/.gitignore",
    "content": "*.sqlite\n"
  },
  {
    "path": "database/factories/ModelFactory.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Model Factories\n|--------------------------------------------------------------------------\n|\n| Here you may define all of your model factories. Model factories give\n| you a convenient way to create models for testing and seeding your\n| database. Just tell the factory how a default model should look.\n|\n*/\n\n/** @var \\Illuminate\\Database\\Eloquent\\Factory $factory */\n$factory->define(\\App\\Models\\User::class, function (Faker\\Generator $faker) {\n    static $password;\n    return [\n        'city'                 => $faker->city,\n        'user_name'            => $faker->userName,\n        'is_admin'            => 'no',\n        'github_name'          => $faker->userName,\n        'company'              => $faker->userName,\n        'personal_website'     => $faker->url,\n        'introduction'         => $faker->sentence,\n        'email'                => $faker->email,\n        'password'       => $password ?: $password = bcrypt('secret'),\n        'avatar'               => '/assets/dashboard/images/head_default.gif',\n        'status'               => '1',\n        'article_count'        => '0',\n        'question_count'       => '0',\n        'created_at'           => \\Carbon\\Carbon::now()\n    ];\n});\n\n\n$factory->define(\\App\\Models\\Article::class, function (Faker\\Generator $faker) {\n    $title = $faker->sentence(mt_rand(3,10));\n    return [\n        'last_comment_user_id' => 0,\n        'slug'     => str_slug($title),\n        'title'    => $title,\n        'content'  => $faker->paragraph,\n        'description' => $faker->sentence,\n        'published_at'     => \\Carbon\\Carbon::now(),\n        'created_at'        => \\Carbon\\Carbon::now(),\n    ];\n});\n\n\n$factory->define(\\App\\Models\\Question::class, function (Faker\\Generator $faker) {\n    $title = $faker->sentence(mt_rand(3,10));\n    return [\n        'last_reply_user_id' => 0,\n        'slug'     => str_slug($title),\n        'title'    => $title,\n        'content'  => $faker->paragraph,\n        'description' => $faker->sentence,\n        'published_at'     => \\Carbon\\Carbon::now(),\n        'created_at'        => \\Carbon\\Carbon::now(),\n    ];\n});\n"
  },
  {
    "path": "database/migrations/2014_10_12_000000_create_users_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateUsersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('users', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('user_name')->nullable()->unique()->comment('用户名')->index();\n            $table->string('nickname')->nullable()->comment('昵称')->index();\n            $table->string('email')->nullable()->unique()->comment('email');\n            $table->text('avatar')->nullable()->comment('头像');\n            $table->string('password')->nullable()->comment('密码');\n            $table->tinyInteger('status')->default(0)->comment('用户状态：0禁用，1启用');\n            $table->enum('is_admin', ['yes','no'])->default('no')->index()->comment('是否为后台管理员：no 否，yes 是');\n            $table->string('city')->nullable()->comment('城市');\n            $table->string('company')->nullable()->comment('公司');\n            $table->string('personal_website')->nullable()->comment('个人网站');\n            $table->string('introduction')->nullable()->comment('个人介绍');\n            $table->integer('notification_count')->default(0)->comment('通告消息数量');\n            $table->integer('article_count')->default(0)->index()->comment('发布的文章数量');\n            $table->integer('question_count')->default(0)->index()->comment('发布的问题数量');\n            $table->integer('follower_count')->default(0)->index()->comment('粉丝数量');\n            $table->integer('comment_count')->default(0)->index()->comment('评论的文章数量');\n            $table->integer('reply_count')->default(0)->index()->comment('评论的问题数量');\n            $table->integer('github_id')->nullable()->index();\n            $table->string('github_name')->nullable()->index();\n            $table->string('image_url')->nullable();\n            $table->string('register_source')->nullable()->index();\n            $table->string('remember_token')->nullable();\n            $table->string('login_token')->nullable()->comment('登录 token');\n            $table->string('verification_token')->nullable();\n            $table->timestamp('last_actived_at')->nullable();\n            $table->timestamp('created_at')->nullable();\n            $table->timestamp('updated_at')->nullable();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('users');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2014_10_12_100000_create_password_resets_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreatePasswordResetsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('password_resets', function (Blueprint $table) {\n            $table->string('email')->index();\n            $table->string('token');\n            $table->timestamp('created_at')->nullable();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('password_resets');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_03_153641_entrust_setup_tables.php",
    "content": "<?php\nuse Illuminate\\Database\\Migrations\\Migration;\nuse Illuminate\\Database\\Schema\\Blueprint;\n\nclass EntrustSetupTables extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return  void\n     */\n    public function up()\n    {\n        // Create table for storing roles\n        Schema::create('roles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique();\n            $table->string('display_name')->nullable();\n            $table->string('description')->nullable();\n            $table->timestamps();\n        });\n\n        // Create table for associating roles to users (Many-to-Many)\n        Schema::create('role_user', function (Blueprint $table) {\n            $table->integer('user_id')->unsigned();\n            $table->integer('role_id')->unsigned();\n\n            $table->foreign('user_id')->references('id')->on('users')\n                ->onUpdate('cascade')->onDelete('cascade');\n            $table->foreign('role_id')->references('id')->on('roles')\n                ->onUpdate('cascade')->onDelete('cascade');\n\n            $table->primary(['user_id', 'role_id']);\n        });\n\n        // Create table for storing permissions\n        Schema::create('permissions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('name')->unique();\n            $table->string('display_name')->nullable();\n            $table->string('description')->nullable();\n            $table->timestamps();\n        });\n\n        // Create table for associating permissions to roles (Many-to-Many)\n        Schema::create('permission_role', function (Blueprint $table) {\n            $table->integer('permission_id')->unsigned();\n            $table->integer('role_id')->unsigned();\n\n            $table->foreign('permission_id')->references('id')->on('permissions')\n                ->onUpdate('cascade')->onDelete('cascade');\n            $table->foreign('role_id')->references('id')->on('roles')\n                ->onUpdate('cascade')->onDelete('cascade');\n\n            $table->primary(['permission_id', 'role_id']);\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return  void\n     */\n    public function down()\n    {\n        Schema::drop('permission_role');\n        Schema::drop('permissions');\n        Schema::drop('role_user');\n        Schema::drop('roles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_05_175713_create_article_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateArticleCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('article_categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->tinyInteger('parent_id')->unsigned()->default(0)->comment('父id');\n            $table->string('name')->index()->comment('名称');\n            $table->string('slug', 60)->unique()->comment('缩略名');\n            $table->tinyInteger('weight')->default(0)->comment('权重');\n            $table->integer('article_count')->default(0)->comment('文章数');\n            $table->string('description')->nullable();\n            $table->string('image_url')->nullable()->comment('封面图片');\n            $table->string('style', 30)->default('violet')->comment('样式');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('article_categories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_05_175737_create_articles_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateArticlesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('articles', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('category_id')->unsigned()->index()->comment('分类id');\n            $table->integer('user_id')->unsigned()->comment('作者id');\n            $table->integer('comment_count')->default(0)->index()->comment('评论数量');\n            $table->integer('view_count')->unsigned()->default(0)->index()->comment('查看数量');\n            $table->integer('vote_count')->default(0)->index()->comment('点赞数量');\n            $table->integer('last_comment_user_id')->unsigned()->default(0)->index()->comment('最近一次评论者');\n            $table->integer('weight')->default(50)->index()->comment('权重');\n            $table->enum('is_excellent', ['yes', 'no'])->default('no')->index()->comment('是否是优秀文章');\n            $table->enum('is_hot', ['yes', 'no'])->default('no')->index()->comment('是否是热门文章');\n            $table->enum('only_owner_can_see', ['yes', 'no'])->default('no')->index()->comment('是否仅自己可见');\n            $table->enum('is_draft', ['yes', 'no'])->default('no')->index()->comment('是否为草稿');\n            $table->string('title')->index()->comment('标题');\n            $table->string('slug')->unique()->comment('缩略标题');\n            $table->text('content')->comment('文章内容');\n            $table->string('description')->nullable()->comment('描述');\n            $table->timestamp('published_at')->nullable()->index()->comment('发布时间');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('articles');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_07_070242_create_tags_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateTagsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('tags', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('tag')->unique();\n            $table->string('slug');\n            $table->string('description');\n            $table->string('style', 30)->default('violet')->comment('样式');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('tags');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_07_070317_create_taggables_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateTaggablesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('taggables', function (Blueprint $table) {\n            $table->integer('tag_id')->unsigned()->index();\n            $table->integer('taggable_id')->unsigned()->index();\n            $table->string('taggable_type')->index();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('taggables');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_10_054604_create_comments_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateCommentsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('comments', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('article_id')->unsigned()->default(0)->index();\n            $table->integer('user_id')->unsigned()->default(0)->index();\n            $table->enum('is_blocked', ['yes', 'no'])->default('no')->index();\n            $table->integer('vote_count')->default(0)->index();\n            $table->text('body');\n            $table->text('body_original')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('comments');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_13_063712_create_votes_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateVotesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('votes', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('user_id')->unsigned()->default(0);\n            $table->integer('votable_id')->unsigned()->default(0);\n            $table->string('votable_type')->index();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('votes');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_14_090729_create_followers_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateFollowersTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('followers', function (Blueprint $table) {\n            $table->increments('id');\n            $table->unsignedInteger('user_id');\n            $table->unsignedInteger('follow_id');\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('followers');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_14_124526_create_notifications_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateNotificationsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('notifications', function (Blueprint $table) {\n            $table->uuid('id')->primary();\n            $table->string('type');\n            $table->morphs('notifiable');\n            $table->text('data');\n            $table->timestamp('read_at')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('notifications');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_18_154806_create_question_categories_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateQuestionCategoriesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('question_categories', function (Blueprint $table) {\n            $table->increments('id');\n            $table->tinyInteger('parent_id')->unsigned()->default(0)->comment('父id');\n            $table->string('name')->index()->comment('名称');\n            $table->string('slug', 60)->unique()->comment('缩略名');\n            $table->tinyInteger('weight')->default(0)->comment('权重');\n            $table->integer('question_count')->default(0)->comment('问题数');\n            $table->string('description')->nullable();\n            $table->string('image_url')->nullable()->comment('封面图片');\n            $table->string('style', 30)->default('violet')->comment('样式');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('question_categories');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_19_105055_create_questions_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateQuestionsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('questions', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('category_id')->unsigned()->index()->comment('分类id');\n            $table->integer('user_id')->unsigned()->comment('作者id');\n            $table->integer('reply_count')->default(0)->index()->comment('评论数量');\n            $table->integer('view_count')->unsigned()->default(0)->index()->comment('查看数量');\n            $table->integer('vote_count')->default(0)->index()->comment('点赞数量');\n            $table->integer('last_reply_user_id')->unsigned()->default(0)->index()->comment('最近一次回复者');\n            $table->integer('weight')->default(50)->index()->comment('权重');\n            $table->enum('is_excellent', ['yes', 'no'])->default('no')->index()->comment('是否是优秀问题');\n            $table->enum('is_hot', ['yes', 'no'])->default('no')->index()->comment('是否是热门问题');\n            $table->enum('only_owner_can_see', ['yes', 'no'])->default('no')->index()->comment('是否仅自己可见');\n            $table->enum('is_draft', ['yes', 'no'])->default('no')->index()->comment('是否为草稿');\n            $table->string('title')->index()->comment('标题');\n            $table->string('slug')->unique()->comment('缩略标题');\n            $table->text('content')->comment('问题内容');\n            $table->string('description')->nullable()->comment('简单描述');\n            $table->timestamp('published_at')->nullable()->index()->comment('发布时间');\n            $table->timestamps();\n            $table->softDeletes();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfexists('questions');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_19_153441_create_replies_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateRepliesTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('replies', function (Blueprint $table) {\n            $table->increments('id');\n            $table->integer('question_id')->unsigned()->default(0)->index();\n            $table->integer('user_id')->unsigned()->default(0)->index();\n            $table->enum('is_blocked', ['yes', 'no'])->default('no')->index();\n            $table->integer('vote_count')->default(0)->index();\n            $table->text('body');\n            $table->text('body_original')->nullable();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('replies');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_20_072744_create_activities_table.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateActivitiesTable extends Migration {\n\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('activities', function(Blueprint $table) {\n            $table->increments('id');\n            $table->string('causer')->index();\n            $table->string('type')->index();\n            $table->string('indentifier')->index();\n            $table->integer('user_id')->unsigned()->index();\n            $table->text('data')->nullable();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::drop('activities');\n    }\n\n}\n"
  },
  {
    "path": "database/migrations/2017_08_22_111854_create_links_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateLinksTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('links', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('title')->index();\n            $table->enum('type', ['link', 'recommend'])->default('link')->index();\n            $table->string('link');\n            $table->enum('is_enabled', ['yes',  'no'])->default('yes')->index();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('links');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_22_111936_create_abouts_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateAboutsTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('abouts', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('title')->index();\n            $table->text('content');\n            $table->enum('is_enabled', ['yes',  'no'])->default('yes')->index();\n            $table->softDeletes();\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('abouts');\n    }\n}\n"
  },
  {
    "path": "database/migrations/2017_08_25_164526_create_sitestatus_table.php",
    "content": "<?php\n\nuse Illuminate\\Support\\Facades\\Schema;\nuse Illuminate\\Database\\Schema\\Blueprint;\nuse Illuminate\\Database\\Migrations\\Migration;\n\nclass CreateSitestatusTable extends Migration\n{\n    /**\n     * Run the migrations.\n     *\n     * @return void\n     */\n    public function up()\n    {\n        Schema::create('site_statuses', function (Blueprint $table) {\n            $table->increments('id');\n            $table->string('day')->index();\n            $table->integer('register_count')->unsigned()->default(0);\n            $table->integer('github_regitster_count')->unsigned()->default(0);\n            $table->integer('wechat_registered_count')->unsigned()->default(0);\n            $table->tinyInteger('article_count')->unsigned()->default(0);\n            $table->tinyInteger('question_count')->unsigned()->default(0);\n            $table->integer('comment_count')->unsigned()->default(0);\n            $table->integer('reply_count')->unsigned()->default(0);\n            $table->integer('image_count')->unsigned()->default(0);\n            $table->timestamps();\n        });\n    }\n\n    /**\n     * Reverse the migrations.\n     *\n     * @return void\n     */\n    public function down()\n    {\n        Schema::dropIfExists('site_status');\n    }\n}\n"
  },
  {
    "path": "database/seeds/ArticleCategoriesTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass ArticleCategoriesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::table('article_categories')->insert(array(\n            0 =>\n                array(\n                    'id' => 1,\n                    'parent_id' => 0,\n                    'name' => 'php',\n                    'slug' => 'php',\n                    'weight' => '50',\n                    'article_count' => '20',\n                    'description' => 'php 从入门到放弃的坑坑记录，解析为什么 php 是世界上最好的语言。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'violet',\n                    'created_at' => Carbon::now(),\n                ),\n            1 =>\n                array(\n                    'id' => 2,\n                    'parent_id' => 0,\n                    'name' => 'python',\n                    'slug' => 'python',\n                    'weight' => '50',\n                    'article_count' => '20',\n                    'description' => 'python 从入门到放弃的坑坑记录，目录很流行的弱类型语言，能干好多事情。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'teal',\n                    'created_at' => Carbon::now(),\n                ),\n            2 =>\n                array(\n                    'id' => 3,\n                    'parent_id' => 0,\n                    'name' => 'linux',\n                    'slug' => 'linux',\n                    'weight' => '50',\n                    'article_count' => '20',\n                    'description' => 'linux Os ，很强大的一个操作系统，web 开发者必备技能。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'green',\n                    'created_at' => Carbon::now(),\n                ),\n            3 =>\n                array(\n                    'id' => 4,\n                    'parent_id' => 0,\n                    'name' => '开发者工具',\n                    'slug' => 'tools',\n                    'weight' => '50',\n                    'article_count' => '40',\n                    'description' => '开发中经常用到的各种工具，如 Ide、svn、git 等等。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'red',\n                    'created_at' => Carbon::now(),\n                )\n        ));\n    }\n}\n"
  },
  {
    "path": "database/seeds/ArticlesTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Article;\n\nclass ArticlesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n\n        $articles = factory(Article::class)->times(100)->make()->each(function ($article, $i) {\n            $user_id = 1;\n            if ($i < 20) {\n                $category = 1;\n            } elseif ($i < 40) {\n                $category = 2;\n            } elseif ($i < 60) {\n                $category = 3;\n            } else {\n                $user_id = 2;\n                $category = 4;\n            }\n            $article->user_id = $user_id;\n            $article->category_id = $category;\n            $article->is_excellent = rand(0, 1) ? 'yes' : 'no';\n            $article->is_hot = rand(0, 1) ? 'yes' : 'no';\n        });\n        DB::table('articles')->insert($articles->toArray());\n    }\n}\n"
  },
  {
    "path": "database/seeds/DatabaseSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass DatabaseSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $this->call(UsersTableSeeder::class);\n\n        $this->call(ArticleCategoriesTableSeeder::class);\n        $this->call(TagsTableSeeder::class);\n        $this->call(ArticlesTableSeeder::class);\n\n        $this->call(QuestionCategoriesTableSeeder::class);\n        $this->call(QuestionsTableSeeder::class);\n\n        $this->call(TaggablesTableSeeder::class);\n        $this->call(PermissionsTableSeeder::class);\n    }\n}\n"
  },
  {
    "path": "database/seeds/PermissionsTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass PermissionsTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::table('permissions')->insert(array(\n            0 =>\n                array(\n                    'name' => 'edit_article',\n                    'display_name' => '编辑文章',\n                    'description' => '编辑文章-CU'\n                ),\n            1 =>\n                array(\n                    'name' => 'edit_question',\n                    'display_name' => '编辑问题',\n                    'description' => '编辑问题-CU'\n                ),\n            2 =>\n                array(\n                    'name' => 'handle_abouts',\n                    'display_name' => '关于我们作者',\n                    'description' => '可编辑关于我们'\n                ),\n        ));\n    }\n}\n"
  },
  {
    "path": "database/seeds/QuestionCategoriesTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass QuestionCategoriesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::table('question_categories')->insert(array(\n            0 =>\n                array(\n                    'id' => 1,\n                    'parent_id' => 0,\n                    'name' => '编程问题',\n                    'slug' => 'code-problem',\n                    'weight' => '50',\n                    'question_count' => '20',\n                    'description' => 'php 从入门到放弃的坑坑记录，解析为什么 php 是世界上最好的语言。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'violet',\n                    'created_at' => Carbon::now(),\n                ),\n            1 =>\n                array(\n                    'id' => 2,\n                    'parent_id' => 0,\n                    'name' => '生活问题',\n                    'slug' => 'life-problem',\n                    'weight' => '50',\n                    'question_count' => '20',\n                    'description' => 'python 从入门到放弃的坑坑记录，目录很流行的弱类型语言，能干好多事情。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'teal',\n                    'created_at' => Carbon::now(),\n                ),\n            2 =>\n                array(\n                    'id' => 3,\n                    'parent_id' => 0,\n                    'name' => '情感问题',\n                    'slug' => 'emotion-problem',\n                    'weight' => '50',\n                    'question_count' => '20',\n                    'description' => 'linux Os ，很强大的一个操作系统，web 开发者必备技能。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'green',\n                    'created_at' => Carbon::now(),\n                ),\n            3 =>\n                array(\n                    'id' => 4,\n                    'parent_id' => 0,\n                    'name' => '游戏问题',\n                    'slug' => 'game-problem',\n                    'weight' => '50',\n                    'question_count' => '40',\n                    'description' => '开发中经常用到的各种工具，如 Ide、svn、git 等等。',\n                    'image_url' => '/images/article-cat.png',\n                    'style' => 'red',\n                    'created_at' => Carbon::now(),\n                )\n        ));\n    }\n}\n"
  },
  {
    "path": "database/seeds/QuestionsTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Question;\n\nclass QuestionsTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n\n        $questions = factory(Question::class)->times(100)->make()->each(function ($question, $i) {\n            $user_id = 1;\n            if ($i < 20) {\n                $category = 1;\n            } elseif ($i < 40) {\n                $category = 2;\n            } elseif ($i < 60) {\n                $category = 3;\n            } else {\n                $user_id = 2;\n                $category = 4;\n            }\n            $question->user_id = $user_id;\n            $question->category_id = $category;\n            $question->is_excellent = rand(0, 1) ? 'yes' : 'no';\n            $question->is_hot = rand(0, 1) ? 'yes' : 'no';\n        });\n        DB::table('questions')->insert($questions->toArray());\n    }\n}\n"
  },
  {
    "path": "database/seeds/RolesTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\n\nclass RolesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::table('roles')->insert(array(\n            0 =>\n                array(\n                    'name' => 'supper_admin',\n                    'display_name' => '超级管理员',\n                    'description' => '拥有最高管理权限'\n                ),\n            1 =>\n                array(\n                    'name' => 'article_manager',\n                    'display_name' => '文章管理员',\n                    'description' => '拥有文章的管理权限'\n                ),\n            2 =>\n                array(\n                    'name' => 'question_manager',\n                    'display_name' => '问题管理员',\n                    'description' => '拥有问题管理权限'\n                ),\n        ));\n    }\n}\n"
  },
  {
    "path": "database/seeds/TaggablesTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\Article;\nuse App\\Models\\Question;\n\nclass TaggablesTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $article_ids = Article::pluck('id')->toArray();\n        $question_ids = Question::pluck('id')->toArray();\n        foreach ($article_ids as $article_id) {\n         Article::findOrFail($article_id)->tags()->sync([rand(1,2),rand(3,4)]);\n        }\n        foreach ($question_ids as $question_id) {\n            Question::findOrFail($question_id)->tags()->sync([rand(1,2),rand(3,4)]);\n        }\n    }\n}\n"
  },
  {
    "path": "database/seeds/TagsTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse Carbon\\Carbon;\n\nclass TagsTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        DB::table('tags')->insert(array(\n                0 => array(\n                    'id' => 1,\n                    'tag' => 'jquery',\n                    'slug' => 'jquery',\n                    'description' => 'jquery，web 开发者必备技能。',\n                    'style' => 'green',\n                    'created_at' => Carbon::now(),\n                ),\n                1 => array(\n                    'id' => 2,\n                    'tag' => 'nginx',\n                    'slug' => 'nginx',\n                    'description' => 'nginx，比 Apache 强大百倍的超强 web 服务器。',\n                    'style' => 'red',\n                    'created_at' => Carbon::now(),\n                ),\n                2 => array(\n                    'id' => 3,\n                    'tag' => 'es6',\n                    'slug' => 'es6',\n                    'description' => '学习 vue.js 的前置技能',\n                    'style' => 'violet',\n                    'created_at' => Carbon::now(),\n                ),\n                3 => array(\n                    'id' => 4,\n                    'tag' => 'vue',\n                    'slug' => 'vue',\n                    'description' => '现在最热门的 js 框架',\n                    'style' => 'teal',\n                    'created_at' => Carbon::now(),\n                ),\n            )\n        );\n    }\n}\n"
  },
  {
    "path": "database/seeds/UsersTableSeeder.php",
    "content": "<?php\n\nuse Illuminate\\Database\\Seeder;\nuse App\\Models\\User;\nuse App\\Repositories\\RoleRepository;\nuse App\\Models\\Role;\n\nclass UsersTableSeeder extends Seeder\n{\n    /**\n     * Run the database seeds.\n     *\n     * @return void\n     */\n    public function run()\n    {\n        $users = factory(User::class)->times(49)->make()->each(function ($user, $i) {\n            if ($i == 0) {\n                $user->user_name = 'Ucers';\n                $user->is_admin = 'yes';\n                $user->email = 'ucer@codehaohsi.com';\n                $user->password = bcrypt('111111');\n                $user->article_count = 60;\n                $user->question_count = 60;\n            }\n            if ($i == 1) {\n                $user->user_name = 'Hello';\n                $user->is_admin = 'yes';\n                $user->email = 'hello@codehaohsi.com';\n                $user->password = bcrypt('111111');\n                $user->article_count = 40;\n                $user->question_count = 40;\n            }\n            $user->github_id = $i + 1;\n        });\n        DB::table('users')->insert($users->toArray());\n\n        $supper_admin = (new RoleRepository(new Role))->store(['name' => 'supper_admin', 'display_name' => '超级管理员', 'description' => '拥有最高管理权限']);\n        User::findOrFail(1)->attachRole($supper_admin);\n    }\n}\n"
  },
  {
    "path": "package.json",
    "content": "{\n  \"private\": true,\n  \"scripts\": {\n    \"dev\": \"npm run development\",\n    \"development\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"watch\": \"cross-env NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"watch-poll\": \"npm run watch -- --watch-poll\",\n    \"hot\": \"cross-env NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js\",\n    \"prod\": \"npm run production\",\n    \"production\": \"cross-env NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js\"\n  },\n  \"devDependencies\": {\n    \"axios\": \"^0.15.3\",\n    \"bootstrap-sass\": \"^3.3.7\",\n    \"cross-env\": \"^5.0.1\",\n    \"jquery\": \"2.1.1\",\n    \"laravel-mix\": \"^1.0\",\n    \"less\": \"^2.7.2\",\n    \"less-loader\": \"^4.0.5\",\n    \"lodash\": \"^4.17.4\",\n    \"vue\": \"^2.1.10\"\n  },\n  \"dependencies\": {\n    \"emojione\": \"^3.1.2\",\n    \"fine-uploader\": \"^5.15.0\",\n    \"jquery-pjax\": \"^2.0.1\",\n    \"marked\": \"^0.3.6\",\n    \"semantic-ui\": \"^2.2.11\",\n    \"simplemde\": \"^1.11.2\",\n    \"social-share.js\": \"^1.0.16\",\n    \"sweetalert\": \"^1.1.3\",\n    \"toastr\": \"^2.1.2\",\n    \"v-textcomplete\": \"^0.2.2\",\n    \"vue-image-crop-upload\": \"^2.0.1\"\n  }\n}\n"
  },
  {
    "path": "phpunit.xml",
    "content": "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<phpunit backupGlobals=\"false\"\n         backupStaticAttributes=\"false\"\n         bootstrap=\"bootstrap/autoload.php\"\n         colors=\"true\"\n         convertErrorsToExceptions=\"true\"\n         convertNoticesToExceptions=\"true\"\n         convertWarningsToExceptions=\"true\"\n         processIsolation=\"false\"\n         stopOnFailure=\"false\">\n    <testsuites>\n        <testsuite name=\"Feature\">\n            <directory suffix=\"Test.php\">./tests/Feature</directory>\n        </testsuite>\n\n        <testsuite name=\"Unit\">\n            <directory suffix=\"Test.php\">./tests/Unit</directory>\n        </testsuite>\n    </testsuites>\n    <filter>\n        <whitelist processUncoveredFilesFromWhitelist=\"true\">\n            <directory suffix=\".php\">./app</directory>\n        </whitelist>\n    </filter>\n    <php>\n        <env name=\"APP_ENV\" value=\"testing\"/>\n        <env name=\"CACHE_DRIVER\" value=\"array\"/>\n        <env name=\"SESSION_DRIVER\" value=\"array\"/>\n        <env name=\"QUEUE_DRIVER\" value=\"sync\"/>\n    </php>\n</phpunit>\n"
  },
  {
    "path": "public/.htaccess",
    "content": "<IfModule mod_rewrite.c>\n    <IfModule mod_negotiation.c>\n        Options -MultiViews\n    </IfModule>\n\n    RewriteEngine On\n\n    # Redirect Trailing Slashes If Not A Folder...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteRule ^(.*)/$ /$1 [L,R=301]\n\n    # Handle Front Controller...\n    RewriteCond %{REQUEST_FILENAME} !-d\n    RewriteCond %{REQUEST_FILENAME} !-f\n    RewriteRule ^ index.php [L]\n\n    # Handle Authorization Header\n    RewriteCond %{HTTP:Authorization} .\n    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]\n</IfModule>\n"
  },
  {
    "path": "public/assets/css/components/accordion.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n          transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Menu */\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n/* Header */\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/accordion.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n"
  },
  {
    "path": "public/assets/css/components/ad.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n.ui.ad:first-child {\n  margin: 0em;\n}\n.ui.ad:last-child {\n  margin: 0em;\n}\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n\n/* Leaderboard */\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n\n/* Square */\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n\n/* Small Rectangle */\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n\n/* Skyscraper */\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n\n/* Banner */\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n\n/* Leaderboard */\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n\n/* Panorama */\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n\n/* Netboard */\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n\n/* Large Mobile Banner */\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Mobile Sizes */\n.ui.mobile.ad {\n  display: none;\n}\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #FFFFFF;\n  font-size: 1em;\n  font-weight: bold;\n}\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/api.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/breadcrumb.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: inline-block;\n  margin: 0em 0em;\n  vertical-align: middle;\n}\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n          Content\n*******************************/\n\n\n/* Divider */\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n.ui.breadcrumb a {\n  color: #4183C4;\n}\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.78571429em 1em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/button.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #E0E1E2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #CACBCD;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #CACBCD;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n}\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #BABBBC;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, none;\n          box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #C0C1C2;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n          box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:hover {\n  background-color: #C0C1C2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:active {\n  background-color: #C0C1C2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n\n/* Specificity hack */\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #FFFFFF transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n          transform: translateY(0%);\n  right: auto;\n}\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n          transform: translateY(200%);\n  right: auto;\n}\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n          transform: scale(1.5);\n}\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  background: transparent none;\n  color: #FFFFFF;\n  text-shadow: none !important;\n}\n\n/* Group */\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n.ui.inverted.button:hover {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active / Focus */\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active Focus */\n.ui.inverted.button.active:focus {\n  background: #DCDDDE;\n  -webkit-box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n          box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n.ui.labeled.button > .label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  margin: 0px 0px 0px -1px !important;\n  padding: '';\n  font-size: 1em;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Tag */\n.ui.labeled.button > .tag.label:before {\n  width: 1.85em;\n  height: 1.85em;\n}\n\n/* Right */\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n\n/* Facebook */\n.ui.facebook.button {\n  background-color: #3B5998;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Twitter */\n.ui.twitter.button {\n  background-color: #55ACEE;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.twitter.button:hover {\n  background-color: #35a2f4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.twitter.button:active {\n  background-color: #2795e9;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Google Plus */\n.ui.google.plus.button {\n  background-color: #DD4B39;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.google.plus.button:hover {\n  background-color: #e0321c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.google.plus.button:active {\n  background-color: #c23321;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Linked In */\n.ui.linkedin.button {\n  background-color: #1F88BE;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* YouTube */\n.ui.youtube.button {\n  background-color: #CC181E;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Instagram */\n.ui.instagram.button {\n  background-color: #49769C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Pinterest */\n.ui.pinterest.button {\n  background-color: #BD081C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pinterest.button:hover {\n  background-color: #ac0013;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pinterest.button:active {\n  background-color: #8c0615;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* VK */\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #FFFFFF;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #FFFFFF;\n}\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #FFFFFF;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: 0.85714286em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: 0em 0.42857143em 0em -0.21428571em;\n}\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em !important;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #F8F8F8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n.ui.basic.buttons .button:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n          box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .active.button {\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n}\n\n/* Standard Basic Inverted */\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #F9FAFB !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #FFFFFF;\n  text-shadow: none;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n  margin: 0em;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: '';\n  -webkit-box-shadow: -1px 0px 0px 0px transparent inset;\n          box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  -webkit-box-shadow: 1px 0px 0px 0px transparent inset;\n          box-shadow: 1px 0px 0px 0px transparent inset;\n}\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n\n/* Toggle (Modifies active state to give affordances) */\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21BA45 !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #FFFFFF;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n          box-shadow: 0px 0px 0px 1px transparent inset;\n}\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n\n/* Singular */\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n.ui.fluid.button {\n  display: block;\n}\n.ui.two.buttons {\n  width: 100%;\n}\n.ui.two.buttons > .button {\n  width: 50%;\n}\n.ui.three.buttons {\n  width: 100%;\n}\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n.ui.four.buttons {\n  width: 100%;\n}\n.ui.four.buttons > .button {\n  width: 25%;\n}\n.ui.five.buttons {\n  width: 100%;\n}\n.ui.five.buttons > .button {\n  width: 20%;\n}\n.ui.six.buttons {\n  width: 100%;\n}\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n.ui.seven.buttons {\n  width: 100%;\n}\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n.ui.eight.buttons {\n  width: 100%;\n}\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n.ui.nine.buttons {\n  width: 100%;\n}\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n.ui.ten.buttons {\n  width: 100%;\n}\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n.ui.eleven.buttons {\n  width: 100%;\n}\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n.ui.twelve.buttons {\n  width: 100%;\n}\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.black.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n          box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n          box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n          box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n          box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n          box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.grey.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #767676 inset !important;\n          box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  color: #767676 !important;\n}\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #838383 inset !important;\n          box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n          box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #696969 inset !important;\n          box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  color: #909090 !important;\n}\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #909090 inset !important;\n          box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  color: #909090 !important;\n}\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n          box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n          box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n          box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #DCDDDE !important;\n}\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n          box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n          box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #A5673F;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.brown.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n          box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  color: #A5673F !important;\n}\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n          box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #90532b inset !important;\n          box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n          box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  color: #805031 !important;\n}\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #805031 inset !important;\n          box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  color: #805031 !important;\n}\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n          box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  color: #D67C1C;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n          box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n          box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n          box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n          box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #D67C1C !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.blue.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n          box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n          box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n          box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n          box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n          box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n          box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  color: #54C8FF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n          box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n          box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n          box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n          box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54C8FF !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.green.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n          box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n          box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n          box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n          box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n          box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n          box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  color: #2ECC40;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n          box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n          box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n          box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n          box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ECC40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #F2711C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.orange.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n          box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  color: #F2711C !important;\n}\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n          box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n          box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n          box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  color: #cf590c !important;\n}\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n          box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  color: #cf590c !important;\n}\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n          box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  color: #FF851B;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n          box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n          box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #FF851B !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #E03997;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.pink.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n          box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  color: #E03997 !important;\n}\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n          box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n          box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n          box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n          box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n          box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  color: #FF8EDF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #FF8EDF !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435C9;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.violet.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n          box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  color: #6435C9 !important;\n}\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n          box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n          box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n          box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n          box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n          box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  color: #A291FB;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n          box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n          box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n          box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n          box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #A291FB !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #A333C8;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.purple.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n          box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  color: #A333C8 !important;\n}\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n          box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n          box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9724be inset !important;\n          box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  color: #82299f !important;\n}\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #82299f inset !important;\n          box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  color: #82299f !important;\n}\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n          box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  color: #DC73FF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n          box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #DC73FF !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.red.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n          box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n          box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n          box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n          box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n          box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n          box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  color: #FF695E;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n          box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #FF695E !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00B5AD;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.teal.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n          box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  color: #00B5AD !important;\n}\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n          box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n          box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n          box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #00827c !important;\n}\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #00827c inset !important;\n          box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  color: #00827c !important;\n}\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  color: #6DFFFF;\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #3affff inset !important;\n          box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6DFFFF !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #B5CC18;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.olive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n          box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  color: #B5CC18 !important;\n}\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n          box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n          box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n          box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n          box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n          box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  color: #D9E778;\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n          box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n          box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n          box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n          box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #D9E778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #FBBD08;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.yellow.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n          box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  color: #FBBD08 !important;\n}\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n          box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n          box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n          box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n          box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n          box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  color: #FFE21F;\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n          box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n          box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n          box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n          box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #FFE21F !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n\n/*--- Standard ---*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.primary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n          box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n          box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n          box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n          box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n          box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n\n/* Standard */\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.secondary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n          box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n          box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #343637 !important;\n}\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n          box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n\n/* Standard */\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.positive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n          box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n          box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n          box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n          box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n          box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n\n/* Standard */\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.negative.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n          box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n          box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n          box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n          box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n          box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n.ui.buttons:not(.basic):not(.inverted) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Clearfix */\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0em;\n}\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/card.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #FFFFFF;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  z-index: '';\n}\n.ui.card {\n  margin: 1em 0em;\n}\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n.ui.card:first-child {\n  margin-top: 0em;\n}\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.28571429em;\n}\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.68);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n}\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transform: translateY(-3px);\n          transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Orange */\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Yellow */\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Olive */\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Green */\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Teal */\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Blue */\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Violet */\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Purple */\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Pink */\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Brown */\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Grey */\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Black */\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.one.cards > .card {\n  width: 100%;\n}\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.seven.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/checkbox.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Checkbox\n*******************************/\n\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n/* HTML Checkbox */\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n  font-size: 1em;\n}\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #FFFFFF;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border: 1px solid #D4D4D5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Inside */\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n\n/*******************************\n           States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #F9FAFB;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n          transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n          transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Focus */\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Indeterminate */\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Focus */\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n.ui.slider.checkbox input {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: #545454 !important;\n}\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: 2rem;\n}\n\n/* Active Focus */\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: #000000 !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n.ui.toggle.checkbox input {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n          transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: -0.05rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Focus */\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185D0 !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Active Focus */\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: #0d71bb !important;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\n}\n\n/* Checkmark */\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/checkbox.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/comment.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  -webkit-box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n          transition-delay: 0.1s;\n}\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.comments {\n  font-size: 0.85714286rem;\n}\n.ui.small.comments {\n  font-size: 0.92857143rem;\n}\n.ui.comments {\n  font-size: 1rem;\n}\n.ui.large.comments {\n  font-size: 1.14285714rem;\n}\n.ui.big.comments {\n  font-size: 1.28571429rem;\n}\n.ui.huge.comments {\n  font-size: 1.42857143rem;\n}\n.ui.massive.comments {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/container.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Container\n*******************************/\n\n\n/* All Sizes */\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto !important;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n  .ui.grid.container {\n    width: auto !important;\n  }\n  .ui.relaxed.grid.container {\n    width: auto !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 723px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 723px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 723px  +  5rem ) !important;\n  }\n}\n\n/* Small Monitor */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 933px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 933px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 933px  +  5rem ) !important;\n  }\n}\n\n/* Large Monitor */\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 1127px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 1127px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 1127px  +  5rem ) !important;\n  }\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Text Container */\n.ui.text.container {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n.ui.fluid.container {\n  width: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/dimmer.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(body) {\n  position: relative;\n}\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n          animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #FFFFFF;\n}\n\n/* Loose Coupling */\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/* Scrollbars */\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n          transform-style: '';\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n          filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease;\n  transition: 800ms -webkit-filter ease;\n  transition: 800ms filter ease;\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\n}\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n          filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n.ui.inverted.dimmer > .content > * {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/dimmer.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/divider.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Allow divider between each column row */\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  line-height: 1;\n  text-align: center;\n}\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n}\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n.ui.vertical.divider:before {\n  top: -100%;\n}\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n            transform: none;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #FFFFFF;\n}\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/dropdown.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #FFFFFF;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: 0.85714286em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-touch-callout: none;\n}\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.78571429rem;\n  min-width: 10rem;\n}\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n  font-weight: normal;\n}\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n\n/* Icons / Flags / Labels / Image */\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.78571429rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  margin-top: -0.5em;\n  margin-bottom: -0.5em;\n  max-height: 2em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n\n/* Remove Menu Item Divider */\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Dropdown Menu */\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n\n/* No Margin On Icon Button */\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n\n/* Displays like a select box */\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n          transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.71428571em;\n  background: #FFFFFF;\n  display: inline-block;\n  padding: 0.78571429em 2.1em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: 1.21428571em;\n  top: 0.78571429em;\n  right: 1em;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.91666667em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n}\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/* Menu Item */\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #FAFAFA;\n  padding: 0.78571429rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Active */\n.ui.selection.active.dropdown {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n.ui.selection.dropdown:focus {\n  border-color: #96C8DA;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.selection.dropdown:focus .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n.ui.selection.active.dropdown:hover {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown:hover .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/* Empty Connecting Border */\n.ui.active.empty.selection.dropdown {\n  border-radius: 0.28571429rem !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n\n/* Search Selection */\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: 1px;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: 1px;\n  z-index: 3;\n}\n\n/* Search Selection */\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n}\n\n/* Used to size multi select input to character width */\n.ui.search.selection.dropdown > span.sizer {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(115, 115, 115, 0.87) !important;\n}\n\n/* Search Menu */\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n\n/* Multiple Selection */\n.ui.multiple.dropdown {\n  padding: 0.22619048em 2.1em 0.22619048em 0.35714286em;\n}\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.78571429em;\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n.ui.multiple.dropdown .dropdown.icon {\n  margin: '';\n  padding: '';\n}\n\n/* Text */\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: 0.14285714em !important;\n}\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n\n/* Prompt Text */\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  width: 2.2em;\n  line-height: 1.21428571em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.21428571em;\n  vertical-align: baseline;\n}\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.21428571em;\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Active\n----------------------*/\n\n\n/* Menu Item Active */\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n\n/* Menu Item Hover */\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: 1em !important;\n}\n.ui.loading.selection.dropdown > i.icon {\n  padding: 1.5em 1.28571429em !important;\n}\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n          animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.dropdown:not(.button) > input:focus + .default.text,\n.ui.default.dropdown:not(.button) > input:focus + .text {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n.ui.dropdown > .loading.menu {\n  left: 0px !important;\n  right: auto !important;\n}\n.ui.dropdown > .menu .loading.menu {\n  left: 100% !important;\n  right: auto !important;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n\n/* Selected Item */\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n\n/* Filtered Item */\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9F3A38;\n}\n.ui.selection.dropdown.error {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.selection.dropdown.error:hover {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu > .item {\n  color: #9F3A38;\n}\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #E0B4B4;\n}\n\n/* Item Hover */\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #FFF2F2;\n}\n\n/* Item Active */\n.ui.dropdown.error > .menu .active.item {\n  background-color: #FDCFCF;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n\n/* Disabled */\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Direction\n---------------*/\n\n\n/* Flyout Direction */\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Leftward Opening Menu */\n.ui.dropdown > .left.menu {\n  left: auto !important;\n  right: 0px !important;\n}\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto;\n  right: 100%;\n  margin: 0em -0.5em 0em 0em !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n  margin-right: 0em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n\n/* Upward Main Menu */\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n.ui.upward.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n          box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n.ui.upward.selection.dropdown.visible {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n.ui.upward.active.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n.ui.upward.active.selection.dropdown:hover .menu {\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/*  Selection Menu */\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n}\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 10.28571429rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 15.42857143rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  background: #FFFFFF;\n  z-index: 2;\n}\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Top Right Pointing */\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.pointing.dropdown > .left.menu:after,\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto !important;\n  right: 1em !important;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Left Pointing */\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  margin: 0em 1em 0em 0em;\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n          transform: rotate(135deg);\n}\n\n/* Right Pointing */\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n          transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n          transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/* Upward pointing */\n.ui.pointing.upward.dropdown .menu,\n.ui.top.pointing.upward.dropdown .menu {\n  top: auto !important;\n  bottom: 100% !important;\n  margin: 0em 0em 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.pointing.upward.dropdown .menu:after,\n.ui.top.pointing.upward.dropdown .menu:after {\n  top: 100% !important;\n  bottom: auto !important;\n  -webkit-box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n  margin: -0.25em 0em 0em;\n}\n\n/* Right Pointing Upward */\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 1em 0em 0em;\n}\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Left Pointing Upward */\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 0em 1em;\n}\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n/* Dropdown Carets */\n@font-face {\n  font-family: 'Dropdown';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" /*rtl:\"\\f0da\"*/;\n}\n\n/* Vertical Menu Dropdown */\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" /*rtl:\"\\f0d9\"*/;\n}\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/dropdown.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(!module.can.show() && module.is.remote()) {\n            module.debug('No API results retrieved, searching before show');\n            module.queryRemote(module.get.query(), module.show);\n          }\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n              ;\n              if(module.has.menuSearch() ) {\n                $module\n                  .on('blur' + eventNamespace, selector.search, module.event.search.blur)\n                ;\n              }\n              else {\n                $module\n                  .on('blur' + eventNamespace, module.event.blur)\n                ;\n              }\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              if(query || (!query && module.get.activeItem().length == 0)) {\n                module.select.firstUnfiltered();\n              }\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                if(settings.filterRemoteData) {\n                  module.filterItems(searchTerm);\n                }\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.string(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected && !module.is.multiple()) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(module.is.searchSelection() && !willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              // prevents IE11 bug where menu receives focus even though `tabindex=-1`\n              if(module.has.menuSearch()) {\n                $(document.activeElement).blur();\n              }\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value      = module.get.choiceValue($item),\n              searchText = module.get.choiceText($item, false),\n              text       = module.get.choiceText($item, true)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(searchText);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              // reset position\n              module.remove.upward();\n\n              if(module.can.openDownward($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {\n                module.set.leftward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.addClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.addClass(className.leftward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-' + metadata.value, escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.removeClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.removeClass(className.leftward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(value) +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(escapedValue) +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          leftward: function($subMenu) {\n            var $selectedMenu = $subMenu || $menu;\n            return $selectedMenu.hasClass(className.leftward);\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          remote: function() {\n            return settings.apiSettings && module.can.useAPI();\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-X')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          openDownward: function($subMenu) {\n            var\n              $currentMenu    = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen        = {},\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            if(module.is.verticallyScrollableContext()) {\n              calculations.menu.offset.top += calculations.context.scrollTop;\n            }\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          openRightward: function($subMenu) {\n            var\n              $currentMenu     = $subMenu || $menu,\n              canOpenRightward = true,\n              isOffscreenRight = false,\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollLeft : $context.scrollLeft(),\n                width      : $context.outerWidth()\n              },\n              menu: {\n                offset : $currentMenu.offset(),\n                width  : $currentMenu.outerWidth()\n              }\n            };\n            if(module.is.horizontallyScrollableContext()) {\n              calculations.menu.offset.left += calculations.context.scrollLeft;\n            }\n            isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);\n            if(isOffscreenRight) {\n              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);\n              canOpenRightward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenRightward;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n\n  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    leftward    : 'left',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/embed.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #DCDDDE;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  color: #FFFFFF;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n.ui.embed .icon:hover:before {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n.ui.active.embed > .embed {\n  display: block;\n}\n\n\n/*******************************\n        Video Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n"
  },
  {
    "path": "public/assets/css/components/embed.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/feed.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Event */\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  text-align: left;\n}\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Content */\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n\n/* Date inside Summary */\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #FF2733;\n}\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #EF404A;\n}\n\n/* First element */\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n.ui.feed {\n  font-size: 1rem;\n}\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/flag.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/* Sprite */\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"./../themes/default/assets/images/flags.png\") no-repeat -108px -1976px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -73px -1821px;\n}\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/form.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Elements\n*******************************/\n\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: 100%;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: 1.21428571em;\n}\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Text Area */\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n\n/* Block */\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n\n/* Block */\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  width: 0px;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: #FFFFFF !important;\n  border: 1px solid #E0B4B4 !important;\n  color: #9F3A38 !important;\n}\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: -0.25em 0em -0.5em 0.5em;\n}\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px 1px 1px;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #E5DFA1 !important;\n}\n\n/* Focus */\n.ui.form .field.field input:-webkit-autofill:focus {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #D5C315 !important;\n}\n\n/* Error */\n.ui.form .error.error input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  border-color: #E0B4B4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form ::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/* Error Placeholder */\n.ui.form .error ::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n.ui.form .error ::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.form .error :focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n.ui.form .error :focus::-moz-placeholder {\n  color: #da9796;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n          box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n          box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n\n/* On Form */\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.success .icon.success.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n\n/* On Form */\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n\n/* On Form */\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.error .icon.error.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9F3A38;\n  color: #FFFFFF;\n}\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  border-radius: '';\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-appearance: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #EACBCB;\n  color: #9F3A38;\n}\n\n/* Hover */\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #FBE7E7;\n}\n\n/* Selected */\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #FBE7E7;\n}\n\n/* Active */\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #FDCFCF !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9F3A38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: 0.45;\n}\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: 0.45;\n}\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n          animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n         Element Types\n*******************************/\n\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #DB2828;\n}\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Inverted Field */\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: #FFFFFF;\n  border-color: rgba(255, 255, 255, 0.1);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n\n/* Grouped Vertically */\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n\n/* Split fields */\n.ui.form .fields {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  margin: 0em -0.5em 1em;\n}\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Other Combinations */\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n  }\n  .ui[class*=\"equal width\"].form:not(.unstackable) .fields > .field,\n  .ui.form:not(.unstackable) [class*=\"equal width\"].fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n  }\n}\n\n/* Sizing Combinations */\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {\n    width: 100% !important;\n  }\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.form {\n  font-size: 0.85714286rem;\n}\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n.ui.form {\n  font-size: 1rem;\n}\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n.ui.big.form {\n  font-size: 1.28571429rem;\n}\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n.ui.massive.form {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/form.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        regExp,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        determine: {\n          isValid: function() {\n            var\n              allValid = true\n            ;\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName, true) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          shorthandFields: function(fields) {\n            var\n              fieldKeys = Object.keys(fields),\n              firstRule = fields[fieldKeys[0]]\n            ;\n            return module.is.shorthandRules(firstRule);\n          },\n          // duck type rule test\n          shorthandRules: function(rules) {\n            return (typeof rules == 'string' || $.isArray(rules));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function(field) {\n            var\n              allValid = true\n            ;\n            if(field) {\n              module.verbose('Checking if field is valid', field);\n              return module.validate.field(validation[field], field, false);\n            }\n            else {\n              module.verbose('Checking if form is valid');\n              $.each(validation, function(fieldName, field) {\n                if( !module.is.valid(fieldName) ) {\n                  allValid = false;\n                }\n              });\n              return allValid;\n            }\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          fieldsFromShorthand: function(fields) {\n            var\n              fullFields = {}\n            ;\n            $.each(fields, function(name, rules) {\n              if(typeof rules == 'string') {\n                rules = [rules];\n              }\n              fullFields[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                fullFields[name].rules.push({ type: rule });\n              });\n            });\n            return fullFields;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\n                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\n                }\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            regExp          = settings.regExp;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if($field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(values[name] === undefined) {\n                      values[name] = (isChecked)\n                        ? true\n                        : false\n                      ;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if($field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        add: {\n          // alias\n          rule: function(name, rules) {\n            module.add.field(name, rules);\n          },\n          field: function(name, rules) {\n            var\n              newValidation = {}\n            ;\n            if(module.is.shorthandRules(rules)) {\n              rules = $.isArray(rules)\n                ? rules\n                : [rules]\n              ;\n              newValidation[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                newValidation[name].rules.push({ type: rule });\n              });\n            }\n            else {\n              newValidation[name] = rules;\n            }\n            validation = $.extend({}, validation, newValidation);\n            module.debug('Adding rules', newValidation, validation);\n          },\n          fields: function(fields) {\n            var\n              newValidation\n            ;\n            if(fields && module.is.shorthandFields(fields)) {\n              newValidation = module.get.fieldsFromShorthand(fields);\n            }\n            else {\n              newValidation = fields;\n            }\n            validation = $.extend({}, validation, newValidation);\n          },\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          rule: function(field, rule) {\n            var\n              rules = $.isArray(rule)\n                ? rule\n                : [rule]\n            ;\n            if(rule == undefined) {\n              module.debug('Removed all rules');\n              validation[field].rules = [];\n              return;\n            }\n            if(validation[field] == undefined || !$.isArray(validation[field].rules)) {\n              return;\n            }\n            $.each(validation[field].rules, function(index, rule) {\n              if(rules.indexOf(rule.type) !== -1) {\n                module.debug('Removed rule', rule.type);\n                validation[field].rules.splice(index, 1);\n              }\n            });\n          },\n          field: function(field) {\n            var\n              fields = $.isArray(field)\n                ? field\n                : [field]\n            ;\n            $.each(fields, function(index, field) {\n              module.remove.rule(field);\n            });\n          },\n          // alias\n          rules: function(field, rules) {\n            if($.isArray(field)) {\n              $.each(fields, function(index, field) {\n                module.remove.rule(field, rules);\n              });\n            }\n            else {\n              module.remove.rule(field, rules);\n            }\n          },\n          fields: function(fields) {\n            module.remove.field(fields);\n          },\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.determine.isValid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName, showErrors) {\n            showErrors = (showErrors !== undefined)\n              ? showErrors\n              : true\n            ;\n            if(typeof field == 'string') {\n              module.verbose('Validating field', field);\n              fieldName = field;\n              field     = validation[field];\n            }\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              if(showErrors) {\n                module.remove.prompt(identifier, fieldErrors);\n                settings.onValid.call($field);\n              }\n            }\n            else {\n              if(showErrors) {\n                formErrors = formErrors.concat(fieldErrors);\n                module.add.prompt(identifier, fieldErrors);\n                settings.onInvalid.call($field, fieldErrors);\n              }\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    htmlID  : /^[a-zA-Z][\\w:.-]*$/g,\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d+\\.?\\d*$/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // allow dashes in card\n      cardNumber = cardNumber.replace(/[\\-]/g, '');\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/grid.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Standard 16 column */\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n      -ms-flex-pack: inherit;\n          justify-content: inherit;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Vertical padding when no rows */\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Collapse Margin on Consecutive Grid */\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  margin: 1rem 1rem;\n}\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n\n/* Assume full width with one column */\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/* Celled Page */\n.ui.celled.page.grid {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n\n/* Sizing Combinations */\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n\n/* Mobile Sizing Combinations */\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* No space on top of first row */\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n/* Divided Row */\n.ui.grid > .divided.row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.grid > .divided.row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Inverted Divided */\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n          box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n          box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5;\n}\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: 0px -1px 0px 0px #D4D4D5;\n          box-shadow: 0px -1px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n          box-shadow: -1px 0px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n.ui[class*=\"internally celled\"].grid {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  margin: 0em;\n}\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n\n/* Top Aligned */\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: top;\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: middle;\n  -ms-flex-item-align: center !important;\n      align-self: center !important;\n}\n\n/* Bottom Aligned */\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: bottom;\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n/* Stretched */\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n\n/* Left Aligned */\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n\n/* Center Aligned */\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n\n/* Right Aligned */\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n\n/* Justified */\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #DB2828 !important;\n  color: #FFFFFF;\n}\n\n/* Orange */\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #F2711C !important;\n  color: #FFFFFF;\n}\n\n/* Yellow */\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF;\n}\n\n/* Olive */\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF;\n}\n\n/* Green */\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21BA45 !important;\n  color: #FFFFFF;\n}\n\n/* Teal */\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00B5AD !important;\n  color: #FFFFFF;\n}\n\n/* Blue */\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185D0 !important;\n  color: #FFFFFF;\n}\n\n/* Violet */\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435C9 !important;\n  color: #FFFFFF;\n}\n\n/* Purple */\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #A333C8 !important;\n  color: #FFFFFF;\n}\n\n/* Pink */\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #E03997 !important;\n  color: #FFFFFF;\n}\n\n/* Brown */\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #A5673F !important;\n  color: #FFFFFF;\n}\n\n/* Grey */\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #FFFFFF;\n}\n\n/* Black */\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n}\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/* Computer */\n@media only screen and (min-width: 992px) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"computer vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    margin: 0em;\n  }\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n  \n/* Coupling */\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n  \n/* Don't pad inside segment or nested grid */\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n  \n/* Divided Stackable */\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n  .ui.stackable.celled.grid > .row {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/header.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Header\n*******************************/\n\n\n/* Standard */\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.28571429em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.header:first-child {\n  margin-top: -0.14285714em;\n}\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285714em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image:not(.icon),\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285714em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n.ui.header > .image:not(.icon):only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n.ui.header + p {\n  margin-top: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\nh2.ui.header {\n  font-size: 1.71428571rem;\n}\nh3.ui.header {\n  font-size: 1.28571429rem;\n}\nh4.ui.header {\n  font-size: 1.07142857rem;\n}\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n.ui.large.header {\n  font-size: 1.71428571em;\n}\n.ui.medium.header {\n  font-size: 1.28571429em;\n}\n.ui.small.header {\n  font-size: 1.07142857em;\n}\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n.ui.small.sub.header {\n  font-size: 0.78571429em;\n}\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #FFFFFF;\n}\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n.ui.inverted.attached.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: transparent;\n}\n.ui.inverted.block.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #DB2828 !important;\n}\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n.ui.red.dividing.header {\n  border-bottom: 2px solid #DB2828;\n}\n\n/* Inverted */\n.ui.inverted.red.header {\n  color: #FF695E !important;\n}\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #F2711C !important;\n}\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #F2711C;\n}\n\n/* Inverted */\n.ui.inverted.orange.header {\n  color: #FF851B !important;\n}\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #B5CC18 !important;\n}\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #B5CC18;\n}\n\n/* Inverted */\n.ui.inverted.olive.header {\n  color: #D9E778 !important;\n}\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #FBBD08 !important;\n}\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #FBBD08;\n}\n\n/* Inverted */\n.ui.inverted.yellow.header {\n  color: #FFE21F !important;\n}\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21BA45 !important;\n}\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21BA45;\n}\n\n/* Inverted */\n.ui.inverted.green.header {\n  color: #2ECC40 !important;\n}\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00B5AD !important;\n}\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00B5AD;\n}\n\n/* Inverted */\n.ui.inverted.teal.header {\n  color: #6DFFFF !important;\n}\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185D0 !important;\n}\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185D0;\n}\n\n/* Inverted */\n.ui.inverted.blue.header {\n  color: #54C8FF !important;\n}\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435C9 !important;\n}\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435C9;\n}\n\n/* Inverted */\n.ui.inverted.violet.header {\n  color: #A291FB !important;\n}\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #A333C8 !important;\n}\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #A333C8;\n}\n\n/* Inverted */\n.ui.inverted.purple.header {\n  color: #DC73FF !important;\n}\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #E03997 !important;\n}\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #E03997;\n}\n\n/* Inverted */\n.ui.inverted.pink.header {\n  color: #FF8EDF !important;\n}\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #A5673F !important;\n}\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #A5673F;\n}\n\n/* Inverted */\n.ui.inverted.brown.header {\n  color: #D67C1C !important;\n}\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n.ui.inverted.grey.header {\n  color: #DCDDDE !important;\n}\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n.ui.right.aligned.header {\n  text-align: right;\n}\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n.ui.justified.header {\n  text-align: justify;\n}\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #F3F4F5;\n  padding: 0.78571429rem 1rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n  border-radius: 0.28571429rem;\n}\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #FFFFFF;\n  padding: 0.78571429rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.block.header {\n  background: #F3F4F5;\n}\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28571429em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/icon.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"./../themes/default/assets/fonts/icons.eot\");\n  src: url(\"./../themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"./../themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"./../themes/default/assets/fonts/icons.woff\") format('woff'), url(\"./../themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"./../themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\ni.icon:before {\n  background: none !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n          animation: icon-loading 2s linear infinite;\n}\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\ni.icon.active {\n  opacity: 1 !important;\n}\ni.emphasized.icon {\n  opacity: 1 !important;\n}\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon,\ni.link.icons {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\ni.link.icon:hover,\ni.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n          box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\ni.circular.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n          transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n          box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\ni.bordered.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n\n/* Inverted Shapes */\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\ni.inverted.icon {\n  color: #FFFFFF;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\ni.red.icon {\n  color: #DB2828 !important;\n}\ni.inverted.red.icon {\n  color: #FF695E !important;\n}\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\ni.orange.icon {\n  color: #F2711C !important;\n}\ni.inverted.orange.icon {\n  color: #FF851B !important;\n}\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\ni.yellow.icon {\n  color: #FBBD08 !important;\n}\ni.inverted.yellow.icon {\n  color: #FFE21F !important;\n}\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\ni.olive.icon {\n  color: #B5CC18 !important;\n}\ni.inverted.olive.icon {\n  color: #D9E778 !important;\n}\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\ni.green.icon {\n  color: #21BA45 !important;\n}\ni.inverted.green.icon {\n  color: #2ECC40 !important;\n}\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\ni.teal.icon {\n  color: #00B5AD !important;\n}\ni.inverted.teal.icon {\n  color: #6DFFFF !important;\n}\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\ni.blue.icon {\n  color: #2185D0 !important;\n}\ni.inverted.blue.icon {\n  color: #54C8FF !important;\n}\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\ni.violet.icon {\n  color: #6435C9 !important;\n}\ni.inverted.violet.icon {\n  color: #A291FB !important;\n}\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\ni.purple.icon {\n  color: #A333C8 !important;\n}\ni.inverted.purple.icon {\n  color: #DC73FF !important;\n}\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\ni.pink.icon {\n  color: #E03997 !important;\n}\ni.inverted.pink.icon {\n  color: #FF8EDF !important;\n}\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\ni.brown.icon {\n  color: #A5673F !important;\n}\ni.inverted.brown.icon {\n  color: #D67C1C !important;\n}\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\ni.grey.icon {\n  color: #767676 !important;\n}\ni.inverted.grey.icon {\n  color: #DCDDDE !important;\n}\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\ni.black.icon {\n  color: #1B1C1D !important;\n}\ni.inverted.black.icon {\n  color: #545454 !important;\n}\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: 0.4em;\n}\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: 0.5em;\n}\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.75em;\n}\ni.icon,\ni.icons {\n  font-size: 1em;\n}\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n          transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n          transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\n}\ni.icons .top.right.corner.icon {\n  top: 0;\n  left: auto;\n  right: 0;\n  bottom: auto;\n}\ni.icons .top.left.corner.icon {\n  top: 0;\n  left: 0;\n  right: auto;\n  bottom: auto;\n}\ni.icons .bottom.left.corner.icon {\n  top: auto;\n  left: 0;\n  right: auto;\n  bottom: 0;\n}\ni.icons .bottom.right.corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n}\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\n}\n/*\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n\n\n/*******************************\n            Icons\n*******************************/\n\n\n/* Web Content */\ni.icon.search:before {\n  content: \"\\f002\";\n}\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\ni.icon.signal:before {\n  content: \"\\f012\";\n}\ni.icon.setting:before {\n  content: \"\\f013\";\n}\ni.icon.home:before {\n  content: \"\\f015\";\n}\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\ni.icon.browser:before {\n  content: \"\\f022\";\n}\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\ni.icon.image:before {\n  content: \"\\f03e\";\n}\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\ni.icon.comment:before {\n  content: \"\\f075\";\n}\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\ni.icon.settings:before {\n  content: \"\\f085\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\ni.icon.code:before {\n  content: \"\\f121\";\n}\ni.icon.protect:before {\n  content: \"\\f132\";\n}\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\ni.icon.bug:before {\n  content: \"\\f188\";\n}\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\ni.icon.history:before {\n  content: \"\\f1da\";\n}\ni.icon.options:before {\n  content: \"\\f1de\";\n}\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\ni.icon.alarm.mute:before {\n  content: \"\\f1f6\";\n}\ni.icon.alarm.mute.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\ni.icon.mouse.pointer:before {\n  content: \"\\f245\";\n}\ni.icon.hourglass.empty:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.start:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.half:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.end:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.full:before {\n  content: \"\\f254\";\n}\ni.icon.hand.pointer:before {\n  content: \"\\f25a\";\n}\ni.icon.trademark:before {\n  content: \"\\f25c\";\n}\ni.icon.registered:before {\n  content: \"\\f25d\";\n}\ni.icon.creative.commons:before {\n  content: \"\\f25e\";\n}\ni.icon.add.to.calendar:before {\n  content: \"\\f271\";\n}\ni.icon.remove.from.calendar:before {\n  content: \"\\f272\";\n}\ni.icon.delete.calendar:before {\n  content: \"\\f273\";\n}\ni.icon.checked.calendar:before {\n  content: \"\\f274\";\n}\ni.icon.industry:before {\n  content: \"\\f275\";\n}\ni.icon.shopping.bag:before {\n  content: \"\\f290\";\n}\ni.icon.shopping.basket:before {\n  content: \"\\f291\";\n}\ni.icon.hashtag:before {\n  content: \"\\f292\";\n}\ni.icon.percent:before {\n  content: \"\\f295\";\n}\ni.icon.handshake:before {\n  content: \"\\f2b5\";\n}\ni.icon.open.envelope:before {\n  content: \"\\f2b6\";\n}\ni.icon.open.envelope.outline:before {\n  content: \"\\f2b7\";\n}\ni.icon.address.book:before {\n  content: \"\\f2b9\";\n}\ni.icon.address.book.outline:before {\n  content: \"\\f2ba\";\n}\ni.icon.address.card:before {\n  content: \"\\f2bb\";\n}\ni.icon.address.card.outline:before {\n  content: \"\\f2bc\";\n}\ni.icon.id.badge:before {\n  content: \"\\f2c1\";\n}\ni.icon.id.card:before {\n  content: \"\\f2c2\";\n}\ni.icon.id.card.outline:before {\n  content: \"\\f2c3\";\n}\ni.icon.podcast:before {\n  content: \"\\f2ce\";\n}\ni.icon.window.maximize:before {\n  content: \"\\f2d0\";\n}\ni.icon.window.minimize:before {\n  content: \"\\f2d1\";\n}\ni.icon.window.restore:before {\n  content: \"\\f2d2\";\n}\ni.icon.window.close:before {\n  content: \"\\f2d3\";\n}\ni.icon.window.close.outline:before {\n  content: \"\\f2d4\";\n}\n\n/* User Actions */\ni.icon.wait:before {\n  content: \"\\f017\";\n}\ni.icon.download:before {\n  content: \"\\f019\";\n}\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\ni.icon.lock:before {\n  content: \"\\f023\";\n}\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\ni.icon.print:before {\n  content: \"\\f02f\";\n}\ni.icon.write:before {\n  content: \"\\f040\";\n}\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\ni.icon.theme:before {\n  content: \"\\f043\";\n}\ni.icon.edit:before {\n  content: \"\\f044\";\n}\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\ni.icon.share:before {\n  content: \"\\f064\";\n}\ni.icon.expand:before {\n  content: \"\\f065\";\n}\ni.icon.compress:before {\n  content: \"\\f066\";\n}\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\ni.icon.hide:before {\n  content: \"\\f070\";\n}\ni.icon.random:before {\n  content: \"\\f074\";\n}\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\ni.icon.upload:before {\n  content: \"\\f093\";\n}\ni.icon.call:before {\n  content: \"\\f095\";\n}\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\ni.icon.reply:before {\n  content: \"\\f112\";\n}\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\ni.icon.archive:before {\n  content: \"\\f187\";\n}\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\ni.icon.object.group:before {\n  content: \"\\f247\";\n}\ni.icon.object.ungroup:before {\n  content: \"\\f248\";\n}\ni.icon.clone:before {\n  content: \"\\f24d\";\n}\ni.icon.talk:before {\n  content: \"\\f27a\";\n}\ni.icon.talk.outline:before {\n  content: \"\\f27b\";\n}\n\n/* Messages */\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\ni.icon.help:before {\n  content: \"\\f128\";\n}\ni.icon.info:before {\n  content: \"\\f129\";\n}\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\ni.icon.help.circle.outline:before {\n  content: \"\\f29c\";\n}\n\n/* Users */\ni.icon.user:before {\n  content: \"\\f007\";\n}\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\ni.icon.student:before {\n  content: \"\\f19d\";\n}\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\ni.icon.user.circle:before {\n  content: \"\\f2bd\";\n}\ni.icon.user.circle.outline:before {\n  content: \"\\f2be\";\n}\ni.icon.user.outline:before {\n  content: \"\\f2c0\";\n}\n\n/* Gender & Sexuality */\ni.icon.female:before {\n  content: \"\\f182\";\n}\ni.icon.male:before {\n  content: \"\\f183\";\n}\ni.icon.woman:before {\n  content: \"\\f221\";\n}\ni.icon.man:before {\n  content: \"\\f222\";\n}\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\ni.icon.gay:before {\n  content: \"\\f227\";\n}\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\ni.icon.genderless:before {\n  content: \"\\f22d\";\n}\n\n/* Accessibility */\ni.icon.universal.access:before {\n  content: \"\\f29a\";\n}\ni.icon.wheelchair:before {\n  content: \"\\f29b\";\n}\ni.icon.blind:before {\n  content: \"\\f29d\";\n}\ni.icon.audio.description:before {\n  content: \"\\f29e\";\n}\ni.icon.volume.control.phone:before {\n  content: \"\\f2a0\";\n}\ni.icon.braille:before {\n  content: \"\\f2a1\";\n}\ni.icon.asl:before {\n  content: \"\\f2a3\";\n}\ni.icon.assistive.listening.systems:before {\n  content: \"\\f2a2\";\n}\ni.icon.deafness:before {\n  content: \"\\f2a4\";\n}\ni.icon.sign.language:before {\n  content: \"\\f2a7\";\n}\ni.icon.low.vision:before {\n  content: \"\\f2a8\";\n}\n\n/* View Adjustment */\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\ni.icon.road:before {\n  content: \"\\f018\";\n}\ni.icon.flag:before {\n  content: \"\\f024\";\n}\ni.icon.book:before {\n  content: \"\\f02d\";\n}\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\ni.icon.plane:before {\n  content: \"\\f072\";\n}\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\ni.icon.sun:before {\n  content: \"\\f185\";\n}\ni.icon.moon:before {\n  content: \"\\f186\";\n}\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\ni.icon.sticky.note:before {\n  content: \"\\f249\";\n}\ni.icon.sticky.note.outline:before {\n  content: \"\\f24a\";\n}\ni.icon.law:before {\n  content: \"\\f24e\";\n}\ni.icon.hand.peace:before {\n  content: \"\\f25b\";\n}\ni.icon.hand.rock:before {\n  content: \"\\f255\";\n}\ni.icon.hand.paper:before {\n  content: \"\\f256\";\n}\ni.icon.hand.scissors:before {\n  content: \"\\f257\";\n}\ni.icon.hand.lizard:before {\n  content: \"\\f258\";\n}\ni.icon.hand.spock:before {\n  content: \"\\f259\";\n}\ni.icon.tv:before {\n  content: \"\\f26c\";\n}\ni.icon.thermometer.full:before {\n  content: \"\\f2c7\";\n}\ni.icon.thermometer.three.quarters:before {\n  content: \"\\f2c8\";\n}\ni.icon.thermometer.half:before {\n  content: \"\\f2c9\";\n}\ni.icon.thermometer.quarter:before {\n  content: \"\\f2ca\";\n}\ni.icon.thermometer.empty:before {\n  content: \"\\f2cb\";\n}\ni.icon.shower:before {\n  content: \"\\f2cc\";\n}\ni.icon.bathtub:before {\n  content: \"\\f2cd\";\n}\ni.icon.snowflake:before {\n  content: \"\\f2dc\";\n}\n\n/* Shapes */\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\ni.icon.square.outline:before {\n  content: \"\\f096\";\n}\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\ni.icon.square:before {\n  content: \"\\f0c8\";\n}\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\ni.icon.circle:before {\n  content: \"\\f111\";\n}\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\ni.icon.move:before {\n  content: \"\\f047\";\n}\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\ni.icon.plus:before {\n  content: \"\\f067\";\n}\ni.icon.minus:before {\n  content: \"\\f068\";\n}\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\ni.icon.film:before {\n  content: \"\\f008\";\n}\ni.icon.sound:before {\n  content: \"\\f025\";\n}\ni.icon.photo:before {\n  content: \"\\f030\";\n}\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Mobile */\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\ni.icon.battery.full:before {\n  content: \"\\f240\";\n}\ni.icon.battery.high:before {\n  content: \"\\f241\";\n}\ni.icon.battery.medium:before {\n  content: \"\\f242\";\n}\ni.icon.battery.low:before {\n  content: \"\\f243\";\n}\ni.icon.battery.empty:before {\n  content: \"\\f244\";\n}\n\n/* Computer */\ni.icon.power:before {\n  content: \"\\f011\";\n}\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\ni.icon.game:before {\n  content: \"\\f11b\";\n}\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\ni.icon.file:before {\n  content: \"\\f15b\";\n}\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\ni.icon.fork:before {\n  content: \"\\f126\";\n}\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\ni.icon.server:before {\n  content: \"\\f233\";\n}\ni.icon.usb:before {\n  content: \"\\f287\";\n}\ni.icon.bluetooth:before {\n  content: \"\\f293\";\n}\ni.icon.bluetooth.alternative:before {\n  content: \"\\f294\";\n}\ni.icon.microchip:before {\n  content: \"\\f2db\";\n}\n\n/* Rating */\ni.icon.heart:before {\n  content: \"\\f004\";\n}\ni.icon.star:before {\n  content: \"\\f005\";\n}\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\ni.icon.smile:before {\n  content: \"\\f118\";\n}\ni.icon.frown:before {\n  content: \"\\f119\";\n}\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\ni.icon.music:before {\n  content: \"\\f001\";\n}\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\ni.icon.record:before {\n  content: \"\\f03d\";\n}\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\ni.icon.play:before {\n  content: \"\\f04b\";\n}\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\ni.icon.eject:before {\n  content: \"\\f052\";\n}\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\ni.icon.mute:before {\n  content: \"\\f131\";\n}\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\ni.icon.pause.circle:before {\n  content: \"\\f28b\";\n}\ni.icon.pause.circle.outline:before {\n  content: \"\\f28c\";\n}\ni.icon.stop.circle:before {\n  content: \"\\f28d\";\n}\ni.icon.stop.circle.outline:before {\n  content: \"\\f28e\";\n}\n\n/* Map, Locations, & Transportation */\ni.icon.marker:before {\n  content: \"\\f041\";\n}\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\ni.icon.university:before {\n  content: \"\\f19c\";\n}\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\ni.icon.bus:before {\n  content: \"\\f207\";\n}\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\ni.icon.train:before {\n  content: \"\\f238\";\n}\ni.icon.subway:before {\n  content: \"\\f239\";\n}\ni.icon.map.pin:before {\n  content: \"\\f276\";\n}\ni.icon.map.signs:before {\n  content: \"\\f277\";\n}\ni.icon.map.outline:before {\n  content: \"\\f278\";\n}\ni.icon.map:before {\n  content: \"\\f279\";\n}\n\n/* Tables */\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\ni.icon.font:before {\n  content: \"\\f031\";\n}\ni.icon.bold:before {\n  content: \"\\f032\";\n}\ni.icon.italic:before {\n  content: \"\\f033\";\n}\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\ni.icon.list:before {\n  content: \"\\f03a\";\n}\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\ni.icon.unlinkify:before {\n  content: \"\\f127\";\n}\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\ni.icon.text.cursor:before {\n  content: \"\\f246\";\n}\n\n/* Currency */\ni.icon.euro:before {\n  content: \"\\f153\";\n}\ni.icon.pound:before {\n  content: \"\\f154\";\n}\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\ni.icon.yen:before {\n  content: \"\\f157\";\n}\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\ni.icon.won:before {\n  content: \"\\f159\";\n}\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\ni.icon.lira:before {\n  content: \"\\f195\";\n}\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\ni.icon.japan.credit.bureau:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club:before {\n  content: \"\\f24c\";\n}\ni.icon.credit.card.alternative:before {\n  content: \"\\f283\";\n}\n/* Networks and Websites*/\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\ni.icon.facebook.f:before {\n  content: \"\\f09a\";\n}\ni.icon.github:before {\n  content: \"\\f09b\";\n}\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\ni.icon.xing:before {\n  content: \"\\f168\";\n}\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\ni.icon.adn:before {\n  content: \"\\f170\";\n}\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\ni.icon.apple:before {\n  content: \"\\f179\";\n}\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\ni.icon.android:before {\n  content: \"\\f17b\";\n}\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\ni.icon.dribble:before {\n  content: \"\\f17d\";\n}\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\ni.icon.trello:before {\n  content: \"\\f181\";\n}\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\ni.icon.vk:before {\n  content: \"\\f189\";\n}\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\ni.icon.vimeo.square:before {\n  content: \"\\f194\";\n}\ni.icon.slack:before {\n  content: \"\\f198\";\n}\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\ni.icon.facebook:before {\n  content: \"\\f230\";\n}\ni.icon.pinterest:before {\n  content: \"\\f231\";\n}\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\ni.icon.y.combinator:before {\n  content: \"\\f23b\";\n}\ni.icon.optinmonster:before {\n  content: \"\\f23c\";\n}\ni.icon.opencart:before {\n  content: \"\\f23d\";\n}\ni.icon.expeditedssl:before {\n  content: \"\\f23e\";\n}\ni.icon.gg:before {\n  content: \"\\f260\";\n}\ni.icon.gg.circle:before {\n  content: \"\\f261\";\n}\ni.icon.tripadvisor:before {\n  content: \"\\f262\";\n}\ni.icon.odnoklassniki:before {\n  content: \"\\f263\";\n}\ni.icon.odnoklassniki.square:before {\n  content: \"\\f264\";\n}\ni.icon.pocket:before {\n  content: \"\\f265\";\n}\ni.icon.wikipedia:before {\n  content: \"\\f266\";\n}\ni.icon.safari:before {\n  content: \"\\f267\";\n}\ni.icon.chrome:before {\n  content: \"\\f268\";\n}\ni.icon.firefox:before {\n  content: \"\\f269\";\n}\ni.icon.opera:before {\n  content: \"\\f26a\";\n}\ni.icon.internet.explorer:before {\n  content: \"\\f26b\";\n}\ni.icon.contao:before {\n  content: \"\\f26d\";\n}\ni.icon.\\35 00px:before {\n  content: \"\\f26e\";\n}\ni.icon.amazon:before {\n  content: \"\\f270\";\n}\ni.icon.houzz:before {\n  content: \"\\f27c\";\n}\ni.icon.vimeo:before {\n  content: \"\\f27d\";\n}\ni.icon.black.tie:before {\n  content: \"\\f27e\";\n}\ni.icon.fonticons:before {\n  content: \"\\f280\";\n}\ni.icon.reddit.alien:before {\n  content: \"\\f281\";\n}\ni.icon.microsoft.edge:before {\n  content: \"\\f282\";\n}\ni.icon.codiepie:before {\n  content: \"\\f284\";\n}\ni.icon.modx:before {\n  content: \"\\f285\";\n}\ni.icon.fort.awesome:before {\n  content: \"\\f286\";\n}\ni.icon.product.hunt:before {\n  content: \"\\f288\";\n}\ni.icon.mixcloud:before {\n  content: \"\\f289\";\n}\ni.icon.scribd:before {\n  content: \"\\f28a\";\n}\ni.icon.gitlab:before {\n  content: \"\\f296\";\n}\ni.icon.wpbeginner:before {\n  content: \"\\f297\";\n}\ni.icon.wpforms:before {\n  content: \"\\f298\";\n}\ni.icon.envira.gallery:before {\n  content: \"\\f299\";\n}\ni.icon.glide:before {\n  content: \"\\f2a5\";\n}\ni.icon.glide.g:before {\n  content: \"\\f2a6\";\n}\ni.icon.viadeo:before {\n  content: \"\\f2a9\";\n}\ni.icon.viadeo.square:before {\n  content: \"\\f2aa\";\n}\ni.icon.snapchat:before {\n  content: \"\\f2ab\";\n}\ni.icon.snapchat.ghost:before {\n  content: \"\\f2ac\";\n}\ni.icon.snapchat.square:before {\n  content: \"\\f2ad\";\n}\ni.icon.pied.piper.hat:before {\n  content: \"\\f2ae\";\n}\ni.icon.first.order:before {\n  content: \"\\f2b0\";\n}\ni.icon.yoast:before {\n  content: \"\\f2b1\";\n}\ni.icon.themeisle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.circle:before {\n  content: \"\\f2b3\";\n}\ni.icon.font.awesome:before {\n  content: \"\\f2b4\";\n}\ni.icon.linode:before {\n  content: \"\\f2b8\";\n}\ni.icon.quora:before {\n  content: \"\\f2c4\";\n}\ni.icon.free.code.camp:before {\n  content: \"\\f2c5\";\n}\ni.icon.telegram:before {\n  content: \"\\f2c6\";\n}\ni.icon.bandcamp:before {\n  content: \"\\f2d5\";\n}\ni.icon.grav:before {\n  content: \"\\f2d6\";\n}\ni.icon.etsy:before {\n  content: \"\\f2d7\";\n}\ni.icon.imdb:before {\n  content: \"\\f2d8\";\n}\ni.icon.ravelry:before {\n  content: \"\\f2d9\";\n}\ni.icon.eercast:before {\n  content: \"\\f2da\";\n}\ni.icon.superpowers:before {\n  content: \"\\f2dd\";\n}\ni.icon.wpexplorer:before {\n  content: \"\\f2de\";\n}\ni.icon.meetup:before {\n  content: \"\\f2e0\";\n}\n\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\ni.icon.video:before {\n  content: \"\\f008\";\n}\ni.icon.check:before {\n  content: \"\\f00c\";\n}\ni.icon.close:before {\n  content: \"\\f00d\";\n}\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\ni.icon.x:before {\n  content: \"\\f00d\";\n}\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\ni.icon.clock:before {\n  content: \"\\f017\";\n}\ni.icon.time:before {\n  content: \"\\f017\";\n}\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\ni.icon.camera:before {\n  content: \"\\f030\";\n}\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\ni.icon.compose:before {\n  content: \"\\f040\";\n}\ni.icon.point:before {\n  content: \"\\f041\";\n}\ni.icon.tint:before {\n  content: \"\\f043\";\n}\ni.icon.signup:before {\n  content: \"\\f044\";\n}\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\ni.icon.question.circle:before {\n  content: \"\\f059\";\n}\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\ni.icon.add:before {\n  content: \"\\f067\";\n}\ni.icon.exclamation.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\ni.icon.exclamation.triangle:before {\n  content: \"\\f071\";\n}\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\ni.icon.chat:before {\n  content: \"\\f075\";\n}\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\ni.icon.key:before {\n  content: \"\\f084\";\n}\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\ni.icon.winner:before {\n  content: \"\\f091\";\n}\ni.icon.phone:before {\n  content: \"\\f095\";\n}\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.chain:before {\n  content: \"\\f0c1\";\n}\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\ni.icon.clipboard:before {\n  content: \"\\f0ea\";\n}\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.computer:before {\n  content: \"\\f108\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\ni.icon.broken.chain:before {\n  content: \"\\f127\";\n}\ni.icon.question:before {\n  content: \"\\f128\";\n}\ni.icon.exclamation:before {\n  content: \"\\f12a\";\n}\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\ni.icon.shield:before {\n  content: \"\\f132\";\n}\ni.icon.target:before {\n  content: \"\\f140\";\n}\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\ni.icon.eur:before {\n  content: \"\\f153\";\n}\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\ni.icon.usd:before {\n  content: \"\\f155\";\n}\ni.icon.inr:before {\n  content: \"\\f156\";\n}\ni.icon.cny:before {\n  content: \"\\f157\";\n}\ni.icon.rmb:before {\n  content: \"\\f157\";\n}\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\ni.icon.rouble:before {\n  content: \"\\f158\";\n}\ni.icon.rub:before {\n  content: \"\\f158\";\n}\ni.icon.krw:before {\n  content: \"\\f159\";\n}\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\ni.icon.zip:before {\n  content: \"\\f187\";\n}\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\ni.icon.try:before {\n  content: \"\\f195\";\n}\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f1db\";\n}\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\ni.icon.visa.card:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard.card:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover.card:before {\n  content: \"\\f1f2\";\n}\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\ni.icon.american.express.card:before {\n  content: \"\\f1f3\";\n}\ni.icon.stripe.card:before {\n  content: \"\\f1f5\";\n}\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\ni.icon.sheqel:before {\n  content: \"\\f20b\";\n}\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\ni.icon.venus:before {\n  content: \"\\f221\";\n}\ni.icon.mars:before {\n  content: \"\\f222\";\n}\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\ni.icon.intersex:before {\n  content: \"\\f224\";\n}\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.asexual:before {\n  content: \"\\f22d\";\n}\ni.icon.facebook.official:before {\n  content: \"\\f230\";\n}\ni.icon.user.plus:before {\n  content: \"\\f234\";\n}\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\ni.icon.bed:before {\n  content: \"\\f236\";\n}\ni.icon.yc:before {\n  content: \"\\f23b\";\n}\ni.icon.ycombinator:before {\n  content: \"\\f23b\";\n}\ni.icon.battery.four:before {\n  content: \"\\f240\";\n}\ni.icon.battery.three:before {\n  content: \"\\f241\";\n}\ni.icon.battery.three.quarters:before {\n  content: \"\\f241\";\n}\ni.icon.battery.two:before {\n  content: \"\\f242\";\n}\ni.icon.battery.half:before {\n  content: \"\\f242\";\n}\ni.icon.battery.one:before {\n  content: \"\\f243\";\n}\ni.icon.battery.quarter:before {\n  content: \"\\f243\";\n}\ni.icon.battery.zero:before {\n  content: \"\\f244\";\n}\ni.icon.i.cursor:before {\n  content: \"\\f246\";\n}\ni.icon.jcb:before {\n  content: \"\\f24b\";\n}\ni.icon.japan.credit.bureau.card:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club.card:before {\n  content: \"\\f24c\";\n}\ni.icon.balance:before {\n  content: \"\\f24e\";\n}\ni.icon.hourglass.outline:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.zero:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.one:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.two:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.three:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.four:before {\n  content: \"\\f254\";\n}\ni.icon.grab:before {\n  content: \"\\f255\";\n}\ni.icon.hand.victory:before {\n  content: \"\\f25b\";\n}\ni.icon.tm:before {\n  content: \"\\f25c\";\n}\ni.icon.r.circle:before {\n  content: \"\\f25d\";\n}\ni.icon.television:before {\n  content: \"\\f26c\";\n}\ni.icon.five.hundred.pixels:before {\n  content: \"\\f26e\";\n}\ni.icon.calendar.plus:before {\n  content: \"\\f271\";\n}\ni.icon.calendar.minus:before {\n  content: \"\\f272\";\n}\ni.icon.calendar.times:before {\n  content: \"\\f273\";\n}\ni.icon.calendar.check:before {\n  content: \"\\f274\";\n}\ni.icon.factory:before {\n  content: \"\\f275\";\n}\ni.icon.commenting:before {\n  content: \"\\f27a\";\n}\ni.icon.commenting.outline:before {\n  content: \"\\f27b\";\n}\ni.icon.edge:before {\n  content: \"\\f282\";\n}\ni.icon.ms.edge:before {\n  content: \"\\f282\";\n}\ni.icon.wordpress.beginner:before {\n  content: \"\\f297\";\n}\ni.icon.wordpress.forms:before {\n  content: \"\\f298\";\n}\ni.icon.envira:before {\n  content: \"\\f299\";\n}\ni.icon.question.circle.outline:before {\n  content: \"\\f29c\";\n}\ni.icon.assistive.listening.devices:before {\n  content: \"\\f2a2\";\n}\ni.icon.als:before {\n  content: \"\\f2a2\";\n}\ni.icon.ald:before {\n  content: \"\\f2a2\";\n}\ni.icon.asl.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.deaf:before {\n  content: \"\\f2a4\";\n}\ni.icon.american.sign.language.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.hard.of.hearing:before {\n  content: \"\\f2a4\";\n}\ni.icon.signing:before {\n  content: \"\\f2a7\";\n}\ni.icon.new.pied.piper:before {\n  content: \"\\f2ae\";\n}\ni.icon.theme.isle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.official:before {\n  content: \"\\f2b3\";\n}\ni.icon.fa:before {\n  content: \"\\f2b4\";\n}\ni.icon.vcard:before {\n  content: \"\\f2bb\";\n}\ni.icon.vcard.outline:before {\n  content: \"\\f2bc\";\n}\ni.icon.drivers.license:before {\n  content: \"\\f2c2\";\n}\ni.icon.drivers.license.outline:before {\n  content: \"\\f2c3\";\n}\ni.icon.thermometer:before {\n  content: \"\\f2c7\";\n}\ni.icon.s15:before {\n  content: \"\\f2cd\";\n}\ni.icon.bath:before {\n  content: \"\\f2cd\";\n}\ni.icon.times.rectangle:before {\n  content: \"\\f2d3\";\n}\ni.icon.times.rectangle.outline:before {\n  content: \"\\f2d4\";\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/image.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\nimg.ui.image {\n  display: block;\n}\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.78571429rem;\n}\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/input.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Standard\n*******************************/\n\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.21428571em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67857143em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input:-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input:not(.disabled) input[disabled] {\n  opacity: 0.45;\n}\n.ui.disabled.input input,\n.ui.input:not(.disabled) input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #FAFAFA;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: #85B7D9;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.8);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Error Placeholder */\n.ui.input.error input::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input:-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n/* Focused Error Placeholder */\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus::-moz-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-radius: 0px !important;\n}\n\n/* Transparent Icon */\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n.ui.transparent.inverted.input {\n  color: #FFFFFF;\n}\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n\n/* Adjacent Label */\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  margin: 0;\n  font-size: 1em;\n}\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: #85B7D9;\n}\n\n/* Regular Label on Right */\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Corner Label */\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: 2.5em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: 3.25em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: 2.5em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: 3.25em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n}\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Input Focus */\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Button on Left */\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Input Focus */\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: #85B7D9 !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n\n/* Standard */\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.78571429em;\n}\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n.ui.input {\n  font-size: 1em;\n}\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/item.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: -webkit-box-shadow 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  z-index: '';\n}\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -ms-flex-item-align: top;\n      align-self: top;\n  padding-left: 1.5em;\n}\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -ms-flex-item-align: middle;\n      align-self: middle;\n  width: '';\n}\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.items > .item > .content .active.favorite.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.items > .item > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n\n/*******************************\n          Responsive\n*******************************/\n\n\n/* Default Image Width */\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.items:not(.unstackable) > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    margin: 2em 0em;\n  }\n  .ui.items:not(.unstackable) > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n  .ui.items:not(.unstackable) > .item > .image,\n  .ui.items:not(.unstackable) > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n  .ui.items:not(.unstackable) > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -ms-flex-item-align: start;\n      align-self: flex-start;\n}\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -ms-flex-item-align: center;\n      align-self: center;\n}\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n/*---------------\n   Unstackable\n----------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.unstackable.items > .item > .image,\n  .ui.unstackable.items > .item > .image > img {\n    width: 125px !important;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/label.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #E8E8E8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border: 0px solid transparent;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label:first-child {\n  margin-left: 0em;\n}\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: 2rem !important;\n}\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #E8E8E8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: inherit;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #FFFFFF !important;\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n          box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  border-color: #E8E8E8;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n.ui.corner.label {\n  background-color: transparent !important;\n}\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n          transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/* Inside Table */\n.ui.table td > .ui.ribbon.label {\n  left: calc( -0.78571429em  -  1.2em );\n}\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  0.78571429em  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.21428571rem 0.21428571rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.21428571rem 0.21428571rem;\n}\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.21428571rem 0em 0.28571429rem 0em;\n}\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.21428571rem 0em 0.28571429rem;\n}\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.21428571rem;\n}\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.21428571rem 0em;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #E0E0E0;\n  border-color: #E0E0E0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #D0D0D0;\n  border-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.label:before {\n  background-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #C8C8C8;\n  border-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #DB2828 !important;\n  border-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/* Basic */\n.ui.basic.red.label {\n  background-color: #FFFFFF !important;\n  color: #DB2828 !important;\n  border-color: #DB2828 !important;\n}\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: #FFFFFF !important;\n  color: #d01919 !important;\n  border-color: #d01919 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #F2711C !important;\n  border-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/* Basic */\n.ui.basic.orange.label {\n  background-color: #FFFFFF !important;\n  color: #F2711C !important;\n  border-color: #F2711C !important;\n}\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: #FFFFFF !important;\n  color: #f26202 !important;\n  border-color: #f26202 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/* Basic */\n.ui.basic.yellow.label {\n  background-color: #FFFFFF !important;\n  color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n}\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: #FFFFFF !important;\n  color: #eaae00 !important;\n  border-color: #eaae00 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.olive.label {\n  background-color: #FFFFFF !important;\n  color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n}\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: #FFFFFF !important;\n  color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21BA45 !important;\n  border-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.green.label {\n  background-color: #FFFFFF !important;\n  color: #21BA45 !important;\n  border-color: #21BA45 !important;\n}\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: #FFFFFF !important;\n  color: #16ab39 !important;\n  border-color: #16ab39 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00B5AD !important;\n  border-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/* Basic */\n.ui.basic.teal.label {\n  background-color: #FFFFFF !important;\n  color: #00B5AD !important;\n  border-color: #00B5AD !important;\n}\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: #FFFFFF !important;\n  color: #009c95 !important;\n  border-color: #009c95 !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185D0 !important;\n  border-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/* Basic */\n.ui.basic.blue.label {\n  background-color: #FFFFFF !important;\n  color: #2185D0 !important;\n  border-color: #2185D0 !important;\n}\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: #FFFFFF !important;\n  color: #1678c2 !important;\n  border-color: #1678c2 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435C9 !important;\n  border-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/* Basic */\n.ui.basic.violet.label {\n  background-color: #FFFFFF !important;\n  color: #6435C9 !important;\n  border-color: #6435C9 !important;\n}\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: #FFFFFF !important;\n  color: #5829bb !important;\n  border-color: #5829bb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #A333C8 !important;\n  border-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/* Basic */\n.ui.basic.purple.label {\n  background-color: #FFFFFF !important;\n  color: #A333C8 !important;\n  border-color: #A333C8 !important;\n}\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: #FFFFFF !important;\n  color: #9627ba !important;\n  border-color: #9627ba !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #E03997 !important;\n  border-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/* Basic */\n.ui.basic.pink.label {\n  background-color: #FFFFFF !important;\n  color: #E03997 !important;\n  border-color: #E03997 !important;\n}\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: #FFFFFF !important;\n  color: #e61a8d !important;\n  border-color: #e61a8d !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #A5673F !important;\n  border-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.brown.label {\n  background-color: #FFFFFF !important;\n  color: #A5673F !important;\n  border-color: #A5673F !important;\n}\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: #FFFFFF !important;\n  color: #975b33 !important;\n  border-color: #975b33 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.grey.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.grey.label {\n  background-color: #FFFFFF !important;\n  color: #767676 !important;\n  border-color: #767676 !important;\n}\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: #FFFFFF !important;\n  color: #838383 !important;\n  border-color: #838383 !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.black.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.black.label {\n  background-color: #FFFFFF !important;\n  color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n}\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: #FFFFFF !important;\n  color: #27292a !important;\n  border-color: #27292a !important;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: none #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Link */\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: none #FFFFFF;\n  color: #1e70bf;\n  -webkit-box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n          box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Pointing */\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n.ui.attached.pointing.label {\n  position: absolute;\n}\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: inherit;\n}\n\n/* Arrow */\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6666em;\n  height: 0.6666em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: 1em;\n}\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: 1px 0px 0px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px 1px 1px 0px;\n  top: auto;\n  right: auto;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: 0.6666em;\n}\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px 1px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: 0.6666em;\n}\n.ui[class*=\"right pointing\"].label:before {\n  border-width: 1px 1px 0px 0px;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: -1px;\n}\n\n/*--- Below ---*/\n\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: 1px;\n}\n\n/*--- Left ---*/\n\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: -1px;\n}\n\n/*--- Right ---*/\n\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: -1px;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 1rem;\n}\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 1.28571429rem;\n}\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 1.42857143rem;\n}\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/list.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* List Item */\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: top;\n}\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: 0.5em;\n}\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183C4;\n}\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183C4 !important;\n}\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Value */\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: 0.5em;\n}\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: 0.5em;\n}\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  line-height: 0.6;\n}\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.42857143em;\n}\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.42857143em;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: 1rem;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.85714286em;\n}\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.85714286em;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: 1.5rem;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.78571429em;\n}\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n.ui.list {\n  font-size: 1em;\n}\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/loader.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Loader\n*******************************/\n\n\n/* Standard Size */\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n          animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1rem;\n  height: 1rem;\n  margin: 0em 0em 0em -0.5rem;\n}\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  margin: 0em 0em 0em -0.57142857rem;\n}\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  margin: 0em 0em 0em -0.85714286rem;\n}\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  margin: 0em 0em 0em -1.14285714rem;\n}\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  margin: 0em 0em 0em -1.71428571rem;\n}\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  margin: 0em 0em 0em -1.85714286rem;\n}\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  margin: 0em 0em 0em -2.07142857rem;\n}\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  margin: 0em 0em 0em -2.28571429rem;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n\n/* Show inside active dimmer */\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.dimmer .ui.loader:after {\n  border-color: #FFFFFF transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n          animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n          animation-duration: 1.2s;\n}\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*-------------------\n        Sizes\n--------------------*/\n\n\n/* Loader */\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1rem;\n  height: 1rem;\n  font-size: 0.78571429em;\n}\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  font-size: 0.85714286em;\n}\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  font-size: 0.92857143em;\n}\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  font-size: 1em;\n}\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  font-size: 1.14285714em;\n}\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  font-size: 1.28571429em;\n}\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  font-size: 1.42857143em;\n}\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  font-size: 1.71428571em;\n}\n\n/* Text Loader */\n.ui.mini.text.loader {\n  min-width: 1rem;\n  padding-top: 1.78571429rem;\n}\n.ui.tiny.text.loader {\n  min-width: 1.14285714rem;\n  padding-top: 1.92857143rem;\n}\n.ui.small.text.loader {\n  min-width: 1.71428571rem;\n  padding-top: 2.5rem;\n}\n.ui.text.loader {\n  min-width: 2.28571429rem;\n  padding-top: 3.07142857rem;\n}\n.ui.large.text.loader {\n  min-width: 3.42857143rem;\n  padding-top: 4.21428571rem;\n}\n.ui.big.text.loader {\n  min-width: 3.71428571rem;\n  padding-top: 4.5rem;\n}\n.ui.huge.text.loader {\n  min-width: 4.14285714rem;\n  padding-top: 4.92857143rem;\n}\n.ui.massive.text.loader {\n  min-width: 4.57142857rem;\n  padding-top: 5.35714286rem;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.inverted.loader:after {\n  border-top-color: #FFFFFF;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/menu.css",
    "content": "/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1rem 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  line-height: 1.3;\n}\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.78571429em;\n  padding-top: 0.78571429em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n      -ms-flex-align: inherit;\n          align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: inherit;\n          flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n\n/* Dropdown Icon */\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #FFFFFF;\n  margin: 0em 0px 0px;\n  -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n      -ms-flex-direction: column !important;\n          flex-direction: column !important;\n}\n\n/* Menu Items */\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: 1em !important;\n  padding: 0.78571429em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  -webkit-box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.vertical.menu .dropdown.active.item {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Evenly Divided */\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-left: 1em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.78571429em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n\n/*******************************\n          Coupling\n*******************************/\n\n\n/*--------------\n     Sidebar\n---------------*/\n\n\n/* Show vertical dividers below last */\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n\n/* Left Floated */\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0.28571429rem;\n}\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border: none;\n  background: none transparent;\n  border-bottom: 1px solid #D4D4D5;\n}\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  padding: 0.92857143em 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n.ui.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #D4D4D5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: calc(100% +  2px );\n  left: -1px;\n}\n\n/* Bottom Vertical Tabular */\n.ui.bottom.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-top: 1px solid #D4D4D5;\n}\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: none;\n}\n.ui.bottom.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: -1px 0px 0px 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem !important;\n}\n\n/* Vertical Tabular (Left) */\n.ui.vertical.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #D4D4D5;\n}\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n.ui.vertical.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Vertical Right Tabular */\n.ui.vertical.right.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: 1px solid #D4D4D5;\n}\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-left: none;\n}\n.ui.vertical.right.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px 0px 0px -1px;\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px !important;\n}\n\n/* Dropdown */\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Item */\n.ui.secondary.menu .item {\n  -ms-flex-item-align: center;\n      align-self: center;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  padding: 0.78571429em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: none;\n  background: none transparent;\n}\n\n/* Image */\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.menu .active.item {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n.ui.secondary.menu .active.item:hover {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n.ui.secondary.attached.menu {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: 0em -0.92857143em;\n}\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 1.33333333em;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n.ui.secondary.pointing.menu .text.item {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: #1B1C1D;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1B1C1D;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1B1C1D;\n}\n\n/* Inverted */\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #FFFFFF !important;\n}\n\n/* Hover */\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #FFFFFF;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  margin: 1em -0.5em;\n}\n.ui.text.menu .item {\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -ms-flex-item-align: center;\n      align-self: center;\n  margin: 0em 0em;\n  padding: 0.35714286em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Border */\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/* Vertical Sub Menu */\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: 0em;\n}\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 0em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n.ui.text.pointing.menu .active.item:after {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.text.attached.menu {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Inverted */\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n\n/* Vertical Menu */\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1B1C1D;\n}\n\n/* Icon */\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n.ui.inverted.icon.menu .item {\n  color: #FFFFFF;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n\n/* Menu */\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n/* Icon */\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.71428571em !important;\n  margin: 0em auto 0.5rem !important;\n}\n\n/* Fluid */\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: 1px;\n    background: rgba(34, 36, 38, 0.1);\n  }\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .left.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #DB2828 !important;\n  color: #DB2828 !important;\n}\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #F2711C !important;\n  color: #F2711C !important;\n}\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #FBBD08 !important;\n  color: #FBBD08 !important;\n}\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #B5CC18 !important;\n  color: #B5CC18 !important;\n}\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21BA45 !important;\n  color: #21BA45 !important;\n}\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00B5AD !important;\n  color: #00B5AD !important;\n}\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185D0 !important;\n  color: #2185D0 !important;\n}\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435C9 !important;\n  color: #6435C9 !important;\n}\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #A333C8 !important;\n  color: #A333C8 !important;\n}\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #E03997 !important;\n  color: #E03997 !important;\n}\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #A5673F !important;\n  color: #A5673F !important;\n}\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 0px solid transparent;\n  background: #1B1C1D;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Menu Item */\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Disabled */\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #FFFFFF;\n}\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3D3E3F !important;\n  margin: 0em !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #FFFFFF !important;\n}\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3D3E3F !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Red */\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: #DB2828;\n}\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: #F2711C;\n}\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: #FBBD08;\n}\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: #B5CC18;\n}\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: #21BA45;\n}\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: #00B5AD;\n}\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: #2185D0;\n}\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: #6435C9;\n}\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: #A333C8;\n}\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: #E03997;\n}\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: #A5673F;\n}\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.attached.item.menu {\n  margin: 0em -1px !important;\n}\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n.ui.menu.two.item .item {\n  width: 50%;\n}\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n.ui.menu.four.item .item {\n  width: 25%;\n}\n.ui.menu.five.item .item {\n  width: 20%;\n}\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n}\n\n/* Active */\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #FFFFFF;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Middle */\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n.ui.attached.menu:not(.tabular) {\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.inverted.menu {\n  border: none;\n}\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.menu {\n  font-size: 0.78571429rem;\n}\n.ui.mini.vertical.menu {\n  width: 9rem;\n}\n\n/* Tiny */\n.ui.tiny.menu {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.vertical.menu {\n  width: 11rem;\n}\n\n/* Small */\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n.ui.menu {\n  font-size: 1rem;\n}\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n.ui.large.menu {\n  font-size: 1.07142857rem;\n}\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n.ui.huge.menu {\n  font-size: 1.14285714rem;\n}\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/* Big */\n.ui.big.menu {\n  font-size: 1.21428571rem;\n}\n.ui.big.vertical.menu {\n  width: 22rem;\n}\n\n/* Massive */\n.ui.massive.menu {\n  font-size: 1.28571429rem;\n}\n.ui.massive.vertical.menu {\n  width: 25rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/message.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #F8F8F9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.message:first-child {\n  margin-top: 0em;\n}\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Header */\n.ui.message .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285714em 0em 0rem 0em;\n}\n\n/* Default font size */\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n.ui.compact.icon.message {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n.ui.attached.icon.message {\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  vertical-align: middle;\n}\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n\n/* Positive */\n.ui.positive.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.positive.message,\n.ui.attached.positive.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.positive.message .header {\n  color: #1A531B;\n}\n\n/* Negative */\n.ui.negative.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.negative.message,\n.ui.attached.negative.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.negative.message .header {\n  color: #912D2B;\n}\n\n/* Info */\n.ui.info.message {\n  background-color: #F8FFFF;\n  color: #276F86;\n}\n.ui.info.message,\n.ui.attached.info.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.info.message .header {\n  color: #0E566C;\n}\n\n/* Warning */\n.ui.warning.message {\n  background-color: #FFFAF3;\n  color: #573A08;\n}\n.ui.warning.message,\n.ui.attached.warning.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.warning.message .header {\n  color: #794B02;\n}\n\n/* Error */\n.ui.error.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.error.message,\n.ui.attached.error.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.error.message .header {\n  color: #912D2B;\n}\n\n/* Success */\n.ui.success.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.success.message,\n.ui.attached.success.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.success.message .header {\n  color: #1A531B;\n}\n\n/* Colors */\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.red.message {\n  background-color: #FFE8E6;\n  color: #DB2828;\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.red.message .header {\n  color: #c82121;\n}\n.ui.orange.message {\n  background-color: #FFEDDE;\n  color: #F2711C;\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.orange.message .header {\n  color: #e7640d;\n}\n.ui.yellow.message {\n  background-color: #FFF8DB;\n  color: #B58105;\n  -webkit-box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n.ui.olive.message {\n  background-color: #FBFDEF;\n  color: #8ABC1E;\n  -webkit-box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n.ui.green.message {\n  background-color: #E5F9E7;\n  color: #1EBC30;\n  -webkit-box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.green.message .header {\n  color: #1aa62a;\n}\n.ui.teal.message {\n  background-color: #E1F7F7;\n  color: #10A3A3;\n  -webkit-box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n.ui.blue.message {\n  background-color: #DFF0FF;\n  color: #2185D0;\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n.ui.violet.message {\n  background-color: #EAE7FF;\n  color: #6435C9;\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n.ui.purple.message {\n  background-color: #F6E7FF;\n  color: #A333C8;\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.purple.message .header {\n  color: #922eb4;\n}\n.ui.pink.message {\n  background-color: #FFE3FB;\n  color: #E03997;\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.pink.message .header {\n  color: #dd238b;\n}\n.ui.brown.message {\n  background-color: #F1E2D3;\n  color: #A5673F;\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: 0.78571429em;\n}\n.ui.tiny.message {\n  font-size: 0.85714286em;\n}\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n.ui.message {\n  font-size: 1em;\n}\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n.ui.big.message {\n  font-size: 1.28571429em;\n}\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/modal.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n          box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #FFFFFF;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.28571429em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #FFFFFF;\n}\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n}\n\n/* Image */\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  width: '';\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"top aligned\"] {\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"middle aligned\"] {\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n.ui.modal > [class*=\"stretched\"] {\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n}\n\n/* Description */\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  min-width: 0px;\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n/*rtl:ignore*/\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: #F9FAFB;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n\n/* Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n  /*rtl:ignore*/\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n  /*rtl:ignore*/\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Let Buttons Stack */\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  -webkit-box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n          box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n.ui.basic.modal > .header {\n  color: #FFFFFF;\n}\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.basic.modal > .close {\n    color: #FFFFFF;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Scrolling\n---------------*/\n\n\n/* A modal that cannot fit on the page */\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n@media only screen and (max-width: 991px) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n}\n\n/* Scrolling Content */\n.ui.modal .scrolling.content {\n  max-height: calc(70vh);\n  overflow: auto;\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Mini */\n.ui.mini.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Mini Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.mini.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.mini.modal {\n    width: 35.2%;\n    margin: 0em 0em 0em -17.6%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.mini.modal {\n    width: 340px;\n    margin: 0em 0em 0em -170px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.mini.modal {\n    width: 360px;\n    margin: 0em 0em 0em -180px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.mini.modal {\n    width: 380px;\n    margin: 0em 0em 0em -190px;\n  }\n}\n\n/* mini */\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Tiny Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.tiny.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.tiny.modal {\n    width: 52.8%;\n    margin: 0em 0em 0em -26.4%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.tiny.modal {\n    width: 510px;\n    margin: 0em 0em 0em -255px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.tiny.modal {\n    width: 540px;\n    margin: 0em 0em 0em -270px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.tiny.modal {\n    width: 570px;\n    margin: 0em 0em 0em -285px;\n  }\n}\n\n/* Small */\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/modal.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        ignoreRepeatedEvents = false,\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals'\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer');\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(ignoreRepeatedEvents || settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          deny: function() {\n            if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.set.dimmerSettings();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          dimmerSettings: function() {\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                variation  : false,\n                closable   : 'auto',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n              $dimmer.addClass(className.inverted);\n            }\n            else {\n              $dimmer.removeClass(className.inverted);\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            else {\n              $dimmable.removeClass(className.blurring);\n            }\n            $context.dimmer('setting', dimmerSettings);\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    inverted   : 'inverted',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/nag.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  -webkit-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n          box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\na.ui.nag {\n  cursor: pointer;\n}\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #FFFFFF;\n}\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #FFFFFF;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Hover */\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #F3F4F5;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/nag.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/popup.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  \n/* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n          box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n    Tooltip\n---------------*/\n\n\n/* Content */\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: 1rem;\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n          box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/* Popup */\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n  font-size: 1rem;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: none;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  z-index: 1;\n}\n\n/* Default Position (Top Center) */\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n/* Animation */\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n[data-tooltip]:before {\n  opacity: 0;\n  -webkit-transform: rotate(45deg) scale(0) !important;\n          transform: rotate(45deg) scale(0) !important;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:after {\n  opacity: 1;\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n[data-tooltip]:hover:before {\n  -webkit-transform: rotate(45deg) scale(1) !important;\n          transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  -webkit-transform: translateX(-50%) scale(0) !important;\n          transform: translateX(-50%) scale(0) !important;\n}\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  -webkit-transform: translateX(-50%) scale(1) !important;\n          transform: translateX(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  -webkit-transform: translateY(-50%) scale(0) !important;\n          transform: translateY(-50%) scale(0) !important;\n}\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  -webkit-transform: translateY(-50%) scale(1) !important;\n          transform: translateY(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  -webkit-transform: scale(0) !important;\n          transform: scale(0) !important;\n}\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  -webkit-transform: scale(1) !important;\n          transform: scale(1) !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Arrow */\n[data-tooltip][data-inverted]:before {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/* Arrow Position */\n[data-tooltip][data-inverted]:before {\n  background: #1B1C1D;\n}\n\n/* Popup  */\n[data-tooltip][data-inverted]:after {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n[data-tooltip][data-inverted]:after .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n/*--------------\n    Position\n---------------*/\n\n\n/* Top Center */\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-bottom: 0.5em;\n}\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Left */\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Right */\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Bottom Center */\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-top: 0.5em;\n}\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Left */\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Right */\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: 1em;\n  margin-left: -0.14285714rem;\n  margin-top: 0.07142857rem;\n}\n\n/* Left Center */\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: -0.14285714rem;\n  margin-right: -0.07142857rem;\n}\n\n/* Right Center */\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: -0.07142857rem;\n  margin-left: 0.14285714rem;\n}\n\n/* Arrow */\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-position~=\"top\"][data-tooltip]:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: #1B1C1D;\n}\n[data-position~=\"bottom\"][data-tooltip]:before {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n[data-position~=\"bottom\"][data-tooltip]:after {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n[data-position=\"left center\"][data-tooltip]:after {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:after {\n  -webkit-transform-origin: left center;\n          transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n.ui.top.popup {\n  margin: 0em 0em 0.71428571em;\n}\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n          transform-origin: left bottom;\n}\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n          transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n.ui.left.center.popup {\n  margin: 0em 0.71428571em 0em 0em;\n  -webkit-transform-origin: right 50%;\n          transform-origin: right 50%;\n}\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.71428571em;\n  -webkit-transform-origin: left 50%;\n          transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n.ui.bottom.popup {\n  margin: 0.71428571em 0em 0em;\n}\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n          transform-origin: left top;\n}\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n          transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.30714286em;\n  top: -0.30714286em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.left.popup:before {\n  top: -0.30714286em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.right.popup:before {\n  top: -0.30714286em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.30714286em;\n  left: 50%;\n  margin-left: -0.30714286em;\n}\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.top.left.popup:before {\n  bottom: -0.30714286em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.top.right.popup:before {\n  bottom: -0.30714286em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n/*rtl:rename*/\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.30714286em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n/*rtl:rename*/\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.30714286em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/* Arrow Color By Location */\n.ui.bottom.popup:before {\n  background: #FFFFFF;\n}\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: #FFFFFF;\n}\n.ui.top.popup:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n.ui.inverted.bottom.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.top.popup:before {\n  background: #1B1C1D;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* Immediate Nested Grid */\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n          transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n@media only screen and (max-width: 767px) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: 250px;\n  }\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Inverted colors  */\n.ui.inverted.popup {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n.ui.inverted.popup:before {\n  background-color: #1B1C1D;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n.ui.popup {\n  font-size: 1rem;\n}\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/popup.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent($target);\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as target');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($target)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.popupVisible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === 'undefined');\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              module.bind.closeOnScroll();\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.bind.touchClose();\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.bind.clickaway();\n            }\n          },\n          closeOnScroll: function() {\n            module.verbose('Binding scroll close event to document');\n            $scrollContext\n              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n            ;\n          },\n          touchClose: function() {\n            module.verbose('Binding popup touchclose event to document');\n            $document\n              .on('touchstart' + elementNamespace, function(event) {\n                module.verbose('Touched away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          },\n          clickaway: function() {\n            module.verbose('Binding popup close event to document');\n            $document\n              .on('click' + elementNamespace, function(event) {\n                module.verbose('Clicked away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.popupVisible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active       : 'active',\n    animating    : 'animating',\n    dropdown     : 'dropdown',\n    fluid        : 'fluid',\n    loading      : 'loading',\n    popup        : 'ui popup',\n    position     : 'top left center bottom right',\n    visible      : 'visible',\n    popupVisible : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/progress.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Activity Bar */\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/* Indicating */\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #EFBC72;\n}\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #E6BB48;\n}\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #DDC928;\n}\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #B4D95C;\n}\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66DA81;\n}\n\n/* Indicating Label */\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n.ui.indicating.progress.success .label {\n  color: #1A531B;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21BA45 !important;\n}\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.success > .label {\n  color: #1A531B;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #F2C037 !important;\n}\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.warning > .label {\n  color: #794B02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #DB2828 !important;\n}\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.error > .label {\n  color: #912D2B;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #FFFFFF;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n          animation: progress-active 2s ease infinite;\n}\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n.ui.inverted.progress .bar > .progress {\n  color: #F9FAFB;\n}\n.ui.inverted.progress > .label {\n  color: #FFFFFF;\n}\n.ui.inverted.progress.success > .label {\n  color: #21BA45;\n}\n.ui.inverted.progress.warning > .label {\n  color: #F2C037;\n}\n.ui.inverted.progress.error > .label {\n  color: #DB2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* bottom attached */\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Red */\n.ui.red.progress .bar {\n  background-color: #DB2828;\n}\n.ui.red.inverted.progress .bar {\n  background-color: #FF695E;\n}\n\n/* Orange */\n.ui.orange.progress .bar {\n  background-color: #F2711C;\n}\n.ui.orange.inverted.progress .bar {\n  background-color: #FF851B;\n}\n\n/* Yellow */\n.ui.yellow.progress .bar {\n  background-color: #FBBD08;\n}\n.ui.yellow.inverted.progress .bar {\n  background-color: #FFE21F;\n}\n\n/* Olive */\n.ui.olive.progress .bar {\n  background-color: #B5CC18;\n}\n.ui.olive.inverted.progress .bar {\n  background-color: #D9E778;\n}\n\n/* Green */\n.ui.green.progress .bar {\n  background-color: #21BA45;\n}\n.ui.green.inverted.progress .bar {\n  background-color: #2ECC40;\n}\n\n/* Teal */\n.ui.teal.progress .bar {\n  background-color: #00B5AD;\n}\n.ui.teal.inverted.progress .bar {\n  background-color: #6DFFFF;\n}\n\n/* Blue */\n.ui.blue.progress .bar {\n  background-color: #2185D0;\n}\n.ui.blue.inverted.progress .bar {\n  background-color: #54C8FF;\n}\n\n/* Violet */\n.ui.violet.progress .bar {\n  background-color: #6435C9;\n}\n.ui.violet.inverted.progress .bar {\n  background-color: #A291FB;\n}\n\n/* Purple */\n.ui.purple.progress .bar {\n  background-color: #A333C8;\n}\n.ui.purple.inverted.progress .bar {\n  background-color: #DC73FF;\n}\n\n/* Pink */\n.ui.pink.progress .bar {\n  background-color: #E03997;\n}\n.ui.pink.inverted.progress .bar {\n  background-color: #FF8EDF;\n}\n\n/* Brown */\n.ui.brown.progress .bar {\n  background-color: #A5673F;\n}\n.ui.brown.inverted.progress .bar {\n  background-color: #D67C1C;\n}\n\n/* Grey */\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n.ui.grey.inverted.progress .bar {\n  background-color: #DCDDDE;\n}\n\n/* Black */\n.ui.black.progress .bar {\n  background-color: #1B1C1D;\n}\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n.ui.small.progress .bar {\n  height: 1em;\n}\n.ui.progress {\n  font-size: 1rem;\n}\n.ui.progress .bar {\n  height: 1.75em;\n}\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n\n/*******************************\n            Progress\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/progress.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        bind: {\n          transitionEnd: function(callback) {\n            var\n              transitionEnd = module.get.transitionEnd()\n            ;\n            $bar\n              .one(transitionEnd + eventNamespace, function(event) {\n                clearTimeout(module.failSafeTimer);\n                callback.call(this, event);\n              })\n            ;\n            module.failSafeTimer = setTimeout(function() {\n              $bar.triggerHandler(transitionEnd);\n            }, settings.duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            module.bind.transitionEnd(animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  // delay in ms for fail safe animation callback\n  failSafeDelay : 100,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/rail.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: calc( 300px  +  1em );\n}\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.very.close.rail {\n  width: calc( 300px  +  0.5em );\n}\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rail {\n  font-size: 0.85714286rem;\n}\n.ui.small.rail {\n  font-size: 0.92857143rem;\n}\n.ui.rail {\n  font-size: 1rem;\n}\n.ui.large.rail {\n  font-size: 1.14285714rem;\n}\n.ui.big.rail {\n  font-size: 1.28571429rem;\n}\n.ui.huge.rail {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rail {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/rating.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n      Standard\n--------------------*/\n\n\n/* Inactive Icon */\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Inactive */\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #FFE623 !important;\n  text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important;\n}\n\n/* Selected Star */\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FFCC00 !important;\n  text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #FF6D75 !important;\n  text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important;\n}\n\n/* Selected Heart */\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FF3000 !important;\n  text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n\n/* disabled rating */\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n\n/* Selected Rating */\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n.ui.rating {\n  font-size: 1rem;\n}\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Unfilled Star */\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n/* Active */\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/rating.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/reset.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Reset\n*******************************/\n\n\n/* Border-Box */\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: inherit;\n          box-sizing: inherit;\n}\nhtml {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  \n/* mobile firefox too! */\n}\n/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\nhtml {\n  line-height: 1.15;\n  \n/* 1 */\n  -ms-text-size-adjust: 100%;\n  \n/* 2 */\n  -webkit-text-size-adjust: 100%;\n  \n/* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n/**\n * Remove the margin in all browsers (opinionated).\n */\nbody {\n  margin: 0;\n}\n/**\n * Add the correct display in IE 9-.\n */\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\nfigcaption,\nfigure,\nmain {\n  \n/* 1 */\n  display: block;\n}\n/**\n * Add the correct margin in IE 8.\n */\nfigure {\n  margin: 1em 40px;\n}\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n  \n/* 1 */\n  height: 0;\n  \n/* 1 */\n  overflow: visible;\n  \n/* 2 */\n}\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n  font-family: monospace, monospace;\n  \n/* 1 */\n  font-size: 1em;\n  \n/* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\na {\n  background-color: transparent;\n  \n/* 1 */\n  -webkit-text-decoration-skip: objects;\n  \n/* 2 */\n}\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n  border-bottom: none;\n  \n/* 1 */\n  text-decoration: underline;\n  \n/* 2 */\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n  \n/* 2 */\n}\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\nb,\nstrong {\n  font-weight: inherit;\n}\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n  font-weight: bolder;\n}\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  \n/* 1 */\n  font-size: 1em;\n  \n/* 2 */\n}\n/**\n * Add the correct font style in Android 4.3-.\n */\ndfn {\n  font-style: italic;\n}\n/**\n * Add the correct background and color in IE 9-.\n */\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n  font-size: 80%;\n}\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\naudio,\nvideo {\n  display: inline-block;\n}\n/**\n * Add the correct display in iOS 4-7.\n */\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n/**\n * Remove the border on images inside links in IE 10-.\n */\nimg {\n  border-style: none;\n}\n/**\n * Hide the overflow in IE.\n */\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif;\n  \n/* 1 */\n  font-size: 100%;\n  \n/* 1 */\n  line-height: 1.15;\n  \n/* 1 */\n  margin: 0;\n  \n/* 2 */\n}\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput {\n  \n/* 1 */\n  overflow: visible;\n}\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect {\n  \n/* 1 */\n  text-transform: none;\n}\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n  \n/* 2 */\n}\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n/**\n * Correct the padding in Firefox.\n */\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\nlegend {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  \n/* 1 */\n  color: inherit;\n  \n/* 2 */\n  display: table;\n  \n/* 1 */\n  max-width: 100%;\n  \n/* 1 */\n  padding: 0;\n  \n/* 3 */\n  white-space: normal;\n  \n/* 1 */\n}\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n  display: inline-block;\n  \n/* 1 */\n  vertical-align: baseline;\n  \n/* 2 */\n}\n/**\n * Remove the default vertical scrollbar in IE.\n */\ntextarea {\n  overflow: auto;\n}\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  \n/* 1 */\n  padding: 0;\n  \n/* 2 */\n}\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n  -webkit-appearance: textfield;\n  \n/* 1 */\n  outline-offset: -2px;\n  \n/* 2 */\n}\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  \n/* 1 */\n  font: inherit;\n  \n/* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\ndetails,\nmenu {\n  display: block;\n}\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\ncanvas {\n  display: inline-block;\n}\n/**\n * Add the correct display in IE.\n */\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n/**\n * Add the correct display in IE 10-.\n */\n[hidden] {\n  display: none;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/reveal.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\n}\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n          transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n          transform: rotate(0deg);\n}\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n          transform: rotate(110deg);\n}\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n          transform: rotate(-110deg);\n}\n\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n          transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/search.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  white-space: normal;\n  background: #FFFFFF;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid #D4D4D5;\n  z-index: 998;\n}\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n.ui.search > .results .result .title {\n  margin: -0.14285714em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.search > .results .result .price {\n  float: right;\n  color: #21BA45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n.ui.search > .results > .message .header {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #F3F4F5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #F9FAFB;\n}\n.ui.search .action:hover {\n  background: #E0E0E0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #F3F4F5;\n}\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n\n/*******************************\n           Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: 0.28571429rem;\n}\n\n/* Remove input */\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: '';\n  top: 0em;\n  right: 0em;\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\n  transition: color 0.1s ease, opacity 0.1s ease;\n}\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  pointer-events: auto;\n}\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: 1.85714em;\n}\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: 1;\n  color: #DB2828;\n}\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n.ui.category.search > .results .category {\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n.ui.category.search > .results .category .result {\n  background: #FFFFFF;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.78571429em;\n}\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n.ui.search {\n  font-size: 1em;\n}\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/search.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className        = settings.className,\n        metadata         = settings.metadata,\n        regExp           = settings.regExp,\n        fields           = settings.fields,\n        selector         = settings.selector,\n        error            = settings.error,\n        namespace        = settings.namespace,\n\n        eventNamespace   = '.' + namespace,\n        moduleNamespace  = namespace + '-module',\n\n        $module          = $(this),\n        $prompt          = $module.find(selector.prompt),\n        $searchButton    = $module.find(selector.searchButton),\n        $results         = $module.find(selector.results),\n        $result          = $module.find(selector.result),\n        $category        = $module.find(selector.category),\n\n        element          = this,\n        instance         = $module.data(moduleNamespace),\n\n        disabledBubbled  = false,\n        resultsDismissed = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            if(settings.searchDelay) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.is.focused()) {\n                  module.query();\n                }\n              }, settings.searchDelay);\n            }\n            else {\n              module.query();\n            }\n          },\n          focus: function() {\n            module.set.focus();\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\n              module.query(function() {\n                if(module.can.show() ) {\n                  module.showResults();\n                }\n              });\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            resultsDismissed = false;\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result         = $module.find(selector.result),\n            $category       = $module.find(selector.category),\n            $activeResult   = $result.filter('.' + className.active),\n            currentIndex    = $result.index( $activeResult ),\n            resultSize      = $result.length,\n            hasActiveResult = $activeResult.length > 0,\n\n            keyCode         = event.which,\n            keys            = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.hideResults();\n            resultsDismissed = true;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow && hasActiveResult) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm, callback) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                  callback();\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                  callback();\n                },\n                onAbort : function(response) {\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            if(!event.target) {\n              return;\n            }\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target)\n            ;\n            return (isInDOM && $target.closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          callback = callback || function() {};\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n              callback();\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n                callback();\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm, callback);\n              }\n              else {\n                module.error(error.source);\n                callback();\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm, callback);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          },\n          results: function() {\n            if($results.length === 0) {\n              return false;\n            }\n            var\n              html = $results.html()\n            ;\n            return html != '';\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults(function() {\n              $results.empty();\n            });\n          }\n        },\n\n        showResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(resultsDismissed) {\n            return;\n          }\n          if(!module.is.visible() && module.has.results()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // Whether search should query current term on focus\n  searchOnFocus     : true,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/segment.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Header */\n.ui.inverted.segment > .ui.header {\n  color: #FFFFFF;\n}\n\n/* Label */\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n.ui.basic.table.segment {\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  -webkit-box-shadow: '';\n          box-shadow: '';\n  z-index: auto;\n}\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #FFFFFF;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: '';\n          box-shadow: '';\n}\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n          transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n          transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/* Padded vertical */\n.ui.padded.segment.vertical.segment,\n.ui[class*=\"very padded\"].vertical.segment {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n\n/* Group */\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Only */\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Nested Group */\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n          flex: 1 1 auto;\n  -ms-flex: 1 1 0px;\n  \n/* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Border Fixes */\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n          animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #DB2828 !important;\n}\n.ui.inverted.red.segment {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #F2711C !important;\n}\n.ui.inverted.orange.segment {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #FBBD08 !important;\n}\n.ui.inverted.yellow.segment {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #B5CC18 !important;\n}\n.ui.inverted.olive.segment {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21BA45 !important;\n}\n.ui.inverted.green.segment {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00B5AD !important;\n}\n.ui.inverted.teal.segment {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185D0 !important;\n}\n.ui.inverted.blue.segment {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435C9 !important;\n}\n.ui.inverted.violet.segment {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #A333C8 !important;\n}\n.ui.inverted.purple.segment {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #E03997 !important;\n}\n.ui.inverted.pink.segment {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #A5673F !important;\n}\n.ui.inverted.brown.segment {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676 !important;\n}\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1B1C1D !important;\n}\n.ui.inverted.black.segment {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Nested */\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.segment .inverted.segment {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Attached */\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n\n/* Secondary */\n.ui.secondary.segment {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.2)), to(rgba(255, 255, 255, 0.2)));\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n.ui.tertiary.segment {\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.35)), to(rgba(255, 255, 255, 0.35)));\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: 0.85714286rem;\n}\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: 0.92857143rem;\n}\n.ui.segments .segment,\n.ui.segment {\n  font-size: 1rem;\n}\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: 1.14285714rem;\n}\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: 1.28571429rem;\n}\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: 1.42857143rem;\n}\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/shape.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n}\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n.ui.shape .side {\n  display: none;\n}\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n          backface-visibility: visible !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #E6E6E6;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n          box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n.ui.shape.animating .sides {\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/shape.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/sidebar.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sidebar\n*******************************/\n\n\n/* Sidebar Menu */\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0);\n}\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n          transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 2;\n}\nbody.pushable > .pusher {\n  background: #FFFFFF;\n}\n\n/* Pusher should inherit background from context */\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n          transform: translate3d(260px, 0, 0);\n}\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n          transform: translate3d(-260px, 0, 0);\n}\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n          transform: translate3d(0, 36px, 0);\n}\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n          transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Width\n---------------*/\n\n\n/* Left / Right */\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n          transform: translate3d(150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n          transform: translate3d(60px, 0, 0);\n}\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n          transform: translate3d(350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n          transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n          transform: translate3d(-150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n          transform: translate3d(-60px, 0, 0);\n}\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n          transform: translate3d(-350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n          transform: translate3d(-475px, 0, 0);\n}\n\n\n/*******************************\n          Animations\n*******************************/\n\n\n/*--------------\n    Overlay\n---------------*/\n\n\n/* Set-up */\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n          transform: translate3d(-100%, 0%, 0);\n}\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End - Sidebar */\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n\n/* Initial */\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n\n/* Initial */\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n\n/* Initial */\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n          transform: translate3d(0, -50%, 0);\n}\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n\n/* Initial */\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n          transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n\n/* Initial */\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n          transform-origin: 75% 50%;\n}\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n          transform-origin: 25% 50%;\n}\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n          transform-origin: 50% 75%;\n}\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n}\n\n/* Animation */\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/sidebar.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          // (This is no longer necessary in latest iOS)\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/site.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Page\n*******************************/\n\n@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin');\nhtml,\nbody {\n  height: 100%;\n}\nhtml {\n  font-size: 14px;\n}\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #FFFFFF;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.28571429em;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\nh2 {\n  font-size: 1.71428571rem;\n}\nh3 {\n  font-size: 1.28571429rem;\n}\nh4 {\n  font-size: 1.07142857rem;\n}\nh5 {\n  font-size: 1rem;\n}\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\np:first-child {\n  margin-top: 0em;\n}\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n\n/*******************************\n         Scrollbars\n*******************************/\n\n\n\n/*******************************\n          Highlighting\n*******************************/\n\n\n/* Site */\n::-webkit-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::-moz-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Force Simple Scrollbars */\nbody ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 10px;\n}\nbody ::-webkit-scrollbar-track {\n  background: rgba(0, 0, 0, 0.1);\n  border-radius: 0px;\n}\nbody ::-webkit-scrollbar-thumb {\n  cursor: pointer;\n  border-radius: 5px;\n  background: rgba(0, 0, 0, 0.25);\n  -webkit-transition: color 0.2s ease;\n  transition: color 0.2s ease;\n}\nbody ::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(0, 0, 0, 0.15);\n}\nbody ::-webkit-scrollbar-thumb:hover {\n  background: rgba(128, 135, 139, 0.8);\n}\n\n/* Inverted UI */\nbody .ui.inverted::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n\n/*******************************\n        Global Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/site.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/state.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/statistic.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Statistic\n*******************************/\n\n\n/* Standalone */\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Group\n*******************************/\n\n\n/* Grouped */\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1B1C1D;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #DB2828;\n}\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #F2711C;\n}\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #FBBD08;\n}\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #B5CC18;\n}\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21BA45;\n}\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00B5AD;\n}\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185D0;\n}\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435C9;\n}\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #A333C8;\n}\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #E03997;\n}\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #A5673F;\n}\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #FFFFFF;\n}\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #FF695E;\n}\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #FF851B;\n}\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #FFE21F;\n}\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #D9E778;\n}\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ECC40;\n}\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6DFFFF;\n}\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54C8FF;\n}\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #A291FB;\n}\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #DC73FF;\n}\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #FF8EDF;\n}\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #D67C1C;\n}\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #DCDDDE;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Tiny */\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Small */\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Medium */\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem !important;\n}\n\n/* Large */\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/* Huge */\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem !important;\n}\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/step.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* First Steps */\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/* Arrow */\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #FFFFFF;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n/* Last Step */\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Title */\n.ui.steps .step .title {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.steps .step > .description {\n  width: 100%;\n}\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n      -ms-flex-positive: 1 0 auto;\n          flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -ms-flex-item-align: middle;\n      align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n.ui.ordered.steps .step > * {\n  display: block;\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  overflow: visible;\n}\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n      -ms-flex-pack: start;\n          justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-right: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Arrow */\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n.ui.vertical.steps .step:last-child:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n\n/* Mobile (Default) */\n@media only screen and (max-width: 767px) {\n  .ui.steps:not(.unstackable) {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.steps:not(.unstackable) .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui.steps:not(.unstackable) .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui.steps:not(.unstackable) .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui.steps:not(.unstackable) .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui.steps:not(.unstackable) .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui.steps:not(.unstackable) .step > .icon,\n  .ui.ordered.steps:not(.unstackable) .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Link Hover */\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #F9FAFB;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n.ui.steps .step.active {\n  cursor: auto;\n  background: #F3F4F5;\n}\n.ui.steps .step.active:after {\n  background: #F3F4F5;\n}\n.ui.steps .step.active .title {\n  color: #4183C4;\n}\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n.ui.steps .step:after {\n  display: block;\n}\n.ui.steps .active.step:after {\n  display: block;\n}\n.ui.steps .step:last-child:after {\n  display: none;\n}\n.ui.steps .active.step:last-child:after {\n  display: none;\n}\n\n/* Active Hover */\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21BA45;\n}\n\n/* Disabled */\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #FFFFFF;\n  pointer-events: none;\n}\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.steps .disabled.step:after {\n  background: #FFFFFF;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n   Stackable\n---------------*/\n\n\n/* Tablet Or Below */\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  \n/* Steps */\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n\n/* Fluid */\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Top */\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px 0;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.bottom.attached.steps {\n  margin: 0 -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap;\n}\n.ui.one.steps > .step {\n  width: 100%;\n}\n.ui.two.steps > .step {\n  width: 50%;\n}\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n.ui.four.steps > .step {\n  width: 25%;\n}\n.ui.five.steps > .step {\n  width: 20%;\n}\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: 0.85714286rem;\n}\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: 0.92857143rem;\n}\n.ui.steps .step,\n.ui.step {\n  font-size: 1rem;\n}\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: 1.14285714rem;\n}\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: 1.28571429rem;\n}\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: 1.42857143rem;\n}\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff');\n}\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  \n/* '' */\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/sticky.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Bound */\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/sticky.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          if(settings.container) {\n            $container = $(settings.container);\n          }\n          else {\n            $container = $module.offsetParent();\n          }\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits          : ( (element.height + settings.offset) <= scrollContext.height),\n              sameHeight    : (element.height == context.height),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          minimumSize: function() {\n            $container\n              .css('min-height', '')\n            ;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            sameHeight     = cache.sameHeight,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n          if(elementVisible && !sameHeight) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.minimumSize();\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n  container      : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  // will only set container height if difference between context and container is larger than this number\n  jitter         : 5,\n\n  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)\n  setSize        : true,\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/tab.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/tab.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\n              $tab\n                .empty()\n                .append($(html).clone(true))\n              ;\n            }\n            else {\n              if(evaluateScripts) {\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n                $tab.html(html);\n              }\n              else {\n                module.debug('Updating HTML', tabPath, html);\n                tab.innerHTML = html;\n              }\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n\n                  if(settings.loadOnce) {\n                    module.cache.add(fullTabPath, true);\n                  }\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\n                    setTimeout(function() {\n                      var\n                        $clone = $tab.children().clone(true)\n                      ;\n                      $clone = $clone.not('script');\n                      module.cache.add(fullTabPath, $clone);\n                    }, 0);\n                  }\n                  else {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(!settings.loadOnce) {\n                if(settings.evaluateScripts == 'once') {\n                  module.update.content(tabPath, cachedContent, false);\n                }\n                else {\n                  module.update.content(tabPath, cachedContent);\n                }\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/table.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Table\n*******************************/\n\n\n/* Prototype */\n.ui.table {\n  width: 100%;\n  background: #FFFFFF;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n.ui.table:first-child {\n  margin-top: 0em;\n}\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Parts\n*******************************/\n\n\n/* Table Content */\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n.ui.table thead {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.table thead th {\n  cursor: auto;\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.78571429em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n.ui.table tfoot {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429em 0.78571429em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n.ui.table td {\n  padding: 0.78571429em 0.78571429em;\n  text-align: inherit;\n}\n\n/* Icons */\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n.ui.table.segment {\n  padding: 0em;\n}\n.ui.table.segment:after {\n  display: none;\n}\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n            box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n  \n/* Definition Table */\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* UI Image */\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: -1px -1px 0px 1px #FFFFFF;\n          box-shadow: -1px -1px 0px 1px #FFFFFF;\n}\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  -webkit-box-shadow: 1px 1px 0px 1px #FFFFFF;\n          box-shadow: 1px 1px 0px 1px #FFFFFF;\n}\n\n/* Remove Border */\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px -1px 0px 1px #FFFFFF;\n          box-shadow: 0px -1px 0px 1px #FFFFFF;\n}\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px 1px 0px 1px #FFFFFF;\n          box-shadow: 0px 1px 0px 1px #FFFFFF;\n}\n\n/* Highlight Defining Column */\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  text-transform: '';\n  -webkit-box-shadow: '';\n          box-shadow: '';\n  text-align: '';\n  font-size: 1em;\n  padding-left: '';\n  padding-right: '';\n}\n\n/* Fix 2nd Column */\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  -webkit-box-shadow: 0px 0px 0px #A3C293 inset;\n          box-shadow: 0px 0px 0px #A3C293 inset;\n}\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #FCFFF5 !important;\n  color: #2C662D !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n          box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n          box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.error,\n.ui.table td.error {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  -webkit-box-shadow: 0px 0px 0px #C9BA9B inset;\n          box-shadow: 0px 0px 0px #C9BA9B inset;\n}\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #FFFAF3 !important;\n  color: #573A08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  -webkit-box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n          box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n.ui.table tr.active,\n.ui.table td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n            box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  \n/* Definition Table */\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Selectable Cell Link */\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: 0.78571429em 0.78571429em;\n}\n\n/* Other States */\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1em;\n  -webkit-box-shadow: none, none;\n          box-shadow: none, none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n\n/* Table Striping */\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/* Allow striped active hover */\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: #EFEFEF !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.table {\n  border-top: 0.2em solid #DB2828;\n}\n.ui.inverted.red.table {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.table {\n  border-top: 0.2em solid #F2711C;\n}\n.ui.inverted.orange.table {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.table {\n  border-top: 0.2em solid #FBBD08;\n}\n.ui.inverted.yellow.table {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.table {\n  border-top: 0.2em solid #B5CC18;\n}\n.ui.inverted.olive.table {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.table {\n  border-top: 0.2em solid #21BA45;\n}\n.ui.inverted.green.table {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.table {\n  border-top: 0.2em solid #00B5AD;\n}\n.ui.inverted.teal.table {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.table {\n  border-top: 0.2em solid #2185D0;\n}\n.ui.inverted.blue.table {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.table {\n  border-top: 0.2em solid #6435C9;\n}\n.ui.inverted.violet.table {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.table {\n  border-top: 0.2em solid #A333C8;\n}\n.ui.inverted.purple.table {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.table {\n  border-top: 0.2em solid #E03997;\n}\n.ui.inverted.pink.table {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.table {\n  border-top: 0.2em solid #A5673F;\n}\n.ui.inverted.brown.table {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.table {\n  border-top: 0.2em solid #1B1C1D;\n}\n.ui.inverted.black.table {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n\n/* Grid Based */\n.ui.one.column.table td {\n  width: 100%;\n}\n.ui.two.column.table td {\n  width: 50%;\n}\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n.ui.four.column.table td {\n  width: 25%;\n}\n.ui.five.column.table td {\n  width: 20%;\n}\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n.ui.ten.column.table td {\n  width: 10%;\n}\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Text Color */\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #FFFFFF;\n}\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n.ui.basic.table td {\n  background: transparent;\n}\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n\n/* Small */\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/transition.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n          animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n          animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n          animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Animating */\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  \n/*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n/* Disabled */\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n          animation-play-state: paused;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n}\n\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n}\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n          animation-name: browseIn;\n}\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n          animation-name: browseOutLeft;\n}\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n          animation-name: browseOutRight;\n}\n\n/* In */\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n          animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n          animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n          animation-name: dropIn;\n}\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n          animation-name: dropOut;\n}\n\n/* Drop */\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n          animation-name: fadeIn;\n}\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n          animation-name: fadeInUp;\n}\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n          animation-name: fadeInDown;\n}\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n          animation-name: fadeInLeft;\n}\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n          animation-name: fadeInRight;\n}\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n          animation-name: fadeOut;\n}\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n          animation-name: fadeOutUp;\n}\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n          animation-name: fadeOutDown;\n}\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n          animation-name: fadeOutLeft;\n}\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n          animation-name: fadeOutRight;\n}\n\n/* In */\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n\n/* Out */\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n          animation-duration: 600ms;\n}\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n          animation-name: horizontalFlipIn;\n}\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n          animation-name: horizontalFlipOut;\n}\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n          animation-name: verticalFlipIn;\n}\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n          animation-name: verticalFlipOut;\n}\n\n/* In */\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n          animation-name: scaleIn;\n}\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n          animation-name: scaleOut;\n}\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n\n/* Inward */\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n          animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n          transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n          animation-name: flyIn;\n}\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n          animation-name: flyInUp;\n}\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n          animation-name: flyInDown;\n}\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n          animation-name: flyInLeft;\n}\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n          animation-name: flyInRight;\n}\n\n/* Outward */\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n          animation-name: flyOut;\n}\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n          animation-name: flyOutUp;\n}\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n          animation-name: flyOutDown;\n}\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n          animation-name: flyOutLeft;\n}\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n          animation-name: flyOutRight;\n}\n\n/* In */\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n\n/* Out */\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n          animation-duration: 800ms;\n}\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n\n/*******************************\n       Static Animations\n*******************************/\n\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: flash;\n          animation-name: flash;\n}\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: shake;\n          animation-name: shake;\n}\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n          animation-name: bounce;\n}\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: tada;\n          animation-name: tada;\n}\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n          animation-name: pulse;\n}\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n          animation-name: jiggle;\n}\n\n/* Flash */\n@-webkit-keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n@keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n@-webkit-keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n@keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n@-webkit-keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n@keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "public/assets/css/components/transition.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function(shouldDetermine) {\n            shouldDetermine = (shouldDetermine !== undefined)\n              ? shouldDetermine\n              : true\n            ;\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if(shouldDetermine && $module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              displayType       = module.get.displayType(false),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              if(!displayType) {\n                displayType = $clone\n                  .attr('class', elementClass)\n                  .removeAttr('style')\n                  .removeClass(className.hidden)\n                  .removeClass(className.visible)\n                  .show()\n                  .css('display')\n                ;\n                module.verbose('Determining final display state', displayType);\n                module.save.displayType(displayType);\n              }\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/components/visibility.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined) {\n                if($module.hasClass(className.visible)) {\n                  module.debug('Transition already occurred on this image, skipping animation');\n                  return;\n                }\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-x')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // compensate for scroll in context\n            if(module.is.verticallyScrollableContext()) {\n              element.offset.top += $context.scrollTop() - $context.offset().top;\n            }\n            if(module.is.horizontallyScrollableContext()) {\n              element.offset.left += $context.scrollLeft - $context.offset().left;\n            }\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.topVisible       = (screen.bottom >= element.top) && !element.bottomPassed;\n            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.topPassed;\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder',\n    visible     : 'visible'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "public/assets/css/editor.css",
    "content": ".CodeMirror{color:#000}.CodeMirror-lines{padding:4px 0}.CodeMirror pre{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-animate-fat-cursor{width:auto;border:0;-webkit-animation:blink 1.06s steps(1) infinite;animation:blink 1.06s steps(1) infinite;background-color:#7e7}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-ruler{border-left:1px solid #ccc;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta,.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-invalidchar,.cm-s-default .cm-error{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0f0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#f22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-30px;margin-right:-30px;padding-bottom:30px;height:100%;outline:0;position:relative}.CodeMirror-sizer{position:relative;border-right:30px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-30px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre{border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:16px;margin:0;white-space:pre;word-wrap:normal;line-height:30px;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:none;font-variant-ligatures:none}.CodeMirror-wrap pre{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;overflow:auto}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-webkit-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}.CodeMirror-focused div.CodeMirror-cursors,div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.CodeMirror-focused .CodeMirror-selected,.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background:#ffa;background:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:\"\"}span.CodeMirror-selectedtext{background:0 0}.CodeMirror{height:auto;border:1px solid #ddd;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:1}.CodeMirror,.CodeMirror-scroll{min-height:300px}.CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:9}.CodeMirror-sided{width:50%!important}.editor-toolbar{position:relative;opacity:.6;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:0 10px;border-top:1px solid #bbb;border-left:1px solid #bbb;border-right:1px solid #bbb;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar:after,.editor-toolbar:before{display:block;content:\" \";height:1px}.editor-toolbar:before{margin-bottom:8px}.editor-toolbar:after{margin-top:8px}.editor-toolbar:hover,.editor-wrapper input.title:focus,.editor-wrapper input.title:hover{opacity:.8}.editor-toolbar.fullscreen{width:100%;height:50px;overflow-x:auto;overflow-y:hidden;white-space:nowrap;padding-top:10px;padding-bottom:10px;-webkit-box-sizing:border-box;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen:before{width:20px;height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0,#fff),to(hsla(0,0%,100%,0)));background:linear-gradient(90deg,#fff 0,hsla(0,0%,100%,0));position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen:after{width:20px;height:50px;background:-webkit-gradient(linear,left top,right top,color-stop(0,hsla(0,0%,100%,0)),to(#fff));background:linear-gradient(90deg,hsla(0,0%,100%,0) 0,#fff);position:fixed;top:0;right:0;margin:0;padding:0}.editor-toolbar a{display:inline-block;text-align:center;text-decoration:none!important;color:#2c3e50!important;width:30px;height:30px;margin:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar a.active,.editor-toolbar a:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar a:before{line-height:30px}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar a.fa-header-x:after{font-family:Arial,Helvetica Neue,Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar a.fa-header-1:after{content:\"1\"}.editor-toolbar a.fa-header-2:after{content:\"2\"}.editor-toolbar a.fa-header-3:after{content:\"3\"}.editor-toolbar a.fa-header-bigger:after{content:\"\\25B2\"}.editor-toolbar a.fa-header-smaller:after{content:\"\\25BC\"}.editor-toolbar.disabled-for-preview a:not(.no-disable){pointer-events:none;background:#fff;border-color:transparent;text-shadow:inherit}@media only screen and (max-width:700px){.editor-toolbar a.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-preview,.editor-preview-side{padding:30px;background:#fff;overflow:auto;display:none;-webkit-box-sizing:border-box;box-sizing:border-box}.editor-statusbar .lines:before{content:\"lines: \"}.editor-statusbar .words:before{content:\"words: \"}.editor-statusbar .characters:before{content:\"characters: \"}.editor-preview{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;border:1px solid #ddd}.editor-preview-active,.editor-preview-active-side{display:block}.editor-preview-side>p,.editor-preview>p{margin-top:0}.editor-preview-side pre,.editor-preview pre{background:#3a3a3a;margin-bottom:10px}.editor-preview-side table td,.editor-preview-side table th,.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.CodeMirror .CodeMirror-code .cm-tag{color:#63a35c}.CodeMirror .CodeMirror-code .cm-attribute{color:#795da3}.CodeMirror .CodeMirror-code .cm-string{color:#183691}.CodeMirror .CodeMirror-selected{background:#d9d9d9}.CodeMirror .CodeMirror-code .cm-header-1{font-size:110%;font-weight:700;color:#0aa4d8;line-height:200%}.CodeMirror .CodeMirror-code .cm-header-2{line-height:160%;font-size:110%;font-weight:700;color:#0aa4d8}.CodeMirror .CodeMirror-code .cm-header-3{font-size:105%;font-weight:700;color:#0aa4d8;line-height:125%}.CodeMirror .CodeMirror-code .cm-header-4{font-size:102%;font-weight:700;color:#0aa4d8;line-height:110%}.CodeMirror .CodeMirror-code .cm-header-5,.CodeMirror .CodeMirror-code .cm-header-6{font-size:100%;font-weight:700;color:#0aa4d8;line-height:110%}.CodeMirror .CodeMirror-code .cm-comment{background:none;border-radius:2px;color:#0aa4d8}.CodeMirror .CodeMirror-code .cm-link{color:#7f8c8d}.CodeMirror .CodeMirror-code .cm-url{color:#aab2b3}.CodeMirror .CodeMirror-code .cm-strikethrough{text-decoration:line-through}.CodeMirror .CodeMirror-placeholder{opacity:.5}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)}"
  },
  {
    "path": "public/assets/dashboard/css/fileinput.css",
    "content": "/*!\n * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015\n * @package bootstrap-fileinput\n * @version 4.1.9\n *\n * File input styling for Bootstrap 3.0\n * Built for Yii Framework 2.0\n * Author: Kartik Visweswaran\n * Year: 2015\n * For more Yii related demos visit http://demos.krajee.com\n */\n.file-input {\n    overflow-x: auto;\n}\n\n.file-loading {\n    top: 0;\n    right: 0;\n    width: 25px;\n    height: 25px;\n    font-size: 999px;\n    text-align: right;\n    color: #fff;\n    background: transparent url('../img/loading.gif') top left no-repeat;\n    border: none;\n}\n\n.btn-file {\n    position: relative;\n    overflow: hidden;\n}\n\n.btn-file input[type=file] {\n    position: absolute;\n    top: 0;\n    right: 0;\n    min-width: 100%;\n    min-height: 100%;\n    text-align: left;\n    opacity: 0;\n    filter: alpha(opacity=0);\n    opacity: 0;\n    background: none repeat scroll 0 0 transparent;\n    cursor: inherit;\n    display: block;\n}\n\n.file-caption .glyphicon {\n    display: inline-block;\n    min-width: 18px;\n    margin-top: 2px;\n}\n\n.file-caption-name {\n    display: inline-block;\n    overflow: hidden;\n    max-height: 20px;\n    padding-right: 10px;\n    word-break: break-all;\n}\n\n.file-caption-ellipsis {\n    position: absolute;\n    right: 10px;\n    margin-top: -6px;\n    font-size: 1.2em;\n    display: none;\n    font-weight: bold;\n    cursor: default;\n}\n\n.kv-has-ellipsis .file-caption-ellipsis {\n    display: inline;\n}\n\n.kv-has-ellipsis {\n    padding-right: 17px;\n}\n\n.kv-search-container .kv-search-clear {\n    position: absolute;\n    padding: 10px;\n    right: 0px;\n}\n\n.file-error-message {\n    background-color: #f2dede;\n    color: #a94442;\n    text-align: center;\n    border-radius: 5px;\n    padding: 5px;\n}\n\n.file-error-message pre, .file-error-message ul {\n    margin: 5px 0;\n    text-align: left;\n}\n\n.file-caption-disabled {\n    background-color: #EEEEEE;\n    cursor: not-allowed;\n    opacity: 1;\n}\n\n.file-input .btn[disabled], .file-input .btn .disabled {\n    cursor: not-allowed;\n}\n\n.file-preview {\n    border-radius: 5px;\n    border: 1px solid #ddd;\n    padding: 5px;\n\n    margin-bottom: 5px;\n}\n\n.file-preview-frame {\n    display: table;\n    margin: 8px;\n    height: 160px;\n    border: 1px solid #ddd;\n    box-shadow: 1px 1px 5px 0px #a2958a;\n    padding: 6px;\n    float: left;\n    text-align: center;\n    vertical-align: middle;\n}\n\n.file-preview-frame:hover {\n    box-shadow: 3px 3px 5px 0px #333;\n}\n\n.file-preview-image {\n    height: 160px;\n    vertical-align: text-center;\n}\n\n.file-preview-text {\n    width: 160px;\n    color: #428bca;\n    font-size: 11px;\n    text-align: center;\n}\n\n.file-preview-other {\n    padding-top: 48px;\n    text-align: center;\n}\n\n.file-preview-other i {\n    font-size: 2.4em;\n}\n\n.file-other-error {\n    width: 100%;\n    padding-top: 30px;\n    text-align: right\n}\n\n.file-input-new .file-preview, .file-input-new .close, .file-input-new .glyphicon-file,\n.file-input-new .fileinput-remove-button, .file-input-new .fileinput-upload-button,\n.file-input-ajax-new .fileinput-remove-button, .file-input-ajax-new .fileinput-upload-button {\n    display: none;\n}\n\n.loading {\n    background: transparent url('../img/loading.gif') no-repeat scroll center center content-box !important;\n}\n\n.wrap-indicator {\n    font-weight: bold;\n    color: #245269;\n    cursor: pointer;\n}\n\n.file-actions {\n    text-align: left;\n}\n\n.file-footer-buttons {\n    float: right;\n}\n\n.file-thumbnail-footer .file-caption-name {\n    padding-top: 4px;\n    font-size: 11px;\n    color: #777;\n}\n\n.file-upload-indicator {\n    padding-top: 2px;\n    cursor: default;\n}\n\n.file-upload-indicator:hover {\n    font-size: 1.2em;\n    font-weight: bold;\n    padding-top: 0;\n}\n\n.file-drop-zone {\n    border: 1px dashed #aaa;\n    border-radius: 4px;\n    height: 100%;\n    text-align: center;\n    vertical-align: middle;\n    margin: 12px 15px 12px 12px;\n    padding: 5px;\n}\n\n.file-drop-zone-title {\n    color: #aaa;\n    font-size: 20px;\n    padding: 60px 10px;\n}\n\n.highlighted {\n    border: 2px dashed #999 !important;\n    background-color: #f0f0f0;\n}\n\n.file-uploading {\n    background-image: url('../img/loading-sm.gif');\n    background-position: center bottom 10px;\n    background-repeat: no-repeat;\n    opacity: 0.6;\n}\n\n.file-icon-large {\n    font-size: 1.2em;\n}"
  },
  {
    "path": "public/assets/dashboard/css/plugins/awesome-bootstrap-checkbox/awesome-bootstrap-checkbox.css",
    "content": ".checkbox {\n  padding-left: 20px;\n}\n.checkbox label {\n  display: inline-block;\n  vertical-align: middle;\n  position: relative;\n  padding-left: 5px;\n}\n.checkbox label::before {\n  content: \"\";\n  display: inline-block;\n  position: absolute;\n  width: 17px;\n  height: 17px;\n  left: 0;\n  margin-left: -20px;\n  border: 1px solid #cccccc;\n  border-radius: 3px;\n  background-color: #fff;\n  -webkit-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n  -o-transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n  transition: border 0.15s ease-in-out, color 0.15s ease-in-out;\n}\n.checkbox label::after {\n  display: inline-block;\n  position: absolute;\n  width: 16px;\n  height: 16px;\n  left: 0;\n  top: 0;\n  margin-left: -20px;\n  padding-left: 3px;\n  padding-top: 1px;\n  font-size: 11px;\n  color: #555555;\n}\n.checkbox input[type=\"checkbox\"],\n.checkbox input[type=\"radio\"] {\n  opacity: 0;\n  z-index: 1;\n}\n.checkbox input[type=\"checkbox\"]:focus + label::before,\n.checkbox input[type=\"radio\"]:focus + label::before {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.checkbox input[type=\"checkbox\"]:checked + label::after,\n.checkbox input[type=\"radio\"]:checked + label::after {\n  font-family: \"FontAwesome\";\n  content: \"\\f00c\";\n}\n.checkbox input[type=\"checkbox\"]:disabled + label,\n.checkbox input[type=\"radio\"]:disabled + label {\n  opacity: 0.65;\n}\n.checkbox input[type=\"checkbox\"]:disabled + label::before,\n.checkbox input[type=\"radio\"]:disabled + label::before {\n  background-color: #eeeeee;\n  cursor: not-allowed;\n}\n.checkbox.checkbox-circle label::before {\n  border-radius: 50%;\n}\n.checkbox.checkbox-inline {\n  margin-top: 0;\n}\n\n.checkbox-primary input[type=\"checkbox\"]:checked + label::before,\n.checkbox-primary input[type=\"radio\"]:checked + label::before {\n  background-color: #337ab7;\n  border-color: #337ab7;\n}\n.checkbox-primary input[type=\"checkbox\"]:checked + label::after,\n.checkbox-primary input[type=\"radio\"]:checked + label::after {\n  color: #fff;\n}\n\n.checkbox-danger input[type=\"checkbox\"]:checked + label::before,\n.checkbox-danger input[type=\"radio\"]:checked + label::before {\n  background-color: #d9534f;\n  border-color: #d9534f;\n}\n.checkbox-danger input[type=\"checkbox\"]:checked + label::after,\n.checkbox-danger input[type=\"radio\"]:checked + label::after {\n  color: #fff;\n}\n\n.checkbox-info input[type=\"checkbox\"]:checked + label::before,\n.checkbox-info input[type=\"radio\"]:checked + label::before {\n  background-color: #5bc0de;\n  border-color: #5bc0de;\n}\n.checkbox-info input[type=\"checkbox\"]:checked + label::after,\n.checkbox-info input[type=\"radio\"]:checked + label::after {\n  color: #fff;\n}\n\n.checkbox-warning input[type=\"checkbox\"]:checked + label::before,\n.checkbox-warning input[type=\"radio\"]:checked + label::before {\n  background-color: #f0ad4e;\n  border-color: #f0ad4e;\n}\n.checkbox-warning input[type=\"checkbox\"]:checked + label::after,\n.checkbox-warning input[type=\"radio\"]:checked + label::after {\n  color: #fff;\n}\n\n.checkbox-success input[type=\"checkbox\"]:checked + label::before,\n.checkbox-success input[type=\"radio\"]:checked + label::before {\n  background-color: #5cb85c;\n  border-color: #5cb85c;\n}\n.checkbox-success input[type=\"checkbox\"]:checked + label::after,\n.checkbox-success input[type=\"radio\"]:checked + label::after {\n  color: #fff;\n}\n\n.radio {\n  padding-left: 20px;\n}\n.radio label {\n  display: inline-block;\n  vertical-align: middle;\n  position: relative;\n  padding-left: 5px;\n}\n.radio label::before {\n  content: \"\";\n  display: inline-block;\n  position: absolute;\n  width: 17px;\n  height: 17px;\n  left: 0;\n  margin-left: -20px;\n  border: 1px solid #cccccc;\n  border-radius: 50%;\n  background-color: #fff;\n  -webkit-transition: border 0.15s ease-in-out;\n  -o-transition: border 0.15s ease-in-out;\n  transition: border 0.15s ease-in-out;\n}\n.radio label::after {\n  display: inline-block;\n  position: absolute;\n  content: \" \";\n  width: 11px;\n  height: 11px;\n  left: 3px;\n  top: 3px;\n  margin-left: -20px;\n  border-radius: 50%;\n  background-color: #555555;\n  -webkit-transform: scale(0, 0);\n  -ms-transform: scale(0, 0);\n  -o-transform: scale(0, 0);\n  transform: scale(0, 0);\n  -webkit-transition: -webkit-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n  -moz-transition: -moz-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n  -o-transition: -o-transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n  transition: transform 0.1s cubic-bezier(0.8, -0.33, 0.2, 1.33);\n}\n.radio input[type=\"radio\"] {\n  opacity: 0;\n  z-index: 1;\n}\n.radio input[type=\"radio\"]:focus + label::before {\n  outline: thin dotted;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.radio input[type=\"radio\"]:checked + label::after {\n  -webkit-transform: scale(1, 1);\n  -ms-transform: scale(1, 1);\n  -o-transform: scale(1, 1);\n  transform: scale(1, 1);\n}\n.radio input[type=\"radio\"]:disabled + label {\n  opacity: 0.65;\n}\n.radio input[type=\"radio\"]:disabled + label::before {\n  cursor: not-allowed;\n}\n.radio.radio-inline {\n  margin-top: 0;\n}\n\n.radio-primary input[type=\"radio\"] + label::after {\n  background-color: #337ab7;\n}\n.radio-primary input[type=\"radio\"]:checked + label::before {\n  border-color: #337ab7;\n}\n.radio-primary input[type=\"radio\"]:checked + label::after {\n  background-color: #337ab7;\n}\n\n.radio-danger input[type=\"radio\"] + label::after {\n  background-color: #d9534f;\n}\n.radio-danger input[type=\"radio\"]:checked + label::before {\n  border-color: #d9534f;\n}\n.radio-danger input[type=\"radio\"]:checked + label::after {\n  background-color: #d9534f;\n}\n\n.radio-info input[type=\"radio\"] + label::after {\n  background-color: #5bc0de;\n}\n.radio-info input[type=\"radio\"]:checked + label::before {\n  border-color: #5bc0de;\n}\n.radio-info input[type=\"radio\"]:checked + label::after {\n  background-color: #5bc0de;\n}\n\n.radio-warning input[type=\"radio\"] + label::after {\n  background-color: #f0ad4e;\n}\n.radio-warning input[type=\"radio\"]:checked + label::before {\n  border-color: #f0ad4e;\n}\n.radio-warning input[type=\"radio\"]:checked + label::after {\n  background-color: #f0ad4e;\n}\n\n.radio-success input[type=\"radio\"] + label::after {\n  background-color: #5cb85c;\n}\n.radio-success input[type=\"radio\"]:checked + label::before {\n  border-color: #5cb85c;\n}\n.radio-success input[type=\"radio\"]:checked + label::after {\n  background-color: #5cb85c;\n}\n\ninput[type=\"checkbox\"].styled:checked + label:after,\ninput[type=\"radio\"].styled:checked + label:after {\n  font-family: 'FontAwesome';\n  content: \"\\f00c\";\n}\ninput[type=\"checkbox\"] .styled:checked + label::before,\ninput[type=\"radio\"] .styled:checked + label::before {\n  color: #fff;\n}\ninput[type=\"checkbox\"] .styled:checked + label::after,\ninput[type=\"radio\"] .styled:checked + label::after {\n  color: #fff;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/chosen/chosen.css",
    "content": "/*!\nChosen, a Select Box Enhancer for jQuery and Prototype\nby Patrick Filler for Harvest, http://getharvest.com\n\nVersion 1.1.0\nFull source at https://github.com/harvesthq/chosen\nCopyright (c) 2011 Harvest http://getharvest.com\n\nMIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md\nThis file is generated by `grunt build`, do not edit it by hand.\n*/\n\n/* @group Base */\n.chosen-container {\n    position: relative;\n    display: inline-block;\n    vertical-align: middle;\n    font-size: 13px;\n    zoom: 1;\n    *display: inline;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none;\n}\n.chosen-container .chosen-drop {\n    position: absolute;\n    top: 100%;\n    left: -9999px;\n    z-index: 1010;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    width: 100%;\n    border: 1px solid #aaa;\n    border-top: 0;\n    background: #fff;\n    box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);\n}\n.chosen-container.chosen-with-drop .chosen-drop {\n    left: 0;\n}\n.chosen-container a {\n    cursor: pointer;\n}\n\n/* @end */\n/* @group Single Chosen */\n.chosen-container-single .chosen-single {\n    position: relative;\n    display: block;\n    overflow: hidden;\n    padding: 0 0 0 8px;\n    height: 23px;\n    border: 1px solid #aaa;\n    border-radius: 5px;\n    background-color: #fff;\n    background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));\n    background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n    background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n    background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n    background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n    background-clip: padding-box;\n    box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);\n    color: #444;\n    text-decoration: none;\n    white-space: nowrap;\n    line-height: 24px;\n}\n.chosen-container-single .chosen-default {\n    color: #999;\n}\n.chosen-container-single .chosen-single span {\n    display: block;\n    overflow: hidden;\n    margin-right: 26px;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n}\n.chosen-container-single .chosen-single-with-deselect span {\n    margin-right: 38px;\n}\n.chosen-container-single .chosen-single abbr {\n    position: absolute;\n    top: 6px;\n    right: 26px;\n    display: block;\n    width: 12px;\n    height: 12px;\n    background: url('chosen-sprite.png') -42px 1px no-repeat;\n    font-size: 1px;\n}\n.chosen-container-single .chosen-single abbr:hover {\n    background-position: -42px -10px;\n}\n.chosen-container-single.chosen-disabled .chosen-single abbr:hover {\n    background-position: -42px -10px;\n}\n.chosen-container-single .chosen-single div {\n    position: absolute;\n    top: 0;\n    right: 0;\n    display: block;\n    width: 18px;\n    height: 100%;\n}\n.chosen-container-single .chosen-single div b {\n    display: block;\n    width: 100%;\n    height: 100%;\n    background: url('chosen-sprite.png') no-repeat 0px 7px;\n}\n.chosen-container-single .chosen-search {\n    position: relative;\n    z-index: 1010;\n    margin: 0;\n    padding: 3px 4px;\n    white-space: nowrap;\n}\n.chosen-container-single .chosen-search input[type=\"text\"] {\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n    margin: 1px 0;\n    padding: 4px 20px 4px 5px;\n    width: 100%;\n    height: auto;\n    outline: 0;\n    border: 1px solid #aaa;\n    background: white url('chosen-sprite.png') no-repeat 100% -20px;\n    background: url('chosen-sprite.png') no-repeat 100% -20px;\n    font-size: 1em;\n    font-family: sans-serif;\n    line-height: normal;\n    border-radius: 0;\n}\n.chosen-container-single .chosen-drop {\n    margin-top: -1px;\n    border-radius: 0 0 4px 4px;\n    background-clip: padding-box;\n}\n.chosen-container-single.chosen-container-single-nosearch .chosen-search {\n    position: absolute;\n    left: -9999px;\n}\n\n/* @end */\n/* @group Results */\n.chosen-container .chosen-results {\n    position: relative;\n    overflow-x: hidden;\n    overflow-y: auto;\n    margin: 0 4px 4px 0;\n    padding: 0 0 0 4px;\n    max-height: 240px;\n    -webkit-overflow-scrolling: touch;\n}\n.chosen-container .chosen-results li {\n    display: none;\n    margin: 0;\n    padding: 5px 6px;\n    list-style: none;\n    line-height: 15px;\n    -webkit-touch-callout: none;\n}\n.chosen-container .chosen-results li.active-result {\n    display: list-item;\n    cursor: pointer;\n}\n.chosen-container .chosen-results li.disabled-result {\n    display: list-item;\n    color: #ccc;\n    cursor: default;\n}\n.chosen-container .chosen-results li.highlighted {\n    background-color: #3875d7;\n    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));\n    background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);\n    background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);\n    background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);\n    background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);\n    color: #fff;\n}\n.chosen-container .chosen-results li.no-results {\n    display: list-item;\n    background: #f4f4f4;\n}\n.chosen-container .chosen-results li.group-result {\n    display: list-item;\n    font-weight: bold;\n    cursor: default;\n}\n.chosen-container .chosen-results li.group-option {\n    padding-left: 15px;\n}\n.chosen-container .chosen-results li em {\n    font-style: normal;\n    text-decoration: underline;\n}\n\n/* @end */\n/* @group Multi Chosen */\n.chosen-container-multi .chosen-choices {\n    -moz-box-sizing: border-box;\n    background-color: #FFFFFF;\n    border: 1px solid #CBD5DD;\n    border-radius: 2px;\n    cursor: text;\n    height: auto !important;\n    margin: 0;\n    min-height: 30px;\n    overflow: hidden;\n    padding: 2px;\n    position: relative;\n    width: 100%;\n}\n.chosen-container-multi .chosen-choices li {\n    float: left;\n    list-style: none;\n}\n.chosen-container-multi .chosen-choices li.search-field {\n    margin: 0;\n    padding: 0;\n    white-space: nowrap;\n}\n.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\n    margin: 1px 0;\n    padding: 5px;\n    height: 25px;\n    outline: 0;\n    border: 0 !important;\n    background: transparent !important;\n    box-shadow: none;\n    color: #666;\n    font-size: 100%;\n    font-family: sans-serif;\n    line-height: normal;\n    border-radius: 0;\n}\n.chosen-container-multi .chosen-choices li.search-field .default {\n    color: #999;\n}\n.chosen-container-multi .chosen-choices li.search-choice {\n    position: relative;\n    margin: 3px 0 3px 5px;\n    padding: 3px 20px 3px 5px;\n    border: 1px solid #aaa;\n    border-radius: 3px;\n    background-color: #e4e4e4;\n    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));\n    background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-clip: padding-box;\n    box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n    color: #333;\n    line-height: 13px;\n    cursor: default;\n}\n.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {\n    position: absolute;\n    top: 4px;\n    right: 3px;\n    display: block;\n    width: 12px;\n    height: 12px;\n    background: url('chosen-sprite.png') -42px 1px no-repeat;\n    font-size: 1px;\n}\n.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {\n    background-position: -42px -10px;\n}\n.chosen-container-multi .chosen-choices li.search-choice-disabled {\n    padding-right: 5px;\n    border: 1px solid #ccc;\n    background-color: #e4e4e4;\n    background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));\n    background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n    color: #666;\n}\n.chosen-container-multi .chosen-choices li.search-choice-focus {\n    background: #d4d4d4;\n}\n.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {\n    background-position: -42px -10px;\n}\n.chosen-container-multi .chosen-results {\n    margin: 0;\n    padding: 0;\n}\n.chosen-container-multi .chosen-drop .result-selected {\n    display: list-item;\n    color: #ccc;\n    cursor: default;\n}\n\n/* @end */\n/* @group Active  */\n.chosen-container-active .chosen-single {\n    border: 1px solid #5897fb;\n    box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);\n}\n.chosen-container-active.chosen-with-drop .chosen-single {\n    border: 1px solid #aaa;\n    -moz-border-radius-bottomright: 0;\n    border-bottom-right-radius: 0;\n    -moz-border-radius-bottomleft: 0;\n    border-bottom-left-radius: 0;\n}\n.chosen-container-active.chosen-with-drop .chosen-single div {\n    border-left: none;\n    background: transparent;\n}\n.chosen-container-active.chosen-with-drop .chosen-single div b {\n    background-position: -18px 7px;\n}\n.chosen-container-active .chosen-choices {\n    border: 1px solid #5897fb;\n    box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);\n}\n.chosen-container-active .chosen-choices li.search-field input[type=\"text\"] {\n    color: #111 !important;\n}\n\n/* @end */\n/* @group Disabled Support */\n.chosen-disabled {\n    opacity: 0.5 !important;\n    cursor: default;\n}\n.chosen-disabled .chosen-single {\n    cursor: default;\n}\n.chosen-disabled .chosen-choices .search-choice .search-choice-close {\n    cursor: default;\n}\n\n/* @end */\n/* @group Right to Left */\n.chosen-rtl {\n    text-align: right;\n}\n.chosen-rtl .chosen-single {\n    overflow: visible;\n    padding: 0 8px 0 0;\n}\n.chosen-rtl .chosen-single span {\n    margin-right: 0;\n    margin-left: 26px;\n    direction: rtl;\n}\n.chosen-rtl .chosen-single-with-deselect span {\n    margin-left: 38px;\n}\n.chosen-rtl .chosen-single div {\n    right: auto;\n    left: 3px;\n}\n.chosen-rtl .chosen-single abbr {\n    right: auto;\n    left: 26px;\n}\n.chosen-rtl .chosen-choices li {\n    float: right;\n}\n.chosen-rtl .chosen-choices li.search-field input[type=\"text\"] {\n    direction: rtl;\n}\n.chosen-rtl .chosen-choices li.search-choice {\n    margin: 3px 5px 3px 0;\n    padding: 3px 5px 3px 19px;\n}\n.chosen-rtl .chosen-choices li.search-choice .search-choice-close {\n    right: auto;\n    left: 4px;\n}\n.chosen-rtl.chosen-container-single-nosearch .chosen-search,\n.chosen-rtl .chosen-drop {\n    left: 9999px;\n}\n.chosen-rtl.chosen-container-single .chosen-results {\n    margin: 0 0 4px 4px;\n    padding: 0 4px 0 0;\n}\n.chosen-rtl .chosen-results li.group-option {\n    padding-right: 15px;\n    padding-left: 0;\n}\n.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {\n    border-right: none;\n}\n.chosen-rtl .chosen-search input[type=\"text\"] {\n    padding: 4px 5px 4px 20px;\n    background: white url('chosen-sprite.png') no-repeat -30px -20px;\n    background: url('chosen-sprite.png') no-repeat -30px -20px;\n    direction: rtl;\n}\n.chosen-rtl.chosen-container-single .chosen-single div b {\n    background-position: 6px 2px;\n}\n.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {\n    background-position: -12px 2px;\n}\n\n/* @end */\n/* @group Retina compatibility */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {\n    .chosen-rtl .chosen-search input[type=\"text\"],\n    .chosen-container-single .chosen-single abbr,\n    .chosen-container-single .chosen-single div b,\n    .chosen-container-single .chosen-search input[type=\"text\"],\n    .chosen-container-multi .chosen-choices .search-choice .search-choice-close,\n    .chosen-container .chosen-results-scroll-down span,\n    .chosen-container .chosen-results-scroll-up span {\n        background-image: url('chosen-sprite%402x.png') !important;\n        background-size: 52px 37px !important;\n        background-repeat: no-repeat !important;\n    }\n}\n/* @end */\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/clockpicker/clockpicker.css",
    "content": "/*!\n * ClockPicker v{package.version} for Bootstrap (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n */\n\n.clockpicker .input-group-addon {\n\tcursor: pointer;\n}\n.clockpicker-moving {\n\tcursor: move;\n}\n.clockpicker-align-left.popover > .arrow {\n\tleft: 25px;\n}\n.clockpicker-align-top.popover > .arrow {\n\ttop: 17px;\n}\n.clockpicker-align-right.popover > .arrow {\n\tleft: auto;\n\tright: 25px;\n}\n.clockpicker-align-bottom.popover > .arrow {\n\ttop: auto;\n\tbottom: 6px;\n}\n.clockpicker-popover .popover-title {\n\tbackground-color: #fff;\n\tcolor: #999;\n\tfont-size: 24px;\n\tfont-weight: bold;\n\tline-height: 30px;\n\ttext-align: center;\n}\n.clockpicker-popover .popover-title span {\n\tcursor: pointer;\n}\n.clockpicker-popover .popover-content {\n\tbackground-color: #f8f8f8;\n\tpadding: 12px;\n}\n.popover-content:last-child {\n\tborder-bottom-left-radius: 5px;\n\tborder-bottom-right-radius: 5px;\n}\n.clockpicker-plate {\n\tbackground-color: #fff;\n\tborder: 1px solid #ccc;\n\tborder-radius: 50%;\n\twidth: 200px;\n\theight: 200px;\n\toverflow: visible;\n\tposition: relative;\n\t/* Disable text selection highlighting. Thanks to Hermanya */\n\t-webkit-touch-callout: none;\n\t-webkit-user-select: none;\n\t-khtml-user-select: none;\n\t-moz-user-select: none;\n\t-ms-user-select: none;\n\tuser-select: none;\n}\n.clockpicker-canvas,\n.clockpicker-dial {\n\twidth: 200px;\n\theight: 200px;\n\tposition: absolute;\n\tleft: -1px;\n\ttop: -1px;\n}\n.clockpicker-minutes {\n\tvisibility: hidden;\n}\n.clockpicker-tick {\n\tborder-radius: 50%;\n\tcolor: #666;\n\tline-height: 26px;\n\ttext-align: center;\n\twidth: 26px;\n\theight: 26px;\n\tposition: absolute;\n\tcursor: pointer;\n}\n.clockpicker-tick.active,\n.clockpicker-tick:hover {\n\tbackground-color: rgb(192, 229, 247);\n\tbackground-color: rgba(0, 149, 221, .25);\n}\n.clockpicker-button {\n\tbackground-image: none;\n\tbackground-color: #fff;\n\tborder-width: 1px 0 0;\n\tborder-top-left-radius: 0;\n\tborder-top-right-radius: 0;\n\tmargin: 0;\n\tpadding: 10px 0;\n}\n.clockpicker-button:hover {\n\tbackground-image: none;\n\tbackground-color: #ebebeb;\n}\n.clockpicker-button:focus {\n\toutline: none!important;\n}\n.clockpicker-dial {\n\t-webkit-transition: -webkit-transform 350ms, opacity 350ms;\n\t-moz-transition: -moz-transform 350ms, opacity 350ms;\n\t-ms-transition: -ms-transform 350ms, opacity 350ms;\n\t-o-transition: -o-transform 350ms, opacity 350ms;\n\ttransition: transform 350ms, opacity 350ms;\n}\n.clockpicker-dial-out {\n\topacity: 0;\n}\n.clockpicker-hours.clockpicker-dial-out {\n\t-webkit-transform: scale(1.2, 1.2);\n\t-moz-transform: scale(1.2, 1.2);\n\t-ms-transform: scale(1.2, 1.2);\n\t-o-transform: scale(1.2, 1.2);\n\ttransform: scale(1.2, 1.2);\n}\n.clockpicker-minutes.clockpicker-dial-out {\n\t-webkit-transform: scale(.8, .8);\n\t-moz-transform: scale(.8, .8);\n\t-ms-transform: scale(.8, .8);\n\t-o-transform: scale(.8, .8);\n\ttransform: scale(.8, .8);\n}\n.clockpicker-canvas {\n\t-webkit-transition: opacity 175ms;\n\t-moz-transition: opacity 175ms;\n\t-ms-transition: opacity 175ms;\n\t-o-transition: opacity 175ms;\n\ttransition: opacity 175ms;\n}\n.clockpicker-canvas-out {\n\topacity: 0.25;\n}\n.clockpicker-canvas-bearing,\n.clockpicker-canvas-fg {\n\tstroke: none;\n\tfill: rgb(0, 149, 221);\n}\n.clockpicker-canvas-bg {\n\tstroke: none;\n\tfill: rgb(192, 229, 247);\n}\n.clockpicker-canvas-bg-trans {\n\tfill: rgba(0, 149, 221, .25);\n}\n.clockpicker-canvas line {\n\tstroke: rgb(0, 149, 221);\n\tstroke-width: 1;\n\tstroke-linecap: round;\n\t/*shape-rendering: crispEdges;*/\n}\n.clockpicker-button.am-button {\n\tmargin: 1px;\n\tpadding: 5px;\n\tborder: 1px solid rgba(0, 0, 0, .2);\n\tborder-radius: 4px;\n\n}\n.clockpicker-button.pm-button {\n\tmargin: 1px 1px 1px 136px;\n\tpadding: 5px;\n\tborder: 1px solid rgba(0, 0, 0, .2);\n\tborder-radius: 4px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/codemirror/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  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: #111;\n  padding: 0 5px;\n}\n\n.cm-s-ambiance .CodeMirror-guttermarker { color: #aaa; }\n.cm-s-ambiance .CodeMirror-guttermarker-subtle { color: #111; }\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": "public/assets/dashboard/css/plugins/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.CodeMirror-guttermarker { color: black; }\n.CodeMirror-guttermarker-subtle { color: #999; }\n\n/* CURSOR */\n\n.CodeMirror div.CodeMirror-cursor {\n  border-left: 1px solid black;\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}\n.CodeMirror.cm-keymap-fat-cursor div.CodeMirror-cursors {\n  z-index: 1;\n}\n\n.cm-animate-fat-cursor {\n  width: auto;\n  border: 0;\n  -webkit-animation: blink 1.06s steps(1) infinite;\n  -moz-animation: blink 1.06s steps(1) infinite;\n  animation: blink 1.06s steps(1) infinite;\n}\n@-moz-keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n@-webkit-keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n@keyframes blink {\n  0% { background: #7e7; }\n  50% { background: none; }\n  100% { background: #7e7; }\n}\n\n/* Can style cursor different in overwrite (non-insert) mode */\ndiv.CodeMirror-overwrite div.CodeMirror-cursor {}\n\n.cm-tab { display: inline-block; text-decoration: inherit; }\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,\n.cm-s-default .cm-punctuation,\n.cm-s-default .cm-property,\n.cm-s-default .cm-operator {}\n.cm-s-default .cm-variable-2 {color: #05a;}\n.cm-s-default .cm-variable-3 {color: #085;}\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\n/* Default styles for common addons */\n\ndiv.CodeMirror span.CodeMirror-matchingbracket {color: #0f0;}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {color: #f22;}\n.CodeMirror-matchingtag { background: rgba(255, 150, 0, .3); }\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  min-height: 1px; /* prevents collapsing before first draw */\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  border-right: none;\n  width: 0;\n}\n\ndiv.CodeMirror-cursors {\n  visibility: hidden;\n  position: relative;\n  z-index: 3;\n}\n.CodeMirror-focused div.CodeMirror-cursors {\n  visibility: visible;\n}\n\n.CodeMirror-selected { background: #d9d9d9; }\n.CodeMirror-focused .CodeMirror-selected { background: #d7d4f0; }\n.CodeMirror-crosshair { cursor: crosshair; }\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/* Used to force a border model for a node */\n.cm-force-border { padding-right: .1px; }\n\n@media print {\n  /* Hide the cursor when printing */\n  .CodeMirror div.CodeMirror-cursors {\n    visibility: hidden;\n  }\n}\n\n/* Help users use markselection to safely style text background */\nspan.CodeMirror-selectedtext { background: none; }\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/dataTables/dataTables.bootstrap.css",
    "content": "div.dataTables_length label {\n    float: left;\n    text-align: left;\n    font-weight: normal;\n}\n\ndiv.dataTables_length select {\n    width: 75px;\n}\n\ndiv.dataTables_filter label {\n    float: right;\n    font-weight: normal;\n}\n\ndiv.dataTables_filter input {\n    width: 16em;\n}\n\ndiv.dataTables_info {\n    padding-top: 8px;\n}\n\ndiv.dataTables_paginate {\n    float: right;\n    margin: 0;\n}\n\ndiv.dataTables_paginate ul.pagination {\n    margin: 2px 0;\n    white-space: nowrap;\n}\n\ntable.dataTable,\ntable.dataTable td,\ntable.dataTable th {\n    -webkit-box-sizing: content-box;\n    -moz-box-sizing: content-box;\n    box-sizing: content-box;\n}\n\ntable.dataTable {\n    clear: both;\n    margin-top: 6px !important;\n    margin-bottom: 6px !important;\n    max-width: none !important;\n}\n\ntable.dataTable thead .sorting,\ntable.dataTable thead .sorting_asc,\ntable.dataTable thead .sorting_desc,\ntable.dataTable thead .sorting_asc_disabled,\ntable.dataTable thead .sorting_desc_disabled {\n    cursor: pointer;\n}\n\ntable.dataTable thead .sorting {\n\n}\n\ntable.dataTable thead .sorting_asc {\n    background: url('../images/sort_asc.png') no-repeat center right;\n}\n\ntable.dataTable thead .sorting_desc {\n    background: url('../images/sort_desc.png') no-repeat center right;\n}\n\ntable.dataTable thead .sorting_asc_disabled {\n}\n\ntable.dataTable thead .sorting_desc_disabled {\n}\n\ntable.dataTable th:active {\n    outline: none;\n}\n\n/* Scrolling */\n\ndiv.dataTables_scrollHead table {\n    margin-bottom: 0 !important;\n    border-bottom-left-radius: 0;\n    border-bottom-right-radius: 0;\n}\n\ndiv.dataTables_scrollHead table thead tr:last-child th:first-child,\ndiv.dataTables_scrollHead table thead tr:last-child td:first-child {\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n}\n\ndiv.dataTables_scrollBody table {\n    margin-top: 0 !important;\n    margin-bottom: 0 !important;\n    border-top: none;\n}\n\ndiv.dataTables_scrollBody tbody tr:first-child th,\ndiv.dataTables_scrollBody tbody tr:first-child td {\n    border-top: none;\n}\n\ndiv.dataTables_scrollFoot table {\n    margin-top: 0 !important;\n    border-top: none;\n}\n\n/*\n * TableTools styles\n */\n\n.table tbody tr.active td,\n.table tbody tr.active th {\n    color: white;\n    background-color: #08C;\n}\n\n.table tbody tr.active:hover td,\n.table tbody tr.active:hover th {\n    background-color: #0075b0 !important;\n}\n\n.table tbody tr.active a {\n    color: white;\n}\n\n.table-striped tbody tr.active:nth-child(odd) td,\n.table-striped tbody tr.active:nth-child(odd) th {\n    background-color: #017ebc;\n}\n\ntable.DTTT_selectable tbody tr {\n    cursor: pointer;\n}\n\ndiv.DTTT .btn {\n    font-size: 12px;\n    color: #333 !important;\n}\n\ndiv.DTTT .btn:hover {\n    text-decoration: none !important;\n}\n\nul.DTTT_dropdown.dropdown-menu {\n    z-index: 2003;\n}\n\nul.DTTT_dropdown.dropdown-menu a {\n    color: #333 !important; /* needed only when demo_page.css is included */\n}\n\nul.DTTT_dropdown.dropdown-menu li {\n    position: relative;\n}\n\nul.DTTT_dropdown.dropdown-menu li:hover a {\n    color: white !important;\n    background-color: #0088cc;\n}\n\ndiv.DTTT_collection_background {\n    z-index: 2002;\n}\n\n/* TableTools information display */\n\ndiv.DTTT_print_info.modal {\n    height: 150px;\n    margin-top: -75px;\n    text-align: center;\n}\n\ndiv.DTTT_print_info h6 {\n    margin: 1em;\n    font-size: 28px;\n    font-weight: normal;\n    line-height: 28px;\n}\n\ndiv.DTTT_print_info p {\n    font-size: 14px;\n    line-height: 20px;\n}\n\n/*\n * FixedColumns styles\n */\n\ndiv.DTFC_LeftHeadWrapper table,\ndiv.DTFC_LeftFootWrapper table,\ndiv.DTFC_RightHeadWrapper table,\ndiv.DTFC_RightFootWrapper table,\ntable.DTFC_Cloned tr.even {\n    background-color: white;\n}\n\ndiv.DTFC_RightHeadWrapper table,\ndiv.DTFC_LeftHeadWrapper table {\n    margin-bottom: 0 !important;\n    border-top-right-radius: 0 !important;\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n}\n\ndiv.DTFC_RightHeadWrapper table thead tr:last-child th:first-child,\ndiv.DTFC_RightHeadWrapper table thead tr:last-child td:first-child,\ndiv.DTFC_LeftHeadWrapper table thead tr:last-child th:first-child,\ndiv.DTFC_LeftHeadWrapper table thead tr:last-child td:first-child {\n    border-bottom-left-radius: 0 !important;\n    border-bottom-right-radius: 0 !important;\n}\n\ndiv.DTFC_RightBodyWrapper table,\ndiv.DTFC_LeftBodyWrapper table {\n    margin-bottom: 0 !important;\n    border-top: none;\n}\n\ndiv.DTFC_RightBodyWrapper tbody tr:first-child th,\ndiv.DTFC_RightBodyWrapper tbody tr:first-child td,\ndiv.DTFC_LeftBodyWrapper tbody tr:first-child th,\ndiv.DTFC_LeftBodyWrapper tbody tr:first-child td {\n    border-top: none;\n}\n\ndiv.DTFC_RightFootWrapper table,\ndiv.DTFC_LeftFootWrapper table {\n    border-top: none;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/datapicker/datepicker3.css",
    "content": "/*!\n * Datepicker for Bootstrap\n *\n * Copyright 2012 Stefan Petre\n * Improvements by Andrew Rowls\n * Licensed under the Apache License v2.0\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n */\n.datepicker {\n  padding: 4px;\n  border-radius: 4px;\n  direction: ltr;\n  /*.dow {\n\t\tborder-top: 1px solid #ddd !important;\n\t}*/\n}\n.datepicker-inline {\n  width: 220px;\n}\n.datepicker.datepicker-rtl {\n  direction: rtl;\n}\n.datepicker.datepicker-rtl table tr td span {\n  float: right;\n}\n.datepicker-dropdown {\n  top: 0;\n  left: 0;\n}\n.datepicker-dropdown:before {\n  content: '';\n  display: inline-block;\n  border-left: 7px solid transparent;\n  border-right: 7px solid transparent;\n  border-bottom: 7px solid #ccc;\n  border-top: 0;\n  border-bottom-color: rgba(0, 0, 0, 0.2);\n  position: absolute;\n}\n.datepicker-dropdown:after {\n  content: '';\n  display: inline-block;\n  border-left: 6px solid transparent;\n  border-right: 6px solid transparent;\n  border-bottom: 6px solid #fff;\n  border-top: 0;\n  position: absolute;\n}\n.datepicker-dropdown.datepicker-orient-left:before {\n  left: 6px;\n}\n.datepicker-dropdown.datepicker-orient-left:after {\n  left: 7px;\n}\n.datepicker-dropdown.datepicker-orient-right:before {\n  right: 6px;\n}\n.datepicker-dropdown.datepicker-orient-right:after {\n  right: 7px;\n}\n.datepicker-dropdown.datepicker-orient-top:before {\n  top: -7px;\n}\n.datepicker-dropdown.datepicker-orient-top:after {\n  top: -6px;\n}\n.datepicker-dropdown.datepicker-orient-bottom:before {\n  bottom: -7px;\n  border-bottom: 0;\n  border-top: 7px solid #999;\n}\n.datepicker-dropdown.datepicker-orient-bottom:after {\n  bottom: -6px;\n  border-bottom: 0;\n  border-top: 6px solid #fff;\n}\n.datepicker > div {\n  display: none;\n}\n.datepicker.days div.datepicker-days {\n  display: block;\n}\n.datepicker.months div.datepicker-months {\n  display: block;\n}\n.datepicker.years div.datepicker-years {\n  display: block;\n}\n.datepicker table {\n  margin: 0;\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.datepicker table tr td,\n.datepicker table tr th {\n  text-align: center;\n  width: 30px;\n  height: 30px;\n  border-radius: 4px;\n  border: none;\n}\n.table-striped .datepicker table tr td,\n.table-striped .datepicker table tr th {\n  background-color: transparent;\n}\n.datepicker table tr td.day:hover,\n.datepicker table tr td.day.focused {\n  background: #eeeeee;\n  cursor: pointer;\n}\n.datepicker table tr td.old,\n.datepicker table tr td.new {\n  color: #999999;\n}\n.datepicker table tr td.disabled,\n.datepicker table tr td.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n.datepicker table tr td.today,\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today.disabled:hover {\n  color: #000000;\n  background-color: #ffdb99;\n  border-color: #ffb733;\n}\n.datepicker table tr td.today:hover,\n.datepicker table tr td.today:hover:hover,\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today.disabled:hover:hover,\n.datepicker table tr td.today:focus,\n.datepicker table tr td.today:hover:focus,\n.datepicker table tr td.today.disabled:focus,\n.datepicker table tr td.today.disabled:hover:focus,\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.today,\n.open .dropdown-toggle.datepicker table tr td.today:hover,\n.open .dropdown-toggle.datepicker table tr td.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {\n  color: #000000;\n  background-color: #ffcd70;\n  border-color: #f59e00;\n}\n.datepicker table tr td.today:active,\n.datepicker table tr td.today:hover:active,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.active,\n.datepicker table tr td.today:hover.active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.today,\n.open .dropdown-toggle.datepicker table tr td.today:hover,\n.open .dropdown-toggle.datepicker table tr td.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.today.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.today.disabled,\n.datepicker table tr td.today:hover.disabled,\n.datepicker table tr td.today.disabled.disabled,\n.datepicker table tr td.today.disabled:hover.disabled,\n.datepicker table tr td.today[disabled],\n.datepicker table tr td.today:hover[disabled],\n.datepicker table tr td.today.disabled[disabled],\n.datepicker table tr td.today.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.today,\nfieldset[disabled] .datepicker table tr td.today:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today.disabled:hover,\n.datepicker table tr td.today:hover.disabled:hover,\n.datepicker table tr td.today.disabled.disabled:hover,\n.datepicker table tr td.today.disabled:hover.disabled:hover,\n.datepicker table tr td.today[disabled]:hover,\n.datepicker table tr td.today:hover[disabled]:hover,\n.datepicker table tr td.today.disabled[disabled]:hover,\n.datepicker table tr td.today.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.today:hover,\nfieldset[disabled] .datepicker table tr td.today:hover:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:hover,\n.datepicker table tr td.today.disabled:focus,\n.datepicker table tr td.today:hover.disabled:focus,\n.datepicker table tr td.today.disabled.disabled:focus,\n.datepicker table tr td.today.disabled:hover.disabled:focus,\n.datepicker table tr td.today[disabled]:focus,\n.datepicker table tr td.today:hover[disabled]:focus,\n.datepicker table tr td.today.disabled[disabled]:focus,\n.datepicker table tr td.today.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.today:focus,\nfieldset[disabled] .datepicker table tr td.today:hover:focus,\nfieldset[disabled] .datepicker table tr td.today.disabled:focus,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:focus,\n.datepicker table tr td.today.disabled:active,\n.datepicker table tr td.today:hover.disabled:active,\n.datepicker table tr td.today.disabled.disabled:active,\n.datepicker table tr td.today.disabled:hover.disabled:active,\n.datepicker table tr td.today[disabled]:active,\n.datepicker table tr td.today:hover[disabled]:active,\n.datepicker table tr td.today.disabled[disabled]:active,\n.datepicker table tr td.today.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.today:active,\nfieldset[disabled] .datepicker table tr td.today:hover:active,\nfieldset[disabled] .datepicker table tr td.today.disabled:active,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover:active,\n.datepicker table tr td.today.disabled.active,\n.datepicker table tr td.today:hover.disabled.active,\n.datepicker table tr td.today.disabled.disabled.active,\n.datepicker table tr td.today.disabled:hover.disabled.active,\n.datepicker table tr td.today[disabled].active,\n.datepicker table tr td.today:hover[disabled].active,\n.datepicker table tr td.today.disabled[disabled].active,\n.datepicker table tr td.today.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.today.active,\nfieldset[disabled] .datepicker table tr td.today:hover.active,\nfieldset[disabled] .datepicker table tr td.today.disabled.active,\nfieldset[disabled] .datepicker table tr td.today.disabled:hover.active {\n  background-color: #ffdb99;\n  border-color: #ffb733;\n}\n.datepicker table tr td.today:hover:hover {\n  color: #000;\n}\n.datepicker table tr td.today.active:hover {\n  color: #fff;\n}\n.datepicker table tr td.range,\n.datepicker table tr td.range:hover,\n.datepicker table tr td.range.disabled,\n.datepicker table tr td.range.disabled:hover {\n  background: #eeeeee;\n  border-radius: 0;\n}\n.datepicker table tr td.range.today,\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today.disabled:hover {\n  color: #000000;\n  background-color: #f7ca77;\n  border-color: #f1a417;\n  border-radius: 0;\n}\n.datepicker table tr td.range.today:hover,\n.datepicker table tr td.range.today:hover:hover,\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover:hover,\n.datepicker table tr td.range.today:focus,\n.datepicker table tr td.range.today:hover:focus,\n.datepicker table tr td.range.today.disabled:focus,\n.datepicker table tr td.range.today.disabled:hover:focus,\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.range.today,\n.open .dropdown-toggle.datepicker table tr td.range.today:hover,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {\n  color: #000000;\n  background-color: #f4bb51;\n  border-color: #bf800c;\n}\n.datepicker table tr td.range.today:active,\n.datepicker table tr td.range.today:hover:active,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.active,\n.datepicker table tr td.range.today:hover.active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.range.today,\n.open .dropdown-toggle.datepicker table tr td.range.today:hover,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled,\n.open .dropdown-toggle.datepicker table tr td.range.today.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.range.today.disabled,\n.datepicker table tr td.range.today:hover.disabled,\n.datepicker table tr td.range.today.disabled.disabled,\n.datepicker table tr td.range.today.disabled:hover.disabled,\n.datepicker table tr td.range.today[disabled],\n.datepicker table tr td.range.today:hover[disabled],\n.datepicker table tr td.range.today.disabled[disabled],\n.datepicker table tr td.range.today.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.range.today,\nfieldset[disabled] .datepicker table tr td.range.today:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover,\n.datepicker table tr td.range.today:hover.disabled:hover,\n.datepicker table tr td.range.today.disabled.disabled:hover,\n.datepicker table tr td.range.today.disabled:hover.disabled:hover,\n.datepicker table tr td.range.today[disabled]:hover,\n.datepicker table tr td.range.today:hover[disabled]:hover,\n.datepicker table tr td.range.today.disabled[disabled]:hover,\n.datepicker table tr td.range.today.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.range.today:hover,\nfieldset[disabled] .datepicker table tr td.range.today:hover:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:hover,\n.datepicker table tr td.range.today.disabled:focus,\n.datepicker table tr td.range.today:hover.disabled:focus,\n.datepicker table tr td.range.today.disabled.disabled:focus,\n.datepicker table tr td.range.today.disabled:hover.disabled:focus,\n.datepicker table tr td.range.today[disabled]:focus,\n.datepicker table tr td.range.today:hover[disabled]:focus,\n.datepicker table tr td.range.today.disabled[disabled]:focus,\n.datepicker table tr td.range.today.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.range.today:focus,\nfieldset[disabled] .datepicker table tr td.range.today:hover:focus,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:focus,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:focus,\n.datepicker table tr td.range.today.disabled:active,\n.datepicker table tr td.range.today:hover.disabled:active,\n.datepicker table tr td.range.today.disabled.disabled:active,\n.datepicker table tr td.range.today.disabled:hover.disabled:active,\n.datepicker table tr td.range.today[disabled]:active,\n.datepicker table tr td.range.today:hover[disabled]:active,\n.datepicker table tr td.range.today.disabled[disabled]:active,\n.datepicker table tr td.range.today.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.range.today:active,\nfieldset[disabled] .datepicker table tr td.range.today:hover:active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover:active,\n.datepicker table tr td.range.today.disabled.active,\n.datepicker table tr td.range.today:hover.disabled.active,\n.datepicker table tr td.range.today.disabled.disabled.active,\n.datepicker table tr td.range.today.disabled:hover.disabled.active,\n.datepicker table tr td.range.today[disabled].active,\n.datepicker table tr td.range.today:hover[disabled].active,\n.datepicker table tr td.range.today.disabled[disabled].active,\n.datepicker table tr td.range.today.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.range.today.active,\nfieldset[disabled] .datepicker table tr td.range.today:hover.active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled.active,\nfieldset[disabled] .datepicker table tr td.range.today.disabled:hover.active {\n  background-color: #f7ca77;\n  border-color: #f1a417;\n}\n.datepicker table tr td.selected,\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected.disabled:hover {\n  color: #ffffff;\n  background-color: #999999;\n  border-color: #555555;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.selected:hover,\n.datepicker table tr td.selected:hover:hover,\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.disabled:hover:hover,\n.datepicker table tr td.selected:focus,\n.datepicker table tr td.selected:hover:focus,\n.datepicker table tr td.selected.disabled:focus,\n.datepicker table tr td.selected.disabled:hover:focus,\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.selected,\n.open .dropdown-toggle.datepicker table tr td.selected:hover,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {\n  color: #ffffff;\n  background-color: #858585;\n  border-color: #373737;\n}\n.datepicker table tr td.selected:active,\n.datepicker table tr td.selected:hover:active,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.active,\n.datepicker table tr td.selected:hover.active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.selected,\n.open .dropdown-toggle.datepicker table tr td.selected:hover,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled,\n.open .dropdown-toggle.datepicker table tr td.selected.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.selected.disabled,\n.datepicker table tr td.selected:hover.disabled,\n.datepicker table tr td.selected.disabled.disabled,\n.datepicker table tr td.selected.disabled:hover.disabled,\n.datepicker table tr td.selected[disabled],\n.datepicker table tr td.selected:hover[disabled],\n.datepicker table tr td.selected.disabled[disabled],\n.datepicker table tr td.selected.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.selected,\nfieldset[disabled] .datepicker table tr td.selected:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected.disabled:hover,\n.datepicker table tr td.selected:hover.disabled:hover,\n.datepicker table tr td.selected.disabled.disabled:hover,\n.datepicker table tr td.selected.disabled:hover.disabled:hover,\n.datepicker table tr td.selected[disabled]:hover,\n.datepicker table tr td.selected:hover[disabled]:hover,\n.datepicker table tr td.selected.disabled[disabled]:hover,\n.datepicker table tr td.selected.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.selected:hover,\nfieldset[disabled] .datepicker table tr td.selected:hover:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:hover,\n.datepicker table tr td.selected.disabled:focus,\n.datepicker table tr td.selected:hover.disabled:focus,\n.datepicker table tr td.selected.disabled.disabled:focus,\n.datepicker table tr td.selected.disabled:hover.disabled:focus,\n.datepicker table tr td.selected[disabled]:focus,\n.datepicker table tr td.selected:hover[disabled]:focus,\n.datepicker table tr td.selected.disabled[disabled]:focus,\n.datepicker table tr td.selected.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.selected:focus,\nfieldset[disabled] .datepicker table tr td.selected:hover:focus,\nfieldset[disabled] .datepicker table tr td.selected.disabled:focus,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:focus,\n.datepicker table tr td.selected.disabled:active,\n.datepicker table tr td.selected:hover.disabled:active,\n.datepicker table tr td.selected.disabled.disabled:active,\n.datepicker table tr td.selected.disabled:hover.disabled:active,\n.datepicker table tr td.selected[disabled]:active,\n.datepicker table tr td.selected:hover[disabled]:active,\n.datepicker table tr td.selected.disabled[disabled]:active,\n.datepicker table tr td.selected.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.selected:active,\nfieldset[disabled] .datepicker table tr td.selected:hover:active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover:active,\n.datepicker table tr td.selected.disabled.active,\n.datepicker table tr td.selected:hover.disabled.active,\n.datepicker table tr td.selected.disabled.disabled.active,\n.datepicker table tr td.selected.disabled:hover.disabled.active,\n.datepicker table tr td.selected[disabled].active,\n.datepicker table tr td.selected:hover[disabled].active,\n.datepicker table tr td.selected.disabled[disabled].active,\n.datepicker table tr td.selected.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.selected.active,\nfieldset[disabled] .datepicker table tr td.selected:hover.active,\nfieldset[disabled] .datepicker table tr td.selected.disabled.active,\nfieldset[disabled] .datepicker table tr td.selected.disabled:hover.active {\n  background-color: #999999;\n  border-color: #555555;\n}\n.datepicker table tr td.active,\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active.disabled:hover {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td.active:hover,\n.datepicker table tr td.active:hover:hover,\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.disabled:hover:hover,\n.datepicker table tr td.active:focus,\n.datepicker table tr td.active:hover:focus,\n.datepicker table tr td.active.disabled:focus,\n.datepicker table tr td.active.disabled:hover:focus,\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.active,\n.open .dropdown-toggle.datepicker table tr td.active:hover,\n.open .dropdown-toggle.datepicker table tr td.active.disabled,\n.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.datepicker table tr td.active:active,\n.datepicker table tr td.active:hover:active,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.active,\n.datepicker table tr td.active:hover.active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td.active,\n.open .dropdown-toggle.datepicker table tr td.active:hover,\n.open .dropdown-toggle.datepicker table tr td.active.disabled,\n.open .dropdown-toggle.datepicker table tr td.active.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td.active.disabled,\n.datepicker table tr td.active:hover.disabled,\n.datepicker table tr td.active.disabled.disabled,\n.datepicker table tr td.active.disabled:hover.disabled,\n.datepicker table tr td.active[disabled],\n.datepicker table tr td.active:hover[disabled],\n.datepicker table tr td.active.disabled[disabled],\n.datepicker table tr td.active.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td.active,\nfieldset[disabled] .datepicker table tr td.active:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active.disabled:hover,\n.datepicker table tr td.active:hover.disabled:hover,\n.datepicker table tr td.active.disabled.disabled:hover,\n.datepicker table tr td.active.disabled:hover.disabled:hover,\n.datepicker table tr td.active[disabled]:hover,\n.datepicker table tr td.active:hover[disabled]:hover,\n.datepicker table tr td.active.disabled[disabled]:hover,\n.datepicker table tr td.active.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td.active:hover,\nfieldset[disabled] .datepicker table tr td.active:hover:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:hover,\n.datepicker table tr td.active.disabled:focus,\n.datepicker table tr td.active:hover.disabled:focus,\n.datepicker table tr td.active.disabled.disabled:focus,\n.datepicker table tr td.active.disabled:hover.disabled:focus,\n.datepicker table tr td.active[disabled]:focus,\n.datepicker table tr td.active:hover[disabled]:focus,\n.datepicker table tr td.active.disabled[disabled]:focus,\n.datepicker table tr td.active.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td.active:focus,\nfieldset[disabled] .datepicker table tr td.active:hover:focus,\nfieldset[disabled] .datepicker table tr td.active.disabled:focus,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:focus,\n.datepicker table tr td.active.disabled:active,\n.datepicker table tr td.active:hover.disabled:active,\n.datepicker table tr td.active.disabled.disabled:active,\n.datepicker table tr td.active.disabled:hover.disabled:active,\n.datepicker table tr td.active[disabled]:active,\n.datepicker table tr td.active:hover[disabled]:active,\n.datepicker table tr td.active.disabled[disabled]:active,\n.datepicker table tr td.active.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td.active:active,\nfieldset[disabled] .datepicker table tr td.active:hover:active,\nfieldset[disabled] .datepicker table tr td.active.disabled:active,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover:active,\n.datepicker table tr td.active.disabled.active,\n.datepicker table tr td.active:hover.disabled.active,\n.datepicker table tr td.active.disabled.disabled.active,\n.datepicker table tr td.active.disabled:hover.disabled.active,\n.datepicker table tr td.active[disabled].active,\n.datepicker table tr td.active:hover[disabled].active,\n.datepicker table tr td.active.disabled[disabled].active,\n.datepicker table tr td.active.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td.active.active,\nfieldset[disabled] .datepicker table tr td.active:hover.active,\nfieldset[disabled] .datepicker table tr td.active.disabled.active,\nfieldset[disabled] .datepicker table tr td.active.disabled:hover.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.datepicker table tr td span {\n  display: block;\n  width: 23%;\n  height: 54px;\n  line-height: 54px;\n  float: left;\n  margin: 1%;\n  cursor: pointer;\n  border-radius: 4px;\n}\n.datepicker table tr td span:hover {\n  background: #eeeeee;\n}\n.datepicker table tr td span.disabled,\n.datepicker table tr td span.disabled:hover {\n  background: none;\n  color: #999999;\n  cursor: default;\n}\n.datepicker table tr td span.active,\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n  text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25);\n}\n.datepicker table tr td span.active:hover,\n.datepicker table tr td span.active:hover:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active:focus,\n.datepicker table tr td span.active:hover:focus,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td span.active,\n.open .dropdown-toggle.datepicker table tr td span.active:hover,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.datepicker table tr td span.active:active,\n.datepicker table tr td span.active:hover:active,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.active,\n.datepicker table tr td span.active:hover.active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active.disabled:hover.active,\n.open .dropdown-toggle.datepicker table tr td span.active,\n.open .dropdown-toggle.datepicker table tr td span.active:hover,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled,\n.open .dropdown-toggle.datepicker table tr td span.active.disabled:hover {\n  background-image: none;\n}\n.datepicker table tr td span.active.disabled,\n.datepicker table tr td span.active:hover.disabled,\n.datepicker table tr td span.active.disabled.disabled,\n.datepicker table tr td span.active.disabled:hover.disabled,\n.datepicker table tr td span.active[disabled],\n.datepicker table tr td span.active:hover[disabled],\n.datepicker table tr td span.active.disabled[disabled],\n.datepicker table tr td span.active.disabled:hover[disabled],\nfieldset[disabled] .datepicker table tr td span.active,\nfieldset[disabled] .datepicker table tr td span.active:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active.disabled:hover,\n.datepicker table tr td span.active:hover.disabled:hover,\n.datepicker table tr td span.active.disabled.disabled:hover,\n.datepicker table tr td span.active.disabled:hover.disabled:hover,\n.datepicker table tr td span.active[disabled]:hover,\n.datepicker table tr td span.active:hover[disabled]:hover,\n.datepicker table tr td span.active.disabled[disabled]:hover,\n.datepicker table tr td span.active.disabled:hover[disabled]:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover,\nfieldset[disabled] .datepicker table tr td span.active:hover:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:hover,\n.datepicker table tr td span.active.disabled:focus,\n.datepicker table tr td span.active:hover.disabled:focus,\n.datepicker table tr td span.active.disabled.disabled:focus,\n.datepicker table tr td span.active.disabled:hover.disabled:focus,\n.datepicker table tr td span.active[disabled]:focus,\n.datepicker table tr td span.active:hover[disabled]:focus,\n.datepicker table tr td span.active.disabled[disabled]:focus,\n.datepicker table tr td span.active.disabled:hover[disabled]:focus,\nfieldset[disabled] .datepicker table tr td span.active:focus,\nfieldset[disabled] .datepicker table tr td span.active:hover:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:focus,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:focus,\n.datepicker table tr td span.active.disabled:active,\n.datepicker table tr td span.active:hover.disabled:active,\n.datepicker table tr td span.active.disabled.disabled:active,\n.datepicker table tr td span.active.disabled:hover.disabled:active,\n.datepicker table tr td span.active[disabled]:active,\n.datepicker table tr td span.active:hover[disabled]:active,\n.datepicker table tr td span.active.disabled[disabled]:active,\n.datepicker table tr td span.active.disabled:hover[disabled]:active,\nfieldset[disabled] .datepicker table tr td span.active:active,\nfieldset[disabled] .datepicker table tr td span.active:hover:active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover:active,\n.datepicker table tr td span.active.disabled.active,\n.datepicker table tr td span.active:hover.disabled.active,\n.datepicker table tr td span.active.disabled.disabled.active,\n.datepicker table tr td span.active.disabled:hover.disabled.active,\n.datepicker table tr td span.active[disabled].active,\n.datepicker table tr td span.active:hover[disabled].active,\n.datepicker table tr td span.active.disabled[disabled].active,\n.datepicker table tr td span.active.disabled:hover[disabled].active,\nfieldset[disabled] .datepicker table tr td span.active.active,\nfieldset[disabled] .datepicker table tr td span.active:hover.active,\nfieldset[disabled] .datepicker table tr td span.active.disabled.active,\nfieldset[disabled] .datepicker table tr td span.active.disabled:hover.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.datepicker table tr td span.old,\n.datepicker table tr td span.new {\n  color: #999999;\n}\n.datepicker th.datepicker-switch {\n  width: 145px;\n}\n.datepicker thead tr:first-child th,\n.datepicker tfoot tr th {\n  cursor: pointer;\n}\n.datepicker thead tr:first-child th:hover,\n.datepicker tfoot tr th:hover {\n  background: #eeeeee;\n}\n.datepicker .cw {\n  font-size: 10px;\n  width: 12px;\n  padding: 0 2px 0 5px;\n  vertical-align: middle;\n}\n.datepicker thead tr:first-child th.cw {\n  cursor: default;\n  background-color: transparent;\n}\n.input-group.date .input-group-addon i {\n  cursor: pointer;\n  width: 16px;\n  height: 16px;\n}\n.input-daterange input {\n  text-align: center;\n}\n.input-daterange input:first-child {\n  border-radius: 3px 0 0 3px;\n}\n.input-daterange input:last-child {\n  border-radius: 0 3px 3px 0;\n}\n.input-daterange .input-group-addon {\n  width: auto;\n  min-width: 16px;\n  padding: 4px 5px;\n  font-weight: normal;\n  line-height: 1.428571429;\n  text-align: center;\n  text-shadow: 0 1px 0 #fff;\n  vertical-align: middle;\n  background-color: #eeeeee;\n  border-width: 1px 0;\n  margin-left: -5px;\n  margin-right: -5px;\n}\n.datepicker.dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  float: left;\n  display: none;\n  min-width: 160px;\n  list-style: none;\n  background-color: #ffffff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.2);\n  border-radius: 5px;\n  -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2);\n  -webkit-background-clip: padding-box;\n  -moz-background-clip: padding;\n  background-clip: padding-box;\n  *border-right-width: 2px;\n  *border-bottom-width: 2px;\n  color: #333333;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-size: 13px;\n  line-height: 1.428571429;\n}\n.datepicker.dropdown-menu th,\n.datepicker.dropdown-menu td {\n  padding: 4px 5px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/dropzone/basic.css",
    "content": "/* The MIT License */\n.dropzone,\n.dropzone *,\n.dropzone-previews,\n.dropzone-previews * {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.dropzone {\n  position: relative;\n  border: 1px solid rgba(0,0,0,0.08);\n  background: rgba(0,0,0,0.02);\n  padding: 1em;\n}\n.dropzone.dz-clickable {\n  cursor: pointer;\n}\n.dropzone.dz-clickable .dz-message,\n.dropzone.dz-clickable .dz-message span {\n  cursor: pointer;\n}\n.dropzone.dz-clickable * {\n  cursor: default;\n}\n.dropzone .dz-message {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n}\n.dropzone.dz-drag-hover {\n  border-color: rgba(0,0,0,0.15);\n  background: rgba(0,0,0,0.04);\n}\n.dropzone.dz-started .dz-message {\n  display: none;\n}\n.dropzone .dz-preview,\n.dropzone-previews .dz-preview {\n  background: rgba(255,255,255,0.8);\n  position: relative;\n  display: inline-block;\n  margin: 17px;\n  vertical-align: top;\n  border: 1px solid #acacac;\n  padding: 6px 6px 6px 6px;\n}\n.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],\n.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {\n  display: none;\n}\n.dropzone .dz-preview .dz-details,\n.dropzone-previews .dz-preview .dz-details {\n  width: 100px;\n  height: 100px;\n  position: relative;\n  background: #ebebeb;\n  padding: 5px;\n  margin-bottom: 22px;\n}\n.dropzone .dz-preview .dz-details .dz-filename,\n.dropzone-previews .dz-preview .dz-details .dz-filename {\n  overflow: hidden;\n  height: 100%;\n}\n.dropzone .dz-preview .dz-details img,\n.dropzone-previews .dz-preview .dz-details img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100px;\n  height: 100px;\n}\n.dropzone .dz-preview .dz-details .dz-size,\n.dropzone-previews .dz-preview .dz-details .dz-size {\n  position: absolute;\n  bottom: -28px;\n  left: 3px;\n  height: 28px;\n  line-height: 28px;\n}\n.dropzone .dz-preview.dz-error .dz-error-mark,\n.dropzone-previews .dz-preview.dz-error .dz-error-mark {\n  display: block;\n}\n.dropzone .dz-preview.dz-success .dz-success-mark,\n.dropzone-previews .dz-preview.dz-success .dz-success-mark {\n  display: block;\n}\n.dropzone .dz-preview:hover .dz-details img,\n.dropzone-previews .dz-preview:hover .dz-details img {\n  display: none;\n}\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark,\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark {\n  display: none;\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  font-size: 30px;\n  text-align: center;\n  right: -10px;\n  top: -10px;\n}\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark {\n  color: #8cc657;\n}\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark {\n  color: #ee162d;\n}\n.dropzone .dz-preview .dz-progress,\n.dropzone-previews .dz-preview .dz-progress {\n  position: absolute;\n  top: 100px;\n  left: 6px;\n  right: 6px;\n  height: 6px;\n  background: #d7d7d7;\n  display: none;\n}\n.dropzone .dz-preview .dz-progress .dz-upload,\n.dropzone-previews .dz-preview .dz-progress .dz-upload {\n  display: block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 0%;\n  background-color: #8cc657;\n}\n.dropzone .dz-preview.dz-processing .dz-progress,\n.dropzone-previews .dz-preview.dz-processing .dz-progress {\n  display: block;\n}\n.dropzone .dz-preview .dz-error-message,\n.dropzone-previews .dz-preview .dz-error-message {\n  display: none;\n  position: absolute;\n  top: -5px;\n  left: -20px;\n  background: rgba(245,245,245,0.8);\n  padding: 8px 10px;\n  color: #800;\n  min-width: 140px;\n  max-width: 500px;\n  z-index: 500;\n}\n.dropzone .dz-preview:hover.dz-error .dz-error-message,\n.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {\n  display: block;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/dropzone/dropzone.css",
    "content": "/* The MIT License */\n.dropzone,\n.dropzone *,\n.dropzone-previews,\n.dropzone-previews * {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.dropzone {\n  position: relative;\n  border: 1px solid rgba(0,0,0,0.08);\n  background: rgba(0,0,0,0.02);\n  padding: 1em;\n}\n.dropzone.dz-clickable {\n  cursor: pointer;\n}\n.dropzone.dz-clickable .dz-message,\n.dropzone.dz-clickable .dz-message span {\n  cursor: pointer;\n}\n.dropzone.dz-clickable * {\n  cursor: default;\n}\n.dropzone .dz-message {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n}\n.dropzone.dz-drag-hover {\n  border-color: rgba(0,0,0,0.15);\n  background: rgba(0,0,0,0.04);\n}\n.dropzone.dz-started .dz-message {\n  display: none;\n}\n.dropzone .dz-preview,\n.dropzone-previews .dz-preview {\n  background: rgba(255,255,255,0.8);\n  position: relative;\n  display: inline-block;\n  margin: 17px;\n  vertical-align: top;\n  border: 1px solid #acacac;\n  padding: 6px 6px 6px 6px;\n}\n.dropzone .dz-preview.dz-file-preview [data-dz-thumbnail],\n.dropzone-previews .dz-preview.dz-file-preview [data-dz-thumbnail] {\n  display: none;\n}\n.dropzone .dz-preview .dz-details,\n.dropzone-previews .dz-preview .dz-details {\n  width: 100px;\n  height: 100px;\n  position: relative;\n  background: #ebebeb;\n  padding: 5px;\n  margin-bottom: 22px;\n}\n.dropzone .dz-preview .dz-details .dz-filename,\n.dropzone-previews .dz-preview .dz-details .dz-filename {\n  overflow: hidden;\n  height: 100%;\n}\n.dropzone .dz-preview .dz-details img,\n.dropzone-previews .dz-preview .dz-details img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100px;\n  height: 100px;\n}\n.dropzone .dz-preview .dz-details .dz-size,\n.dropzone-previews .dz-preview .dz-details .dz-size {\n  position: absolute;\n  bottom: -28px;\n  left: 3px;\n  height: 28px;\n  line-height: 28px;\n}\n.dropzone .dz-preview.dz-error .dz-error-mark,\n.dropzone-previews .dz-preview.dz-error .dz-error-mark {\n  display: block;\n}\n.dropzone .dz-preview.dz-success .dz-success-mark,\n.dropzone-previews .dz-preview.dz-success .dz-success-mark {\n  display: block;\n}\n.dropzone .dz-preview:hover .dz-details img,\n.dropzone-previews .dz-preview:hover .dz-details img {\n  display: none;\n}\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark,\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark {\n  display: none;\n  position: absolute;\n  width: 40px;\n  height: 40px;\n  font-size: 30px;\n  text-align: center;\n  right: -10px;\n  top: -10px;\n}\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark {\n  color: #8cc657;\n}\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark {\n  color: #ee162d;\n}\n.dropzone .dz-preview .dz-progress,\n.dropzone-previews .dz-preview .dz-progress {\n  position: absolute;\n  top: 100px;\n  left: 6px;\n  right: 6px;\n  height: 6px;\n  background: #d7d7d7;\n  display: none;\n}\n.dropzone .dz-preview .dz-progress .dz-upload,\n.dropzone-previews .dz-preview .dz-progress .dz-upload {\n  display: block;\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  width: 0%;\n  background-color: #8cc657;\n}\n.dropzone .dz-preview.dz-processing .dz-progress,\n.dropzone-previews .dz-preview.dz-processing .dz-progress {\n  display: block;\n}\n.dropzone .dz-preview .dz-error-message,\n.dropzone-previews .dz-preview .dz-error-message {\n  display: none;\n  position: absolute;\n  top: -5px;\n  left: -20px;\n  background: rgba(245,245,245,0.8);\n  padding: 8px 10px;\n  color: #800;\n  min-width: 140px;\n  max-width: 500px;\n  z-index: 500;\n}\n.dropzone .dz-preview:hover.dz-error .dz-error-message,\n.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {\n  display: block;\n}\n.dropzone {\n  border: 1px solid rgba(0,0,0,0.03);\n  min-height: 360px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  background: rgba(0,0,0,0.03);\n  padding: 23px;\n}\n.dropzone .dz-default.dz-message {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n  -webkit-transition: opacity 0.3s ease-in-out;\n  -moz-transition: opacity 0.3s ease-in-out;\n  -o-transition: opacity 0.3s ease-in-out;\n  -ms-transition: opacity 0.3s ease-in-out;\n  transition: opacity 0.3s ease-in-out;\n  background-image: url(\"../images/spritemap.png\");\n  background-repeat: no-repeat;\n  background-position: 0 0;\n  position: absolute;\n  width: 428px;\n  height: 123px;\n  margin-left: -214px;\n  margin-top: -61.5px;\n  top: 50%;\n  left: 50%;\n}\n@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {\n  .dropzone .dz-default.dz-message {\n    background-image: url(\"../images/spritemap%402x.png\");\n    -webkit-background-size: 428px 406px;\n    -moz-background-size: 428px 406px;\n    background-size: 428px 406px;\n  }\n}\n.dropzone .dz-default.dz-message span {\n  display: none;\n}\n.dropzone.dz-square .dz-default.dz-message {\n  background-position: 0 -123px;\n  width: 268px;\n  margin-left: -134px;\n  height: 174px;\n  margin-top: -87px;\n}\n.dropzone.dz-drag-hover .dz-message {\n  opacity: 0.15;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=15)\";\n  filter: alpha(opacity=15);\n}\n.dropzone.dz-started .dz-message {\n  display: block;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n}\n.dropzone .dz-preview,\n.dropzone-previews .dz-preview {\n  -webkit-box-shadow: 1px 1px 4px rgba(0,0,0,0.16);\n  box-shadow: 1px 1px 4px rgba(0,0,0,0.16);\n  font-size: 14px;\n}\n.dropzone .dz-preview.dz-image-preview:hover .dz-details img,\n.dropzone-previews .dz-preview.dz-image-preview:hover .dz-details img {\n  display: block;\n  opacity: 0.1;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=10)\";\n  filter: alpha(opacity=10);\n}\n.dropzone .dz-preview.dz-success .dz-success-mark,\n.dropzone-previews .dz-preview.dz-success .dz-success-mark {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n}\n.dropzone .dz-preview.dz-error .dz-error-mark,\n.dropzone-previews .dz-preview.dz-error .dz-error-mark {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n}\n.dropzone .dz-preview.dz-error .dz-progress .dz-upload,\n.dropzone-previews .dz-preview.dz-error .dz-progress .dz-upload {\n  background: #ee1e2d;\n}\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark,\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark {\n  display: block;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -webkit-transition: opacity 0.4s ease-in-out;\n  -moz-transition: opacity 0.4s ease-in-out;\n  -o-transition: opacity 0.4s ease-in-out;\n  -ms-transition: opacity 0.4s ease-in-out;\n  transition: opacity 0.4s ease-in-out;\n  background-image: url(\"../images/spritemap.png\");\n  background-repeat: no-repeat;\n}\n@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {\n  .dropzone .dz-preview .dz-error-mark,\n  .dropzone-previews .dz-preview .dz-error-mark,\n  .dropzone .dz-preview .dz-success-mark,\n  .dropzone-previews .dz-preview .dz-success-mark {\n    background-image: url(\"../images/spritemap%402x.png\");\n    -webkit-background-size: 428px 406px;\n    -moz-background-size: 428px 406px;\n    background-size: 428px 406px;\n  }\n}\n.dropzone .dz-preview .dz-error-mark span,\n.dropzone-previews .dz-preview .dz-error-mark span,\n.dropzone .dz-preview .dz-success-mark span,\n.dropzone-previews .dz-preview .dz-success-mark span {\n  display: none;\n}\n.dropzone .dz-preview .dz-error-mark,\n.dropzone-previews .dz-preview .dz-error-mark {\n  background-position: -268px -123px;\n}\n.dropzone .dz-preview .dz-success-mark,\n.dropzone-previews .dz-preview .dz-success-mark {\n  background-position: -268px -163px;\n}\n.dropzone .dz-preview .dz-progress .dz-upload,\n.dropzone-previews .dz-preview .dz-progress .dz-upload {\n  -webkit-animation: loading 0.4s linear infinite;\n  -moz-animation: loading 0.4s linear infinite;\n  -o-animation: loading 0.4s linear infinite;\n  -ms-animation: loading 0.4s linear infinite;\n  animation: loading 0.4s linear infinite;\n  -webkit-transition: width 0.3s ease-in-out;\n  -moz-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  -ms-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  -webkit-border-radius: 2px;\n  border-radius: 2px;\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 0%;\n  height: 100%;\n  background-image: url(\"../images/spritemap.png\");\n  background-repeat: repeat-x;\n  background-position: 0px -400px;\n}\n@media all and (-webkit-min-device-pixel-ratio:1.5),(min--moz-device-pixel-ratio:1.5),(-o-min-device-pixel-ratio:1.5/1),(min-device-pixel-ratio:1.5),(min-resolution:138dpi),(min-resolution:1.5dppx) {\n  .dropzone .dz-preview .dz-progress .dz-upload,\n  .dropzone-previews .dz-preview .dz-progress .dz-upload {\n    background-image: url(\"../images/spritemap%402x.png\");\n    -webkit-background-size: 428px 406px;\n    -moz-background-size: 428px 406px;\n    background-size: 428px 406px;\n  }\n}\n.dropzone .dz-preview.dz-success .dz-progress,\n.dropzone-previews .dz-preview.dz-success .dz-progress {\n  display: block;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -webkit-transition: opacity 0.4s ease-in-out;\n  -moz-transition: opacity 0.4s ease-in-out;\n  -o-transition: opacity 0.4s ease-in-out;\n  -ms-transition: opacity 0.4s ease-in-out;\n  transition: opacity 0.4s ease-in-out;\n}\n.dropzone .dz-preview .dz-error-message,\n.dropzone-previews .dz-preview .dz-error-message {\n  display: block;\n  opacity: 0;\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=0)\";\n  filter: alpha(opacity=0);\n  -webkit-transition: opacity 0.3s ease-in-out;\n  -moz-transition: opacity 0.3s ease-in-out;\n  -o-transition: opacity 0.3s ease-in-out;\n  -ms-transition: opacity 0.3s ease-in-out;\n  transition: opacity 0.3s ease-in-out;\n}\n.dropzone .dz-preview:hover.dz-error .dz-error-message,\n.dropzone-previews .dz-preview:hover.dz-error .dz-error-message {\n  opacity: 1;\n  -ms-filter: none;\n  filter: none;\n}\n.dropzone a.dz-remove,\n.dropzone-previews a.dz-remove {\n  background-image: -webkit-linear-gradient(top, #fafafa, #eee);\n  background-image: -moz-linear-gradient(top, #fafafa, #eee);\n  background-image: -o-linear-gradient(top, #fafafa, #eee);\n  background-image: -ms-linear-gradient(top, #fafafa, #eee);\n  background-image: linear-gradient(to bottom, #fafafa, #eee);\n  -webkit-border-radius: 2px;\n  border-radius: 2px;\n  border: 1px solid #eee;\n  text-decoration: none;\n  display: block;\n  padding: 4px 5px;\n  text-align: center;\n  color: #aaa;\n  margin-top: 26px;\n}\n.dropzone a.dz-remove:hover,\n.dropzone-previews a.dz-remove:hover {\n  color: #666;\n}\n@-moz-keyframes loading {\n  0% {\n    background-position: 0 -400px;\n  }\n\n  100% {\n    background-position: -7px -400px;\n  }\n}\n@-webkit-keyframes loading {\n  0% {\n    background-position: 0 -400px;\n  }\n\n  100% {\n    background-position: -7px -400px;\n  }\n}\n@-o-keyframes loading {\n  0% {\n    background-position: 0 -400px;\n  }\n\n  100% {\n    background-position: -7px -400px;\n  }\n}\n@-ms-keyframes loading {\n  0% {\n    background-position: 0 -400px;\n  }\n\n  100% {\n    background-position: -7px -400px;\n  }\n}\n@keyframes loading {\n  0% {\n    background-position: 0 -400px;\n  }\n\n  100% {\n    background-position: -7px -400px;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/footable/footable.core.css",
    "content": "@font-face {\n  font-family: 'footable';\n  src: url('fonts/footable.eot');\n  src: url('fonts/footabled41d.eot?#iefix') format('embedded-opentype'), url('fonts/footable.woff') format('woff'), url('fonts/footable.ttf') format('truetype'), url('fonts/footable.svg#footable') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n@media screen and (-webkit-min-device-pixel-ratio: 0) {\n  @font-face {\n    font-family: 'footable';\n    src: url('fonts/footable.svg#footable') format('svg');\n    font-weight: normal;\n    font-style: normal;\n  }\n}\n.footable {\n  width: 100%;\n  /** SORTING **/\n\n  /** PAGINATION **/\n\n}\n.footable.breakpoint > tbody > tr.footable-detail-show > td {\n  border-bottom: none;\n}\n.footable.breakpoint > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e001\";\n}\n.footable.breakpoint > tbody > tr:hover:not(.footable-row-detail) {\n  cursor: pointer;\n}\n.footable.breakpoint > tbody > tr > td.footable-cell-detail {\n  background: #eee;\n  border-top: none;\n}\n.footable.breakpoint > tbody > tr > td > span.footable-toggle {\n  display: inline-block;\n  font-family: 'footable';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  -webkit-font-smoothing: antialiased;\n  padding-right: 5px;\n  font-size: 14px;\n  color: #888888;\n}\n.footable.breakpoint > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e000\";\n}\n.footable.breakpoint.toggle-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e005\";\n}\n.footable.breakpoint.toggle-circle > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e004\";\n}\n.footable.breakpoint.toggle-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e003\";\n}\n.footable.breakpoint.toggle-circle-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e002\";\n}\n.footable.breakpoint.toggle-square > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e007\";\n}\n.footable.breakpoint.toggle-square > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e006\";\n}\n.footable.breakpoint.toggle-square-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e009\";\n}\n.footable.breakpoint.toggle-square-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e008\";\n}\n.footable.breakpoint.toggle-arrow > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e00f\";\n}\n.footable.breakpoint.toggle-arrow > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e011\";\n}\n.footable.breakpoint.toggle-arrow-small > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e013\";\n}\n.footable.breakpoint.toggle-arrow-small > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e015\";\n}\n.footable.breakpoint.toggle-arrow-circle > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e01b\";\n}\n.footable.breakpoint.toggle-arrow-circle > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e01d\";\n}\n.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e00b\";\n}\n.footable.breakpoint.toggle-arrow-circle-filled > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e00d\";\n}\n.footable.breakpoint.toggle-arrow-tiny > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e01f\";\n}\n.footable.breakpoint.toggle-arrow-tiny > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e021\";\n}\n.footable.breakpoint.toggle-arrow-alt > tbody > tr.footable-detail-show > td > span.footable-toggle:before {\n  content: \"\\e017\";\n}\n.footable.breakpoint.toggle-arrow-alt > tbody > tr > td > span.footable-toggle:before {\n  content: \"\\e019\";\n}\n.footable.breakpoint.toggle-medium > tbody > tr > td > span.footable-toggle {\n  font-size: 18px;\n}\n.footable.breakpoint.toggle-large > tbody > tr > td > span.footable-toggle {\n  font-size: 24px;\n}\n.footable > thead > tr > th {\n  -webkit-touch-callout: none;\n  -webkit-user-select: none;\n  -khtml-user-select: none;\n  -moz-user-select: -moz-none;\n  -ms-user-select: none;\n  user-select: none;\n}\n.footable > thead > tr > th.footable-sortable:hover {\n  cursor: pointer;\n}\n.footable > thead > tr > th.footable-sorted > span.footable-sort-indicator:before {\n  content: \"\\e013\";\n}\n.footable > thead > tr > th.footable-sorted-desc > span.footable-sort-indicator:before {\n  content: \"\\e012\";\n}\n.footable > thead > tr > th > span.footable-sort-indicator {\n  display: inline-block;\n  font-family: 'footable';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  -webkit-font-smoothing: antialiased;\n  padding-left: 5px;\n}\n.footable > thead > tr > th > span.footable-sort-indicator:before {\n  content: \"\\e022\";\n}\n.footable > tfoot .pagination {\n  margin: 0;\n}\n.footable.no-paging .hide-if-no-paging {\n  display: none;\n}\n.footable-row-detail-inner {\n  display: table;\n}\n.footable-row-detail-row {\n  display: table-row;\n  line-height: 1.5em;\n}\n.footable-row-detail-group {\n  display: block;\n  line-height: 2em;\n  font-size: 1.2em;\n  font-weight: bold;\n}\n.footable-row-detail-name {\n  display: table-cell;\n  font-weight: bold;\n  padding-right: 0.5em;\n}\n.footable-row-detail-value {\n  display: table-cell;\n}\n.footable-odd {\n  background-color: #f7f7f7;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/fullcalendar/fullcalendar.css",
    "content": "/*!\n * FullCalendar v1.6.4 Stylesheet\n * Docs & License: http://arshaw.com/fullcalendar/\n * (c) 2013 Adam Shaw\n */\n\n\n.fc {\n\tdirection: ltr;\n\ttext-align: left;\n\t}\n\n.fc table {\n\tborder-collapse: collapse;\n\tborder-spacing: 0;\n\t}\n\nhtml .fc,\n.fc table {\n\tfont-size: 1em;\n\t}\n\n.fc td,\n.fc th {\n\tpadding: 0;\n\tvertical-align: top;\n\t}\n\n\n\n/* Header\n------------------------------------------------------------------------*/\n\n.fc-header td {\n\twhite-space: nowrap;\n\t}\n\n.fc-header-left {\n\twidth: 25%;\n\ttext-align: left;\n\t}\n\n.fc-header-center {\n\ttext-align: center;\n\t}\n\n.fc-header-right {\n\twidth: 25%;\n\ttext-align: right;\n\t}\n\n.fc-header-title {\n\tdisplay: inline-block;\n\tvertical-align: top;\n\t}\n\n.fc-header-title h2 {\n\tmargin-top: 0;\n\twhite-space: nowrap;\n\t}\n\n.fc .fc-header-space {\n\tpadding-left: 10px;\n\t}\n\n.fc-header .fc-button {\n\tmargin-bottom: 1em;\n\tvertical-align: top;\n\t}\n\n/* buttons edges butting together */\n\n.fc-header .fc-button {\n\tmargin-right: -1px;\n\t}\n\n.fc-header .fc-corner-right,  /* non-theme */\n.fc-header .ui-corner-right { /* theme */\n\tmargin-right: 0; /* back to normal */\n\t}\n\n/* button layering (for border precedence) */\n\n.fc-header .fc-state-hover,\n.fc-header .ui-state-hover {\n\tz-index: 2;\n\t}\n\n.fc-header .fc-state-down {\n\tz-index: 3;\n\t}\n\n.fc-header .fc-state-active,\n.fc-header .ui-state-active {\n\tz-index: 4;\n\t}\n\n\n\n/* Content\n------------------------------------------------------------------------*/\n\n.fc-content {\n\tclear: both;\n\tzoom: 1; /* for IE7, gives accurate coordinates for [un]freezeContentHeight */\n\t}\n\n.fc-view {\n\twidth: 100%;\n\toverflow: hidden;\n\t}\n\n\n\n/* Cell Styles\n------------------------------------------------------------------------*/\n\n.fc-widget-header,    /* <th>, usually */\n.fc-widget-content {  /* <td>, usually */\n\tborder: 1px solid #ddd;\n\t}\n\n.fc-state-highlight { /* <td> today cell */ /* TODO: add .fc-today to <th> */\n\tbackground: #fcf8e3;\n\t}\n\n.fc-cell-overlay { /* semi-transparent rectangle while dragging */\n\tbackground: #bce8f1;\n\topacity: .3;\n\tfilter: alpha(opacity=30); /* for IE */\n\t}\n\n\n\n/* Buttons\n------------------------------------------------------------------------*/\n\n.fc-button {\n\tposition: relative;\n\tdisplay: inline-block;\n\tpadding: 0 .6em;\n\toverflow: hidden;\n\theight: 1.9em;\n\tline-height: 1.9em;\n\twhite-space: nowrap;\n\tcursor: pointer;\n\t}\n\n.fc-state-default { /* non-theme */\n\tborder: 1px solid;\n\t}\n\n.fc-state-default.fc-corner-left { /* non-theme */\n\tborder-top-left-radius: 4px;\n\tborder-bottom-left-radius: 4px;\n\t}\n\n.fc-state-default.fc-corner-right { /* non-theme */\n\tborder-top-right-radius: 4px;\n\tborder-bottom-right-radius: 4px;\n\t}\n\n/*\n\tOur default prev/next buttons use HTML entities like &lsaquo; &rsaquo; &laquo; &raquo;\n\tand we'll try to make them look good cross-browser.\n*/\n\n.fc-text-arrow {\n\tmargin: 0 .1em;\n\tfont-size: 2em;\n\tfont-family: \"Courier New\", Courier, monospace;\n\tvertical-align: baseline; /* for IE7 */\n\t}\n\n.fc-button-prev .fc-text-arrow,\n.fc-button-next .fc-text-arrow { /* for &lsaquo; &rsaquo; */\n\tfont-weight: bold;\n\t}\n\n/* icon (for jquery ui) */\n\n.fc-button .fc-icon-wrap {\n\tposition: relative;\n\tfloat: left;\n\ttop: 50%;\n\t}\n\n.fc-button .ui-icon {\n\tposition: relative;\n\tfloat: left;\n\tmargin-top: -50%;\n\t*margin-top: 0;\n\t*top: -50%;\n\t}\n\n/*\n  button states\n  borrowed from twitter bootstrap (http://twitter.github.com/bootstrap/)\n*/\n\n.fc-state-default {\n\tbackground-color: #f5f5f5;\n\tbackground-image: -moz-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#e6e6e6));\n\tbackground-image: -webkit-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: -o-linear-gradient(top, #ffffff, #e6e6e6);\n\tbackground-image: linear-gradient(to bottom, #ffffff, #e6e6e6);\n\tbackground-repeat: repeat-x;\n\tborder-color: #e6e6e6 #e6e6e6 #bfbfbf;\n\tborder-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);\n\tcolor: #333;\n\ttext-shadow: 0 1px 1px rgba(255, 255, 255, 0.75);\n\tbox-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05);\n\t}\n\n.fc-state-hover,\n.fc-state-down,\n.fc-state-active,\n.fc-state-disabled {\n\tcolor: #333333;\n\tbackground-color: #e6e6e6;\n\t}\n\n.fc-state-hover {\n\tcolor: #333333;\n\ttext-decoration: none;\n\tbackground-position: 0 -15px;\n\t-webkit-transition: background-position 0.1s linear;\n\t   -moz-transition: background-position 0.1s linear;\n\t     -o-transition: background-position 0.1s linear;\n\t        transition: background-position 0.1s linear;\n\t}\n\n.fc-state-down,\n.fc-state-active {\n\tbackground-color: #cccccc;\n\tbackground-image: none;\n\toutline: 0;\n\tbox-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05);\n\t}\n\n.fc-state-disabled {\n\tcursor: default;\n\tbackground-image: none;\n\topacity: 0.65;\n\tfilter: alpha(opacity=65);\n\tbox-shadow: none;\n\t}\n\n\n\n/* Global Event Styles\n------------------------------------------------------------------------*/\n\n.fc-event-container > * {\n\tz-index: 8;\n\t}\n\n.fc-event-container > .ui-draggable-dragging,\n.fc-event-container > .ui-resizable-resizing {\n\tz-index: 9;\n\t}\n\n.fc-event {\n\tborder: 1px solid #3a87ad; /* default BORDER color */\n\tbackground-color: #3a87ad; /* default BACKGROUND color */\n\tcolor: #fff;               /* default TEXT color */\n\tfont-size: .85em;\n\tcursor: default;\n\t}\n\na.fc-event {\n\ttext-decoration: none;\n\t}\n\na.fc-event,\n.fc-event-draggable {\n\tcursor: pointer;\n\t}\n\n.fc-rtl .fc-event {\n\ttext-align: right;\n\t}\n\n.fc-event-inner {\n\twidth: 100%;\n\theight: 100%;\n\toverflow: hidden;\n\t}\n\n.fc-event-time,\n.fc-event-title {\n\tpadding: 0 1px;\n\t}\n\n.fc .ui-resizable-handle {\n\tdisplay: block;\n\tposition: absolute;\n\tz-index: 99999;\n\toverflow: hidden; /* hacky spaces (IE6/7) */\n\tfont-size: 300%;  /* */\n\tline-height: 50%; /* */\n\t}\n\n\n\n/* Horizontal Events\n------------------------------------------------------------------------*/\n\n.fc-event-hori {\n\tborder-width: 1px 0;\n\tmargin-bottom: 1px;\n\t}\n\n.fc-ltr .fc-event-hori.fc-event-start,\n.fc-rtl .fc-event-hori.fc-event-end {\n\tborder-left-width: 1px;\n\tborder-top-left-radius: 3px;\n\tborder-bottom-left-radius: 3px;\n\t}\n\n.fc-ltr .fc-event-hori.fc-event-end,\n.fc-rtl .fc-event-hori.fc-event-start {\n\tborder-right-width: 1px;\n\tborder-top-right-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n\t}\n\n/* resizable */\n\n.fc-event-hori .ui-resizable-e {\n\ttop: 0           !important; /* importants override pre jquery ui 1.7 styles */\n\tright: -3px      !important;\n\twidth: 7px       !important;\n\theight: 100%     !important;\n\tcursor: e-resize;\n\t}\n\n.fc-event-hori .ui-resizable-w {\n\ttop: 0           !important;\n\tleft: -3px       !important;\n\twidth: 7px       !important;\n\theight: 100%     !important;\n\tcursor: w-resize;\n\t}\n\n.fc-event-hori .ui-resizable-handle {\n\t_padding-bottom: 14px; /* IE6 had 0 height */\n\t}\n\n\n\n/* Reusable Separate-border Table\n------------------------------------------------------------*/\n\ntable.fc-border-separate {\n\tborder-collapse: separate;\n\t}\n\n.fc-border-separate th,\n.fc-border-separate td {\n\tborder-width: 1px 0 0 1px;\n\t}\n\n.fc-border-separate th.fc-last,\n.fc-border-separate td.fc-last {\n\tborder-right-width: 1px;\n\t}\n\n.fc-border-separate tr.fc-last th,\n.fc-border-separate tr.fc-last td {\n\tborder-bottom-width: 1px;\n\t}\n\n.fc-border-separate tbody tr.fc-first td,\n.fc-border-separate tbody tr.fc-first th {\n\tborder-top-width: 0;\n\t}\n\n\n\n/* Month View, Basic Week View, Basic Day View\n------------------------------------------------------------------------*/\n\n.fc-grid th {\n\ttext-align: center;\n\t}\n\n.fc .fc-week-number {\n\twidth: 22px;\n\ttext-align: center;\n\t}\n\n.fc .fc-week-number div {\n\tpadding: 0 2px;\n\t}\n\n.fc-grid .fc-day-number {\n\tfloat: right;\n\tpadding: 0 2px;\n\t}\n\n.fc-grid .fc-other-month .fc-day-number {\n\topacity: 0.3;\n\tfilter: alpha(opacity=30); /* for IE */\n\t/* opacity with small font can sometimes look too faded\n\t   might want to set the 'color' property instead\n\t   making day-numbers bold also fixes the problem */\n\t}\n\n.fc-grid .fc-day-content {\n\tclear: both;\n\tpadding: 2px 2px 1px; /* distance between events and day edges */\n\t}\n\n/* event styles */\n\n.fc-grid .fc-event-time {\n\tfont-weight: bold;\n\t}\n\n/* right-to-left */\n\n.fc-rtl .fc-grid .fc-day-number {\n\tfloat: left;\n\t}\n\n.fc-rtl .fc-grid .fc-event-time {\n\tfloat: right;\n\t}\n\n\n\n/* Agenda Week View, Agenda Day View\n------------------------------------------------------------------------*/\n\n.fc-agenda table {\n\tborder-collapse: separate;\n\t}\n\n.fc-agenda-days th {\n\ttext-align: center;\n\t}\n\n.fc-agenda .fc-agenda-axis {\n\twidth: 50px;\n\tpadding: 0 4px;\n\tvertical-align: middle;\n\ttext-align: right;\n\twhite-space: nowrap;\n\tfont-weight: normal;\n\t}\n\n.fc-agenda .fc-week-number {\n\tfont-weight: bold;\n\t}\n\n.fc-agenda .fc-day-content {\n\tpadding: 2px 2px 1px;\n\t}\n\n/* make axis border take precedence */\n\n.fc-agenda-days .fc-agenda-axis {\n\tborder-right-width: 1px;\n\t}\n\n.fc-agenda-days .fc-col0 {\n\tborder-left-width: 0;\n\t}\n\n/* all-day area */\n\n.fc-agenda-allday th {\n\tborder-width: 0 1px;\n\t}\n\n.fc-agenda-allday .fc-day-content {\n\tmin-height: 34px; /* TODO: doesnt work well in quirksmode */\n\t_height: 34px;\n\t}\n\n/* divider (between all-day and slots) */\n\n.fc-agenda-divider-inner {\n\theight: 2px;\n\toverflow: hidden;\n\t}\n\n.fc-widget-header .fc-agenda-divider-inner {\n\tbackground: #eee;\n\t}\n\n/* slot rows */\n\n.fc-agenda-slots th {\n\tborder-width: 1px 1px 0;\n\t}\n\n.fc-agenda-slots td {\n\tborder-width: 1px 0 0;\n\tbackground: none;\n\t}\n\n.fc-agenda-slots td div {\n\theight: 20px;\n\t}\n\n.fc-agenda-slots tr.fc-slot0 th,\n.fc-agenda-slots tr.fc-slot0 td {\n\tborder-top-width: 0;\n\t}\n\n.fc-agenda-slots tr.fc-minor th,\n.fc-agenda-slots tr.fc-minor td {\n\tborder-top-style: dotted;\n\t}\n\n.fc-agenda-slots tr.fc-minor th.ui-widget-header {\n\t*border-top-style: solid; /* doesn't work with background in IE6/7 */\n\t}\n\n\n\n/* Vertical Events\n------------------------------------------------------------------------*/\n\n.fc-event-vert {\n\tborder-width: 0 1px;\n\t}\n\n.fc-event-vert.fc-event-start {\n\tborder-top-width: 1px;\n\tborder-top-left-radius: 3px;\n\tborder-top-right-radius: 3px;\n\t}\n\n.fc-event-vert.fc-event-end {\n\tborder-bottom-width: 1px;\n\tborder-bottom-left-radius: 3px;\n\tborder-bottom-right-radius: 3px;\n\t}\n\n.fc-event-vert .fc-event-time {\n\twhite-space: nowrap;\n\tfont-size: 10px;\n\t}\n\n.fc-event-vert .fc-event-inner {\n\tposition: relative;\n\tz-index: 2;\n\t}\n\n.fc-event-vert .fc-event-bg { /* makes the event lighter w/ a semi-transparent overlay  */\n\tposition: absolute;\n\tz-index: 1;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground: #fff;\n\topacity: .25;\n\tfilter: alpha(opacity=25);\n\t}\n\n.fc .ui-draggable-dragging .fc-event-bg, /* TODO: something nicer like .fc-opacity */\n.fc-select-helper .fc-event-bg {\n\tdisplay: none\\9; /* for IE6/7/8. nested opacity filters while dragging don't work */\n\t}\n\n/* resizable */\n\n.fc-event-vert .ui-resizable-s {\n\tbottom: 0        !important; /* importants override pre jquery ui 1.7 styles */\n\twidth: 100%      !important;\n\theight: 8px      !important;\n\toverflow: hidden !important;\n\tline-height: 8px !important;\n\tfont-size: 11px  !important;\n\tfont-family: monospace;\n\ttext-align: center;\n\tcursor: s-resize;\n\t}\n\n.fc-agenda .ui-resizable-resizing { /* TODO: better selector */\n\t_overflow: hidden;\n\t}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/fullcalendar/fullcalendar.print.css",
    "content": "/*!\n * FullCalendar v1.6.4 Print Stylesheet\n * Docs & License: http://arshaw.com/fullcalendar/\n * (c) 2013 Adam Shaw\n */\n\n/*\n * Include this stylesheet on your page to get a more printer-friendly calendar.\n * When including this stylesheet, use the media='print' attribute of the <link> tag.\n * Make sure to include this stylesheet IN ADDITION to the regular fullcalendar.css.\n */\n\n\n /* Events\n-----------------------------------------------------*/\n\n.fc-event {\n\tbackground: #fff !important;\n\tcolor: #000 !important;\n\t}\n\n/* for vertical events */\n\n.fc-event-bg {\n\tdisplay: none !important;\n\t}\n\n.fc-event .ui-resizable-handle {\n\tdisplay: none !important;\n\t}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/iCheck/custom.css",
    "content": "/* iCheck plugin Square skin, green\n----------------------------------- */\n.icheckbox_square-green,\n.iradio_square-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-green {\n    background-position: 0 0;\n}\n.icheckbox_square-green.hover {\n    background-position: -24px 0;\n}\n.icheckbox_square-green.checked {\n    background-position: -48px 0;\n}\n.icheckbox_square-green.disabled {\n    background-position: -72px 0;\n    cursor: default;\n}\n.icheckbox_square-green.checked.disabled {\n    background-position: -96px 0;\n}\n\n.iradio_square-green {\n    background-position: -120px 0;\n}\n.iradio_square-green.hover {\n    background-position: -144px 0;\n}\n.iradio_square-green.checked {\n    background-position: -168px 0;\n}\n.iradio_square-green.disabled {\n    background-position: -192px 0;\n    cursor: default;\n}\n.iradio_square-green.checked.disabled {\n    background-position: -216px 0;\n}\n\n/* HiDPI support */\n@media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) {\n    .icheckbox_square-green,\n    .iradio_square-green {\n        background-image: url(green%402x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/ionRangeSlider/ion.rangeSlider.css",
    "content": "/* Ion.RangeSlider\n// css version 1.8.5\n// by Denis Ineshin | ionden.com\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// RangeSlider */\n\n.irs {\n    position: relative; display: block;\n}\n    .irs-line {\n        position: relative; display: block;\n        overflow: hidden;\n    }\n        .irs-line-left, .irs-line-mid, .irs-line-right {\n            position: absolute; display: block;\n            top: 0;\n        }\n        .irs-line-left {\n            left: 0; width: 10%;\n        }\n        .irs-line-mid {\n            left: 10%; width: 80%;\n        }\n        .irs-line-right {\n            right: 0; width: 10%;\n        }\n\n    .irs-diapason {\n        position: absolute; display: block;\n        left: 0; width: 100%;\n    }\n    .irs-slider {\n        position: absolute; display: block;\n        cursor: default;\n        z-index: 1;\n    }\n        .irs-slider.single {\n            left: 10px;\n        }\n            .irs-slider.single:before {\n                position: absolute; display: block; content: \"\";\n                top: -30%; left: -30%;\n                width: 160%; height: 160%;\n                background: rgba(0,0,0,0.0);\n            }\n        .irs-slider.from {\n            left: 100px;\n        }\n            .irs-slider.from:before {\n                position: absolute; display: block; content: \"\";\n                top: -30%; left: -30%;\n                width: 130%; height: 160%;\n                background: rgba(0,0,0,0.0);\n            }\n        .irs-slider.to {\n            left: 300px;\n        }\n            .irs-slider.to:before {\n                position: absolute; display: block; content: \"\";\n                top: -30%; left: 0;\n                width: 130%; height: 160%;\n                background: rgba(0,0,0,0.0);\n            }\n        .irs-slider.last {\n            z-index: 2;\n        }\n\n    .irs-min {\n        position: absolute; display: block;\n        left: 0;\n        cursor: default;\n    }\n    .irs-max {\n        position: absolute; display: block;\n        right: 0;\n        cursor: default;\n    }\n\n    .irs-from, .irs-to, .irs-single {\n        position: absolute; display: block;\n        top: 0; left: 0;\n        cursor: default;\n        white-space: nowrap;\n    }\n\n\n.irs-grid {\n    position: absolute; display: none;\n    bottom: 0; left: 0;\n    width: 100%; height: 20px;\n}\n.irs-with-grid .irs-grid {\n    display: block;\n}\n    .irs-grid-pol {\n        position: absolute;\n        top: 0; left: 0;\n        width: 1px; height: 8px;\n        background: #000;\n    }\n    .irs-grid-pol.small {\n        height: 4px;\n    }\n    .irs-grid-text {\n        position: absolute;\n        bottom: 0; left: 0;\n        width: 100px;\n        white-space: nowrap;\n        text-align: center;\n        font-size: 9px; line-height: 9px;\n        color: #000;\n    }\n\n.irs-disable-mask {\n    position: absolute; display: block;\n    top: 0; left: 0;\n    width: 100%; height: 100%;\n    cursor: default;\n    background: rgba(0,0,0,0.0);\n    z-index: 2;\n}\n.irs-disabled {\n    opacity: 0.4;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/ionRangeSlider/ion.rangeSlider.skinFlat.css",
    "content": "/* Ion.RangeSlider, Flat UI Skin\n// css version 1.8.5\n// by Denis Ineshin | ionden.com\n// ===================================================================================================================*/\n\n/* =====================================================================================================================\n// Skin details */\n\n.irs-line-mid,\n.irs-line-left,\n.irs-line-right,\n.irs-diapason,\n.irs-slider {\n    background: url(../images/sprite-skin-flat.png) repeat-x;\n}\n\n.irs {\n    height: 40px;\n}\n.irs-with-grid {\n    height: 60px;\n}\n.irs-line {\n    height: 12px; top: 25px;\n}\n    .irs-line-left {\n        height: 12px;\n        background-position: 0 -30px;\n    }\n    .irs-line-mid {\n        height: 12px;\n        background-position: 0 0;\n    }\n    .irs-line-right {\n        height: 12px;\n        background-position: 100% -30px;\n    }\n\n.irs-diapason {\n    height: 12px; top: 25px;\n    background-position: 0 -60px;\n}\n\n.irs-slider {\n    width: 16px; height: 18px;\n    top: 22px;\n    background-position: 0 -90px;\n}\n#irs-active-slider, .irs-slider:hover {\n    background-position: 0 -120px;\n}\n\n.irs-min, .irs-max {\n    color: #999;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    top: 0; padding: 1px 3px;\n    background: #e1e4e9;\n    border-radius: 4px;\n}\n\n.irs-from, .irs-to, .irs-single {\n    color: #fff;\n    font-size: 10px; line-height: 1.333;\n    text-shadow: none;\n    padding: 1px 5px;\n    background: #ed5565;\n    border-radius: 4px;\n}\n.irs-from:after, .irs-to:after, .irs-single:after {\n    position: absolute; display: block; content: \"\";\n    bottom: -6px; left: 50%;\n    width: 0; height: 0;\n    margin-left: -3px;\n    overflow: hidden;\n    border: 3px solid transparent;\n    border-top-color: #ed5565;\n}\n\n\n.irs-grid-pol {\n    background: #e1e4e9;\n}\n.irs-grid-text {\n    color: #999;\n}\n\n.irs-disabled {\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/jqgrid/ui.jqgridffe4.css",
    "content": "/*Grid*/\n.ui-jqgrid {\n\tposition: relative;\n\tborder: 1px solid #ddd;\n    overflow: hidden;\n}\n.ui-jqgrid .ui-jqgrid-view {\n\tposition: relative;\n\tleft:0;\n\ttop: 0;\n\tpadding: 0;\n}\n.ui-jqgrid .ui-common-table {}\n\n/* Caption*/\n.ui-jqgrid .ui-jqgrid-titlebar {\n\tfont-weight: normal;\n\tmin-height:37px;\n\tpadding: 4px 8px;\n\tposition: relative;\n\tmargin-right: 2px;\n\tborder-bottom: 1px solid #ddd; //default\n\n}\n.ui-jqgrid .ui-jqgrid-caption {\n\ttext-align: left;\n}\n.ui-jqgrid .ui-jqgrid-title {\n\tpadding-top: 5px;\n\tvertical-align: middle;\n}\n.ui-jqgrid .ui-jqgrid-titlebar-close {\n\tcolor: inherit;\n\tposition: absolute;\n\ttop: 50%;\n\tmargin: -10px 7px 0 0;\n\tpadding: 1px;\n\tcursor:pointer;\n}\n.ui-jqgrid .ui-jqgrid-titlebar-close span {\n\tdisplay: block;\n\tmargin: 1px;\n}\n.ui-jqgrid .ui-jqgrid-titlebar-close:hover {  }\n\n/* Header*/\n.ui-jqgrid .ui-jqgrid-hdiv {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n}\n.ui-jqgrid .ui-jqgrid-hbox {\n\tfloat: left;\n\tpadding-right: 20px;\n}\n.ui-jqgrid .ui-jqgrid-htable {\n\tmargin-bottom: 0;\n\ttable-layout: fixed;\n\tborder-top:none;\n}\n.ui-jqgrid .ui-jqgrid-htable thead th {\n\toverflow : hidden;\n\tborder-bottom : none;\n\tpadding-right: 2px;\n}\n.ui-jqgrid .ui-jqgrid-htable thead th div {\n\toverflow: hidden;\n\tposition:relative;\n}\n.ui-th-column, .ui-jqgrid .ui-jqgrid-htable th.ui-th-column {\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n.ui-th-column-header,\n.ui-jqgrid .ui-jqgrid-htable th.ui-th-column-header {\n\toverflow: hidden;\n\twhite-space: nowrap;\n}\n.ui-th-ltr, .ui-jqgrid .ui-jqgrid-htable th.ui-th-ltr {}\n.ui-th-rtl, .ui-jqgrid .ui-jqgrid-htable th.ui-th-rtl {text-align: center; }\n.ui-first-th-ltr { }\n.ui-first-th-rtl { }\n.ui-jqgrid tr.jqg-first-row-header th {\n\theight:auto;\n\tborder-top:none;\n\tpadding-bottom: 0;\n\tpadding-top: 0;\n\tborder-bottom: none;\n\tpadding-right: 2px;\n\ttext-align: center;\n}\n.ui-jqgrid tr.jqg-second-row-header th,\n.ui-jqgrid tr.jqg-third--row-header th\n{\n\tborder-top:none;\n\ttext-align: center;\n}\n\n.ui-jqgrid .ui-th-div-ie {\n\twhite-space: nowrap;\n\tzoom :1;\n\theight:17px;\n}\n.ui-jqgrid .ui-jqgrid-resize {\n\theight:20px !important;\n\tposition: relative;\n\tcursor :e-resize;\n\tdisplay: inline;\n\toverflow: hidden;\n}\n.ui-jqgrid .ui-grid-ico-sort {\n\tmargin-left:5px;\n\toverflow:hidden;\n\tposition:absolute;\n\tright: 3px;\n\tfont-size:12px;\n}\n.ui-jqgrid .ui-icon-asc {\n\tmargin-top:-3px;\n}\n.ui-jqgrid .ui-icon-desc {\n\tmargin-top:4px;\n}\n.ui-jqgrid .ui-i-asc {\n\tmargin-top:0;\n}\n.ui-jqgrid .ui-i-desc {\n\tmargin-top:0;\n\tmargin-right:13px;\n}\n.ui-jqgrid .ui-single-sort-asc {\n\tmargin-top:0;\n}\n.ui-jqgrid .ui-single-sort-desc {}\n.ui-jqgrid .ui-jqgrid-sortable {\n\tcursor:pointer;\n}\n.ui-jqgrid tr.ui-search-toolbar th { }\n.ui-jqgrid .ui-search-table td.ui-search-clear { }\n.ui-jqgrid tr.ui-search-toolbar td > input { }\n.ui-jqgrid tr.ui-search-toolbar select {}\n\n/* Body */\n.ui-jqgrid .table-bordered,\n.ui-jqgrid .table-bordered td,\n.ui-jqgrid .table-bordered th.ui-th-ltr\n{\n\tborder-left:0px none !important;\n}\n.ui-jqgrid .table-bordered th.ui-th-rtl\n{\n\tborder-right:0px none !important;\n}\n.ui-jqgrid .table-bordered tr.ui-row-rtl td\n{\n\tborder-right:0px none !important;\n\tborder-left: 1px solid #ddd !important;\n}\ndiv.tablediv > .table-bordered {\n\tborder-left : 1px solid #ddd !important;\n}\n.ui-jqgrid  .ui-jqgrid-bdiv table.table-bordered td {\n\tborder-top: 0px none;\n}\n.ui-jqgrid .ui-jqgrid-bdiv {\n\tposition: relative;\n\tmargin: 0;\n\tpadding:0;\n\toverflow-x:hidden;\n\ttext-align:left;\n}\n.ui-jqgrid .ui-jqgrid-btable {\n\ttable-layout: fixed;\n\tborder-left:none ;\n\tborder-top:none;\n\tmargin-bottom: 0px\n}\n.ui-jqgrid tr.jqgrow {\n\toutline-style: none;\n}\n.ui-jqgrid tr.jqgroup {\n\toutline-style: none;\n}\n.ui-jqgrid tr.jqgrow td {\n\toverflow: hidden;\n\twhite-space: pre;\n\tpadding-right: 2px;\n}\n.ui-jqgrid tr.jqgfirstrow  td {\n\theight:auto;\n\tborder-top:none;\n\tpadding-bottom: 0;\n\tpadding-top: 0;\n\tborder-bottom: none;\n\tpadding-right: 2px;\n}\n.ui-jqgrid tr.jqgroup td { }\n.ui-jqgrid tr.jqfoot td {}\n.ui-jqgrid tr.ui-row-ltr td {}\n.ui-jqgrid tr.ui-row-rtl td {}\n.ui-jqgrid td.jqgrid-rownum { }\n.ui-jqgrid .ui-jqgrid-resize-mark {\n\twidth:2px;\n\tleft:0;\n\tbackground-color:#777;\n\tcursor: e-resize;\n\tcursor: col-resize;\n\tposition:absolute;\n\ttop:0;\n\theight:100px;\n\toverflow:hidden;\n\tdisplay:none;\n\tborder:0 none;\n\tz-index: 99999;\n\n}\n/* Footer */\n.ui-jqgrid .ui-jqgrid-sdiv {\n\tposition: relative;\n\tmargin: 0;\n\tpadding: 0;\n\toverflow: hidden;\n\tborder-left: 0 none !important;\n\tborder-top : 0 none !important;\n\tborder-right : 0 none !important;\n}\n.ui-jqgrid .ui-jqgrid-ftable {\n\ttable-layout:fixed;\n\tmargin-bottom:0;\n}\n\n.ui-jqgrid tr.footrow td {\n\tfont-weight: bold;\n\toverflow: hidden;\n\twhite-space:nowrap;\n\tpadding-right: 2px;\n\tborder-bottom: 0px none;\n}\n.ui-jqgrid tr.footrow-ltr td {\n\ttext-align:left;\n}\n.ui-jqgrid tr.footrow-rtl td {\n\ttext-align:right;\n}\n\n/* Pager*/\n.ui-jqgrid .ui-jqgrid-pager,\n.ui-jqgrid .ui-jqgrid-toppager\n{\n\tborder-left-width: 0px;\n\tborder-top: 1px solid #ddd;\n\tpadding : 4px 0px;\n\tposition: relative;\n\theight: auto;\n\twhite-space: nowrap;\n\toverflow: hidden;\n}\n.ui-jqgrid .ui-jqgrid-toppager {\n\tborder-top-width :0;\n\tborder-bottom : 1px solid #ddd;\n}\n.ui-jqgrid .ui-jqgrid-toppager .ui-pager-control,\n.ui-jqgrid .ui-jqgrid-pager .ui-pager-control {\n\tposition: relative;\n\tborder-left: 0;\n\tborder-bottom: 0;\n\tborder-top: 0;\n\theight: 30px;\n}\n.ui-jqgrid .ui-pg-table {\n\tposition: relative;\n\tpadding: 1px 0;\n\twidth:auto;\n\tmargin: 0;\n}\n.ui-jqgrid .ui-pg-table td {\n\tfont-weight:normal;\n\tvertical-align:middle;\n\tpadding:0px 6px;\n}\n.ui-jqgrid .ui-pg-button  {\n\theight:auto;\n}\n.ui-jqgrid .ui-pg-button span {\n\tdisplay: block;\n\tmargin: 2px;\n\tfloat:left;\n}\n.ui-jqgrid .ui-pg-button:hover {  }\n.ui-jqgrid .ui-disabled:hover {}\n.ui-jqgrid .ui-pg-input,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pg-input {\n\tdisplay: inline;\n\theight:auto;\n\twidth: auto;\n\tfont-size:.9em;\n\tmargin:0;\n\tline-height: inherit;\n\tpadding: 0px 5px\n}\n.ui-jqgrid .ui-pg-selbox,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pg-selbox {\n\tfont-size:.9em;\n\tline-height:inherit;\n\tdisplay:block;\n\theight:22px;\n\tmargin: 0;\n\tpadding: 3px 0px 3px 3px;\n\tborder:none;\n}\n.ui-jqgrid .ui-separator {\n\theight: 18px;\n\tborder : none;\n\tborder-left: 2px solid #ccc ; //default\n}\n.ui-separator-li {\n\theight: 2px;\n\tborder : none;\n\tborder-top: 2px solid #ccc ;  //default\n\tmargin: 0; padding: 0; width:100%\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-pg-div,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div\n{\n\tfloat:left;\n\tposition:relative;\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-pg-button,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pg-button\n{\n\tcursor:pointer;\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-pg-div  span,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pg-div  span\n{\n\tfloat:left;\n}\n.ui-jqgrid td input,\n.ui-jqgrid td select,\n.ui-jqgrid td textarea {\n\tmargin: 0;\n}\n.ui-jqgrid td textarea {\n\twidth:auto;\n\theight:auto;\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-pager-table,\n.ui-jqgrid .ui-jqgrid-toppager .ui-pager-table\n{\n\twidth:100%;\n\ttable-layout:fixed;\n\theight:100%;\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-paging-info,\n.ui-jqgrid .ui-jqgrid-toppager .ui-paging-info\n{\n\tfont-weight: normal;\n\theight:auto;\n\tmargin-top:3px;\n\tmargin-right:4px;\n\tdisplay: inline;\n}\n.ui-jqgrid .ui-jqgrid-pager .ui-paging-pager,\n.ui-jqgrid .ui-jqgrid-toppager .ui-paging-pager\n{\n\ttable-layout:auto;\n\theight:100%;\n}\n.ui-jqgrid .ui-jqgrid-pager .navtable,\n.ui-jqgrid .ui-jqgrid-toppager .navtable\n{\n\tfloat:left;\n\ttable-layout:auto;\n\theight:100%;\n}\n\n/*Subgrid*/\n\n.ui-jqgrid .ui-jqgrid-btable .ui-sgcollapsed span {\n\tdisplay: block;\n}\n.ui-jqgrid .ui-subgrid {\n\tmargin:0;\n\tpadding:0;\n\twidth:100%;\n}\n.ui-jqgrid .ui-subgrid table {\n\ttable-layout: fixed;\n}\n.ui-jqgrid .ui-subgrid tr.ui-subtblcell td {}\n.ui-jqgrid .ui-subgrid td.subgrid-data {\n\tborder-top:  0 none !important;\n}\n.ui-jqgrid .ui-subgrid td.subgrid-cell {\n\tvertical-align: middle\n}\n.ui-jqgrid a.ui-sghref {\n\ttext-decoration: none;\n\tcolor : #010101; //default\n}\n.ui-jqgrid .ui-th-subgrid {height:20px;}\n.tablediv > .row { margin: 0 0}\n/* loading */\n.ui-jqgrid .loading {\n\tposition: absolute;\n\ttop: 45%;\n\tleft: 45%;\n\twidth: auto;\n\tz-index:101;\n\tpadding: 6px;\n\tmargin: 5px;\n\ttext-align: center;\n\tdisplay: none;\n\tborder: 1px solid #ddd;  //default\n\tfont-size: 14px;\n\tbackground-color: #d9edf7;\n}\n.ui-jqgrid .jqgrid-overlay {\n\tdisplay:none;\n\tz-index:100;\n}\n/* IE * html .jqgrid-overlay {width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');} */\n* .jqgrid-overlay iframe {\n\tposition:absolute;\n\ttop:0;\n\tleft:0;\n\tz-index:-1;\n}\n/* IE width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/\n/* end loading div */\n\n/* Toolbar */\n.ui-jqgrid .ui-userdata {\n\tpadding: 4px 0px;\n\toverflow: hidden;\n\tmin-height: 32px;\n}\n.ui-jqgrid .ui-userdata-top {\n\tborder-left-width: 0px;    //default\n\tborder-bottom: 1px solid #ddd;\n}\n.ui-jqgrid .ui-userdata-bottom {\n\tborder-left-width: 0px;    //default\n\tborder-top: 1px solid #ddd;\n}\n/*Modal Window */\n.ui-jqdialog { }\n.ui-jqdialog {\n\tdisplay: none;\n\twidth: 500px;\n\tposition: absolute;\n\t//padding: 5px;\n\toverflow:visible;\n}\n.ui-jqdialog .ui-jqdialog-titlebar {\n\tpadding: .1em .1em;\n\tmin-height: 35px;\n}\n.ui-jqdialog .ui-jqdialog-title {\n\tmargin: .3em 0 .2em;\n\tfont-weight: bold;\n\tpadding-left :6px;\n\tpadding-right:6px;\n}\n.ui-jqdialog .ui-jqdialog-titlebar-close {\n\tposition: absolute;\n\ttop: 0%;\n\tmargin: 3px 5px 0 0;\n\tpadding: 8px;\n\tcursor:pointer;\n}\n\n.ui-jqdialog .ui-jqdialog-titlebar-close span {  }\n.ui-jqdialog .ui-jqdialog-titlebar-close:hover,\n.ui-jqdialog .ui-jqdialog-titlebar-close:focus {\n\tpadding: 8px;\n}\n.ui-jqdialog-content, .ui-jqdialog .ui-jqdialog-content {\n\tborder: 0;\n\tpadding: .3em .2em;\n\tbackground: none;\n\theight:auto;\n}\n.ui-jqdialog .ui-jqconfirm {\n\tpadding: .4em 1em;\n\tborder-width:3px;\n\tposition:absolute;\n\tbottom:10px;\n\tright:10px;\n\toverflow:visible;\n\tdisplay:none;\n\theight:120px;\n\twidth:220px;\n\ttext-align:center;\n\tbackground-color: #fff;\n\tborder-radius: 4px;\n\t-webkit-border-radius: 4px;\n\t-moz-border-radius: 4px;\n}\n.ui-jqdialog>.ui-resizable-se { }\n.ui-jqgrid>.ui-resizable-se { }\n/* end Modal window*/\n/* Form edit */\n.ui-jqdialog-content .FormGrid {\n\tmargin: 0 8px 0 8px;\n\toverflow:auto;\n\tposition:relative;\n}\n.ui-jqdialog-content .EditTable {\n\twidth: 100%;\n\tmargin-bottom:0;\n}\n.ui-jqdialog-content .DelTable {\n\twidth: 100%;\n\tmargin-bottom:0;\n}\n.EditTable td input,\n.EditTable td select,\n.EditTable td textarea {\n\twidth: 98%;\n\tdisplay: inline-block;\n}\n.EditTable td textarea {\n\twidth:auto;\n\theight:auto;\n}\n.EditTable .FormData td {\n\theight:37px !important;\n}\n.ui-jqdialog-content td.EditButton {\n\ttext-align: right;\n\tpadding: 5px 5px 5px 0;\n}\n.ui-jqdialog-content td.navButton {\n\ttext-align: center;\n\tborder-left: 0 none;\n\tborder-top: 0 none;\n\tborder-right: 0 none;\n\tpadding-bottom:5px;\n\tpadding-top:5px;\n}\n.ui-jqdialog-content input.FormElement {\n\tpadding: .5em .3em;\n\tmargin-bottom: 5px\n}\n.ui-jqdialog-content select.FormElement {\n\tpadding:.3em;\n\tmargin-bottom: 3px;\n}\n.ui-jqdialog-content .data-line {\n\tpadding-top:.1em;\n\tborder: 0 none;\n}\n\n.ui-jqdialog-content .CaptionTD {\n\tvertical-align: middle;\n\tborder: 0 none;\n\tpadding: 2px;\n\twhite-space: nowrap;\n}\n.ui-jqdialog-content .DataTD {\n\tpadding: 2px;\n\tborder: 0 none;\n\tvertical-align: top;\n}\n.ui-jqdialog-content .form-view-data {\n\twhite-space:pre\n}\n.fm-button {  }\n.fm-button-icon-left {\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n}\n.fm-button-icon-right {\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n}\n.fm-button-icon-left  {  }\n.fm-button-icon-right  { }\n#nData, #pData {\n\tmargin-left: 4px;\n\tmargin-right: 4px;\n}\n#sData span, #cData span {\n\tmargin-left: 5px;\n}\n/* End Eorm edit */\n/*.ui-jqgrid .edit-cell {}*/\n.ui-jqgrid .selected-row,\ndiv.ui-jqgrid .selected-row td {\n\tfont-style : normal;\n}\n/* inline edit actions button*/\n.ui-inline-del, .ui-inline-cancel {\n    margin-left: 14px;\n}\n.ui-jqgrid .inline-edit-cell {}\n/* Tree Grid */\n.ui-jqgrid .tree-wrap {\n\tfloat: left;\n\tposition: relative;\n\theight: 18px;\n\twhite-space: nowrap;\n\toverflow: hidden;\n}\n.ui-jqgrid .tree-minus {\n\tposition: absolute;\n\theight: 18px;\n\twidth: 18px;\n\toverflow: hidden;\n}\n.ui-jqgrid .tree-plus {\n\tposition: absolute;\n\theight: 18px;\n\twidth: 18px;\n\toverflow: hidden;\n}\n.ui-jqgrid .tree-leaf {\n\tposition: absolute;\n\theight: 18px;\n\twidth: 18px;\n\toverflow: hidden;\n}\n.ui-jqgrid .treeclick {\n\tcursor: pointer;\n}\n/* moda dialog */\n* iframe.jqm {\n\tposition:absolute;\n\ttop:0;\n\tleft:0;\n\tz-index:-1;\n}\n/*\t width: expression(this.parentNode.offsetWidth+'px');height: expression(this.parentNode.offsetHeight+'px');}*/\n.ui-jqgrid-dnd tr td {\n\tborder-right-width: 1px;\n\tborder-right-color: inherit;\n\tborder-right-style: solid;\n\theight:20px\n}\n/* RTL Support */\n.ui-jqgrid .ui-jqgrid-caption-rtl {\n\ttext-align: right;\n}\n.ui-jqgrid .ui-jqgrid-hbox-rtl {\n\tfloat: right;\n\tpadding-left: 20px;\n}\n.ui-jqgrid .ui-jqgrid-resize-ltr {\n\tfloat: right;\n\tmargin: -2px -2px -2px 0;\n\theight:100%;\n}\n.ui-jqgrid .ui-jqgrid-resize-rtl {\n\tfloat: left;\n\tmargin: -2px -2px -2px -0px;\n}\n.ui-jqgrid .ui-sort-rtl {\n\n}\n.ui-jqgrid .tree-wrap-ltr {\n\tfloat: left;\n}\n.ui-jqgrid .tree-wrap-rtl {\n\tfloat: right;\n}\n.ui-jqgrid .ui-ellipsis {\n\t-moz-text-overflow:ellipsis;\n\ttext-overflow:ellipsis;\n}\n/* Toolbar Search Menu. Nav menu */\n.ui-search-menu,\n.ui-nav-menu {\n\tposition: absolute;\n\tpadding: 2px 5px;\n\tz-index:99999;\n}\n.ui-search-menu.ui-menu .ui-menu-item,\n.ui-nav-menu.ui-menu .ui-menu-item\n{\n\tlist-style-image: none;\n\tpadding-right: 0;\n\tpadding-left: 0;\n}\n.ui-search-menu.ui-menu .ui-menu-item a,\n.ui-nav-menu.ui-menu .ui-menu-item a\n{\n\tdisplay: block;\n}\n.ui-search-menu.ui-menu .ui-menu-item a.g-menu-item:hover,\n.ui-nav-menu.ui-menu .ui-menu-item a.g-menu-item:hover\n{\n\tmargin: -1px;\n\tfont-weight: normal;\n}\n.ui-jqgrid .ui-search-table {\n\tpadding: 0;\n\tborder: 0 none;\n\theight:20px;\n\twidth:100%;\n}\n.ui-jqgrid .ui-search-table .ui-search-oper {\n\twidth:20px;\n}\na.g-menu-item, a.soptclass, a.clearsearchclass {\n\tcursor: pointer;\n}\n.ui-jqgrid .ui-jqgrid-view input,\n.ui-jqgrid .ui-jqgrid-view select,\n.ui-jqgrid .ui-jqgrid-view textarea,\n.ui-jqgrid .ui-jqgrid-view button {\n    //font-size: 11px\n}\n.ui-jqgrid .ui-scroll-popup {\n\twidth: 100px;\n}\n.ui-search-table select,\n.ui-search-table input\n{\n\tpadding: 4px 3px;\n}\n\n.ui-disabled {\n\topacity: .35;\n\tfilter:Alpha(Opacity=35); /* support: IE8 */\n\tbackground-image: none;\n}\n.ui-overlay {\n\tposition: fixed;\n\ttop: 0;\n\tleft: 0;\n\twidth: 100%;\n\theight: 100%;\n\tbackground-color: rgba(0,0,0,0.5);\n\topacity: .3;\n\tfilter: Alpha(Opacity=30); /* support: IE8 */\n}\n\n.ui-jqgrid-pager .ui-pg-table .ui-pg-button:hover,\n.ui-jqgrid-toppager .ui-pg-table .ui-pg-button:hover\n{\n\tbackground-color: #ddd;\n}\n.ui-jqgrid-corner  {\n\t border-radius: 5px\n}\n.ui-resizable-handle {\n\t//position: absolute;\n\tdisplay: block;\n\tleft :97%;\n}\n.ui-jqdialog .ui-resizable-se {\n\twidth: 12px;\n\theight: 12px;\n\tright: -5px;\n\tbottom: -5px;\n\tbackground-position: 16px 16px;\n}\n.ui-resizable-se {\n\tcursor: se-resize;\n\twidth: 12px;\n\theight: 12px;\n\tright: 1px;\n\tbottom: 1px;\n}\n.ui-top-corner {\n\tborder-top-left-radius: 5px;\n\tborder-top-right-radius: 5px;\n}\n.ui-bottom-corner {\n\tborder-bottom-left-radius: 5px;\n\tborder-bottom-right-radius: 5px;\n}\n\n.ui-search-table {\n\tmargin-bottom: 0;\n}\n.ui-search-table .columns, .ui-search-table .operators {\n\tpadding-right: 5px;\n}\n.opsel {\n\tfloat :left;\n\twidth : 100px;\n\tmargin-right : 5px;\n}\n.add-group, .add-rule, .delete-group {\n\twidth: 14%;\n\tmargin-right : 5px;\n}\n.delete-rule {\n\twidth : 15px;\n}\nul.ui-search-menu, ul.ui-nav-menu {\n\t list-style-type:  none;\n}\nul.ui-search-menu li a,\nul.ui-nav-menu li a,\n.soptclass,\n.clearsearchclass {\n\ttext-decoration: none;\n\tcolor : #010101;\n}\nul.ui-search-menu li a:hover, ul.ui-nav-menu li a:hover, a.soptclass:hover, a.clearsearchclass:hover {\n\tbackground-color: #ddd;\n\tpadding: 1px 1px;\n\ttext-decoration: none;\n}\nul.ui-search-menu li, ul.ui-nav-menu li {\n\tpadding : 5px 5px;\n}\n.ui-menu-item hr {\n\tmargin-bottom: 0px;\n\tmargin-top:0px;\n}\n\n.searchFilter .ui-search-table td,\n.searchFilter .ui-search-table th\n{\n\tborder-top: 0px none !important;\n}\n\n.searchFilter .queryresult {\n\tmargin-bottom: 5px;\n}\n.searchFilter .queryresult tr td{\n\tborder-top: 0px none;\n}\n.ui-search-label {\n\tpadding-left: 5px;\n}\n\n.frozen-div, .frozen-bdiv {\n\tbackground-color: #fff;\n}\n/*\n.ui-jqgrid .ui-jqgrid-caption,\n.ui-jqgrid .ui-jqgrid-pager,\n.ui-jqgrid .ui-jqgrid-toppager,\n.ui-jqgrid .ui-jqgrid-htable thead th,\n.ui-jqgrid .ui-userdata-top,\n.ui-jqgrid .ui-userdata-bottom,\n.ui-jqgrid .ui-jqgrid-hdiv,\n.ui-jqdialog .ui-jqdialog-titlebar\n{\n    background-image: none, linear-gradient(to bottom, #fff 0px, #e0e0e0 100%);\n    background-repeat: repeat-x;\n    border-color: #ccc;\n    text-shadow: 0 1px 0 #fff;\n}\n*/\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/nouslider/jquery.nouislider.css",
    "content": "\n/* Functional styling;\n * These styles are required for noUiSlider to function.\n * You don't need to change these rules to apply your design.\n */\n.noUi-target,\n.noUi-target * {\n-webkit-touch-callout: none;\n-webkit-user-select: none;\n-ms-touch-action: none;\n-ms-user-select: none;\n-moz-user-select: none;\n-moz-box-sizing: border-box;\n\tbox-sizing: border-box;\n}\n.noUi-base {\n\twidth: 100%;\n\theight: 100%;\n\tposition: relative;\n}\n.noUi-origin {\n\tposition: absolute;\n\tright: 0;\n\ttop: 0;\n\tleft: 0;\n\tbottom: 0;\n}\n.noUi-handle {\n\tposition: relative;\n\tz-index: 1;\n}\n.noUi-stacking .noUi-handle {\n/* This class is applied to the lower origin when\n   its values is > 50%. */\n\tz-index: 10;\n}\n.noUi-stacking + .noUi-origin {\n/* Fix stacking order in IE7, which incorrectly\n   creates a new context for the origins. */\n\t*z-index: -1;\n}\n.noUi-state-tap .noUi-origin {\n-webkit-transition: left 0.3s, top 0.3s;\n\ttransition: left 0.3s, top 0.3s;\n}\n.noUi-state-drag * {\n\tcursor: inherit !important;\n}\n\n/* Slider size and handle placement;\n */\n.noUi-horizontal {\n\theight: 18px;\n}\n.noUi-horizontal .noUi-handle {\n\twidth: 34px;\n\theight: 28px;\n\tleft: -17px;\n\ttop: -6px;\n}\n.noUi-horizontal.noUi-extended {\n\tpadding: 0 15px;\n}\n.noUi-horizontal.noUi-extended .noUi-origin  {\n\tright: -15px;\n}\n.noUi-vertical {\n\twidth: 18px;\n}\n.noUi-vertical .noUi-handle {\n\twidth: 28px;\n\theight: 34px;\n\tleft: -6px;\n\ttop: -17px;\n}\n.noUi-vertical.noUi-extended {\n\tpadding: 15px 0;\n}\n.noUi-vertical.noUi-extended .noUi-origin  {\n\tbottom: -15px;\n}\n\n/* Styling;\n */\n.noUi-background {\n\tbackground: #FAFAFA;\n\tbox-shadow: inset 0 1px 1px #f0f0f0;\n}\n.noUi-connect {\n\tbackground: #3FB8AF;\n\tbox-shadow: inset 0 0 3px rgba(51,51,51,0.45);\n-webkit-transition: background 450ms;\n\ttransition: background 450ms;\n}\n.noUi-origin {\n\tborder-radius: 2px;\n}\n.noUi-target {\n\tborder-radius: 4px;\n\tborder: 1px solid #D3D3D3;\n\tbox-shadow: inset 0 1px 1px #F0F0F0, 0 3px 6px -5px #BBB;\n}\n.noUi-target.noUi-connect {\n\tbox-shadow: inset 0 0 3px rgba(51,51,51,0.45), 0 3px 6px -5px #BBB;\n}\n\n/* Handles and cursors;\n */\n.noUi-dragable {\n\tcursor: w-resize;\n}\n.noUi-vertical .noUi-dragable {\n\tcursor: n-resize;\n}\n.noUi-handle {\n\tborder: 1px solid #D9D9D9;\n\tborder-radius: 3px;\n\tbackground: #FFF;\n\tcursor: default;\n\tbox-shadow: inset 0 0 1px #FFF,\n\t\t\t\tinset 0 1px 7px #EBEBEB,\n\t\t\t\t0 3px 6px -3px #BBB;\n}\n.noUi-active {\n\tbox-shadow: inset 0 0 1px #FFF,\n\t\t\t\tinset 0 1px 7px #DDD,\n\t\t\t\t0 3px 6px -3px #BBB;\n}\n\n/* Handle stripes;\n */\n.noUi-handle:before,\n.noUi-handle:after {\n\tcontent: \"\";\n\tdisplay: block;\n\tposition: absolute;\n\theight: 14px;\n\twidth: 1px;\n\tbackground: #E8E7E6;\n\tleft: 14px;\n\ttop: 6px;\n}\n.noUi-handle:after {\n\tleft: 17px;\n}\n.noUi-vertical .noUi-handle:before,\n.noUi-vertical .noUi-handle:after {\n\twidth: 14px;\n\theight: 1px;\n\tleft: 6px;\n\ttop: 14px;\n}\n.noUi-vertical .noUi-handle:after {\n\ttop: 17px;\n}\n\n/* Disabled state;\n */\n[disabled].noUi-connect,\n[disabled] .noUi-connect {\n\tbackground: #B8B8B8;\n}\n[disabled] .noUi-handle {\n\tcursor: not-allowed;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/plyr/plyr.css",
    "content": "@-webkit-keyframes progress{to{background-position:40px 0}}@keyframes progress{to{background-position:40px 0}}.sr-only{position:absolute!important;clip:rect(1px,1px,1px,1px);padding:0!important;border:0!important;height:1px!important;width:1px!important;overflow:hidden}.player{position:relative;max-width:100%;min-width:290px}.player,.player *,.player ::after,.player ::before{box-sizing:border-box}.player-video-wrapper{position:relative}.player audio,.player video{width:100%;height:auto;vertical-align:middle}.player-video-embed{padding-bottom:56.25%;height:0}.player-video-embed iframe{position:absolute;top:0;left:0;width:100%;height:100%;border:0}.player-captions{display:none;position:absolute;bottom:0;left:0;width:100%;padding:20px 20px 30px;color:#fff;font-size:20px;text-align:center;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.player-captions span{border-radius:2px;padding:3px 10px;background:rgba(0,0,0,.9)}.player-captions span:empty{display:none}@media (min-width:768px){.player-captions{font-size:24px}}.player.captions-active .player-captions{display:block}.player.fullscreen-active .player-captions{font-size:32px}.player-controls{zoom:1;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;position:relative;padding:10px;background:#fff;line-height:1;text-align:center;box-shadow:0 1px 1px rgba(52,63,74,.2)}.player-controls:after,.player-controls:before{content:\"\";display:table}.player-controls:after{clear:both}.player-controls-right{display:block;margin:10px auto 0}@media (min-width:560px){.player-controls-left{float:left}.player-controls-right{float:right;margin-top:0}}.player-controls button{display:inline-block;vertical-align:middle;margin:0 2px;padding:5px 10px;overflow:hidden;border:0;background:0 0;border-radius:3px;cursor:pointer;color:#6b7d86;transition:background .3s ease,color .3s ease,opacity .3s ease}.player-controls button svg{width:18px;height:18px;display:block;fill:currentColor;transition:fill .3s ease}.player-controls button.tab-focus,.player-controls button:hover{background:#3498db;color:#fff}.player-controls button:focus{outline:0}.player-controls .icon-captions-on,.player-controls .icon-exit-fullscreen,.player-controls .icon-muted{display:none}.player-controls .player-time{display:inline-block;vertical-align:middle;margin-left:10px;color:#6b7d86;font-weight:600;font-size:14px;-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased}.player-controls .player-time+.player-time{display:none}@media (min-width:560px){.player-controls .player-time+.player-time{display:inline-block}}.player-controls .player-time+.player-time::before{content:'\\2044';margin-right:10px}.player-tooltip{position:absolute;z-index:2;bottom:100%;margin-bottom:10px;padding:10px 15px;opacity:0;background:#fff;border:1px solid #d6dadd;border-radius:3px;color:#6b7d86;font-size:14px;line-height:1.5;font-weight:600;-webkit-transform:translate(-50%,30px) scale(0);transform:translate(-50%,30px) scale(0);-webkit-transform-origin:50% 100%;transform-origin:50% 100%;transition:-webkit-transform .2s .1s ease,opacity .2s .1s ease;transition:transform .2s .1s ease,opacity .2s .1s ease}.player-tooltip::after{content:'';position:absolute;z-index:1;top:100%;left:50%;display:block;width:10px;height:10px;background:#fff;-webkit-transform:translate(-50%,-50%) rotate(45deg) translateY(1px);transform:translate(-50%,-50%) rotate(45deg) translateY(1px);border:1px solid #d6dadd;border-width:0 1px 1px 0}.player button.tab-focus:focus .player-tooltip,.player button:hover .player-tooltip{opacity:1;-webkit-transform:translate(-50%,0) scale(1);transform:translate(-50%,0) scale(1)}.player button:hover .player-tooltip{z-index:3}.player-progress{position:absolute;bottom:100%;left:0;right:0;width:100%;height:10px;background:rgba(86,93,100,.2)}.player-progress-buffer[value],.player-progress-played[value],.player-progress-seek[type=range]{position:absolute;left:0;top:0;width:100%;height:10px;margin:0;padding:0;vertical-align:top;-webkit-appearance:none;-moz-appearance:none;border:none;background:0 0}.player-progress-buffer[value]::-webkit-progress-bar,.player-progress-played[value]::-webkit-progress-bar{background:0 0}.player-progress-buffer[value]::-webkit-progress-value,.player-progress-played[value]::-webkit-progress-value{background:currentColor}.player-progress-buffer[value]::-moz-progress-bar,.player-progress-played[value]::-moz-progress-bar{background:currentColor}.player-progress-played[value]{z-index:2;color:#3498db}.player-progress-buffer[value]{color:rgba(86,93,100,.25)}.player-progress-seek[type=range]{z-index:4;cursor:pointer;outline:0}.player-progress-seek[type=range]::-webkit-slider-runnable-track{background:0 0;border:0}.player-progress-seek[type=range]::-webkit-slider-thumb{-webkit-appearance:none;background:0 0;border:0;width:20px;height:10px}.player-progress-seek[type=range]::-moz-range-track{background:0 0;border:0}.player-progress-seek[type=range]::-moz-range-thumb{-moz-appearance:none;background:0 0;border:0;width:20px;height:10px}.player-progress-seek[type=range]::-ms-track{color:transparent;background:0 0;border:0}.player-progress-seek[type=range]::-ms-fill-lower,.player-progress-seek[type=range]::-ms-fill-upper{background:0 0;border:0}.player-progress-seek[type=range]::-ms-thumb{background:0 0;border:0;width:20px;height:10px}.player-progress-seek[type=range]:focus{outline:0}.player-progress-seek[type=range]::-moz-focus-outer{border:0}.player.loading .player-progress-buffer{-webkit-animation:progress 1s linear infinite;animation:progress 1s linear infinite;background-size:40px 40px;background-repeat:repeat-x;background-color:rgba(86,93,100,.25);background-image:linear-gradient(-45deg,rgba(0,0,0,.15) 25%,transparent 25%,transparent 50%,rgba(0,0,0,.15) 50%,rgba(0,0,0,.15) 75%,transparent 75%,transparent);color:transparent}.player-controls [data-player=pause],.player.playing .player-controls [data-player=play]{display:none}.player.playing .player-controls [data-player=pause]{display:inline-block}.player-volume[type=range]{display:inline-block;vertical-align:middle;-webkit-appearance:none;-moz-appearance:none;width:100px;margin:0 10px 0 0;padding:0;cursor:pointer;background:0 0;border:none}.player-volume[type=range]::-webkit-slider-runnable-track{height:6px;background:#e6e6e6;border:0;border-radius:3px}.player-volume[type=range]::-webkit-slider-thumb{-webkit-appearance:none;margin-top:-3px;height:12px;width:12px;background:#6b7d86;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume[type=range]::-moz-range-track{height:6px;background:#e6e6e6;border:0;border-radius:3px}.player-volume[type=range]::-moz-range-thumb{height:12px;width:12px;background:#6b7d86;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume[type=range]::-ms-track{height:6px;background:0 0;border-color:transparent;border-width:3px 0;color:transparent}.player-volume[type=range]::-ms-fill-lower,.player-volume[type=range]::-ms-fill-upper{height:6px;background:#e6e6e6;border:0;border-radius:3px}.player-volume[type=range]::-ms-thumb{height:12px;width:12px;background:#6b7d86;border:0;border-radius:6px;transition:background .3s ease;cursor:ew-resize}.player-volume[type=range]:focus{outline:0}.player-volume[type=range]:focus::-webkit-slider-thumb{background:#3498db}.player-volume[type=range]:focus::-moz-range-thumb{background:#3498db}.player-volume[type=range]:focus::-ms-thumb{background:#3498db}.player-audio.ios .player-controls-right,.player.ios .player-volume,.player.ios [data-player=mute]{display:none}.player-audio.ios .player-controls-left{float:none}.player-audio .player-controls{padding-top:20px}.player-audio .player-progress{bottom:auto;top:0;background:#d6dadd}.player-fullscreen,.player.fullscreen-active{position:fixed;top:0;left:0;right:0;bottom:0;height:100%;width:100%;z-index:10000000;background:#000}.player-fullscreen video,.player.fullscreen-active video{height:100%}.player-fullscreen .player-video-wrapper,.player.fullscreen-active .player-video-wrapper{height:100%;width:100%}.player-fullscreen .player-controls,.player.fullscreen-active .player-controls{position:absolute;bottom:0;left:0;right:0}.player-fullscreen.fullscreen-hide-controls.playing .player-controls,.player.fullscreen-active.fullscreen-hide-controls.playing .player-controls{-webkit-transform:translateY(100%) translateY(5px);transform:translateY(100%) translateY(5px);transition:-webkit-transform .3s .2s ease;transition:transform .3s .2s ease}.player-fullscreen.fullscreen-hide-controls.playing.player-hover .player-controls,.player.fullscreen-active.fullscreen-hide-controls.playing.player-hover .player-controls{-webkit-transform:translateY(0);transform:translateY(0)}.player-fullscreen.fullscreen-hide-controls.playing .player-captions,.player.fullscreen-active.fullscreen-hide-controls.playing .player-captions{bottom:5px;transition:bottom .3s .2s ease}.player-fullscreen .player-captions,.player-fullscreen.fullscreen-hide-controls.playing.player-hover .player-captions,.player.fullscreen-active .player-captions,.player.fullscreen-active.fullscreen-hide-controls.playing.player-hover .player-captions{top:auto;bottom:90px}@media (min-width:560px){.player-fullscreen .player-captions,.player-fullscreen.fullscreen-hide-controls.playing.player-hover .player-captions,.player.fullscreen-active .player-captions,.player.fullscreen-active.fullscreen-hide-controls.playing.player-hover .player-captions{bottom:60px}}.player.captions-active .player-controls .icon-captions-on,.player.fullscreen-active .icon-exit-fullscreen,.player.muted .player-controls .icon-muted{display:block}.player [data-player=captions],.player [data-player=fullscreen],.player.captions-active .player-controls .icon-captions-on+svg,.player.fullscreen-active .icon-exit-fullscreen+svg,.player.muted .player-controls .icon-muted+svg{display:none}.player.captions-enabled [data-player=captions],.player.fullscreen-enabled [data-player=fullscreen]{display:inline-block}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/simditor/simditor.css",
    "content": ".simditor {\n  position: relative;\n  border: 1px solid #c9d8db;\n}\n.simditor .simditor-wrapper {\n  position: relative;\n  background: #ffffff;\n  overflow: hidden;\n}\n.simditor .simditor-wrapper .simditor-placeholder {\n  display: none;\n  position: absolute;\n  left: 0;\n  z-index: 0;\n  padding: 22px 15px;\n  font-size: 16px;\n  font-family: arial, sans-serif;\n  line-height: 1.5;\n  color: #999999;\n  background: transparent;\n}\n.simditor .simditor-wrapper.toolbar-floating .simditor-toolbar {\n  position: fixed;\n  top: 0;\n  z-index: 10;\n  box-shadow: 0 0 6px rgba(0, 0, 0, 0.1);\n}\n.simditor .simditor-wrapper .simditor-image-loading {\n  width: 100%;\n  height: 100%;\n  background: rgba(0, 0, 0, 0.4);\n  position: absolute;\n  top: 0;\n  left: 0;\n  z-index: 2;\n}\n.simditor .simditor-wrapper .simditor-image-loading span {\n  width: 30px;\n  height: 30px;\n  background: #ffffff url(../../../img/loading-upload.gif) no-repeat center center;\n  border-radius: 30px;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: -15px 0 0 -15px;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.4);\n}\n.simditor .simditor-wrapper .simditor-image-loading.uploading span {\n  background: #ffffff;\n  color: #333333;\n  font-size: 14px;\n  line-height: 30px;\n  text-align: center;\n}\n.simditor .simditor-body {\n  padding: 22px 15px 40px;\n  min-height: 300px;\n  outline: none;\n  cursor: text;\n  position: relative;\n  z-index: 1;\n  background: transparent;\n}\n.simditor .simditor-body a.selected {\n  background: #b3d4fd;\n}\n.simditor .simditor-body a.simditor-mention {\n  cursor: pointer;\n}\n.simditor .simditor-body .simditor-table {\n  position: relative;\n}\n.simditor .simditor-body .simditor-table.resizing {\n  cursor: col-resize;\n}\n.simditor .simditor-body .simditor-table .simditor-resize-handle {\n  position: absolute;\n  left: 0;\n  top: 0;\n  width: 10px;\n  height: 100%;\n  cursor: col-resize;\n}\n.simditor .simditor-body pre {\n  /*min-height: 28px;*/\n  box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  word-wrap: break-word !important;\n  white-space: pre-wrap !important;\n}\n.simditor .simditor-body img {\n  cursor: pointer;\n}\n.simditor .simditor-body img.selected {\n  box-shadow: 0 0 0 4px #cccccc;\n}\n.simditor .simditor-paste-area,\n.simditor .simditor-clean-paste-area {\n  background: transparent;\n  border: none;\n  outline: none;\n  resize: none;\n  padding: 0;\n  margin: 0;\n}\n.simditor .simditor-toolbar {\n  border-bottom: 1px solid #eeeeee;\n  background: #ffffff;\n  width: 100%;\n}\n.simditor .simditor-toolbar > ul {\n  margin: 0;\n  padding: 0 0 0 6px;\n  list-style: none;\n}\n.simditor .simditor-toolbar > ul:after {\n  content: \"\";\n  display: table;\n  clear: both;\n}\n.simditor .simditor-toolbar > ul > li {\n  position: relative;\n  float: left;\n}\n.simditor .simditor-toolbar > ul > li > span.separator {\n  display: block;\n  float: left;\n  background: #cfcfcf;\n  width: 1px;\n  height: 18px;\n  margin: 11px 15px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item {\n  display: block;\n  float: left;\n  width: 50px;\n  height: 40px;\n  outline: none;\n  color: #333333;\n  font-size: 15px;\n  line-height: 40px;\n  text-align: center;\n  text-decoration: none;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item span {\n  opacity: 0.6;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item span.fa {\n  display: inline;\n  line-height: normal;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item:hover span {\n  opacity: 1;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.active {\n  background: #eeeeee;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.active span {\n  opacity: 1;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.disabled {\n  cursor: default;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.disabled span {\n  opacity: 0.3;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-title span:before {\n  content: \"T\";\n  font-size: 19px;\n  font-weight: bold;\n  font-family: 'Times New Roman';\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-title.active-h1 span:before {\n  content: 'H1';\n  font-size: 18px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-title.active-h2 span:before {\n  content: 'H2';\n  font-size: 18px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-title.active-h3 span:before {\n  content: 'H3';\n  font-size: 18px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-color {\n  font-size: 14px;\n  position: relative;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-color span:before {\n  position: relative;\n  top: -2px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-color:after {\n  content: '';\n  display: block;\n  width: 14px;\n  height: 4px;\n  background: #cccccc;\n  position: absolute;\n  top: 26px;\n  left: 50%;\n  margin: 0 0 0 -7px;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-color:hover:after {\n  background: #999999;\n}\n.simditor .simditor-toolbar > ul > li > .toolbar-item.toolbar-item-color.disabled:after {\n  background: #dfdfdf;\n}\n.simditor .simditor-toolbar > ul > li.menu-on .toolbar-item {\n  position: relative;\n  z-index: 21;\n  background: #ffffff;\n  box-shadow: 0 -3px 3px rgba(0, 0, 0, 0.2);\n}\n.simditor .simditor-toolbar > ul > li.menu-on .toolbar-item span {\n  opacity: 1;\n}\n.simditor .simditor-toolbar > ul > li.menu-on .toolbar-item.toolbar-item-color:after {\n  background: #999999;\n}\n.simditor .simditor-toolbar > ul > li.menu-on .toolbar-menu {\n  display: block;\n}\n.simditor .simditor-toolbar .toolbar-menu {\n  display: none;\n  position: absolute;\n  top: 40px;\n  left: 0;\n  z-index: 20;\n  background: #ffffff;\n  text-align: left;\n  box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);\n}\n.simditor .simditor-toolbar .toolbar-menu ul {\n  min-width: 160px;\n  list-style: none;\n  margin: 0;\n  padding: 10px 1px;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item {\n  display: block;\n  font-size: 16px;\n  line-height: 2em;\n  padding: 0 10px;\n  text-decoration: none;\n  color: #666666;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item:hover {\n  background: #f6f6f6;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item.menu-item-h1 {\n  font-size: 24px;\n  color: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item.menu-item-h2 {\n  font-size: 22px;\n  color: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item.menu-item-h3 {\n  font-size: 20px;\n  color: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item.menu-item-h4 {\n  font-size: 18px;\n  color: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .menu-item.menu-item-h5 {\n  font-size: 16px;\n  color: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu ul > li .separator {\n  display: block;\n  border-top: 1px solid #cccccc;\n  height: 0;\n  line-height: 0;\n  font-size: 0;\n  margin: 6px 0;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color {\n  width: 96px;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list {\n  height: 40px;\n  margin: 10px 6px 6px 10px;\n  padding: 0;\n  min-width: 0;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li {\n  float: left;\n  margin: 0 4px 4px 0;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color {\n  display: block;\n  width: 16px;\n  height: 16px;\n  background: #dfdfdf;\n  border-radius: 2px;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color:hover {\n  opacity: 0.8;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color.font-color-default {\n  background: #333333;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-1 {\n  background: #E33737;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-2 {\n  background: #e28b41;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-3 {\n  background: #c8a732;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-4 {\n  background: #209361;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-5 {\n  background: #418caf;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-6 {\n  background: #aa8773;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-color .color-list li .font-color-7 {\n  background: #999999;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-create-table {\n  background: #ffffff;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-create-table table {\n  border: none;\n  border-collapse: collapse;\n  border-spacing: 0;\n  table-layout: fixed;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-create-table table td {\n  height: 16px;\n  padding: 0;\n  border: 2px solid #ffffff;\n  background: #f3f3f3;\n  cursor: pointer;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-create-table table td:before {\n  width: 16px;\n  display: block;\n  content: \"\";\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-create-table table td.selected {\n  background: #cfcfcf;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-edit-table {\n  display: none;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-table .menu-edit-table ul {\n  min-width: 240px;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-image .menu-item-upload-image {\n  position: relative;\n  overflow: hidden;\n}\n.simditor .simditor-toolbar .toolbar-menu.toolbar-menu-image .menu-item-upload-image input[type=file] {\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  opacity: 0;\n  font-size: 100px;\n  cursor: pointer;\n}\n.simditor .simditor-popover {\n  display: none;\n  padding: 5px 8px 0;\n  background: #ffffff;\n  box-shadow: 0 1px 4px rgba(0, 0, 0, 0.4);\n  border-radius: 2px;\n  position: absolute;\n  z-index: 2;\n}\n.simditor .simditor-popover .settings-field {\n  margin: 0 0 5px 0;\n  font-size: 12px;\n  height: 25px;\n  line-height: 25px;\n}\n.simditor .simditor-popover .settings-field label {\n  margin: 0 8px 0 0;\n  float: left;\n}\n.simditor .simditor-popover .settings-field input[type=text] {\n  float: left;\n  width: 200px;\n  box-sizing: border-box;\n  font-size: 12px;\n}\n.simditor .simditor-popover .settings-field input[type=text].image-size {\n  width: 87px;\n}\n.simditor .simditor-popover .settings-field .times {\n  float: left;\n  width: 26px;\n  font-size: 12px;\n  text-align: center;\n}\n.simditor .simditor-popover.link-popover .btn-unlink, .simditor .simditor-popover.image-popover .btn-upload, .simditor .simditor-popover.image-popover .btn-restore {\n  float: left;\n  margin: 0 0 0 8px;\n  color: #333333;\n  font-size: 14px;\n  outline: 0;\n}\n.simditor .simditor-popover.link-popover .btn-unlink span, .simditor .simditor-popover.image-popover .btn-upload span, .simditor .simditor-popover.image-popover .btn-restore span {\n  opacity: 0.6;\n}\n.simditor .simditor-popover.link-popover .btn-unlink:hover span, .simditor .simditor-popover.image-popover .btn-upload:hover span, .simditor .simditor-popover.image-popover .btn-restore:hover span {\n  opacity: 1;\n}\n.simditor .simditor-popover.image-popover .btn-upload {\n  position: relative;\n  display: inline-block;\n  overflow: hidden;\n}\n.simditor .simditor-popover.image-popover .btn-upload input[type=file] {\n  position: absolute;\n  right: 0px;\n  top: 0px;\n  opacity: 0;\n  height: 100%;\n  width: 28px;\n}\n.simditor.simditor-mobile .simditor-toolbar > ul > li > .toolbar-item {\n  width: 46px;\n}\n.simditor.simditor-mobile .simditor-wrapper.toolbar-floating .simditor-toolbar {\n  position: absolute;\n  top: 0;\n  z-index: 10;\n  box-shadow: 0 0 6px rgba(0, 0, 0, 0.1);\n}\n\n.simditor .simditor-body, .editor-style {\n  font-size: 16px;\n  font-family: arial, sans-serif;\n  line-height: 1.6;\n  color: #333;\n  outline: none;\n  word-wrap: break-word;\n}\n.simditor .simditor-body > :first-child, .editor-style > :first-child {\n  margin-top: 0 !important;\n}\n.simditor .simditor-body a, .editor-style a {\n  color: #4298BA;\n  text-decoration: none;\n  word-break: break-all;\n}\n.simditor .simditor-body a:visited, .editor-style a:visited {\n  color: #4298BA;\n}\n.simditor .simditor-body a:hover, .editor-style a:hover {\n  color: #0F769F;\n}\n.simditor .simditor-body a:active, .editor-style a:active {\n  color: #9E792E;\n}\n.simditor .simditor-body a:hover, .simditor .simditor-body a:active, .editor-style a:hover, .editor-style a:active {\n  outline: 0;\n}\n.simditor .simditor-body h1, .simditor .simditor-body h2, .simditor .simditor-body h3, .simditor .simditor-body h4, .simditor .simditor-body h5, .simditor .simditor-body h6, .editor-style h1, .editor-style h2, .editor-style h3, .editor-style h4, .editor-style h5, .editor-style h6 {\n  font-weight: normal;\n  margin: 40px 0 20px;\n  color: #000000;\n}\n.simditor .simditor-body h1, .editor-style h1 {\n  font-size: 24px;\n}\n.simditor .simditor-body h2, .editor-style h2 {\n  font-size: 22px;\n}\n.simditor .simditor-body h3, .editor-style h3 {\n  font-size: 20px;\n}\n.simditor .simditor-body h4, .editor-style h4 {\n  font-size: 18px;\n}\n.simditor .simditor-body h5, .editor-style h5 {\n  font-size: 16px;\n}\n.simditor .simditor-body h6, .editor-style h6 {\n  font-size: 16px;\n}\n.simditor .simditor-body p, .simditor .simditor-body div, .editor-style p, .editor-style div {\n  word-wrap: break-word;\n  margin: 0 0 15px 0;\n  color: #333;\n  word-wrap: break-word;\n}\n.simditor .simditor-body b, .simditor .simditor-body strong, .editor-style b, .editor-style strong {\n  font-weight: bold;\n}\n.simditor .simditor-body i, .simditor .simditor-body em, .editor-style i, .editor-style em {\n  font-style: italic;\n}\n.simditor .simditor-body u, .editor-style u {\n  text-decoration: underline;\n}\n.simditor .simditor-body strike, .simditor .simditor-body del, .editor-style strike, .editor-style del {\n  text-decoration: line-through;\n}\n.simditor .simditor-body ul, .simditor .simditor-body ol, .editor-style ul, .editor-style ol {\n  list-style: disc outside none;\n  margin: 15px 0;\n  padding: 0 0 0 40px;\n  line-height: 1.6;\n}\n.simditor .simditor-body ul ul, .simditor .simditor-body ul ol, .simditor .simditor-body ol ul, .simditor .simditor-body ol ol, .editor-style ul ul, .editor-style ul ol, .editor-style ol ul, .editor-style ol ol {\n  padding-left: 30px;\n}\n.simditor .simditor-body ul ul, .simditor .simditor-body ol ul, .editor-style ul ul, .editor-style ol ul {\n  list-style: circle outside none;\n}\n.simditor .simditor-body ul ul ul, .simditor .simditor-body ol ul ul, .editor-style ul ul ul, .editor-style ol ul ul {\n  list-style: square outside none;\n}\n.simditor .simditor-body ol, .editor-style ol {\n  list-style: decimal;\n}\n.simditor .simditor-body blockquote, .editor-style blockquote {\n  border-left: 6px solid #ddd;\n  padding: 5px 0 5px 10px;\n  margin: 15px 0 15px 15px;\n}\n.simditor .simditor-body blockquote > :first-child, .editor-style blockquote > :first-child {\n  margin-top: 0;\n}\n.simditor .simditor-body pre, .editor-style pre {\n  padding: 10px 5px 10px 10px;\n  margin: 15px 0;\n  display: block;\n  line-height: 18px;\n  background: #F0F0F0;\n  border-radius: 3px;\n  font-size: 13px;\n  font-family: 'monaco', 'Consolas', \"Liberation Mono\", Courier, monospace;\n  overflow-x: auto;\n  white-space: nowrap;\n}\n.simditor .simditor-body code, .editor-style code {\n  display: inline-block;\n  padding: 0 4px;\n  margin: 0 5px;\n  background: #eeeeee;\n  border-radius: 3px;\n  font-size: 13px;\n  font-family: 'monaco', 'Consolas', \"Liberation Mono\", Courier, monospace;\n}\n.simditor .simditor-body hr, .editor-style hr {\n  display: block;\n  height: 0px;\n  border: 0;\n  border-top: 1px solid #ccc;\n  margin: 15px 0;\n  padding: 0;\n}\n.simditor .simditor-body table, .editor-style table {\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: collapse;\n  border-spacing: 0;\n  margin: 15px 0;\n}\n.simditor .simditor-body table thead, .editor-style table thead {\n  background-color: #f9f9f9;\n}\n.simditor .simditor-body table td, .editor-style table td {\n  min-width: 40px;\n  height: 30px;\n  border: 1px solid #ccc;\n  vertical-align: top;\n  padding: 2px 4px;\n  box-sizing: border-box;\n}\n.simditor .simditor-body table td.active, .editor-style table td.active {\n  background-color: #ffffee;\n}\n.simditor .simditor-body img, .editor-style img {\n  margin: 0 5px;\n  vertical-align: middle;\n}\n.simditor .simditor-body *[data-indent=\"0\"], .editor-style *[data-indent=\"0\"] {\n  margin-left: 0px;\n}\n.simditor .simditor-body *[data-indent=\"1\"], .editor-style *[data-indent=\"1\"] {\n  margin-left: 40px;\n}\n.simditor .simditor-body *[data-indent=\"2\"], .editor-style *[data-indent=\"2\"] {\n  margin-left: 80px;\n}\n.simditor .simditor-body *[data-indent=\"3\"], .editor-style *[data-indent=\"3\"] {\n  margin-left: 120px;\n}\n.simditor .simditor-body *[data-indent=\"4\"], .editor-style *[data-indent=\"4\"] {\n  margin-left: 160px;\n}\n.simditor .simditor-body *[data-indent=\"5\"], .editor-style *[data-indent=\"5\"] {\n  margin-left: 200px;\n}\n.simditor .simditor-body *[data-indent=\"6\"], .editor-style *[data-indent=\"6\"] {\n  margin-left: 240px;\n}\n.simditor .simditor-body *[data-indent=\"7\"], .editor-style *[data-indent=\"7\"] {\n  margin-left: 280px;\n}\n.simditor .simditor-body *[data-indent=\"8\"], .editor-style *[data-indent=\"8\"] {\n  margin-left: 320px;\n}\n.simditor .simditor-body *[data-indent=\"9\"], .editor-style *[data-indent=\"9\"] {\n  margin-left: 360px;\n}\n.simditor .simditor-body *[data-indent=\"10\"], .editor-style *[data-indent=\"10\"] {\n  margin-left: 400px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/steps/jquery.steps.css",
    "content": "/*\n    Common\n*/\n\n.wizard,\n.tabcontrol\n{\n    display: block;\n    width: 100%;\n    overflow: hidden;\n}\n\n.wizard a,\n.tabcontrol a\n{\n    outline: 0;\n}\n\n.wizard ul,\n.tabcontrol ul\n{\n    list-style: none !important;\n    padding: 0;\n    margin: 0;\n}\n\n.wizard ul > li,\n.tabcontrol ul > li\n{\n    display: block;\n    padding: 0;\n}\n\n/* Accessibility */\n.wizard > .steps .current-info,\n.tabcontrol > .steps .current-info\n{\n    position: absolute;\n    left: -999em;\n}\n\n.wizard > .content > .title,\n.tabcontrol > .content > .title\n{\n    position: absolute;\n    left: -999em;\n}\n\n\n\n/*\n    Wizard\n*/\n\n.wizard > .steps\n{\n    position: relative;\n    display: block;\n    width: 100%;\n}\n\n.wizard.vertical > .steps\n{\n    display: inline;\n    float: left;\n    width: 30%;\n}\n\n.wizard > .steps > ul > li\n{\n    width: 25%;\n}\n\n.wizard > .steps > ul > li,\n.wizard > .actions > ul > li\n{\n    float: left;\n}\n\n.wizard.vertical > .steps > ul > li\n{\n    float: none;\n    width: 100%;\n}\n\n.wizard > .steps a,\n.wizard > .steps a:hover,\n.wizard > .steps a:active\n{\n    display: block;\n    width: auto;\n    margin: 0 0.5em 0.5em;\n    padding: 8px;\n    text-decoration: none;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard > .steps .disabled a,\n.wizard > .steps .disabled a:hover,\n.wizard > .steps .disabled a:active\n{\n    background: #eee;\n    color: #aaa;\n    cursor: default;\n}\n\n.wizard > .steps .current a,\n.wizard > .steps .current a:hover,\n.wizard > .steps .current a:active\n{\n    background: #1AB394;\n    color: #fff;\n    cursor: default;\n}\n\n.wizard > .steps .done a,\n.wizard > .steps .done a:hover,\n.wizard > .steps .done a:active\n{\n    background: #6fd1bd;\n    color: #fff;\n}\n\n.wizard > .steps .error a,\n.wizard > .steps .error a:hover,\n.wizard > .steps .error a:active\n{\n    background: #ED5565 ;\n    color: #fff;\n}\n\n.wizard > .content\n{\n    background: #eee;\n    display: block;\n    margin: 5px 5px 10px 5px;\n    min-height: 120px;\n    overflow: hidden;\n    position: relative;\n    width: auto;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard-big.wizard > .content {\n    min-height: 320px;\n}\n.wizard.vertical > .content\n{\n    display: inline;\n    float: left;\n    margin: 0 2.5% 0.5em 2.5%;\n    width: 65%;\n}\n\n.wizard > .content > .body\n{\n    float: left;\n    position: absolute;\n    width: 95%;\n    height: 95%;\n    padding: 2.5%;\n}\n\n.wizard > .content > .body ul\n{\n    list-style: disc !important;\n}\n\n.wizard > .content > .body ul > li\n{\n    display: list-item;\n}\n\n.wizard > .content > .body > iframe\n{\n    border: 0 none;\n    width: 100%;\n    height: 100%;\n}\n\n.wizard > .content > .body input\n{\n    display: block;\n    border: 1px solid #ccc;\n}\n\n.wizard > .content > .body input[type=\"checkbox\"]\n{\n    display: inline-block;\n}\n\n.wizard > .content > .body input.error\n{\n    background: rgb(251, 227, 228);\n    border: 1px solid #fbc2c4;\n    color: #8a1f11;\n}\n\n.wizard > .content > .body label\n{\n    display: inline-block;\n    margin-bottom: 0.5em;\n}\n\n.wizard > .content > .body label.error\n{\n    color: #8a1f11;\n    display: inline-block;\n    margin-left: 1.5em;\n}\n\n.wizard > .actions\n{\n    position: relative;\n    display: block;\n    text-align: right;\n    width: 100%;\n}\n\n.wizard.vertical > .actions\n{\n    display: inline;\n    float: right;\n    margin: 0 2.5%;\n    width: 95%;\n}\n\n.wizard > .actions > ul\n{\n    display: inline-block;\n    text-align: right;\n}\n\n.wizard > .actions > ul > li\n{\n    margin: 0 0.5em;\n}\n\n.wizard.vertical > .actions > ul > li\n{\n    margin: 0 0 0 1em;\n}\n\n.wizard > .actions a,\n.wizard > .actions a:hover,\n.wizard > .actions a:active\n{\n    background: #1AB394;\n    color: #fff;\n    display: block;\n    padding: 0.5em 1em;\n    text-decoration: none;\n\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n}\n\n.wizard > .actions .disabled a,\n.wizard > .actions .disabled a:hover,\n.wizard > .actions .disabled a:active\n{\n    background: #eee;\n    color: #aaa;\n}\n\n.wizard > .loading\n{\n}\n\n.wizard > .loading .spinner\n{\n}\n\n\n\n/*\n    Tabcontrol\n*/\n\n.tabcontrol > .steps\n{\n    position: relative;\n    display: block;\n    width: 100%;\n}\n\n.tabcontrol > .steps > ul\n{\n    position: relative;\n    margin: 6px 0 0 0;\n    top: 1px;\n    z-index: 1;\n}\n\n.tabcontrol > .steps > ul > li\n{\n    float: left;\n    margin: 5px 2px 0 0;\n    padding: 1px;\n\n    -webkit-border-top-left-radius: 5px;\n    -webkit-border-top-right-radius: 5px;\n    -moz-border-radius-topleft: 5px;\n    -moz-border-radius-topright: 5px;\n    border-top-left-radius: 5px;\n    border-top-right-radius: 5px;\n}\n\n.tabcontrol > .steps > ul > li:hover\n{\n    background: #edecec;\n    border: 1px solid #bbb;\n    padding: 0;\n}\n\n.tabcontrol > .steps > ul > li.current\n{\n    background: #fff;\n    border: 1px solid #bbb;\n    border-bottom: 0 none;\n    padding: 0 0 1px 0;\n    margin-top: 0;\n}\n\n.tabcontrol > .steps > ul > li > a\n{\n    color: #5f5f5f;\n    display: inline-block;\n    border: 0 none;\n    margin: 0;\n    padding: 10px 30px;\n    text-decoration: none;\n}\n\n.tabcontrol > .steps > ul > li > a:hover\n{\n    text-decoration: none;\n}\n\n.tabcontrol > .steps > ul > li.current > a\n{\n    padding: 15px 30px 10px 30px;\n}\n\n.tabcontrol > .content\n{\n    position: relative;\n    display: inline-block;\n    width: 100%;\n    height: 35em;\n    overflow: hidden;\n    border-top: 1px solid #bbb;\n    padding-top: 20px;\n}\n\n.tabcontrol > .content > .body\n{\n    float: left;\n    position: absolute;\n    width: 95%;\n    height: 95%;\n    padding: 2.5%;\n}\n\n.tabcontrol > .content > .body ul\n{\n    list-style: disc !important;\n}\n\n.tabcontrol > .content > .body ul > li\n{\n    display: list-item;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/summernote/summernote-bs3.css",
    "content": ".note-editor {\n  /*! normalize.css v2.1.3 | MIT License | git.io/normalize */\n\n}\n.note-editor article,\n.note-editor aside,\n.note-editor details,\n.note-editor figcaption,\n.note-editor figure,\n.note-editor footer,\n.note-editor header,\n.note-editor hgroup,\n.note-editor main,\n.note-editor nav,\n.note-editor section,\n.note-editor summary {\n  display: block;\n}\n.note-editor audio,\n.note-editor canvas,\n.note-editor video {\n  display: inline-block;\n}\n.note-editor audio:not([controls]) {\n  display: none;\n  height: 0;\n}\n.note-editor [hidden],\n.note-editor template {\n  display: none;\n}\n.note-editor html {\n  font-family: sans-serif;\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n}\n.note-editor body {\n  margin: 0;\n}\n.note-editor a {\n  background: transparent;\n}\n.note-editor a:focus {\n  outline: thin dotted;\n}\n.note-editor a:active,\n.note-editor a:hover {\n  outline: 0;\n}\n.note-editor h1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n.note-editor abbr[title] {\n  border-bottom: 1px dotted;\n}\n.note-editor b,\n.note-editor strong {\n  font-weight: bold;\n}\n.note-editor dfn {\n  font-style: italic;\n}\n.note-editor hr {\n  -moz-box-sizing: content-box;\n  box-sizing: content-box;\n  height: 0;\n}\n.note-editor mark {\n  background: #ff0;\n  color: #000;\n}\n.note-editor code,\n.note-editor kbd,\n.note-editor pre,\n.note-editor samp {\n  font-family: monospace, serif;\n  font-size: 1em;\n}\n.note-editor pre {\n  white-space: pre-wrap;\n}\n.note-editor q {\n  quotes: \"\\201C\" \"\\201D\" \"\\2018\" \"\\2019\";\n}\n.note-editor small {\n  font-size: 80%;\n}\n.note-editor sub,\n.note-editor sup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n.note-editor sup {\n  top: -0.5em;\n}\n.note-editor sub {\n  bottom: -0.25em;\n}\n.note-editor img {\n  border: 0;\n}\n.note-editor svg:not(:root) {\n  overflow: hidden;\n}\n.note-editor figure {\n  margin: 0;\n}\n.note-editor fieldset {\n  border: 1px solid #c0c0c0;\n  margin: 0 2px;\n  padding: 0.35em 0.625em 0.75em;\n}\n.note-editor legend {\n  border: 0;\n  padding: 0;\n}\n.note-editor button,\n.note-editor input,\n.note-editor select,\n.note-editor textarea {\n  font-family: inherit;\n  font-size: 100%;\n  margin: 0;\n}\n.note-editor button,\n.note-editor input {\n  line-height: normal;\n}\n.note-editor button,\n.note-editor select {\n  text-transform: none;\n}\n.note-editor button,\n.note-editor html input[type=\"button\"],\n.note-editor input[type=\"reset\"],\n.note-editor input[type=\"submit\"] {\n  -webkit-appearance: button;\n  cursor: pointer;\n}\n.note-editor button[disabled],\n.note-editor html input[disabled] {\n  cursor: default;\n}\n.note-editor input[type=\"checkbox\"],\n.note-editor input[type=\"radio\"] {\n  box-sizing: border-box;\n  padding: 0;\n}\n.note-editor input[type=\"search\"] {\n  -webkit-appearance: textfield;\n  -moz-box-sizing: content-box;\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n}\n.note-editor input[type=\"search\"]::-webkit-search-cancel-button,\n.note-editor input[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n.note-editor button::-moz-focus-inner,\n.note-editor input::-moz-focus-inner {\n  border: 0;\n  padding: 0;\n}\n.note-editor textarea {\n  overflow: auto;\n  vertical-align: top;\n}\n.note-editor table {\n  border-collapse: collapse;\n  border-spacing: 0;\n}\n@media print {\n  .note-editor * {\n    text-shadow: none !important;\n    color: #000 !important;\n    background: transparent !important;\n    box-shadow: none !important;\n  }\n  .note-editor a,\n  .note-editor a:visited {\n    text-decoration: underline;\n  }\n  .note-editor a[href]:after {\n    content: \" (\" attr(href) \")\";\n  }\n  .note-editor abbr[title]:after {\n    content: \" (\" attr(title) \")\";\n  }\n  .note-editor .ir a:after,\n  .note-editor a[href^=\"javascript:\"]:after,\n  .note-editor a[href^=\"#\"]:after {\n    content: \"\";\n  }\n  .note-editor pre,\n  .note-editor blockquote {\n    border: 1px solid #999;\n    page-break-inside: avoid;\n  }\n  .note-editor thead {\n    display: table-header-group;\n  }\n  .note-editor tr,\n  .note-editor img {\n    page-break-inside: avoid;\n  }\n  .note-editor img {\n    max-width: 100% !important;\n  }\n  @page  {\n    margin: 2cm .5cm;\n  }\n  .note-editor p,\n  .note-editor h2,\n  .note-editor h3 {\n    orphans: 3;\n    widows: 3;\n  }\n  .note-editor h2,\n  .note-editor h3 {\n    page-break-after: avoid;\n  }\n  .note-editor .navbar {\n    display: none;\n  }\n  .note-editor .table td,\n  .note-editor .table th {\n    background-color: #fff !important;\n  }\n  .note-editor .btn > .caret,\n  .note-editor .dropup > .btn > .caret {\n    border-top-color: #000 !important;\n  }\n  .note-editor .label {\n    border: 1px solid #000;\n  }\n  .note-editor .table {\n    border-collapse: collapse !important;\n  }\n  .note-editor .table-bordered th,\n  .note-editor .table-bordered td {\n    border: 1px solid #ddd !important;\n  }\n}\n.note-editor *,\n.note-editor *:before,\n.note-editor *:after {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.note-editor html {\n  font-size: 62.5%;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n.note-editor body {\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.note-editor input,\n.note-editor button,\n.note-editor select,\n.note-editor textarea {\n  font-family: inherit;\n  font-size: inherit;\n  line-height: inherit;\n}\n.note-editor a {\n  color: #428bca;\n  text-decoration: none;\n}\n.note-editor a:hover,\n.note-editor a:focus {\n  color: #2a6496;\n  text-decoration: underline;\n}\n.note-editor a:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.note-editor img {\n  vertical-align: middle;\n}\n.note-editor .img-responsive {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.note-editor .img-rounded {\n  border-radius: 6px;\n}\n.note-editor .img-thumbnail {\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  display: inline-block;\n  max-width: 100%;\n  height: auto;\n}\n.note-editor .img-circle {\n  border-radius: 50%;\n}\n.note-editor hr {\n  margin-top: 20px;\n  margin-bottom: 20px;\n  border: 0;\n  border-top: 1px solid #eeeeee;\n}\n.note-editor .sr-only {\n  position: absolute;\n  width: 1px;\n  height: 1px;\n  margin: -1px;\n  padding: 0;\n  overflow: hidden;\n  clip: rect(0, 0, 0, 0);\n  border: 0;\n}\n.note-editor p {\n  margin: 0 0 10px;\n}\n.note-editor .lead {\n  margin-bottom: 20px;\n  font-size: 16px;\n  font-weight: 200;\n  line-height: 1.4;\n}\n@media (min-width: 768px) {\n  .note-editor .lead {\n    font-size: 21px;\n  }\n}\n.note-editor small,\n.note-editor .small {\n  font-size: 85%;\n}\n.note-editor cite {\n  font-style: normal;\n}\n.note-editor .text-muted {\n  color: #999999;\n}\n.note-editor .text-primary {\n  color: #428bca;\n}\n.note-editor .text-primary:hover {\n  color: #3071a9;\n}\n.note-editor .text-warning {\n  color: #c09853;\n}\n.note-editor .text-warning:hover {\n  color: #a47e3c;\n}\n.note-editor .text-danger {\n  color: #b94a48;\n}\n.note-editor .text-danger:hover {\n  color: #953b39;\n}\n.note-editor .text-success {\n  color: #468847;\n}\n.note-editor .text-success:hover {\n  color: #356635;\n}\n.note-editor .text-info {\n  color: #3a87ad;\n}\n.note-editor .text-info:hover {\n  color: #2d6987;\n}\n.note-editor .text-left {\n  text-align: left;\n}\n.note-editor .text-right {\n  text-align: right;\n}\n.note-editor .text-center {\n  text-align: center;\n}\n.note-editor h1,\n.note-editor h2,\n.note-editor h3,\n.note-editor h4,\n.note-editor h5,\n.note-editor h6,\n.note-editor .h1,\n.note-editor .h2,\n.note-editor .h3,\n.note-editor .h4,\n.note-editor .h5,\n.note-editor .h6 {\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  font-weight: 500;\n  line-height: 1.1;\n  color: inherit;\n}\n.note-editor h1 small,\n.note-editor h2 small,\n.note-editor h3 small,\n.note-editor h4 small,\n.note-editor h5 small,\n.note-editor h6 small,\n.note-editor .h1 small,\n.note-editor .h2 small,\n.note-editor .h3 small,\n.note-editor .h4 small,\n.note-editor .h5 small,\n.note-editor .h6 small,\n.note-editor h1 .small,\n.note-editor h2 .small,\n.note-editor h3 .small,\n.note-editor h4 .small,\n.note-editor h5 .small,\n.note-editor h6 .small,\n.note-editor .h1 .small,\n.note-editor .h2 .small,\n.note-editor .h3 .small,\n.note-editor .h4 .small,\n.note-editor .h5 .small,\n.note-editor .h6 .small {\n  font-weight: normal;\n  line-height: 1;\n  color: #999999;\n}\n.note-editor h1,\n.note-editor h2,\n.note-editor h3 {\n  margin-top: 20px;\n  margin-bottom: 10px;\n}\n.note-editor h1 small,\n.note-editor h2 small,\n.note-editor h3 small,\n.note-editor h1 .small,\n.note-editor h2 .small,\n.note-editor h3 .small {\n  font-size: 65%;\n}\n.note-editor h4,\n.note-editor h5,\n.note-editor h6 {\n  margin-top: 10px;\n  margin-bottom: 10px;\n}\n.note-editor h4 small,\n.note-editor h5 small,\n.note-editor h6 small,\n.note-editor h4 .small,\n.note-editor h5 .small,\n.note-editor h6 .small {\n  font-size: 75%;\n}\n.note-editor h1,\n.note-editor .h1 {\n  font-size: 36px;\n}\n.note-editor h2,\n.note-editor .h2 {\n  font-size: 30px;\n}\n.note-editor h3,\n.note-editor .h3 {\n  font-size: 24px;\n}\n.note-editor h4,\n.note-editor .h4 {\n  font-size: 18px;\n}\n.note-editor h5,\n.note-editor .h5 {\n  font-size: 14px;\n}\n.note-editor h6,\n.note-editor .h6 {\n  font-size: 12px;\n}\n.note-editor .page-header {\n  padding-bottom: 9px;\n  margin: 40px 0 20px;\n  border-bottom: 1px solid #eeeeee;\n}\n.note-editor ul,\n.note-editor ol {\n  margin-top: 0;\n  margin-bottom: 10px;\n}\n.note-editor ul ul,\n.note-editor ol ul,\n.note-editor ul ol,\n.note-editor ol ol {\n  margin-bottom: 0;\n}\n.note-editor .list-unstyled {\n  padding-left: 0;\n  list-style: none;\n}\n.note-editor .list-inline {\n  padding-left: 0;\n  list-style: none;\n}\n.note-editor .list-inline > li {\n  display: inline-block;\n  padding-left: 5px;\n  padding-right: 5px;\n}\n.note-editor dl {\n  margin-bottom: 20px;\n}\n.note-editor dt,\n.note-editor dd {\n  line-height: 1.428571429;\n}\n.note-editor dt {\n  font-weight: bold;\n}\n.note-editor dd {\n  margin-left: 0;\n}\n@media (min-width: 768px) {\n  .note-editor .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  .note-editor .dl-horizontal dd {\n    margin-left: 180px;\n  }\n  .note-editor .dl-horizontal dd:before,\n  .note-editor .dl-horizontal dd:after {\n    content: \" \";\n    /* 1 */\n\n    display: table;\n    /* 2 */\n\n  }\n  .note-editor .dl-horizontal dd:after {\n    clear: both;\n  }\n  .note-editor .dl-horizontal dd:before,\n  .note-editor .dl-horizontal dd:after {\n    content: \" \";\n    /* 1 */\n\n    display: table;\n    /* 2 */\n\n  }\n  .note-editor .dl-horizontal dd:after {\n    clear: both;\n  }\n}\n.note-editor abbr[title],\n.note-editor abbr[data-original-title] {\n  cursor: help;\n  border-bottom: 1px dotted #999999;\n}\n.note-editor abbr.initialism {\n  font-size: 90%;\n  text-transform: uppercase;\n}\n.note-editor blockquote {\n  padding: 10px 20px;\n  margin: 0 0 20px;\n  border-left: 5px solid #eeeeee;\n}\n.note-editor blockquote p {\n  font-size: 17.5px;\n  font-weight: 300;\n  line-height: 1.25;\n}\n.note-editor blockquote p:last-child {\n  margin-bottom: 0;\n}\n.note-editor blockquote small {\n  display: block;\n  line-height: 1.428571429;\n  color: #999999;\n}\n.note-editor blockquote small:before {\n  content: '\\2014 \\00A0';\n}\n.note-editor blockquote.pull-right {\n  padding-right: 15px;\n  padding-left: 0;\n  border-right: 5px solid #eeeeee;\n  border-left: 0;\n}\n.note-editor blockquote.pull-right p,\n.note-editor blockquote.pull-right small,\n.note-editor blockquote.pull-right .small {\n  text-align: right;\n}\n.note-editor blockquote.pull-right small:before,\n.note-editor blockquote.pull-right .small:before {\n  content: '';\n}\n.note-editor blockquote.pull-right small:after,\n.note-editor blockquote.pull-right .small:after {\n  content: '\\00A0 \\2014';\n}\n.note-editor blockquote:before,\n.note-editor blockquote:after {\n  content: \"\";\n}\n.note-editor address {\n  margin-bottom: 20px;\n  font-style: normal;\n  line-height: 1.428571429;\n}\n.note-editor code,\n.note-editor kdb,\n.note-editor pre,\n.note-editor samp {\n  font-family: Monaco, Menlo, Consolas, \"Courier New\", monospace;\n}\n.note-editor code {\n  padding: 2px 4px;\n  font-size: 90%;\n  color: #c7254e;\n  background-color: #f9f2f4;\n  white-space: nowrap;\n  border-radius: 4px;\n}\n.note-editor pre {\n  display: block;\n  padding: 9.5px;\n  margin: 0 0 10px;\n  font-size: 13px;\n  line-height: 1.428571429;\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: 4px;\n}\n.note-editor pre 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.note-editor .pre-scrollable {\n  max-height: 340px;\n  overflow-y: scroll;\n}\n.note-editor .container {\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n.note-editor .container:before,\n.note-editor .container:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .container:after {\n  clear: both;\n}\n.note-editor .container:before,\n.note-editor .container:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .container:after {\n  clear: both;\n}\n.note-editor .row {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.note-editor .row:before,\n.note-editor .row:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .row:after {\n  clear: both;\n}\n.note-editor .row:before,\n.note-editor .row:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .row:after {\n  clear: both;\n}\n.note-editor .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.note-editor .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 {\n  float: left;\n}\n.note-editor .col-xs-12 {\n  width: 100%;\n}\n.note-editor .col-xs-11 {\n  width: 91.66666666666666%;\n}\n.note-editor .col-xs-10 {\n  width: 83.33333333333334%;\n}\n.note-editor .col-xs-9 {\n  width: 75%;\n}\n.note-editor .col-xs-8 {\n  width: 66.66666666666666%;\n}\n.note-editor .col-xs-7 {\n  width: 58.333333333333336%;\n}\n.note-editor .col-xs-6 {\n  width: 50%;\n}\n.note-editor .col-xs-5 {\n  width: 41.66666666666667%;\n}\n.note-editor .col-xs-4 {\n  width: 33.33333333333333%;\n}\n.note-editor .col-xs-3 {\n  width: 25%;\n}\n.note-editor .col-xs-2 {\n  width: 16.666666666666664%;\n}\n.note-editor .col-xs-1 {\n  width: 8.333333333333332%;\n}\n.note-editor .col-xs-pull-12 {\n  right: 100%;\n}\n.note-editor .col-xs-pull-11 {\n  right: 91.66666666666666%;\n}\n.note-editor .col-xs-pull-10 {\n  right: 83.33333333333334%;\n}\n.note-editor .col-xs-pull-9 {\n  right: 75%;\n}\n.note-editor .col-xs-pull-8 {\n  right: 66.66666666666666%;\n}\n.note-editor .col-xs-pull-7 {\n  right: 58.333333333333336%;\n}\n.note-editor .col-xs-pull-6 {\n  right: 50%;\n}\n.note-editor .col-xs-pull-5 {\n  right: 41.66666666666667%;\n}\n.note-editor .col-xs-pull-4 {\n  right: 33.33333333333333%;\n}\n.note-editor .col-xs-pull-3 {\n  right: 25%;\n}\n.note-editor .col-xs-pull-2 {\n  right: 16.666666666666664%;\n}\n.note-editor .col-xs-pull-1 {\n  right: 8.333333333333332%;\n}\n.note-editor .col-xs-push-12 {\n  left: 100%;\n}\n.note-editor .col-xs-push-11 {\n  left: 91.66666666666666%;\n}\n.note-editor .col-xs-push-10 {\n  left: 83.33333333333334%;\n}\n.note-editor .col-xs-push-9 {\n  left: 75%;\n}\n.note-editor .col-xs-push-8 {\n  left: 66.66666666666666%;\n}\n.note-editor .col-xs-push-7 {\n  left: 58.333333333333336%;\n}\n.note-editor .col-xs-push-6 {\n  left: 50%;\n}\n.note-editor .col-xs-push-5 {\n  left: 41.66666666666667%;\n}\n.note-editor .col-xs-push-4 {\n  left: 33.33333333333333%;\n}\n.note-editor .col-xs-push-3 {\n  left: 25%;\n}\n.note-editor .col-xs-push-2 {\n  left: 16.666666666666664%;\n}\n.note-editor .col-xs-push-1 {\n  left: 8.333333333333332%;\n}\n.note-editor .col-xs-offset-12 {\n  margin-left: 100%;\n}\n.note-editor .col-xs-offset-11 {\n  margin-left: 91.66666666666666%;\n}\n.note-editor .col-xs-offset-10 {\n  margin-left: 83.33333333333334%;\n}\n.note-editor .col-xs-offset-9 {\n  margin-left: 75%;\n}\n.note-editor .col-xs-offset-8 {\n  margin-left: 66.66666666666666%;\n}\n.note-editor .col-xs-offset-7 {\n  margin-left: 58.333333333333336%;\n}\n.note-editor .col-xs-offset-6 {\n  margin-left: 50%;\n}\n.note-editor .col-xs-offset-5 {\n  margin-left: 41.66666666666667%;\n}\n.note-editor .col-xs-offset-4 {\n  margin-left: 33.33333333333333%;\n}\n.note-editor .col-xs-offset-3 {\n  margin-left: 25%;\n}\n.note-editor .col-xs-offset-2 {\n  margin-left: 16.666666666666664%;\n}\n.note-editor .col-xs-offset-1 {\n  margin-left: 8.333333333333332%;\n}\n@media (min-width: 768px) {\n  .note-editor .container {\n    width: 750px;\n  }\n  .note-editor .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 {\n    float: left;\n  }\n  .note-editor .col-sm-12 {\n    width: 100%;\n  }\n  .note-editor .col-sm-11 {\n    width: 91.66666666666666%;\n  }\n  .note-editor .col-sm-10 {\n    width: 83.33333333333334%;\n  }\n  .note-editor .col-sm-9 {\n    width: 75%;\n  }\n  .note-editor .col-sm-8 {\n    width: 66.66666666666666%;\n  }\n  .note-editor .col-sm-7 {\n    width: 58.333333333333336%;\n  }\n  .note-editor .col-sm-6 {\n    width: 50%;\n  }\n  .note-editor .col-sm-5 {\n    width: 41.66666666666667%;\n  }\n  .note-editor .col-sm-4 {\n    width: 33.33333333333333%;\n  }\n  .note-editor .col-sm-3 {\n    width: 25%;\n  }\n  .note-editor .col-sm-2 {\n    width: 16.666666666666664%;\n  }\n  .note-editor .col-sm-1 {\n    width: 8.333333333333332%;\n  }\n  .note-editor .col-sm-pull-12 {\n    right: 100%;\n  }\n  .note-editor .col-sm-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .note-editor .col-sm-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .note-editor .col-sm-pull-9 {\n    right: 75%;\n  }\n  .note-editor .col-sm-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .note-editor .col-sm-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .note-editor .col-sm-pull-6 {\n    right: 50%;\n  }\n  .note-editor .col-sm-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .note-editor .col-sm-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .note-editor .col-sm-pull-3 {\n    right: 25%;\n  }\n  .note-editor .col-sm-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .note-editor .col-sm-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .note-editor .col-sm-push-12 {\n    left: 100%;\n  }\n  .note-editor .col-sm-push-11 {\n    left: 91.66666666666666%;\n  }\n  .note-editor .col-sm-push-10 {\n    left: 83.33333333333334%;\n  }\n  .note-editor .col-sm-push-9 {\n    left: 75%;\n  }\n  .note-editor .col-sm-push-8 {\n    left: 66.66666666666666%;\n  }\n  .note-editor .col-sm-push-7 {\n    left: 58.333333333333336%;\n  }\n  .note-editor .col-sm-push-6 {\n    left: 50%;\n  }\n  .note-editor .col-sm-push-5 {\n    left: 41.66666666666667%;\n  }\n  .note-editor .col-sm-push-4 {\n    left: 33.33333333333333%;\n  }\n  .note-editor .col-sm-push-3 {\n    left: 25%;\n  }\n  .note-editor .col-sm-push-2 {\n    left: 16.666666666666664%;\n  }\n  .note-editor .col-sm-push-1 {\n    left: 8.333333333333332%;\n  }\n  .note-editor .col-sm-offset-12 {\n    margin-left: 100%;\n  }\n  .note-editor .col-sm-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .note-editor .col-sm-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .note-editor .col-sm-offset-9 {\n    margin-left: 75%;\n  }\n  .note-editor .col-sm-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .note-editor .col-sm-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .note-editor .col-sm-offset-6 {\n    margin-left: 50%;\n  }\n  .note-editor .col-sm-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .note-editor .col-sm-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .note-editor .col-sm-offset-3 {\n    margin-left: 25%;\n  }\n  .note-editor .col-sm-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .note-editor .col-sm-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n@media (min-width: 992px) {\n  .note-editor .container {\n    width: 970px;\n  }\n  .note-editor .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 {\n    float: left;\n  }\n  .note-editor .col-md-12 {\n    width: 100%;\n  }\n  .note-editor .col-md-11 {\n    width: 91.66666666666666%;\n  }\n  .note-editor .col-md-10 {\n    width: 83.33333333333334%;\n  }\n  .note-editor .col-md-9 {\n    width: 75%;\n  }\n  .note-editor .col-md-8 {\n    width: 66.66666666666666%;\n  }\n  .note-editor .col-md-7 {\n    width: 58.333333333333336%;\n  }\n  .note-editor .col-md-6 {\n    width: 50%;\n  }\n  .note-editor .col-md-5 {\n    width: 41.66666666666667%;\n  }\n  .note-editor .col-md-4 {\n    width: 33.33333333333333%;\n  }\n  .note-editor .col-md-3 {\n    width: 25%;\n  }\n  .note-editor .col-md-2 {\n    width: 16.666666666666664%;\n  }\n  .note-editor .col-md-1 {\n    width: 8.333333333333332%;\n  }\n  .note-editor .col-md-pull-12 {\n    right: 100%;\n  }\n  .note-editor .col-md-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .note-editor .col-md-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .note-editor .col-md-pull-9 {\n    right: 75%;\n  }\n  .note-editor .col-md-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .note-editor .col-md-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .note-editor .col-md-pull-6 {\n    right: 50%;\n  }\n  .note-editor .col-md-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .note-editor .col-md-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .note-editor .col-md-pull-3 {\n    right: 25%;\n  }\n  .note-editor .col-md-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .note-editor .col-md-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .note-editor .col-md-push-12 {\n    left: 100%;\n  }\n  .note-editor .col-md-push-11 {\n    left: 91.66666666666666%;\n  }\n  .note-editor .col-md-push-10 {\n    left: 83.33333333333334%;\n  }\n  .note-editor .col-md-push-9 {\n    left: 75%;\n  }\n  .note-editor .col-md-push-8 {\n    left: 66.66666666666666%;\n  }\n  .note-editor .col-md-push-7 {\n    left: 58.333333333333336%;\n  }\n  .note-editor .col-md-push-6 {\n    left: 50%;\n  }\n  .note-editor .col-md-push-5 {\n    left: 41.66666666666667%;\n  }\n  .note-editor .col-md-push-4 {\n    left: 33.33333333333333%;\n  }\n  .note-editor .col-md-push-3 {\n    left: 25%;\n  }\n  .note-editor .col-md-push-2 {\n    left: 16.666666666666664%;\n  }\n  .note-editor .col-md-push-1 {\n    left: 8.333333333333332%;\n  }\n  .note-editor .col-md-offset-12 {\n    margin-left: 100%;\n  }\n  .note-editor .col-md-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .note-editor .col-md-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .note-editor .col-md-offset-9 {\n    margin-left: 75%;\n  }\n  .note-editor .col-md-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .note-editor .col-md-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .note-editor .col-md-offset-6 {\n    margin-left: 50%;\n  }\n  .note-editor .col-md-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .note-editor .col-md-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .note-editor .col-md-offset-3 {\n    margin-left: 25%;\n  }\n  .note-editor .col-md-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .note-editor .col-md-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n@media (min-width: 1200px) {\n  .note-editor .container {\n    width: 1170px;\n  }\n  .note-editor .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 {\n    float: left;\n  }\n  .note-editor .col-lg-12 {\n    width: 100%;\n  }\n  .note-editor .col-lg-11 {\n    width: 91.66666666666666%;\n  }\n  .note-editor .col-lg-10 {\n    width: 83.33333333333334%;\n  }\n  .note-editor .col-lg-9 {\n    width: 75%;\n  }\n  .note-editor .col-lg-8 {\n    width: 66.66666666666666%;\n  }\n  .note-editor .col-lg-7 {\n    width: 58.333333333333336%;\n  }\n  .note-editor .col-lg-6 {\n    width: 50%;\n  }\n  .note-editor .col-lg-5 {\n    width: 41.66666666666667%;\n  }\n  .note-editor .col-lg-4 {\n    width: 33.33333333333333%;\n  }\n  .note-editor .col-lg-3 {\n    width: 25%;\n  }\n  .note-editor .col-lg-2 {\n    width: 16.666666666666664%;\n  }\n  .note-editor .col-lg-1 {\n    width: 8.333333333333332%;\n  }\n  .note-editor .col-lg-pull-12 {\n    right: 100%;\n  }\n  .note-editor .col-lg-pull-11 {\n    right: 91.66666666666666%;\n  }\n  .note-editor .col-lg-pull-10 {\n    right: 83.33333333333334%;\n  }\n  .note-editor .col-lg-pull-9 {\n    right: 75%;\n  }\n  .note-editor .col-lg-pull-8 {\n    right: 66.66666666666666%;\n  }\n  .note-editor .col-lg-pull-7 {\n    right: 58.333333333333336%;\n  }\n  .note-editor .col-lg-pull-6 {\n    right: 50%;\n  }\n  .note-editor .col-lg-pull-5 {\n    right: 41.66666666666667%;\n  }\n  .note-editor .col-lg-pull-4 {\n    right: 33.33333333333333%;\n  }\n  .note-editor .col-lg-pull-3 {\n    right: 25%;\n  }\n  .note-editor .col-lg-pull-2 {\n    right: 16.666666666666664%;\n  }\n  .note-editor .col-lg-pull-1 {\n    right: 8.333333333333332%;\n  }\n  .note-editor .col-lg-push-12 {\n    left: 100%;\n  }\n  .note-editor .col-lg-push-11 {\n    left: 91.66666666666666%;\n  }\n  .note-editor .col-lg-push-10 {\n    left: 83.33333333333334%;\n  }\n  .note-editor .col-lg-push-9 {\n    left: 75%;\n  }\n  .note-editor .col-lg-push-8 {\n    left: 66.66666666666666%;\n  }\n  .note-editor .col-lg-push-7 {\n    left: 58.333333333333336%;\n  }\n  .note-editor .col-lg-push-6 {\n    left: 50%;\n  }\n  .note-editor .col-lg-push-5 {\n    left: 41.66666666666667%;\n  }\n  .note-editor .col-lg-push-4 {\n    left: 33.33333333333333%;\n  }\n  .note-editor .col-lg-push-3 {\n    left: 25%;\n  }\n  .note-editor .col-lg-push-2 {\n    left: 16.666666666666664%;\n  }\n  .note-editor .col-lg-push-1 {\n    left: 8.333333333333332%;\n  }\n  .note-editor .col-lg-offset-12 {\n    margin-left: 100%;\n  }\n  .note-editor .col-lg-offset-11 {\n    margin-left: 91.66666666666666%;\n  }\n  .note-editor .col-lg-offset-10 {\n    margin-left: 83.33333333333334%;\n  }\n  .note-editor .col-lg-offset-9 {\n    margin-left: 75%;\n  }\n  .note-editor .col-lg-offset-8 {\n    margin-left: 66.66666666666666%;\n  }\n  .note-editor .col-lg-offset-7 {\n    margin-left: 58.333333333333336%;\n  }\n  .note-editor .col-lg-offset-6 {\n    margin-left: 50%;\n  }\n  .note-editor .col-lg-offset-5 {\n    margin-left: 41.66666666666667%;\n  }\n  .note-editor .col-lg-offset-4 {\n    margin-left: 33.33333333333333%;\n  }\n  .note-editor .col-lg-offset-3 {\n    margin-left: 25%;\n  }\n  .note-editor .col-lg-offset-2 {\n    margin-left: 16.666666666666664%;\n  }\n  .note-editor .col-lg-offset-1 {\n    margin-left: 8.333333333333332%;\n  }\n}\n.note-editor table {\n  max-width: 100%;\n  background-color: transparent;\n}\n.note-editor th {\n  text-align: left;\n}\n.note-editor .table {\n  width: 100%;\n  margin-bottom: 20px;\n}\n.note-editor .table > thead > tr > th,\n.note-editor .table > tbody > tr > th,\n.note-editor .table > tfoot > tr > th,\n.note-editor .table > thead > tr > td,\n.note-editor .table > tbody > tr > td,\n.note-editor .table > tfoot > tr > td {\n  padding: 8px;\n  line-height: 1.428571429;\n  vertical-align: top;\n  border-top: 1px solid #dddddd;\n}\n.note-editor .table > thead > tr > th {\n  vertical-align: bottom;\n  border-bottom: 2px solid #dddddd;\n}\n.note-editor .table > caption + thead > tr:first-child > th,\n.note-editor .table > colgroup + thead > tr:first-child > th,\n.note-editor .table > thead:first-child > tr:first-child > th,\n.note-editor .table > caption + thead > tr:first-child > td,\n.note-editor .table > colgroup + thead > tr:first-child > td,\n.note-editor .table > thead:first-child > tr:first-child > td {\n  border-top: 0;\n}\n.note-editor .table > tbody + tbody {\n  border-top: 2px solid #dddddd;\n}\n.note-editor .table .table {\n  background-color: #ffffff;\n}\n.note-editor .table-condensed > thead > tr > th,\n.note-editor .table-condensed > tbody > tr > th,\n.note-editor .table-condensed > tfoot > tr > th,\n.note-editor .table-condensed > thead > tr > td,\n.note-editor .table-condensed > tbody > tr > td,\n.note-editor .table-condensed > tfoot > tr > td {\n  padding: 5px;\n}\n.note-editor .table-bordered {\n  border: 1px solid #dddddd;\n}\n.note-editor .table-bordered > thead > tr > th,\n.note-editor .table-bordered > tbody > tr > th,\n.note-editor .table-bordered > tfoot > tr > th,\n.note-editor .table-bordered > thead > tr > td,\n.note-editor .table-bordered > tbody > tr > td,\n.note-editor .table-bordered > tfoot > tr > td {\n  border: 1px solid #dddddd;\n}\n.note-editor .table-bordered > thead > tr > th,\n.note-editor .table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.note-editor .table-striped > tbody > tr:nth-child(odd) > td,\n.note-editor .table-striped > tbody > tr:nth-child(odd) > th {\n  background-color: #f9f9f9;\n}\n.note-editor .table-hover > tbody > tr:hover > td,\n.note-editor .table-hover > tbody > tr:hover > th {\n  background-color: #f5f5f5;\n}\n.note-editor table col[class*=\"col-\"] {\n  float: none;\n  display: table-column;\n}\n.note-editor table td[class*=\"col-\"],\n.note-editor table th[class*=\"col-\"] {\n  float: none;\n  display: table-cell;\n}\n.note-editor .table > thead > tr > td.active,\n.note-editor .table > tbody > tr > td.active,\n.note-editor .table > tfoot > tr > td.active,\n.note-editor .table > thead > tr > th.active,\n.note-editor .table > tbody > tr > th.active,\n.note-editor .table > tfoot > tr > th.active,\n.note-editor .table > thead > tr.active > td,\n.note-editor .table > tbody > tr.active > td,\n.note-editor .table > tfoot > tr.active > td,\n.note-editor .table > thead > tr.active > th,\n.note-editor .table > tbody > tr.active > th,\n.note-editor .table > tfoot > tr.active > th {\n  background-color: #f5f5f5;\n}\n.note-editor .table > thead > tr > td.success,\n.note-editor .table > tbody > tr > td.success,\n.note-editor .table > tfoot > tr > td.success,\n.note-editor .table > thead > tr > th.success,\n.note-editor .table > tbody > tr > th.success,\n.note-editor .table > tfoot > tr > th.success,\n.note-editor .table > thead > tr.success > td,\n.note-editor .table > tbody > tr.success > td,\n.note-editor .table > tfoot > tr.success > td,\n.note-editor .table > thead > tr.success > th,\n.note-editor .table > tbody > tr.success > th,\n.note-editor .table > tfoot > tr.success > th {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.note-editor .table-hover > tbody > tr > td.success:hover,\n.note-editor .table-hover > tbody > tr > th.success:hover,\n.note-editor .table-hover > tbody > tr.success:hover > td,\n.note-editor .table-hover > tbody > tr.success:hover > th {\n  background-color: #d0e9c6;\n  border-color: #c9e2b3;\n}\n.note-editor .table > thead > tr > td.danger,\n.note-editor .table > tbody > tr > td.danger,\n.note-editor .table > tfoot > tr > td.danger,\n.note-editor .table > thead > tr > th.danger,\n.note-editor .table > tbody > tr > th.danger,\n.note-editor .table > tfoot > tr > th.danger,\n.note-editor .table > thead > tr.danger > td,\n.note-editor .table > tbody > tr.danger > td,\n.note-editor .table > tfoot > tr.danger > td,\n.note-editor .table > thead > tr.danger > th,\n.note-editor .table > tbody > tr.danger > th,\n.note-editor .table > tfoot > tr.danger > th {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.note-editor .table-hover > tbody > tr > td.danger:hover,\n.note-editor .table-hover > tbody > tr > th.danger:hover,\n.note-editor .table-hover > tbody > tr.danger:hover > td,\n.note-editor .table-hover > tbody > tr.danger:hover > th {\n  background-color: #ebcccc;\n  border-color: #e4b9c0;\n}\n.note-editor .table > thead > tr > td.warning,\n.note-editor .table > tbody > tr > td.warning,\n.note-editor .table > tfoot > tr > td.warning,\n.note-editor .table > thead > tr > th.warning,\n.note-editor .table > tbody > tr > th.warning,\n.note-editor .table > tfoot > tr > th.warning,\n.note-editor .table > thead > tr.warning > td,\n.note-editor .table > tbody > tr.warning > td,\n.note-editor .table > tfoot > tr.warning > td,\n.note-editor .table > thead > tr.warning > th,\n.note-editor .table > tbody > tr.warning > th,\n.note-editor .table > tfoot > tr.warning > th {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.note-editor .table-hover > tbody > tr > td.warning:hover,\n.note-editor .table-hover > tbody > tr > th.warning:hover,\n.note-editor .table-hover > tbody > tr.warning:hover > td,\n.note-editor .table-hover > tbody > tr.warning:hover > th {\n  background-color: #faf2cc;\n  border-color: #f7e1b5;\n}\n@media (max-width: 767px) {\n  .note-editor .table-responsive {\n    width: 100%;\n    margin-bottom: 15px;\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  .note-editor .table-responsive > .table {\n    margin-bottom: 0;\n  }\n  .note-editor .table-responsive > .table > thead > tr > th,\n  .note-editor .table-responsive > .table > tbody > tr > th,\n  .note-editor .table-responsive > .table > tfoot > tr > th,\n  .note-editor .table-responsive > .table > thead > tr > td,\n  .note-editor .table-responsive > .table > tbody > tr > td,\n  .note-editor .table-responsive > .table > tfoot > tr > td {\n    white-space: nowrap;\n  }\n  .note-editor .table-responsive > .table-bordered {\n    border: 0;\n  }\n  .note-editor .table-responsive > .table-bordered > thead > tr > th:first-child,\n  .note-editor .table-responsive > .table-bordered > tbody > tr > th:first-child,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n  .note-editor .table-responsive > .table-bordered > thead > tr > td:first-child,\n  .note-editor .table-responsive > .table-bordered > tbody > tr > td:first-child,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n    border-left: 0;\n  }\n  .note-editor .table-responsive > .table-bordered > thead > tr > th:last-child,\n  .note-editor .table-responsive > .table-bordered > tbody > tr > th:last-child,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n  .note-editor .table-responsive > .table-bordered > thead > tr > td:last-child,\n  .note-editor .table-responsive > .table-bordered > tbody > tr > td:last-child,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n    border-right: 0;\n  }\n  .note-editor .table-responsive > .table-bordered > tbody > tr:last-child > th,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n  .note-editor .table-responsive > .table-bordered > tbody > tr:last-child > td,\n  .note-editor .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n    border-bottom: 0;\n  }\n}\n.note-editor fieldset {\n  padding: 0;\n  margin: 0;\n  border: 0;\n}\n.note-editor legend {\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.note-editor label {\n  display: inline-block;\n  margin-bottom: 5px;\n  font-weight: bold;\n}\n.note-editor input[type=\"search\"] {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.note-editor input[type=\"radio\"],\n.note-editor input[type=\"checkbox\"] {\n  margin: 4px 0 0;\n  margin-top: 1px \\9;\n  /* IE8-9 */\n\n  line-height: normal;\n}\n.note-editor input[type=\"file\"] {\n  display: block;\n}\n.note-editor select[multiple],\n.note-editor select[size] {\n  height: auto;\n}\n.note-editor select optgroup {\n  font-size: inherit;\n  font-style: inherit;\n  font-family: inherit;\n}\n.note-editor input[type=\"file\"]:focus,\n.note-editor input[type=\"radio\"]:focus,\n.note-editor input[type=\"checkbox\"]:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.note-editor input[type=\"number\"]::-webkit-outer-spin-button,\n.note-editor input[type=\"number\"]::-webkit-inner-spin-button {\n  height: auto;\n}\n.note-editor output {\n  display: block;\n  padding-top: 7px;\n  font-size: 14px;\n  line-height: 1.428571429;\n  color: #555555;\n  vertical-align: middle;\n}\n.note-editor .form-control:-moz-placeholder {\n  color: #999999;\n}\n.note-editor .form-control::-moz-placeholder {\n  color: #999999;\n}\n.note-editor .form-control:-ms-input-placeholder {\n  color: #999999;\n}\n.note-editor .form-control::-webkit-input-placeholder {\n  color: #999999;\n}\n.note-editor .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  background-image: none;\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 .15s, box-shadow ease-in-out .15s;\n  transition: border-color ease-in-out .15s, box-shadow ease-in-out .15s;\n}\n.note-editor .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.note-editor .form-control[disabled],\n.note-editor .form-control[readonly],\nfieldset[disabled] .note-editor .form-control {\n  cursor: not-allowed;\n  background-color: #eeeeee;\n}\ntextarea.note-editor .form-control {\n  height: auto;\n}\n.note-editor .form-group {\n  margin-bottom: 15px;\n}\n.note-editor .radio,\n.note-editor .checkbox {\n  display: block;\n  min-height: 20px;\n  margin-top: 10px;\n  margin-bottom: 10px;\n  padding-left: 20px;\n  vertical-align: middle;\n}\n.note-editor .radio label,\n.note-editor .checkbox label {\n  display: inline;\n  margin-bottom: 0;\n  font-weight: normal;\n  cursor: pointer;\n}\n.note-editor .radio input[type=\"radio\"],\n.note-editor .radio-inline input[type=\"radio\"],\n.note-editor .checkbox input[type=\"checkbox\"],\n.note-editor .checkbox-inline input[type=\"checkbox\"] {\n  float: left;\n  margin-left: -20px;\n}\n.note-editor .radio + .radio,\n.note-editor .checkbox + .checkbox {\n  margin-top: -5px;\n}\n.note-editor .radio-inline,\n.note-editor .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.note-editor .radio-inline + .radio-inline,\n.note-editor .checkbox-inline + .checkbox-inline {\n  margin-top: 0;\n  margin-left: 10px;\n}\n.note-editor input[type=\"radio\"][disabled],\n.note-editor input[type=\"checkbox\"][disabled],\n.note-editor .radio[disabled],\n.note-editor .radio-inline[disabled],\n.note-editor .checkbox[disabled],\n.note-editor .checkbox-inline[disabled],\nfieldset[disabled] .note-editor input[type=\"radio\"],\nfieldset[disabled] .note-editor input[type=\"checkbox\"],\nfieldset[disabled] .note-editor .radio,\nfieldset[disabled] .note-editor .radio-inline,\nfieldset[disabled] .note-editor .checkbox,\nfieldset[disabled] .note-editor .checkbox-inline {\n  cursor: not-allowed;\n}\n.note-editor .input-sm {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.note-editor .input-sm {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.note-editor .input-sm {\n  height: auto;\n}\n.note-editor .input-lg {\n  height: 45px;\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\nselect.note-editor .input-lg {\n  height: 45px;\n  line-height: 45px;\n}\ntextarea.note-editor .input-lg {\n  height: auto;\n}\n.note-editor .has-warning .help-block,\n.note-editor .has-warning .control-label {\n  color: #c09853;\n}\n.note-editor .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.note-editor .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.note-editor .has-warning .input-group-addon {\n  color: #c09853;\n  border-color: #c09853;\n  background-color: #fcf8e3;\n}\n.note-editor .has-error .help-block,\n.note-editor .has-error .control-label {\n  color: #b94a48;\n}\n.note-editor .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.note-editor .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.note-editor .has-error .input-group-addon {\n  color: #b94a48;\n  border-color: #b94a48;\n  background-color: #f2dede;\n}\n.note-editor .has-success .help-block,\n.note-editor .has-success .control-label {\n  color: #468847;\n}\n.note-editor .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.note-editor .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.note-editor .has-success .input-group-addon {\n  color: #468847;\n  border-color: #468847;\n  background-color: #dff0d8;\n}\n.note-editor .form-control-static {\n  margin-bottom: 0;\n}\n.note-editor .help-block {\n  display: block;\n  margin-top: 5px;\n  margin-bottom: 10px;\n  color: #737373;\n}\n@media (min-width: 768px) {\n  .note-editor .form-inline .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .note-editor .form-inline .form-control {\n    display: inline-block;\n  }\n  .note-editor .form-inline .radio,\n  .note-editor .form-inline .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n  }\n  .note-editor .form-inline .radio input[type=\"radio\"],\n  .note-editor .form-inline .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n.note-editor .form-horizontal .control-label,\n.note-editor .form-horizontal .radio,\n.note-editor .form-horizontal .checkbox,\n.note-editor .form-horizontal .radio-inline,\n.note-editor .form-horizontal .checkbox-inline {\n  margin-top: 0;\n  margin-bottom: 0;\n  padding-top: 7px;\n}\n.note-editor .form-horizontal .form-group {\n  margin-left: -15px;\n  margin-right: -15px;\n}\n.note-editor .form-horizontal .form-group:before,\n.note-editor .form-horizontal .form-group:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .form-horizontal .form-group:after {\n  clear: both;\n}\n.note-editor .form-horizontal .form-group:before,\n.note-editor .form-horizontal .form-group:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .form-horizontal .form-group:after {\n  clear: both;\n}\n.note-editor .form-horizontal .form-control-static {\n  padding-top: 7px;\n}\n@media (min-width: 768px) {\n  .note-editor .form-horizontal .control-label {\n    text-align: right;\n  }\n}\n.note-editor .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: 6px 12px;\n  font-size: 14px;\n  line-height: 1.428571429;\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.note-editor .btn:focus {\n  outline: thin dotted #333;\n  outline: 5px auto -webkit-focus-ring-color;\n  outline-offset: -2px;\n}\n.note-editor .btn:hover,\n.note-editor .btn:focus {\n  color: #333333;\n  text-decoration: none;\n}\n.note-editor .btn:active,\n.note-editor .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.note-editor .btn.disabled,\n.note-editor .btn[disabled],\nfieldset[disabled] .note-editor .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.note-editor .btn-default {\n  color: #333333;\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.note-editor .btn-default:hover,\n.note-editor .btn-default:focus,\n.note-editor .btn-default:active,\n.note-editor .btn-default.active,\n.open .dropdown-toggle.note-editor .btn-default {\n  color: #333333;\n  background-color: #ebebeb;\n  border-color: #adadad;\n}\n.note-editor .btn-default:active,\n.note-editor .btn-default.active,\n.open .dropdown-toggle.note-editor .btn-default {\n  background-image: none;\n}\n.note-editor .btn-default.disabled,\n.note-editor .btn-default[disabled],\nfieldset[disabled] .note-editor .btn-default,\n.note-editor .btn-default.disabled:hover,\n.note-editor .btn-default[disabled]:hover,\nfieldset[disabled] .note-editor .btn-default:hover,\n.note-editor .btn-default.disabled:focus,\n.note-editor .btn-default[disabled]:focus,\nfieldset[disabled] .note-editor .btn-default:focus,\n.note-editor .btn-default.disabled:active,\n.note-editor .btn-default[disabled]:active,\nfieldset[disabled] .note-editor .btn-default:active,\n.note-editor .btn-default.disabled.active,\n.note-editor .btn-default[disabled].active,\nfieldset[disabled] .note-editor .btn-default.active {\n  background-color: #ffffff;\n  border-color: #cccccc;\n}\n.note-editor .btn-primary {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.note-editor .btn-primary:hover,\n.note-editor .btn-primary:focus,\n.note-editor .btn-primary:active,\n.note-editor .btn-primary.active,\n.open .dropdown-toggle.note-editor .btn-primary {\n  color: #ffffff;\n  background-color: #3276b1;\n  border-color: #285e8e;\n}\n.note-editor .btn-primary:active,\n.note-editor .btn-primary.active,\n.open .dropdown-toggle.note-editor .btn-primary {\n  background-image: none;\n}\n.note-editor .btn-primary.disabled,\n.note-editor .btn-primary[disabled],\nfieldset[disabled] .note-editor .btn-primary,\n.note-editor .btn-primary.disabled:hover,\n.note-editor .btn-primary[disabled]:hover,\nfieldset[disabled] .note-editor .btn-primary:hover,\n.note-editor .btn-primary.disabled:focus,\n.note-editor .btn-primary[disabled]:focus,\nfieldset[disabled] .note-editor .btn-primary:focus,\n.note-editor .btn-primary.disabled:active,\n.note-editor .btn-primary[disabled]:active,\nfieldset[disabled] .note-editor .btn-primary:active,\n.note-editor .btn-primary.disabled.active,\n.note-editor .btn-primary[disabled].active,\nfieldset[disabled] .note-editor .btn-primary.active {\n  background-color: #428bca;\n  border-color: #357ebd;\n}\n.note-editor .btn-warning {\n  color: #ffffff;\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.note-editor .btn-warning:hover,\n.note-editor .btn-warning:focus,\n.note-editor .btn-warning:active,\n.note-editor .btn-warning.active,\n.open .dropdown-toggle.note-editor .btn-warning {\n  color: #ffffff;\n  background-color: #ed9c28;\n  border-color: #d58512;\n}\n.note-editor .btn-warning:active,\n.note-editor .btn-warning.active,\n.open .dropdown-toggle.note-editor .btn-warning {\n  background-image: none;\n}\n.note-editor .btn-warning.disabled,\n.note-editor .btn-warning[disabled],\nfieldset[disabled] .note-editor .btn-warning,\n.note-editor .btn-warning.disabled:hover,\n.note-editor .btn-warning[disabled]:hover,\nfieldset[disabled] .note-editor .btn-warning:hover,\n.note-editor .btn-warning.disabled:focus,\n.note-editor .btn-warning[disabled]:focus,\nfieldset[disabled] .note-editor .btn-warning:focus,\n.note-editor .btn-warning.disabled:active,\n.note-editor .btn-warning[disabled]:active,\nfieldset[disabled] .note-editor .btn-warning:active,\n.note-editor .btn-warning.disabled.active,\n.note-editor .btn-warning[disabled].active,\nfieldset[disabled] .note-editor .btn-warning.active {\n  background-color: #f0ad4e;\n  border-color: #eea236;\n}\n.note-editor .btn-danger {\n  color: #ffffff;\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.note-editor .btn-danger:hover,\n.note-editor .btn-danger:focus,\n.note-editor .btn-danger:active,\n.note-editor .btn-danger.active,\n.open .dropdown-toggle.note-editor .btn-danger {\n  color: #ffffff;\n  background-color: #d2322d;\n  border-color: #ac2925;\n}\n.note-editor .btn-danger:active,\n.note-editor .btn-danger.active,\n.open .dropdown-toggle.note-editor .btn-danger {\n  background-image: none;\n}\n.note-editor .btn-danger.disabled,\n.note-editor .btn-danger[disabled],\nfieldset[disabled] .note-editor .btn-danger,\n.note-editor .btn-danger.disabled:hover,\n.note-editor .btn-danger[disabled]:hover,\nfieldset[disabled] .note-editor .btn-danger:hover,\n.note-editor .btn-danger.disabled:focus,\n.note-editor .btn-danger[disabled]:focus,\nfieldset[disabled] .note-editor .btn-danger:focus,\n.note-editor .btn-danger.disabled:active,\n.note-editor .btn-danger[disabled]:active,\nfieldset[disabled] .note-editor .btn-danger:active,\n.note-editor .btn-danger.disabled.active,\n.note-editor .btn-danger[disabled].active,\nfieldset[disabled] .note-editor .btn-danger.active {\n  background-color: #d9534f;\n  border-color: #d43f3a;\n}\n.note-editor .btn-success {\n  color: #ffffff;\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.note-editor .btn-success:hover,\n.note-editor .btn-success:focus,\n.note-editor .btn-success:active,\n.note-editor .btn-success.active,\n.open .dropdown-toggle.note-editor .btn-success {\n  color: #ffffff;\n  background-color: #47a447;\n  border-color: #398439;\n}\n.note-editor .btn-success:active,\n.note-editor .btn-success.active,\n.open .dropdown-toggle.note-editor .btn-success {\n  background-image: none;\n}\n.note-editor .btn-success.disabled,\n.note-editor .btn-success[disabled],\nfieldset[disabled] .note-editor .btn-success,\n.note-editor .btn-success.disabled:hover,\n.note-editor .btn-success[disabled]:hover,\nfieldset[disabled] .note-editor .btn-success:hover,\n.note-editor .btn-success.disabled:focus,\n.note-editor .btn-success[disabled]:focus,\nfieldset[disabled] .note-editor .btn-success:focus,\n.note-editor .btn-success.disabled:active,\n.note-editor .btn-success[disabled]:active,\nfieldset[disabled] .note-editor .btn-success:active,\n.note-editor .btn-success.disabled.active,\n.note-editor .btn-success[disabled].active,\nfieldset[disabled] .note-editor .btn-success.active {\n  background-color: #5cb85c;\n  border-color: #4cae4c;\n}\n.note-editor .btn-info {\n  color: #ffffff;\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.note-editor .btn-info:hover,\n.note-editor .btn-info:focus,\n.note-editor .btn-info:active,\n.note-editor .btn-info.active,\n.open .dropdown-toggle.note-editor .btn-info {\n  color: #ffffff;\n  background-color: #39b3d7;\n  border-color: #269abc;\n}\n.note-editor .btn-info:active,\n.note-editor .btn-info.active,\n.open .dropdown-toggle.note-editor .btn-info {\n  background-image: none;\n}\n.note-editor .btn-info.disabled,\n.note-editor .btn-info[disabled],\nfieldset[disabled] .note-editor .btn-info,\n.note-editor .btn-info.disabled:hover,\n.note-editor .btn-info[disabled]:hover,\nfieldset[disabled] .note-editor .btn-info:hover,\n.note-editor .btn-info.disabled:focus,\n.note-editor .btn-info[disabled]:focus,\nfieldset[disabled] .note-editor .btn-info:focus,\n.note-editor .btn-info.disabled:active,\n.note-editor .btn-info[disabled]:active,\nfieldset[disabled] .note-editor .btn-info:active,\n.note-editor .btn-info.disabled.active,\n.note-editor .btn-info[disabled].active,\nfieldset[disabled] .note-editor .btn-info.active {\n  background-color: #5bc0de;\n  border-color: #46b8da;\n}\n.note-editor .btn-link {\n  color: #428bca;\n  font-weight: normal;\n  cursor: pointer;\n  border-radius: 0;\n}\n.note-editor .btn-link,\n.note-editor .btn-link:active,\n.note-editor .btn-link[disabled],\nfieldset[disabled] .note-editor .btn-link {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.note-editor .btn-link,\n.note-editor .btn-link:hover,\n.note-editor .btn-link:focus,\n.note-editor .btn-link:active {\n  border-color: transparent;\n}\n.note-editor .btn-link:hover,\n.note-editor .btn-link:focus {\n  color: #2a6496;\n  text-decoration: underline;\n  background-color: transparent;\n}\n.note-editor .btn-link[disabled]:hover,\nfieldset[disabled] .note-editor .btn-link:hover,\n.note-editor .btn-link[disabled]:focus,\nfieldset[disabled] .note-editor .btn-link:focus {\n  color: #999999;\n  text-decoration: none;\n}\n.note-editor .btn-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.note-editor .btn-sm,\n.note-editor .btn-xs {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.note-editor .btn-xs {\n  padding: 1px 5px;\n}\n.note-editor .btn-block {\n  display: block;\n  width: 100%;\n  padding-left: 0;\n  padding-right: 0;\n}\n.note-editor .btn-block + .btn-block {\n  margin-top: 5px;\n}\n.note-editor input[type=\"submit\"].btn-block,\n.note-editor input[type=\"reset\"].btn-block,\n.note-editor input[type=\"button\"].btn-block {\n  width: 100%;\n}\n.note-editor .fade {\n  opacity: 0;\n  -webkit-transition: opacity 0.15s linear;\n  transition: opacity 0.15s linear;\n}\n.note-editor .fade.in {\n  opacity: 1;\n}\n.note-editor .collapse {\n  display: none;\n}\n.note-editor .collapse.in {\n  display: block;\n}\n.note-editor .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-regulard41d.eot?') 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') format('svg');\n}\n.note-editor .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}\n.note-editor .glyphicon:empty {\n  width: 1em;\n}\n.note-editor .glyphicon-asterisk:before {\n  content: \"\\2a\";\n}\n.note-editor .glyphicon-plus:before {\n  content: \"\\2b\";\n}\n.note-editor .glyphicon-euro:before {\n  content: \"\\20ac\";\n}\n.note-editor .glyphicon-minus:before {\n  content: \"\\2212\";\n}\n.note-editor .glyphicon-cloud:before {\n  content: \"\\2601\";\n}\n.note-editor .glyphicon-envelope:before {\n  content: \"\\2709\";\n}\n.note-editor .glyphicon-pencil:before {\n  content: \"\\270f\";\n}\n.note-editor .glyphicon-glass:before {\n  content: \"\\e001\";\n}\n.note-editor .glyphicon-music:before {\n  content: \"\\e002\";\n}\n.note-editor .glyphicon-search:before {\n  content: \"\\e003\";\n}\n.note-editor .glyphicon-heart:before {\n  content: \"\\e005\";\n}\n.note-editor .glyphicon-star:before {\n  content: \"\\e006\";\n}\n.note-editor .glyphicon-star-empty:before {\n  content: \"\\e007\";\n}\n.note-editor .glyphicon-user:before {\n  content: \"\\e008\";\n}\n.note-editor .glyphicon-film:before {\n  content: \"\\e009\";\n}\n.note-editor .glyphicon-th-large:before {\n  content: \"\\e010\";\n}\n.note-editor .glyphicon-th:before {\n  content: \"\\e011\";\n}\n.note-editor .glyphicon-th-list:before {\n  content: \"\\e012\";\n}\n.note-editor .glyphicon-ok:before {\n  content: \"\\e013\";\n}\n.note-editor .glyphicon-remove:before {\n  content: \"\\e014\";\n}\n.note-editor .glyphicon-zoom-in:before {\n  content: \"\\e015\";\n}\n.note-editor .glyphicon-zoom-out:before {\n  content: \"\\e016\";\n}\n.note-editor .glyphicon-off:before {\n  content: \"\\e017\";\n}\n.note-editor .glyphicon-signal:before {\n  content: \"\\e018\";\n}\n.note-editor .glyphicon-cog:before {\n  content: \"\\e019\";\n}\n.note-editor .glyphicon-trash:before {\n  content: \"\\e020\";\n}\n.note-editor .glyphicon-home:before {\n  content: \"\\e021\";\n}\n.note-editor .glyphicon-file:before {\n  content: \"\\e022\";\n}\n.note-editor .glyphicon-time:before {\n  content: \"\\e023\";\n}\n.note-editor .glyphicon-road:before {\n  content: \"\\e024\";\n}\n.note-editor .glyphicon-download-alt:before {\n  content: \"\\e025\";\n}\n.note-editor .glyphicon-download:before {\n  content: \"\\e026\";\n}\n.note-editor .glyphicon-upload:before {\n  content: \"\\e027\";\n}\n.note-editor .glyphicon-inbox:before {\n  content: \"\\e028\";\n}\n.note-editor .glyphicon-play-circle:before {\n  content: \"\\e029\";\n}\n.note-editor .glyphicon-repeat:before {\n  content: \"\\e030\";\n}\n.note-editor .glyphicon-refresh:before {\n  content: \"\\e031\";\n}\n.note-editor .glyphicon-list-alt:before {\n  content: \"\\e032\";\n}\n.note-editor .glyphicon-lock:before {\n  content: \"\\e033\";\n}\n.note-editor .glyphicon-flag:before {\n  content: \"\\e034\";\n}\n.note-editor .glyphicon-headphones:before {\n  content: \"\\e035\";\n}\n.note-editor .glyphicon-volume-off:before {\n  content: \"\\e036\";\n}\n.note-editor .glyphicon-volume-down:before {\n  content: \"\\e037\";\n}\n.note-editor .glyphicon-volume-up:before {\n  content: \"\\e038\";\n}\n.note-editor .glyphicon-qrcode:before {\n  content: \"\\e039\";\n}\n.note-editor .glyphicon-barcode:before {\n  content: \"\\e040\";\n}\n.note-editor .glyphicon-tag:before {\n  content: \"\\e041\";\n}\n.note-editor .glyphicon-tags:before {\n  content: \"\\e042\";\n}\n.note-editor .glyphicon-book:before {\n  content: \"\\e043\";\n}\n.note-editor .glyphicon-bookmark:before {\n  content: \"\\e044\";\n}\n.note-editor .glyphicon-print:before {\n  content: \"\\e045\";\n}\n.note-editor .glyphicon-camera:before {\n  content: \"\\e046\";\n}\n.note-editor .glyphicon-font:before {\n  content: \"\\e047\";\n}\n.note-editor .glyphicon-bold:before {\n  content: \"\\e048\";\n}\n.note-editor .glyphicon-italic:before {\n  content: \"\\e049\";\n}\n.note-editor .glyphicon-text-height:before {\n  content: \"\\e050\";\n}\n.note-editor .glyphicon-text-width:before {\n  content: \"\\e051\";\n}\n.note-editor .glyphicon-align-left:before {\n  content: \"\\e052\";\n}\n.note-editor .glyphicon-align-center:before {\n  content: \"\\e053\";\n}\n.note-editor .glyphicon-align-right:before {\n  content: \"\\e054\";\n}\n.note-editor .glyphicon-align-justify:before {\n  content: \"\\e055\";\n}\n.note-editor .glyphicon-list:before {\n  content: \"\\e056\";\n}\n.note-editor .glyphicon-indent-left:before {\n  content: \"\\e057\";\n}\n.note-editor .glyphicon-indent-right:before {\n  content: \"\\e058\";\n}\n.note-editor .glyphicon-facetime-video:before {\n  content: \"\\e059\";\n}\n.note-editor .glyphicon-picture:before {\n  content: \"\\e060\";\n}\n.note-editor .glyphicon-map-marker:before {\n  content: \"\\e062\";\n}\n.note-editor .glyphicon-adjust:before {\n  content: \"\\e063\";\n}\n.note-editor .glyphicon-tint:before {\n  content: \"\\e064\";\n}\n.note-editor .glyphicon-edit:before {\n  content: \"\\e065\";\n}\n.note-editor .glyphicon-share:before {\n  content: \"\\e066\";\n}\n.note-editor .glyphicon-check:before {\n  content: \"\\e067\";\n}\n.note-editor .glyphicon-move:before {\n  content: \"\\e068\";\n}\n.note-editor .glyphicon-step-backward:before {\n  content: \"\\e069\";\n}\n.note-editor .glyphicon-fast-backward:before {\n  content: \"\\e070\";\n}\n.note-editor .glyphicon-backward:before {\n  content: \"\\e071\";\n}\n.note-editor .glyphicon-play:before {\n  content: \"\\e072\";\n}\n.note-editor .glyphicon-pause:before {\n  content: \"\\e073\";\n}\n.note-editor .glyphicon-stop:before {\n  content: \"\\e074\";\n}\n.note-editor .glyphicon-forward:before {\n  content: \"\\e075\";\n}\n.note-editor .glyphicon-fast-forward:before {\n  content: \"\\e076\";\n}\n.note-editor .glyphicon-step-forward:before {\n  content: \"\\e077\";\n}\n.note-editor .glyphicon-eject:before {\n  content: \"\\e078\";\n}\n.note-editor .glyphicon-chevron-left:before {\n  content: \"\\e079\";\n}\n.note-editor .glyphicon-chevron-right:before {\n  content: \"\\e080\";\n}\n.note-editor .glyphicon-plus-sign:before {\n  content: \"\\e081\";\n}\n.note-editor .glyphicon-minus-sign:before {\n  content: \"\\e082\";\n}\n.note-editor .glyphicon-remove-sign:before {\n  content: \"\\e083\";\n}\n.note-editor .glyphicon-ok-sign:before {\n  content: \"\\e084\";\n}\n.note-editor .glyphicon-question-sign:before {\n  content: \"\\e085\";\n}\n.note-editor .glyphicon-info-sign:before {\n  content: \"\\e086\";\n}\n.note-editor .glyphicon-screenshot:before {\n  content: \"\\e087\";\n}\n.note-editor .glyphicon-remove-circle:before {\n  content: \"\\e088\";\n}\n.note-editor .glyphicon-ok-circle:before {\n  content: \"\\e089\";\n}\n.note-editor .glyphicon-ban-circle:before {\n  content: \"\\e090\";\n}\n.note-editor .glyphicon-arrow-left:before {\n  content: \"\\e091\";\n}\n.note-editor .glyphicon-arrow-right:before {\n  content: \"\\e092\";\n}\n.note-editor .glyphicon-arrow-up:before {\n  content: \"\\e093\";\n}\n.note-editor .glyphicon-arrow-down:before {\n  content: \"\\e094\";\n}\n.note-editor .glyphicon-share-alt:before {\n  content: \"\\e095\";\n}\n.note-editor .glyphicon-resize-full:before {\n  content: \"\\e096\";\n}\n.note-editor .glyphicon-resize-small:before {\n  content: \"\\e097\";\n}\n.note-editor .glyphicon-exclamation-sign:before {\n  content: \"\\e101\";\n}\n.note-editor .glyphicon-gift:before {\n  content: \"\\e102\";\n}\n.note-editor .glyphicon-leaf:before {\n  content: \"\\e103\";\n}\n.note-editor .glyphicon-fire:before {\n  content: \"\\e104\";\n}\n.note-editor .glyphicon-eye-open:before {\n  content: \"\\e105\";\n}\n.note-editor .glyphicon-eye-close:before {\n  content: \"\\e106\";\n}\n.note-editor .glyphicon-warning-sign:before {\n  content: \"\\e107\";\n}\n.note-editor .glyphicon-plane:before {\n  content: \"\\e108\";\n}\n.note-editor .glyphicon-calendar:before {\n  content: \"\\e109\";\n}\n.note-editor .glyphicon-random:before {\n  content: \"\\e110\";\n}\n.note-editor .glyphicon-comment:before {\n  content: \"\\e111\";\n}\n.note-editor .glyphicon-magnet:before {\n  content: \"\\e112\";\n}\n.note-editor .glyphicon-chevron-up:before {\n  content: \"\\e113\";\n}\n.note-editor .glyphicon-chevron-down:before {\n  content: \"\\e114\";\n}\n.note-editor .glyphicon-retweet:before {\n  content: \"\\e115\";\n}\n.note-editor .glyphicon-shopping-cart:before {\n  content: \"\\e116\";\n}\n.note-editor .glyphicon-folder-close:before {\n  content: \"\\e117\";\n}\n.note-editor .glyphicon-folder-open:before {\n  content: \"\\e118\";\n}\n.note-editor .glyphicon-resize-vertical:before {\n  content: \"\\e119\";\n}\n.note-editor .glyphicon-resize-horizontal:before {\n  content: \"\\e120\";\n}\n.note-editor .glyphicon-hdd:before {\n  content: \"\\e121\";\n}\n.note-editor .glyphicon-bullhorn:before {\n  content: \"\\e122\";\n}\n.note-editor .glyphicon-bell:before {\n  content: \"\\e123\";\n}\n.note-editor .glyphicon-certificate:before {\n  content: \"\\e124\";\n}\n.note-editor .glyphicon-thumbs-up:before {\n  content: \"\\e125\";\n}\n.note-editor .glyphicon-thumbs-down:before {\n  content: \"\\e126\";\n}\n.note-editor .glyphicon-hand-right:before {\n  content: \"\\e127\";\n}\n.note-editor .glyphicon-hand-left:before {\n  content: \"\\e128\";\n}\n.note-editor .glyphicon-hand-up:before {\n  content: \"\\e129\";\n}\n.note-editor .glyphicon-hand-down:before {\n  content: \"\\e130\";\n}\n.note-editor .glyphicon-circle-arrow-right:before {\n  content: \"\\e131\";\n}\n.note-editor .glyphicon-circle-arrow-left:before {\n  content: \"\\e132\";\n}\n.note-editor .glyphicon-circle-arrow-up:before {\n  content: \"\\e133\";\n}\n.note-editor .glyphicon-circle-arrow-down:before {\n  content: \"\\e134\";\n}\n.note-editor .glyphicon-globe:before {\n  content: \"\\e135\";\n}\n.note-editor .glyphicon-wrench:before {\n  content: \"\\e136\";\n}\n.note-editor .glyphicon-tasks:before {\n  content: \"\\e137\";\n}\n.note-editor .glyphicon-filter:before {\n  content: \"\\e138\";\n}\n.note-editor .glyphicon-briefcase:before {\n  content: \"\\e139\";\n}\n.note-editor .glyphicon-fullscreen:before {\n  content: \"\\e140\";\n}\n.note-editor .glyphicon-dashboard:before {\n  content: \"\\e141\";\n}\n.note-editor .glyphicon-paperclip:before {\n  content: \"\\e142\";\n}\n.note-editor .glyphicon-heart-empty:before {\n  content: \"\\e143\";\n}\n.note-editor .glyphicon-link:before {\n  content: \"\\e144\";\n}\n.note-editor .glyphicon-phone:before {\n  content: \"\\e145\";\n}\n.note-editor .glyphicon-pushpin:before {\n  content: \"\\e146\";\n}\n.note-editor .glyphicon-usd:before {\n  content: \"\\e148\";\n}\n.note-editor .glyphicon-gbp:before {\n  content: \"\\e149\";\n}\n.note-editor .glyphicon-sort:before {\n  content: \"\\e150\";\n}\n.note-editor .glyphicon-sort-by-alphabet:before {\n  content: \"\\e151\";\n}\n.note-editor .glyphicon-sort-by-alphabet-alt:before {\n  content: \"\\e152\";\n}\n.note-editor .glyphicon-sort-by-order:before {\n  content: \"\\e153\";\n}\n.note-editor .glyphicon-sort-by-order-alt:before {\n  content: \"\\e154\";\n}\n.note-editor .glyphicon-sort-by-attributes:before {\n  content: \"\\e155\";\n}\n.note-editor .glyphicon-sort-by-attributes-alt:before {\n  content: \"\\e156\";\n}\n.note-editor .glyphicon-unchecked:before {\n  content: \"\\e157\";\n}\n.note-editor .glyphicon-expand:before {\n  content: \"\\e158\";\n}\n.note-editor .glyphicon-collapse-down:before {\n  content: \"\\e159\";\n}\n.note-editor .glyphicon-collapse-up:before {\n  content: \"\\e160\";\n}\n.note-editor .glyphicon-log-in:before {\n  content: \"\\e161\";\n}\n.note-editor .glyphicon-flash:before {\n  content: \"\\e162\";\n}\n.note-editor .glyphicon-log-out:before {\n  content: \"\\e163\";\n}\n.note-editor .glyphicon-new-window:before {\n  content: \"\\e164\";\n}\n.note-editor .glyphicon-record:before {\n  content: \"\\e165\";\n}\n.note-editor .glyphicon-save:before {\n  content: \"\\e166\";\n}\n.note-editor .glyphicon-open:before {\n  content: \"\\e167\";\n}\n.note-editor .glyphicon-saved:before {\n  content: \"\\e168\";\n}\n.note-editor .glyphicon-import:before {\n  content: \"\\e169\";\n}\n.note-editor .glyphicon-export:before {\n  content: \"\\e170\";\n}\n.note-editor .glyphicon-send:before {\n  content: \"\\e171\";\n}\n.note-editor .glyphicon-floppy-disk:before {\n  content: \"\\e172\";\n}\n.note-editor .glyphicon-floppy-saved:before {\n  content: \"\\e173\";\n}\n.note-editor .glyphicon-floppy-remove:before {\n  content: \"\\e174\";\n}\n.note-editor .glyphicon-floppy-save:before {\n  content: \"\\e175\";\n}\n.note-editor .glyphicon-floppy-open:before {\n  content: \"\\e176\";\n}\n.note-editor .glyphicon-credit-card:before {\n  content: \"\\e177\";\n}\n.note-editor .glyphicon-transfer:before {\n  content: \"\\e178\";\n}\n.note-editor .glyphicon-cutlery:before {\n  content: \"\\e179\";\n}\n.note-editor .glyphicon-header:before {\n  content: \"\\e180\";\n}\n.note-editor .glyphicon-compressed:before {\n  content: \"\\e181\";\n}\n.note-editor .glyphicon-earphone:before {\n  content: \"\\e182\";\n}\n.note-editor .glyphicon-phone-alt:before {\n  content: \"\\e183\";\n}\n.note-editor .glyphicon-tower:before {\n  content: \"\\e184\";\n}\n.note-editor .glyphicon-stats:before {\n  content: \"\\e185\";\n}\n.note-editor .glyphicon-sd-video:before {\n  content: \"\\e186\";\n}\n.note-editor .glyphicon-hd-video:before {\n  content: \"\\e187\";\n}\n.note-editor .glyphicon-subtitles:before {\n  content: \"\\e188\";\n}\n.note-editor .glyphicon-sound-stereo:before {\n  content: \"\\e189\";\n}\n.note-editor .glyphicon-sound-dolby:before {\n  content: \"\\e190\";\n}\n.note-editor .glyphicon-sound-5-1:before {\n  content: \"\\e191\";\n}\n.note-editor .glyphicon-sound-6-1:before {\n  content: \"\\e192\";\n}\n.note-editor .glyphicon-sound-7-1:before {\n  content: \"\\e193\";\n}\n.note-editor .glyphicon-copyright-mark:before {\n  content: \"\\e194\";\n}\n.note-editor .glyphicon-registration-mark:before {\n  content: \"\\e195\";\n}\n.note-editor .glyphicon-cloud-download:before {\n  content: \"\\e197\";\n}\n.note-editor .glyphicon-cloud-upload:before {\n  content: \"\\e198\";\n}\n.note-editor .glyphicon-tree-conifer:before {\n  content: \"\\e199\";\n}\n.note-editor .glyphicon-tree-deciduous:before {\n  content: \"\\e200\";\n}\n.note-editor .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-left: 4px solid transparent;\n  border-bottom: 0 dotted;\n}\n.note-editor .dropdown {\n  position: relative;\n}\n.note-editor .dropdown-toggle:focus {\n  outline: 0;\n}\n.note-editor .dropdown-menu {\n  position: absolute;\n  top: 100%;\n  left: 0;\n  z-index: 1000;\n  display: none;\n  float: left;\n  min-width: 160px;\n  padding: 5px 0;\n  margin: 2px 0 0;\n  list-style: none;\n  font-size: 14px;\n  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.note-editor .dropdown-menu.pull-right {\n  right: 0;\n  left: auto;\n}\n.note-editor .dropdown-menu .divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.note-editor .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.note-editor .dropdown-menu > li > a:hover,\n.note-editor .dropdown-menu > li > a:focus {\n  text-decoration: none;\n  color: #262626;\n  background-color: #f5f5f5;\n}\n.note-editor .dropdown-menu > .active > a,\n.note-editor .dropdown-menu > .active > a:hover,\n.note-editor .dropdown-menu > .active > a:focus {\n  color: #ffffff;\n  text-decoration: none;\n  outline: 0;\n  background-color: #428bca;\n}\n.note-editor .dropdown-menu > .disabled > a,\n.note-editor .dropdown-menu > .disabled > a:hover,\n.note-editor .dropdown-menu > .disabled > a:focus {\n  color: #999999;\n}\n.note-editor .dropdown-menu > .disabled > a:hover,\n.note-editor .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.note-editor .open > .dropdown-menu {\n  display: block;\n  left:0!important;\n    right:auto!important;\n}\n.note-editor .open > a {\n  outline: 0;\n}\n.note-editor .dropdown-header {\n  display: block;\n  padding: 3px 20px;\n  font-size: 12px;\n  line-height: 1.428571429;\n  color: #999999;\n}\n.note-editor .dropdown-backdrop {\n  position: fixed;\n  left: 0;\n  right: 0;\n  bottom: 0;\n  top: 0;\n  z-index: 990;\n}\n.note-editor .pull-right > .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.note-editor .dropup .caret,\n.note-editor .navbar-fixed-bottom .dropdown .caret {\n  border-top: 0 dotted;\n  border-bottom: 4px solid #000000;\n  content: \"\";\n}\n.note-editor .dropup .dropdown-menu,\n.note-editor .navbar-fixed-bottom .dropdown .dropdown-menu {\n  top: auto;\n  bottom: 100%;\n  margin-bottom: 1px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-right .dropdown-menu {\n    right: 0;\n    left: auto;\n  }\n}\n.btn-default .note-editor .caret {\n  border-top-color: #333333;\n}\n.btn-primary .note-editor .caret,\n.btn-success .note-editor .caret,\n.btn-warning .note-editor .caret,\n.btn-danger .note-editor .caret,\n.btn-info .note-editor .caret {\n  border-top-color: #fff;\n}\n.note-editor .dropup .btn-default .caret {\n  border-bottom-color: #333333;\n}\n.note-editor .dropup .btn-primary .caret,\n.note-editor .dropup .btn-success .caret,\n.note-editor .dropup .btn-warning .caret,\n.note-editor .dropup .btn-danger .caret,\n.note-editor .dropup .btn-info .caret {\n  border-bottom-color: #fff;\n}\n.note-editor .btn-group,\n.note-editor .btn-group-vertical {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n}\n.note-editor .btn-group > .btn,\n.note-editor .btn-group-vertical > .btn {\n  position: relative;\n  float: left;\n}\n.note-editor .btn-group > .btn:hover,\n.note-editor .btn-group-vertical > .btn:hover,\n.note-editor .btn-group > .btn:focus,\n.note-editor .btn-group-vertical > .btn:focus,\n.note-editor .btn-group > .btn:active,\n.note-editor .btn-group-vertical > .btn:active,\n.note-editor .btn-group > .btn.active,\n.note-editor .btn-group-vertical > .btn.active {\n  z-index: 2;\n}\n.note-editor .btn-group > .btn:focus,\n.note-editor .btn-group-vertical > .btn:focus {\n  outline: none;\n}\n.note-editor .btn-group .btn + .btn,\n.note-editor .btn-group .btn + .btn-group,\n.note-editor .btn-group .btn-group + .btn,\n.note-editor .btn-group .btn-group + .btn-group {\n  margin-left: -1px;\n}\n.note-editor .btn-toolbar:before,\n.note-editor .btn-toolbar:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .btn-toolbar:after {\n  clear: both;\n}\n.note-editor .btn-toolbar:before,\n.note-editor .btn-toolbar:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .btn-toolbar:after {\n  clear: both;\n}\n.note-editor .btn-toolbar .btn-group {\n  float: left;\n}\n.note-editor .btn-toolbar > .btn + .btn,\n.note-editor .btn-toolbar > .btn-group + .btn,\n.note-editor .btn-toolbar > .btn + .btn-group,\n.note-editor .btn-toolbar > .btn-group + .btn-group {\n  margin-left: 5px;\n}\n.note-editor .btn-group > .btn:not(:first-child):not(:last-child):not(.dropdown-toggle) {\n  border-radius: 0;\n}\n.note-editor .btn-group > .btn:first-child {\n  margin-left: 0;\n}\n.note-editor .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.note-editor .btn-group > .btn:last-child:not(:first-child),\n.note-editor .btn-group > .dropdown-toggle:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .btn-group > .btn-group {\n  float: left;\n}\n.note-editor .btn-group > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.note-editor .btn-group > .btn-group:first-child > .btn:last-child,\n.note-editor .btn-group > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.note-editor .btn-group > .btn-group:last-child > .btn:first-child {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .btn-group .dropdown-toggle:active,\n.note-editor .btn-group.open .dropdown-toggle {\n  outline: 0;\n}\n.note-editor .btn-group-xs > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n  padding: 1px 5px;\n}\n.note-editor .btn-group-sm > .btn {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\n.note-editor .btn-group-lg > .btn {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.33;\n  border-radius: 6px;\n}\n.note-editor .btn-group > .btn + .dropdown-toggle {\n  padding-left: 5px;\n  padding-right: 5px;\n}\n.note-editor .btn-group > .btn-lg + .dropdown-toggle {\n  padding-left: 12px;\n  padding-right: 12px;\n}\n.note-editor .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.note-editor .btn .caret {\n  margin-left: 0;\n}\n.note-editor .btn-lg .caret {\n  border-width: 5px 5px 0;\n  border-bottom-width: 0;\n}\n.note-editor .dropup .btn-lg .caret {\n  border-width: 0 5px 5px;\n}\n.note-editor .btn-group-vertical > .btn,\n.note-editor .btn-group-vertical > .btn-group {\n  display: block;\n  float: none;\n  width: 100%;\n  max-width: 100%;\n}\n.note-editor .btn-group-vertical > .btn-group:before,\n.note-editor .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n.note-editor .btn-group-vertical > .btn-group:before,\n.note-editor .btn-group-vertical > .btn-group:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .btn-group-vertical > .btn-group:after {\n  clear: both;\n}\n.note-editor .btn-group-vertical > .btn-group > .btn {\n  float: none;\n}\n.note-editor .btn-group-vertical > .btn + .btn,\n.note-editor .btn-group-vertical > .btn + .btn-group,\n.note-editor .btn-group-vertical > .btn-group + .btn,\n.note-editor .btn-group-vertical > .btn-group + .btn-group {\n  margin-top: -1px;\n  margin-left: 0;\n}\n.note-editor .btn-group-vertical > .btn:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.note-editor .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.note-editor .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.note-editor .btn-group-vertical > .btn-group:not(:first-child):not(:last-child) > .btn {\n  border-radius: 0;\n}\n.note-editor .btn-group-vertical > .btn-group:first-child > .btn:last-child,\n.note-editor .btn-group-vertical > .btn-group:first-child > .dropdown-toggle {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.note-editor .btn-group-vertical > .btn-group:last-child > .btn:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .btn-group-justified {\n  display: table;\n  width: 100%;\n  table-layout: fixed;\n  border-collapse: separate;\n}\n.note-editor .btn-group-justified .btn {\n  float: none;\n  display: table-cell;\n  width: 1%;\n}\n.note-editor [data-toggle=\"buttons\"] > .btn > input[type=\"radio\"],\n.note-editor [data-toggle=\"buttons\"] > .btn > input[type=\"checkbox\"] {\n  display: none;\n}\n.note-editor .input-group {\n  position: relative;\n  display: table;\n  border-collapse: separate;\n}\n.note-editor .input-group.col {\n  float: none;\n  padding-left: 0;\n  padding-right: 0;\n}\n.note-editor .input-group .form-control {\n  width: 100%;\n  margin-bottom: 0;\n}\n.note-editor .input-group-lg > .form-control,\n.note-editor .input-group-lg > .input-group-addon,\n.note-editor .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}\nselect.note-editor .input-group-lg > .form-control,\nselect.note-editor .input-group-lg > .input-group-addon,\nselect.note-editor .input-group-lg > .input-group-btn > .btn {\n  height: 45px;\n  line-height: 45px;\n}\ntextarea.note-editor .input-group-lg > .form-control,\ntextarea.note-editor .input-group-lg > .input-group-addon,\ntextarea.note-editor .input-group-lg > .input-group-btn > .btn {\n  height: auto;\n}\n.note-editor .input-group-sm > .form-control,\n.note-editor .input-group-sm > .input-group-addon,\n.note-editor .input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n  border-radius: 3px;\n}\nselect.note-editor .input-group-sm > .form-control,\nselect.note-editor .input-group-sm > .input-group-addon,\nselect.note-editor .input-group-sm > .input-group-btn > .btn {\n  height: 30px;\n  line-height: 30px;\n}\ntextarea.note-editor .input-group-sm > .form-control,\ntextarea.note-editor .input-group-sm > .input-group-addon,\ntextarea.note-editor .input-group-sm > .input-group-btn > .btn {\n  height: auto;\n}\n.note-editor .input-group-addon,\n.note-editor .input-group-btn,\n.note-editor .input-group .form-control {\n  display: table-cell;\n}\n.note-editor .input-group-addon:not(:first-child):not(:last-child),\n.note-editor .input-group-btn:not(:first-child):not(:last-child),\n.note-editor .input-group .form-control:not(:first-child):not(:last-child) {\n  border-radius: 0;\n}\n.note-editor .input-group-addon,\n.note-editor .input-group-btn {\n  width: 1%;\n  white-space: nowrap;\n  vertical-align: middle;\n}\n.note-editor .input-group-addon {\n  padding: 6px 12px;\n  font-size: 14px;\n  font-weight: normal;\n  line-height: 1;\n  color: #555555;\n  text-align: center;\n  background-color: #eeeeee;\n  border: 1px solid #cccccc;\n  border-radius: 4px;\n}\n.note-editor .input-group-addon.input-sm {\n  padding: 5px 10px;\n  font-size: 12px;\n  border-radius: 3px;\n}\n.note-editor .input-group-addon.input-lg {\n  padding: 10px 16px;\n  font-size: 18px;\n  border-radius: 6px;\n}\n.note-editor .input-group-addon input[type=\"radio\"],\n.note-editor .input-group-addon input[type=\"checkbox\"] {\n  margin-top: 0;\n}\n.note-editor .input-group .form-control:first-child,\n.note-editor .input-group-addon:first-child,\n.note-editor .input-group-btn:first-child > .btn,\n.note-editor .input-group-btn:first-child > .dropdown-toggle,\n.note-editor .input-group-btn:last-child > .btn:not(:last-child):not(.dropdown-toggle) {\n  border-bottom-right-radius: 0;\n  border-top-right-radius: 0;\n}\n.note-editor .input-group-addon:first-child {\n  border-right: 0;\n}\n.note-editor .input-group .form-control:last-child,\n.note-editor .input-group-addon:last-child,\n.note-editor .input-group-btn:last-child > .btn,\n.note-editor .input-group-btn:last-child > .dropdown-toggle,\n.note-editor .input-group-btn:first-child > .btn:not(:first-child) {\n  border-bottom-left-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .input-group-addon:last-child {\n  border-left: 0;\n}\n.note-editor .input-group-btn {\n  position: relative;\n  white-space: nowrap;\n}\n.note-editor .input-group-btn:first-child > .btn {\n  margin-right: -1px;\n}\n.note-editor .input-group-btn:last-child > .btn {\n  margin-left: -1px;\n}\n.note-editor .input-group-btn > .btn {\n  position: relative;\n}\n.note-editor .input-group-btn > .btn + .btn {\n  margin-left: -4px;\n}\n.note-editor .input-group-btn > .btn:hover,\n.note-editor .input-group-btn > .btn:active {\n  z-index: 2;\n}\n.note-editor .nav {\n  margin-bottom: 0;\n  padding-left: 0;\n  list-style: none;\n}\n.note-editor .nav:before,\n.note-editor .nav:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .nav:after {\n  clear: both;\n}\n.note-editor .nav:before,\n.note-editor .nav:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .nav:after {\n  clear: both;\n}\n.note-editor .nav > li {\n  position: relative;\n  display: block;\n}\n.note-editor .nav > li > a {\n  position: relative;\n  display: block;\n  padding: 10px 15px;\n}\n.note-editor .nav > li > a:hover,\n.note-editor .nav > li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.note-editor .nav > li.disabled > a {\n  color: #999999;\n}\n.note-editor .nav > li.disabled > a:hover,\n.note-editor .nav > li.disabled > a:focus {\n  color: #999999;\n  text-decoration: none;\n  background-color: transparent;\n  cursor: not-allowed;\n}\n.note-editor .nav .open > a,\n.note-editor .nav .open > a:hover,\n.note-editor .nav .open > a:focus {\n  background-color: #eeeeee;\n  border-color: #428bca;\n}\n.note-editor .nav .open > a .caret,\n.note-editor .nav .open > a:hover .caret,\n.note-editor .nav .open > a:focus .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n.note-editor .nav .nav-divider {\n  height: 1px;\n  margin: 9px 0;\n  overflow: hidden;\n  background-color: #e5e5e5;\n}\n.note-editor .nav > li > a > img {\n  max-width: none;\n}\n.note-editor .nav-tabs {\n  border-bottom: 1px solid #dddddd;\n}\n.note-editor .nav-tabs > li {\n  float: left;\n  margin-bottom: -1px;\n}\n.note-editor .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.note-editor .nav-tabs > li > a:hover {\n  border-color: #eeeeee #eeeeee #dddddd;\n}\n.note-editor .nav-tabs > li.active > a,\n.note-editor .nav-tabs > li.active > a:hover,\n.note-editor .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.note-editor .nav-tabs.nav-justified {\n  width: 100%;\n  border-bottom: 0;\n}\n.note-editor .nav-tabs.nav-justified > li {\n  float: none;\n}\n.note-editor .nav-tabs.nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n@media (min-width: 768px) {\n  .note-editor .nav-tabs.nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .note-editor .nav-tabs.nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.note-editor .nav-tabs.nav-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.note-editor .nav-tabs.nav-justified > .active > a,\n.note-editor .nav-tabs.nav-justified > .active > a:hover,\n.note-editor .nav-tabs.nav-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .note-editor .nav-tabs.nav-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .note-editor .nav-tabs.nav-justified > .active > a,\n  .note-editor .nav-tabs.nav-justified > .active > a:hover,\n  .note-editor .nav-tabs.nav-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.note-editor .nav-pills > li {\n  float: left;\n}\n.note-editor .nav-pills > li > a {\n  border-radius: 4px;\n}\n.note-editor .nav-pills > li + li {\n  margin-left: 2px;\n}\n.note-editor .nav-pills > li.active > a,\n.note-editor .nav-pills > li.active > a:hover,\n.note-editor .nav-pills > li.active > a:focus {\n  color: #ffffff;\n  background-color: #428bca;\n}\n.note-editor .nav-pills > li.active > a .caret,\n.note-editor .nav-pills > li.active > a:hover .caret,\n.note-editor .nav-pills > li.active > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n.note-editor .nav-stacked > li {\n  float: none;\n}\n.note-editor .nav-stacked > li + li {\n  margin-top: 2px;\n  margin-left: 0;\n}\n.note-editor .nav-justified {\n  width: 100%;\n}\n.note-editor .nav-justified > li {\n  float: none;\n}\n.note-editor .nav-justified > li > a {\n  text-align: center;\n  margin-bottom: 5px;\n}\n@media (min-width: 768px) {\n  .note-editor .nav-justified > li {\n    display: table-cell;\n    width: 1%;\n  }\n  .note-editor .nav-justified > li > a {\n    margin-bottom: 0;\n  }\n}\n.note-editor .nav-tabs-justified {\n  border-bottom: 0;\n}\n.note-editor .nav-tabs-justified > li > a {\n  margin-right: 0;\n  border-radius: 4px;\n}\n.note-editor .nav-tabs-justified > .active > a,\n.note-editor .nav-tabs-justified > .active > a:hover,\n.note-editor .nav-tabs-justified > .active > a:focus {\n  border: 1px solid #dddddd;\n}\n@media (min-width: 768px) {\n  .note-editor .nav-tabs-justified > li > a {\n    border-bottom: 1px solid #dddddd;\n    border-radius: 4px 4px 0 0;\n  }\n  .note-editor .nav-tabs-justified > .active > a,\n  .note-editor .nav-tabs-justified > .active > a:hover,\n  .note-editor .nav-tabs-justified > .active > a:focus {\n    border-bottom-color: #ffffff;\n  }\n}\n.note-editor .tab-content > .tab-pane {\n  display: none;\n}\n.note-editor .tab-content > .active {\n  display: block;\n}\n.note-editor .nav .caret {\n  border-top-color: #428bca;\n  border-bottom-color: #428bca;\n}\n.note-editor .nav a:hover .caret {\n  border-top-color: #2a6496;\n  border-bottom-color: #2a6496;\n}\n.note-editor .nav-tabs .dropdown-menu {\n  margin-top: -1px;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .navbar {\n  position: relative;\n  z-index: 1000;\n  min-height: 50px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n}\n.note-editor .navbar:before,\n.note-editor .navbar:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar:after {\n  clear: both;\n}\n.note-editor .navbar:before,\n.note-editor .navbar:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar {\n    border-radius: 4px;\n  }\n}\n.note-editor .navbar-header:before,\n.note-editor .navbar-header:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar-header:after {\n  clear: both;\n}\n.note-editor .navbar-header:before,\n.note-editor .navbar-header:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar-header:after {\n  clear: both;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-header {\n    float: left;\n  }\n}\n.note-editor .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.note-editor .navbar-collapse:before,\n.note-editor .navbar-collapse:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar-collapse:after {\n  clear: both;\n}\n.note-editor .navbar-collapse:before,\n.note-editor .navbar-collapse:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .navbar-collapse:after {\n  clear: both;\n}\n.note-editor .navbar-collapse.in {\n  overflow-y: auto;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-collapse {\n    width: auto;\n    border-top: 0;\n    box-shadow: none;\n  }\n  .note-editor .navbar-collapse.collapse {\n    display: block !important;\n    height: auto !important;\n    padding-bottom: 0;\n    overflow: visible !important;\n  }\n  .note-editor .navbar-collapse.in {\n    overflow-y: visible;\n  }\n  .note-editor .navbar-collapse .navbar-nav.navbar-left:first-child {\n    margin-left: -15px;\n  }\n  .note-editor .navbar-collapse .navbar-nav.navbar-right:last-child {\n    margin-right: -15px;\n  }\n  .note-editor .navbar-collapse .navbar-text:last-child {\n    margin-right: 0;\n  }\n}\n.note-editor .container > .navbar-header,\n.note-editor .container > .navbar-collapse {\n  margin-right: -15px;\n  margin-left: -15px;\n}\n@media (min-width: 768px) {\n  .note-editor .container > .navbar-header,\n  .note-editor .container > .navbar-collapse {\n    margin-right: 0;\n    margin-left: 0;\n  }\n}\n.note-editor .navbar-static-top {\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-static-top {\n    border-radius: 0;\n  }\n}\n.note-editor .navbar-fixed-top,\n.note-editor .navbar-fixed-bottom {\n  position: fixed;\n  right: 0;\n  left: 0;\n  border-width: 0 0 1px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-fixed-top,\n  .note-editor .navbar-fixed-bottom {\n    border-radius: 0;\n  }\n}\n.note-editor .navbar-fixed-top {\n  z-index: 1030;\n  top: 0;\n}\n.note-editor .navbar-fixed-bottom {\n  bottom: 0;\n  margin-bottom: 0;\n}\n.note-editor .navbar-brand {\n  float: left;\n  padding: 15px 15px;\n  font-size: 18px;\n  line-height: 20px;\n}\n.note-editor .navbar-brand:hover,\n.note-editor .navbar-brand:focus {\n  text-decoration: none;\n}\n@media (min-width: 768px) {\n  .navbar > .container .note-editor .navbar-brand {\n    margin-left: -15px;\n  }\n}\n.note-editor .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  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.note-editor .navbar-toggle .icon-bar {\n  display: block;\n  width: 22px;\n  height: 2px;\n  border-radius: 1px;\n}\n.note-editor .navbar-toggle .icon-bar + .icon-bar {\n  margin-top: 4px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-toggle {\n    display: none;\n  }\n}\n.note-editor .navbar-nav {\n  margin: 7.5px -15px;\n}\n.note-editor .navbar-nav > li > a {\n  padding-top: 10px;\n  padding-bottom: 10px;\n  line-height: 20px;\n}\n@media (max-width: 767px) {\n  .note-editor .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  .note-editor .navbar-nav .open .dropdown-menu > li > a,\n  .note-editor .navbar-nav .open .dropdown-menu .dropdown-header {\n    padding: 5px 15px 5px 25px;\n  }\n  .note-editor .navbar-nav .open .dropdown-menu > li > a {\n    line-height: 20px;\n  }\n  .note-editor .navbar-nav .open .dropdown-menu > li > a:hover,\n  .note-editor .navbar-nav .open .dropdown-menu > li > a:focus {\n    background-image: none;\n  }\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-nav {\n    float: left;\n    margin: 0;\n  }\n  .note-editor .navbar-nav > li {\n    float: left;\n  }\n  .note-editor .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n  }\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-left {\n    float: left !important;\n  }\n  .note-editor .navbar-right {\n    float: right !important;\n  }\n}\n.note-editor .navbar-form {\n  margin-left: -15px;\n  margin-right: -15px;\n  padding: 10px 15px;\n  border-top: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1);\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-form .form-group {\n    display: inline-block;\n    margin-bottom: 0;\n    vertical-align: middle;\n  }\n  .note-editor .navbar-form .form-control {\n    display: inline-block;\n  }\n  .note-editor .navbar-form .radio,\n  .note-editor .navbar-form .checkbox {\n    display: inline-block;\n    margin-top: 0;\n    margin-bottom: 0;\n    padding-left: 0;\n  }\n  .note-editor .navbar-form .radio input[type=\"radio\"],\n  .note-editor .navbar-form .checkbox input[type=\"checkbox\"] {\n    float: none;\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .note-editor .navbar-form .form-group {\n    margin-bottom: 5px;\n  }\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-form {\n    width: auto;\n    border: 0;\n    margin-left: 0;\n    margin-right: 0;\n    padding-top: 0;\n    padding-bottom: 0;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n.note-editor .navbar-nav > li > .dropdown-menu {\n  margin-top: 0;\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .navbar-fixed-bottom .navbar-nav > li > .dropdown-menu {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n}\n.note-editor .navbar-nav.pull-right > li > .dropdown-menu,\n.note-editor .navbar-nav > li > .dropdown-menu.pull-right {\n  left: auto;\n  right: 0;\n}\n.note-editor .navbar-btn {\n  margin-top: 8px;\n  margin-bottom: 8px;\n}\n.note-editor .navbar-text {\n  float: left;\n  margin-top: 15px;\n  margin-bottom: 15px;\n}\n@media (min-width: 768px) {\n  .note-editor .navbar-text {\n    margin-left: 15px;\n    margin-right: 15px;\n  }\n}\n.note-editor .navbar-default {\n  background-color: #f8f8f8;\n  border-color: #e7e7e7;\n}\n.note-editor .navbar-default .navbar-brand {\n  color: #777777;\n}\n.note-editor .navbar-default .navbar-brand:hover,\n.note-editor .navbar-default .navbar-brand:focus {\n  color: #5e5e5e;\n  background-color: transparent;\n}\n.note-editor .navbar-default .navbar-text {\n  color: #777777;\n}\n.note-editor .navbar-default .navbar-nav > li > a {\n  color: #777777;\n}\n.note-editor .navbar-default .navbar-nav > li > a:hover,\n.note-editor .navbar-default .navbar-nav > li > a:focus {\n  color: #333333;\n  background-color: transparent;\n}\n.note-editor .navbar-default .navbar-nav > .active > a,\n.note-editor .navbar-default .navbar-nav > .active > a:hover,\n.note-editor .navbar-default .navbar-nav > .active > a:focus {\n  color: #555555;\n  background-color: #e7e7e7;\n}\n.note-editor .navbar-default .navbar-nav > .disabled > a,\n.note-editor .navbar-default .navbar-nav > .disabled > a:hover,\n.note-editor .navbar-default .navbar-nav > .disabled > a:focus {\n  color: #cccccc;\n  background-color: transparent;\n}\n.note-editor .navbar-default .navbar-toggle {\n  border-color: #dddddd;\n}\n.note-editor .navbar-default .navbar-toggle:hover,\n.note-editor .navbar-default .navbar-toggle:focus {\n  background-color: #dddddd;\n}\n.note-editor .navbar-default .navbar-toggle .icon-bar {\n  background-color: #cccccc;\n}\n.note-editor .navbar-default .navbar-collapse,\n.note-editor .navbar-default .navbar-form {\n  border-color: #e7e7e7;\n}\n.note-editor .navbar-default .navbar-nav > .dropdown > a:hover .caret,\n.note-editor .navbar-default .navbar-nav > .dropdown > a:focus .caret {\n  border-top-color: #333333;\n  border-bottom-color: #333333;\n}\n.note-editor .navbar-default .navbar-nav > .open > a,\n.note-editor .navbar-default .navbar-nav > .open > a:hover,\n.note-editor .navbar-default .navbar-nav > .open > a:focus {\n  background-color: #e7e7e7;\n  color: #555555;\n}\n.note-editor .navbar-default .navbar-nav > .open > a .caret,\n.note-editor .navbar-default .navbar-nav > .open > a:hover .caret,\n.note-editor .navbar-default .navbar-nav > .open > a:focus .caret {\n  border-top-color: #555555;\n  border-bottom-color: #555555;\n}\n.note-editor .navbar-default .navbar-nav > .dropdown > a .caret {\n  border-top-color: #777777;\n  border-bottom-color: #777777;\n}\n@media (max-width: 767px) {\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > li > a {\n    color: #777777;\n  }\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > li > a:hover,\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #333333;\n    background-color: transparent;\n  }\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .active > a,\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #555555;\n    background-color: #e7e7e7;\n  }\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a,\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .note-editor .navbar-default .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #cccccc;\n    background-color: transparent;\n  }\n}\n.note-editor .navbar-default .navbar-link {\n  color: #777777;\n}\n.note-editor .navbar-default .navbar-link:hover {\n  color: #333333;\n}\n.note-editor .navbar-inverse {\n  background-color: #222222;\n  border-color: #080808;\n}\n.note-editor .navbar-inverse .navbar-brand {\n  color: #999999;\n}\n.note-editor .navbar-inverse .navbar-brand:hover,\n.note-editor .navbar-inverse .navbar-brand:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.note-editor .navbar-inverse .navbar-text {\n  color: #999999;\n}\n.note-editor .navbar-inverse .navbar-nav > li > a {\n  color: #999999;\n}\n.note-editor .navbar-inverse .navbar-nav > li > a:hover,\n.note-editor .navbar-inverse .navbar-nav > li > a:focus {\n  color: #ffffff;\n  background-color: transparent;\n}\n.note-editor .navbar-inverse .navbar-nav > .active > a,\n.note-editor .navbar-inverse .navbar-nav > .active > a:hover,\n.note-editor .navbar-inverse .navbar-nav > .active > a:focus {\n  color: #ffffff;\n  background-color: #080808;\n}\n.note-editor .navbar-inverse .navbar-nav > .disabled > a,\n.note-editor .navbar-inverse .navbar-nav > .disabled > a:hover,\n.note-editor .navbar-inverse .navbar-nav > .disabled > a:focus {\n  color: #444444;\n  background-color: transparent;\n}\n.note-editor .navbar-inverse .navbar-toggle {\n  border-color: #333333;\n}\n.note-editor .navbar-inverse .navbar-toggle:hover,\n.note-editor .navbar-inverse .navbar-toggle:focus {\n  background-color: #333333;\n}\n.note-editor .navbar-inverse .navbar-toggle .icon-bar {\n  background-color: #ffffff;\n}\n.note-editor .navbar-inverse .navbar-collapse,\n.note-editor .navbar-inverse .navbar-form {\n  border-color: #101010;\n}\n.note-editor .navbar-inverse .navbar-nav > .open > a,\n.note-editor .navbar-inverse .navbar-nav > .open > a:hover,\n.note-editor .navbar-inverse .navbar-nav > .open > a:focus {\n  background-color: #080808;\n  color: #ffffff;\n}\n.note-editor .navbar-inverse .navbar-nav > .dropdown > a:hover .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n.note-editor .navbar-inverse .navbar-nav > .dropdown > a .caret {\n  border-top-color: #999999;\n  border-bottom-color: #999999;\n}\n.note-editor .navbar-inverse .navbar-nav > .open > a .caret,\n.note-editor .navbar-inverse .navbar-nav > .open > a:hover .caret,\n.note-editor .navbar-inverse .navbar-nav > .open > a:focus .caret {\n  border-top-color: #ffffff;\n  border-bottom-color: #ffffff;\n}\n@media (max-width: 767px) {\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .dropdown-header {\n    border-color: #080808;\n  }\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > li > a {\n    color: #999999;\n  }\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:hover,\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > li > a:focus {\n    color: #ffffff;\n    background-color: transparent;\n  }\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a,\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:hover,\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .active > a:focus {\n    color: #ffffff;\n    background-color: #080808;\n  }\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a,\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:hover,\n  .note-editor .navbar-inverse .navbar-nav .open .dropdown-menu > .disabled > a:focus {\n    color: #444444;\n    background-color: transparent;\n  }\n}\n.note-editor .navbar-inverse .navbar-link {\n  color: #999999;\n}\n.note-editor .navbar-inverse .navbar-link:hover {\n  color: #ffffff;\n}\n.note-editor .breadcrumb {\n  padding: 8px 15px;\n  margin-bottom: 20px;\n  list-style: none;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n}\n.note-editor .breadcrumb > li {\n  display: inline-block;\n}\n.note-editor .breadcrumb > li + li:before {\n  content: \"/\\00a0\";\n  padding: 0 5px;\n  color: #cccccc;\n}\n.note-editor .breadcrumb > .active {\n  color: #999999;\n}\n.note-editor .pagination {\n  display: inline-block;\n  padding-left: 0;\n  margin: 20px 0;\n  border-radius: 4px;\n}\n.note-editor .pagination > li {\n  display: inline;\n}\n.note-editor .pagination > li > a,\n.note-editor .pagination > li > span {\n  position: relative;\n  float: left;\n  padding: 6px 12px;\n  line-height: 1.428571429;\n  text-decoration: none;\n  background-color: #ffffff;\n  border: 1px solid #dddddd;\n  margin-left: -1px;\n}\n.note-editor .pagination > li:first-child > a,\n.note-editor .pagination > li:first-child > span {\n  margin-left: 0;\n  border-bottom-left-radius: 4px;\n  border-top-left-radius: 4px;\n}\n.note-editor .pagination > li:last-child > a,\n.note-editor .pagination > li:last-child > span {\n  border-bottom-right-radius: 4px;\n  border-top-right-radius: 4px;\n}\n.note-editor .pagination > li > a:hover,\n.note-editor .pagination > li > span:hover,\n.note-editor .pagination > li > a:focus,\n.note-editor .pagination > li > span:focus {\n  background-color: #eeeeee;\n}\n.note-editor .pagination > .active > a,\n.note-editor .pagination > .active > span,\n.note-editor .pagination > .active > a:hover,\n.note-editor .pagination > .active > span:hover,\n.note-editor .pagination > .active > a:focus,\n.note-editor .pagination > .active > span:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n  cursor: default;\n}\n.note-editor .pagination > .disabled > span,\n.note-editor .pagination > .disabled > span:hover,\n.note-editor .pagination > .disabled > span:focus,\n.note-editor .pagination > .disabled > a,\n.note-editor .pagination > .disabled > a:hover,\n.note-editor .pagination > .disabled > a:focus {\n  color: #999999;\n  background-color: #ffffff;\n  border-color: #dddddd;\n  cursor: not-allowed;\n}\n.note-editor .pagination-lg > li > a,\n.note-editor .pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n}\n.note-editor .pagination-lg > li:first-child > a,\n.note-editor .pagination-lg > li:first-child > span {\n  border-bottom-left-radius: 6px;\n  border-top-left-radius: 6px;\n}\n.note-editor .pagination-lg > li:last-child > a,\n.note-editor .pagination-lg > li:last-child > span {\n  border-bottom-right-radius: 6px;\n  border-top-right-radius: 6px;\n}\n.note-editor .pagination-sm > li > a,\n.note-editor .pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n}\n.note-editor .pagination-sm > li:first-child > a,\n.note-editor .pagination-sm > li:first-child > span {\n  border-bottom-left-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.note-editor .pagination-sm > li:last-child > a,\n.note-editor .pagination-sm > li:last-child > span {\n  border-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n.note-editor .pager {\n  padding-left: 0;\n  margin: 20px 0;\n  list-style: none;\n  text-align: center;\n}\n.note-editor .pager:before,\n.note-editor .pager:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .pager:after {\n  clear: both;\n}\n.note-editor .pager:before,\n.note-editor .pager:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .pager:after {\n  clear: both;\n}\n.note-editor .pager li {\n  display: inline;\n}\n.note-editor .pager li > a,\n.note-editor .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.note-editor .pager li > a:hover,\n.note-editor .pager li > a:focus {\n  text-decoration: none;\n  background-color: #eeeeee;\n}\n.note-editor .pager .next > a,\n.note-editor .pager .next > span {\n  float: right;\n}\n.note-editor .pager .previous > a,\n.note-editor .pager .previous > span {\n  float: left;\n}\n.note-editor .pager .disabled > a,\n.note-editor .pager .disabled > a:hover,\n.note-editor .pager .disabled > a:focus,\n.note-editor .pager .disabled > span {\n  color: #999999;\n  background-color: #ffffff;\n  cursor: not-allowed;\n}\n.note-editor .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.note-editor .label[href]:hover,\n.note-editor .label[href]:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.note-editor .label:empty {\n  display: none;\n}\n.note-editor .label-default {\n  background-color: #999999;\n}\n.note-editor .label-default[href]:hover,\n.note-editor .label-default[href]:focus {\n  background-color: #808080;\n}\n.note-editor .label-primary {\n  background-color: #428bca;\n}\n.note-editor .label-primary[href]:hover,\n.note-editor .label-primary[href]:focus {\n  background-color: #3071a9;\n}\n.note-editor .label-success {\n  background-color: #5cb85c;\n}\n.note-editor .label-success[href]:hover,\n.note-editor .label-success[href]:focus {\n  background-color: #449d44;\n}\n.note-editor .label-info {\n  background-color: #5bc0de;\n}\n.note-editor .label-info[href]:hover,\n.note-editor .label-info[href]:focus {\n  background-color: #31b0d5;\n}\n.note-editor .label-warning {\n  background-color: #f0ad4e;\n}\n.note-editor .label-warning[href]:hover,\n.note-editor .label-warning[href]:focus {\n  background-color: #ec971f;\n}\n.note-editor .label-danger {\n  background-color: #d9534f;\n}\n.note-editor .label-danger[href]:hover,\n.note-editor .label-danger[href]:focus {\n  background-color: #c9302c;\n}\n.note-editor .badge {\n  display: inline-block;\n  min-width: 10px;\n  padding: 3px 7px;\n  font-size: 12px;\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: #999999;\n  border-radius: 10px;\n}\n.note-editor .badge:empty {\n  display: none;\n}\n.note-editor a.badge:hover,\n.note-editor a.badge:focus {\n  color: #ffffff;\n  text-decoration: none;\n  cursor: pointer;\n}\n.note-editor .btn .badge {\n  position: relative;\n  top: -1px;\n}\n.note-editor a.list-group-item.active > .badge,\n.note-editor .nav-pills > .active > a > .badge {\n  color: #428bca;\n  background-color: #ffffff;\n}\n.note-editor .nav-pills > li > a > .badge {\n  margin-left: 3px;\n}\n.note-editor .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.note-editor .jumbotron h1 {\n  line-height: 1;\n  color: inherit;\n}\n.note-editor .jumbotron p {\n  line-height: 1.4;\n}\n.container .note-editor .jumbotron {\n  border-radius: 6px;\n}\n@media screen and (min-width: 768px) {\n  .note-editor .jumbotron {\n    padding-top: 48px;\n    padding-bottom: 48px;\n  }\n  .container .note-editor .jumbotron {\n    padding-left: 60px;\n    padding-right: 60px;\n  }\n  .note-editor .jumbotron h1 {\n    font-size: 63px;\n  }\n}\n.note-editor .thumbnail {\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  display: inline-block;\n  max-width: 100%;\n  height: auto;\n  display: block;\n  margin-bottom: 20px;\n}\n.note-editor .thumbnail > img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n.note-editor a.thumbnail:hover,\n.note-editor a.thumbnail:focus,\n.note-editor a.thumbnail.active {\n  border-color: #428bca;\n}\n.note-editor .thumbnail > img {\n  margin-left: auto;\n  margin-right: auto;\n}\n.note-editor .thumbnail .caption {\n  padding: 9px;\n  color: #333333;\n}\n.note-editor .alert {\n  padding: 15px;\n  margin-bottom: 20px;\n  border: 1px solid transparent;\n  border-radius: 4px;\n}\n.note-editor .alert h4 {\n  margin-top: 0;\n  color: inherit;\n}\n.note-editor .alert .alert-link {\n  font-weight: bold;\n}\n.note-editor .alert > p,\n.note-editor .alert > ul {\n  margin-bottom: 0;\n}\n.note-editor .alert > p + p {\n  margin-top: 5px;\n}\n.note-editor .alert-dismissable {\n  padding-right: 35px;\n}\n.note-editor .alert-dismissable .close {\n  position: relative;\n  top: -2px;\n  right: -21px;\n  color: inherit;\n}\n.note-editor .alert-success {\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n  color: #468847;\n}\n.note-editor .alert-success hr {\n  border-top-color: #c9e2b3;\n}\n.note-editor .alert-success .alert-link {\n  color: #356635;\n}\n.note-editor .alert-info {\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n  color: #3a87ad;\n}\n.note-editor .alert-info hr {\n  border-top-color: #a6e1ec;\n}\n.note-editor .alert-info .alert-link {\n  color: #2d6987;\n}\n.note-editor .alert-warning {\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n  color: #c09853;\n}\n.note-editor .alert-warning hr {\n  border-top-color: #f7e1b5;\n}\n.note-editor .alert-warning .alert-link {\n  color: #a47e3c;\n}\n.note-editor .alert-danger {\n  background-color: #f2dede;\n  border-color: #ebccd1;\n  color: #b94a48;\n}\n.note-editor .alert-danger hr {\n  border-top-color: #e4b9c0;\n}\n.note-editor .alert-danger .alert-link {\n  color: #953b39;\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@-moz-keyframes progress-bar-stripes {\n  from {\n    background-position: 40px 0;\n  }\n  to {\n    background-position: 0 0;\n  }\n}\n@-o-keyframes progress-bar-stripes {\n  from {\n    background-position: 0 0;\n  }\n  to {\n    background-position: 40px 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.note-editor .progress {\n  overflow: hidden;\n  height: 20px;\n  margin-bottom: 20px;\n  background-color: #f5f5f5;\n  border-radius: 4px;\n  -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n  box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1);\n}\n.note-editor .progress-bar {\n  float: left;\n  width: 0%;\n  height: 100%;\n  font-size: 12px;\n  line-height: 20px;\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.note-editor .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.note-editor .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.note-editor .progress-bar-success {\n  background-color: #5cb85c;\n}\n.progress-striped .note-editor .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.note-editor .progress-bar-info {\n  background-color: #5bc0de;\n}\n.progress-striped .note-editor .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.note-editor .progress-bar-warning {\n  background-color: #f0ad4e;\n}\n.progress-striped .note-editor .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.note-editor .progress-bar-danger {\n  background-color: #d9534f;\n}\n.progress-striped .note-editor .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.note-editor .media,\n.note-editor .media-body {\n  overflow: hidden;\n  zoom: 1;\n}\n.note-editor .media,\n.note-editor .media .media {\n  margin-top: 15px;\n}\n.note-editor .media:first-child {\n  margin-top: 0;\n}\n.note-editor .media-object {\n  display: block;\n}\n.note-editor .media-heading {\n  margin: 0 0 5px;\n}\n.note-editor .media > .pull-left {\n  margin-right: 10px;\n}\n.note-editor .media > .pull-right {\n  margin-left: 10px;\n}\n.note-editor .media-list {\n  padding-left: 0;\n  list-style: none;\n}\n.note-editor .list-group {\n  margin-bottom: 20px;\n  padding-left: 0;\n}\n.note-editor .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.note-editor .list-group-item:first-child {\n  border-top-right-radius: 4px;\n  border-top-left-radius: 4px;\n}\n.note-editor .list-group-item:last-child {\n  margin-bottom: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.note-editor .list-group-item > .badge {\n  float: right;\n}\n.note-editor .list-group-item > .badge + .badge {\n  margin-right: 5px;\n}\n.note-editor a.list-group-item {\n  color: #555555;\n}\n.note-editor a.list-group-item .list-group-item-heading {\n  color: #333333;\n}\n.note-editor a.list-group-item:hover,\n.note-editor a.list-group-item:focus {\n  text-decoration: none;\n  background-color: #f5f5f5;\n}\n.note-editor a.list-group-item.active,\n.note-editor a.list-group-item.active:hover,\n.note-editor a.list-group-item.active:focus {\n  z-index: 2;\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.note-editor a.list-group-item.active .list-group-item-heading,\n.note-editor a.list-group-item.active:hover .list-group-item-heading,\n.note-editor a.list-group-item.active:focus .list-group-item-heading {\n  color: inherit;\n}\n.note-editor a.list-group-item.active .list-group-item-text,\n.note-editor a.list-group-item.active:hover .list-group-item-text,\n.note-editor a.list-group-item.active:focus .list-group-item-text {\n  color: #e1edf7;\n}\n.note-editor .list-group-item-heading {\n  margin-top: 0;\n  margin-bottom: 5px;\n}\n.note-editor .list-group-item-text {\n  margin-bottom: 0;\n  line-height: 1.3;\n}\n.note-editor .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.note-editor .panel-body {\n  padding: 15px;\n}\n.note-editor .panel-body:before,\n.note-editor .panel-body:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .panel-body:after {\n  clear: both;\n}\n.note-editor .panel-body:before,\n.note-editor .panel-body:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.note-editor .panel-body:after {\n  clear: both;\n}\n.note-editor .panel > .list-group {\n  margin-bottom: 0;\n}\n.note-editor .panel > .list-group .list-group-item {\n  border-width: 1px 0;\n}\n.note-editor .panel > .list-group .list-group-item:first-child {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n}\n.note-editor .panel > .list-group .list-group-item:last-child {\n  border-bottom: 0;\n}\n.note-editor .panel-heading + .list-group .list-group-item:first-child {\n  border-top-width: 0;\n}\n.note-editor .panel > .table,\n.note-editor .panel > .table-responsive {\n  margin-bottom: 0;\n}\n.note-editor .panel > .panel-body + .table,\n.note-editor .panel > .panel-body + .table-responsive {\n  border-top: 1px solid #dddddd;\n}\n.note-editor .panel > .table-bordered,\n.note-editor .panel > .table-responsive > .table-bordered {\n  border: 0;\n}\n.note-editor .panel > .table-bordered > thead > tr > th:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr > th:first-child,\n.note-editor .panel > .table-bordered > tbody > tr > th:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr > th:first-child,\n.note-editor .panel > .table-bordered > tfoot > tr > th:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr > th:first-child,\n.note-editor .panel > .table-bordered > thead > tr > td:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr > td:first-child,\n.note-editor .panel > .table-bordered > tbody > tr > td:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr > td:first-child,\n.note-editor .panel > .table-bordered > tfoot > tr > td:first-child,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr > td:first-child {\n  border-left: 0;\n}\n.note-editor .panel > .table-bordered > thead > tr > th:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr > th:last-child,\n.note-editor .panel > .table-bordered > tbody > tr > th:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr > th:last-child,\n.note-editor .panel > .table-bordered > tfoot > tr > th:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr > th:last-child,\n.note-editor .panel > .table-bordered > thead > tr > td:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr > td:last-child,\n.note-editor .panel > .table-bordered > tbody > tr > td:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr > td:last-child,\n.note-editor .panel > .table-bordered > tfoot > tr > td:last-child,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr > td:last-child {\n  border-right: 0;\n}\n.note-editor .panel > .table-bordered > thead > tr:last-child > th,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr:last-child > th,\n.note-editor .panel > .table-bordered > tbody > tr:last-child > th,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr:last-child > th,\n.note-editor .panel > .table-bordered > tfoot > tr:last-child > th,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > th,\n.note-editor .panel > .table-bordered > thead > tr:last-child > td,\n.note-editor .panel > .table-responsive > .table-bordered > thead > tr:last-child > td,\n.note-editor .panel > .table-bordered > tbody > tr:last-child > td,\n.note-editor .panel > .table-responsive > .table-bordered > tbody > tr:last-child > td,\n.note-editor .panel > .table-bordered > tfoot > tr:last-child > td,\n.note-editor .panel > .table-responsive > .table-bordered > tfoot > tr:last-child > td {\n  border-bottom: 0;\n}\n.note-editor .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.note-editor .panel-title {\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 16px;\n}\n.note-editor .panel-title > a {\n  color: inherit;\n}\n.note-editor .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.note-editor .panel-group .panel {\n  margin-bottom: 0;\n  border-radius: 4px;\n  overflow: hidden;\n}\n.note-editor .panel-group .panel + .panel {\n  margin-top: 5px;\n}\n.note-editor .panel-group .panel-heading {\n  border-bottom: 0;\n}\n.note-editor .panel-group .panel-heading + .panel-collapse .panel-body {\n  border-top: 1px solid #dddddd;\n}\n.note-editor .panel-group .panel-footer {\n  border-top: 0;\n}\n.note-editor .panel-group .panel-footer + .panel-collapse .panel-body {\n  border-bottom: 1px solid #dddddd;\n}\n.note-editor .panel-default {\n  border-color: #dddddd;\n}\n.note-editor .panel-default > .panel-heading {\n  color: #333333;\n  background-color: #f5f5f5;\n  border-color: #dddddd;\n}\n.note-editor .panel-default > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #dddddd;\n}\n.note-editor .panel-default > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #dddddd;\n}\n.note-editor .panel-primary {\n  border-color: #428bca;\n}\n.note-editor .panel-primary > .panel-heading {\n  color: #ffffff;\n  background-color: #428bca;\n  border-color: #428bca;\n}\n.note-editor .panel-primary > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #428bca;\n}\n.note-editor .panel-primary > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #428bca;\n}\n.note-editor .panel-success {\n  border-color: #d6e9c6;\n}\n.note-editor .panel-success > .panel-heading {\n  color: #468847;\n  background-color: #dff0d8;\n  border-color: #d6e9c6;\n}\n.note-editor .panel-success > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #d6e9c6;\n}\n.note-editor .panel-success > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #d6e9c6;\n}\n.note-editor .panel-warning {\n  border-color: #faebcc;\n}\n.note-editor .panel-warning > .panel-heading {\n  color: #c09853;\n  background-color: #fcf8e3;\n  border-color: #faebcc;\n}\n.note-editor .panel-warning > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #faebcc;\n}\n.note-editor .panel-warning > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #faebcc;\n}\n.note-editor .panel-danger {\n  border-color: #ebccd1;\n}\n.note-editor .panel-danger > .panel-heading {\n  color: #b94a48;\n  background-color: #f2dede;\n  border-color: #ebccd1;\n}\n.note-editor .panel-danger > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #ebccd1;\n}\n.note-editor .panel-danger > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #ebccd1;\n}\n.note-editor .panel-info {\n  border-color: #bce8f1;\n}\n.note-editor .panel-info > .panel-heading {\n  color: #3a87ad;\n  background-color: #d9edf7;\n  border-color: #bce8f1;\n}\n.note-editor .panel-info > .panel-heading + .panel-collapse .panel-body {\n  border-top-color: #bce8f1;\n}\n.note-editor .panel-info > .panel-footer + .panel-collapse .panel-body {\n  border-bottom-color: #bce8f1;\n}\n.note-editor .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.note-editor .well blockquote {\n  border-color: #ddd;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.note-editor .well-lg {\n  padding: 24px;\n  border-radius: 6px;\n}\n.note-editor .well-sm {\n  padding: 9px;\n  border-radius: 3px;\n}\n.note-editor .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.note-editor .close:hover,\n.note-editor .close:focus {\n  color: #000000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\nbutton.note-editor .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: 1040;\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  margin-left: auto;\n  margin-right: auto;\n  width: auto;\n  padding: 10px;\n  z-index: 1050;\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: 1030;\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.428571429px;\n}\n.modal-header .close {\n  margin-top: -2px;\n}\n.modal-title {\n  margin: 0;\n  line-height: 1.428571429;\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:before,\n.modal-footer:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.modal-footer:after {\n  clear: both;\n}\n.modal-footer:before,\n.modal-footer:after {\n  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.modal-footer:after {\n  clear: both;\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 screen and (min-width: 768px) {\n  .modal-dialog {\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.tooltip {\n  position: absolute;\n  z-index: 1030;\n  display: block;\n  visibility: visible;\n  font-size: 12px;\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: #000000;\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: #000000;\n}\n.tooltip.top-left .tooltip-arrow {\n  bottom: 0;\n  left: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\n}\n.tooltip.top-right .tooltip-arrow {\n  bottom: 0;\n  right: 5px;\n  border-width: 5px 5px 0;\n  border-top-color: #000000;\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: #000000;\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: #000000;\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: #000000;\n}\n.tooltip.bottom-left .tooltip-arrow {\n  top: 0;\n  left: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\n}\n.tooltip.bottom-right .tooltip-arrow {\n  top: 0;\n  right: 5px;\n  border-width: 0 5px 5px;\n  border-bottom-color: #000000;\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: 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.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  display: block;\n  max-width: 100%;\n  height: auto;\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-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.carousel-control.right {\n  left: auto;\n  right: 0;\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.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.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}\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 .glyphicons-chevron-left,\n  .carousel-control .glyphicons-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  content: \" \";\n  /* 1 */\n\n  display: table;\n  /* 2 */\n\n}\n.clearfix: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,\ntr.visible-xs,\nth.visible-xs,\ntd.visible-xs {\n  display: none !important;\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@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@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@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.visible-sm,\ntr.visible-sm,\nth.visible-sm,\ntd.visible-sm {\n  display: none !important;\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@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@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@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.visible-md,\ntr.visible-md,\nth.visible-md,\ntd.visible-md {\n  display: none !important;\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@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@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@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.visible-lg,\ntr.visible-lg,\nth.visible-lg,\ntd.visible-lg {\n  display: none !important;\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@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@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@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.hidden-xs {\n  display: block !important;\n}\ntr.hidden-xs {\n  display: table-row !important;\n}\nth.hidden-xs,\ntd.hidden-xs {\n  display: table-cell !important;\n}\n@media (max-width: 767px) {\n  .hidden-xs,\n  tr.hidden-xs,\n  th.hidden-xs,\n  td.hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-xs.hidden-sm,\n  tr.hidden-xs.hidden-sm,\n  th.hidden-xs.hidden-sm,\n  td.hidden-xs.hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-xs.hidden-md,\n  tr.hidden-xs.hidden-md,\n  th.hidden-xs.hidden-md,\n  td.hidden-xs.hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-xs.hidden-lg,\n  tr.hidden-xs.hidden-lg,\n  th.hidden-xs.hidden-lg,\n  td.hidden-xs.hidden-lg {\n    display: none !important;\n  }\n}\n.hidden-sm {\n  display: block !important;\n}\ntr.hidden-sm {\n  display: table-row !important;\n}\nth.hidden-sm,\ntd.hidden-sm {\n  display: table-cell !important;\n}\n@media (max-width: 767px) {\n  .hidden-sm.hidden-xs,\n  tr.hidden-sm.hidden-xs,\n  th.hidden-sm.hidden-xs,\n  td.hidden-sm.hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-sm,\n  tr.hidden-sm,\n  th.hidden-sm,\n  td.hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-sm.hidden-md,\n  tr.hidden-sm.hidden-md,\n  th.hidden-sm.hidden-md,\n  td.hidden-sm.hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-sm.hidden-lg,\n  tr.hidden-sm.hidden-lg,\n  th.hidden-sm.hidden-lg,\n  td.hidden-sm.hidden-lg {\n    display: none !important;\n  }\n}\n.hidden-md {\n  display: block !important;\n}\ntr.hidden-md {\n  display: table-row !important;\n}\nth.hidden-md,\ntd.hidden-md {\n  display: table-cell !important;\n}\n@media (max-width: 767px) {\n  .hidden-md.hidden-xs,\n  tr.hidden-md.hidden-xs,\n  th.hidden-md.hidden-xs,\n  td.hidden-md.hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-md.hidden-sm,\n  tr.hidden-md.hidden-sm,\n  th.hidden-md.hidden-sm,\n  td.hidden-md.hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-md,\n  tr.hidden-md,\n  th.hidden-md,\n  td.hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-md.hidden-lg,\n  tr.hidden-md.hidden-lg,\n  th.hidden-md.hidden-lg,\n  td.hidden-md.hidden-lg {\n    display: none !important;\n  }\n}\n.hidden-lg {\n  display: block !important;\n}\ntr.hidden-lg {\n  display: table-row !important;\n}\nth.hidden-lg,\ntd.hidden-lg {\n  display: table-cell !important;\n}\n@media (max-width: 767px) {\n  .hidden-lg.hidden-xs,\n  tr.hidden-lg.hidden-xs,\n  th.hidden-lg.hidden-xs,\n  td.hidden-lg.hidden-xs {\n    display: none !important;\n  }\n}\n@media (min-width: 768px) and (max-width: 991px) {\n  .hidden-lg.hidden-sm,\n  tr.hidden-lg.hidden-sm,\n  th.hidden-lg.hidden-sm,\n  td.hidden-lg.hidden-sm {\n    display: none !important;\n  }\n}\n@media (min-width: 992px) and (max-width: 1199px) {\n  .hidden-lg.hidden-md,\n  tr.hidden-lg.hidden-md,\n  th.hidden-lg.hidden-md,\n  td.hidden-lg.hidden-md {\n    display: none !important;\n  }\n}\n@media (min-width: 1200px) {\n  .hidden-lg,\n  tr.hidden-lg,\n  th.hidden-lg,\n  td.hidden-lg {\n    display: none !important;\n  }\n}\n.visible-print,\ntr.visible-print,\nth.visible-print,\ntd.visible-print {\n  display: none !important;\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  tr.hidden-print,\n  th.hidden-print,\n  td.hidden-print {\n    display: none !important;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/summernote/summernote.css",
    "content": ".note-editor {\n    height: 300px;\n}\n\n.note-editor .note-dropzone {\n    position: absolute;\n    z-index: 1;\n    display: none;\n    color: #87cefa;\n    background-color: white;\n    border: 2px dashed #87cefa;\n    opacity: .95;\n    pointer-event: none\n}\n\n.note-editor .note-dropzone .note-dropzone-message {\n    display: table-cell;\n    font-size: 28px;\n    font-weight: bold;\n    text-align: center;\n    vertical-align: middle\n}\n\n.note-editor .note-dropzone.hover {\n    color: #098ddf;\n    border: 2px dashed #098ddf\n}\n\n.note-editor.dragover .note-dropzone {\n    display: table\n}\n\n.note-editor.fullscreen {\n    position: fixed;\n    top: 0;\n    left: 0;\n    z-index: 1050;\n    width: 100%\n}\n\n.note-editor.fullscreen .note-editable {\n    background-color: white\n}\n\n.note-editor.fullscreen .note-resizebar {\n    display: none\n}\n\n.note-editor.codeview .note-editable {\n    display: none\n}\n\n.note-editor.codeview .note-codable {\n    display: block\n}\n\n.note-editor .note-toolbar {\n    padding-bottom: 5px;\n    padding-left: 10px;\n    padding-top: 5px;\n    margin: 0;\n    background-color: #f5f5f5;\n    border-bottom: 1px solid #E7EAEC\n}\n\n.note-editor .note-toolbar > .btn-group {\n    margin-top: 5px;\n    margin-right: 5px;\n    margin-left: 0\n}\n\n.note-editor .note-toolbar .note-table .dropdown-menu {\n    min-width: 0;\n    padding: 5px\n}\n\n.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker {\n    font-size: 18px\n}\n\n.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-mousecatcher {\n    position: absolute !important;\n    z-index: 3;\n    width: 10em;\n    height: 10em;\n    cursor: pointer\n}\n\n.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-unhighlighted {\n    position: relative !important;\n    z-index: 1;\n    width: 5em;\n    height: 5em;\n    background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIj4+Pjp6ekKlAqjAAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKhmnaJzPAAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat\n}\n\n.note-editor .note-toolbar .note-table .dropdown-menu .note-dimension-picker .note-dimension-picker-highlighted {\n    position: absolute !important;\n    z-index: 2;\n    width: 1em;\n    height: 1em;\n    background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASAgMAAAAroGbEAAAACVBMVEUAAIjd6vvD2f9LKLW+AAAAAXRSTlMAQObYZgAAAAFiS0dEAIgFHUgAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAHdElNRQfYAR0BKwNDEVT0AAAAG0lEQVQI12NgAAOtVatWMTCohoaGUY+EmIkEAEruEzK2J7tvAAAAAElFTkSuQmCC') repeat\n}\n\n.note-editor .note-toolbar .note-style h1, .note-editor .note-toolbar .note-style h2, .note-editor .note-toolbar .note-style h3, .note-editor .note-toolbar .note-style h4, .note-editor .note-toolbar .note-style h5, .note-editor .note-toolbar .note-style h6, .note-editor .note-toolbar .note-style blockquote {\n    margin: 0\n}\n\n.note-editor .note-toolbar .note-color .dropdown-toggle {\n    width: 20px;\n    padding-left: 5px\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu {\n    min-width: 290px\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu .btn-group {\n    margin: 0\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu .btn-group:first-child {\n    margin: 0 5px\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-palette-title {\n    margin: 2px 7px;\n    font-size: 12px;\n    text-align: center;\n    border-bottom: 1px solid #eee\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset {\n    padding: 0 3px;\n    margin: 5px;\n    font-size: 12px;\n    cursor: pointer;\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px\n}\n\n.note-editor .note-toolbar .note-color .dropdown-menu .btn-group .note-color-reset:hover {\n    background: #eee\n}\n\n.note-editor .note-toolbar .note-para .dropdown-menu {\n    min-width: 216px;\n    padding: 5px\n}\n\n.note-editor .note-toolbar .note-para .dropdown-menu > div:first-child {\n    margin-right: 5px\n}\n\n.note-editor .note-statusbar {\n    background-color: #f5f5f5\n}\n\n.note-editor .note-statusbar .note-resizebar {\n    width: 100%;\n    height: 8px;\n    cursor: s-resize;\n    border-top: 1px solid #a9a9a9\n}\n\n.note-editor .note-statusbar .note-resizebar .note-icon-bar {\n    width: 20px;\n    margin: 1px auto;\n    border-top: 1px solid #a9a9a9\n}\n\n.note-editor .note-popover .popover {\n    max-width: none\n}\n\n.note-editor .note-popover .popover .popover-content {\n    padding: 5px\n}\n\n.note-editor .note-popover .popover .popover-content a {\n    display: inline-block;\n    max-width: 200px;\n    overflow: hidden;\n    text-overflow: ellipsis;\n    white-space: nowrap;\n    vertical-align: middle\n}\n\n.note-editor .note-popover .popover .popover-content .btn-group + .btn-group {\n    margin-left: 5px\n}\n\n.note-editor .note-popover .popover .arrow {\n    left: 20px\n}\n\n.note-editor .note-handle .note-control-selection {\n    position: absolute;\n    display: none;\n    border: 1px solid black\n}\n\n.note-editor .note-handle .note-control-selection > div {\n    position: absolute\n}\n\n.note-editor .note-handle .note-control-selection .note-control-selection-bg {\n    width: 100%;\n    height: 100%;\n    background-color: black;\n    -webkit-opacity: .3;\n    -khtml-opacity: .3;\n    -moz-opacity: .3;\n    opacity: .3;\n    -ms-filter: alpha(opacity=30);\n    filter: alpha(opacity=30)\n}\n\n.note-editor .note-handle .note-control-selection .note-control-handle {\n    width: 7px;\n    height: 7px;\n    border: 1px solid black\n}\n\n.note-editor .note-handle .note-control-selection .note-control-holder {\n    width: 7px;\n    height: 7px;\n    border: 1px solid black\n}\n\n.note-editor .note-handle .note-control-selection .note-control-sizing {\n    width: 7px;\n    height: 7px;\n    background-color: white;\n    border: 1px solid black\n}\n\n.note-editor .note-handle .note-control-selection .note-control-nw {\n    top: -5px;\n    left: -5px;\n    border-right: 0;\n    border-bottom: 0\n}\n\n.note-editor .note-handle .note-control-selection .note-control-ne {\n    top: -5px;\n    right: -5px;\n    border-bottom: 0;\n    border-left: none\n}\n\n.note-editor .note-handle .note-control-selection .note-control-sw {\n    bottom: -5px;\n    left: -5px;\n    border-top: 0;\n    border-right: 0\n}\n\n.note-editor .note-handle .note-control-selection .note-control-se {\n    right: -5px;\n    bottom: -5px;\n    cursor: se-resize\n}\n\n.note-editor .note-handle .note-control-selection .note-control-selection-info {\n    right: 0;\n    bottom: 0;\n    padding: 5px;\n    margin: 5px;\n    font-size: 12px;\n    color: white;\n    background-color: black;\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n    -webkit-opacity: .7;\n    -khtml-opacity: .7;\n    -moz-opacity: .7;\n    opacity: .7;\n    -ms-filter: alpha(opacity=70);\n    filter: alpha(opacity=70)\n}\n\n.note-editor .note-dialog > div {\n    display: none\n}\n\n.note-editor .note-dialog .note-image-dialog .note-dropzone {\n    min-height: 100px;\n    margin-bottom: 10px;\n    font-size: 30px;\n    line-height: 4;\n    color: lightgray;\n    text-align: center;\n    border: 4px dashed lightgray\n}\n\n.note-editor .note-dialog .note-help-dialog {\n    font-size: 12px;\n    color: #ccc;\n    background: transparent;\n    background-color: #222 !important;\n    border: 0;\n    -webkit-opacity: .9;\n    -khtml-opacity: .9;\n    -moz-opacity: .9;\n    opacity: .9;\n    -ms-filter: alpha(opacity=90);\n    filter: alpha(opacity=90)\n}\n\n.note-editor .note-dialog .note-help-dialog .modal-content {\n    background: transparent;\n    border: 1px solid white;\n    -webkit-border-radius: 5px;\n    -moz-border-radius: 5px;\n    border-radius: 5px;\n    -webkit-box-shadow: none;\n    -moz-box-shadow: none;\n    box-shadow: none\n}\n\n.note-editor .note-dialog .note-help-dialog a {\n    font-size: 12px;\n    color: white\n}\n\n.note-editor .note-dialog .note-help-dialog .title {\n    padding-bottom: 5px;\n    font-size: 14px;\n    font-weight: bold;\n    color: white;\n    border-bottom: white 1px solid\n}\n\n.note-editor .note-dialog .note-help-dialog .modal-close {\n    font-size: 14px;\n    color: #dd0;\n    cursor: pointer\n}\n\n.note-editor .note-dialog .note-help-dialog .note-shortcut-layout {\n    width: 100%\n}\n\n.note-editor .note-dialog .note-help-dialog .note-shortcut-layout td {\n    vertical-align: top\n}\n\n.note-editor .note-dialog .note-help-dialog .note-shortcut {\n    margin-top: 8px\n}\n\n.note-editor .note-dialog .note-help-dialog .note-shortcut th {\n    font-size: 13px;\n    color: #dd0;\n    text-align: left\n}\n\n.note-editor .note-dialog .note-help-dialog .note-shortcut td:first-child {\n    min-width: 110px;\n    padding-right: 10px;\n    font-family: \"Courier New\";\n    color: #dd0;\n    text-align: right\n}\n\n.note-editor .note-editable {\n    padding: 20px;\n    overflow: auto;\n    outline: 0\n}\n\n.note-editor .note-editable[contenteditable=\"false\"] {\n    background-color: #e5e5e5\n}\n\n.note-editor .note-codable {\n    display: none;\n    width: 100%;\n    padding: 10px;\n    margin-bottom: 0;\n    font-family: Menlo, Monaco, monospace, sans-serif;\n    font-size: 14px;\n    color: #ccc;\n    background-color: #222;\n    border: 0;\n    -webkit-border-radius: 0;\n    -moz-border-radius: 0;\n    border-radius: 0;\n    box-shadow: none;\n    -webkit-box-sizing: border-box;\n    -moz-box-sizing: border-box;\n    -ms-box-sizing: border-box;\n    box-sizing: border-box;\n    resize: none\n}\n\n.note-editor .dropdown-menu {\n    min-width: 90px\n}\n\n.note-editor .dropdown-menu.right {\n    right: 0;\n    left: auto\n}\n\n.note-editor .dropdown-menu.right::before {\n    right: 9px;\n    left: auto !important\n}\n\n.note-editor .dropdown-menu.right::after {\n    right: 10px;\n    left: auto !important\n}\n\n.note-editor .dropdown-menu li a i {\n    color: deepskyblue;\n    visibility: hidden\n}\n\n.note-editor .dropdown-menu li a.checked i {\n    visibility: visible\n}\n\n.note-editor .note-fontsize-10 {\n    font-size: 10px\n}\n\n.note-editor .note-color-palette {\n    line-height: 1\n}\n\n.note-editor .note-color-palette div .note-color-btn {\n    width: 17px;\n    height: 17px;\n    padding: 0;\n    margin: 0;\n    border: 1px solid #fff\n}\n\n.note-editor .note-color-palette div .note-color-btn:hover {\n    border: 1px solid #000\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/sweetalert/sweetalert.css",
    "content": "body.stop-scrolling {\n  height: 100%;\n  overflow: hidden; }\n\n.sweet-overlay {\n  background-color: black;\n  /* IE8 */\n  -ms-filter: \"progid:DXImageTransform.Microsoft.Alpha(Opacity=40)\";\n  /* IE8 */\n  background-color: rgba(0, 0, 0, 0.4);\n  position: fixed;\n  left: 0;\n  right: 0;\n  top: 0;\n  bottom: 0;\n  display: none;\n  z-index: 10000; }\n\n.sweet-alert {\n  background-color: white;\n  font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  width: 478px;\n  padding: 17px;\n  border-radius: 5px;\n  text-align: center;\n  position: fixed;\n  left: 50%;\n  top: 50%;\n  margin-left: -256px;\n  margin-top: -200px;\n  overflow: hidden;\n  display: none;\n  z-index: 99999; }\n  @media all and (max-width: 540px) {\n    .sweet-alert {\n      width: auto;\n      margin-left: 0;\n      margin-right: 0;\n      left: 15px;\n      right: 15px; } }\n  .sweet-alert h2 {\n    color: #575757;\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 25px 0;\n    padding: 0;\n    line-height: 40px;\n    display: block; }\n  .sweet-alert p {\n    color: #797979;\n    font-size: 16px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    text-align: inherit;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal; }\n  .sweet-alert fieldset {\n    border: none;\n    position: relative; }\n  .sweet-alert .sa-error-container {\n    background-color: #f1f1f1;\n    margin-left: -17px;\n    margin-right: -17px;\n    overflow: hidden;\n    padding: 0 10px;\n    max-height: 0;\n    webkit-transition: padding 0.15s, max-height 0.15s;\n    transition: padding 0.15s, max-height 0.15s; }\n    .sweet-alert .sa-error-container.show {\n      padding: 10px 0;\n      max-height: 100px;\n      webkit-transition: padding 0.2s, max-height 0.2s;\n      transition: padding 0.25s, max-height 0.25s; }\n    .sweet-alert .sa-error-container .icon {\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: #ea7d7d;\n      color: white;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 3px; }\n    .sweet-alert .sa-error-container p {\n      display: inline-block; }\n  .sweet-alert .sa-input-error {\n    position: absolute;\n    top: 29px;\n    right: 26px;\n    width: 20px;\n    height: 20px;\n    opacity: 0;\n    -webkit-transform: scale(0.5);\n    transform: scale(0.5);\n    -webkit-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n    -webkit-transition: all 0.1s;\n    transition: all 0.1s; }\n    .sweet-alert .sa-input-error::before, .sweet-alert .sa-input-error::after {\n      content: \"\";\n      width: 20px;\n      height: 6px;\n      background-color: #f06e57;\n      border-radius: 3px;\n      position: absolute;\n      top: 50%;\n      margin-top: -4px;\n      left: 50%;\n      margin-left: -9px; }\n    .sweet-alert .sa-input-error::before {\n      -webkit-transform: rotate(-45deg);\n      transform: rotate(-45deg); }\n    .sweet-alert .sa-input-error::after {\n      -webkit-transform: rotate(45deg);\n      transform: rotate(45deg); }\n    .sweet-alert .sa-input-error.show {\n      opacity: 1;\n      -webkit-transform: scale(1);\n      transform: scale(1); }\n  .sweet-alert input {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid #d7d7d7;\n    height: 43px;\n    margin-top: 10px;\n    margin-bottom: 17px;\n    font-size: 18px;\n    box-shadow: inset 0px 1px 1px rgba(0, 0, 0, 0.06);\n    padding: 0 12px;\n    display: none;\n    -webkit-transition: all 0.3s;\n    transition: all 0.3s; }\n    .sweet-alert input:focus {\n      outline: none;\n      box-shadow: 0px 0px 3px #c4e6f5;\n      border: 1px solid #b4dbed; }\n      .sweet-alert input:focus::-moz-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus:-ms-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n      .sweet-alert input:focus::-webkit-input-placeholder {\n        transition: opacity 0.3s 0.03s ease;\n        opacity: 0.5; }\n    .sweet-alert input::-moz-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input:-ms-input-placeholder {\n      color: #bdbdbd; }\n    .sweet-alert input::-webkit-input-placeholder {\n      color: #bdbdbd; }\n  .sweet-alert.show-input input {\n    display: block; }\n  .sweet-alert button {\n    background-color: #AEDEF4;\n    color: white;\n    border: none;\n    box-shadow: none;\n    font-size: 17px;\n    font-weight: 500;\n    -webkit-border-radius: 4px;\n    border-radius: 5px;\n    padding: 10px 32px;\n    margin: 26px 5px 0 5px;\n    cursor: pointer; }\n    .sweet-alert button:focus {\n      outline: none;\n      box-shadow: 0 0 2px rgba(128, 179, 235, 0.5), inset 0 0 0 1px rgba(0, 0, 0, 0.05); }\n    .sweet-alert button:hover {\n      background-color: #a1d9f2; }\n    .sweet-alert button:active {\n      background-color: #81ccee; }\n    .sweet-alert button.cancel {\n      background-color: #D0D0D0; }\n      .sweet-alert button.cancel:hover {\n        background-color: #c8c8c8; }\n      .sweet-alert button.cancel:active {\n        background-color: #b6b6b6; }\n      .sweet-alert button.cancel:focus {\n        box-shadow: rgba(197, 205, 211, 0.8) 0px 0px 2px, rgba(0, 0, 0, 0.0470588) 0px 0px 0px 1px inset !important; }\n    .sweet-alert button::-moz-focus-inner {\n      border: 0; }\n  .sweet-alert[data-has-cancel-button=false] button {\n    box-shadow: none !important; }\n  .sweet-alert[data-has-confirm-button=false][data-has-cancel-button=false] {\n    padding-bottom: 40px; }\n  .sweet-alert .sa-icon {\n    width: 80px;\n    height: 80px;\n    border: 4px solid gray;\n    -webkit-border-radius: 40px;\n    border-radius: 40px;\n    border-radius: 50%;\n    margin: 20px auto;\n    padding: 0;\n    position: relative;\n    box-sizing: content-box; }\n    .sweet-alert .sa-icon.sa-error {\n      border-color: #F27474; }\n      .sweet-alert .sa-icon.sa-error .sa-x-mark {\n        position: relative;\n        display: block; }\n      .sweet-alert .sa-icon.sa-error .sa-line {\n        position: absolute;\n        height: 5px;\n        width: 47px;\n        background-color: #F27474;\n        display: block;\n        top: 37px;\n        border-radius: 2px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n          left: 17px; }\n        .sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n          right: 16px; }\n    .sweet-alert .sa-icon.sa-warning {\n      border-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-body {\n        position: absolute;\n        width: 5px;\n        height: 47px;\n        left: 50%;\n        top: 10px;\n        -webkit-border-radius: 2px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #F8BB86; }\n      .sweet-alert .sa-icon.sa-warning .sa-dot {\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        -webkit-border-radius: 50%;\n        border-radius: 50%;\n        margin-left: -3px;\n        left: 50%;\n        bottom: 10px;\n        background-color: #F8BB86; }\n    .sweet-alert .sa-icon.sa-info {\n      border-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::before {\n        content: \"\";\n        position: absolute;\n        width: 5px;\n        height: 29px;\n        left: 50%;\n        bottom: 17px;\n        border-radius: 2px;\n        margin-left: -2px;\n        background-color: #C9DAE1; }\n      .sweet-alert .sa-icon.sa-info::after {\n        content: \"\";\n        position: absolute;\n        width: 7px;\n        height: 7px;\n        border-radius: 50%;\n        margin-left: -3px;\n        top: 19px;\n        background-color: #C9DAE1; }\n    .sweet-alert .sa-icon.sa-success {\n      border-color: #A5DC86; }\n      .sweet-alert .sa-icon.sa-success::before, .sweet-alert .sa-icon.sa-success::after {\n        content: '';\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        position: absolute;\n        width: 60px;\n        height: 120px;\n        background: white;\n        -webkit-transform: rotate(45deg);\n        transform: rotate(45deg); }\n      .sweet-alert .sa-icon.sa-success::before {\n        -webkit-border-radius: 120px 0 0 120px;\n        border-radius: 120px 0 0 120px;\n        top: -7px;\n        left: -33px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 60px 60px;\n        transform-origin: 60px 60px; }\n      .sweet-alert .sa-icon.sa-success::after {\n        -webkit-border-radius: 0 120px 120px 0;\n        border-radius: 0 120px 120px 0;\n        top: -11px;\n        left: 30px;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg);\n        -webkit-transform-origin: 0px 60px;\n        transform-origin: 0px 60px; }\n      .sweet-alert .sa-icon.sa-success .sa-placeholder {\n        width: 80px;\n        height: 80px;\n        border: 4px solid rgba(165, 220, 134, 0.2);\n        -webkit-border-radius: 40px;\n        border-radius: 40px;\n        border-radius: 50%;\n        box-sizing: content-box;\n        position: absolute;\n        left: -4px;\n        top: -4px;\n        z-index: 2; }\n      .sweet-alert .sa-icon.sa-success .sa-fix {\n        width: 5px;\n        height: 90px;\n        background-color: white;\n        position: absolute;\n        left: 28px;\n        top: 8px;\n        z-index: 1;\n        -webkit-transform: rotate(-45deg);\n        transform: rotate(-45deg); }\n      .sweet-alert .sa-icon.sa-success .sa-line {\n        height: 5px;\n        background-color: #A5DC86;\n        display: block;\n        border-radius: 2px;\n        position: absolute;\n        z-index: 2; }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n          width: 25px;\n          left: 14px;\n          top: 46px;\n          -webkit-transform: rotate(45deg);\n          transform: rotate(45deg); }\n        .sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n          width: 47px;\n          right: 8px;\n          top: 38px;\n          -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg); }\n    .sweet-alert .sa-icon.sa-custom {\n      background-size: contain;\n      border-radius: 0;\n      border: none;\n      background-position: center center;\n      background-repeat: no-repeat; }\n\n/*\n * Animations\n */\n@-webkit-keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@keyframes showSweetAlert {\n  0% {\n    transform: scale(0.7);\n    -webkit-transform: scale(0.7); }\n  45% {\n    transform: scale(1.05);\n    -webkit-transform: scale(1.05); }\n  80% {\n    transform: scale(0.95);\n    -webkit-transform: scale(0.95); }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1); } }\n\n@-webkit-keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@keyframes hideSweetAlert {\n  0% {\n    transform: scale(1);\n    -webkit-transform: scale(1); }\n  100% {\n    transform: scale(0.5);\n    -webkit-transform: scale(0.5); } }\n\n@-webkit-keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromTop {\n  0% {\n    top: 0%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@keyframes slideToTop {\n  0% {\n    top: 50%; }\n  100% {\n    top: 0%; } }\n\n@-webkit-keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@keyframes slideFromBottom {\n  0% {\n    top: 70%; }\n  100% {\n    top: 50%; } }\n\n@-webkit-keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n@keyframes slideToBottom {\n  0% {\n    top: 50%; }\n  100% {\n    top: 70%; } }\n\n.showSweetAlert[data-animation=pop] {\n  -webkit-animation: showSweetAlert 0.3s;\n  animation: showSweetAlert 0.3s; }\n\n.showSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.showSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideFromTop 0.3s;\n  animation: slideFromTop 0.3s; }\n\n.showSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideFromBottom 0.3s;\n  animation: slideFromBottom 0.3s; }\n\n.hideSweetAlert[data-animation=pop] {\n  -webkit-animation: hideSweetAlert 0.2s;\n  animation: hideSweetAlert 0.2s; }\n\n.hideSweetAlert[data-animation=none] {\n  -webkit-animation: none;\n  animation: none; }\n\n.hideSweetAlert[data-animation=slide-from-top] {\n  -webkit-animation: slideToTop 0.4s;\n  animation: slideToTop 0.4s; }\n\n.hideSweetAlert[data-animation=slide-from-bottom] {\n  -webkit-animation: slideToBottom 0.3s;\n  animation: slideToBottom 0.3s; }\n\n@-webkit-keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@keyframes animateSuccessTip {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px; }\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px; }\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px; }\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px; } }\n\n@-webkit-keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@keyframes animateSuccessLong {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px; }\n  84% {\n    width: 55px;\n    right: 0px;\n    top: 35px; }\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px; } }\n\n@-webkit-keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n@keyframes rotatePlaceholder {\n  0% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  5% {\n    transform: rotate(-45deg);\n    -webkit-transform: rotate(-45deg); }\n  12% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); }\n  100% {\n    transform: rotate(-405deg);\n    -webkit-transform: rotate(-405deg); } }\n\n.animateSuccessTip {\n  -webkit-animation: animateSuccessTip 0.75s;\n  animation: animateSuccessTip 0.75s; }\n\n.animateSuccessLong {\n  -webkit-animation: animateSuccessLong 0.75s;\n  animation: animateSuccessLong 0.75s; }\n\n.sa-icon.sa-success.animate::after {\n  -webkit-animation: rotatePlaceholder 4.25s ease-in;\n  animation: rotatePlaceholder 4.25s ease-in; }\n\n@-webkit-keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n@keyframes animateErrorIcon {\n  0% {\n    transform: rotateX(100deg);\n    -webkit-transform: rotateX(100deg);\n    opacity: 0; }\n  100% {\n    transform: rotateX(0deg);\n    -webkit-transform: rotateX(0deg);\n    opacity: 1; } }\n\n.animateErrorIcon {\n  -webkit-animation: animateErrorIcon 0.5s;\n  animation: animateErrorIcon 0.5s; }\n\n@-webkit-keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n@keyframes animateXMark {\n  0% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  50% {\n    transform: scale(0.4);\n    -webkit-transform: scale(0.4);\n    margin-top: 26px;\n    opacity: 0; }\n  80% {\n    transform: scale(1.15);\n    -webkit-transform: scale(1.15);\n    margin-top: -6px; }\n  100% {\n    transform: scale(1);\n    -webkit-transform: scale(1);\n    margin-top: 0;\n    opacity: 1; } }\n\n.animateXMark {\n  -webkit-animation: animateXMark 0.5s;\n  animation: animateXMark 0.5s; }\n\n@-webkit-keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n@keyframes pulseWarning {\n  0% {\n    border-color: #F8D486; }\n  100% {\n    border-color: #F8BB86; } }\n\n.pulseWarning {\n  -webkit-animation: pulseWarning 0.75s infinite alternate;\n  animation: pulseWarning 0.75s infinite alternate; }\n\n@-webkit-keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n@keyframes pulseWarningIns {\n  0% {\n    background-color: #F8D486; }\n  100% {\n    background-color: #F8BB86; } }\n\n.pulseWarningIns {\n  -webkit-animation: pulseWarningIns 0.75s infinite alternate;\n  animation: pulseWarningIns 0.75s infinite alternate; }\n\n/* Internet Explorer 9 has some special quirks that are fixed here */\n/* The icons are not animated. */\n/* This file is automatically merged into sweet-alert.min.js through Gulp */\n/* Error icon */\n.sweet-alert .sa-icon.sa-error .sa-line.sa-left {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-error .sa-line.sa-right {\n  -ms-transform: rotate(-45deg) \\9; }\n\n/* Success icon */\n.sweet-alert .sa-icon.sa-success {\n  border-color: transparent\\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-tip {\n  -ms-transform: rotate(45deg) \\9; }\n\n.sweet-alert .sa-icon.sa-success .sa-line.sa-long {\n  -ms-transform: rotate(-45deg) \\9; }\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/switchery/switchery.css",
    "content": "/*\n *\n * Main stylesheet for Switchery.\n * http://abpetkov.github.io/switchery/\n *\n */\n\n.switchery {\n    background-color: #fff;\n    border: 1px solid #dfdfdf;\n    border-radius: 20px;\n    cursor: pointer;\n    display: inline-block;\n    height: 30px;\n    position: relative;\n    vertical-align: middle;\n    width: 50px;\n\n    -webkit-box-sizing: content-box;\n    -moz-box-sizing: content-box;\n    box-sizing: content-box;\n}\n\n.switchery > small {\n    background: #fff;\n    border-radius: 100%;\n    box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);\n    height: 30px;\n    position: absolute;\n    top: 0;\n    width: 30px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/treeview/bootstrap-treeview.css",
    "content": "/* =========================================================\n * bootstrap-treeview.css v1.0.0\n * =========================================================\n * Copyright 2013 Jonathan Miles\n * Project URL : http://www.jondmiles.com/bootstrap-treeview\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.list-group-item {\n\tcursor: pointer;\n}\n\n/*.list-group-item:hover {\n  background-color: #f5f5f5;\n}*/\n\nspan.indent {\n\tmargin-left: 10px;\n\tmargin-right: 10px;\n}\n\nspan.icon {\n\tmargin-right: 5px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/css/plugins/webuploader/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/AdminLTE.css",
    "content": "/*@import url(https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600,700,300italic,400italic,600italic);*/\n/*!\n *   AdminLTE v2.1.2\n *   Author: Almsaeed Studio\n *\t Website: Almsaeed Studio <http://almsaeedstudio.com>\n *   License: Open source - MIT\n *           Please visit http://opensource.org/licenses/MIT for more information\n!*/\n/*\n * Core: General Layout Style\n * -------------------------\n */\nhtml,\nbody {\n  min-height: 100%;\n}\n.layout-boxed html,\n.layout-boxed body {\n  height: 100%;\n}\nbody {\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  font-family: 'Source Sans Pro', 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  font-weight: 400;\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n/* Layout */\n.wrapper {\n  min-height: 100%;\n  position: static;\n  overflow: hidden;\n}\n.wrapper:before,\n.wrapper:after {\n  content: \" \";\n  display: table;\n}\n.wrapper:after {\n  clear: both;\n}\n.layout-boxed .wrapper {\n  max-width: 1250px;\n  margin: 0 auto;\n  min-height: 100%;\n  box-shadow: 0 0 8px rgba(0, 0, 0, 0.5);\n  position: relative;\n}\n.layout-boxed {\n  background: url('../img/boxed-bg.jpg') repeat fixed;\n}\n/*\n * Content Wrapper - contains the main content\n * ```.right-side has been deprecated as of v2.0.0 in favor of .content-wrapper  ```\n */\n.content-wrapper,\n.right-side,\n.main-footer {\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, margin 0.3s ease-in-out;\n  margin-left: 230px;\n  z-index: 820;\n}\n.layout-top-nav .content-wrapper,\n.layout-top-nav .right-side,\n.layout-top-nav .main-footer {\n  margin-left: 0;\n}\n@media (max-width: 767px) {\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0;\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .content-wrapper,\n  .sidebar-collapse .right-side,\n  .sidebar-collapse .main-footer {\n    margin-left: 0;\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .content-wrapper,\n  .sidebar-open .right-side,\n  .sidebar-open .main-footer {\n    -webkit-transform: translate(230px, 0);\n    -ms-transform: translate(230px, 0);\n    -o-transform: translate(230px, 0);\n    transform: translate(230px, 0);\n  }\n}\n.content-wrapper,\n.right-side {\n  min-height: 100%;\n  background-color: #ecf0f5;\n  z-index: 800;\n}\n.main-footer {\n  background: #fff;\n  padding: 15px;\n  color: #444;\n  border-top: 1px solid #d2d6de;\n}\n/* Fixed layout */\n.fixed .main-header,\n.fixed .main-sidebar,\n.fixed .left-side {\n  position: fixed;\n}\n.fixed .main-header {\n  top: 0;\n  right: 0;\n  left: 0;\n}\n.fixed .content-wrapper,\n.fixed .right-side {\n  padding-top: 50px;\n}\n@media (max-width: 767px) {\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 100px;\n  }\n}\n.fixed.layout-boxed .wrapper {\n  max-width: 100%;\n}\n/* Content */\n.content {\n  min-height: 250px;\n  padding: 15px;\n  margin-right: auto;\n  margin-left: auto;\n  padding-left: 15px;\n  padding-right: 15px;\n}\n/* H1 - H6 font */\nh1,\nh2,\nh3,\nh4,\nh5,\nh6,\n.h1,\n.h2,\n.h3,\n.h4,\n.h5,\n.h6 {\n  font-family: 'Source Sans Pro', sans-serif;\n}\n/* General Links */\na {\n  color: #3c8dbc;\n}\na:hover,\na:active,\na:focus {\n  outline: none;\n  text-decoration: none;\n  color: #72afd2;\n}\n/* Page Header */\n.page-header {\n  margin: 10px 0 20px 0;\n  font-size: 22px;\n}\n.page-header > small {\n  color: #666;\n  display: block;\n  margin-top: 5px;\n}\n/*\n * Component: Main Header\n * ----------------------\n */\n.main-header {\n  position: relative;\n  max-height: 100px;\n  z-index: 1030;\n}\n.main-header > .navbar {\n  -webkit-transition: margin-left 0.3s ease-in-out;\n  -o-transition: margin-left 0.3s ease-in-out;\n  transition: margin-left 0.3s ease-in-out;\n  margin-bottom: 0;\n  margin-left: 230px;\n  border: none;\n  min-height: 50px;\n  border-radius: 0;\n}\n.layout-top-nav .main-header > .navbar {\n  margin-left: 0;\n}\n.main-header #navbar-search-input.form-control {\n  background: rgba(255, 255, 255, 0.2);\n  border-color: transparent;\n}\n.main-header #navbar-search-input.form-control:focus,\n.main-header #navbar-search-input.form-control:active {\n  border-color: rgba(0, 0, 0, 0.1);\n  background: rgba(255, 255, 255, 0.9);\n}\n.main-header #navbar-search-input.form-control::-moz-placeholder {\n  color: #ccc;\n  opacity: 1;\n}\n.main-header #navbar-search-input.form-control:-ms-input-placeholder {\n  color: #ccc;\n}\n.main-header #navbar-search-input.form-control::-webkit-input-placeholder {\n  color: #ccc;\n}\n.main-header .navbar-custom-menu,\n.main-header .navbar-right {\n  float: right;\n}\n@media (max-width: 991px) {\n  .main-header .navbar-custom-menu a,\n  .main-header .navbar-right a {\n    color: inherit;\n    background: transparent;\n  }\n}\n@media (max-width: 767px) {\n  .main-header .navbar-right {\n    float: none;\n  }\n  .navbar-collapse .main-header .navbar-right {\n    margin: 7.5px -15px;\n  }\n  .main-header .navbar-right > li {\n    color: inherit;\n    border: 0;\n  }\n}\n.main-header .sidebar-toggle {\n  float: left;\n  background-color: transparent;\n  background-image: none;\n  padding: 15px 15px;\n  font-family: fontAwesome;\n}\n.main-header .sidebar-toggle:before {\n  content: \"\\f0c9\";\n}\n.main-header .sidebar-toggle:hover {\n  color: #fff;\n}\n.main-header .sidebar-toggle:focus,\n.main-header .sidebar-toggle:active {\n  background: transparent;\n}\n.main-header .sidebar-toggle .icon-bar {\n  display: none;\n}\n.main-header .navbar .nav > li.user > a > .fa,\n.main-header .navbar .nav > li.user > a > .glyphicon,\n.main-header .navbar .nav > li.user > a > .ion {\n  margin-right: 5px;\n}\n.main-header .navbar .nav > li > a > .label {\n  position: absolute;\n  top: 9px;\n  right: 7px;\n  text-align: center;\n  font-size: 9px;\n  padding: 2px 3px;\n  line-height: .9;\n}\n.main-header .logo {\n  -webkit-transition: width 0.3s ease-in-out;\n  -o-transition: width 0.3s ease-in-out;\n  transition: width 0.3s ease-in-out;\n  display: block;\n  float: left;\n  height: 50px;\n  font-size: 20px;\n  line-height: 50px;\n  text-align: center;\n  width: 230px;\n  font-family: \"Helvetica Neue\", Helvetica, Arial, sans-serif;\n  padding: 0 15px;\n  font-weight: 300;\n  overflow: hidden;\n}\n.main-header .logo .logo-lg {\n  display: block;\n}\n.main-header .logo .logo-mini {\n  display: none;\n}\n.main-header .navbar-brand {\n  color: #fff;\n}\n.content-header {\n  position: relative;\n  padding: 15px 15px 0 15px;\n}\n.content-header > h1 {\n  margin: 0;\n  font-size: 24px;\n}\n.content-header > h1 > small {\n  font-size: 15px;\n  display: inline-block;\n  padding-left: 4px;\n  font-weight: 300;\n}\n.content-header > .breadcrumb {\n  float: right;\n  background: transparent;\n  margin-top: 0;\n  margin-bottom: 0;\n  font-size: 12px;\n  padding: 7px 5px;\n  position: absolute;\n  top: 15px;\n  right: 10px;\n  border-radius: 2px;\n}\n.content-header > .breadcrumb > li > a {\n  color: #444;\n  text-decoration: none;\n  display: inline-block;\n}\n.content-header > .breadcrumb > li > a > .fa,\n.content-header > .breadcrumb > li > a > .glyphicon,\n.content-header > .breadcrumb > li > a > .ion {\n  margin-right: 5px;\n}\n.content-header > .breadcrumb > li + li:before {\n  content: '>\\00a0';\n}\n@media (max-width: 991px) {\n  .content-header > .breadcrumb {\n    position: relative;\n    margin-top: 5px;\n    top: 0;\n    right: 0;\n    float: none;\n    background: #d2d6de;\n    padding-left: 10px;\n  }\n  .content-header > .breadcrumb li:before {\n    color: #97a0b3;\n  }\n}\n.navbar-toggle {\n  color: #fff;\n  border: 0;\n  margin: 0;\n  padding: 15px 15px;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu .navbar-nav > li {\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav {\n    margin: 0;\n    float: left;\n  }\n  .navbar-custom-menu .navbar-nav > li > a {\n    padding-top: 15px;\n    padding-bottom: 15px;\n    line-height: 20px;\n  }\n}\n@media (max-width: 767px) {\n  .main-header {\n    position: relative;\n  }\n  .main-header .logo,\n  .main-header .navbar {\n    width: 100%;\n    float: none;\n  }\n  .main-header .navbar {\n    margin: 0;\n  }\n  .main-header .navbar-custom-menu {\n    float: right;\n  }\n}\n@media (max-width: 991px) {\n  .navbar-collapse.pull-left {\n    float: none!important;\n  }\n  .navbar-collapse.pull-left + .navbar-custom-menu {\n    display: block;\n    position: absolute;\n    top: 0;\n    right: 40px;\n  }\n}\n/*\n * Component: Sidebar\n * ------------------\n */\n.main-sidebar,\n.left-side {\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding-top: 50px;\n  min-height: 100%;\n  width: 230px;\n  z-index: 810;\n  -webkit-transition: -webkit-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -moz-transition: -moz-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  -o-transition: -o-transform 0.3s ease-in-out, width 0.3s ease-in-out;\n  transition: transform 0.3s ease-in-out, width 0.3s ease-in-out;\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    padding-top: 100px;\n  }\n}\n@media (max-width: 767px) {\n  .main-sidebar,\n  .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (min-width: 768px) {\n  .sidebar-collapse .main-sidebar,\n  .sidebar-collapse .left-side {\n    -webkit-transform: translate(-230px, 0);\n    -ms-transform: translate(-230px, 0);\n    -o-transform: translate(-230px, 0);\n    transform: translate(-230px, 0);\n  }\n}\n@media (max-width: 767px) {\n  .sidebar-open .main-sidebar,\n  .sidebar-open .left-side {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n  }\n}\n.sidebar {\n  padding-bottom: 10px;\n}\n.sidebar-form input:focus {\n  border-color: transparent;\n}\n.user-panel {\n  position: relative;\n  width: 100%;\n  padding: 10px;\n  overflow: hidden;\n}\n.user-panel:before,\n.user-panel:after {\n  content: \" \";\n  display: table;\n}\n.user-panel:after {\n  clear: both;\n}\n.user-panel > .image > img {\n  width: 100%;\n  max-width: 45px;\n  height: auto;\n}\n.user-panel > .info {\n  padding: 5px 5px 5px 15px;\n  line-height: 1;\n  position: absolute;\n  left: 55px;\n}\n.user-panel > .info > p {\n  font-weight: 600;\n  margin-bottom: 9px;\n}\n.user-panel > .info > a {\n  text-decoration: none;\n  padding-right: 5px;\n  margin-top: 3px;\n  font-size: 11px;\n}\n.user-panel > .info > a > .fa,\n.user-panel > .info > a > .ion,\n.user-panel > .info > a > .glyphicon {\n  margin-right: 3px;\n}\n.sidebar-menu {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li {\n  position: relative;\n  margin: 0;\n  padding: 0;\n}\n.sidebar-menu > li > a {\n  padding: 12px 5px 12px 15px;\n  display: block;\n}\n.sidebar-menu > li > a > .fa,\n.sidebar-menu > li > a > .glyphicon,\n.sidebar-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu > li .label,\n.sidebar-menu > li .badge {\n  margin-top: 3px;\n  margin-right: 5px;\n}\n.sidebar-menu li.header {\n  padding: 10px 25px 10px 15px;\n  font-size: 12px;\n}\n.sidebar-menu li > a > .fa-angle-left {\n  width: auto;\n  height: auto;\n  padding: 0;\n  margin-right: 10px;\n  margin-top: 3px;\n}\n.sidebar-menu li.active > a > .fa-angle-left {\n  -webkit-transform: rotate(-90deg);\n  -ms-transform: rotate(-90deg);\n  -o-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n.sidebar-menu li.active > .treeview-menu {\n  display: block;\n}\n.sidebar-menu .treeview-menu {\n  display: none;\n  list-style: none;\n  padding: 0;\n  margin: 0;\n  padding-left: 5px;\n}\n.sidebar-menu .treeview-menu .treeview-menu {\n  padding-left: 20px;\n}\n.sidebar-menu .treeview-menu > li {\n  margin: 0;\n}\n.sidebar-menu .treeview-menu > li > a {\n  padding: 5px 5px 5px 15px;\n  display: block;\n  font-size: 14px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa,\n.sidebar-menu .treeview-menu > li > a > .glyphicon,\n.sidebar-menu .treeview-menu > li > a > .ion {\n  width: 20px;\n}\n.sidebar-menu .treeview-menu > li > a > .fa-angle-left,\n.sidebar-menu .treeview-menu > li > a > .fa-angle-down {\n  width: auto;\n}\n/*\n * Component: Sidebar Mini\n */\n@media (min-width: 768px) {\n  .sidebar-mini.sidebar-collapse .content-wrapper,\n  .sidebar-mini.sidebar-collapse .right-side,\n  .sidebar-mini.sidebar-collapse .main-footer {\n    margin-left: 50px!important;\n    z-index: 840;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar {\n    -webkit-transform: translate(0, 0);\n    -ms-transform: translate(0, 0);\n    -o-transform: translate(0, 0);\n    transform: translate(0, 0);\n    width: 50px!important;\n    z-index: 850;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li {\n    position: relative;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a {\n    margin-right: 0;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span {\n    border-top-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:not(.treeview) > a > span {\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    padding-top: 5px;\n    padding-bottom: 5px;\n    border-bottom-right-radius: 4px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span:not(.pull-right),\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    display: block!important;\n    position: absolute;\n    width: 180px;\n    left: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > a > span {\n    top: 0;\n    margin-left: -3px;\n    padding: 12px 5px 12px 20px;\n    background-color: inherit;\n  }\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li:hover > .treeview-menu {\n    top: 44px;\n    margin-left: 0;\n  }\n  .sidebar-mini.sidebar-collapse .main-sidebar .user-panel > .info,\n  .sidebar-mini.sidebar-collapse .sidebar-form,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > span,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu,\n  .sidebar-mini.sidebar-collapse .sidebar-menu > li > a > .pull-right,\n  .sidebar-mini.sidebar-collapse .sidebar-menu li.header {\n    display: none!important;\n    -webkit-transform: translateZ(0);\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo {\n    width: 50px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-mini {\n    display: block;\n    margin-left: -15px;\n    margin-right: -15px;\n    font-size: 18px;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .logo > .logo-lg {\n    display: none;\n  }\n  .sidebar-mini.sidebar-collapse .main-header .navbar {\n    margin-left: 50px;\n  }\n}\n.sidebar-menu,\n.main-sidebar .user-panel,\n.sidebar-menu > li.header {\n  white-space: nowrap;\n  overflow: hidden;\n}\n.sidebar-menu:hover {\n  overflow: visible;\n}\n.sidebar-form,\n.sidebar-menu > li.header {\n  overflow: hidden;\n  text-overflow: clip;\n}\n.sidebar-menu li > a {\n  position: relative;\n}\n.sidebar-menu li > a > .pull-right {\n  position: absolute;\n  top: 50%;\n  right: 10px;\n  margin-top: -7px;\n}\n/*\n * Component: Control sidebar. By default, this is the right sidebar.\n */\n.control-sidebar-bg {\n  position: fixed;\n  z-index: 1000;\n  bottom: 0;\n}\n.control-sidebar-bg,\n.control-sidebar {\n  top: 0;\n  right: -230px;\n  width: 230px;\n  -webkit-transition: right 0.3s ease-in-out;\n  -o-transition: right 0.3s ease-in-out;\n  transition: right 0.3s ease-in-out;\n}\n.control-sidebar {\n  position: absolute;\n  padding-top: 50px;\n  z-index: 1010;\n}\n@media (max-width: 768px) {\n  .control-sidebar {\n    padding-top: 100px;\n  }\n}\n.control-sidebar > .tab-content {\n  padding: 10px 15px;\n}\n.control-sidebar.control-sidebar-open,\n.control-sidebar.control-sidebar-open + .control-sidebar-bg {\n  right: 0;\n}\n.control-sidebar-open .control-sidebar-bg,\n.control-sidebar-open .control-sidebar {\n  right: 0;\n}\n@media (min-width: 768px) {\n  .control-sidebar-open .content-wrapper,\n  .control-sidebar-open .right-side,\n  .control-sidebar-open .main-footer {\n    margin-right: 230px;\n  }\n}\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:hover,\n.nav-tabs.control-sidebar-tabs > li:first-of-type > a:focus {\n  border-left-width: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a {\n  border-radius: 0;\n}\n.nav-tabs.control-sidebar-tabs > li > a,\n.nav-tabs.control-sidebar-tabs > li > a:hover {\n  border-top: none;\n  border-right: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n}\n.nav-tabs.control-sidebar-tabs > li > a .icon {\n  font-size: 16px;\n}\n.nav-tabs.control-sidebar-tabs > li.active > a,\n.nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.nav-tabs.control-sidebar-tabs > li.active > a:active {\n  border-top: none;\n  border-right: none;\n  border-bottom: none;\n}\n@media (max-width: 768px) {\n  .nav-tabs.control-sidebar-tabs {\n    display: table;\n  }\n  .nav-tabs.control-sidebar-tabs > li {\n    display: table-cell;\n  }\n}\n.control-sidebar-heading {\n  font-weight: 400;\n  font-size: 16px;\n  padding: 10px 0;\n  margin-bottom: 10px;\n}\n.control-sidebar-subheading {\n  display: block;\n  font-weight: 400;\n  font-size: 14px;\n}\n.control-sidebar-menu {\n  list-style: none;\n  padding: 0;\n  margin: 0 -15px;\n}\n.control-sidebar-menu > li > a {\n  display: block;\n  padding: 10px 15px;\n}\n.control-sidebar-menu > li > a:before,\n.control-sidebar-menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.control-sidebar-menu > li > a:after {\n  clear: both;\n}\n.control-sidebar-menu > li > a > .control-sidebar-subheading {\n  margin-top: 0;\n}\n.control-sidebar-menu .menu-icon {\n  float: left;\n  width: 35px;\n  height: 35px;\n  border-radius: 50%;\n  text-align: center;\n  line-height: 35px;\n}\n.control-sidebar-menu .menu-info {\n  margin-left: 45px;\n  margin-top: 3px;\n}\n.control-sidebar-menu .menu-info > .control-sidebar-subheading {\n  margin: 0;\n}\n.control-sidebar-menu .menu-info > p {\n  margin: 0;\n  font-size: 11px;\n}\n.control-sidebar-menu .progress {\n  margin: 0;\n}\n.control-sidebar-dark {\n  color: #b8c7ce;\n}\n.control-sidebar-dark,\n.control-sidebar-dark + .control-sidebar-bg {\n  background: #222d32;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs {\n  border-bottom: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a {\n  background: #181f23;\n  color: #b8c7ce;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #141a1d;\n  border-bottom-color: #141a1d;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #1c2529;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li > a:hover {\n  color: #fff;\n}\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-dark .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #222d32;\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-heading,\n.control-sidebar-dark .control-sidebar-subheading {\n  color: #fff;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a:hover {\n  background: #1e282c;\n}\n.control-sidebar-dark .control-sidebar-menu > li > a .menu-info > p {\n  color: #b8c7ce;\n}\n.control-sidebar-light {\n  color: #5e5e5e;\n}\n.control-sidebar-light,\n.control-sidebar-light + .control-sidebar-bg {\n  background: #f9fafc;\n  border-left: 1px solid #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs {\n  border-bottom: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a {\n  background: #e8ecf4;\n  color: #444444;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus {\n  border-left-color: #d2d6de;\n  border-bottom-color: #d2d6de;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li > a:active {\n  background: #eff1f7;\n}\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:hover,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:focus,\n.control-sidebar-light .nav-tabs.control-sidebar-tabs > li.active > a:active {\n  background: #f9fafc;\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-heading,\n.control-sidebar-light .control-sidebar-subheading {\n  color: #111;\n}\n.control-sidebar-light .control-sidebar-menu {\n  margin-left: -14px;\n}\n.control-sidebar-light .control-sidebar-menu > li > a:hover {\n  background: #f4f4f5;\n}\n.control-sidebar-light .control-sidebar-menu > li > a .menu-info > p {\n  color: #5e5e5e;\n}\n/*\n * Component: Dropdown menus\n * -------------------------\n */\n/*Dropdowns in general*/\n.dropdown-menu {\n  box-shadow: none;\n  border-color: #eee;\n}\n.dropdown-menu > li > a {\n  color: #777;\n}\n.dropdown-menu > li > a > .glyphicon,\n.dropdown-menu > li > a > .fa,\n.dropdown-menu > li > a > .ion {\n  margin-right: 10px;\n}\n.dropdown-menu > li > a:hover {\n  background-color: #e1e3e9;\n  color: #333;\n}\n.dropdown-menu > .divider {\n  background-color: #eee;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu,\n.navbar-nav > .messages-menu > .dropdown-menu,\n.navbar-nav > .tasks-menu > .dropdown-menu {\n  width: 280px;\n  padding: 0 0 0 0;\n  margin: 0;\n  top: 100%;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li,\n.navbar-nav > .messages-menu > .dropdown-menu > li,\n.navbar-nav > .tasks-menu > .dropdown-menu > li {\n  position: relative;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.header,\n.navbar-nav > .messages-menu > .dropdown-menu > li.header,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.header {\n  border-top-left-radius: 4px;\n  border-top-right-radius: 4px;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  background-color: #ffffff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #f4f4f4;\n  color: #444444;\n  font-size: 14px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n  font-size: 12px;\n  background-color: #fff;\n  padding: 7px 10px;\n  border-bottom: 1px solid #eeeeee;\n  color: #444!important;\n  text-align: center;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .messages-menu > .dropdown-menu > li.footer > a,\n  .navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a {\n    background: #fff!important;\n    color: #444!important;\n  }\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li.footer > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li.footer > a:hover {\n  text-decoration: none;\n  font-weight: normal;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu {\n  max-height: 200px;\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow-x: hidden;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  display: block;\n  white-space: nowrap;\n  /* Prevent text from breaking */\n  border-bottom: 1px solid #f4f4f4;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:hover,\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a:hover {\n  background: #f4f4f4;\n  text-decoration: none;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a {\n  color: #444444;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  padding: 10px;\n}\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .glyphicon,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .fa,\n.navbar-nav > .notifications-menu > .dropdown-menu > li .menu > li > a > .ion {\n  width: 20px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a {\n  margin: 0;\n  padding: 10px 10px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > div > img {\n  margin: auto 10px auto auto;\n  width: 40px;\n  height: 40px;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 {\n  padding: 0;\n  margin: 0 0 0 45px;\n  color: #444444;\n  font-size: 15px;\n  position: relative;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > h4 > small {\n  color: #999999;\n  font-size: 10px;\n  position: absolute;\n  top: 0;\n  right: 0;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a > p {\n  margin: 0 0 0 45px;\n  font-size: 12px;\n  color: #888888;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:before,\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .messages-menu > .dropdown-menu > li .menu > li > a:after {\n  clear: both;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a {\n  padding: 10px;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > h3 {\n  font-size: 14px;\n  padding: 0;\n  margin: 0 0 10px 0;\n  color: #666666;\n}\n.navbar-nav > .tasks-menu > .dropdown-menu > li .menu > li > a > .progress {\n  padding: 0;\n  margin: 0;\n}\n.navbar-nav > .user-menu > .dropdown-menu {\n  border-top-right-radius: 0;\n  border-top-left-radius: 0;\n  padding: 1px 0 0 0;\n  border-top-width: 0;\n  width: 280px;\n}\n.navbar-nav > .user-menu > .dropdown-menu,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  border-bottom-right-radius: 4px;\n  border-bottom-left-radius: 4px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header {\n  height: 175px;\n  padding: 10px;\n  text-align: center;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > img {\n  z-index: 5;\n  height: 90px;\n  width: 90px;\n  border: 3px solid;\n  border-color: transparent;\n  border-color: rgba(255, 255, 255, 0.2);\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p {\n  z-index: 5;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  font-size: 17px;\n  margin-top: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > li.user-header > p > small {\n  display: block;\n  font-size: 12px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body {\n  padding: 15px;\n  border-bottom: 1px solid #f4f4f4;\n  border-top: 1px solid #dddddd;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n  color: #444 !important;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-body a {\n    background: #fff !important;\n    color: #444 !important;\n  }\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer {\n  background-color: #f9f9f9;\n  padding: 10px;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:before,\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  content: \" \";\n  display: table;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer:after {\n  clear: both;\n}\n.navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default {\n  color: #666666;\n}\n@media (max-width: 991px) {\n  .navbar-nav > .user-menu > .dropdown-menu > .user-footer .btn-default:hover {\n    background-color: #f9f9f9;\n  }\n}\n.navbar-nav > .user-menu .user-image {\n  float: left;\n  width: 25px;\n  height: 25px;\n  border-radius: 50%;\n  margin-right: 10px;\n  margin-top: -2px;\n}\n@media (max-width: 767px) {\n  .navbar-nav > .user-menu .user-image {\n    float: none;\n    margin-right: 0;\n    margin-top: -8px;\n    line-height: 10px;\n  }\n}\n/* Add fade animation to dropdown menus by appending\n the class .animated-dropdown-menu to the .dropdown-menu ul (or ol)*/\n.open:not(.dropup) > .animated-dropdown-menu {\n  backface-visibility: visible !important;\n  -webkit-animation: flipInX 0.7s both;\n  -o-animation: flipInX 0.7s both;\n  animation: flipInX 0.7s both;\n}\n@keyframes flipInX {\n  0% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    transition-timing-function: ease-in;\n  }\n  60% {\n    transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    transform: perspective(400px);\n  }\n}\n@-webkit-keyframes flipInX {\n  0% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 90deg);\n    -webkit-transition-timing-function: ease-in;\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -20deg);\n    -webkit-transition-timing-function: ease-in;\n  }\n  60% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, 10deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: perspective(400px) rotate3d(1, 0, 0, -5deg);\n  }\n  100% {\n    -webkit-transform: perspective(400px);\n  }\n}\n/* Fix dropdown menu in navbars */\n.navbar-custom-menu > .navbar-nav > li {\n  position: relative;\n}\n.navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n  position: absolute;\n  right: 0;\n  left: auto;\n}\n@media (max-width: 991px) {\n  .navbar-custom-menu > .navbar-nav {\n    float: right;\n  }\n  .navbar-custom-menu > .navbar-nav > li {\n    position: static;\n  }\n  .navbar-custom-menu > .navbar-nav > li > .dropdown-menu {\n    position: absolute;\n    right: 5%;\n    left: auto;\n    border: 1px solid #ddd;\n    background: #fff;\n  }\n}\n/*\n * Component: Form\n * ---------------\n */\n.form-control {\n  border-radius: 0;\n  box-shadow: none;\n  border-color: #d2d6de;\n}\n.form-control:focus {\n  border-color: #3c8dbc;\n  box-shadow: none;\n}\n.form-control::-moz-placeholder,\n.form-control:-ms-input-placeholder,\n.form-control::-webkit-input-placeholder {\n  color: #bbb;\n  opacity: 1;\n}\n.form-control:not(select) {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  appearance: none;\n}\n.form-group.has-success label {\n  color: #00a65a;\n}\n.form-group.has-success .form-control {\n  border-color: #00a65a;\n  box-shadow: none;\n}\n.form-group.has-warning label {\n  color: #f39c12;\n}\n.form-group.has-warning .form-control {\n  border-color: #f39c12;\n  box-shadow: none;\n}\n.form-group.has-error label {\n  color: #dd4b39;\n}\n.form-group.has-error .form-control {\n  border-color: #dd4b39;\n  box-shadow: none;\n}\n/* Input group */\n.input-group .input-group-addon {\n  border-radius: 0;\n  border-color: #d2d6de;\n  background-color: #fff;\n}\n/* button groups */\n.btn-group-vertical .btn.btn-flat:first-of-type,\n.btn-group-vertical .btn.btn-flat:last-of-type {\n  border-radius: 0;\n}\n.icheck > label {\n  padding-left: 0;\n}\n/* support Font Awesome icons in form-control */\n.form-control-feedback.fa {\n  line-height: 34px;\n}\n.input-lg + .form-control-feedback.fa,\n.input-group-lg + .form-control-feedback.fa,\n.form-group-lg .form-control + .form-control-feedback.fa {\n  line-height: 46px;\n}\n.input-sm + .form-control-feedback.fa,\n.input-group-sm + .form-control-feedback.fa,\n.form-group-sm .form-control + .form-control-feedback.fa {\n  line-height: 30px;\n}\n/*\n * Component: Progress Bar\n * -----------------------\n */\n.progress,\n.progress > .progress-bar {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.progress,\n.progress > .progress-bar,\n.progress .progress-bar,\n.progress > .progress-bar .progress-bar {\n  border-radius: 1px;\n}\n/* size variation */\n.progress.sm,\n.progress-sm {\n  height: 10px;\n}\n.progress.sm,\n.progress-sm,\n.progress.sm .progress-bar,\n.progress-sm .progress-bar {\n  border-radius: 1px;\n}\n.progress.xs,\n.progress-xs {\n  height: 7px;\n}\n.progress.xs,\n.progress-xs,\n.progress.xs .progress-bar,\n.progress-xs .progress-bar {\n  border-radius: 1px;\n}\n.progress.xxs,\n.progress-xxs {\n  height: 3px;\n}\n.progress.xxs,\n.progress-xxs,\n.progress.xxs .progress-bar,\n.progress-xxs .progress-bar {\n  border-radius: 1px;\n}\n/* Vertical bars */\n.progress.vertical {\n  position: relative;\n  width: 30px;\n  height: 200px;\n  display: inline-block;\n  margin-right: 10px;\n}\n.progress.vertical > .progress-bar {\n  width: 100%;\n  position: absolute;\n  bottom: 0;\n}\n.progress.vertical.sm,\n.progress.vertical.progress-sm {\n  width: 20px;\n}\n.progress.vertical.xs,\n.progress.vertical.progress-xs {\n  width: 10px;\n}\n.progress.vertical.xxs,\n.progress.vertical.progress-xxs {\n  width: 3px;\n}\n.progress-group .progress-text {\n  font-weight: 600;\n}\n.progress-group .progress-number {\n  float: right;\n}\n/* Remove margins from progress bars when put in a table */\n.table tr > td .progress {\n  margin: 0;\n}\n.progress-bar-light-blue,\n.progress-bar-primary {\n  background-color: #3c8dbc;\n}\n.progress-striped .progress-bar-light-blue,\n.progress-striped .progress-bar-primary {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-green,\n.progress-bar-success {\n  background-color: #00a65a;\n}\n.progress-striped .progress-bar-green,\n.progress-striped .progress-bar-success {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-aqua,\n.progress-bar-info {\n  background-color: #00c0ef;\n}\n.progress-striped .progress-bar-aqua,\n.progress-striped .progress-bar-info {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-yellow,\n.progress-bar-warning {\n  background-color: #f39c12;\n}\n.progress-striped .progress-bar-yellow,\n.progress-striped .progress-bar-warning {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n.progress-bar-red,\n.progress-bar-danger {\n  background-color: #dd4b39;\n}\n.progress-striped .progress-bar-red,\n.progress-striped .progress-bar-danger {\n  background-image: -webkit-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: -o-linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n  background-image: linear-gradient(45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);\n}\n/*\n * Component: Small Box\n * --------------------\n */\n.small-box {\n  border-radius: 2px;\n  position: relative;\n  display: block;\n  margin-bottom: 20px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.small-box > .inner {\n  padding: 10px;\n}\n.small-box > .small-box-footer {\n  position: relative;\n  text-align: center;\n  padding: 3px 0;\n  color: #fff;\n  color: rgba(255, 255, 255, 0.8);\n  display: block;\n  z-index: 10;\n  background: rgba(0, 0, 0, 0.1);\n  text-decoration: none;\n}\n.small-box > .small-box-footer:hover {\n  color: #fff;\n  background: rgba(0, 0, 0, 0.15);\n}\n.small-box h3 {\n  font-size: 38px;\n  font-weight: bold;\n  margin: 0 0 10px 0;\n  white-space: nowrap;\n  padding: 0;\n}\n.small-box p {\n  font-size: 15px;\n}\n.small-box p > small {\n  display: block;\n  color: #f9f9f9;\n  font-size: 13px;\n  margin-top: 5px;\n}\n.small-box h3,\n.small-box p {\n  z-index: 5px;\n}\n.small-box .icon {\n  -webkit-transition: all 0.3s linear;\n  -o-transition: all 0.3s linear;\n  transition: all 0.3s linear;\n  position: absolute;\n  top: -10px;\n  right: 10px;\n  z-index: 0;\n  font-size: 90px;\n  color: rgba(0, 0, 0, 0.15);\n}\n.small-box:hover {\n  text-decoration: none;\n  color: #f9f9f9;\n}\n.small-box:hover .icon {\n  font-size: 95px;\n}\n@media (max-width: 767px) {\n  .small-box {\n    text-align: center;\n  }\n  .small-box .icon {\n    display: none;\n  }\n  .small-box p {\n    font-size: 12px;\n  }\n}\n/*\n * Component: Box\n * --------------\n */\n.box {\n  position: relative;\n  border-radius: 3px;\n  background: #ffffff;\n  border-top: 3px solid #d2d6de;\n  margin-bottom: 20px;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n.box.box-primary {\n  border-top-color: #3c8dbc;\n}\n.box.box-info {\n  border-top-color: #00c0ef;\n}\n.box.box-danger {\n  border-top-color: #dd4b39;\n}\n.box.box-warning {\n  border-top-color: #f39c12;\n}\n.box.box-success {\n  border-top-color: #00a65a;\n}\n.box.box-default {\n  border-top-color: #d2d6de;\n}\n.box.collapsed-box .box-body,\n.box.collapsed-box .box-footer {\n  display: none;\n}\n.box .nav-stacked > li {\n  border-bottom: 1px solid #f4f4f4;\n  margin: 0;\n}\n.box .nav-stacked > li:last-of-type {\n  border-bottom: none;\n}\n.box.height-control .box-body {\n  max-height: 300px;\n  overflow: auto;\n}\n.box .border-right {\n  border-right: 1px solid #f4f4f4;\n}\n.box .border-left {\n  border-left: 1px solid #f4f4f4;\n}\n.box.box-solid {\n  border-top: 0;\n}\n.box.box-solid > .box-header .btn.btn-default {\n  background: transparent;\n}\n.box.box-solid > .box-header .btn:hover,\n.box.box-solid > .box-header a:hover {\n  background: rgba(0, 0, 0, 0.1);\n}\n.box.box-solid.box-default {\n  border: 1px solid #d2d6de;\n}\n.box.box-solid.box-default > .box-header {\n  color: #444444;\n  background: #d2d6de;\n  background-color: #d2d6de;\n}\n.box.box-solid.box-default > .box-header a,\n.box.box-solid.box-default > .box-header .btn {\n  color: #444444;\n}\n.box.box-solid.box-primary {\n  border: 1px solid #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header {\n  color: #ffffff;\n  background: #3c8dbc;\n  background-color: #3c8dbc;\n}\n.box.box-solid.box-primary > .box-header a,\n.box.box-solid.box-primary > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-info {\n  border: 1px solid #00c0ef;\n}\n.box.box-solid.box-info > .box-header {\n  color: #ffffff;\n  background: #00c0ef;\n  background-color: #00c0ef;\n}\n.box.box-solid.box-info > .box-header a,\n.box.box-solid.box-info > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-danger {\n  border: 1px solid #dd4b39;\n}\n.box.box-solid.box-danger > .box-header {\n  color: #ffffff;\n  background: #dd4b39;\n  background-color: #dd4b39;\n}\n.box.box-solid.box-danger > .box-header a,\n.box.box-solid.box-danger > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-warning {\n  border: 1px solid #f39c12;\n}\n.box.box-solid.box-warning > .box-header {\n  color: #ffffff;\n  background: #f39c12;\n  background-color: #f39c12;\n}\n.box.box-solid.box-warning > .box-header a,\n.box.box-solid.box-warning > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid.box-success {\n  border: 1px solid #00a65a;\n}\n.box.box-solid.box-success > .box-header {\n  color: #ffffff;\n  background: #00a65a;\n  background-color: #00a65a;\n}\n.box.box-solid.box-success > .box-header a,\n.box.box-solid.box-success > .box-header .btn {\n  color: #ffffff;\n}\n.box.box-solid > .box-header > .box-tools .btn {\n  border: 0;\n  box-shadow: none;\n}\n.box.box-solid[class*='bg'] > .box-header {\n  color: #fff;\n}\n.box .box-group > .box {\n  margin-bottom: 5px;\n}\n.box .knob-label {\n  text-align: center;\n  color: #333;\n  font-weight: 100;\n  font-size: 12px;\n  margin-bottom: 0.3em;\n}\n.box > .overlay,\n.overlay-wrapper > .overlay,\n.box > .loading-img,\n.overlay-wrapper > .loading-img {\n  position: absolute;\n  top: 0;\n  left: 0;\n  width: 100%;\n  height: 100%;\n}\n.box .overlay,\n.overlay-wrapper .overlay {\n  z-index: 50;\n  background: rgba(255, 255, 255, 0.7);\n  border-radius: 3px;\n}\n.box .overlay > .fa,\n.overlay-wrapper .overlay > .fa {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin-left: -15px;\n  margin-top: -15px;\n  color: #000;\n  font-size: 30px;\n}\n.box .overlay.dark,\n.overlay-wrapper .overlay.dark {\n  background: rgba(0, 0, 0, 0.5);\n}\n.box-header:before,\n.box-body:before,\n.box-footer:before,\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  content: \" \";\n  display: table;\n}\n.box-header:after,\n.box-body:after,\n.box-footer:after {\n  clear: both;\n}\n.box-header {\n  color: #444;\n  display: block;\n  padding: 10px;\n  position: relative;\n}\n.box-header.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.collapsed-box .box-header.with-border {\n  border-bottom: none;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion,\n.box-header .box-title {\n  display: inline-block;\n  font-size: 18px;\n  margin: 0;\n  line-height: 1;\n}\n.box-header > .fa,\n.box-header > .glyphicon,\n.box-header > .ion {\n  margin-right: 5px;\n}\n.box-header > .box-tools {\n  position: absolute;\n  right: 10px;\n  top: 5px;\n}\n.box-header > .box-tools [data-toggle=\"tooltip\"] {\n  position: relative;\n}\n.box-header > .box-tools.pull-right .dropdown-menu {\n  right: 0;\n  left: auto;\n}\n.btn-box-tool {\n  padding: 5px;\n  font-size: 12px;\n  background: transparent;\n  color: #97a0b3;\n}\n.open .btn-box-tool,\n.btn-box-tool:hover {\n  color: #606c84;\n}\n.btn-box-tool.btn:active {\n  box-shadow: none;\n}\n.box-body {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  padding: 10px;\n}\n.no-header .box-body {\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.box-body > .table {\n  margin-bottom: 0;\n}\n.box-body .fc {\n  margin-top: 5px;\n}\n.box-body .full-width-chart {\n  margin: -19px;\n}\n.box-body.no-padding .full-width-chart {\n  margin: -9px;\n}\n.box-body .box-pane {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 3px;\n}\n.box-body .box-pane-right {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 0;\n}\n.box-footer {\n  border-top-left-radius: 0;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n  border-top: 1px solid #f4f4f4;\n  padding: 10px;\n  background-color: #ffffff;\n}\n.chart-legend {\n  margin: 10px 0;\n}\n@media (max-width: 991px) {\n  .chart-legend > li {\n    float: left;\n    margin-right: 10px;\n  }\n}\n/* Widget: TODO LIST */\n.todo-list {\n  margin: 0;\n  padding: 0;\n  list-style: none;\n  overflow: auto;\n}\n.todo-list > li {\n  border-radius: 2px;\n  padding: 10px;\n  background: #f4f4f4;\n  margin-bottom: 2px;\n  border-left: 2px solid #e6e7e8;\n  color: #444;\n}\n.todo-list > li:last-of-type {\n  margin-bottom: 0;\n}\n.todo-list > li > input[type='checkbox'] {\n  margin: 0 10px 0 5px;\n}\n.todo-list > li .text {\n  display: inline-block;\n  margin-left: 5px;\n  font-weight: 600;\n}\n.todo-list > li .label {\n  margin-left: 10px;\n  font-size: 9px;\n}\n.todo-list > li .tools {\n  display: none;\n  float: right;\n  color: #dd4b39;\n}\n.todo-list > li .tools > .fa,\n.todo-list > li .tools > .glyphicon,\n.todo-list > li .tools > .ion {\n  margin-right: 5px;\n  cursor: pointer;\n}\n.todo-list > li:hover .tools {\n  display: inline-block;\n}\n.todo-list > li.done {\n  color: #999;\n}\n.todo-list > li.done .text {\n  text-decoration: line-through;\n  font-weight: 500;\n}\n.todo-list > li.done .label {\n  background: #d2d6de !important;\n}\n.todo-list .danger {\n  border-left-color: #dd4b39;\n}\n.todo-list .warning {\n  border-left-color: #f39c12;\n}\n.todo-list .info {\n  border-left-color: #00c0ef;\n}\n.todo-list .success {\n  border-left-color: #00a65a;\n}\n.todo-list .primary {\n  border-left-color: #3c8dbc;\n}\n.todo-list .handle {\n  display: inline-block;\n  cursor: move;\n  margin: 0 5px;\n}\n/* Chat widget (DEPRECATED - this will be removed in the next major release. Use Direct Chat instead)*/\n.chat {\n  padding: 5px 20px 5px 10px;\n}\n.chat .item {\n  margin-bottom: 10px;\n}\n.chat .item:before,\n.chat .item:after {\n  content: \" \";\n  display: table;\n}\n.chat .item:after {\n  clear: both;\n}\n.chat .item > img {\n  width: 40px;\n  height: 40px;\n  border: 2px solid transparent;\n  border-radius: 50%;\n}\n.chat .item > .online {\n  border: 2px solid #00a65a;\n}\n.chat .item > .offline {\n  border: 2px solid #dd4b39;\n}\n.chat .item > .message {\n  margin-left: 55px;\n  margin-top: -40px;\n}\n.chat .item > .message > .name {\n  display: block;\n  font-weight: 600;\n}\n.chat .item > .attachment {\n  border-radius: 3px;\n  background: #f4f4f4;\n  margin-left: 65px;\n  margin-right: 15px;\n  padding: 10px;\n}\n.chat .item > .attachment > h4 {\n  margin: 0 0 5px 0;\n  font-weight: 600;\n  font-size: 14px;\n}\n.chat .item > .attachment > p,\n.chat .item > .attachment > .filename {\n  font-weight: 600;\n  font-size: 13px;\n  font-style: italic;\n  margin: 0;\n}\n.chat .item > .attachment:before,\n.chat .item > .attachment:after {\n  content: \" \";\n  display: table;\n}\n.chat .item > .attachment:after {\n  clear: both;\n}\n.box-input {\n  max-width: 200px;\n}\n.modal .panel-body {\n  color: #444;\n}\n/*\n * Component: Info Box\n * -------------------\n */\n.info-box {\n  display: block;\n  min-height: 90px;\n  background: #fff;\n  width: 100%;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 2px;\n  margin-bottom: 15px;\n}\n.info-box small {\n  font-size: 14px;\n}\n.info-box .progress {\n  background: rgba(0, 0, 0, 0.2);\n  margin: 5px -10px 5px -10px;\n  height: 2px;\n}\n.info-box .progress,\n.info-box .progress .progress-bar {\n  border-radius: 0;\n}\n.info-box .progress .progress-bar {\n  background: #fff;\n}\n.info-box-icon {\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n  display: block;\n  float: left;\n  height: 90px;\n  width: 90px;\n  text-align: center;\n  font-size: 45px;\n  line-height: 90px;\n  background: rgba(0, 0, 0, 0.2);\n}\n.info-box-icon > img {\n  max-width: 100%;\n}\n.info-box-content {\n  padding: 5px 10px;\n  margin-left: 90px;\n}\n.info-box-number {\n  display: block;\n  font-weight: bold;\n  font-size: 18px;\n}\n.progress-description,\n.info-box-text {\n  display: block;\n  font-size: 14px;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.info-box-text {\n  text-transform: uppercase;\n}\n.info-box-more {\n  display: block;\n}\n.progress-description {\n  margin: 0;\n}\n/*\n * Component: Timeline\n * -------------------\n */\n.timeline {\n  position: relative;\n  margin: 0 0 30px 0;\n  padding: 0;\n  list-style: none;\n}\n.timeline:before {\n  content: '';\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  width: 4px;\n  background: #ddd;\n  left: 31px;\n  margin: 0;\n  border-radius: 2px;\n}\n.timeline > li {\n  position: relative;\n  margin-right: 10px;\n  margin-bottom: 15px;\n}\n.timeline > li:before,\n.timeline > li:after {\n  content: \" \";\n  display: table;\n}\n.timeline > li:after {\n  clear: both;\n}\n.timeline > li > .timeline-item {\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  margin-top: 0;\n  background: #fff;\n  color: #444;\n  margin-left: 60px;\n  margin-right: 15px;\n  padding: 0;\n  position: relative;\n}\n.timeline > li > .timeline-item > .time {\n  color: #999;\n  float: right;\n  padding: 10px;\n  font-size: 12px;\n}\n.timeline > li > .timeline-item > .timeline-header {\n  margin: 0;\n  color: #555;\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n  font-size: 16px;\n  line-height: 1.1;\n}\n.timeline > li > .timeline-item > .timeline-header > a {\n  font-weight: 600;\n}\n.timeline > li > .timeline-item > .timeline-body,\n.timeline > li > .timeline-item > .timeline-footer {\n  padding: 10px;\n}\n.timeline > li > .fa,\n.timeline > li > .glyphicon,\n.timeline > li > .ion {\n  width: 30px;\n  height: 30px;\n  font-size: 15px;\n  line-height: 30px;\n  position: absolute;\n  color: #666;\n  background: #d2d6de;\n  border-radius: 50%;\n  text-align: center;\n  left: 18px;\n  top: 0;\n}\n.timeline > .time-label > span {\n  font-weight: 600;\n  padding: 5px;\n  display: inline-block;\n  background-color: #fff;\n  border-radius: 4px;\n}\n/*\n * Component: Button\n * -----------------\n */\n.btn {\n  border-radius: 3px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid transparent;\n}\n.btn.uppercase {\n  text-transform: uppercase;\n}\n.btn.btn-flat {\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  -moz-box-shadow: none;\n  box-shadow: none;\n  border-width: 1px;\n}\n.btn:active {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-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:focus {\n  outline: none;\n}\n.btn.btn-file {\n  position: relative;\n  overflow: hidden;\n}\n.btn.btn-file > input[type='file'] {\n  position: absolute;\n  top: 0;\n  right: 0;\n  min-width: 100%;\n  min-height: 100%;\n  font-size: 100px;\n  text-align: right;\n  opacity: 0;\n  filter: alpha(opacity=0);\n  outline: none;\n  background: white;\n  cursor: inherit;\n  display: block;\n}\n.btn-default {\n  background-color: #f4f4f4;\n  color: #444;\n  border-color: #ddd;\n}\n.btn-default:hover,\n.btn-default:active,\n.btn-default.hover {\n  background-color: #e7e7e7;\n}\n.btn-primary {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n}\n.btn-primary:hover,\n.btn-primary:active,\n.btn-primary.hover {\n  background-color: #367fa9;\n}\n.btn-success {\n  background-color: #00a65a;\n  border-color: #008d4c;\n}\n.btn-success:hover,\n.btn-success:active,\n.btn-success.hover {\n  background-color: #008d4c;\n}\n.btn-info {\n  background-color: #00c0ef;\n  border-color: #00acd6;\n}\n.btn-info:hover,\n.btn-info:active,\n.btn-info.hover {\n  background-color: #00acd6;\n}\n.btn-danger {\n  background-color: #dd4b39;\n  border-color: #d73925;\n}\n.btn-danger:hover,\n.btn-danger:active,\n.btn-danger.hover {\n  background-color: #d73925;\n}\n.btn-warning {\n  background-color: #f39c12;\n  border-color: #e08e0b;\n}\n.btn-warning:hover,\n.btn-warning:active,\n.btn-warning.hover {\n  background-color: #e08e0b;\n}\n.btn-outline {\n  border: 1px solid #fff;\n  background: transparent;\n  color: #fff;\n}\n.btn-outline:hover,\n.btn-outline:focus,\n.btn-outline:active {\n  color: rgba(255, 255, 255, 0.7);\n  border-color: rgba(255, 255, 255, 0.7);\n}\n.btn-link {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n.btn[class*='bg-']:hover {\n  -webkit-box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n  box-shadow: inset 0 0 100px rgba(0, 0, 0, 0.2);\n}\n.btn-app {\n  border-radius: 3px;\n  position: relative;\n  padding: 15px 5px;\n  margin: 0 0 10px 10px;\n  min-width: 80px;\n  height: 60px;\n  text-align: center;\n  color: #666;\n  border: 1px solid #ddd;\n  background-color: #f4f4f4;\n  font-size: 12px;\n}\n.btn-app > .fa,\n.btn-app > .glyphicon,\n.btn-app > .ion {\n  font-size: 20px;\n  display: block;\n}\n.btn-app:hover {\n  background: #f4f4f4;\n  color: #444;\n  border-color: #aaa;\n}\n.btn-app:active,\n.btn-app:focus {\n  -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);\n  -moz-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-app > .badge {\n  position: absolute;\n  top: -3px;\n  right: -10px;\n  font-size: 10px;\n  font-weight: 400;\n}\n/*\n * Component: Callout\n * ------------------\n */\n.callout {\n  border-radius: 3px;\n  margin: 0 0 20px 0;\n  padding: 15px 30px 15px 15px;\n  border-left: 5px solid #eee;\n}\n.callout a {\n  color: #fff;\n  text-decoration: underline;\n}\n.callout a:hover {\n  color: #eee;\n}\n.callout h4 {\n  margin-top: 0;\n  font-weight: 600;\n}\n.callout p:last-child {\n  margin-bottom: 0;\n}\n.callout code,\n.callout .highlight {\n  background-color: #fff;\n}\n.callout.callout-danger {\n  border-color: #c23321;\n}\n.callout.callout-warning {\n  border-color: #c87f0a;\n}\n.callout.callout-info {\n  border-color: #0097bc;\n}\n.callout.callout-success {\n  border-color: #00733e;\n}\n/*\n * Component: alert\n * ----------------\n */\n.alert {\n  border-radius: 3px;\n}\n.alert h4 {\n  font-weight: 600;\n}\n.alert .icon {\n  margin-right: 10px;\n}\n.alert .close {\n  color: #000;\n  opacity: 0.2;\n  filter: alpha(opacity=20);\n}\n.alert .close:hover {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.alert a {\n  color: #fff;\n  text-decoration: underline;\n}\n.alert-success {\n  border-color: #008d4c;\n}\n.alert-danger,\n.alert-error {\n  border-color: #d73925;\n}\n.alert-warning {\n  border-color: #e08e0b;\n}\n.alert-info {\n  border-color: #00acd6;\n}\n/*\n * Component: Nav\n * --------------\n */\n.nav > li > a:hover,\n.nav > li > a:active,\n.nav > li > a:focus {\n  color: #444;\n  background: #f7f7f7;\n}\n/* NAV PILLS */\n.nav-pills > li > a {\n  border-radius: 0;\n  border-top: 3px solid transparent;\n  color: #444;\n}\n.nav-pills > li > a > .fa,\n.nav-pills > li > a > .glyphicon,\n.nav-pills > li > a > .ion {\n  margin-right: 5px;\n}\n.nav-pills > li.active > a,\n.nav-pills > li.active > a:hover,\n.nav-pills > li.active > a:focus {\n  border-top-color: #3c8dbc;\n}\n.nav-pills > li.active > a {\n  font-weight: 600;\n}\n/* NAV STACKED */\n.nav-stacked > li > a {\n  border-radius: 0;\n  border-top: 0;\n  border-left: 3px solid transparent;\n  color: #444;\n}\n.nav-stacked > li.active > a,\n.nav-stacked > li.active > a:hover {\n  background: transparent;\n  color: #444;\n  border-top: 0;\n  border-left-color: #3c8dbc;\n}\n.nav-stacked > li.header {\n  border-bottom: 1px solid #ddd;\n  color: #777;\n  margin-bottom: 10px;\n  padding: 5px 10px;\n  text-transform: uppercase;\n}\n/* NAV TABS */\n.nav-tabs-custom {\n  margin-bottom: 20px;\n  background: #fff;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs {\n  margin: 0;\n  border-bottom-color: #f4f4f4;\n  border-top-right-radius: 3px;\n  border-top-left-radius: 3px;\n}\n.nav-tabs-custom > .nav-tabs > li {\n  border-top: 3px solid transparent;\n  margin-bottom: -2px;\n  margin-right: 5px;\n}\n.nav-tabs-custom > .nav-tabs > li > a {\n  color: #444;\n  border-radius: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a,\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  background: transparent;\n  margin: 0;\n}\n.nav-tabs-custom > .nav-tabs > li > a:hover {\n  color: #999;\n}\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:hover,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:focus,\n.nav-tabs-custom > .nav-tabs > li:not(.active) > a:active {\n  border-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.active {\n  border-top-color: #3c8dbc;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a,\n.nav-tabs-custom > .nav-tabs > li.active:hover > a {\n  background-color: #fff;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.active > a {\n  border-top-color: transparent;\n  border-left-color: #f4f4f4;\n  border-right-color: #f4f4f4;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type {\n  margin-left: 0;\n}\n.nav-tabs-custom > .nav-tabs > li:first-of-type.active > a {\n  border-left-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs.pull-right {\n  float: none!important;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li {\n  float: right;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type {\n  margin-right: 0;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type > a {\n  border-left-width: 1px;\n}\n.nav-tabs-custom > .nav-tabs.pull-right > li:first-of-type.active > a {\n  border-left-color: #f4f4f4;\n  border-right-color: transparent;\n}\n.nav-tabs-custom > .nav-tabs > li.header {\n  line-height: 35px;\n  padding: 0 10px;\n  font-size: 20px;\n  color: #444;\n}\n.nav-tabs-custom > .nav-tabs > li.header > .fa,\n.nav-tabs-custom > .nav-tabs > li.header > .glyphicon,\n.nav-tabs-custom > .nav-tabs > li.header > .ion {\n  margin-right: 5px;\n}\n.nav-tabs-custom > .tab-content {\n  background: #fff;\n  padding: 10px;\n  border-bottom-right-radius: 3px;\n  border-bottom-left-radius: 3px;\n}\n.nav-tabs-custom .dropdown.open > a:active,\n.nav-tabs-custom .dropdown.open > a:focus {\n  background: transparent;\n  color: #999;\n}\n/* PAGINATION */\n.pagination > li > a {\n  background: #fafafa;\n  color: #666;\n}\n.pagination.pagination-flat > li > a {\n  border-radius: 0 !important;\n}\n/*\n * Component: Products List\n * ------------------------\n */\n.products-list {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.products-list > .item {\n  border-radius: 3px;\n  -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  padding: 10px 0;\n  background: #fff;\n}\n.products-list > .item:before,\n.products-list > .item:after {\n  content: \" \";\n  display: table;\n}\n.products-list > .item:after {\n  clear: both;\n}\n.products-list .product-img {\n  float: left;\n}\n.products-list .product-img img {\n  width: 50px;\n  height: 50px;\n}\n.products-list .product-info {\n  margin-left: 60px;\n}\n.products-list .product-title {\n  font-weight: 600;\n}\n.products-list .product-description {\n  display: block;\n  color: #999;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.product-list-in-box > .item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0;\n  border-bottom: 1px solid #f4f4f4;\n}\n.product-list-in-box > .item:last-of-type {\n  border-bottom-width: 0;\n}\n/*\n * Component: Table\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  border-top: 1px solid #f4f4f4;\n}\n.table > thead > tr > th {\n  border-bottom: 2px solid #f4f4f4;\n}\n.table tr td .progress {\n  margin-top: 5px;\n}\n.table-bordered {\n  border: 1px solid #f4f4f4;\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 #f4f4f4;\n}\n.table-bordered > thead > tr > th,\n.table-bordered > thead > tr > td {\n  border-bottom-width: 2px;\n}\n.table.no-border,\n.table.no-border td,\n.table.no-border th {\n  border: 0;\n}\n/* .text-center in tables */\ntable.text-center,\ntable.text-center td,\ntable.text-center th {\n  text-align: center;\n}\n.table.align th {\n  text-align: left;\n}\n.table.align td {\n  text-align: right;\n}\n/*\n * Component: Label\n * ----------------\n */\n.label-default {\n  background-color: #d2d6de;\n  color: #444;\n}\n/*\n * Component: Direct Chat\n * ----------------------\n */\n.direct-chat .box-body {\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 0;\n  position: relative;\n  overflow-x: hidden;\n  padding: 0;\n}\n.direct-chat.chat-pane-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-messages {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n  padding: 10px;\n  height: 250px;\n  overflow: auto;\n}\n.direct-chat-msg,\n.direct-chat-text {\n  display: block;\n}\n.direct-chat-msg {\n  margin-bottom: 10px;\n}\n.direct-chat-msg:before,\n.direct-chat-msg:after {\n  content: \" \";\n  display: table;\n}\n.direct-chat-msg:after {\n  clear: both;\n}\n.direct-chat-messages,\n.direct-chat-contacts {\n  -webkit-transition: -webkit-transform 0.5s ease-in-out;\n  -moz-transition: -moz-transform 0.5s ease-in-out;\n  -o-transition: -o-transform 0.5s ease-in-out;\n  transition: transform 0.5s ease-in-out;\n}\n.direct-chat-text {\n  border-radius: 5px;\n  position: relative;\n  padding: 5px 10px;\n  background: #d2d6de;\n  border: 1px solid #d2d6de;\n  margin: 5px 0 0 50px;\n  color: #444444;\n}\n.direct-chat-text:after,\n.direct-chat-text:before {\n  position: absolute;\n  right: 100%;\n  top: 15px;\n  border: solid transparent;\n  border-right-color: #d2d6de;\n  content: ' ';\n  height: 0;\n  width: 0;\n  pointer-events: none;\n}\n.direct-chat-text:after {\n  border-width: 5px;\n  margin-top: -5px;\n}\n.direct-chat-text:before {\n  border-width: 6px;\n  margin-top: -6px;\n}\n.right .direct-chat-text {\n  margin-right: 50px;\n  margin-left: 0;\n}\n.right .direct-chat-text:after,\n.right .direct-chat-text:before {\n  right: auto;\n  left: 100%;\n  border-right-color: transparent;\n  border-left-color: #d2d6de;\n}\n.direct-chat-img {\n  border-radius: 50%;\n  float: left;\n  width: 40px;\n  height: 40px;\n}\n.right .direct-chat-img {\n  float: right;\n}\n.direct-chat-info {\n  display: block;\n  margin-bottom: 2px;\n  font-size: 12px;\n}\n.direct-chat-name {\n  font-weight: 600;\n}\n.direct-chat-timestamp {\n  color: #999;\n}\n.direct-chat-contacts-open .direct-chat-contacts {\n  -webkit-transform: translate(0, 0);\n  -ms-transform: translate(0, 0);\n  -o-transform: translate(0, 0);\n  transform: translate(0, 0);\n}\n.direct-chat-contacts {\n  -webkit-transform: translate(101%, 0);\n  -ms-transform: translate(101%, 0);\n  -o-transform: translate(101%, 0);\n  transform: translate(101%, 0);\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  height: 250px;\n  width: 100%;\n  background: #222d32;\n  color: #fff;\n  overflow: auto;\n}\n.contacts-list > li {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  padding: 10px;\n  margin: 0;\n}\n.contacts-list > li:before,\n.contacts-list > li:after {\n  content: \" \";\n  display: table;\n}\n.contacts-list > li:after {\n  clear: both;\n}\n.contacts-list > li:last-of-type {\n  border-bottom: none;\n}\n.contacts-list-img {\n  border-radius: 50%;\n  width: 40px;\n  float: left;\n}\n.contacts-list-info {\n  margin-left: 45px;\n  color: #fff;\n}\n.contacts-list-name,\n.contacts-list-status {\n  display: block;\n}\n.contacts-list-name {\n  font-weight: 600;\n}\n.contacts-list-status {\n  font-size: 12px;\n}\n.contacts-list-date {\n  color: #aaa;\n  font-weight: normal;\n}\n.contacts-list-msg {\n  color: #999;\n}\n.direct-chat-danger .right > .direct-chat-text {\n  background: #dd4b39;\n  border-color: #dd4b39;\n  color: #ffffff;\n}\n.direct-chat-danger .right > .direct-chat-text:after,\n.direct-chat-danger .right > .direct-chat-text:before {\n  border-left-color: #dd4b39;\n}\n.direct-chat-primary .right > .direct-chat-text {\n  background: #3c8dbc;\n  border-color: #3c8dbc;\n  color: #ffffff;\n}\n.direct-chat-primary .right > .direct-chat-text:after,\n.direct-chat-primary .right > .direct-chat-text:before {\n  border-left-color: #3c8dbc;\n}\n.direct-chat-warning .right > .direct-chat-text {\n  background: #f39c12;\n  border-color: #f39c12;\n  color: #ffffff;\n}\n.direct-chat-warning .right > .direct-chat-text:after,\n.direct-chat-warning .right > .direct-chat-text:before {\n  border-left-color: #f39c12;\n}\n.direct-chat-info .right > .direct-chat-text {\n  background: #00c0ef;\n  border-color: #00c0ef;\n  color: #ffffff;\n}\n.direct-chat-info .right > .direct-chat-text:after,\n.direct-chat-info .right > .direct-chat-text:before {\n  border-left-color: #00c0ef;\n}\n.direct-chat-success .right > .direct-chat-text {\n  background: #00a65a;\n  border-color: #00a65a;\n  color: #ffffff;\n}\n.direct-chat-success .right > .direct-chat-text:after,\n.direct-chat-success .right > .direct-chat-text:before {\n  border-left-color: #00a65a;\n}\n/*\n * Component: Users List\n * ---------------------\n */\n.users-list > li {\n  width: 25%;\n  float: left;\n  padding: 10px;\n  text-align: center;\n}\n.users-list > li img {\n  border-radius: 50%;\n  max-width: 100%;\n  height: auto;\n}\n.users-list > li > a:hover,\n.users-list > li > a:hover .users-list-name {\n  color: #999;\n}\n.users-list-name,\n.users-list-date {\n  display: block;\n}\n.users-list-name {\n  font-weight: 600;\n  color: #444;\n  overflow: hidden;\n  white-space: nowrap;\n  text-overflow: ellipsis;\n}\n.users-list-date {\n  color: #999;\n  font-size: 12px;\n}\n/*\n * Component: Carousel\n * -------------------\n */\n.carousel-control.left,\n.carousel-control.right {\n  background-image: none;\n}\n.carousel-control > .fa {\n  font-size: 40px;\n  position: absolute;\n  top: 50%;\n  z-index: 5;\n  display: inline-block;\n  margin-top: -20px;\n}\n/*\n * Component: modal\n * ----------------\n */\n.modal {\n  background: rgba(0, 0, 0, 0.3);\n}\n.modal-content {\n  border-radius: 0;\n  -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  border: 0;\n}\n@media (min-width: 768px) {\n  .modal-content {\n    -webkit-box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.125);\n  }\n}\n.modal-header {\n  border-bottom-color: #f4f4f4;\n}\n.modal-footer {\n  border-top-color: #f4f4f4;\n}\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  border-color: #307095;\n}\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  border-color: #c87f0a;\n}\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  border-color: #0097bc;\n}\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  border-color: #00733e;\n}\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  border-color: #c23321;\n}\n/*\n * Page: Mailbox\n * -------------\n */\n.mailbox-messages > .table {\n  margin: 0;\n}\n.mailbox-controls {\n  padding: 5px;\n}\n.mailbox-controls.with-border {\n  border-bottom: 1px solid #f4f4f4;\n}\n.mailbox-read-info {\n  border-bottom: 1px solid #f4f4f4;\n  padding: 10px;\n}\n.mailbox-read-info h3 {\n  font-size: 20px;\n  margin: 0;\n}\n.mailbox-read-info h5 {\n  margin: 0;\n  padding: 5px 0 0 0;\n}\n.mailbox-read-time {\n  color: #999;\n  font-size: 13px;\n}\n.mailbox-read-message {\n  padding: 10px;\n}\n.mailbox-attachments li {\n  float: left;\n  width: 200px;\n  border: 1px solid #eee;\n  margin-bottom: 10px;\n  margin-right: 10px;\n}\n.mailbox-attachment-name {\n  font-weight: bold;\n  color: #666;\n}\n.mailbox-attachment-icon,\n.mailbox-attachment-info,\n.mailbox-attachment-size {\n  display: block;\n}\n.mailbox-attachment-info {\n  padding: 10px;\n  background: #f4f4f4;\n}\n.mailbox-attachment-size {\n  color: #999;\n  font-size: 12px;\n}\n.mailbox-attachment-icon {\n  text-align: center;\n  font-size: 65px;\n  color: #666;\n  padding: 20px 10px;\n}\n.mailbox-attachment-icon.has-img {\n  padding: 0;\n}\n.mailbox-attachment-icon.has-img > img {\n  max-width: 100%;\n  height: auto;\n}\n/*\n * Page: Lock Screen\n * -----------------\n */\n/* ADD THIS CLASS TO THE <BODY> TAG */\n.lockscreen {\n  background: #d2d6de;\n}\n.lockscreen-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.lockscreen-logo a {\n  color: #444;\n}\n.lockscreen-wrapper {\n  max-width: 400px;\n  margin: 0 auto;\n  margin-top: 10%;\n}\n/* User name [optional] */\n.lockscreen .lockscreen-name {\n  text-align: center;\n  font-weight: 600;\n}\n/* Will contain the image and the sign in form */\n.lockscreen-item {\n  border-radius: 4px;\n  padding: 0;\n  background: #fff;\n  position: relative;\n  margin: 10px auto 30px auto;\n  width: 290px;\n}\n/* User image */\n.lockscreen-image {\n  border-radius: 50%;\n  position: absolute;\n  left: -10px;\n  top: -25px;\n  background: #fff;\n  padding: 5px;\n  z-index: 10;\n}\n.lockscreen-image > img {\n  border-radius: 50%;\n  width: 70px;\n  height: 70px;\n}\n/* Contains the password input and the login button */\n.lockscreen-credentials {\n  margin-left: 70px;\n}\n.lockscreen-credentials .form-control {\n  border: 0;\n}\n.lockscreen-credentials .btn {\n  background-color: #fff;\n  border: 0;\n  padding: 0 10px;\n}\n.lockscreen-footer {\n  margin-top: 10px;\n}\n/*\n * Page: Login & Register\n * ----------------------\n */\n.login-logo,\n.register-logo {\n  font-size: 35px;\n  text-align: center;\n  margin-bottom: 25px;\n  font-weight: 300;\n}\n.login-logo a,\n.register-logo a {\n  color: #444;\n}\n.login-page,\n.register-page {\n  background: #d2d6de;\n}\n.login-box,\n.register-box {\n  width: 360px;\n  margin: 7% auto;\n}\n@media (max-width: 768px) {\n  .login-box,\n  .register-box {\n    width: 90%;\n    margin-top: 20px;\n  }\n}\n.login-box-body,\n.register-box-body {\n  background: #fff;\n  padding: 20px;\n  border-top: 0;\n  color: #666;\n}\n.login-box-body .form-control-feedback,\n.register-box-body .form-control-feedback {\n  color: #777;\n}\n.login-box-msg,\n.register-box-msg {\n  margin: 0;\n  text-align: center;\n  padding: 0 20px 20px 20px;\n}\n.social-auth-links {\n  margin: 10px 0;\n}\n/*\n * Page: 400 and 500 error pages\n * ------------------------------\n */\n.error-page {\n  width: 600px;\n  margin: 20px auto 0 auto;\n}\n@media (max-width: 991px) {\n  .error-page {\n    width: 100%;\n  }\n}\n.error-page > .headline {\n  float: left;\n  font-size: 100px;\n  font-weight: 300;\n}\n@media (max-width: 991px) {\n  .error-page > .headline {\n    float: none;\n    text-align: center;\n  }\n}\n.error-page > .error-content {\n  margin-left: 190px;\n  display: block;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content {\n    margin-left: 0;\n  }\n}\n.error-page > .error-content > h3 {\n  font-weight: 300;\n  font-size: 25px;\n}\n@media (max-width: 991px) {\n  .error-page > .error-content > h3 {\n    text-align: center;\n  }\n}\n/*\n * Page: Invoice\n * -------------\n */\n.invoice {\n  position: relative;\n  background: #fff;\n  border: 1px solid #f4f4f4;\n  padding: 20px;\n  margin: 10px 25px;\n}\n.invoice-title {\n  margin-top: 0;\n}\n/*\n * Social Buttons for Bootstrap\n *\n * Copyright 2013-2015 Panayiotis Lipiridis\n * Licensed under the MIT License\n *\n * https://github.com/lipis/bootstrap-social\n */\n.btn-social {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n.btn-social > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social.btn-lg {\n  padding-left: 61px;\n}\n.btn-social.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social.btn-sm {\n  padding-left: 38px;\n}\n.btn-social.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social.btn-xs {\n  padding-left: 30px;\n}\n.btn-social.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon {\n  position: relative;\n  padding-left: 44px;\n  text-align: left;\n  white-space: nowrap;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  height: 34px;\n  width: 34px;\n  padding: 0;\n}\n.btn-social-icon > :first-child {\n  position: absolute;\n  left: 0;\n  top: 0;\n  bottom: 0;\n  width: 32px;\n  line-height: 34px;\n  font-size: 1.6em;\n  text-align: center;\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}\n.btn-social-icon.btn-lg {\n  padding-left: 61px;\n}\n.btn-social-icon.btn-lg > :first-child {\n  line-height: 45px;\n  width: 45px;\n  font-size: 1.8em;\n}\n.btn-social-icon.btn-sm {\n  padding-left: 38px;\n}\n.btn-social-icon.btn-sm > :first-child {\n  line-height: 28px;\n  width: 28px;\n  font-size: 1.4em;\n}\n.btn-social-icon.btn-xs {\n  padding-left: 30px;\n}\n.btn-social-icon.btn-xs > :first-child {\n  line-height: 20px;\n  width: 20px;\n  font-size: 1.2em;\n}\n.btn-social-icon > :first-child {\n  border: none;\n  text-align: center;\n  width: 100%;\n}\n.btn-social-icon.btn-lg {\n  height: 45px;\n  width: 45px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-sm {\n  height: 30px;\n  width: 30px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-social-icon.btn-xs {\n  height: 22px;\n  width: 22px;\n  padding-left: 0;\n  padding-right: 0;\n}\n.btn-adn {\n  color: #ffffff;\n  background-color: #d87a68;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:hover,\n.btn-adn:focus,\n.btn-adn.focus,\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  color: #ffffff;\n  background-color: #ce563f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-adn:active,\n.btn-adn.active,\n.open > .dropdown-toggle.btn-adn {\n  background-image: none;\n}\n.btn-adn .badge {\n  color: #d87a68;\n  background-color: #ffffff;\n}\n.btn-bitbucket {\n  color: #ffffff;\n  background-color: #205081;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:hover,\n.btn-bitbucket:focus,\n.btn-bitbucket.focus,\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  color: #ffffff;\n  background-color: #163758;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-bitbucket:active,\n.btn-bitbucket.active,\n.open > .dropdown-toggle.btn-bitbucket {\n  background-image: none;\n}\n.btn-bitbucket .badge {\n  color: #205081;\n  background-color: #ffffff;\n}\n.btn-dropbox {\n  color: #ffffff;\n  background-color: #1087dd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:hover,\n.btn-dropbox:focus,\n.btn-dropbox.focus,\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  color: #ffffff;\n  background-color: #0d6aad;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-dropbox:active,\n.btn-dropbox.active,\n.open > .dropdown-toggle.btn-dropbox {\n  background-image: none;\n}\n.btn-dropbox .badge {\n  color: #1087dd;\n  background-color: #ffffff;\n}\n.btn-facebook {\n  color: #ffffff;\n  background-color: #3b5998;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:hover,\n.btn-facebook:focus,\n.btn-facebook.focus,\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  color: #ffffff;\n  background-color: #2d4373;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-facebook:active,\n.btn-facebook.active,\n.open > .dropdown-toggle.btn-facebook {\n  background-image: none;\n}\n.btn-facebook .badge {\n  color: #3b5998;\n  background-color: #ffffff;\n}\n.btn-flickr {\n  color: #ffffff;\n  background-color: #ff0084;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:hover,\n.btn-flickr:focus,\n.btn-flickr.focus,\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  color: #ffffff;\n  background-color: #cc006a;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-flickr:active,\n.btn-flickr.active,\n.open > .dropdown-toggle.btn-flickr {\n  background-image: none;\n}\n.btn-flickr .badge {\n  color: #ff0084;\n  background-color: #ffffff;\n}\n.btn-foursquare {\n  color: #ffffff;\n  background-color: #f94877;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:hover,\n.btn-foursquare:focus,\n.btn-foursquare.focus,\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  color: #ffffff;\n  background-color: #f71752;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-foursquare:active,\n.btn-foursquare.active,\n.open > .dropdown-toggle.btn-foursquare {\n  background-image: none;\n}\n.btn-foursquare .badge {\n  color: #f94877;\n  background-color: #ffffff;\n}\n.btn-github {\n  color: #ffffff;\n  background-color: #444444;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:hover,\n.btn-github:focus,\n.btn-github.focus,\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  color: #ffffff;\n  background-color: #2b2b2b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-github:active,\n.btn-github.active,\n.open > .dropdown-toggle.btn-github {\n  background-image: none;\n}\n.btn-github .badge {\n  color: #444444;\n  background-color: #ffffff;\n}\n.btn-google {\n  color: #ffffff;\n  background-color: #dd4b39;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:hover,\n.btn-google:focus,\n.btn-google.focus,\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  color: #ffffff;\n  background-color: #c23321;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-google:active,\n.btn-google.active,\n.open > .dropdown-toggle.btn-google {\n  background-image: none;\n}\n.btn-google .badge {\n  color: #dd4b39;\n  background-color: #ffffff;\n}\n.btn-instagram {\n  color: #ffffff;\n  background-color: #3f729b;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:hover,\n.btn-instagram:focus,\n.btn-instagram.focus,\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  color: #ffffff;\n  background-color: #305777;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-instagram:active,\n.btn-instagram.active,\n.open > .dropdown-toggle.btn-instagram {\n  background-image: none;\n}\n.btn-instagram .badge {\n  color: #3f729b;\n  background-color: #ffffff;\n}\n.btn-linkedin {\n  color: #ffffff;\n  background-color: #007bb6;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:hover,\n.btn-linkedin:focus,\n.btn-linkedin.focus,\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  color: #ffffff;\n  background-color: #005983;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-linkedin:active,\n.btn-linkedin.active,\n.open > .dropdown-toggle.btn-linkedin {\n  background-image: none;\n}\n.btn-linkedin .badge {\n  color: #007bb6;\n  background-color: #ffffff;\n}\n.btn-microsoft {\n  color: #ffffff;\n  background-color: #2672ec;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:hover,\n.btn-microsoft:focus,\n.btn-microsoft.focus,\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  color: #ffffff;\n  background-color: #125acd;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-microsoft:active,\n.btn-microsoft.active,\n.open > .dropdown-toggle.btn-microsoft {\n  background-image: none;\n}\n.btn-microsoft .badge {\n  color: #2672ec;\n  background-color: #ffffff;\n}\n.btn-openid {\n  color: #ffffff;\n  background-color: #f7931e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:hover,\n.btn-openid:focus,\n.btn-openid.focus,\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  color: #ffffff;\n  background-color: #da7908;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-openid:active,\n.btn-openid.active,\n.open > .dropdown-toggle.btn-openid {\n  background-image: none;\n}\n.btn-openid .badge {\n  color: #f7931e;\n  background-color: #ffffff;\n}\n.btn-pinterest {\n  color: #ffffff;\n  background-color: #cb2027;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:hover,\n.btn-pinterest:focus,\n.btn-pinterest.focus,\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  color: #ffffff;\n  background-color: #9f191f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-pinterest:active,\n.btn-pinterest.active,\n.open > .dropdown-toggle.btn-pinterest {\n  background-image: none;\n}\n.btn-pinterest .badge {\n  color: #cb2027;\n  background-color: #ffffff;\n}\n.btn-reddit {\n  color: #000000;\n  background-color: #eff7ff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:hover,\n.btn-reddit:focus,\n.btn-reddit.focus,\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  color: #000000;\n  background-color: #bcddff;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-reddit:active,\n.btn-reddit.active,\n.open > .dropdown-toggle.btn-reddit {\n  background-image: none;\n}\n.btn-reddit .badge {\n  color: #eff7ff;\n  background-color: #000000;\n}\n.btn-soundcloud {\n  color: #ffffff;\n  background-color: #ff5500;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:hover,\n.btn-soundcloud:focus,\n.btn-soundcloud.focus,\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  color: #ffffff;\n  background-color: #cc4400;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-soundcloud:active,\n.btn-soundcloud.active,\n.open > .dropdown-toggle.btn-soundcloud {\n  background-image: none;\n}\n.btn-soundcloud .badge {\n  color: #ff5500;\n  background-color: #ffffff;\n}\n.btn-tumblr {\n  color: #ffffff;\n  background-color: #2c4762;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:hover,\n.btn-tumblr:focus,\n.btn-tumblr.focus,\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  color: #ffffff;\n  background-color: #1c2d3f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-tumblr:active,\n.btn-tumblr.active,\n.open > .dropdown-toggle.btn-tumblr {\n  background-image: none;\n}\n.btn-tumblr .badge {\n  color: #2c4762;\n  background-color: #ffffff;\n}\n.btn-twitter {\n  color: #ffffff;\n  background-color: #55acee;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:hover,\n.btn-twitter:focus,\n.btn-twitter.focus,\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  color: #ffffff;\n  background-color: #2795e9;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-twitter:active,\n.btn-twitter.active,\n.open > .dropdown-toggle.btn-twitter {\n  background-image: none;\n}\n.btn-twitter .badge {\n  color: #55acee;\n  background-color: #ffffff;\n}\n.btn-vimeo {\n  color: #ffffff;\n  background-color: #1ab7ea;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:hover,\n.btn-vimeo:focus,\n.btn-vimeo.focus,\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  color: #ffffff;\n  background-color: #1295bf;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vimeo:active,\n.btn-vimeo.active,\n.open > .dropdown-toggle.btn-vimeo {\n  background-image: none;\n}\n.btn-vimeo .badge {\n  color: #1ab7ea;\n  background-color: #ffffff;\n}\n.btn-vk {\n  color: #ffffff;\n  background-color: #587ea3;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:hover,\n.btn-vk:focus,\n.btn-vk.focus,\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  color: #ffffff;\n  background-color: #466482;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-vk:active,\n.btn-vk.active,\n.open > .dropdown-toggle.btn-vk {\n  background-image: none;\n}\n.btn-vk .badge {\n  color: #587ea3;\n  background-color: #ffffff;\n}\n.btn-yahoo {\n  color: #ffffff;\n  background-color: #720e9e;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:hover,\n.btn-yahoo:focus,\n.btn-yahoo.focus,\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  color: #ffffff;\n  background-color: #500a6f;\n  border-color: rgba(0, 0, 0, 0.2);\n}\n.btn-yahoo:active,\n.btn-yahoo.active,\n.open > .dropdown-toggle.btn-yahoo {\n  background-image: none;\n}\n.btn-yahoo .badge {\n  color: #720e9e;\n  background-color: #ffffff;\n}\n/*\n * Plugin: Full Calendar\n * ---------------------\n */\n.fc-button {\n  background: #f4f4f4;\n  background-image: none;\n  color: #444;\n  border-color: #ddd;\n  border-bottom-color: #ddd;\n}\n.fc-button:hover,\n.fc-button:active,\n.fc-button.hover {\n  background-color: #e9e9e9;\n}\n.fc-header-title h2 {\n  font-size: 15px;\n  line-height: 1.6em;\n  color: #666;\n  margin-left: 10px;\n}\n.fc-header-right {\n  padding-right: 10px;\n}\n.fc-header-left {\n  padding-left: 10px;\n}\n.fc-widget-header {\n  background: #fafafa;\n}\n.fc-grid {\n  width: 100%;\n  border: 0;\n}\n.fc-widget-header:first-of-type,\n.fc-widget-content:first-of-type {\n  border-left: 0;\n  border-right: 0;\n}\n.fc-widget-header:last-of-type,\n.fc-widget-content:last-of-type {\n  border-right: 0;\n}\n.fc-toolbar {\n  padding: 10px;\n  margin: 0;\n}\n.fc-day-number {\n  font-size: 20px;\n  font-weight: 300;\n  padding-right: 10px;\n}\n.fc-color-picker {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.fc-color-picker > li {\n  float: left;\n  font-size: 30px;\n  margin-right: 5px;\n  line-height: 30px;\n}\n.fc-color-picker > li .fa {\n  -webkit-transition: -webkit-transform linear 0.3s;\n  -moz-transition: -moz-transform linear 0.3s;\n  -o-transition: -o-transform linear 0.3s;\n  transition: transform linear 0.3s;\n}\n.fc-color-picker > li .fa:hover {\n  -webkit-transform: rotate(30deg);\n  -ms-transform: rotate(30deg);\n  -o-transform: rotate(30deg);\n  transform: rotate(30deg);\n}\n#add-new-event {\n  -webkit-transition: all linear 0.3s;\n  -o-transition: all linear 0.3s;\n  transition: all linear 0.3s;\n}\n.external-event {\n  padding: 5px 10px;\n  font-weight: bold;\n  margin-bottom: 4px;\n  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  text-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n  border-radius: 3px;\n  cursor: move;\n}\n.external-event:hover {\n  box-shadow: inset 0 0 90px rgba(0, 0, 0, 0.2);\n}\n/*\n * Plugin: Select2\n * ---------------\n */\n.select2-container--default.select2-container--focus,\n.select2-selection.select2-container--focus,\n.select2-container--default:focus,\n.select2-selection:focus,\n.select2-container--default:active,\n.select2-selection:active {\n  outline: none;\n}\n.select2-container--default .select2-selection--single,\n.select2-selection .select2-selection--single {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  padding: 6px 12px;\n  height: 34px;\n}\n.select2-container--default.select2-container--open {\n  border-color: #3c8dbc;\n}\n.select2-dropdown {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n}\n.select2-container--default .select2-results__option--highlighted[aria-selected] {\n  background-color: #3c8dbc;\n  color: white;\n}\n.select2-results__option {\n  padding: 6px 12px;\n  user-select: none;\n  -webkit-user-select: none;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-left: 0;\n  padding-right: 0;\n  height: auto;\n  margin-top: -4px;\n}\n.select2-container[dir=\"rtl\"] .select2-selection--single .select2-selection__rendered {\n  padding-right: 6px;\n  padding-left: 20px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow {\n  height: 28px;\n  right: 3px;\n}\n.select2-container--default .select2-selection--single .select2-selection__arrow b {\n  margin-top: 0;\n}\n.select2-dropdown .select2-search__field,\n.select2-search--inline .select2-search__field {\n  border: 1px solid #d2d6de;\n}\n.select2-dropdown .select2-search__field:focus,\n.select2-search--inline .select2-search__field:focus {\n  outline: none;\n  border: 1px solid #3c8dbc;\n}\n.select2-container--default .select2-results__option[aria-disabled=true] {\n  color: #999;\n}\n.select2-container--default .select2-results__option[aria-selected=true] {\n  background-color: #ddd;\n}\n.select2-container--default .select2-results__option[aria-selected=true],\n.select2-container--default .select2-results__option[aria-selected=true]:hover {\n  color: #444;\n}\n.select2-container--default .select2-selection--multiple {\n  border: 1px solid #d2d6de;\n  border-radius: 0;\n  height: 34px;\n}\n.select2-container--default .select2-selection--multiple:focus {\n  border-color: #3c8dbc;\n}\n.select2-container--default.select2-container--focus .select2-selection--multiple {\n  border-color: #d2d6de;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice {\n  background-color: #3c8dbc;\n  border-color: #367fa9;\n  padding: 1px 10px;\n  color: #fff;\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove {\n  margin-right: 5px;\n  color: rgba(255, 255, 255, 0.7);\n}\n.select2-container--default .select2-selection--multiple .select2-selection__choice__remove:hover {\n  color: #fff;\n}\n.select2-container .select2-selection--single .select2-selection__rendered {\n  padding-right: 10px;\n}\n/*\n * General: Miscellaneous\n * ----------------------\n */\n.pad {\n  padding: 10px;\n}\n.margin {\n  margin: 10px;\n}\n.margin-bottom {\n  margin-bottom: 20px;\n}\n.inline {\n  display: inline;\n}\n.description-block {\n  display: block;\n  margin: 10px 0;\n  text-align: center;\n}\n.description-block.margin-bottom {\n  margin-bottom: 25px;\n}\n.description-block > .description-header {\n  margin: 0;\n  padding: 0;\n  font-weight: 600;\n  font-size: 16px;\n}\n.description-block > .description-text {\n  text-transform: uppercase;\n}\n.bg-red,\n.bg-yellow,\n.bg-aqua,\n.bg-blue,\n.bg-light-blue,\n.bg-green,\n.bg-navy,\n.bg-teal,\n.bg-olive,\n.bg-lime,\n.bg-orange,\n.bg-fuchsia,\n.bg-purple,\n.bg-maroon,\n.bg-black,\n.bg-red-active,\n.bg-yellow-active,\n.bg-aqua-active,\n.bg-blue-active,\n.bg-light-blue-active,\n.bg-green-active,\n.bg-navy-active,\n.bg-teal-active,\n.bg-olive-active,\n.bg-lime-active,\n.bg-orange-active,\n.bg-fuchsia-active,\n.bg-purple-active,\n.bg-maroon-active,\n.bg-black-active,\n.callout.callout-danger,\n.callout.callout-warning,\n.callout.callout-info,\n.callout.callout-success,\n.alert-success,\n.alert-danger,\n.alert-error,\n.alert-warning,\n.alert-info,\n.label-danger,\n.label-info,\n.label-warning,\n.label-primary,\n.label-success,\n.modal-primary .modal-body,\n.modal-primary .modal-header,\n.modal-primary .modal-footer,\n.modal-warning .modal-body,\n.modal-warning .modal-header,\n.modal-warning .modal-footer,\n.modal-info .modal-body,\n.modal-info .modal-header,\n.modal-info .modal-footer,\n.modal-success .modal-body,\n.modal-success .modal-header,\n.modal-success .modal-footer,\n.modal-danger .modal-body,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  color: #fff !important;\n}\n.bg-gray {\n  color: #000;\n  background-color: #d2d6de !important;\n}\n.bg-black {\n  background-color: #111111 !important;\n}\n.bg-red,\n.callout.callout-danger,\n.alert-danger,\n.alert-error,\n.label-danger,\n.modal-danger .modal-body {\n  background-color: #dd4b39 !important;\n}\n.bg-yellow,\n.callout.callout-warning,\n.alert-warning,\n.label-warning,\n.modal-warning .modal-body {\n  background-color: #f39c12 !important;\n}\n.bg-aqua,\n.callout.callout-info,\n.alert-info,\n.label-info,\n.modal-info .modal-body {\n  background-color: #00c0ef !important;\n}\n.bg-blue {\n  background-color: #0073b7 !important;\n}\n.bg-light-blue,\n.label-primary,\n.modal-primary .modal-body {\n  background-color: #3c8dbc !important;\n}\n.bg-green,\n.callout.callout-success,\n.alert-success,\n.label-success,\n.modal-success .modal-body {\n  background-color: #00a65a !important;\n}\n.bg-navy {\n  background-color: #001f3f !important;\n}\n.bg-teal {\n  background-color: #39cccc !important;\n}\n.bg-olive {\n  background-color: #3d9970 !important;\n}\n.bg-lime {\n  background-color: #01ff70 !important;\n}\n.bg-orange {\n  background-color: #ff851b !important;\n}\n.bg-fuchsia {\n  background-color: #f012be !important;\n}\n.bg-purple {\n  background-color: #605ca8 !important;\n}\n.bg-maroon {\n  background-color: #d81b60 !important;\n}\n.bg-gray-active {\n  color: #000;\n  background-color: #b5bbc8 !important;\n}\n.bg-black-active {\n  background-color: #000000 !important;\n}\n.bg-red-active,\n.modal-danger .modal-header,\n.modal-danger .modal-footer {\n  background-color: #d33724 !important;\n}\n.bg-yellow-active,\n.modal-warning .modal-header,\n.modal-warning .modal-footer {\n  background-color: #db8b0b !important;\n}\n.bg-aqua-active,\n.modal-info .modal-header,\n.modal-info .modal-footer {\n  background-color: #00a7d0 !important;\n}\n.bg-blue-active {\n  background-color: #005384 !important;\n}\n.bg-light-blue-active,\n.modal-primary .modal-header,\n.modal-primary .modal-footer {\n  background-color: #357ca5 !important;\n}\n.bg-green-active,\n.modal-success .modal-header,\n.modal-success .modal-footer {\n  background-color: #008d4c !important;\n}\n.bg-navy-active {\n  background-color: #001a35 !important;\n}\n.bg-teal-active {\n  background-color: #30bbbb !important;\n}\n.bg-olive-active {\n  background-color: #368763 !important;\n}\n.bg-lime-active {\n  background-color: #00e765 !important;\n}\n.bg-orange-active {\n  background-color: #ff7701 !important;\n}\n.bg-fuchsia-active {\n  background-color: #db0ead !important;\n}\n.bg-purple-active {\n  background-color: #555299 !important;\n}\n.bg-maroon-active {\n  background-color: #ca195a !important;\n}\n[class^=\"bg-\"].disabled {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.text-red {\n  color: #dd4b39 !important;\n}\n.text-yellow {\n  color: #f39c12 !important;\n}\n.text-aqua {\n  color: #00c0ef !important;\n}\n.text-blue {\n  color: #0073b7 !important;\n}\n.text-black {\n  color: #111111 !important;\n}\n.text-light-blue {\n  color: #3c8dbc !important;\n}\n.text-green {\n  color: #00a65a !important;\n}\n.text-gray {\n  color: #d2d6de !important;\n}\n.text-navy {\n  color: #001f3f !important;\n}\n.text-teal {\n  color: #39cccc !important;\n}\n.text-olive {\n  color: #3d9970 !important;\n}\n.text-lime {\n  color: #01ff70 !important;\n}\n.text-orange {\n  color: #ff851b !important;\n}\n.text-fuchsia {\n  color: #f012be !important;\n}\n.text-purple {\n  color: #605ca8 !important;\n}\n.text-maroon {\n  color: #d81b60 !important;\n}\n.hide {\n  display: none !important;\n}\n.no-border {\n  border: 0 !important;\n}\n.no-padding {\n  padding: 0 !important;\n}\n.no-margin {\n  margin: 0 !important;\n}\n.no-shadow {\n  box-shadow: none!important;\n}\n.list-unstyled,\n.chart-legend,\n.contacts-list,\n.users-list,\n.mailbox-attachments {\n  list-style: none;\n  margin: 0;\n  padding: 0;\n}\n.flat {\n  border-radius: 0 !important;\n}\n.text-bold,\n.text-bold.table td,\n.text-bold.table th {\n  font-weight: 700;\n}\n.jqstooltip {\n  padding: 5px!important;\n  width: auto!important;\n  height: auto!important;\n}\n.bg-teal-gradient {\n  background: #39cccc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #39cccc), color-stop(1, #7adddd)) !important;\n  background: -ms-linear-gradient(bottom, #39cccc, #7adddd) !important;\n  background: -moz-linear-gradient(center bottom, #39cccc 0%, #7adddd 100%) !important;\n  background: -o-linear-gradient(#7adddd, #39cccc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#7adddd', endColorstr='#39cccc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-light-blue-gradient {\n  background: #3c8dbc !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #3c8dbc), color-stop(1, #67a8ce)) !important;\n  background: -ms-linear-gradient(bottom, #3c8dbc, #67a8ce) !important;\n  background: -moz-linear-gradient(center bottom, #3c8dbc 0%, #67a8ce 100%) !important;\n  background: -o-linear-gradient(#67a8ce, #3c8dbc) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#67a8ce', endColorstr='#3c8dbc', GradientType=0) !important;\n  color: #fff;\n}\n.bg-blue-gradient {\n  background: #0073b7 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #0073b7), color-stop(1, #0089db)) !important;\n  background: -ms-linear-gradient(bottom, #0073b7, #0089db) !important;\n  background: -moz-linear-gradient(center bottom, #0073b7 0%, #0089db 100%) !important;\n  background: -o-linear-gradient(#0089db, #0073b7) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0089db', endColorstr='#0073b7', GradientType=0) !important;\n  color: #fff;\n}\n.bg-aqua-gradient {\n  background: #00c0ef !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00c0ef), color-stop(1, #14d1ff)) !important;\n  background: -ms-linear-gradient(bottom, #00c0ef, #14d1ff) !important;\n  background: -moz-linear-gradient(center bottom, #00c0ef 0%, #14d1ff 100%) !important;\n  background: -o-linear-gradient(#14d1ff, #00c0ef) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#14d1ff', endColorstr='#00c0ef', GradientType=0) !important;\n  color: #fff;\n}\n.bg-yellow-gradient {\n  background: #f39c12 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #f39c12), color-stop(1, #f7bc60)) !important;\n  background: -ms-linear-gradient(bottom, #f39c12, #f7bc60) !important;\n  background: -moz-linear-gradient(center bottom, #f39c12 0%, #f7bc60 100%) !important;\n  background: -o-linear-gradient(#f7bc60, #f39c12) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f7bc60', endColorstr='#f39c12', GradientType=0) !important;\n  color: #fff;\n}\n.bg-purple-gradient {\n  background: #605ca8 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #605ca8), color-stop(1, #9491c4)) !important;\n  background: -ms-linear-gradient(bottom, #605ca8, #9491c4) !important;\n  background: -moz-linear-gradient(center bottom, #605ca8 0%, #9491c4 100%) !important;\n  background: -o-linear-gradient(#9491c4, #605ca8) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#9491c4', endColorstr='#605ca8', GradientType=0) !important;\n  color: #fff;\n}\n.bg-green-gradient {\n  background: #00a65a !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #00a65a), color-stop(1, #00ca6d)) !important;\n  background: -ms-linear-gradient(bottom, #00a65a, #00ca6d) !important;\n  background: -moz-linear-gradient(center bottom, #00a65a 0%, #00ca6d 100%) !important;\n  background: -o-linear-gradient(#00ca6d, #00a65a) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#00ca6d', endColorstr='#00a65a', GradientType=0) !important;\n  color: #fff;\n}\n.bg-red-gradient {\n  background: #dd4b39 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #dd4b39), color-stop(1, #e47365)) !important;\n  background: -ms-linear-gradient(bottom, #dd4b39, #e47365) !important;\n  background: -moz-linear-gradient(center bottom, #dd4b39 0%, #e47365 100%) !important;\n  background: -o-linear-gradient(#e47365, #dd4b39) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e47365', endColorstr='#dd4b39', GradientType=0) !important;\n  color: #fff;\n}\n.bg-black-gradient {\n  background: #111111 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #111111), color-stop(1, #2b2b2b)) !important;\n  background: -ms-linear-gradient(bottom, #111111, #2b2b2b) !important;\n  background: -moz-linear-gradient(center bottom, #111111 0%, #2b2b2b 100%) !important;\n  background: -o-linear-gradient(#2b2b2b, #111111) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#2b2b2b', endColorstr='#111111', GradientType=0) !important;\n  color: #fff;\n}\n.bg-maroon-gradient {\n  background: #d81b60 !important;\n  background: -webkit-gradient(linear, left bottom, left top, color-stop(0, #d81b60), color-stop(1, #e73f7c)) !important;\n  background: -ms-linear-gradient(bottom, #d81b60, #e73f7c) !important;\n  background: -moz-linear-gradient(center bottom, #d81b60 0%, #e73f7c 100%) !important;\n  background: -o-linear-gradient(#e73f7c, #d81b60) !important;\n  filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#e73f7c', endColorstr='#d81b60', GradientType=0) !important;\n  color: #fff;\n}\n.connectedSortable {\n  min-height: 100px;\n}\n.ui-helper-hidden-accessible {\n  border: 0;\n  clip: rect(0 0 0 0);\n  height: 1px;\n  margin: -1px;\n  overflow: hidden;\n  padding: 0;\n  position: absolute;\n  width: 1px;\n}\n.sort-highlight {\n  background: #f4f4f4;\n  border: 1px dashed #ddd;\n  margin-bottom: 10px;\n}\n.full-opacity-hover {\n  opacity: 0.65;\n  filter: alpha(opacity=65);\n}\n.full-opacity-hover:hover {\n  opacity: 1;\n  filter: alpha(opacity=100);\n}\n.chart {\n  position: relative;\n  overflow: hidden;\n  width: 100%;\n}\n.chart svg,\n.chart canvas {\n  width: 100%!important;\n}\n/*\n * Misc: print\n * -----------\n */\n@media print {\n  .no-print,\n  .main-sidebar,\n  .left-side,\n  .main-header,\n  .content-header {\n    display: none!important;\n  }\n  .content-wrapper,\n  .right-side,\n  .main-footer {\n    margin-left: 0!important;\n    min-height: 0!important;\n    -webkit-transform: translate(0, 0) !important;\n    -ms-transform: translate(0, 0) !important;\n    -o-transform: translate(0, 0) !important;\n    transform: translate(0, 0) !important;\n  }\n  .fixed .content-wrapper,\n  .fixed .right-side {\n    padding-top: 0!important;\n  }\n  .invoice {\n    width: 100%;\n    border: 0;\n    margin: 0;\n    padding: 0;\n  }\n  .invoice-col {\n    float: left;\n    width: 33.3333333%;\n  }\n  .table-responsive {\n    overflow: auto;\n  }\n  .table-responsive > .table tr th,\n  .table-responsive > .table tr td {\n    white-space: normal!important;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/_all-skins.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #367fa9;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #357ca5;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #3c8dbc;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-blue .treeview-menu > li.active > a,\n.skin-blue .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue-light .main-header .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover {\n  background-color: #3b8ab8;\n}\n.skin-blue-light .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .content-wrapper,\n.skin-blue-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #3c8dbc;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .treeview-menu > li.active > a,\n.skin-blue-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar {\n  background-color: #ffffff;\n}\n.skin-black .main-header > .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black .main-header > .navbar .nav > li > a:hover,\n.skin-black .main-header > .navbar .nav > li > a:active,\n.skin-black .main-header > .navbar .nav > li > a:focus,\n.skin-black .main-header > .navbar .nav .open > a,\n.skin-black .main-header > .navbar .nav .open > a:hover,\n.skin-black .main-header > .navbar .nav .open > a:focus {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black .main-header > .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black .main-header > .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black .main-header > .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black .main-header > .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black .wrapper,\n.skin-black .main-sidebar,\n.skin-black .left-side {\n  background-color: #222d32;\n}\n.skin-black .user-panel > .info,\n.skin-black .user-panel > .info > a {\n  color: #fff;\n}\n.skin-black .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-black .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-black .sidebar-menu > li:hover > a,\n.skin-black .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #ffffff;\n}\n.skin-black .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-black .sidebar a {\n  color: #b8c7ce;\n}\n.skin-black .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-black .treeview-menu > li.active > a,\n.skin-black .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-black .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-black .sidebar-form input[type=\"text\"],\n.skin-black .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-black .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus,\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black-light .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black-light .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black-light .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar {\n  background-color: #ffffff;\n}\n.skin-black-light .main-header > .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black-light .main-header > .navbar .nav > li > a:hover,\n.skin-black-light .main-header > .navbar .nav > li > a:active,\n.skin-black-light .main-header > .navbar .nav > li > a:focus,\n.skin-black-light .main-header > .navbar .nav .open > a,\n.skin-black-light .main-header > .navbar .nav .open > a:hover,\n.skin-black-light .main-header > .navbar .nav .open > a:focus {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black-light .main-header > .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black-light .main-header > .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black-light .main-header > .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black-light .main-header > .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black-light .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black-light .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black-light .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black-light .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black-light .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black-light .wrapper,\n.skin-black-light .main-sidebar,\n.skin-black-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-black-light .content-wrapper,\n.skin-black-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-black-light .user-panel > .info,\n.skin-black-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-black-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-black-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-black-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li:hover > a,\n.skin-black-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar-menu > li.active {\n  border-left-color: #ffffff;\n}\n.skin-black-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar a {\n  color: #444444;\n}\n.skin-black-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-black-light .treeview-menu > li.active > a,\n.skin-black-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-black-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"],\n.skin-black-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-black-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus,\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .nav > li > a:hover,\n.skin-green .main-header .navbar .nav > li > a:active,\n.skin-green .main-header .navbar .nav > li > a:focus,\n.skin-green .main-header .navbar .nav .open > a,\n.skin-green .main-header .navbar .nav .open > a:hover,\n.skin-green .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green .main-header .logo {\n  background-color: #008d4c;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green .main-header .logo:hover {\n  background-color: #008749;\n}\n.skin-green .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green .content-header {\n  background: transparent;\n}\n.skin-green .wrapper,\n.skin-green .main-sidebar,\n.skin-green .left-side {\n  background-color: #222d32;\n}\n.skin-green .user-panel > .info,\n.skin-green .user-panel > .info > a {\n  color: #fff;\n}\n.skin-green .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-green .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-green .sidebar-menu > li:hover > a,\n.skin-green .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #00a65a;\n}\n.skin-green .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-green .sidebar a {\n  color: #b8c7ce;\n}\n.skin-green .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-green .treeview-menu > li.active > a,\n.skin-green .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-green .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-green .sidebar-form input[type=\"text\"],\n.skin-green .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-green .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus,\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Green\n * -----------\n */\n.skin-green-light .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .nav > li > a:hover,\n.skin-green-light .main-header .navbar .nav > li > a:active,\n.skin-green-light .main-header .navbar .nav > li > a:focus,\n.skin-green-light .main-header .navbar .nav .open > a,\n.skin-green-light .main-header .navbar .nav .open > a:hover,\n.skin-green-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green-light .main-header .logo {\n  background-color: #00a65a;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green-light .main-header .logo:hover {\n  background-color: #00a157;\n}\n.skin-green-light .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green-light .content-header {\n  background: transparent;\n}\n.skin-green-light .wrapper,\n.skin-green-light .main-sidebar,\n.skin-green-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-green-light .content-wrapper,\n.skin-green-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-green-light .user-panel > .info,\n.skin-green-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-green-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-green-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-green-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li:hover > a,\n.skin-green-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar-menu > li.active {\n  border-left-color: #00a65a;\n}\n.skin-green-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar a {\n  color: #444444;\n}\n.skin-green-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-green-light .treeview-menu > li.active > a,\n.skin-green-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-green-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"],\n.skin-green-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-green-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus,\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .nav > li > a:hover,\n.skin-red .main-header .navbar .nav > li > a:active,\n.skin-red .main-header .navbar .nav > li > a:focus,\n.skin-red .main-header .navbar .nav .open > a,\n.skin-red .main-header .navbar .nav .open > a:hover,\n.skin-red .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red .main-header .logo {\n  background-color: #d73925;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red .main-header .logo:hover {\n  background-color: #d33724;\n}\n.skin-red .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red .content-header {\n  background: transparent;\n}\n.skin-red .wrapper,\n.skin-red .main-sidebar,\n.skin-red .left-side {\n  background-color: #222d32;\n}\n.skin-red .user-panel > .info,\n.skin-red .user-panel > .info > a {\n  color: #fff;\n}\n.skin-red .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-red .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-red .sidebar-menu > li:hover > a,\n.skin-red .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #dd4b39;\n}\n.skin-red .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-red .sidebar a {\n  color: #b8c7ce;\n}\n.skin-red .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-red .treeview-menu > li.active > a,\n.skin-red .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-red .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-red .sidebar-form input[type=\"text\"],\n.skin-red .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-red .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus,\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Red\n * ---------\n */\n.skin-red-light .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .nav > li > a:hover,\n.skin-red-light .main-header .navbar .nav > li > a:active,\n.skin-red-light .main-header .navbar .nav > li > a:focus,\n.skin-red-light .main-header .navbar .nav .open > a,\n.skin-red-light .main-header .navbar .nav .open > a:hover,\n.skin-red-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red-light .main-header .logo {\n  background-color: #dd4b39;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red-light .main-header .logo:hover {\n  background-color: #dc4735;\n}\n.skin-red-light .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red-light .content-header {\n  background: transparent;\n}\n.skin-red-light .wrapper,\n.skin-red-light .main-sidebar,\n.skin-red-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-red-light .content-wrapper,\n.skin-red-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-red-light .user-panel > .info,\n.skin-red-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-red-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-red-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-red-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li:hover > a,\n.skin-red-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar-menu > li.active {\n  border-left-color: #dd4b39;\n}\n.skin-red-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar a {\n  color: #444444;\n}\n.skin-red-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-red-light .treeview-menu > li.active > a,\n.skin-red-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-red-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"],\n.skin-red-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-red-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus,\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-yellow .treeview-menu > li.active > a,\n.skin-yellow .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .content-wrapper,\n.skin-yellow-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .treeview-menu > li.active > a,\n.skin-yellow-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .nav > li > a:hover,\n.skin-purple .main-header .navbar .nav > li > a:active,\n.skin-purple .main-header .navbar .nav > li > a:focus,\n.skin-purple .main-header .navbar .nav .open > a,\n.skin-purple .main-header .navbar .nav .open > a:hover,\n.skin-purple .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple .main-header .logo {\n  background-color: #555299;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple .main-header .logo:hover {\n  background-color: #545096;\n}\n.skin-purple .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple .content-header {\n  background: transparent;\n}\n.skin-purple .wrapper,\n.skin-purple .main-sidebar,\n.skin-purple .left-side {\n  background-color: #222d32;\n}\n.skin-purple .user-panel > .info,\n.skin-purple .user-panel > .info > a {\n  color: #fff;\n}\n.skin-purple .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-purple .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-purple .sidebar-menu > li:hover > a,\n.skin-purple .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #605ca8;\n}\n.skin-purple .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-purple .sidebar a {\n  color: #b8c7ce;\n}\n.skin-purple .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-purple .treeview-menu > li.active > a,\n.skin-purple .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-purple .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-purple .sidebar-form input[type=\"text\"],\n.skin-purple .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-purple .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus,\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n/*\n * Skin: Purple\n * ------------\n */\n.skin-purple-light .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .nav > li > a:hover,\n.skin-purple-light .main-header .navbar .nav > li > a:active,\n.skin-purple-light .main-header .navbar .nav > li > a:focus,\n.skin-purple-light .main-header .navbar .nav .open > a,\n.skin-purple-light .main-header .navbar .nav .open > a:hover,\n.skin-purple-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple-light .main-header .logo {\n  background-color: #605ca8;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple-light .main-header .logo:hover {\n  background-color: #5d59a6;\n}\n.skin-purple-light .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple-light .content-header {\n  background: transparent;\n}\n.skin-purple-light .wrapper,\n.skin-purple-light .main-sidebar,\n.skin-purple-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-purple-light .content-wrapper,\n.skin-purple-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-purple-light .user-panel > .info,\n.skin-purple-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-purple-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-purple-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-purple-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li:hover > a,\n.skin-purple-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar-menu > li.active {\n  border-left-color: #605ca8;\n}\n.skin-purple-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar a {\n  color: #444444;\n}\n.skin-purple-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-purple-light .treeview-menu > li.active > a,\n.skin-purple-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-purple-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"],\n.skin-purple-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus,\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-black-light.css",
    "content": "/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black-light .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black-light .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black-light .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar {\n  background-color: #ffffff;\n}\n.skin-black-light .main-header > .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black-light .main-header > .navbar .nav > li > a:hover,\n.skin-black-light .main-header > .navbar .nav > li > a:active,\n.skin-black-light .main-header > .navbar .nav > li > a:focus,\n.skin-black-light .main-header > .navbar .nav .open > a,\n.skin-black-light .main-header > .navbar .nav .open > a:hover,\n.skin-black-light .main-header > .navbar .nav .open > a:focus {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black-light .main-header > .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black-light .main-header > .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black-light .main-header > .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black-light .main-header > .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black-light .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black-light .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black-light .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black-light .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black-light .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black-light .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black-light .wrapper,\n.skin-black-light .main-sidebar,\n.skin-black-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-black-light .content-wrapper,\n.skin-black-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-black-light .user-panel > .info,\n.skin-black-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-black-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-black-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-black-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li:hover > a,\n.skin-black-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar-menu > li.active {\n  border-left-color: #ffffff;\n}\n.skin-black-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-black-light .sidebar a {\n  color: #444444;\n}\n.skin-black-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-black-light .treeview-menu > li.active > a,\n.skin-black-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-black-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-black-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"],\n.skin-black-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-black-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus,\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-black-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-black.css",
    "content": "/*\n * Skin: Black\n * -----------\n */\n/* skin-black navbar */\n.skin-black .main-header {\n  -webkit-box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 1px 1px rgba(0, 0, 0, 0.05);\n}\n.skin-black .main-header .navbar-toggle {\n  color: #333;\n}\n.skin-black .main-header .navbar-brand {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar {\n  background-color: #ffffff;\n}\n.skin-black .main-header > .navbar .nav > li > a {\n  color: #333333;\n}\n.skin-black .main-header > .navbar .nav > li > a:hover,\n.skin-black .main-header > .navbar .nav > li > a:active,\n.skin-black .main-header > .navbar .nav > li > a:focus,\n.skin-black .main-header > .navbar .nav .open > a,\n.skin-black .main-header > .navbar .nav .open > a:hover,\n.skin-black .main-header > .navbar .nav .open > a:focus {\n  background: #ffffff;\n  color: #999999;\n}\n.skin-black .main-header > .navbar .sidebar-toggle {\n  color: #333333;\n}\n.skin-black .main-header > .navbar .sidebar-toggle:hover {\n  color: #999999;\n  background: #ffffff;\n}\n.skin-black .main-header > .navbar > .sidebar-toggle {\n  color: #333;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar .navbar-nav > li > a {\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .navbar .navbar-custom-menu .navbar-nav > li > a,\n.skin-black .main-header > .navbar .navbar-right > li > a {\n  border-left: 1px solid #eee;\n  border-right-width: 0;\n}\n.skin-black .main-header > .logo {\n  background-color: #ffffff;\n  color: #333333;\n  border-bottom: 0 solid transparent;\n  border-right: 1px solid #eee;\n}\n.skin-black .main-header > .logo:hover {\n  background-color: #fcfcfc;\n}\n@media (max-width: 767px) {\n  .skin-black .main-header > .logo {\n    background-color: #222222;\n    color: #ffffff;\n    border-bottom: 0 solid transparent;\n    border-right: none;\n  }\n  .skin-black .main-header > .logo:hover {\n    background-color: #1f1f1f;\n  }\n}\n.skin-black .main-header li.user-header {\n  background-color: #222;\n}\n.skin-black .content-header {\n  background: transparent;\n  box-shadow: none;\n}\n.skin-black .wrapper,\n.skin-black .main-sidebar,\n.skin-black .left-side {\n  background-color: #222d32;\n}\n.skin-black .user-panel > .info,\n.skin-black .user-panel > .info > a {\n  color: #fff;\n}\n.skin-black .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-black .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-black .sidebar-menu > li:hover > a,\n.skin-black .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #ffffff;\n}\n.skin-black .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-black .sidebar a {\n  color: #b8c7ce;\n}\n.skin-black .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-black .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-black .treeview-menu > li.active > a,\n.skin-black .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-black .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-black .sidebar-form input[type=\"text\"],\n.skin-black .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-black .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus,\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-black .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-black .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-blue-light.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue-light .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .nav > li > a:hover,\n.skin-blue-light .main-header .navbar .nav > li > a:active,\n.skin-blue-light .main-header .navbar .nav > li > a:focus,\n.skin-blue-light .main-header .navbar .nav .open > a,\n.skin-blue-light .main-header .navbar .nav .open > a:hover,\n.skin-blue-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue-light .main-header .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue-light .main-header .logo:hover {\n  background-color: #3b8ab8;\n}\n.skin-blue-light .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue-light .content-header {\n  background: transparent;\n}\n.skin-blue-light .wrapper,\n.skin-blue-light .main-sidebar,\n.skin-blue-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-blue-light .content-wrapper,\n.skin-blue-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-blue-light .user-panel > .info,\n.skin-blue-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-blue-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-blue-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-blue-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li:hover > a,\n.skin-blue-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar-menu > li.active {\n  border-left-color: #3c8dbc;\n}\n.skin-blue-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-blue-light .sidebar a {\n  color: #444444;\n}\n.skin-blue-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-blue-light .treeview-menu > li.active > a,\n.skin-blue-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-blue-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-blue-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"],\n.skin-blue-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus,\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-blue-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n.skin-blue-light .main-footer {\n  border-top-color: #d2d6de;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-blue.css",
    "content": "/*\n * Skin: Blue\n * ----------\n */\n.skin-blue .main-header .navbar {\n  background-color: #3c8dbc;\n}\n.skin-blue .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .nav > li > a:hover,\n.skin-blue .main-header .navbar .nav > li > a:active,\n.skin-blue .main-header .navbar .nav > li > a:focus,\n.skin-blue .main-header .navbar .nav .open > a,\n.skin-blue .main-header .navbar .nav .open > a:hover,\n.skin-blue .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-blue .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-blue .main-header .navbar .sidebar-toggle:hover {\n  background-color: #367fa9;\n}\n@media (max-width: 767px) {\n  .skin-blue .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-blue .main-header .navbar .dropdown-menu li a:hover {\n    background: #367fa9;\n  }\n}\n.skin-blue .main-header .logo {\n  background-color: #367fa9;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue .main-header .logo:hover {\n  background-color: #357ca5;\n}\n.skin-blue .main-header li.user-header {\n  background-color: #3c8dbc;\n}\n.skin-blue .content-header {\n  background: transparent;\n}\n.skin-blue .wrapper,\n.skin-blue .main-sidebar,\n.skin-blue .left-side {\n  background-color: #222d32;\n}\n.skin-blue .user-panel > .info,\n.skin-blue .user-panel > .info > a {\n  color: #fff;\n}\n.skin-blue .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-blue .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-blue .sidebar-menu > li:hover > a,\n.skin-blue .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #3c8dbc;\n}\n.skin-blue .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-blue .sidebar a {\n  color: #b8c7ce;\n}\n.skin-blue .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-blue .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-blue .treeview-menu > li.active > a,\n.skin-blue .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-blue .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-blue .sidebar-form input[type=\"text\"],\n.skin-blue .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-blue .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus,\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-blue .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-blue .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n.skin-blue.layout-top-nav .main-header > .logo {\n  background-color: #3c8dbc;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-blue.layout-top-nav .main-header > .logo:hover {\n  background-color: #3b8ab8;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-green-light.css",
    "content": "/*\n * Skin: Green\n * -----------\n */\n.skin-green-light .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .nav > li > a:hover,\n.skin-green-light .main-header .navbar .nav > li > a:active,\n.skin-green-light .main-header .navbar .nav > li > a:focus,\n.skin-green-light .main-header .navbar .nav .open > a,\n.skin-green-light .main-header .navbar .nav .open > a:hover,\n.skin-green-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green-light .main-header .logo {\n  background-color: #00a65a;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green-light .main-header .logo:hover {\n  background-color: #00a157;\n}\n.skin-green-light .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green-light .content-header {\n  background: transparent;\n}\n.skin-green-light .wrapper,\n.skin-green-light .main-sidebar,\n.skin-green-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-green-light .content-wrapper,\n.skin-green-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-green-light .user-panel > .info,\n.skin-green-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-green-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-green-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-green-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li:hover > a,\n.skin-green-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar-menu > li.active {\n  border-left-color: #00a65a;\n}\n.skin-green-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-green-light .sidebar a {\n  color: #444444;\n}\n.skin-green-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-green-light .treeview-menu > li.active > a,\n.skin-green-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-green-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-green-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"],\n.skin-green-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-green-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus,\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-green-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-green.css",
    "content": "/*\n * Skin: Green\n * -----------\n */\n.skin-green .main-header .navbar {\n  background-color: #00a65a;\n}\n.skin-green .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .nav > li > a:hover,\n.skin-green .main-header .navbar .nav > li > a:active,\n.skin-green .main-header .navbar .nav > li > a:focus,\n.skin-green .main-header .navbar .nav .open > a,\n.skin-green .main-header .navbar .nav .open > a:hover,\n.skin-green .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-green .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-green .main-header .navbar .sidebar-toggle:hover {\n  background-color: #008d4c;\n}\n@media (max-width: 767px) {\n  .skin-green .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-green .main-header .navbar .dropdown-menu li a:hover {\n    background: #008d4c;\n  }\n}\n.skin-green .main-header .logo {\n  background-color: #008d4c;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-green .main-header .logo:hover {\n  background-color: #008749;\n}\n.skin-green .main-header li.user-header {\n  background-color: #00a65a;\n}\n.skin-green .content-header {\n  background: transparent;\n}\n.skin-green .wrapper,\n.skin-green .main-sidebar,\n.skin-green .left-side {\n  background-color: #222d32;\n}\n.skin-green .user-panel > .info,\n.skin-green .user-panel > .info > a {\n  color: #fff;\n}\n.skin-green .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-green .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-green .sidebar-menu > li:hover > a,\n.skin-green .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #00a65a;\n}\n.skin-green .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-green .sidebar a {\n  color: #b8c7ce;\n}\n.skin-green .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-green .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-green .treeview-menu > li.active > a,\n.skin-green .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-green .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-green .sidebar-form input[type=\"text\"],\n.skin-green .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-green .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus,\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-green .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-green .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-purple-light.css",
    "content": "/*\n * Skin: Purple\n * ------------\n */\n.skin-purple-light .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .nav > li > a:hover,\n.skin-purple-light .main-header .navbar .nav > li > a:active,\n.skin-purple-light .main-header .navbar .nav > li > a:focus,\n.skin-purple-light .main-header .navbar .nav .open > a,\n.skin-purple-light .main-header .navbar .nav .open > a:hover,\n.skin-purple-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple-light .main-header .logo {\n  background-color: #605ca8;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple-light .main-header .logo:hover {\n  background-color: #5d59a6;\n}\n.skin-purple-light .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple-light .content-header {\n  background: transparent;\n}\n.skin-purple-light .wrapper,\n.skin-purple-light .main-sidebar,\n.skin-purple-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-purple-light .content-wrapper,\n.skin-purple-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-purple-light .user-panel > .info,\n.skin-purple-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-purple-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-purple-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-purple-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li:hover > a,\n.skin-purple-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar-menu > li.active {\n  border-left-color: #605ca8;\n}\n.skin-purple-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-purple-light .sidebar a {\n  color: #444444;\n}\n.skin-purple-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-purple-light .treeview-menu > li.active > a,\n.skin-purple-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-purple-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-purple-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"],\n.skin-purple-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus,\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-purple-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-purple.css",
    "content": "/*\n * Skin: Purple\n * ------------\n */\n.skin-purple .main-header .navbar {\n  background-color: #605ca8;\n}\n.skin-purple .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .nav > li > a:hover,\n.skin-purple .main-header .navbar .nav > li > a:active,\n.skin-purple .main-header .navbar .nav > li > a:focus,\n.skin-purple .main-header .navbar .nav .open > a,\n.skin-purple .main-header .navbar .nav .open > a:hover,\n.skin-purple .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-purple .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-purple .main-header .navbar .sidebar-toggle:hover {\n  background-color: #555299;\n}\n@media (max-width: 767px) {\n  .skin-purple .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-purple .main-header .navbar .dropdown-menu li a:hover {\n    background: #555299;\n  }\n}\n.skin-purple .main-header .logo {\n  background-color: #555299;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-purple .main-header .logo:hover {\n  background-color: #545096;\n}\n.skin-purple .main-header li.user-header {\n  background-color: #605ca8;\n}\n.skin-purple .content-header {\n  background: transparent;\n}\n.skin-purple .wrapper,\n.skin-purple .main-sidebar,\n.skin-purple .left-side {\n  background-color: #222d32;\n}\n.skin-purple .user-panel > .info,\n.skin-purple .user-panel > .info > a {\n  color: #fff;\n}\n.skin-purple .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-purple .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-purple .sidebar-menu > li:hover > a,\n.skin-purple .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #605ca8;\n}\n.skin-purple .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-purple .sidebar a {\n  color: #b8c7ce;\n}\n.skin-purple .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-purple .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-purple .treeview-menu > li.active > a,\n.skin-purple .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-purple .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-purple .sidebar-form input[type=\"text\"],\n.skin-purple .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-purple .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus,\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-purple .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-purple .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-red-light.css",
    "content": "/*\n * Skin: Red\n * ---------\n */\n.skin-red-light .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .nav > li > a:hover,\n.skin-red-light .main-header .navbar .nav > li > a:active,\n.skin-red-light .main-header .navbar .nav > li > a:focus,\n.skin-red-light .main-header .navbar .nav .open > a,\n.skin-red-light .main-header .navbar .nav .open > a:hover,\n.skin-red-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red-light .main-header .logo {\n  background-color: #dd4b39;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red-light .main-header .logo:hover {\n  background-color: #dc4735;\n}\n.skin-red-light .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red-light .content-header {\n  background: transparent;\n}\n.skin-red-light .wrapper,\n.skin-red-light .main-sidebar,\n.skin-red-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-red-light .content-wrapper,\n.skin-red-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-red-light .user-panel > .info,\n.skin-red-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-red-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-red-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-red-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li:hover > a,\n.skin-red-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar-menu > li.active {\n  border-left-color: #dd4b39;\n}\n.skin-red-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-red-light .sidebar a {\n  color: #444444;\n}\n.skin-red-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-red-light .treeview-menu > li.active > a,\n.skin-red-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-red-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-red-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"],\n.skin-red-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-red-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus,\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-red-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-red.css",
    "content": "/*\n * Skin: Red\n * ---------\n */\n.skin-red .main-header .navbar {\n  background-color: #dd4b39;\n}\n.skin-red .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .nav > li > a:hover,\n.skin-red .main-header .navbar .nav > li > a:active,\n.skin-red .main-header .navbar .nav > li > a:focus,\n.skin-red .main-header .navbar .nav .open > a,\n.skin-red .main-header .navbar .nav .open > a:hover,\n.skin-red .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-red .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-red .main-header .navbar .sidebar-toggle:hover {\n  background-color: #d73925;\n}\n@media (max-width: 767px) {\n  .skin-red .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-red .main-header .navbar .dropdown-menu li a:hover {\n    background: #d73925;\n  }\n}\n.skin-red .main-header .logo {\n  background-color: #d73925;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-red .main-header .logo:hover {\n  background-color: #d33724;\n}\n.skin-red .main-header li.user-header {\n  background-color: #dd4b39;\n}\n.skin-red .content-header {\n  background: transparent;\n}\n.skin-red .wrapper,\n.skin-red .main-sidebar,\n.skin-red .left-side {\n  background-color: #222d32;\n}\n.skin-red .user-panel > .info,\n.skin-red .user-panel > .info > a {\n  color: #fff;\n}\n.skin-red .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-red .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-red .sidebar-menu > li:hover > a,\n.skin-red .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #dd4b39;\n}\n.skin-red .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-red .sidebar a {\n  color: #b8c7ce;\n}\n.skin-red .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-red .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-red .treeview-menu > li.active > a,\n.skin-red .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-red .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-red .sidebar-form input[type=\"text\"],\n.skin-red .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-red .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus,\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-red .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-red .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-yellow-light-s.css",
    "content": "深-圳-搜-豹-网-络-公-司"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-yellow-light.css",
    "content": "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow-light .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .nav > li > a:hover,\n.skin-yellow-light .main-header .navbar .nav > li > a:active,\n.skin-yellow-light .main-header .navbar .nav > li > a:focus,\n.skin-yellow-light .main-header .navbar .nav .open > a,\n.skin-yellow-light .main-header .navbar .nav .open > a:hover,\n.skin-yellow-light .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow-light .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow-light .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow-light .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow-light .main-header .logo {\n  background-color: #f39c12;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow-light .main-header .logo:hover {\n  background-color: #f39a0d;\n}\n.skin-yellow-light .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow-light .content-header {\n  background: transparent;\n}\n.skin-yellow-light .wrapper,\n.skin-yellow-light .main-sidebar,\n.skin-yellow-light .left-side {\n  background-color: #f9fafc;\n}\n.skin-yellow-light .content-wrapper,\n.skin-yellow-light .main-footer {\n  border-left: 1px solid #d2d6de;\n}\n.skin-yellow-light .user-panel > .info,\n.skin-yellow-light .user-panel > .info > a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar-menu > li {\n  -webkit-transition: border-left-color 0.3s ease;\n  -o-transition: border-left-color 0.3s ease;\n  transition: border-left-color 0.3s ease;\n}\n.skin-yellow-light .sidebar-menu > li.header {\n  color: #848484;\n  background: #f9fafc;\n}\n.skin-yellow-light .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li:hover > a,\n.skin-yellow-light .sidebar-menu > li.active > a {\n  color: #000000;\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar-menu > li.active {\n  border-left-color: #f39c12;\n}\n.skin-yellow-light .sidebar-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-menu > li > .treeview-menu {\n  background: #f4f4f5;\n}\n.skin-yellow-light .sidebar a {\n  color: #444444;\n}\n.skin-yellow-light .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow-light .treeview-menu > li > a {\n  color: #777777;\n}\n.skin-yellow-light .treeview-menu > li.active > a,\n.skin-yellow-light .treeview-menu > li > a:hover {\n  color: #000000;\n}\n.skin-yellow-light .treeview-menu > li.active > a {\n  font-weight: 600;\n}\n.skin-yellow-light .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #d2d6de;\n  margin: 10px 10px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"],\n.skin-yellow-light .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #fff;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow-light .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow-light .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n@media (min-width: 768px) {\n  .skin-yellow-light.sidebar-mini.sidebar-collapse .sidebar-menu > li > .treeview-menu {\n    border-left: 1px solid #d2d6de;\n  }\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/css/skins/skin-yellow.css",
    "content": "/*\n * Skin: Yellow\n * ------------\n */\n.skin-yellow .main-header .navbar {\n  background-color: #f39c12;\n}\n.skin-yellow .main-header .navbar .nav > li > a {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .nav > li > a:hover,\n.skin-yellow .main-header .navbar .nav > li > a:active,\n.skin-yellow .main-header .navbar .nav > li > a:focus,\n.skin-yellow .main-header .navbar .nav .open > a,\n.skin-yellow .main-header .navbar .nav .open > a:hover,\n.skin-yellow .main-header .navbar .nav .open > a:focus {\n  background: rgba(0, 0, 0, 0.1);\n  color: #f6f6f6;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #ffffff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  color: #f6f6f6;\n  background: rgba(0, 0, 0, 0.1);\n}\n.skin-yellow .main-header .navbar .sidebar-toggle {\n  color: #fff;\n}\n.skin-yellow .main-header .navbar .sidebar-toggle:hover {\n  background-color: #e08e0b;\n}\n@media (max-width: 767px) {\n  .skin-yellow .main-header .navbar .dropdown-menu li.divider {\n    background-color: rgba(255, 255, 255, 0.1);\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a {\n    color: #fff;\n  }\n  .skin-yellow .main-header .navbar .dropdown-menu li a:hover {\n    background: #e08e0b;\n  }\n}\n.skin-yellow .main-header .logo {\n  background-color: #e08e0b;\n  color: #ffffff;\n  border-bottom: 0 solid transparent;\n}\n.skin-yellow .main-header .logo:hover {\n  background-color: #db8b0b;\n}\n.skin-yellow .main-header li.user-header {\n  background-color: #f39c12;\n}\n.skin-yellow .content-header {\n  background: transparent;\n}\n.skin-yellow .wrapper,\n.skin-yellow .main-sidebar,\n.skin-yellow .left-side {\n  background-color: #222d32;\n}\n.skin-yellow .user-panel > .info,\n.skin-yellow .user-panel > .info > a {\n  color: #fff;\n}\n.skin-yellow .sidebar-menu > li.header {\n  color: #4b646f;\n  background: #1a2226;\n}\n.skin-yellow .sidebar-menu > li > a {\n  border-left: 3px solid transparent;\n}\n.skin-yellow .sidebar-menu > li:hover > a,\n.skin-yellow .sidebar-menu > li.active > a {\n  color: #ffffff;\n  background: #1e282c;\n  border-left-color: #f39c12;\n}\n.skin-yellow .sidebar-menu > li > .treeview-menu {\n  margin: 0 1px;\n  background: #2c3b41;\n}\n.skin-yellow .sidebar a {\n  color: #b8c7ce;\n}\n.skin-yellow .sidebar a:hover {\n  text-decoration: none;\n}\n.skin-yellow .treeview-menu > li > a {\n  color: #8aa4af;\n}\n.skin-yellow .treeview-menu > li.active > a,\n.skin-yellow .treeview-menu > li > a:hover {\n  color: #ffffff;\n}\n.skin-yellow .sidebar-form {\n  border-radius: 3px;\n  border: 1px solid #374850;\n  margin: 10px 10px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"],\n.skin-yellow .sidebar-form .btn {\n  box-shadow: none;\n  background-color: #374850;\n  border: 1px solid transparent;\n  height: 35px;\n  -webkit-transition: all 0.3s ease-in-out;\n  -o-transition: all 0.3s ease-in-out;\n  transition: all 0.3s ease-in-out;\n}\n.skin-yellow .sidebar-form input[type=\"text\"] {\n  color: #666;\n  border-top-left-radius: 2px;\n  border-top-right-radius: 0;\n  border-bottom-right-radius: 0;\n  border-bottom-left-radius: 2px;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus,\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  background-color: #fff;\n  color: #666;\n}\n.skin-yellow .sidebar-form input[type=\"text\"]:focus + .input-group-btn .btn {\n  border-left-color: #fff;\n}\n.skin-yellow .sidebar-form .btn {\n  color: #999;\n  border-top-left-radius: 0;\n  border-top-right-radius: 2px;\n  border-bottom-right-radius: 2px;\n  border-bottom-left-radius: 0;\n}\n"
  },
  {
    "path": "public/assets/dashboard/dist/js/app.js",
    "content": "/*! AdminLTE app.js\n * ================\n * Main JS application file for AdminLTE v2. This file\n * should be included in all pages. It controls some layout\n * options and implements exclusive AdminLTE plugins.\n *\n * @Author  Almsaeed Studio\n * @Support <http://www.almsaeedstudio.com>\n * @Email   <support@almsaeedstudio.com>\n * @version 2.1.2\n * @license MIT <http://opensource.org/licenses/MIT>\n */\n\n//Make sure jQuery has been loaded before app.js\nif (typeof jQuery === \"undefined\") {\n  throw new Error(\"AdminLTE requires jQuery\");\n}\n\n/* AdminLTE\n *\n * @type Object\n * @description $.AdminLTE is the main object for the template's app.\n *              It's used for implementing functions and options related\n *              to the template. Keeping everything wrapped in an object\n *              prevents conflict with other plugins and is a better\n *              way to organize our code.\n */\n$.AdminLTE = {};\n\n/* --------------------\n * - AdminLTE Options -\n * --------------------\n * Modify these options to suit your implementation\n */\n$.AdminLTE.options = {\n  //Add slimscroll to navbar menus\n  //This requires you to load the slimscroll plugin\n  //in every page before app.js\n  navbarMenuSlimscroll: true,\n  navbarMenuSlimscrollWidth: \"3px\", //The width of the scroll bar\n  navbarMenuHeight: \"200px\", //The height of the inner menu\n  //General animation speed for JS animated elements such as box collapse/expand and\n  //sidebar treeview slide up/down. This options accepts an integer as milliseconds,\n  //'fast', 'normal', or 'slow'\n  animationSpeed: 500,\n  //Sidebar push menu toggle button selector\n  sidebarToggleSelector: \"[data-toggle='offcanvas']\",\n  //Activate sidebar push menu\n  sidebarPushMenu: true,\n  //Activate sidebar slimscroll if the fixed layout is set (requires SlimScroll Plugin)\n  sidebarSlimScroll: true,\n  //Enable sidebar expand on hover effect for sidebar mini\n  //This option is forced to true if both the fixed layout and sidebar mini\n  //are used together\n  sidebarExpandOnHover: false,\n  //BoxRefresh Plugin\n  enableBoxRefresh: true,\n  //Bootstrap.js tooltip\n  enableBSToppltip: true,\n  BSTooltipSelector: \"[data-toggle='tooltip']\",\n  //Enable Fast Click. Fastclick.js creates a more\n  //native touch experience with touch devices. If you\n  //choose to enable the plugin, make sure you load the script\n  //before AdminLTE's app.js\n  enableFastclick: true,\n  //Control Sidebar Options\n  enableControlSidebar: true,\n  controlSidebarOptions: {\n    //Which button should trigger the open/close event\n    toggleBtnSelector: \"[data-toggle='control-sidebar']\",\n    //The sidebar selector\n    selector: \".control-sidebar\",\n    //Enable slide over content\n    slide: true\n  },\n  //Box Widget Plugin. Enable this plugin\n  //to allow boxes to be collapsed and/or removed\n  enableBoxWidget: true,\n  //Box Widget plugin options\n  boxWidgetOptions: {\n    boxWidgetIcons: {\n      //Collapse icon\n      collapse: 'fa-minus',\n      //Open icon\n      open: 'fa-plus',\n      //Remove icon\n      remove: 'fa-times'\n    },\n    boxWidgetSelectors: {\n      //Remove button selector\n      remove: '[data-widget=\"remove\"]',\n      //Collapse button selector\n      collapse: '[data-widget=\"collapse\"]'\n    }\n  },\n  //Direct Chat plugin options\n  directChat: {\n    //Enable direct chat by default\n    enable: true,\n    //The button to open and close the chat contacts pane\n    contactToggleSelector: '[data-widget=\"chat-pane-toggle\"]'\n  },\n  //Define the set of colors to use globally around the website\n  colors: {\n    lightBlue: \"#3c8dbc\",\n    red: \"#f56954\",\n    green: \"#00a65a\",\n    aqua: \"#00c0ef\",\n    yellow: \"#f39c12\",\n    blue: \"#0073b7\",\n    navy: \"#001F3F\",\n    teal: \"#39CCCC\",\n    olive: \"#3D9970\",\n    lime: \"#01FF70\",\n    orange: \"#FF851B\",\n    fuchsia: \"#F012BE\",\n    purple: \"#8E24AA\",\n    maroon: \"#D81B60\",\n    black: \"#222222\",\n    gray: \"#d2d6de\"\n  },\n  //The standard screen sizes that bootstrap uses.\n  //If you change these in the variables.less file, change\n  //them here too.\n  screenSizes: {\n    xs: 480,\n    sm: 768,\n    md: 992,\n    lg: 1200\n  }\n};\n\n/* ------------------\n * - Implementation -\n * ------------------\n * The next block of code implements AdminLTE's\n * functions and plugins as specified by the\n * options above.\n */\n$(function () {\n  \"use strict\";\n\n  //Extend options if external options exist\n  if (typeof AdminLTEOptions !== \"undefined\") {\n    $.extend(true,$.AdminLTE.options,AdminLTEOptions);\n  }\n\n  //Easy access to options\n  var o = $.AdminLTE.options;\n\n  //Set up the object\n  _init();\n\n  //Activate the layout maker\n  $.AdminLTE.layout.activate();\n\n  //Enable sidebar tree view controls\n  $.AdminLTE.tree('.sidebar');\n\n  //Enable control sidebar\n  if (o.enableControlSidebar) {\n    $.AdminLTE.controlSidebar.activate();\n  }\n\n  //Add slimscroll to navbar dropdown\n  if (o.navbarMenuSlimscroll && typeof $.fn.slimscroll != 'undefined') {\n    $(\".navbar .menu\").slimscroll({\n      height: o.navbarMenuHeight,\n      alwaysVisible: false,\n      size: o.navbarMenuSlimscrollWidth\n    }).css(\"width\", \"100%\");\n  }\n\n  //Activate sidebar push menu\n  if (o.sidebarPushMenu) {\n    $.AdminLTE.pushMenu.activate(o.sidebarToggleSelector);\n  }\n\n  //Activate Bootstrap tooltip\n  if (o.enableBSToppltip) {\n    $('body').tooltip({\n      selector: o.BSTooltipSelector\n    });\n  }\n\n  //Activate box widget\n  if (o.enableBoxWidget) {\n    $.AdminLTE.boxWidget.activate();\n  }\n\n  //Activate fast click\n  if (o.enableFastclick && typeof FastClick != 'undefined') {\n    FastClick.attach(document.body);\n  }\n\n  //Activate direct chat widget\n  if (o.directChat.enable) {\n    $(document).on('click', o.directChat.contactToggleSelector, function () {\n      var box = $(this).parents('.direct-chat').first();\n      box.toggleClass('direct-chat-contacts-open');\n    });\n  }\n\n  /*\n   * INITIALIZE BUTTON TOGGLE\n   * ------------------------\n   */\n  $('.btn-group[data-toggle=\"btn-toggle\"]').each(function () {\n    var group = $(this);\n    $(this).find(\".btn\").on('click', function (e) {\n      group.find(\".btn.active\").removeClass(\"active\");\n      $(this).addClass(\"active\");\n      e.preventDefault();\n    });\n\n  });\n});\n\n/* ----------------------------------\n * - Initialize the AdminLTE Object -\n * ----------------------------------\n * All AdminLTE functions are implemented below.\n */\nfunction _init() {\n  'use strict';\n  /* Layout\n   * ======\n   * Fixes the layout height in case min-height fails.\n   *\n   * @type Object\n   * @usage $.AdminLTE.layout.activate()\n   *        $.AdminLTE.layout.fix()\n   *        $.AdminLTE.layout.fixSidebar()\n   */\n  $.AdminLTE.layout = {\n    activate: function () {\n      var _this = this;\n      _this.fix();\n      _this.fixSidebar();\n      $(window, \".wrapper\").resize(function () {\n        _this.fix();\n        _this.fixSidebar();\n      });\n    },\n    fix: function () {\n      //Get window height and the wrapper height\n      var neg = $('.main-header').outerHeight() + $('.main-footer').outerHeight();\n      var window_height = $(window).height();\n      var sidebar_height = $(\".sidebar\").height();\n      //Set the min-height of the content and sidebar based on the\n      //the height of the document.\n      if ($(\"body\").hasClass(\"fixed\")) {\n        $(\".content-wrapper, .right-side\").css('min-height', window_height - $('.main-footer').outerHeight());\n      } else {\n        var postSetWidth;\n        if (window_height <= sidebar_height) {\n          $(\".content-wrapper, .right-side\").css('min-height', window_height - neg);\n          postSetWidth = window_height - neg;\n        } else {\n        \t//$(\".content-wrapper, .right-side\").css('min-height', sidebar_height);\n        \tpostSetWidth = sidebar_height;\n        }\n        //Fix for the control sidebar height\n        var controlSidebar = $($.AdminLTE.options.controlSidebarOptions.selector);\n        if (typeof controlSidebar !== \"undefined\") {\n          if (controlSidebar.height() > postSetWidth)\n            $(\".content-wrapper, .right-side\").css('min-height', controlSidebar.height());\n        }\n      }\n    },\n    fixSidebar: function () {\n      //Make sure the body tag has the .fixed class\n      if (!$(\"body\").hasClass(\"fixed\")) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n        }\n        return;\n      } else if (typeof $.fn.slimScroll == 'undefined' && window.console) {\n        window.console.error(\"Error: the fixed layout requires the slimscroll plugin!\");\n      }\n      //Enable slimscroll for fixed layout\n      if ($.AdminLTE.options.sidebarSlimScroll) {\n        if (typeof $.fn.slimScroll != 'undefined') {\n          //Destroy if it exists\n          $(\".sidebar\").slimScroll({destroy: true}).height(\"auto\");\n          //Add slimscroll\n          $(\".sidebar\").slimscroll({\n            height: ($(window).height() - $(\".main-header\").height()) + \"px\",\n            color: \"rgba(0,0,0,0.2)\",\n            size: \"3px\"\n          });\n        }\n      }\n    }\n  };\n\n  /* PushMenu()\n   * ==========\n   * Adds the push menu functionality to the sidebar.\n   *\n   * @type Function\n   * @usage: $.AdminLTE.pushMenu(\"[data-toggle='offcanvas']\")\n   */\n  $.AdminLTE.pushMenu = {\n    activate: function (toggleBtn) {\n      //Get the screen sizes\n      var screenSizes = $.AdminLTE.options.screenSizes;\n\n      //Enable sidebar toggle\n      $(toggleBtn).on('click', function (e) {\n        e.preventDefault();\n\n        //Enable sidebar push menu\n        if ($(window).width() > (screenSizes.sm - 1)) {\n          if ($(\"body\").hasClass('sidebar-collapse')) {\n            $(\"body\").removeClass('sidebar-collapse').trigger('expanded.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          }\n        }\n        //Handle sidebar push menu for small screens\n        else {\n          if ($(\"body\").hasClass('sidebar-open')) {\n            $(\"body\").removeClass('sidebar-open').removeClass('sidebar-collapse').trigger('collapsed.pushMenu');\n          } else {\n            $(\"body\").addClass('sidebar-open').trigger('expanded.pushMenu');\n          }\n        }\n      });\n\n      $(\".content-wrapper\").click(function () {\n        //Enable hide menu when clicking on the content-wrapper on small screens\n        if ($(window).width() <= (screenSizes.sm - 1) && $(\"body\").hasClass(\"sidebar-open\")) {\n          $(\"body\").removeClass('sidebar-open');\n        }\n      });\n\n      //Enable expand on hover for sidebar mini\n      if ($.AdminLTE.options.sidebarExpandOnHover || ($('body').hasClass('fixed') && $('body').hasClass('sidebar-mini'))) {\n        this.expandOnHover();\n      }\n    },\n    expandOnHover: function () {\n      var _this = this;\n      var screenWidth = $.AdminLTE.options.screenSizes.sm - 1;\n      //Expand sidebar on hover\n      $('.main-sidebar').hover(function () {\n        if ($('body').hasClass('sidebar-mini')\n                && $(\"body\").hasClass('sidebar-collapse')\n                && $(window).width() > screenWidth) {\n          _this.expand();\n        }\n      }, function () {\n        if ($('body').hasClass('sidebar-mini')\n                && $('body').hasClass('sidebar-expanded-on-hover')\n                && $(window).width() > screenWidth) {\n          _this.collapse();\n        }\n      });\n    },\n    expand: function () {\n      $(\"body\").removeClass('sidebar-collapse').addClass('sidebar-expanded-on-hover');\n    },\n    collapse: function () {\n      if ($('body').hasClass('sidebar-expanded-on-hover')) {\n        $('body').removeClass('sidebar-expanded-on-hover').addClass('sidebar-collapse');\n      }\n    }\n  };\n\n  /* Tree()\n   * ======\n   * Converts the sidebar into a multilevel\n   * tree view menu.\n   *\n   * @type Function\n   * @Usage: $.AdminLTE.tree('.sidebar')\n   */\n  $.AdminLTE.tree = function (menu) {\n    var _this = this;\n    var animationSpeed = $.AdminLTE.options.animationSpeed;\n    $(document).on('click', menu + ' li a', function (e) {\n      //Get the clicked link and the next element\n      var $this = $(this);\n      var checkElement = $this.next();\n\n      //Check if the next element is a menu and is visible\n      if ((checkElement.is('.treeview-menu')) && (checkElement.is(':visible'))) {\n        //Close the menu\n        checkElement.slideUp(animationSpeed, function () {\n          checkElement.removeClass('menu-open');\n          //Fix the layout in case the sidebar stretches over the height of the window\n          //_this.layout.fix();\n        });\n        checkElement.parent(\"li\").removeClass(\"active\");\n      }\n      //If the menu is not visible\n      else if ((checkElement.is('.treeview-menu')) && (!checkElement.is(':visible'))) {\n        //Get the parent menu\n        var parent = $this.parents('ul').first();\n        //Close all open menus within the parent\n        var ul = parent.find('ul:visible').slideUp(animationSpeed);\n        //Remove the menu-open class from the parent\n        ul.removeClass('menu-open');\n        //Get the parent li\n        var parent_li = $this.parent(\"li\");\n\n        //Open the target menu and add the menu-open class\n        checkElement.slideDown(animationSpeed, function () {\n          //Add the class active to the parent li\n          checkElement.addClass('menu-open');\n          parent.find('li.active').removeClass('active');\n          parent_li.addClass('active');\n          //Fix the layout in case the sidebar stretches over the height of the window\n          _this.layout.fix();\n        });\n      }\n      //if this isn't a link, prevent the page from being redirected\n      if (checkElement.is('.treeview-menu')) {\n        e.preventDefault();\n      }\n    });\n  };\n\n  /* ControlSidebar\n   * ==============\n   * Adds functionality to the right sidebar\n   *\n   * @type Object\n   * @usage $.AdminLTE.controlSidebar.activate(options)\n   */\n  $.AdminLTE.controlSidebar = {\n    //instantiate the object\n    activate: function () {\n      //Get the object\n      var _this = this;\n      //Update options\n      var o = $.AdminLTE.options.controlSidebarOptions;\n      //Get the sidebar\n      var sidebar = $(o.selector);\n      //The toggle button\n      var btn = $(o.toggleBtnSelector);\n\n      //Listen to the click event\n      btn.on('click', function (e) {\n        e.preventDefault();\n        //If the sidebar is not open\n        if (!sidebar.hasClass('control-sidebar-open')\n                && !$('body').hasClass('control-sidebar-open')) {\n          //Open the sidebar\n          _this.open(sidebar, o.slide);\n        } else {\n          _this.close(sidebar, o.slide);\n        }\n      });\n\n      //If the body has a boxed layout, fix the sidebar bg position\n      var bg = $(\".control-sidebar-bg\");\n      _this._fix(bg);\n\n      //If the body has a fixed layout, make the control sidebar fixed\n      if ($('body').hasClass('fixed')) {\n        _this._fixForFixed(sidebar);\n      } else {\n        //If the content height is less than the sidebar's height, force max height\n        if ($('.content-wrapper, .right-side').height() < sidebar.height()) {\n          _this._fixForContent(sidebar);\n        }\n      }\n    },\n    //Open the control sidebar\n    open: function (sidebar, slide) {\n      //Slide over content\n      if (slide) {\n        sidebar.addClass('control-sidebar-open');\n      } else {\n        //Push the content by adding the open class to the body instead\n        //of the sidebar itself\n        $('body').addClass('control-sidebar-open');\n      }\n    },\n    //Close the control sidebar\n    close: function (sidebar, slide) {\n      if (slide) {\n        sidebar.removeClass('control-sidebar-open');\n      } else {\n        $('body').removeClass('control-sidebar-open');\n      }\n    },\n    _fix: function (sidebar) {\n      var _this = this;\n      if ($(\"body\").hasClass('layout-boxed')) {\n        sidebar.css('position', 'absolute');\n        sidebar.height($(\".wrapper\").height());\n        $(window).resize(function () {\n          _this._fix(sidebar);\n        });\n      } else {\n        sidebar.css({\n          'position': 'fixed',\n          'height': 'auto'\n        });\n      }\n    },\n    _fixForFixed: function (sidebar) {\n      sidebar.css({\n        'position': 'fixed',\n        'max-height': '100%',\n        'overflow': 'auto',\n        'padding-bottom': '50px'\n      });\n    },\n    _fixForContent: function (sidebar) {\n      //$(\".content-wrapper, .right-side\").css('min-height', sidebar.height());\n    }\n  };\n\n  /* BoxWidget\n   * =========\n   * BoxWidget is a plugin to handle collapsing and\n   * removing boxes from the screen.\n   *\n   * @type Object\n   * @usage $.AdminLTE.boxWidget.activate()\n   *        Set all your options in the main $.AdminLTE.options object\n   */\n  $.AdminLTE.boxWidget = {\n    selectors: $.AdminLTE.options.boxWidgetOptions.boxWidgetSelectors,\n    icons: $.AdminLTE.options.boxWidgetOptions.boxWidgetIcons,\n    animationSpeed: $.AdminLTE.options.animationSpeed,\n    activate: function (_box) {\n      var _this = this;\n      if (!_box) {\n        _box = document; // activate all boxes per default\n      }\n      //Listen for collapse event triggers\n      $(_box).on('click', _this.selectors.collapse, function (e) {\n        e.preventDefault();\n        _this.collapse($(this));\n      });\n\n      //Listen for remove event triggers\n      $(_box).on('click', _this.selectors.remove, function (e) {\n        e.preventDefault();\n        _this.remove($(this));\n      });\n    },\n    collapse: function (element) {\n      var _this = this;\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      //Find the body and the footer\n      var box_content = box.find(\"> .box-body, > .box-footer, > form  >.box-body, > form > .box-footer\");\n      if (!box.hasClass(\"collapsed-box\")) {\n        //Convert minus into plus\n        element.children(\":first\")\n                .removeClass(_this.icons.collapse)\n                .addClass(_this.icons.open);\n        //Hide the content\n        box_content.slideUp(_this.animationSpeed, function () {\n        \tbox.addClass(\"collapsed-box\");\n        });\n      } else {\n        //Convert plus into minus\n        element.children(\":first\")\n                .removeClass(_this.icons.open)\n                .addClass(_this.icons.collapse);\n        //Show the content\n        box_content.slideDown(_this.animationSpeed, function () {\n        \tbox.removeClass(\"collapsed-box\");\n        });\n      }\n    },\n    remove: function (element) {\n      //Find the box parent\n      var box = element.parents(\".box\").first();\n      box.slideUp(this.animationSpeed);\n    }\n  };\n}\n\n/* ------------------\n * - Custom Plugins -\n * ------------------\n * All custom plugins are defined below.\n */\n\n/*\n * BOX REFRESH BUTTON\n * ------------------\n * This is a custom plugin to use with the component BOX. It allows you to add\n * a refresh button to the box. It converts the box's state to a loading state.\n *\n * @type plugin\n * @usage $(\"#box-widget\").boxRefresh( options );\n */\n(function ($) {\n\n  \"use strict\";\n\n  $.fn.boxRefresh = function (options) {\n\n    // Render options\n    var settings = $.extend({\n      //Refresh button selector\n      trigger: \".refresh-btn\",\n      //File source to be loaded (e.g: ajax/src.php)\n      source: \"\",\n      //Callbacks\n      onLoadStart: function (box) {\n        return box;\n      }, //Right after the button has been clicked\n      onLoadDone: function (box) {\n        return box;\n      } //When the source has been loaded\n\n    }, options);\n\n    //The overlay\n    var overlay = $('<div class=\"overlay\"><div class=\"fa fa-refresh fa-spin\"></div></div>');\n\n    return this.each(function () {\n      //if a source is specified\n      if (settings.source === \"\") {\n        if (window.console) {\n          window.console.log(\"Please specify a source first - boxRefresh()\");\n        }\n        return;\n      }\n      //the box\n      var box = $(this);\n      //the button\n      var rBtn = box.find(settings.trigger).first();\n\n      //On trigger click\n      rBtn.on('click', function (e) {\n        e.preventDefault();\n        //Add loading overlay\n        start(box);\n\n        //Perform ajax call\n        box.find(\".box-body\").load(settings.source, function () {\n          done(box);\n        });\n      });\n    });\n\n    function start(box) {\n      //Add overlay and loading img\n      box.append(overlay);\n\n      settings.onLoadStart.call(box);\n    }\n\n    function done(box) {\n      //Remove overlay and loading img\n      box.find(overlay).remove();\n\n      settings.onLoadDone.call(box);\n    }\n\n  };\n\n})(jQuery);\n\n/*\n * EXPLICIT BOX ACTIVATION\n * -----------------------\n * This is a custom plugin to use with the component BOX. It allows you to activate\n * a box inserted in the DOM after the app.js was loaded.\n *\n * @type plugin\n * @usage $(\"#box-widget\").activateBox();\n */\n(function ($) {\n  'use strict';\n  $.fn.activateBox = function () {\n    $.AdminLTE.boxWidget.activate(this);\n  };\n\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/dist/js/demo.js",
    "content": "/**\n * AdminLTE Demo Menu\n * ------------------\n * You should not use this file in production.\n * This file is for demo purposes only.\n */\n(function ($, AdminLTE) {\n\n  \"use strict\";\n\n  /**\n   * List of all the available skins\n   *\n   * @type Array\n   */\n  var my_skins = [\n    \"skin-blue\",\n    \"skin-black\",\n    \"skin-red\",\n    \"skin-yellow\",\n    \"skin-purple\",\n    \"skin-green\",\n    \"skin-blue-light\",\n    \"skin-black-light\",\n    \"skin-red-light\",\n    \"skin-yellow-light\",\n    \"skin-purple-light\",\n    \"skin-green-light\"\n  ];\n\n  //Create the new tab\n  var tab_pane = $(\"<div />\", {\n    \"id\": \"control-sidebar-theme-demo-options-tab\",\n    \"class\": \"tab-pane active\"\n  });\n\n  //Create the tab button\n  var tab_button = $(\"<li />\", {\"class\": \"active\"})\n          .html(\"<a href='#control-sidebar-theme-demo-options-tab' data-toggle='tab'>\"\n                  + \"<i class='fa fa-wrench'></i>\"\n                  + \"</a>\");\n\n  //Add the tab button to the right sidebar tabs\n  $(\"[href='#control-sidebar-home-tab']\").parent().before(tab_button);\n\n  //Create the menu\n  var demo_settings = $(\"<div />\");\n\n  //Layout options\n  demo_settings.append(\n          \"<h4 class='control-sidebar-heading'>\"\n          + \"布局选项\"\n          + \"</h4>\"\n          //Fixed layout\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-layout='fixed' class='pull-right'/> \"\n          + \"全屏\"\n          + \"</label>\"\n          + \"<p>全屏布局，收起顶部</p>\"\n          + \"</div>\"\n          //Boxed layout\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-layout='layout-boxed'class='pull-right'/> \"\n          + \"窄屏\"\n          + \"</label>\"\n          + \"<p>窄屏居中</p>\"\n          + \"</div>\"\n          //Sidebar Toggle\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-layout='sidebar-collapse' class='pull-right'/> \"\n          + \"收起菜单\"\n          + \"</label>\"\n          + \"<p>左侧菜单栏收缩</p>\"\n          + \"</div>\"\n          //Sidebar mini expand on hover toggle\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-enable='expandOnHover' class='pull-right'/> \"\n          + \"侧栏悬浮收起\"\n          + \"</label>\"\n          + \"<p>侧栏导航鼠标经过显示</p>\"\n          + \"</div>\"\n          //Control Sidebar Toggle\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-controlsidebar='control-sidebar-open' class='pull-right'/> \"\n          + \"收起右侧挂件\"\n          + \"</label>\"\n          + \"<p>隐藏挂件框</p>\"\n          + \"</div>\"\n          //Control Sidebar Skin Toggle\n          + \"<div class='form-group'>\"\n          + \"<label class='control-sidebar-subheading'>\"\n          + \"<input type='checkbox' data-sidebarskin='toggle' class='pull-right'/> \"\n          + \"改变挂件背景\"\n          + \"</label>\"\n          + \"<p>切换挂件背景颜色</p>\"\n          + \"</div>\"\n          );\n  var skins_list = $(\"<ul />\", {\"class\": 'list-unstyled clearfix'});\n\n  //Dark sidebar skins\n  var skin_blue =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-blue' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px; background: #367fa9;'></span><span class='bg-light-blue' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>蓝  黑</p>\");\n  skins_list.append(skin_blue);\n  var skin_black =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-black' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div style='box-shadow: 0 0 2px rgba(0,0,0,0.1)' class='clearfix'><span style='display:block; width: 20%; float: left; height: 7px; background: #fefefe;'></span><span style='display:block; width: 80%; float: left; height: 7px; background: #fefefe;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>白  黑</p>\");\n  skins_list.append(skin_black);\n  var skin_purple =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-purple' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-purple-active'></span><span class='bg-purple' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>紫  黑</p>\");\n  skins_list.append(skin_purple);\n  var skin_green =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-green' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-green-active'></span><span class='bg-green' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>绿  黑</p>\");\n  skins_list.append(skin_green);\n  var skin_red =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-red' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-red-active'></span><span class='bg-red' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>红  黑</p>\");\n  skins_list.append(skin_red);\n  var skin_yellow =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-yellow' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-yellow-active'></span><span class='bg-yellow' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #222d32;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin'>黄  黑</p>\");\n  skins_list.append(skin_yellow);\n\n  //Light sidebar skins\n  var skin_blue_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-blue-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px; background: #367fa9;'></span><span class='bg-light-blue' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px'>蓝  白</p>\");\n  skins_list.append(skin_blue_light);\n  var skin_black_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-black-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div style='box-shadow: 0 0 2px rgba(0,0,0,0.1)' class='clearfix'><span style='display:block; width: 20%; float: left; height: 7px; background: #fefefe;'></span><span style='display:block; width: 80%; float: left; height: 7px; background: #fefefe;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px'>黑  白</p>\");\n  skins_list.append(skin_black_light);\n  var skin_purple_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-purple-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-purple-active'></span><span class='bg-purple' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px'>紫  白</p>\");\n  skins_list.append(skin_purple_light);\n  var skin_green_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-green-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-green-active'></span><span class='bg-green' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px'>绿  白</p>\");\n  skins_list.append(skin_green_light);\n  var skin_red_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-red-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-red-active'></span><span class='bg-red' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px'>红  白</p>\");\n  skins_list.append(skin_red_light);\n  var skin_yellow_light =\n          $(\"<li />\", {style: \"float:left; width: 33.33333%; padding: 5px;\"})\n          .append(\"<a href='javascript:void(0);' data-skin='skin-yellow-light' style='display: block; box-shadow: 0 0 3px rgba(0,0,0,0.4)' class='clearfix full-opacity-hover'>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 7px;' class='bg-yellow-active'></span><span class='bg-yellow' style='display:block; width: 80%; float: left; height: 7px;'></span></div>\"\n                  + \"<div><span style='display:block; width: 20%; float: left; height: 20px; background: #f9fafc;'></span><span style='display:block; width: 80%; float: left; height: 20px; background: #f4f5f7;'></span></div>\"\n                  + \"</a>\"\n                  + \"<p class='text-center no-margin' style='font-size: 12px;'>黄  白</p>\");\n  skins_list.append(skin_yellow_light);\n\n  demo_settings.append(\"<h4 class='control-sidebar-heading'>皮肤</h4>\");\n  demo_settings.append(skins_list);\n\n  tab_pane.append(demo_settings);\n  $(\"#control-sidebar-home-tab\").after(tab_pane);\n\n  setup();\n\n  /**\n   * Toggles layout classes\n   *\n   * @param String cls the layout class to toggle\n   * @returns void\n   */\n  function change_layout(cls) {\n    $(\"body\").toggleClass(cls);\n    AdminLTE.layout.fixSidebar();\n    //Fix the problem with right sidebar and layout boxed\n    if (cls == \"layout-boxed\")\n      AdminLTE.controlSidebar._fix($(\".control-sidebar-bg\"));\n    if ($('body').hasClass('fixed') && cls == 'fixed') {\n      AdminLTE.pushMenu.expandOnHover();\n      AdminLTE.layout.activate();\n    }\n    AdminLTE.controlSidebar._fix($(\".control-sidebar-bg\"));\n    AdminLTE.controlSidebar._fix($(\".control-sidebar\"));\n  }\n\n  /**\n   * Replaces the old skin with the new skin\n   * @param String cls the new skin class\n   * @returns Boolean false to prevent link's default action\n   */\n  function change_skin(cls) {\n    $.each(my_skins, function (i) {\n      $(\"body\").removeClass(my_skins[i]);\n    });\n\n    $(\"body\").addClass(cls);\n    store('skin', cls);\n    return false;\n  }\n\n  /**\n   * Store a new settings in the browser\n   *\n   * @param String name Name of the setting\n   * @param String val Value of the setting\n   * @returns void\n   */\n  function store(name, val) {\n    if (typeof (Storage) !== \"undefined\") {\n      localStorage.setItem(name, val);\n    } else {\n      window.alert('Please use a modern browser to properly view this template!');\n    }\n  }\n\n  /**\n   * Get a prestored setting\n   *\n   * @param String name Name of of the setting\n   * @returns String The value of the setting | null\n   */\n  function get(name) {\n    if (typeof (Storage) !== \"undefined\") {\n      return localStorage.getItem(name);\n    } else {\n      window.alert('Please use a modern browser to properly view this template!');\n    }\n  }\n\n  /**\n   * Retrieve default settings and apply them to the template\n   *\n   * @returns void\n   */\n  function setup() {\n    var tmp = get('skin');\n    if (tmp && $.inArray(tmp, my_skins))\n      change_skin(tmp);\n\n    //Add the change skin listener\n    $(\"[data-skin]\").on('click', function (e) {\n      e.preventDefault();\n      change_skin($(this).data('skin'));\n    });\n\n    //Add the layout manager\n    $(\"[data-layout]\").on('click', function () {\n      change_layout($(this).data('layout'));\n    });\n\n    $(\"[data-controlsidebar]\").on('click', function () {\n      change_layout($(this).data('controlsidebar'));\n      var slide = !AdminLTE.options.controlSidebarOptions.slide;\n      AdminLTE.options.controlSidebarOptions.slide = slide;\n      if (!slide)\n        $('.control-sidebar').removeClass('control-sidebar-open');\n    });\n\n    $(\"[data-sidebarskin='toggle']\").on('click', function () {\n      var sidebar = $(\".control-sidebar\");\n      if (sidebar.hasClass(\"control-sidebar-dark\")) {\n        sidebar.removeClass(\"control-sidebar-dark\")\n        sidebar.addClass(\"control-sidebar-light\")\n      } else {\n        sidebar.removeClass(\"control-sidebar-light\")\n        sidebar.addClass(\"control-sidebar-dark\")\n      }\n    });\n\n    $(\"[data-enable='expandOnHover']\").on('click', function () {\n      $(this).attr('disabled', true);\n      AdminLTE.pushMenu.expandOnHover();\n      if (!$('body').hasClass('sidebar-collapse'))\n        $(\"[data-layout='sidebar-collapse']\").click();\n    });\n\n    // Reset options\n    if ($('body').hasClass('fixed')) {\n      $(\"[data-layout='fixed']\").attr('checked', 'checked');\n    }\n    if ($('body').hasClass('layout-boxed')) {\n      $(\"[data-layout='layout-boxed']\").attr('checked', 'checked');\n    }\n    if ($('body').hasClass('sidebar-collapse')) {\n      $(\"[data-layout='sidebar-collapse']\").attr('checked', 'checked');\n    }\n\n  }\n})(jQuery, $.AdminLTE);\n"
  },
  {
    "path": "public/assets/dashboard/dist/js/pages/dashboard.js",
    "content": "/*\n * Author: Abdullah A Almsaeed\n * Date: 4 Jan 2014\n * Description:\n *      This is a demo file used only for the main dashboard (index.html)\n **/\n\n$(function () {\n\n  \"use strict\";\n\n  //Make the dashboard widgets sortable Using jquery UI\n  $(\".connectedSortable\").sortable({\n    placeholder: \"sort-highlight\",\n    connectWith: \".connectedSortable\",\n    handle: \".box-header, .nav-tabs\",\n    forcePlaceholderSize: true,\n    zIndex: 999999\n  });\n  $(\".connectedSortable .box-header, .connectedSortable .nav-tabs-custom\").css(\"cursor\", \"move\");\n\n  //jQuery UI sortable for the todo list\n  $(\".todo-list\").sortable({\n    placeholder: \"sort-highlight\",\n    handle: \".handle\",\n    forcePlaceholderSize: true,\n    zIndex: 999999\n  });\n\n  //bootstrap WYSIHTML5 - text editor\n  //$(\".textarea\").wysihtml5();\n\n  //jvectormap data\n  var visitorsData = {\n    \"US\": 398, //USA\n    \"SA\": 400, //Saudi Arabia\n    \"CA\": 1000, //Canada\n    \"DE\": 500, //Germany\n    \"FR\": 760, //France\n    \"CN\": 300, //China\n    \"AU\": 700, //Australia\n    \"BR\": 600, //Brazil\n    \"IN\": 800, //India\n    \"GB\": 320, //Great Britain\n    \"RU\": 3000 //Russia\n  };\n\n  //The Calender\n  //$(\"#calendar\").datepicker();\n\n  //SLIMSCROLL FOR CHAT WIDGET\n  $('#chat-box').slimScroll({\n    height: '250px'\n  });\n\n  //Fix for charts under tabs\n  $('.box ul.nav a').on('shown.bs.tab', function () {\n    area.redraw();\n    donut.redraw();\n    line.redraw();\n  });\n\n  /* The todo list plugin */\n  $(\".todo-list\").todolist({\n    onCheck: function (ele) {\n      window.console.log(\"The element has been checked\");\n      return ele;\n    },\n    onUncheck: function (ele) {\n      window.console.log(\"The element has been unchecked\");\n      return ele;\n    }\n  });\n\n});\n"
  },
  {
    "path": "public/assets/dashboard/dist/js/pages/dashboard2.js",
    "content": "$(function () {\n\n  'use strict';\n\n  /* ChartJS\n   * -------\n   * Here we will create a few charts using ChartJS\n   */\n\n  //-----------------------\n  //- MONTHLY SALES CHART -\n  //-----------------------\n\n  // Get context with jQuery - using jQuery's .get() method.\n  var salesChartCanvas = $(\"#salesChart\").get(0).getContext(\"2d\");\n  // This will get the first returned node in the jQuery collection.\n  var salesChart = new Chart(salesChartCanvas);\n\n  var salesChartData = {\n    labels: [\"January\", \"February\", \"March\", \"April\", \"May\", \"June\", \"July\"],\n    datasets: [\n      {\n        label: \"Electronics\",\n        fillColor: \"rgb(210, 214, 222)\",\n        strokeColor: \"rgb(210, 214, 222)\",\n        pointColor: \"rgb(210, 214, 222)\",\n        pointStrokeColor: \"#c1c7d1\",\n        pointHighlightFill: \"#fff\",\n        pointHighlightStroke: \"rgb(220,220,220)\",\n        data: [65, 59, 80, 81, 56, 55, 40]\n      },\n      {\n        label: \"Digital Goods\",\n        fillColor: \"rgba(60,141,188,0.9)\",\n        strokeColor: \"rgba(60,141,188,0.8)\",\n        pointColor: \"#3b8bba\",\n        pointStrokeColor: \"rgba(60,141,188,1)\",\n        pointHighlightFill: \"#fff\",\n        pointHighlightStroke: \"rgba(60,141,188,1)\",\n        data: [28, 48, 40, 19, 86, 27, 90]\n      }\n    ]\n  };\n\n  var salesChartOptions = {\n    //Boolean - If we should show the scale at all\n    showScale: true,\n    //Boolean - Whether grid lines are shown across the chart\n    scaleShowGridLines: false,\n    //String - Colour of the grid lines\n    scaleGridLineColor: \"rgba(0,0,0,.05)\",\n    //Number - Width of the grid lines\n    scaleGridLineWidth: 1,\n    //Boolean - Whether to show horizontal lines (except X axis)\n    scaleShowHorizontalLines: true,\n    //Boolean - Whether to show vertical lines (except Y axis)\n    scaleShowVerticalLines: true,\n    //Boolean - Whether the line is curved between points\n    bezierCurve: true,\n    //Number - Tension of the bezier curve between points\n    bezierCurveTension: 0.3,\n    //Boolean - Whether to show a dot for each point\n    pointDot: false,\n    //Number - Radius of each point dot in pixels\n    pointDotRadius: 4,\n    //Number - Pixel width of point dot stroke\n    pointDotStrokeWidth: 1,\n    //Number - amount extra to add to the radius to cater for hit detection outside the drawn point\n    pointHitDetectionRadius: 20,\n    //Boolean - Whether to show a stroke for datasets\n    datasetStroke: true,\n    //Number - Pixel width of dataset stroke\n    datasetStrokeWidth: 2,\n    //Boolean - Whether to fill the dataset with a color\n    datasetFill: true,\n    //String - A legend template\n    legendTemplate: \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<datasets.length; i++){%><li><span style=\\\"background-color:<%=datasets[i].lineColor%>\\\"></span><%=datasets[i].label%></li><%}%></ul>\",\n    //Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n    maintainAspectRatio: true,\n    //Boolean - whether to make the chart responsive to window resizing\n    responsive: true\n  };\n\n  //Create the line chart\n  salesChart.Line(salesChartData, salesChartOptions);\n\n  //---------------------------\n  //- END MONTHLY SALES CHART -\n  //---------------------------\n\n  //-------------\n  //- PIE CHART -\n  //-------------\n  // Get context with jQuery - using jQuery's .get() method.\n  var pieChartCanvas = $(\"#pieChart\").get(0).getContext(\"2d\");\n  var pieChart = new Chart(pieChartCanvas);\n  var PieData = [\n    {\n      value: 700,\n      color: \"#f56954\",\n      highlight: \"#f56954\",\n      label: \"Chrome\"\n    },\n    {\n      value: 500,\n      color: \"#00a65a\",\n      highlight: \"#00a65a\",\n      label: \"IE\"\n    },\n    {\n      value: 400,\n      color: \"#f39c12\",\n      highlight: \"#f39c12\",\n      label: \"FireFox\"\n    },\n    {\n      value: 600,\n      color: \"#00c0ef\",\n      highlight: \"#00c0ef\",\n      label: \"Safari\"\n    },\n    {\n      value: 300,\n      color: \"#3c8dbc\",\n      highlight: \"#3c8dbc\",\n      label: \"Opera\"\n    },\n    {\n      value: 100,\n      color: \"#d2d6de\",\n      highlight: \"#d2d6de\",\n      label: \"Navigator\"\n    }\n  ];\n  var pieOptions = {\n    //Boolean - Whether we should show a stroke on each segment\n    segmentShowStroke: true,\n    //String - The colour of each segment stroke\n    segmentStrokeColor: \"#fff\",\n    //Number - The width of each segment stroke\n    segmentStrokeWidth: 1,\n    //Number - The percentage of the chart that we cut out of the middle\n    percentageInnerCutout: 50, // This is 0 for Pie charts\n    //Number - Amount of animation steps\n    animationSteps: 100,\n    //String - Animation easing effect\n    animationEasing: \"easeOutBounce\",\n    //Boolean - Whether we animate the rotation of the Doughnut\n    animateRotate: true,\n    //Boolean - Whether we animate scaling the Doughnut from the centre\n    animateScale: false,\n    //Boolean - whether to make the chart responsive to window resizing\n    responsive: true,\n    // Boolean - whether to maintain the starting aspect ratio or not when responsive, if set to false, will take up entire container\n    maintainAspectRatio: false,\n    //String - A legend template\n    legendTemplate: \"<ul class=\\\"<%=name.toLowerCase()%>-legend\\\"><% for (var i=0; i<segments.length; i++){%><li><span style=\\\"background-color:<%=segments[i].fillColor%>\\\"></span><%if(segments[i].label){%><%=segments[i].label%><%}%></li><%}%></ul>\",\n    //String - A tooltip template\n    tooltipTemplate: \"<%=value %> <%=label%> users\"\n  };\n  //Create pie or douhnut chart\n  // You can switch between pie and douhnut using the method below.\n  pieChart.Doughnut(PieData, pieOptions);\n  //-----------------\n  //- END PIE CHART -\n  //-----------------\n\n  /* jVector Maps\n   * ------------\n   * Create a world map with markers\n   */\n  $('#world-map-markers').vectorMap({\n    map: 'world_mill_en',\n    normalizeFunction: 'polynomial',\n    hoverOpacity: 0.7,\n    hoverColor: false,\n    backgroundColor: 'transparent',\n    regionStyle: {\n      initial: {\n        fill: 'rgba(210, 214, 222, 1)',\n        \"fill-opacity\": 1,\n        stroke: 'none',\n        \"stroke-width\": 0,\n        \"stroke-opacity\": 1\n      },\n      hover: {\n        \"fill-opacity\": 0.7,\n        cursor: 'pointer'\n      },\n      selected: {\n        fill: 'yellow'\n      },\n      selectedHover: {\n      }\n    },\n    markerStyle: {\n      initial: {\n        fill: '#00a65a',\n        stroke: '#111'\n      }\n    },\n    markers: [\n      {latLng: [41.90, 12.45], name: 'Vatican City'},\n      {latLng: [43.73, 7.41], name: 'Monaco'},\n      {latLng: [-0.52, 166.93], name: 'Nauru'},\n      {latLng: [-8.51, 179.21], name: 'Tuvalu'},\n      {latLng: [43.93, 12.46], name: 'San Marino'},\n      {latLng: [47.14, 9.52], name: 'Liechtenstein'},\n      {latLng: [7.11, 171.06], name: 'Marshall Islands'},\n      {latLng: [17.3, -62.73], name: 'Saint Kitts and Nevis'},\n      {latLng: [3.2, 73.22], name: 'Maldives'},\n      {latLng: [35.88, 14.5], name: 'Malta'},\n      {latLng: [12.05, -61.75], name: 'Grenada'},\n      {latLng: [13.16, -61.23], name: 'Saint Vincent and the Grenadines'},\n      {latLng: [13.16, -59.55], name: 'Barbados'},\n      {latLng: [17.11, -61.85], name: 'Antigua and Barbuda'},\n      {latLng: [-4.61, 55.45], name: 'Seychelles'},\n      {latLng: [7.35, 134.46], name: 'Palau'},\n      {latLng: [42.5, 1.51], name: 'Andorra'},\n      {latLng: [14.01, -60.98], name: 'Saint Lucia'},\n      {latLng: [6.91, 158.18], name: 'Federated States of Micronesia'},\n      {latLng: [1.3, 103.8], name: 'Singapore'},\n      {latLng: [1.46, 173.03], name: 'Kiribati'},\n      {latLng: [-21.13, -175.2], name: 'Tonga'},\n      {latLng: [15.3, -61.38], name: 'Dominica'},\n      {latLng: [-20.2, 57.5], name: 'Mauritius'},\n      {latLng: [26.02, 50.55], name: 'Bahrain'},\n      {latLng: [0.33, 6.73], name: 'São Tomé and Príncipe'}\n    ]\n  });\n  \n});\n"
  },
  {
    "path": "public/assets/dashboard/iCheck/all.css",
    "content": "/* iCheck plugin skins\n----------------------------------- */\n@import url(\"minimal/_all.css\");\n/*\n@import url(\"minimal/minimal.css\");\n@import url(\"minimal/red.css\");\n@import url(\"minimal/green.css\");\n@import url(\"minimal/blue.css\");\n@import url(\"minimal/aero.css\");\n@import url(\"minimal/grey.css\");\n@import url(\"minimal/orange.css\");\n@import url(\"minimal/yellow.css\");\n@import url(\"minimal/pink.css\");\n@import url(\"minimal/purple.css\");\n*/\n\n@import url(\"square/_all.css\");\n/*\n@import url(\"square/square.css\");\n@import url(\"square/red.css\");\n@import url(\"square/green.css\");\n@import url(\"square/blue.css\");\n@import url(\"square/aero.css\");\n@import url(\"square/grey.css\");\n@import url(\"square/orange.css\");\n@import url(\"square/yellow.css\");\n@import url(\"square/pink.css\");\n@import url(\"square/purple.css\");\n*/\n\n@import url(\"flat/_all.css\");\n/*\n@import url(\"flat/flat.css\");\n@import url(\"flat/red.css\");\n@import url(\"flat/green.css\");\n@import url(\"flat/blue.css\");\n@import url(\"flat/aero.css\");\n@import url(\"flat/grey.css\");\n@import url(\"flat/orange.css\");\n@import url(\"flat/yellow.css\");\n@import url(\"flat/pink.css\");\n@import url(\"flat/purple.css\");\n*/\n\n@import url(\"line/_all.css\");\n/*\n@import url(\"line/line.css\");\n@import url(\"line/red.css\");\n@import url(\"line/green.css\");\n@import url(\"line/blue.css\");\n@import url(\"line/aero.css\");\n@import url(\"line/grey.css\");\n@import url(\"line/orange.css\");\n@import url(\"line/yellow.css\");\n@import url(\"line/pink.css\");\n@import url(\"line/purple.css\");\n*/\n\n@import url(\"polaris/polaris.css\");\n\n@import url(\"futurico/futurico.css\");"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/_all.css",
    "content": "/* iCheck plugin Flat skin\n----------------------------------- */\n.icheckbox_flat,\n.iradio_flat {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(flat.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat {\n    background-position: 0 0;\n}\n    .icheckbox_flat.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat {\n    background-position: -88px 0;\n}\n    .iradio_flat.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat,\n    .iradio_flat {\n        background-image: url(flat@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* red */\n.icheckbox_flat-red,\n.iradio_flat-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-red {\n    background-position: 0 0;\n}\n    .icheckbox_flat-red.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-red.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-red.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-red {\n    background-position: -88px 0;\n}\n    .iradio_flat-red.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-red.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-red.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-red,\n    .iradio_flat-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* green */\n.icheckbox_flat-green,\n.iradio_flat-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-green {\n    background-position: 0 0;\n}\n    .icheckbox_flat-green.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-green.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-green.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-green {\n    background-position: -88px 0;\n}\n    .iradio_flat-green.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-green.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-green.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-green,\n    .iradio_flat-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* blue */\n.icheckbox_flat-blue,\n.iradio_flat-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-blue {\n    background-position: 0 0;\n}\n    .icheckbox_flat-blue.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-blue.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-blue.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-blue {\n    background-position: -88px 0;\n}\n    .iradio_flat-blue.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-blue.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-blue.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-blue,\n    .iradio_flat-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* aero */\n.icheckbox_flat-aero,\n.iradio_flat-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-aero {\n    background-position: 0 0;\n}\n    .icheckbox_flat-aero.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-aero.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-aero.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-aero {\n    background-position: -88px 0;\n}\n    .iradio_flat-aero.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-aero.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-aero.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-aero,\n    .iradio_flat-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* grey */\n.icheckbox_flat-grey,\n.iradio_flat-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-grey {\n    background-position: 0 0;\n}\n    .icheckbox_flat-grey.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-grey.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-grey.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-grey {\n    background-position: -88px 0;\n}\n    .iradio_flat-grey.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-grey.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-grey.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-grey,\n    .iradio_flat-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* orange */\n.icheckbox_flat-orange,\n.iradio_flat-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-orange {\n    background-position: 0 0;\n}\n    .icheckbox_flat-orange.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-orange.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-orange.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-orange {\n    background-position: -88px 0;\n}\n    .iradio_flat-orange.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-orange.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-orange.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-orange,\n    .iradio_flat-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* yellow */\n.icheckbox_flat-yellow,\n.iradio_flat-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_flat-yellow.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-yellow.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-yellow.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-yellow {\n    background-position: -88px 0;\n}\n    .iradio_flat-yellow.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-yellow.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-yellow.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-yellow,\n    .iradio_flat-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* pink */\n.icheckbox_flat-pink,\n.iradio_flat-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-pink {\n    background-position: 0 0;\n}\n    .icheckbox_flat-pink.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-pink.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-pink.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-pink {\n    background-position: -88px 0;\n}\n    .iradio_flat-pink.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-pink.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-pink.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-pink,\n    .iradio_flat-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}\n\n/* purple */\n.icheckbox_flat-purple,\n.iradio_flat-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-purple {\n    background-position: 0 0;\n}\n    .icheckbox_flat-purple.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-purple.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-purple.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-purple {\n    background-position: -88px 0;\n}\n    .iradio_flat-purple.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-purple.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-purple.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-purple,\n    .iradio_flat-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/aero.css",
    "content": "/* iCheck plugin Flat skin, aero\n----------------------------------- */\n.icheckbox_flat-aero,\n.iradio_flat-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-aero {\n    background-position: 0 0;\n}\n    .icheckbox_flat-aero.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-aero.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-aero.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-aero {\n    background-position: -88px 0;\n}\n    .iradio_flat-aero.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-aero.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-aero.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-aero,\n    .iradio_flat-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/blue.css",
    "content": "/* iCheck plugin Flat skin, blue\n----------------------------------- */\n.icheckbox_flat-blue,\n.iradio_flat-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-blue {\n    background-position: 0 0;\n}\n    .icheckbox_flat-blue.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-blue.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-blue.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-blue {\n    background-position: -88px 0;\n}\n    .iradio_flat-blue.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-blue.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-blue.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-blue,\n    .iradio_flat-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/flat.css",
    "content": "/* iCheck plugin flat skin, black\n----------------------------------- */\n.icheckbox_flat,\n.iradio_flat {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(flat.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat {\n    background-position: 0 0;\n}\n    .icheckbox_flat.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat {\n    background-position: -88px 0;\n}\n    .iradio_flat.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat,\n    .iradio_flat {\n        background-image: url(flat@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/green.css",
    "content": "/* iCheck plugin Flat skin, green\n----------------------------------- */\n.icheckbox_flat-green,\n.iradio_flat-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-green {\n    background-position: 0 0;\n}\n    .icheckbox_flat-green.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-green.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-green.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-green {\n    background-position: -88px 0;\n}\n    .iradio_flat-green.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-green.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-green.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-green,\n    .iradio_flat-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/grey.css",
    "content": "/* iCheck plugin Flat skin, grey\n----------------------------------- */\n.icheckbox_flat-grey,\n.iradio_flat-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-grey {\n    background-position: 0 0;\n}\n    .icheckbox_flat-grey.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-grey.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-grey.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-grey {\n    background-position: -88px 0;\n}\n    .iradio_flat-grey.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-grey.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-grey.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-grey,\n    .iradio_flat-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/orange.css",
    "content": "/* iCheck plugin Flat skin, orange\n----------------------------------- */\n.icheckbox_flat-orange,\n.iradio_flat-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-orange {\n    background-position: 0 0;\n}\n    .icheckbox_flat-orange.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-orange.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-orange.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-orange {\n    background-position: -88px 0;\n}\n    .iradio_flat-orange.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-orange.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-orange.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-orange,\n    .iradio_flat-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/pink.css",
    "content": "/* iCheck plugin Flat skin, pink\n----------------------------------- */\n.icheckbox_flat-pink,\n.iradio_flat-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-pink {\n    background-position: 0 0;\n}\n    .icheckbox_flat-pink.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-pink.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-pink.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-pink {\n    background-position: -88px 0;\n}\n    .iradio_flat-pink.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-pink.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-pink.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-pink,\n    .iradio_flat-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/purple.css",
    "content": "/* iCheck plugin Flat skin, purple\n----------------------------------- */\n.icheckbox_flat-purple,\n.iradio_flat-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-purple {\n    background-position: 0 0;\n}\n    .icheckbox_flat-purple.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-purple.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-purple.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-purple {\n    background-position: -88px 0;\n}\n    .iradio_flat-purple.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-purple.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-purple.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-purple,\n    .iradio_flat-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/red.css",
    "content": "/* iCheck plugin Flat skin, red\n----------------------------------- */\n.icheckbox_flat-red,\n.iradio_flat-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-red {\n    background-position: 0 0;\n}\n    .icheckbox_flat-red.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-red.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-red.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-red {\n    background-position: -88px 0;\n}\n    .iradio_flat-red.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-red.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-red.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-red,\n    .iradio_flat-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/flat/yellow.css",
    "content": "/* iCheck plugin Flat skin, yellow\n----------------------------------- */\n.icheckbox_flat-yellow,\n.iradio_flat-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 20px;\n    height: 20px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_flat-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_flat-yellow.checked {\n        background-position: -22px 0;\n    }\n    .icheckbox_flat-yellow.disabled {\n        background-position: -44px 0;\n        cursor: default;\n    }\n    .icheckbox_flat-yellow.checked.disabled {\n        background-position: -66px 0;\n    }\n\n.iradio_flat-yellow {\n    background-position: -88px 0;\n}\n    .iradio_flat-yellow.checked {\n        background-position: -110px 0;\n    }\n    .iradio_flat-yellow.disabled {\n        background-position: -132px 0;\n        cursor: default;\n    }\n    .iradio_flat-yellow.checked.disabled {\n        background-position: -154px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_flat-yellow,\n    .iradio_flat-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 176px 22px;\n        background-size: 176px 22px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/futurico/futurico.css",
    "content": "/* iCheck plugin Futurico skin\n----------------------------------- */\n.icheckbox_futurico,\n.iradio_futurico {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 16px;\n    height: 17px;\n    background: url(futurico.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_futurico {\n    background-position: 0 0;\n}\n    .icheckbox_futurico.checked {\n        background-position: -18px 0;\n    }\n    .icheckbox_futurico.disabled {\n        background-position: -36px 0;\n        cursor: default;\n    }\n    .icheckbox_futurico.checked.disabled {\n        background-position: -54px 0;\n    }\n\n.iradio_futurico {\n    background-position: -72px 0;\n}\n    .iradio_futurico.checked {\n        background-position: -90px 0;\n    }\n    .iradio_futurico.disabled {\n        background-position: -108px 0;\n        cursor: default;\n    }\n    .iradio_futurico.checked.disabled {\n        background-position: -126px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_futurico,\n    .iradio_futurico {\n        background-image: url(futurico@2x.png);\n        -webkit-background-size: 144px 19px;\n        background-size: 144px 19px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/icheck.js",
    "content": "/*!\n * iCheck v1.0.1, http://git.io/arlzeA\n * =================================\n * Powerful jQuery and Zepto plugin for checkboxes and radio buttons customization\n *\n * (c) 2013 Damir Sultanov, http://fronteed.com\n * MIT Licensed\n */\n\n(function($) {\n\n  // Cached vars\n  var _iCheck = 'iCheck',\n    _iCheckHelper = _iCheck + '-helper',\n    _checkbox = 'checkbox',\n    _radio = 'radio',\n    _checked = 'checked',\n    _unchecked = 'un' + _checked,\n    _disabled = 'disabled',\n    _determinate = 'determinate',\n    _indeterminate = 'in' + _determinate,\n    _update = 'update',\n    _type = 'type',\n    _click = 'click',\n    _touch = 'touchbegin.i touchend.i',\n    _add = 'addClass',\n    _remove = 'removeClass',\n    _callback = 'trigger',\n    _label = 'label',\n    _cursor = 'cursor',\n    _mobile = /ipad|iphone|ipod|android|blackberry|windows phone|opera mini|silk/i.test(navigator.userAgent);\n\n  // Plugin init\n  $.fn[_iCheck] = function(options, fire) {\n\n    // Walker\n    var handle = 'input[type=\"' + _checkbox + '\"], input[type=\"' + _radio + '\"]',\n      stack = $(),\n      walker = function(object) {\n        object.each(function() {\n          var self = $(this);\n\n          if (self.is(handle)) {\n            stack = stack.add(self);\n          } else {\n            stack = stack.add(self.find(handle));\n          }\n        });\n      };\n\n    // Check if we should operate with some method\n    if (/^(check|uncheck|toggle|indeterminate|determinate|disable|enable|update|destroy)$/i.test(options)) {\n\n      // Normalize method's name\n      options = options.toLowerCase();\n\n      // Find checkboxes and radio buttons\n      walker(this);\n\n      return stack.each(function() {\n        var self = $(this);\n\n        if (options == 'destroy') {\n          tidy(self, 'ifDestroyed');\n        } else {\n          operate(self, true, options);\n        }\n          // Fire method's callback\n        if ($.isFunction(fire)) {\n          fire();\n        }\n      });\n\n    // Customization\n    } else if (typeof options == 'object' || !options) {\n\n      // Check if any options were passed\n      var settings = $.extend({\n          checkedClass: _checked,\n          disabledClass: _disabled,\n          indeterminateClass: _indeterminate,\n          labelHover: true,\n          aria: false\n        }, options),\n\n        selector = settings.handle,\n        hoverClass = settings.hoverClass || 'hover',\n        focusClass = settings.focusClass || 'focus',\n        activeClass = settings.activeClass || 'active',\n        labelHover = !!settings.labelHover,\n        labelHoverClass = settings.labelHoverClass || 'hover',\n\n        // Setup clickable area\n        area = ('' + settings.increaseArea).replace('%', '') | 0;\n\n      // Selector limit\n      if (selector == _checkbox || selector == _radio) {\n        handle = 'input[type=\"' + selector + '\"]';\n      }\n        // Clickable area limit\n      if (area < -50) {\n        area = -50;\n      }\n        // Walk around the selector\n      walker(this);\n\n      return stack.each(function() {\n        var self = $(this);\n\n        // If already customized\n        tidy(self);\n\n        var node = this,\n          id = node.id,\n\n          // Layer styles\n          offset = -area + '%',\n          size = 100 + (area * 2) + '%',\n          layer = {\n            position: 'absolute',\n            top: offset,\n            left: offset,\n            display: 'block',\n            width: size,\n            height: size,\n            margin: 0,\n            padding: 0,\n            background: '#fff',\n            border: 0,\n            opacity: 0\n          },\n\n          // Choose how to hide input\n          hide = _mobile ? {\n            position: 'absolute',\n            visibility: 'hidden'\n          } : area ? layer : {\n            position: 'absolute',\n            opacity: 0\n          },\n\n          // Get proper class\n          className = node[_type] == _checkbox ? settings.checkboxClass || 'i' + _checkbox : settings.radioClass || 'i' + _radio,\n\n          // Find assigned labels\n          label = $(_label + '[for=\"' + id + '\"]').add(self.closest(_label)),\n\n          // Check ARIA option\n          aria = !!settings.aria,\n\n          // Set ARIA placeholder\n          ariaID = _iCheck + '-' + Math.random().toString(36).replace('0.', ''),\n\n          // Parent & helper\n          parent = '<div class=\"' + className + '\" ' + (aria ? 'role=\"' + node[_type] + '\" ' : ''),\n          helper;\n\n        // Set ARIA \"labelledby\"\n        if (label.length && aria) {\n          label.each(function() {\n            parent += 'aria-labelledby=\"';\n\n            if (this.id) {\n              parent += this.id;\n            } else {\n              this.id = ariaID;\n              parent += ariaID;\n            }\n\n            parent += '\"';\n          });\n        }\n          // Wrap input\n        parent = self.wrap(parent + '/>')[_callback]('ifCreated').parent().append(settings.insert);\n\n        // Layer addition\n        helper = $('<ins class=\"' + _iCheckHelper + '\"/>').css(layer).appendTo(parent);\n\n        // Finalize customization\n        self.data(_iCheck, {o: settings, s: self.attr('style')}).css(hide);\n        !!settings.inheritClass && parent[_add](node.className || '');\n        !!settings.inheritID && id && parent.attr('id', _iCheck + '-' + id);\n        parent.css('position') == 'static' && parent.css('position', 'relative');\n        operate(self, true, _update);\n\n        // Label events\n        if (label.length) {\n          label.on(_click + '.i mouseover.i mouseout.i ' + _touch, function(event) {\n            var type = event[_type],\n              item = $(this);\n\n            // Do nothing if input is disabled\n            if (!node[_disabled]) {\n\n              // Click\n              if (type == _click) {\n                if ($(event.target).is('a')) {\n                  return;\n                }\n                operate(self, false, true);\n\n              // Hover state\n              } else if (labelHover) {\n\n                // mouseout|touchend\n                if (/ut|nd/.test(type)) {\n                  parent[_remove](hoverClass);\n                  item[_remove](labelHoverClass);\n                } else {\n                  parent[_add](hoverClass);\n                  item[_add](labelHoverClass);\n                }\n              }\n                if (_mobile) {\n                event.stopPropagation();\n              } else {\n                return false;\n              }\n            }\n          });\n        }\n          // Input events\n        self.on(_click + '.i focus.i blur.i keyup.i keydown.i keypress.i', function(event) {\n          var type = event[_type],\n            key = event.keyCode;\n\n          // Click\n          if (type == _click) {\n            return false;\n\n          // Keydown\n          } else if (type == 'keydown' && key == 32) {\n            if (!(node[_type] == _radio && node[_checked])) {\n              if (node[_checked]) {\n                off(self, _checked);\n              } else {\n                on(self, _checked);\n              }\n            }\n              return false;\n\n          // Keyup\n          } else if (type == 'keyup' && node[_type] == _radio) {\n            !node[_checked] && on(self, _checked);\n\n          // Focus/blur\n          } else if (/us|ur/.test(type)) {\n            parent[type == 'blur' ? _remove : _add](focusClass);\n          }\n        });\n\n        // Helper events\n        helper.on(_click + ' mousedown mouseup mouseover mouseout ' + _touch, function(event) {\n          var type = event[_type],\n\n            // mousedown|mouseup\n            toggle = /wn|up/.test(type) ? activeClass : hoverClass;\n\n          // Do nothing if input is disabled\n          if (!node[_disabled]) {\n\n            // Click\n            if (type == _click) {\n              operate(self, false, true);\n\n            // Active and hover states\n            } else {\n\n              // State is on\n              if (/wn|er|in/.test(type)) {\n\n                // mousedown|mouseover|touchbegin\n                parent[_add](toggle);\n\n              // State is off\n              } else {\n                parent[_remove](toggle + ' ' + activeClass);\n              }\n                // Label hover\n              if (label.length && labelHover && toggle == hoverClass) {\n\n                // mouseout|touchend\n                label[/ut|nd/.test(type) ? _remove : _add](labelHoverClass);\n              }\n            }\n              if (_mobile) {\n              event.stopPropagation();\n            } else {\n              return false;\n            }\n          }\n        });\n      });\n    } else {\n      return this;\n    }\n  };\n\n  // Do something with inputs\n  function operate(input, direct, method) {\n    var node = input[0],\n      state = /er/.test(method) ? _indeterminate : /bl/.test(method) ? _disabled : _checked,\n      active = method == _update ? {\n        checked: node[_checked],\n        disabled: node[_disabled],\n        indeterminate: input.attr(_indeterminate) == 'true' || input.attr(_determinate) == 'false'\n      } : node[state];\n\n    // Check, disable or indeterminate\n    if (/^(ch|di|in)/.test(method) && !active) {\n      on(input, state);\n\n    // Uncheck, enable or determinate\n    } else if (/^(un|en|de)/.test(method) && active) {\n      off(input, state);\n\n    // Update\n    } else if (method == _update) {\n\n      // Handle states\n      for (var state in active) {\n        if (active[state]) {\n          on(input, state, true);\n        } else {\n          off(input, state, true);\n        }\n      }\n    } else if (!direct || method == 'toggle') {\n\n      // Helper or label was clicked\n      if (!direct) {\n        input[_callback]('ifClicked');\n      }\n        // Toggle checked state\n      if (active) {\n        if (node[_type] !== _radio) {\n          off(input, state);\n        }\n      } else {\n        on(input, state);\n      }\n    }\n  }\n    // Add checked, disabled or indeterminate state\n  function on(input, state, keep) {\n    var node = input[0],\n      parent = input.parent(),\n      checked = state == _checked,\n      indeterminate = state == _indeterminate,\n      disabled = state == _disabled,\n      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',\n      regular = option(input, callback + capitalize(node[_type])),\n      specific = option(input, state + capitalize(node[_type]));\n\n    // Prevent unnecessary actions\n    if (node[state] !== true) {\n\n      // Toggle assigned radio buttons\n      if (!keep && state == _checked && node[_type] == _radio && node.name) {\n        var form = input.closest('form'),\n          inputs = 'input[name=\"' + node.name + '\"]';\n\n        inputs = form.length ? form.find(inputs) : $(inputs);\n\n        inputs.each(function() {\n          if (this !== node && $(this).data(_iCheck)) {\n            off($(this), state);\n          }\n        });\n      }\n        // Indeterminate state\n      if (indeterminate) {\n\n        // Add indeterminate state\n        node[state] = true;\n\n        // Remove checked state\n        if (node[_checked]) {\n          off(input, _checked, 'force');\n        }\n          // Checked or disabled state\n      } else {\n\n        // Add checked or disabled state\n        if (!keep) {\n          node[state] = true;\n        }\n          // Remove indeterminate state\n        if (checked && node[_indeterminate]) {\n          off(input, _indeterminate, false);\n        }\n      }\n        // Trigger callbacks\n      callbacks(input, checked, state, keep);\n    }\n      // Add proper cursor\n    if (node[_disabled] && !!option(input, _cursor, true)) {\n      parent.find('.' + _iCheckHelper).css(_cursor, 'default');\n    }\n      // Add state class\n    parent[_add](specific || option(input, state) || '');\n\n    // Set ARIA attribute\n    disabled ? parent.attr('aria-disabled', 'true') : parent.attr('aria-checked', indeterminate ? 'mixed' : 'true');\n\n    // Remove regular state class\n    parent[_remove](regular || option(input, callback) || '');\n  }\n    // Remove checked, disabled or indeterminate state\n  function off(input, state, keep) {\n    var node = input[0],\n      parent = input.parent(),\n      checked = state == _checked,\n      indeterminate = state == _indeterminate,\n      disabled = state == _disabled,\n      callback = indeterminate ? _determinate : checked ? _unchecked : 'enabled',\n      regular = option(input, callback + capitalize(node[_type])),\n      specific = option(input, state + capitalize(node[_type]));\n\n    // Prevent unnecessary actions\n    if (node[state] !== false) {\n\n      // Toggle state\n      if (indeterminate || !keep || keep == 'force') {\n        node[state] = false;\n      }\n        // Trigger callbacks\n      callbacks(input, checked, callback, keep);\n    }\n      // Add proper cursor\n    if (!node[_disabled] && !!option(input, _cursor, true)) {\n      parent.find('.' + _iCheckHelper).css(_cursor, 'pointer');\n    }\n      // Remove state class\n    parent[_remove](specific || option(input, state) || '');\n\n    // Set ARIA attribute\n    disabled ? parent.attr('aria-disabled', 'false') : parent.attr('aria-checked', 'false');\n\n    // Add regular state class\n    parent[_add](regular || option(input, callback) || '');\n  }\n    // Remove all traces\n  function tidy(input, callback) {\n    if (input.data(_iCheck)) {\n\n      // Remove everything except input\n      input.parent().html(input.attr('style', input.data(_iCheck).s || ''));\n\n      // Callback\n      if (callback) {\n        input[_callback](callback);\n      }\n        // Unbind events\n      input.off('.i').unwrap();\n      $(_label + '[for=\"' + input[0].id + '\"]').add(input.closest(_label)).off('.i');\n    }\n  }\n    // Get some option\n  function option(input, state, regular) {\n    if (input.data(_iCheck)) {\n      return input.data(_iCheck).o[state + (regular ? '' : 'Class')];\n    }\n  }\n    // Capitalize some string\n  function capitalize(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n  }\n    // Executable handlers\n  function callbacks(input, checked, callback, keep) {\n    if (!keep) {\n      if (checked) {\n        input[_callback]('ifToggled');\n      }\n        input[_callback]('ifChanged')[_callback]('if' + capitalize(callback));\n    }\n  }\n})(window.jQuery || window.Zepto);\n"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/_all.css",
    "content": "/* iCheck plugin Line skin\n----------------------------------- */\n.icheckbox_line,\n.iradio_line {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #000;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line.hover,\n    .icheckbox_line.checked.hover,\n    .iradio_line.hover {\n        background: #444;\n    }\n    .icheckbox_line.checked,\n    .iradio_line.checked {\n        background: #000;\n    }\n        .icheckbox_line.checked .icheck_line-icon,\n        .iradio_line.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line.disabled,\n    .iradio_line.disabled {\n        background: #ccc;\n        cursor: default;\n    }\n        .icheckbox_line.disabled .icheck_line-icon,\n        .iradio_line.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line.checked.disabled,\n    .iradio_line.checked.disabled {\n        background: #ccc;\n    }\n        .icheckbox_line.checked.disabled .icheck_line-icon,\n        .iradio_line.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* red */\n.icheckbox_line-red,\n.iradio_line-red {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #e56c69;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-red.hover,\n    .icheckbox_line-red.checked.hover,\n    .iradio_line-red.hover {\n        background: #E98582;\n    }\n    .icheckbox_line-red.checked,\n    .iradio_line-red.checked {\n        background: #e56c69;\n    }\n        .icheckbox_line-red.checked .icheck_line-icon,\n        .iradio_line-red.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-red.disabled,\n    .iradio_line-red.disabled {\n        background: #F7D3D2;\n        cursor: default;\n    }\n        .icheckbox_line-red.disabled .icheck_line-icon,\n        .iradio_line-red.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-red.checked.disabled,\n    .iradio_line-red.checked.disabled {\n        background: #F7D3D2;\n    }\n        .icheckbox_line-red.checked.disabled .icheck_line-icon,\n        .iradio_line-red.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* green */\n.icheckbox_line-green,\n.iradio_line-green {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #1b7e5a;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-green.hover,\n    .icheckbox_line-green.checked.hover,\n    .iradio_line-green.hover {\n        background: #24AA7A;\n    }\n    .icheckbox_line-green.checked,\n    .iradio_line-green.checked {\n        background: #1b7e5a;\n    }\n        .icheckbox_line-green.checked .icheck_line-icon,\n        .iradio_line-green.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-green.disabled,\n    .iradio_line-green.disabled {\n        background: #89E6C4;\n        cursor: default;\n    }\n        .icheckbox_line-green.disabled .icheck_line-icon,\n        .iradio_line-green.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-green.checked.disabled,\n    .iradio_line-green.checked.disabled {\n        background: #89E6C4;\n    }\n        .icheckbox_line-green.checked.disabled .icheck_line-icon,\n        .iradio_line-green.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* blue */\n.icheckbox_line-blue,\n.iradio_line-blue {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #2489c5;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-blue.hover,\n    .icheckbox_line-blue.checked.hover,\n    .iradio_line-blue.hover {\n        background: #3DA0DB;\n    }\n    .icheckbox_line-blue.checked,\n    .iradio_line-blue.checked {\n        background: #2489c5;\n    }\n        .icheckbox_line-blue.checked .icheck_line-icon,\n        .iradio_line-blue.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-blue.disabled,\n    .iradio_line-blue.disabled {\n        background: #ADD7F0;\n        cursor: default;\n    }\n        .icheckbox_line-blue.disabled .icheck_line-icon,\n        .iradio_line-blue.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-blue.checked.disabled,\n    .iradio_line-blue.checked.disabled {\n        background: #ADD7F0;\n    }\n        .icheckbox_line-blue.checked.disabled .icheck_line-icon,\n        .iradio_line-blue.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* aero */\n.icheckbox_line-aero,\n.iradio_line-aero {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #9cc2cb;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-aero.hover,\n    .icheckbox_line-aero.checked.hover,\n    .iradio_line-aero.hover {\n        background: #B5D1D8;\n    }\n    .icheckbox_line-aero.checked,\n    .iradio_line-aero.checked {\n        background: #9cc2cb;\n    }\n        .icheckbox_line-aero.checked .icheck_line-icon,\n        .iradio_line-aero.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-aero.disabled,\n    .iradio_line-aero.disabled {\n        background: #D2E4E8;\n        cursor: default;\n    }\n        .icheckbox_line-aero.disabled .icheck_line-icon,\n        .iradio_line-aero.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-aero.checked.disabled,\n    .iradio_line-aero.checked.disabled {\n        background: #D2E4E8;\n    }\n        .icheckbox_line-aero.checked.disabled .icheck_line-icon,\n        .iradio_line-aero.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* grey */\n.icheckbox_line-grey,\n.iradio_line-grey {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #73716e;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-grey.hover,\n    .icheckbox_line-grey.checked.hover,\n    .iradio_line-grey.hover {\n        background: #8B8986;\n    }\n    .icheckbox_line-grey.checked,\n    .iradio_line-grey.checked {\n        background: #73716e;\n    }\n        .icheckbox_line-grey.checked .icheck_line-icon,\n        .iradio_line-grey.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-grey.disabled,\n    .iradio_line-grey.disabled {\n        background: #D5D4D3;\n        cursor: default;\n    }\n        .icheckbox_line-grey.disabled .icheck_line-icon,\n        .iradio_line-grey.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-grey.checked.disabled,\n    .iradio_line-grey.checked.disabled {\n        background: #D5D4D3;\n    }\n        .icheckbox_line-grey.checked.disabled .icheck_line-icon,\n        .iradio_line-grey.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* orange */\n.icheckbox_line-orange,\n.iradio_line-orange {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #f70;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-orange.hover,\n    .icheckbox_line-orange.checked.hover,\n    .iradio_line-orange.hover {\n        background: #FF9233;\n    }\n    .icheckbox_line-orange.checked,\n    .iradio_line-orange.checked {\n        background: #f70;\n    }\n        .icheckbox_line-orange.checked .icheck_line-icon,\n        .iradio_line-orange.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-orange.disabled,\n    .iradio_line-orange.disabled {\n        background: #FFD6B3;\n        cursor: default;\n    }\n        .icheckbox_line-orange.disabled .icheck_line-icon,\n        .iradio_line-orange.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-orange.checked.disabled,\n    .iradio_line-orange.checked.disabled {\n        background: #FFD6B3;\n    }\n        .icheckbox_line-orange.checked.disabled .icheck_line-icon,\n        .iradio_line-orange.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* yellow */\n.icheckbox_line-yellow,\n.iradio_line-yellow {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #FFC414;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-yellow.hover,\n    .icheckbox_line-yellow.checked.hover,\n    .iradio_line-yellow.hover {\n        background: #FFD34F;\n    }\n    .icheckbox_line-yellow.checked,\n    .iradio_line-yellow.checked {\n        background: #FFC414;\n    }\n        .icheckbox_line-yellow.checked .icheck_line-icon,\n        .iradio_line-yellow.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-yellow.disabled,\n    .iradio_line-yellow.disabled {\n        background: #FFE495;\n        cursor: default;\n    }\n        .icheckbox_line-yellow.disabled .icheck_line-icon,\n        .iradio_line-yellow.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-yellow.checked.disabled,\n    .iradio_line-yellow.checked.disabled {\n        background: #FFE495;\n    }\n        .icheckbox_line-yellow.checked.disabled .icheck_line-icon,\n        .iradio_line-yellow.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* pink */\n.icheckbox_line-pink,\n.iradio_line-pink {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #a77a94;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-pink.hover,\n    .icheckbox_line-pink.checked.hover,\n    .iradio_line-pink.hover {\n        background: #B995A9;\n    }\n    .icheckbox_line-pink.checked,\n    .iradio_line-pink.checked {\n        background: #a77a94;\n    }\n        .icheckbox_line-pink.checked .icheck_line-icon,\n        .iradio_line-pink.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-pink.disabled,\n    .iradio_line-pink.disabled {\n        background: #E0D0DA;\n        cursor: default;\n    }\n        .icheckbox_line-pink.disabled .icheck_line-icon,\n        .iradio_line-pink.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-pink.checked.disabled,\n    .iradio_line-pink.checked.disabled {\n        background: #E0D0DA;\n    }\n        .icheckbox_line-pink.checked.disabled .icheck_line-icon,\n        .iradio_line-pink.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}\n\n/* purple */\n.icheckbox_line-purple,\n.iradio_line-purple {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #6a5a8c;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-purple.hover,\n    .icheckbox_line-purple.checked.hover,\n    .iradio_line-purple.hover {\n        background: #8677A7;\n    }\n    .icheckbox_line-purple.checked,\n    .iradio_line-purple.checked {\n        background: #6a5a8c;\n    }\n        .icheckbox_line-purple.checked .icheck_line-icon,\n        .iradio_line-purple.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-purple.disabled,\n    .iradio_line-purple.disabled {\n        background: #D2CCDE;\n        cursor: default;\n    }\n        .icheckbox_line-purple.disabled .icheck_line-icon,\n        .iradio_line-purple.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-purple.checked.disabled,\n    .iradio_line-purple.checked.disabled {\n        background: #D2CCDE;\n    }\n        .icheckbox_line-purple.checked.disabled .icheck_line-icon,\n        .iradio_line-purple.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/aero.css",
    "content": "/* iCheck plugin Line skin, aero\n----------------------------------- */\n.icheckbox_line-aero,\n.iradio_line-aero {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #9cc2cb;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-aero.hover,\n    .icheckbox_line-aero.checked.hover,\n    .iradio_line-aero.hover {\n        background: #B5D1D8;\n    }\n    .icheckbox_line-aero.checked,\n    .iradio_line-aero.checked {\n        background: #9cc2cb;\n    }\n        .icheckbox_line-aero.checked .icheck_line-icon,\n        .iradio_line-aero.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-aero.disabled,\n    .iradio_line-aero.disabled {\n        background: #D2E4E8;\n        cursor: default;\n    }\n        .icheckbox_line-aero.disabled .icheck_line-icon,\n        .iradio_line-aero.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-aero.checked.disabled,\n    .iradio_line-aero.checked.disabled {\n        background: #D2E4E8;\n    }\n        .icheckbox_line-aero.checked.disabled .icheck_line-icon,\n        .iradio_line-aero.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-aero .icheck_line-icon,\n    .iradio_line-aero .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/blue.css",
    "content": "/* iCheck plugin Line skin, blue\n----------------------------------- */\n.icheckbox_line-blue,\n.iradio_line-blue {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #2489c5;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-blue.hover,\n    .icheckbox_line-blue.checked.hover,\n    .iradio_line-blue.hover {\n        background: #3DA0DB;\n    }\n    .icheckbox_line-blue.checked,\n    .iradio_line-blue.checked {\n        background: #2489c5;\n    }\n        .icheckbox_line-blue.checked .icheck_line-icon,\n        .iradio_line-blue.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-blue.disabled,\n    .iradio_line-blue.disabled {\n        background: #ADD7F0;\n        cursor: default;\n    }\n        .icheckbox_line-blue.disabled .icheck_line-icon,\n        .iradio_line-blue.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-blue.checked.disabled,\n    .iradio_line-blue.checked.disabled {\n        background: #ADD7F0;\n    }\n        .icheckbox_line-blue.checked.disabled .icheck_line-icon,\n        .iradio_line-blue.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-blue .icheck_line-icon,\n    .iradio_line-blue .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/green.css",
    "content": "/* iCheck plugin Line skin, green\n----------------------------------- */\n.icheckbox_line-green,\n.iradio_line-green {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #1b7e5a;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-green.hover,\n    .icheckbox_line-green.checked.hover,\n    .iradio_line-green.hover {\n        background: #24AA7A;\n    }\n    .icheckbox_line-green.checked,\n    .iradio_line-green.checked {\n        background: #1b7e5a;\n    }\n        .icheckbox_line-green.checked .icheck_line-icon,\n        .iradio_line-green.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-green.disabled,\n    .iradio_line-green.disabled {\n        background: #89E6C4;\n        cursor: default;\n    }\n        .icheckbox_line-green.disabled .icheck_line-icon,\n        .iradio_line-green.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-green.checked.disabled,\n    .iradio_line-green.checked.disabled {\n        background: #89E6C4;\n    }\n        .icheckbox_line-green.checked.disabled .icheck_line-icon,\n        .iradio_line-green.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-green .icheck_line-icon,\n    .iradio_line-green .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/grey.css",
    "content": "/* iCheck plugin Line skin, grey\n----------------------------------- */\n.icheckbox_line-grey,\n.iradio_line-grey {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #73716e;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-grey.hover,\n    .icheckbox_line-grey.checked.hover,\n    .iradio_line-grey.hover {\n        background: #8B8986;\n    }\n    .icheckbox_line-grey.checked,\n    .iradio_line-grey.checked {\n        background: #73716e;\n    }\n        .icheckbox_line-grey.checked .icheck_line-icon,\n        .iradio_line-grey.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-grey.disabled,\n    .iradio_line-grey.disabled {\n        background: #D5D4D3;\n        cursor: default;\n    }\n        .icheckbox_line-grey.disabled .icheck_line-icon,\n        .iradio_line-grey.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-grey.checked.disabled,\n    .iradio_line-grey.checked.disabled {\n        background: #D5D4D3;\n    }\n        .icheckbox_line-grey.checked.disabled .icheck_line-icon,\n        .iradio_line-grey.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-grey .icheck_line-icon,\n    .iradio_line-grey .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/line.css",
    "content": "/* iCheck plugin Line skin, black\n----------------------------------- */\n.icheckbox_line,\n.iradio_line {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #000;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line.hover,\n    .icheckbox_line.checked.hover,\n    .iradio_line.hover {\n        background: #444;\n    }\n    .icheckbox_line.checked,\n    .iradio_line.checked {\n        background: #000;\n    }\n        .icheckbox_line.checked .icheck_line-icon,\n        .iradio_line.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line.disabled,\n    .iradio_line.disabled {\n        background: #ccc;\n        cursor: default;\n    }\n        .icheckbox_line.disabled .icheck_line-icon,\n        .iradio_line.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line.checked.disabled,\n    .iradio_line.checked.disabled {\n        background: #ccc;\n    }\n        .icheckbox_line.checked.disabled .icheck_line-icon,\n        .iradio_line.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line .icheck_line-icon,\n    .iradio_line .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/orange.css",
    "content": "/* iCheck plugin Line skin, orange\n----------------------------------- */\n.icheckbox_line-orange,\n.iradio_line-orange {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #f70;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-orange.hover,\n    .icheckbox_line-orange.checked.hover,\n    .iradio_line-orange.hover {\n        background: #FF9233;\n    }\n    .icheckbox_line-orange.checked,\n    .iradio_line-orange.checked {\n        background: #f70;\n    }\n        .icheckbox_line-orange.checked .icheck_line-icon,\n        .iradio_line-orange.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-orange.disabled,\n    .iradio_line-orange.disabled {\n        background: #FFD6B3;\n        cursor: default;\n    }\n        .icheckbox_line-orange.disabled .icheck_line-icon,\n        .iradio_line-orange.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-orange.checked.disabled,\n    .iradio_line-orange.checked.disabled {\n        background: #FFD6B3;\n    }\n        .icheckbox_line-orange.checked.disabled .icheck_line-icon,\n        .iradio_line-orange.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-orange .icheck_line-icon,\n    .iradio_line-orange .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/pink.css",
    "content": "/* iCheck plugin Line skin, pink\n----------------------------------- */\n.icheckbox_line-pink,\n.iradio_line-pink {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #a77a94;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-pink.hover,\n    .icheckbox_line-pink.checked.hover,\n    .iradio_line-pink.hover {\n        background: #B995A9;\n    }\n    .icheckbox_line-pink.checked,\n    .iradio_line-pink.checked {\n        background: #a77a94;\n    }\n        .icheckbox_line-pink.checked .icheck_line-icon,\n        .iradio_line-pink.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-pink.disabled,\n    .iradio_line-pink.disabled {\n        background: #E0D0DA;\n        cursor: default;\n    }\n        .icheckbox_line-pink.disabled .icheck_line-icon,\n        .iradio_line-pink.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-pink.checked.disabled,\n    .iradio_line-pink.checked.disabled {\n        background: #E0D0DA;\n    }\n        .icheckbox_line-pink.checked.disabled .icheck_line-icon,\n        .iradio_line-pink.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-pink .icheck_line-icon,\n    .iradio_line-pink .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/purple.css",
    "content": "/* iCheck plugin Line skin, purple\n----------------------------------- */\n.icheckbox_line-purple,\n.iradio_line-purple {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #6a5a8c;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-purple.hover,\n    .icheckbox_line-purple.checked.hover,\n    .iradio_line-purple.hover {\n        background: #8677A7;\n    }\n    .icheckbox_line-purple.checked,\n    .iradio_line-purple.checked {\n        background: #6a5a8c;\n    }\n        .icheckbox_line-purple.checked .icheck_line-icon,\n        .iradio_line-purple.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-purple.disabled,\n    .iradio_line-purple.disabled {\n        background: #D2CCDE;\n        cursor: default;\n    }\n        .icheckbox_line-purple.disabled .icheck_line-icon,\n        .iradio_line-purple.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-purple.checked.disabled,\n    .iradio_line-purple.checked.disabled {\n        background: #D2CCDE;\n    }\n        .icheckbox_line-purple.checked.disabled .icheck_line-icon,\n        .iradio_line-purple.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-purple .icheck_line-icon,\n    .iradio_line-purple .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/red.css",
    "content": "/* iCheck plugin Line skin, red\n----------------------------------- */\n.icheckbox_line-red,\n.iradio_line-red {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #e56c69;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-red.hover,\n    .icheckbox_line-red.checked.hover,\n    .iradio_line-red.hover {\n        background: #E98582;\n    }\n    .icheckbox_line-red.checked,\n    .iradio_line-red.checked {\n        background: #e56c69;\n    }\n        .icheckbox_line-red.checked .icheck_line-icon,\n        .iradio_line-red.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-red.disabled,\n    .iradio_line-red.disabled {\n        background: #F7D3D2;\n        cursor: default;\n    }\n        .icheckbox_line-red.disabled .icheck_line-icon,\n        .iradio_line-red.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-red.checked.disabled,\n    .iradio_line-red.checked.disabled {\n        background: #F7D3D2;\n    }\n        .icheckbox_line-red.checked.disabled .icheck_line-icon,\n        .iradio_line-red.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-red .icheck_line-icon,\n    .iradio_line-red .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/line/yellow.css",
    "content": "/* iCheck plugin Line skin, yellow\n----------------------------------- */\n.icheckbox_line-yellow,\n.iradio_line-yellow {\n    position: relative;\n    display: block;\n    margin: 0;\n    padding: 5px 15px 5px 38px;\n    font-size: 13px;\n    line-height: 17px;\n    color: #fff;\n    background: #FFC414;\n    border: none;\n    -webkit-border-radius: 3px;\n    -moz-border-radius: 3px;\n    border-radius: 3px;\n    cursor: pointer;\n}\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        position: absolute;\n        top: 50%;\n        left: 13px;\n        width: 13px;\n        height: 11px;\n        margin: -5px 0 0 0;\n        padding: 0;\n        overflow: hidden;\n        background: url(line.png) no-repeat;\n        border: none;\n    }\n    .icheckbox_line-yellow.hover,\n    .icheckbox_line-yellow.checked.hover,\n    .iradio_line-yellow.hover {\n        background: #FFD34F;\n    }\n    .icheckbox_line-yellow.checked,\n    .iradio_line-yellow.checked {\n        background: #FFC414;\n    }\n        .icheckbox_line-yellow.checked .icheck_line-icon,\n        .iradio_line-yellow.checked .icheck_line-icon {\n            background-position: -15px 0;\n        }\n    .icheckbox_line-yellow.disabled,\n    .iradio_line-yellow.disabled {\n        background: #FFE495;\n        cursor: default;\n    }\n        .icheckbox_line-yellow.disabled .icheck_line-icon,\n        .iradio_line-yellow.disabled .icheck_line-icon {\n            background-position: -30px 0;\n        }\n    .icheckbox_line-yellow.checked.disabled,\n    .iradio_line-yellow.checked.disabled {\n        background: #FFE495;\n    }\n        .icheckbox_line-yellow.checked.disabled .icheck_line-icon,\n        .iradio_line-yellow.checked.disabled .icheck_line-icon {\n            background-position: -45px 0;\n        }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_line-yellow .icheck_line-icon,\n    .iradio_line-yellow .icheck_line-icon {\n        background-image: url(line@2x.png);\n        -webkit-background-size: 60px 13px;\n        background-size: 60px 13px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/_all.css",
    "content": "/* red */\n.icheckbox_minimal-red,\n.iradio_minimal-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-red {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-red.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-red.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-red.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-red.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-red {\n    background-position: -100px 0;\n}\n    .iradio_minimal-red.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-red.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-red.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-red.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-red,\n    .iradio_minimal-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* green */\n.icheckbox_minimal-green,\n.iradio_minimal-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-green {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-green.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-green.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-green.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-green.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-green {\n    background-position: -100px 0;\n}\n    .iradio_minimal-green.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-green.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-green.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-green.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-green,\n    .iradio_minimal-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* blue */\n.icheckbox_minimal-blue,\n.iradio_minimal-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-blue {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-blue.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-blue.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-blue.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-blue.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-blue {\n    background-position: -100px 0;\n}\n    .iradio_minimal-blue.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-blue.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-blue.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-blue.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-blue,\n    .iradio_minimal-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* aero */\n.icheckbox_minimal-aero,\n.iradio_minimal-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-aero {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-aero.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-aero.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-aero.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-aero.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-aero {\n    background-position: -100px 0;\n}\n    .iradio_minimal-aero.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-aero.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-aero.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-aero.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-aero,\n    .iradio_minimal-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* grey */\n.icheckbox_minimal-grey,\n.iradio_minimal-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-grey {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-grey.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-grey.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-grey.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-grey.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-grey {\n    background-position: -100px 0;\n}\n    .iradio_minimal-grey.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-grey.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-grey.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-grey.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-grey,\n    .iradio_minimal-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* orange */\n.icheckbox_minimal-orange,\n.iradio_minimal-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-orange {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-orange.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-orange.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-orange.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-orange.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-orange {\n    background-position: -100px 0;\n}\n    .iradio_minimal-orange.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-orange.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-orange.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-orange.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-orange,\n    .iradio_minimal-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* yellow */\n.icheckbox_minimal-yellow,\n.iradio_minimal-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-yellow.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-yellow.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-yellow.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-yellow.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-yellow {\n    background-position: -100px 0;\n}\n    .iradio_minimal-yellow.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-yellow.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-yellow.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-yellow.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-yellow,\n    .iradio_minimal-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* pink */\n.icheckbox_minimal-pink,\n.iradio_minimal-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-pink {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-pink.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-pink.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-pink.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-pink.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-pink {\n    background-position: -100px 0;\n}\n    .iradio_minimal-pink.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-pink.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-pink.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-pink.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-pink,\n    .iradio_minimal-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}\n\n/* purple */\n.icheckbox_minimal-purple,\n.iradio_minimal-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-purple {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-purple.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-purple.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-purple.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-purple.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-purple {\n    background-position: -100px 0;\n}\n    .iradio_minimal-purple.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-purple.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-purple.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-purple.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-purple,\n    .iradio_minimal-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/aero.css",
    "content": "/* iCheck plugin Minimal skin, aero\n----------------------------------- */\n.icheckbox_minimal-aero,\n.iradio_minimal-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-aero {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-aero.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-aero.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-aero.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-aero.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-aero {\n    background-position: -100px 0;\n}\n    .iradio_minimal-aero.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-aero.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-aero.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-aero.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-aero,\n    .iradio_minimal-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/blue.css",
    "content": "/* iCheck plugin Minimal skin, blue\n----------------------------------- */\n.icheckbox_minimal-blue,\n.iradio_minimal-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-blue {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-blue.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-blue.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-blue.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-blue.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-blue {\n    background-position: -100px 0;\n}\n    .iradio_minimal-blue.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-blue.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-blue.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-blue.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-blue,\n    .iradio_minimal-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/green.css",
    "content": "/* iCheck plugin Minimal skin, green\n----------------------------------- */\n.icheckbox_minimal-green,\n.iradio_minimal-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-green {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-green.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-green.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-green.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-green.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-green {\n    background-position: -100px 0;\n}\n    .iradio_minimal-green.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-green.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-green.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-green.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-green,\n    .iradio_minimal-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/grey.css",
    "content": "/* iCheck plugin Minimal skin, grey\n----------------------------------- */\n.icheckbox_minimal-grey,\n.iradio_minimal-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-grey {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-grey.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-grey.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-grey.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-grey.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-grey {\n    background-position: -100px 0;\n}\n    .iradio_minimal-grey.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-grey.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-grey.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-grey.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-grey,\n    .iradio_minimal-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/minimal.css",
    "content": "/* iCheck plugin Minimal skin, black\n----------------------------------- */\n.icheckbox_minimal,\n.iradio_minimal {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(minimal.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal {\n    background-position: 0 0;\n}\n    .icheckbox_minimal.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal {\n    background-position: -100px 0;\n}\n    .iradio_minimal.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal,\n    .iradio_minimal {\n        background-image: url(minimal@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/orange.css",
    "content": "/* iCheck plugin Minimal skin, orange\n----------------------------------- */\n.icheckbox_minimal-orange,\n.iradio_minimal-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-orange {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-orange.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-orange.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-orange.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-orange.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-orange {\n    background-position: -100px 0;\n}\n    .iradio_minimal-orange.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-orange.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-orange.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-orange.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-orange,\n    .iradio_minimal-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/pink.css",
    "content": "/* iCheck plugin Minimal skin, pink\n----------------------------------- */\n.icheckbox_minimal-pink,\n.iradio_minimal-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-pink {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-pink.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-pink.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-pink.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-pink.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-pink {\n    background-position: -100px 0;\n}\n    .iradio_minimal-pink.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-pink.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-pink.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-pink.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-pink,\n    .iradio_minimal-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/purple.css",
    "content": "/* iCheck plugin Minimal skin, purple\n----------------------------------- */\n.icheckbox_minimal-purple,\n.iradio_minimal-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-purple {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-purple.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-purple.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-purple.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-purple.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-purple {\n    background-position: -100px 0;\n}\n    .iradio_minimal-purple.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-purple.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-purple.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-purple.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-purple,\n    .iradio_minimal-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/red.css",
    "content": "/* iCheck plugin Minimal skin, red\n----------------------------------- */\n.icheckbox_minimal-red,\n.iradio_minimal-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-red {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-red.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-red.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-red.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-red.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-red {\n    background-position: -100px 0;\n}\n    .iradio_minimal-red.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-red.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-red.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-red.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-red,\n    .iradio_minimal-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/minimal/yellow.css",
    "content": "/* iCheck plugin Minimal skin, yellow\n----------------------------------- */\n.icheckbox_minimal-yellow,\n.iradio_minimal-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 18px;\n    height: 18px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_minimal-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_minimal-yellow.hover {\n        background-position: -20px 0;\n    }\n    .icheckbox_minimal-yellow.checked {\n        background-position: -40px 0;\n    }\n    .icheckbox_minimal-yellow.disabled {\n        background-position: -60px 0;\n        cursor: default;\n    }\n    .icheckbox_minimal-yellow.checked.disabled {\n        background-position: -80px 0;\n    }\n\n.iradio_minimal-yellow {\n    background-position: -100px 0;\n}\n    .iradio_minimal-yellow.hover {\n        background-position: -120px 0;\n    }\n    .iradio_minimal-yellow.checked {\n        background-position: -140px 0;\n    }\n    .iradio_minimal-yellow.disabled {\n        background-position: -160px 0;\n        cursor: default;\n    }\n    .iradio_minimal-yellow.checked.disabled {\n        background-position: -180px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 1.5),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_minimal-yellow,\n    .iradio_minimal-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 200px 20px;\n        background-size: 200px 20px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/polaris/polaris.css",
    "content": "/* iCheck plugin Polaris skin\n----------------------------------- */\n.icheckbox_polaris,\n.iradio_polaris {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 29px;\n    height: 29px;\n    background: url(polaris.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_polaris {\n    background-position: 0 0;\n}\n    .icheckbox_polaris.hover {\n        background-position: -31px 0;\n    }\n    .icheckbox_polaris.checked {\n        background-position: -62px 0;\n    }\n    .icheckbox_polaris.disabled {\n        background-position: -93px 0;\n        cursor: default;\n    }\n    .icheckbox_polaris.checked.disabled {\n        background-position: -124px 0;\n    }\n\n.iradio_polaris {\n    background-position: -155px 0;\n}\n    .iradio_polaris.hover {\n        background-position: -186px 0;\n    }\n    .iradio_polaris.checked {\n        background-position: -217px 0;\n    }\n    .iradio_polaris.disabled {\n        background-position: -248px 0;\n        cursor: default;\n    }\n    .iradio_polaris.checked.disabled {\n        background-position: -279px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_polaris,\n    .iradio_polaris {\n        background-image: url(polaris@2x.png);\n        -webkit-background-size: 310px 31px;\n        background-size: 310px 31px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/_all.css",
    "content": "/* iCheck plugin Square skin\n----------------------------------- */\n.icheckbox_square,\n.iradio_square {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(square.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square {\n    background-position: 0 0;\n}\n    .icheckbox_square.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square {\n    background-position: -120px 0;\n}\n    .iradio_square.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square,\n    .iradio_square {\n        background-image: url(square@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* red */\n.icheckbox_square-red,\n.iradio_square-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-red {\n    background-position: 0 0;\n}\n    .icheckbox_square-red.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-red.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-red.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-red.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-red {\n    background-position: -120px 0;\n}\n    .iradio_square-red.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-red.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-red.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-red.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-red,\n    .iradio_square-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* green */\n.icheckbox_square-green,\n.iradio_square-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-green {\n    background-position: 0 0;\n}\n    .icheckbox_square-green.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-green.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-green.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-green.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-green {\n    background-position: -120px 0;\n}\n    .iradio_square-green.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-green.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-green.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-green.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-green,\n    .iradio_square-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* blue */\n.icheckbox_square-blue,\n.iradio_square-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-blue {\n    background-position: 0 0;\n}\n    .icheckbox_square-blue.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-blue.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-blue.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-blue.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-blue {\n    background-position: -120px 0;\n}\n    .iradio_square-blue.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-blue.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-blue.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-blue.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-blue,\n    .iradio_square-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* aero */\n.icheckbox_square-aero,\n.iradio_square-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-aero {\n    background-position: 0 0;\n}\n    .icheckbox_square-aero.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-aero.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-aero.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-aero.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-aero {\n    background-position: -120px 0;\n}\n    .iradio_square-aero.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-aero.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-aero.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-aero.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-aero,\n    .iradio_square-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* grey */\n.icheckbox_square-grey,\n.iradio_square-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-grey {\n    background-position: 0 0;\n}\n    .icheckbox_square-grey.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-grey.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-grey.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-grey.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-grey {\n    background-position: -120px 0;\n}\n    .iradio_square-grey.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-grey.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-grey.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-grey.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-grey,\n    .iradio_square-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* orange */\n.icheckbox_square-orange,\n.iradio_square-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-orange {\n    background-position: 0 0;\n}\n    .icheckbox_square-orange.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-orange.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-orange.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-orange.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-orange {\n    background-position: -120px 0;\n}\n    .iradio_square-orange.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-orange.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-orange.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-orange.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-orange,\n    .iradio_square-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* yellow */\n.icheckbox_square-yellow,\n.iradio_square-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_square-yellow.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-yellow.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-yellow.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-yellow.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-yellow {\n    background-position: -120px 0;\n}\n    .iradio_square-yellow.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-yellow.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-yellow.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-yellow.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-yellow,\n    .iradio_square-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* pink */\n.icheckbox_square-pink,\n.iradio_square-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-pink {\n    background-position: 0 0;\n}\n    .icheckbox_square-pink.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-pink.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-pink.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-pink.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-pink {\n    background-position: -120px 0;\n}\n    .iradio_square-pink.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-pink.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-pink.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-pink.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-pink,\n    .iradio_square-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}\n\n/* purple */\n.icheckbox_square-purple,\n.iradio_square-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-purple {\n    background-position: 0 0;\n}\n    .icheckbox_square-purple.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-purple.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-purple.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-purple.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-purple {\n    background-position: -120px 0;\n}\n    .iradio_square-purple.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-purple.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-purple.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-purple.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-purple,\n    .iradio_square-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/aero.css",
    "content": "/* iCheck plugin Square skin, aero\n----------------------------------- */\n.icheckbox_square-aero,\n.iradio_square-aero {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(aero.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-aero {\n    background-position: 0 0;\n}\n    .icheckbox_square-aero.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-aero.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-aero.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-aero.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-aero {\n    background-position: -120px 0;\n}\n    .iradio_square-aero.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-aero.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-aero.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-aero.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-aero,\n    .iradio_square-aero {\n        background-image: url(aero@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/blue.css",
    "content": "/* iCheck plugin Square skin, blue\n----------------------------------- */\n.icheckbox_square-blue,\n.iradio_square-blue {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(blue.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-blue {\n    background-position: 0 0;\n}\n    .icheckbox_square-blue.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-blue.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-blue.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-blue.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-blue {\n    background-position: -120px 0;\n}\n    .iradio_square-blue.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-blue.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-blue.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-blue.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-blue,\n    .iradio_square-blue {\n        background-image: url(blue@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/green.css",
    "content": "/* iCheck plugin Square skin, green\n----------------------------------- */\n.icheckbox_square-green,\n.iradio_square-green {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(green.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-green {\n    background-position: 0 0;\n}\n    .icheckbox_square-green.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-green.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-green.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-green.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-green {\n    background-position: -120px 0;\n}\n    .iradio_square-green.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-green.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-green.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-green.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-green,\n    .iradio_square-green {\n        background-image: url(green@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/grey.css",
    "content": "/* iCheck plugin Square skin, grey\n----------------------------------- */\n.icheckbox_square-grey,\n.iradio_square-grey {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(grey.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-grey {\n    background-position: 0 0;\n}\n    .icheckbox_square-grey.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-grey.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-grey.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-grey.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-grey {\n    background-position: -120px 0;\n}\n    .iradio_square-grey.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-grey.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-grey.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-grey.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-grey,\n    .iradio_square-grey {\n        background-image: url(grey@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/orange.css",
    "content": "/* iCheck plugin Square skin, orange\n----------------------------------- */\n.icheckbox_square-orange,\n.iradio_square-orange {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(orange.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-orange {\n    background-position: 0 0;\n}\n    .icheckbox_square-orange.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-orange.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-orange.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-orange.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-orange {\n    background-position: -120px 0;\n}\n    .iradio_square-orange.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-orange.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-orange.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-orange.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-orange,\n    .iradio_square-orange {\n        background-image: url(orange@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/pink.css",
    "content": "/* iCheck plugin Square skin, pink\n----------------------------------- */\n.icheckbox_square-pink,\n.iradio_square-pink {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(pink.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-pink {\n    background-position: 0 0;\n}\n    .icheckbox_square-pink.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-pink.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-pink.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-pink.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-pink {\n    background-position: -120px 0;\n}\n    .iradio_square-pink.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-pink.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-pink.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-pink.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-pink,\n    .iradio_square-pink {\n        background-image: url(pink@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/purple.css",
    "content": "/* iCheck plugin Square skin, purple\n----------------------------------- */\n.icheckbox_square-purple,\n.iradio_square-purple {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(purple.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-purple {\n    background-position: 0 0;\n}\n    .icheckbox_square-purple.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-purple.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-purple.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-purple.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-purple {\n    background-position: -120px 0;\n}\n    .iradio_square-purple.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-purple.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-purple.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-purple.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-purple,\n    .iradio_square-purple {\n        background-image: url(purple@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/red.css",
    "content": "/* iCheck plugin Square skin, red\n----------------------------------- */\n.icheckbox_square-red,\n.iradio_square-red {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(red.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-red {\n    background-position: 0 0;\n}\n    .icheckbox_square-red.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-red.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-red.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-red.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-red {\n    background-position: -120px 0;\n}\n    .iradio_square-red.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-red.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-red.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-red.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-red,\n    .iradio_square-red {\n        background-image: url(red@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/square.css",
    "content": "/* iCheck plugin Square skin, black\n----------------------------------- */\n.icheckbox_square,\n.iradio_square {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(square.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square {\n    background-position: 0 0;\n}\n    .icheckbox_square.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square {\n    background-position: -120px 0;\n}\n    .iradio_square.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square,\n    .iradio_square {\n        background-image: url(square@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/iCheck/square/yellow.css",
    "content": "/* iCheck plugin Square skin, yellow\n----------------------------------- */\n.icheckbox_square-yellow,\n.iradio_square-yellow {\n    display: inline-block;\n    *display: inline;\n    vertical-align: middle;\n    margin: 0;\n    padding: 0;\n    width: 22px;\n    height: 22px;\n    background: url(yellow.png) no-repeat;\n    border: none;\n    cursor: pointer;\n}\n\n.icheckbox_square-yellow {\n    background-position: 0 0;\n}\n    .icheckbox_square-yellow.hover {\n        background-position: -24px 0;\n    }\n    .icheckbox_square-yellow.checked {\n        background-position: -48px 0;\n    }\n    .icheckbox_square-yellow.disabled {\n        background-position: -72px 0;\n        cursor: default;\n    }\n    .icheckbox_square-yellow.checked.disabled {\n        background-position: -96px 0;\n    }\n\n.iradio_square-yellow {\n    background-position: -120px 0;\n}\n    .iradio_square-yellow.hover {\n        background-position: -144px 0;\n    }\n    .iradio_square-yellow.checked {\n        background-position: -168px 0;\n    }\n    .iradio_square-yellow.disabled {\n        background-position: -192px 0;\n        cursor: default;\n    }\n    .iradio_square-yellow.checked.disabled {\n        background-position: -216px 0;\n    }\n\n/* Retina support */\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n       only screen and (-moz-min-device-pixel-ratio: 1.5),\n       only screen and (-o-min-device-pixel-ratio: 3/2),\n       only screen and (min-device-pixel-ratio: 1.5) {\n    .icheckbox_square-yellow,\n    .iradio_square-yellow {\n        background-image: url(yellow@2x.png);\n        -webkit-background-size: 240px 24px;\n        background-size: 240px 24px;\n    }\n}"
  },
  {
    "path": "public/assets/dashboard/js/chosen/chosen.css",
    "content": "/*!\nChosen, a Select Box Enhancer for jQuery and Prototype\nby Patrick Filler for Harvest, http://getharvest.com\n\nVersion 1.2.0\nFull source at https://github.com/harvesthq/chosen\nCopyright (c) 2011-2014 Harvest http://getharvest.com\n\nMIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md\nThis file is generated by `grunt build`, do not edit it by hand.\n*/\n\n/* @group Base */\n.chosen-container {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  font-size: 13px;\n  zoom: 1;\n  *display: inline;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  user-select: none;\n}\n.chosen-container * {\n  -webkit-box-sizing: border-box;\n  -moz-box-sizing: border-box;\n  box-sizing: border-box;\n}\n.chosen-container .chosen-drop {\n  position: absolute;\n  top: 100%;\n  left: -9999px;\n  z-index: 1010;\n  width: 100%;\n  border: 1px solid #aaa;\n  border-top: 0;\n  background: #fff;\n  box-shadow: 0 4px 5px rgba(0, 0, 0, 0.15);\n}\n.chosen-container.chosen-with-drop .chosen-drop {\n  left: 0;\n}\n.chosen-container a {\n  cursor: pointer;\n}\n\n/* @end */\n/* @group Single Chosen */\n.chosen-container-single .chosen-single {\n  position: relative;\n  display: block;\n  overflow: hidden;\n  padding: 0 0 0 8px;\n  height: 30px;\n  border: 1px solid #ddd; /*#aaa*/\n  border-radius: 5px;\n  /*background-color: #fff;\n  background: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #ffffff), color-stop(50%, #f6f6f6), color-stop(52%, #eeeeee), color-stop(100%, #f4f4f4));\n  background: -webkit-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n  background: -moz-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n  background: -o-linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n  background: linear-gradient(top, #ffffff 20%, #f6f6f6 50%, #eeeeee 52%, #f4f4f4 100%);\n  background-clip: padding-box;\n  box-shadow: 0 0 3px white inset, 0 1px 1px rgba(0, 0, 0, 0.1);*/\n  color: #444;\n  text-decoration: none;\n  white-space: nowrap;\n  line-height: 30px;\n}\n.chosen-container-single .chosen-default {\n  color: #999;\n}\n.chosen-container-single .chosen-single span {\n  display: block;\n  overflow: hidden;\n  margin-right: 26px;\n  line-height:30px;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n}\n.chosen-container-single .chosen-single-with-deselect span {\n  margin-right: 38px;\n}\n.chosen-container-single .chosen-single abbr {\n  position: absolute;\n  top: 6px;\n  right: 26px;\n  display: block;\n  width: 12px;\n  height: 12px;\n  background: url('chosen-sprite.png') -42px 1px no-repeat;\n  font-size: 1px;\n}\n.chosen-container-single .chosen-single abbr:hover {\n  background-position: -42px -10px;\n}\n.chosen-container-single.chosen-disabled .chosen-single abbr:hover {\n  background-position: -42px -10px;\n}\n.chosen-container-single .chosen-single div {\n  position: absolute;\n  top: 0;\n  right: 0;\n  display: block;\n  width: 18px;\n  height: 100%;\n}\n.chosen-container-single .chosen-single div b {\n  display: block;\n  width: 100%;\n  height: 100%;\n  background: url('chosen-sprite.png') no-repeat 0px 5px;\n}\n.chosen-container-single .chosen-search {\n  position: relative;\n  z-index: 1010;\n  margin: 0;\n  padding: 3px 4px;\n  white-space: nowrap;\n}\n.chosen-container-single .chosen-search input[type=\"text\"] {\n  margin: 1px 0;\n  padding: 4px 20px 4px 5px;\n  width: 100%;\n  height: auto;\n  outline: 0;\n  border: 1px solid #aaa;\n  background: white url('chosen-sprite.png') no-repeat 100% -20px;\n  background: url('chosen-sprite.png') no-repeat 100% -20px;\n  font-size: 1em;\n  font-family: sans-serif;\n  line-height: normal;\n  border-radius: 0;\n}\n.chosen-container-single .chosen-drop {\n  margin-top: -1px;\n  border-radius: 0 0 4px 4px;\n  background-clip: padding-box;\n}\n.chosen-container-single.chosen-container-single-nosearch .chosen-search {\n  position: absolute;\n  left: -9999px;\n}\n\n/* @end */\n/* @group Results */\n.chosen-container .chosen-results {\n  color: #444;\n  position: relative;\n  overflow-x: hidden;\n  overflow-y: auto;\n  margin: 0 4px 4px 0;\n  padding: 0 0 0 4px;\n  max-height: 240px;\n  -webkit-overflow-scrolling: touch;\n}\n.chosen-container .chosen-results li {\n  display: none;\n  margin: 0;\n  padding: 5px 6px;\n  list-style: none;\n  line-height: 15px;\n  word-wrap: break-word;\n  -webkit-touch-callout: none;\n}\n.chosen-container .chosen-results li.active-result {\n  display: list-item;\n  cursor: pointer;\n}\n.chosen-container .chosen-results li.disabled-result {\n  display: list-item;\n  color: #ccc;\n  cursor: default;\n}\n.chosen-container .chosen-results li.highlighted {\n  background-color: #3875d7;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #3875d7), color-stop(90%, #2a62bc));\n  background-image: -webkit-linear-gradient(#3875d7 20%, #2a62bc 90%);\n  background-image: -moz-linear-gradient(#3875d7 20%, #2a62bc 90%);\n  background-image: -o-linear-gradient(#3875d7 20%, #2a62bc 90%);\n  background-image: linear-gradient(#3875d7 20%, #2a62bc 90%);\n  color: #fff;\n}\n.chosen-container .chosen-results li.no-results {\n  color: #777;\n  display: list-item;\n  background: #f4f4f4;\n}\n.chosen-container .chosen-results li.group-result {\n  display: list-item;\n  font-weight: bold;\n  cursor: default;\n}\n.chosen-container .chosen-results li.group-option {\n  padding-left: 15px;\n}\n.chosen-container .chosen-results li em {\n  font-style: normal;\n  text-decoration: underline;\n}\n\n/* @end */\n/* @group Multi Chosen */\n.chosen-container-multi .chosen-choices {\n  position: relative;\n  overflow: hidden;\n  margin: 0;\n  padding: 0 5px;\n  width: 100%;\n  height: auto !important;\n  height: 1%;\n  border: 1px solid #aaa;\n  background-color: #fff;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(1%, #eeeeee), color-stop(15%, #ffffff));\n  background-image: -webkit-linear-gradient(#eeeeee 1%, #ffffff 15%);\n  background-image: -moz-linear-gradient(#eeeeee 1%, #ffffff 15%);\n  background-image: -o-linear-gradient(#eeeeee 1%, #ffffff 15%);\n  background-image: linear-gradient(#eeeeee 1%, #ffffff 15%);\n  cursor: text;\n}\n.chosen-container-multi .chosen-choices li {\n  float: left;\n  list-style: none;\n}\n.chosen-container-multi .chosen-choices li.search-field {\n  margin: 0;\n  padding: 0;\n  white-space: nowrap;\n}\n.chosen-container-multi .chosen-choices li.search-field input[type=\"text\"] {\n  margin: 1px 0;\n  padding: 0;\n  height: 25px;\n  outline: 0;\n  border: 0 !important;\n  background: transparent !important;\n  box-shadow: none;\n  color: #999;\n  font-size: 100%;\n  font-family: sans-serif;\n  line-height: normal;\n  border-radius: 0;\n}\n.chosen-container-multi .chosen-choices li.search-choice {\n  position: relative;\n  margin: 3px 5px 3px 0;\n  padding: 3px 20px 3px 5px;\n  border: 1px solid #aaa;\n  max-width: 100%;\n  border-radius: 3px;\n  background-color: #eeeeee;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));\n  background-image: -webkit-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: -moz-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: -o-linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: linear-gradient(#f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-size: 100% 19px;\n  background-repeat: repeat-x;\n  background-clip: padding-box;\n  box-shadow: 0 0 2px white inset, 0 1px 0 rgba(0, 0, 0, 0.05);\n  color: #333;\n  line-height: 13px;\n  cursor: default;\n}\n.chosen-container-multi .chosen-choices li.search-choice span {\n  word-wrap: break-word;\n}\n.chosen-container-multi .chosen-choices li.search-choice .search-choice-close {\n  position: absolute;\n  top: 4px;\n  right: 3px;\n  display: block;\n  width: 12px;\n  height: 12px;\n  background: url('chosen-sprite.png') -42px 1px no-repeat;\n  font-size: 1px;\n}\n.chosen-container-multi .chosen-choices li.search-choice .search-choice-close:hover {\n  background-position: -42px -10px;\n}\n.chosen-container-multi .chosen-choices li.search-choice-disabled {\n  padding-right: 5px;\n  border: 1px solid #ccc;\n  background-color: #e4e4e4;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #f4f4f4), color-stop(50%, #f0f0f0), color-stop(52%, #e8e8e8), color-stop(100%, #eeeeee));\n  background-image: -webkit-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: -moz-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: -o-linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  background-image: linear-gradient(top, #f4f4f4 20%, #f0f0f0 50%, #e8e8e8 52%, #eeeeee 100%);\n  color: #666;\n}\n.chosen-container-multi .chosen-choices li.search-choice-focus {\n  background: #d4d4d4;\n}\n.chosen-container-multi .chosen-choices li.search-choice-focus .search-choice-close {\n  background-position: -42px -10px;\n}\n.chosen-container-multi .chosen-results {\n  margin: 0;\n  padding: 0;\n}\n.chosen-container-multi .chosen-drop .result-selected {\n  display: list-item;\n  color: #ccc;\n  cursor: default;\n}\n\n/* @end */\n/* @group Active  */\n.chosen-container-active .chosen-single {\n  border: 1px solid #5897fb;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);\n}\n.chosen-container-active.chosen-with-drop .chosen-single {\n  border: 1px solid #aaa;\n  -moz-border-radius-bottomright: 0;\n  border-bottom-right-radius: 0;\n  -moz-border-radius-bottomleft: 0;\n  border-bottom-left-radius: 0;\n  background-image: -webkit-gradient(linear, 50% 0%, 50% 100%, color-stop(20%, #eeeeee), color-stop(80%, #ffffff));\n  background-image: -webkit-linear-gradient(#eeeeee 20%, #ffffff 80%);\n  background-image: -moz-linear-gradient(#eeeeee 20%, #ffffff 80%);\n  background-image: -o-linear-gradient(#eeeeee 20%, #ffffff 80%);\n  background-image: linear-gradient(#eeeeee 20%, #ffffff 80%);\n  box-shadow: 0 1px 0 #fff inset;\n}\n.chosen-container-active.chosen-with-drop .chosen-single div {\n  border-left: none;\n  background: transparent;\n}\n.chosen-container-active.chosen-with-drop .chosen-single div b {\n  background-position: -18px 2px;\n}\n.chosen-container-active .chosen-choices {\n  border: 1px solid #5897fb;\n  box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);\n}\n.chosen-container-active .chosen-choices li.search-field input[type=\"text\"] {\n  color: #222 !important;\n}\n\n/* @end */\n/* @group Disabled Support */\n.chosen-disabled {\n  opacity: 0.5 !important;\n  cursor: default;\n}\n.chosen-disabled .chosen-single {\n  cursor: default;\n}\n.chosen-disabled .chosen-choices .search-choice .search-choice-close {\n  cursor: default;\n}\n\n/* @end */\n/* @group Right to Left */\n.chosen-rtl {\n  text-align: right;\n}\n.chosen-rtl .chosen-single {\n  overflow: visible;\n  padding: 0 8px 0 0;\n}\n.chosen-rtl .chosen-single span {\n  margin-right: 0;\n  margin-left: 26px;\n  direction: rtl;\n}\n.chosen-rtl .chosen-single-with-deselect span {\n  margin-left: 38px;\n}\n.chosen-rtl .chosen-single div {\n  right: auto;\n  left: 3px;\n}\n.chosen-rtl .chosen-single abbr {\n  right: auto;\n  left: 26px;\n}\n.chosen-rtl .chosen-choices li {\n  float: right;\n}\n.chosen-rtl .chosen-choices li.search-field input[type=\"text\"] {\n  direction: rtl;\n}\n.chosen-rtl .chosen-choices li.search-choice {\n  margin: 3px 5px 3px 0;\n  padding: 3px 5px 3px 19px;\n}\n.chosen-rtl .chosen-choices li.search-choice .search-choice-close {\n  right: auto;\n  left: 4px;\n}\n.chosen-rtl.chosen-container-single-nosearch .chosen-search,\n.chosen-rtl .chosen-drop {\n  left: 9999px;\n}\n.chosen-rtl.chosen-container-single .chosen-results {\n  margin: 0 0 4px 4px;\n  padding: 0 4px 0 0;\n}\n.chosen-rtl .chosen-results li.group-option {\n  padding-right: 15px;\n  padding-left: 0;\n}\n.chosen-rtl.chosen-container-active.chosen-with-drop .chosen-single div {\n  border-right: none;\n}\n.chosen-rtl .chosen-search input[type=\"text\"] {\n  padding: 4px 5px 4px 20px;\n  background: white url('chosen-sprite.png') no-repeat -30px -20px;\n  background: url('chosen-sprite.png') no-repeat -30px -20px;\n  direction: rtl;\n}\n.chosen-rtl.chosen-container-single .chosen-single div b {\n  background-position: 6px 2px;\n}\n.chosen-rtl.chosen-container-single.chosen-with-drop .chosen-single div b {\n  background-position: -12px 2px;\n}\n\n/* @end */\n/* @group Retina compatibility */\n@media only screen and (-webkit-min-device-pixel-ratio: 2), only screen and (min-resolution: 144dpi) {\n  .chosen-rtl .chosen-search input[type=\"text\"],\n  .chosen-container-single .chosen-single abbr,\n  .chosen-container-single .chosen-single div b,\n  .chosen-container-single .chosen-search input[type=\"text\"],\n  .chosen-container-multi .chosen-choices .search-choice .search-choice-close,\n  .chosen-container .chosen-results-scroll-down span,\n  .chosen-container .chosen-results-scroll-up span {\n    background-image: url('chosen-sprite@2x.png') !important;\n    background-size: 52px 37px !important;\n    background-repeat: no-repeat !important;\n  }\n}\n/* @end */\n"
  },
  {
    "path": "public/assets/dashboard/js/chosen/chosen.jquery.js",
    "content": "/*!\nChosen, a Select Box Enhancer for jQuery and Prototype\nby Patrick Filler for Harvest, http://getharvest.com\n\nVersion 1.2.0\nFull source at https://github.com/harvesthq/chosen\nCopyright (c) 2011-2014 Harvest http://getharvest.com\n\nMIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md\nThis file is generated by `grunt build`, do not edit it by hand.\n*/\n\n(function() {\n  var $, AbstractChosen, Chosen, SelectParser, _ref,\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n  SelectParser = (function() {\n    function SelectParser() {\n      this.options_index = 0;\n      this.parsed = [];\n    }\n\n    SelectParser.prototype.add_node = function(child) {\n      if (child.nodeName.toUpperCase() === \"OPTGROUP\") {\n        return this.add_group(child);\n      } else {\n        return this.add_option(child);\n      }\n    };\n\n    SelectParser.prototype.add_group = function(group) {\n      var group_position, option, _i, _len, _ref, _results;\n      group_position = this.parsed.length;\n      this.parsed.push({\n        array_index: group_position,\n        group: true,\n        label: this.escapeExpression(group.label),\n        children: 0,\n        disabled: group.disabled\n      });\n      _ref = group.childNodes;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        option = _ref[_i];\n        _results.push(this.add_option(option, group_position, group.disabled));\n      }\n      return _results;\n    };\n\n    SelectParser.prototype.add_option = function(option, group_position, group_disabled) {\n      if (option.nodeName.toUpperCase() === \"OPTION\") {\n        if (option.text !== \"\") {\n          if (group_position != null) {\n            this.parsed[group_position].children += 1;\n          }\n          this.parsed.push({\n            array_index: this.parsed.length,\n            options_index: this.options_index,\n            value: option.value,\n            text: option.text,\n            html: option.innerHTML,\n            selected: option.selected,\n            disabled: group_disabled === true ? group_disabled : option.disabled,\n            group_array_index: group_position,\n            classes: option.className,\n            style: option.style.cssText\n          });\n        } else {\n          this.parsed.push({\n            array_index: this.parsed.length,\n            options_index: this.options_index,\n            empty: true\n          });\n        }\n        return this.options_index += 1;\n      }\n    };\n\n    SelectParser.prototype.escapeExpression = function(text) {\n      var map, unsafe_chars;\n      if ((text == null) || text === false) {\n        return \"\";\n      }\n      if (!/[\\&\\<\\>\\\"\\'\\`]/.test(text)) {\n        return text;\n      }\n      map = {\n        \"<\": \"&lt;\",\n        \">\": \"&gt;\",\n        '\"': \"&quot;\",\n        \"'\": \"&#x27;\",\n        \"`\": \"&#x60;\"\n      };\n      unsafe_chars = /&(?!\\w+;)|[\\<\\>\\\"\\'\\`]/g;\n      return text.replace(unsafe_chars, function(chr) {\n        return map[chr] || \"&amp;\";\n      });\n    };\n\n    return SelectParser;\n\n  })();\n\n  SelectParser.select_to_array = function(select) {\n    var child, parser, _i, _len, _ref;\n    parser = new SelectParser();\n    _ref = select.childNodes;\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      child = _ref[_i];\n      parser.add_node(child);\n    }\n    return parser.parsed;\n  };\n\n  AbstractChosen = (function() {\n    function AbstractChosen(form_field, options) {\n      this.form_field = form_field;\n      this.options = options != null ? options : {};\n      if (!AbstractChosen.browser_is_supported()) {\n        return;\n      }\n      this.is_multiple = this.form_field.multiple;\n      this.set_default_text();\n      this.set_default_values();\n      this.setup();\n      this.set_up_html();\n      this.register_observers();\n    }\n\n    AbstractChosen.prototype.set_default_values = function() {\n      var _this = this;\n      this.click_test_action = function(evt) {\n        return _this.test_active_click(evt);\n      };\n      this.activate_action = function(evt) {\n        return _this.activate_field(evt);\n      };\n      this.active_field = false;\n      this.mouse_on_container = false;\n      this.results_showing = false;\n      this.result_highlighted = null;\n      this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === \"\" ? this.options.allow_single_deselect : false;\n      this.disable_search_threshold = this.options.disable_search_threshold || 0;\n      this.disable_search = this.options.disable_search || false;\n      this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;\n      this.group_search = this.options.group_search != null ? this.options.group_search : true;\n      this.search_contains = this.options.search_contains || false;\n      this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;\n      this.max_selected_options = this.options.max_selected_options || Infinity;\n      this.inherit_select_classes = this.options.inherit_select_classes || false;\n      this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;\n      return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;\n    };\n\n    AbstractChosen.prototype.set_default_text = function() {\n      if (this.form_field.getAttribute(\"data-placeholder\")) {\n        this.default_text = this.form_field.getAttribute(\"data-placeholder\");\n      } else if (this.is_multiple) {\n        this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;\n      } else {\n        this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;\n      }\n      return this.results_none_found = this.form_field.getAttribute(\"data-no_results_text\") || this.options.no_results_text || AbstractChosen.default_no_result_text;\n    };\n\n    AbstractChosen.prototype.mouse_enter = function() {\n      return this.mouse_on_container = true;\n    };\n\n    AbstractChosen.prototype.mouse_leave = function() {\n      return this.mouse_on_container = false;\n    };\n\n    AbstractChosen.prototype.input_focus = function(evt) {\n      var _this = this;\n      if (this.is_multiple) {\n        if (!this.active_field) {\n          return setTimeout((function() {\n            return _this.container_mousedown();\n          }), 50);\n        }\n      } else {\n        if (!this.active_field) {\n          return this.activate_field();\n        }\n      }\n    };\n\n    AbstractChosen.prototype.input_blur = function(evt) {\n      var _this = this;\n      if (!this.mouse_on_container) {\n        this.active_field = false;\n        return setTimeout((function() {\n          return _this.blur_test();\n        }), 100);\n      }\n    };\n\n    AbstractChosen.prototype.results_option_build = function(options) {\n      var content, data, _i, _len, _ref;\n      content = '';\n      _ref = this.results_data;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        data = _ref[_i];\n        if (data.group) {\n          content += this.result_add_group(data);\n        } else {\n          content += this.result_add_option(data);\n        }\n        if (options != null ? options.first : void 0) {\n          if (data.selected && this.is_multiple) {\n            this.choice_build(data);\n          } else if (data.selected && !this.is_multiple) {\n            this.single_set_selected_text(data.text);\n          }\n        }\n      }\n      return content;\n    };\n\n    AbstractChosen.prototype.result_add_option = function(option) {\n      var classes, option_el;\n      if (!option.search_match) {\n        return '';\n      }\n      if (!this.include_option_in_results(option)) {\n        return '';\n      }\n      classes = [];\n      if (!option.disabled && !(option.selected && this.is_multiple)) {\n        classes.push(\"active-result\");\n      }\n      if (option.disabled && !(option.selected && this.is_multiple)) {\n        classes.push(\"disabled-result\");\n      }\n      if (option.selected) {\n        classes.push(\"result-selected\");\n      }\n      if (option.group_array_index != null) {\n        classes.push(\"group-option\");\n      }\n      if (option.classes !== \"\") {\n        classes.push(option.classes);\n      }\n      option_el = document.createElement(\"li\");\n      option_el.className = classes.join(\" \");\n      option_el.style.cssText = option.style;\n      option_el.setAttribute(\"data-option-array-index\", option.array_index);\n      option_el.innerHTML = option.search_text;\n      return this.outerHTML(option_el);\n    };\n\n    AbstractChosen.prototype.result_add_group = function(group) {\n      var group_el;\n      if (!(group.search_match || group.group_match)) {\n        return '';\n      }\n      if (!(group.active_options > 0)) {\n        return '';\n      }\n      group_el = document.createElement(\"li\");\n      group_el.className = \"group-result\";\n      group_el.innerHTML = group.search_text;\n      return this.outerHTML(group_el);\n    };\n\n    AbstractChosen.prototype.results_update_field = function() {\n      this.set_default_text();\n      if (!this.is_multiple) {\n        this.results_reset_cleanup();\n      }\n      this.result_clear_highlight();\n      this.results_build();\n      if (this.results_showing) {\n        return this.winnow_results();\n      }\n    };\n\n    AbstractChosen.prototype.reset_single_select_options = function() {\n      var result, _i, _len, _ref, _results;\n      _ref = this.results_data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        result = _ref[_i];\n        if (result.selected) {\n          _results.push(result.selected = false);\n        } else {\n          _results.push(void 0);\n        }\n      }\n      return _results;\n    };\n\n    AbstractChosen.prototype.results_toggle = function() {\n      if (this.results_showing) {\n        return this.results_hide();\n      } else {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.results_search = function(evt) {\n      if (this.results_showing) {\n        return this.winnow_results();\n      } else {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.winnow_results = function() {\n      var escapedSearchText, option, regex, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;\n      this.no_results_clear();\n      results = 0;\n      searchText = this.get_search_text();\n      escapedSearchText = searchText.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n      zregex = new RegExp(escapedSearchText, 'i');\n      regex = this.get_search_regex(escapedSearchText);\n      _ref = this.results_data;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        option = _ref[_i];\n        option.search_match = false;\n        results_group = null;\n        if (this.include_option_in_results(option)) {\n          if (option.group) {\n            option.group_match = false;\n            option.active_options = 0;\n          }\n          if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {\n            results_group = this.results_data[option.group_array_index];\n            if (results_group.active_options === 0 && results_group.search_match) {\n              results += 1;\n            }\n            results_group.active_options += 1;\n          }\n          if (!(option.group && !this.group_search)) {\n            option.search_text = option.group ? option.label : option.text;\n            option.search_match = this.search_string_match(option.search_text, regex);\n            if (option.search_match && !option.group) {\n              results += 1;\n            }\n            if (option.search_match) {\n              if (searchText.length) {\n                startpos = option.search_text.search(zregex);\n                text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);\n                option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);\n              }\n              if (results_group != null) {\n                results_group.group_match = true;\n              }\n            } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {\n              option.search_match = true;\n            }\n          }\n        }\n      }\n      this.result_clear_highlight();\n      if (results < 1 && searchText.length) {\n        this.update_results_content(\"\");\n        return this.no_results(searchText);\n      } else {\n        this.update_results_content(this.results_option_build());\n        return this.winnow_results_set_highlight();\n      }\n    };\n\n    AbstractChosen.prototype.get_search_regex = function(escaped_search_string) {\n      var regex_anchor;\n      regex_anchor = this.search_contains ? \"\" : \"\";\n      return new RegExp(regex_anchor + escaped_search_string, 'i');\n    };\n\n    AbstractChosen.prototype.search_string_match = function(search_string, regex) {\n      var part, parts, _i, _len;\n      if (regex.test(search_string)) {\n        return true;\n      } else if (this.enable_split_word_search && (search_string.indexOf(\" \") >= 0 || search_string.indexOf(\"[\") === 0)) {\n        parts = search_string.replace(/\\[|\\]/g, \"\").split(\" \");\n        if (parts.length) {\n          for (_i = 0, _len = parts.length; _i < _len; _i++) {\n            part = parts[_i];\n            if (regex.test(part)) {\n              return true;\n            }\n          }\n        }\n      }\n    };\n\n    AbstractChosen.prototype.choices_count = function() {\n      var option, _i, _len, _ref;\n      if (this.selected_option_count != null) {\n        return this.selected_option_count;\n      }\n      this.selected_option_count = 0;\n      _ref = this.form_field.options;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        option = _ref[_i];\n        if (option.selected) {\n          this.selected_option_count += 1;\n        }\n      }\n      return this.selected_option_count;\n    };\n\n    AbstractChosen.prototype.choices_click = function(evt) {\n      evt.preventDefault();\n      if (!(this.results_showing || this.is_disabled)) {\n        return this.results_show();\n      }\n    };\n\n    AbstractChosen.prototype.keyup_checker = function(evt) {\n      var stroke, _ref;\n      stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;\n      this.search_field_scale();\n      switch (stroke) {\n        case 8:\n          if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {\n            return this.keydown_backstroke();\n          } else if (!this.pending_backstroke) {\n            this.result_clear_highlight();\n            return this.results_search();\n          }\n          break;\n        case 13:\n          evt.preventDefault();\n          if (this.results_showing) {\n            return this.result_select(evt);\n          }\n          break;\n        case 27:\n          if (this.results_showing) {\n            this.results_hide();\n          }\n          return true;\n        case 9:\n        case 38:\n        case 40:\n        case 16:\n        case 91:\n        case 17:\n          break;\n        default:\n          return this.results_search();\n      }\n    };\n\n    AbstractChosen.prototype.clipboard_event_checker = function(evt) {\n      var _this = this;\n      return setTimeout((function() {\n        return _this.results_search();\n      }), 50);\n    };\n\n    AbstractChosen.prototype.container_width = function() {\n      if (this.options.width != null) {\n        return this.options.width;\n      } else {\n        return \"\" + this.form_field.offsetWidth + \"px\";\n      }\n    };\n\n    AbstractChosen.prototype.include_option_in_results = function(option) {\n      if (this.is_multiple && (!this.display_selected_options && option.selected)) {\n        return false;\n      }\n      if (!this.display_disabled_options && option.disabled) {\n        return false;\n      }\n      if (option.empty) {\n        return false;\n      }\n      return true;\n    };\n\n    AbstractChosen.prototype.search_results_touchstart = function(evt) {\n      this.touch_started = true;\n      return this.search_results_mouseover(evt);\n    };\n\n    AbstractChosen.prototype.search_results_touchmove = function(evt) {\n      this.touch_started = false;\n      return this.search_results_mouseout(evt);\n    };\n\n    AbstractChosen.prototype.search_results_touchend = function(evt) {\n      if (this.touch_started) {\n        return this.search_results_mouseup(evt);\n      }\n    };\n\n    AbstractChosen.prototype.outerHTML = function(element) {\n      var tmp;\n      if (element.outerHTML) {\n        return element.outerHTML;\n      }\n      tmp = document.createElement(\"div\");\n      tmp.appendChild(element);\n      return tmp.innerHTML;\n    };\n\n    AbstractChosen.browser_is_supported = function() {\n      if (window.navigator.appName === \"Microsoft Internet Explorer\") {\n        return document.documentMode >= 8;\n      }\n      if (/iP(od|hone)/i.test(window.navigator.userAgent)) {\n        return false;\n      }\n      if (/Android/i.test(window.navigator.userAgent)) {\n        if (/Mobile/i.test(window.navigator.userAgent)) {\n          return false;\n        }\n      }\n      return true;\n    };\n\n    AbstractChosen.default_multiple_text = \"Select Some Options\";\n\n    AbstractChosen.default_single_text = \"Select an Option\";\n\n    AbstractChosen.default_no_result_text = \"No results match\";\n\n    return AbstractChosen;\n\n  })();\n\n  $ = jQuery;\n\n  $.fn.extend({\n    chosen: function(options) {\n      if (!AbstractChosen.browser_is_supported()) {\n        return this;\n      }\n      return this.each(function(input_field) {\n        var $this, chosen;\n        $this = $(this);\n        chosen = $this.data('chosen');\n        if (options === 'destroy' && chosen instanceof Chosen) {\n          chosen.destroy();\n        } else if (!(chosen instanceof Chosen)) {\n          $this.data('chosen', new Chosen(this, options));\n        }\n      });\n    }\n  });\n\n  Chosen = (function(_super) {\n    __extends(Chosen, _super);\n\n    function Chosen() {\n      _ref = Chosen.__super__.constructor.apply(this, arguments);\n      return _ref;\n    }\n\n    Chosen.prototype.setup = function() {\n      this.form_field_jq = $(this.form_field);\n      this.current_selectedIndex = this.form_field.selectedIndex;\n      return this.is_rtl = this.form_field_jq.hasClass(\"chosen-rtl\");\n    };\n\n    Chosen.prototype.set_up_html = function() {\n      var container_classes, container_props;\n      container_classes = [\"chosen-container\"];\n      container_classes.push(\"chosen-container-\" + (this.is_multiple ? \"multi\" : \"single\"));\n      if (this.inherit_select_classes && this.form_field.className) {\n        container_classes.push(this.form_field.className);\n      }\n      if (this.is_rtl) {\n        container_classes.push(\"chosen-rtl\");\n      }\n      container_props = {\n        'class': container_classes.join(' '),\n        'style': \"width: \" + (this.container_width()) + \";\",\n        'title': this.form_field.title\n      };\n      if (this.form_field.id.length) {\n        container_props.id = this.form_field.id.replace(/[^\\w]/g, '_') + \"_chosen\";\n      }\n      this.container = $(\"<div />\", container_props);\n      if (this.is_multiple) {\n        this.container.html('<ul class=\"chosen-choices\"><li class=\"search-field\"><input type=\"text\" value=\"' + this.default_text + '\" class=\"default\" autocomplete=\"off\" style=\"width:25px;\" /></li></ul><div class=\"chosen-drop\"><ul class=\"chosen-results\"></ul></div>');\n      } else {\n        this.container.html('<a class=\"chosen-single chosen-default\" tabindex=\"-1\"><span>' + this.default_text + '</span><div><b></b></div></a><div class=\"chosen-drop\"><div class=\"chosen-search\"><input type=\"text\" autocomplete=\"off\" /></div><ul class=\"chosen-results\"></ul></div>');\n      }\n      this.form_field_jq.hide().after(this.container);\n      this.dropdown = this.container.find('div.chosen-drop').first();\n      this.search_field = this.container.find('input').first();\n      this.search_results = this.container.find('ul.chosen-results').first();\n      this.search_field_scale();\n      this.search_no_results = this.container.find('li.no-results').first();\n      if (this.is_multiple) {\n        this.search_choices = this.container.find('ul.chosen-choices').first();\n        this.search_container = this.container.find('li.search-field').first();\n      } else {\n        this.search_container = this.container.find('div.chosen-search').first();\n        this.selected_item = this.container.find('.chosen-single').first();\n      }\n      this.results_build();\n      this.set_tab_index();\n      this.set_label_behavior();\n      return this.form_field_jq.trigger(\"chosen:ready\", {\n        chosen: this\n      });\n    };\n\n    Chosen.prototype.register_observers = function() {\n      var _this = this;\n      this.container.bind('touchstart.chosen', function(evt) {\n        _this.container_mousedown(evt);\n      });\n      this.container.bind('touchend.chosen', function(evt) {\n        _this.container_mouseup(evt);\n      });\n      this.container.bind('mousedown.chosen', function(evt) {\n        _this.container_mousedown(evt);\n      });\n      this.container.bind('mouseup.chosen', function(evt) {\n        _this.container_mouseup(evt);\n      });\n      this.container.bind('mouseenter.chosen', function(evt) {\n        _this.mouse_enter(evt);\n      });\n      this.container.bind('mouseleave.chosen', function(evt) {\n        _this.mouse_leave(evt);\n      });\n      this.search_results.bind('mouseup.chosen', function(evt) {\n        _this.search_results_mouseup(evt);\n      });\n      this.search_results.bind('mouseover.chosen', function(evt) {\n        _this.search_results_mouseover(evt);\n      });\n      this.search_results.bind('mouseout.chosen', function(evt) {\n        _this.search_results_mouseout(evt);\n      });\n      this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {\n        _this.search_results_mousewheel(evt);\n      });\n      this.search_results.bind('touchstart.chosen', function(evt) {\n        _this.search_results_touchstart(evt);\n      });\n      this.search_results.bind('touchmove.chosen', function(evt) {\n        _this.search_results_touchmove(evt);\n      });\n      this.search_results.bind('touchend.chosen', function(evt) {\n        _this.search_results_touchend(evt);\n      });\n      this.form_field_jq.bind(\"chosen:updated.chosen\", function(evt) {\n        _this.results_update_field(evt);\n      });\n      this.form_field_jq.bind(\"chosen:activate.chosen\", function(evt) {\n        _this.activate_field(evt);\n      });\n      this.form_field_jq.bind(\"chosen:open.chosen\", function(evt) {\n        _this.container_mousedown(evt);\n      });\n      this.form_field_jq.bind(\"chosen:close.chosen\", function(evt) {\n        _this.input_blur(evt);\n      });\n      this.search_field.bind('blur.chosen', function(evt) {\n        _this.input_blur(evt);\n      });\n      this.search_field.bind('keyup.chosen', function(evt) {\n        _this.keyup_checker(evt);\n      });\n      this.search_field.bind('keydown.chosen', function(evt) {\n        _this.keydown_checker(evt);\n      });\n      this.search_field.bind('focus.chosen', function(evt) {\n        _this.input_focus(evt);\n      });\n      this.search_field.bind('cut.chosen', function(evt) {\n        _this.clipboard_event_checker(evt);\n      });\n      this.search_field.bind('paste.chosen', function(evt) {\n        _this.clipboard_event_checker(evt);\n      });\n      if (this.is_multiple) {\n        return this.search_choices.bind('click.chosen', function(evt) {\n          _this.choices_click(evt);\n        });\n      } else {\n        return this.container.bind('click.chosen', function(evt) {\n          evt.preventDefault();\n        });\n      }\n    };\n\n    Chosen.prototype.destroy = function() {\n      $(this.container[0].ownerDocument).unbind(\"click.chosen\", this.click_test_action);\n      if (this.search_field[0].tabIndex) {\n        this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;\n      }\n      this.container.remove();\n      this.form_field_jq.removeData('chosen');\n      return this.form_field_jq.show();\n    };\n\n    Chosen.prototype.search_field_disabled = function() {\n      this.is_disabled = this.form_field_jq[0].disabled;\n      if (this.is_disabled) {\n        this.container.addClass('chosen-disabled');\n        this.search_field[0].disabled = true;\n        if (!this.is_multiple) {\n          this.selected_item.unbind(\"focus.chosen\", this.activate_action);\n        }\n        return this.close_field();\n      } else {\n        this.container.removeClass('chosen-disabled');\n        this.search_field[0].disabled = false;\n        if (!this.is_multiple) {\n          return this.selected_item.bind(\"focus.chosen\", this.activate_action);\n        }\n      }\n    };\n\n    Chosen.prototype.container_mousedown = function(evt) {\n      if (!this.is_disabled) {\n        if (evt && evt.type === \"mousedown\" && !this.results_showing) {\n          evt.preventDefault();\n        }\n        if (!((evt != null) && ($(evt.target)).hasClass(\"search-choice-close\"))) {\n          if (!this.active_field) {\n            if (this.is_multiple) {\n              this.search_field.val(\"\");\n            }\n            $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);\n            this.results_show();\n          } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents(\"a.chosen-single\").length)) {\n            evt.preventDefault();\n            this.results_toggle();\n          }\n          return this.activate_field();\n        }\n      }\n    };\n\n    Chosen.prototype.container_mouseup = function(evt) {\n      if (evt.target.nodeName === \"ABBR\" && !this.is_disabled) {\n        return this.results_reset(evt);\n      }\n    };\n\n    Chosen.prototype.search_results_mousewheel = function(evt) {\n      var delta;\n      if (evt.originalEvent) {\n        delta = evt.originalEvent.deltaY || -evt.originalEvent.wheelDelta || evt.originalEvent.detail;\n      }\n      if (delta != null) {\n        evt.preventDefault();\n        if (evt.type === 'DOMMouseScroll') {\n          delta = delta * 40;\n        }\n        return this.search_results.scrollTop(delta + this.search_results.scrollTop());\n      }\n    };\n\n    Chosen.prototype.blur_test = function(evt) {\n      if (!this.active_field && this.container.hasClass(\"chosen-container-active\")) {\n        return this.close_field();\n      }\n    };\n\n    Chosen.prototype.close_field = function() {\n      $(this.container[0].ownerDocument).unbind(\"click.chosen\", this.click_test_action);\n      this.active_field = false;\n      this.results_hide();\n      this.container.removeClass(\"chosen-container-active\");\n      this.clear_backstroke();\n      this.show_search_field_default();\n      return this.search_field_scale();\n    };\n\n    Chosen.prototype.activate_field = function() {\n      this.container.addClass(\"chosen-container-active\");\n      this.active_field = true;\n      this.search_field.val(this.search_field.val());\n      return this.search_field.focus();\n    };\n\n    Chosen.prototype.test_active_click = function(evt) {\n      var active_container;\n      active_container = $(evt.target).closest('.chosen-container');\n      if (active_container.length && this.container[0] === active_container[0]) {\n        return this.active_field = true;\n      } else {\n        return this.close_field();\n      }\n    };\n\n    Chosen.prototype.results_build = function() {\n      this.parsing = true;\n      this.selected_option_count = null;\n      this.results_data = SelectParser.select_to_array(this.form_field);\n      if (this.is_multiple) {\n        this.search_choices.find(\"li.search-choice\").remove();\n      } else if (!this.is_multiple) {\n        this.single_set_selected_text();\n        if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {\n          this.search_field[0].readOnly = true;\n          this.container.addClass(\"chosen-container-single-nosearch\");\n        } else {\n          this.search_field[0].readOnly = false;\n          this.container.removeClass(\"chosen-container-single-nosearch\");\n        }\n      }\n      this.update_results_content(this.results_option_build({\n        first: true\n      }));\n      this.search_field_disabled();\n      this.show_search_field_default();\n      this.search_field_scale();\n      return this.parsing = false;\n    };\n\n    Chosen.prototype.result_do_highlight = function(el) {\n      var high_bottom, high_top, maxHeight, visible_bottom, visible_top;\n      if (el.length) {\n        this.result_clear_highlight();\n        this.result_highlight = el;\n        this.result_highlight.addClass(\"highlighted\");\n        maxHeight = parseInt(this.search_results.css(\"maxHeight\"), 10);\n        visible_top = this.search_results.scrollTop();\n        visible_bottom = maxHeight + visible_top;\n        high_top = this.result_highlight.position().top + this.search_results.scrollTop();\n        high_bottom = high_top + this.result_highlight.outerHeight();\n        if (high_bottom >= visible_bottom) {\n          return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);\n        } else if (high_top < visible_top) {\n          return this.search_results.scrollTop(high_top);\n        }\n      }\n    };\n\n    Chosen.prototype.result_clear_highlight = function() {\n      if (this.result_highlight) {\n        this.result_highlight.removeClass(\"highlighted\");\n      }\n      return this.result_highlight = null;\n    };\n\n    Chosen.prototype.results_show = function() {\n      if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n        this.form_field_jq.trigger(\"chosen:maxselected\", {\n          chosen: this\n        });\n        return false;\n      }\n      this.container.addClass(\"chosen-with-drop\");\n      this.results_showing = true;\n      this.search_field.focus();\n      this.search_field.val(this.search_field.val());\n      this.winnow_results();\n      return this.form_field_jq.trigger(\"chosen:showing_dropdown\", {\n        chosen: this\n      });\n    };\n\n    Chosen.prototype.update_results_content = function(content) {\n      return this.search_results.html(content);\n    };\n\n    Chosen.prototype.results_hide = function() {\n      if (this.results_showing) {\n        this.result_clear_highlight();\n        this.container.removeClass(\"chosen-with-drop\");\n        this.form_field_jq.trigger(\"chosen:hiding_dropdown\", {\n          chosen: this\n        });\n      }\n      return this.results_showing = false;\n    };\n\n    Chosen.prototype.set_tab_index = function(el) {\n      var ti;\n      if (this.form_field.tabIndex) {\n        ti = this.form_field.tabIndex;\n        this.form_field.tabIndex = -1;\n        return this.search_field[0].tabIndex = ti;\n      }\n    };\n\n    Chosen.prototype.set_label_behavior = function() {\n      var _this = this;\n      this.form_field_label = this.form_field_jq.parents(\"label\");\n      if (!this.form_field_label.length && this.form_field.id.length) {\n        this.form_field_label = $(\"label[for='\" + this.form_field.id + \"']\");\n      }\n      if (this.form_field_label.length > 0) {\n        return this.form_field_label.bind('click.chosen', function(evt) {\n          if (_this.is_multiple) {\n            return _this.container_mousedown(evt);\n          } else {\n            return _this.activate_field();\n          }\n        });\n      }\n    };\n\n    Chosen.prototype.show_search_field_default = function() {\n      if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {\n        this.search_field.val(this.default_text);\n        return this.search_field.addClass(\"default\");\n      } else {\n        this.search_field.val(\"\");\n        return this.search_field.removeClass(\"default\");\n      }\n    };\n\n    Chosen.prototype.search_results_mouseup = function(evt) {\n      var target;\n      target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n      if (target.length) {\n        this.result_highlight = target;\n        this.result_select(evt);\n        return this.search_field.focus();\n      }\n    };\n\n    Chosen.prototype.search_results_mouseover = function(evt) {\n      var target;\n      target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n      if (target) {\n        return this.result_do_highlight(target);\n      }\n    };\n\n    Chosen.prototype.search_results_mouseout = function(evt) {\n      if ($(evt.target).hasClass(\"active-result\" || $(evt.target).parents('.active-result').first())) {\n        return this.result_clear_highlight();\n      }\n    };\n\n    Chosen.prototype.choice_build = function(item) {\n      var choice, close_link,\n        _this = this;\n      choice = $('<li />', {\n        \"class\": \"search-choice\"\n      }).html(\"<span>\" + item.html + \"</span>\");\n      if (item.disabled) {\n        choice.addClass('search-choice-disabled');\n      } else {\n        close_link = $('<a />', {\n          \"class\": 'search-choice-close',\n          'data-option-array-index': item.array_index\n        });\n        close_link.bind('click.chosen', function(evt) {\n          return _this.choice_destroy_link_click(evt);\n        });\n        choice.append(close_link);\n      }\n      return this.search_container.before(choice);\n    };\n\n    Chosen.prototype.choice_destroy_link_click = function(evt) {\n      evt.preventDefault();\n      evt.stopPropagation();\n      if (!this.is_disabled) {\n        return this.choice_destroy($(evt.target));\n      }\n    };\n\n    Chosen.prototype.choice_destroy = function(link) {\n      if (this.result_deselect(link[0].getAttribute(\"data-option-array-index\"))) {\n        this.show_search_field_default();\n        if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {\n          this.results_hide();\n        }\n        link.parents('li').first().remove();\n        return this.search_field_scale();\n      }\n    };\n\n    Chosen.prototype.results_reset = function() {\n      this.reset_single_select_options();\n      this.form_field.options[0].selected = true;\n      this.single_set_selected_text();\n      this.show_search_field_default();\n      this.results_reset_cleanup();\n      this.form_field_jq.trigger(\"change\");\n      if (this.active_field) {\n        return this.results_hide();\n      }\n    };\n\n    Chosen.prototype.results_reset_cleanup = function() {\n      this.current_selectedIndex = this.form_field.selectedIndex;\n      return this.selected_item.find(\"abbr\").remove();\n    };\n\n    Chosen.prototype.result_select = function(evt) {\n      var high, item;\n      if (this.result_highlight) {\n        high = this.result_highlight;\n        this.result_clear_highlight();\n        if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n          this.form_field_jq.trigger(\"chosen:maxselected\", {\n            chosen: this\n          });\n          return false;\n        }\n        if (this.is_multiple) {\n          high.removeClass(\"active-result\");\n        } else {\n          this.reset_single_select_options();\n        }\n        item = this.results_data[high[0].getAttribute(\"data-option-array-index\")];\n        item.selected = true;\n        this.form_field.options[item.options_index].selected = true;\n        this.selected_option_count = null;\n        if (this.is_multiple) {\n          this.choice_build(item);\n        } else {\n          this.single_set_selected_text(item.text);\n        }\n        if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {\n          this.results_hide();\n        }\n        this.search_field.val(\"\");\n        if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {\n          this.form_field_jq.trigger(\"change\", {\n            'selected': this.form_field.options[item.options_index].value\n          });\n        }\n        this.current_selectedIndex = this.form_field.selectedIndex;\n        return this.search_field_scale();\n      }\n    };\n\n    Chosen.prototype.single_set_selected_text = function(text) {\n      if (text == null) {\n        text = this.default_text;\n      }\n      if (text === this.default_text) {\n        this.selected_item.addClass(\"chosen-default\");\n      } else {\n        this.single_deselect_control_build();\n        this.selected_item.removeClass(\"chosen-default\");\n      }\n      return this.selected_item.find(\"span\").text(text);\n    };\n\n    Chosen.prototype.result_deselect = function(pos) {\n      var result_data;\n      result_data = this.results_data[pos];\n      if (!this.form_field.options[result_data.options_index].disabled) {\n        result_data.selected = false;\n        this.form_field.options[result_data.options_index].selected = false;\n        this.selected_option_count = null;\n        this.result_clear_highlight();\n        if (this.results_showing) {\n          this.winnow_results();\n        }\n        this.form_field_jq.trigger(\"change\", {\n          deselected: this.form_field.options[result_data.options_index].value\n        });\n        this.search_field_scale();\n        return true;\n      } else {\n        return false;\n      }\n    };\n\n    Chosen.prototype.single_deselect_control_build = function() {\n      if (!this.allow_single_deselect) {\n        return;\n      }\n      if (!this.selected_item.find(\"abbr\").length) {\n        this.selected_item.find(\"span\").first().after(\"<abbr class=\\\"search-choice-close\\\"></abbr>\");\n      }\n      return this.selected_item.addClass(\"chosen-single-with-deselect\");\n    };\n\n    Chosen.prototype.get_search_text = function() {\n      if (this.search_field.val() === this.default_text) {\n        return \"\";\n      } else {\n        return $('<div/>').text($.trim(this.search_field.val())).html();\n      }\n    };\n\n    Chosen.prototype.winnow_results_set_highlight = function() {\n      var do_high, selected_results;\n      selected_results = !this.is_multiple ? this.search_results.find(\".result-selected.active-result\") : [];\n      do_high = selected_results.length ? selected_results.first() : this.search_results.find(\".active-result\").first();\n      if (do_high != null) {\n        return this.result_do_highlight(do_high);\n      }\n    };\n\n    Chosen.prototype.no_results = function(terms) {\n      var no_results_html;\n      no_results_html = $('<li class=\"no-results\">' + this.results_none_found + ' \"<span></span>\"</li>');\n      no_results_html.find(\"span\").first().html(terms);\n      this.search_results.append(no_results_html);\n      return this.form_field_jq.trigger(\"chosen:no_results\", {\n        chosen: this\n      });\n    };\n\n    Chosen.prototype.no_results_clear = function() {\n      return this.search_results.find(\".no-results\").remove();\n    };\n\n    Chosen.prototype.keydown_arrow = function() {\n      var next_sib;\n      if (this.results_showing && this.result_highlight) {\n        next_sib = this.result_highlight.nextAll(\"li.active-result\").first();\n        if (next_sib) {\n          return this.result_do_highlight(next_sib);\n        }\n      } else {\n        return this.results_show();\n      }\n    };\n\n    Chosen.prototype.keyup_arrow = function() {\n      var prev_sibs;\n      if (!this.results_showing && !this.is_multiple) {\n        return this.results_show();\n      } else if (this.result_highlight) {\n        prev_sibs = this.result_highlight.prevAll(\"li.active-result\");\n        if (prev_sibs.length) {\n          return this.result_do_highlight(prev_sibs.first());\n        } else {\n          if (this.choices_count() > 0) {\n            this.results_hide();\n          }\n          return this.result_clear_highlight();\n        }\n      }\n    };\n\n    Chosen.prototype.keydown_backstroke = function() {\n      var next_available_destroy;\n      if (this.pending_backstroke) {\n        this.choice_destroy(this.pending_backstroke.find(\"a\").first());\n        return this.clear_backstroke();\n      } else {\n        next_available_destroy = this.search_container.siblings(\"li.search-choice\").last();\n        if (next_available_destroy.length && !next_available_destroy.hasClass(\"search-choice-disabled\")) {\n          this.pending_backstroke = next_available_destroy;\n          if (this.single_backstroke_delete) {\n            return this.keydown_backstroke();\n          } else {\n            return this.pending_backstroke.addClass(\"search-choice-focus\");\n          }\n        }\n      }\n    };\n\n    Chosen.prototype.clear_backstroke = function() {\n      if (this.pending_backstroke) {\n        this.pending_backstroke.removeClass(\"search-choice-focus\");\n      }\n      return this.pending_backstroke = null;\n    };\n\n    Chosen.prototype.keydown_checker = function(evt) {\n      var stroke, _ref1;\n      stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;\n      this.search_field_scale();\n      if (stroke !== 8 && this.pending_backstroke) {\n        this.clear_backstroke();\n      }\n      switch (stroke) {\n        case 8:\n          this.backstroke_length = this.search_field.val().length;\n          break;\n        case 9:\n          if (this.results_showing && !this.is_multiple) {\n            this.result_select(evt);\n          }\n          this.mouse_on_container = false;\n          break;\n        case 13:\n          if (this.results_showing) {\n            evt.preventDefault();\n          }\n          break;\n        case 32:\n          if (this.disable_search) {\n            evt.preventDefault();\n          }\n          break;\n        case 38:\n          evt.preventDefault();\n          this.keyup_arrow();\n          break;\n        case 40:\n          evt.preventDefault();\n          this.keydown_arrow();\n          break;\n      }\n    };\n\n    Chosen.prototype.search_field_scale = function() {\n      var div, f_width, h, style, style_block, styles, w, _i, _len;\n      if (this.is_multiple) {\n        h = 0;\n        w = 0;\n        style_block = \"position:absolute; left: -1000px; top: -1000px; display:none;\";\n        styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];\n        for (_i = 0, _len = styles.length; _i < _len; _i++) {\n          style = styles[_i];\n          style_block += style + \":\" + this.search_field.css(style) + \";\";\n        }\n        div = $('<div />', {\n          'style': style_block\n        });\n        div.text(this.search_field.val());\n        $('body').append(div);\n        w = div.width() + 25;\n        div.remove();\n        f_width = this.container.outerWidth();\n        if (w > f_width - 10) {\n          w = f_width - 10;\n        }\n        return this.search_field.css({\n          'width': w + 'px'\n        });\n      }\n    };\n\n    return Chosen;\n\n  })(AbstractChosen);\n\n}).call(this);\n"
  },
  {
    "path": "public/assets/dashboard/js/chosen/jquery-1.9.1.js",
    "content": "/*!\n * jQuery JavaScript Library v1.9.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright 2005, 2012 jQuery Foundation, Inc. and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2013-2-4\n */\n(function( window, undefined ) {\n\n// Can't do this because several apps 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// Support: Firefox 18+\n//\"use strict\";\nvar\n\t// The deferred used on DOM ready\n\treadyList,\n\n\t// A central reference to the root jQuery(document)\n\trootjQuery,\n\n\t// Support: IE<9\n\t// For `typeof node.method` instead of `node.method !== undefined`\n\tcore_strundefined = typeof undefined,\n\n\t// Use the correct document accordingly with window argument (sandbox)\n\tdocument = window.document,\n\tlocation = window.location,\n\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\n\t// [[Class]] -> type pairs\n\tclass2type = {},\n\n\t// List of deleted data cache ids, so we can reuse them\n\tcore_deletedIds = [],\n\n\tcore_version = \"1.9.1\",\n\n\t// Save a reference to some core methods\n\tcore_concat = core_deletedIds.concat,\n\tcore_push = core_deletedIds.push,\n\tcore_slice = core_deletedIds.slice,\n\tcore_indexOf = core_deletedIds.indexOf,\n\tcore_toString = class2type.toString,\n\tcore_hasOwn = class2type.hasOwnProperty,\n\tcore_trim = core_version.trim,\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\treturn new jQuery.fn.init( selector, context, rootjQuery );\n\t},\n\n\t// Used for matching numbers\n\tcore_pnum = /[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,\n\n\t// Used for splitting on whitespace\n\tcore_rnotwhite = /\\S+/g,\n\n\t// Make sure we trim BOM and NBSP (here's looking at you, Safari 5.0 and IE)\n\trtrim = /^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\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 = /^(?:(<[\\w\\W]+>)[^>]*|#([\\w-]*))$/,\n\n\t// Match a standalone tag\n\trsingleTag = /^<(\\w+)\\s*\\/?>(?:<\\/\\1>|)$/,\n\n\t// JSON RegExp\n\trvalidchars = /^[\\],:{}\\s]*$/,\n\trvalidbraces = /(?:^|:|,)(?:\\s*\\[)+/g,\n\trvalidescape = /\\\\(?:[\"\\\\\\/bfnrt]|u[\\da-fA-F]{4})/g,\n\trvalidtokens = /\"[^\"\\\\\\r\\n]*\"|true|false|null|-?(?:\\d+\\.|)\\d+(?:[eE][+-]?\\d+|)/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\n\t// The ready event handler\n\tcompleted = function( event ) {\n\n\t\t// readyState === \"complete\" is good enough for us to call the dom ready in oldIE\n\t\tif ( document.addEventListener || event.type === \"load\" || document.readyState === \"complete\" ) {\n\t\t\tdetach();\n\t\t\tjQuery.ready();\n\t\t}\n\t},\n\t// Clean-up method for dom ready events\n\tdetach = function() {\n\t\tif ( document.addEventListener ) {\n\t\t\tdocument.removeEventListener( \"DOMContentLoaded\", completed, false );\n\t\t\twindow.removeEventListener( \"load\", completed, false );\n\n\t\t} else {\n\t\t\tdocument.detachEvent( \"onreadystatechange\", completed );\n\t\t\twindow.detachEvent( \"onload\", completed );\n\t\t}\n\t};\n\njQuery.fn = jQuery.prototype = {\n\t// The current version of jQuery being used\n\tjquery: core_version,\n\n\tconstructor: jQuery,\n\tinit: function( selector, context, rootjQuery ) {\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.charAt(0) === \"<\" && selector.charAt( 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// scripts is true for back-compat\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// Check parentNode to catch when Blackberry 4.6 returns\n\t\t\t\t\t// nodes that are no longer in the document #6963\n\t\t\t\t\tif ( elem && elem.parentNode ) {\n\t\t\t\t\t\t// Handle the case where IE and Opera return items\n\t\t\t\t\t\t// by name instead of ID\n\t\t\t\t\t\tif ( elem.id !== match[2] ) {\n\t\t\t\t\t\t\treturn rootjQuery.find( selector );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Otherwise, we 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 rootjQuery.ready( selector );\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\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\t// The number of elements contained in the matched element set\n\tsize: function() {\n\t\treturn this.length;\n\t},\n\n\ttoArray: function() {\n\t\treturn core_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 a 'clean' array\n\t\t\tthis.toArray() :\n\n\t\t\t// Return just the object\n\t\t\t( num < 0 ? this[ this.length + num ] : this[ num ] );\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\tready: function( fn ) {\n\t\t// Add the callback\n\t\tjQuery.ready.promise().done( fn );\n\n\t\treturn this;\n\t},\n\n\tslice: function() {\n\t\treturn this.pushStack( core_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\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\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: core_push,\n\tsort: [].sort,\n\tsplice: [].splice\n};\n\n// Give the init function the jQuery prototype for later instantiation\njQuery.fn.init.prototype = jQuery.fn;\n\njQuery.extend = jQuery.fn.extend = function() {\n\tvar src, copyIsArray, copy, name, options, 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\t\ttarget = arguments[1] || {};\n\t\t// skip the boolean and the target\n\t\ti = 2;\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 ( length === i ) {\n\t\ttarget = this;\n\t\t--i;\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\tnoConflict: function( deep ) {\n\t\tif ( window.$ === jQuery ) {\n\t\t\twindow.$ = _$;\n\t\t}\n\n\t\tif ( deep && window.jQuery === jQuery ) {\n\t\t\twindow.jQuery = _jQuery;\n\t\t}\n\n\t\treturn jQuery;\n\t},\n\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// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).\n\t\tif ( !document.body ) {\n\t\t\treturn setTimeout( jQuery.ready );\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.trigger ) {\n\t\t\tjQuery( document ).trigger(\"ready\").off(\"ready\");\n\t\t}\n\t},\n\n\t// See test/unit/core.js for details concerning isFunction.\n\t// Since version 1.3, DOM methods and functions like alert\n\t// aren't supported. They return false on IE (#2968).\n\tisFunction: function( obj ) {\n\t\treturn jQuery.type(obj) === \"function\";\n\t},\n\n\tisArray: Array.isArray || function( obj ) {\n\t\treturn jQuery.type(obj) === \"array\";\n\t},\n\n\tisWindow: function( obj ) {\n\t\treturn obj != null && obj == obj.window;\n\t},\n\n\tisNumeric: function( obj ) {\n\t\treturn !isNaN( parseFloat(obj) ) && isFinite( obj );\n\t},\n\n\ttype: function( obj ) {\n\t\tif ( obj == null ) {\n\t\t\treturn String( obj );\n\t\t}\n\t\treturn typeof obj === \"object\" || typeof obj === \"function\" ?\n\t\t\tclass2type[ core_toString.call(obj) ] || \"object\" :\n\t\t\ttypeof obj;\n\t},\n\n\tisPlainObject: function( obj ) {\n\t\t// Must be an Object.\n\t\t// Because of IE, we also have to check the presence of the constructor property.\n\t\t// Make sure that DOM nodes and window objects don't pass through, as well\n\t\tif ( !obj || jQuery.type(obj) !== \"object\" || obj.nodeType || jQuery.isWindow( obj ) ) {\n\t\t\treturn false;\n\t\t}\n\n\t\ttry {\n\t\t\t// Not own constructor property must be Object\n\t\t\tif ( obj.constructor &&\n\t\t\t\t!core_hasOwn.call(obj, \"constructor\") &&\n\t\t\t\t!core_hasOwn.call(obj.constructor.prototype, \"isPrototypeOf\") ) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t} catch ( e ) {\n\t\t\t// IE8,9 Will throw exceptions on certain host objects #9897\n\t\t\treturn false;\n\t\t}\n\n\t\t// Own properties are enumerated firstly, so to speed up,\n\t\t// if last one is own, then all properties are own.\n\n\t\tvar key;\n\t\tfor ( key in obj ) {}\n\n\t\treturn key === undefined || core_hasOwn.call( obj, key );\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\terror: function( msg ) {\n\t\tthrow new Error( msg );\n\t},\n\n\t// data: string of html\n\t// context (optional): If specified, the fragment will be created in this context, defaults to document\n\t// keepScripts (optional): If true, will include scripts passed in the html string\n\tparseHTML: function( data, context, keepScripts ) {\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\tif ( typeof context === \"boolean\" ) {\n\t\t\tkeepScripts = context;\n\t\t\tcontext = false;\n\t\t}\n\t\tcontext = context || document;\n\n\t\tvar parsed = rsingleTag.exec( data ),\n\t\t\tscripts = !keepScripts && [];\n\n\t\t// Single tag\n\t\tif ( parsed ) {\n\t\t\treturn [ context.createElement( parsed[1] ) ];\n\t\t}\n\n\t\tparsed = jQuery.buildFragment( [ data ], context, scripts );\n\t\tif ( scripts ) {\n\t\t\tjQuery( scripts ).remove();\n\t\t}\n\t\treturn jQuery.merge( [], parsed.childNodes );\n\t},\n\n\tparseJSON: function( data ) {\n\t\t// Attempt to parse using the native JSON parser first\n\t\tif ( window.JSON && window.JSON.parse ) {\n\t\t\treturn window.JSON.parse( data );\n\t\t}\n\n\t\tif ( data === null ) {\n\t\t\treturn data;\n\t\t}\n\n\t\tif ( typeof data === \"string\" ) {\n\n\t\t\t// Make sure leading/trailing whitespace is removed (IE can't handle it)\n\t\t\tdata = jQuery.trim( data );\n\n\t\t\tif ( data ) {\n\t\t\t\t// Make sure the incoming data is actual JSON\n\t\t\t\t// Logic borrowed from http://json.org/json2.js\n\t\t\t\tif ( rvalidchars.test( data.replace( rvalidescape, \"@\" )\n\t\t\t\t\t.replace( rvalidtokens, \"]\" )\n\t\t\t\t\t.replace( rvalidbraces, \"\")) ) {\n\n\t\t\t\t\treturn ( new Function( \"return \" + data ) )();\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tjQuery.error( \"Invalid JSON: \" + data );\n\t},\n\n\t// Cross-browser xml parsing\n\tparseXML: function( data ) {\n\t\tvar xml, tmp;\n\t\tif ( !data || typeof data !== \"string\" ) {\n\t\t\treturn null;\n\t\t}\n\t\ttry {\n\t\t\tif ( window.DOMParser ) { // Standard\n\t\t\t\ttmp = new DOMParser();\n\t\t\t\txml = tmp.parseFromString( data , \"text/xml\" );\n\t\t\t} else { // IE\n\t\t\t\txml = new ActiveXObject( \"Microsoft.XMLDOM\" );\n\t\t\t\txml.async = \"false\";\n\t\t\t\txml.loadXML( data );\n\t\t\t}\n\t\t} catch( e ) {\n\t\t\txml = undefined;\n\t\t}\n\t\tif ( !xml || !xml.documentElement || xml.getElementsByTagName( \"parsererror\" ).length ) {\n\t\t\tjQuery.error( \"Invalid XML: \" + data );\n\t\t}\n\t\treturn xml;\n\t},\n\n\tnoop: function() {},\n\n\t// Evaluates a script in a global context\n\t// Workarounds based on findings by Jim Driscoll\n\t// http://weblogs.java.net/blog/driscoll/archive/2009/09/08/eval-javascript-global-context\n\tglobalEval: function( data ) {\n\t\tif ( data && jQuery.trim( data ) ) {\n\t\t\t// We use execScript on Internet Explorer\n\t\t\t// We use an anonymous function so that context is window\n\t\t\t// rather than jQuery in Firefox\n\t\t\t( window.execScript || function( data ) {\n\t\t\t\twindow[ \"eval\" ].call( window, data );\n\t\t\t} )( data );\n\t\t}\n\t},\n\n\t// Convert dashed to camelCase; used by the css and data modules\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// Use native String.trim function wherever possible\n\ttrim: core_trim && !core_trim.call(\"\\uFEFF\\xA0\") ?\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\tcore_trim.call( text );\n\t\t} :\n\n\t\t// Otherwise use our own trimming functionality\n\t\tfunction( text ) {\n\t\t\treturn text == null ?\n\t\t\t\t\"\" :\n\t\t\t\t( text + \"\" ).replace( rtrim, \"\" );\n\t\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\tcore_push.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\tvar len;\n\n\t\tif ( arr ) {\n\t\t\tif ( core_indexOf ) {\n\t\t\t\treturn core_indexOf.call( arr, elem, i );\n\t\t\t}\n\n\t\t\tlen = arr.length;\n\t\t\ti = i ? i < 0 ? Math.max( 0, len + i ) : i : 0;\n\n\t\t\tfor ( ; i < len; i++ ) {\n\t\t\t\t// Skip accessing in sparse arrays\n\t\t\t\tif ( i in arr && arr[ i ] === elem ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn -1;\n\t},\n\n\tmerge: function( first, second ) {\n\t\tvar l = second.length,\n\t\t\ti = first.length,\n\t\t\tj = 0;\n\n\t\tif ( typeof l === \"number\" ) {\n\t\t\tfor ( ; j < l; j++ ) {\n\t\t\t\tfirst[ i++ ] = second[ j ];\n\t\t\t}\n\t\t} else {\n\t\t\twhile ( second[j] !== undefined ) {\n\t\t\t\tfirst[ i++ ] = second[ j++ ];\n\t\t\t}\n\t\t}\n\n\t\tfirst.length = i;\n\n\t\treturn first;\n\t},\n\n\tgrep: function( elems, callback, inv ) {\n\t\tvar retVal,\n\t\t\tret = [],\n\t\t\ti = 0,\n\t\t\tlength = elems.length;\n\t\tinv = !!inv;\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\tretVal = !!callback( elems[ i ], i );\n\t\t\tif ( inv !== retVal ) {\n\t\t\t\tret.push( elems[ i ] );\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\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\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[ ret.length ] = 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[ ret.length ] = value;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Flatten any nested arrays\n\t\treturn core_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 args, proxy, tmp;\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 = core_slice.call( arguments, 2 );\n\t\tproxy = function() {\n\t\t\treturn fn.apply( context || this, args.concat( core_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\t// Multifunctional method to get and set values of a collection\n\t// The value/s can optionally be executed if it's a function\n\taccess: function( elems, fn, key, value, chainable, emptyGet, raw ) {\n\t\tvar i = 0,\n\t\t\tlength = elems.length,\n\t\t\tbulk = key == null;\n\n\t\t// Sets many values\n\t\tif ( jQuery.type( key ) === \"object\" ) {\n\t\t\tchainable = true;\n\t\t\tfor ( i in key ) {\n\t\t\t\tjQuery.access( elems, fn, i, key[i], true, emptyGet, raw );\n\t\t\t}\n\n\t\t// Sets one value\n\t\t} else if ( value !== undefined ) {\n\t\t\tchainable = true;\n\n\t\t\tif ( !jQuery.isFunction( value ) ) {\n\t\t\t\traw = true;\n\t\t\t}\n\n\t\t\tif ( bulk ) {\n\t\t\t\t// Bulk operations run against the entire set\n\t\t\t\tif ( raw ) {\n\t\t\t\t\tfn.call( elems, value );\n\t\t\t\t\tfn = null;\n\n\t\t\t\t// ...except when executing function values\n\t\t\t\t} else {\n\t\t\t\t\tbulk = fn;\n\t\t\t\t\tfn = function( elem, key, value ) {\n\t\t\t\t\t\treturn bulk.call( jQuery( elem ), value );\n\t\t\t\t\t};\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( fn ) {\n\t\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\t\tfn( elems[i], key, raw ? value : value.call( elems[i], i, fn( elems[i], key ) ) );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn chainable ?\n\t\t\telems :\n\n\t\t\t// Gets\n\t\t\tbulk ?\n\t\t\t\tfn.call( elems ) :\n\t\t\t\tlength ? fn( elems[0], key ) : emptyGet;\n\t},\n\n\tnow: function() {\n\t\treturn ( new Date() ).getTime();\n\t}\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// Standards-based browsers support DOMContentLoaded\n\t\t} else if ( document.addEventListener ) {\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\n\t\t// If IE event model is used\n\t\t} else {\n\t\t\t// Ensure firing before onload, maybe late but safe also for iframes\n\t\t\tdocument.attachEvent( \"onreadystatechange\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.attachEvent( \"onload\", completed );\n\n\t\t\t// If IE and not a frame\n\t\t\t// continually check to see if the document is ready\n\t\t\tvar top = false;\n\n\t\t\ttry {\n\t\t\t\ttop = window.frameElement == null && document.documentElement;\n\t\t\t} catch(e) {}\n\n\t\t\tif ( top && top.doScroll ) {\n\t\t\t\t(function doScrollCheck() {\n\t\t\t\t\tif ( !jQuery.isReady ) {\n\n\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t// Use the trick by Diego Perini\n\t\t\t\t\t\t\t// http://javascript.nwbox.com/IEContentLoaded/\n\t\t\t\t\t\t\ttop.doScroll(\"left\");\n\t\t\t\t\t\t} catch(e) {\n\t\t\t\t\t\t\treturn setTimeout( doScrollCheck, 50 );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// detach all dom ready events\n\t\t\t\t\t\tdetach();\n\n\t\t\t\t\t\t// and execute any waiting functions\n\t\t\t\t\t\tjQuery.ready();\n\t\t\t\t\t}\n\t\t\t\t})();\n\t\t\t}\n\t\t}\n\t}\n\treturn readyList.promise( obj );\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\tvar length = obj.length,\n\t\ttype = jQuery.type( obj );\n\n\tif ( 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\" || type !== \"function\" &&\n\t\t( length === 0 ||\n\t\ttypeof length === \"number\" && length > 0 && ( length - 1 ) in obj );\n}\n\n// All jQuery objects should point back to these\nrootjQuery = jQuery(document);\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( core_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 // Flag to know if list is currently firing\n\t\tfiring,\n\t\t// 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// 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// First callback to fire (used internally by add and fireWith)\n\t\tfiringStart,\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\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\targs = args || [];\n\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\tif ( list && ( !fired || stack ) ) {\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};\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 action = tuple[ 0 ],\n\t\t\t\t\t\t\t\tfn = 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[ action + \"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 = core_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 ? core_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});\njQuery.support = (function() {\n\n\tvar support, all, a,\n\t\tinput, select, fragment,\n\t\topt, eventName, isSupported, i,\n\t\tdiv = document.createElement(\"div\");\n\n\t// Setup\n\tdiv.setAttribute( \"className\", \"t\" );\n\tdiv.innerHTML = \"  <link/><table></table><a href='/a'>a</a><input type='checkbox'/>\";\n\n\t// Support tests won't run in some limited or non-browser environments\n\tall = div.getElementsByTagName(\"*\");\n\ta = div.getElementsByTagName(\"a\")[ 0 ];\n\tif ( !all || !a || !all.length ) {\n\t\treturn {};\n\t}\n\n\t// First batch of tests\n\tselect = document.createElement(\"select\");\n\topt = select.appendChild( document.createElement(\"option\") );\n\tinput = div.getElementsByTagName(\"input\")[ 0 ];\n\n\ta.style.cssText = \"top:1px;float:left;opacity:.5\";\n\tsupport = {\n\t\t// Test setAttribute on camelCase class. If it works, we need attrFixes when doing get/setAttribute (ie6/7)\n\t\tgetSetAttribute: div.className !== \"t\",\n\n\t\t// IE strips leading whitespace when .innerHTML is used\n\t\tleadingWhitespace: div.firstChild.nodeType === 3,\n\n\t\t// Make sure that tbody elements aren't automatically inserted\n\t\t// IE will insert them into empty tables\n\t\ttbody: !div.getElementsByTagName(\"tbody\").length,\n\n\t\t// Make sure that link elements get serialized correctly by innerHTML\n\t\t// This requires a wrapper element in IE\n\t\thtmlSerialize: !!div.getElementsByTagName(\"link\").length,\n\n\t\t// Get the style information from getAttribute\n\t\t// (IE uses .cssText instead)\n\t\tstyle: /top/.test( a.getAttribute(\"style\") ),\n\n\t\t// Make sure that URLs aren't manipulated\n\t\t// (IE normalizes it by default)\n\t\threfNormalized: a.getAttribute(\"href\") === \"/a\",\n\n\t\t// Make sure that element opacity exists\n\t\t// (IE uses filter instead)\n\t\t// Use a regex to work around a WebKit issue. See #5145\n\t\topacity: /^0.5/.test( a.style.opacity ),\n\n\t\t// Verify style float existence\n\t\t// (IE uses styleFloat instead of cssFloat)\n\t\tcssFloat: !!a.style.cssFloat,\n\n\t\t// Check the default checkbox/radio value (\"\" on WebKit; \"on\" elsewhere)\n\t\tcheckOn: !!input.value,\n\n\t\t// Make sure that a selected-by-default option has a working selected property.\n\t\t// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)\n\t\toptSelected: opt.selected,\n\n\t\t// Tests for enctype support on a form (#6743)\n\t\tenctype: !!document.createElement(\"form\").enctype,\n\n\t\t// Makes sure cloning an html5 element does not cause problems\n\t\t// Where outerHTML is undefined, this still works\n\t\thtml5Clone: document.createElement(\"nav\").cloneNode( true ).outerHTML !== \"<:nav></:nav>\",\n\n\t\t// jQuery.support.boxModel DEPRECATED in 1.8 since we don't support Quirks Mode\n\t\tboxModel: document.compatMode === \"CSS1Compat\",\n\n\t\t// Will be defined later\n\t\tdeleteExpando: true,\n\t\tnoCloneEvent: true,\n\t\tinlineBlockNeedsLayout: false,\n\t\tshrinkWrapBlocks: false,\n\t\treliableMarginRight: true,\n\t\tboxSizingReliable: true,\n\t\tpixelPosition: false\n\t};\n\n\t// Make sure checked status is properly cloned\n\tinput.checked = true;\n\tsupport.noCloneChecked = input.cloneNode( true ).checked;\n\n\t// Make sure that the options inside disabled selects aren't marked as disabled\n\t// (WebKit marks them as disabled)\n\tselect.disabled = true;\n\tsupport.optDisabled = !opt.disabled;\n\n\t// Support: IE<9\n\ttry {\n\t\tdelete div.test;\n\t} catch( e ) {\n\t\tsupport.deleteExpando = false;\n\t}\n\n\t// Check if we can trust getAttribute(\"value\")\n\tinput = document.createElement(\"input\");\n\tinput.setAttribute( \"value\", \"\" );\n\tsupport.input = input.getAttribute( \"value\" ) === \"\";\n\n\t// Check if an input maintains its value after becoming a radio\n\tinput.value = \"t\";\n\tinput.setAttribute( \"type\", \"radio\" );\n\tsupport.radioValue = input.value === \"t\";\n\n\t// #11217 - WebKit loses check when the name is after the checked attribute\n\tinput.setAttribute( \"checked\", \"t\" );\n\tinput.setAttribute( \"name\", \"t\" );\n\n\tfragment = document.createDocumentFragment();\n\tfragment.appendChild( input );\n\n\t// Check if a disconnected checkbox will retain its checked\n\t// value of true after appended to the DOM (IE6/7)\n\tsupport.appendChecked = input.checked;\n\n\t// WebKit doesn't clone checked state correctly in fragments\n\tsupport.checkClone = fragment.cloneNode( true ).cloneNode( true ).lastChild.checked;\n\n\t// Support: IE<9\n\t// Opera does not clone events (and typeof div.attachEvent === undefined).\n\t// IE9-10 clones events bound via attachEvent, but they don't trigger with .click()\n\tif ( div.attachEvent ) {\n\t\tdiv.attachEvent( \"onclick\", function() {\n\t\t\tsupport.noCloneEvent = false;\n\t\t});\n\n\t\tdiv.cloneNode( true ).click();\n\t}\n\n\t// Support: IE<9 (lack submit/change bubble), Firefox 17+ (lack focusin event)\n\t// Beware of CSP restrictions (https://developer.mozilla.org/en/Security/CSP), test/csp.php\n\tfor ( i in { submit: true, change: true, focusin: true }) {\n\t\tdiv.setAttribute( eventName = \"on\" + i, \"t\" );\n\n\t\tsupport[ i + \"Bubbles\" ] = eventName in window || div.attributes[ eventName ].expando === false;\n\t}\n\n\tdiv.style.backgroundClip = \"content-box\";\n\tdiv.cloneNode( true ).style.backgroundClip = \"\";\n\tsupport.clearCloneStyle = div.style.backgroundClip === \"content-box\";\n\n\t// Run tests that need a body at doc ready\n\tjQuery(function() {\n\t\tvar container, marginDiv, tds,\n\t\t\tdivReset = \"padding:0;margin:0;border:0;display:block;box-sizing:content-box;-moz-box-sizing:content-box;-webkit-box-sizing:content-box;\",\n\t\t\tbody = document.getElementsByTagName(\"body\")[0];\n\n\t\tif ( !body ) {\n\t\t\t// Return for frameset docs that don't have a body\n\t\t\treturn;\n\t\t}\n\n\t\tcontainer = document.createElement(\"div\");\n\t\tcontainer.style.cssText = \"border:0;width:0;height:0;position:absolute;top:0;left:-9999px;margin-top:1px\";\n\n\t\tbody.appendChild( container ).appendChild( div );\n\n\t\t// Support: IE8\n\t\t// Check if table cells still have offsetWidth/Height when they are set\n\t\t// to display:none and there are still other visible table cells in a\n\t\t// table row; if so, offsetWidth/Height are not reliable for use when\n\t\t// determining if an element has been hidden directly using\n\t\t// display:none (it is still safe to use offsets if a parent element is\n\t\t// hidden; don safety goggles and see bug #4512 for more information).\n\t\tdiv.innerHTML = \"<table><tr><td></td><td>t</td></tr></table>\";\n\t\ttds = div.getElementsByTagName(\"td\");\n\t\ttds[ 0 ].style.cssText = \"padding:0;margin:0;border:0;display:none\";\n\t\tisSupported = ( tds[ 0 ].offsetHeight === 0 );\n\n\t\ttds[ 0 ].style.display = \"\";\n\t\ttds[ 1 ].style.display = \"none\";\n\n\t\t// Support: IE8\n\t\t// Check if empty table cells still have offsetWidth/Height\n\t\tsupport.reliableHiddenOffsets = isSupported && ( tds[ 0 ].offsetHeight === 0 );\n\n\t\t// Check box-sizing and margin behavior\n\t\tdiv.innerHTML = \"\";\n\t\tdiv.style.cssText = \"box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;padding:1px;border:1px;display:block;width:4px;margin-top:1%;position:absolute;top:1%;\";\n\t\tsupport.boxSizing = ( div.offsetWidth === 4 );\n\t\tsupport.doesNotIncludeMarginInBodyOffset = ( body.offsetTop !== 1 );\n\n\t\t// Use window.getComputedStyle because jsdom on node.js will break without it.\n\t\tif ( window.getComputedStyle ) {\n\t\t\tsupport.pixelPosition = ( window.getComputedStyle( div, null ) || {} ).top !== \"1%\";\n\t\t\tsupport.boxSizingReliable = ( window.getComputedStyle( div, null ) || { width: \"4px\" } ).width === \"4px\";\n\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// Fails in WebKit before Feb 2011 nightlies\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\tmarginDiv = div.appendChild( document.createElement(\"div\") );\n\t\t\tmarginDiv.style.cssText = div.style.cssText = divReset;\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\n\t\t\tsupport.reliableMarginRight =\n\t\t\t\t!parseFloat( ( window.getComputedStyle( marginDiv, null ) || {} ).marginRight );\n\t\t}\n\n\t\tif ( typeof div.style.zoom !== core_strundefined ) {\n\t\t\t// Support: IE<8\n\t\t\t// Check if natively block-level elements act like inline-block\n\t\t\t// elements when setting their display to 'inline' and giving\n\t\t\t// them layout\n\t\t\tdiv.innerHTML = \"\";\n\t\t\tdiv.style.cssText = divReset + \"width:1px;padding:1px;display:inline;zoom:1\";\n\t\t\tsupport.inlineBlockNeedsLayout = ( div.offsetWidth === 3 );\n\n\t\t\t// Support: IE6\n\t\t\t// Check if elements with layout shrink-wrap their children\n\t\t\tdiv.style.display = \"block\";\n\t\t\tdiv.innerHTML = \"<div></div>\";\n\t\t\tdiv.firstChild.style.width = \"5px\";\n\t\t\tsupport.shrinkWrapBlocks = ( div.offsetWidth !== 3 );\n\n\t\t\tif ( support.inlineBlockNeedsLayout ) {\n\t\t\t\t// Prevent IE 6 from affecting layout for positioned elements #11048\n\t\t\t\t// Prevent IE from shrinking the body in IE 7 mode #12869\n\t\t\t\t// Support: IE<8\n\t\t\t\tbody.style.zoom = 1;\n\t\t\t}\n\t\t}\n\n\t\tbody.removeChild( container );\n\n\t\t// Null elements to avoid leaks in IE\n\t\tcontainer = div = tds = marginDiv = null;\n\t});\n\n\t// Null elements to avoid leaks in IE\n\tall = select = fragment = opt = a = input = null;\n\n\treturn support;\n})();\n\nvar rbrace = /(?:\\{[\\s\\S]*\\}|\\[[\\s\\S]*\\])$/,\n\trmultiDash = /([A-Z])/g;\n\nfunction internalData( elem, name, data, pvt /* Internal Use Only */ ){\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar thisCache, ret,\n\t\tinternalKey = jQuery.expando,\n\t\tgetByName = typeof name === \"string\",\n\n\t\t// We have to handle DOM nodes and JS objects differently because IE6-7\n\t\t// can't GC object references properly across the DOM-JS boundary\n\t\tisNode = elem.nodeType,\n\n\t\t// Only DOM nodes need the global jQuery cache; JS object data is\n\t\t// attached directly to the object so GC can occur automatically\n\t\tcache = isNode ? jQuery.cache : elem,\n\n\t\t// Only defining an ID for JS objects if its cache already exists allows\n\t\t// the code to shortcut on the same path as a DOM node with no cache\n\t\tid = isNode ? elem[ internalKey ] : elem[ internalKey ] && internalKey;\n\n\t// Avoid doing any more work than we need to when trying to get data on an\n\t// object that has no data at all\n\tif ( (!id || !cache[id] || (!pvt && !cache[id].data)) && getByName && data === undefined ) {\n\t\treturn;\n\t}\n\n\tif ( !id ) {\n\t\t// Only DOM nodes need a new unique ID for each element since their data\n\t\t// ends up in the global cache\n\t\tif ( isNode ) {\n\t\t\telem[ internalKey ] = id = core_deletedIds.pop() || jQuery.guid++;\n\t\t} else {\n\t\t\tid = internalKey;\n\t\t}\n\t}\n\n\tif ( !cache[ id ] ) {\n\t\tcache[ id ] = {};\n\n\t\t// Avoids exposing jQuery metadata on plain JS objects when the object\n\t\t// is serialized using JSON.stringify\n\t\tif ( !isNode ) {\n\t\t\tcache[ id ].toJSON = jQuery.noop;\n\t\t}\n\t}\n\n\t// An object can be passed to jQuery.data instead of a key/value pair; this gets\n\t// shallow copied over onto the existing cache\n\tif ( typeof name === \"object\" || typeof name === \"function\" ) {\n\t\tif ( pvt ) {\n\t\t\tcache[ id ] = jQuery.extend( cache[ id ], name );\n\t\t} else {\n\t\t\tcache[ id ].data = jQuery.extend( cache[ id ].data, name );\n\t\t}\n\t}\n\n\tthisCache = cache[ id ];\n\n\t// jQuery data() is stored in a separate object inside the object's internal data\n\t// cache in order to avoid key collisions between internal data and user-defined\n\t// data.\n\tif ( !pvt ) {\n\t\tif ( !thisCache.data ) {\n\t\t\tthisCache.data = {};\n\t\t}\n\n\t\tthisCache = thisCache.data;\n\t}\n\n\tif ( data !== undefined ) {\n\t\tthisCache[ jQuery.camelCase( name ) ] = data;\n\t}\n\n\t// Check for both converted-to-camel and non-converted data property names\n\t// If a data property was specified\n\tif ( getByName ) {\n\n\t\t// First Try to find as-is property data\n\t\tret = thisCache[ name ];\n\n\t\t// Test for null|undefined property data\n\t\tif ( ret == null ) {\n\n\t\t\t// Try to find the camelCased property\n\t\t\tret = thisCache[ jQuery.camelCase( name ) ];\n\t\t}\n\t} else {\n\t\tret = thisCache;\n\t}\n\n\treturn ret;\n}\n\nfunction internalRemoveData( elem, name, pvt ) {\n\tif ( !jQuery.acceptData( elem ) ) {\n\t\treturn;\n\t}\n\n\tvar i, l, thisCache,\n\t\tisNode = elem.nodeType,\n\n\t\t// See jQuery.data for more information\n\t\tcache = isNode ? jQuery.cache : elem,\n\t\tid = isNode ? elem[ jQuery.expando ] : jQuery.expando;\n\n\t// If there is already no cache entry for this object, there is no\n\t// purpose in continuing\n\tif ( !cache[ id ] ) {\n\t\treturn;\n\t}\n\n\tif ( name ) {\n\n\t\tthisCache = pvt ? cache[ id ] : cache[ id ].data;\n\n\t\tif ( thisCache ) {\n\n\t\t\t// Support array or space separated string names for data keys\n\t\t\tif ( !jQuery.isArray( name ) ) {\n\n\t\t\t\t// try the string as a key before any manipulation\n\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\tname = [ name ];\n\t\t\t\t} else {\n\n\t\t\t\t\t// split the camel cased version by spaces unless a key with the spaces exists\n\t\t\t\t\tname = jQuery.camelCase( name );\n\t\t\t\t\tif ( name in thisCache ) {\n\t\t\t\t\t\tname = [ name ];\n\t\t\t\t\t} else {\n\t\t\t\t\t\tname = name.split(\" \");\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\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 = name.concat( jQuery.map( name, jQuery.camelCase ) );\n\t\t\t}\n\n\t\t\tfor ( i = 0, l = name.length; i < l; i++ ) {\n\t\t\t\tdelete thisCache[ name[i] ];\n\t\t\t}\n\n\t\t\t// If there is no data left in the cache, we want to continue\n\t\t\t// and let the cache object itself get destroyed\n\t\t\tif ( !( pvt ? isEmptyDataObject : jQuery.isEmptyObject )( thisCache ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t// See jQuery.data for more information\n\tif ( !pvt ) {\n\t\tdelete cache[ id ].data;\n\n\t\t// Don't destroy the parent cache unless the internal data object\n\t\t// had been the only thing left in it\n\t\tif ( !isEmptyDataObject( cache[ id ] ) ) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\t// Destroy the cache\n\tif ( isNode ) {\n\t\tjQuery.cleanData( [ elem ], true );\n\n\t// Use delete when supported for expandos or `cache` is not a window per isWindow (#10080)\n\t} else if ( jQuery.support.deleteExpando || cache != cache.window ) {\n\t\tdelete cache[ id ];\n\n\t// When all else fails, null\n\t} else {\n\t\tcache[ id ] = null;\n\t}\n}\n\njQuery.extend({\n\tcache: {},\n\n\t// Unique for each copy of jQuery on the page\n\t// Non-digits removed to match rinlinejQuery\n\texpando: \"jQuery\" + ( core_version + Math.random() ).replace( /\\D/g, \"\" ),\n\n\t// The following elements throw uncatchable exceptions if you\n\t// attempt to add expando properties to them.\n\tnoData: {\n\t\t\"embed\": true,\n\t\t// Ban all objects except for Flash (which handle expandos)\n\t\t\"object\": \"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\",\n\t\t\"applet\": true\n\t},\n\n\thasData: function( elem ) {\n\t\telem = elem.nodeType ? jQuery.cache[ elem[jQuery.expando] ] : elem[ jQuery.expando ];\n\t\treturn !!elem && !isEmptyDataObject( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name );\n\t},\n\n\t// For internal use only.\n\t_data: function( elem, name, data ) {\n\t\treturn internalData( elem, name, data, true );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\treturn internalRemoveData( elem, name, true );\n\t},\n\n\t// A method for determining if a DOM node can handle the data expando\n\tacceptData: function( elem ) {\n\t\t// Do not set data on non-element because it will not be cleared (#8335).\n\t\tif ( elem.nodeType && elem.nodeType !== 1 && elem.nodeType !== 9 ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tvar noData = elem.nodeName && jQuery.noData[ elem.nodeName.toLowerCase() ];\n\n\t\t// nodes accept data unless otherwise specified; rejection can be conditional\n\t\treturn !noData || noData !== true && elem.getAttribute(\"classid\") === noData;\n\t}\n});\n\njQuery.fn.extend({\n\tdata: function( key, value ) {\n\t\tvar attrs, name,\n\t\t\telem = this[0],\n\t\t\ti = 0,\n\t\t\tdata = null;\n\n\t\t// Gets all values\n\t\tif ( key === undefined ) {\n\t\t\tif ( this.length ) {\n\t\t\t\tdata = jQuery.data( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !jQuery._data( elem, \"parsedAttrs\" ) ) {\n\t\t\t\t\tattrs = elem.attributes;\n\t\t\t\t\tfor ( ; i < attrs.length; i++ ) {\n\t\t\t\t\t\tname = attrs[i].name;\n\n\t\t\t\t\t\tif ( !name.indexOf( \"data-\" ) ) {\n\t\t\t\t\t\t\tname = jQuery.camelCase( name.slice(5) );\n\n\t\t\t\t\t\t\tdataAttr( elem, name, data[ name ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tjQuery._data( elem, \"parsedAttrs\", 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\tjQuery.data( this, key );\n\t\t\t});\n\t\t}\n\n\t\treturn jQuery.access( this, function( value ) {\n\n\t\t\tif ( value === undefined ) {\n\t\t\t\t// Try to fetch any internally stored data first\n\t\t\t\treturn elem ? dataAttr( elem, key, jQuery.data( elem, key ) ) : null;\n\t\t\t}\n\n\t\t\tthis.each(function() {\n\t\t\t\tjQuery.data( this, key, value );\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\tjQuery.removeData( this, key );\n\t\t});\n\t}\n});\n\nfunction dataAttr( elem, key, data ) {\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\n\t\tvar name = \"data-\" + key.replace( rmultiDash, \"-$1\" ).toLowerCase();\n\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\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\tjQuery.data( elem, key, data );\n\n\t\t} else {\n\t\t\tdata = undefined;\n\t\t}\n\t}\n\n\treturn data;\n}\n\n// checks a cache object for emptiness\nfunction isEmptyDataObject( obj ) {\n\tvar name;\n\tfor ( name in obj ) {\n\n\t\t// if the public data object is empty, the private is still empty\n\t\tif ( name === \"data\" && jQuery.isEmptyObject( obj[name] ) ) {\n\t\t\tcontinue;\n\t\t}\n\t\tif ( name !== \"toJSON\" ) {\n\t\t\treturn false;\n\t\t}\n\t}\n\n\treturn true;\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 = jQuery._data( 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 = jQuery._data( 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\thooks.cur = fn;\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 intended for public consumption - generates a queueHooks object, or returns the current one\n\t_queueHooks: function( elem, type ) {\n\t\tvar key = type + \"queueHooks\";\n\t\treturn jQuery._data( elem, key ) || jQuery._data( elem, key, {\n\t\t\tempty: jQuery.Callbacks(\"once memory\").add(function() {\n\t\t\t\tjQuery._removeData( elem, type + \"queue\" );\n\t\t\t\tjQuery._removeData( elem, 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\t// Based off of the plugin by Clint Helfers, with permission.\n\t// http://blindsignals.com/index.php/2009/07/jquery-delay/\n\tdelay: function( time, type ) {\n\t\ttime = jQuery.fx ? jQuery.fx.speeds[ time ] || time : time;\n\t\ttype = type || \"fx\";\n\n\t\treturn this.queue( type, function( next, hooks ) {\n\t\t\tvar timeout = setTimeout( next, time );\n\t\t\thooks.stop = function() {\n\t\t\t\tclearTimeout( timeout );\n\t\t\t};\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 = jQuery._data( 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 nodeHook, boolHook,\n\trclass = /[\\t\\r\\n]/g,\n\trreturn = /\\r/g,\n\trfocusable = /^(?:input|select|textarea|button|object)$/i,\n\trclickable = /^(?:a|area)$/i,\n\trboolean = /^(?:checked|selected|autofocus|autoplay|async|controls|defer|disabled|hidden|loop|multiple|open|readonly|required|scoped)$/i,\n\truseDefault = /^(?:checked|selected)$/i,\n\tgetSetAttribute = jQuery.support.getSetAttribute,\n\tgetSetInput = jQuery.support.input;\n\njQuery.fn.extend({\n\tattr: function( name, value ) {\n\t\treturn jQuery.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\tprop: function( name, value ) {\n\t\treturn jQuery.access( this, jQuery.prop, name, value, arguments.length > 1 );\n\t},\n\n\tremoveProp: function( name ) {\n\t\tname = jQuery.propFix[ name ] || name;\n\t\treturn this.each(function() {\n\t\t\t// try/catch handles cases where IE balks (such as removing a property on window)\n\t\t\ttry {\n\t\t\t\tthis[ name ] = undefined;\n\t\t\t\tdelete this[ name ];\n\t\t\t} catch( e ) {}\n\t\t});\n\t},\n\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, clazz, j,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = typeof value === \"string\" && value;\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( core_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\t\t\t\t\telem.className = jQuery.trim( cur );\n\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,\n\t\t\ti = 0,\n\t\t\tlen = this.length,\n\t\t\tproceed = arguments.length === 0 || typeof value === \"string\" && value;\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( core_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\t\t\t\t\telem.className = value ? jQuery.trim( cur ) : \"\";\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\t\t\tisBool = typeof stateVal === \"boolean\";\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\tstate = stateVal,\n\t\t\t\t\tclassNames = value.match( core_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\tstate = isBool ? state : !self.hasClass( className );\n\t\t\t\t\tself[ state ? \"addClass\" : \"removeClass\" ]( className );\n\t\t\t\t}\n\n\t\t\t// Toggle whole class name\n\t\t\t} else if ( type === core_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\tjQuery._data( 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 ? \"\" : jQuery._data( 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\tval: function( value ) {\n\t\tvar ret, hooks, 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\t\t\t\tself = jQuery(this);\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, self.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\t\t\t} else if ( typeof val === \"number\" ) {\n\t\t\t\tval += \"\";\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\t// attributes.value is undefined in Blackberry 4.7 but\n\t\t\t\t// uses .value. See #6932\n\t\t\t\tvar val = elem.attributes.value;\n\t\t\t\treturn !val || val.specified ? elem.value : elem.text;\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// oldIE 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( jQuery.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 values = jQuery.makeArray( value );\n\n\t\t\t\tjQuery(elem).find(\"option\").each(function() {\n\t\t\t\t\tthis.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;\n\t\t\t\t});\n\n\t\t\t\tif ( !values.length ) {\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\tattr: function( elem, name, value ) {\n\t\tvar hooks, notxml, 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 === core_strundefined ) {\n\t\t\treturn jQuery.prop( elem, name, value );\n\t\t}\n\n\t\tnotxml = nType !== 1 || !jQuery.isXMLDoc( elem );\n\n\t\t// All attributes are lowercase\n\t\t// Grab necessary hook if one is defined\n\t\tif ( notxml ) {\n\t\t\tname = name.toLowerCase();\n\t\t\thooks = jQuery.attrHooks[ name ] || ( rboolean.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 && notxml && \"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 && notxml && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\treturn ret;\n\n\t\t} else {\n\n\t\t\t// In IE9+, Flash objects don't have .getAttribute (#12945)\n\t\t\t// Support: IE9+\n\t\t\tif ( typeof elem.getAttribute !== core_strundefined ) {\n\t\t\t\tret =  elem.getAttribute( name );\n\t\t\t}\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( core_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 ( rboolean.test( name ) ) {\n\t\t\t\t\t// Set corresponding property to false for boolean attributes\n\t\t\t\t\t// Also clear defaultChecked/defaultSelected (if appropriate) for IE<8\n\t\t\t\t\tif ( !getSetAttribute && ruseDefault.test( name ) ) {\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] =\n\t\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t} else {\n\t\t\t\t\t\telem[ propName ] = false;\n\t\t\t\t\t}\n\n\t\t\t\t// See #9699 for explanation of this approach (setting first, then removal)\n\t\t\t\t} else {\n\t\t\t\t\tjQuery.attr( elem, name, \"\" );\n\t\t\t\t}\n\n\t\t\t\telem.removeAttribute( getSetAttribute ? name : propName );\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 ( !jQuery.support.radioValue && value === \"radio\" && jQuery.nodeName(elem, \"input\") ) {\n\t\t\t\t\t// Setting the type on a radio button after the value resets the value in IE6-9\n\t\t\t\t\t// Reset value to default in case type is set after value during creation\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\tpropFix: {\n\t\ttabindex: \"tabIndex\",\n\t\treadonly: \"readOnly\",\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\",\n\t\tmaxlength: \"maxLength\",\n\t\tcellspacing: \"cellSpacing\",\n\t\tcellpadding: \"cellPadding\",\n\t\trowspan: \"rowSpan\",\n\t\tcolspan: \"colSpan\",\n\t\tusemap: \"useMap\",\n\t\tframeborder: \"frameBorder\",\n\t\tcontenteditable: \"contentEditable\"\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\tif ( 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\treturn ( elem[ name ] = value );\n\t\t\t}\n\n\t\t} else {\n\t\t\tif ( hooks && \"get\" in hooks && (ret = hooks.get( elem, name )) !== null ) {\n\t\t\t\treturn ret;\n\n\t\t\t} else {\n\t\t\t\treturn elem[ name ];\n\t\t\t}\n\t\t}\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\t\t\t\t// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\tvar attributeNode = elem.getAttributeNode(\"tabindex\");\n\n\t\t\t\treturn attributeNode && attributeNode.specified ?\n\t\t\t\t\tparseInt( attributeNode.value, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t0 :\n\t\t\t\t\t\tundefined;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// Hook for boolean attributes\nboolHook = {\n\tget: function( elem, name ) {\n\t\tvar\n\t\t\t// Use .prop to determine if this attribute is understood as boolean\n\t\t\tprop = jQuery.prop( elem, name ),\n\n\t\t\t// Fetch it accordingly\n\t\t\tattr = typeof prop === \"boolean\" && elem.getAttribute( name ),\n\t\t\tdetail = typeof prop === \"boolean\" ?\n\n\t\t\t\tgetSetInput && getSetAttribute ?\n\t\t\t\t\tattr != null :\n\t\t\t\t\t// oldIE fabricates an empty string for missing boolean attributes\n\t\t\t\t\t// and conflates checked/selected into attroperties\n\t\t\t\t\truseDefault.test( name ) ?\n\t\t\t\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] :\n\t\t\t\t\t\t!!attr :\n\n\t\t\t\t// fetch an attribute node for properties not recognized as boolean\n\t\t\t\telem.getAttributeNode( name );\n\n\t\treturn detail && detail.value !== false ?\n\t\t\tname.toLowerCase() :\n\t\t\tundefined;\n\t},\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 if ( getSetInput && getSetAttribute || !ruseDefault.test( name ) ) {\n\t\t\t// IE<8 needs the *property* name\n\t\t\telem.setAttribute( !getSetAttribute && jQuery.propFix[ name ] || name, name );\n\n\t\t// Use defaultChecked and defaultSelected for oldIE\n\t\t} else {\n\t\t\telem[ jQuery.camelCase( \"default-\" + name ) ] = elem[ name ] = true;\n\t\t}\n\n\t\treturn name;\n\t}\n};\n\n// fix oldIE value attroperty\nif ( !getSetInput || !getSetAttribute ) {\n\tjQuery.attrHooks.value = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn jQuery.nodeName( elem, \"input\" ) ?\n\n\t\t\t\t// Ignore the value *property* by using defaultValue\n\t\t\t\telem.defaultValue :\n\n\t\t\t\tret && ret.specified ? ret.value : undefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\tif ( jQuery.nodeName( elem, \"input\" ) ) {\n\t\t\t\t// Does not return so that setAttribute is also used\n\t\t\t\telem.defaultValue = value;\n\t\t\t} else {\n\t\t\t\t// Use nodeHook if defined (#1954); otherwise setAttribute is fine\n\t\t\t\treturn nodeHook && nodeHook.set( elem, value, name );\n\t\t\t}\n\t\t}\n\t};\n}\n\n// IE6/7 do not support getting/setting some attributes with get/setAttribute\nif ( !getSetAttribute ) {\n\n\t// Use this for any attribute in IE6/7\n\t// This fixes almost every IE6/7 issue\n\tnodeHook = jQuery.valHooks.button = {\n\t\tget: function( elem, name ) {\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\treturn ret && ( name === \"id\" || name === \"name\" || name === \"coords\" ? ret.value !== \"\" : ret.specified ) ?\n\t\t\t\tret.value :\n\t\t\t\tundefined;\n\t\t},\n\t\tset: function( elem, value, name ) {\n\t\t\t// Set the existing or create a new attribute node\n\t\t\tvar ret = elem.getAttributeNode( name );\n\t\t\tif ( !ret ) {\n\t\t\t\telem.setAttributeNode(\n\t\t\t\t\t(ret = elem.ownerDocument.createAttribute( name ))\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.value = value += \"\";\n\n\t\t\t// Break association with cloned elements by also using setAttribute (#9646)\n\t\t\treturn name === \"value\" || value === elem.getAttribute( name ) ?\n\t\t\t\tvalue :\n\t\t\t\tundefined;\n\t\t}\n\t};\n\n\t// Set contenteditable to false on removals(#10429)\n\t// Setting to empty string throws an error as an invalid value\n\tjQuery.attrHooks.contenteditable = {\n\t\tget: nodeHook.get,\n\t\tset: function( elem, value, name ) {\n\t\t\tnodeHook.set( elem, value === \"\" ? false : value, name );\n\t\t}\n\t};\n\n\t// Set width and height to auto instead of 0 on empty string( Bug #8150 )\n\t// This is for removals\n\tjQuery.each([ \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tset: function( elem, value ) {\n\t\t\t\tif ( value === \"\" ) {\n\t\t\t\t\telem.setAttribute( name, \"auto\" );\n\t\t\t\t\treturn value;\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t});\n}\n\n\n// Some attributes require a special call on IE\n// http://msdn.microsoft.com/en-us/library/ms536429%28VS.85%29.aspx\nif ( !jQuery.support.hrefNormalized ) {\n\tjQuery.each([ \"href\", \"src\", \"width\", \"height\" ], function( i, name ) {\n\t\tjQuery.attrHooks[ name ] = jQuery.extend( jQuery.attrHooks[ name ], {\n\t\t\tget: function( elem ) {\n\t\t\t\tvar ret = elem.getAttribute( name, 2 );\n\t\t\t\treturn ret == null ? undefined : ret;\n\t\t\t}\n\t\t});\n\t});\n\n\t// href/src property should get the full normalized URL (#10299/#12915)\n\tjQuery.each([ \"href\", \"src\" ], function( i, name ) {\n\t\tjQuery.propHooks[ name ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\treturn elem.getAttribute( name, 4 );\n\t\t\t}\n\t\t};\n\t});\n}\n\nif ( !jQuery.support.style ) {\n\tjQuery.attrHooks.style = {\n\t\tget: function( elem ) {\n\t\t\t// Return undefined in the case of empty string\n\t\t\t// Note: IE uppercases css property names, but if we were to .toLowerCase()\n\t\t\t// .cssText, that would destroy case senstitivity in URL's, like in \"background\"\n\t\t\treturn elem.style.cssText || undefined;\n\t\t},\n\t\tset: function( elem, value ) {\n\t\t\treturn ( elem.style.cssText = value + \"\" );\n\t\t}\n\t};\n}\n\n// Safari mis-reports the default selected property of an option\n// Accessing the parent's selectedIndex property fixes it\nif ( !jQuery.support.optSelected ) {\n\tjQuery.propHooks.selected = jQuery.extend( jQuery.propHooks.selected, {\n\t\tget: function( elem ) {\n\t\t\tvar parent = elem.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tparent.selectedIndex;\n\n\t\t\t\t// Make sure that it also works with optgroups, see #5701\n\t\t\t\tif ( parent.parentNode ) {\n\t\t\t\t\tparent.parentNode.selectedIndex;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t}\n\t});\n}\n\n// IE6/7 call enctype encoding\nif ( !jQuery.support.enctype ) {\n\tjQuery.propFix.enctype = \"encoding\";\n}\n\n// Radios and checkboxes getter/setter\nif ( !jQuery.support.checkOn ) {\n\tjQuery.each([ \"radio\", \"checkbox\" ], function() {\n\t\tjQuery.valHooks[ this ] = {\n\t\t\tget: function( elem ) {\n\t\t\t\t// Handle the case where in Webkit \"\" is returned instead of \"on\" if a value isn't specified\n\t\t\t\treturn elem.getAttribute(\"value\") === null ? \"on\" : elem.value;\n\t\t\t}\n\t\t};\n\t});\n}\njQuery.each([ \"radio\", \"checkbox\" ], function() {\n\tjQuery.valHooks[ this ] = jQuery.extend( jQuery.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});\nvar rformElems = /^(?:input|select|textarea)$/i,\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|contextmenu)|click/,\n\trfocusMorph = /^(?:focusinfocus|focusoutblur)$/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)$/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\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\t\tvar tmp, events, t, handleObjIn,\n\t\t\tspecial, eventHandle, handleObj,\n\t\t\thandlers, type, namespaces, origType,\n\t\t\telemData = jQuery._data( 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 !== core_strundefined && (!e || jQuery.event.triggered !== e.type) ?\n\t\t\t\t\tjQuery.event.dispatch.apply( eventHandle.elem, arguments ) :\n\t\t\t\t\tundefined;\n\t\t\t};\n\t\t\t// Add elem as a property of the handle fn to prevent a memory leak with IE non-native events\n\t\t\teventHandle.elem = elem;\n\t\t}\n\n\t\t// Handle multiple events separated by a space\n\t\t// jQuery(...).bind(\"mouseover mouseout\", fn);\n\t\ttypes = ( types || \"\" ).match( core_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// 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/attachEvent 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\t// Bind the global event handler to the element\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle, false );\n\n\t\t\t\t\t} else if ( elem.attachEvent ) {\n\t\t\t\t\t\telem.attachEvent( \"on\" + type, eventHandle );\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\t// Nullify elem to prevent memory leaks in IE\n\t\telem = null;\n\t},\n\n\t// Detach an event or set of events from an element\n\tremove: function( elem, types, handler, selector, mappedTypes ) {\n\t\tvar j, handleObj, tmp,\n\t\t\torigCount, t, events,\n\t\t\tspecial, handlers, type,\n\t\t\tnamespaces, origType,\n\t\t\telemData = jQuery.hasData( elem ) && jQuery._data( 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( core_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\n\t\t\t// removeData also checks for emptiness and clears the expando if empty\n\t\t\t// so use it instead of delete\n\t\t\tjQuery._removeData( elem, \"events\" );\n\t\t}\n\t},\n\n\ttrigger: function( event, data, elem, onlyHandlers ) {\n\t\tvar handle, ontype, cur,\n\t\t\tbubbleType, special, tmp, i,\n\t\t\teventPath = [ elem || document ],\n\t\t\ttype = core_hasOwn.call( event, \"type\" ) ? event.type : event,\n\t\t\tnamespaces = core_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\tevent.isTrigger = true;\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 = ( jQuery._data( cur, \"events\" ) || {} )[ event.type ] && jQuery._data( 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 && jQuery.acceptData( cur ) && handle.apply && handle.apply( cur, data ) === false ) {\n\t\t\t\tevent.preventDefault();\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( elem.ownerDocument, data ) === false) &&\n\t\t\t\t!(type === \"click\" && jQuery.nodeName( elem, \"a\" )) && jQuery.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// Can't use an .isFunction() check here because IE6/7 fails that test.\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 && 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\ttry {\n\t\t\t\t\t\telem[ type ]();\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// IE<9 dies on focus/blur to hidden element (#1486,#12518)\n\t\t\t\t\t\t// only reproducible on winXP IE8 native, not IE9 in IE8 mode\n\t\t\t\t\t}\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, ret, handleObj, matched, j,\n\t\t\thandlerQueue = [],\n\t\t\targs = core_slice.call( arguments ),\n\t\t\thandlers = ( jQuery._data( 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\n\t\t\t\t// 2) have namespace(s) 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 sel, handleObj, matches, i,\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 check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && (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\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: IE<9\n\t\t// Fix target property (#1925)\n\t\tif ( !event.target ) {\n\t\t\tevent.target = originalEvent.srcElement || document;\n\t\t}\n\n\t\t// Support: Chrome 23+, Safari?\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\t// Support: IE<9\n\t\t// For mouse/key events, metaKey==false if it's undefined (#3368, #11328)\n\t\tevent.metaKey = !!event.metaKey;\n\n\t\treturn fixHook.filter ? fixHook.filter( event, originalEvent ) : event;\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 fromElement offsetX offsetY pageX pageY screenX screenY toElement\".split(\" \"),\n\t\tfilter: function( event, original ) {\n\t\t\tvar body, eventDoc, doc,\n\t\t\t\tbutton = original.button,\n\t\t\t\tfromElement = original.fromElement;\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 relatedTarget, if necessary\n\t\t\tif ( !event.relatedTarget && fromElement ) {\n\t\t\t\tevent.relatedTarget = fromElement === event.target ? original.toElement : fromElement;\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\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\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 ( jQuery.nodeName( this, \"input\" ) && this.type === \"checkbox\" && this.click ) {\n\t\t\t\t\tthis.click();\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\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 !== document.activeElement && this.focus ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tthis.focus();\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t} catch ( e ) {\n\t\t\t\t\t\t// Support: IE<9\n\t\t\t\t\t\t// If we error on focus to hidden element (#1486, #12518),\n\t\t\t\t\t\t// let .trigger() run the handlers\n\t\t\t\t\t}\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 === document.activeElement && 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\n\t\tbeforeunload: {\n\t\t\tpostDispatch: function( event ) {\n\n\t\t\t\t// Even when returnValue equals to undefined Firefox will still show alert\n\t\t\t\tif ( event.result !== undefined ) {\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{ type: 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 = document.removeEventListener ?\n\tfunction( elem, type, handle ) {\n\t\tif ( elem.removeEventListener ) {\n\t\t\telem.removeEventListener( type, handle, false );\n\t\t}\n\t} :\n\tfunction( elem, type, handle ) {\n\t\tvar name = \"on\" + type;\n\n\t\tif ( elem.detachEvent ) {\n\n\t\t\t// #8545, #7054, preventing memory leaks for custom events in IE6-8\n\t\t\t// detachEvent needed property on element, by name of that event, to properly expose it to GC\n\t\t\tif ( typeof elem[ name ] === core_strundefined ) {\n\t\t\t\telem[ name ] = null;\n\t\t\t}\n\n\t\t\telem.detachEvent( name, handle );\n\t\t}\n\t};\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 || src.returnValue === false ||\n\t\t\tsrc.getPreventDefault && src.getPreventDefault() ) ? returnTrue : returnFalse;\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\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// If preventDefault exists, run it on the original event\n\t\tif ( e.preventDefault ) {\n\t\t\te.preventDefault();\n\n\t\t// Support: IE\n\t\t// Otherwise set the returnValue property of the original event to false\n\t\t} else {\n\t\t\te.returnValue = false;\n\t\t}\n\t},\n\tstopPropagation: function() {\n\t\tvar e = this.originalEvent;\n\n\t\tthis.isPropagationStopped = returnTrue;\n\t\tif ( !e ) {\n\t\t\treturn;\n\t\t}\n\t\t// If stopPropagation exists, run it on the original event\n\t\tif ( e.stopPropagation ) {\n\t\t\te.stopPropagation();\n\t\t}\n\n\t\t// Support: IE\n\t\t// Set the cancelBubble property of the original event to true\n\t\te.cancelBubble = true;\n\t},\n\tstopImmediatePropagation: function() {\n\t\tthis.isImmediatePropagationStopped = returnTrue;\n\t\tthis.stopPropagation();\n\t}\n};\n\n// Create mouseenter/leave events using mouseover/out and event-time checks\njQuery.each({\n\tmouseenter: \"mouseover\",\n\tmouseleave: \"mouseout\"\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// IE submit delegation\nif ( !jQuery.support.submitBubbles ) {\n\n\tjQuery.event.special.submit = {\n\t\tsetup: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Lazy-add a submit handler when a descendant form may potentially be submitted\n\t\t\tjQuery.event.add( this, \"click._submit keypress._submit\", function( e ) {\n\t\t\t\t// Node name check avoids a VML-related crash in IE (#9807)\n\t\t\t\tvar elem = e.target,\n\t\t\t\t\tform = jQuery.nodeName( elem, \"input\" ) || jQuery.nodeName( elem, \"button\" ) ? elem.form : undefined;\n\t\t\t\tif ( form && !jQuery._data( form, \"submitBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( form, \"submit._submit\", function( event ) {\n\t\t\t\t\t\tevent._submit_bubble = true;\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( form, \"submitBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t\t// return undefined since we don't need an event listener\n\t\t},\n\n\t\tpostDispatch: function( event ) {\n\t\t\t// If form was submitted by the user, bubble the event up the tree\n\t\t\tif ( event._submit_bubble ) {\n\t\t\t\tdelete event._submit_bubble;\n\t\t\t\tif ( this.parentNode && !event.isTrigger ) {\n\t\t\t\t\tjQuery.event.simulate( \"submit\", this.parentNode, event, true );\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\t// Only need this for delegated form submit events\n\t\t\tif ( jQuery.nodeName( this, \"form\" ) ) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t// Remove delegated handlers; cleanData eventually reaps submit handlers attached above\n\t\t\tjQuery.event.remove( this, \"._submit\" );\n\t\t}\n\t};\n}\n\n// IE change delegation and checkbox/radio fix\nif ( !jQuery.support.changeBubbles ) {\n\n\tjQuery.event.special.change = {\n\n\t\tsetup: function() {\n\n\t\t\tif ( rformElems.test( this.nodeName ) ) {\n\t\t\t\t// IE doesn't fire change on a check/radio until blur; trigger it on click\n\t\t\t\t// after a propertychange. Eat the blur-change in special.change.handle.\n\t\t\t\t// This still fires onchange a second time for check/radio after blur.\n\t\t\t\tif ( this.type === \"checkbox\" || this.type === \"radio\" ) {\n\t\t\t\t\tjQuery.event.add( this, \"propertychange._change\", function( event ) {\n\t\t\t\t\t\tif ( event.originalEvent.propertyName === \"checked\" ) {\n\t\t\t\t\t\t\tthis._just_changed = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery.event.add( this, \"click._change\", function( event ) {\n\t\t\t\t\t\tif ( this._just_changed && !event.isTrigger ) {\n\t\t\t\t\t\t\tthis._just_changed = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t// Allow triggered, simulated change events (#11500)\n\t\t\t\t\t\tjQuery.event.simulate( \"change\", this, event, true );\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\t// Delegated event; lazy-add a change handler on descendant inputs\n\t\t\tjQuery.event.add( this, \"beforeactivate._change\", function( e ) {\n\t\t\t\tvar elem = e.target;\n\n\t\t\t\tif ( rformElems.test( elem.nodeName ) && !jQuery._data( elem, \"changeBubbles\" ) ) {\n\t\t\t\t\tjQuery.event.add( elem, \"change._change\", function( event ) {\n\t\t\t\t\t\tif ( this.parentNode && !event.isSimulated && !event.isTrigger ) {\n\t\t\t\t\t\t\tjQuery.event.simulate( \"change\", this.parentNode, event, true );\n\t\t\t\t\t\t}\n\t\t\t\t\t});\n\t\t\t\t\tjQuery._data( elem, \"changeBubbles\", true );\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\thandle: function( event ) {\n\t\t\tvar elem = event.target;\n\n\t\t\t// Swallow native change events from checkbox/radio, we already triggered them above\n\t\t\tif ( this !== elem || event.isSimulated || event.isTrigger || (elem.type !== \"radio\" && elem.type !== \"checkbox\") ) {\n\t\t\t\treturn event.handleObj.handler.apply( this, arguments );\n\t\t\t}\n\t\t},\n\n\t\tteardown: function() {\n\t\t\tjQuery.event.remove( this, \"._change\" );\n\n\t\t\treturn !rformElems.test( this.nodeName );\n\t\t}\n\t};\n}\n\n// Create \"bubbling\" focus and blur events\nif ( !jQuery.support.focusinBubbles ) {\n\tjQuery.each({ focus: \"focusin\", blur: \"focusout\" }, function( orig, fix ) {\n\n\t\t// Attach a single capturing handler while someone wants focusin/focusout\n\t\tvar attaches = 0,\n\t\t\thandler = 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\tif ( attaches++ === 0 ) {\n\t\t\t\t\tdocument.addEventListener( orig, handler, true );\n\t\t\t\t}\n\t\t\t},\n\t\t\tteardown: function() {\n\t\t\t\tif ( --attaches === 0 ) {\n\t\t\t\t\tdocument.removeEventListener( orig, handler, true );\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 type, origFn;\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\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\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 * Sizzle CSS Selector Engine\n * Copyright 2012 jQuery Foundation and other contributors\n * Released under the MIT license\n * http://sizzlejs.com/\n */\n(function( window, undefined ) {\n\nvar i,\n\tcachedruns,\n\tExpr,\n\tgetText,\n\tisXML,\n\tcompile,\n\thasDuplicate,\n\toutermostContext,\n\n\t// Local document vars\n\tsetDocument,\n\tdocument,\n\tdocElem,\n\tdocumentIsXML,\n\trbuggyQSA,\n\trbuggyMatches,\n\tmatches,\n\tcontains,\n\tsortOrder,\n\n\t// Instance-specific data\n\texpando = \"sizzle\" + -(new Date()),\n\tpreferredDoc = window.document,\n\tsupport = {},\n\tdirruns = 0,\n\tdone = 0,\n\tclassCache = createCache(),\n\ttokenCache = createCache(),\n\tcompilerCache = createCache(),\n\n\t// General-purpose constants\n\tstrundefined = typeof undefined,\n\tMAX_NEGATIVE = 1 << 31,\n\n\t// Array methods\n\tarr = [],\n\tpop = arr.pop,\n\tpush = arr.push,\n\tslice = arr.slice,\n\t// Use a stripped-down indexOf if we can't use a native one\n\tindexOf = arr.indexOf || function( elem ) {\n\t\tvar i = 0,\n\t\t\tlen = this.length;\n\t\tfor ( ; i < len; i++ ) {\n\t\t\tif ( this[i] === elem ) {\n\t\t\t\treturn i;\n\t\t\t}\n\t\t}\n\t\treturn -1;\n\t},\n\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// Acceptable operators http://www.w3.org/TR/selectors/#attribute-selectors\n\toperators = \"([*^$|!~]?=)\",\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + characterEncoding + \")\" + whitespace +\n\t\t\"*(?:\" + operators + whitespace + \"*(?:(['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|(\" + identifier + \")|)|)\" + whitespace + \"*\\\\]\",\n\n\t// Prefer arguments quoted,\n\t//   then not containing pseudos/brackets,\n\t//   then attribute selectors/non-parenthetical expressions,\n\t//   then anything else\n\t// These preferences are here to reduce the number of selectors\n\t//   needing tokenize in the PSEUDO preFilter\n\tpseudos = \":(\" + characterEncoding + \")(?:\\\\(((['\\\"])((?:\\\\\\\\.|[^\\\\\\\\])*?)\\\\3|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\" + attributes.replace( 3, 8 ) + \")*)|.*)\\\\)|)\",\n\n\t// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter\n\trtrim = new RegExp( \"^\" + whitespace + \"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\" + whitespace + \"+$\", \"g\" ),\n\n\trcomma = new RegExp( \"^\" + whitespace + \"*,\" + whitespace + \"*\" ),\n\trcombinators = new RegExp( \"^\" + whitespace + \"*([\\\\x20\\\\t\\\\r\\\\n\\\\f>+~])\" + whitespace + \"*\" ),\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\"NAME\": new RegExp( \"^\\\\[name=['\\\"]?(\" + 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// 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\trsibling = /[\\x20\\t\\r\\n\\f]*[+~]/,\n\n\trnative = /^[^{]+\\{\\s*\\[native code/,\n\n\t// Easily-parseable/retrievable ID or TAG or CLASS selectors\n\trquickExpr = /^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,\n\n\trinputs = /^(?:input|select|textarea|button)$/i,\n\trheader = /^h\\d$/i,\n\n\trescape = /'|\\\\/g,\n\trattributeQuotes = /\\=[\\x20\\t\\r\\n\\f]*([^'\"\\]]*)[\\x20\\t\\r\\n\\f]*\\]/g,\n\n\t// CSS escapes http://www.w3.org/TR/CSS21/syndata.html#escaped-characters\n\trunescape = /\\\\([\\da-fA-F]{1,6}[\\x20\\t\\r\\n\\f]?|.)/g,\n\tfunescape = function( _, escaped ) {\n\t\tvar high = \"0x\" + escaped - 0x10000;\n\t\t// NaN means non-codepoint\n\t\treturn high !== high ?\n\t\t\tescaped :\n\t\t\t// BMP codepoint\n\t\t\thigh < 0 ?\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// Use a stripped-down slice if we can't use a native one\ntry {\n\tslice.call( preferredDoc.documentElement.childNodes, 0 )[0].nodeType;\n} catch ( e ) {\n\tslice = function( i ) {\n\t\tvar elem,\n\t\t\tresults = [];\n\t\twhile ( (elem = this[i++]) ) {\n\t\t\tresults.push( elem );\n\t\t}\n\t\treturn results;\n\t};\n}\n\n/**\n * For feature detection\n * @param {Function} fn The function to test for native support\n */\nfunction isNative( fn ) {\n\treturn rnative.test( fn + \"\" );\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 cache,\n\t\tkeys = [];\n\n\treturn (cache = function( 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}\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// release memory in IE\n\t\tdiv = null;\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\n\tif ( !selector || typeof selector !== \"string\" ) {\n\t\treturn results;\n\t}\n\n\tif ( (nodeType = context.nodeType) !== 1 && nodeType !== 9 ) {\n\t\treturn [];\n\t}\n\n\tif ( !documentIsXML && !seed ) {\n\n\t\t// Shortcuts\n\t\tif ( (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 #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, slice.call(context.getElementsByTagName( selector ), 0) );\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.getByClassName && context.getElementsByClassName ) {\n\t\t\t\tpush.apply( results, slice.call(context.getElementsByClassName( m ), 0) );\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.test(selector) ) {\n\t\t\told = true;\n\t\t\tnid = expando;\n\t\t\tnewContext = context;\n\t\t\tnewSelector = nodeType === 9 && 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 ) && 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, slice.call( newContext.querySelectorAll(\n\t\t\t\t\t\tnewSelector\n\t\t\t\t\t), 0 ) );\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 * Detect xml\n * @param {Element|Object} elem An element or a document\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 doc = 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\n\t// Support tests\n\tdocumentIsXML = isXML( doc );\n\n\t// Check if getElementsByTagName(\"*\") returns only elements\n\tsupport.tagNameNoComments = assert(function( div ) {\n\t\tdiv.appendChild( doc.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Check if attributes should be retrieved by attribute nodes\n\tsupport.attributes = assert(function( div ) {\n\t\tdiv.innerHTML = \"<select></select>\";\n\t\tvar type = typeof div.lastChild.getAttribute(\"multiple\");\n\t\t// IE8 returns a string for some attributes even when not present\n\t\treturn type !== \"boolean\" && type !== \"string\";\n\t});\n\n\t// Check if getElementsByClassName can be trusted\n\tsupport.getByClassName = assert(function( div ) {\n\t\t// Opera can't find a second classname (in 9.6)\n\t\tdiv.innerHTML = \"<div class='hidden e'></div><div class='hidden'></div>\";\n\t\tif ( !div.getElementsByClassName || !div.getElementsByClassName(\"e\").length ) {\n\t\t\treturn false;\n\t\t}\n\n\t\t// Safari 3.2 caches class attributes and doesn't catch changes\n\t\tdiv.lastChild.className = \"e\";\n\t\treturn div.getElementsByClassName(\"e\").length === 2;\n\t});\n\n\t// Check if getElementById returns elements by name\n\t// Check if getElementsByName privileges form controls or returns elements by ID\n\tsupport.getByName = assert(function( div ) {\n\t\t// Inject content\n\t\tdiv.id = expando + 0;\n\t\tdiv.innerHTML = \"<a name='\" + expando + \"'></a><div name='\" + expando + \"'></div>\";\n\t\tdocElem.insertBefore( div, docElem.firstChild );\n\n\t\t// Test\n\t\tvar pass = doc.getElementsByName &&\n\t\t\t// buggy browsers will return fewer than the correct 2\n\t\t\tdoc.getElementsByName( expando ).length === 2 +\n\t\t\t// buggy browsers will return more than the correct 0\n\t\t\tdoc.getElementsByName( expando + 0 ).length;\n\t\tsupport.getIdNotName = !doc.getElementById( expando );\n\n\t\t// Cleanup\n\t\tdocElem.removeChild( div );\n\n\t\treturn pass;\n\t});\n\n\t// IE6/7 return modified attributes\n\tExpr.attrHandle = assert(function( div ) {\n\t\tdiv.innerHTML = \"<a href='#'></a>\";\n\t\treturn div.firstChild && typeof div.firstChild.getAttribute !== strundefined &&\n\t\t\tdiv.firstChild.getAttribute(\"href\") === \"#\";\n\t}) ?\n\t\t{} :\n\t\t{\n\t\t\t\"href\": function( elem ) {\n\t\t\t\treturn elem.getAttribute( \"href\", 2 );\n\t\t\t},\n\t\t\t\"type\": function( elem ) {\n\t\t\t\treturn elem.getAttribute(\"type\");\n\t\t\t}\n\t\t};\n\n\t// ID find and filter\n\tif ( support.getIdNotName ) {\n\t\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && !documentIsXML ) {\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\tExpr.find[\"ID\"] = function( id, context ) {\n\t\t\tif ( typeof context.getElementById !== strundefined && !documentIsXML ) {\n\t\t\t\tvar m = context.getElementById( id );\n\n\t\t\t\treturn m ?\n\t\t\t\t\tm.id === id || typeof m.getAttributeNode !== strundefined && m.getAttributeNode(\"id\").value === id ?\n\t\t\t\t\t\t[m] :\n\t\t\t\t\t\tundefined :\n\t\t\t\t\t[];\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\tvar node = typeof elem.getAttributeNode !== strundefined && 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.tagNameNoComments ?\n\t\tfunction( tag, context ) {\n\t\t\tif ( typeof context.getElementsByTagName !== strundefined ) {\n\t\t\t\treturn context.getElementsByTagName( tag );\n\t\t\t}\n\t\t} :\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\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// Name\n\tExpr.find[\"NAME\"] = support.getByName && function( tag, context ) {\n\t\tif ( typeof context.getElementsByName !== strundefined ) {\n\t\t\treturn context.getElementsByName( name );\n\t\t}\n\t};\n\n\t// Class\n\tExpr.find[\"CLASS\"] = support.getByClassName && function( className, context ) {\n\t\tif ( typeof context.getElementsByClassName !== strundefined && !documentIsXML ) {\n\t\t\treturn context.getElementsByClassName( className );\n\t\t}\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// no need to also add to buggyMatches since matches checks buggyQSA\n\t// A support test would require too much code (would include document ready)\n\trbuggyQSA = [ \":focus\" ];\n\n\tif ( (support.qsa = isNative(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 explictly\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\tdiv.innerHTML = \"<select><option selected=''></option></select>\";\n\n\t\t\t// IE8 - Some boolean attributes are not treated correctly\n\t\t\tif ( !div.querySelectorAll(\"[selected]\").length ) {\n\t\t\t\trbuggyQSA.push( \"\\\\[\" + whitespace + \"*(?:checked|disabled|ismap|multiple|readonly|selected|value)\" );\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\t\t});\n\n\t\tassert(function( div ) {\n\n\t\t\t// Opera 10-12/IE8 - ^= $= *= and empty values\n\t\t\t// Should not select anything\n\t\t\tdiv.innerHTML = \"<input type='hidden' i=''/>\";\n\t\t\tif ( div.querySelectorAll(\"[i^='']\").length ) {\n\t\t\t\trbuggyQSA.push( \"[*^$]=\" + 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 = isNative( (matches = docElem.matchesSelector ||\n\t\tdocElem.mozMatchesSelector ||\n\t\tdocElem.webkitMatchesSelector ||\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 = new RegExp( rbuggyQSA.join(\"|\") );\n\trbuggyMatches = new RegExp( rbuggyMatches.join(\"|\") );\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 = isNative(docElem.contains) || docElem.compareDocumentPosition ?\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// Document order sorting\n\tsortOrder = docElem.compareDocumentPosition ?\n\tfunction( a, b ) {\n\t\tvar compare;\n\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\t\t}\n\n\t\tif ( (compare = b.compareDocumentPosition && a.compareDocumentPosition && a.compareDocumentPosition( b )) ) {\n\t\t\tif ( compare & 1 || a.parentNode && a.parentNode.nodeType === 11 ) {\n\t\t\t\tif ( a === doc || contains( preferredDoc, a ) ) {\n\t\t\t\t\treturn -1;\n\t\t\t\t}\n\t\t\t\tif ( b === doc || contains( preferredDoc, b ) ) {\n\t\t\t\t\treturn 1;\n\t\t\t\t}\n\t\t\t\treturn 0;\n\t\t\t}\n\t\t\treturn compare & 4 ? -1 : 1;\n\t\t}\n\n\t\treturn a.compareDocumentPosition ? -1 : 1;\n\t} :\n\tfunction( a, b ) {\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// Exit early if the nodes are identical\n\t\tif ( a === b ) {\n\t\t\thasDuplicate = true;\n\t\t\treturn 0;\n\n\t\t// Parentless nodes are either documents or disconnected\n\t\t} else if ( !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\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\t// Always assume the presence of duplicates if sort doesn't\n\t// pass them to our comparison function (as in Google Chrome).\n\thasDuplicate = false;\n\t[0, 0].sort( sortOrder );\n\tsupport.detectDuplicates = hasDuplicate;\n\n\treturn document;\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\t// rbuggyQSA always contains :focus, so no need for an existence check\n\tif ( support.matchesSelector && !documentIsXML && (!rbuggyMatches || !rbuggyMatches.test(expr)) && !rbuggyQSA.test(expr) ) {\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\tvar val;\n\n\t// Set document vars if needed\n\tif ( ( elem.ownerDocument || elem ) !== document ) {\n\t\tsetDocument( elem );\n\t}\n\n\tif ( !documentIsXML ) {\n\t\tname = name.toLowerCase();\n\t}\n\tif ( (val = Expr.attrHandle[ name ]) ) {\n\t\treturn val( elem );\n\t}\n\tif ( documentIsXML || support.attributes ) {\n\t\treturn elem.getAttribute( name );\n\t}\n\treturn ( (val = elem.getAttributeNode( name )) || elem.getAttribute( name ) ) && elem[ name ] === true ?\n\t\tname :\n\t\tval && val.specified ? val.value : null;\n};\n\nSizzle.error = function( msg ) {\n\tthrow new Error( \"Syntax error, unrecognized expression: \" + msg );\n};\n\n// Document sorting and removing duplicates\nSizzle.uniqueSort = function( results ) {\n\tvar elem,\n\t\tduplicates = [],\n\t\ti = 1,\n\t\tj = 0;\n\n\t// Unless we *know* we can detect duplicates, assume their presence\n\thasDuplicate = !support.detectDuplicates;\n\tresults.sort( sortOrder );\n\n\tif ( hasDuplicate ) {\n\t\tfor ( ; (elem = results[i]); i++ ) {\n\t\t\tif ( elem === results[ i - 1 ] ) {\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\treturn results;\n};\n\nfunction siblingCheck( a, b ) {\n\tvar cur = b && a,\n\t\tdiff = cur && ( ~b.sourceIndex || MAX_NEGATIVE ) - ( ~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// Returns a function to use in pseudos for input types\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// Returns a function to use in pseudos for buttons\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// Returns a function to use in pseudos for positionals\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 * 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\tfor ( ; (node = elem[i]); 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 (see #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\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[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[5] && 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[4] ) {\n\t\t\t\tmatch[2] = match[4];\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( nodeName ) {\n\t\t\tif ( nodeName === \"*\" ) {\n\t\t\t\treturn function() { return true; };\n\t\t\t}\n\n\t\t\tnodeName = nodeName.replace( runescape, funescape ).toLowerCase();\n\t\t\treturn function( elem ) {\n\t\t\t\treturn elem.nodeName && elem.nodeName.toLowerCase() === nodeName;\n\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( elem.className || (typeof elem.getAttribute !== strundefined && 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 + \" \" ).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.call( 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\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\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 identifider\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 = documentIsXML ?\n\t\t\t\t\t\telem.getAttribute(\"xml:lang\") || elem.getAttribute(\"lang\") :\n\t\t\t\t\t\telem.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 only affected by element nodes and content nodes(including text(3), cdata(4)),\n\t\t\t//   not comment, processing instructions, or others\n\t\t\t// Thanks to Diego Perini for the nodeName shortcut\n\t\t\t//   Greater than \"@\" means alpha characters (specifically not starting with \"#\" or \"?\")\n\t\t\tfor ( elem = elem.firstChild; elem; elem = elem.nextSibling ) {\n\t\t\t\tif ( elem.nodeName > \"@\" || elem.nodeType === 3 || elem.nodeType === 4 ) {\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\t// IE6 and 7 will map elem.type to 'text' for new HTML5 types (search, etc)\n\t\t\t// use getAttribute instead to test this case\n\t\t\treturn elem.nodeName.toLowerCase() === \"input\" &&\n\t\t\t\telem.type === \"text\" &&\n\t\t\t\t( (attr = elem.getAttribute(\"type\")) == null || attr.toLowerCase() === elem.type );\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\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\nfunction tokenize( 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 data, cache, outerCache,\n\t\t\t\tdirkey = 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 ( (cache = outerCache[ dir ]) && cache[0] === dirkey ) {\n\t\t\t\t\t\t\tif ( (data = cache[1]) === true || data === cachedruns ) {\n\t\t\t\t\t\t\t\treturn data === true;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tcache = outerCache[ dir ] = [ dirkey ];\n\t\t\t\t\t\t\tcache[1] = matcher( elem, context, xml ) || cachedruns;\n\t\t\t\t\t\t\tif ( cache[1] === true ) {\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 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.call( 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.call( checkContext, elem ) > -1;\n\t\t}, implicitRelative, true ),\n\t\tmatchers = [ function( elem, context, xml ) {\n\t\t\treturn ( !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} ];\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( tokens.slice( 0, i - 1 ) ).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\t// A counter to specify which element is currently being matched\n\tvar matcherCachedRuns = 0,\n\t\tbySet = setMatchers.length > 0,\n\t\tbyElement = elementMatchers.length > 0,\n\t\tsuperMatcher = function( seed, context, xml, results, expandContext ) {\n\t\t\tvar elem, j, matcher,\n\t\t\t\tsetMatched = [],\n\t\t\t\tmatchedCount = 0,\n\t\t\t\ti = \"0\",\n\t\t\t\tunmatched = seed && [],\n\t\t\t\toutermost = expandContext != null,\n\t\t\t\tcontextBackup = outermostContext,\n\t\t\t\t// We must always have either seed elements or context\n\t\t\t\telems = seed || byElement && Expr.find[\"TAG\"]( \"*\", expandContext && context.parentNode || context ),\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\n\t\t\tif ( outermost ) {\n\t\t\t\toutermostContext = context !== document && context;\n\t\t\t\tcachedruns = matcherCachedRuns;\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\tfor ( ; (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\tcachedruns = ++matcherCachedRuns;\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, group /* 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 ( !group ) {\n\t\t\tgroup = tokenize( selector );\n\t\t}\n\t\ti = group.length;\n\t\twhile ( i-- ) {\n\t\t\tcached = matcherFromTokens( group[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\t}\n\treturn cached;\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 select( selector, context, results, seed ) {\n\tvar i, tokens, token, type, find,\n\t\tmatch = tokenize( selector );\n\n\tif ( !seed ) {\n\t\t// Try to minimize operations if there is only one group\n\t\tif ( match.length === 1 ) {\n\n\t\t\t// Take a shortcut and set the context if the root selector is an ID\n\t\t\ttokens = match[0] = match[0].slice( 0 );\n\t\t\tif ( tokens.length > 2 && (token = tokens[0]).type === \"ID\" &&\n\t\t\t\t\tcontext.nodeType === 9 && !documentIsXML &&\n\t\t\t\t\tExpr.relative[ tokens[1].type ] ) {\n\n\t\t\t\tcontext = Expr.find[\"ID\"]( token.matches[0].replace( runescape, funescape ), context )[0];\n\t\t\t\tif ( !context ) {\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\n\t\t\t\tselector = selector.slice( tokens.shift().value.length );\n\t\t\t}\n\n\t\t\t// Fetch a seed set for right-to-left matching\n\t\t\ti = matchExpr[\"needsContext\"].test( selector ) ? 0 : tokens.length;\n\t\t\twhile ( i-- ) {\n\t\t\t\ttoken = tokens[i];\n\n\t\t\t\t// Abort if we hit a combinator\n\t\t\t\tif ( Expr.relative[ (type = token.type) ] ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif ( (find = Expr.find[ type ]) ) {\n\t\t\t\t\t// Search, expanding context for leading sibling combinators\n\t\t\t\t\tif ( (seed = find(\n\t\t\t\t\t\ttoken.matches[0].replace( runescape, funescape ),\n\t\t\t\t\t\trsibling.test( tokens[0].type ) && context.parentNode || context\n\t\t\t\t\t)) ) {\n\n\t\t\t\t\t\t// If seed is empty or no tokens remain, we can return early\n\t\t\t\t\t\ttokens.splice( i, 1 );\n\t\t\t\t\t\tselector = seed.length && toSelector( tokens );\n\t\t\t\t\t\tif ( !selector ) {\n\t\t\t\t\t\t\tpush.apply( results, slice.call( seed, 0 ) );\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\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\t}\n\n\t// Compile and execute a filtering function\n\t// Provide `match` to avoid retokenization if we modified the selector above\n\tcompile( selector, match )(\n\t\tseed,\n\t\tcontext,\n\t\tdocumentIsXML,\n\t\tresults,\n\t\trsibling.test( selector )\n\t);\n\treturn results;\n}\n\n// Deprecated\nExpr.pseudos[\"nth\"] = Expr.pseudos[\"eq\"];\n\n// Easy API for creating new setFilters\nfunction setFilters() {}\nExpr.filters = setFilters.prototype = Expr.pseudos;\nExpr.setFilters = new setFilters();\n\n// Initialize with the default document\nsetDocument();\n\n// Override sizzle attribute retrieval\nSizzle.attr = jQuery.attr;\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})( window );\nvar runtil = /Until$/,\n\trparentsprev = /^(?:parents|prev(?:Until|All))/,\n\tisSimple = /^.[^:#\\[\\.,]*$/,\n\trneedsContext = jQuery.expr.match.needsContext,\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.fn.extend({\n\tfind: function( selector ) {\n\t\tvar i, ret, self,\n\t\t\tlen = this.length;\n\n\t\tif ( typeof selector !== \"string\" ) {\n\t\t\tself = this;\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\tret = [];\n\t\tfor ( i = 0; i < len; i++ ) {\n\t\t\tjQuery.find( selector, this[ 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;\n\t\treturn ret;\n\t},\n\n\thas: function( target ) {\n\t\tvar i,\n\t\t\ttargets = jQuery( target, this ),\n\t\t\tlen = targets.length;\n\n\t\treturn this.filter(function() {\n\t\t\tfor ( i = 0; i < len; 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\tnot: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, false) );\n\t},\n\n\tfilter: function( selector ) {\n\t\treturn this.pushStack( winnow(this, selector, true) );\n\t},\n\n\tis: function( selector ) {\n\t\treturn !!selector && (\n\t\t\ttypeof selector === \"string\" ?\n\t\t\t\t// If this is a positional/relative selector, check membership in the returned set\n\t\t\t\t// so $(\"p:first\").is(\"p:last\") won't return true for a doc with two \"p\".\n\t\t\t\trneedsContext.test( selector ) ?\n\t\t\t\t\tjQuery( selector, this.context ).index( this[0] ) >= 0 :\n\t\t\t\t\tjQuery.filter( selector, this ).length > 0 :\n\t\t\t\tthis.filter( selector ).length > 0 );\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\tret = [],\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\tcur = this[i];\n\n\t\t\twhile ( cur && cur.ownerDocument && cur !== context && cur.nodeType !== 11 ) {\n\t\t\t\tif ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {\n\t\t\t\t\tret.push( cur );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tcur = cur.parentNode;\n\t\t\t}\n\t\t}\n\n\t\treturn this.pushStack( ret.length > 1 ? jQuery.unique( ret ) : ret );\n\t},\n\n\t// Determine the position of an element within\n\t// the matched set of elements\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 jQuery.inArray( this[0], jQuery( elem ) );\n\t\t}\n\n\t\t// Locate the position of the desired element\n\t\treturn jQuery.inArray(\n\t\t\t// If it receives a jQuery object, the first element is used\n\t\t\telem.jquery ? elem[0] : elem, this );\n\t},\n\n\tadd: function( selector, context ) {\n\t\tvar set = typeof selector === \"string\" ?\n\t\t\t\tjQuery( selector, context ) :\n\t\t\t\tjQuery.makeArray( selector && selector.nodeType ? [ selector ] : selector ),\n\t\t\tall = jQuery.merge( this.get(), set );\n\n\t\treturn this.pushStack( jQuery.unique(all) );\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\njQuery.fn.andSelf = jQuery.fn.addBack;\n\nfunction sibling( cur, dir ) {\n\tdo {\n\t\tcur = cur[ dir ];\n\t} while ( cur && cur.nodeType !== 1 );\n\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 jQuery.nodeName( elem, \"iframe\" ) ?\n\t\t\telem.contentDocument || elem.contentWindow.document :\n\t\t\tjQuery.merge( [], elem.childNodes );\n\t}\n}, function( name, fn ) {\n\tjQuery.fn[ name ] = function( until, selector ) {\n\t\tvar ret = jQuery.map( this, fn, until );\n\n\t\tif ( !runtil.test( name ) ) {\n\t\t\tselector = until;\n\t\t}\n\n\t\tif ( selector && typeof selector === \"string\" ) {\n\t\t\tret = jQuery.filter( selector, ret );\n\t\t}\n\n\t\tret = this.length > 1 && !guaranteedUnique[ name ] ? jQuery.unique( ret ) : ret;\n\n\t\tif ( this.length > 1 && rparentsprev.test( name ) ) {\n\t\t\tret = ret.reverse();\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\njQuery.extend({\n\tfilter: function( expr, elems, not ) {\n\t\tif ( not ) {\n\t\t\texpr = \":not(\" + expr + \")\";\n\t\t}\n\n\t\treturn elems.length === 1 ?\n\t\t\tjQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :\n\t\t\tjQuery.find.matches(expr, elems);\n\t},\n\n\tdir: function( elem, dir, until ) {\n\t\tvar matched = [],\n\t\t\tcur = elem[ dir ];\n\n\t\twhile ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {\n\t\t\tif ( cur.nodeType === 1 ) {\n\t\t\t\tmatched.push( cur );\n\t\t\t}\n\t\t\tcur = cur[dir];\n\t\t}\n\t\treturn matched;\n\t},\n\n\tsibling: function( n, elem ) {\n\t\tvar r = [];\n\n\t\tfor ( ; n; n = n.nextSibling ) {\n\t\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\t\tr.push( n );\n\t\t\t}\n\t\t}\n\n\t\treturn r;\n\t}\n});\n\n// Implement the identical functionality for filter and not\nfunction winnow( elements, qualifier, keep ) {\n\n\t// Can't pass null or undefined to indexOf in Firefox 4\n\t// Set to 0 to skip string check\n\tqualifier = qualifier || 0;\n\n\tif ( jQuery.isFunction( qualifier ) ) {\n\t\treturn jQuery.grep(elements, function( elem, i ) {\n\t\t\tvar retVal = !!qualifier.call( elem, i, elem );\n\t\t\treturn retVal === keep;\n\t\t});\n\n\t} else if ( qualifier.nodeType ) {\n\t\treturn jQuery.grep(elements, function( elem ) {\n\t\t\treturn ( elem === qualifier ) === keep;\n\t\t});\n\n\t} else if ( typeof qualifier === \"string\" ) {\n\t\tvar filtered = jQuery.grep(elements, function( elem ) {\n\t\t\treturn elem.nodeType === 1;\n\t\t});\n\n\t\tif ( isSimple.test( qualifier ) ) {\n\t\t\treturn jQuery.filter(qualifier, filtered, !keep);\n\t\t} else {\n\t\t\tqualifier = jQuery.filter( qualifier, filtered );\n\t\t}\n\t}\n\n\treturn jQuery.grep(elements, function( elem ) {\n\t\treturn ( jQuery.inArray( elem, qualifier ) >= 0 ) === keep;\n\t});\n}\nfunction createSafeFragment( document ) {\n\tvar list = nodeNames.split( \"|\" ),\n\t\tsafeFrag = document.createDocumentFragment();\n\n\tif ( safeFrag.createElement ) {\n\t\twhile ( list.length ) {\n\t\t\tsafeFrag.createElement(\n\t\t\t\tlist.pop()\n\t\t\t);\n\t\t}\n\t}\n\treturn safeFrag;\n}\n\nvar nodeNames = \"abbr|article|aside|audio|bdi|canvas|data|datalist|details|figcaption|figure|footer|\" +\n\t\t\"header|hgroup|mark|meter|nav|output|progress|section|summary|time|video\",\n\trinlinejQuery = / jQuery\\d+=\"(?:null|\\d+)\"/g,\n\trnoshimcache = new RegExp(\"<(?:\" + nodeNames + \")[\\\\s/>]\", \"i\"),\n\trleadingWhitespace = /^\\s+/,\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:]+)[^>]*)\\/>/gi,\n\trtagName = /<([\\w:]+)/,\n\trtbody = /<tbody/i,\n\trhtml = /<|&#?\\w+;/,\n\trnoInnerhtml = /<(?:script|style|link)/i,\n\tmanipulation_rcheckableType = /^(?:checkbox|radio)$/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\t\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\t\tlegend: [ 1, \"<fieldset>\", \"</fieldset>\" ],\n\t\tarea: [ 1, \"<map>\", \"</map>\" ],\n\t\tparam: [ 1, \"<object>\", \"</object>\" ],\n\t\tthead: [ 1, \"<table>\", \"</table>\" ],\n\t\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\t\tcol: [ 2, \"<table><tbody></tbody><colgroup>\", \"</colgroup></table>\" ],\n\t\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t\t// IE6-8 can't serialize link, script, style, or any html5 (NoScope) tags,\n\t\t// unless wrapped in a div with non-breaking characters in front of it.\n\t\t_default: jQuery.support.htmlSerialize ? [ 0, \"\", \"\" ] : [ 1, \"X<div>\", \"</div>\"  ]\n\t},\n\tsafeFragment = createSafeFragment( document ),\n\tfragmentDiv = safeFragment.appendChild( document.createElement(\"div\") );\n\nwrapMap.optgroup = wrapMap.option;\nwrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;\nwrapMap.th = wrapMap.td;\n\njQuery.fn.extend({\n\ttext: function( value ) {\n\t\treturn jQuery.access( this, function( value ) {\n\t\t\treturn value === undefined ?\n\t\t\t\tjQuery.text( this ) :\n\t\t\t\tthis.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );\n\t\t}, null, value, arguments.length );\n\t},\n\n\twrapAll: function( html ) {\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\t\t\t// The elements to wrap the target around\n\t\t\tvar wrap = 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.firstChild && elem.firstChild.nodeType === 1 ) {\n\t\t\t\t\telem = elem.firstChild;\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\tappend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tthis.appendChild( elem );\n\t\t\t}\n\t\t});\n\t},\n\n\tprepend: function() {\n\t\treturn this.domManip(arguments, true, function( elem ) {\n\t\t\tif ( this.nodeType === 1 || this.nodeType === 11 || this.nodeType === 9 ) {\n\t\t\t\tthis.insertBefore( elem, this.firstChild );\n\t\t\t}\n\t\t});\n\t},\n\n\tbefore: function() {\n\t\treturn this.domManip( arguments, false, 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, false, 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\t// keepData is for internal use only--do not document\n\tremove: function( selector, keepData ) {\n\t\tvar elem,\n\t\t\ti = 0;\n\n\t\tfor ( ; (elem = this[i]) != null; i++ ) {\n\t\t\tif ( !selector || jQuery.filter( selector, [ elem ] ).length > 0 ) {\n\t\t\t\tif ( !keepData && elem.nodeType === 1 ) {\n\t\t\t\t\tjQuery.cleanData( getAll( elem ) );\n\t\t\t\t}\n\n\t\t\t\tif ( elem.parentNode ) {\n\t\t\t\t\tif ( keepData && jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\t\t\tsetGlobalEval( getAll( elem, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t\telem.parentNode.removeChild( elem );\n\t\t\t\t}\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\t// Remove element nodes and prevent memory leaks\n\t\t\tif ( elem.nodeType === 1 ) {\n\t\t\t\tjQuery.cleanData( getAll( elem, false ) );\n\t\t\t}\n\n\t\t\t// Remove any remaining nodes\n\t\t\twhile ( elem.firstChild ) {\n\t\t\t\telem.removeChild( elem.firstChild );\n\t\t\t}\n\n\t\t\t// If this is a select, ensure that it displays empty (#12336)\n\t\t\t// Support: IE<9\n\t\t\tif ( elem.options && jQuery.nodeName( elem, \"select\" ) ) {\n\t\t\t\telem.options.length = 0;\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 jQuery.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 ) {\n\t\t\t\treturn elem.nodeType === 1 ?\n\t\t\t\t\telem.innerHTML.replace( rinlinejQuery, \"\" ) :\n\t\t\t\t\tundefined;\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( jQuery.support.htmlSerialize || !rnoshimcache.test( value )  ) &&\n\t\t\t\t( jQuery.support.leadingWhitespace || !rleadingWhitespace.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\t// Remove element nodes and prevent memory leaks\n\t\t\t\t\t\telem = this[i] || {};\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( value ) {\n\t\tvar isFunc = jQuery.isFunction( value );\n\n\t\t// Make sure that the elements are removed from the DOM before they are inserted\n\t\t// this can help fix replacing a parent with child elements\n\t\tif ( !isFunc && typeof value !== \"string\" ) {\n\t\t\tvalue = jQuery( value ).not( this ).detach();\n\t\t}\n\n\t\treturn this.domManip( [ value ], true, function( elem ) {\n\t\t\tvar next = this.nextSibling,\n\t\t\t\tparent = this.parentNode;\n\n\t\t\tif ( parent ) {\n\t\t\t\tjQuery( this ).remove();\n\t\t\t\tparent.insertBefore( elem, next );\n\t\t\t}\n\t\t});\n\t},\n\n\tdetach: function( selector ) {\n\t\treturn this.remove( selector, true );\n\t},\n\n\tdomManip: function( args, table, callback ) {\n\n\t\t// Flatten any nested arrays\n\t\targs = core_concat.apply( [], args );\n\n\t\tvar first, node, hasScripts,\n\t\t\tscripts, doc, fragment,\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 || !( l <= 1 || typeof value !== \"string\" || jQuery.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, table ? self.html() : undefined );\n\t\t\t\t}\n\t\t\t\tself.domManip( args, table, 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\ttable = table && jQuery.nodeName( first, \"tr\" );\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\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(\n\t\t\t\t\t\ttable && jQuery.nodeName( this[i], \"table\" ) ?\n\t\t\t\t\t\t\tfindOrAppend( this[i], \"tbody\" ) :\n\t\t\t\t\t\t\tthis[i],\n\t\t\t\t\t\tnode,\n\t\t\t\t\t\ti\n\t\t\t\t\t);\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!jQuery._data( 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// Hope ajax is available...\n\t\t\t\t\t\t\t\tjQuery.ajax({\n\t\t\t\t\t\t\t\t\turl: node.src,\n\t\t\t\t\t\t\t\t\ttype: \"GET\",\n\t\t\t\t\t\t\t\t\tdataType: \"script\",\n\t\t\t\t\t\t\t\t\tasync: false,\n\t\t\t\t\t\t\t\t\tglobal: false,\n\t\t\t\t\t\t\t\t\t\"throws\": true\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.text || node.textContent || node.innerHTML || \"\" ).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\n\t\t\t\t// Fix #11809: Avoid leaking memory\n\t\t\t\tfragment = first = null;\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t}\n});\n\nfunction findOrAppend( elem, tag ) {\n\treturn elem.getElementsByTagName( tag )[0] || elem.appendChild( elem.ownerDocument.createElement( tag ) );\n}\n\n// Replace/restore the type attribute of script elements for safe DOM manipulation\nfunction disableScript( elem ) {\n\tvar attr = elem.getAttributeNode(\"type\");\n\telem.type = ( attr && attr.specified ) + \"/\" + elem.type;\n\treturn elem;\n}\nfunction restoreScript( elem ) {\n\tvar match = rscriptTypeMasked.exec( elem.type );\n\tif ( match ) {\n\t\telem.type = match[1];\n\t} else {\n\t\telem.removeAttribute(\"type\");\n\t}\n\treturn elem;\n}\n\n// Mark scripts as having already been evaluated\nfunction setGlobalEval( elems, refElements ) {\n\tvar elem,\n\t\ti = 0;\n\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\t\tjQuery._data( elem, \"globalEval\", !refElements || jQuery._data( refElements[i], \"globalEval\" ) );\n\t}\n}\n\nfunction cloneCopyEvent( src, dest ) {\n\n\tif ( dest.nodeType !== 1 || !jQuery.hasData( src ) ) {\n\t\treturn;\n\t}\n\n\tvar type, i, l,\n\t\toldData = jQuery._data( src ),\n\t\tcurData = jQuery._data( dest, oldData ),\n\t\tevents = oldData.events;\n\n\tif ( events ) {\n\t\tdelete curData.handle;\n\t\tcurData.events = {};\n\n\t\tfor ( type in events ) {\n\t\t\tfor ( i = 0, l = events[ type ].length; i < l; i++ ) {\n\t\t\t\tjQuery.event.add( dest, type, events[ type ][ i ] );\n\t\t\t}\n\t\t}\n\t}\n\n\t// make the cloned public data object a copy from the original\n\tif ( curData.data ) {\n\t\tcurData.data = jQuery.extend( {}, curData.data );\n\t}\n}\n\nfunction fixCloneNodeIssues( src, dest ) {\n\tvar nodeName, e, data;\n\n\t// We do not need to do anything for non-Elements\n\tif ( dest.nodeType !== 1 ) {\n\t\treturn;\n\t}\n\n\tnodeName = dest.nodeName.toLowerCase();\n\n\t// IE6-8 copies events bound via attachEvent when using cloneNode.\n\tif ( !jQuery.support.noCloneEvent && dest[ jQuery.expando ] ) {\n\t\tdata = jQuery._data( dest );\n\n\t\tfor ( e in data.events ) {\n\t\t\tjQuery.removeEvent( dest, e, data.handle );\n\t\t}\n\n\t\t// Event data gets referenced instead of copied if the expando gets copied too\n\t\tdest.removeAttribute( jQuery.expando );\n\t}\n\n\t// IE blanks contents when cloning scripts, and tries to evaluate newly-set text\n\tif ( nodeName === \"script\" && dest.text !== src.text ) {\n\t\tdisableScript( dest ).text = src.text;\n\t\trestoreScript( dest );\n\n\t// IE6-10 improperly clones children of object elements using classid.\n\t// IE10 throws NoModificationAllowedError if parent is null, #12132.\n\t} else if ( nodeName === \"object\" ) {\n\t\tif ( dest.parentNode ) {\n\t\t\tdest.outerHTML = src.outerHTML;\n\t\t}\n\n\t\t// This path appears unavoidable for IE9. When cloning an object\n\t\t// element in IE9, the outerHTML strategy above is not sufficient.\n\t\t// If the src has innerHTML and the destination does not,\n\t\t// copy the src.innerHTML into the dest.innerHTML. #10324\n\t\tif ( jQuery.support.html5Clone && ( src.innerHTML && !jQuery.trim(dest.innerHTML) ) ) {\n\t\t\tdest.innerHTML = src.innerHTML;\n\t\t}\n\n\t} else if ( nodeName === \"input\" && manipulation_rcheckableType.test( src.type ) ) {\n\t\t// IE6-8 fails to persist the checked state of a cloned checkbox\n\t\t// or radio button. Worse, IE6-7 fail to give the cloned element\n\t\t// a checked appearance if the defaultChecked value isn't also set\n\n\t\tdest.defaultChecked = dest.checked = src.checked;\n\n\t\t// IE6-7 get confused and end up setting the value of a cloned\n\t\t// checkbox/radio button to an empty string instead of \"on\"\n\t\tif ( dest.value !== src.value ) {\n\t\t\tdest.value = src.value;\n\t\t}\n\n\t// IE6-8 fails to return the selected option to the default selected\n\t// state when cloning options\n\t} else if ( nodeName === \"option\" ) {\n\t\tdest.defaultSelected = dest.selected = src.defaultSelected;\n\n\t// IE6-8 fails to set the defaultValue to the correct value when\n\t// cloning other types of input fields\n\t} else if ( nodeName === \"input\" || nodeName === \"textarea\" ) {\n\t\tdest.defaultValue = src.defaultValue;\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\ti = 0,\n\t\t\tret = [],\n\t\t\tinsert = jQuery( selector ),\n\t\t\tlast = insert.length - 1;\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// Modern browsers can apply jQuery collections as arrays, but oldIE needs a .get()\n\t\t\tcore_push.apply( ret, elems.get() );\n\t\t}\n\n\t\treturn this.pushStack( ret );\n\t};\n});\n\nfunction getAll( context, tag ) {\n\tvar elems, elem,\n\t\ti = 0,\n\t\tfound = typeof context.getElementsByTagName !== core_strundefined ? context.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== core_strundefined ? context.querySelectorAll( tag || \"*\" ) :\n\t\t\tundefined;\n\n\tif ( !found ) {\n\t\tfor ( found = [], elems = context.childNodes || context; (elem = elems[i]) != null; i++ ) {\n\t\t\tif ( !tag || jQuery.nodeName( elem, tag ) ) {\n\t\t\t\tfound.push( elem );\n\t\t\t} else {\n\t\t\t\tjQuery.merge( found, getAll( elem, tag ) );\n\t\t\t}\n\t\t}\n\t}\n\n\treturn tag === undefined || tag && jQuery.nodeName( context, tag ) ?\n\t\tjQuery.merge( [ context ], found ) :\n\t\tfound;\n}\n\n// Used in buildFragment, fixes the defaultChecked property\nfunction fixDefaultChecked( elem ) {\n\tif ( manipulation_rcheckableType.test( elem.type ) ) {\n\t\telem.defaultChecked = elem.checked;\n\t}\n}\n\njQuery.extend({\n\tclone: function( elem, dataAndEvents, deepDataAndEvents ) {\n\t\tvar destElements, node, clone, i, srcElements,\n\t\t\tinPage = jQuery.contains( elem.ownerDocument, elem );\n\n\t\tif ( jQuery.support.html5Clone || jQuery.isXMLDoc(elem) || !rnoshimcache.test( \"<\" + elem.nodeName + \">\" ) ) {\n\t\t\tclone = elem.cloneNode( true );\n\n\t\t// IE<=8 does not properly clone detached, unknown element nodes\n\t\t} else {\n\t\t\tfragmentDiv.innerHTML = elem.outerHTML;\n\t\t\tfragmentDiv.removeChild( clone = fragmentDiv.firstChild );\n\t\t}\n\n\t\tif ( (!jQuery.support.noCloneEvent || !jQuery.support.noCloneChecked) &&\n\t\t\t\t(elem.nodeType === 1 || elem.nodeType === 11) && !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\t// Fix all IE cloning issues\n\t\t\tfor ( i = 0; (node = srcElements[i]) != null; ++i ) {\n\t\t\t\t// Ensure that the destination node is not null; Fixes #9587\n\t\t\t\tif ( destElements[i] ) {\n\t\t\t\t\tfixCloneNodeIssues( node, destElements[i] );\n\t\t\t\t}\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; (node = srcElements[i]) != null; i++ ) {\n\t\t\t\t\tcloneCopyEvent( node, 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\tdestElements = srcElements = node = null;\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 j, elem, contains,\n\t\t\ttmp, tag, tbody, wrap,\n\t\t\tl = elems.length,\n\n\t\t\t// Ensure a safe fragment\n\t\t\tsafe = createSafeFragment( context ),\n\n\t\t\tnodes = [],\n\t\t\ti = 0;\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\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 || safe.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\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// Manually add leading whitespace removed by IE\n\t\t\t\t\tif ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {\n\t\t\t\t\t\tnodes.push( context.createTextNode( rleadingWhitespace.exec( elem )[0] ) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remove IE's autoinserted <tbody> from table fragments\n\t\t\t\t\tif ( !jQuery.support.tbody ) {\n\n\t\t\t\t\t\t// String was a <table>, *may* have spurious <tbody>\n\t\t\t\t\t\telem = tag === \"table\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\ttmp.firstChild :\n\n\t\t\t\t\t\t\t// String was a bare <thead> or <tfoot>\n\t\t\t\t\t\t\twrap[1] === \"<table>\" && !rtbody.test( elem ) ?\n\t\t\t\t\t\t\t\ttmp :\n\t\t\t\t\t\t\t\t0;\n\n\t\t\t\t\t\tj = elem && elem.childNodes.length;\n\t\t\t\t\t\twhile ( j-- ) {\n\t\t\t\t\t\t\tif ( jQuery.nodeName( (tbody = elem.childNodes[j]), \"tbody\" ) && !tbody.childNodes.length ) {\n\t\t\t\t\t\t\t\telem.removeChild( tbody );\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\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t\t// Fix #12392 for WebKit and IE > 9\n\t\t\t\t\ttmp.textContent = \"\";\n\n\t\t\t\t\t// Fix #12392 for oldIE\n\t\t\t\t\twhile ( tmp.firstChild ) {\n\t\t\t\t\t\ttmp.removeChild( tmp.firstChild );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Remember the top-level container for proper cleanup\n\t\t\t\t\ttmp = safe.lastChild;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Fix #11356: Clear elements from fragment\n\t\tif ( tmp ) {\n\t\t\tsafe.removeChild( tmp );\n\t\t}\n\n\t\t// Reset defaultChecked for any radios and checkboxes\n\t\t// about to be appended to the DOM in IE 6/7 (#8060)\n\t\tif ( !jQuery.support.appendChecked ) {\n\t\t\tjQuery.grep( getAll( nodes, \"input\" ), fixDefaultChecked );\n\t\t}\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( safe.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\ttmp = null;\n\n\t\treturn safe;\n\t},\n\n\tcleanData: function( elems, /* internal */ acceptData ) {\n\t\tvar elem, type, id, data,\n\t\t\ti = 0,\n\t\t\tinternalKey = jQuery.expando,\n\t\t\tcache = jQuery.cache,\n\t\t\tdeleteExpando = jQuery.support.deleteExpando,\n\t\t\tspecial = jQuery.event.special;\n\n\t\tfor ( ; (elem = elems[i]) != null; i++ ) {\n\n\t\t\tif ( acceptData || jQuery.acceptData( elem ) ) {\n\n\t\t\t\tid = elem[ internalKey ];\n\t\t\t\tdata = id && cache[ id ];\n\n\t\t\t\tif ( data ) {\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\n\t\t\t\t\t// Remove cache only if it was not already removed by jQuery.event.remove\n\t\t\t\t\tif ( cache[ id ] ) {\n\n\t\t\t\t\t\tdelete cache[ id ];\n\n\t\t\t\t\t\t// IE does not allow us to delete expando properties from nodes,\n\t\t\t\t\t\t// nor does it have a removeAttribute function on Document nodes;\n\t\t\t\t\t\t// we must handle all of these cases\n\t\t\t\t\t\tif ( deleteExpando ) {\n\t\t\t\t\t\t\tdelete elem[ internalKey ];\n\n\t\t\t\t\t\t} else if ( typeof elem.removeAttribute !== core_strundefined ) {\n\t\t\t\t\t\t\telem.removeAttribute( internalKey );\n\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\telem[ internalKey ] = null;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcore_deletedIds.push( id );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\nvar iframe, getStyles, curCSS,\n\tralpha = /alpha\\([^)]*\\)/i,\n\tropacity = /opacity\\s*=\\s*([^)]*)/,\n\trposition = /^(top|right|bottom|left)$/,\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\trmargin = /^margin/,\n\trnumsplit = new RegExp( \"^(\" + core_pnum + \")(.*)$\", \"i\" ),\n\trnumnonpx = new RegExp( \"^(\" + core_pnum + \")(?!px)[a-z%]+$\", \"i\" ),\n\trrelNum = new RegExp( \"^([+-])=(\" + core_pnum + \")\", \"i\" ),\n\telemdisplay = { BODY: \"block\" },\n\n\tcssShow = { position: \"absolute\", visibility: \"hidden\", display: \"block\" },\n\tcssNormalTransform = {\n\t\tletterSpacing: 0,\n\t\tfontWeight: 400\n\t},\n\n\tcssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ],\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.charAt(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 isHidden( elem, el ) {\n\t// isHidden might be called from jQuery#filter function;\n\t// in that case, element will be second argument\n\telem = el || elem;\n\treturn jQuery.css( elem, \"display\" ) === \"none\" || !jQuery.contains( elem.ownerDocument, elem );\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 ] = jQuery._data( 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 ] = jQuery._data( elem, \"olddisplay\", css_defaultDisplay(elem.nodeName) );\n\t\t\t}\n\t\t} else {\n\n\t\t\tif ( !values[ index ] ) {\n\t\t\t\thidden = isHidden( elem );\n\n\t\t\t\tif ( display && display !== \"none\" || !hidden ) {\n\t\t\t\t\tjQuery._data( elem, \"olddisplay\", hidden ? display : jQuery.css( elem, \"display\" ) );\n\t\t\t\t}\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.fn.extend({\n\tcss: function( name, value ) {\n\t\treturn jQuery.access( this, function( elem, name, value ) {\n\t\t\tvar len, styles,\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\tvar bool = typeof state === \"boolean\";\n\n\t\treturn this.each(function() {\n\t\t\tif ( bool ? state : 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\njQuery.extend({\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\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// Exclude the following css properties to add px\n\tcssNumber: {\n\t\t\"columnCount\": true,\n\t\t\"fillOpacity\": true,\n\t\t\"fontWeight\": true,\n\t\t\"lineHeight\": true,\n\t\t\"opacity\": 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// normalize float css property\n\t\t\"float\": jQuery.support.cssFloat ? \"cssFloat\" : \"styleFloat\"\n\t},\n\n\t// Get and set the style property on a DOM Node\n\tstyle: function( elem, name, value, extra ) {\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\n\t\t// followed by the 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 relative number strings (+= 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 NaN and null values aren't set. See: #7116\n\t\t\tif ( value == null || type === \"number\" && isNaN( value ) ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// If a number was passed in, 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// Fixes #8908, it can be done more correctly by specifing setters in cssHooks,\n\t\t\t// but it would mean to define eight (for every problematic property) identical functions\n\t\t\tif ( !jQuery.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\n\t\t\t\t// Wrapped to prevent IE from throwing errors when 'invalid' values are provided\n\t\t\t\t// Fixes bug #5509\n\t\t\t\ttry {\n\t\t\t\t\tstyle[ name ] = value;\n\t\t\t\t} catch(e) {}\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 num, val, 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// gets hook for the prefixed version\n\t\t// followed by the unprefixed version\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// Return, converting to number 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\t// A method for quickly swapping in/out CSS properties to get correct calculations\n\tswap: function( elem, options, callback, args ) {\n\t\tvar ret, name,\n\t\t\told = {};\n\n\t\t// Remember the old values, and insert the new ones\n\t\tfor ( name in options ) {\n\t\t\told[ name ] = elem.style[ name ];\n\t\t\telem.style[ name ] = options[ name ];\n\t\t}\n\n\t\tret = callback.apply( elem, args || [] );\n\n\t\t// Revert the old values\n\t\tfor ( name in options ) {\n\t\t\telem.style[ name ] = old[ name ];\n\t\t}\n\n\t\treturn ret;\n\t}\n});\n\n// NOTE: we've included the \"window\" in window.getComputedStyle\n// because jsdom on node.js will break without it.\nif ( window.getComputedStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn window.getComputedStyle( elem, null );\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar width, minWidth, maxWidth,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\n\t\t\t// getPropertyValue is only needed for .css('filter') in IE9, see #12537\n\t\t\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\tif ( computed ) {\n\n\t\t\tif ( ret === \"\" && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\t\t\tret = jQuery.style( elem, name );\n\t\t\t}\n\n\t\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t\t// Chrome < 17 and Safari 5.0 uses \"computed value\" instead of \"used value\" for margin-right\n\t\t\t// Safari 5.1.7 (at least) returns percentage for a larger set of values, but width seems to be reliably pixels\n\t\t\t// this is against the CSSOM draft spec: http://dev.w3.org/csswg/cssom/#resolved-values\n\t\t\tif ( rnumnonpx.test( ret ) && rmargin.test( name ) ) {\n\n\t\t\t\t// Remember the original values\n\t\t\t\twidth = style.width;\n\t\t\t\tminWidth = style.minWidth;\n\t\t\t\tmaxWidth = style.maxWidth;\n\n\t\t\t\t// Put in the new values to get a computed value out\n\t\t\t\tstyle.minWidth = style.maxWidth = style.width = ret;\n\t\t\t\tret = computed.width;\n\n\t\t\t\t// Revert the changed values\n\t\t\t\tstyle.width = width;\n\t\t\t\tstyle.minWidth = minWidth;\n\t\t\t\tstyle.maxWidth = maxWidth;\n\t\t\t}\n\t\t}\n\n\t\treturn ret;\n\t};\n} else if ( document.documentElement.currentStyle ) {\n\tgetStyles = function( elem ) {\n\t\treturn elem.currentStyle;\n\t};\n\n\tcurCSS = function( elem, name, _computed ) {\n\t\tvar left, rs, rsLeft,\n\t\t\tcomputed = _computed || getStyles( elem ),\n\t\t\tret = computed ? computed[ name ] : undefined,\n\t\t\tstyle = elem.style;\n\n\t\t// Avoid setting ret to empty string here\n\t\t// so we don't default to auto\n\t\tif ( ret == null && style && style[ name ] ) {\n\t\t\tret = style[ name ];\n\t\t}\n\n\t\t// From the awesome hack by Dean Edwards\n\t\t// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291\n\n\t\t// If we're not dealing with a regular pixel number\n\t\t// but a number that has a weird ending, we need to convert it to pixels\n\t\t// but not position css attributes, as those are proportional to the parent element instead\n\t\t// and we can't measure the parent instead because it might trigger a \"stacking dolls\" problem\n\t\tif ( rnumnonpx.test( ret ) && !rposition.test( name ) ) {\n\n\t\t\t// Remember the original values\n\t\t\tleft = style.left;\n\t\t\trs = elem.runtimeStyle;\n\t\t\trsLeft = rs && rs.left;\n\n\t\t\t// Put in the new values to get a computed value out\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = elem.currentStyle.left;\n\t\t\t}\n\t\t\tstyle.left = name === \"fontSize\" ? \"1em\" : ret;\n\t\t\tret = style.pixelLeft + \"px\";\n\n\t\t\t// Revert the changed values\n\t\t\tstyle.left = left;\n\t\t\tif ( rsLeft ) {\n\t\t\t\trs.left = rsLeft;\n\t\t\t}\n\t\t}\n\n\t\treturn ret === \"\" ? \"auto\" : ret;\n\t};\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.support.boxSizing && 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// we need the 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 && ( jQuery.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\n// Try to determine the default display value of an element\nfunction css_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\t\t\t// Use the already-created iframe if possible\n\t\t\tiframe = ( iframe ||\n\t\t\t\tjQuery(\"<iframe frameborder='0' width='0' height='0'/>\")\n\t\t\t\t.css( \"cssText\", \"display:block !important\" )\n\t\t\t).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].contentWindow || iframe[0].contentDocument ).document;\n\t\t\tdoc.write(\"<!doctype html><html><body>\");\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}\n\n// Called ONLY from within css_defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\t\tdisplay = jQuery.css( elem[0], \"display\" );\n\telem.remove();\n\treturn display;\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\t\t\t\t// certain elements can have dimension info if we invisibly show them\n\t\t\t\t// however, it must have a current display style that would benefit from this\n\t\t\t\treturn elem.offsetWidth === 0 && rdisplayswap.test( jQuery.css( elem, \"display\" ) ) ?\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.support.boxSizing && jQuery.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\nif ( !jQuery.support.opacity ) {\n\tjQuery.cssHooks.opacity = {\n\t\tget: function( elem, computed ) {\n\t\t\t// IE uses filters for opacity\n\t\t\treturn ropacity.test( (computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || \"\" ) ?\n\t\t\t\t( 0.01 * parseFloat( RegExp.$1 ) ) + \"\" :\n\t\t\t\tcomputed ? \"1\" : \"\";\n\t\t},\n\n\t\tset: function( elem, value ) {\n\t\t\tvar style = elem.style,\n\t\t\t\tcurrentStyle = elem.currentStyle,\n\t\t\t\topacity = jQuery.isNumeric( value ) ? \"alpha(opacity=\" + value * 100 + \")\" : \"\",\n\t\t\t\tfilter = currentStyle && currentStyle.filter || style.filter || \"\";\n\n\t\t\t// IE has trouble with opacity if it does not have layout\n\t\t\t// Force it by setting the zoom level\n\t\t\tstyle.zoom = 1;\n\n\t\t\t// if setting opacity to 1, and no other filters exist - attempt to remove filter attribute #6652\n\t\t\t// if value === \"\", then remove inline opacity #12685\n\t\t\tif ( ( value >= 1 || value === \"\" ) &&\n\t\t\t\t\tjQuery.trim( filter.replace( ralpha, \"\" ) ) === \"\" &&\n\t\t\t\t\tstyle.removeAttribute ) {\n\n\t\t\t\t// Setting style.filter to null, \"\" & \" \" still leave \"filter:\" in the cssText\n\t\t\t\t// if \"filter:\" is present at all, clearType is disabled, we want to avoid this\n\t\t\t\t// style.removeAttribute is IE Only, but so apparently is this code path...\n\t\t\t\tstyle.removeAttribute( \"filter\" );\n\n\t\t\t\t// if there is no filter style applied in a css rule or unset inline opacity, we are done\n\t\t\t\tif ( value === \"\" || currentStyle && !currentStyle.filter ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// otherwise, set new filter values\n\t\t\tstyle.filter = ralpha.test( filter ) ?\n\t\t\t\tfilter.replace( ralpha, opacity ) :\n\t\t\t\tfilter + \" \" + opacity;\n\t\t}\n\t};\n}\n\n// These hooks cannot be added until DOM ready because the support test\n// for it is not run until after DOM ready\njQuery(function() {\n\tif ( !jQuery.support.reliableMarginRight ) {\n\t\tjQuery.cssHooks.marginRight = {\n\t\t\tget: function( elem, computed ) {\n\t\t\t\tif ( computed ) {\n\t\t\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t\t\t// Work around by temporarily setting element display to inline-block\n\t\t\t\t\treturn jQuery.swap( elem, { \"display\": \"inline-block\" },\n\t\t\t\t\t\tcurCSS, [ elem, \"marginRight\" ] );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\n\n\t// Webkit bug: https://bugs.webkit.org/show_bug.cgi?id=29084\n\t// getComputedStyle returns percent when specified for top/left/bottom/right\n\t// rather than make the css module depend on the offset module, we just check for it here\n\tif ( !jQuery.support.pixelPosition && jQuery.fn.position ) {\n\t\tjQuery.each( [ \"top\", \"left\" ], function( i, prop ) {\n\t\t\tjQuery.cssHooks[ prop ] = {\n\t\t\t\tget: function( elem, computed ) {\n\t\t\t\t\tif ( computed ) {\n\t\t\t\t\t\tcomputed = curCSS( elem, prop );\n\t\t\t\t\t\t// if curCSS returns percentage, fallback to offset\n\t\t\t\t\t\treturn rnumnonpx.test( computed ) ?\n\t\t\t\t\t\t\tjQuery( elem ).position()[ prop ] + \"px\" :\n\t\t\t\t\t\t\tcomputed;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t});\n\t}\n\n});\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.hidden = function( elem ) {\n\t\t// Support: Opera <= 12.12\n\t\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t\treturn elem.offsetWidth <= 0 && elem.offsetHeight <= 0 ||\n\t\t\t(!jQuery.support.reliableHiddenOffsets && ((elem.style && elem.style.display) || jQuery.css( elem, \"display\" )) === \"none\");\n\t};\n\n\tjQuery.expr.filters.visible = function( elem ) {\n\t\treturn !jQuery.expr.filters.hidden( elem );\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});\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\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\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 || !manipulation_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//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\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}\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.hover = function( fnOver, fnOut ) {\n\treturn this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );\n};\nvar\n\t// Document location\n\tajaxLocParts,\n\tajaxLocation,\n\tajax_nonce = jQuery.now(),\n\n\tajax_rquery = /\\?/,\n\trhash = /#.*$/,\n\trts = /([?&])_=[^&]*/,\n\trheaders = /^(.*?):[ \\t]*([^\\r\\n]*)\\r?$/mg, // IE leaves an \\r character at EOL\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// Keep a copy of the old load method\n\t_load = jQuery.fn.load,\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// #8138, IE may throw an exception when accessing\n// a field from window.location if document.domain has been set\ntry {\n\tajaxLocation = location.href;\n} catch( e ) {\n\t// Use the href attribute of an A element\n\t// since IE will modify it given document.location\n\tajaxLocation = document.createElement( \"a\" );\n\tajaxLocation.href = \"\";\n\tajaxLocation = ajaxLocation.href;\n}\n\n// Segment location into parts\najaxLocParts = 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( core_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 deep, key,\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\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, response, type,\n\t\tself = this,\n\t\toff = url.indexOf(\" \");\n\n\tif ( off >= 0 ) {\n\t\tselector = url.slice( off, url.length );\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// 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\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\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},\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\": window.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 // Cross-domain detection vars\n\t\t\tparts,\n\t\t\t// Loop variable\n\t\t\ti,\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\t\t\t// Response headers as string\n\t\t\tresponseHeadersString,\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\ttransport,\n\t\t\t// Response headers\n\t\t\tresponseHeaders,\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 (#5866: IE7 issue with protocol-less urls)\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, \"\" ).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( core_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\tfireGlobals = 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 += ( ajax_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_=\" + ajax_nonce++ ) :\n\n\t\t\t\t\t// Otherwise add one to the end\n\t\t\t\t\tcacheURL + ( ajax_rquery.test( cacheURL ) ? \"&\" : \"?\" ) + \"_=\" + ajax_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// 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// If successful, handle type chaining\n\t\t\tif ( status >= 200 && status < 300 || status === 304 ) {\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 ) {\n\t\t\t\t\tisSuccess = true;\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\tisSuccess = true;\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\tisSuccess = ajaxConvert( s, response );\n\t\t\t\t\tstatusText = isSuccess.state;\n\t\t\t\t\tsuccess = isSuccess.data;\n\t\t\t\t\terror = isSuccess.error;\n\t\t\t\t\tisSuccess = !error;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// We extract error from statusText\n\t\t\t\t// then normalize statusText and status 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\tgetScript: function( url, callback ) {\n\t\treturn jQuery.get( url, undefined, callback, \"script\" );\n\t},\n\n\tgetJSON: function( url, data, callback ) {\n\t\treturn jQuery.get( url, data, callback, \"json\" );\n\t}\n});\n\n/* Handles responses to an ajax request:\n * - sets all responseXXX fields accordingly\n * - finds the right dataType (mediates between content-type and expected dataType)\n * - returns the corresponding response\n */\nfunction ajaxHandleResponses( s, jqXHR, responses ) {\n\tvar firstDataType, ct, finalDataType, type,\n\t\tcontents = s.contents,\n\t\tdataTypes = s.dataTypes,\n\t\tresponseFields = s.responseFields;\n\n\t// Fill responseXXX fields\n\tfor ( type in responseFields ) {\n\t\tif ( type in responses ) {\n\t\t\tjqXHR[ responseFields[type] ] = responses[ type ];\n\t\t}\n\t}\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\nfunction ajaxConvert( s, response ) {\n\tvar conv2, current, conv, tmp,\n\t\tconverters = {},\n\t\ti = 0,\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\t\tprev = dataTypes[ 0 ];\n\n\t// Apply the dataFilter if provided\n\tif ( s.dataFilter ) {\n\t\tresponse = s.dataFilter( response, s.dataType );\n\t}\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\t// Convert to each sequential dataType, tolerating list modification\n\tfor ( ; (current = dataTypes[++i]); ) {\n\n\t\t// There's only work to do if current dataType is non-auto\n\t\tif ( current !== \"*\" ) {\n\n\t\t\t// Convert response if prev dataType is non-auto and differs from current\n\t\t\tif ( 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.splice( i--, 0, current );\n\t\t\t\t\t\t\t\t}\n\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\n\t\t\t// Update prev for next iteration\n\t\t\tprev = current;\n\t\t}\n\t}\n\n\treturn { state: \"success\", data: response };\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 global\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\ts.global = false;\n\t}\n});\n\n// Bind script tag hack transport\njQuery.ajaxTransport( \"script\", function(s) {\n\n\t// This transport only deals with cross domain requests\n\tif ( s.crossDomain ) {\n\n\t\tvar script,\n\t\t\thead = document.head || jQuery(\"head\")[0] || document.documentElement;\n\n\t\treturn {\n\n\t\t\tsend: function( _, callback ) {\n\n\t\t\t\tscript = document.createElement(\"script\");\n\n\t\t\t\tscript.async = true;\n\n\t\t\t\tif ( s.scriptCharset ) {\n\t\t\t\t\tscript.charset = s.scriptCharset;\n\t\t\t\t}\n\n\t\t\t\tscript.src = s.url;\n\n\t\t\t\t// Attach handlers for all browsers\n\t\t\t\tscript.onload = script.onreadystatechange = function( _, isAbort ) {\n\n\t\t\t\t\tif ( isAbort || !script.readyState || /loaded|complete/.test( script.readyState ) ) {\n\n\t\t\t\t\t\t// Handle memory leak in IE\n\t\t\t\t\t\tscript.onload = script.onreadystatechange = null;\n\n\t\t\t\t\t\t// Remove the script\n\t\t\t\t\t\tif ( script.parentNode ) {\n\t\t\t\t\t\t\tscript.parentNode.removeChild( script );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Dereference the script\n\t\t\t\t\t\tscript = null;\n\n\t\t\t\t\t\t// Callback if not abort\n\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\tcallback( 200, \"success\" );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\t\t// Circumvent IE6 bugs with base elements (#2709 and #4378) by prepending\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\n\t\t\t\thead.insertBefore( script, head.firstChild );\n\t\t\t},\n\n\t\t\tabort: function() {\n\t\t\t\tif ( script ) {\n\t\t\t\t\tscript.onload( undefined, true );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t}\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 + \"_\" + ( ajax_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 += ( ajax_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});\nvar xhrCallbacks, xhrSupported,\n\txhrId = 0,\n\t// #5280: Internet Explorer will keep connections alive if we don't abort on unload\n\txhrOnUnloadAbort = window.ActiveXObject && function() {\n\t\t// Abort all pending requests\n\t\tvar key;\n\t\tfor ( key in xhrCallbacks ) {\n\t\t\txhrCallbacks[ key ]( undefined, true );\n\t\t}\n\t};\n\n// Functions to create xhrs\nfunction createStandardXHR() {\n\ttry {\n\t\treturn new window.XMLHttpRequest();\n\t} catch( e ) {}\n}\n\nfunction createActiveXHR() {\n\ttry {\n\t\treturn new window.ActiveXObject(\"Microsoft.XMLHTTP\");\n\t} catch( e ) {}\n}\n\n// Create the request object\n// (This is still attached to ajaxSettings for backward compatibility)\njQuery.ajaxSettings.xhr = window.ActiveXObject ?\n\t/* Microsoft failed to properly\n\t * implement the XMLHttpRequest in IE7 (can't request local files),\n\t * so we use the ActiveXObject when it is available\n\t * Additionally XMLHttpRequest can be disabled in IE7/IE8 so\n\t * we need a fallback.\n\t */\n\tfunction() {\n\t\treturn !this.isLocal && createStandardXHR() || createActiveXHR();\n\t} :\n\t// For all other browsers, use the standard XMLHttpRequest object\n\tcreateStandardXHR;\n\n// Determine support properties\nxhrSupported = jQuery.ajaxSettings.xhr();\njQuery.support.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nxhrSupported = jQuery.support.ajax = !!xhrSupported;\n\n// Create transport if the browser can provide an xhr\nif ( xhrSupported ) {\n\n\tjQuery.ajaxTransport(function( s ) {\n\t\t// Cross domain only allowed if supported through XMLHttpRequest\n\t\tif ( !s.crossDomain || jQuery.support.cors ) {\n\n\t\t\tvar callback;\n\n\t\t\treturn {\n\t\t\t\tsend: function( headers, complete ) {\n\n\t\t\t\t\t// Get a new xhr\n\t\t\t\t\tvar handle, i,\n\t\t\t\t\t\txhr = s.xhr();\n\n\t\t\t\t\t// Open the socket\n\t\t\t\t\t// Passing null username, generates a login popup on Opera (#2865)\n\t\t\t\t\tif ( s.username ) {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async, s.username, s.password );\n\t\t\t\t\t} else {\n\t\t\t\t\t\txhr.open( s.type, s.url, s.async );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Apply custom fields if provided\n\t\t\t\t\tif ( s.xhrFields ) {\n\t\t\t\t\t\tfor ( i in s.xhrFields ) {\n\t\t\t\t\t\t\txhr[ i ] = s.xhrFields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Override mime type if needed\n\t\t\t\t\tif ( s.mimeType && xhr.overrideMimeType ) {\n\t\t\t\t\t\txhr.overrideMimeType( s.mimeType );\n\t\t\t\t\t}\n\n\t\t\t\t\t// X-Requested-With header\n\t\t\t\t\t// For cross-domain requests, seeing as conditions for a preflight are\n\t\t\t\t\t// akin to a jigsaw puzzle, we simply never set it to be sure.\n\t\t\t\t\t// (it can always be set on a per-request basis or even using ajaxSetup)\n\t\t\t\t\t// For same-domain requests, won't change header if already provided.\n\t\t\t\t\tif ( !s.crossDomain && !headers[\"X-Requested-With\"] ) {\n\t\t\t\t\t\theaders[\"X-Requested-With\"] = \"XMLHttpRequest\";\n\t\t\t\t\t}\n\n\t\t\t\t\t// Need an extra try/catch for cross domain requests in Firefox 3\n\t\t\t\t\ttry {\n\t\t\t\t\t\tfor ( i in headers ) {\n\t\t\t\t\t\t\txhr.setRequestHeader( i, headers[ i ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch( err ) {}\n\n\t\t\t\t\t// Do send the request\n\t\t\t\t\t// This may raise an exception which is actually\n\t\t\t\t\t// handled in jQuery.ajax (so no try/catch here)\n\t\t\t\t\txhr.send( ( s.hasContent && s.data ) || null );\n\n\t\t\t\t\t// Listener\n\t\t\t\t\tcallback = function( _, isAbort ) {\n\t\t\t\t\t\tvar status, responseHeaders, statusText, responses;\n\n\t\t\t\t\t\t// Firefox throws exceptions when accessing properties\n\t\t\t\t\t\t// of an xhr when a network error occurred\n\t\t\t\t\t\t// http://helpful.knobs-dials.com/index.php/Component_returned_failure_code:_0x80040111_(NS_ERROR_NOT_AVAILABLE)\n\t\t\t\t\t\ttry {\n\n\t\t\t\t\t\t\t// Was never called and is aborted or complete\n\t\t\t\t\t\t\tif ( callback && ( isAbort || xhr.readyState === 4 ) ) {\n\n\t\t\t\t\t\t\t\t// Only called once\n\t\t\t\t\t\t\t\tcallback = undefined;\n\n\t\t\t\t\t\t\t\t// Do not keep as active anymore\n\t\t\t\t\t\t\t\tif ( handle ) {\n\t\t\t\t\t\t\t\t\txhr.onreadystatechange = jQuery.noop;\n\t\t\t\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t\t\t\tdelete xhrCallbacks[ handle ];\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t// If it's an abort\n\t\t\t\t\t\t\t\tif ( isAbort ) {\n\t\t\t\t\t\t\t\t\t// Abort it manually if needed\n\t\t\t\t\t\t\t\t\tif ( xhr.readyState !== 4 ) {\n\t\t\t\t\t\t\t\t\t\txhr.abort();\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tresponses = {};\n\t\t\t\t\t\t\t\t\tstatus = xhr.status;\n\t\t\t\t\t\t\t\t\tresponseHeaders = xhr.getAllResponseHeaders();\n\n\t\t\t\t\t\t\t\t\t// When requesting binary data, IE6-9 will throw an exception\n\t\t\t\t\t\t\t\t\t// on any attempt to access responseText (#11426)\n\t\t\t\t\t\t\t\t\tif ( typeof xhr.responseText === \"string\" ) {\n\t\t\t\t\t\t\t\t\t\tresponses.text = xhr.responseText;\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Firefox throws an exception when accessing\n\t\t\t\t\t\t\t\t\t// statusText for faulty cross-domain requests\n\t\t\t\t\t\t\t\t\ttry {\n\t\t\t\t\t\t\t\t\t\tstatusText = xhr.statusText;\n\t\t\t\t\t\t\t\t\t} catch( e ) {\n\t\t\t\t\t\t\t\t\t\t// We normalize with Webkit giving an empty statusText\n\t\t\t\t\t\t\t\t\t\tstatusText = \"\";\n\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t// Filter status for non standard behaviors\n\n\t\t\t\t\t\t\t\t\t// If the request is local and we have data: assume a success\n\t\t\t\t\t\t\t\t\t// (success with no data won't get notified, that's the best we\n\t\t\t\t\t\t\t\t\t// can do given current implementations)\n\t\t\t\t\t\t\t\t\tif ( !status && s.isLocal && !s.crossDomain ) {\n\t\t\t\t\t\t\t\t\t\tstatus = responses.text ? 200 : 404;\n\t\t\t\t\t\t\t\t\t// IE - #1450: sometimes returns 1223 when it should be 204\n\t\t\t\t\t\t\t\t\t} else if ( status === 1223 ) {\n\t\t\t\t\t\t\t\t\t\tstatus = 204;\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} catch( firefoxAccessException ) {\n\t\t\t\t\t\t\tif ( !isAbort ) {\n\t\t\t\t\t\t\t\tcomplete( -1, firefoxAccessException );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Call complete if needed\n\t\t\t\t\t\tif ( responses ) {\n\t\t\t\t\t\t\tcomplete( status, statusText, responses, responseHeaders );\n\t\t\t\t\t\t}\n\t\t\t\t\t};\n\n\t\t\t\t\tif ( !s.async ) {\n\t\t\t\t\t\t// if we're in sync mode we fire the callback\n\t\t\t\t\t\tcallback();\n\t\t\t\t\t} else if ( xhr.readyState === 4 ) {\n\t\t\t\t\t\t// (IE6 & IE7) if it's in cache and has been\n\t\t\t\t\t\t// retrieved directly we need to fire the callback\n\t\t\t\t\t\tsetTimeout( callback );\n\t\t\t\t\t} else {\n\t\t\t\t\t\thandle = ++xhrId;\n\t\t\t\t\t\tif ( xhrOnUnloadAbort ) {\n\t\t\t\t\t\t\t// Create the active xhrs callbacks list if needed\n\t\t\t\t\t\t\t// and attach the unload handler\n\t\t\t\t\t\t\tif ( !xhrCallbacks ) {\n\t\t\t\t\t\t\t\txhrCallbacks = {};\n\t\t\t\t\t\t\t\tjQuery( window ).unload( xhrOnUnloadAbort );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Add to list of active xhrs callbacks\n\t\t\t\t\t\t\txhrCallbacks[ handle ] = callback;\n\t\t\t\t\t\t}\n\t\t\t\t\t\txhr.onreadystatechange = callback;\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\tabort: function() {\n\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\tcallback( undefined, true );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\t\t}\n\t});\n}\nvar fxNow, timerId,\n\trfxtypes = /^(?:toggle|show|hide)$/,\n\trfxnum = new RegExp( \"^(?:([+-])=|)(\" + core_pnum + \")([a-z%]*)$\", \"i\" ),\n\trrun = /queueHooks$/,\n\tanimationPrefilters = [ defaultPrefilter ],\n\ttweeners = {\n\t\t\"*\": [function( prop, value ) {\n\t\t\tvar end, unit,\n\t\t\t\ttween = this.createTween( prop, value ),\n\t\t\t\tparts = rfxnum.exec( value ),\n\t\t\t\ttarget = tween.cur(),\n\t\t\t\tstart = +target || 0,\n\t\t\t\tscale = 1,\n\t\t\t\tmaxIterations = 20;\n\n\t\t\tif ( parts ) {\n\t\t\t\tend = +parts[2];\n\t\t\t\tunit = parts[3] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" );\n\n\t\t\t\t// We need to compute starting value\n\t\t\t\tif ( unit !== \"px\" && start ) {\n\t\t\t\t\t// Iteratively approximate from a nonzero starting point\n\t\t\t\t\t// Prefer the current property, because this process will be trivial if it uses the same units\n\t\t\t\t\t// Fallback to end or a simple constant\n\t\t\t\t\tstart = jQuery.css( tween.elem, prop, true ) || end || 1;\n\n\t\t\t\t\tdo {\n\t\t\t\t\t\t// If previous iteration zeroed out, double until we get *something*\n\t\t\t\t\t\t// Use a string for doubling factor so we don't accidentally see scale as unchanged below\n\t\t\t\t\t\tscale = scale || \".5\";\n\n\t\t\t\t\t\t// Adjust and apply\n\t\t\t\t\t\tstart = start / scale;\n\t\t\t\t\t\tjQuery.style( tween.elem, prop, start + unit );\n\n\t\t\t\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t\t\t\t// And breaking the loop if scale is unchanged or perfect, or if we've just had enough\n\t\t\t\t\t} while ( scale !== (scale = tween.cur() / target) && scale !== 1 && --maxIterations );\n\t\t\t\t}\n\n\t\t\t\ttween.unit = unit;\n\t\t\t\ttween.start = start;\n\t\t\t\t// If a +=/-= token was provided, we're doing a relative animation\n\t\t\t\ttween.end = parts[1] ? start + ( parts[1] + 1 ) * end : end;\n\t\t\t}\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\nfunction createTweens( animation, props ) {\n\tjQuery.each( props, function( prop, value ) {\n\t\tvar collection = ( tweeners[ prop ] || [] ).concat( tweeners[ \"*\" ] ),\n\t\t\tindex = 0,\n\t\t\tlength = collection.length;\n\t\tfor ( ; index < length; index++ ) {\n\t\t\tif ( collection[ index ].call( animation, prop, value ) ) {\n\n\t\t\t\t// we're done with this property\n\t\t\t\treturn;\n\t\t\t}\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// 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\n\t\t\t\t// 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\tcreateTweens( animation, props );\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\nfunction propFilter( props, specialEasing ) {\n\tvar value, name, index, easing, 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 wont overwrite keys already present.\n\t\t\t// also - reusing 'index' from above 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\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\nfunction defaultPrefilter( elem, props, opts ) {\n\t/*jshint validthis:true */\n\tvar prop, index, length,\n\t\tvalue, dataShow, toggle,\n\t\ttween, hooks, oldfire,\n\t\tanim = this,\n\t\tstyle = elem.style,\n\t\torig = {},\n\t\thandled = [],\n\t\thidden = elem.nodeType && isHidden( elem );\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// doing this makes sure that the complete handler will be called\n\t\t\t// 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 IE does 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\tif ( jQuery.css( elem, \"display\" ) === \"inline\" &&\n\t\t\t\tjQuery.css( elem, \"float\" ) === \"none\" ) {\n\n\t\t\t// inline-level elements accept inline-block;\n\t\t\t// block-level elements need to be inline with layout\n\t\t\tif ( !jQuery.support.inlineBlockNeedsLayout || css_defaultDisplay( elem.nodeName ) === \"inline\" ) {\n\t\t\t\tstyle.display = \"inline-block\";\n\n\t\t\t} else {\n\t\t\t\tstyle.zoom = 1;\n\t\t\t}\n\t\t}\n\t}\n\n\tif ( opts.overflow ) {\n\t\tstyle.overflow = \"hidden\";\n\t\tif ( !jQuery.support.shrinkWrapBlocks ) {\n\t\t\tanim.always(function() {\n\t\t\t\tstyle.overflow = opts.overflow[ 0 ];\n\t\t\t\tstyle.overflowX = opts.overflow[ 1 ];\n\t\t\t\tstyle.overflowY = opts.overflow[ 2 ];\n\t\t\t});\n\t\t}\n\t}\n\n\n\t// show/hide pass\n\tfor ( index in props ) {\n\t\tvalue = props[ index ];\n\t\tif ( rfxtypes.exec( value ) ) {\n\t\t\tdelete props[ index ];\n\t\t\ttoggle = toggle || value === \"toggle\";\n\t\t\tif ( value === ( hidden ? \"hide\" : \"show\" ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\thandled.push( index );\n\t\t}\n\t}\n\n\tlength = handled.length;\n\tif ( length ) {\n\t\tdataShow = jQuery._data( elem, \"fxshow\" ) || jQuery._data( elem, \"fxshow\", {} );\n\t\tif ( \"hidden\" in dataShow ) {\n\t\t\thidden = dataShow.hidden;\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\t\t\tjQuery._removeData( 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 ( index = 0 ; index < length ; index++ ) {\n\t\t\tprop = handled[ index ];\n\t\t\ttween = anim.createTween( prop, hidden ? dataShow[ prop ] : 0 );\n\t\t\torig[ prop ] = dataShow[ prop ] || jQuery.style( elem, prop );\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\t}\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// so, 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 - use cssHook if its there - use .style if its\n\t\t\t// 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// Remove in 2.0 - this supports IE8's panic based approach\n// to setting things on disconnected nodes\n\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.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\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\t\t\t\tdoAnimation.finish = function() {\n\t\t\t\t\tanim.stop( true );\n\t\t\t\t};\n\t\t\t\t// Empty animations, or finishing resolves immediately\n\t\t\t\tif ( empty || jQuery._data( 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 = jQuery._data( 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 will dequeue\n\t\t\t// 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 = jQuery._data( 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.cur && hooks.cur.finish ) {\n\t\t\t\thooks.cur.finish.call( this );\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\n// Generate parameters to create a standard animation\nfunction genFx( type, includeWidth ) {\n\tvar which,\n\t\tattrs = { height: type },\n\t\ti = 0;\n\n\t// if we include width, step value is 1 to do all cssExpand values,\n\t// if we don't include width, 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\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.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.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.timers = [];\njQuery.fx = Tween.prototype.init;\njQuery.fx.tick = function() {\n\tvar timer,\n\t\ttimers = jQuery.timers,\n\t\ti = 0;\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\tif ( timer() && jQuery.timers.push( timer ) ) {\n\t\tjQuery.fx.start();\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// Back Compat <1.8 extension point\njQuery.fx.step = {};\n\nif ( jQuery.expr && jQuery.expr.filters ) {\n\tjQuery.expr.filters.animated = function( elem ) {\n\t\treturn jQuery.grep(jQuery.timers, function( fn ) {\n\t\t\treturn elem === fn.elem;\n\t\t}).length;\n\t};\n}\njQuery.fn.offset = function( options ) {\n\tif ( arguments.length ) {\n\t\treturn options === undefined ?\n\t\t\tthis :\n\t\t\tthis.each(function( i ) {\n\t\t\t\tjQuery.offset.setOffset( this, options, i );\n\t\t\t});\n\t}\n\n\tvar docElem, win,\n\t\tbox = { top: 0, left: 0 },\n\t\telem = this[ 0 ],\n\t\tdoc = elem && elem.ownerDocument;\n\n\tif ( !doc ) {\n\t\treturn;\n\t}\n\n\tdocElem = doc.documentElement;\n\n\t// Make sure it's not a disconnected DOM node\n\tif ( !jQuery.contains( docElem, elem ) ) {\n\t\treturn box;\n\t}\n\n\t// If we don't have gBCR, just use 0,0 rather than error\n\t// BlackBerry 5, iOS 3 (original iPhone)\n\tif ( typeof elem.getBoundingClientRect !== core_strundefined ) {\n\t\tbox = elem.getBoundingClientRect();\n\t}\n\twin = getWindow( doc );\n\treturn {\n\t\ttop: box.top  + ( win.pageYOffset || docElem.scrollTop )  - ( docElem.clientTop  || 0 ),\n\t\tleft: box.left + ( win.pageXOffset || docElem.scrollLeft ) - ( docElem.clientLeft || 0 )\n\t};\n};\n\njQuery.offset = {\n\n\tsetOffset: function( elem, options, i ) {\n\t\tvar position = jQuery.css( elem, \"position\" );\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\tvar curElem = jQuery( elem ),\n\t\t\tcurOffset = curElem.offset(),\n\t\t\tcurCSSTop = jQuery.css( elem, \"top\" ),\n\t\t\tcurCSSLeft = jQuery.css( elem, \"left\" ),\n\t\t\tcalculatePosition = ( position === \"absolute\" || position === \"fixed\" ) && jQuery.inArray(\"auto\", [curCSSTop, curCSSLeft]) > -1,\n\t\t\tprops = {}, curPosition = {}, curTop, curLeft;\n\n\t\t// need to be able to calculate position if either 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\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\t\t} else {\n\t\t\tcurElem.css( props );\n\t\t}\n\t}\n};\n\n\njQuery.fn.extend({\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\tparentOffset = { top: 0, left: 0 },\n\t\t\telem = this[ 0 ];\n\n\t\t// fixed elements are offset from window (parentOffset = {top:0, left: 0}, because it is it's only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\t\t\t// we assume that getBoundingClientRect is available when computed position is fixed\n\t\t\toffset = elem.getBoundingClientRect();\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\t// note: when an element has margin: auto the offsetLeft and marginLeft\n\t\t// are the same in Safari causing offset.left to incorrectly be 0\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 || document.documentElement;\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\t\t\treturn offsetParent || document.documentElement;\n\t\t});\n\t}\n});\n\n\n// Create scrollLeft and scrollTop methods\njQuery.each( {scrollLeft: \"pageXOffset\", scrollTop: \"pageYOffset\"}, function( method, prop ) {\n\tvar top = /Y/.test( prop );\n\n\tjQuery.fn[ method ] = function( val ) {\n\t\treturn jQuery.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 ? (prop in win) ? win[ prop ] :\n\t\t\t\t\twin.document.documentElement[ method ] :\n\t\t\t\t\telem[ 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 : jQuery( win ).scrollLeft(),\n\t\t\t\t\ttop ? val : jQuery( win ).scrollTop()\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\nfunction getWindow( elem ) {\n\treturn jQuery.isWindow( elem ) ?\n\t\telem :\n\t\telem.nodeType === 9 ?\n\t\t\telem.defaultView || elem.parentWindow :\n\t\t\tfalse;\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 jQuery.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], whichever is greatest\n\t\t\t\t\t// unfortunately, this causes bug #3838 in IE6/8 only, but there is currently no good, small way to fix it.\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// Limit scope pollution from any deprecated API\n// (function() {\n\n// })();\n// Expose jQuery to the global object\nwindow.jQuery = window.$ = jQuery;\n\n// Expose jQuery as an AMD module, but only for AMD loaders that\n// understand the issues with loading multiple versions of jQuery\n// in a page that all might call define(). The loader will indicate\n// they have special allowances for multiple jQuery versions by\n// specifying define.amd.jQuery = true. Register as a named module,\n// since jQuery can be concatenated with other files that may use define,\n// but not use a proper concatenation script that understands anonymous\n// AMD modules. A named AMD is safest and most robust way to register.\n// Lowercase jquery is used because AMD module names are derived from\n// file names, and jQuery is normally delivered in a lowercase file name.\n// Do this after creating the global so that if an AMD module wants to call\n// noConflict to hide this version of jQuery, it will work.\nif ( typeof define === \"function\" && define.amd && define.amd.jQuery ) {\n\tdefine( \"jquery\", [], function () { return jQuery; } );\n}\n\n})( window );\n"
  },
  {
    "path": "public/assets/dashboard/js/contabs.js",
    "content": "$(function () {\n    function t(t) {\n        var e = 0;\n        return $(t).each(function () {\n            e += $(this).outerWidth(!0)\n        }), e\n    }\n\n    function e(e) {\n        var a = t($(e).prevAll()), i = t($(e).nextAll()), n = t($(\".content-tabs\").children().not(\".J_menuTabs\")), s = $(\".content-tabs\").outerWidth(!0) - n, r = 0;\n        if ($(\".page-tabs-content\").outerWidth() < s)r = 0; else if (i <= s - $(e).outerWidth(!0) - $(e).next().outerWidth(!0)) {\n            if (s - $(e).next().outerWidth(!0) > i) {\n                r = a;\n                for (var o = e; r - $(o).outerWidth() > $(\".page-tabs-content\").outerWidth() - s;)r -= $(o).prev().outerWidth(), o = $(o).prev()\n            }\n        } else a > s - $(e).outerWidth(!0) - $(e).prev().outerWidth(!0) && (r = a - $(e).prev().outerWidth(!0));\n        $(\".page-tabs-content\").animate({marginLeft: 0 - r + \"px\"}, \"fast\")\n    }\n\n    function a() {\n        var e = Math.abs(parseInt($(\".page-tabs-content\").css(\"margin-left\"))), a = t($(\".content-tabs\").children().not(\".J_menuTabs\")), i = $(\".content-tabs\").outerWidth(!0) - a, n = 0;\n        if ($(\".page-tabs-content\").width() < i)return !1;\n        for (var s = $(\".J_menuTab:first\"), r = 0; r + $(s).outerWidth(!0) <= e;)r += $(s).outerWidth(!0), s = $(s).next();\n        if (r = 0, t($(s).prevAll()) > i) {\n            for (; r + $(s).outerWidth(!0) < i && s.length > 0;)r += $(s).outerWidth(!0), s = $(s).prev();\n            n = t($(s).prevAll())\n        }\n        $(\".page-tabs-content\").animate({marginLeft: 0 - n + \"px\"}, \"fast\")\n    }\n\n    function i() {\n        var e = Math.abs(parseInt($(\".page-tabs-content\").css(\"margin-left\"))), a = t($(\".content-tabs\").children().not(\".J_menuTabs\")), i = $(\".content-tabs\").outerWidth(!0) - a, n = 0;\n        if ($(\".page-tabs-content\").width() < i)return !1;\n        for (var s = $(\".J_menuTab:first\"), r = 0; r + $(s).outerWidth(!0) <= e;)r += $(s).outerWidth(!0), s = $(s).next();\n        for (r = 0; r + $(s).outerWidth(!0) < i && s.length > 0;)r += $(s).outerWidth(!0), s = $(s).next();\n        n = t($(s).prevAll()), n > 0 && $(\".page-tabs-content\").animate({marginLeft: 0 - n + \"px\"}, \"fast\")\n    }\n\n    function n() {\n        var t = $(this).attr(\"href\"), a = $(this).data(\"index\"), i = $.trim($(this).text()), n = !0;\n        if (void 0 == t || 0 == $.trim(t).length)return !1;\n        if ($(\".J_menuTab\").each(function () {\n                return $(this).data(\"id\") == t ? ($(this).hasClass(\"active\") || ($(this).addClass(\"active\").siblings(\".J_menuTab\").removeClass(\"active\"), e(this), $(\".J_mainContent .J_iframe\").each(function () {\n                    return $(this).data(\"id\") == t ? ($(this).show().siblings(\".J_iframe\").hide(), !1) : void 0\n                })), n = !1, !1) : void 0\n            }), n) {\n            var s = '<a href=\"javascript:;\" class=\"active J_menuTab\" data-id=\"' + t + '\">' + i + ' <i class=\"fa fa-times-circle\"></i></a>';\n            $(\".J_menuTab\").removeClass(\"active\");\n            var r = '<iframe class=\"J_iframe\" name=\"iframe' + a + '\" width=\"100%\" height=\"100%\" src=\"' + t + '\" frameborder=\"0\" data-id=\"' + t + '\" seamless></iframe>';\n            $(\".J_mainContent\").find(\"iframe.J_iframe\").hide().parents(\".J_mainContent\").append(r);\n            var o = layer.load();\n            $(\".J_mainContent iframe:visible\").load(function () {\n                layer.close(o)\n            }), $(\".J_menuTabs .page-tabs-content\").append(s), e($(\".J_menuTab.active\"))\n        }\n        return !1\n    }\n\n    function s() {\n        var t = $(this).parents(\".J_menuTab\").data(\"id\"), a = $(this).parents(\".J_menuTab\").width();\n        if ($(this).parents(\".J_menuTab\").hasClass(\"active\")) {\n            if ($(this).parents(\".J_menuTab\").next(\".J_menuTab\").size()) {\n                var i = $(this).parents(\".J_menuTab\").next(\".J_menuTab:eq(0)\").data(\"id\");\n                $(this).parents(\".J_menuTab\").next(\".J_menuTab:eq(0)\").addClass(\"active\"), $(\".J_mainContent .J_iframe\").each(function () {\n                    return $(this).data(\"id\") == i ? ($(this).show().siblings(\".J_iframe\").hide(), !1) : void 0\n                });\n                var n = parseInt($(\".page-tabs-content\").css(\"margin-left\"));\n                0 > n && $(\".page-tabs-content\").animate({marginLeft: n + a + \"px\"}, \"fast\"), $(this).parents(\".J_menuTab\").remove(), $(\".J_mainContent .J_iframe\").each(function () {\n                    return $(this).data(\"id\") == t ? ($(this).remove(), !1) : void 0\n                })\n            }\n            if ($(this).parents(\".J_menuTab\").prev(\".J_menuTab\").size()) {\n                var i = $(this).parents(\".J_menuTab\").prev(\".J_menuTab:last\").data(\"id\");\n                $(this).parents(\".J_menuTab\").prev(\".J_menuTab:last\").addClass(\"active\"), $(\".J_mainContent .J_iframe\").each(function () {\n                    return $(this).data(\"id\") == i ? ($(this).show().siblings(\".J_iframe\").hide(), !1) : void 0\n                }), $(this).parents(\".J_menuTab\").remove(), $(\".J_mainContent .J_iframe\").each(function () {\n                    return $(this).data(\"id\") == t ? ($(this).remove(), !1) : void 0\n                })\n            }\n        } else $(this).parents(\".J_menuTab\").remove(), $(\".J_mainContent .J_iframe\").each(function () {\n            return $(this).data(\"id\") == t ? ($(this).remove(), !1) : void 0\n        }), e($(\".J_menuTab.active\"));\n        return !1\n    }\n\n    function r() {\n        $(\".page-tabs-content\").children(\"[data-id]\").not(\":first\").not(\".active\").each(function () {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').remove(), $(this).remove()\n        }), $(\".page-tabs-content\").css(\"margin-left\", \"0\")\n    }\n\n    function o() {\n        e($(\".J_menuTab.active\"))\n    }\n\n    function d() {\n        if (!$(this).hasClass(\"active\")) {\n            var t = $(this).data(\"id\");\n            $(\".J_mainContent .J_iframe\").each(function () {\n                return $(this).data(\"id\") == t ? ($(this).show().siblings(\".J_iframe\").hide(), !1) : void 0\n            }), $(this).addClass(\"active\").siblings(\".J_menuTab\").removeClass(\"active\"), e(this)\n        }\n    }\n\n    function c() {\n        var t = $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]'), e = t.attr(\"src\"), a = layer.load();\n        t.attr(\"src\", e).load(function () {\n            layer.close(a)\n        })\n    }\n\n    $(\".J_menuItem\").each(function (t) {\n        $(this).attr(\"data-index\") || $(this).attr(\"data-index\", t)\n    }), $(\".J_menuItem\").on(\"click\", n), $(\".J_menuTabs\").on(\"click\", \".J_menuTab i\", s), $(\".J_tabCloseOther\").on(\"click\", r), $(\".J_tabShowActive\").on(\"click\", o), $(\".J_menuTabs\").on(\"click\", \".J_menuTab\", d), $(\".J_menuTabs\").on(\"dblclick\", \".J_menuTab\", c), $(\".J_tabLeft\").on(\"click\", a), $(\".J_tabRight\").on(\"click\", i), $(\".J_tabCloseAll\").on(\"click\", function () {\n        $(\".page-tabs-content\").children(\"[data-id]\").not(\":first\").each(function () {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').remove(), $(this).remove()\n        }), $(\".page-tabs-content\").children(\"[data-id]:first\").each(function () {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').show(), $(this).addClass(\"active\")\n        }), $(\".page-tabs-content\").css(\"margin-left\", \"0\")\n    });\n    /**\n     * 常用工具-点击刷新页面\n     * */\n    $('.J_tabFresh').on(\"click\", function(){\n        $(\".J_mainContent .J_iframe\").each(function(){\n            if($(this).css('display') == 'inline'){\n                layer.msg('刷新成功', {icon: 1,time:2000}, function() {\n                });\n                $(this)[0].contentWindow.location.reload();\n            };\n        })\n    })\n});"
  },
  {
    "path": "public/assets/dashboard/js/contabs1.js",
    "content": "$(function() {\n    function f(l) {\n        var k = 0;\n        $(l).each(function() {\n            k += $(this).outerWidth(true)\n        });\n        return k\n    }\n    function g(n) {\n        var o = f($(n).prevAll()),\n        q = f($(n).nextAll());\n        var l = f($(\".content-tabs\").children().not(\".J_menuTabs\"));\n        var k = $(\".content-tabs\").outerWidth(true) - l;\n        var p = 0;\n        if ($(\".page-tabs-content\").outerWidth() < k) {\n            p = 0\n        } else {\n            if (q <= (k - $(n).outerWidth(true) - $(n).next().outerWidth(true))) {\n                if ((k - $(n).next().outerWidth(true)) > q) {\n                    p = o;\n                    var m = n;\n                    while ((p - $(m).outerWidth()) > ($(\".page-tabs-content\").outerWidth() - k)) {\n                        p -= $(m).prev().outerWidth();\n                        m = $(m).prev()\n                    }\n                }\n            } else {\n                if (o > (k - $(n).outerWidth(true) - $(n).prev().outerWidth(true))) {\n                    p = o - $(n).prev().outerWidth(true)\n                }\n            }\n        }\n        $(\".page-tabs-content\").animate({\n            marginLeft: 0 - p + \"px\"\n        },\n        \"fast\")\n    }\n    function a() {\n        var o = Math.abs(parseInt($(\".page-tabs-content\").css(\"margin-left\")));\n        var l = f($(\".content-tabs\").children().not(\".J_menuTabs\"));\n        var k = $(\".content-tabs\").outerWidth(true) - l;\n        var p = 0;\n        if ($(\".page-tabs-content\").width() < k) {\n            return false\n        } else {\n            var m = $(\".J_menuTab:first\");\n            var n = 0;\n            while ((n + $(m).outerWidth(true)) <= o) {\n                n += $(m).outerWidth(true);\n                m = $(m).next()\n            }\n            n = 0;\n            if (f($(m).prevAll()) > k) {\n                while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {\n                    n += $(m).outerWidth(true);\n                    m = $(m).prev()\n                }\n                p = f($(m).prevAll())\n            }\n        }\n        $(\".page-tabs-content\").animate({\n            marginLeft: 0 - p + \"px\"\n        },\n        \"fast\")\n    }\n    function b() {\n        var o = Math.abs(parseInt($(\".page-tabs-content\").css(\"margin-left\")));\n        var l = f($(\".content-tabs\").children().not(\".J_menuTabs\"));\n        var k = $(\".content-tabs\").outerWidth(true) - l;\n        var p = 0;\n        if ($(\".page-tabs-content\").width() < k) {\n            return false\n        } else {\n            var m = $(\".J_menuTab:first\");\n            var n = 0;\n            while ((n + $(m).outerWidth(true)) <= o) {\n                n += $(m).outerWidth(true);\n                m = $(m).next()\n            }\n            n = 0;\n            while ((n + $(m).outerWidth(true)) < (k) && m.length > 0) {\n                n += $(m).outerWidth(true);\n                m = $(m).next()\n            }\n            p = f($(m).prevAll());\n            if (p > 0) {\n                $(\".page-tabs-content\").animate({\n                    marginLeft: 0 - p + \"px\"\n                },\n                \"fast\")\n            }\n        }\n    }\n    $(\".J_menuItem\").each(function(k) {\n        if (!$(this).attr(\"data-index\")) {\n            $(this).attr(\"data-index\", k)\n        }\n    });\n    function c() {\n        var o = $(this).attr(\"href\"),\n        m = $(this).data(\"index\"),\n        l = $.trim($(this).text()),\n        k = true;\n        if (o == undefined || $.trim(o).length == 0) {\n            return false\n        }\n        $(\".J_menuTab\").each(function() {\n            if ($(this).data(\"id\") == o) {\n                if (!$(this).hasClass(\"active\")) {\n                    $(this).addClass(\"active\").siblings(\".J_menuTab\").removeClass(\"active\");\n                    g(this);\n                    $(\".J_mainContent .J_iframe\").each(function() {\n                        if ($(this).data(\"id\") == o) {\n                            $(this).show().siblings(\".J_iframe\").hide();\n                            return false\n                        }\n                    })\n                }\n                k = false;\n                return false\n            }\n        });\n        if (k) {\n            var p = '<a href=\"javascript:;\" class=\"active J_menuTab\" data-id=\"' + o + '\">' + l + ' <i class=\"fa fa-times-circle\"></i></a>';\n            $(\".J_menuTab\").removeClass(\"active\");\n            var n = '<iframe class=\"J_iframe\" name=\"iframe' + m + '\" width=\"100%\" height=\"100%\" src=\"' + o + '\" frameborder=\"0\" data-id=\"' + o + '\" seamless></iframe>';\n            $(\".J_mainContent\").find(\"iframe.J_iframe\").hide().parents(\".J_mainContent\").append(n);\n            $(\".J_menuTabs .page-tabs-content\").append(p);\n            g($(\".J_menuTab.active\"))\n        }\n        if(!k){\n            $(\".J_mainContent .J_iframe\").each(function(){\n                if($(this).css('display') == 'inline'){\n                    $(this).attr('src', $(this).attr('src'));\n                };\n            })\n        }\n        return false\n    }\n    $(\".J_menuItem\").on(\"click\", c);\n    function h() {\n        var m = $(this).parents(\".J_menuTab\").data(\"id\");\n        var l = $(this).parents(\".J_menuTab\").width();\n        if ($(this).parents(\".J_menuTab\").hasClass(\"active\")) {\n            if ($(this).parents(\".J_menuTab\").next(\".J_menuTab\").size()) {\n                var k = $(this).parents(\".J_menuTab\").next(\".J_menuTab:eq(0)\").data(\"id\");\n                $(this).parents(\".J_menuTab\").next(\".J_menuTab:eq(0)\").addClass(\"active\");\n                $(\".J_mainContent .J_iframe\").each(function() {\n                    if ($(this).data(\"id\") == k) {\n                        $(this).show().siblings(\".J_iframe\").hide();\n                        return false\n                    }\n                });\n                var n = parseInt($(\".page-tabs-content\").css(\"margin-left\"));\n                if (n < 0) {\n                    $(\".page-tabs-content\").animate({\n                        marginLeft: (n + l) + \"px\"\n                    },\n                    \"fast\")\n                }\n                $(this).parents(\".J_menuTab\").remove();\n                $(\".J_mainContent .J_iframe\").each(function() {\n                    if ($(this).data(\"id\") == m) {\n                        $(this).remove();\n                        return false\n                    }\n                })\n            }\n            if ($(this).parents(\".J_menuTab\").prev(\".J_menuTab\").size()) {\n                var k = $(this).parents(\".J_menuTab\").prev(\".J_menuTab:last\").data(\"id\");\n                $(this).parents(\".J_menuTab\").prev(\".J_menuTab:last\").addClass(\"active\");\n                $(\".J_mainContent .J_iframe\").each(function() {\n                    if ($(this).data(\"id\") == k) {\n                        $(this).show().siblings(\".J_iframe\").hide();\n                        return false\n                    }\n                });\n                $(this).parents(\".J_menuTab\").remove();\n                $(\".J_mainContent .J_iframe\").each(function() {\n                    if ($(this).data(\"id\") == m) {\n                        $(this).remove();\n                        return false\n                    }\n                })\n            }\n        } else {\n            $(this).parents(\".J_menuTab\").remove();\n            $(\".J_mainContent .J_iframe\").each(function() {\n                if ($(this).data(\"id\") == m) {\n                    $(this).remove();\n                    return false\n                }\n            });\n            g($(\".J_menuTab.active\"))\n        }\n        return false\n    }\n    $(\".J_menuTabs\").on(\"click\", \".J_menuTab i\", h);\n    function i() {\n        $(\".page-tabs-content\").children(\"[data-id]\").not(\":first\").not(\".active\").each(function() {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').remove();\n            $(this).remove()\n        });\n        $(\".page-tabs-content\").css(\"margin-left\", \"0\")\n    }\n    $(\".J_tabCloseOther\").on(\"click\", i);\n    function j() {\n        g($(\".J_menuTab.active\"))\n    }\n    $(\".J_tabShowActive\").on(\"click\", j);\n    function e() {\n        if (!$(this).hasClass(\"active\")) {\n            var k = $(this).data(\"id\");\n            $(\".J_mainContent .J_iframe\").each(function() {\n                if ($(this).data(\"id\") == k) {\n                    $(this).show().siblings(\".J_iframe\").hide();\n                    return false\n                }\n            });\n            $(this).addClass(\"active\").siblings(\".J_menuTab\").removeClass(\"active\");\n            g(this)\n        }\n    }\n    $(\".J_menuTabs\").on(\"click\", \".J_menuTab\", e);\n    function d() {\n        var l = $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]');\n        var k = l.attr(\"src\")\n    }\n    $(\".J_menuTabs\").on(\"dblclick\", \".J_menuTab\", d);\n    $(\".J_tabLeft\").on(\"click\", a);\n    $(\".J_tabRight\").on(\"click\", b);\n    $(\".J_tabCloseAll\").on(\"click\",\n    function() {\n        $(\".page-tabs-content\").children(\"[data-id]\").not(\":first\").each(function() {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').remove();\n            $(this).remove()\n        });\n        $(\".page-tabs-content\").children(\"[data-id]:first\").each(function() {\n            $('.J_iframe[data-id=\"' + $(this).data(\"id\") + '\"]').show();\n            $(this).addClass(\"active\")\n        });\n        $(\".page-tabs-content\").css(\"margin-left\", \"0\")\n    });\n    $('.J_tabGo').on(\"click\", function(){\n        $(\".J_mainContent .J_iframe\").each(function(){\n            if($(this).css('display') == 'inline'){\n                $(this)[0].contentWindow.history.forward();\n            };\n        })\n    });\n    $('.J_tabBack').on(\"click\", function(){\n        $(\".J_mainContent .J_iframe\").each(function(){\n            if($(this).css('display') == 'inline'){\n                $(this)[0].contentWindow.history.back();\n            };\n        })\n    });\n    /**\n     * 常用工具-点击刷新页面\n     * */\n    $('.J_tabFresh').on(\"click\", function(){\n        $(\".J_mainContent .J_iframe\").each(function(){\n            if($(this).css('display') == 'inline'){\n                layer.msg('刷新成功', {icon: 1,time:2000}, function() {\n                });\n                $(this)[0].contentWindow.location.reload();\n            };\n        })\n    })\n});"
  },
  {
    "path": "public/assets/dashboard/js/fileinput.js",
    "content": "/*!\n * @copyright Copyright &copy; Kartik Visweswaran, Krajee.com, 2014 - 2015\n * @version 4.1.9\n *\n * File input styled for Bootstrap 3.0 that utilizes HTML5 File Input's advanced \n * features including the FileReader API. \n * \n * The plugin drastically enhances the HTML file input to preview multiple files on the client before\n * upload. In addition it provides the ability to preview content of images, text, videos, audio, html, \n * flash and other objects. It also offers the ability to upload and delete files using AJAX, and add \n * files in batches (i.e. preview, append, or remove before upload).\n * \n * Author: Kartik Visweswaran\n * Copyright: 2015, Kartik Visweswaran, Krajee.com\n * For more JQuery plugins visit http://plugins.krajee.com\n * For more Yii related demos visit http://demos.krajee.com\n */\n(function ($) {\n    \"use strict\";\n    String.prototype.repl = function (from, to) {\n        return this.split(from).join(to);\n    };\n    var isIE = function (ver) {\n            var div = document.createElement(\"div\"), status;\n            div.innerHTML = \"<!--[if IE \" + ver + \"]><i></i><![endif]-->\";\n            status = (div.getElementsByTagName(\"i\").length === 1);\n            document.body.appendChild(div);\n            div.parentNode.removeChild(div);\n            return status;\n        },\n        previewCache = {\n            data: {},\n            init: function (obj) {\n                var content = obj.initialPreview, id = obj.id;\n                if (content.length > 0 && !isArray(content)) {\n                    content = content.split(obj.initialPreviewDelimiter);\n                }\n                previewCache.data[id] = {\n                    content: content,\n                    config: obj.initialPreviewConfig,\n                    tags: obj.initialPreviewThumbTags,\n                    delimiter: obj.initialPreviewDelimiter,\n                    template: obj.previewGenericTemplate,\n                    msg: function (n) {\n                        return obj.getMsgSelected(n);\n                    },\n                    initId: obj.previewInitId,\n                    footer: obj.getLayoutTemplate('footer'),\n                    isDelete: obj.initialPreviewShowDelete,\n                    caption: obj.initialCaption,\n                    actions: function (showUpload, showDelete, disabled, url, key) {\n                        return obj.renderFileActions(showUpload, showDelete, disabled, url, key);\n                    }\n                };\n            },\n            fetch: function (id) {\n                return previewCache.data[id].content.filter(function (n) {\n                    return n !== null;\n                });\n            },\n            count: function (id, all) {\n                return !!previewCache.data[id] && !!previewCache.data[id].content ?\n                    (all ? previewCache.data[id].content.length : previewCache.fetch(id).length) : 0;\n            },\n            get: function (id, i, isDisabled) {\n                var ind = 'init_' + i, data = previewCache.data[id],\n                    previewId = data.initId + '-' + ind, out;\n                isDisabled = isDisabled === undefined ? true : isDisabled;\n                if (data.content[i] === null) {\n                    return '';\n                }\n                out = data.template\n                    .repl('{previewId}', previewId)\n                    .repl('{frameClass}', ' file-preview-initial')\n                    .repl('{fileindex}', ind)\n                    .repl('{content}', data.content[i])\n                    .repl('{footer}', previewCache.footer(id, i, isDisabled));\n                if (data.tags.length && data.tags[i]) {\n                    out = replaceTags(out, data.tags[i]);\n                }\n                return out;\n            },\n            add: function (id, content, config, tags, append) {\n                var data = $.extend(true, {}, previewCache.data[id]), index;\n                if (!isArray(content)) {\n                    content = content.split(data.delimiter);\n                }\n                if (append) {\n                    index = data.content.push(content) - 1;\n                    data.config[index] = config;\n                    data.tags[index] = tags;\n                } else {\n                    index = content.length;\n                    data.content = content;\n                    data.config = config;\n                    data.tags = tags;\n                }\n                previewCache.data[id] = data;\n                return index;\n            },\n            set: function (id, content, config, tags, append) {\n                var data = $.extend(true, {}, previewCache.data[id]), i;\n                if (!isArray(content)) {\n                    content = content.split(data.delimiter);\n                }\n                if (append) {\n                    for (i = 0; i < content.length; i++) {\n                        data.content.push(content[i]);\n                    }\n                    for (i = 0; i < config.length; i++) {\n                        data.config.push(config[i]);\n                    }\n                    for (i = 0; i < tags.length; i++) {\n                        data.tags.push(tags[i]);\n                    }\n                } else {\n                    data.content = content;\n                    data.config = config;\n                    data.tags = tags;\n                }\n                previewCache.data[id] = data;\n            },\n            unset: function (id, index) {\n                var chk = previewCache.count(id);\n                if (!chk) {\n                    return;\n                }\n                if (chk === 1) {\n                    previewCache.data[id].content = [];\n                    previewCache.data[id].config = [];\n                    return;\n                }\n                previewCache.data[id].content[index] = null;\n                previewCache.data[id].config[index] = null;\n            },\n            out: function (id) {\n                var html = '', data = previewCache.data[id], caption, len = previewCache.count(id, true);\n                if (len === 0) {\n                    return {content: '', caption: ''};\n                }\n                for (var i = 0; i < len; i++) {\n                    html += previewCache.get(id, i);\n                }\n                caption = data.msg(previewCache.count(id));\n                return {content: html, caption: caption};\n            },\n            footer: function (id, i, isDisabled) {\n                var data = previewCache.data[id];\n                isDisabled = isDisabled === undefined ? true : isDisabled;\n                if (data.config.length === 0 || isEmpty(data.config[i])) {\n                    return '';\n                }\n                var config = data.config[i],\n                    caption = isSet('caption', config) ? config.caption : '',\n                    width = isSet('width', config) ? config.width : 'auto',\n                    url = isSet('url', config) ? config.url : false,\n                    key = isSet('key', config) ? config.key : null,\n                    disabled = (url === false) && isDisabled,\n                    actions = data.isDelete ? data.actions(false, true, disabled, url, key) : '',\n                    footer = data.footer.repl('{actions}', actions);\n                return footer\n                    .repl('{caption}', caption)\n                    .repl('{width}', width)\n                    .repl('{indicator}', '')\n                    .repl('{indicatorTitle}', '');\n            }\n        },\n        getNum = function (num, def) {\n            def = def || 0;\n            if (typeof num === \"number\") {\n                return num;\n            }\n            if (typeof num === \"string\") {\n                num = parseFloat(num);\n            }\n            return isNaN(num) ? def : num;\n        },\n        hasFileAPISupport = function () {\n            return window.File && window.FileReader;\n        },\n        hasDragDropSupport = function () {\n            var $div = document.createElement('div');\n            return !isIE(9) && ($div.draggable !== undefined || ($div.ondragstart !== undefined && $div.ondrop !== undefined));\n        },\n        hasFileUploadSupport = function () {\n            return hasFileAPISupport && window.FormData;\n        },\n        addCss = function ($el, css) {\n            $el.removeClass(css).addClass(css);\n        },\n        STYLE_SETTING = 'style=\"width:{width};height:{height};\"',\n        OBJECT_PARAMS = '      <param name=\"controller\" value=\"true\" />\\n' +\n            '      <param name=\"allowFullScreen\" value=\"true\" />\\n' +\n            '      <param name=\"allowScriptAccess\" value=\"always\" />\\n' +\n            '      <param name=\"autoPlay\" value=\"false\" />\\n' +\n            '      <param name=\"autoStart\" value=\"false\" />\\n' +\n            '      <param name=\"quality\" value=\"high\" />\\n',\n        DEFAULT_PREVIEW = '<div class=\"file-preview-other\">\\n' +\n            '       {previewFileIcon}\\n' +\n            '   </div>',\n        defaultFileActionSettings = {\n            removeIcon: '<i class=\"glyphicon glyphicon-trash text-danger\"></i>',\n            removeClass: 'btn btn-xs btn-default',\n            removeTitle: 'Remove file',\n            uploadIcon: '<i class=\"glyphicon glyphicon-upload text-info\"></i>',\n            uploadClass: 'btn btn-xs btn-default',\n            uploadTitle: 'Upload file',\n            indicatorNew: '<i class=\"glyphicon glyphicon-hand-down text-warning\"></i>',\n            indicatorSuccess: '<i class=\"glyphicon glyphicon-ok-sign file-icon-large text-success\"></i>',\n            indicatorError: '<i class=\"glyphicon glyphicon-exclamation-sign text-danger\"></i>',\n            indicatorLoading: '<i class=\"glyphicon glyphicon-hand-up text-muted\"></i>',\n            indicatorNewTitle: 'Not uploaded yet',\n            indicatorSuccessTitle: 'Uploaded',\n            indicatorErrorTitle: 'Upload Error',\n            indicatorLoadingTitle: 'Uploading ...'\n        },\n        tMain1 = '{preview}\\n' +\n            '<div class=\"kv-upload-progress hide\"></div>\\n' +\n            '<div class=\"input-group {class}\">\\n' +\n            '   {caption}\\n' +\n            '   <div class=\"input-group-btn\">\\n' +\n            '       {remove}\\n' +\n            '       {cancel}\\n' +\n            '       {upload}\\n' +\n            '       {browse}\\n' +\n            '   </div>\\n' +\n            '</div>',\n        tMain2 = '{preview}\\n<div class=\"kv-upload-progress hide\"></div>\\n{remove}\\n{cancel}\\n{upload}\\n{browse}\\n',\n        tPreview = '<div class=\"file-preview {class}\">\\n' +\n            '    <div class=\"close fileinput-remove\">&times;</div>\\n' +\n            '    <div class=\"{dropClass}\">\\n' +\n            '    <div class=\"file-preview-thumbnails\">\\n' +\n            '    </div>\\n' +\n            '    <div class=\"clearfix\"></div>' +\n            '    <div class=\"file-preview-status text-center text-success\"></div>\\n' +\n            '    <div class=\"kv-fileinput-error\"></div>\\n' +\n            '    </div>\\n' +\n            '</div>',\n        tIcon = '<span class=\"glyphicon glyphicon-file kv-caption-icon\"></span>',\n        tCaption = '<div tabindex=\"-1\" class=\"form-control file-caption {class}\">\\n' +\n            '   <span class=\"file-caption-ellipsis\">&hellip;</span>\\n' +\n            '   <div class=\"file-caption-name\"></div>\\n' +\n            '</div>',\n        tModal = '<div id=\"{id}\" class=\"modal fade\">\\n' +\n            '  <div class=\"modal-dialog modal-lg\">\\n' +\n            '    <div class=\"modal-content\">\\n' +\n            '      <div class=\"modal-header\">\\n' +\n            '        <button type=\"button\" class=\"close\" data-dismiss=\"modal\" aria-hidden=\"true\">&times;</button>\\n' +\n            '        <h3 class=\"modal-title\">Detailed Preview <small>{title}</small></h3>\\n' +\n            '      </div>\\n' +\n            '      <div class=\"modal-body\">\\n' +\n            '        <textarea class=\"form-control\" style=\"font-family:Monaco,Consolas,monospace; height: {height}px;\" readonly>{body}</textarea>\\n' +\n            '      </div>\\n' +\n            '    </div>\\n' +\n            '  </div>\\n' +\n            '</div>',\n        tProgress = '<div class=\"progress\">\\n' +\n            '    <div class=\"{class}\" role=\"progressbar\"' +\n            ' aria-valuenow=\"{percent}\" aria-valuemin=\"0\" aria-valuemax=\"100\" style=\"width:{percent}%;\">\\n' +\n            '        {percent}%\\n' +\n            '     </div>\\n' +\n            '</div>',\n        tFooter = '<div class=\"file-thumbnail-footer\">\\n' +\n            '    <div class=\"file-caption-name\">{caption}</div>\\n' +\n            '    {actions}\\n' +\n            '</div>',\n        tActions = '<div class=\"file-actions\">\\n' +\n            '    <div class=\"file-footer-buttons\">\\n' +\n            '        {upload}{delete}{other}' +\n            '    </div>\\n' +\n            '    <div class=\"file-upload-indicator\" tabindex=\"-1\" title=\"{indicatorTitle}\">{indicator}</div>\\n' +\n            '    <div class=\"clearfix\"></div>\\n' +\n            '</div>',\n        tActionDelete = '<button type=\"button\" class=\"kv-file-remove {removeClass}\" ' +\n            'title=\"{removeTitle}\"{dataUrl}{dataKey}>{removeIcon}</button>\\n',\n        tActionUpload = '',\n        tGeneric = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\">\\n' +\n            '   {content}\\n' +\n            '   {footer}\\n' +\n            '</div>\\n',\n        tHtml = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\">\\n' +\n            '    <object data=\"{data}\" type=\"{type}\" width=\"{width}\" height=\"{height}\">\\n' +\n            '       ' + DEFAULT_PREVIEW + '\\n' +\n            '    </object>\\n' +\n            '   {footer}\\n' +\n            '</div>',\n        tImage = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\">\\n' +\n            '   <img src=\"{data}\" class=\"file-preview-image\" title=\"{caption}\" alt=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   {footer}\\n' +\n            '</div>\\n',\n        tText = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\">\\n' +\n            '   <div class=\"file-preview-text\" title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '       {data}\\n' +\n            '   </div>\\n' +\n            '   {footer}\\n' +\n            '</div>',\n        tVideo = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\"' +\n            ' title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   <video width=\"{width}\" height=\"{height}\" controls>\\n' +\n            '       <source src=\"{data}\" type=\"{type}\">\\n' +\n            '       ' + DEFAULT_PREVIEW + '\\n' +\n            '   </video>\\n' +\n            '   {footer}\\n' +\n            '</div>\\n',\n        tAudio = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\"' +\n            ' title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   <audio controls>\\n' +\n            '       <source src=\"' + '{data}' + '\" type=\"{type}\">\\n' +\n            '       ' + DEFAULT_PREVIEW + '\\n' +\n            '   </audio>\\n' +\n            '   {footer}\\n' +\n            '</div>',\n        tFlash = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\"' +\n            ' title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   <object type=\"application/x-shockwave-flash\" width=\"{width}\" height=\"{height}\" data=\"{data}\">\\n' +\n            OBJECT_PARAMS + '       ' + DEFAULT_PREVIEW + '\\n' +\n            '   </object>\\n' +\n            '   {footer}\\n' +\n            '</div>\\n',\n        tObject = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\"' +\n            ' title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   <object data=\"{data}\" type=\"{type}\" width=\"{width}\" height=\"{height}\">\\n' +\n            '       <param name=\"movie\" value=\"{caption}\" />\\n' +\n            OBJECT_PARAMS + '         ' + DEFAULT_PREVIEW + '\\n' +\n            '   </object>\\n' +\n            '   {footer}\\n' +\n            '</div>',\n        tOther = '<div class=\"file-preview-frame{frameClass}\" id=\"{previewId}\" data-fileindex=\"{fileindex}\"' +\n            ' title=\"{caption}\" ' + STYLE_SETTING + '>\\n' +\n            '   ' + DEFAULT_PREVIEW + '\\n' +\n            '   {footer}\\n' +\n            '</div>',\n        defaultLayoutTemplates = {\n            main1: tMain1,\n            main2: tMain2,\n            preview: tPreview,\n            icon: tIcon,\n            caption: tCaption,\n            modal: tModal,\n            progress: tProgress,\n            footer: tFooter,\n            actions: tActions,\n            actionDelete: tActionDelete,\n            actionUpload: tActionUpload\n        },\n        defaultPreviewTemplates = {\n            generic: tGeneric,\n            html: tHtml,\n            image: tImage,\n            text: tText,\n            video: tVideo,\n            audio: tAudio,\n            flash: tFlash,\n            object: tObject,\n            other: tOther\n        },\n        defaultPreviewTypes = ['image', 'html', 'text', 'video', 'audio', 'flash', 'object'],\n        defaultPreviewSettings = {\n            image: {width: \"auto\", height: \"120px\"},\n            html: {width: \"213px\", height: \"160px\"},\n            text: {width: \"160px\", height: \"160px\"},\n            video: {width: \"213px\", height: \"160px\"},\n            audio: {width: \"213px\", height: \"80px\"},\n            flash: {width: \"213px\", height: \"160px\"},\n            object: {width: \"160px\", height: \"160px\"},\n            other: {width: \"160px\", height: \"160px\"}\n        },\n        defaultFileTypeSettings = {\n            image: function (vType, vName) {\n                return (vType !== undefined) ? vType.match('image.*') : vName.match(/\\.(gif|png|jpe?g)$/i);\n            },\n            html: function (vType, vName) {\n                return (vType !== undefined) ? vType === 'text/html' : vName.match(/\\.(htm|html)$/i);\n            },\n            text: function (vType, vName) {\n                return (vType !== undefined && vType.match('text.*')) || vName.match(/\\.(txt|md|csv|nfo|php|ini)$/i);\n            },\n            video: function (vType, vName) {\n                return (vType !== undefined && vType.match(/\\.video\\/(ogg|mp4|webm)$/i)) || vName.match(/\\.(og?|mp4|webm)$/i);\n            },\n            audio: function (vType, vName) {\n                return (vType !== undefined && vType.match(/\\.audio\\/(ogg|mp3|wav)$/i)) || vName.match(/\\.(ogg|mp3|wav)$/i);\n            },\n            flash: function (vType, vName) {\n                return (vType !== undefined && vType === 'application/x-shockwave-flash') || vName.match(/\\.(swf)$/i);\n            },\n            object: function () {\n                return true;\n            },\n            other: function () {\n                return true;\n            }\n        },\n        isEmpty = function (value, trim) {\n            return value === null || value === undefined || value.length === 0 || (trim && $.trim(value) === '');\n        },\n        isArray = function (a) {\n            return Array.isArray(a) || Object.prototype.toString.call(a) === '[object Array]';\n        },\n        isSet = function (needle, haystack) {\n            return (typeof haystack === 'object' && needle in haystack);\n        },\n        getElement = function (options, param, value) {\n            return (isEmpty(options) || isEmpty(options[param])) ? value : $(options[param]);\n        },\n        uniqId = function () {\n            return Math.round(new Date().getTime() + (Math.random() * 100));\n        },\n        htmlEncode = function (str) {\n            return String(str).repl('&', '&amp;')\n                .repl('\"', '&quot;')\n                .repl(\"'\", '&#39;')\n                .repl('<', '&lt;')\n                .repl('>', '&gt;');\n        },\n        replaceTags = function (str, tags) {\n            var out = str;\n            tags = tags || {};\n            $.each(tags, function (key, value) {\n                if (typeof value === \"function\") {\n                    value = value();\n                }\n                out = out.repl(key, value);\n            });\n            return out;\n        },\n        objUrl = window.URL || window.webkitURL,\n        FileInput = function (element, options) {\n            var self = this;\n            self.$element = $(element);\n            if (!self.validate()) {\n                return;\n            }\n            if (hasFileAPISupport() || isIE(9)) {\n                self.init(options);\n                self.listen();\n            } else {\n                self.$element.removeClass('file-loading');\n            }\n        };\n\n    FileInput.prototype = {\n        constructor: FileInput,\n        validate: function() {\n            var self = this, $exception;\n            if (self.$element.attr('type') === 'file') {\n                return true;\n            }\n            $exception = '<div class=\"help-block alert alert-warning\">' +\n                '<h4>Invalid Input Type</h4>' +\n                'You must set an input <code>type = file</code> for <b>bootstrap-fileinput</b> plugin to initialize.' +\n                '</div>';\n            self.$element.after($exception);\n            return false;\n        },\n        init: function (options) {\n            var self = this, $el = self.$element, t;\n            $.each(options, function (key, value) {\n                self[key] = (key === 'maxFileCount' || key === 'maxFileSize') ? getNum(value) : value;\n            });\n            self.fileInputCleared = false;\n            self.fileBatchCompleted = true;\n            if (isEmpty(self.allowedPreviewTypes)) {\n                self.allowedPreviewTypes = defaultPreviewTypes;\n            }\n            self.uploadFileAttr = !isEmpty($el.attr('name')) ? $el.attr('name') : 'file_data';\n            self.reader = null;\n            self.formdata = {};\n            self.isIE9 = isIE(9);\n            self.isIE10 = isIE(10);\n            self.filestack = [];\n            self.ajaxRequests = [];\n            self.isError = false;\n            self.ajaxAborted = false;\n            self.dropZoneEnabled = hasDragDropSupport() && self.dropZoneEnabled;\n            self.isDisabled = self.$element.attr('disabled') || self.$element.attr('readonly');\n            self.isUploadable = hasFileUploadSupport && !isEmpty(self.uploadUrl);\n            self.slug = typeof options.slugCallback === \"function\" ? options.slugCallback : self.slugDefault;\n            self.mainTemplate = self.showCaption ? self.getLayoutTemplate('main1') : self.getLayoutTemplate('main2');\n            self.captionTemplate = self.getLayoutTemplate('caption');\n            self.previewGenericTemplate = self.getPreviewTemplate('generic');\n            if (isEmpty(self.$element.attr('id'))) {\n                self.$element.attr('id', uniqId());\n            }\n            if (self.$container === undefined) {\n                self.$container = self.createContainer();\n            } else {\n                self.refreshContainer();\n            }\n            self.$progress = self.$container.find('.kv-upload-progress');\n            self.$btnUpload = self.$container.find('.kv-fileinput-upload');\n            self.$captionContainer = getElement(options, 'elCaptionContainer', self.$container.find('.file-caption'));\n            self.$caption = getElement(options, 'elCaptionText', self.$container.find('.file-caption-name'));\n            self.$previewContainer = getElement(options, 'elPreviewContainer', self.$container.find('.file-preview'));\n            self.$preview = getElement(options, 'elPreviewImage', self.$container.find('.file-preview-thumbnails'));\n            self.$previewStatus = getElement(options, 'elPreviewStatus', self.$container.find('.file-preview-status'));\n            self.$errorContainer = getElement(options, 'elErrorContainer',\n                self.$previewContainer.find('.kv-fileinput-error'));\n            if (!isEmpty(self.msgErrorClass)) {\n                addCss(self.$errorContainer, self.msgErrorClass);\n            }\n            self.$errorContainer.hide();\n            self.fileActionSettings = $.extend(defaultFileActionSettings, options.fileActionSettings);\n            self.previewInitId = \"preview-\" + uniqId();\n            self.id = self.$element.attr('id');\n            previewCache.init(self);\n            self.initPreview(true);\n            self.initPreviewDeletes();\n            self.options = options;\n            self.setFileDropZoneTitle();\n            self.uploadCount = 0;\n            self.uploadPercent = 0;\n            self.$element.removeClass('file-loading');\n            t = self.getLayoutTemplate('progress');\n            self.progressTemplate = t.replace('{class}', self.progressClass);\n            self.progressCompleteTemplate = t.replace('{class}', self.progressCompleteClass);\n            self.setEllipsis();\n        },\n        parseError: function (jqXHR, errorThrown, fileName) {\n            var self = this, errMsg = $.trim(errorThrown + ''),\n                dot = errMsg.slice(-1) === '.' ? '' : '.',\n                text = $(jqXHR.responseText).text();\n            if (self.showAjaxErrorDetails) {\n                text = $.trim(text.replace(/\\n\\s*\\n/g, '\\n'));\n                text = text.length > 0 ? '<pre>' + text + '</pre>' : '';\n                errMsg += dot + text;\n            } else {\n                errMsg += dot;\n            }\n            return fileName ? '<b>' + fileName + ': </b>' + jqXHR : errMsg;\n        },\n        raise: function (event, params) {\n            var self = this, e = $.Event(event), out = false;\n            if (params !== undefined) {\n                self.$element.trigger(e, params);\n            } else {\n                self.$element.trigger(e);\n            }\n            if (e.result) {\n                out = true;\n            }\n            if (!out) {\n                return;\n            }\n            switch (event) {\n                // ignore these events\n                case 'filebatchuploadcomplete':\n                case 'filebatchuploadsuccess':\n                case 'fileuploaded':\n                case 'fileclear':\n                case 'filecleared':\n                case 'filereset':\n                case 'fileerror':\n                case 'filefoldererror':\n                case 'fileuploaderror':\n                case 'filebatchuploaderror':\n                case 'filedeleteerror':\n                case 'filecustomerror':\n                    break;\n                // can trigger filecustomerror to abort upload\n                default:\n                    self.ajaxAborted = out;\n                    break;\n            }\n        },\n        getLayoutTemplate: function (t) {\n            var self = this,\n                template = isSet(t, self.layoutTemplates) ? self.layoutTemplates[t] : defaultLayoutTemplates[t];\n            if (isEmpty(self.customLayoutTags)) {\n                return template;\n            }\n            return replaceTags(template, self.customLayoutTags);\n        },\n        getPreviewTemplate: function (t) {\n            var self = this,\n                template = isSet(t, self.previewTemplates) ? self.previewTemplates[t] : defaultPreviewTemplates[t];\n            template = template.repl('{previewFileIcon}', self.previewFileIcon);\n            if (isEmpty(self.customPreviewTags)) {\n                return template;\n            }\n            return replaceTags(template, self.customPreviewTags);\n        },\n        getOutData: function (jqXHR, responseData, filesData) {\n            var self = this;\n            jqXHR = jqXHR || {};\n            responseData = responseData || {};\n            filesData = filesData || self.filestack.slice(0) || {};\n            return {\n                form: self.formdata,\n                files: filesData,\n                extra: self.getExtraData(),\n                response: responseData,\n                reader: self.reader,\n                jqXHR: jqXHR\n            };\n        },\n        setEllipsis: function () {\n            var self = this, $capCont = self.$captionContainer, $cap = self.$caption,\n                $div = $cap.clone().css('height', 'auto').hide();\n            $capCont.parent().before($div);\n            $capCont.removeClass('kv-has-ellipsis');\n            if ($div.outerWidth() > $cap.outerWidth()) {\n                $capCont.addClass('kv-has-ellipsis');\n            }\n            $div.remove();\n        },\n        listen: function () {\n            var self = this, $el = self.$element, $cap = self.$captionContainer, $btnFile = self.$btnFile,\n                $form = $el.closest('form');\n            $el.on('change', $.proxy(self.change, self));\n            $(window).on('resize', function () {\n                self.setEllipsis();\n            });\n            $btnFile.off('click').on('click', function () {\n                self.raise('filebrowse');\n                if (self.isError && !self.isUploadable) {\n                    self.clear();\n                }\n                $cap.focus();\n            });\n            $form.off('reset').on('reset', $.proxy(self.reset, self));\n            self.$container.off('click')\n                .on('click', '.fileinput-remove:not([disabled])', $.proxy(self.clear, self))\n                .on('click', '.fileinput-cancel', $.proxy(self.cancel, self));\n            if (self.isUploadable && self.dropZoneEnabled && self.showPreview) {\n                self.initDragDrop();\n            }\n            if (!self.isUploadable) {\n                $form.on('submit', $.proxy(self.submitForm, self));\n            }\n            self.$container.find('.kv-fileinput-upload').off('click').on('click', function (e) {\n                if (!self.isUploadable) {\n                    return;\n                }\n                e.preventDefault();\n                if (!$(this).hasClass('disabled') && isEmpty($(this).attr('disabled'))) {\n                    self.upload();\n                }\n            });\n        },\n        submitForm: function () {\n            var self = this, $el = self.$element, files = $el.get(0).files;\n            if (files && files.length < self.minFileCount && self.minFileCount > 0) {\n                self.noFilesError({});\n                return false;\n            }\n            return !self.abort({});\n        },\n        abort: function (params) {\n            var self = this, data;\n            if (self.ajaxAborted && typeof self.ajaxAborted === \"object\" && self.ajaxAborted.message !== undefined) {\n                if (self.ajaxAborted.data !== undefined) {\n                    data = self.getOutData({}, self.ajaxAborted.data);\n                } else {\n                    data = self.getOutData();\n                }\n                data = $.extend(data, params);\n                self.showUploadError(self.ajaxAborted.message, data, 'filecustomerror');\n                return true;\n            }\n            return false;\n        },\n        noFilesError: function (params) {\n            var self = this, label = self.minFileCount > 1 ? self.filePlural : self.fileSingle,\n                msg = self.msgFilesTooLess.repl('{n}', self.minFileCount).repl('{files}', label),\n                $error = self.$errorContainer;\n            $error.html(msg);\n            self.isError = true;\n            self.updateFileDetails(0);\n            $error.fadeIn(800);\n            self.raise('fileerror', [params]);\n            self.clearFileInput();\n            addCss(self.$container, 'has-error');\n        },\n        setProgress: function (p) {\n            var self = this, pct = Math.min(p, 100),\n                template = pct < 100 ? self.progressTemplate : self.progressCompleteTemplate;\n            self.$progress.html(template.repl('{percent}', pct));\n        },\n        upload: function () {\n            var self = this, totLen = self.getFileStack().length, params = {},\n                i, outData, len, hasExtraData = !$.isEmptyObject(self.getExtraData());\n            if (totLen < self.minFileCount && self.minFileCount > 0) {\n                self.noFilesError(params);\n                return;\n            }\n            if (!self.isUploadable || self.isDisabled || (totLen === 0 && !hasExtraData)) {\n                return;\n            }\n            self.resetUpload();\n            self.$progress.removeClass('hide');\n            self.uploadCount = 0;\n            self.uploadPercent = 0;\n            self.lock();\n            self.setProgress(0);\n            if (totLen === 0 && hasExtraData) {\n                self.uploadExtraOnly();\n                return;\n            }\n            len = self.filestack.length;\n            self.hasInitData = false;\n            if (self.uploadAsync && self.showPreview) {\n                outData = self.getOutData();\n                self.raise('filebatchpreupload', [outData]);\n                self.fileBatchCompleted = false;\n                self.uploadCache = {content: [], config: [], tags: [], append: true};\n                for (i = 0; i < len; i += 1) {\n                    if (self.filestack[i] !== undefined) {\n                        self.uploadSingle(i, self.filestack, true);\n                    }\n                }\n                return;\n            }\n            self.uploadBatch();\n        },\n        lock: function () {\n            var self = this;\n            self.resetErrors();\n            self.disable();\n            if (self.showRemove) {\n                addCss(self.$container.find('.fileinput-remove'), 'hide');\n            }\n            if (self.showCancel) {\n                self.$container.find('.fileinput-cancel').removeClass('hide');\n            }\n            self.raise('filelock', [self.filestack, self.getExtraData()]);\n        },\n        unlock: function (reset) {\n            var self = this;\n            if (reset === undefined) {\n                reset = true;\n            }\n            self.enable();\n            if (self.showCancel) {\n                addCss(self.$container.find('.fileinput-cancel'), 'hide');\n            }\n            if (self.showRemove) {\n                self.$container.find('.fileinput-remove').removeClass('hide');\n            }\n            if (reset) {\n                self.resetFileStack();\n            }\n            self.raise('fileunlock', [self.filestack, self.getExtraData()]);\n        },\n        resetFileStack: function () {\n            var self = this, i = 0, newstack = [];\n            self.getThumbs().each(function () {\n                var $thumb = $(this), ind = $thumb.attr('data-fileindex'),\n                    file = self.filestack[ind];\n                if (ind === -1) {\n                    return;\n                }\n                if (file !== undefined) {\n                    newstack[i] = file;\n                    $thumb.attr({\n                        'id': self.previewInitId + '-' + i,\n                        'data-fileindex': i\n                    });\n                    i += 1;\n                } else {\n                    $thumb.attr({\n                        'id': 'uploaded-' + uniqId(),\n                        'data-fileindex': '-1'\n                    });\n                }\n            });\n            self.filestack = newstack;\n        },\n        refresh: function (options) {\n            var self = this, $el = self.$element, $zone,\n                params = (arguments.length) ? $.extend(self.options, options) : self.options;\n            $el.off();\n            self.init(params);\n            $zone = self.$container.find('.file-drop-zone');\n            $zone.off('dragenter dragover drop');\n            $(document).off('dragenter dragover drop');\n            self.listen();\n            self.setFileDropZoneTitle();\n        },\n        initDragDrop: function () {\n            var self = this, $zone = self.$container.find('.file-drop-zone');\n            $zone.off('dragenter dragover drop');\n            $(document).off('dragenter dragover drop');\n            $zone.on('dragenter dragover', function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                if (self.isDisabled) {\n                    return;\n                }\n                addCss($(this), 'highlighted');\n            });\n            $zone.on('dragleave', function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n                if (self.isDisabled) {\n                    return;\n                }\n                $(this).removeClass('highlighted');\n            });\n            $zone.on('drop', function (e) {\n                e.preventDefault();\n                if (self.isDisabled) {\n                    return;\n                }\n                self.change(e, 'dragdrop');\n                $(this).removeClass('highlighted');\n            });\n            $(document).on('dragenter dragover drop', function (e) {\n                e.stopPropagation();\n                e.preventDefault();\n            });\n        },\n        setFileDropZoneTitle: function () {\n            var self = this, $zone = self.$container.find('.file-drop-zone');\n            $zone.find('.' + self.dropZoneTitleClass).remove();\n            if (!self.isUploadable || !self.showPreview || $zone.length === 0 || self.getFileStack().length > 0 || !self.dropZoneEnabled) {\n                return;\n            }\n            if ($zone.find('.file-preview-frame').length === 0) {\n                $zone.prepend('<div class=\"' + self.dropZoneTitleClass + '\">' + self.dropZoneTitle + '</div>');\n            }\n            self.$container.removeClass('file-input-new');\n            addCss(self.$container, 'file-input-ajax-new');\n        },\n        initFileActions: function () {\n            var self = this;\n            self.$preview.find('.kv-file-remove').each(function () {\n                var $el = $(this), $frame = $el.closest('.file-preview-frame'),\n                    ind = $frame.attr('data-fileindex'), n, cap;\n                $el.off('click').on('click', function () {\n                    $frame.fadeOut('slow', function () {\n                        self.filestack[ind] = undefined;\n                        self.clearObjects($frame);\n                        $frame.remove();\n                        var filestack = self.getFileStack(), len = filestack.length,\n                            chk = previewCache.count(self.id);\n                        self.clearFileInput();\n                        if (len === 0 && chk === 0) {\n                            self.reset();\n                        } else {\n                            n = chk + len;\n                            cap = n > 1 ? self.getMsgSelected(n) : filestack[0].name;\n                            self.setCaption(cap);\n                        }\n                    });\n                });\n            });\n            self.$preview.find('.kv-file-upload').each(function () {\n                var $el = $(this);\n                $el.off('click').on('click', function () {\n                    var $frame = $el.closest('.file-preview-frame'),\n                        ind = $frame.attr('data-fileindex');\n                    self.uploadSingle(ind, self.filestack, false);\n                });\n            });\n        },\n        getMsgSelected: function (n) {\n            var self = this, strFiles = n === 1 ? self.fileSingle : self.filePlural;\n            return self.msgSelected.repl('{n}', n).repl('{files}', strFiles);\n        },\n        renderFileFooter: function (caption, width) {\n            var self = this, config = self.fileActionSettings, footer, out,\n                template = self.getLayoutTemplate('footer');\n            if (self.isUploadable) {\n                footer = template.repl('{actions}', self.renderFileActions(true, true, false, false, false));\n                out = footer.repl('{caption}', caption)\n                    .repl('{width}', width)\n                    .repl('{indicator}', config.indicatorNew)\n                    .repl('{indicatorTitle}', config.indicatorNewTitle);\n            } else {\n                out = template.repl('{actions}', '')\n                    .repl('{caption}', caption)\n                    .repl('{width}', width)\n                    .repl('{indicator}', '')\n                    .repl('{indicatorTitle}', '');\n            }\n            out = replaceTags(out, self.previewThumbTags);\n            return out;\n        },\n        renderFileActions: function (showUpload, showDelete, disabled, url, key) {\n            if (!showUpload && !showDelete) {\n                return '';\n            }\n            var self = this,\n                vUrl = url === false ? '' : ' data-url=\"' + url + '\"',\n                vKey = key === false ? '' : ' data-key=\"' + key + '\"',\n                btnDelete = self.getLayoutTemplate('actionDelete'),\n                btnUpload = '',\n                template = self.getLayoutTemplate('actions'),\n                otherButtons = self.otherActionButtons.repl('{dataKey}', vKey),\n                config = self.fileActionSettings,\n                removeClass = disabled ? config.removeClass + ' disabled' : config.removeClass;\n            btnDelete = btnDelete\n                .repl('{removeClass}', removeClass)\n                .repl('{removeIcon}', config.removeIcon)\n                .repl('{removeTitle}', config.removeTitle)\n                .repl('{dataUrl}', vUrl)\n                .repl('{dataKey}', vKey);\n            if (showUpload) {\n                btnUpload = self.getLayoutTemplate('actionUpload')\n                    .repl('{uploadClass}', config.uploadClass)\n                    .repl('{uploadIcon}', config.uploadIcon)\n                    .repl('{uploadTitle}', config.uploadTitle);\n            }\n            return template\n                .repl('{delete}', btnDelete)\n                .repl('{upload}', btnUpload)\n                .repl('{other}', otherButtons);\n        },\n        initPreview: function (isInit) {\n            var self = this, cap = self.initialCaption || '', out;\n            if (!previewCache.count(self.id)) {\n                self.$preview.html('');\n                if (isInit) {\n                    self.setCaption(cap);\n                } else {\n                    self.initCaption();\n                }\n                return;\n            }\n            out = previewCache.out(self.id);\n            cap = isInit && self.initialCaption ? self.initialCaption : out.caption;\n            self.$preview.html(out.content);\n            self.setCaption(cap);\n            if (!isEmpty(out.content)) {\n                self.$container.removeClass('file-input-new');\n            }\n        },\n        initPreviewDeletes: function () {\n            var self = this, deleteExtraData = self.deleteExtraData || {},\n                resetProgress = function () {\n                    if (self.$preview.find('.kv-file-remove').length === 0) {\n                        self.reset();\n                        self.initialCaption = '';\n                    }\n                };\n\n            self.$preview.find('.kv-file-remove').each(function () {\n                var $el = $(this), vUrl = $el.data('url') || self.deleteUrl, vKey = $el.data('key');\n                if (isEmpty(vUrl) || vKey === undefined) {\n                    return;\n                }\n                var $frame = $el.closest('.file-preview-frame'), cache = previewCache.data[self.id],\n                    settings, params, index = $frame.data('fileindex'), config, extraData;\n                index = parseInt(index.replace('init_', ''));\n                config = isEmpty(cache.config) && isEmpty(cache.config[index]) ? null : cache.config[index];\n                extraData = isEmpty(config) || isEmpty(config.extra) ? deleteExtraData : config.extra;\n                if (typeof extraData === \"function\") {\n                    extraData = extraData();\n                }\n                params = {id: $el.attr('id'), key: vKey, extra: extraData};\n                settings = $.extend({\n                    url: vUrl,\n                    type: 'DELETE',\n                    dataType: 'json',\n                    data: $.extend({key: vKey}, extraData),\n                    beforeSend: function (jqXHR) {\n                        self.ajaxAborted = false;\n                        self.raise('filepredelete', [vKey, jqXHR, extraData]);\n                        if (self.ajaxAborted) {\n                            jqXHR.abort();\n                        } else {\n                            addCss($frame, 'file-uploading');\n                            addCss($el, 'disabled');\n                        }\n                    },\n                    success: function (data, textStatus, jqXHR) {\n                        var n, cap;\n                        if (data === undefined || data.error === undefined) {\n                            previewCache.unset(self.id, index);\n                            n = previewCache.count(self.id);\n                            cap = n > 0 ? self.getMsgSelected(n) : '';\n                            self.raise('filedeleted', [vKey, jqXHR, extraData]);\n                            self.setCaption(cap);\n                        } else {\n                            params.jqXHR = jqXHR;\n                            params.response = data;\n                            self.showError(data.error, params, 'filedeleteerror');\n                            $frame.removeClass('file-uploading');\n                            $el.removeClass('disabled');\n                            resetProgress();\n                            return;\n                        }\n                        $frame.removeClass('file-uploading').addClass('file-deleted');\n                        $frame.fadeOut('slow', function () {\n                            self.clearObjects($frame);\n                            $frame.remove();\n                            resetProgress();\n                            if (!n && self.getFileStack().length === 0) {\n                                self.setCaption('');\n                                self.reset();\n                            }\n                        });\n                    },\n                    error: function (jqXHR, textStatus, errorThrown) {\n                        var errMsg = self.parseError(jqXHR, errorThrown);\n                        params.jqXHR = jqXHR;\n                        params.response = {};\n                        self.showError(errMsg, params, 'filedeleteerror');\n                        $frame.removeClass('file-uploading');\n                        resetProgress();\n                    }\n                }, self.ajaxDeleteSettings);\n                $el.off('click').on('click', function () {\n                    $.ajax(settings);\n                });\n            });\n        },\n        clearObjects: function ($el) {\n            $el.find('video audio').each(function () {\n                this.pause();\n                $(this).remove();\n            });\n            $el.find('img object div').each(function () {\n                $(this).remove();\n            });\n        },\n        clearFileInput: function () {\n            var self = this, $el = self.$element, $srcFrm, $tmpFrm, $tmpEl;\n            if (isEmpty($el.val())) {\n                return;\n            }\n            // Fix for IE ver < 11, that does not clear file inputs\n            // Requires a sequence of steps to prevent IE crashing but\n            // still allow clearing of the file input.\n            if (self.isIE9 || self.isIE10) {\n                $srcFrm = $el.closest('form');\n                $tmpFrm = $(document.createElement('form'));\n                $tmpEl = $(document.createElement('div'));\n                $el.before($tmpEl);\n                if ($srcFrm.length) {\n                    $srcFrm.after($tmpFrm);\n                } else {\n                    $tmpEl.after($tmpFrm);\n                }\n                $tmpFrm.append($el).trigger('reset');\n                $tmpEl.before($el).remove();\n                $tmpFrm.remove();\n            } else { // normal input clear behavior for other sane browsers\n                $el.val('');\n            }\n            self.fileInputCleared = true;\n        },\n        resetUpload: function () {\n            var self = this;\n            self.uploadCache = {content: [], config: [], tags: [], append: true};\n            self.uploadCount = 0;\n            self.uploadPercent = 0;\n            self.$btnUpload.removeAttr('disabled');\n            self.setProgress(0);\n            addCss(self.$progress, 'hide');\n            self.resetErrors(false);\n            self.ajaxAborted = false;\n            self.ajaxRequests = [];\n        },\n        cancel: function () {\n            var self = this, xhr = self.ajaxRequests, len = xhr.length, i;\n            if (len > 0) {\n                for (i = 0; i < len; i += 1) {\n                    xhr[i].abort();\n                }\n            }\n            self.getThumbs().each(function () {\n                var $thumb = $(this), ind = $thumb.attr('data-fileindex');\n                $thumb.removeClass('file-uploading');\n                if (self.filestack[ind] !== undefined) {\n                    $thumb.find('.kv-file-upload').removeClass('disabled').removeAttr('disabled');\n                    $thumb.find('.kv-file-remove').removeClass('disabled').removeAttr('disabled');\n                }\n                self.unlock();\n            });\n        },\n        clear: function () {\n            var self = this, cap;\n            self.$btnUpload.removeAttr('disabled');\n            self.resetUpload();\n            self.filestack = [];\n            self.clearFileInput();\n            self.resetErrors(true);\n            self.raise('fileclear');\n            if (!self.overwriteInitial && previewCache.count(self.id)) {\n                self.showFileIcon();\n                self.resetPreview();\n                self.setEllipsis();\n                self.initPreviewDeletes();\n                self.$container.removeClass('file-input-new');\n            } else {\n                self.getThumbs().each(function () {\n                    self.clearObjects($(this));\n                });\n                self.$preview.html('');\n                cap = (!self.overwriteInitial && self.initialCaption.length > 0) ? self.initialCaption : '';\n                self.setCaption(cap);\n                self.setEllipsis();\n                self.$caption.attr('title', '');\n                addCss(self.$container, 'file-input-new');\n            }\n            if (self.$container.find('.file-preview-frame').length === 0) {\n                if (!self.initCaption()) {\n                    self.$captionContainer.find('.kv-caption-icon').hide();\n                }\n                self.setEllipsis();\n            }\n            self.hideFileIcon();\n            self.raise('filecleared');\n            self.$captionContainer.focus();\n            self.setFileDropZoneTitle();\n        },\n        resetPreview: function () {\n            var self = this, out;\n            if (previewCache.count(self.id)) {\n                out = previewCache.out(self.id);\n                self.$preview.html(out.content);\n                self.setCaption(out.caption);\n            } else {\n                self.$preview.html('');\n                self.initCaption();\n            }\n        },\n        reset: function () {\n            var self = this;\n            self.clear();\n            self.resetPreview();\n            self.setEllipsis();\n            self.$container.find('.fileinput-filename').text('');\n            self.raise('filereset');\n            if (self.initialPreview.length > 0) {\n                self.$container.removeClass('file-input-new');\n            }\n            self.setFileDropZoneTitle();\n            self.filestack = [];\n            self.formdata = {};\n        },\n        disable: function () {\n            var self = this;\n            self.isDisabled = true;\n            self.raise('filedisabled');\n            self.$element.attr('disabled', 'disabled');\n            self.$container.find(\".kv-fileinput-caption\").addClass(\"file-caption-disabled\");\n            self.$container.find(\".btn-file, .fileinput-remove, .kv-fileinput-upload\").attr(\"disabled\", true);\n            self.initDragDrop();\n        },\n        enable: function () {\n            var self = this;\n            self.isDisabled = false;\n            self.raise('fileenabled');\n            self.$element.removeAttr('disabled');\n            self.$container.find(\".kv-fileinput-caption\").removeClass(\"file-caption-disabled\");\n            self.$container.find(\".btn-file, .fileinput-remove, .kv-fileinput-upload\").removeAttr(\"disabled\");\n            self.initDragDrop();\n        },\n        getThumbs: function (css) {\n            css = css || '';\n            return this.$preview.find('.file-preview-frame:not(.file-preview-initial)' + css);\n        },\n        getExtraData: function () {\n            var self = this, data = self.uploadExtraData;\n            if (typeof self.uploadExtraData === \"function\") {\n                data = self.uploadExtraData();\n            }\n            return data;\n        },\n        uploadExtra: function () {\n            var self = this, data = self.getExtraData();\n            if (data.length === 0) {\n                return;\n            }\n            $.each(data, function (key, value) {\n                self.formdata.append(key, value);\n            });\n        },\n        initXhr: function (xhrobj, factor) {\n            var self = this;\n            if (xhrobj.upload) {\n                xhrobj.upload.addEventListener('progress', function (event) {\n                    var pct = 0, position = event.loaded || event.position, total = event.total;\n                    if (event.lengthComputable) {\n                        pct = Math.ceil(position / total * factor);\n                    }\n                    self.uploadPercent = Math.max(pct, self.uploadPercent);\n                    self.setProgress(self.uploadPercent);\n                }, false);\n            }\n            return xhrobj;\n        },\n        ajaxSubmit: function (fnBefore, fnSuccess, fnComplete, fnError) {\n            var self = this, settings;\n            self.uploadExtra();\n            settings = $.extend({\n                xhr: function () {\n                    var xhrobj = $.ajaxSettings.xhr();\n                    return self.initXhr(xhrobj, 98);\n                },\n                url: self.uploadUrl,\n                type: 'POST',\n                dataType: 'json',\n                data: self.formdata,\n                cache: false,\n                processData: false,\n                contentType: false,\n                beforeSend: fnBefore,\n                success: fnSuccess,\n                complete: fnComplete,\n                error: fnError\n            }, self.ajaxSettings);\n            self.ajaxRequests.push($.ajax(settings));\n        },\n        initUploadSuccess: function (out, $thumb, allFiles) {\n            var self = this, append, data, index, $newThumb, content, config, tags;\n            if (typeof out !== 'object' || $.isEmptyObject(out)) {\n                return;\n            }\n            if (out.initialPreview !== undefined && out.initialPreview.length > 0) {\n                self.hasInitData = true;\n                content = out.initialPreview || [];\n                config = out.initialPreviewConfig || [];\n                tags = out.initialPreviewThumbTags || [];\n                append = out.append === undefined || out.append ? true : false;\n                self.overwriteInitial = false;\n                if ($thumb !== undefined && !allFiles) {\n                    index = previewCache.add(self.id, content, config[0], tags[0], append);\n                    data = previewCache.get(self.id, index, false);\n                    $newThumb = $(data).hide();\n                    $thumb.after($newThumb).fadeOut('slow', function () {\n                        $newThumb.fadeIn('slow').css('display:inline-block');\n                        self.initPreviewDeletes();\n                        self.clearFileInput();\n                    });\n                } else {\n                    if (allFiles) {\n                        self.uploadCache.content.push(content[0]);\n                        self.uploadCache.config.push(config[0]);\n                        self.uploadCache.tags.push(tags[0]);\n                        self.uploadCache.append = append;\n                    } else {\n                        previewCache.set(self.id, content, config, tags, append);\n                        self.initPreview();\n                        self.initPreviewDeletes();\n                    }\n                }\n            }\n        },\n        uploadSingle: function (i, files, allFiles) {\n            var self = this, total = self.getFileStack().length, formdata = new FormData(), outData,\n                previewId = self.previewInitId + \"-\" + i, $thumb = $('#' + previewId + ':not(.file-preview-initial)'),\n                pct, chkComplete, $btnUpload = $thumb.find('.kv-file-upload'), $btnDelete = $thumb.find('.kv-file-remove'),\n                $indicator = $thumb.find('.file-upload-indicator'), config = self.fileActionSettings,\n                hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData),\n                setIndicator, updateProgress, resetActions, fnBefore, fnSuccess, fnComplete, fnError,\n                params = {id: previewId, index: i};\n            self.formdata = formdata;\n            if (total === 0 || !hasPostData || $btnUpload.hasClass('disabled') || self.abort(params)) {\n                return;\n            }\n            chkComplete = function () {\n                var $thumbs = self.getThumbs('.file-uploading');\n                if ($thumbs.length > 0 || self.fileBatchCompleted) {\n                    return;\n                }\n                self.fileBatchCompleted = true;\n                setTimeout(function () {\n                    previewCache.set(self.id, self.uploadCache.content, self.uploadCache.config, self.uploadCache.tags,\n                        self.uploadCache.append);\n                    if (self.hasInitData) {\n                        self.initPreview();\n                        self.initPreviewDeletes();\n                    }\n                    self.setProgress(100);\n                    self.unlock();\n                    self.clearFileInput();\n                    self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\n                }, 100);\n            };\n            setIndicator = function (icon, msg) {\n                $indicator.html(config[icon]);\n                $indicator.attr('title', config[msg]);\n            };\n            updateProgress = function () {\n                if (!allFiles || total === 0 || self.uploadPercent >= 100) {\n                    return;\n                }\n                self.uploadCount += 1;\n                pct = 80 + Math.ceil(self.uploadCount * 20 / total);\n                self.uploadPercent = Math.max(pct, self.uploadPercent);\n                self.setProgress(self.uploadPercent);\n                self.initPreviewDeletes();\n            };\n            resetActions = function () {\n                $btnUpload.removeAttr('disabled');\n                $btnDelete.removeAttr('disabled');\n                $thumb.removeClass('file-uploading');\n            };\n            fnBefore = function (jqXHR) {\n                outData = self.getOutData(jqXHR);\n                setIndicator('indicatorLoading', 'indicatorLoadingTitle');\n                addCss($thumb, 'file-uploading');\n                $btnUpload.attr('disabled', true);\n                $btnDelete.attr('disabled', true);\n                if (!allFiles) {\n                    self.lock();\n                }\n                self.raise('filepreupload', [outData, previewId, i]);\n                params = $.extend(params, outData);\n                if (self.abort(params)) {\n                    jqXHR.abort();\n                    self.setProgress(100);\n                }\n            };\n            fnSuccess = function (data, textStatus, jqXHR) {\n                outData = self.getOutData(jqXHR, data);\n                params = $.extend(params, outData);\n                setTimeout(function () {\n                    if (data.error === undefined) {\n                        setIndicator('indicatorSuccess', 'indicatorSuccessTitle');\n                        $btnUpload.hide();\n                        $btnDelete.hide();\n                        self.filestack[i] = undefined;\n                        self.raise('fileuploaded', [outData, previewId, i]);\n                        self.initUploadSuccess(data, $thumb, allFiles);\n                        if (!allFiles) {\n                            self.resetFileStack();\n                        }\n                    } else {\n                        setIndicator('indicatorError', 'indicatorErrorTitle');\n                        self.showUploadError(data.error, params);\n                    }\n                }, 100);\n            };\n            fnComplete = function () {\n                setTimeout(function () {\n                    updateProgress();\n                    resetActions();\n                    if (!allFiles) {\n                        self.unlock(false);\n                    } else {\n                        chkComplete();\n                    }\n                }, 100);\n            };\n            fnError = function (jqXHR, textStatus, errorThrown) {\n                var errMsg = self.parseError(jqXHR, errorThrown, (allFiles ? files[i].name : null));\n                setIndicator('indicatorError', 'indicatorErrorTitle');\n                params = $.extend(params, self.getOutData(jqXHR));\n                self.showUploadError(errMsg, params);\n            };\n            formdata.append(self.uploadFileAttr, files[i]);\n            formdata.append('file_id', i);\n            self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError);\n        },\n        uploadBatch: function () {\n            var self = this, files = self.filestack, total = files.length, config,\n                hasPostData = self.filestack.length > 0 || !$.isEmptyObject(self.uploadExtraData),\n                setIndicator, setAllUploaded, enableActions, fnBefore, fnSuccess, fnComplete, fnError,\n                params = {};\n            self.formdata = new FormData();\n            if (total === 0 || !hasPostData || self.abort(params)) {\n                return;\n            }\n            config = self.fileActionSettings;\n            setIndicator = function (i, icon, msg) {\n                var $indicator = $('#' + self.previewInitId + \"-\" + i).find('.file-upload-indicator');\n                $indicator.html(config[icon]);\n                $indicator.attr('title', config[msg]);\n            };\n            enableActions = function (i) {\n                var $thumb = $('#' + self.previewInitId + \"-\" + i + ':not(.file-preview-initial)'),\n                    $btnUpload = $thumb.find('.kv-file-upload'),\n                    $btnDelete = $thumb.find('.kv-file-delete');\n                $thumb.removeClass('file-uploading');\n                $btnUpload.removeAttr('disabled');\n                $btnDelete.removeAttr('disabled');\n            };\n            setAllUploaded = function () {\n                $.each(files, function (key) {\n                    self.filestack[key] = undefined;\n                });\n                self.clearFileInput();\n            };\n            fnBefore = function (jqXHR) {\n                self.lock();\n                var outData = self.getOutData(jqXHR);\n                if (self.showPreview) {\n                    self.getThumbs().each(function () {\n                        var $thumb = $(this), $btnUpload = $thumb.find('.kv-file-upload'), $btnDelete = $thumb.find('.kv-file-remove');\n                        addCss($thumb, 'file-uploading');\n                        $btnUpload.attr('disabled', true);\n                        $btnDelete.attr('disabled', true);\n                    });\n                }\n                self.raise('filebatchpreupload', [outData]);\n                if (self.abort(outData)) {\n                    jqXHR.abort();\n                }\n            };\n            fnSuccess = function (data, textStatus, jqXHR) {\n                var outData = self.getOutData(jqXHR, data), $thumbs = self.getThumbs(),\n                    keys = isEmpty(data.errorkeys) ? [] : data.errorkeys;\n                if (data.error === undefined || isEmpty(data.error)) {\n                    self.raise('filebatchuploadsuccess', [outData]);\n                    setAllUploaded();\n                    if (self.showPreview) {\n                        $thumbs.find('.kv-file-upload').hide();\n                        $thumbs.find('.kv-file-remove').hide();\n                        $thumbs.each(function () {\n                            var $thumb = $(this), key = $thumb.attr('data-fileindex');\n                            setIndicator(key, 'indicatorSuccess', 'indicatorSuccessTitle');\n                            enableActions(key);\n                        });\n                        self.initUploadSuccess(data);\n                    } else {\n                        self.reset();\n                    }\n                } else {\n                    if (self.showPreview) {\n                        $thumbs.each(function () {\n                            var $thumb = $(this), key = parseInt($thumb.attr('data-fileindex'), 10);\n                            enableActions(key);\n                            if (keys.length === 0) {\n                                setIndicator(key, 'indicatorError', 'indicatorErrorTitle');\n                                return;\n                            }\n                            if ($.inArray(key, keys) !== -1) {\n                                setIndicator(key, 'indicatorError', 'indicatorErrorTitle');\n                            } else {\n                                $thumb.find('.kv-file-upload').hide();\n                                $thumb.find('.kv-file-remove').hide();\n                                setIndicator(key, 'indicatorSuccess', 'indicatorSuccessTitle');\n                                self.filestack[key] = undefined;\n                            }\n                        });\n                        self.initUploadSuccess(data);\n                    }\n                    self.showUploadError(data.error, outData, 'filebatchuploaderror');\n                }\n            };\n            fnComplete = function () {\n                self.setProgress(100);\n                self.unlock();\n                self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\n                self.clearFileInput();\n            };\n            fnError = function (jqXHR, textStatus, errorThrown) {\n                var outData = self.getOutData(jqXHR), errMsg = self.parseError(jqXHR, errorThrown);\n                self.showUploadError(errMsg, outData, 'filebatchuploaderror');\n                self.uploadFileCount = total - 1;\n                if (!self.showPreview) {\n                    return;\n                }\n                self.getThumbs().each(function () {\n                    var $thumb = $(this), key = $thumb.attr('data-fileindex');\n                    $thumb.removeClass('file-uploading');\n                    if (self.filestack[key] !== undefined) {\n                        setIndicator(key, 'indicatorError', 'indicatorErrorTitle');\n                    }\n                });\n                self.getThumbs().removeClass('file-uploading');\n                self.getThumbs(' .kv-file-upload').removeAttr('disabled');\n                self.getThumbs(' .kv-file-delete').removeAttr('disabled');\n            };\n            $.each(files, function (key, data) {\n                if (!isEmpty(files[key])) {\n                    self.formdata.append(self.uploadFileAttr, data);\n                }\n            });\n            self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError);\n        },\n        uploadExtraOnly: function () {\n            var self = this, params = {}, fnBefore, fnSuccess, fnComplete, fnError;\n            self.formdata = new FormData();\n            if (self.abort(params)) {\n                return;\n            }\n            fnBefore = function (jqXHR) {\n                self.lock();\n                var outData = self.getOutData(jqXHR);\n                self.raise('filebatchpreupload', [outData]);\n                self.setProgress(50);\n                params.data = outData;\n                params.xhr = jqXHR;\n                if (self.abort(params)) {\n                    jqXHR.abort();\n                    self.setProgress(100);\n                }\n            };\n            fnSuccess = function (data, textStatus, jqXHR) {\n                var outData = self.getOutData(jqXHR, data);\n                if (data.error === undefined || isEmpty(data.error)) {\n                    self.raise('filebatchuploadsuccess', [outData]);\n                    self.clearFileInput();\n                    self.initUploadSuccess(data);\n                } else {\n                    self.showUploadError(data.error, outData, 'filebatchuploaderror');\n                }\n            };\n            fnComplete = function () {\n                self.setProgress(100);\n                self.unlock();\n                self.raise('filebatchuploadcomplete', [self.filestack, self.getExtraData()]);\n                self.clearFileInput();\n            };\n            fnError = function (jqXHR, textStatus, errorThrown) {\n                var outData = self.getOutData(jqXHR), errMsg = self.parseError(jqXHR, errorThrown);\n                params.data = outData;\n                self.showUploadError(errMsg, outData, 'filebatchuploaderror');\n            };\n            self.ajaxSubmit(fnBefore, fnSuccess, fnComplete, fnError);\n        },\n        hideFileIcon: function () {\n            if (this.overwriteInitial) {\n                this.$captionContainer.find('.kv-caption-icon').hide();\n            }\n        },\n        showFileIcon: function () {\n            this.$captionContainer.find('.kv-caption-icon').show();\n        },\n        resetErrors: function (fade) {\n            var self = this, $error = self.$errorContainer;\n            self.isError = false;\n            self.$container.removeClass('has-error');\n            $error.html('');\n            if (fade) {\n                $error.fadeOut('slow');\n            } else {\n                $error.hide();\n            }\n        },\n        showFolderError: function (folders) {\n            var self = this, $error = self.$errorContainer;\n            if (!folders) {\n                return;\n            }\n            $error.html(self.msgFoldersNotAllowed.repl('{n}', folders));\n            $error.fadeIn(800);\n            addCss(self.$container, 'has-error');\n            self.raise('filefoldererror', [folders]);\n        },\n        showUploadError: function (msg, params, event) {\n            var self = this, $error = self.$errorContainer, ev = event || 'fileuploaderror';\n            if ($error.find('ul').length === 0) {\n                $error.html('<ul><li>' + msg + '</li></ul>');\n            } else {\n                $error.find('ul').append('<li>' + msg + '</li>');\n            }\n            $error.fadeIn(800);\n            self.raise(ev, [params]);\n            addCss(self.$container, 'has-error');\n            return true;\n        },\n        showError: function (msg, params, event) {\n            var self = this, $error = self.$errorContainer, ev = event || 'fileerror';\n            params = params || {};\n            params.reader = self.reader;\n            $error.html(msg);\n            $error.fadeIn(800);\n            self.raise(ev, [params]);\n            if (!self.isUploadable) {\n                self.clearFileInput();\n            }\n            addCss(self.$container, 'has-error');\n            self.$btnUpload.attr('disabled', true);\n            return true;\n        },\n        errorHandler: function (evt, caption) {\n            var self = this, err = evt.target.error;\n            switch (err.code) {\n                case err.NOT_FOUND_ERR:\n                    self.showError(self.msgFileNotFound.repl('{name}', caption));\n                    break;\n                case err.SECURITY_ERR:\n                    self.showError(self.msgFileSecured.repl('{name}', caption));\n                    break;\n                case err.NOT_READABLE_ERR:\n                    self.showError(self.msgFileNotReadable.repl('{name}', caption));\n                    break;\n                case err.ABORT_ERR:\n                    self.showError(self.msgFilePreviewAborted.repl('{name}', caption));\n                    break;\n                default:\n                    self.showError(self.msgFilePreviewError.repl('{name}', caption));\n            }\n        },\n        parseFileType: function (file) {\n            var self = this, isValid, vType, cat, i;\n            for (i = 0; i < defaultPreviewTypes.length; i += 1) {\n                cat = defaultPreviewTypes[i];\n                isValid = isSet(cat, self.fileTypeSettings) ? self.fileTypeSettings[cat] : defaultFileTypeSettings[cat];\n                vType = isValid(file.type, file.name) ? cat : '';\n                if (!isEmpty(vType)) {\n                    return vType;\n                }\n            }\n            return 'other';\n        },\n        previewDefault: function (file, previewId, isDisabled) {\n            if (!this.showPreview) {\n                return;\n            }\n            var self = this, data = objUrl.createObjectURL(file), $obj = $('#' + previewId),\n                config = self.previewSettings.other,\n                footer = self.renderFileFooter(file.name, config.width),\n                previewOtherTemplate = self.getPreviewTemplate('other'),\n                ind = previewId.slice(previewId.lastIndexOf('-') + 1),\n                frameClass = '';\n            if (isDisabled === true) {\n                frameClass = ' btn disabled';\n                footer += '<div class=\"file-other-error text-danger\"><i class=\"glyphicon glyphicon-exclamation-sign\"></i></div>';\n            }\n            self.$preview.append(\"\\n\" + previewOtherTemplate\n                .repl('{previewId}', previewId)\n                .repl('{frameClass}', frameClass)\n                .repl('{fileindex}', ind)\n                .repl('{caption}', self.slug(file.name))\n                .repl('{width}', config.width)\n                .repl('{height}', config.height)\n                .repl('{type}', file.type)\n                .repl('{data}', data)\n                .repl('{footer}', footer));\n            $obj.on('load', function () {\n                objUrl.revokeObjectURL($obj.attr('data'));\n            });\n        },\n        previewFile: function (file, theFile, previewId, data) {\n            if (!this.showPreview) {\n                return;\n            }\n            var self = this, cat = self.parseFileType(file), caption = self.slug(file.name), content, strText,\n                types = self.allowedPreviewTypes, mimes = self.allowedPreviewMimeTypes,\n                tmplt = self.getPreviewTemplate(cat),\n                config = isSet(cat, self.previewSettings) ? self.previewSettings[cat] : defaultPreviewSettings[cat],\n                wrapLen = parseInt(self.wrapTextLength, 10), wrapInd = self.wrapIndicator,\n                chkTypes = types.indexOf(cat) >= 0, id, height,\n                chkMimes = isEmpty(mimes) || (!isEmpty(mimes) && mimes.indexOf(file.type) !== -1),\n                footer = self.renderFileFooter(caption, config.width), modal = '',\n                ind = previewId.slice(previewId.lastIndexOf('-') + 1);\n            if (chkTypes && chkMimes) {\n                if (cat === 'text') {\n                    strText = htmlEncode(theFile.target.result);\n                    objUrl.revokeObjectURL(data);\n                    if (strText.length > wrapLen) {\n                        id = 'text-' + uniqId();\n                        height = window.innerHeight * 0.75;\n                        modal = self.getLayoutTemplate('modal').repl('{id}', id)\n                            .repl('{title}', caption)\n                            .repl('{height}', height)\n                            .repl('{body}', strText);\n                        wrapInd = wrapInd\n                            .repl('{title}', caption)\n                            .repl('{dialog}', \"$('#\" + id + \"').modal('show')\");\n                        strText = strText.substring(0, (wrapLen - 1)) + wrapInd;\n                    }\n                    content = tmplt.repl('{previewId}', previewId).repl('{caption}', caption)\n                        .repl('{frameClass}', '')\n                        .repl('{type}', file.type).repl('{width}', config.width)\n                        .repl('{height}', config.height).repl('{data}', strText)\n                        .repl('{footer}', footer).repl('{fileindex}', ind) + modal;\n                } else {\n                    content = tmplt.repl('{previewId}', previewId).repl('{caption}', caption)\n                        .repl('{frameClass}', '')\n                        .repl('{type}', file.type).repl('{data}', data)\n                        .repl('{width}', config.width).repl('{height}', config.height)\n                        .repl('{footer}', footer).repl('{fileindex}', ind);\n                }\n                self.$preview.append(\"\\n\" + content);\n                self.autoSizeImage(previewId);\n            } else {\n                self.previewDefault(file, previewId);\n            }\n        },\n        slugDefault: function (text) {\n            return isEmpty(text) ? '' : text.split(/(\\\\|\\/)/g).pop().replace(/[^\\w\\u00C0-\\u017F\\-.\\\\\\/ ]+/g, '');\n        },\n        getFileStack: function () {\n            var self = this;\n            return self.filestack.filter(function (n) {\n                return n !== undefined;\n            });\n        },\n        readFiles: function (files) {\n            this.reader = new FileReader();\n            var self = this, $el = self.$element, $preview = self.$preview, reader = self.reader,\n                $container = self.$previewContainer, $status = self.$previewStatus, msgLoading = self.msgLoading,\n                msgProgress = self.msgProgress, previewInitId = self.previewInitId, numFiles = files.length,\n                settings = self.fileTypeSettings, ctr = self.filestack.length,\n                throwError = function (msg, file, previewId, index) {\n                    var p1 = $.extend(self.getOutData({}, {}, files), {id: previewId, index: index}),\n                        p2 = {id: previewId, index: index, file: file, files: files};\n                    self.previewDefault(file, previewId, true);\n                    return self.isUploadable ? self.showUploadError(msg, p1) : self.showError(msg, p2);\n                };\n\n            function readFile(i) {\n                if (isEmpty($el.attr('multiple'))) {\n                    numFiles = 1;\n                }\n                if (i >= numFiles) {\n                    if (self.isUploadable && self.filestack.length > 0) {\n                        self.raise('filebatchselected', [self.getFileStack()]);\n                    } else {\n                        self.raise('filebatchselected', [files]);\n                    }\n                    $container.removeClass('loading');\n                    $status.html('');\n                    return;\n                }\n                var node = ctr + i, previewId = previewInitId + \"-\" + node, isText, file = files[i],\n                    caption = self.slug(file.name), fileSize = (file.size || 0) / 1000, checkFile, fileExtExpr = '',\n                    previewData = objUrl.createObjectURL(file), fileCount = 0, j, msg, typ, chk,\n                    fileTypes = self.allowedFileTypes, strTypes = isEmpty(fileTypes) ? '' : fileTypes.join(', '),\n                    fileExt = self.allowedFileExtensions, strExt = isEmpty(fileExt) ? '' : fileExt.join(', ');\n                if (!isEmpty(fileExt)) {\n                    fileExtExpr = new RegExp('\\\\.(' + fileExt.join('|') + ')$', 'i');\n                }\n                fileSize = fileSize.toFixed(2);\n                if (self.maxFileSize > 0 && fileSize > self.maxFileSize) {\n                    msg = self.msgSizeTooLarge.repl('{name}', caption)\n                        .repl('{size}', fileSize)\n                        .repl('{maxSize}', self.maxFileSize);\n                    self.isError = throwError(msg, file, previewId, i);\n                    return;\n                }\n                if (!isEmpty(fileTypes) && isArray(fileTypes)) {\n                    for (j = 0; j < fileTypes.length; j += 1) {\n                        typ = fileTypes[j];\n                        checkFile = settings[typ];\n                        chk = (checkFile !== undefined && checkFile(file.type, caption));\n                        fileCount += isEmpty(chk) ? 0 : chk.length;\n                    }\n                    if (fileCount === 0) {\n                        msg = self.msgInvalidFileType.repl('{name}', caption).repl('{types}', strTypes);\n                        self.isError = throwError(msg, file, previewId, i);\n                        return;\n                    }\n                }\n                if (fileCount === 0 && !isEmpty(fileExt) && isArray(fileExt) && !isEmpty(fileExtExpr)) {\n                    chk = caption.match(fileExtExpr);\n                    fileCount += isEmpty(chk) ? 0 : chk.length;\n                    if (fileCount === 0) {\n                        msg = self.msgInvalidFileExtension.repl('{name}', caption).repl('{extensions}',\n                            strExt);\n                        self.isError = throwError(msg, file, previewId, i);\n                        return;\n                    }\n                }\n                if (!self.showPreview) {\n                    self.filestack.push(file);\n                    setTimeout(readFile(i + 1), 100);\n                    self.raise('fileloaded', [file, previewId, i, reader]);\n                    return;\n                }\n                if ($preview.length > 0 && FileReader !== undefined) {\n                    $status.html(msgLoading.repl('{index}', i + 1).repl('{files}', numFiles));\n                    $container.addClass('loading');\n                    reader.onerror = function (evt) {\n                        self.errorHandler(evt, caption);\n                    };\n                    reader.onload = function (theFile) {\n                        self.previewFile(file, theFile, previewId, previewData);\n                        self.initFileActions();\n                    };\n                    reader.onloadend = function () {\n                        msg = msgProgress\n                            .repl('{index}', i + 1).repl('{files}', numFiles)\n                            .repl('{percent}', 50).repl('{name}', caption);\n                        setTimeout(function () {\n                            $status.html(msg);\n                            objUrl.revokeObjectURL(previewData);\n                        }, 100);\n                        setTimeout(function () {\n                            readFile(i + 1);\n                            self.updateFileDetails(numFiles);\n                        }, 100);\n                        self.raise('fileloaded', [file, previewId, i, reader]);\n                    };\n                    reader.onprogress = function (data) {\n                        if (data.lengthComputable) {\n                            var fact = (data.loaded / data.total) * 100, progress = Math.ceil(fact);\n                            msg = msgProgress.repl('{index}', i + 1).repl('{files}', numFiles)\n                                .repl('{percent}', progress).repl('{name}', caption);\n                            setTimeout(function () {\n                                $status.html(msg);\n                            }, 100);\n                        }\n                    };\n                    isText = isSet('text', settings) ? settings.text : defaultFileTypeSettings.text;\n                    if (isText(file.type, caption)) {\n                        reader.readAsText(file, self.textEncoding);\n                    } else {\n                        reader.readAsArrayBuffer(file);\n                    }\n                } else {\n                    self.previewDefault(file, previewId);\n                    setTimeout(function () {\n                        readFile(i + 1);\n                        self.updateFileDetails(numFiles);\n                    }, 100);\n                    self.raise('fileloaded', [file, previewId, i, reader]);\n                }\n                self.filestack.push(file);\n            }\n\n            readFile(0);\n            self.updateFileDetails(numFiles, false);\n        },\n        updateFileDetails: function (numFiles) {\n            var self = this, $el = self.$element, fileStack = self.getFileStack(),\n                name = $el.val() || (fileStack.length && fileStack[0].name) || '', label = self.slug(name),\n                n = self.isUploadable ? fileStack.length : numFiles,\n                nFiles = previewCache.count(self.id) + n,\n                log = n > 1 ? self.getMsgSelected(nFiles) : label;\n            if (self.isError) {\n                self.$previewContainer.removeClass('loading');\n                self.$previewStatus.html('');\n                self.$captionContainer.find('.kv-caption-icon').hide();\n            } else {\n                self.showFileIcon();\n            }\n            self.setCaption(log, self.isError);\n            self.$container.removeClass('file-input-new file-input-ajax-new');\n            if (arguments.length === 1) {\n                self.raise('fileselect', [numFiles, label]);\n            }\n            if (previewCache.count(self.id)) {\n                self.initPreviewDeletes();\n            }\n        },\n        change: function (e) {\n            var self = this, $el = self.$element;\n            if (!self.isUploadable && isEmpty($el.val()) && self.fileInputCleared) { // IE 11 fix\n                self.fileInputCleared = false;\n                return;\n            }\n            self.fileInputCleared = false;\n            var tfiles, msg, total, $preview = self.$preview, isDragDrop = arguments.length > 1,\n                files = isDragDrop ? e.originalEvent.dataTransfer.files : $el.get(0).files,\n                isSingleUpload = isEmpty($el.attr('multiple')), i = 0, f, m, folders = 0,\n                ctr = self.filestack.length, isAjaxUpload = self.isUploadable,\n                throwError = function (mesg, file, previewId, index) {\n                    var p1 = $.extend(self.getOutData({}, {}, files), {id: previewId, index: index}),\n                        p2 = {id: previewId, index: index, file: file, files: files};\n                    return self.isUploadable ? self.showUploadError(mesg, p1) : self.showError(mesg, p2);\n                };\n            self.reader = null;\n            self.resetUpload();\n            self.hideFileIcon();\n            if (self.isUploadable) {\n                self.$container.find('.file-drop-zone .' + self.dropZoneTitleClass).remove();\n            }\n            if (isDragDrop) {\n                tfiles = [];\n                while (files[i]) {\n                    f = files[i];\n                    if (!f.type && f.size % 4096 === 0) {\n                        folders++;\n                    } else {\n                        tfiles.push(f);\n                    }\n                    i++;\n                }\n            } else {\n                if (e.target.files === undefined) {\n                    tfiles = e.target && e.target.value ? [\n                        {name: e.target.value.replace(/^.+\\\\/, '')}\n                    ] : [];\n                } else {\n                    tfiles = e.target.files;\n                }\n            }\n            if (isEmpty(tfiles) || tfiles.length === 0) {\n                if (!isAjaxUpload) {\n                    self.clear();\n                }\n                self.showFolderError(folders);\n                self.raise('fileselectnone');\n                return;\n            }\n            self.resetErrors();\n            if (!isAjaxUpload || (isSingleUpload && ctr > 0)) {\n                if (!self.overwriteInitial && previewCache.count(self.id)) {\n                    var out = previewCache.out(self.id);\n                    $preview.html(out.content);\n                    self.setCaption(out.caption);\n                    self.initPreviewDeletes();\n                } else {\n                    $preview.html('');\n                }\n\n                if (isSingleUpload && ctr > 0) {\n                    self.filestack = [];\n                }\n            }\n            total = self.isUploadable ? self.getFileStack().length + tfiles.length : tfiles.length;\n            if (self.maxFileCount > 0 && total > self.maxFileCount) {\n                msg = self.msgFilesTooMany.repl('{m}', self.maxFileCount).repl('{n}', total);\n                self.isError = throwError(msg, null, null, null);\n                self.$captionContainer.find('.kv-caption-icon').hide();\n                self.$caption.html(self.msgValidationError);\n                self.setEllipsis();\n                self.$container.removeClass('file-input-new file-input-ajax-new');\n                return;\n            }\n            if (!self.isIE9) {\n                self.readFiles(tfiles);\n            } else {\n                self.updateFileDetails(1);\n            }\n            self.showFolderError(folders);\n        },\n        autoSizeImage: function (previewId) {\n            var self = this, $preview = self.$preview,\n                $thumb = $preview.find(\"#\" + previewId),\n                $img = $thumb.find('img'), w1, w2, $cap;\n            if (!$img.length) {\n                return;\n            }\n            $img.on('load', function () {\n                w1 = $thumb.width();\n                w2 = $preview.width();\n                if (w1 > w2) {\n                    $img.css('width', '100%');\n                    $thumb.css('width', '97%');\n                }\n                $cap = $img.closest('.file-preview-frame').find('.file-caption-name');\n                if ($cap.length) {\n                    $cap.width($img.width());\n                    $cap.attr('title', $cap.text());\n                }\n                self.raise('fileimageloaded', previewId);\n            });\n        },\n        initCaption: function () {\n            var self = this, cap = self.initialCaption || '';\n            if (self.overwriteInitial || isEmpty(cap)) {\n                self.$caption.html('');\n                return false;\n            }\n            self.setCaption(cap);\n            return true;\n        },\n        setCaption: function (content, isError) {\n            var self = this, err = isError || false, title, out;\n            if (err) {\n                title = $('<div>' + self.msgValidationError + '</div>').text();\n                out = '<span class=\"' + self.msgValidationErrorClass + '\">' +\n                self.msgValidationErrorIcon + title + '</span>';\n            } else {\n                if (isEmpty(content) || self.$caption.length === 0) {\n                    return;\n                }\n                title = $('<div>' + content + '</div>').text();\n                out = self.getLayoutTemplate('icon') + title;\n            }\n            self.$caption.html(out);\n            self.$caption.attr('title', title);\n            self.$captionContainer.find('.file-caption-ellipsis').attr('title', title);\n            self.setEllipsis();\n        },\n        initBrowse: function ($container) {\n            var self = this;\n            self.$btnFile = $container.find('.btn-file');\n            self.$btnFile.append(self.$element);\n        },\n        createContainer: function () {\n            var self = this,\n                $container = $(document.createElement(\"span\"))\n                    .attr({\"class\": 'file-input file-input-new'})\n                    .html(self.renderMain());\n            self.$element.before($container);\n            self.initBrowse($container);\n            return $container;\n        },\n        refreshContainer: function () {\n            var self = this, $container = self.$container;\n            $container.before(self.$element);\n            $container.html(self.renderMain());\n            self.initBrowse($container);\n        },\n        renderMain: function () {\n            var self = this, dropCss = (self.isUploadable && self.dropZoneEnabled) ? ' file-drop-zone' : '',\n                preview = self.showPreview ? self.getLayoutTemplate('preview').repl('{class}', self.previewClass)\n                    .repl('{dropClass}', dropCss) : '',\n                css = self.isDisabled ? self.captionClass + ' file-caption-disabled' : self.captionClass,\n                caption = self.captionTemplate.repl('{class}', css + ' kv-fileinput-caption');\n            return self.mainTemplate.repl('{class}', self.mainClass)\n                .repl('{preview}', preview)\n                .repl('{caption}', caption)\n                .repl('{upload}', self.renderUpload())\n                .repl('{remove}', self.renderRemove())\n                .repl('{cancel}', self.renderCancel())\n                .repl('{browse}', self.renderBrowse());\n        },\n        renderBrowse: function () {\n            var self = this, css = self.browseClass + ' btn-file', status = '';\n            if (self.isDisabled) {\n                status = ' disabled ';\n            }\n            return '<div class=\"' + css + ' btn btn-sm btn-primary\"' + status + '> ' + self.browseIcon + self.browseLabel + ' </div>';\n        },\n        renderRemove: function () {\n            var self = this, css = self.removeClass + ' fileinput-remove fileinput-remove-button', status = '';\n            if (!self.showRemove) {\n                return '';\n            }\n            if (self.isDisabled) {\n                status = ' disabled ';\n            }\n            return '';\n        },\n        renderCancel: function () {\n            var self = this, css = self.cancelClass + ' fileinput-cancel fileinput-cancel-button';\n            if (!self.showCancel) {\n                return '';\n            }\n            return '<button type=\"button\" title=\"' + self.cancelTitle + '\" class=\"hide ' + css + '\">' + self.cancelIcon + self.cancelLabel + '</button>';\n        },\n        renderUpload: function () {\n            var self = this, css = self.uploadClass + ' kv-fileinput-upload fileinput-upload-button', content = '', status = '';\n            if (!self.showUpload) {\n                return '';\n            }\n            if (self.isDisabled) {\n                status = ' disabled ';\n            }\n            if (!self.isUploadable || self.isDisabled) {\n                content = '';\n            } else {\n                content = '';\n            }\n            return content;\n        }\n    };\n\n    //FileInput plugin definition\n    $.fn.fileinput = function (option) {\n        if (!hasFileAPISupport() && !isIE(9)) {\n            return;\n        }\n\n        var args = Array.apply(null, arguments);\n        args.shift();\n        return this.each(function () {\n            var $this = $(this),\n                data = $this.data('fileinput'),\n                options = typeof option === 'object' && option;\n\n            if (!data) {\n                data = new FileInput(this, $.extend({}, $.fn.fileinput.defaults, options, $(this).data()));\n                $this.data('fileinput', data);\n            }\n\n            if (typeof option === 'string') {\n                data[option].apply(data, args);\n            }\n        });\n    };\n\n    $.fn.fileinput.defaults = {\n        showCaption: true,\n        showPreview: true,\n        showRemove: true,\n        showUpload: true,\n        showCancel: true,\n        mainClass: '',\n        previewClass: '',\n        captionClass: '',\n        mainTemplate: null,\n        initialCaption: '',\n        initialPreview: [],\n        initialPreviewDelimiter: '*$$*',\n        initialPreviewConfig: [],\n        initialPreviewThumbTags: [],\n        previewThumbTags: {},\n        initialPreviewShowDelete: true,\n        deleteUrl: '',\n        deleteExtraData: {},\n        overwriteInitial: true,\n        layoutTemplates: defaultLayoutTemplates,\n        previewTemplates: defaultPreviewTemplates,\n        allowedPreviewTypes: defaultPreviewTypes,\n        allowedPreviewMimeTypes: null,\n        allowedFileTypes: null,\n        allowedFileExtensions: null,\n        customLayoutTags: {},\n        customPreviewTags: {},\n        previewSettings: defaultPreviewSettings,\n        fileTypeSettings: defaultFileTypeSettings,\n        previewFileIcon: '<i class=\"glyphicon glyphicon-file\"></i>',\n        browseIcon: '<i class=\"glyphicon glyphicon-folder-open\"></i> &nbsp;',\n        browseClass: 'btn btn-primary',\n        removeIcon: '<i class=\"glyphicon glyphicon-trash\"></i> ',\n        removeClass: 'btn btn-default',\n        cancelIcon: '<i class=\"glyphicon glyphicon-ban-circle\"></i> ',\n        cancelClass: 'btn btn-default',\n        uploadIcon: '<i class=\"glyphicon glyphicon-upload\"></i> ',\n        uploadClass: 'btn btn-default',\n        uploadUrl: null,\n        uploadAsync: true,\n        uploadExtraData: {},\n        maxFileSize: 0,\n        minFileCount: 0,\n        maxFileCount: 0,\n        msgValidationErrorClass: 'text-danger',\n        msgValidationErrorIcon: '<i class=\"glyphicon glyphicon-exclamation-sign\"></i> ',\n        msgErrorClass: 'file-error-message',\n        progressClass: \"progress-bar progress-bar-success progress-bar-striped active\",\n        progressCompleteClass: \"progress-bar progress-bar-success\",\n        previewFileType: 'image',\n        wrapTextLength: 250,\n        wrapIndicator: ' <span class=\"wrap-indicator\" title=\"{title}\" onclick=\"{dialog}\">[&hellip;]</span>',\n        elCaptionContainer: null,\n        elCaptionText: null,\n        elPreviewContainer: null,\n        elPreviewImage: null,\n        elPreviewStatus: null,\n        elErrorContainer: null,\n        slugCallback: null,\n        dropZoneEnabled: true,\n        dropZoneTitleClass: 'file-drop-zone-title',\n        fileActionSettings: {},\n        otherActionButtons: '',\n        textEncoding: 'UTF-8',\n        ajaxSettings: {},\n        ajaxDeleteSettings: {},\n        showAjaxErrorDetails: true\n    };\n\n    $.fn.fileinput.locales = {};\n\n    $.fn.fileinput.locales.en = {\n        fileSingle: 'file',\n        filePlural: 'files',\n        browseLabel: 'Browse &hellip;',\n        removeLabel: 'Remove',\n        removeTitle: 'Clear selected files',\n        cancelLabel: 'Cancel',\n        cancelTitle: 'Abort ongoing upload',\n        uploadLabel: 'Upload',\n        uploadTitle: 'Upload selected files',\n        msgSizeTooLarge: 'File \"{name}\" (<b>{size} KB</b>) exceeds maximum allowed upload size of <b>{maxSize} KB</b>. Please retry your upload!',\n        msgFilesTooLess: 'You must select at least <b>{n}</b> {files} to upload. Please retry your upload!',\n        msgFilesTooMany: 'Number of files selected for upload <b>({n})</b> exceeds maximum allowed limit of <b>{m}</b>. Please retry your upload!',\n        msgFileNotFound: 'File \"{name}\" not found!',\n        msgFileSecured: 'Security restrictions prevent reading the file \"{name}\".',\n        msgFileNotReadable: 'File \"{name}\" is not readable.',\n        msgFilePreviewAborted: 'File preview aborted for \"{name}\".',\n        msgFilePreviewError: 'An error occurred while reading the file \"{name}\".',\n        msgInvalidFileType: 'Invalid type for file \"{name}\". Only \"{types}\" files are supported.',\n        msgInvalidFileExtension: 'Invalid extension for file \"{name}\". Only \"{extensions}\" files are supported.',\n        msgValidationError: 'File Upload Error',\n        msgLoading: 'Loading file {index} of {files} &hellip;',\n        msgProgress: 'Loading file {index} of {files} - {name} - {percent}% completed.',\n        msgSelected: '{n} {files} selected',\n        msgFoldersNotAllowed: 'Drag & drop files only! {n} folder(s) dropped were skipped.',\n        dropZoneTitle: 'Drag & drop files here &hellip;'\n    };\n\n    $.extend($.fn.fileinput.defaults, $.fn.fileinput.locales.en);\n\n    $.fn.fileinput.Constructor = FileInput;\n\n    /**\n     * Convert automatically file inputs with class 'file'\n     * into a bootstrap fileinput control.\n     */\n    $(document).ready(function () {\n        var $input = $('input.file[type=file]'), count = $input.attr('type') ? $input.length : 0;\n        if (count > 0) {\n            $input.fileinput();\n        }\n    });\n})(window.jQuery);"
  },
  {
    "path": "public/assets/dashboard/js/fileinput_locale_zh.js",
    "content": "/*!\n * FileInput Chinese Translations\n *\n * This file must be loaded after 'fileinput.js'. Patterns in braces '{}', or\n * any HTML markup tags in the messages must not be converted or translated.\n *\n * @see http://github.com/kartik-v/bootstrap-fileinput\n * @author kangqf <kangqingfei@gmail.com>\n *\n * NOTE: this file must be saved in UTF-8 encoding.\n */\n(function ($) {\n    \"use strict\";\n\n    $.fn.fileinput.locales.zh = {\n        fileSingle: '文件',\n        filePlural: '多个文件',\n        browseLabel: '选择 &hellip;',\n        removeLabel: '移除全部',\n        removeTitle: '清除选中文件',\n        cancelLabel: '取消',\n        cancelTitle: '取消进行中的上传',\n        uploadLabel: '上传',\n        uploadTitle: '上传选中文件',\n        msgSizeTooLarge: '文件 \"{name}\" (<b>{size} KB</b>) 超过了允许大小 <b>{maxSize} KB</b>. 请重新上传!',\n        msgFilesTooLess: '你必须选择最少 <b>{n}</b> {files} 来上传. 请重新上传!',\n        msgFilesTooMany: '选择的上传文件个数 <b>({n})</b> 超出最大文件的限制个数 <b>{m}</b>. 请重新上传!',\n        msgFileNotFound: '文件 \"{name}\" 未找到!',\n        msgFileSecured: '安全限制，为了防止读取文件 \"{name}\".',\n        msgFileNotReadable: '文件 \"{name}\" 不可读.',\n        msgFilePreviewAborted: '取消 \"{name}\" 的预览.',\n        msgFilePreviewError: '读取 \"{name}\" 时出现了一个错误.',\n        msgInvalidFileType: '不正确的类型 \"{name}\". 只支持 \"{types}\" 类型的文件.',\n        msgInvalidFileExtension: '不正确的文件扩展名 \"{name}\". 只支持 \"{extensions}\" 的文件扩展名.',\n        msgValidationError: '文件上传错误',\n        msgLoading: '加载第 {index} 文件 共 {files} &hellip;',\n        msgProgress: '加载第 {index} 文件 共 {files} - {name} - {percent}% 完成.',\n        msgSelected: '{n} {files} 选中',\n        msgFoldersNotAllowed: '只支持拖拽文件! 跳过 {n} 拖拽的文件夹.',\n        dropZoneTitle: '拖拽文件到这里 &hellip;',\n        slugCallback: function(text) {\n            return text ? text.split(/(\\\\|\\/)/g).pop().replace(/[^\\w\\u4e00-\\u9fa5\\-.\\\\\\/ ]+/g, '') : '';\n        }\n    };\n\n    $.extend($.fn.fileinput.defaults, $.fn.fileinput.locales.zh);\n})(window.jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/global.js",
    "content": "/**\n * Created by PhpKiller.\n * User: Across The Pacific\n * Date: 2016/12/29\n * Time: 15:33\n * 鸿杰 张\n */\n//公共js文件\n\n/**\n * ajax提交表单检测\n *@param var status 检测条件\n *@param var value 检测字段值\n *@param var value 提示消息\n * */\nvar isEmpty = function (status, value, msg) {\n    if (status === $.trim(value)) {//trim 去除空格\n        layer.msg(msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n            layer.close(index);\n        });\n        return false;\n    }\n};\n\n/**\n * jquery 正则检测\n *@param var reg 正则匹配条件\n *@param var value 检测字段值\n *@param var value 提示消息\n * */\nvar prexRule = function (reg, value, msg) {\n    if (!reg.test(value)) {\n        layer.msg(msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n            layer.close(index);\n        });\n        return false;\n    }\n};\n/**\n * 修改指定表的某一字段值\n *@param var table 表名\n *@param var column 字段名\n *@param var value 字段值\n *@param var msg 提示消息\n * */\nfunction updateSort(obj) {\n    var id = $(obj).attr(\"data-id\");\n    var table = $(obj).attr(\"data-table\");\n    var column = $(obj).attr(\"data-column\");\n    var value = $(obj).val();\n    var msg = $(obj).attr('data-msg');\n    $.ajax({\n        url:\"/dashboard/commonStatus?id=\"+id+'&table='+table+'&column='+column+'&value='+value,\n        success: function (data) {\n            if (data.status == 1) {\n                layer.msg(msg, {icon: 1, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                    layer.close(index);\n                });\n            } else {\n                layer.msg(data.msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                    window.location.reload();\n                });\n            }\n\n        }\n    });\n};\n/**\n * 点击刷新列表页\n * */\nvar refresh = function () {\n    layer.msg('更新成功', {icon: 1, time: 1000, shade: [0.8, '#393D49']}, function () {\n        location.href = location.href;\n    });\n}\n/**\n * jquery全选\n *@param var obj this对象\n * */\nvar checkAll = function (obj) {\n    $('input[name *= \\'ids\\']').prop('checked', obj.checked)\n};\n/**\n * jquery获取选中的id\n *@param var obj this对象\n *@param var id 要删除的主键\n *@param var attr('data-url') 要调用的url\n * */\nvar getIds = function (obj) {\n    var a = [];\n    $(\"input[name *= ids]\").each(function (i, o) {\n        if ($(o).is(\":checked\")) {\n            a.push($(o).val());\n        }\n    });\n    var url = $(obj).attr('data-url')\n    delBtn('', a, url)\n}\n/**\n * jquery删除数据\n *@param var obj this对象\n *@param var a 批量删除的主键\n *@param var urla 要调用的url\n *@param var attr('data-id') 要删除的id(单条)\n *@param var attr('data-name') 要删除name(单条)\n *@param var attr('data-url') 要调用的url(单条)\n * */\nvar delBtn = function (obj, a, urla) {\n    if (a) {\n        var id = a\n        var name = '所选择的'\n        var url = urla\n    } else {\n        var id = $(obj).attr('data-id')\n        var name = $(obj).attr('data-name')\n        var url = $(obj).attr('data-url')\n    }\n\n    if (isEmpty('', id, '请选择要删除的数据') == false) {\n        return false;\n    }\n    layer.confirm('确定要删除' + '<span style=\"color:#ff0000\">' + name + '</span>' + '吗?', {icon: 3}, function () {\n        $.ajax({\n            type: 'POST',\n            url: url,\n            data: {\n                ids: id\n            },\n            dataType: \"json\",\n            beforeSend: function () {\n                layer.closeAll();\n            },\n            success: function (data) {\n                layer.closeAll();\n                if (data.status == 1) {\n                    layer.msg(data.msg, {icon: 1, time: 1000, shade: [0.8, '#393D49']}, function () {\n                        location.href = location.href;\n                    });\n                } else {\n                    layer.msg(data.msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                        layer.close(index);\n                    });\n                }\n            },\n        });\n    });\n};\n/*数据库优化|修复\n *@param var obj this对象\n *@param var msg 没有选中时提示消息\n *@param var tab tab是单张表，没有值则为批量操作\n *@param var url 要调用的url\n * */\nvar jqOptimize = function (obj, msg, tab) {\n    if (tab) {\n        var a = tab;\n    } else {\n        var a = [];\n        $(\"input[name *= ids]\").each(function (i, o) {\n            if ($(o).is(\":checked\")) {\n                a.push($(o).val());\n            }\n        });\n    }\n    if (a.length == 0) {\n        layer.msg('请选择要' + msg + '的数据表', {icon: 5, time: 2000}, function (index) {\n            layer.close(index);\n            return;\n        });\n    } else {\n        $(obj).addClass('disabled');\n        $(obj).html(msg + '中...');\n        $.ajax({\n            type: 'post',\n            url: $(obj).attr('data-url'),\n            dataType: 'json',\n            data: {tables: a},\n            success: function (data) {\n                if (data.code == 1) {\n                    layer.msg(data.msg, {icon: 1, time: 2000, shade: [0.8, '#393D49']}, function (index) {\n                        location.href = location.href;\n                    });\n                } else {\n                    layer.msg(data.msg, {icon: 5, time: 2000, shade: [0.8, '#393D49']}, function (index) {\n                        location.href = location.href;\n                    });\n                }\n            },\n            error: function () {\n\n                layer.msg(data.msg, {icon: 5, time: 2000, shade: [0.8, '#393D49']}, function (index) {\n                    return false;\n                });\n            }\n        });\n    }\n};\n/*ajax分页\n *@param var form 表单id\n *@param var url 要调用的url\n * */\nvar ajaxList = function (form, url) {\n    $.ajax({\n        type: 'POST',\n        url: url,\n        data: $('#' + form).serialize(),//导航搜索\n        success: function (data) {\n            $('#ajax_return').html('');\n            $('#ajax_return').append(data);\n            $(\".spiner-example\").css('display', 'none');\n        },\n    });\n};\n/*jquery文件上传[注意:需要引入jquery.easyui.min.js]\n *@param url 文件上传控制器url\n *@param path 要上传到哪个目录下\n *@param input_name input框的name\n * */\n$(document).ready(function () {//打开页面执行\n    html = \"<form id='upload' style='display: none' method='post' enctype='multipart/form-data'>\";\n    html += '<input up=\"file\" type=\"file\" name=\"myfile\" >';\n    html += \"{{ csrf_field() }}\";\n    html += '</form>';\n    $('body').append(html);\n});\n$(document).delegate('[uploader]', 'click', function () {//找到属性，点击时执行\n    var s = $(this);\n    var url = s.attr('data-url');\n    var path = s.attr('data-path');\n    var input_name = s.attr('uploader');\n    var f = $(\"[up=file]\");\n\n    f.click();\n\n    f.change(function () {\n        if (!input_name) {\n            return false;\n        }\n        $(\"#upload\").form('submit', {\n            type: 'post',\n            url: url,\n            onSubmit: function (param) {\n                param.path = path;\n            },\n            success: function (res) {\n                var obj = eval('(' + res + ')');\n                if (obj.status == 1) {\n                    $(\"#\" + input_name).val(obj.msg);\n                    $(\"#\" + input_name + \"_img\").attr('src', obj.msg);\n                } else {\n                    layer.msg(obj.msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                        layer.close(index);\n                    });\n                }\n                input_name = false;\n            },\n        });\n    });\n});\n/**\n * 时间插件\n *@param $pagesize 每一页的总数\n *@param min 最小时间\n *@param tody 是否显示今天\n */\n$(document).delegate('[time_plugin]', 'click', function () {//找到属性，点击时执行\n    var s = $(this);\n    var min = s.attr('data-min');\n    var namea = s.attr('data-min');\n    //var now = show();\n    var now = '2017-03-01';\n    var tody = true;\n    if (min != 'input') {\n        now = $(\"input[name ='\" + namea + \"']\").val()\n        tody = false;\n    }\n    laydate({\n        istime: true, format: 'YYYY-MM-DD hh:mm:ss',\n        istoday: true, //是否显示今天\n        festival: true, //是否显示节日\n        min: now, //最小日期\n        issure: true, //是否显示确认\n        max: '2099-12-31 23:59:59', //最大日期\n        fixed: false, //是否固定在可视区域\n        zIndex: 99999999, //css z-index\n        choose: function (dates) { //选择好日期的回调\n\n        }\n    });\n});\n/**\n * 获取当前日期\n */\nfunction show() {\n    var d = new Date();//定义一个date对象d\n    var month = d.getMonth() + 1;//从d中获取月份\n    var day = d.getDate();//日\n    var time = d.getHours() + \":\" + d.getMinutes() + \":\" + d.getSeconds();//组装时间参数\n    var timea = d.getFullYear() + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day + \" \" + time;\n    return timea;//2017-03-17 15:42:15\n}\n\n/**获取活动剩余天数 小时 分钟\n //倒计时js代码精确到时分秒，使用方法：注意 var EndTime= new Date('2013/05/1 10:00:00');\n //截止时间 这一句，特别是 '2013/05/1 10:00:00' 这个js日期格式一定要注意，否则在IE6、7下工作计算不正确哦。\n //js代码如下：\n **/\nfunction GetRTime(end_time) {\n    console.log(end_time);\n    // var EndTime= new Date('2016/05/1 10:00:00'); //截止时间 前端路上 http://www.51xuediannao.com/qd63/\n    var EndTime = new Date(end_time); //截止时间 前端路上 http://www.51xuediannao.com/qd63/\n    var NowTime = new Date();\n    var t = EndTime.getTime() - NowTime.getTime();\n\n    var d = Math.floor(t / 1000 / 60 / 60 / 24);\n    var h = Math.floor(t / 1000 / 60 / 60 % 24);\n    var m = Math.floor(t / 1000 / 60 % 60);\n    var s = Math.floor(t / 1000 % 60);\n    if (s >= 0) {\n        if (d == 0) {\n            return h + '小时' + m + '分' + s + '秒';\n        }\n        if (h == 0) {\n            return m + '分' + s + '秒';\n        }\n        return d + '天' + h + '小时' + m + '分' + s + '秒';\n    }\n}\n\n/**\n * 异步显示隐藏\n *@param id  表id\n *@param table  表名\n *@param column 字段名\n *@param value 要改成什么值\n *@param  todo 为1表示要开启check，0表示要关闭close\n *@param  cv 当前的值\n *@param  cur 当前的msg\n *@param  msg 要改成什么值\n */\nvar changeStatus = function (obj) {\n    var todo = $(obj).attr('data-todo');\n    var cv = $(obj).attr('data-cv');\n    var cur = $(obj).attr('data-cur');\n    var msg = $(obj).attr('data-msg');\n\n    var value = $(obj).attr('data-value');\n    var id = $(obj).attr('data-id');\n    var table = $(obj).attr('data-table');\n    var column = $(obj).attr('data-column');\n    $.ajax({\n        url:\"/dashboard/commonStatus?id=\"+id+'&table='+table+'&column='+column+'&value='+value,\n        success: function (data) {\n            if(data.status == 0) {\n                layer.msg(data.msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                    layer.close(index);\n                });\n            } else {\n                layer.msg(data.msg, {icon: 1, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                    layer.close(index);\n                });\n            }\n            if (todo > 0) {\n                $(obj).removeClass('fa-close').addClass('fa-check');\n                $(obj).attr('data-todo', 0);\n            } else {\n                $(obj).removeClass('fa-check').addClass('fa-close');\n                $(obj).attr('data-todo', 1);\n            }\n            $(obj).html(msg);\n\n            $(obj).attr('data-value', cv);\n            $(obj).attr('data-cv', value);\n            $(obj).attr('data-msg', cur);\n            $(obj).attr('data-cur', msg);\n        }\n    });\n};\n/**\n * 获取多级联动的商品分类\n *@param id 当前选中的id\n *@param next 要填充的id\n *@param select_id 当前选中的id\n */\nvar getNextCate = function (id, next, select_id) {\n    var url = \"/admin/Goods/ajaxGetNext/pid/\" + id;\n    $.ajax({\n        type: \"GET\",\n        url: url,\n        error: function (request) {\n            layer.msg('服务器繁忙, 请联系管理员!', {icon: 5, time: 1000, shade: [0.8, '#393D49']}, function (index) {\n                layer.close(index);\n            });\n            return;\n        },\n        success: function (v) {\n            v = \"<option value='0'>请选择商品分类</option>\" + v;\n            $('#' + next).empty().html(v);\n            (select_id > 0) && $('#' + next).val(select_id);//默认选中\n        }\n    });\n}\n/**\n * 序列化表单ajax异步提交\n *@param url 控制器url\n *@param formId 表单id\n */\nfunction ajaxFormBtn(url, formId, layerClose) {\n    $.ajax({\n        type: 'post',\n        url: url,\n        data: $(\"#\" + formId).serialize(),\n        success: function (data) {\n            if (data.status == 1) {\n                layer.msg(data.msg, {icon: 1, time: 1000, shade: [0.8, '#393D49']}, function () {\n                    if (layerClose) {\n                        parent.layer.closeAll();\n                    }\n                    window.location = data.url;\n                });\n            } else {\n                layer.msg(data.msg, {icon: 5, time: 1000, shade: [0.8, '#393D49']});\n                return false;\n            }\n        },\n        error: function (data) {\n\n            if (data.status == 422) {\n                var responseJSON = data.responseJSON;\n                let content = '';\n                for (var k in responseJSON) {\n                    let value = responseJSON[k];\n\n                    content += '<span style=\"color: #e74c3c\">' + value[0] + '</span><br>';\n                }\n                layer.msg(content, {icon: 5, time: 2000, shade: [0.8, '#393D49']});\n            } else if (data.status == 403) {\n                layer.msg('你没有权限这么做', {icon: 5, time: 2000, shade: [0.8, '#393D49']});\n            } else {\n                layer.msg('网络错误，请稍后复试', {icon: 5, time: 2000, shade: [0.8, '#393D49']});\n            }\n            return false;\n        }\n    });\n}\n/**\n * 读取 cookie\n *@param c_name cookie名字\n */\nfunction getCookie(c_name) {\n    if (document.cookie.length > 0) {\n        c_start = document.cookie.indexOf(c_name + \"=\")\n        if (c_start != -1) {\n            c_start = c_start + c_name.length + 1\n            c_end = document.cookie.indexOf(\";\", c_start)\n            if (c_end == -1) c_end = document.cookie.length\n            return unescape(document.cookie.substring(c_start, c_end))\n        }\n    }\n    return 0;\n}\n/**\n * 设置 cookie\n *@param name cookie名字\n *@param value cookie值\n *@param time cookie有效期\n */\nfunction setCookies(name, value, time) {\n    var cookieString = name + \"=\" + escape(value) + \";\";\n    if (time != 0) {\n        var Times = new Date();\n        Times.setTime(Times.getTime() + time);\n        cookieString += \"expires=\" + Times.toGMTString() + \";\"\n    }\n    document.cookie = cookieString;\n}\n/**\n * 点击收藏商品\n *@param goods_id 商品id\n */\nfunction collectGoods(goods_id) {\n    $.ajax({\n        type: \"POST\",\n        url: \"/mobile/Goods/collectGoods\",\n        data: {goods_id: goods_id},\n        dataType: 'json',\n        success: function (data) {\n            layer.open({content: data.msg, time: 1});\n            return false;\n        },\n        error: function () {\n            layer.open({content: '网络错误,请稍后再试', time: 1});\n            return false;\n        }\n    });\n}\n/**\n * 根据省份id获取省份下面的城市列表\n */\nfunction getCity(obj) {\n    var pid = $(obj).val();//当前选中的省id\n    $(\"#district\").empty().html('<option value=\"\">请选择地区</option>');\n    $('#twon').empty().css('display', 'none');\n    $.ajax({\n        type: \"POST\",\n        url: \"/home/Api/getRegion/level/2/pid/\" + pid,\n        success: function (data) {\n            var res = '<option value=\"\">请选择城市</option>' + data;\n            $(\"#city\").empty().html(res);\n        },\n        error: function () {\n            layer.open({content: '网络错误,请稍后再试', time: 1});\n            return false;\n        }\n    });\n};\n/**\n * 根据城市id获取下面的地区列表\n */\nfunction getArea(obj) {\n    var pid = $(obj).val();//当前选中的省id\n    $('#twon').empty().css('display', 'none');\n    $.ajax({\n        type: \"POST\",\n        url: \"/home/Api/getRegion/level/3/pid/\" + pid,\n        success: function (data) {\n            var res = '<option value=\"\">请选择地区</option>' + data;\n            $(\"#district\").empty().html(res);\n        },\n        error: function () {\n            layer.open({content: '网络错误,请稍后再试', time: 1});\n            return false;\n        }\n    });\n};\n/**\n * 根据地区id获取下面的乡镇列表\n */\nfunction getTown(obj) {\n    var pid = $(obj).val();//当前选中的省id\n\n    $.ajax({\n        type: \"POST\",\n        url: \"/home/Api/getTwon/pid/\" + pid,\n        success: function (data) {\n            if (parseInt(data) == 0) {\n                $('#twon').empty().css('display', 'none');\n            } else {\n                $('#twon').css('display', 'block');\n                $('#twon').empty().html(data);\n            }\n        },\n        error: function () {\n            layer.open({content: '网络错误,请稍后再试', time: 1});\n            return false;\n        }\n    });\n};\n// // 保存按钮 enter\n// document.onkeydown = function (event) {\n//     var e = event || window.event || arguments.callee.caller.arguments[0];\n//     if (e && e.keyCode == 13) { // enter 键\n//         $('.saveBtn').click();\n//     }\n// };\n"
  },
  {
    "path": "public/assets/dashboard/js/jquery.form.js",
    "content": "/*!\n * jQuery Form Plugin\n * version: 3.51.0-2014.06.20\n * Requires jQuery v1.5 or later\n * Copyright (c) 2014 M. Alsup\n * Examples and documentation at: http://malsup.com/jquery/form/\n * Project repository: https://github.com/malsup/form\n * Dual licensed under the MIT and GPL licenses.\n * https://github.com/malsup/form#copyright-and-license\n */\n/*global ActiveXObject */\n\n// AMD support\n(function (factory) {\n    \"use strict\";\n    if (typeof define === 'function' && define.amd) {\n        // using AMD; register as anon module\n        define(['jquery'], factory);\n    } else {\n        // no AMD; invoke directly\n        factory( (typeof(jQuery) != 'undefined') ? jQuery : window.Zepto );\n    }\n}\n\n(function($) {\n\"use strict\";\n\n/*\n    Usage Note:\n    -----------\n    Do not use both ajaxSubmit and ajaxForm on the same form.  These\n    functions are mutually exclusive.  Use ajaxSubmit if you want\n    to bind your own submit handler to the form.  For example,\n\n    $(document).ready(function() {\n        $('#myForm').on('submit', function(e) {\n            e.preventDefault(); // <-- important\n            $(this).ajaxSubmit({\n                target: '#output'\n            });\n        });\n    });\n\n    Use ajaxForm when you want the plugin to manage all the event binding\n    for you.  For example,\n\n    $(document).ready(function() {\n        $('#myForm').ajaxForm({\n            target: '#output'\n        });\n    });\n\n    You can also use ajaxForm with delegation (requires jQuery v1.7+), so the\n    form does not have to exist when you invoke ajaxForm:\n\n    $('#myForm').ajaxForm({\n        delegation: true,\n        target: '#output'\n    });\n\n    When using ajaxForm, the ajaxSubmit function will be invoked for you\n    at the appropriate time.\n*/\n\n/**\n * Feature detection\n */\nvar feature = {};\nfeature.fileapi = $(\"<input type='file'/>\").get(0).files !== undefined;\nfeature.formdata = window.FormData !== undefined;\n\nvar hasProp = !!$.fn.prop;\n\n// attr2 uses prop when it can but checks the return type for\n// an expected string.  this accounts for the case where a form \n// contains inputs with names like \"action\" or \"method\"; in those\n// cases \"prop\" returns the element\n$.fn.attr2 = function() {\n    if ( ! hasProp ) {\n        return this.attr.apply(this, arguments);\n    }\n    var val = this.prop.apply(this, arguments);\n    if ( ( val && val.jquery ) || typeof val === 'string' ) {\n        return val;\n    }\n    return this.attr.apply(this, arguments);\n};\n\n/**\n * ajaxSubmit() provides a mechanism for immediately submitting\n * an HTML form using AJAX.\n */\n$.fn.ajaxSubmit = function(options) {\n    /*jshint scripturl:true */\n\n    // fast fail if nothing selected (http://dev.jquery.com/ticket/2752)\n    if (!this.length) {\n        log('ajaxSubmit: skipping submit process - no element selected');\n        return this;\n    }\n\n    var method, action, url, $form = this;\n\n    if (typeof options == 'function') {\n        options = { success: options };\n    }\n    else if ( options === undefined ) {\n        options = {};\n    }\n\n    method = options.type || this.attr2('method');\n    action = options.url  || this.attr2('action');\n\n    url = (typeof action === 'string') ? $.trim(action) : '';\n    url = url || window.location.href || '';\n    if (url) {\n        // clean url (don't include hash vaue)\n        url = (url.match(/^([^#]+)/)||[])[1];\n    }\n\n    options = $.extend(true, {\n        url:  url,\n        success: $.ajaxSettings.success,\n        type: method || $.ajaxSettings.type,\n        iframeSrc: /^https/i.test(window.location.href || '') ? 'javascript:false' : 'about:blank'\n    }, options);\n\n    // hook for manipulating the form data before it is extracted;\n    // convenient for use with rich editors like tinyMCE or FCKEditor\n    var veto = {};\n    this.trigger('form-pre-serialize', [this, options, veto]);\n    if (veto.veto) {\n        log('ajaxSubmit: submit vetoed via form-pre-serialize trigger');\n        return this;\n    }\n\n    // provide opportunity to alter form data before it is serialized\n    if (options.beforeSerialize && options.beforeSerialize(this, options) === false) {\n        log('ajaxSubmit: submit aborted via beforeSerialize callback');\n        return this;\n    }\n\n    var traditional = options.traditional;\n    if ( traditional === undefined ) {\n        traditional = $.ajaxSettings.traditional;\n    }\n\n    var elements = [];\n    var qx, a = this.formToArray(options.semantic, elements);\n    if (options.data) {\n        options.extraData = options.data;\n        qx = $.param(options.data, traditional);\n    }\n\n    // give pre-submit callback an opportunity to abort the submit\n    if (options.beforeSubmit && options.beforeSubmit(a, this, options) === false) {\n        log('ajaxSubmit: submit aborted via beforeSubmit callback');\n        return this;\n    }\n\n    // fire vetoable 'validate' event\n    this.trigger('form-submit-validate', [a, this, options, veto]);\n    if (veto.veto) {\n        log('ajaxSubmit: submit vetoed via form-submit-validate trigger');\n        return this;\n    }\n\n    var q = $.param(a, traditional);\n    if (qx) {\n        q = ( q ? (q + '&' + qx) : qx );\n    }\n    if (options.type.toUpperCase() == 'GET') {\n        options.url += (options.url.indexOf('?') >= 0 ? '&' : '?') + q;\n        options.data = null;  // data is null for 'get'\n    }\n    else {\n        options.data = q; // data is the query string for 'post'\n    }\n\n    var callbacks = [];\n    if (options.resetForm) {\n        callbacks.push(function() { $form.resetForm(); });\n    }\n    if (options.clearForm) {\n        callbacks.push(function() { $form.clearForm(options.includeHidden); });\n    }\n\n    // perform a load on the target only if dataType is not provided\n    if (!options.dataType && options.target) {\n        var oldSuccess = options.success || function(){};\n        callbacks.push(function(data) {\n            var fn = options.replaceTarget ? 'replaceWith' : 'html';\n            $(options.target)[fn](data).each(oldSuccess, arguments);\n        });\n    }\n    else if (options.success) {\n        callbacks.push(options.success);\n    }\n\n    options.success = function(data, status, xhr) { // jQuery 1.4+ passes xhr as 3rd arg\n        var context = options.context || this ;    // jQuery 1.4+ supports scope context\n        for (var i=0, max=callbacks.length; i < max; i++) {\n            callbacks[i].apply(context, [data, status, xhr || $form, $form]);\n        }\n    };\n\n    if (options.error) {\n        var oldError = options.error;\n        options.error = function(xhr, status, error) {\n            var context = options.context || this;\n            oldError.apply(context, [xhr, status, error, $form]);\n        };\n    }\n\n     if (options.complete) {\n        var oldComplete = options.complete;\n        options.complete = function(xhr, status) {\n            var context = options.context || this;\n            oldComplete.apply(context, [xhr, status, $form]);\n        };\n    }\n\n    // are there files to upload?\n\n    // [value] (issue #113), also see comment:\n    // https://github.com/malsup/form/commit/588306aedba1de01388032d5f42a60159eea9228#commitcomment-2180219\n    var fileInputs = $('input[type=file]:enabled', this).filter(function() { return $(this).val() !== ''; });\n\n    var hasFileInputs = fileInputs.length > 0;\n    var mp = 'multipart/form-data';\n    var multipart = ($form.attr('enctype') == mp || $form.attr('encoding') == mp);\n\n    var fileAPI = feature.fileapi && feature.formdata;\n    log(\"fileAPI :\" + fileAPI);\n    var shouldUseFrame = (hasFileInputs || multipart) && !fileAPI;\n\n    var jqxhr;\n\n    // options.iframe allows user to force iframe mode\n    // 06-NOV-09: now defaulting to iframe mode if file input is detected\n    if (options.iframe !== false && (options.iframe || shouldUseFrame)) {\n        // hack to fix Safari hang (thanks to Tim Molendijk for this)\n        // see:  http://groups.google.com/group/jquery-dev/browse_thread/thread/36395b7ab510dd5d\n        if (options.closeKeepAlive) {\n            $.get(options.closeKeepAlive, function() {\n                jqxhr = fileUploadIframe(a);\n            });\n        }\n        else {\n            jqxhr = fileUploadIframe(a);\n        }\n    }\n    else if ((hasFileInputs || multipart) && fileAPI) {\n        jqxhr = fileUploadXhr(a);\n    }\n    else {\n        jqxhr = $.ajax(options);\n    }\n\n    $form.removeData('jqxhr').data('jqxhr', jqxhr);\n\n    // clear element array\n    for (var k=0; k < elements.length; k++) {\n        elements[k] = null;\n    }\n\n    // fire 'notify' event\n    this.trigger('form-submit-notify', [this, options]);\n    return this;\n\n    // utility fn for deep serialization\n    function deepSerialize(extraData){\n        var serialized = $.param(extraData, options.traditional).split('&');\n        var len = serialized.length;\n        var result = [];\n        var i, part;\n        for (i=0; i < len; i++) {\n            // #252; undo param space replacement\n            serialized[i] = serialized[i].replace(/\\+/g,' ');\n            part = serialized[i].split('=');\n            // #278; use array instead of object storage, favoring array serializations\n            result.push([decodeURIComponent(part[0]), decodeURIComponent(part[1])]);\n        }\n        return result;\n    }\n\n     // XMLHttpRequest Level 2 file uploads (big hat tip to francois2metz)\n    function fileUploadXhr(a) {\n        var formdata = new FormData();\n\n        for (var i=0; i < a.length; i++) {\n            formdata.append(a[i].name, a[i].value);\n        }\n\n        if (options.extraData) {\n            var serializedData = deepSerialize(options.extraData);\n            for (i=0; i < serializedData.length; i++) {\n                if (serializedData[i]) {\n                    formdata.append(serializedData[i][0], serializedData[i][1]);\n                }\n            }\n        }\n\n        options.data = null;\n\n        var s = $.extend(true, {}, $.ajaxSettings, options, {\n            contentType: false,\n            processData: false,\n            cache: false,\n            type: method || 'POST'\n        });\n\n        if (options.uploadProgress) {\n            // workaround because jqXHR does not expose upload property\n            s.xhr = function() {\n                var xhr = $.ajaxSettings.xhr();\n                if (xhr.upload) {\n                    xhr.upload.addEventListener('progress', function(event) {\n                        var percent = 0;\n                        var position = event.loaded || event.position; /*event.position is deprecated*/\n                        var total = event.total;\n                        if (event.lengthComputable) {\n                            percent = Math.ceil(position / total * 100);\n                        }\n                        options.uploadProgress(event, position, total, percent);\n                    }, false);\n                }\n                return xhr;\n            };\n        }\n\n        s.data = null;\n        var beforeSend = s.beforeSend;\n        s.beforeSend = function(xhr, o) {\n            //Send FormData() provided by user\n            if (options.formData) {\n                o.data = options.formData;\n            }\n            else {\n                o.data = formdata;\n            }\n            if(beforeSend) {\n                beforeSend.call(this, xhr, o);\n            }\n        };\n        return $.ajax(s);\n    }\n\n    // private function for handling file uploads (hat tip to YAHOO!)\n    function fileUploadIframe(a) {\n        var form = $form[0], el, i, s, g, id, $io, io, xhr, sub, n, timedOut, timeoutHandle;\n        var deferred = $.Deferred();\n\n        // #341\n        deferred.abort = function(status) {\n            xhr.abort(status);\n        };\n\n        if (a) {\n            // ensure that every serialized input is still enabled\n            for (i=0; i < elements.length; i++) {\n                el = $(elements[i]);\n                if ( hasProp ) {\n                    el.prop('disabled', false);\n                }\n                else {\n                    el.removeAttr('disabled');\n                }\n            }\n        }\n\n        s = $.extend(true, {}, $.ajaxSettings, options);\n        s.context = s.context || s;\n        id = 'jqFormIO' + (new Date().getTime());\n        if (s.iframeTarget) {\n            $io = $(s.iframeTarget);\n            n = $io.attr2('name');\n            if (!n) {\n                $io.attr2('name', id);\n            }\n            else {\n                id = n;\n            }\n        }\n        else {\n            $io = $('<iframe name=\"' + id + '\" src=\"'+ s.iframeSrc +'\" />');\n            $io.css({ position: 'absolute', top: '-1000px', left: '-1000px' });\n        }\n        io = $io[0];\n\n\n        xhr = { // mock object\n            aborted: 0,\n            responseText: null,\n            responseXML: null,\n            status: 0,\n            statusText: 'n/a',\n            getAllResponseHeaders: function() {},\n            getResponseHeader: function() {},\n            setRequestHeader: function() {},\n            abort: function(status) {\n                var e = (status === 'timeout' ? 'timeout' : 'aborted');\n                log('aborting upload... ' + e);\n                this.aborted = 1;\n\n                try { // #214, #257\n                    if (io.contentWindow.document.execCommand) {\n                        io.contentWindow.document.execCommand('Stop');\n                    }\n                }\n                catch(ignore) {}\n\n                $io.attr('src', s.iframeSrc); // abort op in progress\n                xhr.error = e;\n                if (s.error) {\n                    s.error.call(s.context, xhr, e, status);\n                }\n                if (g) {\n                    $.event.trigger(\"ajaxError\", [xhr, s, e]);\n                }\n                if (s.complete) {\n                    s.complete.call(s.context, xhr, e);\n                }\n            }\n        };\n\n        g = s.global;\n        // trigger ajax global events so that activity/block indicators work like normal\n        if (g && 0 === $.active++) {\n            $.event.trigger(\"ajaxStart\");\n        }\n        if (g) {\n            $.event.trigger(\"ajaxSend\", [xhr, s]);\n        }\n\n        if (s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false) {\n            if (s.global) {\n                $.active--;\n            }\n            deferred.reject();\n            return deferred;\n        }\n        if (xhr.aborted) {\n            deferred.reject();\n            return deferred;\n        }\n\n        // add submitting element to data if we know it\n        sub = form.clk;\n        if (sub) {\n            n = sub.name;\n            if (n && !sub.disabled) {\n                s.extraData = s.extraData || {};\n                s.extraData[n] = sub.value;\n                if (sub.type == \"image\") {\n                    s.extraData[n+'.x'] = form.clk_x;\n                    s.extraData[n+'.y'] = form.clk_y;\n                }\n            }\n        }\n\n        var CLIENT_TIMEOUT_ABORT = 1;\n        var SERVER_ABORT = 2;\n                \n        function getDoc(frame) {\n            /* it looks like contentWindow or contentDocument do not\n             * carry the protocol property in ie8, when running under ssl\n             * frame.document is the only valid response document, since\n             * the protocol is know but not on the other two objects. strange?\n             * \"Same origin policy\" http://en.wikipedia.org/wiki/Same_origin_policy\n             */\n            \n            var doc = null;\n            \n            // IE8 cascading access check\n            try {\n                if (frame.contentWindow) {\n                    doc = frame.contentWindow.document;\n                }\n            } catch(err) {\n                // IE8 access denied under ssl & missing protocol\n                log('cannot get iframe.contentWindow document: ' + err);\n            }\n\n            if (doc) { // successful getting content\n                return doc;\n            }\n\n            try { // simply checking may throw in ie8 under ssl or mismatched protocol\n                doc = frame.contentDocument ? frame.contentDocument : frame.document;\n            } catch(err) {\n                // last attempt\n                log('cannot get iframe.contentDocument: ' + err);\n                doc = frame.document;\n            }\n            return doc;\n        }\n\n        // Rails CSRF hack (thanks to Yvan Barthelemy)\n        var csrf_token = $('meta[name=csrf-token]').attr('content');\n        var csrf_param = $('meta[name=csrf-param]').attr('content');\n        if (csrf_param && csrf_token) {\n            s.extraData = s.extraData || {};\n            s.extraData[csrf_param] = csrf_token;\n        }\n\n        // take a breath so that pending repaints get some cpu time before the upload starts\n        function doSubmit() {\n            // make sure form attrs are set\n            var t = $form.attr2('target'), \n                a = $form.attr2('action'), \n                mp = 'multipart/form-data',\n                et = $form.attr('enctype') || $form.attr('encoding') || mp;\n\n            // update form attrs in IE friendly way\n            form.setAttribute('target',id);\n            if (!method || /post/i.test(method) ) {\n                form.setAttribute('method', 'POST');\n            }\n            if (a != s.url) {\n                form.setAttribute('action', s.url);\n            }\n\n            // ie borks in some cases when setting encoding\n            if (! s.skipEncodingOverride && (!method || /post/i.test(method))) {\n                $form.attr({\n                    encoding: 'multipart/form-data',\n                    enctype:  'multipart/form-data'\n                });\n            }\n\n            // support timout\n            if (s.timeout) {\n                timeoutHandle = setTimeout(function() { timedOut = true; cb(CLIENT_TIMEOUT_ABORT); }, s.timeout);\n            }\n\n            // look for server aborts\n            function checkState() {\n                try {\n                    var state = getDoc(io).readyState;\n                    log('state = ' + state);\n                    if (state && state.toLowerCase() == 'uninitialized') {\n                        setTimeout(checkState,50);\n                    }\n                }\n                catch(e) {\n                    log('Server abort: ' , e, ' (', e.name, ')');\n                    cb(SERVER_ABORT);\n                    if (timeoutHandle) {\n                        clearTimeout(timeoutHandle);\n                    }\n                    timeoutHandle = undefined;\n                }\n            }\n\n            // add \"extra\" data to form if provided in options\n            var extraInputs = [];\n            try {\n                if (s.extraData) {\n                    for (var n in s.extraData) {\n                        if (s.extraData.hasOwnProperty(n)) {\n                           // if using the $.param format that allows for multiple values with the same name\n                           if($.isPlainObject(s.extraData[n]) && s.extraData[n].hasOwnProperty('name') && s.extraData[n].hasOwnProperty('value')) {\n                               extraInputs.push(\n                               $('<input type=\"hidden\" name=\"'+s.extraData[n].name+'\">').val(s.extraData[n].value)\n                                   .appendTo(form)[0]);\n                           } else {\n                               extraInputs.push(\n                               $('<input type=\"hidden\" name=\"'+n+'\">').val(s.extraData[n])\n                                   .appendTo(form)[0]);\n                           }\n                        }\n                    }\n                }\n\n                if (!s.iframeTarget) {\n                    // add iframe to doc and submit the form\n                    $io.appendTo('body');\n                }\n                if (io.attachEvent) {\n                    io.attachEvent('onload', cb);\n                }\n                else {\n                    io.addEventListener('load', cb, false);\n                }\n                setTimeout(checkState,15);\n\n                try {\n                    form.submit();\n                } catch(err) {\n                    // just in case form has element with name/id of 'submit'\n                    var submitFn = document.createElement('form').submit;\n                    submitFn.apply(form);\n                }\n            }\n            finally {\n                // reset attrs and remove \"extra\" input elements\n                form.setAttribute('action',a);\n                form.setAttribute('enctype', et); // #380\n                if(t) {\n                    form.setAttribute('target', t);\n                } else {\n                    $form.removeAttr('target');\n                }\n                $(extraInputs).remove();\n            }\n        }\n\n        if (s.forceSync) {\n            doSubmit();\n        }\n        else {\n            setTimeout(doSubmit, 10); // this lets dom updates render\n        }\n\n        var data, doc, domCheckCount = 50, callbackProcessed;\n\n        function cb(e) {\n            if (xhr.aborted || callbackProcessed) {\n                return;\n            }\n            \n            doc = getDoc(io);\n            if(!doc) {\n                log('cannot access response document');\n                e = SERVER_ABORT;\n            }\n            if (e === CLIENT_TIMEOUT_ABORT && xhr) {\n                xhr.abort('timeout');\n                deferred.reject(xhr, 'timeout');\n                return;\n            }\n            else if (e == SERVER_ABORT && xhr) {\n                xhr.abort('server abort');\n                deferred.reject(xhr, 'error', 'server abort');\n                return;\n            }\n\n            if (!doc || doc.location.href == s.iframeSrc) {\n                // response not received yet\n                if (!timedOut) {\n                    return;\n                }\n            }\n            if (io.detachEvent) {\n                io.detachEvent('onload', cb);\n            }\n            else {\n                io.removeEventListener('load', cb, false);\n            }\n\n            var status = 'success', errMsg;\n            try {\n                if (timedOut) {\n                    throw 'timeout';\n                }\n\n                var isXml = s.dataType == 'xml' || doc.XMLDocument || $.isXMLDoc(doc);\n                log('isXml='+isXml);\n                if (!isXml && window.opera && (doc.body === null || !doc.body.innerHTML)) {\n                    if (--domCheckCount) {\n                        // in some browsers (Opera) the iframe DOM is not always traversable when\n                        // the onload callback fires, so we loop a bit to accommodate\n                        log('requeing onLoad callback, DOM not available');\n                        setTimeout(cb, 250);\n                        return;\n                    }\n                    // let this fall through because server response could be an empty document\n                    //log('Could not access iframe DOM after mutiple tries.');\n                    //throw 'DOMException: not available';\n                }\n\n                //log('response detected');\n                var docRoot = doc.body ? doc.body : doc.documentElement;\n                xhr.responseText = docRoot ? docRoot.innerHTML : null;\n                xhr.responseXML = doc.XMLDocument ? doc.XMLDocument : doc;\n                if (isXml) {\n                    s.dataType = 'xml';\n                }\n                xhr.getResponseHeader = function(header){\n                    var headers = {'content-type': s.dataType};\n                    return headers[header.toLowerCase()];\n                };\n                // support for XHR 'status' & 'statusText' emulation :\n                if (docRoot) {\n                    xhr.status = Number( docRoot.getAttribute('status') ) || xhr.status;\n                    xhr.statusText = docRoot.getAttribute('statusText') || xhr.statusText;\n                }\n\n                var dt = (s.dataType || '').toLowerCase();\n                var scr = /(json|script|text)/.test(dt);\n                if (scr || s.textarea) {\n                    // see if user embedded response in textarea\n                    var ta = doc.getElementsByTagName('textarea')[0];\n                    if (ta) {\n                        xhr.responseText = ta.value;\n                        // support for XHR 'status' & 'statusText' emulation :\n                        xhr.status = Number( ta.getAttribute('status') ) || xhr.status;\n                        xhr.statusText = ta.getAttribute('statusText') || xhr.statusText;\n                    }\n                    else if (scr) {\n                        // account for browsers injecting pre around json response\n                        var pre = doc.getElementsByTagName('pre')[0];\n                        var b = doc.getElementsByTagName('body')[0];\n                        if (pre) {\n                            xhr.responseText = pre.textContent ? pre.textContent : pre.innerText;\n                        }\n                        else if (b) {\n                            xhr.responseText = b.textContent ? b.textContent : b.innerText;\n                        }\n                    }\n                }\n                else if (dt == 'xml' && !xhr.responseXML && xhr.responseText) {\n                    xhr.responseXML = toXml(xhr.responseText);\n                }\n\n                try {\n                    data = httpData(xhr, dt, s);\n                }\n                catch (err) {\n                    status = 'parsererror';\n                    xhr.error = errMsg = (err || status);\n                }\n            }\n            catch (err) {\n                log('error caught: ',err);\n                status = 'error';\n                xhr.error = errMsg = (err || status);\n            }\n\n            if (xhr.aborted) {\n                log('upload aborted');\n                status = null;\n            }\n\n            if (xhr.status) { // we've set xhr.status\n                status = (xhr.status >= 200 && xhr.status < 300 || xhr.status === 304) ? 'success' : 'error';\n            }\n\n            // ordering of these callbacks/triggers is odd, but that's how $.ajax does it\n            if (status === 'success') {\n                if (s.success) {\n                    s.success.call(s.context, data, 'success', xhr);\n                }\n                deferred.resolve(xhr.responseText, 'success', xhr);\n                if (g) {\n                    $.event.trigger(\"ajaxSuccess\", [xhr, s]);\n                }\n            }\n            else if (status) {\n                if (errMsg === undefined) {\n                    errMsg = xhr.statusText;\n                }\n                if (s.error) {\n                    s.error.call(s.context, xhr, status, errMsg);\n                }\n                deferred.reject(xhr, 'error', errMsg);\n                if (g) {\n                    $.event.trigger(\"ajaxError\", [xhr, s, errMsg]);\n                }\n            }\n\n            if (g) {\n                $.event.trigger(\"ajaxComplete\", [xhr, s]);\n            }\n\n            if (g && ! --$.active) {\n                $.event.trigger(\"ajaxStop\");\n            }\n\n            if (s.complete) {\n                s.complete.call(s.context, xhr, status);\n            }\n\n            callbackProcessed = true;\n            if (s.timeout) {\n                clearTimeout(timeoutHandle);\n            }\n\n            // clean up\n            setTimeout(function() {\n                if (!s.iframeTarget) {\n                    $io.remove();\n                }\n                else { //adding else to clean up existing iframe response.\n                    $io.attr('src', s.iframeSrc);\n                }\n                xhr.responseXML = null;\n            }, 100);\n        }\n\n        var toXml = $.parseXML || function(s, doc) { // use parseXML if available (jQuery 1.5+)\n            if (window.ActiveXObject) {\n                doc = new ActiveXObject('Microsoft.XMLDOM');\n                doc.async = 'false';\n                doc.loadXML(s);\n            }\n            else {\n                doc = (new DOMParser()).parseFromString(s, 'text/xml');\n            }\n            return (doc && doc.documentElement && doc.documentElement.nodeName != 'parsererror') ? doc : null;\n        };\n        var parseJSON = $.parseJSON || function(s) {\n            /*jslint evil:true */\n            return window['eval']('(' + s + ')');\n        };\n\n        var httpData = function( xhr, type, s ) { // mostly lifted from jq1.4.4\n\n            var ct = xhr.getResponseHeader('content-type') || '',\n                xml = type === 'xml' || !type && ct.indexOf('xml') >= 0,\n                data = xml ? xhr.responseXML : xhr.responseText;\n\n            if (xml && data.documentElement.nodeName === 'parsererror') {\n                if ($.error) {\n                    $.error('parsererror');\n                }\n            }\n            if (s && s.dataFilter) {\n                data = s.dataFilter(data, type);\n            }\n            if (typeof data === 'string') {\n                if (type === 'json' || !type && ct.indexOf('json') >= 0) {\n                    data = parseJSON(data);\n                } else if (type === \"script\" || !type && ct.indexOf(\"javascript\") >= 0) {\n                    $.globalEval(data);\n                }\n            }\n            return data;\n        };\n\n        return deferred;\n    }\n};\n\n/**\n * ajaxForm() provides a mechanism for fully automating form submission.\n *\n * The advantages of using this method instead of ajaxSubmit() are:\n *\n * 1: This method will include coordinates for <input type=\"image\" /> elements (if the element\n *    is used to submit the form).\n * 2. This method will include the submit element's name/value data (for the element that was\n *    used to submit the form).\n * 3. This method binds the submit() method to the form for you.\n *\n * The options argument for ajaxForm works exactly as it does for ajaxSubmit.  ajaxForm merely\n * passes the options argument along after properly binding events for submit elements and\n * the form itself.\n */\n$.fn.ajaxForm = function(options) {\n    options = options || {};\n    options.delegation = options.delegation && $.isFunction($.fn.on);\n\n    // in jQuery 1.3+ we can fix mistakes with the ready state\n    if (!options.delegation && this.length === 0) {\n        var o = { s: this.selector, c: this.context };\n        if (!$.isReady && o.s) {\n            log('DOM not ready, queuing ajaxForm');\n            $(function() {\n                $(o.s,o.c).ajaxForm(options);\n            });\n            return this;\n        }\n        // is your DOM ready?  http://docs.jquery.com/Tutorials:Introducing_$(document).ready()\n        log('terminating; zero elements found by selector' + ($.isReady ? '' : ' (DOM not ready)'));\n        return this;\n    }\n\n    if ( options.delegation ) {\n        $(document)\n            .off('submit.form-plugin', this.selector, doAjaxSubmit)\n            .off('click.form-plugin', this.selector, captureSubmittingElement)\n            .on('submit.form-plugin', this.selector, options, doAjaxSubmit)\n            .on('click.form-plugin', this.selector, options, captureSubmittingElement);\n        return this;\n    }\n\n    return this.ajaxFormUnbind()\n        .bind('submit.form-plugin', options, doAjaxSubmit)\n        .bind('click.form-plugin', options, captureSubmittingElement);\n};\n\n// private event handlers\nfunction doAjaxSubmit(e) {\n    /*jshint validthis:true */\n    var options = e.data;\n    if (!e.isDefaultPrevented()) { // if event has been canceled, don't proceed\n        e.preventDefault();\n        $(e.target).ajaxSubmit(options); // #365\n    }\n}\n\nfunction captureSubmittingElement(e) {\n    /*jshint validthis:true */\n    var target = e.target;\n    var $el = $(target);\n    if (!($el.is(\"[type=submit],[type=image]\"))) {\n        // is this a child element of the submit el?  (ex: a span within a button)\n        var t = $el.closest('[type=submit]');\n        if (t.length === 0) {\n            return;\n        }\n        target = t[0];\n    }\n    var form = this;\n    form.clk = target;\n    if (target.type == 'image') {\n        if (e.offsetX !== undefined) {\n            form.clk_x = e.offsetX;\n            form.clk_y = e.offsetY;\n        } else if (typeof $.fn.offset == 'function') {\n            var offset = $el.offset();\n            form.clk_x = e.pageX - offset.left;\n            form.clk_y = e.pageY - offset.top;\n        } else {\n            form.clk_x = e.pageX - target.offsetLeft;\n            form.clk_y = e.pageY - target.offsetTop;\n        }\n    }\n    // clear form vars\n    setTimeout(function() { form.clk = form.clk_x = form.clk_y = null; }, 100);\n}\n\n\n// ajaxFormUnbind unbinds the event handlers that were bound by ajaxForm\n$.fn.ajaxFormUnbind = function() {\n    return this.unbind('submit.form-plugin click.form-plugin');\n};\n\n/**\n * formToArray() gathers form element data into an array of objects that can\n * be passed to any of the following ajax functions: $.get, $.post, or load.\n * Each object in the array has both a 'name' and 'value' property.  An example of\n * an array for a simple login form might be:\n *\n * [ { name: 'username', value: 'jresig' }, { name: 'password', value: 'secret' } ]\n *\n * It is this array that is passed to pre-submit callback functions provided to the\n * ajaxSubmit() and ajaxForm() methods.\n */\n$.fn.formToArray = function(semantic, elements) {\n    var a = [];\n    if (this.length === 0) {\n        return a;\n    }\n\n    var form = this[0];\n    var formId = this.attr('id');\n    var els = semantic ? form.getElementsByTagName('*') : form.elements;\n    var els2;\n\n    if (els && !/MSIE [678]/.test(navigator.userAgent)) { // #390\n        els = $(els).get();  // convert to standard array\n    }\n\n    // #386; account for inputs outside the form which use the 'form' attribute\n    if ( formId ) {\n        els2 = $(':input[form=\"' + formId + '\"]').get(); // hat tip @thet\n        if ( els2.length ) {\n            els = (els || []).concat(els2);\n        }\n    }\n\n    if (!els || !els.length) {\n        return a;\n    }\n\n    var i,j,n,v,el,max,jmax;\n    for(i=0, max=els.length; i < max; i++) {\n        el = els[i];\n        n = el.name;\n        if (!n || el.disabled) {\n            continue;\n        }\n\n        if (semantic && form.clk && el.type == \"image\") {\n            // handle image inputs on the fly when semantic == true\n            if(form.clk == el) {\n                a.push({name: n, value: $(el).val(), type: el.type });\n                a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});\n            }\n            continue;\n        }\n\n        v = $.fieldValue(el, true);\n        if (v && v.constructor == Array) {\n            if (elements) {\n                elements.push(el);\n            }\n            for(j=0, jmax=v.length; j < jmax; j++) {\n                a.push({name: n, value: v[j]});\n            }\n        }\n        else if (feature.fileapi && el.type == 'file') {\n            if (elements) {\n                elements.push(el);\n            }\n            var files = el.files;\n            if (files.length) {\n                for (j=0; j < files.length; j++) {\n                    a.push({name: n, value: files[j], type: el.type});\n                }\n            }\n            else {\n                // #180\n                a.push({ name: n, value: '', type: el.type });\n            }\n        }\n        else if (v !== null && typeof v != 'undefined') {\n            if (elements) {\n                elements.push(el);\n            }\n            a.push({name: n, value: v, type: el.type, required: el.required});\n        }\n    }\n\n    if (!semantic && form.clk) {\n        // input type=='image' are not found in elements array! handle it here\n        var $input = $(form.clk), input = $input[0];\n        n = input.name;\n        if (n && !input.disabled && input.type == 'image') {\n            a.push({name: n, value: $input.val()});\n            a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});\n        }\n    }\n    return a;\n};\n\n/**\n * Serializes form data into a 'submittable' string. This method will return a string\n * in the format: name1=value1&amp;name2=value2\n */\n$.fn.formSerialize = function(semantic) {\n    //hand off to jQuery.param for proper encoding\n    return $.param(this.formToArray(semantic));\n};\n\n/**\n * Serializes all field elements in the jQuery object into a query string.\n * This method will return a string in the format: name1=value1&amp;name2=value2\n */\n$.fn.fieldSerialize = function(successful) {\n    var a = [];\n    this.each(function() {\n        var n = this.name;\n        if (!n) {\n            return;\n        }\n        var v = $.fieldValue(this, successful);\n        if (v && v.constructor == Array) {\n            for (var i=0,max=v.length; i < max; i++) {\n                a.push({name: n, value: v[i]});\n            }\n        }\n        else if (v !== null && typeof v != 'undefined') {\n            a.push({name: this.name, value: v});\n        }\n    });\n    //hand off to jQuery.param for proper encoding\n    return $.param(a);\n};\n\n/**\n * Returns the value(s) of the element in the matched set.  For example, consider the following form:\n *\n *  <form><fieldset>\n *      <input name=\"A\" type=\"text\" />\n *      <input name=\"A\" type=\"text\" />\n *      <input name=\"B\" type=\"checkbox\" value=\"B1\" />\n *      <input name=\"B\" type=\"checkbox\" value=\"B2\"/>\n *      <input name=\"C\" type=\"radio\" value=\"C1\" />\n *      <input name=\"C\" type=\"radio\" value=\"C2\" />\n *  </fieldset></form>\n *\n *  var v = $('input[type=text]').fieldValue();\n *  // if no values are entered into the text inputs\n *  v == ['','']\n *  // if values entered into the text inputs are 'foo' and 'bar'\n *  v == ['foo','bar']\n *\n *  var v = $('input[type=checkbox]').fieldValue();\n *  // if neither checkbox is checked\n *  v === undefined\n *  // if both checkboxes are checked\n *  v == ['B1', 'B2']\n *\n *  var v = $('input[type=radio]').fieldValue();\n *  // if neither radio is checked\n *  v === undefined\n *  // if first radio is checked\n *  v == ['C1']\n *\n * The successful argument controls whether or not the field element must be 'successful'\n * (per http://www.w3.org/TR/html4/interact/forms.html#successful-controls).\n * The default value of the successful argument is true.  If this value is false the value(s)\n * for each element is returned.\n *\n * Note: This method *always* returns an array.  If no valid value can be determined the\n *    array will be empty, otherwise it will contain one or more values.\n */\n$.fn.fieldValue = function(successful) {\n    for (var val=[], i=0, max=this.length; i < max; i++) {\n        var el = this[i];\n        var v = $.fieldValue(el, successful);\n        if (v === null || typeof v == 'undefined' || (v.constructor == Array && !v.length)) {\n            continue;\n        }\n        if (v.constructor == Array) {\n            $.merge(val, v);\n        }\n        else {\n            val.push(v);\n        }\n    }\n    return val;\n};\n\n/**\n * Returns the value of the field element.\n */\n$.fieldValue = function(el, successful) {\n    var n = el.name, t = el.type, tag = el.tagName.toLowerCase();\n    if (successful === undefined) {\n        successful = true;\n    }\n\n    if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||\n        (t == 'checkbox' || t == 'radio') && !el.checked ||\n        (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||\n        tag == 'select' && el.selectedIndex == -1)) {\n            return null;\n    }\n\n    if (tag == 'select') {\n        var index = el.selectedIndex;\n        if (index < 0) {\n            return null;\n        }\n        var a = [], ops = el.options;\n        var one = (t == 'select-one');\n        var max = (one ? index+1 : ops.length);\n        for(var i=(one ? index : 0); i < max; i++) {\n            var op = ops[i];\n            if (op.selected) {\n                var v = op.value;\n                if (!v) { // extra pain for IE...\n                    v = (op.attributes && op.attributes.value && !(op.attributes.value.specified)) ? op.text : op.value;\n                }\n                if (one) {\n                    return v;\n                }\n                a.push(v);\n            }\n        }\n        return a;\n    }\n    return $(el).val();\n};\n\n/**\n * Clears the form data.  Takes the following actions on the form's input fields:\n *  - input text fields will have their 'value' property set to the empty string\n *  - select elements will have their 'selectedIndex' property set to -1\n *  - checkbox and radio inputs will have their 'checked' property set to false\n *  - inputs of type submit, button, reset, and hidden will *not* be effected\n *  - button elements will *not* be effected\n */\n$.fn.clearForm = function(includeHidden) {\n    return this.each(function() {\n        $('input,select,textarea', this).clearFields(includeHidden);\n    });\n};\n\n/**\n * Clears the selected form elements.\n */\n$.fn.clearFields = $.fn.clearInputs = function(includeHidden) {\n    var re = /^(?:color|date|datetime|email|month|number|password|range|search|tel|text|time|url|week)$/i; // 'hidden' is not in this list\n    return this.each(function() {\n        var t = this.type, tag = this.tagName.toLowerCase();\n        if (re.test(t) || tag == 'textarea') {\n            this.value = '';\n        }\n        else if (t == 'checkbox' || t == 'radio') {\n            this.checked = false;\n        }\n        else if (tag == 'select') {\n            this.selectedIndex = -1;\n        }\n        else if (t == \"file\") {\n            if (/MSIE/.test(navigator.userAgent)) {\n                $(this).replaceWith($(this).clone(true));\n            } else {\n                $(this).val('');\n            }\n        }\n        else if (includeHidden) {\n            // includeHidden can be the value true, or it can be a selector string\n            // indicating a special test; for example:\n            //  $('#myForm').clearForm('.special:hidden')\n            // the above would clean hidden inputs that have the class of 'special'\n            if ( (includeHidden === true && /hidden/.test(t)) ||\n                 (typeof includeHidden == 'string' && $(this).is(includeHidden)) ) {\n                this.value = '';\n            }\n        }\n    });\n};\n\n/**\n * Resets the form data.  Causes all form elements to be reset to their original value.\n */\n$.fn.resetForm = function() {\n    return this.each(function() {\n        // guard against an input with the name of 'reset'\n        // note that IE reports the reset function as an 'object'\n        if (typeof this.reset == 'function' || (typeof this.reset == 'object' && !this.reset.nodeType)) {\n            this.reset();\n        }\n    });\n};\n\n/**\n * Enables or disables any matching elements.\n */\n$.fn.enable = function(b) {\n    if (b === undefined) {\n        b = true;\n    }\n    return this.each(function() {\n        this.disabled = !b;\n    });\n};\n\n/**\n * Checks/unchecks any matching checkboxes or radio buttons and\n * selects/deselects and matching option elements.\n */\n$.fn.selected = function(select) {\n    if (select === undefined) {\n        select = true;\n    }\n    return this.each(function() {\n        var t = this.type;\n        if (t == 'checkbox' || t == 'radio') {\n            this.checked = select;\n        }\n        else if (this.tagName.toLowerCase() == 'option') {\n            var $sel = $(this).parent('select');\n            if (select && $sel[0] && $sel[0].type == 'select-one') {\n                // deselect all other options\n                $sel.find('option').selected(false);\n            }\n            this.selected = select;\n        }\n    });\n};\n\n// expose debug var\n$.fn.ajaxSubmit.debug = false;\n\n// helper fn for console logging\nfunction log() {\n    if (!$.fn.ajaxSubmit.debug) {\n        return;\n    }\n    var msg = '[jquery.form] ' + Array.prototype.join.call(arguments,'');\n    if (window.console && window.console.log) {\n        window.console.log(msg);\n    }\n    else if (window.opera && window.opera.postError) {\n        window.opera.postError(msg);\n    }\n}\n\n}));\n"
  },
  {
    "path": "public/assets/dashboard/js/layer/extend/layer.ext.js",
    "content": "/*! layer弹层组件拓展类 */"
  },
  {
    "path": "public/assets/dashboard/js/layer/layer.js",
    "content": "/*! layer-v2.4 弹层组件 License LGPL  http://layer.layui.com/ By 贤心 */\n;!function(a,b){\"use strict\";var c,d,e={getPath:function(){var a=document.scripts,b=a[a.length-1],c=b.src;if(!b.getAttribute(\"merge\"))return c.substring(0,c.lastIndexOf(\"/\")+1)}(),enter:function(a){13===a.keyCode&&a.preventDefault()},config:{},end:{},btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],type:[\"dialog\",\"page\",\"iframe\",\"loading\",\"tips\"]},f={v:\"2.4\",ie6:!!a.ActiveXObject&&!a.XMLHttpRequest,index:0,path:e.getPath,config:function(a,b){var d=0;return a=a||{},f.cache=e.config=c.extend(e.config,a),f.path=e.config.path||f.path,\"string\"==typeof a.extend&&(a.extend=[a.extend]),f.use(\"skin/layer.css\",a.extend&&a.extend.length>0?function g(){var c=a.extend;f.use(c[c[d]?d:d-1],d<c.length?function(){return++d,g}():b)}():b),this},use:function(a,b,d){var e=c(\"head\")[0],a=a.replace(/\\s/g,\"\"),g=/\\.css$/.test(a),h=document.createElement(g?\"link\":\"script\"),i=\"layui_layer_\"+a.replace(/\\.|\\//g,\"\");return f.path?(g&&(h.rel=\"stylesheet\"),h[g?\"href\":\"src\"]=/^http:\\/\\//.test(a)?a:f.path+a,h.id=i,c(\"#\"+i)[0]||e.appendChild(h),function j(){(g?1989===parseInt(c(\"#\"+i).css(\"width\")):f[d||i])?function(){b&&b();try{g||e.removeChild(h)}catch(a){}}():setTimeout(j,100)}(),this):void 0},ready:function(a,b){var d=\"function\"==typeof a;return d&&(b=a),f.config(c.extend(e.config,function(){return d?{}:{path:a}}()),b),this},alert:function(a,b,d){var e=\"function\"==typeof b;return e&&(d=b),f.open(c.extend({content:a,yes:d},e?{}:b))},confirm:function(a,b,d,g){var h=\"function\"==typeof b;return h&&(g=d,d=b),f.open(c.extend({content:a,btn:e.btn,yes:d,btn2:g},h?{}:b))},msg:function(a,d,g){var i=\"function\"==typeof d,j=e.config.skin,k=(j?j+\" \"+j+\"-msg\":\"\")||\"layui-layer-msg\",l=h.anim.length-1;return i&&(g=d),f.open(c.extend({content:a,time:3e3,shade:!1,skin:k,title:!1,closeBtn:!1,btn:!1,end:g},i&&!e.config.skin?{skin:k+\" layui-layer-hui\",shift:l}:function(){return d=d||{},(-1===d.icon||d.icon===b&&!e.config.skin)&&(d.skin=k+\" \"+(d.skin||\"layui-layer-hui\")),d}()))},load:function(a,b){return f.open(c.extend({type:3,icon:a||0,shade:.01},b))},tips:function(a,b,d){return f.open(c.extend({type:4,content:[a,b],closeBtn:!1,time:3e3,shade:!1,fix:!1,maxWidth:210},d))}},g=function(a){var b=this;b.index=++f.index,b.config=c.extend({},b.config,e.config,a),b.creat()};g.pt=g.prototype;var h=[\"layui-layer\",\".layui-layer-title\",\".layui-layer-main\",\".layui-layer-dialog\",\"layui-layer-iframe\",\"layui-layer-content\",\"layui-layer-btn\",\"layui-layer-close\"];h.anim=[\"layer-anim\",\"layer-anim-01\",\"layer-anim-02\",\"layer-anim-03\",\"layer-anim-04\",\"layer-anim-05\",\"layer-anim-06\"],g.pt.config={type:0,shade:.3,fix:!0,move:h[1],title:\"&#x4FE1;&#x606F;\",offset:\"auto\",area:\"auto\",closeBtn:1,time:0,zIndex:19891014,maxWidth:360,shift:0,icon:-1,scrollbar:!0,tips:2},g.pt.vessel=function(a,b){var c=this,d=c.index,f=c.config,g=f.zIndex+d,i=\"object\"==typeof f.title,j=f.maxmin&&(1===f.type||2===f.type),k=f.title?'<div class=\"layui-layer-title\" style=\"'+(i?f.title[1]:\"\")+'\">'+(i?f.title[0]:f.title)+\"</div>\":\"\";return f.zIndex=g,b([f.shade?'<div class=\"layui-layer-shade\" id=\"layui-layer-shade'+d+'\" times=\"'+d+'\" style=\"'+(\"z-index:\"+(g-1)+\"; background-color:\"+(f.shade[1]||\"#000\")+\"; opacity:\"+(f.shade[0]||f.shade)+\"; filter:alpha(opacity=\"+(100*f.shade[0]||100*f.shade)+\");\")+'\"></div>':\"\",'<div class=\"'+h[0]+(\" layui-layer-\"+e.type[f.type])+(0!=f.type&&2!=f.type||f.shade?\"\":\" layui-layer-border\")+\" \"+(f.skin||\"\")+'\" id=\"'+h[0]+d+'\" type=\"'+e.type[f.type]+'\" times=\"'+d+'\" showtime=\"'+f.time+'\" conType=\"'+(a?\"object\":\"string\")+'\" style=\"z-index: '+g+\"; width:\"+f.area[0]+\";height:\"+f.area[1]+(f.fix?\"\":\";position:absolute;\")+'\">'+(a&&2!=f.type?\"\":k)+'<div id=\"'+(f.id||\"\")+'\" class=\"layui-layer-content'+(0==f.type&&-1!==f.icon?\" layui-layer-padding\":\"\")+(3==f.type?\" layui-layer-loading\"+f.icon:\"\")+'\">'+(0==f.type&&-1!==f.icon?'<i class=\"layui-layer-ico layui-layer-ico'+f.icon+'\"></i>':\"\")+(1==f.type&&a?\"\":f.content||\"\")+'</div><span class=\"layui-layer-setwin\">'+function(){var a=j?'<a class=\"layui-layer-min\" href=\"javascript:;\"><cite></cite></a><a class=\"layui-layer-ico layui-layer-max\" href=\"javascript:;\"></a>':\"\";return f.closeBtn&&(a+='<a class=\"layui-layer-ico '+h[7]+\" \"+h[7]+(f.title?f.closeBtn:4==f.type?\"1\":\"2\")+'\" href=\"javascript:;\"></a>'),a}()+\"</span>\"+(f.btn?function(){var a=\"\";\"string\"==typeof f.btn&&(f.btn=[f.btn]);for(var b=0,c=f.btn.length;c>b;b++)a+='<a class=\"'+h[6]+b+'\">'+f.btn[b]+\"</a>\";return'<div class=\"'+h[6]+'\">'+a+\"</div>\"}():\"\")+\"</div>\"],k),c},g.pt.creat=function(){var a=this,b=a.config,g=a.index,i=b.content,j=\"object\"==typeof i;if(!c(\"#\"+b.id)[0]){switch(\"string\"==typeof b.area&&(b.area=\"auto\"===b.area?[\"\",\"\"]:[b.area,\"\"]),b.type){case 0:b.btn=\"btn\"in b?b.btn:e.btn[0],f.closeAll(\"dialog\");break;case 2:var i=b.content=j?b.content:[b.content||\"http://layer.layui.com\",\"auto\"];b.content='<iframe scrolling=\"'+(b.content[1]||\"auto\")+'\" allowtransparency=\"true\" id=\"'+h[4]+g+'\" name=\"'+h[4]+g+'\" onload=\"this.className=\\'\\';\" class=\"layui-layer-load\" frameborder=\"0\" src=\"'+b.content[0]+'\"></iframe>';break;case 3:b.title=!1,b.closeBtn=!1,-1===b.icon&&0===b.icon,f.closeAll(\"loading\");break;case 4:j||(b.content=[b.content,\"body\"]),b.follow=b.content[1],b.content=b.content[0]+'<i class=\"layui-layer-TipsG\"></i>',b.title=!1,b.tips=\"object\"==typeof b.tips?b.tips:[b.tips,!0],b.tipsMore||f.closeAll(\"tips\")}a.vessel(j,function(d,e){c(\"body\").append(d[0]),j?function(){2==b.type||4==b.type?function(){c(\"body\").append(d[1])}():function(){i.parents(\".\"+h[0])[0]||(i.show().addClass(\"layui-layer-wrap\").wrap(d[1]),c(\"#\"+h[0]+g).find(\".\"+h[5]).before(e))}()}():c(\"body\").append(d[1]),a.layero=c(\"#\"+h[0]+g),b.scrollbar||h.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",g)}).auto(g),2==b.type&&f.ie6&&a.layero.find(\"iframe\").attr(\"src\",i[0]),c(document).off(\"keydown\",e.enter).on(\"keydown\",e.enter),a.layero.on(\"keydown\",function(a){c(document).off(\"keydown\",e.enter)}),4==b.type?a.tips():a.offset(),b.fix&&d.on(\"resize\",function(){a.offset(),(/^\\d+%$/.test(b.area[0])||/^\\d+%$/.test(b.area[1]))&&a.auto(g),4==b.type&&a.tips()}),b.time<=0||setTimeout(function(){f.close(a.index)},b.time),a.move().callback(),h.anim[b.shift]&&a.layero.addClass(h.anim[b.shift])}},g.pt.auto=function(a){function b(a){a=g.find(a),a.height(i[1]-j-k-2*(0|parseFloat(a.css(\"padding\"))))}var e=this,f=e.config,g=c(\"#\"+h[0]+a);\"\"===f.area[0]&&f.maxWidth>0&&(/MSIE 7/.test(navigator.userAgent)&&f.btn&&g.width(g.innerWidth()),g.outerWidth()>f.maxWidth&&g.width(f.maxWidth));var i=[g.innerWidth(),g.innerHeight()],j=g.find(h[1]).outerHeight()||0,k=g.find(\".\"+h[6]).outerHeight()||0;switch(f.type){case 2:b(\"iframe\");break;default:\"\"===f.area[1]?f.fix&&i[1]>=d.height()&&(i[1]=d.height(),b(\".\"+h[5])):b(\".\"+h[5])}return e},g.pt.offset=function(){var a=this,b=a.config,c=a.layero,e=[c.outerWidth(),c.outerHeight()],f=\"object\"==typeof b.offset;a.offsetTop=(d.height()-e[1])/2,a.offsetLeft=(d.width()-e[0])/2,f?(a.offsetTop=b.offset[0],a.offsetLeft=b.offset[1]||a.offsetLeft):\"auto\"!==b.offset&&(a.offsetTop=b.offset,\"rb\"===b.offset&&(a.offsetTop=d.height()-e[1],a.offsetLeft=d.width()-e[0])),b.fix||(a.offsetTop=/%$/.test(a.offsetTop)?d.height()*parseFloat(a.offsetTop)/100:parseFloat(a.offsetTop),a.offsetLeft=/%$/.test(a.offsetLeft)?d.width()*parseFloat(a.offsetLeft)/100:parseFloat(a.offsetLeft),a.offsetTop+=d.scrollTop(),a.offsetLeft+=d.scrollLeft()),c.css({top:a.offsetTop,left:a.offsetLeft})},g.pt.tips=function(){var a=this,b=a.config,e=a.layero,f=[e.outerWidth(),e.outerHeight()],g=c(b.follow);g[0]||(g=c(\"body\"));var i={width:g.outerWidth(),height:g.outerHeight(),top:g.offset().top,left:g.offset().left},j=e.find(\".layui-layer-TipsG\"),k=b.tips[0];b.tips[1]||j.remove(),i.autoLeft=function(){i.left+f[0]-d.width()>0?(i.tipLeft=i.left+i.width-f[0],j.css({right:12,left:\"auto\"})):i.tipLeft=i.left},i.where=[function(){i.autoLeft(),i.tipTop=i.top-f[1]-10,j.removeClass(\"layui-layer-TipsB\").addClass(\"layui-layer-TipsT\").css(\"border-right-color\",b.tips[1])},function(){i.tipLeft=i.left+i.width+10,i.tipTop=i.top,j.removeClass(\"layui-layer-TipsL\").addClass(\"layui-layer-TipsR\").css(\"border-bottom-color\",b.tips[1])},function(){i.autoLeft(),i.tipTop=i.top+i.height+10,j.removeClass(\"layui-layer-TipsT\").addClass(\"layui-layer-TipsB\").css(\"border-right-color\",b.tips[1])},function(){i.tipLeft=i.left-f[0]-10,i.tipTop=i.top,j.removeClass(\"layui-layer-TipsR\").addClass(\"layui-layer-TipsL\").css(\"border-bottom-color\",b.tips[1])}],i.where[k-1](),1===k?i.top-(d.scrollTop()+f[1]+16)<0&&i.where[2]():2===k?d.width()-(i.left+i.width+f[0]+16)>0||i.where[3]():3===k?i.top-d.scrollTop()+i.height+f[1]+16-d.height()>0&&i.where[0]():4===k&&f[0]+16-i.left>0&&i.where[1](),e.find(\".\"+h[5]).css({\"background-color\":b.tips[1],\"padding-right\":b.closeBtn?\"30px\":\"\"}),e.css({left:i.tipLeft-(b.fix?d.scrollLeft():0),top:i.tipTop-(b.fix?d.scrollTop():0)})},g.pt.move=function(){var a=this,b=a.config,e={setY:0,moveLayer:function(){var a=e.layero,b=parseInt(a.css(\"margin-left\")),c=parseInt(e.move.css(\"left\"));0===b||(c-=b),\"fixed\"!==a.css(\"position\")&&(c-=a.parent().offset().left,e.setY=0),a.css({left:c,top:parseInt(e.move.css(\"top\"))-e.setY})}},f=a.layero.find(b.move);return b.move&&f.attr(\"move\",\"ok\"),f.css({cursor:b.move?\"move\":\"auto\"}),c(b.move).on(\"mousedown\",function(a){if(a.preventDefault(),\"ok\"===c(this).attr(\"move\")){e.ismove=!0,e.layero=c(this).parents(\".\"+h[0]);var f=e.layero.offset().left,g=e.layero.offset().top,i=e.layero.outerWidth()-6,j=e.layero.outerHeight()-6;c(\"#layui-layer-moves\")[0]||c(\"body\").append('<div id=\"layui-layer-moves\" class=\"layui-layer-moves\" style=\"left:'+f+\"px; top:\"+g+\"px; width:\"+i+\"px; height:\"+j+'px; z-index:2147483584\"></div>'),e.move=c(\"#layui-layer-moves\"),b.moveType&&e.move.css({visibility:\"hidden\"}),e.moveX=a.pageX-e.move.position().left,e.moveY=a.pageY-e.move.position().top,\"fixed\"!==e.layero.css(\"position\")||(e.setY=d.scrollTop())}}),c(document).mousemove(function(a){if(e.ismove){var c=a.pageX-e.moveX,f=a.pageY-e.moveY;if(a.preventDefault(),!b.moveOut){e.setY=d.scrollTop();var g=d.width()-e.move.outerWidth(),h=e.setY;0>c&&(c=0),c>g&&(c=g),h>f&&(f=h),f>d.height()-e.move.outerHeight()+e.setY&&(f=d.height()-e.move.outerHeight()+e.setY)}e.move.css({left:c,top:f}),b.moveType&&e.moveLayer(),c=f=g=h=null}}).mouseup(function(){try{e.ismove&&(e.moveLayer(),e.move.remove(),b.moveEnd&&b.moveEnd()),e.ismove=!1}catch(a){e.ismove=!1}}),a},g.pt.callback=function(){function a(){var a=g.cancel&&g.cancel(b.index,d);a===!1||f.close(b.index)}var b=this,d=b.layero,g=b.config;b.openLayer(),g.success&&(2==g.type?d.find(\"iframe\").on(\"load\",function(){g.success(d,b.index)}):g.success(d,b.index)),f.ie6&&b.IE6(d),d.find(\".\"+h[6]).children(\"a\").on(\"click\",function(){var a=c(this).index();if(0===a)g.yes?g.yes(b.index,d):g.btn1?g.btn1(b.index,d):f.close(b.index);else{var e=g[\"btn\"+(a+1)]&&g[\"btn\"+(a+1)](b.index,d);e===!1||f.close(b.index)}}),d.find(\".\"+h[7]).on(\"click\",a),g.shadeClose&&c(\"#layui-layer-shade\"+b.index).on(\"click\",function(){f.close(b.index)}),d.find(\".layui-layer-min\").on(\"click\",function(){var a=g.min&&g.min(d);a===!1||f.min(b.index,g)}),d.find(\".layui-layer-max\").on(\"click\",function(){c(this).hasClass(\"layui-layer-maxmin\")?(f.restore(b.index),g.restore&&g.restore(d)):(f.full(b.index,g),setTimeout(function(){g.full&&g.full(d)},100))}),g.end&&(e.end[b.index]=g.end)},e.reselect=function(){c.each(c(\"select\"),function(a,b){var d=c(this);d.parents(\".\"+h[0])[0]||1==d.attr(\"layer\")&&c(\".\"+h[0]).length<1&&d.removeAttr(\"layer\").show(),d=null})},g.pt.IE6=function(a){function b(){a.css({top:f+(e.config.fix?d.scrollTop():0)})}var e=this,f=a.offset().top;b(),d.scroll(b),c(\"select\").each(function(a,b){var d=c(this);d.parents(\".\"+h[0])[0]||\"none\"===d.css(\"display\")||d.attr({layer:\"1\"}).hide(),d=null})},g.pt.openLayer=function(){var a=this;f.zIndex=a.config.zIndex,f.setTop=function(a){var b=function(){f.zIndex++,a.css(\"z-index\",f.zIndex+1)};return f.zIndex=parseInt(a[0].style.zIndex),a.on(\"mousedown\",b),f.zIndex}},e.record=function(a){var b=[a.width(),a.height(),a.position().top,a.position().left+parseFloat(a.css(\"margin-left\"))];a.find(\".layui-layer-max\").addClass(\"layui-layer-maxmin\"),a.attr({area:b})},e.rescollbar=function(a){h.html.attr(\"layer-full\")==a&&(h.html[0].style.removeProperty?h.html[0].style.removeProperty(\"overflow\"):h.html[0].style.removeAttribute(\"overflow\"),h.html.removeAttr(\"layer-full\"))},a.layer=f,f.getChildFrame=function(a,b){return b=b||c(\".\"+h[4]).attr(\"times\"),c(\"#\"+h[0]+b).find(\"iframe\").contents().find(a)},f.getFrameIndex=function(a){return c(\"#\"+a).parents(\".\"+h[4]).attr(\"times\")},f.iframeAuto=function(a){if(a){var b=f.getChildFrame(\"html\",a).outerHeight(),d=c(\"#\"+h[0]+a),e=d.find(h[1]).outerHeight()||0,g=d.find(\".\"+h[6]).outerHeight()||0;d.css({height:b+e+g}),d.find(\"iframe\").css({height:b})}},f.iframeSrc=function(a,b){c(\"#\"+h[0]+a).find(\"iframe\").attr(\"src\",b)},f.style=function(a,b){var d=c(\"#\"+h[0]+a),f=d.attr(\"type\"),g=d.find(h[1]).outerHeight()||0,i=d.find(\".\"+h[6]).outerHeight()||0;(f===e.type[1]||f===e.type[2])&&(d.css(b),f===e.type[2]&&d.find(\"iframe\").css({height:parseFloat(b.height)-g-i}))},f.min=function(a,b){var d=c(\"#\"+h[0]+a),g=d.find(h[1]).outerHeight()||0;e.record(d),f.style(a,{width:180,height:g,overflow:\"hidden\"}),d.find(\".layui-layer-min\").hide(),\"page\"===d.attr(\"type\")&&d.find(h[4]).hide(),e.rescollbar(a)},f.restore=function(a){var b=c(\"#\"+h[0]+a),d=b.attr(\"area\").split(\",\");b.attr(\"type\");f.style(a,{width:parseFloat(d[0]),height:parseFloat(d[1]),top:parseFloat(d[2]),left:parseFloat(d[3]),overflow:\"visible\"}),b.find(\".layui-layer-max\").removeClass(\"layui-layer-maxmin\"),b.find(\".layui-layer-min\").show(),\"page\"===b.attr(\"type\")&&b.find(h[4]).show(),e.rescollbar(a)},f.full=function(a){var b,g=c(\"#\"+h[0]+a);e.record(g),h.html.attr(\"layer-full\")||h.html.css(\"overflow\",\"hidden\").attr(\"layer-full\",a),clearTimeout(b),b=setTimeout(function(){var b=\"fixed\"===g.css(\"position\");f.style(a,{top:b?0:d.scrollTop(),left:b?0:d.scrollLeft(),width:d.width(),height:d.height()}),g.find(\".layui-layer-min\").hide()},100)},f.title=function(a,b){var d=c(\"#\"+h[0]+(b||f.index)).find(h[1]);d.html(a)},f.close=function(a){var b=c(\"#\"+h[0]+a),d=b.attr(\"type\");if(b[0]){if(d===e.type[1]&&\"object\"===b.attr(\"conType\")){b.children(\":not(.\"+h[5]+\")\").remove();for(var g=0;2>g;g++)b.find(\".layui-layer-wrap\").unwrap().hide()}else{if(d===e.type[2])try{var i=c(\"#\"+h[4]+a)[0];i.contentWindow.document.write(\"\"),i.contentWindow.close(),b.find(\".\"+h[5])[0].removeChild(i)}catch(j){}b[0].innerHTML=\"\",b.remove()}c(\"#layui-layer-moves, #layui-layer-shade\"+a).remove(),f.ie6&&e.reselect(),e.rescollbar(a),c(document).off(\"keydown\",e.enter),\"function\"==typeof e.end[a]&&e.end[a](),delete e.end[a]}},f.closeAll=function(a){c.each(c(\".\"+h[0]),function(){var b=c(this),d=a?b.attr(\"type\")===a:1;d&&f.close(b.attr(\"times\")),d=null})};var i=f.cache||{},j=function(a){return i.skin?\" \"+i.skin+\" \"+i.skin+\"-\"+a:\"\"};f.prompt=function(a,b){a=a||{},\"function\"==typeof a&&(b=a);var d,e=2==a.formType?'<textarea class=\"layui-layer-input\">'+(a.value||\"\")+\"</textarea>\":function(){return'<input type=\"'+(1==a.formType?\"password\":\"text\")+'\" class=\"layui-layer-input\" value=\"'+(a.value||\"\")+'\">'}();return f.open(c.extend({btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],content:e,skin:\"layui-layer-prompt\"+j(\"prompt\"),success:function(a){d=a.find(\".layui-layer-input\"),d.focus()},yes:function(c){var e=d.val();\"\"===e?d.focus():e.length>(a.maxlength||500)?f.tips(\"&#x6700;&#x591A;&#x8F93;&#x5165;\"+(a.maxlength||500)+\"&#x4E2A;&#x5B57;&#x6570;\",d,{tips:1}):b&&b(e,c,d)}},a))},f.tab=function(a){a=a||{};var b=a.tab||{};return f.open(c.extend({type:1,skin:\"layui-layer-tab\"+j(\"tab\"),title:function(){var a=b.length,c=1,d=\"\";if(a>0)for(d='<span class=\"layui-layer-tabnow\">'+b[0].title+\"</span>\";a>c;c++)d+=\"<span>\"+b[c].title+\"</span>\";return d}(),content:'<ul class=\"layui-layer-tabmain\">'+function(){var a=b.length,c=1,d=\"\";if(a>0)for(d='<li class=\"layui-layer-tabli xubox_tab_layer\">'+(b[0].content||\"no content\")+\"</li>\";a>c;c++)d+='<li class=\"layui-layer-tabli\">'+(b[c].content||\"no  content\")+\"</li>\";return d}()+\"</ul>\",success:function(b){var d=b.find(\".layui-layer-title\").children(),e=b.find(\".layui-layer-tabmain\").children();d.on(\"mousedown\",function(b){b.stopPropagation?b.stopPropagation():b.cancelBubble=!0;var d=c(this),f=d.index();d.addClass(\"layui-layer-tabnow\").siblings().removeClass(\"layui-layer-tabnow\"),e.eq(f).show().siblings().hide(),\"function\"==typeof a.change&&a.change(f)})}},a))},f.photos=function(b,d,e){function g(a,b,c){var d=new Image;return d.src=a,d.complete?b(d):(d.onload=function(){d.onload=null,b(d)},void(d.onerror=function(a){d.onerror=null,c(a)}))}var h={};if(b=b||{},b.photos){var i=b.photos.constructor===Object,k=i?b.photos:{},l=k.data||[],m=k.start||0;if(h.imgIndex=(0|m)+1,b.img=b.img||\"img\",i){if(0===l.length)return f.msg(\"&#x6CA1;&#x6709;&#x56FE;&#x7247;\")}else{var n=c(b.photos),o=function(){l=[],n.find(b.img).each(function(a){var b=c(this);b.attr(\"layer-index\",a),l.push({alt:b.attr(\"alt\"),pid:b.attr(\"layer-pid\"),src:b.attr(\"layer-src\")||b.attr(\"src\"),thumb:b.attr(\"src\")})})};if(o(),0===l.length)return;if(d||n.on(\"click\",b.img,function(){var a=c(this),d=a.attr(\"layer-index\");f.photos(c.extend(b,{photos:{start:d,data:l,tab:b.tab},full:b.full}),!0),o()}),!d)return}h.imgprev=function(a){h.imgIndex--,h.imgIndex<1&&(h.imgIndex=l.length),h.tabimg(a)},h.imgnext=function(a,b){h.imgIndex++,h.imgIndex>l.length&&(h.imgIndex=1,b)||h.tabimg(a)},h.keyup=function(a){if(!h.end){var b=a.keyCode;a.preventDefault(),37===b?h.imgprev(!0):39===b?h.imgnext(!0):27===b&&f.close(h.index)}},h.tabimg=function(a){l.length<=1||(k.start=h.imgIndex-1,f.close(h.index),f.photos(b,!0,a))},h.event=function(){h.bigimg.hover(function(){h.imgsee.show()},function(){h.imgsee.hide()}),h.bigimg.find(\".layui-layer-imgprev\").on(\"click\",function(a){a.preventDefault(),h.imgprev()}),h.bigimg.find(\".layui-layer-imgnext\").on(\"click\",function(a){a.preventDefault(),h.imgnext()}),c(document).on(\"keyup\",h.keyup)},h.loadi=f.load(1,{shade:\"shade\"in b?!1:.9,scrollbar:!1}),g(l[m].src,function(d){f.close(h.loadi),h.index=f.open(c.extend({type:1,area:function(){var e=[d.width,d.height],f=[c(a).width()-50,c(a).height()-50];return!b.full&&e[0]>f[0]&&(e[0]=f[0],e[1]=e[0]*d.height/d.width),[e[0]+\"px\",e[1]+\"px\"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:\".layui-layer-phimg img\",moveType:1,scrollbar:!1,moveOut:!0,shift:5*Math.random()|0,skin:\"layui-layer-photos\"+j(\"photos\"),content:'<div class=\"layui-layer-phimg\"><img src=\"'+l[m].src+'\" alt=\"'+(l[m].alt||\"\")+'\" layer-pid=\"'+l[m].pid+'\"><div class=\"layui-layer-imgsee\">'+(l.length>1?'<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>':\"\")+'<div class=\"layui-layer-imgbar\" style=\"display:'+(e?\"block\":\"\")+'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+(l[m].alt||\"\")+\"</a><em>\"+h.imgIndex+\"/\"+l.length+\"</em></span></div></div></div>\",success:function(a,c){h.bigimg=a.find(\".layui-layer-phimg\"),h.imgsee=a.find(\".layui-layer-imguide,.layui-layer-imgbar\"),h.event(a),b.tab&&b.tab(l[m],a)},end:function(){h.end=!0,c(document).off(\"keyup\",h.keyup)}},b))},function(){f.close(h.loadi),f.msg(\"&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;\",{time:3e4,btn:[\"&#x4E0B;&#x4E00;&#x5F20;\",\"&#x4E0D;&#x770B;&#x4E86;\"],yes:function(){l.length>1&&h.imgnext(!0,!0)}})})}},e.run=function(){c=jQuery,d=c(a),h.html=c(\"html\"),f.open=function(a){var b=new g(a);return b.index}},\"function\"==typeof define?define(function(){return e.run(),f}):function(){e.run(),f.use(\"skin/layer.css\")}()}(window);"
  },
  {
    "path": "public/assets/dashboard/js/layer/skin/layer.css",
    "content": "/*!\n \n @Name: layer's style\n @Author: 贤心\n @Blog： sentsin.com\n \n */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span,.layui-layer-title{text-overflow:ellipsis;white-space:nowrap}*html{background-image:url(about:blank);background-attachment:fixed}html #layui_layer_skinlayercss{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+\"px\")}.layui-layer{-webkit-overflow-scrolling:touch;top:150px;left:0;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px rgba(0,0,0,.3);border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.3);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-moves{position:absolute;border:3px solid #666;border:3px solid rgba(0,0,0,.5);cursor:move;background-color:#fff;background-color:rgba(255,255,255,.3);filter:alpha(opacity=50)}.layui-layer-load{background:url(default/loading-0.gif) center center no-repeat #fff}.layui-layer-ico{background:url(default/icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layer-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layer-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layer-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layer-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layer-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layer-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;background-color:#F8F8F8;border-radius:2px 2px 0 0}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-149px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-180px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px solid #dedede;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.7}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;overflow:hidden;font-size:14px;overflow-x:hidden;overflow-y:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe .layui-layer-content{overflow:hidden}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(default/loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(default/loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(default/loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.3);background-color:#F90;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#F90}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:1px;border-bottom-style:solid;border-bottom-color:#F90}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#BBB5B5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}"
  },
  {
    "path": "public/assets/dashboard/js/layer/skin/layer.ext.css",
    "content": "/*!\n \n @Name: layer拓展样式\n @Date: 2012.12.13\n @Author: 贤心\n @blog: sentsin.com\n */"
  },
  {
    "path": "public/assets/dashboard/js/layer/skin/moon/style.css",
    "content": "/*\n * layer皮肤\n * 作者：一☆隐☆一\n * QQ:9073194\n * 请保留这里的信息 谢谢！虽然你不保留我也不能把你怎么样！\n */\n"
  },
  {
    "path": "public/assets/dashboard/js/laypage/laypage.js",
    "content": "/*! layPage-v1.3.0 分页组件 License MIT  http://laypage.layui.com/ By 贤心 */\n;!function(){\"use strict\";function a(d){var e=\"laypagecss\";a.dir=\"dir\"in a?a.dir:f.getpath+\"/skin/laypage.css\",new f(d),a.dir&&!b[c](e)&&f.use(a.dir,e)}a.v=\"1.3\";var b=document,c=\"getElementById\",d=\"getElementsByTagName\",e=0,f=function(a){var b=this,c=b.config=a||{};c.item=e++,b.render(!0)};f.on=function(a,b,c){return a.attachEvent?a.attachEvent(\"on\"+b,function(){c.call(a,window.even)}):a.addEventListener(b,c,!1),f},f.getpath=function(){var a=document.scripts,b=a[a.length-1].src;return b.substring(0,b.lastIndexOf(\"/\")+1)}(),f.use=function(c,e){var f=b.createElement(\"link\");f.type=\"text/css\",f.rel=\"stylesheet\",f.href=a.dir,e&&(f.id=e),b[d](\"head\")[0].appendChild(f),f=null},f.prototype.type=function(){var a=this.config;return\"object\"==typeof a.cont?void 0===a.cont.length?2:3:void 0},f.prototype.view=function(){var b=this,c=b.config,d=[],e={};if(c.pages=0|c.pages,c.curr=0|c.curr||1,c.groups=\"groups\"in c?0|c.groups:5,c.first=\"first\"in c?c.first:\"&#x9996;&#x9875;\",c.last=\"last\"in c?c.last:\"&#x5C3E;&#x9875;\",c.prev=\"prev\"in c?c.prev:\"&#x4E0A;&#x4E00;&#x9875;\",c.next=\"next\"in c?c.next:\"&#x4E0B;&#x4E00;&#x9875;\",c.pages<=1)return\"\";for(c.groups>c.pages&&(c.groups=c.pages),e.index=Math.ceil((c.curr+(c.groups>1&&c.groups!==c.pages?1:0))/(0===c.groups?1:c.groups)),c.curr>1&&c.prev&&d.push('<a href=\"javascript:;\" class=\"laypage_prev\" data-page=\"'+(c.curr-1)+'\">'+c.prev+\"</a>\"),e.index>1&&c.first&&0!==c.groups&&d.push('<a href=\"javascript:;\" class=\"laypage_first\" data-page=\"1\"  title=\"&#x9996;&#x9875;\">'+c.first+\"</a><span>&#x2026;</span>\"),e.poor=Math.floor((c.groups-1)/2),e.start=e.index>1?c.curr-e.poor:1,e.end=e.index>1?function(){var a=c.curr+(c.groups-e.poor-1);return a>c.pages?c.pages:a}():c.groups,e.end-e.start<c.groups-1&&(e.start=e.end-c.groups+1);e.start<=e.end;e.start++)e.start===c.curr?d.push('<span class=\"laypage_curr\" '+(/^#/.test(c.skin)?'style=\"background-color:'+c.skin+'\"':\"\")+\">\"+e.start+\"</span>\"):d.push('<a href=\"javascript:;\" data-page=\"'+e.start+'\">'+e.start+\"</a>\");return c.pages>c.groups&&e.end<c.pages&&c.last&&0!==c.groups&&d.push('<span>&#x2026;</span><a href=\"javascript:;\" class=\"laypage_last\" title=\"&#x5C3E;&#x9875;\"  data-page=\"'+c.pages+'\">'+c.last+\"</a>\"),e.flow=!c.prev&&0===c.groups,(c.curr!==c.pages&&c.next||e.flow)&&d.push(function(){return e.flow&&c.curr===c.pages?'<span class=\"page_nomore\" title=\"&#x5DF2;&#x6CA1;&#x6709;&#x66F4;&#x591A;\">'+c.next+\"</span>\":'<a href=\"javascript:;\" class=\"laypage_next\" data-page=\"'+(c.curr+1)+'\">'+c.next+\"</a>\"}()),'<div name=\"laypage'+a.v+'\" class=\"laypage_main laypageskin_'+(c.skin?function(a){return/^#/.test(a)?\"molv\":a}(c.skin):\"default\")+'\" id=\"laypage_'+b.config.item+'\">'+d.join(\"\")+function(){return c.skip?'<span class=\"laypage_total\"><label>&#x5230;&#x7B2C;</label><input type=\"number\" min=\"1\" onkeyup=\"this.value=this.value.replace(/\\\\D/, \\'\\');\" class=\"laypage_skip\"><label>&#x9875;</label><button type=\"button\" class=\"laypage_btn\">&#x786e;&#x5b9a;</button></span>':\"\"}()+\"</div>\"},f.prototype.jump=function(a){if(a){for(var b=this,c=b.config,e=a.children,g=a[d](\"button\")[0],h=a[d](\"input\")[0],i=0,j=e.length;j>i;i++)\"a\"===e[i].nodeName.toLowerCase()&&f.on(e[i],\"click\",function(){var a=0|this.getAttribute(\"data-page\");c.curr=a,b.render()});g&&f.on(g,\"click\",function(){var a=0|h.value.replace(/\\s|\\D/g,\"\");a&&a<=c.pages&&(c.curr=a,b.render())})}},f.prototype.render=function(a){var d=this,e=d.config,f=d.type(),g=d.view();2===f?e.cont.innerHTML=g:3===f?e.cont.html(g):b[c](e.cont).innerHTML=g,e.jump&&e.jump(e,a),d.jump(b[c](\"laypage_\"+e.item)),e.hash&&!a&&(location.hash=\"!\"+e.hash+\"=\"+e.curr)},\"function\"==typeof define?define(function(){return a}):\"undefined\"!=typeof exports?module.exports=a:window.laypage=a}();"
  },
  {
    "path": "public/assets/dashboard/js/laypage/skin/laypage.css",
    "content": "/*!\n laypage默认样式\n*/.laypage_main a,.laypage_main input,.laypage_main span{height:26px;line-height:26px}.laypage_main button,.laypage_main input,.laypageskin_default a{border:1px solid #ccc;background-color:#fff}.laypage_main{font-size:0;clear:both;color:#666}.laypage_main *{display:inline-block;vertical-align:top;font-size:12px}.laypage_main a{text-decoration:none;color:#666}.laypage_main a,.laypage_main span{margin:0 3px 6px;padding:0 10px}.laypage_main input{width:40px;margin:0 5px;padding:0 5px}.laypage_main button{height:28px;line-height:28px;margin-left:5px;padding:0 10px;color:#666}.laypageskin_default span{height:28px;line-height:28px;color:#999}.laypageskin_default .laypage_curr{font-weight:700;color:#666}.laypageskin_molv a,.laypageskin_molv span{padding:0 12px;border-radius:2px}.laypageskin_molv a{background-color:#f1eff0}.laypageskin_molv .laypage_curr{background-color:#00AA91;color:#fff}.laypageskin_molv input{height:24px;line-height:24px}.laypageskin_molv button{height:26px;line-height:26px}.laypageskin_yahei{color:#333}.laypageskin_yahei a,.laypageskin_yahei span{padding:0 13px;border-radius:2px;color:#333}.laypageskin_yahei .laypage_curr{background-color:#333;color:#fff}.laypageskin_flow{text-align:center}.laypageskin_flow .page_nomore{color:#999}"
  },
  {
    "path": "public/assets/dashboard/js/laytpl/laytpl.js",
    "content": "﻿/** \n \n @Name：laytpl-v1.1 精妙的js模板引擎 \n @Author：贤心 - 2014-08-16\n @Site：http://sentsin.com/layui/laytpl \n @License：MIT license\n */\n \n;!function(){\"use strict\";var f,b={open:\"{{\",close:\"}}\"},c={exp:function(a){return new RegExp(a,\"g\")},query:function(a,c,e){var f=[\"#([\\\\s\\\\S])+?\",\"([^{#}])*?\"][a||0];return d((c||\"\")+b.open+f+b.close+(e||\"\"))},escape:function(a){return String(a||\"\").replace(/&(?!#?[a-zA-Z0-9]+;)/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/'/g,\"&#39;\").replace(/\"/g,\"&quot;\")},error:function(a,b){var c=\"Laytpl Error：\";return\"object\"==typeof console&&console.error(c+a+\"\\n\"+(b||\"\")),c+a}},d=c.exp,e=function(a){this.tpl=a};e.pt=e.prototype,e.pt.parse=function(a,e){var f=this,g=a,h=d(\"^\"+b.open+\"#\",\"\"),i=d(b.close+\"$\",\"\");a=a.replace(/[\\r\\t\\n]/g,\" \").replace(d(b.open+\"#\"),b.open+\"# \").replace(d(b.close+\"}\"),\"} \"+b.close).replace(/\\\\/g,\"\\\\\\\\\").replace(/(?=\"|')/g,\"\\\\\").replace(c.query(),function(a){return a=a.replace(h,\"\").replace(i,\"\"),'\";'+a.replace(/\\\\/g,\"\")+'; view+=\"'}).replace(c.query(1),function(a){var c='\"+(';return a.replace(/\\s/g,\"\")===b.open+b.close?\"\":(a=a.replace(d(b.open+\"|\"+b.close),\"\"),/^=/.test(a)&&(a=a.replace(/^=/,\"\"),c='\"+_escape_('),c+a.replace(/\\\\/g,\"\")+')+\"')}),a='\"use strict\";var view = \"'+a+'\";return view;';try{return f.cache=a=new Function(\"d, _escape_\",a),a(e,c.escape)}catch(j){return delete f.cache,c.error(j,g)}},e.pt.render=function(a,b){var e,d=this;return a?(e=d.cache?d.cache(a,c.escape):d.parse(d.tpl,a),b?(b(e),void 0):e):c.error(\"no data\")},f=function(a){return\"string\"!=typeof a?c.error(\"Template not found\"):new e(a)},f.config=function(a){a=a||{};for(var c in a)b[c]=a[c]},f.v=\"1.1\",\"function\"==typeof define?define(function(){return f}):\"undefined\"!=typeof exports?module.exports=f:window.laytpl=f}();"
  },
  {
    "path": "public/assets/dashboard/js/plugins/beautifyhtml/beautifyhtml.js",
    "content": "/*jshint curly:true, eqeqeq:true, laxbreak:true, noempty:false */\n/*\n\n  The MIT License (MIT)\n\n  Copyright (c) 2007-2013 Einar Lielmanis and contributors.\n\n  Permission is hereby granted, free of charge, to any person\n  obtaining a copy of this software and associated documentation files\n  (the \"Software\"), to deal in the Software without restriction,\n  including without limitation the rights to use, copy, modify, merge,\n  publish, distribute, sublicense, and/or sell copies of the Software,\n  and to permit persons to whom the Software is furnished to do so,\n  subject to the following conditions:\n\n  The above copyright notice and this permission notice shall be\n  included in all copies or substantial portions of the Software.\n\n  THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND,\n  EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\n  MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\n  NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\n  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\n  ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\n  CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\n  SOFTWARE.\n\n\n Style HTML\n---------------\n\n  Written by Nochum Sossonko, (nsossonko@hotmail.com)\n\n  Based on code initially developed by: Einar Lielmanis, <elfz@laacz.lv>\n    http://jsbeautifier.org/\n\n  Usage:\n    style_html(html_source);\n\n    style_html(html_source, options);\n\n  The options are:\n    indent_size (default 4)          — indentation size,\n    indent_char (default space)      — character to indent with,\n    max_char (default 250)            -  maximum amount of characters per line (0 = disable)\n    brace_style (default \"collapse\") - \"collapse\" | \"expand\" | \"end-expand\"\n            put braces on the same line as control statements (default), or put braces on own line (Allman / ANSI style), or just put end braces on own line.\n    unformatted (defaults to inline tags) - list of tags, that shouldn't be reformatted\n    indent_scripts (default normal)  - \"keep\"|\"separate\"|\"normal\"\n\n    e.g.\n\n    style_html(html_source, {\n      'indent_size': 2,\n      'indent_char': ' ',\n      'max_char': 78,\n      'brace_style': 'expand',\n      'unformatted': ['a', 'sub', 'sup', 'b', 'i', 'u']\n    });\n*/\n\n(function() {\n\n    function style_html(html_source, options, js_beautify, css_beautify) {\n    //Wrapper function to invoke all the necessary constructors and deal with the output.\n\n      var multi_parser,\n          indent_size,\n          indent_character,\n          max_char,\n          brace_style,\n          unformatted;\n\n      options = options || {};\n      indent_size = options.indent_size || 4;\n      indent_character = options.indent_char || ' ';\n      brace_style = options.brace_style || 'collapse';\n      max_char = options.max_char === 0 ? Infinity : options.max_char || 250;\n      unformatted = options.unformatted || ['a', 'span', 'bdo', 'em', 'strong', 'dfn', 'code', 'samp', 'kbd', 'var', 'cite', 'abbr', 'acronym', 'q', 'sub', 'sup', 'tt', 'i', 'b', 'big', 'small', 'u', 's', 'strike', 'font', 'ins', 'del', 'pre', 'address', 'dt', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'];\n\n      function Parser() {\n\n        this.pos = 0; //Parser position\n        this.token = '';\n        this.current_mode = 'CONTENT'; //reflects the current Parser mode: TAG/CONTENT\n        this.tags = { //An object to hold tags, their position, and their parent-tags, initiated with default values\n          parent: 'parent1',\n          parentcount: 1,\n          parent1: ''\n        };\n        this.tag_type = '';\n        this.token_text = this.last_token = this.last_text = this.token_type = '';\n\n        this.Utils = { //Uilities made available to the various functions\n          whitespace: \"\\n\\r\\t \".split(''),\n          single_token: 'br,input,link,meta,!doctype,basefont,base,area,hr,wbr,param,img,isindex,?xml,embed,?php,?,?='.split(','), //all the single tags for HTML\n          extra_liners: 'head,body,/html'.split(','), //for tags that need a line of whitespace before them\n          in_array: function (what, arr) {\n            for (var i=0; i<arr.length; i++) {\n              if (what === arr[i]) {\n                return true;\n              }\n            }\n            return false;\n          }\n        };\n\n        this.get_content = function () { //function to capture regular content between tags\n\n          var input_char = '',\n              content = [],\n              space = false; //if a space is needed\n\n          while (this.input.charAt(this.pos) !== '<') {\n            if (this.pos >= this.input.length) {\n              return content.length?content.join(''):['', 'TK_EOF'];\n            }\n\n            input_char = this.input.charAt(this.pos);\n            this.pos++;\n            this.line_char_count++;\n\n            if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n              if (content.length) {\n                space = true;\n              }\n              this.line_char_count--;\n              continue; //don't want to insert unnecessary space\n            }\n            else if (space) {\n              if (this.line_char_count >= this.max_char) { //insert a line when the max_char is reached\n                content.push('\\n');\n                for (var i=0; i<this.indent_level; i++) {\n                  content.push(this.indent_string);\n                }\n                this.line_char_count = 0;\n              }\n              else{\n                content.push(' ');\n                this.line_char_count++;\n              }\n              space = false;\n            }\n            content.push(input_char); //letter at-a-time (or string) inserted to an array\n          }\n          return content.length?content.join(''):'';\n        };\n\n        this.get_contents_to = function (name) { //get the full content of a script or style to pass to js_beautify\n          if (this.pos === this.input.length) {\n            return ['', 'TK_EOF'];\n          }\n          var input_char = '';\n          var content = '';\n          var reg_match = new RegExp('</' + name + '\\\\s*>', 'igm');\n          reg_match.lastIndex = this.pos;\n          var reg_array = reg_match.exec(this.input);\n          var end_script = reg_array?reg_array.index:this.input.length; //absolute end of script\n          if(this.pos < end_script) { //get everything in between the script tags\n            content = this.input.substring(this.pos, end_script);\n            this.pos = end_script;\n          }\n          return content;\n        };\n\n        this.record_tag = function (tag){ //function to record a tag and its parent in this.tags Object\n          if (this.tags[tag + 'count']) { //check for the existence of this tag type\n            this.tags[tag + 'count']++;\n            this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n          }\n          else { //otherwise initialize this tag type\n            this.tags[tag + 'count'] = 1;\n            this.tags[tag + this.tags[tag + 'count']] = this.indent_level; //and record the present indent level\n          }\n          this.tags[tag + this.tags[tag + 'count'] + 'parent'] = this.tags.parent; //set the parent (i.e. in the case of a div this.tags.div1parent)\n          this.tags.parent = tag + this.tags[tag + 'count']; //and make this the current parent (i.e. in the case of a div 'div1')\n        };\n\n        this.retrieve_tag = function (tag) { //function to retrieve the opening tag to the corresponding closer\n          if (this.tags[tag + 'count']) { //if the openener is not in the Object we ignore it\n            var temp_parent = this.tags.parent; //check to see if it's a closable tag.\n            while (temp_parent) { //till we reach '' (the initial value);\n              if (tag + this.tags[tag + 'count'] === temp_parent) { //if this is it use it\n                break;\n              }\n              temp_parent = this.tags[temp_parent + 'parent']; //otherwise keep on climbing up the DOM Tree\n            }\n            if (temp_parent) { //if we caught something\n              this.indent_level = this.tags[tag + this.tags[tag + 'count']]; //set the indent_level accordingly\n              this.tags.parent = this.tags[temp_parent + 'parent']; //and set the current parent\n            }\n            delete this.tags[tag + this.tags[tag + 'count'] + 'parent']; //delete the closed tags parent reference...\n            delete this.tags[tag + this.tags[tag + 'count']]; //...and the tag itself\n            if (this.tags[tag + 'count'] === 1) {\n              delete this.tags[tag + 'count'];\n            }\n            else {\n              this.tags[tag + 'count']--;\n            }\n          }\n        };\n\n        this.get_tag = function (peek) { //function to get a full tag and parse its type\n          var input_char = '',\n              content = [],\n              comment = '',\n              space = false,\n              tag_start, tag_end,\n              orig_pos = this.pos,\n              orig_line_char_count = this.line_char_count;\n\n          peek = peek !== undefined ? peek : false;\n\n          do {\n            if (this.pos >= this.input.length) {\n              if (peek) {\n                this.pos = orig_pos;\n                this.line_char_count = orig_line_char_count;\n              }\n              return content.length?content.join(''):['', 'TK_EOF'];\n            }\n\n            input_char = this.input.charAt(this.pos);\n            this.pos++;\n            this.line_char_count++;\n\n            if (this.Utils.in_array(input_char, this.Utils.whitespace)) { //don't want to insert unnecessary space\n              space = true;\n              this.line_char_count--;\n              continue;\n            }\n\n            if (input_char === \"'\" || input_char === '\"') {\n              if (!content[1] || content[1] !== '!') { //if we're in a comment strings don't get treated specially\n                input_char += this.get_unformatted(input_char);\n                space = true;\n              }\n            }\n\n            if (input_char === '=') { //no space before =\n              space = false;\n            }\n\n            if (content.length && content[content.length-1] !== '=' && input_char !== '>' && space) {\n                //no space after = or before >\n              if (this.line_char_count >= this.max_char) {\n                this.print_newline(false, content);\n                this.line_char_count = 0;\n              }\n              else {\n                content.push(' ');\n                this.line_char_count++;\n              }\n              space = false;\n            }\n            if (input_char === '<') {\n              tag_start = this.pos - 1;\n            }\n            content.push(input_char); //inserts character at-a-time (or string)\n          } while (input_char !== '>');\n\n          var tag_complete = content.join('');\n          var tag_index;\n          if (tag_complete.indexOf(' ') !== -1) { //if there's whitespace, thats where the tag name ends\n            tag_index = tag_complete.indexOf(' ');\n          }\n          else { //otherwise go with the tag ending\n            tag_index = tag_complete.indexOf('>');\n          }\n          var tag_check = tag_complete.substring(1, tag_index).toLowerCase();\n          if (tag_complete.charAt(tag_complete.length-2) === '/' ||\n            this.Utils.in_array(tag_check, this.Utils.single_token)) { //if this tag name is a single tag type (either in the list or has a closing /)\n            if ( ! peek) {\n              this.tag_type = 'SINGLE';\n            }\n          }\n          else if (tag_check === 'script') { //for later script handling\n            if ( ! peek) {\n              this.record_tag(tag_check);\n              this.tag_type = 'SCRIPT';\n            }\n          }\n          else if (tag_check === 'style') { //for future style handling (for now it justs uses get_content)\n            if ( ! peek) {\n              this.record_tag(tag_check);\n              this.tag_type = 'STYLE';\n            }\n          }\n          else if (this.is_unformatted(tag_check, unformatted)) { // do not reformat the \"unformatted\" tags\n            comment = this.get_unformatted('</'+tag_check+'>', tag_complete); //...delegate to get_unformatted function\n            content.push(comment);\n            // Preserve collapsed whitespace either before or after this tag.\n            if (tag_start > 0 && this.Utils.in_array(this.input.charAt(tag_start - 1), this.Utils.whitespace)){\n                content.splice(0, 0, this.input.charAt(tag_start - 1));\n            }\n            tag_end = this.pos - 1;\n            if (this.Utils.in_array(this.input.charAt(tag_end + 1), this.Utils.whitespace)){\n                content.push(this.input.charAt(tag_end + 1));\n            }\n            this.tag_type = 'SINGLE';\n          }\n          else if (tag_check.charAt(0) === '!') { //peek for <!-- comment\n            if (tag_check.indexOf('[if') !== -1) { //peek for <!--[if conditional comment\n              if (tag_complete.indexOf('!IE') !== -1) { //this type needs a closing --> so...\n                comment = this.get_unformatted('-->', tag_complete); //...delegate to get_unformatted\n                content.push(comment);\n              }\n              if ( ! peek) {\n                this.tag_type = 'START';\n              }\n            }\n            else if (tag_check.indexOf('[endif') !== -1) {//peek for <!--[endif end conditional comment\n              this.tag_type = 'END';\n              this.unindent();\n            }\n            else if (tag_check.indexOf('[cdata[') !== -1) { //if it's a <[cdata[ comment...\n              comment = this.get_unformatted(']]>', tag_complete); //...delegate to get_unformatted function\n              content.push(comment);\n              if ( ! peek) {\n                this.tag_type = 'SINGLE'; //<![CDATA[ comments are treated like single tags\n              }\n            }\n            else {\n              comment = this.get_unformatted('-->', tag_complete);\n              content.push(comment);\n              this.tag_type = 'SINGLE';\n            }\n          }\n          else if ( ! peek) {\n            if (tag_check.charAt(0) === '/') { //this tag is a double tag so check for tag-ending\n              this.retrieve_tag(tag_check.substring(1)); //remove it and all ancestors\n              this.tag_type = 'END';\n            }\n            else { //otherwise it's a start-tag\n              this.record_tag(tag_check); //push it on the tag stack\n              this.tag_type = 'START';\n            }\n            if (this.Utils.in_array(tag_check, this.Utils.extra_liners)) { //check if this double needs an extra line\n              this.print_newline(true, this.output);\n            }\n          }\n\n          if (peek) {\n            this.pos = orig_pos;\n            this.line_char_count = orig_line_char_count;\n          }\n\n          return content.join(''); //returns fully formatted tag\n        };\n\n        this.get_unformatted = function (delimiter, orig_tag) { //function to return unformatted content in its entirety\n\n          if (orig_tag && orig_tag.toLowerCase().indexOf(delimiter) !== -1) {\n            return '';\n          }\n          var input_char = '';\n          var content = '';\n          var space = true;\n          do {\n\n            if (this.pos >= this.input.length) {\n              return content;\n            }\n\n            input_char = this.input.charAt(this.pos);\n            this.pos++;\n\n            if (this.Utils.in_array(input_char, this.Utils.whitespace)) {\n              if (!space) {\n                this.line_char_count--;\n                continue;\n              }\n              if (input_char === '\\n' || input_char === '\\r') {\n                content += '\\n';\n                /*  Don't change tab indention for unformatted blocks.  If using code for html editing, this will greatly affect <pre> tags if they are specified in the 'unformatted array'\n                for (var i=0; i<this.indent_level; i++) {\n                  content += this.indent_string;\n                }\n                space = false; //...and make sure other indentation is erased\n                */\n                this.line_char_count = 0;\n                continue;\n              }\n            }\n            content += input_char;\n            this.line_char_count++;\n            space = true;\n\n\n          } while (content.toLowerCase().indexOf(delimiter) === -1);\n          return content;\n        };\n\n        this.get_token = function () { //initial handler for token-retrieval\n          var token;\n\n          if (this.last_token === 'TK_TAG_SCRIPT' || this.last_token === 'TK_TAG_STYLE') { //check if we need to format javascript\n           var type = this.last_token.substr(7);\n           token = this.get_contents_to(type);\n            if (typeof token !== 'string') {\n              return token;\n            }\n            return [token, 'TK_' + type];\n          }\n          if (this.current_mode === 'CONTENT') {\n            token = this.get_content();\n            if (typeof token !== 'string') {\n              return token;\n            }\n            else {\n              return [token, 'TK_CONTENT'];\n            }\n          }\n\n          if (this.current_mode === 'TAG') {\n            token = this.get_tag();\n            if (typeof token !== 'string') {\n              return token;\n            }\n            else {\n              var tag_name_type = 'TK_TAG_' + this.tag_type;\n              return [token, tag_name_type];\n            }\n          }\n        };\n\n        this.get_full_indent = function (level) {\n          level = this.indent_level + level || 0;\n          if (level < 1) {\n            return '';\n          }\n\n          return Array(level + 1).join(this.indent_string);\n        };\n\n        this.is_unformatted = function(tag_check, unformatted) {\n            //is this an HTML5 block-level link?\n            if (!this.Utils.in_array(tag_check, unformatted)){\n                return false;\n            }\n\n            if (tag_check.toLowerCase() !== 'a' || !this.Utils.in_array('a', unformatted)){\n                return true;\n            }\n\n            //at this point we have an  tag; is its first child something we want to remain\n            //unformatted?\n            var next_tag = this.get_tag(true /* peek. */);\n\n            // tets next_tag to see if it is just html tag (no external content)\n            var tag = (next_tag || \"\").match(/^\\s*<\\s*\\/?([a-z]*)\\s*[^>]*>\\s*$/);\n\n            // if next_tag comes back but is not an isolated tag, then\n            // let's treat the 'a' tag as having content\n            // and respect the unformatted option\n            if (!tag || this.Utils.in_array(tag, unformatted)){\n                return true;\n            } else {\n                return false;\n            }\n        };\n\n        this.printer = function (js_source, indent_character, indent_size, max_char, brace_style) { //handles input/output and some other printing functions\n\n          this.input = js_source || ''; //gets the input for the Parser\n          this.output = [];\n          this.indent_character = indent_character;\n          this.indent_string = '';\n          this.indent_size = indent_size;\n          this.brace_style = brace_style;\n          this.indent_level = 0;\n          this.max_char = max_char;\n          this.line_char_count = 0; //count to see if max_char was exceeded\n\n          for (var i=0; i<this.indent_size; i++) {\n            this.indent_string += this.indent_character;\n          }\n\n          this.print_newline = function (ignore, arr) {\n            this.line_char_count = 0;\n            if (!arr || !arr.length) {\n              return;\n            }\n            if (!ignore) { //we might want the extra line\n              while (this.Utils.in_array(arr[arr.length-1], this.Utils.whitespace)) {\n                arr.pop();\n              }\n            }\n            arr.push('\\n');\n            for (var i=0; i<this.indent_level; i++) {\n              arr.push(this.indent_string);\n            }\n          };\n\n          this.print_token = function (text) {\n            this.output.push(text);\n          };\n\n          this.indent = function () {\n            this.indent_level++;\n          };\n\n          this.unindent = function () {\n            if (this.indent_level > 0) {\n              this.indent_level--;\n            }\n          };\n        };\n        return this;\n      }\n\n      /*_____________________--------------------_____________________*/\n\n      multi_parser = new Parser(); //wrapping functions Parser\n      multi_parser.printer(html_source, indent_character, indent_size, max_char, brace_style); //initialize starting values\n\n      while (true) {\n          var t = multi_parser.get_token();\n          multi_parser.token_text = t[0];\n          multi_parser.token_type = t[1];\n\n        if (multi_parser.token_type === 'TK_EOF') {\n          break;\n        }\n\n        switch (multi_parser.token_type) {\n          case 'TK_TAG_START':\n            multi_parser.print_newline(false, multi_parser.output);\n            multi_parser.print_token(multi_parser.token_text);\n            multi_parser.indent();\n            multi_parser.current_mode = 'CONTENT';\n            break;\n          case 'TK_TAG_STYLE':\n          case 'TK_TAG_SCRIPT':\n            multi_parser.print_newline(false, multi_parser.output);\n            multi_parser.print_token(multi_parser.token_text);\n            multi_parser.current_mode = 'CONTENT';\n            break;\n          case 'TK_TAG_END':\n            //Print new line only if the tag has no content and has child\n            if (multi_parser.last_token === 'TK_CONTENT' && multi_parser.last_text === '') {\n                var tag_name = multi_parser.token_text.match(/\\w+/)[0];\n                var tag_extracted_from_last_output = multi_parser.output[multi_parser.output.length -1].match(/<\\s*(\\w+)/);\n                if (tag_extracted_from_last_output === null || tag_extracted_from_last_output[1] !== tag_name) {\n                    multi_parser.print_newline(true, multi_parser.output);\n                }\n            }\n            multi_parser.print_token(multi_parser.token_text);\n            multi_parser.current_mode = 'CONTENT';\n            break;\n          case 'TK_TAG_SINGLE':\n            // Don't add a newline before elements that should remain unformatted.\n            var tag_check = multi_parser.token_text.match(/^\\s*<([a-z]+)/i);\n            if (!tag_check || !multi_parser.Utils.in_array(tag_check[1], unformatted)){\n                multi_parser.print_newline(false, multi_parser.output);\n            }\n            multi_parser.print_token(multi_parser.token_text);\n            multi_parser.current_mode = 'CONTENT';\n            break;\n          case 'TK_CONTENT':\n            if (multi_parser.token_text !== '') {\n              multi_parser.print_token(multi_parser.token_text);\n            }\n            multi_parser.current_mode = 'TAG';\n            break;\n          case 'TK_STYLE':\n          case 'TK_SCRIPT':\n            if (multi_parser.token_text !== '') {\n              multi_parser.output.push('\\n');\n              var text = multi_parser.token_text,\n                  _beautifier,\n                  script_indent_level = 1;\n              if (multi_parser.token_type === 'TK_SCRIPT') {\n                _beautifier = typeof js_beautify === 'function' && js_beautify;\n              } else if (multi_parser.token_type === 'TK_STYLE') {\n                _beautifier = typeof css_beautify === 'function' && css_beautify;\n              }\n\n              if (options.indent_scripts === \"keep\") {\n                script_indent_level = 0;\n              } else if (options.indent_scripts === \"separate\") {\n                script_indent_level = -multi_parser.indent_level;\n              }\n\n              var indentation = multi_parser.get_full_indent(script_indent_level);\n              if (_beautifier) {\n                // call the Beautifier if avaliable\n                text = _beautifier(text.replace(/^\\s*/, indentation), options);\n              } else {\n                // simply indent the string otherwise\n                var white = text.match(/^\\s*/)[0];\n                var _level = white.match(/[^\\n\\r]*$/)[0].split(multi_parser.indent_string).length - 1;\n                var reindent = multi_parser.get_full_indent(script_indent_level -_level);\n                text = text.replace(/^\\s*/, indentation)\n                       .replace(/\\r\\n|\\r|\\n/g, '\\n' + reindent)\n                       .replace(/\\s*$/, '');\n              }\n              if (text) {\n                multi_parser.print_token(text);\n                multi_parser.print_newline(true, multi_parser.output);\n              }\n            }\n            multi_parser.current_mode = 'TAG';\n            break;\n        }\n        multi_parser.last_token = multi_parser.token_type;\n        multi_parser.last_text = multi_parser.token_text;\n      }\n      return multi_parser.output.join('');\n    }\n\n    // If we're running a web page and don't have either of the above, add our one global\n    window.html_beautify = function(html_source, options) {\n        return style_html(html_source, options, window.js_beautify, window.css_beautify);\n    };\n\n}());\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/chosen/chosen.jquery.js",
    "content": "/*!\n Chosen, a Select Box Enhancer for jQuery and Prototype\n by Patrick Filler for Harvest, http://getharvest.com\n\n Version 1.1.0\n Full source at https://github.com/harvesthq/chosen\n Copyright (c) 2011 Harvest http://getharvest.com\n\n MIT License, https://github.com/harvesthq/chosen/blob/master/LICENSE.md\n This file is generated by `grunt build`, do not edit it by hand.\n */\n\n(function() {\n    var $, AbstractChosen, Chosen, SelectParser, _ref,\n        __hasProp = {}.hasOwnProperty,\n        __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\n    SelectParser = (function() {\n        function SelectParser() {\n            this.options_index = 0;\n            this.parsed = [];\n        }\n\n        SelectParser.prototype.add_node = function(child) {\n            if (child.nodeName.toUpperCase() === \"OPTGROUP\") {\n                return this.add_group(child);\n            } else {\n                return this.add_option(child);\n            }\n        };\n\n        SelectParser.prototype.add_group = function(group) {\n            var group_position, option, _i, _len, _ref, _results;\n            group_position = this.parsed.length;\n            this.parsed.push({\n                array_index: group_position,\n                group: true,\n                label: this.escapeExpression(group.label),\n                children: 0,\n                disabled: group.disabled\n            });\n            _ref = group.childNodes;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                option = _ref[_i];\n                _results.push(this.add_option(option, group_position, group.disabled));\n            }\n            return _results;\n        };\n\n        SelectParser.prototype.add_option = function(option, group_position, group_disabled) {\n            if (option.nodeName.toUpperCase() === \"OPTION\") {\n                if (option.text !== \"\") {\n                    if (group_position != null) {\n                        this.parsed[group_position].children += 1;\n                    }\n                    this.parsed.push({\n                        array_index: this.parsed.length,\n                        options_index: this.options_index,\n                        value: option.value,\n                        text: option.text,\n                        html: option.innerHTML,\n                        selected: option.selected,\n                        disabled: group_disabled === true ? group_disabled : option.disabled,\n                        group_array_index: group_position,\n                        classes: option.className,\n                        style: option.style.cssText\n                    });\n                } else {\n                    this.parsed.push({\n                        array_index: this.parsed.length,\n                        options_index: this.options_index,\n                        empty: true\n                    });\n                }\n                return this.options_index += 1;\n            }\n        };\n\n        SelectParser.prototype.escapeExpression = function(text) {\n            var map, unsafe_chars;\n            if ((text == null) || text === false) {\n                return \"\";\n            }\n            if (!/[\\&\\<\\>\\\"\\'\\`]/.test(text)) {\n                return text;\n            }\n            map = {\n                \"<\": \"&lt;\",\n                \">\": \"&gt;\",\n                '\"': \"&quot;\",\n                \"'\": \"&#x27;\",\n                \"`\": \"&#x60;\"\n            };\n            unsafe_chars = /&(?!\\w+;)|[\\<\\>\\\"\\'\\`]/g;\n            return text.replace(unsafe_chars, function(chr) {\n                return map[chr] || \"&amp;\";\n            });\n        };\n\n        return SelectParser;\n\n    })();\n\n    SelectParser.select_to_array = function(select) {\n        var child, parser, _i, _len, _ref;\n        parser = new SelectParser();\n        _ref = select.childNodes;\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            child = _ref[_i];\n            parser.add_node(child);\n        }\n        return parser.parsed;\n    };\n\n    AbstractChosen = (function() {\n        function AbstractChosen(form_field, options) {\n            this.form_field = form_field;\n            this.options = options != null ? options : {};\n            if (!AbstractChosen.browser_is_supported()) {\n                return;\n            }\n            this.is_multiple = this.form_field.multiple;\n            this.set_default_text();\n            this.set_default_values();\n            this.setup();\n            this.set_up_html();\n            this.register_observers();\n        }\n\n        AbstractChosen.prototype.set_default_values = function() {\n            var _this = this;\n            this.click_test_action = function(evt) {\n                return _this.test_active_click(evt);\n            };\n            this.activate_action = function(evt) {\n                return _this.activate_field(evt);\n            };\n            this.active_field = false;\n            this.mouse_on_container = false;\n            this.results_showing = false;\n            this.result_highlighted = null;\n            this.allow_single_deselect = (this.options.allow_single_deselect != null) && (this.form_field.options[0] != null) && this.form_field.options[0].text === \"\" ? this.options.allow_single_deselect : false;\n            this.disable_search_threshold = this.options.disable_search_threshold || 0;\n            this.disable_search = this.options.disable_search || false;\n            this.enable_split_word_search = this.options.enable_split_word_search != null ? this.options.enable_split_word_search : true;\n            this.group_search = this.options.group_search != null ? this.options.group_search : true;\n            this.search_contains = this.options.search_contains || false;\n            this.single_backstroke_delete = this.options.single_backstroke_delete != null ? this.options.single_backstroke_delete : true;\n            this.max_selected_options = this.options.max_selected_options || Infinity;\n            this.inherit_select_classes = this.options.inherit_select_classes || false;\n            this.display_selected_options = this.options.display_selected_options != null ? this.options.display_selected_options : true;\n            return this.display_disabled_options = this.options.display_disabled_options != null ? this.options.display_disabled_options : true;\n        };\n\n        AbstractChosen.prototype.set_default_text = function() {\n            if (this.form_field.getAttribute(\"data-placeholder\")) {\n                this.default_text = this.form_field.getAttribute(\"data-placeholder\");\n            } else if (this.is_multiple) {\n                this.default_text = this.options.placeholder_text_multiple || this.options.placeholder_text || AbstractChosen.default_multiple_text;\n            } else {\n                this.default_text = this.options.placeholder_text_single || this.options.placeholder_text || AbstractChosen.default_single_text;\n            }\n            return this.results_none_found = this.form_field.getAttribute(\"data-no_results_text\") || this.options.no_results_text || AbstractChosen.default_no_result_text;\n        };\n\n        AbstractChosen.prototype.mouse_enter = function() {\n            return this.mouse_on_container = true;\n        };\n\n        AbstractChosen.prototype.mouse_leave = function() {\n            return this.mouse_on_container = false;\n        };\n\n        AbstractChosen.prototype.input_focus = function(evt) {\n            var _this = this;\n            if (this.is_multiple) {\n                if (!this.active_field) {\n                    return setTimeout((function() {\n                        return _this.container_mousedown();\n                    }), 50);\n                }\n            } else {\n                if (!this.active_field) {\n                    return this.activate_field();\n                }\n            }\n        };\n\n        AbstractChosen.prototype.input_blur = function(evt) {\n            var _this = this;\n            if (!this.mouse_on_container) {\n                this.active_field = false;\n                return setTimeout((function() {\n                    return _this.blur_test();\n                }), 100);\n            }\n        };\n\n        AbstractChosen.prototype.results_option_build = function(options) {\n            var content, data, _i, _len, _ref;\n            content = '';\n            _ref = this.results_data;\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                data = _ref[_i];\n                if (data.group) {\n                    content += this.result_add_group(data);\n                } else {\n                    content += this.result_add_option(data);\n                }\n                if (options != null ? options.first : void 0) {\n                    if (data.selected && this.is_multiple) {\n                        this.choice_build(data);\n                    } else if (data.selected && !this.is_multiple) {\n                        this.single_set_selected_text(data.text);\n                    }\n                }\n            }\n            return content;\n        };\n\n        AbstractChosen.prototype.result_add_option = function(option) {\n            var classes, option_el;\n            if (!option.search_match) {\n                return '';\n            }\n            if (!this.include_option_in_results(option)) {\n                return '';\n            }\n            classes = [];\n            if (!option.disabled && !(option.selected && this.is_multiple)) {\n                classes.push(\"active-result\");\n            }\n            if (option.disabled && !(option.selected && this.is_multiple)) {\n                classes.push(\"disabled-result\");\n            }\n            if (option.selected) {\n                classes.push(\"result-selected\");\n            }\n            if (option.group_array_index != null) {\n                classes.push(\"group-option\");\n            }\n            if (option.classes !== \"\") {\n                classes.push(option.classes);\n            }\n            option_el = document.createElement(\"li\");\n            option_el.className = classes.join(\" \");\n            option_el.style.cssText = option.style;\n            option_el.setAttribute(\"data-option-array-index\", option.array_index);\n            option_el.innerHTML = option.search_text;\n            return this.outerHTML(option_el);\n        };\n\n        AbstractChosen.prototype.result_add_group = function(group) {\n            var group_el;\n            if (!(group.search_match || group.group_match)) {\n                return '';\n            }\n            if (!(group.active_options > 0)) {\n                return '';\n            }\n            group_el = document.createElement(\"li\");\n            group_el.className = \"group-result\";\n            group_el.innerHTML = group.search_text;\n            return this.outerHTML(group_el);\n        };\n\n        AbstractChosen.prototype.results_update_field = function() {\n            this.set_default_text();\n            if (!this.is_multiple) {\n                this.results_reset_cleanup();\n            }\n            this.result_clear_highlight();\n            this.results_build();\n            if (this.results_showing) {\n                return this.winnow_results();\n            }\n        };\n\n        AbstractChosen.prototype.reset_single_select_options = function() {\n            var result, _i, _len, _ref, _results;\n            _ref = this.results_data;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                result = _ref[_i];\n                if (result.selected) {\n                    _results.push(result.selected = false);\n                } else {\n                    _results.push(void 0);\n                }\n            }\n            return _results;\n        };\n\n        AbstractChosen.prototype.results_toggle = function() {\n            if (this.results_showing) {\n                return this.results_hide();\n            } else {\n                return this.results_show();\n            }\n        };\n\n        AbstractChosen.prototype.results_search = function(evt) {\n            if (this.results_showing) {\n                return this.winnow_results();\n            } else {\n                return this.results_show();\n            }\n        };\n\n        AbstractChosen.prototype.winnow_results = function() {\n            var escapedSearchText, option, regex, regexAnchor, results, results_group, searchText, startpos, text, zregex, _i, _len, _ref;\n            this.no_results_clear();\n            results = 0;\n            searchText = this.get_search_text();\n            escapedSearchText = searchText.replace(/[-[\\]{}()*+?.,\\\\^$|#\\s]/g, \"\\\\$&\");\n            regexAnchor = this.search_contains ? \"\" : \"^\";\n            regex = new RegExp(regexAnchor + escapedSearchText, 'i');\n            zregex = new RegExp(escapedSearchText, 'i');\n            _ref = this.results_data;\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                option = _ref[_i];\n                option.search_match = false;\n                results_group = null;\n                if (this.include_option_in_results(option)) {\n                    if (option.group) {\n                        option.group_match = false;\n                        option.active_options = 0;\n                    }\n                    if ((option.group_array_index != null) && this.results_data[option.group_array_index]) {\n                        results_group = this.results_data[option.group_array_index];\n                        if (results_group.active_options === 0 && results_group.search_match) {\n                            results += 1;\n                        }\n                        results_group.active_options += 1;\n                    }\n                    if (!(option.group && !this.group_search)) {\n                        option.search_text = option.group ? option.label : option.html;\n                        option.search_match = this.search_string_match(option.search_text, regex);\n                        if (option.search_match && !option.group) {\n                            results += 1;\n                        }\n                        if (option.search_match) {\n                            if (searchText.length) {\n                                startpos = option.search_text.search(zregex);\n                                text = option.search_text.substr(0, startpos + searchText.length) + '</em>' + option.search_text.substr(startpos + searchText.length);\n                                option.search_text = text.substr(0, startpos) + '<em>' + text.substr(startpos);\n                            }\n                            if (results_group != null) {\n                                results_group.group_match = true;\n                            }\n                        } else if ((option.group_array_index != null) && this.results_data[option.group_array_index].search_match) {\n                            option.search_match = true;\n                        }\n                    }\n                }\n            }\n            this.result_clear_highlight();\n            if (results < 1 && searchText.length) {\n                this.update_results_content(\"\");\n                return this.no_results(searchText);\n            } else {\n                this.update_results_content(this.results_option_build());\n                return this.winnow_results_set_highlight();\n            }\n        };\n\n        AbstractChosen.prototype.search_string_match = function(search_string, regex) {\n            var part, parts, _i, _len;\n            if (regex.test(search_string)) {\n                return true;\n            } else if (this.enable_split_word_search && (search_string.indexOf(\" \") >= 0 || search_string.indexOf(\"[\") === 0)) {\n                parts = search_string.replace(/\\[|\\]/g, \"\").split(\" \");\n                if (parts.length) {\n                    for (_i = 0, _len = parts.length; _i < _len; _i++) {\n                        part = parts[_i];\n                        if (regex.test(part)) {\n                            return true;\n                        }\n                    }\n                }\n            }\n        };\n\n        AbstractChosen.prototype.choices_count = function() {\n            var option, _i, _len, _ref;\n            if (this.selected_option_count != null) {\n                return this.selected_option_count;\n            }\n            this.selected_option_count = 0;\n            _ref = this.form_field.options;\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                option = _ref[_i];\n                if (option.selected) {\n                    this.selected_option_count += 1;\n                }\n            }\n            return this.selected_option_count;\n        };\n\n        AbstractChosen.prototype.choices_click = function(evt) {\n            evt.preventDefault();\n            if (!(this.results_showing || this.is_disabled)) {\n                return this.results_show();\n            }\n        };\n\n        AbstractChosen.prototype.keyup_checker = function(evt) {\n            var stroke, _ref;\n            stroke = (_ref = evt.which) != null ? _ref : evt.keyCode;\n            this.search_field_scale();\n            switch (stroke) {\n                case 8:\n                    if (this.is_multiple && this.backstroke_length < 1 && this.choices_count() > 0) {\n                        return this.keydown_backstroke();\n                    } else if (!this.pending_backstroke) {\n                        this.result_clear_highlight();\n                        return this.results_search();\n                    }\n                    break;\n                case 13:\n                    evt.preventDefault();\n                    if (this.results_showing) {\n                        return this.result_select(evt);\n                    }\n                    break;\n                case 27:\n                    if (this.results_showing) {\n                        this.results_hide();\n                    }\n                    return true;\n                case 9:\n                case 38:\n                case 40:\n                case 16:\n                case 91:\n                case 17:\n                    break;\n                default:\n                    return this.results_search();\n            }\n        };\n\n        AbstractChosen.prototype.clipboard_event_checker = function(evt) {\n            var _this = this;\n            return setTimeout((function() {\n                return _this.results_search();\n            }), 50);\n        };\n\n        AbstractChosen.prototype.container_width = function() {\n            if (this.options.width != null) {\n                return this.options.width;\n            } else {\n                return \"\" + this.form_field.offsetWidth + \"px\";\n            }\n        };\n\n        AbstractChosen.prototype.include_option_in_results = function(option) {\n            if (this.is_multiple && (!this.display_selected_options && option.selected)) {\n                return false;\n            }\n            if (!this.display_disabled_options && option.disabled) {\n                return false;\n            }\n            if (option.empty) {\n                return false;\n            }\n            return true;\n        };\n\n        AbstractChosen.prototype.search_results_touchstart = function(evt) {\n            this.touch_started = true;\n            return this.search_results_mouseover(evt);\n        };\n\n        AbstractChosen.prototype.search_results_touchmove = function(evt) {\n            this.touch_started = false;\n            return this.search_results_mouseout(evt);\n        };\n\n        AbstractChosen.prototype.search_results_touchend = function(evt) {\n            if (this.touch_started) {\n                return this.search_results_mouseup(evt);\n            }\n        };\n\n        AbstractChosen.prototype.outerHTML = function(element) {\n            var tmp;\n            if (element.outerHTML) {\n                return element.outerHTML;\n            }\n            tmp = document.createElement(\"div\");\n            tmp.appendChild(element);\n            return tmp.innerHTML;\n        };\n\n        AbstractChosen.browser_is_supported = function() {\n            if (window.navigator.appName === \"Microsoft Internet Explorer\") {\n                return document.documentMode >= 8;\n            }\n            if (/iP(od|hone)/i.test(window.navigator.userAgent)) {\n                return false;\n            }\n            if (/Android/i.test(window.navigator.userAgent)) {\n                if (/Mobile/i.test(window.navigator.userAgent)) {\n                    return false;\n                }\n            }\n            return true;\n        };\n\n        AbstractChosen.default_multiple_text = \"Select Some Options\";\n\n        AbstractChosen.default_single_text = \"Select an Option\";\n\n        AbstractChosen.default_no_result_text = \"No results match\";\n\n        return AbstractChosen;\n\n    })();\n\n    $ = jQuery;\n\n    $.fn.extend({\n        chosen: function(options) {\n            if (!AbstractChosen.browser_is_supported()) {\n                return this;\n            }\n            return this.each(function(input_field) {\n                var $this, chosen;\n                $this = $(this);\n                chosen = $this.data('chosen');\n                if (options === 'destroy' && chosen) {\n                    chosen.destroy();\n                } else if (!chosen) {\n                    $this.data('chosen', new Chosen(this, options));\n                }\n            });\n        }\n    });\n\n    Chosen = (function(_super) {\n        __extends(Chosen, _super);\n\n        function Chosen() {\n            _ref = Chosen.__super__.constructor.apply(this, arguments);\n            return _ref;\n        }\n\n        Chosen.prototype.setup = function() {\n            this.form_field_jq = $(this.form_field);\n            this.current_selectedIndex = this.form_field.selectedIndex;\n            return this.is_rtl = this.form_field_jq.hasClass(\"chosen-rtl\");\n        };\n\n        Chosen.prototype.set_up_html = function() {\n            var container_classes, container_props;\n            container_classes = [\"chosen-container\"];\n            container_classes.push(\"chosen-container-\" + (this.is_multiple ? \"multi\" : \"single\"));\n            if (this.inherit_select_classes && this.form_field.className) {\n                container_classes.push(this.form_field.className);\n            }\n            if (this.is_rtl) {\n                container_classes.push(\"chosen-rtl\");\n            }\n            container_props = {\n                'class': container_classes.join(' '),\n                'style': \"width: \" + (this.container_width()) + \";\",\n                'title': this.form_field.title\n            };\n            if (this.form_field.id.length) {\n                container_props.id = this.form_field.id.replace(/[^\\w]/g, '_') + \"_chosen\";\n            }\n            this.container = $(\"<div />\", container_props);\n            if (this.is_multiple) {\n                this.container.html('<ul class=\"chosen-choices\"><li class=\"search-field\"><input type=\"text\" value=\"' + this.default_text + '\" class=\"default\" autocomplete=\"off\" style=\"width:25px;\" /></li></ul><div class=\"chosen-drop\"><ul class=\"chosen-results\"></ul></div>');\n            } else {\n                this.container.html('<a class=\"chosen-single chosen-default\" tabindex=\"-1\"><span>' + this.default_text + '</span><div><b></b></div></a><div class=\"chosen-drop\"><div class=\"chosen-search\"><input type=\"text\" autocomplete=\"off\" /></div><ul class=\"chosen-results\"></ul></div>');\n            }\n            this.form_field_jq.hide().after(this.container);\n            this.dropdown = this.container.find('div.chosen-drop').first();\n            this.search_field = this.container.find('input').first();\n            this.search_results = this.container.find('ul.chosen-results').first();\n            this.search_field_scale();\n            this.search_no_results = this.container.find('li.no-results').first();\n            if (this.is_multiple) {\n                this.search_choices = this.container.find('ul.chosen-choices').first();\n                this.search_container = this.container.find('li.search-field').first();\n            } else {\n                this.search_container = this.container.find('div.chosen-search').first();\n                this.selected_item = this.container.find('.chosen-single').first();\n            }\n            this.results_build();\n            this.set_tab_index();\n            this.set_label_behavior();\n            return this.form_field_jq.trigger(\"chosen:ready\", {\n                chosen: this\n            });\n        };\n\n        Chosen.prototype.register_observers = function() {\n            var _this = this;\n            this.container.bind('mousedown.chosen', function(evt) {\n                _this.container_mousedown(evt);\n            });\n            this.container.bind('mouseup.chosen', function(evt) {\n                _this.container_mouseup(evt);\n            });\n            this.container.bind('mouseenter.chosen', function(evt) {\n                _this.mouse_enter(evt);\n            });\n            this.container.bind('mouseleave.chosen', function(evt) {\n                _this.mouse_leave(evt);\n            });\n            this.search_results.bind('mouseup.chosen', function(evt) {\n                _this.search_results_mouseup(evt);\n            });\n            this.search_results.bind('mouseover.chosen', function(evt) {\n                _this.search_results_mouseover(evt);\n            });\n            this.search_results.bind('mouseout.chosen', function(evt) {\n                _this.search_results_mouseout(evt);\n            });\n            this.search_results.bind('mousewheel.chosen DOMMouseScroll.chosen', function(evt) {\n                _this.search_results_mousewheel(evt);\n            });\n            this.search_results.bind('touchstart.chosen', function(evt) {\n                _this.search_results_touchstart(evt);\n            });\n            this.search_results.bind('touchmove.chosen', function(evt) {\n                _this.search_results_touchmove(evt);\n            });\n            this.search_results.bind('touchend.chosen', function(evt) {\n                _this.search_results_touchend(evt);\n            });\n            this.form_field_jq.bind(\"chosen:updated.chosen\", function(evt) {\n                _this.results_update_field(evt);\n            });\n            this.form_field_jq.bind(\"chosen:activate.chosen\", function(evt) {\n                _this.activate_field(evt);\n            });\n            this.form_field_jq.bind(\"chosen:open.chosen\", function(evt) {\n                _this.container_mousedown(evt);\n            });\n            this.form_field_jq.bind(\"chosen:close.chosen\", function(evt) {\n                _this.input_blur(evt);\n            });\n            this.search_field.bind('blur.chosen', function(evt) {\n                _this.input_blur(evt);\n            });\n            this.search_field.bind('keyup.chosen', function(evt) {\n                _this.keyup_checker(evt);\n            });\n            this.search_field.bind('keydown.chosen', function(evt) {\n                _this.keydown_checker(evt);\n            });\n            this.search_field.bind('focus.chosen', function(evt) {\n                _this.input_focus(evt);\n            });\n            this.search_field.bind('cut.chosen', function(evt) {\n                _this.clipboard_event_checker(evt);\n            });\n            this.search_field.bind('paste.chosen', function(evt) {\n                _this.clipboard_event_checker(evt);\n            });\n            if (this.is_multiple) {\n                return this.search_choices.bind('click.chosen', function(evt) {\n                    _this.choices_click(evt);\n                });\n            } else {\n                return this.container.bind('click.chosen', function(evt) {\n                    evt.preventDefault();\n                });\n            }\n        };\n\n        Chosen.prototype.destroy = function() {\n            $(this.container[0].ownerDocument).unbind(\"click.chosen\", this.click_test_action);\n            if (this.search_field[0].tabIndex) {\n                this.form_field_jq[0].tabIndex = this.search_field[0].tabIndex;\n            }\n            this.container.remove();\n            this.form_field_jq.removeData('chosen');\n            return this.form_field_jq.show();\n        };\n\n        Chosen.prototype.search_field_disabled = function() {\n            this.is_disabled = this.form_field_jq[0].disabled;\n            if (this.is_disabled) {\n                this.container.addClass('chosen-disabled');\n                this.search_field[0].disabled = true;\n                if (!this.is_multiple) {\n                    this.selected_item.unbind(\"focus.chosen\", this.activate_action);\n                }\n                return this.close_field();\n            } else {\n                this.container.removeClass('chosen-disabled');\n                this.search_field[0].disabled = false;\n                if (!this.is_multiple) {\n                    return this.selected_item.bind(\"focus.chosen\", this.activate_action);\n                }\n            }\n        };\n\n        Chosen.prototype.container_mousedown = function(evt) {\n            if (!this.is_disabled) {\n                if (evt && evt.type === \"mousedown\" && !this.results_showing) {\n                    evt.preventDefault();\n                }\n                if (!((evt != null) && ($(evt.target)).hasClass(\"search-choice-close\"))) {\n                    if (!this.active_field) {\n                        if (this.is_multiple) {\n                            this.search_field.val(\"\");\n                        }\n                        $(this.container[0].ownerDocument).bind('click.chosen', this.click_test_action);\n                        this.results_show();\n                    } else if (!this.is_multiple && evt && (($(evt.target)[0] === this.selected_item[0]) || $(evt.target).parents(\"a.chosen-single\").length)) {\n                        evt.preventDefault();\n                        this.results_toggle();\n                    }\n                    return this.activate_field();\n                }\n            }\n        };\n\n        Chosen.prototype.container_mouseup = function(evt) {\n            if (evt.target.nodeName === \"ABBR\" && !this.is_disabled) {\n                return this.results_reset(evt);\n            }\n        };\n\n        Chosen.prototype.search_results_mousewheel = function(evt) {\n            var delta;\n            if (evt.originalEvent) {\n                delta = -evt.originalEvent.wheelDelta || evt.originalEvent.detail;\n            }\n            if (delta != null) {\n                evt.preventDefault();\n                if (evt.type === 'DOMMouseScroll') {\n                    delta = delta * 40;\n                }\n                return this.search_results.scrollTop(delta + this.search_results.scrollTop());\n            }\n        };\n\n        Chosen.prototype.blur_test = function(evt) {\n            if (!this.active_field && this.container.hasClass(\"chosen-container-active\")) {\n                return this.close_field();\n            }\n        };\n\n        Chosen.prototype.close_field = function() {\n            $(this.container[0].ownerDocument).unbind(\"click.chosen\", this.click_test_action);\n            this.active_field = false;\n            this.results_hide();\n            this.container.removeClass(\"chosen-container-active\");\n            this.clear_backstroke();\n            this.show_search_field_default();\n            return this.search_field_scale();\n        };\n\n        Chosen.prototype.activate_field = function() {\n            this.container.addClass(\"chosen-container-active\");\n            this.active_field = true;\n            this.search_field.val(this.search_field.val());\n            return this.search_field.focus();\n        };\n\n        Chosen.prototype.test_active_click = function(evt) {\n            var active_container;\n            active_container = $(evt.target).closest('.chosen-container');\n            if (active_container.length && this.container[0] === active_container[0]) {\n                return this.active_field = true;\n            } else {\n                return this.close_field();\n            }\n        };\n\n        Chosen.prototype.results_build = function() {\n            this.parsing = true;\n            this.selected_option_count = null;\n            this.results_data = SelectParser.select_to_array(this.form_field);\n            if (this.is_multiple) {\n                this.search_choices.find(\"li.search-choice\").remove();\n            } else if (!this.is_multiple) {\n                this.single_set_selected_text();\n                if (this.disable_search || this.form_field.options.length <= this.disable_search_threshold) {\n                    this.search_field[0].readOnly = true;\n                    this.container.addClass(\"chosen-container-single-nosearch\");\n                } else {\n                    this.search_field[0].readOnly = false;\n                    this.container.removeClass(\"chosen-container-single-nosearch\");\n                }\n            }\n            this.update_results_content(this.results_option_build({\n                first: true\n            }));\n            this.search_field_disabled();\n            this.show_search_field_default();\n            this.search_field_scale();\n            return this.parsing = false;\n        };\n\n        Chosen.prototype.result_do_highlight = function(el) {\n            var high_bottom, high_top, maxHeight, visible_bottom, visible_top;\n            if (el.length) {\n                this.result_clear_highlight();\n                this.result_highlight = el;\n                this.result_highlight.addClass(\"highlighted\");\n                maxHeight = parseInt(this.search_results.css(\"maxHeight\"), 10);\n                visible_top = this.search_results.scrollTop();\n                visible_bottom = maxHeight + visible_top;\n                high_top = this.result_highlight.position().top + this.search_results.scrollTop();\n                high_bottom = high_top + this.result_highlight.outerHeight();\n                if (high_bottom >= visible_bottom) {\n                    return this.search_results.scrollTop((high_bottom - maxHeight) > 0 ? high_bottom - maxHeight : 0);\n                } else if (high_top < visible_top) {\n                    return this.search_results.scrollTop(high_top);\n                }\n            }\n        };\n\n        Chosen.prototype.result_clear_highlight = function() {\n            if (this.result_highlight) {\n                this.result_highlight.removeClass(\"highlighted\");\n            }\n            return this.result_highlight = null;\n        };\n\n        Chosen.prototype.results_show = function() {\n            if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n                this.form_field_jq.trigger(\"chosen:maxselected\", {\n                    chosen: this\n                });\n                return false;\n            }\n            this.container.addClass(\"chosen-with-drop\");\n            this.results_showing = true;\n            this.search_field.focus();\n            this.search_field.val(this.search_field.val());\n            this.winnow_results();\n            return this.form_field_jq.trigger(\"chosen:showing_dropdown\", {\n                chosen: this\n            });\n        };\n\n        Chosen.prototype.update_results_content = function(content) {\n            return this.search_results.html(content);\n        };\n\n        Chosen.prototype.results_hide = function() {\n            if (this.results_showing) {\n                this.result_clear_highlight();\n                this.container.removeClass(\"chosen-with-drop\");\n                this.form_field_jq.trigger(\"chosen:hiding_dropdown\", {\n                    chosen: this\n                });\n            }\n            return this.results_showing = false;\n        };\n\n        Chosen.prototype.set_tab_index = function(el) {\n            var ti;\n            if (this.form_field.tabIndex) {\n                ti = this.form_field.tabIndex;\n                this.form_field.tabIndex = -1;\n                return this.search_field[0].tabIndex = ti;\n            }\n        };\n\n        Chosen.prototype.set_label_behavior = function() {\n            var _this = this;\n            this.form_field_label = this.form_field_jq.parents(\"label\");\n            if (!this.form_field_label.length && this.form_field.id.length) {\n                this.form_field_label = $(\"label[for='\" + this.form_field.id + \"']\");\n            }\n            if (this.form_field_label.length > 0) {\n                return this.form_field_label.bind('click.chosen', function(evt) {\n                    if (_this.is_multiple) {\n                        return _this.container_mousedown(evt);\n                    } else {\n                        return _this.activate_field();\n                    }\n                });\n            }\n        };\n\n        Chosen.prototype.show_search_field_default = function() {\n            if (this.is_multiple && this.choices_count() < 1 && !this.active_field) {\n                this.search_field.val(this.default_text);\n                return this.search_field.addClass(\"default\");\n            } else {\n                this.search_field.val(\"\");\n                return this.search_field.removeClass(\"default\");\n            }\n        };\n\n        Chosen.prototype.search_results_mouseup = function(evt) {\n            var target;\n            target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n            if (target.length) {\n                this.result_highlight = target;\n                this.result_select(evt);\n                return this.search_field.focus();\n            }\n        };\n\n        Chosen.prototype.search_results_mouseover = function(evt) {\n            var target;\n            target = $(evt.target).hasClass(\"active-result\") ? $(evt.target) : $(evt.target).parents(\".active-result\").first();\n            if (target) {\n                return this.result_do_highlight(target);\n            }\n        };\n\n        Chosen.prototype.search_results_mouseout = function(evt) {\n            if ($(evt.target).hasClass(\"active-result\" || $(evt.target).parents('.active-result').first())) {\n                return this.result_clear_highlight();\n            }\n        };\n\n        Chosen.prototype.choice_build = function(item) {\n            var choice, close_link,\n                _this = this;\n            choice = $('<li />', {\n                \"class\": \"search-choice\"\n            }).html(\"<span>\" + item.html + \"</span>\");\n            if (item.disabled) {\n                choice.addClass('search-choice-disabled');\n            } else {\n                close_link = $('<a />', {\n                    \"class\": 'search-choice-close',\n                    'data-option-array-index': item.array_index\n                });\n                close_link.bind('click.chosen', function(evt) {\n                    return _this.choice_destroy_link_click(evt);\n                });\n                choice.append(close_link);\n            }\n            return this.search_container.before(choice);\n        };\n\n        Chosen.prototype.choice_destroy_link_click = function(evt) {\n            evt.preventDefault();\n            evt.stopPropagation();\n            if (!this.is_disabled) {\n                return this.choice_destroy($(evt.target));\n            }\n        };\n\n        Chosen.prototype.choice_destroy = function(link) {\n            if (this.result_deselect(link[0].getAttribute(\"data-option-array-index\"))) {\n                this.show_search_field_default();\n                if (this.is_multiple && this.choices_count() > 0 && this.search_field.val().length < 1) {\n                    this.results_hide();\n                }\n                link.parents('li').first().remove();\n                return this.search_field_scale();\n            }\n        };\n\n        Chosen.prototype.results_reset = function() {\n            this.reset_single_select_options();\n            this.form_field.options[0].selected = true;\n            this.single_set_selected_text();\n            this.show_search_field_default();\n            this.results_reset_cleanup();\n            this.form_field_jq.trigger(\"change\");\n            if (this.active_field) {\n                return this.results_hide();\n            }\n        };\n\n        Chosen.prototype.results_reset_cleanup = function() {\n            this.current_selectedIndex = this.form_field.selectedIndex;\n            return this.selected_item.find(\"abbr\").remove();\n        };\n\n        Chosen.prototype.result_select = function(evt) {\n            var high, item;\n            if (this.result_highlight) {\n                high = this.result_highlight;\n                this.result_clear_highlight();\n                if (this.is_multiple && this.max_selected_options <= this.choices_count()) {\n                    this.form_field_jq.trigger(\"chosen:maxselected\", {\n                        chosen: this\n                    });\n                    return false;\n                }\n                if (this.is_multiple) {\n                    high.removeClass(\"active-result\");\n                } else {\n                    this.reset_single_select_options();\n                }\n                item = this.results_data[high[0].getAttribute(\"data-option-array-index\")];\n                item.selected = true;\n                this.form_field.options[item.options_index].selected = true;\n                this.selected_option_count = null;\n                if (this.is_multiple) {\n                    this.choice_build(item);\n                } else {\n                    this.single_set_selected_text(item.text);\n                }\n                if (!((evt.metaKey || evt.ctrlKey) && this.is_multiple)) {\n                    this.results_hide();\n                }\n                this.search_field.val(\"\");\n                if (this.is_multiple || this.form_field.selectedIndex !== this.current_selectedIndex) {\n                    this.form_field_jq.trigger(\"change\", {\n                        'selected': this.form_field.options[item.options_index].value\n                    });\n                }\n                this.current_selectedIndex = this.form_field.selectedIndex;\n                return this.search_field_scale();\n            }\n        };\n\n        Chosen.prototype.single_set_selected_text = function(text) {\n            if (text == null) {\n                text = this.default_text;\n            }\n            if (text === this.default_text) {\n                this.selected_item.addClass(\"chosen-default\");\n            } else {\n                this.single_deselect_control_build();\n                this.selected_item.removeClass(\"chosen-default\");\n            }\n            return this.selected_item.find(\"span\").text(text);\n        };\n\n        Chosen.prototype.result_deselect = function(pos) {\n            var result_data;\n            result_data = this.results_data[pos];\n            if (!this.form_field.options[result_data.options_index].disabled) {\n                result_data.selected = false;\n                this.form_field.options[result_data.options_index].selected = false;\n                this.selected_option_count = null;\n                this.result_clear_highlight();\n                if (this.results_showing) {\n                    this.winnow_results();\n                }\n                this.form_field_jq.trigger(\"change\", {\n                    deselected: this.form_field.options[result_data.options_index].value\n                });\n                this.search_field_scale();\n                return true;\n            } else {\n                return false;\n            }\n        };\n\n        Chosen.prototype.single_deselect_control_build = function() {\n            if (!this.allow_single_deselect) {\n                return;\n            }\n            if (!this.selected_item.find(\"abbr\").length) {\n                this.selected_item.find(\"span\").first().after(\"<abbr class=\\\"search-choice-close\\\"></abbr>\");\n            }\n            return this.selected_item.addClass(\"chosen-single-with-deselect\");\n        };\n\n        Chosen.prototype.get_search_text = function() {\n            if (this.search_field.val() === this.default_text) {\n                return \"\";\n            } else {\n                return $('<div/>').text($.trim(this.search_field.val())).html();\n            }\n        };\n\n        Chosen.prototype.winnow_results_set_highlight = function() {\n            var do_high, selected_results;\n            selected_results = !this.is_multiple ? this.search_results.find(\".result-selected.active-result\") : [];\n            do_high = selected_results.length ? selected_results.first() : this.search_results.find(\".active-result\").first();\n            if (do_high != null) {\n                return this.result_do_highlight(do_high);\n            }\n        };\n\n        Chosen.prototype.no_results = function(terms) {\n            var no_results_html;\n            no_results_html = $('<li class=\"no-results\">' + this.results_none_found + ' \"<span></span>\"</li>');\n            no_results_html.find(\"span\").first().html(terms);\n            this.search_results.append(no_results_html);\n            return this.form_field_jq.trigger(\"chosen:no_results\", {\n                chosen: this\n            });\n        };\n\n        Chosen.prototype.no_results_clear = function() {\n            return this.search_results.find(\".no-results\").remove();\n        };\n\n        Chosen.prototype.keydown_arrow = function() {\n            var next_sib;\n            if (this.results_showing && this.result_highlight) {\n                next_sib = this.result_highlight.nextAll(\"li.active-result\").first();\n                if (next_sib) {\n                    return this.result_do_highlight(next_sib);\n                }\n            } else {\n                return this.results_show();\n            }\n        };\n\n        Chosen.prototype.keyup_arrow = function() {\n            var prev_sibs;\n            if (!this.results_showing && !this.is_multiple) {\n                return this.results_show();\n            } else if (this.result_highlight) {\n                prev_sibs = this.result_highlight.prevAll(\"li.active-result\");\n                if (prev_sibs.length) {\n                    return this.result_do_highlight(prev_sibs.first());\n                } else {\n                    if (this.choices_count() > 0) {\n                        this.results_hide();\n                    }\n                    return this.result_clear_highlight();\n                }\n            }\n        };\n\n        Chosen.prototype.keydown_backstroke = function() {\n            var next_available_destroy;\n            if (this.pending_backstroke) {\n                this.choice_destroy(this.pending_backstroke.find(\"a\").first());\n                return this.clear_backstroke();\n            } else {\n                next_available_destroy = this.search_container.siblings(\"li.search-choice\").last();\n                if (next_available_destroy.length && !next_available_destroy.hasClass(\"search-choice-disabled\")) {\n                    this.pending_backstroke = next_available_destroy;\n                    if (this.single_backstroke_delete) {\n                        return this.keydown_backstroke();\n                    } else {\n                        return this.pending_backstroke.addClass(\"search-choice-focus\");\n                    }\n                }\n            }\n        };\n\n        Chosen.prototype.clear_backstroke = function() {\n            if (this.pending_backstroke) {\n                this.pending_backstroke.removeClass(\"search-choice-focus\");\n            }\n            return this.pending_backstroke = null;\n        };\n\n        Chosen.prototype.keydown_checker = function(evt) {\n            var stroke, _ref1;\n            stroke = (_ref1 = evt.which) != null ? _ref1 : evt.keyCode;\n            this.search_field_scale();\n            if (stroke !== 8 && this.pending_backstroke) {\n                this.clear_backstroke();\n            }\n            switch (stroke) {\n                case 8:\n                    this.backstroke_length = this.search_field.val().length;\n                    break;\n                case 9:\n                    if (this.results_showing && !this.is_multiple) {\n                        this.result_select(evt);\n                    }\n                    this.mouse_on_container = false;\n                    break;\n                case 13:\n                    evt.preventDefault();\n                    break;\n                case 38:\n                    evt.preventDefault();\n                    this.keyup_arrow();\n                    break;\n                case 40:\n                    evt.preventDefault();\n                    this.keydown_arrow();\n                    break;\n            }\n        };\n\n        Chosen.prototype.search_field_scale = function() {\n            var div, f_width, h, style, style_block, styles, w, _i, _len;\n            if (this.is_multiple) {\n                h = 0;\n                w = 0;\n                style_block = \"position:absolute; left: -1000px; top: -1000px; display:none;\";\n                styles = ['font-size', 'font-style', 'font-weight', 'font-family', 'line-height', 'text-transform', 'letter-spacing'];\n                for (_i = 0, _len = styles.length; _i < _len; _i++) {\n                    style = styles[_i];\n                    style_block += style + \":\" + this.search_field.css(style) + \";\";\n                }\n                div = $('<div />', {\n                    'style': style_block\n                });\n                div.text(this.search_field.val());\n                $('body').append(div);\n                w = div.width() + 25;\n                div.remove();\n                f_width = this.container.outerWidth();\n                if (w > f_width - 10) {\n                    w = f_width - 10;\n                }\n                return this.search_field.css({\n                    'width': w + 'px'\n                });\n            }\n        };\n\n        return Chosen;\n\n    })(AbstractChosen);\n\n}).call(this);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/clockpicker/clockpicker.js",
    "content": "/*!\n * ClockPicker v{package.version} (http://weareoutman.github.io/clockpicker/)\n * Copyright 2014 Wang Shenwei.\n * Licensed under MIT (https://github.com/weareoutman/clockpicker/blob/gh-pages/LICENSE)\n */\n\n;(function(){\n\tvar $ = window.jQuery,\n\t\t$win = $(window),\n\t\t$doc = $(document),\n\t\t$body;\n\n\t// Can I use inline svg ?\n\tvar svgNS = 'http://www.w3.org/2000/svg',\n\t\tsvgSupported = 'SVGAngle' in window && (function(){\n\t\t\tvar supported,\n\t\t\t\tel = document.createElement('div');\n\t\t\tel.innerHTML = '<svg/>';\n\t\t\tsupported = (el.firstChild && el.firstChild.namespaceURI) == svgNS;\n\t\t\tel.innerHTML = '';\n\t\t\treturn supported;\n\t\t})();\n\n\t// Can I use transition ?\n\tvar transitionSupported = (function(){\n\t\tvar style = document.createElement('div').style;\n\t\treturn 'transition' in style ||\n\t\t\t'WebkitTransition' in style ||\n\t\t\t'MozTransition' in style ||\n\t\t\t'msTransition' in style ||\n\t\t\t'OTransition' in style;\n\t})();\n\n\t// Listen touch events in touch screen device, instead of mouse events in desktop.\n\tvar touchSupported = 'ontouchstart' in window,\n\t\tmousedownEvent = 'mousedown' + ( touchSupported ? ' touchstart' : ''),\n\t\tmousemoveEvent = 'mousemove.clockpicker' + ( touchSupported ? ' touchmove.clockpicker' : ''),\n\t\tmouseupEvent = 'mouseup.clockpicker' + ( touchSupported ? ' touchend.clockpicker' : '');\n\n\t// Vibrate the device if supported\n\tvar vibrate = navigator.vibrate ? 'vibrate' : navigator.webkitVibrate ? 'webkitVibrate' : null;\n\n\tfunction createSvgElement(name) {\n\t\treturn document.createElementNS(svgNS, name);\n\t}\n\n\tfunction leadingZero(num) {\n\t\treturn (num < 10 ? '0' : '') + num;\n\t}\n\n\t// Get a unique id\n\tvar idCounter = 0;\n\tfunction uniqueId(prefix) {\n\t\tvar id = ++idCounter + '';\n\t\treturn prefix ? prefix + id : id;\n\t}\n\n\t// Clock size\n\tvar dialRadius = 100,\n\t\touterRadius = 80,\n\t\t// innerRadius = 80 on 12 hour clock\n\t\tinnerRadius = 54,\n\t\ttickRadius = 13,\n\t\tdiameter = dialRadius * 2,\n\t\tduration = transitionSupported ? 350 : 1;\n\n\t// Popover template\n\tvar tpl = [\n\t\t'<div class=\"popover clockpicker-popover\">',\n\t\t\t'<div class=\"arrow\"></div>',\n\t\t\t'<div class=\"popover-title\">',\n\t\t\t\t'<span class=\"clockpicker-span-hours text-primary\"></span>',\n\t\t\t\t' : ',\n\t\t\t\t'<span class=\"clockpicker-span-minutes\"></span>',\n\t\t\t\t'<span class=\"clockpicker-span-am-pm\"></span>',\n\t\t\t'</div>',\n\t\t\t'<div class=\"popover-content\">',\n\t\t\t\t'<div class=\"clockpicker-plate\">',\n\t\t\t\t\t'<div class=\"clockpicker-canvas\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-hours\"></div>',\n\t\t\t\t\t'<div class=\"clockpicker-dial clockpicker-minutes clockpicker-dial-out\"></div>',\n\t\t\t\t'</div>',\n\t\t\t\t'<span class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'</span>',\n\t\t\t'</div>',\n\t\t'</div>'\n\t].join('');\n\n\t// ClockPicker\n\tfunction ClockPicker(element, options) {\n\t\tvar popover = $(tpl),\n\t\t\tplate = popover.find('.clockpicker-plate'),\n\t\t\thoursView = popover.find('.clockpicker-hours'),\n\t\t\tminutesView = popover.find('.clockpicker-minutes'),\n\t\t\tamPmBlock = popover.find('.clockpicker-am-pm-block'),\n\t\t\tisInput = element.prop('tagName') === 'INPUT',\n\t\t\tinput = isInput ? element : element.find('input'),\n\t\t\taddon = element.find('.input-group-addon'),\n\t\t\tself = this,\n\t\t\ttimer;\n\n\t\tthis.id = uniqueId('cp');\n\t\tthis.element = element;\n\t\tthis.options = options;\n\t\tthis.isAppended = false;\n\t\tthis.isShown = false;\n\t\tthis.currentView = 'hours';\n\t\tthis.isInput = isInput;\n\t\tthis.input = input;\n\t\tthis.addon = addon;\n\t\tthis.popover = popover;\n\t\tthis.plate = plate;\n\t\tthis.hoursView = hoursView;\n\t\tthis.minutesView = minutesView;\n\t\tthis.amPmBlock = amPmBlock;\n\t\tthis.spanHours = popover.find('.clockpicker-span-hours');\n\t\tthis.spanMinutes = popover.find('.clockpicker-span-minutes');\n\t\tthis.spanAmPm = popover.find('.clockpicker-span-am-pm');\n\t\tthis.amOrPm = \"PM\";\n\n\t\t// Setup for for 12 hour clock if option is selected\n\t\tif (options.twelvehour) {\n\n\t\t\tvar  amPmButtonsTemplate = ['<div class=\"clockpicker-am-pm-block\">',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-default clockpicker-button clockpicker-am-button\">',\n\t\t\t\t'AM</button>',\n\t\t\t\t'<button type=\"button\" class=\"btn btn-sm btn-default clockpicker-button clockpicker-pm-button\">',\n\t\t\t\t'PM</button>',\n\t\t\t\t'</div>'].join('');\n\n\t\t\tvar amPmButtons = $(amPmButtonsTemplate);\n\t\t\t//amPmButtons.appendTo(plate);\n\n\t\t\t////Not working b/c they are not shown when this runs\n\t\t\t//$('clockpicker-am-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//        self.amOrPm = \"AM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t//    });\n\t\t\t//\n\t\t\t//$('clockpicker-pm-button')\n\t\t\t//    .on(\"click\", function() {\n\t\t\t//         self.amOrPm = \"PM\";\n\t\t\t//        $('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t//    });\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-default clockpicker-button am-button\">' + \"AM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = \"AM\";\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('AM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-default clockpicker-button pm-button\">' + \"PM\" + '</button>')\n\t\t\t\t.on(\"click\", function() {\n\t\t\t\t\tself.amOrPm = 'PM';\n\t\t\t\t\t$('.clockpicker-span-am-pm').empty().append('PM');\n\t\t\t\t}).appendTo(this.amPmBlock);\n\n\t\t}\n\n\t\tif (! options.autoclose) {\n\t\t\t// If autoclose is not setted, append a button\n\t\t\t$('<button type=\"button\" class=\"btn btn-sm btn-default btn-block clockpicker-button\">' + options.donetext + '</button>')\n\t\t\t\t.click($.proxy(this.done, this))\n\t\t\t\t.appendTo(popover);\n\t\t}\n\n\t\t// Placement and arrow align - make sure they make sense.\n\t\tif ((options.placement === 'top' || options.placement === 'bottom') && (options.align === 'top' || options.align === 'bottom')) options.align = 'left';\n\t\tif ((options.placement === 'left' || options.placement === 'right') && (options.align === 'left' || options.align === 'right')) options.align = 'top';\n\n\t\tpopover.addClass(options.placement);\n\t\tpopover.addClass('clockpicker-align-' + options.align);\n\n\t\tthis.spanHours.click($.proxy(this.toggleView, this, 'hours'));\n\t\tthis.spanMinutes.click($.proxy(this.toggleView, this, 'minutes'));\n\n\t\t// Show or toggle\n\t\tinput.on('focus.clockpicker click.clockpicker', $.proxy(this.show, this));\n\t\taddon.on('click.clockpicker', $.proxy(this.toggle, this));\n\n\t\t// Build ticks\n\t\tvar tickTpl = $('<div class=\"clockpicker-tick\"></div>'),\n\t\t\ti, tick, radian, radius;\n\n\t\t// Hours view\n\t\tif (options.twelvehour) {\n\t\t\tfor (i = 1; i < 13; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tradius = outerRadius;\n\t\t\t\ttick.css('font-size', '120%');\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t} else {\n\t\t\tfor (i = 0; i < 24; i += 1) {\n\t\t\t\ttick = tickTpl.clone();\n\t\t\t\tradian = i / 6 * Math.PI;\n\t\t\t\tvar inner = i > 0 && i < 13;\n\t\t\t\tradius = inner ? innerRadius : outerRadius;\n\t\t\t\ttick.css({\n\t\t\t\t\tleft: dialRadius + Math.sin(radian) * radius - tickRadius,\n\t\t\t\t\ttop: dialRadius - Math.cos(radian) * radius - tickRadius\n\t\t\t\t});\n\t\t\t\tif (inner) {\n\t\t\t\t\ttick.css('font-size', '120%');\n\t\t\t\t}\n\t\t\t\ttick.html(i === 0 ? '00' : i);\n\t\t\t\thoursView.append(tick);\n\t\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t\t}\n\t\t}\n\n\t\t// Minutes view\n\t\tfor (i = 0; i < 60; i += 5) {\n\t\t\ttick = tickTpl.clone();\n\t\t\tradian = i / 30 * Math.PI;\n\t\t\ttick.css({\n\t\t\t\tleft: dialRadius + Math.sin(radian) * outerRadius - tickRadius,\n\t\t\t\ttop: dialRadius - Math.cos(radian) * outerRadius - tickRadius\n\t\t\t});\n\t\t\ttick.css('font-size', '120%');\n\t\t\ttick.html(leadingZero(i));\n\t\t\tminutesView.append(tick);\n\t\t\ttick.on(mousedownEvent, mousedown);\n\t\t}\n\n\t\t// Clicking on minutes view space\n\t\tplate.on(mousedownEvent, function(e){\n\t\t\tif ($(e.target).closest('.clockpicker-tick').length === 0) {\n\t\t\t\tmousedown(e, true);\n\t\t\t}\n\t\t});\n\n\t\t// Mousedown or touchstart\n\t\tfunction mousedown(e, space) {\n\t\t\tvar offset = plate.offset(),\n\t\t\t\tisTouch = /^touch/.test(e.type),\n\t\t\t\tx0 = offset.left + dialRadius,\n\t\t\t\ty0 = offset.top + dialRadius,\n\t\t\t\tdx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\tdy = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0,\n\t\t\t\tz = Math.sqrt(dx * dx + dy * dy),\n\t\t\t\tmoved = false;\n\n\t\t\t// When clicking on minutes view space, check the mouse position\n\t\t\tif (space && (z < outerRadius - tickRadius || z > outerRadius + tickRadius)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\te.preventDefault();\n\n\t\t\t// Set cursor style of body after 200ms\n\t\t\tvar movingTimer = setTimeout(function(){\n\t\t\t\t$body.addClass('clockpicker-moving');\n\t\t\t}, 200);\n\n\t\t\t// Place the canvas to top\n\t\t\tif (svgSupported) {\n\t\t\t\tplate.append(self.canvas);\n\t\t\t}\n\n\t\t\t// Clock\n\t\t\tself.setHand(dx, dy, ! space, true);\n\n\t\t\t// Mousemove on document\n\t\t\t$doc.off(mousemoveEvent).on(mousemoveEvent, function(e){\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.touches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.touches[0] : e).pageY - y0;\n\t\t\t\tif (! moved && x === dx && y === dy) {\n\t\t\t\t\t// Clicking in chrome on windows will trigger a mousemove event\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tmoved = true;\n\t\t\t\tself.setHand(x, y, false, true);\n\t\t\t});\n\n\t\t\t// Mouseup on document\n\t\t\t$doc.off(mouseupEvent).on(mouseupEvent, function(e){\n\t\t\t\t$doc.off(mouseupEvent);\n\t\t\t\te.preventDefault();\n\t\t\t\tvar isTouch = /^touch/.test(e.type),\n\t\t\t\t\tx = (isTouch ? e.originalEvent.changedTouches[0] : e).pageX - x0,\n\t\t\t\t\ty = (isTouch ? e.originalEvent.changedTouches[0] : e).pageY - y0;\n\t\t\t\tif ((space || moved) && x === dx && y === dy) {\n\t\t\t\t\tself.setHand(x, y);\n\t\t\t\t}\n\t\t\t\tif (self.currentView === 'hours') {\n\t\t\t\t\tself.toggleView('minutes', duration / 2);\n\t\t\t\t} else {\n\t\t\t\t\tif (options.autoclose) {\n\t\t\t\t\t\tself.minutesView.addClass('clockpicker-dial-out');\n\t\t\t\t\t\tsetTimeout(function(){\n\t\t\t\t\t\t\tself.done();\n\t\t\t\t\t\t}, duration / 2);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tplate.prepend(canvas);\n\n\t\t\t\t// Reset cursor style of body\n\t\t\t\tclearTimeout(movingTimer);\n\t\t\t\t$body.removeClass('clockpicker-moving');\n\n\t\t\t\t// Unbind mousemove event\n\t\t\t\t$doc.off(mousemoveEvent);\n\t\t\t});\n\t\t}\n\n\t\tif (svgSupported) {\n\t\t\t// Draw clock hands and others\n\t\t\tvar canvas = popover.find('.clockpicker-canvas'),\n\t\t\t\tsvg = createSvgElement('svg');\n\t\t\tsvg.setAttribute('class', 'clockpicker-svg');\n\t\t\tsvg.setAttribute('width', diameter);\n\t\t\tsvg.setAttribute('height', diameter);\n\t\t\tvar g = createSvgElement('g');\n\t\t\tg.setAttribute('transform', 'translate(' + dialRadius + ',' + dialRadius + ')');\n\t\t\tvar bearing = createSvgElement('circle');\n\t\t\tbearing.setAttribute('class', 'clockpicker-canvas-bearing');\n\t\t\tbearing.setAttribute('cx', 0);\n\t\t\tbearing.setAttribute('cy', 0);\n\t\t\tbearing.setAttribute('r', 2);\n\t\t\tvar hand = createSvgElement('line');\n\t\t\thand.setAttribute('x1', 0);\n\t\t\thand.setAttribute('y1', 0);\n\t\t\tvar bg = createSvgElement('circle');\n\t\t\tbg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t\tbg.setAttribute('r', tickRadius);\n\t\t\tvar fg = createSvgElement('circle');\n\t\t\tfg.setAttribute('class', 'clockpicker-canvas-fg');\n\t\t\tfg.setAttribute('r', 3.5);\n\t\t\tg.appendChild(hand);\n\t\t\tg.appendChild(bg);\n\t\t\tg.appendChild(fg);\n\t\t\tg.appendChild(bearing);\n\t\t\tsvg.appendChild(g);\n\t\t\tcanvas.append(svg);\n\n\t\t\tthis.hand = hand;\n\t\t\tthis.bg = bg;\n\t\t\tthis.fg = fg;\n\t\t\tthis.bearing = bearing;\n\t\t\tthis.g = g;\n\t\t\tthis.canvas = canvas;\n\t\t}\n\n\t\traiseCallback(this.options.init);\n\t}\n\n\tfunction raiseCallback(callbackFunction) {\n\t\tif (callbackFunction && typeof callbackFunction === \"function\") {\n\t\t\tcallbackFunction();\n\t\t}\n\t}\n\n\t// Default options\n\tClockPicker.DEFAULTS = {\n\t\t'default': '',       // default time, 'now' or '13:14' e.g.\n\t\tfromnow: 0,          // set default time to * milliseconds from now (using with default = 'now')\n\t\tplacement: 'bottom', // clock popover placement\n\t\talign: 'left',       // popover arrow align\n\t\tdonetext: '完成',    // done button text\n\t\tautoclose: false,    // auto close when minute is selected\n\t\ttwelvehour: false, // change to 12 hour AM/PM clock from 24 hour\n\t\tvibrate: true        // vibrate the device when dragging clock hand\n\t};\n\n\t// Show or hide popover\n\tClockPicker.prototype.toggle = function(){\n\t\tthis[this.isShown ? 'hide' : 'show']();\n\t};\n\n\t// Set popover position\n\tClockPicker.prototype.locate = function(){\n\t\tvar element = this.element,\n\t\t\tpopover = this.popover,\n\t\t\toffset = element.offset(),\n\t\t\twidth = element.outerWidth(),\n\t\t\theight = element.outerHeight(),\n\t\t\tplacement = this.options.placement,\n\t\t\talign = this.options.align,\n\t\t\tstyles = {},\n\t\t\tself = this;\n\n\t\tpopover.show();\n\n\t\t// Place the popover\n\t\tswitch (placement) {\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width;\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t}\n\n\t\t// Align the popover arrow\n\t\tswitch (align) {\n\t\t\tcase 'left':\n\t\t\t\tstyles.left = offset.left;\n\t\t\t\tbreak;\n\t\t\tcase 'right':\n\t\t\t\tstyles.left = offset.left + width - popover.outerWidth();\n\t\t\t\tbreak;\n\t\t\tcase 'top':\n\t\t\t\tstyles.top = offset.top;\n\t\t\t\tbreak;\n\t\t\tcase 'bottom':\n\t\t\t\tstyles.top = offset.top + height - popover.outerHeight();\n\t\t\t\tbreak;\n\t\t}\n\n\t\tpopover.css(styles);\n\t};\n\n\t// Show popover\n\tClockPicker.prototype.show = function(e){\n\t\t// Not show again\n\t\tif (this.isShown) {\n\t\t\treturn;\n\t\t}\n\n\t\traiseCallback(this.options.beforeShow);\n\n\t\tvar self = this;\n\n\t\t// Initialize\n\t\tif (! this.isAppended) {\n\t\t\t// Append popover to body\n\t\t\t$body = $(document.body).append(this.popover);\n\n\t\t\t// Reset position when resize\n\t\t\t$win.on('resize.clockpicker' + this.id, function(){\n\t\t\t\tif (self.isShown) {\n\t\t\t\t\tself.locate();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tthis.isAppended = true;\n\t\t}\n\n\t\t// Get the time\n\t\tvar value = ((this.input.prop('value') || this.options['default'] || '') + '').split(':');\n\t\tif (value[0] === 'now') {\n\t\t\tvar now = new Date(+ new Date() + this.options.fromnow);\n\t\t\tvalue = [\n\t\t\t\tnow.getHours(),\n\t\t\t\tnow.getMinutes()\n\t\t\t];\n\t\t}\n\t\tthis.hours = + value[0] || 0;\n\t\tthis.minutes = + value[1] || 0;\n\t\tthis.spanHours.html(leadingZero(this.hours));\n\t\tthis.spanMinutes.html(leadingZero(this.minutes));\n\n\t\t// Toggle to hours view\n\t\tthis.toggleView('hours');\n\n\t\t// Set position\n\t\tthis.locate();\n\n\t\tthis.isShown = true;\n\n\t\t// Hide when clicking or tabbing on any element except the clock, input and addon\n\t\t$doc.on('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id, function(e){\n\t\t\tvar target = $(e.target);\n\t\t\tif (target.closest(self.popover).length === 0 &&\n\t\t\t\t\ttarget.closest(self.addon).length === 0 &&\n\t\t\t\t\ttarget.closest(self.input).length === 0) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\t// Hide when ESC is pressed\n\t\t$doc.on('keyup.clockpicker.' + this.id, function(e){\n\t\t\tif (e.keyCode === 27) {\n\t\t\t\tself.hide();\n\t\t\t}\n\t\t});\n\n\t\traiseCallback(this.options.afterShow);\n\t};\n\n\t// Hide popover\n\tClockPicker.prototype.hide = function(){\n\t\traiseCallback(this.options.beforeHide);\n\n\t\tthis.isShown = false;\n\n\t\t// Unbinding events on document\n\t\t$doc.off('click.clockpicker.' + this.id + ' focusin.clockpicker.' + this.id);\n\t\t$doc.off('keyup.clockpicker.' + this.id);\n\n\t\tthis.popover.hide();\n\n\t\traiseCallback(this.options.afterHide);\n\t};\n\n\t// Toggle to hours or minutes view\n\tClockPicker.prototype.toggleView = function(view, delay){\n\t\tvar raiseAfterHourSelect = false;\n\t\tif (view === 'minutes' && $(this.hoursView).css(\"visibility\") === \"visible\") {\n\t\t\traiseCallback(this.options.beforeHourSelect);\n\t\t\traiseAfterHourSelect = true;\n\t\t}\n\t\tvar isHours = view === 'hours',\n\t\t\tnextView = isHours ? this.hoursView : this.minutesView,\n\t\t\thideView = isHours ? this.minutesView : this.hoursView;\n\n\t\tthis.currentView = view;\n\n\t\tthis.spanHours.toggleClass('text-primary', isHours);\n\t\tthis.spanMinutes.toggleClass('text-primary', ! isHours);\n\n\t\t// Let's make transitions\n\t\thideView.addClass('clockpicker-dial-out');\n\t\tnextView.css('visibility', 'visible').removeClass('clockpicker-dial-out');\n\n\t\t// Reset clock hand\n\t\tthis.resetClock(delay);\n\n\t\t// After transitions ended\n\t\tclearTimeout(this.toggleViewTimer);\n\t\tthis.toggleViewTimer = setTimeout(function(){\n\t\t\thideView.css('visibility', 'hidden');\n\t\t}, duration);\n\n\t\tif (raiseAfterHourSelect) {\n\t\t\traiseCallback(this.options.afterHourSelect);\n\t\t}\n\t};\n\n\t// Reset clock hand\n\tClockPicker.prototype.resetClock = function(delay){\n\t\tvar view = this.currentView,\n\t\t\tvalue = this[view],\n\t\t\tisHours = view === 'hours',\n\t\t\tunit = Math.PI / (isHours ? 6 : 30),\n\t\t\tradian = value * unit,\n\t\t\tradius = isHours && value > 0 && value < 13 ? innerRadius : outerRadius,\n\t\t\tx = Math.sin(radian) * radius,\n\t\t\ty = - Math.cos(radian) * radius,\n\t\t\tself = this;\n\t\tif (svgSupported && delay) {\n\t\t\tself.canvas.addClass('clockpicker-canvas-out');\n\t\t\tsetTimeout(function(){\n\t\t\t\tself.canvas.removeClass('clockpicker-canvas-out');\n\t\t\t\tself.setHand(x, y);\n\t\t\t}, delay);\n\t\t} else {\n\t\t\tthis.setHand(x, y);\n\t\t}\n\t};\n\n\t// Set clock hand to (x, y)\n\tClockPicker.prototype.setHand = function(x, y, roundBy5, dragging){\n\t\tvar radian = Math.atan2(x, - y),\n\t\t\tisHours = this.currentView === 'hours',\n\t\t\tunit = Math.PI / (isHours || roundBy5 ? 6 : 30),\n\t\t\tz = Math.sqrt(x * x + y * y),\n\t\t\toptions = this.options,\n\t\t\tinner = isHours && z < (outerRadius + innerRadius) / 2,\n\t\t\tradius = inner ? innerRadius : outerRadius,\n\t\t\tvalue;\n\n\t\t\tif (options.twelvehour) {\n\t\t\t\tradius = outerRadius;\n\t\t\t}\n\n\t\t// Radian should in range [0, 2PI]\n\t\tif (radian < 0) {\n\t\t\tradian = Math.PI * 2 + radian;\n\t\t}\n\n\t\t// Get the round value\n\t\tvalue = Math.round(radian / unit);\n\n\t\t// Get the round radian\n\t\tradian = value * unit;\n\n\t\t// Correct the hours or minutes\n\t\tif (options.twelvehour) {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 0) {\n\t\t\t\t\tvalue = 12;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tif (isHours) {\n\t\t\t\tif (value === 12) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t\tvalue = inner ? (value === 0 ? 12 : value) : value === 0 ? 0 : value + 12;\n\t\t\t} else {\n\t\t\t\tif (roundBy5) {\n\t\t\t\t\tvalue *= 5;\n\t\t\t\t}\n\t\t\t\tif (value === 60) {\n\t\t\t\t\tvalue = 0;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Once hours or minutes changed, vibrate the device\n\t\tif (this[this.currentView] !== value) {\n\t\t\tif (vibrate && this.options.vibrate) {\n\t\t\t\t// Do not vibrate too frequently\n\t\t\t\tif (! this.vibrateTimer) {\n\t\t\t\t\tnavigator[vibrate](10);\n\t\t\t\t\tthis.vibrateTimer = setTimeout($.proxy(function(){\n\t\t\t\t\t\tthis.vibrateTimer = null;\n\t\t\t\t\t}, this), 100);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tthis[this.currentView] = value;\n\t\tthis[isHours ? 'spanHours' : 'spanMinutes'].html(leadingZero(value));\n\n\t\t// If svg is not supported, just add an active class to the tick\n\t\tif (! svgSupported) {\n\t\t\tthis[isHours ? 'hoursView' : 'minutesView'].find('.clockpicker-tick').each(function(){\n\t\t\t\tvar tick = $(this);\n\t\t\t\ttick.toggleClass('active', value === + tick.html());\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\t// Place clock hand at the top when dragging\n\t\tif (dragging || (! isHours && value % 5)) {\n\t\t\tthis.g.insertBefore(this.hand, this.bearing);\n\t\t\tthis.g.insertBefore(this.bg, this.fg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg clockpicker-canvas-bg-trans');\n\t\t} else {\n\t\t\t// Or place it at the bottom\n\t\t\tthis.g.insertBefore(this.hand, this.bg);\n\t\t\tthis.g.insertBefore(this.fg, this.bg);\n\t\t\tthis.bg.setAttribute('class', 'clockpicker-canvas-bg');\n\t\t}\n\n\t\t// Set clock hand and others' position\n\t\tvar cx = Math.sin(radian) * radius,\n\t\t\tcy = - Math.cos(radian) * radius;\n\t\tthis.hand.setAttribute('x2', cx);\n\t\tthis.hand.setAttribute('y2', cy);\n\t\tthis.bg.setAttribute('cx', cx);\n\t\tthis.bg.setAttribute('cy', cy);\n\t\tthis.fg.setAttribute('cx', cx);\n\t\tthis.fg.setAttribute('cy', cy);\n\t};\n\n\t// Hours and minutes are selected\n\tClockPicker.prototype.done = function() {\n\t\traiseCallback(this.options.beforeDone);\n\t\tthis.hide();\n\t\tvar last = this.input.prop('value'),\n\t\t\tvalue = leadingZero(this.hours) + ':' + leadingZero(this.minutes);\n\t\tif  (this.options.twelvehour) {\n\t\t\tvalue = value + this.amOrPm;\n\t\t}\n\n\t\tthis.input.prop('value', value);\n\t\tif (value !== last) {\n\t\t\tthis.input.triggerHandler('change');\n\t\t\tif (! this.isInput) {\n\t\t\t\tthis.element.trigger('change');\n\t\t\t}\n\t\t}\n\n\t\tif (this.options.autoclose) {\n\t\t\tthis.input.trigger('blur');\n\t\t}\n\n\t\traiseCallback(this.options.afterDone);\n\t};\n\n\t// Remove clockpicker from input\n\tClockPicker.prototype.remove = function() {\n\t\tthis.element.removeData('clockpicker');\n\t\tthis.input.off('focus.clockpicker click.clockpicker');\n\t\tthis.addon.off('click.clockpicker');\n\t\tif (this.isShown) {\n\t\t\tthis.hide();\n\t\t}\n\t\tif (this.isAppended) {\n\t\t\t$win.off('resize.clockpicker' + this.id);\n\t\t\tthis.popover.remove();\n\t\t}\n\t};\n\n\t// Extends $.fn.clockpicker\n\t$.fn.clockpicker = function(option){\n\t\tvar args = Array.prototype.slice.call(arguments, 1);\n\t\treturn this.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('clockpicker');\n\t\t\tif (! data) {\n\t\t\t\tvar options = $.extend({}, ClockPicker.DEFAULTS, $this.data(), typeof option == 'object' && option);\n\t\t\t\t$this.data('clockpicker', new ClockPicker($this, options));\n\t\t\t} else {\n\t\t\t\t// Manual operatsions. show, hide, remove, e.g.\n\t\t\t\tif (typeof data[option] === 'function') {\n\t\t\t\t\tdata[option].apply(data, args);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n}());\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/codemirror/codemirror.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// This is CodeMirror (http://codemirror.net), a code editor\n// implemented in JavaScript on top of the browser's DOM.\n//\n// You can find some technical background for some of the code below\n// at http://marijnhaverbeke.nl/blog/#cm-internals .\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    module.exports = mod();\n  else if (typeof define == \"function\" && define.amd) // AMD\n    return define([], mod);\n  else // Plain browser env\n    this.CodeMirror = mod();\n})(function() {\n  \"use strict\";\n\n  // BROWSER SNIFFING\n\n  // Kludges for bugs and behavior differences that can't be feature\n  // detected are enabled based on userAgent etc sniffing.\n\n  var gecko = /gecko\\/\\d/i.test(navigator.userAgent);\n  // ie_uptoN means Internet Explorer version N or lower\n  var ie_upto10 = /MSIE \\d/.test(navigator.userAgent);\n  var ie_11up = /Trident\\/(?:[7-9]|\\d{2,})\\..*rv:(\\d+)/.exec(navigator.userAgent);\n  var ie = ie_upto10 || ie_11up;\n  var ie_version = ie && (ie_upto10 ? document.documentMode || 6 : ie_11up[1]);\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 presto = /Opera\\//.test(navigator.userAgent);\n  var safari = /Apple Computer/.test(navigator.vendor);\n  var khtml = /KHTML\\//.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 presto_version = presto && navigator.userAgent.match(/Version\\/(\\d*\\.\\d*)/);\n  if (presto_version) presto_version = Number(presto_version[1]);\n  if (presto_version && presto_version >= 15) { presto = false; webkit = true; }\n  // Some browsers use the wrong event properties to signal cmd/ctrl on OS X\n  var flipCtrlCmd = mac && (qtwebkit || presto && (presto_version == null || presto_version < 12.11));\n  var captureRightClick = gecko || (ie && ie_version >= 9);\n\n  // Optimize some code when these features are not used.\n  var sawReadOnlySpans = false, sawCollapsedSpans = false;\n\n  // EDITOR CONSTRUCTOR\n\n  // A CodeMirror instance represents an editor. This is the object\n  // that user code is usually dealing with.\n\n  function CodeMirror(place, options) {\n    if (!(this instanceof CodeMirror)) return new CodeMirror(place, options);\n\n    this.options = options = options ? copyObj(options) : {};\n    // Determine effective options based on given values and defaults.\n    copyObj(defaults, options, false);\n    setGuttersForLineNumbers(options);\n\n    var doc = options.value;\n    if (typeof doc == \"string\") doc = new Doc(doc, options.mode);\n    this.doc = doc;\n\n    var display = this.display = new Display(place, doc);\n    display.wrapper.CodeMirror = this;\n    updateGutters(this);\n    themeChanged(this);\n    if (options.lineWrapping)\n      this.display.wrapper.className += \" CodeMirror-wrap\";\n    if (options.autofocus && !mobile) focusInput(this);\n\n    this.state = {\n      keyMaps: [],  // stores maps added by addKeyMap\n      overlays: [], // highlighting overlays, as added by addOverlay\n      modeGen: 0,   // bumped when mode/overlay changes, used to invalidate highlighting info\n      overwrite: false, focused: false,\n      suppressEdits: false, // used to disable editing during key handlers when in readOnly mode\n      pasteIncoming: false, cutIncoming: false, // help recognize paste/cut edits in readInput\n      draggingText: false,\n      highlight: new Delayed() // stores highlight worker timeout\n    };\n\n    // Override magic textarea content restore that IE sometimes does\n    // on our hidden textarea on reload\n    if (ie && ie_version < 11) setTimeout(bind(resetInput, this, true), 20);\n\n    registerEventHandlers(this);\n    ensureGlobalHandlers();\n\n    startOperation(this);\n    this.curOp.forceUpdate = true;\n    attachDoc(this, doc);\n\n    if ((options.autofocus && !mobile) || activeElt() == display.input)\n      setTimeout(bind(onFocus, this), 20);\n    else\n      onBlur(this);\n\n    for (var opt in optionHandlers) if (optionHandlers.hasOwnProperty(opt))\n      optionHandlers[opt](this, options[opt], Init);\n    maybeUpdateLineNumberWidth(this);\n    for (var i = 0; i < initHooks.length; ++i) initHooks[i](this);\n    endOperation(this);\n  }\n\n  // DISPLAY CONSTRUCTOR\n\n  // The display handles the DOM integration, both for input reading\n  // and content drawing. It holds references to DOM nodes and\n  // display-related state.\n\n  function Display(place, doc) {\n    var d = this;\n\n    // The semihidden textarea that is focused when the editor is\n    // focused, and receives input.\n    var input = d.input = elt(\"textarea\", null, null, \"position: absolute; padding: 0; width: 1px; height: 1em; outline: none\");\n    // The textarea is kept positioned near the cursor to prevent the\n    // fact that it'll be scrolled into view on input from scrolling\n    // our fake cursor out of view. On webkit, when wrap=off, paste is\n    // very slow. So make the area wide instead.\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 fake scrollbar elements.\n    d.scrollbarH = elt(\"div\", [elt(\"div\", null, null, \"height: 100%; min-height: 1px\")], \"CodeMirror-hscrollbar\");\n    d.scrollbarV = elt(\"div\", [elt(\"div\", null, null, \"min-width: 1px\")], \"CodeMirror-vscrollbar\");\n    // Covers bottom-right square when both scrollbars are present.\n    d.scrollbarFiller = elt(\"div\", null, \"CodeMirror-scrollbar-filler\");\n    // Covers bottom of gutter when coverGutterNextToScrollbar is on\n    // and h scrollbar is present.\n    d.gutterFiller = elt(\"div\", null, \"CodeMirror-gutter-filler\");\n    // Will contain the actual code, positioned to cover the viewport.\n    d.lineDiv = elt(\"div\", null, \"CodeMirror-code\");\n    // Elements are added to these to represent selection and cursors.\n    d.selectionDiv = elt(\"div\", null, null, \"position: relative; z-index: 1\");\n    d.cursorDiv = elt(\"div\", null, \"CodeMirror-cursors\");\n    // A visibility: hidden element used to find the size of things.\n    d.measure = elt(\"div\", null, \"CodeMirror-measure\");\n    // When lines outside of the viewport are measured, they are drawn in this.\n    d.lineMeasure = 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.lineMeasure, d.selectionDiv, d.cursorDiv, d.lineDiv],\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 document, allowing scrolling.\n    d.sizer = elt(\"div\", [d.mover], \"CodeMirror-sizer\");\n    // Behavior of elts with overflow: auto and padding is\n    // inconsistent across browsers. This is used to ensure the\n    // scrollable area is big enough.\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    // Actual scrollable element.\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\n    // Work around IE7 z-index bug (not perfect, hence IE7 not really being supported)\n    if (ie && ie_version < 8) { d.gutters.style.zIndex = -1; d.scroller.style.paddingRight = 0; }\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    if (ie && ie_version < 8) d.scrollbarH.style.minHeight = d.scrollbarV.style.minWidth = \"18px\";\n\n    if (place.appendChild) place.appendChild(d.wrapper);\n    else place(d.wrapper);\n\n    // Current rendered range (may be bigger than the view window).\n    d.viewFrom = d.viewTo = doc.first;\n    // Information about the rendered lines.\n    d.view = [];\n    // Holds info about a single rendered line when it was rendered\n    // for measurement, while not in view.\n    d.externalMeasured = null;\n    // Empty space (in pixels) above the view\n    d.viewOffset = 0;\n    d.lastSizeC = 0;\n    d.updateLineNumbers = null;\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 line widget is\n    // added. As an optimization, line widget aligning is skipped when\n    // this is false.\n    d.alignWidgets = false;\n    // Flag that indicates whether we expect input to appear real soon\n    // now (after some event like 'keypress' or 'input') and are\n    // polling 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\n    // Tracks when resetInput has punted to just putting a short\n    // string into the textarea instead of the full 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    // True when shift is held down.\n    d.shift = false;\n\n    // Used to track whether anything happened since the context menu\n    // was opened.\n    d.selForContextMenu = null;\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      addClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      cm.display.sizer.style.minWidth = \"\";\n    } else {\n      rmClass(cm.display.wrapper, \"CodeMirror-wrap\");\n      findMaxLine(cm);\n    }\n    estimateLineHeights(cm);\n    regChange(cm);\n    clearCaches(cm);\n    setTimeout(function(){updateScrollbars(cm);}, 100);\n  }\n\n  // Returns a function that estimates the height of a line, to use as\n  // first approximation until the line becomes visible (and is thus\n  // properly measurable).\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)) return 0;\n\n      var widgetsHeight = 0;\n      if (line.widgets) for (var i = 0; i < line.widgets.length; i++) {\n        if (line.widgets[i].height) widgetsHeight += line.widgets[i].height;\n      }\n\n      if (wrapping)\n        return widgetsHeight + (Math.ceil(line.text.length / perLine) || 1) * th;\n      else\n        return widgetsHeight + 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  // Rebuild the gutter elements, ensure the margin to the left of the\n  // code matches their width.\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    updateGutterSpace(cm);\n  }\n\n  function updateGutterSpace(cm) {\n    var width = cm.display.gutters.offsetWidth;\n    cm.display.sizer.style.marginLeft = width + \"px\";\n    cm.display.scrollbarH.style.left = cm.options.fixedGutter ? width + \"px\" : 0;\n  }\n\n  // Compute the character length of a line, taking into account\n  // collapsed ranges (see markText) that might hide parts, and join\n  // other lines onto it.\n  function lineLength(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(0, true);\n      cur = 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(0, true);\n      len -= cur.text.length - found.from.ch;\n      cur = found.to.line;\n      len += cur.text.length - found.to.ch;\n    }\n    return len;\n  }\n\n  // Find the longest line in the document.\n  function findMaxLine(cm) {\n    var d = cm.display, doc = cm.doc;\n    d.maxLine = getLine(doc, doc.first);\n    d.maxLineLength = lineLength(d.maxLine);\n    d.maxLineChanged = true;\n    doc.iter(function(line) {\n      var len = lineLength(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  function hScrollbarTakesSpace(cm) {\n    return cm.display.scroller.clientHeight - cm.display.wrapper.clientHeight < scrollerCutOff - 3;\n  }\n\n  // Prepare DOM reads needed to update the scrollbars. Done in one\n  // shot to minimize update/measure roundtrips.\n  function measureForScrollbars(cm) {\n    var scroll = cm.display.scroller;\n    return {\n      clientHeight: scroll.clientHeight,\n      barHeight: cm.display.scrollbarV.clientHeight,\n      scrollWidth: scroll.scrollWidth, clientWidth: scroll.clientWidth,\n      hScrollbarTakesSpace: hScrollbarTakesSpace(cm),\n      barWidth: cm.display.scrollbarH.clientWidth,\n      docHeight: Math.round(cm.doc.height + paddingVert(cm.display))\n    };\n  }\n\n  // Re-synchronize the fake scrollbars with the actual size of the\n  // content.\n  function updateScrollbars(cm, measure) {\n    if (!measure) measure = measureForScrollbars(cm);\n    var d = cm.display, sWidth = scrollbarWidth(d.measure);\n    var scrollHeight = measure.docHeight + scrollerCutOff;\n    var needsH = measure.scrollWidth > measure.clientWidth;\n    if (needsH && measure.scrollWidth <= measure.clientWidth + 1 &&\n        sWidth > 0 && !measure.hScrollbarTakesSpace)\n      needsH = false; // (Issue #2562)\n    var needsV = scrollHeight > measure.clientHeight;\n\n    if (needsV) {\n      d.scrollbarV.style.display = \"block\";\n      d.scrollbarV.style.bottom = needsH ? sWidth + \"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 - measure.clientHeight + (measure.barHeight || 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 ? sWidth + \"px\" : \"0\";\n      d.scrollbarH.firstChild.style.width =\n        (measure.scrollWidth - measure.clientWidth + (measure.barWidth || 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 = sWidth + \"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 = sWidth + \"px\";\n      d.gutterFiller.style.width = d.gutters.offsetWidth + \"px\";\n    } else d.gutterFiller.style.display = \"\";\n\n    if (!cm.state.checkedOverlayScrollbar && measure.clientHeight > 0) {\n      if (sWidth === 0) {\n        var w = mac && !mac_geMountainLion ? \"12px\" : \"18px\";\n        d.scrollbarV.style.minWidth = d.scrollbarH.style.minHeight = w;\n        var barMouseDown = function(e) {\n          if (e_target(e) != d.scrollbarV && e_target(e) != d.scrollbarH)\n            operation(cm, onMouseDown)(e);\n        };\n        on(d.scrollbarV, \"mousedown\", barMouseDown);\n        on(d.scrollbarH, \"mousedown\", barMouseDown);\n      }\n      cm.state.checkedOverlayScrollbar = true;\n    }\n  }\n\n  // Compute the lines that are visible in a given viewport (defaults\n  // the the current scroll position). viewport may contain top,\n  // height, and ensure (see op.scrollToPos) properties.\n  function visibleLines(display, doc, viewport) {\n    var top = viewport && viewport.top != null ? Math.max(0, viewport.top) : display.scroller.scrollTop;\n    top = Math.floor(top - paddingTop(display));\n    var bottom = viewport && viewport.bottom != null ? viewport.bottom : top + display.wrapper.clientHeight;\n\n    var from = lineAtHeight(doc, top), to = lineAtHeight(doc, bottom);\n    // Ensure is a {from: {line, ch}, to: {line, ch}} object, and\n    // forces those lines into the viewport (if possible).\n    if (viewport && viewport.ensure) {\n      var ensureFrom = viewport.ensure.from.line, ensureTo = viewport.ensure.to.line;\n      if (ensureFrom < from)\n        return {from: ensureFrom,\n                to: lineAtHeight(doc, heightAtLine(getLine(doc, ensureFrom)) + display.wrapper.clientHeight)};\n      if (Math.min(ensureTo, doc.lastLine()) >= to)\n        return {from: lineAtHeight(doc, heightAtLine(getLine(doc, ensureTo)) - display.wrapper.clientHeight),\n                to: ensureTo};\n    }\n    return {from: from, to: Math.max(to, from + 1)};\n  }\n\n  // LINE NUMBERS\n\n  // Re-align line numbers and gutter marks to compensate for\n  // horizontal scrolling.\n  function alignHorizontally(cm) {\n    var display = cm.display, view = display.view;\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, left = comp + \"px\";\n    for (var i = 0; i < view.length; i++) if (!view[i].hidden) {\n      if (cm.options.fixedGutter && view[i].gutter)\n        view[i].gutter.style.left = left;\n      var align = view[i].alignable;\n      if (align) for (var j = 0; j < align.length; j++)\n        align[j].style.left = left;\n    }\n    if (cm.options.fixedGutter)\n      display.gutters.style.left = (comp + gutterW) + \"px\";\n  }\n\n  // Used to ensure that the line number gutter is still the right\n  // size for the current document size. Returns true when an update\n  // is needed.\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      updateGutterSpace(cm);\n      return true;\n    }\n    return false;\n  }\n\n  function lineNumberFor(options, i) {\n    return String(options.lineNumberFormatter(i + options.firstLineNumber));\n  }\n\n  // Computes display.scroller.scrollLeft + display.gutters.offsetWidth,\n  // but using getBoundingClientRect to get a sub-pixel-accurate\n  // result.\n  function compensateForHScroll(display) {\n    return display.scroller.getBoundingClientRect().left - display.sizer.getBoundingClientRect().left;\n  }\n\n  // DISPLAY DRAWING\n\n  function DisplayUpdate(cm, viewport, force) {\n    var display = cm.display;\n\n    this.viewport = viewport;\n    // Store some values that we'll need later (but don't want to force a relayout for)\n    this.visible = visibleLines(display, cm.doc, viewport);\n    this.editorIsHidden = !display.wrapper.offsetWidth;\n    this.wrapperHeight = display.wrapper.clientHeight;\n    this.oldViewFrom = display.viewFrom; this.oldViewTo = display.viewTo;\n    this.oldScrollerWidth = display.scroller.clientWidth;\n    this.force = force;\n    this.dims = getDimensions(cm);\n  }\n\n  // Does the actual updating of the line display. Bails out\n  // (returning false) when there is nothing to be done and forced is\n  // false.\n  function updateDisplayIfNeeded(cm, update) {\n    var display = cm.display, doc = cm.doc;\n    if (update.editorIsHidden) {\n      resetView(cm);\n      return false;\n    }\n\n    // Bail out if the visible area is already rendered and nothing changed.\n    if (!update.force &&\n        update.visible.from >= display.viewFrom && update.visible.to <= display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo) &&\n        countDirtyView(cm) == 0)\n      return false;\n\n    if (maybeUpdateLineNumberWidth(cm)) {\n      resetView(cm);\n      update.dims = getDimensions(cm);\n    }\n\n    // Compute a suitable new viewport (from & to)\n    var end = doc.first + doc.size;\n    var from = Math.max(update.visible.from - cm.options.viewportMargin, doc.first);\n    var to = Math.min(end, update.visible.to + cm.options.viewportMargin);\n    if (display.viewFrom < from && from - display.viewFrom < 20) from = Math.max(doc.first, display.viewFrom);\n    if (display.viewTo > to && display.viewTo - to < 20) to = Math.min(end, display.viewTo);\n    if (sawCollapsedSpans) {\n      from = visualLineNo(cm.doc, from);\n      to = visualLineEndNo(cm.doc, to);\n    }\n\n    var different = from != display.viewFrom || to != display.viewTo ||\n      display.lastSizeC != update.wrapperHeight;\n    adjustView(cm, from, to);\n\n    display.viewOffset = heightAtLine(getLine(cm.doc, display.viewFrom));\n    // Position the mover div to align with the current scroll position\n    cm.display.mover.style.top = display.viewOffset + \"px\";\n\n    var toUpdate = countDirtyView(cm);\n    if (!different && toUpdate == 0 && !update.force &&\n        (display.updateLineNumbers == null || display.updateLineNumbers >= display.viewTo))\n      return false;\n\n    // For big changes, we hide the enclosing element during the\n    // update, since that speeds up the operations on most browsers.\n    var focused = activeElt();\n    if (toUpdate > 4) display.lineDiv.style.display = \"none\";\n    patchDisplay(cm, display.updateLineNumbers, update.dims);\n    if (toUpdate > 4) display.lineDiv.style.display = \"\";\n    // There might have been a widget with a focused element that got\n    // hidden or updated, if so re-focus it.\n    if (focused && activeElt() != focused && focused.offsetHeight) focused.focus();\n\n    // Prevent selection and cursors from interfering with the scroll\n    // width.\n    removeChildren(display.cursorDiv);\n    removeChildren(display.selectionDiv);\n\n    if (different) {\n      display.lastSizeC = update.wrapperHeight;\n      startWorker(cm, 400);\n    }\n\n    display.updateLineNumbers = null;\n\n    return true;\n  }\n\n  function postUpdateDisplay(cm, update) {\n    var force = update.force, viewport = update.viewport;\n    for (var first = true;; first = false) {\n      if (first && cm.options.lineWrapping && update.oldScrollerWidth != cm.display.scroller.clientWidth) {\n        force = true;\n      } else {\n        force = false;\n        // Clip forced viewport to actual scrollable area.\n        if (viewport && viewport.top != null)\n          viewport = {top: Math.min(cm.doc.height + paddingVert(cm.display) - scrollerCutOff -\n                                    cm.display.scroller.clientHeight, viewport.top)};\n        // Updated line heights might result in the drawn area not\n        // actually covering the viewport. Keep looping until it does.\n        update.visible = visibleLines(cm.display, cm.doc, viewport);\n        if (update.visible.from >= cm.display.viewFrom && update.visible.to <= cm.display.viewTo)\n          break;\n      }\n      if (!updateDisplayIfNeeded(cm, update)) break;\n      updateHeightsInViewport(cm);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      setDocumentHeight(cm, barMeasure);\n      updateScrollbars(cm, barMeasure);\n    }\n\n    signalLater(cm, \"update\", cm);\n    if (cm.display.viewFrom != update.oldViewFrom || cm.display.viewTo != update.oldViewTo)\n      signalLater(cm, \"viewportChange\", cm, cm.display.viewFrom, cm.display.viewTo);\n  }\n\n  function updateDisplaySimple(cm, viewport) {\n    var update = new DisplayUpdate(cm, viewport);\n    if (updateDisplayIfNeeded(cm, update)) {\n      updateHeightsInViewport(cm);\n      postUpdateDisplay(cm, update);\n      var barMeasure = measureForScrollbars(cm);\n      updateSelection(cm);\n      setDocumentHeight(cm, barMeasure);\n      updateScrollbars(cm, barMeasure);\n    }\n  }\n\n  function setDocumentHeight(cm, measure) {\n    cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = measure.docHeight + \"px\";\n    cm.display.gutters.style.height = Math.max(measure.docHeight, measure.clientHeight - scrollerCutOff) + \"px\";\n  }\n\n  function checkForWebkitWidthBug(cm, measure) {\n    // Work around Webkit bug where it sometimes reserves space for a\n    // non-existing phantom scrollbar in the scroller (Issue #2420)\n    if (cm.display.sizer.offsetWidth + cm.display.gutters.offsetWidth < cm.display.scroller.clientWidth - 1) {\n      cm.display.sizer.style.minHeight = cm.display.heightForcer.style.top = \"0px\";\n      cm.display.gutters.style.height = measure.docHeight + \"px\";\n    }\n  }\n\n  // Read the actual heights of the rendered lines, and update their\n  // stored heights to match.\n  function updateHeightsInViewport(cm) {\n    var display = cm.display;\n    var prevBottom = display.lineDiv.offsetTop;\n    for (var i = 0; i < display.view.length; i++) {\n      var cur = display.view[i], height;\n      if (cur.hidden) continue;\n      if (ie && ie_version < 8) {\n        var bot = cur.node.offsetTop + cur.node.offsetHeight;\n        height = bot - prevBottom;\n        prevBottom = bot;\n      } else {\n        var box = cur.node.getBoundingClientRect();\n        height = box.bottom - box.top;\n      }\n      var diff = cur.line.height - height;\n      if (height < 2) height = textHeight(display);\n      if (diff > .001 || diff < -.001) {\n        updateLineHeight(cur.line, height);\n        updateWidgetHeight(cur.line);\n        if (cur.rest) for (var j = 0; j < cur.rest.length; j++)\n          updateWidgetHeight(cur.rest[j]);\n      }\n    }\n  }\n\n  // Read and store the height of line widgets associated with the\n  // given line.\n  function updateWidgetHeight(line) {\n    if (line.widgets) for (var i = 0; i < line.widgets.length; ++i)\n      line.widgets[i].height = line.widgets[i].node.offsetHeight;\n  }\n\n  // Do a bulk-read of the DOM positions and sizes needed to draw the\n  // view, so that we don't interleave reading and writing to the DOM.\n  function getDimensions(cm) {\n    var d = cm.display, left = {}, width = {};\n    var gutterLeft = d.gutters.clientLeft;\n    for (var n = d.gutters.firstChild, i = 0; n; n = n.nextSibling, ++i) {\n      left[cm.options.gutters[i]] = n.offsetLeft + n.clientLeft + gutterLeft;\n      width[cm.options.gutters[i]] = n.clientWidth;\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  // Sync the actual display DOM structure with display.view, removing\n  // nodes for lines that are no longer in view, and creating the ones\n  // that are not there yet, and updating the ones that are out of\n  // date.\n  function patchDisplay(cm, updateNumbersFrom, dims) {\n    var display = cm.display, lineNumbers = cm.options.lineNumbers;\n    var container = display.lineDiv, cur = container.firstChild;\n\n    function rm(node) {\n      var next = node.nextSibling;\n      // Works around a throw-scroll bug in OS X Webkit\n      if (webkit && mac && cm.display.currentWheelTarget == node)\n        node.style.display = \"none\";\n      else\n        node.parentNode.removeChild(node);\n      return next;\n    }\n\n    var view = display.view, lineN = display.viewFrom;\n    // Loop over the elements in the view, syncing cur (the DOM nodes\n    // in display.lineDiv) with the view as we go.\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (lineView.hidden) {\n      } else if (!lineView.node) { // Not drawn yet\n        var node = buildLineElement(cm, lineView, lineN, dims);\n        container.insertBefore(node, cur);\n      } else { // Already drawn\n        while (cur != lineView.node) cur = rm(cur);\n        var updateNumber = lineNumbers && updateNumbersFrom != null &&\n          updateNumbersFrom <= lineN && lineView.lineNumber;\n        if (lineView.changes) {\n          if (indexOf(lineView.changes, \"gutter\") > -1) updateNumber = false;\n          updateLineForChanges(cm, lineView, lineN, dims);\n        }\n        if (updateNumber) {\n          removeChildren(lineView.lineNumber);\n          lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN)));\n        }\n        cur = lineView.node.nextSibling;\n      }\n      lineN += lineView.size;\n    }\n    while (cur) cur = rm(cur);\n  }\n\n  // When an aspect of a line changes, a string is added to\n  // lineView.changes. This updates the relevant part of the line's\n  // DOM structure.\n  function updateLineForChanges(cm, lineView, lineN, dims) {\n    for (var j = 0; j < lineView.changes.length; j++) {\n      var type = lineView.changes[j];\n      if (type == \"text\") updateLineText(cm, lineView);\n      else if (type == \"gutter\") updateLineGutter(cm, lineView, lineN, dims);\n      else if (type == \"class\") updateLineClasses(lineView);\n      else if (type == \"widget\") updateLineWidgets(lineView, dims);\n    }\n    lineView.changes = null;\n  }\n\n  // Lines with gutter elements, widgets or a background class need to\n  // be wrapped, and have the extra elements added to the wrapper div\n  function ensureLineWrapped(lineView) {\n    if (lineView.node == lineView.text) {\n      lineView.node = elt(\"div\", null, null, \"position: relative\");\n      if (lineView.text.parentNode)\n        lineView.text.parentNode.replaceChild(lineView.node, lineView.text);\n      lineView.node.appendChild(lineView.text);\n      if (ie && ie_version < 8) lineView.node.style.zIndex = 2;\n    }\n    return lineView.node;\n  }\n\n  function updateLineBackground(lineView) {\n    var cls = lineView.bgClass ? lineView.bgClass + \" \" + (lineView.line.bgClass || \"\") : lineView.line.bgClass;\n    if (cls) cls += \" CodeMirror-linebackground\";\n    if (lineView.background) {\n      if (cls) lineView.background.className = cls;\n      else { lineView.background.parentNode.removeChild(lineView.background); lineView.background = null; }\n    } else if (cls) {\n      var wrap = ensureLineWrapped(lineView);\n      lineView.background = wrap.insertBefore(elt(\"div\", null, cls), wrap.firstChild);\n    }\n  }\n\n  // Wrapper around buildLineContent which will reuse the structure\n  // in display.externalMeasured when possible.\n  function getLineContent(cm, lineView) {\n    var ext = cm.display.externalMeasured;\n    if (ext && ext.line == lineView.line) {\n      cm.display.externalMeasured = null;\n      lineView.measure = ext.measure;\n      return ext.built;\n    }\n    return buildLineContent(cm, lineView);\n  }\n\n  // Redraw the line's text. Interacts with the background and text\n  // classes because the mode may output tokens that influence these\n  // classes.\n  function updateLineText(cm, lineView) {\n    var cls = lineView.text.className;\n    var built = getLineContent(cm, lineView);\n    if (lineView.text == lineView.node) lineView.node = built.pre;\n    lineView.text.parentNode.replaceChild(built.pre, lineView.text);\n    lineView.text = built.pre;\n    if (built.bgClass != lineView.bgClass || built.textClass != lineView.textClass) {\n      lineView.bgClass = built.bgClass;\n      lineView.textClass = built.textClass;\n      updateLineClasses(lineView);\n    } else if (cls) {\n      lineView.text.className = cls;\n    }\n  }\n\n  function updateLineClasses(lineView) {\n    updateLineBackground(lineView);\n    if (lineView.line.wrapClass)\n      ensureLineWrapped(lineView).className = lineView.line.wrapClass;\n    else if (lineView.node != lineView.text)\n      lineView.node.className = \"\";\n    var textClass = lineView.textClass ? lineView.textClass + \" \" + (lineView.line.textClass || \"\") : lineView.line.textClass;\n    lineView.text.className = textClass || \"\";\n  }\n\n  function updateLineGutter(cm, lineView, lineN, dims) {\n    if (lineView.gutter) {\n      lineView.node.removeChild(lineView.gutter);\n      lineView.gutter = null;\n    }\n    var markers = lineView.line.gutterMarkers;\n    if (cm.options.lineNumbers || markers) {\n      var wrap = ensureLineWrapped(lineView);\n      var gutterWrap = lineView.gutter =\n        wrap.insertBefore(elt(\"div\", null, \"CodeMirror-gutter-wrapper\", \"position: absolute; left: \" +\n                              (cm.options.fixedGutter ? dims.fixedPos : -dims.gutterTotalWidth) + \"px\"),\n                          lineView.text);\n      if (cm.options.lineNumbers && (!markers || !markers[\"CodeMirror-linenumbers\"]))\n        lineView.lineNumber = gutterWrap.appendChild(\n          elt(\"div\", lineNumberFor(cm.options, lineN),\n              \"CodeMirror-linenumber CodeMirror-gutter-elt\",\n              \"left: \" + dims.gutterLeft[\"CodeMirror-linenumbers\"] + \"px; width: \"\n              + cm.display.lineNumInnerWidth + \"px\"));\n      if (markers) 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  }\n\n  function updateLineWidgets(lineView, dims) {\n    if (lineView.alignable) lineView.alignable = null;\n    for (var node = lineView.node.firstChild, next; node; node = next) {\n      var next = node.nextSibling;\n      if (node.className == \"CodeMirror-linewidget\")\n        lineView.node.removeChild(node);\n    }\n    insertLineWidgets(lineView, dims);\n  }\n\n  // Build a line's DOM representation from scratch\n  function buildLineElement(cm, lineView, lineN, dims) {\n    var built = getLineContent(cm, lineView);\n    lineView.text = lineView.node = built.pre;\n    if (built.bgClass) lineView.bgClass = built.bgClass;\n    if (built.textClass) lineView.textClass = built.textClass;\n\n    updateLineClasses(lineView);\n    updateLineGutter(cm, lineView, lineN, dims);\n    insertLineWidgets(lineView, dims);\n    return lineView.node;\n  }\n\n  // A lineView may contain multiple logical lines (when merged by\n  // collapsed spans). The widgets for all of them need to be drawn.\n  function insertLineWidgets(lineView, dims) {\n    insertLineWidgetsFor(lineView.line, lineView, dims, true);\n    if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n      insertLineWidgetsFor(lineView.rest[i], lineView, dims, false);\n  }\n\n  function insertLineWidgetsFor(line, lineView, dims, allowAbove) {\n    if (!line.widgets) return;\n    var wrap = ensureLineWrapped(lineView);\n    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, lineView, dims);\n      if (allowAbove && widget.above)\n        wrap.insertBefore(node, lineView.gutter || lineView.text);\n      else\n        wrap.appendChild(node);\n      signalLater(widget, \"redraw\");\n    }\n  }\n\n  function positionLineWidget(widget, node, lineView, dims) {\n    if (widget.noHScroll) {\n      (lineView.alignable || (lineView.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  // POSITION OBJECT\n\n  // A Pos instance represents a position within the text.\n  var Pos = CodeMirror.Pos = function(line, ch) {\n    if (!(this instanceof Pos)) return new Pos(line, ch);\n    this.line = line; this.ch = ch;\n  };\n\n  // Compare two positions, return 0 if they are the same, a negative\n  // number when a is less, and a positive number otherwise.\n  var cmp = CodeMirror.cmpPos = function(a, b) { return a.line - b.line || a.ch - b.ch; };\n\n  function copyPos(x) {return Pos(x.line, x.ch);}\n  function maxPos(a, b) { return cmp(a, b) < 0 ? b : a; }\n  function minPos(a, b) { return cmp(a, b) < 0 ? a : b; }\n\n  // SELECTION / CURSOR\n\n  // Selection objects are immutable. A new one is created every time\n  // the selection changes. A selection is one or more non-overlapping\n  // (and non-touching) ranges, sorted, and an integer that indicates\n  // which one is the primary selection (the one that's scrolled into\n  // view, that getCursor returns, etc).\n  function Selection(ranges, primIndex) {\n    this.ranges = ranges;\n    this.primIndex = primIndex;\n  }\n\n  Selection.prototype = {\n    primary: function() { return this.ranges[this.primIndex]; },\n    equals: function(other) {\n      if (other == this) return true;\n      if (other.primIndex != this.primIndex || other.ranges.length != this.ranges.length) return false;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var here = this.ranges[i], there = other.ranges[i];\n        if (cmp(here.anchor, there.anchor) != 0 || cmp(here.head, there.head) != 0) return false;\n      }\n      return true;\n    },\n    deepCopy: function() {\n      for (var out = [], i = 0; i < this.ranges.length; i++)\n        out[i] = new Range(copyPos(this.ranges[i].anchor), copyPos(this.ranges[i].head));\n      return new Selection(out, this.primIndex);\n    },\n    somethingSelected: function() {\n      for (var i = 0; i < this.ranges.length; i++)\n        if (!this.ranges[i].empty()) return true;\n      return false;\n    },\n    contains: function(pos, end) {\n      if (!end) end = pos;\n      for (var i = 0; i < this.ranges.length; i++) {\n        var range = this.ranges[i];\n        if (cmp(end, range.from()) >= 0 && cmp(pos, range.to()) <= 0)\n          return i;\n      }\n      return -1;\n    }\n  };\n\n  function Range(anchor, head) {\n    this.anchor = anchor; this.head = head;\n  }\n\n  Range.prototype = {\n    from: function() { return minPos(this.anchor, this.head); },\n    to: function() { return maxPos(this.anchor, this.head); },\n    empty: function() {\n      return this.head.line == this.anchor.line && this.head.ch == this.anchor.ch;\n    }\n  };\n\n  // Take an unsorted, potentially overlapping set of ranges, and\n  // build a selection out of it. 'Consumes' ranges array (modifying\n  // it).\n  function normalizeSelection(ranges, primIndex) {\n    var prim = ranges[primIndex];\n    ranges.sort(function(a, b) { return cmp(a.from(), b.from()); });\n    primIndex = indexOf(ranges, prim);\n    for (var i = 1; i < ranges.length; i++) {\n      var cur = ranges[i], prev = ranges[i - 1];\n      if (cmp(prev.to(), cur.from()) >= 0) {\n        var from = minPos(prev.from(), cur.from()), to = maxPos(prev.to(), cur.to());\n        var inv = prev.empty() ? cur.from() == cur.head : prev.from() == prev.head;\n        if (i <= primIndex) --primIndex;\n        ranges.splice(--i, 2, new Range(inv ? to : from, inv ? from : to));\n      }\n    }\n    return new Selection(ranges, primIndex);\n  }\n\n  function simpleSelection(anchor, head) {\n    return new Selection([new Range(anchor, head || anchor)], 0);\n  }\n\n  // Most of the external API clips given positions to make sure they\n  // actually exist within the document.\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  function clipPosArray(doc, array) {\n    for (var out = [], i = 0; i < array.length; i++) out[i] = clipPos(doc, array[i]);\n    return out;\n  }\n\n  // SELECTION UPDATES\n\n  // The 'scroll' parameter given to many of these indicated whether\n  // the new cursor position should be scrolled into view after\n  // modifying the selection.\n\n  // If shift is held or the extend flag is set, extends a range to\n  // include a given position (and optionally a second position).\n  // Otherwise, simply returns the range between the given positions.\n  // Used for cursor motion and such.\n  function extendRange(doc, range, head, other) {\n    if (doc.cm && doc.cm.display.shift || doc.extend) {\n      var anchor = range.anchor;\n      if (other) {\n        var posBefore = cmp(head, anchor) < 0;\n        if (posBefore != (cmp(other, anchor) < 0)) {\n          anchor = head;\n          head = other;\n        } else if (posBefore != (cmp(head, other) < 0)) {\n          head = other;\n        }\n      }\n      return new Range(anchor, head);\n    } else {\n      return new Range(other || head, head);\n    }\n  }\n\n  // Extend the primary selection range, discard the rest.\n  function extendSelection(doc, head, other, options) {\n    setSelection(doc, new Selection([extendRange(doc, doc.sel.primary(), head, other)], 0), options);\n  }\n\n  // Extend all selections (pos is an array of selections with length\n  // equal the number of selections)\n  function extendSelections(doc, heads, options) {\n    for (var out = [], i = 0; i < doc.sel.ranges.length; i++)\n      out[i] = extendRange(doc, doc.sel.ranges[i], heads[i], null);\n    var newSel = normalizeSelection(out, doc.sel.primIndex);\n    setSelection(doc, newSel, options);\n  }\n\n  // Updates a single range in the selection.\n  function replaceOneSelection(doc, i, range, options) {\n    var ranges = doc.sel.ranges.slice(0);\n    ranges[i] = range;\n    setSelection(doc, normalizeSelection(ranges, doc.sel.primIndex), options);\n  }\n\n  // Reset the selection to a single range.\n  function setSimpleSelection(doc, anchor, head, options) {\n    setSelection(doc, simpleSelection(anchor, head), options);\n  }\n\n  // Give beforeSelectionChange handlers a change to influence a\n  // selection update.\n  function filterSelectionChange(doc, sel) {\n    var obj = {\n      ranges: sel.ranges,\n      update: function(ranges) {\n        this.ranges = [];\n        for (var i = 0; i < ranges.length; i++)\n          this.ranges[i] = new Range(clipPos(doc, ranges[i].anchor),\n                                     clipPos(doc, ranges[i].head));\n      }\n    };\n    signal(doc, \"beforeSelectionChange\", doc, obj);\n    if (doc.cm) signal(doc.cm, \"beforeSelectionChange\", doc.cm, obj);\n    if (obj.ranges != sel.ranges) return normalizeSelection(obj.ranges, obj.ranges.length - 1);\n    else return sel;\n  }\n\n  function setSelectionReplaceHistory(doc, sel, options) {\n    var done = doc.history.done, last = lst(done);\n    if (last && last.ranges) {\n      done[done.length - 1] = sel;\n      setSelectionNoUndo(doc, sel, options);\n    } else {\n      setSelection(doc, sel, options);\n    }\n  }\n\n  // Set a new selection.\n  function setSelection(doc, sel, options) {\n    setSelectionNoUndo(doc, sel, options);\n    addSelectionToHistory(doc, doc.sel, doc.cm ? doc.cm.curOp.id : NaN, options);\n  }\n\n  function setSelectionNoUndo(doc, sel, options) {\n    if (hasHandler(doc, \"beforeSelectionChange\") || doc.cm && hasHandler(doc.cm, \"beforeSelectionChange\"))\n      sel = filterSelectionChange(doc, sel);\n\n    var bias = options && options.bias ||\n      (cmp(sel.primary().head, doc.sel.primary().head) < 0 ? -1 : 1);\n    setSelectionInner(doc, skipAtomicInSelection(doc, sel, bias, true));\n\n    if (!(options && options.scroll === false) && doc.cm)\n      ensureCursorVisible(doc.cm);\n  }\n\n  function setSelectionInner(doc, sel) {\n    if (sel.equals(doc.sel)) return;\n\n    doc.sel = sel;\n\n    if (doc.cm) {\n      doc.cm.curOp.updateInput = doc.cm.curOp.selectionChanged = true;\n      signalCursorActivity(doc.cm);\n    }\n    signalLater(doc, \"cursorActivity\", doc);\n  }\n\n  // Verify that the selection does not partially select any atomic\n  // marked ranges.\n  function reCheckSelection(doc) {\n    setSelectionInner(doc, skipAtomicInSelection(doc, doc.sel, null, false), sel_dontScroll);\n  }\n\n  // Return a selection that does not partially select any atomic\n  // ranges.\n  function skipAtomicInSelection(doc, sel, bias, mayClear) {\n    var out;\n    for (var i = 0; i < sel.ranges.length; i++) {\n      var range = sel.ranges[i];\n      var newAnchor = skipAtomic(doc, range.anchor, bias, mayClear);\n      var newHead = skipAtomic(doc, range.head, bias, mayClear);\n      if (out || newAnchor != range.anchor || newHead != range.head) {\n        if (!out) out = sel.ranges.slice(0, i);\n        out[i] = new Range(newAnchor, newHead);\n      }\n    }\n    return out ? normalizeSelection(out, sel.primIndex) : sel;\n  }\n\n  // Ensure a given position is not inside an atomic range.\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 ? -1 : 1);\n            if (cmp(newPos, curPos) == 0) {\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  // SELECTION DRAWING\n\n  // Redraw the selection and/or cursor\n  function drawSelection(cm) {\n    var display = cm.display, doc = cm.doc, result = {};\n    var curFragment = result.cursors = document.createDocumentFragment();\n    var selFragment = result.selection = document.createDocumentFragment();\n\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      var collapsed = range.empty();\n      if (collapsed || cm.options.showCursorWhenSelecting)\n        drawSelectionCursor(cm, range, curFragment);\n      if (!collapsed)\n        drawSelectionRange(cm, range, selFragment);\n    }\n\n    // Move the hidden textarea near the cursor to prevent scrolling artifacts\n    if (cm.options.moveInputWithCursor) {\n      var headPos = cursorCoords(cm, doc.sel.primary().head, \"div\");\n      var wrapOff = display.wrapper.getBoundingClientRect(), lineOff = display.lineDiv.getBoundingClientRect();\n      result.teTop = Math.max(0, Math.min(display.wrapper.clientHeight - 10,\n                                          headPos.top + lineOff.top - wrapOff.top));\n      result.teLeft = Math.max(0, Math.min(display.wrapper.clientWidth - 10,\n                                           headPos.left + lineOff.left - wrapOff.left));\n    }\n\n    return result;\n  }\n\n  function showSelection(cm, drawn) {\n    removeChildrenAndAdd(cm.display.cursorDiv, drawn.cursors);\n    removeChildrenAndAdd(cm.display.selectionDiv, drawn.selection);\n    if (drawn.teTop != null) {\n      cm.display.inputDiv.style.top = drawn.teTop + \"px\";\n      cm.display.inputDiv.style.left = drawn.teLeft + \"px\";\n    }\n  }\n\n  function updateSelection(cm) {\n    showSelection(cm, drawSelection(cm));\n  }\n\n  // Draws a cursor for the given range\n  function drawSelectionCursor(cm, range, output) {\n    var pos = cursorCoords(cm, range.head, \"div\", null, null, !cm.options.singleCursorHeightPerLine);\n\n    var cursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor\"));\n    cursor.style.left = pos.left + \"px\";\n    cursor.style.top = pos.top + \"px\";\n    cursor.style.height = Math.max(0, pos.bottom - pos.top) * cm.options.cursorHeight + \"px\";\n\n    if (pos.other) {\n      // Secondary cursor, shown when on a 'jump' in bi-directional text\n      var otherCursor = output.appendChild(elt(\"div\", \"\\u00a0\", \"CodeMirror-cursor CodeMirror-secondarycursor\"));\n      otherCursor.style.display = \"\";\n      otherCursor.style.left = pos.other.left + \"px\";\n      otherCursor.style.top = pos.other.top + \"px\";\n      otherCursor.style.height = (pos.other.bottom - pos.other.top) * .85 + \"px\";\n    }\n  }\n\n  // Draws the given range as a highlighted selection\n  function drawSelectionRange(cm, range, output) {\n    var display = cm.display, doc = cm.doc;\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      top = Math.round(top);\n      bottom = Math.round(bottom);\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    var sFrom = range.from(), sTo = range.to();\n    if (sFrom.line == sTo.line) {\n      drawForLine(sFrom.line, sFrom.ch, sTo.ch);\n    } else {\n      var fromLine = getLine(doc, sFrom.line), toLine = getLine(doc, sTo.line);\n      var singleVLine = visualLine(fromLine) == visualLine(toLine);\n      var leftEnd = drawForLine(sFrom.line, sFrom.ch, singleVLine ? fromLine.text.length + 1 : null).end;\n      var rightStart = drawForLine(sTo.line, singleVLine ? 0 : null, sTo.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    output.appendChild(fragment);\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.cursorDiv.style.visibility = \"\";\n    if (cm.options.cursorBlinkRate > 0)\n      display.blinker = setInterval(function() {\n        display.cursorDiv.style.visibility = (on = !on) ? \"\" : \"hidden\";\n      }, cm.options.cursorBlinkRate);\n    else if (cm.options.cursorBlinkRate < 0)\n      display.cursorDiv.style.visibility = \"hidden\";\n  }\n\n  // HIGHLIGHT WORKER\n\n  function startWorker(cm, time) {\n    if (cm.doc.mode.startState && cm.doc.frontier < cm.display.viewTo)\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.viewTo) return;\n    var end = +new Date + cm.options.workTime;\n    var state = copyState(doc.mode, getStateBefore(cm, doc.frontier));\n    var changedLines = [];\n\n    doc.iter(doc.frontier, Math.min(doc.first + doc.size, cm.display.viewTo + 500), function(line) {\n      if (doc.frontier >= cm.display.viewFrom) { // Visible\n        var oldStyles = line.styles;\n        var highlighted = highlightLine(cm, line, state, true);\n        line.styles = highlighted.styles;\n        var oldCls = line.styleClasses, newCls = highlighted.classes;\n        if (newCls) line.styleClasses = newCls;\n        else if (oldCls) line.styleClasses = null;\n        var ischange = !oldStyles || oldStyles.length != line.styles.length ||\n          oldCls != newCls && (!oldCls || !newCls || oldCls.bgClass != newCls.bgClass || oldCls.textClass != newCls.textClass);\n        for (var i = 0; !ischange && i < oldStyles.length; ++i) ischange = oldStyles[i] != line.styles[i];\n        if (ischange) changedLines.push(doc.frontier);\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 (changedLines.length) runInOp(cm, function() {\n      for (var i = 0; i < changedLines.length; i++)\n        regLineChange(cm, changedLines[i], \"text\");\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.viewFrom && pos < display.viewTo;\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    var data = {left: parseInt(style.paddingLeft), right: parseInt(style.paddingRight)};\n    if (!isNaN(data.left) && !isNaN(data.right)) display.cachedPaddingH = data;\n    return data;\n  }\n\n  // Ensure the lineView.wrapping.heights array is populated. This is\n  // an array of bottom offsets for the lines that make up a drawn\n  // line. When lineWrapping is on, there might be more than one\n  // height.\n  function ensureLineHeights(cm, lineView, rect) {\n    var wrapping = cm.options.lineWrapping;\n    var curWidth = wrapping && cm.display.scroller.clientWidth;\n    if (!lineView.measure.heights || wrapping && lineView.measure.width != curWidth) {\n      var heights = lineView.measure.heights = [];\n      if (wrapping) {\n        lineView.measure.width = curWidth;\n        var rects = lineView.text.firstChild.getClientRects();\n        for (var i = 0; i < rects.length - 1; i++) {\n          var cur = rects[i], next = rects[i + 1];\n          if (Math.abs(cur.bottom - next.bottom) > 2)\n            heights.push((cur.bottom + next.top) / 2 - rect.top);\n        }\n      }\n      heights.push(rect.bottom - rect.top);\n    }\n  }\n\n  // Find a line map (mapping character offsets to text nodes) and a\n  // measurement cache for the given line number. (A line view might\n  // contain multiple lines when collapsed ranges are present.)\n  function mapFromLineView(lineView, line, lineN) {\n    if (lineView.line == line)\n      return {map: lineView.measure.map, cache: lineView.measure.cache};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineView.rest[i] == line)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i]};\n    for (var i = 0; i < lineView.rest.length; i++)\n      if (lineNo(lineView.rest[i]) > lineN)\n        return {map: lineView.measure.maps[i], cache: lineView.measure.caches[i], before: true};\n  }\n\n  // Render a line into the hidden node display.externalMeasured. Used\n  // when measurement is needed for a line that's not in the viewport.\n  function updateExternalMeasurement(cm, line) {\n    line = visualLine(line);\n    var lineN = lineNo(line);\n    var view = cm.display.externalMeasured = new LineView(cm.doc, line, lineN);\n    view.lineN = lineN;\n    var built = view.built = buildLineContent(cm, view);\n    view.text = built.pre;\n    removeChildrenAndAdd(cm.display.lineMeasure, built.pre);\n    return view;\n  }\n\n  // Get a {top, bottom, left, right} box (in line-local coordinates)\n  // for a given character.\n  function measureChar(cm, line, ch, bias) {\n    return measureCharPrepared(cm, prepareMeasureForLine(cm, line), ch, bias);\n  }\n\n  // Find a line view that corresponds to the given line number.\n  function findViewForLine(cm, lineN) {\n    if (lineN >= cm.display.viewFrom && lineN < cm.display.viewTo)\n      return cm.display.view[findViewIndex(cm, lineN)];\n    var ext = cm.display.externalMeasured;\n    if (ext && lineN >= ext.lineN && lineN < ext.lineN + ext.size)\n      return ext;\n  }\n\n  // Measurement can be split in two steps, the set-up work that\n  // applies to the whole line, and the measurement of the actual\n  // character. Functions like coordsChar, that need to do a lot of\n  // measurements in a row, can thus ensure that the set-up work is\n  // only done once.\n  function prepareMeasureForLine(cm, line) {\n    var lineN = lineNo(line);\n    var view = findViewForLine(cm, lineN);\n    if (view && !view.text)\n      view = null;\n    else if (view && view.changes)\n      updateLineForChanges(cm, view, lineN, getDimensions(cm));\n    if (!view)\n      view = updateExternalMeasurement(cm, line);\n\n    var info = mapFromLineView(view, line, lineN);\n    return {\n      line: line, view: view, rect: null,\n      map: info.map, cache: info.cache, before: info.before,\n      hasHeights: false\n    };\n  }\n\n  // Given a prepared measurement object, measures the position of an\n  // actual character (or fetches it from the cache).\n  function measureCharPrepared(cm, prepared, ch, bias, varHeight) {\n    if (prepared.before) ch = -1;\n    var key = ch + (bias || \"\"), found;\n    if (prepared.cache.hasOwnProperty(key)) {\n      found = prepared.cache[key];\n    } else {\n      if (!prepared.rect)\n        prepared.rect = prepared.view.text.getBoundingClientRect();\n      if (!prepared.hasHeights) {\n        ensureLineHeights(cm, prepared.view, prepared.rect);\n        prepared.hasHeights = true;\n      }\n      found = measureCharInner(cm, prepared, ch, bias);\n      if (!found.bogus) prepared.cache[key] = found;\n    }\n    return {left: found.left, right: found.right,\n            top: varHeight ? found.rtop : found.top,\n            bottom: varHeight ? found.rbottom : found.bottom};\n  }\n\n  var nullRect = {left: 0, right: 0, top: 0, bottom: 0};\n\n  function measureCharInner(cm, prepared, ch, bias) {\n    var map = prepared.map;\n\n    var node, start, end, collapse;\n    // First, search the line map for the text node corresponding to,\n    // or closest to, the target character.\n    for (var i = 0; i < map.length; i += 3) {\n      var mStart = map[i], mEnd = map[i + 1];\n      if (ch < mStart) {\n        start = 0; end = 1;\n        collapse = \"left\";\n      } else if (ch < mEnd) {\n        start = ch - mStart;\n        end = start + 1;\n      } else if (i == map.length - 3 || ch == mEnd && map[i + 3] > ch) {\n        end = mEnd - mStart;\n        start = end - 1;\n        if (ch >= mEnd) collapse = \"right\";\n      }\n      if (start != null) {\n        node = map[i + 2];\n        if (mStart == mEnd && bias == (node.insertLeft ? \"left\" : \"right\"))\n          collapse = bias;\n        if (bias == \"left\" && start == 0)\n          while (i && map[i - 2] == map[i - 3] && map[i - 1].insertLeft) {\n            node = map[(i -= 3) + 2];\n            collapse = \"left\";\n          }\n        if (bias == \"right\" && start == mEnd - mStart)\n          while (i < map.length - 3 && map[i + 3] == map[i + 4] && !map[i + 5].insertLeft) {\n            node = map[(i += 3) + 2];\n            collapse = \"right\";\n          }\n        break;\n      }\n    }\n\n    var rect;\n    if (node.nodeType == 3) { // If it is a text node, use a range to retrieve the coordinates.\n      for (var i = 0; i < 4; i++) { // Retry a maximum of 4 times when nonsense rectangles are returned\n        while (start && isExtendingChar(prepared.line.text.charAt(mStart + start))) --start;\n        while (mStart + end < mEnd && isExtendingChar(prepared.line.text.charAt(mStart + end))) ++end;\n        if (ie && ie_version < 9 && start == 0 && end == mEnd - mStart) {\n          rect = node.parentNode.getBoundingClientRect();\n        } else if (ie && cm.options.lineWrapping) {\n          var rects = range(node, start, end).getClientRects();\n          if (rects.length)\n            rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n          else\n            rect = nullRect;\n        } else {\n          rect = range(node, start, end).getBoundingClientRect() || nullRect;\n        }\n        if (rect.left || rect.right || start == 0) break;\n        end = start;\n        start = start - 1;\n        collapse = \"right\";\n      }\n      if (ie && ie_version < 11) rect = maybeUpdateRectForZooming(cm.display.measure, rect);\n    } else { // If it is a widget, simply get the box for the whole widget.\n      if (start > 0) collapse = bias = \"right\";\n      var rects;\n      if (cm.options.lineWrapping && (rects = node.getClientRects()).length > 1)\n        rect = rects[bias == \"right\" ? rects.length - 1 : 0];\n      else\n        rect = node.getBoundingClientRect();\n    }\n    if (ie && ie_version < 9 && !start && (!rect || !rect.left && !rect.right)) {\n      var rSpan = node.parentNode.getClientRects()[0];\n      if (rSpan)\n        rect = {left: rSpan.left, right: rSpan.left + charWidth(cm.display), top: rSpan.top, bottom: rSpan.bottom};\n      else\n        rect = nullRect;\n    }\n\n    var rtop = rect.top - prepared.rect.top, rbot = rect.bottom - prepared.rect.top;\n    var mid = (rtop + rbot) / 2;\n    var heights = prepared.view.measure.heights;\n    for (var i = 0; i < heights.length - 1; i++)\n      if (mid < heights[i]) break;\n    var top = i ? heights[i - 1] : 0, bot = heights[i];\n    var result = {left: (collapse == \"right\" ? rect.right : rect.left) - prepared.rect.left,\n                  right: (collapse == \"left\" ? rect.left : rect.right) - prepared.rect.left,\n                  top: top, bottom: bot};\n    if (!rect.left && !rect.right) result.bogus = true;\n    if (!cm.options.singleCursorHeightPerLine) { result.rtop = rtop; result.rbottom = rbot; }\n\n    return result;\n  }\n\n  // Work around problem with bounding client rects on ranges being\n  // returned incorrectly when zoomed on IE10 and below.\n  function maybeUpdateRectForZooming(measure, rect) {\n    if (!window.screen || screen.logicalXDPI == null ||\n        screen.logicalXDPI == screen.deviceXDPI || !hasBadZoomedRects(measure))\n      return rect;\n    var scaleX = screen.logicalXDPI / screen.deviceXDPI;\n    var scaleY = screen.logicalYDPI / screen.deviceYDPI;\n    return {left: rect.left * scaleX, right: rect.right * scaleX,\n            top: rect.top * scaleY, bottom: rect.bottom * scaleY};\n  }\n\n  function clearLineMeasurementCacheFor(lineView) {\n    if (lineView.measure) {\n      lineView.measure.cache = {};\n      lineView.measure.heights = null;\n      if (lineView.rest) for (var i = 0; i < lineView.rest.length; i++)\n        lineView.measure.caches[i] = {};\n    }\n  }\n\n  function clearLineMeasurementCache(cm) {\n    cm.display.externalMeasure = null;\n    removeChildren(cm.display.lineMeasure);\n    for (var i = 0; i < cm.display.view.length; i++)\n      clearLineMeasurementCacheFor(cm.display.view[i]);\n  }\n\n  function clearCaches(cm) {\n    clearLineMeasurementCache(cm);\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  // Converts a {top, bottom, left, right} box from line-local\n  // coordinates into another coordinate system. Context may be one of\n  // \"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(lineObj);\n    if (context == \"local\") yOff += paddingTop(cm.display);\n    else yOff -= cm.display.viewOffset;\n    if (context == \"page\" || context == \"window\") {\n      var lOff = cm.display.lineSpace.getBoundingClientRect();\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  // Coverts a box from \"div\" coords to another coordinate system.\n  // Context may be \"window\", \"page\", \"div\", or \"local\"/null.\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 = cm.display.sizer.getBoundingClientRect();\n      left += localBox.left;\n      top += localBox.top;\n    }\n\n    var lineSpaceBox = cm.display.lineSpace.getBoundingClientRect();\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, bias), context);\n  }\n\n  // Returns a box for a given cursor position, which may have an\n  // 'other' property containing the position of the secondary cursor\n  // on a bidi boundary.\n  function cursorCoords(cm, pos, context, lineObj, preparedMeasure, varHeight) {\n    lineObj = lineObj || getLine(cm.doc, pos.line);\n    if (!preparedMeasure) preparedMeasure = prepareMeasureForLine(cm, lineObj);\n    function get(ch, right) {\n      var m = measureCharPrepared(cm, preparedMeasure, ch, right ? \"right\" : \"left\", varHeight);\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  // Used to cheaply estimate the coordinates for a position. Used for\n  // intermediate scroll updates.\n  function estimateCoords(cm, pos) {\n    var left = 0, pos = clipPos(cm.doc, pos);\n    if (!cm.options.lineWrapping) left = charWidth(cm.display) * pos.ch;\n    var lineObj = getLine(cm.doc, pos.line);\n    var top = heightAtLine(lineObj) + paddingTop(cm.display);\n    return {left: left, right: left, top: top, bottom: top + lineObj.height};\n  }\n\n  // Positions returned by coordsChar contain some extra information.\n  // xRel is the relative x position of the input coordinates compared\n  // to the found position (so xRel > 0 means the coordinates are to\n  // the right of the character position, for example). When outside\n  // is true, that means the coordinates lie outside the line's\n  // vertical range.\n  function PosWithInfo(line, ch, outside, xRel) {\n    var pos = Pos(line, ch);\n    pos.xRel = xRel;\n    if (outside) pos.outside = true;\n    return pos;\n  }\n\n  // Compute the character position closest to the given coordinates.\n  // Input must be lineSpace-local (\"div\" coordinate system).\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 lineN = lineAtHeight(doc, y), last = doc.first + doc.size - 1;\n    if (lineN > last)\n      return PosWithInfo(doc.first + doc.size - 1, getLine(doc, last).text.length, true, 1);\n    if (x < 0) x = 0;\n\n    var lineObj = getLine(doc, lineN);\n    for (;;) {\n      var found = coordsCharInner(cm, lineObj, lineN, x, y);\n      var merged = collapsedSpanAtEnd(lineObj);\n      var mergedPos = merged && merged.find(0, true);\n      if (merged && (found.ch > mergedPos.from.ch || found.ch == mergedPos.from.ch && found.xRel > 0))\n        lineN = lineNo(lineObj = mergedPos.to.line);\n      else\n        return found;\n    }\n  }\n\n  function coordsCharInner(cm, lineObj, lineNo, x, y) {\n    var innerOff = y - heightAtLine(lineObj);\n    var wrongLine = false, adjust = 2 * cm.display.wrapper.clientWidth;\n    var preparedMeasure = prepareMeasureForLine(cm, lineObj);\n\n    function getX(ch) {\n      var sp = cursorCoords(cm, Pos(lineNo, ch), \"line\", lineObj, preparedMeasure);\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 < -1 ? -1 : xDiff > 1 ? 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  // Compute the default text height.\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  // Compute the default character width.\n  function charWidth(display) {\n    if (display.cachedCharWidth != null) return display.cachedCharWidth;\n    var anchor = elt(\"span\", \"xxxxxxxxxx\");\n    var pre = elt(\"pre\", [anchor]);\n    removeChildrenAndAdd(display.measure, pre);\n    var rect = anchor.getBoundingClientRect(), width = (rect.right - rect.left) / 10;\n    if (width > 2) display.cachedCharWidth = width;\n    return width || 10;\n  }\n\n  // OPERATIONS\n\n  // Operations are used to wrap a series of changes to the editor\n  // state in such a way that each change won't have to update the\n  // cursor and display (which would be awkward, slow, and\n  // error-prone). Instead, display updates are batched and then all\n  // combined and executed at once.\n\n  var operationGroup = null;\n\n  var nextOpId = 0;\n  // Start a new operation.\n  function startOperation(cm) {\n    cm.curOp = {\n      cm: cm,\n      viewChanged: false,      // Flag that indicates that lines might need to be redrawn\n      startHeight: cm.doc.height, // Used to detect need to update scrollbar\n      forceUpdate: false,      // Used to force a redraw\n      updateInput: null,       // Whether to reset the input textarea\n      typing: false,           // Whether this reset should be careful to leave existing text (for compositing)\n      changeObjs: null,        // Accumulated changes, for firing change events\n      cursorActivityHandlers: null, // Set of handlers to fire cursorActivity on\n      cursorActivityCalled: 0, // Tracks which cursorActivity handlers have been called already\n      selectionChanged: false, // Whether the selection needs to be redrawn\n      updateMaxLine: false,    // Set when the widest line needs to be determined anew\n      scrollLeft: null, scrollTop: null, // Intermediate scroll position, not pushed to DOM yet\n      scrollToPos: null,       // Used to scroll to a specific position\n      id: ++nextOpId           // Unique ID\n    };\n    if (operationGroup) {\n      operationGroup.ops.push(cm.curOp);\n    } else {\n      cm.curOp.ownsGroup = operationGroup = {\n        ops: [cm.curOp],\n        delayedCallbacks: []\n      };\n    }\n  }\n\n  function fireCallbacksForOps(group) {\n    // Calls delayed callbacks and cursorActivity handlers until no\n    // new ones appear\n    var callbacks = group.delayedCallbacks, i = 0;\n    do {\n      for (; i < callbacks.length; i++)\n        callbacks[i]();\n      for (var j = 0; j < group.ops.length; j++) {\n        var op = group.ops[j];\n        if (op.cursorActivityHandlers)\n          while (op.cursorActivityCalled < op.cursorActivityHandlers.length)\n            op.cursorActivityHandlers[op.cursorActivityCalled++](op.cm);\n      }\n    } while (i < callbacks.length);\n  }\n\n  // Finish an operation, updating the display and signalling delayed events\n  function endOperation(cm) {\n    var op = cm.curOp, group = op.ownsGroup;\n    if (!group) return;\n\n    try { fireCallbacksForOps(group); }\n    finally {\n      operationGroup = null;\n      for (var i = 0; i < group.ops.length; i++)\n        group.ops[i].cm.curOp = null;\n      endOperations(group);\n    }\n  }\n\n  // The DOM updates done when an operation finishes are batched so\n  // that the minimum number of relayouts are required.\n  function endOperations(group) {\n    var ops = group.ops;\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_R1(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n      endOperation_W1(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_R2(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Write DOM (maybe)\n      endOperation_W2(ops[i]);\n    for (var i = 0; i < ops.length; i++) // Read DOM\n      endOperation_finish(ops[i]);\n  }\n\n  function endOperation_R1(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updateMaxLine) findMaxLine(cm);\n\n    op.mustUpdate = op.viewChanged || op.forceUpdate || op.scrollTop != null ||\n      op.scrollToPos && (op.scrollToPos.from.line < display.viewFrom ||\n                         op.scrollToPos.to.line >= display.viewTo) ||\n      display.maxLineChanged && cm.options.lineWrapping;\n    op.update = op.mustUpdate &&\n      new DisplayUpdate(cm, op.mustUpdate && {top: op.scrollTop, ensure: op.scrollToPos}, op.forceUpdate);\n  }\n\n  function endOperation_W1(op) {\n    op.updatedDisplay = op.mustUpdate && updateDisplayIfNeeded(op.cm, op.update);\n  }\n\n  function endOperation_R2(op) {\n    var cm = op.cm, display = cm.display;\n    if (op.updatedDisplay) updateHeightsInViewport(cm);\n\n    op.barMeasure = measureForScrollbars(cm);\n\n    // If the max line changed since it was last measured, measure it,\n    // and ensure the document's width matches it.\n    // updateDisplay_W2 will use these properties to do the actual resizing\n    if (display.maxLineChanged && !cm.options.lineWrapping) {\n      op.adjustWidthTo = measureChar(cm, display.maxLine, display.maxLine.text.length).left + 3;\n      op.maxScrollLeft = Math.max(0, display.sizer.offsetLeft + op.adjustWidthTo +\n                                  scrollerCutOff - display.scroller.clientWidth);\n    }\n\n    if (op.updatedDisplay || op.selectionChanged)\n      op.newSelectionNodes = drawSelection(cm);\n  }\n\n  function endOperation_W2(op) {\n    var cm = op.cm;\n\n    if (op.adjustWidthTo != null) {\n      cm.display.sizer.style.minWidth = op.adjustWidthTo + \"px\";\n      if (op.maxScrollLeft < cm.doc.scrollLeft)\n        setScrollLeft(cm, Math.min(cm.display.scroller.scrollLeft, op.maxScrollLeft), true);\n      cm.display.maxLineChanged = false;\n    }\n\n    if (op.newSelectionNodes)\n      showSelection(cm, op.newSelectionNodes);\n    if (op.updatedDisplay)\n      setDocumentHeight(cm, op.barMeasure);\n    if (op.updatedDisplay || op.startHeight != cm.doc.height)\n      updateScrollbars(cm, op.barMeasure);\n\n    if (op.selectionChanged) restartBlink(cm);\n\n    if (cm.state.focused && op.updateInput)\n      resetInput(cm, op.typing);\n  }\n\n  function endOperation_finish(op) {\n    var cm = op.cm, display = cm.display, doc = cm.doc;\n\n    if (op.adjustWidthTo != null && Math.abs(op.barMeasure.scrollWidth - cm.display.scroller.scrollWidth) > 1)\n      updateScrollbars(cm);\n\n    if (op.updatedDisplay) postUpdateDisplay(cm, op.update);\n\n    // Abort mouse wheel delta measurement, when scrolling explicitly\n    if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos))\n      display.wheelStartX = display.wheelStartY = null;\n\n    // Propagate the scroll position to the actual DOM scroller\n    if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) {\n      var top = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop));\n      display.scroller.scrollTop = display.scrollbarV.scrollTop = doc.scrollTop = top;\n    }\n    if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) {\n      var left = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft));\n      display.scroller.scrollLeft = display.scrollbarH.scrollLeft = doc.scrollLeft = left;\n      alignHorizontally(cm);\n    }\n    // If we need to scroll a specific position into view, do so.\n    if (op.scrollToPos) {\n      var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from),\n                                     clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin);\n      if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords);\n    }\n\n    // Fire events for markers that are hidden/unidden by editing or\n    // undoing\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    if (display.wrapper.offsetHeight)\n      doc.scrollTop = cm.display.scroller.scrollTop;\n\n    // Apply workaround for two webkit bugs\n    if (op.updatedDisplay && webkit) {\n      if (cm.options.lineWrapping)\n        checkForWebkitWidthBug(cm, op.barMeasure); // (Issue #2420)\n      if (op.barMeasure.scrollWidth > op.barMeasure.clientWidth &&\n          op.barMeasure.scrollWidth < op.barMeasure.clientWidth + 1 &&\n          !hScrollbarTakesSpace(cm))\n        updateScrollbars(cm); // (Issue #2562)\n    }\n\n    // Fire change events, and delayed event handlers\n    if (op.changeObjs)\n      signal(cm, \"changes\", cm, op.changeObjs);\n  }\n\n  // Run the given function in an operation\n  function runInOp(cm, f) {\n    if (cm.curOp) return f();\n    startOperation(cm);\n    try { return f(); }\n    finally { endOperation(cm); }\n  }\n  // Wraps a function in an operation. Returns the wrapped function.\n  function operation(cm, f) {\n    return function() {\n      if (cm.curOp) return f.apply(cm, arguments);\n      startOperation(cm);\n      try { return f.apply(cm, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n  // Used to add methods to editor and doc instances, wrapping them in\n  // operations.\n  function methodOp(f) {\n    return function() {\n      if (this.curOp) return f.apply(this, arguments);\n      startOperation(this);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(this); }\n    };\n  }\n  function docMethodOp(f) {\n    return function() {\n      var cm = this.cm;\n      if (!cm || cm.curOp) return f.apply(this, arguments);\n      startOperation(cm);\n      try { return f.apply(this, arguments); }\n      finally { endOperation(cm); }\n    };\n  }\n\n  // VIEW TRACKING\n\n  // These objects are used to represent the visible (currently drawn)\n  // part of the document. A LineView may correspond to multiple\n  // logical lines, if those are connected by collapsed ranges.\n  function LineView(doc, line, lineN) {\n    // The starting line\n    this.line = line;\n    // Continuing lines, if any\n    this.rest = visualLineContinued(line);\n    // Number of logical lines in this visual line\n    this.size = this.rest ? lineNo(lst(this.rest)) - lineN + 1 : 1;\n    this.node = this.text = null;\n    this.hidden = lineIsHidden(doc, line);\n  }\n\n  // Create a range of LineView objects for the given lines.\n  function buildViewArray(cm, from, to) {\n    var array = [], nextPos;\n    for (var pos = from; pos < to; pos = nextPos) {\n      var view = new LineView(cm.doc, getLine(cm.doc, pos), pos);\n      nextPos = pos + view.size;\n      array.push(view);\n    }\n    return array;\n  }\n\n  // Updates the display.view data structure for a given change to the\n  // document. From and to are in pre-change coordinates. Lendiff is\n  // the amount of lines added or subtracted by the change. This is\n  // used for changes that span multiple lines, or change the way\n  // lines are divided into visual lines. regLineChange (below)\n  // registers single-line changes.\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    if (!lendiff) lendiff = 0;\n\n    var display = cm.display;\n    if (lendiff && to < display.viewTo &&\n        (display.updateLineNumbers == null || display.updateLineNumbers > from))\n      display.updateLineNumbers = from;\n\n    cm.curOp.viewChanged = true;\n\n    if (from >= display.viewTo) { // Change after\n      if (sawCollapsedSpans && visualLineNo(cm.doc, from) < display.viewTo)\n        resetView(cm);\n    } else if (to <= display.viewFrom) { // Change before\n      if (sawCollapsedSpans && visualLineEndNo(cm.doc, to + lendiff) > display.viewFrom) {\n        resetView(cm);\n      } else {\n        display.viewFrom += lendiff;\n        display.viewTo += lendiff;\n      }\n    } else if (from <= display.viewFrom && to >= display.viewTo) { // Full overlap\n      resetView(cm);\n    } else if (from <= display.viewFrom) { // Top overlap\n      var cut = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cut) {\n        display.view = display.view.slice(cut.index);\n        display.viewFrom = cut.lineN;\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    } else if (to >= display.viewTo) { // Bottom overlap\n      var cut = viewCuttingPoint(cm, from, from, -1);\n      if (cut) {\n        display.view = display.view.slice(0, cut.index);\n        display.viewTo = cut.lineN;\n      } else {\n        resetView(cm);\n      }\n    } else { // Gap in the middle\n      var cutTop = viewCuttingPoint(cm, from, from, -1);\n      var cutBot = viewCuttingPoint(cm, to, to + lendiff, 1);\n      if (cutTop && cutBot) {\n        display.view = display.view.slice(0, cutTop.index)\n          .concat(buildViewArray(cm, cutTop.lineN, cutBot.lineN))\n          .concat(display.view.slice(cutBot.index));\n        display.viewTo += lendiff;\n      } else {\n        resetView(cm);\n      }\n    }\n\n    var ext = display.externalMeasured;\n    if (ext) {\n      if (to < ext.lineN)\n        ext.lineN += lendiff;\n      else if (from < ext.lineN + ext.size)\n        display.externalMeasured = null;\n    }\n  }\n\n  // Register a change to a single line. Type must be one of \"text\",\n  // \"gutter\", \"class\", \"widget\"\n  function regLineChange(cm, line, type) {\n    cm.curOp.viewChanged = true;\n    var display = cm.display, ext = cm.display.externalMeasured;\n    if (ext && line >= ext.lineN && line < ext.lineN + ext.size)\n      display.externalMeasured = null;\n\n    if (line < display.viewFrom || line >= display.viewTo) return;\n    var lineView = display.view[findViewIndex(cm, line)];\n    if (lineView.node == null) return;\n    var arr = lineView.changes || (lineView.changes = []);\n    if (indexOf(arr, type) == -1) arr.push(type);\n  }\n\n  // Clear the view.\n  function resetView(cm) {\n    cm.display.viewFrom = cm.display.viewTo = cm.doc.first;\n    cm.display.view = [];\n    cm.display.viewOffset = 0;\n  }\n\n  // Find the view element corresponding to a given line. Return null\n  // when the line isn't visible.\n  function findViewIndex(cm, n) {\n    if (n >= cm.display.viewTo) return null;\n    n -= cm.display.viewFrom;\n    if (n < 0) return null;\n    var view = cm.display.view;\n    for (var i = 0; i < view.length; i++) {\n      n -= view[i].size;\n      if (n < 0) return i;\n    }\n  }\n\n  function viewCuttingPoint(cm, oldN, newN, dir) {\n    var index = findViewIndex(cm, oldN), diff, view = cm.display.view;\n    if (!sawCollapsedSpans || newN == cm.doc.first + cm.doc.size)\n      return {index: index, lineN: newN};\n    for (var i = 0, n = cm.display.viewFrom; i < index; i++)\n      n += view[i].size;\n    if (n != oldN) {\n      if (dir > 0) {\n        if (index == view.length - 1) return null;\n        diff = (n + view[index].size) - oldN;\n        index++;\n      } else {\n        diff = n - oldN;\n      }\n      oldN += diff; newN += diff;\n    }\n    while (visualLineNo(cm.doc, newN) != newN) {\n      if (index == (dir < 0 ? 0 : view.length - 1)) return null;\n      newN += dir * view[index - (dir < 0 ? 1 : 0)].size;\n      index += dir;\n    }\n    return {index: index, lineN: newN};\n  }\n\n  // Force the view to cover a given range, adding empty view element\n  // or clipping off existing ones as needed.\n  function adjustView(cm, from, to) {\n    var display = cm.display, view = display.view;\n    if (view.length == 0 || from >= display.viewTo || to <= display.viewFrom) {\n      display.view = buildViewArray(cm, from, to);\n      display.viewFrom = from;\n    } else {\n      if (display.viewFrom > from)\n        display.view = buildViewArray(cm, from, display.viewFrom).concat(display.view);\n      else if (display.viewFrom < from)\n        display.view = display.view.slice(findViewIndex(cm, from));\n      display.viewFrom = from;\n      if (display.viewTo < to)\n        display.view = display.view.concat(buildViewArray(cm, display.viewTo, to));\n      else if (display.viewTo > to)\n        display.view = display.view.slice(0, findViewIndex(cm, to));\n    }\n    display.viewTo = to;\n  }\n\n  // Count the number of lines in the view whose DOM representation is\n  // out of date (or nonexistent).\n  function countDirtyView(cm) {\n    var view = cm.display.view, dirty = 0;\n    for (var i = 0; i < view.length; i++) {\n      var lineView = view[i];\n      if (!lineView.hidden && (!lineView.node || lineView.changes)) ++dirty;\n    }\n    return dirty;\n  }\n\n  // INPUT HANDLING\n\n  // Poll for input changes, using the normal rate of polling. This\n  // runs as long as the editor is focused.\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  // When an event has just come in that is likely to add or change\n  // something in the input textarea, we poll faster, to ensure that\n  // the change appears on the screen quickly.\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  // This will be set to an array of strings when copying, so that,\n  // when pasting, we know what kind of selections the copied text\n  // was made out of.\n  var lastCopied = null;\n\n  // Read input from the textarea, and update the document to match.\n  // When something is selected, it is present in the textarea, and\n  // selected (unless it is huge, in which case a placeholder is\n  // used). When nothing is selected, the cursor sits after previously\n  // seen text (can be empty), which is stored in prevInput (we must\n  // not reset the textarea when typing, because that breaks IME).\n  function readInput(cm) {\n    var input = cm.display.input, prevInput = cm.display.prevInput, doc = cm.doc;\n    // Since this is called a *lot*, try to bail out as cheaply as\n    // possible when it is clear that nothing happened. hasSelection\n    // will be the case when there is a lot of text in the textarea,\n    // in which case reading its value would be expensive.\n    if (!cm.state.focused || (hasSelection(input) && !prevInput) || isReadOnly(cm) || cm.options.disableInput)\n      return false;\n    // See paste handler for more on the fakedLastChar kludge\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 nothing changed, bail.\n    if (text == prevInput && !cm.somethingSelected()) return false;\n    // Work around nonsensical selection resetting in IE9/10, and\n    // inexplicable appearance of private area unicode characters on\n    // some key combos in Mac (#2689).\n    if (ie && ie_version >= 9 && cm.display.inputHasSelection === text ||\n        mac && /[\\uf700-\\uf7ff]/.test(text)) {\n      resetInput(cm);\n      return false;\n    }\n\n    var withOp = !cm.curOp;\n    if (withOp) startOperation(cm);\n    cm.display.shift = false;\n\n    if (text.charCodeAt(0) == 0x200b && doc.sel == cm.display.selForContextMenu && !prevInput)\n      prevInput = \"\\u200b\";\n    // Find the part of the input that is actually new\n    var same = 0, l = Math.min(prevInput.length, text.length);\n    while (same < l && prevInput.charCodeAt(same) == text.charCodeAt(same)) ++same;\n    var inserted = text.slice(same), textLines = splitLines(inserted);\n\n    // When pasing N lines into N selections, insert one line per selection\n    var multiPaste = null;\n    if (cm.state.pasteIncoming && doc.sel.ranges.length > 1) {\n      if (lastCopied && lastCopied.join(\"\\n\") == inserted)\n        multiPaste = doc.sel.ranges.length % lastCopied.length == 0 && map(lastCopied, splitLines);\n      else if (textLines.length == doc.sel.ranges.length)\n        multiPaste = map(textLines, function(l) { return [l]; });\n    }\n\n    // Normal behavior is to insert the new text into every selection\n    for (var i = doc.sel.ranges.length - 1; i >= 0; i--) {\n      var range = doc.sel.ranges[i];\n      var from = range.from(), to = range.to();\n      // Handle deletion\n      if (same < prevInput.length)\n        from = Pos(from.line, from.ch - (prevInput.length - same));\n      // Handle overwrite\n      else if (cm.state.overwrite && range.empty() && !cm.state.pasteIncoming)\n        to = Pos(to.line, Math.min(getLine(doc, to.line).text.length, to.ch + lst(textLines).length));\n      var updateInput = cm.curOp.updateInput;\n      var changeEvent = {from: from, to: to, text: multiPaste ? multiPaste[i % multiPaste.length] : textLines,\n                         origin: cm.state.pasteIncoming ? \"paste\" : cm.state.cutIncoming ? \"cut\" : \"+input\"};\n      makeChange(cm.doc, changeEvent);\n      signalLater(cm, \"inputRead\", cm, changeEvent);\n      // When an 'electric' character is inserted, immediately trigger a reindent\n      if (inserted && !cm.state.pasteIncoming && cm.options.electricChars &&\n          cm.options.smartIndent && range.head.ch < 100 &&\n          (!i || doc.sel.ranges[i - 1].head.line != range.head.line)) {\n        var mode = cm.getModeAt(range.head);\n        var end = changeEnd(changeEvent);\n        if (mode.electricChars) {\n          for (var j = 0; j < mode.electricChars.length; j++)\n            if (inserted.indexOf(mode.electricChars.charAt(j)) > -1) {\n              indentLine(cm, end.line, \"smart\");\n              break;\n            }\n        } else if (mode.electricInput) {\n          if (mode.electricInput.test(getLine(doc, end.line).text.slice(0, end.ch)))\n            indentLine(cm, end.line, \"smart\");\n        }\n      }\n    }\n    ensureCursorVisible(cm);\n    cm.curOp.updateInput = updateInput;\n    cm.curOp.typing = true;\n\n    // Don't leave long text in the textarea, since it makes further polling slow\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  // Reset the input to correspond to the selection (or to be empty,\n  // when not typing and nothing is selected)\n  function resetInput(cm, typing) {\n    var minimal, selected, doc = cm.doc;\n    if (cm.somethingSelected()) {\n      cm.display.prevInput = \"\";\n      var range = doc.sel.primary();\n      minimal = hasCopyEvent &&\n        (range.to().line - range.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_version >= 9) cm.display.inputHasSelection = content;\n    } else if (!typing) {\n      cm.display.prevInput = cm.display.input.value = \"\";\n      if (ie && ie_version >= 9) cm.display.inputHasSelection = null;\n    }\n    cm.display.inaccurateSelection = minimal;\n  }\n\n  function focusInput(cm) {\n    if (cm.options.readOnly != \"nocursor\" && (!mobile || activeElt() != 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  // Attach the necessary event handlers when initializing the editor\n  function registerEventHandlers(cm) {\n    var d = cm.display;\n    on(d.scroller, \"mousedown\", operation(cm, onMouseDown));\n    // Older IE's will not fire a second mousedown for a double click\n    if (ie && ie_version < 11)\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 = cm.findWordAt(pos);\n        extendSelection(cm.doc, word.anchor, word.head);\n      }));\n    else\n      on(d.scroller, \"dblclick\", function(e) { signalDOMEvent(cm, e) || e_preventDefault(e); });\n    // Prevent normal selection in the editor (we handle our own)\n    on(d.lineSpace, \"selectstart\", function(e) {\n      if (!eventInWidget(d, e)) e_preventDefault(e);\n    });\n    // Some 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 these browsers.\n    if (!captureRightClick) on(d.scroller, \"contextmenu\", function(e) {onContextMenu(cm, e);});\n\n    // Sync scrolling between fake scrollbars and real scrollable\n    // area, ensure viewport is updated when scrolling.\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    // Listen to wheel events in order to try and update the viewport on time.\n    on(d.scroller, \"mousewheel\", function(e){onScrollWheel(cm, e);});\n    on(d.scroller, \"DOMMouseScroll\", function(e){onScrollWheel(cm, e);});\n\n    // Prevent clicks in the scrollbars from killing focus\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    on(d.input, \"keyup\", function(e) { onKeyUp.call(cm, e); });\n    on(d.input, \"input\", function() {\n      if (ie && ie_version >= 9 && 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)) 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      cm.state.pasteIncoming = true;\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        // The selection end needs to be set before the start, otherwise there\n        // can be an intermediate non-empty selection between the two, which\n        // can override the middle-click paste buffer on linux and cause the\n        // wrong thing to get pasted.\n        d.input.selectionEnd = end;\n        d.input.selectionStart = start;\n        cm.state.fakedLastChar = true;\n      }\n      cm.state.pasteIncoming = true;\n      fastPoll(cm);\n    });\n\n    function prepareCopyCut(e) {\n      if (cm.somethingSelected()) {\n        lastCopied = cm.getSelections();\n        if (d.inaccurateSelection) {\n          d.prevInput = \"\";\n          d.inaccurateSelection = false;\n          d.input.value = lastCopied.join(\"\\n\");\n          selectInput(d.input);\n        }\n      } else {\n        var text = [], ranges = [];\n        for (var i = 0; i < cm.doc.sel.ranges.length; i++) {\n          var line = cm.doc.sel.ranges[i].head.line;\n          var lineRange = {anchor: Pos(line, 0), head: Pos(line + 1, 0)};\n          ranges.push(lineRange);\n          text.push(cm.getRange(lineRange.anchor, lineRange.head));\n        }\n        if (e.type == \"cut\") {\n          cm.setSelections(ranges, null, sel_dontScroll);\n        } else {\n          d.prevInput = \"\";\n          d.input.value = text.join(\"\\n\");\n          selectInput(d.input);\n        }\n        lastCopied = text;\n      }\n      if (e.type == \"cut\") cm.state.cutIncoming = true;\n    }\n    on(d.input, \"cut\", prepareCopyCut);\n    on(d.input, \"copy\", prepareCopyCut);\n\n    // Needed to handle Tab key in KHTML\n    if (khtml) on(d.sizer, \"mouseup\", function() {\n      if (activeElt() == d.input) d.input.blur();\n      focusInput(cm);\n    });\n  }\n\n  // Called when the window resizes\n  function onResize(cm) {\n    // Might be a text scaling operation, clear size caches.\n    var d = cm.display;\n    d.cachedCharWidth = d.cachedTextHeight = d.cachedPaddingH = null;\n    cm.setSize();\n  }\n\n  // MOUSE EVENTS\n\n  // Return true when the given mouse event happened in a widget\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  // Given a mouse event, find the corresponding position. If liberal\n  // is false, it checks whether a gutter or scrollbar was clicked,\n  // and returns null if it was. forRect is used by rectangular\n  // selections, and tries to estimate a character position even for\n  // coordinates beyond the right of the text.\n  function posFromMouse(cm, e, liberal, forRect) {\n    var display = cm.display;\n    if (!liberal) {\n      var target = e_target(e);\n      if (target == display.scrollbarH || target == display.scrollbarV ||\n          target == display.scrollbarFiller || target == display.gutterFiller) return null;\n    }\n    var x, y, space = display.lineSpace.getBoundingClientRect();\n    // Fails unpredictably on IE[67] when mouse is dragged around quickly.\n    try { x = e.clientX - space.left; y = e.clientY - space.top; }\n    catch (e) { return null; }\n    var coords = coordsChar(cm, x, y), line;\n    if (forRect && coords.xRel == 1 && (line = getLine(cm.doc, coords.line).text).length == coords.ch) {\n      var colDiff = countColumn(line, line.length, cm.options.tabSize) - line.length;\n      coords = Pos(coords.line, Math.max(0, Math.round((x - paddingH(cm.display).left) / charWidth(cm.display)) - colDiff));\n    }\n    return coords;\n  }\n\n  // A mouse down can be a single click, double click, triple click,\n  // start of selection drag, start of text drag, new cursor\n  // (ctrl-click), rectangle drag (alt-drag), or xwin\n  // middle-click-paste. Or it might be a click on something we should\n  // not interfere with, such as a scrollbar or widget.\n  function onMouseDown(e) {\n    if (signalDOMEvent(this, e)) return;\n    var cm = this, display = cm.display;\n    display.shift = e.shiftKey;\n\n    if (eventInWidget(display, e)) {\n      if (!webkit) {\n        // Briefly turn off draggability, to allow widgets to do\n        // normal dragging things.\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 1:\n      if (start)\n        leftButtonDown(cm, e, start);\n      else if (e_target(e) == display.scroller)\n        e_preventDefault(e);\n      break;\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      break;\n    case 3:\n      if (captureRightClick) onContextMenu(cm, e);\n      break;\n    }\n  }\n\n  var lastClick, lastDoubleClick;\n  function leftButtonDown(cm, e, start) {\n    setTimeout(bind(ensureFocus, cm), 0);\n\n    var now = +new Date, type;\n    if (lastDoubleClick && lastDoubleClick.time > now - 400 && cmp(lastDoubleClick.pos, start) == 0) {\n      type = \"triple\";\n    } else if (lastClick && lastClick.time > now - 400 && cmp(lastClick.pos, start) == 0) {\n      type = \"double\";\n      lastDoubleClick = {time: now, pos: start};\n    } else {\n      type = \"single\";\n      lastClick = {time: now, pos: start};\n    }\n\n    var sel = cm.doc.sel, modifier = mac ? e.metaKey : e.ctrlKey;\n    if (cm.options.dragDrop && dragAndDrop && !isReadOnly(cm) &&\n        type == \"single\" && sel.contains(start) > -1 && sel.somethingSelected())\n      leftButtonStartDrag(cm, e, start, modifier);\n    else\n      leftButtonSelect(cm, e, start, type, modifier);\n  }\n\n  // Start a text drag. When it ends, see if any dragging actually\n  // happen, and treat as a click if it didn't.\n  function leftButtonStartDrag(cm, e, start, modifier) {\n    var display = cm.display;\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        if (!modifier)\n          extendSelection(cm.doc, start);\n        focusInput(cm);\n        // Work around unexplainable focus problem in IE9 (#2127)\n        if (ie && ie_version == 9)\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  }\n\n  // Normal selection, as opposed to text dragging.\n  function leftButtonSelect(cm, e, start, type, addNew) {\n    var display = cm.display, doc = cm.doc;\n    e_preventDefault(e);\n\n    var ourRange, ourIndex, startSel = doc.sel;\n    if (addNew && !e.shiftKey) {\n      ourIndex = doc.sel.contains(start);\n      if (ourIndex > -1)\n        ourRange = doc.sel.ranges[ourIndex];\n      else\n        ourRange = new Range(start, start);\n    } else {\n      ourRange = doc.sel.primary();\n    }\n\n    if (e.altKey) {\n      type = \"rect\";\n      if (!addNew) ourRange = new Range(start, start);\n      start = posFromMouse(cm, e, true, true);\n      ourIndex = -1;\n    } else if (type == \"double\") {\n      var word = cm.findWordAt(start);\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, word.anchor, word.head);\n      else\n        ourRange = word;\n    } else if (type == \"triple\") {\n      var line = new Range(Pos(start.line, 0), clipPos(doc, Pos(start.line + 1, 0)));\n      if (cm.display.shift || doc.extend)\n        ourRange = extendRange(doc, ourRange, line.anchor, line.head);\n      else\n        ourRange = line;\n    } else {\n      ourRange = extendRange(doc, ourRange, start);\n    }\n\n    if (!addNew) {\n      ourIndex = 0;\n      setSelection(doc, new Selection([ourRange], 0), sel_mouse);\n      startSel = doc.sel;\n    } else if (ourIndex > -1) {\n      replaceOneSelection(doc, ourIndex, ourRange, sel_mouse);\n    } else {\n      ourIndex = doc.sel.ranges.length;\n      setSelection(doc, normalizeSelection(doc.sel.ranges.concat([ourRange]), ourIndex),\n                   {scroll: false, origin: \"*mouse\"});\n    }\n\n    var lastPos = start;\n    function extendTo(pos) {\n      if (cmp(lastPos, pos) == 0) return;\n      lastPos = pos;\n\n      if (type == \"rect\") {\n        var ranges = [], tabSize = cm.options.tabSize;\n        var startCol = countColumn(getLine(doc, start.line).text, start.ch, tabSize);\n        var posCol = countColumn(getLine(doc, pos.line).text, pos.ch, tabSize);\n        var left = Math.min(startCol, posCol), right = Math.max(startCol, posCol);\n        for (var line = Math.min(start.line, pos.line), end = Math.min(cm.lastLine(), Math.max(start.line, pos.line));\n             line <= end; line++) {\n          var text = getLine(doc, line).text, leftPos = findColumn(text, left, tabSize);\n          if (left == right)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, leftPos)));\n          else if (text.length > leftPos)\n            ranges.push(new Range(Pos(line, leftPos), Pos(line, findColumn(text, right, tabSize))));\n        }\n        if (!ranges.length) ranges.push(new Range(start, start));\n        setSelection(doc, normalizeSelection(startSel.ranges.slice(0, ourIndex).concat(ranges), ourIndex),\n                     {origin: \"*mouse\", scroll: false});\n        cm.scrollIntoView(pos);\n      } else {\n        var oldRange = ourRange;\n        var anchor = oldRange.anchor, head = pos;\n        if (type != \"single\") {\n          if (type == \"double\")\n            var range = cm.findWordAt(pos);\n          else\n            var range = new Range(Pos(pos.line, 0), clipPos(doc, Pos(pos.line + 1, 0)));\n          if (cmp(range.anchor, anchor) > 0) {\n            head = range.head;\n            anchor = minPos(oldRange.from(), range.anchor);\n          } else {\n            head = range.anchor;\n            anchor = maxPos(oldRange.to(), range.head);\n          }\n        }\n        var ranges = startSel.ranges.slice(0);\n        ranges[ourIndex] = new Range(clipPos(doc, anchor), head);\n        setSelection(doc, normalizeSelection(ranges, ourIndex), sel_mouse);\n      }\n    }\n\n    var editorSize = display.wrapper.getBoundingClientRect();\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, type == \"rect\");\n      if (!cur) return;\n      if (cmp(cur, lastPos) != 0) {\n        ensureFocus(cm);\n        extendTo(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      doc.history.lastSelOrigin = null;\n    }\n\n    var move = operation(cm, function(e) {\n      if (!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  // Determines whether an event happened in the gutter, and fires the\n  // handlers for the corresponding event.\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(cm.display.gutters.getBoundingClientRect().right)) return false;\n    if (prevent) e_preventDefault(e);\n\n    var display = cm.display;\n    var lineBox = display.lineDiv.getBoundingClientRect();\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 && g.getBoundingClientRect().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 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))\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    // Might be a file drop, in which case we simply extract the text\n    // and insert it.\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 = operation(cm, function() {\n          text[i] = reader.result;\n          if (++read == n) {\n            pos = clipPos(cm.doc, pos);\n            var change = {from: pos, to: pos, text: splitLines(text.join(\"\\n\")), origin: \"paste\"};\n            makeChange(cm.doc, change);\n            setSelectionReplaceHistory(cm.doc, simpleSelection(pos, changeEnd(change)));\n          }\n        });\n        reader.readAsText(file);\n      };\n      for (var i = 0; i < n; ++i) loadFile(files[i], i);\n    } else { // Normal drop\n      // Don't do a replace if the drop happened inside of the selected text.\n      if (cm.state.draggingText && cm.doc.sel.contains(pos) > -1) {\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          if (cm.state.draggingText && !(mac ? e.metaKey : e.ctrlKey))\n            var selected = cm.listSelections();\n          setSelectionNoUndo(cm.doc, simpleSelection(pos, pos));\n          if (selected) for (var i = 0; i < selected.length; ++i)\n            replaceRange(cm.doc, \"\", selected[i].anchor, selected[i].head, \"drag\");\n          cm.replaceSelection(text, \"around\", \"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    e.dataTransfer.setData(\"Text\", cm.getSelection());\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 (presto) {\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 (presto) img.parentNode.removeChild(img);\n    }\n  }\n\n  // SCROLL EVENTS\n\n  // Sync the scrollable area and scrollbars, ensure the viewport\n  // covers the visible area.\n  function setScrollTop(cm, val) {\n    if (Math.abs(cm.doc.scrollTop - val) < 2) return;\n    cm.doc.scrollTop = val;\n    if (!gecko) updateDisplaySimple(cm, {top: 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) updateDisplaySimple(cm);\n    startWorker(cm, 100);\n  }\n  // Sync scroller and scrollbar, ensure the gutter elements are\n  // aligned.\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      outer: for (var cur = e.target, view = display.view; cur != scroll; cur = cur.parentNode) {\n        for (var i = 0; i < view.length; i++) {\n          if (view[i].node == cur) {\n            cm.display.currentWheelTarget = cur;\n            break outer;\n          }\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 && !presto && 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    // 'Project' the visible viewport to cover the area that is being\n    // scrolled into view (if we know enough to estimate it).\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      updateDisplaySimple(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  // KEY EVENTS\n\n  // Run a handler that was bound to a key.\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 prevShift = cm.display.shift, done = false;\n    try {\n      if (isReadOnly(cm)) cm.state.suppressEdits = true;\n      if (dropShift) cm.display.shift = false;\n      done = bound(cm) != Pass;\n    } finally {\n      cm.display.shift = prevShift;\n      cm.state.suppressEdits = false;\n    }\n    return done;\n  }\n\n  // Collect the currently active keymaps.\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  // Handle a key from the keydown event.\n  function handleKeyBinding(cm, e) {\n    // Handle automatic 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      signalLater(cm, \"keyHandled\", cm, name, e);\n    }\n    return handled;\n  }\n\n  // Handle a key from the keypress event\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  var lastStoppedKey = null;\n  function onKeyDown(e) {\n    var cm = this;\n    ensureFocus(cm);\n    if (signalDOMEvent(cm, e)) return;\n    // IE does strange things with escape.\n    if (ie && ie_version < 11 && e.keyCode == 27) e.returnValue = false;\n    var code = e.keyCode;\n    cm.display.shift = code == 16 || e.shiftKey;\n    var handled = handleKeyBinding(cm, e);\n    if (presto) {\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(\"\", null, \"cut\");\n    }\n\n    // Turn mouse into crosshair when Alt is held on Mac.\n    if (code == 18 && !/\\bCodeMirror-crosshair\\b/.test(cm.display.lineDiv.className))\n      showCrossHair(cm);\n  }\n\n  function showCrossHair(cm) {\n    var lineDiv = cm.display.lineDiv;\n    addClass(lineDiv, \"CodeMirror-crosshair\");\n\n    function up(e) {\n      if (e.keyCode == 18 || !e.altKey) {\n        rmClass(lineDiv, \"CodeMirror-crosshair\");\n        off(document, \"keyup\", up);\n        off(document, \"mouseover\", up);\n      }\n    }\n    on(document, \"keyup\", up);\n    on(document, \"mouseover\", up);\n  }\n\n  function onKeyUp(e) {\n    if (e.keyCode == 16) this.doc.sel.shift = false;\n    signalDOMEvent(this, e);\n  }\n\n  function onKeyPress(e) {\n    var cm = this;\n    if (signalDOMEvent(cm, e) || e.ctrlKey && !e.altKey || mac && e.metaKey) return;\n    var keyCode = e.keyCode, charCode = e.charCode;\n    if (presto && keyCode == lastStoppedKey) {lastStoppedKey = null; e_preventDefault(e); return;}\n    if (((presto && (!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_version >= 9) cm.display.inputHasSelection = null;\n    fastPoll(cm);\n  }\n\n  // FOCUS/BLUR EVENTS\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      addClass(cm.display.wrapper, \"CodeMirror-focused\");\n      // The prevInput test prevents this from firing when a context\n      // menu is closed (since the resetInput would kill the\n      // select-all detection hack)\n      if (!cm.curOp && cm.display.selForContextMenu != cm.doc.sel) {\n        resetInput(cm);\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      rmClass(cm.display.wrapper, \"CodeMirror-focused\");\n    }\n    clearInterval(cm.display.blinker);\n    setTimeout(function() {if (!cm.state.focused) cm.display.shift = false;}, 150);\n  }\n\n  // CONTEXT MENU HANDLING\n\n  // To make the context menu work, we need to briefly unhide the\n  // textarea (making it as unobtrusive as possible) to let the\n  // right-click take effect on it.\n  function onContextMenu(cm, e) {\n    if (signalDOMEvent(cm, e, \"contextmenu\")) return;\n    var display = cm.display;\n    if (eventInWidget(display, e) || contextMenuInGutter(cm, e)) return;\n\n    var pos = posFromMouse(cm, e), scrollPos = display.scroller.scrollTop;\n    if (!pos || presto) 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 && cm.doc.sel.contains(pos) == -1)\n      operation(cm, setSelection)(cm.doc, simpleSelection(pos), sel_dontScroll);\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: \" +\n      (ie ? \"rgba(255, 255, 255, .05)\" : \"transparent\") +\n      \"; outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);\";\n    if (webkit) var oldScrollY = window.scrollY; // Work around Chrome issue (#2712)\n    focusInput(cm);\n    if (webkit) window.scrollTo(null, oldScrollY);\n    resetInput(cm);\n    // Adds \"Select all\" to context menu in FF\n    if (!cm.somethingSelected()) display.input.value = display.prevInput = \" \";\n    display.selForContextMenu = cm.doc.sel;\n    clearTimeout(display.detectingSelectAll);\n\n    // Select-all will be greyed out if there's nothing to select, so\n    // this adds a zero-width space so that we can later check whether\n    // it got selected.\n    function prepareSelectAllHack() {\n      if (display.input.selectionStart != null) {\n        var selected = cm.somethingSelected();\n        var extval = display.input.value = \"\\u200b\" + (selected ? display.input.value : \"\");\n        display.prevInput = selected ? \"\" : \"\\u200b\";\n        display.input.selectionStart = 1; display.input.selectionEnd = extval.length;\n        // Re-set this, in case some other handler touched the\n        // selection in the meantime.\n        display.selForContextMenu = cm.doc.sel;\n      }\n    }\n    function rehide() {\n      display.inputDiv.style.position = \"relative\";\n      display.input.style.cssText = oldCSS;\n      if (ie && ie_version < 9) 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 && ie_version < 9)) prepareSelectAllHack();\n        var i = 0, poll = function() {\n          if (display.selForContextMenu == cm.doc.sel && display.input.selectionStart == 0)\n            operation(cm, commands.selectAll)(cm);\n          else if (i++ < 10) display.detectingSelectAll = setTimeout(poll, 500);\n          else resetInput(cm);\n        };\n        display.detectingSelectAll = setTimeout(poll, 200);\n      }\n    }\n\n    if (ie && ie_version >= 9) prepareSelectAllHack();\n    if (captureRightClick) {\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  function contextMenuInGutter(cm, e) {\n    if (!hasHandler(cm, \"gutterContextMenu\")) return false;\n    return gutterEvent(cm, e, \"gutterContextMenu\", false, signal);\n  }\n\n  // UPDATING\n\n  // Compute the position of the end of a change (its 'to' property\n  // refers to the pre-change end).\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  // Adjust a position to refer to the post-change position of the\n  // same text, or the end of the change if the change covers it.\n  function adjustForChange(pos, change) {\n    if (cmp(pos, change.from) < 0) return pos;\n    if (cmp(pos, change.to) <= 0) return changeEnd(change);\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 += changeEnd(change).ch - change.to.ch;\n    return Pos(line, ch);\n  }\n\n  function computeSelAfterChange(doc, change) {\n    var out = [];\n    for (var i = 0; i < doc.sel.ranges.length; i++) {\n      var range = doc.sel.ranges[i];\n      out.push(new Range(adjustForChange(range.anchor, change),\n                         adjustForChange(range.head, change)));\n    }\n    return normalizeSelection(out, doc.sel.primIndex);\n  }\n\n  function offsetPos(pos, old, nw) {\n    if (pos.line == old.line)\n      return Pos(nw.line, pos.ch - old.ch + nw.ch);\n    else\n      return Pos(nw.line + (pos.line - old.line), pos.ch);\n  }\n\n  // Used by replaceSelections to allow moving the selection to the\n  // start or around the replaced test. Hint may be \"start\" or \"around\".\n  function computeReplacedSel(doc, changes, hint) {\n    var out = [];\n    var oldPrev = Pos(doc.first, 0), newPrev = oldPrev;\n    for (var i = 0; i < changes.length; i++) {\n      var change = changes[i];\n      var from = offsetPos(change.from, oldPrev, newPrev);\n      var to = offsetPos(changeEnd(change), oldPrev, newPrev);\n      oldPrev = change.to;\n      newPrev = to;\n      if (hint == \"around\") {\n        var range = doc.sel.ranges[i], inv = cmp(range.head, range.anchor) < 0;\n        out[i] = new Range(inv ? to : from, inv ? from : to);\n      } else {\n        out[i] = new Range(from, from);\n      }\n    }\n    return new Selection(out, doc.sel.primIndex);\n  }\n\n  // Allow \"beforeChange\" event handlers to influence a change\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  // Apply a change to a document, and add it to the document's\n  // history, and propagating it to all linked documents.\n  function makeChange(doc, change, ignoreReadOnly) {\n    if (doc.cm) {\n      if (!doc.cm.curOp) return operation(doc.cm, makeChange)(doc, change, 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 >= 0; --i)\n        makeChangeInner(doc, {from: split[i].from, to: split[i].to, text: i ? [\"\"] : change.text});\n    } else {\n      makeChangeInner(doc, change);\n    }\n  }\n\n  function makeChangeInner(doc, change) {\n    if (change.text.length == 1 && change.text[0] == \"\" && cmp(change.from, change.to) == 0) return;\n    var selAfter = computeSelAfterChange(doc, change);\n    addChangeToHistory(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  // Revert a change stored in a document's history.\n  function makeChangeFromHistory(doc, type, allowSelectionOnly) {\n    if (doc.cm && doc.cm.state.suppressEdits) return;\n\n    var hist = doc.history, event, selAfter = doc.sel;\n    var source = type == \"undo\" ? hist.done : hist.undone, dest = type == \"undo\" ? hist.undone : hist.done;\n\n    // Verify that there is a useable event (so that ctrl-z won't\n    // needlessly clear selection events)\n    for (var i = 0; i < source.length; i++) {\n      event = source[i];\n      if (allowSelectionOnly ? event.ranges && !event.equals(doc.sel) : !event.ranges)\n        break;\n    }\n    if (i == source.length) return;\n    hist.lastOrigin = hist.lastSelOrigin = null;\n\n    for (;;) {\n      event = source.pop();\n      if (event.ranges) {\n        pushSelectionToHistory(event, dest);\n        if (allowSelectionOnly && !event.equals(doc.sel)) {\n          setSelection(doc, event, {clearRedo: false});\n          return;\n        }\n        selAfter = event;\n      }\n      else break;\n    }\n\n    // Build up a reverse change object to add to the opposite history\n    // stack (redo when undoing, and vice versa).\n    var antiChanges = [];\n    pushSelectionToHistory(selAfter, dest);\n    dest.push({changes: antiChanges, generation: hist.generation});\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        source.length = 0;\n        return;\n      }\n\n      antiChanges.push(historyChangeFromChange(doc, change));\n\n      var after = i ? computeSelAfterChange(doc, change) : lst(source);\n      makeChangeSingleDoc(doc, change, after, mergeOldSpans(doc, change));\n      if (!i && doc.cm) doc.cm.scrollIntoView({from: change.from, to: changeEnd(change)});\n      var rebased = [];\n\n      // Propagate to the linked documents\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  // Sub-views need their line numbers shifted when text is added\n  // above or below them in the parent document.\n  function shiftDoc(doc, distance) {\n    if (distance == 0) return;\n    doc.first += distance;\n    doc.sel = new Selection(map(doc.sel.ranges, function(range) {\n      return new Range(Pos(range.anchor.line + distance, range.anchor.ch),\n                       Pos(range.head.line + distance, range.head.ch));\n    }), doc.sel.primIndex);\n    if (doc.cm) {\n      regChange(doc.cm, doc.first, doc.first - distance, distance);\n      for (var d = doc.cm.display, l = d.viewFrom; l < d.viewTo; l++)\n        regLineChange(doc.cm, l, \"gutter\");\n    }\n  }\n\n  // More lower-level change function, handling only a single document\n  // (not linked ones).\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);\n    if (doc.cm) makeChangeSingleDocInEditor(doc.cm, change, spans);\n    else updateDoc(doc, change, spans);\n    setSelectionNoUndo(doc, selAfter, sel_dontScroll);\n  }\n\n  // Handle the interaction of a change to a document with the editor\n  // that this document is part of.\n  function makeChangeSingleDocInEditor(cm, change, spans) {\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(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 (doc.sel.contains(change.from, change.to) > -1)\n      signalCursorActivity(cm);\n\n    updateDoc(doc, change, spans, estimateHeight(cm));\n\n    if (!cm.options.lineWrapping) {\n      doc.iter(checkWidthStart, from.line + change.text.length, function(line) {\n        var len = lineLength(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    if (from.line == to.line && change.text.length == 1 && !isWholeLineUpdate(cm.doc, change))\n      regLineChange(cm, from.line, \"text\");\n    else\n      regChange(cm, from.line, to.line + 1, lendiff);\n\n    var changesHandler = hasHandler(cm, \"changes\"), changeHandler = hasHandler(cm, \"change\");\n    if (changeHandler || changesHandler) {\n      var obj = {\n        from: from, to: to,\n        text: change.text,\n        removed: change.removed,\n        origin: change.origin\n      };\n      if (changeHandler) signalLater(cm, \"change\", cm, obj);\n      if (changesHandler) (cm.curOp.changeObjs || (cm.curOp.changeObjs = [])).push(obj);\n    }\n    cm.display.selForContextMenu = null;\n  }\n\n  function replaceRange(doc, code, from, to, origin) {\n    if (!to) to = from;\n    if (cmp(to, from) < 0) { 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});\n  }\n\n  // SCROLLING THINGS INTO VIEW\n\n  // If an editor sits on the top or bottom of the window, partially\n  // scrolled out of view, this ensures that the cursor is visible.\n  function maybeScrollWindow(cm, coords) {\n    var display = cm.display, box = display.sizer.getBoundingClientRect(), 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 - paddingTop(cm.display)) + \"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  // Scroll a given position into view (immediately), verifying that\n  // it actually became visible (as line heights are accurately\n  // measured, the position of something may 'drift' during drawing).\n  function scrollPosIntoView(cm, pos, end, margin) {\n    if (margin == null) margin = 0;\n    for (var limit = 0; limit < 5; limit++) {\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  // Scroll a given set of coordinates into view (immediately).\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  // Calculate a new scroll position needed to scroll the given\n  // rectangle into view. Returns an object with scrollTop and\n  // scrollLeft properties. When these are undefined, the\n  // vertical/horizontal position does not need to be adjusted.\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 screentop = cm.curOp && cm.curOp.scrollTop != null ? cm.curOp.scrollTop : display.scroller.scrollTop;\n    var screen = display.scroller.clientHeight - scrollerCutOff, result = {};\n    if (y2 - y1 > screen) y2 = y1 + screen;\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 screenleft = cm.curOp && cm.curOp.scrollLeft != null ? cm.curOp.scrollLeft : display.scroller.scrollLeft;\n    var screenw = display.scroller.clientWidth - scrollerCutOff - display.gutters.offsetWidth;\n    var tooWide = x2 - x1 > screenw;\n    if (tooWide) x2 = x1 + screenw;\n    if (x1 < 10)\n      result.scrollLeft = 0;\n    else if (x1 < screenleft)\n      result.scrollLeft = Math.max(0, x1 - (tooWide ? 0 : 10));\n    else if (x2 > screenw + screenleft - 3)\n      result.scrollLeft = x2 + (tooWide ? 0 : 10) - screenw;\n\n    return result;\n  }\n\n  // Store a relative adjustment to the scroll position in the current\n  // operation (to be applied when the operation finishes).\n  function addToScrollPos(cm, left, top) {\n    if (left != null || top != null) resolveScrollToPos(cm);\n    if (left != null)\n      cm.curOp.scrollLeft = (cm.curOp.scrollLeft == null ? cm.doc.scrollLeft : cm.curOp.scrollLeft) + left;\n    if (top != null)\n      cm.curOp.scrollTop = (cm.curOp.scrollTop == null ? cm.doc.scrollTop : cm.curOp.scrollTop) + top;\n  }\n\n  // Make sure that at the end of the operation the current cursor is\n  // shown.\n  function ensureCursorVisible(cm) {\n    resolveScrollToPos(cm);\n    var cur = cm.getCursor(), from = cur, to = cur;\n    if (!cm.options.lineWrapping) {\n      from = cur.ch ? Pos(cur.line, cur.ch - 1) : cur;\n      to = Pos(cur.line, cur.ch + 1);\n    }\n    cm.curOp.scrollToPos = {from: from, to: to, margin: cm.options.cursorScrollMargin, isCursor: true};\n  }\n\n  // When an operation has its scrollToPos property set, and another\n  // scroll action is applied before the end of the operation, this\n  // 'simulates' scrolling that position into view in a cheap way, so\n  // that the effect of intermediate scroll commands is not ignored.\n  function resolveScrollToPos(cm) {\n    var range = cm.curOp.scrollToPos;\n    if (range) {\n      cm.curOp.scrollToPos = null;\n      var from = estimateCoords(cm, range.from), to = estimateCoords(cm, range.to);\n      var sPos = calculateScrollPos(cm, Math.min(from.left, to.left),\n                                    Math.min(from.top, to.top) - range.margin,\n                                    Math.max(from.right, to.right),\n                                    Math.max(from.bottom, to.bottom) + range.margin);\n      cm.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n    }\n  }\n\n  // API UTILITIES\n\n  // Indent the given line. The how parameter can be \"smart\",\n  // \"add\"/null, \"subtract\", or \"prev\". When aggressive is false\n  // (typically set to true for forced single-line indents), empty\n  // lines are not indented, and places where the mode returns Pass\n  // are left alone.\n  function indentLine(cm, n, how, aggressive) {\n    var doc = cm.doc, state;\n    if (how == null) how = \"add\";\n    if (how == \"smart\") {\n      // Fall back to \"prev\" when the mode doesn't have an indentation\n      // method.\n      if (!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 = doc.mode.indent(state, line.text.slice(curSpaceString.length), line.text);\n      if (indentation == Pass || indentation > 150) {\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(doc, indentString, Pos(n, 0), Pos(n, curSpaceString.length), \"+input\");\n    } else {\n      // Ensure that, if the cursor was in the whitespace at the start\n      // of the line, it is moved to the end of that space.\n      for (var i = 0; i < doc.sel.ranges.length; i++) {\n        var range = doc.sel.ranges[i];\n        if (range.head.line == n && range.head.ch < curSpaceString.length) {\n          var pos = Pos(n, curSpaceString.length);\n          replaceOneSelection(doc, i, new Range(pos, pos));\n          break;\n        }\n      }\n    }\n    line.stateAfter = null;\n  }\n\n  // Utility for applying a change to a line by handle or number,\n  // returning the number and optionally registering the line as\n  // changed.\n  function changeLine(doc, handle, changeType, op) {\n    var no = handle, line = handle;\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) && doc.cm) regLineChange(doc.cm, no, changeType);\n    return line;\n  }\n\n  // Helper for deleting text near the selection(s), used to implement\n  // backspace, delete, and similar functionality.\n  function deleteNearSelection(cm, compute) {\n    var ranges = cm.doc.sel.ranges, kill = [];\n    // Build up a set of ranges to kill first, merging overlapping\n    // ranges.\n    for (var i = 0; i < ranges.length; i++) {\n      var toKill = compute(ranges[i]);\n      while (kill.length && cmp(toKill.from, lst(kill).to) <= 0) {\n        var replaced = kill.pop();\n        if (cmp(replaced.from, toKill.from) < 0) {\n          toKill.from = replaced.from;\n          break;\n        }\n      }\n      kill.push(toKill);\n    }\n    // Next, remove those actual ranges.\n    runInOp(cm, function() {\n      for (var i = kill.length - 1; i >= 0; i--)\n        replaceRange(cm.doc, \"\", kill[i].from, kill[i].to, \"+delete\");\n      ensureCursorVisible(cm);\n    });\n  }\n\n  // Used for horizontal relative motion. Dir is -1 or 1 (left or\n  // right), unit can be \"char\", \"column\" (like char, but doesn't\n  // cross line boundaries), \"word\" (across next word), or \"group\" (to\n  // the start of next group of word or non-word-non-whitespace\n  // chars). The visually param controls whether, in right-to-left\n  // text, direction 1 means to move towards the next index in the\n  // string, or towards the character to the right of the current\n  // position. The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\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      var helper = doc.cm && doc.cm.getHelper(pos, \"wordChars\");\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, helper) ? \"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  // For relative vertical movement. Dir may be -1 or 1. Unit can be\n  // \"page\" or \"line\". The resulting position will have a hitSide=true\n  // property if it reached the end of the document.\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  // EDITOR METHODS\n\n  // The publicly visible API. Note that methodOp(f) means\n  // 'wrap f in an operation, performed on its `this` parameter'.\n\n  // This is not the complete set of editor methods. Most of the\n  // methods defined on the Doc type are also injected into\n  // CodeMirror.prototype, for backwards compatibility and\n  // convenience.\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: methodOp(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: methodOp(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: methodOp(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: methodOp(function(how) {\n      var ranges = this.doc.sel.ranges, end = -1;\n      for (var i = 0; i < ranges.length; i++) {\n        var range = ranges[i];\n        if (!range.empty()) {\n          var from = range.from(), to = range.to();\n          var start = Math.max(end, from.line);\n          end = Math.min(this.lastLine(), to.line - (to.ch ? 0 : 1)) + 1;\n          for (var j = start; j < end; ++j)\n            indentLine(this, j, how);\n          var newRanges = this.doc.sel.ranges;\n          if (from.ch == 0 && ranges.length == newRanges.length && newRanges[i].from().ch > 0)\n            replaceOneSelection(this.doc, i, new Range(from, newRanges[i].to()), sel_dontScroll);\n        } else if (range.head.line > end) {\n          indentLine(this, range.head.line, how, true);\n          end = range.head.line;\n          if (i == this.doc.sel.primIndex) ensureCursorVisible(this);\n        }\n      }\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 = readToken(mode, stream, state);\n      }\n      return {start: stream.start,\n              end: stream.pos,\n              string: stream.current(),\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      var type;\n      if (ch == 0) type = styles[2];\n      else 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 { type = styles[mid * 2 + 2]; break; }\n      }\n      var cut = type ? type.indexOf(\"cm-overlay \") : -1;\n      return cut < 0 ? type : cut == 0 ? null : type.slice(0, cut - 1);\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, range = this.doc.sel.primary();\n      if (start == null) pos = range.head;\n      else if (typeof start == \"object\") pos = clipPos(this.doc, start);\n      else pos = start ? range.from() : range.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, lineObj, {top: 0, left: 0}, mode || \"page\").top +\n        (end ? this.doc.height - heightAtLine(lineObj) : 0);\n    },\n\n    defaultTextHeight: function() { return textHeight(this.display); },\n    defaultCharWidth: function() { return charWidth(this.display); },\n\n    setGutterMarker: methodOp(function(line, gutterID, value) {\n      return changeLine(this.doc, line, \"gutter\", 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: methodOp(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          regLineChange(cm, i, \"gutter\");\n          if (isEmpty(line.gutterMarkers)) line.gutterMarkers = null;\n        }\n        ++i;\n      });\n    }),\n\n    addLineWidget: methodOp(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.viewFrom, to: this.display.viewTo};},\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: methodOp(onKeyDown),\n    triggerOnKeyPress: methodOp(onKeyPress),\n    triggerOnKeyUp: 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: methodOp(function(dir, unit) {\n      var cm = this;\n      cm.extendSelectionsBy(function(range) {\n        if (cm.display.shift || cm.doc.extend || range.empty())\n          return findPosH(cm.doc, range.head, dir, unit, cm.options.rtlMoveVisually);\n        else\n          return dir < 0 ? range.from() : range.to();\n      }, sel_move);\n    }),\n\n    deleteH: methodOp(function(dir, unit) {\n      var sel = this.doc.sel, doc = this.doc;\n      if (sel.somethingSelected())\n        doc.replaceSelection(\"\", null, \"+delete\");\n      else\n        deleteNearSelection(this, function(range) {\n          var other = findPosH(doc, range.head, dir, unit, false);\n          return dir < 0 ? {from: other, to: range.head} : {from: range.head, to: other};\n        });\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: methodOp(function(dir, unit) {\n      var cm = this, doc = this.doc, goals = [];\n      var collapse = !cm.display.shift && !doc.extend && doc.sel.somethingSelected();\n      doc.extendSelectionsBy(function(range) {\n        if (collapse)\n          return dir < 0 ? range.from() : range.to();\n        var headPos = cursorCoords(cm, range.head, \"div\");\n        if (range.goalColumn != null) headPos.left = range.goalColumn;\n        goals.push(headPos.left);\n        var pos = findPosV(cm, headPos, dir, unit);\n        if (unit == \"page\" && range == doc.sel.primary())\n          addToScrollPos(cm, null, charCoords(cm, pos, \"div\").top - headPos.top);\n        return pos;\n      }, sel_move);\n      if (goals.length) for (var i = 0; i < doc.sel.ranges.length; i++)\n        doc.sel.ranges[i].goalColumn = goals[i];\n    }),\n\n    // Find the word at the given position (as returned by coordsChar).\n    findWordAt: function(pos) {\n      var doc = this.doc, line = getLine(doc, pos.line).text;\n      var start = pos.ch, end = pos.ch;\n      if (line) {\n        var helper = this.getHelper(pos, \"wordChars\");\n        if ((pos.xRel < 0 || end == line.length) && start) --start; else ++end;\n        var startChar = line.charAt(start);\n        var check = isWordChar(startChar, helper)\n          ? function(ch) { return isWordChar(ch, helper); }\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 new Range(Pos(pos.line, start), Pos(pos.line, end));\n    },\n\n    toggleOverwrite: function(value) {\n      if (value != null && value == this.state.overwrite) return;\n      if (this.state.overwrite = !this.state.overwrite)\n        addClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n      else\n        rmClass(this.display.cursorDiv, \"CodeMirror-overwrite\");\n\n      signal(this, \"overwriteToggle\", this, this.state.overwrite);\n    },\n    hasFocus: function() { return activeElt() == this.display.input; },\n\n    scrollTo: methodOp(function(x, y) {\n      if (x != null || y != null) resolveScrollToPos(this);\n      if (x != null) this.curOp.scrollLeft = x;\n      if (y != null) this.curOp.scrollTop = 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: methodOp(function(range, margin) {\n      if (range == null) {\n        range = {from: this.doc.sel.primary().head, to: null};\n        if (margin == null) margin = this.options.cursorScrollMargin;\n      } else if (typeof range == \"number\") {\n        range = {from: Pos(range, 0), to: null};\n      } else if (range.from == null) {\n        range = {from: range, to: null};\n      }\n      if (!range.to) range.to = range.from;\n      range.margin = margin || 0;\n\n      if (range.from.line != null) {\n        resolveScrollToPos(this);\n        this.curOp.scrollToPos = range;\n      } else {\n        var sPos = calculateScrollPos(this, Math.min(range.from.left, range.to.left),\n                                      Math.min(range.from.top, range.to.top) - range.margin,\n                                      Math.max(range.from.right, range.to.right),\n                                      Math.max(range.from.bottom, range.to.bottom) + range.margin);\n        this.scrollTo(sPos.scrollLeft, sPos.scrollTop);\n      }\n    }),\n\n    setSize: methodOp(function(width, height) {\n      var cm = this;\n      function interpret(val) {\n        return typeof val == \"number\" || /^\\d+$/.test(String(val)) ? val + \"px\" : val;\n      }\n      if (width != null) cm.display.wrapper.style.width = interpret(width);\n      if (height != null) cm.display.wrapper.style.height = interpret(height);\n      if (cm.options.lineWrapping) clearLineMeasurementCache(this);\n      var lineNo = cm.display.viewFrom;\n      cm.doc.iter(lineNo, cm.display.viewTo, function(line) {\n        if (line.widgets) for (var i = 0; i < line.widgets.length; i++)\n          if (line.widgets[i].noHScroll) { regLineChange(cm, lineNo, \"widget\"); break; }\n        ++lineNo;\n      });\n      cm.curOp.forceUpdate = true;\n      signal(cm, \"refresh\", this);\n    }),\n\n    operation: function(f){return runInOp(this, f);},\n\n    refresh: methodOp(function() {\n      var oldHeight = this.display.cachedTextHeight;\n      regChange(this);\n      this.curOp.forceUpdate = true;\n      clearCaches(this);\n      this.scrollTo(this.doc.scrollLeft, this.doc.scrollTop);\n      updateGutterSpace(this);\n      if (oldHeight == null || Math.abs(oldHeight - textHeight(this.display)) > .5)\n        estimateLineHeights(this);\n      signal(this, \"refresh\", this);\n    }),\n\n    swapDoc: methodOp(function(doc) {\n      var old = this.doc;\n      old.cm = null;\n      attachDoc(this, doc);\n      clearCaches(this);\n      resetInput(this);\n      this.scrollTo(doc.scrollLeft, doc.scrollTop);\n      this.curOp.forceScroll = true;\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  // The default configuration options.\n  var defaults = CodeMirror.defaults = {};\n  // Functions to run when options are changed.\n  var optionHandlers = CodeMirror.optionHandlers = {};\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  // Passed to option handlers when there is no old value.\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-\\u200f\\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(\"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);\n    }\n  });\n  option(\"disableInput\", false, function(cm, val) {if (!val) resetInput(cm);}, true);\n  option(\"dragDrop\", true);\n\n  option(\"cursorBlinkRate\", 530);\n  option(\"cursorScrollMargin\", 0);\n  option(\"cursorHeight\", 1, updateSelection, true);\n  option(\"singleCursorHeightPerLine\", true, updateSelection, true);\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\", 200, function(cm, val){cm.doc.history.undoDepth = val;});\n  option(\"historyEventDelay\", 1250);\n  option(\"viewportMargin\", 10, function(cm){cm.refresh();}, true);\n  option(\"maxHighlightLength\", 10000, resetModeState, true);\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  // Extra arguments are stored as the mode's dependencies, which is\n  // used by (legacy) mechanisms like loadmode.js to automatically\n  // load a mode. (Preferred mechanism is the require/define calls.)\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 = Array.prototype.slice.call(arguments, 2);\n    modes[name] = mode;\n  };\n\n  CodeMirror.defineMIME = function(mime, spec) {\n    mimeModes[mime] = spec;\n  };\n\n  // Given a MIME type, a {name, ...options} config object, or a name\n  // string, return a mode config object.\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  // Given a mode spec (anything that resolveMode accepts), find and\n  // initialize an actual mode object.\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  // Minimal default mode.\n  CodeMirror.defineMode(\"null\", function() {\n    return {token: function(stream) {stream.skipToEnd();}};\n  });\n  CodeMirror.defineMIME(\"text/plain\", \"null\");\n\n  // This can be used to attach properties to mode objects from\n  // outside the actual mode definition.\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  // MODE STATE HANDLING\n\n  // Utility functions for working with state. Exported because nested\n  // modes need to do this for their inner modes.\n\n  var copyState = CodeMirror.copyState = function(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\n  var startState = CodeMirror.startState = function(mode, a1, a2) {\n    return mode.startState ? mode.startState(a1, a2) : true;\n  };\n\n  // Given a mode and a state (for that mode), find the inner mode and\n  // state at the position that the state refers to.\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  // Commands are parameter-less actions that can be performed on an\n  // editor, mostly used for keybindings.\n  var commands = CodeMirror.commands = {\n    selectAll: function(cm) {cm.setSelection(Pos(cm.firstLine(), 0), Pos(cm.lastLine()), sel_dontScroll);},\n    singleSelection: function(cm) {\n      cm.setSelection(cm.getCursor(\"anchor\"), cm.getCursor(\"head\"), sel_dontScroll);\n    },\n    killLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        if (range.empty()) {\n          var len = getLine(cm.doc, range.head.line).text.length;\n          if (range.head.ch == len && range.head.line < cm.lastLine())\n            return {from: range.head, to: Pos(range.head.line + 1, 0)};\n          else\n            return {from: range.head, to: Pos(range.head.line, len)};\n        } else {\n          return {from: range.from(), to: range.to()};\n        }\n      });\n    },\n    deleteLine: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0),\n                to: clipPos(cm.doc, Pos(range.to().line + 1, 0))};\n      });\n    },\n    delLineLeft: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        return {from: Pos(range.from().line, 0), to: range.from()};\n      });\n    },\n    delWrappedLineLeft: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var leftPos = cm.coordsChar({left: 0, top: top}, \"div\");\n        return {from: leftPos, to: range.from()};\n      });\n    },\n    delWrappedLineRight: function(cm) {\n      deleteNearSelection(cm, function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var rightPos = cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n        return {from: range.from(), to: rightPos };\n      });\n    },\n    undo: function(cm) {cm.undo();},\n    redo: function(cm) {cm.redo();},\n    undoSelection: function(cm) {cm.undoSelection();},\n    redoSelection: function(cm) {cm.redoSelection();},\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.extendSelectionsBy(function(range) { return lineStart(cm, range.head.line); },\n                            {origin: \"+move\", bias: 1});\n    },\n    goLineStartSmart: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        return lineStartSmart(cm, range.head);\n      }, {origin: \"+move\", bias: 1});\n    },\n    goLineEnd: function(cm) {\n      cm.extendSelectionsBy(function(range) { return lineEnd(cm, range.head.line); },\n                            {origin: \"+move\", bias: -1});\n    },\n    goLineRight: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: cm.display.lineDiv.offsetWidth + 100, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineLeft: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        return cm.coordsChar({left: 0, top: top}, \"div\");\n      }, sel_move);\n    },\n    goLineLeftSmart: function(cm) {\n      cm.extendSelectionsBy(function(range) {\n        var top = cm.charCoords(range.head, \"div\").top + 5;\n        var pos = cm.coordsChar({left: 0, top: top}, \"div\");\n        if (pos.ch < cm.getLine(pos.line).search(/\\S/)) return lineStartSmart(cm, range.head);\n        return pos;\n      }, sel_move);\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) {cm.replaceSelection(\"\\t\");},\n    insertSoftTab: function(cm) {\n      var spaces = [], ranges = cm.listSelections(), tabSize = cm.options.tabSize;\n      for (var i = 0; i < ranges.length; i++) {\n        var pos = ranges[i].from();\n        var col = countColumn(cm.getLine(pos.line), pos.ch, tabSize);\n        spaces.push(new Array(tabSize - col % tabSize + 1).join(\" \"));\n      }\n      cm.replaceSelections(spaces);\n    },\n    defaultTab: function(cm) {\n      if (cm.somethingSelected()) cm.indentSelection(\"add\");\n      else cm.execCommand(\"insertTab\");\n    },\n    transposeChars: function(cm) {\n      runInOp(cm, function() {\n        var ranges = cm.listSelections(), newSel = [];\n        for (var i = 0; i < ranges.length; i++) {\n          var cur = ranges[i].head, line = getLine(cm.doc, cur.line).text;\n          if (line) {\n            if (cur.ch == line.length) cur = new Pos(cur.line, cur.ch - 1);\n            if (cur.ch > 0) {\n              cur = new Pos(cur.line, cur.ch + 1);\n              cm.replaceRange(line.charAt(cur.ch - 1) + line.charAt(cur.ch - 2),\n                              Pos(cur.line, cur.ch - 2), cur, \"+transpose\");\n            } else if (cur.line > cm.doc.first) {\n              var prev = getLine(cm.doc, cur.line - 1).text;\n              if (prev)\n                cm.replaceRange(line.charAt(0) + \"\\n\" + prev.charAt(prev.length - 1),\n                                Pos(cur.line - 1, prev.length - 1), Pos(cur.line, 1), \"+transpose\");\n            }\n          }\n          newSel.push(new Range(cur, cur));\n        }\n        cm.setSelections(newSel);\n      });\n    },\n    newlineAndIndent: function(cm) {\n      runInOp(cm, function() {\n        var len = cm.listSelections().length;\n        for (var i = 0; i < len; i++) {\n          var range = cm.listSelections()[i];\n          cm.replaceRange(\"\\n\", range.anchor, range.head, \"+input\");\n          cm.indentLine(range.from().line + 1, null, true);\n          ensureCursorVisible(cm);\n        }\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    \"Esc\": \"singleSelection\"\n  };\n  // Note that the save and find-related commands aren't defined by\n  // default. User code or addons can define them. Unknown commands\n  // 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-End\": \"goDocEnd\", \"Ctrl-Up\": \"goLineUp\", \"Ctrl-Down\": \"goLineDown\",\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    \"Ctrl-U\": \"undoSelection\", \"Shift-Ctrl-U\": \"redoSelection\", \"Alt-U\": \"redoSelection\",\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-Home\": \"goDocStart\", \"Cmd-Up\": \"goDocStart\", \"Cmd-End\": \"goDocEnd\", \"Cmd-Down\": \"goDocEnd\", \"Alt-Left\": \"goGroupLeft\",\n    \"Alt-Right\": \"goGroupRight\", \"Cmd-Left\": \"goLineLeft\", \"Cmd-Right\": \"goLineRight\", \"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\": \"delWrappedLineLeft\", \"Cmd-Delete\": \"delWrappedLineRight\",\n    \"Cmd-U\": \"undoSelection\", \"Shift-Cmd-U\": \"redoSelection\", \"Ctrl-Up\": \"goDocStart\", \"Ctrl-Down\": \"goDocEnd\",\n    fallthrough: [\"basic\", \"emacsy\"]\n  };\n  // Very basic readline/emacs-style bindings, which are standard on Mac.\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  keyMap[\"default\"] = mac ? keyMap.macDefault : keyMap.pcDefault;\n\n  // KEYMAP DISPATCH\n\n  function getKeyMap(val) {\n    if (typeof val == \"string\") return keyMap[val];\n    else return val;\n  }\n\n  // Given an array of keymaps and a key name, call handle on any\n  // bindings found, until that returns a truthy value, at which point\n  // we consider the key handled. Implements things like binding a key\n  // to false stopping further handling and keymap fallthrough.\n  var lookupKey = CodeMirror.lookupKey = function(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; i < fallthrough.length; ++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\n  // Modifier key presses don't count as 'real' key presses for the\n  // purpose of keymap fallthrough.\n  var isModifierKey = CodeMirror.isModifierKey = function(event) {\n    var name = keyNames[event.keyCode];\n    return name == \"Ctrl\" || name == \"Alt\" || name == \"Shift\" || name == \"Mod\";\n  };\n\n  // Look up the name of a key as indicated by an event object.\n  var keyName = CodeMirror.keyName = function(event, noShift) {\n    if (presto && 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\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 = activeElt();\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      cm.toTextArea = isNaN; // Prevent this from being ran twice\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  var StringStream = CodeMirror.StringStream = function(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\n  // TEXTMARKERS\n\n  // Created with markText and setBookmark methods. A TextMarker is a\n  // handle that can be used to clear or find a marked position in the\n  // document. Line objects hold arrays (markedSpans) containing\n  // {from, to, marker} object pointing to such marker objects, and\n  // indicating that such a marker is present on that line. Multiple\n  // lines may point to the same marker when it spans across lines.\n  // The spans will have null for their from/to properties when the\n  // marker continues beyond the start/end of the line. Markers have\n  // links back to the lines they currently touch.\n\n  var TextMarker = CodeMirror.TextMarker = function(doc, type) {\n    this.lines = [];\n    this.type = type;\n    this.doc = doc;\n  };\n  eventMixin(TextMarker);\n\n  // Clear the marker.\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 (cm && !this.collapsed) regLineChange(cm, lineNo(line), \"text\");\n      else if (cm) {\n        if (span.to != null) max = lineNo(line);\n        if (span.from != null) min = lineNo(line);\n      }\n      line.markedSpans = removeMarkedSpan(line.markedSpans, span);\n      if (span.from == null && 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(this.lines[i]), len = lineLength(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 && this.collapsed) 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.doc);\n    }\n    if (cm) signalLater(cm, \"markerCleared\", cm, this);\n    if (withOp) endOperation(cm);\n    if (this.parent) this.parent.clear();\n  };\n\n  // Find the position of the marker in the document. Returns a {from,\n  // to} object by default. Side can be passed to get a specific side\n  // -- 0 (both), -1 (left), or 1 (right). When lineObj is true, the\n  // Pos objects returned contain a line object, rather than a line\n  // number (used to prevent looking up the same line twice).\n  TextMarker.prototype.find = function(side, lineObj) {\n    if (side == null && this.type == \"bookmark\") side = 1;\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) {\n        from = Pos(lineObj ? line : lineNo(line), span.from);\n        if (side == -1) return from;\n      }\n      if (span.to != null) {\n        to = Pos(lineObj ? line : lineNo(line), span.to);\n        if (side == 1) return to;\n      }\n    }\n    return from && {from: from, to: to};\n  };\n\n  // Signals that the marker's widget changed, and surrounding layout\n  // should be recomputed.\n  TextMarker.prototype.changed = function() {\n    var pos = this.find(-1, true), widget = this, cm = this.doc.cm;\n    if (!pos || !cm) return;\n    runInOp(cm, function() {\n      var line = pos.line, lineN = lineNo(pos.line);\n      var view = findViewForLine(cm, lineN);\n      if (view) {\n        clearLineMeasurementCacheFor(view);\n        cm.curOp.selectionChanged = cm.curOp.forceUpdate = true;\n      }\n      cm.curOp.updateMaxLine = true;\n      if (!lineIsHidden(widget.doc, line) && widget.height != null) {\n        var oldHeight = widget.height;\n        widget.height = null;\n        var dHeight = widgetHeight(widget) - oldHeight;\n        if (dHeight)\n          updateLineHeight(line, line.height + dHeight);\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  // Collapsed markers have unique ids, in order to be able to order\n  // them, which is needed for uniquely determining an outer marker\n  // when they overlap (they may nest, but not partially overlap).\n  var nextMarkerId = 0;\n\n  // Create a marker, wire it up to the right lines, and\n  function markText(doc, from, to, options, type) {\n    // Shared markers (across linked documents) are handled separately\n    // (markTextShared will call out to this again, once per\n    // document).\n    if (options && options.shared) return markTextShared(doc, from, to, options, type);\n    // Ensure we are in an operation.\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), diff = cmp(from, to);\n    if (options) copyObj(options, marker, false);\n    // Don't connect empty markers unless clearWhenEmpty is false\n    if (diff > 0 || diff == 0 && marker.clearWhenEmpty !== false)\n      return marker;\n    if (marker.replacedWith) {\n      // Showing up as a widget implies collapsed (widget replaces text)\n      marker.collapsed = true;\n      marker.widgetNode = elt(\"span\", [marker.replacedWith], \"CodeMirror-widget\");\n      if (!options.handleMouseEvents) marker.widgetNode.ignoreEvents = true;\n      if (options.insertLeft) marker.widgetNode.insertLeft = 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      addChangeToHistory(doc, {from: from, to: to, origin: \"markText\"}, doc.sel, 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(line) == cm.display.maxLine)\n        updateMaxLine = true;\n      if (marker.collapsed && curLine != from.line) updateLineHeight(line, 0);\n      addMarkedSpan(line, new MarkedSpan(marker,\n                                         curLine == from.line ? from.ch : null,\n                                         curLine == to.line ? to.ch : null));\n      ++curLine;\n    });\n    // lineIsHidden depends on the presence of the spans, so needs a second pass\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      // Sync editor state\n      if (updateMaxLine) cm.curOp.updateMaxLine = true;\n      if (marker.collapsed)\n        regChange(cm, from.line, to.line + 1);\n      else if (marker.className || marker.title || marker.startStyle || marker.endStyle)\n        for (var i = from.line; i <= to.line; i++) regLineChange(cm, i, \"text\");\n      if (marker.atomic) reCheckSelection(cm.doc);\n      signalLater(cm, \"markerAdded\", cm, marker);\n    }\n    return marker;\n  }\n\n  // SHARED TEXTMARKERS\n\n  // A shared marker spans multiple linked documents. It is\n  // implemented as a meta-marker-object controlling multiple normal\n  // markers.\n  var SharedTextMarker = CodeMirror.SharedTextMarker = function(markers, primary) {\n    this.markers = markers;\n    this.primary = primary;\n    for (var i = 0; i < markers.length; ++i)\n      markers[i].parent = this;\n  };\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(side, lineObj) {\n    return this.primary.find(side, lineObj);\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.widgetNode;\n    linkedDocs(doc, function(doc) {\n      if (widget) options.widgetNode = 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  function findSharedMarkers(doc) {\n    return doc.findMarks(Pos(doc.first, 0), doc.clipPos(Pos(doc.lastLine())),\n                         function(m) { return m.parent; });\n  }\n\n  function copySharedMarkers(doc, markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], pos = marker.find();\n      var mFrom = doc.clipPos(pos.from), mTo = doc.clipPos(pos.to);\n      if (cmp(mFrom, mTo)) {\n        var subMark = markText(doc, mFrom, mTo, marker.primary, marker.primary.type);\n        marker.markers.push(subMark);\n        subMark.parent = marker;\n      }\n    }\n  }\n\n  function detachSharedMarkers(markers) {\n    for (var i = 0; i < markers.length; i++) {\n      var marker = markers[i], linked = [marker.primary.doc];;\n      linkedDocs(marker.primary.doc, function(d) { linked.push(d); });\n      for (var j = 0; j < marker.markers.length; j++) {\n        var subMarker = marker.markers[j];\n        if (indexOf(linked, subMarker.doc) == -1) {\n          subMarker.parent = null;\n          marker.markers.splice(j--, 1);\n        }\n      }\n    }\n  }\n\n  // TEXTMARKER SPANS\n\n  function MarkedSpan(marker, from, to) {\n    this.marker = marker;\n    this.from = from; this.to = to;\n  }\n\n  // Search an array of spans for a span matching the given marker.\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  // Remove a span from an array, returning undefined if no spans are\n  // left (we don't store arrays for lines without spans).\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  // Add a span to a line.\n  function addMarkedSpan(line, span) {\n    line.markedSpans = line.markedSpans ? line.markedSpans.concat([span]) : [span];\n    span.marker.attachLine(line);\n  }\n\n  // Used for the algorithm that adjusts markers for a change in the\n  // document. These functions cut an array of spans at a given\n  // character position, returning an array of remaining chunks (or\n  // undefined if nothing remains).\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(new MarkedSpan(marker, span.from, endsAfter ? null : span.to));\n      }\n    }\n    return nw;\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(new MarkedSpan(marker, startsBefore ? null : span.from - endCh,\n                                              span.to == null ? null : span.to - endCh));\n      }\n    }\n    return nw;\n  }\n\n  // Given a change object, compute the new set of marker spans that\n  // cover the line in which the change took place. Removes spans\n  // entirely within the change, reconnects spans belonging to the\n  // same marker that appear on both sides of the change, and cuts off\n  // spans partially within the change. Returns an array of span\n  // arrays with one element for each line in (after) the change.\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 = cmp(change.from, change.to) == 0;\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(new MarkedSpan(first[i].marker, null, null));\n      for (var i = 0; i < gap; ++i)\n        newMarkers.push(gapMarkers);\n      newMarkers.push(last);\n    }\n    return newMarkers;\n  }\n\n  // Remove spans that are empty and don't have a clearWhenEmpty\n  // option of false.\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  // Used for un/re-doing changes from the history. Combines the\n  // result of computing the existing spans with the set of spans that\n  // existed in the history (so that deleting around a span and then\n  // undoing brings back the span).\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  // Used to 'clip' out readOnly ranges when making a change.\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(0);\n      for (var j = 0; j < parts.length; ++j) {\n        var p = parts[j];\n        if (cmp(p.to, m.from) < 0 || cmp(p.from, m.to) > 0) continue;\n        var newParts = [j, 1], dfrom = cmp(p.from, m.from), dto = cmp(p.to, m.to);\n        if (dfrom < 0 || !mk.inclusiveLeft && !dfrom)\n          newParts.push({from: p.from, to: m.from});\n        if (dto > 0 || !mk.inclusiveRight && !dto)\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  // Connect or disconnect spans from a line.\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  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  // Helpers used when computing which overlapping collapsed span\n  // counts as the larger one.\n  function extraLeft(marker) { return marker.inclusiveLeft ? -1 : 0; }\n  function extraRight(marker) { return marker.inclusiveRight ? 1 : 0; }\n\n  // Returns a number indicating which of two overlapping collapsed\n  // spans is larger (and thus includes the other). Falls back to\n  // comparing ids when the spans cover exactly the same range.\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  // Find out whether a line ends or starts in a collapsed span. If\n  // so, return the marker for that span.\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  // Test whether there exists a collapsed span that partially\n  // overlaps (covers the start or end, but not both) of a new span.\n  // Such overlap is not allowed.\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(0);\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) > 0 || (sp.marker.inclusiveRight && marker.inclusiveLeft)) ||\n          fromCmp >= 0 && (cmp(found.from, to) < 0 || (sp.marker.inclusiveLeft && marker.inclusiveRight)))\n        return true;\n    }\n  }\n\n  // A visual line is a line as drawn on the screen. Folding, for\n  // example, can cause multiple logical lines to appear on the same\n  // visual line. This finds the start of the visual line that the\n  // given line is part of (usually that is the line itself).\n  function visualLine(line) {\n    var merged;\n    while (merged = collapsedSpanAtStart(line))\n      line = merged.find(-1, true).line;\n    return line;\n  }\n\n  // Returns an array of logical lines that continue the visual line\n  // started by the argument, or undefined if there are no such lines.\n  function visualLineContinued(line) {\n    var merged, lines;\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      (lines || (lines = [])).push(line);\n    }\n    return lines;\n  }\n\n  // Get the line number of the start of the visual line that the\n  // given line number is part of.\n  function visualLineNo(doc, lineN) {\n    var line = getLine(doc, lineN), vis = visualLine(line);\n    if (line == vis) return lineN;\n    return lineNo(vis);\n  }\n  // Get the line number of the start of the next visual line after\n  // the given line.\n  function visualLineEndNo(doc, lineN) {\n    if (lineN > doc.lastLine()) return lineN;\n    var line = getLine(doc, lineN), merged;\n    if (!lineIsHidden(doc, line)) return lineN;\n    while (merged = collapsedSpanAtEnd(line))\n      line = merged.find(1, true).line;\n    return lineNo(line) + 1;\n  }\n\n  // Compute whether a line is hidden. Lines count as hidden when they\n  // are part of a visual line that starts with another line, or when\n  // they are entirely covered by collapsed, non-widget span.\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.widgetNode) 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(1, true);\n      return lineIsHiddenInner(doc, end.line, getMarkedSpanFor(end.line.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.widgetNode && 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  // LINE WIDGETS\n\n  // Line widgets are block elements displayed above or below a line.\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\n  function adjustScrollWhenAboveVisible(cm, line, diff) {\n    if (heightAtLine(line) < ((cm.curOp && cm.curOp.scrollTop) || cm.doc.scrollTop))\n      addToScrollPos(cm, null, diff);\n  }\n\n  LineWidget.prototype.clear = function() {\n    var cm = this.cm, ws = this.line.widgets, line = this.line, no = lineNo(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) line.widgets = null;\n    var height = widgetHeight(this);\n    runInOp(cm, function() {\n      adjustScrollWhenAboveVisible(cm, line, -height);\n      regLineChange(cm, no, \"widget\");\n      updateLineHeight(line, Math.max(0, line.height - height));\n    });\n  };\n  LineWidget.prototype.changed = function() {\n    var oldH = this.height, cm = this.cm, line = this.line;\n    this.height = null;\n    var diff = widgetHeight(this) - oldH;\n    if (!diff) return;\n    runInOp(cm, function() {\n      cm.curOp.forceUpdate = true;\n      adjustScrollWhenAboveVisible(cm, line, diff);\n      updateLineHeight(line, line.height + diff);\n    });\n  };\n\n  function widgetHeight(widget) {\n    if (widget.height != null) return widget.height;\n    if (!contains(document.body, widget.node)) {\n      var parentStyle = \"position: relative;\";\n      if (widget.coverGutter)\n        parentStyle += \"margin-left: -\" + widget.cm.getGutterElement().offsetWidth + \"px;\";\n      removeChildrenAndAdd(widget.cm.display.measure, elt(\"div\", [widget.node], null, parentStyle));\n    }\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.doc, handle, \"widget\", 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)) {\n        var aboveVisible = heightAtLine(line) < cm.doc.scrollTop;\n        updateLineHeight(line, line.height + widgetHeight(widget));\n        if (aboveVisible) addToScrollPos(cm, null, 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  // Change the content (text, markers) of a line. Automatically\n  // invalidates cached information and tries to re-estimate the\n  // line's height.\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  // Detach a line from the document tree and its markers.\n  function cleanUpLine(line) {\n    line.parent = null;\n    detachMarkedSpans(line);\n  }\n\n  function extractLineClasses(type, output) {\n    if (type) for (;;) {\n      var lineClass = type.match(/(?:^|\\s+)line-(background-)?(\\S+)/);\n      if (!lineClass) break;\n      type = type.slice(0, lineClass.index) + type.slice(lineClass.index + lineClass[0].length);\n      var prop = lineClass[1] ? \"bgClass\" : \"textClass\";\n      if (output[prop] == null)\n        output[prop] = lineClass[2];\n      else if (!(new RegExp(\"(?:^|\\s)\" + lineClass[2] + \"(?:$|\\s)\")).test(output[prop]))\n        output[prop] += \" \" + lineClass[2];\n    }\n    return type;\n  }\n\n  function callBlankLine(mode, state) {\n    if (mode.blankLine) return mode.blankLine(state);\n    if (!mode.innerMode) return;\n    var inner = CodeMirror.innerMode(mode, state);\n    if (inner.mode.blankLine) return inner.mode.blankLine(inner.state);\n  }\n\n  function readToken(mode, stream, state) {\n    for (var i = 0; i < 10; i++) {\n      var style = mode.token(stream, state);\n      if (stream.pos > stream.start) return style;\n    }\n    throw new Error(\"Mode \" + mode.name + \" failed to advance stream.\");\n  }\n\n  // Run the given mode's parser over a line, calling f for each token.\n  function runMode(cm, text, mode, state, f, lineClasses, 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 == \"\") extractLineClasses(callBlankLine(mode, state), lineClasses);\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 = extractLineClasses(readToken(mode, stream, state), lineClasses);\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  // Compute a style array (an array starting with a mode generation\n  // -- for invalidation -- followed by pairs of end positions and\n  // style strings), which is used to highlight the tokens on the\n  // line.\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], lineClasses = {};\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    }, lineClasses, 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, \"cm-overlay \" + 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 + \" \" : \"\") + \"cm-overlay \" + style;\n          }\n        }\n      }, lineClasses);\n    }\n\n    return {styles: st, classes: lineClasses.bgClass || lineClasses.textClass ? lineClasses : null};\n  }\n\n  function getLineStyles(cm, line) {\n    if (!line.styles || line.styles[0] != cm.state.modeGen) {\n      var result = highlightLine(cm, line, line.stateAfter = getStateBefore(cm, lineNo(line)));\n      line.styles = result.styles;\n      if (result.classes) line.styleClasses = result.classes;\n      else if (line.styleClasses) line.styleClasses = null;\n    }\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. Used for lines that\n  // aren't currently visible.\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 == \"\") callBlankLine(mode, state);\n    while (!stream.eol() && stream.pos <= cm.options.maxHighlightLength) {\n      readToken(mode, stream, state);\n      stream.start = stream.pos;\n    }\n  }\n\n  // Convert a style as returned by a mode (either null, or a string\n  // containing one or more styles) to a CSS style. This is cached,\n  // and also looks for line-wide styles.\n  var styleToClassCache = {}, styleToClassCacheWithMode = {};\n  function interpretTokenStyle(style, options) {\n    if (!style || /^\\s*$/.test(style)) return null;\n    var cache = options.addModeClass ? styleToClassCacheWithMode : styleToClassCache;\n    return cache[style] ||\n      (cache[style] = style.replace(/\\S+/g, \"cm-$&\"));\n  }\n\n  // Render the DOM representation of the text of a line. Also builds\n  // up a 'line map', which points at the DOM nodes that represent\n  // specific stretches of text, and is used by the measuring code.\n  // The returned object contains the DOM node, this map, and\n  // information about line-wide styles that were set by the mode.\n  function buildLineContent(cm, lineView) {\n    // The padding-right forces the element to have a 'border', which\n    // is needed on Webkit to be able to get line-level bounding\n    // rectangles for it (in measureChar).\n    var content = elt(\"span\", null, null, webkit ? \"padding-right: .1px\" : null);\n    var builder = {pre: elt(\"pre\", [content]), content: content, col: 0, pos: 0, cm: cm};\n    lineView.measure = {};\n\n    // Iterate over the logical lines that make up this visual line.\n    for (var i = 0; i <= (lineView.rest ? lineView.rest.length : 0); i++) {\n      var line = i ? lineView.rest[i - 1] : lineView.line, order;\n      builder.pos = 0;\n      builder.addToken = buildToken;\n      // Optionally wire in some hacks into the token-rendering\n      // algorithm, to deal with browser quirks.\n      if ((ie || webkit) && cm.getOption(\"lineWrapping\"))\n        builder.addToken = buildTokenSplitSpaces(builder.addToken);\n      if (hasBadBidiRects(cm.display.measure) && (order = getOrder(line)))\n        builder.addToken = buildTokenBadBidi(builder.addToken, order);\n      builder.map = [];\n      insertLineContent(line, builder, getLineStyles(cm, line));\n      if (line.styleClasses) {\n        if (line.styleClasses.bgClass)\n          builder.bgClass = joinClasses(line.styleClasses.bgClass, builder.bgClass || \"\");\n        if (line.styleClasses.textClass)\n          builder.textClass = joinClasses(line.styleClasses.textClass, builder.textClass || \"\");\n      }\n\n      // Ensure at least a single node is present, for measuring.\n      if (builder.map.length == 0)\n        builder.map.push(0, 0, builder.content.appendChild(zeroWidthElement(cm.display.measure)));\n\n      // Store the map and a cache object for the current logical line\n      if (i == 0) {\n        lineView.measure.map = builder.map;\n        lineView.measure.cache = {};\n      } else {\n        (lineView.measure.maps || (lineView.measure.maps = [])).push(builder.map);\n        (lineView.measure.caches || (lineView.measure.caches = [])).push({});\n      }\n    }\n\n    signal(cm, \"renderLine\", cm, lineView.line, builder.pre);\n    if (builder.pre.className)\n      builder.textClass = joinClasses(builder.pre.className, builder.textClass || \"\");\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  // Build up the DOM representation for a single token, and add it to\n  // the line map. Takes care to render special characters separately.\n  function buildToken(builder, text, style, startStyle, endStyle, title) {\n    if (!text) return;\n    var special = builder.cm.options.specialChars, mustWrap = false;\n    if (!special.test(text)) {\n      builder.col += text.length;\n      var content = document.createTextNode(text);\n      builder.map.push(builder.pos, builder.pos + text.length, content);\n      if (ie && ie_version < 9) mustWrap = true;\n      builder.pos += text.length;\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          var txt = document.createTextNode(text.slice(pos, pos + skipped));\n          if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.map.push(builder.pos, builder.pos + skipped, txt);\n          builder.col += skipped;\n          builder.pos += 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          var txt = content.appendChild(elt(\"span\", spaceStr(tabWidth), \"cm-tab\"));\n          builder.col += tabWidth;\n        } else {\n          var txt = builder.cm.options.specialCharPlaceholder(m[0]);\n          if (ie && ie_version < 9) content.appendChild(elt(\"span\", [txt]));\n          else content.appendChild(txt);\n          builder.col += 1;\n        }\n        builder.map.push(builder.pos, builder.pos + 1, txt);\n        builder.pos++;\n      }\n    }\n    if (style || startStyle || endStyle || mustWrap) {\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.content.appendChild(token);\n    }\n    builder.content.appendChild(content);\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      inner(builder, text.replace(/ {3,}/g, split), style, startStyle, endStyle, title);\n    };\n  }\n\n  // Work around nonsense dimensions being reported for stretches of\n  // right-to-left text.\n  function buildTokenBadBidi(inner, order) {\n    return function(builder, text, style, startStyle, endStyle, title) {\n      style = style ? style + \" cm-force-border\" : \"cm-force-border\";\n      var start = builder.pos, end = start + text.length;\n      for (;;) {\n        // Find the part that overlaps with the start of this text\n        for (var i = 0; i < order.length; i++) {\n          var part = order[i];\n          if (part.to > start && part.from <= start) break;\n        }\n        if (part.to >= end) return inner(builder, text, style, startStyle, endStyle, title);\n        inner(builder, text.slice(0, part.to - start), style, startStyle, null, title);\n        startStyle = null;\n        text = text.slice(part.to - start);\n        start = part.to;\n      }\n    };\n  }\n\n  function buildCollapsedSpan(builder, size, marker, ignoreWidget) {\n    var widget = !ignoreWidget && marker.widgetNode;\n    if (widget) {\n      builder.map.push(builder.pos, builder.pos + size, widget);\n      builder.content.appendChild(widget);\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.cm.options));\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.widgetNode) foundBookmarks.push(m);\n        }\n        if (collapsed && (collapsed.from || 0) == pos) {\n          buildCollapsedSpan(builder, (collapsed.to == null ? len + 1 : collapsed.to) - pos,\n                             collapsed.marker, collapsed.from == null);\n          if (collapsed.to == null) return;\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.cm.options);\n      }\n    }\n  }\n\n  // DOCUMENT DATA STRUCTURE\n\n  // By default, updates that start and end at the beginning of a line\n  // are treated specially, in order to make the association of line\n  // widgets and marker elements with the text behave more intuitive.\n  function isWholeLineUpdate(doc, change) {\n    return change.from.ch == 0 && change.to.ch == 0 && lst(change.text) == \"\" &&\n      (!doc.cm || doc.cm.options.wholeLineUpdateBefore);\n  }\n\n  // Perform a change on the document data structure.\n  function updateDoc(doc, change, markedSpans, 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    // Adjust the line structure\n    if (isWholeLineUpdate(doc, change)) {\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, added = []; i < text.length - 1; ++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; i < text.length - 1; ++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, added = []; i < text.length - 1; ++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  }\n\n  // The document is represented as a BTree consisting of leaves, with\n  // chunk of lines in them, and branches, with up to ten leaves or\n  // other branch nodes below them. The top node is always a branch\n  // node, and is the document object itself (meaning it has\n  // additional methods and properties).\n  //\n  // All nodes have parent links. The tree is used both to go from\n  // line numbers to line objects, and to go from objects to numbers.\n  // It also indexes by height, and is used to convert between height\n  // and line object, and to find the total height of the document.\n  //\n  // See also http://marijnhaverbeke.nl/blog/codemirror-line-tree.html\n\n  function LeafChunk(lines) {\n    this.lines = lines;\n    this.parent = null;\n    for (var i = 0, height = 0; i < lines.length; ++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    // Remove the n lines at offset 'at'.\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    // Helper used to collapse a small branch into a single leaf.\n    collapse: function(lines) {\n      lines.push.apply(lines, this.lines);\n    },\n    // Insert the given array of lines at offset 'at', count them as\n    // having the given height.\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; i < lines.length; ++i) lines[i].parent = this;\n    },\n    // Used to iterate over a part of the tree.\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; i < children.length; ++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 the result is smaller than 25 lines, ensure that it is a\n      // single leaf node.\n      if (this.size - n < 25 &&\n          (this.children.length > 1 || !(this.children[0] instanceof LeafChunk))) {\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; i < this.children.length; ++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; i < this.children.length; ++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    // When a node has grown, check whether it should be split.\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; i < this.children.length; ++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.cleanGeneration = 1;\n    this.frontier = firstLine;\n    var start = Pos(firstLine, 0);\n    this.sel = simpleSelection(start);\n    this.history = new History(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});\n    setSelection(this, simpleSelection(start), sel_dontScroll);\n  };\n\n  Doc.prototype = createObj(BranchChunk.prototype, {\n    constructor: Doc,\n    // Iterate over the document. Supports two forms -- with only one\n    // argument, it calls that for each line in the document. With\n    // three, it iterates over the range given by the first two (with\n    // the second being non-inclusive).\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    // Non-public interface for adding and removing lines.\n    insert: function(at, lines) {\n      var height = 0;\n      for (var i = 0; i < lines.length; ++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    // From here, the methods are part of the public interface. Most\n    // are also available from CodeMirror (editor) instances.\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: docMethodOp(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\"}, true);\n      setSelection(this, simpleSelection(top));\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\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(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 range = this.sel.primary(), pos;\n      if (start == null || start == \"head\") pos = range.head;\n      else if (start == \"anchor\") pos = range.anchor;\n      else if (start == \"end\" || start == \"to\" || start === false) pos = range.to();\n      else pos = range.from();\n      return pos;\n    },\n    listSelections: function() { return this.sel.ranges; },\n    somethingSelected: function() {return this.sel.somethingSelected();},\n\n    setCursor: docMethodOp(function(line, ch, options) {\n      setSimpleSelection(this, clipPos(this, typeof line == \"number\" ? Pos(line, ch || 0) : line), null, options);\n    }),\n    setSelection: docMethodOp(function(anchor, head, options) {\n      setSimpleSelection(this, clipPos(this, anchor), clipPos(this, head || anchor), options);\n    }),\n    extendSelection: docMethodOp(function(head, other, options) {\n      extendSelection(this, clipPos(this, head), other && clipPos(this, other), options);\n    }),\n    extendSelections: docMethodOp(function(heads, options) {\n      extendSelections(this, clipPosArray(this, heads, options));\n    }),\n    extendSelectionsBy: docMethodOp(function(f, options) {\n      extendSelections(this, map(this.sel.ranges, f), options);\n    }),\n    setSelections: docMethodOp(function(ranges, primary, options) {\n      if (!ranges.length) return;\n      for (var i = 0, out = []; i < ranges.length; i++)\n        out[i] = new Range(clipPos(this, ranges[i].anchor),\n                           clipPos(this, ranges[i].head));\n      if (primary == null) primary = Math.min(ranges.length - 1, this.sel.primIndex);\n      setSelection(this, normalizeSelection(out, primary), options);\n    }),\n    addSelection: docMethodOp(function(anchor, head, options) {\n      var ranges = this.sel.ranges.slice(0);\n      ranges.push(new Range(clipPos(this, anchor), clipPos(this, head || anchor)));\n      setSelection(this, normalizeSelection(ranges, ranges.length - 1), options);\n    }),\n\n    getSelection: function(lineSep) {\n      var ranges = this.sel.ranges, lines;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        lines = lines ? lines.concat(sel) : sel;\n      }\n      if (lineSep === false) return lines;\n      else return lines.join(lineSep || \"\\n\");\n    },\n    getSelections: function(lineSep) {\n      var parts = [], ranges = this.sel.ranges;\n      for (var i = 0; i < ranges.length; i++) {\n        var sel = getBetween(this, ranges[i].from(), ranges[i].to());\n        if (lineSep !== false) sel = sel.join(lineSep || \"\\n\");\n        parts[i] = sel;\n      }\n      return parts;\n    },\n    replaceSelection: function(code, collapse, origin) {\n      var dup = [];\n      for (var i = 0; i < this.sel.ranges.length; i++)\n        dup[i] = code;\n      this.replaceSelections(dup, collapse, origin || \"+input\");\n    },\n    replaceSelections: docMethodOp(function(code, collapse, origin) {\n      var changes = [], sel = this.sel;\n      for (var i = 0; i < sel.ranges.length; i++) {\n        var range = sel.ranges[i];\n        changes[i] = {from: range.from(), to: range.to(), text: splitLines(code[i]), origin: origin};\n      }\n      var newSel = collapse && collapse != \"end\" && computeReplacedSel(this, changes, collapse);\n      for (var i = changes.length - 1; i >= 0; i--)\n        makeChange(this, changes[i]);\n      if (newSel) setSelectionReplaceHistory(this, newSel);\n      else if (this.cm) ensureCursorVisible(this.cm);\n    }),\n    undo: docMethodOp(function() {makeChangeFromHistory(this, \"undo\");}),\n    redo: docMethodOp(function() {makeChangeFromHistory(this, \"redo\");}),\n    undoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"undo\", true);}),\n    redoSelection: docMethodOp(function() {makeChangeFromHistory(this, \"redo\", true);}),\n\n    setExtending: function(val) {this.extend = val;},\n    getExtending: function() {return this.extend;},\n\n    historySize: function() {\n      var hist = this.history, done = 0, undone = 0;\n      for (var i = 0; i < hist.done.length; i++) if (!hist.done[i].ranges) ++done;\n      for (var i = 0; i < hist.undone.length; i++) if (!hist.undone[i].ranges) ++undone;\n      return {undo: done, redo: undone};\n    },\n    clearHistory: function() {this.history = new History(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.lastSelOp = 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 = new History(this.history.maxGeneration);\n      hist.done = copyHistoryArray(histData.done.slice(0), null, true);\n      hist.undone = copyHistoryArray(histData.undone.slice(0), null, true);\n    },\n\n    addLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, \"class\", 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    removeLineClass: docMethodOp(function(handle, where, cls) {\n      return changeLine(this, handle, \"class\", 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    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, shared: options && options.shared};\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, filter) {\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              (!filter || filter(span.marker)))\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 = this.sel;\n      doc.extend = false;\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      copySharedMarkers(copy, findSharedMarkers(this));\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        detachSharedMarkers(findSharedMarkers(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 = new History(null);\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  // Public alias.\n  Doc.prototype.eachLine = Doc.prototype.iter;\n\n  // Set up methods on CodeMirror's prototype to redirect to the editor's document.\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  // Call f for all linked documents.\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  // Attach a document to an editor.\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) findMaxLine(cm);\n    cm.options.mode = doc.modeOption;\n    regChange(cm);\n  }\n\n  // LINE UTILITIES\n\n  // Find the line object corresponding to the given line number.\n  function getLine(doc, n) {\n    n -= doc.first;\n    if (n < 0 || n >= doc.size) throw new Error(\"There is no line \" + (n + doc.first) + \" in the document.\");\n    for (var chunk = doc; !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  // Get the part of a document between two positions, as an array of\n  // strings.\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  // Get the lines between from and to, as array of strings.\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  // Update the height of a line, propagating the height change\n  // upwards to parent nodes.\n  function updateLineHeight(line, height) {\n    var diff = height - line.height;\n    if (diff) for (var n = line; n; n = n.parent) n.height += diff;\n  }\n\n  // Given a line object, find its line number by walking up through\n  // its parent links.\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  // Find the line at the given vertical position, using the height\n  // information in the document tree.\n  function lineAtHeight(chunk, h) {\n    var n = chunk.first;\n    outer: do {\n      for (var i = 0; i < chunk.children.length; ++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; i < chunk.lines.length; ++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\n  // Find the height above the given line.\n  function heightAtLine(lineObj) {\n    lineObj = visualLine(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  // Get the bidi ordering for the given line (and cache it). Returns\n  // false for lines that are fully left-to-right, and an array of\n  // BidiSpan objects otherwise.\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 History(startGen) {\n    // Arrays of change events and selections. Doing something adds an\n    // event to done and clears undo. Undoing moves events from done\n    // to undone, redoing moves them in the other direction.\n    this.done = []; this.undone = [];\n    this.undoDepth = Infinity;\n    // Used to track when changes can be merged into a single undo\n    // event\n    this.lastModTime = this.lastSelTime = 0;\n    this.lastOp = this.lastSelOp = null;\n    this.lastOrigin = this.lastSelOrigin = null;\n    // Used by the isClean() method\n    this.generation = this.maxGeneration = startGen || 1;\n  }\n\n  // Create a history change event from an updateDoc-style change\n  // object.\n  function historyChangeFromChange(doc, change) {\n    var histChange = {from: copyPos(change.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  // Pop all selection events off the end of a history array. Stop at\n  // a change event.\n  function clearSelectionEvents(array) {\n    while (array.length) {\n      var last = lst(array);\n      if (last.ranges) array.pop();\n      else break;\n    }\n  }\n\n  // Find the top change event in the history. Pop off selection\n  // events that are in the way.\n  function lastChangeEvent(hist, force) {\n    if (force) {\n      clearSelectionEvents(hist.done);\n      return lst(hist.done);\n    } else if (hist.done.length && !lst(hist.done).ranges) {\n      return lst(hist.done);\n    } else if (hist.done.length > 1 && !hist.done[hist.done.length - 2].ranges) {\n      hist.done.pop();\n      return lst(hist.done);\n    }\n  }\n\n  // Register a change in the history. Merges changes that are within\n  // a single operation, ore are close together with an origin that\n  // allows merging (starting with \"+\") into a single event.\n  function addChangeToHistory(doc, change, selAfter, opId) {\n    var hist = doc.history;\n    hist.undone.length = 0;\n    var time = +new Date, cur;\n\n    if ((hist.lastOp == opId ||\n         hist.lastOrigin == change.origin && change.origin &&\n         ((change.origin.charAt(0) == \"+\" && doc.cm && hist.lastModTime > time - doc.cm.options.historyEventDelay) ||\n          change.origin.charAt(0) == \"*\")) &&\n        (cur = lastChangeEvent(hist, hist.lastOp == opId))) {\n      // Merge this change into the last event\n      var last = lst(cur.changes);\n      if (cmp(change.from, change.to) == 0 && cmp(change.from, last.to) == 0) {\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    } else {\n      // Can not be merged, start a new event.\n      var before = lst(hist.done);\n      if (!before || !before.ranges)\n        pushSelectionToHistory(doc.sel, hist.done);\n      cur = {changes: [historyChangeFromChange(doc, change)],\n             generation: hist.generation};\n      hist.done.push(cur);\n      while (hist.done.length > hist.undoDepth) {\n        hist.done.shift();\n        if (!hist.done[0].ranges) hist.done.shift();\n      }\n    }\n    hist.done.push(selAfter);\n    hist.generation = ++hist.maxGeneration;\n    hist.lastModTime = hist.lastSelTime = time;\n    hist.lastOp = hist.lastSelOp = opId;\n    hist.lastOrigin = hist.lastSelOrigin = change.origin;\n\n    if (!last) signal(doc, \"historyAdded\");\n  }\n\n  function selectionEventCanBeMerged(doc, origin, prev, sel) {\n    var ch = origin.charAt(0);\n    return ch == \"*\" ||\n      ch == \"+\" &&\n      prev.ranges.length == sel.ranges.length &&\n      prev.somethingSelected() == sel.somethingSelected() &&\n      new Date - doc.history.lastSelTime <= (doc.cm ? doc.cm.options.historyEventDelay : 500);\n  }\n\n  // Called whenever the selection changes, sets the new selection as\n  // the pending selection in the history, and pushes the old pending\n  // selection into the 'done' array when it was significantly\n  // different (in number of selected ranges, emptiness, or time).\n  function addSelectionToHistory(doc, sel, opId, options) {\n    var hist = doc.history, origin = options && options.origin;\n\n    // A new event is started when the previous origin does not match\n    // the current, or the origins don't allow matching. Origins\n    // starting with * are always merged, those starting with + are\n    // merged when similar and close together in time.\n    if (opId == hist.lastSelOp ||\n        (origin && hist.lastSelOrigin == origin &&\n         (hist.lastModTime == hist.lastSelTime && hist.lastOrigin == origin ||\n          selectionEventCanBeMerged(doc, origin, lst(hist.done), sel))))\n      hist.done[hist.done.length - 1] = sel;\n    else\n      pushSelectionToHistory(sel, hist.done);\n\n    hist.lastSelTime = +new Date;\n    hist.lastSelOrigin = origin;\n    hist.lastSelOp = opId;\n    if (options && options.clearRedo !== false)\n      clearSelectionEvents(hist.undone);\n  }\n\n  function pushSelectionToHistory(sel, dest) {\n    var top = lst(dest);\n    if (!(top && top.ranges && top.equals(sel)))\n      dest.push(sel);\n  }\n\n  // Used to store marked span information in the history.\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  // When un/re-doing restores text containing marked spans, those\n  // that have been explicitly cleared should not be restored.\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  // Retrieve and filter the old marked spans stored in a change event.\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, instantiateSel) {\n    for (var i = 0, copy = []; i < events.length; ++i) {\n      var event = events[i];\n      if (event.ranges) {\n        copy.push(instantiateSel ? Selection.prototype.deepCopy.call(event) : event);\n        continue;\n      }\n      var changes = event.changes, newChanges = [];\n      copy.push({changes: newChanges});\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 rebaseHistSelSingle(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      if (sub.ranges) {\n        if (!sub.copied) { sub = array[i] = sub.deepCopy(); sub.copied = true; }\n        for (var j = 0; j < sub.ranges.length; j++) {\n          rebaseHistSelSingle(sub.ranges[j].anchor, from, to, diff);\n          rebaseHistSelSingle(sub.ranges[j].head, from, to, diff);\n        }\n        continue;\n      }\n      for (var j = 0; j < sub.changes.length; ++j) {\n        var cur = sub.changes[j];\n        if (to < cur.from.line) {\n          cur.from = Pos(cur.from.line + diff, cur.from.ch);\n          cur.to = Pos(cur.to.line + diff, cur.to.ch);\n        } else if (from <= cur.to.line) {\n          ok = false;\n          break;\n        }\n      }\n      if (!ok) {\n        array.splice(0, i + 1);\n        i = 0;\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 UTILITIES\n\n  // Due to the fact that we still support jurassic IE versions, some\n  // compatibility wrappers are needed.\n\n  var e_preventDefault = CodeMirror.e_preventDefault = function(e) {\n    if (e.preventDefault) e.preventDefault();\n    else e.returnValue = false;\n  };\n  var e_stopPropagation = CodeMirror.e_stopPropagation = function(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  var e_stop = CodeMirror.e_stop = function(e) {e_preventDefault(e); e_stopPropagation(e);};\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  // Lightweight event framework. on/off also work on DOM nodes,\n  // registering native DOM handlers.\n\n  var on = CodeMirror.on = function(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  var off = CodeMirror.off = function(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  var signal = CodeMirror.signal = function(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 orphanDelayedCallbacks = null;\n\n  // Often, we want to signal events at a point where we are in the\n  // middle of some work, but don't want the handler to start calling\n  // other methods on the editor, which might be in an inconsistent\n  // state or simply not expect any other events to happen.\n  // signalLater looks whether there are any handlers, and schedules\n  // them to be executed when the last operation ends, or, if no\n  // operation is active, when a timeout fires.\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), list;\n    if (operationGroup) {\n      list = operationGroup.delayedCallbacks;\n    } else if (orphanDelayedCallbacks) {\n      list = orphanDelayedCallbacks;\n    } else {\n      list = orphanDelayedCallbacks = [];\n      setTimeout(fireOrphanDelayed, 0);\n    }\n    function bnd(f) {return function(){f.apply(null, args);};};\n    for (var i = 0; i < arr.length; ++i)\n      list.push(bnd(arr[i]));\n  }\n\n  function fireOrphanDelayed() {\n    var delayed = orphanDelayedCallbacks;\n    orphanDelayedCallbacks = null;\n    for (var i = 0; i < delayed.length; ++i) delayed[i]();\n  }\n\n  // The DOM events that CodeMirror handles can be overridden by\n  // registering a (non-DOM) handler on the editor for the event name,\n  // and preventDefault-ing the event in that handler.\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 signalCursorActivity(cm) {\n    var arr = cm._handlers && cm._handlers.cursorActivity;\n    if (!arr) return;\n    var set = cm.curOp.cursorActivityHandlers || (cm.curOp.cursorActivityHandlers = []);\n    for (var i = 0; i < arr.length; ++i) if (indexOf(set, arr[i]) == -1)\n      set.push(arr[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  // Add on and off methods to a constructor's prototype, to make\n  // registering events on such objects more convenient.\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  // Reused option objects for setSelection & friends\n  var sel_dontScroll = {scroll: false}, sel_mouse = {origin: \"*mouse\"}, sel_move = {origin: \"+move\"};\n\n  function Delayed() {this.id = null;}\n  Delayed.prototype.set = function(ms, f) {\n    clearTimeout(this.id);\n    this.id = setTimeout(f, ms);\n  };\n\n  // Counts the column offset in a string, taking tabs into account.\n  // Used mostly to find indentation.\n  var countColumn = CodeMirror.countColumn = function(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;;) {\n      var nextTab = string.indexOf(\"\\t\", i);\n      if (nextTab < 0 || nextTab >= end)\n        return n + (end - i);\n      n += nextTab - i;\n      n += tabSize - (n % tabSize);\n      i = nextTab + 1;\n    }\n  };\n\n  // The inverse of countColumn -- find the offset that corresponds to\n  // a particular column.\n  function findColumn(string, goal, tabSize) {\n    for (var pos = 0, col = 0;;) {\n      var nextTab = string.indexOf(\"\\t\", pos);\n      if (nextTab == -1) nextTab = string.length;\n      var skipped = nextTab - pos;\n      if (nextTab == string.length || col + skipped >= goal)\n        return pos + Math.min(skipped, goal - col);\n      col += nextTab - pos;\n      col += tabSize - (col % tabSize);\n      pos = nextTab + 1;\n      if (col >= goal) return pos;\n    }\n  }\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  var selectInput = function(node) { node.select(); };\n  if (ios) // Mobile Safari apparently has a bug where select() is broken.\n    selectInput = function(node) { node.selectionStart = 0; node.selectionEnd = node.value.length; };\n  else if (ie) // Suppress mysterious IE10 errors\n    selectInput = function(node) { try { node.select(); } catch(_e) {} };\n\n  function indexOf(array, elt) {\n    for (var i = 0; i < array.length; ++i)\n      if (array[i] == elt) return i;\n    return -1;\n  }\n  if ([].indexOf) indexOf = function(array, elt) { return array.indexOf(elt); };\n  function map(array, f) {\n    var out = [];\n    for (var i = 0; i < array.length; i++) out[i] = f(array[i], i);\n    return out;\n  }\n  if ([].map) map = function(array, f) { return array.map(f); };\n\n  function createObj(base, props) {\n    var inst;\n    if (Object.create) {\n      inst = Object.create(base);\n    } else {\n      var ctor = function() {};\n      ctor.prototype = base;\n      inst = new ctor();\n    }\n    if (props) copyObj(props, inst);\n    return inst;\n  };\n\n  function copyObj(obj, target, overwrite) {\n    if (!target) target = {};\n    for (var prop in obj)\n      if (obj.hasOwnProperty(prop) && (overwrite !== false || !target.hasOwnProperty(prop)))\n        target[prop] = obj[prop];\n    return target;\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\\u0590-\\u05f4\\u0600-\\u06ff\\u3040-\\u309f\\u30a0-\\u30ff\\u3400-\\u4db5\\u4e00-\\u9fcc\\uac00-\\ud7af]/;\n  var isWordCharBasic = CodeMirror.isWordChar = function(ch) {\n    return /\\w/.test(ch) || ch > \"\\x80\" &&\n      (ch.toUpperCase() != ch.toLowerCase() || nonASCIISingleCaseWordChar.test(ch));\n  };\n  function isWordChar(ch, helper) {\n    if (!helper) return isWordCharBasic(ch);\n    if (helper.source.indexOf(\"\\\\w\") > -1 && isWordCharBasic(ch)) return true;\n    return helper.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  // Extending unicode characters. A series of a non-extending char +\n  // any number of extending chars is treated as a single unit as far\n  // as editing and measuring is concerned. This is not fully correct,\n  // since some scripts/fonts/browsers also treat other configurations\n  // of code points as a group.\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\") 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  var range;\n  if (document.createRange) range = function(node, start, end) {\n    var r = document.createRange();\n    r.setEnd(node, end);\n    r.setStart(node, start);\n    return r;\n  };\n  else range = function(node, start, end) {\n    var r = document.body.createTextRange();\n    r.moveToElementText(node.parentNode);\n    r.collapse(true);\n    r.moveEnd(\"character\", end);\n    r.moveStart(\"character\", start);\n    return r;\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 contains(parent, child) {\n    if (parent.contains)\n      return parent.contains(child);\n    while (child = child.parentNode)\n      if (child == parent) return true;\n  }\n\n  function activeElt() { return document.activeElement; }\n  // Older versions of IE throws unspecified error when touching\n  // document.activeElement in some cases (during loading, in iframe)\n  if (ie && ie_version < 11) activeElt = function() {\n    try { return document.activeElement; }\n    catch(e) { return document.body; }\n  };\n\n  function classTest(cls) { return new RegExp(\"\\\\b\" + cls + \"\\\\b\\\\s*\"); }\n  function rmClass(node, cls) {\n    var test = classTest(cls);\n    if (test.test(node.className)) node.className = node.className.replace(test, \"\");\n  }\n  function addClass(node, cls) {\n    if (!classTest(cls).test(node.className)) node.className += \" \" + cls;\n  }\n  function joinClasses(a, b) {\n    var as = a.split(\" \");\n    for (var i = 0; i < as.length; i++)\n      if (as[i] && !classTest(as[i]).test(b)) b += \" \" + as[i];\n    return b;\n  }\n\n  // WINDOW-WIDE EVENTS\n\n  // These must be handled carefully, because naively registering a\n  // handler for each editor will cause the editors to never be\n  // garbage collected.\n\n  function forEachCodeMirror(f) {\n    if (!document.body.getElementsByClassName) return;\n    var byClass = document.body.getElementsByClassName(\"CodeMirror\");\n    for (var i = 0; i < byClass.length; i++) {\n      var cm = byClass[i].CodeMirror;\n      if (cm) f(cm);\n    }\n  }\n\n  var globalsRegistered = false;\n  function ensureGlobalHandlers() {\n    if (globalsRegistered) return;\n    registerGlobalHandlers();\n    globalsRegistered = true;\n  }\n  function registerGlobalHandlers() {\n    // When the window resizes, we need to refresh active editors.\n    var resizeTimer;\n    on(window, \"resize\", function() {\n      if (resizeTimer == null) resizeTimer = setTimeout(function() {\n        resizeTimer = null;\n        knownScrollbarWidth = null;\n        forEachCodeMirror(onResize);\n      }, 100);\n    });\n    // When the window loses focus, we want to show the editor as blurred\n    on(window, \"blur\", function() {\n      forEachCodeMirror(onBlur);\n    });\n  }\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 && ie_version < 9) return false;\n    var div = elt('div');\n    return \"draggable\" in div || \"dragDrop\" in div;\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 && ie_version < 8);\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  // Feature-detect IE's crummy client rect reporting for bidi text\n  var badBidiRects;\n  function hasBadBidiRects(measure) {\n    if (badBidiRects != null) return badBidiRects;\n    var txt = removeChildrenAndAdd(measure, document.createTextNode(\"A\\u062eA\"));\n    var r0 = range(txt, 0, 1).getBoundingClientRect();\n    if (!r0 || r0.left == r0.right) return false; // Safari returns null in some cases (#2780)\n    var r1 = range(txt, 1, 2).getBoundingClientRect();\n    return badBidiRects = (r1.right - r0.right < 3);\n  }\n\n  // See if \"\".split is the broken IE version, if so, provide an\n  // alternative way to split lines.\n  var splitLines = CodeMirror.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\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  var badZoomedRects = null;\n  function hasBadZoomedRects(measure) {\n    if (badZoomedRects != null) return badZoomedRects;\n    var node = removeChildrenAndAdd(measure, elt(\"span\", \"x\"));\n    var normal = node.getBoundingClientRect();\n    var fromRange = range(node, 0, 1).getBoundingClientRect();\n    return badZoomedRects = Math.abs(normal.left - fromRange.left) > 1;\n  }\n\n  // KEY NAMES\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(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 = getLine(cm.doc, lineN);\n    while (merged = collapsedSpanAtEnd(line)) {\n      line = merged.find(1, true).line;\n      lineN = null;\n    }\n    var order = getOrder(line);\n    var ch = !order ? line.text.length : order[0].level % 2 ? lineLeft(line) : lineRight(line);\n    return Pos(lineN == null ? lineNo(line) : lineN, ch);\n  }\n  function lineStartSmart(cm, pos) {\n    var start = lineStart(cm, pos.line);\n    var line = getLine(cm.doc, 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 = pos.line == start.line && pos.ch <= firstNonWS && pos.ch;\n      return Pos(start.line, inWS ? 0 : firstNonWS);\n    }\n    return start;\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 needed in order to move 'visually' through bi-directional\n  // text -- i.e., pressing left should make the cursor go left, even\n  // when in RTL text. The tricky part is the 'jumps', where RTL and\n  // LTR text touch each other. This often requires the cursor offset\n  // to move more than 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%%11NLNNN1LNNNNNLLLLLLLLLLLLLLLLLLLLLLLNLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLN\";\n    // Character types for codepoints 0x600 to 0x6ff\n    var arabicTypes = \"rrrrrrrrrrrr,rNNmmmmmmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmrrrrrrrnnnnnnnnnn%nnrrrmrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrrmmmmmmmmmmmmmmmmmmmNmmmm\";\n    function charType(code) {\n      if (code <= 0xf7) return lowTypes.charAt(code);\n      else if (0x590 <= code && code <= 0x5f4) return \"R\";\n      else if (0x600 <= code && code <= 0x6ed) return arabicTypes.charAt(code - 0x600);\n      else if (0x6ee <= code && code <= 0x8ac) return \"r\";\n      else if (0x2000 <= code && code <= 0x200b) return \"w\";\n      else if (code == 0x200c) return \"b\";\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    function BidiSpan(level, from, to) {\n      this.level = level;\n      this.from = from; this.to = to;\n    }\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(new BidiSpan(0, start, i));\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, new BidiSpan(1, pos, j));\n              var nstart = j;\n              for (++j; j < i && countsAsNum.test(types[j]); ++j) {}\n              order.splice(at, 0, new BidiSpan(2, nstart, j));\n              pos = j;\n            } else ++j;\n          }\n          if (pos < i) order.splice(at, 0, new BidiSpan(1, pos, i));\n        }\n      }\n      if (order[0].level == 1 && (m = str.match(/^\\s+/))) {\n        order[0].from = m[0].length;\n        order.unshift(new BidiSpan(0, 0, m[0].length));\n      }\n      if (lst(order).level == 1 && (m = str.match(/\\s+$/))) {\n        lst(order).to -= m[0].length;\n        order.push(new BidiSpan(0, len - m[0].length, len));\n      }\n      if (order[0].level != lst(order).level)\n        order.push(new BidiSpan(order[0].level, len, len));\n\n      return order;\n    };\n  })();\n\n  // THE END\n\n  CodeMirror.version = \"4.7.0\";\n\n  return CodeMirror;\n});\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/codemirror/mode/javascript/javascript.js",
    "content": "// CodeMirror, copyright (c) by Marijn Haverbeke and others\n// Distributed under an MIT license: http://codemirror.net/LICENSE\n\n// TODO actually recognize syntax of TypeScript constructs\n\n(function(mod) {\n  if (typeof exports == \"object\" && typeof module == \"object\") // CommonJS\n    mod(require(\"../../lib/codemirror\"));\n  else if (typeof define == \"function\" && define.amd) // AMD\n    define([\"../../lib/codemirror\"], mod);\n  else // Plain browser env\n    mod(CodeMirror);\n})(function(CodeMirror) {\n\"use strict\";\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  var wordRE = parserConfig.wordCharacters || /[\\w$\\xa1-\\uffff]/;\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 if (wordRE.test(ch)) {\n      stream.eatWhile(wordRE);\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 (wordRE.test(ch)) {\n        sawSomething = true;\n      } else if (/[\"'\\/]/.test(ch)) {\n        return;\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; cx.style = style;\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      else for (var outer = state.lexical; outer && outer.type == \")\" && outer.align; outer = outer.prev)\n        indent = outer.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    function exp(type) {\n      if (type == wanted) return cont();\n      else if (wanted == \";\") return pass();\n      else return cont(exp);\n    };\n    return exp;\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\") {\n      if (cx.state.lexical.info == \"else\" && cx.state.cc[cx.state.cc.length - 1] == poplex)\n        cx.state.cc.pop()();\n      return cont(pushlex(\"form\"), expression, statement, poplex, maybeelse);\n    }\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, 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, maybeop);\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    if (type == \"quasi\") { return pass(quasi, 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 (type == \"=>\") 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\") { return pass(quasi, me); }\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(type, value) {\n    if (type != \"quasi\") return pass();\n    if (value.slice(value.length - 2) != \"${\") return cont(quasi);\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(quasi);\n    }\n  }\n  function arrowBody(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : expression);\n  }\n  function arrowBodyNoComma(type) {\n    findFatArrow(cx.stream, cx.state);\n    return pass(type == \"{\" ? statement : 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\" || cx.style == \"keyword\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(getterSetter);\n      return cont(afterprop);\n    } else if (type == \"number\" || type == \"string\") {\n      cx.marked = jsonldMode ? \"property\" : (cx.style + \" property\");\n      return cont(afterprop);\n    } else if (type == \"jsonld-keyword\") {\n      return cont(afterprop);\n    } else if (type == \"[\") {\n      return cont(expression, expect(\"]\"), afterprop);\n    }\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\", \"else\"), 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, classNameAfter);\n    if (type == \"{\") return cont(pushlex(\"}\"), classBody, poplex);\n  }\n  function classBody(type, value) {\n    if (type == \"variable\" || cx.style == \"keyword\") {\n      cx.marked = \"property\";\n      if (value == \"get\" || value == \"set\") return cont(classGetterSetter, functiondef, classBody);\n      return cont(functiondef, classBody);\n    }\n    if (value == \"*\") {\n      cx.marked = \"keyword\";\n      return cont(classBody);\n    }\n    if (type == \";\") return cont(classBody);\n    if (type == \"}\") return cont();\n  }\n  function classGetterSetter(type) {\n    if (type != \"variable\") return pass();\n    cx.marked = \"property\";\n    return cont();\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(maybeexpressionNoComma, \"]\"));\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  function isContinuedStatement(state, textAfter) {\n    return state.lastType == \"operator\" || state.lastType == \",\" ||\n      isOperatorChar.test(textAfter.charAt(0)) ||\n      /[,.]/.test(textAfter.charAt(0));\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 && typeof parserConfig.globalVars == \"object\")\n        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      if (!/^\\s*else\\b/.test(textAfter)) 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 + (isContinuedStatement(state, textAfter) ? 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    electricInput: /^\\s*(?:case .*?:|default:|\\{|\\})$/,\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.registerHelper(\"wordChars\", \"javascript\", /[\\w$]/);\n\nCodeMirror.defineMIME(\"text/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"text/ecmascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/javascript\", \"javascript\");\nCodeMirror.defineMIME(\"application/x-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\n});\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/dataTables/dataTables.bootstrap.js",
    "content": "/* Set the defaults for DataTables initialisation */\n$.extend(true, $.fn.dataTable.defaults, {\n    \"sDom\": \"<'row'<'col-sm-6'l><'col-sm-6'f>r>\" + \"t\" + \"<'row'<'col-sm-6'i><'col-sm-6'p>>\",\n    \"oLanguage\": {\n        \"sLengthMenu\": \"每页 _MENU_ 条记录\"\n    }\n});\n\n\n/* Default class modification */\n$.extend($.fn.dataTableExt.oStdClasses, {\n    \"sWrapper\": \"dataTables_wrapper form-inline\",\n    \"sFilterInput\": \"form-control input-sm\",\n    \"sLengthSelect\": \"form-control input-sm\"\n});\n\n// In 1.10 we use the pagination renderers to draw the Bootstrap paging,\n// rather than  custom plug-in\nif ($.fn.dataTable.Api) {\n    $.fn.dataTable.defaults.renderer = 'bootstrap';\n    $.fn.dataTable.ext.renderer.pageButton.bootstrap = function(settings, host, idx, buttons, page, pages) {\n        var api = new $.fn.dataTable.Api(settings);\n        var classes = settings.oClasses;\n        var lang = settings.oLanguage.oPaginate;\n        var btnDisplay, btnClass;\n\n        var attach = function(container, buttons) {\n            var i, ien, node, button;\n            var clickHandler = function(e) {\n                e.preventDefault();\n                if (e.data.action !== 'ellipsis') {\n                    api.page(e.data.action).draw(false);\n                }\n            };\n\n            for (i = 0, ien = buttons.length; i < ien; i++) {\n                button = buttons[i];\n\n                if ($.isArray(button)) {\n                    attach(container, button);\n                } else {\n                    btnDisplay = '';\n                    btnClass = '';\n\n                    switch (button) {\n                        case 'ellipsis':\n                            btnDisplay = '&hellip;';\n                            btnClass = 'disabled';\n                            break;\n\n                        case 'first':\n                            btnDisplay = lang.sFirst;\n                            btnClass = button + (page > 0 ?\n                                '' : ' disabled');\n                            break;\n\n                        case 'previous':\n                            btnDisplay = lang.sPrevious;\n                            btnClass = button + (page > 0 ?\n                                '' : ' disabled');\n                            break;\n\n                        case 'next':\n                            btnDisplay = lang.sNext;\n                            btnClass = button + (page < pages - 1 ?\n                                '' : ' disabled');\n                            break;\n\n                        case 'last':\n                            btnDisplay = lang.sLast;\n                            btnClass = button + (page < pages - 1 ?\n                                '' : ' disabled');\n                            break;\n\n                        default:\n                            btnDisplay = button + 1;\n                            btnClass = page === button ?\n                                'active' : '';\n                            break;\n                    }\n\n                    if (btnDisplay) {\n                        node = $('<li>', {\n                            'class': classes.sPageButton + ' ' + btnClass,\n                            'aria-controls': settings.sTableId,\n                            'tabindex': settings.iTabIndex,\n                            'id': idx === 0 && typeof button === 'string' ? settings.sTableId + '_' + button : null\n                        })\n                            .append($('<a>', {\n                                    'href': '#'\n                                })\n                                .html(btnDisplay)\n                        )\n                            .appendTo(container);\n\n                        settings.oApi._fnBindAction(\n                            node, {\n                                action: button\n                            }, clickHandler\n                        );\n                    }\n                }\n            }\n        };\n\n        attach(\n            $(host).empty().html('<ul class=\"pagination\"/>').children('ul'),\n            buttons\n        );\n    }\n} else {\n    // Integration for 1.9-\n    $.fn.dataTable.defaults.sPaginationType = 'bootstrap';\n\n    /* API method to get paging information */\n    $.fn.dataTableExt.oApi.fnPagingInfo = function(oSettings) {\n        return {\n            \"iStart\": oSettings._iDisplayStart,\n            \"iEnd\": oSettings.fnDisplayEnd(),\n            \"iLength\": oSettings._iDisplayLength,\n            \"iTotal\": oSettings.fnRecordsTotal(),\n            \"iFilteredTotal\": oSettings.fnRecordsDisplay(),\n            \"iPage\": oSettings._iDisplayLength === -1 ? 0 : Math.ceil(oSettings._iDisplayStart / oSettings._iDisplayLength),\n            \"iTotalPages\": oSettings._iDisplayLength === -1 ? 0 : Math.ceil(oSettings.fnRecordsDisplay() / oSettings._iDisplayLength)\n        };\n    };\n\n    /* Bootstrap style pagination control */\n    $.extend($.fn.dataTableExt.oPagination, {\n        \"bootstrap\": {\n            \"fnInit\": function(oSettings, nPaging, fnDraw) {\n                var oLang = oSettings.oLanguage.oPaginate;\n                var fnClickHandler = function(e) {\n                    e.preventDefault();\n                    if (oSettings.oApi._fnPageChange(oSettings, e.data.action)) {\n                        fnDraw(oSettings);\n                    }\n                };\n\n                $(nPaging).append(\n                    '<ul class=\"pagination\">' +\n                    '<li class=\"prev disabled\"><a href=\"#\">&larr; ' + oLang.sPrevious + '</a></li>' +\n                    '<li class=\"next disabled\"><a href=\"#\">' + oLang.sNext + ' &rarr; </a></li>' +\n                    '</ul>'\n                );\n                var els = $('a', nPaging);\n                $(els[0]).bind('click.DT', {\n                    action: \"previous\"\n                }, fnClickHandler);\n                $(els[1]).bind('click.DT', {\n                    action: \"next\"\n                }, fnClickHandler);\n            },\n\n            \"fnUpdate\": function(oSettings, fnDraw) {\n                var iListLength = 5;\n                var oPaging = oSettings.oInstance.fnPagingInfo();\n                var an = oSettings.aanFeatures.p;\n                var i, ien, j, sClass, iStart, iEnd, iHalf = Math.floor(iListLength / 2);\n\n                if (oPaging.iTotalPages < iListLength) {\n                    iStart = 1;\n                    iEnd = oPaging.iTotalPages;\n                } else if (oPaging.iPage <= iHalf) {\n                    iStart = 1;\n                    iEnd = iListLength;\n                } else if (oPaging.iPage >= (oPaging.iTotalPages - iHalf)) {\n                    iStart = oPaging.iTotalPages - iListLength + 1;\n                    iEnd = oPaging.iTotalPages;\n                } else {\n                    iStart = oPaging.iPage - iHalf + 1;\n                    iEnd = iStart + iListLength - 1;\n                }\n\n                for (i = 0, ien = an.length; i < ien; i++) {\n                    // Remove the middle elements\n                    $('li:gt(0)', an[i]).filter(':not(:last)').remove();\n\n                    // Add the new list items and their event handlers\n                    for (j = iStart; j <= iEnd; j++) {\n                        sClass = (j == oPaging.iPage + 1) ? 'class=\"active\"' : '';\n                        $('<li ' + sClass + '><a href=\"#\">' + j + '</a></li>')\n                            .insertBefore($('li:last', an[i])[0])\n                            .bind('click', function(e) {\n                                e.preventDefault();\n                                oSettings._iDisplayStart = (parseInt($('a', this).text(), 10) - 1) * oPaging.iLength;\n                                fnDraw(oSettings);\n                            });\n                    }\n\n                    // Add / remove disabled classes from the static elements\n                    if (oPaging.iPage === 0) {\n                        $('li:first', an[i]).addClass('disabled');\n                    } else {\n                        $('li:first', an[i]).removeClass('disabled');\n                    }\n\n                    if (oPaging.iPage === oPaging.iTotalPages - 1 || oPaging.iTotalPages === 0) {\n                        $('li:last', an[i]).addClass('disabled');\n                    } else {\n                        $('li:last', an[i]).removeClass('disabled');\n                    }\n                }\n            }\n        }\n    });\n}\n\n\n/*\n * TableTools Bootstrap compatibility\n * Required TableTools 2.1+\n */\nif ($.fn.DataTable.TableTools) {\n    // Set the classes that TableTools uses to something suitable for Bootstrap\n    $.extend(true, $.fn.DataTable.TableTools.classes, {\n        \"container\": \"DTTT btn-group\",\n        \"buttons\": {\n            \"normal\": \"btn btn-default\",\n            \"disabled\": \"disabled\"\n        },\n        \"collection\": {\n            \"container\": \"DTTT_dropdown dropdown-menu\",\n            \"buttons\": {\n                \"normal\": \"\",\n                \"disabled\": \"disabled\"\n            }\n        },\n        \"print\": {\n            \"info\": \"DTTT_print_info modal\"\n        },\n        \"select\": {\n            \"row\": \"active\"\n        }\n    });\n\n    // Have the collection use a bootstrap compatible dropdown\n    $.extend(true, $.fn.DataTable.TableTools.DEFAULTS.oTags, {\n        \"collection\": {\n            \"container\": \"ul\",\n            \"button\": \"li\",\n            \"liner\": \"a\"\n        }\n    });\n}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/dataTables/jquery.dataTables.js",
    "content": "/*! DataTables 1.10.0-dev\n * ©2008-2013 SpryMedia Ltd - datatables.net/license\n */\n\n/**\n * @summary     DataTables\n * @description Paginate, search and order HTML tables\n * @version     1.10.0-dev\n * @file        jquery.dataTables.js\n * @author      SpryMedia Ltd (www.sprymedia.co.uk)\n * @contact     www.sprymedia.co.uk/contact\n * @copyright   Copyright 2008-2013 SpryMedia Ltd.\n *\n * This source file is free software, available under the following license:\n *   MIT license - http://datatables.net/license\n *\n * This source file is distributed in the hope that it will be useful, but\n * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY\n * or FITNESS FOR A PARTICULAR PURPOSE. See the license files for details.\n *\n * For details please refer to: http://www.datatables.net\n */\n\n/*jslint evil: true, undef: true, browser: true */\n/*globals $,require,jQuery,define,_selector_run,_selector_opts,_selector_first,_selector_row_indexes,_ext,_Api,_api_register,_api_registerPlural,_re_new_lines,_re_html,_re_formatted_numeric,_empty,_intVal,_isNumber,_isHtml,_htmlNumeric,_pluck,_pluck_order,_range,_stripHtml,_unique,_fnBuildAjax,_fnAjaxUpdate,_fnAjaxParameters,_fnAjaxUpdateDraw,_fnAjaxDataSrc,_fnAddColumn,_fnColumnOptions,_fnAdjustColumnSizing,_fnVisibleToColumnIndex,_fnColumnIndexToVisible,_fnVisbleColumns,_fnGetColumns,_fnColumnTypes,_fnApplyColumnDefs,_fnHungarianMap,_fnCamelToHungarian,_fnLanguageCompat,_fnBrowserDetect,_fnAddData,_fnAddTr,_fnNodeToDataIndex,_fnNodeToColumnIndex,_fnGetRowData,_fnGetCellData,_fnSetCellData,_fnSplitObjNotation,_fnGetObjectDataFn,_fnSetObjectDataFn,_fnGetDataMaster,_fnClearTable,_fnDeleteIndex,_fnInvalidateRow,_fnGetRowElements,_fnCreateTr,_fnBuildHead,_fnDrawHead,_fnDraw,_fnReDraw,_fnAddOptionsHtml,_fnDetectHeader,_fnGetUniqueThs,_fnFeatureHtmlFilter,_fnFilterComplete,_fnFilterCustom,_fnFilterColumn,_fnFilter,_fnFilterCreateSearch,_fnEscapeRegex,_fnFilterData,_fnFeatureHtmlInfo,_fnUpdateInfo,_fnInfoMacros,_fnInitialise,_fnInitComplete,_fnLengthChange,_fnFeatureHtmlLength,_fnFeatureHtmlPaginate,_fnPageChange,_fnFeatureHtmlProcessing,_fnProcessingDisplay,_fnFeatureHtmlTable,_fnScrollDraw,_fnApplyToChildren,_fnCalculateColumnWidths,_fnThrottle,_fnConvertToWidth,_fnScrollingWidthAdjust,_fnGetWidestNode,_fnGetMaxLenString,_fnStringToCss,_fnScrollBarWidth,_fnSortFlatten,_fnSort,_fnSortAria,_fnSortListener,_fnSortAttachListener,_fnSortingClasses,_fnSortData,_fnSaveState,_fnLoadState,_fnSettingsFromNode,_fnLog,_fnMap,_fnBindAction,_fnCallbackReg,_fnCallbackFire,_fnLengthOverflow,_fnRenderer,_fnDataSource,_fnRowAttributes*/\n\n(/** @lends <global> */function( window, document, $, undefined ) {\n\n(function( factory ) {\n\t\"use strict\";\n\n\t// Define as an AMD module if possible\n\tif ( typeof define === 'function' && define.amd )\n\t{\n\t\tdefine( 'datatables', ['jquery'], factory );\n\t}\n\t/* Define using browser globals otherwise\n\t * Prevent multiple instantiations if the script is loaded twice\n\t */\n\telse if ( jQuery && !jQuery.fn.dataTable )\n\t{\n\t\tfactory( jQuery );\n\t}\n}\n(/** @lends <global> */function( $ ) {\n\t\"use strict\";\n\n\t/**\n\t * DataTables is a plug-in for the jQuery Javascript library. It is a highly\n\t * flexible tool, based upon the foundations of progressive enhancement,\n\t * which will add advanced interaction controls to any HTML table. For a\n\t * full list of features please refer to\n\t * [DataTables.net](href=\"http://datatables.net).\n\t *\n\t * Note that the `DataTable` object is not a global variable but is aliased\n\t * to `jQuery.fn.DataTable` and `jQuery.fn.dataTable` through which it may\n\t * be  accessed.\n\t *\n\t *  @class\n\t *  @param {object} [init={}] Configuration object for DataTables. Options\n\t *    are defined by {@link DataTable.defaults}\n\t *  @requires jQuery 1.3+\n\t *\n\t *  @example\n\t *    // Basic initialisation\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable();\n\t *    } );\n\t *\n\t *  @example\n\t *    // Initialisation with configuration options - in this case, disable\n\t *    // pagination and sorting.\n\t *    $(document).ready( function {\n\t *      $('#example').dataTable( {\n\t *        \"paginate\": false,\n\t *        \"sort\": false\n\t *      } );\n\t *    } );\n\t */\n\tvar DataTable;\n\n\n\t/*\n\t * It is useful to have variables which are scoped locally so only the\n\t * DataTables functions can access them and they don't leak into global space.\n\t * At the same time these functions are often useful over multiple files in the\n\t * core and API, so we list, or at least document, all variables which are used\n\t * by DataTables as private variables here. This also ensures that there is no\n\t * clashing of variable names and that they can easily referenced for reuse.\n\t */\n\n\n\t// Defined else where\n\t//  _selector_run\n\t//  _selector_opts\n\t//  _selector_first\n\t//  _selector_row_indexes\n\n\tvar _ext; // DataTable.ext\n\tvar _Api; // DataTable.Api\n\tvar _api_register; // DataTable.Api.register\n\tvar _api_registerPlural; // DataTable.Api.registerPlural\n\n\tvar _re_new_lines = /[\\r\\n]/g;\n\tvar _re_html = /<.*?>/g;\n\tvar _re_formatted_numeric = /[',$£€¥%]/g;\n\tvar _re_date_start = /^[\\d\\+\\-a-zA-Z]/;\n\n\n\n\n\tvar _empty = function ( d ) {\n\t\treturn !d || d === '-' ? true : false;\n\t};\n\n\n\tvar _intVal = function ( s ) {\n\t\tvar integer = parseInt( s, 10 );\n\t\treturn !isNaN(integer) && isFinite(s) ? integer : null;\n\t};\n\n\n\tvar _isNumber = function ( d, formatted ) {\n\t\tif ( formatted && typeof d === 'string' ) {\n\t\t\td = d.replace( _re_formatted_numeric, '' );\n\t\t}\n\n\t\treturn !d || d==='-' || (!isNaN( parseFloat(d) ) && isFinite( d ));\n\t};\n\n\n\t// A string without HTML in it can be considered to be HTML still\n\tvar _isHtml = function ( d ) {\n\t\treturn !d || typeof d === 'string';\n\t};\n\n\n\tvar _htmlNumeric = function ( d, formatted ) {\n\t\tif ( _empty( d ) ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tvar html = _isHtml( d );\n\t\treturn ! html ?\n\t\t\tnull :\n\t\t\t_isNumber( _stripHtml( d ), formatted ) ?\n\t\t\t\ttrue :\n\t\t\t\tnull;\n\t};\n\n\n\tvar _pluck = function ( a, prop, prop2 ) {\n\t\tvar out = [];\n\t\tvar i=0, ien=a.length;\n\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] && a[i][ prop ] ) {\n\t\t\t\t\tout.push( a[i][ prop ][ prop2 ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tif ( a[i] ) {\n\t\t\t\t\tout.push( a[i][ prop ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t};\n\n\n\t// Basically the same as _pluck, but rather than looping over `a` we use `order`\n\t// as the indexes to pick from `a`\n\tvar _pluck_order = function ( a, order, prop, prop2 )\n\t{\n\t\tvar out = [];\n\t\tvar i=0, ien=order.length;\n\n\t\t// Could have the test in the loop for slightly smaller code, but speed\n\t\t// is essential here\n\t\tif ( prop2 !== undefined ) {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ][ prop2 ] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tfor ( ; i<ien ; i++ ) {\n\t\t\t\tout.push( a[ order[i] ][ prop ] );\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t};\n\n\n\tvar _range = function ( len, start )\n\t{\n\t\tvar out = [];\n\t\tvar end;\n\n\t\tif ( start === undefined ) {\n\t\t\tstart = 0;\n\t\t\tend = len;\n\t\t}\n\t\telse {\n\t\t\tend = start;\n\t\t\tstart = len;\n\t\t}\n\n\t\tfor ( var i=start ; i<end ; i++ ) {\n\t\t\tout.push( i );\n\t\t}\n\n\t\treturn out;\n\t};\n\n\n\tvar _stripHtml = function ( d ) {\n\t\treturn d.replace( _re_html, '' );\n\t};\n\n\n\t/**\n\t * Find the unique elements in a source array.\n\t *\n\t * @param  {array} src Source array\n\t * @return {array} Array of unique items\n\t * @ignore\n\t */\n\tvar _unique = function ( src )\n\t{\n\t\t// A faster unique method is to use object keys to identify used values,\n\t\t// but this doesn't work with arrays or objects, which we must also\n\t\t// consider. See jsperf.com/compare-array-unique-versions/4 for more\n\t\t// information.\n\t\tvar\n\t\t\tout = [],\n\t\t\tval,\n\t\t\ti, ien=src.length,\n\t\t\tj, k=0;\n\n\t\tagain: for ( i=0 ; i<ien ; i++ ) {\n\t\t\tval = src[i];\n\n\t\t\tfor ( j=0 ; j<k ; j++ ) {\n\t\t\t\tif ( out[j] === val ) {\n\t\t\t\t\tcontinue again;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tout.push( val );\n\t\t\tk++;\n\t\t}\n\n\t\treturn out;\n\t};\n\n\n\n\t/**\n\t * Create a mapping object that allows camel case parameters to be looked up\n\t * for their Hungarian counterparts. The mapping is stored in a private\n\t * parameter called `_hungarianMap` which can be accessed on the source object.\n\t *  @param {object} o\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnHungarianMap ( o )\n\t{\n\t\tvar\n\t\t\thungarian = 'a aa ao as b fn i m o s ',\n\t\t\tmatch,\n\t\t\tnewKey,\n\t\t\tmap = {};\n\n\t\t$.each( o, function (key, val) {\n\t\t\tmatch = key.match(/^([^A-Z]+?)([A-Z])/);\n\n\t\t\tif ( match && hungarian.indexOf(match[1]+' ') !== -1 )\n\t\t\t{\n\t\t\t\tnewKey = key.replace( match[0], match[2].toLowerCase() );\n\t\t\t\tmap[ newKey ] = key;\n\n\t\t\t\tif ( match[1] === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnHungarianMap( o[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\n\t\to._hungarianMap = map;\n\t}\n\n\n\t/**\n\t * Convert from camel case parameters to Hungarian, based on a Hungarian map\n\t * created by _fnHungarianMap.\n\t *  @param {object} src The model object which holds all parameters that can be\n\t *    mapped.\n\t *  @param {object} user The object to convert from camel case to Hungarian.\n\t *  @param {boolean} force When set to `true`, properties which already have a\n\t *    Hungarian value in the `user` object will be overwritten. Otherwise they\n\t *    won't be.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCamelToHungarian ( src, user, force )\n\t{\n\t\tif ( ! src._hungarianMap )\n\t\t{\n\t\t\t_fnHungarianMap( src );\n\t\t}\n\n\t\tvar hungarianKey;\n\n\t\t$.each( user, function (key, val) {\n\t\t\thungarianKey = src._hungarianMap[ key ];\n\n\t\t\tif ( hungarianKey !== undefined && (force || user[hungarianKey] === undefined) )\n\t\t\t{\n\t\t\t\tuser[hungarianKey] = user[ key ];\n\n\t\t\t\tif ( hungarianKey.charAt(0) === 'o' )\n\t\t\t\t{\n\t\t\t\t\t_fnCamelToHungarian( src[hungarianKey], user[key] );\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t}\n\n\n\t/**\n\t * Language compatibility - when certain options are given, and others aren't, we\n\t * need to duplicate the values over, in order to provide backwards compatibility\n\t * with older language files.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLanguageCompat( oLanguage )\n\t{\n\t\tvar oDefaults = DataTable.defaults.oLanguage;\n\t\tvar zeroRecords = oLanguage.sZeroRecords;\n\n\t\t/* Backwards compatibility - if there is no sEmptyTable given, then use the same as\n\t\t * sZeroRecords - assuming that is given.\n\t\t */\n\t\tif ( !oLanguage.sEmptyTable && zeroRecords &&\n\t\t\toDefaults.sEmptyTable === \"没有数据\" )\n\t\t{\n\t\t\t_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sEmptyTable' );\n\t\t}\n\n\t\t/* Likewise with loading records */\n\t\tif ( !oLanguage.sLoadingRecords && zeroRecords &&\n\t\t\toDefaults.sLoadingRecords === \"加载中…\" )\n\t\t{\n\t\t\t_fnMap( oLanguage, oLanguage, 'sZeroRecords', 'sLoadingRecords' );\n\t\t}\n\t}\n\n\n\t/**\n\t * Map one parameter onto another\n\t *  @param {object} o Object to map\n\t *  @param {*} knew The new parameter name\n\t *  @param {*} old The old parameter name\n\t */\n\tvar _fnCompatMap = function ( o, knew, old ) {\n\t\tif ( o[ knew ] !== undefined ) {\n\t\t\to[ old ] = o[ knew ];\n\t\t}\n\t};\n\n\n\t/**\n\t * Provide backwards compatibility for the main DT options. Note that the new\n\t * options are mapped onto the old parameters, so this is an external interface\n\t * change only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatOpts ( init )\n\t{\n\t\t_fnCompatMap( init, 'ordering',      'bSort' );\n\t\t_fnCompatMap( init, 'orderMulti',    'bSortMulti' );\n\t\t_fnCompatMap( init, 'orderClasses',  'bSortClasses' );\n\t\t_fnCompatMap( init, 'orderCellsTop', 'bSortCellsTop' );\n\t\t_fnCompatMap( init, 'order',         'aaSorting' );\n\t\t_fnCompatMap( init, 'orderFixed',    'aaSortingFixed' );\n\t\t_fnCompatMap( init, 'paging',        'bPaginate' );\n\t\t_fnCompatMap( init, 'pagingType',    'sPaginationType' );\n\t\t_fnCompatMap( init, 'pageLength',    'iDisplayLength' );\n\t\t_fnCompatMap( init, 'searching',     'bFilter' );\n\t}\n\n\n\t/**\n\t * Provide backwards compatibility for column options. Note that the new options\n\t * are mapped onto the old parameters, so this is an external interface change\n\t * only.\n\t *  @param {object} init Object to map\n\t */\n\tfunction _fnCompatCols ( init )\n\t{\n\t\t_fnCompatMap( init, 'orderable',     'bSortable' );\n\t\t_fnCompatMap( init, 'orderData',     'aDataSort' );\n\t\t_fnCompatMap( init, 'orderSequence', 'asSorting' );\n\t\t_fnCompatMap( init, 'orderDataType', 'sortDataType' );\n\t}\n\n\n\t/**\n\t * Browser feature detection for capabilities, quirks\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBrowserDetect( settings )\n\t{\n\t\tvar browser = settings.oBrowser;\n\n\t\t// Scrolling feature / quirks detection\n\t\tvar n = $('<div/>')\n\t\t\t.css( {\n\t\t\t\tposition: 'absolute',\n\t\t\t\ttop: 0,\n\t\t\t\tleft: 0,\n\t\t\t\theight: 1,\n\t\t\t\twidth: 1,\n\t\t\t\toverflow: 'hidden'\n\t\t\t} )\n\t\t\t.append(\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.css( {\n\t\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\t\ttop: 1,\n\t\t\t\t\t\tleft: 1,\n\t\t\t\t\t\twidth: 100,\n\t\t\t\t\t\toverflow: 'scroll'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$('<div class=\"test\"/>')\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\twidth: '100%',\n\t\t\t\t\t\t\t\theight: 10\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t)\n\t\t\t)\n\t\t\t.appendTo( 'body' );\n\n\t\tvar test = n.find('.test');\n\n\t\t// IE6/7 will oversize a width 100% element inside a scrolling element, to\n\t\t// include the width of the scrollbar, while other browsers ensure the inner\n\t\t// element is contained without forcing scrolling\n\t\tbrowser.bScrollOversize = test[0].offsetWidth === 100;\n\n\t\t// In rtl text layout, some browsers (most, but not all) will place the\n\t\t// scrollbar on the left, rather than the right.\n\t\tbrowser.bScrollbarLeft = test.offset().left !== 1;\n\n\t\tn.remove();\n\t}\n\n\t/**\n\t * Add a column to the list used for the table with default values\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nTh The th element for this column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddColumn( oSettings, nTh )\n\t{\n\t\tvar oDefaults = DataTable.defaults.column;\n\t\tvar iCol = oSettings.aoColumns.length;\n\t\tvar oCol = $.extend( {}, DataTable.models.oColumn, oDefaults, {\n\t\t\t\"sSortingClass\": oSettings.oClasses.sSortable,\n\t\t\t\"sSortingClassJUI\": oSettings.oClasses.sSortJUI,\n\t\t\t\"nTh\": nTh ? nTh : document.createElement('th'),\n\t\t\t\"sTitle\":    oDefaults.sTitle    ? oDefaults.sTitle    : nTh ? nTh.innerHTML : '',\n\t\t\t\"aDataSort\": oDefaults.aDataSort ? oDefaults.aDataSort : [iCol],\n\t\t\t\"mData\": oDefaults.mData ? oDefaults.mData : iCol\n\t\t} );\n\t\toSettings.aoColumns.push( oCol );\n\n\t\t/* Add a column specific filter */\n\t\tif ( oSettings.aoPreSearchCols[ iCol ] === undefined || oSettings.aoPreSearchCols[ iCol ] === null )\n\t\t{\n\t\t\toSettings.aoPreSearchCols[ iCol ] = $.extend( true, {}, DataTable.models.oSearch );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tvar oPre = oSettings.aoPreSearchCols[ iCol ];\n\n\t\t\t/* Don't require that the user must specify bRegex, bSmart or bCaseInsensitive */\n\t\t\tif ( oPre.bRegex === undefined )\n\t\t\t{\n\t\t\t\toPre.bRegex = true;\n\t\t\t}\n\n\t\t\tif ( oPre.bSmart === undefined )\n\t\t\t{\n\t\t\t\toPre.bSmart = true;\n\t\t\t}\n\n\t\t\tif ( oPre.bCaseInsensitive === undefined )\n\t\t\t{\n\t\t\t\toPre.bCaseInsensitive = true;\n\t\t\t}\n\t\t}\n\n\t\t/* Use the column options function to initialise classes etc */\n\t\t_fnColumnOptions( oSettings, iCol, null );\n\t}\n\n\n\t/**\n\t * Apply options for a column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iCol column index to consider\n\t *  @param {object} oOptions object with sType, bVisible and bSearchable etc\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnOptions( oSettings, iCol, oOptions )\n\t{\n\t\tvar oCol = oSettings.aoColumns[ iCol ];\n\t\tvar oClasses = oSettings.oClasses;\n\n\t\t/* User specified column options */\n\t\tif ( oOptions !== undefined && oOptions !== null )\n\t\t{\n\t\t\t// Backwards compatibility\n\t\t\t_fnCompatCols( oOptions );\n\n\t\t\t// Map camel case parameters to their Hungarian counterparts\n\t\t\t_fnCamelToHungarian( DataTable.defaults.column, oOptions );\n\n\t\t\t/* Backwards compatibility for mDataProp */\n\t\t\tif ( oOptions.mDataProp !== undefined && !oOptions.mData )\n\t\t\t{\n\t\t\t\toOptions.mData = oOptions.mDataProp;\n\t\t\t}\n\n\t\t\toCol._sManualType = oOptions.sType;\n\n\t\t\t// `class` is a reserved word in Javascript, so we need to provide\n\t\t\t// the ability to use a valid name for the camel case input\n\t\t\tif ( oOptions.className && ! oOptions.sClass )\n\t\t\t{\n\t\t\t\toOptions.sClass = oOptions.className;\n\t\t\t}\n\n\t\t\t$.extend( oCol, oOptions );\n\t\t\t_fnMap( oCol, oOptions, \"sWidth\", \"sWidthOrig\" );\n\n\t\t\t/* iDataSort to be applied (backwards compatibility), but aDataSort will take\n\t\t\t * priority if defined\n\t\t\t */\n\t\t\tif ( typeof oOptions.iDataSort === 'number' )\n\t\t\t{\n\t\t\t\toCol.aDataSort = [ oOptions.iDataSort ];\n\t\t\t}\n\t\t\t_fnMap( oCol, oOptions, \"aDataSort\" );\n\t\t}\n\n\t\t/* Cache the data get and set functions for speed */\n\t\tvar mDataSrc = oCol.mData;\n\t\tvar mData = _fnGetObjectDataFn( mDataSrc );\n\t\tvar mRender = oCol.mRender ? _fnGetObjectDataFn( oCol.mRender ) : null;\n\n\t\tvar attrTest = function( src ) {\n\t\t\treturn typeof src === 'string' && src.indexOf('@') !== -1;\n\t\t};\n\t\toCol._bAttrSrc = $.isPlainObject( mDataSrc ) && (\n\t\t\tattrTest(mDataSrc.sort) || attrTest(mDataSrc.type) || attrTest(mDataSrc.filter)\n\t\t);\n\n\t\toCol.fnGetData = function (oData, sSpecific) {\n\t\t\tvar innerData = mData( oData, sSpecific );\n\n\t\t\tif ( oCol.mRender && (sSpecific && sSpecific !== '') )\n\t\t\t{\n\t\t\t\treturn mRender( innerData, sSpecific, oData );\n\t\t\t}\n\t\t\treturn innerData;\n\t\t};\n\t\toCol.fnSetData = _fnSetObjectDataFn( mDataSrc );\n\n\t\t/* Feature sorting overrides column specific when off */\n\t\tif ( !oSettings.oFeatures.bSort )\n\t\t{\n\t\t\toCol.bSortable = false;\n\t\t}\n\n\t\t/* Check that the class assignment is correct for sorting */\n\t\tvar bAsc = $.inArray('asc', oCol.asSorting) !== -1;\n\t\tvar bDesc = $.inArray('desc', oCol.asSorting) !== -1;\n\t\tif ( !oCol.bSortable || (!bAsc && !bDesc) )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableNone;\n\t\t\toCol.sSortingClassJUI = \"\";\n\t\t}\n\t\telse if ( bAsc && !bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableAsc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIAscAllowed;\n\t\t}\n\t\telse if ( !bAsc && bDesc )\n\t\t{\n\t\t\toCol.sSortingClass = oClasses.sSortableDesc;\n\t\t\toCol.sSortingClassJUI = oClasses.sSortJUIDescAllowed;\n\t\t}\n\t}\n\n\n\t/**\n\t * Adjust the table column widths for new data. Note: you would probably want to\n\t * do a redraw after calling this function!\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAdjustColumnSizing ( settings )\n\t{\n\t\t/* Not interested in doing column width calculation if auto-width is disabled */\n\t\tif ( settings.oFeatures.bAutoWidth !== false )\n\t\t{\n\t\t\tvar columns = settings.aoColumns;\n\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t\tfor ( var i=0 , iLen=columns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tcolumns[i].nTh.style.width = columns[i].sWidth;\n\t\t\t}\n\t\t}\n\n\t\tvar scroll = settings.oScroll;\n\t\tif ( scroll.sY !== '' || scroll.sX !== '')\n\t\t{\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\n\t\t_fnCallbackFire( settings, null, 'column-sizing', [settings] );\n\t}\n\n\n\t/**\n\t * Covert the index of a visible column to the index in the data array (take account\n\t * of hidden columns)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iMatch Visible column index to lookup\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisibleToColumnIndex( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\n\t\treturn typeof aiVis[iMatch] === 'number' ?\n\t\t\taiVis[iMatch] :\n\t\t\tnull;\n\t}\n\n\n\t/**\n\t * Covert the index of an index in the data array and convert it to the visible\n\t *   column index (take account of hidden columns)\n\t *  @param {int} iMatch Column index to lookup\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the data index\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnColumnIndexToVisible( oSettings, iMatch )\n\t{\n\t\tvar aiVis = _fnGetColumns( oSettings, 'bVisible' );\n\t\tvar iPos = $.inArray( iMatch, aiVis );\n\n\t\treturn iPos !== -1 ? iPos : null;\n\t}\n\n\n\t/**\n\t * Get the number of visible columns\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {int} i the number of visible columns\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnVisbleColumns( oSettings )\n\t{\n\t\treturn _fnGetColumns( oSettings, 'bVisible' ).length;\n\t}\n\n\n\t/**\n\t * Get an array of column indexes that match a given property\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sParam Parameter in aoColumns to look for - typically\n\t *    bVisible or bSearchable\n\t *  @returns {array} Array of indexes with matched properties\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetColumns( oSettings, sParam )\n\t{\n\t\tvar a = [];\n\n\t\t$.map( oSettings.aoColumns, function(val, i) {\n\t\t\tif ( val[sParam] ) {\n\t\t\t\ta.push( i );\n\t\t\t}\n\t\t} );\n\n\t\treturn a;\n\t}\n\n\n\tfunction _fnColumnTypes ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar data = settings.aoData;\n\t\tvar types = DataTable.ext.type.detect;\n\t\tvar i, ien, j, jen, k, ken;\n\t\tvar col, cell, detectedType, cache;\n\n\t\t// For each column, spin over the\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcol = columns[i];\n\t\t\tcache = [];\n\n\t\t\tif ( ! col.sType && col._sManualType ) {\n\t\t\t\tcol.sType = col._sManualType;\n\t\t\t}\n\t\t\telse if ( ! col.sType ) {\n\t\t\t\tfor ( j=0, jen=types.length ; j<jen ; j++ ) {\n\t\t\t\t\tfor ( k=0, ken=data.length ; k<ken ; k++ ) {\n\t\t\t\t\t\t// Use a cache array so we only need to get the type data\n\t\t\t\t\t\t// from the formatter once (when using multiple detectors)\n\t\t\t\t\t\tif ( cache[k] === undefined ) {\n\t\t\t\t\t\t\tcache[k] = _fnGetCellData( settings, k, i, 'type' );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdetectedType = types[j]( cache[k] );\n\n\t\t\t\t\t\t// Doesn't match, so break early, since this type can't\n\t\t\t\t\t\t// apply to this column. Also, HTML is a special case since\n\t\t\t\t\t\t// it is so similar to `string`. Just a single match is\n\t\t\t\t\t\t// needed for a column to be html type\n\t\t\t\t\t\tif ( ! detectedType || detectedType === 'html' ) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Type is valid for all data points in the column - use this\n\t\t\t\t\t// type\n\t\t\t\t\tif ( detectedType ) {\n\t\t\t\t\t\tcol.sType = detectedType;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// Fall back - if no type was detected, always use string\n\t\t\t\tif ( ! col.sType ) {\n\t\t\t\t\tcol.sType = 'string';\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Take the column definitions and static columns arrays and calculate how\n\t * they relate to column indexes. The callback function will then apply the\n\t * definition found for a column to a suitable configuration object.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aoColDefs The aoColumnDefs array that is to be applied\n\t *  @param {array} aoCols The aoColumns array that defines columns individually\n\t *  @param {function} fn Callback function - takes two parameters, the calculated\n\t *    column index and the definition for that column.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyColumnDefs( oSettings, aoColDefs, aoCols, fn )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, def;\n\n\t\t// Column definitions with aTargets\n\t\tif ( aoColDefs )\n\t\t{\n\t\t\t/* Loop over the definitions array - loop in reverse so first instance has priority */\n\t\t\tfor ( i=aoColDefs.length-1 ; i>=0 ; i-- )\n\t\t\t{\n\t\t\t\tdef = aoColDefs[i];\n\n\t\t\t\t/* Each definition can target multiple columns, as it is an array */\n\t\t\t\tvar aTargets = def.targets !== undefined ?\n\t\t\t\t\tdef.targets :\n\t\t\t\t\tdef.aTargets;\n\n\t\t\t\tif ( ! $.isArray( aTargets ) )\n\t\t\t\t{\n\t\t\t\t\taTargets = [ aTargets ];\n\t\t\t\t}\n\n\t\t\t\tfor ( j=0, jLen=aTargets.length ; j<jLen ; j++ )\n\t\t\t\t{\n\t\t\t\t\tif ( typeof aTargets[j] === 'number' && aTargets[j] >= 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Add columns that we don't yet know about */\n\t\t\t\t\t\twhile( oSettings.aoColumns.length <= aTargets[j] )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t_fnAddColumn( oSettings );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t/* Integer, basic index */\n\t\t\t\t\t\tfn( aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'number' && aTargets[j] < 0 )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Negative integer, right to left column counting */\n\t\t\t\t\t\tfn( oSettings.aoColumns.length+aTargets[j], def );\n\t\t\t\t\t}\n\t\t\t\t\telse if ( typeof aTargets[j] === 'string' )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Class name matching on TH element */\n\t\t\t\t\t\tfor ( k=0, kLen=oSettings.aoColumns.length ; k<kLen ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tif ( aTargets[j] == \"_all\" ||\n\t\t\t\t\t\t\t     $(oSettings.aoColumns[k].nTh).hasClass( aTargets[j] ) )\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tfn( k, def );\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\t// Statically defined columns array\n\t\tif ( aoCols )\n\t\t{\n\t\t\tfor ( i=0, iLen=aoCols.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\tfn( i, aoCols[i] );\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Add a data array to the table, creating DOM node etc. This is the parallel to\n\t * _fnGatherData, but for adding rows from a Javascript source, rather than a\n\t * DOM source.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {array} aData data array to be added\n\t *  @param {node} [nTr] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @returns {int} >=0 if successful (index of new aoData entry), -1 if failed\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddData ( oSettings, aDataIn, nTr, anTds )\n\t{\n\t\t/* Create the object for storing information about this new row */\n\t\tvar iRow = oSettings.aoData.length;\n\t\tvar oData = $.extend( true, {}, DataTable.models.oRow, {\n\t\t\tsrc: nTr ? 'dom' : 'data'\n\t\t} );\n\n\t\toData._aData = aDataIn;\n\t\toSettings.aoData.push( oData );\n\n\t\t/* Create the cells */\n\t\tvar nTd, sThisType;\n\t\tvar columns = oSettings.aoColumns;\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\t// When working with a row, the data source object must be populated. In\n\t\t\t// all other cases, the data source object is already populated, so we\n\t\t\t// don't overwrite it, which might break bindings etc\n\t\t\tif ( nTr ) {\n\t\t\t\t_fnSetCellData( oSettings, iRow, i, _fnGetCellData( oSettings, iRow, i ) );\n\t\t\t}\n\t\t\tcolumns[i].sType = null;\n\t\t}\n\n\t\t/* Add to the display array */\n\t\toSettings.aiDisplayMaster.push( iRow );\n\n\t\t/* Create the DOM information */\n\t\tif ( !oSettings.oFeatures.bDeferRender )\n\t\t{\n\t\t\t_fnCreateTr( oSettings, iRow, nTr, anTds );\n\t\t}\n\n\t\treturn iRow;\n\t}\n\n\n\t/**\n\t * Add one or more TR elements to the table. Generally we'd expect to\n\t * use this for reading data from a DOM sourced table, but it could be\n\t * used for an TR element. Note that if a TR is given, it is used (i.e.\n\t * it is not cloned).\n\t *  @param {object} settings dataTables settings object\n\t *  @param {array|node|jQuery} trs The TR element(s) to add to the table\n\t *  @returns {array} Array of indexes for the added rows\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddTr( settings, trs )\n\t{\n\t\tvar row;\n\n\t\t// Allow an individual node to be passed in\n\t\tif ( ! (trs instanceof $) ) {\n\t\t\ttrs = $(trs);\n\t\t}\n\n\t\treturn trs.map( function (i, el) {\n\t\t\trow = _fnGetRowElements( settings, el );\n\t\t\treturn _fnAddData( settings, row.data, el, row.cells );\n\t\t} );\n\t}\n\n\n\t/**\n\t * Take a TR element and convert it to an index in aoData\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n the TR element to find\n\t *  @returns {int} index if the node is found, null if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToDataIndex( oSettings, n )\n\t{\n\t\treturn (n._DT_RowIndex!==undefined) ? n._DT_RowIndex : null;\n\t}\n\n\n\t/**\n\t * Take a TD element and convert it into a column data index (not the visible index)\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow The row number the TD/TH can be found in\n\t *  @param {node} n The TD/TH element to find\n\t *  @returns {int} index if the node is found, -1 if not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnNodeToColumnIndex( oSettings, iRow, n )\n\t{\n\t\treturn $.inArray( n, oSettings.aoData[ iRow ].anCells );\n\t}\n\n\n\t/**\n\t * Get an array of data for a given row from the internal data cache\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow aoData row id\n\t *  @param {string} sSpecific data get type ('type' 'filter' 'sort')\n\t *  @param {array} aiColumns Array of column indexes to get data from\n\t *  @returns {array} Data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowData( oSettings, iRow, sSpecific, aiColumns )\n\t{\n\t\tvar out = [];\n\t\tfor ( var i=0, iLen=aiColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tout.push( _fnGetCellData( oSettings, iRow, aiColumns[i], sSpecific ) );\n\t\t}\n\t\treturn out;\n\t}\n\n\n\t/**\n\t * Get the data for a given cell from the internal cache, taking into account data mapping\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow aoData row id\n\t *  @param {int} iCol Column index\n\t *  @param {string} sSpecific data get type ('display', 'type' 'filter' 'sort')\n\t *  @returns {*} Cell data\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetCellData( oSettings, iRow, iCol, sSpecific )\n\t{\n\t\tvar oCol = oSettings.aoColumns[iCol];\n\t\tvar oData = oSettings.aoData[iRow]._aData;\n\t\tvar sData = oCol.fnGetData( oData, sSpecific );\n\n\t\tif ( sData === undefined )\n\t\t{\n\t\t\tif ( oSettings.iDrawError != oSettings.iDraw && oCol.sDefaultContent === null )\n\t\t\t{\n\t\t\t\t_fnLog( oSettings, 0, \"Requested unknown parameter \"+\n\t\t\t\t\t(typeof oCol.mData=='function' ? '{function}' : \"'\"+oCol.mData+\"'\")+\n\t\t\t\t\t\" for row \"+iRow, 4 );\n\t\t\t\toSettings.iDrawError = oSettings.iDraw;\n\t\t\t}\n\t\t\treturn oCol.sDefaultContent;\n\t\t}\n\n\t\t/* When the data source is null, we can use default column data */\n\t\tif ( (sData === oData || sData === null) && oCol.sDefaultContent !== null )\n\t\t{\n\t\t\tsData = oCol.sDefaultContent;\n\t\t}\n\t\telse if ( typeof sData === 'function' )\n\t\t{\n\t\t\t// If the data source is a function, then we run it and use the return\n\t\t\treturn sData();\n\t\t}\n\n\t\tif ( sData === null && sSpecific == 'display' )\n\t\t{\n\t\t\treturn '';\n\t\t}\n\t\treturn sData;\n\t}\n\n\n\t/**\n\t * Set the value for a specific cell, into the internal data cache\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow aoData row id\n\t *  @param {int} iCol Column index\n\t *  @param {*} val Value to set\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetCellData( oSettings, iRow, iCol, val )\n\t{\n\t\tvar oCol = oSettings.aoColumns[iCol];\n\t\tvar oData = oSettings.aoData[iRow]._aData;\n\n\t\toCol.fnSetData( oData, val );\n\t}\n\n\n\t// Private variable that is used to match action syntax in the data property object\n\tvar __reArray = /\\[.*?\\]$/;\n\tvar __reFn = /\\(\\)$/;\n\n\t/**\n\t * Split string on periods, taking into account escaped periods\n\t * @param  {string} str String to split\n\t * @return {array} Split string\n\t */\n\tfunction _fnSplitObjNotation( str )\n\t{\n\t\treturn $.map( str.match(/(\\\\.|[^\\.])+/g), function ( s ) {\n\t\t\treturn s.replace('\\\\.', '.');\n\t\t} );\n\t}\n\n\n\t/**\n\t * Return a function that can be used to get data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data get function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Build an object of get functions, and wrap them in a single call */\n\t\t\tvar o = {};\n\t\t\t$.each( mSource, function (key, val) {\n\t\t\t\tif ( val ) {\n\t\t\t\t\to[key] = _fnGetObjectDataFn( val );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn function (data, type, extra) {\n\t\t\t\treturn o[ o[type] !== undefined ? type : '_' ](data, type, extra);\n\t\t\t};\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Give an empty string for rendering / sorting etc */\n\t\t\treturn function (data, type) {\n\t\t\t\treturn data;\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, type, extra) {\n\t\t\t\treturn mSource( data, type, extra );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* If there is a . in the source string then the data source is in a\n\t\t\t * nested object so we loop over the data for each level to get the next\n\t\t\t * level down. On each loop we test for undefined, and if found immediately\n\t\t\t * return. This allows entire objects to be missing and sDefaultContent to\n\t\t\t * be used if defined, rather than throwing an error\n\t\t\t */\n\t\t\tvar fetchData = function (data, type, src) {\n\t\t\t\tvar arrayNotation, funcNotation, out, innerSrc;\n\n\t\t\t\tif ( src !== \"\" )\n\t\t\t\t{\n\t\t\t\t\tvar a = _fnSplitObjNotation( src );\n\n\t\t\t\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Check if we are dealing with special notation\n\t\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\n\t\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Array notation\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\n\t\t\t\t\t\t\t// Condition allows simply [] to be passed in\n\t\t\t\t\t\t\tif ( a[i] !== \"\" ) {\n\t\t\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tout = [];\n\n\t\t\t\t\t\t\t// Get the remainder of the nested object to get\n\t\t\t\t\t\t\ta.splice( 0, i+1 );\n\t\t\t\t\t\t\tinnerSrc = a.join('.');\n\n\t\t\t\t\t\t\t// Traverse each entry in the array getting the properties requested\n\t\t\t\t\t\t\tfor ( var j=0, jLen=data.length ; j<jLen ; j++ ) {\n\t\t\t\t\t\t\t\tout.push( fetchData( data[j], type, innerSrc ) );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// If a string is given in between the array notation indicators, that\n\t\t\t\t\t\t\t// is used to join the strings together, otherwise an array is returned\n\t\t\t\t\t\t\tvar join = arrayNotation[0].substring(1, arrayNotation[0].length-1);\n\t\t\t\t\t\t\tdata = (join===\"\") ? out : out.join(join);\n\n\t\t\t\t\t\t\t// The inner call to fetchData has already traversed through the remainder\n\t\t\t\t\t\t\t// of the source requested, so we exit from the loop\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t// Function call\n\t\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\t\tdata = data[ a[i] ]();\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( data === null || data[ a[i] ] === undefined )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\treturn undefined;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn data;\n\t\t\t};\n\n\t\t\treturn function (data, type) {\n\t\t\t\treturn fetchData( data, type, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, type) {\n\t\t\t\treturn data[mSource];\n\t\t\t};\n\t\t}\n\t}\n\n\n\t/**\n\t * Return a function that can be used to set data from a source object, taking\n\t * into account the ability to use nested objects as a source\n\t *  @param {string|int|function} mSource The data source for the object\n\t *  @returns {function} Data set function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSetObjectDataFn( mSource )\n\t{\n\t\tif ( $.isPlainObject( mSource ) )\n\t\t{\n\t\t\t/* Unlike get, only the underscore (global) option is used for for\n\t\t\t * setting data since we don't know the type here. This is why an object\n\t\t\t * option is not documented for `mData` (which is read/write), but it is\n\t\t\t * for `mRender` which is read only.\n\t\t\t */\n\t\t\treturn _fnSetObjectDataFn( mSource._ );\n\t\t}\n\t\telse if ( mSource === null )\n\t\t{\n\t\t\t/* Nothing to do when the data source is null */\n\t\t\treturn function (data, val) {};\n\t\t}\n\t\telse if ( typeof mSource === 'function' )\n\t\t{\n\t\t\treturn function (data, val) {\n\t\t\t\tmSource( data, 'set', val );\n\t\t\t};\n\t\t}\n\t\telse if ( typeof mSource === 'string' && (mSource.indexOf('.') !== -1 ||\n\t\t\t      mSource.indexOf('[') !== -1 || mSource.indexOf('(') !== -1) )\n\t\t{\n\t\t\t/* Like the get, we need to get data from a nested object */\n\t\t\tvar setData = function (data, val, src) {\n\t\t\t\tvar a = _fnSplitObjNotation( src ), b;\n\t\t\t\tvar aLast = a[a.length-1];\n\t\t\t\tvar arrayNotation, funcNotation, o, innerSrc;\n\n\t\t\t\tfor ( var i=0, iLen=a.length-1 ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\t// Check if we are dealing with an array notation request\n\t\t\t\t\tarrayNotation = a[i].match(__reArray);\n\t\t\t\t\tfuncNotation = a[i].match(__reFn);\n\n\t\t\t\t\tif ( arrayNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\ta[i] = a[i].replace(__reArray, '');\n\t\t\t\t\t\tdata[ a[i] ] = [];\n\n\t\t\t\t\t\t// Get the remainder of the nested object to set so we can recurse\n\t\t\t\t\t\tb = a.slice();\n\t\t\t\t\t\tb.splice( 0, i+1 );\n\t\t\t\t\t\tinnerSrc = b.join('.');\n\n\t\t\t\t\t\t// Traverse each entry in the array setting the properties requested\n\t\t\t\t\t\tfor ( var j=0, jLen=val.length ; j<jLen ; j++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\to = {};\n\t\t\t\t\t\t\tsetData( o, val[j], innerSrc );\n\t\t\t\t\t\t\tdata[ a[i] ].push( o );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// The inner call to setData has already traversed through the remainder\n\t\t\t\t\t\t// of the source and has set the data, thus we can exit here\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( funcNotation )\n\t\t\t\t\t{\n\t\t\t\t\t\t// Function call\n\t\t\t\t\t\ta[i] = a[i].replace(__reFn, '');\n\t\t\t\t\t\tdata = data[ a[i] ]( val );\n\t\t\t\t\t}\n\n\t\t\t\t\t// If the nested object doesn't currently exist - since we are\n\t\t\t\t\t// trying to set the value - create it\n\t\t\t\t\tif ( data[ a[i] ] === null || data[ a[i] ] === undefined )\n\t\t\t\t\t{\n\t\t\t\t\t\tdata[ a[i] ] = {};\n\t\t\t\t\t}\n\t\t\t\t\tdata = data[ a[i] ];\n\t\t\t\t}\n\n\t\t\t\t// Last item in the input - i.e, the actual set\n\t\t\t\tif ( aLast.match(__reFn ) )\n\t\t\t\t{\n\t\t\t\t\t// Function call\n\t\t\t\t\tdata = data[ aLast.replace(__reFn, '') ]( val );\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t// If array notation is used, we just want to strip it and use the property name\n\t\t\t\t\t// and assign the value. If it isn't used, then we get the result we want anyway\n\t\t\t\t\tdata[ aLast.replace(__reArray, '') ] = val;\n\t\t\t\t}\n\t\t\t};\n\n\t\t\treturn function (data, val) {\n\t\t\t\treturn setData( data, val, mSource );\n\t\t\t};\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Array or flat object mapping */\n\t\t\treturn function (data, val) {\n\t\t\t\tdata[mSource] = val;\n\t\t\t};\n\t\t}\n\t}\n\n\n\t/**\n\t * Return an array with the full table data\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns array {array} aData Master data array\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetDataMaster ( settings )\n\t{\n\t\treturn _pluck( settings.aoData, '_aData' );\n\t}\n\n\n\t/**\n\t * Nuke the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnClearTable( settings )\n\t{\n\t\tsettings.aoData.length = 0;\n\t\tsettings.aiDisplayMaster.length = 0;\n\t\tsettings.aiDisplay.length = 0;\n\t}\n\n\n\t /**\n\t * Take an array of integers (index array) and remove a target integer (value - not\n\t * the key!)\n\t *  @param {array} a Index array to target\n\t *  @param {int} iTarget value to find\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDeleteIndex( a, iTarget, splice )\n\t{\n\t\tvar iTargetIndex = -1;\n\n\t\tfor ( var i=0, iLen=a.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tif ( a[i] == iTarget )\n\t\t\t{\n\t\t\t\tiTargetIndex = i;\n\t\t\t}\n\t\t\telse if ( a[i] > iTarget )\n\t\t\t{\n\t\t\t\ta[i]--;\n\t\t\t}\n\t\t}\n\n\t\tif ( iTargetIndex != -1 && splice === undefined )\n\t\t{\n\t\t\ta.splice( iTargetIndex, 1 );\n\t\t}\n\t}\n\n\n\t/**\n\t * Mark cached data as invalid such that a re-read of the data will occur when\n\t * the cached data is next requested. Also update from the data source object.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param  {int}    rowIdx   Row index to invalidate\n\t * @memberof DataTable#oApi\n\t *\n\t * @todo For the modularisation of v1.11 this will need to become a callback, so\n\t *   the sort and filter methods can subscribe to it. That will required\n\t *   initialisation options for sorting, which is why it is not already baked in\n\t */\n\tfunction _fnInvalidateRow( settings, rowIdx, src, column )\n\t{\n\t\tvar row = settings.aoData[ rowIdx ];\n\t\tvar i, ien;\n\n\t\t// Are we reading last data from DOM or the data object?\n\t\tif ( src === 'dom' || ((! src || src === 'auto') && row.src === 'dom') ) {\n\t\t\t// Read the data from the DOM\n\t\t\trow._aData = _fnGetRowElements( settings, row.nTr ).data;\n\t\t}\n\t\telse {\n\t\t\t// Reading from data object, update the DOM\n\t\t\tvar cells = row.anCells;\n\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcells[i].innerHTML = _fnGetCellData( settings, rowIdx, i, 'display' );\n\t\t\t}\n\t\t}\n\n\t\trow._aSortData = null;\n\t\trow._aFilterData = null;\n\n\t\t// Invalidate the type for a specific column (if given) or all columns since\n\t\t// the data might have changed\n\t\tvar cols = settings.aoColumns;\n\t\tif ( column !== undefined ) {\n\t\t\tcols[ column ].sType = null;\n\t\t}\n\t\telse {\n\t\t\tfor ( i=0, ien=cols.length ; i<ien ; i++ ) {\n\t\t\t\tcols[i].sType = null;\n\t\t\t}\n\t\t}\n\n\t\t// Update DataTables special `DT_*` attributes for the row\n\t\t_fnRowAttributes( row );\n\t}\n\n\n\t/**\n\t * Build a data source object from an HTML row, reading the contents of the\n\t * cells that are in the row.\n\t *\n\t * @param {object} settings DataTables settings object\n\t * @param {node} TR element from which to read data\n\t * @returns {object} Object with two parameters: `data` the data read, in\n\t *   document order, and `cells` and array of nodes (they can be useful to the\n\t *   caller, so rather than needing a second traversal to get them, just return\n\t *   them from here).\n\t * @memberof DataTable#oApi\n\t */\n\tfunction _fnGetRowElements( settings, row )\n\t{\n\t\tvar\n\t\t\td = [],\n\t\t\ttds = [],\n\t\t\ttd = row.firstChild,\n\t\t\tname, col, o, i=0, contents,\n\t\t\tcolumns = settings.aoColumns;\n\n\t\tvar attr = function ( str, data, td  ) {\n\t\t\tif ( typeof str === 'string' ) {\n\t\t\t\tvar idx = str.indexOf('@');\n\n\t\t\t\tif ( idx !== -1 ) {\n\t\t\t\t\tvar src = str.substring( idx+1 );\n\t\t\t\t\to[ '@'+src ] = td.getAttribute( src );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\twhile ( td ) {\n\t\t\tname = td.nodeName.toUpperCase();\n\n\t\t\tif ( name == \"TD\" || name == \"TH\" ) {\n\t\t\t\tcol = columns[i];\n\t\t\t\tcontents = $.trim(td.innerHTML);\n\n\t\t\t\tif ( col && col._bAttrSrc ) {\n\t\t\t\t\to = {\n\t\t\t\t\t\tdisplay: contents\n\t\t\t\t\t};\n\n\t\t\t\t\tattr( col.mData.sort, o, td );\n\t\t\t\t\tattr( col.mData.type, o, td );\n\t\t\t\t\tattr( col.mData.filter, o, td );\n\n\t\t\t\t\td.push( o );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\td.push( contents );\n\t\t\t\t}\n\n\t\t\t\ttds.push( td );\n\t\t\t\ti++;\n\t\t\t}\n\n\t\t\ttd = td.nextSibling;\n\t\t}\n\n\t\treturn {\n\t\t\tdata: d,\n\t\t\tcells: tds\n\t\t};\n\t}\n\t/**\n\t * Create a new TR element (and it's TD children) for a row\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {int} iRow Row to consider\n\t *  @param {node} [nTrIn] TR element to add to the table - optional. If not given,\n\t *    DataTables will create a row automatically\n\t *  @param {array} [anTds] Array of TD|TH elements for the row - must be given\n\t *    if nTr is.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCreateTr ( oSettings, iRow, nTrIn, anTds )\n\t{\n\t\tvar\n\t\t\trow = oSettings.aoData[iRow],\n\t\t\trowData = row._aData,\n\t\t\tcells = [],\n\t\t\tnTr, nTd, oCol,\n\t\t\ti, iLen;\n\n\t\tif ( row.nTr === null )\n\t\t{\n\t\t\tnTr = nTrIn || document.createElement('tr');\n\n\t\t\trow.nTr = nTr;\n\t\t\trow.anCells = cells;\n\n\t\t\t/* Use a private property on the node to allow reserve mapping from the node\n\t\t\t * to the aoData array for fast look up\n\t\t\t */\n\t\t\tnTr._DT_RowIndex = iRow;\n\n\t\t\t/* Special parameters can be given by the data source to be used on the row */\n\t\t\t_fnRowAttributes( row );\n\n\t\t\t/* Process each column */\n\t\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\toCol = oSettings.aoColumns[i];\n\n\t\t\t\tnTd = nTrIn ? anTds[i] : document.createElement( oCol.sCellType );\n\t\t\t\tcells.push( nTd );\n\n\t\t\t\t// Need to create the HTML if new, or if a rendering function is defined\n\t\t\t\tif ( !nTrIn || oCol.mRender || oCol.mData !== i )\n\t\t\t\t{\n\t\t\t\t\tnTd.innerHTML = _fnGetCellData( oSettings, iRow, i, 'display' );\n\t\t\t\t}\n\n\t\t\t\t/* Add user defined class */\n\t\t\t\tif ( oCol.sClass !== null )\n\t\t\t\t{\n\t\t\t\t\tnTd.className += ' '+oCol.sClass;\n\t\t\t\t}\n\n\t\t\t\t// Visibility - add or remove as required\n\t\t\t\tif ( oCol.bVisible && ! nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTr.appendChild( nTd );\n\t\t\t\t}\n\t\t\t\telse if ( ! oCol.bVisible && nTrIn )\n\t\t\t\t{\n\t\t\t\t\tnTd.parentNode.removeChild( nTd );\n\t\t\t\t}\n\n\t\t\t\tif ( oCol.fnCreatedCell )\n\t\t\t\t{\n\t\t\t\t\toCol.fnCreatedCell.call( oSettings.oInstance,\n\t\t\t\t\t\tnTd, _fnGetCellData( oSettings, iRow, i, 'display' ), rowData, iRow, i\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t_fnCallbackFire( oSettings, 'aoRowCreatedCallback', null, [nTr, rowData, iRow] );\n\t\t}\n\t}\n\n\n\t/**\n\t * Add attributes to a row based on the special `DT_*` parameters in a data\n\t * source object.\n\t *  @param {object} DataTables row object for the row to be modified\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnRowAttributes( row )\n\t{\n\t\tvar tr = row.nTr;\n\t\tvar data = row._aData;\n\n\t\tif ( tr ) {\n\t\t\tif ( data.DT_RowId ) {\n\t\t\t\ttr.id = data.DT_RowId;\n\t\t\t}\n\n\t\t\tif ( data.DT_RowClass ) {\n\t\t\t\t// Remove any classes added by DT_RowClass before\n\t\t\t\tvar a = data.DT_RowClass.split(' ');\n\t\t\t\trow.__rowc = row.__rowc ?\n\t\t\t\t\t_unique( row.__rowc.concat( a ) ) :\n\t\t\t\t\ta;\n\n\t\t\t\t$(tr)\n\t\t\t\t\t.removeClass( row.__rowc.join(' ') )\n\t\t\t\t\t.addClass( data.DT_RowClass );\n\t\t\t}\n\n\t\t\tif ( data.DT_RowData ) {\n\t\t\t\t$(tr).data( data.DT_RowData );\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Create the HTML header for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBuildHead( oSettings )\n\t{\n\t\tvar i, ien, cell, row, column;\n\t\tvar thead = oSettings.nTHead;\n\t\tvar tfoot = oSettings.nTFoot;\n\t\tvar createHeader = $('th, td', thead).length === 0;\n\t\tvar classes = oSettings.oClasses;\n\t\tvar columns = oSettings.aoColumns;\n\n\t\tif ( createHeader ) {\n\t\t\trow = $('<tr/>').appendTo( thead );\n\t\t}\n\n\t\tfor ( i=0, ien=columns.length ; i<ien ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcell = $( column.nTh ).addClass( column.sClass );\n\n\t\t\tif ( createHeader ) {\n\t\t\t\tcell.appendTo( row );\n\t\t\t}\n\n\t\t\t// 1.11 move into sorting\n\t\t\tif ( oSettings.oFeatures.bSort ) {\n\t\t\t\tcell.addClass( column.sSortingClass );\n\n\t\t\t\tif ( column.bSortable !== false ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.attr( 'tabindex', oSettings.iTabIndex )\n\t\t\t\t\t\t.attr( 'aria-controls', oSettings.sTableId );\n\n\t\t\t\t\t_fnSortAttachListener( oSettings, column.nTh, i );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( column.sTitle != cell.html() ) {\n\t\t\t\tcell.html( column.sTitle );\n\t\t\t}\n\n\t\t\t_fnRenderer( oSettings, 'header' )(\n\t\t\t\toSettings, cell, column, i, classes\n\t\t\t);\n\t\t}\n\n\t\tif ( createHeader ) {\n\t\t\t_fnDetectHeader( oSettings.aoHeader, thead );\n\t\t}\n\n\t\t/* ARIA role for the rows */\n\t\t$(thead).find('>tr').attr('role', 'row');\n\n\t\t/* Deal with the footer - add classes if required */\n\t\t$(thead).find('>tr>th, >tr>td').addClass( classes.sHeaderTH );\n\t\t$(tfoot).find('>tr>th, >tr>td').addClass( classes.sFooterTH );\n\n\t\t// Cache the footer cells. Note that we only take the cells from the first\n\t\t// row in the footer. If there is more than one row the user wants to\n\t\t// interact with, they need to use the table().foot() method. Note also this\n\t\t// allows cells to be used for multiple columns using colspan\n\t\tif ( tfoot !== null ) {\n\t\t\tvar cells = oSettings.aoFooter[0];\n\n\t\t\tfor ( i=0, ien=cells.length ; i<ien ; i++ ) {\n\t\t\t\tcolumn = columns[i];\n\t\t\t\tcolumn.nTf = cells[i].cell;\n\n\t\t\t\tif ( column.sClass ) {\n\t\t\t\t\t$(column.nTf).addClass( column.sClass );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Draw the header (or footer) element based on the column visibility states. The\n\t * methodology here is to use the layout array from _fnDetectHeader, modified for\n\t * the instantaneous column visibility, to construct the new layout. The grid is\n\t * traversed over cell at a time in a rows x columns grid fashion, although each\n\t * cell insert can cover multiple elements in the grid - which is tracks using the\n\t * aApplied array. Cell inserts in the grid will only occur where there isn't\n\t * already a cell in that position.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param array {objects} aoSource Layout array from _fnDetectHeader\n\t *  @param {boolean} [bIncludeHidden=false] If true then include the hidden columns in the calc,\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDrawHead( oSettings, aoSource, bIncludeHidden )\n\t{\n\t\tvar i, iLen, j, jLen, k, kLen, n, nLocalTr;\n\t\tvar aoLocal = [];\n\t\tvar aApplied = [];\n\t\tvar iColumns = oSettings.aoColumns.length;\n\t\tvar iRowspan, iColspan;\n\n\t\tif ( ! aoSource )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif (  bIncludeHidden === undefined )\n\t\t{\n\t\t\tbIncludeHidden = false;\n\t\t}\n\n\t\t/* Make a copy of the master layout array, but without the visible columns in it */\n\t\tfor ( i=0, iLen=aoSource.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taoLocal[i] = aoSource[i].slice();\n\t\t\taoLocal[i].nTr = aoSource[i].nTr;\n\n\t\t\t/* Remove any columns which are currently hidden */\n\t\t\tfor ( j=iColumns-1 ; j>=0 ; j-- )\n\t\t\t{\n\t\t\t\tif ( !oSettings.aoColumns[j].bVisible && !bIncludeHidden )\n\t\t\t\t{\n\t\t\t\t\taoLocal[i].splice( j, 1 );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Prep the applied array - it needs an element for each row */\n\t\t\taApplied.push( [] );\n\t\t}\n\n\t\tfor ( i=0, iLen=aoLocal.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnLocalTr = aoLocal[i].nTr;\n\n\t\t\t/* All cells are going to be replaced, so empty out the row */\n\t\t\tif ( nLocalTr )\n\t\t\t{\n\t\t\t\twhile( (n = nLocalTr.firstChild) )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.removeChild( n );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor ( j=0, jLen=aoLocal[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tiRowspan = 1;\n\t\t\t\tiColspan = 1;\n\n\t\t\t\t/* Check to see if there is already a cell (row/colspan) covering our target\n\t\t\t\t * insert point. If there is, then there is nothing to do.\n\t\t\t\t */\n\t\t\t\tif ( aApplied[i][j] === undefined )\n\t\t\t\t{\n\t\t\t\t\tnLocalTr.appendChild( aoLocal[i][j].cell );\n\t\t\t\t\taApplied[i][j] = 1;\n\n\t\t\t\t\t/* Expand the cell to cover as many rows as needed */\n\t\t\t\t\twhile ( aoLocal[i+iRowspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i+iRowspan][j].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\taApplied[i+iRowspan][j] = 1;\n\t\t\t\t\t\tiRowspan++;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Expand the cell to cover as many columns as needed */\n\t\t\t\t\twhile ( aoLocal[i][j+iColspan] !== undefined &&\n\t\t\t\t\t        aoLocal[i][j].cell == aoLocal[i][j+iColspan].cell )\n\t\t\t\t\t{\n\t\t\t\t\t\t/* Must update the applied array over the rows for the columns */\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taApplied[i+k][j+iColspan] = 1;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tiColspan++;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Do the actual expansion in the DOM */\n\t\t\t\t\taoLocal[i][j].cell.rowSpan = iRowspan;\n\t\t\t\t\taoLocal[i][j].cell.colSpan = iColspan;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Insert the required TR nodes into the table for display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDraw( oSettings )\n\t{\n\t\t/* Provide a pre-callback function which can be used to cancel the draw is false is returned */\n\t\tvar aPreDraw = _fnCallbackFire( oSettings, 'aoPreDrawCallback', 'preDraw', [oSettings] );\n\t\tif ( $.inArray( false, aPreDraw ) !== -1 )\n\t\t{\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t\treturn;\n\t\t}\n\n\t\tvar i, iLen, n;\n\t\tvar anRows = [];\n\t\tvar iRowCount = 0;\n\t\tvar asStripeClasses = oSettings.asStripeClasses;\n\t\tvar iStripes = asStripeClasses.length;\n\t\tvar iOpenRows = oSettings.aoOpenRows.length;\n\t\tvar oLang = oSettings.oLanguage;\n\t\tvar iInitDisplayStart = oSettings.iInitDisplayStart;\n\t\tvar bServerSide = _fnDataSource( oSettings ) == 'ssp';\n\t\tvar aiDisplay = oSettings.aiDisplay;\n\n\t\toSettings.bDrawing = true;\n\n\t\t/* Check and see if we have an initial draw position from state saving */\n\t\tif ( iInitDisplayStart !== undefined && iInitDisplayStart !== -1 )\n\t\t{\n\t\t\toSettings._iDisplayStart = bServerSide ?\n\t\t\t\tiInitDisplayStart :\n\t\t\t\tiInitDisplayStart >= oSettings.fnRecordsDisplay() ?\n\t\t\t\t\t0 :\n\t\t\t\t\tiInitDisplayStart;\n\n\t\t\toSettings.iInitDisplayStart = -1;\n\t\t}\n\n\t\tvar iDisplayStart = oSettings._iDisplayStart;\n\t\tvar iDisplayEnd = oSettings.fnDisplayEnd();\n\n\t\t/* Server-side processing draw intercept */\n\t\tif ( oSettings.bDeferLoading )\n\t\t{\n\t\t\toSettings.bDeferLoading = false;\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, false );\n\t\t}\n\t\telse if ( !bServerSide )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t}\n\t\telse if ( !oSettings.bDestroying && !_fnAjaxUpdate( oSettings ) )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tif ( aiDisplay.length !== 0 )\n\t\t{\n\t\t\tvar iStart = bServerSide ? 0 : iDisplayStart;\n\t\t\tvar iEnd = bServerSide ? oSettings.aoData.length : iDisplayEnd;\n\n\t\t\tfor ( var j=iStart ; j<iEnd ; j++ )\n\t\t\t{\n\t\t\t\tvar iDataIndex = aiDisplay[j];\n\t\t\t\tvar aoData = oSettings.aoData[ iDataIndex ];\n\t\t\t\tif ( aoData.nTr === null )\n\t\t\t\t{\n\t\t\t\t\t_fnCreateTr( oSettings, iDataIndex );\n\t\t\t\t}\n\n\t\t\t\tvar nRow = aoData.nTr;\n\n\t\t\t\t/* Remove the old striping classes and then add the new one */\n\t\t\t\tif ( iStripes !== 0 )\n\t\t\t\t{\n\t\t\t\t\tvar sStripe = asStripeClasses[ iRowCount % iStripes ];\n\t\t\t\t\tif ( aoData._sRowStripe != sStripe )\n\t\t\t\t\t{\n\t\t\t\t\t\t$(nRow).removeClass( aoData._sRowStripe ).addClass( sStripe );\n\t\t\t\t\t\taoData._sRowStripe = sStripe;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* Row callback functions - might want to manipulate the row */\n\t\t\t\t_fnCallbackFire( oSettings, 'aoRowCallback', null,\n\t\t\t\t\t[nRow, aoData._aData, iRowCount, j] );\n\n\t\t\t\tanRows.push( nRow );\n\t\t\t\tiRowCount++;\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t/* Table is empty - create a row with an empty message in it */\n\t\t\tvar sZero = oLang.sZeroRecords;\n\t\t\tif ( oSettings.iDraw == 1 &&  _fnDataSource( oSettings ) == 'ajax' )\n\t\t\t{\n\t\t\t\tsZero = oLang.sLoadingRecords;\n\t\t\t}\n\t\t\telse if ( oLang.sEmptyTable && oSettings.fnRecordsTotal() === 0 )\n\t\t\t{\n\t\t\t\tsZero = oLang.sEmptyTable;\n\t\t\t}\n\n\t\t\tanRows[ 0 ] = $( '<tr/>', { 'class': iStripes ? asStripeClasses[0] : '' } )\n\t\t\t\t.append( $('<td />', {\n\t\t\t\t\t'valign':  'top',\n\t\t\t\t\t'colSpan': _fnVisbleColumns( oSettings ),\n\t\t\t\t\t'class':   oSettings.oClasses.sRowEmpty\n\t\t\t\t} ).html( sZero ) )[0];\n\t\t}\n\n\t\t/* Header and footer callbacks */\n\t\t_fnCallbackFire( oSettings, 'aoHeaderCallback', 'header', [ $(oSettings.nTHead).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t\t_fnCallbackFire( oSettings, 'aoFooterCallback', 'footer', [ $(oSettings.nTFoot).children('tr')[0],\n\t\t\t_fnGetDataMaster( oSettings ), iDisplayStart, iDisplayEnd, aiDisplay ] );\n\n\t\tvar body = $(oSettings.nTBody);\n\n\t\tbody.children().detach();\n\t\tbody.append( $(anRows) );\n\n\t\t/* Call all required callback functions for the end of a draw */\n\t\t_fnCallbackFire( oSettings, 'aoDrawCallback', 'draw', [oSettings] );\n\n\t\t/* Draw is complete, sorting and filtering must be as well */\n\t\toSettings.bSorted = false;\n\t\toSettings.bFiltered = false;\n\t\toSettings.bDrawing = false;\n\t}\n\n\n\t/**\n\t * Redraw the table - taking account of the various features which are enabled\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {boolean} [holdPosition] Keep the current paging position. By default\n\t *    the paging is reset to the first page\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnReDraw( settings, holdPosition )\n\t{\n\t\tvar\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tsort     = features.bSort,\n\t\t\tfilter   = features.bFilter;\n\n\t\tif ( sort ) {\n\t\t\t_fnSort( settings );\n\t\t}\n\n\t\tif ( filter ) {\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch );\n\t\t}\n\t\telse {\n\t\t\t// No filtering, so we want to just use the display master\n\t\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\t\t}\n\n\t\tif ( holdPosition !== true ) {\n\t\t\tsettings._iDisplayStart = 0;\n\t\t}\n\n\t\t_fnDraw( settings );\n\t}\n\n\n\t/**\n\t * Add the options to the page HTML for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAddOptionsHtml ( oSettings )\n\t{\n\t\t/*\n\t\t * Create a temporary, empty, div which we can later on replace with what we have generated\n\t\t * we do it this way to rendering the 'options' html offline - speed :-)\n\t\t */\n\t\tvar nHolding = $('<div></div>')[0];\n\t\toSettings.nTable.parentNode.insertBefore( nHolding, oSettings.nTable );\n\n\t\t/*\n\t\t * All DataTables are wrapped in a div\n\t\t */\n\t\toSettings.nTableWrapper = $('<div id=\"'+oSettings.sTableId+'_wrapper\" class=\"'+oSettings.oClasses.sWrapper+'\" role=\"grid\"></div>')[0];\n\t\toSettings.nTableReinsertBefore = oSettings.nTable.nextSibling;\n\n\t\t/* Track where we want to insert the option */\n\t\tvar nInsertNode = oSettings.nTableWrapper;\n\n\t\t/* Loop over the user set positioning and place the elements as needed */\n\t\tvar aDom = oSettings.sDom.split('');\n\t\tvar nTmp, iPushFeature, cOption, nNewNode, cNext, sAttr, j;\n\t\tfor ( var i=0 ; i<aDom.length ; i++ )\n\t\t{\n\t\t\tiPushFeature = 0;\n\t\t\tcOption = aDom[i];\n\n\t\t\tif ( cOption == '<' )\n\t\t\t{\n\t\t\t\t/* New container div */\n\t\t\t\tnNewNode = $('<div></div>')[0];\n\n\t\t\t\t/* Check to see if we should append an id and/or a class name to the container */\n\t\t\t\tcNext = aDom[i+1];\n\t\t\t\tif ( cNext == \"'\" || cNext == '\"' )\n\t\t\t\t{\n\t\t\t\t\tsAttr = \"\";\n\t\t\t\t\tj = 2;\n\t\t\t\t\twhile ( aDom[i+j] != cNext )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr += aDom[i+j];\n\t\t\t\t\t\tj++;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* Replace jQuery UI constants @todo depreciated */\n\t\t\t\t\tif ( sAttr == \"H\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = oSettings.oClasses.sJUIHeader;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr == \"F\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tsAttr = oSettings.oClasses.sJUIFooter;\n\t\t\t\t\t}\n\n\t\t\t\t\t/* The attribute can be in the format of \"#id.class\", \"#id\" or \"class\" This logic\n\t\t\t\t\t * breaks the string into parts and applies them as needed\n\t\t\t\t\t */\n\t\t\t\t\tif ( sAttr.indexOf('.') != -1 )\n\t\t\t\t\t{\n\t\t\t\t\t\tvar aSplit = sAttr.split('.');\n\t\t\t\t\t\tnNewNode.id = aSplit[0].substr(1, aSplit[0].length-1);\n\t\t\t\t\t\tnNewNode.className = aSplit[1];\n\t\t\t\t\t}\n\t\t\t\t\telse if ( sAttr.charAt(0) == \"#\" )\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.id = sAttr.substr(1, sAttr.length-1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tnNewNode.className = sAttr;\n\t\t\t\t\t}\n\n\t\t\t\t\ti += j; /* Move along the position array */\n\t\t\t\t}\n\n\t\t\t\tnInsertNode.appendChild( nNewNode );\n\t\t\t\tnInsertNode = nNewNode;\n\t\t\t}\n\t\t\telse if ( cOption == '>' )\n\t\t\t{\n\t\t\t\t/* End container div */\n\t\t\t\tnInsertNode = nInsertNode.parentNode;\n\t\t\t}\n\t\t\t// @todo Move options into their own plugins?\n\t\t\telse if ( cOption == 'l' && oSettings.oFeatures.bPaginate && oSettings.oFeatures.bLengthChange )\n\t\t\t{\n\t\t\t\t/* Length */\n\t\t\t\tnTmp = _fnFeatureHtmlLength( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( cOption == 'f' && oSettings.oFeatures.bFilter )\n\t\t\t{\n\t\t\t\t/* Filter */\n\t\t\t\tnTmp = _fnFeatureHtmlFilter( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( cOption == 'r' && oSettings.oFeatures.bProcessing )\n\t\t\t{\n\t\t\t\t/* pRocessing */\n\t\t\t\tnTmp = _fnFeatureHtmlProcessing( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( cOption == 't' )\n\t\t\t{\n\t\t\t\t/* Table */\n\t\t\t\tnTmp = _fnFeatureHtmlTable( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( cOption ==  'i' && oSettings.oFeatures.bInfo )\n\t\t\t{\n\t\t\t\t/* Info */\n\t\t\t\tnTmp = _fnFeatureHtmlInfo( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( cOption == 'p' && oSettings.oFeatures.bPaginate )\n\t\t\t{\n\t\t\t\t/* Pagination */\n\t\t\t\tnTmp = _fnFeatureHtmlPaginate( oSettings );\n\t\t\t\tiPushFeature = 1;\n\t\t\t}\n\t\t\telse if ( DataTable.ext.feature.length !== 0 )\n\t\t\t{\n\t\t\t\t/* Plug-in features */\n\t\t\t\tvar aoFeatures = DataTable.ext.feature;\n\t\t\t\tfor ( var k=0, kLen=aoFeatures.length ; k<kLen ; k++ )\n\t\t\t\t{\n\t\t\t\t\tif ( cOption == aoFeatures[k].cFeature )\n\t\t\t\t\t{\n\t\t\t\t\t\tnTmp = aoFeatures[k].fnInit( oSettings );\n\t\t\t\t\t\tif ( nTmp )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tiPushFeature = 1;\n\t\t\t\t\t\t}\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\t/* Add to the 2D features array */\n\t\t\tif ( iPushFeature == 1 && nTmp !== null )\n\t\t\t{\n\t\t\t\tif ( typeof oSettings.aanFeatures[cOption] !== 'object' )\n\t\t\t\t{\n\t\t\t\t\toSettings.aanFeatures[cOption] = [];\n\t\t\t\t}\n\t\t\t\toSettings.aanFeatures[cOption].push( nTmp );\n\t\t\t\tnInsertNode.appendChild( nTmp );\n\t\t\t}\n\t\t}\n\n\t\t/* Built our DOM structure - replace the holding div with what we want */\n\t\tnHolding.parentNode.replaceChild( oSettings.nTableWrapper, nHolding );\n\t}\n\n\n\t/**\n\t * Use the DOM source to create up an array of header cells. The idea here is to\n\t * create a layout grid (array) of rows x columns, which contains a reference\n\t * to the cell that that point in the grid (regardless of col/rowspan), such that\n\t * any column / row could be removed and the new grid constructed\n\t *  @param array {object} aLayout Array to store the calculated layout in\n\t *  @param {node} nThead The header/footer element for the table\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDetectHeader ( aLayout, nThead )\n\t{\n\t\tvar nTrs = $(nThead).children('tr');\n\t\tvar nTr, nCell;\n\t\tvar i, k, l, iLen, jLen, iColShifted, iColumn, iColspan, iRowspan;\n\t\tvar bUnique;\n\t\tvar fnShiftCol = function ( a, i, j ) {\n\t\t\tvar k = a[i];\n\t                while ( k[j] ) {\n\t\t\t\tj++;\n\t\t\t}\n\t\t\treturn j;\n\t\t};\n\n\t\taLayout.splice( 0, aLayout.length );\n\n\t\t/* We know how many rows there are in the layout - so prep it */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\taLayout.push( [] );\n\t\t}\n\n\t\t/* Calculate a layout array */\n\t\tfor ( i=0, iLen=nTrs.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tnTr = nTrs[i];\n\t\t\tiColumn = 0;\n\n\t\t\t/* For every cell in the row... */\n\t\t\tnCell = nTr.firstChild;\n\t\t\twhile ( nCell ) {\n\t\t\t\tif ( nCell.nodeName.toUpperCase() == \"TD\" ||\n\t\t\t\t     nCell.nodeName.toUpperCase() == \"TH\" )\n\t\t\t\t{\n\t\t\t\t\t/* Get the col and rowspan attributes from the DOM and sanitise them */\n\t\t\t\t\tiColspan = nCell.getAttribute('colspan') * 1;\n\t\t\t\t\tiRowspan = nCell.getAttribute('rowspan') * 1;\n\t\t\t\t\tiColspan = (!iColspan || iColspan===0 || iColspan===1) ? 1 : iColspan;\n\t\t\t\t\tiRowspan = (!iRowspan || iRowspan===0 || iRowspan===1) ? 1 : iRowspan;\n\n\t\t\t\t\t/* There might be colspan cells already in this row, so shift our target\n\t\t\t\t\t * accordingly\n\t\t\t\t\t */\n\t\t\t\t\tiColShifted = fnShiftCol( aLayout, i, iColumn );\n\n\t\t\t\t\t/* Cache calculation for unique columns */\n\t\t\t\t\tbUnique = iColspan === 1 ? true : false;\n\n\t\t\t\t\t/* If there is col / rowspan, copy the information into the layout grid */\n\t\t\t\t\tfor ( l=0 ; l<iColspan ; l++ )\n\t\t\t\t\t{\n\t\t\t\t\t\tfor ( k=0 ; k<iRowspan ; k++ )\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\taLayout[i+k][iColShifted+l] = {\n\t\t\t\t\t\t\t\t\"cell\": nCell,\n\t\t\t\t\t\t\t\t\"unique\": bUnique\n\t\t\t\t\t\t\t};\n\t\t\t\t\t\t\taLayout[i+k].nTr = nTr;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tnCell = nCell.nextSibling;\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Get an array of unique th elements, one for each column\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} nHeader automatically detect the layout from this node - optional\n\t *  @param {array} aLayout thead/tfoot layout from _fnDetectHeader - optional\n\t *  @returns array {node} aReturn list of unique th's\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetUniqueThs ( oSettings, nHeader, aLayout )\n\t{\n\t\tvar aReturn = [];\n\t\tif ( !aLayout )\n\t\t{\n\t\t\taLayout = oSettings.aoHeader;\n\t\t\tif ( nHeader )\n\t\t\t{\n\t\t\t\taLayout = [];\n\t\t\t\t_fnDetectHeader( aLayout, nHeader );\n\t\t\t}\n\t\t}\n\n\t\tfor ( var i=0, iLen=aLayout.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tfor ( var j=0, jLen=aLayout[i].length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tif ( aLayout[i][j].unique &&\n\t\t\t\t\t (!aReturn[j] || !oSettings.bSortCellsTop) )\n\t\t\t\t{\n\t\t\t\t\taReturn[j] = aLayout[i][j].cell;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn aReturn;\n\t}\n\n\n\n\t/**\n\t * Create an Ajax call based on the table's settings, taking into account that\n\t * parameters can have multiple forms, and backwards compatibility.\n\t *\n\t * @param {object} oSettings dataTables settings object\n\t * @param {array} data Data to send to the server, required by\n\t *     DataTables - may be augmented by developer callbacks\n\t * @param {function} fn Callback function to run when data is obtained\n\t */\n\tfunction _fnBuildAjax( oSettings, data, fn )\n\t{\n\t\t// Compatibility with 1.9-, allow fnServerData and event to manipulate\n\t\t_fnCallbackFire( oSettings, 'aoServerParams', 'serverParams', [data] );\n\n\t\t// Convert to object based for 1.10+ if using the old scheme\n\t\tif ( data && data.__legacy ) {\n\t\t\tvar tmp = {};\n\t\t\tvar rbracket = /(.*?)\\[\\]$/;\n\n\t\t\t$.each( data, function (key, val) {\n\t\t\t\tvar match = val.name.match(rbracket);\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\t// Support for arrays\n\t\t\t\t\tvar name = match[0];\n\n\t\t\t\t\tif ( ! tmp[ name ] ) {\n\t\t\t\t\t\ttmp[ name ] = [];\n\t\t\t\t\t}\n\t\t\t\t\ttmp[ name ].push( val.value );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttmp[val.name] = val.value;\n\t\t\t\t}\n\t\t\t} );\n\t\t\tdata = tmp;\n\t\t}\n\n\t\tvar ajaxData;\n\t\tvar ajax = oSettings.ajax;\n\t\tvar instance = oSettings.oInstance;\n\n\t\tif ( $.isPlainObject( ajax ) && ajax.data )\n\t\t{\n\t\t\tajaxData = ajax.data;\n\n\t\t\tvar newData = $.isFunction( ajaxData ) ?\n\t\t\t\tajaxData( data ) :  // fn can manipulate data or return an object\n\t\t\t\tajaxData;           // object or array to merge\n\n\t\t\t// If the function returned an object, use that alone\n\t\t\tdata = $.isFunction( ajaxData ) && newData ?\n\t\t\t\tnewData :\n\t\t\t\t$.extend( true, data, newData );\n\n\t\t\t// Remove the data property as we've resolved it already and don't want\n\t\t\t// jQuery to do it again (it is restored at the end of the function)\n\t\t\tdelete ajax.data;\n\t\t}\n\n\t\tvar baseAjax = {\n\t\t\t\"data\": data,\n\t\t\t\"success\": function (json) {\n\t\t\t\tvar error = json.error || json.sError;\n\t\t\t\tif ( error ) {\n\t\t\t\t\toSettings.oApi._fnLog( oSettings, 0, error );\n\t\t\t\t}\n\n\t\t\t\toSettings.json = json;\n\t\t\t\t_fnCallbackFire( oSettings, null, 'xhr', [oSettings, json] );\n\t\t\t\tfn( json );\n\t\t\t},\n\t\t\t\"dataType\": \"json\",\n\t\t\t\"cache\": false,\n\t\t\t\"type\": oSettings.sServerMethod,\n\t\t\t\"error\": function (xhr, error, thrown) {\n\t\t\t\tvar log = oSettings.oApi._fnLog;\n\n\t\t\t\tif ( error == \"parsererror\" ) {\n\t\t\t\t\tlog( oSettings, 0, 'Invalid JSON response', 1 );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tlog( oSettings, 0, 'Ajax error', 7 );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\n\t\tif ( oSettings.fnServerData )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.fnServerData.call( instance,\n\t\t\t\toSettings.sAjaxSource, data, fn, oSettings\n\t\t\t);\n\t\t}\n\t\telse if ( oSettings.sAjaxSource || typeof ajax === 'string' )\n\t\t{\n\t\t\t// DataTables 1.9- compatibility\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, {\n\t\t\t\turl: ajax || oSettings.sAjaxSource\n\t\t\t} ) );\n\t\t}\n\t\telse if ( $.isFunction( ajax ) )\n\t\t{\n\t\t\t// Is a function - let the caller define what needs to be done\n\t\t\toSettings.jqXHR = ajax.call( instance, data, fn, oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Object to extend the base settings\n\t\t\toSettings.jqXHR = $.ajax( $.extend( baseAjax, ajax ) );\n\n\t\t\t// Restore for next time around\n\t\t\tajax.data = ajaxData;\n\t\t}\n\t}\n\n\n\t/**\n\t * Update the table using an Ajax call\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {boolean} Block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdate( oSettings )\n\t{\n\t\tif ( oSettings.bAjaxDataGet )\n\t\t{\n\t\t\toSettings.iDraw++;\n\t\t\t_fnProcessingDisplay( oSettings, true );\n\t\t\tvar iColumns = oSettings.aoColumns.length;\n\t\t\tvar aoData = _fnAjaxParameters( oSettings );\n\n\t\t\t_fnBuildAjax( oSettings, aoData, function(json) {\n\t\t\t\t_fnAjaxUpdateDraw( oSettings, json );\n\t\t\t}, oSettings );\n\n\t\t\treturn false;\n\t\t}\n\t\treturn true;\n\t}\n\n\n\t/**\n\t * Build up the parameters in an object needed for a server-side processing\n\t * request. Note that this is basically done twice, is different ways - a modern\n\t * method which is used by default in DataTables 1.10 which uses objects and\n\t * arrays, or the 1.9- method with is name / value pairs. 1.9 method is used if\n\t * the sAjaxSource option is used in the initialisation, or the legacyAjax\n\t * option is set.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {bool} block the table drawing or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxParameters( settings )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tcolumnCount = columns.length,\n\t\t\tfeatures = settings.oFeatures,\n\t\t\tpreSearch = settings.oPreviousSearch,\n\t\t\tpreColSearch = settings.aoPreSearchCols,\n\t\t\ti, data = [], dataProp, column, columnSearch,\n\t\t\tsort = _fnSortFlatten( settings ),\n\t\t\tdisplayStart = settings._iDisplayStart,\n\t\t\tdisplayLength = features.bPaginate !== false ?\n\t\t\t\tsettings._iDisplayLength :\n\t\t\t\t-1;\n\n\t\tvar param = function ( name, value ) {\n\t\t\tdata.push( { 'name': name, 'value': value } );\n\t\t};\n\n\t\t// DataTables 1.9- compatible method\n\t\tparam( 'sEcho',          settings.iDraw );\n\t\tparam( 'iColumns',       columnCount );\n\t\tparam( 'sColumns',       _pluck( columns, 'sName' ).join(',') );\n\t\tparam( 'iDisplayStart',  displayStart );\n\t\tparam( 'iDisplayLength', displayLength );\n\n\t\t// DataTables 1.10+ method\n\t\tvar d = {\n\t\t\tdraw:    settings.iDraw,\n\t\t\tcolumns: [],\n\t\t\torder:   [],\n\t\t\tstart:   displayStart,\n\t\t\tlength:  displayLength,\n\t\t\tsearch:  {\n\t\t\t\tvalue: preSearch.sSearch,\n\t\t\t\tregex: preSearch.bRegex\n\t\t\t}\n\t\t};\n\n\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\tcolumn = columns[i];\n\t\t\tcolumnSearch = preColSearch[i];\n\t\t\tdataProp = typeof column.mData==\"function\" ? 'function' : column.mData ;\n\n\t\t\td.columns.push( {\n\t\t\t\tdata:       dataProp,\n\t\t\t\tname:       column.sName,\n\t\t\t\tsearchable: column.bSearchable,\n\t\t\t\torderable:  column.bSortable,\n\t\t\t\tsearch:     {\n\t\t\t\t\tvalue: columnSearch.sSearch,\n\t\t\t\t\tregex: columnSearch.bRegex\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tparam( \"mDataProp_\"+i, dataProp );\n\n\t\t\tif ( features.bFilter ) {\n\t\t\t\tparam( 'sSearch_'+i,     columnSearch.sSearch );\n\t\t\t\tparam( 'bRegex_'+i,      columnSearch.bRegex );\n\t\t\t\tparam( 'bSearchable_'+i, column.bSearchable );\n\t\t\t}\n\n\t\t\tif ( features.bSort ) {\n\t\t\t\tparam( 'bSortable_'+i, column.bSortable );\n\t\t\t}\n\t\t}\n\n\t\t$.each( sort, function ( i, val ) {\n\t\t\td.order.push( { column: val.col, dir: val.dir } );\n\n\t\t\tparam( 'iSortCol_'+i, val.col );\n\t\t\tparam( 'sSortDir_'+i, val.dir );\n\t\t} );\n\n\t\tif ( features.bFilter ) {\n\t\t\tparam( 'sSearch', preSearch.sSearch );\n\t\t\tparam( 'bRegex', preSearch.bRegex );\n\t\t}\n\n\t\tif ( features.bSort ) {\n\t\t\tparam( 'iSortingCols', sort.length );\n\t\t}\n\n\t\tdata.__legacy = true;\n\t\treturn settings.sAjaxSource || DataTable.ext.legacy.ajax ?\n\t\t\tdata : d;\n\t}\n\n\n\t/**\n\t * Data the data from the server (nuking the old) and redraw the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} json json data return from the server.\n\t *  @param {string} json.sEcho Tracking flag for DataTables to match requests\n\t *  @param {int} json.iTotalRecords Number of records in the data set, not accounting for filtering\n\t *  @param {int} json.iTotalDisplayRecords Number of records in the data set, accounting for filtering\n\t *  @param {array} json.aaData The data to display on this page\n\t *  @param {string} [json.sColumns] Column ordering (sName, comma separated)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnAjaxUpdateDraw ( settings, json )\n\t{\n\t\t// v1.10 uses camelCase variables, while 1.9 uses Hungarian notation.\n\t\t// Support both\n\t\tvar compat = function ( old, modern ) {\n\t\t\treturn json[old] !== undefined ? json[old] : json[modern];\n\t\t};\n\n\t\tvar draw            = compat( 'sEcho',                'draw' );\n\t\tvar recordsTotal    = compat( 'iTotalRecords',        'recordsTotal' );\n\t\tvar rocordsFiltered = compat( 'iTotalDisplayRecords', 'recordsFiltered' );\n\n\t\tif ( draw ) {\n\t\t\t// Protect against out of sequence returns\n\t\t\tif ( draw*1 < settings.iDraw ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tsettings.iDraw = draw * 1;\n\t\t}\n\n\t\t_fnClearTable( settings );\n\t\tsettings._iRecordsTotal   = parseInt(recordsTotal, 10);\n\t\tsettings._iRecordsDisplay = parseInt(rocordsFiltered, 10);\n\n\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t_fnAddData( settings, data[i] );\n\t\t}\n\t\tsettings.aiDisplay = settings.aiDisplayMaster.slice();\n\n\t\tsettings.bAjaxDataGet = false;\n\t\t_fnDraw( settings );\n\n\t\tif ( ! settings._bInitComplete ) {\n\t\t\t_fnInitComplete( settings, json );\n\t\t}\n\n\t\tsettings.bAjaxDataGet = true;\n\t\t_fnProcessingDisplay( settings, false );\n\t}\n\n\n\t/**\n\t * Get the data from the JSON data source to use for drawing a table. Using\n\t * `_fnGetObjectDataFn` allows the data to be sourced from a property of the\n\t * source object, or from a processing function.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param  {object} json Data source object / array from the server\n\t *  @return {array} Array of data to use\n\t */\n\tfunction _fnAjaxDataSrc ( oSettings, json )\n\t{\n\t\tvar dataSrc = $.isPlainObject( oSettings.ajax ) && oSettings.ajax.dataSrc !== undefined ?\n\t\t\toSettings.ajax.dataSrc :\n\t\t\toSettings.sAjaxDataProp; // Compatibility with 1.9-.\n\n\t\t// Compatibility with 1.9-. In order to read from aaData, check if the\n\t\t// default has been changed, if not, check for aaData\n\t\tif ( dataSrc === 'data' ) {\n\t\t\treturn json.aaData || json[dataSrc];\n\t\t}\n\n\t\treturn dataSrc !== \"\" ?\n\t\t\t_fnGetObjectDataFn( dataSrc )( json ) :\n\t\t\tjson;\n\t}\n\n\n\t/**\n\t * Generate the node required for filtering text\n\t *  @returns {node} Filter control element\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlFilter ( settings )\n\t{\n\t\tvar classes = settings.oClasses;\n\t\tvar tableId = settings.sTableId;\n\t\tvar previousSearch = settings.oPreviousSearch;\n\t\tvar features = settings.aanFeatures;\n\t\tvar input = '<input type=\"search\" class=\"'+classes.sFilterInput+'\"/>';\n\n\t\tvar str = settings.oLanguage.sSearch;\n\t\tstr = str.match(/_INPUT_/) ?\n\t\t\tstr.replace('_INPUT_', input) :\n\t\t\tstr+input;\n\n\t\tvar filter = $('<div/>', {\n\t\t\t\t'id': ! features.f ? tableId+'_filter' : null,\n\t\t\t\t'class': classes.sFilter\n\t\t\t} )\n\t\t\t.append( $('<label/>' ).append( str ) );\n\n\t\tvar jqFilter = $('input[type=\"search\"]', filter)\n\t\t\t.val( previousSearch.sSearch.replace('\"','&quot;') )\n\t\t\t.bind( 'keyup.DT search.DT input.DT paste.DT cut.DT', function(e) {\n\t\t\t\t/* Update all other filter input elements for the new display */\n\t\t\t\tvar n = features.f;\n\t\t\t\tvar val = !this.value ? \"\" : this.value; // mental IE8 fix :-(\n\n\t\t\t\t/* Now do the filter */\n\t\t\t\tif ( val != previousSearch.sSearch ) {\n\t\t\t\t\t_fnFilterComplete( settings, {\n\t\t\t\t\t\t\"sSearch\": val,\n\t\t\t\t\t\t\"bRegex\": previousSearch.bRegex,\n\t\t\t\t\t\t\"bSmart\": previousSearch.bSmart ,\n\t\t\t\t\t\t\"bCaseInsensitive\": previousSearch.bCaseInsensitive\n\t\t\t\t\t} );\n\n\t\t\t\t\t// Need to redraw, without resorting\n\t\t\t\t\tsettings._iDisplayStart = 0;\n\t\t\t\t\t_fnDraw( settings );\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.bind( 'keypress.DT', function(e) {\n\t\t\t\t/* Prevent form submission */\n\t\t\t\tif ( e.keyCode == 13 ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t} )\n\t\t\t.attr('aria-controls', tableId);\n\n\t\t// Update the input elements whenever the table is filtered\n\t\t$(settings.nTable).on( 'filter.DT', function () {\n\t\t\t// IE9 throws an 'unknown error' if document.activeElement is used\n\t\t\t// inside an iframe or frame...\n\t\t\ttry {\n\t\t\t\tif ( jqFilter[0] !== document.activeElement ) {\n\t\t\t\t\tjqFilter.val( previousSearch.sSearch );\n\t\t\t\t}\n\t\t\t}\n\t\t\tcatch ( e ) {}\n\t\t} );\n\n\t\treturn filter[0];\n\t}\n\n\n\t/**\n\t * Filter the table using both the global filter and column based filtering\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oSearch search information\n\t *  @param {int} [iForce] force a research of the master array (1) or not (undefined or 0)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterComplete ( oSettings, oInput, iForce )\n\t{\n\t\tvar oPrevSearch = oSettings.oPreviousSearch;\n\t\tvar aoPrevSearch = oSettings.aoPreSearchCols;\n\t\tvar fnSaveFilter = function ( oFilter ) {\n\t\t\t/* Save the filtering values */\n\t\t\toPrevSearch.sSearch = oFilter.sSearch;\n\t\t\toPrevSearch.bRegex = oFilter.bRegex;\n\t\t\toPrevSearch.bSmart = oFilter.bSmart;\n\t\t\toPrevSearch.bCaseInsensitive = oFilter.bCaseInsensitive;\n\t\t};\n\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo As per sort - can this be moved into an event handler?\n\t\t_fnColumnTypes( oSettings );\n\n\t\t/* In server-side processing all filtering is done by the server, so no point hanging around here */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' )\n\t\t{\n\t\t\t/* Global filter */\n\t\t\t_fnFilter( oSettings, oInput.sSearch, iForce, oInput.bRegex, oInput.bSmart, oInput.bCaseInsensitive );\n\t\t\tfnSaveFilter( oInput );\n\n\t\t\t/* Now do the individual column filter */\n\t\t\tfor ( var i=0 ; i<aoPrevSearch.length ; i++ )\n\t\t\t{\n\t\t\t\t_fnFilterColumn( oSettings, aoPrevSearch[i].sSearch, i, aoPrevSearch[i].bRegex,\n\t\t\t\t\taoPrevSearch[i].bSmart, aoPrevSearch[i].bCaseInsensitive );\n\t\t\t}\n\n\t\t\t/* Custom filtering */\n\t\t\t_fnFilterCustom( oSettings );\n\t\t}\n\t\telse\n\t\t{\n\t\t\tfnSaveFilter( oInput );\n\t\t}\n\n\t\t/* Tell the draw function we have been filtering */\n\t\toSettings.bFiltered = true;\n\t\t_fnCallbackFire( oSettings, null, 'search', [oSettings] );\n\t}\n\n\n\t/**\n\t * Apply custom filtering functions\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCustom( oSettings )\n\t{\n\t\tvar afnFilters = DataTable.ext.search;\n\t\tvar aiFilterColumns = _fnGetColumns( oSettings, 'bSearchable' );\n\n\t\tfor ( var i=0, iLen=afnFilters.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar iCorrector = 0;\n\t\t\tfor ( var j=0, jLen=oSettings.aiDisplay.length ; j<jLen ; j++ )\n\t\t\t{\n\t\t\t\tvar iDisIndex = oSettings.aiDisplay[j-iCorrector];\n\t\t\t\tvar bTest = afnFilters[i](\n\t\t\t\t\toSettings,\n\t\t\t\t\t_fnGetRowData( oSettings, iDisIndex, 'filter', aiFilterColumns ),\n\t\t\t\t\tiDisIndex\n\t\t\t\t);\n\n\t\t\t\t/* Check if we should use this row based on the filtering function */\n\t\t\t\tif ( !bTest )\n\t\t\t\t{\n\t\t\t\t\toSettings.aiDisplay.splice( j-iCorrector, 1 );\n\t\t\t\t\tiCorrector++;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Filter the table on a per-column basis\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sInput string to filter on\n\t *  @param {int} iColumn column to filter\n\t *  @param {bool} bRegex treat search string as a regular expression or not\n\t *  @param {bool} bSmart use smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterColumn ( settings, searchStr, colIdx, regex, smart, caseInsensitive )\n\t{\n\t\tif ( searchStr === '' ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar data;\n\t\tvar display = settings.aiDisplay;\n\t\tvar rpSearch = _fnFilterCreateSearch( searchStr, regex, smart, caseInsensitive );\n\n\t\tfor ( var i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\tdata = settings.aoData[ display[i] ]._aFilterData[ colIdx ];\n\n\t\t\tif ( ! rpSearch.test( data ) ) {\n\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Filter the data table based on user input and draw the table\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} input string to filter on\n\t *  @param {int} force optional - force a research of the master array (1) or not (undefined or 0)\n\t *  @param {bool} regex treat as a regular expression or not\n\t *  @param {bool} smart perform smart filtering or not\n\t *  @param {bool} caseInsensitive Do case insenstive matching or not\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilter( settings, input, force, regex, smart, caseInsensitive )\n\t{\n\t\tvar rpSearch = _fnFilterCreateSearch( input, regex, smart, caseInsensitive );\n\t\tvar prevSearch = settings.oPreviousSearch.sSearch;\n\t\tvar displayMaster = settings.aiDisplayMaster;\n\t\tvar display, invalidated, i;\n\n\t\t// Need to take account of custom filtering functions - always filter\n\t\tif ( DataTable.ext.search.length !== 0 ) {\n\t\t\tforce = true;\n\t\t}\n\n\t\t// Check if any of the rows were invalidated\n\t\tinvalidated = _fnFilterData( settings );\n\n\t\t// If the input is blank - we just want the full data set\n\t\tif ( input.length <= 0 ) {\n\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t}\n\t\telse {\n\t\t\t// New search - start from the master array\n\t\t\tif ( invalidated ||\n\t\t\t\t force ||\n\t\t\t\t prevSearch.length > input.length ||\n\t\t\t\t input.indexOf(prevSearch) !== 0 ||\n\t\t\t\t settings.bSorted // On resort, the display master needs to be\n\t\t\t\t                  // re-filtered since indexes will have changed\n\t\t\t) {\n\t\t\t\tsettings.aiDisplay = displayMaster.slice();\n\t\t\t}\n\n\t\t\t// Search the display array\n\t\t\tdisplay = settings.aiDisplay;\n\n\t\t\tfor ( i=display.length-1 ; i>=0 ; i-- ) {\n\t\t\t\tif ( ! rpSearch.test( settings.aoData[ display[i] ]._sFilterRow ) ) {\n\t\t\t\t\tdisplay.splice( i, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Build a regular expression object suitable for searching a table\n\t *  @param {string} sSearch string to search for\n\t *  @param {bool} bRegex treat as a regular expression or not\n\t *  @param {bool} bSmart perform smart filtering or not\n\t *  @param {bool} bCaseInsensitive Do case insensitive matching or not\n\t *  @returns {RegExp} constructed object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFilterCreateSearch( sSearch, bRegex, bSmart, bCaseInsensitive )\n\t{\n\t\tvar asSearch,\n\t\t\tsRegExpString = bRegex ? sSearch : _fnEscapeRegex( sSearch );\n\n\t\tif ( bSmart )\n\t\t{\n\t\t\t/* Generate the regular expression to use. Something along the lines of:\n\t\t\t * ^(?=.*?\\bone\\b)(?=.*?\\btwo\\b)(?=.*?\\bthree\\b).*$\n\t\t\t */\n\t\t\tasSearch = sRegExpString.split( ' ' );\n\t\t\tsRegExpString = '^(?=.*?'+asSearch.join( ')(?=.*?' )+').*$';\n\t\t}\n\n\t\treturn new RegExp( sRegExpString, bCaseInsensitive ? \"i\" : \"\" );\n\t}\n\n\n\t/**\n\t * scape a string such that it can be used in a regular expression\n\t *  @param {string} sVal string to escape\n\t *  @returns {string} escaped string\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnEscapeRegex ( sVal )\n\t{\n\t\tvar acEscape = [ '/', '.', '*', '+', '?', '|', '(', ')', '[', ']', '{', '}', '\\\\', '$', '^', '-' ];\n\t\tvar reReplace = new RegExp( '(\\\\' + acEscape.join('|\\\\') + ')', 'g' );\n\t\treturn sVal.replace(reReplace, '\\\\$1');\n\t}\n\n\n\n\tvar __filter_div = $('<div>')[0];\n\tvar __filter_div_textContent = __filter_div.textContent !== undefined;\n\n\t// Update the filtering data for each row if needed (by invalidation or first run)\n\tfunction _fnFilterData ( settings )\n\t{\n\t\tvar columns = settings.aoColumns;\n\t\tvar column;\n\t\tvar i, j, ien, jen, filterData, cellData, row;\n\t\tvar fomatters = DataTable.ext.type.search;\n\t\tvar wasInvalidated = false;\n\n\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\n\t\t\tif ( ! row._aFilterData ) {\n\t\t\t\tfilterData = [];\n\n\t\t\t\tfor ( j=0, jen=columns.length ; j<jen ; j++ ) {\n\t\t\t\t\tcolumn = columns[j];\n\n\t\t\t\t\tif ( column.bSearchable ) {\n\t\t\t\t\t\tcellData = _fnGetCellData( settings, i, j, 'filter' );\n\n\t\t\t\t\t\tcellData = fomatters[ column.sType ] ?\n\t\t\t\t\t\t\tfomatters[ column.sType ]( cellData ) :\n\t\t\t\t\t\t\tcellData !== null ?\n\t\t\t\t\t\t\t\tcellData :\n\t\t\t\t\t\t\t\t'';\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tcellData = '';\n\t\t\t\t\t}\n\n\t\t\t\t\t// If it looks like there is an HTML entity in the string,\n\t\t\t\t\t// attempt to decode it so sorting works as expected. Note that\n\t\t\t\t\t// we could use a single line of jQuery to do this, but the DOM\n\t\t\t\t\t// method used here is much faster http://jsperf.com/html-decode\n\t\t\t\t\tif ( cellData.indexOf && cellData.indexOf('&') !== -1 ) {\n\t\t\t\t\t\t__filter_div.innerHTML = cellData;\n\t\t\t\t\t\tcellData = __filter_div_textContent ?\n\t\t\t\t\t\t\t__filter_div.textContent :\n\t\t\t\t\t\t\t__filter_div.innerText;\n\t\t\t\t\t\tcellData = cellData.replace(/[\\r\\n]/g, '');\n\t\t\t\t\t}\n\n\t\t\t\t\tfilterData.push( cellData );\n\t\t\t\t}\n\n\t\t\t\trow._aFilterData = filterData;\n\t\t\t\trow._sFilterRow = filterData.join('  ');\n\t\t\t\twasInvalidated = true;\n\t\t\t}\n\t\t}\n\n\t\treturn wasInvalidated;\n\t}\n\n\t/**\n\t * Generate the node required for the info display\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Information element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlInfo ( settings )\n\t{\n\t\tvar\n\t\t\ttid = settings.sTableId,\n\t\t\tnodes = settings.aanFeatures.i,\n\t\t\tn = $('<div/>', {\n\t\t\t\t'class': settings.oClasses.sInfo,\n\t\t\t\t'id': ! nodes ? tid+'_info' : null\n\t\t\t} );\n\n\t\tif ( ! nodes ) {\n\t\t\t// Update display on each draw\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": _fnUpdateInfo,\n\t\t\t\t\"sName\": \"information\"\n\t\t\t} );\n\n\t\t\tn\n\t\t\t\t.attr( 'role', 'alert' )\n\t\t\t\t.attr( 'aria-live', 'polite' )\n\t\t\t\t.attr( 'aria-relevant', 'all' );\n\n\t\t\t// Table is described by our info div\n\t\t\t$(settings.nTable).attr( 'aria-describedby', tid+'_info' );\n\t\t}\n\n\t\treturn n[0];\n\t}\n\n\n\t/**\n\t * Update the information elements in the display\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnUpdateInfo ( settings )\n\t{\n\t\t/* Show information about the table */\n\t\tvar nodes = settings.aanFeatures.i;\n\t\tif ( nodes.length === 0 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar\n\t\t\tlang  = settings.oLanguage,\n\t\t\tstart = settings._iDisplayStart+1,\n\t\t\tend   = settings.fnDisplayEnd(),\n\t\t\tmax   = settings.fnRecordsTotal(),\n\t\t\ttotal = settings.fnRecordsDisplay(),\n\t\t\tout   = total ?\n\t\t\t\tlang.sInfo :\n\t\t\t\tlang.sInfoEmpty;\n\n\t\tif ( total !== max ) {\n\t\t\t/* Record set after filtering */\n\t\t\tout += ' ' + lang.sInfoFiltered;\n\t\t}\n\n\t\t// Convert the macros\n\t\tout += lang.sInfoPostFix;\n\t\tout = _fnInfoMacros( settings, out );\n\n\t\tvar callback = lang.fnInfoCallback;\n\t\tif ( callback !== null ) {\n\t\t\tout = callback.call( settings.oInstance,\n\t\t\t\tsettings, start, end, max, total, out\n\t\t\t);\n\t\t}\n\n\t\t$(nodes).html( out );\n\t}\n\n\n\tfunction _fnInfoMacros ( settings, str )\n\t{\n\t\t// When infinite scrolling, we are always starting at 1. _iDisplayStart is used only\n\t\t// internally\n\t\tvar\n\t\t\tformatter  = settings.fnFormatNumber,\n\t\t\tstart      = settings._iDisplayStart+1,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvis        = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\n\t\treturn str.\n\t\t\treplace(/_START_/g, formatter.call( settings, start ) ).\n\t\t\treplace(/_END_/g,   formatter.call( settings, settings.fnDisplayEnd() ) ).\n\t\t\treplace(/_MAX_/g,   formatter.call( settings, settings.fnRecordsTotal() ) ).\n\t\t\treplace(/_TOTAL_/g, formatter.call( settings, vis ) ).\n\t\t\treplace(/_PAGE_/g,  formatter.call( settings, all ? 1 : Math.ceil( start / len ) ) ).\n\t\t\treplace(/_PAGES_/g, formatter.call( settings, all ? 1 : Math.ceil( vis / len ) ) );\n\t}\n\n\n\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitialise ( settings )\n\t{\n\t\tvar i, iLen, iAjaxStart=settings.iInitDisplayStart;\n\t\tvar columns = settings.aoColumns, column;\n\t\tvar features = settings.oFeatures;\n\n\t\t/* Ensure that the table data is fully initialised */\n\t\tif ( ! settings.bInitialised ) {\n\t\t\tsetTimeout( function(){ _fnInitialise( settings ); }, 200 );\n\t\t\treturn;\n\t\t}\n\n\t\t/* Show the display HTML options */\n\t\t_fnAddOptionsHtml( settings );\n\n\t\t/* Build and draw the header / footer for the table */\n\t\t_fnBuildHead( settings );\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\n\t\t/* Okay to show that something is going on now */\n\t\t_fnProcessingDisplay( settings, true );\n\n\t\t/* Calculate sizes for columns */\n\t\tif ( features.bAutoWidth ) {\n\t\t\t_fnCalculateColumnWidths( settings );\n\t\t}\n\n\t\tfor ( i=0, iLen=columns.length ; i<iLen ; i++ ) {\n\t\t\tcolumn = columns[i];\n\n\t\t\tif ( column.sWidth ) {\n\t\t\t\tcolumn.nTh.style.width = _fnStringToCss( column.sWidth );\n\t\t\t}\n\t\t}\n\n\t\t// If there is default sorting required - let's do it. The sort function\n\t\t// will do the drawing for us. Otherwise we draw the table regardless of the\n\t\t// Ajax source - this allows the table to look initialised for Ajax sourcing\n\t\t// data (show 'loading' message possibly)\n\t\t_fnReDraw( settings );\n\n\t\t// Server-side processing init complete is done by _fnAjaxUpdateDraw\n\t\tvar dataSrc = _fnDataSource( settings );\n\t\tif ( dataSrc != 'ssp' ) {\n\t\t\t// if there is an ajax source load the data\n\t\t\tif ( dataSrc == 'ajax' ) {\n\t\t\t\t_fnBuildAjax( settings, [], function(json) {\n\t\t\t\t\tvar aData = _fnAjaxDataSrc( settings, json );\n\n\t\t\t\t\t// Got the data - add it to the table\n\t\t\t\t\tfor ( i=0 ; i<aData.length ; i++ ) {\n\t\t\t\t\t\t_fnAddData( settings, aData[i] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Reset the init display for cookie saving. We've already done\n\t\t\t\t\t// a filter, and therefore cleared it before. So we need to make\n\t\t\t\t\t// it appear 'fresh'\n\t\t\t\t\tsettings.iInitDisplayStart = iAjaxStart;\n\n\t\t\t\t\t_fnReDraw( settings );\n\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t\t_fnInitComplete( settings, json );\n\t\t\t\t}, settings );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t_fnInitComplete( settings );\n\t\t\t}\n\t\t}\n\t}\n\n\n\t/**\n\t * Draw the table for the first time, adding all required features\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} [json] JSON from the server that completed the table, if using Ajax source\n\t *    with client-side processing (optional)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnInitComplete ( settings, json )\n\t{\n\t\tsettings._bInitComplete = true;\n\n\t\t// On an Ajax load we now have data and therefore want to apply the column\n\t\t// sizing\n\t\tif ( json ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t}\n\n\t\t_fnCallbackFire( settings, 'aoInitComplete', 'init', [settings, json] );\n\t}\n\n\n\tfunction _fnLengthChange ( settings, val )\n\t{\n\t\tvar len = parseInt( val, 10 );\n\t\tsettings._iDisplayLength = len;\n\n\t\t_fnLengthOverflow( settings );\n\n\t\t// Fire length change event\n\t\t_fnCallbackFire( settings, null, 'length', [settings, len] );\n\t}\n\n\n\t/**\n\t * Generate the node required for user display length changing\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Display length feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlLength ( settings )\n\t{\n\t\tvar\n\t\t\tclasses  = settings.oClasses,\n\t\t\ttableId  = settings.sTableId,\n\t\t\tmenu     = settings.aLengthMenu,\n\t\t\td2       = $.isArray( menu[0] ),\n\t\t\tlengths  = d2 ? menu[0] : menu,\n\t\t\tlanguage = d2 ? menu[1] : menu;\n\n\t\tvar select = $('<select/>', {\n\t\t\t'name':          tableId+'_length',\n\t\t\t'aria-controls': tableId,\n\t\t\t'class':         classes.sLengthSelect\n\t\t} );\n\n\t\tfor ( var i=0, ien=lengths.length ; i<ien ; i++ ) {\n\t\t\tselect[0][ i ] = new Option( language[i], lengths[i] );\n\t\t}\n\n\t\tvar div = $('<div><label/></div>').addClass( classes.sLength );\n\t\tif ( ! settings.aanFeatures.l ) {\n\t\t\tdiv[0].id = tableId+'_length';\n\t\t}\n\n\t\t// This split doesn't matter where _MENU_ is, we get three items back from it\n\t\tvar a = settings.oLanguage.sLengthMenu.split(/(_MENU_)/);\n\t\tdiv.children()\n\t\t\t.append( a[0] )\n\t\t\t.append( select )\n\t\t\t.append( a[2] );\n\n\t\tselect\n\t\t\t.val( settings._iDisplayLength )\n\t\t\t.bind( 'change.DT', function(e) {\n\t\t\t\t_fnLengthChange( settings, $(this).val() );\n\t\t\t\t_fnDraw( settings );\n\t\t\t} );\n\n\t\t// Update node value whenever anything changes the table's length\n\t\t$(settings.nTable).bind( 'length', function (e, s, len) {\n\t\t\tselect.val( len );\n\t\t} );\n\n\t\treturn div[0];\n\t}\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Note that most of the paging logic is done in\n\t * DataTable.ext.pager\n\t */\n\n\t/**\n\t * Generate the node required for default pagination\n\t *  @param {object} oSettings dataTables settings object\n\t *  @returns {node} Pagination feature node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlPaginate ( settings )\n\t{\n\t\tvar\n\t\t\ttype   = settings.sPaginationType,\n\t\t\tplugin = DataTable.ext.pager[ type ],\n\t\t\tmodern = typeof plugin === 'function',\n\t\t\tredraw = function( settings ) {\n\t\t\t\t_fnDraw( settings );\n\t\t\t},\n\t\t\tnode = $('<div/>').addClass( settings.oClasses.sPaging + type )[0],\n\t\t\tfeatures = settings.aanFeatures;\n\n\t\tif ( ! modern ) {\n\t\t\tplugin.fnInit( settings, node, redraw );\n\t\t}\n\n\t\t/* Add a draw callback for the pagination on first instance, to update the paging display */\n\t\tif ( ! features.p )\n\t\t{\n\t\t\tnode.id = settings.sTableId+'_paginate';\n\n\t\t\tsettings.aoDrawCallback.push( {\n\t\t\t\t\"fn\": function( settings ) {\n\t\t\t\t\tif ( modern ) {\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\tstart      = settings._iDisplayStart,\n\t\t\t\t\t\t\tlen        = settings._iDisplayLength,\n\t\t\t\t\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\t\t\t\t\tall        = len === -1,\n\t\t\t\t\t\t\tpage = all ? 0 : Math.ceil( start / len ),\n\t\t\t\t\t\t\tpages = all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\t\t\t\tbuttons = plugin(page, pages),\n\t\t\t\t\t\t\ti, ien;\n\n\t\t\t\t\t\tfor ( i=0, ien=features.p.length ; i<ien ; i++ ) {\n\t\t\t\t\t\t\t_fnRenderer( settings, 'pageButton' )(\n\t\t\t\t\t\t\t\tsettings, features.p[i], i, buttons, page, pages\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\telse {\n\t\t\t\t\t\tplugin.fnUpdate( settings, redraw );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t\"sName\": \"pagination\"\n\t\t\t} );\n\t\t}\n\n\t\treturn node;\n\t}\n\n\n\t/**\n\t * Alter the display settings to change the page\n\t *  @param {object} settings DataTables settings object\n\t *  @param {string|int} action Paging action to take: \"first\", \"previous\",\n\t *    \"next\" or \"last\" or page number to jump to (integer)\n\t *  @param [bool] redraw Automatically draw the update or not\n\t *  @returns {bool} true page has changed, false - no change\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnPageChange ( settings, action, redraw )\n\t{\n\t\tvar\n\t\t\tstart     = settings._iDisplayStart,\n\t\t\tlen       = settings._iDisplayLength,\n\t\t\trecords   = settings.fnRecordsDisplay();\n\n\t\tif ( records === 0 || len === -1 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( typeof action === \"number\" )\n\t\t{\n\t\t\tstart = action * len;\n\n\t\t\tif ( start > records )\n\t\t\t{\n\t\t\t\tstart = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"first\" )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\t\telse if ( action == \"previous\" )\n\t\t{\n\t\t\tstart = len >= 0 ?\n\t\t\t\tstart - len :\n\t\t\t\t0;\n\n\t\t\tif ( start < 0 )\n\t\t\t{\n\t\t\t  start = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"next\" )\n\t\t{\n\t\t\tif ( start + len < records )\n\t\t\t{\n\t\t\t\tstart += len;\n\t\t\t}\n\t\t}\n\t\telse if ( action == \"last\" )\n\t\t{\n\t\t\tstart = Math.floor( (records-1) / len) * len;\n\t\t}\n\t\telse\n\t\t{\n\t\t\t_fnLog( settings, 0, \"Unknown paging action: \"+action, 5 );\n\t\t}\n\n\t\tvar changed = settings._iDisplayStart !== start;\n\t\tsettings._iDisplayStart = start;\n\n\t\t_fnCallbackFire( settings, null, 'page', [settings] );\n\n\t\tif ( redraw ) {\n\t\t\t_fnDraw( settings );\n\t\t}\n\n\t\treturn changed;\n\t}\n\n\n\n\t/**\n\t * Generate the node required for the processing node\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Processing element\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlProcessing ( settings )\n\t{\n\t\treturn $('<div/>', {\n\t\t\t\t'id': ! settings.aanFeatures.r ? settings.sTableId+'_processing' : null,\n\t\t\t\t'class': settings.oClasses.sProcessing\n\t\t\t} )\n\t\t\t.html( settings.oLanguage.sProcessing )\n\t\t\t.insertBefore( settings.nTable )[0];\n\t}\n\n\n\t/**\n\t * Display or hide the processing indicator\n\t *  @param {object} settings dataTables settings object\n\t *  @param {bool} show Show the processing indicator (true) or not (false)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnProcessingDisplay ( settings, show )\n\t{\n\t\tif ( settings.oFeatures.bProcessing ) {\n\t\t\t$(settings.aanFeatures.r).css( 'visibility', show ? 'visible' : 'hidden' );\n\t\t}\n\n\t\t_fnCallbackFire( settings, null, 'processing', [settings, show] );\n\t}\n\n\t/**\n\t * Add any control elements for the table - specifically scrolling\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {node} Node to add to the DOM\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnFeatureHtmlTable ( settings )\n\t{\n\t\tvar scroll = settings.oScroll;\n\n\t\tif ( scroll.sX === '' && scroll.sY === '' ) {\n\t\t\treturn settings.nTable;\n\t\t}\n\n\t\tvar scrollX = scroll.sX;\n\t\tvar scrollY = scroll.sY;\n\t\tvar classes = settings.oClasses;\n\t\tvar table = $(settings.nTable);\n\t\tvar caption = table.children('caption');\n\t\tvar captionSide = caption.length ? caption[0]._captionSide : null;\n\t\tvar headerClone = $( table[0].cloneNode(false) );\n\t\tvar footerClone = $( table[0].cloneNode(false) );\n\t\tvar footer = table.children('tfoot');\n\t\tvar _div = '<div/>';\n\t\tvar size = function ( s ) {\n\t\t\treturn !s ? null : _fnStringToCss( s );\n\t\t};\n\n\t\tif ( ! footer.length ) {\n\t\t\tfooter = null;\n\t\t}\n\n\t\t/*\n\t\t * The HTML structure that we want to generate in this function is:\n\t\t *  div - scroller\n\t\t *    div - scroll head\n\t\t *      div - scroll head inner\n\t\t *        table - scroll head table\n\t\t *          thead - thead\n\t\t *    div - scroll body\n\t\t *      table - table (master table)\n\t\t *        thead - thead clone for sizing\n\t\t *        tbody - tbody\n\t\t *    div - scroll foot\n\t\t *      div - scroll foot inner\n\t\t *        table - scroll foot table\n\t\t *          tfoot - tfoot\n\t\t */\n\t\tvar scroller = $( _div, { 'class': classes.sScrollWrapper } )\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollHead } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tposition: 'relative',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollHeadInner } )\n\t\t\t\t\t\t\t.css( {\n\t\t\t\t\t\t\t\t'box-sizing': 'content-box',\n\t\t\t\t\t\t\t\twidth: scroll.sXInner || '100%'\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\theaderClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('thead')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.append( captionSide === 'top' ? caption : null )\n\t\t\t)\n\t\t\t.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollBody } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'auto',\n\t\t\t\t\t\theight: size( scrollY ),\n\t\t\t\t\t\twidth: size( scrollX )\n\t\t\t\t\t} )\n\t\t\t\t\t.append( table )\n\t\t\t);\n\n\t\tif ( footer ) {\n\t\t\tscroller.append(\n\t\t\t\t$(_div, { 'class': classes.sScrollFoot } )\n\t\t\t\t\t.css( {\n\t\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\t\tborder: 0,\n\t\t\t\t\t\twidth: scrollX ? size(scrollX) : '100%'\n\t\t\t\t\t} )\n\t\t\t\t\t.append(\n\t\t\t\t\t\t$(_div, { 'class': classes.sScrollFootInner } )\n\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\tfooterClone\n\t\t\t\t\t\t\t\t\t.removeAttr('id')\n\t\t\t\t\t\t\t\t\t.css( 'margin-left', 0 )\n\t\t\t\t\t\t\t\t\t.append(\n\t\t\t\t\t\t\t\t\t\ttable.children('tfoot')\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t\t.append( captionSide === 'bottom' ? caption : null )\n\t\t\t);\n\t\t}\n\n\t\tvar children = scroller.children();\n\t\tvar scrollHead = children[0];\n\t\tvar scrollBody = children[1];\n\t\tvar scrollFoot = footer ? children[2] : null;\n\n\t\t// When the body is scrolled, then we also want to scroll the headers\n\t\tif ( scrollX ) {\n\t\t\t$(scrollBody).scroll( function (e) {\n\t\t\t\tvar scrollLeft = this.scrollLeft;\n\n\t\t\t\tscrollHead.scrollLeft = scrollLeft;\n\n\t\t\t\tif ( footer ) {\n\t\t\t\t\tscrollFoot.scrollLeft = scrollLeft;\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\n\t\tsettings.nScrollHead = scrollHead;\n\t\tsettings.nScrollBody = scrollBody;\n\t\tsettings.nScrollFoot = scrollFoot;\n\n\t\t// On redraw - align columns\n\t\tsettings.aoDrawCallback.push( {\n\t\t\t\"fn\": _fnScrollDraw,\n\t\t\t\"sName\": \"scrolling\"\n\t\t} );\n\n\t\treturn scroller[0];\n\t}\n\n\n\n\t/**\n\t * Update the header, footer and body tables for resizing - i.e. column\n\t * alignment.\n\t *\n\t * Welcome to the most horrible function DataTables. The process that this\n\t * function follows is basically:\n\t *   1. Re-create the table inside the scrolling div\n\t *   2. Take live measurements from the DOM\n\t *   3. Apply the measurements to align the columns\n\t *   4. Clean up\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollDraw ( settings )\n\t{\n\t\t// Given that this is such a monster function, a lot of variables are use\n\t\t// to try and keep the minimised size as small as possible\n\t\tvar\n\t\t\tscroll         = settings.oScroll,\n\t\t\tscrollX        = scroll.sX,\n\t\t\tscrollXInner   = scroll.sXInner,\n\t\t\tscrollY        = scroll.sY,\n\t\t\tbarWidth       = scroll.iBarWidth,\n\t\t\tdivHeader      = $(settings.nScrollHead),\n\t\t\tdivHeaderStyle = divHeader[0].style,\n\t\t\tdivHeaderInner = divHeader.children('div'),\n\t\t\tdivHeaderInnerStyle = divHeaderInner[0].style,\n\t\t\tdivHeaderTable = divHeaderInner.children('table'),\n\t\t\tdivBodyEl      = settings.nScrollBody,\n\t\t\tdivBody        = $(divBodyEl),\n\t\t\tdivBodyStyle   = divBodyEl.style,\n\t\t\tdivFooter      = $(settings.nScrollFoot),\n\t\t\tdivFooterInner = divFooter.children('div'),\n\t\t\tdivFooterTable = divFooterInner.children('table'),\n\t\t\theader         = $(settings.nTHead),\n\t\t\ttable          = $(settings.nTable),\n\t\t\ttableEl        = table[0],\n\t\t\ttableStyle     = tableEl.style,\n\t\t\tfooter         = settings.nTFoot ? $(settings.nTFoot) : null,\n\t\t\tbrowser        = settings.oBrowser,\n\t\t\tie67           = browser.bScrollOversize,\n\t\t\theaderTrgEls, footerTrgEls,\n\t\t\theaderSrcEls, footerSrcEls,\n\t\t\theaderCopy, footerCopy,\n\t\t\theaderWidths=[], footerWidths=[],\n\t\t\tidx, correction, sanityWidth,\n\t\t\tzeroOut = function(nSizer) {\n\t\t\t\tvar style = nSizer.style;\n\t\t\t\tstyle.paddingTop = \"0\";\n\t\t\t\tstyle.paddingBottom = \"0\";\n\t\t\t\tstyle.borderTopWidth = \"0\";\n\t\t\t\tstyle.borderBottomWidth = \"0\";\n\t\t\t\tstyle.height = 0;\n\t\t\t};\n\n\t\t/*\n\t\t * 1. Re-create the table inside the scrolling div\n\t\t */\n\n\t\t// Remove the old minimised thead and tfoot elements in the inner table\n\t\ttable.children('thead, tfoot').remove();\n\n\t\t// Clone the current header and footer elements and then place it into the inner table\n\t\theaderCopy = header.clone().prependTo( table );\n\t\theaderTrgEls = header.find('tr'); // original header is in its own table\n\t\theaderSrcEls = headerCopy.find('tr');\n\t\theaderCopy.find('th, td').removeAttr('tabindex');\n\n\t\tif ( footer ) {\n\t\t\tfooterCopy = footer.clone().prependTo( table );\n\t\t\tfooterTrgEls = footer.find('tr'); // the original tfoot is in its own table and must be sized\n\t\t\tfooterSrcEls = footerCopy.find('tr');\n\t\t}\n\n\n\t\t/*\n\t\t * 2. Take live measurements from the DOM - do not alter the DOM itself!\n\t\t */\n\n\t\t// Remove old sizing and apply the calculated column widths\n\t\t// Get the unique column headers in the newly created (cloned) header. We want to apply the\n\t\t// calculated sizes to this header\n\t\tif ( ! scrollX )\n\t\t{\n\t\t\tdivBodyStyle.width = '100%';\n\t\t\tdivHeader[0].style.width = '100%';\n\t\t}\n\n\t\t$.each( _fnGetUniqueThs( settings, headerCopy ), function ( i, el ) {\n\t\t\tidx = _fnVisibleToColumnIndex( settings, i );\n\t\t\tel.style.width = settings.aoColumns[idx].sWidth;\n\t\t} );\n\n\t\tif ( footer ) {\n\t\t\t_fnApplyToChildren( function(n) {\n\t\t\t\tn.style.width = \"\";\n\t\t\t}, footerSrcEls );\n\t\t}\n\n\t\t// If scroll collapse is enabled, when we put the headers back into the body for sizing, we\n\t\t// will end up forcing the scrollbar to appear, making our measurements wrong for when we\n\t\t// then hide it (end of this function), so add the header height to the body scroller.\n\t\tif ( scroll.bCollapse && scrollY !== \"\" ) {\n\t\t\tdivBodyStyle.height = (divBody.offsetHeight + header[0].offsetHeight)+\"px\";\n\t\t}\n\n\t\t// Size the table as a whole\n\t\tsanityWidth = table.outerWidth();\n\t\tif ( scrollX === \"\" ) {\n\t\t\t// No x scrolling\n\t\t\ttableStyle.width = \"100%\";\n\n\t\t\t// IE7 will make the width of the table when 100% include the scrollbar\n\t\t\t// - which is shouldn't. When there is a scrollbar we need to take this\n\t\t\t// into account.\n\t\t\tif ( ie67 && (table.find('tbody').height() > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( table.outerWidth() - barWidth);\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// x scrolling\n\t\t\tif ( scrollXInner !== \"\" ) {\n\t\t\t\t// x scroll inner has been given - use it\n\t\t\t\ttableStyle.width = _fnStringToCss(scrollXInner);\n\t\t\t}\n\t\t\telse if ( sanityWidth == divBody.width() && divBody.height() < table.height() ) {\n\t\t\t\t// There is y-scrolling - try to take account of the y scroll bar\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth-barWidth );\n\t\t\t\tif ( table.outerWidth() > sanityWidth-barWidth ) {\n\t\t\t\t\t// Not possible to take account of it\n\t\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// When all else fails\n\t\t\t\ttableStyle.width = _fnStringToCss( sanityWidth );\n\t\t\t}\n\t\t}\n\n\t\t// Recalculate the sanity width - now that we've applied the required width,\n\t\t// before it was a temporary variable. This is required because the column\n\t\t// width calculation is done before this table DOM is created.\n\t\tsanityWidth = table.outerWidth();\n\n\t\t// Hidden header should have zero height, so remove padding and borders. Then\n\t\t// set the width based on the real headers\n\n\t\t// Apply all styles in one pass\n\t\t_fnApplyToChildren( zeroOut, headerSrcEls );\n\n\t\t// Read all widths in next pass\n\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\theaderWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t}, headerSrcEls );\n\n\t\t// Apply all widths in final pass\n\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\tnToSize.style.width = headerWidths[i];\n\t\t}, headerTrgEls );\n\n\t\t$(headerSrcEls).height(0);\n\n\t\t/* Same again with the footer if we have one */\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( zeroOut, footerSrcEls );\n\n\t\t\t_fnApplyToChildren( function(nSizer) {\n\t\t\t\tfooterWidths.push( _fnStringToCss( $(nSizer).css('width') ) );\n\t\t\t}, footerSrcEls );\n\n\t\t\t_fnApplyToChildren( function(nToSize, i) {\n\t\t\t\tnToSize.style.width = footerWidths[i];\n\t\t\t}, footerTrgEls );\n\n\t\t\t$(footerSrcEls).height(0);\n\t\t}\n\n\n\t\t/*\n\t\t * 3. Apply the measurements\n\t\t */\n\n\t\t// \"Hide\" the header and footer that we used for the sizing. We want to also fix their width\n\t\t// to what they currently are\n\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\tnSizer.innerHTML = \"\";\n\t\t\tnSizer.style.width = headerWidths[i];\n\t\t}, headerSrcEls );\n\n\t\tif ( footer )\n\t\t{\n\t\t\t_fnApplyToChildren( function(nSizer, i) {\n\t\t\t\tnSizer.innerHTML = \"\";\n\t\t\t\tnSizer.style.width = footerWidths[i];\n\t\t\t}, footerSrcEls );\n\t\t}\n\n\t\t// Sanity check that the table is of a sensible width. If not then we are going to get\n\t\t// misalignment - try to prevent this by not allowing the table to shrink below its min width\n\t\tif ( table.outerWidth() < sanityWidth )\n\t\t{\n\t\t\t// The min width depends upon if we have a vertical scrollbar visible or not */\n\t\t\tcorrection = ((divBodyEl.scrollHeight > divBodyEl.offsetHeight ||\n\t\t\t\tdivBody.css('overflow-y') == \"scroll\")) ?\n\t\t\t\t\tsanityWidth+barWidth :\n\t\t\t\t\tsanityWidth;\n\n\t\t\t// IE6/7 are a law unto themselves...\n\t\t\tif ( ie67 && (divBodyEl.scrollHeight >\n\t\t\t\tdivBodyEl.offsetHeight || divBody.css('overflow-y') == \"scroll\")\n\t\t\t) {\n\t\t\t\ttableStyle.width = _fnStringToCss( correction-barWidth );\n\t\t\t}\n\n\t\t\t// And give the user a warning that we've stopped the table getting too small\n\t\t\tif ( scrollX === \"\" || scrollXInner !== \"\" ) {\n\t\t\t\t_fnLog( settings, 1, 'Possible column misalignment', 6 );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\tcorrection = '100%';\n\t\t}\n\n\t\t// Apply to the container elements\n\t\tdivBodyStyle.width = _fnStringToCss( correction );\n\t\tdivHeaderStyle.width = _fnStringToCss( correction );\n\n\t\tif ( footer ) {\n\t\t\tsettings.nScrollFoot.style.width = _fnStringToCss( correction );\n\t\t}\n\n\n\t\t/*\n\t\t * 4. Clean up\n\t\t */\n\t\tif ( ! scrollY ) {\n\t\t\t/* IE7< puts a vertical scrollbar in place (when it shouldn't be) due to subtracting\n\t\t\t * the scrollbar height from the visible display, rather than adding it on. We need to\n\t\t\t * set the height in order to sort this. Don't want to do it in any other browsers.\n\t\t\t */\n\t\t\tif ( ie67 ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+barWidth );\n\t\t\t}\n\t\t}\n\n\t\tif ( scrollY && scroll.bCollapse ) {\n\t\t\tdivBodyStyle.height = _fnStringToCss( scrollY );\n\n\t\t\tvar iExtra = (scrollX && tableEl.offsetWidth > divBodyEl.offsetWidth) ?\n\t\t\t\tbarWidth :\n\t\t\t\t0;\n\n\t\t\tif ( tableEl.offsetHeight < divBodyEl.offsetHeight ) {\n\t\t\t\tdivBodyStyle.height = _fnStringToCss( tableEl.offsetHeight+iExtra );\n\t\t\t}\n\t\t}\n\n\t\t/* Finally set the width's of the header and footer tables */\n\t\tvar iOuterWidth = table.outerWidth();\n\t\tdivHeaderTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\tdivHeaderInnerStyle.width = _fnStringToCss( iOuterWidth );\n\n\t\t// Figure out if there are scrollbar present - if so then we need a the header and footer to\n\t\t// provide a bit more space to allow \"overflow\" scrolling (i.e. past the scrollbar)\n\t\tvar bScrolling = table.height() > divBodyEl.clientHeight || divBody.css('overflow-y') == \"scroll\";\n\t\tvar padding = 'padding' + (browser.bScrollbarLeft ? 'Left' : 'Right' );\n\t\tdivHeaderInnerStyle[ padding ] = bScrolling ? barWidth+\"px\" : \"0px\";\n\n\t\tif ( footer ) {\n\t\t\tdivFooterTable[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style.width = _fnStringToCss( iOuterWidth );\n\t\t\tdivFooterInner[0].style[padding] = bScrolling ? barWidth+\"px\" : \"0px\";\n\t\t}\n\n\t\t/* Adjust the position of the header in case we loose the y-scrollbar */\n\t\tdivBody.scroll();\n\n\t\t/* If sorting or filtering has occurred, jump the scrolling back to the top */\n\t\tif ( settings.bSorted || settings.bFiltered ) {\n\t\t\tdivBodyEl.scrollTop = 0;\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Apply a given function to the display child nodes of an element array (typically\n\t * TD children of TR rows\n\t *  @param {function} fn Method to apply to the objects\n\t *  @param array {nodes} an1 List of elements to look through for display children\n\t *  @param array {nodes} an2 Another list (identical structure to the first) - optional\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnApplyToChildren( fn, an1, an2 )\n\t{\n\t\tvar index=0, i=0, iLen=an1.length;\n\t\tvar nNode1, nNode2;\n\n\t\twhile ( i < iLen ) {\n\t\t\tnNode1 = an1[i].firstChild;\n\t\t\tnNode2 = an2 ? an2[i].firstChild : null;\n\n\t\t\twhile ( nNode1 ) {\n\t\t\t\tif ( nNode1.nodeType === 1 ) {\n\t\t\t\t\tif ( an2 ) {\n\t\t\t\t\t\tfn( nNode1, nNode2, index );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tfn( nNode1, index );\n\t\t\t\t\t}\n\n\t\t\t\t\tindex++;\n\t\t\t\t}\n\n\t\t\t\tnNode1 = nNode1.nextSibling;\n\t\t\t\tnNode2 = an2 ? nNode2.nextSibling : null;\n\t\t\t}\n\n\t\t\ti++;\n\t\t}\n\t}\n\n\n\n\tvar __re_html_remove = /<.*?>/g;\n\n\n\t/**\n\t * Calculate the width of columns for the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCalculateColumnWidths ( oSettings )\n\t{\n\t\tvar\n\t\t\ttable = oSettings.nTable,\n\t\t\tcolumns = oSettings.aoColumns,\n\t\t\tscroll = oSettings.oScroll,\n\t\t\tscrollY = scroll.sY,\n\t\t\tscrollX = scroll.sX,\n\t\t\tscrollXInner = scroll.sXInner,\n\t\t\tcolumnCount = columns.length,\n\t\t\tvisibleColumns = _fnGetColumns( oSettings, 'bVisible' ),\n\t\t\theaderCells = $('th', oSettings.nTHead),\n\t\t\ttableWidthAttr = table.getAttribute('width'),\n\t\t\ttableContainer = table.parentNode,\n\t\t\tuserInputs = false,\n\t\t\ti, column, columnIdx, width, outerWidth;\n\n\t\t/* Convert any user input sizes into pixel sizes */\n\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\t\tif ( column.sWidth !== null ) {\n\t\t\t\tcolumn.sWidth = _fnConvertToWidth( column.sWidthOrig, tableContainer );\n\n\t\t\t\tuserInputs = true;\n\t\t\t}\n\t\t}\n\n\t\t/* If the number of columns in the DOM equals the number that we have to\n\t\t * process in DataTables, then we can use the offsets that are created by\n\t\t * the web- browser. No custom sizes can be set in order for this to happen,\n\t\t * nor scrolling used\n\t\t */\n\t\tif ( ! userInputs && ! scrollX && ! scrollY &&\n\t\t    columnCount == _fnVisbleColumns( oSettings ) &&\n\t\t\tcolumnCount == headerCells.length\n\t\t) {\n\t\t\tfor ( i=0 ; i<columnCount ; i++ ) {\n\t\t\t\tcolumns[i].sWidth = _fnStringToCss( headerCells.eq(i).width() );\n\t\t\t}\n\t\t}\n\t\telse\n\t\t{\n\t\t\t// Otherwise construct a single row table with the widest node in the\n\t\t\t// data, assign any user defined widths, then insert it into the DOM and\n\t\t\t// allow the browser to do all the hard work of calculating table widths\n\t\t\tvar tmpTable = $( table.cloneNode( false ) )\n\t\t\t\t.css( 'visibility', 'hidden' )\n\t\t\t\t.removeAttr( 'id' )\n\t\t\t\t.append( $(oSettings.nTHead).clone( false ) )\n\t\t\t\t.append( $(oSettings.nTFoot).clone( false ) )\n\t\t\t\t.append( $('<tbody><tr/></tbody>') );\n\n\t\t\t// Remove any assigned widths from the footer (from scrolling)\n\t\t\ttmpTable.find('tfoot th, tfoot td').css('width', '');\n\n\t\t\tvar tr = tmpTable.find( 'tbody tr' );\n\n\t\t\t// Apply custom sizing to the cloned header\n\t\t\theaderCells = _fnGetUniqueThs( oSettings, tmpTable.find('thead')[0] );\n\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\n\t\t\t\theaderCells[i].style.width = column.sWidthOrig !== null && column.sWidthOrig !== '' ?\n\t\t\t\t\t_fnStringToCss( column.sWidthOrig ) :\n\t\t\t\t\t'';\n\t\t\t}\n\n\t\t\t// Find the widest cell for each column and put it into the table\n\t\t\tif ( oSettings.aoData.length ) {\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumnIdx = visibleColumns[i];\n\t\t\t\t\tcolumn = columns[ columnIdx ];\n\n\t\t\t\t\t$( _fnGetWidestNode( oSettings, columnIdx ) )\n\t\t\t\t\t\t.clone( false )\n\t\t\t\t\t\t.append( column.sContentPadding )\n\t\t\t\t\t\t.appendTo( tr );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Table has been built, attach to the document so we can work with it\n\t\t\ttmpTable.appendTo( tableContainer );\n\n\t\t\t// When scrolling (X or Y) we want to set the width of the table as\n\t\t\t// appropriate. However, when not scrolling leave the table width as it\n\t\t\t// is. This results in slightly different, but I think correct behaviour\n\t\t\tif ( scrollX && scrollXInner ) {\n\t\t\t\ttmpTable.width( scrollXInner );\n\t\t\t}\n\t\t\telse if ( scrollX ) {\n\t\t\t\ttmpTable.css( 'width', 'auto' );\n\n\t\t\t\tif ( tmpTable.width() < tableContainer.offsetWidth ) {\n\t\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( scrollY ) {\n\t\t\t\ttmpTable.width( tableContainer.offsetWidth );\n\t\t\t}\n\t\t\telse if ( tableWidthAttr ) {\n\t\t\t\ttmpTable.width( tableWidthAttr );\n\t\t\t}\n\n\t\t\t// Take into account the y scrollbar\n\t\t\t_fnScrollingWidthAdjust( oSettings, tmpTable[0] );\n\n\t\t\t// Browsers need a bit of a hand when a width is assigned to any columns\n\t\t\t// when x-scrolling as they tend to collapse the table to the min-width,\n\t\t\t// even if we sent the column widths. So we need to keep track of what\n\t\t\t// the table width should be by summing the user given values, and the\n\t\t\t// automatic values\n\t\t\tif ( scrollX )\n\t\t\t{\n\t\t\t\tvar total = 0;\n\n\t\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\t\touterWidth = $(headerCells[i]).outerWidth();\n\n\t\t\t\t\ttotal += column.sWidthOrig === null ?\n\t\t\t\t\t\touterWidth :\n\t\t\t\t\t\tparseInt( column.sWidth, 10 ) + outerWidth - $(headerCells[i]).width();\n\t\t\t\t}\n\n\t\t\t\ttmpTable.width( _fnStringToCss( total ) );\n\t\t\t\ttable.style.width = _fnStringToCss( total );\n\t\t\t}\n\n\t\t\t// Get the width of each column in the constructed table\n\t\t\tfor ( i=0 ; i<visibleColumns.length ; i++ ) {\n\t\t\t\tcolumn = columns[ visibleColumns[i] ];\n\t\t\t\twidth = $(headerCells[i]).width();\n\n\t\t\t\tif ( width ) {\n\t\t\t\t\tcolumn.sWidth = _fnStringToCss( width );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\ttable.style.width = _fnStringToCss( tmpTable.css('width') );\n\n\t\t\t// Finished with the table - ditch it\n\t\t\ttmpTable.remove();\n\t\t}\n\n\t\t// If there is a width attr, we want to attach an event listener which\n\t\t// allows the table sizing to automatically adjust when the window is\n\t\t// resized. Use the width attr rather than CSS, since we can't know if the\n\t\t// CSS is a relative value or absolute - DOM read is always px.\n\t\tif ( tableWidthAttr ) {\n\t\t\ttable.style.width = _fnStringToCss( tableWidthAttr );\n\n\t\t\tif ( ! oSettings._reszEvt ) {\n\t\t\t\t$(window).bind('resize.DT-'+oSettings.sInstance, _fnThrottle( function () {\n\t\t\t\t\t_fnAdjustColumnSizing( oSettings );\n\t\t\t\t} ) );\n\n\t\t\t\toSettings._reszEvt = true;\n\t\t\t}\n\t\t}\n\t}\n\n\n\tfunction _fnThrottle( fn ) {\n\t\tvar\n\t\t\tfrequency = 200,\n\t\t\tlast,\n\t\t\ttimer;\n\n\t\treturn function () {\n\t\t\tvar\n\t\t\t\tnow = +new Date(),\n\t\t\t\targs = arguments;\n\n\t\t\tif ( last && now < last + frequency ) {\n\t\t\t\tclearTimeout( timer );\n\n\t\t\t\ttimer = setTimeout( function () {\n\t\t\t\t\tlast = now;\n\t\t\t\t\tfn();\n\t\t\t\t}, frequency );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlast = now;\n\t\t\t\tfn();\n\t\t\t}\n\t\t};\n\t}\n\n\n\t/**\n\t * Convert a CSS unit width to pixels (e.g. 2em)\n\t *  @param {string} width width to be converted\n\t *  @param {node} parent parent to get the with for (required for relative widths) - optional\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnConvertToWidth ( width, parent )\n\t{\n\t\tif ( ! width ) {\n\t\t\treturn 0;\n\t\t}\n\n\t\tvar n = $('<div/>')\n\t\t\t.css( 'width', _fnStringToCss( width ) )\n\t\t\t.appendTo( parent || document.body );\n\n\t\tvar val = n[0].offsetWidth;\n\t\tn.remove();\n\n\t\treturn val;\n\t}\n\n\n\t/**\n\t * Adjust a table's width to take account of vertical scroll bar\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {node} n table node\n\t *  @memberof DataTable#oApi\n\t */\n\n\tfunction _fnScrollingWidthAdjust ( settings, n )\n\t{\n\t\tvar scroll = settings.oScroll;\n\n\t\tif ( scroll.sX || scroll.sY ) {\n\t\t\t// When y-scrolling only, we want to remove the width of the scroll bar\n\t\t\t// so the table + scroll bar will fit into the area available, otherwise\n\t\t\t// we fix the table at its current size with no adjustment\n\t\t\tvar correction = ! scroll.sX ? scroll.iBarWidth : 0;\n\t\t\tn.style.width = _fnStringToCss( $(n).outerWidth() - correction );\n\t\t}\n\t}\n\n\n\t/**\n\t * Get the widest node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {node} widest table node\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetWidestNode( settings, colIdx )\n\t{\n\t\tvar idx = _fnGetMaxLenString( settings, colIdx );\n\t\tif ( idx < 0 ) {\n\t\t\treturn null;\n\t\t}\n\n\t\tvar data = settings.aoData[ idx ];\n\t\treturn ! data.nTr ? // Might not have been created when deferred rendering\n\t\t\t$('<td/>').html( _fnGetCellData( settings, idx, colIdx, 'display' ) )[0] :\n\t\t\tdata.anCells[ colIdx ];\n\t}\n\n\n\t/**\n\t * Get the maximum strlen for each data column\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} colIdx column of interest\n\t *  @returns {string} max string length for each column\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnGetMaxLenString( settings, colIdx )\n\t{\n\t\tvar s, max=-1, maxIdx = -1;\n\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\ts = _fnGetCellData( settings, i, colIdx, 'display' )+'';\n\t\t\ts = s.replace( __re_html_remove, '' );\n\n\t\t\tif ( s.length > max ) {\n\t\t\t\tmax = s.length;\n\t\t\t\tmaxIdx = i;\n\t\t\t}\n\t\t}\n\n\t\treturn maxIdx;\n\t}\n\n\n\t/**\n\t * Append a CSS unit (only if required) to a string\n\t *  @param {string} value to css-ify\n\t *  @returns {string} value with css unit\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnStringToCss( s )\n\t{\n\t\tif ( s === null ) {\n\t\t\treturn '0px';\n\t\t}\n\n\t\tif ( typeof s == 'number' ) {\n\t\t\treturn s < 0 ?\n\t\t\t\t'0px' :\n\t\t\t\ts+'px';\n\t\t}\n\n\t\t// Check it has a unit character already\n\t\treturn s.match(/\\d$/) ?\n\t\t\ts+'px' :\n\t\t\ts;\n\t}\n\n\n\t/**\n\t * Get the width of a scroll bar in this browser being used\n\t *  @returns {int} width in pixels\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnScrollBarWidth ()\n\t{\n\t\t// On first run a static variable is set, since this is only needed once.\n\t\t// Subsequent runs will just use the previously calculated value\n\t\tif ( ! DataTable.__scrollbarWidth ) {\n\t\t\tvar inner = $('<p/>').css( {\n\t\t\t\twidth: '100%',\n\t\t\t\theight: 200,\n\t\t\t\tpadding: 0\n\t\t\t} )[0];\n\n\t\t\tvar outer = $('<div/>')\n\t\t\t\t.css( {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 0,\n\t\t\t\t\twidth: 200,\n\t\t\t\t\theight: 150,\n\t\t\t\t\tpadding: 0,\n\t\t\t\t\toverflow: 'hidden',\n\t\t\t\t\tvisibility: 'hidden'\n\t\t\t\t} )\n\t\t\t\t.append( inner )\n\t\t\t\t.appendTo( 'body' );\n\n\t\t\tvar w1 = inner.offsetWidth;\n\t\t\touter.css( 'overflow', 'scroll' );\n\t\t\tvar w2 = inner.offsetWidth;\n\n\t\t\tif ( w1 === w2 ) {\n\t\t\t\tw2 = outer[0].clientWidth;\n\t\t\t}\n\n\t\t\touter.remove();\n\n\t\t\tDataTable.__scrollbarWidth = w1 - w2;\n\t\t}\n\n\t\treturn DataTable.__scrollbarWidth;\n\t}\n\n\n\n\tfunction _fnSortFlatten ( settings )\n\t{\n\t\tvar\n\t\t\ti, iLen, k, kLen,\n\t\t\taSort = [],\n\t\t\taiOrig = [],\n\t\t\taoColumns = settings.aoColumns,\n\t\t\taDataSort, iCol, sType, srcCol,\n\t\t\tfixed = settings.aaSortingFixed,\n\t\t\tfixedObj = $.isPlainObject( fixed ),\n\t\t\tnestedSort = [],\n\t\t\tadd = function ( a ) {\n\t\t\t\tif ( a.length && ! $.isArray( a[0] ) ) {\n\t\t\t\t\t// 1D array\n\t\t\t\t\tnestedSort.push( a );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// 2D array\n\t\t\t\t\tnestedSort.push.apply( nestedSort, a );\n\t\t\t\t}\n\t\t\t};\n\n\t\t// Build the sort array, with pre-fix and post-fix options if they have been\n\t\t// specified\n\t\tif ( $.isArray( fixed ) ) {\n\t\t\tadd( fixed );\n\t\t}\n\n\t\tif ( fixedObj && fixed.pre ) {\n\t\t\tadd( fixed.pre );\n\t\t}\n\n\t\tadd( settings.aaSorting );\n\n\t\tif (fixedObj && fixed.post ) {\n\t\t\tadd( fixed.post );\n\t\t}\n\n\t\tfor ( i=0 ; i<nestedSort.length ; i++ )\n\t\t{\n\t\t\tsrcCol = nestedSort[i][0];\n\t\t\taDataSort = aoColumns[ srcCol ].aDataSort;\n\n\t\t\tfor ( k=0, kLen=aDataSort.length ; k<kLen ; k++ )\n\t\t\t{\n\t\t\t\tiCol = aDataSort[k];\n\t\t\t\tsType = aoColumns[ iCol ].sType || 'string';\n\n\t\t\t\taSort.push( {\n\t\t\t\t\tsrc:       srcCol,\n\t\t\t\t\tcol:       iCol,\n\t\t\t\t\tdir:       nestedSort[i][1],\n\t\t\t\t\tindex:     nestedSort[i][2],\n\t\t\t\t\ttype:      sType,\n\t\t\t\t\tformatter: DataTable.ext.type.order[ sType+\"-pre\" ]\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\treturn aSort;\n\t}\n\n\t/**\n\t * Change the order of the table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t *  @todo This really needs split up!\n\t */\n\tfunction _fnSort ( oSettings )\n\t{\n\t\tvar\n\t\t\ti, ien, iLen, j, jLen, k, kLen,\n\t\t\tsDataType, nTh,\n\t\t\taiOrig = [],\n\t\t\toExtSort = DataTable.ext.type.order,\n\t\t\taoData = oSettings.aoData,\n\t\t\taoColumns = oSettings.aoColumns,\n\t\t\taDataSort, data, iCol, sType, oSort,\n\t\t\tformatters = 0,\n\t\t\tsortCol,\n\t\t\tdisplayMaster = oSettings.aiDisplayMaster,\n\t\t\taSort = _fnSortFlatten( oSettings );\n\n\t\t// Resolve any column types that are unknown due to addition or invalidation\n\t\t// @todo Can this be moved into a 'data-ready' handler which is called when\n\t\t//   data is going to be used in the table?\n\t\t_fnColumnTypes( oSettings );\n\n\t\tfor ( i=0, ien=aSort.length ; i<ien ; i++ ) {\n\t\t\tsortCol = aSort[i];\n\n\t\t\t// Track if we can use the fast sort algorithm\n\t\t\tif ( sortCol.formatter ) {\n\t\t\t\tformatters++;\n\t\t\t}\n\n\t\t\t// Load the data needed for the sort, for each cell\n\t\t\t_fnSortData( oSettings, sortCol.col );\n\t\t}\n\n\t\t/* No sorting required if server-side or no sorting array */\n\t\tif ( _fnDataSource( oSettings ) != 'ssp' && aSort.length !== 0 )\n\t\t{\n\t\t\t// Create a value - key array of the current row positions such that we can use their\n\t\t\t// current position during the sort, if values match, in order to perform stable sorting\n\t\t\tfor ( i=0, iLen=displayMaster.length ; i<iLen ; i++ ) {\n\t\t\t\taiOrig[ displayMaster[i] ] = i;\n\t\t\t}\n\n\t\t\t/* Do the sort - here we want multi-column sorting based on a given data source (column)\n\t\t\t * and sorting function (from oSort) in a certain direction. It's reasonably complex to\n\t\t\t * follow on it's own, but this is what we want (example two column sorting):\n\t\t\t *  fnLocalSorting = function(a,b){\n\t\t\t *    var iTest;\n\t\t\t *    iTest = oSort['string-asc']('data11', 'data12');\n\t\t\t *      if (iTest !== 0)\n\t\t\t *        return iTest;\n\t\t\t *    iTest = oSort['numeric-desc']('data21', 'data22');\n\t\t\t *    if (iTest !== 0)\n\t\t\t *      return iTest;\n\t\t\t *    return oSort['numeric-asc']( aiOrig[a], aiOrig[b] );\n\t\t\t *  }\n\t\t\t * Basically we have a test for each sorting column, if the data in that column is equal,\n\t\t\t * test the next column. If all columns match, then we use a numeric sort on the row\n\t\t\t * positions in the original data array to provide a stable sort.\n\t\t\t *\n\t\t\t * Note - I know it seems excessive to have two sorting methods, but the first is around\n\t\t\t * 15% faster, so the second is only maintained for backwards compatibility with sorting\n\t\t\t * methods which do not have a pre-sort formatting function.\n\t\t\t */\n\t\t\tif ( formatters === aSort.length ) {\n\t\t\t\t// All sort types have formatting functions\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, test, sort,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\t\ttest = x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn sort.dir === 'asc' ? test : -test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Depreciated - remove in 1.11 (providing a plug-in option)\n\t\t\t\t// Not all sort types have formatting methods, so we have to call their sorting\n\t\t\t\t// methods.\n\t\t\t\tdisplayMaster.sort( function ( a, b ) {\n\t\t\t\t\tvar\n\t\t\t\t\t\tx, y, k, l, test, sort, fn,\n\t\t\t\t\t\tlen=aSort.length,\n\t\t\t\t\t\tdataA = aoData[a]._aSortData,\n\t\t\t\t\t\tdataB = aoData[b]._aSortData;\n\n\t\t\t\t\tfor ( k=0 ; k<len ; k++ ) {\n\t\t\t\t\t\tsort = aSort[k];\n\n\t\t\t\t\t\tx = dataA[ sort.col ];\n\t\t\t\t\t\ty = dataB[ sort.col ];\n\n\t\t\t\t\t\tfn = oExtSort[ sort.type+\"-\"+sort.dir ] || oExtSort[ \"string-\"+sort.dir ];\n\t\t\t\t\t\ttest = fn( x, y );\n\t\t\t\t\t\tif ( test !== 0 ) {\n\t\t\t\t\t\t\treturn test;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tx = aiOrig[a];\n\t\t\t\t\ty = aiOrig[b];\n\t\t\t\t\treturn x<y ? -1 : x>y ? 1 : 0;\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\n\t\t/* Tell the draw function that we have sorted the data */\n\t\toSettings.bSorted = true;\n\t}\n\n\n\tfunction _fnSortAria ( settings )\n\t{\n\t\tvar label;\n\t\tvar nextSort;\n\t\tvar columns = settings.aoColumns;\n\t\tvar aSort = _fnSortFlatten( settings );\n\t\tvar oAria = settings.oLanguage.oAria;\n\n\t\t// ARIA attributes - need to loop all columns, to update all (removing old\n\t\t// attributes as needed)\n\t\tfor ( var i=0, iLen=columns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\tvar col = columns[i];\n\t\t\tvar asSorting = col.asSorting;\n\t\t\tvar sTitle = col.sTitle.replace( /<.*?>/g, \"\" );\n\t\t\tvar jqTh = $(col.nTh).removeAttr('aria-sort');\n\n\t\t\t/* In ARIA only the first sorting column can be marked as sorting - no multi-sort option */\n\t\t\tif ( col.bSortable ) {\n\t\t\t\tif ( aSort.length > 0 && aSort[0].col == i ) {\n\t\t\t\t\tjqTh.attr('aria-sort', aSort[0].dir==\"asc\" ? \"ascending\" : \"descending\" );\n\t\t\t\t\tnextSort = asSorting[ aSort[0].index+1 ] || asSorting[0];\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tnextSort = asSorting[0];\n\t\t\t\t}\n\n\t\t\t\tlabel = sTitle + ( nextSort === \"asc\" ?\n\t\t\t\t\toAria.sSortAscending :\n\t\t\t\t\toAria.sSortDescending\n\t\t\t\t);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tlabel = sTitle;\n\t\t\t}\n\n\t\t\tjqTh.attr('aria-label', label);\n\t\t}\n\t}\n\n\n\t/**\n\t * Function to run on user sort request\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {boolean} [append=false] Append the requested sort to the existing\n\t *    sort if true (i.e. multi-column sort)\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortListener ( settings, colIdx, append, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\t\tvar sorting = settings.aaSorting;\n\t\tvar asSorting = col.asSorting;\n\t\tvar nextSortIdx;\n\t\tvar next = function ( a ) {\n\t\t\tvar idx = a._idx;\n\t\t\tif ( idx === undefined ) {\n\t\t\t\tidx = $.inArray( a[1], asSorting );\n\t\t\t}\n\n\t\t\treturn idx+1 >= asSorting.length ? 0 : idx+1;\n\t\t};\n\n\t\t// If appending the sort then we are multi-column sorting\n\t\tif ( append && settings.oFeatures.bSortMulti ) {\n\t\t\t// Are we already doing some kind of sort on this column?\n\t\t\tvar sortIdx = $.inArray( colIdx, _pluck(sorting, '0') );\n\n\t\t\tif ( sortIdx !== -1 ) {\n\t\t\t\t// Yes, modify the sort\n\t\t\t\tnextSortIdx = next( sorting[sortIdx] );\n\n\t\t\t\tsorting[sortIdx][1] = asSorting[ nextSortIdx ];\n\t\t\t\tsorting[sortIdx]._idx = nextSortIdx;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// No sort on this column yet\n\t\t\t\tsorting.push( [ colIdx, asSorting[0], 0 ] );\n\t\t\t\tsorting[sorting.length-1]._idx = 0;\n\t\t\t}\n\t\t}\n\t\telse if ( sorting.length && sorting[0][0] == colIdx ) {\n\t\t\t// Single column - already sorting on this column, modify the sort\n\t\t\tnextSortIdx = next( sorting[0] );\n\n\t\t\tsorting.length = 1;\n\t\t\tsorting[0][1] = asSorting[ nextSortIdx ];\n\t\t\tsorting[0]._idx = nextSortIdx;\n\t\t}\n\t\telse {\n\t\t\t// Single column - sort only on this column\n\t\t\tsorting.length = 0;\n\t\t\tsorting.push( [ colIdx, asSorting[0] ] );\n\t\t\tsorting[0]._idx = 0;\n\t\t}\n\n\t\t// Run the sort by calling a full redraw\n\t\t_fnReDraw( settings );\n\n\t\t// callback used for async user interaction\n\t\tif ( typeof callback == 'function' ) {\n\t\t\tcallback( settings );\n\t\t}\n\t}\n\n\n\t/**\n\t * Attach a sort handler (click) to a node\n\t *  @param {object} settings dataTables settings object\n\t *  @param {node} attachTo node to attach the handler to\n\t *  @param {int} colIdx column sorting index\n\t *  @param {function} [callback] callback function\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortAttachListener ( settings, attachTo, colIdx, callback )\n\t{\n\t\tvar col = settings.aoColumns[ colIdx ];\n\n\t\t_fnBindAction( attachTo, {}, function (e) {\n\t\t\t/* If the column is not sortable - don't to anything */\n\t\t\tif ( col.bSortable === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_fnProcessingDisplay( settings, true );\n\n\t\t\t// Use a timeout to allow the processing display to be shown.\n\t\t\tsetTimeout( function() {\n\t\t\t\t_fnSortListener( settings, colIdx, e.shiftKey, callback );\n\n\t\t\t\t// In server-side processing, the draw callback will remove the\n\t\t\t\t// processing display\n\t\t\t\tif ( _fnDataSource( settings ) !== 'ssp' ) {\n\t\t\t\t\t_fnProcessingDisplay( settings, false );\n\t\t\t\t}\n\t\t\t}, 0 );\n\t\t} );\n\t}\n\n\n\t/**\n\t * Set the sorting classes on table's body, Note: it is safe to call this function\n\t * when bSort and bSortClasses are false\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSortingClasses( settings )\n\t{\n\t\tvar oldSort = settings.aLastSort;\n\t\tvar sortClass = settings.oClasses.sSortColumn;\n\t\tvar sort = _fnSortFlatten( settings );\n\t\tvar features = settings.oFeatures;\n\t\tvar i, ien, colIdx;\n\n\t\tif ( features.bSort && features.bSortClasses ) {\n\t\t\t// Remove old sorting classes\n\t\t\tfor ( i=0, ien=oldSort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = oldSort[i].src;\n\n\t\t\t\t// Remove column sorting\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.removeClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\n\t\t\t// Add new column sorting\n\t\t\tfor ( i=0, ien=sort.length ; i<ien ; i++ ) {\n\t\t\t\tcolIdx = sort[i].src;\n\n\t\t\t\t$( _pluck( settings.aoData, 'anCells', colIdx ) )\n\t\t\t\t\t.addClass( sortClass + (i<2 ? i+1 : 3) );\n\t\t\t}\n\t\t}\n\n\t\tsettings.aLastSort = sort;\n\t}\n\n\n\t// Get the data to sort a column, be it from cache, fresh (populating the\n\t// cache), or from a sort formatter\n\tfunction _fnSortData( settings, idx )\n\t{\n\t\t// Custom sorting function - provided by the sort data type\n\t\tvar column = settings.aoColumns[ idx ];\n\t\tvar customSort = DataTable.ext.order[ column.sSortDataType ];\n\t\tvar customData;\n\n\t\tif ( customSort ) {\n\t\t\tcustomData = customSort.call( settings.oInstance, settings, idx,\n\t\t\t\t_fnColumnIndexToVisible( settings, idx )\n\t\t\t);\n\t\t}\n\n\t\t// Use / populate cache\n\t\tvar row, cellData;\n\t\tvar formatter = DataTable.ext.type.order[ column.sType+\"-pre\" ];\n\n\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\trow = settings.aoData[i];\n\n\t\t\tif ( ! row._aSortData ) {\n\t\t\t\trow._aSortData = [];\n\t\t\t}\n\n\t\t\tif ( ! row._aSortData[idx] || customSort ) {\n\t\t\t\tcellData = customSort ?\n\t\t\t\t\tcustomData[i] : // If there was a custom sort function, use data from there\n\t\t\t\t\t_fnGetCellData( settings, i, idx, 'sort' );\n\n\t\t\t\trow._aSortData[ idx ] = formatter ?\n\t\t\t\t\tformatter( cellData ) :\n\t\t\t\t\tcellData;\n\t\t\t}\n\t\t}\n\t}\n\n\n\n\t/**\n\t * Save the state of a table\n\t *  @param {object} oSettings dataTables settings object\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSaveState ( oSettings )\n\t{\n\t\tif ( !oSettings.oFeatures.bStateSave || oSettings.bDestroying )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t/* Store the interesting variables */\n\t\tvar i, iLen;\n\t\tvar oState = {\n\t\t\t\"iCreate\":      new Date().getTime(),\n\t\t\t\"iStart\":       oSettings._iDisplayStart,\n\t\t\t\"iLength\":      oSettings._iDisplayLength,\n\t\t\t\"aaSorting\":    $.extend( true, [], oSettings.aaSorting ),\n\t\t\t\"oSearch\":      $.extend( true, {}, oSettings.oPreviousSearch ),\n\t\t\t\"aoSearchCols\": $.extend( true, [], oSettings.aoPreSearchCols ),\n\t\t\t\"abVisCols\":    []\n\t\t};\n\n\t\tfor ( i=0, iLen=oSettings.aoColumns.length ; i<iLen ; i++ )\n\t\t{\n\t\t\toState.abVisCols.push( oSettings.aoColumns[i].bVisible );\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, \"aoStateSaveParams\", 'stateSaveParams', [oSettings, oState] );\n\n\t\toSettings.fnStateSaveCallback.call( oSettings.oInstance, oSettings, oState );\n\t}\n\n\n\t/**\n\t * Attempt to load a saved table state\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {object} oInit DataTables init object so we can override settings\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLoadState ( oSettings, oInit )\n\t{\n\t\tvar i, ien;\n\t\tvar columns = oSettings.aoColumns;\n\n\t\tif ( !oSettings.oFeatures.bStateSave )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\tvar oData = oSettings.fnStateLoadCallback.call( oSettings.oInstance, oSettings );\n\t\tif ( !oData )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t/* Allow custom and plug-in manipulation functions to alter the saved data set and\n\t\t * cancelling of loading by returning false\n\t\t */\n\t\tvar abStateLoad = _fnCallbackFire( oSettings, 'aoStateLoadParams', 'stateLoadParams', [oSettings, oData] );\n\t\tif ( $.inArray( false, abStateLoad ) !== -1 )\n\t\t{\n\t\t\treturn;\n\t\t}\n\n\t\t/* Reject old data */\n\t\tif ( oData.iCreate < new Date().getTime() - (oSettings.iStateDuration*1000) ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// Number of columns have changed - all bets are off, no restore of settings\n\t\tif ( columns.length !== oData.aoSearchCols.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t/* Store the saved state so it might be accessed at any time */\n\t\toSettings.oLoadedState = $.extend( true, {}, oData );\n\n\t\t/* Restore key features */\n\t\toSettings._iDisplayStart    = oData.iStart;\n\t\toSettings.iInitDisplayStart = oData.iStart;\n\t\toSettings._iDisplayLength   = oData.iLength;\n\t\toSettings.aaSorting         = [];\n\n\t\tvar savedSort = oData.aaSorting;\n\t\tfor ( i=0, ien=savedSort.length ; i<ien ; i++ ) {\n\t\t\toSettings.aaSorting.push( savedSort[i][0] >= columns.length ?\n\t\t\t\t[ 0, savedSort[i][1] ] :\n\t\t\t\tsavedSort[i]\n\t\t\t);\n\t\t}\n\n\t\t/* Search filtering  */\n\t\t$.extend( oSettings.oPreviousSearch, oData.oSearch );\n\t\t$.extend( true, oSettings.aoPreSearchCols, oData.aoSearchCols );\n\n\t\t/* Column visibility state */\n\t\tfor ( i=0, ien=oData.abVisCols.length ; i<ien ; i++ ) {\n\t\t\tcolumns[i].bVisible = oData.abVisCols[i];\n\t\t}\n\n\t\t_fnCallbackFire( oSettings, 'aoStateLoaded', 'stateLoaded', [oSettings, oData] );\n\t}\n\n\n\n\t/**\n\t * Return the settings object for a particular table\n\t *  @param {node} table table we are using as a dataTable\n\t *  @returns {object} Settings object - or null if not found\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnSettingsFromNode ( table )\n\t{\n\t\tvar settings = DataTable.settings;\n\t\tvar idx = $.inArray( table, _pluck( settings, 'nTable' ) );\n\n\t\treturn idx !== -1 ?\n\t\t\tsettings[ idx ] :\n\t\t\tnull;\n\t}\n\n\n\t/**\n\t * Log an error message\n\t *  @param {object} settings dataTables settings object\n\t *  @param {int} level log error messages, or display them to the user\n\t *  @param {string} msg error message\n\t *  @param {int} tn Technical note id to get more information about the error.\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnLog( settings, level, msg, tn )\n\t{\n\t\tmsg = 'DataTables warning: '+\n\t\t\t(settings!==null ? 'table id='+settings.sTableId+' - ' : '')+msg;\n\n\t\tif ( tn ) {\n\t\t\tmsg += '. For more information about this error, please see '+\n\t\t\t'http://datatables.net/tn/'+tn;\n\t\t}\n\n\t\tif ( ! level  ) {\n\t\t\t// Backwards compatibility pre 1.10\n\t\t\tvar ext = DataTable.ext;\n\t\t\tvar type = ext.sErrMode || ext.errMode;\n\n\t\t\tif ( type == 'alert' ) {\n\t\t\t\talert( msg );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthrow new Error(msg);\n\t\t\t}\n\t\t}\n\t\telse if ( window.console && console.log ) {\n\t\t\tconsole.log( msg );\n\t\t}\n\t}\n\n\n\t/**\n\t * See if a property is defined on one object, if so assign it to the other object\n\t *  @param {object} ret target object\n\t *  @param {object} src source object\n\t *  @param {string} name property\n\t *  @param {string} [mappedName] name to map too - optional, name used if not given\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnMap( ret, src, name, mappedName )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\t$.each( name, function (i, val) {\n\t\t\t\tif ( $.isArray( val ) ) {\n\t\t\t\t\t_fnMap( ret, src, val[0], val[1] );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t_fnMap( ret, src, val );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\treturn;\n\t\t}\n\n\t\tif ( mappedName === undefined ) {\n\t\t\tmappedName = name;\n\t\t}\n\n\t\tif ( src[name] !== undefined ) {\n\t\t\tret[mappedName] = src[name];\n\t\t}\n\t}\n\n\n\t/**\n\t * Extend objects - very similar to jQuery.extend, but deep copy objects, and\n\t * shallow copy arrays. The reason we need to do this, is that we don't want to\n\t * deep copy array init values (such as aaSorting) since the dev wouldn't be\n\t * able to override them, but we do want to deep copy arrays.\n\t *  @param {object} out Object to extend\n\t *  @param {object} extender Object from which the properties will be applied to\n\t *      out\n\t *  @param {boolean} breakRefs If true, then arrays will be sliced to take an\n\t *      independent copy with the exception of the `data` or `aaData` parameters\n\t *      if they are present. This is so you can pass in a collection to\n\t *      DataTables and have that used as your data source without breaking the\n\t *      references\n\t *  @returns {object} out Reference, just for convenience - out === the return.\n\t *  @memberof DataTable#oApi\n\t *  @todo This doesn't take account of arrays inside the deep copied objects.\n\t */\n\tfunction _fnExtend( out, extender, breakRefs )\n\t{\n\t\tvar val;\n\n\t\tfor ( var prop in extender ) {\n\t\t\tif ( extender.hasOwnProperty(prop) ) {\n\t\t\t\tval = extender[prop];\n\n\t\t\t\tif ( $.isPlainObject( val ) ) {\n\t\t\t\t\tif ( ! $.isPlainObject( out[prop] ) ) {\n\t\t\t\t\t\tout[prop] = {};\n\t\t\t\t\t}\n\t\t\t\t\t$.extend( true, out[prop], val );\n\t\t\t\t}\n\t\t\t\telse if ( breakRefs && prop !== 'data' && prop !== 'aaData' && $.isArray(val) ) {\n\t\t\t\t\tout[prop] = val.slice();\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tout[prop] = val;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t}\n\n\n\t/**\n\t * Bind an event handers to allow a click or return key to activate the callback.\n\t * This is good for accessibility since a return on the keyboard will have the\n\t * same effect as a click, if the element has focus.\n\t *  @param {element} n Element to bind the action to\n\t *  @param {object} oData Data object to pass to the triggered function\n\t *  @param {function} fn Callback function for when the event is triggered\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnBindAction( n, oData, fn )\n\t{\n\t\t$(n)\n\t\t\t.bind( 'click.DT', oData, function (e) {\n\t\t\t\t\tn.blur(); // Remove focus outline for mouse users\n\t\t\t\t\tfn(e);\n\t\t\t\t} )\n\t\t\t.bind( 'keypress.DT', oData, function (e){\n\t\t\t\tif ( e.which === 13 ) {\n\t\t\t\t\tfn(e);\n\t\t\t\t} } )\n\t\t\t.bind( 'selectstart.DT', function () {\n\t\t\t\t/* Take the brutal approach to cancelling text selection */\n\t\t\t\treturn false;\n\t\t\t\t} );\n\t}\n\n\n\t/**\n\t * Register a callback function. Easily allows a callback function to be added to\n\t * an array store of callback functions that can then all be called together.\n\t *  @param {object} oSettings dataTables settings object\n\t *  @param {string} sStore Name of the array storage for the callbacks in oSettings\n\t *  @param {function} fn Function to be called back\n\t *  @param {string} sName Identifying name for the callback (i.e. a label)\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackReg( oSettings, sStore, fn, sName )\n\t{\n\t\tif ( fn )\n\t\t{\n\t\t\toSettings[sStore].push( {\n\t\t\t\t\"fn\": fn,\n\t\t\t\t\"sName\": sName\n\t\t\t} );\n\t\t}\n\t}\n\n\n\t/**\n\t * Fire callback functions and trigger events. Note that the loop over the\n\t * callback array store is done backwards! Further note that you do not want to\n\t * fire off triggers in time sensitive applications (for example cell creation)\n\t * as its slow.\n\t *  @param {object} settings dataTables settings object\n\t *  @param {string} callbackArr Name of the array storage for the callbacks in\n\t *      oSettings\n\t *  @param {string} event Name of the jQuery custom event to trigger. If null no\n\t *      trigger is fired\n\t *  @param {array} args Array of arguments to pass to the callback function /\n\t *      trigger\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnCallbackFire( settings, callbackArr, event, args )\n\t{\n\t\tvar ret = [];\n\n\t\tif ( callbackArr ) {\n\t\t\tret = $.map( settings[callbackArr].slice().reverse(), function (val, i) {\n\t\t\t\treturn val.fn.apply( settings.oInstance, args );\n\t\t\t} );\n\t\t}\n\n\t\tif ( event !== null ) {\n\t\t\t$(settings.nTable).trigger( event+'.dt', args );\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\n\tfunction _fnLengthOverflow ( settings )\n\t{\n\t\tvar\n\t\t\tstart = settings._iDisplayStart,\n\t\t\tend = settings.fnDisplayEnd(),\n\t\t\tlen = settings._iDisplayLength;\n\n\t\t/* If we have space to show extra rows (backing up from the end point - then do so */\n\t\tif ( end === settings.fnRecordsDisplay() )\n\t\t{\n\t\t\tstart = end - len;\n\t\t}\n\n\t\tif ( len === -1 || start < 0 )\n\t\t{\n\t\t\tstart = 0;\n\t\t}\n\n\t\tsettings._iDisplayStart = start;\n\t}\n\n\n\tfunction _fnRenderer( settings, type )\n\t{\n\t\tvar renderer = settings.renderer;\n\t\tvar host = DataTable.ext.renderer[type];\n\n\t\tif ( $.isPlainObject( renderer ) && renderer[type] ) {\n\t\t\t// Specific renderer for this type. If available use it, otherwise use\n\t\t\t// the default.\n\t\t\treturn host[renderer[type]] || host._;\n\t\t}\n\t\telse if ( typeof renderer === 'string' ) {\n\t\t\t// Common renderer - if there is one available for this type use it,\n\t\t\t// otherwise use the default\n\t\t\treturn host[renderer] || host._;\n\t\t}\n\n\t\t// Use the default\n\t\treturn host._;\n\t}\n\n\n\t/**\n\t * Detect the data source being used for the table. Used to simplify the code\n\t * a little (ajax) and to make it compress a little smaller.\n\t *\n\t *  @param {object} settings dataTables settings object\n\t *  @returns {string} Data source\n\t *  @memberof DataTable#oApi\n\t */\n\tfunction _fnDataSource ( settings )\n\t{\n\t\tif ( settings.oFeatures.bServerSide ) {\n\t\t\treturn 'ssp';\n\t\t}\n\t\telse if ( settings.ajax || settings.sAjaxSource ) {\n\t\t\treturn 'ajax';\n\t\t}\n\t\treturn 'dom';\n\t}\n\n\n\tDataTable = function( options )\n\t{\n\t\t/**\n\t\t * Perform a jQuery selector action on the table's TR elements (from the tbody) and\n\t\t * return the resulting jQuery object.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select TR elements that meet the current filter\n\t\t *    criterion (\"applied\") or all TR elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the TR elements in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {object} jQuery object, filtered by the given selector.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Highlight every second row\n\t\t *      oTable.$('tr:odd').css('backgroundColor', 'blue');\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to rows with 'Webkit' in them, add a background colour and then\n\t\t *      // remove the filter, thus highlighting the 'Webkit' rows only.\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      oTable.$('tr', {\"search\": \"applied\"}).css('backgroundColor', 'blue');\n\t\t *      oTable.fnFilter('');\n\t\t *    } );\n\t\t */\n\t\tthis.$ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).$( sSelector, oOpts );\n\t\t};\n\n\n\t\t/**\n\t\t * Almost identical to $ in operation, but in this case returns the data for the matched\n\t\t * rows - as such, the jQuery selector used should match TR row nodes or TD/TH cell nodes\n\t\t * rather than any descendants, so the data can be obtained for the row/cell. If matching\n\t\t * rows are found, the data returned is the original data array/object that was used to\n\t\t * create the row (or a generated array if from a DOM source).\n\t\t *\n\t\t * This method is often useful in-combination with $ where both functions are given the\n\t\t * same parameters and the array indexes will match identically.\n\t\t *  @param {string|node|jQuery} sSelector jQuery selector or node collection to act on\n\t\t *  @param {object} [oOpts] Optional parameters for modifying the rows to be included\n\t\t *  @param {string} [oOpts.filter=none] Select elements that meet the current filter\n\t\t *    criterion (\"applied\") or all elements (i.e. no filter).\n\t\t *  @param {string} [oOpts.order=current] Order of the data in the processed array.\n\t\t *    Can be either 'current', whereby the current sorting of the table is used, or\n\t\t *    'original' whereby the original order the data was read into the table is used.\n\t\t *  @param {string} [oOpts.page=all] Limit the selection to the currently displayed page\n\t\t *    (\"current\") or not (\"all\"). If 'current' is given, then order is assumed to be\n\t\t *    'current' and filter is 'applied', regardless of what they might be given as.\n\t\t *  @returns {array} Data for the matched elements. If any elements, as a result of the\n\t\t *    selector, were not TR, TD or TH elements in the DataTable, they will have a null\n\t\t *    entry in the array.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the data from the first row in the table\n\t\t *      var data = oTable._('tr:first');\n\t\t *\n\t\t *      // Do something useful with the data\n\t\t *      alert( \"First cell is: \"+data[0] );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Filter to 'Webkit' and get all data for\n\t\t *      oTable.fnFilter('Webkit');\n\t\t *      var data = oTable._('tr', {\"search\": \"applied\"});\n\t\t *\n\t\t *      // Do something with the data\n\t\t *      alert( data.length+\" rows matched the search\" );\n\t\t *    } );\n\t\t */\n\t\tthis._ = function ( sSelector, oOpts )\n\t\t{\n\t\t\treturn this.api(true).rows( sSelector, oOpts ).data();\n\t\t};\n\n\n\t\t/**\n\t\t * Create a DataTables Api instance, with the currently selected tables for\n\t\t * the Api's context.\n\t\t * @param {boolean} [traditional=false] Set the API instance's context to be\n\t\t *   only the table referred to by the `DataTable.ext.iApiIndex` option, as was\n\t\t *   used in the API presented by DataTables 1.9- (i.e. the traditional mode),\n\t\t *   or if all tables captured in the jQuery object should be used.\n\t\t * @return {DataTables.Api}\n\t\t */\n\t\tthis.api = function ( traditional )\n\t\t{\n\t\t\treturn traditional ?\n\t\t\t\tnew _Api(\n\t\t\t\t\t_fnSettingsFromNode( this[ _ext.iApiIndex ] )\n\t\t\t\t) :\n\t\t\t\tnew _Api( this );\n\t\t};\n\n\n\t\t/**\n\t\t * Add a single new row or multiple rows of data to the table. Please note\n\t\t * that this is suitable for client-side processing only - if you are using\n\t\t * server-side processing (i.e. \"bServerSide\": true), then to add data, you\n\t\t * must add it to the data source, i.e. the server-side, through an Ajax call.\n\t\t *  @param {array|object} data The data to be added to the table. This can be:\n\t\t *    <ul>\n\t\t *      <li>1D array of data - add a single row with the data provided</li>\n\t\t *      <li>2D array of arrays - add multiple rows in a single call</li>\n\t\t *      <li>object - data object when using <i>mData</i></li>\n\t\t *      <li>array of objects - multiple data objects when using <i>mData</i></li>\n\t\t *    </ul>\n\t\t *  @param {bool} [redraw=true] redraw the table or not\n\t\t *  @returns {array} An array of integers, representing the list of indexes in\n\t\t *    <i>aoData</i> ({@link DataTable.models.oSettings}) that have been added to\n\t\t *    the table.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Global var for counter\n\t\t *    var giCount = 2;\n\t\t *\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example').dataTable();\n\t\t *    } );\n\t\t *\n\t\t *    function fnClickAddRow() {\n\t\t *      $('#example').dataTable().fnAddData( [\n\t\t *        giCount+\".1\",\n\t\t *        giCount+\".2\",\n\t\t *        giCount+\".3\",\n\t\t *        giCount+\".4\" ]\n\t\t *      );\n\t\t *\n\t\t *      giCount++;\n\t\t *    }\n\t\t */\n\t\tthis.fnAddData = function( data, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\n\t\t\t/* Check if we want to add multiple rows or not */\n\t\t\tvar rows = $.isArray(data) && ( $.isArray(data[0]) || $.isPlainObject(data[0]) ) ?\n\t\t\t\tapi.rows.add( data ) :\n\t\t\t\tapi.row.add( data );\n\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\n\t\t\treturn rows.flatten().toArray();\n\t\t};\n\n\n\t\t/**\n\t\t * This function will make DataTables recalculate the column sizes, based on the data\n\t\t * contained in the table and the sizes applied to the columns (in the DOM, CSS or\n\t\t * through the sWidth parameter). This can be useful when the width of the table's\n\t\t * parent element changes (for example a window resize).\n\t\t *  @param {boolean} [bRedraw=true] Redraw the table or not, you will typically want to\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable( {\n\t\t *        \"sScrollY\": \"200px\",\n\t\t *        \"bPaginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      $(window).bind('resize', function () {\n\t\t *        oTable.fnAdjustColumnSizing();\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnAdjustColumnSizing = function ( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).columns.adjust();\n\t\t\tvar settings = api.settings()[0];\n\t\t\tvar scroll = settings.oScroll;\n\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw( false );\n\t\t\t}\n\t\t\telse if ( scroll.sX !== \"\" || scroll.sY !== \"\" ) {\n\t\t\t\t/* If not redrawing, but scrolling, we want to apply the new column sizes anyway */\n\t\t\t\t_fnScrollDraw( settings );\n\t\t\t}\n\t\t};\n\n\n\t\t/**\n\t\t * Quickly and simply clear a table\n\t\t *  @param {bool} [bRedraw=true] redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately 'nuke' the current rows (perhaps waiting for an Ajax callback...)\n\t\t *      oTable.fnClearTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClearTable = function( bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).clear();\n\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t};\n\n\n\t\t/**\n\t\t * The exact opposite of 'opening' a row, this function will close any rows which\n\t\t * are currently 'open'.\n\t\t *  @param {node} nTr the table row to 'close'\n\t\t *  @returns {int} 0 on success, or 1 if failed (can't find the row)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnClose = function( nTr )\n\t\t{\n\t\t\tthis.api( true ).row( nTr ).child.hide();\n\t\t};\n\n\n\t\t/**\n\t\t * Remove a row for the table\n\t\t *  @param {mixed} target The index of the row from aoData to be deleted, or\n\t\t *    the TR element you want to delete\n\t\t *  @param {function|null} [callBack] Callback function\n\t\t *  @param {bool} [redraw=true] Redraw the table or not\n\t\t *  @returns {array} The row that was deleted\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Immediately remove the first row\n\t\t *      oTable.fnDeleteRow( 0 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnDeleteRow = function( target, callback, redraw )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar rows = api.rows( target );\n\t\t\tvar settings = rows.settings()[0];\n\t\t\tvar data = settings.aoData[ rows[0][0] ];\n\n\t\t\trows.remove();\n\n\t\t\tif ( callback ) {\n\t\t\t\tcallback.call( this, settings, data );\n\t\t\t}\n\n\t\t\tif ( redraw === undefined || redraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\n\t\t\treturn data;\n\t\t};\n\n\n\t\t/**\n\t\t * Restore the table to it's original state in the DOM by removing all of DataTables\n\t\t * enhancements, alterations to the DOM structure of the table and event listeners.\n\t\t *  @param {boolean} [remove=false] Completely remove the table from the DOM\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      // This example is fairly pointless in reality, but shows how fnDestroy can be used\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnDestroy();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDestroy = function ( remove )\n\t\t{\n\t\t\tthis.api( true ).destroy( remove );\n\t\t};\n\n\n\t\t/**\n\t\t * Redraw the table\n\t\t *  @param {bool} [complete=true] Re-filter and resort (if enabled) the table before the draw.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Re-draw the table - you wouldn't want to do it here, but it's an example :-)\n\t\t *      oTable.fnDraw();\n\t\t *    } );\n\t\t */\n\t\tthis.fnDraw = function( complete )\n\t\t{\n\t\t\t// Note that this isn't an exact match to the old call to _fnDraw - it takes\n\t\t\t// into account the new data, but can old position.\n\t\t\tthis.api( true ).draw( ! complete );\n\t\t};\n\n\n\t\t/**\n\t\t * Filter the input based on data\n\t\t *  @param {string} sInput String to filter the table on\n\t\t *  @param {int|null} [iColumn] Column to limit filtering to\n\t\t *  @param {bool} [bRegex=false] Treat as regular expression or not\n\t\t *  @param {bool} [bSmart=true] Perform smart filtering or not\n\t\t *  @param {bool} [bShowGlobal=true] Show the input global filter in it's input box(es)\n\t\t *  @param {bool} [bCaseInsensitive=true] Do case-insensitive matching (true) or not (false)\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sometime later - filter...\n\t\t *      oTable.fnFilter( 'test string' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnFilter = function( sInput, iColumn, bRegex, bSmart, bShowGlobal, bCaseInsensitive )\n\t\t{\n\t\t\tvar api = this.api( true );\n\n\t\t\tif ( iColumn === null || iColumn === undefined ) {\n\t\t\t\tapi.search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.column( iColumn ).search( sInput, bRegex, bSmart, bCaseInsensitive );\n\t\t\t}\n\n\t\t\tapi.draw();\n\t\t};\n\n\n\t\t/**\n\t\t * Get the data for the whole table, an individual row or an individual cell based on the\n\t\t * provided parameters.\n\t\t *  @param {int|node} [src] A TR row node, TD/TH cell node or an integer. If given as\n\t\t *    a TR node then the data source for the whole row will be returned. If given as a\n\t\t *    TD/TH cell node then iCol will be automatically calculated and the data for the\n\t\t *    cell returned. If given as an integer, then this is treated as the aoData internal\n\t\t *    data index for the row (see fnGetPosition) and the data for that row used.\n\t\t *  @param {int} [col] Optional column index that you want the data of.\n\t\t *  @returns {array|object|string} If mRow is undefined, then the data for all rows is\n\t\t *    returned. If mRow is defined, just data for that row, and is iCol is\n\t\t *    defined, only data for the designated cell is returned.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    // Row data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('tr').click( function () {\n\t\t *        var data = oTable.fnGetData( this );\n\t\t *        // ... do something with the array / object of data for the row\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Individual cell data\n\t\t *    $(document).ready(function() {\n\t\t *      oTable = $('#example').dataTable();\n\t\t *\n\t\t *      oTable.$('td').click( function () {\n\t\t *        var sData = oTable.fnGetData( this );\n\t\t *        alert( 'The cell clicked on had the value of '+sData );\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetData = function( src, col )\n\t\t{\n\t\t\tvar api = this.api( true );\n\n\t\t\tif ( src !== undefined ) {\n\t\t\t\tvar type = src.nodeName ? src.nodeName.toLowerCase() : '';\n\n\t\t\t\treturn col !== undefined || type == 'td' || type == 'th' ?\n\t\t\t\t\tapi.cell( src, col ).data() :\n\t\t\t\t\tapi.row( src ).data();\n\t\t\t}\n\n\t\t\treturn api.data().toArray();\n\t\t};\n\n\n\t\t/**\n\t\t * Get an array of the TR nodes that are used in the table's body. Note that you will\n\t\t * typically want to use the '$' API method in preference to this as it is more\n\t\t * flexible.\n\t\t *  @param {int} [iRow] Optional row index for the TR element you want\n\t\t *  @returns {array|node} If iRow is undefined, returns an array of all TR elements\n\t\t *    in the table's body, or iRow is defined, just the TR element requested.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Get the nodes from the table\n\t\t *      var nNodes = oTable.fnGetNodes( );\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetNodes = function( iRow )\n\t\t{\n\t\t\tvar api = this.api( true );\n\n\t\t\treturn iRow !== undefined ?\n\t\t\t\tapi.row( iRow ).node() :\n\t\t\t\tapi.rows().nodes().toArray();\n\t\t};\n\n\n\t\t/**\n\t\t * Get the array indexes of a particular cell from it's DOM element\n\t\t * and column index including hidden columns\n\t\t *  @param {node} node this can either be a TR, TD or TH in the table's body\n\t\t *  @returns {int} If nNode is given as a TR, then a single index is returned, or\n\t\t *    if given as a cell, an array of [row index, column index (visible),\n\t\t *    column index (all)] is given.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      $('#example tbody td').click( function () {\n\t\t *        // Get the position of the current data from the node\n\t\t *        var aPos = oTable.fnGetPosition( this );\n\t\t *\n\t\t *        // Get the data array for this row\n\t\t *        var aData = oTable.fnGetData( aPos[0] );\n\t\t *\n\t\t *        // Update the data array and return the value\n\t\t *        aData[ aPos[1] ] = 'clicked';\n\t\t *        this.innerHTML = 'clicked';\n\t\t *      } );\n\t\t *\n\t\t *      // Init DataTables\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnGetPosition = function( node )\n\t\t{\n\t\t\tvar api = this.api( true );\n\t\t\tvar nodeName = node.nodeName.toUpperCase();\n\n\t\t\tif ( nodeName == 'TR' ) {\n\t\t\t\treturn api.row( node ).index();\n\t\t\t}\n\t\t\telse if ( nodeName == 'TD' || nodeName == 'TH' ) {\n\t\t\t\tvar cell = api.cell( node ).index();\n\n\t\t\t\treturn [\n\t\t\t\t\tcell.row,\n\t\t\t\t\tcell.columnVisible,\n\t\t\t\t\tcell.column\n\t\t\t\t];\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\n\t\t/**\n\t\t * Check to see if a row is 'open' or not.\n\t\t *  @param {node} nTr the table row to check\n\t\t *  @returns {boolean} true if the row is currently open, false otherwise\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnIsOpen = function( nTr )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child.isShown();\n\t\t};\n\n\n\t\t/**\n\t\t * This function will place a new row directly after a row which is currently\n\t\t * on display on the page, with the HTML contents that is passed into the\n\t\t * function. This can be used, for example, to ask for confirmation that a\n\t\t * particular record should be deleted.\n\t\t *  @param {node} nTr The table row to 'open'\n\t\t *  @param {string|node|jQuery} mHtml The HTML to put into the row\n\t\t *  @param {string} sClass Class to give the new TD cell\n\t\t *  @returns {node} The row opened. Note that if the table row passed in as the\n\t\t *    first parameter, is not found in the table, this method will silently\n\t\t *    return.\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable;\n\t\t *\n\t\t *      // 'open' an information row when a row is clicked on\n\t\t *      $('#example tbody tr').click( function () {\n\t\t *        if ( oTable.fnIsOpen(this) ) {\n\t\t *          oTable.fnClose( this );\n\t\t *        } else {\n\t\t *          oTable.fnOpen( this, \"Temporary row opened\", \"info_row\" );\n\t\t *        }\n\t\t *      } );\n\t\t *\n\t\t *      oTable = $('#example').dataTable();\n\t\t *    } );\n\t\t */\n\t\tthis.fnOpen = function( nTr, mHtml, sClass )\n\t\t{\n\t\t\treturn this.api( true ).row( nTr ).child( mHtml, sClass ).show();\n\t\t};\n\n\n\t\t/**\n\t\t * Change the pagination - provides the internal logic for pagination in a simple API\n\t\t * function. With this function you can have a DataTables table go to the next,\n\t\t * previous, first or last pages.\n\t\t *  @param {string|int} mAction Paging action to take: \"first\", \"previous\", \"next\" or \"last\"\n\t\t *    or page number to jump to (integer), note that page 0 is the first page.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnPageChange( 'next' );\n\t\t *    } );\n\t\t */\n\t\tthis.fnPageChange = function ( mAction, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).page( mAction );\n\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw(false);\n\t\t\t}\n\t\t};\n\n\n\t\t/**\n\t\t * Show a particular column\n\t\t *  @param {int} iCol The column whose display should be changed\n\t\t *  @param {bool} bShow Show (true) or hide (false) the column\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Hide the second column after initialisation\n\t\t *      oTable.fnSetColumnVis( 1, false );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSetColumnVis = function ( iCol, bShow, bRedraw )\n\t\t{\n\t\t\tvar api = this.api( true ).column( iCol ).visible( bShow );\n\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.columns.adjust().draw();\n\t\t\t}\n\t\t};\n\n\n\t\t/**\n\t\t * Get the settings for a particular table for external manipulation\n\t\t *  @returns {object} DataTables settings object. See\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      var oSettings = oTable.fnSettings();\n\t\t *\n\t\t *      // Show an example parameter from the settings\n\t\t *      alert( oSettings._iDisplayStart );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSettings = function()\n\t\t{\n\t\t\treturn _fnSettingsFromNode( this[_ext.iApiIndex] );\n\t\t};\n\n\n\t\t/**\n\t\t * Sort the table by a particular column\n\t\t *  @param {int} iCol the data index to sort on. Note that this will not match the\n\t\t *    'display index' if you have hidden data entries\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort immediately with columns 0 and 1\n\t\t *      oTable.fnSort( [ [0,'asc'], [1,'asc'] ] );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSort = function( aaSort )\n\t\t{\n\t\t\tthis.api( true ).order( aaSort ).draw();\n\t\t};\n\n\n\t\t/**\n\t\t * Attach a sort listener to an element for a given column\n\t\t *  @param {node} nNode the element to attach the sort listener to\n\t\t *  @param {int} iColumn the column that a click on this node will sort on\n\t\t *  @param {function} [fnCallback] callback function when sort is run\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *\n\t\t *      // Sort on column 1, when 'sorter' is clicked on\n\t\t *      oTable.fnSortListener( document.getElementById('sorter'), 1 );\n\t\t *    } );\n\t\t */\n\t\tthis.fnSortListener = function( nNode, iColumn, fnCallback )\n\t\t{\n\t\t\tthis.api( true ).order.listener( nNode, iColumn, fnCallback );\n\t\t};\n\n\n\t\t/**\n\t\t * Update a table cell or row - this method will accept either a single value to\n\t\t * update the cell with, an array of values with one element for each column or\n\t\t * an object in the same format as the original data source. The function is\n\t\t * self-referencing in order to make the multi column updates easier.\n\t\t *  @param {object|array|string} mData Data to update the cell/row with\n\t\t *  @param {node|int} mRow TR element you want to update or the aoData index\n\t\t *  @param {int} [iColumn] The column to update, give as null or undefined to\n\t\t *    update a whole row.\n\t\t *  @param {bool} [bRedraw=true] Redraw the table or not\n\t\t *  @param {bool} [bAction=true] Perform pre-draw actions or not\n\t\t *  @returns {int} 0 on success, 1 on error\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      oTable.fnUpdate( 'Example update', 0, 0 ); // Single cell\n\t\t *      oTable.fnUpdate( ['a', 'b', 'c', 'd', 'e'], $('tbody tr')[0] ); // Row\n\t\t *    } );\n\t\t */\n\t\tthis.fnUpdate = function( mData, mRow, iColumn, bRedraw, bAction )\n\t\t{\n\t\t\tvar api = this.api( true );\n\n\t\t\tif ( iColumn === undefined || iColumn === null ) {\n\t\t\t\tapi.row( mRow ).data( mData );\n\t\t\t}\n\t\t\telse {\n\t\t\t\tapi.cell( mRow, iColumn ).data( mData );\n\t\t\t}\n\n\t\t\tif ( bAction === undefined || bAction ) {\n\t\t\t\tapi.columns.adjust();\n\t\t\t}\n\n\t\t\tif ( bRedraw === undefined || bRedraw ) {\n\t\t\t\tapi.draw();\n\t\t\t}\n\t\t\treturn 0;\n\t\t};\n\n\n\t\t/**\n\t\t * Provide a common method for plug-ins to check the version of DataTables being used, in order\n\t\t * to ensure compatibility.\n\t\t *  @param {string} sVersion Version string to check for, in the format \"X.Y.Z\". Note that the\n\t\t *    formats \"X\" and \"X.Y\" are also acceptable.\n\t\t *  @returns {boolean} true if this version of DataTables is greater or equal to the required\n\t\t *    version, or false if this version of DataTales is not suitable\n\t\t *  @method\n\t\t *  @dtopt API\n\t\t *  @deprecated Since v1.10\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready(function() {\n\t\t *      var oTable = $('#example').dataTable();\n\t\t *      alert( oTable.fnVersionCheck( '1.9.0' ) );\n\t\t *    } );\n\t\t */\n\t\tthis.fnVersionCheck = _ext.fnVersionCheck;\n\n\n\t\t/*\n\t\t * This is really a good bit rubbish this method of exposing the internal methods\n\t\t * publicly... - To be fixed in 2.0 using methods on the prototype\n\t\t */\n\n\n\t\t/**\n\t\t * Create a wrapper function for exporting an internal functions to an external API.\n\t\t *  @param {string} fn API function name\n\t\t *  @returns {function} wrapped function\n\t\t *  @memberof DataTable#internal\n\t\t */\n\t\tfunction _fnExternApiFunc (fn)\n\t\t{\n\t\t\treturn function() {\n\t\t\t\tvar args = [_fnSettingsFromNode( this[DataTable.ext.iApiIndex] )].concat(\n\t\t\t\t\tArray.prototype.slice.call(arguments)\n\t\t\t\t);\n\t\t\t\treturn DataTable.ext.internal[fn].apply( this, args );\n\t\t\t};\n\t\t}\n\n\n\t\t/**\n\t\t * Reference to internal functions for use by plug-in developers. Note that\n\t\t * these methods are references to internal functions and are considered to be\n\t\t * private. If you use these methods, be aware that they are liable to change\n\t\t * between versions.\n\t\t *  @namespace\n\t\t */\n\t\tthis.oApi = this.internal = {\n\t\t\t_fnExternApiFunc: _fnExternApiFunc,\n\t\t\t_fnBuildAjax: _fnBuildAjax,\n\t\t\t_fnAjaxUpdate: _fnAjaxUpdate,\n\t\t\t_fnAjaxParameters: _fnAjaxParameters,\n\t\t\t_fnAjaxUpdateDraw: _fnAjaxUpdateDraw,\n\t\t\t_fnAjaxDataSrc: _fnAjaxDataSrc,\n\t\t\t_fnAddColumn: _fnAddColumn,\n\t\t\t_fnColumnOptions: _fnColumnOptions,\n\t\t\t_fnAdjustColumnSizing: _fnAdjustColumnSizing,\n\t\t\t_fnVisibleToColumnIndex: _fnVisibleToColumnIndex,\n\t\t\t_fnColumnIndexToVisible: _fnColumnIndexToVisible,\n\t\t\t_fnVisbleColumns: _fnVisbleColumns,\n\t\t\t_fnGetColumns: _fnGetColumns,\n\t\t\t_fnColumnTypes: _fnColumnTypes,\n\t\t\t_fnApplyColumnDefs: _fnApplyColumnDefs,\n\t\t\t_fnHungarianMap: _fnHungarianMap,\n\t\t\t_fnCamelToHungarian: _fnCamelToHungarian,\n\t\t\t_fnLanguageCompat: _fnLanguageCompat,\n\t\t\t_fnBrowserDetect: _fnBrowserDetect,\n\t\t\t_fnAddData: _fnAddData,\n\t\t\t_fnAddTr: _fnAddTr,\n\t\t\t_fnNodeToDataIndex: _fnNodeToDataIndex,\n\t\t\t_fnNodeToColumnIndex: _fnNodeToColumnIndex,\n\t\t\t_fnGetRowData: _fnGetRowData,\n\t\t\t_fnGetCellData: _fnGetCellData,\n\t\t\t_fnSetCellData: _fnSetCellData,\n\t\t\t_fnSplitObjNotation: _fnSplitObjNotation,\n\t\t\t_fnGetObjectDataFn: _fnGetObjectDataFn,\n\t\t\t_fnSetObjectDataFn: _fnSetObjectDataFn,\n\t\t\t_fnGetDataMaster: _fnGetDataMaster,\n\t\t\t_fnClearTable: _fnClearTable,\n\t\t\t_fnDeleteIndex: _fnDeleteIndex,\n\t\t\t_fnInvalidateRow: _fnInvalidateRow,\n\t\t\t_fnGetRowElements: _fnGetRowElements,\n\t\t\t_fnCreateTr: _fnCreateTr,\n\t\t\t_fnBuildHead: _fnBuildHead,\n\t\t\t_fnDrawHead: _fnDrawHead,\n\t\t\t_fnDraw: _fnDraw,\n\t\t\t_fnReDraw: _fnReDraw,\n\t\t\t_fnAddOptionsHtml: _fnAddOptionsHtml,\n\t\t\t_fnDetectHeader: _fnDetectHeader,\n\t\t\t_fnGetUniqueThs: _fnGetUniqueThs,\n\t\t\t_fnFeatureHtmlFilter: _fnFeatureHtmlFilter,\n\t\t\t_fnFilterComplete: _fnFilterComplete,\n\t\t\t_fnFilterCustom: _fnFilterCustom,\n\t\t\t_fnFilterColumn: _fnFilterColumn,\n\t\t\t_fnFilter: _fnFilter,\n\t\t\t_fnFilterCreateSearch: _fnFilterCreateSearch,\n\t\t\t_fnEscapeRegex: _fnEscapeRegex,\n\t\t\t_fnFilterData: _fnFilterData,\n\t\t\t_fnFeatureHtmlInfo: _fnFeatureHtmlInfo,\n\t\t\t_fnUpdateInfo: _fnUpdateInfo,\n\t\t\t_fnInfoMacros: _fnInfoMacros,\n\t\t\t_fnInitialise: _fnInitialise,\n\t\t\t_fnInitComplete: _fnInitComplete,\n\t\t\t_fnLengthChange: _fnLengthChange,\n\t\t\t_fnFeatureHtmlLength: _fnFeatureHtmlLength,\n\t\t\t_fnFeatureHtmlPaginate: _fnFeatureHtmlPaginate,\n\t\t\t_fnPageChange: _fnPageChange,\n\t\t\t_fnFeatureHtmlProcessing: _fnFeatureHtmlProcessing,\n\t\t\t_fnProcessingDisplay: _fnProcessingDisplay,\n\t\t\t_fnFeatureHtmlTable: _fnFeatureHtmlTable,\n\t\t\t_fnScrollDraw: _fnScrollDraw,\n\t\t\t_fnApplyToChildren: _fnApplyToChildren,\n\t\t\t_fnCalculateColumnWidths: _fnCalculateColumnWidths,\n\t\t\t_fnThrottle: _fnThrottle,\n\t\t\t_fnConvertToWidth: _fnConvertToWidth,\n\t\t\t_fnScrollingWidthAdjust: _fnScrollingWidthAdjust,\n\t\t\t_fnGetWidestNode: _fnGetWidestNode,\n\t\t\t_fnGetMaxLenString: _fnGetMaxLenString,\n\t\t\t_fnStringToCss: _fnStringToCss,\n\t\t\t_fnScrollBarWidth: _fnScrollBarWidth,\n\t\t\t_fnSortFlatten: _fnSortFlatten,\n\t\t\t_fnSort: _fnSort,\n\t\t\t_fnSortAria: _fnSortAria,\n\t\t\t_fnSortListener: _fnSortListener,\n\t\t\t_fnSortAttachListener: _fnSortAttachListener,\n\t\t\t_fnSortingClasses: _fnSortingClasses,\n\t\t\t_fnSortData: _fnSortData,\n\t\t\t_fnSaveState: _fnSaveState,\n\t\t\t_fnLoadState: _fnLoadState,\n\t\t\t_fnSettingsFromNode: _fnSettingsFromNode,\n\t\t\t_fnLog: _fnLog,\n\t\t\t_fnMap: _fnMap,\n\t\t\t_fnBindAction: _fnBindAction,\n\t\t\t_fnCallbackReg: _fnCallbackReg,\n\t\t\t_fnCallbackFire: _fnCallbackFire,\n\t\t\t_fnLengthOverflow: _fnLengthOverflow,\n\t\t\t_fnRenderer: _fnRenderer,\n\t\t\t_fnDataSource: _fnDataSource,\n\t\t\t_fnRowAttributes: _fnRowAttributes\n\t\t};\n\n\t\t$.extend( DataTable.ext.internal, this.internal );\n\n\t\tfor ( var fn in DataTable.ext.internal ) {\n\t\t\tif ( fn ) {\n\t\t\t\tthis[fn] = _fnExternApiFunc(fn);\n\t\t\t}\n\t\t}\n\n\n\t\tvar _that = this;\n\t\tvar emptyInit = options === undefined;\n\t\tvar len = this.length;\n\n\t\tif ( emptyInit ) {\n\t\t\toptions = {};\n\t\t}\n\n\t\tthis.each(function() {\n\t\t\t// For each initialisation we want to give it a clean initialisation\n\t\t\t// object that can be bashed around\n\t\t\tvar o = {};\n\t\t\tvar oInit = len > 1 ? // optimisation for single table case\n\t\t\t\t_fnExtend( o, options, true ) :\n\t\t\t\toptions;\n\n\t\t\t/*global oInit,_that,emptyInit*/\n\t\t\tvar i=0, iLen, j, jLen, k, kLen;\n\t\t\tvar sId = this.getAttribute( 'id' );\n\t\t\tvar bInitHandedOff = false;\n\t\t\tvar defaults = DataTable.defaults;\n\n\n\t\t\t/* Sanity check */\n\t\t\tif ( this.nodeName.toLowerCase() != 'table' )\n\t\t\t{\n\t\t\t\t_fnLog( null, 0, 'Non-table node initialisation ('+this.nodeName+')', 2 );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t/* Backwards compatibility for the defaults */\n\t\t\t_fnCompatOpts( defaults );\n\t\t\t_fnCompatCols( defaults.column );\n\n\t\t\t/* Convert the camel-case defaults to Hungarian */\n\t\t\t_fnCamelToHungarian( defaults, defaults, true );\n\t\t\t_fnCamelToHungarian( defaults.column, defaults.column, true );\n\n\t\t\t/* Setting up the initialisation object */\n\t\t\t_fnCamelToHungarian( defaults, oInit );\n\n\t\t\t/* Check to see if we are re-initialising a table */\n\t\t\tvar allSettings = DataTable.settings;\n\t\t\tfor ( i=0, iLen=allSettings.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t/* Base check on table node */\n\t\t\t\tif ( allSettings[i].nTable == this )\n\t\t\t\t{\n\t\t\t\t\tvar bRetrieve = oInit.bRetrieve !== undefined ? oInit.bRetrieve : defaults.bRetrieve;\n\t\t\t\t\tvar bDestroy = oInit.bDestroy !== undefined ? oInit.bDestroy : defaults.bDestroy;\n\n\t\t\t\t\tif ( emptyInit || bRetrieve )\n\t\t\t\t\t{\n\t\t\t\t\t\treturn allSettings[i].oInstance;\n\t\t\t\t\t}\n\t\t\t\t\telse if ( bDestroy )\n\t\t\t\t\t{\n\t\t\t\t\t\tallSettings[i].oInstance.fnDestroy();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t_fnLog( allSettings[i], 0, 'Cannot reinitialise DataTable', 3 );\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t/* If the element we are initialising has the same ID as a table which was previously\n\t\t\t\t * initialised, but the table nodes don't match (from before) then we destroy the old\n\t\t\t\t * instance by simply deleting it. This is under the assumption that the table has been\n\t\t\t\t * destroyed by other methods. Anyone using non-id selectors will need to do this manually\n\t\t\t\t */\n\t\t\t\tif ( allSettings[i].sTableId == this.id )\n\t\t\t\t{\n\t\t\t\t\tallSettings.splice( i, 1 );\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Ensure the table has an ID - required for accessibility */\n\t\t\tif ( sId === null || sId === \"\" )\n\t\t\t{\n\t\t\t\tsId = \"DataTables_Table_\"+(DataTable.ext._unique++);\n\t\t\t\tthis.id = sId;\n\t\t\t}\n\n\t\t\t/* Create the settings object for this table and set some of the default parameters */\n\t\t\tvar oSettings = $.extend( true, {}, DataTable.models.oSettings, {\n\t\t\t\t\"nTable\":        this,\n\t\t\t\t\"oApi\":          _that.internal,\n\t\t\t\t\"oInit\":         oInit,\n\t\t\t\t\"sDestroyWidth\": $(this)[0].style.width,\n\t\t\t\t\"sInstance\":     sId,\n\t\t\t\t\"sTableId\":      sId\n\t\t\t} );\n\t\t\tallSettings.push( oSettings );\n\n\t\t\t// Need to add the instance after the instance after the settings object has been added\n\t\t\t// to the settings array, so we can self reference the table instance if more than one\n\t\t\toSettings.oInstance = (_that.length===1) ? _that : $(this).dataTable();\n\n\t\t\t// Backwards compatibility, before we apply all the defaults\n\t\t\t_fnCompatOpts( oInit );\n\n\t\t\tif ( oInit.oLanguage )\n\t\t\t{\n\t\t\t\t_fnLanguageCompat( oInit.oLanguage );\n\t\t\t}\n\n\t\t\t// If the length menu is given, but the init display length is not, use the length menu\n\t\t\tif ( oInit.aLengthMenu && ! oInit.iDisplayLength )\n\t\t\t{\n\t\t\t\toInit.iDisplayLength = $.isArray( oInit.aLengthMenu[0] ) ?\n\t\t\t\t\toInit.aLengthMenu[0][0] : oInit.aLengthMenu[0];\n\t\t\t}\n\n\t\t\t// Apply the defaults and init options to make a single init object will all\n\t\t\t// options defined from defaults and instance options.\n\t\t\toInit = _fnExtend( $.extend( true, {}, defaults ), oInit );\n\n\n\t\t\t// Map the initialisation options onto the settings object\n\t\t\t_fnMap( oSettings.oFeatures, oInit, [\n\t\t\t\t\"bPaginate\",\n\t\t\t\t\"bLengthChange\",\n\t\t\t\t\"bFilter\",\n\t\t\t\t\"bSort\",\n\t\t\t\t\"bSortMulti\",\n\t\t\t\t\"bInfo\",\n\t\t\t\t\"bProcessing\",\n\t\t\t\t\"bAutoWidth\",\n\t\t\t\t\"bSortClasses\",\n\t\t\t\t\"bServerSide\",\n\t\t\t\t\"bDeferRender\"\n\t\t\t] );\n\t\t\t_fnMap( oSettings, oInit, [\n\t\t\t\t\"asStripeClasses\",\n\t\t\t\t\"ajax\",\n\t\t\t\t\"fnServerData\",\n\t\t\t\t\"fnFormatNumber\",\n\t\t\t\t\"sServerMethod\",\n\t\t\t\t\"aaSorting\",\n\t\t\t\t\"aaSortingFixed\",\n\t\t\t\t\"aLengthMenu\",\n\t\t\t\t\"sPaginationType\",\n\t\t\t\t\"sAjaxSource\",\n\t\t\t\t\"sAjaxDataProp\",\n\t\t\t\t\"iStateDuration\",\n\t\t\t\t\"sDom\",\n\t\t\t\t\"bSortCellsTop\",\n\t\t\t\t\"iTabIndex\",\n\t\t\t\t\"fnStateLoadCallback\",\n\t\t\t\t\"fnStateSaveCallback\",\n\t\t\t\t\"renderer\",\n\t\t\t\t[ \"iCookieDuration\", \"iStateDuration\" ], // backwards compat\n\t\t\t\t[ \"oSearch\", \"oPreviousSearch\" ],\n\t\t\t\t[ \"aoSearchCols\", \"aoPreSearchCols\" ],\n\t\t\t\t[ \"iDisplayLength\", \"_iDisplayLength\" ],\n\t\t\t\t[ \"bJQueryUI\", \"bJUI\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oScroll, oInit, [\n\t\t\t\t[ \"sScrollX\", \"sX\" ],\n\t\t\t\t[ \"sScrollXInner\", \"sXInner\" ],\n\t\t\t\t[ \"sScrollY\", \"sY\" ],\n\t\t\t\t[ \"bScrollCollapse\", \"bCollapse\" ]\n\t\t\t] );\n\t\t\t_fnMap( oSettings.oLanguage, oInit, \"fnInfoCallback\" );\n\n\t\t\t/* Callback functions which are array driven */\n\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback',       oInit.fnDrawCallback,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoServerParams',       oInit.fnServerParams,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateSaveParams',    oInit.fnStateSaveParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoadParams',    oInit.fnStateLoadParams,   'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoStateLoaded',        oInit.fnStateLoaded,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCallback',        oInit.fnRowCallback,       'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoRowCreatedCallback', oInit.fnCreatedRow,        'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoHeaderCallback',     oInit.fnHeaderCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoFooterCallback',     oInit.fnFooterCallback,    'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoInitComplete',       oInit.fnInitComplete,      'user' );\n\t\t\t_fnCallbackReg( oSettings, 'aoPreDrawCallback',    oInit.fnPreDrawCallback,   'user' );\n\n\t\t\t// @todo Remove in 1.11\n\t\t\tif ( oInit.bJQueryUI )\n\t\t\t{\n\t\t\t\t/* Use the JUI classes object for display. You could clone the oStdClasses object if\n\t\t\t\t * you want to have multiple tables with multiple independent classes\n\t\t\t\t */\n\t\t\t\t$.extend( oSettings.oClasses, DataTable.ext.oJUIClasses, oInit.oClasses );\n\n\t\t\t\tif ( oInit.sDom === defaults.sDom && defaults.sDom === \"lfrtip\" )\n\t\t\t\t{\n\t\t\t\t\t/* Set the DOM to use a layout suitable for jQuery UI's theming */\n\t\t\t\t\toSettings.sDom = '<\"H\"lfr>t<\"F\"ip>';\n\t\t\t\t}\n\n\t\t\t\tif ( ! oSettings.renderer ) {\n\t\t\t\t\toSettings.renderer = 'jqueryui';\n\t\t\t\t}\n\t\t\t\telse if ( $.isPlainObject( oSettings.renderer ) && ! oSettings.renderer.header ) {\n\t\t\t\t\toSettings.renderer.header = 'jqueryui';\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$.extend( oSettings.oClasses, DataTable.ext.classes, oInit.oClasses );\n\t\t\t}\n\t\t\t$(this).addClass( oSettings.oClasses.sTable );\n\n\t\t\t/* Calculate the scroll bar width and cache it for use later on */\n\t\t\tif ( oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\" )\n\t\t\t{\n\t\t\t\toSettings.oScroll.iBarWidth = _fnScrollBarWidth();\n\t\t\t}\n\t\t\tif ( oSettings.oScroll.sX === true ) { // Easy initialisation of x-scrolling\n\t\t\t\toSettings.oScroll.sX = '100%';\n\t\t\t}\n\n\t\t\tif ( oSettings.iInitDisplayStart === undefined )\n\t\t\t{\n\t\t\t\t/* Display start point, taking into account the save saving */\n\t\t\t\toSettings.iInitDisplayStart = oInit.iDisplayStart;\n\t\t\t\toSettings._iDisplayStart = oInit.iDisplayStart;\n\t\t\t}\n\n\t\t\tif ( oInit.iDeferLoading !== null )\n\t\t\t{\n\t\t\t\toSettings.bDeferLoading = true;\n\t\t\t\tvar tmp = $.isArray( oInit.iDeferLoading );\n\t\t\t\toSettings._iRecordsDisplay = tmp ? oInit.iDeferLoading[0] : oInit.iDeferLoading;\n\t\t\t\toSettings._iRecordsTotal = tmp ? oInit.iDeferLoading[1] : oInit.iDeferLoading;\n\t\t\t}\n\n\t\t\t/* Language definitions */\n\t\t\tif ( oInit.oLanguage.sUrl !== \"\" )\n\t\t\t{\n\t\t\t\t/* Get the language definitions from a file - because this Ajax call makes the language\n\t\t\t\t * get async to the remainder of this function we use bInitHandedOff to indicate that\n\t\t\t\t * _fnInitialise will be fired by the returned Ajax handler, rather than the constructor\n\t\t\t\t */\n\t\t\t\toSettings.oLanguage.sUrl = oInit.oLanguage.sUrl;\n\t\t\t\t$.getJSON( oSettings.oLanguage.sUrl, null, function( json ) {\n\t\t\t\t\t_fnLanguageCompat( json );\n\t\t\t\t\t_fnCamelToHungarian( defaults.oLanguage, json );\n\t\t\t\t\t$.extend( true, oSettings.oLanguage, oInit.oLanguage, json );\n\t\t\t\t\t_fnInitialise( oSettings );\n\t\t\t\t} );\n\t\t\t\tbInitHandedOff = true;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t$.extend( true, oSettings.oLanguage, oInit.oLanguage );\n\t\t\t}\n\n\n\t\t\t/*\n\t\t\t * Stripes\n\t\t\t */\n\t\t\tif ( oInit.asStripeClasses === null )\n\t\t\t{\n\t\t\t\toSettings.asStripeClasses =[\n\t\t\t\t\toSettings.oClasses.sStripeOdd,\n\t\t\t\t\toSettings.oClasses.sStripeEven\n\t\t\t\t];\n\t\t\t}\n\n\t\t\t/* Remove row stripe classes if they are already on the table row */\n\t\t\tvar stripeClasses = oSettings.asStripeClasses;\n\t\t\tvar rowOne = $('tbody tr:eq(0)', this);\n\t\t\tif ( $.inArray( true, $.map( stripeClasses, function(el, i) {\n\t\t\t\treturn rowOne.hasClass(el);\n\t\t\t} ) ) !== -1 ) {\n\t\t\t\t$('tbody tr', this).removeClass( stripeClasses.join(' ') );\n\t\t\t\toSettings.asDestroyStripes = stripeClasses.slice();\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Columns\n\t\t\t * See if we should load columns automatically or use defined ones\n\t\t\t */\n\t\t\tvar anThs = [];\n\t\t\tvar aoColumnsInit;\n\t\t\tvar nThead = this.getElementsByTagName('thead');\n\t\t\tif ( nThead.length !== 0 )\n\t\t\t{\n\t\t\t\t_fnDetectHeader( oSettings.aoHeader, nThead[0] );\n\t\t\t\tanThs = _fnGetUniqueThs( oSettings );\n\t\t\t}\n\n\t\t\t/* If not given a column array, generate one with nulls */\n\t\t\tif ( oInit.aoColumns === null )\n\t\t\t{\n\t\t\t\taoColumnsInit = [];\n\t\t\t\tfor ( i=0, iLen=anThs.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\taoColumnsInit.push( null );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\taoColumnsInit = oInit.aoColumns;\n\t\t\t}\n\n\t\t\t/* Add the columns */\n\t\t\tfor ( i=0, iLen=aoColumnsInit.length ; i<iLen ; i++ )\n\t\t\t{\n\t\t\t\t_fnAddColumn( oSettings, anThs ? anThs[i] : null );\n\t\t\t}\n\n\t\t\t/* Apply the column definitions */\n\t\t\t_fnApplyColumnDefs( oSettings, oInit.aoColumnDefs, aoColumnsInit, function (iCol, oDef) {\n\t\t\t\t_fnColumnOptions( oSettings, iCol, oDef );\n\t\t\t} );\n\n\t\t\t/* HTML5 attribute detection - build an mData object automatically if the\n\t\t\t * attributes are found\n\t\t\t */\n\t\t\tif ( rowOne.length ) {\n\t\t\t\tvar a = function ( cell, name ) {\n\t\t\t\t\treturn cell.getAttribute( 'data-'+name ) ? name : null;\n\t\t\t\t};\n\n\t\t\t\t$.each( _fnGetRowElements( oSettings, rowOne[0] ).cells, function (i, cell) {\n\t\t\t\t\tvar col = oSettings.aoColumns[i];\n\n\t\t\t\t\tif ( col.mData === i ) {\n\t\t\t\t\t\tvar sort = a( cell, 'sort' ) || a( cell, 'order' );\n\t\t\t\t\t\tvar filter = a( cell, 'filter' ) || a( cell, 'search' );\n\n\t\t\t\t\t\tif ( sort !== null || filter !== null ) {\n\t\t\t\t\t\t\tcol.mData = {\n\t\t\t\t\t\t\t\t_:      i+'.display',\n\t\t\t\t\t\t\t\tsort:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\ttype:   sort !== null   ? i+'.@data-'+sort   : undefined,\n\t\t\t\t\t\t\t\tfilter: filter !== null ? i+'.@data-'+filter : undefined\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\t_fnColumnOptions( oSettings, i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\n\t\t\t/* Must be done after everything which can be overridden by the state saving! */\n\t\t\tif ( oInit.bStateSave )\n\t\t\t{\n\t\t\t\toSettings.oFeatures.bStateSave = true;\n\t\t\t\t_fnLoadState( oSettings, oInit );\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', _fnSaveState, 'state_save' );\n\t\t\t}\n\n\n\t\t\t/*\n\t\t\t * Sorting\n\t\t\t * @todo For modularisation (1.11) this needs to do into a sort start up handler\n\t\t\t */\n\n\t\t\t// If aaSorting is not defined, then we use the first indicator in asSorting\n\t\t\t// in case that has been altered, so the default sort reflects that option\n\t\t\tif ( oInit.aaSorting === undefined )\n\t\t\t{\n\t\t\t\tfor ( i=0, iLen=oSettings.aaSorting.length ; i<iLen ; i++ )\n\t\t\t\t{\n\t\t\t\t\toSettings.aaSorting[i][1] = oSettings.aoColumns[ i ].asSorting[0];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t/* Do a first pass on the sorting classes (allows any size changes to be taken into\n\t\t\t * account, and also will apply sorting disabled classes if disabled\n\t\t\t */\n\t\t\t_fnSortingClasses( oSettings );\n\n\t\t\tif ( oSettings.oFeatures.bSort )\n\t\t\t{\n\t\t\t\t_fnCallbackReg( oSettings, 'aoDrawCallback', function () {\n\t\t\t\t\tif ( oSettings.bSorted ) {\n\t\t\t\t\t\tvar aSort = _fnSortFlatten( oSettings );\n\t\t\t\t\t\tvar sortedColumns = {};\n\n\t\t\t\t\t\t$.each( aSort, function (i, val) {\n\t\t\t\t\t\t\tsortedColumns[ val.src ] = val.dir;\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t_fnCallbackFire( oSettings, null, 'order', [oSettings, aSort, sortedColumns] );\n\t\t\t\t\t\t_fnSortingClasses( oSettings );\n\t\t\t\t\t\t_fnSortAria( oSettings );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\n\n\n\t\t\t/*\n\t\t\t * Final init\n\t\t\t * Cache the header, body and footer as required, creating them if needed\n\t\t\t */\n\n\t\t\t/* Browser support detection */\n\t\t\t_fnBrowserDetect( oSettings );\n\n\t\t\t// Work around for Webkit bug 83867 - store the caption-side before removing from doc\n\t\t\tvar captions = $(this).children('caption').each( function () {\n\t\t\t\tthis._captionSide = $(this).css('caption-side');\n\t\t\t} );\n\n\t\t\tvar thead = $(this).children('thead');\n\t\t\tif ( thead.length === 0 )\n\t\t\t{\n\t\t\t\tthead = $('<thead/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTHead = thead[0];\n\n\t\t\tvar tbody = $(this).children('tbody');\n\t\t\tif ( tbody.length === 0 )\n\t\t\t{\n\t\t\t\ttbody = $('<tbody/>').appendTo(this);\n\t\t\t}\n\t\t\toSettings.nTBody = tbody[0];\n\n\t\t\tvar tfoot = $(this).children('tfoot');\n\t\t\tif ( tfoot.length === 0 && captions.length > 0 && (oSettings.oScroll.sX !== \"\" || oSettings.oScroll.sY !== \"\") )\n\t\t\t{\n\t\t\t\t// If we are a scrolling table, and no footer has been given, then we need to create\n\t\t\t\t// a tfoot element for the caption element to be appended to\n\t\t\t\ttfoot = $('<tfoot/>').appendTo(this);\n\t\t\t}\n\n\t\t\tif ( tfoot.length === 0 || tfoot.children().length === 0 ) {\n\t\t\t\t$(this).addClass( oSettings.oClasses.sNoFooter );\n\t\t\t}\n\t\t\telse if ( tfoot.length > 0 ) {\n\t\t\t\toSettings.nTFoot = tfoot[0];\n\t\t\t\t_fnDetectHeader( oSettings.aoFooter, oSettings.nTFoot );\n\t\t\t}\n\n\t\t\t/* Check if there is data passing into the constructor */\n\t\t\tif ( oInit.aaData )\n\t\t\t{\n\t\t\t\tfor ( i=0 ; i<oInit.aaData.length ; i++ )\n\t\t\t\t{\n\t\t\t\t\t_fnAddData( oSettings, oInit.aaData[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if ( oSettings.bDeferLoading || _fnDataSource( oSettings ) == 'dom' )\n\t\t\t{\n\t\t\t\t/* Grab the data from the page - only do this when deferred loading or no Ajax\n\t\t\t\t * source since there is no point in reading the DOM data if we are then going\n\t\t\t\t * to replace it with Ajax data\n\t\t\t\t */\n\t\t\t\t_fnAddTr( oSettings, $(oSettings.nTBody).children('tr') );\n\t\t\t}\n\n\t\t\t/* Copy the data index array */\n\t\t\toSettings.aiDisplay = oSettings.aiDisplayMaster.slice();\n\n\t\t\t/* Initialisation complete - table can be drawn */\n\t\t\toSettings.bInitialised = true;\n\n\t\t\t/* Check if we need to initialise the table (it might not have been handed off to the\n\t\t\t * language processor)\n\t\t\t */\n\t\t\tif ( bInitHandedOff === false )\n\t\t\t{\n\t\t\t\t_fnInitialise( oSettings );\n\t\t\t}\n\t\t} );\n\t\t_that = null;\n\t\treturn this;\n\t};\n\n\n\n\t/**\n\t * Computed structure of the DataTables API, defined by the options passed to\n\t * `DataTable.Api.register()` when building the API.\n\t *\n\t * The structure is built in order to speed creation and extension of the Api\n\t * objects since the extensions are effectively pre-parsed.\n\t *\n\t * The array is an array of objects with the following structure, where this\n\t * base array represents the Api prototype base:\n\t *\n\t *     [\n\t *       {\n\t *         name:      'data'                -- string   - Property name\n\t *         val:       function () {},       -- function - Api method (or undefined if just an object\n\t *         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t *         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t *       },\n\t *       {\n\t *         name:     'row'\n\t *         val:       {},\n\t *         methodExt: [ ... ],\n\t *         propExt:   [\n\t *           {\n\t *             name:      'data'\n\t *             val:       function () {},\n\t *             methodExt: [ ... ],\n\t *             propExt:   [ ... ]\n\t *           },\n\t *           ...\n\t *         ]\n\t *       }\n\t *     ]\n\t *\n\t * @type {Array}\n\t * @ignore\n\t */\n\tvar __apiStruct = [];\n\n\n\t/**\n\t * `Array.prototype` reference.\n\t *\n\t * @type object\n\t * @ignore\n\t */\n\tvar __arrayProto = Array.prototype;\n\n\n\n\n\t/**\n\t * Abstraction for `context` parameter of the `Api` constructor to allow it to\n\t * take several different forms for ease of use.\n\t *\n\t * Each of the input parameter types will be converted to a DataTables settings\n\t * object where possible.\n\t *\n\t * @param  {string|node|jQuery|object} mixed DataTable identifier. Can be one\n\t *   of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @return {array|null} Matching DataTables settings objects. `null` or\n\t *   `undefined` is returned if no matching DataTable is found.\n\t * @ignore\n\t */\n\tvar _toSettings = function ( mixed )\n\t{\n\t\tvar idx, jq;\n\t\tvar settings = DataTable.settings;\n\t\tvar tables = $.map( settings, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\n\t\tif ( mixed.nTable && mixed.oApi ) {\n\t\t\t// DataTables settings object\n\t\t\treturn [ mixed ];\n\t\t}\n\t\telse if ( mixed.nodeName && mixed.nodeName.toLowerCase() === 'table' ) {\n\t\t\t// Table node\n\t\t\tidx = $.inArray( mixed, tables );\n\t\t\treturn idx !== -1 ? [ settings[idx] ] : null;\n\t\t}\n\t\telse if ( typeof mixed === 'string' ) {\n\t\t\t// jQuery selector\n\t\t\tjq = $(mixed);\n\t\t}\n\t\telse if ( mixed instanceof $ ) {\n\t\t\t// jQuery object (also DataTables instance)\n\t\t\tjq = mixed;\n\t\t}\n\n\t\tif ( jq ) {\n\t\t\treturn jq.map( function(i) {\n\t\t\t\tidx = $.inArray( this, tables );\n\t\t\t\treturn idx !== -1 ? settings[idx] : null;\n\t\t\t} );\n\t\t}\n\t};\n\n\n\t/**\n\t * DataTables API class - used to control and interface with  one or more\n\t * DataTables enhanced tables.\n\t *\n\t * The API class is heavily based on jQuery, presenting a chainable interface\n\t * that you can use to interact with tables. Each instance of the API class has\n\t * a \"context\" - i.e. the tables that it will operate on. This could be a single\n\t * table, all tables on a page or a sub-set thereof.\n\t *\n\t * Additionally the API is designed to allow you to easily work with the data in\n\t * the tables, retrieving and manipulating it as required. This is done by\n\t * presenting the API class as an array like interface. The contents of the\n\t * array depend upon the actions requested by each method (for example\n\t * `rows().nodes()` will return an array of nodes, while `rows().data()` will\n\t * return an array of objects or arrays depending upon your table's\n\t * configuration). The API object has a number of array like methods (`push`,\n\t * `pop`, `reverse` etc) as well as additional helper methods (`each`, `pluck`,\n\t * `unique` etc) to assist your working with the data held in a table.\n\t *\n\t * Most methods (those which return an Api instance) are chainable, which means\n\t * the return from a method call also has all of the methods available that the\n\t * top level object had. For example, these two calls are equivalent:\n\t *\n\t *     // Not chained\n\t *     api.row.add( {...} );\n\t *     api.draw();\n\t *\n\t *     // Chained\n\t *     api.row.add( {...} ).draw();\n\t *\n\t * @class DataTable.Api\n\t * @param {array|object|string|jQuery} context DataTable identifier. This is\n\t *   used to define which DataTables enhanced tables this API will operate on.\n\t *   Can be one of:\n\t *\n\t *   * `string` - jQuery selector. Any DataTables' matching the given selector\n\t *     with be found and used.\n\t *   * `node` - `TABLE` node which has already been formed into a DataTable.\n\t *   * `jQuery` - A jQuery object of `TABLE` nodes.\n\t *   * `object` - DataTables settings object\n\t * @param {array} [data] Data to initialise the Api instance with.\n\t *\n\t * @example\n\t *   // Direct initialisation during DataTables construction\n\t *   var api = $('#example').DataTable();\n\t *\n\t * @example\n\t *   // Initialisation using a DataTables jQuery object\n\t *   var api = $('#example').dataTable().api();\n\t *\n\t * @example\n\t *   // Initialisation as a constructor\n\t *   var api = new $.fn.DataTable.Api( 'table.dataTable' );\n\t */\n\tDataTable.Api = _Api = function ( context, data )\n\t{\n\t\tif ( ! this instanceof _Api ) {\n\t\t\tthrow 'DT API must be constructed as a new object';\n\t\t\t// or should it do the 'new' for the caller?\n\t\t\t// return new _Api.apply( this, arguments );\n\t\t}\n\n\t\tvar settings = [];\n\t\tvar ctxSettings = function ( o ) {\n\t\t\tvar a = _toSettings( o );\n\t\t\tif ( a ) {\n\t\t\t\tsettings.push.apply( settings, a );\n\t\t\t}\n\t\t};\n\n\t\tif ( $.isArray( context ) ) {\n\t\t\tfor ( var i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tctxSettings( context[i] );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\tctxSettings( context );\n\t\t}\n\n\t\t// Remove duplicates\n\t\tthis.context = _unique( settings );\n\n\t\t// Initial data\n\t\tif ( data ) {\n\t\t\tthis.push.apply( this, data );\n\t\t}\n\n\t\t// selector\n\t\tthis.selector = {\n\t\t\trows: null,\n\t\t\tcols: null,\n\t\t\topts: null\n\t\t};\n\n\t\t_Api.extend( this, this, __apiStruct );\n\t};\n\n\n\t_Api.prototype = /** @lends DataTables.Api */{\n\t\t/**\n\t\t * Return a new Api instance, comprised of the data held in the current\n\t\t * instance, join with the other array(s) and/or value(s).\n\t\t *\n\t\t * An alias for `Array.prototype.concat`.\n\t\t *\n\t\t * @type method\n\t\t * @param {*} value1 Arrays and/or values to concatenate.\n\t\t * @param {*} [...] Additional arrays and/or values to concatenate.\n\t\t * @returns {DataTables.Api} New API instance, comprising of the combined\n\t\t *   array.\n\t\t */\n\t\tconcat:  __arrayProto.concat,\n\n\n\t\tcontext: [], // array of table settings objects\n\n\n\t\teach: function ( fn )\n\t\t{\n\t\t\tif ( __arrayProto.forEach ) {\n\t\t\t\t// Where possible, use the built-in forEach\n\t\t\t\t__arrayProto.forEach.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien; i++ ) {\n\t\t\t\t\t// In strict mode the execution scope is the passed value\n\t\t\t\t\tfn.call( this, this[i], i, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn this;\n\t\t},\n\n\n\t\tfilter: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\n\t\t\tif ( __arrayProto.filter ) {\n\t\t\t\ta = __arrayProto.filter.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\tif ( fn.call( this, this[i], i, this ) ) {\n\t\t\t\t\t\ta.push( this[i] );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\n\n\t\tflatten: function ()\n\t\t{\n\t\t\tvar a = [];\n\t\t\treturn new _Api( this.context, a.concat.apply( a, this ) );\n\t\t},\n\n\n\t\tjoin:    __arrayProto.join,\n\n\n\t\tindexOf: __arrayProto.indexOf || function (obj, start)\n\t\t{\n\t\t\tfor ( var i=(start || 0), ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( this[i] === obj ) {\n\t\t\t\t\treturn i;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn -1;\n\t\t},\n\n\t\t// Internal only at the moment - relax?\n\t\titerator: function ( flatten, type, fn ) {\n\t\t\tvar\n\t\t\t\ta = [], ret,\n\t\t\t\ti, ien, j, jen,\n\t\t\t\tcontext = this.context,\n\t\t\t\trows, items, item,\n\t\t\t\tselector = this.selector;\n\n\t\t\t// Argument shifting\n\t\t\tif ( typeof flatten === 'string' ) {\n\t\t\t\tfn = type;\n\t\t\t\ttype = flatten;\n\t\t\t\tflatten = false;\n\t\t\t}\n\n\t\t\tfor ( i=0, ien=context.length ; i<ien ; i++ ) {\n\t\t\t\tif ( type === 'table' ) {\n\t\t\t\t\tret = fn( context[i], i );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'columns' || type === 'rows' ) {\n\t\t\t\t\t// this has same length as context - one entry for each table\n\t\t\t\t\tret = fn( context[i], this[i], i );\n\n\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse if ( type === 'column' || type === 'column-rows' || type === 'row' || type === 'cell' ) {\n\t\t\t\t\t// columns and rows share the same structure.\n\t\t\t\t\t// 'this' is an array of column indexes for each context\n\t\t\t\t\titems = this[i];\n\n\t\t\t\t\tif ( type === 'column-rows' ) {\n\t\t\t\t\t\trows = _selector_row_indexes( context[i], selector.opts );\n\t\t\t\t\t}\n\n\t\t\t\t\tfor ( j=0, jen=items.length ; j<jen ; j++ ) {\n\t\t\t\t\t\titem = items[j];\n\n\t\t\t\t\t\tif ( type === 'cell' ) {\n\t\t\t\t\t\t\tret = fn( context[i], item.row, item.column, i, j );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tret = fn( context[i], item, i, j, rows );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( ret !== undefined ) {\n\t\t\t\t\t\t\ta.push( ret );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif ( a.length ) {\n\t\t\t\tvar api = new _Api( context, flatten ? a.concat.apply( [], a ) : a );\n\t\t\t\tvar apiSelector = api.selector;\n\t\t\t\tapiSelector.rows = selector.rows;\n\t\t\t\tapiSelector.cols = selector.cols;\n\t\t\t\tapiSelector.opts = selector.opts;\n\t\t\t\treturn api;\n\t\t\t}\n\t\t\treturn this;\n\t\t},\n\n\n\t\tlastIndexOf: __arrayProto.lastIndexOf || function (obj, start)\n\t\t{\n\t\t\t// Bit cheeky...\n\t\t\treturn this.indexOf.apply( this.toArray.reverse(), arguments );\n\t\t},\n\n\n\t\tlength:  0,\n\n\n\t\tmap: function ( fn )\n\t\t{\n\t\t\tvar a = [];\n\n\t\t\tif ( __arrayProto.map ) {\n\t\t\t\ta = __arrayProto.map.call( this, fn, this );\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// Compatibility for browsers without EMCA-252-5 (JS 1.6)\n\t\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\t\ta.push( fn.call( this, this[i], i ) );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn new _Api( this.context, a );\n\t\t},\n\n\n\t\tpluck: function ( prop )\n\t\t{\n\t\t\treturn this.map( function ( el ) {\n\t\t\t\treturn el[ prop ];\n\t\t\t} );\n\t\t},\n\n\t\tpop:     __arrayProto.pop,\n\n\n\t\tpush:    __arrayProto.push,\n\n\n\t\t// Does not return an API instance\n\t\treduce: __arrayProto.reduce || function ( fn, init )\n\t\t{\n\t\t\tvar\n\t\t\t\tvalue,\n\t\t\t\tisSet = false;\n\n\t\t\tif ( arguments.length > 1 ) {\n\t\t\t\tvalue = init;\n\t\t\t\tisSet = true;\n\t\t\t}\n\n\t\t\tfor ( var i=0, ien=this.length ; i<ien ; i++ ) {\n\t\t\t\tif ( ! this.hasOwnProperty(i) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvalue = isSet ?\n\t\t\t\t\tfn( value, this[i], i, this ) :\n\t\t\t\t\tthis[i];\n\n\t\t\t\tisSet = true;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\n\t\treduceRight: __arrayProto.reduceRight || function ( fn, init )\n\t\t{\n\t\t\tvar\n\t\t\t\tvalue,\n\t\t\t\tisSet = false;\n\n\t\t\tif ( arguments.length > 1 ) {\n\t\t\t\tvalue = init;\n\t\t\t\tisSet = true;\n\t\t\t}\n\n\t\t\tfor ( var i=this.length-1 ; i>=0 ; i-- ) {\n\t\t\t\tif ( ! this.hasOwnProperty(i) ) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tvalue = isSet ?\n\t\t\t\t\tfn( value, this[i], i, this ) :\n\t\t\t\t\tthis[i];\n\n\t\t\t\tisSet = true;\n\t\t\t}\n\n\t\t\treturn value;\n\t\t},\n\n\t\treverse: __arrayProto.reverse,\n\n\n\t\t// Object with rows, columns and opts\n\t\tselector: null,\n\n\n\t\tshift:   __arrayProto.shift,\n\n\n\t\tsort:    __arrayProto.sort, // ? name - order?\n\n\n\t\tsplice:  __arrayProto.splice,\n\n\n\t\ttoArray: function ()\n\t\t{\n\t\t\treturn __arrayProto.slice.call( this );\n\t\t},\n\n\n\t\tto$: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\n\n\t\ttoJQuery: function ()\n\t\t{\n\t\t\treturn $( this );\n\t\t},\n\n\n\t\tunique: function ()\n\t\t{\n\t\t\treturn new _Api( this.context, _unique(this) );\n\t\t},\n\n\n\t\tunshift: __arrayProto.unshift\n\t};\n\n\n\n\n\t_Api.extend = function ( scope, obj, ext )\n\t{\n\t\t// Only extend API instances and static properties of the API\n\t\tif ( ! obj || ( ! (obj instanceof _Api) && ! obj.__dt_wrapper ) ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar\n\t\t\ti, ien,\n\t\t\tj, jen,\n\t\t\tstruct, inner,\n\t\t\tmethodScoping = function ( fn, struc ) {\n\t\t\t\treturn function () {\n\t\t\t\t\tvar ret = fn.apply( scope, arguments );\n\n\t\t\t\t\t// Method extension\n\t\t\t\t\t_Api.extend( ret, ret, struc.methodExt );\n\t\t\t\t\treturn ret;\n\t\t\t\t};\n\t\t\t};\n\n\t\tfor ( i=0, ien=ext.length ; i<ien ; i++ ) {\n\t\t\tstruct = ext[i];\n\n\t\t\t// Value\n\t\t\tobj[ struct.name ] = typeof struct.val === 'function' ?\n\t\t\t\tmethodScoping( struct.val, struct ) :\n\t\t\t\tstruct.val;\n\n\t\t\tobj[ struct.name ].__dt_wrapper = true;\n\n\t\t\t// Property extension\n\t\t\t_Api.extend( scope, obj[ struct.name ], struct.propExt );\n\t\t}\n\t};\n\n\n\t// @todo - Is there need for an augment function?\n\t// _Api.augment = function ( inst, name )\n\t// {\n\t// \t// Find src object in the structure from the name\n\t// \tvar parts = name.split('.');\n\n\t// \t_Api.extend( inst, obj );\n\t// };\n\n\n\t//     [\n\t//       {\n\t//         name:      'data'                -- string   - Property name\n\t//         val:       function () {},       -- function - Api method (or undefined if just an object\n\t//         methodExt: [ ... ],              -- array    - Array of Api object definitions to extend the method result\n\t//         propExt:   [ ... ]               -- array    - Array of Api object definitions to extend the property\n\t//       },\n\t//       {\n\t//         name:     'row'\n\t//         val:       {},\n\t//         methodExt: [ ... ],\n\t//         propExt:   [\n\t//           {\n\t//             name:      'data'\n\t//             val:       function () {},\n\t//             methodExt: [ ... ],\n\t//             propExt:   [ ... ]\n\t//           },\n\t//           ...\n\t//         ]\n\t//       }\n\t//     ]\n\n\t_Api.register = _api_register = function ( name, val )\n\t{\n\t\tif ( $.isArray( name ) ) {\n\t\t\tfor ( var j=0, jen=name.length ; j<jen ; j++ ) {\n\t\t\t\t_Api.register( name[j], val );\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\n\t\tvar\n\t\t\ti, ien,\n\t\t\their = name.split('.'),\n\t\t\tstruct = __apiStruct,\n\t\t\tkey, method;\n\n\t\tvar find = function ( src, name ) {\n\t\t\tfor ( var i=0, ien=src.length ; i<ien ; i++ ) {\n\t\t\t\tif ( src[i].name === name ) {\n\t\t\t\t\treturn src[i];\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t};\n\n\t\tfor ( i=0, ien=heir.length ; i<ien ; i++ ) {\n\t\t\tmethod = heir[i].indexOf('()') !== -1;\n\t\t\tkey = method ?\n\t\t\t\their[i].replace('()', '') :\n\t\t\t\their[i];\n\n\t\t\tvar src = find( struct, key );\n\t\t\tif ( ! src ) {\n\t\t\t\tsrc = {\n\t\t\t\t\tname:      key,\n\t\t\t\t\tval:       {},\n\t\t\t\t\tmethodExt: [],\n\t\t\t\t\tpropExt:   []\n\t\t\t\t};\n\t\t\t\tstruct.push( src );\n\t\t\t}\n\n\t\t\tif ( i === ien-1 ) {\n\t\t\t\tsrc.val = val;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tstruct = method ?\n\t\t\t\t\tsrc.methodExt :\n\t\t\t\t\tsrc.propExt;\n\t\t\t}\n\t\t}\n\n\t\t// Rebuild the API with the new construct\n\t\tif ( _Api.ready ) {\n\t\t\tDataTable.api.build();\n\t\t}\n\t};\n\n\n\t_Api.registerPlural = _api_registerPlural = function ( pluralName, singularName, val ) {\n\t\t_Api.register( pluralName, val );\n\n\t\t_Api.register( singularName, function () {\n\t\t\tvar ret = val.apply( this, arguments );\n\n\t\t\tif ( ret === this ) {\n\t\t\t\t// Returned item is the API instance that was passed in, return it\n\t\t\t\treturn this;\n\t\t\t}\n\t\t\telse if ( ret instanceof _Api ) {\n\t\t\t\t// New API instance returned, want the value from the first item\n\t\t\t\t// in the returned array for the singular result.\n\t\t\t\treturn ret.length ?\n\t\t\t\t\t$.isArray( ret[0] ) ?\n\t\t\t\t\t\tnew _Api( ret.context, ret[0] ) : // Array results are 'enhanced'\n\t\t\t\t\t\tret[0] :\n\t\t\t\t\tundefined;\n\t\t\t}\n\n\t\t\t// Non-API return - just fire it back\n\t\t\treturn ret;\n\t\t} );\n\t};\n\n\n\t/**\n\t * Selector for HTML tables. Apply the given selector to the give array of\n\t * DataTables settings objects.\n\t *\n\t * @param {string|integer} [selector] jQuery selector string or integer\n\t * @param  {array} Array of DataTables settings objects to be filtered\n\t * @return {array}\n\t * @ignore\n\t */\n\tvar __table_selector = function ( selector, a )\n\t{\n\t\t// Integer is used to pick out a table by index\n\t\tif ( typeof selector === 'number' ) {\n\t\t\treturn [ a[ selector ] ];\n\t\t}\n\n\t\t// Perform a jQuery selector on the table nodes\n\t\tvar nodes = $.map( a, function (el, i) {\n\t\t\treturn el.nTable;\n\t\t} );\n\n\t\treturn $(nodes)\n\t\t\t.filter( selector )\n\t\t\t.map( function (i) {\n\t\t\t\t// Need to translate back from the table node to the settings\n\t\t\t\tvar idx = $.inArray( this, nodes );\n\t\t\t\treturn a[ idx ];\n\t\t\t} )\n\t\t\t.toArray();\n\t};\n\n\n\n\t/**\n\t * Context selector for the API's context (i.e. the tables the API instance\n\t * refers to.\n\t *\n\t * @name    DataTable.Api#tables\n\t * @param {string|integer} [selector] Selector to pick which tables the iterator\n\t *   should operate on. If not given, all tables in the current context are\n\t *   used. This can be given as a jQuery selector (for example `':gt(0)'`) to\n\t *   select multiple tables or as an integer to select a single table.\n\t * @returns {DataTable.Api} Returns a new API instance if a selector is given.\n\t */\n\t_api_register( 'tables()', function ( selector ) {\n\t\t// A new instance is created if there was a selector specified\n\t\treturn selector ?\n\t\t\tnew _Api( __table_selector( selector, this.context ) ) :\n\t\t\tthis;\n\t} );\n\n\n\t_api_register( 'table()', function ( selector ) {\n\t\tvar tables = this.tables( selector );\n\t\tvar ctx = tables.context;\n\n\t\t// Truncate to the first matched table\n\t\tif ( ctx.length ) {\n\t\t\tctx.length = 1;\n\t\t}\n\n\t\treturn tables;\n\t} );\n\n\n\t_api_registerPlural( 'tables().nodes()', 'table().node()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTable;\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'tables().body()', 'table().body()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTBody;\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'tables().header()', 'table().header()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTHead;\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'tables().footer()', 'table().footer()' , function () {\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\treturn ctx.nTFoot;\n\t\t} );\n\t} );\n\n\n\n\t/**\n\t * Redraw the tables in the current context.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'draw()', function ( resetPaging ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnReDraw( settings, resetPaging===false );\n\t\t} );\n\t} );\n\n\n\n\t/**\n\t * Get the current page index.\n\t *\n\t * @return {integer} Current page index (zero based)\n\t *//**\n\t * Set the current page.\n\t *\n\t * Note that if you attempt to show a page which does not exist, DataTables will\n\t * not throw an error, but rather reset the paging.\n\t *\n\t * @param {integer|string} action The paging action to take. This can be one of:\n\t *  * `integer` - The page index to jump to\n\t *  * `string` - An action to take:\n\t *    * `first` - Jump to first page.\n\t *    * `next` - Jump to the next page\n\t *    * `previous` - Jump to previous page\n\t *    * `last` - Jump to the last page.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page()', function ( action ) {\n\t\tif ( action === undefined ) {\n\t\t\treturn this.page.info().page; // not an expensive call\n\t\t}\n\n\t\t// else, have an action to take on all tables\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnPageChange( settings, action );\n\t\t} );\n\t} );\n\n\n\t/**\n\t * Paging information for the first table in the current context.\n\t *\n\t * If you require paging information for another table, use the `table()` method\n\t * with a suitable selector.\n\t *\n\t * @return {object} Object with the following properties set:\n\t *  * `page` - Current page index (zero based - i.e. the first page is `0`)\n\t *  * `pages` - Total number of pages\n\t *  * `start` - Display index for the first record shown on the current page\n\t *  * `end` - Display index for the last record shown on the current page\n\t *  * `length` - Display length (number of records). Note that generally `start\n\t *    + length = end`, but this is not always true, for example if there are\n\t *    only 2 records to show on the final page, with a length of 10.\n\t *  * `recordsTotal` - Full data set length\n\t *  * `recordsDisplay` - Data set length once the current filtering criterion\n\t *    are applied.\n\t */\n\t_api_register( 'page.info()', function ( action ) {\n\t\tif ( this.context.length === 0 ) {\n\t\t\treturn undefined;\n\t\t}\n\n\t\tvar\n\t\t\tsettings   = this.context[0],\n\t\t\tstart      = settings._iDisplayStart,\n\t\t\tlen        = settings._iDisplayLength,\n\t\t\tvisRecords = settings.fnRecordsDisplay(),\n\t\t\tall        = len === -1;\n\n\t\treturn {\n\t\t\t\"page\":           all ? 0 : Math.floor( start / len ),\n\t\t\t\"pages\":          all ? 1 : Math.ceil( visRecords / len ),\n\t\t\t\"start\":          start,\n\t\t\t\"end\":            settings.fnDisplayEnd(),\n\t\t\t\"length\":         len,\n\t\t\t\"recordsTotal\":   settings.fnRecordsTotal(),\n\t\t\t\"recordsDisplay\": visRecords\n\t\t};\n\t} );\n\n\n\t/**\n\t * Get the current page length.\n\t *\n\t * @return {integer} Current page length. Note `-1` indicates that all records\n\t *   are to be shown.\n\t *//**\n\t * Set the current page length.\n\t *\n\t * @param {integer} Page length to set. Use `-1` to show all records.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'page.len()', function ( len ) {\n\t\t// Note that we can't call this function 'length()' because `length`\n\t\t// is a Javascript property of functions which defines how many arguments\n\t\t// the function expects.\n\t\tif ( len === undefined ) {\n\t\t\treturn this.context.length !== 0 ?\n\t\t\t\tthis.context[0]._iDisplayLength :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// else, set the page length\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnLengthChange( settings, len );\n\t\t} );\n\t} );\n\n\n\n\tvar __reload = function ( settings, holdPosition, callback ) {\n\t\tif ( _fnDataSource( settings ) == 'ssp' ) {\n\t\t\t_fnReDraw( settings, holdPosition );\n\t\t}\n\t\telse {\n\t\t\t// Trigger xhr\n\t\t\t_fnBuildAjax( settings, [], function( json ) {\n\t\t\t\t// xxx can this be reduced?\n\t\t\t\t_fnClearTable( settings );\n\n\t\t\t\tvar data = _fnAjaxDataSrc( settings, json );\n\t\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\t\t_fnAddData( settings, data[i] );\n\t\t\t\t}\n\n\t\t\t\t_fnReDraw( settings, holdPosition );\n\n\t\t\t\tif ( callback ) {\n\t\t\t\t\tcallback( json );\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n\n\t/**\n\t * Get the JSON response from the last Ajax request that DataTables made to the\n\t * server. Note that this returns the JSON from the first table in the current\n\t * context.\n\t *\n\t * @return {object} JSON received from the server.\n\t */\n\t_api_register( 'ajax.json()', function () {\n\t\tvar ctx = this.context;\n\n\t\tif ( ctx.length > 0 ) {\n\t\t\treturn ctx[0].json;\n\t\t}\n\n\t\t// else return undefined;\n\t} );\n\n\n\t/**\n\t * Reload tables from the Ajax data source. Note that this function will\n\t * automatically re-draw the table when the remote data has been loaded.\n\t *\n\t * @param {boolean} [reset=true] Reset (default) or hold the current paging\n\t *   position. A full re-sort and re-filter is performed when this method is\n\t *   called, which is why the pagination reset is the default action.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.reload()', function ( callback, resetPaging ) {\n\t\treturn this.iterator( 'table', function (settings) {\n\t\t\t__reload( settings, resetPaging===false, callback );\n\t\t} );\n\t} );\n\n\n\t/**\n\t * Get the current Ajax URL. Note that this returns the URL from the first\n\t * table in the current context.\n\t *\n\t * @return {string} Current Ajax source URL\n\t *//**\n\t * Set the Ajax URL. Note that this will set the URL for all tables in the\n\t * current context.\n\t *\n\t * @param {string} url URL to set.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url()', function ( url ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( url === undefined ) {\n\t\t\t// get\n\t\t\tif ( ctx.length === 0 ) {\n\t\t\t\treturn undefined;\n\t\t\t}\n\t\t\tctx = ctx[0];\n\n\t\t\treturn ctx.ajax ?\n\t\t\t\t$.isPlainObject( ctx.ajax ) ?\n\t\t\t\t\tctx.ajax.url :\n\t\t\t\t\tctx.ajax :\n\t\t\t\tctx.sAjaxSource;\n\t\t}\n\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( $.isPlainObject( settings.ajax ) ) {\n\t\t\t\tsettings.ajax.url = url;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tsettings.ajax = url;\n\t\t\t}\n\t\t\t// No need to consider sAjaxSource here since DataTables gives priority\n\t\t\t// to `ajax` over `sAjaxSource`. So setting `ajax` here, renders any\n\t\t\t// value of `sAjaxSource` redundant.\n\t\t} );\n\t} );\n\n\n\t/**\n\t * Load data from the newly set Ajax URL. Note that this method is only\n\t * available when `ajax.url()` is used to set a URL. Additionally, this method\n\t * has the same effect as calling `ajax.reload()` but is provided for\n\t * convenience when setting a new URL. Like `ajax.reload()` it will\n\t * automatically redraw the table once the remote data has been loaded.\n\t *\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'ajax.url().load()', function ( callback, resetPaging ) {\n\t\t// Same as a reload, but makes sense to present it for easy access after a\n\t\t// url change\n\t\treturn this.iterator( 'table', function ( ctx ) {\n\t\t\t__reload( ctx, resetPaging===false, callback );\n\t\t} );\n\t} );\n\n\n\n\n\tvar _selector_run = function ( selector, select )\n\t{\n\t\tvar\n\t\t\tout = [], res,\n\t\t\ta, i, ien, j, jen;\n\n\t\tif ( ! $.isArray( selector ) ) {\n\t\t\tselector = [ selector ];\n\t\t}\n\n\t\tfor ( i=0, ien=selector.length ; i<ien ; i++ ) {\n\t\t\ta = selector[i] && selector[i].split ?\n\t\t\t\tselector[i].split(',') :\n\t\t\t\t[ selector[i] ];\n\n\t\t\tfor ( j=0, jen=a.length ; j<jen ; j++ ) {\n\t\t\t\tres = select( typeof a[j] === 'string' ? $.trim(a[j]) : a[j] );\n\n\t\t\t\tif ( res && res.length ) {\n\t\t\t\t\tout.push.apply( out, res );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn out;\n\t};\n\n\n\tvar _selector_opts = function ( opts )\n\t{\n\t\tif ( ! opts ) {\n\t\t\topts = {};\n\t\t}\n\n\t\t// Backwards compatibility for 1.9- which used the terminology filter rather\n\t\t// than search\n\t\tif ( opts.filter && ! opts.search ) {\n\t\t\topts.search = opts.filter;\n\t\t}\n\n\t\treturn {\n\t\t\tsearch: opts.search || 'none',\n\t\t\torder:  opts.order  || 'current',\n\t\t\tpage:   opts.page   || 'all'\n\t\t};\n\t};\n\n\n\tvar _selector_first = function ( inst )\n\t{\n\t\t// Reduce the API instance to the first item found\n\t\tfor ( var i=0, ien=inst.length ; i<ien ; i++ ) {\n\t\t\tif ( inst[i].length > 0 ) {\n\t\t\t\t// Assign the first element to the first item in the instance\n\t\t\t\t// and truncate the instance and context\n\t\t\t\tinst[0] = inst[i];\n\t\t\t\tinst.length = 1;\n\t\t\t\tinst.context = [ inst.context[i] ];\n\n\t\t\t\treturn inst;\n\t\t\t}\n\t\t}\n\n\t\t// Not found - return an empty instance\n\t\tinst.length = 0;\n\t\treturn inst;\n\t};\n\n\n\tvar _selector_row_indexes = function ( settings, opts )\n\t{\n\t\tvar\n\t\t\ti, ien, tmp, a=[],\n\t\t\tdisplayFiltered = settings.aiDisplay,\n\t\t\tdisplayMaster = settings.aiDisplayMaster;\n\n\t\tvar\n\t\t\tsearch = opts.search,  // none, applied, removed\n\t\t\torder  = opts.order,   // applied, current, index (original - compatibility with 1.9)\n\t\t\tpage   = opts.page;    // all, current\n\n\t\t// Current page implies that order=current and fitler=applied, since it is\n\t\t// fairly senseless otherwise, regardless of what order and search actually\n\t\t// are\n\t\tif ( page == 'current' )\n\t\t{\n\t\t\tfor ( i=settings._iDisplayStart, ien=settings.fnDisplayEnd() ; i<ien ; i++ ) {\n\t\t\t\ta.push( displayFiltered[i] );\n\t\t\t}\n\t\t}\n\t\telse if ( order == 'current' || order == 'applied' ) {\n\t\t\ta = search == 'none' ?\n\t\t\t\tdisplayMaster.slice() :                      // no search\n\t\t\t\tsearch == 'applied' ?\n\t\t\t\t\tdisplayFiltered.slice() :                // applied search\n\t\t\t\t\t$.map( displayMaster, function (el, i) { // removed search\n\t\t\t\t\t\treturn $.inArray( el, displayFiltered ) === -1 ? el : null;\n\t\t\t\t\t} );\n\t\t}\n\t\telse if ( order == 'index' || order == 'original' ) {\n\t\t\tfor ( i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\tif ( search == 'none' ) {\n\t\t\t\t\ta.push( i );\n\t\t\t\t}\n\t\t\t\telse { // applied | removed\n\t\t\t\t\ttmp = $.inArray( i, displayFiltered );\n\n\t\t\t\t\tif ((tmp === -1 && search == 'removed') ||\n\t\t\t\t\t\t(tmp === 1  && search == 'applied') )\n\t\t\t\t\t{\n\t\t\t\t\t\ta.push( i );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn a;\n\t};\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Rows\n\t *\n\t * {}          - no selector - use all available rows\n\t * {integer}   - row aoData index\n\t * {node}      - TR node\n\t * {string}    - jQuery selector to apply to the TR elements\n\t * {array}     - jQuery array of nodes, or simply an array of TR nodes\n\t *\n\t */\n\n\n\tvar __row_selector = function ( settings, selector, opts )\n\t{\n\t\treturn _selector_run( selector, function ( sel ) {\n\t\t\tvar selInt = _intVal( sel );\n\n\t\t\t// Short cut - selector is a number and no options provided (default is\n\t\t\t// all records, so no need to check if the index is in there, since it\n\t\t\t// must be - dev error if the index doesn't exist).\n\t\t\tif ( selInt !== null && ! opts ) {\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\n\t\t\tvar rows = _selector_row_indexes( settings, opts );\n\n\t\t\tif ( selInt !== null && $.inArray( selInt, rows ) !== -1 ) {\n\t\t\t\t// Selector - integer\n\t\t\t\treturn [ selInt ];\n\t\t\t}\n\t\t\telse if ( ! sel ) {\n\t\t\t\t// Selector - none\n\t\t\t\treturn rows;\n\t\t\t}\n\n\t\t\t// Get nodes in the order from the `rows` array (can't use `pluck`) @todo - use pluck_order\n\t\t\tvar nodes = [];\n\t\t\tfor ( var i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\tnodes.push( settings.aoData[ rows[i] ].nTr );\n\t\t\t}\n\n\t\t\tif ( sel.nodeName ) {\n\t\t\t\t// Selector - node\n\t\t\t\tif ( $.inArray( sel, nodes ) !== -1 ) {\n\t\t\t\t\treturn [ sel._DT_RowIndex ];// sel is a TR node that is in the table\n\t\t\t\t\t\t\t\t\t\t\t// and DataTables adds a prop for fast lookup\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Selector - jQuery selector string, array of nodes or jQuery object/\n\t\t\t// As jQuery's .filter() allows jQuery objects to be passed in filter,\n\t\t\t// it also allows arrays, so this will cope with all three options\n\t\t\treturn $(nodes)\n\t\t\t\t.filter( sel )\n\t\t\t\t.map( function () {\n\t\t\t\t\treturn this._DT_RowIndex;\n\t\t\t\t} )\n\t\t\t\t.toArray();\n\t\t} );\n\t};\n\n\n\t/**\n\t *\n\t */\n\t_api_register( 'rows()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\n\t\topts = _selector_opts( opts );\n\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __row_selector( settings, selector, opts );\n\t\t} );\n\n\t\t// Want argument shifting here and in __row_selector?\n\t\tinst.selector.rows = selector;\n\t\tinst.selector.opts = opts;\n\n\t\treturn inst;\n\t} );\n\n\n\t_api_registerPlural( 'rows().nodes()', 'row().node()' , function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t// use pluck order on an array rather - rows gives an array, row gives it individually\n\t\t\treturn settings.aoData[ row ].nTr || undefined;\n\t\t} );\n\t} );\n\n\n\t_api_register( 'rows().data()', function () {\n\t\treturn this.iterator( true, 'rows', function ( settings, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, '_aData' );\n\t\t} );\n\t} );\n\n\t_api_registerPlural( 'rows().cache()', 'row().cache()', function ( type ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\tvar r = settings.aoData[ row ];\n\t\t\treturn type === 'search' ? r._aFilterData : r._aSortData;\n\t\t} );\n\t} );\n\n\t_api_registerPlural( 'rows().invalidate()', 'row().invalidate()', function ( src ) {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\t_fnInvalidateRow( settings, row, src );\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'rows().indexes()', 'row().index()', function () {\n\t\treturn this.iterator( 'row', function ( settings, row ) {\n\t\t\treturn row;\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'rows().remove()', 'row().remove()', function () {\n\t\tvar that = this;\n\n\t\treturn this.iterator( 'row', function ( settings, row, thatIdx ) {\n\t\t\tvar data = settings.aoData;\n\n\t\t\tdata.splice( row, 1 );\n\n\t\t\t// Update the _DT_RowIndex parameter on all rows in the table\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\tif ( data[i].nTr !== null ) {\n\t\t\t\t\tdata[i].nTr._DT_RowIndex = i;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Remove the target row from the search array\n\t\t\tvar displayIndex = $.inArray( row, settings.aiDisplay );\n\n\t\t\t// Delete from the display arrays\n\t\t\t_fnDeleteIndex( settings.aiDisplayMaster, row );\n\t\t\t_fnDeleteIndex( settings.aiDisplay, row );\n\t\t\t_fnDeleteIndex( that[ thatIdx ], row, false ); // maintain local indexes\n\n\t\t\t// Check for an 'overflow' they case for displaying the table\n\t\t\t_fnLengthOverflow( settings );\n\t\t} );\n\t} );\n\n\n\t_api_register( 'rows.add()', function ( rows ) {\n\t\tvar newRows = this.iterator( 'table', function ( settings ) {\n\t\t\t\tvar row, i, ien;\n\t\t\t\tvar out = [];\n\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\n\t\t\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\t\t\tout.push( _fnAddTr( settings, row )[0] );\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tout.push( _fnAddData( settings, row ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn out;\n\t\t\t} );\n\n\t\t// Return an Api.rows() extended instance, so rows().nodes() etc can be used\n\t\tvar modRows = this.rows( -1 );\n\t\tmodRows.pop();\n\t\tmodRows.push.apply( modRows, newRows );\n\n\t\treturn modRows;\n\t} );\n\n\n\n\n\n\t/**\n\t *\n\t */\n\t_api_register( 'row()', function ( selector, opts ) {\n\t\treturn _selector_first( this.rows( selector, opts ) );\n\t} );\n\n\n\t_api_register( 'row().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._aData :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Set\n\t\tctx[0].aoData[ this[0] ]._aData = data;\n\n\t\t// Automatically invalidate\n\t\t_fnInvalidateRow( ctx[0], this[0], 'data' );\n\n\t\treturn this;\n\t} );\n\n\n\t_api_register( 'row.add()', function ( row ) {\n\t\t// Allow a jQuery object to be passed in - only a single row is added from\n\t\t// it though - the first element in the set\n\t\tif ( row instanceof $ && row.length ) {\n\t\t\trow = row[0];\n\t\t}\n\n\t\tvar rows = this.iterator( 'table', function ( settings ) {\n\t\t\tif ( row.nodeName && row.nodeName.toUpperCase() === 'TR' ) {\n\t\t\t\treturn _fnAddTr( settings, row )[0];\n\t\t\t}\n\t\t\treturn _fnAddData( settings, row );\n\t\t} );\n\n\t\t// Return an Api.rows() extended instance, with the newly added row selected\n\t\treturn this.row( rows[0] );\n\t} );\n\n\n\n\tvar __details_add = function ( ctx, row, data, klass )\n\t{\n\t\t// Convert to array of TR elements\n\t\tvar rows = [];\n\t\tvar addRow = function ( r, k ) {\n\t\t\tif ( ! r.nodeName || r.nodeName.toUpperCase() !== 'tr' ) {\n\t\t\t\tr = $('<tr><td></td></tr>').find('td').html( r ).parent();\n\t\t\t}\n\n\t\t\t$('td', r).addClass( k )[0].colSpan = _fnVisbleColumns( ctx );\n\t\t\trows.push( r[0] );\n\t\t};\n\n\t\tif ( $.isArray( data ) || data instanceof $ ) {\n\t\t\tfor ( var i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\taddRow( data[i], klass );\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\taddRow( data, klass );\n\t\t}\n\n\t\tif ( row._details ) {\n\t\t\trow._details.remove();\n\t\t}\n\n\t\trow._details = $(rows);\n\n\t\t// If the children were already shown, that state should be retained\n\t\tif ( row._detailsShow ) {\n\t\t\trow._details.insertAfter( row.nTr );\n\t\t}\n\t};\n\n\n\tvar __details_display = function ( show ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( ctx.length && this.length ) {\n\t\t\tvar row = ctx[0].aoData[ this[0] ];\n\n\t\t\tif ( row._details ) {\n\t\t\t\trow._detailsShow = show;\n\t\t\t\tif ( show ) {\n\t\t\t\t\trow._details.insertAfter( row.nTr );\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\trow._details.remove();\n\t\t\t\t}\n\n\t\t\t\t__details_events( ctx[0] );\n\t\t\t}\n\t\t}\n\n\t\treturn this;\n\t};\n\n\n\tvar __details_events = function ( settings )\n\t{\n\t\tvar table = $(settings.nTable);\n\n\t\ttable.off('draw.DT_details');\n\t\ttable.off('column-visibility.DT_details');\n\n\t\tif ( _pluck( settings.aoData, '_details' ).length > 0 ) {\n\t\t\t// On each draw, insert the required elements into the document\n\t\t\ttable.on('draw.DT_details', function () {\n\t\t\t\ttable.find('tbody tr').each( function () {\n\t\t\t\t\t// Look up the row index for each row and append open row\n\t\t\t\t\tvar rowIdx = _fnNodeToDataIndex( settings, this );\n\t\t\t\t\tvar row = settings.aoData[ rowIdx ];\n\n\t\t\t\t\tif ( row._detailsShow ) {\n\t\t\t\t\t\trow._details.insertAfter( this );\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t} );\n\n\t\t\t// Column visibility change - update the colspan\n\t\t\ttable.on( 'column-visibility.DT_details', function ( e, settings, idx, vis ) {\n\t\t\t\t// Update the colspan for the details rows (note, only if it already has\n\t\t\t\t// a colspan)\n\t\t\t\tvar row, visible = _fnVisbleColumns( settings );\n\n\t\t\t\tfor ( var i=0, ien=settings.aoData.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = settings.aoData[i];\n\n\t\t\t\t\tif ( row._details ) {\n\t\t\t\t\t\trow._details.children('td[colspan]').attr('colspan', visible );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t\t}\n\t};\n\n\t// data can be:\n\t//  tr\n\t//  string\n\t//  jQuery or array of any of the above\n\t_api_register( 'row().child()', function ( data, klass ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( data === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length && this.length ?\n\t\t\t\tctx[0].aoData[ this[0] ]._details :\n\t\t\t\tundefined;\n\t\t}\n\t\telse if ( ctx.length && this.length ) {\n\t\t\t// set\n\t\t\t__details_add( ctx[0], ctx[0].aoData[ this[0] ], data, klass );\n\t\t}\n\n\t\treturn this;\n\t} );\n\n\t_api_register( [\n\t\t'row().child.show()',\n\t\t'row().child().show()'\n\t], function () {\n\t\t__details_display.call( this, true );\n\t} );\n\n\t_api_register( [\n\t\t'row().child.hide()',\n\t\t'row().child().hide()'\n\t], function () {\n\t\t__details_display.call( this, false );\n\t} );\n\n\t_api_register( 'row().child.isShown()', function () {\n\t\tvar ctx = this.context;\n\n\t\tif ( ctx.length && this.length ) {\n\t\t\t// _detailsShown as false or undefined will fall through to return false\n\t\t\treturn ctx[0].aoData[ this[0] ]._detailsShow || false;\n\t\t}\n\t\treturn false;\n\t} );\n\n\n\n\t/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n\t * Columns\n\t *\n\t * {integer}           - column index (>=0 count from left, <0 count from right)\n\t * \"{integer}:visIdx\"  - visible column index (i.e. translate to column index)  (>=0 count from left, <0 count from right)\n\t * \"{integer}:visible\" - alias for {integer}:visIdx  (>=0 count from left, <0 count from right)\n\t * \"{string}:name\"     - column name\n\t * \"{string}\"          - jQuery selector on column header nodes\n\t *\n\t */\n\n\t// can be an array of these items, comma separated list, or an array of comma\n\t// separated lists\n\n\tvar __re_column_selector = /^(.*):(name|visIdx|visible)$/;\n\n\tvar __column_selector = function ( settings, selector, opts )\n\t{\n\t\tvar\n\t\t\tcolumns = settings.aoColumns,\n\t\t\tnames = _pluck( columns, 'sName' ),\n\t\t\tnodes = _pluck( columns, 'nTh' );\n\n\t\treturn _selector_run( selector, function ( s ) {\n\t\t\tvar selInt = _intVal( s );\n\n\t\t\tif ( s === '' ) {\n\t\t\t\t// All columns\n\t\t\t\treturn _range( settings.aoColumns.length );\n\t\t\t}\n\t\t\telse if ( selInt !== null ) {\n\t\t\t\t// Integer selector\n\t\t\t\treturn [ selInt >= 0 ?\n\t\t\t\t\tselInt : // Count from left\n\t\t\t\t\tcolumns.length + selInt // Count from right (+ because its a negative value)\n\t\t\t\t];\n\t\t\t}\n\t\t\telse {\n\t\t\t\tvar match = s.match( __re_column_selector );\n\n\t\t\t\tif ( match ) {\n\t\t\t\t\tswitch( match[2] ) {\n\t\t\t\t\t\tcase 'visIdx':\n\t\t\t\t\t\tcase 'visible':\n\t\t\t\t\t\t\tvar idx = parseInt( match[1], 10 );\n\t\t\t\t\t\t\t// Visible index given, convert to column index\n\t\t\t\t\t\t\tif ( idx < 0 ) {\n\t\t\t\t\t\t\t\t// Counting from the right\n\t\t\t\t\t\t\t\tvar visColumns = $.map( columns, function (col,i) {\n\t\t\t\t\t\t\t\t\treturn col.bVisible ? i : null;\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\treturn [ visColumns[ visColumns.length + idx ] ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t// Counting from the left\n\t\t\t\t\t\t\treturn [ _fnVisibleToColumnIndex( settings, idx ) ];\n\n\t\t\t\t\t\tcase 'name':\n\t\t\t\t\t\t\t// match by name. `names` is column index complete and in order\n\t\t\t\t\t\t\treturn $.map( names, function (name, i) {\n\t\t\t\t\t\t\t\treturn name === match[1] ? i : null;\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// jQuery selector on the TH elements for the columns\n\t\t\t\t\treturn $( nodes )\n\t\t\t\t\t\t.filter( s )\n\t\t\t\t\t\t.map( function () {\n\t\t\t\t\t\t\treturn $.inArray( this, nodes ); // `nodes` is column index complete and in order\n\t\t\t\t\t\t} )\n\t\t\t\t\t\t.toArray();\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t};\n\n\n\n\n\n\tvar __setColumnVis = function ( settings, column, vis ) {\n\t\tvar\n\t\t\tcols = settings.aoColumns,\n\t\t\tcol  = cols[ column ],\n\t\t\tdata = settings.aoData,\n\t\t\trow, cells, i, ien, tr;\n\n\t\t// Get\n\t\tif ( vis === undefined ) {\n\t\t\treturn col.bVisible;\n\t\t}\n\n\t\t// Set\n\t\t// No change\n\t\tif ( col.bVisible === vis ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( vis ) {\n\t\t\t// Insert column\n\t\t\t// Need to decide if we should use appendChild or insertBefore\n\t\t\tvar insertBefore = $.inArray( true, _pluck(cols, 'bVisible'), column+1 );\n\n\t\t\tfor ( i=0, ien=data.length ; i<ien ; i++ ) {\n\t\t\t\ttr = data[i].nTr;\n\t\t\t\tcells = data[i].anCells;\n\n\t\t\t\tif ( tr ) {\n\t\t\t\t\t// insertBefore can act like appendChild if 2nd arg is null\n\t\t\t\t\ttr.insertBefore( cells[ column ], cells[ insertBefore ] || null );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\telse {\n\t\t\t// Remove column\n\t\t\t$( _pluck( settings.aoData, 'anCells', column ) ).remove();\n\n\t\t\tcol.bVisible = false;\n\t\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t\t_fnDrawHead( settings, settings.aoFooter );\n\n\t\t\t_fnSaveState( settings );\n\t\t}\n\n\t\t// Common actions\n\t\tcol.bVisible = vis;\n\t\t_fnDrawHead( settings, settings.aoHeader );\n\t\t_fnDrawHead( settings, settings.aoFooter );\n\n\t\t// Automatically adjust column sizing\n\t\t_fnAdjustColumnSizing( settings );\n\n\t\t// Realign columns for scrolling\n\t\tif ( settings.oScroll.sX || settings.oScroll.sY ) {\n\t\t\t_fnScrollDraw( settings );\n\t\t}\n\n\t\t_fnCallbackFire( settings, null, 'column-visibility', [settings, column, vis] );\n\n\t\t_fnSaveState( settings );\n\t};\n\n\n\t/**\n\t *\n\t */\n\t_api_register( 'columns()', function ( selector, opts ) {\n\t\t// argument shifting\n\t\tif ( selector === undefined ) {\n\t\t\tselector = '';\n\t\t}\n\t\telse if ( $.isPlainObject( selector ) ) {\n\t\t\topts = selector;\n\t\t\tselector = '';\n\t\t}\n\n\t\topts = _selector_opts( opts );\n\n\t\tvar inst = this.iterator( 'table', function ( settings ) {\n\t\t\treturn __column_selector( settings, selector, opts );\n\t\t} );\n\n\t\t// Want argument shifting here and in _row_selector?\n\t\tinst.selector.cols = selector;\n\t\tinst.selector.opts = opts;\n\n\t\treturn inst;\n\t} );\n\n\n\t/**\n\t *\n\t */\n\t_api_registerPlural( 'columns().header()', 'column().header()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTh;\n\t\t} );\n\t} );\n\n\n\t/**\n\t *\n\t */\n\t_api_registerPlural( 'columns().footer()', 'column().footer()', function ( selector, opts ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn settings.aoColumns[column].nTf;\n\t\t} );\n\t} );\n\n\n\t/**\n\t *\n\t */\n\t_api_registerPlural( 'columns().data()', 'column().data()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\tvar a = [];\n\t\t\tfor ( var row=0, ien=rows.length ; row<ien ; row++ ) {\n\t\t\t\ta.push( _fnGetCellData( settings, rows[row], column, '' ) );\n\t\t\t}\n\t\t\treturn a;\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'columns().cache()', 'column().cache()', function ( type ) {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows,\n\t\t\t\ttype === 'search' ? '_aFilterData' : '_aSortData', column\n\t\t\t);\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'columns().nodes()', 'column().nodes()', function () {\n\t\treturn this.iterator( 'column-rows', function ( settings, column, i, j, rows ) {\n\t\t\treturn _pluck_order( settings.aoData, rows, 'anCells', column ) ;\n\t\t} );\n\t} );\n\n\n\n\t_api_registerPlural( 'columns().visible()', 'column().visible()', function ( vis ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn __setColumnVis( settings, column, vis );\n\t\t} );\n\t} );\n\n\n\n\t_api_registerPlural( 'columns().indexes()', 'column().index()', function ( type ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\treturn type === 'visible' ?\n\t\t\t\t_fnColumnIndexToVisible( settings, column ) :\n\t\t\t\tcolumn;\n\t\t} );\n\t} );\n\n\n\t// _api_register( 'columns().show()', function () {\n\t// \tvar selector = this.selector;\n\t// \treturn this.columns( selector.cols, selector.opts ).visible( true );\n\t// } );\n\n\n\t// _api_register( 'columns().hide()', function () {\n\t// \tvar selector = this.selector;\n\t// \treturn this.columns( selector.cols, selector.opts ).visible( false );\n\t// } );\n\n\n\n\t_api_register( 'columns.adjust()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnAdjustColumnSizing( settings );\n\t\t} );\n\t} );\n\n\n\t// Convert from one column index type, to another type\n\t_api_register( 'column.index()', function ( type, idx ) {\n\t\tif ( this.context.length !== 0 ) {\n\t\t\tvar ctx = this.context[0];\n\n\t\t\tif ( type === 'fromVisible' || type === 'toData' ) {\n\t\t\t\treturn _fnColumnIndexToVisible( ctx, idx );\n\t\t\t}\n\t\t\telse if ( type === 'fromData' || type === 'toVisible' ) {\n\t\t\t\treturn _fnVisibleToColumnIndex( ctx, idx );\n\t\t\t}\n\t\t}\n\t} );\n\n\n\t_api_register( 'column()', function ( selector, opts ) {\n\t\treturn _selector_first( this.columns( selector, opts ) );\n\t} );\n\n\n\n\n\tvar __cell_selector = function ( settings, selector, opts )\n\t{\n\t\tvar data = settings.aoData;\n\t\tvar rows = _selector_row_indexes( settings, opts );\n\t\tvar cells = _pluck_order( data, rows, 'anCells' );\n\t\tvar allCells = $( [].concat.apply([], cells) );\n\t\tvar row;\n\t\tvar columns = settings.aoColumns.length;\n\t\tvar a, i, ien, j;\n\n\t\treturn _selector_run( selector, function ( s ) {\n\t\t\tif ( ! s ) {\n\t\t\t\t// All cells\n\t\t\t\ta = [];\n\n\t\t\t\tfor ( i=0, ien=rows.length ; i<ien ; i++ ) {\n\t\t\t\t\trow = rows[i];\n\n\t\t\t\t\tfor ( j=0 ; j<columns ; j++ ) {\n\t\t\t\t\t\ta.push( {\n\t\t\t\t\t\t\trow: row,\n\t\t\t\t\t\t\tcolumn: j\n\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\treturn a;\n\t\t\t}\n\n\t\t\t// jQuery filtered cells\n\t\t\treturn allCells.filter( s ).map( function (i, el) {\n\t\t\t\trow = el.parentNode._DT_RowIndex;\n\n\t\t\t\treturn {\n\t\t\t\t\trow: row,\n\t\t\t\t\tcolumn: $.inArray( el, data[ row ].anCells )\n\t\t\t\t};\n\t\t\t} );\n\t\t} );\n\t};\n\n\n\n\n\t_api_register( 'cells()', function ( rowSelector, columnSelector, opts ) {\n\t\t// Argument shifting\n\t\tif ( $.isPlainObject( rowSelector ) ) {\n\t\t\topts = rowSelector;\n\t\t\trowSelector = null;\n\t\t}\n\t\tif ( $.isPlainObject( columnSelector ) ) {\n\t\t\topts = columnSelector;\n\t\t\tcolumnSelector = null;\n\t\t}\n\n\t\t// Cell selector\n\t\tif ( columnSelector === null || columnSelector === undefined ) {\n\t\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t\treturn __cell_selector( settings, rowSelector, _selector_opts( opts ) );\n\t\t\t} );\n\t\t}\n\n\t\t// Row + column selector\n\t\tvar columns = this.columns( columnSelector, opts );\n\t\tvar rows = this.rows( rowSelector, opts );\n\t\tvar a, i, ien, j, jen;\n\n\t\tvar cells = this.iterator( 'table', function ( settings, idx ) {\n\t\t\ta = [];\n\n\t\t\tfor ( i=0, ien=rows[idx].length ; i<ien ; i++ ) {\n\t\t\t\tfor ( j=0, jen=columns[idx].length ; j<jen ; j++ ) {\n\t\t\t\t\ta.push( {\n\t\t\t\t\t\trow:    rows[idx][i],\n\t\t\t\t\t\tcolumn: columns[idx][j]\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn a;\n\t\t} );\n\n\t\t$.extend( cells.selector, {\n\t\t\tcols: columnSelector,\n\t\t\trows: rowSelector,\n\t\t\topts: opts\n\t\t} );\n\n\t\treturn cells;\n\t} );\n\n\n\t_api_registerPlural( 'cells().nodes()', 'cell().node()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ].anCells[ column ];\n\t\t} );\n\t} );\n\n\n\t_api_register( 'cells().data()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn _fnGetCellData( settings, row, column );\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'cells().cache()', 'cell().cache()', function ( type ) {\n\t\ttype = type === 'search' ? '_aFilterData' : '_aSortData';\n\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn settings.aoData[ row ][ type ][ column ];\n\t\t} );\n\t} );\n\n\n\t_api_registerPlural( 'cells().indexes()', 'cell().index()', function () {\n\t\treturn this.iterator( 'cell', function ( settings, row, column ) {\n\t\t\treturn {\n\t\t\t\trow: row,\n\t\t\t\tcolumn: column,\n\t\t\t\tcolumnVisible: _fnColumnIndexToVisible( settings, column )\n\t\t\t};\n\t\t} );\n\t} );\n\n\n\t_api_register( [\n\t\t'cells().invalidate()',\n\t\t'cell().invalidate()'\n\t], function ( src ) {\n\t\tvar selector = this.selector;\n\n\t\t// Use the rows method of the instance to perform the invalidation, rather\n\t\t// than doing it here. This avoids needing to handle duplicate rows from\n\t\t// the cells.\n\t\tthis.rows( selector.rows, selector.opts ).invalidate( src );\n\n\t\treturn this;\n\t} );\n\n\n\n\n\t_api_register( 'cell()', function ( rowSelector, columnSelector, opts ) {\n\t\treturn _selector_first( this.cells( rowSelector, columnSelector, opts ) );\n\t} );\n\n\n\n\t_api_register( 'cell().data()', function ( data ) {\n\t\tvar ctx = this.context;\n\t\tvar cell = this[0];\n\n\t\tif ( data === undefined ) {\n\t\t\t// Get\n\t\t\treturn ctx.length && cell.length ?\n\t\t\t\t_fnGetCellData( ctx[0], cell[0].row, cell[0].column ) :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// Set\n\t\t_fnSetCellData( ctx[0], cell[0].row, cell[0].column, data );\n\t\t_fnInvalidateRow( ctx[0], cell[0].row, 'data', cell[0].column );\n\n\t\treturn this;\n\t} );\n\n\n\n\t/**\n\t * Get current ordering (sorting) that has been applied to the table.\n\t *\n\t * @returns {array} 2D array containing the sorting information for the first\n\t *   table in the current context. Each element in the parent array represents\n\t *   a column being sorted upon (i.e. multi-sorting with two columns would have\n\t *   2 inner arrays). The inner arrays may have 2 or 3 elements. The first is\n\t *   the column index that the sorting condition applies to, the second is the\n\t *   direction of the sort (`desc` or `asc`) and, optionally, the third is the\n\t *   index of the sorting order from the `column.sorting` initialisation array.\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {integer} order Column index to sort upon.\n\t * @param {string} direction Direction of the sort to be applied (`asc` or `desc`)\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 1D array of sorting information to be applied.\n\t * @param {array} [...] Optional additional sorting conditions\n\t * @returns {DataTables.Api} this\n\t *//**\n\t * Set the ordering for the table.\n\t *\n\t * @param {array} order 2D array of sorting information to be applied.\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order()', function ( order, dir ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( order === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].aaSorting :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// set\n\t\tif ( typeof order === 'number' ) {\n\t\t\t// Simple column / direction passed in\n\t\t\torder = [ [ order, dir ] ];\n\t\t}\n\t\telse if ( ! $.isArray( order[0] ) ) {\n\t\t\t// Arguments passed in (list of 1D arrays)\n\t\t\torder = Array.prototype.slice.call( arguments );\n\t\t}\n\t\t// otherwise a 2D array was passed in\n\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tsettings.aaSorting = order.slice();\n\t\t} );\n\t} );\n\n\n\t/**\n\t * Attach a sort listener to an element for a given column\n\t *\n\t * @param {node|jQuery|string} node Identifier for the element(s) to attach the\n\t *   listener to. This can take the form of a single DOM node, a jQuery\n\t *   collection of nodes or a jQuery selector which will identify the node(s).\n\t * @param {integer} column the column that a click on this node will sort on\n\t * @param {function} [callback] callback function when sort is run\n\t * @returns {DataTables.Api} this\n\t */\n\t_api_register( 'order.listener()', function ( node, column, callback ) {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnSortAttachListener( settings, node, column, callback );\n\t\t} );\n\t} );\n\n\n\t// Order by the selected column(s)\n\t_api_register( [\n\t\t'columns().order()',\n\t\t'column().order()'\n\t], function ( dir ) {\n\t\tvar that = this;\n\n\t\treturn this.iterator( 'table', function ( settings, i ) {\n\t\t\tvar sort = [];\n\n\t\t\t$.each( that[i], function (j, col) {\n\t\t\t\tsort.push( [ col, dir ] );\n\t\t\t} );\n\n\t\t\tsettings.aaSorting = sort;\n\t\t} );\n\t} );\n\n\n\n\t_api_register( 'search()', function ( input, regex, smart, caseInsen ) {\n\t\tvar ctx = this.context;\n\n\t\tif ( input === undefined ) {\n\t\t\t// get\n\t\t\treturn ctx.length !== 0 ?\n\t\t\t\tctx[0].oPreviousSearch.sSearch :\n\t\t\t\tundefined;\n\t\t}\n\n\t\t// set\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t_fnFilterComplete( settings, $.extend( {}, settings.oPreviousSearch, {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} ), 1 );\n\t\t} );\n\t} );\n\n\n\t_api_register( [\n\t\t'columns().search()',\n\t\t'column().search()'\n\t], function ( input, regex, smart, caseInsen ) {\n\t\treturn this.iterator( 'column', function ( settings, column ) {\n\t\t\tvar preSearch = settings.aoPreSearchCols;\n\n\t\t\tif ( input === undefined ) {\n\t\t\t\t// get\n\t\t\t\treturn preSearch[ column ].sSearch;\n\t\t\t}\n\n\t\t\t// set\n\t\t\tif ( ! settings.oFeatures.bFilter ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$.extend( preSearch[ column ], {\n\t\t\t\t\"sSearch\": input+\"\",\n\t\t\t\t\"bRegex\":  regex === null ? false : regex,\n\t\t\t\t\"bSmart\":  smart === null ? true  : smart,\n\t\t\t\t\"bCaseInsensitive\": caseInsen === null ? true : caseInsen\n\t\t\t} );\n\n\t\t\t_fnFilterComplete( settings, settings.oPreviousSearch, 1 );\n\t\t} );\n\t} );\n\n\n\n\t/**\n\t * Provide a common method for plug-ins to check the version of DataTables being\n\t * used, in order to ensure compatibility.\n\t *\n\t *  @param {string} version Version string to check for, in the format \"X.Y.Z\".\n\t *    Note that the formats \"X\" and \"X.Y\" are also acceptable.\n\t *  @returns {boolean} true if this version of DataTables is greater or equal to\n\t *    the required version, or false if this version of DataTales is not\n\t *    suitable\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    alert( $.fn.dataTable.versionCheck( '1.9.0' ) );\n\t */\n\tDataTable.versionCheck = DataTable.fnVersionCheck = function( version )\n\t{\n\t\tvar aThis = DataTable.version.split('.');\n\t\tvar aThat = version.split('.');\n\t\tvar iThis, iThat;\n\n\t\tfor ( var i=0, iLen=aThat.length ; i<iLen ; i++ ) {\n\t\t\tiThis = parseInt( aThis[i], 10 ) || 0;\n\t\t\tiThat = parseInt( aThat[i], 10 ) || 0;\n\n\t\t\t// Parts are the same, keep comparing\n\t\t\tif (iThis === iThat) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\t// Parts are different, return immediately\n\t\t\treturn iThis > iThat;\n\t\t}\n\n\t\treturn true;\n\t};\n\n\n\t/**\n\t * Check if a `<table>` node is a DataTable table already or not.\n\t *\n\t *  @param {node|jquery|string} table Table node, jQuery object or jQuery\n\t *      selector for the table to test. Note that if more than more than one\n\t *      table is passed on, only the first will be checked\n\t *  @returns {boolean} true the table given is a DataTable, or false otherwise\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    if ( ! $.fn.DataTable.isDataTable( '#example' ) ) {\n\t *      $('#example').dataTable();\n\t *    }\n\t */\n\tDataTable.isDataTable = DataTable.fnIsDataTable = function ( table )\n\t{\n\t\tvar t = $(table).get(0);\n\t\tvar is = false;\n\n\t\t$.each( DataTable.settings, function (i, o) {\n\t\t\tif ( o.nTable === t || o.nScrollHead === t || o.nScrollFoot === t ) {\n\t\t\t\tis = true;\n\t\t\t}\n\t\t} );\n\n\t\treturn is;\n\t};\n\n\n\t/**\n\t * Get all DataTable tables that have been initialised - optionally you can\n\t * select to get only currently visible tables.\n\t *\n\t *  @param {boolean} [visible=false] Flag to indicate if you want all (default)\n\t *    or visible tables only.\n\t *  @returns {array} Array of `table` nodes (not DataTable instances) which are\n\t *    DataTables\n\t *  @static\n\t *  @dtopt API-Static\n\t *\n\t *  @example\n\t *    $.each( $.fn.dataTable.tables(true), function () {\n\t *      $(table).DataTable().columns.adjust();\n\t *    } );\n\t */\n\tDataTable.tables = DataTable.fnTables = function ( visible )\n\t{\n\t\treturn jQuery.map( DataTable.settings, function (o) {\n\t\t\tif ( !visible || (visible && $(o.nTable).is(':visible')) ) {\n\t\t\t\treturn o.nTable;\n\t\t\t}\n\t\t} );\n\t};\n\n\n\n\t/**\n\t *\n\t */\n\t_api_register( '$()', function ( selector, opts ) {\n\t\tvar\n\t\t\trows   = this.rows( opts ).nodes(), // Get all rows\n\t\t\tjqRows = $(rows);\n\n\t\treturn $( [].concat(\n\t\t\tjqRows.filter( selector ).toArray(),\n\t\t\tjqRows.find( selector ).toArray()\n\t\t) );\n\t} );\n\n\n\t// jQuery functions to operate on the tables\n\t$.each( [ 'on', 'one', 'off' ], function (i, key) {\n\t\t_api_register( key+'()', function ( /* event, handler */ ) {\n\t\t\tvar args = Array.prototype.slice.call(arguments);\n\n\t\t\t// Add the `dt` namespace automatically if it isn't already present\n\t\t\tif ( args[0].indexOf( '.dt' ) === -1 ) {\n\t\t\t\targs[0] += '.dt';\n\t\t\t}\n\n\t\t\tvar inst = $( this.tables().nodes() );\n\t\t\tinst[key].apply( inst, args );\n\t\t\treturn this;\n\t\t} );\n\t} );\n\n\n\t_api_register( 'clear()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\t_fnClearTable( settings );\n\t\t} );\n\t} );\n\n\n\t_api_register( 'settings()', function () {\n\t\treturn new _Api( this.context, this.context );\n\t} );\n\n\n\t_api_register( 'data()', function () {\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\treturn _pluck( settings.aoData, '_aData' );\n\t\t} ).flatten();\n\t} );\n\n\n\t_api_register( 'destroy()', function ( remove ) {\n\t\tremove = remove || false;\n\n\t\treturn this.iterator( 'table', function ( settings ) {\n\t\t\tvar orig      = settings.nTableWrapper.parentNode;\n\t\t\tvar classes   = settings.oClasses;\n\t\t\tvar table     = settings.nTable;\n\t\t\tvar tbody     = settings.nTBody;\n\t\t\tvar thead     = settings.nTHead;\n\t\t\tvar tfoot     = settings.nTFoot;\n\t\t\tvar jqTable   = $(table);\n\t\t\tvar jqTbody   = $(tbody);\n\t\t\tvar jqWrapper = $(settings.nTableWrapper);\n\t\t\tvar rows      = $.map( settings.aoData, function (r) { return r.nTr; } );\n\t\t\tvar i, ien;\n\n\t\t\t// Flag to note that the table is currently being destroyed - no action\n\t\t\t// should be taken\n\t\t\tsettings.bDestroying = true;\n\n\t\t\t// Fire off the destroy callbacks for plug-ins etc\n\t\t\t_fnCallbackFire( settings, \"aoDestroyCallback\", \"destroy\", [settings] );\n\n\t\t\t// If not being removed from the document, make all columns visible\n\t\t\tif ( ! remove ) {\n\t\t\t\tnew _Api( settings ).columns().visible( true );\n\t\t\t}\n\n\t\t\t// Blitz all DT events\n\t\t\tjqWrapper.unbind('.DT').find(':not(tbody *)').unbind('.DT');\n\t\t\t$(window).unbind('.DT-'+settings.sInstance);\n\n\t\t\t// When scrolling we had to break the table up - restore it\n\t\t\tif ( table != thead.parentNode ) {\n\t\t\t\tjqTable.children('thead').remove();\n\t\t\t\tjqTable.append( thead );\n\t\t\t}\n\n\t\t\tif ( tfoot && table != tfoot.parentNode ) {\n\t\t\t\tjqTable.children('tfoot').remove();\n\t\t\t\tjqTable.append( tfoot );\n\t\t\t}\n\n\t\t\t// Remove the DataTables generated nodes, events and classes\n\t\t\tjqTable.remove();\n\t\t\tjqWrapper.remove();\n\n\t\t\tsettings.aaSorting = [];\n\t\t\tsettings.aaSortingFixed = [];\n\t\t\t_fnSortingClasses( settings );\n\n\t\t\t$( rows ).removeClass( settings.asStripeClasses.join(' ') );\n\n\t\t\t$('th, td', thead).removeClass( classes.sSortable+' '+\n\t\t\t\tclasses.sSortableAsc+' '+classes.sSortableDesc+' '+classes.sSortableNone\n\t\t\t);\n\n\t\t\tif ( settings.bJUI ) {\n\t\t\t\t$('th span.'+classes.sSortIcon+ ', td span.'+classes.sSortIcon, thead).remove();\n\t\t\t\t$('th, td', thead).each( function () {\n\t\t\t\t\tvar wrapper = $('div.'+classes.sSortJUIWrapper, this);\n\t\t\t\t\t$(this).append( wrapper.contents() );\n\t\t\t\t\twrapper.remove();\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\tif ( ! remove ) {\n\t\t\t\t// insertBefore acts like appendChild if !arg[1]\n\t\t\t\torig.insertBefore( table, settings.nTableReinsertBefore );\n\t\t\t}\n\n\t\t\t// Add the TR elements back into the table in their original order\n\t\t\tjqTbody.children().detach();\n\t\t\tjqTbody.append( rows );\n\n\t\t\t// Restore the width of the original table - was read from the style property,\n\t\t\t// so we can restore directly to that\n\t\t\tjqTable\n\t\t\t\t.css( 'width', settings.sDestroyWidth )\n\t\t\t\t.removeClass( classes.sTable );\n\n\t\t\t// If the were originally stripe classes - then we add them back here.\n\t\t\t// Note this is not fool proof (for example if not all rows had stripe\n\t\t\t// classes - but it's a good effort without getting carried away\n\t\t\tien = settings.asDestroyStripes.length;\n\n\t\t\tif ( ien ) {\n\t\t\t\tjqTbody.children().each( function (i) {\n\t\t\t\t\t$(this).addClass( settings.asDestroyStripes[i % ien] );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t\t/* Remove the settings object from the settings array */\n\t\t\tvar idx = $.inArray( settings, DataTable.settings );\n\t\t\tif ( idx !== -1 ) {\n\t\t\t\tDataTable.settings.splice( idx, 1 );\n\t\t\t}\n\t\t} );\n\t} );\n\n\n\t/**\n\t * Version string for plug-ins to check compatibility. Allowed format is\n\t * `a.b.c-d` where: a:int, b:int, c:int, d:string(dev|beta|alpha). `d` is used\n\t * only for non-release builds. See http://semver.org/ for more information.\n\t *  @member\n\t *  @type string\n\t *  @default Version number\n\t */\n\tDataTable.version = \"1.10.0-dev\";\n\n\t/**\n\t * Private data store, containing all of the settings objects that are\n\t * created for the tables on a given page.\n\t *\n\t * Note that the `DataTable.settings` object is aliased to\n\t * `jQuery.fn.dataTableExt` through which it may be accessed and\n\t * manipulated, or `jQuery.fn.dataTable.settings`.\n\t *  @member\n\t *  @type array\n\t *  @default []\n\t *  @private\n\t */\n\tDataTable.settings = [];\n\n\t/**\n\t * Object models container, for the various models that DataTables has\n\t * available to it. These models define the objects that are used to hold\n\t * the active state and configuration of the table.\n\t *  @namespace\n\t */\n\tDataTable.models = {};\n\n\n\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * search information for the global filter and individual column filters.\n\t *  @namespace\n\t */\n\tDataTable.models.oSearch = {\n\t\t/**\n\t\t * Flag to indicate if the filtering should be case insensitive or not\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bCaseInsensitive\": true,\n\n\t\t/**\n\t\t * Applied search term\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sSearch\": \"\",\n\n\t\t/**\n\t\t * Flag to indicate if the search term should be interpreted as a\n\t\t * regular expression (true) or not (false) and therefore and special\n\t\t * regex characters escaped.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bRegex\": false,\n\n\t\t/**\n\t\t * Flag to indicate if DataTables is to use its smart filtering or not.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bSmart\": true\n\t};\n\n\n\n\n\t/**\n\t * Template object for the way in which DataTables holds information about\n\t * each individual row. This is the object format used for the settings\n\t * aoData array.\n\t *  @namespace\n\t */\n\tDataTable.models.oRow = {\n\t\t/**\n\t\t * TR element for the row\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTr\": null,\n\n\t\t/**\n\t\t * Array of TD elements for each row. This is null until the row has been\n\t\t * created.\n\t\t *  @type array nodes\n\t\t *  @default []\n\t\t */\n\t\t\"anCells\": null,\n\n\t\t/**\n\t\t * Data object from the original data source for the row. This is either\n\t\t * an array if using the traditional form of DataTables, or an object if\n\t\t * using mData options. The exact type will depend on the passed in\n\t\t * data from the data source, or will be an array if using DOM a data\n\t\t * source.\n\t\t *  @type array|object\n\t\t *  @default []\n\t\t */\n\t\t\"_aData\": [],\n\n\t\t/**\n\t\t * Sorting data cache - this array is ostensibly the same length as the\n\t\t * number of columns (although each index is generated only as it is\n\t\t * needed), and holds the data that is used for sorting each column in the\n\t\t * row. We do this cache generation at the start of the sort in order that\n\t\t * the formatting of the sort data need be done only once for each cell\n\t\t * per sort. This array should not be read from or written to by anything\n\t\t * other than the master sorting methods.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aSortData\": null,\n\n\t\t/**\n\t\t * Per cell filtering data cache. As per the sort data cache, used to\n\t\t * increase the performance of the filtering in DataTables\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_aFilterData\": null,\n\n\t\t/**\n\t\t * Filtering data cache. This is the same as the cell filtering cache, but\n\t\t * in this case a string rather than an array. This is easily computed with\n\t\t * a join on `_aFilterData`, but is provided as a cache so the join isn't\n\t\t * needed on every search (memory traded for performance)\n\t\t *  @type array\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sFilterRow\": null,\n\n\t\t/**\n\t\t * Cache of the class name that DataTables has applied to the row, so we\n\t\t * can quickly look at this variable rather than needing to do a DOM check\n\t\t * on className for the nTr property.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *  @private\n\t\t */\n\t\t\"_sRowStripe\": \"\",\n\n\t\t/**\n\t\t * Denote if the original data source was from the DOM, or the data source\n\t\t * object. This is used for invalidating data, so DataTables can\n\t\t * automatically read data from the original source, unless uninstructed\n\t\t * otherwise.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"src\": null\n\t};\n\n\n\n\t/**\n\t * Template object for the column information object in DataTables. This object\n\t * is held in the settings aoColumns array and contains all the information that\n\t * DataTables needs about each individual column.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults.column}\n\t * but this one is the internal data store for DataTables's cache of columns.\n\t * It should NOT be manipulated outside of DataTables. Any configuration should\n\t * be done through the initialisation options.\n\t *  @namespace\n\t */\n\tDataTable.models.oColumn = {\n\t\t/**\n\t\t * A list of the columns that sorting should occur on when this column\n\t\t * is sorted. That this property is an array allows multi-column sorting\n\t\t * to be defined for a column (for example first name / last name columns\n\t\t * would benefit from this). The values are integers pointing to the\n\t\t * columns to be sorted on (typically it will be a single integer pointing\n\t\t * at itself, but that doesn't need to be the case).\n\t\t *  @type array\n\t\t */\n\t\t\"aDataSort\": null,\n\n\t\t/**\n\t\t * Define the sorting directions that are applied to the column, in sequence\n\t\t * as the column is repeatedly sorted upon - i.e. the first value is used\n\t\t * as the sorting direction when the column if first sorted (clicked on).\n\t\t * Sort it again (click again) and it will move on to the next index.\n\t\t * Repeat until loop.\n\t\t *  @type array\n\t\t */\n\t\t\"asSorting\": null,\n\n\t\t/**\n\t\t * Flag to indicate if the column is searchable, and thus should be included\n\t\t * in the filtering or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSearchable\": null,\n\n\t\t/**\n\t\t * Flag to indicate if the column is sortable or not.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortable\": null,\n\n\t\t/**\n\t\t * Flag to indicate if the column is currently visible in the table or not\n\t\t *  @type boolean\n\t\t */\n\t\t\"bVisible\": null,\n\n\t\t/**\n\t\t * Store for manual type assignment using the `column.type` option. This\n\t\t * is held in store so we can manipulate the column's `sType` property.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *  @private\n\t\t */\n\t\t\"_sManualType\": null,\n\n\t\t/**\n\t\t * Flag to indicate if HTML5 data attributes should be used as the data\n\t\t * source for filtering or sorting. True is either are.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @private\n\t\t */\n\t\t\"_bAttrSrc\": false,\n\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} nTd The TD node that has been created\n\t\t *  @param {*} sData The Data for the cell\n\t\t *  @param {array|object} oData The data for the whole row\n\t\t *  @param {int} iRow The row index for the aoData data store\n\t\t *  @default null\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\n\t\t/**\n\t\t * Function to get data from a cell in a column. You should <b>never</b>\n\t\t * access data directly through _aData internally in DataTables - always use\n\t\t * the method attached to this property. It allows mData to function as\n\t\t * required. This function is automatically assigned by the column\n\t\t * initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {string} sSpecific The specific data type you want to get -\n\t\t *    'display', 'type' 'filter' 'sort'\n\t\t *  @returns {*} The data for the cell from the given row's data\n\t\t *  @default null\n\t\t */\n\t\t\"fnGetData\": null,\n\n\t\t/**\n\t\t * Function to set data for a cell in the column. You should <b>never</b>\n\t\t * set the data directly to _aData internally in DataTables - always use\n\t\t * this method. It allows mData to function as required. This function\n\t\t * is automatically assigned by the column initialisation method\n\t\t *  @type function\n\t\t *  @param {array|object} oData The data array/object for the array\n\t\t *    (i.e. aoData[]._aData)\n\t\t *  @param {*} sValue Value to set\n\t\t *  @default null\n\t\t */\n\t\t\"fnSetData\": null,\n\n\t\t/**\n\t\t * Property to read the value for the cells in the column from the data\n\t\t * source array / object. If null, then the default content is used, if a\n\t\t * function is given then the return from the function is used.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mData\": null,\n\n\t\t/**\n\t\t * Partner property to mData which is used (only when defined) to get\n\t\t * the data - i.e. it is basically the same as mData, but without the\n\t\t * 'set' option, and also the data fed to it is the result from mData.\n\t\t * This is the rendering method to match the data method of mData.\n\t\t *  @type function|int|string|null\n\t\t *  @default null\n\t\t */\n\t\t\"mRender\": null,\n\n\t\t/**\n\t\t * Unique header TH/TD element for this column - this is what the sorting\n\t\t * listener is attached to (if sorting is enabled.)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTh\": null,\n\n\t\t/**\n\t\t * Unique footer TH/TD element for this column (if there is one). Not used\n\t\t * in DataTables as such, but can be used for plug-ins to reference the\n\t\t * footer for each column.\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTf\": null,\n\n\t\t/**\n\t\t * The class to apply to all TD elements in the table's TBODY for the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sClass\": null,\n\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t *  @type string\n\t\t */\n\t\t\"sContentPadding\": null,\n\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because mData\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDefaultContent\": null,\n\n\t\t/**\n\t\t * Name for the column, allowing reference to the column by name as well as\n\t\t * by index (needs a lookup to work by name).\n\t\t *  @type string\n\t\t */\n\t\t\"sName\": null,\n\n\t\t/**\n\t\t * Custom sorting data type - defines which of the available plug-ins in\n\t\t * afnSortData the custom sorting will use - if any is defined.\n\t\t *  @type string\n\t\t *  @default std\n\t\t */\n\t\t\"sSortDataType\": 'std',\n\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClass\": null,\n\n\t\t/**\n\t\t * Class to be applied to the header element when sorting on this column -\n\t\t * when jQuery UI theming is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sSortingClassJUI\": null,\n\n\t\t/**\n\t\t * Title of the column - what is seen in the TH element (nTh).\n\t\t *  @type string\n\t\t */\n\t\t\"sTitle\": null,\n\n\t\t/**\n\t\t * Column sorting and filtering type\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sType\": null,\n\n\t\t/**\n\t\t * Width of the column\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidth\": null,\n\n\t\t/**\n\t\t * Width of the column when it was first \"encountered\"\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sWidthOrig\": null\n\t};\n\n\n\t/*\n\t * Developer note: The properties of the object below are given in Hungarian\n\t * notation, that was used as the interface for DataTables prior to v1.10, however\n\t * from v1.10 onwards the primary interface is camel case. In order to avoid\n\t * breaking backwards compatibility utterly with this change, the Hungarian\n\t * version is still, internally the primary interface, but is is not documented\n\t * - hence the @name tags in each doc comment. This allows a Javascript function\n\t * to create a map from Hungarian notation to camel case (going the other direction\n\t * would require each property to be listed, which would at around 3K to the size\n\t * of DataTables, while this method is about a 0.5K hit.\n\t *\n\t * Ultimately this does pave the way for Hungarian notation to be dropped\n\t * completely, but that is a massive amount of work and will break current\n\t * installs (therefore is on-hold until v2).\n\t */\n\n\t/**\n\t * Initialisation options that can be given to DataTables at initialisation\n\t * time.\n\t *  @namespace\n\t */\n\tDataTable.defaults = {\n\t\t/**\n\t\t * An array of data to use for the table, passed in at initialisation which\n\t\t * will be used in preference to any data which is already in the DOM. This is\n\t\t * particularly useful for constructing tables purely in Javascript, for\n\t\t * example with a custom Ajax call.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.data\n\t\t *\n\t\t *  @example\n\t\t *    // Using a 2D array data source\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          ['Trident', 'Internet Explorer 4.0', 'Win 95+', 4, 'X'],\n\t\t *          ['Trident', 'Internet Explorer 5.0', 'Win 95+', 5, 'C'],\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\" },\n\t\t *          { \"title\": \"Browser\" },\n\t\t *          { \"title\": \"Platform\" },\n\t\t *          { \"title\": \"Version\" },\n\t\t *          { \"title\": \"Grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using an array of objects as a data source (`data`)\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"data\": [\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 4.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  4,\n\t\t *            \"grade\":    \"X\"\n\t\t *          },\n\t\t *          {\n\t\t *            \"engine\":   \"Trident\",\n\t\t *            \"browser\":  \"Internet Explorer 5.0\",\n\t\t *            \"platform\": \"Win 95+\",\n\t\t *            \"version\":  5,\n\t\t *            \"grade\":    \"C\"\n\t\t *          }\n\t\t *        ],\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"Engine\",   \"data\": \"engine\" },\n\t\t *          { \"title\": \"Browser\",  \"data\": \"browser\" },\n\t\t *          { \"title\": \"Platform\", \"data\": \"platform\" },\n\t\t *          { \"title\": \"Version\",  \"data\": \"version\" },\n\t\t *          { \"title\": \"Grade\",    \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaData\": null,\n\n\n\t\t/**\n\t\t * If ordering is enabled, then DataTables will perform a first pass sort on\n\t\t * initialisation. You can define which column(s) the sort is performed\n\t\t * upon, and the sorting direction, with this variable. The `sorting` array\n\t\t * should contain an array for each column to be sorted initially containing\n\t\t * the column's index and a direction string ('asc' or 'desc').\n\t\t *  @type array\n\t\t *  @default [[0,'asc']]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.order\n\t\t *\n\t\t *  @example\n\t\t *    // Sort by 3rd column first, and then 4th column\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": [[2,'asc'], [3,'desc']]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *    // No initial sorting\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"order\": []\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aaSorting\": [[0,'asc']],\n\n\n\t\t/**\n\t\t * This parameter is basically identical to the `sorting` parameter, but\n\t\t * cannot be overridden by user interaction with the table. What this means\n\t\t * is that you could have a column (visible or hidden) which the sorting\n\t\t * will always be forced on first - any sorting after that (from the user)\n\t\t * will then be performed as required. This can be useful for grouping rows\n\t\t * together.\n\t\t *  @type array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.orderFixed\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderFixed\": [[0,'asc']]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\n\n\t\t/**\n\t\t * DataTables can be instructed to load data to display in the table from a\n\t\t * Ajax source. This option defines how that Ajax call is made and where to.\n\t\t *\n\t\t * The `ajax` property has three different modes of operation, depending on\n\t\t * how it is defined. These are:\n\t\t *\n\t\t * * `string` - Set the URL from where the data should be loaded from.\n\t\t * * `object` - Define properties for `jQuery.ajax`.\n\t\t * * `function` - Custom data get function\n\t\t *\n\t\t * `string`\n\t\t * --------\n\t\t *\n\t\t * As a string, the `ajax` property simply defines the URL from which\n\t\t * DataTables will load data.\n\t\t *\n\t\t * `object`\n\t\t * --------\n\t\t *\n\t\t * As an object, the parameters in the object are passed to\n\t\t * [jQuery.ajax](http://api.jquery.com/jQuery.ajax/) allowing fine control\n\t\t * of the Ajax request. DataTables has a number of default parameters which\n\t\t * you can override using this option. Please refer to the jQuery\n\t\t * documentation for a full description of the options available, although\n\t\t * the following parameters provide additional options in DataTables or\n\t\t * require special consideration:\n\t\t *\n\t\t * * `data` - As with jQuery, `data` can be provided as an object, but it\n\t\t *   can also be used as a function to manipulate the data DataTables sends\n\t\t *   to the server. The function takes a single parameter, an object of\n\t\t *   parameters with the values that DataTables has readied for sending. An\n\t\t *   object may be returned which will be merged into the DataTables\n\t\t *   defaults, or you can add the items to the object that was passed in and\n\t\t *   not return anything from the function. This supersedes `fnServerParams`\n\t\t *   from DataTables 1.9-.\n\t\t *\n\t\t * * `dataSrc` - By default DataTables will look for the property `data` (or\n\t\t *   `aaData` for compatibility with DataTables 1.9-) when obtaining data\n\t\t *   from an Ajax source or for server-side processing - this parameter\n\t\t *   allows that property to be changed. You can use Javascript dotted\n\t\t *   object notation to get a data source for multiple levels of nesting, or\n\t\t *   it my be used as a function. As a function it takes a single parameter,\n\t\t *   the JSON returned from the server, which can be manipulated as\n\t\t *   required, with the returned value being that used by DataTables as the\n\t\t *   data source for the table. This supersedes `sAjaxDataProp` from\n\t\t *   DataTables 1.9-.\n\t\t *\n\t\t * * `success` - Should not be overridden it is used internally in\n\t\t *   DataTables. To manipulate / transform the data returned by the server\n\t\t *   use `ajax.dataSrc`, or use `ajax` as a function (see below).\n\t\t *\n\t\t * `function`\n\t\t * ----------\n\t\t *\n\t\t * As a function, making the Ajax call is left up to yourself allowing\n\t\t * complete control of the Ajax request. Indeed, if desired, a method other\n\t\t * than Ajax could be used to obtain the required data, such as Web storage\n\t\t * or an AIR database.\n\t\t *\n\t\t * The function is given four parameters and no return is required. The\n\t\t * parameters are:\n\t\t *\n\t\t * 1. _object_ - Data to send to the server\n\t\t * 2. _function_ - Callback function that must be executed when the required\n\t\t *    data has been obtained. That data should be passed into the callback\n\t\t *    as the only parameter\n\t\t * 3. _object_ - DataTables settings object for the table\n\t\t *\n\t\t * Note that this supersedes `fnServerData` from DataTables 1.9-.\n\t\t *\n\t\t *  @type string|object|function\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.ajax\n\t\t *  @since 1.10.0\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax.\n\t\t *   // Note DataTables expects data in the form `{ data: [ ...data... ] }` by default).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": \"data.json\"\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to change\n\t\t *   // `data` to `tableData` (i.e. `{ tableData: [ ...data... ] }`)\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"tableData\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get JSON data from a file via Ajax, using `dataSrc` to read data\n\t\t *   // from a plain array rather than an array in an object\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": \"\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Manipulate the data returned from the server - add a link to data\n\t\t *   // (note this can, should, be done using `render` for the column - this\n\t\t *   // is just a simple example of how the data can be manipulated).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"dataSrc\": function ( json ) {\n\t\t *         for ( var i=0, ien=json.length ; i<ien ; i++ ) {\n\t\t *           json[i][0] = '<a href=\"/message/'+json[i][0]+'>View message</a>';\n\t\t *         }\n\t\t *         return json;\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Add data to the request\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"data\": function ( d ) {\n\t\t *         return {\n\t\t *           \"extra_search\": $('#extra').val()\n\t\t *         };\n\t\t *       }\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Send request as POST\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": {\n\t\t *       \"url\": \"data.json\",\n\t\t *       \"type\": \"POST\"\n\t\t *     }\n\t\t *   } );\n\t\t *\n\t\t * @example\n\t\t *   // Get the data from localStorage (could interface with a form for\n\t\t *   // adding, editing and removing rows).\n\t\t *   $('#example').dataTable( {\n\t\t *     \"ajax\": function (data, callback, settings) {\n\t\t *       callback(\n\t\t *         JSON.parse( localStorage.getItem('dataTablesData') )\n\t\t *       );\n\t\t *     }\n\t\t *   } );\n\t\t */\n\t\t\"ajax\": null,\n\n\n\t\t/**\n\t\t * This parameter allows you to readily specify the entries in the length drop\n\t\t * down menu that DataTables shows when pagination is enabled. It can be\n\t\t * either a 1D array of options which will be used for both the displayed\n\t\t * option and the value, or a 2D array which will use the array in the first\n\t\t * position as the value, and the array in the second position as the\n\t\t * displayed options (useful for language strings such as 'All').\n\t\t *\n\t\t * Note that the `pageLength` property will be automatically set to the\n\t\t * first value given in this array, unless `pageLength` is also provided.\n\t\t *  @type array\n\t\t *  @default [ 10, 25, 50, 100 ]\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.lengthMenu\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthMenu\": [[10, 25, 50, -1], [10, 25, 50, \"All\"]]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aLengthMenu\": [ 10, 25, 50, 100 ],\n\n\n\t\t/**\n\t\t * The `columns` option in the initialisation parameter allows you to define\n\t\t * details about the way individual columns behave. For a full list of\n\t\t * column options that can be set, please see\n\t\t * {@link DataTable.defaults.column}. Note that if you use `columns` to\n\t\t * define your columns, you must have an entry in the array for every single\n\t\t * column that you have in your table (these can be null if you don't which\n\t\t * to specify any options).\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.column\n\t\t */\n\t\t\"aoColumns\": null,\n\n\t\t/**\n\t\t * Very similar to `columns`, `columnDefs` allows you to target a specific\n\t\t * column, multiple columns, or all columns, using the `targets` property of\n\t\t * each object in the array. This allows great flexibility when creating\n\t\t * tables, as the `columnDefs` arrays can be of any length, targeting the\n\t\t * columns you specifically want. `columnDefs` may use any of the column\n\t\t * options available: {@link DataTable.defaults.column}, but it _must_\n\t\t * have `targets` defined in each object in the array. Values in the `targets`\n\t\t * array may be:\n\t\t *   <ul>\n\t\t *     <li>a string - class name will be matched on the TH for the column</li>\n\t\t *     <li>0 or a positive integer - column index counting from the left</li>\n\t\t *     <li>a negative integer - column index counting from the right</li>\n\t\t *     <li>the string \"_all\" - all columns (i.e. assign a default)</li>\n\t\t *   </ul>\n\t\t *  @member\n\t\t *\n\t\t *  @name DataTable.defaults.columnDefs\n\t\t */\n\t\t\"aoColumnDefs\": null,\n\n\n\t\t/**\n\t\t * Basically the same as `search`, this parameter defines the individual column\n\t\t * filtering state at initialisation time. The array must be of the same size\n\t\t * as the number of columns, and each element be an object with the parameters\n\t\t * `search` and `escapeRegex` (the latter is optional). 'null' is also\n\t\t * accepted and the default will be used.\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.searchCols\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searchCols\": [\n\t\t *          null,\n\t\t *          { \"search\": \"My filter\" },\n\t\t *          null,\n\t\t *          { \"search\": \"^[0-9]\", \"escapeRegex\": false }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"aoSearchCols\": [],\n\n\n\t\t/**\n\t\t * An array of CSS classes that should be applied to displayed rows. This\n\t\t * array may be of any length, and DataTables will apply each class\n\t\t * sequentially, looping when required.\n\t\t *  @type array\n\t\t *  @default null <i>Will take the values determined by the `oClasses.stripe*`\n\t\t *    options</i>\n\t\t *\n\t\t *  @dtopt Option\n\t\t *  @name DataTable.defaults.stripeClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stripeClasses\": [ 'strip1', 'strip2', 'strip3' ]\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"asStripeClasses\": null,\n\n\n\t\t/**\n\t\t * Enable or disable automatic column width calculation. This can be disabled\n\t\t * as an optimisation (it takes some time to calculate the widths) if the\n\t\t * tables widths are passed in using `columns`.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.autoWidth\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"autoWidth\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bAutoWidth\": true,\n\n\n\t\t/**\n\t\t * Deferred rendering can provide DataTables with a huge speed boost when you\n\t\t * are using an Ajax or JS data source for the table. This option, when set to\n\t\t * true, will cause DataTables to defer the creation of the table elements for\n\t\t * each row until they are needed for a draw - saving a significant amount of\n\t\t * time.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.deferRender\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajax\": \"sources/arrays.txt\",\n\t\t *        \"deferRender\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDeferRender\": false,\n\n\n\t\t/**\n\t\t * Replace a DataTable which matches the given selector and replace it with\n\t\t * one which has the properties of the new initialisation object passed. If no\n\t\t * table matches the selector, then the new DataTable will be constructed as\n\t\t * per normal.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.destroy\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"srollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *\n\t\t *      // Some time later....\n\t\t *      $('#example').dataTable( {\n\t\t *        \"filter\": false,\n\t\t *        \"destroy\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bDestroy\": false,\n\n\n\t\t/**\n\t\t * Enable or disable filtering of data. Filtering in DataTables is \"smart\" in\n\t\t * that it allows the end user to input multiple words (space separated) and\n\t\t * will match a row containing those words, even if not in the order that was\n\t\t * specified (this allow matching across multiple columns). Note that if you\n\t\t * wish to use filtering in DataTables this must remain 'true' - to remove the\n\t\t * default filtering input box and retain filtering abilities, please use\n\t\t * {@link DataTable.defaults.dom}.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.searching\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"searching\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bFilter\": true,\n\n\n\t\t/**\n\t\t * Enable or disable the table information display. This shows information\n\t\t * about the data that is currently visible on the page, including information\n\t\t * about filtered data if that action is being performed.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.info\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"info\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bInfo\": true,\n\n\n\t\t/**\n\t\t * Enable jQuery UI ThemeRoller support (required as ThemeRoller requires some\n\t\t * slightly different and additional mark-up from what DataTables has\n\t\t * traditionally used).\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.jQueryUI\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"jQueryUI\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bJQueryUI\": false,\n\n\n\t\t/**\n\t\t * Allows the end user to select the size of a formatted page from a select\n\t\t * menu (sizes are 10, 25, 50 and 100). Requires pagination (`paginate`).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.lengthChange\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"lengthChange\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bLengthChange\": true,\n\n\n\t\t/**\n\t\t * Enable or disable pagination.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.paging\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"paging\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bPaginate\": true,\n\n\n\t\t/**\n\t\t * Enable or disable the display of a 'processing' indicator when the table is\n\t\t * being processed (e.g. a sort). This is particularly useful for tables with\n\t\t * large amounts of data where it can take a noticeable amount of time to sort\n\t\t * the entries.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.processing\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"processing\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bProcessing\": false,\n\n\n\t\t/**\n\t\t * Retrieve the DataTables object for the given selector. Note that if the\n\t\t * table has already been initialised, this parameter will cause DataTables\n\t\t * to simply return the object that has already been set up - it will not take\n\t\t * account of any changes you might have made to the initialisation object\n\t\t * passed to DataTables (setting this parameter to true is an acknowledgement\n\t\t * that you understand this). `destroy` can be used to reinitialise a table if\n\t\t * you need.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.retrieve\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      initTable();\n\t\t *      tableActions();\n\t\t *    } );\n\t\t *\n\t\t *    function initTable ()\n\t\t *    {\n\t\t *      return $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false,\n\t\t *        \"retrieve\": true\n\t\t *      } );\n\t\t *    }\n\t\t *\n\t\t *    function tableActions ()\n\t\t *    {\n\t\t *      var table = initTable();\n\t\t *      // perform API operations with oTable\n\t\t *    }\n\t\t */\n\t\t\"bRetrieve\": false,\n\n\n\t\t/**\n\t\t * When vertical (y) scrolling is enabled, DataTables will force the height of\n\t\t * the table's viewport to the given height at all times (useful for layout).\n\t\t * However, this can look odd when filtering data down to a small data set,\n\t\t * and the footer is left \"floating\" further down. This parameter (when\n\t\t * enabled) will cause DataTables to collapse the table's viewport down when\n\t\t * the result set will fit within the given Y height.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollCollapse\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200\",\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bScrollCollapse\": false,\n\n\n\t\t/**\n\t\t * Configure DataTables to use server-side processing. Note that the\n\t\t * `ajax` parameter must also be given in order to give DataTables a\n\t\t * source to obtain the required data for each draw.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverSide\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"xhr.php\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bServerSide\": false,\n\n\n\t\t/**\n\t\t * Enable or disable sorting of columns. Sorting of individual columns can be\n\t\t * disabled by the `sortable` option for each column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.ordering\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ordering\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSort\": true,\n\n\n\t\t/**\n\t\t * Enable or display DataTables' ability to sort multiple columns at the\n\t\t * same time (activated by shift-click by the user).\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderMulti\n\t\t *\n\t\t *  @example\n\t\t *    // Disable multiple column sorting ability\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderMulti\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortMulti\": true,\n\n\n\t\t/**\n\t\t * Allows control over whether DataTables should use the top (true) unique\n\t\t * cell that is found for a single column, or the bottom (false - default).\n\t\t * This is useful when using complex headers.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.orderCellsTop\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderCellsTop\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortCellsTop\": false,\n\n\n\t\t/**\n\t\t * Enable or disable the addition of the classes `sorting\\_1`, `sorting\\_2` and\n\t\t * `sorting\\_3` to the columns which are currently being sorted on. This is\n\t\t * presented as a feature switch as it can increase processing time (while\n\t\t * classes are removed and added) so for large data sets you might want to\n\t\t * turn this off.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.orderClasses\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"orderClasses\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortClasses\": true,\n\n\n\t\t/**\n\t\t * Enable or disable state saving. When enabled HTML5 `localStorage` will be\n\t\t * used to save table display information such as pagination information,\n\t\t * display length, filtering and sorting. As such when the end user reloads\n\t\t * the page the display display will match what thy had previously set up.\n\t\t *\n\t\t * Due to the use of `localStorage` the default state saving is not supported\n\t\t * in IE6 or 7. If state saving is required in those browsers, use\n\t\t * `stateSaveCallback` to provide a storage solution such as cookies.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.stateSave\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function () {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"bStateSave\": false,\n\n\n\t\t/**\n\t\t * This function is called when a TR element is created (and all TD child\n\t\t * elements have been inserted), or registered if using a DOM source, allowing\n\t\t * manipulation of the TR element (adding classes etc).\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} dataIndex The index of this row in the internal aoData array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.createdRow\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"createdRow\": function( row, data, dataIndex ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" )\n\t\t *          {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedRow\": null,\n\n\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify any aspect you want about the created DOM.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.drawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"drawCallback\": function( settings ) {\n\t\t *          alert( 'DataTables has redrawn the table' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnDrawCallback\": null,\n\n\n\t\t/**\n\t\t * Identical to fnHeaderCallback() but for the table footer this function\n\t\t * allows you to modify the table footer on every 'draw' event.\n\t\t *  @type function\n\t\t *  @param {node} foot \"TR\" element for the footer\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.footerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"footerCallback\": function( tfoot, data, start, end, display ) {\n\t\t *          tfoot.getElementsByTagName('th')[0].innerHTML = \"Starting index is \"+start;\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnFooterCallback\": null,\n\n\n\t\t/**\n\t\t * When rendering large numbers in the information element for the table\n\t\t * (i.e. \"Showing 1 to 10 of 57 entries\") DataTables will render large numbers\n\t\t * to have a comma separator for the 'thousands' units (e.g. 1 million is\n\t\t * rendered as \"1,000,000\") to help readability for the end user. This\n\t\t * function will override the default method DataTables uses.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {int} toFormat number to be formatted\n\t\t *  @returns {string} formatted string for DataTables to show the number\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.formatNumber\n\t\t *\n\t\t *  @example\n\t\t *    // Format a number using a single quote for the separator (note that\n\t\t *    // this can also be done with the language.infoThousands option)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"formatNumber\": function ( toFormat ) {\n\t\t *          return toFormat.toString().replace(\n\t\t *            /\\B(?=(\\d{3})+(?!\\d))/g, \"'\"\n\t\t *          );\n\t\t *        };\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnFormatNumber\": function ( toFormat ) {\n\t\t\treturn toFormat.toString().replace(\n\t\t\t\t/\\B(?=(\\d{3})+(?!\\d))/g,\n\t\t\t\tthis.oLanguage.sInfoThousands\n\t\t\t);\n\t\t},\n\n\n\t\t/**\n\t\t * This function is called on every 'draw' event, and allows you to\n\t\t * dynamically modify the header row. This can be used to calculate and\n\t\t * display useful information about the table.\n\t\t *  @type function\n\t\t *  @param {node} head \"TR\" element for the header\n\t\t *  @param {array} data Full table data (as derived from the original HTML)\n\t\t *  @param {int} start Index for the current display starting point in the\n\t\t *    display array\n\t\t *  @param {int} end Index for the current display ending point in the\n\t\t *    display array\n\t\t *  @param {array int} display Index array to translate the visual position\n\t\t *    to the full data array\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.headerCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"fheaderCallback\": function( head, data, start, end, display ) {\n\t\t *          head.getElementsByTagName('th')[0].innerHTML = \"Displaying \"+(end-start)+\" records\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnHeaderCallback\": null,\n\n\n\t\t/**\n\t\t * The information element can be used to convey information about the current\n\t\t * state of the table. Although the internationalisation options presented by\n\t\t * DataTables are quite capable of dealing with most customisations, there may\n\t\t * be times where you wish to customise the string further. This callback\n\t\t * allows you to do exactly that.\n\t\t *  @type function\n\t\t *  @param {object} oSettings DataTables settings object\n\t\t *  @param {int} start Starting position in data for the draw\n\t\t *  @param {int} end End position in data for the draw\n\t\t *  @param {int} max Total number of rows in the table (regardless of\n\t\t *    filtering)\n\t\t *  @param {int} total Total number of rows in the data set, after filtering\n\t\t *  @param {string} pre The string that DataTables has formatted using it's\n\t\t *    own rules\n\t\t *  @returns {string} The string to be displayed in the information element.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.infoCallback\n\t\t *\n\t\t *  @example\n\t\t *    $('#example').dataTable( {\n\t\t *      \"infoCallback\": function( settings, start, end, max, total, pre ) {\n\t\t *        return start +\" to \"+ end;\n\t\t *      }\n\t\t *    } );\n\t\t */\n\t\t\"fnInfoCallback\": null,\n\n\n\t\t/**\n\t\t * Called when the table has been initialised. Normally DataTables will\n\t\t * initialise sequentially and there will be no need for this function,\n\t\t * however, this does not hold true when using external language information\n\t\t * since that is obtained using an async XHR call.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} json The JSON object request from the server - only\n\t\t *    present if client-side Ajax sourced data is used\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.initComplete\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"initComplete\": function(settings, json) {\n\t\t *          alert( 'DataTables has finished its initialisation.' );\n\t\t *        }\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"fnInitComplete\": null,\n\n\n\t\t/**\n\t\t * Called at the very start of each table draw and can be used to cancel the\n\t\t * draw by returning false, any other return (including undefined) results in\n\t\t * the full draw occurring).\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @returns {boolean} False will cancel the draw, anything else (including no\n\t\t *    return) will allow it to complete.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.preDrawCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"preDrawCallback\": function( settings ) {\n\t\t *          if ( $('#test').val() == 1 ) {\n\t\t *            return false;\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnPreDrawCallback\": null,\n\n\n\t\t/**\n\t\t * This function allows you to 'post process' each row after it have been\n\t\t * generated for each table draw, but before it is rendered on screen. This\n\t\t * function might be used for setting the row class name etc.\n\t\t *  @type function\n\t\t *  @param {node} row \"TR\" element for the current row\n\t\t *  @param {array} data Raw data array for this row\n\t\t *  @param {int} displayIndex The display index for the current table draw\n\t\t *  @param {int} displayIndexFull The index of the data in the full list of\n\t\t *    rows (after filtering)\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.rowCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"rowCallback\": function( row, data, displayIndex, displayIndexFull ) {\n\t\t *          // Bold the grade for all 'A' grade browsers\n\t\t *          if ( data[4] == \"A\" ) {\n\t\t *            $('td:eq(4)', row).html( '<b>A</b>' );\n\t\t *          }\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnRowCallback\": null,\n\n\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * This parameter allows you to override the default function which obtains\n\t\t * the data from the server so something more suitable for your application.\n\t\t * For example you could use POST data, or pull information from a Gears or\n\t\t * AIR database.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {string} source HTTP source to obtain the data from (`ajax`)\n\t\t *  @param {array} data A key/value pair object containing the data to send\n\t\t *    to the server\n\t\t *  @param {function} callback to be called on completion of the data get\n\t\t *    process that will draw the data on the page.\n\t\t *  @param {object} settings DataTables settings object\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverData\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerData\": null,\n\n\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t *  It is often useful to send extra data to the server when making an Ajax\n\t\t * request - for example custom filtering information, and this callback\n\t\t * function makes it trivial to send extra information to the server. The\n\t\t * passed in parameter is the data set that has been constructed by\n\t\t * DataTables, and you can add to this or modify it as you require.\n\t\t *  @type function\n\t\t *  @param {array} data Data array (array of objects which are name/value\n\t\t *    pairs) that has been constructed by DataTables and will be sent to the\n\t\t *    server. In the case of Ajax sourced data with server-side processing\n\t\t *    this will be an empty array, for server-side processing there will be a\n\t\t *    significant number of parameters!\n\t\t *  @returns {undefined} Ensure that you modify the data array passed in,\n\t\t *    as this is passed by reference.\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverParams\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"fnServerParams\": null,\n\n\n\t\t/**\n\t\t * Load the table state. With this function you can define from where, and how, the\n\t\t * state of a table is loaded. By default DataTables will load from `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @return {object} The DataTables state object to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadCallback\": function (settings) {\n\t\t *          var o;\n\t\t *\n\t\t *          // Send an Ajax request to the server to get the data. Note that\n\t\t *          // this is a synchronous request.\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_load\",\n\t\t *            \"async\": false,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"success\": function (json) {\n\t\t *              o = json;\n\t\t *            }\n\t\t *          } );\n\t\t *\n\t\t *          return o;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadCallback\": function ( settings ) {\n\t\t\ttry {\n\t\t\t\treturn JSON.parse(\n\t\t\t\t\tlocalStorage.getItem('DataTables_'+settings.sInstance+'_'+window.location.pathname)\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\n\n\t\t/**\n\t\t * Callback which allows modification of the saved state prior to loading that state.\n\t\t * This callback is called when the table is loading state from the stored data, but\n\t\t * prior to the settings object being modified by the saved state. Note that for\n\t\t * plug-in authors, you should use the `stateLoadParams` event to load parameters for\n\t\t * a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that is to be loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoadParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never loaded\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Disallow state loading by returning false\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoadParams\": function (settings, data) {\n\t\t *          return false;\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoadParams\": null,\n\n\n\t\t/**\n\t\t * Callback that is called when the state has been loaded from the state saving method\n\t\t * and the DataTables settings object has been modified as a result of the loaded state.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object that was loaded\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateLoaded\n\t\t *\n\t\t *  @example\n\t\t *    // Show an alert with the filtering value that was saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateLoaded\": function (settings, data) {\n\t\t *          alert( 'Saved filter was: '+data.oSearch.sSearch );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateLoaded\": null,\n\n\n\t\t/**\n\t\t * Save the table state. This function allows you to define where and how the state\n\t\t * information for the table is stored By default DataTables will use `localStorage`\n\t\t * but you might wish to use a server-side database or cookies.\n\t\t *  @type function\n\t\t *  @member\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveCallback\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveCallback\": function (settings, data) {\n\t\t *          // Send an Ajax request to the server with the state object\n\t\t *          $.ajax( {\n\t\t *            \"url\": \"/state_save\",\n\t\t *            \"data\": data,\n\t\t *            \"dataType\": \"json\",\n\t\t *            \"method\": \"POST\"\n\t\t *            \"success\": function () {}\n\t\t *          } );\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveCallback\": function ( settings, data ) {\n\t\t\ttry {\n\t\t\t\tlocalStorage.setItem(\n\t\t\t\t\t'DataTables_'+settings.sInstance+'_'+window.location.pathname,\n\t\t\t\t\tJSON.stringify(data)\n\t\t\t\t);\n\t\t\t} catch (e) {}\n\t\t},\n\n\n\t\t/**\n\t\t * Callback which allows modification of the state to be saved. Called when the table\n\t\t * has changed state a new state save is required. This method allows modification of\n\t\t * the state saving object prior to actually doing the save, including addition or\n\t\t * other state properties or modification. Note that for plug-in authors, you should\n\t\t * use the `stateSaveParams` event to save parameters for a plug-in.\n\t\t *  @type function\n\t\t *  @param {object} settings DataTables settings object\n\t\t *  @param {object} data The state object to be saved\n\t\t *\n\t\t *  @dtopt Callbacks\n\t\t *  @name DataTable.defaults.stateSaveParams\n\t\t *\n\t\t *  @example\n\t\t *    // Remove a saved filter, so filtering is never saved\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateSave\": true,\n\t\t *        \"stateSaveParams\": function (settings, data) {\n\t\t *          data.oSearch.sSearch = \"\";\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"fnStateSaveParams\": null,\n\n\n\t\t/**\n\t\t * Duration for which the saved state information is considered valid. After this period\n\t\t * has elapsed the state will be returned to the default.\n\t\t * Value is given in seconds.\n\t\t *  @type int\n\t\t *  @default 7200 <i>(2 hours)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.stateDuration\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"stateDuration\": 60*60*24; // 1 day\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iStateDuration\": 7200,\n\n\n\t\t/**\n\t\t * When enabled DataTables will not make a request to the server for the first\n\t\t * page draw - rather it will use the data already on the page (no sorting etc\n\t\t * will be applied to it), thus saving on an XHR at load time. `deferLoading`\n\t\t * is used to indicate that deferred loading is required, but it is also used\n\t\t * to tell DataTables how many records there are in the full table (allowing\n\t\t * the information element and pagination to be displayed correctly). In the case\n\t\t * where a filtering is applied to the table on initial load, this can be\n\t\t * indicated by giving the parameter as an array, where the first element is\n\t\t * the number of records available after filtering and the second element is the\n\t\t * number of records without filtering (allowing the table information element\n\t\t * to be shown correctly).\n\t\t *  @type int | array\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.deferLoading\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records available in the table, no filtering applied\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": 57\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // 57 records after filtering, 100 without filtering (an initial filter applied)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"serverSide\": true,\n\t\t *        \"ajax\": \"scripts/server_processing.php\",\n\t\t *        \"deferLoading\": [ 57, 100 ],\n\t\t *        \"search\": {\n\t\t *          \"search\": \"my_filter\"\n\t\t *        }\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iDeferLoading\": null,\n\n\n\t\t/**\n\t\t * Number of rows to display on a single page when using pagination. If\n\t\t * feature enabled (`lengthChange`) then the end user will be able to override\n\t\t * this to a custom setting using a pop-up menu.\n\t\t *  @type int\n\t\t *  @default 10\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pageLength\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pageLength\": 50\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayLength\": 10,\n\n\n\t\t/**\n\t\t * Define the starting point for data display when using DataTables with\n\t\t * pagination. Note that this parameter is the number of records, rather than\n\t\t * the page number, so if you have 10 records per page and want to start on\n\t\t * the third page, it should be \"20\".\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.displayStart\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"displayStart\": 20\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"iDisplayStart\": 0,\n\n\n\t\t/**\n\t\t * By default DataTables allows keyboard navigation of the table (sorting, paging,\n\t\t * and filtering) by adding a `tabindex` attribute to the required elements. This\n\t\t * allows you to tab through the controls and press the enter key to activate them.\n\t\t * The tabindex is default 0, meaning that the tab follows the flow of the document.\n\t\t * You can overrule this using this parameter if you wish. Use a value of -1 to\n\t\t * disable built-in keyboard navigation.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.tabIndex\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"tabIndex\": 1\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"iTabIndex\": 0,\n\n\n\t\t/**\n\t\t * Classes that DataTables assigns to the various components and features\n\t\t * that it adds to the HTML table. This allows classes to be configured\n\t\t * during initialisation in addition to through the static\n\t\t * {@link DataTable.ext.oStdClasses} object).\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.classes\n\t\t */\n\t\t\"oClasses\": {},\n\n\n\t\t/**\n\t\t * All strings that DataTables uses in the user interface that it creates\n\t\t * are defined in this object, allowing you to modified them individually or\n\t\t * completely replace them all as required.\n\t\t *  @namespace\n\t\t *  @name DataTable.defaults.language\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Strings that are used for WAI-ARIA labels and controls only (these are not\n\t\t\t * actually visible on the page, but will be read by screenreaders, and thus\n\t\t\t * must be internationalised as well).\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.aria\n\t\t\t */\n\t\t\t\"oAria\": {\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted ascending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortAscending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortAscending\": \" - click/return to sort ascending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortAscending\": \"：激活排序列升序\",\n\n\t\t\t\t/**\n\t\t\t\t * ARIA label that is added to the table headers when the column may be\n\t\t\t\t * sorted descending by activing the column (click or return when focused).\n\t\t\t\t * Note that the column header is prefixed to this string.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default : activate to sort column ascending\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.aria.sortDescending\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"aria\": {\n\t\t\t\t *            \"sortDescending\": \" - click/return to sort descending\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sSortDescending\": \"：激活排序列降序\"\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * Pagination string used by DataTables for the built-in pagination\n\t\t\t * control types.\n\t\t\t *  @namespace\n\t\t\t *  @name DataTable.defaults.language.paginate\n\t\t\t */\n\t\t\t\"oPaginate\": {\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the first page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default First\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.first\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"first\": \"First page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sFirst\": \"第一页\",\n\n\n\t\t\t\t/**\n\t\t\t\t * Text to use when using the 'full_numbers' type of pagination for the\n\t\t\t\t * button to take the user to the last page.\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Last\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.last\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"last\": \"Last page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sLast\": \"最后一页\",\n\n\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'next' pagination button (to take the user to the\n\t\t\t\t * next page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Next\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.next\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"next\": \"Next page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sNext\": \"下一页\",\n\n\n\t\t\t\t/**\n\t\t\t\t * Text to use for the 'previous' pagination button (to take the user to\n\t\t\t\t * the previous page).\n\t\t\t\t *  @type string\n\t\t\t\t *  @default Previous\n\t\t\t\t *\n\t\t\t\t *  @dtopt Language\n\t\t\t\t *  @name DataTable.defaults.language.paginate.previous\n\t\t\t\t *\n\t\t\t\t *  @example\n\t\t\t\t *    $(document).ready( function() {\n\t\t\t\t *      $('#example').dataTable( {\n\t\t\t\t *        \"language\": {\n\t\t\t\t *          \"paginate\": {\n\t\t\t\t *            \"previous\": \"Previous page\"\n\t\t\t\t *          }\n\t\t\t\t *        }\n\t\t\t\t *      } );\n\t\t\t\t *    } );\n\t\t\t\t */\n\t\t\t\t\"sPrevious\": \"上一页\"\n\t\t\t},\n\n\t\t\t/**\n\t\t\t * This string is shown in preference to `zeroRecords` when the table is\n\t\t\t * empty of data (regardless of filtering). Note that this is an optional\n\t\t\t * parameter - if it is not given, the value of `zeroRecords` will be used\n\t\t\t * instead (either the default or given value).\n\t\t\t *  @type string\n\t\t\t *  @default No data available in table\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.emptyTable\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"emptyTable\": \"No data available in table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sEmptyTable\": \"没有数据\",\n\n\n\t\t\t/**\n\t\t\t * This string gives information to the end user about the information\n\t\t\t * that is current on display on the page. The following tokens can be\n\t\t\t * used in the string and will be dynamically replaced as the table\n\t\t\t * display updates. This tokens can be placed anywhere in the string, or\n\t\t\t * removed as needed by the language requires:\n\t\t\t *\n\t\t\t * * `\\_START\\_` - Display index of the first record on the current page\n\t\t\t * * `\\_END\\_` - Display index of the last record on the current page\n\t\t\t * * `\\_TOTAL\\_` - Number of records in the table after filtering\n\t\t\t * * `\\_MAX\\_` - Number of records in the table without filtering\n\t\t\t * * `\\_PAGE\\_` - Current page number\n\t\t\t * * `\\_PAGES\\_` - Total number of pages of data in the table\n\t\t\t *\n\t\t\t *  @type string\n\t\t\t *  @default Showing _START_ to _END_ of _TOTAL_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.info\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"info\": \"Showing page _PAGE_ of _PAGES_\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfo\": \"显示 _START_ 到 _END_ 项，共 _TOTAL_ 项\",\n\n\n\t\t\t/**\n\t\t\t * Display information string for when the table is empty. Typically the\n\t\t\t * format of this string should match `info`.\n\t\t\t *  @type string\n\t\t\t *  @default Showing 0 to 0 of 0 entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoEmpty\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoEmpty\": \"No entries to show\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoEmpty\": \"显示0项\",\n\n\n\t\t\t/**\n\t\t\t * When a user filters the information in a table, this string is appended\n\t\t\t * to the information (`info`) to give an idea of how strong the filtering\n\t\t\t * is. The variable _MAX_ is dynamically updated.\n\t\t\t *  @type string\n\t\t\t *  @default (filtered from _MAX_ total entries)\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoFiltered\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoFiltered\": \" - filtering from _MAX_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoFiltered\": \"（从 _MAX_ 中筛选）\",\n\n\n\t\t\t/**\n\t\t\t * If can be useful to append extra information to the info string at times,\n\t\t\t * and this variable does exactly that. This information will be appended to\n\t\t\t * the `info` (`infoEmpty` and `infoFiltered` in whatever combination they are\n\t\t\t * being used) at all times.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoPostFix\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoPostFix\": \"All records shown are derived from real information.\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoPostFix\": \"\",\n\n\n\t\t\t/**\n\t\t\t * DataTables has a build in number formatter (`formatNumber`) which is used\n\t\t\t * to format large numbers that are used in the table information. By\n\t\t\t * default a comma is used, but this can be trivially changed to any\n\t\t\t * character you wish with this parameter.\n\t\t\t *  @type string\n\t\t\t *  @default ,\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.infoThousands\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"infoThousands\": \"'\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sInfoThousands\": \",\",\n\n\n\t\t\t/**\n\t\t\t * Detail the action that will be taken when the drop down menu for the\n\t\t\t * pagination length option is changed. The '_MENU_' variable is replaced\n\t\t\t * with a default select list of 10, 25, 50 and 100, and can be replaced\n\t\t\t * with a custom select box if required.\n\t\t\t *  @type string\n\t\t\t *  @default Show _MENU_ entries\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.lengthMenu\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language change only\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": \"Display _MENU_ records\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Language and options change\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"lengthMenu\": 'Display <select>'+\n\t\t\t *            '<option value=\"10\">10</option>'+\n\t\t\t *            '<option value=\"20\">20</option>'+\n\t\t\t *            '<option value=\"30\">30</option>'+\n\t\t\t *            '<option value=\"40\">40</option>'+\n\t\t\t *            '<option value=\"50\">50</option>'+\n\t\t\t *            '<option value=\"-1\">All</option>'+\n\t\t\t *            '</select> records'\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLengthMenu\": \"显示 _MENU_ entries\",\n\n\n\t\t\t/**\n\t\t\t * When using Ajax sourced data and during the first draw when DataTables is\n\t\t\t * gathering the data, this message is shown in an empty row in the table to\n\t\t\t * indicate to the end user the the data is being loaded. Note that this\n\t\t\t * parameter is not used when loading data by server-side processing, just\n\t\t\t * Ajax sourced data with client-side processing.\n\t\t\t *  @type string\n\t\t\t *  @default Loading...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.loadingRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"loadingRecords\": \"Please wait - loading...\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sLoadingRecords\": \"加载中…\",\n\n\n\t\t\t/**\n\t\t\t * Text which is displayed when the table is processing a user action\n\t\t\t * (usually a sort command or similar).\n\t\t\t *  @type string\n\t\t\t *  @default Processing...\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.processing\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"processing\": \"DataTables is currently busy\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sProcessing\": \"处理中…\",\n\n\n\t\t\t/**\n\t\t\t * Details the actions that will be taken when the user types into the\n\t\t\t * filtering input text box. The variable \"_INPUT_\", if used in the string,\n\t\t\t * is replaced with the HTML text box for the filtering input allowing\n\t\t\t * control over where it appears in the string. If \"_INPUT_\" is not given\n\t\t\t * then the input box is appended to the string automatically.\n\t\t\t *  @type string\n\t\t\t *  @default Search:\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.search\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Input text box will be appended at the end automatically\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Filter records:\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Specify where the filter should appear\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"search\": \"Apply filter _INPUT_ to table\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sSearch\": \"查找：\",\n\n\n\t\t\t/**\n\t\t\t * All of the language information can be stored in a file on the\n\t\t\t * server-side, which DataTables will look up if this parameter is passed.\n\t\t\t * It must store the URL of the language file, which is in a JSON format,\n\t\t\t * and the object has the same properties as the oLanguage object in the\n\t\t\t * initialiser object (i.e. the above parameters). Please refer to one of\n\t\t\t * the example language files to see how this works in action.\n\t\t\t *  @type string\n\t\t\t *  @default <i>Empty string - i.e. disabled</i>\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.url\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"url\": \"http://www.sprymedia.co.uk/dataTables/lang.txt\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sUrl\": \"\",\n\n\n\t\t\t/**\n\t\t\t * Text shown inside the table records when the is no information to be\n\t\t\t * displayed after filtering. `emptyTable` is shown when there is simply no\n\t\t\t * information in the table at all (regardless of filtering).\n\t\t\t *  @type string\n\t\t\t *  @default No matching records found\n\t\t\t *\n\t\t\t *  @dtopt Language\n\t\t\t *  @name DataTable.defaults.language.zeroRecords\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $(document).ready( function() {\n\t\t\t *      $('#example').dataTable( {\n\t\t\t *        \"language\": {\n\t\t\t *          \"zeroRecords\": \"No records to display\"\n\t\t\t *        }\n\t\t\t *      } );\n\t\t\t *    } );\n\t\t\t */\n\t\t\t\"sZeroRecords\": \"没有找到符合条件的记录\"\n\t\t},\n\n\n\t\t/**\n\t\t * This parameter allows you to have define the global filtering state at\n\t\t * initialisation time. As an object the `search` parameter must be\n\t\t * defined, but all other parameters are optional. When `regex` is true,\n\t\t * the search string will be treated as a regular expression, when false\n\t\t * (default) it will be treated as a straight string. When `smart`\n\t\t * DataTables will use it's smart filtering methods (to word match at\n\t\t * any point in the data), when false this will not be done.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.search\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"search\": {\"search\": \"Initial search\"}\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"oSearch\": $.extend( {}, DataTable.models.oSearch ),\n\n\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * By default DataTables will look for the property `data` (or `aaData` for\n\t\t * compatibility with DataTables 1.9-) when obtaining data from an Ajax\n\t\t * source or for server-side processing - this parameter allows that\n\t\t * property to be changed. You can use Javascript dotted object notation to\n\t\t * get a data source for multiple levels of nesting.\n\t\t *  @type string\n\t\t *  @default data\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxDataProp\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxDataProp\": \"data\",\n\n\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * You can instruct DataTables to load data from an external\n\t\t * source using this parameter (use aData if you want to pass data in you\n\t\t * already have). Simply provide a url a JSON object can be obtained from.\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.ajaxSource\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sAjaxSource\": null,\n\n\n\t\t/**\n\t\t * This initialisation variable allows you to specify exactly where in the\n\t\t * DOM you want DataTables to inject the various controls it adds to the page\n\t\t * (for example you might want the pagination controls at the top of the\n\t\t * table). DIV elements (with or without a custom class) can also be added to\n\t\t * aid styling. The follow syntax is used:\n\t\t *   <ul>\n\t\t *     <li>The following options are allowed:\n\t\t *       <ul>\n\t\t *         <li>'l' - Length changing</li>\n\t\t *         <li>'f' - Filtering input</li>\n\t\t *         <li>'t' - The table!</li>\n\t\t *         <li>'i' - Information</li>\n\t\t *         <li>'p' - Pagination</li>\n\t\t *         <li>'r' - pRocessing</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following constants are allowed:\n\t\t *       <ul>\n\t\t *         <li>'H' - jQueryUI theme \"header\" classes ('fg-toolbar ui-widget-header ui-corner-tl ui-corner-tr ui-helper-clearfix')</li>\n\t\t *         <li>'F' - jQueryUI theme \"footer\" classes ('fg-toolbar ui-widget-header ui-corner-bl ui-corner-br ui-helper-clearfix')</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>The following syntax is expected:\n\t\t *       <ul>\n\t\t *         <li>'&lt;' and '&gt;' - div elements</li>\n\t\t *         <li>'&lt;\"class\" and '&gt;' - div with a class</li>\n\t\t *         <li>'&lt;\"#id\" and '&gt;' - div with an ID</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *     <li>Examples:\n\t\t *       <ul>\n\t\t *         <li>'&lt;\"wrapper\"flipt&gt;'</li>\n\t\t *         <li>'&lt;lf&lt;t&gt;ip&gt;'</li>\n\t\t *       </ul>\n\t\t *     </li>\n\t\t *   </ul>\n\t\t *  @type string\n\t\t *  @default lfrtip <i>(when `jQueryUI` is false)</i> <b>or</b>\n\t\t *    <\"H\"lfr>t<\"F\"ip> <i>(when `jQueryUI` is true)</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.dom\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"dom\": '&lt;\"top\"i&gt;rt&lt;\"bottom\"flp&gt;&lt;\"clear\"&gt;'\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDom\": \"lfrtip\",\n\n\n\t\t/**\n\t\t * DataTables features four different built-in options for the buttons to\n\t\t * display for pagination control:\n\t\t *\n\t\t * * `simple` - 'Previous' and 'Next' buttons only\n\t\t * * 'simple_numbers` - 'Previous' and 'Next' buttons, plus page numbers\n\t\t * * `full` - 'First', 'Previous', 'Next' and 'Last' buttons\n\t\t * * `full_numbers` - 'First', 'Previous', 'Next' and 'Last' buttons, plus\n\t\t *   page numbers\n\t\t *\n\t\t * Further methods can be added using {@link DataTable.ext.oPagination}.\n\t\t *  @type string\n\t\t *  @default simple_numbers\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.pagingType\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"pagingType\": \"full_numbers\"\n\t\t *      } );\n\t\t *    } )\n\t\t */\n\t\t\"sPaginationType\": \"simple_numbers\",\n\n\n\t\t/**\n\t\t * Enable horizontal scrolling. When a table is too wide to fit into a\n\t\t * certain layout, or you have a large number of columns in the table, you\n\t\t * can enable x-scrolling to show the table in a viewport, which can be\n\t\t * scrolled. This property can be `true` which will allow the table to\n\t\t * scroll horizontally when needed, or any CSS unit, or a number (in which\n\t\t * case it will be treated as a pixel measurement). Setting as simply `true`\n\t\t * is recommended.\n\t\t *  @type boolean|string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollX\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": true,\n\t\t *        \"scrollCollapse\": true\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollX\": \"\",\n\n\n\t\t/**\n\t\t * This property can be used to force a DataTable to use more width than it\n\t\t * might otherwise do when x-scrolling is enabled. For example if you have a\n\t\t * table which requires to be well spaced, this parameter is useful for\n\t\t * \"over-sizing\" the table, and thus forcing scrolling. This property can by\n\t\t * any CSS unit, or a number (in which case it will be treated as a pixel\n\t\t * measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @name DataTable.defaults.scrollXInner\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollX\": \"100%\",\n\t\t *        \"scrollXInner\": \"110%\"\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollXInner\": \"\",\n\n\n\t\t/**\n\t\t * Enable vertical scrolling. Vertical scrolling will constrain the DataTable\n\t\t * to the given height, and enable scrolling for any data which overflows the\n\t\t * current viewport. This can be used as an alternative to paging to display\n\t\t * a lot of data in a small area (although paging and scrolling can both be\n\t\t * enabled at the same time). This property can be any CSS unit, or a number\n\t\t * (in which case it will be treated as a pixel measurement).\n\t\t *  @type string\n\t\t *  @default <i>blank string - i.e. disabled</i>\n\t\t *\n\t\t *  @dtopt Features\n\t\t *  @name DataTable.defaults.scrollY\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"scrollY\": \"200px\",\n\t\t *        \"paginate\": false\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sScrollY\": \"\",\n\n\n\t\t/**\n\t\t * __Deprecated__ The functionality provided by this parameter has now been\n\t\t * superseded by that provided through `ajax`, which should be used instead.\n\t\t *\n\t\t * Set the HTTP method that is used to make the Ajax call for server-side\n\t\t * processing or Ajax sourced data.\n\t\t *  @type string\n\t\t *  @default GET\n\t\t *\n\t\t *  @dtopt Options\n\t\t *  @dtopt Server-side\n\t\t *  @name DataTable.defaults.serverMethod\n\t\t *\n\t\t *  @deprecated 1.10. Please use `ajax` for this functionality now.\n\t\t */\n\t\t\"sServerMethod\": \"GET\",\n\n\n\t\t/**\n\t\t * DataTables makes use of renderers when displaying HTML elements for\n\t\t * a table. These renderers can be added or modified by plug-ins to\n\t\t * generate suitable mark-up for a site. For example the Bootstrap\n\t\t * integration plug-in for DataTables uses a paging button renderer to\n\t\t * display pagination buttons in the mark-up required by Bootstrap.\n\t\t *\n\t\t * For further information about the renderers available see\n\t\t * DataTable.ext.renderer\n\t\t *  @type string|object\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.renderer\n\t\t *\n\t\t */\n\t\t\"renderer\": null\n\t};\n\n\t_fnHungarianMap( DataTable.defaults );\n\n\n\n\t/*\n\t * Developer note - See note in model.defaults.js about the use of Hungarian\n\t * notation and camel case.\n\t */\n\n\t/**\n\t * Column options that can be given to DataTables at initialisation time.\n\t *  @namespace\n\t */\n\tDataTable.defaults.column = {\n\t\t/**\n\t\t * Define which column(s) an order will occur on for this column. This\n\t\t * allows a column's ordering to take multiple columns into account when\n\t\t * doing a sort or use the data from a different column. For example first\n\t\t * name / last name columns make sense to do a multi-column sort over the\n\t\t * two columns.\n\t\t *  @type array|int\n\t\t *  @default null <i>Takes the value of the column index automatically</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderData\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderData\": [ 0, 1 ], \"targets\": [ 0 ] },\n\t\t *          { \"orderData\": [ 1, 0 ], \"targets\": [ 1 ] },\n\t\t *          { \"orderData\": 2, \"targets\": [ 2 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderData\": [ 0, 1 ] },\n\t\t *          { \"orderData\": [ 1, 0 ] },\n\t\t *          { \"orderData\": 2 },\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"aDataSort\": null,\n\t\t\"iDataSort\": -1,\n\n\n\t\t/**\n\t\t * You can control the default ordering direction, and even alter the\n\t\t * behaviour of the sort handler (i.e. only allow ascending ordering etc)\n\t\t * using this parameter.\n\t\t *  @type array\n\t\t *  @default [ 'asc', 'desc' ]\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderSequence\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderSequence\": [ \"asc\" ], \"targets\": [ 1 ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ], \"targets\": [ 2 ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ], \"targets\": [ 3 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          { \"orderSequence\": [ \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\", \"asc\", \"asc\" ] },\n\t\t *          { \"orderSequence\": [ \"desc\" ] },\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"asSorting\": [ 'asc', 'desc' ],\n\n\n\t\t/**\n\t\t * Enable or disable filtering on the data in this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.searchable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"searchable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"searchable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSearchable\": true,\n\n\n\t\t/**\n\t\t * Enable or disable ordering on this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderable\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderable\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"orderable\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bSortable\": true,\n\n\n\t\t/**\n\t\t * Enable or disable the display of this column.\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t *\n\t\t *  @name DataTable.defaults.column.visible\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"visible\": false, \"targets\": [ 0 ] }\n\t\t *        ] } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"visible\": false },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ] } );\n\t\t *    } );\n\t\t */\n\t\t\"bVisible\": true,\n\n\n\t\t/**\n\t\t * Developer definable function that is called whenever a cell is created (Ajax source,\n\t\t * etc) or processed for input (DOM source). This can be used as a compliment to mRender\n\t\t * allowing you to modify the DOM element (add background colour for example) when the\n\t\t * element is available.\n\t\t *  @type function\n\t\t *  @param {element} td The TD node that has been created\n\t\t *  @param {*} cellData The Data for the cell\n\t\t *  @param {array|object} rowData The data for the whole row\n\t\t *  @param {int} row The row index for the aoData data store\n\t\t *  @param {int} col The column index for aoColumns\n\t\t *\n\t\t *  @name DataTable.defaults.column.createdCell\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [3],\n\t\t *          \"createdCell\": function (td, cellData, rowData, row, col) {\n\t\t *            if ( cellData == \"1.7\" ) {\n\t\t *              $(td).css('color', 'blue')\n\t\t *            }\n\t\t *          }\n\t\t *        } ]\n\t\t *      });\n\t\t *    } );\n\t\t */\n\t\t\"fnCreatedCell\": null,\n\n\n\t\t/**\n\t\t * This parameter has been replaced by `data` in DataTables to ensure naming\n\t\t * consistency. `dataProp` can still be used, as there is backwards\n\t\t * compatibility in DataTables for this option, but it is strongly\n\t\t * recommended that you use `data` in preference to `dataProp`.\n\t\t *  @name DataTable.defaults.column.dataProp\n\t\t */\n\n\n\t\t/**\n\t\t * This property can be used to read data from any data source property,\n\t\t * including deeply nested objects / properties. `data` can be given in a\n\t\t * number of different ways which effect its behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object. Note that\n\t\t *      function notation is recommended for use in `render` rather than\n\t\t *      `data` as it is much simpler to use as a renderer.\n\t\t * * `null` - use the original data source for the row rather than plucking\n\t\t *   data directly from it. This action has effects on two other\n\t\t *   initialisation options:\n\t\t *    * `defaultContent` - When null is given as the `data` option and\n\t\t *      `defaultContent` is specified for the column, the value defined by\n\t\t *      `defaultContent` will be used for the cell.\n\t\t *    * `render` - When null is used for the `data` option and the `render`\n\t\t *      option is specified for the column, the whole data source for the\n\t\t *      row is used for the renderer.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * `{array|object}` The data source for the row\n\t\t *      * `{string}` The type call data requested - this will be 'set' when\n\t\t *        setting data or 'filter', 'display', 'type', 'sort' or undefined\n\t\t *        when gathering data. Note that when `undefined` is given for the\n\t\t *        type DataTables expects to get the raw data for the object back<\n\t\t *      * `{*}` Data to set when the second parameter is 'set'.\n\t\t *    * Return:\n\t\t *      * The return value from the function is not required when 'set' is\n\t\t *        the type of call, but otherwise the return is what will be used\n\t\t *        for the data requested.\n\t\t *\n\t\t * Note that `data` is a getter and setter option. If you just require\n\t\t * formatting of data for output, you will likely want to use `render` which\n\t\t * is simply a getter and thus simpler to use.\n\t\t *\n\t\t * Note that prior to DataTables 1.9.2 `data` was called `mDataProp`. The\n\t\t * name change reflects the flexibility of this property and is consistent\n\t\t * with the naming of mRender. If 'mDataProp' is given, then it will still\n\t\t * be used by DataTables, as it automatically maps the old name to the new\n\t\t * if required.\n\t\t *\n\t\t *  @type string|int|function|null\n\t\t *  @default null <i>Use automatically calculated column index</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.data\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Read table data from objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {value},\n\t\t *    //      \"version\": {value},\n\t\t *    //      \"grade\": {value}\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/objects.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform\" },\n\t\t *          { \"data\": \"version\" },\n\t\t *          { \"data\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Read information from deeply nested objects\n\t\t *    // JSON structure for each row:\n\t\t *    //   {\n\t\t *    //      \"engine\": {value},\n\t\t *    //      \"browser\": {value},\n\t\t *    //      \"platform\": {\n\t\t *    //         \"inner\": {value}\n\t\t *    //      },\n\t\t *    //      \"details\": [\n\t\t *    //         {value}, {value}\n\t\t *    //      ]\n\t\t *    //   }\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          { \"data\": \"platform.inner\" },\n\t\t *          { \"data\": \"platform.details.0\" },\n\t\t *          { \"data\": \"platform.details.1\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `data` as a function to provide different information for\n\t\t *    // sorting, filtering and display. In this case, currency (price)\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": function ( source, type, val ) {\n\t\t *            if (type === 'set') {\n\t\t *              source.price = val;\n\t\t *              // Store the computed dislay and filter values for efficiency\n\t\t *              source.price_display = val==\"\" ? \"\" : \"$\"+numberFormat(val);\n\t\t *              source.price_filter  = val==\"\" ? \"\" : \"$\"+numberFormat(val)+\" \"+val;\n\t\t *              return;\n\t\t *            }\n\t\t *            else if (type === 'display') {\n\t\t *              return source.price_display;\n\t\t *            }\n\t\t *            else if (type === 'filter') {\n\t\t *              return source.price_filter;\n\t\t *            }\n\t\t *            // 'sort', 'type' and undefined all just use the integer\n\t\t *            return source.price;\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using default content\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null,\n\t\t *          \"defaultContent\": \"Click to edit\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using array notation - outputting a list from an array\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"name[, ]\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t */\n\t\t\"mData\": null,\n\n\n\t\t/**\n\t\t * This property is the rendering partner to `data` and it is suggested that\n\t\t * when you want to manipulate data for display (including filtering,\n\t\t * sorting etc) without altering the underlying data for the table, use this\n\t\t * property. `render` can be considered to be the the read only companion to\n\t\t * `data` which is read / write (then as such more complex). Like `data`\n\t\t * this option can be given in a number of different ways to effect its\n\t\t * behaviour:\n\t\t *\n\t\t * * `integer` - treated as an array index for the data source. This is the\n\t\t *   default that DataTables uses (incrementally increased for each column).\n\t\t * * `string` - read an object property from the data source. There are\n\t\t *   three 'special' options that can be used in the string to alter how\n\t\t *   DataTables reads the data from the source object:\n\t\t *    * `.` - Dotted Javascript notation. Just as you use a `.` in\n\t\t *      Javascript to read from nested objects, so to can the options\n\t\t *      specified in `data`. For example: `browser.version` or\n\t\t *      `browser.name`. If your object parameter name contains a period, use\n\t\t *      `\\\\` to escape it - i.e. `first\\\\.name`.\n\t\t *    * `[]` - Array notation. DataTables can automatically combine data\n\t\t *      from and array source, joining the data with the characters provided\n\t\t *      between the two brackets. For example: `name[, ]` would provide a\n\t\t *      comma-space separated list from the source array. If no characters\n\t\t *      are provided between the brackets, the original array source is\n\t\t *      returned.\n\t\t *    * `()` - Function notation. Adding `()` to the end of a parameter will\n\t\t *      execute a function of the name given. For example: `browser()` for a\n\t\t *      simple function on the data source, `browser.version()` for a\n\t\t *      function in a nested property or even `browser().version` to get an\n\t\t *      object property if the function called returns an object.\n\t\t * * `object` - use different data for the different data types requested by\n\t\t *   DataTables ('filter', 'display', 'type' or 'sort'). The property names\n\t\t *   of the object is the data type the property refers to and the value can\n\t\t *   defined using an integer, string or function using the same rules as\n\t\t *   `render` normally does. Note that an `_` option _must_ be specified.\n\t\t *   This is the default value to use if you haven't specified a value for\n\t\t *   the data type requested by DataTables.\n\t\t * * `function` - the function given will be executed whenever DataTables\n\t\t *   needs to set or get the data for a cell in the column. The function\n\t\t *   takes three parameters:\n\t\t *    * Parameters:\n\t\t *      * {array|object} The data source for the row (based on `data`)\n\t\t *      * {string} The type call data requested - this will be 'filter',\n\t\t *        'display', 'type' or 'sort'.\n\t\t *      * {array|object} The full data source for the row (not based on\n\t\t *        `data`)\n\t\t *    * Return:\n\t\t *      * The return value from the function is what will be used for the\n\t\t *        data requested.\n\t\t *\n\t\t *  @type string|int|function|object|null\n\t\t *  @default null Use the data source value.\n\t\t *\n\t\t *  @name DataTable.defaults.column.render\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Create a comma separated list from an array of objects\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"ajaxSource\": \"sources/deep.txt\",\n\t\t *        \"columns\": [\n\t\t *          { \"data\": \"engine\" },\n\t\t *          { \"data\": \"browser\" },\n\t\t *          {\n\t\t *            \"data\": \"platform\",\n\t\t *            \"render\": \"[, ].name\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Execute a function to obtain data\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": \"browserName()\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // As an object, extracting different data for the different types\n\t\t *    // This would be used with a data source such as:\n\t\t *    //   { \"phone\": 5552368, \"phone_filter\": \"5552368 555-2368\", \"phone_display\": \"555-2368\" }\n\t\t *    // Here the `phone` integer is used for sorting and type detection, while `phone_filter`\n\t\t *    // (which has both forms) is used for filtering for if a user inputs either format, while\n\t\t *    // the formatted phone number is the one that is shown in the table.\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": null, // Use the full data source object for the renderer's source\n\t\t *          \"render\": {\n\t\t *            \"_\": \"phone\",\n\t\t *            \"filter\": \"phone_filter\",\n\t\t *            \"display\": \"phone_display\"\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Use as a function to create a link from the data source\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"data\": \"download_link\",\n\t\t *          \"render\": function ( data, type, full ) {\n\t\t *            return '<a href=\"'+data+'\">Download</a>';\n\t\t *          }\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"mRender\": null,\n\n\n\t\t/**\n\t\t * Change the cell type created for the column - either TD cells or TH cells. This\n\t\t * can be useful as TH cells have semantic meaning in the table body, allowing them\n\t\t * to act as a header for a row (you may wish to add scope='row' to the TH elements).\n\t\t *  @type string\n\t\t *  @default td\n\t\t *\n\t\t *  @name DataTable.defaults.column.cellType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Make the first column use TH cells\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [ {\n\t\t *          \"targets\": [ 0 ],\n\t\t *          \"cellType\": \"th\"\n\t\t *        } ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sCellType\": \"td\",\n\n\n\t\t/**\n\t\t * Class to give to each cell in this column.\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.class\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"class\": \"my_class\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"class\": \"my_class\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sClass\": \"\",\n\n\t\t/**\n\t\t * When DataTables calculates the column widths to assign to each column,\n\t\t * it finds the longest string in each column and then constructs a\n\t\t * temporary table and reads the widths from that. The problem with this\n\t\t * is that \"mmm\" is much wider then \"iiii\", but the latter is a longer\n\t\t * string - thus the calculation can go wrong (doing it properly and putting\n\t\t * it into an DOM object and measuring that is horribly(!) slow). Thus as\n\t\t * a \"work around\" we provide this option. It will append its value to the\n\t\t * text that is found to be the longest string for the column - i.e. padding.\n\t\t * Generally you shouldn't need this!\n\t\t *  @type string\n\t\t *  @default <i>Empty string<i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.contentPadding\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"contentPadding\": \"mmm\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sContentPadding\": \"\",\n\n\n\t\t/**\n\t\t * Allows a default value to be given for a column's data, and will be used\n\t\t * whenever a null data source is encountered (this can be because `data`\n\t\t * is set to null, or because the data source itself is null).\n\t\t *  @type string\n\t\t *  @default null\n\t\t *\n\t\t *  @name DataTable.defaults.column.defaultContent\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\",\n\t\t *            \"targets\": [ -1 ]\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          {\n\t\t *            \"data\": null,\n\t\t *            \"defaultContent\": \"Edit\"\n\t\t *          }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sDefaultContent\": null,\n\n\n\t\t/**\n\t\t * This parameter is only used in DataTables' server-side processing. It can\n\t\t * be exceptionally useful to know what columns are being displayed on the\n\t\t * client side, and to map these to database fields. When defined, the names\n\t\t * also allow DataTables to reorder information from the server if it comes\n\t\t * back in an unexpected order (i.e. if you switch your columns around on the\n\t\t * client-side, your server-side code does not also need updating).\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.name\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"name\": \"engine\", \"targets\": [ 0 ] },\n\t\t *          { \"name\": \"browser\", \"targets\": [ 1 ] },\n\t\t *          { \"name\": \"platform\", \"targets\": [ 2 ] },\n\t\t *          { \"name\": \"version\", \"targets\": [ 3 ] },\n\t\t *          { \"name\": \"grade\", \"targets\": [ 4 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"name\": \"engine\" },\n\t\t *          { \"name\": \"browser\" },\n\t\t *          { \"name\": \"platform\" },\n\t\t *          { \"name\": \"version\" },\n\t\t *          { \"name\": \"grade\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sName\": \"\",\n\n\n\t\t/**\n\t\t * Defines a data source type for the ordering which can be used to read\n\t\t * real-time information from the table (updating the internally cached\n\t\t * version) prior to ordering. This allows ordering to occur on user\n\t\t * editable elements such as form inputs.\n\t\t *  @type string\n\t\t *  @default std\n\t\t *\n\t\t *  @name DataTable.defaults.column.orderDataType\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"orderDataType\": \"dom-text\", \"targets\": [ 2, 3 ] },\n\t\t *          { \"type\": \"numeric\", \"targets\": [ 3 ] },\n\t\t *          { \"orderDataType\": \"dom-select\", \"targets\": [ 4 ] },\n\t\t *          { \"orderDataType\": \"dom-checkbox\", \"targets\": [ 5 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          null,\n\t\t *          null,\n\t\t *          { \"orderDataType\": \"dom-text\" },\n\t\t *          { \"orderDataType\": \"dom-text\", \"type\": \"numeric\" },\n\t\t *          { \"orderDataType\": \"dom-select\" },\n\t\t *          { \"orderDataType\": \"dom-checkbox\" }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sSortDataType\": \"std\",\n\n\n\t\t/**\n\t\t * The title of this column.\n\t\t *  @type string\n\t\t *  @default null <i>Derived from the 'TH' value for this column in the\n\t\t *    original HTML table.</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.title\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"title\": \"My column title\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"title\": \"My column title\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sTitle\": null,\n\n\n\t\t/**\n\t\t * The type allows you to specify how the data for this column will be\n\t\t * ordered. Four types (string, numeric, date and html (which will strip\n\t\t * HTML tags before ordering)) are currently available. Note that only date\n\t\t * formats understood by Javascript's Date() object will be accepted as type\n\t\t * date. For example: \"Mar 26, 2008 5:03 PM\". May take the values: 'string',\n\t\t * 'numeric', 'date' or 'html' (by default). Further types can be adding\n\t\t * through plug-ins.\n\t\t *  @type string\n\t\t *  @default null <i>Auto-detected from raw data</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.type\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"type\": \"html\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"type\": \"html\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sType\": null,\n\n\n\t\t/**\n\t\t * Defining the width of the column, this parameter may take any CSS value\n\t\t * (3em, 20px etc). DataTables applies 'smart' widths to columns which have not\n\t\t * been given a specific width through this interface ensuring that the table\n\t\t * remains readable.\n\t\t *  @type string\n\t\t *  @default null <i>Automatic</i>\n\t\t *\n\t\t *  @name DataTable.defaults.column.width\n\t\t *  @dtopt Columns\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columnDefs`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columnDefs\": [\n\t\t *          { \"width\": \"20%\", \"targets\": [ 0 ] }\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t *\n\t\t *  @example\n\t\t *    // Using `columns`\n\t\t *    $(document).ready( function() {\n\t\t *      $('#example').dataTable( {\n\t\t *        \"columns\": [\n\t\t *          { \"width\": \"20%\" },\n\t\t *          null,\n\t\t *          null,\n\t\t *          null,\n\t\t *          null\n\t\t *        ]\n\t\t *      } );\n\t\t *    } );\n\t\t */\n\t\t\"sWidth\": null\n\t};\n\n\t_fnHungarianMap( DataTable.defaults.column );\n\n\n\n\t/**\n\t * DataTables settings object - this holds all the information needed for a\n\t * given table, including configuration, data and current application of the\n\t * table options. DataTables does not have a single instance for each DataTable\n\t * with the settings attached to that instance, but rather instances of the\n\t * DataTable \"class\" are created on-the-fly as needed (typically by a\n\t * $().dataTable() call) and the settings object is then applied to that\n\t * instance.\n\t *\n\t * Note that this object is related to {@link DataTable.defaults} but this\n\t * one is the internal data store for DataTables's cache of columns. It should\n\t * NOT be manipulated outside of DataTables. Any configuration should be done\n\t * through the initialisation options.\n\t *  @namespace\n\t *  @todo Really should attach the settings object to individual instances so we\n\t *    don't need to create new instances on each $().dataTable() call (if the\n\t *    table already exists). It would also save passing oSettings around and\n\t *    into every single function. However, this is a very significant\n\t *    architecture change for DataTables and will almost certainly break\n\t *    backwards compatibility with older installations. This is something that\n\t *    will be done in 2.0.\n\t */\n\tDataTable.models.oSettings = {\n\t\t/**\n\t\t * Primary features of DataTables and their enablement state.\n\t\t *  @namespace\n\t\t */\n\t\t\"oFeatures\": {\n\n\t\t\t/**\n\t\t\t * Flag to say if DataTables should automatically try to calculate the\n\t\t\t * optimum table and columns widths (true) or not (false).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bAutoWidth\": null,\n\n\t\t\t/**\n\t\t\t * Delay the creation of TR and TD elements until they are actually\n\t\t\t * needed by a driven page draw. This can give a significant speed\n\t\t\t * increase for Ajax source and Javascript source data, but makes no\n\t\t\t * difference at all fro DOM and server-side processing tables.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bDeferRender\": null,\n\n\t\t\t/**\n\t\t\t * Enable filtering on the table or not. Note that if this is disabled\n\t\t\t * then there is no filtering at all on the table, including fnFilter.\n\t\t\t * To just remove the filtering input use sDom and remove the 'f' option.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bFilter\": null,\n\n\t\t\t/**\n\t\t\t * Table information element (the 'Showing x of y records' div) enable\n\t\t\t * flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bInfo\": null,\n\n\t\t\t/**\n\t\t\t * Present a user control allowing the end user to change the page size\n\t\t\t * when pagination is enabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bLengthChange\": null,\n\n\t\t\t/**\n\t\t\t * Pagination enabled or not. Note that if this is disabled then length\n\t\t\t * changing must also be disabled.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bPaginate\": null,\n\n\t\t\t/**\n\t\t\t * Processing indicator enable flag whenever DataTables is enacting a\n\t\t\t * user request - typically an Ajax request for server-side processing.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bProcessing\": null,\n\n\t\t\t/**\n\t\t\t * Server-side processing enabled flag - when enabled DataTables will\n\t\t\t * get all data from the server for every draw - there is no filtering,\n\t\t\t * sorting or paging done on the client-side.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bServerSide\": null,\n\n\t\t\t/**\n\t\t\t * Sorting enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSort\": null,\n\n\t\t\t/**\n\t\t\t * Multi-column sorting\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortMulti\": null,\n\n\t\t\t/**\n\t\t\t * Apply a class to the columns which are being sorted to provide a\n\t\t\t * visual highlight or not. This can slow things down when enabled since\n\t\t\t * there is a lot of DOM interaction.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bSortClasses\": null,\n\n\t\t\t/**\n\t\t\t * State saving enablement flag.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bStateSave\": null\n\t\t},\n\n\n\t\t/**\n\t\t * Scrolling settings for a table.\n\t\t *  @namespace\n\t\t */\n\t\t\"oScroll\": {\n\t\t\t/**\n\t\t\t * When the table is shorter in height than sScrollY, collapse the\n\t\t\t * table container down to the height of the table (when true).\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type boolean\n\t\t\t */\n\t\t\t\"bCollapse\": null,\n\n\t\t\t/**\n\t\t\t * Width of the scrollbar for the web-browser's platform. Calculated\n\t\t\t * during table initialisation.\n\t\t\t *  @type int\n\t\t\t *  @default 0\n\t\t\t */\n\t\t\t\"iBarWidth\": 0,\n\n\t\t\t/**\n\t\t\t * Viewport width for horizontal scrolling. Horizontal scrolling is\n\t\t\t * disabled if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sX\": null,\n\n\t\t\t/**\n\t\t\t * Width to expand the table to when using x-scrolling. Typically you\n\t\t\t * should not need to use this.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t *  @deprecated\n\t\t\t */\n\t\t\t\"sXInner\": null,\n\n\t\t\t/**\n\t\t\t * Viewport height for vertical scrolling. Vertical scrolling is disabled\n\t\t\t * if an empty string.\n\t\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t\t * set a default use {@link DataTable.defaults}.\n\t\t\t *  @type string\n\t\t\t */\n\t\t\t\"sY\": null\n\t\t},\n\n\t\t/**\n\t\t * Language information for the table.\n\t\t *  @namespace\n\t\t *  @extends DataTable.defaults.oLanguage\n\t\t */\n\t\t\"oLanguage\": {\n\t\t\t/**\n\t\t\t * Information callback function. See\n\t\t\t * {@link DataTable.defaults.fnInfoCallback}\n\t\t\t *  @type function\n\t\t\t *  @default null\n\t\t\t */\n\t\t\t\"fnInfoCallback\": null\n\t\t},\n\n\t\t/**\n\t\t * Browser support parameters\n\t\t *  @namespace\n\t\t */\n\t\t\"oBrowser\": {\n\t\t\t/**\n\t\t\t * Indicate if the browser incorrectly calculates width:100% inside a\n\t\t\t * scrolling element (IE6/7)\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollOversize\": false,\n\n\t\t\t/**\n\t\t\t * Determine if the vertical scrollbar is on the right or left of the\n\t\t\t * scrolling container - needed for rtl language layout, although not\n\t\t\t * all browsers move the scrollbar (Safari).\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\t\"bScrollbarLeft\": false\n\t\t},\n\n\n\t\t\"ajax\": null,\n\n\n\t\t/**\n\t\t * Array referencing the nodes which are used for the features. The\n\t\t * parameters of this object match what is allowed by sDom - i.e.\n\t\t *   <ul>\n\t\t *     <li>'l' - Length changing</li>\n\t\t *     <li>'f' - Filtering input</li>\n\t\t *     <li>'t' - The table!</li>\n\t\t *     <li>'i' - Information</li>\n\t\t *     <li>'p' - Pagination</li>\n\t\t *     <li>'r' - pRocessing</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aanFeatures\": [],\n\n\t\t/**\n\t\t * Store data information - see {@link DataTable.models.oRow} for detailed\n\t\t * information.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoData\": [],\n\n\t\t/**\n\t\t * Array of indexes which are in the current display (after filtering etc)\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplay\": [],\n\n\t\t/**\n\t\t * Array of indexes for display - no filtering\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aiDisplayMaster\": [],\n\n\t\t/**\n\t\t * Store information about each column that is in use\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoColumns\": [],\n\n\t\t/**\n\t\t * Store information about the table's header\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeader\": [],\n\n\t\t/**\n\t\t * Store information about the table's footer\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooter\": [],\n\n\t\t/**\n\t\t * Store the applied global search information in case we want to force a\n\t\t * research or compare the old search to a new one.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @namespace\n\t\t *  @extends DataTable.models.oSearch\n\t\t */\n\t\t\"oPreviousSearch\": {},\n\n\t\t/**\n\t\t * Store the applied search for each column - see\n\t\t * {@link DataTable.models.oSearch} for the format that is used for the\n\t\t * filtering information for each column.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreSearchCols\": [],\n\n\t\t/**\n\t\t * Sorting that is applied to the table. Note that the inner arrays are\n\t\t * used in the following manner:\n\t\t * <ul>\n\t\t *   <li>Index 0 - column number</li>\n\t\t *   <li>Index 1 - current sorting direction</li>\n\t\t * </ul>\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @todo These inner arrays should really be objects\n\t\t */\n\t\t\"aaSorting\": null,\n\n\t\t/**\n\t\t * Sorting that is always applied to the table (i.e. prefixed in front of\n\t\t * aaSorting).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aaSortingFixed\": [],\n\n\t\t/**\n\t\t * Classes to use for the striping of a table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asStripeClasses\": null,\n\n\t\t/**\n\t\t * If restoring a table - we should restore its striping classes as well\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"asDestroyStripes\": [],\n\n\t\t/**\n\t\t * If restoring a table - we should restore its width\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"sDestroyWidth\": 0,\n\n\t\t/**\n\t\t * Callback functions array for every time a row is inserted (i.e. on a draw).\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCallback\": [],\n\n\t\t/**\n\t\t * Callback functions for the header on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoHeaderCallback\": [],\n\n\t\t/**\n\t\t * Callback function for the footer on each draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoFooterCallback\": [],\n\n\t\t/**\n\t\t * Array of callback functions for draw callback functions\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDrawCallback\": [],\n\n\t\t/**\n\t\t * Array of callback functions for row created function\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoRowCreatedCallback\": [],\n\n\t\t/**\n\t\t * Callback functions for just before the table is redrawn. A return of\n\t\t * false will be used to cancel the draw.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoPreDrawCallback\": [],\n\n\t\t/**\n\t\t * Callback functions for when the table has been initialised.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoInitComplete\": [],\n\n\n\t\t/**\n\t\t * Callbacks for modifying the settings to be stored for state saving, prior to\n\t\t * saving state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSaveParams\": [],\n\n\t\t/**\n\t\t * Callbacks for modifying the settings that have been stored for state saving\n\t\t * prior to using the stored values to restore the state.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoadParams\": [],\n\n\t\t/**\n\t\t * Callbacks for operating on the settings object once the saved state has been\n\t\t * loaded\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoaded\": [],\n\n\t\t/**\n\t\t * Cache the table ID for quick access\n\t\t *  @type string\n\t\t *  @default <i>Empty string</i>\n\t\t */\n\t\t\"sTableId\": \"\",\n\n\t\t/**\n\t\t * The TABLE node for the main table\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTable\": null,\n\n\t\t/**\n\t\t * Permanent ref to the thead element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTHead\": null,\n\n\t\t/**\n\t\t * Permanent ref to the tfoot element - if it exists\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTFoot\": null,\n\n\t\t/**\n\t\t * Permanent ref to the tbody element\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTBody\": null,\n\n\t\t/**\n\t\t * Cache the wrapper node (contains all DataTables controlled elements)\n\t\t *  @type node\n\t\t *  @default null\n\t\t */\n\t\t\"nTableWrapper\": null,\n\n\t\t/**\n\t\t * Indicate if when using server-side processing the loading of data\n\t\t * should be deferred until the second draw.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDeferLoading\": false,\n\n\t\t/**\n\t\t * Indicate if all required information has been read in\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bInitialised\": false,\n\n\t\t/**\n\t\t * Information about open rows. Each object in the array has the parameters\n\t\t * 'nTr' and 'nParent'\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoOpenRows\": [],\n\n\t\t/**\n\t\t * Dictate the positioning of DataTables' control elements - see\n\t\t * {@link DataTable.model.oInit.sDom}.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sDom\": null,\n\n\t\t/**\n\t\t * Which type of pagination should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default two_button\n\t\t */\n\t\t\"sPaginationType\": \"two_button\",\n\n\t\t/**\n\t\t * The state duration (for `stateSave`) in seconds.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iStateDuration\": 0,\n\n\t\t/**\n\t\t * Array of callback functions for state saving. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the JSON string to save that has been thus far created. Returns\n\t\t *       a JSON string to be inserted into a json object\n\t\t *       (i.e. '\"param\": [ 0, 1, 2]')</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateSave\": [],\n\n\t\t/**\n\t\t * Array of callback functions for state loading. Each array element is an\n\t\t * object with the following parameters:\n\t\t *   <ul>\n\t\t *     <li>function:fn - function to call. Takes two parameters, oSettings\n\t\t *       and the object stored. May return false to cancel state loading</li>\n\t\t *     <li>string:sName - name of callback</li>\n\t\t *   </ul>\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoStateLoad\": [],\n\n\t\t/**\n\t\t * State that was loaded. Useful for back reference\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oLoadedState\": null,\n\n\t\t/**\n\t\t * Source url for AJAX data for the table.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sAjaxSource\": null,\n\n\t\t/**\n\t\t * Property from a given object from which to read the table data from. This\n\t\t * can be an empty string (when not server-side processing), in which case\n\t\t * it is  assumed an an array is given directly.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sAjaxDataProp\": null,\n\n\t\t/**\n\t\t * Note if draw should be blocked while getting data\n\t\t *  @type boolean\n\t\t *  @default true\n\t\t */\n\t\t\"bAjaxDataGet\": true,\n\n\t\t/**\n\t\t * The last jQuery XHR object that was used for server-side data gathering.\n\t\t * This can be used for working with the XHR information in one of the\n\t\t * callbacks\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"jqXHR\": null,\n\n\t\t/**\n\t\t * JSON returned from the server in the last Ajax request\n\t\t *  @type object\n\t\t *  @default undefined\n\t\t */\n\t\t\"json\": undefined,\n\n\t\t/**\n\t\t * Function to get the server-side data.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnServerData\": null,\n\n\t\t/**\n\t\t * Functions which are called prior to sending an Ajax request so extra\n\t\t * parameters can easily be sent to the server\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoServerParams\": [],\n\n\t\t/**\n\t\t * Send the XHR HTTP method - GET or POST (could be PUT or DELETE if\n\t\t * required).\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type string\n\t\t */\n\t\t\"sServerMethod\": null,\n\n\t\t/**\n\t\t * Format numbers for display.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type function\n\t\t */\n\t\t\"fnFormatNumber\": null,\n\n\t\t/**\n\t\t * List of options that can be used for the user selectable length menu.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLengthMenu\": null,\n\n\t\t/**\n\t\t * Counter for the draws that the table does. Also used as a tracker for\n\t\t * server-side processing\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"iDraw\": 0,\n\n\t\t/**\n\t\t * Indicate if a redraw is being done - useful for Ajax\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t */\n\t\t\"bDrawing\": false,\n\n\t\t/**\n\t\t * Draw index (iDraw) of the last error when parsing the returned data\n\t\t *  @type int\n\t\t *  @default -1\n\t\t */\n\t\t\"iDrawError\": -1,\n\n\t\t/**\n\t\t * Paging display length\n\t\t *  @type int\n\t\t *  @default 10\n\t\t */\n\t\t\"_iDisplayLength\": 10,\n\n\t\t/**\n\t\t * Paging start point - aiDisplay index\n\t\t *  @type int\n\t\t *  @default 0\n\t\t */\n\t\t\"_iDisplayStart\": 0,\n\n\t\t/**\n\t\t * Server-side processing - number of records in the result set\n\t\t * (i.e. before filtering), Use fnRecordsTotal rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type int\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsTotal\": 0,\n\n\t\t/**\n\t\t * Server-side processing - number of records in the current display set\n\t\t * (i.e. after filtering). Use fnRecordsDisplay rather than\n\t\t * this property to get the value of the number of records, regardless of\n\t\t * the server-side processing setting.\n\t\t *  @type boolean\n\t\t *  @default 0\n\t\t *  @private\n\t\t */\n\t\t\"_iRecordsDisplay\": 0,\n\n\t\t/**\n\t\t * Flag to indicate if jQuery UI marking and classes should be used.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bJUI\": null,\n\n\t\t/**\n\t\t * The classes to use for the table\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oClasses\": {},\n\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if filtering has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bFiltered\": false,\n\n\t\t/**\n\t\t * Flag attached to the settings object so you can check in the draw\n\t\t * callback if sorting has been done in the draw. Deprecated in favour of\n\t\t * events.\n\t\t *  @type boolean\n\t\t *  @default false\n\t\t *  @deprecated\n\t\t */\n\t\t\"bSorted\": false,\n\n\t\t/**\n\t\t * Indicate that if multiple rows are in the header and there is more than\n\t\t * one unique cell per column, if the top one (true) or bottom one (false)\n\t\t * should be used for sorting / title by DataTables.\n\t\t * Note that this parameter will be set by the initialisation routine. To\n\t\t * set a default use {@link DataTable.defaults}.\n\t\t *  @type boolean\n\t\t */\n\t\t\"bSortCellsTop\": null,\n\n\t\t/**\n\t\t * Initialisation object that is used for the table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInit\": null,\n\n\t\t/**\n\t\t * Destroy callback functions - for plug-ins to attach themselves to the\n\t\t * destroy so they can clean up markup and events.\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aoDestroyCallback\": [],\n\n\n\t\t/**\n\t\t * Get the number of records in the current record set, before filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsTotal\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsTotal * 1 :\n\t\t\t\tthis.aiDisplayMaster.length;\n\t\t},\n\n\t\t/**\n\t\t * Get the number of records in the current record set, after filtering\n\t\t *  @type function\n\t\t */\n\t\t\"fnRecordsDisplay\": function ()\n\t\t{\n\t\t\treturn _fnDataSource( this ) == 'ssp' ?\n\t\t\t\tthis._iRecordsDisplay * 1 :\n\t\t\t\tthis.aiDisplay.length;\n\t\t},\n\n\t\t/**\n\t\t * Get the display end point - aiDisplay index\n\t\t *  @type function\n\t\t */\n\t\t\"fnDisplayEnd\": function ()\n\t\t{\n\t\t\tvar\n\t\t\t\tlen      = this._iDisplayLength,\n\t\t\t\tstart    = this._iDisplayStart,\n\t\t\t\tcalc     = start + len,\n\t\t\t\trecords  = this.aiDisplay.length,\n\t\t\t\tfeatures = this.oFeatures,\n\t\t\t\tpaginate = features.bPaginate;\n\n\t\t\tif ( features.bServerSide ) {\n\t\t\t\treturn paginate === false || len === -1 ?\n\t\t\t\t\tstart + records :\n\t\t\t\t\tMath.min( start+len, this._iRecordsDisplay );\n\t\t\t}\n\t\t\telse {\n\t\t\t\treturn ! paginate || calc>records || len===-1 ?\n\t\t\t\t\trecords :\n\t\t\t\t\tcalc;\n\t\t\t}\n\t\t},\n\n\t\t/**\n\t\t * The DataTables object for this table\n\t\t *  @type object\n\t\t *  @default null\n\t\t */\n\t\t\"oInstance\": null,\n\n\t\t/**\n\t\t * Unique identifier for each instance of the DataTables object. If there\n\t\t * is an ID on the table node, then it takes that value, otherwise an\n\t\t * incrementing internal counter is used.\n\t\t *  @type string\n\t\t *  @default null\n\t\t */\n\t\t\"sInstance\": null,\n\n\t\t/**\n\t\t * tabindex attribute value that is added to DataTables control elements, allowing\n\t\t * keyboard navigation of the table and its controls.\n\t\t */\n\t\t\"iTabIndex\": 0,\n\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollHead\": null,\n\n\t\t/**\n\t\t * DIV container for the footer scrolling table if scrolling\n\t\t */\n\t\t\"nScrollFoot\": null,\n\n\t\t/**\n\t\t * Last applied sort\n\t\t *  @type array\n\t\t *  @default []\n\t\t */\n\t\t\"aLastSort\": [],\n\n\t\t/**\n\t\t * Stored plug-in instances\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\t\"oPlugins\": {}\n\t};\n\n\t/**\n\t * Extension object for DataTables that is used to provide all extension\n\t * options.\n\t *\n\t * Note that the `DataTable.ext` object is available through\n\t * `jQuery.fn.dataTable.ext` where it may be accessed and manipulated. It is\n\t * also aliased to `jQuery.fn.dataTableExt` for historic reasons.\n\t *  @namespace\n\t *  @extends DataTable.models.ext\n\t */\n\n\n\t/**\n\t * DataTables extensions\n\t *\n\t * This namespace acts as a collection area for plug-ins that can be used to\n\t * extend DataTables capabilities. Indeed many of the build in methods\n\t * use this method to provide their own capabilities (sorting methods for\n\t * example).\n\t *\n\t * Note that this namespace is aliased to `jQuery.fn.dataTableExt` for legacy\n\t * reasons\n\t *\n\t *  @namespace\n\t */\n\tDataTable.ext = _ext = {\n\t\t/**\n\t\t * Element class names\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tclasses: {},\n\n\n\t\t/**\n\t\t * Error reporting.\n\t\t *\n\t\t * How should DataTables report an error. Can take the value 'alert' or\n\t\t * 'throw'\n\t\t *\n\t\t *  @type string\n\t\t *  @default alert\n\t\t */\n\t\terrMode: \"alert\",\n\n\n\t\t/**\n\t\t * Feature plug-ins.\n\t\t *\n\t\t * This is an array of objects which describe the feature plug-ins that are\n\t\t * available to DataTables. These feature plug-ins are then available for\n\t\t * use through the `dom` initialisation option.\n\t\t *\n\t\t * Each feature plug-in is described by an object which must have the\n\t\t * following properties:\n\t\t *\n\t\t * * `fnInit` - function that is used to initialise the plug-in,\n\t\t * * `cFeature` - a character so the feature can be enabled by the `dom`\n\t\t *   instillation option. This is case sensitive.\n\t\t *\n\t\t * The `fnInit` function has the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {node|null} The element which contains your feature. Note that the\n\t\t *   return may also be void if your plug-in does not require to inject any\n\t\t *   DOM elements into DataTables control (`dom`) - for example this might\n\t\t *   be useful when developing a plug-in which allows table control via\n\t\t *   keyboard entry\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    $.fn.dataTable.ext.features.push( {\n\t\t *      \"fnInit\": function( oSettings ) {\n\t\t *        return new TableTools( { \"oDTSettings\": oSettings } );\n\t\t *      },\n\t\t *      \"cFeature\": \"T\"\n\t\t *    } );\n\t\t */\n\t\tfeature: [],\n\n\n\t\t/**\n\t\t * Row searching.\n\t\t *\n\t\t * This method of searching is complimentary to the default type based\n\t\t * searching, and a lot more comprehensive as it allows you complete control\n\t\t * over the searching logic. Each element in this array is a function\n\t\t * (parameters described below) that is called for every row in the table,\n\t\t * and your logic decides if it should be included in the searching data set\n\t\t * or not.\n\t\t *\n\t\t * Searching functions have the following input parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{array|object}` Data for the row to be processed (same as the\n\t\t *    original format that was passed in as the data source, or an array\n\t\t *    from a DOM data source\n\t\t * 3. `{int}` Row index ({@link DataTable.models.oSettings.aoData}), which\n\t\t *    can be useful to retrieve the `TR` element if you need DOM interaction.\n\t\t *\n\t\t * And the following return is expected:\n\t\t *\n\t\t * * {boolean} Include the row in the searched result set (true) or not\n\t\t *   (false)\n\t\t *\n\t\t * Note that as with the main search ability in DataTables, technically this\n\t\t * is \"filtering\", since it is subtractive. However, for consistency in\n\t\t * naming we call it searching here.\n\t\t *\n\t\t *  @type array\n\t\t *  @default []\n\t\t *\n\t\t *  @example\n\t\t *    // The following example shows custom search being applied to the\n\t\t *    // fourth column (i.e. the data[3] index) based on two input values\n\t\t *    // from the end-user, matching the data in a certain range.\n\t\t *    $.fn.dataTable.ext.search.push(\n\t\t *      function( settings, data, dataIndex ) {\n\t\t *        var min = document.getElementById('min').value * 1;\n\t\t *        var max = document.getElementById('max').value * 1;\n\t\t *        var version = data[3] == \"-\" ? 0 : data[3]*1;\n\t\t *\n\t\t *        if ( min == \"\" && max == \"\" ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min == \"\" && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && \"\" == max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        else if ( min < version && version < max ) {\n\t\t *          return true;\n\t\t *        }\n\t\t *        return false;\n\t\t *      }\n\t\t *    );\n\t\t */\n\t\tsearch: [],\n\n\n\t\t/**\n\t\t * Internal functions, exposed for used in plug-ins.\n\t\t *\n\t\t * Please note that you should not need to use the internal methods for\n\t\t * anything other than a plug-in (and even then, try to avoid if possible).\n\t\t * The internal function may change between releases.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t */\n\t\tinternal: {},\n\n\n\t\t/**\n\t\t * Legacy configuration options. Enable and disable legacy options that\n\t\t * are available in DataTables.\n\t\t *\n\t\t *  @type object\n\t\t */\n\t\tlegacy: {\n\t\t\t/**\n\t\t\t * Enable / disable DataTables 1.9 compatible server-side processing\n\t\t\t * requests\n\t\t\t *\n\t\t\t *  @type boolean\n\t\t\t *  @default false\n\t\t\t */\n\t\t\tajax: false\n\t\t},\n\n\n\t\t/**\n\t\t * Pagination plug-in methods.\n\t\t *\n\t\t * Each entry in this object is a function and defines which buttons should\n\t\t * be shown by the pagination rendering method that is used for the table:\n\t\t * {@link DataTable.ext.renderer.pageButton}. The renderer addresses how the\n\t\t * buttons are displayed in the document, while the functions here tell it\n\t\t * what buttons to display. This is done by returning an array of button\n\t\t * descriptions (what each button will do).\n\t\t *\n\t\t * Pagination types (the four built in options and any additional plug-in\n\t\t * options defined here) can be used through the `paginationType`\n\t\t * initialisation parameter.\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{int} page` The current page index\n\t\t * 2. `{int} pages` The number of pages in the table\n\t\t *\n\t\t * Each function is expected to return an array where each element of the\n\t\t * array can be one of:\n\t\t *\n\t\t * * `first` - Jump to first page when activated\n\t\t * * `last` - Jump to last page when activated\n\t\t * * `previous` - Show previous page when activated\n\t\t * * `next` - Show next page when activated\n\t\t * * `{int}` - Show page of the index given\n\t\t * * `{array}` - A nested array containing the above elements to add a\n\t\t *   containing 'DIV' element (might be useful for styling).\n\t\t *\n\t\t * Note that DataTables v1.9- used this object slightly differently whereby\n\t\t * an object with two functions would be defined for each plug-in. That\n\t\t * ability is still supported by DataTables 1.10+ to provide backwards\n\t\t * compatibility, but this option of use is now decremented and no longer\n\t\t * documented in DataTables 1.10+.\n\t\t *\n\t\t *  @type object\n\t\t *  @default {}\n\t\t *\n\t\t *  @example\n\t\t *    // Show previous, next and current page buttons only\n\t\t *    $.fn.dataTableExt.oPagination.current = function ( page, pages ) {\n\t\t *      return [ 'previous', page, 'next' ];\n\t\t *    };\n\t\t */\n\t\tpager: {},\n\n\n\t\trenderer: {\n\t\t\tpageButton: {},\n\t\t\theader: {}\n\t\t},\n\n\n\t\t/**\n\t\t * Ordering plug-ins - custom data source\n\t\t *\n\t\t * The extension options for ordering of data available here is complimentary\n\t\t * to the default type based ordering that DataTables typically uses. It\n\t\t * allows much greater control over the the data that is being used to\n\t\t * order a column, but is necessarily therefore more complex.\n\t\t *\n\t\t * This type of ordering is useful if you want to do ordering based on data\n\t\t * live from the DOM (for example the contents of an 'input' element) rather\n\t\t * than just the static string that DataTables knows of.\n\t\t *\n\t\t * The way these plug-ins work is that you create an array of the values you\n\t\t * wish to be ordering for the column in question and then return that\n\t\t * array. The data in the array much be in the index order of the rows in\n\t\t * the table (not the currently ordering order!). Which order data gathering\n\t\t * function is run here depends on the `dt-init columns.orderDataType`\n\t\t * parameter that is used for the column (if any).\n\t\t *\n\t\t * The functions defined take two parameters:\n\t\t *\n\t\t * 1. `{object}` DataTables settings object: see\n\t\t *    {@link DataTable.models.oSettings}\n\t\t * 2. `{int}` Target column index\n\t\t *\n\t\t * Each function is expected to return an array:\n\t\t *\n\t\t * * `{array}` Data for the column to be ordering upon\n\t\t *\n\t\t *  @type array\n\t\t *\n\t\t *  @example\n\t\t *    // Ordering using `input` node values\n\t\t *    $.fn.dataTable.ext.order['dom-text'] = function  ( settings, col )\n\t\t *    {\n\t\t *      return this.api().column( col, {order:'index'} ).nodes().map( function ( td, i ) {\n\t\t *        return $('input', td).val();\n\t\t *      } );\n\t\t *    }\n\t\t */\n\t\torder: {},\n\n\n\t\t/**\n\t\t * Type based plug-ins.\n\t\t *\n\t\t * Each column in DataTables has a type assigned to it, either by automatic\n\t\t * detection or by direct assignment using the `type` option for the column.\n\t\t * The type of a column will effect how it is ordering and search (plug-ins\n\t\t * can also make use of the column type if required).\n\t\t *\n\t\t * @namespace\n\t\t */\n\t\ttype: {\n\t\t\t/**\n\t\t\t * Type detection functions.\n\t\t\t *\n\t\t\t * The functions defined in this object are used to automatically detect\n\t\t\t * a column's type, making initialisation of DataTables super easy, even\n\t\t\t * when complex data is in the table.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be analysed\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Data type detected, or null if unknown (and thus\n\t\t\t *   pass it on to the other type detection functions.\n\t\t\t *\n\t\t\t *  @type array\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Currency type detection plug-in:\n\t\t\t *    $.fn.dataTable.ext.type.detect.push(\n\t\t\t *      function ( data ) {\n\t\t\t *        // Check the numeric part\n\t\t\t *        if ( ! $.isNumeric( data.substring(1) ) ) {\n\t\t\t *          return null;\n\t\t\t *        }\n\t\t\t *\n\t\t\t *        // Check prefixed by currency\n\t\t\t *        if ( data.charAt(0) == '$' || data.charAt(0) == '&pound;' ) {\n\t\t\t *          return 'currency';\n\t\t\t *        }\n\t\t\t *        return null;\n\t\t\t *      }\n\t\t\t *    );\n\t\t\t */\n\t\t\tdetect: [],\n\n\n\t\t\t/**\n\t\t\t * Type based search formatting.\n\t\t\t *\n\t\t\t * The type based searching functions can be used to pre-format the\n\t\t\t * data to be search on. For example, it can be used to strip HTML\n\t\t\t * tags or to de-format telephone numbers for numeric only searching.\n\t\t\t *\n\t\t\t * Note that is a search is not defined for a column of a given type,\n\t\t\t * no search formatting will be performed.\n\t\t\t *\n\t\t\t * Pre-processing of searching data plug-ins - When you assign the sType\n\t\t\t * for a column (or have it automatically detected for you by DataTables\n\t\t\t * or a type detection plug-in), you will typically be using this for\n\t\t\t * custom sorting, but it can also be used to provide custom searching\n\t\t\t * by allowing you to pre-processing the data and returning the data in\n\t\t\t * the format that should be searched upon. This is done by adding\n\t\t\t * functions this object with a parameter name which matches the sType\n\t\t\t * for that target column. This is the corollary of <i>afnSortData</i>\n\t\t\t * for searching data.\n\t\t\t *\n\t\t\t * The functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for searching\n\t\t\t *\n\t\t\t * Each function is expected to return:\n\t\t\t *\n\t\t\t * * `{string|null}` Formatted string that will be used for the searching.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    $.fn.dataTable.ext.type.search['title-numeric'] = function ( d ) {\n\t\t\t *      return d.replace(/\\n/g,\" \").replace( /<.*?>/g, \"\" );\n\t\t\t *    }\n\t\t\t */\n\t\t\tsearch: {},\n\n\n\t\t\t/**\n\t\t\t * Type based ordering.\n\t\t\t *\n\t\t\t * The column type tells DataTables what ordering to apply to the table\n\t\t\t * when a column is sorted upon. The order for each type that is defined,\n\t\t\t * is defined by the functions available in this object.\n\t\t\t *\n\t\t\t * Each ordering option can be described by three properties added to\n\t\t\t * this object:\n\t\t\t *\n\t\t\t * * `{type}-pre` - Pre-formatting function\n\t\t\t * * `{type}-asc` - Ascending order function\n\t\t\t * * `{type}-desc` - Descending order function\n\t\t\t *\n\t\t\t * All three can be used together, only `{type}-pre` or only\n\t\t\t * `{type}-asc` and `{type}-desc` together. It is generally recommended\n\t\t\t * that only `{type}-pre` is used, as this provides the optimal\n\t\t\t * implementation in terms of speed, although the others are provided\n\t\t\t * for compatibility with existing Javascript sort functions.\n\t\t\t *\n\t\t\t * `{type}-pre`: Functions defined take a single parameter:\n\t\t\t *\n\t\t     *  1. `{*}` Data from the column cell to be prepared for ordering\n\t\t\t *\n\t\t\t * And return:\n\t\t\t *\n\t\t\t * * `{*}` Data to be sorted upon\n\t\t\t *\n\t\t\t * `{type}-asc` and `{type}-desc`: Functions are typical Javascript sort\n\t\t\t * functions, taking two parameters:\n\t\t\t *\n\t\t     *  1. `{*}` Data to compare to the second parameter\n\t\t     *  2. `{*}` Data to compare to the first parameter\n\t\t\t *\n\t\t\t * And returning:\n\t\t\t *\n\t\t\t * * `{*}` Ordering match: <0 if first parameter should be sorted lower\n\t\t\t *   than the second parameter, ===0 if the two parameters are equal and\n\t\t\t *   >0 if the first parameter should be sorted height than the second\n\t\t\t *   parameter.\n\t\t\t *\n\t\t\t *  @type object\n\t\t\t *  @default {}\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Numeric ordering of formatted numbers with a pre-formatter\n\t\t\t *    $.extend( $.fn.dataTable.ext.type.order, {\n\t\t\t *      \"string-pre\": function(x) {\n\t\t\t *        a = (a === \"-\" || a === \"\") ? 0 : a.replace( /[^\\d\\-\\.]/g, \"\" );\n\t\t\t *        return parseFloat( a );\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t *\n\t\t\t *  @example\n\t\t\t *    // Case-sensitive string ordering, with no pre-formatting method\n\t\t\t *    $.extend( $.fn.dataTable.ext.order, {\n\t\t\t *      \"string-case-asc\": function(x,y) {\n\t\t\t *        return ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t\t *      },\n\t\t\t *      \"string-case-desc\": function(x,y) {\n\t\t\t *        return ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t\t *      }\n\t\t\t *    } );\n\t\t\t */\n\t\t\torder: {}\n\t\t},\n\n\t\t/**\n\t\t * Unique DataTables instance counter\n\t\t *\n\t\t * @type int\n\t\t * @private\n\t\t */\n\t\t_unique: 0,\n\n\n\t\t//\n\t\t// Depreciated\n\t\t// The following properties are retained for backwards compatiblity only.\n\t\t// The should not be used in new projects and will be removed in a future\n\t\t// version\n\t\t//\n\n\t\t/**\n\t\t * Version check function.\n\t\t *  @type function\n\t\t *  @depreciated Since 1.10\n\t\t */\n\t\tfnVersionCheck: DataTable.fnVersionCheck,\n\n\n\t\t/**\n\t\t * Index for what 'this' index API functions should use\n\t\t *  @type int\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tiApiIndex: 0,\n\n\n\t\t/**\n\t\t * jQuery UI class container\n\t\t *  @type object\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\toJUIClasses: {},\n\n\n\t\t/**\n\t\t * Software version\n\t\t *  @type string\n\t\t *  @deprecated Since v1.10\n\t\t */\n\t\tsVersion: DataTable.version\n\t};\n\n\n\t//\n\t// Backwards compatibility. Alias to pre 1.10 Hungarian notation counter parts\n\t//\n\t$.extend( _ext, {\n\t\tafnFiltering: _ext.filter,\n\t\taTypes:       _ext.type.detect,\n\t\tofnSearch:    _ext.type.search,\n\t\toSort:        _ext.type.order,\n\t\tafnSortData:  _ext.order,\n\t\taoFeatures:   _ext.feature,\n\t\toApi:         _ext.internal,\n\t\toStdClasses:  _ext.classes,\n\t\toPagination:  _ext.pager\n\t} );\n\n\n\t$.extend( DataTable.ext.classes, {\n\t\t\"sTable\": \"dataTable\",\n\t\t\"sNoFooter\": \"no-footer\",\n\n\t\t/* Paging buttons */\n\t\t\"sPageButton\": \"paginate_button\",\n\t\t\"sPageButtonActive\": \"current\",\n\t\t\"sPageButtonDisabled\": \"disabled\",\n\n\t\t/* Striping classes */\n\t\t\"sStripeOdd\": \"odd\",\n\t\t\"sStripeEven\": \"even\",\n\n\t\t/* Empty row */\n\t\t\"sRowEmpty\": \"dataTables_empty\",\n\n\t\t/* Features */\n\t\t\"sWrapper\": \"dataTables_wrapper\",\n\t\t\"sFilter\": \"dataTables_filter\",\n\t\t\"sInfo\": \"dataTables_info\",\n\t\t\"sPaging\": \"dataTables_paginate paging_\", /* Note that the type is postfixed */\n\t\t\"sLength\": \"dataTables_length\",\n\t\t\"sProcessing\": \"dataTables_processing\",\n\n\t\t/* Sorting */\n\t\t\"sSortAsc\": \"sorting_asc\",\n\t\t\"sSortDesc\": \"sorting_desc\",\n\t\t\"sSortable\": \"sorting\", /* Sortable in both directions */\n\t\t\"sSortableAsc\": \"sorting_asc_disabled\",\n\t\t\"sSortableDesc\": \"sorting_desc_disabled\",\n\t\t\"sSortableNone\": \"sorting_disabled\",\n\t\t\"sSortColumn\": \"sorting_\", /* Note that an int is postfixed for the sorting order */\n\n\t\t/* Filtering */\n\t\t\"sFilterInput\": \"\",\n\n\t\t/* Page length */\n\t\t\"sLengthSelect\": \"\",\n\n\t\t/* Scrolling */\n\t\t\"sScrollWrapper\": \"dataTables_scroll\",\n\t\t\"sScrollHead\": \"dataTables_scrollHead\",\n\t\t\"sScrollHeadInner\": \"dataTables_scrollHeadInner\",\n\t\t\"sScrollBody\": \"dataTables_scrollBody\",\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot\",\n\t\t\"sScrollFootInner\": \"dataTables_scrollFootInner\",\n\n\t\t/* Misc */\n\t\t\"sHeaderTH\": \"\",\n\t\t\"sFooterTH\": \"\",\n\n\t\t// Deprecated\n\t\t\"sSortJUIAsc\": \"\",\n\t\t\"sSortJUIDesc\": \"\",\n\t\t\"sSortJUI\": \"\",\n\t\t\"sSortJUIAscAllowed\": \"\",\n\t\t\"sSortJUIDescAllowed\": \"\",\n\t\t\"sSortJUIWrapper\": \"\",\n\t\t\"sSortIcon\": \"\",\n\t\t\"sJUIHeader\": \"\",\n\t\t\"sJUIFooter\": \"\"\n\t} );\n\n\n\t(function() {\n\n\t// Reused strings for better compression. Closure compiler appears to have a\n\t// weird edge case where it is trying to expand strings rather than use the\n\t// variable version. This results in about 200 bytes being added, for very\n\t// little preference benefit since it this run on script load only.\n\tvar _empty = '';\n\t_empty = '';\n\n\tvar _stateDefault = _empty + 'ui-state-default';\n\tvar _sortIcon     = _empty + 'css_right ui-icon ui-icon-';\n\tvar _headerFooter = _empty + 'fg-toolbar ui-toolbar ui-widget-header ui-helper-clearfix';\n\n\t$.extend( DataTable.ext.oJUIClasses, DataTable.ext.classes, {\n\t\t/* Full numbers paging buttons */\n\t\t\"sPageButton\":         \"fg-button ui-button \"+_stateDefault,\n\t\t\"sPageButtonActive\":   \"ui-state-disabled\",\n\t\t\"sPageButtonDisabled\": \"ui-state-disabled\",\n\n\t\t/* Features */\n\t\t\"sPaging\": \"dataTables_paginate fg-buttonset ui-buttonset fg-buttonset-multi \"+\n\t\t\t\"ui-buttonset-multi paging_\", /* Note that the type is postfixed */\n\n\t\t/* Sorting */\n\t\t\"sSortAsc\":            _stateDefault+\" sorting_asc\",\n\t\t\"sSortDesc\":           _stateDefault+\" sorting_desc\",\n\t\t\"sSortable\":           _stateDefault+\" sorting\",\n\t\t\"sSortableAsc\":        _stateDefault+\" sorting_asc_disabled\",\n\t\t\"sSortableDesc\":       _stateDefault+\" sorting_desc_disabled\",\n\t\t\"sSortableNone\":       _stateDefault+\" sorting_disabled\",\n\t\t\"sSortJUIAsc\":         _sortIcon+\"triangle-1-n\",\n\t\t\"sSortJUIDesc\":        _sortIcon+\"triangle-1-s\",\n\t\t\"sSortJUI\":            _sortIcon+\"carat-2-n-s\",\n\t\t\"sSortJUIAscAllowed\":  _sortIcon+\"carat-1-n\",\n\t\t\"sSortJUIDescAllowed\": _sortIcon+\"carat-1-s\",\n\t\t\"sSortJUIWrapper\":     \"DataTables_sort_wrapper\",\n\t\t\"sSortIcon\":           \"DataTables_sort_icon\",\n\n\t\t/* Scrolling */\n\t\t\"sScrollHead\": \"dataTables_scrollHead \"+_stateDefault,\n\t\t\"sScrollFoot\": \"dataTables_scrollFoot \"+_stateDefault,\n\n\t\t/* Misc */\n\t\t\"sHeaderTH\":  _stateDefault,\n\t\t\"sFooterTH\":  _stateDefault,\n\t\t\"sJUIHeader\": _headerFooter+\" ui-corner-tl ui-corner-tr\",\n\t\t\"sJUIFooter\": _headerFooter+\" ui-corner-bl ui-corner-br\"\n\t} );\n\n\t}());\n\n\n\n\tvar extPagination = DataTable.ext.pager;\n\n\tfunction _numbers ( page, pages ) {\n\t\tvar\n\t\t\tnumbers = [],\n\t\t\tbuttons = extPagination.numbers_length,\n\t\t\thalf = Math.floor( buttons / 2 ),\n\t\t\ti = 1;\n\n\t\tif ( pages <= buttons ) {\n\t\t\tnumbers = _range( 0, pages );\n\t\t}\n\t\telse if ( page <= half ) {\n\t\t\tnumbers = _range( 0, buttons-2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t}\n\t\telse if ( page >= pages - 1 - half ) {\n\t\t\tnumbers = _range( pages-(buttons-2), pages );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' ); // no unshift in ie6\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\t\telse {\n\t\t\tnumbers = _range( page-1, page+2 );\n\t\t\tnumbers.push( 'ellipsis' );\n\t\t\tnumbers.push( pages-1 );\n\t\t\tnumbers.splice( 0, 0, 'ellipsis' );\n\t\t\tnumbers.splice( 0, 0, 0 );\n\t\t}\n\n\t\tnumbers.DT_el = 'span';\n\t\treturn numbers;\n\t}\n\n\n\t$.extend( extPagination, {\n\t\tsimple: function ( page, pages ) {\n\t\t\treturn [ 'previous', 'next' ];\n\t\t},\n\n\t\tfull: function ( page, pages ) {\n\t\t\treturn [  'first', 'previous', 'next', 'last' ];\n\t\t},\n\n\t\tsimple_numbers: function ( page, pages ) {\n\t\t\treturn [ 'previous', _numbers(page, pages), 'next' ];\n\t\t},\n\n\t\tfull_numbers: function ( page, pages ) {\n\t\t\treturn [ 'first', 'previous', _numbers(page, pages), 'next', 'last' ];\n\t\t},\n\n\t\t// For testing and plug-ins to use\n\t\t_numbers: _numbers,\n\t\tnumbers_length: 7\n\t} );\n\n\n\t$.extend( true, DataTable.ext.renderer, {\n\t\tpageButton: {\n\t\t\t_: function ( settings, host, idx, buttons, page, pages ) {\n\t\t\t\tvar classes = settings.oClasses;\n\t\t\t\tvar lang = settings.oLanguage.oPaginate;\n\t\t\t\tvar btnDisplay, btnClass;\n\n\t\t\t\tvar attach = function( container, buttons ) {\n\t\t\t\t\tvar i, ien, node, button;\n\t\t\t\t\tvar clickHandler = function ( e ) {\n\t\t\t\t\t\t_fnPageChange( settings, e.data.action, true );\n\t\t\t\t\t};\n\n\t\t\t\t\tfor ( i=0, ien=buttons.length ; i<ien ; i++ ) {\n\t\t\t\t\t\tbutton = buttons[i];\n\n\t\t\t\t\t\tif ( $.isArray( button ) ) {\n\t\t\t\t\t\t\tvar inner = $( '<'+(button.DT_el || 'div')+'/>' )\n\t\t\t\t\t\t\t\t.appendTo( container );\n\t\t\t\t\t\t\tattach( inner, button );\n\t\t\t\t\t\t}\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tbtnDisplay = '';\n\t\t\t\t\t\t\tbtnClass = '';\n\n\t\t\t\t\t\t\tswitch ( button ) {\n\t\t\t\t\t\t\t\tcase 'ellipsis':\n\t\t\t\t\t\t\t\t\tcontainer.append('<span>&hellip;</span>');\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'first':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sFirst;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'previous':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sPrevious;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page > 0 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sNext;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tcase 'last':\n\t\t\t\t\t\t\t\t\tbtnDisplay = lang.sLast;\n\t\t\t\t\t\t\t\t\tbtnClass = button + (page < pages-1 ?\n\t\t\t\t\t\t\t\t\t\t'' : ' '+classes.sPageButtonDisabled);\n\t\t\t\t\t\t\t\t\tbreak;\n\n\t\t\t\t\t\t\t\tdefault:\n\t\t\t\t\t\t\t\t\tbtnDisplay = button + 1;\n\t\t\t\t\t\t\t\t\tbtnClass = page === button ?\n\t\t\t\t\t\t\t\t\t\tclasses.sPageButtonActive : '';\n\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ( btnDisplay ) {\n\t\t\t\t\t\t\t\tnode = $('<a>', {\n\t\t\t\t\t\t\t\t\t\t'class': classes.sPageButton+' '+btnClass,\n\t\t\t\t\t\t\t\t\t\t'aria-controls': settings.sTableId,\n\t\t\t\t\t\t\t\t\t\t'tabindex': settings.iTabIndex,\n\t\t\t\t\t\t\t\t\t\t'id': idx === 0 && typeof button === 'string' ?\n\t\t\t\t\t\t\t\t\t\t\tsettings.sTableId +'_'+ button :\n\t\t\t\t\t\t\t\t\t\t\tnull\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.html( btnDisplay )\n\t\t\t\t\t\t\t\t\t.appendTo( container );\n\n\t\t\t\t\t\t\t\t_fnBindAction(\n\t\t\t\t\t\t\t\t\tnode, {action: button}, clickHandler\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\tattach( $(host).empty(), buttons );\n\t\t\t}\n\t\t}\n\t} );\n\n\n\n\tvar __numericReplace = function ( d, re1, re2 ) {\n\t\tif ( !d || d === '-' ) {\n\t\t\treturn -Infinity;\n\t\t}\n\n\t\tif ( d.replace ) {\n\t\t\tif ( re1 ) {\n\t\t\t\td = d.replace( re1, '' );\n\t\t\t}\n\n\t\t\tif ( re2 ) {\n\t\t\t\td = d.replace( re2, '' );\n\t\t\t}\n\t\t}\n\n\t\treturn d * 1;\n\t};\n\n\n\t$.extend( DataTable.ext.type.order, {\n\t\t// Dates\n\t\t\"date-pre\": function ( d )\n\t\t{\n\t\t\treturn Date.parse( d ) || 0;\n\t\t},\n\n\t\t// Plain numbers\n\t\t\"numeric-pre\": function ( d )\n\t\t{\n\t\t\treturn __numericReplace( d );\n\t\t},\n\n\t\t// Formatted numbers\n\t\t\"numeric-fmt-pre\": function ( d )\n\t\t{\n\t\t\treturn __numericReplace( d, _re_formatted_numeric );\n\t\t},\n\n\t\t// HTML numeric\n\t\t\"html-numeric-pre\": function ( d )\n\t\t{\n\t\t\treturn __numericReplace( d, _re_html );\n\t\t},\n\n\t\t// HTML numeric, formatted\n\t\t\"html-numeric-fmt-pre\": function ( d )\n\t\t{\n\t\t\treturn __numericReplace( d, _re_html, _re_formatted_numeric );\n\t\t},\n\n\t\t// html\n\t\t\"html-pre\": function ( a )\n\t\t{\n\t\t\treturn a.replace ?\n\t\t\t\ta.replace( /<.*?>/g, \"\" ).toLowerCase() :\n\t\t\t\ta+'';\n\t\t},\n\n\t\t// string\n\t\t\"string-pre\": function ( a )\n\t\t{\n\t\t\treturn typeof a === 'string' ?\n\t\t\t\ta.toLowerCase() :\n\t\t\t\t! a || ! a.toString ?\n\t\t\t\t\t'' :\n\t\t\t\t\ta.toString();\n\t\t},\n\n\t\t// string-asc and -desc are retained only for compatibility with the old\n\t\t// sort methods\n\t\t\"string-asc\": function ( x, y )\n\t\t{\n\t\t\treturn ((x < y) ? -1 : ((x > y) ? 1 : 0));\n\t\t},\n\n\t\t\"string-desc\": function ( x, y )\n\t\t{\n\t\t\treturn ((x < y) ? 1 : ((x > y) ? -1 : 0));\n\t\t}\n\t} );\n\n\n\t// Built in type detection. See model.ext.aTypes for information about\n\t// what is required from this methods.\n\t$.extend( DataTable.ext.type.detect, [\n\t\t// Plain numbers - first since V8 detects some plain numbers as dates\n\t\t// e.g. Date.parse('55') (but not all, e.g. Date.parse('22')...).\n\t\tfunction ( d )\n\t\t{\n\t\t\treturn _isNumber( d ) ? 'numeric' : null;\n\t\t},\n\n\t\t// Dates (only those recognised by the browser's Date.parse)\n\t\tfunction ( d )\n\t\t{\n\t\t\t// V8 will remove any unknown characters at the start of the expression,\n\t\t\t// leading to false matches such as `$245.12` being a valid date. See\n\t\t\t// forum thread 18941 for detail.\n\t\t\tif ( d && ! _re_date_start.test(d) ) {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t\tvar parsed = Date.parse(d);\n\t\t\treturn (parsed !== null && !isNaN(parsed)) || _empty(d) ? 'date' : null;\n\t\t},\n\n\t\t// Formatted numbers\n\t\tfunction ( d )\n\t\t{\n\t\t\treturn _isNumber( d, true ) ? 'numeric-fmt' : null;\n\t\t},\n\n\t\t// HTML numeric\n\t\tfunction ( d )\n\t\t{\n\t\t\treturn _htmlNumeric( d ) ? 'html-numeric' : null;\n\t\t},\n\n\t\t// HTML numeric, formatted\n\t\tfunction ( d )\n\t\t{\n\t\t\treturn _htmlNumeric( d, true ) ? 'html-numeric-fmt' : null;\n\t\t},\n\n\t\t// HTML (this is strict checking - there much be html)\n\t\tfunction ( d )\n\t\t{\n\t\t\treturn _empty( d ) || (typeof d === 'string' && d.indexOf('<') !== -1) ?\n\t\t\t\t'html' : null;\n\t\t}\n\t] );\n\n\n\n\t// Filter formatting functions. See model.ext.ofnSearch for information about\n\t// what is required from these methods.\n\n\n\t$.extend( DataTable.ext.type.search, {\n\t\thtml: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata\n\t\t\t\t\t\t.replace( _re_new_lines, \" \" )\n\t\t\t\t\t\t.replace( _re_html, \"\" ) :\n\t\t\t\t\t'';\n\t\t},\n\n\t\tstring: function ( data ) {\n\t\t\treturn _empty(data) ?\n\t\t\t\t'' :\n\t\t\t\ttypeof data === 'string' ?\n\t\t\t\t\tdata.replace( _re_new_lines, \" \" ) :\n\t\t\t\t\tdata;\n\t\t}\n\t} );\n\n\n\n\t$.extend( true, DataTable.ext.renderer, {\n\t\theader: {\n\t\t\t_: function ( settings, cell, column, idx, classes ) {\n\t\t\t\t// No additional mark-up required\n\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt', function ( e, settings, sorting, columns ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tcolumn.sSortingClass +' '+\n\t\t\t\t\t\t\tclasses.sSortAsc +' '+\n\t\t\t\t\t\t\tclasses.sSortDesc\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ idx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ idx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t},\n\n\t\t\tjqueryui: function ( settings, cell, column, idx, classes ) {\n\t\t\t\t$('<div/>')\n\t\t\t\t\t.addClass( classes.sSortJUIWrapper )\n\t\t\t\t\t.append( cell.contents() )\n\t\t\t\t\t.append( $('<span/>')\n\t\t\t\t\t\t.addClass( classes.sSortIcon+' '+column.sSortingClassJUI )\n\t\t\t\t\t)\n\t\t\t\t\t.appendTo( cell );\n\n\t\t\t\t// Attach a sort listener to update on sort\n\t\t\t\t$(settings.nTable).on( 'order.dt', function ( e, settings, sorting, columns ) {\n\t\t\t\t\tcell\n\t\t\t\t\t\t.removeClass( classes.sSortAsc +\" \"+classes.sSortDesc )\n\t\t\t\t\t\t.addClass( columns[ idx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortAsc : columns[ idx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClass\n\t\t\t\t\t\t);\n\n\t\t\t\t\tcell\n\t\t\t\t\t\t.find( 'span' )\n\t\t\t\t\t\t.removeClass(\n\t\t\t\t\t\t\tclasses.sSortJUIAsc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDesc +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUI +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIAscAllowed +\" \"+\n\t\t\t\t\t\t\tclasses.sSortJUIDescAllowed\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.addClass( columns[ idx ] == 'asc' ?\n\t\t\t\t\t\t\tclasses.sSortJUIAsc : columns[ idx ] == 'desc' ?\n\t\t\t\t\t\t\t\tclasses.sSortJUIDesc :\n\t\t\t\t\t\t\t\tcolumn.sSortingClassJUI\n\t\t\t\t\t\t);\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t} );\n\n\n\t// jQuery access\n\t$.fn.dataTable = DataTable;\n\n\t// Legacy aliases\n\t$.fn.dataTableSettings = DataTable.settings;\n\t$.fn.dataTableExt = DataTable.ext;\n\n\t// With a capital `D` we return a DataTables API instance rather than a\n\t// jQuery object\n\t$.fn.DataTable = function ( opts ) {\n\t\treturn $(this).dataTable( opts ).api();\n\t};\n\n\t// All properties that are available to $.fn.dataTable should also be\n\t// available on $.fn.DataTable\n\t$.each( DataTable, function ( prop, val ) {\n\t\t$.fn.DataTable[ prop ] = val;\n\t} );\n\n\n\t// Information about events fired by DataTables - for documentation.\n\t/**\n\t * Draw event, fired whenever the table is redrawn on the page, at the same\n\t * point as fnDrawCallback. This may be useful for binding events or\n\t * performing calculations when the table is altered at all.\n\t *  @name DataTable#draw.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Search event, fired when the searching applied to the table (using the\n\t * built-in global search, or column filters) is altered.\n\t *  @name DataTable#search.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page change event, fired when the paging of the table is altered.\n\t *  @name DataTable#page.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Order event, fired when the ordering applied to the table is altered.\n\t *  @name DataTable#order.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * DataTables initialisation complete event, fired when the table is fully\n\t * drawn, including Ajax data loaded, if Ajax data is required.\n\t *  @name DataTable#init.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The JSON object request from the server - only\n\t *    present if client-side Ajax sourced data is used</li></ol>\n\t */\n\n\t/**\n\t * State save event, fired when the table has changed state a new state save\n\t * is required. This event allows modification of the state saving object\n\t * prior to actually doing the save, including addition or other state\n\t * properties (for plug-ins) or modification of a DataTables core property.\n\t *  @name DataTable#stateSaveParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The state information to be saved\n\t */\n\n\t/**\n\t * State load event, fired when the table is loading state from the stored\n\t * data, but prior to the settings object being modified by the saved state\n\t * - allowing modification of the saved state is required or loading of\n\t * state for a plug-in.\n\t *  @name DataTable#stateLoadParams.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * State loaded event, fired when state has been loaded from stored data and\n\t * the settings object has been modified by the loaded data.\n\t *  @name DataTable#stateLoaded.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {object} json The saved state information\n\t */\n\n\t/**\n\t * Processing event, fired when DataTables is doing some kind of processing\n\t * (be it, order, searcg or anything else). It can be used to indicate to\n\t * the end user that there is something happening, or that something has\n\t * finished.\n\t *  @name DataTable#processing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} oSettings DataTables settings object\n\t *  @param {boolean} bShow Flag for if DataTables is doing processing or not\n\t */\n\n\t/**\n\t * Ajax (XHR) event, fired whenever an Ajax request is completed from a\n\t * request to made to the server for new data. This event is called before\n\t * DataTables processed the returned data, so it can also be used to pre-\n\t * process the data returned from the server, if needed.\n\t *\n\t * Note that this trigger is called in `fnServerData`, if you override\n\t * `fnServerData` and which to use this event, you need to trigger it in you\n\t * success function.\n\t *  @name DataTable#xhr.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {object} json JSON returned from the server\n\t *\n\t *  @example\n\t *     // Use a custom property returned from the server in another DOM element\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       $('#status').html( json.status );\n\t *     } );\n\t *\n\t *  @example\n\t *     // Pre-process the data returned from the server\n\t *     $('#table').dataTable().on('xhr.dt', function (e, settings, json) {\n\t *       for ( var i=0, ien=json.aaData.length ; i<ien ; i++ ) {\n\t *         json.aaData[i].sum = json.aaData[i].one + json.aaData[i].two;\n\t *       }\n\t *       // Note no return - manipulate the data directly in the JSON object.\n\t *     } );\n\t */\n\n\t/**\n\t * Destroy event, fired when the DataTable is destroyed by calling fnDestroy\n\t * or passing the bDestroy:true parameter in the initialisation object. This\n\t * can be used to remove bound events, added DOM nodes, etc.\n\t *  @name DataTable#destroy.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Page length change event, fired when number of records to show on each\n\t * page (the length) is changed.\n\t *  @name DataTable#length.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {integer} len New length\n\t */\n\n\t/**\n\t * Column sizing has changed.\n\t *  @name DataTable#column-sizing.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t */\n\n\t/**\n\t * Column visibility has changed.\n\t *  @name DataTable#column-visibility.dt\n\t *  @event\n\t *  @param {event} e jQuery event object\n\t *  @param {object} o DataTables settings object {@link DataTable.models.oSettings}\n\t *  @param {int} column Column index\n\t *  @param {bool} vis `false` if column now hidden, or `true` if visible\n\t */\n}));\n\n}(window, document, jQuery));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/datapicker/bootstrap-datepicker.js",
    "content": "/* =========================================================\n * bootstrap-datepicker.js\n * Repo: https://github.com/eternicode/bootstrap-datepicker/\n * Demo: http://eternicode.github.io/bootstrap-datepicker/\n * Docs: http://bootstrap-datepicker.readthedocs.org/\n * Forked from http://www.eyecon.ro/bootstrap-datepicker\n * =========================================================\n * Started by Stefan Petre; improvements by Andrew Rowls + contributors\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(function($, undefined){\n\n\tvar $window = $(window);\n\n\tfunction UTCDate(){\n\t\treturn new Date(Date.UTC.apply(Date, arguments));\n\t}\n\tfunction UTCToday(){\n\t\tvar today = new Date();\n\t\treturn UTCDate(today.getFullYear(), today.getMonth(), today.getDate());\n\t}\n\tfunction alias(method){\n\t\treturn function(){\n\t\t\treturn this[method].apply(this, arguments);\n\t\t};\n\t}\n\n\tvar DateArray = (function(){\n\t\tvar extras = {\n\t\t\tget: function(i){\n\t\t\t\treturn this.slice(i)[0];\n\t\t\t},\n\t\t\tcontains: function(d){\n\t\t\t\t// Array.indexOf is not cross-browser;\n\t\t\t\t// $.inArray doesn't work with Dates\n\t\t\t\tvar val = d && d.valueOf();\n\t\t\t\tfor (var i=0, l=this.length; i < l; i++)\n\t\t\t\t\tif (this[i].valueOf() === val)\n\t\t\t\t\t\treturn i;\n\t\t\t\treturn -1;\n\t\t\t},\n\t\t\tremove: function(i){\n\t\t\t\tthis.splice(i,1);\n\t\t\t},\n\t\t\treplace: function(new_array){\n\t\t\t\tif (!new_array)\n\t\t\t\t\treturn;\n\t\t\t\tif (!$.isArray(new_array))\n\t\t\t\t\tnew_array = [new_array];\n\t\t\t\tthis.clear();\n\t\t\t\tthis.push.apply(this, new_array);\n\t\t\t},\n\t\t\tclear: function(){\n\t\t\t\tthis.splice(0);\n\t\t\t},\n\t\t\tcopy: function(){\n\t\t\t\tvar a = new DateArray();\n\t\t\t\ta.replace(this);\n\t\t\t\treturn a;\n\t\t\t}\n\t\t};\n\n\t\treturn function(){\n\t\t\tvar a = [];\n\t\t\ta.push.apply(a, arguments);\n\t\t\t$.extend(a, extras);\n\t\t\treturn a;\n\t\t};\n\t})();\n\n\n\t// Picker object\n\n\tvar Datepicker = function(element, options){\n\t\tthis.dates = new DateArray();\n\t\tthis.viewDate = UTCToday();\n\t\tthis.focusDate = null;\n\n\t\tthis._process_options(options);\n\n\t\tthis.element = $(element);\n\t\tthis.isInline = false;\n\t\tthis.isInput = this.element.is('input');\n\t\tthis.component = this.element.is('.date') ? this.element.find('.add-on, .input-group-addon, .btn') : false;\n\t\tthis.hasInput = this.component && this.element.find('input').length;\n\t\tif (this.component && this.component.length === 0)\n\t\t\tthis.component = false;\n\n\t\tthis.picker = $(DPGlobal.template);\n\t\tthis._buildEvents();\n\t\tthis._attachEvents();\n\n\t\tif (this.isInline){\n\t\t\tthis.picker.addClass('datepicker-inline').appendTo(this.element);\n\t\t}\n\t\telse {\n\t\t\tthis.picker.addClass('datepicker-dropdown dropdown-menu');\n\t\t}\n\n\t\tif (this.o.rtl){\n\t\t\tthis.picker.addClass('datepicker-rtl');\n\t\t}\n\n\t\tthis.viewMode = this.o.startView;\n\n\t\tif (this.o.calendarWeeks)\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.attr('colspan', function(i, val){\n\t\t\t\t\t\t\treturn parseInt(val) + 1;\n\t\t\t\t\t\t});\n\n\t\tthis._allow_update = false;\n\n\t\tthis.setStartDate(this._o.startDate);\n\t\tthis.setEndDate(this._o.endDate);\n\t\tthis.setDaysOfWeekDisabled(this.o.daysOfWeekDisabled);\n\n\t\tthis.fillDow();\n\t\tthis.fillMonths();\n\n\t\tthis._allow_update = true;\n\n\t\tthis.update();\n\t\tthis.showMode();\n\n\t\tif (this.isInline){\n\t\t\tthis.show();\n\t\t}\n\t};\n\n\tDatepicker.prototype = {\n\t\tconstructor: Datepicker,\n\n\t\t_process_options: function(opts){\n\t\t\t// Store raw options for reference\n\t\t\tthis._o = $.extend({}, this._o, opts);\n\t\t\t// Processed options\n\t\t\tvar o = this.o = $.extend({}, this._o);\n\n\t\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t\t// fallback to 2 letter code eg \"de\"\n\t\t\tvar lang = o.language;\n\t\t\tif (!dates[lang]){\n\t\t\t\tlang = lang.split('-')[0];\n\t\t\t\tif (!dates[lang])\n\t\t\t\t\tlang = defaults.language;\n\t\t\t}\n\t\t\to.language = lang;\n\n\t\t\tswitch (o.startView){\n\t\t\t\tcase 2:\n\t\t\t\tcase 'decade':\n\t\t\t\t\to.startView = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 'year':\n\t\t\t\t\to.startView = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.startView = 0;\n\t\t\t}\n\n\t\t\tswitch (o.minViewMode){\n\t\t\t\tcase 1:\n\t\t\t\tcase 'months':\n\t\t\t\t\to.minViewMode = 1;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\tcase 'years':\n\t\t\t\t\to.minViewMode = 2;\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\to.minViewMode = 0;\n\t\t\t}\n\n\t\t\to.startView = Math.max(o.startView, o.minViewMode);\n\n\t\t\t// true, false, or Number > 0\n\t\t\tif (o.multidate !== true){\n\t\t\t\to.multidate = Number(o.multidate) || false;\n\t\t\t\tif (o.multidate !== false)\n\t\t\t\t\to.multidate = Math.max(0, o.multidate);\n\t\t\t\telse\n\t\t\t\t\to.multidate = 1;\n\t\t\t}\n\t\t\to.multidateSeparator = String(o.multidateSeparator);\n\n\t\t\to.weekStart %= 7;\n\t\t\to.weekEnd = ((o.weekStart + 6) % 7);\n\n\t\t\tvar format = DPGlobal.parseFormat(o.format);\n\t\t\tif (o.startDate !== -Infinity){\n\t\t\t\tif (!!o.startDate){\n\t\t\t\t\tif (o.startDate instanceof Date)\n\t\t\t\t\t\to.startDate = this._local_to_utc(this._zero_time(o.startDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.startDate = DPGlobal.parseDate(o.startDate, format, o.language);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.startDate = -Infinity;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (o.endDate !== Infinity){\n\t\t\t\tif (!!o.endDate){\n\t\t\t\t\tif (o.endDate instanceof Date)\n\t\t\t\t\t\to.endDate = this._local_to_utc(this._zero_time(o.endDate));\n\t\t\t\t\telse\n\t\t\t\t\t\to.endDate = DPGlobal.parseDate(o.endDate, format, o.language);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\to.endDate = Infinity;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled||[];\n\t\t\tif (!$.isArray(o.daysOfWeekDisabled))\n\t\t\t\to.daysOfWeekDisabled = o.daysOfWeekDisabled.split(/[,\\s]*/);\n\t\t\to.daysOfWeekDisabled = $.map(o.daysOfWeekDisabled, function(d){\n\t\t\t\treturn parseInt(d, 10);\n\t\t\t});\n\n\t\t\tvar plc = String(o.orientation).toLowerCase().split(/\\s+/g),\n\t\t\t\t_plc = o.orientation.toLowerCase();\n\t\t\tplc = $.grep(plc, function(word){\n\t\t\t\treturn (/^auto|left|right|top|bottom$/).test(word);\n\t\t\t});\n\t\t\to.orientation = {x: 'auto', y: 'auto'};\n\t\t\tif (!_plc || _plc === 'auto')\n\t\t\t\t; // no action\n\t\t\telse if (plc.length === 1){\n\t\t\t\tswitch (plc[0]){\n\t\t\t\t\tcase 'top':\n\t\t\t\t\tcase 'bottom':\n\t\t\t\t\t\to.orientation.y = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'left':\n\t\t\t\t\tcase 'right':\n\t\t\t\t\t\to.orientation.x = plc[0];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn (/^left|right$/).test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.x = _plc[0] || 'auto';\n\n\t\t\t\t_plc = $.grep(plc, function(word){\n\t\t\t\t\treturn (/^top|bottom$/).test(word);\n\t\t\t\t});\n\t\t\t\to.orientation.y = _plc[0] || 'auto';\n\t\t\t}\n\t\t},\n\t\t_events: [],\n\t\t_secondaryEvents: [],\n\t\t_applyEvents: function(evs){\n\t\t\tfor (var i=0, el, ch, ev; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t}\n\t\t\t\telse if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.on(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_unapplyEvents: function(evs){\n\t\t\tfor (var i=0, el, ev, ch; i < evs.length; i++){\n\t\t\t\tel = evs[i][0];\n\t\t\t\tif (evs[i].length === 2){\n\t\t\t\t\tch = undefined;\n\t\t\t\t\tev = evs[i][1];\n\t\t\t\t}\n\t\t\t\telse if (evs[i].length === 3){\n\t\t\t\t\tch = evs[i][1];\n\t\t\t\t\tev = evs[i][2];\n\t\t\t\t}\n\t\t\t\tel.off(ev, ch);\n\t\t\t}\n\t\t},\n\t\t_buildEvents: function(){\n\t\t\tif (this.isInput){ // single input\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(function(e){\n\t\t\t\t\t\t\tif ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.component && this.hasInput){ // component: input + button\n\t\t\t\tthis._events = [\n\t\t\t\t\t// For components that are not readonly, allow keyboard nav\n\t\t\t\t\t[this.element.find('input'), {\n\t\t\t\t\t\tfocus: $.proxy(this.show, this),\n\t\t\t\t\t\tkeyup: $.proxy(function(e){\n\t\t\t\t\t\t\tif ($.inArray(e.keyCode, [27,37,39,38,40,32,13,9]) === -1)\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t}, this),\n\t\t\t\t\t\tkeydown: $.proxy(this.keydown, this)\n\t\t\t\t\t}],\n\t\t\t\t\t[this.component, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\telse if (this.element.is('div')){  // inline datepicker\n\t\t\t\tthis.isInline = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._events = [\n\t\t\t\t\t[this.element, {\n\t\t\t\t\t\tclick: $.proxy(this.show, this)\n\t\t\t\t\t}]\n\t\t\t\t];\n\t\t\t}\n\t\t\tthis._events.push(\n\t\t\t\t// Component: listen for blur on element descendants\n\t\t\t\t[this.element, '*', {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}],\n\t\t\t\t// Input: listen for blur on element\n\t\t\t\t[this.element, {\n\t\t\t\t\tblur: $.proxy(function(e){\n\t\t\t\t\t\tthis._focused_from = e.target;\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t);\n\n\t\t\tthis._secondaryEvents = [\n\t\t\t\t[this.picker, {\n\t\t\t\t\tclick: $.proxy(this.click, this)\n\t\t\t\t}],\n\t\t\t\t[$(window), {\n\t\t\t\t\tresize: $.proxy(this.place, this)\n\t\t\t\t}],\n\t\t\t\t[$(document), {\n\t\t\t\t\t'mousedown touchstart': $.proxy(function(e){\n\t\t\t\t\t\t// Clicked outside the datepicker, hide it\n\t\t\t\t\t\tif (!(\n\t\t\t\t\t\t\tthis.element.is(e.target) ||\n\t\t\t\t\t\t\tthis.element.find(e.target).length ||\n\t\t\t\t\t\t\tthis.picker.is(e.target) ||\n\t\t\t\t\t\t\tthis.picker.find(e.target).length\n\t\t\t\t\t\t)){\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t}\n\t\t\t\t\t}, this)\n\t\t\t\t}]\n\t\t\t];\n\t\t},\n\t\t_attachEvents: function(){\n\t\t\tthis._detachEvents();\n\t\t\tthis._applyEvents(this._events);\n\t\t},\n\t\t_detachEvents: function(){\n\t\t\tthis._unapplyEvents(this._events);\n\t\t},\n\t\t_attachSecondaryEvents: function(){\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis._applyEvents(this._secondaryEvents);\n\t\t},\n\t\t_detachSecondaryEvents: function(){\n\t\t\tthis._unapplyEvents(this._secondaryEvents);\n\t\t},\n\t\t_trigger: function(event, altdate){\n\t\t\tvar date = altdate || this.dates.get(-1),\n\t\t\t\tlocal_date = this._utc_to_local(date);\n\n\t\t\tthis.element.trigger({\n\t\t\t\ttype: event,\n\t\t\t\tdate: local_date,\n\t\t\t\tdates: $.map(this.dates, this._utc_to_local),\n\t\t\t\tformat: $.proxy(function(ix, format){\n\t\t\t\t\tif (arguments.length === 0){\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t\tformat = this.o.format;\n\t\t\t\t\t}\n\t\t\t\t\telse if (typeof ix === 'string'){\n\t\t\t\t\t\tformat = ix;\n\t\t\t\t\t\tix = this.dates.length - 1;\n\t\t\t\t\t}\n\t\t\t\t\tformat = format || this.o.format;\n\t\t\t\t\tvar date = this.dates.get(ix);\n\t\t\t\t\treturn DPGlobal.formatDate(date, format, this.o.language);\n\t\t\t\t}, this)\n\t\t\t});\n\t\t},\n\n\t\tshow: function(){\n\t\t\tif (!this.isInline)\n\t\t\t\tthis.picker.appendTo('body');\n\t\t\tthis.picker.show();\n\t\t\tthis.place();\n\t\t\tthis._attachSecondaryEvents();\n\t\t\tthis._trigger('show');\n\t\t},\n\n\t\thide: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn;\n\t\t\tif (!this.picker.is(':visible'))\n\t\t\t\treturn;\n\t\t\tthis.focusDate = null;\n\t\t\tthis.picker.hide().detach();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.viewMode = this.o.startView;\n\t\t\tthis.showMode();\n\n\t\t\tif (\n\t\t\t\tthis.o.forceParse &&\n\t\t\t\t(\n\t\t\t\t\tthis.isInput && this.element.val() ||\n\t\t\t\t\tthis.hasInput && this.element.find('input').val()\n\t\t\t\t)\n\t\t\t)\n\t\t\t\tthis.setValue();\n\t\t\tthis._trigger('hide');\n\t\t},\n\n\t\tremove: function(){\n\t\t\tthis.hide();\n\t\t\tthis._detachEvents();\n\t\t\tthis._detachSecondaryEvents();\n\t\t\tthis.picker.remove();\n\t\t\tdelete this.element.data().datepicker;\n\t\t\tif (!this.isInput){\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\t\t},\n\n\t\t_utc_to_local: function(utc){\n\t\t\treturn utc && new Date(utc.getTime() + (utc.getTimezoneOffset()*60000));\n\t\t},\n\t\t_local_to_utc: function(local){\n\t\t\treturn local && new Date(local.getTime() - (local.getTimezoneOffset()*60000));\n\t\t},\n\t\t_zero_time: function(local){\n\t\t\treturn local && new Date(local.getFullYear(), local.getMonth(), local.getDate());\n\t\t},\n\t\t_zero_utc_time: function(utc){\n\t\t\treturn utc && new Date(Date.UTC(utc.getUTCFullYear(), utc.getUTCMonth(), utc.getUTCDate()));\n\t\t},\n\n\t\tgetDates: function(){\n\t\t\treturn $.map(this.dates, this._utc_to_local);\n\t\t},\n\n\t\tgetUTCDates: function(){\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn new Date(d);\n\t\t\t});\n\t\t},\n\n\t\tgetDate: function(){\n\t\t\treturn this._utc_to_local(this.getUTCDate());\n\t\t},\n\n\t\tgetUTCDate: function(){\n\t\t\treturn new Date(this.dates.get(-1));\n\t\t},\n\n\t\tsetDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, args);\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t},\n\n\t\tsetUTCDates: function(){\n\t\t\tvar args = $.isArray(arguments[0]) ? arguments[0] : arguments;\n\t\t\tthis.update.apply(this, $.map(args, this._utc_to_local));\n\t\t\tthis._trigger('changeDate');\n\t\t\tthis.setValue();\n\t\t},\n\n\t\tsetDate: alias('setDates'),\n\t\tsetUTCDate: alias('setUTCDates'),\n\n\t\tsetValue: function(){\n\t\t\tvar formatted = this.getFormattedDate();\n\t\t\tif (!this.isInput){\n\t\t\t\tif (this.component){\n\t\t\t\t\tthis.element.find('input').val(formatted).change();\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.element.val(formatted).change();\n\t\t\t}\n\t\t},\n\n\t\tgetFormattedDate: function(format){\n\t\t\tif (format === undefined)\n\t\t\t\tformat = this.o.format;\n\n\t\t\tvar lang = this.o.language;\n\t\t\treturn $.map(this.dates, function(d){\n\t\t\t\treturn DPGlobal.formatDate(d, format, lang);\n\t\t\t}).join(this.o.multidateSeparator);\n\t\t},\n\n\t\tsetStartDate: function(startDate){\n\t\t\tthis._process_options({startDate: startDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetEndDate: function(endDate){\n\t\t\tthis._process_options({endDate: endDate});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tsetDaysOfWeekDisabled: function(daysOfWeekDisabled){\n\t\t\tthis._process_options({daysOfWeekDisabled: daysOfWeekDisabled});\n\t\t\tthis.update();\n\t\t\tthis.updateNavArrows();\n\t\t},\n\n\t\tplace: function(){\n\t\t\tif (this.isInline)\n\t\t\t\treturn;\n\t\t\tvar calendarWidth = this.picker.outerWidth(),\n\t\t\t\tcalendarHeight = this.picker.outerHeight(),\n\t\t\t\tvisualPadding = 10,\n\t\t\t\twindowWidth = $window.width(),\n\t\t\t\twindowHeight = $window.height(),\n\t\t\t\tscrollTop = $window.scrollTop();\n\n\t\t\tvar zIndex = parseInt(this.element.parents().filter(function(){\n\t\t\t\t\treturn $(this).css('z-index') !== 'auto';\n\t\t\t\t}).first().css('z-index'))+10;\n\t\t\tvar offset = this.component ? this.component.parent().offset() : this.element.offset();\n\t\t\tvar height = this.component ? this.component.outerHeight(true) : this.element.outerHeight(false);\n\t\t\tvar width = this.component ? this.component.outerWidth(true) : this.element.outerWidth(false);\n\t\t\tvar left = offset.left,\n\t\t\t\ttop = offset.top;\n\n\t\t\tthis.picker.removeClass(\n\t\t\t\t'datepicker-orient-top datepicker-orient-bottom '+\n\t\t\t\t'datepicker-orient-right datepicker-orient-left'\n\t\t\t);\n\n\t\t\tif (this.o.orientation.x !== 'auto'){\n\t\t\t\tthis.picker.addClass('datepicker-orient-' + this.o.orientation.x);\n\t\t\t\tif (this.o.orientation.x === 'right')\n\t\t\t\t\tleft -= calendarWidth - width;\n\t\t\t}\n\t\t\t// auto x orientation is best-placement: if it crosses a window\n\t\t\t// edge, fudge it sideways\n\t\t\telse {\n\t\t\t\t// Default to left\n\t\t\t\tthis.picker.addClass('datepicker-orient-left');\n\t\t\t\tif (offset.left < 0)\n\t\t\t\t\tleft -= offset.left - visualPadding;\n\t\t\t\telse if (offset.left + calendarWidth > windowWidth)\n\t\t\t\t\tleft = windowWidth - calendarWidth - visualPadding;\n\t\t\t}\n\n\t\t\t// auto y orientation is best-situation: top or bottom, no fudging,\n\t\t\t// decision based on which shows more of the calendar\n\t\t\tvar yorient = this.o.orientation.y,\n\t\t\t\ttop_overflow, bottom_overflow;\n\t\t\tif (yorient === 'auto'){\n\t\t\t\ttop_overflow = -scrollTop + offset.top - calendarHeight;\n\t\t\t\tbottom_overflow = scrollTop + windowHeight - (offset.top + height + calendarHeight);\n\t\t\t\tif (Math.max(top_overflow, bottom_overflow) === bottom_overflow)\n\t\t\t\t\tyorient = 'top';\n\t\t\t\telse\n\t\t\t\t\tyorient = 'bottom';\n\t\t\t}\n\t\t\tthis.picker.addClass('datepicker-orient-' + yorient);\n\t\t\tif (yorient === 'top')\n\t\t\t\ttop += height;\n\t\t\telse\n\t\t\t\ttop -= calendarHeight + parseInt(this.picker.css('padding-top'));\n\n\t\t\tthis.picker.css({\n\t\t\t\ttop: top,\n\t\t\t\tleft: left,\n\t\t\t\tzIndex: zIndex\n\t\t\t});\n\t\t},\n\n\t\t_allow_update: true,\n\t\tupdate: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar oldDates = this.dates.copy(),\n\t\t\t\tdates = [],\n\t\t\t\tfromArgs = false;\n\t\t\tif (arguments.length){\n\t\t\t\t$.each(arguments, $.proxy(function(i, date){\n\t\t\t\t\tif (date instanceof Date)\n\t\t\t\t\t\tdate = this._local_to_utc(date);\n\t\t\t\t\tdates.push(date);\n\t\t\t\t}, this));\n\t\t\t\tfromArgs = true;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tdates = this.isInput\n\t\t\t\t\t\t? this.element.val()\n\t\t\t\t\t\t: this.element.data('date') || this.element.find('input').val();\n\t\t\t\tif (dates && this.o.multidate)\n\t\t\t\t\tdates = dates.split(this.o.multidateSeparator);\n\t\t\t\telse\n\t\t\t\t\tdates = [dates];\n\t\t\t\tdelete this.element.data().date;\n\t\t\t}\n\n\t\t\tdates = $.map(dates, $.proxy(function(date){\n\t\t\t\treturn DPGlobal.parseDate(date, this.o.format, this.o.language);\n\t\t\t}, this));\n\t\t\tdates = $.grep(dates, $.proxy(function(date){\n\t\t\t\treturn (\n\t\t\t\t\tdate < this.o.startDate ||\n\t\t\t\t\tdate > this.o.endDate ||\n\t\t\t\t\t!date\n\t\t\t\t);\n\t\t\t}, this), true);\n\t\t\tthis.dates.replace(dates);\n\n\t\t\tif (this.dates.length)\n\t\t\t\tthis.viewDate = new Date(this.dates.get(-1));\n\t\t\telse if (this.viewDate < this.o.startDate)\n\t\t\t\tthis.viewDate = new Date(this.o.startDate);\n\t\t\telse if (this.viewDate > this.o.endDate)\n\t\t\t\tthis.viewDate = new Date(this.o.endDate);\n\n\t\t\tif (fromArgs){\n\t\t\t\t// setting date by clicking\n\t\t\t\tthis.setValue();\n\t\t\t}\n\t\t\telse if (dates.length){\n\t\t\t\t// setting date by typing\n\t\t\t\tif (String(oldDates) !== String(this.dates))\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t}\n\t\t\tif (!this.dates.length && oldDates.length)\n\t\t\t\tthis._trigger('clearDate');\n\n\t\t\tthis.fill();\n\t\t},\n\n\t\tfillDow: function(){\n\t\t\tvar dowCnt = this.o.weekStart,\n\t\t\t\thtml = '<tr>';\n\t\t\tif (this.o.calendarWeeks){\n\t\t\t\tvar cell = '<th class=\"cw\">&nbsp;</th>';\n\t\t\t\thtml += cell;\n\t\t\t\tthis.picker.find('.datepicker-days thead tr:first-child').prepend(cell);\n\t\t\t}\n\t\t\twhile (dowCnt < this.o.weekStart + 7){\n\t\t\t\thtml += '<th class=\"dow\">'+dates[this.o.language].daysMin[(dowCnt++)%7]+'</th>';\n\t\t\t}\n\t\t\thtml += '</tr>';\n\t\t\tthis.picker.find('.datepicker-days thead').append(html);\n\t\t},\n\n\t\tfillMonths: function(){\n\t\t\tvar html = '',\n\t\t\ti = 0;\n\t\t\twhile (i < 12){\n\t\t\t\thtml += '<span class=\"month\">'+dates[this.o.language].monthsShort[i++]+'</span>';\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-months td').html(html);\n\t\t},\n\n\t\tsetRange: function(range){\n\t\t\tif (!range || !range.length)\n\t\t\t\tdelete this.range;\n\t\t\telse\n\t\t\t\tthis.range = $.map(range, function(d){\n\t\t\t\t\treturn d.valueOf();\n\t\t\t\t});\n\t\t\tthis.fill();\n\t\t},\n\n\t\tgetClassNames: function(date){\n\t\t\tvar cls = [],\n\t\t\t\tyear = this.viewDate.getUTCFullYear(),\n\t\t\t\tmonth = this.viewDate.getUTCMonth(),\n\t\t\t\ttoday = new Date();\n\t\t\tif (date.getUTCFullYear() < year || (date.getUTCFullYear() === year && date.getUTCMonth() < month)){\n\t\t\t\tcls.push('old');\n\t\t\t}\n\t\t\telse if (date.getUTCFullYear() > year || (date.getUTCFullYear() === year && date.getUTCMonth() > month)){\n\t\t\t\tcls.push('new');\n\t\t\t}\n\t\t\tif (this.focusDate && date.valueOf() === this.focusDate.valueOf())\n\t\t\t\tcls.push('focused');\n\t\t\t// Compare internal UTC date with local today, not UTC today\n\t\t\tif (this.o.todayHighlight &&\n\t\t\t\tdate.getUTCFullYear() === today.getFullYear() &&\n\t\t\t\tdate.getUTCMonth() === today.getMonth() &&\n\t\t\t\tdate.getUTCDate() === today.getDate()){\n\t\t\t\tcls.push('today');\n\t\t\t}\n\t\t\tif (this.dates.contains(date) !== -1)\n\t\t\t\tcls.push('active');\n\t\t\tif (date.valueOf() < this.o.startDate || date.valueOf() > this.o.endDate ||\n\t\t\t\t$.inArray(date.getUTCDay(), this.o.daysOfWeekDisabled) !== -1){\n\t\t\t\tcls.push('disabled');\n\t\t\t}\n\t\t\tif (this.range){\n\t\t\t\tif (date > this.range[0] && date < this.range[this.range.length-1]){\n\t\t\t\t\tcls.push('range');\n\t\t\t\t}\n\t\t\t\tif ($.inArray(date.valueOf(), this.range) !== -1){\n\t\t\t\t\tcls.push('selected');\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn cls;\n\t\t},\n\n\t\tfill: function(){\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth(),\n\t\t\t\tstartYear = this.o.startDate !== -Infinity ? this.o.startDate.getUTCFullYear() : -Infinity,\n\t\t\t\tstartMonth = this.o.startDate !== -Infinity ? this.o.startDate.getUTCMonth() : -Infinity,\n\t\t\t\tendYear = this.o.endDate !== Infinity ? this.o.endDate.getUTCFullYear() : Infinity,\n\t\t\t\tendMonth = this.o.endDate !== Infinity ? this.o.endDate.getUTCMonth() : Infinity,\n\t\t\t\ttodaytxt = dates[this.o.language].today || dates['en'].today || '',\n\t\t\t\tcleartxt = dates[this.o.language].clear || dates['en'].clear || '',\n\t\t\t\ttooltip;\n\t\t\tthis.picker.find('.datepicker-days thead th.datepicker-switch')\n\t\t\t\t\t\t.text(dates[this.o.language].months[month]+' '+year);\n\t\t\tthis.picker.find('tfoot th.today')\n\t\t\t\t\t\t.text(todaytxt)\n\t\t\t\t\t\t.toggle(this.o.todayBtn !== false);\n\t\t\tthis.picker.find('tfoot th.clear')\n\t\t\t\t\t\t.text(cleartxt)\n\t\t\t\t\t\t.toggle(this.o.clearBtn !== false);\n\t\t\tthis.updateNavArrows();\n\t\t\tthis.fillMonths();\n\t\t\tvar prevMonth = UTCDate(year, month-1, 28),\n\t\t\t\tday = DPGlobal.getDaysInMonth(prevMonth.getUTCFullYear(), prevMonth.getUTCMonth());\n\t\t\tprevMonth.setUTCDate(day);\n\t\t\tprevMonth.setUTCDate(day - (prevMonth.getUTCDay() - this.o.weekStart + 7)%7);\n\t\t\tvar nextMonth = new Date(prevMonth);\n\t\t\tnextMonth.setUTCDate(nextMonth.getUTCDate() + 42);\n\t\t\tnextMonth = nextMonth.valueOf();\n\t\t\tvar html = [];\n\t\t\tvar clsName;\n\t\t\twhile (prevMonth.valueOf() < nextMonth){\n\t\t\t\tif (prevMonth.getUTCDay() === this.o.weekStart){\n\t\t\t\t\thtml.push('<tr>');\n\t\t\t\t\tif (this.o.calendarWeeks){\n\t\t\t\t\t\t// ISO 8601: First week contains first thursday.\n\t\t\t\t\t\t// ISO also states week starts on Monday, but we can be more abstract here.\n\t\t\t\t\t\tvar\n\t\t\t\t\t\t\t// Start of current week: based on weekstart/current date\n\t\t\t\t\t\t\tws = new Date(+prevMonth + (this.o.weekStart - prevMonth.getUTCDay() - 7) % 7 * 864e5),\n\t\t\t\t\t\t\t// Thursday of this week\n\t\t\t\t\t\t\tth = new Date(Number(ws) + (7 + 4 - ws.getUTCDay()) % 7 * 864e5),\n\t\t\t\t\t\t\t// First Thursday of year, year from thursday\n\t\t\t\t\t\t\tyth = new Date(Number(yth = UTCDate(th.getUTCFullYear(), 0, 1)) + (7 + 4 - yth.getUTCDay())%7*864e5),\n\t\t\t\t\t\t\t// Calendar week: ms between thursdays, div ms per day, div 7 days\n\t\t\t\t\t\t\tcalWeek =  (th - yth) / 864e5 / 7 + 1;\n\t\t\t\t\t\thtml.push('<td class=\"cw\">'+ calWeek +'</td>');\n\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tclsName = this.getClassNames(prevMonth);\n\t\t\t\tclsName.push('day');\n\n\t\t\t\tif (this.o.beforeShowDay !== $.noop){\n\t\t\t\t\tvar before = this.o.beforeShowDay(this._utc_to_local(prevMonth));\n\t\t\t\t\tif (before === undefined)\n\t\t\t\t\t\tbefore = {};\n\t\t\t\t\telse if (typeof(before) === 'boolean')\n\t\t\t\t\t\tbefore = {enabled: before};\n\t\t\t\t\telse if (typeof(before) === 'string')\n\t\t\t\t\t\tbefore = {classes: before};\n\t\t\t\t\tif (before.enabled === false)\n\t\t\t\t\t\tclsName.push('disabled');\n\t\t\t\t\tif (before.classes)\n\t\t\t\t\t\tclsName = clsName.concat(before.classes.split(/\\s+/));\n\t\t\t\t\tif (before.tooltip)\n\t\t\t\t\t\ttooltip = before.tooltip;\n\t\t\t\t}\n\n\t\t\t\tclsName = $.unique(clsName);\n\t\t\t\thtml.push('<td class=\"'+clsName.join(' ')+'\"' + (tooltip ? ' title=\"'+tooltip+'\"' : '') + '>'+prevMonth.getUTCDate() + '</td>');\n\t\t\t\tif (prevMonth.getUTCDay() === this.o.weekEnd){\n\t\t\t\t\thtml.push('</tr>');\n\t\t\t\t}\n\t\t\t\tprevMonth.setUTCDate(prevMonth.getUTCDate()+1);\n\t\t\t}\n\t\t\tthis.picker.find('.datepicker-days tbody').empty().append(html.join(''));\n\n\t\t\tvar months = this.picker.find('.datepicker-months')\n\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t.text(year)\n\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t.find('span').removeClass('active');\n\n\t\t\t$.each(this.dates, function(i, d){\n\t\t\t\tif (d.getUTCFullYear() === year)\n\t\t\t\t\tmonths.eq(d.getUTCMonth()).addClass('active');\n\t\t\t});\n\n\t\t\tif (year < startYear || year > endYear){\n\t\t\t\tmonths.addClass('disabled');\n\t\t\t}\n\t\t\tif (year === startYear){\n\t\t\t\tmonths.slice(0, startMonth).addClass('disabled');\n\t\t\t}\n\t\t\tif (year === endYear){\n\t\t\t\tmonths.slice(endMonth+1).addClass('disabled');\n\t\t\t}\n\n\t\t\thtml = '';\n\t\t\tyear = parseInt(year/10, 10) * 10;\n\t\t\tvar yearCont = this.picker.find('.datepicker-years')\n\t\t\t\t\t\t\t\t.find('th:eq(1)')\n\t\t\t\t\t\t\t\t\t.text(year + '-' + (year + 9))\n\t\t\t\t\t\t\t\t\t.end()\n\t\t\t\t\t\t\t\t.find('td');\n\t\t\tyear -= 1;\n\t\t\tvar years = $.map(this.dates, function(d){\n\t\t\t\t\treturn d.getUTCFullYear();\n\t\t\t\t}),\n\t\t\t\tclasses;\n\t\t\tfor (var i = -1; i < 11; i++){\n\t\t\t\tclasses = ['year'];\n\t\t\t\tif (i === -1)\n\t\t\t\t\tclasses.push('old');\n\t\t\t\telse if (i === 10)\n\t\t\t\t\tclasses.push('new');\n\t\t\t\tif ($.inArray(year, years) !== -1)\n\t\t\t\t\tclasses.push('active');\n\t\t\t\tif (year < startYear || year > endYear)\n\t\t\t\t\tclasses.push('disabled');\n\t\t\t\thtml += '<span class=\"' + classes.join(' ') + '\">'+year+'</span>';\n\t\t\t\tyear += 1;\n\t\t\t}\n\t\t\tyearCont.html(html);\n\t\t},\n\n\t\tupdateNavArrows: function(){\n\t\t\tif (!this._allow_update)\n\t\t\t\treturn;\n\n\t\t\tvar d = new Date(this.viewDate),\n\t\t\t\tyear = d.getUTCFullYear(),\n\t\t\t\tmonth = d.getUTCMonth();\n\t\t\tswitch (this.viewMode){\n\t\t\t\tcase 0:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear() && month <= this.o.startDate.getUTCMonth()){\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear() && month >= this.o.endDate.getUTCMonth()){\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 1:\n\t\t\t\tcase 2:\n\t\t\t\t\tif (this.o.startDate !== -Infinity && year <= this.o.startDate.getUTCFullYear()){\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.prev').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tif (this.o.endDate !== Infinity && year >= this.o.endDate.getUTCFullYear()){\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'hidden'});\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tthis.picker.find('.next').css({visibility: 'visible'});\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t},\n\n\t\tclick: function(e){\n\t\t\te.preventDefault();\n\t\t\tvar target = $(e.target).closest('span, td, th'),\n\t\t\t\tyear, month, day;\n\t\t\tif (target.length === 1){\n\t\t\t\tswitch (target[0].nodeName.toLowerCase()){\n\t\t\t\t\tcase 'th':\n\t\t\t\t\t\tswitch (target[0].className){\n\t\t\t\t\t\t\tcase 'datepicker-switch':\n\t\t\t\t\t\t\t\tthis.showMode(1);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'prev':\n\t\t\t\t\t\t\tcase 'next':\n\t\t\t\t\t\t\t\tvar dir = DPGlobal.modes[this.viewMode].navStep * (target[0].className === 'prev' ? -1 : 1);\n\t\t\t\t\t\t\t\tswitch (this.viewMode){\n\t\t\t\t\t\t\t\t\tcase 0:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveMonth(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 1:\n\t\t\t\t\t\t\t\t\tcase 2:\n\t\t\t\t\t\t\t\t\t\tthis.viewDate = this.moveYear(this.viewDate, dir);\n\t\t\t\t\t\t\t\t\t\tif (this.viewMode === 1)\n\t\t\t\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\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\tthis.fill();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'today':\n\t\t\t\t\t\t\t\tvar date = new Date();\n\t\t\t\t\t\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\n\t\t\t\t\t\t\t\tthis.showMode(-2);\n\t\t\t\t\t\t\t\tvar which = this.o.todayBtn === 'linked' ? null : 'view';\n\t\t\t\t\t\t\t\tthis._setDate(date, which);\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'clear':\n\t\t\t\t\t\t\t\tvar element;\n\t\t\t\t\t\t\t\tif (this.isInput)\n\t\t\t\t\t\t\t\t\telement = this.element;\n\t\t\t\t\t\t\t\telse if (this.component)\n\t\t\t\t\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t\t\t\t\tif (element)\n\t\t\t\t\t\t\t\t\telement.val(\"\").change();\n\t\t\t\t\t\t\t\tthis.update();\n\t\t\t\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'span':\n\t\t\t\t\t\tif (!target.is('.disabled')){\n\t\t\t\t\t\t\tthis.viewDate.setUTCDate(1);\n\t\t\t\t\t\t\tif (target.is('.month')){\n\t\t\t\t\t\t\t\tday = 1;\n\t\t\t\t\t\t\t\tmonth = target.parent().find('span').index(target);\n\t\t\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCMonth(month);\n\t\t\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 1){\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tday = 1;\n\t\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t\t\tyear = parseInt(target.text(), 10)||0;\n\t\t\t\t\t\t\t\tthis.viewDate.setUTCFullYear(year);\n\t\t\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t\t\t\tif (this.o.minViewMode === 2){\n\t\t\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis.showMode(-1);\n\t\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'td':\n\t\t\t\t\t\tif (target.is('.day') && !target.is('.disabled')){\n\t\t\t\t\t\t\tday = parseInt(target.text(), 10)||1;\n\t\t\t\t\t\t\tyear = this.viewDate.getUTCFullYear();\n\t\t\t\t\t\t\tmonth = this.viewDate.getUTCMonth();\n\t\t\t\t\t\t\tif (target.is('.old')){\n\t\t\t\t\t\t\t\tif (month === 0){\n\t\t\t\t\t\t\t\t\tmonth = 11;\n\t\t\t\t\t\t\t\t\tyear -= 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tmonth -= 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\telse if (target.is('.new')){\n\t\t\t\t\t\t\t\tif (month === 11){\n\t\t\t\t\t\t\t\t\tmonth = 0;\n\t\t\t\t\t\t\t\t\tyear += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\t\tmonth += 1;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tthis._setDate(UTCDate(year, month, day));\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.picker.is(':visible') && this._focused_from){\n\t\t\t\t$(this._focused_from).focus();\n\t\t\t}\n\t\t\tdelete this._focused_from;\n\t\t},\n\n\t\t_toggle_multidate: function(date){\n\t\t\tvar ix = this.dates.contains(date);\n\t\t\tif (!date){\n\t\t\t\tthis.dates.clear();\n\t\t\t}\n\t\t\telse if (ix !== -1){\n\t\t\t\tthis.dates.remove(ix);\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis.dates.push(date);\n\t\t\t}\n\t\t\tif (typeof this.o.multidate === 'number')\n\t\t\t\twhile (this.dates.length > this.o.multidate)\n\t\t\t\t\tthis.dates.remove(0);\n\t\t},\n\n\t\t_setDate: function(date, which){\n\t\t\tif (!which || which === 'date')\n\t\t\t\tthis._toggle_multidate(date && new Date(date));\n\t\t\tif (!which || which  === 'view')\n\t\t\t\tthis.viewDate = date && new Date(date);\n\n\t\t\tthis.fill();\n\t\t\tthis.setValue();\n\t\t\tthis._trigger('changeDate');\n\t\t\tvar element;\n\t\t\tif (this.isInput){\n\t\t\t\telement = this.element;\n\t\t\t}\n\t\t\telse if (this.component){\n\t\t\t\telement = this.element.find('input');\n\t\t\t}\n\t\t\tif (element){\n\t\t\t\telement.change();\n\t\t\t}\n\t\t\tif (this.o.autoclose && (!which || which === 'date')){\n\t\t\t\tthis.hide();\n\t\t\t}\n\t\t},\n\n\t\tmoveMonth: function(date, dir){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (!dir)\n\t\t\t\treturn date;\n\t\t\tvar new_date = new Date(date.valueOf()),\n\t\t\t\tday = new_date.getUTCDate(),\n\t\t\t\tmonth = new_date.getUTCMonth(),\n\t\t\t\tmag = Math.abs(dir),\n\t\t\t\tnew_month, test;\n\t\t\tdir = dir > 0 ? 1 : -1;\n\t\t\tif (mag === 1){\n\t\t\t\ttest = dir === -1\n\t\t\t\t\t// If going back one month, make sure month is not current month\n\t\t\t\t\t// (eg, Mar 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t? function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() === month;\n\t\t\t\t\t}\n\t\t\t\t\t// If going forward one month, make sure month is as expected\n\t\t\t\t\t// (eg, Jan 31 -> Feb 31 == Feb 28, not Mar 02)\n\t\t\t\t\t: function(){\n\t\t\t\t\t\treturn new_date.getUTCMonth() !== new_month;\n\t\t\t\t\t};\n\t\t\t\tnew_month = month + dir;\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t\t// Dec -> Jan (12) or Jan -> Dec (-1) -- limit expected date to 0-11\n\t\t\t\tif (new_month < 0 || new_month > 11)\n\t\t\t\t\tnew_month = (new_month + 12) % 12;\n\t\t\t}\n\t\t\telse {\n\t\t\t\t// For magnitudes >1, move one month at a time...\n\t\t\t\tfor (var i=0; i < mag; i++)\n\t\t\t\t\t// ...which might decrease the day (eg, Jan 31 to Feb 28, etc)...\n\t\t\t\t\tnew_date = this.moveMonth(new_date, dir);\n\t\t\t\t// ...then reset the day, keeping it in the new month\n\t\t\t\tnew_month = new_date.getUTCMonth();\n\t\t\t\tnew_date.setUTCDate(day);\n\t\t\t\ttest = function(){\n\t\t\t\t\treturn new_month !== new_date.getUTCMonth();\n\t\t\t\t};\n\t\t\t}\n\t\t\t// Common date-resetting loop -- if date is beyond end of month, make it\n\t\t\t// end of month\n\t\t\twhile (test()){\n\t\t\t\tnew_date.setUTCDate(--day);\n\t\t\t\tnew_date.setUTCMonth(new_month);\n\t\t\t}\n\t\t\treturn new_date;\n\t\t},\n\n\t\tmoveYear: function(date, dir){\n\t\t\treturn this.moveMonth(date, dir*12);\n\t\t},\n\n\t\tdateWithinRange: function(date){\n\t\t\treturn date >= this.o.startDate && date <= this.o.endDate;\n\t\t},\n\n\t\tkeydown: function(e){\n\t\t\tif (this.picker.is(':not(:visible)')){\n\t\t\t\tif (e.keyCode === 27) // allow escape to hide and re-show picker\n\t\t\t\t\tthis.show();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar dateChanged = false,\n\t\t\t\tdir, newDate, newViewDate,\n\t\t\t\tfocusDate = this.focusDate || this.viewDate;\n\t\t\tswitch (e.keyCode){\n\t\t\t\tcase 27: // escape\n\t\t\t\t\tif (this.focusDate){\n\t\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t\tthis.hide();\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 37: // left\n\t\t\t\tcase 39: // right\n\t\t\t\t\tif (!this.o.keyboardNavigation)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 37 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewDate = new Date(this.dates.get(-1) || UTCToday());\n\t\t\t\t\t\tnewDate.setUTCDate(newDate.getUTCDate() + dir);\n\t\t\t\t\t\tnewViewDate = new Date(focusDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(focusDate.getUTCDate() + dir);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 38: // up\n\t\t\t\tcase 40: // down\n\t\t\t\t\tif (!this.o.keyboardNavigation)\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdir = e.keyCode === 38 ? -1 : 1;\n\t\t\t\t\tif (e.ctrlKey){\n\t\t\t\t\t\tnewDate = this.moveYear(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveYear(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeYear', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse if (e.shiftKey){\n\t\t\t\t\t\tnewDate = this.moveMonth(this.dates.get(-1) || UTCToday(), dir);\n\t\t\t\t\t\tnewViewDate = this.moveMonth(focusDate, dir);\n\t\t\t\t\t\tthis._trigger('changeMonth', this.viewDate);\n\t\t\t\t\t}\n\t\t\t\t\telse {\n\t\t\t\t\t\tnewDate = new Date(this.dates.get(-1) || UTCToday());\n\t\t\t\t\t\tnewDate.setUTCDate(newDate.getUTCDate() + dir * 7);\n\t\t\t\t\t\tnewViewDate = new Date(focusDate);\n\t\t\t\t\t\tnewViewDate.setUTCDate(focusDate.getUTCDate() + dir * 7);\n\t\t\t\t\t}\n\t\t\t\t\tif (this.dateWithinRange(newDate)){\n\t\t\t\t\t\tthis.focusDate = this.viewDate = newViewDate;\n\t\t\t\t\t\tthis.setValue();\n\t\t\t\t\t\tthis.fill();\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 32: // spacebar\n\t\t\t\t\t// Spacebar is used in manually typing dates in some formats.\n\t\t\t\t\t// As such, its behavior should not be hijacked.\n\t\t\t\t\tbreak;\n\t\t\t\tcase 13: // enter\n\t\t\t\t\tfocusDate = this.focusDate || this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis._toggle_multidate(focusDate);\n\t\t\t\t\tdateChanged = true;\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.setValue();\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tif (this.picker.is(':visible')){\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\tif (this.o.autoclose)\n\t\t\t\t\t\t\tthis.hide();\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 9: // tab\n\t\t\t\t\tthis.focusDate = null;\n\t\t\t\t\tthis.viewDate = this.dates.get(-1) || this.viewDate;\n\t\t\t\t\tthis.fill();\n\t\t\t\t\tthis.hide();\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tif (dateChanged){\n\t\t\t\tif (this.dates.length)\n\t\t\t\t\tthis._trigger('changeDate');\n\t\t\t\telse\n\t\t\t\t\tthis._trigger('clearDate');\n\t\t\t\tvar element;\n\t\t\t\tif (this.isInput){\n\t\t\t\t\telement = this.element;\n\t\t\t\t}\n\t\t\t\telse if (this.component){\n\t\t\t\t\telement = this.element.find('input');\n\t\t\t\t}\n\t\t\t\tif (element){\n\t\t\t\t\telement.change();\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tshowMode: function(dir){\n\t\t\tif (dir){\n\t\t\t\tthis.viewMode = Math.max(this.o.minViewMode, Math.min(2, this.viewMode + dir));\n\t\t\t}\n\t\t\tthis.picker\n\t\t\t\t.find('>div')\n\t\t\t\t.hide()\n\t\t\t\t.filter('.datepicker-'+DPGlobal.modes[this.viewMode].clsName)\n\t\t\t\t\t.css('display', 'block');\n\t\t\tthis.updateNavArrows();\n\t\t}\n\t};\n\n\tvar DateRangePicker = function(element, options){\n\t\tthis.element = $(element);\n\t\tthis.inputs = $.map(options.inputs, function(i){\n\t\t\treturn i.jquery ? i[0] : i;\n\t\t});\n\t\tdelete options.inputs;\n\n\t\t$(this.inputs)\n\t\t\t.datepicker(options)\n\t\t\t.bind('changeDate', $.proxy(this.dateUpdated, this));\n\n\t\tthis.pickers = $.map(this.inputs, function(i){\n\t\t\treturn $(i).data('datepicker');\n\t\t});\n\t\tthis.updateDates();\n\t};\n\tDateRangePicker.prototype = {\n\t\tupdateDates: function(){\n\t\t\tthis.dates = $.map(this.pickers, function(i){\n\t\t\t\treturn i.getUTCDate();\n\t\t\t});\n\t\t\tthis.updateRanges();\n\t\t},\n\t\tupdateRanges: function(){\n\t\t\tvar range = $.map(this.dates, function(d){\n\t\t\t\treturn d.valueOf();\n\t\t\t});\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tp.setRange(range);\n\t\t\t});\n\t\t},\n\t\tdateUpdated: function(e){\n\t\t\t// `this.updating` is a workaround for preventing infinite recursion\n\t\t\t// between `changeDate` triggering and `setUTCDate` calling.  Until\n\t\t\t// there is a better mechanism.\n\t\t\tif (this.updating)\n\t\t\t\treturn;\n\t\t\tthis.updating = true;\n\n\t\t\tvar dp = $(e.target).data('datepicker'),\n\t\t\t\tnew_date = dp.getUTCDate(),\n\t\t\t\ti = $.inArray(e.target, this.inputs),\n\t\t\t\tl = this.inputs.length;\n\t\t\tif (i === -1)\n\t\t\t\treturn;\n\n\t\t\t$.each(this.pickers, function(i, p){\n\t\t\t\tif (!p.getUTCDate())\n\t\t\t\t\tp.setUTCDate(new_date);\n\t\t\t});\n\n\t\t\tif (new_date < this.dates[i]){\n\t\t\t\t// Date being moved earlier/left\n\t\t\t\twhile (i >= 0 && new_date < this.dates[i]){\n\t\t\t\t\tthis.pickers[i--].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse if (new_date > this.dates[i]){\n\t\t\t\t// Date being moved later/right\n\t\t\t\twhile (i < l && new_date > this.dates[i]){\n\t\t\t\t\tthis.pickers[i++].setUTCDate(new_date);\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.updateDates();\n\n\t\t\tdelete this.updating;\n\t\t},\n\t\tremove: function(){\n\t\t\t$.map(this.pickers, function(p){ p.remove(); });\n\t\t\tdelete this.element.data().datepicker;\n\t\t}\n\t};\n\n\tfunction opts_from_el(el, prefix){\n\t\t// Derive options from element data-attrs\n\t\tvar data = $(el).data(),\n\t\t\tout = {}, inkey,\n\t\t\treplace = new RegExp('^' + prefix.toLowerCase() + '([A-Z])');\n\t\tprefix = new RegExp('^' + prefix.toLowerCase());\n\t\tfunction re_lower(_,a){\n\t\t\treturn a.toLowerCase();\n\t\t}\n\t\tfor (var key in data)\n\t\t\tif (prefix.test(key)){\n\t\t\t\tinkey = key.replace(replace, re_lower);\n\t\t\t\tout[inkey] = data[key];\n\t\t\t}\n\t\treturn out;\n\t}\n\n\tfunction opts_from_locale(lang){\n\t\t// Derive options from locale plugins\n\t\tvar out = {};\n\t\t// Check if \"de-DE\" style date is available, if not language should\n\t\t// fallback to 2 letter code eg \"de\"\n\t\tif (!dates[lang]){\n\t\t\tlang = lang.split('-')[0];\n\t\t\tif (!dates[lang])\n\t\t\t\treturn;\n\t\t}\n\t\tvar d = dates[lang];\n\t\t$.each(locale_opts, function(i,k){\n\t\t\tif (k in d)\n\t\t\t\tout[k] = d[k];\n\t\t});\n\t\treturn out;\n\t}\n\n\tvar old = $.fn.datepicker;\n\t$.fn.datepicker = function(option){\n\t\tvar args = Array.apply(null, arguments);\n\t\targs.shift();\n\t\tvar internal_return;\n\t\tthis.each(function(){\n\t\t\tvar $this = $(this),\n\t\t\t\tdata = $this.data('datepicker'),\n\t\t\t\toptions = typeof option === 'object' && option;\n\t\t\tif (!data){\n\t\t\t\tvar elopts = opts_from_el(this, 'date'),\n\t\t\t\t\t// Preliminary otions\n\t\t\t\t\txopts = $.extend({}, defaults, elopts, options),\n\t\t\t\t\tlocopts = opts_from_locale(xopts.language),\n\t\t\t\t\t// Options priority: js args, data-attrs, locales, defaults\n\t\t\t\t\topts = $.extend({}, defaults, locopts, elopts, options);\n\t\t\t\tif ($this.is('.input-daterange') || opts.inputs){\n\t\t\t\t\tvar ropts = {\n\t\t\t\t\t\tinputs: opts.inputs || $this.find('input').toArray()\n\t\t\t\t\t};\n\t\t\t\t\t$this.data('datepicker', (data = new DateRangePicker(this, $.extend(opts, ropts))));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t$this.data('datepicker', (data = new Datepicker(this, opts)));\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (typeof option === 'string' && typeof data[option] === 'function'){\n\t\t\t\tinternal_return = data[option].apply(data, args);\n\t\t\t\tif (internal_return !== undefined)\n\t\t\t\t\treturn false;\n\t\t\t}\n\t\t});\n\t\tif (internal_return !== undefined)\n\t\t\treturn internal_return;\n\t\telse\n\t\t\treturn this;\n\t};\n\n\tvar defaults = $.fn.datepicker.defaults = {\n\t\tautoclose: false,\n\t\tbeforeShowDay: $.noop,\n\t\tcalendarWeeks: false,\n\t\tclearBtn: false,\n\t\tdaysOfWeekDisabled: [],\n\t\tendDate: Infinity,\n\t\tforceParse: true,\n\t\tformat: 'yyyy-mm-dd',\n\t\tkeyboardNavigation: true,\n\t\tlanguage: 'en',\n\t\tminViewMode: 0,\n\t\tmultidate: false,\n\t\tmultidateSeparator: ',',\n\t\torientation: \"auto\",\n\t\trtl: false,\n\t\tstartDate: -Infinity,\n\t\tstartView: 0,\n\t\ttodayBtn: false,\n\t\ttodayHighlight: false,\n\t\tweekStart: 0\n\t};\n\tvar locale_opts = $.fn.datepicker.locale_opts = [\n\t\t'format',\n\t\t'rtl',\n\t\t'weekStart'\n\t];\n\t$.fn.datepicker.Constructor = Datepicker;\n\tvar dates = $.fn.datepicker.dates = {\n\t\ten: {\n\t\t\tdays: [\"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\", \"星期日\"],\n\t\t\tdaysShort: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\t\tdaysMin: [\"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"日\"],\n\t\t\tmonths: [\"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"],\n\t\t\tmonthsShort: [\"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\", \"10\", \"11\", \"12\"],\n\t\t\ttoday: \"今天\",\n\t\t\tclear: \"清空\"\n\t\t}\n\t};\n\n\tvar DPGlobal = {\n\t\tmodes: [\n\t\t\t{\n\t\t\t\tclsName: 'days',\n\t\t\t\tnavFnc: 'Month',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'months',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tclsName: 'years',\n\t\t\t\tnavFnc: 'FullYear',\n\t\t\t\tnavStep: 10\n\t\t}],\n\t\tisLeapYear: function(year){\n\t\t\treturn (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0));\n\t\t},\n\t\tgetDaysInMonth: function(year, month){\n\t\t\treturn [31, (DPGlobal.isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];\n\t\t},\n\t\tvalidParts: /dd?|DD?|mm?|MM?|yy(?:yy)?/g,\n\t\tnonpunctuation: /[^ -\\/:-@\\[\\u3400-\\u9fff-`{-~\\t\\n\\r]+/g,\n\t\tparseFormat: function(format){\n\t\t\t// IE treats \\0 as a string end in inputs (truncating the value),\n\t\t\t// so it's a bad format delimiter, anyway\n\t\t\tvar separators = format.replace(this.validParts, '\\0').split('\\0'),\n\t\t\t\tparts = format.match(this.validParts);\n\t\t\tif (!separators || !separators.length || !parts || parts.length === 0){\n\t\t\t\tthrow new Error(\"Invalid date format.\");\n\t\t\t}\n\t\t\treturn {separators: separators, parts: parts};\n\t\t},\n\t\tparseDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn undefined;\n\t\t\tif (date instanceof Date)\n\t\t\t\treturn date;\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tvar part_re = /([\\-+]\\d+)([dmwy])/,\n\t\t\t\tparts = date.match(/([\\-+]\\d+)([dmwy])/g),\n\t\t\t\tpart, dir, i;\n\t\t\tif (/^[\\-+]\\d+[dmwy]([\\s,]+[\\-+]\\d+[dmwy])*$/.test(date)){\n\t\t\t\tdate = new Date();\n\t\t\t\tfor (i=0; i < parts.length; i++){\n\t\t\t\t\tpart = part_re.exec(parts[i]);\n\t\t\t\t\tdir = parseInt(part[1]);\n\t\t\t\t\tswitch (part[2]){\n\t\t\t\t\t\tcase 'd':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'm':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveMonth.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'w':\n\t\t\t\t\t\t\tdate.setUTCDate(date.getUTCDate() + dir * 7);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\tcase 'y':\n\t\t\t\t\t\t\tdate = Datepicker.prototype.moveYear.call(Datepicker.prototype, date, dir);\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn UTCDate(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), 0, 0, 0);\n\t\t\t}\n\t\t\tparts = date && date.match(this.nonpunctuation) || [];\n\t\t\tdate = new Date();\n\t\t\tvar parsed = {},\n\t\t\t\tsetters_order = ['yyyy', 'yy', 'M', 'MM', 'm', 'mm', 'd', 'dd'],\n\t\t\t\tsetters_map = {\n\t\t\t\t\tyyyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(v);\n\t\t\t\t\t},\n\t\t\t\t\tyy: function(d,v){\n\t\t\t\t\t\treturn d.setUTCFullYear(2000+v);\n\t\t\t\t\t},\n\t\t\t\t\tm: function(d,v){\n\t\t\t\t\t\tif (isNaN(d))\n\t\t\t\t\t\t\treturn d;\n\t\t\t\t\t\tv -= 1;\n\t\t\t\t\t\twhile (v < 0) v += 12;\n\t\t\t\t\t\tv %= 12;\n\t\t\t\t\t\td.setUTCMonth(v);\n\t\t\t\t\t\twhile (d.getUTCMonth() !== v)\n\t\t\t\t\t\t\td.setUTCDate(d.getUTCDate()-1);\n\t\t\t\t\t\treturn d;\n\t\t\t\t\t},\n\t\t\t\t\td: function(d,v){\n\t\t\t\t\t\treturn d.setUTCDate(v);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tval, filtered;\n\t\t\tsetters_map['M'] = setters_map['MM'] = setters_map['mm'] = setters_map['m'];\n\t\t\tsetters_map['dd'] = setters_map['d'];\n\t\t\tdate = UTCDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);\n\t\t\tvar fparts = format.parts.slice();\n\t\t\t// Remove noop parts\n\t\t\tif (parts.length !== fparts.length){\n\t\t\t\tfparts = $(fparts).filter(function(i,p){\n\t\t\t\t\treturn $.inArray(p, setters_order) !== -1;\n\t\t\t\t}).toArray();\n\t\t\t}\n\t\t\t// Process remainder\n\t\t\tfunction match_part(){\n\t\t\t\tvar m = this.slice(0, parts[i].length),\n\t\t\t\t\tp = parts[i].slice(0, m.length);\n\t\t\t\treturn m === p;\n\t\t\t}\n\t\t\tif (parts.length === fparts.length){\n\t\t\t\tvar cnt;\n\t\t\t\tfor (i=0, cnt = fparts.length; i < cnt; i++){\n\t\t\t\t\tval = parseInt(parts[i], 10);\n\t\t\t\t\tpart = fparts[i];\n\t\t\t\t\tif (isNaN(val)){\n\t\t\t\t\t\tswitch (part){\n\t\t\t\t\t\t\tcase 'MM':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].months).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].months) + 1;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\tcase 'M':\n\t\t\t\t\t\t\t\tfiltered = $(dates[language].monthsShort).filter(match_part);\n\t\t\t\t\t\t\t\tval = $.inArray(filtered[0], dates[language].monthsShort) + 1;\n\t\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\tparsed[part] = val;\n\t\t\t\t}\n\t\t\t\tvar _date, s;\n\t\t\t\tfor (i=0; i < setters_order.length; i++){\n\t\t\t\t\ts = setters_order[i];\n\t\t\t\t\tif (s in parsed && !isNaN(parsed[s])){\n\t\t\t\t\t\t_date = new Date(date);\n\t\t\t\t\t\tsetters_map[s](_date, parsed[s]);\n\t\t\t\t\t\tif (!isNaN(_date))\n\t\t\t\t\t\t\tdate = _date;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn date;\n\t\t},\n\t\tformatDate: function(date, format, language){\n\t\t\tif (!date)\n\t\t\t\treturn '';\n\t\t\tif (typeof format === 'string')\n\t\t\t\tformat = DPGlobal.parseFormat(format);\n\t\t\tvar val = {\n\t\t\t\td: date.getUTCDate(),\n\t\t\t\tD: dates[language].daysShort[date.getUTCDay()],\n\t\t\t\tDD: dates[language].days[date.getUTCDay()],\n\t\t\t\tm: date.getUTCMonth() + 1,\n\t\t\t\tM: dates[language].monthsShort[date.getUTCMonth()],\n\t\t\t\tMM: dates[language].months[date.getUTCMonth()],\n\t\t\t\tyy: date.getUTCFullYear().toString().substring(2),\n\t\t\t\tyyyy: date.getUTCFullYear()\n\t\t\t};\n\t\t\tval.dd = (val.d < 10 ? '0' : '') + val.d;\n\t\t\tval.mm = (val.m < 10 ? '0' : '') + val.m;\n\t\t\tdate = [];\n\t\t\tvar seps = $.extend([], format.separators);\n\t\t\tfor (var i=0, cnt = format.parts.length; i <= cnt; i++){\n\t\t\t\tif (seps.length)\n\t\t\t\t\tdate.push(seps.shift());\n\t\t\t\tdate.push(val[format.parts[i]]);\n\t\t\t}\n\t\t\treturn date.join('');\n\t\t},\n\t\theadTemplate: '<thead>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th class=\"prev\">&laquo;</th>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"5\" class=\"datepicker-switch\"></th>'+\n\t\t\t\t\t\t\t\t'<th class=\"next\">&raquo;</th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</thead>',\n\t\tcontTemplate: '<tbody><tr><td colspan=\"7\"></td></tr></tbody>',\n\t\tfootTemplate: '<tfoot>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"today\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t\t'<tr>'+\n\t\t\t\t\t\t\t\t'<th colspan=\"7\" class=\"clear\"></th>'+\n\t\t\t\t\t\t\t'</tr>'+\n\t\t\t\t\t\t'</tfoot>'\n\t};\n\tDPGlobal.template = '<div class=\"datepicker\">'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-days\">'+\n\t\t\t\t\t\t\t\t'<table class=\" table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\t'<tbody></tbody>'+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-months\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t\t'<div class=\"datepicker-years\">'+\n\t\t\t\t\t\t\t\t'<table class=\"table-condensed\">'+\n\t\t\t\t\t\t\t\t\tDPGlobal.headTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.contTemplate+\n\t\t\t\t\t\t\t\t\tDPGlobal.footTemplate+\n\t\t\t\t\t\t\t\t'</table>'+\n\t\t\t\t\t\t\t'</div>'+\n\t\t\t\t\t\t'</div>';\n\n\t$.fn.datepicker.DPGlobal = DPGlobal;\n\n\n\t/* DATEPICKER NO CONFLICT\n\t* =================== */\n\n\t$.fn.datepicker.noConflict = function(){\n\t\t$.fn.datepicker = old;\n\t\treturn this;\n\t};\n\n\n\t/* DATEPICKER DATA-API\n\t* ================== */\n\n\t$(document).on(\n\t\t'focus.datepicker.data-api click.datepicker.data-api',\n\t\t'[data-provide=\"datepicker\"]',\n\t\tfunction(e){\n\t\t\tvar $this = $(this);\n\t\t\tif ($this.data('datepicker'))\n\t\t\t\treturn;\n\t\t\te.preventDefault();\n\t\t\t// component click requires us to explicitly show it\n\t\t\t$this.datepicker('show');\n\t\t}\n\t);\n\t$(function(){\n\t\t$('[data-provide=\"datepicker-inline\"]').datepicker();\n\t});\n\n}(window.jQuery));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/diff_match_patch/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;})()\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/dropzone/dropzone.js",
    "content": "\n;(function(){\n\n    /**\n     * Require the module at `name`.\n     *\n     * @param {String} name\n     * @return {Object} exports\n     * @api public\n     */\n\n    function require(name) {\n        var module = require.modules[name];\n        if (!module) throw new Error('failed to require \"' + name + '\"');\n\n        if (!('exports' in module) && typeof module.definition === 'function') {\n            module.client = module.component = true;\n            module.definition.call(this, module.exports = {}, module);\n            delete module.definition;\n        }\n\n        return module.exports;\n    }\n\n    /**\n     * Registered modules.\n     */\n\n    require.modules = {};\n\n    /**\n     * Register module at `name` with callback `definition`.\n     *\n     * @param {String} name\n     * @param {Function} definition\n     * @api private\n     */\n\n    require.register = function (name, definition) {\n        require.modules[name] = {\n            definition: definition\n        };\n    };\n\n    /**\n     * Define a module's exports immediately with `exports`.\n     *\n     * @param {String} name\n     * @param {Generic} exports\n     * @api private\n     */\n\n    require.define = function (name, exports) {\n        require.modules[name] = {\n            exports: exports\n        };\n    };\n    require.register(\"component~emitter@1.1.2\", function (exports, module) {\n\n        /**\n         * Expose `Emitter`.\n         */\n\n        module.exports = Emitter;\n\n        /**\n         * Initialize a new `Emitter`.\n         *\n         * @api public\n         */\n\n        function Emitter(obj) {\n            if (obj) return mixin(obj);\n        };\n\n        /**\n         * Mixin the emitter properties.\n         *\n         * @param {Object} obj\n         * @return {Object}\n         * @api private\n         */\n\n        function mixin(obj) {\n            for (var key in Emitter.prototype) {\n                obj[key] = Emitter.prototype[key];\n            }\n            return obj;\n        }\n\n        /**\n         * Listen on the given `event` with `fn`.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         * @return {Emitter}\n         * @api public\n         */\n\n        Emitter.prototype.on =\n            Emitter.prototype.addEventListener = function(event, fn){\n                this._callbacks = this._callbacks || {};\n                (this._callbacks[event] = this._callbacks[event] || [])\n                    .push(fn);\n                return this;\n            };\n\n        /**\n         * Adds an `event` listener that will be invoked a single\n         * time then automatically removed.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         * @return {Emitter}\n         * @api public\n         */\n\n        Emitter.prototype.once = function(event, fn){\n            var self = this;\n            this._callbacks = this._callbacks || {};\n\n            function on() {\n                self.off(event, on);\n                fn.apply(this, arguments);\n            }\n\n            on.fn = fn;\n            this.on(event, on);\n            return this;\n        };\n\n        /**\n         * Remove the given callback for `event` or all\n         * registered callbacks.\n         *\n         * @param {String} event\n         * @param {Function} fn\n         * @return {Emitter}\n         * @api public\n         */\n\n        Emitter.prototype.off =\n            Emitter.prototype.removeListener =\n                Emitter.prototype.removeAllListeners =\n                    Emitter.prototype.removeEventListener = function(event, fn){\n                        this._callbacks = this._callbacks || {};\n\n                        // all\n                        if (0 == arguments.length) {\n                            this._callbacks = {};\n                            return this;\n                        }\n\n                        // specific event\n                        var callbacks = this._callbacks[event];\n                        if (!callbacks) return this;\n\n                        // remove all handlers\n                        if (1 == arguments.length) {\n                            delete this._callbacks[event];\n                            return this;\n                        }\n\n                        // remove specific handler\n                        var cb;\n                        for (var i = 0; i < callbacks.length; i++) {\n                            cb = callbacks[i];\n                            if (cb === fn || cb.fn === fn) {\n                                callbacks.splice(i, 1);\n                                break;\n                            }\n                        }\n                        return this;\n                    };\n\n        /**\n         * Emit `event` with the given args.\n         *\n         * @param {String} event\n         * @param {Mixed} ...\n         * @return {Emitter}\n         */\n\n        Emitter.prototype.emit = function(event){\n            this._callbacks = this._callbacks || {};\n            var args = [].slice.call(arguments, 1)\n                , callbacks = this._callbacks[event];\n\n            if (callbacks) {\n                callbacks = callbacks.slice(0);\n                for (var i = 0, len = callbacks.length; i < len; ++i) {\n                    callbacks[i].apply(this, args);\n                }\n            }\n\n            return this;\n        };\n\n        /**\n         * Return array of callbacks for `event`.\n         *\n         * @param {String} event\n         * @return {Array}\n         * @api public\n         */\n\n        Emitter.prototype.listeners = function(event){\n            this._callbacks = this._callbacks || {};\n            return this._callbacks[event] || [];\n        };\n\n        /**\n         * Check if this emitter has `event` handlers.\n         *\n         * @param {String} event\n         * @return {Boolean}\n         * @api public\n         */\n\n        Emitter.prototype.hasListeners = function(event){\n            return !! this.listeners(event).length;\n        };\n\n    });\n\n    require.register(\"dropzone\", function (exports, module) {\n\n\n        /**\n         * Exposing dropzone\n         */\n        module.exports = require(\"dropzone/lib/dropzone.js\");\n\n    });\n\n    require.register(\"dropzone/lib/dropzone.js\", function (exports, module) {\n\n        /*\n         *\n         * More info at [www.dropzonejs.com](http://www.dropzonejs.com)\n         *\n         * Copyright (c) 2012, Matias Meno\n         *\n         * Permission is hereby granted, free of charge, to any person obtaining a copy\n         * of this software and associated documentation files (the \"Software\"), to deal\n         * in the Software without restriction, including without limitation the rights\n         * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n         * copies of the Software, and to permit persons to whom the Software is\n         * furnished to do so, subject to the following conditions:\n         *\n         * The above copyright notice and this permission notice shall be included in\n         * all copies or substantial portions of the Software.\n         *\n         * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n         * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n         * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n         * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n         * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n         * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n         * THE SOFTWARE.\n         *\n         */\n\n        (function() {\n            var Dropzone, Em, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,\n                __hasProp = {}.hasOwnProperty,\n                __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n                __slice = [].slice;\n\n            Em = typeof Emitter !== \"undefined\" && Emitter !== null ? Emitter : require(\"component~emitter@1.1.2\");\n\n            noop = function() {};\n\n            Dropzone = (function(_super) {\n                var extend;\n\n                __extends(Dropzone, _super);\n\n\n                /*\n                 This is a list of all available events you can register on a dropzone object.\n\n                 You can register an event handler like this:\n\n                 dropzone.on(\"dragEnter\", function() { });\n                 */\n\n                Dropzone.prototype.events = [\"drop\", \"dragstart\", \"dragend\", \"dragenter\", \"dragover\", \"dragleave\", \"addedfile\", \"removedfile\", \"thumbnail\", \"error\", \"errormultiple\", \"processing\", \"processingmultiple\", \"uploadprogress\", \"totaluploadprogress\", \"sending\", \"sendingmultiple\", \"success\", \"successmultiple\", \"canceled\", \"canceledmultiple\", \"complete\", \"completemultiple\", \"reset\", \"maxfilesexceeded\", \"maxfilesreached\"];\n\n                Dropzone.prototype.defaultOptions = {\n                    url: null,\n                    method: \"post\",\n                    withCredentials: false,\n                    parallelUploads: 2,\n                    uploadMultiple: false,\n                    maxFilesize: 256,\n                    paramName: \"file\",\n                    createImageThumbnails: true,\n                    maxThumbnailFilesize: 10,\n                    thumbnailWidth: 100,\n                    thumbnailHeight: 100,\n                    maxFiles: null,\n                    params: {},\n                    clickable: true,\n                    ignoreHiddenFiles: true,\n                    acceptedFiles: null,\n                    acceptedMimeTypes: null,\n                    autoProcessQueue: true,\n                    autoQueue: true,\n                    addRemoveLinks: false,\n                    previewsContainer: null,\n                    dictDefaultMessage: \"Drop files here to upload\",\n                    dictFallbackMessage: \"Your browser does not support drag'n'drop file uploads.\",\n                    dictFallbackText: \"Please use the fallback form below to upload your files like in the olden days.\",\n                    dictFileTooBig: \"File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.\",\n                    dictInvalidFileType: \"You can't upload files of this type.\",\n                    dictResponseError: \"Server responded with {{statusCode}} code.\",\n                    dictCancelUpload: \"Cancel upload\",\n                    dictCancelUploadConfirmation: \"Are you sure you want to cancel this upload?\",\n                    dictRemoveFile: \"Remove file\",\n                    dictRemoveFileConfirmation: null,\n                    dictMaxFilesExceeded: \"You can not upload any more files.\",\n                    accept: function(file, done) {\n                        return done();\n                    },\n                    init: function() {\n                        return noop;\n                    },\n                    forceFallback: false,\n                    fallback: function() {\n                        var child, messageElement, span, _i, _len, _ref;\n                        this.element.className = \"\" + this.element.className + \" dz-browser-not-supported\";\n                        _ref = this.element.getElementsByTagName(\"div\");\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            child = _ref[_i];\n                            if (/(^| )dz-message($| )/.test(child.className)) {\n                                messageElement = child;\n                                child.className = \"dz-message\";\n                                continue;\n                            }\n                        }\n                        if (!messageElement) {\n                            messageElement = Dropzone.createElement(\"<div class=\\\"dz-message\\\"><span></span></div>\");\n                            this.element.appendChild(messageElement);\n                        }\n                        span = messageElement.getElementsByTagName(\"span\")[0];\n                        if (span) {\n                            span.textContent = this.options.dictFallbackMessage;\n                        }\n                        return this.element.appendChild(this.getFallbackForm());\n                    },\n                    resize: function(file) {\n                        var info, srcRatio, trgRatio;\n                        info = {\n                            srcX: 0,\n                            srcY: 0,\n                            srcWidth: file.width,\n                            srcHeight: file.height\n                        };\n                        srcRatio = file.width / file.height;\n                        trgRatio = this.options.thumbnailWidth / this.options.thumbnailHeight;\n                        if (file.height < this.options.thumbnailHeight || file.width < this.options.thumbnailWidth) {\n                            info.trgHeight = info.srcHeight;\n                            info.trgWidth = info.srcWidth;\n                        } else {\n                            if (srcRatio > trgRatio) {\n                                info.srcHeight = file.height;\n                                info.srcWidth = info.srcHeight * trgRatio;\n                            } else {\n                                info.srcWidth = file.width;\n                                info.srcHeight = info.srcWidth / trgRatio;\n                            }\n                        }\n                        info.srcX = (file.width - info.srcWidth) / 2;\n                        info.srcY = (file.height - info.srcHeight) / 2;\n                        return info;\n                    },\n\n                    /*\n                     Those functions register themselves to the events on init and handle all\n                     the user interface specific stuff. Overwriting them won't break the upload\n                     but can break the way it's displayed.\n                     You can overwrite them if you don't like the default behavior. If you just\n                     want to add an additional event handler, register it on the dropzone object\n                     and don't overwrite those options.\n                     */\n                    drop: function(e) {\n                        return this.element.classList.remove(\"dz-drag-hover\");\n                    },\n                    dragstart: noop,\n                    dragend: function(e) {\n                        return this.element.classList.remove(\"dz-drag-hover\");\n                    },\n                    dragenter: function(e) {\n                        return this.element.classList.add(\"dz-drag-hover\");\n                    },\n                    dragover: function(e) {\n                        return this.element.classList.add(\"dz-drag-hover\");\n                    },\n                    dragleave: function(e) {\n                        return this.element.classList.remove(\"dz-drag-hover\");\n                    },\n                    paste: noop,\n                    reset: function() {\n                        return this.element.classList.remove(\"dz-started\");\n                    },\n                    addedfile: function(file) {\n                        var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n                        if (this.element === this.previewsContainer) {\n                            this.element.classList.add(\"dz-started\");\n                        }\n                        file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());\n                        file.previewTemplate = file.previewElement;\n                        this.previewsContainer.appendChild(file.previewElement);\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-name]\");\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            node.textContent = file.name;\n                        }\n                        _ref1 = file.previewElement.querySelectorAll(\"[data-dz-size]\");\n                        for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n                            node = _ref1[_j];\n                            node.innerHTML = this.filesize(file.size);\n                        }\n                        if (this.options.addRemoveLinks) {\n                            file._removeLink = Dropzone.createElement(\"<a class=\\\"dz-remove\\\" href=\\\"javascript:undefined;\\\" data-dz-remove>\" + this.options.dictRemoveFile + \"</a>\");\n                            file.previewElement.appendChild(file._removeLink);\n                        }\n                        removeFileEvent = (function(_this) {\n                            return function(e) {\n                                e.preventDefault();\n                                e.stopPropagation();\n                                if (file.status === Dropzone.UPLOADING) {\n                                    return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {\n                                        return _this.removeFile(file);\n                                    });\n                                } else {\n                                    if (_this.options.dictRemoveFileConfirmation) {\n                                        return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {\n                                            return _this.removeFile(file);\n                                        });\n                                    } else {\n                                        return _this.removeFile(file);\n                                    }\n                                }\n                            };\n                        })(this);\n                        _ref2 = file.previewElement.querySelectorAll(\"[data-dz-remove]\");\n                        _results = [];\n                        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n                            removeLink = _ref2[_k];\n                            _results.push(removeLink.addEventListener(\"click\", removeFileEvent));\n                        }\n                        return _results;\n                    },\n                    removedfile: function(file) {\n                        var _ref;\n                        if ((_ref = file.previewElement) != null) {\n                            _ref.parentNode.removeChild(file.previewElement);\n                        }\n                        return this._updateMaxFilesReachedClass();\n                    },\n                    thumbnail: function(file, dataUrl) {\n                        var thumbnailElement, _i, _len, _ref, _results;\n                        file.previewElement.classList.remove(\"dz-file-preview\");\n                        file.previewElement.classList.add(\"dz-image-preview\");\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-thumbnail]\");\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            thumbnailElement = _ref[_i];\n                            thumbnailElement.alt = file.name;\n                            _results.push(thumbnailElement.src = dataUrl);\n                        }\n                        return _results;\n                    },\n                    error: function(file, message) {\n                        var node, _i, _len, _ref, _results;\n                        file.previewElement.classList.add(\"dz-error\");\n                        if (typeof message !== \"String\" && message.error) {\n                            message = message.error;\n                        }\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-errormessage]\");\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            _results.push(node.textContent = message);\n                        }\n                        return _results;\n                    },\n                    errormultiple: noop,\n                    processing: function(file) {\n                        file.previewElement.classList.add(\"dz-processing\");\n                        if (file._removeLink) {\n                            return file._removeLink.textContent = this.options.dictCancelUpload;\n                        }\n                    },\n                    processingmultiple: noop,\n                    uploadprogress: function(file, progress, bytesSent) {\n                        var node, _i, _len, _ref, _results;\n                        _ref = file.previewElement.querySelectorAll(\"[data-dz-uploadprogress]\");\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            node = _ref[_i];\n                            _results.push(node.style.width = \"\" + progress + \"%\");\n                        }\n                        return _results;\n                    },\n                    totaluploadprogress: noop,\n                    sending: noop,\n                    sendingmultiple: noop,\n                    success: function(file) {\n                        return file.previewElement.classList.add(\"dz-success\");\n                    },\n                    successmultiple: noop,\n                    canceled: function(file) {\n                        return this.emit(\"error\", file, \"Upload canceled.\");\n                    },\n                    canceledmultiple: noop,\n                    complete: function(file) {\n                        if (file._removeLink) {\n                            return file._removeLink.textContent = this.options.dictRemoveFile;\n                        }\n                    },\n                    completemultiple: noop,\n                    maxfilesexceeded: noop,\n                    maxfilesreached: noop,\n                    previewTemplate: \"<div class=\\\"dz-preview dz-file-preview\\\">\\n  <div class=\\\"dz-details\\\">\\n    <div class=\\\"dz-filename\\\"><span data-dz-name></span></div>\\n    <div class=\\\"dz-size\\\" data-dz-size></div>\\n    <img data-dz-thumbnail />\\n  </div>\\n  <div class=\\\"dz-progress\\\"><span class=\\\"dz-upload\\\" data-dz-uploadprogress></span></div>\\n  <div class=\\\"dz-success-mark\\\"><span>✔</span></div>\\n  <div class=\\\"dz-error-mark\\\"><span>✘</span></div>\\n  <div class=\\\"dz-error-message\\\"><span data-dz-errormessage></span></div>\\n</div>\"\n                };\n\n                extend = function() {\n                    var key, object, objects, target, val, _i, _len;\n                    target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n                    for (_i = 0, _len = objects.length; _i < _len; _i++) {\n                        object = objects[_i];\n                        for (key in object) {\n                            val = object[key];\n                            target[key] = val;\n                        }\n                    }\n                    return target;\n                };\n\n                function Dropzone(element, options) {\n                    var elementOptions, fallback, _ref;\n                    this.element = element;\n                    this.version = Dropzone.version;\n                    this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\\n*/g, \"\");\n                    this.clickableElements = [];\n                    this.listeners = [];\n                    this.files = [];\n                    if (typeof this.element === \"string\") {\n                        this.element = document.querySelector(this.element);\n                    }\n                    if (!(this.element && (this.element.nodeType != null))) {\n                        throw new Error(\"Invalid dropzone element.\");\n                    }\n                    if (this.element.dropzone) {\n                        throw new Error(\"Dropzone already attached.\");\n                    }\n                    Dropzone.instances.push(this);\n                    this.element.dropzone = this;\n                    elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};\n                    this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});\n                    if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {\n                        return this.options.fallback.call(this);\n                    }\n                    if (this.options.url == null) {\n                        this.options.url = this.element.getAttribute(\"action\");\n                    }\n                    if (!this.options.url) {\n                        throw new Error(\"No URL provided.\");\n                    }\n                    if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {\n                        throw new Error(\"You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.\");\n                    }\n                    if (this.options.acceptedMimeTypes) {\n                        this.options.acceptedFiles = this.options.acceptedMimeTypes;\n                        delete this.options.acceptedMimeTypes;\n                    }\n                    this.options.method = this.options.method.toUpperCase();\n                    if ((fallback = this.getExistingFallback()) && fallback.parentNode) {\n                        fallback.parentNode.removeChild(fallback);\n                    }\n                    if (this.options.previewsContainer) {\n                        this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, \"previewsContainer\");\n                    } else {\n                        this.previewsContainer = this.element;\n                    }\n                    if (this.options.clickable) {\n                        if (this.options.clickable === true) {\n                            this.clickableElements = [this.element];\n                        } else {\n                            this.clickableElements = Dropzone.getElements(this.options.clickable, \"clickable\");\n                        }\n                    }\n                    this.init();\n                }\n\n                Dropzone.prototype.getAcceptedFiles = function() {\n                    var file, _i, _len, _ref, _results;\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (file.accepted) {\n                            _results.push(file);\n                        }\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.getRejectedFiles = function() {\n                    var file, _i, _len, _ref, _results;\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (!file.accepted) {\n                            _results.push(file);\n                        }\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.getFilesWithStatus = function(status) {\n                    var file, _i, _len, _ref, _results;\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (file.status === status) {\n                            _results.push(file);\n                        }\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.getQueuedFiles = function() {\n                    return this.getFilesWithStatus(Dropzone.QUEUED);\n                };\n\n                Dropzone.prototype.getUploadingFiles = function() {\n                    return this.getFilesWithStatus(Dropzone.UPLOADING);\n                };\n\n                Dropzone.prototype.getActiveFiles = function() {\n                    var file, _i, _len, _ref, _results;\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {\n                            _results.push(file);\n                        }\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.init = function() {\n                    var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;\n                    if (this.element.tagName === \"form\") {\n                        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n                    }\n                    if (this.element.classList.contains(\"dropzone\") && !this.element.querySelector(\".dz-message\")) {\n                        this.element.appendChild(Dropzone.createElement(\"<div class=\\\"dz-default dz-message\\\"><span>\" + this.options.dictDefaultMessage + \"</span></div>\"));\n                    }\n                    if (this.clickableElements.length) {\n                        setupHiddenFileInput = (function(_this) {\n                            return function() {\n                                if (_this.hiddenFileInput) {\n                                    document.body.removeChild(_this.hiddenFileInput);\n                                }\n                                _this.hiddenFileInput = document.createElement(\"input\");\n                                _this.hiddenFileInput.setAttribute(\"type\", \"file\");\n                                if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {\n                                    _this.hiddenFileInput.setAttribute(\"multiple\", \"multiple\");\n                                }\n                                _this.hiddenFileInput.className = \"dz-hidden-input\";\n                                if (_this.options.acceptedFiles != null) {\n                                    _this.hiddenFileInput.setAttribute(\"accept\", _this.options.acceptedFiles);\n                                }\n                                _this.hiddenFileInput.style.visibility = \"hidden\";\n                                _this.hiddenFileInput.style.position = \"absolute\";\n                                _this.hiddenFileInput.style.top = \"0\";\n                                _this.hiddenFileInput.style.left = \"0\";\n                                _this.hiddenFileInput.style.height = \"0\";\n                                _this.hiddenFileInput.style.width = \"0\";\n                                document.body.appendChild(_this.hiddenFileInput);\n                                return _this.hiddenFileInput.addEventListener(\"change\", function() {\n                                    var file, files, _i, _len;\n                                    files = _this.hiddenFileInput.files;\n                                    if (files.length) {\n                                        for (_i = 0, _len = files.length; _i < _len; _i++) {\n                                            file = files[_i];\n                                            _this.addFile(file);\n                                        }\n                                    }\n                                    return setupHiddenFileInput();\n                                });\n                            };\n                        })(this);\n                        setupHiddenFileInput();\n                    }\n                    this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;\n                    _ref1 = this.events;\n                    for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n                        eventName = _ref1[_i];\n                        this.on(eventName, this.options[eventName]);\n                    }\n                    this.on(\"uploadprogress\", (function(_this) {\n                        return function() {\n                            return _this.updateTotalUploadProgress();\n                        };\n                    })(this));\n                    this.on(\"removedfile\", (function(_this) {\n                        return function() {\n                            return _this.updateTotalUploadProgress();\n                        };\n                    })(this));\n                    this.on(\"canceled\", (function(_this) {\n                        return function(file) {\n                            return _this.emit(\"complete\", file);\n                        };\n                    })(this));\n                    this.on(\"complete\", (function(_this) {\n                        return function(file) {\n                            if (_this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {\n                                return setTimeout((function() {\n                                    return _this.emit(\"queuecomplete\");\n                                }), 0);\n                            }\n                        };\n                    })(this));\n                    noPropagation = function(e) {\n                        e.stopPropagation();\n                        if (e.preventDefault) {\n                            return e.preventDefault();\n                        } else {\n                            return e.returnValue = false;\n                        }\n                    };\n                    this.listeners = [\n                        {\n                            element: this.element,\n                            events: {\n                                \"dragstart\": (function(_this) {\n                                    return function(e) {\n                                        return _this.emit(\"dragstart\", e);\n                                    };\n                                })(this),\n                                \"dragenter\": (function(_this) {\n                                    return function(e) {\n                                        noPropagation(e);\n                                        return _this.emit(\"dragenter\", e);\n                                    };\n                                })(this),\n                                \"dragover\": (function(_this) {\n                                    return function(e) {\n                                        var efct;\n                                        try {\n                                            efct = e.dataTransfer.effectAllowed;\n                                        } catch (_error) {}\n                                        e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';\n                                        noPropagation(e);\n                                        return _this.emit(\"dragover\", e);\n                                    };\n                                })(this),\n                                \"dragleave\": (function(_this) {\n                                    return function(e) {\n                                        return _this.emit(\"dragleave\", e);\n                                    };\n                                })(this),\n                                \"drop\": (function(_this) {\n                                    return function(e) {\n                                        noPropagation(e);\n                                        return _this.drop(e);\n                                    };\n                                })(this),\n                                \"dragend\": (function(_this) {\n                                    return function(e) {\n                                        return _this.emit(\"dragend\", e);\n                                    };\n                                })(this)\n                            }\n                        }\n                    ];\n                    this.clickableElements.forEach((function(_this) {\n                        return function(clickableElement) {\n                            return _this.listeners.push({\n                                element: clickableElement,\n                                events: {\n                                    \"click\": function(evt) {\n                                        if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(\".dz-message\")))) {\n                                            return _this.hiddenFileInput.click();\n                                        }\n                                    }\n                                }\n                            });\n                        };\n                    })(this));\n                    this.enable();\n                    return this.options.init.call(this);\n                };\n\n                Dropzone.prototype.destroy = function() {\n                    var _ref;\n                    this.disable();\n                    this.removeAllFiles(true);\n                    if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {\n                        this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);\n                        this.hiddenFileInput = null;\n                    }\n                    delete this.element.dropzone;\n                    return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);\n                };\n\n                Dropzone.prototype.updateTotalUploadProgress = function() {\n                    var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;\n                    totalBytesSent = 0;\n                    totalBytes = 0;\n                    activeFiles = this.getActiveFiles();\n                    if (activeFiles.length) {\n                        _ref = this.getActiveFiles();\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            file = _ref[_i];\n                            totalBytesSent += file.upload.bytesSent;\n                            totalBytes += file.upload.total;\n                        }\n                        totalUploadProgress = 100 * totalBytesSent / totalBytes;\n                    } else {\n                        totalUploadProgress = 100;\n                    }\n                    return this.emit(\"totaluploadprogress\", totalUploadProgress, totalBytes, totalBytesSent);\n                };\n\n                Dropzone.prototype.getFallbackForm = function() {\n                    var existingFallback, fields, fieldsString, form;\n                    if (existingFallback = this.getExistingFallback()) {\n                        return existingFallback;\n                    }\n                    fieldsString = \"<div class=\\\"dz-fallback\\\">\";\n                    if (this.options.dictFallbackText) {\n                        fieldsString += \"<p>\" + this.options.dictFallbackText + \"</p>\";\n                    }\n                    fieldsString += \"<input type=\\\"file\\\" name=\\\"\" + this.options.paramName + (this.options.uploadMultiple ? \"[]\" : \"\") + \"\\\" \" + (this.options.uploadMultiple ? 'multiple=\"multiple\"' : void 0) + \" /><input type=\\\"submit\\\" value=\\\"Upload!\\\"></div>\";\n                    fields = Dropzone.createElement(fieldsString);\n                    if (this.element.tagName !== \"FORM\") {\n                        form = Dropzone.createElement(\"<form action=\\\"\" + this.options.url + \"\\\" enctype=\\\"multipart/form-data\\\" method=\\\"\" + this.options.method + \"\\\"></form>\");\n                        form.appendChild(fields);\n                    } else {\n                        this.element.setAttribute(\"enctype\", \"multipart/form-data\");\n                        this.element.setAttribute(\"method\", this.options.method);\n                    }\n                    return form != null ? form : fields;\n                };\n\n                Dropzone.prototype.getExistingFallback = function() {\n                    var fallback, getFallback, tagName, _i, _len, _ref;\n                    getFallback = function(elements) {\n                        var el, _i, _len;\n                        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n                            el = elements[_i];\n                            if (/(^| )fallback($| )/.test(el.className)) {\n                                return el;\n                            }\n                        }\n                    };\n                    _ref = [\"div\", \"form\"];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        tagName = _ref[_i];\n                        if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {\n                            return fallback;\n                        }\n                    }\n                };\n\n                Dropzone.prototype.setupEventListeners = function() {\n                    var elementListeners, event, listener, _i, _len, _ref, _results;\n                    _ref = this.listeners;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        elementListeners = _ref[_i];\n                        _results.push((function() {\n                            var _ref1, _results1;\n                            _ref1 = elementListeners.events;\n                            _results1 = [];\n                            for (event in _ref1) {\n                                listener = _ref1[event];\n                                _results1.push(elementListeners.element.addEventListener(event, listener, false));\n                            }\n                            return _results1;\n                        })());\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.removeEventListeners = function() {\n                    var elementListeners, event, listener, _i, _len, _ref, _results;\n                    _ref = this.listeners;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        elementListeners = _ref[_i];\n                        _results.push((function() {\n                            var _ref1, _results1;\n                            _ref1 = elementListeners.events;\n                            _results1 = [];\n                            for (event in _ref1) {\n                                listener = _ref1[event];\n                                _results1.push(elementListeners.element.removeEventListener(event, listener, false));\n                            }\n                            return _results1;\n                        })());\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.disable = function() {\n                    var file, _i, _len, _ref, _results;\n                    this.clickableElements.forEach(function(element) {\n                        return element.classList.remove(\"dz-clickable\");\n                    });\n                    this.removeEventListeners();\n                    _ref = this.files;\n                    _results = [];\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        _results.push(this.cancelUpload(file));\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype.enable = function() {\n                    this.clickableElements.forEach(function(element) {\n                        return element.classList.add(\"dz-clickable\");\n                    });\n                    return this.setupEventListeners();\n                };\n\n                Dropzone.prototype.filesize = function(size) {\n                    var string;\n                    if (size >= 1024 * 1024 * 1024 * 1024 / 10) {\n                        size = size / (1024 * 1024 * 1024 * 1024 / 10);\n                        string = \"TiB\";\n                    } else if (size >= 1024 * 1024 * 1024 / 10) {\n                        size = size / (1024 * 1024 * 1024 / 10);\n                        string = \"GiB\";\n                    } else if (size >= 1024 * 1024 / 10) {\n                        size = size / (1024 * 1024 / 10);\n                        string = \"MiB\";\n                    } else if (size >= 1024 / 10) {\n                        size = size / (1024 / 10);\n                        string = \"KiB\";\n                    } else {\n                        size = size * 10;\n                        string = \"b\";\n                    }\n                    return \"<strong>\" + (Math.round(size) / 10) + \"</strong> \" + string;\n                };\n\n                Dropzone.prototype._updateMaxFilesReachedClass = function() {\n                    if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n                        if (this.getAcceptedFiles().length === this.options.maxFiles) {\n                            this.emit('maxfilesreached', this.files);\n                        }\n                        return this.element.classList.add(\"dz-max-files-reached\");\n                    } else {\n                        return this.element.classList.remove(\"dz-max-files-reached\");\n                    }\n                };\n\n                Dropzone.prototype.drop = function(e) {\n                    var files, items;\n                    if (!e.dataTransfer) {\n                        return;\n                    }\n                    this.emit(\"drop\", e);\n                    files = e.dataTransfer.files;\n                    if (files.length) {\n                        items = e.dataTransfer.items;\n                        if (items && items.length && (items[0].webkitGetAsEntry != null)) {\n                            this._addFilesFromItems(items);\n                        } else {\n                            this.handleFiles(files);\n                        }\n                    }\n                };\n\n                Dropzone.prototype.paste = function(e) {\n                    var items, _ref;\n                    if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {\n                        return;\n                    }\n                    this.emit(\"paste\", e);\n                    items = e.clipboardData.items;\n                    if (items.length) {\n                        return this._addFilesFromItems(items);\n                    }\n                };\n\n                Dropzone.prototype.handleFiles = function(files) {\n                    var file, _i, _len, _results;\n                    _results = [];\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        _results.push(this.addFile(file));\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype._addFilesFromItems = function(items) {\n                    var entry, item, _i, _len, _results;\n                    _results = [];\n                    for (_i = 0, _len = items.length; _i < _len; _i++) {\n                        item = items[_i];\n                        if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {\n                            if (entry.isFile) {\n                                _results.push(this.addFile(item.getAsFile()));\n                            } else if (entry.isDirectory) {\n                                _results.push(this._addFilesFromDirectory(entry, entry.name));\n                            } else {\n                                _results.push(void 0);\n                            }\n                        } else if (item.getAsFile != null) {\n                            if ((item.kind == null) || item.kind === \"file\") {\n                                _results.push(this.addFile(item.getAsFile()));\n                            } else {\n                                _results.push(void 0);\n                            }\n                        } else {\n                            _results.push(void 0);\n                        }\n                    }\n                    return _results;\n                };\n\n                Dropzone.prototype._addFilesFromDirectory = function(directory, path) {\n                    var dirReader, entriesReader;\n                    dirReader = directory.createReader();\n                    entriesReader = (function(_this) {\n                        return function(entries) {\n                            var entry, _i, _len;\n                            for (_i = 0, _len = entries.length; _i < _len; _i++) {\n                                entry = entries[_i];\n                                if (entry.isFile) {\n                                    entry.file(function(file) {\n                                        if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {\n                                            return;\n                                        }\n                                        file.fullPath = \"\" + path + \"/\" + file.name;\n                                        return _this.addFile(file);\n                                    });\n                                } else if (entry.isDirectory) {\n                                    _this._addFilesFromDirectory(entry, \"\" + path + \"/\" + entry.name);\n                                }\n                            }\n                        };\n                    })(this);\n                    return dirReader.readEntries(entriesReader, function(error) {\n                        return typeof console !== \"undefined\" && console !== null ? typeof console.log === \"function\" ? console.log(error) : void 0 : void 0;\n                    });\n                };\n\n                Dropzone.prototype.accept = function(file, done) {\n                    if (file.size > this.options.maxFilesize * 1024 * 1024) {\n                        return done(this.options.dictFileTooBig.replace(\"{{filesize}}\", Math.round(file.size / 1024 / 10.24) / 100).replace(\"{{maxFilesize}}\", this.options.maxFilesize));\n                    } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {\n                        return done(this.options.dictInvalidFileType);\n                    } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {\n                        done(this.options.dictMaxFilesExceeded.replace(\"{{maxFiles}}\", this.options.maxFiles));\n                        return this.emit(\"maxfilesexceeded\", file);\n                    } else {\n                        return this.options.accept.call(this, file, done);\n                    }\n                };\n\n                Dropzone.prototype.addFile = function(file) {\n                    file.upload = {\n                        progress: 0,\n                        total: file.size,\n                        bytesSent: 0\n                    };\n                    this.files.push(file);\n                    file.status = Dropzone.ADDED;\n                    this.emit(\"addedfile\", file);\n                    this._enqueueThumbnail(file);\n                    return this.accept(file, (function(_this) {\n                        return function(error) {\n                            if (error) {\n                                file.accepted = false;\n                                _this._errorProcessing([file], error);\n                            } else {\n                                file.accepted = true;\n                                if (_this.options.autoQueue) {\n                                    _this.enqueueFile(file);\n                                }\n                            }\n                            return _this._updateMaxFilesReachedClass();\n                        };\n                    })(this));\n                };\n\n                Dropzone.prototype.enqueueFiles = function(files) {\n                    var file, _i, _len;\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        this.enqueueFile(file);\n                    }\n                    return null;\n                };\n\n                Dropzone.prototype.enqueueFile = function(file) {\n                    if (file.status === Dropzone.ADDED && file.accepted === true) {\n                        file.status = Dropzone.QUEUED;\n                        if (this.options.autoProcessQueue) {\n                            return setTimeout(((function(_this) {\n                                return function() {\n                                    return _this.processQueue();\n                                };\n                            })(this)), 0);\n                        }\n                    } else {\n                        throw new Error(\"This file can't be queued because it has already been processed or was rejected.\");\n                    }\n                };\n\n                Dropzone.prototype._thumbnailQueue = [];\n\n                Dropzone.prototype._processingThumbnail = false;\n\n                Dropzone.prototype._enqueueThumbnail = function(file) {\n                    if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {\n                        this._thumbnailQueue.push(file);\n                        return setTimeout(((function(_this) {\n                            return function() {\n                                return _this._processThumbnailQueue();\n                            };\n                        })(this)), 0);\n                    }\n                };\n\n                Dropzone.prototype._processThumbnailQueue = function() {\n                    if (this._processingThumbnail || this._thumbnailQueue.length === 0) {\n                        return;\n                    }\n                    this._processingThumbnail = true;\n                    return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {\n                        return function() {\n                            _this._processingThumbnail = false;\n                            return _this._processThumbnailQueue();\n                        };\n                    })(this));\n                };\n\n                Dropzone.prototype.removeFile = function(file) {\n                    if (file.status === Dropzone.UPLOADING) {\n                        this.cancelUpload(file);\n                    }\n                    this.files = without(this.files, file);\n                    this.emit(\"removedfile\", file);\n                    if (this.files.length === 0) {\n                        return this.emit(\"reset\");\n                    }\n                };\n\n                Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {\n                    var file, _i, _len, _ref;\n                    if (cancelIfNecessary == null) {\n                        cancelIfNecessary = false;\n                    }\n                    _ref = this.files.slice();\n                    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                        file = _ref[_i];\n                        if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {\n                            this.removeFile(file);\n                        }\n                    }\n                    return null;\n                };\n\n                Dropzone.prototype.createThumbnail = function(file, callback) {\n                    var fileReader;\n                    fileReader = new FileReader;\n                    fileReader.onload = (function(_this) {\n                        return function() {\n                            var img;\n                            img = document.createElement(\"img\");\n                            img.onload = function() {\n                                var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;\n                                file.width = img.width;\n                                file.height = img.height;\n                                resizeInfo = _this.options.resize.call(_this, file);\n                                if (resizeInfo.trgWidth == null) {\n                                    resizeInfo.trgWidth = _this.options.thumbnailWidth;\n                                }\n                                if (resizeInfo.trgHeight == null) {\n                                    resizeInfo.trgHeight = _this.options.thumbnailHeight;\n                                }\n                                canvas = document.createElement(\"canvas\");\n                                ctx = canvas.getContext(\"2d\");\n                                canvas.width = resizeInfo.trgWidth;\n                                canvas.height = resizeInfo.trgHeight;\n                                drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);\n                                thumbnail = canvas.toDataURL(\"image/png\");\n                                _this.emit(\"thumbnail\", file, thumbnail);\n                                if (callback != null) {\n                                    return callback();\n                                }\n                            };\n                            return img.src = fileReader.result;\n                        };\n                    })(this);\n                    return fileReader.readAsDataURL(file);\n                };\n\n                Dropzone.prototype.processQueue = function() {\n                    var i, parallelUploads, processingLength, queuedFiles;\n                    parallelUploads = this.options.parallelUploads;\n                    processingLength = this.getUploadingFiles().length;\n                    i = processingLength;\n                    if (processingLength >= parallelUploads) {\n                        return;\n                    }\n                    queuedFiles = this.getQueuedFiles();\n                    if (!(queuedFiles.length > 0)) {\n                        return;\n                    }\n                    if (this.options.uploadMultiple) {\n                        return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));\n                    } else {\n                        while (i < parallelUploads) {\n                            if (!queuedFiles.length) {\n                                return;\n                            }\n                            this.processFile(queuedFiles.shift());\n                            i++;\n                        }\n                    }\n                };\n\n                Dropzone.prototype.processFile = function(file) {\n                    return this.processFiles([file]);\n                };\n\n                Dropzone.prototype.processFiles = function(files) {\n                    var file, _i, _len;\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        file.processing = true;\n                        file.status = Dropzone.UPLOADING;\n                        this.emit(\"processing\", file);\n                    }\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"processingmultiple\", files);\n                    }\n                    return this.uploadFiles(files);\n                };\n\n                Dropzone.prototype._getFilesWithXhr = function(xhr) {\n                    var file, files;\n                    return files = (function() {\n                        var _i, _len, _ref, _results;\n                        _ref = this.files;\n                        _results = [];\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            file = _ref[_i];\n                            if (file.xhr === xhr) {\n                                _results.push(file);\n                            }\n                        }\n                        return _results;\n                    }).call(this);\n                };\n\n                Dropzone.prototype.cancelUpload = function(file) {\n                    var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;\n                    if (file.status === Dropzone.UPLOADING) {\n                        groupedFiles = this._getFilesWithXhr(file.xhr);\n                        for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {\n                            groupedFile = groupedFiles[_i];\n                            groupedFile.status = Dropzone.CANCELED;\n                        }\n                        file.xhr.abort();\n                        for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {\n                            groupedFile = groupedFiles[_j];\n                            this.emit(\"canceled\", groupedFile);\n                        }\n                        if (this.options.uploadMultiple) {\n                            this.emit(\"canceledmultiple\", groupedFiles);\n                        }\n                    } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {\n                        file.status = Dropzone.CANCELED;\n                        this.emit(\"canceled\", file);\n                        if (this.options.uploadMultiple) {\n                            this.emit(\"canceledmultiple\", [file]);\n                        }\n                    }\n                    if (this.options.autoProcessQueue) {\n                        return this.processQueue();\n                    }\n                };\n\n                Dropzone.prototype.uploadFile = function(file) {\n                    return this.uploadFiles([file]);\n                };\n\n                Dropzone.prototype.uploadFiles = function(files) {\n                    var file, formData, handleError, headerName, headerValue, headers, input, inputName, inputType, key, option, progressObj, response, updateProgress, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4;\n                    xhr = new XMLHttpRequest();\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        file.xhr = xhr;\n                    }\n                    xhr.open(this.options.method, this.options.url, true);\n                    xhr.withCredentials = !!this.options.withCredentials;\n                    response = null;\n                    handleError = (function(_this) {\n                        return function() {\n                            var _j, _len1, _results;\n                            _results = [];\n                            for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                                file = files[_j];\n                                _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace(\"{{statusCode}}\", xhr.status), xhr));\n                            }\n                            return _results;\n                        };\n                    })(this);\n                    updateProgress = (function(_this) {\n                        return function(e) {\n                            var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;\n                            if (e != null) {\n                                progress = 100 * e.loaded / e.total;\n                                for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                                    file = files[_j];\n                                    file.upload = {\n                                        progress: progress,\n                                        total: e.total,\n                                        bytesSent: e.loaded\n                                    };\n                                }\n                            } else {\n                                allFilesFinished = true;\n                                progress = 100;\n                                for (_k = 0, _len2 = files.length; _k < _len2; _k++) {\n                                    file = files[_k];\n                                    if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {\n                                        allFilesFinished = false;\n                                    }\n                                    file.upload.progress = progress;\n                                    file.upload.bytesSent = file.upload.total;\n                                }\n                                if (allFilesFinished) {\n                                    return;\n                                }\n                            }\n                            _results = [];\n                            for (_l = 0, _len3 = files.length; _l < _len3; _l++) {\n                                file = files[_l];\n                                _results.push(_this.emit(\"uploadprogress\", file, progress, file.upload.bytesSent));\n                            }\n                            return _results;\n                        };\n                    })(this);\n                    xhr.onload = (function(_this) {\n                        return function(e) {\n                            var _ref;\n                            if (files[0].status === Dropzone.CANCELED) {\n                                return;\n                            }\n                            if (xhr.readyState !== 4) {\n                                return;\n                            }\n                            response = xhr.responseText;\n                            if (xhr.getResponseHeader(\"content-type\") && ~xhr.getResponseHeader(\"content-type\").indexOf(\"application/json\")) {\n                                try {\n                                    response = JSON.parse(response);\n                                } catch (_error) {\n                                    e = _error;\n                                    response = \"Invalid JSON response from server.\";\n                                }\n                            }\n                            updateProgress();\n                            if (!((200 <= (_ref = xhr.status) && _ref < 300))) {\n                                return handleError();\n                            } else {\n                                return _this._finished(files, response, e);\n                            }\n                        };\n                    })(this);\n                    xhr.onerror = (function(_this) {\n                        return function() {\n                            if (files[0].status === Dropzone.CANCELED) {\n                                return;\n                            }\n                            return handleError();\n                        };\n                    })(this);\n                    progressObj = (_ref = xhr.upload) != null ? _ref : xhr;\n                    progressObj.onprogress = updateProgress;\n                    headers = {\n                        \"Accept\": \"application/json\",\n                        \"Cache-Control\": \"no-cache\",\n                        \"X-Requested-With\": \"XMLHttpRequest\"\n                    };\n                    if (this.options.headers) {\n                        extend(headers, this.options.headers);\n                    }\n                    for (headerName in headers) {\n                        headerValue = headers[headerName];\n                        xhr.setRequestHeader(headerName, headerValue);\n                    }\n                    formData = new FormData();\n                    if (this.options.params) {\n                        _ref1 = this.options.params;\n                        for (key in _ref1) {\n                            value = _ref1[key];\n                            formData.append(key, value);\n                        }\n                    }\n                    for (_j = 0, _len1 = files.length; _j < _len1; _j++) {\n                        file = files[_j];\n                        this.emit(\"sending\", file, xhr, formData);\n                    }\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"sendingmultiple\", files, xhr, formData);\n                    }\n                    if (this.element.tagName === \"FORM\") {\n                        _ref2 = this.element.querySelectorAll(\"input, textarea, select, button\");\n                        for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n                            input = _ref2[_k];\n                            inputName = input.getAttribute(\"name\");\n                            inputType = input.getAttribute(\"type\");\n                            if (input.tagName === \"SELECT\" && input.hasAttribute(\"multiple\")) {\n                                _ref3 = input.options;\n                                for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {\n                                    option = _ref3[_l];\n                                    if (option.selected) {\n                                        formData.append(inputName, option.value);\n                                    }\n                                }\n                            } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== \"checkbox\" && _ref4 !== \"radio\") || input.checked) {\n                                formData.append(inputName, input.value);\n                            }\n                        }\n                    }\n                    for (_m = 0, _len4 = files.length; _m < _len4; _m++) {\n                        file = files[_m];\n                        formData.append(\"\" + this.options.paramName + (this.options.uploadMultiple ? \"[]\" : \"\"), file, file.name);\n                    }\n                    return xhr.send(formData);\n                };\n\n                Dropzone.prototype._finished = function(files, responseText, e) {\n                    var file, _i, _len;\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        file.status = Dropzone.SUCCESS;\n                        this.emit(\"success\", file, responseText, e);\n                        this.emit(\"complete\", file);\n                    }\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"successmultiple\", files, responseText, e);\n                        this.emit(\"completemultiple\", files);\n                    }\n                    if (this.options.autoProcessQueue) {\n                        return this.processQueue();\n                    }\n                };\n\n                Dropzone.prototype._errorProcessing = function(files, message, xhr) {\n                    var file, _i, _len;\n                    for (_i = 0, _len = files.length; _i < _len; _i++) {\n                        file = files[_i];\n                        file.status = Dropzone.ERROR;\n                        this.emit(\"error\", file, message, xhr);\n                        this.emit(\"complete\", file);\n                    }\n                    if (this.options.uploadMultiple) {\n                        this.emit(\"errormultiple\", files, message, xhr);\n                        this.emit(\"completemultiple\", files);\n                    }\n                    if (this.options.autoProcessQueue) {\n                        return this.processQueue();\n                    }\n                };\n\n                return Dropzone;\n\n            })(Em);\n\n            Dropzone.version = \"3.8.7\";\n\n            Dropzone.options = {};\n\n            Dropzone.optionsForElement = function(element) {\n                if (element.getAttribute(\"id\")) {\n                    return Dropzone.options[camelize(element.getAttribute(\"id\"))];\n                } else {\n                    return void 0;\n                }\n            };\n\n            Dropzone.instances = [];\n\n            Dropzone.forElement = function(element) {\n                if (typeof element === \"string\") {\n                    element = document.querySelector(element);\n                }\n                if ((element != null ? element.dropzone : void 0) == null) {\n                    throw new Error(\"No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.\");\n                }\n                return element.dropzone;\n            };\n\n            Dropzone.autoDiscover = true;\n\n            Dropzone.discover = function() {\n                var checkElements, dropzone, dropzones, _i, _len, _results;\n                if (document.querySelectorAll) {\n                    dropzones = document.querySelectorAll(\".dropzone\");\n                } else {\n                    dropzones = [];\n                    checkElements = function(elements) {\n                        var el, _i, _len, _results;\n                        _results = [];\n                        for (_i = 0, _len = elements.length; _i < _len; _i++) {\n                            el = elements[_i];\n                            if (/(^| )dropzone($| )/.test(el.className)) {\n                                _results.push(dropzones.push(el));\n                            } else {\n                                _results.push(void 0);\n                            }\n                        }\n                        return _results;\n                    };\n                    checkElements(document.getElementsByTagName(\"div\"));\n                    checkElements(document.getElementsByTagName(\"form\"));\n                }\n                _results = [];\n                for (_i = 0, _len = dropzones.length; _i < _len; _i++) {\n                    dropzone = dropzones[_i];\n                    if (Dropzone.optionsForElement(dropzone) !== false) {\n                        _results.push(new Dropzone(dropzone));\n                    } else {\n                        _results.push(void 0);\n                    }\n                }\n                return _results;\n            };\n\n            Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\\/12/i];\n\n            Dropzone.isBrowserSupported = function() {\n                var capableBrowser, regex, _i, _len, _ref;\n                capableBrowser = true;\n                if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {\n                    if (!(\"classList\" in document.createElement(\"a\"))) {\n                        capableBrowser = false;\n                    } else {\n                        _ref = Dropzone.blacklistedBrowsers;\n                        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n                            regex = _ref[_i];\n                            if (regex.test(navigator.userAgent)) {\n                                capableBrowser = false;\n                                continue;\n                            }\n                        }\n                    }\n                } else {\n                    capableBrowser = false;\n                }\n                return capableBrowser;\n            };\n\n            without = function(list, rejectedItem) {\n                var item, _i, _len, _results;\n                _results = [];\n                for (_i = 0, _len = list.length; _i < _len; _i++) {\n                    item = list[_i];\n                    if (item !== rejectedItem) {\n                        _results.push(item);\n                    }\n                }\n                return _results;\n            };\n\n            camelize = function(str) {\n                return str.replace(/[\\-_](\\w)/g, function(match) {\n                    return match.charAt(1).toUpperCase();\n                });\n            };\n\n            Dropzone.createElement = function(string) {\n                var div;\n                div = document.createElement(\"div\");\n                div.innerHTML = string;\n                return div.childNodes[0];\n            };\n\n            Dropzone.elementInside = function(element, container) {\n                if (element === container) {\n                    return true;\n                }\n                while (element = element.parentNode) {\n                    if (element === container) {\n                        return true;\n                    }\n                }\n                return false;\n            };\n\n            Dropzone.getElement = function(el, name) {\n                var element;\n                if (typeof el === \"string\") {\n                    element = document.querySelector(el);\n                } else if (el.nodeType != null) {\n                    element = el;\n                }\n                if (element == null) {\n                    throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector or a plain HTML element.\");\n                }\n                return element;\n            };\n\n            Dropzone.getElements = function(els, name) {\n                var e, el, elements, _i, _j, _len, _len1, _ref;\n                if (els instanceof Array) {\n                    elements = [];\n                    try {\n                        for (_i = 0, _len = els.length; _i < _len; _i++) {\n                            el = els[_i];\n                            elements.push(this.getElement(el, name));\n                        }\n                    } catch (_error) {\n                        e = _error;\n                        elements = null;\n                    }\n                } else if (typeof els === \"string\") {\n                    elements = [];\n                    _ref = document.querySelectorAll(els);\n                    for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {\n                        el = _ref[_j];\n                        elements.push(el);\n                    }\n                } else if (els.nodeType != null) {\n                    elements = [els];\n                }\n                if (!((elements != null) && elements.length)) {\n                    throw new Error(\"Invalid `\" + name + \"` option provided. Please provide a CSS selector, a plain HTML element or a list of those.\");\n                }\n                return elements;\n            };\n\n            Dropzone.confirm = function(question, accepted, rejected) {\n                if (window.confirm(question)) {\n                    return accepted();\n                } else if (rejected != null) {\n                    return rejected();\n                }\n            };\n\n            Dropzone.isValidFile = function(file, acceptedFiles) {\n                var baseMimeType, mimeType, validType, _i, _len;\n                if (!acceptedFiles) {\n                    return true;\n                }\n                acceptedFiles = acceptedFiles.split(\",\");\n                mimeType = file.type;\n                baseMimeType = mimeType.replace(/\\/.*$/, \"\");\n                for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {\n                    validType = acceptedFiles[_i];\n                    validType = validType.trim();\n                    if (validType.charAt(0) === \".\") {\n                        if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {\n                            return true;\n                        }\n                    } else if (/\\/\\*$/.test(validType)) {\n                        if (baseMimeType === validType.replace(/\\/.*$/, \"\")) {\n                            return true;\n                        }\n                    } else {\n                        if (mimeType === validType) {\n                            return true;\n                        }\n                    }\n                }\n                return false;\n            };\n\n            if (typeof jQuery !== \"undefined\" && jQuery !== null) {\n                jQuery.fn.dropzone = function(options) {\n                    return this.each(function() {\n                        return new Dropzone(this, options);\n                    });\n                };\n            }\n\n            if (typeof module !== \"undefined\" && module !== null) {\n                module.exports = Dropzone;\n            } else {\n                window.Dropzone = Dropzone;\n            }\n\n            Dropzone.ADDED = \"added\";\n\n            Dropzone.QUEUED = \"queued\";\n\n            Dropzone.ACCEPTED = Dropzone.QUEUED;\n\n            Dropzone.UPLOADING = \"uploading\";\n\n            Dropzone.PROCESSING = Dropzone.UPLOADING;\n\n            Dropzone.CANCELED = \"canceled\";\n\n            Dropzone.ERROR = \"error\";\n\n            Dropzone.SUCCESS = \"success\";\n\n\n            /*\n\n             Bugfix for iOS 6 and 7\n             Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios\n             based on the work of https://github.com/stomita/ios-imagefile-megapixel\n             */\n\n            detectVerticalSquash = function(img) {\n                var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;\n                iw = img.naturalWidth;\n                ih = img.naturalHeight;\n                canvas = document.createElement(\"canvas\");\n                canvas.width = 1;\n                canvas.height = ih;\n                ctx = canvas.getContext(\"2d\");\n                ctx.drawImage(img, 0, 0);\n                data = ctx.getImageData(0, 0, 1, ih).data;\n                sy = 0;\n                ey = ih;\n                py = ih;\n                while (py > sy) {\n                    alpha = data[(py - 1) * 4 + 3];\n                    if (alpha === 0) {\n                        ey = py;\n                    } else {\n                        sy = py;\n                    }\n                    py = (ey + sy) >> 1;\n                }\n                ratio = py / ih;\n                if (ratio === 0) {\n                    return 1;\n                } else {\n                    return ratio;\n                }\n            };\n\n            drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {\n                var vertSquashRatio;\n                vertSquashRatio = detectVerticalSquash(img);\n                return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);\n            };\n\n\n            /*\n             * contentloaded.js\n             *\n             * Author: Diego Perini (diego.perini at gmail.com)\n             * Summary: cross-browser wrapper for DOMContentLoaded\n             * Updated: 20101020\n             * License: MIT\n             * Version: 1.2\n             *\n             * URL:\n             * http://javascript.nwbox.com/ContentLoaded/\n             * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE\n             */\n\n            contentLoaded = function(win, fn) {\n                var add, doc, done, init, poll, pre, rem, root, top;\n                done = false;\n                top = true;\n                doc = win.document;\n                root = doc.documentElement;\n                add = (doc.addEventListener ? \"addEventListener\" : \"attachEvent\");\n                rem = (doc.addEventListener ? \"removeEventListener\" : \"detachEvent\");\n                pre = (doc.addEventListener ? \"\" : \"on\");\n                init = function(e) {\n                    if (e.type === \"readystatechange\" && doc.readyState !== \"complete\") {\n                        return;\n                    }\n                    (e.type === \"load\" ? win : doc)[rem](pre + e.type, init, false);\n                    if (!done && (done = true)) {\n                        return fn.call(win, e.type || e);\n                    }\n                };\n                poll = function() {\n                    var e;\n                    try {\n                        root.doScroll(\"left\");\n                    } catch (_error) {\n                        e = _error;\n                        setTimeout(poll, 50);\n                        return;\n                    }\n                    return init(\"poll\");\n                };\n                if (doc.readyState !== \"complete\") {\n                    if (doc.createEventObject && root.doScroll) {\n                        try {\n                            top = !win.frameElement;\n                        } catch (_error) {}\n                        if (top) {\n                            poll();\n                        }\n                    }\n                    doc[add](pre + \"DOMContentLoaded\", init, false);\n                    doc[add](pre + \"readystatechange\", init, false);\n                    return win[add](pre + \"load\", init, false);\n                }\n            };\n\n            Dropzone._autoDiscoverFunction = function() {\n                if (Dropzone.autoDiscover) {\n                    return Dropzone.discover();\n                }\n            };\n\n            contentLoaded(window, Dropzone._autoDiscoverFunction);\n\n        }).call(this);\n\n    });\n\n    if (typeof exports == \"object\") {\n        module.exports = require(\"dropzone\");\n    } else if (typeof define == \"function\" && define.amd) {\n        define([], function(){ return require(\"dropzone\"); });\n    } else {\n        this[\"Dropzone\"] = require(\"dropzone\");\n    }\n})()\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/easypiechart/jquery.easypiechart.js",
    "content": "/**!\n * easyPieChart\n * Lightweight plugin to render simple, animated and retina optimized pie charts\n *\n * @license\n * @author Robert Fleischmann <rendro87@gmail.com> (http://robert-fleischmann.de)\n * @version 2.1.5\n **/\n\n(function(root, factory) {\n    if(typeof exports === 'object') {\n        module.exports = factory(require('jquery'));\n    }\n    else if(typeof define === 'function' && define.amd) {\n        define(['jquery'], factory);\n    }\n    else {\n        factory(root.jQuery);\n    }\n}(this, function($) {\n\n    /**\n     * Renderer to render the chart on a canvas object\n     * @param {DOMElement} el      DOM element to host the canvas (root of the plugin)\n     * @param {object}     options options object of the plugin\n     */\n    var CanvasRenderer = function(el, options) {\n        var cachedBackground;\n        var canvas = document.createElement('canvas');\n\n        el.appendChild(canvas);\n\n        if (typeof(G_vmlCanvasManager) !== 'undefined') {\n            G_vmlCanvasManager.initElement(canvas);\n        }\n\n        var ctx = canvas.getContext('2d');\n\n        canvas.width = canvas.height = options.size;\n\n        // canvas on retina devices\n        var scaleBy = 1;\n        if (window.devicePixelRatio > 1) {\n            scaleBy = window.devicePixelRatio;\n            canvas.style.width = canvas.style.height = [options.size, 'px'].join('');\n            canvas.width = canvas.height = options.size * scaleBy;\n            ctx.scale(scaleBy, scaleBy);\n        }\n\n        // move 0,0 coordinates to the center\n        ctx.translate(options.size / 2, options.size / 2);\n\n        // rotate canvas -90deg\n        ctx.rotate((-1 / 2 + options.rotate / 180) * Math.PI);\n\n        var radius = (options.size - options.lineWidth) / 2;\n        if (options.scaleColor && options.scaleLength) {\n            radius -= options.scaleLength + 2; // 2 is the distance between scale and bar\n        }\n\n        // IE polyfill for Date\n        Date.now = Date.now || function() {\n            return +(new Date());\n        };\n\n        /**\n         * Draw a circle around the center of the canvas\n         * @param {strong} color     Valid CSS color string\n         * @param {number} lineWidth Width of the line in px\n         * @param {number} percent   Percentage to draw (float between -1 and 1)\n         */\n        var drawCircle = function(color, lineWidth, percent) {\n            percent = Math.min(Math.max(-1, percent || 0), 1);\n            var isNegative = percent <= 0 ? true : false;\n\n            ctx.beginPath();\n            ctx.arc(0, 0, radius, 0, Math.PI * 2 * percent, isNegative);\n\n            ctx.strokeStyle = color;\n            ctx.lineWidth = lineWidth;\n\n            ctx.stroke();\n        };\n\n        /**\n         * Draw the scale of the chart\n         */\n        var drawScale = function() {\n            var offset;\n            var length;\n\n            ctx.lineWidth = 1;\n            ctx.fillStyle = options.scaleColor;\n\n            ctx.save();\n            for (var i = 24; i > 0; --i) {\n                if (i % 6 === 0) {\n                    length = options.scaleLength;\n                    offset = 0;\n                } else {\n                    length = options.scaleLength * 0.6;\n                    offset = options.scaleLength - length;\n                }\n                ctx.fillRect(-options.size/2 + offset, 0, length, 1);\n                ctx.rotate(Math.PI / 12);\n            }\n            ctx.restore();\n        };\n\n        /**\n         * Request animation frame wrapper with polyfill\n         * @return {function} Request animation frame method or timeout fallback\n         */\n        var reqAnimationFrame = (function() {\n            return  window.requestAnimationFrame ||\n                window.webkitRequestAnimationFrame ||\n                window.mozRequestAnimationFrame ||\n                function(callback) {\n                    window.setTimeout(callback, 1000 / 60);\n                };\n        }());\n\n        /**\n         * Draw the background of the plugin including the scale and the track\n         */\n        var drawBackground = function() {\n            if(options.scaleColor) drawScale();\n            if(options.trackColor) drawCircle(options.trackColor, options.lineWidth, 1);\n        };\n\n        /**\n         * Canvas accessor\n         */\n        this.getCanvas = function() {\n            return canvas;\n        };\n\n        /**\n         * Canvas 2D context 'ctx' accessor\n         */\n        this.getCtx = function() {\n            return ctx;\n        };\n\n        /**\n         * Clear the complete canvas\n         */\n        this.clear = function() {\n            ctx.clearRect(options.size / -2, options.size / -2, options.size, options.size);\n        };\n\n        /**\n         * Draw the complete chart\n         * @param {number} percent Percent shown by the chart between -100 and 100\n         */\n        this.draw = function(percent) {\n            // do we need to render a background\n            if (!!options.scaleColor || !!options.trackColor) {\n                // getImageData and putImageData are supported\n                if (ctx.getImageData && ctx.putImageData) {\n                    if (!cachedBackground) {\n                        drawBackground();\n                        cachedBackground = ctx.getImageData(0, 0, options.size * scaleBy, options.size * scaleBy);\n                    } else {\n                        ctx.putImageData(cachedBackground, 0, 0);\n                    }\n                } else {\n                    this.clear();\n                    drawBackground();\n                }\n            } else {\n                this.clear();\n            }\n\n            ctx.lineCap = options.lineCap;\n\n            // if barcolor is a function execute it and pass the percent as a value\n            var color;\n            if (typeof(options.barColor) === 'function') {\n                color = options.barColor(percent);\n            } else {\n                color = options.barColor;\n            }\n\n            // draw bar\n            drawCircle(color, options.lineWidth, percent / 100);\n        }.bind(this);\n\n        /**\n         * Animate from some percent to some other percentage\n         * @param {number} from Starting percentage\n         * @param {number} to   Final percentage\n         */\n        this.animate = function(from, to) {\n            var startTime = Date.now();\n            options.onStart(from, to);\n            var animation = function() {\n                var process = Math.min(Date.now() - startTime, options.animate.duration);\n                var currentValue = options.easing(this, process, from, to - from, options.animate.duration);\n                this.draw(currentValue);\n                options.onStep(from, to, currentValue);\n                if (process >= options.animate.duration) {\n                    options.onStop(from, to);\n                } else {\n                    reqAnimationFrame(animation);\n                }\n            }.bind(this);\n\n            reqAnimationFrame(animation);\n        }.bind(this);\n    };\n\n    var EasyPieChart = function(el, opts) {\n        var defaultOptions = {\n            barColor: '#ef1e25',\n            trackColor: '#f9f9f9',\n            scaleColor: '#dfe0e0',\n            scaleLength: 5,\n            lineCap: 'round',\n            lineWidth: 3,\n            size: 110,\n            rotate: 0,\n            animate: {\n                duration: 1000,\n                enabled: true\n            },\n            easing: function (x, t, b, c, d) { // more can be found here: http://gsgd.co.uk/sandbox/jquery/easing/\n                t = t / (d/2);\n                if (t < 1) {\n                    return c / 2 * t * t + b;\n                }\n                return -c/2 * ((--t)*(t-2) - 1) + b;\n            },\n            onStart: function(from, to) {\n                return;\n            },\n            onStep: function(from, to, currentValue) {\n                return;\n            },\n            onStop: function(from, to) {\n                return;\n            }\n        };\n\n        // detect present renderer\n        if (typeof(CanvasRenderer) !== 'undefined') {\n            defaultOptions.renderer = CanvasRenderer;\n        } else if (typeof(SVGRenderer) !== 'undefined') {\n            defaultOptions.renderer = SVGRenderer;\n        } else {\n            throw new Error('Please load either the SVG- or the CanvasRenderer');\n        }\n\n        var options = {};\n        var currentValue = 0;\n\n        /**\n         * Initialize the plugin by creating the options object and initialize rendering\n         */\n        var init = function() {\n            this.el = el;\n            this.options = options;\n\n            // merge user options into default options\n            for (var i in defaultOptions) {\n                if (defaultOptions.hasOwnProperty(i)) {\n                    options[i] = opts && typeof(opts[i]) !== 'undefined' ? opts[i] : defaultOptions[i];\n                    if (typeof(options[i]) === 'function') {\n                        options[i] = options[i].bind(this);\n                    }\n                }\n            }\n\n            // check for jQuery easing\n            if (typeof(options.easing) === 'string' && typeof(jQuery) !== 'undefined' && jQuery.isFunction(jQuery.easing[options.easing])) {\n                options.easing = jQuery.easing[options.easing];\n            } else {\n                options.easing = defaultOptions.easing;\n            }\n\n            // process earlier animate option to avoid bc breaks\n            if (typeof(options.animate) === 'number') {\n                options.animate = {\n                    duration: options.animate,\n                    enabled: true\n                };\n            }\n\n            if (typeof(options.animate) === 'boolean' && !options.animate) {\n                options.animate = {\n                    duration: 1000,\n                    enabled: options.animate\n                };\n            }\n\n            // create renderer\n            this.renderer = new options.renderer(el, options);\n\n            // initial draw\n            this.renderer.draw(currentValue);\n\n            // initial update\n            if (el.dataset && el.dataset.percent) {\n                this.update(parseFloat(el.dataset.percent));\n            } else if (el.getAttribute && el.getAttribute('data-percent')) {\n                this.update(parseFloat(el.getAttribute('data-percent')));\n            }\n        }.bind(this);\n\n        /**\n         * Update the value of the chart\n         * @param  {number} newValue Number between 0 and 100\n         * @return {object}          Instance of the plugin for method chaining\n         */\n        this.update = function(newValue) {\n            newValue = parseFloat(newValue);\n            if (options.animate.enabled) {\n                this.renderer.animate(currentValue, newValue);\n            } else {\n                this.renderer.draw(newValue);\n            }\n            currentValue = newValue;\n            return this;\n        }.bind(this);\n\n        /**\n         * Disable animation\n         * @return {object} Instance of the plugin for method chaining\n         */\n        this.disableAnimation = function() {\n            options.animate.enabled = false;\n            return this;\n        };\n\n        /**\n         * Enable animation\n         * @return {object} Instance of the plugin for method chaining\n         */\n        this.enableAnimation = function() {\n            options.animate.enabled = true;\n            return this;\n        };\n\n        init();\n    };\n\n    $.fn.easyPieChart = function(options) {\n        return this.each(function() {\n            var instanceOptions;\n\n            if (!$.data(this, 'easyPieChart')) {\n                instanceOptions = $.extend({}, options, $(this).data());\n                $.data(this, 'easyPieChart', new EasyPieChart(this, instanceOptions));\n            }\n        });\n    };\n\n\n}));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/echarts/echarts-all.js",
    "content": "!function(e){var t,i;!function(){function e(e,t){if(!t)return e;if(0===e.indexOf(\".\")){var i=t.split(\"/\"),n=e.split(\"/\"),a=i.length-1,o=n.length,r=0,s=0;e:for(var l=0;o>l;l++)switch(n[l]){case\"..\":if(!(a>r))break e;r++,s++;break;case\".\":s++;break;default:break e}return i.length=a-r,n=n.slice(s),i.concat(n).join(\"/\")}return e}function n(t){function i(i,r){if(\"string\"==typeof i){var s=n[i];return s||(s=o(e(i,t)),n[i]=s),s}i instanceof Array&&(r=r||function(){},r.apply(this,a(i,r,t)))}var n={};return i}function a(i,n,a){for(var s=[],l=r[a],h=0,m=Math.min(i.length,n.length);m>h;h++){var V,U=e(i[h],a);switch(U){case\"require\":V=l&&l.require||t;break;case\"exports\":V=l.exports;break;case\"module\":V=l;break;default:V=o(U)}s.push(V)}return s}function o(e){var t=r[e];if(!t)throw new Error(\"No \"+e);if(!t.defined){var i=t.factory,n=i.apply(this,a(t.deps||[],i,e));\"undefined\"!=typeof n&&(t.exports=n),t.defined=1}return t.exports}var r={};i=function(e,t,i){r[e]={id:e,deps:t,factory:i,defined:0,exports:{},require:n(e)}},t=n(\"\")}(),i(\"echarts\",[\"echarts/echarts\"],function(e){return e}),i(\"echarts/echarts\",[\"require\",\"./config\",\"zrender/tool/util\",\"zrender/tool/event\",\"zrender/tool/env\",\"zrender\",\"zrender/config\",\"./chart/island\",\"./component/toolbox\",\"./component\",\"./component/title\",\"./component/tooltip\",\"./component/legend\",\"./util/ecData\",\"./chart\",\"zrender/tool/color\",\"./component/timeline\",\"zrender/shape/Image\",\"zrender/loadingEffect/Bar\",\"zrender/loadingEffect/Bubble\",\"zrender/loadingEffect/DynamicLine\",\"zrender/loadingEffect/Ring\",\"zrender/loadingEffect/Spin\",\"zrender/loadingEffect/Whirling\",\"./theme/macarons\",\"./theme/infographic\"],function(e){function t(){r.Dispatcher.call(this)}function i(e){e.innerHTML=\"\",this._themeConfig={},this.dom=e,this._connected=!1,this._status={dragIn:!1,dragOut:!1,needRefresh:!1},this._curEventType=!1,this._chartList=[],this._messageCenter=new t,this._messageCenterOutSide=new t,this.resize=this.resize(),this._init()}function n(e,t,i,n,a){for(var o=e._chartList,r=o.length;r--;){var s=o[r];\"function\"==typeof s[t]&&s[t](i,n,a)}}var a=e(\"./config\"),o=e(\"zrender/tool/util\"),r=e(\"zrender/tool/event\"),s={},l=e(\"zrender/tool/env\").canvasSupported,h=new Date-0,m={},V=\"_echarts_instance_\";s.version=\"2.2.7\",s.dependencies={zrender:\"2.1.1\"},s.init=function(t,n){var a=e(\"zrender\");a.version.replace(\".\",\"\")-0<s.dependencies.zrender.replace(\".\",\"\")-0&&console.error(\"ZRender \"+a.version+\" is too old for ECharts \"+s.version+\". Current version need ZRender \"+s.dependencies.zrender+\"+\"),t=t instanceof Array?t[0]:t;var o=t.getAttribute(V);return o||(o=h++,t.setAttribute(V,o)),m[o]&&m[o].dispose(),m[o]=new i(t),m[o].id=o,m[o].canvasSupported=l,m[o].setTheme(n),m[o]},s.getInstanceById=function(e){return m[e]},o.merge(t.prototype,r.Dispatcher.prototype,!0);var U=e(\"zrender/config\").EVENT,d=[\"CLICK\",\"DBLCLICK\",\"MOUSEOVER\",\"MOUSEOUT\",\"DRAGSTART\",\"DRAGEND\",\"DRAGENTER\",\"DRAGOVER\",\"DRAGLEAVE\",\"DROP\"];return i.prototype={_init:function(){var t=this,i=e(\"zrender\").init(this.dom);this._zr=i,this._messageCenter.dispatch=function(e,i,n,a){n=n||{},n.type=e,n.event=i,t._messageCenter.dispatchWithContext(e,n,a),t._messageCenterOutSide.dispatchWithContext(e,n,a)},this._onevent=function(e){return t.__onevent(e)};for(var n in a.EVENT)\"CLICK\"!=n&&\"DBLCLICK\"!=n&&\"HOVER\"!=n&&\"MOUSEOUT\"!=n&&\"MAP_ROAM\"!=n&&this._messageCenter.bind(a.EVENT[n],this._onevent,this);var o={};this._onzrevent=function(e){return t[o[e.type]](e)};for(var r=0,s=d.length;s>r;r++){var l=d[r],h=U[l];o[h]=\"_on\"+l.toLowerCase(),i.on(h,this._onzrevent)}this.chart={},this.component={};var m=e(\"./chart/island\");this._island=new m(this._themeConfig,this._messageCenter,i,{},this),this.chart.island=this._island;var V=e(\"./component/toolbox\");this._toolbox=new V(this._themeConfig,this._messageCenter,i,{},this),this.component.toolbox=this._toolbox;var p=e(\"./component\");p.define(\"title\",e(\"./component/title\")),p.define(\"tooltip\",e(\"./component/tooltip\")),p.define(\"legend\",e(\"./component/legend\")),(0===i.getWidth()||0===i.getHeight())&&console.error(\"Dom’s width & height should be ready before init.\")},__onevent:function(e){e.__echartsId=e.__echartsId||this.id;var t=e.__echartsId===this.id;switch(this._curEventType||(this._curEventType=e.type),e.type){case a.EVENT.LEGEND_SELECTED:this._onlegendSelected(e);break;case a.EVENT.DATA_ZOOM:if(!t){var i=this.component.dataZoom;i&&(i.silence(!0),i.absoluteZoom(e.zoom),i.silence(!1))}this._ondataZoom(e);break;case a.EVENT.DATA_RANGE:t&&this._ondataRange(e);break;case a.EVENT.MAGIC_TYPE_CHANGED:if(!t){var n=this.component.toolbox;n&&(n.silence(!0),n.setMagicType(e.magicType),n.silence(!1))}this._onmagicTypeChanged(e);break;case a.EVENT.DATA_VIEW_CHANGED:t&&this._ondataViewChanged(e);break;case a.EVENT.TOOLTIP_HOVER:t&&this._tooltipHover(e);break;case a.EVENT.RESTORE:this._onrestore();break;case a.EVENT.REFRESH:t&&this._onrefresh(e);break;case a.EVENT.TOOLTIP_IN_GRID:case a.EVENT.TOOLTIP_OUT_GRID:if(t){if(this._connected){var o=this.component.grid;o&&(e.x=(e.event.zrenderX-o.getX())/o.getWidth(),e.y=(e.event.zrenderY-o.getY())/o.getHeight())}}else{var o=this.component.grid;o&&this._zr.trigger(\"mousemove\",{connectTrigger:!0,zrenderX:o.getX()+e.x*o.getWidth(),zrenderY:o.getY()+e.y*o.getHeight()})}}if(this._connected&&t&&this._curEventType===e.type){for(var r in this._connected)this._connected[r].connectedEventHandler(e);this._curEventType=null}(!t||!this._connected&&t)&&(this._curEventType=null)},_onclick:function(e){if(n(this,\"onclick\",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.CLICK,e.event,t,this)}},_ondblclick:function(e){if(n(this,\"ondblclick\",e),e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.DBLCLICK,e.event,t,this)}},_onmouseover:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.HOVER,e.event,t,this)}},_onmouseout:function(e){if(e.target){var t=this._eventPackage(e.target);t&&null!=t.seriesIndex&&this._messageCenter.dispatch(a.EVENT.MOUSEOUT,e.event,t,this)}},_ondragstart:function(e){this._status={dragIn:!1,dragOut:!1,needRefresh:!1},n(this,\"ondragstart\",e)},_ondragenter:function(e){n(this,\"ondragenter\",e)},_ondragover:function(e){n(this,\"ondragover\",e)},_ondragleave:function(e){n(this,\"ondragleave\",e)},_ondrop:function(e){n(this,\"ondrop\",e,this._status),this._island.ondrop(e,this._status)},_ondragend:function(e){if(n(this,\"ondragend\",e,this._status),this._timeline&&this._timeline.ondragend(e,this._status),this._island.ondragend(e,this._status),this._status.needRefresh){this._syncBackupData(this._option);var t=this._messageCenter;t.dispatch(a.EVENT.DATA_CHANGED,e.event,this._eventPackage(e.target),this),t.dispatch(a.EVENT.REFRESH,null,null,this)}},_onlegendSelected:function(e){this._status.needRefresh=!1,n(this,\"onlegendSelected\",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataZoom:function(e){this._status.needRefresh=!1,n(this,\"ondataZoom\",e,this._status),this._status.needRefresh&&this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_ondataRange:function(e){this._clearEffect(),this._status.needRefresh=!1,n(this,\"ondataRange\",e,this._status),this._status.needRefresh&&this._zr.refreshNextFrame()},_onmagicTypeChanged:function(){this._clearEffect(),this._render(this._toolbox.getMagicOption())},_ondataViewChanged:function(e){this._syncBackupData(e.option),this._messageCenter.dispatch(a.EVENT.DATA_CHANGED,null,e,this),this._messageCenter.dispatch(a.EVENT.REFRESH,null,null,this)},_tooltipHover:function(e){var t=[];n(this,\"ontooltipHover\",e,t)},_onrestore:function(){this.restore()},_onrefresh:function(e){this._refreshInside=!0,this.refresh(e),this._refreshInside=!1},_syncBackupData:function(e){this.component.dataZoom&&this.component.dataZoom.syncBackupData(e)},_eventPackage:function(t){if(t){var i=e(\"./util/ecData\"),n=i.get(t,\"seriesIndex\"),a=i.get(t,\"dataIndex\");return a=-1!=n&&this.component.dataZoom?this.component.dataZoom.getRealDataIndex(n,a):a,{seriesIndex:n,seriesName:(i.get(t,\"series\")||{}).name,dataIndex:a,data:i.get(t,\"data\"),name:i.get(t,\"name\"),value:i.get(t,\"value\"),special:i.get(t,\"special\")}}},_noDataCheck:function(e){for(var t=e.series,i=0,n=t.length;n>i;i++)if(t[i].type==a.CHART_TYPE_MAP||t[i].data&&t[i].data.length>0||t[i].markPoint&&t[i].markPoint.data&&t[i].markPoint.data.length>0||t[i].markLine&&t[i].markLine.data&&t[i].markLine.data.length>0||t[i].nodes&&t[i].nodes.length>0||t[i].links&&t[i].links.length>0||t[i].matrix&&t[i].matrix.length>0||t[i].eventList&&t[i].eventList.length>0)return!1;var o=this._option&&this._option.noDataLoadingOption||this._themeConfig.noDataLoadingOption||a.noDataLoadingOption||{text:this._option&&this._option.noDataText||this._themeConfig.noDataText||a.noDataText,effect:this._option&&this._option.noDataEffect||this._themeConfig.noDataEffect||a.noDataEffect};return this.clear(),this.showLoading(o),!0},_render:function(t){if(this._mergeGlobalConifg(t),!this._noDataCheck(t)){var i=t.backgroundColor;if(i)if(l||-1==i.indexOf(\"rgba\"))this.dom.style.backgroundColor=i;else{var n=i.split(\",\");this.dom.style.filter=\"alpha(opacity=\"+100*n[3].substring(0,n[3].lastIndexOf(\")\"))+\")\",n.length=3,n[0]=n[0].replace(\"a\",\"\"),this.dom.style.backgroundColor=n.join(\",\")+\")\"}this._zr.clearAnimation(),this._chartList=[];var o=e(\"./chart\"),r=e(\"./component\");(t.xAxis||t.yAxis)&&(t.grid=t.grid||{},t.dataZoom=t.dataZoom||{});for(var s,h,m,V=[\"title\",\"legend\",\"tooltip\",\"dataRange\",\"roamController\",\"grid\",\"dataZoom\",\"xAxis\",\"yAxis\",\"polar\"],U=0,d=V.length;d>U;U++)h=V[U],m=this.component[h],t[h]?(m?m.refresh&&m.refresh(t):(s=r.get(/^[xy]Axis$/.test(h)?\"axis\":h),m=new s(this._themeConfig,this._messageCenter,this._zr,t,this,h),this.component[h]=m),this._chartList.push(m)):m&&(m.dispose(),this.component[h]=null,delete this.component[h]);for(var p,c,u,y={},U=0,d=t.series.length;d>U;U++)c=t.series[U].type,c?y[c]||(y[c]=!0,p=o.get(c),p?(this.chart[c]?(u=this.chart[c],u.refresh(t)):u=new p(this._themeConfig,this._messageCenter,this._zr,t,this),this._chartList.push(u),this.chart[c]=u):console.error(c+\" has not been required.\")):console.error(\"series[\"+U+\"] chart type has not been defined.\");for(c in this.chart)c==a.CHART_TYPE_ISLAND||y[c]||(this.chart[c].dispose(),this.chart[c]=null,delete this.chart[c]);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._island.refresh(t),this._toolbox.refresh(t),t.animation&&!t.renderAsImage?this._zr.refresh():this._zr.render();var g=\"IMG\"+this.id,b=document.getElementById(g);t.renderAsImage&&l?(b?b.src=this.getDataURL(t.renderAsImage):(b=this.getImage(t.renderAsImage),b.id=g,b.style.position=\"absolute\",b.style.left=0,b.style.top=0,this.dom.firstChild.appendChild(b)),this.un(),this._zr.un(),this._disposeChartList(),this._zr.clear()):b&&b.parentNode.removeChild(b),b=null,this._option=t}},restore:function(){this._clearEffect(),this._option=o.clone(this._optionRestore),this._disposeChartList(),this._island.clear(),this._toolbox.reset(this._option,!0),this._render(this._option)},refresh:function(e){this._clearEffect(),e=e||{};var t=e.option;!this._refreshInside&&t&&(t=this.getOption(),o.merge(t,e.option,!0),o.merge(this._optionRestore,e.option,!0),this._toolbox.reset(t)),this._island.refresh(t),this._toolbox.refresh(t),this._zr.clearAnimation();for(var i=0,n=this._chartList.length;n>i;i++)this._chartList[i].refresh&&this._chartList[i].refresh(t);this.component.grid&&this.component.grid.refixAxisShape(this.component),this._zr.refresh()},_disposeChartList:function(){this._clearEffect(),this._zr.clearAnimation();for(var e=this._chartList.length;e--;){var t=this._chartList[e];if(t){var i=t.type;this.chart[i]&&delete this.chart[i],this.component[i]&&delete this.component[i],t.dispose&&t.dispose()}}this._chartList=[]},_mergeGlobalConifg:function(t){for(var i=[\"backgroundColor\",\"calculable\",\"calculableColor\",\"calculableHolderColor\",\"nameConnector\",\"valueConnector\",\"animation\",\"animationThreshold\",\"animationDuration\",\"animationDurationUpdate\",\"animationEasing\",\"addDataAnimation\",\"symbolList\",\"DRAG_ENABLE_TIME\"],n=i.length;n--;){var o=i[n];null==t[o]&&(t[o]=null!=this._themeConfig[o]?this._themeConfig[o]:a[o])}var r=t.color;r&&r.length||(r=this._themeConfig.color||a.color),this._zr.getColor=function(t){var i=e(\"zrender/tool/color\");return i.getColor(t,r)},l||(t.animation=!1,t.addDataAnimation=!1)},setOption:function(e,t){return e.timeline?this._setTimelineOption(e):this._setOption(e,t)},_setOption:function(e,t,i){return!t&&this._option?this._option=o.merge(this.getOption(),o.clone(e),!0):(this._option=o.clone(e),!i&&this._timeline&&this._timeline.dispose()),this._optionRestore=o.clone(this._option),this._option.series&&0!==this._option.series.length?(this.component.dataZoom&&(this._option.dataZoom||this._option.toolbox&&this._option.toolbox.feature&&this._option.toolbox.feature.dataZoom&&this._option.toolbox.feature.dataZoom.show)&&this.component.dataZoom.syncOption(this._option),this._toolbox.reset(this._option),this._render(this._option),this):void this._zr.clear()},getOption:function(){function e(e){var n=i._optionRestore[e];if(n)if(n instanceof Array)for(var a=n.length;a--;)t[e][a].data=o.clone(n[a].data);else t[e].data=o.clone(n.data)}var t=o.clone(this._option),i=this;return e(\"xAxis\"),e(\"yAxis\"),e(\"series\"),t},setSeries:function(e,t){return t?(this._option.series=e,this.setOption(this._option,t)):this.setOption({series:e}),this},getSeries:function(){return this.getOption().series},_setTimelineOption:function(t){this._timeline&&this._timeline.dispose();var i=e(\"./component/timeline\"),n=new i(this._themeConfig,this._messageCenter,this._zr,t,this);return this._timeline=n,this.component.timeline=this._timeline,this},addData:function(e,t,i,n,r){function s(){if(V._zr){V._zr.clearAnimation();for(var e=0,t=X.length;t>e;e++)X[e].motionlessOnce=h.addDataAnimation&&X[e].addDataAnimation;V._messageCenter.dispatch(a.EVENT.REFRESH,null,{option:h},V)}}for(var l=e instanceof Array?e:[[e,t,i,n,r]],h=this.getOption(),m=this._optionRestore,V=this,U=0,d=l.length;d>U;U++){e=l[U][0],t=l[U][1],i=l[U][2],n=l[U][3],r=l[U][4];var p=m.series[e],c=i?\"unshift\":\"push\",u=i?\"pop\":\"shift\";if(p){var y=p.data,g=h.series[e].data;if(y[c](t),g[c](t),n||(y[u](),t=g[u]()),null!=r){var b,f;if(p.type===a.CHART_TYPE_PIE&&(b=m.legend)&&(f=b.data)){var k=h.legend.data;if(f[c](r),k[c](r),!n){var x=o.indexOf(f,t.name);-1!=x&&f.splice(x,1),x=o.indexOf(k,t.name),-1!=x&&k.splice(x,1)}}else if(null!=m.xAxis&&null!=m.yAxis){var _,L,W=p.xAxisIndex||0;(null==m.xAxis[W].type||\"category\"===m.xAxis[W].type)&&(_=m.xAxis[W].data,L=h.xAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]())),W=p.yAxisIndex||0,\"category\"===m.yAxis[W].type&&(_=m.yAxis[W].data,L=h.yAxis[W].data,_[c](r),L[c](r),n||(_[u](),L[u]()))}}this._option.series[e].data=h.series[e].data}}this._zr.clearAnimation();for(var X=this._chartList,v=0,w=function(){v--,0===v&&s()},U=0,d=X.length;d>U;U++)h.addDataAnimation&&X[U].addDataAnimation&&(v++,X[U].addDataAnimation(l,w));return this.component.dataZoom&&this.component.dataZoom.syncOption(h),this._option=h,h.addDataAnimation||setTimeout(s,0),this},addMarkPoint:function(e,t){return this._addMark(e,t,\"markPoint\")},addMarkLine:function(e,t){return this._addMark(e,t,\"markLine\")},_addMark:function(e,t,i){var n,a=this._option.series;if(a&&(n=a[e])){var r=this._optionRestore.series,s=r[e],l=n[i],h=s[i];l=n[i]=l||{data:[]},h=s[i]=h||{data:[]};for(var m in t)\"data\"===m?(l.data=l.data.concat(t.data),h.data=h.data.concat(t.data)):\"object\"!=typeof t[m]||null==l[m]?l[m]=h[m]=t[m]:(o.merge(l[m],t[m],!0),o.merge(h[m],t[m],!0));var V=this.chart[n.type];V&&V.addMark(e,t,i)}return this},delMarkPoint:function(e,t){return this._delMark(e,t,\"markPoint\")},delMarkLine:function(e,t){return this._delMark(e,t,\"markLine\")},_delMark:function(e,t,i){var n,a,o,r=this._option.series;if(!(r&&(n=r[e])&&(a=n[i])&&(o=a.data)))return this;t=t.split(\" > \");for(var s=-1,l=0,h=o.length;h>l;l++){var m=o[l];if(m instanceof Array){if(m[0].name===t[0]&&m[1].name===t[1]){s=l;break}}else if(m.name===t[0]){s=l;break}}if(s>-1){o.splice(s,1),this._optionRestore.series[e][i].data.splice(s,1);var V=this.chart[n.type];V&&V.delMark(e,t.join(\" > \"),i)}return this},getDom:function(){return this.dom},getZrender:function(){return this._zr},getDataURL:function(e){if(!l)return\"\";if(0===this._chartList.length){var t=\"IMG\"+this.id,i=document.getElementById(t);if(i)return i.src}var n=this.component.tooltip;switch(n&&n.hideTip(),e){case\"jpeg\":break;default:e=\"png\"}var a=this._option.backgroundColor;return a&&\"rgba(0,0,0,0)\"===a.replace(\" \",\"\")&&(a=\"#fff\"),this._zr.toDataURL(\"image/\"+e,a)},getImage:function(e){var t=this._optionRestore.title,i=document.createElement(\"img\");return i.src=this.getDataURL(e),i.title=t&&t.text||\"ECharts\",i},getConnectedDataURL:function(t){if(!this.isConnected())return this.getDataURL(t);var i=this.dom,n={self:{img:this.getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight}},a=n.self.left,o=n.self.top,r=n.self.right,s=n.self.bottom;for(var l in this._connected)i=this._connected[l].getDom(),n[l]={img:this._connected[l].getDataURL(t),left:i.offsetLeft,top:i.offsetTop,right:i.offsetLeft+i.offsetWidth,bottom:i.offsetTop+i.offsetHeight},a=Math.min(a,n[l].left),o=Math.min(o,n[l].top),r=Math.max(r,n[l].right),s=Math.max(s,n[l].bottom);var h=document.createElement(\"div\");h.style.position=\"absolute\",h.style.left=\"-4000px\",h.style.width=r-a+\"px\",h.style.height=s-o+\"px\",document.body.appendChild(h);var m=e(\"zrender\").init(h),V=e(\"zrender/shape/Image\");for(var l in n)m.addShape(new V({style:{x:n[l].left-a,y:n[l].top-o,image:n[l].img}}));m.render();var U=this._option.backgroundColor;U&&\"rgba(0,0,0,0)\"===U.replace(/ /g,\"\")&&(U=\"#fff\");var d=m.toDataURL(\"image/png\",U);return setTimeout(function(){m.dispose(),h.parentNode.removeChild(h),h=null},100),d},getConnectedImage:function(e){var t=this._optionRestore.title,i=document.createElement(\"img\");return i.src=this.getConnectedDataURL(e),i.title=t&&t.text||\"ECharts\",i},on:function(e,t){return this._messageCenterOutSide.bind(e,t,this),this},un:function(e,t){return this._messageCenterOutSide.unbind(e,t),this},connect:function(e){if(!e)return this;if(this._connected||(this._connected={}),e instanceof Array)for(var t=0,i=e.length;i>t;t++)this._connected[e[t].id]=e[t];else this._connected[e.id]=e;return this},disConnect:function(e){if(!e||!this._connected)return this;if(e instanceof Array)for(var t=0,i=e.length;i>t;t++)delete this._connected[e[t].id];else delete this._connected[e.id];for(var n in this._connected)return this;return this._connected=!1,this},connectedEventHandler:function(e){e.__echartsId!=this.id&&this._onevent(e)},isConnected:function(){return!!this._connected},showLoading:function(t){var i={bar:e(\"zrender/loadingEffect/Bar\"),bubble:e(\"zrender/loadingEffect/Bubble\"),dynamicLine:e(\"zrender/loadingEffect/DynamicLine\"),ring:e(\"zrender/loadingEffect/Ring\"),spin:e(\"zrender/loadingEffect/Spin\"),whirling:e(\"zrender/loadingEffect/Whirling\")};this._toolbox.hideDataView(),t=t||{};var n=t.textStyle||{};t.textStyle=n;var r=o.merge(o.merge(o.clone(n),this._themeConfig.textStyle),a.textStyle);n.textFont=r.fontStyle+\" \"+r.fontWeight+\" \"+r.fontSize+\"px \"+r.fontFamily,n.text=t.text||this._option&&this._option.loadingText||this._themeConfig.loadingText||a.loadingText,null!=t.x&&(n.x=t.x),null!=t.y&&(n.y=t.y),t.effectOption=t.effectOption||{},t.effectOption.textStyle=n;var s=t.effect;return(\"string\"==typeof s||null==s)&&(s=i[t.effect||this._option&&this._option.loadingEffect||this._themeConfig.loadingEffect||a.loadingEffect]||i.spin),this._zr.showLoading(new s(t.effectOption)),this},hideLoading:function(){return this._zr.hideLoading(),this},setTheme:function(t){if(t){if(\"string\"==typeof t)switch(t){case\"macarons\":t=e(\"./theme/macarons\");break;case\"infographic\":t=e(\"./theme/infographic\");break;default:t={}}else t=t||{};this._themeConfig=t}if(!l){var i=this._themeConfig.textStyle;i&&i.fontFamily&&i.fontFamily2&&(i.fontFamily=i.fontFamily2),i=a.textStyle,i.fontFamily=i.fontFamily2}this._timeline&&this._timeline.setTheme(!0),this._optionRestore&&this.restore()},resize:function(){var e=this;return function(){if(e._clearEffect(),e._zr.resize(),e._option&&e._option.renderAsImage&&l)return e._render(e._option),e;e._zr.clearAnimation(),e._island.resize(),e._toolbox.resize(),e._timeline&&e._timeline.resize();for(var t=0,i=e._chartList.length;i>t;t++)e._chartList[t].resize&&e._chartList[t].resize();return e.component.grid&&e.component.grid.refixAxisShape(e.component),e._zr.refresh(),e._messageCenter.dispatch(a.EVENT.RESIZE,null,null,e),e}},_clearEffect:function(){this._zr.modLayer(a.EFFECT_ZLEVEL,{motionBlur:!1}),this._zr.painter.clearLayer(a.EFFECT_ZLEVEL)},clear:function(){return this._disposeChartList(),this._zr.clear(),this._option={},this._optionRestore={},this.dom.style.backgroundColor=null,this},dispose:function(){var e=this.dom.getAttribute(V);e&&delete m[e],this._island.dispose(),this._toolbox.dispose(),this._timeline&&this._timeline.dispose(),this._messageCenter.unbind(),this.clear(),this._zr.dispose(),this._zr=null}},s}),i(\"echarts/config\",[],function(){var e={CHART_TYPE_LINE:\"line\",CHART_TYPE_BAR:\"bar\",CHART_TYPE_SCATTER:\"scatter\",CHART_TYPE_PIE:\"pie\",CHART_TYPE_RADAR:\"radar\",CHART_TYPE_VENN:\"venn\",CHART_TYPE_TREEMAP:\"treemap\",CHART_TYPE_TREE:\"tree\",CHART_TYPE_MAP:\"map\",CHART_TYPE_K:\"k\",CHART_TYPE_ISLAND:\"island\",CHART_TYPE_FORCE:\"force\",CHART_TYPE_CHORD:\"chord\",CHART_TYPE_GAUGE:\"gauge\",CHART_TYPE_FUNNEL:\"funnel\",CHART_TYPE_EVENTRIVER:\"eventRiver\",CHART_TYPE_WORDCLOUD:\"wordCloud\",CHART_TYPE_HEATMAP:\"heatmap\",COMPONENT_TYPE_TITLE:\"title\",COMPONENT_TYPE_LEGEND:\"legend\",COMPONENT_TYPE_DATARANGE:\"dataRange\",COMPONENT_TYPE_DATAVIEW:\"dataView\",COMPONENT_TYPE_DATAZOOM:\"dataZoom\",COMPONENT_TYPE_TOOLBOX:\"toolbox\",COMPONENT_TYPE_TOOLTIP:\"tooltip\",COMPONENT_TYPE_GRID:\"grid\",COMPONENT_TYPE_AXIS:\"axis\",COMPONENT_TYPE_POLAR:\"polar\",COMPONENT_TYPE_X_AXIS:\"xAxis\",COMPONENT_TYPE_Y_AXIS:\"yAxis\",COMPONENT_TYPE_AXIS_CATEGORY:\"categoryAxis\",COMPONENT_TYPE_AXIS_VALUE:\"valueAxis\",COMPONENT_TYPE_TIMELINE:\"timeline\",COMPONENT_TYPE_ROAMCONTROLLER:\"roamController\",backgroundColor:\"rgba(0,0,0,0)\",color:[\"#ff7f50\",\"#87cefa\",\"#da70d6\",\"#32cd32\",\"#6495ed\",\"#ff69b4\",\"#ba55d3\",\"#cd5c5c\",\"#ffa500\",\"#40e0d0\",\"#1e90ff\",\"#ff6347\",\"#7b68ee\",\"#00fa9a\",\"#ffd700\",\"#6699FF\",\"#ff6666\",\"#3cb371\",\"#b8860b\",\"#30e0e0\"],markPoint:{clickable:!0,symbol:\"pin\",symbolSize:10,large:!1,effect:{show:!1,loop:!0,period:15,type:\"scale\",scaleSize:2,bounceDistance:10},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:\"inside\"}},emphasis:{label:{show:!0}}}},markLine:{clickable:!0,symbol:[\"circle\",\"arrow\"],symbolSize:[2,4],smoothness:.2,precision:2,effect:{show:!1,loop:!0,period:15,scaleSize:2},bundling:{enable:!1,maxTurningAngle:45},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:\"end\"},lineStyle:{type:\"dashed\"}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:\"none\",fontFamily:\"Arial, Verdana, sans-serif\",fontFamily2:\"微软雅黑\",fontSize:12,fontStyle:\"normal\",fontWeight:\"normal\"},EVENT:{REFRESH:\"refresh\",RESTORE:\"restore\",RESIZE:\"resize\",CLICK:\"click\",DBLCLICK:\"dblclick\",HOVER:\"hover\",MOUSEOUT:\"mouseout\",DATA_CHANGED:\"dataChanged\",DATA_ZOOM:\"dataZoom\",DATA_RANGE:\"dataRange\",DATA_RANGE_SELECTED:\"dataRangeSelected\",DATA_RANGE_HOVERLINK:\"dataRangeHoverLink\",LEGEND_SELECTED:\"legendSelected\",LEGEND_HOVERLINK:\"legendHoverLink\",MAP_SELECTED:\"mapSelected\",PIE_SELECTED:\"pieSelected\",MAGIC_TYPE_CHANGED:\"magicTypeChanged\",DATA_VIEW_CHANGED:\"dataViewChanged\",TIMELINE_CHANGED:\"timelineChanged\",MAP_ROAM:\"mapRoam\",FORCE_LAYOUT_END:\"forceLayoutEnd\",TOOLTIP_HOVER:\"tooltipHover\",TOOLTIP_IN_GRID:\"tooltipInGrid\",TOOLTIP_OUT_GRID:\"tooltipOutGrid\",ROAMCONTROLLER:\"roamController\"},DRAG_ENABLE_TIME:120,EFFECT_ZLEVEL:10,effectBlendAlpha:.95,symbolList:[\"circle\",\"rectangle\",\"triangle\",\"diamond\",\"emptyCircle\",\"emptyRectangle\",\"emptyTriangle\",\"emptyDiamond\"],loadingEffect:\"spin\",loadingText:\"数据读取中...\",noDataEffect:\"bubble\",noDataText:\"暂无数据\",calculable:!1,calculableColor:\"rgba(255,165,0,0.6)\",calculableHolderColor:\"#ccc\",nameConnector:\" & \",valueConnector:\": \",animation:!0,addDataAnimation:!0,animationThreshold:2e3,animationDuration:2e3,animationDurationUpdate:500,animationEasing:\"ExponentialOut\"};return e}),i(\"zrender/tool/util\",[\"require\",\"../dep/excanvas\"],function(e){function t(e){return e&&1===e.nodeType&&\"string\"==typeof e.nodeName}function i(e){if(\"object\"==typeof e&&null!==e){var n=e;if(e instanceof Array){n=[];for(var a=0,o=e.length;o>a;a++)n[a]=i(e[a])}else if(!y[g.call(e)]&&!t(e)){n={};for(var r in e)e.hasOwnProperty(r)&&(n[r]=i(e[r]))}return n}return e}function n(e,i,n,o){if(i.hasOwnProperty(n)){var r=e[n];\"object\"!=typeof r||y[g.call(r)]||t(r)?!o&&n in e||(e[n]=i[n]):a(e[n],i[n],o)}}function a(e,t,i){for(var a in t)n(e,t,a,i);return e}function o(){if(!U)if(e(\"../dep/excanvas\"),window.G_vmlCanvasManager){var t=document.createElement(\"div\");t.style.position=\"absolute\",t.style.top=\"-1000px\",document.body.appendChild(t),U=G_vmlCanvasManager.initElement(t).getContext(\"2d\")}else U=document.createElement(\"canvas\").getContext(\"2d\");return U}function r(e,t){if(e.indexOf)return e.indexOf(t);for(var i=0,n=e.length;n>i;i++)if(e[i]===t)return i;return-1}function s(e,t){function i(){}var n=e.prototype;i.prototype=t.prototype,e.prototype=new i;for(var a in n)e.prototype[a]=n[a];e.constructor=e}function l(e,t,i){if(e&&t)if(e.forEach&&e.forEach===p)e.forEach(t,i);else if(e.length===+e.length)for(var n=0,a=e.length;a>n;n++)t.call(i,e[n],n,e);else for(var o in e)e.hasOwnProperty(o)&&t.call(i,e[o],o,e)}function h(e,t,i){if(e&&t){if(e.map&&e.map===c)return e.map(t,i);for(var n=[],a=0,o=e.length;o>a;a++)n.push(t.call(i,e[a],a,e));return n}}function m(e,t,i){if(e&&t){if(e.filter&&e.filter===u)return e.filter(t,i);for(var n=[],a=0,o=e.length;o>a;a++)t.call(i,e[a],a,e)&&n.push(e[a]);return n}}function V(e,t){return function(){e.apply(t,arguments)}}var U,d=Array.prototype,p=d.forEach,c=d.map,u=d.filter,y={\"[object Function]\":1,\"[object RegExp]\":1,\"[object Date]\":1,\"[object Error]\":1,\"[object CanvasGradient]\":1},g=Object.prototype.toString;return{inherits:s,clone:i,merge:a,getContext:o,indexOf:r,each:l,map:h,filter:m,bind:V}}),i(\"zrender/tool/event\",[\"require\",\"../mixin/Eventful\"],function(e){\"use strict\";function t(e){return\"undefined\"!=typeof e.zrenderX&&e.zrenderX||\"undefined\"!=typeof e.offsetX&&e.offsetX||\"undefined\"!=typeof e.layerX&&e.layerX||\"undefined\"!=typeof e.clientX&&e.clientX}function i(e){return\"undefined\"!=typeof e.zrenderY&&e.zrenderY||\"undefined\"!=typeof e.offsetY&&e.offsetY||\"undefined\"!=typeof e.layerY&&e.layerY||\"undefined\"!=typeof e.clientY&&e.clientY}function n(e){return\"undefined\"!=typeof e.zrenderDelta&&e.zrenderDelta||\"undefined\"!=typeof e.wheelDelta&&e.wheelDelta||\"undefined\"!=typeof e.detail&&-e.detail}var a=e(\"../mixin/Eventful\"),o=\"function\"==typeof window.addEventListener?function(e){e.preventDefault(),e.stopPropagation(),e.cancelBubble=!0}:function(e){e.returnValue=!1,e.cancelBubble=!0};return{getX:t,getY:i,getDelta:n,stop:o,Dispatcher:a}}),i(\"zrender/tool/env\",[],function(){function e(e){var t=this.os={},i=this.browser={},n=e.match(/Web[kK]it[\\/]{0,1}([\\d.]+)/),a=e.match(/(Android);?[\\s\\/]+([\\d.]+)?/),o=e.match(/(iPad).*OS\\s([\\d_]+)/),r=e.match(/(iPod)(.*OS\\s([\\d_]+))?/),s=!o&&e.match(/(iPhone\\sOS)\\s([\\d_]+)/),l=e.match(/(webOS|hpwOS)[\\s\\/]([\\d.]+)/),h=l&&e.match(/TouchPad/),m=e.match(/Kindle\\/([\\d.]+)/),V=e.match(/Silk\\/([\\d._]+)/),U=e.match(/(BlackBerry).*Version\\/([\\d.]+)/),d=e.match(/(BB10).*Version\\/([\\d.]+)/),p=e.match(/(RIM\\sTablet\\sOS)\\s([\\d.]+)/),c=e.match(/PlayBook/),u=e.match(/Chrome\\/([\\d.]+)/)||e.match(/CriOS\\/([\\d.]+)/),y=e.match(/Firefox\\/([\\d.]+)/),g=e.match(/MSIE ([\\d.]+)/),b=n&&e.match(/Mobile\\//)&&!u,f=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!u,g=e.match(/MSIE\\s([\\d.]+)/);return(i.webkit=!!n)&&(i.version=n[1]),a&&(t.android=!0,t.version=a[2]),s&&!r&&(t.ios=t.iphone=!0,t.version=s[2].replace(/_/g,\".\")),o&&(t.ios=t.ipad=!0,t.version=o[2].replace(/_/g,\".\")),r&&(t.ios=t.ipod=!0,t.version=r[3]?r[3].replace(/_/g,\".\"):null),l&&(t.webos=!0,t.version=l[2]),h&&(t.touchpad=!0),U&&(t.blackberry=!0,t.version=U[2]),d&&(t.bb10=!0,t.version=d[2]),p&&(t.rimtabletos=!0,t.version=p[2]),c&&(i.playbook=!0),m&&(t.kindle=!0,t.version=m[1]),V&&(i.silk=!0,i.version=V[1]),!V&&t.android&&e.match(/Kindle Fire/)&&(i.silk=!0),u&&(i.chrome=!0,i.version=u[1]),y&&(i.firefox=!0,i.version=y[1]),g&&(i.ie=!0,i.version=g[1]),b&&(e.match(/Safari/)||t.ios)&&(i.safari=!0),f&&(i.webview=!0),g&&(i.ie=!0,i.version=g[1]),t.tablet=!!(o||c||a&&!e.match(/Mobile/)||y&&e.match(/Tablet/)||g&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!(t.tablet||t.ipod||!(a||s||l||U||d||u&&e.match(/Android/)||u&&e.match(/CriOS\\/([\\d.]+)/)||y&&e.match(/Mobile/)||g&&e.match(/Touch/))),{browser:i,os:t,canvasSupported:document.createElement(\"canvas\").getContext?!0:!1}}return e(navigator.userAgent)}),i(\"zrender\",[\"zrender/zrender\"],function(e){return e}),i(\"zrender/zrender\",[\"require\",\"./dep/excanvas\",\"./tool/util\",\"./tool/log\",\"./tool/guid\",\"./Handler\",\"./Painter\",\"./Storage\",\"./animation/Animation\",\"./tool/env\"],function(e){function t(e){return function(){e._needsRefreshNextFrame&&e.refresh()}}e(\"./dep/excanvas\");var i=e(\"./tool/util\"),n=e(\"./tool/log\"),a=e(\"./tool/guid\"),o=e(\"./Handler\"),r=e(\"./Painter\"),s=e(\"./Storage\"),l=e(\"./animation/Animation\"),h={},m={};m.version=\"2.1.1\",m.init=function(e){var t=new V(a(),e);return h[t.id]=t,t},m.dispose=function(e){if(e)e.dispose();else{for(var t in h)h[t].dispose();h={}}return m},m.getInstance=function(e){return h[e]},m.delInstance=function(e){return delete h[e],m};var V=function(i,n){this.id=i,this.env=e(\"./tool/env\"),this.storage=new s,this.painter=new r(n,this.storage),this.handler=new o(n,this.storage,this.painter),this.animation=new l({stage:{update:t(this)}}),this.animation.start();var a=this;this.painter.refreshNextFrame=function(){a.refreshNextFrame()},this._needsRefreshNextFrame=!1;var a=this,h=this.storage,m=h.delFromMap;h.delFromMap=function(e){var t=h.get(e);a.stopAnimation(t),m.call(h,e)}};return V.prototype.getId=function(){return this.id},V.prototype.addShape=function(e){return this.addElement(e),this},V.prototype.addGroup=function(e){return this.addElement(e),this},V.prototype.delShape=function(e){return this.delElement(e),this},V.prototype.delGroup=function(e){return this.delElement(e),this},V.prototype.modShape=function(e,t){return this.modElement(e,t),this},V.prototype.modGroup=function(e,t){return this.modElement(e,t),this},V.prototype.addElement=function(e){return this.storage.addRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.delElement=function(e){return this.storage.delRoot(e),this._needsRefreshNextFrame=!0,this},V.prototype.modElement=function(e,t){return this.storage.mod(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.modLayer=function(e,t){return this.painter.modLayer(e,t),this._needsRefreshNextFrame=!0,this},V.prototype.addHoverShape=function(e){return this.storage.addHover(e),this},V.prototype.render=function(e){return this.painter.render(e),this._needsRefreshNextFrame=!1,this},V.prototype.refresh=function(e){return this.painter.refresh(e),this._needsRefreshNextFrame=!1,this},V.prototype.refreshNextFrame=function(){return this._needsRefreshNextFrame=!0,this},V.prototype.refreshHover=function(e){return this.painter.refreshHover(e),this},V.prototype.refreshShapes=function(e,t){return this.painter.refreshShapes(e,t),this},V.prototype.resize=function(){return this.painter.resize(),this},V.prototype.animate=function(e,t,a){var o=this;if(\"string\"==typeof e&&(e=this.storage.get(e)),e){var r;if(t){for(var s=t.split(\".\"),l=e,h=0,m=s.length;m>h;h++)l&&(l=l[s[h]]);l&&(r=l)}else r=e;if(!r)return void n('Property \"'+t+'\" is not existed in element '+e.id);\n\nnull==e.__animators&&(e.__animators=[]);var V=e.__animators,U=this.animation.animate(r,{loop:a}).during(function(){o.modShape(e)}).done(function(){var t=i.indexOf(e.__animators,U);t>=0&&V.splice(t,1)});return V.push(U),U}n(\"Element not existed\")},V.prototype.stopAnimation=function(e){if(e.__animators){for(var t=e.__animators,i=t.length,n=0;i>n;n++)t[n].stop();t.length=0}return this},V.prototype.clearAnimation=function(){return this.animation.clear(),this},V.prototype.showLoading=function(e){return this.painter.showLoading(e),this},V.prototype.hideLoading=function(){return this.painter.hideLoading(),this},V.prototype.getWidth=function(){return this.painter.getWidth()},V.prototype.getHeight=function(){return this.painter.getHeight()},V.prototype.toDataURL=function(e,t,i){return this.painter.toDataURL(e,t,i)},V.prototype.shapeToImage=function(e,t,i){var n=a();return this.painter.shapeToImage(n,e,t,i)},V.prototype.on=function(e,t,i){return this.handler.on(e,t,i),this},V.prototype.un=function(e,t){return this.handler.un(e,t),this},V.prototype.trigger=function(e,t){return this.handler.trigger(e,t),this},V.prototype.clear=function(){return this.storage.delRoot(),this.painter.clear(),this},V.prototype.dispose=function(){this.animation.stop(),this.clear(),this.storage.dispose(),this.painter.dispose(),this.handler.dispose(),this.animation=this.storage=this.painter=this.handler=null,m.delInstance(this.id)},m}),i(\"zrender/config\",[],function(){var e={EVENT:{RESIZE:\"resize\",CLICK:\"click\",DBLCLICK:\"dblclick\",MOUSEWHEEL:\"mousewheel\",MOUSEMOVE:\"mousemove\",MOUSEOVER:\"mouseover\",MOUSEOUT:\"mouseout\",MOUSEDOWN:\"mousedown\",MOUSEUP:\"mouseup\",GLOBALOUT:\"globalout\",DRAGSTART:\"dragstart\",DRAGEND:\"dragend\",DRAGENTER:\"dragenter\",DRAGOVER:\"dragover\",DRAGLEAVE:\"dragleave\",DROP:\"drop\",touchClickDelay:300},elementClassName:\"zr-element\",catchBrushException:!1,debugMode:0,devicePixelRatio:Math.max(window.devicePixelRatio||1,1)};return e}),i(\"echarts/chart/island\",[\"require\",\"./base\",\"zrender/shape/Circle\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/event\",\"zrender/tool/color\",\"../util/accMath\",\"../chart\"],function(e){function t(e,t,n,a,r){i.call(this,e,t,n,a,r),this._nameConnector,this._valueConnector,this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth();var l=this;l.shapeHandler.onmousewheel=function(e){var t=e.target,i=e.event,n=s.getDelta(i);n=n>0?-1:1,t.style.r-=n,t.style.r=t.style.r<5?5:t.style.r;var a=o.get(t,\"value\"),r=a*l.option.island.calculateStep;a=r>1?Math.round(a-r*n):+(a-r*n).toFixed(2);var h=o.get(t,\"name\");t.style.text=h+\":\"+a,o.set(t,\"value\",a),o.set(t,\"name\",h),l.zr.modShape(t.id),l.zr.refreshNextFrame(),s.stop(i)}}var i=e(\"./base\"),n=e(\"zrender/shape/Circle\"),a=e(\"../config\");a.island={zlevel:0,z:5,r:15,calculateStep:.1};var o=e(\"../util/ecData\"),r=e(\"zrender/tool/util\"),s=e(\"zrender/tool/event\");return t.prototype={type:a.CHART_TYPE_ISLAND,_combine:function(t,i){var n=e(\"zrender/tool/color\"),a=e(\"../util/accMath\"),r=a.accAdd(o.get(t,\"value\"),o.get(i,\"value\")),s=o.get(t,\"name\")+this._nameConnector+o.get(i,\"name\");t.style.text=s+this._valueConnector+r,o.set(t,\"value\",r),o.set(t,\"name\",s),t.style.r=this.option.island.r,t.style.color=n.mix(t.style.color,i.style.color)},refresh:function(e){e&&(e.island=this.reformOption(e.island),this.option=e,this._nameConnector=this.option.nameConnector,this._valueConnector=this.option.valueConnector)},getOption:function(){return this.option},resize:function(){var e=this.zr.getWidth(),t=this.zr.getHeight(),i=e/(this._zrWidth||e),n=t/(this._zrHeight||t);if(1!==i||1!==n){this._zrWidth=e,this._zrHeight=t;for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.modShape(this.shapeList[a].id,{style:{x:Math.round(this.shapeList[a].style.x*i),y:Math.round(this.shapeList[a].style.y*n)}})}},add:function(e){var t=o.get(e,\"name\"),i=o.get(e,\"value\"),a=null!=o.get(e,\"series\")?o.get(e,\"series\").name:\"\",r=this.getFont(this.option.island.textStyle),s=this.option.island,l={zlevel:s.zlevel,z:s.z,style:{x:e.style.x,y:e.style.y,r:this.option.island.r,color:e.style.color||e.style.strokeColor,text:t+this._valueConnector+i,textFont:r},draggable:!0,hoverable:!0,onmousewheel:this.shapeHandler.onmousewheel,_type:\"island\"};\"#fff\"===l.style.color&&(l.style.color=e.style.strokeColor),this.setCalculable(l),l.dragEnableTime=0,o.pack(l,{name:a},-1,i,-1,t),l=new n(l),this.shapeList.push(l),this.zr.addShape(l)},del:function(e){this.zr.delShape(e.id);for(var t=[],i=0,n=this.shapeList.length;n>i;i++)this.shapeList[i].id!=e.id&&t.push(this.shapeList[i]);this.shapeList=t},ondrop:function(e,t){if(this.isDrop&&e.target){var i=e.target,n=e.dragged;this._combine(i,n),this.zr.modShape(i.id),t.dragIn=!0,this.isDrop=!1}},ondragend:function(e,t){var i=e.target;this.isDragend?t.dragIn&&(this.del(i),t.needRefresh=!0):t.dragIn||(i.style.x=s.getX(e.event),i.style.y=s.getY(e.event),this.add(i),t.needRefresh=!0),this.isDragend=!1}},r.inherits(t,i),e(\"../chart\").define(\"island\",t),t}),i(\"echarts/component/toolbox\",[\"require\",\"./base\",\"zrender/shape/Line\",\"zrender/shape/Image\",\"zrender/shape/Rectangle\",\"../util/shape/Icon\",\"../config\",\"zrender/tool/util\",\"zrender/config\",\"zrender/tool/event\",\"./dataView\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._magicType={},this._magicMap={},this._isSilence=!1,this._iconList,this._iconShapeMap={},this._featureTitle={},this._featureIcon={},this._featureColor={},this._featureOption={},this._enableColor=\"red\",this._disableColor=\"#ccc\",this._markShapeList=[];var r=this;r._onMark=function(e){r.__onMark(e)},r._onMarkUndo=function(e){r.__onMarkUndo(e)},r._onMarkClear=function(e){r.__onMarkClear(e)},r._onDataZoom=function(e){r.__onDataZoom(e)},r._onDataZoomReset=function(e){r.__onDataZoomReset(e)},r._onDataView=function(e){r.__onDataView(e)},r._onRestore=function(e){r.__onRestore(e)},r._onSaveAsImage=function(e){r.__onSaveAsImage(e)},r._onMagicType=function(e){r.__onMagicType(e)},r._onCustomHandler=function(e){r.__onCustomHandler(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onclick=function(e){return r.__onclick(e)}}var i=e(\"./base\"),n=e(\"zrender/shape/Line\"),a=e(\"zrender/shape/Image\"),o=e(\"zrender/shape/Rectangle\"),r=e(\"../util/shape/Icon\"),s=e(\"../config\");s.toolbox={zlevel:0,z:6,show:!1,orient:\"horizontal\",x:\"right\",y:\"top\",color:[\"#1e90ff\",\"#22bb22\",\"#4b0082\",\"#d2691e\"],disableColor:\"#ddd\",effectiveColor:\"red\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:\"辅助线开关\",markUndo:\"删除辅助线\",markClear:\"清空辅助线\"},lineStyle:{width:1,color:\"#1e90ff\",type:\"dashed\"}},dataZoom:{show:!1,title:{dataZoom:\"区域缩放\",dataZoomReset:\"区域缩放后退\"}},dataView:{show:!1,title:\"数据视图\",readOnly:!1,lang:[\"数据视图\",\"关闭\",\"刷新\"]},magicType:{show:!1,title:{line:\"折线图切换\",bar:\"柱形图切换\",stack:\"堆积\",tiled:\"平铺\",force:\"力导向布局图切换\",chord:\"和弦图切换\",pie:\"饼图切换\",funnel:\"漏斗图切换\"},type:[]},restore:{show:!1,title:\"还原\"},saveAsImage:{show:!1,title:\"保存为图片\",type:\"png\",lang:[\"点击保存\"]}}};var l=e(\"zrender/tool/util\"),h=e(\"zrender/config\"),m=e(\"zrender/tool/event\"),V=\"stack\",U=\"tiled\";return t.prototype={type:s.COMPONENT_TYPE_TOOLBOX,_buildShape:function(){this._iconList=[];var e=this.option.toolbox;this._enableColor=e.effectiveColor,this._disableColor=e.disableColor;var t=e.feature,i=[];for(var n in t)if(t[n].show)switch(n){case\"mark\":i.push({key:n,name:\"mark\"}),i.push({key:n,name:\"markUndo\"}),i.push({key:n,name:\"markClear\"});break;case\"magicType\":for(var a=0,o=t[n].type.length;o>a;a++)t[n].title[t[n].type[a]+\"Chart\"]=t[n].title[t[n].type[a]],t[n].option&&(t[n].option[t[n].type[a]+\"Chart\"]=t[n].option[t[n].type[a]]),i.push({key:n,name:t[n].type[a]+\"Chart\"});break;case\"dataZoom\":i.push({key:n,name:\"dataZoom\"}),i.push({key:n,name:\"dataZoomReset\"});break;case\"saveAsImage\":this.canvasSupported&&i.push({key:n,name:\"saveAsImage\"});break;default:i.push({key:n,name:n})}if(i.length>0){for(var r,n,a=0,o=i.length;o>a;a++)r=i[a].name,n=i[a].key,this._iconList.push(r),this._featureTitle[r]=t[n].title[r]||t[n].title,t[n].icon&&(this._featureIcon[r]=t[n].icon[r]||t[n].icon),t[n].color&&(this._featureColor[r]=t[n].color[r]||t[n].color),t[n].option&&(this._featureOption[r]=t[n].option[r]||t[n].option);this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var a=0,o=this.shapeList.length;o>a;a++)this.zr.addShape(this.shapeList[a]);this._iconShapeMap.mark&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear)),this._iconShapeMap.dataZoomReset&&0===this._zoomQueue.length&&this._iconDisable(this._iconShapeMap.dataZoomReset)}},_buildItem:function(){var t,i,n,o,s=this.option.toolbox,l=this._iconList.length,h=this._itemGroupLocation.x,m=this._itemGroupLocation.y,V=s.itemSize,U=s.itemGap,d=s.color instanceof Array?s.color:[s.color],p=this.getFont(s.textStyle);\"horizontal\"===s.orient?(i=this._itemGroupLocation.y/this.zr.getHeight()<.5?\"bottom\":\"top\",n=this._itemGroupLocation.x/this.zr.getWidth()<.5?\"left\":\"right\",o=this._itemGroupLocation.y/this.zr.getHeight()<.5?\"top\":\"bottom\"):i=this._itemGroupLocation.x/this.zr.getWidth()<.5?\"right\":\"left\",this._iconShapeMap={};for(var c=this,u=0;l>u;u++){switch(t={type:\"icon\",zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:h,y:m,width:V,height:V,iconType:this._iconList[u],lineWidth:1,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length],brushType:\"stroke\"},highlightStyle:{lineWidth:1,text:s.showTitle?this._featureTitle[this._iconList[u]]:void 0,textFont:p,textPosition:i,strokeColor:this._featureColor[this._iconList[u]]||d[u%d.length]},hoverable:!0,clickable:!0},this._featureIcon[this._iconList[u]]&&(t.style.image=this._featureIcon[this._iconList[u]].replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),t.style.opacity=.8,t.highlightStyle.opacity=1,t.type=\"image\"),\"horizontal\"===s.orient&&(0===u&&\"left\"===n&&(t.highlightStyle.textPosition=\"specific\",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h,t.highlightStyle.textY=\"top\"===o?m+V+10:m-10),u===l-1&&\"right\"===n&&(t.highlightStyle.textPosition=\"specific\",t.highlightStyle.textAlign=n,t.highlightStyle.textBaseline=o,t.highlightStyle.textX=h+V,t.highlightStyle.textY=\"top\"===o?m+V+10:m-10)),this._iconList[u]){case\"mark\":t.onclick=c._onMark;break;case\"markUndo\":t.onclick=c._onMarkUndo;break;case\"markClear\":t.onclick=c._onMarkClear;break;case\"dataZoom\":t.onclick=c._onDataZoom;break;case\"dataZoomReset\":t.onclick=c._onDataZoomReset;break;case\"dataView\":if(!this._dataView){var y=e(\"./dataView\");this._dataView=new y(this.ecTheme,this.messageCenter,this.zr,this.option,this.myChart)}t.onclick=c._onDataView;break;case\"restore\":t.onclick=c._onRestore;break;case\"saveAsImage\":t.onclick=c._onSaveAsImage;break;default:this._iconList[u].match(\"Chart\")?(t._name=this._iconList[u].replace(\"Chart\",\"\"),t.onclick=c._onMagicType):t.onclick=c._onCustomHandler}\"icon\"===t.type?t=new r(t):\"image\"===t.type&&(t=new a(t)),this.shapeList.push(t),this._iconShapeMap[this._iconList[u]]=t,\"horizontal\"===s.orient?h+=V+U:m+=V+U}},_buildBackground:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding);this.shapeList.push(new o({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-t[3],y:this._itemGroupLocation.y-t[0],width:this._itemGroupLocation.width+t[3]+t[1],height:this._itemGroupLocation.height+t[0]+t[2],brushType:0===e.borderWidth?\"fill\":\"both\",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_getItemGroupLocation:function(){var e=this.option.toolbox,t=this.reformCssArray(this.option.toolbox.padding),i=this._iconList.length,n=e.itemGap,a=e.itemSize,o=0,r=0;\"horizontal\"===e.orient?(o=(a+n)*i-n,r=a):(r=(a+n)*i-n,o=a);var s,l=this.zr.getWidth();switch(e.x){case\"center\":s=Math.floor((l-o)/2);break;case\"left\":s=t[3]+e.borderWidth;break;case\"right\":s=l-o-t[1]-e.borderWidth;break;default:s=e.x-0,s=isNaN(s)?0:s}var h,m=this.zr.getHeight();switch(e.y){case\"top\":h=t[0]+e.borderWidth;break;case\"bottom\":h=m-r-t[2]-e.borderWidth;break;case\"center\":h=Math.floor((m-r)/2);break;default:h=e.y-0,h=isNaN(h)?0:h}return{x:s,y:h,width:o,height:r}},__onmousemove:function(e){this._marking&&(this._markShape.style.xEnd=m.getX(e.event),this._markShape.style.yEnd=m.getY(e.event),this.zr.addHoverShape(this._markShape)),this._zooming&&(this._zoomShape.style.width=m.getX(e.event)-this._zoomShape.style.x,this._zoomShape.style.height=m.getY(e.event)-this._zoomShape.style.y,this.zr.addHoverShape(this._zoomShape),this.dom.style.cursor=\"crosshair\",m.stop(e.event)),this._zoomStart&&\"pointer\"!=this.dom.style.cursor&&\"move\"!=this.dom.style.cursor&&(this.dom.style.cursor=\"crosshair\")},__onmousedown:function(e){if(!e.target){this._zooming=!0;var t=m.getX(e.event),i=m.getY(e.event),n=this.option.dataZoom||{};return this._zoomShape=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:t,y:i,width:1,height:1,brushType:\"both\"},highlightStyle:{lineWidth:2,color:n.fillerColor||s.dataZoom.fillerColor,strokeColor:n.handleColor||s.dataZoom.handleColor,brushType:\"both\"}}),this.zr.addHoverShape(this._zoomShape),!0}},__onmouseup:function(){if(!this._zoomShape||Math.abs(this._zoomShape.style.width)<10||Math.abs(this._zoomShape.style.height)<10)return this._zooming=!1,!0;if(this._zooming&&this.component.dataZoom){this._zooming=!1;var e=this.component.dataZoom.rectZoom(this._zoomShape.style);e&&(this._zoomQueue.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),this._iconEnable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame())}return!0},__onclick:function(e){if(!e.target)if(this._marking)this._marking=!1,this._markShapeList.push(this._markShape),this._iconEnable(this._iconShapeMap.markUndo),this._iconEnable(this._iconShapeMap.markClear),this.zr.addShape(this._markShape),this.zr.refreshNextFrame();else if(this._markStart){this._marking=!0;var t=m.getX(e.event),i=m.getY(e.event);this._markShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:t,yStart:i,xEnd:t,yEnd:i,lineWidth:this.query(this.option,\"toolbox.feature.mark.lineStyle.width\"),strokeColor:this.query(this.option,\"toolbox.feature.mark.lineStyle.color\"),lineType:this.query(this.option,\"toolbox.feature.mark.lineStyle.type\")}}),this.zr.addHoverShape(this._markShape)}},__onMark:function(e){var t=e.target;if(this._marking||this._markStart)this._resetMark(),this.zr.refreshNextFrame();else{this._resetZoom(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._markStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.CLICK,i._onclick)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10)}return!0},__onMarkUndo:function(){if(this._marking)this._marking=!1;else{var e=this._markShapeList.length;if(e>=1){var t=this._markShapeList[e-1];this.zr.delShape(t.id),this.zr.refreshNextFrame(),this._markShapeList.pop(),1===e&&(this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear))}}return!0},__onMarkClear:function(){this._marking&&(this._marking=!1);var e=this._markShapeList.length;if(e>0){for(;e--;)this.zr.delShape(this._markShapeList.pop().id);this._iconDisable(this._iconShapeMap.markUndo),this._iconDisable(this._iconShapeMap.markClear),this.zr.refreshNextFrame()}return!0},__onDataZoom:function(e){var t=e.target;if(this._zooming||this._zoomStart)this._resetZoom(),this.zr.refreshNextFrame(),this.dom.style.cursor=\"default\";else{this._resetMark(),this.zr.modShape(t.id,{style:{strokeColor:this._enableColor}}),this.zr.refreshNextFrame(),this._zoomStart=!0;var i=this;setTimeout(function(){i.zr&&i.zr.on(h.EVENT.MOUSEDOWN,i._onmousedown)&&i.zr.on(h.EVENT.MOUSEUP,i._onmouseup)&&i.zr.on(h.EVENT.MOUSEMOVE,i._onmousemove)},10),this.dom.style.cursor=\"crosshair\"}return!0},__onDataZoomReset:function(){return this._zooming&&(this._zooming=!1),this._zoomQueue.pop(),this._zoomQueue.length>0?this.component.dataZoom.absoluteZoom(this._zoomQueue[this._zoomQueue.length-1]):(this.component.dataZoom.rectZoom(),this._iconDisable(this._iconShapeMap.dataZoomReset),this.zr.refreshNextFrame()),!0},_resetMark:function(){this._marking=!1,this._markStart&&(this._markStart=!1,this._iconShapeMap.mark&&this.zr.modShape(this._iconShapeMap.mark.id,{style:{strokeColor:this._iconShapeMap.mark.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.CLICK,this._onclick),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_resetZoom:function(){this._zooming=!1,this._zoomStart&&(this._zoomStart=!1,this._iconShapeMap.dataZoom&&this.zr.modShape(this._iconShapeMap.dataZoom.id,{style:{strokeColor:this._iconShapeMap.dataZoom.highlightStyle.strokeColor}}),this.zr.un(h.EVENT.MOUSEDOWN,this._onmousedown),this.zr.un(h.EVENT.MOUSEUP,this._onmouseup),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove))},_iconDisable:function(e){\"image\"!=e.type?this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:this._disableColor}}):this.zr.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})},_iconEnable:function(e){\"image\"!=e.type?this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):this.zr.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})},__onDataView:function(){return this._dataView.show(this.option),!0},__onRestore:function(){return this._resetMark(),this._resetZoom(),this.messageCenter.dispatch(s.EVENT.RESTORE,null,null,this.myChart),!0},__onSaveAsImage:function(){var e=this.option.toolbox.feature.saveAsImage,t=e.type||\"png\";\"png\"!=t&&\"jpeg\"!=t&&(t=\"png\");var i;i=this.myChart.isConnected()?this.myChart.getConnectedDataURL(t):this.zr.toDataURL(\"image/\"+t,this.option.backgroundColor&&\"rgba(0,0,0,0)\"===this.option.backgroundColor.replace(\" \",\"\")?\"#fff\":this.option.backgroundColor);var n=document.createElement(\"div\");n.id=\"__echarts_download_wrap__\",n.style.cssText=\"position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:\"+document.documentElement.clientHeight+\"px;\";var a=document.createElement(\"a\");a.href=i,a.setAttribute(\"download\",(e.name?e.name:this.option.title&&(this.option.title.text||this.option.title.subtext)?this.option.title.text||this.option.title.subtext:\"ECharts\")+\".\"+t),a.innerHTML='<img style=\"vertical-align:middle\" src=\"'+i+'\" title=\"'+(window.ActiveXObject||\"ActiveXObject\"in window?\"右键->图片另存为\":e.lang?e.lang[0]:\"点击保存\")+'\"/>',n.appendChild(a),document.body.appendChild(n),a=null,n=null,setTimeout(function(){var e=document.getElementById(\"__echarts_download_wrap__\");e&&(e.onclick=function(){var e=document.getElementById(\"__echarts_download_wrap__\");e.onclick=null,e.innerHTML=\"\",document.body.removeChild(e),e=null},e=null)},500)},__onMagicType:function(e){this._resetMark();var t=e.target._name;return this._magicType[t]||(this._magicType[t]=!0,t===s.CHART_TYPE_LINE?this._magicType[s.CHART_TYPE_BAR]=!1:t===s.CHART_TYPE_BAR&&(this._magicType[s.CHART_TYPE_LINE]=!1),t===s.CHART_TYPE_PIE?this._magicType[s.CHART_TYPE_FUNNEL]=!1:t===s.CHART_TYPE_FUNNEL&&(this._magicType[s.CHART_TYPE_PIE]=!1),t===s.CHART_TYPE_FORCE?this._magicType[s.CHART_TYPE_CHORD]=!1:t===s.CHART_TYPE_CHORD&&(this._magicType[s.CHART_TYPE_FORCE]=!1),t===V?this._magicType[U]=!1:t===U&&(this._magicType[V]=!1),this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:this._magicType},this.myChart)),!0},setMagicType:function(e){this._resetMark(),this._magicType=e,!this._isSilence&&this.messageCenter.dispatch(s.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:this._magicType},this.myChart)},__onCustomHandler:function(e){var t=e.target.style.iconType,i=this.option.toolbox.feature[t].onclick;\"function\"==typeof i&&i.call(this,this.option)},reset:function(e,t){if(t&&this.clear(),this.query(e,\"toolbox.show\")&&this.query(e,\"toolbox.feature.magicType.show\")){var i=e.toolbox.feature.magicType.type,n=i.length;for(this._magicMap={};n--;)this._magicMap[i[n]]=!0;n=e.series.length;for(var a,o;n--;)a=e.series[n].type,this._magicMap[a]&&(o=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,o&&\"category\"===(o.type||\"category\")&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),o=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,o&&\"category\"===o.type&&(o.__boundaryGap=null!=o.boundaryGap?o.boundaryGap:!0),e.series[n].__type=a,e.series[n].__itemStyle=l.clone(e.series[n].itemStyle||{})),(this._magicMap[V]||this._magicMap[U])&&(e.series[n].__stack=e.series[n].stack)}this._magicType=t?{}:this._magicType||{};for(var r in this._magicType)if(this._magicType[r]){this.option=e,this.getMagicOption();break}var s=e.dataZoom;if(s&&s.show){var h=null!=s.start&&s.start>=0&&s.start<=100?s.start:0,m=null!=s.end&&s.end>=0&&s.end<=100?s.end:100;h>m&&(h+=m,m=h-m,h-=m),this._zoomQueue=[{start:h,end:m,start2:0,end2:100}]}else this._zoomQueue=[]},getMagicOption:function(){var e,t;if(this._magicType[s.CHART_TYPE_LINE]||this._magicType[s.CHART_TYPE_BAR]){for(var i=this._magicType[s.CHART_TYPE_LINE]?!1:!0,n=0,a=this.option.series.length;a>n;n++)t=this.option.series[n].type,(t==s.CHART_TYPE_LINE||t==s.CHART_TYPE_BAR)&&(e=this.option.xAxis instanceof Array?this.option.xAxis[this.option.series[n].xAxisIndex||0]:this.option.xAxis,e&&\"category\"===(e.type||\"category\")&&(e.boundaryGap=i?!0:e.__boundaryGap),e=this.option.yAxis instanceof Array?this.option.yAxis[this.option.series[n].yAxisIndex||0]:this.option.yAxis,e&&\"category\"===e.type&&(e.boundaryGap=i?!0:e.__boundaryGap));this._defaultMagic(s.CHART_TYPE_LINE,s.CHART_TYPE_BAR)}if(this._defaultMagic(s.CHART_TYPE_CHORD,s.CHART_TYPE_FORCE),this._defaultMagic(s.CHART_TYPE_PIE,s.CHART_TYPE_FUNNEL),this._magicType[V]||this._magicType[U])for(var n=0,a=this.option.series.length;a>n;n++)this._magicType[V]?(this.option.series[n].stack=\"_ECHARTS_STACK_KENER_2014_\",t=V):this._magicType[U]&&(this.option.series[n].stack=null,t=U),this._featureOption[t+\"Chart\"]&&l.merge(this.option.series[n],this._featureOption[t+\"Chart\"]||{},!0);return this.option},_defaultMagic:function(e,t){if(this._magicType[e]||this._magicType[t])for(var i=0,n=this.option.series.length;n>i;i++){var a=this.option.series[i].type;(a==e||a==t)&&(this.option.series[i].type=this._magicType[e]?e:t,this.option.series[i].itemStyle=l.clone(this.option.series[i].__itemStyle),a=this.option.series[i].type,this._featureOption[a+\"Chart\"]&&l.merge(this.option.series[i],this._featureOption[a+\"Chart\"]||{},!0))}},silence:function(e){this._isSilence=e},resize:function(){this._resetMark(),this.clear(),this.option&&this.option.toolbox&&this.option.toolbox.show&&this._buildShape(),this._dataView&&this._dataView.resize()},hideDataView:function(){this._dataView&&this._dataView.hide()},clear:function(e){this.zr&&(this.zr.delShape(this.shapeList),this.shapeList=[],e||(this.zr.delShape(this._markShapeList),this._markShapeList=[]))},onbeforDispose:function(){this._dataView&&(this._dataView.dispose(),this._dataView=null),this._markShapeList=null},refresh:function(e){e&&(this._resetMark(),this._resetZoom(),e.toolbox=this.reformOption(e.toolbox),this.option=e,this.clear(!0),e.toolbox.show&&this._buildShape(),this.hideDataView())}},l.inherits(t,i),e(\"../component\").define(\"toolbox\",t),t}),i(\"echarts/component\",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i(\"echarts/component/title\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Rectangle\",\"../config\",\"zrender/tool/util\",\"zrender/tool/area\",\"zrender/tool/color\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Rectangle\"),o=e(\"../config\");o.title={zlevel:0,z:6,show:!0,text:\"\",subtext:\"\",x:\"left\",y:\"top\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,itemGap:5,textStyle:{fontSize:18,fontWeight:\"bolder\",color:\"#333\"},subtextStyle:{color:\"#aaa\"}};var r=e(\"zrender/tool/util\"),s=e(\"zrender/tool/area\"),l=e(\"zrender/tool/color\");return t.prototype={type:o.COMPONENT_TYPE_TITLE,_buildShape:function(){if(this.titleOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e=this.titleOption.text,t=this.titleOption.link,i=this.titleOption.target,a=this.titleOption.subtext,o=this.titleOption.sublink,r=this.titleOption.subtarget,s=this.getFont(this.titleOption.textStyle),h=this.getFont(this.titleOption.subtextStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this._itemGroupLocation.width,d=this._itemGroupLocation.height,p={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V,color:this.titleOption.textStyle.color,text:e,textFont:s,textBaseline:\"top\"},highlightStyle:{color:l.lift(this.titleOption.textStyle.color,1),brushType:\"fill\"},hoverable:!1};t&&(p.hoverable=!0,p.clickable=!0,p.onclick=function(){i&&\"self\"==i?window.location=t:window.open(t)});var c={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{y:V+d,color:this.titleOption.subtextStyle.color,text:a,textFont:h,textBaseline:\"bottom\"},highlightStyle:{color:l.lift(this.titleOption.subtextStyle.color,1),brushType:\"fill\"},hoverable:!1};switch(o&&(c.hoverable=!0,c.clickable=!0,c.onclick=function(){r&&\"self\"==r?window.location=o:window.open(o)}),this.titleOption.x){case\"center\":p.style.x=c.style.x=m+U/2,p.style.textAlign=c.style.textAlign=\"center\";break;case\"left\":p.style.x=c.style.x=m,p.style.textAlign=c.style.textAlign=\"left\";break;case\"right\":p.style.x=c.style.x=m+U,p.style.textAlign=c.style.textAlign=\"right\";break;default:m=this.titleOption.x-0,m=isNaN(m)?0:m,p.style.x=c.style.x=m}this.titleOption.textAlign&&(p.style.textAlign=c.style.textAlign=this.titleOption.textAlign),this.shapeList.push(new n(p)),\"\"!==a&&this.shapeList.push(new n(c))},_buildBackground:function(){var e=this.reformCssArray(this.titleOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.titleOption.borderWidth?\"fill\":\"both\",color:this.titleOption.backgroundColor,strokeColor:this.titleOption.borderColor,lineWidth:this.titleOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.titleOption.padding),i=this.titleOption.text,n=this.titleOption.subtext,a=this.getFont(this.titleOption.textStyle),o=this.getFont(this.titleOption.subtextStyle),r=Math.max(s.getTextWidth(i,a),s.getTextWidth(n,o)),l=s.getTextHeight(i,a)+(\"\"===n?0:this.titleOption.itemGap+s.getTextHeight(n,o)),h=this.zr.getWidth();switch(this.titleOption.x){case\"center\":e=Math.floor((h-r)/2);break;case\"left\":e=t[3]+this.titleOption.borderWidth;break;case\"right\":e=h-r-t[1]-this.titleOption.borderWidth;break;default:e=this.titleOption.x-0,e=isNaN(e)?0:e}var m,V=this.zr.getHeight();switch(this.titleOption.y){case\"top\":m=t[0]+this.titleOption.borderWidth;break;case\"bottom\":m=V-l-t[2]-this.titleOption.borderWidth;break;case\"center\":m=Math.floor((V-l)/2);break;default:m=this.titleOption.y-0,m=isNaN(m)?0:m}return{x:e,y:m,width:r,height:l}},refresh:function(e){e&&(this.option=e,this.option.title=this.reformOption(this.option.title),this.titleOption=this.option.title,this.titleOption.textStyle=this.getTextStyle(this.titleOption.textStyle),this.titleOption.subtextStyle=this.getTextStyle(this.titleOption.subtextStyle)),this.clear(),this._buildShape()}},r.inherits(t,i),e(\"../component\").define(\"title\",t),t}),i(\"echarts/component/tooltip\",[\"require\",\"./base\",\"../util/shape/Cross\",\"zrender/shape/Line\",\"zrender/shape/Rectangle\",\"../config\",\"../util/ecData\",\"zrender/config\",\"zrender/tool/event\",\"zrender/tool/area\",\"zrender/tool/color\",\"zrender/tool/util\",\"zrender/shape/Base\",\"../component\"],function(e){function t(e,t,o,r,s){i.call(this,e,t,o,r,s),this.dom=s.dom;var l=this;l._onmousemove=function(e){return l.__onmousemove(e)},l._onglobalout=function(e){return l.__onglobalout(e)},this.zr.on(h.EVENT.MOUSEMOVE,l._onmousemove),this.zr.on(h.EVENT.GLOBALOUT,l._onglobalout),l._hide=function(e){return l.__hide(e)},l._tryShow=function(e){return l.__tryShow(e)},l._refixed=function(e){return l.__refixed(e)},l._setContent=function(e,t){return l.__setContent(e,t)},this._tDom=this._tDom||document.createElement(\"div\"),this._tDom.onselectstart=function(){return!1},this._tDom.onmouseover=function(){l._mousein=!0},this._tDom.onmouseout=function(){l._mousein=!1},this._tDom.className=\"echarts-tooltip\",this._tDom.style.position=\"absolute\",this.hasAppend=!1,this._axisLineShape&&this.zr.delShape(this._axisLineShape.id),this._axisLineShape=new a({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisLineShape),this.zr.addShape(this._axisLineShape),this._axisShadowShape&&this.zr.delShape(this._axisShadowShape.id),this._axisShadowShape=new a({zlevel:this.getZlevelBase(),z:1,invisible:!0,hoverable:!1}),this.shapeList.push(this._axisShadowShape),this.zr.addShape(this._axisShadowShape),this._axisCrossShape&&this.zr.delShape(this._axisCrossShape.id),this._axisCrossShape=new n({zlevel:this.getZlevelBase(),z:this.getZBase(),invisible:!0,hoverable:!1}),this.shapeList.push(this._axisCrossShape),this.zr.addShape(this._axisCrossShape),this.showing=!1,this.refresh(r)}var i=e(\"./base\"),n=e(\"../util/shape/Cross\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Rectangle\"),r=new o({}),s=e(\"../config\");s.tooltip={zlevel:1,z:8,show:!0,showContent:!0,trigger:\"item\",islandFormatter:\"{a} <br/>{b} : {c}\",showDelay:20,hideDelay:100,transitionDuration:.4,enterable:!1,backgroundColor:\"rgba(0,0,0,0.7)\",borderColor:\"#333\",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:\"line\",lineStyle:{color:\"#48b\",width:2,type:\"solid\"},crossStyle:{color:\"#1e90ff\",width:1,type:\"dashed\"},shadowStyle:{color:\"rgba(150,150,150,0.3)\",width:\"auto\",type:\"default\"}},textStyle:{color:\"#fff\"}};var l=e(\"../util/ecData\"),h=e(\"zrender/config\"),m=e(\"zrender/tool/event\"),V=e(\"zrender/tool/area\"),U=e(\"zrender/tool/color\"),d=e(\"zrender/tool/util\"),p=e(\"zrender/shape/Base\");return t.prototype={type:s.COMPONENT_TYPE_TOOLTIP,_gCssText:\"position:absolute;display:block;border-style:solid;white-space:nowrap;\",_style:function(e){if(!e)return\"\";var t=[];if(e.transitionDuration){var i=\"left \"+e.transitionDuration+\"s,top \"+e.transitionDuration+\"s\";t.push(\"transition:\"+i),t.push(\"-moz-transition:\"+i),t.push(\"-webkit-transition:\"+i),t.push(\"-o-transition:\"+i)}e.backgroundColor&&(t.push(\"background-Color:\"+U.toHex(e.backgroundColor)),t.push(\"filter:alpha(opacity=70)\"),t.push(\"background-Color:\"+e.backgroundColor)),null!=e.borderWidth&&t.push(\"border-width:\"+e.borderWidth+\"px\"),null!=e.borderColor&&t.push(\"border-color:\"+e.borderColor),null!=e.borderRadius&&(t.push(\"border-radius:\"+e.borderRadius+\"px\"),t.push(\"-moz-border-radius:\"+e.borderRadius+\"px\"),t.push(\"-webkit-border-radius:\"+e.borderRadius+\"px\"),t.push(\"-o-border-radius:\"+e.borderRadius+\"px\"));var n=e.textStyle;n&&(n.color&&t.push(\"color:\"+n.color),n.decoration&&t.push(\"text-decoration:\"+n.decoration),n.align&&t.push(\"text-align:\"+n.align),n.fontFamily&&t.push(\"font-family:\"+n.fontFamily),n.fontSize&&t.push(\"font-size:\"+n.fontSize+\"px\"),n.fontSize&&t.push(\"line-height:\"+Math.round(3*n.fontSize/2)+\"px\"),n.fontStyle&&t.push(\"font-style:\"+n.fontStyle),n.fontWeight&&t.push(\"font-weight:\"+n.fontWeight));var a=e.padding;return null!=a&&(a=this.reformCssArray(a),t.push(\"padding:\"+a[0]+\"px \"+a[1]+\"px \"+a[2]+\"px \"+a[3]+\"px\")),t=t.join(\";\")+\";\"},__hide:function(){this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,this._tDom&&(this._tDom.style.display=\"none\");var e=!1;this._axisLineShape.invisible||(this._axisLineShape.invisible=!0,\nthis.zr.modShape(this._axisLineShape.id),e=!0),this._axisShadowShape.invisible||(this._axisShadowShape.invisible=!0,this.zr.modShape(this._axisShadowShape.id),e=!0),this._axisCrossShape.invisible||(this._axisCrossShape.invisible=!0,this.zr.modShape(this._axisCrossShape.id),e=!0),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2),e&&this.zr.refreshNextFrame(),this.showing=!1},_show:function(e,t,i,n){var a=this._tDom.offsetHeight,o=this._tDom.offsetWidth;e&&(\"function\"==typeof e&&(e=e([t,i])),e instanceof Array&&(t=e[0],i=e[1])),t+o>this._zrWidth&&(t-=o+40),i+a>this._zrHeight&&(i-=a-20),20>i&&(i=0),this._tDom.style.cssText=this._gCssText+this._defaultCssText+(n?n:\"\")+\"left:\"+t+\"px;top:\"+i+\"px;\",(10>a||10>o)&&setTimeout(this._refixed,20),this.showing=!0},__refixed:function(){if(this._tDom){var e=\"\",t=this._tDom.offsetHeight,i=this._tDom.offsetWidth;this._tDom.offsetLeft+i>this._zrWidth&&(e+=\"left:\"+(this._zrWidth-i-20)+\"px;\"),this._tDom.offsetTop+t>this._zrHeight&&(e+=\"top:\"+(this._zrHeight-t-10)+\"px;\"),\"\"!==e&&(this._tDom.style.cssText+=e)}},__tryShow:function(){var e,t;if(this._curTarget){if(\"island\"===this._curTarget._type&&this.option.tooltip.show)return void this._showItemTrigger();var i=l.get(this._curTarget,\"series\"),n=l.get(this._curTarget,\"data\");e=this.deepQuery([n,i,this.option],\"tooltip.show\"),null!=i&&null!=n&&e?(t=this.deepQuery([n,i,this.option],\"tooltip.trigger\"),\"axis\"===t?this._showAxisTrigger(i.xAxisIndex,i.yAxisIndex,l.get(this._curTarget,\"dataIndex\")):this._showItemTrigger()):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}else this._findPolarTrigger()||this._findAxisTrigger()},_findAxisTrigger:function(){if(!this.component.xAxis||!this.component.yAxis)return void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));for(var e,t,i=this.option.series,n=0,a=i.length;a>n;n++)if(\"axis\"===this.deepQuery([i[n],this.option],\"tooltip.trigger\"))return e=i[n].xAxisIndex||0,t=i[n].yAxisIndex||0,this.component.xAxis.getAxis(e)&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex(\"x\",this.component.xAxis.getAxis(e))):this.component.yAxis.getAxis(t)&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?void this._showAxisTrigger(e,t,this._getNearestDataIndex(\"y\",this.component.yAxis.getAxis(t))):void this._showAxisTrigger(e,t,-1);\"cross\"===this.option.tooltip.axisPointer.type&&this._showAxisTrigger(-1,-1,-1)},_findPolarTrigger:function(){if(!this.component.polar)return!1;var e,t=m.getX(this._event),i=m.getY(this._event),n=this.component.polar.getNearestIndex([t,i]);return n?(e=n.valueIndex,n=n.polarIndex):n=-1,-1!=n?this._showPolarTrigger(n,e):!1},_getNearestDataIndex:function(e,t){var i=-1,n=m.getX(this._event),a=m.getY(this._event);if(\"x\"===e){for(var o,r,s=this.component.grid.getXend(),l=t.getCoordByIndex(i);s>l&&(r=l,n>=l);)o=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:r-n>=n-o?i-=1:null==t.getNameByIndex(i)&&(i-=1),i}for(var h,V,U=this.component.grid.getY(),l=t.getCoordByIndex(i);l>U&&(h=l,l>=a);)V=l,l=t.getCoordByIndex(++i);return 0>=i?i=0:a-h>=V-a?i-=1:null==t.getNameByIndex(i)&&(i-=1),i},_showAxisTrigger:function(e,t,i){if(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_IN_GRID,this._event,null,this.myChart),null==this.component.xAxis||null==this.component.yAxis||null==e||null==t)return clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),void(this._hidingTicket=setTimeout(this._hide,this._hideDelay));var n,a,o,r,l=this.option.series,h=[],V=[],U=\"\";if(\"axis\"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return;a=this.option.tooltip.formatter,o=this.option.tooltip.position}var d,p,c=-1!=e&&this.component.xAxis.getAxis(e).type===s.COMPONENT_TYPE_AXIS_CATEGORY?\"xAxis\":-1!=t&&this.component.yAxis.getAxis(t).type===s.COMPONENT_TYPE_AXIS_CATEGORY?\"yAxis\":!1;if(c){var u=\"xAxis\"==c?e:t;n=this.component[c].getAxis(u);for(var y=0,g=l.length;g>y;y++)this._isSelected(l[y].name)&&l[y][c+\"Index\"]===u&&\"axis\"===this.deepQuery([l[y],this.option],\"tooltip.trigger\")&&(r=this.query(l[y],\"tooltip.showContent\")||r,a=this.query(l[y],\"tooltip.formatter\")||a,o=this.query(l[y],\"tooltip.position\")||o,U+=this._style(this.query(l[y],\"tooltip\")),null!=l[y].stack&&\"xAxis\"==c?(h.unshift(l[y]),V.unshift(y)):(h.push(l[y]),V.push(y)));this.messageCenter.dispatch(s.EVENT.TOOLTIP_HOVER,this._event,{seriesIndex:V,dataIndex:i},this.myChart);var b;\"xAxis\"==c?(d=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),p=m.getY(this._event),b=[d,this.component.grid.getY(),d,this.component.grid.getYend()]):(d=m.getX(this._event),p=this.subPixelOptimize(n.getCoordByIndex(i),this._axisLineWidth),b=[this.component.grid.getX(),p,this.component.grid.getXend(),p]),this._styleAxisPointer(h,b[0],b[1],b[2],b[3],n.getGap(),d,p)}else d=m.getX(this._event),p=m.getY(this._event),this._styleAxisPointer(l,this.component.grid.getX(),p,this.component.grid.getXend(),p,0,d,p),i>=0?this._showItemTrigger(!0):(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._tDom.style.display=\"none\");if(h.length>0){if(this._lastItemTriggerId=-1,this._lastDataIndex!=i||this._lastSeriesIndex!=V[0]){this._lastDataIndex=i,this._lastSeriesIndex=V[0];var f,k;if(\"function\"==typeof a){for(var x=[],y=0,g=h.length;g>y;y++)f=h[y].data[i],k=this.getDataFromOption(f,\"-\"),x.push({seriesIndex:V[y],seriesName:h[y].name||\"\",series:h[y],dataIndex:i,data:f,name:n.getNameByIndex(i),value:k,0:h[y].name||\"\",1:n.getNameByIndex(i),2:k,3:f});this._curTicket=\"axis:\"+i,this._tDom.innerHTML=a.call(this.myChart,x,this._curTicket,this._setContent)}else if(\"string\"==typeof a){this._curTicket=0/0,a=a.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\");for(var y=0,g=h.length;g>y;y++)a=a.replace(\"{a\"+y+\"}\",this._encodeHTML(h[y].name||\"\")),a=a.replace(\"{b\"+y+\"}\",this._encodeHTML(n.getNameByIndex(i))),f=h[y].data[i],f=this.getDataFromOption(f,\"-\"),a=a.replace(\"{c\"+y+\"}\",f instanceof Array?f:this.numAddCommas(f));this._tDom.innerHTML=a}else{this._curTicket=0/0,a=this._encodeHTML(n.getNameByIndex(i));for(var y=0,g=h.length;g>y;y++)a+=\"<br/>\"+this._encodeHTML(h[y].name||\"\")+\" : \",f=h[y].data[i],f=this.getDataFromOption(f,\"-\"),a+=f instanceof Array?f:this.numAddCommas(f);this._tDom.innerHTML=a}}if(r===!1||!this.option.tooltip.showContent)return;this.hasAppend||(this._tDom.style.left=this._zrWidth/2+\"px\",this._tDom.style.top=this._zrHeight/2+\"px\",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(o,d+10,p+10,U)}},_showPolarTrigger:function(e,t){if(null==this.component.polar||null==e||null==t||0>t)return!1;var i,n,a,o=this.option.series,r=[],s=[],l=\"\";if(\"axis\"===this.option.tooltip.trigger){if(!this.option.tooltip.show)return!1;i=this.option.tooltip.formatter,n=this.option.tooltip.position}for(var h=this.option.polar[e].indicator[t].text,V=0,U=o.length;U>V;V++)this._isSelected(o[V].name)&&o[V].polarIndex===e&&\"axis\"===this.deepQuery([o[V],this.option],\"tooltip.trigger\")&&(a=this.query(o[V],\"tooltip.showContent\")||a,i=this.query(o[V],\"tooltip.formatter\")||i,n=this.query(o[V],\"tooltip.position\")||n,l+=this._style(this.query(o[V],\"tooltip\")),r.push(o[V]),s.push(V));if(r.length>0){for(var d,p,c,u=[],V=0,U=r.length;U>V;V++){d=r[V].data;for(var y=0,g=d.length;g>y;y++)p=d[y],this._isSelected(p.name)&&(p=null!=p?p:{name:\"\",value:{dataIndex:\"-\"}},c=this.getDataFromOption(p.value[t]),u.push({seriesIndex:s[V],seriesName:r[V].name||\"\",series:r[V],dataIndex:t,data:p,name:p.name,indicator:h,value:c,0:r[V].name||\"\",1:p.name,2:c,3:h}))}if(u.length<=0)return;if(this._lastItemTriggerId=-1,this._lastDataIndex!=t||this._lastSeriesIndex!=s[0])if(this._lastDataIndex=t,this._lastSeriesIndex=s[0],\"function\"==typeof i)this._curTicket=\"axis:\"+t,this._tDom.innerHTML=i.call(this.myChart,u,this._curTicket,this._setContent);else if(\"string\"==typeof i){i=i.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\").replace(\"{d}\",\"{d0}\");for(var V=0,U=u.length;U>V;V++)i=i.replace(\"{a\"+V+\"}\",this._encodeHTML(u[V].seriesName)),i=i.replace(\"{b\"+V+\"}\",this._encodeHTML(u[V].name)),i=i.replace(\"{c\"+V+\"}\",this.numAddCommas(u[V].value)),i=i.replace(\"{d\"+V+\"}\",this._encodeHTML(u[V].indicator));this._tDom.innerHTML=i}else{i=this._encodeHTML(u[0].name)+\"<br/>\"+this._encodeHTML(u[0].indicator)+\" : \"+this.numAddCommas(u[0].value);for(var V=1,U=u.length;U>V;V++)i+=\"<br/>\"+this._encodeHTML(u[V].name)+\"<br/>\",i+=this._encodeHTML(u[V].indicator)+\" : \"+this.numAddCommas(u[V].value);this._tDom.innerHTML=i}if(a===!1||!this.option.tooltip.showContent)return;return this.hasAppend||(this._tDom.style.left=this._zrWidth/2+\"px\",this._tDom.style.top=this._zrHeight/2+\"px\",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(n,m.getX(this._event),m.getY(this._event),l),!0}},_showItemTrigger:function(e){if(this._curTarget){var t,i,n,a=l.get(this._curTarget,\"series\"),o=l.get(this._curTarget,\"seriesIndex\"),r=l.get(this._curTarget,\"data\"),h=l.get(this._curTarget,\"dataIndex\"),V=l.get(this._curTarget,\"name\"),U=l.get(this._curTarget,\"value\"),d=l.get(this._curTarget,\"special\"),p=l.get(this._curTarget,\"special2\"),c=[r,a,this.option],u=\"\";if(\"island\"!=this._curTarget._type){var y=e?\"axis\":\"item\";this.option.tooltip.trigger===y&&(t=this.option.tooltip.formatter,i=this.option.tooltip.position),this.query(a,\"tooltip.trigger\")===y&&(n=this.query(a,\"tooltip.showContent\")||n,t=this.query(a,\"tooltip.formatter\")||t,i=this.query(a,\"tooltip.position\")||i,u+=this._style(this.query(a,\"tooltip\"))),n=this.query(r,\"tooltip.showContent\")||n,t=this.query(r,\"tooltip.formatter\")||t,i=this.query(r,\"tooltip.position\")||i,u+=this._style(this.query(r,\"tooltip\"))}else this._lastItemTriggerId=0/0,n=this.deepQuery(c,\"tooltip.showContent\"),t=this.deepQuery(c,\"tooltip.islandFormatter\"),i=this.deepQuery(c,\"tooltip.islandPosition\");this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId!==this._curTarget.id&&(this._lastItemTriggerId=this._curTarget.id,\"function\"==typeof t?(this._curTicket=(a.name||\"\")+\":\"+h,this._tDom.innerHTML=t.call(this.myChart,{seriesIndex:o,seriesName:a.name||\"\",series:a,dataIndex:h,data:r,name:V,value:U,percent:d,indicator:d,value2:p,indicator2:p,0:a.name||\"\",1:V,2:U,3:d,4:p,5:r,6:o,7:h},this._curTicket,this._setContent)):\"string\"==typeof t?(this._curTicket=0/0,t=t.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\"),t=t.replace(\"{a0}\",this._encodeHTML(a.name||\"\")).replace(\"{b0}\",this._encodeHTML(V)).replace(\"{c0}\",U instanceof Array?U:this.numAddCommas(U)),t=t.replace(\"{d}\",\"{d0}\").replace(\"{d0}\",d||\"\"),t=t.replace(\"{e}\",\"{e0}\").replace(\"{e0}\",l.get(this._curTarget,\"special2\")||\"\"),this._tDom.innerHTML=t):(this._curTicket=0/0,this._tDom.innerHTML=a.type===s.CHART_TYPE_RADAR&&d?this._itemFormatter.radar.call(this,a,V,U,d):a.type===s.CHART_TYPE_EVENTRIVER?this._itemFormatter.eventRiver.call(this,a,V,U,r):\"\"+(null!=a.name?this._encodeHTML(a.name)+\"<br/>\":\"\")+(\"\"===V?\"\":this._encodeHTML(V)+\" : \")+(U instanceof Array?U:this.numAddCommas(U))));var g=m.getX(this._event),b=m.getY(this._event);this.deepQuery(c,\"tooltip.axisPointer.show\")&&this.component.grid?this._styleAxisPointer([a],this.component.grid.getX(),b,this.component.grid.getXend(),b,0,g,b):this._hide(),n!==!1&&this.option.tooltip.showContent&&(this.hasAppend||(this._tDom.style.left=this._zrWidth/2+\"px\",this._tDom.style.top=this._zrHeight/2+\"px\",this.dom.firstChild.appendChild(this._tDom),this.hasAppend=!0),this._show(i,g+20,b-20,u))}},_itemFormatter:{radar:function(e,t,i,n){var a=\"\";a+=this._encodeHTML(\"\"===t?e.name||\"\":t),a+=\"\"===a?\"\":\"<br />\";for(var o=0;o<n.length;o++)a+=this._encodeHTML(n[o].text)+\" : \"+this.numAddCommas(i[o])+\"<br />\";return a},chord:function(e,t,i,n,a){if(null==a)return this._encodeHTML(t)+\" (\"+this.numAddCommas(i)+\")\";var o=this._encodeHTML(t),r=this._encodeHTML(n);return\"\"+(null!=e.name?this._encodeHTML(e.name)+\"<br/>\":\"\")+o+\" -> \"+r+\" (\"+this.numAddCommas(i)+\")<br />\"+r+\" -> \"+o+\" (\"+this.numAddCommas(a)+\")\"},eventRiver:function(e,t,i,n){var a=\"\";a+=this._encodeHTML(\"\"===e.name?\"\":e.name+\" : \"),a+=this._encodeHTML(t),a+=\"\"===a?\"\":\"<br />\",n=n.evolution;for(var o=0,r=n.length;r>o;o++)a+='<div style=\"padding-top:5px;\">',n[o].detail&&(n[o].detail.img&&(a+='<img src=\"'+n[o].detail.img+'\" style=\"float:left;width:40px;height:40px;\">'),a+='<div style=\"margin-left:45px;\">'+n[o].time+\"<br/>\",a+='<a href=\"'+n[o].detail.link+'\" target=\"_blank\">',a+=n[o].detail.text+\"</a></div>\",a+=\"</div>\");return a}},_styleAxisPointer:function(e,t,i,n,a,o,r,s){if(e.length>0){var l,h,m=this.option.tooltip.axisPointer,V=m.type,U={line:{},cross:{},shadow:{}};for(var d in U)U[d].color=m[d+\"Style\"].color,U[d].width=m[d+\"Style\"].width,U[d].type=m[d+\"Style\"].type;for(var p=0,c=e.length;c>p;p++)l=e[p],h=this.query(l,\"tooltip.axisPointer.type\"),V=h||V,h&&(U[h].color=this.query(l,\"tooltip.axisPointer.\"+h+\"Style.color\")||U[h].color,U[h].width=this.query(l,\"tooltip.axisPointer.\"+h+\"Style.width\")||U[h].width,U[h].type=this.query(l,\"tooltip.axisPointer.\"+h+\"Style.type\")||U[h].type);if(\"line\"===V){var u=U.line.width,y=t==n;this._axisLineShape.style={xStart:y?this.subPixelOptimize(t,u):t,yStart:y?i:this.subPixelOptimize(i,u),xEnd:y?this.subPixelOptimize(n,u):n,yEnd:y?a:this.subPixelOptimize(a,u),strokeColor:U.line.color,lineWidth:u,lineType:U.line.type},this._axisLineShape.invisible=!1,this.zr.modShape(this._axisLineShape.id)}else if(\"cross\"===V){var g=U.cross.width;this._axisCrossShape.style={brushType:\"stroke\",rect:this.component.grid.getArea(),x:this.subPixelOptimize(r,g),y:this.subPixelOptimize(s,g),text:(\"( \"+this.component.xAxis.getAxis(0).getValueFromCoord(r)+\" , \"+this.component.yAxis.getAxis(0).getValueFromCoord(s)+\" )\").replace(\"  , \",\" \").replace(\" ,  \",\" \"),textPosition:\"specific\",strokeColor:U.cross.color,lineWidth:g,lineType:U.cross.type},this.component.grid.getXend()-r>100?(this._axisCrossShape.style.textAlign=\"left\",this._axisCrossShape.style.textX=r+10):(this._axisCrossShape.style.textAlign=\"right\",this._axisCrossShape.style.textX=r-10),s-this.component.grid.getY()>50?(this._axisCrossShape.style.textBaseline=\"bottom\",this._axisCrossShape.style.textY=s-10):(this._axisCrossShape.style.textBaseline=\"top\",this._axisCrossShape.style.textY=s+10),this._axisCrossShape.invisible=!1,this.zr.modShape(this._axisCrossShape.id)}else\"shadow\"===V&&((null==U.shadow.width||\"auto\"===U.shadow.width||isNaN(U.shadow.width))&&(U.shadow.width=o),t===n?Math.abs(this.component.grid.getX()-t)<2?(U.shadow.width/=2,t=n+=U.shadow.width/2):Math.abs(this.component.grid.getXend()-t)<2&&(U.shadow.width/=2,t=n-=U.shadow.width/2):i===a&&(Math.abs(this.component.grid.getY()-i)<2?(U.shadow.width/=2,i=a+=U.shadow.width/2):Math.abs(this.component.grid.getYend()-i)<2&&(U.shadow.width/=2,i=a-=U.shadow.width/2)),this._axisShadowShape.style={xStart:t,yStart:i,xEnd:n,yEnd:a,strokeColor:U.shadow.color,lineWidth:U.shadow.width},this._axisShadowShape.invisible=!1,this.zr.modShape(this._axisShadowShape.id));this.zr.refreshNextFrame()}},__onmousemove:function(e){if(clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),!this._mousein||!this._enterable){var t=e.target,i=m.getX(e.event),n=m.getY(e.event);if(t){this._curTarget=t,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n;var a;if(this._needAxisTrigger&&this.component.polar&&-1!=(a=this.component.polar.isInside([i,n])))for(var o=this.option.series,l=0,h=o.length;h>l;l++)if(o[l].polarIndex===a&&\"axis\"===this.deepQuery([o[l],this.option],\"tooltip.trigger\")){this._curTarget=null;break}this._showingTicket=setTimeout(this._tryShow,this._showDelay)}else this._curTarget=!1,this._event=e.event,this._event.zrenderX=i,this._event.zrenderY=n,this._needAxisTrigger&&this.component.grid&&V.isInside(r,this.component.grid.getArea(),i,n)?this._showingTicket=setTimeout(this._tryShow,this._showDelay):this._needAxisTrigger&&this.component.polar&&-1!=this.component.polar.isInside([i,n])?this._showingTicket=setTimeout(this._tryShow,this._showDelay):(!this._event.connectTrigger&&this.messageCenter.dispatch(s.EVENT.TOOLTIP_OUT_GRID,this._event,null,this.myChart),this._hidingTicket=setTimeout(this._hide,this._hideDelay))}},__onglobalout:function(){clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this._hidingTicket=setTimeout(this._hide,this._hideDelay)},__setContent:function(e,t){this._tDom&&(e===this._curTicket&&(this._tDom.innerHTML=t),setTimeout(this._refixed,20))},ontooltipHover:function(e,t){if(!this._lastTipShape||this._lastTipShape&&this._lastTipShape.dataIndex!=e.dataIndex){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&(this.zr.delShape(this._lastTipShape.tipShape),this.shapeList.length=2);for(var i=0,n=t.length;n>i;i++)t[i].zlevel=this.getZlevelBase(),t[i].z=this.getZBase(),t[i].style=p.prototype.getHighlightStyle(t[i].style,t[i].highlightStyle),t[i].draggable=!1,t[i].hoverable=!1,t[i].clickable=!1,t[i].ondragend=null,t[i].ondragover=null,t[i].ondrop=null,this.shapeList.push(t[i]),this.zr.addShape(t[i]);this._lastTipShape={dataIndex:e.dataIndex,tipShape:t}}},ondragend:function(){this._hide()},onlegendSelected:function(e){this._selectedMap=e.selected},_setSelectedMap:function(){this._selectedMap=this.component.legend?d.clone(this.component.legend.getSelectedMap()):{}},_isSelected:function(e){return null!=this._selectedMap[e]?this._selectedMap[e]:!0},showTip:function(e){if(e){var t,i=this.option.series;if(null!=e.seriesIndex)t=e.seriesIndex;else for(var n=e.seriesName,a=0,o=i.length;o>a;a++)if(i[a].name===n){t=a;break}var r=i[t];if(null!=r){var m=this.myChart.chart[r.type],V=\"axis\"===this.deepQuery([r,this.option],\"tooltip.trigger\");if(m)if(V){var U=e.dataIndex;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_RADAR:if(null==this.component.polar||r.data[0].value.length<=U)return;var d=r.polarIndex||0,p=this.component.polar.getVector(d,U,\"max\");this._event={zrenderX:p[0],zrenderY:p[1]},this._showPolarTrigger(d,U)}}else{var c,u,y=m.shapeList;switch(m.type){case s.CHART_TYPE_LINE:case s.CHART_TYPE_BAR:case s.CHART_TYPE_K:case s.CHART_TYPE_TREEMAP:case s.CHART_TYPE_SCATTER:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if(null==y[a]._mark&&l.get(y[a],\"seriesIndex\")==t&&l.get(y[a],\"dataIndex\")==U){this._curTarget=y[a],c=y[a].style.x,u=m.type!=s.CHART_TYPE_K?y[a].style.y:y[a].style.y[0];break}break;case s.CHART_TYPE_RADAR:for(var U=e.dataIndex,a=0,o=y.length;o>a;a++)if(\"polygon\"===y[a].type&&l.get(y[a],\"seriesIndex\")==t&&l.get(y[a],\"dataIndex\")==U){this._curTarget=y[a];var p=this.component.polar.getCenter(r.polarIndex||0);c=p[0],u=p[1];break}break;case s.CHART_TYPE_PIE:for(var g=e.name,a=0,o=y.length;o>a;a++)if(\"sector\"===y[a].type&&l.get(y[a],\"seriesIndex\")==t&&l.get(y[a],\"name\")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;c=this._curTarget.style.x+Math.cos(f)*b.r/1.5,u=this._curTarget.style.y-Math.sin(f)*b.r/1.5;break}break;case s.CHART_TYPE_MAP:for(var g=e.name,k=r.mapType,a=0,o=y.length;o>a;a++)if(\"text\"===y[a].type&&y[a]._mapType===k&&y[a].style._name===g){this._curTarget=y[a],c=this._curTarget.style.x+this._curTarget.position[0],u=this._curTarget.style.y+this._curTarget.position[1];break}break;case s.CHART_TYPE_CHORD:for(var g=e.name,a=0,o=y.length;o>a;a++)if(\"sector\"===y[a].type&&l.get(y[a],\"name\")==g){this._curTarget=y[a];var b=this._curTarget.style,f=(b.startAngle+b.endAngle)/2*Math.PI/180;return c=this._curTarget.style.x+Math.cos(f)*(b.r-2),u=this._curTarget.style.y-Math.sin(f)*(b.r-2),void this.zr.trigger(h.EVENT.MOUSEMOVE,{zrenderX:c,zrenderY:u})}break;case s.CHART_TYPE_FORCE:for(var g=e.name,a=0,o=y.length;o>a;a++)if(\"circle\"===y[a].type&&l.get(y[a],\"name\")==g){this._curTarget=y[a],c=this._curTarget.position[0],u=this._curTarget.position[1];break}}null!=c&&null!=u&&(this._event={zrenderX:c,zrenderY:u},this.zr.addHoverShape(this._curTarget),this.zr.refreshHover(),this._showItemTrigger())}}}},hideTip:function(){this._hide()},refresh:function(e){if(this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),this._lastTipShape=!1,this.shapeList.length=2,this._lastDataIndex=-1,this._lastSeriesIndex=-1,this._lastItemTriggerId=-1,e){this.option=e,this.option.tooltip=this.reformOption(this.option.tooltip),this.option.tooltip.textStyle=d.merge(this.option.tooltip.textStyle,this.ecTheme.textStyle),this._needAxisTrigger=!1,\"axis\"===this.option.tooltip.trigger&&(this._needAxisTrigger=!0);for(var t=this.option.series,i=0,n=t.length;n>i;i++)if(\"axis\"===this.query(t[i],\"tooltip.trigger\")){this._needAxisTrigger=!0;break}this._showDelay=this.option.tooltip.showDelay,this._hideDelay=this.option.tooltip.hideDelay,this._defaultCssText=this._style(this.option.tooltip),this._setSelectedMap(),this._axisLineWidth=this.option.tooltip.axisPointer.lineStyle.width,this._enterable=this.option.tooltip.enterable,!this._enterable&&this._tDom.className.indexOf(h.elementClassName)<0&&(this._tDom.className+=\" \"+h.elementClassName)}if(this.showing){var a=this;setTimeout(function(){a.zr.trigger(h.EVENT.MOUSEMOVE,a.zr.handler._event)},50)}},onbeforDispose:function(){this._lastTipShape&&this._lastTipShape.tipShape.length>0&&this.zr.delShape(this._lastTipShape.tipShape),clearTimeout(this._hidingTicket),clearTimeout(this._showingTicket),this.zr.un(h.EVENT.MOUSEMOVE,this._onmousemove),this.zr.un(h.EVENT.GLOBALOUT,this._onglobalout),this.hasAppend&&this.dom.firstChild&&this.dom.firstChild.removeChild(this._tDom),this._tDom=null},_encodeHTML:function(e){return String(e).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\").replace(/'/g,\"&#39;\")}},d.inherits(t,i),e(\"../component\").define(\"tooltip\",t),t}),i(\"echarts/component/legend\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Rectangle\",\"zrender/shape/Sector\",\"../util/shape/Icon\",\"../util/shape/Candle\",\"../config\",\"zrender/tool/util\",\"zrender/tool/area\",\"../component\"],function(e){function t(e,t,n,a,o){if(!this.query(a,\"legend.data\"))return void console.error(\"option.legend.data has not been defined.\");i.call(this,e,t,n,a,o);var r=this;r._legendSelected=function(e){r.__legendSelected(e)},r._dispatchHoverLink=function(e){return r.__dispatchHoverLink(e)},this._colorIndex=0,this._colorMap={},this._selectedMap={},this._hasDataMap={},this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Rectangle\"),o=e(\"zrender/shape/Sector\"),r=e(\"../util/shape/Icon\"),s=e(\"../util/shape/Candle\"),l=e(\"../config\");l.legend={zlevel:0,z:4,show:!0,orient:\"horizontal\",x:\"center\",y:\"top\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:\"#333\"},selectedMode:!0};var h=e(\"zrender/tool/util\"),m=e(\"zrender/tool/area\");t.prototype={type:l.COMPONENT_TYPE_LEGEND,_buildShape:function(){if(this.legendOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){var e,t,i,a,o,s,l,V,U=this.legendOption.data,d=U.length,p=this.legendOption.textStyle,c=this.zr.getWidth(),u=this.zr.getHeight(),y=this._itemGroupLocation.x,g=this._itemGroupLocation.y,b=this.legendOption.itemWidth,f=this.legendOption.itemHeight,k=this.legendOption.itemGap;\"vertical\"===this.legendOption.orient&&\"right\"===this.legendOption.x&&(y=this._itemGroupLocation.x+this._itemGroupLocation.width-b);for(var x=0;d>x;x++)o=h.merge(U[x].textStyle||{},p),s=this.getFont(o),e=this._getName(U[x]),l=this._getFormatterName(e),\"\"!==e?(t=U[x].icon||this._getSomethingByName(e).type,V=this.getColor(e),\"horizontal\"===this.legendOption.orient?200>c-y&&b+5+m.getTextWidth(l,s)+(x===d-1||\"\"===U[x+1]?0:k)>=c-y&&(y=this._itemGroupLocation.x,g+=f+k):200>u-g&&f+(x===d-1||\"\"===U[x+1]?0:k)>=u-g&&(\"right\"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y),i=this._getItemShapeByType(y,g,b,f,this._selectedMap[e]&&this._hasDataMap[e]?V:\"#ccc\",t,V),i._name=e,i=new r(i),a={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:y+b+5,y:g+f/2,color:this._selectedMap[e]?\"auto\"===o.color?V:o.color:\"#ccc\",text:l,textFont:s,textBaseline:\"middle\"},highlightStyle:{color:V,brushType:\"fill\"},hoverable:!!this.legendOption.selectedMode,clickable:!!this.legendOption.selectedMode},\"vertical\"===this.legendOption.orient&&\"right\"===this.legendOption.x&&(a.style.x-=b+10,a.style.textAlign=\"right\"),a._name=e,a=new n(a),this.legendOption.selectedMode&&(i.onclick=a.onclick=this._legendSelected,i.onmouseover=a.onmouseover=this._dispatchHoverLink,i.hoverConnect=a.id,a.hoverConnect=i.id),this.shapeList.push(i),this.shapeList.push(a),\"horizontal\"===this.legendOption.orient?y+=b+5+m.getTextWidth(l,s)+k:g+=f+k):\"horizontal\"===this.legendOption.orient?(y=this._itemGroupLocation.x,g+=f+k):(\"right\"===this.legendOption.x?y-=this._itemGroupLocation.maxWidth+k:y+=this._itemGroupLocation.maxWidth+k,g=this._itemGroupLocation.y);\"horizontal\"===this.legendOption.orient&&\"center\"===this.legendOption.x&&g!=this._itemGroupLocation.y&&this._mLineOptimize()},_getName:function(e){return\"undefined\"!=typeof e.name?e.name:e},_getFormatterName:function(e){var t,i=this.legendOption.formatter;return t=\"function\"==typeof i?i.call(this.myChart,e):\"string\"==typeof i?i.replace(\"{name}\",e):e},_getFormatterNameFromData:function(e){var t=this._getName(e);return this._getFormatterName(t)},_mLineOptimize:function(){for(var e=[],t=this._itemGroupLocation.x,i=2,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t?e.push((this._itemGroupLocation.width-(this.shapeList[i-1].style.x+m.getTextWidth(this.shapeList[i-1].style.text,this.shapeList[i-1].style.textFont)-t))/2):i===n-1&&e.push((this._itemGroupLocation.width-(this.shapeList[i].style.x+m.getTextWidth(this.shapeList[i].style.text,this.shapeList[i].style.textFont)-t))/2);for(var a=-1,i=1,n=this.shapeList.length;n>i;i++)this.shapeList[i].style.x===t&&a++,0!==e[a]&&(this.shapeList[i].style.x+=e[a])},_buildBackground:function(){var e=this.reformCssArray(this.legendOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.legendOption.borderWidth?\"fill\":\"both\",color:this.legendOption.backgroundColor,strokeColor:this.legendOption.borderColor,lineWidth:this.legendOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this.legendOption.data,t=e.length,i=this.legendOption.itemGap,n=this.legendOption.itemWidth+5,a=this.legendOption.itemHeight,o=this.legendOption.textStyle,r=this.getFont(o),s=0,l=0,V=this.reformCssArray(this.legendOption.padding),U=this.zr.getWidth()-V[1]-V[3],d=this.zr.getHeight()-V[0]-V[2],p=0,c=0;if(\"horizontal\"===this.legendOption.orient){l=a;for(var u=0;t>u;u++)if(\"\"!==this._getName(e[u])){var y=m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r);p+n+y+i>U?(p-=i,s=Math.max(s,p),l+=a+i,p=0):(p+=n+y+i,s=Math.max(s,p-i))}else p-=i,s=Math.max(s,p),l+=a+i,p=0}else{for(var u=0;t>u;u++)c=Math.max(c,m.getTextWidth(this._getFormatterNameFromData(e[u]),e[u].textStyle?this.getFont(h.merge(e[u].textStyle||{},o)):r));c+=n,s=c;for(var u=0;t>u;u++)\"\"!==this._getName(e[u])?p+a+i>d?(s+=c+i,p-=i,l=Math.max(l,p),p=0):(p+=a+i,l=Math.max(l,p-i)):(s+=c+i,p-=i,l=Math.max(l,p),p=0)}U=this.zr.getWidth(),d=this.zr.getHeight();var g;switch(this.legendOption.x){case\"center\":g=Math.floor((U-s)/2);break;case\"left\":g=V[3]+this.legendOption.borderWidth;break;case\"right\":g=U-s-V[1]-V[3]-2*this.legendOption.borderWidth;break;default:g=this.parsePercent(this.legendOption.x,U)}var b;switch(this.legendOption.y){case\"top\":b=V[0]+this.legendOption.borderWidth;break;case\"bottom\":b=d-l-V[0]-V[2]-2*this.legendOption.borderWidth;break;case\"center\":b=Math.floor((d-l)/2);break;default:b=this.parsePercent(this.legendOption.y,d)}return{x:g,y:b,width:s,height:l,maxWidth:c}},_getSomethingByName:function(e){for(var t,i=this.option.series,n=0,a=i.length;a>n;n++){if(i[n].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:null,dataIndex:-1};if(i[n].type===l.CHART_TYPE_PIE||i[n].type===l.CHART_TYPE_RADAR||i[n].type===l.CHART_TYPE_CHORD||i[n].type===l.CHART_TYPE_FORCE||i[n].type===l.CHART_TYPE_FUNNEL||i[n].type===l.CHART_TYPE_TREEMAP){t=i[n].categories||i[n].data||i[n].nodes;for(var o=0,r=t.length;r>o;o++)if(t[o].name===e)return{type:i[n].type,series:i[n],seriesIndex:n,data:t[o],dataIndex:o}}}return{type:\"bar\",series:null,seriesIndex:-1,data:null,dataIndex:-1}},_getItemShapeByType:function(e,t,i,n,a,o,r){var s,h=\"#ccc\"===a?r:a,m={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{iconType:\"legendicon\"+o,x:e,y:t,width:i,height:n,color:a,strokeColor:a,lineWidth:2},highlightStyle:{color:h,strokeColor:h,lineWidth:1},hoverable:this.legendOption.selectedMode,clickable:this.legendOption.selectedMode};if(o.match(\"image\")){var s=o.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\");o=\"image\"}switch(o){case\"line\":m.style.brushType=\"stroke\",m.highlightStyle.lineWidth=3;break;case\"radar\":case\"venn\":case\"tree\":case\"treemap\":case\"scatter\":m.highlightStyle.lineWidth=3;break;case\"k\":m.style.brushType=\"both\",m.highlightStyle.lineWidth=3,m.highlightStyle.color=m.style.color=this.deepQuery([this.ecTheme,l],\"k.itemStyle.normal.color\")||\"#fff\",m.style.strokeColor=\"#ccc\"!=a?this.deepQuery([this.ecTheme,l],\"k.itemStyle.normal.lineStyle.color\")||\"#ff3200\":a;break;case\"image\":m.style.iconType=\"image\",m.style.image=s,\"#ccc\"===a&&(m.style.opacity=.5)}return m},__legendSelected:function(e){var t=e.target._name;if(\"single\"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[t]=!this._selectedMap[t],this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,e.event,{selected:this._selectedMap,target:t},this.myChart)},__dispatchHoverLink:function(e){this.messageCenter.dispatch(l.EVENT.LEGEND_HOVERLINK,e.event,{target:e.target._name},this.myChart)},refresh:function(e){if(e){this.option=e||this.option,this.option.legend=this.reformOption(this.option.legend),this.legendOption=this.option.legend;var t,i,n,a,o=this.legendOption.data||[];if(this.legendOption.selected)for(var r in this.legendOption.selected)this._selectedMap[r]=\"undefined\"!=typeof this._selectedMap[r]?this._selectedMap[r]:this.legendOption.selected[r];for(var s=0,h=o.length;h>s;s++)t=this._getName(o[s]),\"\"!==t&&(i=this._getSomethingByName(t),i.series?(this._hasDataMap[t]=!0,a=!i.data||i.type!==l.CHART_TYPE_PIE&&i.type!==l.CHART_TYPE_FORCE&&i.type!==l.CHART_TYPE_FUNNEL?[i.series]:[i.data,i.series],n=this.getItemStyleColor(this.deepQuery(a,\"itemStyle.normal.color\"),i.seriesIndex,i.dataIndex,i.data),n&&i.type!=l.CHART_TYPE_K&&this.setColor(t,n),this._selectedMap[t]=null!=this._selectedMap[t]?this._selectedMap[t]:!0):this._hasDataMap[t]=!1)}this.clear(),this._buildShape()},getRelatedAmount:function(e){for(var t,i=0,n=this.option.series,a=0,o=n.length;o>a;a++)if(n[a].name===e&&i++,n[a].type===l.CHART_TYPE_PIE||n[a].type===l.CHART_TYPE_RADAR||n[a].type===l.CHART_TYPE_CHORD||n[a].type===l.CHART_TYPE_FORCE||n[a].type===l.CHART_TYPE_FUNNEL){t=n[a].type!=l.CHART_TYPE_FORCE?n[a].data:n[a].categories;for(var r=0,s=t.length;s>r;r++)t[r].name===e&&\"-\"!=t[r].value&&i++}return i},setColor:function(e,t){this._colorMap[e]=t},getColor:function(e){return this._colorMap[e]||(this._colorMap[e]=this.zr.getColor(this._colorIndex++)),this._colorMap[e]},hasColor:function(e){return this._colorMap[e]?this._colorMap[e]:!1},add:function(e,t){\nfor(var i=this.legendOption.data,n=0,a=i.length;a>n;n++)if(this._getName(i[n])===e)return;this.legendOption.data.push(e),this.setColor(e,t),this._selectedMap[e]=!0,this._hasDataMap[e]=!0},del:function(e){for(var t=this.legendOption.data,i=0,n=t.length;n>i;i++)if(this._getName(t[i])===e)return this.legendOption.data.splice(i,1)},getItemShape:function(e){if(null!=e)for(var t,i=0,n=this.shapeList.length;n>i;i++)if(t=this.shapeList[i],t._name===e&&\"text\"!=t.type)return t},setItemShape:function(e,t){for(var i,n=0,a=this.shapeList.length;a>n;n++)i=this.shapeList[n],i._name===e&&\"text\"!=i.type&&(this._selectedMap[e]||(t.style.color=\"#ccc\",t.style.strokeColor=\"#ccc\"),this.zr.modShape(i.id,t))},isSelected:function(e){return\"undefined\"!=typeof this._selectedMap[e]?this._selectedMap[e]:!0},getSelectedMap:function(){return this._selectedMap},setSelected:function(e,t){if(\"single\"===this.legendOption.selectedMode)for(var i in this._selectedMap)this._selectedMap[i]=!1;this._selectedMap[e]=t,this.messageCenter.dispatch(l.EVENT.LEGEND_SELECTED,null,{selected:this._selectedMap,target:e},this.myChart)},onlegendSelected:function(e,t){var i=e.selected;for(var n in i)this._selectedMap[n]!=i[n]&&(t.needRefresh=!0),this._selectedMap[n]=i[n]}};var V={line:function(e,t){var i=t.height/2;e.moveTo(t.x,t.y+i),e.lineTo(t.x+t.width,t.y+i)},pie:function(e,t){var i=t.x,n=t.y,a=t.width,r=t.height;o.prototype.buildPath(e,{x:i+a/2,y:n+r+2,r:r,r0:6,startAngle:45,endAngle:135})},eventRiver:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o),e.bezierCurveTo(i+a,n+o,i,n+4,i+a,n+4),e.lineTo(i+a,n),e.bezierCurveTo(i,n,i+a,n+o-4,i,n+o-4),e.lineTo(i,n+o)},k:function(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;s.prototype.buildPath(e,{x:i+a/2,y:[n+1,n+1,n+o-6,n+o],width:a-6})},bar:function(e,t){var i=t.x,n=t.y+1,a=t.width,o=t.height-2,r=3;e.moveTo(i+r,n),e.lineTo(i+a-r,n),e.quadraticCurveTo(i+a,n,i+a,n+r),e.lineTo(i+a,n+o-r),e.quadraticCurveTo(i+a,n+o,i+a-r,n+o),e.lineTo(i+r,n+o),e.quadraticCurveTo(i,n+o,i,n+o-r),e.lineTo(i,n+r),e.quadraticCurveTo(i,n,i+r,n)},force:function(e,t){r.prototype.iconLibrary.circle(e,t)},radar:function(e,t){var i=6,n=t.x+t.width/2,a=t.y+t.height/2,o=t.height/2,r=2*Math.PI/i,s=-Math.PI/2,l=n+o*Math.cos(s),h=a+o*Math.sin(s);e.moveTo(l,h),s+=r;for(var m=0,V=i-1;V>m;m++)e.lineTo(n+o*Math.cos(s),a+o*Math.sin(s)),s+=r;e.lineTo(l,h)}};V.chord=V.pie,V.map=V.bar;for(var U in V)r.prototype.iconLibrary[\"legendicon\"+U]=V[U];return h.inherits(t,i),e(\"../component\").define(\"legend\",t),t}),i(\"echarts/util/ecData\",[],function(){function e(e,t,i,n,a,o,r,s){var l;return\"undefined\"!=typeof n&&(l=null==n.value?n:n.value),e._echartsData={_series:t,_seriesIndex:i,_data:n,_dataIndex:a,_name:o,_value:l,_special:r,_special2:s},e._echartsData}function t(e,t){var i=e._echartsData;if(!t)return i;switch(t){case\"series\":case\"seriesIndex\":case\"data\":case\"dataIndex\":case\"name\":case\"value\":case\"special\":case\"special2\":return i&&i[\"_\"+t]}return null}function i(e,t,i){switch(e._echartsData=e._echartsData||{},t){case\"series\":case\"seriesIndex\":case\"data\":case\"dataIndex\":case\"name\":case\"value\":case\"special\":case\"special2\":e._echartsData[\"_\"+t]=i}}function n(e,t){t._echartsData={_series:e._echartsData._series,_seriesIndex:e._echartsData._seriesIndex,_data:e._echartsData._data,_dataIndex:e._echartsData._dataIndex,_name:e._echartsData._name,_value:e._echartsData._value,_special:e._echartsData._special,_special2:e._echartsData._special2}}return{pack:e,set:i,get:t,clone:n}}),i(\"echarts/chart\",[],function(){var e={},t={};return e.define=function(i,n){return t[i]=n,e},e.get=function(e){return t[e]},e}),i(\"zrender/tool/color\",[\"require\",\"../tool/util\"],function(e){function t(e){D=e}function i(){D=N}function n(e,t){return e=0|e,t=t||D,t[e%t.length]}function a(e){B=e}function o(){H=B}function r(){return B}function s(e,t,i,n,a,o,r){O||(O=P.getContext());for(var s=O.createRadialGradient(e,t,i,n,a,o),l=0,h=r.length;h>l;l++)s.addColorStop(r[l][0],r[l][1]);return s.__nonRecursion=!0,s}function l(e,t,i,n,a){O||(O=P.getContext());for(var o=O.createLinearGradient(e,t,i,n),r=0,s=a.length;s>r;r++)o.addColorStop(a[r][0],a[r][1]);return o.__nonRecursion=!0,o}function h(e,t,i){e=p(e),t=p(t),e=I(e),t=I(t);for(var n=[],a=(t[0]-e[0])/i,o=(t[1]-e[1])/i,r=(t[2]-e[2])/i,s=(t[3]-e[3])/i,l=0,h=e[0],m=e[1],U=e[2],d=e[3];i>l;l++)n[l]=V([S(Math.floor(h),[0,255]),S(Math.floor(m),[0,255]),S(Math.floor(U),[0,255]),d.toFixed(4)-0],\"rgba\"),h+=a,m+=o,U+=r,d+=s;return h=t[0],m=t[1],U=t[2],d=t[3],n[l]=V([h,m,U,d],\"rgba\"),n}function m(e,t){var i=[],n=e.length;if(void 0===t&&(t=20),1===n)i=h(e[0],e[0],t);else if(n>1)for(var a=0,o=n-1;o>a;a++){var r=h(e[a],e[a+1],t);o-1>a&&r.pop(),i=i.concat(r)}return i}function V(e,t){if(t=t||\"rgb\",e&&(3===e.length||4===e.length)){if(e=C(e,function(e){return e>1?Math.ceil(e):e}),t.indexOf(\"hex\")>-1)return\"#\"+((1<<24)+(e[0]<<16)+(e[1]<<8)+ +e[2]).toString(16).slice(1);if(t.indexOf(\"hs\")>-1){var i=C(e.slice(1,3),function(e){return e+\"%\"});e[1]=i[0],e[2]=i[1]}return t.indexOf(\"a\")>-1?(3===e.length&&e.push(1),e[3]=S(e[3],[0,1]),t+\"(\"+e.slice(0,4).join(\",\")+\")\"):t+\"(\"+e.slice(0,3).join(\",\")+\")\"}}function U(e){e=L(e),e.indexOf(\"rgba\")<0&&(e=p(e));var t=[],i=0;return e.replace(/[\\d.]+/g,function(e){e=3>i?0|e:+e,t[i++]=e}),t}function d(e,t){if(!E(e))return e;var i=I(e),n=i[3];return\"undefined\"==typeof n&&(n=1),e.indexOf(\"hsb\")>-1?i=F(i):e.indexOf(\"hsl\")>-1&&(i=T(i)),t.indexOf(\"hsb\")>-1||t.indexOf(\"hsv\")>-1?i=A(i):t.indexOf(\"hsl\")>-1&&(i=M(i)),i[3]=n,V(i,t)}function p(e){return d(e,\"rgba\")}function c(e){return d(e,\"rgb\")}function u(e){return d(e,\"hex\")}function y(e){return d(e,\"hsva\")}function g(e){return d(e,\"hsv\")}function b(e){return d(e,\"hsba\")}function f(e){return d(e,\"hsb\")}function k(e){return d(e,\"hsla\")}function x(e){return d(e,\"hsl\")}function _(e){for(var t in G)if(u(G[t])===u(e))return t;return null}function L(e){return String(e).replace(/\\s+/g,\"\")}function W(e){if(G[e]&&(e=G[e]),e=L(e),e=e.replace(/hsv/i,\"hsb\"),/^#[\\da-f]{3}$/i.test(e)){e=parseInt(e.slice(1),16);var t=(3840&e)<<8,i=(240&e)<<4,n=15&e;e=\"#\"+((1<<24)+(t<<4)+t+(i<<4)+i+(n<<4)+n).toString(16).slice(1)}return e}function X(e,t){if(!E(e))return e;var i=t>0?1:-1;\"undefined\"==typeof t&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=c(e);for(var n=I(e),a=0;3>a;a++)n[a]=1===i?n[a]*(1-t)|0:(255-n[a])*t+n[a]|0;return\"rgb(\"+n.join(\",\")+\")\"}function v(e){if(!E(e))return e;var t=I(p(e));return t=C(t,function(e){return 255-e}),V(t,\"rgb\")}function w(e,t,i){if(!E(e)||!E(t))return e;\"undefined\"==typeof i&&(i=.5),i=1-S(i,[0,1]);for(var n=2*i-1,a=I(p(e)),o=I(p(t)),r=a[3]-o[3],s=((n*r===-1?n:(n+r)/(1+n*r))+1)/2,l=1-s,h=[],m=0;3>m;m++)h[m]=a[m]*s+o[m]*l;var U=a[3]*i+o[3]*(1-i);return U=Math.max(0,Math.min(1,U)),1===a[3]&&1===o[3]?V(h,\"rgb\"):(h[3]=U,V(h,\"rgba\"))}function K(){return\"#\"+(Math.random().toString(16)+\"0000\").slice(2,8)}function I(e){e=W(e);var t=e.match(R);if(null===t)throw new Error(\"The color format error\");var i,n,a,o=[];if(t[2])i=t[2].replace(\"#\",\"\").split(\"\"),a=[i[0]+i[1],i[2]+i[3],i[4]+i[5]],o=C(a,function(e){return S(parseInt(e,16),[0,255])});else if(t[4]){var r=t[4].split(\",\");n=r[3],a=r.slice(0,3),o=C(a,function(e){return e=Math.floor(e.indexOf(\"%\")>0?2.55*parseInt(e,0):e),S(e,[0,255])}),\"undefined\"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}else if(t[5]||t[6]){var s=(t[5]||t[6]).split(\",\"),l=parseInt(s[0],0)/360,h=s[1],m=s[2];n=s[3],o=C([h,m],function(e){return S(parseFloat(e)/100,[0,1])}),o.unshift(l),\"undefined\"!=typeof n&&o.push(S(parseFloat(n),[0,1]))}return o}function J(e,t){if(!E(e))return e;null===t&&(t=1);var i=I(p(e));return i[3]=S(Number(t).toFixed(4),[0,1]),V(i,\"rgba\")}function C(e,t){if(\"function\"!=typeof t)throw new TypeError;for(var i=e?e.length:0,n=0;i>n;n++)e[n]=t(e[n]);return e}function S(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function E(e){return e instanceof Array||\"string\"==typeof e}function F(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s=6*a;6===s&&(s=0);var l=0|s,h=r*(1-o),m=r*(1-o*(s-l)),V=r*(1-o*(1-(s-l))),U=0,d=0,p=0;0===l?(U=r,d=V,p=h):1===l?(U=m,d=r,p=h):2===l?(U=h,d=r,p=V):3===l?(U=h,d=m,p=r):4===l?(U=V,d=h,p=r):(U=r,d=h,p=m),t=255*U,i=255*d,n=255*p}return[t,i,n]}function T(e){var t,i,n,a=e[0],o=e[1],r=e[2];if(0===o)t=255*r,i=255*r,n=255*r;else{var s;s=.5>r?r*(1+o):r+o-o*r;var l=2*r-s;t=255*z(l,s,a+1/3),i=255*z(l,s,a),n=255*z(l,s,a-1/3)}return[t,i,n]}function z(e,t,i){return 0>i&&(i+=1),i>1&&(i-=1),1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function A(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=s;if(0===l)t=0,i=0;else{i=l/s;var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}function M(e){var t,i,n=e[0]/255,a=e[1]/255,o=e[2]/255,r=Math.min(n,a,o),s=Math.max(n,a,o),l=s-r,h=(s+r)/2;if(0===l)t=0,i=0;else{i=.5>h?l/(s+r):l/(2-s-r);var m=((s-n)/6+l/2)/l,V=((s-a)/6+l/2)/l,U=((s-o)/6+l/2)/l;n===s?t=U-V:a===s?t=1/3+m-U:o===s&&(t=2/3+V-m),0>t&&(t+=1),t>1&&(t-=1)}return t=360*t,i=100*i,h=100*h,[t,i,h]}var O,P=e(\"../tool/util\"),D=[\"#ff9277\",\" #dddd00\",\" #ffc877\",\" #bbe3ff\",\" #d5ffbb\",\"#bbbbff\",\" #ddb000\",\" #b0dd00\",\" #e2bbff\",\" #ffbbe3\",\"#ff7777\",\" #ff9900\",\" #83dd00\",\" #77e3ff\",\" #778fff\",\"#c877ff\",\" #ff77ab\",\" #ff6600\",\" #aa8800\",\" #77c7ff\",\"#ad77ff\",\" #ff77ff\",\" #dd0083\",\" #777700\",\" #00aa00\",\"#0088aa\",\" #8400dd\",\" #aa0088\",\" #dd0000\",\" #772e00\"],N=D,B=\"rgba(255,255,0,0.5)\",H=B,R=/^\\s*((#[a-f\\d]{6})|(#[a-f\\d]{3})|rgba?\\(\\s*([\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+%?)?)\\s*\\)|hsba?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+)?)%?\\s*\\)|hsla?\\(\\s*([\\d\\.]+(?:deg|\\xb0|%)?\\s*,\\s*[\\d\\.]+%?\\s*,\\s*[\\d\\.]+%?(?:\\s*,\\s*[\\d\\.]+)?)%?\\s*\\))\\s*$/i,G={aliceblue:\"#f0f8ff\",antiquewhite:\"#faebd7\",aqua:\"#0ff\",aquamarine:\"#7fffd4\",azure:\"#f0ffff\",beige:\"#f5f5dc\",bisque:\"#ffe4c4\",black:\"#000\",blanchedalmond:\"#ffebcd\",blue:\"#00f\",blueviolet:\"#8a2be2\",brown:\"#a52a2a\",burlywood:\"#deb887\",cadetblue:\"#5f9ea0\",chartreuse:\"#7fff00\",chocolate:\"#d2691e\",coral:\"#ff7f50\",cornflowerblue:\"#6495ed\",cornsilk:\"#fff8dc\",crimson:\"#dc143c\",cyan:\"#0ff\",darkblue:\"#00008b\",darkcyan:\"#008b8b\",darkgoldenrod:\"#b8860b\",darkgray:\"#a9a9a9\",darkgrey:\"#a9a9a9\",darkgreen:\"#006400\",darkkhaki:\"#bdb76b\",darkmagenta:\"#8b008b\",darkolivegreen:\"#556b2f\",darkorange:\"#ff8c00\",darkorchid:\"#9932cc\",darkred:\"#8b0000\",darksalmon:\"#e9967a\",darkseagreen:\"#8fbc8f\",darkslateblue:\"#483d8b\",darkslategray:\"#2f4f4f\",darkslategrey:\"#2f4f4f\",darkturquoise:\"#00ced1\",darkviolet:\"#9400d3\",deeppink:\"#ff1493\",deepskyblue:\"#00bfff\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1e90ff\",firebrick:\"#b22222\",floralwhite:\"#fffaf0\",forestgreen:\"#228b22\",fuchsia:\"#f0f\",gainsboro:\"#dcdcdc\",ghostwhite:\"#f8f8ff\",gold:\"#ffd700\",goldenrod:\"#daa520\",gray:\"#808080\",grey:\"#808080\",green:\"#008000\",greenyellow:\"#adff2f\",honeydew:\"#f0fff0\",hotpink:\"#ff69b4\",indianred:\"#cd5c5c\",indigo:\"#4b0082\",ivory:\"#fffff0\",khaki:\"#f0e68c\",lavender:\"#e6e6fa\",lavenderblush:\"#fff0f5\",lawngreen:\"#7cfc00\",lemonchiffon:\"#fffacd\",lightblue:\"#add8e6\",lightcoral:\"#f08080\",lightcyan:\"#e0ffff\",lightgoldenrodyellow:\"#fafad2\",lightgray:\"#d3d3d3\",lightgrey:\"#d3d3d3\",lightgreen:\"#90ee90\",lightpink:\"#ffb6c1\",lightsalmon:\"#ffa07a\",lightseagreen:\"#20b2aa\",lightskyblue:\"#87cefa\",lightslategray:\"#789\",lightslategrey:\"#789\",lightsteelblue:\"#b0c4de\",lightyellow:\"#ffffe0\",lime:\"#0f0\",limegreen:\"#32cd32\",linen:\"#faf0e6\",magenta:\"#f0f\",maroon:\"#800000\",mediumaquamarine:\"#66cdaa\",mediumblue:\"#0000cd\",mediumorchid:\"#ba55d3\",mediumpurple:\"#9370d8\",mediumseagreen:\"#3cb371\",mediumslateblue:\"#7b68ee\",mediumspringgreen:\"#00fa9a\",mediumturquoise:\"#48d1cc\",mediumvioletred:\"#c71585\",midnightblue:\"#191970\",mintcream:\"#f5fffa\",mistyrose:\"#ffe4e1\",moccasin:\"#ffe4b5\",navajowhite:\"#ffdead\",navy:\"#000080\",oldlace:\"#fdf5e6\",olive:\"#808000\",olivedrab:\"#6b8e23\",orange:\"#ffa500\",orangered:\"#ff4500\",orchid:\"#da70d6\",palegoldenrod:\"#eee8aa\",palegreen:\"#98fb98\",paleturquoise:\"#afeeee\",palevioletred:\"#d87093\",papayawhip:\"#ffefd5\",peachpuff:\"#ffdab9\",peru:\"#cd853f\",pink:\"#ffc0cb\",plum:\"#dda0dd\",powderblue:\"#b0e0e6\",purple:\"#800080\",red:\"#f00\",rosybrown:\"#bc8f8f\",royalblue:\"#4169e1\",saddlebrown:\"#8b4513\",salmon:\"#fa8072\",sandybrown:\"#f4a460\",seagreen:\"#2e8b57\",seashell:\"#fff5ee\",sienna:\"#a0522d\",silver:\"#c0c0c0\",skyblue:\"#87ceeb\",slateblue:\"#6a5acd\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#fffafa\",springgreen:\"#00ff7f\",steelblue:\"#4682b4\",tan:\"#d2b48c\",teal:\"#008080\",thistle:\"#d8bfd8\",tomato:\"#ff6347\",turquoise:\"#40e0d0\",violet:\"#ee82ee\",wheat:\"#f5deb3\",white:\"#fff\",whitesmoke:\"#f5f5f5\",yellow:\"#ff0\",yellowgreen:\"#9acd32\"};return{customPalette:t,resetPalette:i,getColor:n,getHighlightColor:r,customHighlight:a,resetHighlight:o,getRadialGradient:s,getLinearGradient:l,getGradientColors:m,getStepColors:h,reverse:v,mix:w,lift:X,trim:L,random:K,toRGB:c,toRGBA:p,toHex:u,toHSL:x,toHSLA:k,toHSB:f,toHSBA:b,toHSV:g,toHSVA:y,toName:_,toColor:V,toArray:U,alpha:J,getData:I}}),i(\"echarts/component/timeline\",[\"require\",\"./base\",\"zrender/shape/Rectangle\",\"../util/shape/Icon\",\"../util/shape/Chain\",\"../config\",\"zrender/tool/util\",\"zrender/tool/area\",\"zrender/tool/event\",\"../component\"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o);var r=this;if(r._onclick=function(e){return r.__onclick(e)},r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},r._setCurrentOption=function(){var e=r.timelineOption;r.currentIndex%=e.data.length;var t=r.options[r.currentIndex]||{};r.myChart._setOption(t,e.notMerge,!0),r.messageCenter.dispatch(s.EVENT.TIMELINE_CHANGED,null,{currentIndex:r.currentIndex,data:null!=e.data[r.currentIndex].name?e.data[r.currentIndex].name:e.data[r.currentIndex]},r.myChart)},r._onFrame=function(){r._setCurrentOption(),r._syncHandleShape(),r.timelineOption.autoPlay&&(r.playTicket=setTimeout(function(){return r.currentIndex+=1,!r.timelineOption.loop&&r.currentIndex>=r.timelineOption.data.length?(r.currentIndex=r.timelineOption.data.length-1,void r.stop()):void r._onFrame()},r.timelineOption.playInterval))},this.setTheme(!1),this.options=this.option.options,this.currentIndex=this.timelineOption.currentIndex%this.timelineOption.data.length,this.timelineOption.notMerge||0===this.currentIndex||(this.options[this.currentIndex]=l.merge(this.options[this.currentIndex],this.options[0])),this.timelineOption.show&&(this._buildShape(),this._syncHandleShape()),this._setCurrentOption(),this.timelineOption.autoPlay){var r=this;this.playTicket=setTimeout(function(){r.play()},null!=this.ecTheme.animationDuration?this.ecTheme.animationDuration:s.animationDuration)}}function i(e,t){var i=2,n=t.x+i,a=t.y+i+2,r=t.width-i,s=t.height-i,l=t.symbol;if(\"last\"===l)e.moveTo(n+r-2,a+s/3),e.lineTo(n+r-2,a),e.lineTo(n+2,a+s/2),e.lineTo(n+r-2,a+s),e.lineTo(n+r-2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if(\"next\"===l)e.moveTo(n+2,a+s/3),e.lineTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a+s/3*2),e.moveTo(n,a),e.lineTo(n,a);else if(\"play\"===l)if(\"stop\"===t.status)e.moveTo(n+2,a),e.lineTo(n+r-2,a+s/2),e.lineTo(n+2,a+s),e.lineTo(n+2,a);else{var h=\"both\"===t.brushType?2:3;e.rect(n+2,a,h,s),e.rect(n+r-h-2,a,h,s)}else if(l.match(\"image\")){var m=\"\";m=l.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),l=o.prototype.iconLibrary.image,l(e,{x:n,y:a,width:r,height:s,image:m})}}var n=e(\"./base\"),a=e(\"zrender/shape/Rectangle\"),o=e(\"../util/shape/Icon\"),r=e(\"../util/shape/Chain\"),s=e(\"../config\");s.timeline={zlevel:0,z:4,show:!0,type:\"time\",notMerge:!1,realtime:!0,x:80,x2:80,y2:0,height:50,backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,controlPosition:\"left\",autoPlay:!1,loop:!0,playInterval:2e3,lineStyle:{width:1,color:\"#666\",type:\"dashed\"},label:{show:!0,interval:\"auto\",rotate:0,textStyle:{color:\"#333\"}},checkpointStyle:{symbol:\"auto\",symbolSize:\"auto\",color:\"auto\",borderColor:\"auto\",borderWidth:\"auto\",label:{show:!1,textStyle:{color:\"auto\"}}},controlStyle:{itemSize:15,itemGap:5,normal:{color:\"#333\"},emphasis:{color:\"#1e90ff\"}},symbol:\"emptyDiamond\",symbolSize:4,currentIndex:0};var l=e(\"zrender/tool/util\"),h=e(\"zrender/tool/area\"),m=e(\"zrender/tool/event\");return t.prototype={type:s.COMPONENT_TYPE_TIMELINE,_buildShape:function(){if(this._location=this._getLocation(),this._buildBackground(),this._buildControl(),this._chainPoint=this._getChainPoint(),this.timelineOption.label.show)for(var e=this._getInterval(),t=0,i=this._chainPoint.length;i>t;t+=e)this._chainPoint[t].showLabel=!0;this._buildChain(),this._buildHandle();for(var t=0,n=this.shapeList.length;n>t;t++)this.zr.addShape(this.shapeList[t])},_getLocation:function(){var e,t=this.timelineOption,i=this.reformCssArray(this.timelineOption.padding),n=this.zr.getWidth(),a=this.parsePercent(t.x,n),o=this.parsePercent(t.x2,n);null==t.width?(e=n-a-o,o=n-o):(e=this.parsePercent(t.width,n),o=a+e);var r,s,l=this.zr.getHeight(),h=this.parsePercent(t.height,l);return null!=t.y?(r=this.parsePercent(t.y,l),s=r+h):(s=l-this.parsePercent(t.y2,l),r=s-h),{x:a+i[3],y:r+i[0],x2:o-i[1],y2:s-i[2],width:e-i[1]-i[3],height:h-i[0]-i[2]}},_getReformedLabel:function(e){var t=this.timelineOption,i=null!=t.data[e].name?t.data[e].name:t.data[e],n=t.data[e].formatter||t.label.formatter;return n&&(\"function\"==typeof n?i=n.call(this.myChart,i):\"string\"==typeof n&&(i=n.replace(\"{value}\",i))),i},_getInterval:function(){var e=this._chainPoint,t=this.timelineOption,i=t.label.interval;if(\"auto\"===i){var n=t.label.textStyle.fontSize,a=t.data,o=t.data.length;if(o>3){var r,s,l=!1;for(i=0;!l&&o>i;){i++,l=!0;for(var m=i;o>m;m+=i){if(r=e[m].x-e[m-i].x,0!==t.label.rotate)s=n;else if(a[m].textStyle)s=h.getTextWidth(e[m].name,e[m].textFont);else{var V=e[m].name+\"\",U=(V.match(/\\w/g)||\"\").length,d=V.length-U;s=U*n*2/3+d*n}if(s>r){l=!1;break}}}}else i=1}else i=i-0+1;return i},_getChainPoint:function(){function e(e){return null!=h[e].name?h[e].name:h[e]+\"\"}var t,i=this.timelineOption,n=i.symbol.toLowerCase(),a=i.symbolSize,o=i.label.rotate,r=i.label.textStyle,s=this.getFont(r),h=i.data,m=this._location.x,V=this._location.y+this._location.height/4*3,U=this._location.x2-this._location.x,d=h.length,p=[];if(d>1){var c=U/d;if(c=c>50?50:20>c?5:c,U-=2*c,\"number\"===i.type)for(var u=0;d>u;u++)p.push(m+c+U/(d-1)*u);else{p[0]=new Date(e(0).replace(/-/g,\"/\")),p[d-1]=new Date(e(d-1).replace(/-/g,\"/\"))-p[0];for(var u=1;d>u;u++)p[u]=m+c+U*(new Date(e(u).replace(/-/g,\"/\"))-p[0])/p[d-1];p[0]=m+c}}else p.push(m+U/2);for(var y,g,b,f,k,x=[],u=0;d>u;u++)m=p[u],y=h[u].symbol&&h[u].symbol.toLowerCase()||n,y.match(\"empty\")?(y=y.replace(\"empty\",\"\"),b=!0):b=!1,y.match(\"star\")&&(g=y.replace(\"star\",\"\")-0||5,y=\"star\"),t=h[u].textStyle?l.merge(h[u].textStyle||{},r):r,f=t.align||\"center\",o?(f=o>0?\"right\":\"left\",k=[o*Math.PI/180,m,V-5]):k=!1,x.push({x:m,n:g,isEmpty:b,symbol:y,symbolSize:h[u].symbolSize||a,color:h[u].color,borderColor:h[u].borderColor,borderWidth:h[u].borderWidth,name:this._getReformedLabel(u),textColor:t.color,textAlign:f,textBaseline:t.baseline||\"middle\",textX:m,textY:V-(o?5:0),textFont:h[u].textStyle?this.getFont(t):s,rotation:k,showLabel:!1});return x},_buildBackground:function(){var e=this.timelineOption,t=this.reformCssArray(this.timelineOption.padding),i=this._location.width,n=this._location.height;(0!==e.borderWidth||\"rgba(0,0,0,0)\"!=e.backgroundColor.replace(/\\s/g,\"\"))&&this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x-t[3],y:this._location.y-t[0],width:i+t[1]+t[3],height:n+t[0]+t[2],brushType:0===e.borderWidth?\"fill\":\"both\",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}}))},_buildControl:function(){var e=this,t=this.timelineOption,i=t.lineStyle,n=t.controlStyle;if(\"none\"!==t.controlPosition){var a,r=n.itemSize,s=n.itemGap;\"left\"===t.controlPosition?(a=this._location.x,this._location.x+=3*(r+s)):(a=this._location.x2-(3*(r+s)-s),this._location.x2-=3*(r+s));var h=this._location.y,m={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{iconType:\"timelineControl\",symbol:\"last\",x:a,y:h,width:r,height:r,brushType:\"stroke\",color:n.normal.color,strokeColor:n.normal.color,lineWidth:i.width},highlightStyle:{color:n.emphasis.color,strokeColor:n.emphasis.color,lineWidth:i.width+1},clickable:!0};this._ctrLastShape=new o(m),this._ctrLastShape.onclick=function(){e.last()},this.shapeList.push(this._ctrLastShape),a+=r+s,this._ctrPlayShape=new o(l.clone(m)),this._ctrPlayShape.style.brushType=\"fill\",this._ctrPlayShape.style.symbol=\"play\",this._ctrPlayShape.style.status=this.timelineOption.autoPlay?\"playing\":\"stop\",this._ctrPlayShape.style.x=a,this._ctrPlayShape.onclick=function(){\"stop\"===e._ctrPlayShape.style.status?e.play():e.stop()},this.shapeList.push(this._ctrPlayShape),a+=r+s,this._ctrNextShape=new o(l.clone(m)),this._ctrNextShape.style.symbol=\"next\",this._ctrNextShape.style.x=a,this._ctrNextShape.onclick=function(){e.next()},this.shapeList.push(this._ctrNextShape)}},_buildChain:function(){var e=this.timelineOption,t=e.lineStyle;this._timelineShae={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:this._location.x,y:this.subPixelOptimize(this._location.y,t.width),width:this._location.x2-this._location.x,height:this._location.height,chainPoint:this._chainPoint,brushType:\"both\",strokeColor:t.color,lineWidth:t.width,lineType:t.type},hoverable:!1,clickable:!0,onclick:this._onclick},this._timelineShae=new r(this._timelineShae),this.shapeList.push(this._timelineShae)},_buildHandle:function(){var e=this._chainPoint[this.currentIndex],t=e.symbolSize+1;t=5>t?5:t,this._handleShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,hoverable:!1,draggable:!0,style:{iconType:\"diamond\",n:e.n,x:e.x-t,y:this._location.y+this._location.height/4-t,width:2*t,height:2*t,brushType:\"both\",textPosition:\"specific\",textX:e.x,textY:this._location.y-this._location.height/4,textAlign:\"center\",textBaseline:\"middle\"},highlightStyle:{},ondrift:this._ondrift,ondragend:this._ondragend},this._handleShape=new o(this._handleShape),this.shapeList.push(this._handleShape)},_syncHandleShape:function(){if(this.timelineOption.show){var e=this.timelineOption,t=e.checkpointStyle,i=this._chainPoint[this.currentIndex];this._handleShape.style.text=t.label.show?i.name:\"\",this._handleShape.style.textFont=i.textFont,this._handleShape.style.n=i.n,\"auto\"===t.symbol?this._handleShape.style.iconType=\"none\"!=i.symbol?i.symbol:\"diamond\":(this._handleShape.style.iconType=t.symbol,t.symbol.match(\"star\")&&(this._handleShape.style.n=t.symbol.replace(\"star\",\"\")-0||5,this._handleShape.style.iconType=\"star\"));var n;\"auto\"===t.symbolSize?(n=i.symbolSize+2,n=5>n?5:n):n=t.symbolSize-0,this._handleShape.style.color=\"auto\"===t.color?i.color?i.color:e.controlStyle.emphasis.color:t.color,this._handleShape.style.textColor=\"auto\"===t.label.textStyle.color?this._handleShape.style.color:t.label.textStyle.color,this._handleShape.highlightStyle.strokeColor=this._handleShape.style.strokeColor=\"auto\"===t.borderColor?i.borderColor?i.borderColor:\"#fff\":t.borderColor,this._handleShape.style.lineWidth=\"auto\"===t.borderWidth?i.borderWidth?i.borderWidth:0:t.borderWidth-0,this._handleShape.highlightStyle.lineWidth=this._handleShape.style.lineWidth+1,this.zr.animate(this._handleShape.id,\"style\").when(500,{x:i.x-n,textX:i.x,y:this._location.y+this._location.height/4-n,width:2*n,height:2*n}).start(\"ExponentialOut\")}},_findChainIndex:function(e){var t=this._chainPoint,i=t.length;if(e<=t[0].x)return 0;if(e>=t[i-1].x)return i-1;for(var n=0;i-1>n;n++)if(e>=t[n].x&&e<=t[n+1].x)return Math.abs(e-t[n].x)<Math.abs(e-t[n+1].x)?n:n+1},__onclick:function(e){var t=m.getX(e.event),i=this._findChainIndex(t);return i===this.currentIndex?!0:(this.currentIndex=i,this.timelineOption.autoPlay&&this.stop(),clearTimeout(this.playTicket),void this._onFrame())},__ondrift:function(e,t){this.timelineOption.autoPlay&&this.stop();var i,n=this._chainPoint,a=n.length;e.style.x+t<=n[0].x-n[0].symbolSize?(e.style.x=n[0].x-n[0].symbolSize,i=0):e.style.x+t>=n[a-1].x-n[a-1].symbolSize?(e.style.x=n[a-1].x-n[a-1].symbolSize,i=a-1):(e.style.x+=t,i=this._findChainIndex(e.style.x));var o=n[i],r=o.symbolSize+2;if(e.style.iconType=o.symbol,e.style.n=o.n,e.style.textX=e.style.x+r/2,e.style.y=this._location.y+this._location.height/4-r,e.style.width=2*r,e.style.height=2*r,e.style.text=o.name,i===this.currentIndex)return!0;if(this.currentIndex=i,this.timelineOption.realtime){clearTimeout(this.playTicket);var s=this;this.playTicket=setTimeout(function(){s._setCurrentOption()},200)}return!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.timelineOption.realtime&&this._setCurrentOption(),t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this._syncHandleShape())},last:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex-=1,this.currentIndex<0&&(this.currentIndex=this.timelineOption.data.length-1),this._onFrame(),this.currentIndex},next:function(){return this.timelineOption.autoPlay&&this.stop(),this.currentIndex+=1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},play:function(e,t){return this._ctrPlayShape&&\"playing\"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status=\"playing\",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=null!=t?t:!0,this.timelineOption.autoPlay||clearTimeout(this.playTicket),this.currentIndex=null!=e?e:this.currentIndex+1,this.currentIndex>=this.timelineOption.data.length&&(this.currentIndex=0),this._onFrame(),this.currentIndex},stop:function(){return this._ctrPlayShape&&\"stop\"!=this._ctrPlayShape.style.status&&(this._ctrPlayShape.style.status=\"stop\",this.zr.modShape(this._ctrPlayShape.id),this.zr.refreshNextFrame()),this.timelineOption.autoPlay=!1,clearTimeout(this.playTicket),this.currentIndex},resize:function(){this.timelineOption.show&&(this.clear(),this._buildShape(),this._syncHandleShape())},setTheme:function(e){this.timelineOption=this.reformOption(l.clone(this.option.timeline)),this.timelineOption.label.textStyle=this.getTextStyle(this.timelineOption.label.textStyle),this.timelineOption.checkpointStyle.label.textStyle=this.getTextStyle(this.timelineOption.checkpointStyle.label.textStyle),this.myChart.canvasSupported||(this.timelineOption.realtime=!1),this.timelineOption.show&&e&&(this.clear(),this._buildShape(),this._syncHandleShape())},onbeforDispose:function(){clearTimeout(this.playTicket)}},o.prototype.iconLibrary.timelineControl=i,l.inherits(t,n),e(\"../component\").define(\"timeline\",t),t}),i(\"zrender/shape/Image\",[\"require\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={type:\"image\",brush:function(e,t,i){var n=this.style||{};t&&(n=this.getHighlightStyle(n,this.highlightStyle||{}));var a=n.image,o=this;if(this._imageCache||(this._imageCache={}),\"string\"==typeof a){var r=a;this._imageCache[r]?a=this._imageCache[r]:(a=new Image,a.onload=function(){a.onload=null,o.modSelf(),i()},a.src=r,this._imageCache[r]=a)}if(a){if(\"IMG\"==a.nodeName.toUpperCase())if(window.ActiveXObject){if(\"complete\"!=a.readyState)return}else if(!a.complete)return;var s=n.width||a.width,l=n.height||a.height,h=n.x,m=n.y;if(!a.width||!a.height)return;if(e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.sWidth&&n.sHeight){var V=n.sx||0,U=n.sy||0;e.drawImage(a,V,U,n.sWidth,n.sHeight,h,m,s,l)}else if(n.sx&&n.sy){var V=n.sx,U=n.sy,d=s-V,p=l-U;e.drawImage(a,V,U,d,p,h,m,s,l)}else e.drawImage(a,h,m,s,l);n.width||(n.width=s),n.height||(n.height=l),this.style.width||(this.style.width=s),this.style.height||(this.style.height=l),this.drawText(e,n,this.style),e.restore()}},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}},clearCache:function(){this._imageCache={}}},e(\"../tool/util\").inherits(i,t),i}),i(\"zrender/loadingEffect/Bar\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../shape/Rectangle\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../shape/Rectangle\");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:\"#888\"},backgroundColor:\"rgba(250, 250, 250, 0.8)\",effectOption:{x:0,y:this.canvasHeight/2-30,width:this.canvasWidth,height:5,brushType:\"fill\",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=new o({highlightStyle:n.clone(l)});return h.highlightStyle.color=l.color||a.getLinearGradient(l.x,l.y,l.x+l.width,l.y+l.height,[[0,\"#ff6400\"],[.5,\"#ffe100\"],[1,\"#b1ff00\"]]),null!=i.progress?(e(s),h.highlightStyle.width=this.adjust(i.progress,[0,1])*i.effectOption.width,e(h),e(r),void t()):(h.highlightStyle.width=0,setInterval(function(){e(s),h.highlightStyle.width<l.width?h.highlightStyle.width+=8:h.highlightStyle.width=0,e(h),e(r),t()},l.timeInterval))},t}),i(\"zrender/loadingEffect/Bubble\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../shape/Circle\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../shape/Circle\");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:\"#888\"},backgroundColor:\"rgba(250, 250, 250, 0.8)\",effect:{n:50,lineWidth:2,brushType:\"stroke\",color:\"random\",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effect,h=l.n,m=l.brushType,V=l.lineWidth,U=[],d=this.canvasWidth,p=this.canvasHeight,c=0;h>c;c++){var u=\"random\"==l.color?a.alpha(a.random(),.3):l.color;U[c]=new o({highlightStyle:{x:Math.ceil(Math.random()*d),y:Math.ceil(Math.random()*p),r:Math.ceil(40*Math.random()),brushType:m,color:u,strokeColor:u,lineWidth:V},animationY:Math.ceil(20*Math.random())})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=U[i].highlightStyle;n.y-U[i].animationY+n.r<=0&&(U[i].highlightStyle.y=p+n.r,U[i].highlightStyle.x=Math.ceil(Math.random()*d)),U[i].highlightStyle.y-=U[i].animationY,e(U[i])}e(r),t()},l.timeInterval)},t}),i(\"zrender/loadingEffect/DynamicLine\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../shape/Line\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../shape/Line\");return n.inherits(t,i),t.prototype._start=function(e,t){for(var i=n.merge(this.options,{textStyle:{color:\"#fff\"},backgroundColor:\"rgba(0, 0, 0, 0.8)\",effectOption:{n:30,lineWidth:1,color:\"random\",timeInterval:100}}),r=this.createTextShape(i.textStyle),s=this.createBackgroundShape(i.backgroundColor),l=i.effectOption,h=l.n,m=l.lineWidth,V=[],U=this.canvasWidth,d=this.canvasHeight,p=0;h>p;p++){var c=-Math.ceil(1e3*Math.random()),u=Math.ceil(400*Math.random()),y=Math.ceil(Math.random()*d),g=\"random\"==l.color?a.random():l.color;V[p]=new o({highlightStyle:{xStart:c,yStart:y,xEnd:c+u,yEnd:y,strokeColor:g,lineWidth:m},animationX:Math.ceil(100*Math.random()),len:u})}return setInterval(function(){e(s);for(var i=0;h>i;i++){var n=V[i].highlightStyle;n.xStart>=U&&(V[i].len=Math.ceil(400*Math.random()),n.xStart=-400,n.xEnd=-400+V[i].len,n.yStart=Math.ceil(Math.random()*d),n.yEnd=n.yStart),n.xStart+=V[i].animationX,n.xEnd+=V[i].animationX,e(V[i])}e(r),t()},l.timeInterval)},t}),i(\"zrender/loadingEffect/Ring\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../shape/Ring\",\"../shape/Sector\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../shape/Ring\"),r=e(\"../shape/Sector\");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:\"#07a\"},backgroundColor:\"rgba(250, 250, 250, 0.8)\",effect:{x:this.canvasWidth/2,y:this.canvasHeight/2,r0:60,r:100,color:\"#bbdcff\",brushType:\"fill\",textPosition:\"inside\",textFont:\"normal 30px verdana\",textColor:\"rgba(30, 144, 255, 0.6)\",timeInterval:100}}),s=i.effect,l=i.textStyle;\n\nnull==l.x&&(l.x=s.x),null==l.y&&(l.y=s.y+(s.r0+s.r)/2-5);for(var h=this.createTextShape(i.textStyle),m=this.createBackgroundShape(i.backgroundColor),V=s.x,U=s.y,d=s.r0+6,p=s.r-6,c=s.color,u=a.lift(c,.1),y=new o({highlightStyle:n.clone(s)}),g=[],b=a.getGradientColors([\"#ff6400\",\"#ffe100\",\"#97ff00\"],25),f=15,k=240,x=0;16>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:\"fill\",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x]],[1,b[2*x+1]]])})),k-=f;k=360;for(var x=0;4>x;x++)g.push(new r({highlightStyle:{x:V,y:U,r0:d,r:p,startAngle:k-f,endAngle:k,brushType:\"fill\",color:u},_color:a.getLinearGradient(V+d*Math.cos(k,!0),U-d*Math.sin(k,!0),V+d*Math.cos(k-f,!0),U-d*Math.sin(k-f,!0),[[0,b[2*x+32]],[1,b[2*x+33]]])})),k-=f;var _=0;if(null!=i.progress){e(m),_=100*this.adjust(i.progress,[0,1]).toFixed(2)/5,y.highlightStyle.text=5*_+\"%\",e(y);for(var x=0;20>x;x++)g[x].highlightStyle.color=_>x?g[x]._color:u,e(g[x]);return e(h),void t()}return setInterval(function(){e(m),_+=_>=20?-20:1,e(y);for(var i=0;20>i;i++)g[i].highlightStyle.color=_>i?g[i]._color:u,e(g[i]);e(h),t()},s.timeInterval)},t}),i(\"zrender/loadingEffect/Spin\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/color\",\"../tool/area\",\"../shape/Sector\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/color\"),o=e(\"../tool/area\"),r=e(\"../shape/Sector\");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:\"#fff\",textAlign:\"start\"},backgroundColor:\"rgba(0, 0, 0, 0.8)\"}),s=this.createTextShape(i.textStyle),l=10,h=o.getTextWidth(s.highlightStyle.text,s.highlightStyle.textFont),m=o.getTextHeight(s.highlightStyle.text,s.highlightStyle.textFont),V=n.merge(this.options.effect||{},{r0:9,r:15,n:18,color:\"#fff\",timeInterval:100}),U=this.getLocation(this.options.textStyle,h+l+2*V.r,Math.max(2*V.r,m));V.x=U.x+V.r,V.y=s.highlightStyle.y=U.y+U.height/2,s.highlightStyle.x=V.x+V.r+l;for(var d=this.createBackgroundShape(i.backgroundColor),p=V.n,c=V.x,u=V.y,y=V.r0,g=V.r,b=V.color,f=[],k=Math.round(180/p),x=0;p>x;x++)f[x]=new r({highlightStyle:{x:c,y:u,r0:y,r:g,startAngle:k*x*2,endAngle:k*x*2+k,color:a.alpha(b,(x+1)/p),brushType:\"fill\"}});var _=[0,c,u];return setInterval(function(){e(d),_[0]-=.3;for(var i=0;p>i;i++)f[i].rotation=_,e(f[i]);e(s),t()},V.timeInterval)},t}),i(\"zrender/loadingEffect/Whirling\",[\"require\",\"./Base\",\"../tool/util\",\"../tool/area\",\"../shape/Ring\",\"../shape/Droplet\",\"../shape/Circle\"],function(e){function t(e){i.call(this,e)}var i=e(\"./Base\"),n=e(\"../tool/util\"),a=e(\"../tool/area\"),o=e(\"../shape/Ring\"),r=e(\"../shape/Droplet\"),s=e(\"../shape/Circle\");return n.inherits(t,i),t.prototype._start=function(e,t){var i=n.merge(this.options,{textStyle:{color:\"#888\",textAlign:\"start\"},backgroundColor:\"rgba(250, 250, 250, 0.8)\"}),l=this.createTextShape(i.textStyle),h=10,m=a.getTextWidth(l.highlightStyle.text,l.highlightStyle.textFont),V=a.getTextHeight(l.highlightStyle.text,l.highlightStyle.textFont),U=n.merge(this.options.effect||{},{r:18,colorIn:\"#fff\",colorOut:\"#555\",colorWhirl:\"#6cf\",timeInterval:50}),d=this.getLocation(this.options.textStyle,m+h+2*U.r,Math.max(2*U.r,V));U.x=d.x+U.r,U.y=l.highlightStyle.y=d.y+d.height/2,l.highlightStyle.x=U.x+U.r+h;var p=this.createBackgroundShape(i.backgroundColor),c=new r({highlightStyle:{a:Math.round(U.r/2),b:Math.round(U.r-U.r/6),brushType:\"fill\",color:U.colorWhirl}}),u=new s({highlightStyle:{r:Math.round(U.r/6),brushType:\"fill\",color:U.colorIn}}),y=new o({highlightStyle:{r0:Math.round(U.r-U.r/3),r:U.r,brushType:\"fill\",color:U.colorOut}}),g=[0,U.x,U.y];return c.highlightStyle.x=u.highlightStyle.x=y.highlightStyle.x=g[1],c.highlightStyle.y=u.highlightStyle.y=y.highlightStyle.y=g[2],setInterval(function(){e(p),e(y),g[0]-=.3,c.rotation=g,e(c),e(u),e(l),t()},U.timeInterval)},t}),i(\"echarts/theme/macarons\",[],function(){var e={color:[\"#2ec7c9\",\"#b6a2de\",\"#5ab1ef\",\"#ffb980\",\"#d87a80\",\"#8d98b3\",\"#e5cf0d\",\"#97b552\",\"#95706d\",\"#dc69aa\",\"#07a2a4\",\"#9a7fd1\",\"#588dd5\",\"#f5994e\",\"#c05050\",\"#59678c\",\"#c9ab00\",\"#7eb00a\",\"#6f5553\",\"#c14089\"],title:{textStyle:{fontWeight:\"normal\",color:\"#008acd\"}},dataRange:{itemWidth:15,color:[\"#5ab1ef\",\"#e0ffff\"]},toolbox:{color:[\"#1e90ff\",\"#1e90ff\",\"#1e90ff\",\"#1e90ff\"],effectiveColor:\"#ff4500\"},tooltip:{backgroundColor:\"rgba(50,50,50,0.5)\",axisPointer:{type:\"line\",lineStyle:{color:\"#008acd\"},crossStyle:{color:\"#008acd\"},shadowStyle:{color:\"rgba(200,200,200,0.2)\"}}},dataZoom:{dataBackgroundColor:\"#efefff\",fillerColor:\"rgba(182,162,222,0.2)\",handleColor:\"#008acd\"},grid:{borderColor:\"#eee\"},categoryAxis:{axisLine:{lineStyle:{color:\"#008acd\"}},splitLine:{lineStyle:{color:[\"#eee\"]}}},valueAxis:{axisLine:{lineStyle:{color:\"#008acd\"}},splitArea:{show:!0,areaStyle:{color:[\"rgba(250,250,250,0.1)\",\"rgba(200,200,200,0.1)\"]}},splitLine:{lineStyle:{color:[\"#eee\"]}}},polar:{axisLine:{lineStyle:{color:\"#ddd\"}},splitArea:{show:!0,areaStyle:{color:[\"rgba(250,250,250,0.2)\",\"rgba(200,200,200,0.2)\"]}},splitLine:{lineStyle:{color:\"#ddd\"}}},timeline:{lineStyle:{color:\"#008acd\"},controlStyle:{normal:{color:\"#008acd\"},emphasis:{color:\"#008acd\"}},symbol:\"emptyCircle\",symbolSize:3},bar:{itemStyle:{normal:{barBorderRadius:5},emphasis:{barBorderRadius:5}}},line:{smooth:!0,symbol:\"emptyCircle\",symbolSize:3},k:{itemStyle:{normal:{color:\"#d87a80\",color0:\"#2ec7c9\",lineStyle:{color:\"#d87a80\",color0:\"#2ec7c9\"}}}},scatter:{symbol:\"circle\",symbolSize:4},radar:{symbol:\"emptyCircle\",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:\"#ddd\"},label:{textStyle:{color:\"#d87a80\"}}},emphasis:{areaStyle:{color:\"#fe994e\"}}}},force:{itemStyle:{normal:{linkStyle:{color:\"#1e90ff\"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:\"rgba(128, 128, 128, 0.5)\",chordStyle:{lineStyle:{color:\"rgba(128, 128, 128, 0.5)\"}}},emphasis:{borderWidth:1,borderColor:\"rgba(128, 128, 128, 0.5)\",chordStyle:{lineStyle:{color:\"rgba(128, 128, 128, 0.5)\"}}}}},gauge:{axisLine:{lineStyle:{color:[[.2,\"#2ec7c9\"],[.8,\"#5ab1ef\"],[1,\"#d87a80\"]],width:10}},axisTick:{splitNumber:10,length:15,lineStyle:{color:\"auto\"}},splitLine:{length:22,lineStyle:{color:\"auto\"}},pointer:{width:5}},textStyle:{fontFamily:\"微软雅黑, Arial, Verdana, sans-serif\"}};return e}),i(\"echarts/theme/infographic\",[],function(){var e={color:[\"#C1232B\",\"#B5C334\",\"#FCCE10\",\"#E87C25\",\"#27727B\",\"#FE8463\",\"#9BCA63\",\"#FAD860\",\"#F3A43B\",\"#60C0DD\",\"#D7504B\",\"#C6E579\",\"#F4E001\",\"#F0805A\",\"#26C0C0\"],title:{textStyle:{fontWeight:\"normal\",color:\"#27727B\"}},dataRange:{x:\"right\",y:\"center\",itemWidth:5,itemHeight:25,color:[\"#C1232B\",\"#FCCE10\"]},toolbox:{color:[\"#C1232B\",\"#B5C334\",\"#FCCE10\",\"#E87C25\",\"#27727B\",\"#FE8463\",\"#9BCA63\",\"#FAD860\",\"#F3A43B\",\"#60C0DD\"],effectiveColor:\"#ff4500\"},tooltip:{backgroundColor:\"rgba(50,50,50,0.5)\",axisPointer:{type:\"line\",lineStyle:{color:\"#27727B\",type:\"dashed\"},crossStyle:{color:\"#27727B\"},shadowStyle:{color:\"rgba(200,200,200,0.3)\"}}},dataZoom:{dataBackgroundColor:\"rgba(181,195,52,0.3)\",fillerColor:\"rgba(181,195,52,0.2)\",handleColor:\"#27727B\"},grid:{borderWidth:0},categoryAxis:{axisLine:{lineStyle:{color:\"#27727B\"}},splitLine:{show:!1}},valueAxis:{axisLine:{show:!1},splitArea:{show:!1},splitLine:{lineStyle:{color:[\"#ccc\"],type:\"dashed\"}}},polar:{axisLine:{lineStyle:{color:\"#ddd\"}},splitArea:{show:!0,areaStyle:{color:[\"rgba(250,250,250,0.2)\",\"rgba(200,200,200,0.2)\"]}},splitLine:{lineStyle:{color:\"#ddd\"}}},timeline:{lineStyle:{color:\"#27727B\"},controlStyle:{normal:{color:\"#27727B\"},emphasis:{color:\"#27727B\"}},symbol:\"emptyCircle\",symbolSize:3},line:{itemStyle:{normal:{borderWidth:2,borderColor:\"#fff\",lineStyle:{width:3}},emphasis:{borderWidth:0}},symbol:\"circle\",symbolSize:3.5},k:{itemStyle:{normal:{color:\"#C1232B\",color0:\"#B5C334\",lineStyle:{width:1,color:\"#C1232B\",color0:\"#B5C334\"}}}},scatter:{itemStyle:{normal:{borderWidth:1,borderColor:\"rgba(200,200,200,0.5)\"},emphasis:{borderWidth:0}},symbol:\"star4\",symbolSize:4},radar:{symbol:\"emptyCircle\",symbolSize:3},map:{itemStyle:{normal:{areaStyle:{color:\"#ddd\"},label:{textStyle:{color:\"#C1232B\"}}},emphasis:{areaStyle:{color:\"#fe994e\"},label:{textStyle:{color:\"rgb(100,0,0)\"}}}}},force:{itemStyle:{normal:{linkStyle:{color:\"#27727B\"}}}},chord:{itemStyle:{normal:{borderWidth:1,borderColor:\"rgba(128, 128, 128, 0.5)\",chordStyle:{lineStyle:{color:\"rgba(128, 128, 128, 0.5)\"}}},emphasis:{borderWidth:1,borderColor:\"rgba(128, 128, 128, 0.5)\",chordStyle:{lineStyle:{color:\"rgba(128, 128, 128, 0.5)\"}}}}},gauge:{center:[\"50%\",\"80%\"],radius:\"100%\",startAngle:180,endAngle:0,axisLine:{show:!0,lineStyle:{color:[[.2,\"#B5C334\"],[.8,\"#27727B\"],[1,\"#C1232B\"]],width:\"40%\"}},axisTick:{splitNumber:2,length:5,lineStyle:{color:\"#fff\"}},axisLabel:{textStyle:{color:\"#fff\",fontWeight:\"bolder\"}},splitLine:{length:\"5%\",lineStyle:{color:\"#fff\"}},pointer:{width:\"40%\",length:\"80%\",color:\"#fff\"},title:{offsetCenter:[0,-20],textStyle:{color:\"auto\",fontSize:20}},detail:{offsetCenter:[0,0],textStyle:{color:\"auto\",fontSize:40}}},textStyle:{fontFamily:\"微软雅黑, Arial, Verdana, sans-serif\"}};return e}),i(\"zrender/dep/excanvas\",[\"require\"],function(){return document.createElement(\"canvas\").getContext?G_vmlCanvasManager=!1:!function(){function e(){return this.context_||(this.context_=new f(this))}function t(e,t){var i=O.call(arguments,2);return function(){return e.apply(t,i.concat(O.call(arguments)))}}function i(e){return String(e).replace(/&/g,\"&amp;\").replace(/\"/g,\"&quot;\")}function n(e,t,i){e.namespaces[t]||e.namespaces.add(t,i,\"#default#VML\")}function a(e){if(n(e,\"g_vml_\",\"urn:schemas-microsoft-com:vml\"),n(e,\"g_o_\",\"urn:schemas-microsoft-com:office:office\"),!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id=\"ex_canvas_\",t.cssText=\"canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}\"}}function o(e){var t=e.srcElement;switch(e.propertyName){case\"width\":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+\"px\",t.firstChild.style.width=t.clientWidth+\"px\";break;case\"height\":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+\"px\",t.firstChild.style.height=t.clientHeight+\"px\"}}function r(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+\"px\",t.firstChild.style.height=t.clientHeight+\"px\")}function s(){return[[1,0,0],[0,1,0],[0,0,1]]}function l(e,t){for(var i=s(),n=0;3>n;n++)for(var a=0;3>a;a++){for(var o=0,r=0;3>r;r++)o+=e[n][r]*t[r][a];i[n][a]=o}return i}function h(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.scaleX_=e.scaleX_,t.scaleY_=e.scaleY_,t.lineScale_=e.lineScale_}function m(e){var t=e.indexOf(\"(\",3),i=e.indexOf(\")\",t+1),n=e.substring(t+1,i).split(\",\");return(4!=n.length||\"a\"!=e.charAt(3))&&(n[3]=1),n}function V(e){return parseFloat(e)/100}function U(e,t,i){return Math.min(i,Math.max(t,e))}function d(e){var t,i,n,a,o,r;if(a=parseFloat(e[0])/360%360,0>a&&a++,o=U(V(e[1]),0,1),r=U(V(e[2]),0,1),0==o)t=i=n=r;else{var s=.5>r?r*(1+o):r+o-r*o,l=2*r-s;t=p(l,s,a+1/3),i=p(l,s,a),n=p(l,s,a-1/3)}return\"#\"+D[Math.floor(255*t)]+D[Math.floor(255*i)]+D[Math.floor(255*n)]}function p(e,t,i){return 0>i&&i++,i>1&&i--,1>6*i?e+6*(t-e)*i:1>2*i?t:2>3*i?e+(t-e)*(2/3-i)*6:e}function c(e){if(e in R)return R[e];var t,i=1;if(e=String(e),\"#\"==e.charAt(0))t=e;else if(/^rgb/.test(e)){for(var n,a=m(e),t=\"#\",o=0;3>o;o++)n=-1!=a[o].indexOf(\"%\")?Math.floor(255*V(a[o])):+a[o],t+=D[U(n,0,255)];i=+a[3]}else if(/^hsl/.test(e)){var a=m(e);t=d(a),i=a[3]}else t=H[e]||e;return R[e]={color:t,alpha:i}}function u(e){if(Y[e])return Y[e];var t,i=document.createElement(\"div\"),n=i.style;try{n.font=e,t=n.fontFamily.split(\",\")[0]}catch(a){}return Y[e]={style:n.fontStyle||G.style,variant:n.fontVariant||G.variant,weight:n.fontWeight||G.weight,size:n.fontSize||G.size,family:t||G.family}}function y(e,t){var i={};for(var n in e)i[n]=e[n];var a=parseFloat(t.currentStyle.fontSize),o=parseFloat(e.size);return i.size=\"number\"==typeof e.size?e.size:-1!=e.size.indexOf(\"px\")?o:-1!=e.size.indexOf(\"em\")?a*o:-1!=e.size.indexOf(\"%\")?a/100*o:-1!=e.size.indexOf(\"pt\")?o/.75:a,i}function g(e){return e.style+\" \"+e.variant+\" \"+e.weight+\" \"+e.size+\"px '\"+e.family+\"'\"}function b(e){return Q[e]||\"square\"}function f(e){this.m_=s(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle=\"#000\",this.fillStyle=\"#000\",this.lineWidth=1,this.lineJoin=\"miter\",this.lineCap=\"butt\",this.miterLimit=1*A,this.globalAlpha=1,this.font=\"12px 微软雅黑\",this.textAlign=\"left\",this.textBaseline=\"alphabetic\",this.canvas=e;var t=\"width:\"+e.clientWidth+\"px;height:\"+e.clientHeight+\"px;overflow:hidden;position:absolute\",i=e.ownerDocument.createElement(\"div\");i.style.cssText=t,e.appendChild(i);var n=i.cloneNode(!1);n.style.backgroundColor=\"#fff\",n.style.filter=\"alpha(opacity=0)\",e.appendChild(n),this.element_=i,this.scaleX_=1,this.scaleY_=1,this.lineScale_=1}function k(e,t,i,n){e.currentPath_.push({type:\"bezierCurveTo\",cp1x:t.x,cp1y:t.y,cp2x:i.x,cp2y:i.y,x:n.x,y:n.y}),e.currentX_=n.x,e.currentY_=n.y}function x(e,t){var i=c(e.strokeStyle),n=i.color,a=i.alpha*e.globalAlpha,o=e.lineScale_*e.lineWidth;1>o&&(a*=o),t.push(\"<g_vml_:stroke\",' opacity=\"',a,'\"',' joinstyle=\"',e.lineJoin,'\"',' miterlimit=\"',e.miterLimit,'\"',' endcap=\"',b(e.lineCap),'\"',' weight=\"',o,'px\"',' color=\"',n,'\" />')}function _(e,t,i,n){var a=e.fillStyle,o=e.scaleX_,r=e.scaleY_,s=n.x-i.x,l=n.y-i.y;if(a instanceof v){var h=0,m={x:0,y:0},V=0,U=1;if(\"gradient\"==a.type_){var d=a.x0_/o,p=a.y0_/r,u=a.x1_/o,y=a.y1_/r,g=L(e,d,p),b=L(e,u,y),f=b.x-g.x,k=b.y-g.y;h=180*Math.atan2(f,k)/Math.PI,0>h&&(h+=360),1e-6>h&&(h=0)}else{var g=L(e,a.x0_,a.y0_);m={x:(g.x-i.x)/s,y:(g.y-i.y)/l},s/=o*A,l/=r*A;var x=C.max(s,l);V=2*a.r0_/x,U=2*a.r1_/x-V}var _=a.colors_;_.sort(function(e,t){return e.offset-t.offset});for(var W=_.length,X=_[0].color,K=_[W-1].color,I=_[0].alpha*e.globalAlpha,J=_[W-1].alpha*e.globalAlpha,S=[],E=0;W>E;E++){var F=_[E];S.push(F.offset*U+V+\" \"+F.color)}t.push('<g_vml_:fill type=\"',a.type_,'\"',' method=\"none\" focus=\"100%\"',' color=\"',X,'\"',' color2=\"',K,'\"',' colors=\"',S.join(\",\"),'\"',' opacity=\"',J,'\"',' g_o_:opacity2=\"',I,'\"',' angle=\"',h,'\"',' focusposition=\"',m.x,\",\",m.y,'\" />')}else if(a instanceof w){if(s&&l){var T=-i.x,z=-i.y;t.push(\"<g_vml_:fill\",' position=\"',T/s*o*o,\",\",z/l*r*r,'\"',' type=\"tile\"',' src=\"',a.src_,'\" />')}}else{var M=c(e.fillStyle),O=M.color,P=M.alpha*e.globalAlpha;t.push('<g_vml_:fill color=\"',O,'\" opacity=\"',P,'\" />')}}function L(e,t,i){var n=e.m_;return{x:A*(t*n[0][0]+i*n[1][0]+n[2][0])-M,y:A*(t*n[0][1]+i*n[1][1]+n[2][1])-M}}function W(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function X(e,t,i){if(W(t)&&(e.m_=t,e.scaleX_=Math.sqrt(t[0][0]*t[0][0]+t[0][1]*t[0][1]),e.scaleY_=Math.sqrt(t[1][0]*t[1][0]+t[1][1]*t[1][1]),i)){var n=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=z(T(n))}}function v(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function w(e,t){switch(I(e),t){case\"repeat\":case null:case\"\":this.repetition_=\"repeat\";break;case\"repeat-x\":case\"repeat-y\":case\"no-repeat\":this.repetition_=t;break;default:K(\"SYNTAX_ERR\")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new J(e)}function I(e){e&&1==e.nodeType&&\"IMG\"==e.tagName||K(\"TYPE_MISMATCH_ERR\"),\"complete\"!=e.readyState&&K(\"INVALID_STATE_ERR\")}function J(e){this.code=this[e],this.message=e+\": DOM Exception \"+this.code}var C=Math,S=C.round,E=C.sin,F=C.cos,T=C.abs,z=C.sqrt,A=10,M=A/2,O=(+navigator.userAgent.match(/MSIE ([\\d.]+)?/)[1],Array.prototype.slice);a(document);var P={init:function(e){var i=e||document;i.createElement(\"canvas\"),i.attachEvent(\"onreadystatechange\",t(this.init_,this,i))},init_:function(e){for(var t=e.getElementsByTagName(\"canvas\"),i=0;i<t.length;i++)this.initElement(t[i])},initElement:function(t){if(!t.getContext){t.getContext=e,a(t.ownerDocument),t.innerHTML=\"\",t.attachEvent(\"onpropertychange\",o),t.attachEvent(\"onresize\",r);var i=t.attributes;i.width&&i.width.specified?t.style.width=i.width.nodeValue+\"px\":t.width=t.clientWidth,i.height&&i.height.specified?t.style.height=i.height.nodeValue+\"px\":t.height=t.clientHeight}return t}};P.init();for(var D=[],N=0;16>N;N++)for(var B=0;16>B;B++)D[16*N+B]=N.toString(16)+B.toString(16);var H={aliceblue:\"#F0F8FF\",antiquewhite:\"#FAEBD7\",aquamarine:\"#7FFFD4\",azure:\"#F0FFFF\",beige:\"#F5F5DC\",bisque:\"#FFE4C4\",black:\"#000000\",blanchedalmond:\"#FFEBCD\",blueviolet:\"#8A2BE2\",brown:\"#A52A2A\",burlywood:\"#DEB887\",cadetblue:\"#5F9EA0\",chartreuse:\"#7FFF00\",chocolate:\"#D2691E\",coral:\"#FF7F50\",cornflowerblue:\"#6495ED\",cornsilk:\"#FFF8DC\",crimson:\"#DC143C\",cyan:\"#00FFFF\",darkblue:\"#00008B\",darkcyan:\"#008B8B\",darkgoldenrod:\"#B8860B\",darkgray:\"#A9A9A9\",darkgreen:\"#006400\",darkgrey:\"#A9A9A9\",darkkhaki:\"#BDB76B\",darkmagenta:\"#8B008B\",darkolivegreen:\"#556B2F\",darkorange:\"#FF8C00\",darkorchid:\"#9932CC\",darkred:\"#8B0000\",darksalmon:\"#E9967A\",darkseagreen:\"#8FBC8F\",darkslateblue:\"#483D8B\",darkslategray:\"#2F4F4F\",darkslategrey:\"#2F4F4F\",darkturquoise:\"#00CED1\",darkviolet:\"#9400D3\",deeppink:\"#FF1493\",deepskyblue:\"#00BFFF\",dimgray:\"#696969\",dimgrey:\"#696969\",dodgerblue:\"#1E90FF\",firebrick:\"#B22222\",floralwhite:\"#FFFAF0\",forestgreen:\"#228B22\",gainsboro:\"#DCDCDC\",ghostwhite:\"#F8F8FF\",gold:\"#FFD700\",goldenrod:\"#DAA520\",grey:\"#808080\",greenyellow:\"#ADFF2F\",honeydew:\"#F0FFF0\",hotpink:\"#FF69B4\",indianred:\"#CD5C5C\",indigo:\"#4B0082\",ivory:\"#FFFFF0\",khaki:\"#F0E68C\",lavender:\"#E6E6FA\",lavenderblush:\"#FFF0F5\",lawngreen:\"#7CFC00\",lemonchiffon:\"#FFFACD\",lightblue:\"#ADD8E6\",lightcoral:\"#F08080\",lightcyan:\"#E0FFFF\",lightgoldenrodyellow:\"#FAFAD2\",lightgreen:\"#90EE90\",lightgrey:\"#D3D3D3\",lightpink:\"#FFB6C1\",lightsalmon:\"#FFA07A\",lightseagreen:\"#20B2AA\",lightskyblue:\"#87CEFA\",lightslategray:\"#778899\",lightslategrey:\"#778899\",lightsteelblue:\"#B0C4DE\",lightyellow:\"#FFFFE0\",limegreen:\"#32CD32\",linen:\"#FAF0E6\",magenta:\"#FF00FF\",mediumaquamarine:\"#66CDAA\",mediumblue:\"#0000CD\",mediumorchid:\"#BA55D3\",mediumpurple:\"#9370DB\",mediumseagreen:\"#3CB371\",mediumslateblue:\"#7B68EE\",mediumspringgreen:\"#00FA9A\",mediumturquoise:\"#48D1CC\",mediumvioletred:\"#C71585\",midnightblue:\"#191970\",mintcream:\"#F5FFFA\",mistyrose:\"#FFE4E1\",moccasin:\"#FFE4B5\",navajowhite:\"#FFDEAD\",oldlace:\"#FDF5E6\",olivedrab:\"#6B8E23\",orange:\"#FFA500\",orangered:\"#FF4500\",orchid:\"#DA70D6\",palegoldenrod:\"#EEE8AA\",palegreen:\"#98FB98\",paleturquoise:\"#AFEEEE\",palevioletred:\"#DB7093\",papayawhip:\"#FFEFD5\",peachpuff:\"#FFDAB9\",peru:\"#CD853F\",pink:\"#FFC0CB\",plum:\"#DDA0DD\",powderblue:\"#B0E0E6\",rosybrown:\"#BC8F8F\",royalblue:\"#4169E1\",saddlebrown:\"#8B4513\",salmon:\"#FA8072\",sandybrown:\"#F4A460\",seagreen:\"#2E8B57\",seashell:\"#FFF5EE\",sienna:\"#A0522D\",skyblue:\"#87CEEB\",slateblue:\"#6A5ACD\",slategray:\"#708090\",slategrey:\"#708090\",snow:\"#FFFAFA\",springgreen:\"#00FF7F\",steelblue:\"#4682B4\",tan:\"#D2B48C\",thistle:\"#D8BFD8\",tomato:\"#FF6347\",turquoise:\"#40E0D0\",violet:\"#EE82EE\",wheat:\"#F5DEB3\",whitesmoke:\"#F5F5F5\",yellowgreen:\"#9ACD32\"},R={},G={style:\"normal\",variant:\"normal\",weight:\"normal\",size:12,family:\"微软雅黑\"},Y={},Q={butt:\"flat\",round:\"round\"},Z=f.prototype;Z.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=\"\"},Z.beginPath=function(){this.currentPath_=[]},Z.moveTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:\"moveTo\",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.lineTo=function(e,t){var i=L(this,e,t);this.currentPath_.push({type:\"lineTo\",x:i.x,y:i.y}),this.currentX_=i.x,this.currentY_=i.y},Z.bezierCurveTo=function(e,t,i,n,a,o){var r=L(this,a,o),s=L(this,e,t),l=L(this,i,n);k(this,s,l,r)},Z.quadraticCurveTo=function(e,t,i,n){var a=L(this,e,t),o=L(this,i,n),r={x:this.currentX_+2/3*(a.x-this.currentX_),y:this.currentY_+2/3*(a.y-this.currentY_)},s={x:r.x+(o.x-this.currentX_)/3,y:r.y+(o.y-this.currentY_)/3};k(this,r,s,o)},Z.arc=function(e,t,i,n,a,o){i*=A;var r=o?\"at\":\"wa\",s=e+F(n)*i-M,l=t+E(n)*i-M,h=e+F(a)*i-M,m=t+E(a)*i-M;s!=h||o||(s+=.125);var V=L(this,e,t),U=L(this,s,l),d=L(this,h,m);this.currentPath_.push({type:r,x:V.x,y:V.y,radius:i,xStart:U.x,yStart:U.y,xEnd:d.x,yEnd:d.y})},Z.rect=function(e,t,i,n){this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath()},Z.strokeRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.stroke(),this.currentPath_=a},Z.fillRect=function(e,t,i,n){var a=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+i,t),this.lineTo(e+i,t+n),this.lineTo(e,t+n),this.closePath(),this.fill(),this.currentPath_=a},Z.createLinearGradient=function(e,t,i,n){var a=new v(\"gradient\");return a.x0_=e,a.y0_=t,a.x1_=i,a.y1_=n,a},Z.createRadialGradient=function(e,t,i,n,a,o){var r=new v(\"gradientradial\");return r.x0_=e,r.y0_=t,r.r0_=i,r.x1_=n,r.y1_=a,r.r1_=o,r},Z.drawImage=function(e){var t,i,n,a,o,r,s,l,h=e.runtimeStyle.width,m=e.runtimeStyle.height;e.runtimeStyle.width=\"auto\",e.runtimeStyle.height=\"auto\";var V=e.width,U=e.height;if(e.runtimeStyle.width=h,e.runtimeStyle.height=m,3==arguments.length)t=arguments[1],i=arguments[2],o=r=0,s=n=V,l=a=U;else if(5==arguments.length)t=arguments[1],i=arguments[2],n=arguments[3],a=arguments[4],o=r=0,s=V,l=U;else{if(9!=arguments.length)throw Error(\"Invalid number of arguments\");o=arguments[1],r=arguments[2],s=arguments[3],l=arguments[4],t=arguments[5],i=arguments[6],n=arguments[7],a=arguments[8]}var d=L(this,t,i),p=[],c=10,u=10,y=b=1;if(p.push(\" <g_vml_:group\",' coordsize=\"',A*c,\",\",A*u,'\"',' coordorigin=\"0,0\"',' style=\"width:',c,\"px;height:\",u,\"px;position:absolute;\"),1!=this.m_[0][0]||this.m_[0][1]||1!=this.m_[1][1]||this.m_[1][0]){var g=[],y=this.scaleX_,b=this.scaleY_;g.push(\"M11=\",this.m_[0][0]/y,\",\",\"M12=\",this.m_[1][0]/b,\",\",\"M21=\",this.m_[0][1]/y,\",\",\"M22=\",this.m_[1][1]/b,\",\",\"Dx=\",S(d.x/A),\",\",\"Dy=\",S(d.y/A),\"\");var f=d,k=L(this,t+n,i),x=L(this,t,i+a),_=L(this,t+n,i+a);f.x=C.max(f.x,k.x,x.x,_.x),f.y=C.max(f.y,k.y,x.y,_.y),p.push(\"padding:0 \",S(f.x/A),\"px \",S(f.y/A),\"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(\",g.join(\"\"),\", SizingMethod='clip');\")}else p.push(\"top:\",S(d.y/A),\"px;left:\",S(d.x/A),\"px;\");p.push(' \">'),(o||r)&&p.push('<div style=\"overflow: hidden; width:',Math.ceil((n+o*n/s)*y),\"px;\",\" height:\",Math.ceil((a+r*a/l)*b),\"px;\",\" filter:progid:DxImageTransform.Microsoft.Matrix(Dx=\",-o*n/s*y,\",Dy=\",-r*a/l*b,');\">'),p.push('<div style=\"width:',Math.round(y*V*n/s),\"px;\",\" height:\",Math.round(b*U*a/l),\"px;\",\" filter:\"),this.globalAlpha<1&&p.push(\" progid:DXImageTransform.Microsoft.Alpha(opacity=\"+100*this.globalAlpha+\")\"),p.push(\" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=\",e.src,',sizingMethod=scale)\">'),(o||r)&&p.push(\"</div>\"),p.push(\"</div></div>\"),this.element_.insertAdjacentHTML(\"BeforeEnd\",p.join(\"\"))},Z.stroke=function(e){var t=[],i=10,n=10;t.push(\"<g_vml_:shape\",' filled=\"',!!e,'\"',' style=\"position:absolute;width:',i,\"px;height:\",n,'px;\"',' coordorigin=\"0,0\"',' coordsize=\"',A*i,\",\",A*n,'\"',' stroked=\"',!e,'\"',' path=\"');for(var a={x:null,y:null},o={x:null,y:null},r=0;r<this.currentPath_.length;r++){var s,l=this.currentPath_[r];switch(l.type){case\"moveTo\":s=l,t.push(\" m \",S(l.x),\",\",S(l.y));break;case\"lineTo\":t.push(\" l \",S(l.x),\",\",S(l.y));break;case\"close\":t.push(\" x \"),l=null;break;case\"bezierCurveTo\":t.push(\" c \",S(l.cp1x),\",\",S(l.cp1y),\",\",S(l.cp2x),\",\",S(l.cp2y),\",\",S(l.x),\",\",S(l.y));break;case\"at\":case\"wa\":t.push(\" \",l.type,\" \",S(l.x-this.scaleX_*l.radius),\",\",S(l.y-this.scaleY_*l.radius),\" \",S(l.x+this.scaleX_*l.radius),\",\",S(l.y+this.scaleY_*l.radius),\" \",S(l.xStart),\",\",S(l.yStart),\" \",S(l.xEnd),\",\",S(l.yEnd))}l&&((null==a.x||l.x<a.x)&&(a.x=l.x),(null==o.x||l.x>o.x)&&(o.x=l.x),(null==a.y||l.y<a.y)&&(a.y=l.y),(null==o.y||l.y>o.y)&&(o.y=l.y))}t.push(' \">'),e?_(this,t,a,o):x(this,t),t.push(\"</g_vml_:shape>\"),this.element_.insertAdjacentHTML(\"beforeEnd\",t.join(\"\"))},Z.fill=function(){this.stroke(!0)},Z.closePath=function(){this.currentPath_.push({type:\"close\"})},Z.save=function(){var e={};h(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=l(s(),this.m_)},Z.restore=function(){this.aStack_.length&&(h(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},Z.translate=function(e,t){var i=[[1,0,0],[0,1,0],[e,t,1]];X(this,l(i,this.m_),!1)},Z.rotate=function(e){var t=F(e),i=E(e),n=[[t,i,0],[-i,t,0],[0,0,1]];X(this,l(n,this.m_),!1)},Z.scale=function(e,t){var i=[[e,0,0],[0,t,0],[0,0,1]];X(this,l(i,this.m_),!0)},Z.transform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,l(r,this.m_),!0)},Z.setTransform=function(e,t,i,n,a,o){var r=[[e,t,0],[i,n,0],[a,o,1]];X(this,r,!0)},Z.drawText_=function(e,t,n,a,o){var r=this.m_,s=1e3,l=0,h=s,m={x:0,y:0},V=[],U=y(u(this.font),this.element_),d=g(U),p=this.element_.currentStyle,c=this.textAlign.toLowerCase();switch(c){case\"left\":case\"center\":case\"right\":break;case\"end\":c=\"ltr\"==p.direction?\"right\":\"left\";break;case\"start\":c=\"rtl\"==p.direction?\"right\":\"left\";break;default:c=\"left\"}switch(this.textBaseline){case\"hanging\":case\"top\":m.y=U.size/1.75;break;case\"middle\":break;default:case null:case\"alphabetic\":case\"ideographic\":case\"bottom\":m.y=-U.size/2.25}switch(c){case\"right\":l=s,h=.05;break;case\"center\":l=h=s/2}var b=L(this,t+m.x,n+m.y);V.push('<g_vml_:line from=\"',-l,' 0\" to=\"',h,' 0.05\" ',' coordsize=\"100 100\" coordorigin=\"0 0\"',' filled=\"',!o,'\" stroked=\"',!!o,'\" style=\"position:absolute;width:1px;height:1px;\">'),o?x(this,V):_(this,V,{x:-l,y:0},{x:h,y:U.size});var f=r[0][0].toFixed(3)+\",\"+r[1][0].toFixed(3)+\",\"+r[0][1].toFixed(3)+\",\"+r[1][1].toFixed(3)+\",0,0\",k=S(b.x/A)+\",\"+S(b.y/A);V.push('<g_vml_:skew on=\"t\" matrix=\"',f,'\" ',' offset=\"',k,'\" origin=\"',l,' 0\" />','<g_vml_:path textpathok=\"true\" />','<g_vml_:textpath on=\"true\" string=\"',i(e),'\" style=\"v-text-align:',c,\";font:\",i(d),'\" /></g_vml_:line>'),this.element_.insertAdjacentHTML(\"beforeEnd\",V.join(\"\"))},Z.fillText=function(e,t,i,n){this.drawText_(e,t,i,n,!1)},Z.strokeText=function(e,t,i,n){this.drawText_(e,t,i,n,!0)},Z.measureText=function(e){if(!this.textMeasureEl_){var t='<span style=\"position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;\"></span>';this.element_.insertAdjacentHTML(\"beforeEnd\",t),this.textMeasureEl_=this.element_.lastChild}var i=this.element_.ownerDocument;this.textMeasureEl_.innerHTML=\"\";try{this.textMeasureEl_.style.font=this.font}catch(n){}return this.textMeasureEl_.appendChild(i.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},Z.clip=function(){},Z.arcTo=function(){},Z.createPattern=function(e,t){return new w(e,t)},v.prototype.addColorStop=function(e,t){t=c(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var q=J.prototype=new Error;q.INDEX_SIZE_ERR=1,q.DOMSTRING_SIZE_ERR=2,q.HIERARCHY_REQUEST_ERR=3,q.WRONG_DOCUMENT_ERR=4,q.INVALID_CHARACTER_ERR=5,q.NO_DATA_ALLOWED_ERR=6,q.NO_MODIFICATION_ALLOWED_ERR=7,q.NOT_FOUND_ERR=8,q.NOT_SUPPORTED_ERR=9,q.INUSE_ATTRIBUTE_ERR=10,q.INVALID_STATE_ERR=11,q.SYNTAX_ERR=12,q.INVALID_MODIFICATION_ERR=13,q.NAMESPACE_ERR=14,q.INVALID_ACCESS_ERR=15,q.VALIDATION_ERR=16,q.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=P,CanvasRenderingContext2D=f,CanvasGradient=v,CanvasPattern=w,DOMException=J}(),G_vmlCanvasManager}),i(\"zrender/mixin/Eventful\",[\"require\"],function(){var e=function(){this._handlers={}};return e.prototype.one=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!0,ctx:i||this}),this):this},e.prototype.bind=function(e,t,i){var n=this._handlers;return t&&e?(n[e]||(n[e]=[]),n[e].push({h:t,one:!1,ctx:i||this}),this):this},e.prototype.unbind=function(e,t){var i=this._handlers;if(!e)return this._handlers={},this;if(t){if(i[e]){for(var n=[],a=0,o=i[e].length;o>a;a++)i[e][a].h!=t&&n.push(i[e][a]);i[e]=n}i[e]&&0===i[e].length&&delete i[e]}else delete i[e];return this},e.prototype.dispatch=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>3&&(t=Array.prototype.slice.call(t,1));for(var n=this._handlers[e],a=n.length,o=0;a>o;){switch(i){case 1:n[o].h.call(n[o].ctx);break;case 2:n[o].h.call(n[o].ctx,t[1]);break;case 3:n[o].h.call(n[o].ctx,t[1],t[2]);break;default:n[o].h.apply(n[o].ctx,t)}n[o].one?(n.splice(o,1),a--):o++}}return this},e.prototype.dispatchWithContext=function(e){if(this._handlers[e]){var t=arguments,i=t.length;i>4&&(t=Array.prototype.slice.call(t,1,t.length-1));for(var n=t[t.length-1],a=this._handlers[e],o=a.length,r=0;o>r;){switch(i){case 1:a[r].h.call(n);break;case 2:a[r].h.call(n,t[1]);break;case 3:a[r].h.call(n,t[1],t[2]);break;default:a[r].h.apply(n,t)}a[r].one?(a.splice(r,1),o--):r++}}return this},e}),i(\"zrender/tool/log\",[\"require\",\"../config\"],function(e){var t=e(\"../config\");return function(){if(0!==t.debugMode)if(1==t.debugMode)for(var e in arguments)throw new Error(arguments[e]);else if(t.debugMode>1)for(var e in arguments)console.log(arguments[e])}}),i(\"zrender/tool/guid\",[],function(){var e=2311;return function(){return\"zrender__\"+e++}}),i(\"zrender/Handler\",[\"require\",\"./config\",\"./tool/env\",\"./tool/event\",\"./tool/util\",\"./tool/vector\",\"./tool/matrix\",\"./mixin/Eventful\"],function(e){\"use strict\";function t(e,t){return function(i,n){return e.call(t,i,n)}}function i(e,t){return function(i,n,a){return e.call(t,i,n,a)}}function n(e){for(var i=d.length;i--;){var n=d[i];e[\"_\"+n+\"Handler\"]=t(c[n],e)}}function a(e,t,i){if(this._draggingTarget&&this._draggingTarget.id==e.id||e.isSilent())return!1;var n=this._event;if(e.isCover(t,i)){e.hoverable&&this.storage.addHover(e);for(var a=e.parent;a;){if(a.clipShape&&!a.clipShape.isCover(this._mouseX,this._mouseY))return!1;a=a.parent}return this._lastHover!=e&&(this._processOutShape(n),this._processDragLeave(n),this._lastHover=e,this._processDragEnter(n)),this._processOverShape(n),this._processDragOver(n),this._hasfound=1,!0}return!1}var o=e(\"./config\"),r=e(\"./tool/env\"),s=e(\"./tool/event\"),l=e(\"./tool/util\"),h=e(\"./tool/vector\"),m=e(\"./tool/matrix\"),V=o.EVENT,U=e(\"./mixin/Eventful\"),d=[\"resize\",\"click\",\"dblclick\",\"mousewheel\",\"mousemove\",\"mouseout\",\"mouseup\",\"mousedown\",\"touchstart\",\"touchend\",\"touchmove\"],p=function(e){if(window.G_vmlCanvasManager)return!0;e=e||window.event;var t=e.toElement||e.relatedTarget||e.srcElement||e.target;return t&&t.className.match(o.elementClassName)},c={resize:function(e){e=e||window.event,this._lastHover=null,this._isMouseDown=0,this.dispatch(V.RESIZE,e)},click:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.CLICK,e),this._mousemoveHandler(e)}},dblclick:function(e,t){if(p(e)||t){e=e||window.event,e=this._zrenderEventFixed(e);var i=this._lastHover;(i&&i.clickable||!i)&&this._clickThreshold<5&&this._dispatchAgency(i,V.DBLCLICK,e),this._mousemoveHandler(e)}},mousewheel:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.wheelDelta||-e.detail,n=i>0?1.1:1/1.1,a=!1,o=this._mouseX,r=this._mouseY;this.painter.eachBuildinLayer(function(t){var i=t.position;if(t.zoomable){t.__zoom=t.__zoom||1;var l=t.__zoom;l*=n,l=Math.max(Math.min(t.maxZoom,l),t.minZoom),n=l/t.__zoom,t.__zoom=l,i[0]-=(o-i[0])*(n-1),i[1]-=(r-i[1])*(n-1),t.scale[0]*=n,t.scale[1]*=n,t.dirty=!0,a=!0,s.stop(e)}}),a&&this.painter.refresh(),this._dispatchAgency(this._lastHover,V.MOUSEWHEEL,e),this._mousemoveHandler(e)}},mousemove:function(e,t){if((p(e)||t)&&!this.painter.isLoading()){e=this._zrenderEventFixed(e),this._lastX=this._mouseX,this._lastY=this._mouseY,this._mouseX=s.getX(e),this._mouseY=s.getY(e);var i=this._mouseX-this._lastX,n=this._mouseY-this._lastY;this._processDragStart(e),this._hasfound=0,this._event=e,this._iterateAndFindHover(),this._hasfound||((!this._draggingTarget||this._lastHover&&this._lastHover!=this._draggingTarget)&&(this._processOutShape(e),\nthis._processDragLeave(e)),this._lastHover=null,this.storage.delHover(),this.painter.clearHover());var a=\"default\";if(this._draggingTarget)this.storage.drift(this._draggingTarget.id,i,n),this._draggingTarget.modSelf(),this.storage.addHover(this._draggingTarget),this._clickThreshold++;else if(this._isMouseDown){var o=!1;this.painter.eachBuildinLayer(function(e){e.panable&&(a=\"move\",e.position[0]+=i,e.position[1]+=n,o=!0,e.dirty=!0)}),o&&this.painter.refresh()}this._draggingTarget||this._hasfound&&this._lastHover.draggable?a=\"move\":this._hasfound&&this._lastHover.clickable&&(a=\"pointer\"),this.root.style.cursor=a,this._dispatchAgency(this._lastHover,V.MOUSEMOVE,e),(this._draggingTarget||this._hasfound||this.storage.hasHoverShape())&&this.painter.refreshHover()}},mouseout:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e);var i=e.toElement||e.relatedTarget;if(i!=this.root)for(;i&&9!=i.nodeType;){if(i==this.root)return void this._mousemoveHandler(e);i=i.parentNode}e.zrenderX=this._lastX,e.zrenderY=this._lastY,this.root.style.cursor=\"default\",this._isMouseDown=0,this._processOutShape(e),this._processDrop(e),this._processDragEnd(e),this.painter.isLoading()||this.painter.refreshHover(),this.dispatch(V.GLOBALOUT,e)}},mousedown:function(e,t){if(p(e)||t){if(this._clickThreshold=0,2==this._lastDownButton)return this._lastDownButton=e.button,void(this._mouseDownTarget=null);this._lastMouseDownMoment=new Date,e=this._zrenderEventFixed(e),this._isMouseDown=1,this._mouseDownTarget=this._lastHover,this._dispatchAgency(this._lastHover,V.MOUSEDOWN,e),this._lastDownButton=e.button}},mouseup:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e),this.root.style.cursor=\"default\",this._isMouseDown=0,this._mouseDownTarget=null,this._dispatchAgency(this._lastHover,V.MOUSEUP,e),this._processDrop(e),this._processDragEnd(e))},touchstart:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._lastTouchMoment=new Date,this._mobileFindFixed(e),this._mousedownHandler(e))},touchmove:function(e,t){(p(e)||t)&&(e=this._zrenderEventFixed(e,!0),this._mousemoveHandler(e),this._isDragging&&s.stop(e))},touchend:function(e,t){if(p(e)||t){e=this._zrenderEventFixed(e,!0),this._mouseupHandler(e);var i=new Date;i-this._lastTouchMoment<V.touchClickDelay&&(this._mobileFindFixed(e),this._clickHandler(e),i-this._lastClickMoment<V.touchClickDelay/2&&(this._dblclickHandler(e),this._lastHover&&this._lastHover.clickable&&s.stop(e)),this._lastClickMoment=i),this.painter.clearHover()}}},u=function(e,t,o){U.call(this),this.root=e,this.storage=t,this.painter=o,this._lastX=this._lastY=this._mouseX=this._mouseY=0,this._findHover=i(a,this),this._domHover=o.getDomHover(),n(this),window.addEventListener?(window.addEventListener(\"resize\",this._resizeHandler),r.os.tablet||r.os.phone?(e.addEventListener(\"touchstart\",this._touchstartHandler),e.addEventListener(\"touchmove\",this._touchmoveHandler),e.addEventListener(\"touchend\",this._touchendHandler)):(e.addEventListener(\"click\",this._clickHandler),e.addEventListener(\"dblclick\",this._dblclickHandler),e.addEventListener(\"mousewheel\",this._mousewheelHandler),e.addEventListener(\"mousemove\",this._mousemoveHandler),e.addEventListener(\"mousedown\",this._mousedownHandler),e.addEventListener(\"mouseup\",this._mouseupHandler)),e.addEventListener(\"DOMMouseScroll\",this._mousewheelHandler),e.addEventListener(\"mouseout\",this._mouseoutHandler)):(window.attachEvent(\"onresize\",this._resizeHandler),e.attachEvent(\"onclick\",this._clickHandler),e.ondblclick=this._dblclickHandler,e.attachEvent(\"onmousewheel\",this._mousewheelHandler),e.attachEvent(\"onmousemove\",this._mousemoveHandler),e.attachEvent(\"onmouseout\",this._mouseoutHandler),e.attachEvent(\"onmousedown\",this._mousedownHandler),e.attachEvent(\"onmouseup\",this._mouseupHandler))};u.prototype.on=function(e,t,i){return this.bind(e,t,i),this},u.prototype.un=function(e,t){return this.unbind(e,t),this},u.prototype.trigger=function(e,t){switch(e){case V.RESIZE:case V.CLICK:case V.DBLCLICK:case V.MOUSEWHEEL:case V.MOUSEMOVE:case V.MOUSEDOWN:case V.MOUSEUP:case V.MOUSEOUT:this[\"_\"+e+\"Handler\"](t,!0)}},u.prototype.dispose=function(){var e=this.root;window.removeEventListener?(window.removeEventListener(\"resize\",this._resizeHandler),r.os.tablet||r.os.phone?(e.removeEventListener(\"touchstart\",this._touchstartHandler),e.removeEventListener(\"touchmove\",this._touchmoveHandler),e.removeEventListener(\"touchend\",this._touchendHandler)):(e.removeEventListener(\"click\",this._clickHandler),e.removeEventListener(\"dblclick\",this._dblclickHandler),e.removeEventListener(\"mousewheel\",this._mousewheelHandler),e.removeEventListener(\"mousemove\",this._mousemoveHandler),e.removeEventListener(\"mousedown\",this._mousedownHandler),e.removeEventListener(\"mouseup\",this._mouseupHandler)),e.removeEventListener(\"DOMMouseScroll\",this._mousewheelHandler),e.removeEventListener(\"mouseout\",this._mouseoutHandler)):(window.detachEvent(\"onresize\",this._resizeHandler),e.detachEvent(\"onclick\",this._clickHandler),e.detachEvent(\"dblclick\",this._dblclickHandler),e.detachEvent(\"onmousewheel\",this._mousewheelHandler),e.detachEvent(\"onmousemove\",this._mousemoveHandler),e.detachEvent(\"onmouseout\",this._mouseoutHandler),e.detachEvent(\"onmousedown\",this._mousedownHandler),e.detachEvent(\"onmouseup\",this._mouseupHandler)),this.root=this._domHover=this.storage=this.painter=null,this.un()},u.prototype._processDragStart=function(e){var t=this._lastHover;if(this._isMouseDown&&t&&t.draggable&&!this._draggingTarget&&this._mouseDownTarget==t){if(t.dragEnableTime&&new Date-this._lastMouseDownMoment<t.dragEnableTime)return;var i=t;this._draggingTarget=i,this._isDragging=1,i.invisible=!0,this.storage.mod(i.id),this._dispatchAgency(i,V.DRAGSTART,e),this.painter.refresh()}},u.prototype._processDragEnter=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGENTER,e,this._draggingTarget)},u.prototype._processDragOver=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGOVER,e,this._draggingTarget)},u.prototype._processDragLeave=function(e){this._draggingTarget&&this._dispatchAgency(this._lastHover,V.DRAGLEAVE,e,this._draggingTarget)},u.prototype._processDrop=function(e){this._draggingTarget&&(this._draggingTarget.invisible=!1,this.storage.mod(this._draggingTarget.id),this.painter.refresh(),this._dispatchAgency(this._lastHover,V.DROP,e,this._draggingTarget))},u.prototype._processDragEnd=function(e){this._draggingTarget&&(this._dispatchAgency(this._draggingTarget,V.DRAGEND,e),this._lastHover=null),this._isDragging=0,this._draggingTarget=null},u.prototype._processOverShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOVER,e)},u.prototype._processOutShape=function(e){this._dispatchAgency(this._lastHover,V.MOUSEOUT,e)},u.prototype._dispatchAgency=function(e,t,i,n){var a=\"on\"+t,o={type:t,event:i,target:e,cancelBubble:!1},r=e;for(n&&(o.dragged=n);r&&(r[a]&&(o.cancelBubble=r[a](o)),r.dispatch(t,o),r=r.parent,!o.cancelBubble););if(e)o.cancelBubble||this.dispatch(t,o);else if(!n){var s={type:t,event:i};this.dispatch(t,s),this.painter.eachOtherLayer(function(e){\"function\"==typeof e[a]&&e[a](s),e.dispatch&&e.dispatch(t,s)})}},u.prototype._iterateAndFindHover=function(){var e=m.create();return function(){for(var t,i,n=this.storage.getShapeList(),a=[0,0],o=n.length-1;o>=0;o--){var r=n[o];if(t!==r.zlevel&&(i=this.painter.getLayer(r.zlevel,i),a[0]=this._mouseX,a[1]=this._mouseY,i.needTransform&&(m.invert(e,i.transform),h.applyTransform(a,a,e))),this._findHover(r,a[0],a[1]))break}}}();var y=[{x:10},{x:-20},{x:10,y:10},{y:-20}];return u.prototype._mobileFindFixed=function(e){this._lastHover=null,this._mouseX=e.zrenderX,this._mouseY=e.zrenderY,this._event=e,this._iterateAndFindHover();for(var t=0;!this._lastHover&&t<y.length;t++){var i=y[t];i.x&&(this._mouseX+=i.x),i.y&&(this._mouseY+=i.y),this._iterateAndFindHover()}this._lastHover&&(e.zrenderX=this._mouseX,e.zrenderY=this._mouseY)},u.prototype._zrenderEventFixed=function(e,t){if(e.zrenderFixed)return e;if(t){var i=\"touchend\"!=e.type?e.targetTouches[0]:e.changedTouches[0];if(i){var n=this.painter._domRoot.getBoundingClientRect();e.zrenderX=i.clientX-n.left,e.zrenderY=i.clientY-n.top}}else{e=e||window.event;var a=e.toElement||e.relatedTarget||e.srcElement||e.target;a&&a!=this._domHover&&(e.zrenderX=(\"undefined\"!=typeof e.offsetX?e.offsetX:e.layerX)+a.offsetLeft,e.zrenderY=(\"undefined\"!=typeof e.offsetY?e.offsetY:e.layerY)+a.offsetTop)}return e.zrenderFixed=1,e},l.merge(u.prototype,U.prototype,!0),u}),i(\"zrender/Painter\",[\"require\",\"./config\",\"./tool/util\",\"./tool/log\",\"./loadingEffect/Base\",\"./Layer\",\"./shape/Image\"],function(e){\"use strict\";function t(){return!1}function i(){}function n(e){return e?e.isBuildin?!0:\"function\"!=typeof e.resize||\"function\"!=typeof e.refresh?!1:!0:!1}var a=e(\"./config\"),o=e(\"./tool/util\"),r=e(\"./tool/log\"),s=e(\"./loadingEffect/Base\"),l=e(\"./Layer\"),h=function(e,i){this.root=e,e.style[\"-webkit-tap-highlight-color\"]=\"transparent\",e.style[\"-webkit-user-select\"]=\"none\",e.style[\"user-select\"]=\"none\",e.style[\"-webkit-touch-callout\"]=\"none\",this.storage=i,e.innerHTML=\"\",this._width=this._getWidth(),this._height=this._getHeight();var n=document.createElement(\"div\");this._domRoot=n,n.style.position=\"relative\",n.style.overflow=\"hidden\",n.style.width=this._width+\"px\",n.style.height=this._height+\"px\",e.appendChild(n),this._layers={},this._zlevelList=[],this._layerConfig={},this._loadingEffect=new s({}),this.shapeToImage=this._createShapeToImageProcessor(),this._bgDom=document.createElement(\"div\"),this._bgDom.style.cssText=[\"position:absolute;left:0px;top:0px;width:\",this._width,\"px;height:\",this._height+\"px;\",\"-webkit-user-select:none;user-select;none;\",\"-webkit-touch-callout:none;\"].join(\"\"),this._bgDom.setAttribute(\"data-zr-dom-id\",\"bg\"),this._bgDom.className=a.elementClassName,n.appendChild(this._bgDom),this._bgDom.onselectstart=t;var o=new l(\"_zrender_hover_\",this);this._layers.hover=o,n.appendChild(o.dom),o.initContext(),o.dom.onselectstart=t,o.dom.style[\"-webkit-user-select\"]=\"none\",o.dom.style[\"user-select\"]=\"none\",o.dom.style[\"-webkit-touch-callout\"]=\"none\",this.refreshNextFrame=null};return h.prototype.render=function(e){return this.isLoading()&&this.hideLoading(),this.refresh(e,!0),this},h.prototype.refresh=function(e,t){var i=this.storage.getShapeList(!0);this._paintList(i,t);for(var n=0;n<this._zlevelList.length;n++){var a=this._zlevelList[n],o=this._layers[a];!o.isBuildin&&o.refresh&&o.refresh()}return\"function\"==typeof e&&e(),this},h.prototype._preProcessLayer=function(e){e.unusedCount++,e.updateTransform()},h.prototype._postProcessLayer=function(e){e.dirty=!1,1==e.unusedCount&&e.clear()},h.prototype._paintList=function(e,t){\"undefined\"==typeof t&&(t=!1),this._updateLayerStatus(e);var i,n,o;this.eachBuildinLayer(this._preProcessLayer);for(var s=0,l=e.length;l>s;s++){var h=e[s];if(n!==h.zlevel&&(i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),n=h.zlevel,i=this.getLayer(n),i.isBuildin||r(\"ZLevel \"+n+\" has been used by unkown layer \"+i.id),o=i.ctx,i.unusedCount=0,(i.dirty||t)&&i.clear(),i.needTransform&&(o.save(),i.setTransform(o))),(i.dirty||t)&&!h.invisible&&(!h.onbrush||h.onbrush&&!h.onbrush(o,!1)))if(a.catchBrushException)try{h.brush(o,!1,this.refreshNextFrame)}catch(m){r(m,\"brush error of \"+h.type,h)}else h.brush(o,!1,this.refreshNextFrame);h.__dirty=!1}i&&(i.needTransform&&o.restore(),o.flush&&o.flush()),this.eachBuildinLayer(this._postProcessLayer)},h.prototype.getLayer=function(e){var t=this._layers[e];return t||(t=new l(e,this),t.isBuildin=!0,this._layerConfig[e]&&o.merge(t,this._layerConfig[e],!0),t.updateTransform(),this.insertLayer(e,t),t.initContext()),t},h.prototype.insertLayer=function(e,t){if(this._layers[e])return void r(\"ZLevel \"+e+\" has been used already\");if(!n(t))return void r(\"Layer of zlevel \"+e+\" is not valid\");var i=this._zlevelList.length,a=null,o=-1;if(i>0&&e>this._zlevelList[0]){for(o=0;i-1>o&&!(this._zlevelList[o]<e&&this._zlevelList[o+1]>e);o++);a=this._layers[this._zlevelList[o]]}this._zlevelList.splice(o+1,0,e);var s=a?a.dom:this._bgDom;s.nextSibling?s.parentNode.insertBefore(t.dom,s.nextSibling):s.parentNode.appendChild(t.dom),this._layers[e]=t},h.prototype.eachLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i];e.call(t,this._layers[n],n)}},h.prototype.eachBuildinLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin&&e.call(t,a,n)}},h.prototype.eachOtherLayer=function(e,t){for(var i=0;i<this._zlevelList.length;i++){var n=this._zlevelList[i],a=this._layers[n];a.isBuildin||e.call(t,a,n)}},h.prototype.getLayers=function(){return this._layers},h.prototype._updateLayerStatus=function(e){var t=this._layers,i={};this.eachBuildinLayer(function(e,t){i[t]=e.elCount,e.elCount=0});for(var n=0,a=e.length;a>n;n++){var o=e[n],r=o.zlevel,s=t[r];if(s){if(s.elCount++,s.dirty)continue;s.dirty=o.__dirty}}this.eachBuildinLayer(function(e,t){i[t]!==e.elCount&&(e.dirty=!0)})},h.prototype.refreshShapes=function(e,t){for(var i=0,n=e.length;n>i;i++){var a=e[i];a.modSelf()}return this.refresh(t),this},h.prototype.setLoadingEffect=function(e){return this._loadingEffect=e,this},h.prototype.clear=function(){return this.eachBuildinLayer(this._clearLayer),this},h.prototype._clearLayer=function(e){e.clear()},h.prototype.modLayer=function(e,t){if(t){this._layerConfig[e]?o.merge(this._layerConfig[e],t,!0):this._layerConfig[e]=t;var i=this._layers[e];i&&o.merge(i,this._layerConfig[e],!0)}},h.prototype.delLayer=function(e){var t=this._layers[e];t&&(this.modLayer(e,{position:t.position,rotation:t.rotation,scale:t.scale}),t.dom.parentNode.removeChild(t.dom),delete this._layers[e],this._zlevelList.splice(o.indexOf(this._zlevelList,e),1))},h.prototype.refreshHover=function(){this.clearHover();for(var e=this.storage.getHoverShapes(!0),t=0,i=e.length;i>t;t++)this._brushHover(e[t]);var n=this._layers.hover.ctx;return n.flush&&n.flush(),this.storage.delHover(),this},h.prototype.clearHover=function(){var e=this._layers.hover;return e&&e.clear(),this},h.prototype.showLoading=function(e){return this._loadingEffect&&this._loadingEffect.stop(),e&&this.setLoadingEffect(e),this._loadingEffect.start(this),this.loading=!0,this},h.prototype.hideLoading=function(){return this._loadingEffect.stop(),this.clearHover(),this.loading=!1,this},h.prototype.isLoading=function(){return this.loading},h.prototype.resize=function(){var e=this._domRoot;e.style.display=\"none\";var t=this._getWidth(),i=this._getHeight();if(e.style.display=\"\",this._width!=t||i!=this._height){this._width=t,this._height=i,e.style.width=t+\"px\",e.style.height=i+\"px\";for(var n in this._layers)this._layers[n].resize(t,i);this.refresh(null,!0)}return this},h.prototype.clearLayer=function(e){var t=this._layers[e];t&&t.clear()},h.prototype.dispose=function(){this.isLoading()&&this.hideLoading(),this.root.innerHTML=\"\",this.root=this.storage=this._domRoot=this._layers=null},h.prototype.getDomHover=function(){return this._layers.hover.dom},h.prototype.toDataURL=function(e,t,i){if(window.G_vmlCanvasManager)return null;var n=new l(\"image\",this);this._bgDom.appendChild(n.dom),n.initContext();var o=n.ctx;n.clearColor=t||\"#fff\",n.clear();var s=this;this.storage.iterShape(function(e){if(!e.invisible&&(!e.onbrush||e.onbrush&&!e.onbrush(o,!1)))if(a.catchBrushException)try{e.brush(o,!1,s.refreshNextFrame)}catch(t){r(t,\"brush error of \"+e.type,e)}else e.brush(o,!1,s.refreshNextFrame)},{normal:\"up\",update:!0});var h=n.dom.toDataURL(e,i);return o=null,this._bgDom.removeChild(n.dom),h},h.prototype.getWidth=function(){return this._width},h.prototype.getHeight=function(){return this._height},h.prototype._getWidth=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientWidth||parseInt(t.width,10))-parseInt(t.paddingLeft,10)-parseInt(t.paddingRight,10)).toFixed(0)-0},h.prototype._getHeight=function(){var e=this.root,t=e.currentStyle||document.defaultView.getComputedStyle(e);return((e.clientHeight||parseInt(t.height,10))-parseInt(t.paddingTop,10)-parseInt(t.paddingBottom,10)).toFixed(0)-0},h.prototype._brushHover=function(e){var t=this._layers.hover.ctx;if(!e.onbrush||e.onbrush&&!e.onbrush(t,!0)){var i=this.getLayer(e.zlevel);if(i.needTransform&&(t.save(),i.setTransform(t)),a.catchBrushException)try{e.brush(t,!0,this.refreshNextFrame)}catch(n){r(n,\"hoverBrush error of \"+e.type,e)}else e.brush(t,!0,this.refreshNextFrame);i.needTransform&&t.restore()}},h.prototype._shapeToImage=function(t,i,n,a,o){var r=document.createElement(\"canvas\"),s=r.getContext(\"2d\");r.style.width=n+\"px\",r.style.height=a+\"px\",r.setAttribute(\"width\",n*o),r.setAttribute(\"height\",a*o),s.clearRect(0,0,n*o,a*o);var l={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],i&&i.brush(s,!1);var h=e(\"./shape/Image\"),m=new h({id:t,style:{x:0,y:0,image:r}});return null!=l.position&&(m.position=i.position=l.position),null!=l.rotation&&(m.rotation=i.rotation=l.rotation),null!=l.scale&&(m.scale=i.scale=l.scale),m},h.prototype._createShapeToImageProcessor=function(){if(window.G_vmlCanvasManager)return i;var e=this;return function(t,i,n,o){return e._shapeToImage(t,i,n,o,a.devicePixelRatio)}},h}),i(\"zrender/Storage\",[\"require\",\"./tool/util\",\"./Group\"],function(e){\"use strict\";function t(e,t){return e.zlevel==t.zlevel?e.z==t.z?e.__renderidx-t.__renderidx:e.z-t.z:e.zlevel-t.zlevel}var i=e(\"./tool/util\"),n=e(\"./Group\"),a={hover:!1,normal:\"down\",update:!1},o=function(){this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],this._shapeListOffset=0};return o.prototype.iterShape=function(e,t){if(t||(t=a),t.hover)for(var i=0,n=this._hoverElements.length;n>i;i++){var o=this._hoverElements[i];if(o.updateTransform(),e(o))return this}switch(t.update&&this.updateShapeList(),t.normal){case\"down\":for(var n=this._shapeList.length;n--;)if(e(this._shapeList[n]))return this;break;default:for(var i=0,n=this._shapeList.length;n>i;i++)if(e(this._shapeList[i]))return this}return this},o.prototype.getHoverShapes=function(e){for(var i=[],n=0,a=this._hoverElements.length;a>n;n++){i.push(this._hoverElements[n]);var o=this._hoverElements[n].hoverConnect;if(o){var r;o=o instanceof Array?o:[o];for(var s=0,l=o.length;l>s;s++)r=o[s].id?o[s]:this.get(o[s]),r&&i.push(r)}}if(i.sort(t),e)for(var n=0,a=i.length;a>n;n++)i[n].updateTransform();return i},o.prototype.getShapeList=function(e){return e&&this.updateShapeList(),this._shapeList},o.prototype.updateShapeList=function(){this._shapeListOffset=0;for(var e=0,i=this._roots.length;i>e;e++){var n=this._roots[e];this._updateAndAddShape(n)}this._shapeList.length=this._shapeListOffset;for(var e=0,i=this._shapeList.length;i>e;e++)this._shapeList[e].__renderidx=e;this._shapeList.sort(t)},o.prototype._updateAndAddShape=function(e,t){if(!e.ignore)if(e.updateTransform(),e.clipShape&&(e.clipShape.parent=e,e.clipShape.updateTransform(),t?(t=t.slice(),t.push(e.clipShape)):t=[e.clipShape]),\"group\"==e.type){for(var i=0;i<e._children.length;i++){var n=e._children[i];n.__dirty=e.__dirty||n.__dirty,this._updateAndAddShape(n,t)}e.__dirty=!1}else e.__clipShapes=t,this._shapeList[this._shapeListOffset++]=e},o.prototype.mod=function(e,t){if(\"string\"==typeof e&&(e=this._elements[e]),e&&(e.modSelf(),t))if(t.parent||t._storage||t.__clipShapes){var n={};for(var a in t)\"parent\"!==a&&\"_storage\"!==a&&\"__clipShapes\"!==a&&t.hasOwnProperty(a)&&(n[a]=t[a]);i.merge(e,n,!0)}else i.merge(e,t,!0);return this},o.prototype.drift=function(e,t,i){var n=this._elements[e];return n&&(n.needTransform=!0,\"horizontal\"===n.draggable?i=0:\"vertical\"===n.draggable&&(t=0),(!n.ondrift||n.ondrift&&!n.ondrift(t,i))&&n.drift(t,i)),this},o.prototype.addHover=function(e){return e.updateNeedTransform(),this._hoverElements.push(e),this},o.prototype.delHover=function(){return this._hoverElements=[],this},o.prototype.hasHoverShape=function(){return this._hoverElements.length>0},o.prototype.addRoot=function(e){this._elements[e.id]||(e instanceof n&&e.addChildrenToStorage(this),this.addToMap(e),this._roots.push(e))},o.prototype.delRoot=function(e){if(\"undefined\"==typeof e){for(var t=0;t<this._roots.length;t++){var a=this._roots[t];a instanceof n&&a.delChildrenFromStorage(this)}return this._elements={},this._hoverElements=[],this._roots=[],this._shapeList=[],void(this._shapeListOffset=0)}if(e instanceof Array)for(var t=0,o=e.length;o>t;t++)this.delRoot(e[t]);else{var r;r=\"string\"==typeof e?this._elements[e]:e;var s=i.indexOf(this._roots,r);s>=0&&(this.delFromMap(r.id),this._roots.splice(s,1),r instanceof n&&r.delChildrenFromStorage(this))}},o.prototype.addToMap=function(e){return e instanceof n&&(e._storage=this),e.modSelf(),this._elements[e.id]=e,this},o.prototype.get=function(e){return this._elements[e]},o.prototype.delFromMap=function(e){var t=this._elements[e];return t&&(delete this._elements[e],t instanceof n&&(t._storage=null)),this},o.prototype.dispose=function(){this._elements=this._renderList=this._roots=this._hoverElements=null},o}),i(\"zrender/animation/Animation\",[\"require\",\"./Clip\",\"../tool/color\",\"../tool/util\",\"../tool/event\"],function(e){\"use strict\";function t(e,t){return e[t]}function i(e,t,i){e[t]=i}function n(e,t,i){return(t-e)*i+e}function a(e,t,i,a,o){var r=e.length;if(1==o)for(var s=0;r>s;s++)a[s]=n(e[s],t[s],i);else for(var l=e[0].length,s=0;r>s;s++)for(var h=0;l>h;h++)a[s][h]=n(e[s][h],t[s][h],i)}function o(e){switch(typeof e){case\"undefined\":case\"string\":return!1}return\"undefined\"!=typeof e.length}function r(e,t,i,n,a,o,r,l,h){var m=e.length;if(1==h)for(var V=0;m>V;V++)l[V]=s(e[V],t[V],i[V],n[V],a,o,r);else for(var U=e[0].length,V=0;m>V;V++)for(var d=0;U>d;d++)l[V][d]=s(e[V][d],t[V][d],i[V][d],n[V][d],a,o,r)}function s(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}function l(e){if(o(e)){var t=e.length;if(o(e[0])){for(var i=[],n=0;t>n;n++)i.push(c.call(e[n]));return i}return c.call(e)}return e}function h(e){return e[0]=Math.floor(e[0]),e[1]=Math.floor(e[1]),e[2]=Math.floor(e[2]),\"rgba(\"+e.join(\",\")+\")\"}var m=e(\"./Clip\"),V=e(\"../tool/color\"),U=e(\"../tool/util\"),d=e(\"../tool/event\").Dispatcher,p=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},c=Array.prototype.slice,u=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0,d.call(this)};u.prototype={add:function(e){this._clips.push(e)},remove:function(e){if(e.__inStep)e.__needsRemove=!0;else{var t=U.indexOf(this._clips,e);t>=0&&this._clips.splice(t,1)}},_update:function(){for(var e=(new Date).getTime(),t=e-this._time,i=this._clips,n=i.length,a=[],o=[],r=0;n>r;r++){var s=i[r];s.__inStep=!0;var l=s.step(e);s.__inStep=!1,l&&(a.push(l),o.push(s))}for(var r=0;n>r;)i[r].__needsRemove?(i[r]=i[n-1],i.pop(),n--):r++;n=a.length;for(var r=0;n>r;r++)o[r].fire(a[r]);this._time=e,this.onframe(t),this.dispatch(\"frame\",t),this.stage.update&&this.stage.update()},start:function(){function e(){t._running&&(p(e),t._update())}var t=this;this._running=!0,this._time=(new Date).getTime(),p(e)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var i=new y(e,t.loop,t.getter,t.setter);return i.animation=this,i},constructor:u},U.merge(u.prototype,d.prototype,!0);var y=function(e,n,a,o){this._tracks={},this._target=e,this._loop=n||!1,this._getter=a||t,this._setter=o||i,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]};return y.prototype={when:function(e,t){for(var i in t)this._tracks[i]||(this._tracks[i]=[],0!==e&&this._tracks[i].push({time:0,value:l(this._getter(this._target,i))})),this._tracks[i].push({time:parseInt(e,10),value:t[i]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var t=this,i=this._setter,l=this._getter,U=\"spline\"===e,d=function(){if(t._clipCount--,0===t._clipCount){t._tracks={};for(var e=t._doneList.length,i=0;e>i;i++)t._doneList[i].call(t)}},p=function(p,c){var u=p.length;if(u){var y=p[0].value,g=o(y),b=!1,f=g&&o(y[0])?2:1;p.sort(function(e,t){return e.time-t.time});var k;if(u){k=p[u-1].time;for(var x=[],_=[],L=0;u>L;L++){x.push(p[L].time/k);var W=p[L].value;\"string\"==typeof W&&(W=V.toArray(W),0===W.length&&(W[0]=W[1]=W[2]=0,W[3]=1),b=!0),_.push(W)}var X,L,v,w,K,I,J,C=0,S=0;if(b)var E=[0,0,0,0];var F=function(e,o){if(S>o){for(X=Math.min(C+1,u-1),L=X;L>=0&&!(x[L]<=o);L--);L=Math.min(L,u-2)}else{for(L=C;u>L&&!(x[L]>o);L++);L=Math.min(L-1,u-2)}C=L,S=o;var m=x[L+1]-x[L];if(0!==m){if(v=(o-x[L])/m,U)if(K=_[L],w=_[0===L?L:L-1],I=_[L>u-2?u-1:L+1],J=_[L>u-3?u-1:L+2],g)r(w,K,I,J,v,v*v,v*v*v,l(e,c),f);else{var V;b?(V=r(w,K,I,J,v,v*v,v*v*v,E,1),V=h(E)):V=s(w,K,I,J,v,v*v,v*v*v),i(e,c,V)}else if(g)a(_[L],_[L+1],v,l(e,c),f);else{var V;b?(a(_[L],_[L+1],v,E,1),V=h(E)):V=n(_[L],_[L+1],v),i(e,c,V)}for(L=0;L<t._onframeList.length;L++)t._onframeList[L](e,o)}},T=new m({target:t._target,life:k,loop:t._loop,delay:t._delay,onframe:F,ondestroy:d});e&&\"spline\"!==e&&(T.easing=e),t._clipList.push(T),t._clipCount++,t.animation.add(T)}}};for(var c in this._tracks)p(this._tracks[c],c);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return e&&this._doneList.push(e),this}},u}),i(\"zrender/tool/vector\",[],function(){var e=\"undefined\"==typeof Float32Array?Array:Float32Array,t={create:function(t,i){var n=new e(2);return n[0]=t||0,n[1]=i||0,n},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},clone:function(t){var i=new e(2);return i[0]=t[0],i[1]=t[1],i},set:function(e,t,i){return e[0]=t,e[1]=i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},len:function(e){return Math.sqrt(this.lenSquare(e))},lenSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,i){return e[0]=t[0]*i[0],e[1]=t[1]*i[1],e},div:function(e,t,i){return e[0]=t[0]/i[0],e[1]=t[1]/i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},normalize:function(e,i){var n=t.len(i);return 0===n?(e[0]=0,e[1]=0):(e[0]=i[0]/n,e[1]=i[1]/n),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},distanceSquare:function(e,t){return(e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},lerp:function(e,t,i,n){return e[0]=t[0]+n*(i[0]-t[0]),e[1]=t[1]+n*(i[1]-t[1]),e},applyTransform:function(e,t,i){var n=t[0],a=t[1];return e[0]=i[0]*n+i[2]*a+i[4],e[1]=i[1]*n+i[3]*a+i[5],e},min:function(e,t,i){return e[0]=Math.min(t[0],i[0]),e[1]=Math.min(t[1],i[1]),e},max:function(e,t,i){return e[0]=Math.max(t[0],i[0]),e[1]=Math.max(t[1],i[1]),e}};return t.length=t.len,t.lengthSquare=t.lenSquare,t.dist=t.distance,t.distSquare=t.distanceSquare,t}),i(\"zrender/tool/matrix\",[],function(){var e=\"undefined\"==typeof Float32Array?Array:Float32Array,t={create:function(){var i=new e(6);return t.identity(i),i},identity:function(e){return e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0,e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},mul:function(e,t,i){return e[0]=t[0]*i[0]+t[2]*i[1],e[1]=t[1]*i[0]+t[3]*i[1],e[2]=t[0]*i[2]+t[2]*i[3],e[3]=t[1]*i[2]+t[3]*i[3],e[4]=t[0]*i[4]+t[2]*i[5]+t[4],e[5]=t[1]*i[4]+t[3]*i[5]+t[5],e},translate:function(e,t,i){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+i[0],e[5]=t[5]+i[1],e},rotate:function(e,t,i){var n=t[0],a=t[2],o=t[4],r=t[1],s=t[3],l=t[5],h=Math.sin(i),m=Math.cos(i);return e[0]=n*m+r*h,e[1]=-n*h+r*m,e[2]=a*m+s*h,e[3]=-a*h+m*s,e[4]=m*o+h*l,e[5]=m*l-h*o,e},scale:function(e,t,i){var n=i[0],a=i[1];return e[0]=t[0]*n,e[1]=t[1]*a,e[2]=t[2]*n,e[3]=t[3]*a,e[4]=t[4]*n,e[5]=t[5]*a,e},invert:function(e,t){var i=t[0],n=t[2],a=t[4],o=t[1],r=t[3],s=t[5],l=i*r-o*n;return l?(l=1/l,e[0]=r*l,e[1]=-o*l,e[2]=-n*l,e[3]=i*l,e[4]=(n*s-r*a)*l,e[5]=(o*a-i*s)*l,e):null}};return t}),i(\"zrender/loadingEffect/Base\",[\"require\",\"../tool/util\",\"../shape/Text\",\"../shape/Rectangle\"],function(e){function t(e){this.setOptions(e)}var i=e(\"../tool/util\"),n=e(\"../shape/Text\"),a=e(\"../shape/Rectangle\"),o=\"Loading...\",r=\"normal 16px Arial\";return t.prototype.createTextShape=function(e){return new n({highlightStyle:i.merge({x:this.canvasWidth/2,y:this.canvasHeight/2,text:o,textAlign:\"center\",textBaseline:\"middle\",textFont:r,color:\"#333\",brushType:\"fill\"},e,!0)})},t.prototype.createBackgroundShape=function(e){return new a({highlightStyle:{x:0,y:0,width:this.canvasWidth,height:this.canvasHeight,brushType:\"fill\",color:e}})},t.prototype.start=function(e){function t(t){e.storage.addHover(t)}function i(){e.refreshHover()}this.canvasWidth=e._width,this.canvasHeight=e._height,this.loadingTimer=this._start(t,i)},t.prototype._start=function(){return setInterval(function(){},1e4)},t.prototype.stop=function(){clearInterval(this.loadingTimer)},t.prototype.setOptions=function(e){this.options=e||{}},t.prototype.adjust=function(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e},t.prototype.getLocation=function(e,t,i){var n=null!=e.x?e.x:\"center\";switch(n){case\"center\":n=Math.floor((this.canvasWidth-t)/2);break;case\"left\":n=0;break;case\"right\":n=this.canvasWidth-t}var a=null!=e.y?e.y:\"center\";switch(a){case\"center\":a=Math.floor((this.canvasHeight-i)/2);break;case\"top\":a=0;break;case\"bottom\":a=this.canvasHeight-i}return{x:n,y:a,width:t,height:i}},t}),i(\"zrender/Layer\",[\"require\",\"./mixin/Transformable\",\"./tool/util\",\"./config\"],function(e){function t(){return!1}function i(e,t,i){var n=document.createElement(t),a=i.getWidth(),o=i.getHeight();return n.style.position=\"absolute\",n.style.left=0,n.style.top=0,n.style.width=a+\"px\",n.style.height=o+\"px\",n.width=a*r.devicePixelRatio,n.height=o*r.devicePixelRatio,n.setAttribute(\"data-zr-dom-id\",e),n}var n=e(\"./mixin/Transformable\"),a=e(\"./tool/util\"),o=window.G_vmlCanvasManager,r=e(\"./config\"),s=function(e,a){this.id=e,this.dom=i(e,\"canvas\",a),this.dom.onselectstart=t,this.dom.style[\"-webkit-user-select\"]=\"none\",this.dom.style[\"user-select\"]=\"none\",this.dom.style[\"-webkit-touch-callout\"]=\"none\",this.dom.style[\"-webkit-tap-highlight-color\"]=\"rgba(0,0,0,0)\",this.dom.className=r.elementClassName,o&&o.initElement(this.dom),this.domBack=null,this.ctxBack=null,this.painter=a,this.unusedCount=0,this.config=null,this.dirty=!0,this.elCount=0,this.clearColor=0,this.motionBlur=!1,this.lastFrameAlpha=.7,this.zoomable=!1,this.panable=!1,this.maxZoom=1/0,this.minZoom=0,n.call(this)};return s.prototype.initContext=function(){this.ctx=this.dom.getContext(\"2d\");var e=r.devicePixelRatio;1!=e&&this.ctx.scale(e,e)},s.prototype.createBackBuffer=function(){if(!o){this.domBack=i(\"back-\"+this.id,\"canvas\",this.painter),this.ctxBack=this.domBack.getContext(\"2d\");var e=r.devicePixelRatio;1!=e&&this.ctxBack.scale(e,e)}},s.prototype.resize=function(e,t){var i=r.devicePixelRatio;this.dom.style.width=e+\"px\",this.dom.style.height=t+\"px\",this.dom.setAttribute(\"width\",e*i),this.dom.setAttribute(\"height\",t*i),1!=i&&this.ctx.scale(i,i),this.domBack&&(this.domBack.setAttribute(\"width\",e*i),this.domBack.setAttribute(\"height\",t*i),1!=i&&this.ctxBack.scale(i,i))},s.prototype.clear=function(){var e=this.dom,t=this.ctx,i=e.width,n=e.height,a=this.clearColor&&!o,s=this.motionBlur&&!o,l=this.lastFrameAlpha,h=r.devicePixelRatio;if(s&&(this.domBack||this.createBackBuffer(),this.ctxBack.globalCompositeOperation=\"copy\",this.ctxBack.drawImage(e,0,0,i/h,n/h)),t.clearRect(0,0,i/h,n/h),a&&(t.save(),t.fillStyle=this.clearColor,t.fillRect(0,0,i/h,n/h),t.restore()),s){var m=this.domBack;t.save(),t.globalAlpha=l,t.drawImage(m,0,0,i/h,n/h),t.restore()}},a.merge(s.prototype,n.prototype),s}),i(\"zrender/shape/Text\",[\"require\",\"../tool/area\",\"./Base\",\"../tool/util\"],function(e){\nvar t=e(\"../tool/area\"),i=e(\"./Base\"),n=function(e){i.call(this,e)};return n.prototype={type:\"text\",brush:function(e,i){var n=this.style;if(i&&(n=this.getHighlightStyle(n,this.highlightStyle||{})),\"undefined\"!=typeof n.text&&n.text!==!1){e.save(),this.doClip(e),this.setContext(e,n),this.setTransform(e),n.textFont&&(e.font=n.textFont),e.textAlign=n.textAlign||\"start\",e.textBaseline=n.textBaseline||\"middle\";var a,o=(n.text+\"\").split(\"\\n\"),r=t.getTextHeight(\"国\",n.textFont),s=this.getRect(n),l=n.x;a=\"top\"==n.textBaseline?s.y:\"bottom\"==n.textBaseline?s.y+r:s.y+r/2;for(var h=0,m=o.length;m>h;h++){if(n.maxWidth)switch(n.brushType){case\"fill\":e.fillText(o[h],l,a,n.maxWidth);break;case\"stroke\":e.strokeText(o[h],l,a,n.maxWidth);break;case\"both\":e.fillText(o[h],l,a,n.maxWidth),e.strokeText(o[h],l,a,n.maxWidth);break;default:e.fillText(o[h],l,a,n.maxWidth)}else switch(n.brushType){case\"fill\":e.fillText(o[h],l,a);break;case\"stroke\":e.strokeText(o[h],l,a);break;case\"both\":e.fillText(o[h],l,a),e.strokeText(o[h],l,a);break;default:e.fillText(o[h],l,a)}a+=r}e.restore()}},getRect:function(e){if(e.__rect)return e.__rect;var i=t.getTextWidth(e.text,e.textFont),n=t.getTextHeight(e.text,e.textFont),a=e.x;\"end\"==e.textAlign||\"right\"==e.textAlign?a-=i:\"center\"==e.textAlign&&(a-=i/2);var o;return o=\"top\"==e.textBaseline?e.y:\"bottom\"==e.textBaseline?e.y-n:e.y-n/2,e.__rect={x:a,y:o,width:i,height:n},e.__rect}},e(\"../tool/util\").inherits(n,i),n}),i(\"zrender/shape/Rectangle\",[\"require\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={type:\"rectangle\",_buildRadiusPath:function(e,t){var i,n,a,o,r=t.x,s=t.y,l=t.width,h=t.height,m=t.radius;\"number\"==typeof m?i=n=a=o=m:m instanceof Array?1===m.length?i=n=a=o=m[0]:2===m.length?(i=a=m[0],n=o=m[1]):3===m.length?(i=m[0],n=o=m[1],a=m[2]):(i=m[0],n=m[1],a=m[2],o=m[3]):i=n=a=o=0;var V;i+n>l&&(V=i+n,i*=l/V,n*=l/V),a+o>l&&(V=a+o,a*=l/V,o*=l/V),n+a>h&&(V=n+a,n*=h/V,a*=h/V),i+o>h&&(V=i+o,i*=h/V,o*=h/V),e.moveTo(r+i,s),e.lineTo(r+l-n,s),0!==n&&e.quadraticCurveTo(r+l,s,r+l,s+n),e.lineTo(r+l,s+h-a),0!==a&&e.quadraticCurveTo(r+l,s+h,r+l-a,s+h),e.lineTo(r+o,s+h),0!==o&&e.quadraticCurveTo(r,s+h,r,s+h-o),e.lineTo(r,s+i),0!==i&&e.quadraticCurveTo(r,s,r+i,s)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y)),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t},e.__rect}},e(\"../tool/util\").inherits(i,t),i}),i(\"zrender/tool/area\",[\"require\",\"./util\",\"./curve\"],function(e){\"use strict\";function t(e){return e%=C,0>e&&(e+=C),e}function i(e,t,i,o){if(!t||!e)return!1;var r=e.type;L=L||W.getContext();var s=n(e,t,i,o);if(\"undefined\"!=typeof s)return s;if(e.buildPath&&L.isPointInPath)return a(e,L,t,i,o);switch(r){case\"ellipse\":return!0;case\"trochoid\":var l=\"out\"==t.location?t.r1+t.r2+t.d:t.r1-t.r2+t.d;return d(t,i,o,l);case\"rose\":return d(t,i,o,t.maxr);default:return!1}}function n(e,t,i,n){var a=e.type;switch(a){case\"bezier-curve\":return\"undefined\"==typeof t.cpX2?l(t.xStart,t.yStart,t.cpX1,t.cpY1,t.xEnd,t.yEnd,t.lineWidth,i,n):s(t.xStart,t.yStart,t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd,t.lineWidth,i,n);case\"line\":return r(t.xStart,t.yStart,t.xEnd,t.yEnd,t.lineWidth,i,n);case\"polyline\":return m(t.pointList,t.lineWidth,i,n);case\"ring\":return V(t.x,t.y,t.r0,t.r,i,n);case\"circle\":return d(t.x,t.y,t.r,i,n);case\"sector\":var o=t.startAngle*Math.PI/180,h=t.endAngle*Math.PI/180;return t.clockWise||(o=-o,h=-h),p(t.x,t.y,t.r0,t.r,o,h,!t.clockWise,i,n);case\"path\":return t.pathArray&&k(t.pathArray,Math.max(t.lineWidth,5),t.brushType,i,n);case\"polygon\":case\"star\":case\"isogon\":return c(t.pointList,i,n);case\"text\":var u=t.__rect||e.getRect(t);return U(u.x,u.y,u.width,u.height,i,n);case\"rectangle\":case\"image\":return U(t.x,t.y,t.width,t.height,i,n)}}function a(e,t,i,n,a){return t.beginPath(),e.buildPath(t,i),t.closePath(),t.isPointInPath(n,a)}function o(e,t,n,a){return!i(e,t,n,a)}function r(e,t,i,n,a,o,r){if(0===a)return!1;var s=Math.max(a,5),l=0,h=e;if(r>t+s&&r>n+s||t-s>r&&n-s>r||o>e+s&&o>i+s||e-s>o&&i-s>o)return!1;if(e===i)return Math.abs(o-e)<=s/2;l=(t-n)/(e-i),h=(e*n-i*t)/(e-i);var m=l*o-r+h,V=m*m/(l*l+1);return s/2*s/2>=V}function s(e,t,i,n,a,o,r,s,l,h,m){if(0===l)return!1;var V=Math.max(l,5);if(m>t+V&&m>n+V&&m>o+V&&m>s+V||t-V>m&&n-V>m&&o-V>m&&s-V>m||h>e+V&&h>i+V&&h>a+V&&h>r+V||e-V>h&&i-V>h&&a-V>h&&r-V>h)return!1;var U=X.cubicProjectPoint(e,t,i,n,a,o,r,s,h,m,null);return V/2>=U}function l(e,t,i,n,a,o,r,s,l){if(0===r)return!1;var h=Math.max(r,5);if(l>t+h&&l>n+h&&l>o+h||t-h>l&&n-h>l&&o-h>l||s>e+h&&s>i+h&&s>a+h||e-h>s&&i-h>s&&a-h>s)return!1;var m=X.quadraticProjectPoint(e,t,i,n,a,o,s,l,null);return h/2>=m}function h(e,i,n,a,o,r,s,l,h){if(0===s)return!1;var m=Math.max(s,5);l-=e,h-=i;var V=Math.sqrt(l*l+h*h);if(V-m>n||n>V+m)return!1;if(Math.abs(a-o)>=C)return!0;if(r){var U=a;a=t(o),o=t(U)}else a=t(a),o=t(o);a>o&&(o+=C);var d=Math.atan2(h,l);return 0>d&&(d+=C),d>=a&&o>=d||d+C>=a&&o>=d+C}function m(e,t,i,n){for(var t=Math.max(t,10),a=0,o=e.length-1;o>a;a++){var s=e[a][0],l=e[a][1],h=e[a+1][0],m=e[a+1][1];if(r(s,l,h,m,t,i,n))return!0}return!1}function V(e,t,i,n,a,o){var r=(a-e)*(a-e)+(o-t)*(o-t);return n*n>r&&r>i*i}function U(e,t,i,n,a,o){return a>=e&&e+i>=a&&o>=t&&t+n>=o}function d(e,t,i,n,a){return i*i>(n-e)*(n-e)+(a-t)*(a-t)}function p(e,t,i,n,a,o,r,s,l){return h(e,t,(i+n)/2,a,o,r,n-i,s,l)}function c(e,t,i){for(var n=e.length,a=0,o=0,r=n-1;n>o;o++){var s=e[r][0],l=e[r][1],h=e[o][0],m=e[o][1];a+=u(s,l,h,m,t,i),r=o}return 0!==a}function u(e,t,i,n,a,o){if(o>t&&o>n||t>o&&n>o)return 0;if(n==t)return 0;var r=t>n?1:-1,s=(o-t)/(n-t),l=s*(i-e)+e;return l>a?r:0}function y(){var e=E[0];E[0]=E[1],E[1]=e}function g(e,t,i,n,a,o,r,s,l,h){if(h>t&&h>n&&h>o&&h>s||t>h&&n>h&&o>h&&s>h)return 0;var m=X.cubicRootAt(t,n,o,s,h,S);if(0===m)return 0;for(var V,U,d=0,p=-1,c=0;m>c;c++){var u=S[c],g=X.cubicAt(e,i,a,r,u);l>g||(0>p&&(p=X.cubicExtrema(t,n,o,s,E),E[1]<E[0]&&p>1&&y(),V=X.cubicAt(t,n,o,s,E[0]),p>1&&(U=X.cubicAt(t,n,o,s,E[1]))),d+=2==p?u<E[0]?t>V?1:-1:u<E[1]?V>U?1:-1:U>s?1:-1:u<E[0]?t>V?1:-1:V>s?1:-1)}return d}function b(e,t,i,n,a,o,r,s){if(s>t&&s>n&&s>o||t>s&&n>s&&o>s)return 0;var l=X.quadraticRootAt(t,n,o,s,S);if(0===l)return 0;var h=X.quadraticExtremum(t,n,o);if(h>=0&&1>=h){for(var m=0,V=X.quadraticAt(t,n,o,h),U=0;l>U;U++){var d=X.quadraticAt(e,i,a,S[U]);r>d||(m+=S[U]<h?t>V?1:-1:V>o?1:-1)}return m}var d=X.quadraticAt(e,i,a,S[0]);return r>d?0:t>o?1:-1}function f(e,i,n,a,o,r,s,l){if(l-=i,l>n||-n>l)return 0;var h=Math.sqrt(n*n-l*l);if(S[0]=-h,S[1]=h,Math.abs(a-o)>=C){a=0,o=C;var m=r?1:-1;return s>=S[0]+e&&s<=S[1]+e?m:0}if(r){var h=a;a=t(o),o=t(h)}else a=t(a),o=t(o);a>o&&(o+=C);for(var V=0,U=0;2>U;U++){var d=S[U];if(d+e>s){var p=Math.atan2(l,d),m=r?1:-1;0>p&&(p=C+p),(p>=a&&o>=p||p+C>=a&&o>=p+C)&&(p>Math.PI/2&&p<1.5*Math.PI&&(m=-m),V+=m)}}return V}function k(e,t,i,n,a){var o=0,m=0,V=0,U=0,d=0,p=!0,c=!0;i=i||\"fill\";for(var y=\"stroke\"===i||\"both\"===i,k=\"fill\"===i||\"both\"===i,x=0;x<e.length;x++){var _=e[x],L=_.points;if(p||\"M\"===_.command){if(x>0&&(k&&(o+=u(m,V,U,d,n,a)),0!==o))return!0;U=L[L.length-2],d=L[L.length-1],p=!1,c&&\"A\"!==_.command&&(c=!1,m=U,V=d)}switch(_.command){case\"M\":m=L[0],V=L[1];break;case\"L\":if(y&&r(m,V,L[0],L[1],t,n,a))return!0;k&&(o+=u(m,V,L[0],L[1],n,a)),m=L[0],V=L[1];break;case\"C\":if(y&&s(m,V,L[0],L[1],L[2],L[3],L[4],L[5],t,n,a))return!0;k&&(o+=g(m,V,L[0],L[1],L[2],L[3],L[4],L[5],n,a)),m=L[4],V=L[5];break;case\"Q\":if(y&&l(m,V,L[0],L[1],L[2],L[3],t,n,a))return!0;k&&(o+=b(m,V,L[0],L[1],L[2],L[3],n,a)),m=L[2],V=L[3];break;case\"A\":var W=L[0],X=L[1],v=L[2],w=L[3],K=L[4],I=L[5],J=Math.cos(K)*v+W,C=Math.sin(K)*w+X;c?(c=!1,U=J,d=C):o+=u(m,V,J,C);var S=(n-W)*w/v+W;if(y&&h(W,X,w,K,K+I,1-L[7],t,S,a))return!0;k&&(o+=f(W,X,w,K,K+I,1-L[7],S,a)),m=Math.cos(K+I)*v+W,V=Math.sin(K+I)*w+X;break;case\"z\":if(y&&r(m,V,U,d,t,n,a))return!0;p=!0}}return k&&(o+=u(m,V,U,d,n,a)),0!==o}function x(e,t){var i=e+\":\"+t;if(v[i])return v[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+\"\").split(\"\\n\");for(var n=0,a=0,o=e.length;o>a;a++)n=Math.max(L.measureText(e[a]).width,n);return L.restore(),v[i]=n,++K>J&&(K=0,v={}),n}function _(e,t){var i=e+\":\"+t;if(w[i])return w[i];L=L||W.getContext(),L.save(),t&&(L.font=t),e=(e+\"\").split(\"\\n\");var n=(L.measureText(\"国\").width+2)*e.length;return L.restore(),w[i]=n,++I>J&&(I=0,w={}),n}var L,W=e(\"./util\"),X=e(\"./curve\"),v={},w={},K=0,I=0,J=5e3,C=2*Math.PI,S=[-1,-1,-1],E=[-1,-1];return{isInside:i,isOutside:o,getTextWidth:x,getTextHeight:_,isInsidePath:k,isInsidePolygon:c,isInsideSector:p,isInsideCircle:d,isInsideLine:r,isInsideRect:U,isInsidePolyline:m,isInsideCubicStroke:s,isInsideQuadraticStroke:l}}),i(\"zrender/shape/Base\",[\"require\",\"../tool/matrix\",\"../tool/guid\",\"../tool/util\",\"../tool/log\",\"../mixin/Transformable\",\"../mixin/Eventful\",\"../tool/area\",\"../tool/color\"],function(e){function t(t,n,a,o,r,s,l){r&&(t.font=r),t.textAlign=s,t.textBaseline=l;var h=i(n,a,o,r,s,l);n=(n+\"\").split(\"\\n\");var m=e(\"../tool/area\").getTextHeight(\"国\",r);switch(l){case\"top\":o=h.y;break;case\"bottom\":o=h.y+m;break;default:o=h.y+m/2}for(var V=0,U=n.length;U>V;V++)t.fillText(n[V],a,o),o+=m}function i(t,i,n,a,o,r){var s=e(\"../tool/area\"),l=s.getTextWidth(t,a),h=s.getTextHeight(\"国\",a);switch(t=(t+\"\").split(\"\\n\"),o){case\"end\":case\"right\":i-=l;break;case\"center\":i-=l/2}switch(r){case\"top\":break;case\"bottom\":n-=h*t.length;break;default:n-=h*t.length/2}return{x:i,y:n,width:l,height:h*t.length}}var n=window.G_vmlCanvasManager,a=e(\"../tool/matrix\"),o=e(\"../tool/guid\"),r=e(\"../tool/util\"),s=e(\"../tool/log\"),l=e(\"../mixin/Transformable\"),h=e(\"../mixin/Eventful\"),m=function(e){e=e||{},this.id=e.id||o();for(var t in e)this[t]=e[t];this.style=this.style||{},this.highlightStyle=this.highlightStyle||null,this.parent=null,this.__dirty=!0,this.__clipShapes=[],l.call(this),h.call(this)};m.prototype.invisible=!1,m.prototype.ignore=!1,m.prototype.zlevel=0,m.prototype.draggable=!1,m.prototype.clickable=!1,m.prototype.hoverable=!0,m.prototype.z=0,m.prototype.brush=function(e,t){var i=this.beforeBrush(e,t);switch(e.beginPath(),this.buildPath(e,i),i.brushType){case\"both\":e.fill();case\"stroke\":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},m.prototype.beforeBrush=function(e,t){var i=this.style;return this.brushTypeOnly&&(i.brushType=this.brushTypeOnly),t&&(i=this.getHighlightStyle(i,this.highlightStyle||{},this.brushTypeOnly)),\"stroke\"==this.brushTypeOnly&&(i.strokeColor=i.strokeColor||i.color),e.save(),this.doClip(e),this.setContext(e,i),this.setTransform(e),i},m.prototype.afterBrush=function(e){e.restore()};var V=[[\"color\",\"fillStyle\"],[\"strokeColor\",\"strokeStyle\"],[\"opacity\",\"globalAlpha\"],[\"lineCap\",\"lineCap\"],[\"lineJoin\",\"lineJoin\"],[\"miterLimit\",\"miterLimit\"],[\"lineWidth\",\"lineWidth\"],[\"shadowBlur\",\"shadowBlur\"],[\"shadowColor\",\"shadowColor\"],[\"shadowOffsetX\",\"shadowOffsetX\"],[\"shadowOffsetY\",\"shadowOffsetY\"]];m.prototype.setContext=function(e,t){for(var i=0,n=V.length;n>i;i++){var a=V[i][0],o=t[a],r=V[i][1];\"undefined\"!=typeof o&&(e[r]=o)}};var U=a.create();return m.prototype.doClip=function(e){if(this.__clipShapes&&!n)for(var t=0;t<this.__clipShapes.length;t++){var i=this.__clipShapes[t];if(i.needTransform){var o=i.transform;a.invert(U,o),e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}if(e.beginPath(),i.buildPath(e,i.style),e.clip(),i.needTransform){var o=U;e.transform(o[0],o[1],o[2],o[3],o[4],o[5])}}},m.prototype.getHighlightStyle=function(t,i,n){var a={};for(var o in t)a[o]=t[o];var r=e(\"../tool/color\"),s=r.getHighlightColor();\"stroke\"!=t.brushType?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),a.brushType=\"both\"):\"stroke\"!=n?(a.strokeColor=s,a.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):a.strokeColor=i.strokeColor||r.mix(t.strokeColor,r.toRGB(s));for(var o in i)\"undefined\"!=typeof i[o]&&(a[o]=i[o]);return a},m.prototype.getHighlightZoom=function(){return\"text\"!=this.type?6:2},m.prototype.drift=function(e,t){this.position[0]+=e,this.position[1]+=t},m.prototype.buildPath=function(){s(\"buildPath not implemented in \"+this.type)},m.prototype.getRect=function(){s(\"getRect not implemented in \"+this.type)},m.prototype.isCover=function(t,i){var n=this.transformCoordToLocal(t,i);return t=n[0],i=n[1],this.isCoverRect(t,i)?e(\"../tool/area\").isInside(this,this.style,t,i):!1},m.prototype.isCoverRect=function(e,t){var i=this.style.__rect;return i||(i=this.style.__rect=this.getRect(this.style)),e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height},m.prototype.drawText=function(e,i,n){if(\"undefined\"!=typeof i.text&&i.text!==!1){var a=i.textColor||i.color||i.strokeColor;e.fillStyle=a;var o,r,s,l,h=10,m=i.textPosition||this.textPosition||\"top\";switch(m){case\"inside\":case\"top\":case\"bottom\":case\"left\":case\"right\":if(this.getRect){var V=(n||i).__rect||this.getRect(n||i);switch(m){case\"inside\":s=V.x+V.width/2,l=V.y+V.height/2,o=\"center\",r=\"middle\",\"stroke\"!=i.brushType&&a==i.color&&(e.fillStyle=\"#fff\");break;case\"left\":s=V.x-h,l=V.y+V.height/2,o=\"end\",r=\"middle\";break;case\"right\":s=V.x+V.width+h,l=V.y+V.height/2,o=\"start\",r=\"middle\";break;case\"top\":s=V.x+V.width/2,l=V.y-h,o=\"center\",r=\"bottom\";break;case\"bottom\":s=V.x+V.width/2,l=V.y+V.height+h,o=\"center\",r=\"top\"}}break;case\"start\":case\"end\":var U=i.pointList||[[i.xStart||0,i.yStart||0],[i.xEnd||0,i.yEnd||0]],d=U.length;if(2>d)return;var p,c,u,y;switch(m){case\"start\":p=U[1][0],c=U[0][0],u=U[1][1],y=U[0][1];break;case\"end\":p=U[d-2][0],c=U[d-1][0],u=U[d-2][1],y=U[d-1][1]}s=c,l=y;var g=Math.atan((u-y)/(c-p))/Math.PI*180;0>c-p?g+=180:0>u-y&&(g+=360),h=5,g>=30&&150>=g?(o=\"center\",r=\"bottom\",l-=h):g>150&&210>g?(o=\"right\",r=\"middle\",s-=h):g>=210&&330>=g?(o=\"center\",r=\"top\",l+=h):(o=\"left\",r=\"middle\",s+=h);break;case\"specific\":s=i.textX||0,l=i.textY||0,o=\"start\",r=\"middle\"}null!=s&&null!=l&&t(e,i.text,s,l,i.textFont,i.textAlign||o,i.textBaseline||r)}},m.prototype.modSelf=function(){this.__dirty=!0,this.style&&(this.style.__rect=null),this.highlightStyle&&(this.highlightStyle.__rect=null)},m.prototype.isSilent=function(){return!(this.hoverable||this.draggable||this.clickable||this.onmousemove||this.onmouseover||this.onmouseout||this.onmousedown||this.onmouseup||this.onclick||this.ondragenter||this.ondragover||this.ondragleave||this.ondrop)},r.merge(m.prototype,l.prototype,!0),r.merge(m.prototype,h.prototype,!0),m}),i(\"zrender/tool/curve\",[\"require\",\"./vector\"],function(e){function t(e){return e>-u&&u>e}function i(e){return e>u||-u>e}function n(e,t,i,n,a){var o=1-a;return o*o*(o*e+3*a*t)+a*a*(a*n+3*o*i)}function a(e,t,i,n,a){var o=1-a;return 3*(((t-e)*o+2*(i-t)*a)*o+(n-i)*a*a)}function o(e,i,n,a,o,r){var s=a+3*(i-n)-e,l=3*(n-2*i+e),h=3*(i-e),m=e-o,V=l*l-3*s*h,U=l*h-9*s*m,d=h*h-3*l*m,p=0;if(t(V)&&t(U))if(t(l))r[0]=0;else{var c=-h/l;c>=0&&1>=c&&(r[p++]=c)}else{var u=U*U-4*V*d;if(t(u)){var b=U/V,c=-l/s+b,f=-b/2;c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f)}else if(u>0){var k=Math.sqrt(u),x=V*l+1.5*s*(-U+k),_=V*l+1.5*s*(-U-k);x=0>x?-Math.pow(-x,g):Math.pow(x,g),_=0>_?-Math.pow(-_,g):Math.pow(_,g);var c=(-l-(x+_))/(3*s);c>=0&&1>=c&&(r[p++]=c)}else{var L=(2*V*l-3*s*U)/(2*Math.sqrt(V*V*V)),W=Math.acos(L)/3,X=Math.sqrt(V),v=Math.cos(W),c=(-l-2*X*v)/(3*s),f=(-l+X*(v+y*Math.sin(W)))/(3*s),w=(-l+X*(v-y*Math.sin(W)))/(3*s);c>=0&&1>=c&&(r[p++]=c),f>=0&&1>=f&&(r[p++]=f),w>=0&&1>=w&&(r[p++]=w)}}return p}function r(e,n,a,o,r){var s=6*a-12*n+6*e,l=9*n+3*o-3*e-9*a,h=3*n-3*e,m=0;if(t(l)){if(i(s)){var V=-h/s;V>=0&&1>=V&&(r[m++]=V)}}else{var U=s*s-4*l*h;if(t(U))r[0]=-s/(2*l);else if(U>0){var d=Math.sqrt(U),V=(-s+d)/(2*l),p=(-s-d)/(2*l);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function s(e,t,i,n,a,o){var r=(t-e)*a+e,s=(i-t)*a+t,l=(n-i)*a+i,h=(s-r)*a+r,m=(l-s)*a+s,V=(m-h)*a+h;o[0]=e,o[1]=r,o[2]=h,o[3]=V,o[4]=V,o[5]=m,o[6]=l,o[7]=n}function l(e,t,i,a,o,r,s,l,h,m,V){var U,d=.005,p=1/0;b[0]=h,b[1]=m;for(var y=0;1>y;y+=.05){f[0]=n(e,i,o,s,y),f[1]=n(t,a,r,l,y);var g=c.distSquare(b,f);p>g&&(U=y,p=g)}p=1/0;for(var x=0;32>x&&!(u>d);x++){var _=U-d,L=U+d;f[0]=n(e,i,o,s,_),f[1]=n(t,a,r,l,_);var g=c.distSquare(f,b);if(_>=0&&p>g)U=_,p=g;else{k[0]=n(e,i,o,s,L),k[1]=n(t,a,r,l,L);var W=c.distSquare(k,b);1>=L&&p>W?(U=L,p=W):d*=.5}}return V&&(V[0]=n(e,i,o,s,U),V[1]=n(t,a,r,l,U)),Math.sqrt(p)}function h(e,t,i,n){var a=1-n;return a*(a*e+2*n*t)+n*n*i}function m(e,t,i,n){return 2*((1-n)*(t-e)+n*(i-t))}function V(e,n,a,o,r){var s=e-2*n+a,l=2*(n-e),h=e-o,m=0;if(t(s)){if(i(l)){var V=-h/l;V>=0&&1>=V&&(r[m++]=V)}}else{var U=l*l-4*s*h;if(t(U)){var V=-l/(2*s);V>=0&&1>=V&&(r[m++]=V)}else if(U>0){var d=Math.sqrt(U),V=(-l+d)/(2*s),p=(-l-d)/(2*s);V>=0&&1>=V&&(r[m++]=V),p>=0&&1>=p&&(r[m++]=p)}}return m}function U(e,t,i){var n=e+i-2*t;return 0===n?.5:(e-t)/n}function d(e,t,i,n,a){var o=(t-e)*n+e,r=(i-t)*n+t,s=(r-o)*n+o;a[0]=e,a[1]=o,a[2]=s,a[3]=s,a[4]=r,a[5]=i}function p(e,t,i,n,a,o,r,s,l){var m,V=.005,U=1/0;b[0]=r,b[1]=s;for(var d=0;1>d;d+=.05){f[0]=h(e,i,a,d),f[1]=h(t,n,o,d);var p=c.distSquare(b,f);U>p&&(m=d,U=p)}U=1/0;for(var y=0;32>y&&!(u>V);y++){var g=m-V,x=m+V;f[0]=h(e,i,a,g),f[1]=h(t,n,o,g);var p=c.distSquare(f,b);if(g>=0&&U>p)m=g,U=p;else{k[0]=h(e,i,a,x),k[1]=h(t,n,o,x);var _=c.distSquare(k,b);1>=x&&U>_?(m=x,U=_):V*=.5}}return l&&(l[0]=h(e,i,a,m),l[1]=h(t,n,o,m)),Math.sqrt(U)}var c=e(\"./vector\"),u=1e-4,y=Math.sqrt(3),g=1/3,b=c.create(),f=c.create(),k=c.create();return{cubicAt:n,cubicDerivativeAt:a,cubicRootAt:o,cubicExtrema:r,cubicSubdivide:s,cubicProjectPoint:l,quadraticAt:h,quadraticDerivativeAt:m,quadraticRootAt:V,quadraticExtremum:U,quadraticSubdivide:d,quadraticProjectPoint:p}}),i(\"zrender/mixin/Transformable\",[\"require\",\"../tool/matrix\",\"../tool/vector\"],function(e){\"use strict\";function t(e){return e>-s&&s>e}function i(e){return e>s||-s>e}var n=e(\"../tool/matrix\"),a=e(\"../tool/vector\"),o=[0,0],r=n.translate,s=5e-5,l=function(){this.position||(this.position=[0,0]),\"undefined\"==typeof this.rotation&&(this.rotation=[0,0,0]),this.scale||(this.scale=[1,1,0,0]),this.needLocalTransform=!1,this.needTransform=!1};return l.prototype={constructor:l,updateNeedTransform:function(){this.needLocalTransform=i(this.rotation[0])||i(this.position[0])||i(this.position[1])||i(this.scale[0]-1)||i(this.scale[1]-1)},updateTransform:function(){this.updateNeedTransform();var e=this.parent&&this.parent.needTransform;if(this.needTransform=this.needLocalTransform||e,this.needTransform){var t=this.transform||n.create();if(n.identity(t),this.needLocalTransform){var a=this.scale;if(i(a[0])||i(a[1])){o[0]=-a[2]||0,o[1]=-a[3]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.scale(t,t,a),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}if(this.rotation instanceof Array){if(0!==this.rotation[0]){o[0]=-this.rotation[1]||0,o[1]=-this.rotation[2]||0;var s=i(o[0])||i(o[1]);s&&r(t,t,o),n.rotate(t,t,this.rotation[0]),s&&(o[0]=-o[0],o[1]=-o[1],r(t,t,o))}}else 0!==this.rotation&&n.rotate(t,t,this.rotation);(i(this.position[0])||i(this.position[1]))&&r(t,t,this.position)}e&&(this.needLocalTransform?n.mul(t,this.parent.transform,t):n.copy(t,this.parent.transform)),this.transform=t,this.invTransform=this.invTransform||n.create(),n.invert(this.invTransform,t)}},setTransform:function(e){if(this.needTransform){var t=this.transform;e.transform(t[0],t[1],t[2],t[3],t[4],t[5])}},lookAt:function(){var e=a.create();return function(i){this.transform||(this.transform=n.create());var o=this.transform;if(a.sub(e,i,this.position),!t(e[0])||!t(e[1])){a.normalize(e,e);var r=this.scale;o[2]=e[0]*r[1],o[3]=e[1]*r[1],o[0]=e[1]*r[0],o[1]=-e[0]*r[0],o[4]=this.position[0],o[5]=this.position[1],this.decomposeTransform()}}}(),decomposeTransform:function(){if(this.transform){var e=this.transform,t=e[0]*e[0]+e[1]*e[1],n=this.position,a=this.scale,o=this.rotation;i(t-1)&&(t=Math.sqrt(t));var r=e[2]*e[2]+e[3]*e[3];i(r-1)&&(r=Math.sqrt(r)),n[0]=e[4],n[1]=e[5],a[0]=t,a[1]=r,a[2]=a[3]=0,o[0]=Math.atan2(-e[1]/r,e[0]/t),o[1]=o[2]=0}},transformCoordToLocal:function(e,t){var i=[e,t];return this.needTransform&&this.invTransform&&a.applyTransform(i,i,this.invTransform),i}},l}),i(\"zrender/Group\",[\"require\",\"./tool/guid\",\"./tool/util\",\"./mixin/Transformable\",\"./mixin/Eventful\"],function(e){var t=e(\"./tool/guid\"),i=e(\"./tool/util\"),n=e(\"./mixin/Transformable\"),a=e(\"./mixin/Eventful\"),o=function(e){e=e||{},this.id=e.id||t();for(var i in e)this[i]=e[i];this.type=\"group\",this.clipShape=null,this._children=[],this._storage=null,this.__dirty=!0,n.call(this),a.call(this)};return o.prototype.ignore=!1,o.prototype.children=function(){return this._children.slice()},o.prototype.childAt=function(e){return this._children[e]},o.prototype.addChild=function(e){e!=this&&e.parent!=this&&(e.parent&&e.parent.removeChild(e),this._children.push(e),e.parent=this,this._storage&&this._storage!==e._storage&&(this._storage.addToMap(e),e instanceof o&&e.addChildrenToStorage(this._storage)))},o.prototype.removeChild=function(e){var t=i.indexOf(this._children,e);t>=0&&this._children.splice(t,1),e.parent=null,this._storage&&(this._storage.delFromMap(e.id),e instanceof o&&e.delChildrenFromStorage(this._storage))},o.prototype.clearChildren=function(){for(var e=0;e<this._children.length;e++){var t=this._children[e];this._storage&&(this._storage.delFromMap(t.id),t instanceof o&&t.delChildrenFromStorage(this._storage))}this._children.length=0},o.prototype.eachChild=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a)}},o.prototype.traverse=function(e,t){for(var i=!!t,n=0;n<this._children.length;n++){var a=this._children[n];i?e.call(t,a):e(a),\"group\"===a.type&&a.traverse(e,t)}},o.prototype.addChildrenToStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.addToMap(i),i instanceof o&&i.addChildrenToStorage(e)}},o.prototype.delChildrenFromStorage=function(e){for(var t=0;t<this._children.length;t++){var i=this._children[t];e.delFromMap(i.id),i instanceof o&&i.delChildrenFromStorage(e)}},o.prototype.modSelf=function(){this.__dirty=!0},i.merge(o.prototype,n.prototype,!0),i.merge(o.prototype,a.prototype,!0),o}),i(\"zrender/animation/Clip\",[\"require\",\"./easing\"],function(e){function t(e){this._targetPool=e.target||{},this._targetPool instanceof Array||(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+1e3*this._life,this.loop=\"undefined\"==typeof e.loop?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||\"Linear\",this.onframe=e.onframe,this.ondestroy=e.ondestroy,this.onrestart=e.onrestart}var i=e(\"./easing\");return t.prototype={step:function(e){var t=(e-this._startTime)/this._life;if(!(0>t)){t=Math.min(t,1);var n=\"string\"==typeof this.easing?i[this.easing]:this.easing,a=\"function\"==typeof n?n(t):t;return this.fire(\"frame\",a),1==t?this.loop?(this.restart(),\"restart\"):(this.__needsRemove=!0,\"destroy\"):null}},restart:function(){var e=(new Date).getTime(),t=(e-this._startTime)%this._life;this._startTime=(new Date).getTime()-t+this.gap,this.__needsRemove=!1},fire:function(e,t){for(var i=0,n=this._targetPool.length;n>i;i++)this[\"on\"+e]&&this[\"on\"+e](this._targetPool[i],t)},constructor:t},t}),i(\"zrender/animation/easing\",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return 0===e?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return 1===e?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return 0===e?0:1===e?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),-(i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)))},ElasticOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),i*Math.pow(2,-10*e)*Math.sin(2*(e-t)*Math.PI/n)+1)},ElasticInOut:function(e){var t,i=.1,n=.4;return 0===e?0:1===e?1:(!i||1>i?(i=1,t=n/4):t=n*Math.asin(1/i)/(2*Math.PI),(e*=2)<1?-.5*i*Math.pow(2,10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n):i*Math.pow(2,-10*(e-=1))*Math.sin(2*(e-t)*Math.PI/n)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return 1/2.75>e?7.5625*e*e:2/2.75>e?7.5625*(e-=1.5/2.75)*e+.75:2.5/2.75>e?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return.5>t?.5*e.BounceIn(2*t):.5*e.BounceOut(2*t-1)+.5}};return e}),i(\"echarts/chart/base\",[\"require\",\"zrender/shape/Image\",\"../util/shape/Icon\",\"../util/shape/MarkLine\",\"../util/shape/Symbol\",\"zrender/shape/Polyline\",\"zrender/shape/ShapeBundle\",\"../config\",\"../util/ecData\",\"../util/ecAnimation\",\"../util/ecEffect\",\"../util/accMath\",\"../component/base\",\"../layout/EdgeBundling\",\"zrender/tool/util\",\"zrender/tool/area\"],function(e){function t(e){return null!=e.x&&null!=e.y}function i(e,t,i,n,a){p.call(this,e,t,i,n,a);var o=this;this.selectedMap={},this.lastShapeList=[],this.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=e.target;t.highlightStyle=t.highlightStyle||{};var i=t.highlightStyle,n=i.brushTyep,a=i.strokeColor,r=i.lineWidth;i.brushType=\"stroke\",i.strokeColor=o.ecTheme.calculableColor||h.calculableColor,i.lineWidth=\"icon\"===t.type?30:10,o.zr.addHoverShape(t),setTimeout(function(){i&&(i.brushType=n,i.strokeColor=a,i.lineWidth=r)},20)},ondrop:function(e){null!=m.get(e.dragged,\"data\")&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}}}var n=e(\"zrender/shape/Image\"),a=e(\"../util/shape/Icon\"),o=e(\"../util/shape/MarkLine\"),r=e(\"../util/shape/Symbol\"),s=e(\"zrender/shape/Polyline\"),l=e(\"zrender/shape/ShapeBundle\"),h=e(\"../config\"),m=e(\"../util/ecData\"),V=e(\"../util/ecAnimation\"),U=e(\"../util/ecEffect\"),d=e(\"../util/accMath\"),p=e(\"../component/base\"),c=e(\"../layout/EdgeBundling\"),u=e(\"zrender/tool/util\"),y=e(\"zrender/tool/area\");return i.prototype={setCalculable:function(e){return e.dragEnableTime=this.ecTheme.DRAG_ENABLE_TIME||h.DRAG_ENABLE_TIME,e.ondragover=this.shapeHandler.ondragover,e.ondragend=this.shapeHandler.ondragend,e.ondrop=this.shapeHandler.ondrop,e},ondrop:function(e,t){if(this.isDrop&&e.target&&!t.dragIn){var i,n=e.target,a=e.dragged,o=m.get(n,\"seriesIndex\"),r=m.get(n,\"dataIndex\"),s=this.series,l=this.component.legend;if(-1===r){if(m.get(a,\"seriesIndex\")==o)return t.dragOut=t.dragIn=t.needRefresh=!0,void(this.isDrop=!1);i={value:m.get(a,\"value\"),name:m.get(a,\"name\")},this.type===h.CHART_TYPE_PIE&&i.value<0&&(i.value=0);for(var V=!1,U=s[o].data,p=0,c=U.length;c>p;p++)U[p].name===i.name&&\"-\"===U[p].value&&(s[o].data[p].value=i.value,V=!0);!V&&s[o].data.push(i),l&&l.add(i.name,a.style.color||a.style.strokeColor)}else i=s[o].data[r]||\"-\",null!=i.value?(s[o].data[r].value=\"-\"!=i.value?d.accAdd(s[o].data[r].value,m.get(a,\"value\")):m.get(a,\"value\"),(this.type===h.CHART_TYPE_FUNNEL||this.type===h.CHART_TYPE_PIE)&&(l&&1===l.getRelatedAmount(i.name)&&this.component.legend.del(i.name),i.name+=this.option.nameConnector+m.get(a,\"name\"),l&&l.add(i.name,a.style.color||a.style.strokeColor))):s[o].data[r]=\"-\"!=i?d.accAdd(s[o].data[r],m.get(a,\"value\")):m.get(a,\"value\");t.dragIn=t.dragIn||!0,this.isDrop=!1;var u=this;setTimeout(function(){u.zr.trigger(\"mousemove\",e.event)},300)}},ondragend:function(e,t){if(this.isDragend&&e.target&&!t.dragOut){var i=e.target,n=m.get(i,\"seriesIndex\"),a=m.get(i,\"dataIndex\"),o=this.series;if(null!=o[n].data[a].value){o[n].data[a].value=\"-\";var r=o[n].data[a].name,s=this.component.legend;s&&0===s.getRelatedAmount(r)&&s.del(r)}else o[n].data[a]=\"-\";t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},onlegendSelected:function(e,t){var i=e.selected;for(var n in this.selectedMap)this.selectedMap[n]!=i[n]&&(t.needRefresh=!0),this.selectedMap[n]=i[n]},_buildPosition:function(){this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this._sIndex2ColorMap={},this.selectedMap={},this.xMarkMap={};for(var e,t,i,n,a=this.series,o={top:[],bottom:[],left:[],right:[],other:[]},r=0,s=a.length;s>r;r++)a[r].type===this.type&&(a[r]=this.reformOption(a[r]),this.legendHoverLink=a[r].legendHoverLink||this.legendHoverLink,e=a[r].xAxisIndex,t=a[r].yAxisIndex,i=this.component.xAxis.getAxis(e),n=this.component.yAxis.getAxis(t),i.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[i.getPosition()].push(r):n.type===h.COMPONENT_TYPE_AXIS_CATEGORY?o[n.getPosition()].push(r):o.other.push(r));for(var l in o)o[l].length>0&&this._buildSinglePosition(l,o[l]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){switch(e){case\"bottom\":case\"top\":this._buildHorizontal(t,a,n,this.xMarkMap);break;case\"left\":case\"right\":this._buildVertical(t,a,n,this.xMarkMap);break;case\"other\":this._buildOther(t,a,n,this.xMarkMap)}for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n,a,o=this.series,r=0,s={},l=\"__kener__stack__\",m=this.component.legend,V=[],U=0,d=0,p=e.length;p>d;d++){if(t=o[e[d]],n=t.name,this._sIndex2ShapeMap[e[d]]=this._sIndex2ShapeMap[e[d]]||this.query(t,\"symbol\")||this._symbol[d%this._symbol.length],m){if(this.selectedMap[n]=m.isSelected(n),this._sIndex2ColorMap[e[d]]=m.getColor(n),a=m.getItemShape(n)){var c=a.style;if(this.type==h.CHART_TYPE_LINE)c.iconType=\"legendLineIcon\",c.symbol=this._sIndex2ShapeMap[e[d]];else if(t.itemStyle.normal.barBorderWidth>0){var u=a.highlightStyle;c.brushType=\"both\",c.x+=1,c.y+=1,c.width-=2,c.height-=2,c.strokeColor=u.strokeColor=t.itemStyle.normal.barBorderColor,u.lineWidth=3}m.setItemShape(n,a)}}else this.selectedMap[n]=!0,this._sIndex2ColorMap[e[d]]=this.zr.getColor(e[d]);this.selectedMap[n]&&(i=t.stack||l+e[d],null==s[i]?(s[i]=r,V[r]=[e[d]],r++):V[s[i]].push(e[d])),U=Math.max(U,t.data.length)}return{locationMap:V,maxDataLength:U}},_calculMarkMapXY:function(e,t,i){for(var n=this.series,a=0,o=t.length;o>a;a++)for(var r=0,s=t[a].length;s>r;r++){var l=t[a][r],h=\"xy\"==i?0:\"\",m=this.component.grid,V=e[l];if(\"-1\"!=i.indexOf(\"x\")){V[\"counter\"+h]>0&&(V[\"average\"+h]=V[\"sum\"+h]/V[\"counter\"+h]);var U=this.component.xAxis.getAxis(n[l].xAxisIndex||0).getCoord(V[\"average\"+h]);V[\"averageLine\"+h]=[[U,m.getYend()],[U,m.getY()]],V[\"minLine\"+h]=[[V[\"minX\"+h],m.getYend()],[V[\"minX\"+h],m.getY()]],V[\"maxLine\"+h]=[[V[\"maxX\"+h],m.getYend()],[V[\"maxX\"+h],m.getY()]],V.isHorizontal=!1}if(h=\"xy\"==i?1:\"\",\"-1\"!=i.indexOf(\"y\")){V[\"counter\"+h]>0&&(V[\"average\"+h]=V[\"sum\"+h]/V[\"counter\"+h]);var d=this.component.yAxis.getAxis(n[l].yAxisIndex||0).getCoord(V[\"average\"+h]);V[\"averageLine\"+h]=[[m.getX(),d],[m.getXend(),d]],V[\"minLine\"+h]=[[m.getX(),V[\"minY\"+h]],[m.getXend(),V[\"minY\"+h]]],V[\"maxLine\"+h]=[[m.getX(),V[\"maxY\"+h]],[m.getXend(),V[\"maxY\"+h]]],V.isHorizontal=!0}}},addLabel:function(e,t,i,n,a){var o=[i,t],r=this.deepMerge(o,\"itemStyle.normal.label\"),s=this.deepMerge(o,\"itemStyle.emphasis.label\"),l=r.textStyle||{},h=s.textStyle||{};\n\nif(r.show){var m=e.style;m.text=this._getLabelText(t,i,n,\"normal\"),m.textPosition=null==r.position?\"horizontal\"===a?\"right\":\"top\":r.position,m.textColor=l.color,m.textFont=this.getFont(l),m.textAlign=l.align,m.textBaseline=l.baseline}if(s.show){var V=e.highlightStyle;V.text=this._getLabelText(t,i,n,\"emphasis\"),V.textPosition=r.show?e.style.textPosition:null==s.position?\"horizontal\"===a?\"right\":\"top\":s.position,V.textColor=h.color,V.textFont=this.getFont(h),V.textAlign=h.align,V.textBaseline=h.baseline}return e},_getLabelText:function(e,t,i,n){var a=this.deepQuery([t,e],\"itemStyle.\"+n+\".label.formatter\");a||\"emphasis\"!==n||(a=this.deepQuery([t,e],\"itemStyle.normal.label.formatter\"));var o=this.getDataFromOption(t,\"-\");return a?\"function\"==typeof a?a.call(this.myChart,{seriesName:e.name,series:e,name:i,value:o,data:t,status:n}):\"string\"==typeof a?a=a.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\").replace(\"{a0}\",e.name).replace(\"{b0}\",i).replace(\"{c0}\",this.numAddCommas(o)):void 0:o instanceof Array?null!=o[2]?this.numAddCommas(o[2]):o[0]+\" , \"+o[1]:this.numAddCommas(o)},buildMark:function(e){var t=this.series[e];this.selectedMap[t.name]&&(t.markLine&&this._buildMarkLine(e),t.markPoint&&this._buildMarkPoint(e))},_buildMarkPoint:function(e){for(var t,i,n=(this.markAttachStyle||{})[e],a=this.series[e],o=u.clone(a.markPoint),r=0,s=o.data.length;s>r;r++)t=o.data[r],i=this.getMarkCoord(e,t),t.x=null!=t.x?t.x:i[0],t.y=null!=t.y?t.y:i[1],!t.type||\"max\"!==t.type&&\"min\"!==t.type||(t.value=i[3],t.name=t.name||t.type,t.symbolSize=t.symbolSize||y.getTextWidth(i[3],this.getFont())/2+5);for(var l=this._markPoint(e,o),r=0,s=l.length;s>r;r++){var m=l[r];m.zlevel=a.zlevel,m.z=a.z+1;for(var V in n)m[V]=u.clone(n[V]);this.shapeList.push(m)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var r=0,s=l.length;s>r;r++)this.zr.addShape(l[r])},_buildMarkLine:function(e){for(var t,i=(this.markAttachStyle||{})[e],n=this.series[e],a=u.clone(n.markLine),o=0,r=a.data.length;r>o;o++){var s=a.data[o];!s.type||\"max\"!==s.type&&\"min\"!==s.type&&\"average\"!==s.type?t=[this.getMarkCoord(e,s[0]),this.getMarkCoord(e,s[1])]:(t=this.getMarkCoord(e,s),a.data[o]=[u.clone(s),{}],a.data[o][0].name=s.name||s.type,a.data[o][0].value=\"average\"!==s.type?t[3]:+t[3].toFixed(null!=a.precision?a.precision:this.deepQuery([this.ecTheme,h],\"markLine.precision\")),t=t[2],s=[{},{}]),null!=t&&null!=t[0]&&null!=t[1]&&(a.data[o][0].x=null!=s[0].x?s[0].x:t[0][0],a.data[o][0].y=null!=s[0].y?s[0].y:t[0][1],a.data[o][1].x=null!=s[1].x?s[1].x:t[1][0],a.data[o][1].y=null!=s[1].y?s[1].y:t[1][1])}var m=this._markLine(e,a),V=a.large;if(V){var U=new l({style:{shapeList:m}}),d=m[0];if(d){u.merge(U.style,d.style),u.merge(U.highlightStyle={},d.highlightStyle),U.style.brushType=\"stroke\",U.zlevel=n.zlevel,U.z=n.z+1,U.hoverable=!1;for(var p in i)U[p]=u.clone(i[p])}this.shapeList.push(U),this.zr.addShape(U),U._mark=\"largeLine\";var c=a.effect;c.show&&(U.effect=c)}else{for(var o=0,r=m.length;r>o;o++){var y=m[o];y.zlevel=n.zlevel,y.z=n.z+1;for(var p in i)y[p]=u.clone(i[p]);this.shapeList.push(y)}if(this.type===h.CHART_TYPE_FORCE||this.type===h.CHART_TYPE_CHORD)for(var o=0,r=m.length;r>o;o++)this.zr.addShape(m[o])}},_markPoint:function(e,t){var i=this.series[e],n=this.component;u.merge(u.merge(t,u.clone(this.ecTheme.markPoint||{})),u.clone(h.markPoint)),t.name=i.name;var a,o,r,s,l,V,U,d=[],p=t.data,c=n.dataRange,y=n.legend,g=this.zr.getWidth(),b=this.zr.getHeight();if(t.large)a=this.getLargeMarkPointShape(e,t),a._mark=\"largePoint\",a&&d.push(a);else for(var f=0,k=p.length;k>f;f++)null!=p[f].x&&null!=p[f].y&&(r=null!=p[f].value?p[f].value:\"\",y&&(o=y.getColor(i.name)),c&&(o=isNaN(r)?o:c.getColor(r),s=[p[f],t],l=this.deepQuery(s,\"itemStyle.normal.color\")||o,V=this.deepQuery(s,\"itemStyle.emphasis.color\")||l,null==l&&null==V)||(o=null==o?this.zr.getColor(e):o,p[f].tooltip=p[f].tooltip||t.tooltip||{trigger:\"item\"},p[f].name=null!=p[f].name?p[f].name:\"\",p[f].value=r,a=this.getSymbolShape(t,e,p[f],f,p[f].name,this.parsePercent(p[f].x,g),this.parsePercent(p[f].y,b),\"pin\",o,\"rgba(0,0,0,0)\",\"horizontal\"),a._mark=\"point\",U=this.deepMerge([p[f],t],\"effect\"),U.show&&(a.effect=U),i.type===h.CHART_TYPE_MAP&&(a._geo=this.getMarkGeo(p[f])),m.pack(a,i,e,p[f],f,p[f].name,r),d.push(a)));return d},_markLine:function(){function e(e,t){e[t]=e[t]instanceof Array?e[t].length>1?e[t]:[e[t][0],e[t][0]]:[e[t],e[t]]}return function(i,n){var a=this.series[i],o=this.component,r=o.dataRange,s=o.legend;u.merge(u.merge(n,u.clone(this.ecTheme.markLine||{})),u.clone(h.markLine));var l=s?s.getColor(a.name):this.zr.getColor(i);e(n,\"symbol\"),e(n,\"symbolSize\"),e(n,\"symbolRotate\");for(var V=n.data,U=[],d=this.zr.getWidth(),p=this.zr.getHeight(),y=0;y<V.length;y++){var g=V[y];if(t(g[0])&&t(g[1])){var b=this.deepMerge(g),f=[b,n],k=l,x=null!=b.value?b.value:\"\";if(r){k=isNaN(x)?k:r.getColor(x);var _=this.deepQuery(f,\"itemStyle.normal.color\")||k,L=this.deepQuery(f,\"itemStyle.emphasis.color\")||_;if(null==_&&null==L)continue}g[0].tooltip=b.tooltip||n.tooltip||{trigger:\"item\"},g[0].name=g[0].name||\"\",g[1].name=g[1].name||\"\",g[0].value=x,U.push({points:[[this.parsePercent(g[0].x,d),this.parsePercent(g[0].y,p)],[this.parsePercent(g[1].x,d),this.parsePercent(g[1].y,p)]],rawData:g,color:k})}}var W=this.query(n,\"bundling.enable\");if(W){var X=new c;X.maxTurningAngle=this.query(n,\"bundling.maxTurningAngle\")/180*Math.PI,U=X.run(U)}n.name=a.name;for(var v=[],y=0,w=U.length;w>y;y++){var K=U[y],I=K.rawEdge||K,g=I.rawData,x=null!=g.value?g.value:\"\",J=this.getMarkLineShape(n,i,g,y,K.points,W,I.color);J._mark=\"line\";var C=this.deepMerge([g[0],g[1],n],\"effect\");C.show&&(J.effect=C,J.effect.large=n.large),a.type===h.CHART_TYPE_MAP&&(J._geo=[this.getMarkGeo(g[0]),this.getMarkGeo(g[1])]),m.pack(J,a,i,g[0],y,g[0].name+(\"\"!==g[1].name?\" > \"+g[1].name:\"\"),x),v.push(J)}return v}}(),getMarkCoord:function(){return[0,0]},getSymbolShape:function(e,t,i,o,r,s,l,h,V,U,d){var p=[i,e],c=this.getDataFromOption(i,\"-\");h=this.deepQuery(p,\"symbol\")||h;var u=this.deepQuery(p,\"symbolSize\");u=\"function\"==typeof u?u(c):u,\"number\"==typeof u&&(u=[u,u]);var y=this.deepQuery(p,\"symbolRotate\"),g=this.deepMerge(p,\"itemStyle.normal\"),b=this.deepMerge(p,\"itemStyle.emphasis\"),f=null!=g.borderWidth?g.borderWidth:g.lineStyle&&g.lineStyle.width;null==f&&(f=h.match(\"empty\")?2:0);var k=null!=b.borderWidth?b.borderWidth:b.lineStyle&&b.lineStyle.width;null==k&&(k=f+2);var x=this.getItemStyleColor(g.color,t,o,i),_=this.getItemStyleColor(b.color,t,o,i),L=u[0],W=u[1],X=new a({style:{iconType:h.replace(\"empty\",\"\").toLowerCase(),x:s-L,y:l-W,width:2*L,height:2*W,brushType:\"both\",color:h.match(\"empty\")?U:x||V,strokeColor:g.borderColor||x||V,lineWidth:f},highlightStyle:{color:h.match(\"empty\")?U:_||x||V,strokeColor:b.borderColor||g.borderColor||_||x||V,lineWidth:k},clickable:this.deepQuery(p,\"clickable\")});return h.match(\"image\")&&(X.style.image=h.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),X=new n({style:X.style,highlightStyle:X.highlightStyle,clickable:this.deepQuery(p,\"clickable\")})),null!=y&&(X.rotation=[y*Math.PI/180,s,l]),h.match(\"star\")&&(X.style.iconType=\"star\",X.style.n=h.replace(\"empty\",\"\").replace(\"star\",\"\")-0||5),\"none\"===h&&(X.invisible=!0,X.hoverable=!1),X=this.addLabel(X,e,i,r,d),h.match(\"empty\")&&(null==X.style.textColor&&(X.style.textColor=X.style.strokeColor),null==X.highlightStyle.textColor&&(X.highlightStyle.textColor=X.highlightStyle.strokeColor)),m.pack(X,e,t,i,o,r),X._x=s,X._y=l,X._dataIndex=o,X._seriesIndex=t,X},getMarkLineShape:function(e,t,i,n,a,r,l){var h=null!=i[0].value?i[0].value:\"-\",m=null!=i[1].value?i[1].value:\"-\",V=[i[0].symbol||e.symbol[0],i[1].symbol||e.symbol[1]],U=[i[0].symbolSize||e.symbolSize[0],i[1].symbolSize||e.symbolSize[1]];U[0]=\"function\"==typeof U[0]?U[0](h):U[0],U[1]=\"function\"==typeof U[1]?U[1](m):U[1];var d=[this.query(i[0],\"symbolRotate\")||e.symbolRotate[0],this.query(i[1],\"symbolRotate\")||e.symbolRotate[1]],p=[i[0],i[1],e],c=this.deepMerge(p,\"itemStyle.normal\");c.color=this.getItemStyleColor(c.color,t,n,i);var u=this.deepMerge(p,\"itemStyle.emphasis\");u.color=this.getItemStyleColor(u.color,t,n,i);var y=c.lineStyle,g=u.lineStyle,b=y.width;null==b&&(b=c.borderWidth);var f=g.width;null==f&&(f=null!=u.borderWidth?u.borderWidth:b+2);var k=this.deepQuery(p,\"smoothness\");this.deepQuery(p,\"smooth\")||(k=0);var x=r?s:o,_=new x({style:{symbol:V,symbolSize:U,symbolRotate:d,brushType:\"both\",lineType:y.type,shadowColor:y.shadowColor||y.color||c.borderColor||c.color||l,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:c.color||l,strokeColor:y.color||c.borderColor||c.color||l,lineWidth:b,symbolBorderColor:c.borderColor||c.color||l,symbolBorder:c.borderWidth},highlightStyle:{shadowColor:g.shadowColor,shadowBlur:g.shadowBlur,shadowOffsetX:g.shadowOffsetX,shadowOffsetY:g.shadowOffsetY,color:u.color||c.color||l,strokeColor:g.color||y.color||u.borderColor||c.borderColor||u.color||c.color||l,lineWidth:f,symbolBorderColor:u.borderColor||c.borderColor||u.color||c.color||l,symbolBorder:null==u.borderWidth?c.borderWidth+2:u.borderWidth},clickable:this.deepQuery(p,\"clickable\")}),L=_.style;return r?(L.pointList=a,L.smooth=k):(L.xStart=a[0][0],L.yStart=a[0][1],L.xEnd=a[1][0],L.yEnd=a[1][1],L.curveness=k,_.updatePoints(_.style)),_=this.addLabel(_,e,i[0],i[0].name+\" : \"+i[1].name)},getLargeMarkPointShape:function(e,t){var i,n,a,o,s,l,h=this.series[e],m=this.component,V=t.data,U=m.dataRange,d=m.legend,p=[V[0],t];if(d&&(n=d.getColor(h.name)),!U||(a=null!=V[0].value?V[0].value:\"\",n=isNaN(a)?n:U.getColor(a),o=this.deepQuery(p,\"itemStyle.normal.color\")||n,s=this.deepQuery(p,\"itemStyle.emphasis.color\")||o,null!=o||null!=s)){n=this.deepMerge(p,\"itemStyle.normal\").color||n;var c=this.deepQuery(p,\"symbol\")||\"circle\";c=c.replace(\"empty\",\"\").replace(/\\d/g,\"\"),l=this.deepMerge([V[0],t],\"effect\");var u=window.devicePixelRatio||1;return i=new r({style:{pointList:V,color:n,strokeColor:n,shadowColor:l.shadowColor||n,shadowBlur:(null!=l.shadowBlur?l.shadowBlur:8)*u,size:this.deepQuery(p,\"symbolSize\"),iconType:c,brushType:\"fill\",lineWidth:1},draggable:!1,hoverable:!1}),l.show&&(i.effect=l),i}},backupShapeList:function(){this.shapeList&&this.shapeList.length>0?(this.lastShapeList=this.shapeList,this.shapeList=[]):this.lastShapeList=[]},addShapeList:function(){var e,t,i=this.option.animationThreshold/(this.canvasSupported?2:4),n=this.lastShapeList,a=this.shapeList,o=n.length>0,r=o?this.query(this.option,\"animationDurationUpdate\"):this.query(this.option,\"animationDuration\"),s=this.query(this.option,\"animationEasing\"),l={},m={};if(this.option.animation&&!this.option.renderAsImage&&a.length<i&&!this.motionlessOnce){for(var V=0,U=n.length;U>V;V++)t=this._getAnimationKey(n[V]),t.match(\"undefined\")?this.zr.delShape(n[V].id):(t+=n[V].type,l[t]?this.zr.delShape(n[V].id):l[t]=n[V]);for(var V=0,U=a.length;U>V;V++)t=this._getAnimationKey(a[V]),t.match(\"undefined\")?this.zr.addShape(a[V]):(t+=a[V].type,m[t]=a[V]);for(t in l)m[t]||this.zr.delShape(l[t].id);for(t in m)l[t]?(this.zr.delShape(l[t].id),this._animateMod(l[t],m[t],r,s,0,o)):(e=this.type!=h.CHART_TYPE_LINE&&this.type!=h.CHART_TYPE_RADAR||0===t.indexOf(\"icon\")?0:r/2,this._animateMod(!1,m[t],r,s,e,o));this.zr.refresh(),this.animationEffect()}else{this.motionlessOnce=!1,this.zr.delShape(n);for(var V=0,U=a.length;U>V;V++)this.zr.addShape(a[V])}},_getAnimationKey:function(e){return this.type!=h.CHART_TYPE_MAP&&this.type!=h.CHART_TYPE_TREEMAP&&this.type!=h.CHART_TYPE_VENN&&this.type!=h.CHART_TYPE_TREE?m.get(e,\"seriesIndex\")+\"_\"+m.get(e,\"dataIndex\")+(e._mark?e._mark:\"\")+(this.type===h.CHART_TYPE_RADAR?m.get(e,\"special\"):\"\"):m.get(e,\"seriesIndex\")+\"_\"+m.get(e,\"dataIndex\")+(e._mark?e._mark:\"undefined\")},_animateMod:function(e,t,i,n,a,o){switch(t.type){case\"polyline\":case\"half-smooth-polygon\":V.pointList(this.zr,e,t,i,n);break;case\"rectangle\":V.rectangle(this.zr,e,t,i,n);break;case\"image\":case\"icon\":V.icon(this.zr,e,t,i,n,a);break;case\"candle\":o?this.zr.addShape(t):V.candle(this.zr,e,t,i,n);break;case\"ring\":case\"sector\":case\"circle\":o?\"sector\"===t.type?V.sector(this.zr,e,t,i,n):this.zr.addShape(t):V.ring(this.zr,e,t,i+(m.get(t,\"dataIndex\")||0)%20*100,n);break;case\"text\":V.text(this.zr,e,t,i,n);break;case\"polygon\":o?V.pointList(this.zr,e,t,i,n):V.polygon(this.zr,e,t,i,n);break;case\"ribbon\":V.ribbon(this.zr,e,t,i,n);break;case\"gauge-pointer\":V.gaugePointer(this.zr,e,t,i,n);break;case\"mark-line\":V.markline(this.zr,e,t,i,n);break;case\"bezier-curve\":case\"line\":V.line(this.zr,e,t,i,n);break;default:this.zr.addShape(t)}},animationMark:function(e,t,i){for(var i=i||this.shapeList,n=0,a=i.length;a>n;n++)i[n]._mark&&this._animateMod(!1,i[n],e,t,0,!0);this.animationEffect(i)},animationEffect:function(e){if(!e&&this.clearEffectShape(),e=e||this.shapeList,null!=e){var t=h.EFFECT_ZLEVEL;this.canvasSupported&&this.zr.modLayer(t,{motionBlur:!0,lastFrameAlpha:this.option.effectBlendAlpha||h.effectBlendAlpha});for(var i,n=0,a=e.length;a>n;n++)i=e[n],i._mark&&i.effect&&i.effect.show&&U[i._mark]&&(U[i._mark](this.zr,this.effectList,i,t),this.effectList[this.effectList.length-1]._mark=i._mark)}},clearEffectShape:function(e){var t=this.effectList;if(this.zr&&t&&t.length>0){e&&this.zr.modLayer(h.EFFECT_ZLEVEL,{motionBlur:!1}),this.zr.delShape(t);for(var i=0;i<t.length;i++)t[i].effectAnimator&&t[i].effectAnimator.stop()}this.effectList=[]},addMark:function(e,t,i){var n=this.series[e];if(this.selectedMap[n.name]){var a=this.query(this.option,\"animationDurationUpdate\"),o=this.query(this.option,\"animationEasing\"),r=n[i].data,s=this.shapeList.length;if(n[i].data=t.data,this[\"_build\"+i.replace(\"m\",\"M\")](e),this.option.animation&&!this.option.renderAsImage)this.animationMark(a,o,this.shapeList.slice(s));else{for(var l=s,h=this.shapeList.length;h>l;l++)this.zr.addShape(this.shapeList[l]);this.zr.refreshNextFrame()}n[i].data=r}},delMark:function(e,t,i){i=i.replace(\"mark\",\"\").replace(\"large\",\"\").toLowerCase();var n=this.series[e];if(this.selectedMap[n.name]){for(var a=!1,o=[this.shapeList,this.effectList],r=2;r--;)for(var s=0,l=o[r].length;l>s;s++)if(o[r][s]._mark==i&&m.get(o[r][s],\"seriesIndex\")==e&&m.get(o[r][s],\"name\")==t){this.zr.delShape(o[r][s].id),o[r].splice(s,1),a=!0;break}a&&this.zr.refreshNextFrame()}}},u.inherits(i,p),i}),i(\"zrender/shape/Circle\",[\"require\",\"./Base\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={type:\"circle\",buildPath:function(e,t){e.moveTo(t.x+t.r,t.y),e.arc(t.x,t.y,t.r,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e(\"../tool/util\").inherits(i,t),i}),i(\"echarts/util/accMath\",[],function(){function e(e,t){var i=e.toString(),n=t.toString(),a=0;try{a=n.split(\".\")[1].length}catch(o){}try{a-=i.split(\".\")[1].length}catch(o){}return(i.replace(\".\",\"\")-0)/(n.replace(\".\",\"\")-0)*Math.pow(10,a)}function t(e,t){var i=e.toString(),n=t.toString(),a=0;try{a+=i.split(\".\")[1].length}catch(o){}try{a+=n.split(\".\")[1].length}catch(o){}return(i.replace(\".\",\"\")-0)*(n.replace(\".\",\"\")-0)/Math.pow(10,a)}function i(e,t){var i=0,n=0;try{i=e.toString().split(\".\")[1].length}catch(a){}try{n=t.toString().split(\".\")[1].length}catch(a){}var o=Math.pow(10,Math.max(i,n));return(Math.round(e*o)+Math.round(t*o))/o}function n(e,t){return i(e,-t)}return{accDiv:e,accMul:t,accAdd:i,accSub:n}}),i(\"echarts/util/shape/Icon\",[\"require\",\"zrender/tool/util\",\"zrender/shape/Star\",\"zrender/shape/Heart\",\"zrender/shape/Droplet\",\"zrender/shape/Image\",\"zrender/shape/Base\"],function(e){function t(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o),e.moveTo(i+13*a,n+10*o),e.lineTo(i+13*a,n+t.height)}function i(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+t.height),e.lineTo(i+5*a,n+14*o),e.lineTo(i+t.width,n+3*o),e.lineTo(i+13*a,n),e.lineTo(i+2*a,n+11*o),e.lineTo(i,n+t.height),e.moveTo(i+6*a,n+10*o),e.lineTo(i+14*a,n+2*o),e.moveTo(i+10*a,n+13*o),e.lineTo(i+t.width,n+13*o)}function n(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+4*a,n+15*o),e.lineTo(i+9*a,n+13*o),e.lineTo(i+14*a,n+8*o),e.lineTo(i+11*a,n+5*o),e.lineTo(i+6*a,n+10*o),e.lineTo(i+4*a,n+15*o),e.moveTo(i+5*a,n),e.lineTo(i+11*a,n),e.moveTo(i+5*a,n+o),e.lineTo(i+11*a,n+o),e.moveTo(i,n+2*o),e.lineTo(i+t.width,n+2*o),e.moveTo(i,n+5*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+13*a,n+t.height),e.lineTo(i+t.width,n+5*o)}function a(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n+3*o),e.lineTo(i+6*a,n+3*o),e.moveTo(i+3*a,n),e.lineTo(i+3*a,n+6*o),e.moveTo(i+3*a,n+8*o),e.lineTo(i+3*a,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n+3*o),e.lineTo(i+8*a,n+3*o)}function o(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i+6*a,n),e.lineTo(i+2*a,n+3*o),e.lineTo(i+6*a,n+6*o),e.moveTo(i+2*a,n+3*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+14*a,n+11*o),e.moveTo(i+2*a,n+5*o),e.lineTo(i+2*a,n+13*o),e.lineTo(i+14*a,n+13*o),e.moveTo(i+10*a,n+10*o),e.lineTo(i+14*a,n+13*o),e.lineTo(i+10*a,n+t.height)}function r(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16,r=t.width/2;e.lineWidth=1.5,e.arc(i+r,n+r,r-a,0,2*Math.PI/3),e.moveTo(i+3*a,n+t.height),e.lineTo(i+0*a,n+12*o),e.lineTo(i+5*a,n+11*o),e.moveTo(i,n+8*o),e.arc(i+r,n+r,r-a,Math.PI,5*Math.PI/3),e.moveTo(i+13*a,n),e.lineTo(i+t.width,n+4*o),e.lineTo(i+11*a,n+5*o)}function s(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+2*a,n+14*o),e.lineTo(i+7*a,n+6*o),e.lineTo(i+11*a,n+11*o),e.lineTo(i+15*a,n+2*o)}function l(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.moveTo(i+3*a,n+14*o),e.lineTo(i+3*a,n+6*o),e.lineTo(i+4*a,n+6*o),e.lineTo(i+4*a,n+14*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+7*a,n+2*o),e.lineTo(i+8*a,n+2*o),e.lineTo(i+8*a,n+14*o),e.moveTo(i+11*a,n+14*o),e.lineTo(i+11*a,n+9*o),e.lineTo(i+12*a,n+9*o),e.lineTo(i+12*a,n+14*o)}function h(e,t){var i=t.x,n=t.y,a=t.width-2,o=t.height-2,r=Math.min(a,o)/2;n+=2,e.moveTo(i+r+3,n+r-3),e.arc(i+r+3,n+r-3,r-1,0,-Math.PI/2,!0),e.lineTo(i+r+3,n+r-3),e.moveTo(i+r,n),e.lineTo(i+r,n+r),e.arc(i+r,n+r,r,-Math.PI/2,2*Math.PI,!0),e.lineTo(i+r,n+r),e.lineWidth=1.5}function m(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;n-=o,e.moveTo(i+1*a,n+2*o),e.lineTo(i+15*a,n+2*o),e.lineTo(i+14*a,n+3*o),e.lineTo(i+2*a,n+3*o),e.moveTo(i+3*a,n+6*o),e.lineTo(i+13*a,n+6*o),e.lineTo(i+12*a,n+7*o),e.lineTo(i+4*a,n+7*o),e.moveTo(i+5*a,n+10*o),e.lineTo(i+11*a,n+10*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o),e.moveTo(i+7*a,n+14*o),e.lineTo(i+9*a,n+14*o),e.lineTo(i+8*a,n+15*o),e.lineTo(i+7*a,n+15*o)}function V(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=a/16,s=o/16,l=2*Math.min(r,s);e.moveTo(i+r+l,n+s+l),e.arc(i+r,n+s,l,Math.PI/4,3*Math.PI),e.lineTo(i+7*r-l,n+6*s-l),e.arc(i+7*r,n+6*s,l,Math.PI/4*5,4*Math.PI),e.arc(i+7*r,n+6*s,l/2,Math.PI/4*5,4*Math.PI),e.moveTo(i+7*r-l/2,n+6*s+l),e.lineTo(i+r+l,n+14*s-l),e.arc(i+r,n+14*s,l,-Math.PI/4,2*Math.PI),e.moveTo(i+7*r+l/2,n+6*s),e.lineTo(i+14*r-l,n+10*s-l/2),e.moveTo(i+16*r,n+10*s),e.arc(i+14*r,n+10*s,l,0,3*Math.PI),e.lineWidth=1.5}function U(e,t){var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.min(a,o)/2;e.moveTo(i+a,n+o/2),e.arc(i+r,n+r,r,0,2*Math.PI),e.arc(i+r,n,r,Math.PI/4,Math.PI/5*4),e.arc(i,n+r,r,-Math.PI/3,Math.PI/3),e.arc(i+a,n+o,r,Math.PI,Math.PI/2*3),e.lineWidth=1.5}function d(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(o/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i,n+r*l+s,a,2)}function p(e,t){for(var i=t.x,n=t.y,a=t.width,o=t.height,r=Math.round(a/3),s=Math.round((r-2)/2),l=3;l--;)e.rect(i+r*l+s,n,2,o)}function c(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+15*a,n+t.height),e.lineTo(i+15*a,n),e.lineTo(i+a,n),e.moveTo(i+3*a,n+3*a),e.lineTo(i+13*a,n+3*a),e.moveTo(i+3*a,n+6*a),e.lineTo(i+13*a,n+6*a),e.moveTo(i+3*a,n+9*a),e.lineTo(i+13*a,n+9*a),e.moveTo(i+3*a,n+12*a),e.lineTo(i+9*a,n+12*a)}function u(e,t){var i=t.x,n=t.y,a=t.width/16,o=t.height/16;e.moveTo(i,n),e.lineTo(i,n+t.height),e.lineTo(i+t.width,n+t.height),e.lineTo(i+t.width,n),e.lineTo(i,n),e.moveTo(i+4*a,n),e.lineTo(i+4*a,n+8*o),e.lineTo(i+12*a,n+8*o),e.lineTo(i+12*a,n),e.moveTo(i+6*a,n+11*o),e.lineTo(i+6*a,n+13*o),e.lineTo(i+10*a,n+13*o),e.lineTo(i+10*a,n+11*o),e.lineTo(i+6*a,n+11*o)}function y(e,t){var i=t.x,n=t.y,a=t.width,o=t.height;e.moveTo(i,n+o/2),e.lineTo(i+a,n+o/2),e.moveTo(i+a/2,n),e.lineTo(i+a/2,n+o)}function g(e,t){var i=t.width/2,n=t.height/2,a=Math.min(i,n);e.moveTo(t.x+i+a,t.y+n),e.arc(t.x+i,t.y+n,a,0,2*Math.PI),e.closePath()}function b(e,t){e.rect(t.x,t.y,t.width,t.height),e.closePath()}function f(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o+r),e.lineTo(a-r,o+r),e.lineTo(a,o-r),e.closePath()}function k(e,t){var i=t.width/2,n=t.height/2,a=t.x+i,o=t.y+n,r=Math.min(i,n);e.moveTo(a,o-r),e.lineTo(a+r,o),e.lineTo(a,o+r),e.lineTo(a-r,o),e.lineTo(a,o-r),e.closePath()}function x(e,t){var i=t.x,n=t.y,a=t.width/16;e.moveTo(i+8*a,n),e.lineTo(i+a,n+t.height),e.lineTo(i+8*a,n+t.height/4*3),e.lineTo(i+15*a,n+t.height),e.lineTo(i+8*a,n),e.closePath()}function _(t,i){var n=e(\"zrender/shape/Star\"),a=i.width/2,o=i.height/2;n.prototype.buildPath(t,{x:i.x+a,y:i.y+o,r:Math.min(a,o),n:i.n||5})}function L(t,i){var n=e(\"zrender/shape/Heart\");n.prototype.buildPath(t,{x:i.x+i.width/2,y:i.y+.2*i.height,a:i.width/2,b:.8*i.height})}function W(t,i){var n=e(\"zrender/shape/Droplet\");n.prototype.buildPath(t,{x:i.x+.5*i.width,y:i.y+.5*i.height,a:.5*i.width,b:.8*i.height})}function X(e,t){var i=t.x,n=t.y-t.height/2*1.5,a=t.width/2,o=t.height/2,r=Math.min(a,o);e.arc(i+a,n+o,r,Math.PI/5*4,Math.PI/5),e.lineTo(i+a,n+o+1.5*r),e.closePath()}function v(t,i,n){var a=e(\"zrender/shape/Image\");this._imageShape=this._imageShape||new a({style:{}});for(var o in i)this._imageShape.style[o]=i[o];this._imageShape.brush(t,!1,n)}function w(e){I.call(this,e)}var K=e(\"zrender/tool/util\"),I=e(\"zrender/shape/Base\");return w.prototype={type:\"icon\",iconLibrary:{mark:t,markUndo:i,markClear:n,dataZoom:a,dataZoomReset:o,restore:r,lineChart:s,barChart:l,pieChart:h,funnelChart:m,forceChart:V,chordChart:U,stackChart:d,tiledChart:p,dataView:c,saveAsImage:u,cross:y,circle:g,rectangle:b,triangle:f,diamond:k,arrow:x,star:_,heart:L,droplet:W,pin:X,image:v},brush:function(t,i,n){var a=i?this.highlightStyle:this.style;a=a||{};var o=a.iconType||this.style.iconType;if(\"image\"===o){var r=e(\"zrender/shape/Image\");r.prototype.brush.call(this,t,i,n)}else{var a=this.beforeBrush(t,i);switch(t.beginPath(),this.buildPath(t,a,n),a.brushType){case\"both\":t.fill();case\"stroke\":a.lineWidth>0&&t.stroke();break;default:t.fill()}this.drawText(t,a,this.style),this.afterBrush(t)}},buildPath:function(e,t,i){this.iconLibrary[t.iconType]?this.iconLibrary[t.iconType].call(this,e,t,i):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y),e.closePath())},getRect:function(e){return e.__rect?e.__rect:(e.__rect={x:Math.round(e.x),y:Math.round(e.y-(\"pin\"==e.iconType?e.height/2*1.5:0)),width:e.width,height:e.height*(\"pin\"===e.iconType?1.25:1)},e.__rect)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.__rect;n||(n=this.style.__rect=this.getRect(this.style));var a=n.height<8||n.width<8?4:0;return e>=n.x-a&&e<=n.x+n.width+a&&t>=n.y-a&&t<=n.y+n.height+a}},K.inherits(w,I),w}),i(\"echarts/util/shape/MarkLine\",[\"require\",\"zrender/shape/Base\",\"./Icon\",\"zrender/shape/Line\",\"zrender/shape/BezierCurve\",\"zrender/tool/area\",\"zrender/shape/util/dashedLineTo\",\"zrender/tool/util\",\"zrender/tool/curve\"],function(e){function t(e){i.call(this,e),this.style.curveness>0&&this.updatePoints(this.style),this.highlightStyle.curveness>0&&this.updatePoints(this.highlightStyle)}var i=e(\"zrender/shape/Base\"),n=e(\"./Icon\"),a=e(\"zrender/shape/Line\"),o=new a({}),r=e(\"zrender/shape/BezierCurve\"),s=new r({}),l=e(\"zrender/tool/area\"),h=e(\"zrender/shape/util/dashedLineTo\"),m=e(\"zrender/tool/util\"),V=e(\"zrender/tool/curve\");return t.prototype={type:\"mark-line\",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildPath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i,0),this.brushSymbol(e,i,1),this.drawText(e,i,this.style),e.restore()},buildPath:function(e,t){var i=t.lineType||\"solid\";if(e.moveTo(t.xStart,t.yStart),t.curveness>0){var n=null;switch(i){case\"dashed\":n=[5,5];break;case\"dotted\":n=[1,1]}n&&e.setLineDash&&e.setLineDash(n),e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)}else if(\"solid\"==i)e.lineTo(t.xEnd,t.yEnd);else{var a=(t.lineWidth||1)*(\"dashed\"==t.lineType?5:1);h(e,t.xStart,t.yStart,t.xEnd,t.yEnd,a)}},updatePoints:function(e){var t=e.curveness||0,i=1,n=e.xStart,a=e.yStart,o=e.xEnd,r=e.yEnd,s=(n+o)/2-i*(a-r)*t,l=(a+r)/2-i*(o-n)*t;e.cpX1=s,e.cpY1=l},brushSymbol:function(e,t,i){if(\"none\"!=t.symbol[i]){e.save(),e.beginPath(),e.lineWidth=t.symbolBorder,e.strokeStyle=t.symbolBorderColor;var a=t.symbol[i].replace(\"empty\",\"\").toLowerCase();t.symbol[i].match(\"empty\")&&(e.fillStyle=\"#fff\");var o=t.xStart,r=t.yStart,s=t.xEnd,l=t.yEnd,h=0===i?o:s,m=0===i?r:l,U=t.curveness||0,d=null!=t.symbolRotate[i]?t.symbolRotate[i]-0:0;if(d=d/180*Math.PI,\"arrow\"==a&&0===d)if(0===U){var p=0===i?-1:1;d=Math.PI/2+Math.atan2(p*(l-r),p*(s-o))}else{var c=t.cpX1,u=t.cpY1,y=V.quadraticDerivativeAt,g=y(o,c,s,i),b=y(r,u,l,i);d=Math.PI/2+Math.atan2(b,g)}e.translate(h,m),0!==d&&e.rotate(d);var f=t.symbolSize[i];n.prototype.buildPath(e,{x:-f,y:-f,width:2*f,height:2*f,iconType:a}),e.closePath(),e.fill(),e.stroke(),e.restore()}},getRect:function(e){return e.curveness>0?s.getRect(e):o.getRect(e),e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?this.style.curveness>0?l.isInside(s,this.style,e,t):l.isInside(o,this.style,e,t):!1}},m.inherits(t,i),t}),i(\"echarts/util/shape/Symbol\",[\"require\",\"zrender/shape/Base\",\"zrender/shape/Polygon\",\"zrender/tool/util\",\"./normalIsCover\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/shape/Polygon\"),a=new n({}),o=e(\"zrender/tool/util\");return t.prototype={type:\"symbol\",buildPath:function(e,t){var i=t.pointList,n=i.length;if(0!==n)for(var a,o,r,s,l,h=1e4,m=Math.ceil(n/h),V=i[0]instanceof Array,U=t.size?t.size:2,d=U,p=U/2,c=2*Math.PI,u=0;m>u;u++){e.beginPath(),a=u*h,o=a+h,o=o>n?n:o;for(var y=a;o>y;y++)if(t.random&&(r=t[\"randomMap\"+y%20]/100,d=U*r*r,p=d/2),V?(s=i[y][0],l=i[y][1]):(s=i[y].x,l=i[y].y),3>d)e.rect(s-p,l-p,d,d);else switch(t.iconType){case\"circle\":e.moveTo(s,l),e.arc(s,l,p,0,c,!0);break;case\"diamond\":e.moveTo(s,l-p),e.lineTo(s+p/3,l-p/3),e.lineTo(s+p,l),e.lineTo(s+p/3,l+p/3),e.lineTo(s,l+p),e.lineTo(s-p/3,l+p/3),e.lineTo(s-p,l),e.lineTo(s-p/3,l-p/3),e.lineTo(s,l-p);break;default:e.rect(s-p,l-p,d,d)}if(e.closePath(),m-1>u)switch(t.brushType){case\"both\":e.fill(),t.lineWidth>0&&e.stroke();break;case\"stroke\":t.lineWidth>0&&e.stroke();break;default:e.fill()}}},getRect:function(e){return e.__rect||a.getRect(e)},isCover:e(\"./normalIsCover\")},o.inherits(t,i),t}),i(\"zrender/shape/Polyline\",[\"require\",\"./Base\",\"./util/smoothSpline\",\"./util/smoothBezier\",\"./util/dashedLineTo\",\"./Polygon\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=e(\"./util/smoothSpline\"),n=e(\"./util/smoothBezier\"),a=e(\"./util/dashedLineTo\"),o=function(e){this.brushTypeOnly=\"stroke\",this.textPosition=\"end\",t.call(this,e)};return o.prototype={type:\"polyline\",buildPath:function(e,t){var n=t.pointList;if(!(n.length<2)){var o=Math.min(t.pointList.length,Math.round(t.pointListLength||t.pointList.length));if(t.smooth&&\"spline\"!==t.smooth){t.controlPointList||this.updateControlPoints(t);var r=t.controlPointList;e.moveTo(n[0][0],n[0][1]);for(var s,l,h,m=0;o-1>m;m++)s=r[2*m],l=r[2*m+1],h=n[m+1],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if(\"spline\"===t.smooth&&(n=i(n),o=n.length),t.lineType&&\"solid\"!=t.lineType){if(\"dashed\"==t.lineType||\"dotted\"==t.lineType){var V=(t.lineWidth||1)*(\"dashed\"==t.lineType?5:1);e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)a(e,n[m-1][0],n[m-1][1],n[m][0],n[m][1],V)}}else{e.moveTo(n[0][0],n[0][1]);for(var m=1;o>m;m++)e.lineTo(n[m][0],n[m][1])}}},updateControlPoints:function(e){e.controlPointList=n(e.pointList,e.smooth,!1,e.smoothConstraint)},getRect:function(t){return e(\"./Polygon\").prototype.getRect(t)}},e(\"../tool/util\").inherits(o,t),o}),i(\"zrender/shape/ShapeBundle\",[\"require\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={constructor:i,type:\"shape-bundle\",brush:function(e,t){var i=this.beforeBrush(e,t);e.beginPath();for(var n=0;n<i.shapeList.length;n++){var a=i.shapeList[n],o=a.style;t&&(o=a.getHighlightStyle(o,a.highlightStyle||{},a.brushTypeOnly)),a.buildPath(e,o)}switch(i.brushType){case\"both\":e.fill();case\"stroke\":i.lineWidth>0&&e.stroke();break;default:e.fill()}this.drawText(e,i,this.style),this.afterBrush(e)},getRect:function(e){if(e.__rect)return e.__rect;for(var t=1/0,i=-(1/0),n=1/0,a=-(1/0),o=0;o<e.shapeList.length;o++)var r=e.shapeList[o],s=r.getRect(r.style),t=Math.min(s.x,t),n=Math.min(s.y,n),i=Math.max(s.x+s.width,i),a=Math.max(s.y+s.height,a);return e.__rect={x:t,y:n,width:i-t,height:a-n},e.__rect},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);if(e=i[0],t=i[1],this.isCoverRect(e,t))for(var n=0;n<this.style.shapeList.length;n++){var a=this.style.shapeList[n];if(a.isCover(e,t))return!0}return!1}},e(\"../tool/util\").inherits(i,t),i}),i(\"echarts/util/ecAnimation\",[\"require\",\"zrender/tool/util\",\"zrender/tool/curve\",\"zrender/shape/Polygon\"],function(e){function t(e,t,i,n,a){var o,r=i.style.pointList,s=r.length;if(!t){if(o=[],\"vertical\"!=i._orient)for(var l=r[0][1],h=0;s>h;h++)o[h]=[r[h][0],l];else for(var m=r[0][0],h=0;s>h;h++)o[h]=[m,r[h][1]];\"half-smooth-polygon\"==i.type&&(o[s-1]=p.clone(r[s-1]),o[s-2]=p.clone(r[s-2])),t={style:{pointList:o}}}o=t.style.pointList;var V=o.length;i.style.pointList=V==s?o:s>V?o.concat(r.slice(V)):o.slice(0,s),e.addShape(i),i.__animating=!0,e.animate(i.id,\"style\").when(n,{pointList:r}).during(function(){i.updateControlPoints&&i.updateControlPoints(i.style)}).done(function(){i.__animating=!1}).start(a)}function i(e,t){for(var i=arguments.length,n=2;i>n;n++){var a=arguments[n];e.style[a]=t.style[a]}}function n(e,t,n,a,o){var r=n.style;t||(t={position:n.position,style:{x:r.x,y:\"vertical\"==n._orient?r.y+r.height:r.y,width:\"vertical\"==n._orient?r.width:0,height:\"vertical\"!=n._orient?r.height:0}});var s=r.x,l=r.y,h=r.width,m=r.height,V=[n.position[0],n.position[1]];i(n,t,\"x\",\"y\",\"width\",\"height\"),n.position=t.position,e.addShape(n),(V[0]!=t.position[0]||V[1]!=t.position[1])&&e.animate(n.id,\"\").when(a,{position:V}).start(o),n.__animating=!0,e.animate(n.id,\"style\").when(a,{x:s,y:l,width:h,height:m}).done(function(){n.__animating=!1}).start(o)}function a(e,t,i,n,a){if(!t){var o=i.style.y;t={style:{y:[o[0],o[0],o[0],o[0]]}}}var r=i.style.y;i.style.y=t.style.y,e.addShape(i),i.__animating=!0,e.animate(i.id,\"style\").when(n,{y:r}).done(function(){i.__animating=!1}).start(a)}function o(e,t,i,n,a){var o=i.style.x,r=i.style.y,s=i.style.r0,l=i.style.r;i.__animating=!0,\"r\"!=i._animationAdd?(i.style.r0=0,i.style.r=0,i.rotation=[2*Math.PI,o,r],e.addShape(i),e.animate(i.id,\"style\").when(n,{r0:s,r:l}).done(function(){i.__animating=!1}).start(a),e.animate(i.id,\"\").when(n,{rotation:[0,o,r]}).start(a)):(i.style.r0=i.style.r,e.addShape(i),e.animate(i.id,\"style\").when(n,{r0:s}).done(function(){i.__animating=!1}).start(a))}function r(e,t,n,a,o){t||(t=\"r\"!=n._animationAdd?{\nstyle:{startAngle:n.style.startAngle,endAngle:n.style.startAngle}}:{style:{r0:n.style.r}});var r=n.style.startAngle,s=n.style.endAngle;i(n,t,\"startAngle\",\"endAngle\"),e.addShape(n),n.__animating=!0,e.animate(n.id,\"style\").when(a,{startAngle:r,endAngle:s}).done(function(){n.__animating=!1}).start(o)}function s(e,t,n,a,o){t||(t={style:{x:\"left\"==n.style.textAlign?n.style.x+100:n.style.x-100,y:n.style.y}});var r=n.style.x,s=n.style.y;i(n,t,\"x\",\"y\"),e.addShape(n),n.__animating=!0,e.animate(n.id,\"style\").when(a,{x:r,y:s}).done(function(){n.__animating=!1}).start(o)}function l(t,i,n,a,o){var r=e(\"zrender/shape/Polygon\").prototype.getRect(n.style),s=r.x+r.width/2,l=r.y+r.height/2;n.scale=[.1,.1,s,l],t.addShape(n),n.__animating=!0,t.animate(n.id,\"\").when(a,{scale:[1,1,s,l]}).done(function(){n.__animating=!1}).start(o)}function h(e,t,n,a,o){t||(t={style:{source0:0,source1:n.style.source1>0?360:-360,target0:0,target1:n.style.target1>0?360:-360}});var r=n.style.source0,s=n.style.source1,l=n.style.target0,h=n.style.target1;t.style&&i(n,t,\"source0\",\"source1\",\"target0\",\"target1\"),e.addShape(n),n.__animating=!0,e.animate(n.id,\"style\").when(a,{source0:r,source1:s,target0:l,target1:h}).done(function(){n.__animating=!1}).start(o)}function m(e,t,i,n,a){t||(t={style:{angle:i.style.startAngle}});var o=i.style.angle;i.style.angle=t.style.angle,e.addShape(i),i.__animating=!0,e.animate(i.id,\"style\").when(n,{angle:o}).done(function(){i.__animating=!1}).start(a)}function V(e,t,i,a,o,r){if(i.style._x=i.style.x,i.style._y=i.style.y,i.style._width=i.style.width,i.style._height=i.style.height,t)n(e,t,i,a,o);else{var s=i._x||0,l=i._y||0;i.scale=[.01,.01,s,l],e.addShape(i),i.__animating=!0,e.animate(i.id,\"\").delay(r).when(a,{scale:[1,1,s,l]}).done(function(){i.__animating=!1}).start(o||\"QuinticOut\")}}function U(e,t,n,a,o){t||(t={style:{xStart:n.style.xStart,yStart:n.style.yStart,xEnd:n.style.xStart,yEnd:n.style.yStart}});var r=n.style.xStart,s=n.style.xEnd,l=n.style.yStart,h=n.style.yEnd;i(n,t,\"xStart\",\"xEnd\",\"yStart\",\"yEnd\"),e.addShape(n),n.__animating=!0,e.animate(n.id,\"style\").when(a,{xStart:r,xEnd:s,yStart:l,yEnd:h}).done(function(){n.__animating=!1}).start(o)}function d(e,t,i,n,a){a=a||\"QuinticOut\",i.__animating=!0,e.addShape(i);var o=i.style,r=function(){i.__animating=!1},s=o.xStart,l=o.yStart,h=o.xEnd,m=o.yEnd;if(o.curveness>0){i.updatePoints(o);var V={p:0},U=o.cpX1,d=o.cpY1,p=[],u=[],y=c.quadraticSubdivide;e.animation.animate(V).when(n,{p:1}).during(function(){y(s,U,h,V.p,p),y(l,d,m,V.p,u),o.cpX1=p[1],o.cpY1=u[1],o.xEnd=p[2],o.yEnd=u[2],e.modShape(i)}).done(r).start(a)}else e.animate(i.id,\"style\").when(0,{xEnd:s,yEnd:l}).when(n,{xEnd:h,yEnd:m}).done(r).start(a)}var p=e(\"zrender/tool/util\"),c=e(\"zrender/tool/curve\");return{pointList:t,rectangle:n,candle:a,ring:o,sector:r,text:s,polygon:l,ribbon:h,gaugePointer:m,icon:V,line:U,markline:d}}),i(\"echarts/util/ecEffect\",[\"require\",\"../util/ecData\",\"zrender/shape/Circle\",\"zrender/shape/Image\",\"zrender/tool/curve\",\"../util/shape/Icon\",\"../util/shape/Symbol\",\"zrender/shape/ShapeBundle\",\"zrender/shape/Polyline\",\"zrender/tool/vector\",\"zrender/tool/env\"],function(e){function t(e,t,i,n){var a,r=i.effect,l=r.color||i.style.strokeColor||i.style.color,m=r.shadowColor||l,V=r.scaleSize,U=r.bounceDistance,d=\"undefined\"!=typeof r.shadowBlur?r.shadowBlur:V;\"image\"!==i.type?(a=new h({zlevel:n,style:{brushType:\"stroke\",iconType:\"droplet\"!=i.style.iconType?i.style.iconType:\"circle\",x:d+1,y:d+1,n:i.style.n,width:i.style._width*V,height:i.style._height*V,lineWidth:1,strokeColor:l,shadowColor:m,shadowBlur:d},draggable:!1,hoverable:!1}),\"pin\"==i.style.iconType&&(a.style.y+=a.style.height/2*1.5),p&&(a.style.image=e.shapeToImage(a,a.style.width+2*d+2,a.style.height+2*d+2).style.image,a=new s({zlevel:a.zlevel,style:a.style,draggable:!1,hoverable:!1}))):a=new s({zlevel:n,style:i.style,draggable:!1,hoverable:!1}),o.clone(i,a),a.position=i.position,t.push(a),e.addShape(a);var c=\"image\"!==i.type?window.devicePixelRatio||1:1,u=(a.style.width/c-i.style._width)/2;a.style.x=i.style._x-u,a.style.y=i.style._y-u,\"pin\"==i.style.iconType&&(a.style.y-=i.style.height/2*1.5);var y=100*(r.period+10*Math.random());e.modShape(i.id,{invisible:!0});var g=a.style.x+a.style.width/2/c,b=a.style.y+a.style.height/2/c;\"scale\"===r.type?(e.modShape(a.id,{scale:[.1,.1,g,b]}),e.animate(a.id,\"\",r.loop).when(y,{scale:[1,1,g,b]}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()):e.animate(a.id,\"style\",r.loop).when(y,{y:a.style.y-U}).when(2*y,{y:a.style.y}).done(function(){i.effect.show=!1,e.delShape(a.id)}).start()}function i(e,t,i,n){var a=i.effect,o=a.color||i.style.strokeColor||i.style.color,r=a.scaleSize,s=a.shadowColor||o,l=\"undefined\"!=typeof a.shadowBlur?a.shadowBlur:2*r,h=window.devicePixelRatio||1,V=new m({zlevel:n,position:i.position,scale:i.scale,style:{pointList:i.style.pointList,iconType:i.style.iconType,color:o,strokeColor:o,shadowColor:s,shadowBlur:l*h,random:!0,brushType:\"fill\",lineWidth:1,size:i.style.size},draggable:!1,hoverable:!1});t.push(V),e.addShape(V),e.modShape(i.id,{invisible:!0});for(var U=Math.round(100*a.period),d={},p={},c=0;20>c;c++)V.style[\"randomMap\"+c]=0,d={},d[\"randomMap\"+c]=100,p={},p[\"randomMap\"+c]=0,V.style[\"randomMap\"+c]=100*Math.random(),e.animate(V.id,\"style\",!0).when(U,d).when(2*U,p).when(3*U,d).when(4*U,d).delay(Math.random()*U*c).start()}function n(e,t,i,n,a){var s=i.effect,h=i.style,m=s.color||h.strokeColor||h.color,V=s.shadowColor||h.strokeColor||m,c=h.lineWidth*s.scaleSize,u=\"undefined\"!=typeof s.shadowBlur?s.shadowBlur:c,y=new r({zlevel:n,style:{x:u,y:u,r:c,color:m,shadowColor:V,shadowBlur:u},hoverable:!1}),g=0;if(p&&!a){var n=y.zlevel;y=e.shapeToImage(y,2*(c+u),2*(c+u)),y.zlevel=n,y.hoverable=!1,g=u}a||(o.clone(i,y),y.position=i.position,t.push(y),e.addShape(y));var b=function(){a||(i.effect.show=!1,e.delShape(y.id)),y.effectAnimator=null};if(i instanceof U){for(var f=[0],k=0,x=h.pointList,_=h.controlPointList,L=1;L<x.length;L++){if(_){var W=_[2*(L-1)],X=_[2*(L-1)+1];k+=d.dist(x[L-1],W)+d.dist(W,X)+d.dist(X,x[L])}else k+=d.dist(x[L-1],x[L]);f.push(k)}for(var v={p:0},w=e.animation.animate(v,{loop:s.loop}),L=0;L<f.length;L++)w.when(f[L]*s.period,{p:L});w.during(function(){var t,i,n=Math.floor(v.p);if(n==x.length-1)t=x[n][0],i=x[n][1];else{var o=v.p-n,r=x[n],s=x[n+1];if(_){var h=_[2*n],m=_[2*n+1];t=l.cubicAt(r[0],h[0],m[0],s[0],o),i=l.cubicAt(r[1],h[1],m[1],s[1],o)}else t=(s[0]-r[0])*o+r[0],i=(s[1]-r[1])*o+r[1]}y.style.x=t,y.style.y=i,a||e.modShape(y)}).done(b).start(),w.duration=k*s.period,y.effectAnimator=w}else{var K=h.xStart-g,I=h.yStart-g,J=h.xEnd-g,C=h.yEnd-g;y.style.x=K,y.style.y=I;var S=(J-K)*(J-K)+(C-I)*(C-I),E=Math.round(Math.sqrt(Math.round(S*s.period*s.period)));if(i.style.curveness>0){var F=h.cpX1-g,T=h.cpY1-g;y.effectAnimator=e.animation.animate(y,{loop:s.loop}).when(E,{p:1}).during(function(t,i){y.style.x=l.quadraticAt(K,F,J,i),y.style.y=l.quadraticAt(I,T,C,i),a||e.modShape(y)}).done(b).start()}else y.effectAnimator=e.animation.animate(y.style,{loop:s.loop}).when(E,{x:J,y:C}).during(function(){a||e.modShape(y)}).done(b).start();y.effectAnimator.duration=E}return y}function a(e,t,i,a){var o=new V({style:{shapeList:[]},zlevel:a,hoverable:!1}),r=i.style.shapeList,s=i.effect;o.position=i.position;for(var l=0,h=[],m=0;m<r.length;m++){r[m].effect=s;var U=n(e,null,r[m],a,!0),d=U.effectAnimator;o.style.shapeList.push(U),d.duration>l&&(l=d.duration),0===m&&(o.style.color=U.style.color,o.style.shadowBlur=U.style.shadowBlur,o.style.shadowColor=U.style.shadowColor),h.push(d)}t.push(o),e.addShape(o);var p=function(){for(var e=0;e<h.length;e++)h[e].stop()};if(l){o.__dummy=0;var c=e.animate(o.id,\"\",s.loop).when(l,{__dummy:1}).during(function(){e.modShape(o)}).done(function(){i.effect.show=!1,e.delShape(o.id)}).start(),u=c.stop;c.stop=function(){p(),u.call(this)}}}var o=e(\"../util/ecData\"),r=e(\"zrender/shape/Circle\"),s=e(\"zrender/shape/Image\"),l=e(\"zrender/tool/curve\"),h=e(\"../util/shape/Icon\"),m=e(\"../util/shape/Symbol\"),V=e(\"zrender/shape/ShapeBundle\"),U=e(\"zrender/shape/Polyline\"),d=e(\"zrender/tool/vector\"),p=e(\"zrender/tool/env\").canvasSupported;return{point:t,largePoint:i,line:n,largeLine:a}}),i(\"echarts/component/base\",[\"require\",\"../config\",\"../util/ecData\",\"../util/ecQuery\",\"../util/number\",\"zrender/tool/util\",\"zrender/tool/env\"],function(e){function t(e,t,a,o,r){this.ecTheme=e,this.messageCenter=t,this.zr=a,this.option=o,this.series=o.series,this.myChart=r,this.component=r.component,this.shapeList=[],this.effectList=[];var s=this;s._onlegendhoverlink=function(e){if(s.legendHoverLink)for(var t,a=e.target,o=s.shapeList.length-1;o>=0;o--)t=s.type==i.CHART_TYPE_PIE||s.type==i.CHART_TYPE_FUNNEL?n.get(s.shapeList[o],\"name\"):(n.get(s.shapeList[o],\"series\")||{}).name,t!=a||s.shapeList[o].invisible||s.shapeList[o].__animating||s.zr.addHoverShape(s.shapeList[o])},t&&t.bind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink)}var i=e(\"../config\"),n=e(\"../util/ecData\"),a=e(\"../util/ecQuery\"),o=e(\"../util/number\"),r=e(\"zrender/tool/util\");return t.prototype={canvasSupported:e(\"zrender/tool/env\").canvasSupported,_getZ:function(e){if(null!=this[e])return this[e];var t=this.ecTheme[this.type];return t&&null!=t[e]?t[e]:(t=i[this.type],t&&null!=t[e]?t[e]:0)},getZlevelBase:function(){return this._getZ(\"zlevel\")},getZBase:function(){return this._getZ(\"z\")},reformOption:function(e){return e=r.merge(r.merge(e||{},r.clone(this.ecTheme[this.type]||{})),r.clone(i[this.type]||{})),this.z=e.z,this.zlevel=e.zlevel,e},reformCssArray:function(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+\"\"){case\"4\":return e;case\"3\":return[e[0],e[1],e[2],e[1]];case\"2\":return[e[0],e[1],e[0],e[1]];case\"1\":return[e[0],e[0],e[0],e[0]];case\"0\":return[0,0,0,0]}},getShapeById:function(e){for(var t=0,i=this.shapeList.length;i>t;t++)if(this.shapeList[t].id===e)return this.shapeList[t];return null},getFont:function(e){var t=this.getTextStyle(r.clone(e));return t.fontStyle+\" \"+t.fontWeight+\" \"+t.fontSize+\"px \"+t.fontFamily},getTextStyle:function(e){return r.merge(r.merge(e||{},this.ecTheme.textStyle),i.textStyle)},getItemStyleColor:function(e,t,i,n){return\"function\"==typeof e?e.call(this.myChart,{seriesIndex:t,series:this.series[t],dataIndex:i,data:n}):e},getDataFromOption:function(e,t){return null!=e?null!=e.value?e.value:e:t},subPixelOptimize:function(e,t){return e=t%2===1?Math.floor(e)+.5:Math.round(e)},resize:function(){this.refresh&&this.refresh(),this.clearEffectShape&&this.clearEffectShape(!0);var e=this;setTimeout(function(){e.animationEffect&&e.animationEffect()},200)},clear:function(){this.clearEffectShape&&this.clearEffectShape(),this.zr&&this.zr.delShape(this.shapeList),this.shapeList=[]},dispose:function(){this.onbeforDispose&&this.onbeforDispose(),this.clear(),this.shapeList=null,this.effectList=null,this.messageCenter&&this.messageCenter.unbind(i.EVENT.LEGEND_HOVERLINK,this._onlegendhoverlink),this.onafterDispose&&this.onafterDispose()},query:a.query,deepQuery:a.deepQuery,deepMerge:a.deepMerge,parsePercent:o.parsePercent,parseCenter:o.parseCenter,parseRadius:o.parseRadius,numAddCommas:o.addCommas,getPrecision:o.getPrecision},t}),i(\"echarts/layout/EdgeBundling\",[\"require\",\"../data/KDTree\",\"zrender/tool/vector\"],function(e){function t(e,t){e=e.array,t=t.array;var i=t[0]-e[0],n=t[1]-e[1],a=t[2]-e[2],o=t[3]-e[3];return i*i+n*n+a*a+o*o}function i(e){this.points=[e.mp0,e.mp1],this.group=e}function n(e){var t=e.points;t[0][1]<t[1][1]||e instanceof i?(this.array=[t[0][0],t[0][1],t[1][0],t[1][1]],this._startPoint=t[0],this._endPoint=t[1]):(this.array=[t[1][0],t[1][1],t[0][0],t[0][1]],this._startPoint=t[1],this._endPoint=t[0]),this.ink=m(t[0],t[1]),this.edge=e,this.group=null}function a(){this.edgeList=[],this.mp0=l(),this.mp1=l(),this.ink=0}function o(){this.maxNearestEdge=6,this.maxTurningAngle=Math.PI/4,this.maxIteration=20}var r=e(\"../data/KDTree\"),s=e(\"zrender/tool/vector\"),l=s.create,h=s.distSquare,m=s.dist,V=s.copy,U=s.clone;return n.prototype.getStartPoint=function(){return this._startPoint},n.prototype.getEndPoint=function(){return this._endPoint},a.prototype.addEdge=function(e){e.group=this,this.edgeList.push(e)},a.prototype.removeEdge=function(e){e.group=null,this.edgeList.splice(this.edgeList.indexOf(e),1)},o.prototype={constructor:o,run:function(e){function t(e,t){return h(e,t)<1e-10}function n(e,i){for(var n=[],a=0,o=0;o<e.length;o++)a>0&&t(e[o],n[a-1])||(n[a++]=U(e[o]));return i[0]&&!t(n[0],i[0])&&(n=n.reverse()),n}for(var a=this._iterate(e),o=0;o++<this.maxIteration;){for(var r=[],s=0;s<a.groups.length;s++)r.push(new i(a.groups[s]));var l=this._iterate(r);if(l.savedInk<=0)break;a=l}var m=[],V=function(e,t){for(var a,o=0;o<e.length;o++){var r=e[o];if(r.edgeList[0]&&r.edgeList[0].edge instanceof i){for(var s=[],l=0;l<r.edgeList.length;l++)s.push(r.edgeList[l].edge.group);a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),V(s,a)}else for(var l=0;l<r.edgeList.length;l++){var h=r.edgeList[l];a=t?t.slice():[],a.unshift(r.mp0),a.push(r.mp1),a.unshift(h.getStartPoint()),a.push(h.getEndPoint()),m.push({points:n(a,h.edge.points),rawEdge:h.edge})}}};return V(a.groups),m},_iterate:function(e){for(var i=[],o=[],s=0,h=0;h<e.length;h++){var m=new n(e[h]);i.push(m)}for(var U=new r(i,4),d=[],p=l(),c=l(),u=0,y=l(),g=l(),b=0,h=0;h<i.length;h++){var m=i[h];if(!m.group){U.nearestN(m,this.maxNearestEdge,t,d);for(var f=0,k=null,x=null,_=0;_<d.length;_++){var L=d[_],W=0;L.group?L.group!==x&&(x=L.group,u=this._calculateGroupEdgeInk(L.group,m,p,c),W=L.group.ink+m.ink-u):(u=this._calculateEdgeEdgeInk(m,L,p,c),W=L.ink+m.ink-u),W>f&&(f=W,k=L,V(g,c),V(y,p),b=u)}if(k){s+=f;var X;k.group||(X=new a,o.push(X),X.addEdge(k)),X=k.group,V(X.mp0,y),V(X.mp1,g),X.ink=b,k.group.addEdge(m)}else{var X=new a;o.push(X),V(X.mp0,m.getStartPoint()),V(X.mp1,m.getEndPoint()),X.ink=m.ink,X.addEdge(m)}}}return{groups:o,edges:i,savedInk:s}},_calculateEdgeEdgeInk:function(){var e=[],t=[];return function(i,n,a,o){e[0]=i.getStartPoint(),e[1]=n.getStartPoint(),t[0]=i.getEndPoint(),t[1]=n.getEndPoint(),this._calculateMeetPoints(e,t,a,o);var r=m(e[0],a)+m(a,o)+m(o,t[0])+m(e[1],a)+m(o,t[1]);return r}}(),_calculateGroupEdgeInk:function(e,t,i,n){for(var a=[],o=[],r=0;r<e.edgeList.length;r++){var s=e.edgeList[r];a.push(s.getStartPoint()),o.push(s.getEndPoint())}a.push(t.getStartPoint()),o.push(t.getEndPoint()),this._calculateMeetPoints(a,o,i,n);for(var l=m(i,n),r=0;r<a.length;r++)l+=m(a[r],i)+m(o[r],n);return l},_calculateMeetPoints:function(){var e=l(),t=l();return function(i,n,a,o){s.set(e,0,0),s.set(t,0,0);for(var r=i.length,l=0;r>l;l++)s.add(e,e,i[l]);s.scale(e,e,1/r),r=n.length;for(var l=0;r>l;l++)s.add(t,t,n[l]);s.scale(t,t,1/r),this._limitTurningAngle(i,e,t,a),this._limitTurningAngle(n,t,e,o)}}(),_limitTurningAngle:function(){var e=l(),t=l(),i=l(),n=l();return function(a,o,r,l){var V=Math.cos(this.maxTurningAngle),U=Math.tan(this.maxTurningAngle);s.sub(e,o,r),s.normalize(e,e),s.copy(l,o);for(var d=0,p=0;p<a.length;p++){var c=a[p];s.sub(t,c,o);var u=s.len(t);s.scale(t,t,1/u);var y=s.dot(t,e);if(V>y){s.scaleAndAdd(i,o,e,u*y);var g=m(i,c),b=g/U;s.scaleAndAdd(n,i,e,-b);var f=h(n,o);f>d&&(d=f,s.copy(l,n))}}}}()},o}),i(\"zrender/shape/Star\",[\"require\",\"../tool/math\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"../tool/math\"),i=t.sin,n=t.cos,a=Math.PI,o=e(\"./Base\"),r=function(e){o.call(this,e)};return r.prototype={type:\"star\",buildPath:function(e,t){var o=t.n;if(o&&!(2>o)){var r=t.x,s=t.y,l=t.r,h=t.r0;null==h&&(h=o>4?l*n(2*a/o)/n(a/o):l/3);var m=a/o,V=-a/2,U=r+l*n(V),d=s+l*i(V);V+=m;var p=t.pointList=[];p.push([U,d]);for(var c,u=0,y=2*o-1;y>u;u++)c=u%2===0?h:l,p.push([r+c*n(V),s+c*i(V)]),V+=m;p.push([U,d]),e.moveTo(p[0][0],p[0][1]);for(var u=0;u<p.length;u++)e.lineTo(p[u][0],p[u][1]);e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;var t;return t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e(\"../tool/util\").inherits(r,o),r}),i(\"zrender/shape/Heart\",[\"require\",\"./Base\",\"./util/PathProxy\",\"../tool/area\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=e(\"./util/PathProxy\"),n=e(\"../tool/area\"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:\"heart\",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y),n.bezierCurveTo(t.x+t.a/2,t.y-2*t.b/3,t.x+2*t.a,t.y+t.b/3,t.x,t.y+t.b),n.bezierCurveTo(t.x-2*t.a,t.y+t.b/3,t.x-t.a/2,t.y-2*t.b/3,t.x,t.y),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e(\"../tool/util\").inherits(a,t),a}),i(\"zrender/shape/Droplet\",[\"require\",\"./Base\",\"./util/PathProxy\",\"../tool/area\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=e(\"./util/PathProxy\"),n=e(\"../tool/area\"),a=function(e){t.call(this,e),this._pathProxy=new i};return a.prototype={type:\"droplet\",buildPath:function(e,t){var n=this._pathProxy||new i;n.begin(e),n.moveTo(t.x,t.y+t.a),n.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+3*t.a/2,t.y-t.a/3,t.x,t.y-t.b),n.bezierCurveTo(t.x-3*t.a/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a),n.closePath()},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)?n.isInsidePath(this._pathProxy.pathCommands,this.style.lineWidth,this.style.brushType,e,t):void 0}},e(\"../tool/util\").inherits(a,t),a}),i(\"zrender/tool/math\",[],function(){function e(e,t){return Math.sin(t?e*a:e)}function t(e,t){return Math.cos(t?e*a:e)}function i(e){return e*a}function n(e){return e/a}var a=Math.PI/180;return{sin:e,cos:t,degreeToRadian:i,radianToDegree:n}}),i(\"zrender/shape/util/PathProxy\",[\"require\",\"../../tool/vector\"],function(e){var t=e(\"../../tool/vector\"),i=function(e,t){this.command=e,this.points=t||null},n=function(){this.pathCommands=[],this._ctx=null,this._min=[],this._max=[]};return n.prototype.fastBoundingRect=function(){var e=this._min,i=this._max;e[0]=e[1]=1/0,i[0]=i[1]=-(1/0);for(var n=0;n<this.pathCommands.length;n++){var a=this.pathCommands[n],o=a.points;switch(a.command){case\"M\":t.min(e,e,o),t.max(i,i,o);break;case\"L\":t.min(e,e,o),t.max(i,i,o);break;case\"C\":for(var r=0;6>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case\"Q\":for(var r=0;4>r;r+=2)e[0]=Math.min(e[0],e[0],o[r]),e[1]=Math.min(e[1],e[1],o[r+1]),i[0]=Math.max(i[0],i[0],o[r]),i[1]=Math.max(i[1],i[1],o[r+1]);break;case\"A\":var s=o[0],l=o[1],h=o[2],m=o[3];e[0]=Math.min(e[0],e[0],s-h),e[1]=Math.min(e[1],e[1],l-m),i[0]=Math.max(i[0],i[0],s+h),i[1]=Math.max(i[1],i[1],l+m)}}return{x:e[0],y:e[1],width:i[0]-e[0],height:i[1]-e[1]}},n.prototype.begin=function(e){return this._ctx=e||null,this.pathCommands.length=0,this},n.prototype.moveTo=function(e,t){return this.pathCommands.push(new i(\"M\",[e,t])),this._ctx&&this._ctx.moveTo(e,t),this},n.prototype.lineTo=function(e,t){return this.pathCommands.push(new i(\"L\",[e,t])),this._ctx&&this._ctx.lineTo(e,t),this},n.prototype.bezierCurveTo=function(e,t,n,a,o,r){return this.pathCommands.push(new i(\"C\",[e,t,n,a,o,r])),this._ctx&&this._ctx.bezierCurveTo(e,t,n,a,o,r),this},n.prototype.quadraticCurveTo=function(e,t,n,a){return this.pathCommands.push(new i(\"Q\",[e,t,n,a])),this._ctx&&this._ctx.quadraticCurveTo(e,t,n,a),this},n.prototype.arc=function(e,t,n,a,o,r){return this.pathCommands.push(new i(\"A\",[e,t,n,n,a,o-a,0,r?0:1])),this._ctx&&this._ctx.arc(e,t,n,a,o,r),this},n.prototype.arcTo=function(e,t,i,n,a){return this._ctx&&this._ctx.arcTo(e,t,i,n,a),this},n.prototype.rect=function(e,t,i,n){return this._ctx&&this._ctx.rect(e,t,i,n),this},n.prototype.closePath=function(){return this.pathCommands.push(new i(\"z\")),this._ctx&&this._ctx.closePath(),this},n.prototype.isEmpty=function(){return 0===this.pathCommands.length},n.PathSegment=i,n}),i(\"zrender/shape/Line\",[\"require\",\"./Base\",\"./util/dashedLineTo\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=e(\"./util/dashedLineTo\"),n=function(e){this.brushTypeOnly=\"stroke\",this.textPosition=\"end\",t.call(this,e)};return n.prototype={type:\"line\",buildPath:function(e,t){if(t.lineType&&\"solid\"!=t.lineType){if(\"dashed\"==t.lineType||\"dotted\"==t.lineType){var n=(t.lineWidth||1)*(\"dashed\"==t.lineType?5:1);i(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}}else e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=e.lineWidth||1;return e.__rect={x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t},e.__rect}},e(\"../tool/util\").inherits(n,t),n}),i(\"zrender/shape/BezierCurve\",[\"require\",\"./Base\",\"../tool/util\"],function(e){\"use strict\";var t=e(\"./Base\"),i=function(e){this.brushTypeOnly=\"stroke\",this.textPosition=\"end\",t.call(this,e)};return i.prototype={type:\"bezier-curve\",buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),\"undefined\"!=typeof t.cpX2&&\"undefined\"!=typeof t.cpY2?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){if(e.__rect)return e.__rect;var t=Math.min(e.xStart,e.xEnd,e.cpX1),i=Math.min(e.yStart,e.yEnd,e.cpY1),n=Math.max(e.xStart,e.xEnd,e.cpX1),a=Math.max(e.yStart,e.yEnd,e.cpY1),o=e.cpX2,r=e.cpY2;\"undefined\"!=typeof o&&\"undefined\"!=typeof r&&(t=Math.min(t,o),i=Math.min(i,r),n=Math.max(n,o),a=Math.max(a,r));var s=e.lineWidth||1;return e.__rect={x:t-s,y:i-s,width:n-t+s,height:a-i+s},e.__rect}},e(\"../tool/util\").inherits(i,t),i}),i(\"zrender/shape/util/dashedLineTo\",[],function(){var e=[5,5];return function(t,i,n,a,o,r){if(t.setLineDash)return e[0]=e[1]=r,t.setLineDash(e),t.moveTo(i,n),void t.lineTo(a,o);r=\"number\"!=typeof r?5:r;var s=a-i,l=o-n,h=Math.floor(Math.sqrt(s*s+l*l)/r);s/=h,l/=h;for(var m=!0,V=0;h>V;++V)m?t.moveTo(i,n):t.lineTo(i,n),m=!m,i+=s,n+=l;t.lineTo(a,o)}}),i(\"zrender/shape/Polygon\",[\"require\",\"./Base\",\"./util/smoothSpline\",\"./util/smoothBezier\",\"./util/dashedLineTo\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=e(\"./util/smoothSpline\"),n=e(\"./util/smoothBezier\"),a=e(\"./util/dashedLineTo\"),o=function(e){t.call(this,e)};return o.prototype={type:\"polygon\",buildPath:function(e,t){var o=t.pointList;if(!(o.length<2)){if(t.smooth&&\"spline\"!==t.smooth){var r=n(o,t.smooth,!0,t.smoothConstraint);e.moveTo(o[0][0],o[0][1]);for(var s,l,h,m=o.length,V=0;m>V;V++)s=r[2*V],l=r[2*V+1],h=o[(V+1)%m],e.bezierCurveTo(s[0],s[1],l[0],l[1],h[0],h[1])}else if(\"spline\"===t.smooth&&(o=i(o,!0)),t.lineType&&\"solid\"!=t.lineType){if(\"dashed\"==t.lineType||\"dotted\"==t.lineType){var U=t._dashLength||(t.lineWidth||1)*(\"dashed\"==t.lineType?5:1);t._dashLength=U,e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)a(e,o[V-1][0],o[V-1][1],o[V][0],o[V][1],U);a(e,o[o.length-1][0],o[o.length-1][1],o[0][0],o[0][1],U)}}else{e.moveTo(o[0][0],o[0][1]);for(var V=1,d=o.length;d>V;V++)e.lineTo(o[V][0],o[V][1]);e.lineTo(o[0][0],o[0][1])}e.closePath()}},getRect:function(e){if(e.__rect)return e.__rect;for(var t=Number.MAX_VALUE,i=Number.MIN_VALUE,n=Number.MAX_VALUE,a=Number.MIN_VALUE,o=e.pointList,r=0,s=o.length;s>r;r++)o[r][0]<t&&(t=o[r][0]),o[r][0]>i&&(i=o[r][0]),o[r][1]<n&&(n=o[r][1]),o[r][1]>a&&(a=o[r][1]);var l;return l=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(t-l/2),y:Math.round(n-l/2),width:i-t+l,height:a-n+l},e.__rect}},e(\"../tool/util\").inherits(o,t),o}),i(\"echarts/util/shape/normalIsCover\",[],function(){return function(e,t){var i=this.transformCoordToLocal(e,t);return e=i[0],t=i[1],this.isCoverRect(e,t)}}),i(\"zrender/shape/util/smoothSpline\",[\"require\",\"../../tool/vector\"],function(e){function t(e,t,i,n,a,o,r){var s=.5*(i-e),l=.5*(n-t);return(2*(t-i)+s+l)*r+(-3*(t-i)-2*s-l)*o+s*a+t}var i=e(\"../../tool/vector\");return function(e,n){for(var a=e.length,o=[],r=0,s=1;a>s;s++)r+=i.distance(e[s-1],e[s]);var l=r/5;l=a>l?a:l;for(var s=0;l>s;s++){var h,m,V,U=s/(l-1)*(n?a:a-1),d=Math.floor(U),p=U-d,c=e[d%a];n?(h=e[(d-1+a)%a],m=e[(d+1)%a],V=e[(d+2)%a]):(h=e[0===d?d:d-1],m=e[d>a-2?a-1:d+1],V=e[d>a-3?a-1:d+2]);var u=p*p,y=p*u;o.push([t(h[0],c[0],m[0],V[0],p,u,y),t(h[1],c[1],m[1],V[1],p,u,y)])}return o}}),i(\"zrender/shape/util/smoothBezier\",[\"require\",\"../../tool/vector\"],function(e){var t=e(\"../../tool/vector\");return function(e,i,n,a){var o,r,s,l,h=[],m=[],V=[],U=[],d=!!a;if(d){s=[1/0,1/0],l=[-(1/0),-(1/0)];for(var p=0,c=e.length;c>p;p++)t.min(s,s,e[p]),t.max(l,l,e[p]);t.min(s,s,a[0]),t.max(l,l,a[1])}for(var p=0,c=e.length;c>p;p++){var o,r,u=e[p];if(n)o=e[p?p-1:c-1],r=e[(p+1)%c];else{if(0===p||p===c-1){h.push(t.clone(e[p]));continue}o=e[p-1],r=e[p+1]}t.sub(m,r,o),t.scale(m,m,i);var y=t.distance(u,o),g=t.distance(u,r),b=y+g;0!==b&&(y/=b,g/=b),t.scale(V,m,-y),t.scale(U,m,g);var f=t.add([],u,V),k=t.add([],u,U);d&&(t.max(f,f,s),t.min(f,f,l),t.max(k,k,s),t.min(k,k,l)),h.push(f),h.push(k)}return n&&h.push(t.clone(h.shift())),h}}),i(\"echarts/util/ecQuery\",[\"require\",\"zrender/tool/util\"],function(e){function t(e,t){if(\"undefined\"!=typeof e){if(!t)return e;t=t.split(\".\");for(var i=t.length,n=0;i>n;){if(e=e[t[n]],\"undefined\"==typeof e)return;n++}return e}}function i(e,i){for(var n,a=0,o=e.length;o>a;a++)if(n=t(e[a],i),\"undefined\"!=typeof n)return n}function n(e,i){for(var n,o=e.length;o--;){var r=t(e[o],i);\"undefined\"!=typeof r&&(\"undefined\"==typeof n?n=a.clone(r):a.merge(n,r,!0))}return n}var a=e(\"zrender/tool/util\");return{query:t,deepQuery:i,deepMerge:n}}),i(\"echarts/util/number\",[],function(){function e(e){return e.replace(/^\\s+/,\"\").replace(/\\s+$/,\"\")}function t(t,i){return\"string\"==typeof t?e(t).match(/%$/)?parseFloat(t)/100*i:parseFloat(t):t}function i(e,i){return[t(i[0],e.getWidth()),t(i[1],e.getHeight())]}function n(e,i){i instanceof Array||(i=[0,i]);var n=Math.min(e.getWidth(),e.getHeight())/2;return[t(i[0],n),t(i[1],n)]}function a(e){return isNaN(e)?\"-\":(e=(e+\"\").split(\".\"),e[0].replace(/(\\d{1,3})(?=(?:\\d{3})+(?!\\d))/g,\"$1,\")+(e.length>1?\".\"+e[1]:\"\"))}function o(e){for(var t=1,i=0;Math.round(e*t)/t!==e;)t*=10,i++;return i}return{parsePercent:t,parseCenter:i,parseRadius:n,addCommas:a,getPrecision:o}}),i(\"echarts/data/KDTree\",[\"require\",\"./quickSelect\"],function(e){function t(e,t){this.left=null,this.right=null,this.axis=e,this.data=t}var i=e(\"./quickSelect\"),n=function(e,t){e.length&&(t||(t=e[0].array.length),this.dimension=t,this.root=this._buildTree(e,0,e.length-1,0),this._stack=[],this._nearstNList=[])};return n.prototype._buildTree=function(e,n,a,o){if(n>a)return null;var r=Math.floor((n+a)/2);r=i(e,n,a,r,function(e,t){return e.array[o]-t.array[o]});var s=e[r],l=new t(o,s);return o=(o+1)%this.dimension,a>n&&(l.left=this._buildTree(e,n,r-1,o),l.right=this._buildTree(e,r+1,a,o)),l},n.prototype.nearest=function(e,t){var i=this.root,n=this._stack,a=0,o=1/0,r=null;for(i.data!==e&&(o=t(i.data,e),r=i),e.array[i.axis]<i.data.array[i.axis]?(i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right));a--;){i=n[a];var s=e.array[i.axis]-i.data.array[i.axis],l=0>s,h=!1;s*=s,o>s&&(s=t(i.data,e),o>s&&i.data!==e&&(o=s,r=i),h=!0),l?(h&&i.right&&(n[a++]=i.right),i.left&&(n[a++]=i.left)):(h&&i.left&&(n[a++]=i.left),i.right&&(n[a++]=i.right))}return r.data},n.prototype._addNearest=function(e,t,i){for(var n=this._nearstNList,a=e-1;a>0&&!(t>=n[a-1].dist);a--)n[a].dist=n[a-1].dist,n[a].node=n[a-1].node;n[a].dist=t,n[a].node=i},n.prototype.nearestN=function(e,t,i,n){if(0>=t)return n.length=0,n;for(var a=this.root,o=this._stack,r=0,s=this._nearstNList,l=0;t>l;l++)s[l]||(s[l]={}),s[l].dist=0,s[l].node=null;var h=i(a.data,e),m=0;for(a.data!==e&&(m++,this._addNearest(m,h,a)),e.array[a.axis]<a.data.array[a.axis]?(a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right));r--;){a=o[r];var h=e.array[a.axis]-a.data.array[a.axis],V=0>h,U=!1;h*=h,(t>m||h<s[m-1].dist)&&(h=i(a.data,e),(t>m||h<s[m-1].dist)&&a.data!==e&&(t>m&&m++,this._addNearest(m,h,a)),U=!0),V?(U&&a.right&&(o[r++]=a.right),a.left&&(o[r++]=a.left)):(U&&a.left&&(o[r++]=a.left),a.right&&(o[r++]=a.right))}for(var l=0;m>l;l++)n[l]=s[l].node.data;return n.length=m,n},n}),i(\"echarts/data/quickSelect\",[\"require\"],function(){function e(e,t){return e-t}function t(e,t,i){var n=e[t];e[t]=e[i],e[i]=n}function i(e,i,n,a,o){for(var r=i;n>i;){var r=Math.round((n+i)/2),s=e[r];t(e,r,n),r=i;for(var l=i;n-1>=l;l++)o(s,e[l])>=0&&(t(e,l,r),r++);if(t(e,n,r),r===a)return r;a>r?i=r+1:n=r-1}return i}function n(t,n,a,o,r){return arguments.length<=3&&(o=n,r=2==arguments.length?e:a,n=0,a=t.length-1),i(t,n,a,o,r)}return n}),i(\"echarts/component/dataView\",[\"require\",\"./base\",\"../config\",\"zrender/tool/util\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.dom=o.dom,this._tDom=document.createElement(\"div\"),this._textArea=document.createElement(\"textArea\"),this._buttonRefresh=document.createElement(\"button\"),this._buttonRefresh.setAttribute(\"type\",\"button\"),this._buttonClose=document.createElement(\"button\"),this._buttonClose.setAttribute(\"type\",\"button\"),this._hasShow=!1,this._zrHeight=n.getHeight(),this._zrWidth=n.getWidth(),this._tDom.className=\"echarts-dataview\",this.hide(),this.dom.firstChild.appendChild(this._tDom),window.addEventListener?(this._tDom.addEventListener(\"click\",this._stop),this._tDom.addEventListener(\"mousewheel\",this._stop),this._tDom.addEventListener(\"mousemove\",this._stop),this._tDom.addEventListener(\"mousedown\",this._stop),this._tDom.addEventListener(\"mouseup\",this._stop),this._tDom.addEventListener(\"touchstart\",this._stop),this._tDom.addEventListener(\"touchmove\",this._stop),this._tDom.addEventListener(\"touchend\",this._stop)):(this._tDom.attachEvent(\"onclick\",this._stop),this._tDom.attachEvent(\"onmousewheel\",this._stop),this._tDom.attachEvent(\"onmousemove\",this._stop),this._tDom.attachEvent(\"onmousedown\",this._stop),this._tDom.attachEvent(\"onmouseup\",this._stop))}var i=e(\"./base\"),n=e(\"../config\"),a=e(\"zrender/tool/util\");return t.prototype={type:n.COMPONENT_TYPE_DATAVIEW,_lang:[\"Data View\",\"close\",\"refresh\"],_gCssText:\"position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;\",hide:function(){this._sizeCssText=\"width:\"+this._zrWidth+\"px;height:0px;background-color:#f0ffff;\",this._tDom.style.cssText=this._gCssText+this._sizeCssText},show:function(e){this._hasShow=!0;var t=this.query(this.option,\"toolbox.feature.dataView.lang\")||this._lang;this.option=e,this._tDom.innerHTML='<p style=\"padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee\">'+(t[0]||this._lang[0])+\"</p>\";var i=this.query(this.option,\"toolbox.feature.dataView.optionToContent\");\"function\"!=typeof i?this._textArea.value=this._optionToContent():(this._textArea=document.createElement(\"div\"),this._textArea.innerHTML=i(this.option)),this._textArea.style.cssText=\"display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:\"+(this._zrHeight-100)+\"px;\",this._tDom.appendChild(this._textArea),this._buttonClose.style.cssText=\"float:right;padding:1px 6px;\",this._buttonClose.innerHTML=t[1]||this._lang[1];var n=this;this._buttonClose.onclick=function(){n.hide()},this._tDom.appendChild(this._buttonClose),this.query(this.option,\"toolbox.feature.dataView.readOnly\")===!1?(this._buttonRefresh.style.cssText=\"float:right;margin-right:10px;padding:1px 6px;\",this._buttonRefresh.innerHTML=t[2]||this._lang[2],this._buttonRefresh.onclick=function(){n._save()},this._textArea.readOnly=!1,this._textArea.style.cursor=\"default\"):(this._buttonRefresh.style.cssText=\"display:none\",\nthis._textArea.readOnly=!0,this._textArea.style.cursor=\"text\"),this._tDom.appendChild(this._buttonRefresh),this._sizeCssText=\"width:\"+this._zrWidth+\"px;height:\"+this._zrHeight+\"px;background-color:#fff;\",this._tDom.style.cssText=this._gCssText+this._sizeCssText},_optionToContent:function(){var e,t,i,a,o,r,s=[],l=\"\";if(this.option.xAxis)for(s=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],e=0,a=s.length;a>e;e++)if(\"category\"==(s[e].type||\"category\")){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(\", \")+\"\\n\\n\"}if(this.option.yAxis)for(s=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],e=0,a=s.length;a>e;e++)if(\"category\"==s[e].type){for(r=[],t=0,i=s[e].data.length;i>t;t++)r.push(this.getDataFromOption(s[e].data[t]));l+=r.join(\", \")+\"\\n\\n\"}var h,m=this.option.series;for(e=0,a=m.length;a>e;e++){for(r=[],t=0,i=m[e].data.length;i>t;t++)o=m[e].data[t],h=m[e].type==n.CHART_TYPE_PIE||m[e].type==n.CHART_TYPE_MAP?(o.name||\"-\")+\":\":\"\",m[e].type==n.CHART_TYPE_SCATTER&&(o=this.getDataFromOption(o).join(\", \")),r.push(h+this.getDataFromOption(o));l+=(m[e].name||\"-\")+\" : \\n\",l+=r.join(m[e].type==n.CHART_TYPE_SCATTER?\"\\n\":\", \"),l+=\"\\n\\n\"}return l},_save:function(){var e=this.query(this.option,\"toolbox.feature.dataView.contentToOption\");if(\"function\"!=typeof e){for(var t=this._textArea.value.split(\"\\n\"),i=[],a=0,o=t.length;o>a;a++)t[a]=this._trim(t[a]),\"\"!==t[a]&&i.push(t[a]);this._contentToOption(i)}else e(this._textArea,this.option);this.hide();var r=this;setTimeout(function(){r.messageCenter&&r.messageCenter.dispatch(n.EVENT.DATA_VIEW_CHANGED,null,{option:r.option},r.myChart)},r.canvasSupported?800:100)},_contentToOption:function(e){var t,i,a,o,r,s,l,h=[],m=0;if(this.option.xAxis)for(h=this.option.xAxis instanceof Array?this.option.xAxis:[this.option.xAxis],t=0,o=h.length;o>t;t++)if(\"category\"==(h[t].type||\"category\")){for(s=e[m].split(\",\"),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||\"\"),r=h[t].data[i],\"undefined\"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}if(this.option.yAxis)for(h=this.option.yAxis instanceof Array?this.option.yAxis:[this.option.yAxis],t=0,o=h.length;o>t;t++)if(\"category\"==h[t].type){for(s=e[m].split(\",\"),i=0,a=h[t].data.length;a>i;i++)l=this._trim(s[i]||\"\"),r=h[t].data[i],\"undefined\"!=typeof h[t].data[i].value?h[t].data[i].value=l:h[t].data[i]=l;m++}var V=this.option.series;for(t=0,o=V.length;o>t;t++)if(m++,V[t].type==n.CHART_TYPE_SCATTER)for(var i=0,a=V[t].data.length;a>i;i++)s=e[m],l=s.replace(\" \",\"\").split(\",\"),\"undefined\"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l,m++;else{s=e[m].split(\",\");for(var i=0,a=V[t].data.length;a>i;i++)l=(s[i]||\"\").replace(/.*:/,\"\"),l=this._trim(l),l=\"-\"!=l&&\"\"!==l?l-0:\"-\",\"undefined\"!=typeof V[t].data[i].value?V[t].data[i].value=l:V[t].data[i]=l;m++}},_trim:function(e){var t=new RegExp(\"(^[\\\\s\\\\t\\\\xa0\\\\u3000]+)|([\\\\u3000\\\\xa0\\\\s\\\\t]+$)\",\"g\");return e.replace(t,\"\")},_stop:function(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0},resize:function(){this._zrHeight=this.zr.getHeight(),this._zrWidth=this.zr.getWidth(),this._tDom.offsetHeight>10&&(this._sizeCssText=\"width:\"+this._zrWidth+\"px;height:\"+this._zrHeight+\"px;background-color:#fff;\",this._tDom.style.cssText=this._gCssText+this._sizeCssText,this._textArea.style.cssText=\"display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:100%;height:\"+(this._zrHeight-100)+\"px;\")},dispose:function(){window.removeEventListener?(this._tDom.removeEventListener(\"click\",this._stop),this._tDom.removeEventListener(\"mousewheel\",this._stop),this._tDom.removeEventListener(\"mousemove\",this._stop),this._tDom.removeEventListener(\"mousedown\",this._stop),this._tDom.removeEventListener(\"mouseup\",this._stop),this._tDom.removeEventListener(\"touchstart\",this._stop),this._tDom.removeEventListener(\"touchmove\",this._stop),this._tDom.removeEventListener(\"touchend\",this._stop)):(this._tDom.detachEvent(\"onclick\",this._stop),this._tDom.detachEvent(\"onmousewheel\",this._stop),this._tDom.detachEvent(\"onmousemove\",this._stop),this._tDom.detachEvent(\"onmousedown\",this._stop),this._tDom.detachEvent(\"onmouseup\",this._stop)),this._buttonRefresh.onclick=null,this._buttonClose.onclick=null,this._hasShow&&(this._tDom.removeChild(this._textArea),this._tDom.removeChild(this._buttonRefresh),this._tDom.removeChild(this._buttonClose)),this._textArea=null,this._buttonRefresh=null,this._buttonClose=null,this.dom.firstChild.removeChild(this._tDom),this._tDom=null}},a.inherits(t,i),e(\"../component\").define(\"dataView\",t),t}),i(\"echarts/util/shape/Cross\",[\"require\",\"zrender/shape/Base\",\"zrender/shape/Line\",\"zrender/tool/util\",\"./normalIsCover\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/shape/Line\"),a=e(\"zrender/tool/util\");return t.prototype={type:\"cross\",buildPath:function(e,t){var i=t.rect;t.xStart=i.x,t.xEnd=i.x+i.width,t.yStart=t.yEnd=t.y,n.prototype.buildPath(e,t),t.xStart=t.xEnd=t.x,t.yStart=i.y,t.yEnd=i.y+i.height,n.prototype.buildPath(e,t)},getRect:function(e){return e.rect},isCover:e(\"./normalIsCover\")},a.inherits(t,i),t}),i(\"zrender/shape/Sector\",[\"require\",\"../tool/math\",\"../tool/computeBoundingBox\",\"../tool/vector\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"../tool/math\"),i=e(\"../tool/computeBoundingBox\"),n=e(\"../tool/vector\"),a=e(\"./Base\"),o=n.create(),r=n.create(),s=n.create(),l=n.create(),h=function(e){a.call(this,e)};return h.prototype={type:\"sector\",buildPath:function(e,i){var n=i.x,a=i.y,o=i.r0||0,r=i.r,s=i.startAngle,l=i.endAngle,h=i.clockWise||!1;s=t.degreeToRadian(s),l=t.degreeToRadian(l),h||(s=-s,l=-l);var m=t.cos(s),V=t.sin(s);e.moveTo(m*o+n,V*o+a),e.lineTo(m*r+n,V*r+a),e.arc(n,a,r,s,l,!h),e.lineTo(t.cos(l)*o+n,t.sin(l)*o+a),0!==o&&e.arc(n,a,o,l,s,h),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var a=e.x,h=e.y,m=e.r0||0,V=e.r,U=t.degreeToRadian(e.startAngle),d=t.degreeToRadian(e.endAngle),p=e.clockWise;return p||(U=-U,d=-d),m>1?i.arc(a,h,m,U,d,!p,o,s):(o[0]=s[0]=a,o[1]=s[1]=h),i.arc(a,h,V,U,d,!p,r,l),n.min(o,o,r),n.max(s,s,l),e.__rect={x:o[0],y:o[1],width:s[0]-o[0],height:s[1]-o[1]},e.__rect}},e(\"../tool/util\").inherits(h,a),h}),i(\"echarts/util/shape/Candle\",[\"require\",\"zrender/shape/Base\",\"zrender/tool/util\",\"./normalIsCover\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/tool/util\");return t.prototype={type:\"candle\",_numberOrder:function(e,t){return t-e},buildPath:function(e,t){var i=n.clone(t.y).sort(this._numberOrder);e.moveTo(t.x,i[3]),e.lineTo(t.x,i[2]),e.moveTo(t.x-t.width/2,i[2]),e.rect(t.x-t.width/2,i[2],t.width,i[1]-i[2]),e.moveTo(t.x,i[1]),e.lineTo(t.x,i[0])},getRect:function(e){if(!e.__rect){var t=0;(\"stroke\"==e.brushType||\"fill\"==e.brushType)&&(t=e.lineWidth||1);var i=n.clone(e.y).sort(this._numberOrder);e.__rect={x:Math.round(e.x-e.width/2-t/2),y:Math.round(i[3]-t/2),width:e.width+t,height:i[0]-i[3]+t}}return e.__rect},isCover:e(\"./normalIsCover\")},n.inherits(t,i),t}),i(\"zrender/tool/computeBoundingBox\",[\"require\",\"./vector\",\"./curve\"],function(e){function t(e,t,i){if(0!==e.length){for(var n=e[0][0],a=e[0][0],o=e[0][1],r=e[0][1],s=1;s<e.length;s++){var l=e[s];l[0]<n&&(n=l[0]),l[0]>a&&(a=l[0]),l[1]<o&&(o=l[1]),l[1]>r&&(r=l[1])}t[0]=n,t[1]=o,i[0]=a,i[1]=r}}function i(e,t,i,n,a,r){var s=[];o.cubicExtrema(e[0],t[0],i[0],n[0],s);for(var l=0;l<s.length;l++)s[l]=o.cubicAt(e[0],t[0],i[0],n[0],s[l]);var h=[];o.cubicExtrema(e[1],t[1],i[1],n[1],h);for(var l=0;l<h.length;l++)h[l]=o.cubicAt(e[1],t[1],i[1],n[1],h[l]);s.push(e[0],n[0]),h.push(e[1],n[1]);var m=Math.min.apply(null,s),V=Math.max.apply(null,s),U=Math.min.apply(null,h),d=Math.max.apply(null,h);a[0]=m,a[1]=U,r[0]=V,r[1]=d}function n(e,t,i,n,a){var r=o.quadraticExtremum(e[0],t[0],i[0]),s=o.quadraticExtremum(e[1],t[1],i[1]);r=Math.max(Math.min(r,1),0),s=Math.max(Math.min(s,1),0);var l=1-r,h=1-s,m=l*l*e[0]+2*l*r*t[0]+r*r*i[0],V=l*l*e[1]+2*l*r*t[1]+r*r*i[1],U=h*h*e[0]+2*h*s*t[0]+s*s*i[0],d=h*h*e[1]+2*h*s*t[1]+s*s*i[1];n[0]=Math.min(e[0],i[0],m,U),n[1]=Math.min(e[1],i[1],V,d),a[0]=Math.max(e[0],i[0],m,U),a[1]=Math.max(e[1],i[1],V,d)}var a=e(\"./vector\"),o=e(\"./curve\"),r=a.create(),s=a.create(),l=a.create(),h=function(e,t,i,n,o,h,m,V){if(Math.abs(n-o)>=2*Math.PI)return m[0]=e-i,m[1]=t-i,V[0]=e+i,void(V[1]=t+i);if(r[0]=Math.cos(n)*i+e,r[1]=Math.sin(n)*i+t,s[0]=Math.cos(o)*i+e,s[1]=Math.sin(o)*i+t,a.min(m,r,s),a.max(V,r,s),n%=2*Math.PI,0>n&&(n+=2*Math.PI),o%=2*Math.PI,0>o&&(o+=2*Math.PI),n>o&&!h?o+=2*Math.PI:o>n&&h&&(n+=2*Math.PI),h){var U=o;o=n,n=U}for(var d=0;o>d;d+=Math.PI/2)d>n&&(l[0]=Math.cos(d)*i+e,l[1]=Math.sin(d)*i+t,a.min(m,l,m),a.max(V,l,V))};return t.cubeBezier=i,t.quadraticBezier=n,t.arc=h,t}),i(\"echarts/util/shape/Chain\",[\"require\",\"zrender/shape/Base\",\"./Icon\",\"zrender/shape/util/dashedLineTo\",\"zrender/tool/util\",\"zrender/tool/matrix\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"./Icon\"),a=e(\"zrender/shape/util/dashedLineTo\"),o=e(\"zrender/tool/util\"),r=e(\"zrender/tool/matrix\");return t.prototype={type:\"chain\",brush:function(e,t){var i=this.style;t&&(i=this.getHighlightStyle(i,this.highlightStyle||{})),e.save(),this.setContext(e,i),this.setTransform(e),e.save(),e.beginPath(),this.buildLinePath(e,i),e.stroke(),e.restore(),this.brushSymbol(e,i),e.restore()},buildLinePath:function(e,t){var i=t.x,n=t.y+5,o=t.width,r=t.height/2-10;if(e.moveTo(i,n),e.lineTo(i,n+r),e.moveTo(i+o,n),e.lineTo(i+o,n+r),e.moveTo(i,n+r/2),t.lineType&&\"solid\"!=t.lineType){if(\"dashed\"==t.lineType||\"dotted\"==t.lineType){var s=(t.lineWidth||1)*(\"dashed\"==t.lineType?5:1);a(e,i,n+r/2,i+o,n+r/2,s)}}else e.lineTo(i+o,n+r/2)},brushSymbol:function(e,t){var i=t.y+t.height/4;e.save();for(var a,o=t.chainPoint,r=0,s=o.length;s>r;r++){if(a=o[r],\"none\"!=a.symbol){e.beginPath();var l=a.symbolSize;n.prototype.buildPath(e,{iconType:a.symbol,x:a.x-l,y:i-l,width:2*l,height:2*l,n:a.n}),e.fillStyle=a.isEmpty?\"#fff\":t.strokeColor,e.closePath(),e.fill(),e.stroke()}a.showLabel&&(e.font=a.textFont,e.fillStyle=a.textColor,e.textAlign=a.textAlign,e.textBaseline=a.textBaseline,a.rotation?(e.save(),this._updateTextTransform(e,a.rotation),e.fillText(a.name,a.textX,a.textY),e.restore()):e.fillText(a.name,a.textX,a.textY))}e.restore()},_updateTextTransform:function(e,t){var i=r.create();if(r.identity(i),0!==t[0]){var n=t[1]||0,a=t[2]||0;(n||a)&&r.translate(i,i,[-n,-a]),r.rotate(i,i,t[0]),(n||a)&&r.translate(i,i,[n,a])}e.transform.apply(e,i)},isCover:function(e,t){var i=this.style;return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?!0:!1}},o.inherits(t,i),t}),i(\"zrender/shape/Ring\",[\"require\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={type:\"ring\",buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,2*Math.PI,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,2*Math.PI,!0)},getRect:function(e){if(e.__rect)return e.__rect;var t;return t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:2*e.r+t,height:2*e.r+t},e.__rect}},e(\"../tool/util\").inherits(i,t),i}),i(\"echarts/component/axis\",[\"require\",\"./base\",\"zrender/shape/Line\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"./categoryAxis\",\"./valueAxis\",\"../component\"],function(e){function t(e,t,n,a,o,r){i.call(this,e,t,n,a,o),this.axisType=r,this._axisList=[],this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Line\"),a=e(\"../config\"),o=e(\"../util/ecData\"),r=e(\"zrender/tool/util\"),s=e(\"zrender/tool/color\");return t.prototype={type:a.COMPONENT_TYPE_AXIS,axisBase:{_buildAxisLine:function(){var e=this.option.axisLine.lineStyle.width,t=e/2,i={_axisShape:\"axisLine\",zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1},a=this.grid;switch(this.option.position){case\"left\":i.style={xStart:a.getX()-t,yStart:a.getYend(),xEnd:a.getX()-t,yEnd:a.getY(),lineCap:\"round\"};break;case\"right\":i.style={xStart:a.getXend()+t,yStart:a.getYend(),xEnd:a.getXend()+t,yEnd:a.getY(),lineCap:\"round\"};break;case\"bottom\":i.style={xStart:a.getX(),yStart:a.getYend()+t,xEnd:a.getXend(),yEnd:a.getYend()+t,lineCap:\"round\"};break;case\"top\":i.style={xStart:a.getX(),yStart:a.getY()-t,xEnd:a.getXend(),yEnd:a.getY()-t,lineCap:\"round\"}}var o=i.style;\"\"!==this.option.name&&(o.text=this.option.name,o.textPosition=this.option.nameLocation,o.textFont=this.getFont(this.option.nameTextStyle),this.option.nameTextStyle.align&&(o.textAlign=this.option.nameTextStyle.align),this.option.nameTextStyle.baseline&&(o.textBaseline=this.option.nameTextStyle.baseline),this.option.nameTextStyle.color&&(o.textColor=this.option.nameTextStyle.color)),o.strokeColor=this.option.axisLine.lineStyle.color,o.lineWidth=e,this.isHorizontal()?o.yStart=o.yEnd=this.subPixelOptimize(o.yEnd,e):o.xStart=o.xEnd=this.subPixelOptimize(o.xEnd,e),o.lineType=this.option.axisLine.lineStyle.type,i=new n(i),this.shapeList.push(i)},_axisLabelClickable:function(e,t){return e?(o.pack(t,void 0,-1,void 0,-1,t.style.text),t.hoverable=!0,t.clickable=!0,t.highlightStyle={color:s.lift(t.style.color,1),brushType:\"fill\"},t):t},refixAxisShape:function(e,t){if(this.option.axisLine.onZero){var i;if(this.isHorizontal()&&null!=t)for(var n=0,a=this.shapeList.length;a>n;n++)\"axisLine\"===this.shapeList[n]._axisShape?(this.shapeList[n].style.yStart=this.shapeList[n].style.yEnd=this.subPixelOptimize(t,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):\"axisTick\"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.yEnd-this.shapeList[n].style.yStart,this.shapeList[n].style.yStart=t-i,this.shapeList[n].style.yEnd=t,this.zr.modShape(this.shapeList[n].id));if(!this.isHorizontal()&&null!=e)for(var n=0,a=this.shapeList.length;a>n;n++)\"axisLine\"===this.shapeList[n]._axisShape?(this.shapeList[n].style.xStart=this.shapeList[n].style.xEnd=this.subPixelOptimize(e,this.shapeList[n].stylelineWidth),this.zr.modShape(this.shapeList[n].id)):\"axisTick\"===this.shapeList[n]._axisShape&&(i=this.shapeList[n].style.xEnd-this.shapeList[n].style.xStart,this.shapeList[n].style.xStart=e,this.shapeList[n].style.xEnd=e+i,this.zr.modShape(this.shapeList[n].id))}},getPosition:function(){return this.option.position},isHorizontal:function(){return\"bottom\"===this.option.position||\"top\"===this.option.position}},reformOption:function(e){if(!e||e instanceof Array&&0===e.length?e=[{type:a.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]),\"xAxis\"===this.axisType){(!e[0].position||\"bottom\"!=e[0].position&&\"top\"!=e[0].position)&&(e[0].position=\"bottom\"),e.length>1&&(e[1].position=\"bottom\"===e[0].position?\"top\":\"bottom\");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||\"category\",e[t].xAxisIndex=t,e[t].yAxisIndex=-1}else{(!e[0].position||\"left\"!=e[0].position&&\"right\"!=e[0].position)&&(e[0].position=\"left\"),e.length>1&&(e[1].position=\"left\"===e[0].position?\"right\":\"left\");for(var t=0,i=e.length;i>t;t++)e[t].type=e[t].type||\"value\",e[t].xAxisIndex=-1,e[t].yAxisIndex=t}return e},refresh:function(t){var i;t&&(this.option=t,\"xAxis\"===this.axisType?(this.option.xAxis=this.reformOption(t.xAxis),i=this.option.xAxis):(this.option.yAxis=this.reformOption(t.yAxis),i=this.option.yAxis),this.series=t.series);for(var n=e(\"./categoryAxis\"),a=e(\"./valueAxis\"),o=Math.max(i&&i.length||0,this._axisList.length),r=0;o>r;r++)!this._axisList[r]||!t||i[r]&&this._axisList[r].type==i[r].type||(this._axisList[r].dispose&&this._axisList[r].dispose(),this._axisList[r]=!1),this._axisList[r]?this._axisList[r].refresh&&this._axisList[r].refresh(i?i[r]:!1,this.series):i&&i[r]&&(this._axisList[r]=\"category\"===i[r].type?new n(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase):new a(this.ecTheme,this.messageCenter,this.zr,i[r],this.myChart,this.axisBase,this.series))},getAxis:function(e){return this._axisList[e]},getAxisCount:function(){return this._axisList.length},clear:function(){for(var e=0,t=this._axisList.length;t>e;e++)this._axisList[e].dispose&&this._axisList[e].dispose();this._axisList=[]}},r.inherits(t,i),e(\"../component\").define(\"axis\",t),t}),i(\"echarts/component/grid\",[\"require\",\"./base\",\"zrender/shape/Rectangle\",\"../config\",\"zrender/tool/util\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Rectangle\"),a=e(\"../config\");a.grid={zlevel:0,z:0,x:80,y:60,x2:80,y2:60,backgroundColor:\"rgba(0,0,0,0)\",borderWidth:1,borderColor:\"#ccc\"};var o=e(\"zrender/tool/util\");return t.prototype={type:a.COMPONENT_TYPE_GRID,getX:function(){return this._x},getY:function(){return this._y},getWidth:function(){return this._width},getHeight:function(){return this._height},getXend:function(){return this._x+this._width},getYend:function(){return this._y+this._height},getArea:function(){return{x:this._x,y:this._y,width:this._width,height:this._height}},getBbox:function(){return[[this._x,this._y],[this.getXend(),this.getYend()]]},refixAxisShape:function(e){for(var t,i,n,o=e.xAxis._axisList.concat(e.yAxis?e.yAxis._axisList:[]),r=o.length;r--;)n=o[r],n.type==a.COMPONENT_TYPE_AXIS_VALUE&&n._min<0&&n._max>=0&&(n.isHorizontal()?t=n.getCoord(0):i=n.getCoord(0));if(\"undefined\"!=typeof t||\"undefined\"!=typeof i)for(r=o.length;r--;)o[r].refixAxisShape(t,i)},refresh:function(e){if(e||this._zrWidth!=this.zr.getWidth()||this._zrHeight!=this.zr.getHeight()){this.clear(),this.option=e||this.option,this.option.grid=this.reformOption(this.option.grid);var t=this.option.grid;this._zrWidth=this.zr.getWidth(),this._zrHeight=this.zr.getHeight(),this._x=this.parsePercent(t.x,this._zrWidth),this._y=this.parsePercent(t.y,this._zrHeight);var i=this.parsePercent(t.x2,this._zrWidth),a=this.parsePercent(t.y2,this._zrHeight);this._width=\"undefined\"==typeof t.width?this._zrWidth-this._x-i:this.parsePercent(t.width,this._zrWidth),this._width=this._width<=0?10:this._width,this._height=\"undefined\"==typeof t.height?this._zrHeight-this._y-a:this.parsePercent(t.height,this._zrHeight),this._height=this._height<=0?10:this._height,this._x=this.subPixelOptimize(this._x,t.borderWidth),this._y=this.subPixelOptimize(this._y,t.borderWidth),this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._x,y:this._y,width:this._width,height:this._height,brushType:t.borderWidth>0?\"both\":\"fill\",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}})),this.zr.addShape(this.shapeList[0])}}},o.inherits(t,i),e(\"../component\").define(\"grid\",t),t}),i(\"echarts/component/dataZoom\",[\"require\",\"./base\",\"zrender/shape/Rectangle\",\"zrender/shape/Polygon\",\"../util/shape/Icon\",\"../config\",\"../util/date\",\"zrender/tool/util\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondrift=function(e,t){return r.__ondrift(this,e,t)},r._ondragend=function(){return r.__ondragend()},this._fillerSize=30,this._isSilence=!1,this._zoom={},this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this._handleSize=this.zoomOption.handleSize,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom.show&&this._buildShape(),this._syncData()}var i=e(\"./base\"),n=e(\"zrender/shape/Rectangle\"),a=e(\"zrender/shape/Polygon\"),o=e(\"../util/shape/Icon\"),r=e(\"../config\");r.dataZoom={zlevel:0,z:4,show:!1,orient:\"horizontal\",backgroundColor:\"rgba(0,0,0,0)\",dataBackgroundColor:\"#eee\",fillerColor:\"rgba(144,197,237,0.2)\",handleColor:\"rgba(70,130,180,0.8)\",handleSize:8,showDetail:!0,realtime:!0};var s=e(\"../util/date\"),l=e(\"zrender/tool/util\");return t.prototype={type:r.COMPONENT_TYPE_DATAZOOM,_buildShape:function(){this._buildBackground(),this._buildFiller(),this._buildHandle(),this._buildFrame();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncFrameShape()},_getLocation:function(){var e,t,i,n,a=this.component.grid;return\"horizontal\"==this.zoomOption.orient?(i=this.zoomOption.width||a.getWidth(),n=this.zoomOption.height||this._fillerSize,e=null!=this.zoomOption.x?this.zoomOption.x:a.getX(),t=null!=this.zoomOption.y?this.zoomOption.y:this.zr.getHeight()-n-2):(i=this.zoomOption.width||this._fillerSize,n=this.zoomOption.height||a.getHeight(),e=null!=this.zoomOption.x?this.zoomOption.x:2,t=null!=this.zoomOption.y?this.zoomOption.y:a.getY()),{x:e,y:t,width:i,height:n}},_getZoom:function(){var e=this.option.series,t=this.option.xAxis;!t||t instanceof Array||(t=[t],this.option.xAxis=t);var i=this.option.yAxis;!i||i instanceof Array||(i=[i],this.option.yAxis=i);var n,a,o=[],s=this.zoomOption.xAxisIndex;if(t&&null==s){n=[];for(var l=0,h=t.length;h>l;l++)(\"category\"==t[l].type||null==t[l].type)&&n.push(l)}else n=s instanceof Array?s:null!=s?[s]:[];if(s=this.zoomOption.yAxisIndex,i&&null==s){a=[];for(var l=0,h=i.length;h>l;l++)\"category\"==i[l].type&&a.push(l)}else a=s instanceof Array?s:null!=s?[s]:[];for(var m,l=0,h=e.length;h>l;l++)if(m=e[l],m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR||m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_K){for(var V=0,U=n.length;U>V;V++)if(n[V]==(m.xAxisIndex||0)){o.push(l);break}for(var V=0,U=a.length;U>V;V++)if(a[V]==(m.yAxisIndex||0)){o.push(l);break}null==this.zoomOption.xAxisIndex&&null==this.zoomOption.yAxisIndex&&m.data&&this.getDataFromOption(m.data[0])instanceof Array&&(m.type==r.CHART_TYPE_SCATTER||m.type==r.CHART_TYPE_LINE||m.type==r.CHART_TYPE_BAR)&&o.push(l)}var d=null!=this._zoom.start?this._zoom.start:null!=this.zoomOption.start?this.zoomOption.start:0,p=null!=this._zoom.end?this._zoom.end:null!=this.zoomOption.end?this.zoomOption.end:100;d>p&&(d+=p,p=d-p,d-=p);var c=Math.round((p-d)/100*(\"horizontal\"==this.zoomOption.orient?this._location.width:this._location.height));return{start:d,end:p,start2:0,end2:100,size:c,xAxisIndex:n,yAxisIndex:a,seriesIndex:o,scatterMap:this._zoom.scatterMap||{}}},_backupData:function(){this._originalData={xAxis:{},yAxis:{},series:{}};for(var e=this.option.xAxis,t=this._zoom.xAxisIndex,i=0,n=t.length;n>i;i++)this._originalData.xAxis[t[i]]=e[t[i]].data;for(var a=this.option.yAxis,o=this._zoom.yAxisIndex,i=0,n=o.length;n>i;i++)this._originalData.yAxis[o[i]]=a[o[i]].data;for(var s,l=this.option.series,h=this._zoom.seriesIndex,i=0,n=h.length;n>i;i++)s=l[h[i]],this._originalData.series[h[i]]=s.data,s.data&&this.getDataFromOption(s.data[0])instanceof Array&&(s.type==r.CHART_TYPE_SCATTER||s.type==r.CHART_TYPE_LINE||s.type==r.CHART_TYPE_BAR)&&(this._backupScale(),this._calculScatterMap(h[i]))},_calculScatterMap:function(t){this._zoom.scatterMap=this._zoom.scatterMap||{},this._zoom.scatterMap[t]=this._zoom.scatterMap[t]||{};var i=e(\"../component\"),n=i.get(\"axis\"),a=l.clone(this.option.xAxis);\"category\"==a[0].type&&(a[0].type=\"value\"),a[1]&&\"category\"==a[1].type&&(a[1].type=\"value\");var o=new n(this.ecTheme,null,!1,{xAxis:a,series:this.option.series},this,\"xAxis\"),r=this.option.series[t].xAxisIndex||0;this._zoom.scatterMap[t].x=o.getAxis(r).getExtremum(),o.dispose(),a=l.clone(this.option.yAxis),\"category\"==a[0].type&&(a[0].type=\"value\"),a[1]&&\"category\"==a[1].type&&(a[1].type=\"value\"),o=new n(this.ecTheme,null,!1,{yAxis:a,series:this.option.series},this,\"yAxis\"),r=this.option.series[t].yAxisIndex||0,this._zoom.scatterMap[t].y=o.getAxis(r).getExtremum(),o.dispose()},_buildBackground:function(){var e=this._location.width,t=this._location.height;this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._location.x,y:this._location.y,width:e,height:t,color:this.zoomOption.backgroundColor}}));for(var i=0,o=this._originalData.xAxis,s=this._zoom.xAxisIndex,l=0,h=s.length;h>l;l++)i=Math.max(i,o[s[l]].length);for(var m=this._originalData.yAxis,V=this._zoom.yAxisIndex,l=0,h=V.length;h>l;l++)i=Math.max(i,m[V[l]].length);for(var U,d=this._zoom.seriesIndex[0],p=this._originalData.series[d],c=Number.MIN_VALUE,u=Number.MAX_VALUE,l=0,h=p.length;h>l;l++)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),c=Math.max(c,U),u=Math.min(u,U);var y=c-u,g=[],b=e/(i-(i>1?1:0)),f=t/(i-(i>1?1:0)),k=1;\"horizontal\"==this.zoomOption.orient&&1>b?k=Math.floor(3*i/e):\"vertical\"==this.zoomOption.orient&&1>f&&(k=Math.floor(3*i/t));for(var l=0,h=i;h>l;l+=k)U=this.getDataFromOption(p[l],0),this.option.series[d].type==r.CHART_TYPE_K&&(U=U[1]),isNaN(U)&&(U=0),g.push(\"horizontal\"==this.zoomOption.orient?[this._location.x+b*l,this._location.y+t-1-Math.round((U-u)/y*(t-10))]:[this._location.x+1+Math.round((U-u)/y*(e-10)),this._location.y+f*(h-l-1)]);\"horizontal\"==this.zoomOption.orient?(g.push([this._location.x+e,this._location.y+t]),g.push([this._location.x,this._location.y+t])):(g.push([this._location.x,this._location.y]),g.push([this._location.x,this._location.y+t])),this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:g,color:this.zoomOption.dataBackgroundColor},hoverable:!1}))},_buildFiller:function(){this._fillerShae={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,_type:\"filler\"},this._fillerShae.style=\"horizontal\"==this.zoomOption.orient?{x:this._location.x+Math.round(this._zoom.start/100*this._location.width)+this._handleSize,y:this._location.y,width:this._zoom.size-2*this._handleSize,height:this._location.height,color:this.zoomOption.fillerColor,text:\":::\",textPosition:\"inside\"}:{x:this._location.x,y:this._location.y+Math.round(this._zoom.start/100*this._location.height)+this._handleSize,width:this._location.width,height:this._zoom.size-2*this._handleSize,color:this.zoomOption.fillerColor,text:\"::\",textPosition:\"inside\"},this._fillerShae.highlightStyle={brushType:\"fill\",color:\"rgba(0,0,0,0)\"},this._fillerShae=new n(this._fillerShae),this.shapeList.push(this._fillerShae)},_buildHandle:function(){var e=this.zoomOption.showDetail?this._getDetail():{start:\"\",end:\"\"};this._startShape={zlevel:this.getZlevelBase(),z:this.getZBase(),draggable:!0,style:{iconType:\"rectangle\",x:this._location.x,y:this._location.y,width:this._handleSize,height:this._handleSize,color:this.zoomOption.handleColor,text:\"=\",textPosition:\"inside\"},highlightStyle:{text:e.start,brushType:\"fill\",textPosition:\"left\"},ondrift:this._ondrift,ondragend:this._ondragend},\"horizontal\"==this.zoomOption.orient?(this._startShape.style.height=this._location.height,this._endShape=l.clone(this._startShape),this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition=\"right\"):(this._startShape.style.width=this._location.width,this._endShape=l.clone(this._startShape),this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startShape.highlightStyle.textPosition=\"bottom\",this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._endShape.highlightStyle.text=e.end,this._endShape.highlightStyle.textPosition=\"top\"),this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_buildFrame:function(){var e=this.subPixelOptimize(this._location.x,1),t=this.subPixelOptimize(this._location.y,1);this._startFrameShape={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:e,y:t,width:this._location.width-(e>this._location.x?1:0),height:this._location.height-(t>this._location.y?1:0),lineWidth:1,brushType:\"stroke\",strokeColor:this.zoomOption.handleColor}},this._endFrameShape=l.clone(this._startFrameShape),this._startFrameShape=new n(this._startFrameShape),this._endFrameShape=new n(this._endFrameShape),this.shapeList.push(this._startFrameShape),this.shapeList.push(this._endFrameShape)},_syncHandleShape:function(){\"horizontal\"==this.zoomOption.orient?(this._startShape.style.x=this._fillerShae.style.x-this._handleSize,this._endShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._zoom.start=(this._startShape.style.x-this._location.x)/this._location.width*100,this._zoom.end=(this._endShape.style.x+this._handleSize-this._location.x)/this._location.width*100):(this._startShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._endShape.style.y=this._fillerShae.style.y-this._handleSize,this._zoom.start=(this._location.y+this._location.height-this._startShape.style.y)/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-this._endShape.style.y-this._handleSize)/this._location.height*100),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFillerShape:function(){var e,t;\"horizontal\"==this.zoomOption.orient?(e=this._startShape.style.x,t=this._endShape.style.x,this._fillerShae.style.x=Math.min(e,t)+this._handleSize,this._fillerShae.style.width=Math.abs(e-t)-this._handleSize,this._zoom.start=(Math.min(e,t)-this._location.x)/this._location.width*100,this._zoom.end=(Math.max(e,t)+this._handleSize-this._location.x)/this._location.width*100):(e=this._startShape.style.y,t=this._endShape.style.y,this._fillerShae.style.y=Math.min(e,t)+this._handleSize,this._fillerShae.style.height=Math.abs(e-t)-this._handleSize,this._zoom.start=(this._location.y+this._location.height-Math.max(e,t))/this._location.height*100,this._zoom.end=(this._location.y+this._location.height-Math.min(e,t)-this._handleSize)/this._location.height*100),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refreshNextFrame()},_syncFrameShape:function(){\"horizontal\"==this.zoomOption.orient?(this._startFrameShape.style.width=this._fillerShae.style.x-this._location.x,this._endFrameShape.style.x=this._fillerShae.style.x+this._fillerShae.style.width,this._endFrameShape.style.width=this._location.x+this._location.width-this._endFrameShape.style.x):(this._startFrameShape.style.y=this._fillerShae.style.y+this._fillerShae.style.height,this._startFrameShape.style.height=this._location.y+this._location.height-this._startFrameShape.style.y,this._endFrameShape.style.height=this._fillerShae.style.y-this._location.y),this.zr.modShape(this._startFrameShape.id),this.zr.modShape(this._endFrameShape.id)},_syncShape:function(){this.zoomOption.show&&(\"horizontal\"==this.zoomOption.orient?(this._startShape.style.x=this._location.x+this._zoom.start/100*this._location.width,this._endShape.style.x=this._location.x+this._zoom.end/100*this._location.width-this._handleSize,this._fillerShae.style.x=this._startShape.style.x+this._handleSize,this._fillerShae.style.width=this._endShape.style.x-this._startShape.style.x-this._handleSize):(this._startShape.style.y=this._location.y+this._location.height-this._zoom.start/100*this._location.height,this._endShape.style.y=this._location.y+this._location.height-this._zoom.end/100*this._location.height-this._handleSize,this._fillerShae.style.y=this._endShape.style.y+this._handleSize,this._fillerShae.style.height=this._startShape.style.y-this._endShape.style.y-this._handleSize),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._fillerShae.id),this._syncFrameShape(),this.zr.refresh())},_syncData:function(e){var t,i,n,a,o;for(var s in this._originalData){t=this._originalData[s];for(var l in t)o=t[l],null!=o&&(a=o.length,i=Math.floor(this._zoom.start/100*a),n=Math.ceil(this._zoom.end/100*a),this.getDataFromOption(o[0])instanceof Array&&this.option[s][l].type!=r.CHART_TYPE_K?(this._setScale(),this.option[s][l].data=this._synScatterData(l,o)):this.option[s][l].data=o.slice(i,n))}this._isSilence||!this.zoomOption.realtime&&!e||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart)},_synScatterData:function(e,t){if(0===this._zoom.start&&100==this._zoom.end&&0===this._zoom.start2&&100==this._zoom.end2)return t;var i,n,a,o,r,s=[],l=this._zoom.scatterMap[e];\n\n\"horizontal\"==this.zoomOption.orient?(i=l.x.max-l.x.min,n=this._zoom.start/100*i+l.x.min,a=this._zoom.end/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start2/100*i+l.y.min,r=this._zoom.end2/100*i+l.y.min):(i=l.x.max-l.x.min,n=this._zoom.start2/100*i+l.x.min,a=this._zoom.end2/100*i+l.x.min,i=l.y.max-l.y.min,o=this._zoom.start/100*i+l.y.min,r=this._zoom.end/100*i+l.y.min);var h;(h=l.x.dataMappingMethods)&&(n=h.coord2Value(n),a=h.coord2Value(a)),(h=l.y.dataMappingMethods)&&(o=h.coord2Value(o),r=h.coord2Value(r));for(var m,V=0,U=t.length;U>V;V++)m=t[V].value||t[V],m[0]>=n&&m[0]<=a&&m[1]>=o&&m[1]<=r&&s.push(t[V]);return s},_setScale:function(){var e=0!==this._zoom.start||100!==this._zoom.end||0!==this._zoom.start2||100!==this._zoom.end2,t={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var i in t)for(var n=0,a=t[i].length;a>n;n++)t[i][n].scale=e||t[i][n]._scale},_backupScale:function(){var e={xAxis:this.option.xAxis,yAxis:this.option.yAxis};for(var t in e)for(var i=0,n=e[t].length;n>i;i++)e[t][i]._scale=e[t][i].scale},_getDetail:function(){for(var e=[\"xAxis\",\"yAxis\"],t=0,i=e.length;i>t;t++){var n=this._originalData[e[t]];for(var a in n){var o=n[a];if(null!=o){var r=o.length,l=Math.floor(this._zoom.start/100*r),h=Math.ceil(this._zoom.end/100*r);return h-=h>0?1:0,{start:this.getDataFromOption(o[l]),end:this.getDataFromOption(o[h])}}}}e=\"horizontal\"==this.zoomOption.orient?\"xAxis\":\"yAxis\";var m=this._zoom.seriesIndex[0],V=this.option.series[m][e+\"Index\"]||0,U=this.option[e][V].type,d=this._zoom.scatterMap[m][e.charAt(0)].min,p=this._zoom.scatterMap[m][e.charAt(0)].max,c=p-d;if(\"value\"==U)return{start:d+c*this._zoom.start/100,end:d+c*this._zoom.end/100};if(\"time\"==U){p=d+c*this._zoom.end/100,d+=c*this._zoom.start/100;var u=s.getAutoFormatter(d,p).formatter;return{start:s.format(u,d),end:s.format(u,p)}}return{start:\"\",end:\"\"}},__ondrift:function(e,t,i){this.zoomOption.zoomLock&&(e=this._fillerShae);var n=\"filler\"==e._type?this._handleSize:0;if(\"horizontal\"==this.zoomOption.orient?e.style.x+t-n<=this._location.x?e.style.x=this._location.x+n:e.style.x+t+e.style.width+n>=this._location.x+this._location.width?e.style.x=this._location.x+this._location.width-e.style.width-n:e.style.x+=t:e.style.y+i-n<=this._location.y?e.style.y=this._location.y+n:e.style.y+i+e.style.height+n>=this._location.y+this._location.height?e.style.y=this._location.y+this._location.height-e.style.height-n:e.style.y+=i,\"filler\"==e._type?this._syncHandleShape():this._syncFillerShape(),this.zoomOption.realtime&&this._syncData(),this.zoomOption.showDetail){var a=this._getDetail();this._startShape.style.text=this._startShape.highlightStyle.text=a.start,this._endShape.style.text=this._endShape.highlightStyle.text=a.end,this._startShape.style.textPosition=this._startShape.highlightStyle.textPosition,this._endShape.style.textPosition=this._endShape.highlightStyle.textPosition}return!0},__ondragend:function(){this.zoomOption.showDetail&&(this._startShape.style.text=this._endShape.style.text=\"=\",this._startShape.style.textPosition=this._endShape.style.textPosition=\"inside\",this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.refreshNextFrame()),this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(!this.zoomOption.realtime&&this._syncData(),t.dragOut=!0,t.dragIn=!0,this._isSilence||this.zoomOption.realtime||this.messageCenter.dispatch(r.EVENT.DATA_ZOOM,null,{zoom:this._zoom},this.myChart),t.needRefresh=!1,this.isDragend=!1)},ondataZoom:function(e,t){t.needRefresh=!0},absoluteZoom:function(e){this._zoom.start=e.start,this._zoom.end=e.end,this._zoom.start2=e.start2,this._zoom.end2=e.end2,this._syncShape(),this._syncData(!0)},rectZoom:function(e){if(!e)return this._zoom.start=this._zoom.start2=0,this._zoom.end=this._zoom.end2=100,this._syncShape(),this._syncData(!0),this._zoom;var t=this.component.grid.getArea(),i={x:e.x,y:e.y,width:e.width,height:e.height};if(i.width<0&&(i.x+=i.width,i.width=-i.width),i.height<0&&(i.y+=i.height,i.height=-i.height),i.x>t.x+t.width||i.y>t.y+t.height)return!1;i.x<t.x&&(i.x=t.x),i.x+i.width>t.x+t.width&&(i.width=t.x+t.width-i.x),i.y+i.height>t.y+t.height&&(i.height=t.y+t.height-i.y);var n,a=(i.x-t.x)/t.width,o=1-(i.x+i.width-t.x)/t.width,r=1-(i.y+i.height-t.y)/t.height,s=(i.y-t.y)/t.height;return\"horizontal\"==this.zoomOption.orient?(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*a,this._zoom.end-=n*o,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*r,this._zoom.end2-=n*s):(n=this._zoom.end-this._zoom.start,this._zoom.start+=n*r,this._zoom.end-=n*s,n=this._zoom.end2-this._zoom.start2,this._zoom.start2+=n*a,this._zoom.end2-=n*o),this._syncShape(),this._syncData(!0),this._zoom},syncBackupData:function(e){for(var t,i,n=this._originalData.series,a=e.series,o=0,r=a.length;r>o;o++){i=a[o].data||a[o].eventList,t=n[o]?Math.floor(this._zoom.start/100*n[o].length):0;for(var s=0,l=i.length;l>s;s++)n[o]&&(n[o][s+t]=i[s])}},syncOption:function(e){this.silence(!0),this.option=e,this.option.dataZoom=this.reformOption(this.option.dataZoom),this.zoomOption=this.option.dataZoom,this.myChart.canvasSupported||(this.zoomOption.realtime=!1),this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this._backupData(),this.option.dataZoom&&this.option.dataZoom.show&&this._buildShape(),this._syncData(),this.silence(!1)},silence:function(e){this._isSilence=e},getRealDataIndex:function(e,t){if(!this._originalData||0===this._zoom.start&&100==this._zoom.end)return t;var i=this._originalData.series;return i[e]?Math.floor(this._zoom.start/100*i[e].length)+t:-1},resize:function(){this.clear(),this._location=this._getLocation(),this._zoom=this._getZoom(),this.option.dataZoom.show&&this._buildShape()}},l.inherits(t,i),e(\"../component\").define(\"dataZoom\",t),t}),i(\"echarts/component/categoryAxis\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Rectangle\",\"../config\",\"zrender/tool/util\",\"zrender/tool/area\",\"../component\"],function(e){function t(e,t,n,a,o,r){if(a.data.length<1)return void console.error(\"option.data.length < 1.\");i.call(this,e,t,n,a,o),this.grid=this.component.grid;for(var s in r)this[s]=r[s];this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Rectangle\"),r=e(\"../config\");r.categoryAxis={zlevel:0,z:0,show:!0,position:\"bottom\",name:\"\",nameLocation:\"end\",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,onZero:!0,lineStyle:{color:\"#48b\",width:2,type:\"solid\"}},axisTick:{show:!0,interval:\"auto\",inside:!1,length:5,lineStyle:{color:\"#333\",width:1}},axisLabel:{show:!0,interval:\"auto\",rotate:0,margin:8,textStyle:{color:\"#333\"}},splitLine:{show:!0,lineStyle:{color:[\"#ccc\"],width:1,type:\"solid\"}},splitArea:{show:!1,areaStyle:{color:[\"rgba(250,250,250,0.3)\",\"rgba(200,200,200,0.3)\"]}}};var s=e(\"zrender/tool/util\"),l=e(\"zrender/tool/area\");return t.prototype={type:r.COMPONENT_TYPE_AXIS_CATEGORY,_getReformedLabel:function(e){var t=this.getDataFromOption(this.option.data[e]),i=this.option.data[e].formatter||this.option.axisLabel.formatter;return i&&(\"function\"==typeof i?t=i.call(this.myChart,t):\"string\"==typeof i&&(t=i.replace(\"{value}\",t))),t},_getInterval:function(){var e=this.option.axisLabel.interval;if(\"auto\"==e){var t=this.option.axisLabel.textStyle.fontSize,i=this.option.data,n=this.option.data.length;if(this.isHorizontal())if(n>3){var a,o,r=this.getGap(),h=!1,m=Math.floor(.5/r);for(m=1>m?1:m,e=Math.floor(15/r);!h&&n>e;){e+=m,h=!0,a=Math.floor(r*e);for(var V=Math.floor((n-1)/e)*e;V>=0;V-=e){if(0!==this.option.axisLabel.rotate)o=t;else if(i[V].textStyle)o=l.getTextWidth(this._getReformedLabel(V),this.getFont(s.merge(i[V].textStyle,this.option.axisLabel.textStyle)));else{var U=this._getReformedLabel(V)+\"\",d=(U.match(/\\w/g)||\"\").length,p=U.length-d;o=d*t*2/3+p*t}if(o>a){h=!1;break}}}}else e=1;else if(n>3){var r=this.getGap();for(e=Math.floor(11/r);t>r*e-6&&n>e;)e++}else e=1}else e=\"function\"==typeof e?1:e-0+1;return e},_buildShape:function(){if(this._interval=this._getInterval(),this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width,l=\"function\"==typeof n.interval?n.interval:\"auto\"==n.interval&&\"function\"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,h=l?1:\"auto\"==n.interval?this._interval:n.interval-0+1,m=n.onGap,V=m?this.getGap()/2:\"undefined\"==typeof m&&this.option.boundaryGap?this.getGap()/2:0,U=V>0?-h:0;if(this.isHorizontal())for(var d,p=\"bottom\"==this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(d=this.subPixelOptimize(this.getCoordByIndex(c)+(c>=0?V:0),s),e={_axisShape:\"axisTick\",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:d,yStart:p,xEnd:d,yEnd:p+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)));else for(var u,y=\"left\"==this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,c=U;i>c;c+=h)(!l||l(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-(c>=0?V:0),s),e={_axisShape:\"axisTick\",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:y+o,yEnd:u,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e)))},_buildAxisLabel:function(){var e,t,i=this.option.data,a=this.option.data.length,o=this.option.axisLabel,r=o.rotate,l=o.margin,h=o.clickable,m=o.textStyle,V=\"function\"==typeof o.interval?o.interval:!1;if(this.isHorizontal()){var U,d;\"bottom\"==this.option.position?(U=this.grid.getYend()+l,d=\"top\"):(U=this.grid.getY()-l,d=\"bottom\");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||\"\"===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoordByIndex(p),y:U,color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||\"center\",textBaseline:t.baseline||d}},r&&(e.style.textAlign=r>0?\"bottom\"==this.option.position?\"right\":\"left\":\"bottom\"==this.option.position?\"left\":\"right\",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}else{var c,u;\"left\"==this.option.position?(c=this.grid.getX()-l,u=\"right\"):(c=this.grid.getXend()+l,u=\"left\");for(var p=0;a>p;p+=this._interval)V&&!V(p,i[p])||\"\"===this._getReformedLabel(p)||(t=s.merge(i[p].textStyle||{},m),e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:c,y:this.getCoordByIndex(p),color:t.color,text:this._getReformedLabel(p),textFont:this.getFont(t),textAlign:t.align||u,textBaseline:t.baseline||0===p&&\"\"!==this.option.name?\"bottom\":p==a-1&&\"\"!==this.option.name?\"top\":\"middle\"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(h,e))))}},_buildSplitLine:function(){var e,t=this.option.data,i=this.option.data.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length,h=\"function\"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,m=n.onGap,V=m?this.getGap()/2:\"undefined\"==typeof m&&this.option.boundaryGap?this.getGap()/2:0;if(i-=m||\"undefined\"==typeof m&&this.option.boundaryGap?1:0,this.isHorizontal())for(var U,d=this.grid.getY(),p=this.grid.getYend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(U=this.subPixelOptimize(this.getCoordByIndex(c)+V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:d,xEnd:U,yEnd:p,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)));else for(var u,y=this.grid.getX(),g=this.grid.getXend(),c=0;i>c;c+=this._interval)(!h||h(c,t[c]))&&(u=this.subPixelOptimize(this.getCoordByIndex(c)-V,r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:y,yStart:u,xEnd:g,yEnd:u,strokeColor:s[c/this._interval%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e)))},_buildSplitArea:function(){var e,t=this.option.data,i=this.option.splitArea,n=i.areaStyle.color;if(n instanceof Array){var a=n.length,r=this.option.data.length,s=\"function\"==typeof this.option.axisLabel.interval?this.option.axisLabel.interval:!1,l=i.onGap,h=l?this.getGap()/2:\"undefined\"==typeof l&&this.option.boundaryGap?this.getGap()/2:0;if(this.isHorizontal())for(var m,V=this.grid.getY(),U=this.grid.getHeight(),d=this.grid.getX(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(m=r>p?this.getCoordByIndex(p)+h:this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:d,y:V,width:m-d,height:U,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),d=m);else for(var c,u=this.grid.getX(),y=this.grid.getWidth(),g=this.grid.getYend(),p=0;r>=p;p+=this._interval)s&&!s(p,t[p])&&r>p||(c=r>p?this.getCoordByIndex(p)-h:this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:u,y:c,width:y,height:g-c,color:n[p/this._interval%a]}},this.shapeList.push(new o(e)),g=c)}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:n}},this.shapeList.push(new o(e))},refresh:function(e){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=this.getTextStyle(this.option.axisLabel.textStyle)),this.clear(),this._buildShape()},getGap:function(){var e=this.option.data.length,t=this.isHorizontal()?this.grid.getWidth():this.grid.getHeight();return this.option.boundaryGap?t/e:t/(e>1?e-1:1)},getCoord:function(e){for(var t=this.option.data,i=t.length,n=this.getGap(),a=this.option.boundaryGap?n/2:0,o=0;i>o;o++){if(this.getDataFromOption(t[o])==e)return a=this.isHorizontal()?this.grid.getX()+a:this.grid.getYend()-a;a+=n}},getCoordByIndex:function(e){if(0>e)return this.isHorizontal()?this.grid.getX():this.grid.getYend();if(e>this.option.data.length-1)return this.isHorizontal()?this.grid.getXend():this.grid.getY();var t=this.getGap(),i=this.option.boundaryGap?t/2:0;return i+=e*t,i=this.isHorizontal()?this.grid.getX()+i:this.grid.getYend()-i},getNameByIndex:function(e){return this.getDataFromOption(this.option.data[e])},getIndexByName:function(e){for(var t=this.option.data,i=t.length,n=0;i>n;n++)if(this.getDataFromOption(t[n])==e)return n;return-1},getValueFromCoord:function(){return\"\"},isMainAxis:function(e){return e%this._interval===0}},s.inherits(t,i),e(\"../component\").define(\"categoryAxis\",t),t}),i(\"echarts/component/valueAxis\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Rectangle\",\"../config\",\"../util/date\",\"zrender/tool/util\",\"../util/smartSteps\",\"../util/accMath\",\"../util/smartLogSteps\",\"../component\"],function(e){function t(e,t,n,a,o,r,s){if(!s||0===s.length)return void console.err(\"option.series.length == 0.\");i.call(this,e,t,n,a,o),this.series=s,this.grid=this.component.grid;for(var l in r)this[l]=r[l];this.refresh(a,s)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Rectangle\"),r=e(\"../config\");r.valueAxis={zlevel:0,z:0,show:!0,position:\"left\",name:\"\",nameLocation:\"end\",nameTextStyle:{},boundaryGap:[0,0],axisLine:{show:!0,onZero:!0,lineStyle:{color:\"#48b\",width:2,type:\"solid\"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:\"#333\",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:\"#333\"}},splitLine:{show:!0,lineStyle:{color:[\"#ccc\"],width:1,type:\"solid\"}},splitArea:{show:!1,areaStyle:{color:[\"rgba(250,250,250,0.3)\",\"rgba(200,200,200,0.3)\"]}}};var s=e(\"../util/date\"),l=e(\"zrender/tool/util\");return t.prototype={type:r.COMPONENT_TYPE_AXIS_VALUE,_buildShape:function(){if(this._hasData=!1,this._calculateValue(),this._hasData&&this.option.show){this.option.splitArea.show&&this._buildSplitArea(),this.option.splitLine.show&&this._buildSplitLine(),this.option.axisLine.show&&this._buildAxisLine(),this.option.axisTick.show&&this._buildAxisTick(),this.option.axisLabel.show&&this._buildAxisLabel();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildAxisTick:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.axisTick,o=n.length,r=n.lineStyle.color,s=n.lineStyle.width;if(this.isHorizontal())for(var l,h=\"bottom\"===this.option.position?n.inside?this.grid.getYend()-o-1:this.grid.getYend()+1:n.inside?this.grid.getY()+1:this.grid.getY()-o-1,m=0;i>m;m++)l=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:\"axisTick\",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:l,yStart:h,xEnd:l,yEnd:h+o,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e));else for(var V,U=\"left\"===this.option.position?n.inside?this.grid.getX()+1:this.grid.getX()-o-1:n.inside?this.grid.getXend()-o-1:this.grid.getXend()+1,m=0;i>m;m++)V=this.subPixelOptimize(this.getCoord(t[m]),s),e={_axisShape:\"axisTick\",zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:U,yStart:V,xEnd:U+o,yEnd:V,strokeColor:r,lineWidth:s}},this.shapeList.push(new a(e))},_buildAxisLabel:function(){var e,t=this._valueList,i=this._valueList.length,a=this.option.axisLabel.rotate,o=this.option.axisLabel.margin,r=this.option.axisLabel.clickable,s=this.option.axisLabel.textStyle;if(this.isHorizontal()){var l,h;\"bottom\"===this.option.position?(l=this.grid.getYend()+o,h=\"top\"):(l=this.grid.getY()-o,h=\"bottom\");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:this.getCoord(t[m]),y:l,color:\"function\"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||\"center\",textBaseline:s.baseline||h}},a&&(e.style.textAlign=a>0?\"bottom\"===this.option.position?\"right\":\"left\":\"bottom\"===this.option.position?\"left\":\"right\",e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}else{var V,U;\"left\"===this.option.position?(V=this.grid.getX()-o,U=\"right\"):(V=this.grid.getXend()+o,U=\"left\");for(var m=0;i>m;m++)e={zlevel:this.getZlevelBase(),z:this.getZBase()+3,hoverable:!1,style:{x:V,y:this.getCoord(t[m]),color:\"function\"==typeof s.color?s.color(t[m]):s.color,text:this._valueLabel[m],textFont:this.getFont(s),textAlign:s.align||U,textBaseline:s.baseline||(0===m&&\"\"!==this.option.name?\"bottom\":m===i-1&&\"\"!==this.option.name?\"top\":\"middle\")}},a&&(e.rotation=[a*Math.PI/180,e.style.x,e.style.y]),this.shapeList.push(new n(this._axisLabelClickable(r,e)))}},_buildSplitLine:function(){var e,t=this._valueList,i=this._valueList.length,n=this.option.splitLine,o=n.lineStyle.type,r=n.lineStyle.width,s=n.lineStyle.color;s=s instanceof Array?s:[s];var l=s.length;if(this.isHorizontal())for(var h,m=this.grid.getY(),V=this.grid.getYend(),U=0;i>U;U++)h=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:h,yStart:m,xEnd:h,yEnd:V,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e));else for(var d,p=this.grid.getX(),c=this.grid.getXend(),U=0;i>U;U++)d=this.subPixelOptimize(this.getCoord(t[U]),r),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:p,yStart:d,xEnd:c,yEnd:d,strokeColor:s[U%l],lineType:o,lineWidth:r}},this.shapeList.push(new a(e))},_buildSplitArea:function(){var e,t=this.option.splitArea.areaStyle.color;if(t instanceof Array){var i=t.length,n=this._valueList,a=this._valueList.length;if(this.isHorizontal())for(var r,s=this.grid.getY(),l=this.grid.getHeight(),h=this.grid.getX(),m=0;a>=m;m++)r=a>m?this.getCoord(n[m]):this.grid.getXend(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:h,y:s,width:r-h,height:l,color:t[m%i]}},this.shapeList.push(new o(e)),h=r;else for(var V,U=this.grid.getX(),d=this.grid.getWidth(),p=this.grid.getYend(),m=0;a>=m;m++)V=a>m?this.getCoord(n[m]):this.grid.getY(),e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:U,y:V,width:d,height:p-V,color:t[m%i]}},this.shapeList.push(new o(e)),p=V}else e={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this.grid.getX(),y:this.grid.getY(),width:this.grid.getWidth(),height:this.grid.getHeight(),color:t}},this.shapeList.push(new o(e))},_calculateValue:function(){if(isNaN(this.option.min-0)||isNaN(this.option.max-0)){for(var e,t,i={},n=this.component.legend,a=0,o=this.series.length;o>a;a++)!(this.series[a].type!=r.CHART_TYPE_LINE&&this.series[a].type!=r.CHART_TYPE_BAR&&this.series[a].type!=r.CHART_TYPE_SCATTER&&this.series[a].type!=r.CHART_TYPE_K&&this.series[a].type!=r.CHART_TYPE_EVENTRIVER||n&&!n.isSelected(this.series[a].name)||(e=this.series[a].xAxisIndex||0,t=this.series[a].yAxisIndex||0,this.option.xAxisIndex!=e&&this.option.yAxisIndex!=t||!this._calculSum(i,a)));var s;for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)if(!isNaN(s[l])){this._hasData=!0,this._min=s[l],this._max=s[l];break}if(this._hasData)break}for(var a in i){s=i[a];for(var l=0,h=s.length;h>l;l++)isNaN(s[l])||(this._min=Math.min(this._min,s[l]),this._max=Math.max(this._max,s[l]))}var m=\"log\"!==this.option.type?this.option.boundaryGap:[0,0],V=Math.abs(this._max-this._min);this._min=isNaN(this.option.min-0)?this._min-Math.abs(V*m[0]):this.option.min-0,this._max=isNaN(this.option.max-0)?this._max+Math.abs(V*m[1]):this.option.max-0,this._min===this._max&&(0===this._max?this._max=1:this._max>0?this._min=this._max/this.option.splitNumber!=null?this.option.splitNumber:5:this._max=this._max/this.option.splitNumber!=null?this.option.splitNumber:5),\"time\"===this.option.type?this._reformTimeValue():\"log\"===this.option.type?this._reformLogValue():this._reformValue(this.option.scale)}else this._hasData=!0,this._min=this.option.min-0,this._max=this.option.max-0,\"time\"===this.option.type?this._reformTimeValue():\"log\"===this.option.type?this._reformLogValue():this._customerValue()},_calculSum:function(e,t){var i,n,a=this.series[t].name||\"kener\";if(this.series[t].stack){var o=\"__Magic_Key_Positive__\"+this.series[t].stack,l=\"__Magic_Key_Negative__\"+this.series[t].stack;e[o]=e[o]||[],e[l]=e[l]||[],e[a]=e[a]||[],n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),\"-\"!==i&&(i-=0,i>=0?null!=e[o][h]?e[o][h]+=i:e[o][h]=i:null!=e[l][h]?e[l][h]+=i:e[l][h]=i,this.option.scale&&e[a].push(i))}else if(e[a]=e[a]||[],this.series[t].type!=r.CHART_TYPE_EVENTRIVER){n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)i=this.getDataFromOption(n[h]),this.series[t].type===r.CHART_TYPE_K?(e[a].push(i[0]),e[a].push(i[1]),e[a].push(i[2]),e[a].push(i[3])):i instanceof Array?(-1!=this.option.xAxisIndex&&e[a].push(\"time\"!=this.option.type?i[0]:s.getNewDate(i[0])),-1!=this.option.yAxisIndex&&e[a].push(\"time\"!=this.option.type?i[1]:s.getNewDate(i[1]))):e[a].push(i)}else{n=this.series[t].data;for(var h=0,m=n.length;m>h;h++)for(var V=n[h].evolution,U=0,d=V.length;d>U;U++)e[a].push(s.getNewDate(V[U].time))}},_reformValue:function(t){var i=e(\"../util/smartSteps\"),n=this.option.splitNumber;!t&&this._min>=0&&this._max>=0&&(this._min=0),!t&&this._min<=0&&this._max<=0&&(this._max=0);var a=i(this._min,this._max,n);n=null!=n?n:a.secs,this._min=a.min,this._max=a.max,this._valueList=a.pnts,this._reformLabelData()},_reformTimeValue:function(){var e=null!=this.option.splitNumber?this.option.splitNumber:5,t=s.getAutoFormatter(this._min,this._max,e),i=t.formatter,n=t.gapValue;this._valueList=[s.getNewDate(this._min)];var a;switch(i){case\"week\":a=s.nextMonday(this._min);break;case\"month\":a=s.nextNthOnMonth(this._min,1);break;case\"quarter\":a=s.nextNthOnQuarterYear(this._min,1);break;case\"half-year\":a=s.nextNthOnHalfYear(this._min,1);break;case\"year\":a=s.nextNthOnYear(this._min,1);break;default:72e5>=n?a=(Math.floor(this._min/n)+1)*n:(a=s.getNewDate(this._min- -n),a.setHours(6*Math.round(a.getHours()/6)),a.setMinutes(0),a.setSeconds(0))}for(a-this._min<n/2&&(a-=-n),t=s.getNewDate(a),e*=1.5;e-->=0&&((\"month\"==i||\"quarter\"==i||\"half-year\"==i||\"year\"==i)&&t.setDate(1),!(this._max-t<n/2));)this._valueList.push(t),t=s.getNewDate(t- -n);this._valueList.push(s.getNewDate(this._max)),this._reformLabelData(function(e){return function(t){return s.format(e,t)}}(i))},_customerValue:function(){var t=e(\"../util/accMath\"),i=null!=this.option.splitNumber?this.option.splitNumber:5,n=(this._max-this._min)/i;this._valueList=[];for(var a=0;i>=a;a++)this._valueList.push(t.accAdd(this._min,t.accMul(n,a)));this._reformLabelData()},_reformLogValue:function(){var t=this.option,i=e(\"../util/smartLogSteps\")({dataMin:this._min,dataMax:this._max,logPositive:t.logPositive,logLabelBase:t.logLabelBase,splitNumber:t.splitNumber});this._min=i.dataMin,this._max=i.dataMax,this._valueList=i.tickList,this._dataMappingMethods=i.dataMappingMethods,this._reformLabelData(i.labelFormatter)},_reformLabelData:function(e){this._valueLabel=[];var t=this.option.axisLabel.formatter;if(t)for(var i=0,n=this._valueList.length;n>i;i++)\"function\"==typeof t?this._valueLabel.push(e?t.call(this.myChart,this._valueList[i],e):t.call(this.myChart,this._valueList[i])):\"string\"==typeof t&&this._valueLabel.push(e?s.format(t,this._valueList[i]):t.replace(\"{value}\",this._valueList[i]));else for(var i=0,n=this._valueList.length;n>i;i++)this._valueLabel.push(e?e(this._valueList[i]):this.numAddCommas(this._valueList[i]))},getExtremum:function(){this._calculateValue();var e=this._dataMappingMethods;return{min:this._min,max:this._max,dataMappingMethods:e?l.merge({},e):null}},refresh:function(e,t){e&&(this.option=this.reformOption(e),this.option.axisLabel.textStyle=l.merge(this.option.axisLabel.textStyle||{},this.ecTheme.textStyle),this.series=t),this.zr&&(this.clear(),this._buildShape())},getCoord:function(e){this._dataMappingMethods&&(e=this._dataMappingMethods.value2Coord(e)),e=e<this._min?this._min:e,e=e>this._max?this._max:e;var t;return t=this.isHorizontal()?this.grid.getX()+(e-this._min)/(this._max-this._min)*this.grid.getWidth():this.grid.getYend()-(e-this._min)/(this._max-this._min)*this.grid.getHeight()},getCoordSize:function(e){return Math.abs(this.isHorizontal()?e/(this._max-this._min)*this.grid.getWidth():e/(this._max-this._min)*this.grid.getHeight())},getValueFromCoord:function(e){var t;return this.isHorizontal()?(e=e<this.grid.getX()?this.grid.getX():e,e=e>this.grid.getXend()?this.grid.getXend():e,t=this._min+(e-this.grid.getX())/this.grid.getWidth()*(this._max-this._min)):(e=e<this.grid.getY()?this.grid.getY():e,e=e>this.grid.getYend()?this.grid.getYend():e,t=this._max-(e-this.grid.getY())/this.grid.getHeight()*(this._max-this._min)),this._dataMappingMethods&&(t=this._dataMappingMethods.coord2Value(t)),t.toFixed(2)-0},isMaindAxis:function(e){for(var t=0,i=this._valueList.length;i>t;t++)if(this._valueList[t]===e)return!0;return!1}},l.inherits(t,i),e(\"../component\").define(\"valueAxis\",t),t}),i(\"echarts/util/date\",[],function(){function e(e,t,i){i=i>1?i:2;for(var n,a,o,r,s=0,l=m.length;l>s;s++)if(n=m[s].value,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,Math.round(a/n)<=1.2*i){o=m[s].formatter,r=m[s].value;break}return null==o&&(o=\"year\",n=317088e5,a=Math.ceil(t/n)*n-Math.floor(e/n)*n,r=Math.round(a/(i-1)/n)*n),{formatter:o,gapValue:r}}function t(e){return 10>e?\"0\"+e:e}function i(e,i){(\"week\"==e||\"month\"==e||\"quarter\"==e||\"half-year\"==e||\"year\"==e)&&(e=\"MM - dd\\nyyyy\");var n=h(i),a=n.getFullYear(),o=n.getMonth()+1,r=n.getDate(),s=n.getHours(),l=n.getMinutes(),m=n.getSeconds();return e=e.replace(\"MM\",t(o)),e=e.toLowerCase(),e=e.replace(\"yyyy\",a),e=e.replace(\"yy\",a%100),e=e.replace(\"dd\",t(r)),e=e.replace(\"d\",r),e=e.replace(\"hh\",t(s)),e=e.replace(\"h\",s),e=e.replace(\"mm\",t(l)),e=e.replace(\"m\",l),e=e.replace(\"ss\",t(m)),e=e.replace(\"s\",m)}function n(e){return e=h(e),e.setDate(e.getDate()+8-e.getDay()),e}function a(e,t,i){return e=h(e),e.setMonth(Math.ceil((e.getMonth()+1)/i)*i),e.setDate(t),e}function o(e,t){return a(e,t,1)}function r(e,t){return a(e,t,3)}function s(e,t){return a(e,t,6)}function l(e,t){return a(e,t,12)}function h(e){return e instanceof Date?e:new Date(\"string\"==typeof e?e.replace(/-/g,\"/\"):e)}var m=[{formatter:\"hh : mm : ss\",value:1e3},{formatter:\"hh : mm : ss\",value:5e3},{formatter:\"hh : mm : ss\",value:1e4},{formatter:\"hh : mm : ss\",value:15e3},{formatter:\"hh : mm : ss\",value:3e4},{formatter:\"hh : mm\\nMM - dd\",value:6e4},{formatter:\"hh : mm\\nMM - dd\",value:3e5},{formatter:\"hh : mm\\nMM - dd\",value:6e5},{formatter:\"hh : mm\\nMM - dd\",value:9e5},{formatter:\"hh : mm\\nMM - dd\",value:18e5},{formatter:\"hh : mm\\nMM - dd\",value:36e5},{formatter:\"hh : mm\\nMM - dd\",value:72e5},{formatter:\"hh : mm\\nMM - dd\",value:216e5},{formatter:\"hh : mm\\nMM - dd\",value:432e5},{formatter:\"MM - dd\\nyyyy\",value:864e5},{formatter:\"week\",value:6048e5},{formatter:\"month\",value:26784e5},{formatter:\"quarter\",value:8208e6},{formatter:\"half-year\",value:16416e6},{formatter:\"year\",value:32832e6}];return{getAutoFormatter:e,getNewDate:h,format:i,nextMonday:n,nextNthPerNmonth:a,nextNthOnMonth:o,nextNthOnQuarterYear:r,nextNthOnHalfYear:s,nextNthOnYear:l}}),i(\"echarts/util/smartSteps\",[],function(){function e(e){return X.log(I(e))/X.LN10}function t(e){return X.pow(10,e)}function i(e){return e===w(e)}function n(e,t,n,a){b=a||{},f=b.steps||L,k=b.secs||W,n=v(+n||0)%99,e=+e||0,t=+t||0,x=_=0,\"min\"in b&&(e=+b.min||0,x=1),\"max\"in b&&(t=+b.max||0,_=1),e>t&&(t=[e,e=t][0]);var o=t-e;if(x&&_)return g(e,t,n);if((n||5)>o){if(i(e)&&i(t))return d(e,t,n);if(0===o)return p(e,t,n)}return h(e,t,n)}function a(e,i,n,a){a=a||0;var s=o((i-e)/n,-1),l=o(e,-1,1),h=o(i,-1),m=X.min(s.e,l.e,h.e);0===l.c?m=X.min(s.e,h.e):0===h.c&&(m=X.min(s.e,l.e)),r(s,{c:0,e:m}),r(l,s,1),r(h,s),a+=m,e=l.c,i=h.c;for(var V=(i-e)/n,U=t(a),d=0,p=[],c=n+1;c--;)p[c]=(e+V*c)*U;if(0>a){d=u(U),V=+(V*U).toFixed(d),e=+(e*U).toFixed(d),i=+(i*U).toFixed(d);for(var c=p.length;c--;)p[c]=p[c].toFixed(d),0===+p[c]&&(p[c]=\"0\")}else e*=U,i*=U,V*=U;return k=0,f=0,b=0,{min:e,max:i,secs:n,step:V,fix:d,exp:a,pnts:p}}function o(n,a,o){a=v(a%10)||2,0>a&&(i(n)?a=(\"\"+I(n)).replace(/0+$/,\"\").length||1:(n=n.toFixed(15).replace(/0+$/,\"\"),a=n.replace(\".\",\"\").replace(/^[-0]+/,\"\").length,n=+n));var r=w(e(n))-a+1,s=+(n*t(-r)).toFixed(15)||0;return s=o?w(s):K(s),!s&&(r=0),(\"\"+I(s)).length>a&&(r+=1,s/=10),{c:s,e:r}}function r(e,i,n){var a=i.e-e.e;a&&(e.e+=a,e.c*=t(-a),e.c=n?w(e.c):K(e.c))}function s(e,t,i){e.e<t.e?r(t,e,i):r(e,t,i)}function l(e,t){t=t||L,e=o(e);for(var i=e.c,n=0;i>t[n];)n++;if(!t[n])for(i/=10,e.e+=1,n=0;i>t[n];)n++;return e.c=t[n],e}function h(e,t,n){var s,h=n||+k.slice(-1),p=l((t-e)/h,f),u=o(t-e),g=o(e,-1,1),b=o(t,-1);if(r(u,p),r(g,p,1),r(b,p),n?s=V(g,b,h):h=m(g,b),i(e)&&i(t)&&e*t>=0){if(h>t-e)return d(e,t,h);h=U(e,t,n,g,b,h)}var L=c(e,t,g.c,b.c);return g.c=L[0],b.c=L[1],(x||_)&&y(e,t,g,b),a(g.c,b.c,h,b.e)}function m(e,i){for(var n,a,o,r,s=[],h=k.length;h--;)n=k[h],a=l((i.c-e.c)/n,f),a=a.c*t(a.e),o=w(e.c/a)*a,r=K(i.c/a)*a,s[h]={min:o,max:r,step:a,span:r-o};return s.sort(function(e,t){var i=e.span-t.span;return 0===i&&(i=e.step-t.step),i}),s=s[0],n=s.span/s.step,e.c=s.min,i.c=s.max,3>n?2*n:n}function V(e,i,n){for(var a,o,r=i.c,s=(i.c-e.c)/n-1;r>e.c;)s=l(s+1,f),s=s.c*t(s.e),a=s*n,o=K(i.c/s)*s,r=o-a;var h=e.c-r,m=o-i.c,V=h-m;return V>1.1*s&&(V=v(V/s/2)*s,r+=V,o+=V),e.c=r,i.c=o,s}function U(e,n,a,o,r,s){var l=r.c-o.c,h=l/s*t(r.e);if(!i(h)&&(h=w(h),l=h*s,n-e>l&&(h+=1,l=h*s,!a&&h*(s-1)>=n-e&&(s-=1,l=h*s)),l>=n-e)){var m=l-(n-e);o.c=v(e-m/2),r.c=v(n+m/2),o.e=0,r.e=0}return s}function d(e,t,i){if(i=i||5,x)t=e+i;else if(_)e=t-i;else{var n=i-(t-e),o=v(e-n/2),r=v(t+n/2),s=c(e,t,o,r);e=s[0],t=s[1]}return a(e,t,i)}function p(e,t,i){i=i||5;var n=X.min(I(t/i),i)/2.1;return x?t=e+n:_?e=t-n:(e-=n,t+=n),h(e,t,i)}function c(e,t,i,n){\nreturn e>=0&&0>i?(n-=i,i=0):0>=t&&n>0&&(i-=n,n=0),[i,n]}function u(e){return e=(+e).toFixed(15).split(\".\"),e.pop().replace(/0+$/,\"\").length}function y(e,t,i,n){if(x){var a=o(e,4,1);i.e-a.e>6&&(a={c:0,e:i.e}),s(i,a),s(n,a),n.c+=a.c-i.c,i.c=a.c}else if(_){var r=o(t,4);n.e-r.e>6&&(r={c:0,e:n.e}),s(i,r),s(n,r),i.c+=r.c-n.c,n.c=r.c}}function g(e,t,i){var n=i?[i]:k,s=t-e;if(0===s)return t=o(t,3),i=n[0],t.c=v(t.c+i/2),a(t.c-i,t.c,i,t.e);I(t/s)<1e-6&&(t=0),I(e/s)<1e-6&&(e=0);var l,h,m,V=[[5,10],[10,2],[50,10],[100,2]],U=[],d=[],p=o(t-e,3),c=o(e,-1,1),u=o(t,-1);r(c,p,1),r(u,p),s=u.c-c.c,p.c=s;for(var y=n.length;y--;){i=n[y],l=K(s/i),h=l*i-s,m=3*(h+3),m+=2*(i-n[0]+2),i%5===0&&(m-=10);for(var g=V.length;g--;)l%V[g][0]===0&&(m/=V[g][1]);d[y]=[i,l,h,m].join(),U[y]={secs:i,step:l,delta:h,score:m}}return U.sort(function(e,t){return e.score-t.score}),U=U[0],c.c=v(c.c-U.delta/2),u.c=v(u.c+U.delta/2),a(c.c,u.c,U.secs,p.e)}var b,f,k,x,_,L=[10,20,25,50],W=[4,5,6],X=Math,v=X.round,w=X.floor,K=X.ceil,I=X.abs;return n}),i(\"echarts/util/smartLogSteps\",[\"require\",\"./number\"],function(e){function t(e){return i(),u=e||{},n(),a(),[o(),i()][0]}function i(){U=u=g=c=b=f=y=k=d=p=null}function n(){d=u.logLabelBase,null==d?(p=\"plain\",d=10,c=I):(d=+d,1>d&&(d=10),p=\"exponent\",c=L(d)),y=u.splitNumber,null==y&&(y=E);var e=parseFloat(u.dataMin),t=parseFloat(u.dataMax);isFinite(e)||isFinite(t)?isFinite(e)?isFinite(t)?e>t&&(t=[e,e=t][0]):t=e:e=t:e=t=1,U=u.logPositive,null==U&&(U=t>0||0===e),b=U?e:-t,f=U?t:-e,S>b&&(b=S),S>f&&(f=S)}function a(){function e(){y>m&&(y=m);var e=w(l(m/y)),t=v(l(m/e)),i=e*t,n=(i-U)/2,a=w(l(r-n));V(a-r)&&(a-=1),g=-a*c;for(var s=a;o>=s-e;s+=e)k.push(W(d,s))}function t(){for(var e=i(h,0),t=e+2;t>e&&a(e+1)+n(e+1)*C<r;)e++;for(var l=i(s,0),t=l-2;l>t&&a(l-1)+n(l-1)*C>o;)l--;g=-(a(e)*I+n(e)*J);for(var m=e;l>=m;m++){var V=a(m),U=n(m);k.push(W(10,V)*W(2,U))}}function i(e,t){return 3*e+t}function n(e){return e-3*a(e)}function a(e){return w(l(e/3))}k=[];var o=l(L(f)/c),r=l(L(b)/c),s=v(o),h=w(r),m=s-h,U=o-r;\"exponent\"===p?e():F>=m&&y>F?t():e()}function o(){for(var e=[],t=0,i=k.length;i>t;t++)e[t]=(U?1:-1)*k[t];!U&&e.reverse();var n=s(),a=n.value2Coord,o=a(e[0]),l=a(e[e.length-1]);return o===l&&(o-=1,l+=1),{dataMin:o,dataMax:l,tickList:e,logPositive:U,labelFormatter:r(),dataMappingMethods:n}}function r(){if(\"exponent\"===p){var e=d,t=c;return function(i){if(!isFinite(parseFloat(i)))return\"\";var n=\"\";return 0>i&&(i=-i,n=\"-\"),n+e+m(L(i)/t)}}return function(e){return isFinite(parseFloat(e))?x.addCommas(h(e)):\"\"}}function s(){var e=U,t=g;return{value2Coord:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)?e&&S>i?i=S:!e&&i>-S&&(i=-S):i=S,i=X(i),(e?1:-1)*(L(i)+t))},coord2Value:function(i){return null==i||isNaN(i)||!isFinite(i)?i:(i=parseFloat(i),isFinite(i)||(i=S),e?W(K,i-t):-W(K,-i+t))}}}function l(e){return+Number(+e).toFixed(14)}function h(e){return Number(e).toFixed(15).replace(/\\.?0*$/,\"\")}function m(e){e=h(Math.round(e));for(var t=[],i=0,n=e.length;n>i;i++){var a=e.charAt(i);t.push(T[a]||\"\")}return t.join(\"\")}function V(e){return e>-S&&S>e}var U,d,p,c,u,y,g,b,f,k,x=e(\"./number\"),_=Math,L=_.log,W=_.pow,X=_.abs,v=_.ceil,w=_.floor,K=_.E,I=_.LN10,J=_.LN2,C=J/I,S=1e-9,E=5,F=2,T={0:\"⁰\",1:\"¹\",2:\"²\",3:\"³\",4:\"⁴\",5:\"⁵\",6:\"⁶\",7:\"⁷\",8:\"⁸\",9:\"⁹\",\"-\":\"⁻\"};return t}),i(\"echarts/chart/line\",[\"require\",\"./base\",\"zrender/shape/Polyline\",\"../util/shape/Icon\",\"../util/shape/HalfSmoothPolygon\",\"../component/axis\",\"../component/grid\",\"../component/dataZoom\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,i,a,o){n.call(this,e,t,i,a,o),this.refresh(a)}function i(e,t,i){var n=t.x,a=t.y,r=t.width,s=t.height,l=s/2;t.symbol.match(\"empty\")&&(e.fillStyle=\"#fff\"),t.brushType=\"both\";var h=t.symbol.replace(\"empty\",\"\").toLowerCase();h.match(\"star\")?(l=h.replace(\"star\",\"\")-0||5,a-=1,h=\"star\"):(\"rectangle\"===h||\"arrow\"===h)&&(n+=(r-s)/2,r=s);var m=\"\";if(h.match(\"image\")&&(m=h.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),h=\"image\",n+=Math.round((r-s)/2)-1,r=s+=2),h=o.prototype.iconLibrary[h]){var V=t.x,U=t.y;e.moveTo(V,U+l),e.lineTo(V+5,U+l),e.moveTo(V+t.width-5,U+l),e.lineTo(V+t.width,U+l);var d=this;h(e,{x:n+4,y:a+4,width:r-8,height:s-8,n:l,image:m},function(){d.modSelf(),i()})}else e.moveTo(n,a+l),e.lineTo(n+r,a+l)}var n=e(\"./base\"),a=e(\"zrender/shape/Polyline\"),o=e(\"../util/shape/Icon\"),r=e(\"../util/shape/HalfSmoothPolygon\");e(\"../component/axis\"),e(\"../component/grid\"),e(\"../component/dataZoom\");var s=e(\"../config\");s.line={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,dataFilter:\"nearest\",itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:\"solid\",shadowColor:\"rgba(0,0,0,0)\",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1};var l=e(\"../util/ecData\"),h=e(\"zrender/tool/util\"),m=e(\"zrender/tool/color\");return t.prototype={type:s.CHART_TYPE_LINE,_buildShape:function(){this.finalPLMap={},this._buildPosition()},_buildHorizontal:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.xAxis.getAxis(c.xAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){o=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.yAxis.getAxis(d[i[f][0]].yAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,\"-\"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},\"-\"!==U?(U>=0?(s-=x>0?a.getCoordSize(U):l-a.getCoord(U),r=s):0>U&&(h+=x>0?a.getCoordSize(U):a.getCoord(U)-m,r=h),y[p].push([o,r,g,u.getNameByIndex(g),o,l]),n[p].min>U&&(n[p].min=U,n[p].minY=r,n[p].minX=o),n[p].max<U&&(n[p].max=U,n[p].maxY=r,n[p].maxX=o),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getY();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,\"-\"),\"-\"==U&&this.deepQuery([V,c,this.option],\"calculable\")&&(L=this.deepQuery([V,c],\"symbolSize\"),s+=2*L+5,r=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,\"horizontal\")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,\"y\"),this._buildBorkenLine(e,this.finalPLMap,u,\"horizontal\")},_buildVertical:function(e,t,i,n){for(var a,o,r,s,l,h,m,V,U,d=this.series,p=i[0][0],c=d[p],u=this.component.yAxis.getAxis(c.yAxisIndex||0),y={},g=0,b=t;b>g&&null!=u.getNameByIndex(g);g++){r=u.getCoordByIndex(g);for(var f=0,k=i.length;k>f;f++){a=this.component.xAxis.getAxis(d[i[f][0]].xAxisIndex||0),l=s=m=h=a.getCoord(0);for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,\"-\"),y[p]=y[p]||[],n[p]=n[p]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},\"-\"!==U?(U>=0?(s+=x>0?a.getCoordSize(U):a.getCoord(U)-l,o=s):0>U&&(h-=x>0?a.getCoordSize(U):m-a.getCoord(U),o=h),y[p].push([o,r,g,u.getNameByIndex(g),l,r]),n[p].min>U&&(n[p].min=U,n[p].minX=o,n[p].minY=r),n[p].max<U&&(n[p].max=U,n[p].maxX=o,n[p].maxY=r),n[p].sum+=U,n[p].counter++):y[p].length>0&&(this.finalPLMap[p]=this.finalPLMap[p]||[],this.finalPLMap[p].push(y[p]),y[p]=[])}s=this.component.grid.getXend();for(var L,f=0,k=i.length;k>f;f++)for(var x=0,_=i[f].length;_>x;x++)p=i[f][x],c=d[p],V=c.data[g],U=this.getDataFromOption(V,\"-\"),\"-\"==U&&this.deepQuery([V,c,this.option],\"calculable\")&&(L=this.deepQuery([V,c],\"symbolSize\"),s-=2*L+5,o=s,this.shapeList.push(this._getCalculableItem(p,g,u.getNameByIndex(g),o,r,\"vertical\")))}for(var W in y)y[W].length>0&&(this.finalPLMap[W]=this.finalPLMap[W]||[],this.finalPLMap[W].push(y[W]),y[W]=[]);this._calculMarkMapXY(n,i,\"x\"),this._buildBorkenLine(e,this.finalPLMap,u,\"vertical\")},_buildOther:function(e,t,i,n){for(var a,o=this.series,r={},s=0,l=i.length;l>s;s++)for(var h=0,m=i[s].length;m>h;h++){var V=i[s][h],U=o[V];a=this.component.xAxis.getAxis(U.xAxisIndex||0);var d=this.component.yAxis.getAxis(U.yAxisIndex||0),p=d.getCoord(0);r[V]=r[V]||[],n[V]=n[V]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var c=0,u=U.data.length;u>c;c++){var y=U.data[c],g=this.getDataFromOption(y,\"-\");if(g instanceof Array){var b=a.getCoord(g[0]),f=d.getCoord(g[1]);r[V].push([b,f,c,g[0],b,p]),n[V].min0>g[0]&&(n[V].min0=g[0],n[V].minY0=f,n[V].minX0=b),n[V].max0<g[0]&&(n[V].max0=g[0],n[V].maxY0=f,n[V].maxX0=b),n[V].sum0+=g[0],n[V].counter0++,n[V].min1>g[1]&&(n[V].min1=g[1],n[V].minY1=f,n[V].minX1=b),n[V].max1<g[1]&&(n[V].max1=g[1],n[V].maxY1=f,n[V].maxX1=b),n[V].sum1+=g[1],n[V].counter1++}}}for(var k in r)r[k].length>0&&(this.finalPLMap[k]=this.finalPLMap[k]||[],this.finalPLMap[k].push(r[k]),r[k]=[]);this._calculMarkMapXY(n,i,\"xy\"),this._buildBorkenLine(e,this.finalPLMap,a,\"other\")},_buildBorkenLine:function(e,t,i,n){for(var o,s=\"other\"==n?\"horizontal\":n,V=this.series,U=e.length-1;U>=0;U--){var d=e[U],p=V[d],c=t[d];if(p.type===this.type&&null!=c)for(var u=this._getBbox(d,s),y=this._sIndex2ColorMap[d],g=this.query(p,\"itemStyle.normal.lineStyle.width\"),b=this.query(p,\"itemStyle.normal.lineStyle.type\"),f=this.query(p,\"itemStyle.normal.lineStyle.color\"),k=this.getItemStyleColor(this.query(p,\"itemStyle.normal.color\"),d,-1),x=null!=this.query(p,\"itemStyle.normal.areaStyle\"),_=this.query(p,\"itemStyle.normal.areaStyle.color\"),L=0,W=c.length;W>L;L++){var X=c[L],v=\"other\"!=n&&this._isLarge(s,X);if(v)X=this._getLargePointList(s,X,p.dataFilter);else for(var w=0,K=X.length;K>w;w++)o=p.data[X[w][2]],(this.deepQuery([o,p,this.option],\"calculable\")||this.deepQuery([o,p],\"showAllSymbol\")||\"categoryAxis\"===i.type&&i.isMainAxis(X[w][2])&&\"none\"!=this.deepQuery([o,p],\"symbol\"))&&this.shapeList.push(this._getSymbol(d,X[w][2],X[w][3],X[w][0],X[w][1],s));var I=new a({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:X,strokeColor:f||k||y,lineWidth:g,lineType:b,smooth:this._getSmooth(p.smooth),smoothConstraint:u,shadowColor:this.query(p,\"itemStyle.normal.lineStyle.shadowColor\"),shadowBlur:this.query(p,\"itemStyle.normal.lineStyle.shadowBlur\"),shadowOffsetX:this.query(p,\"itemStyle.normal.lineStyle.shadowOffsetX\"),shadowOffsetY:this.query(p,\"itemStyle.normal.lineStyle.shadowOffsetY\")},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});if(l.pack(I,V[d],d,0,L,V[d].name),this.shapeList.push(I),x){var J=new r({zlevel:p.zlevel,z:p.z,style:{miterLimit:g,pointList:h.clone(X).concat([[X[X.length-1][4],X[X.length-1][5]],[X[0][4],X[0][5]]]),brushType:\"fill\",smooth:this._getSmooth(p.smooth),smoothConstraint:u,color:_?_:m.alpha(y,.5)},highlightStyle:{brushType:\"fill\"},hoverable:!1,_main:!0,_seriesIndex:d,_orient:s});l.pack(J,V[d],d,0,L,V[d].name),this.shapeList.push(J)}}}},_getBbox:function(e,t){var i=this.component.grid.getBbox(),n=this.xMarkMap[e];return null!=n.minX0?[[Math.min(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.min(n.minY0,n.maxY0,n.minY1,n.maxY1)],[Math.max(n.minX0,n.maxX0,n.minX1,n.maxX1),Math.max(n.minY0,n.maxY0,n.minY1,n.maxY1)]]:(\"horizontal\"===t?(i[0][1]=Math.min(n.minY,n.maxY),i[1][1]=Math.max(n.minY,n.maxY)):(i[0][0]=Math.min(n.minX,n.maxX),i[1][0]=Math.max(n.minX,n.maxX)),i)},_isLarge:function(e,t){return t.length<2?!1:\"horizontal\"===e?Math.abs(t[0][0]-t[1][0])<.5:Math.abs(t[0][1]-t[1][1])<.5},_getLargePointList:function(e,t,i){var n;n=\"horizontal\"===e?this.component.grid.getWidth():this.component.grid.getHeight();var a=t.length,o=[];if(\"function\"!=typeof i)switch(i){case\"min\":i=function(e){return Math.max.apply(null,e)};break;case\"max\":i=function(e){return Math.min.apply(null,e)};break;case\"average\":i=function(e){for(var t=0,i=0;i<e.length;i++)t+=e[i];return t/e.length};break;default:i=function(e){return e[0]}}for(var r=[],s=0;n>s;s++){var l=Math.floor(a/n*s),h=Math.min(Math.floor(a/n*(s+1)),a);if(!(l>=h)){for(var m=l;h>m;m++)r[m-l]=\"horizontal\"===e?t[m][1]:t[m][0];r.length=h-l;for(var V=i(r),U=-1,d=1/0,m=l;h>m;m++){var p=\"horizontal\"===e?t[m][1]:t[m][0],c=Math.abs(p-V);d>c&&(U=m,d=c)}var u=t[U].slice();\"horizontal\"===e?u[1]=V:u[0]=V,o.push(u)}}return o},_getSmooth:function(e){return e?.3:0},_getCalculableItem:function(e,t,i,n,a,o){var r=this.series,l=r[e].calculableHolderColor||this.ecTheme.calculableHolderColor||s.calculableHolderColor,h=this._getSymbol(e,t,i,n,a,o);return h.style.color=l,h.style.strokeColor=l,h.rotation=[0,0],h.hoverable=!1,h.draggable=!1,h.style.text=void 0,h},_getSymbol:function(e,t,i,n,a,o){var r=this.series,s=r[e],l=s.data[t],h=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],this._sIndex2ColorMap[e],\"#fff\",\"vertical\"===o?\"horizontal\":\"vertical\");return h.zlevel=s.zlevel,h.z=s.z+1,this.deepQuery([l,s,this.option],\"calculable\")&&(this.setCalculable(h),h.draggable=!0),h},getMarkCoord:function(e,t){var i=this.series[e],n=this.xMarkMap[e],a=this.component.xAxis.getAxis(i.xAxisIndex),o=this.component.yAxis.getAxis(i.yAxisIndex);if(t.type&&(\"max\"===t.type||\"min\"===t.type||\"average\"===t.type)){var r=null!=t.valueIndex?t.valueIndex:null!=n.maxX0?\"1\":\"\";return[n[t.type+\"X\"+r],n[t.type+\"Y\"+r],n[t.type+\"Line\"+r],n[t.type+r]]}return[\"string\"!=typeof t.xAxis&&a.getCoordByIndex?a.getCoordByIndex(t.xAxis||0):a.getCoord(t.xAxis||0),\"string\"!=typeof t.yAxis&&o.getCoordByIndex?o.getCoordByIndex(t.yAxis||0):o.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ontooltipHover:function(e,t){for(var i,n,a=e.seriesIndex,o=e.dataIndex,r=a.length;r--;)if(i=this.finalPLMap[a[r]])for(var s=0,l=i.length;l>s;s++){n=i[s];for(var h=0,m=n.length;m>h;h++)o===n[h][2]&&t.push(this._getSymbol(a[r],n[h][2],n[h][3],n[h][0],n[h][1],\"horizontal\"))}},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}function n(e){e.style.controlPointList=null}for(var a=this.series,o={},r=0,s=e.length;s>r;r++)o[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(U=this.shapeList[r]._seriesIndex,o[U]&&!o[U][3]){if(this.shapeList[r]._main&&this.shapeList[r].style.pointList.length>1){if(d=this.shapeList[r].style.pointList,h=Math.abs(d[0][0]-d[1][0]),V=Math.abs(d[0][1]-d[1][1]),p=\"horizontal\"===this.shapeList[r]._orient,o[U][2]){if(\"half-smooth-polygon\"===this.shapeList[r].type){var u=d.length;this.shapeList[r].style.pointList[u-3]=d[u-2],this.shapeList[r].style.pointList[u-3][p?0:1]=d[u-4][p?0:1],this.shapeList[r].style.pointList[u-2]=d[u-1]}this.shapeList[r].style.pointList.pop(),p?(l=h,m=0):(l=0,m=-V)}else{if(this.shapeList[r].style.pointList.shift(),\"half-smooth-polygon\"===this.shapeList[r].type){var y=this.shapeList[r].style.pointList.pop();p?y[0]=d[0][0]:y[1]=d[0][1],this.shapeList[r].style.pointList.push(y)}p?(l=-h,m=0):(l=0,m=V)}this.shapeList[r].style.controlPointList=null,this.zr.modShape(this.shapeList[r])}else{if(o[U][2]&&this.shapeList[r]._dataIndex===a[U].data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!o[U][2]&&0===this.shapeList[r]._dataIndex){this.zr.delShape(this.shapeList[r].id);continue}}this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,\"\").when(this.query(this.option,\"animationDurationUpdate\"),{position:[l,m]}).during(n).done(i).start()}c||t&&t()}},o.prototype.iconLibrary.legendLineIcon=i,h.inherits(t,n),e(\"../chart\").define(\"line\",t),t}),i(\"echarts/util/shape/HalfSmoothPolygon\",[\"require\",\"zrender/shape/Base\",\"zrender/shape/util/smoothBezier\",\"zrender/tool/util\",\"zrender/shape/Polygon\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/shape/util/smoothBezier\"),a=e(\"zrender/tool/util\");return t.prototype={type:\"half-smooth-polygon\",buildPath:function(t,i){var a=i.pointList;if(!(a.length<2))if(i.smooth){var o=n(a.slice(0,-2),i.smooth,!1,i.smoothConstraint);t.moveTo(a[0][0],a[0][1]);for(var r,s,l,h=a.length,m=0;h-3>m;m++)r=o[2*m],s=o[2*m+1],l=a[m+1],t.bezierCurveTo(r[0],r[1],s[0],s[1],l[0],l[1]);t.lineTo(a[h-2][0],a[h-2][1]),t.lineTo(a[h-1][0],a[h-1][1]),t.lineTo(a[0][0],a[0][1])}else e(\"zrender/shape/Polygon\").prototype.buildPath(t,i)}},a.inherits(t,i),t}),i(\"echarts/chart/bar\",[\"require\",\"./base\",\"zrender/shape/Rectangle\",\"../component/axis\",\"../component/grid\",\"../component/dataZoom\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Rectangle\");e(\"../component/axis\"),e(\"../component/grid\"),e(\"../component/dataZoom\");var a=e(\"../config\");a.bar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:\"30%\",barCategoryGap:\"20%\",itemStyle:{normal:{barBorderColor:\"#fff\",barBorderRadius:0,barBorderWidth:0,label:{show:!1}},emphasis:{barBorderColor:\"#fff\",barBorderRadius:0,barBorderWidth:0,label:{show:!1}}}};var o=e(\"../util/ecData\"),r=e(\"zrender/tool/util\"),s=e(\"zrender/tool/color\");return t.prototype={type:a.CHART_TYPE_BAR,_buildShape:function(){this._buildPosition()},_buildNormal:function(e,t,i,o,r){for(var s,l,h,m,V,U,d,p,c,u,y,g,b=this.series,f=i[0][0],k=b[f],x=\"horizontal\"==r,_=this.component.xAxis,L=this.component.yAxis,W=x?_.getAxis(k.xAxisIndex):L.getAxis(k.yAxisIndex),X=this._mapSize(W,i),v=X.gap,w=X.barGap,K=X.barWidthMap,I=X.barMaxWidthMap,J=X.barWidth,C=X.barMinHeightMap,S=X.interval,E=this.deepQuery([this.ecTheme,a],\"island.r\"),F=0,T=t;T>F&&null!=W.getNameByIndex(F);F++){x?m=W.getCoordByIndex(F)-v/2:V=W.getCoordByIndex(F)+v/2;for(var z=0,A=i.length;A>z;z++){var M=b[i[z][0]].yAxisIndex||0,O=b[i[z][0]].xAxisIndex||0;s=x?L.getAxis(M):_.getAxis(O),d=U=c=p=s.getCoord(0);for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,\"-\"),o[f]=o[f]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0},h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),\"-\"!==g&&(g>0?(l=P>0?s.getCoordSize(g):x?d-s.getCoord(g):s.getCoord(g)-d,1===D&&C[f]>l&&(l=C[f]),x?(U-=l,V=U):(m=U,U+=l)):0>g?(l=P>0?s.getCoordSize(g):x?s.getCoord(g)-c:c-s.getCoord(g),1===D&&C[f]>l&&(l=C[f]),x?(V=p,p+=l):(p-=l,m=p)):(l=0,x?(U-=l,V=U):(m=U,U+=l)),o[f][F]=x?m+h/2:V-h/2,o[f].min>g&&(o[f].min=g,x?(o[f].minY=V,o[f].minX=o[f][F]):(o[f].minX=m+l,o[f].minY=o[f][F])),o[f].max<g&&(o[f].max=g,x?(o[f].maxY=V,o[f].maxX=o[f][F]):(o[f].maxX=m+l,o[f].maxY=o[f][F])),o[f].sum+=g,o[f].counter++,F%S===0&&(u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:l,x?l:h,x?\"vertical\":\"horizontal\"),this.shapeList.push(new n(u))));for(var P=0,D=i[z].length;D>P;P++)f=i[z][P],k=b[f],y=k.data[F],g=this.getDataFromOption(y,\"-\"),h=Math.min(I[f]||Number.MAX_VALUE,K[f]||J),\"-\"==g&&this.deepQuery([y,k,this.option],\"calculable\")&&(x?(U-=E,V=U):(m=U,U+=E),u=this._getBarItem(f,F,W.getNameByIndex(F),m,V-(x?0:h),x?h:E,x?E:h,x?\"vertical\":\"horizontal\"),u.hoverable=!1,u.draggable=!1,u.style.lineWidth=1,u.style.brushType=\"stroke\",u.style.strokeColor=k.calculableHolderColor||this.ecTheme.calculableHolderColor||a.calculableHolderColor,this.shapeList.push(new n(u)));x?m+=h+w:V-=h+w}}this._calculMarkMapXY(o,i,x?\"y\":\"x\")},_buildHorizontal:function(e,t,i,n){return this._buildNormal(e,t,i,n,\"horizontal\")},_buildVertical:function(e,t,i,n){return this._buildNormal(e,t,i,n,\"vertical\")},_buildOther:function(e,t,i,a){for(var o=this.series,r=0,s=i.length;s>r;r++)for(var l=0,h=i[r].length;h>l;l++){var m=i[r][l],V=o[m],U=V.xAxisIndex||0,d=this.component.xAxis.getAxis(U),p=d.getCoord(0),c=V.yAxisIndex||0,u=this.component.yAxis.getAxis(c),y=u.getCoord(0);a[m]=a[m]||{min0:Number.POSITIVE_INFINITY,min1:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum0:0,sum1:0,counter0:0,counter1:0,average0:0,average1:0};for(var g=0,b=V.data.length;b>g;g++){var f=V.data[g],k=this.getDataFromOption(f,\"-\");if(k instanceof Array){var x,_,L=d.getCoord(k[0]),W=u.getCoord(k[1]),X=[f,V],v=this.deepQuery(X,\"barWidth\")||10,w=this.deepQuery(X,\"barHeight\");null!=w?(x=\"horizontal\",k[0]>0?(v=L-p,L-=v):v=k[0]<0?p-L:0,_=this._getBarItem(m,g,k[0],L,W-w/2,v,w,x)):(x=\"vertical\",k[1]>0?w=y-W:k[1]<0?(w=W-y,W-=w):w=0,_=this._getBarItem(m,g,k[0],L-v/2,W,v,w,x)),this.shapeList.push(new n(_)),L=d.getCoord(k[0]),W=u.getCoord(k[1]),a[m].min0>k[0]&&(a[m].min0=k[0],a[m].minY0=W,a[m].minX0=L),a[m].max0<k[0]&&(a[m].max0=k[0],a[m].maxY0=W,a[m].maxX0=L),a[m].sum0+=k[0],a[m].counter0++,a[m].min1>k[1]&&(a[m].min1=k[1],a[m].minY1=W,a[m].minX1=L),a[m].max1<k[1]&&(a[m].max1=k[1],a[m].maxY1=W,a[m].maxX1=L),a[m].sum1+=k[1],a[m].counter1++}}}this._calculMarkMapXY(a,i,\"xy\")},_mapSize:function(e,t,i){var n,a,o=this._findSpecialBarSzie(t,i),r=o.barWidthMap,s=o.barMaxWidthMap,l=o.barMinHeightMap,h=o.sBarWidthCounter,m=o.sBarWidthTotal,V=o.barGap,U=o.barCategoryGap,d=1;if(t.length!=h){if(i)n=e.getGap(),V=0,a=+(n/t.length).toFixed(2),0>=a&&(d=Math.floor(t.length/n),a=1);else if(n=\"string\"==typeof U&&U.match(/%$/)?(e.getGap()*(100-parseFloat(U))/100).toFixed(2)-0:e.getGap()-U,\"string\"==typeof V&&V.match(/%$/)?(V=parseFloat(V)/100,a=+((n-m)/((t.length-1)*V+t.length-h)).toFixed(2),V=a*V):(V=parseFloat(V),a=+((n-m-V*(t.length-1))/(t.length-h)).toFixed(2)),0>=a)return this._mapSize(e,t,!0)}else if(n=h>1?\"string\"==typeof U&&U.match(/%$/)?+(e.getGap()*(100-parseFloat(U))/100).toFixed(2):e.getGap()-U:m,a=0,V=h>1?+((n-m)/(h-1)).toFixed(2):0,0>V)return this._mapSize(e,t,!0);return this._recheckBarMaxWidth(t,r,s,l,n,a,V,d)},_findSpecialBarSzie:function(e,t){for(var i,n,a,o,r=this.series,s={},l={},h={},m=0,V=0,U=0,d=e.length;d>U;U++)for(var p={barWidth:!1,barMaxWidth:!1},c=0,u=e[U].length;u>c;c++){var y=e[U][c],g=r[y];if(!t){if(p.barWidth)s[y]=i;else if(i=this.query(g,\"barWidth\"),null!=i){s[y]=i,V+=i,m++,p.barWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];s[k]=i}}if(p.barMaxWidth)l[y]=n;else if(n=this.query(g,\"barMaxWidth\"),null!=n){l[y]=n,p.barMaxWidth=!0;for(var b=0,f=c;f>b;b++){var k=e[U][b];l[k]=n}}}h[y]=this.query(g,\"barMinHeight\"),a=null!=a?a:this.query(g,\"barGap\"),o=null!=o?o:this.query(g,\"barCategoryGap\")}return{barWidthMap:s,barMaxWidthMap:l,barMinHeightMap:h,sBarWidth:i,sBarMaxWidth:n,sBarWidthCounter:m,sBarWidthTotal:V,barGap:a,barCategoryGap:o}},_recheckBarMaxWidth:function(e,t,i,n,a,o,r,s){for(var l=0,h=e.length;h>l;l++){var m=e[l][0];i[m]&&i[m]<o&&(a-=o-i[m])}return{barWidthMap:t,barMaxWidthMap:i,barMinHeightMap:n,gap:a,barWidth:o,barGap:r,interval:s}},_getBarItem:function(e,t,i,n,a,r,l,h){var m,V=this.series,U=V[e],d=U.data[t],p=this._sIndex2ColorMap[e],c=[d,U],u=this.deepMerge(c,\"itemStyle.normal\"),y=this.deepMerge(c,\"itemStyle.emphasis\"),g=u.barBorderWidth;m={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(c,\"clickable\"),style:{x:n,y:a,width:r,height:l,brushType:\"both\",color:this.getItemStyleColor(this.deepQuery(c,\"itemStyle.normal.color\")||p,e,t,d),radius:u.barBorderRadius,lineWidth:g,strokeColor:u.barBorderColor},highlightStyle:{color:this.getItemStyleColor(this.deepQuery(c,\"itemStyle.emphasis.color\"),e,t,d),radius:y.barBorderRadius,lineWidth:y.barBorderWidth,strokeColor:y.barBorderColor},_orient:h};var b=m.style;m.highlightStyle.color=m.highlightStyle.color||(\"string\"==typeof b.color?s.lift(b.color,-.3):b.color),b.x=Math.floor(b.x),b.y=Math.floor(b.y),b.height=Math.ceil(b.height),b.width=Math.ceil(b.width),g>0&&b.height>g&&b.width>g?(b.y+=g/2,b.height-=g,b.x+=g/2,b.width-=g):b.brushType=\"fill\",m.highlightStyle.textColor=m.highlightStyle.color,m=this.addLabel(m,U,d,i,h);for(var f=[b,m.highlightStyle],k=0,x=f.length;x>k;k++){var _=f[k].textPosition;if(\"insideLeft\"===_||\"insideRight\"===_||\"insideTop\"===_||\"insideBottom\"===_){var L=5;switch(_){case\"insideLeft\":f[k].textX=b.x+L,f[k].textY=b.y+b.height/2,f[k].textAlign=\"left\",f[k].textBaseline=\"middle\";break;case\"insideRight\":f[k].textX=b.x+b.width-L,f[k].textY=b.y+b.height/2,f[k].textAlign=\"right\",f[k].textBaseline=\"middle\";break;case\"insideTop\":f[k].textX=b.x+b.width/2,f[k].textY=b.y+L/2,f[k].textAlign=\"center\",f[k].textBaseline=\"top\";break;case\"insideBottom\":f[k].textX=b.x+b.width/2,f[k].textY=b.y+b.height-L/2,f[k].textAlign=\"center\",f[k].textBaseline=\"bottom\"}f[k].textPosition=\"specific\",f[k].textColor=f[k].textColor||\"#fff\"}}return this.deepQuery([d,U,this.option],\"calculable\")&&(this.setCalculable(m),m.draggable=!0),o.pack(m,V[e],e,V[e].data[t],t,i),m},getMarkCoord:function(e,t){var i,n,a=this.series[e],o=this.xMarkMap[e],r=this.component.xAxis.getAxis(a.xAxisIndex),s=this.component.yAxis.getAxis(a.yAxisIndex);if(!t.type||\"max\"!==t.type&&\"min\"!==t.type&&\"average\"!==t.type)if(o.isHorizontal){i=\"string\"==typeof t.xAxis&&r.getIndexByName?r.getIndexByName(t.xAxis):t.xAxis||0;var l=o[i];l=null!=l?l:\"string\"!=typeof t.xAxis&&r.getCoordByIndex?r.getCoordByIndex(t.xAxis||0):r.getCoord(t.xAxis||0),n=[l,s.getCoord(t.yAxis||0)]}else{i=\"string\"==typeof t.yAxis&&s.getIndexByName?s.getIndexByName(t.yAxis):t.yAxis||0;var h=o[i];h=null!=h?h:\"string\"!=typeof t.yAxis&&s.getCoordByIndex?s.getCoordByIndex(t.yAxis||0):s.getCoord(t.yAxis||0),n=[r.getCoord(t.xAxis||0),h]}else{var m=null!=t.valueIndex?t.valueIndex:null!=o.maxX0?\"1\":\"\";n=[o[t.type+\"X\"+m],o[t.type+\"Y\"+m],o[t.type+\"Line\"+m],o[t.type+m]]}return n},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){c--,0===c&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p,c=0,r=this.shapeList.length-1;r>=0;r--)if(d=o.get(this.shapeList[r],\"seriesIndex\"),a[d]&&!a[d][3]&&\"rectangle\"===this.shapeList[r].type){if(p=o.get(this.shapeList[r],\"dataIndex\"),U=n[d],a[d][2]&&p===U.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[d][2]&&0===p){this.zr.delShape(this.shapeList[r].id);continue}\"horizontal\"===this.shapeList[r]._orient?(V=this.component.yAxis.getAxis(U.yAxisIndex||0).getGap(),m=a[d][2]?-V:V,l=0):(h=this.component.xAxis.getAxis(U.xAxisIndex||0).getGap(),l=a[d][2]?h:-h,m=0),this.shapeList[r].position=[0,0],c++,this.zr.animate(this.shapeList[r].id,\"\").when(this.query(this.option,\"animationDurationUpdate\"),{position:[l,m]}).done(i).start()}c||t&&t()}},r.inherits(t,i),e(\"../chart\").define(\"bar\",t),t}),i(\"echarts/chart/scatter\",[\"require\",\"./base\",\"../util/shape/Symbol\",\"../component/axis\",\"../component/grid\",\"../component/dataZoom\",\"../component/dataRange\",\"../config\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"../util/shape/Symbol\");e(\"../component/axis\"),e(\"../component/grid\"),e(\"../component/dataZoom\"),e(\"../component/dataRange\");var a=e(\"../config\");a.scatter={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e(\"zrender/tool/util\"),r=e(\"zrender/tool/color\");return t.prototype={type:a.CHART_TYPE_SCATTER,_buildShape:function(){var e=this.series;this._sIndex2ColorMap={},this._symbol=this.option.symbolList,this._sIndex2ShapeMap={},this.selectedMap={},this.xMarkMap={};for(var t,i,n,o,s=this.component.legend,l=[],h=0,m=e.length;m>h;h++)if(t=e[h],i=t.name,t.type===a.CHART_TYPE_SCATTER){if(e[h]=this.reformOption(e[h]),this.legendHoverLink=e[h].legendHoverLink||this.legendHoverLink,this._sIndex2ShapeMap[h]=this.query(t,\"symbol\")||this._symbol[h%this._symbol.length],s){if(this.selectedMap[i]=s.isSelected(i),this._sIndex2ColorMap[h]=r.alpha(s.getColor(i),.5),n=s.getItemShape(i)){var o=this._sIndex2ShapeMap[h];n.style.brushType=o.match(\"empty\")?\"stroke\":\"both\",o=o.replace(\"empty\",\"\").toLowerCase(),o.match(\"rectangle\")&&(n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height),o.match(\"star\")&&(n.style.n=o.replace(\"star\",\"\")-0||5,o=\"star\"),o.match(\"image\")&&(n.style.image=o.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),n.style.x+=Math.round((n.style.width-n.style.height)/2),n.style.width=n.style.height,o=\"image\"),n.style.iconType=o,s.setItemShape(i,n)}}else this.selectedMap[i]=!0,this._sIndex2ColorMap[h]=r.alpha(this.zr.getColor(h),.5);this.selectedMap[i]&&l.push(h)}this._buildSeries(l),this.addShapeList()},_buildSeries:function(e){if(0!==e.length){for(var t,i,n,a,o,r,s,l,h=this.series,m={},V=0,U=e.length;U>V;V++)if(t=e[V],i=h[t],0!==i.data.length){o=this.component.xAxis.getAxis(i.xAxisIndex||0),r=this.component.yAxis.getAxis(i.yAxisIndex||0),m[t]=[];for(var d=0,p=i.data.length;p>d;d++)n=i.data[d],a=this.getDataFromOption(n,\"-\"),\"-\"===a||a.length<2||(s=o.getCoord(a[0]),l=r.getCoord(a[1]),m[t].push([s,l,d,n.name||\"\"]));this.xMarkMap[t]=this._markMap(o,r,i.data,m[t]),this.buildMark(t)}this._buildPointList(m)}},_markMap:function(e,t,i,n){for(var a,o={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},r=0,s=n.length;s>r;r++)a=i[n[r][2]].value||i[n[r][2]],o.min0>a[0]&&(o.min0=a[0],o.minY0=n[r][1],o.minX0=n[r][0]),o.max0<a[0]&&(o.max0=a[0],o.maxY0=n[r][1],o.maxX0=n[r][0]),o.sum0+=a[0],o.counter0++,o.min1>a[1]&&(o.min1=a[1],o.minY1=n[r][1],o.minX1=n[r][0]),o.max1<a[1]&&(o.max1=a[1],o.maxY1=n[r][1],o.maxX1=n[r][0]),o.sum1+=a[1],o.counter1++;var l=this.component.grid.getX(),h=this.component.grid.getXend(),m=this.component.grid.getY(),V=this.component.grid.getYend();o.average0=o.sum0/o.counter0;var U=e.getCoord(o.average0);o.averageLine0=[[U,V],[U,m]],o.minLine0=[[o.minX0,V],[o.minX0,m]],o.maxLine0=[[o.maxX0,V],[o.maxX0,m]],o.average1=o.sum1/o.counter1;var d=t.getCoord(o.average1);return o.averageLine1=[[l,d],[h,d]],o.minLine1=[[l,o.minY1],[h,o.minY1]],o.maxLine1=[[l,o.maxY1],[h,o.maxY1]],o},_buildPointList:function(e){var t,i,n,a,o=this.series;for(var r in e)if(t=o[r],i=e[r],t.large&&t.data.length>t.largeThreshold)this.shapeList.push(this._getLargeSymbol(t,i,this.getItemStyleColor(this.query(t,\"itemStyle.normal.color\"),r,-1)||this._sIndex2ColorMap[r]));else for(var s=0,l=i.length;l>s;s++)n=i[s],a=this._getSymbol(r,n[2],n[3],n[0],n[1]),a&&this.shapeList.push(a)},_getSymbol:function(e,t,i,n,a){var o,r=this.series,s=r[e],l=s.data[t],h=this.component.dataRange;if(h){if(o=isNaN(l[2])?this._sIndex2ColorMap[e]:h.getColor(l[2]),!o)return null}else o=this._sIndex2ColorMap[e];var m=this.getSymbolShape(s,e,l,t,i,n,a,this._sIndex2ShapeMap[e],o,\"rgba(0,0,0,0)\",\"vertical\");return m.zlevel=s.zlevel,m.z=s.z,m._main=!0,m},_getLargeSymbol:function(e,t,i){return new n({zlevel:e.zlevel,z:e.z,_main:!0,hoverable:!1,style:{pointList:t,color:i,strokeColor:i},highlightStyle:{pointList:[]}})},getMarkCoord:function(e,t){var i,n=this.series[e],a=this.xMarkMap[e],o=this.component.xAxis.getAxis(n.xAxisIndex),r=this.component.yAxis.getAxis(n.yAxisIndex);if(!t.type||\"max\"!==t.type&&\"min\"!==t.type&&\"average\"!==t.type)i=[\"string\"!=typeof t.xAxis&&o.getCoordByIndex?o.getCoordByIndex(t.xAxis||0):o.getCoord(t.xAxis||0),\"string\"!=typeof t.yAxis&&r.getCoordByIndex?r.getCoordByIndex(t.yAxis||0):r.getCoord(t.yAxis||0)];else{var s=null!=t.valueIndex?t.valueIndex:1;i=[a[t.type+\"X\"+s],a[t.type+\"Y\"+s],a[t.type+\"Line\"+s],a[t.type+s]]}return i},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)}},o.inherits(t,i),e(\"../chart\").define(\"scatter\",t),t}),i(\"echarts/component/dataRange\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Rectangle\",\"../util/shape/HandlePolygon\",\"../config\",\"zrender/tool/util\",\"zrender/tool/event\",\"zrender/tool/area\",\"zrender/tool/color\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var s=this;s._ondrift=function(e,t){return s.__ondrift(this,e,t)},s._ondragend=function(){return s.__ondragend()},s._dataRangeSelected=function(e){return s.__dataRangeSelected(e)},s._dispatchHoverLink=function(e){return s.__dispatchHoverLink(e)},s._onhoverlink=function(e){return s.__onhoverlink(e);\n\n},this._selectedMap={},this._range={},this.refresh(a),t.bind(r.EVENT.HOVER,this._onhoverlink)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Rectangle\"),o=e(\"../util/shape/HandlePolygon\"),r=e(\"../config\");r.dataRange={zlevel:0,z:4,show:!0,orient:\"vertical\",x:\"left\",y:\"bottom\",backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,splitList:null,calculable:!1,selectedMode:!0,hoverLink:!0,realtime:!0,color:[\"#006edd\",\"#e0ffff\"],textStyle:{color:\"#333\"}};var s=e(\"zrender/tool/util\"),l=e(\"zrender/tool/event\"),h=e(\"zrender/tool/area\"),m=e(\"zrender/tool/color\");return t.prototype={type:r.COMPONENT_TYPE_DATARANGE,_textGap:10,_buildShape:function(){if(this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._isContinuity()?this._buildGradient():this._buildItem(),this.dataRangeOption.show)for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e]);this._syncShapeFromRange()},_buildItem:function(){var e,t,i,o,r=this._valueTextList,s=r.length,l=this.getFont(this.dataRangeOption.textStyle),m=this._itemGroupLocation.x,V=this._itemGroupLocation.y,U=this.dataRangeOption.itemWidth,d=this.dataRangeOption.itemHeight,p=this.dataRangeOption.itemGap,c=h.getTextHeight(\"国\",l);\"vertical\"==this.dataRangeOption.orient&&\"right\"==this.dataRangeOption.x&&(m=this._itemGroupLocation.x+this._itemGroupLocation.width-U);var u=!0;this.dataRangeOption.text&&(u=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(m,V,this.dataRangeOption.text[0]),\"horizontal\"==this.dataRangeOption.orient?m+=h.getTextWidth(this.dataRangeOption.text[0],l)+this._textGap:(V+=c+this._textGap,i.style.y+=c/2+this._textGap,i.style.textBaseline=\"bottom\"),this.shapeList.push(new n(i))));for(var y=0;s>y;y++)e=r[y],o=this.getColorByIndex(y),t=this._getItemShape(m,V,U,d,this._selectedMap[y]?o:\"#ccc\"),t._idx=y,t.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(t.clickable=!0,t.onclick=this._dataRangeSelected),this.shapeList.push(new a(t)),u&&(i={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:m+U+5,y:V,color:this._selectedMap[y]?this.dataRangeOption.textStyle.color:\"#ccc\",text:r[y],textFont:l,textBaseline:\"top\"},highlightStyle:{brushType:\"fill\"}},\"vertical\"==this.dataRangeOption.orient&&\"right\"==this.dataRangeOption.x&&(i.style.x-=U+10,i.style.textAlign=\"right\"),i._idx=y,i.onmousemove=this._dispatchHoverLink,this.dataRangeOption.selectedMode&&(i.clickable=!0,i.onclick=this._dataRangeSelected),this.shapeList.push(new n(i))),\"horizontal\"==this.dataRangeOption.orient?m+=U+(u?5:0)+(u?h.getTextWidth(e,l):0)+p:V+=d+p;!u&&this.dataRangeOption.text[1]&&(\"horizontal\"==this.dataRangeOption.orient?m=m-p+this._textGap:V=V-p+this._textGap,i=this._getTextShape(m,V,this.dataRangeOption.text[1]),\"horizontal\"!=this.dataRangeOption.orient&&(i.style.y-=5,i.style.textBaseline=\"top\"),this.shapeList.push(new n(i)))},_buildGradient:function(){var t,i,o=this.getFont(this.dataRangeOption.textStyle),r=this._itemGroupLocation.x,s=this._itemGroupLocation.y,l=this.dataRangeOption.itemWidth,m=this.dataRangeOption.itemHeight,V=h.getTextHeight(\"国\",o),U=10,d=!0;this.dataRangeOption.text&&(d=!1,this.dataRangeOption.text[0]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[0]),\"horizontal\"==this.dataRangeOption.orient?r+=h.getTextWidth(this.dataRangeOption.text[0],o)+this._textGap:(s+=V+this._textGap,i.style.y+=V/2+this._textGap,i.style.textBaseline=\"bottom\"),this.shapeList.push(new n(i))));for(var p=e(\"zrender/tool/color\"),c=1/(this.dataRangeOption.color.length-1),u=[],y=0,g=this.dataRangeOption.color.length;g>y;y++)u.push([y*c,this.dataRangeOption.color[y]]);\"horizontal\"==this.dataRangeOption.orient?(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l*U,height:m,color:p.getLinearGradient(r,s,r+l*U,s,u)},hoverable:!1},r+=l*U+this._textGap):(t={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:r,y:s,width:l,height:m*U,color:p.getLinearGradient(r,s,r,s+m*U,u)},hoverable:!1},s+=m*U+this._textGap),this.shapeList.push(new a(t)),this._calculableLocation=t.style,this.dataRangeOption.calculable&&(this._buildFiller(),this._bulidMask(),this._bulidHandle()),this._buildIndicator(),!d&&this.dataRangeOption.text[1]&&(i=this._getTextShape(r,s,this.dataRangeOption.text[1]),this.shapeList.push(new n(i)))},_buildIndicator:function(){var e,t,i=this._calculableLocation.x,n=this._calculableLocation.y,a=this._calculableLocation.width,r=this._calculableLocation.height,s=5;\"horizontal\"==this.dataRangeOption.orient?\"bottom\"!=this.dataRangeOption.y?(e=[[i,n+r],[i-s,n+r+s],[i+s,n+r+s]],t=\"bottom\"):(e=[[i,n],[i-s,n-s],[i+s,n-s]],t=\"top\"):\"right\"!=this.dataRangeOption.x?(e=[[i+a,n],[i+a+s,n-s],[i+a+s,n+s]],t=\"right\"):(e=[[i,n],[i-s,n-s],[i-s,n+s]],t=\"left\"),this._indicatorShape={style:{pointList:e,color:\"#fff\",__rect:{x:Math.min(e[0][0],e[1][0]),y:Math.min(e[0][1],e[1][1]),width:s*(\"horizontal\"==this.dataRangeOption.orient?2:1),height:s*(\"horizontal\"==this.dataRangeOption.orient?1:2)}},highlightStyle:{brushType:\"fill\",textPosition:t,textColor:this.dataRangeOption.textStyle.color},hoverable:!1},this._indicatorShape=new o(this._indicatorShape)},_buildFiller:function(){this._fillerShape={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:this._calculableLocation.x,y:this._calculableLocation.y,width:this._calculableLocation.width,height:this._calculableLocation.height,color:\"rgba(255,255,255,0)\"},highlightStyle:{strokeColor:\"rgba(255,255,255,0.5)\",lineWidth:1},draggable:!0,ondrift:this._ondrift,ondragend:this._ondragend,onmousemove:this._dispatchHoverLink,_type:\"filler\"},this._fillerShape=new a(this._fillerShape),this.shapeList.push(this._fillerShape)},_bulidHandle:function(){var e,t,i,n,a,r,s,l,m=this._calculableLocation.x,V=this._calculableLocation.y,U=this._calculableLocation.width,d=this._calculableLocation.height,p=this.getFont(this.dataRangeOption.textStyle),c=h.getTextHeight(\"国\",p),u=Math.max(h.getTextWidth(this._textFormat(this.dataRangeOption.max),p),h.getTextWidth(this._textFormat(this.dataRangeOption.min),p))+2;\"horizontal\"==this.dataRangeOption.orient?\"bottom\"!=this.dataRangeOption.y?(e=[[m,V],[m,V+d+c],[m-c,V+d+c],[m-1,V+d],[m-1,V]],t=m-u/2-c,i=V+d+c/2+2,n={x:m-u-c,y:V+d,width:u+c,height:c},a=[[m+U,V],[m+U,V+d+c],[m+U+c,V+d+c],[m+U+1,V+d],[m+U+1,V]],r=m+U+u/2+c,s=i,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m,V+d],[m,V-c],[m-c,V-c],[m-1,V],[m-1,V+d]],t=m-u/2-c,i=V-c/2-2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m+U,V-c],[m+U+c,V-c],[m+U+1,V],[m+U+1,V+d]],r=m+U+u/2+c,s=i,l={x:m+U,y:V-c,width:u+c,height:c}):(u+=c,\"right\"!=this.dataRangeOption.x?(e=[[m,V],[m+U+c,V],[m+U+c,V-c],[m+U,V-1],[m,V-1]],t=m+U+u/2+c/2,i=V-c/2,n={x:m+U,y:V-c,width:u+c,height:c},a=[[m,V+d],[m+U+c,V+d],[m+U+c,V+c+d],[m+U,V+1+d],[m,V+d+1]],r=t,s=V+d+c/2,l={x:m+U,y:V+d,width:u+c,height:c}):(e=[[m+U,V],[m-c,V],[m-c,V-c],[m,V-1],[m+U,V-1]],t=m-u/2-c/2,i=V-c/2,n={x:m-u-c,y:V-c,width:u+c,height:c},a=[[m+U,V+d],[m-c,V+d],[m-c,V+c+d],[m,V+1+d],[m+U,V+d+1]],r=t,s=V+d+c/2,l={x:m-u-c,y:V+d,width:u+c,height:c})),this._startShape={style:{pointList:e,text:this._textFormat(this.dataRangeOption.max),textX:t,textY:i,textFont:p,color:this.getColor(this.dataRangeOption.max),rect:n,x:e[0][0],y:e[0][1],_x:e[0][0],_y:e[0][1]}},this._startShape.highlightStyle={strokeColor:this._startShape.style.color,lineWidth:1},this._endShape={style:{pointList:a,text:this._textFormat(this.dataRangeOption.min),textX:r,textY:s,textFont:p,color:this.getColor(this.dataRangeOption.min),rect:l,x:a[0][0],y:a[0][1],_x:a[0][0],_y:a[0][1]}},this._endShape.highlightStyle={strokeColor:this._endShape.style.color,lineWidth:1},this._startShape.zlevel=this._endShape.zlevel=this.getZlevelBase(),this._startShape.z=this._endShape.z=this.getZBase()+1,this._startShape.draggable=this._endShape.draggable=!0,this._startShape.ondrift=this._endShape.ondrift=this._ondrift,this._startShape.ondragend=this._endShape.ondragend=this._ondragend,this._startShape.style.textColor=this._endShape.style.textColor=this.dataRangeOption.textStyle.color,this._startShape.style.textAlign=this._endShape.style.textAlign=\"center\",this._startShape.style.textPosition=this._endShape.style.textPosition=\"specific\",this._startShape.style.textBaseline=this._endShape.style.textBaseline=\"middle\",this._startShape.style.width=this._endShape.style.width=0,this._startShape.style.height=this._endShape.style.height=0,this._startShape.style.textPosition=this._endShape.style.textPosition=\"specific\",this._startShape=new o(this._startShape),this._endShape=new o(this._endShape),this.shapeList.push(this._startShape),this.shapeList.push(this._endShape)},_bulidMask:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;this._startMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:e,y:t,width:\"horizontal\"==this.dataRangeOption.orient?0:i,height:\"horizontal\"==this.dataRangeOption.orient?n:0,color:\"#ccc\"},hoverable:!1},this._endMask={zlevel:this.getZlevelBase(),z:this.getZBase()+1,style:{x:\"horizontal\"==this.dataRangeOption.orient?e+i:e,y:\"horizontal\"==this.dataRangeOption.orient?t:t+n,width:\"horizontal\"==this.dataRangeOption.orient?0:i,height:\"horizontal\"==this.dataRangeOption.orient?n:0,color:\"#ccc\"},hoverable:!1},this._startMask=new a(this._startMask),this._endMask=new a(this._endMask),this.shapeList.push(this._startMask),this.shapeList.push(this._endMask)},_buildBackground:function(){var e=this.reformCssArray(this.dataRangeOption.padding);this.shapeList.push(new a({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.dataRangeOption.borderWidth?\"fill\":\"both\",color:this.dataRangeOption.backgroundColor,strokeColor:this.dataRangeOption.borderColor,lineWidth:this.dataRangeOption.borderWidth}}))},_getItemGroupLocation:function(){var e=this._valueTextList,t=e.length,i=this.dataRangeOption.itemGap,n=this.dataRangeOption.itemWidth,a=this.dataRangeOption.itemHeight,o=0,r=0,s=this.getFont(this.dataRangeOption.textStyle),l=h.getTextHeight(\"国\",s),m=10;if(\"horizontal\"==this.dataRangeOption.orient){if(this.dataRangeOption.text||this._isContinuity())o=(this._isContinuity()?n*m+i:t*(n+i))+(this.dataRangeOption.text&&\"undefined\"!=typeof this.dataRangeOption.text[0]?h.getTextWidth(this.dataRangeOption.text[0],s)+this._textGap:0)+(this.dataRangeOption.text&&\"undefined\"!=typeof this.dataRangeOption.text[1]?h.getTextWidth(this.dataRangeOption.text[1],s)+this._textGap:0);else{n+=5;for(var V=0;t>V;V++)o+=n+h.getTextWidth(e[V],s)+i}o-=i,r=Math.max(l,a)}else{var U;if(this.dataRangeOption.text||this._isContinuity())r=(this._isContinuity()?a*m+i:t*(a+i))+(this.dataRangeOption.text&&\"undefined\"!=typeof this.dataRangeOption.text[0]?this._textGap+l:0)+(this.dataRangeOption.text&&\"undefined\"!=typeof this.dataRangeOption.text[1]?this._textGap+l:0),U=Math.max(h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[0]||\"\",s),h.getTextWidth(this.dataRangeOption.text&&this.dataRangeOption.text[1]||\"\",s)),o=Math.max(n,U);else{r=(a+i)*t,n+=5,U=0;for(var V=0;t>V;V++)U=Math.max(U,h.getTextWidth(e[V],s));o=n+U}r-=i}var d,p=this.reformCssArray(this.dataRangeOption.padding),c=this.zr.getWidth();switch(this.dataRangeOption.x){case\"center\":d=Math.floor((c-o)/2);break;case\"left\":d=p[3]+this.dataRangeOption.borderWidth;break;case\"right\":d=c-o-p[1]-this.dataRangeOption.borderWidth;break;default:d=this.parsePercent(this.dataRangeOption.x,c),d=isNaN(d)?0:d}var u,y=this.zr.getHeight();switch(this.dataRangeOption.y){case\"top\":u=p[0]+this.dataRangeOption.borderWidth;break;case\"bottom\":u=y-r-p[2]-this.dataRangeOption.borderWidth;break;case\"center\":u=Math.floor((y-r)/2);break;default:u=this.parsePercent(this.dataRangeOption.y,y),u=isNaN(u)?0:u}if(this.dataRangeOption.calculable){var g=Math.max(h.getTextWidth(this.dataRangeOption.max,s),h.getTextWidth(this.dataRangeOption.min,s))+l;\"horizontal\"==this.dataRangeOption.orient?(g>d&&(d=g),d+o+g>c&&(d-=g)):(l>u&&(u=l),u+r+l>y&&(u-=l))}return{x:d,y:u,width:o,height:r}},_getTextShape:function(e,t,i){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:\"horizontal\"==this.dataRangeOption.orient?e:this._itemGroupLocation.x+this._itemGroupLocation.width/2,y:\"horizontal\"==this.dataRangeOption.orient?this._itemGroupLocation.y+this._itemGroupLocation.height/2:t,color:this.dataRangeOption.textStyle.color,text:i,textFont:this.getFont(this.dataRangeOption.textStyle),textBaseline:\"horizontal\"==this.dataRangeOption.orient?\"middle\":\"top\",textAlign:\"horizontal\"==this.dataRangeOption.orient?\"left\":\"center\"},hoverable:!1}},_getItemShape:function(e,t,i,n,a){return{zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:e,y:t+1,width:i,height:n-2,color:a},highlightStyle:{strokeColor:a,lineWidth:1}}},__ondrift:function(e,t,i){var n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;return\"horizontal\"==this.dataRangeOption.orient?e.style.x+t<=n?e.style.x=n:e.style.x+t+e.style.width>=n+o?e.style.x=n+o-e.style.width:e.style.x+=t:e.style.y+i<=a?e.style.y=a:e.style.y+i+e.style.height>=a+r?e.style.y=a+r-e.style.height:e.style.y+=i,\"filler\"==e._type?this._syncHandleShape():this._syncFillerShape(e),this.dataRangeOption.realtime&&this._dispatchDataRange(),!0},__ondragend:function(){this.isDragend=!0},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,this.dataRangeOption.realtime||this._dispatchDataRange(),t.needRefresh=!1,this.isDragend=!1)},_syncShapeFromRange:function(){var e=this.dataRangeOption.range||{},t=e.start,i=e.end;if(t>i&&(t=[i,i=t][0]),this._range.end=null!=t?t:null!=this._range.end?this._range.end:0,this._range.start=null!=i?i:null!=this._range.start?this._range.start:100,100!=this._range.start||0!==this._range.end){if(\"horizontal\"==this.dataRangeOption.orient){var n=this._fillerShape.style.width;this._fillerShape.style.x+=n*(100-this._range.start)/100,this._fillerShape.style.width=n*(this._range.start-this._range.end)/100}else{var a=this._fillerShape.style.height;this._fillerShape.style.y+=a*(100-this._range.start)/100,this._fillerShape.style.height=a*(this._range.start-this._range.end)/100}this.zr.modShape(this._fillerShape.id),this._syncHandleShape()}},_syncHandleShape:function(){var e=this._calculableLocation.x,t=this._calculableLocation.y,i=this._calculableLocation.width,n=this._calculableLocation.height;\"horizontal\"==this.dataRangeOption.orient?(this._startShape.style.x=this._fillerShape.style.x,this._startMask.style.width=this._startShape.style.x-e,this._endShape.style.x=this._fillerShape.style.x+this._fillerShape.style.width,this._endMask.style.x=this._endShape.style.x,this._endMask.style.width=e+i-this._endShape.style.x,this._range.start=Math.ceil(100-(this._startShape.style.x-e)/i*100),this._range.end=Math.floor(100-(this._endShape.style.x-e)/i*100)):(this._startShape.style.y=this._fillerShape.style.y,this._startMask.style.height=this._startShape.style.y-t,this._endShape.style.y=this._fillerShape.style.y+this._fillerShape.style.height,this._endMask.style.y=this._endShape.style.y,this._endMask.style.height=t+n-this._endShape.style.y,this._range.start=Math.ceil(100-(this._startShape.style.y-t)/n*100),this._range.end=Math.floor(100-(this._endShape.style.y-t)/n*100)),this._syncShape()},_syncFillerShape:function(e){var t,i,n=this._calculableLocation.x,a=this._calculableLocation.y,o=this._calculableLocation.width,r=this._calculableLocation.height;\"horizontal\"==this.dataRangeOption.orient?(t=this._startShape.style.x,i=this._endShape.style.x,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.x=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.x=t),this._fillerShape.style.x=t,this._fillerShape.style.width=i-t,this._startMask.style.width=t-n,this._endMask.style.x=i,this._endMask.style.width=n+o-i,this._range.start=Math.ceil(100-(t-n)/o*100),this._range.end=Math.floor(100-(i-n)/o*100)):(t=this._startShape.style.y,i=this._endShape.style.y,e.id==this._startShape.id&&t>=i?(i=t,this._endShape.style.y=t):e.id==this._endShape.id&&t>=i&&(t=i,this._startShape.style.y=t),this._fillerShape.style.y=t,this._fillerShape.style.height=i-t,this._startMask.style.height=t-a,this._endMask.style.y=i,this._endMask.style.height=a+r-i,this._range.start=Math.ceil(100-(t-a)/r*100),this._range.end=Math.floor(100-(i-a)/r*100)),this._syncShape()},_syncShape:function(){this._startShape.position=[this._startShape.style.x-this._startShape.style._x,this._startShape.style.y-this._startShape.style._y],this._startShape.style.text=this._textFormat(this._gap*this._range.start+this.dataRangeOption.min),this._startShape.style.color=this._startShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.start+this.dataRangeOption.min),this._endShape.position=[this._endShape.style.x-this._endShape.style._x,this._endShape.style.y-this._endShape.style._y],this._endShape.style.text=this._textFormat(this._gap*this._range.end+this.dataRangeOption.min),this._endShape.style.color=this._endShape.highlightStyle.strokeColor=this.getColor(this._gap*this._range.end+this.dataRangeOption.min),this.zr.modShape(this._startShape.id),this.zr.modShape(this._endShape.id),this.zr.modShape(this._startMask.id),this.zr.modShape(this._endMask.id),this.zr.modShape(this._fillerShape.id),this.zr.refreshNextFrame()},_dispatchDataRange:function(){this.messageCenter.dispatch(r.EVENT.DATA_RANGE,null,{range:{start:this._range.end,end:this._range.start}},this.myChart)},__dataRangeSelected:function(e){if(\"single\"===this.dataRangeOption.selectedMode)for(var t in this._selectedMap)this._selectedMap[t]=!1;var i=e.target._idx;this._selectedMap[i]=!this._selectedMap[i];var n,a;this._useCustomizedSplit()?(n=this._splitList[i].max,a=this._splitList[i].min):(n=(this._colorList.length-i)*this._gap+this.dataRangeOption.min,a=n-this._gap),this.messageCenter.dispatch(r.EVENT.DATA_RANGE_SELECTED,e.event,{selected:this._selectedMap,target:i,valueMax:n,valueMin:a},this.myChart),this.messageCenter.dispatch(r.EVENT.REFRESH,null,null,this.myChart)},__dispatchHoverLink:function(e){var t,i;if(this.dataRangeOption.calculable){var n,a=this.dataRangeOption.max-this.dataRangeOption.min;n=\"horizontal\"==this.dataRangeOption.orient?(1-(l.getX(e.event)-this._calculableLocation.x)/this._calculableLocation.width)*a:(1-(l.getY(e.event)-this._calculableLocation.y)/this._calculableLocation.height)*a,t=n-.05*a,i=n+.05*a}else if(this._useCustomizedSplit()){var o=e.target._idx;i=this._splitList[o].max,t=this._splitList[o].min}else{var o=e.target._idx;i=(this._colorList.length-o)*this._gap+this.dataRangeOption.min,t=i-this._gap}this.messageCenter.dispatch(r.EVENT.DATA_RANGE_HOVERLINK,e.event,{valueMin:t,valueMax:i},this.myChart)},__onhoverlink:function(e){if(this.dataRangeOption.show&&this.dataRangeOption.hoverLink&&this._indicatorShape&&e&&null!=e.seriesIndex&&null!=e.dataIndex){var t=e.value;if(\"\"===t||isNaN(t))return;t<this.dataRangeOption.min?t=this.dataRangeOption.min:t>this.dataRangeOption.max&&(t=this.dataRangeOption.max),this._indicatorShape.position=\"horizontal\"==this.dataRangeOption.orient?[(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.width,0]:[0,(this.dataRangeOption.max-t)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._calculableLocation.height],this._indicatorShape.style.text=this._textFormat(e.value),this._indicatorShape.style.color=this.getColor(t),this.zr.addHoverShape(this._indicatorShape)}},_textFormat:function(e,t){var i=this.dataRangeOption;if(e!==-Number.MAX_VALUE&&(e=(+e).toFixed(i.precision)),null!=t&&t!==Number.MAX_VALUE&&(t=(+t).toFixed(i.precision)),i.formatter){if(\"string\"==typeof i.formatter)return i.formatter.replace(\"{value}\",e===-Number.MAX_VALUE?\"min\":e).replace(\"{value2}\",t===Number.MAX_VALUE?\"max\":t);if(\"function\"==typeof i.formatter)return i.formatter.call(this.myChart,e,t)}return null==t?e:e===-Number.MAX_VALUE?\"< \"+t:t===Number.MAX_VALUE?\"> \"+e:e+\" - \"+t},_isContinuity:function(){var e=this.dataRangeOption;return!(e.splitList?e.splitList.length>0:e.splitNumber>0)||e.calculable},_useCustomizedSplit:function(){var e=this.dataRangeOption;return e.splitList&&e.splitList.length>0},_buildColorList:function(e){if(this._colorList=m.getGradientColors(this.dataRangeOption.color,Math.max((e-this.dataRangeOption.color.length)/(this.dataRangeOption.color.length-1),0)+1),this._colorList.length>e){for(var t=this._colorList.length,i=[this._colorList[0]],n=t/(e-1),a=1;e-1>a;a++)i.push(this._colorList[Math.floor(a*n)]);i.push(this._colorList[t-1]),this._colorList=i}if(this._useCustomizedSplit())for(var o=this._splitList,a=0,t=o.length;t>a;a++)o[a].color&&(this._colorList[a]=o[a].color)},_buildGap:function(e){if(!this._useCustomizedSplit()){var t=this.dataRangeOption.precision;for(this._gap=(this.dataRangeOption.max-this.dataRangeOption.min)/e;this._gap.toFixed(t)-0!=this._gap&&5>t;)t++;this.dataRangeOption.precision=t,this._gap=((this.dataRangeOption.max-this.dataRangeOption.min)/e).toFixed(t)-0}},_buildDataList:function(e){for(var t=this._valueTextList=[],i=this.dataRangeOption,n=this._useCustomizedSplit(),a=0;e>a;a++){this._selectedMap[a]=!0;var o=\"\";if(n){var r=this._splitList[e-1-a];o=null!=r.label?r.label:null!=r.single?this._textFormat(r.single):this._textFormat(r.min,r.max)}else o=this._textFormat(a*this._gap+i.min,(a+1)*this._gap+i.min);t.unshift(o)}},_buildSplitList:function(){if(this._useCustomizedSplit())for(var e=this.dataRangeOption.splitList,t=this._splitList=[],i=0,n=e.length;n>i;i++){var a=e[i];if(!a||null==a.start&&null==a.end)throw new Error(\"Empty item exists in splitList!\");var o={label:a.label,color:a.color};o.min=a.start,o.max=a.end,o.min>o.max&&(o.min=[o.max,o.max=o.min][0]),o.min===o.max&&(o.single=o.max),null==o.min&&(o.min=-Number.MAX_VALUE),null==o.max&&(o.max=Number.MAX_VALUE),t.push(o)}},refresh:function(e){if(e){this.option=e,this.option.dataRange=this.reformOption(this.option.dataRange);var t=this.dataRangeOption=this.option.dataRange;if(!this._useCustomizedSplit()&&(null==t.min||null==t.max))throw new Error(\"option.dataRange.min or option.dataRange.max has not been defined.\");this.myChart.canvasSupported||(t.realtime=!1);var i=this._isContinuity()?100:this._useCustomizedSplit()?t.splitList.length:t.splitNumber;this._buildSplitList(),this._buildColorList(i),this._buildGap(i),this._buildDataList(i)}this.clear(),this._buildShape()},getColor:function(e){if(isNaN(e))return null;var t;if(this._useCustomizedSplit()){for(var i=this._splitList,n=0,a=i.length;a>n;n++)if(i[n].min<=e&&i[n].max>=e){t=n;break}}else{if(this.dataRangeOption.min==this.dataRangeOption.max)return this._colorList[0];if(e<this.dataRangeOption.min?e=this.dataRangeOption.min:e>this.dataRangeOption.max&&(e=this.dataRangeOption.max),this.dataRangeOption.calculable&&(e-(this._gap*this._range.start+this.dataRangeOption.min)>5e-5||e-(this._gap*this._range.end+this.dataRangeOption.min)<-5e-5))return null;t=this._colorList.length-Math.ceil((e-this.dataRangeOption.min)/(this.dataRangeOption.max-this.dataRangeOption.min)*this._colorList.length),t==this._colorList.length&&t--}return this._selectedMap[t]?this._colorList[t]:null},getColorByIndex:function(e){return e>=this._colorList.length?e=this._colorList.length-1:0>e&&(e=0),this._colorList[e]},onbeforDispose:function(){this.messageCenter.unbind(r.EVENT.HOVER,this._onhoverlink)}},s.inherits(t,i),e(\"../component\").define(\"dataRange\",t),t}),i(\"echarts/util/shape/HandlePolygon\",[\"require\",\"zrender/shape/Base\",\"zrender/shape/Polygon\",\"zrender/tool/util\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/shape/Polygon\"),a=e(\"zrender/tool/util\");return t.prototype={type:\"handle-polygon\",buildPath:function(e,t){n.prototype.buildPath(e,t)},isCover:function(e,t){var i=this.transformCoordToLocal(e,t);e=i[0],t=i[1];var n=this.style.rect;return e>=n.x&&e<=n.x+n.width&&t>=n.y&&t<=n.y+n.height?!0:!1}},a.inherits(t,i),t}),i(\"echarts/chart/k\",[\"require\",\"./base\",\"../util/shape/Candle\",\"../component/axis\",\"../component/grid\",\"../component/dataZoom\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"../util/shape/Candle\");e(\"../component/axis\"),e(\"../component/grid\"),e(\"../component/dataZoom\");var a=e(\"../config\");a.k={zlevel:0,z:2,clickable:!0,hoverable:!0,legendHoverLink:!1,xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:\"#fff\",color0:\"#00aa11\",lineStyle:{width:1,color:\"#ff3200\",color0:\"#00aa11\"},label:{show:!1}},emphasis:{label:{show:!1}}}};var o=e(\"../util/ecData\"),r=e(\"zrender/tool/util\");return t.prototype={type:a.CHART_TYPE_K,_buildShape:function(){var e=this.series;this.selectedMap={};for(var t,i={top:[],bottom:[]},n=0,o=e.length;o>n;n++)e[n].type===a.CHART_TYPE_K&&(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,t=this.component.xAxis.getAxis(e[n].xAxisIndex),t.type===a.COMPONENT_TYPE_AXIS_CATEGORY&&i[t.getPosition()].push(n));for(var r in i)i[r].length>0&&this._buildSinglePosition(r,i[r]);this.addShapeList()},_buildSinglePosition:function(e,t){var i=this._mapData(t),n=i.locationMap,a=i.maxDataLength;if(0!==a&&0!==n.length){this._buildHorizontal(t,a,n);for(var o=0,r=t.length;r>o;o++)this.buildMark(t[o])}},_mapData:function(e){for(var t,i,n=this.series,a=this.component.legend,o=[],r=0,s=0,l=e.length;l>s;s++)t=n[e[s]],i=t.name,this.selectedMap[i]=a?a.isSelected(i):!0,this.selectedMap[i]&&o.push(e[s]),r=Math.max(r,t.data.length);return{locationMap:o,maxDataLength:r}},_buildHorizontal:function(e,t,i){for(var n,a,o,r,s,l,h,m,V,U,d=this.series,p={},c=0,u=i.length;u>c;c++){n=i[c],a=d[n],o=a.xAxisIndex||0,r=this.component.xAxis.getAxis(o),h=a.barWidth||Math.floor(r.getGap()/2),U=a.barMaxWidth,U&&h>U&&(h=U),s=a.yAxisIndex||0,l=this.component.yAxis.getAxis(s),p[n]=[];for(var y=0,g=t;g>y&&null!=r.getNameByIndex(y);y++)m=a.data[y],V=this.getDataFromOption(m,\"-\"),\"-\"!==V&&4==V.length&&p[n].push([r.getCoordByIndex(y),h,l.getCoord(V[0]),l.getCoord(V[1]),l.getCoord(V[2]),l.getCoord(V[3]),y,r.getNameByIndex(y)])}this._buildKLine(e,p)},_buildKLine:function(e,t){for(var i,n,o,r,s,l,h,m,V,U,d,p,c,u,y,g,b,f=this.series,k=0,x=e.length;x>k;k++)if(b=e[k],d=f[b],u=t[b],this._isLarge(u)&&(u=this._getLargePointList(u)),d.type===a.CHART_TYPE_K&&null!=u){p=d,i=this.query(p,\"itemStyle.normal.lineStyle.width\"),n=this.query(p,\"itemStyle.normal.lineStyle.color\"),o=this.query(p,\"itemStyle.normal.lineStyle.color0\"),r=this.query(p,\"itemStyle.normal.color\"),s=this.query(p,\"itemStyle.normal.color0\"),l=this.query(p,\"itemStyle.emphasis.lineStyle.width\"),h=this.query(p,\"itemStyle.emphasis.lineStyle.color\"),m=this.query(p,\"itemStyle.emphasis.lineStyle.color0\"),V=this.query(p,\"itemStyle.emphasis.color\"),U=this.query(p,\"itemStyle.emphasis.color0\");for(var _=0,L=u.length;L>_;_++)y=u[_],c=d.data[y[6]],p=c,g=y[3]<y[2],this.shapeList.push(this._getCandle(b,y[6],y[7],y[0],y[1],y[2],y[3],y[4],y[5],g?this.query(p,\"itemStyle.normal.color\")||r:this.query(p,\"itemStyle.normal.color0\")||s,this.query(p,\"itemStyle.normal.lineStyle.width\")||i,g?this.query(p,\"itemStyle.normal.lineStyle.color\")||n:this.query(p,\"itemStyle.normal.lineStyle.color0\")||o,g?this.query(p,\"itemStyle.emphasis.color\")||V||r:this.query(p,\"itemStyle.emphasis.color0\")||U||s,this.query(p,\"itemStyle.emphasis.lineStyle.width\")||l||i,g?this.query(p,\"itemStyle.emphasis.lineStyle.color\")||h||n:this.query(p,\"itemStyle.emphasis.lineStyle.color0\")||m||o))}},_isLarge:function(e){return e[0][1]<.5},_getLargePointList:function(e){for(var t=this.component.grid.getWidth(),i=e.length,n=[],a=0;t>a;a++)n[a]=e[Math.floor(i/t*a)];return n},_getCandle:function(e,t,i,a,r,s,l,h,m,V,U,d,p,c,u){var y=this.series,g=y[e],b=g.data[t],f=[b,g],k={zlevel:g.zlevel,z:g.z,clickable:this.deepQuery(f,\"clickable\"),hoverable:this.deepQuery(f,\"hoverable\"),style:{x:a,y:[s,l,h,m],width:r,color:V,strokeColor:d,lineWidth:U,brushType:\"both\"},highlightStyle:{color:p,strokeColor:u,lineWidth:c},_seriesIndex:e};return k=this.addLabel(k,g,b,i),o.pack(k,g,e,b,t,i),k=new n(k)},getMarkCoord:function(e,t){var i=this.series[e],n=this.component.xAxis.getAxis(i.xAxisIndex),a=this.component.yAxis.getAxis(i.yAxisIndex);return[\"string\"!=typeof t.xAxis&&n.getCoordByIndex?n.getCoordByIndex(t.xAxis||0):n.getCoord(t.xAxis||0),\"string\"!=typeof t.yAxis&&a.getCoordByIndex?a.getCoordByIndex(t.yAxis||0):a.getCoord(t.yAxis||0)]},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){p--,0===p&&t&&t()}for(var n=this.series,a={},r=0,s=e.length;s>r;r++)a[e[r][0]]=e[r];for(var l,h,m,V,U,d,p=0,r=0,s=this.shapeList.length;s>r;r++)if(U=this.shapeList[r]._seriesIndex,a[U]&&!a[U][3]&&\"candle\"===this.shapeList[r].type){if(d=o.get(this.shapeList[r],\"dataIndex\"),V=n[U],a[U][2]&&d===V.data.length-1){this.zr.delShape(this.shapeList[r].id);continue}if(!a[U][2]&&0===d){this.zr.delShape(this.shapeList[r].id);continue}h=this.component.xAxis.getAxis(V.xAxisIndex||0).getGap(),l=a[U][2]?h:-h,m=0,p++,this.zr.animate(this.shapeList[r].id,\"\").when(this.query(this.option,\"animationDurationUpdate\"),{position:[l,m]}).done(i).start()}p||t&&t()}},r.inherits(t,i),e(\"../chart\").define(\"k\",t),t}),i(\"echarts/chart/pie\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Ring\",\"zrender/shape/Circle\",\"zrender/shape/Sector\",\"zrender/shape/Polyline\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/math\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r.shapeHandler.onmouseover=function(e){var t=e.target,i=h.get(t,\"seriesIndex\"),n=h.get(t,\"dataIndex\"),a=h.get(t,\"special\"),o=[t.style.x,t.style.y],s=t.style.startAngle,l=t.style.endAngle,m=((l+s)/2+360)%360,V=t.highlightStyle.color,U=r.getLabel(i,n,a,o,m,V,!0);U&&r.zr.addHoverShape(U);var d=r.getLabelLine(i,n,o,t.style.r0,t.style.r,m,V,!0);d&&r.zr.addHoverShape(d)},this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Ring\"),o=e(\"zrender/shape/Circle\"),r=e(\"zrender/shape/Sector\"),s=e(\"zrender/shape/Polyline\"),l=e(\"../config\");l.pie={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,center:[\"50%\",\"50%\"],radius:[0,\"75%\"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,label:{show:!0,position:\"outer\"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:\"solid\"}}},emphasis:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:\"solid\"}}}}};var h=e(\"../util/ecData\"),m=e(\"zrender/tool/util\"),V=e(\"zrender/tool/math\"),U=e(\"zrender/tool/color\");return t.prototype={type:l.CHART_TYPE_PIE,_buildShape:function(){var e=this.series,t=this.component.legend;this.selectedMap={},this._selected={};var i,n,r;this._selectedMode=!1;for(var s,m=0,V=e.length;V>m;m++)if(e[m].type===l.CHART_TYPE_PIE){if(e[m]=this.reformOption(e[m]),this.legendHoverLink=e[m].legendHoverLink||this.legendHoverLink,s=e[m].name||\"\",this.selectedMap[s]=t?t.isSelected(s):!0,!this.selectedMap[s])continue;i=this.parseCenter(this.zr,e[m].center),n=this.parseRadius(this.zr,e[m].radius),this._selectedMode=this._selectedMode||e[m].selectedMode,this._selected[m]=[],this.deepQuery([e[m],this.option],\"calculable\")&&(r={zlevel:e[m].zlevel,z:e[m].z,hoverable:!1,style:{x:i[0],y:i[1],r0:n[0]<=10?0:n[0]-10,r:n[1]+10,brushType:\"stroke\",lineWidth:1,strokeColor:e[m].calculableHolderColor||this.ecTheme.calculableHolderColor||l.calculableHolderColor}},h.pack(r,e[m],m,void 0,-1),this.setCalculable(r),r=n[0]<=10?new o(r):new a(r),this.shapeList.push(r)),this._buildSinglePie(m),this.buildMark(m)}this.addShapeList()},_buildSinglePie:function(e){for(var t,i=this.series,n=i[e],a=n.data,o=this.component.legend,r=0,s=0,l=0,h=Number.NEGATIVE_INFINITY,m=[],V=0,U=a.length;U>V;V++)t=a[V].name,\nthis.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t]&&!isNaN(a[V].value)&&(0!==+a[V].value?r++:s++,l+=+a[V].value,h=Math.max(h,+a[V].value));if(0!==l){for(var d,p,c,u,y,g,b=100,f=n.clockWise,k=(n.startAngle.toFixed(2)-0+360)%360,x=n.minAngle||.01,_=360-x*r-.01*s,L=n.roseType,V=0,U=a.length;U>V;V++)if(t=a[V].name,this.selectedMap[t]&&!isNaN(a[V].value)){if(p=o?o.getColor(t):this.zr.getColor(V),b=a[V].value/l,d=\"area\"!=L?f?k-b*_-(0!==b?x:.01):b*_+k+(0!==b?x:.01):f?k-360/U:360/U+k,d=d.toFixed(2)-0,b=(100*b).toFixed(2),c=this.parseCenter(this.zr,n.center),u=this.parseRadius(this.zr,n.radius),y=+u[0],g=+u[1],\"radius\"===L?g=a[V].value/h*(g-y)*.8+.2*(g-y)+y:\"area\"===L&&(g=Math.sqrt(a[V].value/h)*(g-y)+y),f){var W;W=k,k=d,d=W}this._buildItem(m,e,V,b,a[V].selected,c,y,g,k,d,p),f||(k=d)}this._autoLabelLayout(m,c,g);for(var V=0,U=m.length;U>V;V++)this.shapeList.push(m[V]);m=null}},_buildItem:function(e,t,i,n,a,o,r,s,l,m,V){var U=this.series,d=((m+l)/2+360)%360,p=this.getSector(t,i,n,a,o,r,s,l,m,V);h.pack(p,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(p);var c=this.getLabel(t,i,n,o,d,V,!1),u=this.getLabelLine(t,i,o,r,s,d,V,!1);u&&(h.pack(u,U[t],t,U[t].data[i],i,U[t].data[i].name,n),e.push(u)),c&&(h.pack(c,U[t],t,U[t].data[i],i,U[t].data[i].name,n),c._labelLine=u,e.push(c))},getSector:function(e,t,i,n,a,o,s,l,h,m){var d=this.series,p=d[e],c=p.data[t],u=[c,p],y=this.deepMerge(u,\"itemStyle.normal\")||{},g=this.deepMerge(u,\"itemStyle.emphasis\")||{},b=this.getItemStyleColor(y.color,e,t,c)||m,f=this.getItemStyleColor(g.color,e,t,c)||(\"string\"==typeof b?U.lift(b,-.2):b),k={zlevel:p.zlevel,z:p.z,clickable:this.deepQuery(u,\"clickable\"),style:{x:a[0],y:a[1],r0:o,r:s,startAngle:l,endAngle:h,brushType:\"both\",color:b,lineWidth:y.borderWidth,strokeColor:y.borderColor,lineJoin:\"round\"},highlightStyle:{color:f,lineWidth:g.borderWidth,strokeColor:g.borderColor,lineJoin:\"round\"},_seriesIndex:e,_dataIndex:t};if(n){var x=((k.style.startAngle+k.style.endAngle)/2).toFixed(2)-0;k.style._hasSelected=!0,k.style._x=k.style.x,k.style._y=k.style.y;var _=this.query(p,\"selectedOffset\");k.style.x+=V.cos(x,!0)*_,k.style.y-=V.sin(x,!0)*_,this._selected[e][t]=!0}else this._selected[e][t]=!1;return this._selectedMode&&(k.onclick=this.shapeHandler.onclick),this.deepQuery([c,p,this.option],\"calculable\")&&(this.setCalculable(k),k.draggable=!0),(this._needLabel(p,c,!0)||this._needLabelLine(p,c,!0))&&(k.onmouseover=this.shapeHandler.onmouseover),k=new r(k)},getLabel:function(e,t,i,a,o,r,s){var l=this.series,h=l[e],U=h.data[t];if(this._needLabel(h,U,s)){var d,p,c,u=s?\"emphasis\":\"normal\",y=m.merge(m.clone(U.itemStyle)||{},h.itemStyle),g=y[u].label,b=g.textStyle||{},f=a[0],k=a[1],x=this.parseRadius(this.zr,h.radius),_=\"middle\";g.position=g.position||y.normal.label.position,\"center\"===g.position?(d=f,p=k,c=\"center\"):\"inner\"===g.position||\"inside\"===g.position?(x=(x[0]+x[1])*(g.distance||.5),d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),r=\"#fff\",c=\"center\"):(x=x[1]- -y[u].labelLine.length,d=Math.round(f+x*V.cos(o,!0)),p=Math.round(k-x*V.sin(o,!0)),c=o>=90&&270>=o?\"right\":\"left\"),\"center\"!=g.position&&\"inner\"!=g.position&&\"inside\"!=g.position&&(d+=\"left\"===c?20:-20),U.__labelX=d-(\"left\"===c?5:-5),U.__labelY=p;var L=new n({zlevel:h.zlevel,z:h.z+1,hoverable:!1,style:{x:d,y:p,color:b.color||r,text:this.getLabelText(e,t,i,u),textAlign:b.align||c,textBaseline:b.baseline||_,textFont:this.getFont(b)},highlightStyle:{brushType:\"fill\"}});return L._radius=x,L._labelPosition=g.position||\"outer\",L._rect=L.getRect(L.style),L._seriesIndex=e,L._dataIndex=t,L}},getLabelText:function(e,t,i,n){var a=this.series,o=a[e],r=o.data[t],s=this.deepQuery([r,o],\"itemStyle.\"+n+\".label.formatter\");return s?\"function\"==typeof s?s.call(this.myChart,{seriesIndex:e,seriesName:o.name||\"\",series:o,dataIndex:t,data:r,name:r.name,value:r.value,percent:i}):\"string\"==typeof s?(s=s.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\").replace(\"{d}\",\"{d0}\"),s=s.replace(\"{a0}\",o.name).replace(\"{b0}\",r.name).replace(\"{c0}\",r.value).replace(\"{d0}\",i)):void 0:r.name},getLabelLine:function(e,t,i,n,a,o,r,l){var h=this.series,U=h[e],d=U.data[t];if(this._needLabelLine(U,d,l)){var p=l?\"emphasis\":\"normal\",c=m.merge(m.clone(d.itemStyle)||{},U.itemStyle),u=c[p].labelLine,y=u.lineStyle||{},g=i[0],b=i[1],f=a,k=this.parseRadius(this.zr,U.radius)[1]- -u.length,x=V.cos(o,!0),_=V.sin(o,!0);return new s({zlevel:U.zlevel,z:U.z+1,hoverable:!1,style:{pointList:[[g+f*x,b-f*_],[g+k*x,b-k*_],[d.__labelX,d.__labelY]],strokeColor:y.color||r,lineType:y.type,lineWidth:y.width},_seriesIndex:e,_dataIndex:t})}},_needLabel:function(e,t,i){return this.deepQuery([t,e],\"itemStyle.\"+(i?\"emphasis\":\"normal\")+\".label.show\")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],\"itemStyle.\"+(i?\"emphasis\":\"normal\")+\".labelLine.show\")},_autoLabelLayout:function(e,t,i){for(var n=[],a=[],o=0,r=e.length;r>o;o++)(\"outer\"===e[o]._labelPosition||\"outside\"===e[o]._labelPosition)&&(e[o]._rect._y=e[o]._rect.y,e[o]._rect.x<t[0]?n.push(e[o]):a.push(e[o]));this._layoutCalculate(n,t,i,-1),this._layoutCalculate(a,t,i,1)},_layoutCalculate:function(e,t,i,n){function a(t,i,n){for(var a=t;i>a;a++)if(e[a]._rect.y+=n,e[a].style.y+=n,e[a]._labelLine&&(e[a]._labelLine.style.pointList[1][1]+=n,e[a]._labelLine.style.pointList[2][1]+=n),a>t&&i>a+1&&e[a+1]._rect.y>e[a]._rect.y+e[a]._rect.height)return void o(a,n/2);o(i-1,n/2)}function o(t,i){for(var n=t;n>=0&&(e[n]._rect.y-=i,e[n].style.y-=i,e[n]._labelLine&&(e[n]._labelLine.style.pointList[1][1]-=i,e[n]._labelLine.style.pointList[2][1]-=i),!(n>0&&e[n]._rect.y>e[n-1]._rect.y+e[n-1]._rect.height));n--);}function r(e,t,i,n,a){for(var o,r,s,l=i[0],h=i[1],m=a>0?t?Number.MAX_VALUE:0:t?Number.MAX_VALUE:0,V=0,U=e.length;U>V;V++)r=Math.abs(e[V]._rect.y-h),s=e[V]._radius-n,o=n+s>r?Math.sqrt((n+s+20)*(n+s+20)-Math.pow(e[V]._rect.y-h,2)):Math.abs(e[V]._rect.x+(a>0?0:e[V]._rect.width)-l),t&&o>=m&&(o=m-10),!t&&m>=o&&(o=m+10),e[V]._rect.x=e[V].style.x=l+o*a,e[V]._labelLine&&(e[V]._labelLine.style.pointList[2][0]=l+(o-5)*a,e[V]._labelLine.style.pointList[1][0]=l+(o-20)*a),m=o}e.sort(function(e,t){return e._rect.y-t._rect.y});for(var s,l=0,h=e.length,m=[],V=[],U=0;h>U;U++)s=e[U]._rect.y-l,0>s&&a(U,h,-s,n),l=e[U]._rect.y+e[U]._rect.height;this.zr.getHeight()-l<0&&o(h-1,l-this.zr.getHeight());for(var U=0;h>U;U++)e[U]._rect.y>=t[1]?V.push(e[U]):m.push(e[U]);r(V,!0,t,i,n),r(m,!1,t,i,n)},reformOption:function(e){var t=m.merge;return e=t(t(e||{},m.clone(this.ecTheme.pie||{})),m.clone(l.pie)),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),e.itemStyle.emphasis.label.textStyle=this.getTextStyle(e.itemStyle.emphasis.label.textStyle),this.z=e.z,this.zlevel=e.zlevel,e},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()},addDataAnimation:function(e,t){function i(){s--,0===s&&t&&t()}for(var n=this.series,a={},o=0,r=e.length;r>o;o++)a[e[o][0]]=e[o];var s=0,h={},m={},V={},U=this.shapeList;this.shapeList=[];for(var d,p,c,u={},o=0,r=e.length;r>o;o++)d=e[o][0],p=e[o][2],c=e[o][3],n[d]&&n[d].type===l.CHART_TYPE_PIE&&(p?(c||(h[d+\"_\"+n[d].data.length]=\"delete\"),u[d]=1):c?u[d]=0:(h[d+\"_-1\"]=\"delete\",u[d]=-1),this._buildSinglePie(d));for(var y,g,o=0,r=this.shapeList.length;r>o;o++)switch(d=this.shapeList[o]._seriesIndex,y=this.shapeList[o]._dataIndex,g=d+\"_\"+y,this.shapeList[o].type){case\"sector\":h[g]=this.shapeList[o];break;case\"text\":m[g]=this.shapeList[o];break;case\"polyline\":V[g]=this.shapeList[o]}this.shapeList=[];for(var b,o=0,r=U.length;r>o;o++)if(d=U[o]._seriesIndex,a[d]){if(y=U[o]._dataIndex+u[d],g=d+\"_\"+y,b=h[g],!b)continue;if(\"sector\"===U[o].type)\"delete\"!=b?(s++,this.zr.animate(U[o].id,\"style\").when(400,{startAngle:b.style.startAngle,endAngle:b.style.endAngle}).done(i).start()):(s++,this.zr.animate(U[o].id,\"style\").when(400,u[d]<0?{startAngle:U[o].style.startAngle}:{endAngle:U[o].style.endAngle}).done(i).start());else if(\"text\"===U[o].type||\"polyline\"===U[o].type)if(\"delete\"===b)this.zr.delShape(U[o].id);else switch(U[o].type){case\"text\":s++,b=m[g],this.zr.animate(U[o].id,\"style\").when(400,{x:b.style.x,y:b.style.y}).done(i).start();break;case\"polyline\":s++,b=V[g],this.zr.animate(U[o].id,\"style\").when(400,{pointList:b.style.pointList}).done(i).start()}}this.shapeList=U,s||t&&t()},onclick:function(e){var t=this.series;if(this.isClick&&e.target){this.isClick=!1;for(var i,n=e.target,a=n.style,o=h.get(n,\"seriesIndex\"),r=h.get(n,\"dataIndex\"),s=0,m=this.shapeList.length;m>s;s++)if(this.shapeList[s].id===n.id){if(o=h.get(n,\"seriesIndex\"),r=h.get(n,\"dataIndex\"),a._hasSelected)n.style.x=n.style._x,n.style.y=n.style._y,n.style._hasSelected=!1,this._selected[o][r]=!1;else{var U=((a.startAngle+a.endAngle)/2).toFixed(2)-0;n.style._hasSelected=!0,this._selected[o][r]=!0,n.style._x=n.style.x,n.style._y=n.style.y,i=this.query(t[o],\"selectedOffset\"),n.style.x+=V.cos(U,!0)*i,n.style.y-=V.sin(U,!0)*i}this.zr.modShape(n.id)}else this.shapeList[s].style._hasSelected&&\"single\"===this._selectedMode&&(o=h.get(this.shapeList[s],\"seriesIndex\"),r=h.get(this.shapeList[s],\"dataIndex\"),this.shapeList[s].style.x=this.shapeList[s].style._x,this.shapeList[s].style.y=this.shapeList[s].style._y,this.shapeList[s].style._hasSelected=!1,this._selected[o][r]=!1,this.zr.modShape(this.shapeList[s].id));this.messageCenter.dispatch(l.EVENT.PIE_SELECTED,e.event,{selected:this._selected,target:h.get(n,\"name\")},this.myChart),this.zr.refreshNextFrame()}}},m.inherits(t,i),e(\"../chart\").define(\"pie\",t),t}),i(\"echarts/chart/radar\",[\"require\",\"./base\",\"zrender/shape/Polygon\",\"../component/polar\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"../util/accMath\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Polygon\");e(\"../component/polar\");var a=e(\"../config\");a.radar={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:\"solid\"}},emphasis:{label:{show:!1}}},symbolSize:2};var o=e(\"../util/ecData\"),r=e(\"zrender/tool/util\"),s=e(\"zrender/tool/color\");return t.prototype={type:a.CHART_TYPE_RADAR,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._radarDataCounter=0;for(var e,t=this.series,i=this.component.legend,n=0,o=t.length;o>n;n++)t[n].type===a.CHART_TYPE_RADAR&&(this.serie=this.reformOption(t[n]),this.legendHoverLink=t[n].legendHoverLink||this.legendHoverLink,e=this.serie.name||\"\",this.selectedMap[e]=i?i.isSelected(e):!0,this.selectedMap[e]&&(this._queryTarget=[this.serie,this.option],this.deepQuery(this._queryTarget,\"calculable\")&&this._addDropBox(n),this._buildSingleRadar(n),this.buildMark(n)));this.addShapeList()},_buildSingleRadar:function(e){for(var t,i,n,a,o=this.component.legend,r=this.serie.data,s=this.deepQuery(this._queryTarget,\"calculable\"),l=0;l<r.length;l++)n=r[l].name||\"\",this.selectedMap[n]=o?o.isSelected(n):!0,this.selectedMap[n]&&(o?(i=o.getColor(n),t=o.getItemShape(n),t&&(t.style.brushType=this.deepQuery([r[l],this.serie],\"itemStyle.normal.areaStyle\")?\"both\":\"stroke\",o.setItemShape(n,t))):i=this.zr.getColor(l),a=this._getPointList(this.serie.polarIndex,r[l]),this._addSymbol(a,i,l,e,this.serie.polarIndex),this._addDataShape(a,i,r[l],e,l,s),this._radarDataCounter++)},_getPointList:function(e,t){for(var i,n,a=[],o=this.component.polar,r=0,s=t.value.length;s>r;r++)n=this.getDataFromOption(t.value[r]),i=\"-\"!=n?o.getVector(e,r,n):!1,i&&a.push(i);return a},_addSymbol:function(e,t,i,n,a){for(var r,s=this.series,l=this.component.polar,h=0,m=e.length;m>h;h++)r=this.getSymbolShape(this.deepMerge([s[n].data[i],s[n]]),n,s[n].data[i].value[h],h,l.getIndicatorText(a,h),e[h][0],e[h][1],this._symbol[this._radarDataCounter%this._symbol.length],t,\"#fff\",\"vertical\"),r.zlevel=this.getZlevelBase(),r.z=this.getZBase()+1,o.set(r,\"data\",s[n].data[i]),o.set(r,\"value\",s[n].data[i].value),o.set(r,\"dataIndex\",i),o.set(r,\"special\",h),this.shapeList.push(r)},_addDataShape:function(e,t,i,a,r,l){var h=this.series,m=[i,this.serie],V=this.getItemStyleColor(this.deepQuery(m,\"itemStyle.normal.color\"),a,r,i),U=this.deepQuery(m,\"itemStyle.normal.lineStyle.width\"),d=this.deepQuery(m,\"itemStyle.normal.lineStyle.type\"),p=this.deepQuery(m,\"itemStyle.normal.areaStyle.color\"),c=this.deepQuery(m,\"itemStyle.normal.areaStyle\"),u={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:c?\"both\":\"stroke\",color:p||V||(\"string\"==typeof t?s.alpha(t,.5):t),strokeColor:V||t,lineWidth:U,lineType:d},highlightStyle:{brushType:this.deepQuery(m,\"itemStyle.emphasis.areaStyle\")||c?\"both\":\"stroke\",color:this.deepQuery(m,\"itemStyle.emphasis.areaStyle.color\")||p||V||(\"string\"==typeof t?s.alpha(t,.5):t),strokeColor:this.getItemStyleColor(this.deepQuery(m,\"itemStyle.emphasis.color\"),a,r,i)||V||t,lineWidth:this.deepQuery(m,\"itemStyle.emphasis.lineStyle.width\")||U,lineType:this.deepQuery(m,\"itemStyle.emphasis.lineStyle.type\")||d}};o.pack(u,h[a],a,i,r,i.name,this.component.polar.getIndicator(h[a].polarIndex)),l&&(u.draggable=!0,this.setCalculable(u)),u=new n(u),this.shapeList.push(u)},_addDropBox:function(e){var t=this.series,i=this.deepQuery(this._queryTarget,\"polarIndex\");if(!this._dropBoxList[i]){var n=this.component.polar.getDropBox(i);n.zlevel=this.getZlevelBase(),n.z=this.getZBase(),this.setCalculable(n),o.pack(n,t,e,void 0,-1),this.shapeList.push(n),this._dropBoxList[i]=!0}},ondragend:function(e,t){var i=this.series;if(this.isDragend&&e.target){var n=e.target,a=o.get(n,\"seriesIndex\"),r=o.get(n,\"dataIndex\");this.component.legend&&this.component.legend.del(i[a].data[r].name),i[a].data.splice(r,1),t.dragOut=!0,t.needRefresh=!0,this.isDragend=!1}},ondrop:function(t,i){var n=this.series;if(this.isDrop&&t.target){var a,r,s=t.target,l=t.dragged,h=o.get(s,\"seriesIndex\"),m=o.get(s,\"dataIndex\"),V=this.component.legend;if(-1===m)a={value:o.get(l,\"value\"),name:o.get(l,\"name\")},n[h].data.push(a),V&&V.add(a.name,l.style.color||l.style.strokeColor);else{var U=e(\"../util/accMath\");a=n[h].data[m],V&&V.del(a.name),a.name+=this.option.nameConnector+o.get(l,\"name\"),r=o.get(l,\"value\");for(var d=0;d<r.length;d++)a.value[d]=U.accAdd(a.value[d],r[d]);V&&V.add(a.name,l.style.color||l.style.strokeColor)}i.dragIn=i.dragIn||!0,this.isDrop=!1}},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},r.inherits(t,i),e(\"../chart\").define(\"radar\",t),t}),i(\"echarts/component/polar\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Polygon\",\"zrender/shape/Circle\",\"zrender/shape/Ring\",\"../config\",\"zrender/tool/util\",\"../util/coordinates\",\"../util/accMath\",\"../util/smartSteps\",\"../component\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Polygon\"),r=e(\"zrender/shape/Circle\"),s=e(\"zrender/shape/Ring\"),l=e(\"../config\");l.polar={zlevel:0,z:0,center:[\"50%\",\"50%\"],radius:\"75%\",startAngle:90,boundaryGap:[0,0],splitNumber:5,name:{show:!0,textStyle:{color:\"#333\"}},axisLine:{show:!0,lineStyle:{color:\"#ccc\",width:1,type:\"solid\"}},axisLabel:{show:!1,textStyle:{color:\"#333\"}},splitArea:{show:!0,areaStyle:{color:[\"rgba(250,250,250,0.3)\",\"rgba(200,200,200,0.3)\"]}},splitLine:{show:!0,lineStyle:{width:1,color:\"#ccc\"}},type:\"polygon\"};var h=e(\"zrender/tool/util\"),m=e(\"../util/coordinates\");return t.prototype={type:l.COMPONENT_TYPE_POLAR,_buildShape:function(){for(var e=0;e<this.polar.length;e++)this._index=e,this.reformOption(this.polar[e]),this._queryTarget=[this.polar[e],this.option],this._createVector(e),this._buildSpiderWeb(e),this._buildText(e),this._adjustIndicatorValue(e),this._addAxisLabel(e);for(var e=0;e<this.shapeList.length;e++)this.zr.addShape(this.shapeList[e])},_createVector:function(e){for(var t,i=this.polar[e],n=this.deepQuery(this._queryTarget,\"indicator\"),a=n.length,o=i.startAngle,r=2*Math.PI/a,s=this._getRadius(),l=i.__ecIndicator=[],h=0;a>h;h++)t=m.polar2cartesian(s,o*Math.PI/180+r*h),l.push({vector:[t[1],-t[0]]})},_getRadius:function(){var e=this.polar[this._index];return this.parsePercent(e.radius,Math.min(this.zr.getWidth(),this.zr.getHeight())/2)},_buildSpiderWeb:function(e){var t=this.polar[e],i=t.__ecIndicator,n=t.splitArea,a=t.splitLine,o=this.getCenter(e),r=t.splitNumber,s=a.lineStyle.color,l=a.lineStyle.width,h=a.show,m=this.deepQuery(this._queryTarget,\"axisLine\");this._addArea(i,r,o,n,s,l,h),m.show&&this._addLine(i,o,m)},_addAxisLabel:function(t){for(var i,a,o,r,a,s,l,m,V,U,d=e(\"../util/accMath\"),p=this.polar[t],c=this.deepQuery(this._queryTarget,\"indicator\"),u=p.__ecIndicator,y=this.deepQuery(this._queryTarget,\"splitNumber\"),g=this.getCenter(t),b=0;b<c.length;b++)if(i=this.deepQuery([c[b],p,this.option],\"axisLabel\"),i.show){var f=this.deepQuery([i,p,this.option],\"textStyle\"),k=this.deepQuery([i,p],\"formatter\");if(o={},o.textFont=this.getFont(f),o.color=f.color,o=h.merge(o,i),o.lineWidth=o.width,a=u[b].vector,s=u[b].value,m=b/c.length*2*Math.PI,V=i.offset||10,U=i.interval||0,!s)return;for(var x=1;y>=x;x+=U+1)r=h.merge({},o),l=d.accAdd(s.min,d.accMul(s.step,x)),l=\"function\"==typeof k?k(l):\"string\"==typeof k?k.replace(\"{a}\",\"{a0}\").replace(\"{a0}\",l):this.numAddCommas(l),r.text=l,r.x=x*a[0]/y+Math.cos(m)*V+g[0],r.y=x*a[1]/y+Math.sin(m)*V+g[1],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:r,draggable:!1,hoverable:!1}))}},_buildText:function(e){for(var t,i,a,o,r,s,l,h=this.polar[e],m=h.__ecIndicator,V=this.deepQuery(this._queryTarget,\"indicator\"),U=this.getCenter(e),d=0,p=0,c=0;c<V.length;c++)o=this.deepQuery([V[c],h,this.option],\"name\"),o.show&&(l=this.deepQuery([o,h,this.option],\"textStyle\"),i={},i.textFont=this.getFont(l),i.color=l.color,i.text=\"function\"==typeof o.formatter?o.formatter.call(this.myChart,V[c].text,c):\"string\"==typeof o.formatter?o.formatter.replace(\"{value}\",V[c].text):V[c].text,m[c].text=i.text,t=m[c].vector,a=Math.round(t[0])>0?\"left\":Math.round(t[0])<0?\"right\":\"center\",null==o.margin?t=this._mapVector(t,U,1.1):(s=o.margin,d=t[0]>0?s:-s,p=t[1]>0?s:-s,d=0===t[0]?0:d,p=0===t[1]?0:p,t=this._mapVector(t,U,1)),i.textAlign=a,i.x=t[0]+d,i.y=t[1]+p,r=o.rotate?[o.rotate/180*Math.PI,t[0],t[1]]:[0,0,0],this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),style:i,draggable:!1,hoverable:!1,rotation:r})))},getIndicatorText:function(e,t){return this.polar[e]&&this.polar[e].__ecIndicator[t]&&this.polar[e].__ecIndicator[t].text},getDropBox:function(e){var t,i,e=e||0,n=this.polar[e],a=this.getCenter(e),o=n.__ecIndicator,r=o.length,s=[],l=n.type;if(\"polygon\"==l){for(var h=0;r>h;h++)t=o[h].vector,s.push(this._mapVector(t,a,1.2));i=this._getShape(s,\"fill\",\"rgba(0,0,0,0)\",\"\",1)}else\"circle\"==l&&(i=this._getCircle(\"\",1,1.2,a,\"fill\",\"rgba(0,0,0,0)\"));return i},_addArea:function(e,t,i,n,a,o,r){for(var s,l,h,m,V=this.deepQuery(this._queryTarget,\"type\"),U=0;t>U;U++)l=(t-U)/t,r&&(\"polygon\"==V?(m=this._getPointList(e,l,i),s=this._getShape(m,\"stroke\",\"\",a,o)):\"circle\"==V&&(s=this._getCircle(a,o,l,i,\"stroke\")),this.shapeList.push(s)),n.show&&(h=(t-U-1)/t,this._addSplitArea(e,n,l,h,i,U))},_getCircle:function(e,t,i,n,a,o){var s=this._getRadius();return new r({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:s*i,brushType:a,strokeColor:e,lineWidth:t,color:o},hoverable:!1,draggable:!1})},_getRing:function(e,t,i,n){var a=this._getRadius();return new s({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:n[0],y:n[1],r:t*a,r0:i*a,color:e,brushType:\"fill\"},hoverable:!1,draggable:!1})},_getPointList:function(e,t,i){for(var n,a=[],o=e.length,r=0;o>r;r++)n=e[r].vector,a.push(this._mapVector(n,i,t));return a},_getShape:function(e,t,i,n,a){return new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{pointList:e,brushType:t,color:i,strokeColor:n,lineWidth:a},hoverable:!1,draggable:!1})},_addSplitArea:function(e,t,i,n,a,o){var r,s,l,h,m,V=e.length,U=t.areaStyle.color,d=[],V=e.length,p=this.deepQuery(this._queryTarget,\"type\");if(\"string\"==typeof U&&(U=[U]),s=U.length,r=U[o%s],\"polygon\"==p)for(var c=0;V>c;c++)d=[],l=e[c].vector,h=e[(c+1)%V].vector,d.push(this._mapVector(l,a,i)),d.push(this._mapVector(l,a,n)),d.push(this._mapVector(h,a,n)),d.push(this._mapVector(h,a,i)),m=this._getShape(d,\"fill\",r,\"\",1),this.shapeList.push(m);else\"circle\"==p&&(m=this._getRing(r,i,n,a),this.shapeList.push(m))},_mapVector:function(e,t,i){return[e[0]*i+t[0],e[1]*i+t[1]]},getCenter:function(e){var e=e||0;return this.parseCenter(this.zr,this.polar[e].center)},_addLine:function(e,t,i){for(var n,a,o=e.length,r=i.lineStyle,s=r.color,l=r.width,h=r.type,m=0;o>m;m++)a=e[m].vector,n=this._getLine(t[0],t[1],a[0]+t[0],a[1]+t[1],s,l,h),this.shapeList.push(n)},_getLine:function(e,t,i,n,o,r,s){return new a({zlevel:this.getZlevelBase(),z:this.getZBase(),style:{xStart:e,yStart:t,xEnd:i,yEnd:n,strokeColor:o,lineWidth:r,lineType:s},hoverable:!1})},_adjustIndicatorValue:function(t){for(var i,n,a,o=this.polar[t],r=this.deepQuery(this._queryTarget,\"indicator\"),s=r.length,l=o.__ecIndicator,h=this._getSeriesData(t),m=o.boundaryGap,V=o.splitNumber,U=o.scale,d=e(\"../util/smartSteps\"),p=0;s>p;p++){if(\"number\"==typeof r[p].max)i=r[p].max,n=r[p].min||0,a={max:i,min:n};else{var c=this._findValue(h,p,V,m);n=c.min,i=c.max}!U&&n>=0&&i>=0&&(n=0),!U&&0>=n&&0>=i&&(i=0);var u=d(n,i,V,a);l[p].value={min:u.min,max:u.max,step:u.step}}},_getSeriesData:function(e){for(var t,i,n,a=[],o=this.component.legend,r=0;r<this.series.length;r++)if(t=this.series[r],t.type==l.CHART_TYPE_RADAR){i=t.data||[];for(var s=0;s<i.length;s++)n=this.deepQuery([i[s],t,this.option],\"polarIndex\")||0,n!=e||o&&!o.isSelected(i[s].name)||a.push(i[s])}return a},_findValue:function(e,t,i,n){function a(e){(e>o||void 0===o)&&(o=e),(r>e||void 0===r)&&(r=e)}var o,r,s;if(e&&0!==e.length){if(1==e.length&&(r=0),1!=e.length)for(var l=0;l<e.length;l++)a(this.getDataFromOption(e[l].value[t]));else{s=e[0];for(var l=0;l<s.value.length;l++)a(this.getDataFromOption(s.value[l]))}var h=Math.abs(o-r);return r-=Math.abs(h*n[0]),o+=Math.abs(h*n[1]),r===o&&(0===o?o=1:o>0?r=o/i:o/=i),{max:o,min:r}}},getVector:function(e,t,i){e=e||0,t=t||0;var n=this.polar[e].__ecIndicator;if(!(t>=n.length)){var a,o=this.polar[e].__ecIndicator[t],r=this.getCenter(e),s=o.vector,l=o.value.max,h=o.value.min;if(\"undefined\"==typeof i)return r;switch(i){case\"min\":i=h;break;case\"max\":i=l;break;case\"center\":i=(l+h)/2}return a=l!=h?(i-h)/(l-h):.5,this._mapVector(s,r,a)}},isInside:function(e){var t=this.getNearestIndex(e);return t?t.polarIndex:-1},getNearestIndex:function(e){for(var t,i,n,a,o,r,s,l,h,V=0;V<this.polar.length;V++){if(t=this.polar[V],i=this.getCenter(V),e[0]==i[0]&&e[1]==i[1])return{polarIndex:V,valueIndex:0};if(n=this._getRadius(),o=t.startAngle,r=t.indicator,s=r.length,l=2*Math.PI/s,a=m.cartesian2polar(e[0]-i[0],i[1]-e[1]),e[0]-i[0]<0&&(a[1]+=Math.PI),a[1]<0&&(a[1]+=2*Math.PI),h=a[1]-o/180*Math.PI+2*Math.PI,Math.abs(Math.cos(h%(l/2)))*n>a[0])return{polarIndex:V,valueIndex:Math.floor((h+l/2)/l)%s}}},getIndicator:function(e){var e=e||0;return this.polar[e].indicator},refresh:function(e){e&&(this.option=e,this.polar=this.option.polar,this.series=this.option.series),this.clear(),this._buildShape()}},h.inherits(t,i),e(\"../component\").define(\"polar\",t),t}),i(\"echarts/util/coordinates\",[\"require\",\"zrender/tool/math\"],function(e){function t(e,t){return[e*n.sin(t),e*n.cos(t)]}function i(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var n=e(\"zrender/tool/math\");return{polar2cartesian:t,cartesian2polar:i}}),i(\"echarts/chart/chord\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Sector\",\"../util/shape/Ribbon\",\"../util/shape/Icon\",\"zrender/shape/BezierCurve\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/vector\",\"../data/Graph\",\"../layout/Chord\",\"../chart\"],function(e){\"use strict\";function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.scaleLineLength=4,this.scaleUnitAngle=4,this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Sector\"),r=e(\"../util/shape/Ribbon\"),s=e(\"../util/shape/Icon\"),l=e(\"zrender/shape/BezierCurve\"),h=e(\"../config\");h.chord={zlevel:0,z:2,clickable:!0,radius:[\"65%\",\"75%\"],center:[\"50%\",\"50%\"],padding:2,sort:\"none\",sortSub:\"none\",startAngle:90,clockWise:!0,ribbonType:!0,minRadius:10,maxRadius:20,symbol:\"circle\",showScale:!1,showScaleText:!1,itemStyle:{normal:{borderWidth:0,borderColor:\"#000\",label:{show:!0,rotate:!1,distance:5},chordStyle:{width:1,color:\"black\",borderWidth:1,borderColor:\"#999\",opacity:.5}},emphasis:{borderWidth:0,borderColor:\"#000\",chordStyle:{width:1,color:\"black\",borderWidth:1,borderColor:\"#999\"}}}};var m=e(\"../util/ecData\"),V=e(\"zrender/tool/util\"),U=e(\"zrender/tool/vector\"),d=e(\"../data/Graph\"),p=e(\"../layout/Chord\");return t.prototype={type:h.CHART_TYPE_CHORD,_init:function(){var e=this.series;this.selectedMap={};for(var t={},i={},n=0,a=e.length;a>n;n++)if(e[n].type===this.type){var o=this.isSelected(e[n].name);this.selectedMap[e[n].name]=o,o&&this.buildMark(n),this.reformOption(e[n]),t[e[n].name]=e[n]}for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type)if(e[n].insertToSerie){var r=t[e[n].insertToSerie];e[n]._referenceSerie=r}else i[e[n].name]=[e[n]];for(var n=0,a=e.length;a>n;n++)if(e[n].type===this.type&&e[n].insertToSerie){for(var s=e[n]._referenceSerie;s&&s._referenceSerie;)s=s._referenceSerie;i[s.name]&&this.selectedMap[e[n].name]&&i[s.name].push(e[n])}for(var l in i)this._buildChords(i[l]);this.addShapeList()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t){var i=this._getNodeCategory(e,t);return[t,i,e]},_getEdgeQueryTarget:function(e,t,i){return i=i||\"normal\",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].chordStyle]},_buildChords:function(e){for(var t=[],i=e[0],n=function(e){return e.layout.size>0},a=function(e){return function(t){return e.getEdge(t.node2,t.node1)}},o=0;o<e.length;o++){var r=e[o];if(this.selectedMap[r.name]){var s;r.matrix?s=this._getSerieGraphFromDataMatrix(r,i):r.links&&(s=this._getSerieGraphFromNodeLinks(r,i)),s.filterNode(n,this),r.ribbonType&&s.filterEdge(a(s)),t.push(s),s.__serie=r}}if(t.length){var l=t[0];if(!i.ribbonType){var h=i.minRadius,m=i.maxRadius,V=1/0,U=-(1/0);l.eachNode(function(e){U=Math.max(e.layout.size,U),V=Math.min(e.layout.size,V)});var d=(m-h)/(U-V);l.eachNode(function(e){var t=this._getNodeQueryTarget(i,e),n=this.query(t,\"symbolSize\");e.layout.size=U===V?n||V:n||(e.layout.size-V)*d+h},this)}var c=new p;c.clockWise=i.clockWise,c.startAngle=i.startAngle*Math.PI/180,c.clockWise||(c.startAngle=-c.startAngle),c.padding=i.padding*Math.PI/180,c.sort=i.sort,c.sortSub=i.sortSub,c.directed=i.ribbonType,c.run(t);var u=this.query(i,\"itemStyle.normal.label.show\");if(i.ribbonType){this._buildSectors(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildRibbons(e,o,t[y++],i);i.showScale&&this._buildScales(i,0,l)}else{this._buildNodeIcons(i,0,l,i,t),u&&this._buildLabels(i,0,l,i,t);for(var o=0,y=0;o<e.length;o++)this.selectedMap[e[o].name]&&this._buildEdgeCurves(e,o,t[y++],i,l)}this._initHoverHandler(e,t)}},_getSerieGraphFromDataMatrix:function(e,t){for(var i=[],n=0,a=[],o=0;o<e.matrix.length;o++)a[o]=e.matrix[o].slice();for(var r=e.data||e.nodes,o=0;o<r.length;o++){var s={},l=r[o];l.rawIndex=o;for(var h in l)\"name\"===h?s.id=l.name:s[h]=l[h];var m=this._getNodeCategory(t,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])i.push(s),n++;else{a.splice(n,1);for(var U=0;U<a.length;U++)a[U].splice(n,1)}}var p=d.fromMatrix(i,a,!0);return p.eachNode(function(e){e.layout={size:e.data.outValue},e.rawIndex=e.data.rawIndex}),p.eachEdge(function(e){e.layout={weight:e.data.weight}}),p},_getSerieGraphFromNodeLinks:function(e,t){for(var i=new d(!0),n=e.data||e.nodes,a=0,o=n.length;o>a;a++){var r=n[a];if(r&&!r.ignore){var s=this._getNodeCategory(t,r),l=s?s.name:r.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=i.addNode(r.name,r);h.rawIndex=a}}}for(var a=0,o=e.links.length;o>a;a++){var m=e.links[a],V=m.source,U=m.target;\"number\"==typeof V&&(V=n[V],V&&(V=V.name)),\"number\"==typeof U&&(U=n[U],U&&(U=U.name));var p=i.addEdge(V,U,m);p&&(p.rawIndex=a)}return i.eachNode(function(e){var i=e.data.value;if(null==i)if(i=0,t.ribbonType)for(var n=0;n<e.outEdges.length;n++)i+=e.outEdges[n].data.weight||0;else for(var n=0;n<e.edges.length;n++)i+=e.edges[n].data.weight||0;e.layout={size:i}}),i.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),i},_initHoverHandler:function(e,t){var i=e[0],n=t[0],a=this;n.eachNode(function(e){e.shape.onmouseover=function(){n.eachNode(function(e){e.shape.style.opacity=.1,e.labelShape&&(e.labelShape.style.opacity=.1,e.labelShape.modSelf()),e.shape.modSelf()});for(var i=0;i<t.length;i++)for(var o=0;o<t[i].edges.length;o++){var r=t[i].edges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=.1*a.deepQuery(s,\"opacity\"),r.shape.modSelf()}e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1);for(var i=0;i<t.length;i++){var l=t[i].getNodeById(e.id);if(l)for(var o=0;o<l.outEdges.length;o++){var r=l.outEdges[o],s=a._getEdgeQueryTarget(t[i].__serie,r.data);r.shape.style.opacity=a.deepQuery(s,\"opacity\");var h=t[0].getNodeById(r.node2.id);h&&(h.shape&&(h.shape.style.opacity=1),h.labelShape&&(h.labelShape.style.opacity=1))}}a.zr.refreshNextFrame()},e.shape.onmouseout=function(){n.eachNode(function(e){e.shape.style.opacity=1,e.labelShape&&(e.labelShape.style.opacity=1,e.labelShape.modSelf()),e.shape.modSelf()});for(var e=0;e<t.length;e++)for(var o=0;o<t[e].edges.length;o++){var r=t[e].edges[o],s=[r.data,i];r.shape.style.opacity=a.deepQuery(s,\"itemStyle.normal.chordStyle.opacity\"),r.shape.modSelf()}a.zr.refreshNextFrame()}})},_buildSectors:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),r=this.parseRadius(this.zr,n.radius),s=n.clockWise,l=s?1:-1;i.eachNode(function(i){var h=this._getNodeCategory(n,i.data),V=this.getColor(h?h.name:i.id),U=i.layout.startAngle/Math.PI*180*l,d=i.layout.endAngle/Math.PI*180*l,p=new o({zlevel:e.zlevel,z:e.z,style:{x:a[0],y:a[1],r0:r[0],r:r[1],startAngle:U,endAngle:d,brushType:\"fill\",opacity:1,color:V,clockWise:s},clickable:n.clickable,highlightStyle:{brushType:\"fill\"}});p.style.lineWidth=this.deepQuery([i.data,n],\"itemStyle.normal.borderWidth\"),p.highlightStyle.lineWidth=this.deepQuery([i.data,n],\"itemStyle.emphasis.borderWidth\"),p.style.strokeColor=this.deepQuery([i.data,n],\"itemStyle.normal.borderColor\"),p.highlightStyle.strokeColor=this.deepQuery([i.data,n],\"itemStyle.emphasis.borderColor\"),p.style.lineWidth>0&&(p.style.brushType=\"both\"),p.highlightStyle.lineWidth>0&&(p.highlightStyle.brushType=\"both\"),m.pack(p,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(p),i.shape=p},this)},_buildNodeIcons:function(e,t,i,n){var a=this.parseCenter(this.zr,n.center),o=this.parseRadius(this.zr,n.radius),r=o[1];i.eachNode(function(i){var o=i.layout.startAngle,l=i.layout.endAngle,h=(o+l)/2,V=r*Math.cos(h),U=r*Math.sin(h),d=this._getNodeQueryTarget(n,i.data),p=this._getNodeCategory(n,i.data),c=this.deepQuery(d,\"itemStyle.normal.color\");c||(c=this.getColor(p?p.name:i.id));var u=new s({zlevel:e.zlevel,z:e.z+1,style:{x:-i.layout.size,y:-i.layout.size,width:2*i.layout.size,height:2*i.layout.size,iconType:this.deepQuery(d,\"symbol\"),color:c,brushType:\"both\",lineWidth:this.deepQuery(d,\"itemStyle.normal.borderWidth\"),strokeColor:this.deepQuery(d,\"itemStyle.normal.borderColor\")},highlightStyle:{color:this.deepQuery(d,\"itemStyle.emphasis.color\"),lineWidth:this.deepQuery(d,\"itemStyle.emphasis.borderWidth\"),strokeColor:this.deepQuery(d,\"itemStyle.emphasis.borderColor\")},clickable:n.clickable,position:[V+a[0],U+a[1]]});m.pack(u,e,t,i.data,i.rawIndex,i.id,i.category),this.shapeList.push(u),i.shape=u},this)},_buildLabels:function(e,t,i,a){var o=this.query(a,\"itemStyle.normal.label.rotate\"),r=this.query(a,\"itemStyle.normal.label.distance\"),s=this.parseCenter(this.zr,a.center),l=this.parseRadius(this.zr,a.radius),h=a.clockWise,m=h?1:-1;\n\ni.eachNode(function(t){var i=t.layout.startAngle/Math.PI*180*m,h=t.layout.endAngle/Math.PI*180*m,V=(i*-m+h*-m)/2;V%=360,0>V&&(V+=360);var d=90>=V||V>=270;V=V*Math.PI/180;var p=[Math.cos(V),-Math.sin(V)],c=0;c=a.ribbonType?a.showScaleText?35+r:r:r+t.layout.size;var u=U.scale([],p,l[1]+c);U.add(u,u,s);var y={zlevel:e.zlevel,z:e.z+1,hoverable:!1,style:{text:null==t.data.label?t.id:t.data.label,textAlign:d?\"left\":\"right\"}};o?(y.rotation=d?V:Math.PI+V,y.style.x=d?l[1]+c:-l[1]-c,y.style.y=0,y.position=s.slice()):(y.style.x=u[0],y.style.y=u[1]),y.style.color=this.deepQuery([t.data,a],\"itemStyle.normal.label.textStyle.color\")||\"#000000\",y.style.textFont=this.getFont(this.deepQuery([t.data,a],\"itemStyle.normal.label.textStyle\")),y=new n(y),this.shapeList.push(y),t.labelShape=y},this)},_buildRibbons:function(e,t,i,n){var a=e[t],o=this.parseCenter(this.zr,n.center),s=this.parseRadius(this.zr,n.radius);i.eachEdge(function(l,h){var V,U=i.getEdge(l.node2,l.node1);if(U&&!l.shape){if(U.shape)return void(l.shape=U.shape);var d=l.layout.startAngle/Math.PI*180,p=l.layout.endAngle/Math.PI*180,c=U.layout.startAngle/Math.PI*180,u=U.layout.endAngle/Math.PI*180;V=this.getColor(1===e.length?l.layout.weight<=U.layout.weight?l.node1.id:l.node2.id:a.name);var y,g,b=this._getEdgeQueryTarget(a,l.data),f=this._getEdgeQueryTarget(a,l.data,\"emphasis\"),k=new r({zlevel:a.zlevel,z:a.z,style:{x:o[0],y:o[1],r:s[0],source0:d,source1:p,target0:c,target1:u,brushType:\"both\",opacity:this.deepQuery(b,\"opacity\"),color:V,lineWidth:this.deepQuery(b,\"borderWidth\"),strokeColor:this.deepQuery(b,\"borderColor\"),clockWise:n.clockWise},clickable:n.clickable,highlightStyle:{brushType:\"both\",opacity:this.deepQuery(f,\"opacity\"),lineWidth:this.deepQuery(f,\"borderWidth\"),strokeColor:this.deepQuery(f,\"borderColor\")}});l.layout.weight<=U.layout.weight?(y=U.node1,g=U.node2):(y=l.node1,g=l.node2),m.pack(k,a,t,l.data,null==l.rawIndex?h:l.rawIndex,l.data.name||y.id+\"-\"+g.id,y.id,g.id),this.shapeList.push(k),l.shape=k}},this)},_buildEdgeCurves:function(e,t,i,n,a){var o=e[t],r=this.parseCenter(this.zr,n.center);i.eachEdge(function(e,i){var n=a.getNodeById(e.node1.id),s=a.getNodeById(e.node2.id),h=n.shape,V=s.shape,U=this._getEdgeQueryTarget(o,e.data),d=this._getEdgeQueryTarget(o,e.data,\"emphasis\"),p=new l({zlevel:o.zlevel,z:o.z,style:{xStart:h.position[0],yStart:h.position[1],xEnd:V.position[0],yEnd:V.position[1],cpX1:r[0],cpY1:r[1],lineWidth:this.deepQuery(U,\"width\"),strokeColor:this.deepQuery(U,\"color\"),opacity:this.deepQuery(U,\"opacity\")},highlightStyle:{lineWidth:this.deepQuery(d,\"width\"),strokeColor:this.deepQuery(d,\"color\"),opacity:this.deepQuery(d,\"opacity\")}});m.pack(p,o,t,e.data,null==e.rawIndex?i:e.rawIndex,e.data.name||e.node1.id+\"-\"+e.node2.id,e.node1.id,e.node2.id),this.shapeList.push(p),e.shape=p},this)},_buildScales:function(e,t,i){var o,r,s=e.clockWise,l=this.parseCenter(this.zr,e.center),h=this.parseRadius(this.zr,e.radius),m=s?1:-1,V=0,d=-(1/0);e.showScaleText&&(i.eachNode(function(e){var t=e.data.value;t>d&&(d=t),V+=t}),d>1e10?(o=\"b\",r=1e-9):d>1e7?(o=\"m\",r=1e-6):d>1e4?(o=\"k\",r=.001):(o=\"\",r=1));var p=V/(360-e.padding);i.eachNode(function(t){for(var i=t.layout.startAngle/Math.PI*180,V=t.layout.endAngle/Math.PI*180,d=i;;){if(s&&d>V||!s&&V>d)break;var c=d/180*Math.PI,u=[Math.cos(c),Math.sin(c)],y=U.scale([],u,h[1]+1);U.add(y,y,l);var g=U.scale([],u,h[1]+this.scaleLineLength);U.add(g,g,l);var b=new a({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{xStart:y[0],yStart:y[1],xEnd:g[0],yEnd:g[1],lineCap:\"round\",brushType:\"stroke\",strokeColor:\"#666\",lineWidth:1}});this.shapeList.push(b),d+=m*this.scaleUnitAngle}if(e.showScaleText)for(var f=i,k=5*p*this.scaleUnitAngle,x=0;;){if(s&&f>V||!s&&V>f)break;var c=f;c%=360,0>c&&(c+=360);var _=90>=c||c>=270,L=new n({zlevel:e.zlevel,z:e.z-1,hoverable:!1,style:{x:_?h[1]+this.scaleLineLength+4:-h[1]-this.scaleLineLength-4,y:0,text:Math.round(10*x)/10+o,textAlign:_?\"left\":\"right\"},position:l.slice(),rotation:_?[-c/180*Math.PI,0,0]:[-(c+180)/180*Math.PI,0,0]});this.shapeList.push(L),x+=k*r,f+=m*this.scaleUnitAngle*5}},this)},refresh:function(e){if(e&&(this.option=e,this.series=e.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this.backupShapeList(),this._init()},reformOption:function(e){var t=V.merge;e=t(t(e||{},this.ecTheme.chord),h.chord),e.itemStyle.normal.label.textStyle=this.getTextStyle(e.itemStyle.normal.label.textStyle),this.z=e.z,this.zlevel=e.zlevel}},V.inherits(t,i),e(\"../chart\").define(\"chord\",t),t}),i(\"echarts/util/shape/Ribbon\",[\"require\",\"zrender/shape/Base\",\"zrender/shape/util/PathProxy\",\"zrender/tool/util\",\"zrender/tool/area\"],function(e){function t(e){i.call(this,e),this._pathProxy=new n}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/shape/util/PathProxy\"),a=e(\"zrender/tool/util\"),o=e(\"zrender/tool/area\");return t.prototype={type:\"ribbon\",buildPath:function(e,t){var i=t.clockWise||!1,n=this._pathProxy;n.begin(e);var a=t.x,o=t.y,r=t.r,s=t.source0/180*Math.PI,l=t.source1/180*Math.PI,h=t.target0/180*Math.PI,m=t.target1/180*Math.PI,V=a+Math.cos(s)*r,U=o+Math.sin(s)*r,d=a+Math.cos(l)*r,p=o+Math.sin(l)*r,c=a+Math.cos(h)*r,u=o+Math.sin(h)*r,y=a+Math.cos(m)*r,g=o+Math.sin(m)*r;n.moveTo(V,U),n.arc(a,o,t.r,s,l,!i),n.bezierCurveTo(.7*(a-d)+d,.7*(o-p)+p,.7*(a-c)+c,.7*(o-u)+u,c,u),(t.source0!==t.target0||t.source1!==t.target1)&&(n.arc(a,o,t.r,h,m,!i),n.bezierCurveTo(.7*(a-y)+y,.7*(o-g)+g,.7*(a-V)+V,.7*(o-U)+U,V,U))},getRect:function(e){return e.__rect?e.__rect:(this._pathProxy.isEmpty()||this.buildPath(null,e),this._pathProxy.fastBoundingRect())},isCover:function(e,t){var i=this.getRect(this.style);return e>=i.x&&e<=i.x+i.width&&t>=i.y&&t<=i.y+i.height?o.isInsidePath(this._pathProxy.pathCommands,0,\"fill\",e,t):void 0}},a.inherits(t,i),t}),i(\"echarts/data/Graph\",[\"require\",\"zrender/tool/util\"],function(e){var t=e(\"zrender/tool/util\"),i=function(e){this._directed=e||!1,this.nodes=[],this.edges=[],this._nodesMap={},this._edgesMap={}};i.prototype.isDirected=function(){return this._directed},i.prototype.addNode=function(e,t){if(this._nodesMap[e])return this._nodesMap[e];var n=new i.Node(e,t);return this.nodes.push(n),this._nodesMap[e]=n,n},i.prototype.getNodeById=function(e){return this._nodesMap[e]},i.prototype.addEdge=function(e,t,n){if(\"string\"==typeof e&&(e=this._nodesMap[e]),\"string\"==typeof t&&(t=this._nodesMap[t]),e&&t){var a=e.id+\"-\"+t.id;if(this._edgesMap[a])return this._edgesMap[a];var o=new i.Edge(e,t,n);return this._directed&&(e.outEdges.push(o),t.inEdges.push(o)),e.edges.push(o),e!==t&&t.edges.push(o),this.edges.push(o),this._edgesMap[a]=o,o}},i.prototype.removeEdge=function(e){var i=e.node1,n=e.node2,a=i.id+\"-\"+n.id;this._directed&&(i.outEdges.splice(t.indexOf(i.outEdges,e),1),n.inEdges.splice(t.indexOf(n.inEdges,e),1)),i.edges.splice(t.indexOf(i.edges,e),1),i!==n&&n.edges.splice(t.indexOf(n.edges,e),1),delete this._edgesMap[a],this.edges.splice(t.indexOf(this.edges,e),1)},i.prototype.getEdge=function(e,t){return\"string\"!=typeof e&&(e=e.id),\"string\"!=typeof t&&(t=t.id),this._directed?this._edgesMap[e+\"-\"+t]:this._edgesMap[e+\"-\"+t]||this._edgesMap[t+\"-\"+e]},i.prototype.removeNode=function(e){if(\"string\"!=typeof e||(e=this._nodesMap[e])){delete this._nodesMap[e.id],this.nodes.splice(t.indexOf(this.nodes,e),1);for(var i=0;i<this.edges.length;){var n=this.edges[i];n.node1===e||n.node2===e?this.removeEdge(n):i++}}},i.prototype.filterNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;)e.call(t,this.nodes[n],n)?n++:(this.removeNode(this.nodes[n]),i--)},i.prototype.filterEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;)e.call(t,this.edges[n],n)?n++:(this.removeEdge(this.edges[n]),i--)},i.prototype.eachNode=function(e,t){for(var i=this.nodes.length,n=0;i>n;n++)this.nodes[n]&&e.call(t,this.nodes[n],n)},i.prototype.eachEdge=function(e,t){for(var i=this.edges.length,n=0;i>n;n++)this.edges[n]&&e.call(t,this.edges[n],n)},i.prototype.clear=function(){this.nodes.length=0,this.edges.length=0,this._nodesMap={},this._edgesMap={}},i.prototype.breadthFirstTraverse=function(e,t,i,n){if(\"string\"==typeof t&&(t=this._nodesMap[t]),t){var a=\"edges\";\"out\"===i?a=\"outEdges\":\"in\"===i&&(a=\"inEdges\");for(var o=0;o<this.nodes.length;o++)this.nodes[o].__visited=!1;if(!e.call(n,t,null))for(var r=[t];r.length;)for(var s=r.shift(),l=s[a],o=0;o<l.length;o++){var h=l[o],m=h.node1===s?h.node2:h.node1;if(!m.__visited){if(e.call(m,m,s))return;r.push(m),m.__visited=!0}}}},i.prototype.clone=function(){for(var e=new i(this._directed),t=0;t<this.nodes.length;t++)e.addNode(this.nodes[t].id,this.nodes[t].data);for(var t=0;t<this.edges.length;t++){var n=this.edges[t];e.addEdge(n.node1.id,n.node2.id,n.data)}return e};var n=function(e,t){this.id=e,this.data=t||null,this.inEdges=[],this.outEdges=[],this.edges=[]};n.prototype.degree=function(){return this.edges.length},n.prototype.inDegree=function(){return this.inEdges.length},n.prototype.outDegree=function(){return this.outEdges.length};var a=function(e,t,i){this.node1=e,this.node2=t,this.data=i||null};return i.Node=n,i.Edge=a,i.fromMatrix=function(e,t,n){if(t&&t.length&&t[0].length===t.length&&e.length===t.length){for(var a=t.length,o=new i(n),r=0;a>r;r++){var s=o.addNode(e[r].id,e[r]);s.data.value=0,n&&(s.data.outValue=s.data.inValue=0)}for(var r=0;a>r;r++)for(var l=0;a>l;l++){var h=t[r][l];n&&(o.nodes[r].data.outValue+=h,o.nodes[l].data.inValue+=h),o.nodes[r].data.value+=h,o.nodes[l].data.value+=h}for(var r=0;a>r;r++)for(var l=r;a>l;l++){var h=t[r][l];if(0!==h){var m=o.nodes[r],V=o.nodes[l],U=o.addEdge(m,V,{});if(U.data.weight=h,r!==l&&n&&t[l][r]){var d=o.addEdge(V,m,{});d.data.weight=t[l][r]}}}return o}},i}),i(\"echarts/layout/Chord\",[\"require\"],function(){var e=function(e){e=e||{},this.sort=e.sort||null,this.sortSub=e.sortSub||null,this.padding=.05,this.startAngle=e.startAngle||0,this.clockWise=null==e.clockWise?!1:e.clockWise,this.center=e.center||[0,0],this.directed=!0};e.prototype.run=function(e){e instanceof Array||(e=[e]);var n=e.length;if(n){for(var a=e[0],o=a.nodes.length,r=[],s=0,l=0;o>l;l++){var h=a.nodes[l],m={size:0,subGroups:[],node:h};r.push(m);for(var V=0,U=0;U<e.length;U++){var d=e[U],p=d.getNodeById(h.id);if(p){m.size+=p.layout.size;for(var c=this.directed?p.outEdges:p.edges,u=0;u<c.length;u++){var y=c[u],g=y.layout.weight;m.subGroups.push({weight:g,edge:y,graph:d}),V+=g}}}s+=m.size;for(var b=m.size/V,u=0;u<m.subGroups.length;u++)m.subGroups[u].weight*=b;\"ascending\"===this.sortSub?m.subGroups.sort(t):\"descending\"===this.sort&&(m.subGroups.sort(t),m.subGroups.reverse())}\"ascending\"===this.sort?r.sort(i):\"descending\"===this.sort&&(r.sort(i),r.reverse());for(var b=(2*Math.PI-this.padding*o)/s,f=this.startAngle,k=this.clockWise?1:-1,l=0;o>l;l++){var m=r[l];m.node.layout.startAngle=f,m.node.layout.endAngle=f+k*m.size*b,m.node.layout.subGroups=[];for(var u=0;u<m.subGroups.length;u++){var x=m.subGroups[u];x.edge.layout.startAngle=f,f+=k*x.weight*b,x.edge.layout.endAngle=f}f=m.node.layout.endAngle+k*this.padding}}};var t=function(e,t){return e.weight-t.weight},i=function(e,t){return e.size-t.size};return e}),i(\"echarts/chart/force\",[\"require\",\"./base\",\"../data/Graph\",\"../layout/Force\",\"zrender/shape/Line\",\"zrender/shape/BezierCurve\",\"zrender/shape/Image\",\"../util/shape/Icon\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/config\",\"zrender/tool/vector\",\"../chart\"],function(e){\"use strict\";function t(e,t,o,h,m){var V=this;r.call(this,e,t,o,h,m),this.__nodePositionMap={},this._graph=new s(!0),this._layout=new l,this._layout.onupdate=function(){V._step()},this._steps=1,this.ondragstart=function(){i.apply(V,arguments)},this.ondragend=function(){a.apply(V,arguments)},this.ondrop=function(){},this.shapeHandler.ondragstart=function(){V.isDragstart=!0},this.onmousemove=function(){n.apply(V,arguments)},this.refresh(h)}function i(e){if(this.isDragstart&&e.target){var t=e.target;t.fixed=!0,this.isDragstart=!1,this.zr.on(u.EVENT.MOUSEMOVE,this.onmousemove)}}function n(){this._layout.temperature=.8,this._step()}function a(e,t){if(this.isDragend&&e.target){var i=e.target;i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1,this.zr.un(u.EVENT.MOUSEMOVE,this.onmousemove)}}function o(e,t,i){var n=y.create();return n[0]=(Math.random()-.5)*i+e,n[1]=(Math.random()-.5)*i+t,n}var r=e(\"./base\"),s=e(\"../data/Graph\"),l=e(\"../layout/Force\"),h=e(\"zrender/shape/Line\"),m=e(\"zrender/shape/BezierCurve\"),V=e(\"zrender/shape/Image\"),U=e(\"../util/shape/Icon\"),d=e(\"../config\");d.force={zlevel:1,z:2,center:[\"50%\",\"50%\"],size:\"100%\",preventOverlap:!1,coolDown:.99,minRadius:10,maxRadius:20,ratioScaling:!1,large:!1,useWorker:!1,steps:1,scaling:1,gravity:1,symbol:\"circle\",symbolSize:0,linkSymbol:null,linkSymbolSize:[10,15],draggable:!0,clickable:!0,roam:!1,itemStyle:{normal:{label:{show:!1,position:\"inside\"},nodeStyle:{brushType:\"both\",borderColor:\"#5182ab\",borderWidth:1},linkStyle:{color:\"#5182ab\",width:1,type:\"line\"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{opacity:0}}}};var p=e(\"../util/ecData\"),c=e(\"zrender/tool/util\"),u=e(\"zrender/config\"),y=e(\"zrender/tool/vector\");return t.prototype={constructor:t,type:d.CHART_TYPE_FORCE,_init:function(){this.selectedMap={};var e,t=this.component.legend,i=this.series;this.clear();for(var n=0,a=i.length;a>n;n++){var o=i[n];if(o.type===d.CHART_TYPE_FORCE){if(i[n]=this.reformOption(i[n]),e=i[n].name||\"\",this.selectedMap[e]=t?t.isSelected(e):!0,!this.selectedMap[e])continue;this.buildMark(n),this._initSerie(o,n);break}}this.animationEffect()},_getNodeCategory:function(e,t){return e.categories&&e.categories[t.category||0]},_getNodeQueryTarget:function(e,t,i){i=i||\"normal\";var n=this._getNodeCategory(e,t)||{};return[t.itemStyle&&t.itemStyle[i],n&&n.itemStyle&&n.itemStyle[i],e.itemStyle[i].nodeStyle]},_getEdgeQueryTarget:function(e,t,i){return i=i||\"normal\",[t.itemStyle&&t.itemStyle[i],e.itemStyle[i].linkStyle]},_initSerie:function(e,t){this._temperature=1,e.matrix?this._graph=this._getSerieGraphFromDataMatrix(e):e.links&&(this._graph=this._getSerieGraphFromNodeLinks(e)),this._buildLinkShapes(e,t),this._buildNodeShapes(e,t);var i=e.roam===!0||\"move\"===e.roam,n=e.roam===!0||\"scale\"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:i,zoomable:n}),(this.query(\"markPoint.effect.show\")||this.query(\"markLine.effect.show\"))&&this.zr.modLayer(d.EFFECT_ZLEVEL,{panable:i,zoomable:n}),this._initLayout(e),this._step()},_getSerieGraphFromDataMatrix:function(e){for(var t=[],i=0,n=[],a=0;a<e.matrix.length;a++)n[a]=e.matrix[a].slice();for(var o=e.data||e.nodes,a=0;a<o.length;a++){var r={},l=o[a];for(var h in l)\"name\"===h?r.id=l.name:r[h]=l[h];var m=this._getNodeCategory(e,l),V=m?m.name:l.name;if(this.selectedMap[V]=this.isSelected(V),this.selectedMap[V])t.push(r),i++;else{n.splice(i,1);for(var U=0;U<n.length;U++)n[U].splice(i,1)}}var d=s.fromMatrix(t,n,!0);return d.eachNode(function(e,t){e.layout={size:e.data.value,mass:0},e.rawIndex=t}),d.eachEdge(function(e){e.layout={weight:e.data.weight}}),d},_getSerieGraphFromNodeLinks:function(e){for(var t=new s(!0),i=e.data||e.nodes,n=0,a=i.length;a>n;n++){var o=i[n];if(o&&!o.ignore){var r=this._getNodeCategory(e,o),l=r?r.name:o.name;if(this.selectedMap[l]=this.isSelected(l),this.selectedMap[l]){var h=t.addNode(o.name,o);h.rawIndex=n}}}for(var n=0,a=e.links.length;a>n;n++){var m=e.links[n],V=m.source,U=m.target;\"number\"==typeof V&&(V=i[V],V&&(V=V.name)),\"number\"==typeof U&&(U=i[U],U&&(U=U.name));var d=t.addEdge(V,U,m);d&&(d.rawIndex=n)}return t.eachNode(function(e){var t=e.data.value;if(null==t){t=0;for(var i=0;i<e.edges.length;i++)t+=e.edges[i].data.weight||0}e.layout={size:t,mass:0}}),t.eachEdge(function(e){e.layout={weight:null==e.data.weight?1:e.data.weight}}),t},_initLayout:function(e){var t=this._graph,i=t.nodes.length,n=this.query(e,\"minRadius\"),a=this.query(e,\"maxRadius\");this._steps=e.steps||1;var r=this._layout;r.center=this.parseCenter(this.zr,e.center),r.width=this.parsePercent(e.size,this.zr.getWidth()),r.height=this.parsePercent(e.size,this.zr.getHeight()),r.large=e.large,r.scaling=e.scaling,r.ratioScaling=e.ratioScaling,r.gravity=e.gravity,r.temperature=1,r.coolDown=e.coolDown,r.preventNodeEdgeOverlap=e.preventOverlap,r.preventNodeOverlap=e.preventOverlap;for(var s=1/0,l=-(1/0),h=0;i>h;h++){var m=t.nodes[h];l=Math.max(m.layout.size,l),s=Math.min(m.layout.size,s)}for(var V=l-s,h=0;i>h;h++){var m=t.nodes[h];V>0?(m.layout.size=(m.layout.size-s)*(a-n)/V+n,m.layout.mass=m.layout.size/a):(m.layout.size=(a-n)/2,m.layout.mass=.5)}for(var h=0;i>h;h++){var m=t.nodes[h];if(\"undefined\"!=typeof this.__nodePositionMap[m.id])m.layout.position=y.create(),y.copy(m.layout.position,this.__nodePositionMap[m.id]);else if(\"undefined\"!=typeof m.data.initial)m.layout.position=y.create(),y.copy(m.layout.position,m.data.initial);else{var U=this._layout.center,d=Math.min(this._layout.width,this._layout.height);m.layout.position=o(U[0],U[1],.8*d)}var p=m.shape.style,c=m.layout.size;p.width=p.width||2*c,p.height=p.height||2*c,p.x=-p.width/2,p.y=-p.height/2,y.copy(m.shape.position,m.layout.position)}i=t.edges.length,l=-(1/0);for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight>l&&(l=u.layout.weight)}for(var h=0;i>h;h++){var u=t.edges[h];u.layout.weight/=l}this._layout.init(t,e.useWorker)},_buildNodeShapes:function(e,t){var i=this._graph,n=this.query(e,\"categories\");i.eachNode(function(i){var a=this._getNodeCategory(e,i.data),o=[i.data,a,e],r=this._getNodeQueryTarget(e,i.data),s=this._getNodeQueryTarget(e,i.data,\"emphasis\"),l=new U({style:{x:0,y:0,color:this.deepQuery(r,\"color\"),brushType:\"both\",strokeColor:this.deepQuery(r,\"strokeColor\")||this.deepQuery(r,\"borderColor\"),lineWidth:this.deepQuery(r,\"lineWidth\")||this.deepQuery(r,\"borderWidth\")},highlightStyle:{color:this.deepQuery(s,\"color\"),strokeColor:this.deepQuery(s,\"strokeColor\")||this.deepQuery(s,\"borderColor\"),lineWidth:this.deepQuery(s,\"lineWidth\")||this.deepQuery(s,\"borderWidth\")},clickable:e.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()});l.style.color||(l.style.color=this.getColor(a?a.name:i.id)),l.style.iconType=this.deepQuery(o,\"symbol\");var h=this.deepQuery(o,\"symbolSize\")||0;\"number\"==typeof h&&(h=[h,h]),l.style.width=2*h[0],l.style.height=2*h[1],l.style.iconType.match(\"image\")&&(l.style.image=l.style.iconType.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),l=new V({style:l.style,highlightStyle:l.highlightStyle,clickable:l.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(o,\"itemStyle.normal.label.show\")&&(l.style.text=null==i.data.label?i.id:i.data.label,l.style.textPosition=this.deepQuery(o,\"itemStyle.normal.label.position\"),l.style.textColor=this.deepQuery(o,\"itemStyle.normal.label.textStyle.color\"),l.style.textFont=this.getFont(this.deepQuery(o,\"itemStyle.normal.label.textStyle\")||{})),this.deepQuery(o,\"itemStyle.emphasis.label.show\")&&(l.highlightStyle.textPosition=this.deepQuery(o,\"itemStyle.emphasis.label.position\"),l.highlightStyle.textColor=this.deepQuery(o,\"itemStyle.emphasis.label.textStyle.color\"),l.highlightStyle.textFont=this.getFont(this.deepQuery(o,\"itemStyle.emphasis.label.textStyle\")||{})),this.deepQuery(o,\"draggable\")&&(this.setCalculable(l),l.dragEnableTime=0,l.draggable=!0,l.ondragstart=this.shapeHandler.ondragstart,l.ondragover=null);var m=\"\";if(\"undefined\"!=typeof i.category){var a=n[i.category];m=a&&a.name||\"\"}p.pack(l,e,t,i.data,i.rawIndex,i.data.name||\"\",i.category),this.shapeList.push(l),this.zr.addShape(l),i.shape=l},this)},_buildLinkShapes:function(e,t){for(var i=this._graph,n=i.edges.length,a=0;n>a;a++){var o=i.edges[a],r=o.data,s=o.node1,l=o.node2,V=i.getEdge(l,s),d=this._getEdgeQueryTarget(e,r),u=this.deepQuery(d,\"type\");e.linkSymbol&&\"none\"!==e.linkSymbol&&(u=\"line\");var y=\"line\"===u?h:m,g=new y({style:{xStart:0,yStart:0,xEnd:0,yEnd:0},clickable:this.query(e,\"clickable\"),highlightStyle:{},zlevel:this.getZlevelBase(),z:this.getZBase()});if(V&&V.shape&&(g.style.offset=4,V.shape.style.offset=4),c.merge(g.style,this.query(e,\"itemStyle.normal.linkStyle\"),!0),c.merge(g.highlightStyle,this.query(e,\"itemStyle.emphasis.linkStyle\"),!0),\"undefined\"!=typeof r.itemStyle&&(r.itemStyle.normal&&c.merge(g.style,r.itemStyle.normal,!0),r.itemStyle.emphasis&&c.merge(g.highlightStyle,r.itemStyle.emphasis,!0)),g.style.lineWidth=g.style.lineWidth||g.style.width,g.style.strokeColor=g.style.strokeColor||g.style.color,g.highlightStyle.lineWidth=g.highlightStyle.lineWidth||g.highlightStyle.width,g.highlightStyle.strokeColor=g.highlightStyle.strokeColor||g.highlightStyle.color,p.pack(g,e,t,o.data,null==o.rawIndex?a:o.rawIndex,o.data.name||s.id+\" - \"+l.id,s.id,l.id),this.shapeList.push(g),this.zr.addShape(g),o.shape=g,e.linkSymbol&&\"none\"!==e.linkSymbol){var b=new U({style:{x:-5,y:0,width:e.linkSymbolSize[0],height:e.linkSymbolSize[1],iconType:e.linkSymbol,brushType:\"fill\",color:g.style.strokeColor},highlightStyle:{brushType:\"fill\"},position:[0,0],rotation:0,zlevel:this.getZlevelBase(),z:this.getZBase()});g._symbolShape=b,this.shapeList.push(b),this.zr.addShape(b)}}},_updateLinkShapes:function(){for(var e=y.create(),t=y.create(),i=y.create(),n=y.create(),a=this._graph.edges,o=0,r=a.length;r>o;o++){var s=a[o],l=s.node1.shape,h=s.node2.shape;y.copy(i,l.position),y.copy(n,h.position);var m=s.shape.style;if(y.sub(e,i,n),y.normalize(e,e),m.offset?(t[0]=e[1],t[1]=-e[0],y.scaleAndAdd(i,i,t,m.offset),y.scaleAndAdd(n,n,t,m.offset)):\"bezier-curve\"===s.shape.type&&(m.cpX1=(i[0]+n[0])/2-(n[1]-i[1])/4,m.cpY1=(i[1]+n[1])/2-(i[0]-n[0])/4),m.xStart=i[0],m.yStart=i[1],m.xEnd=n[0],m.yEnd=n[1],s.shape.modSelf(),s.shape._symbolShape){var V=s.shape._symbolShape;y.copy(V.position,n),y.scaleAndAdd(V.position,V.position,e,h.style.width/2+2);var U=Math.atan2(e[1],e[0]);V.rotation=Math.PI/2-U,V.modSelf()}}},_syncNodePositions:function(){for(var e=this._graph,t=0;t<e.nodes.length;t++){var i=e.nodes[t],n=i.layout.position,a=i.data,o=i.shape,r=o.fixed||a.fixX,s=o.fixed||a.fixY;r===!0?r=1:isNaN(r)&&(r=0),s===!0?s=1:isNaN(s)&&(s=0),o.position[0]+=(n[0]-o.position[0])*(1-r),o.position[1]+=(n[1]-o.position[1])*(1-s),y.copy(n,o.position);var l=a.name;if(l){var h=this.__nodePositionMap[l];h||(h=this.__nodePositionMap[l]=y.create()),y.copy(h,n)}o.modSelf()}},_step:function(){this._syncNodePositions(),this._updateLinkShapes(),this.zr.refreshNextFrame(),this._layout.temperature>.01?this._layout.step(this._steps):this.messageCenter.dispatch(d.EVENT.FORCE_LAYOUT_END,{},{},this.myChart)},refresh:function(e){if(e&&(this.option=e,this.series=this.option.series),this.legend=this.component.legend,this.legend)this.getColor=function(e){return this.legend.getColor(e)},this.isSelected=function(e){return this.legend.isSelected(e)};else{var t={},i=0;this.getColor=function(e){return t[e]?t[e]:(t[e]||(t[e]=this.zr.getColor(i++)),t[e])},this.isSelected=function(){return!0}}this._init()},dispose:function(){this.clear(),this.shapeList=null,this.effectList=null,this._layout.dispose(),this._layout=null,this.__nodePositionMap={}},getPosition:function(){var e=[];return this._graph.eachNode(function(t){t.layout&&e.push({name:t.data.name,position:Array.prototype.slice.call(t.layout.position)})}),e}},c.inherits(t,r),e(\"../chart\").define(\"force\",t),t}),i(\"echarts/layout/Force\",[\"require\",\"./forceLayoutWorker\",\"zrender/tool/vector\"],function(e){function t(){if(\"undefined\"!=typeof Worker&&\"undefined\"!=typeof Blob)try{var e=new Blob([n.getWorkerCode()]);i=window.URL.createObjectURL(e)}catch(t){i=\"\"}return i}var i,n=e(\"./forceLayoutWorker\"),a=e(\"zrender/tool/vector\"),o=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r=\"undefined\"==typeof Float32Array?Array:Float32Array,s=function(e){\"undefined\"==typeof i&&t(),e=e||{},this.width=e.width||500,this.height=e.height||500,this.center=e.center||[this.width/2,this.height/2],this.ratioScaling=e.ratioScaling||!1,this.scaling=e.scaling||1,this.gravity=\"undefined\"!=typeof e.gravity?e.gravity:1,this.large=e.large||!1,this.preventNodeOverlap=e.preventNodeOverlap||!1,this.preventNodeEdgeOverlap=e.preventNodeEdgeOverlap||!1,this.maxSpeedIncrease=e.maxSpeedIncrease||1,this.onupdate=e.onupdate||function(){},this.temperature=e.temperature||1,this.coolDown=e.coolDown||.99,this._layout=null,this._layoutWorker=null;var n=this,a=this._$onupdate;this._$onupdate=function(e){a.call(n,e)}};return s.prototype.updateConfig=function(){var e=this.width,t=this.height,i=Math.min(e,t),n={center:this.center,width:this.ratioScaling?e:i,height:this.ratioScaling?t:i,scaling:this.scaling||1,gravity:this.gravity||1,barnesHutOptimize:this.large,preventNodeOverlap:this.preventNodeOverlap,preventNodeEdgeOverlap:this.preventNodeEdgeOverlap,maxSpeedIncrease:this.maxSpeedIncrease};if(this._layoutWorker)this._layoutWorker.postMessage({cmd:\"updateConfig\",config:n});else for(var a in n)this._layout[a]=n[a]},s.prototype.init=function(e,t){if(this._layoutWorker&&(this._layoutWorker.terminate(),this._layoutWorker=null),i&&t)try{this._layoutWorker||(this._layoutWorker=new Worker(i),this._layoutWorker.onmessage=this._$onupdate),this._layout=null}catch(a){this._layoutWorker=null,this._layout||(this._layout=new n)}else this._layout||(this._layout=new n);this.temperature=1,this.graph=e;for(var o=e.nodes.length,s=new r(2*o),l=new r(o),h=new r(o),m=0;o>m;m++){var V=e.nodes[m];s[2*m]=V.layout.position[0],s[2*m+1]=V.layout.position[1],l[m]=\"undefined\"==typeof V.layout.mass?1:V.layout.mass,h[m]=\"undefined\"==typeof V.layout.size?1:V.layout.size,V.layout.__index=m}o=e.edges.length;for(var U=new r(2*o),d=new r(o),m=0;o>m;m++){var p=e.edges[m];U[2*m]=p.node1.layout.__index,U[2*m+1]=p.node2.layout.__index,d[m]=p.layout.weight||1}this._layoutWorker?this._layoutWorker.postMessage({cmd:\"init\",nodesPosition:s,nodesMass:l,nodesSize:h,edges:U,edgesWeight:d}):(this._layout.initNodes(s,l,h),this._layout.initEdges(U,d)),this.updateConfig()},s.prototype.step=function(e){var t=this.graph.nodes;if(this._layoutWorker){for(var i=new r(2*t.length),n=0;n<t.length;n++){var s=t[n];i[2*n]=s.layout.position[0],i[2*n+1]=s.layout.position[1]}this._layoutWorker.postMessage(i.buffer,[i.buffer]),this._layoutWorker.postMessage({cmd:\"update\",steps:e,temperature:this.temperature,coolDown:this.coolDown});for(var n=0;e>n;n++)this.temperature*=this.coolDown}else{o(this._$onupdate);for(var n=0;n<t.length;n++){var s=t[n];a.copy(this._layout.nodes[n].position,s.layout.position)}for(var n=0;e>n;n++)this._layout.temperature=this.temperature,this._layout.update(),this.temperature*=this.coolDown}},s.prototype._$onupdate=function(e){if(this._layoutWorker){for(var t=new Float32Array(e.data),i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];n.layout.position[0]=t[2*i],n.layout.position[1]=t[2*i+1]}this.onupdate&&this.onupdate()}else if(this._layout){for(var i=0;i<this.graph.nodes.length;i++){var n=this.graph.nodes[i];a.copy(n.layout.position,this._layout.nodes[i].position)}this.onupdate&&this.onupdate()}},s.prototype.dispose=function(){this._layoutWorker&&this._layoutWorker.terminate(),this._layoutWorker=null,this._layout=null},s}),i(\"echarts/layout/forceLayoutWorker\",[\"require\",\"zrender/tool/vector\"],function o(e){\"use strict\";function t(){this.subRegions=[],this.nSubRegions=0,this.node=null,this.mass=0,this.centerOfMass=null,this.bbox=new l(4),this.size=0}function i(){this.position=r.create(),this.force=r.create(),this.forcePrev=r.create(),this.speed=r.create(),this.speedPrev=r.create(),this.mass=1,this.inDegree=0,this.outDegree=0}function n(e,t){this.node1=e,this.node2=t,this.weight=1}function a(){this.barnesHutOptimize=!1,this.barnesHutTheta=1.5,this.repulsionByDegree=!1,this.preventNodeOverlap=!1,this.preventNodeEdgeOverlap=!1,this.strongGravity=!0,this.gravity=1,this.scaling=1,this.edgeWeightInfluence=1,this.center=[0,0],this.width=500,this.height=500,this.maxSpeedIncrease=1,this.nodes=[],this.edges=[],this.bbox=new l(4),this._rootRegion=new t,this._rootRegion.centerOfMass=r.create(),this._massArr=null,this._k=0}var r,s=\"undefined\"==typeof window&&\"undefined\"==typeof e;r=s?{create:function(e,t){var i=new Float32Array(2);return i[0]=e||0,i[1]=t||0,i},dist:function(e,t){var i=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(i*i+n*n)},len:function(e){var t=e[0],i=e[1];return Math.sqrt(t*t+i*i)},scaleAndAdd:function(e,t,i,n){return e[0]=t[0]+i[0]*n,e[1]=t[1]+i[1]*n,e},scale:function(e,t,i){return e[0]=t[0]*i,e[1]=t[1]*i,e},add:function(e,t,i){return e[0]=t[0]+i[0],e[1]=t[1]+i[1],e},sub:function(e,t,i){return e[0]=t[0]-i[0],e[1]=t[1]-i[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},normalize:function(e,t){var i=t[0],n=t[1],a=i*i+n*n;return a>0&&(a=1/Math.sqrt(a),e[0]=t[0]*a,e[1]=t[1]*a),e},negate:function(e,t){return e[0]=-t[0],e[1]=-t[1],e},copy:function(e,t){return e[0]=t[0],e[1]=t[1],e},set:function(e,t,i){return e[0]=t,e[1]=i,e}}:e(\"zrender/tool/vector\");var l=\"undefined\"==typeof Float32Array?Array:Float32Array;if(t.prototype.beforeUpdate=function(){for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].beforeUpdate();this.mass=0,this.centerOfMass&&(this.centerOfMass[0]=0,this.centerOfMass[1]=0),this.nSubRegions=0,this.node=null},t.prototype.afterUpdate=function(){this.subRegions.length=this.nSubRegions;for(var e=0;e<this.nSubRegions;e++)this.subRegions[e].afterUpdate()},t.prototype.addNode=function(e){if(0===this.nSubRegions){if(null==this.node)return void(this.node=e);this._addNodeToSubRegion(this.node),this.node=null}this._addNodeToSubRegion(e),this._updateCenterOfMass(e)},t.prototype.findSubRegion=function(e,t){for(var i=0;i<this.nSubRegions;i++){var n=this.subRegions[i];if(n.contain(e,t))return n}},t.prototype.contain=function(e,t){return this.bbox[0]<=e&&this.bbox[2]>=e&&this.bbox[1]<=t&&this.bbox[3]>=t},t.prototype.setBBox=function(e,t,i,n){this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n,this.size=(i-e+n-t)/2},t.prototype._newSubRegion=function(){var e=this.subRegions[this.nSubRegions];return e||(e=new t,this.subRegions[this.nSubRegions]=e),this.nSubRegions++,e},t.prototype._addNodeToSubRegion=function(e){var t=this.findSubRegion(e.position[0],e.position[1]),i=this.bbox;if(!t){var n=(i[0]+i[2])/2,a=(i[1]+i[3])/2,o=(i[2]-i[0])/2,r=(i[3]-i[1])/2,s=e.position[0]>=n?1:0,l=e.position[1]>=a?1:0,t=this._newSubRegion();t.setBBox(s*o+i[0],l*r+i[1],(s+1)*o+i[0],(l+1)*r+i[1])}t.addNode(e)},t.prototype._updateCenterOfMass=function(e){null==this.centerOfMass&&(this.centerOfMass=r.create());var t=this.centerOfMass[0]*this.mass,i=this.centerOfMass[1]*this.mass;t+=e.position[0]*e.mass,i+=e.position[1]*e.mass,this.mass+=e.mass,this.centerOfMass[0]=t/this.mass,this.centerOfMass[1]=i/this.mass},a.prototype.nodeToNodeRepulsionFactor=function(e,t,i){return i*i*e/t},a.prototype.edgeToNodeRepulsionFactor=function(e,t,i){return i*e/t},a.prototype.attractionFactor=function(e,t,i){return e*t/i},a.prototype.initNodes=function(e,t,n){this.temperature=1;var a=e.length/2;this.nodes.length=0;for(var o=\"undefined\"!=typeof n,r=0;a>r;r++){var s=new i;s.position[0]=e[2*r],s.position[1]=e[2*r+1],s.mass=t[r],o&&(s.size=n[r]),this.nodes.push(s)}this._massArr=t,o&&(this._sizeArr=n)},a.prototype.initEdges=function(e,t){var i=e.length/2;this.edges.length=0;for(var a=\"undefined\"!=typeof t,o=0;i>o;o++){var r=e[2*o],s=e[2*o+1],l=this.nodes[r],h=this.nodes[s];if(l&&h){l.outDegree++,h.inDegree++;var m=new n(l,h);a&&(m.weight=t[o]),this.edges.push(m)}}},a.prototype.update=function(){var e=this.nodes.length;if(this.updateBBox(),this._k=.4*this.scaling*Math.sqrt(this.width*this.height/e),this.barnesHutOptimize){this._rootRegion.setBBox(this.bbox[0],this.bbox[1],this.bbox[2],this.bbox[3]),this._rootRegion.beforeUpdate();for(var t=0;e>t;t++)this._rootRegion.addNode(this.nodes[t]);this._rootRegion.afterUpdate()}else{var i=0,n=this._rootRegion.centerOfMass;r.set(n,0,0);for(var t=0;e>t;t++){var a=this.nodes[t];i+=a.mass,r.scaleAndAdd(n,n,a.position,a.mass);\n\n}i>0&&r.scale(n,n,1/i)}this.updateForce(),this.updatePosition()},a.prototype.updateForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];r.copy(i.forcePrev,i.force),r.copy(i.speedPrev,i.speed),r.set(i.force,0,0)}this.updateNodeNodeForce(),this.gravity>0&&this.updateGravityForce(),this.updateEdgeForce(),this.preventNodeEdgeOverlap&&this.updateNodeEdgeForce()},a.prototype.updatePosition=function(){for(var e=this.nodes.length,t=r.create(),i=0;e>i;i++){var n=this.nodes[i],a=n.speed;r.scale(n.force,n.force,1/30);var o=r.len(n.force)+.1,s=Math.min(o,500)/o;r.scale(n.force,n.force,s),r.add(a,a,n.force),r.scale(a,a,this.temperature),r.sub(t,a,n.speedPrev);var l=r.len(t);if(l>0){r.scale(t,t,1/l);var h=r.len(n.speedPrev);h>0&&(l=Math.min(l/h,this.maxSpeedIncrease)*h,r.scaleAndAdd(a,n.speedPrev,t,l))}var m=r.len(a),s=Math.min(m,100)/(m+.1);r.scale(a,a,s),r.add(n.position,n.position,a)}},a.prototype.updateNodeNodeForce=function(){for(var e=this.nodes.length,t=0;e>t;t++){var i=this.nodes[t];if(this.barnesHutOptimize)this.applyRegionToNodeRepulsion(this._rootRegion,i);else for(var n=t+1;e>n;n++){var a=this.nodes[n];this.applyNodeToNodeRepulsion(i,a,!1)}}},a.prototype.updateGravityForce=function(){for(var e=0;e<this.nodes.length;e++)this.applyNodeGravity(this.nodes[e])},a.prototype.updateEdgeForce=function(){for(var e=0;e<this.edges.length;e++)this.applyEdgeAttraction(this.edges[e])},a.prototype.updateNodeEdgeForce=function(){for(var e=0;e<this.nodes.length;e++)for(var t=0;t<this.edges.length;t++)this.applyEdgeToNodeRepulsion(this.edges[t],this.nodes[e])},a.prototype.applyRegionToNodeRepulsion=function(){var e=r.create();return function(t,i){if(t.node)this.applyNodeToNodeRepulsion(t.node,i,!0);else{if(0===t.mass&&0===i.mass)return;r.sub(e,i.position,t.centerOfMass);var n=e[0]*e[0]+e[1]*e[1];if(n>this.barnesHutTheta*t.size*t.size){var a=this._k*this._k*(i.mass+t.mass)/(n+1);r.scaleAndAdd(i.force,i.force,e,2*a)}else for(var o=0;o<t.nSubRegions;o++)this.applyRegionToNodeRepulsion(t.subRegions[o],i)}}}(),a.prototype.applyNodeToNodeRepulsion=function(){var e=r.create();return function(t,i,n){if(t!==i&&(0!==t.mass||0!==i.mass)){r.sub(e,t.position,i.position);var a=e[0]*e[0]+e[1]*e[1];if(0!==a){var o,s=t.mass+i.mass,l=Math.sqrt(a);r.scale(e,e,1/l),this.preventNodeOverlap?(l=l-t.size-i.size,l>0?o=this.nodeToNodeRepulsionFactor(s,l,this._k):0>=l&&(o=this._k*this._k*10*s)):o=this.nodeToNodeRepulsionFactor(s,l,this._k),n||r.scaleAndAdd(t.force,t.force,e,2*o),r.scaleAndAdd(i.force,i.force,e,2*-o)}}}}(),a.prototype.applyEdgeAttraction=function(){var e=r.create();return function(t){var i=t.node1,n=t.node2;r.sub(e,i.position,n.position);var a,o=r.len(e);a=0===this.edgeWeightInfluence?1:1==this.edgeWeightInfluence?t.weight:Math.pow(t.weight,this.edgeWeightInfluence);var s;if(!(this.preventOverlap&&(o=o-i.size-n.size,0>=o))){var s=this.attractionFactor(a,o,this._k);r.scaleAndAdd(i.force,i.force,e,-s),r.scaleAndAdd(n.force,n.force,e,s)}}}(),a.prototype.applyNodeGravity=function(){var e=r.create();return function(t){r.sub(e,this.center,t.position),this.width>this.height?e[1]*=this.width/this.height:e[0]*=this.height/this.width;var i=r.len(e)/100;this.strongGravity?r.scaleAndAdd(t.force,t.force,e,i*this.gravity*t.mass):r.scaleAndAdd(t.force,t.force,e,this.gravity*t.mass/(i+1))}}(),a.prototype.applyEdgeToNodeRepulsion=function(){var e=r.create(),t=r.create(),i=r.create();return function(n,a){var o=n.node1,s=n.node2;if(o!==a&&s!==a){r.sub(e,s.position,o.position),r.sub(t,a.position,o.position);var l=r.len(e);r.scale(e,e,1/l);var h=r.dot(e,t);if(!(0>h||h>l)){r.scaleAndAdd(i,o.position,e,h);var m=r.dist(i,a.position)-a.size,V=this.edgeToNodeRepulsionFactor(a.mass,Math.max(m,.1),100);r.sub(e,a.position,i),r.normalize(e,e),r.scaleAndAdd(a.force,a.force,e,V),r.scaleAndAdd(o.force,o.force,e,-V),r.scaleAndAdd(s.force,s.force,e,-V)}}}}(),a.prototype.updateBBox=function(){for(var e=1/0,t=1/0,i=-(1/0),n=-(1/0),a=0;a<this.nodes.length;a++){var o=this.nodes[a].position;e=Math.min(e,o[0]),t=Math.min(t,o[1]),i=Math.max(i,o[0]),n=Math.max(n,o[1])}this.bbox[0]=e,this.bbox[1]=t,this.bbox[2]=i,this.bbox[3]=n},a.getWorkerCode=function(){var e=o.toString();return e.slice(e.indexOf(\"{\")+1,e.lastIndexOf(\"return\"))},s){var h=null;self.onmessage=function(e){if(e.data instanceof ArrayBuffer){if(!h)return;for(var t=new Float32Array(e.data),i=t.length/2,n=0;i>n;n++){var o=h.nodes[n];o.position[0]=t[2*n],o.position[1]=t[2*n+1]}}else switch(e.data.cmd){case\"init\":h||(h=new a),h.initNodes(e.data.nodesPosition,e.data.nodesMass,e.data.nodesSize),h.initEdges(e.data.edges,e.data.edgesWeight);break;case\"updateConfig\":if(h)for(var r in e.data.config)h[r]=e.data.config[r];break;case\"update\":var s=e.data.steps;if(h){var i=h.nodes.length,t=new Float32Array(2*i);h.temperature=e.data.temperature;for(var n=0;s>n;n++)h.update(),h.temperature*=e.data.coolDown;for(var n=0;i>n;n++){var o=h.nodes[n];t[2*n]=o.position[0],t[2*n+1]=o.position[1]}self.postMessage(t.buffer,[t.buffer])}else{var l=new Float32Array;self.postMessage(l.buffer,[l.buffer])}}}}return a}),i(\"echarts/chart/map\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Path\",\"zrender/shape/Circle\",\"zrender/shape/Rectangle\",\"zrender/shape/Line\",\"zrender/shape/Polygon\",\"zrender/shape/Ellipse\",\"zrender/shape/Image\",\"../component/dataRange\",\"../component/roamController\",\"../layer/heatmap\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/config\",\"zrender/tool/event\",\"../util/mapData/params\",\"../util/mapData/textFixed\",\"../util/mapData/geoCoord\",\"../util/projection/svg\",\"../util/projection/normal\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._onmousewheel=function(e){return r.__onmousewheel(e)},r._onmousedown=function(e){return r.__onmousedown(e)},r._onmousemove=function(e){return r.__onmousemove(e)},r._onmouseup=function(e){return r.__onmouseup(e)},r._onroamcontroller=function(e){return r.__onroamcontroller(e)},r._ondrhoverlink=function(e){return r.__ondrhoverlink(e)},this._isAlive=!0,this._selectedMode={},this._activeMapType={},this._clickable={},this._hoverable={},this._showLegendSymbol={},this._selected={},this._mapTypeMap={},this._mapDataMap={},this._nameMap={},this._specialArea={},this._refreshDelayTicket,this._mapDataRequireCounter,this._markAnimation=!1,this._hoverLinkMap={},this._roamMap={},this._scaleLimitMap={},this._mx,this._my,this._mousedown,this._justMove,this._curMapType,this.refresh(a),this.zr.on(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.on(c.EVENT.MOUSEDOWN,this._onmousedown),t.bind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),t.bind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Path\"),o=e(\"zrender/shape/Circle\"),r=e(\"zrender/shape/Rectangle\"),s=e(\"zrender/shape/Line\"),l=e(\"zrender/shape/Polygon\"),h=e(\"zrender/shape/Ellipse\"),m=e(\"zrender/shape/Image\");e(\"../component/dataRange\"),e(\"../component/roamController\");var V=e(\"../layer/heatmap\"),U=e(\"../config\");U.map={zlevel:0,z:2,mapType:\"china\",showLegendSymbol:!0,dataRangeHoverLink:!0,hoverable:!0,clickable:!0,itemStyle:{normal:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,areaStyle:{color:\"#ccc\"},label:{show:!1,textStyle:{color:\"rgb(139,69,19)\"}}},emphasis:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,areaStyle:{color:\"rgba(255,215,0,0.8)\"},label:{show:!1,textStyle:{color:\"rgb(100,0,0)\"}}}}};var d=e(\"../util/ecData\"),p=e(\"zrender/tool/util\"),c=e(\"zrender/config\"),u=e(\"zrender/tool/event\"),y=e(\"../util/mapData/params\").params,g=e(\"../util/mapData/textFixed\"),b=e(\"../util/mapData/geoCoord\");return t.prototype={type:U.CHART_TYPE_MAP,_buildShape:function(){var e=this.series;this.selectedMap={},this._activeMapType={};for(var t,i,n,a,o=this.component.legend,r={},s={},l={},h={},m=0,V=e.length;V>m;m++)if(e[m].type==U.CHART_TYPE_MAP&&(e[m]=this.reformOption(e[m]),i=e[m].mapType,s[i]=s[i]||{},s[i][m]=!0,l[i]=l[i]||e[m].mapValuePrecision,this._scaleLimitMap[i]=this._scaleLimitMap[i]||{},e[m].scaleLimit&&p.merge(this._scaleLimitMap[i],e[m].scaleLimit,!0),this._roamMap[i]=e[m].roam||this._roamMap[i],(null==this._hoverLinkMap[i]||this._hoverLinkMap[i])&&(this._hoverLinkMap[i]=e[m].dataRangeHoverLink),this._nameMap[i]=this._nameMap[i]||{},e[m].nameMap&&p.merge(this._nameMap[i],e[m].nameMap,!0),this._activeMapType[i]=!0,e[m].textFixed&&p.merge(g,e[m].textFixed,!0),e[m].geoCoord&&p.merge(b,e[m].geoCoord,!0),this._selectedMode[i]=this._selectedMode[i]||e[m].selectedMode,(null==this._hoverable[i]||this._hoverable[i])&&(this._hoverable[i]=e[m].hoverable),(null==this._clickable[i]||this._clickable[i])&&(this._clickable[i]=e[m].clickable),(null==this._showLegendSymbol[i]||this._showLegendSymbol[i])&&(this._showLegendSymbol[i]=e[m].showLegendSymbol),h[i]=h[i]||e[m].mapValueCalculation,t=e[m].name,this.selectedMap[t]=o?o.isSelected(t):!0,this.selectedMap[t])){r[i]=r[i]||{},n=e[m].data;for(var d=0,c=n.length;c>d;d++){a=this._nameChange(i,n[d].name),r[i][a]=r[i][a]||{seriesIndex:[],valueMap:{},precision:0};for(var u in n[d])\"value\"!=u?r[i][a][u]=n[d][u]:isNaN(n[d].value)||(null==r[i][a].value&&(r[i][a].value=0),r[i][a].precision=Math.max(this.getPrecision(+n[d].value),r[i][a].precision),r[i][a].value+=+n[d].value,r[i][a].valueMap[m]=+n[d].value);r[i][a].seriesIndex.push(m)}}this._mapDataRequireCounter=0;for(var f in r)this._mapDataRequireCounter++;this._clearSelected(),0===this._mapDataRequireCounter&&(this.clear(),this.zr&&this.zr.delShape(this.lastShapeList),this.lastShapeList=[]);for(var f in r){for(var c in r[f]){\"average\"==h[f]&&(r[f][c].value/=r[f][c].seriesIndex.length);var k=r[f][c].value;null!=k&&(r[f][c].value=k.toFixed(null==l[f]?r[f][c].precision:l[f])-0)}this._mapDataMap[f]=this._mapDataMap[f]||{},this._mapDataMap[f].mapData?this._mapDataCallback(f,r[f],s[f])(this._mapDataMap[f].mapData):y[f.replace(/\\|.*/,\"\")].getGeoJson&&(this._specialArea[f]=y[f.replace(/\\|.*/,\"\")].specialArea||this._specialArea[f],y[f.replace(/\\|.*/,\"\")].getGeoJson(this._mapDataCallback(f,r[f],s[f])))}},_mapDataCallback:function(t,i,n){var a=this;return function(o){a._isAlive&&null!=a._activeMapType[t]&&(-1!=t.indexOf(\"|\")&&(o=a._getSubMapData(t,o)),a._mapDataMap[t].mapData=o,o.firstChild?(a._mapDataMap[t].rate=1,a._mapDataMap[t].projection=e(\"../util/projection/svg\")):(a._mapDataMap[t].rate=.75,a._mapDataMap[t].projection=e(\"../util/projection/normal\")),a._buildMap(t,a._getProjectionData(t,o,n),i,n),a._buildMark(t,n),--a._mapDataRequireCounter<=0&&(a.addShapeList(),a.zr.refreshNextFrame()),a._buildHeatmap(t))}},_clearSelected:function(){for(var e in this._selected)this._activeMapType[this._mapTypeMap[e]]||(delete this._selected[e],delete this._mapTypeMap[e])},_getSubMapData:function(e,t){for(var i=e.replace(/^.*\\|/,\"\"),n=t.features,a=0,o=n.length;o>a;a++)if(n[a].properties&&n[a].properties.name==i){n=n[a],\"United States of America\"==i&&n.geometry.coordinates.length>1&&(n={geometry:{coordinates:n.geometry.coordinates.slice(5,6),type:n.geometry.type},id:n.id,properties:n.properties,type:n.type});break}return{type:\"FeatureCollection\",features:[n]}},_getProjectionData:function(e,t,i){var n,a=this._mapDataMap[e].projection,o=[],r=this._mapDataMap[e].bbox||a.getBbox(t,this._specialArea[e]);n=this._mapDataMap[e].hasRoam?this._mapDataMap[e].transform:this._getTransform(r,i,this._mapDataMap[e].rate);var s,l=this._mapDataMap[e].lastTransform||{scale:{}};n.left!=l.left||n.top!=l.top||n.scale.x!=l.scale.x||n.scale.y!=l.scale.y?(s=a.geoJson2Path(t,n,this._specialArea[e]),l=p.clone(n)):(n=this._mapDataMap[e].transform,s=this._mapDataMap[e].pathArray),this._mapDataMap[e].bbox=r,this._mapDataMap[e].transform=n,this._mapDataMap[e].lastTransform=l,this._mapDataMap[e].pathArray=s;for(var h=[n.left,n.top],m=0,V=s.length;V>m;m++)o.push(this._getSingleProvince(e,s[m],h));if(this._specialArea[e])for(var U in this._specialArea[e])o.push(this._getSpecialProjectionData(e,t,U,this._specialArea[e][U],h));if(\"china\"==e){var d=this.geo2pos(e,b[\"南海诸岛\"]||y[\"南海诸岛\"].textCoord),c=n.scale.x/10.5,u=[32*c+d[0],83*c+d[1]];g[\"南海诸岛\"]&&(u[0]+=g[\"南海诸岛\"][0],u[1]+=g[\"南海诸岛\"][1]),o.push({name:this._nameChange(e,\"南海诸岛\"),path:y[\"南海诸岛\"].getPath(d,c),position:h,textX:u[0],textY:u[1]})}return o},_getSpecialProjectionData:function(t,i,n,a,o){i=this._getSubMapData(\"x|\"+n,i);var r=e(\"../util/projection/normal\"),s=r.getBbox(i),l=this.geo2pos(t,[a.left,a.top]),h=this.geo2pos(t,[a.left+a.width,a.top+a.height]),m=Math.abs(h[0]-l[0]),V=Math.abs(h[1]-l[1]),U=s.width,d=s.height,p=m/.75/U,c=V/d;p>c?(p=.75*c,m=U*p):(c=p,p=.75*c,V=d*c);var u={OffsetLeft:l[0],OffsetTop:l[1],scale:{x:p,y:c}},y=r.geoJson2Path(i,u);return this._getSingleProvince(t,y[0],o)},_getSingleProvince:function(e,t,i){var n,a=t.properties.name,o=g[a]||[0,0];if(b[a])n=this.geo2pos(e,b[a]);else if(t.cp)n=[t.cp[0]+o[0],t.cp[1]+o[1]];else{var r=this._mapDataMap[e].bbox;n=this.geo2pos(e,[r.left+r.width/2,r.top+r.height/2]),n[0]+=o[0],n[1]+=o[1]}return t.name=this._nameChange(e,a),t.position=i,t.textX=n[0],t.textY=n[1],t},_getTransform:function(e,t,i){var n,a,o,r,s,l,h,m=this.series,V=this.zr.getWidth(),U=this.zr.getHeight(),d=Math.round(.02*Math.min(V,U));for(var p in t)n=m[p].mapLocation||{},o=n.x||o,s=n.y||s,l=n.width||l,h=n.height||h;a=this.parsePercent(o,V),a=isNaN(a)?d:a,r=this.parsePercent(s,U),r=isNaN(r)?d:r,l=null==l?V-a-2*d:this.parsePercent(l,V),h=null==h?U-r-2*d:this.parsePercent(h,U);var c=e.width,u=e.height,y=l/i/c,g=h/u;if(y>g?(y=g*i,l=c*y):(g=y,y=g*i,h=u*g),isNaN(o))switch(o=o||\"center\",o+\"\"){case\"center\":a=Math.floor((V-l)/2);break;case\"right\":a=V-l}if(isNaN(s))switch(s=s||\"center\",s+\"\"){case\"center\":r=Math.floor((U-h)/2);break;case\"bottom\":r=U-h}return{left:a,top:r,width:l,height:h,baseScale:1,scale:{x:y,y:g}}},_buildMap:function(e,t,i,m){for(var V,c,u,y,g,b,f,k,x,_,L,W=this.series,X=this.component.legend,v=this.component.dataRange,w=0,K=t.length;K>w;w++){if(k=p.clone(t[w]),x={name:k.name,path:k.path,position:p.clone(k.position)},c=k.name,u=i[c]){g=[u],V=\"\";for(var I=0,J=u.seriesIndex.length;J>I;I++){var C=W[u.seriesIndex[I]];g.push(C),V+=C.name+\" \",X&&this._showLegendSymbol[e]&&X.hasColor(C.name)&&this.shapeList.push(new o({zlevel:C.zlevel,z:C.z+1,position:p.clone(k.position),_mapType:e,style:{x:k.textX+3+7*I,y:k.textY-10,r:3,color:X.getColor(C.name)},hoverable:!1}))}y=u.value}else{u={name:c,value:\"-\"},V=\"\",g=[];for(var S in m)g.push(W[S]);y=\"-\"}switch(this.ecTheme.map&&g.push(this.ecTheme.map),g.push(U.map),b=v&&!isNaN(y)?v.getColor(y):null,k.color=k.color||b||this.getItemStyleColor(this.deepQuery(g,\"itemStyle.normal.color\"),u.seriesIndex,-1,u)||this.deepQuery(g,\"itemStyle.normal.areaStyle.color\"),k.strokeColor=k.strokeColor||this.deepQuery(g,\"itemStyle.normal.borderColor\"),k.lineWidth=k.lineWidth||this.deepQuery(g,\"itemStyle.normal.borderWidth\"),x.color=this.getItemStyleColor(this.deepQuery(g,\"itemStyle.emphasis.color\"),u.seriesIndex,-1,u)||this.deepQuery(g,\"itemStyle.emphasis.areaStyle.color\")||k.color,x.strokeColor=this.deepQuery(g,\"itemStyle.emphasis.borderColor\")||k.strokeColor,x.lineWidth=this.deepQuery(g,\"itemStyle.emphasis.borderWidth\")||k.lineWidth,k.brushType=x.brushType=k.brushType||\"both\",k.lineJoin=x.lineJoin=\"round\",k._name=x._name=c,f=this.deepQuery(g,\"itemStyle.normal.label.textStyle\"),L={zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:p.clone(k.position),_mapType:e,_geo:this.pos2geo(e,[k.textX,k.textY]),style:{brushType:\"fill\",x:k.textX,y:k.textY,text:this.getLabelText(c,y,g,\"normal\"),_name:c,textAlign:\"center\",color:this.deepQuery(g,\"itemStyle.normal.label.show\")?this.deepQuery(g,\"itemStyle.normal.label.textStyle.color\"):\"rgba(0,0,0,0)\",textFont:this.getFont(f)}},L._style=p.clone(L.style),L.highlightStyle=p.clone(L.style),this.deepQuery(g,\"itemStyle.emphasis.label.show\")?(L.highlightStyle.text=this.getLabelText(c,y,g,\"emphasis\"),L.highlightStyle.color=this.deepQuery(g,\"itemStyle.emphasis.label.textStyle.color\")||L.style.color,f=this.deepQuery(g,\"itemStyle.emphasis.label.textStyle\")||f,L.highlightStyle.textFont=this.getFont(f)):L.highlightStyle.color=\"rgba(0,0,0,0)\",_={zlevel:this.getZlevelBase(),z:this.getZBase(),position:p.clone(k.position),style:k,highlightStyle:x,_style:p.clone(k),_mapType:e},null!=k.scale&&(_.scale=p.clone(k.scale)),L=new n(L),_.style.shapeType){case\"rectangle\":_=new r(_);break;case\"line\":_=new s(_);break;case\"circle\":_=new o(_);break;case\"polygon\":_=new l(_);break;case\"ellipse\":_=new h(_);break;default:_=new a(_),_.buildPathArray&&(_.style.pathArray=_.buildPathArray(_.style.path))}(this._selectedMode[e]&&this._selected[c]&&u.selected!==!1||u.selected===!0)&&(L.style=L.highlightStyle,_.style=_.highlightStyle),L.clickable=_.clickable=this._clickable[e]&&(null==u.clickable||u.clickable),this._selectedMode[e]&&(this._selected[c]=null!=this._selected[c]?this._selected[c]:u.selected,this._mapTypeMap[c]=e,(null==u.selectable||u.selectable)&&(_.clickable=L.clickable=!0,_.onclick=L.onclick=this.shapeHandler.onclick)),this._hoverable[e]&&(null==u.hoverable||u.hoverable)?(L.hoverable=_.hoverable=!0,_.hoverConnect=L.id,L.hoverConnect=_.id):L.hoverable=_.hoverable=!1,d.pack(L,{name:V,tooltip:this.deepQuery(g,\"tooltip\")},0,u,0,c),this.shapeList.push(L),d.pack(_,{name:V,tooltip:this.deepQuery(g,\"tooltip\")},0,u,0,c),this.shapeList.push(_)}},_buildMark:function(e,t){this._seriesIndexToMapType=this._seriesIndexToMapType||{},this.markAttachStyle=this.markAttachStyle||{};var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];\"none\"==e&&(i=[0,0]);for(var n in t)this._seriesIndexToMapType[n]=e,this.markAttachStyle[n]={position:i,_mapType:e},this.buildMark(n)},_buildHeatmap:function(e){for(var t=this.series,i=0,n=t.length;n>i;i++)if(t[i].heatmap){var a=t[i].heatmap.data;if(t[i].heatmap.needsTransform===!1){for(var o=[],r=0,s=a.length;s>r;++r)o.push([a[r][3],a[r][4],a[r][2]]);var l=[0,0]}else{var h=t[i].heatmap._geoData;if(void 0===h){t[i].heatmap._geoData=[];for(var r=0,s=a.length;s>r;++r)t[i].heatmap._geoData[r]=a[r];h=t[i].heatmap._geoData}for(var s=a.length,U=0;s>U;++U)a[U]=this.geo2pos(e,[h[U][0],h[U][1]]);var l=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]}var d=new V(t[i].heatmap),p=d.getCanvas(a[0][3]?o:a,this.zr.getWidth(),this.zr.getHeight()),c=new m({zlevel:this.getZlevelBase(),z:this.getZBase()+1,position:l,scale:[1,1],hoverable:!1,style:{x:0,y:0,image:p,width:p.width,height:p.height}});c.type=\"heatmap\",c._mapType=e,this.shapeList.push(c),this.zr.addShape(c)}},getMarkCoord:function(e,t){return t.geoCoord||b[t.name]?this.geo2pos(this._seriesIndexToMapType[e],t.geoCoord||b[t.name]):[0,0]},getMarkGeo:function(e){return e.geoCoord||b[e.name]},_nameChange:function(e,t){return this._nameMap[e][t]||t},getLabelText:function(e,t,i,n){var a=this.deepQuery(i,\"itemStyle.\"+n+\".label.formatter\");return a?\"function\"==typeof a?a.call(this.myChart,e,t):\"string\"==typeof a?(a=a.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\"),a=a.replace(\"{a0}\",e).replace(\"{b0}\",t)):void 0:e},_findMapTypeByPos:function(e,t){var i,n,a,o,r;for(var s in this._mapDataMap)if(i=this._mapDataMap[s].transform,i&&this._roamMap[s]&&this._activeMapType[s]&&(n=i.left,a=i.top,o=i.width,r=i.height,e>=n&&n+o>=e&&t>=a&&a+r>=t))return s},__onmousewheel:function(e){function t(e,t){for(var i=0;i<e.pointList.length;i++){var n=e.pointList[i];n[0]*=t,n[1]*=t}var a=e.controlPointList;if(a)for(var i=0;i<a.length;i++){var n=a[i];n[0]*=t,n[1]*=t}}function i(e,t){e.xStart*=t,e.yStart*=t,e.xEnd*=t,e.yEnd*=t,null!=e.cpX1&&(e.cpX1*=t,e.cpY1*=t)}if(!(this.shapeList.length<=0)){for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o.__animating)return}var r,s,l=e.event,h=u.getX(l),m=u.getY(l),V=u.getDelta(l),d=e.mapTypeControl;d||(d={},s=this._findMapTypeByPos(h,m),s&&this._roamMap[s]&&\"move\"!=this._roamMap[s]&&(d[s]=!0));var p=!1;for(s in d)if(d[s]){p=!0;var c=this._mapDataMap[s].transform,y=c.left,g=c.top,b=c.width,f=c.height,k=this.pos2geo(s,[h-y,m-g]);if(V>0){if(r=1.2,null!=this._scaleLimitMap[s].max&&c.baseScale>=this._scaleLimitMap[s].max)continue}else if(r=1/1.2,null!=this._scaleLimitMap[s].min&&c.baseScale<=this._scaleLimitMap[s].min)continue;c.baseScale*=r,c.scale.x*=r,c.scale.y*=r,c.width=b*r,c.height=f*r,this._mapDataMap[s].hasRoam=!0,this._mapDataMap[s].transform=c,k=this.geo2pos(s,k),c.left-=k[0]-(h-y),c.top-=k[1]-(m-g),this._mapDataMap[s].transform=c,this.clearEffectShape(!0);for(var n=0,a=this.shapeList.length;a>n;n++){var o=this.shapeList[n];if(o._mapType==s){var x=o.type,_=o.style;switch(o.position[0]=c.left,o.position[1]=c.top,x){case\"path\":case\"symbol\":case\"circle\":case\"rectangle\":case\"polygon\":case\"line\":case\"ellipse\":case\"heatmap\":o.scale[0]*=r,o.scale[1]*=r;break;case\"mark-line\":i(_,r);break;case\"polyline\":t(_,r);break;case\"shape-bundle\":for(var L=0;L<_.shapeList.length;L++){var W=_.shapeList[L];\"mark-line\"==W.type?i(W.style,r):\"polyline\"==W.type&&t(W.style,r)}break;case\"icon\":case\"image\":k=this.geo2pos(s,o._geo),_.x=_._x=k[0]-_.width/2,_.y=_._y=k[1]-_.height/2;break;default:k=this.geo2pos(s,o._geo),_.x=k[0],_.y=k[1],\"text\"==x&&(o._style.x=o.highlightStyle.x=k[0],o._style.y=o.highlightStyle.y=k[1])}this.zr.modShape(o.id)}}}if(p){u.stop(l),this.zr.refreshNextFrame();var X=this;clearTimeout(this._refreshDelayTicket),this._refreshDelayTicket=setTimeout(function(){X&&X.shapeList&&X.animationEffect()},100),this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:\"scale\"},this.myChart)}}},__onmousedown:function(e){if(!(this.shapeList.length<=0)){var t=e.target;if(!t||!t.draggable){var i=e.event,n=u.getX(i),a=u.getY(i),o=this._findMapTypeByPos(n,a);if(o&&this._roamMap[o]&&\"scale\"!=this._roamMap[o]){this._mousedown=!0,this._mx=n,this._my=a,this._curMapType=o,this.zr.on(c.EVENT.MOUSEUP,this._onmouseup);var r=this;setTimeout(function(){r.zr.on(c.EVENT.MOUSEMOVE,r._onmousemove)},100)}}}},__onmousemove:function(e){if(this._mousedown&&this._isAlive){var t=e.event,i=u.getX(t),n=u.getY(t),a=this._mapDataMap[this._curMapType].transform;a.hasRoam=!0,a.left-=this._mx-i,a.top-=this._my-n,this._mx=i,this._my=n,this._mapDataMap[this._curMapType].transform=a;for(var o=0,r=this.shapeList.length;r>o;o++)this.shapeList[o]._mapType==this._curMapType&&(this.shapeList[o].position[0]=a.left,this.shapeList[o].position[1]=a.top,this.zr.modShape(this.shapeList[o].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:\"move\"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),this._justMove=!0,u.stop(t)}},__onmouseup:function(e){var t=e.event;this._mx=u.getX(t),this._my=u.getY(t),this._mousedown=!1;var i=this;setTimeout(function(){i._justMove&&i.animationEffect(),i._justMove=!1,i.zr.un(c.EVENT.MOUSEMOVE,i._onmousemove),i.zr.un(c.EVENT.MOUSEUP,i._onmouseup)},120)},__onroamcontroller:function(e){var t=e.event;t.zrenderX=this.zr.getWidth()/2,t.zrenderY=this.zr.getHeight()/2;var i=e.mapTypeControl,n=0,a=0,o=e.step;switch(e.roamType){case\"scaleUp\":return t.zrenderDelta=1,void this.__onmousewheel({event:t,mapTypeControl:i});case\"scaleDown\":return t.zrenderDelta=-1,void this.__onmousewheel({event:t,mapTypeControl:i});case\"up\":n=-o;break;case\"down\":n=o;break;case\"left\":a=-o;break;case\"right\":a=o}var r,s;for(s in i)this._mapDataMap[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,r.hasRoam=!0,r.left-=a,r.top-=n,this._mapDataMap[s].transform=r);for(var l=0,h=this.shapeList.length;h>l;l++)s=this.shapeList[l]._mapType,i[s]&&this._activeMapType[s]&&(r=this._mapDataMap[s].transform,this.shapeList[l].position[0]=r.left,this.shapeList[l].position[1]=r.top,this.zr.modShape(this.shapeList[l].id));this.messageCenter.dispatch(U.EVENT.MAP_ROAM,e.event,{type:\"move\"},this.myChart),this.clearEffectShape(!0),this.zr.refreshNextFrame(),clearTimeout(this.dircetionTimer);var m=this;this.dircetionTimer=setTimeout(function(){m.animationEffect()},150)},__ondrhoverlink:function(e){for(var t,i,n=0,a=this.shapeList.length;a>n;n++)t=this.shapeList[n]._mapType,this._hoverLinkMap[t]&&this._activeMapType[t]&&(i=d.get(this.shapeList[n],\"value\"),null!=i&&i>=e.valueMin&&i<=e.valueMax&&this.zr.addHoverShape(this.shapeList[n]))},onclick:function(e){if(this.isClick&&e.target&&!this._justMove&&\"icon\"!=e.target.type){this.isClick=!1;var t=e.target,i=t.style._name,n=this.shapeList.length,a=t._mapType||\"\";if(\"single\"==this._selectedMode[a])for(var o in this._selected)if(this._selected[o]&&this._mapTypeMap[o]==a){for(var r=0;n>r;r++)this.shapeList[r].style._name==o&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));o!=i&&(this._selected[o]=!1)}this._selected[i]=!this._selected[i];for(var r=0;n>r;r++)this.shapeList[r].style._name==i&&this.shapeList[r]._mapType==a&&(this.shapeList[r].style=this._selected[i]?this.shapeList[r].highlightStyle:this.shapeList[r]._style,this.zr.modShape(this.shapeList[r].id));this.messageCenter.dispatch(U.EVENT.MAP_SELECTED,e.event,{selected:this._selected,target:i},this.myChart),this.zr.refreshNextFrame();var s=this;setTimeout(function(){s.zr.trigger(c.EVENT.MOUSEMOVE,e.event)},100)}},refresh:function(e){e&&(this.option=e,this.series=e.series),this._mapDataRequireCounter>0?this.clear():this.backupShapeList(),this._buildShape(),this.zr.refreshHover()},ondataRange:function(e,t){this.component.dataRange&&(this.refresh(),t.needRefresh=!0)},pos2geo:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.pos2geo(this._mapDataMap[e].transform,t):null},getGeoByPos:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top];return t instanceof Array?(t[0]-=i[0],t[1]-=i[1]):(t.x-=i[0],t.y-=i[1]),this.pos2geo(e,t)},geo2pos:function(e,t){return this._mapDataMap[e].transform?this._mapDataMap[e].projection.geo2pos(this._mapDataMap[e].transform,t):null},getPosByGeo:function(e,t){if(!this._mapDataMap[e].transform)return null;var i=this.geo2pos(e,t);return i[0]+=this._mapDataMap[e].transform.left,i[1]+=this._mapDataMap[e].transform.top,i},getMapPosition:function(e){return this._mapDataMap[e].transform?[this._mapDataMap[e].transform.left,this._mapDataMap[e].transform.top]:null},onbeforDispose:function(){this._isAlive=!1,this.zr.un(c.EVENT.MOUSEWHEEL,this._onmousewheel),this.zr.un(c.EVENT.MOUSEDOWN,this._onmousedown),this.messageCenter.unbind(U.EVENT.ROAMCONTROLLER,this._onroamcontroller),this.messageCenter.unbind(U.EVENT.DATA_RANGE_HOVERLINK,this._ondrhoverlink)}},p.inherits(t,i),e(\"../chart\").define(\"map\",t),t}),i(\"zrender/shape/Path\",[\"require\",\"./Base\",\"./util/PathProxy\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=e(\"./util/PathProxy\"),n=i.PathSegment,a=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},o=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(a(e)*a(t))},r=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(o(e,t))},s=function(e){t.call(this,e)};return s.prototype={type:\"path\",buildPathArray:function(e,t,i){if(!e)return[];t=t||0,i=i||0;var a=e,o=[\"m\",\"M\",\"l\",\"L\",\"v\",\"V\",\"h\",\"H\",\"z\",\"Z\",\"c\",\"C\",\"q\",\"Q\",\"t\",\"T\",\"s\",\"S\",\"a\",\"A\"];a=a.replace(/-/g,\" -\"),a=a.replace(/  /g,\" \"),a=a.replace(/ /g,\",\"),a=a.replace(/,,/g,\",\");var r;for(r=0;r<o.length;r++)a=a.replace(new RegExp(o[r],\"g\"),\"|\"+o[r]);var s=a.split(\"|\"),l=[],h=0,m=0;for(r=1;r<s.length;r++){var V=s[r],U=V.charAt(0);V=V.slice(1),V=V.replace(new RegExp(\"e,-\",\"g\"),\"e-\");var d=V.split(\",\");d.length>0&&\"\"===d[0]&&d.shift();for(var p=0;p<d.length;p++)d[p]=parseFloat(d[p]);for(;d.length>0&&!isNaN(d[0]);){var c,u,y,g,b,f,k,x,_=null,L=[],W=h,X=m;switch(U){case\"l\":h+=d.shift(),m+=d.shift(),_=\"L\",L.push(h,m);break;case\"L\":h=d.shift(),m=d.shift(),L.push(h,m);break;case\"m\":h+=d.shift(),m+=d.shift(),_=\"M\",L.push(h,m),U=\"l\";break;case\"M\":h=d.shift(),m=d.shift(),_=\"M\",L.push(h,m),U=\"L\";break;case\"h\":h+=d.shift(),_=\"L\",L.push(h,m);break;case\"H\":h=d.shift(),_=\"L\",L.push(h,m);break;case\"v\":m+=d.shift(),_=\"L\",L.push(h,m);break;case\"V\":m=d.shift(),_=\"L\",L.push(h,m);break;case\"C\":L.push(d.shift(),d.shift(),d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case\"c\":L.push(h+d.shift(),m+d.shift(),h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_=\"C\",L.push(h,m);break;case\"S\":c=h,u=m,y=l[l.length-1],\"C\"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,d.shift(),d.shift()),h=d.shift(),m=d.shift(),_=\"C\",L.push(h,m);break;case\"s\":c=h,u=m,y=l[l.length-1],\"C\"===y.command&&(c=h+(h-y.points[2]),u=m+(m-y.points[3])),L.push(c,u,h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_=\"C\",L.push(h,m);break;case\"Q\":L.push(d.shift(),d.shift()),h=d.shift(),m=d.shift(),L.push(h,m);break;case\"q\":L.push(h+d.shift(),m+d.shift()),h+=d.shift(),m+=d.shift(),_=\"Q\",L.push(h,m);break;case\"T\":c=h,u=m,y=l[l.length-1],\"Q\"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h=d.shift(),m=d.shift(),_=\"Q\",L.push(c,u,h,m);break;case\"t\":c=h,u=m,y=l[l.length-1],\"Q\"===y.command&&(c=h+(h-y.points[0]),u=m+(m-y.points[1])),h+=d.shift(),m+=d.shift(),_=\"Q\",L.push(c,u,h,m);break;case\"A\":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h=d.shift(),m=d.shift(),_=\"A\",L=this._convertPoint(W,X,h,m,k,x,g,b,f);break;case\"a\":g=d.shift(),b=d.shift(),f=d.shift(),k=d.shift(),x=d.shift(),W=h,X=m,h+=d.shift(),m+=d.shift(),_=\"A\",L=this._convertPoint(W,X,h,m,k,x,g,b,f)}for(var v=0,w=L.length;w>v;v+=2)L[v]+=t,L[v+1]+=i;l.push(new n(_||U,L))}(\"z\"===U||\"Z\"===U)&&l.push(new n(\"z\",[]))}return l},_convertPoint:function(e,t,i,n,a,s,l,h,m){var V=m*(Math.PI/180),U=Math.cos(V)*(e-i)/2+Math.sin(V)*(t-n)/2,d=-1*Math.sin(V)*(e-i)/2+Math.cos(V)*(t-n)/2,p=U*U/(l*l)+d*d/(h*h);p>1&&(l*=Math.sqrt(p),h*=Math.sqrt(p));var c=Math.sqrt((l*l*h*h-l*l*d*d-h*h*U*U)/(l*l*d*d+h*h*U*U));a===s&&(c*=-1),isNaN(c)&&(c=0);var u=c*l*d/h,y=c*-h*U/l,g=(e+i)/2+Math.cos(V)*u-Math.sin(V)*y,b=(t+n)/2+Math.sin(V)*u+Math.cos(V)*y,f=r([1,0],[(U-u)/l,(d-y)/h]),k=[(U-u)/l,(d-y)/h],x=[(-1*U-u)/l,(-1*d-y)/h],_=r(k,x);return o(k,x)<=-1&&(_=Math.PI),o(k,x)>=1&&(_=0),0===s&&_>0&&(_-=2*Math.PI),1===s&&0>_&&(_+=2*Math.PI),[g,b,l,h,f,_,V,s]},buildPath:function(e,t){var i=t.path,n=t.x||0,a=t.y||0;t.pathArray=t.pathArray||this.buildPathArray(i,n,a);for(var o=t.pathArray,r=t.pointList=[],s=[],l=0,h=o.length;h>l;l++){\"M\"==o[l].command.toUpperCase()&&(s.length>0&&r.push(s),s=[]);for(var m=o[l].points,V=0,U=m.length;U>V;V+=2)s.push([m[V],m[V+1]])}s.length>0&&r.push(s);for(var l=0,h=o.length;h>l;l++){var d=o[l].command,m=o[l].points;switch(d){case\"L\":e.lineTo(m[0],m[1]);break;case\"M\":e.moveTo(m[0],m[1]);break;case\"C\":e.bezierCurveTo(m[0],m[1],m[2],m[3],m[4],m[5]);break;case\"Q\":e.quadraticCurveTo(m[0],m[1],m[2],m[3]);break;case\"A\":var p=m[0],c=m[1],u=m[2],y=m[3],g=m[4],b=m[5],f=m[6],k=m[7],x=u>y?u:y,_=u>y?1:u/y,L=u>y?y/u:1;e.translate(p,c),e.rotate(f),e.scale(_,L),e.arc(0,0,x,g,g+b,1-k),e.scale(1/_,1/L),e.rotate(-f),e.translate(-p,-c);break;case\"z\":e.closePath()}}},getRect:function(e){if(e.__rect)return e.__rect;var t;t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0;for(var i=Number.MAX_VALUE,n=Number.MIN_VALUE,a=Number.MAX_VALUE,o=Number.MIN_VALUE,r=e.x||0,s=e.y||0,l=e.pathArray||this.buildPathArray(e.path),h=0;h<l.length;h++)for(var m=l[h].points,V=0;V<m.length;V++)V%2===0?(m[V]+r<i&&(i=m[V]),m[V]+r>n&&(n=m[V])):(m[V]+s<a&&(a=m[V]),m[V]+s>o&&(o=m[V]));var U;return U=i===Number.MAX_VALUE||n===Number.MIN_VALUE||a===Number.MAX_VALUE||o===Number.MIN_VALUE?{x:0,y:0,width:0,height:0}:{x:Math.round(i-t/2),y:Math.round(a-t/2),width:n-i+t,height:o-a+t},e.__rect=U,U}},e(\"../tool/util\").inherits(s,t),s}),i(\"zrender/shape/Ellipse\",[\"require\",\"./Base\",\"../tool/util\"],function(e){var t=e(\"./Base\"),i=function(e){t.call(this,e)};return i.prototype={type:\"ellipse\",buildPath:function(e,t){var i=.5522848,n=t.x,a=t.y,o=t.a,r=t.b,s=o*i,l=r*i;e.moveTo(n-o,a),e.bezierCurveTo(n-o,a-l,n-s,a-r,n,a-r),e.bezierCurveTo(n+s,a-r,n+o,a-l,n+o,a),e.bezierCurveTo(n+o,a+l,n+s,a+r,n,a+r),e.bezierCurveTo(n-s,a+r,n-o,a+l,n-o,a),e.closePath()},getRect:function(e){if(e.__rect)return e.__rect;var t;return t=\"stroke\"==e.brushType||\"fill\"==e.brushType?e.lineWidth||1:0,e.__rect={x:Math.round(e.x-e.a-t/2),\ny:Math.round(e.y-e.b-t/2),width:2*e.a+t,height:2*e.b+t},e.__rect}},e(\"../tool/util\").inherits(i,t),i}),i(\"echarts/component/roamController\",[\"require\",\"./base\",\"zrender/shape/Rectangle\",\"zrender/shape/Sector\",\"zrender/shape/Circle\",\"../config\",\"zrender/tool/util\",\"zrender/tool/color\",\"zrender/tool/event\",\"../component\"],function(e){function t(e,t,n,a,o){if(this.rcOption={},a.roamController&&a.roamController.show){if(!a.roamController.mapTypeControl)return void console.error(\"option.roamController.mapTypeControl has not been defined.\");i.call(this,e,t,n,a,o),this.rcOption=a.roamController;var r=this;this._drictionMouseDown=function(e){return r.__drictionMouseDown(e)},this._drictionMouseUp=function(e){return r.__drictionMouseUp(e)},this._drictionMouseMove=function(e){return r.__drictionMouseMove(e)},this._drictionMouseOut=function(e){return r.__drictionMouseOut(e)},this._scaleHandler=function(e){return r.__scaleHandler(e)},this.refresh(a)}}var i=e(\"./base\"),n=e(\"zrender/shape/Rectangle\"),a=e(\"zrender/shape/Sector\"),o=e(\"zrender/shape/Circle\"),r=e(\"../config\");r.roamController={zlevel:0,z:4,show:!0,x:\"left\",y:\"top\",width:80,height:120,backgroundColor:\"rgba(0,0,0,0)\",borderColor:\"#ccc\",borderWidth:0,padding:5,handleColor:\"#6495ed\",fillerColor:\"#fff\",step:15,mapTypeControl:null};var s=e(\"zrender/tool/util\"),l=e(\"zrender/tool/color\"),h=e(\"zrender/tool/event\");return t.prototype={type:r.COMPONENT_TYPE_ROAMCONTROLLER,_buildShape:function(){if(this.rcOption.show){this._itemGroupLocation=this._getItemGroupLocation(),this._buildBackground(),this._buildItem();for(var e=0,t=this.shapeList.length;t>e;e++)this.zr.addShape(this.shapeList[e])}},_buildItem:function(){this.shapeList.push(this._getDirectionShape(\"up\")),this.shapeList.push(this._getDirectionShape(\"down\")),this.shapeList.push(this._getDirectionShape(\"left\")),this.shapeList.push(this._getDirectionShape(\"right\")),this.shapeList.push(this._getScaleShape(\"scaleUp\")),this.shapeList.push(this._getScaleShape(\"scaleDown\"))},_getDirectionShape:function(e){var t=this._itemGroupLocation.r,i=this._itemGroupLocation.x+t,n=this._itemGroupLocation.y+t,o={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:i,y:n,r:t,startAngle:-45,endAngle:45,color:this.rcOption.handleColor,text:\">\",textX:i+t/2+4,textY:n-.5,textAlign:\"center\",textBaseline:\"middle\",textPosition:\"specific\",textColor:this.rcOption.fillerColor,textFont:Math.floor(t/2)+\"px arial\"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:\"fill\"},clickable:!0};switch(e){case\"up\":o.rotation=[Math.PI/2,i,n];break;case\"left\":o.rotation=[Math.PI,i,n];break;case\"down\":o.rotation=[-Math.PI/2,i,n]}return o=new a(o),o._roamType=e,o.onmousedown=this._drictionMouseDown,o.onmouseup=this._drictionMouseUp,o.onmousemove=this._drictionMouseMove,o.onmouseout=this._drictionMouseOut,o},_getScaleShape:function(e){var t=this._itemGroupLocation.width,i=this._itemGroupLocation.height-t;i=0>i?20:i;var n=Math.min(t/2-5,i)/2,a=this._itemGroupLocation.x+(\"scaleDown\"===e?t-n:n),r=this._itemGroupLocation.y+this._itemGroupLocation.height-n,s={zlevel:this.getZlevelBase(),z:this.getZBase(),style:{x:a,y:r,r:n,color:this.rcOption.handleColor,text:\"scaleDown\"===e?\"-\":\"+\",textX:a,textY:r-2,textAlign:\"center\",textBaseline:\"middle\",textPosition:\"specific\",textColor:this.rcOption.fillerColor,textFont:Math.floor(n)+\"px verdana\"},highlightStyle:{color:l.lift(this.rcOption.handleColor,-.2),brushType:\"fill\"},clickable:!0};return s=new o(s),s._roamType=e,s.onmousedown=this._scaleHandler,s},_buildBackground:function(){var e=this.reformCssArray(this.rcOption.padding);this.shapeList.push(new n({zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{x:this._itemGroupLocation.x-e[3],y:this._itemGroupLocation.y-e[0],width:this._itemGroupLocation.width+e[3]+e[1],height:this._itemGroupLocation.height+e[0]+e[2],brushType:0===this.rcOption.borderWidth?\"fill\":\"both\",color:this.rcOption.backgroundColor,strokeColor:this.rcOption.borderColor,lineWidth:this.rcOption.borderWidth}}))},_getItemGroupLocation:function(){var e,t=this.reformCssArray(this.rcOption.padding),i=this.rcOption.width,n=this.rcOption.height,a=this.zr.getWidth(),o=this.zr.getHeight();switch(this.rcOption.x){case\"center\":e=Math.floor((a-i)/2);break;case\"left\":e=t[3]+this.rcOption.borderWidth;break;case\"right\":e=a-i-t[1]-t[3]-2*this.rcOption.borderWidth;break;default:e=this.parsePercent(this.rcOption.x,a)}var r;switch(this.rcOption.y){case\"top\":r=t[0]+this.rcOption.borderWidth;break;case\"bottom\":r=o-n-t[0]-t[2]-2*this.rcOption.borderWidth;break;case\"center\":r=Math.floor((o-n)/2);break;default:r=this.parsePercent(this.rcOption.y,o)}return{x:e,y:r,r:i/2,width:i,height:n}},__drictionMouseDown:function(e){this.mousedown=!0,this._drictionHandlerOn(e)},__drictionMouseUp:function(e){this.mousedown=!1,this._drictionHandlerOff(e)},__drictionMouseMove:function(e){this.mousedown&&this._drictionHandlerOn(e)},__drictionMouseOut:function(e){this._drictionHandlerOff(e)},_drictionHandlerOn:function(e){this._dispatchEvent(e.event,e.target._roamType),clearInterval(this.dircetionTimer);var t=this;this.dircetionTimer=setInterval(function(){t._dispatchEvent(e.event,e.target._roamType)},100),h.stop(e.event)},_drictionHandlerOff:function(){clearInterval(this.dircetionTimer)},__scaleHandler:function(e){this._dispatchEvent(e.event,e.target._roamType),h.stop(e.event)},_dispatchEvent:function(e,t){this.messageCenter.dispatch(r.EVENT.ROAMCONTROLLER,e,{roamType:t,mapTypeControl:this.rcOption.mapTypeControl,step:this.rcOption.step},this.myChart)},refresh:function(e){e&&(this.option=e||this.option,this.option.roamController=this.reformOption(this.option.roamController),this.rcOption=this.option.roamController),this.clear(),this._buildShape()}},s.inherits(t,i),e(\"../component\").define(\"roamController\",t),t}),i(\"echarts/layer/heatmap\",[\"require\"],function(){function e(e){if(this.option=e,e)for(var i in t)this.option[i]=void 0!==e[i]?e[i]:t[i];else this.option=t}var t={blurSize:30,gradientColors:[\"blue\",\"cyan\",\"lime\",\"yellow\",\"red\"],minAlpha:.05,valueScale:1,opacity:1},i=20,n=256;return e.prototype={getCanvas:function(e,t,a){var o=this._getBrush(),r=this._getGradient(),s=i+this.option.blurSize,l=document.createElement(\"canvas\");l.width=t,l.height=a;for(var h=l.getContext(\"2d\"),m=e.length,V=0;m>V;++V){var U=e[V],d=U[0],p=U[1],c=U[2],u=Math.min(1,Math.max(c*this.option.valueScale||this.option.minAlpha,this.option.minAlpha));h.globalAlpha=u,h.drawImage(o,d-s,p-s)}for(var y=h.getImageData(0,0,l.width,l.height),g=y.data,m=g.length/4;m--;){var b=4*m+3,u=g[b]/256,f=Math.floor(u*(n-1));g[b-3]=r[4*f],g[b-2]=r[4*f+1],g[b-1]=r[4*f+2],g[b]*=this.option.opacity}return h.putImageData(y,0,0),l},_getBrush:function(){if(!this._brushCanvas){this._brushCanvas=document.createElement(\"canvas\");var e=i+this.option.blurSize,t=2*e;this._brushCanvas.width=t,this._brushCanvas.height=t;var n=this._brushCanvas.getContext(\"2d\");n.shadowOffsetX=t,n.shadowBlur=this.option.blurSize,n.shadowColor=\"black\",n.beginPath(),n.arc(-e,e,i,0,2*Math.PI,!0),n.closePath(),n.fill()}return this._brushCanvas},_getGradient:function(){if(!this._gradientPixels){var e=n,t=document.createElement(\"canvas\");t.width=1,t.height=e;for(var i=t.getContext(\"2d\"),a=i.createLinearGradient(0,0,0,e),o=this.option.gradientColors.length,r=0;o>r;++r)\"string\"==typeof this.option.gradientColors[r]?a.addColorStop((r+1)/o,this.option.gradientColors[r]):a.addColorStop(this.option.gradientColors[r].offset,this.option.gradientColors[r].color);i.fillStyle=a,i.fillRect(0,0,1,e),this._gradientPixels=i.getImageData(0,0,1,e).data}return this._gradientPixels}},e}),i(\"echarts/util/mapData/params\",[\"require\"],function(e){function t(e){if(!e.UTF8Encoding)return e;for(var t=e.features,n=0;n<t.length;n++)for(var a=t[n],o=a.geometry.coordinates,r=a.geometry.encodeOffsets,s=0;s<o.length;s++){var l=o[s];if(\"Polygon\"===a.geometry.type)o[s]=i(l,r[s]);else if(\"MultiPolygon\"===a.geometry.type)for(var h=0;h<l.length;h++){var m=l[h];l[h]=i(m,r[s][h])}}return e.UTF8Encoding=!1,e}function i(e,t){for(var i=[],n=t[0],a=t[1],o=0;o<e.length;o+=2){var r=e.charCodeAt(o)-64,s=e.charCodeAt(o+1)-64;r=r>>1^-(1&r),s=s>>1^-(1&s),r+=n,s+=a,n=r,a=s,i.push([r/1024,s/1024])}return i}var n={none:{getGeoJson:function(e){e({type:\"FeatureCollection\",features:[{type:\"Feature\",geometry:{coordinates:[],encodeOffsets:[],type:\"Polygon\"},properties:{}}]})}},world:{getGeoJson:function(i){e([\"./geoJson/world_geo\"],function(e){i(t(e))})}},china:{getGeoJson:function(i){e([\"./geoJson/china_geo\"],function(e){i(t(e))})}},\"南海诸岛\":{textCoord:[126,25],getPath:function(e,t){for(var i=[[[0,3.5],[7,11.2],[15,11.9],[30,7],[42,.7],[52,.7],[56,7.7],[59,.7],[64,.7],[64,0],[5,0],[0,3.5]],[[13,16.1],[19,14.7],[16,21.7],[11,23.1],[13,16.1]],[[12,32.2],[14,38.5],[15,38.5],[13,32.2],[12,32.2]],[[16,47.6],[12,53.2],[13,53.2],[18,47.6],[16,47.6]],[[6,64.4],[8,70],[9,70],[8,64.4],[6,64.4]],[[23,82.6],[29,79.8],[30,79.8],[25,82.6],[23,82.6]],[[37,70.7],[43,62.3],[44,62.3],[39,70.7],[37,70.7]],[[48,51.1],[51,45.5],[53,45.5],[50,51.1],[48,51.1]],[[51,35],[51,28.7],[53,28.7],[53,35],[51,35]],[[52,22.4],[55,17.5],[56,17.5],[53,22.4],[52,22.4]],[[58,12.6],[62,7],[63,7],[60,12.6],[58,12.6]],[[0,3.5],[0,93.1],[64,93.1],[64,0],[63,0],[63,92.4],[1,92.4],[1,3.5],[0,3.5]]],n=\"\",a=e[0],o=e[1],r=0,s=i.length;s>r;r++){n+=\"M \"+((i[r][0][0]*t+a).toFixed(2)-0)+\" \"+((i[r][0][1]*t+o).toFixed(2)-0)+\" \";for(var l=1,h=i[r].length;h>l;l++)n+=\"L \"+((i[r][l][0]*t+a).toFixed(2)-0)+\" \"+((i[r][l][1]*t+o).toFixed(2)-0)+\" \"}return n+\" Z\"}},\"新疆\":{getGeoJson:function(i){e([\"./geoJson/xin_jiang_geo\"],function(e){i(t(e))})}},\"西藏\":{getGeoJson:function(i){e([\"./geoJson/xi_zang_geo\"],function(e){i(t(e))})}},\"内蒙古\":{getGeoJson:function(i){e([\"./geoJson/nei_meng_gu_geo\"],function(e){i(t(e))})}},\"青海\":{getGeoJson:function(i){e([\"./geoJson/qing_hai_geo\"],function(e){i(t(e))})}},\"四川\":{getGeoJson:function(i){e([\"./geoJson/si_chuan_geo\"],function(e){i(t(e))})}},\"黑龙江\":{getGeoJson:function(i){e([\"./geoJson/hei_long_jiang_geo\"],function(e){i(t(e))})}},\"甘肃\":{getGeoJson:function(i){e([\"./geoJson/gan_su_geo\"],function(e){i(t(e))})}},\"云南\":{getGeoJson:function(i){e([\"./geoJson/yun_nan_geo\"],function(e){i(t(e))})}},\"广西\":{getGeoJson:function(i){e([\"./geoJson/guang_xi_geo\"],function(e){i(t(e))})}},\"湖南\":{getGeoJson:function(i){e([\"./geoJson/hu_nan_geo\"],function(e){i(t(e))})}},\"陕西\":{getGeoJson:function(i){e([\"./geoJson/shan_xi_1_geo\"],function(e){i(t(e))})}},\"广东\":{getGeoJson:function(i){e([\"./geoJson/guang_dong_geo\"],function(e){i(t(e))})}},\"吉林\":{getGeoJson:function(i){e([\"./geoJson/ji_lin_geo\"],function(e){i(t(e))})}},\"河北\":{getGeoJson:function(i){e([\"./geoJson/he_bei_geo\"],function(e){i(t(e))})}},\"湖北\":{getGeoJson:function(i){e([\"./geoJson/hu_bei_geo\"],function(e){i(t(e))})}},\"贵州\":{getGeoJson:function(i){e([\"./geoJson/gui_zhou_geo\"],function(e){i(t(e))})}},\"山东\":{getGeoJson:function(i){e([\"./geoJson/shan_dong_geo\"],function(e){i(t(e))})}},\"江西\":{getGeoJson:function(i){e([\"./geoJson/jiang_xi_geo\"],function(e){i(t(e))})}},\"河南\":{getGeoJson:function(i){e([\"./geoJson/he_nan_geo\"],function(e){i(t(e))})}},\"辽宁\":{getGeoJson:function(i){e([\"./geoJson/liao_ning_geo\"],function(e){i(t(e))})}},\"山西\":{getGeoJson:function(i){e([\"./geoJson/shan_xi_2_geo\"],function(e){i(t(e))})}},\"安徽\":{getGeoJson:function(i){e([\"./geoJson/an_hui_geo\"],function(e){i(t(e))})}},\"福建\":{getGeoJson:function(i){e([\"./geoJson/fu_jian_geo\"],function(e){i(t(e))})}},\"浙江\":{getGeoJson:function(i){e([\"./geoJson/zhe_jiang_geo\"],function(e){i(t(e))})}},\"江苏\":{getGeoJson:function(i){e([\"./geoJson/jiang_su_geo\"],function(e){i(t(e))})}},\"重庆\":{getGeoJson:function(i){e([\"./geoJson/chong_qing_geo\"],function(e){i(t(e))})}},\"宁夏\":{getGeoJson:function(i){e([\"./geoJson/ning_xia_geo\"],function(e){i(t(e))})}},\"海南\":{getGeoJson:function(i){e([\"./geoJson/hai_nan_geo\"],function(e){i(t(e))})}},\"台湾\":{getGeoJson:function(i){e([\"./geoJson/tai_wan_geo\"],function(e){i(t(e))})}},\"北京\":{getGeoJson:function(i){e([\"./geoJson/bei_jing_geo\"],function(e){i(t(e))})}},\"天津\":{getGeoJson:function(i){e([\"./geoJson/tian_jin_geo\"],function(e){i(t(e))})}},\"上海\":{getGeoJson:function(i){e([\"./geoJson/shang_hai_geo\"],function(e){i(t(e))})}},\"香港\":{getGeoJson:function(i){e([\"./geoJson/xiang_gang_geo\"],function(e){i(t(e))})}},\"澳门\":{getGeoJson:function(i){e([\"./geoJson/ao_men_geo\"],function(e){i(t(e))})}}};return{decode:t,params:n}}),i(\"echarts/util/mapData/textFixed\",[],function(){return{\"广东\":[0,-10],\"香港\":[10,10],\"澳门\":[-10,18],\"黑龙江\":[0,20],\"天津\":[5,5],\"深圳市\":[-35,0],\"红河哈尼族彝族自治州\":[0,20],\"楚雄彝族自治州\":[-5,15],\"石河子市\":[-5,5],\"五家渠市\":[0,-10],\"昌吉回族自治州\":[10,10],\"昌江黎族自治县\":[0,20],\"陵水黎族自治县\":[0,20],\"东方市\":[0,20],\"渭南市\":[0,20]}}),i(\"echarts/util/mapData/geoCoord\",[],function(){return{Russia:[100,60],\"United States of America\":[-99,38]}}),i(\"echarts/util/projection/svg\",[\"require\",\"zrender/shape/Path\"],function(e){function t(e){return parseFloat(e||0)}function i(e){for(var i=e.firstChild;\"svg\"!=i.nodeName.toLowerCase()||1!=i.nodeType;)i=i.nextSibling;var n=t(i.getAttribute(\"x\")),a=t(i.getAttribute(\"y\")),o=t(i.getAttribute(\"width\")),r=t(i.getAttribute(\"height\"));return{left:n,top:a,width:o,height:r}}function n(e,t){function i(e){var t=e.tagName;if(m[t]){var o=m[t](e,n);o&&(o.scale=n,o.properties={name:e.getAttribute(\"name\")||\"\"},o.id=e.id,s(o,e),a.push(o))}for(var r=e.childNodes,l=0,h=r.length;h>l;l++)i(r[l])}var n=[t.scale.x,t.scale.y],a=[];return i(e),a}function a(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]/e.scale.x,i[1]/e.scale.y]}function o(e,t){var i=t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y];return[i[0]*e.scale.x,i[1]*e.scale.y]}function r(e){return e.replace(/^\\s\\s*/,\"\").replace(/\\s\\s*$/,\"\")}function s(e,t){var i=t.getAttribute(\"fill\"),n=t.getAttribute(\"stroke\"),a=t.getAttribute(\"stroke-width\"),o=t.getAttribute(\"opacity\");i&&\"none\"!=i?(e.color=i,n?(e.brushType=\"both\",e.strokeColor=n):e.brushType=\"fill\"):n&&\"none\"!=n&&(e.strokeColor=n,e.brushType=\"stroke\"),a&&\"none\"!=a&&(e.lineWidth=parseFloat(a)),o&&\"none\"!=o&&(e.opacity=parseFloat(o))}function l(e){for(var t=r(e).replace(/,/g,\" \").split(/\\s+/),i=[],n=0;n<t.length;){var a=parseFloat(t[n++]),o=parseFloat(t[n++]);i.push([a,o])}return i}var h=e(\"zrender/shape/Path\"),m={path:function(e,t){var i=e.getAttribute(\"d\"),n=h.prototype.getRect({path:i});return{shapeType:\"path\",path:i,cp:[(n.x+n.width/2)*t[0],(n.y+n.height/2)*t[1]]}},rect:function(e,i){var n=t(e.getAttribute(\"x\")),a=t(e.getAttribute(\"y\")),o=t(e.getAttribute(\"width\")),r=t(e.getAttribute(\"height\"));return{shapeType:\"rectangle\",x:n,y:a,width:o,height:r,cp:[(n+o/2)*i[0],(a+r/2)*i[1]]}},line:function(e,i){var n=t(e.getAttribute(\"x1\")),a=t(e.getAttribute(\"y1\")),o=t(e.getAttribute(\"x2\")),r=t(e.getAttribute(\"y2\"));return{shapeType:\"line\",xStart:n,yStart:a,xEnd:o,yEnd:r,cp:[.5*(n+o)*i[0],.5*(a+r)*i[1]]}},circle:function(e,i){var n=t(e.getAttribute(\"cx\")),a=t(e.getAttribute(\"cy\")),o=t(e.getAttribute(\"r\"));return{shapeType:\"circle\",x:n,y:a,r:o,cp:[n*i[0],a*i[1]]}},ellipse:function(e,t){var i=parseFloat(e.getAttribute(\"cx\")||0),n=parseFloat(e.getAttribute(\"cy\")||0),a=parseFloat(e.getAttribute(\"rx\")||0),o=parseFloat(e.getAttribute(\"ry\")||0);return{shapeType:\"ellipse\",x:i,y:n,a:a,b:o,cp:[i*t[0],n*t[1]]}},polygon:function(e,t){var i=e.getAttribute(\"points\"),n=[1/0,1/0],a=[-(1/0),-(1/0)];if(i){i=l(i);for(var o=0;o<i.length;o++){var r=i[o];n[0]=Math.min(r[0],n[0]),n[1]=Math.min(r[1],n[1]),a[0]=Math.max(r[0],a[0]),a[1]=Math.max(r[1],a[1])}return{shapeType:\"polygon\",pointList:i,cp:[(n[0]+a[0])/2*t[0],(n[1]+a[1])/2*t[0]]}}},polyline:function(e,t){var i=m.polygon(e,t);return i}};return{getBbox:i,geoJson2Path:n,pos2geo:a,geo2pos:o}}),i(\"echarts/util/projection/normal\",[],function(){function e(e,i){return i=i||{},e.srcSize||t(e,i),e.srcSize}function t(e,t){t=t||{},r.xmin=360,r.xmax=-360,r.ymin=180,r.ymax=-180;for(var i,n,a=e.features,o=0,s=a.length;s>o;o++)if(n=a[o],!n.properties.name||!t[n.properties.name])switch(n.type){case\"Feature\":r[n.geometry.type](n.geometry.coordinates);break;case\"GeometryCollection\":i=n.geometries;for(var l=0,h=i.length;h>l;l++)r[i[l].type](i[l].coordinates)}return e.srcSize={left:1*r.xmin.toFixed(4),top:1*r.ymin.toFixed(4),width:1*(r.xmax-r.xmin).toFixed(4),height:1*(r.ymax-r.ymin).toFixed(4)},e}function i(e,i,n){function a(e,t){c=e.type,u=e.coordinates,o._bbox={xmin:360,xmax:-360,ymin:180,ymax:-180},y=o[c](u),m.push({path:y,cp:o.makePoint(t.properties.cp?t.properties.cp:[(o._bbox.xmin+o._bbox.xmax)/2,(o._bbox.ymin+o._bbox.ymax)/2]),properties:t.properties,id:t.id})}n=n||{},o.scale=null,o.offset=null,e.srcSize||t(e,n),i.offset={x:e.srcSize.left,y:e.srcSize.top,left:i.OffsetLeft||0,top:i.OffsetTop||0},o.scale=i.scale,o.offset=i.offset;for(var r,s,l,h=e.features,m=[],V=0,U=h.length;U>V;V++)if(l=h[V],!l.properties.name||!n[l.properties.name])if(\"Feature\"==l.type)a(l.geometry,l);else if(\"GeometryCollection\"==l.type){r=l.geometries;for(var d=0,p=r.length;p>d;d++)s=r[d],a(s,s)}var c,u,y;return m}function n(e,t){var i,n;return t instanceof Array?(i=1*t[0],n=1*t[1]):(i=1*t.x,n=1*t.y),i=i/e.scale.x+e.offset.x-168.5,i=i>180?i-360:i,n=90-(n/e.scale.y+e.offset.y),[i,n]}function a(e,t){return o.offset=e.offset,o.scale=e.scale,o.makePoint(t instanceof Array?[1*t[0],1*t[1]]:[1*t.x,1*t.y])}var o={formatPoint:function(e){return[(e[0]<-168.5&&e[1]>63.8?e[0]+360:e[0])+168.5,90-e[1]]},makePoint:function(e){var t=this,i=t.formatPoint(e);t._bbox.xmin>e[0]&&(t._bbox.xmin=e[0]),t._bbox.xmax<e[0]&&(t._bbox.xmax=e[0]),t._bbox.ymin>e[1]&&(t._bbox.ymin=e[1]),t._bbox.ymax<e[1]&&(t._bbox.ymax=e[1]);var n=(i[0]-o.offset.x)*o.scale.x+o.offset.left,a=(i[1]-o.offset.y)*o.scale.y+o.offset.top;return[n,a]},Point:function(e){return e=this.makePoint(e),e.join(\",\")},LineString:function(e){for(var t,i=\"\",n=0,a=e.length;a>n;n++)t=o.makePoint(e[n]),i=0===n?\"M\"+t.join(\",\"):i+\"L\"+t.join(\",\");return i},Polygon:function(e){for(var t=\"\",i=0,n=e.length;n>i;i++)t=t+o.LineString(e[i])+\"z\";return t},MultiPoint:function(e){for(var t=[],i=0,n=e.length;n>i;i++)t.push(o.Point(e[i]));return t},MultiLineString:function(e){for(var t=\"\",i=0,n=e.length;n>i;i++)t+=o.LineString(e[i]);return t},MultiPolygon:function(e){for(var t=\"\",i=0,n=e.length;n>i;i++)t+=o.Polygon(e[i]);return t}},r={formatPoint:o.formatPoint,makePoint:function(e){var t=this,i=t.formatPoint(e),n=i[0],a=i[1];t.xmin>n&&(t.xmin=n),t.xmax<n&&(t.xmax=n),t.ymin>a&&(t.ymin=a),t.ymax<a&&(t.ymax=a)},Point:function(e){this.makePoint(e)},LineString:function(e){for(var t=0,i=e.length;i>t;t++)this.makePoint(e[t])},Polygon:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPoint:function(e){for(var t=0,i=e.length;i>t;t++)this.Point(e[t])},MultiLineString:function(e){for(var t=0,i=e.length;i>t;t++)this.LineString(e[t])},MultiPolygon:function(e){for(var t=0,i=e.length;i>t;t++)this.Polygon(e[t])}};return{getBbox:e,geoJson2Path:i,pos2geo:n,geo2pos:a}}),i(\"echarts/util/mapData/geoJson/an_hui_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3415\",properties:{name:\"六安市\",cp:[116.3123,31.8329],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@nJUXUV°UÑnU@mlLVaVln@@bn@VU@xlb@lLnKlVIJUVxnI@lVL@b°VX@bxnVVUnVVnU@kX@VwV@al¥UUnUWa@@wĸULU¥lKUa@aUI@alLVaU¯anWkUKm@XV@VaXlW@aU_UWVUI¯@ma¯W¯I@UU@WWU@U@@UU@VkV@@WUUm@UaU@lK@IUKL@KWmXUWaXI@@a@a@U@U@KV¥lwk°b²JVIVKlV@UXlaUl`UVLVVVUJU@Lnm@_VK@KUIW@J@Xk@WW@UmmXmWk@kK@aUUVmmkUwUmWL@WmU@UJmUULkKWakLWVkIlwULW@X°lUJ@°ULWVwmJ@bmb¯Vkm@@WkWm¯wL@lkXWmXym¯UImJUbkV@Vn¯@V@lUb@mk@maUxmlUbULWn@JLmKUkWKkwUKbmXWxkVUKmLkVV@JUUWL@xkJUUV@X@VVlUbVX@xk¤x¼xWxnnn@Þ¼JVb°aVn@mlnXUJlbVlkz@lUlXJmxVxXnWxXÈWlU@UxU@VX@xUL@UÆmLnV@lWXk@@JlbXblnlJ\"],encodeOffsets:[[118710,33351]]}},{type:\"Feature\",id:\"3408\",properties:{name:\"安庆市\",cp:[116.7517,30.5255],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@n°znWXlW@kK°xXnl@Xn@l°Una@anIxXUVK@¯VIkW¯X@VKxklJXUlKXblLVKnVVIV@Xn@XKVnVxlnnUlmV@²óUkVlWbln@VVVIn@lw@WVIXblV@ÈxaUaVIVVnKVLKln@b²K@»U£ÑķġÝÅbKa@Im@Û@kWÓkkmKÅnóJUÅ£W@wĕ@wĉţ¯¯UkK±l¯U¥UÑkÝUķ»Ý¥¯JIUVbUl¯ÈV¼VJU¼Vb@bkLUl@VJ@bUXÇ@lkVmXmKkLVxVL@VkVVVlzWkbmLUUUbVbUVlÒnJlUnLllUL@bUVxlLXVÆ¦ÈVU¦WJ\"],encodeOffsets:[[118834,31759]]}},{type:\"Feature\",id:\"3411\",properties:{name:\"滁州市\",cp:[118.1909,32.536],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@@`nnl@xK@X°KXVIXVlbXVWnXlL@È»LVan@VJêVVn@X@laÞbVayn@_xnWVXnWl@VnUVkI@lnXKVLVV@V@kW@LlVô@J@bVnnKnkVa@»lç@nwKmaUUUVÑ@nmWXalI@alVn@VwUaVU@nlaôJnUVVXlJaXXVK@UV@VWx@nXVWXVUlLUbVULVVnUVbUbVb@@aKÆnnKVK@U@UU@@a@V°¯ÈJVIlķ@aaUaVKU_@mkxUI@aUlyU@@wkKWmUbUnUVWbkJW_J@bn@Vm@@KULk@V@@bVbÅm@LW@UVVbkK@UkKWL@VULUKWIUJUbkK@_WVXUJka@XVa@ky@aVIUUW@@mUlLKWÑUKVan@UkVmmIXKaVaUwVU@UmykU¯@±UUL@WUIVUU@KkIWaaU@kUUaÇUó»mKk¯@y@kWK@bkI¯`mnl¯XWlkVUzUJlbUbVJl@nnm@VULV`XnWÆbmUUnJmUknJ¯km@yk@kUxL@VUbmnn¤lX@`z@JmaULUVl@Xn@xllkXWaaW@UVmUb@mVXWxXbWbUÒnVVnVVUL\"],encodeOffsets:[[120004,33520]]}},{type:\"Feature\",id:\"3418\",properties:{name:\"宣城市\",cp:[118.8062,30.6244],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@Vb@XLJXxlIXxlVlV@I²¤nlUnVU@VULWVUJ@Lnb@lV@UnV@@VVVlLnbnJUVkUUVWn@@anUVnVJVIV@@nUJVbUb@VUbVK@bn@VbnIlxkllXVlXKWUXUlL°¤UVVb@bUlkXWxXz@IlaUlnUlJVInVÆJULVUnVK°@VnlVnxV@XLlK@wVL@KnUlJXUbnKVLXlUw@VWlLXKm@@a@VLnmlIVVnKn@kVaVlwk@@a@k@VIUa@maUa@wna@kmWUUmVUIVÇ@aKmakUJ@InmUUaVaklX@Vk@m@VU@wnK@alKVUkUkKbmUkm@U£WVk@@UÝbbaÇx@b@WVUa¯@wVwUUV@VwnK@KWaÅ@KIUyUI@WmXóUbWaKm@km@IUyIUaWKx@zUKUL@llVUnkLVVkJWX@VUKUVIkVWakb@VWb@n@JkXUlmL@xkL@`VxLUÈUJ@Vm@@bmIUlUL@VUVVbknm@mKUwKVÈ@J@LV±kkJUIl\"],encodeOffsets:[[120803,31247]]}},{type:\"Feature\",id:\"3412\",properties:{name:\"阜阳市\",cp:[115.7629,32.9919],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@Vn@ak°a±@¥@UUI@aUmlwUUxb@¥XU@mmI@a@Kn@@_W@@WI@mUVVXUl@XaV@K@I@aLX@aVI°K@KVLUUwyXkK@kKÆbXnlK@k@aJlU@w@U@»@aXKWn_JXkVKn@°LlKXW@¯U@aUK@kmJUwVIUJkmLK@kka@wUVm@@am@UkUbkK@nmVÒ¯VUWVVmIULk@ma@kkK@nUbUamU`UUVUkKVkkW@@bkmnmUXVKXVL@VbUmbVXJ@nmKÅI@KWKUXVJUL@VUKUX@KUKWL@LUJmaXXm@kVVV@L@VUL@VlK@L@V@LUK@VUb@UUU@°@nVxU`Lkn@`@XVJ@XVmk@UKmV¯LVVn±Wm@Ub@JlLUl@VLk@lmVVn@bnV@V°IVaVJXI°K°V@XXVlVVUnKVlUbWXnV@bV`U@@m@@@nxmn@bXVlL@¤nbUl¦VVUnJVUVl@@bÞL\"],encodeOffsets:[[118418,34392]]}},{type:\"Feature\",id:\"3413\",properties:{name:\"宿州市\",cp:[117.5208,33.6841],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@@UWU@bkW@aWU@aUIkWVlLXblVIUVV@mn@V_n@VaUK@I@UaanJVU@lVUVnnKVVlaUaI@wnKLnll@nVlk@wVKXkl@@bbUJ@VU@UUUyVk@aVUXwlWXXWU¹@aU@WUI@mlUnJ@Il@aXbV@VKl@XxVL@WIJlb@al@IUUm@@aVK@¥¯@mUķ¯bWk£Vm@akm@VaÅ@UVWa@UJWkJUbWbU@UlXk@amV@K¯nk@lU@Uxmz@bU`ÇbUbÅVm£U@Wwx@akLUK@UlakwUJWVkLmaUal@n_mVUnKVUUmÅXWa@kJmx@XUJ@bVLXxl@VVUVVUbkLWbU@@lUVVVVXK@XkJ@nU@@bV@VxUVlbU@xXLWn@UxVbVĊV@b@XV`mnkJ@kUKmbaU@VbnbÆx@XU@@`k@@bl@@bkL@WakXWaU@Vmkx@XWW@@wUUUbJU¯V@¯ÞU@WxXlL@bkb@lVlnbJW@kkU@mbkaWJIVlmz¯`UnU@mb@@`@bkVlnV@b@V@aVxn@VxKXnl@nbVKbVK@a_V@Vw@WLlwnK@UmIU@VW@UÈ@lKnalw@@V°@aUmlUUw@V@@UXK\"],encodeOffsets:[[119836,35061]]}},{type:\"Feature\",id:\"3410\",properties:{name:\"黄山市\",cp:[118.0481,29.9542],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lXnlWX@VUJVnUJVzXJVxkVJlI²lU@K@IUÇLVxnLn@lmUaVU@UVKVknJ@an@@UVIVÇKUw@_lK@wnKVklW@I@mXa@UlaXblUJVUVL@UXWlIUUlKVmkU@kVKVL@ywXLVbJVz@Jln@nLXbVaônW@la@UVWUa@@a@mk@WIk@VwUa¯¥m@UUVK@ImK@aX£kKÅVa_@±akXWWLnU@@a@¯mK@LJUWwUVVmbXX@lWLn`mzUJUbLk@makVWmkXambkKkna@ab@U@Unm@WV@VbUbUJWIk@@lmL@°UVUVmn@@kmWkb@x_m@@aU@b@JlUzlWxXn@b²@l`IVlUlL@VKnVbUl@VlIn@@bbVWUk@@bX@Valb@bnb°Vn@xVKlbVnV@VxL@ln@UXVVL\"],encodeOffsets:[[120747,31095]]}},{type:\"Feature\",id:\"3414\",properties:{name:\"巢湖市\",cp:[117.7734,31.4978],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@VV@blL@XlWnnn@VXXl@@WIX@VJ@LxŎxln@bXJVblX@VVbUVn@VbUVlb@LnJVbVLVXLÒVLÒVbVIVylUXk°Wknm°_lJ@aXL@lz°@lnLô¼VÈVUUaVKU@WW@@UUa@knmVLlaV@a@kak±@UmwkKmkǉÝUUkL@mlIVmnÝWkkUÝ@KƑĉa@»mma@mX¤¯Uw@@UU@bU±±L@akmLUKmLUUUJVbbÇw@kUWaUJ@Xkxm@UJUUm@kakXUVl±ôU@kn\"],encodeOffsets:[[119847,32007]]}},{type:\"Feature\",id:\"3416\",properties:{name:\"亳州市\",cp:[116.1914,33.4698],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@lU@Un@@anUlw@KVmUwlaX_lKna@KU@@kWKUU@ankWXK@@V²VVIÈU@al@VaÈamK@wU@klaUV@XVUU»WUUbkmUkVmk@aÈw@mWU@VkIkVWKUÑķXȭºU¯l@kkLWmÅaL@lLWlzVxVUK@L¯LUJ@bWK@b@JLU@Wbk@WVUUV@nJ@XX@@`m@@L@bnJ@nWV@¦awVVkxVn@bVJ@V¦@²¯blb@mUU@¼¦XbUV`@nnxUxWLkUkVWKkV@XV@@VVL@VX@lVV@L@blL@`L@xXKVL@VnU@lwnU@ml@XnV@@UVW°LnalUI@aUK@aa@UkXW@I@mWL@UXK@UVW@U@@kWn@@V@XblaVxL@bVKXbIlJ\"],encodeOffsets:[[119183,34594]]}},{type:\"Feature\",id:\"3417\",properties:{name:\"池州市\",cp:[117.3889,30.2014],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@V°°ĊŤ@xĖ@xXÆ¤VôIÆmnLllXÔ@lÜn@@JbLÆaĢÞĸ°VVUUKVanK@UV@VLVVnln@xnklxXamk@WV@Xa@naVkKlk@mkUWwkJWwIWK@UaUwWIUyVIUmVI@UXWmkkWKUUVWm@@kKw@UUUmkaULwm@¯Uma@akaUbW@@a@VlUXa@am@kJ@UVkUamL@UkKVUkJk_±@a@WmXwÇkkaVaUa±wV@VkwnyUaW@UU¯amLk@m@kmmU¯K@L@lUX¯WlkXVbbVUL@J@LVKnlJXnlb@`nXlalV@bnL@Vnb¼@lXbWlkLK@zUJmIUxUVUVmX\",\"@@llUL@VlxL@a@UwXa¯@\"],encodeOffsets:[[119543,30781],[120061,31152]]}},{type:\"Feature\",id:\"3401\",properties:{name:\"合肥市\",cp:[117.29,32.0581],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@LxVĊLÞkVlVVXaWaXwWnU@anVVUX@bXblWkk@wWmk@VUVKnb@Iy@_kWm£nmVa@UKwlVl@zn@°lIlmnVIVmnVaXÅWmU_VK@Unmmk@UIVakaaUÑUKÑWKUUKUamI@KkaVUUam@VUUa@UkWUaWI@akmōwwUL@`mn@KVIUVUUUKVk_VkbW@VkUULUJ±I¯alkxU¦@L@V@V@b@b@WJXbWVXn@LKVL@JkLV@Vbn@VV@XU@UlV@@VV@V@XXV@@VJ°°Xnb°@JUVVXV`@bkXWUbU@Wn@VLXlm°bVUbkK@bVJ@bVbkLV¦KķV@x@XbmVVVk¦\"],encodeOffsets:[[119678,33323]]}},{type:\"Feature\",id:\"3403\",properties:{name:\"蚌埠市\",cp:[117.4109,33.1073],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@VÒXLlUlJ@UXV@nÇx@bnlUVllnVaXVV¼UVWU@V²wVV@Vl@VnwlI@XbÆWVnUVmLUVnm`k@VbnblKXUVIlxkb@VVLlK@bwXxV@n¤ÆUVaÈaV_@anyVwV@kl@°m@LnUbl@WVkV@XaaVIXlIV@XbVUÆ@XKWwUkmW@_UmnIlJXkWKXmV@w@_XV@Kl@kU@KlX@@UUUUKWLm@klJVUUmk@mXUWmXw`m@zUbÝakbW@m@UUéUIm@UbKÇ¼@kKWXmWUkaWUJWU¯L@WLwk@mm@_ÅlUVkmWUnV@VWLUbbƑĬ¯l\"],encodeOffsets:[[119543,33722]]}},{type:\"Feature\",id:\"3402\",properties:{name:\"芜湖市\",cp:[118.3557,31.0858],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@bVaV@XllLXU°lL@V@VUnVl¯IkVUVU@@b@lUXUWmbn@¼bƒĊLÞ@lVXlmÞUnkJ@nlKVVÞXklWVaVI@aUKn»lL@Kn@XXwlm@mn°@V@WywXlWVk@aUaVU¯£kKWVXVWLUkkWlkkwmJUam@@aULVa@UVaUaVI@m@UUJUIUmmV@bm@UXVVUlVmImakKUU@UU@VmU@@kma@KVIXUVK@UVmUkVm±£@JkU@nlkLUlmb@WbU@@XnlWb\"],encodeOffsets:[[120814,31585]]}},{type:\"Feature\",id:\"3406\",properties:{name:\"淮北市\",cp:[116.6968,33.6896],childNum:3},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@lnnK@¦n@@VV@@VV@nIVV@VW²a@b@bVnUVVV@Vz@l@°UVIVaVV@x@XX@WlwUnV@XblWb@XlK@a@k@al@@_V@@WÅwmaUaV@bnaVL@llInmU_@W@aUUĉUaVwm@XWK@wVkaVUUwU@@aV@@mlI@WLWUUUVU@kV@XalKVaUVUUUk@WwUK@aVI@WUk@@UUU±xkb@lV@xnLÇbUbk@@bÇVUJ±U@U@WLXml@bVVXL@lV@@LmbkLW`kbVxUn@LkxmV@bm@@VkV\"],[\"@@VVVkV@¥@UV@U@VUUJkWakKUlXVJ@bXV@blX@aXV@V\"]],encodeOffsets:[[[119183,34594]],[[119836,35061]]]}},{type:\"Feature\",id:\"3404\",properties:{name:\"淮南市\",cp:[116.7847,32.7722],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@°kƒīaVaXK@UUVmnXUlVÆkVKUUUmmUÑkUUÝlĉKUwKbU@UxW@@lmVUUVmUUmwaWkL¯K@mULWlIm`XWL@b@¼@V@xkVI@b@l@lkV°Ȯ¹ĸW\"],encodeOffsets:[[119543,33722]]}},{type:\"Feature\",id:\"3405\",properties:{name:\"马鞍山市\",cp:[118.6304,31.5363],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@ǊnllLnxV@laXLVKmaaXbVIbVKVVVIVyn@n_W@@UnJlUVVXlLnaUWlV@VVIXW@_W@XK@K@UVUUwVamÑXmmwwKUnUKçU@JU¯@m@nknWxWm@@LkKm¼VL@bUJUbkXWl\"],encodeOffsets:[[121219,32288]]}},{type:\"Feature\",id:\"3407\",properties:{name:\"铜陵市\",cp:[117.9382,30.9375],childNum:3},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ÒV¤@¼V²@aVV@@x°V£nW@nbnaVXVW@k@aV@VUUl°JUkVm@U@UkK¯WVkKWkU@Ubakwmlwm@kUmUUKU@@VmLUbVLUV¯U\"],[\"@@LllUL@VlxL@a@UwXamK\"]],encodeOffsets:[[[120522,31529]],[[120094,31146]]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/ao_men_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"8200\",properties:{name:\"澳门\",cp:[113.5715,22.1583],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@HQFMDIDGBI@E@EEKEGCEIGGEKEMGSEU@CBEDAJAP@F@LBT@JCHMPOdADCFADAB@LFLDFFP@DAB@@AF@D@B@@FBD@FADHBBHAD@FAJ@JEDCJI`gFIJW\"],encodeOffsets:[[116325,22699]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/bei_jing_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"110228\",properties:{name:\"密云县\",cp:[117.0923,40.5121],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@vIHZDZQtDLNMXIbHRCXXITbJ@H`LGPRDDJNCLHTOCWFGvGBUJMKGFO^IHWXITQCIY^AXGfRDXF`DJOLB~G\\\\DZIHHpErUVMhHb]\\\\MBVF@FTP`@zTbD\\\\@~M\\\\K`H^EVODWICAakAQXoIcCOCIgGYNWFWNGGKKGaJEGMEIKYJUT_J_Go@_SyQaSFMEGTcYOQLIIi@EKAUPCV[EEXQCW|aMUMAaYCYNIDGGACIMGGSKDQGaF_C[GaB@GOIiOKAYLmI@CN]F[SWWAcKKI@HMUimEKbeYQYISNUOcBKPIFBNgvDPGZYFSf]CMSIWGEUFgDIQ[MeDMJS@RR@LphFPCHaBAJKF@J]IBJO@HlO@@RKAMPJHCNDJTHFP@ZGNANBRFH@J_fM^ONJNF\\\\VTDJHDON@XRND\\\\XRCPVETCLBVKDFJINHRGPRV@\\\\CLJN@VbXbLVT\"],encodeOffsets:[[119561,41684]]}},{type:\"Feature\",id:\"110116\",properties:{name:\"怀柔区\",cp:[116.6377,40.6219],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@JHTVHXCHPfnDJGHNDJSB[JSBGVSAOH@PMPuDEHHXZN@PHF@ZLJ@LHVYJA\\\\OFWP]BMtMBSRGV[JeVAPQVIFENMD¡@^NV\\\\JH@NNL@NM\\\\kTQ\\\\I^FNIpBHGTBFFAZQfKDIXQTLXFXNNVMVHRGpCFLlRLEVBBH`IVO\\\\G`RDPAXLXBXORHZEHTDLLN@VGTMrQNFPeASKG@GMOAKBYMK@GTUHUXSHMVDNMOUEOZMJML@^KRACMZEZMRQLUHE@OFENPR@DI\\\\ChMHIDG\\\\GJMDWHCKGMDCIQCHO_K@GaIJSWWQDaGWJMNCKRsCYGYuJUSaKaW@UIMDK@[QUHOGQJMEILCAUDKFSOUQD[WMCQ@WPMGCCIUSE[IMPMN]`e@IEGAQBMHM@YEOSGCIDMIGNOLB@QP@GkP@AI^J@ILEBIbADGEOog@KQQWSekWQQUOFKZLF@PUNmIaHIUeBCTSHENcJa@_IWSaGu`GLSBKJQFOXGDXVQVOBIHcDSJWBEFGTMH[^mLaXcHiKElTRKtFXZ`MHMPCNRDxZB\\\\ICIHK@KHbIVFZ@BPnGTGbDXRDJaZKRiGEFSFEJhjFNZFjn\"],encodeOffsets:[[119314,41552]]}},{type:\"Feature\",id:\"110111\",properties:{name:\"房山区\",cp:[115.8453,39.7163],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@h@bl@HRJDZ``TA\\\\VVD^H`\\\\pF\\\\J`JGv@ZO\\\\GPSTEjPTR`FnEbDTDHEhLFMTK@ETSPULKEI@OVISKSJACEQNQbVIXGDIN@dMB[IIBcN]ZHNLP@XOWCFWCNRHTpATD@^NVNLED@Rh@jCEF}E[OOHUEW]W@QGGDIQSH_MmFmCUT_K]i@MHCMWFCFE{BMHMPOHKS]CFNGBELDH_@BcAKOACESAOBELaXAROB@FODMEDWJAG[aE@UM@DImEWJMC@OeCA{aE[@{L@MINUCQXKfUJORCHqJBF@TCXWNQX]M[EAJO@@KMBQJIC]EWMCCUBEBFHKDOTMBGNGF]MWDBRDdMDQVyE@LPVHDCP@JVVMTG~HNSH[CmRUvHPHBbA\\\\PTNRC\\\\YNJPRARPJDDR\"],encodeOffsets:[[118343,40770]]}},{type:\"Feature\",id:\"110229\",properties:{name:\"延庆县\",cp:[116.1543,40.5286],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@^AXOPEB[ZIGU@KKI@YGE@OYMGWFGvCNO@OPGTBHUTA\\\\ITACIGMIHmCOeDGGWSUIGimYEEMgiFITEFEjHLQbYCIWQaCSHmHAOY@UEaJG@LGLDJ[JAwYQCDMNONGY_EWLsSQFkMO[NWAIGaIYL@HMBOKiOQDWEUDMQSF_QIUBWdg@[NaAKQ@M]OQ@WhgLUMMFYQDIRCEUZOOCIOJ[KIUMKL@HIDKVEBM`HJAJSJUdBLGNEdMBMO[BYEWJSNKNaD]PE\\\\SjOT_RQVEZPpNQXfNA~lNG`@PNLp¼RFLfbdKbATUh@FSNWjGFZVLFHVA~X¨PPROfFJbNJPLFbENJPrEFNPFRHDDJdENJLVEPBJTVTHGHFRFH@PXP\\\\ORQHW\\\\BjWFDERLPPBbB\\\\E`B\\\\D\\\\L`@F]FCnJ^AZL\"],encodeOffsets:[[119262,41751]]}},{type:\"Feature\",id:\"110109\",properties:{name:\"门头沟区\",cp:[115.8,39.9957],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@V@XMnGPY²JQNEhH\\\\AZMPDVTTDZCPiJkHSHCjIdFtEHITCNITQEKUAMCEIKCECABYESKFWAKBEIIHABGDCKCAIHMHALKEI\\\\CFIBILIJQZS]BBEECS@E@@C]COKI@CABAAEEDMGCH]A[M@CJWHJaUMRFRBDTITLUJ@PFJKLOVST@FSLENgKGFSCaCmF_ESQiOSFOT[HYPu@IH_[IoE_[]GUC[USB__CYQI@Gakg@qZeHQNMNV\\\\FVLPgJAFJPRLCH[XcPELUT[JiV_EELFTADBXRTRLJC@fHXHHbPd`fR@NfT`@TLplHMpCEJHJBVLF@JTVnG^KXDXHNVGRLRXFJVdDHSNWLGfEzA\"],encodeOffsets:[[118635,41113]]}},{type:\"Feature\",id:\"110114\",properties:{name:\"昌平区\",cp:[116.1777,40.2134],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VNLJI\\\\JPPDYPFVQDCJZRNEVNhKXgR@^P@NLRbB\\\\Mh@XcVARJE`RTCNFVXRCjPPLNA@GZKbJJHXB\\\\MNPjLdGbWnK\\\\]NGHSFEXATIdCJGPARUWUHCPWRELITAHKv_E@iYCaW_BQ\\\\Y@QIO@QDCIGZCEMWGFMFAFgHEDOCSqKCCFGAMKEAC@ODGCGs@WH@KQA@EE@CE@GEA@EH@GGUEEJEAYD@JM@@DAA@FHD@FTJEHUC@JUBKCKG@G[CIIQReAYhO@OXGDO@@FF@IHJFCPEBACBIAAKDOABXARHPNEHGbQAAKQFGIAM[C@WHKaGiCEGOAHUKCIokSCUSOCYN[BgGMFIR±OZmHWNU@ShbbXDHVXXGJ^lZ@PZ\\\\Nb@\\\\FHJAD\"],\nencodeOffsets:[[118750,41232]]}},{type:\"Feature\",id:\"110115\",properties:{name:\"大兴区\",cp:[116.4716,39.6352],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@F\\\\E~DFN@BDFEpHFCHBBEGCDCJBHUDSBB@ELCPbF@B\\\\J@BJVAFJ\\\\ADKTCBGECFMT@BMN@@FH@DaNBEnvB@FPBATK@FHEFIAKFBFL@@PKBFJHC@FXBRAFCDMPDTOL@JIVFDHH@DDH@BGRFCDLD@N^@@CNA@KNOAEBCECFEGCFGMGFIPMOEJOLBADBBHGG@GCHIECY@INC@DMGS\\\\AIOZAAEYA@GT@KKMBEETCGMVINFxA@MJADB@FlA@HJA@NND@DFA@DVAZBBOFKH_JA@K^GBC@EFEG@gAENMXKJigC@IbSJMqGOP£RGSMGE@kbQFDPEFiBSGGSBK]I{CDWCIDOic[C_G@SuSO@EWKCO@MNY@\\\\uZOPENQD[LKESSKGBKEG@EJGAGHoH¥CqhifeJkX_XFFGHFNEDFPENKHM^IFIVL^S`DVEnNnG`RTCJHH@R^XFXGVPP\"],encodeOffsets:[[119042,40704]]}},{type:\"Feature\",id:\"110113\",properties:{name:\"顺义区\",cp:[116.7242,40.1619],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@EhEBENXHFNYDJHCD@RJP@R[ZARX`DbjZF@bHXT`Jb@dIFMTGDSfAJVbGnJVM@OKELYPERVXRflXTT@NIfC\\\\NJRhCVEHFJXNT^DTeZEHYCOhuAMJELOdAVPTMOWBWNMNEJgl]@WGUFIC[T{EEDEHGCIGMI@SECUQI[D{A{GQESPUH]CsiMCmHUeoHENcAaDGCMDGMQCACCBaCGLMAHB@DIEQLOAAEEJ@CW@CDINGAAGKQOCgV@LG@BEGDKNeREFBNCFIDOPKD[@YRW@GFWDAFE@EHDDrLDTCPGF\",\"@@KrJEH[\\\\B@FF@CHFBHUNAJKADGECBCMAG^E@EbI@BEGP\"],encodeOffsets:[[119283,41084],[119377,41046]]}},{type:\"Feature\",id:\"110117\",properties:{name:\"平谷区\",cp:[117.1706,40.2052],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ZJZRafFLjnVGNJ@LLBdXX\\\\T^EDMJ@nZKLBjPPJ@HbA\\\\H`DbERHLCFK^BZaFWXQLAGMHa\\\\OLO@SBIpBdCLVQfElO@GSAKEDQTC@GEBKG@ORIJBDAPDFA@CaOq@GGQAAEJK@KMUGAAGEAa@MGMBGCGSIIW@WSUCMDOJeWOM@IUF{WMWaDIMgIoRoCOKeEOEAG_I[cg@wLIFENQFDVTFJ@HNDJGHCFFFS|D\\\\EJHV@Xk^IhMFMNAXPX\"],encodeOffsets:[[119748,41190]]}},{type:\"Feature\",id:\"110112\",properties:{name:\"通州区\",cp:[116.7297,39.8131],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@FDAJTGDNDCTDDEDBBE@DT@@EHCDGJ@EIZ@@FDBR@ATFBBVFFE@@HNA\\\\VE@CLIFNJFNJBCP]A@LJFA@HJEDD\\\\C@DBCHLAEPF@@DH@APHAERDF\\\\GIxDTM@CFLBBFJ@CNUPMHECGDBF]BMFPDLRBHHBJMDCX@@DFIBFPBRKJF@CGANBHKbDDABDRDHNNCHDbCdBFMpGHiOYMefKJMC}HWAUNW\\\\NNBNAkNU|]HMTMN@MZBLFFF@RIRUTBMFIEGaAGGAOIIUGTSFcYKS@MSLYPKRUBU]EWDOI]CKGASgW@MTWKIMCS@uMAKKADMECGAKVUTSDy@IjWLMNBF@hHEF@FAD]H@LIBG`ELAPYAUB@CEB@CMC@MIB@GkB@ECAIB@NwBMEUJHNSDFFNALLS@@HZBBFYBJP[BHTCND@JMZ@FDGJHDH@GHAABCKAIPPFONEJNHEHHDEFFDADBFMP@L\"],encodeOffsets:[[119329,40782]]}},{type:\"Feature\",id:\"110105\",properties:{name:\"朝阳区\",cp:[116.4977,39.949],childNum:2},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@bFGHBHFBFIVFHHG@@FFB@HDFF@@FRB@LXGt@DHCH@PBDLFBNF@BEXCHEX@ZQ\\\\@LCPOJCDEAMFEfQLMHCAFH@@KhUNE^AAEHCFDNGVODMI@AEKADEN@CSJw[HCEFQGBBOG@@CE@FOKBDGCAD@C[FCGIB@IE@K^BDOIAEMMIJEDKF@[UMB@GF@EEAUEABSQ@CA@EY@FJI@CHGD@FS@@CAFCACFSCCDCMSHBIECMB@D]@@MKCDCQEAHG@CCG@CGUEIJK@SPOCCNEDQBDNDB@DJCDLFCBBALJB@BVGPBKVO@KHCCCD@FE@BNA@FNCTDDJA@FGB@NBDW@CL@hT@@ZHHQDDDAFSAANBC@HG@EFS@@DE@@PCB@Ue@CADNJB@FCBWA@LI^ix@FIHrH\"],[\"@@HUNAJKADGECBCMAG^E@EbI@BEGPKrJEH[\\\\B@FF@CHFB\"]],encodeOffsets:[[[119169,40992]],[[119398,41063]]]}},{type:\"Feature\",id:\"110108\",properties:{name:\"海淀区\",cp:[116.2202,40.0239],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@plDJVLGPBFHjDbHGL@X\\\\DBNHJREBLRBHaFGMGOBQAWPBLCBBAJBDFADOIEJGE@@EP@HCPWP@ZgfBRQJJ\\\\D@HLHLDVA@IVDFGSI@EGC@EBB@CN@@IZCAGHGaEqGJG@EjwJ]@K@GSA@e_I@NE@CA@Kg@KC@ENCFAKQAW@WIMK@V@I@@F@^EDFB@HcIaDYCBRRDCHD@EFLN@FE@CJUPEJOJMTBPEDIFCMIAKNOGMRFJNDVBFLSRMJSDGJsFcEiJGDGTIlOjYD\"],encodeOffsets:[[118834,41050]]}},{type:\"Feature\",id:\"110106\",properties:{name:\"丰台区\",cp:[116.2683,39.8309],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@hMN@NFTQCFRCBJFA@HJ@@HJ@HJ\\\\FTACD@@UNLXJX@@MA@@IECAQlDFEHBDI~D@GXCFMVDFCH@@NF@ANJC@FnAB@AMF@@EDCDDLGP@LUOAUH@AIABKAAEDCKID@CCACMWA@EGDEILA@OK@AELEJBFEEGL@BSOA@EuAFmMACbG@@EM@ANS@ENFDAHSDCL[BEIUBAII@A[E@OaKD@FAACTGVIACDHDAFGAEDoGEFACM@ig@@QFCMKMU@]SCoBGSMQDEXXDWPO@MKYGM^AdJJA\\\\cNB\\\\G^DNHFCBFABDBJ@PL^D@DF@T@FDAF^A\"],encodeOffsets:[[118958,40846]]}},{type:\"Feature\",id:\"110107\",properties:{name:\"石景山区\",cp:[116.1887,39.9346],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@NQPHLMJBDNJEFCAONSPIFIVODIF@@EKMFEC@DGQCAQZDbCdJ@GEAFC@]@EJ@DCSB[EGII@@GI@@GEBAIQDDESRMEM@gNYTIRKJAJEJ[DFJKLGBGNBJLDCDAHGBJJAFBLEXTLZFBAFDLD\"],encodeOffsets:[[118940,40953]]}},{type:\"Feature\",id:\"110102\",properties:{name:\"西城区\",cp:[116.3631,39.9353],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XBDA@EIACM@IJAD]BC@SFABISAD]H@@OAEDQEW@BLEMD@FLDh@@LDBF@@M`J@fTB@H\"],encodeOffsets:[[119175,40932]]}},{type:\"Feature\",id:\"110101\",properties:{name:\"东城区\",cp:[116.418,39.9367],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@DBf@@VDA@OF@@CT@FEH@@GADBMTBBECCRCGG@YS@@gDK@AC@PG@C^TBAJEB@TADC^IB@J\"],encodeOffsets:[[119182,40921]]}},{type:\"Feature\",id:\"110104\",properties:{name:\"宣武区\",cp:[116.3603,39.8852],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@RBX@RFFCBFU@aK@WA}CCJGAEFkCBRFD@JB@@N\"],encodeOffsets:[[119118,40855]]}},{type:\"Feature\",id:\"110103\",properties:{name:\"崇文区\",cp:[116.4166,39.8811],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XBL@@bEVD@BX@AC@MHA@EIBCCDSEMmB@EIDBME@@MG@EDUCENWD@H\"],encodeOffsets:[[119175,40829]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/china_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"xin_jiang\",properties:{name:\"新疆\",cp:[84.9023,41.748],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@@ρȁôƧƦóəʵסʵóƪԫʵѵͩƧͩړυࡓɛʵ@ȃ@óᇑѵƨɝɚôóНѺͩɜ̏ԭʵôƧɞñ@υƩ݇ȂóƩƧ@ѵȂυƥŌਗ॥ɛóʵѵƧѹ݇̍ࢯəɞυρͩ̏óਙƨƧŋôōó̍ͩóʵןóŋړͪƧѶ@ɜԭԫƦɛȄ̍ɝȄöςƩȂ̏ñȀ̏ƩóóŎə@Ő̎@ɞȀɝŎôƨóנѵȄƧ@óŏɝóɜôŎ̍ͨςŎ@ƨóôƨɞ݈ʶóƨφó̎Ȁƨ̍ԮòѸԮמ@ѺȀ@ƪၬֆòȂñ̐òȂɜóƨ̒Ŏ̑߼@φρȀ@Ő๐ς̎Ƨφ@ɝφڔ೦Ԯǿࢰ@ƦŏԮƨƨȄƧ۬ɜʶڔŐɚɚóŐôƨ߼ôƧƧó̐ƥóŏѺǿƦȁφƧςƨƧ̒@ɜƥƦυ̐ɛƪͩƩəƪʷ̑ə@ȃƨʵנŋྸōਚԭԪ@ɝƨŋ̒օςʵôƧ\"],encodeOffsets:[[98730,43786]]}},{type:\"Feature\",id:\"xi_zang\",properties:{name:\"西藏\",cp:[88.7695,31.6846],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ôŌנôʶ̎ͪôóŎƨŌਚƧ̐ôςͪφɚɝࢰ݈̎ѺѶƨôʶ०ɜਘƦŋφѶȁ̍ôŏɚŋ@̑ə@ŏò̍ɜóƥôʷƧ̍φѹԪ̍ע@Ѹʷɜ@ôñנ@Ѷɛɞô̐ŏѶƨѸƧƥōƦôŏô@ƧôƩ̒ŋƨŌƦǿô̎ɜȁ̒óʶѶôôО̒ςƥɜНφσɛȁ̎υƨఱƧŏ@ʵƥ@ŌóóóͩƨƧóŋ̑õóɞóɝԩͪɝρôƧ̍ƧѹͨڑŎ̑ōóƧࢭͩ̏ѵɝóఱóóԪυô@̒ƥŌ̏Ƨ̑Ȅ݇ŎƧѵӏ@ɛõŏɛȄôӒƧŌѵǿɝƧŋԫ@̏ʴƥ@óǿ̑Ȁóǿ̍ςóóυô@ʶɛñρƦƩŐó̎óѵó̑ͪࢯОóɜןƧ̏ƥȄ߻̎̏̐ןŎɝɜöɞƩȀôöɛȀóͪ̐ƨƪ̍̎ȂƥԪυО@φɞôƪ\"],encodeOffsets:[[80911,35146]]}},{type:\"Feature\",id:\"nei_meng_gu\",properties:{name:\"内蒙古\",cp:[117.5977,44.3408],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@ኊȁ૊ö߼ƩɜɛנñԮɛѶóԮô@ȁѸóמ̎ගѺၬ@߼ʶԮӒ߼̎@ŐѹӒ̒Ԫƨöග̑ѶȄ̒ς।ѶɚöɞɜʴڔôôȂ̎ѺȀςƨƪóԪɜôɛОਕڔԭѵ̍ѹȂԫɛƥ̍Ȃóɜ̎ô@ʶ݊ੲࢮʵږͪנƨôȂƧ̐ͪ@ŐƦƨφԬѶɜôƦ@ŐƧôôƦəŐ̏@ŐڒѶԬô̐ʳԩНςōôŏɞ@ƨȂѶəóƧ̒ػ̎ó̐Őנóƨô̒@ƨɚɚ@עԫɛɛ@ȁυͩƥʳòևρ̑ࡗƧͪ༃ॣԮփ̎Ʀ@ôô@ôō@@ȁѵóƨ̍υȃóʵɛƨƥóυȂóəƪ̐ρƧͩɜԭڔȄ̎عƧȁ̐ŏó̍ɛƥƧ̑óρŐ@Ƨ̏ɝəɛ߻ͩ̍ͩɝО̍ƪƧóóӓƨóƧʳ݇@ɝςƪ@ʴƩƧƦôƨɛȄəƧŋυóͩѵ@ɝǿóŌן̍ɛóО̍̑̏ôȁ̍ŏòȁñóƦͩ@ǿə@ɛƧ̑ρȁυô̍օѹóȃə@ȂσʵѷƪòƩ̍ôó߻ۯôʳƧóõʵѵóѹɜ̍ȂѹôɛŌφֈƩͨρóυӑóޟఱ̑݇ͪóƪƨŌóȄڔԬƩςםñ̑ȃѵŐԭŏƨȁɛǿρôõɚɛóƧОə@ѹ̐ѵöԪͨôͪɛ̒ןŏƧƥóôƥƧɛŌôóɝó@̒݇Ӓ̒Ō@Ŏԭࢰ\"],encodeOffsets:[[99540,43830]]}},{type:\"Feature\",id:\"qing_hai\",properties:{name:\"青海\",cp:[96.2402,35.4199],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ƨ@ôƪ݈ȁƪ@φɝòóƨԮʶɛ̐ѹͪôОəóƧɞᇒѶ@ôږô@ǿѶƪȁςɜͩφςŋɞôѶɛƨŌɞ@ɚςŐñԪॢͩƨȂɞóƨŐ̎ŏעӏ̎óƧƦô̒ȁɜςͩ̒ɚɛƨôƨɝφɛóȁƨŋóóɚͩƨóóƩ@ƧəŋƦƩ̍@ƧƧôǿυ̑@ȁɞǿõŏρƥסɚƧóτԫɞôƧƦ@ñȃòñƥóυôôѹѵ@ŏ̏Ȅɝó@ȂəŌóəѹƦ@Ő̍Ōυ݈ԩŐƧóôƧ̑ôʵɞƧ̑ѵôƩɞƧ̑óНѵóôʵ̑ɛȂó̍ƥȀƧŋ̑Ōóƪ@ƨóóŐƥƦŎѷƨѵƧ̏Őɝóѵɜן@óòɛ@ѷʸס@ԩ̎υѺƨ̎óʸôƦɛñ̎@Őɚ@̒əŌóŐ̎\"],encodeOffsets:[[91890,36945]]}},{type:\"Feature\",id:\"si_chuan\",properties:{name:\"四川\",cp:[102.9199,30.1904],childNum:21},geometry:{type:\"Polygon\",coordinates:[\"@@ôôŋó̑Ԯ̒ɛОמͪƨōöͫ߼ƥôȃƨóóñôƧóƧôōڔŏƨŐ@ŎôòƥѺŎ@ōɜóנôǿôƦôԮ̍ɜôɚƧñɛɚȁ̍Ƨɛևυ@óóôŋρԭɝ@Ƨʸ̍ŏυɜƧƧóƧƨȁρ̍ƨȃɚôʵφóô̑̏Ȃ̑ʵɜʵɞ@ƨʳסƩóŎəóɜƧôƩƧρóôôô@ŎƧƨƨƪѹó̍̍Ʃ@̏ѹНôޟ̍ƩóƪυɝɛəƨôŎɛȀ@Ȃ@ñɝʶ@Ōρנ̏õóɛͨƨȂѵОɛʵ@̏ƩŐó߼Ƨల̍φɜȂυτɛОρƦɝƨóƪ̒Ѷɝƨóʶ̒óƨƨôԪŏφ݇̎ŋ@ŏѺƥôɚɚŋ@ȁɞô̐ȃ@ŐѶóѺφóƦôñòòȄ\"],encodeOffsets:[[104220,34336]]}},{type:\"Feature\",id:\"hei_long_jiang\",properties:{name:\"黑龙江\",cp:[128.1445,48.5156],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@ᇔȂਚНƨŐѶŏöƥςŏñƧƦóƨȁ@óƨóȁφӑóóƨóǿ̎̑ôНɞó̑ɜə߼̎ǿ̒ôڒӑφ@Ƨȁ̎̏ƥƩ̎ρశôȂςƨφ@נɞ݈̑ƥƧɛƨʵƧȃƥ@Ƨƥ@ŏ̑ԩôɝρρóɛƧƩͩƧó߻ʸ̍ʷѹƥɞڕõ̍öɝυ̍ȂƧ̐̑ŏóƨñŋѹóóȁ̍̏Ԭõʸ̏ŏ@ǿ̍@ƧОυ@ñƨòȀƥŎ̑ŐѵóɛŌóȂԫōƧŎѹñ̍ʶóОן@Ƨ̎Ѷô@Ȃ@óŎó@@ó̍ƥԭք༄।ƨͩ̒ࡘςñֈƦʴφͪ@ȂɜɜסԬə@Ƨə̑@Ƨóןô̏ŏ̍ô̑ؼôƨѵɚƧȁɝ@óŐρŎԪО̏ʴ\"],encodeOffsets:[[124380,54630]]}},{type:\"Feature\",id:\"gan_su\",properties:{name:\"甘肃\",cp:[95.7129,40.166],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@ڔôԮࢯ@ō̑ŋ݈ӑ@̑ɞôóôɜŋƦƨôóƨƦנŐɜ̑óͩԩͧѶõѺ̏ɚ@ƨНɜôöəςóɜȀƧȂԮŐѶŏ̒ȄמòƪρړԫôȃƧŋôƩ݈ͩɚ@@ǿɜ@φͩóŏɜӑƧōôǿ̎ôƥƪóõö@ôƨôƧƦôó̒ɜ@ɞŌõʶ̏Ő@ȀóôƨȂ@ʶע@@ƥ୾ӑó̑óŋôʵóɛړ@@ƩöóƩóρɛƨ̑@óʷƥƥ̎ɛƧôōƧǿôͩѵôɝȃɞȁõƧρóó@ōƧŏړŐóŎôƨóƨôòƧôóȄ߻ƦõͬƧŎםͩɜНԭ̑ô̒óŌóƥ@óƨɝσԬƨôעəςƦöŐɝȀ@Ȃφ̒óȀƨƨ̎@ƥƪɚŌ@ƨôƪƧôəͪôôƧŌôȂυɜƧɞƧóəɜ̑ρͪɛ̑Ȃóƨƥ̍ôסӐ̍ŐƧŏɝôƧȁॡͪòԩρŏ@əɝƧŋѵɜɝóρŌυɛͪρƩȂѵ@Ȁڕó@ȄɜʶφࡔڔƨͪѶͪԬʶôƩעʶɚʶƥôóƨςȂ\"],encodeOffsets:[[98730,43740]]}},{type:\"Feature\",id:\"yun_nan\",properties:{name:\"云南\",cp:[101.8652,25.1807],childNum:16},geometry:{type:\"Polygon\",coordinates:[\"@@ôɞôɝ̒öôŌƧƨôͪôô@ŋƦ@ʶƨŐô߻ƪŏ@̐ɜʶѶНƧȁɜͧöô̐ςן@ŋɞʵ@ò@ȁɜǿóōɚƧɜφɞôƩ̎ƪóޠѺО@̐̎ƪô̎ѺƧƩƨƧ@ōóóôóςƪƨƨóôɛó̑ԭƥŌɛǿɝƨɛͩô@ǿƨȁѺŌɚɛ̍ןѶНɛƧôóƥȁƦͩôŎɞƨ̑ɜòôφ@ƨʵ@ɛѹōóȃəƨυǿóʵρƧƧŌƩɛ̏ȄñƧƧȀɝ̍ԩʶƧ̑υóŌƥʳɚӑóНƥô̑óӒѵʵѹƧӐןôƪφõŌƪ̒ԫŌƧؼƨƨסρȁƧƨȂóʶó@@ʴƨôôφ̎Ŏ@ȀƨƪɚƨóƨôôôςóޤƧŌƩŋƧԪ\"],encodeOffsets:[[100530,28800]]}},{type:\"Feature\",id:\"guang_xi\",properties:{name:\"广西\",cp:[108.2813,23.6426],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@ƦŋѺ̎ڔʵƨŐ@ƦמȄƪôóȂɜŌɚͩɜ@öóɜôôȂƦôɜȁ@ɞφóȄ̎ƨʶɞŋƨʴɚǿ̐̎Ԭ@ôñ@̏ƨρ۫ôɚƨƨНƪŐ̎ƥóƦʵƥŋ@ȃóƥƧ@@ŏɝǿôυƧȁѵɛ@əóŏ̑@@ə̍óƧó@ȁƩρóòНƥô@Ӓ̑@óŎ̍ƥσŎυ@̍ƨ@Ō̑ôóͪƨ̒óŌړ̏Ŏ@ŌôȄѺŎ@ɜƧʶυ@ñóɛƧ̒ɝóōƥͪ\"],encodeOffsets:[[107011,25335]]}},{type:\"Feature\",id:\"hu_nan\",properties:{name:\"湖南\",cp:[111.5332,27.3779],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@@քɜОƨ@öŐמóƪôƩɚ̒Ő߼ȁςͩɜòƪɜȀòñɝòѺͪ@ŏƨŋóɝôǿƨɚȃóəƨȃѵͩó̍@ȃƨóóƥƨƧ@ʵƦóͩɜɛóñԭɛōυȂ̍ƧƦō@ɛƥɛȀ̑óʷóō̍ƩŏƧОəƧóς۬Ƨ@̐óòԫ@̏̍əȀƧʳɝŌóɞƧƨɜóŐƨò@ȄƧŌρŋóôԪОóʶ@̎óȄ\"],encodeOffsets:[[111870,29161]]}},{type:\"Feature\",id:\"shan_xi_1\",properties:{name:\"陕西\",cp:[109.5996,35.6396],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@ςôöƨɝȂɞȄѶóóͪƨȀóŎƨ̍ɜƦƦôʸ̒@ɜƧςƪôõô@ƪڔ@ôɜóʶôŌô̒୽Ӓ@Ʀ@Ѻ̎ɜѺɛѶôöʶôƨóʴ߼۰óô̎ñƪѸƩτʶ@ȁòŋəѹóǿ̑ʵ@ȁ̒ʷυփô݉ôН̏ط@ȁƨóô̏ƪõ@ʳ̐ʵ@ɝɛŋƩŌɛóןôƧŋ̒ó@ŏ̐ƥ@ŏυ@ƧƧôן̏@ƥȂѹɜəɛóԭ̎ƥóóóȀןɛô@ŎѹōñƦ\"],encodeOffsets:[[108001,33705]]}},{type:\"Feature\",id:\"guang_dong\",properties:{name:\"广东\",cp:[113.4668,22.8076],childNum:21},geometry:{type:\"Polygon\",coordinates:[\"@@@Ȃôôƨ̎@ɚ̒@ôŐ@ɚѶɜƨȂóφɞȀ@Őƨ@ôƦ@ȄƦŌƥʶƦôôŎôʸ̒ɜǿƦ@ɜƥŎ̎ƨφȁɜŎòƥԮŎƨōóŏɛƧɝəɞƧ߼ɜςȃñȄƦŎ̒ōôòƨəƨɚН@əƨ̏ƪʵυŌəɛóəԭŏəóŏѹρʵɝƦ̏ƥʳѶöō̑óóŋρȀυƧƥɛѹōƧôןɛŏѵ@óŋôʵɝƪԩõ@Ƨō̍@Ƨ@@ƦɝԮƪО@@\",\"@@X¯aWĀ@l\"],encodeOffsets:[[112411,21916],[116325,22697]]}},{type:\"Feature\",id:\"ji_lin\",properties:{name:\"吉林\",cp:[126.4746,43.5938],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@נ@ôН̎ʵѺòƨōԬŎôȁɜŋѶô̒ŏƦōñǿòƧφ@ƨН̎@@Ȁ̐Őöʷ̐ԫ̎ôȂѺôòŌôƧ̒Őƨ̏̎ȁφ@ŋƩͩםȃƨ@ȁ̑ʶ@Ōóôɛƥѹ̑συ݇@ɜρƧȃࢯƨôəȂɛōƩɛ̏υρóõƪʴυφ@ʶôŌóρք@ɜƧ@ɝǿƧͪρȀƩó̏ŐƨȂ̍غړȃɛԮƨͪ̏ςƩôɚφȁƦôɜƧôʶφȄ\"],encodeOffsets:[[126181,47341]]}},{type:\"Feature\",id:\"he_bei\",properties:{name:\"河北\",cp:[115.4004,37.9688],childNum:11},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Ʃ̒̏ŌѺ̒ƩóȄƧŌƥͪòôñȂ̎ŐóȂ̒̐̎ôНɜנ̎ôŋɞȀѶ@ôͪφƨŌɚɜȃóƧƨƥƪ@ʳƩɞρ݈@υНφʵɜƦρƨƧ̍ɝóɛѹ̍ρŏ̑ôóƨ@ƧƦôƨɛ@ƥƨ@ȂƦ@@ôəŐƧʶƨŌυ̍̎ɛŋôōɝ@óƧ̍ƦʵѵʳôʵɜŏςôƪŋƨŌɚ@ôНƥƧ@ōѸɛ̐ô̎ʵѵНԭ@̍̍Ƨò@ȁɝ@əρυͩƪ̏ƩõƧŎƧōóॡȄɛʶɜȀ@ɞςѶƧƥςɛŐ@ɚɜɜ@Ŏôôςƪς\"],[\"@@õə@Ƨɛ@ŐóƦφô\"]],encodeOffsets:[[[117271,40455]],[[120061,41040]]]}},{type:\"Feature\",id:\"hu_bei\",properties:{name:\"湖北\",cp:[112.2363,31.1572],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@ñȄυƦöŐƩóנƨƨφ@@Ő̏Ʀ@Ő̑ôƨŌנóɜôƪŋɜŌѶօڔə݈òɞōɜŎôӏƦóƨô̒óôȃƨó̎ŐôƧƪ@ƨȁςƧə̑̎Н@̍Ƨŏρôԭͩԫ̍ʵƧóȀôɞƧŌ@ŐѹͩñòɞñɛǿƩɛñρͪ߻Ȃ̑ŏƪəƩóםôõŏƧ@ɛНƥȄó̑ѺƧôφóƨƨƦƪóɜŐôóòôƨóφ̐ƨóƦ̎\"],encodeOffsets:[[112860,31905]]}},{type:\"Feature\",id:\"gui_zhou\",properties:{name:\"贵州\",cp:[106.6113,26.9385],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ɜȀƦŋԮô̒ɚôōעƪƧʴɝ@ɛʶ̒ʶ̐ȁƦóȂô@ôŏ@ōôƨʶѸô@ʶƨɞó@ōτöòυƨ@@əƨô@ɛ̒@Ʀɜôȃ@̍ôʵԩНôóςŌƨŋ@ȃƧñôŏƧɛƨôɝƧʵ̍ôȃυ@ɝɛȂƥóóȁɛóõôɛ@əͪɛŋôȁƩóםȃ@ƥƧŏړʶѹ̍ƥŌƦȂóôɜƨѵО̎נəɜѹŋƧȂ@ȀóɜͪɞƧ\"],encodeOffsets:[[106651,27901]]}},{type:\"Feature\",id:\"shan_dong\",properties:{name:\"山东\",cp:[118.7402,36.4307],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@Ʃ̐φͪɚςɞ@@Ȃƨñ̎̎Ԯ@ѶОƨƧڔ@φН̑ŋ@Ʃ̒ǿ̎@ƨɜԬςôʶ̐ʶöԫƨƧנƥɜŎôō̎@ôŏóρƧŏԫôóƧԩó@ƥɜƧԭóƨʵɛƨ߻ӑɜНԩóô̑óƧʳəóɛƧ@õȀƧ̍ȃɛŐóŏυО̍óɝƩԩ@ƧɚԫȄɚʶƨɞʶԪ̐ړɛƪ̒\"],encodeOffsets:[[118261,37036]]}},{type:\"Feature\",id:\"jiang_xi\",properties:{name:\"江西\",cp:[116.0156,27.29],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@ƧȄôɚəȄ̎ʶԬԮͪςóƨŐƪτɞƦōƥƧ@ŏςôóŐôô̒ʷѶƪƩƩǿ@ō̒ɛôυ@Ƨȁѹɛəƨѹ̑ƨ̏óƥѵʷô̍ɛȁôŏɝǿƧԫƧôʳƥōòȃρȄ߻ɛɝƨɞɚɜƨôŐƧŎԭōñƦòԮɜôɛôͪƥ@ʶƧƨôƦƧô@Ȅô̎Ѷͪ\"],encodeOffsets:[[117e3,29025]]}},{type:\"Feature\",id:\"he_nan\",properties:{name:\"河南\",cp:[113.4668,33.8818],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@φ̎ƪ̐ɞȄɚ@@Ȃעó̎ŌѺ̒ôֆॢȃôƨŎƨōƪöƩ̑ڔɜԩ̏ɝʵƧəʵԬȃƨəԪ@@Ƨ̒ŏô̍υȁƧɚ̍ôóŋ@ɝƧŋõ̑σ@ŏɜŋôɝ̒ƧɚôôطρóóɛƩ@óƨ̍ŏƧôóȄ̑ôƧóƥôóӐɛōɝŎ݇ñړɚѵֆ@ɞ̏ʶ@ʴƩöó̐\"],encodeOffsets:[[113040,35416]]}},{type:\"Feature\",id:\"liao_ning\",properties:{name:\"辽宁\",cp:[122.3438,41.0889],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@ƨʴƧôôӔƨô̎ƩɞН̎ͪ߼ͪɜɞɚ̐@ƨςŏ̒ôƦƨɜô̎ƪôςǿƨͩɞȀƨ@@ɛςփôóŋ@ʵφυƩʳö॥փρѹס@əɛ@ͩࢯ@ѹʵρƩʶφȀƧ݈̒۬óʸɝŎѵ@ԭԫןɛƧƨƥςɛυʶφО\"],encodeOffsets:[[122131,42301]]}},{type:\"Feature\",id:\"shan_xi_2\",properties:{name:\"山西\",cp:[112.4121,37.6611],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@ɚѺñŌɚôȄѺ̎ֆφóςȂ̒ɜƨɚ@@Ȁƨŋôȃƪѹ̑̐ŋƪ̑Ʃρρóó@ōɛɛ@əɜŏƦρƨρѵ@ɝɛǿɜʵóօѹ̑̍ŋסô@ȁə@ɝȃ̏̍ƩυƧô@Ȃ̐ظóОó݊φք̑ʸ@Ȃ̒ʶôȀ\"],encodeOffsets:[[113581,39645]]}},{type:\"Feature\",id:\"an_hui\",properties:{name:\"安徽\",cp:[117.2461,32.0361],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@ó̎̑Ő@ƨƪѶǿɜ̑φƦʵ̐ƧѵôóƪôôυςƨȂɞŏ@̍ԫôò̑ƥóȃѶͩƧƥôŏѺôŏƦ@ƥͩƧôȁυó@̑ƧɛѵʵƩƪѵ̑ʸóóôŏρó@ŐƦƨƥŎσɝƩ@̎̍Оɚ̒ρƨƧȂôɜςôóظəó̑ƨóɞɛŌ@Őτö̒ƨŌ@ɞôŌ̎óƨəφȂ\"],encodeOffsets:[[119431,34741]]}},{type:\"Feature\",id:\"fu_jian\",properties:{name:\"福建\",cp:[118.3008,25.9277],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@̎óȁƨӑ̒̎ɚƨͩφŐƨɝ̎ŋóŏρ@ōƨòʳəóƨō̏õɛƧ@ƨѵƧōəŏóŋƧô̑ɝɛʳƥ@@óɛõ@Ƨ̑ƧóȁəƧ̑Ƨ̐@ɚəОƧƧɚóñ̑ŎóʴƨƨԬɞȀóŐɜȂó̎ѶʸôƦƧ̐Ѻ̒ɚƧѺɜƨȂ\"],encodeOffsets:[[121321,28981]]}},{type:\"Feature\",id:\"zhe_jiang\",properties:{name:\"浙江\",cp:[120.498,29.0918],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@Ѷʶƨɜ@̒φôóȂƨƦͪ@̐Ѹ̍τȂ̒̑נŐמôƪƧôӑ̑@ƥρͩƨօ̏@@υɝó@ŋɛ@ôƩəóƧѵυó@ƩɜŋƧ@̍ŌƧɞυŏƧͪ̍ə̑ƧӒôȂ̍@óφ̑ɜ@ŎƪȀ\"],encodeOffsets:[[121051,30105]]}},{type:\"Feature\",id:\"jiang_su\",properties:{name:\"江苏\",cp:[120.0586,32.915],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@ôɞ̎φНôŐɜŏ̎Ȅƨöǿƨ@ôɜɚƨʴ̒ôôó@Ƨ̎əԮȃԪૉöͩ̐ƧòʵφƧôʵ@óړɜóŏɜǿƧɝρσȁѷ̎̏ƥóŐѹóŐƨƦѵͪôȄƦñ̒Ԭó@̎ɝŐƧȁρóφƩóóôƨѶ̏ƥʶυɛ̒ѵȀ\"],encodeOffsets:[[119161,35460]]}},{type:\"Feature\",id:\"chong_qing\",properties:{name:\"重庆\",cp:[107.7539,30.1904],childNum:40},geometry:{type:\"Polygon\",coordinates:[\"@@əȂòɜƨѺɛƦȁ̐@ƪõŏφƥòȃƥ̍Ƨôυ̏ƧôñóóôɛŏƩôƧƥôƧóυƨ̒ѹôƦȃ@փƥɛ̑@@ɜƧó@ɚƧ@ñφσõ@ŎɝôƧ@ʵѷóƧʵó@ŎóŐó@ôȁƥó̒υôóʶəƧȄς̎ƧȂôƨƨƨφɛ̎Őƨʷɞ@ςԮóŌôôφ@ɜֈ̎ƨ\"],encodeOffsets:[[111150,32446]]}},{type:\"Feature\",id:\"ning_xia\",properties:{name:\"宁夏\",cp:[105.9961,37.3096],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@ల̒ôޠφӒςôƪͧυևɜŋѺó̎ȁ̍ɛ@ѹס@@ʵƧȁôó@ǿ̐ŏöʵɝŋɛ@ô̑ƥóóƨƧóôó@ƩôóƦ̍óȀƨŎɛӒôŐυͪɛ@@Ȁə@\"],encodeOffsets:[[106831,38340]]}},{type:\"Feature\",id:\"hai_nan\",properties:{name:\"海南\",cp:[109.9512,19.2041],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@φɜƦʶ̐ôφô̎@ƨŎö@τʵƦԩ۫õН̏óƥȃƧ@Ʃəםƨ̑Ʀ@ޤ\"],encodeOffsets:[[111240,19846]]}},{type:\"Feature\",id:\"tai_wan\",properties:{name:\"台湾\",cp:[121.0254,23.5986],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ôƩɝöƧɝѵəޣ̏ρƩԭóōóͪρɞƧОôԪ݈ଦѶɜ̒ɛ\"],encodeOffsets:[[124831,25650]]}},{type:\"Feature\",id:\"bei_jing\",properties:{name:\"北京\",cp:[116.4551,40.2539],childNum:19},geometry:{type:\"Polygon\",coordinates:[\"@@óóóυóôƥ@ŏóóə@ƧŋƩŌρóɛŐóʶѶʴƥʶ̎ôƨɞ@óŎɜŌ̎̍φƧŋƨʵ\"],encodeOffsets:[[120241,41176]]}},{type:\"Feature\",id:\"tian_jin\",properties:{name:\"天津\",cp:[117.4219,39.4189],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@ôôɜ@ƨöɚôôôɚŏ@óƥ@@ȁƦƧɜ@óƧƨƥ@ƧóəН̏óѷɜ@ŎƦƨóО\"],encodeOffsets:[[119610,40545]]}},{type:\"Feature\",id:\"shang_hai\",properties:{name:\"上海\",cp:[121.4648,31.2891],childNum:19},geometry:{type:\"Polygon\",coordinates:[\"@@ɞςƨɛȀôŐڔɛóυô̍ןŏ̑̒\"],encodeOffsets:[[123840,31771]]}},{type:\"Feature\",id:\"xiang_gang\",properties:{name:\"香港\",cp:[114.2578,22.3242],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@óɛƩ@ρ@óôȀɚŎƨ@ö@@ōƨ@\"],encodeOffsets:[[117361,22950]]}},{type:\"Feature\",id:\"ao_men\",properties:{name:\"澳门\",cp:[113.5547,22.1484],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@X¯aWĀ@l\"],encodeOffsets:[[116325,22697]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/chong_qing_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"500242\",properties:{name:\"酉阳土家族苗族自治县\",cp:[108.8196,28.8666],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XJ°lJX@lbl@XbV@VLnJlxnbUU@IVK@lVIVwnJlU@n@J@L@Jn@l_nWVLVln@@blLmV@@xÔ`nxVÈLlxLVxVVV_U»VWn_m¥XwVmnX°lmUUVwÞaVk@a@mmIUa@mwk@m@@U¯a@UV@@K@ykkmwkV@kU@ÑVkKWLÅamaUm@kyU@WkU@UaIUaVaUUmUUa@aVLXKWa¯UUbmJXnWnX`l@@xkzWÆ@VLU¦x@b@JkIkJ@LmbUamJwm@óxnk@V@xVnUVmVUVUbVlUbkXW\"],encodeOffsets:[[110914,29695]]}},{type:\"Feature\",id:\"500236\",properties:{name:\"奉节县\",cp:[109.3909,30.9265],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@WVXbUnK@x@b²kxmKkl¯_VV°VU@bnKVVV@@nk@nbn@°@VLČU@°WV@VnU@InKVl@nUbKnXWlknLlKUwnalLaVlUXmWk@UU@UWWIUyķ¹XaWW@XKUIVmU@W@UVU@KV@n»VkUkÇmUmVIUmULUbm@wUaKkkm¯ÑUL@bWVnx@VmxUI@klmkkK@aK@IlJ@I¯k@mak@mnkJVL@bV@UbW`UUUVI@VU@VVbUJVLUVVbUXVVxk¦VJUnVxnVVUJV@Ubl@@bXV@L\"],encodeOffsets:[[111781,31658]]}},{type:\"Feature\",id:\"500238\",properties:{name:\"巫溪县\",cp:[109.3359,31.4813],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nLWbXVLVUV@KIVl@b@lbUVnU@JÆU@V@n°KĢUl@VbÞKV@_VKXUU@KX@wlkkU@mWKUU@UôJ@XV@aVmÞIVaVL@»km@UkLU@aU@WWLUUUKkbwWa@KU@kaXmWLamVk@UmL@JmVUU@¯X@ċVUK¯@ÅnWKLkKULWK@UXK@wW@LkV@bVLlXn`¯xU°LnlV@n°Lnl\"],encodeOffsets:[[111488,32361]]}},{type:\"Feature\",id:\"500234\",properties:{name:\"开县\",cp:[108.4131,31.2561],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@n@naIw@@VVKLVbVxnVÆUnanKWXamKmk¯K@mkUm¯KV°w@Wm@UIUUlKUU@a¯KWanwmUXamKkUWUnU@KkUwWKXaWLUWkImaUUUKka±k@l¯wwmbUkXm@UJkIWXXbmUJXUV@°KllVXV@xmbnV@blV@VU`UL@Va@bULlb°VXbÜ@V@bL@JxnLVb@lVb@V@@zbXWXKVLV@@bUVVL@blVna@ll@zl@@J\"],encodeOffsets:[[111150,32434]]}},{type:\"Feature\",id:\"500243\",properties:{name:\"彭水苗族土家族自治县\",cp:[108.2043,29.3994],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@Jlb@nVV@bXb@ÆlLUl`nVKU¼VxkbWnlUxlXX@°°WnnJ@VUn@Jk°L@VlV@nUJx@bVVVz@VnLlaKnalVlIU¼@nV@@anKUwVal@UlJlI@akU@UWXKVI¯Uak@@KmkXWÜkXWykIWwXw@laXamkVUUym_XmlkkmmakwmIUKU@Wak@kaW@kI¯WIk¦VUUmaUV@XkVUV±aUb¯b¯¥m@@ImJ@mmL@kUKUkkJbV¦\"],encodeOffsets:[[110408,29729]]}},{type:\"Feature\",id:\"500235\",properties:{name:\"云阳县\",cp:[108.8306,31.0089],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@lbLVVVnblJVXXKWbXLVxl@LmVXVVlnLWbnVmxXb°L@bVVkLVVVJn@@X_WmkUK@alUKX@@xWL@VXLVKlLKXLÆm@ma@ml@mU@UUmL@aVUU¯U°`lknLlw±@a@wmLVWaXU@KWU@ak@VaU@IUVmUUwVmUIl¥UwUVWUaVUUKVIUa@UUUUJUUmknl@@VWV@L¯aUbUlx@@b@VULUx@VUxVVU@bU@mxUU@mUVklkk@WxknlxK@amLKUK\"],encodeOffsets:[[111016,31742]]}},{type:\"Feature\",id:\"500101\",properties:{name:\"万州区\",cp:[108.3911,30.6958],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ĸĊVInaWWXlJVIn@lWVnax°xkl@²LVLnK@bLkwlmXw@lllkUnVV@VnwV@@aVUUVw@UVwVK@U@a@kwVVa°b@KXU@U@mkÇÑamlkUVmn@VULUm@kUVkUawUWm@Uw¯mKUUmVUUULUKUW@XbWVkaWwkUUk@maUbmbVlk¦xUVUIWVUkJVVkL@UmJUUVU@lLUVUlx@@VbJUL¯¤@V\"],encodeOffsets:[[110464,31551]]}},{type:\"Feature\",id:\"500229\",properties:{name:\"城口县\",cp:[108.7756,31.9098],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VK@w¯L@m@UÅV@ImVUVka@@aUkJ@LUUVUKmLmbÅVmUUwUaKUL@U@xJmbm@nVJ@X@VkVnlLXx@b@bUVLU`UnbU@@mVVX@JX@VLVVklV`@bUL@VLVKn@U@UJkn@lmLmK@X@Jn@mbnÞWVXnJkKČÑÆ@VK@knaÜmXlUČW°kôÇÆ@a@yÞ_VmUnU@K\"],encodeOffsets:[[111893,32513]]}},{type:\"Feature\",id:\"500116\",properties:{name:\"江津区\",cp:[106.2158,28.9874],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@InWUUlU@LValX@°²lÒXxlK@Ul@@Un@UaVJ@I@W@UUUVUwVIUKUaUUVwn@Üx@XUlnnbJ@¥VklKUUlk@ynU@kVUUVWnI@¥V£VWVIUKU@UVa@n@Vm@@nlUaVkUwJ@blLkLW@XWmXkmmLn@m@U@UVm@UVUUlakUVaVkV@@wnaWUk@VwklmVIkUUxmJ@U@KIkx±V@IUm@K@IUKkbWKUbnm@bmVnbmb@xkxUJ@ULW`@bX@WVXL@V¯mk¯@UJ@VmLUaWnX@WJ@nkKkxW@UIV@@KkImmkK@UW@XaWIU@UIkbWbxXlLVbnV@bWlX@VxVLnl@nÆÞVÜ\"],encodeOffsets:[[108585,30032]]}},{type:\"Feature\",id:\"500240\",properties:{name:\"石柱土家族自治县\",cp:[108.2813,30.1025],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@kl@¼UbmVXJ@bV@nxVIVJULVVk@@LWbnJVU@bVbUJ@blLXnWV@mbnV@Vbn@VJVLnaVanbl@VlVXxlbXUWaX@VUUVwUUVm@I@WmI@amlLlK@alwnUV@kóVaÝk@UlbVK@VU»VUUVWU@U`ULkwm@@KmU@knK»VkJkUmbLkbmK@UUyUU@awm@@XXJ@VVLVVUbVnUJVX@Kk`WXXJWXUbmW@bkLUm`Xnb@JVL@LU@°VVXKVnUxVLUbmJ\"],encodeOffsets:[[110588,30769]]}},{type:\"Feature\",id:\"500237\",properties:{name:\"巫山县\",cp:[109.8853,31.1188],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@kVUbkKmbVxkLmKkllbV@@LXbxlaLVVVKXXV@@bVlKV@ln@¼°KXaU@Ulw°JXalIUaÝWXW@kVU@VUVWUUUamUw@aVamwn@VUUlLXWm£@wÇĉkKklmLUÒ¯Wn@ğ±kwmaWm¼U@@LUV@V@XVUnVJLW@XXWbĸºVzXJVXV@@VXlWn\"],encodeOffsets:[[112399,31917]]}},{type:\"Feature\",id:\"500102\",properties:{name:\"涪陵区\",cp:[107.3364,29.6796],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nèVblĖVVnL@xVn@nJ@LUVVX@lbUJV@@nn@VVVK@zV@nzVJVUlmX@@_VVVbnaVal@@knW@wnaVK@aVIJ@£kUVW@wXUVJam@Ik_X¥@WwkKkwmkUxnÅmm¥WV@Um@UlVL@JU@@X@UVkKVkKVkKkb@bmJVXUVVUbU@@`W_UV¯b\"],encodeOffsets:[[109508,30207]]}},{type:\"Feature\",id:\"500230\",properties:{name:\"丰都县\",cp:[107.8418,29.9048],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@Þè@XUK@LlV@blbUJ@V@bnV@VVVXU@lbXal@VXnKV@maXUÞ@amk@aVKXVanb£°mnIVaUKVwUmWLUU¯V@@KUK@IaWmn_VlK@anXVaXWWIXWl_@LUWVIUmVaUUUK@UWI@Wn@VI@mkU@U¯Kl@ImVÅLwU¤óbUU@wWXkmm@LU@@VUIWVUL@JUnax@JnbUIWVx@UXlV@¤IUJ@bULmb@xmX@lk@UbmbUaUU@`W@kn\"],encodeOffsets:[[110048,30713]]}},{type:\"Feature\",id:\"500232\",properties:{name:\"武隆县\",cp:[107.655,29.35],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@lwbVm@IVKXUVJ@UV@@KnnWlX@xVVôaV£xÆKnUVm@UmIXm¯¯@WkWVwmkXlaUwV»ULmk_VkK@ÅWa@aUU@mkaIb@n¼nm_@mmK@ULUVVmI@aUJ@XWJ@U`UIkm±kk@@lULmUmKUnVnlUVmI@VkVlxbkIVmLUxkKUXn¦ÆnmVwlnlxlLXx@W¦`\"],encodeOffsets:[[110262,30291]]}},{type:\"Feature\",id:\"500119\",properties:{name:\"南川区\",cp:[107.1716,29.1302],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VUbVJVUn@VLX@WVXVVI@VUVWxU@m@ĊX@@¼V°aVUX`@_V@VaUUVUWnI@alaLUlLUllLVU@@WV@@IUKVkn@@VlLVwnKUlJakwlU@UnJVUmkUVmXa@wVK@UUw@VVI@ak@alInwlKXUmaUW@wWLkKVak_ÇaUV@XbLVxUlWIk@UK@V@kU@VbUVUlVnLUV@lVXmxkV@L@V@Vk@WbUwmL@JUI@xVxkx\"],encodeOffsets:[[109463,29830]]}},{type:\"Feature\",id:\"500241\",properties:{name:\"秀山土家族苗族自治县\",cp:[109.0173,28.5205],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XlV@lzn@VnbÆbXKlLUÒV@@llUnxll@z@LU@@V°b@Vn@l@VÑUnK@UU@aUakVm@K¯wklmnnUl`nI@almkIUwmWVkUakkJmUUa@K@aU@@_m@@wUyVUUa@Um@awl@Wka±UkUykIWVb@bUVk@aU@UXUUIWakUWmUxUV@nUVWb@XXVVmXX@VbVLkVWx\"],encodeOffsets:[[111330,29183]]}},{type:\"Feature\",id:\"500114\",properties:{name:\"黔江区\",cp:[108.7207,29.4708],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VX@V@LV@VJUL@lVnnxlb@VXVXV@@W@UIVK@kUKna@£VWUaVUUalIVJVIUW_lm@bXKV@mn@JUUw@KnIVll@VanLVmUkVKXLVKUIVamw@UaU_lwKlwUWV_Ua@aUa@KUwm_Ó@wU@nkK@am@UkUKmXk`m@@I@K@I@mkVmIUxUJ@kUL@JVVlnklWnn`VzUVnlWbkb@WxXxlJXzWÛlWXnl@Ll@Vb°UJWLX@VlV@bkJ\"],encodeOffsets:[[111106,30420]]}},{type:\"Feature\",id:\"500117\",properties:{name:\"合川区\",cp:[106.3257,30.108],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XKVXlKVL@UnV@aValXXKU@WVwUaVU@IV@@aVWL@U@anVV@@bVK@UVL@bnJWL@VnUnb@@JnIlVl@@bXIWbn@UKVLVKXLlaV@VVnK@bVLmIV@KmknUUWVI@aVJ@_WU_VmUwU@KVak@am¯mJU_UJUkU@WkIV`UI@JV@LmmU@@mbUzÅ@VK@nUKbakb@UWK@bkVVbVÛ@@`Xk@W@n@lXL@bmb@VVJUn@JnUlnUlmX@`XLlbkJW@kzlb@`@b@b\"],encodeOffsets:[[108529,31101]]}},{type:\"Feature\",id:\"500222\",properties:{name:\"綦江县\",cp:[106.6553,28.8171],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@¦@XlVX@@UVKlVUX@lanVlUVbXWVXVVVUnKVUlwUwU@UJ@nmVkUVlwXam@VaUUUw@W@kk»mV@UmKkwVKVUU@@LUKVI@mV@XVWxnXVKUUUK@wWU@UUWnUlLXamUIam@wI@K@amImUUkI@makUkKWUUan@wamLVxk@UVmUUL@Vm@kV@I@ak@@bWVXJlLVbVL@@bn@@`Un@WbUKULWVXb@UVmbXWVb@bVmxUKUV@Un@V@V@nmnKlnnWWXX@lKkK@aIVxUlVbk@mn@@U@mbVUV@VLUJUXU¤\"],encodeOffsets:[[109137,29779]]}},{type:\"Feature\",id:\"500233\",properties:{name:\"忠县\",cp:[107.8967,30.3223],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VLÞĊU@W@¼V@lk@w²mlVUllVnI@VlKUUlIVXUVJVUwl¥UkUKUIm@aU@mUna@XUWmkK@aVIUa@aUVmIXa@Kl@UUVKUIUJmwU@@aWInUVa»k@@l¯n¤mabWUUL@bnl@bÝWVnbU@mLUWk@Wbka@WVUU@UmUmVkUULVlVUxl@L@VbÈÒlb\"],encodeOffsets:[[110239,31146]]}},{type:\"Feature\",id:\"500228\",properties:{name:\"梁平县\",cp:[107.7429,30.6519],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XLV@VV@b°°nnkb@bnJWVXblIUVxWnUJnVVLVUJlUnLVK@UnUVJ²nKVbVKla@aXlJkKlb@U°£KVIUa@@kwVVUkKV@VUkkUVk±n@xkl@U@»@XVÝĉUJnxWb@UXKkVUbUKWUkVmkkLU`b\"],encodeOffsets:[[109980,31247]]}},{type:\"Feature\",id:\"500113\",properties:{name:\"巴南区\",cp:[106.7322,29.4214],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nxnVlJlUXL¦@x@Vl@nKVVX@V_V@@KlVXU@lKlxXIl@ÈĊ@Vl@n_VJlnVlnb²VVVJVVmUUkĕUamçU@»W@@ĉnV@XwVU@UUJWUXUW@UKm@UVUIVaUUVmLUVUUUWWXUakVmUkbW@UVkUL@VW@kUW@mJUXVVU@lmV@zklVVkLUl@¦I\"],encodeOffsets:[[108990,30061]]}},{type:\"Feature\",id:\"500223\",properties:{name:\"潼南县\",cp:[105.7764,30.1135],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@a@a@_kalyX@lIkaWK@_nWVkkmmV@IVmUI@Una@aWK@k@mkbWaknmJUk@mk@@kUal@Ua@Wa@aXLlwUKlkk@KmI@VUJ@Lk@@VUUmL@amJU£kKUaWakLmU@bVVUbnbWV@xkL@bUbxUxVbXJVbUVWIUVU@kLWxkKWV@n¯VUbU@@VVX@VmaUL@VUK@VVbn@lVnI@@lnLULm@Ub@l@na@lK@XVVkJ@b@zl@@VnV@bVb@J@bnXV`lXXmVI@W@InbV@@aVKUblKVLUanLlmnLlK\"],encodeOffsets:[[108529,31101]]}},{type:\"Feature\",id:\"500118\",properties:{name:\"永川区\",cp:[105.8643,29.2566],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@bÜnWVLXlxVVxXxlVn@@bVblK@a@UnLVJV@@UnLVU@VXaVKVX@n`WUÿ@IUKlaUUUkWyUÛÅÝ@mmkUKUwW@Xk@amUUakKWwXaK@VVLklXVlkxVUL@bm@Vxn`IVxUVkLVUl@@lkXmmVUn@VV@Xb\"],encodeOffsets:[[108192,30038]]}},{type:\"Feature\",id:\"500231\",properties:{name:\"垫江县\",cp:[107.4573,30.2454],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@Ċ°¤nÒ¼aV_lKnllUXVVLValULVW@XamwVIUKkaÇÑa@U@KkVwkUUVKlVnU@aU@VIka@akU@KVL@WÝçUV@VmbÅ¯@LKnnJWVkxlL@VX@VxmnXVWxUb@bkn\"],encodeOffsets:[[109812,30961]]}},{type:\"Feature\",id:\"500112\",properties:{name:\"渝北区\",cp:[106.7212,29.8499],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@bVVXLa@lnbWn@L@XVlK@VVLUVlbkLUKVVVL@VnXVL@VV@UbVb@x@¦UxVb@bUJL@LVVxlK@nk@U@WUVLlKXV@VblU@UUKVU@wn@VJVanLlkX@VaVK¯@a@U@U@VaUKkUU±maUkm@UUkbm@@Vk@@JwU@Ub@I@JmwUL@a@@KkVÇLkWk@kUU@@xUVmKUnllUb\"],encodeOffsets:[[109013,30381]]}},{type:\"Feature\",id:\"500115\",properties:{name:\"长寿区\",cp:[107.1606,29.9762],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VVUbXlX¥l@XnVmlxUx@@blVnnôĀlm@aVaXwWUnmUwW@@UkKlwUXmImL@KÆ°na@UUImyU@@yULUUm@@mU@VIkaW@UUV@KI@mmUw@mKUnUUIlVLUb@@V@V@b°ULUbW@klmKUbUIm@@xUVVL\"],encodeOffsets:[[109429,30747]]}},{type:\"Feature\",id:\"500225\",properties:{name:\"大足县\",cp:[105.7544,29.6136],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XUmaVaUU@anVlKXbValU@aV@@IXK@@bV@VxVK@UXLlUJXa@_@@aVKÅWVkwWawUa@am@kUWLU@kWmX@ykI@W@UV@na@LlLV@UkwWUKmXX`mIVl@bXLWVkbkkx@`VXm@@J@U@UUKUxk@WbUIVl@VXLWJUkUlUImxXlmb@X@VUJUnVbW@UV@@VVX@bnW@LVxUnlJUV@n@VxVIn@l`UVVVL\"],encodeOffsets:[[108270,30578]]}},{type:\"Feature\",id:\"500224\",properties:{name:\"铜梁县\",cp:[106.0291,29.8059],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VblLV¤nI@bnKVV@Ul@@KVI@UnJ@LlklVLkxWK@bXb@Vbk@Vb@ll@@nVlnIlmXblaXl@W@_Ü@UUalU@aXL@VlabaVL@mUL@UUÇXUWX_WaU»m_@UWULWb@UUVmK@VU@UImK@V@bkLxXblxXUÆUL@b@@`WbIkVWK@VULUwU@@a@WL@JU@@bkVUb\"],encodeOffsets:[[108316,30527]]}},{type:\"Feature\",id:\"500226\",properties:{name:\"荣昌县\",cp:[105.5127,29.4708],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VI@U@WnaWknwVJVkVlIXWK@UUkVJXal@VwVL@V@V@In@UW@_wlllaXUWK@aUknJW_Û@aWaU@@UVmUUaUImJVnÅUmVUm`kUUVWLnVU@VVmXK@nxmULkxImJ@nU`@X@Vkn@`@nlV@nVJVaXVLnK@bVV@nV@lbXW@\"],encodeOffsets:[[108012,30392]]}},{type:\"Feature\",id:\"500227\",properties:{name:\"璧山县\",cp:[106.2048,29.5807],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XzVlVVkbVL@JVĀX¼VXbW`XWVÈVVVkV@@UXa@alK@IU@UKWUyUI@wVUUWVak@VUkW¹@WXI@yVIUK@kWwkÑ¯±W@kUb@KkVVVmXJ\"],encodeOffsets:[[108585,30032]]}},{type:\"Feature\",id:\"500109\",properties:{name:\"北碚区\",cp:[106.5674,29.8883],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XVLV@@JkL@bWb@VU@UlÆVya@nV@nn@KU@IVJU_lJXV@VlVIV`nIn°@blUbKVI@aUaVw@¥@wUaVaU@@UUKWm@UUKUUVLlKkaVUUK@UkLWU@@KXmma@kbWKUU@aUamLnÞ@VWLk@@Wm@ULU@@UKUVWI\"],encodeOffsets:[[108855,30449]]}},{type:\"Feature\",id:\"500110\",properties:{name:\"万盛区\",cp:[106.908,28.9325],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VIV@@wVJ@InKVxXal@@U@U@KlUnwUW@kVUKUmVkUa@I@KW@@bk@@mU@m@k@a@aIUxmJk@wULwkKmVVX@VXV@xVLVVULmWXwWUU@@nUJVL@KV@UVULlxnL@VnUl¼@l@XVxVVUbn@WbkxUlVnU@m\"],encodeOffsets:[[109452,29779]]}},{type:\"Feature\",id:\"500107\",properties:{name:\"九龙坡区\",cp:[106.3586,29.4049],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XKL@V@XbV@lW@UV@@VXIV@UVKlL@KnnJ@VV@VU@I@@mVUVWUUmL@V¯LUK@UV@UU@a@U@yU@WLUK@X@KUVmL@@aXI@w@ammVk@WÛwm@UxVVVbVLUJVxVUV@V@X@JUIVbm@@Vk@@VkL@lVLUJ@zWJ@X\"],encodeOffsets:[[108799,30241]]}},{type:\"Feature\",id:\"500106\",properties:{name:\"沙坪坝区\",cp:[106.3696,29.6191],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XºlUVl@UbVXUV@xVJVzXJVUL@VV@VKn@@Xl@XK@UmÝnKVbVakkVm@kUK@UmIm@LkKULVU@WJ@UU@@VkXU@Wa@@UKWL\"],encodeOffsets:[[108799,30241]]}},{type:\"Feature\",id:\"500108\",properties:{name:\"南岸区\",cp:[106.6663,29.5367],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VVJVL@bUVVnl`XIlwXJlw°nnlIXW@UÇĉk@WJkwkL@WVkU@LU@U`W@UXUV@n\"],encodeOffsets:[[109092,30241]]}},{type:\"Feature\",id:\"500105\",properties:{name:\"江北区\",cp:[106.8311,29.6191],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nLVU@wV@lV@XllÈKlU@L@@bVKnx@I@JVaV@x@Il@@Un@laVVn@mkUIm`k@WXJmk¯mkxWIkxWJk_UmVUUK@UU@@l\"],encodeOffsets:[[109013,30319]]}},{type:\"Feature\",id:\"500104\",properties:{name:\"大渡口区\",cp:[106.4905,29.4214],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@k@@U@w¥WKkVkImUmwa@b@xWJ@b@nKVU@L@WVLXKV@@z@V@bVVU@@VVL°K@U\"],encodeOffsets:[[109080,30190]]}},{type:\"Feature\",id:\"500111\",properties:{name:\"双桥区\",cp:[105.7874,29.4928],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@WwUwU@kK@KmbU@@V@XlJ@znWlXV@XK\"],encodeOffsets:[[108372,30235]]}},{type:\"Feature\",id:\"500103\",properties:{name:\"渝中区\",cp:[106.5344,29.5477],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VL@VV@VL@aUKIUU@@JUVU@\"],encodeOffsets:[[109036,30257]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/fu_jian_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3507\",properties:{name:\"南平市\",cp:[118.136,27.2845],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@@knyk@KU¥wV@nkWzUmk@@lKUa@aVI@UKUamKUUVaUI@X@UV@K±IUVVlUbUbUL@KWUXmWk@KkXmmkÅKUa@amUbkUkKWUnwUÇwVUUÝUKV£U@nKWwXLVKm¥@wUXkmWk@@wX@lU@yVImaXwV@knU@mbk@mlUXmU@mV@n@bnW@bUIWJImVUKWbUK@nkKaU@W_VUUmWmL@UU@bUWUL@V@bmVUz@`mUUVVbXL@VL@lmLUxmVamXkW@xWbUVbUxkU±@ÅUmmkLUbW@@`kLknVlV@lbXxlVUXVVUU@UbWkIWVUUUJkI@llbUxVL@VVUU°ULUmWXUV@VULWb@xm@UaVLVKUa@w@VbkmVambUUm@@VkK@@bxlxX@n¤@X@@lkLWV@nVkb@bWJXLWx@nkxmmbXn@VWVUn@VnJ@bVXl@VJXnWbX`lLUlJVI@@VXV@Vl@bn@@Æmn@VxXU@mVIlxVnIl@nVJaXI@mlU@aXkVm°klmnVV_na°@V@xÜ¦XKVnnUlVXbVKLXKV@naV@@VVl@@lXblXWnLlbVK²n@@VLUnlV@lXxô°V@UnaUUlKXLVUVVUbVVlUnJVX@VW@an@lb@nl@VU@anUVW@kaUm@InVVKVU@kUW@Uam@km@kVa@a@nwU@WlI@mVI@WXaW_n@nlkkW@U¥@kV@Uw@wU@@IXK¥VIn@nU@`@Xl@VVLnaWbVaUwnU@VIKlV\"],encodeOffsets:[[122119,28086]]}},{type:\"Feature\",id:\"3504\",properties:{name:\"三明市\",cp:[117.5317,26.3013],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@lL@Un@VVnabnUla@Ux@VbULUKVbn@w@XaVK@UVUXWVnVKV¯VU@UUKVwka@klJVIVVXUlJXVaV@VUUVWkUWwkaU@UklmlK@_X@ValKnnÆV²@lVVwUaVXa@wlXnWbnUVwnK@kK@UWKUaVUnV@_VynU@a@UVKVXaV@@VnKnXVVUX`V@blL@mVLXaVLnUJXIVJ@amX@a@mnUV@nVWnkl@naV@ml@@KmKUam@UU@@UlKUVkUK@aVaUwVU¥UIkJ@wmI@mbkwkVW@UXKULU`IVKUa@LkkVmUU@WlULUWÅU@I@WWnU@@w@a@Uam_XyVIVWkk@mwVKXUV@nwVXkWÅU@aU¯KUnK@¯mULXVLnWVbVbUVm@Ub¯¼W@am`kbamLUUUaUXV`@x@XmJ@n@L@xkJUU@kU@mWm@kUUwUUVWl@VUkIy@kkaVUUmIWVXbWxU@kmVkK@nWVX¦WxU@@bkx@VU@Wk@kUbmJUUmkUW@_kKWK@knV¤kIUKWLUbV@Wbk@@VWL@VkI@lUXVxUVU@@mWIV@a¯nUaaUV@Jb@bÞ°VbU@XaUVmL@VXblnV°n@Vnx@VUUUlK@InJVb@Vlnn@VL@VWJUx@XlJUVVVl@LUUUJ@L@lUL°¦kVVnV@xVl@blLnlLVaXll@nVUn@xn@nml°X@lb\"],\nencodeOffsets:[[119858,27754]]}},{type:\"Feature\",id:\"3508\",properties:{name:\"龙岩市\",cp:[116.8066,25.2026],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@aI@VUbVb°m@bUXJ@nV@VUUwVW@klJ@UXK@Ul@Xa@UVaXKVLlJU£lm@XLlL@`VXnlVVnIVall@XV@@Ulw@aV@XwW¥XU@mlLnUlV@XwWaXUJVnUVlb@lzlJUVk@UXVVVxlVn@nXV@@lVVlI@w@K@mnI@W@wU_VWbVVVnKbla_nbX@°»Van@VUUaUamXUKWK@a@Uk@wWkXWW@wUUKw@_lywUkU@@U@kamVmXaUVUka@Wk@»UUUVKkbWUVUbk@mkxkKnIVUmW@kUKmXUmVaU@kU@m@KUWVkIWJ@U@UI@wUUUa@KW»nU@mVkUmm@XwWU@UUmL@w@mnVUU@aWak@@amxU@UxULWVXbVLU`mbUImVUbnV@@bVn@bnVWxLmyUbIUK@aVmakbVUXWUlKWbkV@WLUlk@@nbb@lkKmU@UIWJkw¯UUVVxm@@XkbWxXKlUzWJkUUL@bmKkV@@VUIUlWV@XK@VkbWx°xUb@LUbk@@VWb@LXJ@VWXU@@bUVVVVn@VVlLn@l@xk¦Vx@bVJXbn@JlnXxV@@nJ@X@V@lmxbUn@xVL@VVKlL@lnLVaVL@xkl@LxVl°XWVXVlJWnxlJ\"],encodeOffsets:[[119194,26657]]}},{type:\"Feature\",id:\"3509\",properties:{name:\"宁德市\",cp:[119.6521,26.9824],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@@LVKVaVaUkVU²J@LVU@@WVJUbVVnLVbL@VUJ@bVbkL@l@VnyXmlU@xV¦L@lmz@lnL@bVVbVb@lnKVkVl¤@zXV@l@XJVLVKnXVKVnU@wUm@KU@UlVlw@U@U@UaUKlU@kXKlmXIWKXaVIVUVK@KU@@kJVUnLVJUL@VIVa@VnLKUnl`VbVV@Vbn@Vzn@lKnVlIVVKUalkXJl@XXVWVLVUUmVU@Unm£lK@Uk@WUXK@U@WVwVkĠkĢÇ°aUÅUwmaţɱUÇaw±V¹XalKôx@UVaÜʓͿVóbÅLJm¯Vk¦k@mamXkKUULakbk@mV@LkJWb@VkmXk@UVmaUV@amLUKUamI@KUaU@WbU@UUUUIWJUkm@wKkVJm@kxÇVUK@mUVUkmlkkVm@amwLVWU@UbVLkUb@VmK@XaVWU_VJnwV@@kUmWakx@kwWakIWxnbUJz@kVW@@x@XllnVW@xn¦ULWKXxmL@VU¤VLÞVVUÈxVmxXVlLlVanV@bbVLlÆnnlW@LXlWnXV\"],encodeOffsets:[[121816,27816]]}},{type:\"Feature\",id:\"3501\",properties:{name:\"福州市\",cp:[119.4543,25.9222],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@lxna@nJ@xlIVJV¦UVxUb@bLVUlVkL@V@VVn@VbLn@LUlJXblx@lwXbVn@lU@mxUIV`UXWb@nLU@ValUKVaV@UXKnxbn@lUkllnUVnV@VLUÈlwn@UIlLxn@VlXIVJVVVV@XaV@Vb@LnJVbVLnK@bVUnbVUl@nWl@UXalI@KnUl@labVKVlLnWnbl@l¥°UnIÆKôa΀Ua@UUwÇWǓIUWUÅVkƨm@@£@KmLU¤ULˣJkUVǟUUķ@ĉVKUk@Ñ°wôÇç@īé@Åţ¥mīÛkm¼Å@VķVó°ō¦U°n@bVJXVVL@bUakLmx@xmxXzW`XbWnXV@bWLÛ@a@aXbWVkaÝwU@mlWKkLWWkLUKULW@kVmVUUÝUamV¤n@xUVUzkJV¦lJU\"],encodeOffsets:[[121253,26511]]}},{type:\"Feature\",id:\"3506\",properties:{name:\"漳州市\",cp:[117.5757,24.3732],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@@bl@Xb@bVVUm@nx@nKVV@XVWxn@VnUl@nmVX¼@LVbVV@xVJV@@XIlJXUV@Ln@lVV@UbVnnWVL@lnXUVmJLlwnll@VaUXVlaLVUVV@¼Xl@lbUVVWbnnUlb@@VV@aVUmlUaUny@kU@Wkk@WaUVk@@ammk@@U@UlU@aUa@wl@mXLllnLU@anVnU@L@VVV@KlXnWVnVanUw@w@wmnÅ@waUam@UkmUl@@aa@U@¥kôKwÈ¯°w@ŻkwǕaKÑÛk@ĕōřċ£ĵUKW»kÅŻLU@Ulġw@¤VzVUbkKUbmLmlULU¼UxmbXl@bWVb@bUnVUVbULU@@VkbVL@`U@WX@XV@b°@b¯@¤@Xm@@b@`UVVUL\"],encodeOffsets:[[119712,24953]]}},{type:\"Feature\",id:\"3505\",properties:{name:\"泉州市\",cp:[118.3228,25.1147],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@Vlxkz@`xLVV@xXXWXl@xl@V@bnV°@LVm°LVbV@ÆXWlUmxU@WVULnx@llUXUJWzn`Vb@@b@xV@mXX@@JÆVVXVKXkV@nVlUl@KVbULJV_VKLVWX@lUVkIU¥lIVyVU@wm£nUVWU@am@UmWw@UX@@amVUn@@aUUlUVanaWUXWmUnkK@VUlVVUUw@XLWWXma@knmbVbVXbVL@XJlInlLwmXów@çV»ÇçŋaķƧóƅóKġ°nÅUķƑUÇW@¯xÇ°öÆlVn@lla@Lb`@VXVVx@V@bULVJUkÇ@¼XUKk@mmULkaWbk@x@UkL@a@K@U@UmKmbU@kV@UmVUbUmmXkW@LUU@U@KmVmU@bVmKkkWKnk@@xVb@bkV@V@Vl@nn@bl@VUXbl@XlV@@lmzVVbknUVb\"],encodeOffsets:[[120398,25797]]}},{type:\"Feature\",id:\"3503\",properties:{name:\"莆田市\",cp:[119.0918,25.3455],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@VbÞVVnUlUX@VKVLlKXXlKXLnkV@ÞxlbXUWab@bÜ@XK@aWUXmWaX_Wynw@wnwlKbV@aUKWUUI@amV¯Ŏ¥ô¯ĸUUÆ@n»¯aƿé@ţ¯nĉĬÝKóó@ÑU¼@èxWônxKmkkJWI@UKWaUUaamn@lnbWXXWK@VxUVkUV@ULmlnVWXXVmbUbkVVV@bm@UVn@bW@@VXxn@Vn@bVUX\"],encodeOffsets:[[121388,26264]]}},{type:\"Feature\",id:\"3502\",properties:{name:\"厦门市\",cp:[118.1689,24.6478],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@VlUV@nanL@V@V@L@blK@Vwl@XalbVKnnl@VLW»È@lVUIVK@a@UUwWUU@_aK@bkkm@UkõÅxóLl@¦@Vb@bk@VnVln@Vbb@xmÆn@x@xx\"],encodeOffsets:[[120747,25465]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/gan_su_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"6209\",properties:{name:\"酒泉市\",cp:[96.2622,40.4517],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ÇnÅaĉ@U¯¥UŹ£WUýUU±JkkUwyÞIČxĊĕĊ¯¥ÆUkţUÅÓ±¼IUx¯UÒƑÝÅ°KÝnğ°ÅU@@Vn@þ¼¯WnŎ°XLWlnVnbWnVXxmbabóUlǕUUaIUmlU¥k¥ĉwkkÝɛa@¯U¯°mVkVnKlōÑÇÑU@klUġkUŻnUW@¯k»mWV£UKnUmUww@UIVaXwm»Èmmwn¯ċ¯LĉUJUalka±Va@Uk@ÛÑ¯WmnUaɝ¤Ûmn¯m±x@wóxÛLġÒUx¯VÈJUbózÝÇKĉ¯ōlÝUÅWl¯nťbÝ@¯ǩLġmV@Æ¯ĢkÆmĊkVťLɃmÝXó°@ĢbVóVÝ¦ɱ@ƧaġUVĠÇÈV¼UVţwmbJÇwˋaXmÇ¯KkkmbXm¼V¼ǬŚ²¤ôŰÆƴô̐ŤǪnɆӨ¼ɆLÆłUĊxŎƞȘǔˎǬǪnƨŮǬö°»ġÞÜÆĸÒĊǀbƾèôÈ@¼¯þŤĸƧ°VĀ¯b@lÈĊʠń̐ȘKǀֲॗţÿǕý@ʊǓƨóÆÑǖŃôw@΋ʈƆÅÈVVĊVóĊÅ@ÞƒĬV@Þī@°V@ĸĢ°XτƜĠ@ÈaÜ¥ŐƅnğóĕVġUůƿŋĕa±VUťÇğÑ\"],encodeOffsets:[[101892,40821]]}},{type:\"Feature\",id:\"6207\",properties:{name:\"张掖市\",cp:[99.7998,38.7433],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ÈÒŎÒkmLUlU¯nV°@°ɜbÞĠaÈ»ĸlLVUÈ@Ċ@ýUm@@ÆVĠ¯ÞmLÆ¯ÞƒÑ°VVwJ²»ÆÔVlŤÅV¦ĉ°ĉĖċwÝJzVxll²IVVVþX¤źV°¦VĊ@ÆbÈmǔLĸĠ¯Ģaô¯ĸmÆÛUlÇĸk°XyĊUǔVǩnmV»a@ýnK°n@l¥@»żĊ¤mç@£ČU@mmVkÞUƐ±²¹°ĠwÅƑŃU¯V¯aÈŁÇ»ġn_°xŎKlxklx@Þw@Æm²bÇ²LlkWXať¯ĊaÑK±w@wUÅçV±Uk@@¯¯xU±±UU°ōxVxÅÔō°ó¯UÝ¦óbÝþ@ĉÈóUVUx@VUVÝwÅÈÇóVkk¯JÇkmmL@KÇx@bk@U°ķ²ó`mn¯°UwlÅkU`¦ɛôķz@ÅnÇ°U¼¯KmVk²J¼ƏÞķô¤UL@mnğ`ÇnUxÇ@ÛÿU@kŻ@x@móJkÅ¥VŹĉóÒĉlċ°ķUƽÜ@x\"],encodeOffsets:[[99720,40090]]}},{type:\"Feature\",id:\"6230\",properties:{name:\"甘南藏族自治州\",cp:[102.9199,34.6893],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ÞnKlnwX¥WÝXkxÞUn°aĊVnUUKlÞĶWXnĠ¥ô»@nmVL@¤°VzJanU@aÆwna@kU¯yX_aĉbwéXkWwÅa¯V¥m¯UI@@mb°aÈçU¥@»knwɜƇ°I°ÑÈmVU¯Xa@wW@wV¯Č¥l¯Uwnm@kaUaóKkk@Çab@ÒWa¯IÇxÛam¼VUxÒl@zÝÒ¯bÝaĉVĉwÇWzJmJn²mÜ¯U¯ĉ@ġ¤Åb@²nml@@ULVxVU¼Ålmab@°l@WIU¯@m@ó@UzţyXÇUÇVUUVLkbWakVWmUbkkKUÆ»n°Knk@aUVmnk»l¯Ģlw@_kKVU@na@lUk@¯¥mV@kmbWb¯Åõa@mkU@kÇkU@`@óóbl¼Uxn¼lVÈx@blVkVVn`XÈġÈ@ÇK£ÝJmUUnUĖmlUmKUnVÅaUwUĉ`¯n¯wW¼nxV@bĉnkIċŘkXU±ÒxÈ@X°`lVIÈ¯ĊVVVan@VaUVażVmblkÈWWIXaalL@wVbV¦lL@lĠnÒUnkL@ÆÞkÞKbñþW¦ÛċVULUºkÈlŎUxÆxÞUUxÒx@XbL@lÆ@ÒlXVln@bm¼J@Ånx@bnĠmxVXmbÈè@Ċ£ČWw\"],encodeOffsets:[[105210,36349]]}},{type:\"Feature\",id:\"6206\",properties:{name:\"武威市\",cp:[103.0188,38.1061],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@±¯¥@klwU»ÞÝmwKm¯ç@kVÇUL¯lVUKġġm@a@U@X£°l°LŎÇ@aōVÝwÔKUÅWJ¯lm@ÛVWa@klĉUmaLUanak¯J±KkXóÜÅx²Ç@nUÒĊb°@ÆkLXÇÆ@xÝnxWxţ¯¤I@ÆnVVVlU²ÆèV@x²xLÒĉbŦ°WbXklÞ@l¤XĊ`wl@ĢÈŎm@bnVUb@ÈÆÛLèÇUÒÅ¦lĸ`°ĮʟÆǓbĉôϚĊÆĢnŤé΀ÑĸĀĊ¦@@l°l¦Ȯ¦ɆÞĊKŤĵĸů»mŁyġķŭ@Çɱȭ¯mƧUĊķnŁŻ»UaUƛɞÝƨů\"],encodeOffsets:[[106336,38543]]}},{type:\"Feature\",id:\"6212\",properties:{name:\"陇南市\",cp:[105.304,33.5632],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ÈÞ@l`UmV¼@nnÆwVlnVVaLVÈ_ÿÞ@naxÆ@l_@VxnK@llLnxmÈŎJnbUxI°l@n¦lÈIlmX¥k°@kJk²é@klaUaVaU@@ÝnIWnmnxkºÞaV°V@nwKxôbÞ£VUbþLn»mVwIJ°@nb@°°IġUkÇKV@Å¯»lLnm£@anK@ÑÜn@»mL@£ykUUmbUÞÝ@kyÇbó»XUxWVzb±mÝbXawUamL¯»@wUKVwm¯ĵJ°ÅUWVkKVk°wÈVVÑlU¥kmVamknUw¯¯bċ¥ÅKkKkVċVk£kKVwÑa@kóyÛ¯ÇVkówXō¥Ç¼ów¯U±k@xIĉÒÅVmÈnÜ@n°bUbÝVUnnJ¯Į@m¦nVÜ@L°JXbÑ@aÈb@llôLVbb@lmnVxk°ċ¦U°@xX@xWb°UVÇn¯Ò¯Jɛƈmxl@¼\"],encodeOffsets:[[106527,34943]]}},{type:\"Feature\",id:\"6210\",properties:{name:\"庆阳市\",cp:[107.5342,36.2],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@kwĉ»VamV¯wIóVkl¯KmVō¯ÝWkL@bÝKō¦@@Lx@b@la@km@@l¯nm@UaÅ@óWUXm¥nw`@UUxķôÇ°ğ¦@VJ_nIVnalxkXJWn¯nVLxl¤nnVbklVX@xnxmV@bUK@nm@@xV°±aÅnkUWnUax@mn@¯LmUĀlU@lV@blLUblxklkIÇx¯°UXbaVUnV@°LUlnbX@`°nVmbnÆmVkLmK¦U@Xy@kl@U°K@¼XbW@bWnLVaVVz@xlVČ¥lbUxÞlVU@nÆWôn²VJlUƧLnmÜLXan@mw@wlUlV²mblwVÈlLÞ±@lVnUlxnkma@mkJ@kXVU@mn@¼VXUVlLnmVbôaVnWV»ÈUl°È¯ÆInÆU@kk»mKkÆġk¯@»mk¯@óÇlÇ@VykklUml¯Þ@w\"],encodeOffsets:[[111229,36383]]}},{type:\"Feature\",id:\"6204\",properties:{name:\"白银市\",cp:[104.8645,36.5076],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@VKUÈl@è°nLnxÝÞV¼kx@l¦²°ĊóĠĊ»@ÈxaĊxlwÈVŤa@¯²aÇ£Jk£lnUÞ@°ô@ywl»lIX¥Ǫnw@ÑÞWlaÅlL@Uwĉakl@¯mwna°JV¯nUVÓÞÑm£²óWaUÇ@óÝUçV»ÈkkW@¯xV@XlK@wX@Vmm_@wÈÝKU¯ÇwVwÅK¯VkJXkWVaIm¯UkÇlVĀV°mxók@¼óWxĉÜU@UbzÛJÇk@ÆnVlÔ@kxô@ĬWL¯K@aÛImm@IUa@UÇêU¤VÒÇx¯ÒVlk@Wbĉ¦UbkWV_y¯Laók@b@nmbkx°\"],encodeOffsets:[[106077,37885]]}},{type:\"Feature\",id:\"6211\",properties:{name:\"定西市\",cp:[104.5569,35.0848],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@aV²wVJV_@LlanÅllŦçÜÓ_lnWaôkxUbmV@È°lènk°l¦`@nnL@ÈlÜIyVaV@ĊÛXwô@»lônwU¯ÿUÈkl°VnJUblXWIl°UV@aVVVmnL@lUUwmk£bV¥VUVwÛlaÇÝÞmk£LUy¯L@WlkKW_XaWmġU@akakXkmVwmŹVUbWónmwnWW£KÈnV¥¥Æ_klWbU¯V°aôbnaVwmaōInÇmwkK@kmLUw@`kÅ@wb@mÝĀÇ`UKUbmUUkÅxmm@»nUVk_Ý@Ç¦VÇè¯ban@@JV°nU¦°ÆbXxWlêxĊabW`zV°@lmbÅx@bmVbI`¦@ÒUVUI@ÆL@b¼@@lmxnL°ULÞğÞ°kLUL°xVnKVl@zX@\"],encodeOffsets:[[106122,36794]]}},{type:\"Feature\",id:\"6205\",properties:{name:\"天水市\",cp:[105.6445,34.6289],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@UyÈVVUnn@VU`UblzJnk@VbKU°lwW°nkVUÈl£°V@n¥VklkU±Unlw¯UkwmKUlmkUmnkym@Å@UmWÈU°l°anlJkUKlU¯Èm@kmWV»kkÝLUWUx±b@¯ma@¯IJUxnm¼KýaVUÝ¤óawLmxU@¯UbÝ¹lmwmnXmJ@ÞV@UbVbkbl@±êlIl¯@lW¦knÇJkm¥k@¯Jmbóa¯bUV°akXlÅ`¦U¦ÇmLX¤mXnxmôXaVźUnUxlnlWbl@bĢVnXWbX`lLXk@°KVzKl¤nÞÝÈkbÜ\"],encodeOffsets:[[108180,35984]]}},{type:\"Feature\",id:\"6201\",properties:{name:\"兰州市\",cp:[103.5901,36.3043],childNum:5},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@lW²L°IlmbVbKnbĊVlk@XbÜU@kn°XIÆVLÓÞxŎUlôb°KzU`lXVaĊ¥Xal@kU°ÑÈwUÑV£ÈéV@VbJ@nnÜJ@bL°XK@īówl@kÓmUÅmK@m_k¥l¯mkçÇ¯@nUaVwólXbmk`ÛÔťèkkmÆkbK@U`UI±xUbWlXmbVbÅÒólkIWJk@zKŻ¼@xUxó¯LWb@ÅÒ±¦U`nbťĀUVbLU\"],[\"@@¯lwna@mōÈ¯K¯kW¤@@V@bĢnĢVLU°k\"]],encodeOffsets:[[[105188,37649]],[[106077,37885]]]}},{type:\"Feature\",id:\"6208\",properties:{name:\"平凉市\",cp:[107.0728,35.321],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ÆLUxÈxV°LÇÞ@xn`Ü@X@nĊÆwnJmwUxaUkw@V@waVmlLXÝl@XVĢmV°@nl@UUUWK@wÿVI²Òlm@nÝĊýVV@nJ°Ułm@kV¼nKĢÈ¤ôKblnKllVk²aĠ¥È¯ĸóVw@V_xmn¦VWôXÆ@Vbn@°m@kn@@lb@ka@wK@@UlKVaWXW²¹lÓw@_°n@@_lKÅķW@mLUWn»Û@l_Ç`Ûmm°ÅbWb@VWbUUKÇÅaġlmkUġl»LlUm¦@¯U¤ÇkVUml¯Xx¯kVLUa@mlIkyVa_UV@mmUVUÇVzUxUVU¦a¤lnVxVk@mKUnUU@bU\",\"@@@ż@mlkġk\"],encodeOffsets:[[107877,36338],[108439,36265]]}},{type:\"Feature\",id:\"6229\",properties:{name:\"临夏回族自治州\",cp:[103.2715,35.5737],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@@ż»Ly@lXIJlôkÆÑUanaWXkW@yk@ULmUw¯KVlK¯ĠÝÝVK¯mKnwk@@»@aK@ÅVJVU@Ñ¥_Uy¯@£UKmn@ó¼ğ¦WmĵXÝkVLmVĉU¯bmÝVwWlXÞW¦xkmmLÝ±U@VÞ@ÅÈW°XÜ¼ƨyUĮnWnXÝxUx°lVXJlôV\"],encodeOffsets:[[105548,37075]]}},{type:\"Feature\",id:\"6203\",properties:{name:\"金昌市\",cp:[102.074,38.5126],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@ĢÈ¼Çł°bU°VƒńÆǖŰnÆōĬǔaʠÅ¯ĭ_kķÆ¥VÑÈçÜKÅ@ÇVaUm@aōnġÇk@xĉ_Wk£@Ý±KÈ±aÅn@Ýx@kwlkwōL¯wm`\"],encodeOffsets:[[103849,38970]]}},{type:\"Feature\",id:\"6202\",properties:{name:\"嘉峪关市\",cp:[98.1738,39.8035],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@llĊx¦l¦kVVnJVbǖVkôVabnaWwUXmmamUXkWKō¯Xm°»ĉÇ@UVKķkÇ¼ğb\"],encodeOffsets:[[100182,40664]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/guang_dong_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"4418\",properties:{name:\"清远市\",cp:[112.9175,24.3292],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@lÇ¯kÿaV¯VaÈU¥ÆÇIlxmnbUxlUôl°kWl@ôVwUanUl@xVkaX¥kU»a¯±@kka@UwmUkwJk±k@L@ÝWUwVÝxÇU¯ÇX@mÅ@@yĉ£VmUwȗ»ÇUnlUnWU¯`Uk@@x@bÇxX¼VV¯LĀkÝL¯@VĀ¯lnĊW¦kVÇôkUÇUK@ţU@aóÜUU»@¦k@VxKVbn@Æl@xbWnlUlxÈlVÈ°Æ@¼@xWxŎVK°¥nÆkŎ@ÈÑmK@¥k@ô@nôV\"],encodeOffsets:[[115707,25527]]}},{type:\"Feature\",id:\"4402\",properties:{name:\"韶关市\",cp:[113.7964,24.7028],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@WXk±Ñ@UwmUwĉwlmn@Æwn£mkI¥ÇÅ@¥aón£nWWw£V`Þ@nVml@xô¼IV¥kUmkamUkVWwÛ»mó£UVÅKmn@x@kbmm¯aXkaVĉaUbÝ²lIlxnVVx@lb@l²°bV¼lW¦bUlwk@mVVbUxó@kX¯lókVkwVmankwJÅÈ¦ÇVUbU°blĀ°kÈ@x¦ÆÜ°@°¦óaVUôlUlbXl@nÜVnKlnIVÞ°W°U@bnm@¥IV²Ul°VnalzXyl_Vyƒ¦lLlx@ÞbKmknVWanwÑVwČº@n_ÞVaVÜIl@KÈVJ@a£È@@kmaV¯W@_a¯KmbkÇkLmw@Å¥\"],encodeOffsets:[[117147,25549]]}},{type:\"Feature\",id:\"4408\",properties:{name:\"湛江市\",cp:[110.3577,20.9894],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@@kX@aUUċlkJk@wVJXUWk°W@nKnwlUl²blU@lIl@XbWxnm@lW@wwUJX¯VU°`ŎóˋkÝÝkÅ@ÇmğÈřmwaĵVxUÛ»°ĠǷnýmóX¥ɅĵҏÇ@°²ĊUĖ±ĮU¤Ç°Ā¯ɐnżUĊĊĬV@è@ÔÒU¼l¤nĠbêVĠ°ÈyzVaVnUÆLabVlwÆ@\"],encodeOffsets:[[113040,22416]]}},{type:\"Feature\",id:\"4414\",properties:{name:\"梅州市\",cp:[116.1255,24.1534],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@nÔlW¼x¦@lVllLkèa@z¤Ė¼UxlnUKUbÝlU¼lb@VxVklJÈwV¯@ĠlÛĖnbkÆźÞUÈôklmL¥LWnKUkVa°Vx@IVV@x°bUkaa@mV@@ywLÑUwVUVUbÞVVann@XwÇÿ¯²aVamkXaÆ»@»nw@¥UXakbWa¯KUw@¥m@kwmLU»UUJ@kmU@UUWU@yanwmçÛl¯¯UmKUmwVkmÝXbW@XWÝbk¯@±w@»U@W¯Å@Ç¥UU@IUakJĀê°þXkam@_J°m@X\"],encodeOffsets:[[118125,24419]]}},{type:\"Feature\",id:\"4416\",properties:{name:\"河源市\",cp:[114.917,23.9722],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@°VlmX¹laĢÒlm@V£@¦Ģklynn¼lW°zW°VbÈV@lÆbnnJkXVÆaÅW@UUw@kaV»ÞkVaVLkmVw»ĕ£@yblçkKkU@k¥wX»kmÓ@Wn¯I`@nlbWý¯éÿlI@XUmWUw@@UJUÇmKUV@xţk¯¯LWnUxK@Å±»Vwa¯@¤WX@Û¦@¤ÇIÈ¼WxX@WxwUnVbÅèmVa±²UWl@klÈ¤nôÜ¼XxlUnVlbVnlU¦Jó»@wnkmUÝ@U_¤XxmXm¤ôb@¦ÈÆ¦lJn\"],encodeOffsets:[[117057,25167]]}},{type:\"Feature\",id:\"4412\",properties:{name:\"肇庆市\",cp:[112.1265,23.5822],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@l@¥@V¼VôÛ@bV@ŤVLÈlVÈólUX¥mĉ°kÿU°@ÞKlÿ°KUUW»Èw@aw@@nm@w£kÓVUVnKk¥£Vam@nkKkbÆǫmakmLU¥UmÛwmVUmUJÇaUxÇIn`mb@Þ¯b@nJ@nlUVlVULW¯Û`Ç_¯`m¯IbĉWċzx±Jx¯ÆU_k@J@UmbXôlLn¦@¼ĊxlUXxUbLĠUnVĊwlUb@lWXm²@ÞWxXUnb\"],encodeOffsets:[[114627,24818]]}},{type:\"Feature\",id:\"4413\",properties:{name:\"惠州市\",cp:[114.6204,23.1647],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@lbW°bnnla@@wnmÆLVUkÇl@XkV²±bnUÆçUaVmxXw@WXwÇ»ÈJ@£Ü¥@XW@£°bUx²¼@ÆLVwmX°K°Ťl@wVUnLÈVVIky±wkKU¯ÅkXġÑÛlwUwlm@mnKWaÅm¯óÇmğb¯alĉUwķbmb@lÞÒVnmĀŹ@VbVUnmakLm`@xĉkklVÔVJVnlVUnmJmaLUblzmkLaō@@zV¦UV²kJnÜU@VXUL@lJL@bÝ¤UnVb@xVnlK²Vx°VxlIlkVl²k¤@n\"],encodeOffsets:[[116776,24492]]}},{type:\"Feature\",id:\"4409\",properties:{name:\"茂名市\",cp:[111.0059,22.0221],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@LnÇlkKnkÆLUmÈxlUJló°n@ana@@X_@mÝóóU@aaU¯mL¯kV¯ÇVwkw@V±Ŏ£@@alw±Vk@mÅm¯ÿÅƧIÇ`ōô¯_UVW°IVx@xkX@mnwXWa@kkJ@kVa±kkVmxmL@¯XXlWVUI@xlIklVČV@blW@@nUxVblVxkôlxnynIÆ»Æ°aXwlKbVnXbL¤kLèVV¼²IlĠVXynz°KVx°@VlLlblK\"],encodeOffsets:[[113761,23237]]}},{type:\"Feature\",id:\"4407\",properties:{name:\"江门市\",cp:[112.6318,22.1484],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lUXx°JWnnÆXVWX@ºVLV¯nUVnbôxaXmWXIUb°xlKl¯KxXÞ°XÈ¥Ü@ĉÞUç»nóVmax¯UÅU¥Ý¯@ç@ș@çĉÅUmUç±ĉKÝxÝ_ÅJk¯»ó¯nmèkǀWx¼mnUÜġ°@¦@xLkÇaVnUxVVlnIlbnÆÆKX¦\"],encodeOffsets:[[114852,22928]]}},{type:\"Feature\",id:\"4417\",properties:{name:\"阳江市\",cp:[111.8298,22.0715],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@°nKV°b@bôVÞô@nVlÒôÆUnlnn@lmkmVkaÈkÆÆk¥ÅÞ»ÆKXkW¥ÅLmÅkamJUkUVwUmÈblKw@@¥Ģ¯VÛnm»Xwlƿ@kbWaʵ@óLl¯ƽ@Ln°Æ@nUl²kxb@@ō¤U²@lxUxÈU°l\"],encodeOffsets:[[114053,22782]]}},{type:\"Feature\",id:\"4453\",properties:{name:\"云浮市\",cp:[111.7859,22.8516],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@@VIl@`V°Åw²IwČyĊXa°Jn°_È`Ü_°XKVkUUVk@mmI@°a@Ýnam_ÈJVwlĉX@lUómaUmVU°UK¹@WXUWmÅXm¯IWwkVWlÅLÝ¼Æl¦ÅÅÇlbUllnknm@kmVmóÅkÑUW`@@bmb@¯mkôIkVÇwnVÅKmlLklmÈKVĊK°²`n¤nUbWlxVxLUx@°nXm`VklVxmnnx\"],encodeOffsets:[[114053,23873]]}},{type:\"Feature\",id:\"4401\",properties:{name:\"广州市\",cp:[113.5107,23.2196],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@Ș¼VxUnĊ¤@z@Æ@nÈW°ÈVwUÞVxÞX@Kl@ÞVaĊbU@ml£k±lUkkJw¯UUw±kLUm@waUVmÞ£@aKkI@KVUW@ÛVmlIU±VU¥@yğzƧÇƽĠřÅnī±m@²¯l°@nÝÆóUll@XnÝVU¦mVV°V¼Jnb@°mbn@²¯¯wVw@@nmxX¤¯L@VLUm@@l\"],encodeOffsets:[[115673,24019]]}},{type:\"Feature\",id:\"4415\",properties:{name:\"汕尾市\",cp:[115.5762,23.0438],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@@@VxnXWV@bVJV@ÞÅU¥Ċx£UWUwÅUU¥WVUkĊÇnkV`°LVwnU@lbĊ¯Vnal@@çkUÝ¥ġaó¯ÅaÅLŻÆUýmy¯ó@ĉÆóȯwÆXbmL@nknVxkxÜĢÒWÆlV°Ll²xlz\"],encodeOffsets:[[118193,23806]]}},{type:\"Feature\",id:\"4452\",properties:{name:\"揭阳市\",cp:[116.1255,23.313],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@VÈ¦Æ@X°V@@¼x²°@lÞaWXX@aÞWlnUxVnnL°V@kmĢl@ak@mlk°aX±nwm±²¯JV²@wW_maV»U@m¯ĉUÑJlabVnlĸLlƅÛÇ±wÝ@ĉxó@è@kmbUĉ°ka@mVxU¯KU_mlĉÈVlXUV¦ÆVxVVX¤ĉwV¦ÝÆ\"],encodeOffsets:[[118384,24036]]}},{type:\"Feature\",id:\"4404\",properties:{name:\"珠海市\",cp:[113.7305,22.1155],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@è@Þ°V¦VÆ°wnbUÆ»nçÆ@nxÜ¤²llU°VnÈJÞ°UôéķUklô£VVˌKÞV°£n¥£ȗÝy¯¯mÅkw¯bÇĔğ@Ýn¯ĊVğōŁŻķJ@Ț\",\"@@X¯kmèVbnJ\"],encodeOffsets:[[115774,22602],[116325,22697]]}},{type:\"Feature\",id:\"4406\",properties:{name:\"佛山市\",cp:[112.8955,23.1097],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ÈbInVVnUÜxnVV¦nKlnbÅǬlalL@mnUb¤l¦LUmUVlÔ¤@xmnVl°_XVVmkVmÈ@kn@VUK@°KW£nw@m@Ux°x°@±mna@¯amIU»U¯nUV¥ÞUWmk@Vk¯UknÑWÝĊÛ@Ç¦W¯WÝwLk°kL¯wVaWJXWnbwkVW@kĊ\"],encodeOffsets:[[115088,23316]]}},{type:\"Feature\",id:\"4451\",properties:{name:\"潮州市\",cp:[116.7847,23.8293],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@°Üknèmxbz@VVX@VnV@lIVVV¼nKlxn@@¦Vx°LXblaWbV°£¯W@nW@aUñVwW»@¥ŤÅUÝǓÝóV@ńÇkUVmIUwÅVWÇX¹@W¯bkl@nlb@kġn@l\"],encodeOffsets:[[119161,24306]]}},{type:\"Feature\",id:\"4405\",properties:{name:\"汕头市\",cp:[117.1692,23.3405],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@@U±°I±n²mx²@WºXÈÆUVxJUnlVÈ@ŃôUǔÞVçn»VyĢÛVm@»kaÝUÇ¼óÛÈķKċ¥X¥Wwğk¯@wķKkUmabkIVÒ°Ċ@nVU¼bn`Xx\"],encodeOffsets:[[119251,24059]]}},{type:\"Feature\",id:\"4403\",properties:{name:\"深圳市\",cp:[114.5435,22.5439],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ÞL@xbVVK°X°Kô¥Vw@anUèlkĊl@wn_lKnbVmUaUź@nÿUmÝÑ¯Ubk@ÆkxŻ@aÇXwJ¯LķÝUĕóĸóêWº@b²nmĬÆ\"],encodeOffsets:[[116404,23265]]}},{type:\"Feature\",id:\"4419\",properties:{name:\"东莞市\",cp:[113.8953,22.901],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@Ŏ@blKnykVaKnbnIVmUkUmUIUÓçmV@bUxó¦¯LW¯LUUa@wÝKğŚƾƨÈĠy\"],encodeOffsets:[[116573,23670]]}},{type:\"Feature\",id:\"4420\",properties:{name:\"中山市\",cp:[113.4229,22.478],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@XÒlmV°ôÞÅ@m¯°k±@@aX¹¯VÝÇIUmV¯kk±Û£mw@ÅmèÅ¼mô¼èV\"],encodeOffsets:[[115887,23209]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/guang_xi_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"4510\",properties:{name:\"百色市\",cp:[106.6003,23.9227],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@lklWXL@VIl@XnJn@VUUalk@mK@kny@UlU@a°UU@VmaU@Ua@UWw@n@KmLm@alkmnIm@an@VIUamWÅImwU@@a@KX@JVLUVmUaVkUa@m@@Ulmkk°UaVUlKXbVwVIkaVmUk@KVk@aaW¯m@w¥laX@KmakVmnUl@nxVKInU@yVaVIV@na°KlxX@@_lmXUV`VIVV@n@lbn@@WUkValK@²yl@VUV@@K°L@KU@@UVaXIVVV@naVkVa@K@UUK@UUaLWaw@m@K@UVV@mVUUVKnLmVLKbVK@UUIkmI@mUIVK@IUK@VkL@WU@mU@WmUk@I@VJk@WwX_@amK@UUWkIK@LVb@mVmakL@J@bU@Ux@xbmI@`Iwm@UbmKUaUWa¯UkJWV@XJUU¯LUmV@ma@kkamKwLUUmWVkkm@aVUUkVKnVVUmXK@UW@km@Ukkm@@W@UkUy@I@aUUmb¤U@kUmL@bmJU@Ua@wkLWWkL@U@VaU@LUakKWbkUWVkKkLVLUV@JVbz@V@VmUU@kVmK¯@VU_VWakVmIUKUaU@@bml@XU@@V@LmKUVmVUKKbkaUXKUL@x@V@l@mxU¦V@lL@V@Ln@@VV@nlKUaV@nLUbmJnL@VWLkbmV@@LWXLlxVVIVV@x@V²blUVmLVUK@kWWXUlV@Xl`LXl@@Vn@VnbV@lVUVUÈVb@@`UXU`l@@XUVm@k@xmVknUJVXUbmKULmbx@VlJ@LVbkKUbVLÇUUVUVmU@VaUkUKVUwmLkUUVVlbkaXmwKUVVU@@V±Uk@VWUUm»XamUbKk`U@UnWW_kKmbUVUVmnUV@nJVUlUbU@UV@n@JmI@VmbnVUXlx¯kKmnVV@L@VbkVUmm@Ub¯LmlUL@VWLkmkLmmn£WmnKU_mWbnbmx@U¦UJU@Xmlk¦@mnUUm@@Jn@lVÔVJnIVWI@aÆK@I@aVKIlÞnnl@nl`nbÆX²l@xV@llbVn²VVl@nnV@IlW@Un@@kVa°KnÈmVaVXUlaVÈUVlwôUlynIVaan@lVXbI@n¥la@K_n@bÆx@XnJVnKVz@`VXVU`@b¦UV@VIlxUnVKXÈbVllbVbnVn@\"],encodeOffsets:[[109126,25684]]}},{type:\"Feature\",id:\"4512\",properties:{name:\"河池市\",cp:[107.8638,24.5819],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@lLVlbVV@nXVlI@JVXmnW°bIVV@ln@nalVUbnW@kVkÒlbVKn²°bUlV²@X@`nbaUI@°wlU@aXJVI@aVK@wUamIXm@XUV@@bV@VmImnUUwVaVKXUnVK@akVwV@nL@UV`n@@XlnIUJl@X¦V@aUIVm@anV@UwnL@VlbVL@KVVXUWwUUVUka@UVJnUlbnalbVVn@°LV`Þ@XVxV@@bVlUVVbXnWlXnml@XXWVXJmbUI@VllUVkn@@VWV@Vnb@VXUJVnn`lLVka»lVLnw@WV@lInw@WnU@U@mknUVóKwUmUXUU@@wVJVIl@XKVVVbVIJ@Un@lVLnmb@U@Ul@nU°VUVJnnVJV@@mVU@@wkUVwkKWkyUUkU@alkÈ@lJ@xIl@UUWVkUw@Kn@@kmaVUlUULÇUUKl@UUmL@aXU@mlUUwmKkUUVKVUaKUnK@U@Vl@XUWUKlwX@b@K@XkV@UwWJka@aUwmV@U@@U@wUm@»kLWVkIWXnmV@VkbmKLUbkVa@aa@@aVU@aVak£@±UkVU¯VUUJVUI@kxmUmWUbLw@K@aU@@aVU@Kma@aka@_VWkk@UWVUKULWKULU@KUnwVaUKxU@UmaLm@kVmVa@UkmI@@KmIkxU@@KU@mmakI@VLkmWkkJ_U@V@L@nxXbKVb@VVL@V@LUbUlmbU@UUWJUb@VV@@L¯K@LU@UVk@±z@kLUbVl@Xm@akm@U@UUJU_VWkn@`W@kw¯LmbU@UJUb@zmVJULmwk@mVUnlnb@LWkb¦@x°nXb@bUl@LVlUnlbUJUxWakLUVVb¯llkn@V@@nVbUlVbUnVUK@IW@L@bV@nxÆJnXVbUJm@@bnmJnkl@bnnK@Lm@Xx@VVbV@nb@UVV¯@bkV@Vmz@lnLl@kVbUVm@mI@WkJ@UWKkXkl\"],encodeOffsets:[[109126,25684]]}},{type:\"Feature\",id:\"4503\",properties:{name:\"桂林市\",cp:[110.5554,25.318],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@nU@JX@`XLm¦Vb`lVXXW@VblČnVlanLnmVLK@_Va¥@kUa@VmVbaV@XVVzlVVK@knKVmX£VKLlbn@b@llL@xĊôXaV@°È@¤bnV@@Wl_VU@WnVamwwVbn@KVLX@VmVUxlV@nVV_nK@mI@Wn@@IUĊ@@wVWX@@I°VVm@wmU@m@IUVklkUmmkÅV@@aV@@Wn_UKla@kaVlVanb@k@@KlVn@@aV@nIWWUUaVU@kKmwU@UImKk@UU@w@W@k@UkW@mk_W@Ua@a@¯mV£@mUUam@kWakVama@UUm@nw@alaUmnUlVlIVLVyk£Vm@k@UUJkK@kmKUwKkWK@UXImyVwnI@mkUlkUKkUVmw@kkJWUÈm@_k@@aaW@UUJUwU@@IWKkmUUV@nVl@bVb@bUUXakw@WUkbkKbm@xUlkLm@@wmKUX@UaVWXVmU@@UUUxkmWXkKkUWaUaUbL@`UL@LV`UXmK@VmakLVbkLxUJUIVbUVVb¯KV@Xnl@lVXbmÒnV@L@VWKkVUIWJkIUamUUbm@UkU@JUbW@XWxUam@kbVVUnUJmUUV@bU@UUV@Vk@bmULV¦U@VU`VLUL@xVbn@UJ@nWJXXVVV@bkxVbUxL@x¦@UlXUVVlULV@@nUb@xlnJVnlVknUlVUbmU@bVx\"],encodeOffsets:[[112399,26500]]}},{type:\"Feature\",id:\"4501\",properties:{name:\"南宁市\",cp:[108.479,23.1152],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@lKnbnU@Ua@KLlJVX@VnL@bW`Xxl@I@UJl@nV@XV@nXV@lK@UVL@JULVJ@nnJlVJ@VULaLUKnmKULVVU@nU`lIXllnK@UlJnb@nV@LV@lwnJ@L@nJl@VUbUn@lnKnbVV@wVLUbxVm@LVVKXLVKVLXU@VllUX@`lb@bnbL@UV@bV@@b@LxKVanXVUUmVUUUaVUkyUUaImK@mUUVUkKU_@W@UVVVIUWUVaVU@UUKn@k@al@ll@bnL@bVUVX@V@@bKnblmn@V_@aUalL@a@akK@kVKUKlwUUnV¥VmU_VWVIVaX@VaalÅK@LVJnalL@LnKwlVUwmX@VXlLUVnblaUmVUVwXU@Wm¯Va@ÞKnw@wmk»UVW²a@_mW@U@IyLVUUKW@@LX@VUV@@yVU@UV@nwUUmJka@IU@mVkaW@UwUX@`@kLWUk@mkUUm@kUUWkUkWxk@@VK@nV@UVaUUJmIkV@UamLUbkVmamLka@kmL¯WI@wJmwx@akU@aUKmbkaW_nW@_U@Wm@a@wkwUKmk@bkbw@mKUkkU@J@bW@kVWz@bVUaVUx@ULkJWbXVVX`@mJUVU@@Lk@WbU@UJlnXlmVx@Ln@b@KLXWJUUW@kaUVUbmV@nnV@n@lVLVmLXmXkV±@kxÅLUbJWIÅJ@ImXalkUamKkkL±aVwKUU@mÞnbWJXm@lbmKULWUUVkabnn@Vl@VVV@VbVbnLWLXJWxXLV@@VV\"],encodeOffsets:[[109958,23806]]}},{type:\"Feature\",id:\"4502\",properties:{name:\"柳州市\",cp:[109.3799,24.9774],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@wUaV@nVaUVklmkUUmmIk@waVm@U@VKUkVUkWV@¥@wKVwUalw@aUUUWWXI@mVIm@Ua@wVKUKV_UV@U¥VKnal@U@VU@VV@aVUnVVIVmUUlan@VbXwWX@Va@IlVVn@VanVVblJXIVJlUXL@U@KmUnÑWakU@mkJUI@mk@wUmmUV@JXaWIXWmaUIJkk@WnJ@aUak@kkJ@kUKU_@myUóWUkm¥kUmL@KUKm@k_UmVa@k@@UmU@mm_JWIUVUWLUlbVUJÇVUIVwKUVk@mU@n@lUL@Km@@l@LVzJmUU¤m@UbV²U`U@@¼Vn@x@V@@VnUVx@blbXIVxU@Wl@@LaW@kxLXVWVk@@U@VmLVLbUVULVVlnLVxkV@nWV@bnKVVk@VLVÈVKVVkUnb@lm@@LVxUlVX@VkJ@wkIÇ@kl@blVVVzXllLUxlV@x@UV@nU@UImmUIUV¯mVk@@V@VamnUKkm@@VIUJUaUUWLk@UJUI@xV@VVWVnxLUômVV@VkVVVUnV@UVkL@VVV@bVxla@bkXVJVn`nU@bb@bVL@VnJ@l@VaU@@_lW@UUU@Unlll@XLl@@UX@°bVWVanLlknVV@VVX@VVnUVLmbXJ@nllXX@`VXlmaXVWk@WkwJ@VL@JbnU@bn@@bVKUnVJVIVVVL²a@bV@@Vl@nUVakalmUL@VUL@Va@mXl@nK@UlKL@Vl@@nkllb@Vnn@nVV°lVInwlKXxlU°n@@I@UnVlakUJWkUK@anUWK@_ÞJ@U\"],encodeOffsets:[[112399,26500]]}},{type:\"Feature\",id:\"4514\",properties:{name:\"崇左市\",cp:[107.3364,22.4725],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@@JVzl@V@Xn@ll@VlnX@@VWLnUVmUULVlUV@blnUlnXVVKxnLlb@lnbU@Vn°KVVI@WXUlI°VXbVVbnLVan@xJ@_nJa@wVwV@@a@IU@UU@WKXwWIXKmKUaa@UUUUk@@UmmalbVUXVVKnLa@knWXImanÝV@VLUx²blKlnLVbklWbn@JÆIXJIVaÆKlw²@lUnWWnKUUK@k@mmU@mnUVaVUb@lVXVXIWK@Lam@@KUwnWkkmVIV@Xal@@KV@VUnI@_UWWUkam@kkm@ka@mk@wkJWIUU@WXkWXkWWLUU@UakLWXV±VIVWUU@anUWaUK@IU@Vak@@UUKWa@m@ak@@wUkla@mUaUklakwV¯¯@WWUkLkKmakLUnV`UxWX@Jkn@bmlakkk@b@l¯bmbJb@VXnbVV@bJUkkKWVU@mÛVUUW@UVUJWXkVkKmUL@WW@UVl@XXKWXJ@XVlmbUxnnm@UlVnV@XVm¦VJb@mLkKÇbXblVkn@l@bWnX`V@@IVV@VV°n@@_naÆVVbUVVbUJnzlVUlXkV@Vlx@XVnxbKUK@b¯VVUVL\"],encodeOffsets:[[109227,23440]]}},{type:\"Feature\",id:\"4513\",properties:{name:\"来宾市\",cp:[109.7095,23.8403],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@nVlw@VJUIVVUV°lU²V@l¤Ub@bUV@b@b@bUblVaKnLla@UnUWmXlJXUlKV@V_U±Van@V£nVIyU@K@kn@@LVK@k@mnVl@VULUxVJÈUVIUaVkXKVVUXJIn`@nnV@Vl@@UbVnl`n@VL@LnKlVn¦VlôXVnz@V`VL@llIll@Vbb@mIXl@lIVJnbWXXJWb@IUnVVn@xl@nVJI@WU°LUaVUUaVJVIwlKUalKnb@UnLVWU_@KVK@_KVa@VKU¯VLVKn@laaUkU@maVUJ@k@Um@XmbkyVaUIUU@KV@laVn@KXKWUkUk@aWUUVw@aXKmVaUUkmIlUU@wUaxUmmU¯U@WLUmVIUym@UVmUa@wmw@çm@aWLUJUIUamKmL@ax¯¥kU¥U@±kUVmKU_mJUbkKmLÅÇ_@WWUXUmaVUkKUWW@nVxkUxmL@KkKmbUI@KLkÆbUbW@UbUJUXV`UnU¦mVVkxVLUL@llL@b@bkKVb@bU`m@knmaL@a@@UWVUU@amK@akkk@@b@lmVL@VUVUbVVXUJUU@V@XV`lLUVVV@nnLJVbVlzUVVbVVnUVVU\"],encodeOffsets:[[111083,24599]]}},{type:\"Feature\",id:\"4509\",properties:{name:\"玉林市\",cp:[110.2148,22.3792],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@VJUXVVXlWX@VxVnX@@`ULWUXÅbWK@mULUUmJ@n¯b@l@VULVxxXU`VXXJVIV@nm`@nUVXn@lWVn@b@Jn@nU@Lm`@Xn@WJ¦U@@VnLlV@@Xl`nIlJnkVLw@KVK@UaVL@bVKXlUUKVK@IVLa@U@WLUlVL@bU@@blb@VlbUxVbXUVJ@xVLUlV@VUbVLnKlXJ@Lb@an@VanL@`VLKV_UWl@U_a@WVInlVUUUVm@I@W@wVakIWm@U@XwlaVbnI@m»Va@aXaVLU»@aVa@kKkL@KmU@WzUK@wU@VWUUVUUKUa@mKmbUK@_nWVaUkVaUaVUVLXKVVUVmVI@UkKkLm`UkW@UwWW_UaU@WakXmK@xUXJkUUWUk@WlmJ@km@@aUKzmyVka@kkWVUU¯lmU@@wkkmV@Vk@mÅIUka@Ub@m@UUU`mUbWaWmbXXKWIXUWm@Å@y@UkIUJUUWLUWL@UkVUxW@kaWbKWnXxW¦nm`XLVlUbVbUxI@JmLUKUb@VW@@bkL@b@VlU@xk@L@lxXxWXX°V@VVVbUVV@UVVbULVnVJUb²baUb@VVVVInlV@VnXaVUlIVUb\"],encodeOffsets:[[112478,22872]]}},{type:\"Feature\",id:\"4504\",properties:{name:\"梧州市\",cp:[110.9949,23.5052],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@VbXblVlLXWlnwVV@VV@UnWUXVb@VWXa@kVKUaVaVkUlyX@VaVmUwUaVU@UÈymI@aU°@nWV@VaVaw@IV@VmnLVK@kmmna@VbVI@aV@XbW`ULUVVx@VbUV@bl@VLXblJn¦lL°°@n@K@UlLnKa°LWbnJ¦UÒVUllLlVnKnbWnnV`w@@Xa±nl@XKV_WVkVa@kVyUa@wU£UW@UIVW@@awWaX_WKkVmUULmak@UJUI@±m»k@m»VyUImnmmwnkUmVaVIUn_mW@»Vk@VwkmmUXa@IaVmm@Wm_U@mIUWóLmUk@laXmmkUK@UmKULUUmWUL@VakU@Ub@b¼VUKWb@bUbn¼@mJUakbWx@@VXnlJUb@x@X@JUnVVUVmkUJ@XbV`k@VXU`LUK@_mKUbm@@b@U`@nlV@bUnbVbn@@`VbUbVV¯bm@@mJXb@bVnUllVXUlbUl@LU¦VVmkLVb@bl@V@XlK@V@nUJUz°mwmLmlXbWVU@UUUlIU@VVmV@@¦bXbWxXWlXVWL@LUmkbU@@LVVVJUblzna@WVn@@lIUVnbV@Vlbkbm@ULUKV°UL@\"],encodeOffsets:[[112973,24863]]}},{type:\"Feature\",id:\"4511\",properties:{name:\"贺州市\",cp:[111.3135,24.4006],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@nL@xn@lKVkwn@alLlaXV@lxbVWV@aUa@aUk@mVUnVlXL@JV@VxVIVX@b@bl@@`ÇnXVlI@lxUnlVVLkllV@nmJUxnzWJ@VXLlLVxnL@lLlVI@V@lUnl¤UzK@Vl@LlLnb@VnVVU@kaKnxn@VkVJ@ÅUlakmWIUaVanm@_UK@UVWUa@klXamU@VmVIXW@lUVknVlKVLXVXW@b@VlnnVL@KXLKn@lb@UnW°@VaXWVb°aVa@I¯aUkUaVKVwaXk@aa@wkm@alanUVw@alK@Umkw@UaUmU@WXUaUK@UW@UaVWI@¥Xa@w@WWVXwU@mKUXUWVU@a¯kl@akU@UULmK¯VUVW@U_m`U@@xVbUz@lUbUlXU`WLk@m²Wb@@xU_mXmmamLkUkKVkUVÑ¥mIXa¯KbmLkK@V@Lm¯@¯kKm¥kIWaUKk@@aVUUa@UwVUKVX_WaU@@bUJUa@mbnn@lULmKUnU@@JxUbUbU@mX¯@V@bnJÇz@VUVVbVxUnUbW@kzVUlUbVbUL@lWb\"],encodeOffsets:[[113220,24947]]}},{type:\"Feature\",id:\"4507\",properties:{name:\"钦州市\",cp:[109.0283,22.0935],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@@IlVVlnL@xlaal@nVLlx@x@bXnV@@`mXX`lbnaVL@blV@bwnxI@xXJ°nKl@lbnKnblUVanKVb@lUnJVIVUb@VU@mL@Ul@XwllVVXV@lVnlVnl@XVlK@@_VWVxX@lbUnV@@JlbnIlmnVV@UwVK@U@k°a@mnIVVVK@nXLÆaVWXVK@_W@Umw@UXWWkUUVWUIVaUkJUVWbUmU@mkUJUU@UVab±aVaUIUmVKUaVUU@VUUaUUU@W¯XWWww@k@Kl@wkV@U@alK@aX@@UmIUWUI@mmkXU`U_WJUnUJmUk@@amLU@UVW@UkU@@VbUWVUk@@wmKkUWLUWX@JmIlUkkKWKkLWU@UKWa@bU@@a@_UKWUUUmJmw@nV_@ġğKóLmbU¼VÆ@xUX@Um@wklVnUnlkaUV@lV²WVklWXXbWlkVkIm`UULUU@UWx@XU@@lWLU@kbUbV`UXllUV@bmb@LnKVbULmnVVIV`X@\"],encodeOffsets:[[110881,22742]]}},{type:\"Feature\",id:\"4508\",properties:{name:\"贵港市\",cp:[109.9402,23.3459],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@n@VzUJnVK@XV°nVVnwVb@xVVknJlVVUbnWL@bUxVVXbl@lVXkWXwWaa@¥@nUUUV@JVkVVV@XUWanknKxn¯VyVI@m@UkL@W@Uk@aUalKnUUV¥@KVkkaWVkUVkUm@aWanI@n@°aUUVaUa@_m@UamaV@akU@mV_@a@KWIkmLUKaUVU@kVUK@wUIWVUaVwka@Uka@aV@@aUKVkK@X@VbKU@JULVLkVWUL@aUKb@VUL@LxUKmlkImJk_@WU@kmK@UV@¥XIm@@Wn_@KmVm@@I@aUmkXm@UWV@mn_@mUUJWIUWV_WwU@mUknVVmxU@@VUV@zU@UVW@K@X@VLUVKz@J@VnX@`±bUXV¼ln@xmxÝL@Ubn°@XWVUxUVVnkbWVXV@X`ÆÈKnlLVanIV`nLVUl²V@V¦l°¦wb@nKnLVbVJIVXK@bn@ènx@xVbUnV\"],encodeOffsets:[[112568,24255]]}},{type:\"Feature\",id:\"4506\",properties:{name:\"防城港市\",cp:[108.0505,21.9287],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@XV@X°°UlxkbVlVb@nkbVl@xl@@b@nXbVL@Vl@UbV@@JVLXbmV@bVVUXUJU²WXlKVb@VVXKlXWlXXWV@VXJlI@xl@nlbn@lln@lbXalIVK@VwUVbU@aXylUX@@aW@U_UJmUnVKUamL@Kna@aVUkkVWU_ValaV@XK@kV@@WwVXV@VKVVn_lJlUXkWaXWlkXU±kU@VUlbkVmUmlk¯ÝW@mb@¦VxULmkJUU@ma¯wmkX@VóJ±bUVUXÝWklWXXlxUabIğÇ@U@mVUKkkm@UJm@XnWV@x\"],encodeOffsets:[[110070,22174]]}},{type:\"Feature\",id:\"4505\",properties:{name:\"北海市\",cp:[109.314,21.6211],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@VaVLnK@IJVwUaVaUkWKn_mX¥WwXmLXalbU£UyVÅ@Ýwm@°lLÅUmkmwÛaƑLÝUUm@ȣÆV_Ó@£UUV¼U°W̄ÞVbXbôx@b@bmV@ÇUÝ@@ĢU`m@nxnIVVVXVL@`@bV@@aXbVL@XVlKXLlLVlknJ@IWVXXKlVnL@xl@UVVXa@UV@VlX@VUV@nK@bl@nVVIVmXIV`V_lWnn@VJVXnJ\"],encodeOffsets:[[112242,22444]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/gui_zhou_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"5203\",properties:{name:\"遵义市\",cp:[106.908,28.1744],childNum:14},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@@UnUlJnwJU°VL@bnVUwlJ@XXVlU@klVUJknlUllL@bUJ@xULUlUblVkblbnwUXmla@wV@VK@L@UXaVKVLXWUVa@U@Im@@W@£UKUakKWIXU@al@@llUnL@W@Un@@VlUV@VIUanKl@Xb@lmxVb@b°bb@nlJVVnnJ@b@LV@ln@LmV@Vx@blnVKnlJXIlwJ@Òb@nlK@Un@UL@VVVVUUUVKl@VUVLJ@UVUUw@Wm@UVÈVlbUb@JLlX@@xLmk@@nlx@bUJUzVJ@@LVxUV@bWxnLnVVK@_K²xVbV@n¥@aVI@b@l@VaKnb@n`nmmýW@U_wV@VlVV@Vn@n@nI@Jn@°¦VaUU@mVVWVaUÅU@aVKnVbVUmmU@a@kUwm@aUUmUUJ¯lakUaXaWUUaVkkamkmUnVlULVlJ@XU@UJWUUwk@aU@WbkWL@U@WU@@XUKmV@aUVwUĕUJUamUUVUÑmnIVJ@kl@XalJVn@KVL¥@UWIXWmU@mVUKnUWLUKUaWUUKVU@U@anUny@UlUkK@w@a@aVU»UkVw@WmkJÅmUUVmwXalLXWWUnam@XkJ@UVU@U@W@@U@I@Wl@Ènlw@KXLWblVUkalKUUVVaV@@wnIlaUmkUKWU@KkUkLWaKUUWUn@VK@LnnWJUIVkUWVnV@V@@XK@VUIUJ@IWJkX@VVJIVkK@I@UVaUWk@m@wnUWKk@mxk@@lV@bxmb@x@VUmLkUJ@nVV@b@VkLVbU`¯Il@U_UW@UU@K¯wm@xL¯¥kI@bkb@Ua@m@kkW@XVbmV@kV@bWbUbV@¦xXlmVk@¦bkaWL@KUImK@wUK@VUIb@bmK@LÅy@akXW@kbWlXblL@ULUb`@UkUymX¯@mUJUUJL@Lm@@WX@lUVlXll@l@Èk°V°X@VU@UVll@XUJVXUVm@@VXLWlnV@Xk@mVULnxV@@bmkL@VWLUbU@UVm@b@ķ¥UnmJ@UUVkkJUlÔU`UIW@°kLUlUI@WVIU@mWKkXk@WU@bXW@J@xX@l@LVl@xLVxXX@xKnxVknbKVV@ULWlXU`@nUlX@llVXVUKlkUKlI@anKVLXKVaUIVWV_VK@VnLlU»VKVLm\"],[\"@@@KlKkUUVVX\"]],\nencodeOffsets:[[[108799,29239]],[[110532,27822]]]}},{type:\"Feature\",id:\"5226\",properties:{name:\"黔东南苗族侗族自治州\",cp:[108.4241,26.4166],childNum:17},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@VV@XkV@bUbWJU¼Vb@Vnb@b@J@bL@LV@UVlUI@aKULVb@bkJmxlLVxknVJkxnKmnnL@bn`WIXlWLU@UxVbUVmKVXI@JVIVJ@UL@W@@UmUXUlVUVJXImm@KL@UVmVXVLXblKlV@LXVLlVVnkbmJ@xnXl@bXa@VanaÒLmVnIlÞ¦°k@b@@lVnJlUnVX_@lVlKVUUxVLVWVIXJUlnnWlI@KUaUUVKn@VaVXV@na@mw¯@mUkJUamI@lk@@am@@IUmVImUUw@anUVaUU@LU@WaWUXWWwV@VwnU@L@ynbl@@X@aJ@nW@@Vn@lVLlxnIl@@UWKUnIlJXIVllIVV¼XK@aVIV@@bn@VKXLVKVVVInwJ@UWI@mX@WKnI@KmUUVJUL@VKW@@k@aU@@W@InJWUXwWI@W@¯wkaVaUIl@nValIXWWI@UUm@anwWkXWWIUbk@UJmIUamKVUUUVVama¯VkIVVUlKnXVwX@@WVaUUVa@IlaVmknawkUU@U@mUVUVwl°LVbnJVU¯la@mX@@UWKXU@aV_V@@JlkU¯@VnK@km¯kU@WUW@mmU@kmlU@wkL@WUkL@VmLJ@b@V@bknUUVK@UVKUK@Uk@Wa@LUVVnUbmVk@@UU@@aV¯K@U@UU@WmUL@aU@WVw@IxXll@UXK@KXXVJna@wWa£naUKVm@UU@mUmalm@@XkVm@U@VLmWU@kkWxU@@bVV@VkXVlV@UUk@@mI@KUwm@UmVUUwU@lwkV@IUa@mUaVIVKVa@w@U@UJkb@n@bmJ@XmlVUxWXkJmUkUUVWxUlU@aULUmbU@@WXkmL@xUV@nUxÇm@XLWbnlnVnnUVUnVVz@lbUVVlULVb@V@nUJkwm@Ux@bWbUK@UULkaJbUU@U@lUK@XUJmnJ@bU@UwWax@zkJWnUJUUVVV@bXn@xVb@JLm@Xw@`@bkb@VmXUV¯L@mW@@n@V@L@KIW@@aaUx¯@Um@XbW@@LV@bnVWVkKUzlV@bÆa@lnI@VV@@LnVVKUaV_VJVbnU@bn@nX@yVIVxXKVLlUVaXU°J\",\"@@@KlKkUUVVX\"],[\"@@UUVUkUmV@ln@VXVK@K\"]],encodeOffsets:[[[110318,27214],[110532,27822]],[[112219,27394]]]}},{type:\"Feature\",id:\"5224\",properties:{name:\"毕节地区\",cp:[105.1611,27.0648],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@UkV@kW@Xn@@KKVIVVIn°@nWVzl@V_VaVK@kKWaXklaX@lW@bÆz@KnL@aaVJ@UVL@xnLVJ@LXKlba¥l@nUWkw¥U@VaXa@amLkUKm¯kmkIUaKUIWkKm@anw@mlwXImUk¯@a@amU`kkKWVkxmUUak_mJmw@wmXUW¯X_@WnI@aVwkWWýÅU@WLkUaUbVV@lUVVnm@kUmV¯kKLwmVUUaWVaaWw¯wÈ@VULUVUUK@nWJkIl@Umxnbm@kbUJa¯bUbVxmLUVaU@VUUWxkVVV@bUV@XWbnlUbbUJlbUV¯b@z`WbXnmbawUwVWUbUxmbU@Uam@VkVawVaUWI@mUKóz@lUlÅ@WIb@xXxml@XklULWKUmwUa¯KUXWJkaULmKkLWbkKUVImWa@kUaULW¯LK¯@kbL@bx@J@bmnnlUlzU`U@@Ub@mn¦°bUVx@bkVm¼mx@mkmVV@bkxVnaVV@bU@mL@b²`lIVV@lXLlbVxn@@bl@XllIVnbVn°°wlbXw@mVa°lVnU@mVLVbn@@b@@WVnUV@Xlxn`VznJVb@L@bV`V@UnwU@WUXKV@UUlmUUlaXalLmbIVbnJVIlVVaUUnWVXnVLk@nWnblnlb²xxVKVXlVXLVWLlUVJna@wVL¼@JVX@`@nnx@nWJU@Vx@XXKUblxU°LVKVVlL@KnbVUnJIlUnKl£VWxIlJ@nVÞUVVnbVX@V_°lnK\",\"@@@UmWUwkU@Um@@VkL@V@VVkV@nbVa@\"],encodeOffsets:[[108552,28412],[107213,27445]]}},{type:\"Feature\",id:\"5227\",properties:{name:\"黔南布依族苗族自治州\",cp:[107.2485,25.8398],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@V@IöalK@UV@@KUaVIVVLlaVbVWnX@@LnUlxl@naVLXVVaVUJ@lUUanWWI@VlV@Xbb@Vn@VmVVbk@kU@VV@XJ@zn`ULW@kK@_WVUK@LUb@Jlxn@nnWlU@@bx@XVVU@UbVb@n`VI@VVLUlUIUV@KmL@VV@XIV@@lVLVmXV@WLXLW@U`nkb@Vl@UL@VVVLllX@`lIXbJIXWLaVL@XXWĢb@bmK@L@°@VnxmxnK@xVn@VkL@VLakbl`VnnxVnUlV@@VVXV`@k°JV_UalK@U@aUU@mIlVnKV@U@wnaw@akU@l@nwl@XLmV@xnl@VXUb@V@JlLUJUI@UlWUnLVUUaVwV@XKWkXJm_@amKnmmLwlUIlmUwkKnwlI@aUaVKL@bVJkVUU@@KK@a@I@ama@UUaV»XIVa@alU@WUU¯IWVUbkVUKWLUwUJ@zmWm@@amVUaUIU`VbULmU@KU@@UmJ@kÅb@akUVylLXUmU@aU@KX@Wan@V°@Vwb@bX@J@LK@@U@mX@@n°KVUnW@Ula@a@_x@WnK@IUa@wWm@aUUUVVVIXmlI@ywXbVxV@@aInmVI@WVL@k@VVVaIlbVK@VVLXa@aVwn@lxVI@m@UUaVKUkVUka@UymUVVUmmUmmkXaWK@ÈnVw@mVU@wKlnXW@V@naVVKUk@KVIUW@mk@KXU@Um@@lVk@UVJna@UWaL@a@Xa@kmmVUUk@mkkamJImJUUmIm±aUUkambkamVUU@VlbUbVVxXWVUU@VUakU@UmUVU@mnUVVnUbVJ@bUW¥kLVamVkUaWJU_UVWKk@@nlUVVJUXm@Vm@UnVlmbnmJUbULU@@UUKWVIWxnJVb@xUL@bUJWIkxbkb@xVJbmU@kW±LkKUkVa@a¯am¥ULkalÑlKXUWXaVakImV@ka@UUJ¯aXmmbKWU@wUUaUaKmU@UXlWb¼WLUKUb°UlVbkbVL@VJ@nVlUbUXmJ@VX@lbUbU@@bWb@VnLVJ@bVVUzVL@lnL@bVVVULmKUkJkbm@xVb@VkKVnnV@b@WXUnVlVVXVJUXlVXbWV@VU@Ubk@@KWbUUmL@JnXV°XJ@_`UbkXVVlÆkb@VLXVV@V@kKXX@`V@@n\"],encodeOffsets:[[108912,26905]]}},{type:\"Feature\",id:\"5222\",properties:{name:\"铜仁地区\",cp:[108.6218,28.0096],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@°a@aÈbVUlU@aVKnVVVUlyX¹lWVa@UVnUVU@m@mUl@mÞw@xnIVbna@KVIJ@kwV¥UXÇVkVW@kkKWU@aXUWmnIVa°VXbmL@VVbnVVVUbVbJVbVKXkVKVanU@aWnWUWa@Unk@mVIVK@wXxlLXbVJVlKbl@VI@maXalVVVbX@@aalnkx@b@Vb@Vnx@bVVUXn¤WXn@Vl@Vlzn@`@I@KUU@V£namVkXa@aVKnnU@anVlKa@UUU@amk@»kU¯@aVWnkWmkImU@akaVm@»VUV@UKnkW¯XWlkUKnIWa@nmlIXmWUnwUwWm@wULmaUJkIUaaWaklwkwmJmU@bkJ@XUJ¯W@XbWbUKUkWJUUVKnn@UmmXUWa@mU@@UI@WmXVykwm@kaULWwU@¯lKUUVU@mU@UkmaUbmV@bxVnVUJVn@Jn@@bl@@knJVblInV°@nx@mbU@UWUbm@ULVVVb@LkJmXkmVWIUJUXUKVwVUkLkU@W`UmkVmIU@k@@a¯lÝ¥kmJUnKÑmbUb@Wbak@mWU@UbUVVkLlbUVkXaWK@LkxÇmk@@X@J@V@@X@VUV@VIWln@mbXVWXkKWbnxVUnVÆInl@XUxVl¼UV@b@b@xlLkV@VmzmV@b@VUVVLXVVbVLXKmVVLU@nnVWXXJ@V¦UK@LUmkIWbk@@lUImJnVÒVUnVVbVIVĖUxV@bnUVL@WV@@X@VKlXXaV@@blVxXVVIV@@WkIUVKUkVmlnnbllUVbXVWbblVkb°VInVVV@bnVx@l@bnVVnUUamUL@bVVÆUbUXUn@VVUb\"],encodeOffsets:[[110667,29785]]}},{type:\"Feature\",id:\"5223\",properties:{name:\"黔西南布依族苗族自治州\",cp:[105.5347,25.3949],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@VL@Vl@@IXW@kVUVbnW@XlKVVnUVlL@baVbb@xX°ÔUxV@kbm@VxkxWJV¦@ÈnVKxWXJmV@nÒ@xVbn@@blLk`VX@bla²JVUlnn@U±lw@wnw@mlwVIX@@m@klKnkaKnwmmXkÆVmU¥l@nb°n@aVwVmVIVnI@a¯@mU°l@@VnI@JV@UV@b@IUbVJmXöºzllUbVa@aXUl@U@llLnKVaUa@UmK@UwVbnKV@VwVK@UXV@Vbn@w@UWnX@a@mI@UUKlaUaVk¯VaVLXK»XaWk¯mkğwmW@mIVkwJUIÇVwUUkVKkm@UkmU@WÅwm£Vm¤¯IkJWa_lUbmJzÝJkUÇVU@bUÝnm¯LUb@`mL@VkL@VUmmk@UU±Umka@kU@ķymUkk@mmkÝmUaUakImV@V@VÅL¦JUXmJXWb@n°Æx¼nV@LlbUUbmL¯@ÞbV¤nbVx@bUVlblI@KVVUnVJUn@VlLUlmLUUUxmK@I@@VW@@bU@UJmUkLVVUl@b@V\"],encodeOffsets:[[107157,25965]]}},{type:\"Feature\",id:\"5202\",properties:{name:\"六盘水市\",cp:[104.7546,26.0925],childNum:5},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ôyVL@nXJVUbxbUlU@nVbV@naVwaVUXVxxbnaWmXa_@y°aVUkaVIaVamkXa@WVU@aUUlUXwVV@UVbVUnKUwVa°abVIlan@manw@VklJXI@mLVVVUVK@UÇk@KUa@UkaVU@UVWV_XWVXVWlLXKlLXaÆKwVL@akKm@Uw@@XUVk@VUI@wWK@aUVI@UkK@mLW@kImJUÅVmkXUW@UJkx@nmx@xkxV²m@kmUV±Ikb@aUWl_kK@am@Ua@wÑ@mnUWIXwULm@ÇU¥XIlwUwn@laU@Vw¯ÓW@waUab@akKUmVUUkL@WmXUaUV@lWX@Jk@@UUKULmLUJmzkKmVX°VUnWKULL@mU@UnVJ@b@UV@X`m_@l@@bmbXJmnn@°wnn@VLX@V@nVl@nk@@bl@nn°WlXzW`XXVKnUlxVbUb@VXb@VxÈbVlnbmn@kVUL@mLUVVL\"],[\"@@@@UmWUwkU@Um@@VkL@V@@V@VkV@nbVa\"]],encodeOffsets:[[[107089,27181]],[[107213,27479]]]}},{type:\"Feature\",id:\"5204\",properties:{name:\"安顺市\",cp:[105.9082,25.9882],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@lL@bUKxÅLWbkKWLkKUXUWWXU`UX@VUVlb@VVb@Ll°xXxbbXUVbVnUxKlL°nUlVn@UmVU@kUUVablVXKV@ÆXþlXUxnU@mVK@_@ml@UU@blU@KnLVyUw@@UmkWVw@UVK@VXzVK@nVVUUW@kVJnla@nKWkaWL@Uõb@JU@mU@@_WWL@lUU@WUUK@lakÅUUlWVa_@`WIU¯mW@InKVVXa@Ll@VaV@@UXUWakUVWUIUWUkUmVXW@@amUUmLl@UUawn@laIVlnLVKUUU@amK@kUKVyUU@aUImK@UXa@aV@VakaW@@UnIVWVaUkb@mWX@Vxm@UaU@W@VULUxU@mLaUx@VnL@VVbUbmLkK@kVk@WV@bUbVakkyõ¹nWUIVa@J@aVUU@@ImJ@Uk@¯V@n°@bmJUUJUnUxbm@¯mak@¦VUnÅWlnnmxLbmlkL@l@nWVnlÆUVnIlJ@XnK@lL@VJVU@bXL@xVJUl@VU@W@Vxn@\"],encodeOffsets:[[108237,26792]]}},{type:\"Feature\",id:\"5201\",properties:{name:\"贵阳市\",cp:[106.6992,26.7682],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@nlLXVJLVblJn°lnLlVnKlU@nUUa@WlX@ln@Vb@la@alJ°¦Kwn@°xLVkUmmwUmk_labK@UlK@UUm@wLmnwmw@U@¯@KnL@aaġXWW@UKbKWXJIWakJ@_kWkKUU@UVKk@@UlamV_X@WKXK@WUUnUK@kU@WJU@@UnK@LVUVJVkUK@UUJm_@UaVaV@UU@Ww@aV@Xkmmm@kw@IVa@KVLXU@`lLX@VKm_@yI@WU@UlVl@UanU@Um@UaWaU@Uk@XJmXVbkV@IUVUbWUUKmbk@kwmV@K@mWUXUakbKUUUJVb@LU@@VkL@VXKlbXmL@kbmUI@lVXUVU@mULWy@UUL@VUxXnl@V@VxUzmK@LkVa@VVk@@n@`UL@nmV@bmJ@X`WX°WVn@xnxnIl`VbnVlwXUlLl_nV@b@bl°VnWJkx@nmx@b\"],encodeOffsets:[[108945,27760]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/hai_nan_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"469003\",properties:{name:\"儋州市\",cp:[109.3291,19.5653],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@à®¼jpnr``pRVHÊÌ¤Zt^JÖA[CâlTébQhRPOhMBcRSQiROE[FYdGNOEIH]MgEAMLLIAG_WMCSL@ED]PCLYC[ZIHgjSxJTMbHNEFCMEE_HSDFHSLECRNSFDRICHNADGPI\\\\RZGIJTIAHLDQOHG`GTNCOIC@eIGDWHIS[kiE[FMbECZS@KKS[FDWsCeRuU_DUQNOE[LKGUBM¨EDQP@HWHGDImXCog_~I_fGDG|QDUWKBC\\\\ore|}[KLsISBHVXHCN`lNdQLOnFJSXcUEJMCKSHOUMDIm_DI`kNDIGEYFM\\\\YPEEIPMSGLIKOVAU_EBGQ@CIk`WGGDUM_XcIOLCJphHT_NCISG_R@V]\\\\OjSGAQSAKF]@q^mGFKSW^cQUC[]T}SGD@^_aRUTO@OHAT\"],encodeOffsets:[[111506,20018]]}},{type:\"Feature\",id:\"469005\",properties:{name:\"文昌市\",cp:[110.8905,19.7823],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@hĲ¤Ī¯LQDaFßL[VQìwGF~Z^Ab[¹ZYöpFº lN®D´INQQk]U[GSU©S_­c}aoSiA£cÅ¡©EiQeU­qWoESKSSOmwćõWkàmJMAAMMCWHGoM]gA[FGZLZCTURFNBncVOXCdGB@TSbk\\\\gDOKMNKWQHIvXDJ\\\\VDTXPERHJMFNj@OwX@LOTGzL^GHN^@RPHPE^KTDhhtBjZL[Pg@MNGLEdHV[HbRb@JHEV_NKLBRTPZhERHJcH^HDRlZJOPGdDJPOpXTETaV[GOZXTARQTRLBLWDa^QAF`ENUPBP\\\\Eji`yºEvåà\"],encodeOffsets:[[113115,20665]]}},{type:\"Feature\",id:\"469033\",properties:{name:\"乐东黎族自治县\",cp:[109.0283,18.6301],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ªVLP`@PEdNRAHOPEAKHEVL`GZBJfvdTAXNNTZJFPrHHNpKTD\\\\ILHbEVd^JOHLh@NNBnHP`\\\\xH@NBRLJTlNv_^CTLd@bNDVFbxdFVUPBTKOGEOUO@OEBXQP[H_EI\\\\EbeYa@UO_JMEJ_IEDKJUGMDcNUd_FMTEJSGoZ]EIYGO[YWgEQ]a@WHEDQKUSDUGAbYBUpSCYNiWqOSQEoF[UcQISWWNMSDe_cLQ_UBiKQOOASQAWgS­ā]ZaSPÝZ]XMXS[^oVËNgNKlE RôEø\"],encodeOffsets:[[111263,19164]]}},{type:\"Feature\",id:\"4602\",properties:{name:\"三亚市\",cp:[109.3716,18.3698],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@®ĂhTBXTRPBRPjLVAR`dKf`TCNXMTXRJVdE\\\\FpTRrPjXZMTDVoZABaVHTCLVCRGF@X^bFRhZXP\\\\ZHHMA[^wBWXJlW¤EJ[bCTOFWWMm@ILMGWQ@DQ^QNWFSHEbF`OXNbOVNKTEPDTLTCCVTREfvfEHNbRAENH^RJXCFHNFRpVGHWISDOTMVCZeGamaLoLÛD¹¹ėgsia{OųETtlÉwr}jR±E{L}j]HąKÃT[P\"],encodeOffsets:[[111547,18737]]}},{type:\"Feature\",id:\"469036\",properties:{name:\"琼中黎族苗族自治县\",cp:[109.8413,19.0736],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@bRFnHNbHgN@NPEnbXP@bND`NT\\\\@\\\\QZb@`@J]V@XhDpWnCJGHGXO@CR§FANHVKLF\\\\MPVR`CvVfQtDPKpGHG@S`WJP~^dSTHWX\\\\RHTFACQTIAUPOU@MG__IaYSFQKNSbORHXCZeTFJgB`YBMNMFi~IVDV[tGJWXGDQRGF]JrALgESLSAYDGIaFeXQLS\\\\MKSLSQYJY}eKO[EHiGSaK[Yw[bmdURgEK^_kcSGEOHKIAS]aFSU@Y]IWFUTYlkP_CUOUEkmYbSQK@EMWUuAU\\\\M@EpK^_ZMDQ^OXwC_ZODBrERURGVVZ\\\\DTXcFWNIAWJWAYUUFYEWLQQaCIZeDM`cLKRGpanJZQd\"],encodeOffsets:[[112153,19488]]}},{type:\"Feature\",id:\"469007\",properties:{name:\"东方市\",cp:[108.8498,19.0414],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ºxJYZQIYXLl@dR\\\\WZEn]bA\\\\S~F`KXaDeTiNO^EEKWEDQXITBXaWaDQMUJOIaTWf@NJV@dSxGZFu_@WMKAU}AQ@MwG_[GOAmMMg@GKP]IUcaFKG[JSCoLGMqGEOYIMSWMSBucIeYA_HUKGFBLOFGPQBcMOF_@KO©UAtERadwZQ\\\\@ÊJÒgòUĪRlR°KĮVLJ\"],encodeOffsets:[[111208,19833]]}},{type:\"Feature\",id:\"4601\",properties:{name:\"海口市\",cp:[110.3893,19.8516],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ńZƂtĢ¬æßFuz¹j_Fi[AOVOFME_RBb]XCAKQKRSBQWSPY\\\\HbUFSWSPoIOcCOHIPkYCQ]GdGGIFQYgSOAQLK`MFUIGa@aQ\\\\GGUFcHKNMh@\\\\OYKAigsCgLSF]GOQO]@GM]HyKSHKPW@Pxi@EMINYREXWRQ@MQcFGWIAwXGRH\\\\yDI`KJIdOCGRNPNtd\\\\UTMbQYi@]JeYOWaL[EcICMUJqWGDNZEXGJWFEXNbZRELFV]XQbAZFrYVUBCLNFCHmJaMIDDHXHEhQNXZ_TARFHVB@DTQIRR@YHAJVnAbKFUEMLd\\\\c^ÍÞ\"],encodeOffsets:[[112711,20572]]}},{type:\"Feature\",id:\"469006\",properties:{name:\"万宁市\",cp:[110.3137,18.8388],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@^J@ZTVbET^JBGLFPTHld]`FLQhcVanx\\\\\\\\ZbLHTGj\\\\FLP~fIZRZPVTQFSVAFJE^NDLEE[~LjsxVTG\\\\NZZNGlLRRGLJTV@hPZANN^@T\\\\NEPPbDZXO`d^HSvcJDIV\\\\XZAJUFCLNP@PQ¤@[ïKLÑIÏ]ÇE±I{u­YśUćFcYUmsVeBSVgB[RO@aYYPO^]@UVaNeDShMLG\\\\EfFVE\\\\F`\"],encodeOffsets:[[112657,19182]]}},{type:\"Feature\",id:\"469027\",properties:{name:\"澄迈县\",cp:[109.9937,19.7314],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@T\\\\GJCXJH@fJDDPNCNJENN^NLHBNSx@DDYbBLLDRbjZTj@`XXTlG^Xr@PJLW\\\\WLTlWR@HDJTD@X_PO@STMDNTMVV@NLDM`M\\\\XM\\\\JNBH[PYZúYzŸ`Ċ\\\\ÎÝd]c[NKVFLEBaUmBIZGQ@JQSR@CUAEGBQ`SWYRMFgWGCGJCbNnIDGMEDKVAZUEqBYRa^WEUFKYQMaFWXEHIFWMYHCrXVIIiaK@aMCUYNSIISTwXALKH@XWXIEIJQCG[IEQDE_XSBaa[AIPW@]RS[FWS[CD]PEBYNGFSaSyJG]@ugEUDQlGHiBKHUIoNSKqHFaPMICK]UUHIPDJMuCA[SCPIDIOILGAEmU[POPBVSJDREBGS[QXWSGcT}]IO_X@TGHoHOLCX\\\\ELT@LYTDaFENF\\\\lj\"],encodeOffsets:[[112385,19987]]}},{type:\"Feature\",id:\"469030\",properties:{name:\"白沙黎族自治县\",cp:[109.3703,19.211],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@D\\\\RV]dTXELnHr]^@LETBBRTHPi^[@U`QTHDJ`MGSogDIPKdJ`WVNHCXHl_DJR@AH`FBVPUJLHKNTJOFFZON[ZEHFCJlMJ_Cn`CJVNGPLTNDFIdVTWEIPmRKMc_kDMWGGUTAtJLK~\\\\f{pqD[LAVXRCH{HC`eJ`}@W^U@I@_Ya[R[@MSC_aMO@aWFmMOM@haGGMEmaQ[@MESHaIQJQMckBIw[AOSKKAMPSDSLOAV_@@`KJRbKRDfMdHZERgAWVsDMTUHqOUr@VQXTT@TfgL^NH\\\\@heTCZaESNObHPHeZF\\\\X^ElM^F^\"],encodeOffsets:[[111665,19890]]}},{type:\"Feature\",id:\"469002\",properties:{name:\"琼海市\",cp:[110.4208,19.224],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@TP\\\\pATHTGlZDJGAQjE\\\\Rb@jVBDCN`JZ[NCNHNXbULPrP\\\\KNbMTLjJJRFP`pNLZz^FLRHjVPZ@hxVKbHBHMNNJFRlLzGPnNHhIrHHADcPWdUAmEMVQDSKYHY\\\\EhBN^HpXGNDBNNBnIßÅ_g{³So]Ã£@ORO@KMEDIVYB[WJUICudGTc]P_YWaCOOMFS[]@MMYBgOU@ISHKQQkKMHYY[MSHwUit}KF\\\\KFMCF]EIUBETSROUKTLT[NKTWREfJbCHBZKTFTKh\"],encodeOffsets:[[112763,19595]]}},{type:\"Feature\",id:\"469031\",properties:{name:\"昌江黎族自治县\",cp:[109.0407,19.2137],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@`ZĤd`òü BSPGP@VSbQ`@]HC~T^SE]N]FkW]E[fYGGOPaTMbFDYfS@g[MGK]he@SSSRW@UVqrPVGNStCXUhBFQGYNcCeLQQaLI@_`@EUwcEaCUaMc@SK]Du`MSkKI~BVNL@X`EvYwHcTU@MIe@SXJbIPNVCRXbWbSAWJCRXFFL]FMPSjCfWb_L}E[TaBm^YF[XcQk@WKZJYRIZw¹ \"],encodeOffsets:[[111208,19833]]}},{type:\"Feature\",id:\"469028\",properties:{name:\"临高县\",cp:[109.6957,19.8063],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@jD`hNd\\\\^dZädĒH´Op@ùZY\\\\OAGIMN[[W_NCNMKU@NUMSNCTSP@`O@WSCCI@GXQSkXKX[IK@OWqH]SkWW@_SiiYQaKCAKZaCCw@MTGAMKM]FMMIMDSM_HGHRPKCBGSJJIYH[QOJCHMBDGQJECMTDQKFGTCEGTF`NFEDMFaGSNwIiTGhYJD\\\\KZODC^@FTKND`XBHKJNKFBNhG^FJMPcHEZF\\\\QPRjQTAdgNOPgQaRSê\"],encodeOffsets:[[112122,20431]]}},{type:\"Feature\",id:\"469034\",properties:{name:\"陵水黎族自治县\",cp:[109.9924,18.5415],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@R]NC`YL]FoN@V[vBXVFNL@TRZalnVFVP`DlOZkVSXEE_F[EUFeH[NKTgfCbMVU^@P]ZObZP@\\\\QhATUfAtUasñiāEoI]eYǯ@aKmaeWuCºKÜKpnbHbYfUDSNCPJTRAHJTDJSfDNLHXC``VBNGTYCQDIXMDSP@xLNEFRNXBIpVNLXah@RgF@`qOML@LJNSPLbaHAh@Jdj\"],encodeOffsets:[[112409,19261]]}},{type:\"Feature\",id:\"469026\",properties:{name:\"屯昌县\",cp:[110.0377,19.362],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@\\\\OnVBFKHPJCJOJTDB\\\\vDINOCGJVVL^JDONEbrGTLpMVJLGjAHGRkVChF@vH^zIbTETMHAZOFC^\\\\DXT\\\\EffAP\\\\PdAV@UIYfS|S@YPICMeM@sC[_A]VQEwyHSMuNcAUlQJMVGMS@mVBZPFO\\\\CSFQK[LqDMACiUa@[QiFBRIHYCHkGSBS[oSOqBIE^QHCRWHIXsHU\\\\UC}JEjMNAN_ZAIhSEYfWDQGaPMTLERZTJb``NHV@\"],encodeOffsets:[[112513,19852]]}},{type:\"Feature\",id:\"469025\",properties:{name:\"定安县\",cp:[110.3384,19.4698],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@JjDNdJ\\\\FbKPXfZ^Ij@RZNaVSc[MsMOHQPDJcLIJ_zCG[HQxWJBHXdENRR@XQFWZQQGOFSWUCI[WCJuRGLXNMPLhCl[Ta@SqGgJMGOmyHkKEQMINMAGaGULgwY@UOGiKQ]EYyMKoO_QEIIKiNSMa[LqOKOaVMWMGMDY\\\\_IKrL\\\\ERT[DEPYOUA@nNTUHINkRBVMdNvGTxzRF^U`BD\\\\@tfNDNOJ@Z{TeTJZ@VUcB[OBOeeQT@^OXBJb\\\\AbWTF`RCJFH\\\\RDJIJFXW@WLGBKxWTSJJMTVZND@bbL\"],encodeOffsets:[[112903,20139]]}},{type:\"Feature\",id:\"469035\",properties:{name:\"保亭黎族苗族自治县\",cp:[109.6284,18.6108],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@FJp@fxpQ\\\\ApN\\\\GNPNBM`HLMrXLXj\\\\PEHnI@WUCEM\\\\GTc\\\\GZYHTPBHRCPTdH\\\\K\\\\@HXiBJILJJAVNTOZJNtFPC`YxDPWci@IBgbGKaTOIM@KNKrP@_hE@QbgKWUMJoWAQMFEKM@wTONCJWRCZDHSAM_UD_GWMKeCITSCGIQBGXUHQoMEEGWDQIG]FMQBMaFGueFeSQDUSDSKOCSFMLUaPWM_PaEGFETMX]RCRR@HXKN@JNnXXESPaDI\\\\£FkXWIAX]xB\\\\GN\"],encodeOffsets:[[112031,19071]]}},{type:\"Feature\",id:\"469001\",properties:{name:\"五指山市\",cp:[109.5282,18.8299],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@TCNOLBTLBPx\\\\AJdlNRRIbJTGNF\\\\@RcIYbmHoLQdKN_fCJYbDRRXKZFVEZVXBXIJBXMdESW[CUYHUVQFQAqsEIMPYMSBUIIJKAIjGW[@[LGScDOGQOAGSYZ[HSd[HFNVD@XmJFG[OWiWKNqGKN_MAMO[HoM[BoRewo@Y^HpITSFENc`MVCdHNIVCLJFI`NFIP`@VZbaf[FFJG`O\\\\WRFA@PVPFPPH\"],encodeOffsets:[[111973,19401]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/hei_long_jiang_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"2311\",properties:{name:\"黑河市\",cp:[127.1448,49.2957],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@VÈÞ@kxnX°VÈa°V@kôwbJVkXlVUx@lL@xkVV°VbxlVUnVxk@KkVbIl@°kVl@lÆnkll@@VVX@V²bUlVlVUVÇn@nkJlkVb@x²V@n°VUnlKUn`@n°bWLnVUblVUVVbknV`°kkl@@V°@nzJ@XxlWXb°n@bĠlbXbbVbJ@Vba@@lbUbVmn@lVmnIW@WbÞ@n@x°@ĢaƐéϚnlČ¯ĠŻÈwm@ôçUmm£Xy°UV@wÈ£Ǫ¯kõÝçUÑUķĢkVÑÆÞU°nŎ¥ČUĊx°m°¦żVƐx°Ç£@yUônÞÆ@Èĉ°Kô¦WkWUbÇ»@ÈĕWÇÈ£ŤU@n£ÆUUKVamanwÅmÝJ¯k@JIkaVaUUÇbkaÆÑkWmÝUÛÝ@wnU±@kkV¯KUkJ¼U¦Å@ówķaķůV¥Uaó@Åwm_kVwĉĉmmn_V»a@UVwķóU¦LǫéóXÇmōLǓÇķxÝkĉkmakbUĶ°@W¼@bÈÆ@ĖLl@°J¯mkl¯LÝ±LamJ@¼VƧUóUXċb¯ńVbkÆÝI@llxk°V²V@UxÞL@b@b`ÇzkókÝ¤@ğ¯WLĉÇLmmnċVkbUaL@¯bU°ğLÝÝ@\"],encodeOffsets:[[127744,50102]]}},{type:\"Feature\",id:\"2327\",properties:{name:\"大兴安岭地区\",cp:[124.1016,52.2345],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@kϙmƏêġb¯@@wmÝ@XV@Ill@bUxl¯VlVbV@ULVlUV_kxVVVÈÝJ@¯Ulm¯x@xóÒĉ¼m¯Wxţ@Uz¯WwnUwť@knW£óVUUwğyó¦WIVmmI@±kwÇ@@b@ĉ¼ó@¯wó@¯aó¼KÅaUwmWUwÅI@aKó@UaLaVÅwō¼UUÝl±I¤VxÇx@zkJmnnmbnzxll¯ČkJl°@kbmx@x@kêmVnWxôXxU°bWLóJnÇWĵV¦UUbbÆġKk¯VU±aXmċÑUwĉKġkVxkÇKkbIÛXWl¯bX¯KbĊÞVÆnĸ²lxU°n°òÈb¦xVb@¯Vx@¯VķÞČlĊ°KĸȘI°¤ČIôò»ƨnȰKǬ¦ôWŎÈƨwlnKVXmbX`lbwkVWXXL°aƾaĊ£n°@°¥ŎzÞ¥»alwôkƒJa@ĶK£bU°ĊxźVÈUĠ¥ƨVI@XU°x°Ln¥w°UmwXmÝV¥Ģ°@nU@mÆ£¯lKÜw@aÅU¥UaÝIkmV²nn@Ķ»@Uk¥VKÞ@ÞÛ@kVmĢa@_Jómǖ¯ÆwóÇa@alUwwĢřk@wÆWXUWXWam@_ƒ»ÇéXaĸwVa@ÝKkUWkXkKXxn@lĊV@¯m¯nřÆw¥\"],encodeOffsets:[[130084,52206]]}},{type:\"Feature\",id:\"2301\",properties:{name:\"哈尔滨市\",cp:[127.9688,45.368],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@°`_JlU@@V¦°JUnLôlnŤ@@ÈaUÒVbkbl¤zk°ÇVÛô°IlVUVôUxÆU@bźĀº@¦b@l²UVl@°ÒĠxnXxÆVô¼Þ@Üx²KÞlVÑ°UȰôlwô@²ĸ°lanV@VŎUll@bÈnÜmwĢ@la@ÝÞb°UXblŎ²ÆkVI@nJnĠ°knÜbĢwna@akÞKƒĀaIVbU¥wĠwkôxnLċVçkaU±IUmnġW°WôĉalÞÅĵ¯@W¹XÝab¯a±X¯ºLaVmkLóbkaVUKVkkKV_@aÝykk±L@ÅU@yV_aU¥ówÇx@UkVn@lkÅlwWVwUkĉmkklW@abVwnWWwWL@UUÇLÇm@wJĉL¥@Ý_@a¯yUWw¯¯Uġx¯aÝXVmaU£ó±¯nwa¯óÅVXmanUlUXkWa@mkIğamIklÇUkĊzkKlUōĬl@nX°@llUxŹ²mKĉVWwk@UbUK@bmVmIVmwaWxXlWČmºÞÆbUxV@ĵńWÆĉLkWUbaWzkbĉ`U±LklōwUVÝ£UW`Uwk@mk¯VkaõVX@WbLK@XƧºWzxK@lmX@bkVVÆk¼Vbk@Vn\"],encodeOffsets:[[128712,46604]]}},{type:\"Feature\",id:\"2302\",properties:{name:\"齐齐哈尔市\",cp:[124.541,47.5818],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@Þ@ÞĠKV¯a°@KVblaČUmnnKĊÈKX°Ġ@Þ£ôllÈy_@a@aKÝVwU@±¯Ulkw@kÞJlÅUa°ŃČaWVôƨVU@»nIb²KÞ°Klkn°¯I@kK@ĕÇÅ@aX»¯@VĵlaÿVamI@aÅÝउýĊȗJôȁÅkmƑÛ@kxġ@@laVk¯»īŹak¥Å¯JUaWU@@wa»KUkÆkUmUmwÛ±±UUbUUXwWwÆÝklkUanaWwnKlkal¯kaƽakÅxa¯@amb¯VlÇwÛĀV@xmêVÆVVaôVwÈx@ˌx¦VÞ¯VlmX@L@¯Ua¯LmV@°XċKV@UÈ@¥@wġIUkm¥Źw¦¯lmn@°kxVV@¦óamn¦l@nxlĉVómxnÒĉĀĊ¼þǔêÞ°ˌĠÞÒ°ĀɲĀƨźˤȤƨĊ°w@£nymwnkUUV¥ôÑVmkÆmUUVamVIkmôlxkXÞþbll@kVƆVxV@¼VÒ@UnnÞJ\"],encodeOffsets:[[127744,50102]]}},{type:\"Feature\",id:\"2310\",properties:{name:\"牡丹江市\",cp:[129.7815,44.7089],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@U`lLUlVLUlbaôlKnUbK°¹²W°baÞbknyUlUkamř²L@m°@lm²n`ôÅlKxÜKnxV@l@ÅXyW_k@wmŹĕmX»Ûl°ôÈ»ôô_WW@Ual»wU@@wUV@VXI@wĢ͑ÞȻaU_@mUkly@¯óV»XmWUXUWmnm¥nUUaWLk»Æ²IÇawÅaÝ°¯nUa±a@¦õÆğ@@ÅbxUÜnÇłlb¯¦ôó»m@±Uk@Wwa¯xUV°xXbÇÅUVK@¹KUaȯ@ōÝXallÛkalÇUǫÇÅÇakbÝƆ¯nl¯@¼VUx@x¯W¼Æ¯mĖĬ¯ČVkķÅmx°ô²V¤bUnÞW°bĢw°V°XxV°z@bÞ`@¦KĊI@xnÈÈKV@VXKxXmXUxab@kXllĊnVlUxXkxlÆkm@UVl@ÈwôxV¦bU`@zÆV@²KllÞz@b\"],encodeOffsets:[[132672,46936]]}},{type:\"Feature\",id:\"2312\",properties:{name:\"绥化市\",cp:[126.7163,46.8018],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@ऊþÆÞ@bnJUbĀnblĊÞlĸwǔÈŎKÈnôWǬêKV¥ĸôUx@VbU¼m`nnĊĊxlUmkaVÿLw@°»UmbKmÝUwUmVknKUUl¯KUUÈnK@ĠkX±lX°L@¯¥@wV_mĵ¯WwL¯UkōÇVUlwVó±¯aVka°wVk°mÞ¯ŦřÆl²ŎkU@mUkb¯ķ±ó@kxȯó¯VUÒkÝ±LÛwÝ@ó»ÅUWwmğw¯Ñ@UkV±@ka@¥¹Źÿ@aÅVwóVVUkU¯JÜóÈUl¯yk£laUaVÑÇb@ţ@kmómKV¯IU¥@@kVI`@ô¼blUlbÈb@xÇKkĢɳaÅɆō@VK@z@@¥ÆKnÜ@@aÛUwwnUķ@_V°@klVnULVVÞbVl@°@nxn°LÅÆlVÈmU²@VmĠLxn¯xkWzJwnLmbXbW°Æ²@x@JVxLĀ²Æ°I¯ºÈ@ÒnÈ\"],encodeOffsets:[[128352,48421]]}},{type:\"Feature\",id:\"2307\",properties:{name:\"伊春市\",cp:[129.1992,47.9608],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@K¯kWW²ğl@mLÇVVLk°VVmLUlVnxVnÞLnaV¯¼@xKUĀlbn`nÆxô@VbU¦ĸŰĸbôxÆ@V¥»IVl°LUll@²mVx@ÞÜÞVnlXÅÒlbÈaVVUblbJ@I°lÞInÆmxnbUbVLÅVm¤@ţVÇ¤XÈÇĖ@È¼aXVÜaXbWnzŎařKôbUlw@¯naÆKnUU¯Üa@mkkVUĊmżÝǖK°L²lÆI@¯¥ĉƛVaÞk@ÝVaĠlnUVwóma@wĉ@aVxamX@a@UaÅLaVW_nWm£nWm_ÅV¯m@mó¤Ý¦¯ÅalmX£VWUÅwmÇ@@IVWUw@aI@k@wŎ»WÅVaKIka@¥lUkUlwÅwVyÈwWU@a¯U°mÇ@UçaVa¯mV»ÅwÝUlUkV@kmUkX£w°@@ÇaÝIamÛam¯lğmmI@JUl±ÅōkWa¯VÝa@Þkbġ@xÛnÇm@akkōVōl±kÅťŚÝ°¯nUl¯xlbU°b²ôUxkVÈUŎVl°KXxĶ°nU`@x°¦@\"],encodeOffsets:[[131637,48556]]}},{type:\"Feature\",id:\"2308\",properties:{name:\"佳木斯市\",cp:[133.0005,47.5763],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@nbÞJb@È¯@xW¤Vln@lUVlkÞVÆxU¼°nUbbVèÈ@nIn@ĢmlUw°żVUn@lnL@VôbwĊlJķĸĢlwôwƨxVVUŦxLźÈ°`nnĠwŎJÞĶwôJ@¤XnÜĸln°¼È°lUbx@l@ÞÞÈm°lôwL°¼ĸ°Þ²nĠ@ôwÞ`ŤIVÒĠU@VJĸbÆ²@°ĊKJĶaĢȰ@ô¥°n¤bČU@VxmUw@aÝţÇķ@ĕķīU¯²@ÆmVÑô¯X¥ċç@ĉ»U¥ÝţKWVÅkUVÝŎUmÇÝx¯aķxÛUóL¯a±óōb¯ÑÅVÿ_Åķa@UK@wm@Van@UmmLVa@VImmXUWÝUÅKUwÝUUkVk@l¯XÅ_J¯kJmÅLa@¥U@¯Vz¯@`@¼mxƥŏKÛk@±laÛ@@Xm@@xƽ@WŎnˣĕÅ@@aÅ@@nÝbÇ¯@_UkUWkbwÝU@çWlw@anI¯lyX°m°VaÛm@mVwÞK°XlaXmm_@UkwÝK@VIXmV»I@a¯ğWbġaU_¯JU¯ġĉkō`±nÝÆkbóĊ¯XĢXmVn²JVlbUèČmKwlóğxxV¦UaJbƑÿÝLl@bmbġx\"],encodeOffsets:[[132615,47740]]}},{type:\"Feature\",id:\"2303\",properties:{name:\"鸡西市\",cp:[132.7917,45.7361],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@LKVVnkbVÈb²U°VnklVlaÈL@anU°ÜmXV`nôLèxlLXL²aVVmÈX@ķlnUÈl`È¹@Ť°U@xKnnVmlnnUllVnnaŎwlVÞÒ@n¦LV°lwVkLaÞlnÒ@xmLÞ¤Wn¼WÈLVVUxlÈôWVaU_VKKXUÆbnnôKbÞw°bÆWXamVwKUw¯WUkUlJUwVUa@@kmyzmĉw@kVwkW¯ÅKU_VmxU@aW@@kK@wa@K@@kVUaky°_Vmkna¯K@Lwġk@@IÇóXwVakmV@mwXUWanlĉ@ÇUwKóܛǊÛm°@wÅ@±b¯W¹WVwŹĕ¯kVmōb¯w@awmVUUbVIkaVwķxk¼b@VXXó`ó¼Çó¯kÜ¼WnźĖnxl@X`WzÆ\"],encodeOffsets:[[133921,46716]]}},{type:\"Feature\",id:\"2305\",properties:{name:\"双鸭山市\",cp:[133.5938,46.7523],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@UUwómÑÞÑUÝÝUkmmÅyV¯ī¥Uÿĉ¯mÇkaWbÅX¯aÝxaóLmmÅaWVLULV`UbXókÇVwUUÇKX»XmÝ£nK@wmÑkÝbKUlx¯kUKm¥@ÝÑkUōxmbUmkVkmmnkUmmL@w¯Vţ@Çºk_ÇmVk@ĸVxVÈ°lLkllUbōwnVW¼nlUx¯XmWUnÝ@xÝUó¼¯J@LVbkJWnkbW¯ÝLUxn@nÜb¯U¯nWkz°mJ@bkxX@èÞVxlaXlVV`°@ÈÞa@mÆ@@bÆ@ˤĖmXōƾ@@wn@@WÜ@kb@²ÜlŐLƦnw@»_°@y°UV@@¦bÆKnI°lIÆ`°W@kllUVÞVVxLÆÞVXWVnnUJ@UbnKVnm@Ubn@@xL@VbÆĸ`UĀÆÒ°Ŏa²ô°bôKÜVĸw°bÞwÈVnÞōVUÆlXU\"],encodeOffsets:[[137577,48578]]}},{type:\"Feature\",id:\"2306\",properties:{name:\"大庆市\",cp:[124.7717,46.4282],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@mÇ@ÑÇ°¹¯J±ÅÿKUwI@w@±ÅX¯WanamKxIylX°wmwğKUn±@nVÇUÅkÆ¯Kmmw@@¯UkÝaUUVKmUlk@¯U`ĸ@VmxVxÜ@bÛ@mÅL@¦@@yLUŎ@ÆɅɴblġÈL@wÇaakkVa»@ó¯_ÝJwÇaÅXnyU¯¥Å@wbÝaLmm@@VUlbğVm¯Xm_`¯_UxmLa¯b@maó¦Çk¤V@bóJknVxVXx±aLUbVxkLVlLWl@nX@VÅbWlÈnxbWÅbm@xbml°bXbWXVmnn`Lmnbmb@k@mwU@@¯Jlbk°lbkmLXxmbVbkllÅÞxXxVWVVa²VÜ²nxVVnÅlVlL¼b@xV@XVbIÆ°¦lźbĬ°¼Ulb@kĢ@lw@ƒÜlnȂÆóȘIĉ\"],encodeOffsets:[[128352,48421]]}},{type:\"Feature\",id:\"2304\",properties:{name:\"鹤岗市\",cp:[130.4407,47.7081],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@Þ¥ô£nn@°ÆUn`mXn¤mX`UXbÆKVb@@bnWbwUbĊ@x@nbWVm_mm@ó»UmÅWXkĠ»²¯¯nķwŎ@ĊŎK°bĸUnÑKČ¦ĠÈbÆknJÆUĢV°IVƾwaVkÇ¯¯»mķkÛWm@£óIĵxÝōIğxmm¯_ÇŹKwťUVUƧwóxxġkĸķIkĉxóa@UmK@kVmUŻ¯Vxkġn@mmJ¯n°V@bXVÇxUzÆxkxlVkV@¦lbJLUbÆXō¼@xl@J@bVxXU@JÈ@nxVÆUXW¤knÆb°\"],encodeOffsets:[[132998,49478]]}},{type:\"Feature\",id:\"2309\",properties:{name:\"七台河市\",cp:[131.2756,45.9558],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@²mŎ_lĊĢV°°IV`ĢbaĠX°@bJU¼WnUJ@ÞLlxV@n`lIUa@K°Iô»ÞVwÞ@VmnX°WVwmkX»UmŎxVaklkkKÇ¯UUwÇWUnU±bKWKkwçóKmU_nW¯ÛmV@bÇKkbkUml¯U±VÇaUamlUULKk@U@mwÛLwkLóÆm_±nk¯@@n±KnŚlbkVVmzlWXº@Ķ°\"],encodeOffsets:[[133369,47228]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/he_bei_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"1308\",properties:{name:\"承德市\",cp:[117.5757,41.4075],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@lLnlmxnIVVlUnb@VVxXJWL@LÞVnnVJ_@wkmKbxwXkWXXKlb²K@nVVVbL@WlU²lKVnUJVz@VVb@lÅ¼mVUVnbôaVX@°Ub@lWbX@b@bVb°x@VxÈLVlaÆ@Þb²k°@lVU@Xn@VWLXb@¤VXKVVVLnm°_ƨ¤@aUIVaalkX°kV@alwUVyU@kó°na°UVUUmUÆw@mkLVUWVIWLnn@xlVnKmyU@U°UXaV@U¥U@UÆ@aVUkWU¯aU@WLUV@bkbmKULmKkUVUkmVIUwlWV²Uml°U@WLUwVm@UUK@_KUUÜaXw@VKUU@mVIUUlmnIVVVbÈVlKnbVK@nI@nVnwVLVKKVnb@aUIVW@In°@lVnI@lWĢ@°UVL@b@VyUUa@w@WUnU@WÇ¯K@UkkJWaÛbmk@mVaÞU@amkW@mXUKkÿ£@akl@Um°UXwlaal@nmlXnW°znW@awV@akbĉ¥VmU@IVUJkUmWUKbmkUaKkUVU@KV@@klwWaU@kmXVènbmlUUKX¯JkbI@JmIUWU@Lml@XkJ@UkK@aVKwWaIWwmU@mU@J@UaċUaUUVkI±k@UU@UbVVm@UVKLlkIWaULUWXUJU@WbUb@lkXUxm@@JVn@J@bnb@Vkx@bLUÆnJaVXnKVVmzX°V@_lJXxWXK¯bÅamU@lUIbñJ@LÇKkIÇ`kxWL@@@bUVUb¯xWKkÅVlULW@n¦Ul@IlmUUUVm@kWnkKma¯XUKWmnwVwÝLmVUbUVWb@LnxmxVmbXx¦@nb@`V@kbLUmVUlkbVXkºmnm@@xk¦bĢÜl\"],encodeOffsets:[[118868,42784]]}},{type:\"Feature\",id:\"1307\",properties:{name:\"张家口市\",cp:[115.1477,40.8527],childNum:15},geometry:{type:\"Polygon\",coordinates:[\"@@kġÛal¥@wn@nml¹UWlaVknUVKla@U@_ma@¥WwnaUwnmw@KXaVUVaUnmWUk°lnUVUXWVwIWVóKUI@WXxUU@mma@kUKWLkw@yk@aVkUUċaUU@Wk@Unm@UVmLm±IUkJkW@aI@m@UVUla@VXVXmVwnkWKKU_k@m¥mX_JmnU@km@U@KmUVU@U@Umk@@LmW@Û£Wka@wk@aI@mmk@mUa@UmUIwW@aWUbU@kbÇ@kw@makVUkU@am@aU@mxkUbKUXU±KXVWLUK@wkU@V@WXUa@WbUxJI@¦VèVVX@±ê¯KUI`¯UULVx@V@UKIVkLmVkKm@nUJÝbkIUJVXVVxVbUVJUn°bVmlU°XnK@Ul@lVÈVUXx@W@VXVKÞbn@VnbVm`UxkW@UVkLKm¼@lUnUJVnVXV@Vm@@LVklIkl@VWlULWKUL@mJ@blbUVUlmzUJUxm@UUbċÜk@Ub@VLVV¦ôbVmUKUkU@m@VlVn¼WbUJ¯@@°nIllÈl@nXWlLkJ@bkxlxkxlXUlklJXL@bWn`@nÆXxlL@xl@XbLKlVlIXblVUbUJW@lX@VL@VVXJwn@WnL°KbVbl@VI@K@U@nmVmV@XUWI@aXm@VUUkWmn@lmUUk@mUmK@UnwVĉ@mU_V@XJôVVULVUn@llUnJl_n@ml@XlLlw²LVJUL@VmbVblVXmVnl@Ť¦nn@Ü@bl@@XV`Unb@VlLVb²JXn¥ÆÑ@¥Þ@\"],encodeOffsets:[[118868,42784]]}},{type:\"Feature\",id:\"1306\",properties:{name:\"保定市\",cp:[115.0488,39.0948],childNum:23},geometry:{type:\"Polygon\",coordinates:[\"@@VbXW@@UlV@xVLXKWU²LVVWLalVnwV@@bn@bVVllUnb@lxÈ@laV@aXV@bXxJnV@VVb@nnl@nJ@bll@aU_VWUwVUkUmUkb±mVwU@VIUW@UWk@VU@ynLm@IV@bnKLVaVmnIlaXwV@@WVL°@@xnX@V`V@VbUVVLVKnwnL@ll@@_V@VVnaÆ@KVXÆ@n@wKmUWm@km@kÜKXU@ÑW±nIUwVKla@I°wU±kkmm¯m_JnawW@IVaUama@wUmU@mVw@aXk@mWa@£km@a_kVmUnWW@¯bkUmk@VÇm@@kUUKUU@UVUamVUaWIkb@xU@@amUkKVkam@@kVUkUWmKmUkLUb@xmJU@UImVÛVmnUwJU@VX@UWm@Ub°¦UmxklmX@`ULU@@UW@@xkn¯@makVUmxUb°lUbUbnUJUUVaLkbUUJUU@mUUUJka@xUIWJUnJ@Vz@kb@`@bln@lb@X@@@XlbnbVb@VJlInlbVw@UKl@lbnan@VbJôLnUzlV@lÈLVbVK@LVxVWXX`WxXzbV`UXV¤nx@bVlVnVlUL\"],encodeOffsets:[[117304,40512]]}},{type:\"Feature\",id:\"1302\",properties:{name:\"唐山市\",cp:[118.4766,39.6826],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@@VVl@²lJUVVbČVVb@@InV@VnXxJXbxUL@bLl@VlI@WnkKV@VXnJ@IJla°IWLVVnkmaUçWVkôaÜ¯@nV°wnJlaV@VUnUUaW¯wXWWwna@£UaWKU¯¯@aVUkKUamUUn»anIVwUWlk@LlWVakU@K_lbÞU°@y°n@KÈkWWţ¥ĉōkġWUw¯£¯Çwţw@kK@k¥ÝwÅbÇ¤ÛťVlW°@ĸx@VVVULVLkl@V@X`Ub@Xm@UWbk@ÆVbnLWV@lnXUbl@X¯lmUVkKWLkK@_UK@U@UmmUxmVXLWVULkU@`W@ULUK@XlJXzV@@xml@VU@UX@Kk@WbUK@Xn`XmJnmkxUVbUVlVVxUbV@nKlLkVKÞbVKXI°KVmVUIUKULVxVJVLkV@V@UbU@WUU@UbUK@b@nV@VkLmb@b\"],encodeOffsets:[[120398,41159]]}},{type:\"Feature\",id:\"1309\",properties:{name:\"沧州市\",cp:[116.8286,38.2104],childNum:15},geometry:{type:\"Polygon\",coordinates:[\"@@@ln@UÈl@Vnl°aX@mXnVlU`@bln@¤Xb@nWl@bUx@nnVV@xnbVbUb@JXxbmXa@kUVwlWkKôVm@wkkK@kl»ÈmVKXkla°@XVV@VI@ml@@Vn@VX@V@J@VxUzVV²blVk¦@Ġ@@»@VK@VÈLlK@XnJ@alIUlaVVb@n@aU@WUIV@mUn@mKXml@lL@LnWb@XV@@aVVbV@VVIVWÈbIÈ»ƒǟlWaVUÅUUm@kVUWVkaUwmaóUJUU¯ÑU¥mk¯UaKÅnÇyóXmWÛX¯aċbÛaJWÝU¯»aóóUm@IVVl@bLUJWLX@@xXUxl¤V@VnVUVXVbV@@@VVn°V@ţU¯VUmUWV@mUXabUKUwUaÇKnVk¦Wb@VnLmV@bkV@nxW`Å_UVV@bUklVX@VmlUx@VVL@xVWVL@VW@UUm@\"],encodeOffsets:[[118485,39280]]}},{type:\"Feature\",id:\"1301\",properties:{name:\"石家庄市\",cp:[114.4995,38.1006],childNum:19},geometry:{type:\"Polygon\",coordinates:[\"@@la@y@UImVXIVJw@lbIVVnV@VVIVVlaKbVUVVImVaaVk¯VanwVlUnb°@lm@wX@@VV@VK@_nWlknwV¯¥Van@VX@W@UVIVxnmÜUnUVJV@nI@wValKnV@kmU£na@mVk°KLVa@UU@UmknWWkXU@aWW@@km@UaU@@klK@UkaWaUnamm@Ua¯wWU@UkL@Un@xVlUXVJUbLmU@aUWUkmKkLUUm@mWXammkkWUm@@U¯JUUmkU¯@mKĉxÝwÝ¥LUómwkUUUWVkKmkKmLXlxVLVxXJ@nVJnz@VWL@`nX@x@kVUUmJmIXxJVnUV@UVV@LU`UXVVlXL@l@b@VmX@bxn°UbkKWLXlW@@bKmKULmakLUlmb@Xb@xmXU`Vb@`lLx@nWVXL@°WlXnlbKVKXVb@X@l_lJ@V@XnI\"],encodeOffsets:[[116562,39691]]}},{type:\"Feature\",id:\"1305\",properties:{name:\"邢台市\",cp:[114.8071,37.2821],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@nKlLnlLXUVVlVnxôVKÞ¦ÞxĊwnL°@lVnVV°I@Vn@VlXnlnbWnXn@VVlKnLVlVX@bnVKVaUIVWkU@wVm@¯@U¥VmU_°lKkw@LXVaU@wUUUKlUóW@UVUUl°KwlKU_naKVnlKkkWWa@IJVa@IlJnU@KVUUmVlaXUl@lm@kXWÝÑnk±k@wğ@@U@mKĉLmVJ@zmlnWLUÝJU_@@mJkXUVlbklÝ@Ýab¯@¯±JÅwġaUU@kU@mVI±bUKLWUXJkaLóKULWbUVkKmnk@@bmLUl@b@mnmJkUULabnmn@lVV@¦n@l@bznx@`Vz@bxnV@xllbnKVx\"],encodeOffsets:[[116764,38346]]}},{type:\"Feature\",id:\"1304\",properties:{name:\"邯郸市\",cp:[114.4775,36.535],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@bVKlVnInm@@akVnK@al@nmlLVUXaVKôLKlbIVWXKVL²aJnU@lV@VVĢbÆx²I°°@aÞbÞ@lkkaVUlWnI@@V`ÞIVXKmnk@yInUĊKÇkUUamUUk@aU@Uk@WUwVkVJVkkw°a@mK@UX@VVLVW@wwVa@¯Xm@@lUIWaU@UWkXWmU@UwmUkKmn@lkV²VaULUVmJUUUwLma@UmkIUmLmVmx@bLUamKÅL@VmbkU¯KÝamzkJUb±VkbL@lU@WIkJzkKmKnUalWkkKW@@nkbk@WW¯XUVUJ@XlJ@X@XlWLkU`VUnaWaUV@UVIaUxUUmVK@I@W@ÇU@@U@b@nmKXmx@UxkVWUX@`VLlL@`zXÝb@b@VUVkIUJVz°KVlnLlKnLxlLVVUVlXUJ@nnI@mVUlbn@@m@bVnV\"],encodeOffsets:[[116528,37885]]}},{type:\"Feature\",id:\"1303\",properties:{name:\"秦皇岛市\",cp:[119.2126,40.0232],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lnV@Xbkx@lU@@LUVlVLVbnlaLXVVnlIVUJV@UnĊ¦lab@nJ°UmV@wn@VUJVI°bnWlXnWVLVK²bakklI@aUaVUwVUUalaVwnUVak¥X@WkLVÓmmUK@_lW@n_UK@alÅ@ğÅƑŃÝm@ÑţÇlL@¯mz¯@ÝVak`@LlVUbkXK@klVXUxJmbm¼VnVVblLUV@b°V°XLVb@¤mbXxWX°xXVbmVUVU@kbmI¯xmU@Û°óbUl\"],encodeOffsets:[[121411,41254]]}},{type:\"Feature\",id:\"1311\",properties:{name:\"衡水市\",cp:[115.8838,37.7161],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@KVlV@X°xb@VnnmbVXblb@VkL@lV@Vbn@@l@XX@bWVXlmXnlVV@@VUbK¯LUl@nmbV¤n@lLXnlVUV@ln@lbUlLnV@bV@@wlaXJVbnUVbVU@VVLVVn@VVX@@UKXUU@wUK@UwVnk@UUWlkV@aUVUÆ`X_w@mlU@anUmK@UXal¥UmÈLVbVxVLabVW@nXUVnV°UŤV@U¯Um@U@@UUaWVUmUUU@k£VwW@wW@XKIUa@wU@@al@UK@_mKXKbUU@aVKm@Xm±@kbÇakLğVaUw@a@mkUJk@ykw@£WX@lknk@WVkbUVnUVL@mVkI@JUbI@JXbXllkLUmLmbV`kLx¯LkVUV@VôXkVVLVV@xVUbW@KxlL¯kV`UnV¦°@\"],encodeOffsets:[[118024,38549]]}},{type:\"Feature\",id:\"1310\",properties:{name:\"廊坊市\",cp:[116.521,39.0509],childNum:9},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@laU@UnL@VWbklWxnIVVV@XJlbUlXVbn@@KmV@@X°WVInJmn²@lmVbnL@amKV_kwlmX@@LVamaXaaVU@UnJVanLlUkaW@UaVakK@IlKUU@an@ln@alKUkIVa@a@klaUKUV@UkUV¯KVV@kUmU@@a¯ImJUU@VV@UL@U@@WXUWa@Ukwm@X@@w@al@@aVIUmVUUUVWUknK@I@l¥kU±aUUVyUw@@I@UUWm@@Uk@@nUJU@WU¯@kbWlULnÇk¼@llLl@xUnóLlkXUxV@lWbI`°nnnllV²¯x@JkbLUVxmJX²@ÒWVÛL@lln@XnnVL\"],[\"@@@kX@Valaa@KWI@UXW@WanaUIW@UaUKķk_W@UVUKU@b@UamxVXnJUbWVXLVbn@W°kb@U@Wó¼mIU¼k`V@bVbl@lX@lUôVlUIV`lXVn@lUlVn@l@UVaIUWl£UmVWU@@UUKlUUUnVL@KUnLVWUa@U\"]],encodeOffsets:[[[119037,40467]],[[119970,40776]]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/he_nan_geo\",[],function(){\nreturn{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"4113\",properties:{name:\"南阳市\",cp:[112.4011,33.0359],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@lKl@nVV@bn@VVnmnLLXx@VLlKVUIXWÜ@Člbl@XUĊUlwnWLÞwm@ÞUVmnVl@nXJXLm@VnnJlaI@VkxVb@VlnJ@knKVn@°aVanal@XK°b@¯VJXIVK@al@nVk@nKab@XL@blVVKVLXK@VaVI°mVaX@V_@a@yUkVwVIVaJ°@anIlaV@nKnXÆm@wUUV±UUWUKnaWwXUWmÅ¯Vam@kakImUK»lan@VXXaW@@UlUUa@a@UlwUV@Xal@@anIVaUK@VXmwVmUmVLXl@nalLnal@nKlkV@@UnJUXnl@nVl¦V@@VnJ@nUVVVVIn@VaJÆn@@K@mka@kmWVaUI@a@k@@aUL@mmaVIUKUV@@IU@mUmmL@K@UUUU@mW@@nU@ğ»mVmbk@klW@UXnV@LJmlUnUJUUUW@UnkKxmLa@@@lUUbmUVWk@@nkUmam@UakJU_Vm@ÅlÇLUVmVUwULKU@k@UVUlU@@U@UaUUWaÅzJaWLklb@bmL@kKabWUV_@mV@b¯JmXUbUK¤ÇLUU@b@JkLWmkUWIkJ@VmX@JUbVXU`¯VV¯blK@LXKlUV@Um@@Uk@kxWkbL@KkbmL@UXmaU@@l@x@blX@xUJ@bULUlULÇ@@VnU`W@@nÛ¼U@@VmKUkm@VVX@@xÇ@bUbVb@VX@@xLUb@l¼XLlbUlVVUUb@n\"],encodeOffsets:[[113671,34364]]}},{type:\"Feature\",id:\"4115\",properties:{name:\"信阳市\",cp:[114.8291,32.0197],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@VllInJlknJVkVU@mXlUÞ`VnVVU@U@y@nXlKVnJVkXKWaXIb@yVkVUkVwn@K@nW@kKlUXVVUlbnUV`n@V_V@llX@@Vb@bV@@nlVUb¯WLnbmb@nLnKbUbVWnLlaX@VVUX@Vln@`kL@ll@VXVJÈIVl@XÞJ°UnaLlylU@UXKlnn@lanLWWnbVI@KXKVL@LVWVL@UVKUIVWX@@XÆJ@In`@lJVI@aWÛnK@UlK@UU@VKnlmnXalUllLUbVVknJ@nV@Vm@al@@xnVlJVUU@w@ak@XW@_mWnUlŁUmVKV@VXwW»XWaUwnkWUkVUU@@@WlaUkkaIWVkm¯xmIUmLUVaUIó»m@mmwXk@amk¯¯l@wmkLmmU@UbkUWJ@XUbJ@b@l@znÆmK@Xk@Ub@lm@I@akmVKUUVUkU@U±JUbk@IWmkxa@UUVUWVkIUaW@UlLWn@VkJI@VkK@L@bmKkJmUUaUKWXk¼VxnJ@V@@VULV¼@@UkaUlWL@U@W@IkKmL@KULUWULWKUXUJmIbK²UWnWKUUkLUmUUam@UU@mUL@xkV@VV@bmV@Vk@mwkUVUx@mbXÇnVbUL¯WnUVLVb@xnlWnU@UVUVVUbVVlVkn@llVUXUWUXVbUJ@bmLUJnb@nVK@bl@@@bVJUbnX@lb\"],encodeOffsets:[[116551,33385]]}},{type:\"Feature\",id:\"4103\",properties:{name:\"洛阳市\",cp:[112.0605,34.3158],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@VVUllLXl@LWn@J@bKUVmnL@`VblLnbV@b@JmL@LnV@VV@¯VJVnXL@nm@aÞ@ak@mImVbXLynLk°@°aVJnUV@UVVXk@WJ@VXLlUnJVnn°U@»°Uwl@bWmUXÆ@VLXU@m@Ua@Imkba@naWW@_@WXUV@@U²@K@I±U@¥kKWLóLla@£Um@kWKXU@mlLXUVKUU±J¯_@`UL¯Wmk@WakklUnVUVaU@KUU@mmK@_a@KX@VaUIm±kaVKVUkw@kaW@kbkL±UUaK@UUKVak£@UmmL@lIkmU@Ualw@UJkbmIUmn@WKImWk@mUUnÝV@nÝxKmXkxĉVWVk@kaċÛ@WXJUV@zmVWnbUbVbLlUnlUÒnWVVWnk@@Vm@kxm@Unl@Ll@@V@XnkJVV@nlVXxU@ln@a@VLnWĊ¦nx@lbVKXLl@ÞVLXJl@XXl`lIXVl@XlXUVKwV@lanxzUbVJ@VVX@b\"],encodeOffsets:[[114683,35551]]}},{type:\"Feature\",id:\"4117\",properties:{name:\"驻马店市\",cp:[114.1589,32.9041],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@n@b°UÆXnVlnLÜ@VLm@n@na@Jm@k@lVVxXX@V`lLVXVV@VVÞLVV°²@labnxV@@bLmlm_VWnIWUna@lLbnV°VL@KVLVUVaVLXK@mÆXna@wVma@Xw@KlL@a@Va@wUkaWnIVla@Kn@Vn@VUl@nKVnJ@LnK@aVkVUUW@VakUVanI²XW@UUU°KnUVLl@XaVK@aU@KUI@W@_lm@KkLUKV_U@»@UVJ@XV@@mVL@K@U@Kk@VwUUm@kmWL@VkVkzKmb¯VÝI@WUkÇJUIUWk@@klK@_km@UVWUUW@kbmKUXaVamLmK@namaXK°VakU@mU@@aa@UW@kkU@U`m@U_mVkaUVWUkVL@lmX@Lm@UxVlUUl@zaWJXbWLUlmIUkLmW@@z@VUVUUmÝ_kVW@nUVUlmIklmIkJUkl@n@Lm@ÅIUbm@UJUUVU@mmI@UU@k¥mUk@WmVmI@VU@klmLk@mbkKmb@WkKUVnUnnxW@UVLUbmJ@bk@WbU@Vkx@V@bVbkV@V@XWbUWm@kb¼VLnlJlb\"],encodeOffsets:[[115920,33863]]}},{type:\"Feature\",id:\"4116\",properties:{name:\"周口市\",cp:[114.873,33.6951],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@lnb@xlJ@UnLlKXUlJl_KnV@xVL@bkbVVUè@Wb@UbmkVmbXVJnUl@a°@@bLVblXxInmnLVwanJÆw²IlmnXVl°VVbÈaVb@lkn@VWnLlUVmÞUUklkVkUaVaVaUwK@kkaVWmw_l@nUVVb@baV@VV@zXJl@@kl@lk°WVnÆbnbUVJI@VKVm@kK@_kK@a@aU@@wW@@k@aUW@IUWVUnLlUlVXKVwmk@W@VWa¥@k@lnUIÇKUaU@UUVmIUVUk¥Vma@¯k@Wanwm@@n@@m@UIVkUVamUXWaVU_@mUVUImW@aUIĉK@VmIb@lU@@nJkU@KIUmmLk@UVm@Um@@LkbUmJXlbV@xUb@@bkK@LWx@bUn@xmbÅW@nWLUKUbUVKU@LUK¯mU@VV@xULUVL@bU`WUz¯aUamKUa@@xkX@x\"],encodeOffsets:[[116832,34527]]}},{type:\"Feature\",id:\"4114\",properties:{name:\"商丘市\",cp:[115.741,34.2828],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@XVl@lLÈ@VkV@V»UanWX@VaÆÇô@ÈaVX@xVJXUÞUaVLĸbXKlV@m°Vn_nyXX»mUk¥lK@a_@yInaVKVa°_@WXI@@KVnIlbnaV@l@a@_w@lwUKmXa@UV@»Vw@kUKVUUm@w±VUXUKUwmJUU@km@@±mXkmUI@mmKUwkbWakLWaUIkJmX@l@@VUX@JWbX@VbULWblUVULknlV@bVJkmb¯KknWmk@@nmVkx@VmU¯KUnUL@JUIVmaÅaUm¯Xlkk@@lk@WI@yUUU@b@aUaUmVk@`nxUXlb@lLVxUbUbVbUllkVlÝVUnkVmKUXm@kl@nUx@xnxn@`VX@V²x@V@b@Wl@zU`VUVVbL@VbW@bkXllkLWV@V@VVÈwlV@@XK²LlbWnnÆL@VnJWn\"],encodeOffsets:[[118024,35680]]}},{type:\"Feature\",id:\"4112\",properties:{name:\"三门峡市\",cp:[110.8301,34.3158],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@WKUmUI°U@@UmU@KnK@IaU@makKUa@_KnmVUL@a@IXm@KWkkKVkUU@aUW@UUIVaymwkbU@xLVUWWkk@WUkJk_WWk@WIUKÝk@WKULka@mwĉ¥mXUK@@bm@kVWwkU@mUUlIWm@@Uk@@KkVmn@lwn@@Ul@XmUXUmVÑkmkVKUaVamaUXn@ykLUK@WwKmKnUm@UmaU@mUk@kL@lxċxUnkVmnXxWb@`kzWJ@VLmVUnlmUL@lW@Ub@VXUb`VLUbUJ@nmnUlUUm@@bUJlnUU@lxkb@@XJUn@kb¯VVVmlXXlJlzn@VlkVW@bkKbmkUbVblXVxKÈnwÞlĊKlVnKlwX@lL@xlUnVn@l@lmX@ÆÈb°¼ÈwVJlx_°xalUÈxlUnbVxnL@lllbmn@nb@@VL@V@@VLJnIVVlKnV_\"],encodeOffsets:[[114661,35911]]}},{type:\"Feature\",id:\"4107\",properties:{name:\"新乡市\",cp:[114.2029,35.3595],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@XVlLK°bUblbUbl@nX@WXVVKVk@@mb@UbnW`kLLV@VVLnKlVXIlV@@a@l£nWlkVa@°bnUlLVlnabnUVUXKlU@@lk@aI°y@ôkUU@wmônkWakmlUkVmkUlmUUm@nkUKWanamULXW@UVnUln`lblL°KXV@ĠJ@L°JUVwanK@UUImmkK@¯±Um@IVmUmmÅnWaUK¯aUkw@W±kVxUVwnÅJUIWaÝJóIbm`ÝbÅImJUI¯¥¯@mU¯UJmnUVóUkl±V@zXlbWVXL@bmmº@@XmJUXU°llk@nWJk@U@¦U`m¯Wx\"],encodeOffsets:[[116100,36349]]}},{type:\"Feature\",id:\"4104\",properties:{name:\"平顶山市\",cp:[112.9724,33.739],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@l¤UbVL@VLVb²VlKlaX@lb@lxUVULbln²VJUbW@@Lb@`nL@nVV@LVUbUVmkVllXbl@Xn°VK@_°`²IVVV@VUVJnInaWK@U@KLÆ@nmlXXWVUUw@klKVa@knyVkVanIJXUl@XbVUl@@aa@mXkbnK@UlK@UUUVaXaWmkUm¥nWmXaWakl@VmÞbKVL@aVI@mUwVm@KÅméULKVaUk@kUK@UWXI@VlKXU@VVnInVV@VLlK@UUkKU_@WWUwU@kln@@Imb@@mnUKÛ@mKUkWVXxmbVLXVVU²VV@xÅnmWmLU@kbmJ@b¯IUbJUUxVl@z@bU`W@Ub¯nUJUb@WLUKULkU@aWK@abmL@lmUk@@bULWJUI°@¯aWLk@mbUb¯b\"],encodeOffsets:[[114942,34527]]}},{type:\"Feature\",id:\"4101\",properties:{name:\"郑州市\",cp:[113.4668,34.6234],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@@nWVUKÅ@WnVnIV@kÆwV@nn@lxÞlnôJzXJl@nalUČVll@²UlkôVVUnmI°VnV°@°¦VJnIÆJÞan_VmU@ama@kU¥kaUklw@UIV¥kVUI@mmUÅmUlwVU@amUJWbUakVVé¯Im`k@wVWmLkU¯XkWmLmx@UUbm@@xJ@LbW@UUVWUkVK@kaIUamKUkkmmLUkJUVWXkWmnÅ@KL@@VXLmbmJUIUVU@ULWVkK@nWVXL@lVn@¤bkôKXKlL@¦²V@JL±@@VU@WV@X@`XXmb@blan@Jb@V\"],encodeOffsets:[[115617,35584]]}},{type:\"Feature\",id:\"4105\",properties:{name:\"安阳市\",cp:[114.5325,36.0022],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@°kVaV¥kVmUkWkWVkVKUwkkmKUU@awWWXWakKWkXmlaIVmX¥U@a@WnK@kVI¯@KğI@WU¯LkKak_kmmVU@VWXKnVmbXbVLmln@VVknlVUnVlklnXbmlmlXblnÈlWbn@@nK@VLbVV°VVzln@VxIbU@WLUa¯VUkWõ@¯kkmxk¼lXUlVbVLnlULmU@lLkVUlX@xW@¯mU@UmIUWL@aXakU¯anWk°@kkKmmUIWaambUkkKmV¯a@UblkmXk¤@@b@UbULWVnb@lUVVnmnVVUJ@bWXX@WJkL@blVU°UV@XlWnXUbW@UVkVVWbnLUJWLUK@Lnn@blVUnUblxVUVJXUa@UbLnUVV@mVIVVn@UbV@XbmbUV_lVXUWanJVI@WkI@WVIVU°WXXl@la@mX@lLXlkVbmXylIXJV@@kKla²UVaIVyÞb°LlVna@UÆKnLVbK@anwU\"],encodeOffsets:[[117676,36917]]}},{type:\"Feature\",id:\"4102\",properties:{name:\"开封市\",cp:[114.5764,34.6124],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@lUVbXaInV@bUVxknVVÆnn@VJlUU¦VJ@kxVllb¦lV@nb@bVUnaôJÞIXbVJÆImxUVwU²l@XxVl°bVLXb`XklUnmVblL@lmx°LVK@UXIVaWlL@Uk°KkVaVUXmmI@UÅKmmXka±KL@W@kUÇxUU@@UXUlKkklW@aXa@UKUaVUUV_@yXk@@a@U±w@UUW@_mmw@wVwmUaÇbUa¯UUkmWkn±JÅxmIbUxmKmnJWwkUaK@a¯@bk@mVUIWLmwm@Ua@WJUb@LUl@UUmLUbWJ@VL@VmXWWzUJUê\"],encodeOffsets:[[116641,35280]]}},{type:\"Feature\",id:\"4108\",properties:{name:\"焦作市\",cp:[112.8406,35.1508],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@V@VL@x@bXWV@XklUWX@J@nI@KlLKUVaV@JlL@KUk@KÞLl²_@nWlLUVV@nLWVUJVn@anV@awÞUVLVxb@lW@lbXnVn@@¼L°mKVn@bnl@nVK@blbLWU@VWLXV@nlKn@lVVbXw°nV_@¥Vl@XI@mlkkV¯VWnI@W@n¹n@aWKXUaWk@yk@kċUkVmbk@WIyóImÝkkwm@mU@xÅlU@mJXak@x¯V@¼¯VmUmmIkVWK@UXIl@UWVUU@mVUI¯b¯@lmKzWKUanJ@nlbÝ@@b\"],encodeOffsets:[[114728,35888]]}},{type:\"Feature\",id:\"4110\",properties:{name:\"许昌市\",cp:[113.6975,34.0466],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@lIVnKlnVlnLVbJlb@ULVlUXVVX@a@KI@wn@aVV@nwnKlXW°lVnKUXx@ln_°JVIXyXnW@UK@UXIVanKVV@Vk@KVaXI@Vbn@nxKnaUlnVa@Xa@VçUUla@aUK@wmULk`kIWVkLmK@V@XUln@JXV@nmbUóImUa±@@ÑóVUUk@UlKVU@akWVUUlUUaUK@UUKWbUkÅJ@XWa@XbmJ@nUJ@bUKLÝaUnk@lXbWbXnmn¦lVXnWbUbVV@VkL@VmLaWl@nb@bk@UVWak@WVImJUbUlmz@lUbkL@lVx\"],encodeOffsets:[[115797,35089]]}},{type:\"Feature\",id:\"4109\",properties:{name:\"濮阳市\",cp:[115.1917,35.799],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@lLXbWXXx@bVVnLllVxULUlXXlVlUnlU¦Ub¯lnK@VbVb@XbVLKVxVVnIlaba¥lU@wnalLnVVlVLXnlWVXn@@lVI@WnU@mÅW¥aW_k@WwXy@km@wUm¦lUxVLV@UwJ°x@VX@Vb@`VX@VX@llIVbnJlIbVlJ@mÑ¯Lóa@KUakX@UK@wU@lWUUÝ¯ImW¯aLUKU@k»k@mwa@UnKWI@UU@akVWKk@a±bóUWKXUmkKUmLbUx@lmLX@@bVW¦UnJkbWnXl\"],encodeOffsets:[[117642,36501]]}},{type:\"Feature\",id:\"4111\",properties:{name:\"漯河市\",cp:[113.8733,33.6951],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@@LUnVxnIWa@Xb@WÆIVlXaVL@VVLVbkVVUVlX@bUVkLVl@VVôU@Ò²@VbnôJVan@mWU@ImVk@WkI@wmak@wlW@w@VbnLVb°bVyXV_@aUKVVK@wUU@aK@kmbXVmJUX`knnK@aU@mwakb±@¯UUÝKUUU@WU@VkLUKU@mUmJUU@WVkL@UWJX@VVL@lVlUbLVKnêÆ\"],encodeOffsets:[[116348,34431]]}},{type:\"Feature\",id:\"4106\",properties:{name:\"鹤壁市\",cp:[114.3787,35.744],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@ón@xVVól@¯zJ@bkl@@kVWLUVmVXbVJnnlLl¯@Xlm°bVlWb@bKVXnJ@VV°nX@@wWVklUK@knVVKmkUKUaVkWkl»nwl°lö@lXV°UVbXKV@aJw@UmkUy¯UUUaK@UL@mm@XaÇkkmWank\"],encodeOffsets:[[117158,36338]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/hu_bei_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"4228\",properties:{name:\"恩施土家族苗族自治州\",cp:[109.5007,30.2563],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@VKbX@lbUVnL°@VlVnUl@VUX@aVmaXlaUUU@wmaVUn@Vnmmk@mU@knaaU¥VamX_@WUmW@_kVaVKnLl@VVal@k¥@kUW@kUKVUlUVÑW@kÇaU»ValmkUVUVak@aV¯_@WUkmVUlU@aalI@akkVWUaWXUWwWVbÆ@lalIVK@Um@UUW@al²a¯UağÇm@bkk@w@@WaULmxIUb¯@U`UXJmL¯aKXWUL@aknmK@aWUXaWm@I@UÅmVU@aUV@bVI@WkUbXkm@VakwUKULWKXmJ@XUK@mL@KUwVaUI@KU@mmnmXka@»V@@UUaw¯yVk@UUVmmkÛÈU@mWUnmxmlUbV¦UlbWVUL@UUIUmÇKVVbUVVxknLUxV`VX@kJVVUXWaUVVlUnmKUbkI@WULmK@L@LVlLnmUIWV@akn`VXUJIVlUVVbUX@¤mbnLmm@UXk@mm@Uka¥@kV@@KkU@aUKWbkLWVkIVk@UbVlmX@bU@@mmL@bn`@Ln@llVLVk@XVVU@`VXU¼k`VULka@VllVIn¤VU@@blÜbkx@bkLkKn@bn@@b@JUnV`UnVbVKlVXUlbn@°Vx@@bnVbUllVn@VVK@UnW@UVUlnkVÈÞxVbVVIxVaÆ@@aka@UVaU@@ak@Wl@nbVIÆ@Jk@L@VlXnlla@VJnw@UmwXU@aVK°ÒnllnLlbxnKVaV@l¦²nVl@llLx@XVVĶ@nax@U@alXUVaLÈþV°XxWXkK@mLnlUb@bxnLVlVVkb@UJ@xWXX\"],encodeOffsets:[[112816,32052]]}},{type:\"Feature\",id:\"4203\",properties:{name:\"十堰市\",cp:[110.5115,32.3877],childNum:9},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@@a@w@kV@nbVK@nUla@laÅl@nlVakwWX@WkLaVmwV@anK@UlIXmWkk@@mmLkWlwk@U_mKXwWK@U¯K@UU@VUakmkIyUUVUmanU@mlwk@_mWXaUWU@Ç@U@aUaVwUKUIVkK@UWIXmaV@k@Vm@UnwlUamk@V@ULUamxUJkU@I`WkkK¯XWak@@W@IUVLWJkXkaÇVUK@kUmbmUUUKbkKWUkI@kKÝ@@aUm»nI@mU@UnWV_@aUmWbkLUl¯b@akkk@WkkJm_k@UV±@J@bnU@@WÝIUJVbXL@nlJkx@Wn@VkJmbLmU`VbUL@xVn@XV@mVVnnJVbUx@VnVUbVVx@nbUK@b@bJm²VUlbXzVJVJVbn@@Xmb@V@bVJÈ@Vnkn@°aVVV@XKnalLVmUnnVKVlnLWlXXKlk°XWkLUVVV@nU@ml¯nmbk@W`Å@mbLWm¯UxnêVèk@mbVnUK@kKmXk@@JUIlÛLllnbVnlJ@LULnlÆaVLnV@nkVJ@lkô@²bÆm°wLWV@VXKVXI@W°ÆVKb°UJVIVV¦XKVL@lInaVÝnUl@@bX@nmVL@lVLlVLVUnbVW@xXnbU°¤V@a@kWKUUn@VlnL@UV@Ü»@mX@V_akaÞ@VK¯@kkW\"],[\"@@mUkUUm@nllVKXXVK\"]],encodeOffsets:[[[113918,33739]],[[113817,32811]]]}},{type:\"Feature\",id:\"4205\",properties:{name:\"宜昌市\",cp:[111.1707,30.7617],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@°`U@blUbUVlVknUbV¼Èb@lXUÒkVUVVL@lVX@ll¦k@UbU@kmKULUbl@`nXV@XW`nUbV¦bmb@lV@nnlmnUm@UVnb@xVVVkbWnbVnVa@an@UaVUJXnWlXX@l¦@lKÆXbXV@VV@°¯°xXxXV@nV°UVWU_VWXkmaVnWVkn@lln@lb@UVLXWlnX@aXUmaVK@UXUU@WVIWXXVU@¥VK@UÞa²LlV@kV@UanKma@UVUnK@UVLXyVLknJ@UV@@UXKWUXaV@Vb@mVLnKWm@aUUm@@UkK@UlaLXKWaXI@alKlmUk@wVKXL@m@WWn@UVa@K@wna@aW_XWWkXbVW@k@U¯WWwka@UUaVIVkU@m±@U@@wVKka_@VV@XUVwU¥yUkm@V±ÈUKk»ÇLmmLk@ó£kmWwm@UIkWKXwWU@kLwkbmabkK@VLkmWIUKkUUÇIǫJXÅJULVÇLUV@UK@kI@WVI@UaWmXVVUL`±kÅLmKkkÅ@UaXXxWVXVbUXll@bkJb@bkVUVlnV@X\"],encodeOffsets:[[112906,30961]]}},{type:\"Feature\",id:\"4206\",properties:{name:\"襄樊市\",cp:[111.9397,31.9263],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@@Xl@Xb°WlLXl_@JlVVInwVbVK@@UnlVbkmx@VUnl@U@nbWXJ@VlLUVJVLUxVb@b@VÈ@XVVWbnX@`lkx@nmVnbUVVVzlJnlVbUV@@V°L@VXLWxnLV`l@kxlXnK@nl@XlWn`Xnl@@UVa@VÈK£VLVanW°U@UVU@`VInmV@nV@Xa@aVW@UalkXKblIyÆXnlJXbl@@VV@nklU@`nVKLVKVb@VU@UÈKUVKIlUX@V`lIVbn@nblVVmV@@XXJUVV@knKVn@`@XVnKwlLVmUUU@U@aXL@WlU@UUW@UmU@KkLWaXkWmXUWm@U@nk@UmK@U@UaUVUUKV_@al@namWUI@KUK@aV@WUIb¥ULUJkImK@U@KV@U@a@UkU@K@wVaUwlU@mUULmKUkV@@anIWmUK@I¯mKkl@LUb±lUakLmk@WwUKÝVUIm`¯n@Uk@makJU_@Jma¯ImwUVkKbaUÅ@wWaU@VU@mXIVmmUkJkwm@mIlUKWzUK@VmLUV@VnbmLVbU@@lkU±KbÝV@UL@¦VWUWXUJ@XVWV@VULnbWVbW@kmWXUK@Vkam@kkm@UlmXUnbWlUXV`UX¯VmUU@Ul@Lll@nnJ@LnWmbm@b`\",\"@@kUUm@nllVKXXVKmU\"],encodeOffsets:[[113423,32597],[113794,32800]]}},{type:\"Feature\",id:\"4211\",properties:{name:\"黄冈市\",cp:[115.2686,30.6628],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@VVUnWVXnVJ@U@V@VXV@@IVJUn@V@L@KlIVlVanLVbnVlIn@@a@Kl@@IJlI@aXU@KlKkVblJXUVlU@VbVkVKXn@VlxVa²I@VlVUxln@bJXklaVWnLmÅ@y@k@aI@W@aXIlVVaV@nnlKnLVW@IUa@a@KUVVlI@wXKVV@IUla@lUXwWnnalLlxXLll°@XwVKVaXIlnb@nln@Va@U@k°UmÆUVaXIJV¯ÇUmmkU@WaKmakVm@U@aVKkkmKkVmIkÇ°£@aUUVaVVnKlkXmk@lUVaX@@Um@UmlUXVUVU@wK²¥Ua@I@UVl@UV±UIUÇ°»VkUmVI@a@Umĉ¯V±bŹĖğaÇL¯lmkX@óĀ@mÝêb±WkLn@xXx@@b@V@LW@UblţX`kxWnXô¯¦ÆV@L@JVLxkK@V@bkz°llXz@JUlVla@XUVbVKXnW`XXV@laVV@VX@V¯xx@xULVbUJ@n@LU@VmmakbUK@bIWWUUVkUmkLm@VJkb@nUJ@`V@kXaUaVmmLkUmJ@Uk@U±lkzmJUb@bVUxVXU¤L@JX@VlL@JkLUVU@mnUl¦@V\"],encodeOffsets:[[117181,32063]]}},{type:\"Feature\",id:\"4210\",properties:{name:\"荆州市\",cp:[113.291,30.0092],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ÈJVlVVLXJlnK@UlLanblaxlK@XVWxXLlJ@VnXxlnô¤l@nKnÈKl¼VL²ÇUn@VlzV¦UxWVU@@U`lbUL@xV@²@@nlVUUJVb@VlbXx°XVWX_VKUwVKVa@UVKUUVk@KnblaUU@wnWl@UX@lÆ@@aIVmUkxVJUbÜ@Uk@WWnk@VVm@I@m@Un@mXUlVlUnJ@knJVU°@@aÆLX@llL@¦nJV@XblLVa²U@UlW@VX@`@LV@@bXJlIXml_lJU°bKÆLnVVl@öVmXaVIĢllUlVnLVlX@@bannxVLbn@°ÆXmmkĉ¯w±Uċ@KÝÅƧŃÝçUw¯m¯k@WkV@¯UIUJW¼kbUwk@W`@¦Uônb@VÆlÈ@VU@£UWWnUÆUnmJkUÇ£VWUI@aUU@WkI@Ua@JW@k£kaWVUKmnkKbkkVWbVmUUmwU@kk@UakUUa@V@nlx@lUb±lUbnnWLUyk@UamUK@mlk@Wb@VXL@x@xWI@a¯¯V@bVn@LkKmL@`XmKmVU@@bkL@V±bk@UaaLKUVIWXamVVbUK@b@Lm@UWkxULWVUnm@UlUX\"],encodeOffsets:[[113918,30764]]}},{type:\"Feature\",id:\"4208\",properties:{name:\"荆门市\",cp:[112.6758,30.9979],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@n@lxlInVUnWJ@nUVV@Xb@xVÆbalLVUnx°JnbI@V`lInbl@@V°mn_VJÞUVLXx@nllKVb²kVa@KlknL°@JVLXnmJ@bU@VlnLVKV@nX@lUKVaXal@VKn@¥°L@UnwbnaV@KV@VUX@lVXI@KW@@IXWV@laVLKlaXUVVnkVWV@lwXblIXWVkVmaU£VaUmVIkU@y@WakKUamU@UUK@kmK@w@@mK@LV¯U@WwkmULamVVUU@IbUKUakmm@UakLmxU@UÒWlULţÿmwkIUm@akÈblW@UVUUk@JW@XkWWUkUKUIlw@aUWknWUUmnIWaUwVaÛaVUIwVlUnJ@bÅ@@kVWk@mX@xVVkbma@LUlVVUL@VUbULVxULW`UX@V@lUXWaXlWXX`@bmb@x@LUb@VmXX@@nWKUL@xVlknkL@bWJXbWLKkb@VlL@Vn@VV@bnXmLUK@nUaU@WbXVWL@VU@@V\"],encodeOffsets:[[114548,31984]]}},{type:\"Feature\",id:\"4212\",properties:{name:\"咸宁市\",cp:[114.2578,29.6631],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ÞÆLČ@V²°xĊnlWnÅ¯m@aK@°nJwnVIUaÆJÅ@wwVXW@aV_l@²V°lĊwlaXLwlUkalVVaX@lVXI@aUXJ@U°UU¥VIVKVklanLVa@VÈIVV@nk@aVa@mV_@aK@klKUa@UnKWk@@lU@@UW@@nUWUwmaVIXlV@mLXblJ@kV@kk@KU@WkUWVÅwkLmW@UmL@lULKULak@maUUÝwUJIbKUU@aWK@kUWVkUwVw@mÝ@I@wkW@aww@LU¥kJ@nVJIkVVnkVUkyUIUl@xWUkaW@@°kzWxkLUWmzk@@bVVVb@@XlV@Vl@bVbUn`Wn@WbVVI@`LVbXLV`mnU@@lL@LUak@Lk@WbUJn¦@lVb@xVb@n\"],encodeOffsets:[[116303,30567]]}},{type:\"Feature\",id:\"4213\",properties:{name:\"随州市\",cp:[113.4338,31.8768],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@@n`lwkUmUVWX@lk@VanUĠ¼V@@mX@@nVVVXLmJVLnK@bV@@J@VUn@VaVUUUVWVLV@@Kk_@almaVkUU@WVVUVLXmmk@wUaUKUV@°@kmaUaÈmWmUVklaX@lVnxl@@UnaUk@VUVwVKn@VVn@VbVJUknUmmVmk_VwKUUmVak¥@UVKVIkW@UmIVWkIVkmmLkwmVU@LUU@VVXL@JmLUbmK@UUKmkKUUmVUaUnÇlk¯mJUnmLUaUJUaWL@UkJU@aklkU@¯@KWLUmUUWVkbLUKkbU@WX@JX@@LWJkUW@UVU@@LUmbamx@V¯K@¦mULk@WbUbLkVW@kVVxUb@x@LlV@V@b@VU@L@VLnlJVIVK¦aVJ@XU@bLV@LVJnXmbk@@bU`VLUVVb@V@VnL@Vml@@VXnWVXnWlXblK@LnV@VVX@VkV@XWK@bVV@VV\"],encodeOffsets:[[115830,33154]]}},{type:\"Feature\",id:\"4209\",properties:{name:\"孝感市\",cp:[113.9502,31.1188],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@VnXK@L@°lVlkb@VlI@VXKVbVIVbnKVmnI°lÈkVmVbnUVVlLnVL@VnLVanK@IWKUUV@V@KVnUlxnKlnUlJUXnJ@VlXUJUL@Vl¦UbnVVLUxl`UnnnmVVlnVKbmVX@a°Ý°LaXJV@VUnKVXVK@LnKlLUbVVX@VwVJVn@@UU¥V@@UUK@maUVUkkJ@L@K@UmVUI@JU@W@U@UV@UIWmXUVmUUÇ@UVmIlmnmakK@akaW@UwVUkKVnUlKVwkVU_WKUkVW@UXaWkUa@w@VU@XaW±@IkbKb¯L@WXkW@UakL@UV@UmVUmL@UXWVL@aUVUUUVU@yUUIUa@wUKWVU@kWk¯UkwVKLUxK@nVxUlUUWVUmw@wUUyXWlX¦WbUV@U@blbUVVbXXl@lVL@bk@lxkVVnVx¦`UnkL@V@L@@@xnL@lVL@VnVVblLXb@@zlVUJVnUbV¤bUnUlWXkJWakxU@UXml\"],encodeOffsets:[[116033,32091]]}},{type:\"Feature\",id:\"4201\",properties:{name:\"武汉市\",cp:[114.3896,30.6628],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nbnmknJVUÈ@@U¥VknmV@VUlK@IkK@UW@IKV£UWVwU@aVanIly²kVl@@VnIlVnKUnVbblWU@@_VI@mlaUIn@lKVnUlVVXXJ@aVLlanbUnV@@K@mVIUaVK@ww°w@UW@UUUkbU@WWX_WmULaVU@WkbkUV@IWyk¯kly@a@UlLwUK@I@KÅUW@Å±Um@wl¥ka@@_Vw@ķa@akw@kKW£XVUVwVwUaU@VUUxWKkbĉx¯k±Uk@U`@bWXUx@xÆÅIVbUJmxIm¯@UmxnUVVbnJV@L@@kV@bVn@UVULlx°VXllV@XUVL@xVbJVV@zUVVVUVV@bUKWX@VnKUVVnU@@VlKVb@lXW@X°KaLla@JX²Wb@UV@@xVbXlWb@VUXVlXLV`UlUxkLmVUlLUVVxX@lb@blL\"],encodeOffsets:[[117e3,32097]]}},{type:\"Feature\",id:\"4202\",properties:{name:\"黄石市\",cp:[115.0159,29.9213],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@VUVV@VbUxaWUblUVmnKlX@bXJVIlVUxVVVIUzlx¯@VbnL@xx@UVaXKb@XkWU_Vm²klWXVKl@nXV@@wmlK²XaÞén@ôÿ@lWn°kUKmmUÑUmm@wkImWU@UakL@bVLUVċ@bUK@alIXKWK@nXnKmkUVw@¯b@LlUL±Wn@KULUaW@kL@lL@bU`@nUb@bmlU@UÇJ@UUbmKkblUULUJV¦¯V@VWIV@bWJkUW@UbkUlbkV\"],encodeOffsets:[[117282,30685]]}},{type:\"Feature\",id:\"429021\",properties:{name:\"神农架林区\",cp:[110.4565,31.5802],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@n`lIXll@ll@b°aVklKXaVn@bU`mX@VV@nmJn¼V@bÞ@lL@lJXVlLaVLVnVnalV@VLÈUlblWXIKVU@J_@annaXm@KmI@mkk@KVkWWw¯w¯°@UUU@WaÅWkL@¥@kWWXkWmIUVVbm@@bUbmUUbW@UVk@mVkU@U¯mKVUkaW@aULÆVbb@VÅ@Un@VLWl¯L\"],encodeOffsets:[[112624,32266]]}},{type:\"Feature\",id:\"429006\",properties:{name:\"天门市\",cp:[113.0273,30.6409],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@K@UlKVm_¥UwUmlUkwl@@aUK@kkWWUaVUka@aV@VUXaW¥Xk@WWIklm@ÅxmIVÝUkxka@bWJaUL@W@l¯UULUbkVUa¯bm¤UnÇUkmUUxb@VkXÇal@bVnlJnxŤĀVKXkVÑV@nwlKVbn@nlVbVLaJ@VVUnUbVKlnXxV@°U@KnL\"],encodeOffsets:[[116056,31636]]}},{type:\"Feature\",id:\"429004\",properties:{name:\"仙桃市\",cp:[113.3789,30.3003],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VK°VkX@@VKbXI@alblwÞVUnJÆwn@lkXJ@XWVzV@xnxVXUVVVkUw@mLVwKVU@Um@alU@@@KUmIUaVUmnwmwmb@aW@UkmKkUkVġkUJWbnUõ@UkmUÅKL¯aVkIk`WnkJ@xVLUVVbUbk@WlXbmVxnxUblbUV@@VUV@nVL\"],encodeOffsets:[[115662,31259]]}},{type:\"Feature\",id:\"429005\",properties:{name:\"潜江市\",cp:[112.7637,30.3607],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@UbVxbXmJVnXVlmVX@bkxVJVLVlXXWlX@@IVlVUaVwVlnÈVVmn£°aVbUlaVUK@mVU@U@VUkaVamwUwnWaXkl@VaUaVUUK@wWI@aU@@K@_UW@kX@V±VUbkKWaU@mI@¥kKkW@ÅK@b¯@UVmI@lmIkVkUWVnm@@V@n@JUnU@mlXXl@@V\"],encodeOffsets:[[115234,31118]]}},{type:\"Feature\",id:\"4207\",properties:{name:\"鄂州市\",cp:[114.7302,30.4102],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@°¥WóXmlw_ŤWkVaX@@K@U@a@WwU@mWk@ULWkX±lUnV`XWl@aWLUb@Vw@wmKUa@°kwyVUJUUVwkUUJWI@akWmLUnkVaXVbUxUVWX¤lL@lx@bb@ĸUx@`@lbk¦@xn²VÆX@\"],encodeOffsets:[[117541,31349]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/hu_nan_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"4312\",properties:{name:\"怀化市\",cp:[109.9512,27.4438],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@@n@b@XnJ@k°x@aVUnlUXnV@@VnJWUJVnIVV°UbVVVL@²LUVa°V@aV@nmUXblLXWVXVmVLVK@an_`@X@l°VlXXW`nX@Jmn@b@nV@Lm`bUbn@VUVl@nIVbUlV@LkJUnVV@xVblVUbU@zUKU@mx@xUnn@@WV@lbUb@nVWXXV@VIV@VUnJ@VUz@JWbXllI@VXVVL@Vn@Wlb@lXVlLaV@VJ@XX`kVwVl@bkbUlVXIlnLVamVwV@@nV@XaVJVbX@lwV@n@nV@VWnIVVUÆ@Xxa@IUUKmk@mVIXmWUVJnUVU@anaVwkU@UXa@W@m_@a¯@@K@UVbnK@blIlbXa@WW_n@VU@¯bmyUkUJÇÅ@WU@kWKÅwnm°KVkmankVWnXVWV@UwXkV@mUlLnaVaX@VUn@VnVK@xlnXWU@a@@klakVwmUaV@wmIÛ`m@mVUXmlIXVI@K@aU@UaV_UK@wkUmmUKWXmVkUL@mU_nK@aVU@Ukak»@U@ymU¯UUVKkam@nka@mwkLWb¯mka_VaVKUIUw@kKmU@WK@UnmaULkU@wUalWV¹U@@WUI@WU@_@W@U@mU@WbbUK@Um@@UmbUwWWkk@WUa@anUUwlWUwUU@wlJVUnnV@@mnI@mK@U@wa@wUm@_mVUUaVUk_kċUkVWL@mlU@kn¥W@UwUWV@VÝU@lXLWVUbVLXlVIlknmU@VUJk@@@kVmwmVkxU@@XmVUb@xnKVLl@VxUxkIU`@bWVXX@JWL@bkb¤@bmUUU¯Kkmb@VVUVVn@@Vb@`lnxmblUnbk@xUmV@bmWbUV@VJIl@nVUbK@nn@VbnJVIlJVkXJ@X@lmx@bnnWVXJWXU@UlU@mk@@llb°xIUbnJ@VWbXVmI@JVX@bk@bWL@JUXUK@U@U`n@@Xm@XVW@@nX@@`ImxU@@JUI@KLmK@UÅUUV@VW@¯kUU@UamVUUmJ@nxmLKkmJkwkKm_mKXU@aU@b@Wk@ma@zUJVUmbUlU@xnXlWlXXblK¤V@@nUVVLkVl@Xb@VVKnXKVx@znW@X@@lVK@X@JXbWbnn@JUamLVVXIVxnK@aWUX@x@VnI@WlI@anVIVxkl@lbXXxVVVJVInbV@@ln¦ml@XXVWbkJWb\",\"@@XLVKVXVKUa@UUUmV@l\"],encodeOffsets:[[112050,28384],[112174,27394]]}},{type:\"Feature\",id:\"4311\",properties:{name:\"永州市\",cp:[111.709,25.752],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@lxUXVlXUVnlVĢJVbUXVJV@XUW¯VIUK@klW@Un@nl@V`XUVL@l@Vx@XXW`UnUbxUlVnUVlb@VnJUVVVInJlUVnwVklKnwLVJVV@nIV@nbVa@KVVVUUaKV_nVVJ@_VWnV@n¥lI@anl¥X_VKlwVlULUVVV@U@VXL@IUmn@VU@wmKXUWU@m²l@VIXWWkWUkWlkIVamUXamUnmWUU@@UnlK@XJl@kVUk@mWKXkl@@aVU@UVWUUVaIn`VUVLnw@U@K@U@w@UVmUU°K@UnV@bV@Xk@KVm@amkaU£VWUUmUUwm`UbULkaKXU@kVmU@aV_UWVIn@yXXK@klmVV_kWVUn@WUU@UmaU@wnwWanUmmXkam@UakLmK@bxUUUU@Km¥Va¯@kUaVUlmUU@mUUÇmUkUybbUaXUWWbÅLmL@VaL@WWXUKmmk@a@UUKXW¥kU@VUkxmVkUWbUJnVJ@nVJXzWxk@lVbUX@VVL@`mbUnUnVV¼k@Ulm@mwLb@lmLUK@UamWkK@£Ua@UkJkUmbVlkX@bWbUVnnUVl@bbVK@VX@lbV@nU¤x²Knblb@xVô@l@b@l@XWxnVl@VV@XLVlLUUXV`bXXmJU@@bm@UUkLW@UlUKWUUbwUmL@nklVVmVXXm@@bUKlÆnXkllVUVVL@nUbV@V@nnV@xUn¯U@JW@UX@xĉ@`m@@LV@b\"],encodeOffsets:[[113671,26989]]}},{type:\"Feature\",id:\"4305\",properties:{name:\"邵阳市\",cp:[110.9619,26.8121],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@XIlJIVVK@n@VVVKnLVwVmnLVK@U@wJ@wVIÆ°X@ÜÈUÈxll@kn@VwVaXJWXn@@WVL@UUKVKV_U@@aVKx@UaV@lk@XylbUaV_Vnal@WU@aI@aV@@aVUl@XmUXWaXml@@kk@ma@V_UnUVUUWJUa@kkaWLUmk@@LUVWUkJWkK@¼UnWJIkV@b@JUIm@UlVm@Uw@a@kWXWKUknW@WUU@kmxUkVmIUJUUVmI@UkaUVUmVkwVaVmX_WW@Uw@@kUKWVU_k@mm@@VkX@lVLUJX°WVU@UIVWUaIUġmkVUkWUVWkwWXk`mI@¥kUVUUn±@mXkWknVUVmmU@@XVUk`@Xk@¥¯»mbĉó@mkU@kUKmX@UnmL@lULkKUWUU@bUaUn@Vb@l¦Ub@l@UKmnKUnlUVVbUVn@`Vn@xb@x@VL@nmJ@nU@mmUVkI@xVVVxkXVxmV@bbXVl@XlXVxna@Vn@@VVLaXaV@n@@V@X`V@@XVJ@XV@UºkXVb@xlVVKnbm@VXLV@nlL@VxJVULUb`lb°nXalKnx@lbmn@lbULVV°nV@z@Vl¼lb@VUV@bmLV`@nKlVnUXWVLnnlV@xVLU`VbV@\"],encodeOffsets:[[113535,28322]]}},{type:\"Feature\",id:\"4310\",properties:{name:\"郴州市\",cp:[113.2361,25.8673],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@²zVaVlnVl@nVkJl_XJlIVmnL@mV@VXn@lV@XzV@lyV¯²U@UlJ@XVKnVVIXl@UVLV`@n@JI@mlIKVLnUlVUVVLXaKVLl@nb@WXV°KUnVVL@xVJL@b@LUVVVUVXbmbVbn@@lUbm@x@XVVV@@@bkImx@Vm@Xbb@l°XU¤aLmnL@bl@@VUX@VxnVanLnW¥XKVwnUWXmVIUWÆLVxLw@wVmlU@¥XWUkwlÇn_UwWV@VU°wnUy@aVkVlnL@lVnw@VlJ@bXx@bVKnb@U@WVUl@@Vnbl@XLlK@aVLVKnxÞn@aLlmUaVUm@ÅknUmaUKmVk@mkk@UlWUkVm@w@kUU@WU¯¥@wÇ@aVIlUV@kUWU@UUm»@k@mKVkUKUwaUaUa@kkUWJkImaU@UK@maUzk`@zy@XmJkL@UUJmUkV@z@kkVmK@¦UbWL@a@UbmKmwUKXkVUUkmVkw@UUKmL@WUIWaJW_k@@WmI@mk@WkWULUUVKUUVm@Ub@nUÇ@U@wV@Ua@aL@akl@kUJwó@@L@V@`@J@xnnmV@bkJmUó@nJWUUmU@UV@LkWlnnmVXbmxxV@nbVV@XVm@UVlXU`Ukn@lWLWzm@UJVXU`@bVUn@lWVLlbVKVan_VxnVVVUXV¤bnl@bUn@LWlU@@amU@V¯LVVUn@V@x@V@L@VmxUKUVm_JUbVV\"],encodeOffsets:[[114930,26747]]}},{type:\"Feature\",id:\"4307\",properties:{name:\"常德市\",cp:[111.4014,29.2676],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@lUmkUwUyV@VW@¯VaVmUU@KVUVUVLnaWnkUÓV_@mVU@Ýw@ka@kVmUmK@IkaUamKkXWaUW@WUk@@KVU@aU@L@J@XÇVUKVak_mWkLWakVUbmLUUmlUVKUU@kUWW@UImJ@xkLkKm@@X@óÝ@UUk@UKVULKXkWWbkaIUWU@mUk@WLaUJġ@@XÈÆVIlVnz°aV@Um@X`@XWbkakJ@amLaU@V@L°@@bn`@@XWb@VVlUxmb@bUVmVUIXVWnJU@nnlVLV@JbWzk`m@UVK²VxkLVl@Vn@V°xVKVkVVlUblx@bUÆ@@nVnUllkx@VW@@VkLWxUL@bÝ@kKkVõV@bkXVVUV@VkUkVLkVa@@¯xUxmX@JVb°WXkK@Vm@kVbbn¤xUXkJblxnXÆK²l_@Wnan@UL@bJnIlV@lU@@¯ô@lWȂIVKVmU@aXaV@lwVXn@@K@UVKUUnUbn@lWXlJnULKV@l@²a@UlK@aV@naVXWV_nKlL@KUm@a°U°@VXL@a@wWmXal@k@VLnV@@bl@VnX@mwVa²aVU@mk@\"],encodeOffsets:[[114976,30201]]}},{type:\"Feature\",id:\"4331\",properties:{name:\"湘西土家族苗族自治州\",cp:[109.7864,28.6743],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@@KL@wnK±nnm@WUkÜÈn@n»@mVamkmUl@VnmmU@wUan¯VKLnVWlInyWUI@WWk@KXUn@mnUmU@WmkV@kXaaVaUmIk@kaX@Um@UKWU@UkJWkXa@IVy@UmIUVU@UJU@WXWmU@VakaU@@Xm@Vm@wnwV@VLyV@VakUUa@wUUVmlI@KUVkUamJk@VU@UmVaan_@KmU@@anm@ImWX_WWUk¯@k@W_m`@bULUKUnUWWXkKWaVmnU@@b¯UUbV±K@UKUUVa¯UUmJUVIXmI@UU@WmVmkUV@b¯w@lmI@W@a@m¯LXbmJVLklWL@V@XXmbVVU@@VU²Ul@VlX@b`XxzUmkUVÒl@bXLWxXVl@VbkLma@nmVmULVbmVUb@lnzmbUÒVl@°nLVlJkn@bmJk_VmmkblxÈx@LUbxVb@Vn@JmLVU@nV@¦VbnJ@lVVbkxbm@UxVLV@n`UnVVVkl°zxVb@VU@@ÆlXnWm¦nbVK@XVVUVVl@XKUV@nVL@WnIWXLVKVLlxUbVKXVWbn@@UnKVLVbJU@aVU°b\"],encodeOffsets:[[112354,30325]]}},{type:\"Feature\",id:\"4304\",properties:{name:\"衡阳市\",cp:[112.4121,26.7902],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@lV@XV@mXVlXLWX@l@bVxn@UVkn@VJ@I@alUJXIVm@»LXllIXVVU@Kl@VnXKlb@lVbXIVVUmVVU`@nbl@@lXLVVVKVbnXWJ@VXbWxXbUlVK¦nLVVUVVbbK@ULnK@Un@VxlUV`UnnL@VVL@JV@VUnxnKVbV@@VIVUnJUVUl@nWXllIUaKVbÞLV¼²`V@VIUwlaVmXa@IWanK@U@mkVVUVaX@lnaVLÈ@¥@kkJUWJUaXkaUmwVXJ@_lWUU@¥n_KkamUK@amKnKbV£¯W@kaWan@@UnwlJ@a@@UUU@Wwn@Va@km@UanaWaUVUUVU@K@aKUI@wKUUVm¯LWUX@mak@UKLWbUKVUkUmVUKLkJ@nJ@I@mU_UK@VWkUJmUUL@WkI@V±VU°kzU@Wy@kUm@UWU@@nmKUnkJWIk`IUlmk@mUUkUb±yUX@VUV@bk@WlXL@nVlUlk@WI@kLm@VV@XVmnnVWbnVUblJXkVlXXlWXUJk@±@nXVWVnL@xUVm@Vn@JWK@UV@UUVUVKUkkxULW`k¦m@bkJm¦U@mUX@`UImUU`LVbUVUU@LUbmaU@mJU@UUIKmxkLUl\"],encodeOffsets:[[114222,27484]]}},{type:\"Feature\",id:\"4306\",properties:{name:\"岳阳市\",cp:[113.2361,29.1357],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@@wUklmUUmU@@UVm@wUaV_mmUKmwkIkJmUUnm@@UUbUKUmÛamm¯xVLkbÇÆUVUzkVUlUUKWLX¦W@VUUUaKUbmLKm@akU@amVaUUVIVWkk@wk@@xmLlmÅwmbVlXlÝIWVkK@kkVL@VWKU@Ublnam@b@bnW`@XUJk@UUWKk@UKnn@xmLUVm@kbVbVnV@Vb@KnVLWXÆVĢ¦VblnUJWz@ÆVóUVbkVaÅx@¦lVUbVVknWKk@wKVUÅl@zkb@`m_mJ@xXmbVb@llV@n@llbXLUXalUlalVnwnLVKlVbX@@IV@blJ@bVL@VVVUXÈ¤VnkVÑXmlbnVKkÑÅ@UmaVç@±XUlIxlV@VaX¯lUVVUVJnV@°°n°Vxĸł°¦b²¦lJ@U@aUK@kUm@_m±VIXal@Kl@bV@KK@km@UmUUaK@_UJaXU@Xm_VmUk@WUk@kU@a@m@UaUUU@al@nyXXWWwkly@¯n@@bnV@k@mVIVlUUmlUJUwIbXVaUal@Kb@VKVkXVl@VkUU@ylUVVaVL\"],encodeOffsets:[[116888,29526]]}},{type:\"Feature\",id:\"4309\",properties:{name:\"益阳市\",cp:[111.731,28.3832],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@ÆxXL@lV@ĢVIbXKl@nVV@XVJlbXalXWLVKUVLl@VV@ôÞ@@Wn@lLlK@wnIVJX@VX@lVVULVnkVVnKValUXblKnXl`UbVLÈU@W@IKV@@bUV@L@lXV@VXXblWnLVblb@JnLVUn@llb@x@ÞUV@nU`VÔmlXmbUKUVUV@LVVUnUb@°UX@UVzVxnlVkVnlVnaW@wnIn`@_la@ykÆVULxl@XLlmUUVakU@¥ÆwblUUaôVU@ÅXyVImkUaġ¥ÅUWXKmU@La@UmUUUalan@VUnK@wmmL@VlXLVVl@VI@WX_m@a¯mKUkwW¥UK@_UWWLUVkUWL@WUIkVU@JwkLUUmJVI@WkXm@VmkKUIU@mmm_@VUV@kJċwUU@KUWkkW@IWW@km@klwkWVkkUV¯m@kWLU`mIkmkXm@@`@L@xUKWkU@VL@JUU@mbUKVa¯WVnL@`lXUVkU@xW@UbUWVU@UJ@lnU@mnÈmVa@bULwUb@@VkxmUUUVK@IUmk@akm@wmIkK@bVWXkm@wULUmm@UVW@UbmbkKVnU@WlxVU@UXmWUXmlnbUl¯Lmn\"],encodeOffsets:[[113378,28981]]}},{type:\"Feature\",id:\"4301\",properties:{name:\"长沙市\",cp:[113.0823,28.2568],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lVUllXkx@lln@XX@JlXXlV@LVVČxlI@VU@Un`nnV@VJlLUnn@lW@XUJnIVVlKx@IVlUVJ@XXKlVVUXKVX@`VLX¦lxVnL°an@bkmVaV@XL@UKlU@llLXUÞJWkUknaÆxnknK@w@l@xllUXUJVVUbn@blV@bnLnKVaLVbVVUX@W¥XKVLVVklUVyUVÈÅlaUK°wnnÜbnVVLaVV@n@VmnVlIlJna@Valkn@na@amwm@UXwK@aUUVUUaVawWK@kU@UaW@kKUU@kW¯XWan@kmmÅ@@I@U@KmLkaVUKkLWVUk@UVmU@am@kkk¥UVUKmaUb@UbI@aKkkWm@W¯K¯b@VmaULVxUXlVk@UxVJVbUb@xUL@ULWWLĕmxVVL@VbKUwaÅ²WwX@@WUWLU@VbkV@aU@@VUnmJ@VUn@VLUK@UmUIk@UÇmU@@UW@J@LbUmVI@aUmW@@bkXUx@lmLUbm@UbkJ@V@XmlUbkKm@ma@kUaVU@aUK@mImJUIkVUVUakbWwka@UWKkLUamKUXm`Å_UULmaU@@lUV@X\"],encodeOffsets:[[114582,28694]]}},{type:\"Feature\",id:\"4302\",properties:{name:\"株洲市\",cp:[113.5327,27.0319],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@XUnwĖKXXVK@VK@wVaUaUIVwl@kUVWUwVKnb@U°a°LX@XnllL@bJVa@VanbVLUV@al@@UV¯ÅÇ@Ummkw@¯yVwnUVVVUkmWVnKVUa@WXkVKn@lUVUVVVXIlV°VnI@VlKnV@mwVm@LXKWkU¥wWw@k@mX@KX¯V@VUVa@VnKWkV@VUkm@aWa@wkUWwkmV£VÿXUVL@mVIXaò@nW@aU@@am@aUUUmXmWUk@nUW@_maVmwUkamaUL@awW@akI@UxUm@kmKUklU@bzVm¯xUVU@XVxm`kÈlxXVW@¦kVUn@xxKUwÅKVXUJWnXmVUxWL¦XmmKbmUUwW@UV@k@VLnlbLm`@¦VVkX@`WIUxVnlbWVbXIVlI@l¦Ç@UKmbkW@UbUVUl@n@VmLXb@JWbUnkbVxUJUxWXXlWL@V@V@XXJWxzUVVVVKnXW`@bkIUlnLVJUbUIWVXlWV@XklVbnn@xl\"],encodeOffsets:[[115774,28587]]}},{type:\"Feature\",id:\"4308\",properties:{name:\"张家界市\",cp:[110.5115,29.328],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@@InWVw°w@@blUKlUlVU@VUUUlW@aöUlUlLÞ@@aVKXwlK@UX@@UlwkVkUm@m@ÅV@akwVaUkUUlUL¯w@UUm@UkKlw±UULVn@l_XyWwÅ@VUUmJUXU@@mmU@kxW@UaUIWbU@@mU@UxnUbmKkWJkUVal@aUkUxlW_@WUIU@bkKWUJVnUbbWblU@nl@XnVmV@nmWV@LXl@XJXVmzkJUXmKULm°Vb@xnVmnUk@VnnlUb@nm¼m@ÛÇVl@Xmnm²mL@xK@LUl@nULÆx@V@VXVWbXXl@nLlm@bVKXWL°bnU@VaVU@mVwJnwVK°zn@VVba@Ċ¼\"],encodeOffsets:[[113288,30471]]}},{type:\"Feature\",id:\"4313\",properties:{name:\"娄底市\",cp:[111.6431,27.7185],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lLnJ@xln@bnlV@JLVUVnVlw@U@VaxVK@abnUmÇnV@km@I@VUVVXVaX@@wlVVUkW@_mKXU°UbVLnaV@V@IUKV@XlVL@w@K@_n@lWlnnJV_XK@l°nU@WVU@kV@nbVKVl@nLlLXU@lmkw@nW@UKVa¯IVn@@aVUUKl@nXVKVn²aXblKnLlmVI@KUU@akLUaVaUXm@a@wVUVKnLnWlXln@@U@anUVm@UInm@IUK@UmKVmU_kVUwm@@VmLK@VLaUaVUUUmK¥ULkVWaXwWa@UXImWUaULUUWKk@WnXbWVWnk@UV@bU@@bJ@bV@XkmbUU`VbkaWz@klU@b@VwUL@bV@U`ULVL@VUK@Xm@XWWIUbUxm@@lkkÇwVÛÇW@¯ÅUJ@xIx@@VULmKUnUxmKULUUm@@ULUJkIWJ@b@LJUWkJWnUV@nnÜ_nJxU@VbnUxlkb@l@\"],encodeOffsets:[[113682,28699]]}},{type:\"Feature\",id:\"4303\",properties:{name:\"湘潭市\",cp:[112.5439,27.7075],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@Æ`n_VWnLVblKXL@VlbXxlaVbUVlUVJnInJ@VL@bUVVb@lnbn@lLVank@W@UlIVan@VanK@kVwlW@aX@Vn@bUJVna@KIX@@VV@nVÈl@VJn@VVLK@UVm@UnIVm@UV@@blUUaV@XKV@XW@XxÆ±bVxLUa@UKWk@wmmUalk@WXUWkXUVJVaUImKVklJ@aX_mWULUUVUyXwWI@W@U@UXKWkXWVwU@±_U»ÝKUaLVbkJkWmXk@UVVmIUVJ@UU@UamLmwUVU@mnJ@VUnmV@b@Vm@kkWmXmKULUV@x@bWnVUbVblK@bVV@LUJknmKkLWa±bUmULmWk@VLUV@bm@U°JUbVLX@@mlxkn@WVKkmK@k\"],encodeOffsets:[[114683,28576]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/jiang_su_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3209\",properties:{name:\"盐城市\",cp:[120.2234,33.5577],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@n@°ĀÞ°@¦ULWKkx@bkLWb@lUlVXXJVbnUKmxXV@bm@@XLÞÜ¦XlVnmzVJ@n@²ÞôkÆÞaȰĉwnǉÜóéVÛnĊīČǉĉ@ō@KÞUlU@kklÇÈÑÑlġXɛ@UġaU@U_W@n@kaUL@VW@kKmkUV@bkbWW@bkzma@JWI@KUKUL@U¦`@XUJU@KmXw¯KXkmy@aUIWJXXmV@K¯UU@@bVL@¤VLXbV@@JVXVK@JVn@bkKmakVVXUVVVlI@`U@nzVVb@¤n@@UlKXLVVI@V@nV@V@ÈUx@óVōkÅWó@mU@bk@Ýwk@WbXxm@@J@zV@kVbVnLWVUXWUXUWLU@Wl°z@VkxU@UVWIxWJkbĬnW@@bUl\"],\nencodeOffsets:[[122344,34504]]}},{type:\"Feature\",id:\"3203\",properties:{name:\"徐州市\",cp:[117.5208,34.3268],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@XKVX@WnIVx@K°Lnll@@I°KnVaU°x²mlx@VanU@ak@akmV@@w@Ua@aUwVwUw@w@UK@£kaĉlóIÇVk±@@kUKmVkIkxW@Ua¯UUm@UVI@WVIJV@@Um@UanaU@mI@J@XV@XaVlkXVaUUWLUyVIXmWak@XkJókJUL@KWkk@ULU@WalUIkJmImkVbV@lV°kXUKWKULUmb@VUlVnb@VV@IVKUUmU@ak@@bmV@xklUU@UKmV@nJVbkXKUamLUJ¯UUVmIbVVLl`@LLU`m@kXUVU@VlxUK@xkIWbUKx@VkVVnb¯@@U@xkmbkLÇKb@@XnJ@LmVkl@@XlUVkxakVVb@bVnUbU@@xVUVb@nIĊ`XVVôJ_K@xlU²KlkU@VaVVÈm@kVUVmnamUUaVXIVJ@ç@¥nkVLn@@XVK@VUX@JVUV@UnVJVLUJVLUVlnIbKnU@m°VanI@anVKVLanlKblKÞk@¦@¤@VKnLVKLKVzlWLX@VmV@VbnU°@UalkWXLVUKWkUUW@£Wa\"],encodeOffsets:[[121005,35213]]}},{type:\"Feature\",id:\"3206\",properties:{name:\"南通市\",cp:[121.1023,32.1625],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@VJ@bnzWl°LxnW@LVVI@W_V¥@VKVL@LXJI@nbly@aXXla@aVUnllLX@@UVKlb@@mXV`V@bĢlkČÇÆȘ¯wnĕVĉVÿUƒUĠŦğlXÑVǵ@±ōLʵĖ¯lÇbÝÞ¯xk@Çkķén¯@ğġƴǫ@kVVlUbL@xULÇóLUl¤@nkVV°VLkxVb@laUXUKWĖklVX@¤UUkb\"],encodeOffsets:[[123087,33385]]}},{type:\"Feature\",id:\"3208\",properties:{name:\"淮安市\",cp:[118.927,33.4039],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@nźUôÒɴèl¦nĖVkbmX@xVlVL@xUb@bUJVnUxlKVLÈxmzXV@lW@XVb@bÈVxnbVIXa°LaÆVVaXUlK@aXIÆVlXKVUlIXalK@alwXLVK@¥Ý¯¯ÿ@mVk@aX@mīlaXIwXJVUV@lw@U¯ybUaUġUÅaUKVknaġm@kUm@wÆIV±nLÆwÇnUUk@ƅÝU¯JÝI¯¦Ul@b@@VVL@l@LLÅmL@b@UaVaUWmLUKV¹KLWKX¥WI@mXk@UmaUVUU@VmL@WbkIUWUmVóIkbmm@UbVLUxmJkU@bkJWbnXU`WzKUÞÈlVbLmx@kè@Æ\"],encodeOffsets:[[121062,33975]]}},{type:\"Feature\",id:\"3205\",properties:{name:\"苏州市\",cp:[120.6519,31.3989],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ôèĊVnX°¤²lxƒÈÜ@²x@J@b@X`nIUÆUUV@bl@VVnL@L@xJ@X@blJXnW@@`XbWkV@UbVxXUxkV@LóxVbUVW²VJĸklUǬ@ĢƳĠ°@mƒī°»ÈÇ¥ULUU±a@bU@¯U@KnImUVWUkmXUVU@lIVaUUVWKUbUkWKU¥n£WakJUkULK¯LKkVIn@VaUVUUUkVk@U@amUkJ@UUlwX¥W@@UkVmk@JUakL@kk¯ÝmJUn@nmVXlmbVVkn@UJ@±WUxV¯a¯KōbÅ¼ÇxUxUUlWL\"],encodeOffsets:[[122794,31917]]}},{type:\"Feature\",id:\"3213\",properties:{name:\"宿迁市\",cp:[118.5535,33.7775],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@XbWnUJVzXKVVUbWklUWbU@@W@IJ@nVmbVbn@@V@UIUJ@XUJ@VVn°VVbX@lwlJnUVL@l²@lÈUôJĊklb@¤VL@@xVxUxVx@bVb@@xU@lnmnXmXLVmV@X@lxVnVJôLLXax@b@@KVL@bn@@m@@alLUUVaU¥nIV±I@mXI@aWWXU@LlUXWW_XWmaUwÇ@aaWUX@@kWUynÇwUKkLVwUmVI@aVa@wUKUk@wWnlaUmĕk¥ɳçóÑŹVmmzkVmm@a@Iók@@LWU@`WbXLWlkImJVn@`nXVbXmL@Vn@l@nUVl°Xx°U@LVĠ@z°@¦UV@Xn@VJmV\"],encodeOffsets:[[121005,34560]]}},{type:\"Feature\",id:\"3207\",properties:{name:\"连云港市\",cp:[119.1248,34.552],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@@lzXxmÆV@@¦@l`XnlKXXmKnLlab@xmbm@kL@V@Vl@@VUXJXmb@@°Æ@èÈzlW°XĢJlÈ`lInbWV_@m@UUķnôw°ÆmnaVVÛVmĸ»Ģw±Ý@@mUInyUmWkÛ¥ÝK@Wn@@aWUnwVLmUaWIUWVk@kkJUVWLUkÅWJ@bkLWVUbÅUb¯KWbUJWXX`WXkV@KWVXX@bWJ@nJU²mJV¦UbVVkK@b@@nm@@aUK@L@@awWbKóKUIUmkwW@U@UnWKnmWn@bl@bmVUb@kw±n¯wVUb\"],encodeOffsets:[[121253,35264]]}},{type:\"Feature\",id:\"3210\",properties:{name:\"扬州市\",cp:[119.4653,32.8162],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@VUXblVVVb@xV@kzV@lwVLUbVV@VU@VbUblb@nkĶ°IÞV@ƆVlmVÈÅxmKU²ÅJ@xVn@lĢnmbUlVLÆbĢVVbVaXk@VXKVVWXVWXUmKUaWaU@¥@£XWUUV@@ynam_VWkUVUna@ÆV@mnkWmXkWUW@k@@akkllWUI@UnKl¥I@VVma@a@I@U@a@anK@UmK@ÅVUnJlkI@aVwka@mVIUW@UWL@WÅbmIULkaUWUxkLUKWlXL@VImÅVUmĉLUól¯I±l@ÒUbVbUVVXUJUnVV@lnbl@\"],encodeOffsets:[[121928,33244]]}},{type:\"Feature\",id:\"3201\",properties:{name:\"南京市\",cp:[118.8062,31.9208],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@k@ma@kUUVmVIUWVUUaVa@Ñ²k°Jôk@Wmk¯KmX¯aUakKWU@XULXaV@@mUaVUUl@VmkaUXm@WUUna°IlmVmIUW@Uk@@aV@VVX@VI°»nmU@VKVan@m»UaU@U_@WlIUaaVaUala@¯n@kaUkUUWKU@mwkUUmmL@K@LmUUVKVÅImUJVkVVLèVLVU@WLV@nVÜULVUL@bW@XbWbkJUUVUxVXmVk@WUUkVmIV@nbnVWbJUkUULa@Jma@XkK@VVL@L@JLUVU@V¼nXlbm@kbUKmn@lVb@VXXVUV@b@LVbÆxXbl@@lV@UVV@XVK²VlI`UbVbUlVVn@WXn@@VUV@@KmbVLXÒLkKV@nX@VVUV@bnVllbmnbIWVXU@`lLlknVnmlLlbUmVInK°nUU@l@VU@Vn@@alI`VIXaVaVa\"],encodeOffsets:[[121928,33244]]}},{type:\"Feature\",id:\"3212\",properties:{name:\"泰州市\",cp:[120.0586,32.5525],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@lUU@@y@In@WwXal@Þxl@@anVô@ÆXlŎôU@Vw@ÇUU@@m@UJUUWKkL@Vm@@£aUUmyV@@_kJUUVUUWlUnblL@aUmI@ULUW@IU@WaUK@£UK@aV@°V@LnUWWXIlaVV@£UWlkXĕVLVWb@kUalwUKU¯lU@mk£VôKÈVK@wKVaUkķlUI±ğ¥ÝUŹ¯ôm¦ĸ@XXK@VVXUJ@nlbUx@blJkmIUV@ÆnL@VmL@b@b@V@J@bnbU@UJk¦mL@VVJkXkll@b@@lXXVWlXnml@nÅU@mbUVlVUXn`mb@zU@VVWX@¤¦V@Xb\"],encodeOffsets:[[122592,34015]]}},{type:\"Feature\",id:\"3202\",properties:{name:\"无锡市\",cp:[120.3442,31.5527],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@nLÒlxUVkLam@kVWUULUxVVVbUV@bVLUnnźÞVĠ¦XVUUaôw@KlUVwWUwVa@lUXWa@_X@WmkI@a@WI@w@KmKUUk@@aVUVVÅmJ_@W@a@I±wÛ@ƑÇkw±¯£mWĉUóçK¯VkUWK@XkV¯UWabmUaUUblln@b@xbXWX`@VxUblL@bn@Vb@`m@XbWnn@l¤n@xnVlUVLÆWkV@VbÞJ_nl@nKVU@aUU@mVk°WVLUV¯bVXbXlVn@VmL@xV@bl@nW@X@VVJ@²VJVU\"],encodeOffsets:[[123064,32513]]}},{type:\"Feature\",id:\"3204\",properties:{name:\"常州市\",cp:[119.4543,31.5582],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@LnxUbVVL@xnnWnn@VVXn@yImx°La¥n@VkKVwW@nXVJ@b@UVn@UnUV@Lb@`VLklVÞnÆ@VaXLlÈJmmVUK@aVUUaUUVwVKXVlUn@blKVUkwÑmKUVUI@±UI@U@WmX@k@aU@wnK@UUmWkaWU°aVUUK¯XUl@nVV@bUVmLk@m`ÝIUaU@lÅXUKkVmU@wmk£m@XmWan@@_Uam@@akKVaUw@W_XWa@w@akmm@mL@UJmnUK@@XnJWLkKUb@VxkWLaWVUImVULUK@L@lkLVVVllbm@@°kbVbUbbVbkJ@XV`V@Vbn¼\"],encodeOffsets:[[122097,32389]]}},{type:\"Feature\",id:\"3211\",properties:{name:\"镇江市\",cp:[119.4763,31.9702],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@VĊKnVÆUnJ@UWKXkVLlKVwXVlbVKnJÆaķn¥°óÇIkWKUbÅ@mUÝlkUK@_a@KVUVm@mVU@@aUIW@mXUxLUlm@¦bK¯nwJzm@UW@UmmXmm@wKUUVamwKm@UbUL@Vmn¯¼JUW@UUU@@bl@@VVXJnnUk¯JmbVVXn@VWlbUnk@VVUVb@nU@WbKWV@XVlLVb°bnW°Lnl@X\"],encodeOffsets:[[122097,32997]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/jiang_xi_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3607\",properties:{name:\"赣州市\",cp:[115.2795,25.8124],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@`l@Èbln@KVLl@V@bÈlnKXkVlVL@lJnb¦VKVVnXW@w°@VUmlnUV`UbVUV@xnKVI°KXKVkVL@al@XaLVlULWVVVL@bx@VXVmb@x@VVV@nn¤lb°b°KXXWbX`lbXxz@x`VIVUnKLxWXLVKVbVLVU@wnW°b@nalXmXVJn@U²mKkVlU@@xlnaVmlKn@JVLlnVl@XXÆèVlUX@xVLXVb°W@wnUWmXk@KLVwUmUkUKUw@wVaVK@k@WnkUKWkwlmXL@KVUlLVKXmWUL@aL@malaVk@aaanX@VVUblbJnXaVwn£K@UWmUk@UaWIV@bJW@KmmU@aUUUkmKkVKlUUnKVUlVaV£Å¥WUUK@UkUUw@m@mIkUUWLK¯Uw°¯@wUKUbKm@kkKUL@UUKV¥U@manw@k@U@Wm@@U@WwkmwWaUU@UUmV¯kw@@kmkKkUW@UK@ÅV@XWWkXa@Ul@Va@KVaUUU@aXwla@UkVWaXk@K@lmkUmV@Vmbk@»XI¥VUkVUVU@anKVUKUalU@wX@@a@K@ÝwL@UnÇlUIkJmn@bVVb@VmnkLV¯U@±lIWm@kaUI@aÇU@K@KUIkbWbJUIUyX¯UbU@méUUmUkWKxWIkJm@V¥U_UJUwmVkUU@@knwm@UmkWJkL@n@VW@@U@knm@kUml@xÅx@@XUJlb@VXJVxn@lbV@lULnV@VlnV@bWV@bXL@lVLVbV@blLn@VlK@xln@bX@laLVbnKUVVbKlXVVkxV@nnVUblV@@z°WWkbIkWL@LUJ@bUI@b`@UmI@mkK¯XWmUV¯@UUVUUam@@VULWUJIm`IUJKUkW@UxnWbnnmlXbmIUVmV@Vnb@VLUKWLnÒVVV@VUL@kJUV@bÈ@V°@XVV@l@xUz\"],encodeOffsets:[[116753,26596]]}},{type:\"Feature\",id:\"3608\",properties:{name:\"吉安市\",cp:[114.884,26.9659],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@lxnb@V@bV@ln@nlIn@blVXKnk¼@VUKWL@bL@`UXU`@V¦XLĠ@lJ¦@nV@l°nn@mVXna@nbKn@lIV@VanJ@_lKVVnL@LK@Vn@VbUVanKlLnbnJVbnWVnVVanI@Vb@LbVKVanXVbVJVU@aXLllbôlÆ¼XxVLVK@Xn@xnVVVmb@LnVVKVXV@@mnaVXUVnVK@_UaUmwnKV_anKVL»K@¯ÝU@U@kWlUnlknKVnaUkma@UIUwl»Åw@VwV@nn@ÈXlKVmna@kVw@anm@n_WWk@mUkUK@ImkLUnbkm@wV@klUnLV±m@UInWkWmb@¯amX@xUVUKUaULWKXwKmLUVUJ_@wyWwkaW_XaWW¯L¯akam£@mUU@U@wnaWU@Uw@aUKUXUVKUkKWbk@@bUKUlWL¯LUJmLwU@UVaVU_VkmnUV¯@@xXmWUUUL¥makI@UKUkWlLkmÇ@aUk@UKL@kmÇak@_VlkL@`lbnlLVanLnbmVÆln@kJlbknmKUbÝmmwULUK@bkLWKULUUma@Kk@UV@L@llbVzxUxnl@bVLm@IVJXVlLV`@bn²@J@V@Xmbñ@WbUJ@bm@@LUĬU¦lV@xXb@blnUV\"],encodeOffsets:[[116652,27608]]}},{type:\"Feature\",id:\"3611\",properties:{name:\"上饶市\",cp:[117.8613,28.7292],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@@VI°`nm¤²@bVJUVVXUl@Vmb@xV@XbmVV@lkLmbn`VbnU@VaUnbVllUXVa@w°VW@_VWLnVlbLVbnlKnVK@IUW@_@am@ÑUólK@U@WU@VwU@UI@aUUaX@kwmJV@yX@kan@mkwVmmI@aUU@aUUW@kVkV@@anK»XVWnIVUl`@_W@wlUV@UWKnUbn°InJlUV@VnIbWn@VklL@l@Vn²m@U`kI@bWJnV@°VXnJmXVmx@VVL@bkLmWULUmU@bWXb@llnX@xkxVVnVV@¤nLnVxnJVXX@bn`VIb@blmlLnaV@blWXnlUnbl@KVanUVmm_XK@kWWnaU@UnaWUXaXamUkKmXUWLX¯WakKmnUWwXa@KW_aXWW_@WnIVl@XULnWVknK@ImyUUÆbXKÛ@W@IÆUnVÝlkVK@mUIVwkUVaUm@aVIVyXIaÈwmmk@UnanVUmÅaó»lwW@kkUVmUK@WKLUmWULkamKLk@Wa@wk@UU@U@mbUIWVKUXWmkUmVmU@LkakKw@w@U¯UUn¯l@bmn@xkJWxkL@VkI@mkmJUI@V@b@VVxnbWlkÈkVLbkKmVL@V@²nxWkLUL@xlKVxbXmVnWJ@Þ°@nxUKUw±`UImVmnU@kalm@akwU@UUJmxU@@U@kU@Um@@KnVm@kKmkU@@WUnkLWxkVUwmKmLkUbmKUbV@xUnkJ@n±UxVXUWJ@LUblUnm@W@nknUJUVm@kXllknVbÆKVVb¼V@Ul\"],encodeOffsets:[[119194,29751]]}},{type:\"Feature\",id:\"3604\",properties:{name:\"九江市\",cp:[115.4224,29.3774],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@WUkVUkmaVUb@mVUam_nalK@kUnUWaU@@wna@UVkUWVUUI@a±n£m¯_JU@ĉ¦Ul@UVKmmLlm@ğ¹m`Uk¯@@UVK¯@UUK@amkmKkVVUa@UkUKUaL@VVXUJ@n@WUbnVb¯V@LÅlÝIJÅkÝm@UaWUU@UmUXmmwVUUKWUX±mUam@kWzUaVmÇw@aÅLmKXUWKkL@W¯IwVwlkUJ@Um@ÛÈWKUxWkaUU@KkLVl@UKUX±KUb@nVVUbUVmaUlUL@aUL@@nUlWzX`@V@lx²@Vlb@bVÞ@°nl@UxVL@lUbVV@n²xVUVmnUÞbaJ@IV°xnbl@nbÆ@VwnK@VnXlK°xnUlVXV@Vl@L@lk@W_XK@KkWxUL@JnVx@aX@VVUaIXlmL@bVVX@VbnKa²XVWk°a@UnV¤nbmLmW@XbmJUbVLaÞKL@K@U@aVKlbV@nXlJxV@VnVÈÞKôbźĕČmV@Ċ²xÆIV@Þ¦ĸ¼ÞVlVÞnxln°JkLXWVUVUVwnJVI@yn@lXlaXmWI@w»ma@UmK@akKkXmW@_kaWakKWk@@K@IWkUa\"],encodeOffsets:[[119487,30319]]}},{type:\"Feature\",id:\"3610\",properties:{name:\"抚州市\",cp:[116.4441,27.4933],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@°V°UnÜ@n@lnLlV@bV°LlnLllVzVVXlVV@@L@xX@WlXm@UVL@V@n°kVmVUnKlaXxVbnlU@lVVnaVI@aX@VJ@V@bb@Vb@X@lUL@@VlIVm@wUVanLalVnKnLVxlUXwlKVm@k@Una@mWIXKWUÛVk@a@UVWn@@kl@@WXlW@_Um@UVK@aLnalInWV@@xnI@¥Km@kKmnk@mlI¤laXbVblknV@UKXVlUXa@@Unw@±mU@ak_±a@UJUIVKW_Xa@aWUK@mmUVa@IXa@UWmannlmX¯WKXwVUVw@XUlK@klJXa@kkmm@Uww@¯W¯kw@WmbULaUUU@mVUUWmkUbKmkkK@akU¯¥Ulm@akU@m@KVIVV@KUkUVUkaUWbmIkaVaUU@mWbb@bUlkbb@nK@bKXVWnULkKUV@LWKknlxXVLml@X@lULUb@xVxVLVlVnUxK@LWlXnmV@x¯XaWUUK@wVWUkÅçm`@mn@bUx@lmbUnkLÇWm@mU@Ux@Æxk¼VxVJ@nbVlmbUmLklmkVlX@VV@°Þ\"],encodeOffsets:[[118508,28396]]}},{type:\"Feature\",id:\"3609\",properties:{name:\"宜春市\",cp:[115.0159,28.3228],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@@VlbnK@b@JLlUnx±ĀXxÆWX@l@V@@blJ@nX@xUbVVUbVV@bVmnmJ@bmbm@klUbLmb@lVb@xUX@bVVVbV¤@LVVbXlVwLXÜÇn@@VIlVkUxx°J@XlKXLVWnLÆK@bÈxUnVbylXn@VbnW²XVLVVUnxWnnV@VVVXVbn@ÞÆlIÞJÆk@K°UUamVa@UUU»@wV@VkkUKUVW£U@UmW@@aXkVUnVlKVVUUkVmU@kWaUanUVVamIX¥W@@aUaUVW@_mW@UnIVVn@VbVm@bVL@anKVUkWKUXVIkx@nabVKb@nVJ_V@VwVUVVXUlUUaV@X@VblabnKlkVaXa¯@m@UKVUn@WXkW@@w@KU@UWkUUUykkmKk¯KU@akUmK@k@mmÛ¯V¯U@L¼UKmLbU`mLxVnVb@`LmUVUUWmb@nU@UWULmU@KnaUUmUwmJ¯IUJWIkVkaWVUIUlWaUIUVkKmbUIÒlVUnn@VlLUJ@bUX¯@aWVUKUXKUbm@UwKWa@a@VkUWn@Uak@mbXWJXbm@mLaWVk@wL@WmanU@knwWmkaWLKWUXaU@¥lUVVVbnw¥nKV»@aUk@a@UJ@kmLma@mbUWnm@ULÇº@LXnmxUm@UbkbW@@akLmWk@UXmJmUkV@VUXVlULmKUxkL@lmXnJ@Xl°Vnb@bU@WbKUX@VmKUX\"],encodeOffsets:[[116652,28666]]}},{type:\"Feature\",id:\"3601\",properties:{name:\"南昌市\",cp:[116.0046,28.6633],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@X@m@VIUW@UKVbLlV@VVbUlUnLnl@bVL@V°UL@V°@Vln_Ġºn@knKnLVU@VkĊ¥Vk@U»UaUÅLUalmkklWn@VUVIlm@mXn@VmkVa@KXIVUWVw²@m@U@VK@k@WUa@a@aU@IUW@@bUJmbUU@kkVmUaWwkbmLUVUnlWbUbklmLakbUaW@U@VbkVWVUUUVUx@U`UI@maULamb@lwJWUVXLlUVmL@bUK@aUnUam@UUmJ@VnX@`UXVVb@bX@W¦nJUbUmVVbXb@lVUnVlVUUkLmUUVWl@bX@VnV@X¤VUVLllUU@@x¼VV@V\"],encodeOffsets:[[118249,29700]]}},{type:\"Feature\",id:\"3602\",properties:{name:\"景德镇市\",cp:[117.334,29.3225],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@VVX@VbmzxUlU@mbmL@V²xVbUVVblbX@VkVykValKVI@bn@n`lVWnX@lL@WKnVIVa@¯nK@alIXJVIVWUwn@nUnK@alI@a@anKm_aW@UWmIUwmmK@£UUmUUlwwW@km@kWaXaV@VnVKnXlK@aUK@UnwWUnmIUW@¯mUXI@alJV_n@m±@U@kkKUlm@XamJ@UVUkmI¯JmamVXL@VUkV@xX@`k_UVmJUXW¼mL@bU@UllX@VV@bVV@bnJUnlx@nmb@lW@zUnIlx@WbVV@bVJV@UxV@@X@VkLVôÒn@@b@`VX@J\"],encodeOffsets:[[119903,30409]]}},{type:\"Feature\",id:\"3603\",properties:{name:\"萍乡市\",cp:[113.9282,27.4823],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@VWnL@UVWLXaV@@ama¯Uk@WmInW@klKVwnLVKUkVW@UlUnVnIVWl@nXlK@bX@laVan@VnwWm@KÈ¹VK¯m@kmU@¥kIğ@WKU¥@V_VW@_K@aXKVL@Ul»mWLkU@amkJm@kmU@@a@UmakwU@Xl@VXk`UIW¼kWWX@@lxV¦XlW@Ubn@mUkL@UmJ¯UkUWVUaUlm@UXWlnUJ@LmLUnXll@bUVUUmVUn@¦xlnn@VÆÈU°kbVVxllnL@VnVVUl@VanL\"],encodeOffsets:[[116652,28666]]}},{type:\"Feature\",id:\"3606\",properties:{name:\"鹰潭市\",cp:[117.0813,28.2349],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@@XV@nlL@lUnm@Ln@@VlV@@VV@nwVI@VVlx@bknlbV@nmnUVJ_²VxVLw@m¯@ÝXImnUWaUwkL@wVKlKXmw@±@UKnUlLaKlUlÇXkmaUw@U@a@UUkwUJ@zWJw@WbkVWUL@VmUklUaWakb£kJ@nmlnlL@nL@¦mJ@wU@mXkJmbK@bUL@VVn@`kXW@Xk@@lm@UX@V@blÜUXVWLXJ@nmb@V@l\"],encodeOffsets:[[119599,29025]]}},{type:\"Feature\",id:\"3605\",properties:{name:\"新余市\",cp:[114.95,27.8174],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@m@@WULUKWwÅ»ókakkWK@bUVUIUamWUbULa@KUa@mJUbmUXUmUamImakKmLUbVUam@@UL@KKmUUkL@`mIUb@U@V@bVl@b¼UmL¦mxUaUUVk@¦VWbXVLXKlbXnmx@lmVnb@XKxl@XUbnKn@WaXIWnal@Vb@XmlV@U@bXbLVxn@VaLVWVLXUb°@VW@aVIkK@UmVmkUÑVJnalLVUVJXbVkVJXUlblUXJVI°JnI\"],encodeOffsets:[[118182,28542]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/ji_lin_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"2224\",properties:{name:\"延边朝鲜族自治州\",cp:[129.397,43.2587],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@Wxĵm@ó¤VX@@xÜ¼ƨ²xWxVV@XVbWXllaÞU°Ċ@ô¼LôÝWanV¥Ñnĉ°¥ÅX¥°¯@w°w@»°k£°mÈŹmÈbÆŎ¦K°z@kxl¦UbU¤klVKŤÞȰ@@bV@nVVUlÞ¦lUllVlU°ÑU¯V°wbXxl@V²@nô¼ó°kmVk²ĕw@wVÞÞ@@Ġö»¯@bnb°mÞ¯°V°ÈJmX¥mamUÅUlaU¯@wKkl±n@@wkÝVUUl±¯I¯bal@kLmakb@ġŹé°Þb°ékLmwXaÅb@bVlbVbÒVbUbUUanwakbVUVak¯ULmxV°UxnôŻX@JXklbkbĉabWU@kWUU¯@@klm@@Å@awWXlKkI@WbUaVIUanU@ĕ¯KmUnWUwm@£ċèkUmbUmm@@nkJUalwk@@nmWUan_óaWmnw±KIwl@UmI@an@@mlUÅmV_KUk@U`@_KUmU@U¯mmb¯@kbImV¯LkbKÛ@ÇnɱJóaÝĢkb@xÒÇll@²VÆUVVUÇ°XóxlV¯lV@bV@nx@¤@șŎnxV¼knJnKX°¦UlnVbUbÆVnÞWVX¦llb@l°VJôÒnLVbbX\"],encodeOffsets:[[131086,44798]]}},{type:\"Feature\",id:\"2202\",properties:{name:\"吉林市\",cp:[126.8372,43.6047],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ôlzaÈV°K@mLWlnVxUVÈ@ÝĬUÈnôLa²VmĀkV@ĠĊnU@bV@b@nl°UVnÞaôJ@bV¦mlkbmVXx¯@VxmnbbÈKV@bÈLwĠyônmnbÜ@nnVx@n²KJ@kal@nxÞULź±Vwkw¯LWWUkŎīVww°yVĕ°wÈVlkÛ»@wW@Uô£@nĶXwWaUamKóÑUI¯@kakkW¥XUmÝÅUVaUamVk¥W¯LmIlmU»mwȚō@£kJUÇk@am¯y¯UVwa@wġx¦K¯X°Ċ¯¦U°ċWULÅa±b¯@UkÅWmVkIUlóċ¹`óIlXWXxmbULÝbƧ@x¯bÈl@x¯zaÝ¤@nmVWb²bmn¯J¯Ò@n\"],encodeOffsets:[[128701,44303]]}},{type:\"Feature\",id:\"2208\",properties:{name:\"白城市\",cp:[123.0029,45.2637],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@óǩŁ@WlwUaƑwÛÅÇéĉamKōÇ@IôġVȁÑŹçÝUƧċĉwóóÝ@Ƒ»ğL¯ll²@ƆÅV@¦mÅb@nmlU²VxlUn@VbnWbÇbkÒn@èlnlUÒ°Lx@¼ĉb@ÒUċxÅènLVxÒbÅJ±a@_ÅJÅnVbKlnUÜĊ@UxXVÆnmVJÞ¯VĠwXw°xWLxKV¦ôUwVÝǬóÞÞ¼ÞkVôȘxÞUlVn¦ÞĊa°wb°@bÆwlŤL²`z°@V@@nJVnl@@¥nUmmn@mwnmmUnk@mlwUaLnwn¯°anWakIÇmXwÆamUXUlJXaUUklKUknmÞV@K@VWÞ@VkUwV\"],encodeOffsets:[[127350,46553]]}},{type:\"Feature\",id:\"2207\",properties:{name:\"松原市\",cp:[124.0906,44.7198],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@źèȂÒUóĢ@JŎÈLnĊbÈêÜÆƒxVbkx@XǪłôkÞ`Wb@n°abKnVw°`_X`W¦ĊIkmVakwKx°UÞbU@ll@°¦VWaÞbxÞI@mVI@VkÅUWK¥nLa@@È@°Æ@nU@KÞalkUwVékUWwkUVkkJk¯@»ókV¯ÆÇI@bĉô¯@ķw¯nmmÅL¯wVUÞy@UówÇLkmm@@UóxkkĉmL¯wVwkWWXmLõm@kÅ±V_ô»ÛÆ¯@VaVaĠVlmğwķUóÝƽ£ÇJkbǫaƽLW@nxÝ¤kzy¯XɅm@VôÇX¯Ė¯ºÝnUnLVlUÔmV\"],encodeOffsets:[[126068,45580]]}},{type:\"Feature\",id:\"2201\",properties:{name:\"长春市\",cp:[125.8154,44.2584],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@U°xÆKnn°mĸx°@Ċó@aÈJ°ÅUôl@¼l°IllUlVXxlVUêVxkllnÈUVll@Vx²IÞ¤VUlVnIôlÞlwô_bVaĶLXÅÞÇ@K¯@wÛaçn¥¯WXyW¯XwUmmÛ@manómğzxÇK@aUÇLamanUw°@WwnUalnk¥U@aóIÝbUm¯Vmk@@aU@amVğĉ@lUnÿ±UbóKmVÇÞī@ÇVUUwmXkKn@L¯ÇUbyókōè@bn@lÝX@x¯ô@ÆUV_maXm@aóJWxnX@VVnĖVnUJ@nōÆÇ¼V¼kxLklÝw@xx@zV`ÅbmxU±xUnnmknğUbUUb@Å°Üó¼U`Æ²@lönKnXWlXUx°xnKĊllôw@Vn@lnÈKôx@VÝzV\"],encodeOffsets:[[128262,45940]]}},{type:\"Feature\",id:\"2206\",properties:{name:\"白山市\",cp:[127.2217,42.0941],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@Ul¦kÒÆ°IlÒU¤ôz¼lJUnÆXVl°@²aÆbVKČXV¯°¥¯ĉ°WL¥Ģw@xbUx°V°znb@ÈlVlI@w@mU@akU°kUôwWÈ¯VUVUÅ±U@kÈkÑw@laÞġUÞ£@ƅKnÑĢ¯@WaUaVUVkkw@a¯@¯ÝVXnW@@WkXmK@xkKUb@bW@Uw¯mmb@WKUbmUbUaWbJĉIVW@Il±LkmUbUm@nkKWa¯n@`UbmaĉL@bÆ@W`L@n¯Xb@kb@xL@VkL±mlUIU¥mL@lÅx@_la@UaV@kmmK£LmKUnÅKVbmXVlèĉUUbmlĢÅ¤Il¯bÇ¦l@ô¼Ģ@x°l¤nal@xb\"],encodeOffsets:[[129567,43262]]}},{type:\"Feature\",id:\"2205\",properties:{name:\"通化市\",cp:[125.9583,41.8579],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ÆlXnĠxĢ°lÈ°K°kXm@¦VbkŤJnÝ¤kVÞVVkÈb°y@wkÇ°awƨ@aÞKVnaWwXWkôJ_ČºôVk»óyV£kÑJÅ¯lÑk¥Va@wkbmk£¯@wġó»@kÈ¥°akJÆ£ġnkVaĊVkçWUnUaÆLVmnLKU±@m@a¯UbmV¯m@_KUaÅWó¹@UanmWak@@wmI@y@mkJVa@UaIkJ@n@Um±kkxmIkbÇm@°bXnV@°ÈmlÞ¼¯XVº¯LmkWWXLmVVlkn@@lnWÆVxbmnm¯lÝaVÈè@¼VbÆ°ÞUVJkxIxIV¤ÒXxmn\"],encodeOffsets:[[128273,43330]]}},{type:\"Feature\",id:\"2203\",properties:{name:\"四平市\",cp:[124.541,43.4894],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@Ɇn°WzlyÞ£mwX@ƾKǬblaÈIƾ¤ôÞĸVĠxnmmV²wVnwÆaU_@yw@wÞxlkKlwU»È»ŎÅ@mVIUmmĕUU@mWXwIô@bWnnbU`V@Å°ó@wÞW@km@aŎç@m°Ñ°Inm±aXaUn@mƑU¦@Ç¯aU£aUġ¦ÅÒJōUŻókUÇ@¥¯ak¯mUVak@@aċçÅaUm¦Ý`XbÆ@n`IxĊÞōÞml@Ub@Wl_¯JkÇUÝÆÅb@nllUb¯±a@WĉJġĀ¯Unóm¤xôaVnxôI@xV@bmÆ@lnLmÞ¯ÞxVb¯þ\"],encodeOffsets:[[126293,45124]]}},{type:\"Feature\",id:\"2204\",properties:{name:\"辽源市\",cp:[125.343,42.7643],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@żôŎVIÆÑĢ¥VbV¤°bÈ@V¥ƒÞ£lÇUUUÝlÞ£mţIlUa@¥nlW¯L¯kÇġ¯ğwWmÅk¯UVUbWlXlmnbUx¯xVVknlUbVÇKUb@VnbmlnzUº±bmJUbWÈnèmÒ@X`WL\"],encodeOffsets:[[127879,44168]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/liao_ning_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"2102\",properties:{name:\"大连市\",cp:[122.2229,39.4409],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@IÞmVk@wXWÜbnwlLnU@nLlbXW@awnbl@XLa@Ċ¥@LULnJ@xVnmV@VXXV@VJkn@VÜKXXôJlbxl@IVbnJVLUbnlnVwJVU@XUaUUlwn@°nVKnV°_VJwl@nwlVIXWlIVVnK@IWmkIVaVU@WÈUlmU@UWUalkXġŻ@kI»mmakUmĉUŁV»²ġVĕ@aUU؍IɃ`ȃ@kw@Umwĉ@WķÑIĉÇbÝLkymbIwÇmÛbmbU¯ÜõÈkÆVbŎxnXVÆnǪ¦b¤UxÝnĉÒmĊVÈ¤ÈbÆ¼ĀÆÆÞźbVVbX°²¤\"],encodeOffsets:[[124786,41102]]}},{type:\"Feature\",id:\"2113\",properties:{name:\"朝阳市\",cp:[120.0696,41.4899],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@na@UVI@mÑWkaV¥UI@wl@aÈbm@wVak@@K@k@a@UUmUUalmU@KÇUÅ±¯@±kUKVkUaaU@¥m@@¯k@WLUmkn@mmIkm@amU@wVmkU@Klk@UmaXIWWULaULVbmk@UUmUk±_Uym@mbkImaX¯WWxWKzU@WkJWwkV@Um@UbVVVVXb@VWX@W@Vkb@VnUK±aUUlwXÇWKknU@mmUkLUVVUUVUawbkKmwnIkJ@nmb`kmVkLWwUm@UUUK@UmaUa@UUaWK@mU¯Wkk¯VmUUxVXUVmL¯ymXkWUbmXUKVknWx¯JVnkLl@VVxnxlĀVL²WlXl@bÝVUn@bnlÜaXblIVl@@È¦@VmbXV@@xVVnUn@`°@VnXU@K@VV@VmbnVn@ln@bx°Ub@bLV`ÅnW@@lUnnWVU@Vbkl@Xl`XxVUblkX@°¦VUVVbUlkV@UbVbkLUxmJkX@bbxVKÆlXXbnnala@Uk@UVVklKVUXKVU°KVan@VUnLKVLWVaU_@mmUXa@mwXwVkVWXkk@k@klm@wXKl@U@KVUUUVaUV@alLxUx@b°°VnnVxlIXJmxLUVlV@bnX@VbaVx@XJ@bn@VVXÈl@llX@lUVô°°@ÞVbn@Vk@VW\"],encodeOffsets:[[123919,43262]]}},{type:\"Feature\",id:\"2106\",properties:{name:\"丹东市\",cp:[124.541,40.4242],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@lzXJU@²x@@V@bUVmKUn°n@lnVKnV@n@VlV°WbXn@VzJ@¦@bkbbUl@bkbJ¯zWULWbklVnb¦VJ@K°Ukl@@WbVn°@Vm²UnX`UÜLXmVXlKVbUVVnUbnX@VUL@lUbWx@²kl`n@Vlb@nUVWVLVU@aV@²bl@ÈmxWXVÈUJVl@laWnXKÈkÈ@Va°bÆm@XV°IVV°UnalVUn@UwVU@@VVJI@bl@XK@wWmXUUVbkJVXnJVI@mknwlKXL@`l@VI@UUaVKÞnaVm@aÇ£XWU@aÇUU@mbkKm£@WWL@@Kk@klUbWKUkUU¯UõÛmUUaVUU@WU_W@kVkJ_WKkV@bUL¯¯±mk¯ġğÑ@UmwKUaka@am¥ÝIUWmk@wmţLKʝbȗKWĢklVbX@VVknÇV@XUVUblJXn@J\"],encodeOffsets:[[126372,40967]]}},{type:\"Feature\",id:\"2112\",properties:{name:\"铁岭市\",cp:[124.2773,42.7423],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@XJm@¯mXUlnVbUJU@bV@UJWL@VXLmJVbkXlJXxVL@b@V@n@b@`Vbk@lxknV@VVV@bUL@bV@@bVK@VXLWLXJ@LV@nbWJ@IUVx@LVJUXVxVx@VV@@LXJWL@VU@@L@VnL@bVVmVX@@VVInJmbnLWVnVULVVU@VVmX@@JVzl@nVVKVXÞ@mk_lmUUWV_nJlUÞÑÞVVUVVLUVJ@IVna@@KV@XwWknwnKlalUwaĉÝwJl_@aUaKUUU@WU@WXUÆ@@UVK@n@UnVVblK@bllb@bbW@Xbl@UlnLl°°b¦nKlVnIV@UWU@WXkw@am@nm@aVw@I@KUaVIm±XÑlknJVnVJaX_VaUaVKmwnkmmn@lU@U@mnaXlKUmUIVmklaUK@UlUVUW@UkVma@UUU@JmUU@@bmbKWV¯XUKm@ka@UVKVk@aUKmLkKUUÝUmbXbÇJ@k@WU_@m@klm@UXKVaUI@KWUXaÇWkaWUkWUL±U@lUU@UJI@V¯JmIm@@aU@Uwa@UV@VkIV¯aUkWkb@bVL@@VVVUXW@Ua@@bÝbUVÝ@LmUkVUbVllLUV@LXWbUXm@U`@kxlnnJlbnIllLXlVlUXmVKnV@L\"],encodeOffsets:[[126720,43572]]}},{type:\"Feature\",id:\"2101\",properties:{name:\"沈阳市\",cp:[123.1238,42.1216],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@ȚĊÜ°bLlÞxUbUn±@ÈnVÆL@xnLlUVbxkImJkn@V±LUxkV@bbKVKnzVl@L°@VaxÞUlbôxVV@@V±bn@llXLöXĶnal@nkVJVI@aU@@aVK@aUUUU@lmkwl@Ua@_@a@m@U@aUKWwkIlWUanIWK@UXKVIU@@aVVIUamVknW°n@WI@KUmULWnkVkUWKkkmJkamIkmlw@V_n@VWXaW@KVUkKUkValUnVK@ÞVUÞa@a@VbX@VWUU@U@UK@ala@IkKmUUa@U@VkkWVwU_@KÜUXbl@V¥XUVmXakÅlUUkIm`UIUJW@UIKmkm@UUJImmU@VUXU`mIUbUK@LJUUl@X@UbJkU@nm@Uam@@aUmLKwmWXUK@kUaÇa@JUIUa@aKVUUXmUy_@lmbkLUKWLX`n@bVL@JXLWX@Vnb@Vm@UbnVmL@V@x@LUbVV@V@LUVl@mb¯U@xU@UVVV@X@VVblJ@bnVKUnx@llnL±¤b@k`VXÆK@kV@¼kl@bWIUl@VmLnbm@@JXXmb\"],encodeOffsets:[[125359,43139]]}},{type:\"Feature\",id:\"2104\",properties:{name:\"抚顺市\",cp:[124.585,41.8579],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@XVl°bUlJ@UVU@bVxV@@bn@nJ°I@UJIVV@V@k²VVKlXXVblÈXWbXV@LVJUbWL@Vkn@l@nV`@X@lÈIWanaÞVVVlLnKVL@bUlUL@Vlbn@VL°WXULna@aV@nV@IVV@VbUnl@VXnKVa@UUnyWkXaaVk@aabnm@_WKXmWanU@alaUl@XJVLVxX@wnKnVlw@V_@a¯¥@UkKWUaUUanK@IaU@WUaVw@klUVyUUVUUÇ@Iôba@mnUma@kXa@UWak@Wal@a@WULmU@U`mIUU`mUk@@UUK±nkJbUam@kwm@@a@UU@Ua@@K@VK@kmKU_UKUUaĉWmkkL@`LnmlkLkbmK@k@Ulmb@b@xUVIUlmVXXxm@JUUk@WUk@akx±@¯x¯UmbKUUVmUU¯UmVVnWkÆlWbUnWVU¦k@WaÛV@LV`UxXllU@@VVbnVlL@J\"],encodeOffsets:[[126754,42992]]}},{type:\"Feature\",id:\"2114\",properties:{name:\"葫芦岛市\",cp:[120.1575,40.578],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ll°XnV@XLVb@VVbnb@VLVV@VVnXxlKnUl_na@mlImJnxlLaxVbUVVUVUKVlnnV@lmXLÈWkxVV²bVLm@Ula@UX@XW@UWaUUUUVan@V@lUXxlIXV@yXLwXXW°nblJnan@Vz`l²nVVVl@nUaVKbVKnXVaUaVUynXK@kVK@X@m@mLXaLWU¯w@a@UVw¥°ó¯¯y¯UÇ¯»w¯Im¯ÇUUl¯»ţKċÑţķm¯w@mU_ómk¼VnU`±IkbVlnnU¼±Lk`@XWl¦UbmVUxkXVlkbllUVb@bkVmx@XVV@Jb±aULkKWXkWmX¯aUJmIkVm@xU@n\"],encodeOffsets:[[122097,41575]]}},{type:\"Feature\",id:\"2109\",properties:{name:\"阜新市\",cp:[122.0032,42.2699],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@Xnb°lVlnXVJLlVnl@zÆxnK@bblKVLn@@VaVLVK@L@Vl@XVVInVVKVwlUXwlKLVVb@aV@XlUXbVW@nlWnXKV@@V@XUVVLUVV@@bVVV@@ln@VbVUXVIxVanJ@UIVWL@UV@@¤V@nInwWklnIVxlnzUVÇJ¦VVÜLĸUnW@aV_WĊXXaKnkl@nmLa@alUVw²K@UlmnIlJwaVUkmK@wÅKmU@Ç²VmVaÝwkKaÛ¯șĉķ¥ğ¥@kUWkƏīÝ@@akUK@KWIUm¯nU¯JmwUVmIkJÇLm@UImJUU@aW@U@@nUbJabXVWn@UVmX@V@b@l@L@lUb@xnÇabk@@xVJU¦lbXÒ@nUJ@Vmb\"],encodeOffsets:[[123919,43262]]}},{type:\"Feature\",id:\"2107\",properties:{name:\"锦州市\",cp:[121.6626,41.4294],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@nJ@nlmVnXKl@@°n@@¦VbVbUlVL²l°@Æ²ÈV@LVknVbVVnnWVU@XmWUabIVa@mV@X@@bVVnIVJ@nÈKlInJVUnx°IV°mVnXJ@LLlV@b@ÞƐĬXllV@Ġ¦ĸ¦naWW@In@manK@UVkXJ@alk@»lU@ÅLUWl_@a²£Kkm@kwVmULm@akIUa@U@WUUVUaÝ@ğwkmĉ£UW@@bÇL@ma@_mKlXUwKLţÓ@UWw@K@UI@mU@UV¥@°UnJ°@@_KUwW@UnaWUmmI@mķwUaÇLóVĵwÝUUW¯¦Ux@Vb@xV°XKWbK@n@nW@UL@lWLmzUVVbUbmWXXWJbn@Vkl@LlVUn@xnV@bln\"],encodeOffsets:[[123694,42391]]}},{type:\"Feature\",id:\"2103\",properties:{name:\"鞍山市\",cp:[123.0798,40.6055],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@lxĠÞ@bV@@w°Vna@UkV@K@UUUVa@K@w@UnKmUVan@@Uma@UXWWK@IUK@amW_XKVLlKna@kmKVak@VU@VmU@anIÆan@aUVnb@blLV`ÞLlUbnaKn@naVU@¥°IVK@anUUKVaUVak@mJkXUVwkVUUa°U@W@WlkXWlIXUlJlaxIVVXLll@nLV@lLXlKĊz¥maUlkXaVKX°yIla@aVkala@a@¥IUy@WmXa¯kU@U@mmUULkmm@¯VmnLVU@a@U@±w@VWIkymLUUkJWXJkUmxk@xUI¯`mUULm¯m@kxVVbWV@UVIUx@bkVVVxUbVV@V@zJVXUlnk@@lkLlLUU±Jkm@UIUVLUVU@K@UnnV@l@LlaUJ@zn`@nWlIUVUUUV±Ln@nmL@VUVkLVlUxVLVlÅXma@@akLmWUX@JUnVJVkXJ@X@`WXVUVUIlbW@bVUVL@`Un@¦U`@bUV@z@Jm@@XV`LUL¯J@IVKmKÅI@JnWVnLnVxV¤z@bmV@VUV@bUL\"],encodeOffsets:[[125123,42447]]}},{type:\"Feature\",id:\"2105\",properties:{name:\"本溪市\",cp:[124.1455,41.1987],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@lb@VnlnVVUb@VJ@nnJ@bmXUx@xVbkbkWLUxnl@Ul@xWx@nUV@¼UllknkK@bmbnlLVJX@VIVJn_lJVVXUmnU°VVVUnVVLna°V°w²@lwbl@XVl@VVIn@wWWnUVkJVUw@@anaVk@@lnLlalKnkmK@_lKnlĊXVbVVLV`nL@lUL@@L@VbV@@V@bn@lxn@VbalI²mVL@Vl@nV_VVnJV_@nVKV@X@bkXbl@XblylUUk@Xa@UVIlK@UUWVULlm@UUUnKWU@K@UXmXVa@U°KVUUWUk@aUVKkaWkKUknaWa@U@m@mk@aUJk@@_WKkLmxl@nUJmIUWlIUaVWVXn@xWLk@@aJUI@U@UVVxm@UVkmb¯VUU¯JWU@Ån¯aUbÇ@ÇlLmWXkbk@UIÇVUXWwÇnk@±aU@@bUVUKUXmV@kaUm@k_±l@XwVa@kVK@UWmVaUmVUUakLUWWnÛKVW_m±VnU¯@Uma@Xk@l¯V\"],encodeOffsets:[[126552,41839]]}},{type:\"Feature\",id:\"2108\",properties:{name:\"营口市\",cp:[122.4316,40.4297],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ĊĖÆn¤°Ċ¯ŎWô@xXbwnKl@nX@VUVKmL@VU@UxÝ@VlbxU@VUb@bk`IUlVUnV@@UV@@JnXlK@b@nbÆWUkUKVwUklKVU@UnK@mm²KVUVVVUJXk@mm_@yVIbk@K@kmUm@VLV@VUKVUVJn@l²IVVKklK@kl@kmVUWI@y@UUUVawUUUl@akmmVaUKmIUaJk@wkaóIWWÛL@UlmUIU@WW@UnUUm@wmIVK@Kĉ¦@bWKk@max@bWXkamK@mVkKmxÛaWX@xUlÝnJ\"],encodeOffsets:[[124786,41102]]}},{type:\"Feature\",id:\"2110\",properties:{name:\"辽阳市\",cp:[123.4094,41.1383],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@`VzWnVUVL@bVbVJ@IÈbVb@lVLXWnxLnKVb@n@Vbn@mV@lIVa@@WkVVI@KVLVanJV_VWUV@nnJVIVn@na@alLlmkVk@»VU@mXwwk@@VmkVwXKllaUa@wVwnW@amI@mUI@VaUUkmm@UkaL@UIĉyLWkkKU@mKk@kWKUUJwkbkIWVkJWXkl@X@X¯VVbUVlUxVWlnI@lUbVUbVLmV@bUL¯J@¦UVmbm@LmbakVÝKU_kK@amaVUbm@ÅbmJ@bVUn@UVl@UbnL\"],encodeOffsets:[[125562,42194]]}},{type:\"Feature\",id:\"2111\",properties:{name:\"盘锦市\",cp:[121.9482,41.0449],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@Vbĸx@nnJVnXmb@VXVxL@`¯@mI¯V@U¦@VV@nJ@V@LXx@VŤÔKLVxWknL@`b@nÈK@a@VXĊ¤nVK@aVU@UnU@ayU£UwmmKXUm@IÆJnLUL@J°IVKKU_@Wn@@I@yVU@aV_@¥Vm@_UKUV@aXkaVJVUUXW@_@WWIUlUIVm@IVW@IU@@VU@mUVVkJ_l@aVa@UVwka@UÞVwV@@UnKLVU@UmWk@mLxWa@wóUVUIÇÆĉ¦¯¦¯xʟJ\"],encodeOffsets:[[124392,41822]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/nei_meng_gu_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"1507\",properties:{name:\"呼伦贝尔市\",cp:[120.8057,50.2185],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@m@Łkklô@£kJ°ýɅķÑó¤ğLĉÅlÇğŁW¯¯ƥóÿlwkţÈéÝƛó°ÞÅxV¤ĉĖWƒ¯lȭţυ̃ɱÿķƅˋğɱřÝţϙȍƧĊţ@¯kWKUKm¹Å@ķJU@ƧÑƧō¥˹Ɔ@L@ÞVLn@VōČWJX¦@JŻbU@ţÞmVU@ȁýóbkWWLÅ¯UWġkmó±UŹôV¼ƽ¼ł̥ĖƽǬʉxĉŻȗKΕ̛ʵƨʟÞ˹»Ƨţ»Ǖō˷Ȍ±ȚʊĠUɾɜɨmÜ֞߼˸ƅȂ¯ǖKˢğÈÒǔnƾŎŐ@Ċbôô̐¼ƒ@ĊôĊÞĀxĖƧL±U°U°ĬƒČ°ÜêɴȂVł°@nxŎèbÈÞȌ΀Ǹl²IlxĊl²ÒmôĖÈlĵºmÈêVþxɛČʉÇĵVmÒÈɆôƐŰǀĊ°ÆǬĮƾbyĊ@ĠƒXǀċm»ôw°Ûk¥Çm¯çkkÇǫţǕéX_ĶWǖīŎaÆĵĸĊ@ȚȘĊLĢĉVÆĉʊÇĕóaU¥ĉ°mkÅ°ġUĠřk°mÑČÿÛƒWĸ£ʠÆxÈÞŎÞ»ʈ²ĊÇČalÒ°Ť±ĸzĊKÈ²m¤Ŏ@Ò°¼nyȂUźīǖƳÈē°@ÝĶ@Èkl¥ÇçkxkJXÇUÅ@£k»óƿīÛ@lÅJl¥óý@¯ƽġÆÅanċ°é¯¹\"],encodeOffsets:[[128194,51014]]}},{type:\"Feature\",id:\"1529\",properties:{name:\"阿拉善盟\",cp:[102.019,40.1001],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@ƏnǟƨʫŹɆÿ°¯ÆV²ˢżÿ@ÝÆŁȰ¯ȀƳĉó@ğky¹@īwl£Ź¯Ŧé@ÇÇxŋĉƩUUŃōLÇĵóÝnóç@ó@ġƱ¥çWUçÆō@éçťKçȭVһƽ̻aW¥ȁ£ʵǊǓƲɳÞǔlżÞmĠóĬȂɲȮ@ÈĢŮźÔnĶŻǠŎȭгŃċóȭţΗÆƑÞƧÅΫóȘǫɱȁġlÛkÇ°ȁÈnõl¯ôÞɛÝkĢóWĊzÇɼʝ@ÇÈķlUČÅÜķnέƒǓKȮŎŎb°ĢǀŌ@ȼôĬmĠğŰōĖƧbЇƧōx@ķó£Ål±ĀƧīXÝġÆêĉK°Ýʇƅ@ΌʉżÅÒϱʈ@˺ƾ֛।࡬ţશóЈèʞU¤Ґ_޸Ƒʠɽ̦ÝɜL׈ɛϜóȂJϚÈ@ǟͪaÞ»Ȯź\"],encodeOffsets:[[107764,42750]]}},{type:\"Feature\",id:\"1525\",properties:{name:\"锡林郭勒盟\",cp:[115.6421,44.176],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@ʶĬĊIȘƨƨ@ĬÛĢșŤĉĬĀóUÈŚÜènŦƐȤȄłϰUƨťƾÑ܆ğɲƜǔÈèʈƲĊƞƒɆ¯̼V˺Ò˺ȂŤVĢêUÜxĀˌ˘ƨÆ°ѢmÞżU¼ÆlŎ@ĊçŎnÈÒͪŎźĸU°lżwUb°°°V£ÞlĠĉĊLÞɆnźÞn¦ĊaȂīġŃ¯Iĉůl»kÇý¥Ŏ¯én£ġÑÝȭxÇ@Åçķ»óƱŎ¥çWÿmlóa£ÇbyVÅČÇV»ÝU¯KĉýǕċţnġ¯»ÇōUm»ğÑwƏbċÇÅċwˋÈÛÿʉÑ°Łkw@óÇ»ĉw¥VÑŹUmW»ğğǉVÿŤÅźī@ř¯ğnõƐ@ÞÅnŁVǉóJwĊÑkĕÝw¯nk¥ŏaó¦ĉV¦Å`ğÑÑÝ@mwn¯m±@óƒÛKˍƏǓ±UÝa¯lōșkèĬÞn@ŤġŰk°ċx@ĉ`Ƨĕ°@ţÒĉwmĉ@na¥ķnÞĉVóÆókĉķ@ÝkƧƧÛa°Ç@ÝÈUóbÝ¼@ÛÒV°@V¼ˋLÞɅŤŹǠVÞȗŤÇĖÅōbȁƜ\"],encodeOffsets:[[113817,44421]]}},{type:\"Feature\",id:\"1506\",properties:{name:\"鄂尔多斯市\",cp:[108.9734,39.2487],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ĶL²ĬVłƑkkl@ȎŘWńÈĬȗ¯ºlz@ĠĊôŦôÒĠ°kÞÜn@¤UĸèĸbŌÈXĸLlÒĢxɲÆ¤ÈÛƾJÈÝ°UÅĶ»²VW¯ĸJôbkV@ôlbnĊyÈzVôab@ĸÞUl°yǬ²Ǭm°k±lbn°@È»JXVŎÑÆJ@kLÆl²Ġ²ʊůĊġřóƛÞÅ@mmLUÿóĉƧ@»L@`ČĸmȗÑţů±ĉğl¯ĀwÇçƧŤÛI@±ÜĉǓçō°UwôǫůķƳÅ±bÅ£ÓÇwnÑó@ȁƽ@ÇƧĢón»ŏĕóĊ¯bÅVȯÅImōKULǓ±ÝxċŋV±Āȗ°Źl±Û@WÒȁŚŹНŚÅèŌô¼°ȰɞȂVĊ\"],encodeOffsets:[[109542,39983]]}},{type:\"Feature\",id:\"1504\",properties:{name:\"赤峰市\",cp:[118.6743,43.2642],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@ɲŁĢǉĊwƾōÞĭ°_ŎŃźȹƒUČÿl»¯ôķVÿǬƽɅġÅÑǫ»̐ʟȣU¯wVWÝÈġW»Þ¹mÝƒɛŎÿŎōͩůV¹ōéċóŹÅVVĢǩʈ@Ėċ@ķÛV°¯xÇÅţ¥»°Ûôĉʟ¥WýČ¥wç»±mnÅķ¥ˋVbUÒġ»ÅxğLƧbWĖÅx¦U°ÝVóŰlô²@¥ÜÞÛôV@²±`¦¯Ý@ÅVÒō¼ô¤V²ŹĬÇĊƑţxç¯Lk»ʟlƽýmłÝÆƏ@mö°Ġ@ŚŹĬţÆUĀĠǊĠX¼nźVUÒ¦ĊxÈ¼@ôlx¯łʊÒÜĀˌÇČxÆČÈƐaxÒĠn¼ŎVÈ¼Ģ°ŤmǖČĊþLV°ÞU¼ċÈUÆzÈa¤ôbknXĀè\"],encodeOffsets:[[122232,46328]]}},{type:\"Feature\",id:\"1508\",properties:{name:\"巴彦淖尔市\",cp:[107.5562,41.3196],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@²@Ζǀݴʶհĸƒ¦Ķ̒Uˌ¼ӾÇƾ¼̨UÞĉƧéÝ»ĕĉƐȍōǪakóó¯a@ôţaV¯Þ¯°@²él¥ĵğťwōxó¯k±Vó@aóbUÇyĉzmkaóU@laóķIX°±Uĵ¼Æ¯VÇÞƽIÇÜÅ£ɱġwkÑķKWŋÇķaķçV@£mÛlÝğ¯Ñťóǿƴȯ°Åł@ÞŻĀˡ±ÅU¯°ɅĀźƧʬmǠƐ\"],encodeOffsets:[[107764,42750]]}},{type:\"Feature\",id:\"1505\",properties:{name:\"通辽市\",cp:[121.4758,43.9673],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ôƲĸ¼Æè@ÈȮwƾ»ʠĢ¥VÆ@²¥@»ŎÑ¯ĊJŤ£k»ÆÇX¯̼ōī°aX£ôƾȁź¥aôŤĢL°ĸ@Ȯ¼ÈÒʈŚôVXůÆaĠƛÈKķĉôÿ@ğÈĉ»ÇVnĉVwXĠÝ°ČÿĸwV¯¯ǵ±ĉǫÅÅm»²Ż±ƽIm¥ţÈķ@¯ƧJV»ÞUÝç¯UġºU£ţóaÅÅlƧī¯K¯ÞÝğL̑ȍƽ@ōŎōĀƑɜnÞÝºX¼ÇĢÞUX°xVʠȤ̏Ǭ¼ÆÒɆĢǫƾUĀóĸ°k¼ċĀƑVŹȺōń¯`ÝĮƽŎĉxġǊɱłō¦\"],encodeOffsets:[[122097,46379]]}},{type:\"Feature\",id:\"1509\",properties:{name:\"乌兰察布市\",cp:[112.5769,41.77],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@ʠǠÞĸɲȺƒÒȂƛŎaÆÈĕȘţUÝźǟɆţÝˌKU»@U¯ÜÑ@Þ»ôaVÞÇÈ@¯ÜbƨƨÞlĸ@ĊôlôÅĊUÝĸm¦bmĊ@nĊxŤÑ@¯ƨĖĊ_@Čwl¯ȭLÝ»ƽ¯ķůǓ@ÇǓbċÅÅÆwÿĠÇU£óa¥¯aŎğĠţkw°»¯ůlÝĵkÇ»Ý°ɱƧǫaóôɱ»Çk¯ŃóʇŐŻĉǊŻĢ¯ÒÈUl°x°nÒĬónĊğ°ÇŚĉ¦ʵV°°ĬÛżÇJȁńʇʹó˂ƽŎÆţ¦\"],encodeOffsets:[[112984,43763]]}},{type:\"Feature\",id:\"1522\",properties:{name:\"兴安盟\",cp:[121.3879,46.1426],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ÆXnlŎ°@LVLĠþxĊUȮĊnUĠV@żaW¯XIŎġ¥Ý@K@w@K@I˺ŻŎ¦ƨƨÒŎIÆ@X@VºnX°lŎ@ƾĉˤƒȘǷȘÑÝÝÞbVţĸÿŤxÈĖƐêÇKnĸ¥ô@ķÞUnÒl@UÅaīˋ¯ÑƧx@±kXřƐƏÛéVˋ»lō¯ĉÅÇÓǫÞĖġV@ğ»°ĵÇÞǓ¼¯mÛÅŃĉĠÇƾb²çéż¯VğÞml»ōÑVç»V¯¯ĕÆU¯y°k¯¯V»ôÇÑ°a@ŹkġKţóbŹ¦ƽȂóW¤¯bĬ̻ŎW°ÅÈl¼ţ¤ĉI°ōÒ@¼±¦Å@Uġ¦ʟƽ¼ÞĢÒm¤êō°¦Èþlk¼ĊŰ°JĢńȁĬ°żnÇbVÝ¼@¼óĸţ¤@°Ånl\"],encodeOffsets:[[122412,48482]]}},{type:\"Feature\",id:\"1502\",properties:{name:\"包头市\",cp:[110.3467,41.4899],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@źxżĀǔÆǬVȘĀŤ¥ÅƾōôˁʈͳȂŃÈIÜŻ¯ī¯ōm¯ɱĖ¯ķÒÝIÝ»ÅVlÅôÑġğVmÞnnWçkWÜXƝÆwU»Șĕ£ĉÑğ±±ÅkK@lÅIōÒUWIÇ¼¯@mka²l¯ǫnǫ±¯zkÝVķUôl²ô°ŎwŦxĶĠk¦±ê¯@Ý°U°bóŤ@°bôlôǩbŎƏȎĊĖÞ¼êƨÝĊ\"],encodeOffsets:[[112017,43465]]}},{type:\"Feature\",id:\"1501\",\nproperties:{name:\"呼和浩特市\",cp:[111.4124,40.4901],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ʶUĊ¥ÈřĠ¯ĉômīÑ¯mwk¯ÇV°ÑżġĊǉǓɱţǓƝóX¯ɛÒóa@nÝÆôƜŚĉĢʉŰĊÒ¤ȗĖV¼ÅxWƞÛlXXèmÝmUnĠĢóÒkÆÆUÞ¼ÞJĸÑ°ɲĕ°Ŏn\"],encodeOffsets:[[114098,42312]]}},{type:\"Feature\",id:\"1503\",properties:{name:\"乌海市\",cp:[106.886,39.4739],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@Ș°ÇīXŃŗ@ȍlkƒlUŁ±īĵKō¼VÇôXĸ¯@ťê°źk¤x@Ĭ\"],encodeOffsets:[[109317,40799]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/ning_xia_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"6403\",properties:{name:\"吴忠市\",cp:[106.853,37.3755],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@nLV@VLaÞbn@@l@bUVlUVzVx¤kÞVèXn@nm°a@UÑ@VXnV@VaUVKUUU@@U@@KVa@U²@wXkWnk±lLnU@UmmVKnIVWnI@UK@UK@@UVKXkmWLWUXmlkVwUyVa@ww@aVIK@aVÈwKlLVV@LnVVVnUÜ²°WÈIUÆ@nÞ¼@¦@UÞUVW@UxUxVnbKb¯ÞU`VbǬV@XXÆVVl°InmnUô°¯anam£WVXKXmkôaVU@Vak@@wman@K@UÛUWKXUÇ@UIb@alW@akLUKV@@Ukw±InL@kmwkWmk@JUIůVmnnU@m@UKVKlkUwknVUKmbkI±KkmVkKb@U@aVkUmn`kIlaUK@UUKmbUIÝUa@mUa@am@UUULUK@bmKkbWI@WXwlkXWa@k@kKLVkkK@L@JUVmzUKlwUUnW£XVlKUwVU@aXI@aWaUw@W@_nam@¯UkWVkUWaU@nwmJkUVkWVUmUkJ@ImbUa@@WÅ_mJknmak@@mXaUV@xU@@VUnkV@Vn@`ULUbWLXVW@kbUJ@XW`@nÅĖWJ@m°@xxbnUaw²lÞ°xŤIVVULÛWbbkVVXÆ`UbVL@kx°LlV@VWbJn@bl¤ULV°@lmL@£U@@aUwmKULVxUVVx@@kU@mK¯LÇa¯@\"],encodeOffsets:[[108124,38605]]}},{type:\"Feature\",id:\"6405\",properties:{name:\"中卫市\",cp:[105.4028,36.9525],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@°@Èb°KnL@lV@@UwVUUwVKnLVx@bV@¤@nK@k¯UVKk£@amIXa@UkU¯Klw@UKVaÅ_UWlUaXaÜVKUUţJ¯wÝ±kxVbmaw@wn¯@XIÆĕm@X_@WVIlaX@WUXKVaVK@_Um@lUVm@U@Vw@VUÛwm@@W@ImKUkU@UaaX@wWaUKkw@UVaUamLUnk@»±`¯@kW@UaykbI@VWJkLWUkJwU@n¤mL¯wm@Um²XVWbnV@bmxVkxUblLUV@kVWKU¼kU@mn@JnV@bUnmJUn@k@XlxLVVnKlLVV@@LkKULVbk`WL@lkXW@kV@UÞUlÇXlkaUbmV¯@@L@V@bkb@xlWbbW@±@UJ@IU@mVkVxV@@lIlln@Vm@VUbl@JLmKÛXmVkUKULU`@LĉwKUXlVUl@VbJX¦̼bÞxŎxɜĖĠŎaô@\"],encodeOffsets:[[108124,38605]]}},{type:\"Feature\",id:\"6404\",properties:{name:\"固原市\",cp:[106.1389,35.9363],childNum:6},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Vnn@°xnK£mV@xlIXVlKXI@UJlazVbX@l°@²_@¼mlVnKVbUb@VlxVLXb@xWbVbV@VlnL@J@Xn@ÜxbW@nl@nblmnIÆ`@X@Vbna@aVUUWVk@kbWakbU@VwW@_l@nmn@@alVlk@UkmVak@@aUXaL@¯@KVa@axWI@KnkVaVJn_lJ@X@m@nVanUVb@mXLlJVWnLlaVVaVX@KXVVkVKlknKVa@aVU@KXb@klJUknUm@K@_UW@alIUamaU¯kJma@IUK@U@@UW@@aXLVVJVaXIKlaUkUV@ambUUJkIWJ@wUIV@JU@UwV@@Um@nU`@UkUmVUxWUUV@aÅb@aWXkKUUUUaWK@wnm@IVU@aXwm@UmVaUalk@anKUwlUwlkK@wmaUkmmIk@VmkUUbW@UVUnW@kV@xkVmbVnU@UbUV@ak@kkW@kLW¤@nV@VU@W_UVUU`VLUV@IUVõVULU@UUUJ@wmkUJ@WI@l@bkKkbVVbVbUL@UUJ@Vm@@L@xbVVVLVlVwX@Vb@bmUkbk@@JWIUVÅw@Km@UkWKXxWLÅ@UVUnWK@xkVW@KULwWVXVWzXVVKVXkVV@VUbV@UVV@@LXxVL@VbLnKVLVxXVmb@l\"],[\"@@@J@aU@LWK¯UUxVVn@ĠLUW@UbUUUa@KUX\"]],encodeOffsets:[[[108023,37052]],[[108541,36299]]]}},{type:\"Feature\",id:\"6401\",properties:{name:\"银川市\",cp:[106.3586,38.1775],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@UwVK@UVWÞUbwV@knV@@KU_VK@Kn@W_XWlL@Vn@Ċw@Ula@Wanamī@a»ŋó@aÆÅɲÿUaV_°ÝaLaUmVwVwX@VUVÝ@@¥Ý»@mVÅÇJ¯XÛ±VUmUmU@KUUkKLÇxU@bLUJ@bx@xUbVzUxklWnXVKnXWlUL@V@VL@VL@mJUXmJULnn@VmVkK²mlXWlx±@@VUb@L@@VV@VVULVUbU@WmU@Ò@V¯bmn@V@lVnUnVWXVl@¦VVUn@x@XL@¦lXxVb\"],encodeOffsets:[[108563,39803]]}},{type:\"Feature\",id:\"6402\",properties:{name:\"石嘴山市\",cp:[106.4795,39.0015],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@U¯ķó±ÇÛ¯ķmbXb@kb@Vĉxm@@UkKWXX`m@@LULV`@L@mU@lUxaÝVUX@VULxVkLWV@JnVLXVlUV@zlVL@V@bn@lU²WVLlLVbUVxUx@xǀLxôÒkK²VaU@wXa@WÈĉUa@bÈkm@¯\"],encodeOffsets:[[109542,39938]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/qing_hai_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"6328\",properties:{name:\"海西蒙古族藏族自治州\",cp:[94.9768,37.1118],childNum:7},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@V£°@laXô±źwô@UlżaÜnKw@Uaa²LmÈLÆÈxlaUawÞmÜbÞUnJ°akôÑkwÝVğwÇ@ÝkkV¯¥@ò»nŤ¥XImw@mVwa@ÅwmLkaWw¥l»kçó»@WÑĉğ@ĉŃUwóřVómĵ»Ý@VǕ¯kÝĊÅk°ÓUklkU±IÇÞk±@ƽJ@UġIk@W¦VÑșÓÅnťKULn¯X@¯mUÛ@WÅmóKknōbxÝ@U@kw@ÿÇLţÝUkmwklċVÅU¦LkUWlÅÑ@a@ÅÑ±UóġŹ¼ÈĉmŻ@@wkwKl¯Uġ@lÇUÓ¯_Waĉ²Åló¼VbknKÇÅ@ƧĢō°Ý@ğWÅxUUm@ÝXÛWULUè¯@mbUaLbUWġxIUJWza¯by@ōÈóLU`ÇXUlUĉV¯nmÛbǕLklUĉVóaġƏbġKţnkbÝmmnÝWȭÈÝXţWókUÇl¯U¯ġUɅĀ@°¯¯VÆnmJ@ĊķnóJUbÝXUlVkL@lVxnnmb@¤Vz`ÞÞŤ@VnÆJV°bUôJkzlkl@²ó@ÆÇ°kĖÇbÛU@lmbXVkzVɅĀXˢlńĬŹ@éÅ@ĉńÆ°ğbUlɜ_°@xŦkbVbƒKĢŤVŎ°@żÈźlĊôKôb@nôxŦÆ@ôŎL@þÆb@nnWˌbÈxInaŎxlU@Ñ²±ğVUĢƨbɲ@Þ¥ôUUķWVô¯ĊWʶnôaŤˁ@£nmnIôǪK°xUXô@Ŧa°mkXÆÞVŎkĊ°ÞLÈôyVaIlwX°UVwĢÑÜKôw@nV@m°nmnÜɞ£VbmXn°ÜÒ@xx@Vb²UlbkxVnJUnVVĊ°KČm°nxÇnn¤±¦@UXVV@lVbmVVÈVxÒ°IbźaČbVw@VLƾÑ@Ŧô¯ĊkôÑ\"],[\"@@@@nòVaw²bVxxÜaČVô_ĊJIVmLa°@Ŏ¥XlK@klKVbUb@nUĢnaÈ@lmǬ»Ġ¯nmnƨVyÑǖĠ»ɲIn@@ÅĢƳ@¯°ôVKÈbVIÇ¥¯@Ýó@ÑnīWKkk@¥¯ÅaX±VÅw@±Ġ¯@»nWmw@@¯VUUWçKĉa±VkkV¯wx@UJx@bknÇbmÅ@Uw±U¯¦UKm¯I¯ť¼ğĊ@ÇŹÈ¯@Ý»ÇnˡJbÛèÇnÅK¯ġĠŹW¼Ålm@¤n²Ýb@b¯l¯@Å¤W¼nV@x°@Vx@lbUblbX¼WÇ²lU@¼V¦@bÇlVxUbVxÞbVbm¦VV\"]],encodeOffsets:[[[100452,39719]],[[91980,35742]]]}},{type:\"Feature\",id:\"6327\",properties:{name:\"玉树藏族自治州\",cp:[93.5925,33.9368],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ɆÿĢV°°VÈklVôŤXÞWȮÇÞXnmÞnlaŤmĢLƐaĢôbĊUVlkǖKÜan°mĊUVVkÈWV_ôKŎÇ@z°abXyVIJĢwVXaKVbna°@VçVKXÜÞWn@VVÆwXĠÞ@Ŏ¯ƨġÆ@ÈLlmUaô»ÆkĊ±Xb°`ÔVkÈĢ@Vk°Llx@xż@ĊnÇź»ôĢ²VÆÒ@@bÆÒXklVKV¥ÆČUklnxlç¥ċç@±m¥wÅJ@VmÈIléÈa°U¥@kÞVK²ÑW°w²ÑK²ñyÆÝVmw»kkWĉJWUVÅwLmÅ@@mwkn¥VÑ»°°@@»¯LlaJônVUÅ¯U@W¯UmÑ¯¯k@WykU@¯wV¥kVwţk»wWÇĉĶçKÞÇaĉbIlU@kwWXU°w±@UKn£WĉKWxkĕVamwXw@Wmnk@aVkbĉLlImmwUÇWxnÝJn@¥ÆkwaXÜĉ¯ÅV¯¤mkx¯kķÜ²VWôŹVU@V£¥@°wn@m@¯@UbUôķmn@ÆÛ@ÇýVaUÇĊV@Çlğ¯xÝŤlVÈÈVx¤VxkK@@x@kVĖġ¥kIWbXŎx@nxÅUW`_@±UaLUxK¯WbkVlbbmLÛÆWIUwWkwÝV@kIéUbUUkV¯Km¯k@UmÝ¯m¯mLÞĉÛUmġ£UxkKm°Lwk@kVmKVUk@¯a¯ĢmóKUUxImlÅnÇbXèVVU°@@xXnm@¼ğ°@²ÆxU²WÆb°@¦llXLmĬ@ÒÞô°@È¦UJÇaLóU¯@°ġƴ@Æ@mɱJğ¼ǕÒUzƧmnmğ°ǫ¼knÇ@bġmmV@VaUaLkl@kLWō¦¯@bKUnJĉIó`ċUÛbwUw±axbñUm@@babÇÅXmƒÝÅôVbÞblUÞVÞU°VUx@UV@l`¼nL@ĊLW¤kXķWġXUVVVķUbVb@°kVVxÈa@Č¦ĊbaźJU@ÈVl@XkôaWĢÞ@laĸUÆb²mÞLĠÞÑôbÒĊaJVbm¦\"],encodeOffsets:[[93285,37030]]}},{type:\"Feature\",id:\"6326\",properties:{name:\"果洛藏族自治州\",cp:[99.3823,34.0466],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@ÞVŤÈK@ĀlxV@Þ@wŎalmôLnXÆÜ@nV°@°WmVKŦLÆmȚÔÒUX¥l@ĢJV@ƾI@wW°Ån¥kÅÝVwôÈç@lÑĊĕaJnaÆLVw°kny°UnkÆVČĊll¦Vƾ@@nUźÈÇIn°XwÞKô¦VWV£@£°ókċ±Iam¯Va»ČĉV¥°@mk¥l@Ċm@aUmwX@wÆxmĢ_`VnÆbKVw@@nUVğVmVVöIll@@çÛm£UÇw°@VU¯»m¯JōĖÅLa@»ĉĢ±`U_k`ÇçókXlK@akÝÞ£WċkÝkxJÝ¯ÅwxķxmIÅx@k±J@ýŋ¤UkmV°ÅÝxkwmġnÝVU¦ŤlmóXk¤UKç@mVkK@klī£m¯VUbW¯¼ċb¯ĵam¼mVXm@k¤ÇXÇbU¯J¯¯È@bVXVÒ¤V¼kxÝV@lVWxÛ¦W¯mKnlkU@nƑUĉÝ@ÇºÛċUĉ¥UÞÅz±òL±Ò¯xX±ÒLÝU@lV¦¯ÇbkêÇJnU@ÆIxn¦@²Čè¦è\"],encodeOffsets:[[99709,36130]]}},{type:\"Feature\",id:\"6325\",properties:{name:\"海南藏族自治州\",cp:[100.3711,35.9418],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@Vxń@ĊĠĊXÒ°UƾĕÞm°£nb@@LUUWÛº@nlÆǬĠ£ÞV°UXbVȂǵé@kWanm°@xzK°¯ĠVVkwLnm°kÞxÆa¥@wnĉÆ@_l_VwmĸèŤÅČU@Wn@ÑmKUnğK@°¯UÿV£nmLlUUÛé±óókkmnakV@Ç°óÝXWəÞťIţxmmVÛUVȂÓnWyȁĉkV°WnkĊa¥_K°ÿWna@mU¯wlÝIU¤UXó¥ÝLx¯WmJÇÈŹmV@ƽ@Uk¥ĉkċÅUml¯Vmz¯lUxÅKmbIbĉĖkÒ@ÇèóUxÆÞlm¦Æ¯X@x@²ÝlÈJV²klVl¯ÔlĉÆÞ°lUǖÞ@Ķ¼nUôôŚ\"],encodeOffsets:[[101712,37632]]}},{type:\"Feature\",id:\"6322\",properties:{name:\"海北藏族自治州\",cp:[100.3711,37.9138],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ōmġxƽUm±LǿþġÔ@kxmWb¯I¯mIUx@bbŹVÇkĵblĉI¯¥Um@Æ¯È@aóUlČ»@w»wXaó°ţçÝkUaV¥ÅbÝw¯lmnKlxUğU¯°Lyw¯@mnXbl@êȁǶUWa¯VÝUğ¤ǫkÅ@mÜ¹XVV@K@ma¯¤ÝnƽĖ¯V@¼ôlèk¼¦xXlbnKÆx@bUx@nnxWJţ¦m¼ñ@°¦lUÞlÈ@ĠxÞUlxÒól¯bmIÝVÛaÝnxVbkbÇwÅÇKn±Kbb@VxLmÛŻbkVó@Źxó²Wkb@¯U¤źĊ@lUX°lÆôUlLXaV°wxUb°xÜôÈKVkÈmlwkÈKwKVUŤĉŎ»»Il¥na°LV»²¯Üy@wĢ°ĸwlwĢw°±_lVk@°bÆ¯z@l_@Ģ±lÅVlUaÞLVnKlnÈ°IllČawÞÑ°xUU@wVkmĠLô»KÞýôaÞ¥ôĀÞmÆmUŎV¥Èl°²°a²¥V@@wamm@Ñn@Æ£żVĠ£@W¯Þl@»@Uk@\"],encodeOffsets:[[105087,37992]]}},{type:\"Feature\",id:\"6323\",properties:{name:\"黄南藏族自治州\",cp:[101.5686,35.1178],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ôl²ôÜêVVkKmnU¤VĀ¯°@LmĠVnLÈL@alb@al@n°V_XmWUÈamaVIn@naV£óVWU£°axÈ¥@aĊwÈ¹@óağbm@kw@maÆw@In¯mm@UkkWÑÅ@@kċÅçVkÝJÅkVykŹl¥@¯ĢUÜX¥òýmmXÝÅlmU@£WlyXW»Åbl@aI»k@klm@UxUUV¼¯XlaUnķI@x@¯KĉUU`ólČ¯ô@¤ÞJk°xVn@mbX¯ĀL`¦ĉbml¯XUlȂĊXzmȁÔUÜVUnnŤwŦJɚÝXÞW¯ô@ÈlUbmln\"],encodeOffsets:[[103984,36344]]}},{type:\"Feature\",id:\"6321\",properties:{name:\"海东地区\",cp:[102.3706,36.2988],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@@Òb¤ÆI°ôU¼°UnnWx@b¯L@lUUWbXxWlƨnxVUllXVUnL@lȀý²KVnƾĢwV»@mÞ£nÆÞÑmLKUaVżĕWVk²ÆÝ@Xw°@ô@a°wóUUmIkaVmÞwmkny¹VÿƧnÅm£X»naV±Ýw@ab@am¯ĉVó¦kÝWKUU@WanUb@ôÇºĉxb@Ç¦w¯bV¤UXôU¤bmm@UJnbÇbXVWn`¯Umk@@bka@bÇK\"],encodeOffsets:[[104108,37030]]}},{type:\"Feature\",id:\"6301\",properties:{name:\"西宁市\",cp:[101.4038,36.8207],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@@kmKVUWkVkUmwƧXkWwXaVV@k°K@aXwmmV¯V»¯óÅJ£amX@ċVţÆķçnUx`k`@ÅmĊx@¦U¦blVÞŤèô¯Wbx¼@xċ¼kVôbÇ@Å°@nV°¦ĊJkĶalÈźUa@aVwnJ°°JanXlw@ĢÓ\"],encodeOffsets:[[104356,38042]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/shang_hai_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"310230\",properties:{name:\"崇明县\",cp:[121.5637,31.5383],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@uŏu»GPIV±ÐɃŜ{\\\\qJmC[W\\\\t¾ÕjÕpnÃ±Â|ěÔe`² nZzZ~V|B^IpUbU{bs\\\\a\\\\OvQKªsMň£RAhQĤlA`GĂA@ĥWĝO\"],encodeOffsets:[[124908,32105]]}},{type:\"Feature\",id:\"310119\",properties:{name:\"南汇区\",cp:[121.8755,30.954],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@`yĉNǕDwǏ»ÖLxCdJ`HB@LBTD@CPFXANC@@PGBKNECCBB@EBFHEDDDSNKAUNBDMNqf[HcDCCcF@EFGLEBa@ACoCCDDD@LGHD@DJFBBJED@BGAEGGFKIGDBDLBAD@FHBEF@RFDMLE@SGANFFJBANPH@@E@FJjRIACDMDOEKLFD@DbDAJI@AP@BGHFBCBGDCC@DCA@CECGH@FKCEHFJGBFDIHACEDNJDCVFBDCRKRLDLITB@CjNJI^DBCfNVDHDFKHAFGDIICDWBIF@@CFAjFJNJBBHD@CJ@AEFJ@@DH@BFBCPDBMFEQGDIFCNDHIP@HDABFACBJFHEBSZC@DP@@JDBƤ~\"],encodeOffsets:[[124854,31907]]}},{type:\"Feature\",id:\"310120\",properties:{name:\"奉贤区\",cp:[121.5747,30.8475],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@~T~JjZdDbLXDLCB_J@@FHFZJJIAGH@HGR@BENBLID@@LFCDF\\\\FpDBDb@FAHKFE@dEDDdC\\\\GreNMACVMLBTMCCFCEGFAA@DAFDLMHA@OD@BMEWDOC@AS@KGAI_DcKwÕísƝåĆctKbMBQ@EGEBEJ@@MBKL@BJB@FIBGKE@ABG@@FMFCPL@AjCD@ZOFCJIDICIlKJHNGJALH@@FPDCTJDGDBNCn\"],encodeOffsets:[[124274,31722]]}},{type:\"Feature\",id:\"310115\",properties:{name:\"浦东新区\",cp:[121.6928,31.2561],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@EN@JJLNHjLJNR^GRYVBNZJRBV@PDvbLNDN@LGNER@nCNQNuT_TIVFV\\\\Z\\\\XnDrI|[Ʉś²ÏJUHOƣ}CA@IO@@CYDATGFIEDAEBBAGCO@GJMCEDCJRHEFANOCADAEG@@CI@FE@BDIC@AGIAIMiEEB@DE@AJCXJDCJEHGBELGCUCeMAD]CIJiM@DSAKJKCLQDQACUECDMIFCBDJGECHAEIWCK@GLMCCGEACNKCEJG@MMBMC@@CIJUINT@JAJSTEPZZCP\"],encodeOffsets:[[124383,31915]]}},{type:\"Feature\",id:\"310116\",properties:{name:\"金山区\",cp:[121.2657,30.8112],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@L@BIHFN@@EE@@EFBDGDAADVDD@@EF@CA@IIsRE@GDAF@BF@CV@|FBCHBLCNHAFCADBMDCFZXHILBVEEQA@MWFARJJ@DCX@@TEFBLHAAERE@AJABRPBNK\\\\BrJ\\\\VHGND@CNADKDADQjGAGNC@GJ@FCFFHC@JF@@dLBDSFADHVG\\\\DTEPDDHJALIJkJDJCDIPE@YDCBiK@DONE@EH@BAF@HLJA@EIA@ALKNA@@FIFAFHR@NALadsæąyQY@A±DŉXUVI^BF@FFF@HBJEDFFGFEBSRkVEXGHFBMFIVW@GAEEFOIAIPKABGWEKFSCQLQBSEIBC\\\\FdBLRR@JGACFDDEF@AWB@LJJYNABBA@CUEGPaO_AIE@MYMFIGAEFECHSAAKAO\\\\[JEDB@E@MMA@@AGBKMGDFFCDDFEDFJF@NPBAFLHFH@EDDHBADDC@DDCDHHCDDFDABDAD@FEFOBCJ[D@HEDDNJBDDHABJIBBvGLBJAH\"],encodeOffsets:[[123901,31695]]}},{type:\"Feature\",id:\"310118\",properties:{name:\"青浦区\",cp:[121.1751,31.1909],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@RUNKdOFDJCbRFMLAHPLDN@JGL@@APBWYCKN@TU@SHGCEJIDIJKVIZVNM`iNY@CIE@CA@KBOEGEUFCCSADEIEFCDDDIDDHC@CKIeDCG@IG@DHWFEEGCH@@GO@@O]CNpeEQDBFME[JC]DGF@CKOA@QSB@GB@@GW@@ED@AQIJIAAFE@@DO@CFI@KNG@CDACAFEGKGBEGBDCCAIFCCLIECFI@MBCLDHGNAHSF@DMB@EEKBA@@C]DEICFG@ADBHGFKCDAKKHKD@@FHGAANGEEFCHKCECBCKG@ADKCNE\\\\[A[I@@mGBDQQEO@BCE@AI[AML@JGACLOAFKEMM@EQKC@CUCBCCBCHEA@FF@@FM@GEAJK@GNF@EXPH@FD@M^@HIADJCFDBER@DK@@DE@CAKFOCCBDHIBCNSB@GFC@GQEEOWFICGDUAEJIDBTAHJHEB@DIF@NE@H|HBDBEH@DKBAHEF@HEEUB@FGFGCCCE@AHOB@NH@PRLVNNFBX@RCPbAvMtBfH@DJF@ELBFA@EH@HNED@FFB@HLC@CJ@@DJ@PIRf@HE@CFF@GPHD@DKE@FFBEFFD@DEFCA@DD@IjCRFBAHFDKD@HF@@PM@H@BlbDJDBFEF@DLXB@HCD@@IFCBIFEJD@FDC@FBALLF@PAACJERACAJCBD@EL@JD\"],encodeOffsets:[[124061,32028]]}},{type:\"Feature\",id:\"310117\",properties:{name:\"松江区\",cp:[121.1984,31.0268],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@DLDFRN@FNELPBDKHB@INK\\\\BBJF@ADP@RFCRHA@nJ@B\\\\[\\\\MFLDBCH@DLDADFGLEDFFMHBBGH@EC@GLLLCBLDHEAGBCH@DEFJ^C@DB@LAFFA@CNE@GTMBGHKCAD@NEJFDKJDDJEDBCDHAAFLHFHBEBDDCH@LMJ@DEP@@CF@BEJBJIBRC@@FX@@HA@@HTA@RPBDLE@CHD^\\\\INFAERCfFMo^D@PP@@HG@HDFFXECGH@@JDHfCLJ@DGDCCCJCCEDJFCFTBDDVEHFPFLAB@NBFCFKFC@CHIACNOHWHCAAFIDD@CDAGEI@ACFMF@R@R_@GQED@EGFEQEDE_IAHKAEXCQUOQCUDEN@ZI\\\\DDmAMHCICDSOC@EG@BKHIGMIBCGOCSF[CUHCGEBCTKA@cE@@IGDEEEDI@@HMDBHiHCRCBCLMB@DMCGH[UqI[AMLOAAQIB@BQFBFGBAKFE@SW@CDI@QIEBNXB@FRUFKAGJYWDENCCADBBEMGKDGAAD{EU@@DAEE@CB@HQFJt@JDBE@@FC@\"],encodeOffsets:[[123933,31687]]}},{type:\"Feature\",id:\"310114\",properties:{name:\"嘉定区\",cp:[121.2437,31.3625],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@F@LI@IDKJADKIEJICADGACFECCJ@HKCAFOHAJI@aCBEE@ICAEB[GFGCKL@FGEIFADMLCAEJM@ELQECEIG@BE^QKKLQCA@EHBIGQ[GEHOMGGDHKH@JOECFCjCBEFDNCACMBCILGTABDLEEOEIG@GFIMM@CGKFBFCDE@@GEAGEEACIcGaHMFITIHDN[AKF@FS@OA@BK@IHM@KCGOKBENaQIDECcPMLQVFHFB@BFBKLGD@FAJOVGIACQ@A`LPCB@JEF@RU@ANS@@RCL\\\\HIFpRBFRBBDKLLDADJDGBFDABHBEDNF@DGBBBADKDAHC@\\\\JJFBDEH[DEFDH\\\\LX@XLBLbT@DNJLDCEL@VJABJNDHB@HBHYFBAA@GNFB@@AFB@AFABFLFBHFCL@HJBAFBLC@DN@HN\"],encodeOffsets:[[124213,32254]]}},{type:\"Feature\",id:\"310113\",properties:{name:\"宝山区\",cp:[121.4346,31.4051],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@mÖoÖi½[s[YEUJU`SCIEBCCWJY_LIICDWU@@FaBCJIB[ICH[@@CDKEE@MK@@IMCAEBCH@AMFI@SMGEFGB@FK@BHCAIFJNQD@FEBDFMBKGACG@ECWH@@CDDTOEEBGEK@GC@EE@GPHFR\\\\JHGA@FDBKRLL]RAFH@FJFDKR@FINBFKDCNEBFJEHK@DLEH\\\\HFADB@JFFDA@bIJGBEPDBGLI@DDEFBDCHDBIJJFCLIBCL@JKJE@ADHDBHJ@HIBBDFHBBAEIJ@BJFAVL¢\"],encodeOffsets:[[124300,32302]]}},{type:\"Feature\",id:\"310112\",properties:{name:\"闵行区\",cp:[121.4992,31.0838],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@T@@ELE\\\\BCMJGJSNEbGdHDJFBJAFIEIFCEWG@@gMENSFCVJFAxR~B@IH@AIiI@GE@FGEAFQPDRiV[\\\\DFSGMHAXHDOMCJCDETBBNVJJI@DD@ANNNH@FILDDMFBDHNDHKL@XDFGLD@EHGFD@DDB@CDDHCDAEAHG@ABOJ@BIaC@CECLKPFNCDCJBiQEIF@@@OGBMIAEEBMTHF@NKEC@QFEGA@EBCKAACHCLJHEFHHB@AFCAIEACIC@HG@KCCDC[ECEED@KC@KJMAAFQ@GHG@BHIJYIGE@EI@A`KDWCaKcCiY}I}S[CYJM@CFDVPRRVWDFLBBG`JCFRFEFFHC@RF@HQ`Q@E@ENBDJ@HFCB@DCCEJBBGDGXMPBDGJ@DEDELEDMA@DJF@DMZ_jMNYUUJILCJIJDFGH@TSVM@DLXZ\"],encodeOffsets:[[124165,32010]]}},{type:\"Feature\",id:\"310110\",properties:{name:\"杨浦区\",cp:[121.528,31.2966],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@V@CXJDKJZ`XIDDFADJvSRMDM@mFQHM@KCMKMuaOCU@BDAJSX@HKJGD@PNJCJWAGT@R\"],encodeOffsets:[[124402,32064]]}},{type:\"Feature\",id:\"310107\",properties:{name:\"普陀区\",cp:[121.3879,31.2602],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@F@@FHDL@HFFAPFCSDC@@XGFDH@BDLHNACEFA@ERCIMJEDBAGL@@EHAFENHHJ\\\\ONQBQCIBC[MKACKI@GGGH@I_G@CW@[DMHCDIBMTDHN@JNHEH@FJFPKFACSBKHDJNABDMDECAFiDEDFDIPG@GLHCNH\"],encodeOffsets:[[124248,32045]]}},{type:\"Feature\",id:\"310104\",properties:{name:\"徐汇区\",cp:[121.4333,31.1607],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@RADL\\\\NCPHFfLJaJ@FWLGMGIK@IFMDOYYFOTSBI@IMSAMSACFIDNDCPWGGBHNET[CU\\\\QjOCERFBEHF@@HjJBJG@@J\"],encodeOffsets:[[124327,31941]]}},{type:\"Feature\",id:\"310105\",properties:{name:\"长宁区\",cp:[121.3852,31.2115],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@HFFB@HF@DCAELENSJADCNG\\\\CX@@D`H@JHGHHJ@BINBFUGEDO[MCKQB}AwQEBUIEDMTNF@hH@FXEDFJEJIB\"],encodeOffsets:[[124250,31987]]}},{type:\"Feature\",id:\"310108\",properties:{name:\"闸北区\",cp:[121.4511,31.2794],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@CSG@BQGODUPWTOBQAAFMECKBGEMFKEOHADDJARMR[PGI@TEJBNG@ADBFND@JL@@NFFCL@D\\\\@DG\\\\JJADI\"],encodeOffsets:[[124385,32068]]}},{type:\"Feature\",id:\"310109\",properties:{name:\"虹口区\",cp:[121.4882,31.2788],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@bA@E@QHSXBDIMI@OHCLI@GTWBIACQAYIOFGCENBBARSPOXCVHPARH@DT\"],encodeOffsets:[[124385,32068]]}},{type:\"Feature\",id:\"310101\",properties:{name:\"黄浦区\",cp:[121.4868,31.219],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@NEHFLAFDHDPEAMZUHQQ]IMKJG@EPERABHBGRUCCNGV\"],encodeOffsets:[[124379,31992]]}},{type:\"Feature\",id:\"310103\",properties:{name:\"卢湾区\",cp:[121.4758,31.2074],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VDHQGABAFQFOH@LIiKKHEXI@IbAFZB\"],encodeOffsets:[[124385,31974]]}},{type:\"Feature\",id:\"310106\",properties:{name:\"静安区\",cp:[121.4484,31.2286],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@DLLB\\\\NPGLFHUDMYABEeKEVMAAJ\"],encodeOffsets:[[124343,31979]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/shan_dong_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3706\",properties:{name:\"烟台市\",cp:[120.7397,37.5128],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ŤLLllVń²è°xżĢĠÆlÒŤbV¤ĊXnlĢVĊÒÈ°ĊŰÞèL±@џn»VUźċ²»ÆkôVɆkĊŃ²kŤVVwUUVmUa@KkU@mUmmk@UwUkmW@UVIXa@mw@aKULax@Uk@UbWU@yULmK¯@kXVUwm@@JUUknWKUVLUbU@wWykIa@w@mUI@aUVynIWak@@Wbl@@knmK@wnIl°Kna@V¥ğ@ġUķ»¥@UōJX¯¤k@wmI¯k@mwak@@lX@bUJ@VbknWxkLkxlLVlkLmb@bU@bU@VbU`Vb@nL@mbU@VnUVmnU@mm@kIUWVIUKVkkUJUnmL@VmLUaVWaXamU@U@KUUmVUJUVÇwğnm@mXĉV@l¯xnô\"],encodeOffsets:[[122446,38042]]}},{type:\"Feature\",id:\"3713\",properties:{name:\"临沂市\",cp:[118.3118,35.2936],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@bXll@zlV@lXXmkbVVlU@Vn@@Vmb@XKVXWJ@XXl@ÈbVLUl`@XXV@VVUxVbUxVb¦@WnXVJ@bnVUzl@°ÆxUKlU@mUUnUlUVWVUnVV@XX°V@Vll@VkaXVl@Ux@bmbXLlKlb@b@bUJn@@b@n°x°K@an@@UlLVKVbXb@bVVnK°LVa@UVa@XwKVxnLU°@naV@UWUkWULmVwÝKUUla@aó_@mK@aUU@WUkwVm@aVI°W@@IUw@a±¯@¥kUVUm@awkw@K@kVKk@maXalI@alLWXblaVLVUV@LnK@l@waXaLlnUlLmV@n°J@_VmnIVym£UKmI@WnIVm@anUVmÇ_kġIÅWUXÇm@U@Ý¯Å@@naWIVW@IkK@klKn@naWImk@abkKkLWnWkLWmk_@UaVUKmLUw@mn£WwUmUaóV@UkUm@UKULUwmJUX@WW@XÒzVblJXWXk@UVWKX¤UL@xU@@VUaU@@XmVkLmWkXUyÝLmKXnV@n@lx@bWLnVVn`knULmxUlWLXVb@VK@z¯x¯¼WxKUn@bk@lVVVz\"],encodeOffsets:[[120241,36119]]}},{type:\"Feature\",id:\"3707\",properties:{name:\"潍坊市\",cp:[119.0918,36.524],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@l@@UK@@L@bX@@VlL@JLUVnX@`ÜXn`V²mJ@bU@@nb@l°xnnĸVÆ°@Ċ£Þ@lWnÑnkʶJmó°w@kk»V@»¥k@V@kw@wVmaÅmaô£ŎXI@mlnKla@mV_UK@kUkw@alWIU»m@WUIl±UUÅUbkJ@a@wUKUaVIÆmXIWaka@m@Ul£XKVw@UIJUkmJVkU@aWKImV@UxmL@bX`WXU@U`ÇkUak@@°UblXkmLUKmL@VULóVk@@Vlbn@Ub@ċaUJUbIUlVLUVVbVKXVlVXU@mb¯@VmKUwLWx@Ub@VUb¯KmLUU@aWaUaULkK@Vm@@b¯L¯w@ma@m@UUU@U¦lJUXVmkb@nmXVWkbIVxUV@VUbWLXVLW`Ux@nk@Vn@x@VkJ@V`mXk@VxV@lVI@VULVUIV`°bVXXxV@VWVnL@xVUb\"],encodeOffsets:[[121332,37840]]}},{type:\"Feature\",id:\"3702\",properties:{name:\"青岛市\",cp:[120.4651,36.3373],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@@nUJXL@blVUnIVlIVJ@UxWLk¤@V@nlbXbWJÅnUJVbVL@x@blIaÆVVVk²VJ@XnV¼JkX@blxlV@VLU`@nkbLkm@nWJōó¤bnÆbUn@xlxU@l@¦@¼Ul¼ĊUnW@nĠmÈxUVIVnUVV@LV@nVWbXbUVbnK@UnKVmVIllUVLUJVXlJ@nnV@nmVUUm@Vna@K@mUaV_UaV@aV@@aanlKUkKklwlKXwlma@UVI@akW@l@bnxl@°nJxl@°£WŎIUÑn»lamô¹Ŏ¥VaUUkmkġWɱIUUŹ`@kk@ĉƨřV¥_Ç@Ĭ¤ÝL¯m¯£ƽóķwUW±ī¯kōaĉĕkğmó°bW@UKkLUaVmz@V@UxVn\"],encodeOffsets:[[122389,36580]]}},{type:\"Feature\",id:\"3717\",properties:{name:\"菏泽市\",cp:[115.6201,35.2057],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@@¥IVUÈmÞ»@UlU@Un@VW@UVmkk@aVUUKVÝ@UVknK@UV@VVnIV@wnmwmKXaWaXI@UV@Vy²blkVKkamU@kb@Um@VmUkmKmkXKWwkU@Ul@UnK@UVUUmKXwUVLwKU@@Wl@@wUkV¥@@I@W@_V@VWUw@UUa@aaWa@@_mKUwl¯amzmV@WKnU@kWLķaUKbÝVmV@UWÇbÛ@X°UbW@XmVlk²UJUbmLÇxÅWUzl¯Ll@VkKXUbWJ@bU@¯@kbLmKka@l_WXºVbUz@Jn²V@¤lXnV°Ln`WbXLôVlKVUxXnlXLlU@bVV@XJWLUVnVV@@nl°nnVKÈbVXÆJU°VnXVkV@@xVL@Wlb\"],encodeOffsets:[[118654,36726]]}},{type:\"Feature\",id:\"3708\",properties:{name:\"济宁市\",cp:[116.8286,35.3375],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@nam_nKlVLXaIl`_@KVVXI@m@w@@k@Knô@n`VbV@@LL@KVVn@VX@VLJl@VUUU@Uam@UkwKWaXamkJmIUVUÈblaUnV@kVKl@@lXL°kVJ@VÈnVJUX@VLXl@xVLnU@VKV@aIUaV@bĊUxKkVJXUlVUVaI@WUI@KlUnwmWk@WXIWUL@Wna@Um@@UVkUUlanWW@kkU@ykWkaWVUlÝbUU@kJUIU@@JmaókLKÇUUkKWLk@WbkUUabmKn¯°¥V@XwV@VanaVaU_@Wlk@WÈ@VUÈVVÛmaklKÈ¯lLVUX@lK@aX@@kV@VmV@VwnJV_UWUwXam@kW@wVUkKVIUUVmU@UV@IVK@aUL@aV@LmUKmx@ômLkUWJ@nXmlUxUL@VknVUU@VL`Ub±LkV@kUKÇbÛ@UWó_mJ@Wk@@X@VLxUKVWxLVnUV@VmL@Vk@VlVXxWLnlLnVlUnn@@VlaV@nlbULkl±aUzU@@VWJXbWbnLnxm@xUmJUUU@@VmLUl@VUÞVLUV@bllUn@VUXm@@VkV@VÝ¼ÇnUVJ@¦nnlnVlL@Þb°KVV\"],encodeOffsets:[[118834,36844]]}},{type:\"Feature\",id:\"3714\",properties:{name:\"德州市\",cp:[116.6858,37.2107],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@¤@VmbVXnVVbVJX@ll@zlVInl@@bVxUbĠl@ÈblaIxXVWb@L@nULWVXXWWLnL@`@LUVVL@lVnJU@UUkanVôôb°¼VÞXIÜbČabôWXÞWÈzÆmnLVJ°ÈnlV²lbnW@@UUVmnwmkkKWkla@mVIUKUaaUwmnJU@@amIk@@bVlkX@mmUklUUa@_UaUUV@wwWkXmW@I@WUaÝU@UXaWUU@UUVW@UUUWUn¥nUVa@m@k@alU@wkLWa@UUm@@wnmUwla@anKn_@alK@Ý_@@WUUUmlkaIyU@UwU_Wa¯yU_mWUwkImm@InWWUk@@UVWVkW¯U@VL@b¯b@l±¦@VV@lUbV@kxVnUl¼XV@b@lV@nIWxnb@UULxÅxm¯aUwU@mUÅVÝKULm@bmKUXó@\"],encodeOffsets:[[118542,37801]]}},{type:\"Feature\",id:\"3716\",properties:{name:\"滨州市\",cp:[117.8174,37.4963],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@Vb@`bVkVlnV@nlWUk@al@nJ@bV@InmVxbVbVLUJ@nkblXlLnlmxnUV@V@mXnlbĸ@nnVxb@lnXV@UJ@nVxxnxVbÆVn¯ƒĕ@@wÈçUÇlķVIb@Çmk@¥k@UkUK@aWakUóJW_UW@wkkWK@U@K@XUUkmUUalKXala@U@kkWlkÈl@kVmVIVmU_awnwVW@wwU@wU£wkJWIyUI±bkVUJ@nmVUklXmx@lnbWkVUkLWxkKUUmUkbJ±LÇxUKmkUmkkWamUaVkJÆ_²KĠ@UW@wU¥nUWwK@aÝUkÅVaVK@akLW¯I@bnbVx¯JWñWbUL@nV@VmbkUUV@IÇak@@bWak@WJUJWL@bXV@@VJlb@zUlUUImnbVmz@°UV@VbV@@V@L@xLmKUnmJVXJ@VkLW@UVUL@b\"],encodeOffsets:[[120083,38442]]}},{type:\"Feature\",id:\"3715\",properties:{name:\"聊城市\",cp:[115.9167,36.4032],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ô@VWnLan@VKÞLÆUnVV@xVbn°ÆwwKVV@maXwmJU@@k@aWUk»VUmlw@UVa@kUU@²¥@k°a@aK@UU@mmm@ówÑ±¥¯@@wKmwI¥kU¯UmakJmIUaVkKUkm@VUUaU@UaKUK¯@wUVUIUKVwk¥wbV@xn@lWnXxlL@`XlJX¦l°XxW¦@¦Uln@@@Um@@VXVmx@¯bllUnUJ@VULVn@bxVVL@bVlnVVblVÈnVlIVJLôlJ@xl²\"],encodeOffsets:[[118542,37801]]}},{type:\"Feature\",id:\"3705\",properties:{name:\"东营市\",cp:[118.7073,37.5513],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@ͬUǪlô@°Uw°ōĠ¯»Ģç»XÇ@wwƑaÇkwVƑ¯@ÅķUmm¯w@ka@mV@@anIU±m_ÛW@_mWVUK@IkK@UW@@a@K@L@Vk@±U@UV@lm@mUU@kLmxV¤@xVx@xUXmxxbV`UnUJnU@lÇkkllX@l@VkbWbkLVbnVVlWV@@L@VXLll@xVXX`ôIlVXb@bVLVll@@¦nlÈ@aUJkĸVÈÇè@x\"],encodeOffsets:[[121005,39066]]}},{type:\"Feature\",id:\"3701\",properties:{name:\"济南市\",cp:[117.1582,36.8701],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@²¦Òôxn@nn@V°VlXUUX@Vl@XVmX@JnnlJVxnXV`°zXbV`VxV@zJlbkVnVV@X@`@ÞkL@bm`mL@bkbxnVm@xn@VV@XbKl@xkV@b@l@nUbmVm¦XVVV@VUXVVV@XVWb@VÞVVb@X@JnXlWXx@xUVV@aVKVUX@lK@UIUWnIVmnLK@w@K@UU@a@UVU@¯nyUmanVJVVk@ykaIU@@WU@aXKIVXIl@Xb@al@Èb@JVUlVna@UmU@VKXaòX°IUwma@aU@UU@wVW@Ñw@aI±`kbUkwUmJ@UkmÇUUkmKknUV@mJUkaWka@KmKkULmyXa¯_@WmImmbLmUkVUbUVJbUkkWJkUlIUmkLlK@knaVmkI@mWaLUKUU@@VmLUVLWK@UUUWUkkVmx@Vl¦\"],encodeOffsets:[[119014,37041]]}},{type:\"Feature\",id:\"3709\",properties:{name:\"泰安市\",cp:[117.0264,36.0516],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@n¼WnxL@x°@¥Uk@nwlUVlXVV@VXLKVUnK@UV@VVLKXb@nlJUnmb@lkLKlVnJklVXIllVaIVUValUnVKannnJ@X°`WbnzKlVnL@LbXlbVlnI@VUU@UmV@U@U¥@VmV@@_Ua@m°@@kmUUm@UVmn@nX@@aanJVUVLmlIVJn@nkVLVa@KVmVLXVVL@@U°bn@VaV@@K@aVkbWaXUVymU@aUImWX@¥UaVwUaVwUUU@WW@k_VUKÇa@nmxkV@LVJ@XJUbVkUWVUIlLwĉVaU@VbJ@bUUL@mVUK@wWkK@UVWUIÇm@UUI¯lWK@kk@UL@lmUVkbÇaUVVnJlInWbXbLxVln@VbV@VUV@kIUK@UWm@UU@LK@KU@Uam_ó@m@L@l@@x@nWJUU@L`k_JWbUKkmLn`mb\"],encodeOffsets:[[118834,36844]]}},{type:\"Feature\",id:\"3710\",properties:{name:\"威海市\",cp:[121.9482,37.1393],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@VbUnVVUxĊ¼¼ô@ÞÑ¯WǬLŎUÆW¹UÇō¯ÑÝkţţóġóLł̥Uwm¥kÝmkkKóbÝ@U¦@mb¯LkmJ@xLmn@lk@a@X@lXbmJUzV@bVJ@n@xblJXzxV@VaKVUXLlmVV@In@VxUlW°@nLVK@zXVVal@@VwbVKL@bnx@WbUJ@VnXVlVxl@nnnV@lV@L\"],encodeOffsets:[[124842,38312]]}},{type:\"Feature\",id:\"3711\",properties:{name:\"日照市\",cp:[119.2786,35.5023],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@UaVUUKVkJVaVIČb@Vam@ka@Ul@UôVK@UnKVLnKlkWVa@¯l@VbÈlV_V@XWW_@anKVwUmVw@@UnyUVblKVLX@aô¯ó¥mÛĊÿÈ¥Þ¹lUī¯Kĉ¼ʟbÇVUUXmakJUnmV@bUnmJ@XnJVLn¤UzmJUn@`¯ImU@nKVkkmKWbb@xk@mL@KUUVUKkbWaXkK@bkJWbnbl@UL@lL@lxx@bnUVlV@¦²°@bVx@J@¯XUJ@bUnlxVX@VV@bL@nô`@bkbVVÞLxnU\"],encodeOffsets:[[121883,36895]]}},{type:\"Feature\",id:\"3703\",properties:{name:\"淄博市\",cp:[118.0371,36.6064],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@nlKV@nVn@@kVU@²VVaU@wmKXU@UUWwUW¯aU_JUVVK@UJU@kUw@UlnWU_@lI@U@wUml@@mVwX_KWUXKVa@UVUUwJlaXWUn@mlanUVWkIV¥V@VVVI@a@akakLWKna@aVwk@WUbUlk@k@U¯UWWU@mUUVUXkVmVVV@nkVLVÅw¯k@WVXbaUl@bV@@b@xkVVXVxkJ@nk@@VLUlVbVXUVVUzVLVbUbVVWVkLmkJ@n±@UxUVVkV@bx@ÒUX@xVVV@°JXlK@bULUblÆÞV@bLXxmV¦V@xXVğ@±LÅ`IUlVbnbXllVnnlVLÈwK²IlanVVVlLwXlKVlUXma@knwWlkVnU@mVIUl²aVJzXJlI\"],encodeOffsets:[[121129,37891]]}},{type:\"Feature\",id:\"3704\",properties:{name:\"枣庄市\",cp:[117.323,34.8926],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@yUUUkl@@aVmLXw°»°w@yL@UUaWXKVknwVKlm_UmmUXK@aw@k@mUWmUL@@@£@KbÝV@akwaULmbUKLUU@lm@°mL@nUJVxVXU`mIUxU@UnU@@lW@@bkLW@UVkKÇ°kLlbnUÜÇUUVÇ@@Xkl@XV`UbmbUbU@WxU@¯¦m°nLaVblVXal@XKlLVVÈLKôlnbI@V@VJI@lVVÞaVkXU\"],encodeOffsets:[[120241,36119]]}},{type:\"Feature\",id:\"3712\",properties:{name:\"莱芜市\",cp:[117.6526,36.2714],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@lmnLVlÈVln@VnIVlxVla²_JlUUUVVw²@@mlInlKXUUUVaUaKUVyUUWVUUaVkUK@l@@mlIUwUWlU@w@aU@@LU@Ubm@¯a@V@UKWUUKUn@LUbUKmlm@UIkJnUKUVmIb@b@mWm@Un@VVnnVl@¯@@nVb@`U@Un@¦@V@VUVnV@\"],encodeOffsets:[[120173,37334]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/shan_xi_1_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"6108\",properties:{name:\"榆林市\",cp:[109.8743,38.205],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@ýVnIW»W@»kUÇLÝU¯¥ÇIUWWÑUWwX¯m@»n@ÜÈķô@a±kČ±wÑmwçċmU»ÆkkVyImĉÿ@Ý¹WnwÇVÅazmmĉ¦ókVmxxU¼VkVm_UlVlk°IVkmJa¦kLmmV@XmKnlUôVXbb@UaÇLğÜÅw£mKnmċwÅ@UkbmaVn@m¯aUJm_k@kWXyl@@kÅamwLUÞmWÅzUKUk±@b@nnKbX¤mzVVxÇn¯@ÒknWVUbkķÈÑWkk@VaU@mUkbÝÅ@Ý¥ÇbkĬXV`kLÇVmalUUanV±nwmkJ@In°KVw¯UnÅ@¥U±bUU±mWbÛKWnUm`UƒVK@bmnmÈÅ¼@VL@xxmŤ°n@VmK²VllKkô@êÜV@VXLlm¦UV°Ș¯²ÿ@¥@ÆĊ²ImĶnnb°bKVĸLlÞ@UȮÜ°IVÞÝÞlx@ķĀWUxèÆ@°XnlĊĖ°mnV²V°ÒÆ¦aÞ@zll@bÞĀl¼nKĊ¼óÈb²±IǪÒ¯ĖV@lxnVlkJlaXwŌĉ@VnlÆĕUÆLèŌŤôxÈlU@xlaUċĕXmIWmnkVVVW_@aÈWUUmk@¯çVm»±W¯n¥VmkXw±ÇVw\"],encodeOffsets:[[113592,39645]]}},{type:\"Feature\",id:\"6106\",properties:{name:\"延安市\",cp:[109.1052,36.4252],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@@kkÇmImUwVkUU²WmVkm@m`mIĢĕUVa@mXÿVVkyUýĕ@l_UmnWKVkţ¥awğ@@aôWakUma¯¯a±£kxmmxUwÝ@xmUb¯KwóÝ@kmm¹Ub@lklVbmnnVUV@xUknƧJUX@LÇWkwLķƧÅwWJkLkþĉxWzJUnÇk@Ɛk¼ÜÔÈKè@°lÈÆk¦ln@l¼@l¯L°UUVÇ°¹`m¼mXkbUaV@U¯x@¦ÇUUmlmUVmnnmlkw@@¦ÅÇLmx¯Ikl@¦mÆ°VUx¯Lm@JInlmxU²mVbkVbUnÈlKU_WlīÈaÞ¦Æ@ÞlanV@VUbl@XlÇÒĸlVaUXlm@Ñ°ÈmUwUnyW£amL@ma²@lVVLÆynXÝVKnxÆb@lk@WzX@lln`IV°b@nmUnbaVlÆ@ČxmnnL¤ÆxĠÛÈKVb@aWaUókVmnL@WUnnKl¥bnIlU¯JlUkVkn`lUUV»wnwlUôĊ¥nnyÆb\"],encodeOffsets:[[113074,37862]]}},{type:\"Feature\",id:\"6107\",properties:{name:\"汉中市\",cp:[106.886,33.0139],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@lKnb@nlWb°bkxĸwVb@łnlĊ¥L@XlÈVblÈKbakVwôml²`n@nVKlk²xŎ°¦VUJĊw@çnWçÞVkUóÛ@¥kwUmX¯WÑk@UymIUwlUn¥mUk²a°¯V»@ÝVÈÝċÅÅVl»@l@a°±@_kammÅba@m@Å¼KknõĠ@m¯LÅwLVxmb@¼kV@mw¯wVakKW»X±¼¯Vkxb¼W@nx@x±bóakb@ÝmU@ķÓÛLkVUmk¯¤ÝLUlÝ@Ýzx@x°bmX¯aUJW¯k@bÇWwÛwWx@XWlb@VÈUlwLnl°VlUô¦U°¤VUxVXUxlbkVVlI°ÅVlU°m@kÇU¯xUlLUlVL@b°ĠInĠ°ÈnK@xÞa²naUyXUKVkWô¼Èaz°JXUVÇV_JVz@nb\"],encodeOffsets:[[109137,34392]]}},{type:\"Feature\",id:\"6109\",properties:{name:\"安康市\",cp:[109.1162,32.7722],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@bĊaƨèwôô¼b°aXVÞVUÞ@aXm¥kImx¯¯V@anU@UÇéğL@¯¥V£m@ÝÈbKX°wČÿb@xÈblxÈ¯ĊmÆUVnÈ@ƨÜLĢ¥Źn°VnnKaô_ÈwUaXmnW¯klLXÇō¦ÝaÅVmbğUn¥±wÅéVan¥U»°am¥£Ý@wVw¥nUÑUmmVwmķIÅaóVWxkblb@ból@ğÒĉ¤ċX¯XxkÇ@óÆÅx@xķ_kmÝÇ£kblb@`¯²@bk@k¼ÆUČÆÞÇÞU@U¼¯°±bVlnm¦kVVxnJVz@lÒXW°nVlx@¦ôÜVUlÝXèm@è\"],encodeOffsets:[[110644,34521]]}},{type:\"Feature\",id:\"6110\",properties:{name:\"商洛市\",cp:[109.8083,33.761],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@²nlôb°aVwnKÞI`°wXôw°VĊ°@ÅÞÆVzÞK@x@aLÅ@b@nLl@lnmnLVwabVVnbU¼V°blbÈ@ĶŦb@nÇ@amIyUI@ĠVmôUVwkwlanJ¯lwó¥@an°J_@nóƒó@£l¥UwmaÑ@Um±V_J£JUW¥¯@_k¯¼mUVUè¯b@wmL»ğVmağI¯¤ċIUWXKĵ¦ķaJUbIlUóVmk@WÅÅÇ@mUÅVnĉÇ°kwÇa@waċĀ¯xWLÇa@ÞnU¤°¦@ĠKÈê@VmV@bU°°nwlJn¦WbÝ@V\"],encodeOffsets:[[111454,34628]]}},{type:\"Feature\",id:\"6103\",properties:{name:\"宝鸡市\",cp:[107.1826,34.3433],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@@£@°Ib@¯°ynŹaUlU£Umĵĉ@@ylUÞ@@£kWU¯WaU£¯ÇV¥@kb¯wn¥ÇkUÇnU@¯±kULm@m±_kónUxlbaÇLkUaÇkW@Kĉ¦km@ŁUaķxlw¯aXak@mmakL@mÛ@¼m@lXV`nKU°°@²¤UÈ@VxmôxKlVV²aVwXlaVlx@UVnÇnk°VVLlkIJÇk¯V@knÆn@lznmlVkzVVVx@Uxz@x±¼VxxUlkb@¼ČkVXlĠkôV²wLUKlwJ@aIV¥Þn¯Ün@nkl²kÆ@°aVbnI@Ťn\"],encodeOffsets:[[110408,35815]]}},{type:\"Feature\",id:\"6105\",properties:{name:\"渭南市\",cp:[109.7864,35.0299],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@@ÈôLxU°Þ@mÈnl¤nUôLwX`@ÞÝLUmLôôbVbnºlnÞ@ôx°LanVwÞ@Vxnwnlw²¤b°°bVnlXbó@bĠ@xb¦ŤVXġ£W¥ƽɽó@ýóƝÝ»£XmƅĊkU@ókťaĵÇ@aka¯UV»maUUabUxmKnkm@kmK@xó@¯n¯KÇ¦@ôÅèlxkx°nƾ¯KU¯WķL@VÝIUbyWbX¼Ç°\"],encodeOffsets:[[111589,35657]]}},{type:\"Feature\",id:\"6104\",properties:{name:\"咸阳市\",cp:[108.4131,34.8706],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@IXyĊwlýKlXIVaķ»a£¯aVU@awÈōaL²»VUln°WÈ¯W»XazVaÞJ@U»@¯Ýbğwly@£kÑţ±WÑ@kaIUn@¯ómţUbU¯lÇIÝb@¤Ý@kV@zĊ@ĶnVV¤kVbmź¯z@°a¯J@¤@bUxb@`xUÔ±ºVXWUnUJLĢ¯ÈKlblmÈXŎ°U°LlkÞK@Èxl_°ĶUÒkbl\"],encodeOffsets:[[111229,36394]]}},{type:\"Feature\",id:\"6101\",properties:{name:\"西安市\",cp:[109.1162,34.2004],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@°²@mVVÈÈl¦m°xla@U¦°ÈV¤XbV°lXÞaÈJ°kVaŤVôn°@mVJlb@XÒŤ²lÒ@¤kzĠxÞa@°¼ĸK°XV°Lƽ¯mlwkwÆç@óÈ¥°L°mô@w@aÆK@b@wÝLyÅUÝÆ@ĉ¯¯UóxW¯x_ÝJmLUx¯bóak±mÝUUW¯ba»óóxƧçĉbaĉxIUV¯¥ō±wl\"],encodeOffsets:[[110206,34532]]}},{type:\"Feature\",id:\"6102\",properties:{name:\"铜川市\",cp:[109.0393,35.1947],childNum:2},geometry:{type:\"Polygon\",coordinates:[\"@@ÆxĸƨKlxÈXK@VWƨIlmV@wVUmUnmUalk@kVaUaóaónKVÞK@ÝW_xóKmVk£ÇmnÝ@¯VwóK@Ç¯XkmVU±¼KbÇŎx@bUV°b¤b¼ĸUb\"],encodeOffsets:[[111477,36192]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/shan_xi_2_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"1409\",properties:{name:\"忻州市\",cp:[112.4561,38.8971],childNum:14},geometry:{type:\"Polygon\",coordinates:[\"@@Vx@lnbn¦WlnnUm°²VVVVVnUnºlz@l@J@kXWVXl@La@KULlbnKlLnKLnKÆXn°bVV@bUVl°Un@LnaVJUbW@UX²l@ČwlVVIWnkÆa°anVKn°UW¯@aVUVk@Un@aV@ValwUanmWUk@WVUUanaVwnLVl°@nk@mVU@UVK@wLVKVU@K@UUKVUV@@bnLaVaôlIXmlKX_°KVV@bVV@zV`kblIVUlL@bnV@VĊllVlIXW@kaU²blKVnIlJalbXXlWVn°JnnL@l@XlJlaX@XW²@l_VmnKUblU@mnkVK¯@U@ma@kX¥VmakkLa@a@WIUUVXWWnk@a°a@kkm@kUUmJm@WUUUIk`m@VkaWWkXKmXk¯@WKLkak@±bw@aa@aka@ma¯@LKÇÅkKWbkmġ±ÅULUKVVkm¯LUVVbUwUW¯bmULxWJ@klmkUm@@KnwVkVK@akw@@a¯bKknVUIb¯mmbk@UbmKUL@xUU@klmLUlVXIVVVUVUU`mLXVWbXnW`Å²°xmxU@mĉwU@mbU@UmbkVW¦kJ@X@`¯Im@UlUVVnb@bWJXnmbJUUUUa@UamIkax@@x@b\"],\nencodeOffsets:[[113614,39657]]}},{type:\"Feature\",id:\"1411\",properties:{name:\"吕梁市\",cp:[111.3574,37.7325],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@@a@w@wlbnJVb@VbVVVInaWmXI@aaUmVUVkn@°J@_W@lIX¥lUnaVV@naV@xĊnV@wn¯wÆ±X_WmXaWUnKV_VVUUUUWJkUVnKlk¯@@kmKUaÅ±KkU@WmI@WUIlUUmVwXw@UlUVwV@LnbW@anU@UaVkô@l»n@naJnUÈLVaÆUUVmVKV²L@mU_lK@UVWkUa@a@U¯aUaÑóÑUbKk@@ak¯mVaUwVÑkWUmK@UUKmXUWÝwUaLUU@aWJUUU@UaÝU@WL@VKVaVI@WnU@alIVK@kImIkJ@m@@@_K@x@kaW@U@Vmn@UK@mIJUXV¤XXWlkKkkK@XmJVakImJU@ó¯LWKUV@nUVLkxmKkLma@kXKmmLabLmK@V@mXVÆUxX@`nLaV@@VmLUVnLlLb@°²nx@bVUxlb@V¯bUV@zVXVĊXVx@lVn@VnnmU@LlJXVz¯VWVXbV@bmnVUVkÇþÅ@XVxmbUlVUlnW@Xl@VLXÒ@bÞJ°¦Lò@nUb@°X@XbmVUVnb@xx\"],encodeOffsets:[[113614,39657]]}},{type:\"Feature\",id:\"1410\",properties:{name:\"临汾市\",cp:[111.4783,36.1615],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@nW@@UnLKabKnnWL@lnblKnLlwKVU@mVUXL°KôV@nIlJUbnI@WlLllLXkWWU£VWInJ@VL@nm@UVX@lb@@wL@`@n@V@lw@nVmVXWmwnUla@_lKwVlUn°xVKVXXWlUVVI@K@Kn°KwlVlU@kna@V_WnmUVm@kXml_@mLlKXw°m@_ôJVUV@Xl@UaV@Va°Ilk»VwUkVmwUmmVn@V¯@KUwmK@U¯wUVÝ@mJUnWK@@UnKVa_lykUmKÛnm@x@UUlwVkXW@a@U@@K@kIVnammVakUl@wX@@k¯@VVbml@°UbULmlVbnbÅK±VKVXUJWa@ULWaUU@@U@aWK@UkxUKLUUUJ±UkL@V±kk@kam@UV@l@LWl@n@VVUxLlUUx@VUVU@aIUlL@°mLUbkUUaWUUaUU@aWKLWJ@bUL@VUVVbU@m@a@kmKmnĉlUKXWUblbxmIkU@xWb@lkVxLXmzVV@bklVVUzm@bk@Vx@xlU@lUbVnl@Wxnl@n@UbVmLmb@`X@lUX@@xlnkLWaUJnnWVVn@l@bULVV@lV@XnJVX\"],encodeOffsets:[[113063,37784]]}},{type:\"Feature\",id:\"1407\",properties:{name:\"晋中市\",cp:[112.7747,37.37],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@@lInJlJ@ULkJ@bmV@XUJUbL@UXKV@ÞVbV@VVXI@bVVKVbÞxVXnWVL@VnLVlXÒUVxUb°nl@bl@LVaôÒÒVb°b@VnLnnV@lmn@lbUV@JUVVXkl@lUzmJ@xXklbUnJVUbnUlbV@nlLX@lakV`Ub°@XVJnUL²KlxnI@KV@lbUbVVKnVl@zlm@U@nI@WUaVl@@mVU@XkW@nkVKV_Vwy@knwVa@XalU@Vnml@X@VLKVaÞbnnlJImVKnVVVInVlU@m@mXK@UmyUI@mWUUakamw@wUwmLkakwVmKw@wUam£y@am_W@UU@knmmamU@WUa@knw@UUUUV@nJm@mVUkKVUUUkKmwKULKUImV@lUnnm@mbUK@°bUnmbUmkkWUb@am@UXkK@a±@V@ĉÅVUXVxUVkLWl¯@@bULUlm@@nm`XlWakIkmVUbUL@Vm@kI@@Km@VaXI@W@aU@kUVU_KbJkkÇb@nkKmLwÅW@kVUUVU@WUIJmIXmma@_kyVaUUlkUm@kUx¯Lm@L@LUJUkVWXUWUL¯wVmUkxkL@`bkmVnxXUWUnm@kxU@\"],encodeOffsets:[[114087,37682]]}},{type:\"Feature\",id:\"1408\",properties:{name:\"运城市\",cp:[111.1487,35.2002],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@VlnJwkaVaXWVLĊknmnLl@@bnV@UaVU@UVK@aXIKXL@bVVVbXVVblVaVnK@¯KVkJ@bVVU@UVwkVKVwUUm@@Xk@K@kVUn@lbl@²l@UlK²VVIVVKVLlw@VXL@b@VV@VXbVK@XbVIUWLU²ÆLmaUankVKVa¯@nkUaU°@n@@kWaUVaXUW@IXKVw@UWU@W@@UUU@mn@`m@UUULkUmJIU@@UK@U@anak_@wmKUwmakVkmKVk¯bw`kwUIÇx¯»ÇaÅmn@@mmUkV@wkKW@kxmLUkĉLÝkxÝw¯lóVUmV@ĀVVX¦W¤kz@`Vx°²ĸ@Ul@xêĸǊ°¤VVlXLWnXxmV@nUl@\"],encodeOffsets:[[113232,36597]]}},{type:\"Feature\",id:\"1402\",properties:{name:\"大同市\",cp:[113.7854,39.8035],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@²£yl@ČĖ@bĸĢbĸXaKŤnn@ŎôllÈxnVnÞÇV@bnXllL°KbVb@J@b@UxlKXLlKlXk@UlkJlkUVKXUÇVIVm@_nÇLalwVnU@UUwma@aaÝaLmUk@@W@U@@XwVWÝUUUk@@VmLKV»nwUwaUL@`mzJUIVUaUwKUaVIlJôanÑlLVUn@a@VV@@UUwVK°Vn_lJÆLéW@UUUÅ@»lm@aÞIVwXWUUkkm@U@aU@mwU£VWU_kWmXwW_°yUkkK@UÇK@kkUVymóKU@KWIbUak@mJ@bkbmLkUmkVUW¦@lnb@@V°ULml@nkVaVmLUnk`±@XWW@kbÇ¦X¯WxI@xmbmxXlWV@bÅUz@Jb@bÞbU@Wbk@xk@WX¯VÛWÝbÝUkVUU@alI@a@akLWam@U¯UUmÇL@K@aU@¯VUkKmX@`@kJ@nVUb@lbVÆXVWULU`VbkLUV@XWl@bXJ@VbV@Vl\"],encodeOffsets:[[115335,41209]]}},{type:\"Feature\",id:\"1404\",properties:{name:\"长治市\",cp:[112.8625,36.4746],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@UkLky@IJVa@mÞaWy@_W@_WXVlUVw@nw°K@mUVamVkU@mmmnLVUmKXaU@IlKVUnK@UmWkX@WV_V@akU@aKWIXyIUVmUnUa@WaXUVKVmkUWVkULU@@VbKbIUm@mbVLxWUUkn±V¯wbÅJUbmLkbmKÅKbVnUbVKUbKUbmLKmbaKkUm@UnnVnxUVlUxl¼k¯JUbU@Vbk@WU@UVóI@`¯nWxkLK@nk`Wn@lUnVnmXU`@mb@lkV@VnklVVUblz@`nbWnnJIVJ@XUVVUV@lÆXxnKlL@maÈllIaLV`UlVV@@b@XJWUb@n@L@lJn@@UVKVaUlnlJXbkWn_@mn@VkVK@a°@XklKVUUwVWUĊÆ@U²@@blLVWn@@bVaXllVnnaVma@¯VLnan@mVm@knUVJ\"],encodeOffsets:[[116269,37637]]}},{type:\"Feature\",id:\"1406\",properties:{name:\"朔州市\",cp:[113.0713,39.6991],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@XXWVXVWnnlnn@èÆ¼@xlVnblVÈUVl@blnLÜĊmUkU@Ua@WI@aXk@WVUlKUaV_VKXWUUÅka@VaU@mlI@@_nWLVl°UV@@b@LÈKVn°V@VnXblK@b@bkJ@bVVlUÞVÞaXÜ°UXWl@wl@XaV@Ýa@aa@IVyÆ@aXUWknwna@wJXw°WÈ¥kI@W@kmKm¯IUmkXWWkabkImJUkL±aVb@lWXkJUkĉk@UmU@aKkVUkJlaU_y@UU@aUU¯LW`kLWnkJóbUbmK@aU@UVVL@VL@UVULK@xUL@VUV@nml¯@UkmKUxmbVbUV@XlXVmnVbkxUbU@bm@@VUlUVb°@VX¯m\"],encodeOffsets:[[114615,40562]]}},{type:\"Feature\",id:\"1405\",properties:{name:\"晋城市\",cp:[112.7856,35.6342],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@lVLbanLnKVaLVaLUVaUmaÆLnLlanKVaÆIa°x²UlmVVXwUKna@VnJaLa@UV@@alUkKVKnkmmVwUkw@@kxWUXW@@mk@aUa@a¯aLkKmwkUm@kL@K@aWIXmVXWkUVakL@UVKw@aUK@UUKmLU@¯nKUwVUIWJUWmka@UXJk@UkmW@kLWKVx@bmI@VUaVU@a¯@UUmVKmX@±`kÝKVxUL±akL@VbLkKmV@XWVUbVXb@lm@@lW@@xklVUbnnmbUlJ@@L@@Vb@WXUlkxVV@wn@ÜmnLlVkz`UbmL@V@XLmVnIÞ@VU°x@VnLxV@LU°\"],encodeOffsets:[[115223,36895]]}},{type:\"Feature\",id:\"1401\",properties:{name:\"太原市\",cp:[112.3352,37.9413],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@@VV@wVKnLVal@na°naVJUlmL°a@b@lx@bULUlmx@Ln@lVknl@XIwKVn°aVXVxUaVU°KnUlUVLKÆV²ĢlnXalLÈÆLKUaVkUanmWUa@WwkUWU¯y¯Ñ@anIl@@aVUmIymULUUVakaU@@LmJkw±LKmVUI@W¯VaU_lkbW@kK@mUkaVmVaUIVmalkW@wnIVy@klkWUUVI@UVkam@knU@mmmK@bblVUX@VkLV`@n±KUULUnVVÅUbÇKmVImbm@k¼ó@Ulb@VmV@bXmaK@UUxkVV@xWUxVnkVVJ@XnJ@XlV²LÆVbnL@l@°\"],encodeOffsets:[[114503,39134]]}},{type:\"Feature\",id:\"1403\",properties:{name:\"阳泉市\",cp:[113.4778,38.0951],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@°@nb@lb@bbb@x²al@lbKXU@mkUWkkmUUVwV@XUW@naVklKXblKnLnLVanImaXKlLaV@U@KUKWalXK@£WKXUV@VUUUVW_V@W@@K@UIWmXUmULnJkImmÝaUbLK@UWk@mnU@kVWb@Ubmx@lzUx`UULml@XWl@UV@nk@UVb@XJm@@Vknyk@zJnUV@bk@mJ@b°Ò°zXVlVXx@bXVmnVbUlVb\"],encodeOffsets:[[115864,39336]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/si_chuan_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"5133\",properties:{name:\"甘孜藏族自治州\",cp:[99.9207,31.0803],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@aXam¯wm@±°wUwV@UaVw²KU@UU¥a@£ÞôxKnkmX¥IUÝUwlk°V@ÈKUwlkUyV¹mx²XllÑW»lw°UŎnJl¯°V@wôIVÇnnUllLVÇLô¼XW£@±@¥k_ÇJkUékwXa@Llw²Vxbm¼ÈxlLÈVWÞn¯mÇÑUÝlÛkwlĉmULmwUJç@wkm@ÑlUXÑôġVaUÑ¯@wķÓkbVmnU@@y¯IķKV@¹aé@kmÞU°¥@a¯@anKlblU¥@óğç@Çw@wklaçÝ±k¯±@ğÝUÛmÝ¯w@kb±¯akXWÜkXUÆÇU¤X_ƐwV@¤XUbUIUlÇUkġ@aXČmlUlèUV@mVk¦Vx@¦±¯¯¯anlW¯nÅw@w°KVak£m@klKknÇU»óKīlaUaV£@¯@ÆUVÛÝÇXÇlÓlŹ»WUğJ¯£mxLĵôºXVlUll²bllxónn°ÝU¼mJU¯nV@êĉ°Uĸw@m@¯kmXamÑ¯aUwÝKU¥mÅn¥Wmn¹n±ƑƆÇôXê±ǊnUôlĖkȂVÒ¯¼VnȮ¯ĀnƆĢ@k°V°¯ĢVlkVxm¼X²Ŏ@VxknWÜ°U¯nÆÝ@`ôÝ²ÒÇznmX@xè°K°ÅUČĬóĖÝó¼ÅêÒbmk@V@Òl@nĉÜêx@ĖmlÅJ¯¦óxȭ°Ým¯LĵèĀ@Æl°żX@xmkV@z@°blnÞ°J@bn@Æ¼UVUóóL°X°ÝLxUn°Ĭn@lnL@Æ@nKÆxnUnVInĬmÆnxŎ¼ĊIĢóÞ@ĊƨbUmV¥lkwnLmÅÆ¥XwU@wwUÞ@alUUÅUVkkm°aU°Ó°w°Ub°a²K¯ĕ@ÈbÞĊa»XVm°InĬk¼VbaJô£VĊankůnÜU@anKnĮbÈmÆ»nIé£Ġ\"],encodeOffsets:[[103073,33295]]}},{type:\"Feature\",id:\"5132\",properties:{name:\"阿坝藏族羌族自治州\",cp:[102.4805,32.4536],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@l@@þ²I@lVL°wnJ°UĸŎèIlwV°¤nĮ¤ÝlèL@@xlè²ôĊ_ĊġVÈôJżīlbXÆÈVkxÇVn°¦Üb@è@nn@@°UÈ¥WÇ_Uala¯¯UÇk»mVwk»k²°VxlL@¤_@x`ÈĖöb@l²alXa@bnK°¦VK@nnWmx@nUnl@@llĉk°l°UXkmW@Un`kÇLWÛÈVxVVlVk@lIXb@ylXÈWĮWŤzy@mI²J@n°@VJ°aÅ@ŎkVÇkaUwKVwV@nkm@±ôkôĊJ¼InÑm±nIÞXÈĊxĊUÈbÜyÈ£Vkw@kVUVm@a»ÜbÈmUXwÝxUn¥@°ġÅaJVkaW¯Û@W¥UŏĶ@¯kUŃ@aI@mmanwÞW@mw°»Uřk¹±WxVx¯¦U°zţWw@°ÇVÑk¯@y°a£@mnl¼aÝÝakwU±aĉImlĵn@m@kkV¯Ñmĸ°xl@XVÞmlÛÝĉUÅ¥mwÅ¥VaUwXġċaVůÛŹlwU¯Uó±xÛV±¯¯n¯mċLmnĊm@_kJWaXmwUĉK»@mwXÝUÇkKÇw»naUw±kxK@WbxlVêlÈIl`@¦@²X¤Wó»KUÈKkkmVmUÈóJ@x¯Uk°Imō¯VxkX¼Òkk±WwnUºVzklVxLÇ@¯UklVxÞVJW¦nmlLówÝ@¤b¦V@VV±LUxVbU@Vx¯x@²n°xnWbb\"],encodeOffsets:[[103073,33295]]}},{type:\"Feature\",id:\"5134\",properties:{name:\"凉山彝族自治州\",cp:[101.9641,27.6746],childNum:17},geometry:{type:\"Polygon\",coordinates:[\"@@ĶóKnw°¤ĠIXV¼kźÔkÈWÞÈÜUVÅ°@@U¤VbkbĬôL¼ÈVlmLlkn@l¤Ub¯L@xÆx°mXmk°b°°²@¥Uwl¥nU@VUkçVnkWċbĢ@lÈVVkJVaVW@£UƏxW`£ÈVVÅlWXÛlW°b²la@°xnÞVÜĠÞ²@l°Þ²èkbl@xÈx@Ġènal£nUÇ²@ÞKnn¤@¼°U¼nVXUbnĠUVbUlV°LX@lVèÜUnK@_yXVyUwmIU»VkÇ¥ÿkkV¯m±n@n¯ÜanVVÆz@bwÜbm@wa@kmk»@a@VUUów@nb°mXmnVbÞVôanwJak£lwLÅnÝ@wl¥IÇÓ@UL¼kVÇÅó¯kVmmw@n_Vn»°LÅ»@éÇçŹīVÇÝ@ÝğUaVÝ¯ķlŭġl@óÞÛċ@¯nkUÓm±IVġUwóKUn±¯Kw»KÝVnl@óxUwţ£ĉUmÅÇÝKÝUlmK£UV@ÞÈW¦Ò@Ĭnny@nÒmV¼@°Vbl@VlnUUwl°a@@llnk°lbnKWĀnUVxU²Åm¦ÛÇÅaUVb@¦m`móXUmmxÅ@±Þnè²U¯»mVm@wU@wÝÝmLa@VÇUkl°¯VlkV¦UmxaULUèVx@kIUxmWV¼¯VmÈ¯UnlÈ@m»ÅVWxÅbÅğW@km@kVV¦mlnn@ōl¦ÅÆxk\"],encodeOffsets:[[102466,28756]]}},{type:\"Feature\",id:\"5107\",properties:{name:\"绵阳市\",cp:[104.7327,31.8713],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ńlV°@ŐĵVX»ÆUĊÑJw@È»m»£°Kk@ÇnÑÆ@w°JUwnw@wbVb@VlźLUwa»aUklyUUVakwWXwWUxkLmn¥mwkUXlJw@aIk°X¥W²l¥aUIlmkklÈL@m°nlWUaW@V@UaV¥@ak@Çk¹K@aK@kKkÇX@VU@kx±VèkIWwUVUkkKÇ@a@wkml¯@kUWn£WaaVwnaVÝw¯@UaWxnJÅUxUma@L@mbUU±VVnkxUÆVm@kkKW°X@¤ÇUkÆÇnU¦¯kmLVwÅK@UóbÇÆV¦L@±êX¦mVÞkÜÝnWU@k¯wķn°ÒUlln@@ĶmnkĊJ²bVlxÞbÞbk»mn@¤¯bz@l°UÒ¯È@xŤXyV¯°¥Uww²XlºVŚ¯¼nx@XÝmxnb@nJ@b\"],encodeOffsets:[[106448,33694]]}},{type:\"Feature\",id:\"5117\",properties:{name:\"达州市\",cp:[107.6111,31.333],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@Uxn°bnlUnÒÆnn@n¤LnxlUV@Ælx°XXxl`XVWLè±nÈb°b@²x°KÜ¼°ĉV¦lJnU@¦ÞJÞğmLÞ»xUlbVÆannalVÆX@lnŎVmUmaÅXa@aWm@£@wĉJVkkkkmnk@mna@alKJ@ÞwmÅÅ@ambkU@KUġKU@mak¯±a@aĉÑÅaVwXlw±V¥l@@ak@@£mĉÝónWV@nÝÇÇxUmbaVkkk@m@m°ÝýXmakÅī@@mb@@xmnb@mxkWL@¯b@WUXmWWKkbm@kxXmm@LUlxlêóKnUallLlLó°m¯JVUK@xK²Āô¦l°\"],encodeOffsets:[[109519,31917]]}},{type:\"Feature\",id:\"5108\",properties:{name:\"广元市\",cp:[105.6885,32.2284],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@ÆLĊx°»Ŧ¦WLÈ@xÞKÜ°ÞnVxÅĀlÒnJ°a@wV¯l@XWknKnwVÈ°XXalX°VI°bWna¥@w°n@yÆ@nkÞ@°¯lJn°IÈlUlXÅ@ķlUV¥VUUÝÞUU@UwJUkĉm@ýlkWUwVwWJk@VUKlUkaVUmLkm@@UIk`@UmlUkV¯ÇXKÝ_mm¯@U`kwml¼±KV¯¯Vk±Vk±kzmaKUnÇ±bk¦±X¦¯WlJ@bxkIWVlxnm¦nlKVwXWxXlxUbVVkzVlb¼bVxŹKUk@Uaa@xmxVx¯Ix@ÅmÒ@Èl¯L¤n¼\"],encodeOffsets:[[107146,33452]]}},{type:\"Feature\",id:\"5118\",properties:{name:\"雅安市\",cp:[102.6672,29.8938],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ln@xèVInxVKnĊklxkÜVÞÒnÈm°nx@¼ĊLVnxWXblI`@nmĉnKČôÅlUÑmUK²¹@ÇÅVÓÅ¯VýÞWUVmXÆbnwKUÿ@UmmIUb¯¥Uw¯ÇmçmanUm»UUlk¤a¯bVU_WĕmÇÅ±ĢUlUlÛVçkU@W¯KUVkUağVmaVWUmV»¯@»m£mÝL±@ÈmVk¤mb@ô¦kVkamL@b°@b¯¦ÝVn@lêb@ºUĸL°J@zV@nmUlaĸÔ@x°VÒUbóĢÒWkV@Ò\"],encodeOffsets:[[104727,30797]]}},{type:\"Feature\",id:\"5115\",properties:{name:\"宜宾市\",cp:[104.6558,28.548],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@VlÈnlXnWLX`m²nV@b°xĢçlnVmnn@@°UzlV°nÞÒkxlw`UnVbmL@albÞKÈÛmÜ¼°@XÇ@wmW@ÅKĊLlVLVŎçÞL²±ğkw@Uy@¹lKXlKVa@wČ@w@aÇU¯n@@wġakaōK@Å»VakUWmķwkbğ¥mLak@ġÞ°¯xVVÞ@VxVVWxXlxU@k²WVÅULmèULVĊklĠVJVx±nÅ¯¦mwğ@mlğkkl±@kUk@¯±ÇKkxl¤bImx\"],encodeOffsets:[[106099,29279]]}},{type:\"Feature\",id:\"5111\",properties:{name:\"乐山市\",cp:[103.5791,29.1742],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@kVkÆkV²UlºÈIlxLXèÜlUXUmkbVèx°@@¼°Knnn@mÆIUbnJ@bVI°b°±@nK@mVakkKl¯nbmĸèl@VnÈlUUwwmwnm°¥LlLnU@VaImbkmKnk@mbLVJVUUVnkVmb@a¯JUaÆkk¥IW¥KlwÑmÝU¯kVy¯@@mmnUkmġè¯w@aU±mnW_XKWmkÇmUkóbUÝUanmW¯nma@xVôUV@b@l¼n@lb@xnÛaxa@yUÅmUÛbm°@mn²U°llĀÈ¦lUV¼nJVxUzWz@`mL\"],encodeOffsets:[[105480,29993]]}},{type:\"Feature\",id:\"5113\",properties:{name:\"南充市\",cp:[106.2048,31.1517],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@È²VmLnblyl²²UUl°U°²L»knlx_V°@nnÞ`WL°ÈUVlnkV@l_JV@n@lnKV£ÇUV¯m@laXUUbVx@VkôJU°Jn@wUk°wnUV_nJmknmm¯Vwk¯ó¥±ÿL@wLVUkUbX¯mykI@a±Kk¦ULmaXVm¯Kz±klUIVbÇJkL¯lUÿUlUkJUmUUkVVklKk@@aU@J²x¦kĬ@¼±ºXnWbxU@xx@lL@bLlº@Èl@bU¦Vb@U@XbVkX¯m@nÇKkllknJV\"],encodeOffsets:[[107989,32282]]}},{type:\"Feature\",id:\"5119\",properties:{name:\"巴中市\",cp:[107.0618,31.9977],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@VUlbkVVLUl@XIUxVxXkl@þĊnVlIVx@VVÝVÞUVU¦kV@ĸWÆô²@VÞn@Vaôb²W@K@XUmÑUW°¯°Ina@y_lWn¼lLUbô¼Kla@nkUyôÆx°@n£Ý@¥mVkIU¥Ċ¯Û»¯L±w@¯aÇa²mçKXUWk_Ww¯WwÅk@UkVmwK£@mmmÅmÑkVmamnnlmIU`Vm¯xVlx@m¯IVóIUl@UwVaVWkb@nU°VÈU¤\"],encodeOffsets:[[108957,32569]]}},{type:\"Feature\",id:\"5105\",properties:{name:\"泸州市\",cp:[105.4578,28.493],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@VVXwVKnwnVnl@b¯xmKUbVn°°X°@blLènV@Vnl@ULnmmUnaVV_ĶV@wnJl@@kkKVólaUwnJmwUlm@aUaôKVnJWbÞ@VwVLX¥VV_Þ`wWÞŹmmnIn¥W@kWV¯@°kILk¼Ç@k¤±XknmÝ¯UlÅÛKWV¯klUwkLÓ@U@w@ġXVWX@UbVbV_kÇVlU°lnwŎ¦ÞaÆ¯nmm¯Um¥nkVmkl_ó¥¯UÇl¯@Lk`¯ķLUy¯@mw¼ķ°ġ_ÅU°mlnÇVUÞ@_JUnVUXblĢb@x@mV°Èb@xċ@@xUbkLWkL@ºzV@lxĠ±²\"],encodeOffsets:[[107674,29639]]}},{type:\"Feature\",id:\"5101\",properties:{name:\"成都市\",cp:[103.9526,30.7617],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@°n°m²°ÜUw²ôV°VkxÜźUŰČbĢlaÈL»@kwVÇ@nÛÆ»ÈUÝ°Kl_V°U`Vbn@VbÈLaVU@ƨ»VnIlUUa±lIk±@VnKmÅ@WaK¦lVōkKÝ@maXÇmw¯IU@kVwUmVIçÿU±Å@¯È@xK@wLUbÇKÅ@mÝ£@yóUóóUxkI@WlIUabaVĀLmxÅaWUnVÝXUþÆ°UÔÈÆ@±ºLnVVÒkóÆ\"],encodeOffsets:[[105492,31534]]}},{type:\"Feature\",id:\"5120\",properties:{name:\"资阳市\",cp:[104.9744,30.1575],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@èUJVnxU@lV°JnxWÈnbÞ@lLŎUk¥LXbÆ@nmLU@zlbXmlnVynLçJVbUnómUnamUan¥lKV_²aValWôn@nbVK°¯VblW@kklUnlV£°W@wUXk°KVwmVkwVyVI@wkmVÅ_Umm@Uÿmbk£xUaVw±V¼V¤kLWxU@UkbyXóm°V@@zÝÒkKn±U@@_VVkÇaVwnLWalm@@kkVVl¦kIV`±n@wKk²aVUUV¤nkxmUkVWVnLUbVb`kUUmLUmX@`ÅbÇXbWLXn\"],encodeOffsets:[[106695,31062]]}},{type:\"Feature\",id:\"5104\",properties:{name:\"攀枝花市\",cp:[101.6895,26.7133],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@bKÞnÞ@xV@xnUn°¼V±mç²ÝÆ@wnnVWnôn_@¥UaVbÆÈÜn¥Æ±VUwVmXÿmLkal¯km@k@¯bkVxmVUkk@Ua@¯»UnmÑ@mzm@īÑX¥Ç@ÝxU¦ÅÇUkx@lbUWVXmV@xĵĖ±@@¯xUÆLnÆmx@nXL±lUUVwKWak@WxkbÞĉbUn@@@xó¦Ŏ\"],encodeOffsets:[[103602,27816]]}},{type:\"Feature\",id:\"5114\",properties:{name:\"眉山市\",cp:[103.8098,30.0146],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@Vx°¦VanJVn@baVbkJ@XlJVwôôôV@zÞ¤@nÆÈLVaK@xL@w°ÇÆ@²VĀmWXKWaÈÆa@_nWVnKVlV_UaVamKXUWwnmmwÑm£@ynUkWĉUkWVkkV±çkJmkKK¯¦mnnxxVxVÇkUmk@çķnmak°LllUb@nmL@¯²¯aUJ@amIVaÅJnm@mm¯L@»¯@wUçanlVWVÛkWçKkwÇJk¹±VUÅlġV²ÈÆnXĖV`U°ab£lkVVn¼mVnbèÈn°\"],encodeOffsets:[[105683,30685]]}},{type:\"Feature\",id:\"5116\",properties:{name:\"广安市\",cp:[106.6333,30.4376],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@VlIVkVĀVk°lKÈIUaVJlk²yLn°UWnbVKl¥²L@blJnzW°alV°Inô¯KkKkkbVmôLkéwVk@KnnWlwn@laXLnXVW@X°a@XKlnw@man@w@na@@wĕġġwUkUWb@mk@¦¥mUÛb±yÅn@bml@kV@lknVbmVnlmbÇk¯bWyk@V_UamJ@I@WaVXamIVWkUkbVaUUx@VnkVU¼bkKUxmK@WxnV@n\"],encodeOffsets:[[108518,31208]]}},{type:\"Feature\",id:\"5106\",properties:{name:\"德阳市\",cp:[104.48,31.1133],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@nUW¥²é@K¥UÈÅôa@VÆLUxnKl°V¥ÈmlÅÈV@£WX¯lLln@UVÅlwUm²UVVna@@KnbVVwÆImXwWkIVwÝĕVUaIèmKUzkmWnka@y@l²kJ²VbVkmJUƧ¼@UVbÇKUam@Ua_¯VUk`¯LVÞÇÅ¼mÜ@UÈx@l¼ÇKkbWVxUbÆ¦nxÆ¦ĊV\"],encodeOffsets:[[106594,32457]]}},{type:\"Feature\",id:\"5110\",properties:{name:\"内江市\",cp:[104.8535,29.6136],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@²èlUUllXĊVXlmV@zn¤ÒnxmnXxlUnVlwmU£VVUbl±L@x²mU_lJ¥UklU@ln@kXbmKUxÈblUU@`V@²mlLÞÑ@yU@¯ônWzaVlV@XwlKU£»aVaUwm@mwUVUwklVÇ²LlKVm_@ykUm@mUçkKmxkIUÝ@LUJ@n±kºLXb¼@mmIXa@mamnkWKUx_U`UklwUwmUbV²akbmkn@`UmÒVxUbI`UaÝÈ\"],encodeOffsets:[[106774,30342]]}},{type:\"Feature\",id:\"5109\",properties:{name:\"遂宁市\",cp:[105.5347,30.6683],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ÞĖUxlJXVb°@xUÞmbUxbXbm¤VX@lk°ln@xbÈ@lLVlVUXxlJç²UlwV@@UÈWlLw@wVwXaWm²¹@»lī¥w±I@V@bl@kLUllUVVn@mmUwXċbVb@VUkbmamW@ka@k@laUa@¯b@mmwó@@lkXUa¯°LUamm@ókXUb±bU`kLm¦bnVmbnVmô\"],encodeOffsets:[[107595,31270]]}},{type:\"Feature\",id:\"5103\",properties:{name:\"自贡市\",cp:[104.6667,29.2786],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@lIÞÇbV_JVaUwnÑV@_lmnlab±UVanVxkxVlV_`wVLlXnmnb@WbnJ@n»WaKl¹²@mVI@KÞVlJnw@aW¯¯¯UmVanL°w@akmmUxmULWxUUÝKōèUKUkĉKL@ÆnX@xWÈ¯@Û»nÇÜÝLka@bKnUaVm_xkLX¦Jl¦ÅlVb°I@bnaUmlUVUVIUKa@nmlnLlnaJUbV@\"],encodeOffsets:[[106752,30347]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/tai_wan_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"7100\",properties:{name:\"台湾\",cp:[121.0295,23.6082],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@\\\\s@pS}aekgKSuSsMß`¡CqZ·be@Q^o@gieMp]}}Ľc_Kk{ùA¡r[uom@ÑĥJiq©mŉq¯Bq]ÙYgSåk_gwU­isTEĕiqiUEkue_OSsZaWKo¡­qycY£w}ĩĕS§Z©SN¥SyLÑ¡±Ks^IYPdY[UoFp}´\\\\¬\\\\j]eÜò¤¡ā a\\\\bnUãº¹Ìs¼j®[cíȈEĝĆ`ļf¶®K|VØDdKGpVnUFjpHF`B[pMºxÖjbpÎxp¬|ÎŸÜÒC²®ÜApZG~dÞàV¨|¸`|²tx~\\\\~|dFf^zGĄŚhdL\\\\hĸ¼OªP®lV`p\\\\]Xpllæ¤CpQ|oF}fMRiNSon_²qämMNM\\\\\"],encodeOffsets:[[124853,25650]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/tian_jin_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"120225\",properties:{name:\"蓟县\",cp:[117.4672,40.004],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@EUDAEI@WNMNCBFAHFFNACDJDPBD@@GD@DIFFHEFGDBDEQOFG@EI_KG@OcJQM]RMEKBGPG@[LaCIICBWKCEEG@WBQHCDFD@HSLEJI@IHWECFGAAEKCGDBFCBSBIDCKKHEADMJMFABKOKEQAA@IEEG@GIQAEK@OZEESMOLlu@SLUTYFQCMG@@SQUAYKAACA@IB@BDB@B@DC@@BGAEFAA@BEGKJCC@AGAIHA@@JC@QEIP@@A@EGIDC@O@C@@@@CJCWKABFLBBEBSQGBAAMIEM@AKBcJEN@BEBCFMAEFEF@J@BG@BFABECKFG@AFQ@@F@BEB@@A@@AAAKAE@GFGDECEFEECBKIKDELDFEDYH@EIACDCHKBEB@BAAC@ADBHABKJIAIJICEDGDCD@@A@A@DHCHJHDFEFGBKRKBGIK@GIMHSBCH_BOJECCJCFKKMD@DNJEDEGC@OJCJHRUL@HRJ@H[DCNKDZHCTFDHCFFKR`TANVDFZRDLFARB@HPAPG`ILAR@TERNDFNHDLCLDDCXDYbHF@FEB@LDDVE@JPNfXPINCVDJJD@NJPAJHLXHDNANHhB@DPNLRMTBFRBHHr@`NBFEBOCCBIAQJDHCHLHFA@HSDCRLFTB@HEFLNF@PELBDJALFLTC@EPFLLP@tUHQJDfIHGTB^JTCPDLKAIBATFPADIEGECEMJ@JIAIHGECFEAGDI\\\\SPOXAFCL@BQTQBBTMZECYGAHA@GJAE@HCAEME@IECFKJADDBABLTHHG@ILEAMNDJCDHEBF@@JNFJELDFKTOT@JETBFFHBHEHKI@@IJEJ@XKEOUMS@AF@CEB\"],encodeOffsets:[[120575,41009]]}},{type:\"Feature\",id:\"120114\",properties:{name:\"武清区\",cp:[117.0621,39.4121],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@FWôµ@IFCLIB@EHNBp]AGEAKAEDMGZKFGBGME@ILGP@HEFB@BXMEAHUGC@IHCLOD@X[NWHWPKAEF[@EKIOL@EKGBNMJ@EIEHKBIC@BAKMIACCFQZCF]DB@ERAKADIHGEIBCGIIECFaGLZO@EFCNGAGDGAKL@BMG@IE@ADSDEH[JGC@CGA@BMDeK@EIACFE@@GG@FIAMM@CCGC@EM@ADE@CFMAAGHBDKIEAJG@DOGCDEKAGIS@KFCHKAEHIE]BeKNO[IFIOELC@A]GMBKVYCDDgGAICARc@MW@AQE@DGI@@AQ@@BKBAIQQYEFW@CEADIGGBCEIiMEMF_LGEKMBBDWEBGRC@E_CHYGCH_IAED@FFBQh@FGJaJ}AHRAREF@bE\\\\C@CT`FHC@\\\\BBF@BID@HGDDJ@@FAHKBARECKDAZBJIVNHCTA@EREAMLHDAFFBVFFC@RNRETHD@FOJMACH@CAB@P@DF@@FGDWE@FFSIEMKQDYCCHKb^JADOCIDGNDBdBCFJB@EC\\\\A@BJEA@JAAAD@HHD@LFBCFF@BERDHNhZQHMBGHOACCEBWEGD@PSJKCGEUD@CINLFGHE@AJK@HDABBHTB@F`DBFLBBHEDARCFG@ABJBAPVFE^FBGLGCFG_BMLEXGAAFE@@JNRVJHFALFBEHQJCTbNDHCF@PlFLJSXCHFHfVBTNJ\\\\BPJXC^FAVNFCHFB@FFH@JF@\\\\ABCFD\\\\BDMCAAJKQBGAILOEGHILECQLWFENJHADC@QxNHFJNLDFA@CBA@DUÂmR@FBL@BD\"],encodeOffsets:[[119959,40574]]}},{type:\"Feature\",id:\"120115\",properties:{name:\"宝坻区\",cp:[117.4274,39.5913],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@TZbB@JHD@DODCLM@AP@LL@BNH@ETFN@`E@DNG@CHLBCJA@AICFKDDBKA@\\\\N@AFNAGRBFjFFFL@DHLBLFQPcXAZMJ]GAVHAIZJFNE@JpDRRDCLFDGXA@EFF@CFFPDfEBDB@DCHCFCJDJIJBLI@I@CB@@ADBB@FALADGDC@@H@BB@FZGFCCE@@FMLALJDAFFFEFDFCB@@AHCF@L@@BBB@BB@FC@E@@R@BEL@HEFD@G@AH@AIB@@@FEFEBALDDEFAFO^IF@JCBBFPNJJ@D@PRDCEKBAXL@BIFD@T@JE@BHHJORFDI@@B@JGH@@B@BDDLIFFHCD@D@DEE@BAAAB@DAF@B@H@NGLJLMRDNMfGIEPMI@GDAKK@KIDIJ@GE@CFDN@FE@GFEPGV@TCDFKHBBF@RW@DD@@ID@TJFKIKLI@EP@IGBCLAEKLEN@KSHIGYACSD@SEAMBBMGEBMQBCMIGKFB[D@HDLPHDBC@IFITDLG@IIIFGVBNJDLN@VIRI@YIAIHIC@CLKZCBEE@JECEIHEAKGDGECBGEEM@@DA@CCCBBEGA[GEDBBoNAAH]MKiIAWKQoIIPMFQAEEDMH@FMSUYIeF@EK@BIOEKJEBICFKaKPFAFSE@LWCCFMHDDEKESBOGBKIEIODLG@CCDEQCEDWEMDIEIB@EHGEEDAEAa@@HqDEJGF[AECCFa@WCEIKAAEQB@FCAE^YDERDDJBLNABD@AJGLJF@FNIAMLH@FPKLJ@FE\\\\BFOLGXMXW\\\\C@KPGD@JHDGVFBWN@AEAGFO@KH@JNFAHEHYLNHFCLBFBBHo^MAFGA@KJED@Jó¶EX\"],encodeOffsets:[[119959,40574]]}},{type:\"Feature\",id:\"120223\",properties:{name:\"静海县\",cp:[116.9824,38.8312],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@NGFMDATCNDR@CCbINEHNJA@C\\\\EEGVE@IhE[wepc¢·²^QEKIEKIgiQDkehY£uSDBMkUDOJDHC@GF@CAFBFEN@CQ@BeP@@G@HD@@MHQKi@[IGCOCESE@GMA_OcCGDu`a@VZzKDkJBLNXGDqKEWE@cFEFA@ISIi@@KMABJGBcMuFEzGVH\\\\ATSEUBeALCEMG@CEBUHUCGXaBPtUBBFIBFTDFF@DDKBFNGBJPHXDDMDCLJ^mBIHIL@LR\\\\@LCR[@@z@NFD@LLBNb@RHDBNTPT\\\\F@BJF@BXCFBHHBDLFB@HODADE@@JHVXCPDHCFTLBBFNCDCCCU@@GAABEHHZHBCAEdEjFDD@GfD@DXFCHF@ERFDLBH@\"],encodeOffsets:[[119688,40010]]}},{type:\"Feature\",id:\"120221\",properties:{name:\"宁河县\",cp:[117.6801,39.3853],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@BFLBFJXDb@DEFD\\\\BHEFIrC@Gb@FBCBFFGH@FJAJFNCXFFCRDCFDDH@CKJPJFALPHTALFCFGCENDDKXF@ETEBObLELJDFALIPFAJL@@FfEZJTVENG@CNFFRBNEJOpJLRBXjJNLG^BBpMAAFC\\\\HHBAFDADDB@@CN@FFAHFDCHLHFBJGFCFUNKJJTD\\\\XUXF\\\\^F@DDDQXXBRLRCBDFEVCDLVDpUl@LEDJHAPRFGL@CETGPBTCDDVI@CFF@GFDCCVGLKEK[Y@MECISG@BKNSCGCKWEAaEBEKNGFSECO@GGM@GYI@DÅCMLHPTF@DJHAVVNKEGDETJ^[TJNNd@NOAMFYJ@@GFANDPEJB^aOadSTQSI@MHBDIEOKCG@EEFCKCqXO@@DMFENCDDHCCGJ]AKFoDaGGHYFDHKJiCMFGC@EQ@AEHGAC@IEAATKOHGIC@IXIFEoGE[JCFCDHNmRADFZMF[EEBMO{GU@AOW@@]ZeHBDEHBKEfQkuIWBs@EC@d[@[^EDMTKCEEcI@cDAB@FCBCACmOCG{PYHeBgPwPFDDALFFFCHQGSD@BHFAR[TaFYXMASUiGFL@DQNCJI@@D@PLDN`ETEFIGMCGBCE~CAIFDPEHGEQPHJADFJGHCJLB\"],encodeOffsets:[[120145,40295]]}},{type:\"Feature\",id:\"120109\",properties:{name:\"大港区\",cp:[117.3875,38.757],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@JFFL°_`ONJKDDFIFZN xlb~yFVNRrdJGzDPVFBCTNND\\\\UR@E`F@@Ip@IWGUoawOEE@ÏDgK{İEEMFëCb@KwOCDHHKBDJCDEEEAGHOABFABMCgDLSQ@CFEBMgYIDQINE@AUSwSAdYEHQMEyK[KI@GRMLE@@OqOoBOnpJ@BmEAFHL^FDB[C@BBDVFAHFJENB@sNEjQAMYsUgCSBGDJH@\\\\LjGR@NC@@G@HO@AfR@DM@EFEADBE@@HGDICCPlVANTC¤vgZlfRChjLJ\"],encodeOffsets:[[120065,39771]]}},{type:\"Feature\",id:\"120107\",properties:{name:\"塘沽区\",cp:[117.6801,38.9987],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@|ODHnPBDADEDA@CB@ddJFFLDNSFC\\\\]\\\\@@cFD@nACOMW@M@ITURBRZNHNWRQoOj½fcqAqeiDÿÍyÓįFL|Ch@ÐFFxPpbHVJXo@@JCTR^BPABQA]^MB@bE@@FQBFVJRH@FXtPNZSBAja@@NDTLJrQTHFXZFB`\"],encodeOffsets:[[120391,40118]]}},{type:\"Feature\",id:\"120111\",properties:{name:\"西青区\",cp:[117.1829,39.0022],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@LHAHRHATh`LHNHDG`HDGZ`D@FQDAHXFACNAFLVRTBFOfHDCVBFQH@HSXHEPFB@LDBF[bDbLFKJBFLADBDjLvCPEI]FGEIGCBEUSjcFiBIVWfaHCjN^HtwBBFGPBJGjFBEGECGDONMFAP]TDHQOWCMGAMHKIJEIGQ]aDlUG]VGEGDC{PEbBZmE@@GH@BCA@FMQCFMYMJECELCMI_P¯`]R±¡¸odfx\\\\gF@JUFFH[F@DIBGMMFaJDDQ@MCSDCBENMH\"],encodeOffsets:[[119688,40010]]}},{type:\"Feature\",id:\"120113\",properties:{name:\"北辰区\",cp:[117.1761,39.2548],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ROHFFGCOJEDB}DFHANDJHFEFSM_KC@O@CJ@DIRM@CEKKALFKACHoLSJSIBETDJaEIIE]E]K[MYUYQILC@GF[MGNKEK@A@BCWECAIFEFYAGFOMI[OFuDiKACBCEKIAELaKaCE\\\\CA@KEAFOWGGTG@ERUACDeGEPSAUQKHE`FNjNFJADHHCJFB@DEXZFRRBJLA@AR@@BJ@CHF@BRX@@NQdDBBJhHCCZDLUNA^H@BKDPFEJ\\\\JMPfL^AJFFGLBDGLET@HJLBCFHDCPH@BIJFCLGABHNBDEF@BCN@@FHDDDN@BNEJH@@HF@DEJB@FfLNC@AHB@DHD\\\\IFGTCBCF@@JNH@ALKHBHCHBDMFEP@KYbHDEJF\"],encodeOffsets:[[120139,40273]]}},{type:\"Feature\",id:\"120110\",properties:{name:\"东丽区\",cp:[117.4013,39.1223],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ZV\\\\N^L^FJFFJIbSCAFTJTIpKDGLBEKLBjHTVNBZWbE\\\\SBQGE@ATCRHDGEEKECBECxOhOfAZGA_YEEWSGqRKISC@Mb@BiTAMYsOEWG@IQEURA@EF@@acUOXQRYCUDCHDTEF[SUEgAYDcVGJM`iAWDWLQRMHUHgDsDBLHJFCFDFGHBFFVEAGHCJN@RJFPIhBD\\\\FENCPWA@LFBAFHBEJUEARCDIAEDQBRNa^\"],encodeOffsets:[[120048,40134]]}},{type:\"Feature\",id:\"120108\",properties:{name:\"汉沽区\",cp:[117.8888,39.2191],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@LMEI\\\\MTABKN@FCDMH@COAcH[AoēAM¡Wa[MeqpQRMXMGQYQASV@J@NNXDPmBAtJXlveRLFGACFGAYf@^X@BPV@|HNPFA\\\\FNEEYBCnQGMDCDE\\\\IHFpEFWJ@JJDGHLPBSFB@JBDGHBFR@@FHDNEjDLICGZEHGbHpCLE^BHIDDCGDCFMNE@CP@rWLDEDFFH@\"],encodeOffsets:[[120859,40235]]}},{type:\"Feature\",id:\"120112\",properties:{name:\"津南区\",cp:[117.3958,38.9603],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@TLv@CNHFFBHGZFETNPhCVGNGRQXKXCjBN_HIdUZChBVF\\\\TFECSDGVCZDRQPWdVNA^]RBBAAOQ]DSE@F_Q@[VMCSMADUECOHycIqMQEU}zkawENRDENB@ADG@@HF@YnaAOF|CDFHUHH^kVbCR^JHIFLJNGHBDNPXGRSCO^EBMNCPDHHFAFiEIHOAEH\"],encodeOffsets:[[120045,39982]]}},{type:\"Feature\",id:\"120103\",properties:{name:\"河西区\",cp:[117.2365,39.0804],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@d@hZNFdcLYXKRCtCMOFSYEGHEAGEDMu@SKAAsx]GMTGt\"],encodeOffsets:[[119992,40041]]}},{type:\"Feature\",id:\"120102\",properties:{name:\"河东区\",cp:[117.2571,39.1209],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@ZBVFFIGABEEA@KXBDOFM[EACJgOIE@QIMGDBHUFEEGAEHECEDGIAKQDWLKZcdQPEP@FOFBJTJ@HNORJf@DBCN\"],encodeOffsets:[[120063,40098]]}},{type:\"Feature\",id:\"120104\",properties:{name:\"南开区\",cp:[117.1527,39.1065],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@NMVDCG\\\\E^B@HlB@YEDS@CHsNSiMGDebUXAJEjidVTAFHDFJ\"],encodeOffsets:[[119940,40093]]}},{type:\"Feature\",id:\"120105\",properties:{name:\"河北区\",cp:[117.2145,39.1615],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@DBXFADB@L@LFHM\\\\NHED@JKZRb]QMRAFCJBDCBQYADMCAe@QIMP@GSIAIPE@E[EGH@ZEF]^HJAXK@KF\"],encodeOffsets:[[119980,40125]]}},{type:\"Feature\",id:\"120106\",properties:{name:\"红桥区\",cp:[117.1596,39.1663],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@J\\\\PNHEZBFEJELEL@BWGI^]FEkA@G]A[FDHUCMNEHJ^\"],encodeOffsets:[[119942,40112]]}},{type:\"Feature\",id:\"120101\",properties:{name:\"和平区\",cp:[117.2008,39.1189],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@DT@FCHG\\\\FFOROMEgYc@\"],encodeOffsets:[[119992,40041]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/world_geo\",[],function(){return{type:\"FeatureCollection\",offset:{x:170,y:90},features:[{type:\"Feature\",id:\"AFG\",properties:{name:\"Afghanistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࡪ͇وŐǬϠڐŶӂʮǚڦ۾ǌƀ̚ІɣʪҴMوǯʲĹ،˒˰ǋ˖ϪԈiżŬĘͺβ̈Ҕȏĝʱʪ¡ý۷ͪ˟̊ǰώĊԼϖׂ×ࢀAƬʋӧĥяƹ७ĭࣗǭӫλȤΣĪллΛ͑ɳ̡ߛͦ։՗ɅΥԕ²ԋ͡ɿ̳þٝŋğɻسDҵӇ܍થΓבôǝȁԇņ࠿űටіހހåզُƚßՔ˟ڢάҢιŮɲؒ΂ਸ\"],encodeOffsets:[[62680,36506]]}},{type:\"Feature\",id:\"AGO\",properties:{name:\"Angola\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ȸصʌԋȘ˕͐ѯ֊æˤŠҬşŲɀɂӨԶ®ƤіHñ̡৴RfՉǞ͕ūԑÖԫ˪̷­ৃȼüκsԴŴϦ¹ĘʹĩСƨϿů̿î́ყZᦵ֤ۋպԽ໳΁᎝Š׋Ж₭ŵÏԃϞկ~ԉƝЙǅÿՈŜ݊̂ޒªΰ˚ݶȨΆӘռːϐĘج«ӊʣ̜ɡԚȵԎ®Ǩʶͬʭ߼ǣ֚сՐĄǎΌŔʒg̎ĸៜ[\"],[\"@@ɉėɣلͼδʪƘ̀˽̩ǯƍɍλ\"]],encodeOffsets:[[[16719,-6018]],[[12736,-5820]]]}},{type:\"Feature\",id:\"ALB\",properties:{name:\"Albania\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ń˷ŢέΒȳiə˗ŧ»˙ϷСƛÐgȂү˰ñАîֶŖʼƗƂÉˌθаÂƿɨôǴɥȪďȨ̂\"],encodeOffsets:[[21085,42860]]}},{type:\"Feature\",id:\"ARE\",properties:{name:\"United Arab Emirates\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ƭ¤ɱڂƂ۞uԖ{ֺ֪ظՠՎԮǆ˹ŖڑѕGçճƪŝϝǑE΅ʓΏuͷǝǱᡋъ͏࡚Ț\"],encodeOffsets:[[52818,24828]]}},{type:\"Feature\",id:\"ARG\",properties:{name:\"Argentina\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ߗ§ѓ̔ԑx࣑@Aሞ͒ϵрؿનԋ୲ȿϙп\"],[\"@@Ӵ؇͠ڰॠƊǷ໶ോۊŷਆاࡾ͡Ŧχࠡ౧ࡒɭ़ŷڔƈނ٢Ǝݐжǈфӝiڣۻҩ֟΁ॅࠃ૭ଧȽڥɣࡹT࠷ǽȇÝիËѫ੨ܙŗ׃Հν§Ч߯ઁఛ҉။ǩउĎǰԅǣػƺщԋ̏ࡱř̪͕߱ɗŜ࠳֨ʧҠˆʢѧޛʻڭԹūࡋȣ҇ߏEڃљʋؿؙࠞߦǝ˿ݭ঳Ӄձটލͧ΅Ͽ˔ࢍ֔ӡΟ¨ީƀ᎓ŒΑӪhؾ֓Ą̃̏óࢺ٤φˈՒĭьѾܔ̬૘ěӲξǄę̈́ϵǚˢΜϛ͈ȝॺ͸Ǣƙ਀ȠࡲɤݢԊ̨ʭࠐEޚَոo۰ӒࠎDޜɓƶϭฐԬࡺÿࠀ̜ބռ߂צԺʥ͢Ǭ˔ඔࣶд̀ࢎĹɂ۬ݺશȱ\"]],encodeOffsets:[[[-67072,-56524]],[[-66524,-22605]]]}},{type:\"Feature\",id:\"ARM\",properties:{name:\"Armenia\"},geometry:{type:\"Polygon\",coordinates:[\"@@୞ƀǨə͌ƣǛɁ҄˽ʁˋΦɫϘƏl׋̣}΃ӢHżχCʝɤǩuͧʖرȼĄФƛ̒\"],encodeOffsets:[[44629,42079]]}},{type:\"Feature\",id:\"ATF\",properties:{name:\"French Southern and Antarctic Lands\"},geometry:{type:\"Polygon\",coordinates:[\"@@ը˃ߐĿǅɽϣಇÃq҂ŮΎÊǢ\"],encodeOffsets:[[70590,-49792]]}},{type:\"Feature\",id:\"AUS\",properties:{name:\"Australia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ߺ́ҜŘپǊԎÉÐঽ˽́ēگ̉ɰ׍בǧ®ԫԭܘŗֈӝܸtϬռõ\"],[\"@@̢ڇբ̈́˦ΡЖ͟đϋǴܛŸнɄĹɬܕąѥ˖֭࣬ѭצЋ֞λŋȯӔՃࣧ͜ͲȂ;ηȴźƢࢹ׬ԩϸ͋ڀڹʀڭtӏËԳА܋µݓơϵɩݡjӕǕ׻χއثЭ̫ٱ˫гʝܧ͕нɅػŉׁªˇӕ̇वޡ·ϫ͙ԕέ۟ψԥƪżѬҝǃ݁؉ܩɪӉƄӑÔ߿ʐիԮƻْțьЭ;߱ĸˢРȯزЧ׉ݝƷѮҬŶӞ͘ЬãجہܑԿ˽͏ڛٽΊ~ҀԿ،ѹ̀ǂȘઃԚןz߯Цຓāછ̝ख़˫ߡÈࢻљܯȗǉѱ̳Ϳ܉qՅõݑƶ׿ğֽԁ҃ʕуʁЗˋؕ֛Bࢽ՜ҋǄlӖкŘƚȒ̠ĺאģӼѻࡖƏӒӎͭնsʚϋͰĽڄӓڔřΪτε˳ެиʑʞ͗aјеڎă˄țʦĠӠǢȸŘрęӮΎ؀Úٕ΢׀ۀˬЦΪٜ̰ϤàɴĻڎ̺ԚĤŶȀɞüҬoࢨʖҚώɊ҆ӲѐͲvҘט܎ΠܩΦǚ̗Ј˂ТψǻĸٖҠаȮͨцƜ`ɼτĭdɂτŦОŔبϫҲӽՂMՖÿǱҦДڪϜɘſȾκӒԘ̒јıۺǂeі؛ˢ҂Ū֎ȻҀ·ۼɋʈĐԶʵӬʊ͂ñȠǊϬеɡ͉҇ͻ˿Įͱʙп̗ЭÔʁڜҫ٨ˏѠ́؈ӻʂBѰɍŶʷߤ˵ֈ˼ǐҊǠόľҤʰڞŝОÔʔīӔŌنǈǠŽˬȮѾǆҦtʈ̸̾ʂЩÎՃȾķΛ̨ёÚӇ̥\"]],encodeOffsets:[[[148888,-41771]],[[147008,-14093]]]}},{type:\"Feature\",id:\"AUT\",properties:{name:\"Austria\"},geometry:{type:\"Polygon\",coordinates:[\"@@Û΃ӁCǎǻ˧էǇƗܽsщȏۛÞயɐȉ̊ࠧƣĭǅԗŢѕxϝƶźȴƬʪ²ьɹŤɜݎ׸ƮЖ}ˀǣþƜšո̠ń̒ϰز˓ӀΆ̐ÚٶʱЂªϰǁãŃČ̅\"],encodeOffsets:[[17388,49279]]}},{type:\"Feature\",id:\"AZE\",properties:{name:\"Azerbaijan\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ʞɣψDGŻ΄ӡֽŒщϰƃ͆Ǫv\"],[\"@@ϊËƞɈԈͺѴѵђ׭ϺʸɧۗãƣٵƟ̭̍ȝvзȽ¥ԻѲ̂дʝʚ̿×যإk׌ϗƐΥɬʂˌ҃˾ǜɂ͋ƤǧɚȶƎضʍҐ¹ŘĲбҔɔŚʀ׀ԙ\"]],encodeOffsets:[[[46083,40694]],[[48511,42210]]]}},{type:\"Feature\",id:\"BDI\",properties:{name:\"Burundi\"},geometry:{type:\"Polygon\",coordinates:[\"@@Á০ɃϢԜßʲӎҀÅ¸ͧǸȏT˗ȹǭ͛ѫ̧̥΍\"],encodeOffsets:[[30045,-4607]]}},{type:\"Feature\",id:\"BEL\",properties:{name:\"Belgium\"},geometry:{type:\"Polygon\",coordinates:[\"@@؜áުǪՐοҦȝħ֧ɕĝһܿϦћßדІϷͶϷ`ũ̒ڪǔ\"],encodeOffsets:[[3395,52579]]}},{type:\"Feature\",id:\"BEN\",properties:{name:\"Benin\"},geometry:{type:\"Polygon\",coordinates:[\"@@ۛįȹ׆ኞǛǦЮ̇̌ʱʞņѶ̀ĨǠξЪĀȀʤˮʘ̠F٘ә˩ȎӽǓͷĘɧСԳʵʳǁՉt՗µണ\"],encodeOffsets:[[2757,6410]]}},{type:\"Feature\",id:\"BFA\",properties:{name:\"Burkina Faso\"},geometry:{type:\"Polygon\",coordinates:[\"@@ֹɐϽ̍Ƀϗǰƥ˦ϙǾÅӦɮΤo˴ښۢŬּɲȴОœΚǢŘɎٴϖǆˀ޼ΒҦŢɀǇՠJáСŔϣӀչНॺȏmֻǿʣЩÿǟν˿ħ݁lϳâ˓ƉωÖร¡qӉŘم\"],encodeOffsets:[[-2895,9874]]}},{type:\"Feature\",id:\"BGD\",properties:{name:\"Bangladesh\"},geometry:{type:\"Polygon\",coordinates:[\"@@i׽̉ŶÆگʉѬµєǅКΕӨޟü΋˃ҳΧǠũƵʃĠ͗øŽۖ̅لƜԒԫɤȆ̪Հ̼؅Ѽ֮̔ږεВ£ô׏ߞřު^Ӟƛϯ܅ϕµʷӍҢѥƎ՞ɶFѶ೯\"],encodeOffsets:[[94897,22571]]}},{type:\"Feature\",id:\"BGR\",properties:{name:\"Bulgaria\"},geometry:{type:\"Polygon\",coordinates:[\"@@ʎΉ͚Ö٦ſ௾«иɌবȜ̩ؒӴĕѥΏ̫׹˔ӏܣŒࡥ˃Uлޅÿס̊ڧɱة|Ñ֊сːƒŢĝĴƘˌ͌ˀСδ÷̬ȸȐ\"],encodeOffsets:[[23201,45297]]}},{type:\"Feature\",id:\"BHS\",properties:{name:\"The Bahamas\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ȵ£ɇӜ̿ʐǾՔʨۣ̎Jӥ\"],[\"@@ࣷƅÏ̴Ђäֈ{~ɕ\"],[\"@@ƟׯƷņ`ѮϓͪCĪڐϗ\"]],encodeOffsets:[[[-79395,24330]],[[-79687,27218]],[[-78848,27229]]]}},{type:\"Feature\",id:\"BIH\",properties:{name:\"Bosnia and Herzegovina\"},geometry:{type:\"Polygon\",coordinates:[\"@@̦FȿσМ͓ūЃȡƽû˙țūҥݓ͈ͅΘ͋Ȅϭ̾ǻʺЩϾǬΒ̞ȕǼǨϾnܠƓ׈\\\\Ϟȅ\"],encodeOffsets:[[19462,45937]]}},{type:\"Feature\",id:\"BLR\",properties:{name:\"Belarus\"},geometry:{type:\"Polygon\",coordinates:[\"@@߼Mࣰ̈́ȚӄېːÿϔԜƚ͖ࣘࢮɁŢȻѲĴࠒȧĊЁǷɧՄս΂Ƴ»Ʊ֦Ʃʎɡ͝ǿڳǉÿȠ˧ȸ՝ܝ¹ʵȁÃхͭĆݷ¡əȞ̿ƥ́ŨڍjफȬࡕàٱmҡɩГeϐʷϴԌǢLͰɷ͌ϊ\"],encodeOffsets:[[24048,55207]]}},{type:\"Feature\",id:\"BLZ\",properties:{name:\"Belize\"},geometry:{type:\"Polygon\",coordinates:[\"@@OŮĸƴı̞ԔǄZHūǄGaɭƋεôŻĕ̝ÀăīщǓɟƱǓ̅ʣ@àॆPژ\"],encodeOffsets:[[-91282,18236]]}},{type:\"Feature\",id:\"BMU\",properties:{name:\"Bermuda\"},geometry:{type:\"Polygon\",coordinates:[\"@@OEMA]NOGNG\\\\Q^McMOI_OK@CQSGa@WNLVWHFLJXVFGJ`ZRTDLeeWKIHGIK@@[MQNi`]VDTBHCJAPBJLVFjT^LV\\\\RJZRn^RH`TfJjZHHOTTFJP_NOX[EYQQKMEJOLANJH@HQHAARF@ZEPS[U_IcRQXE@EEKKOCGGCQCOGISKYGUC\"],encodeOffsets:[[-66334,33083]]}},{type:\"Feature\",id:\"BOL\",properties:{name:\"Bolivia\"},geometry:{type:\"Polygon\",coordinates:[\"@@य़͟گӳ؈વȲ۫ݹ؅ŗ͡୆ҋऺˆ߾ѳ΢ŏ؆ЫֲՌ࣢αۺȖ˰ƭ̶͠рh܎¤נǸ˶ܩഠزíѠnȈʪ݀;Ѷ͂સƚęؽļ͓ãࣰ֛ݫऴƑ̻ͦ֨ǕΐʑՈTӦʟӟǐʕZγʓa͒এྖūӟĜͧҞɽȤԹƫڋɯρĄӏʿǥaʶ޳јޭ^ัʓЕ݋sҋͥ৕ƉǸ\"],encodeOffsets:[[-64354,-22563]]}},{type:\"Feature\",id:\"BRA\",properties:{name:\"Brazil\"},geometry:{type:\"Polygon\",coordinates:[\"@@૮ନॆࠄ֠΂ۼҪjڤуӞеǇǒӜŖӼBҦ̡ƴ̿Ƌ̻į͔ýޔƿʤ֥ɪ΃ǏࢱǈÈଜʝҴˀǦăӐɰςƬڌȣԺҝɾěͨŬӠྕ͑ঐʔbYδǏʖӠӥʠՇSΏʒ֧ǖ̼ͥळƒ࣯ݬä֜Ļ͔Ěؾષƙѵ́ܿͽȇʩџmرîӃƟϡĪÈ౨ۏӷݏv҄ͅ֏¶ǲΰұԞΓݴɜƶA΢ԖʎċҔɊ̈Ôϼ०ֲێǊŔŴݴϚᘰpθſӔύ̬LؐӀƒǚē͐ӯĔYՀ࿖k˦̂ɸˉǐӷǂļҨѻٸÆǌʲشȞΊƐĮΤ׸ʆ¯Ǯ܅ðśՊ֞ϓɒǀþجŅڜȿʐȤ؀žल̮͎̾ŏʂѪȜȗŉσ̀ŵȖϷɷ̏ƅ܏ɌыÔϳԬϿЮ¥ĢǒˆϠƦ˚ɢҬíȲҚçøǢƗǘĎʐͺõЈĒӔǱξǥʺɪȊŘɿДÒ͒͊ʴؤӼޒ˺¢ȺҫҼ฽҈Ƒxׅمەʾʩ๤Ɓࡃٔր੐̟ඊԡШӱƏҫ঎ʶ࿐ѹఴఔ۝੸व٪ʏܖ̦˅˸੭Ɣԗͯ൹ёշஅୡՙोثܯȿgɻءÒ༽ɹಓęօˇͧƫ૱࡛઱ƛࢁڹηȟԋ࣯Fೕ͓סύवʗ঩ڝ܅࠯ũطƔҫƽࡓȏЧחҥट๕݉ڗ֯Ͻϥߛ։ӑɷӈψЊӟֲڇҬࡹՠ̹{ࡅٰձę\"],\nencodeOffsets:[[-59008,-30941]]}},{type:\"Feature\",id:\"BRN\",properties:{name:\"Brunei\"},geometry:{type:\"Polygon\",coordinates:[\"@@ͬ̾܎ҢЯ·՛Бǭ˹ϥѦ\"],encodeOffsets:[[116945,4635]]}},{type:\"Feature\",id:\"BTN\",properties:{name:\"Bhutan\"},geometry:{type:\"Polygon\",coordinates:[\"@@΂ˍÏԩۇ{ۿÈՇſޅ͊kǚ֌زҒɈ׸șѺqπɥ\"],encodeOffsets:[[93898,28439]]}},{type:\"Feature\",id:\"BWA\",properties:{name:\"Botswana\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǜƭ˄ӡॎइήĝD̑ʚՑٰŹ՚ϝ஑أݭع˩֓ʧ́ҙãƧГďʽ՝țہ¤БɾΟĸХșȵГЉʧпϑ׻đȇ̐üԠӽߚɧŲAរࠤ|Ჾشಖ͎̎΍՜ͤʮDӂȎưÙ͔ڣ\"],encodeOffsets:[[26265,-18980]]}},{type:\"Feature\",id:\"CAF\",properties:{name:\"Central African Republic\"},geometry:{type:\"Polygon\",coordinates:[\"@@ۜÚƺɎƔgȾȏ੔͐Τ͠Ѭ̌ĉ̐ʂüߺ½߆ϴ؊ࣺю;ՐƜĪΫӜԿF΃ƋΓÄʻ̆ʍٖοҢͻT˗֠ѫΖεɆԋغͩƊˉˣęաpكĘ̹ïųȱ˕}ͧǲधнϥĎŗÝʥԕطǐؙĊ՗̴ۓ˸҉˓͛яùדգ²֩ƘԅѻѯޱėʐϦϧ˔̳Ѡï̠ЇѮæʢċΞÞٴȬƴц࡜\"],encodeOffsets:[[15647,7601]]}},{type:\"Feature\",id:\"CAN\",properties:{name:\"Canada\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@؎œުxЯ΅̵Å੥Φȿˬ͆ʸ̎С\"],[\"@@Хcઝ˂ޯІ̄î૆Ɂ࡮Η|Ʒ\"],[\"@@хŝൡϢʥ̘ݩ̌Ưʈࡻư͕ҜðȚࢨǿԨŵ߄ė˺̃дЋ࠼΍Όҩ\"],[\"@@։ܿո˴֠ǵ̏̉ݚɱϰȴ࠼ʵʹ؛טƞņѿʼԷΝ݉ϝփǂǾیɻńইܯԅצЂ߫Ȳࣙ¹࿅~ŹʠԼ̐λɬ۸Ԓࢄ೾Զӎܲ̂϶ǋɫ҅Չ\"],[\"@@@@@@@@߰äʥ॓ܶگͯDԑϪ̵ϮчʾƻτºˎЂŋ\"],[\"@@͡ѳχîəʢ Î͖ʦΆkɈǣ\"],[\"@@ঝҧץnǿɪزϲ଼SiǍ\"],[\"@@ƼυјżӨɗं˽४ʽöЍؤÞ׶˥ݙ˃ಳȬҽϚ࠭ҁ஡ѣ˿Ӯଗăܴдņڌ˺ޔ؈å\"],[\"@@ष¥ȿЪΦҼޖŜپɷXέħřձʛ\"],[\"@@Է̍ଉʬۃğଫϘ݊ʼטζࢼʃԎƯʦǅԠ͍\"],[\"@@G࡭૰ڄ৐եʡح߾֥࢚؈ؖܨ°ईஞÝఔūૼй¼зس҃פ҇ŃУ࿩חୡŻࢃʨʣуߵ۽ʓοই֩ளÇڏΡÇձ঍Ŀਉڻ࣭ु͙ڏ±উంƕϜ޻ϼّ୲ǔ༞εࡀ͋׺Ѕ੆ɳࢸΟ൶µࣴąƍܫʼࡋ،ळనߗ٨˚ҔࡺѭೢףѶഎЀ॒לҮהç֭֘܌৷لলࢤνݾ˫ಾגȘ෸ɫࡸć۠ɚ޴˵ਚӣʮ͙ຄÛ}۷˪ਜ਼ގſ،ӵ௖Ұߦऔ֌ϸٺݣબੳघ৙͵Յ૤Ӂݰӓംɏբˍͬ܃ټŏͶͅÖऻ؍́׽̏൯̗੏ۑ෇ƋᅛǮుPࢇÍ۱׽ੳω௉૗ॵޡ܌Ɛഘૄᄈ۪సČݔЫߍ֟ˊࣟ˜هતп൸ŨࡆीÎ؍ժ̥ਣսᇷԁ࠯ͽय؁ٓÖ܆ฤ۞഍णĹջӆBନύʐ֛ƛ˧ɚٙىʱٹ̕ϡΥŽˏ¥čȹ໽A౥MϛƷࢵ؃Ŀßˍ͝ޗBࠛGϛƅƊǑøʯeďષлࡽſউ҅Ɂ@˷ƂĥŦnĔȂ̎ЂҦʘӺǙܴǵނ࢕ЂľƬūĺɳ@ǛƆ¥ȤǍēɥ¾ĊȡĊćɚٵːڹ˪ࠑ͘߁̨ݧʃ˝Sਕɔڻŉࠁʺ࡫Ɔו¾ʻƜƫҤ˳IE͓჏BᮝA᭯@ᡃ@ᠿ@៙@ᢡ@ࠛ@᠁@ᛷ@őF྽ࠜ׵δຽΐҳݖŤԨ੻ΨƧڴ৭؎iѠҲКwՌෙ՘࡭ॠՁ׾ޑϚ֣ΈѿѢࡇ˕ࠇҹݛւדπࠋɸࠟ|JⷎNᷲ༬ȭ೘Й࢘û݆ΖৰˀఢĹ఼τ൘Ⱦ־ΑظȠȊЄ׈ęෆݫ૦֬ŖّਔƐ͆ʖৰ·౼Λዸ̭ୄƛࠖÄଊэ஁зຶǷᗘĲܒƦࣆԋࣴьࡩΦժ˼৾ڦĎڴȩࡊҗरä๢ϛಬƄ௬oĭԺݞƦದ˵KߑՖڠڰuϞࡊ࣑԰কͺäघশ؎ૌƇࡘχଞॅݗЭ༠ǝ\"],[\"@@нϿሎʬୠщॊіސ˟یࠛфΒ׭ࡰ݊Ŭ࠲Ƈश͹ՆࠉʼץථеະЉĝσൡã՚͓˱ູ̯Ƃฃɪঋ»ཅ˷ᒃű๻āҕІଫɮݙģਛږ֔ĚಘƜஈરƦྷȞᅗã஗jѷ̴ዎͲಗ[ืɚ۶ـגͮᖬԠ࡬ǋ\"],[\"@@݉ևಹך˸Ş૸ٔȁ\"],[\"@@öɵࢿ|ࣟjࣿőʑ¼ऍѾ̠ИÈነěชң\"],[\"@@ڎԽޤڴᒆΈ෺ࢅůջဒʒߒͮሀыୄЏŊν༚Ȑ࢘՗᎐ܸͩ͹ߐ޻໯ϹጘչೲȁீޙೖÇʽכ้ঋਗά೓߲ઙĿŁӕࢪӥଜϯΌɟմࠩ́׿੕ɪᑏڨஎܣ࢔ԕƎ̉ᗱͲᅩӤ৳Ц̌ʂయќ௥Т`ʑᝡƅ܃˾ֆؤ཈dႸņ˫̜̊оચࠊɳϊ͕˾౿Рၳ˺՞ɆࢷԺ݋´ڏ˸҇ʛ຿ŅᵝȈᄫʚഹŴۥ̐࢞Ϧ஝Hˉ࡚٦ݨࡺ΄ᓪɢأի\"],[\"@@৊ǯຄńɖʑ޷Е౜αƱݳ൝͗߳ê׉͎ᐡٮjˎ႖ĽएռসР\"],[\"@@࣓عय़Խ݆`кѮΨ࠰ɮცྈȱళݟ৉Ǎ\"],[\"@@ᕍЙѷςኹѺήΤ׌ؘܰւࠑԦᭊƀ஬ǧᒰ±ࠄʑࣖΝ੍ɃᏝןਫי@ν\"],[\"@@ҙ͙௝Øৱɖ҂Ϛீɨܼ̬̍ˇ\"],[\"@@ٞϵљϣس൱đࣗƈjӬ൝ÝÁٮࣜౌ˺ஂµÜŎ\"],[\"@@̙͢ݠƘࢢƪЩԝЋ᭗Žᑯη౩mŅ˜პϊ④ĳ୯Ʈପࠐ߈ɾᛄ˳๶ӻฺÛறߨޔ̪ࢄĭ˲Џ\"],[\"@@ढ˓ကFܨˡȑ́८ȍՔȧଊ௬ë೸ǼႊðീÏ࣒ͅȊ΍ԽɟభǷ੽ĸᜱŻႫcഫļᖁ˔̃ҦĹжࡇξ჋ĺঅʼ͂ΈႾÁ\"],[\"@@ŗ٣٩̇޹£༝Ϋ഍ŹଗǼ@@ුؼႮծಆ[ସŬ\"],[\"@@ϣy༽Âɡɼၜ]מƻĵĩ\"],[\"@@༩ʋఝ˔ڼˎ௮Đஈſ˩ʥ\"],[\"@@৽ǏඉBbŤࡴʦҌદǝ\"],[\"@@కǥۃȚέ͂áΎજӪÅ৐̇ɫ̣\"],[\"@@͜Ε൏Ĥ൩˘ሏߺʠ৫ȮÕ͐࿶ŕᗢ̫ٞЍ\"],[\"@@০˕ଽʟ༇ك๥Óდņࣗ΄^̦ڔɢ໡Oए˨ՑϠ׌ώ׊ʲࡴÎοȖዜ¨੶҅මǵ൞ǃڒև\"],[\"@@ᖢßᅮŅ໤ɫɡᏅη᎙ǟݻȉᆬJጡԙേʃ෯ۇႿƓՙǡᡷěୈĿׇƭ۞бߙ˽ಛʃЋ͡୫ʣŞȏ෬lȳᖟԋᔧɴឿŻధĸཟªĿЖ༊Ȑб؆ԢÐᖤγ଩բഹǈڼ͘๰Ȩʄ̊஋͠ΥѠᘞڒĝ಼̪ቃĬ᰽Á๣˸۩ͼগʘȁ˺దǈঘ࿲ƌం̺ਬ©ࣤɽٔҒૐƈບĢᢲҀĝ᝚ƚᆔÁᆒÁ\"]],encodeOffsets:[[[-65192,47668]],[[-63289,50284]],[[-126474,49675]],[[-57481,51904]],[[-135895,55337]],[[-81168,63651]],[[-83863,64216]],[[-87205,67234]],[[-77686,68761]],[[-97943,70767]],[[-92720,71166]],[[-116907,74877]],[[-107008,75183]],[[-78172,74858]],[[-88639,74914]],[[-102764,75617]],[[-95433,74519]],[[-123351,73097]],[[-95859,76780]],[[-100864,78562]],[[-110808,78031]],[[-96956,78949]],[[-118987,79509]],[[-96092,79381]],[[-112831,79562]],[[-112295,80489]],[[-98130,79931]],[[-102461,80205]],[[-89108,81572]],[[-70144,85101]]]}},{type:\"Feature\",id:\"CHE\",properties:{name:\"Switzerland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ƫŹȳϞƵіwá΅χƙةŀǻ͹ЏơƄһ˵Л¡αǶ˽ςБſ^ϠؚҾɈϤûɲƞ܎MǦǼ࣒ʱ\"],encodeOffsets:[[9825,48666]]}},{type:\"Feature\",id:\"CHL\",properties:{name:\"Chile\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Bም࣒@Ԓw˧ͻܛʻЭӻä؏ʨ࢟ŨੑҸ࡫Ҏୃशۘǭ୼֗૜̟ѢϬ˘ֺޠΎװı\"],[\"@@͢୅؆ŘĺɁ˿ࢍࣵгඓǫ˓ʦ͡ץԹջ߁̛ރĀ߿ԫࡹϮฏɔƵCޛӑࠍpۯٍշFޙʮࠏԉ̧ɣݡȟࡱƚ৿ͷǡȞॹϜ͇ˡΛ϶ǙĚ̓νǃĜӱ̫૗ѽܓĮыˇՑ٣υôࢹ̧̐֔ÄgؽΒө᎔őުſݝPЙȷݷ̣Ɖ޹Σoॅ˚१ג@@ਲ਼ӔˁՒʄӰх֒Ņ෤Φ߰ࢴٰౣʔߞݒ˸ඊत̏Ѯგ֝ɠʿ਻ՉŠ˂ல˺༒ϮָʍࠎéूΠԨപ׈എΤబȗ఼ʤۚĵਞӮਆưྺ˒ნˀሤÕ൘ǩ஄ќɌɦњЬֱŐ؅ѴΡ˅߽Ҍह\"]],encodeOffsets:[[[-70281,-53899]],[[-69857,-22010]]]}},{type:\"Feature\",id:\"CHN\",properties:{name:\"China\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ԑഓΫۏѷ܂ĩخӶࠜڦَϨʡƣԓ\",\"@@ܩЗۏʺyܢаϠࣾɾӚoȊ͍σσșӟ\"],[\"@@ฬˍ঺ׯͼ߃౨Cܰͨ൸ʜѳݱ͙̭˽ः֡ࠇ৵ƪܝ̑ɜܙť঳ѕwLяթӺͯһಙαƀѹܩЍ˂ֽ׭ऑҋۃա୭ʑأϽࣝɭ҂ϴǭ͞ږ֠ѹѲܷ̓ॉ׏ԫթ࠙¡ѓϻѸ֩یƏϕڔʕस׶ݚ͝լuƌѱஓɻϻҏࠇућיࣜҥͦࠝԞޓ֮٥_دՅɯȪ҃ӶʻŻۃɇڗҷ÷ؗࣧڹિޭোିޡୟۻृĩԣύ̃˘Ӈй୭сࢵŹ˻ࢱҭ·ə؎Ȧ͘ૻːЇƍࡍɔЏ΀ƄӜޏƶЙܑ̀҃ࠇīڡJ҉ȳѥūŶ॥҃x÷Ȣ}Ύ؝ʓεƸر͂ʔۤՏǎȧޜࢱƓĴাߔۮۚ{٠νȨ˭ӶӭÙࣟŲ˴ΜϿԺ׳Ν۵ȸॷ՗އسڳĿοɦѹr׷Țґɇ֋رëڌԟǭওĈोȖڿτٵǔ˯ЖҽŦࡓոکʴΑȩଢ଼טࠛՒɽऐ׾őіͭјĐۆࣙঠ൧ͼʝ٦ةϼƫʌųӎ͜ԛȔ˟ďɇިʈȔśȠߤЈ׈ǐࢸő͆՜ંĲͮ̚೜ҔŠȐãӐּɔݱฦဘͲјȈ؆ຒဠˡҲϞ¢ࡆۦĀٖ֔͢èɚו۸ѽப̿׆ڱ͕ঙ̢ηূƝଆŝ৪ԻԲġϤޟӲӿऒnჄȉ૤Ŝࠦůఔԛ৮BόʽঐҌബ̈ాঘ̒׾҈ך˰Ƌˤˍ͔ѴըӀùࡺǝ࠸Ѿ౲͚؞֊נʆ௠ŐڐĥĠ̘ݿזګː٥̳ࠣžӇŃɏΆר࠾Цو৚̓ஆՎQτݸࢾҲːWҪңȦۜмਰƲ૜vసʡ݈̱԰ࡏ̀α̊ԩ̶ࠕ\"]],encodeOffsets:[[[124701,24980],[112988,19127]],[[130722,50955]]]}},{type:\"Feature\",id:\"CIV\",properties:{name:\"Ivory Coast\"},geometry:{type:\"Polygon\",coordinates:[\"@@ϣUוǒ՟Wহƥ׍ʍ̯ࠫǋvÞۖĄŀ}ͨΣΚˉÈʕɲǾώčО ʔƄB¸ξÝǌĄŜ̸ĶȹڨȗΎæ˸ǘÞŊúɸųٮOƸʖƢgʎĦžΫȞłΌŰϚǽƦ˥Ϙǯ̎ɄϾֺɏɠ஡Ο۷ɕेθܣͧ\"],encodeOffsets:[[-2924,5115]]}},{type:\"Feature\",id:\"CMR\",properties:{name:\"Cameroon\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ľ°ӻŇԝŒЋÅ൅nŬڒ͟֊ϧƚǟϖɋŦXɶɎתЎ߸ʒRԄӮ͈bҾΉ־˲ĀΔȌͺžь҆ΊǞךǲȊŢѨɜ՚۾ٲ¬˨ĠƲͫͰˌʂ¶ͮ՟Ê֏֏ҜޅҷTʁÏϥČǻЅӸөμƛŠΏˆ׃ſɩх࡛ȫƳÝٳČΝåʡЈѭð̴̟џϨ˓ϥĘʏÓґڛȤڷɜ੗\"],encodeOffsets:[[13390,2322]]}},{type:\"Feature\",id:\"COD\",properties:{name:\"Democratic Republic of the Congo\"},geometry:{type:\"Polygon\",coordinates:[\"@@»ঙͶŕˑ̗͓ɟ͍ѫǯϷ±ګț͍OهʍɹԃŗÝýҟɄϡÂ৥ưޝċѧǘӣӤҹҒ੕ͥĒ૿ƙɣĵʇՙȊχƫষĻࡇɨƫט͝ɲƴìٟࣟR·Ҧ̳ΨٟŠȋѰԣ˅ڧŞ˫ϢՕüϽqµʾ́rϥºԳųιtȻû®ৄ˩̸ÕԬŬԒǝ͖eՊ৳Qò̢ѕG­ƣԵɁӧűȿҫŠˣş։å͏Ѱȗ˖ʋԌȷض៛\\\\̍ķʑh΋œşʼɊĘμƎɎ̪ǰɚđ˼͐ҜSÄʃ̼ƩӶՄӨШɆː۔θࠆϬўքМĪˌt̰Ǝ̆«ӊŀݖǐԾʦ҈¸Ԕúה͜ѐҊ˔۔˷՘ؚ̳ĉظǏʦԖŘÞϦčनоͨǱ˖~ŴȲ̺ðلėբoˤĚԘۙϘķɤƖϲÅҶǲȦΫ݊֏\"],encodeOffsets:[[31574,3594]]}},{type:\"Feature\",id:\"COG\",properties:{name:\"Republic of the Congo\"},geometry:{type:\"Polygon\",coordinates:[\"@@̿˾ʩƗͻγۏࢸٖҪ̓֌˾ɂ֦ĺäό҆ЗݐʴЈł֒ĝڀЉӺζ঄ȽǘسçɻѢÔξ੘ڸɛڜȣÔҒѰ޲ԆѼ֪Ɨդ±·ԓʥ҇ǏԽĿݕ¬Ӊƍ̅s̯ĩˋփЛϫѝηࠅۓɅˏӧЧӵՃ̻ƪÃʄқT˻͏əĒ\"],encodeOffsets:[[13308,-4895]]}},{type:\"Feature\",id:\"COL\",properties:{name:\"Colombia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ΫȤЭ˨ʅƅ܉Ŝȱΰƽ_࠿Ӓŕʺ̼ÚтȢ̦иÊΞՆ͐Ѵ̳ȦǄӦȏސǸɚƃ܄ͻ҄ņТ˔ÑǂʠțӶĺŬѢـהΌĚT˦ƺ܂ӖϸՊfäǪڂéڌъ͞ȊОК̖»ɚɛǍ˱գƕɇп͗ʋʓ̷Ĺ׵ɷӭѢÇņϭȄȁâ͹ĳ̵ǫȸéȨ̉ઊĄӦŃעܡͼĚ؂­ӐĪ̔ƟƱҍȇ˯ß׻ǜ֑ʆʟȉэл̨ȃɠ̋ʰ࠹ǁĻǏӸɷˊ˥́࿕lZԿӰē͏ǙĔҿƑK؏ώ̫ƀӓoηϙᘯп҂ʣpժࡤٟϾԍị̈ƤҧɝصŀӵࢤϳɐˍІ֑Њɡā\"],encodeOffsets:[[-77182,-155]]}},{type:\"Feature\",id:\"CRI\",properties:{name:\"Costa Rica\"},geometry:{type:\"Polygon\",coordinates:[\"@@җȆǟǮĬƤȄɷȪͥǔ́ņÅʖəƮÄʑǗȩȓɸˑĊŗǞLʮŎˆʁŠȖǌŴňֆɝȖŊˊéƔǥʜÇȪǲɈҙ͖ͷЂΩ͗õLͷǪűűıƱëǟ©Ǖ\"],encodeOffsets:[[-84956,8423]]}},{type:\"Feature\",id:\"CUB\",properties:{name:\"Cuba\"},geometry:{type:\"Polygon\",coordinates:[\"@@ܨÑڊW߄˹̭ͮ޺Ĩ̔ȡ܈ԳԺϛˢ\\\\ԆǟÕʁئٌ΅ıȟ֑Ń֡¥׃âளą֜Ҷ΁ɔէÈ̃ʐȥӎӃ޵ɦʥǬભž̋ǐ̀ɀࠗ¨׿ѧΏ[ťȳеğΫĂѺʸǼ̤ϞȈіǎَĄȰĢ\"],encodeOffsets:[[-84242,23746]]}},{type:\"Feature\",id:\"-99\",properties:{name:\"Northern Cyprus\"},geometry:{type:\"Polygon\",coordinates:[\"@@ÐJŨȮ؄Yކʢ֧ΧÔƿęǇÙűj¥iĎÑ¾ǋVɫïƿ¬\"],encodeOffsets:[[33518,35984]]}},{type:\"Feature\",id:\"CYP\",properties:{name:\"Cyprus\"},geometry:{type:\"Polygon\",coordinates:[\"@@ãࡱͿЩŊȟͶЎǀ«ɬðǌUÒ½jč¦ŲiǈÚĚ\"],encodeOffsets:[[34789,35900]]}},{type:\"Feature\",id:\"CZE\",properties:{name:\"Czech Republic\"},geometry:{type:\"Polygon\",coordinates:[\"@@ϯǂЁ©ٵʲ̏Ùҿ΅ر˔ӃΰѕȬėΠƧʠؒǾ̸Ⱦ׾ǎɂǆɜīϒĖЊ˓ؼñ¿ɳҘǧŲɒּĥĄʿز»ϮЯʡCŽƯȕÅȑǇ¡wý˹ēϋbšȁ\"],encodeOffsets:[[17368,49764]]}},{type:\"Feature\",id:\"DEU\",properties:{name:\"Germany\"},geometry:{type:\"Polygon\",coordinates:[\"@@d͗ࡔțS̗ࡢǂҾɰॊͧІˋȞёɹɣ̨̙Ⱥ҅ß́Έ՛ϑĕɛĬɁǅ׽Ǎ̷ȽؑǽƨʟĘΟіȫӄί̑ϯ̟ŃŢշýƛʿǤЕ~׷ƭݍţɛыɺʩ±࣑ʲǥǻ܍Nń״ьֺ௅ƸЇɘ´ςǗȐĨ֨ƗࢢԎ@Ɉ͂Ⱦޔƿ˴ǐǲ۰°Ƽȃ֮вȓ̀ӈٌōՠŸ\"],encodeOffsets:[[10161,56303]]}},{type:\"Feature\",id:\"DJI\",properties:{name:\"Djibouti\"},geometry:{type:\"Polygon\",coordinates:[\"@@ȤʹΑӏȩήɯ̱҇ȅƬȭÏҷb_ʮßɶ˴Ѐ̐ϊήñʪȴ\"],encodeOffsets:[[44116,13005]]}},{type:\"Feature\",id:\"DNK\",properties:{name:\"Denmark\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ԋڹ࢟ӄŝΒ௼˨ˎу\"],[\"@@ȵ̓ʡĞ؁؁ɮХ՟ŷًŎͽҲ}࡬Ɣɪʌʦ݌À̐ɴڮʂѝʟ˙ĶɽҘŵ\"]],encodeOffsets:[[[12995,56945]],[[11175,57814]]]}},{type:\"Feature\",id:\"DOM\",properties:{name:\"Dominican Republic\"},geometry:{type:\"Polygon\",coordinates:[\"@@ŀƞپIӾɏɜtƴ̕ҠhʡϐЮ̷̯ͿЍǼϫˡ¢ƱƵ͑½ŷȲˣťͳֻɏƆ§ʎjɬɍʦȲƚÞ͒óҜ\"],encodeOffsets:[[-73433,20188]]}},{type:\"Feature\",id:\"DZA\",properties:{name:\"Algeria\"},geometry:{type:\"Polygon\",coordinates:[\"@@ᮩཽᝩ࿷இϑटćU՘ϵƌԹʊȧЀᬻᆴᬻᆴṕᎠfǌ@ÊQ঺ബب࠼Ÿێɦ͎тচͪجӢòϞ̶સƚƸ͜ɛǲ̃ࢲ¹Ԟ́ՠ߰ҠࣦƢՌΎ߶ʰ෎Ƭർæшůߊͨ࣌P΀ȝֺ¾ǟћƄߟȡۙԭҵôمۊԃRȯԮ͹Ϊຝ˖ݏ°ϵƧۇÔϥŃҟòՇͫΗӺؓέ̘ҵϼƸڒϷςՃ\"],encodeOffsets:[[12288,24035]]}},{type:\"Feature\",id:\"ECU\",properties:{name:\"Ecuador\"},geometry:{type:\"Polygon\",coordinates:[\"@@҂غǻξ͍ϵԉςǞʀƙބ̎ŴƺԼ͆զÍ΄ҢǸ׀Ͱࡀӑƾ`Ȳί܊śʆƆЮ˧άȣŞٓʽճࣷ࢟য়ͧԥܵǃ֣Ӆ΋ΙъͻĞ΍áw̮ʈȨıΔ\"],encodeOffsets:[[-82229,-3486]]}},{type:\"Feature\",id:\"EGY\",properties:{name:\"Egypt\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɽͷǹىɫѩȝƥ˩˔ϛϒ׵ஸđùΐࢯԪࡋٌವ̴ҙ˒ӃݮछǗƣճ঒ݭƨǣΏ@Ὁ@⁩@@ᶶ@Ჴʥڲɐ԰Żά̤Ж૦b߲ɝ࠲ʛϴſ٨ˊΌʊݎêװŃɮеȜ˜ڨȣټ³аɄւ෽\"],encodeOffsets:[[35761,30210]]}},{type:\"Feature\",id:\"ERI\",properties:{name:\"Eritrea\"},geometry:{type:\"Polygon\",coordinates:[\"@@˻˖ΉӰϋ˒ɏܷ̄ͶֻXȭǬӯȡԛϢʽط঑ǬęʹβఀĊ֒ˆʴؤƐьӒӦঃɴޗҢУବߏҲӍҖӝˀ˿аʧʩȳέò\"],encodeOffsets:[[43368,12844]]}},{type:\"Feature\",id:\"ESP\",properties:{name:\"Spain\"},geometry:{type:\"Polygon\",coordinates:[\"@@¦״΃θஒ؆ਊƱ૾NࣂƝۦªമͰ͛໺ϡ̨ǺीϝআŊ®ӥߓ֓ઁǯõ˱ԩү͕ہ͞ӑӟϑǹճىǗש٥੧_ߟhՃ͍̓ͅЩê̵˴ʃӚ޷žé˦̶̀Śɬ̃ʢɶրͳԌδèЈƎŬZپϲɪɻфөƝŁӹCɁЬ΃ū̥ɇ\"],encodeOffsets:[[-9251,42886]]}},{type:\"Feature\",id:\"EST\",properties:{name:\"Estonia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ĮӸ̱ŁՓ̘ñӘਫ਼ɼ੔Ũ࣮Ƒࢂ|Ŵƣׯӝʞ޵ΫˉۙDܡ̸ρļ܏Ʃ\"],encodeOffsets:[[24897,59181]]}},{type:\"Feature\",id:\"ETH\",properties:{name:\"Ethiopia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ԜϡӰȢȮǫּWܸ͵ɐ̃όˑΊӯ˼˕̏ω˳Ͽàɵ`ʭҸaȮÐȆƫǽ̴̕ҧ̴Й̛͎ᩨঽۺNᛛᡃફݟףաeɯ˅ַB͹˴ލΙʝΓ֕àȃĬȟwˇT੟܌ב@˹ˢ@ҾѧƘӻࣴϥȚƧʹэЦԧÒ˸ӐҀrŲʰ[ݲʞࢠЊɾĎ΄ήٜԔи΀ࠠƆܠ঒ǫʾظ\"],encodeOffsets:[[38816,15319]]}},{type:\"Feature\",id:\"FIN\",properties:{name:\"Finland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ūיಀ֓ޡى঎ख़֡ܛݴس΅յఘֻ́ѓޭӟᅡੵໃá๑̯ൃǯӡҞ߿ˠȈࠢСݶАӪނՆ኎࣮֖Ǭē΢ୟЈ˳͜uಒ಻ֲ૩ЪԊɞतѻલ¦ࣘȭߠϊЬ؞ಬ˶઄ͯΡכ\"],encodeOffsets:[[29279,70723]]}},{type:\"Feature\",id:\"FJI\",properties:{name:\"Fiji\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@̂ʍƓѭԳŗҩļąτ͖̀ϤĻȼƐ\"],[\"@@՛ǯŅ̼оǤˊ°Ӱˀ@ЧՕȷ\"],[\"@@é­@ШǨĽЗ\"]],encodeOffsets:[[[182655,-17756]],[[183669,-17204]],[[-184235,-16897]]]}},{type:\"Feature\",id:\"FLK\",properties:{name:\"Falkland Islands\"},geometry:{type:\"Polygon\",coordinates:[\"@@৘Ԍ܎ȿԌʹڦϙʥ̋ଋʥϙ̌܋ϙпϚ\"],encodeOffsets:[[-62668,-53094]]}},{type:\"Feature\",id:\"FRA\",properties:{name:\"France\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ˣ٭ϡǠș֢ǜ̺ը͎Ɯܛ\"],[\"@@הЅќà݀ϥȊñʎjЈɗெƷыֹŃ׳ɱƝϣüɇؙҽ]ϟВƀ˾ρʁʚ̿̅ʯɐٱҖŃĩηݿӅစɬ௧˗ĩԑঅŉिϞ̧ǹ໹Ϣͯ͜ѢԎǆူࢁࢤإю౹͒čؖઠǾථɏˇॎߌέዠپʨێܾǞŪ̑ϸ_ϸ͵\"]],encodeOffsets:[[[9790,43165]],[[3675,51589]]]}},{type:\"Feature\",id:\"GAB\",properties:{name:\"Gabon\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࡹࡔ։ۚԙࢄ˨ǾˎȲؔǜخ˴¶௢SOৠЌÆԞőӼňľ¯ÓνɼѡشèȾǗεঃЊӹĞٿŁ֑ʳЇݏ҅Иãϋ֥Ĺ˽Ɂ̈́֋ٕҩ\"],encodeOffsets:[[11361,-4074]]}},{type:\"Feature\",id:\"GBR\",properties:{name:\"United Kingdom\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@҉ֽًǦԱ[ǦҊǥ҈۴ࣔԳ\"],[\"@@࣋ࣧࡦŘऄIɕۅݯݩࢄÃäĕݠ঱ֺƇԬढ़ʈͧৰǅķ՝ѓʗͲѣݱѯ૳Rෝɱϻǒ։ϿޥĪם͍ҁǘ௼ࢨݪǺOBಽƔʃͰ࢜ʺҡҐǆռఢ÷D@ŮӤ֛Ԯ_\\\\৵ƨȧɬ̨ϒˡɴҍЇ·߶щє̨ࢆٶھڤá০ì\"]],encodeOffsets:[[[-5797,55864]],[[-3077,60043]]]}},{type:\"Feature\",id:\"GEO\",properties:{name:\"Georgia\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ųάȿִӟ̲ҭĬ̯ʴĺĲ܄ƝఆƋଦЕƦƻԚƂ޶ǭʴ·Նșɓřвғŗıҏºصʎȵƍଢ଼ſ߳Юࣅ¡\"],encodeOffsets:[[42552,42533]]}},{type:\"Feature\",id:\"GHA\",properties:{name:\"Ghana\"},geometry:{type:\"Polygon\",coordinates:[\"@@೉ӯҳ˽ݳʑݡʆͨηܤɖैΠ۸ɟ஢ŗنrӊฤ¢ϊÕ˔ƊϴáÕʿΖџC؍Ąڍɂ̫ȅݳäйɢՓȈ̍\"],encodeOffsets:[[1086,6072]]}},{type:\"Feature\",id:\"GIN\",properties:{name:\"Guinea\"},geometry:{type:\"Polygon\",coordinates:[\"@@ʃtǡͷʁJǏǴÈͶΗԨɕħǵmɳ³V̮ƇɘʔǻΜɹ̜ڥDțǁɵoƝǷīɹ҅σρӼ͛͢ɋŊȿǖħϊūȂʓƐώЦʮeɖƘȄDƄŎï˨ĢĖd˶МU؀ȱȄlÚĤҜáŨ´¶̭ƆBɖŒƔɸɇάãɲǺ˖ŒȬŠǚuȈȁĴɳΆΙǣɏ˙ǴĊŀį«ʡʲʍǗÝå˷Ș΍Ⱥڧ̷ĵăśÞǋ·νƃA\"],encodeOffsets:[[-8641,7871]]}},{type:\"Feature\",id:\"GMB\",properties:{name:\"Gambia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ņόࣶzȎȦˊ`ͨȷʼIˢƚǞʏεȋιdέǰ̷ȗƭQȫŝއl\"],encodeOffsets:[[-17245,13468]]}},{type:\"Feature\",id:\"GNB\",properties:{name:\"Guinea Bissau\"},geometry:{type:\"Polygon\",coordinates:[\"@@҅ΘΝÈȕʀLŸʯǴÁǶѼƌ˦ɦĨ༈c˵ġĕð˧ƃōȃCɕƗʭfύХ\"],encodeOffsets:[[-15493,11306]]}},{type:\"Feature\",id:\"GNQ\",properties:{name:\"Equatorial Guinea\"},geometry:{type:\"Polygon\",coordinates:[\"@@ƿŴ़̀െmPয়௡T˳µ\"],encodeOffsets:[[9721,1035]]}},{type:\"Feature\",id:\"GRC\",properties:{name:\"Greece\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Ҡ˱ٺ¶شÑqƣҜĶĿʛ௃íTƒਁǎƺΦ\"],[\"@@ʹՁȥĥԟ|ѫĀৱɓ׌ҿяƋҳAѻўƿȁȊԅрЁ̓ǿҴϯжʑ^ӅޥɠʜѕՓĕ͈ݏ֏Yۍμ̿ڦƧ֒͝ϮљӐÉʆϸТ¼˚˘Ũjɚռö͌ȀҖgƒƦǆت{ڨɲע̉ކĀVмЦɝ\"]],encodeOffsets:[[[24269,36562]],[[27243,42560]]]}},{type:\"Feature\",id:\"GRL\",properties:{name:\"Greenland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ᬜԆ᱒ੴ̴ᲈĄ䀦Ŀ㉊ڗ༅͕ộ⭏ćшƫᲐĠᡚ́࿈ʴۦ̝इӧᒞ̺✘͚ᠼǋҾΫ⃝ױӃȕ᧑ơወ¡ছؕگկध৚շಽ൧ˇ༂ѽȢ܋࣍ýઞܡህÑঈ΁˟̑இŽ୥E੆֩\\\\Ϗပΐћɣଌȿ઼ԣ͈ڱກǉ٫͖ਣӘ˼֭উѵᕖ୆¯ᖯܵᗿڏឧ́ओIࢅ͓ୟࢱᅵכׅ૧ȷ஽ȝܛԱ[כыտോڧͺٿϗ۝љࠍஅ½఍ۈဿLࠁҢ֕ࠐฝਲэոŗݮ୓ޢ̢ئ֗̒ࠪচొ̺ͨΘǬڀॡ̕қůݯţਏ˜Éְ͢҂ެ\\\\႔ɟ෿Քݩ˾࠷ş۫ȼम޴ԝ̺ڗ׈ৡࢼ੯͚XΚᖷӮᄻÖᖟᏅ×ইˌวՈᕂ˄ၚ¬≹ɖ቉΄Ś͜ẊИᶎИ̪͘ᗗ̠ܺͰ᯲ז௢ĚΓϘጲɜᣚƂᣖRࣺʽᕺҨፘ̽୺áპ˙ፅҐŘή\"],encodeOffsets:[[-47886,84612]]}},{type:\"Feature\",id:\"GTM\",properties:{name:\"Guatemala\"},geometry:{type:\"Polygon\",coordinates:[\"@@ћƦԻfϩǖҍΌrʖĮȠšƾКۆ઄Ft˸Ƌ¾ġǺ̵Ț̹ˬϜDBӂ޸BަUOڗßॅʤ@˚ƱòŰʘŃϥ͍ЉɻÏǉâǑǧɇȟ½¬ıƿġ˽Ƀ}ŭ\"],encodeOffsets:[[-92257,14065]]}},{type:\"Feature\",id:\"GUF\",properties:{name:\"French Guiana\"},geometry:{type:\"Polygon\",coordinates:[\"@@͉͑ГÑŗʀȉʹɩνǦɈΪòϤƢή͛ӸáֺѪܠ˸ğؤȥࢸۿƔ·ӻޑʳأ\"],encodeOffsets:[[-53817,2565]]}},{type:\"Feature\",id:\"GUY\",properties:{name:\"Guyana\"},geometry:{type:\"Polygon\",coordinates:[\"@@ր̯Դյzџ̈́o҈Чͪ̇Ƈݱԛɕ°ȣƹџϊ؏ːAŎӃԢܳȱҫî˙ɡϟƥ˅ġǑЭ¦ԫЀÓϴɋьƆܐɸ̐ȕϸ˿ŶŊτțȘѩْ֩ɬɲiϲԬƊȾƾ˽̸ô̬ږӲ\"],encodeOffsets:[[-61192,8568]]}},{type:\"Feature\",id:\"HND\",properties:{name:\"Honduras\"},geometry:{type:\"Polygon\",coordinates:[\"@@ơˀʭòÐʹŗĞǣÒσĳŔʩƈǷǚʛìǨɈáǒÐǊЊɼϦ͎ĔȂƨʊ\\\\þåž¦ϸùϲv˒ĢİĦˎ©ȪÉɘnǖòϨśƄkʲƿʐį̏Źɜɳ˽jśŕ̇ŋɃAȅŃǙƛźĕ{ŇȩăRaǥ̉ɳƹıđĽʛǞǹɣǫPȟqlЭūQĿȓʽ\"],encodeOffsets:[[-89412,13297]]}},{type:\"Feature\",id:\"HRV\",properties:{name:\"Croatia\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ȳ͗ˊʇ͓̓ϝȆׇ[ܟƔϽmǻǧ̝ȖǫΑЪϽǼʹϮ̽͌ȃ͆Ηݔ͇ġƛ߃̶ӣ̢ޑʠ۹ؤǞØϥΞe˲եƄʱγʝˮn̆bגƸƚ˸ƍͤgGɼ̈ĒĈͺڞɠˊĻؼέۜǉ̼Ų\"],encodeOffsets:[[19282,47011]]}},{type:\"Feature\",id:\"HTI\",properties:{name:\"Haiti\"},geometry:{type:\"Polygon\",coordinates:[\"@@ԢܰƁôқÝ͑ȱƙɎʥiɫ֏ƜЅÍԡÔϽƿ҉ʾö˔ޜśيã̢ȈϧθP͎ՋžȌɶ\"],encodeOffsets:[[-74946,20394]]}},{type:\"Feature\",id:\"HUN\",properties:{name:\"Hungary\"},geometry:{type:\"Polygon\",coordinates:[\"@@˨ըǍǼӂDÜ΄ђɋ̲ğ۸ļäǚͮ~ЦžĜÃЂŀȠȢˠ¼࣒ʭǴĒҲɭÎɣԡǭЉ֫ԕ֭کǁԽ١ə̻űۛǊػήˉļǍ˴ƗV\"],encodeOffsets:[[16592,47977]]}},{type:\"Feature\",id:\"IDN\",properties:{name:\"Indonesia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Λe૝ך޴ǒѴʭ̎ʭ»ɩ\"],[\"@@ܙȁĳĶø˸ΰԢࠨͬĐǓfʫշع\"],[\"@@̢ɣԲèȼΥॿǛ׉őҍP̀ӚҤPɤ̖\"],[\"@@ūұ౅ʅૣľE̬ښǪՂʥ֔Üݬ̮\"],[\"@@ྔċȂΌ༘З̪կీƵਐӿय़͋ऍ͸ݻwࢍØ޻ưঅ͎؝ČΓŁ໕ΌƣΰޑØּߤ৶·ڴ͡ΒÛŘ̗\"],[\"@@ѝֱćنƬ̠Ǭ˴ȒʗCЏ\"],[\"@@̿˥ׅƸǏΰࡘ¢Ⱦˣ\"],[\"@@̨ٝۿΌۯìӃÅׇȦҦਠऎʕ\"],[\"@@ɼയ࢈ԉ۰ࢼ८ԔݜBܘ̉خ̛ࣘǇbᩑbᩑݟې࡟ǜȷʇ੡}ΦۂՈɺɕࣲЕ۸࿃܆ۗêృަʛУ͑óȏ̮GκٛЮ̢ࣞ״gëɠ௵DͩԄݥƺΡдଈȰњ˜ഘ·Ƃ̹\"],[\"@@ڭ࠭كǉ߱ǐඓ¥ܽŧţٍݪݛҒϠ༪˸çϯλŪιӯ͙݉ߒ੿Ƶ˿ݲॻQտ҅ʙ̐͡Мی࠙͗ȻɶŊ͖؅ӲØࠌ֕ʭîওறՓũίʚʌޜŽ߸ΛPʻֺΎվŤښф౎ǮΎ܎ذپʛ੖śॴࠨ؎Ʀȉ\"],[\"@@©ܽџĈŷԝΌѷɽĵ͹Ւʟ੺ǚڤ˨̨ÔҝӸóĀ΃\"],[\"@@सާহį˫ֵݿַ߱u࠷͕౻ŭ̚ॕϙͫԤ׳´лːৃ̟̩Оս¯ۗĬŹૺнɺЕܘŝ݀ĮުԂ֐Ɩָ֗ӅըǠ՜ÑӪъЖôߒɽۆǶњୠ͔̈̆क़ॲ@ܰƙӍݷآߓơϭ\"],[\"@@छkۻ۰અۊέԚٍۄзؾٕ୴۪݅ʙܠ̳ڀݵՊѭܘمҺࢗऒóђզಢǋݔࠓٮ֫ҪΓߔࣙࡢ_ۺֹӠ۳٘ϥͳۉӖ̞̅sƜו̊ҵؠõФՏɁ਱ಟ\"]],encodeOffsets:[[[123613,-10485]],[[127423,-10383]],[[120730,-8289]],[[125854,-8288]],[[111231,-6940]],[[137959,-6363]],[[130304,-3542]],[[133603,-3168]],[[137363,-1179]],[[128247,1454]],[[131777,1160]],[[120705,1872]],[[108358,-5992]]]}},{type:\"Feature\",id:\"IND\",properties:{name:\"India\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࣚটďۅͮїѕ׽ŒɾएࠜՑ୞חՑϟ͛޻ࠀͅߊЭરһସŉӜёٮāৠȝ۪bĪͪŋՖÞβԠǮìڋlǙކ͉Ոƀ܀Çۈ|ÐԪ΁ˎڴŀވشॸ՘۶ȷ״ΞЀԹ˳Λ࣠űÜ͇̍Ʒèԫ׷Ʋછׅ~ӓҩ۵§ХϏۗځȒࢇȏ˹ĚΣгȥѵ೰ɵEƍ՝ҡѦʸӎϖ¶ϰ܆ӝƜީ]ߝŚóאБ¤ڕζ֭̓؆ѻԿ̻ȅ̩Ԭɣƛԑ̆كžەţֱ̫Zਛǩ´ك҃ӻ௃֡ळ঩كՋ࠷ջCϭлȹݳ̝Ͻ«ʥٙǪધ®ۡΣߙI෗ѣ¡ϣٙʰˣދʃ˱֯͵ʍߑ޸ϳ୴͑ࡒ̍Јѿ߰ȻੂơՀޅ଼Α࿀ʣ੾HৰǍ޾௣ԉףĶ઱৲И̤ʝͤড܊֖֔ᇜCǗܞҽюĩ٨ջϘऒࢢঊÙ࢞ࢢՄ࡞ࠄࡈ_״ܒӠڳд֪݂̇̕Ьβ౤ȱपŰߺ۸\"],encodeOffsets:[[79706,36346]]}},{type:\"Feature\",id:\"IRL\",properties:{name:\"Ireland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ƒ׷ًݣ๯ӹ஑Ŷڼ࢚ѭࡢତڄٌϼǦ҇ǥ҉Բ\\\\ٌǥ\"],encodeOffsets:[[-6346,55161]]}},{type:\"Feature\",id:\"IRN\",properties:{name:\"Iran\"},geometry:{type:\"Polygon\",coordinates:[\"@@݈ǌװӔ֚{τƾװýघэڤğ।ݓظòۻ΁਷ɱؑκŭΫҡˠڡàՓِƙæեݿݿжѵ͸ԓߦυx݉ДƋêϯ௉ѡ̓উཌྷʪࣷȖेŊΧਐЕƪ٣ƭࡑНਇ˦ࡑ٦߳ʈ֗ߘا૪ҍƋՕ˦̻͝ҭѴS҂ˍ@Ɛ،ѝٔ਍Ң׉ߜȜپц̂ÙӬտʨխ৊ҟڨǐʼʿ६ּʈƄͅъϯ־ő̤~রئ̀Øʞʙ́гԼѱȾ¦ˈإߖǩ׎у஠ƟಾɞĄȞ\"],encodeOffsets:[[55216,38092]]}},{type:\"Feature\",id:\"IRQ\",properties:{name:\"Iraq\"},geometry:{type:\"Polygon\",coordinates:[\"@@րʧÚӫх́țٽ׊ߛ਎ҡўٓƏ؋ˎ@TҁҮѳӿ¤֟ê؝߭༟äᛍၖఫךৡɪ͹৾ᇶ࢔͆৬āؘҢȺјԾΰž঎Ň̐ɉЖƚծ৉\"],encodeOffsets:[[46511,36842]]}},{type:\"Feature\",id:\"ISL\",properties:{name:\"Iceland\"},geometry:{type:\"Polygon\",coordinates:[\"@@șիॊֵથٙᝓֹܣƵૉŮᚑˈࠠψᆧЪ๪ǎʘᄋȜ֨նౠŰಸ֭౨Ҝ੒ʃൌ҄ආÑ\"],encodeOffsets:[[-14856,68051]]}},{type:\"Feature\",id:\"ISR\",properties:{name:\"Israel\"},geometry:{type:\"Polygon\",coordinates:[\"@@ƥ˅̣Ŝǫ֓ɂĥɋřɛЄŖp͛нഉց෾ʔˢË¶ɞϼǠيŤɆzVˬCþƦɤ\\\\`·ŕŵhM\"],encodeOffsets:[[36578,33495]]}},{type:\"Feature\",id:\"ITA\",properties:{name:\"Italy\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@̟ڋŲʹǭѝٝ̈́ёĞ୩ѐŞќজûࡪĠْò\"],[\"@@Ԍ׭ş૕ϣÂ΁˫͇ɞ২ȓӒҨ¥рʼ\"],[\"@@ரɏĝЯȬΧڝŪہ̗²зĻʇˠё߀чцۛदڱچLȲȃɽǗݪ̥ؠʩܜѫĔƿƽ̛үϼܳƐΝի؈̷ıѫΗ¹҅ܛΕÝHʲǢҊǼǶ͝ӤʱшΑŀʛδգƴεͶثÆٿϜޑմ֯ӜʿࠪйĮہˤϯŕӝϵΓÕĪθҕńɏٲ̆ʰʙ̀ʂβǵМ¢Ҽ˶ƢƃАǼͺتĿψƚâΆԘšĮǆࠨƤȊ̉\"]],encodeOffsets:[[[15893,39149]],[[9432,42200]],[[12674,47890]]]}},{type:\"Feature\",id:\"JAM\",properties:{name:\"Jamaica\"},geometry:{type:\"Polygon\",coordinates:[\"@@֢÷ҀȫƔɯןeʭƗҹƊӑ̪ĶȔΜÎȒ\"],encodeOffsets:[[-79431,18935]]}},{type:\"Feature\",id:\"JOR\",properties:{name:\"Jordan\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ʀˆपͫ࿪ࣆͺ৽ǅų၅у࠸࠿ˣƛƑ˭ٙřȩ̡εʵधƆŨоഊo͜Ůʚ@Ԥ\"],encodeOffsets:[[36399,33172]]}},{type:\"Feature\",id:\"JPN\",properties:{name:\"Japan\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ņ˽ҿԕΉːљțɝӭշʈRЊҬԆӌīΊΜؠǹ\"],[\"@@́ڡƤсѩף੹Ѓ๏½ணॡ͔֡غษȃষЃঝe࡞أ֗෗իΝН͜ȶݶՏʒͿ־ߐʶѲՈࡌѢ؞ָာʤ࣎ǣࢠ๺֔Б௾ࡀӌ͜ՈਈƟा΢ՎࣀƸҞୗ}ڻޥࡍbࢁ\"],[\"@@נǵרΤȈहఝɯ݁࠱೓ָқँण]ř࠴д٨࣌²ʖ୐ʜټন࢓٤˯\"]],encodeOffsets:[[[137870,34969]],[[144360,38034]],[[147365,45235]]]}},{type:\"Feature\",id:\"KAZ\",properties:{name:\"Kazakhstan\"},geometry:{type:\"Polygon\",coordinates:[\"@@ӕƹ્דο׹̹KɱЊ੫ǡێХNÚࡆ৓ؘ෷ßডũߣݶۋ͆ಥ׼ƽðᓗӹᶽљ£יچ֧ɼॕǩχ˧±ȲȶΖǅ̊অ˺ϛݮҩɆ˜ࠊāؘ܎ƎܼűƲࠎƭԲ࠿£܍ȴঃσ޵ǭяƌĐўՙ֘دw܉֬ӞِʕǢڢऊࡺӣŀؘჄࣴಾtᇢ׉঺ͻࢼΠ೰j੺ѥʔʠ୼ɂЊഷ׀߮Цƿɮ߮ɔ؅ֺϬ˼Ḯ̈ШȺᑆ̴ݰΒຢǹ˄ࢉ࢚Ȳઆ˹éҝ߮´ᑌߎ̭ˁ੶٭ሠᒑ҄ѰୄӛீɎҪƯКӟטǋΨΥ઎ŒѾԣٕ֓ۥÿ¡ࡅұϝဟˢ؅ຑїȇဗͱݲลֻɓäӏԭŬу̠ఝĖඃx̧ġ஥ΞӉǧŽӹ൩̂փşȉρ\"],encodeOffsets:[[72666,43281]]}},{type:\"Feature\",id:\"KEN\",properties:{name:\"Kenya\"},geometry:{type:\"Polygon\",coordinates:[\"@@ӾۙיͱȹΕ̿Õšףˑ͹Ǐ֑ͷ˥஻ࡀËӤᵁႌƙĢSࢺʊ;а֌̨ؔσ॰įтЉ׎ԬԈ֬ֆѨƗ@ҽ˺ˡג@੠܋ˈSȠxȄī֖ßʞΔގΚͺ˳ָAܽ॑Xᵣ\"],encodeOffsets:[[41977,-878]]}},{type:\"Feature\",id:\"KGZ\",properties:{name:\"Kyrgyzstan\"},geometry:{type:\"Polygon\",coordinates:[\"@@ȊςքŠ൪́žӺӊǨ஦Ν̨Ģ඄wఞĕф̟Ԯūşȏ೛ғ̙ͭઁıͅ՛ࢷŒׇǏߣЇŜȟʇȓཟŵਡ˘࣫ÝĂӜࣴƕ̮ʸٖĉ੾؂঻ѸױȽإ͂۶ծʟĊ\"],encodeOffsets:[[72666,43281]]}},{type:\"Feature\",id:\"KHM\",properties:{name:\"Cambodia\"},geometry:{type:\"Polygon\",coordinates:[\"@@΁Ѭыࢄȣ২ՠۨઘǆ߀ťۚ͡Ϟׄݖ̱Ȝ֕Ļ৕ඳ٧τԙࢥÓܫͷ۱Ū\"],encodeOffsets:[[105982,10888]]}},{type:\"Feature\",id:\"KOR\",properties:{name:\"South Korea\"},geometry:{type:\"Polygon\",coordinates:[\"@@ܨযȺխPॷ̓ҥݽǉڥΏݳïĥҚƼـχ࢔ذƚֻܘÂúϒ͞Ϝצ¢ΨÈŨȮ\"],encodeOffsets:[[131431,39539]]}},{type:\"Feature\",id:\"CS-KM\",properties:{name:\"Kosovo\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǣŃPĘ́ȩĐǳɦƾȌȪÒŜ˨ư²Ţşƾ¿ŌƅƒǎƻŢLĥȳĳĳ×ȉӹŻ\"],encodeOffsets:[[21261,43062]]}},{type:\"Feature\",id:\"KWT\",properties:{name:\"Kuwait\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ǭχõȓ˔هשuȽАݟĆ؞߮֠é\"],encodeOffsets:[[49126,30696]]}},{type:\"Feature\",id:\"LAO\",properties:{name:\"Laos\"},geometry:{type:\"Polygon\",coordinates:[\"@@˚Ϝ܆ڹܸ¿ٕࠦھٍÎǛ̉ӯyʣƨࢯԅoݬȸࢮ֧³ԎηʸǴ̲ܐնøȡ҄wŵ०ѦŬӮڏϖޅਚO͚ܹ՝ɗʉ̟৔ԉۦ঳Ռ݋َ׏ɄץƵ࠿ݕ̲ϝ׃ۙ͢\"],encodeOffsets:[[107745,14616]]}},{type:\"Feature\",id:\"LBN\",properties:{name:\"Lebanon\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɣ[ýƥ˫D̘ۄмעfϘ§Ɛͣқ̓ȷҟ\"],encodeOffsets:[[36681,34077]]}},{type:\"Feature\",id:\"LBR\",properties:{name:\"Liberia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɗQࡽАޅٖ܏Ң֣ըȪː¬ʔϜҘϺϺǶnɖĨΘԧÇ͵ǐǳʂIǢ͸ʄsʓĎНǽύʖɱˊÇΤΙ~ͧăĿÝە\"],encodeOffsets:[[-7897,4470]]}},{type:\"Feature\",id:\"LBY\",properties:{name:\"Libya\"},geometry:{type:\"Polygon\",coordinates:[\"@@ק̷ҿҤ೧βρՄڑϸϻƷ̗ҶήӹؔͬΘñՈńҠÓϦƨۈ¯϶˕ݐШȜðΠėΒ־͔ʶːЦʌ´٦দ́ΜðۮƓ૞ϓЀݛݮǍஆΙࣆйЦɔЖϮț٠˂Ф؄ЀׂŘ଒ǣ˺ϑ̺Iˌƛ࠴ıȲˣ̣ЕżΫɏԯʦڱ@Ჳ@ᶵ@့ॱGYΙ‧ྐ‧ྒࡓҟ\"],encodeOffsets:[[15208,23412]]}},{type:\"Feature\",id:\"LKA\",properties:{name:\"Sri Lanka\"},geometry:{type:\"Polygon\",coordinates:[\"@@ų࢓ΙʇܵȓЍڜƫீϠ഼׆ұϺסО࢓\"],encodeOffsets:[[83751,7704]]}},{type:\"Feature\",id:\"LSO\",properties:{name:\"Lesotho\"},geometry:{type:\"Polygon\",coordinates:[\"@@̆ʩʳУƛ˛ҳſƹˍ̛ċؿ٨҄ՐҖ͢ϼǠξʵ\"],encodeOffsets:[[29674,-29650]]}},{type:\"Feature\",id:\"LTU\",properties:{name:\"Lithuania\"},geometry:{type:\"Polygon\",coordinates:[\"@@ãɊĚɲχƄࢡƨǱ۸२ʴඬÁࠜĊŞǩ҂Ã߲СĀϓۏˏșӃ࣯̓߻NȫʶљĜ\"],encodeOffsets:[[23277,55632]]}},{type:\"Feature\",id:\"LUX\",properties:{name:\"Luxembourg\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǘȏ³ρʍiȉòĞҼɖ\"],encodeOffsets:[[6189,51332]]}},{type:\"Feature\",id:\"LVA\",properties:{name:\"Latvia\"},geometry:{type:\"Polygon\",coordinates:[\"@@نЮՆߊ˼ڜعڪhǊ٤ܐƪςĻܢ̷ۚCКȕîС˒ӷ͕ࣗԛƙ߱ТҁÄŝǪࠛĉණÂ१ʳ\"],encodeOffsets:[[21562,57376]]}},{type:\"Feature\",id:\"MAR\",properties:{name:\"Morocco\"},geometry:{type:\"Polygon\",coordinates:[\"@@ԒΥߜÎࢊȃκU͂՟ºԝ̄ࢱɜǱƷ͛ષƙϝ̵ӡñثঙ͍ͩсۍɥ࠻ŷഫاRহŷ@@@p҉Ա˓ȑϡ@̥Ŋ۹ě˛ٻʿÕЁ੕ୟ࣡ˣୋ΅ϗĵ̡ቅãaD ϶͒ɮ˞ѪÃ˶̀פҴՖ˲ƊɞӬp҂̤Բ̪֔Ւ࡬f\\\\ц͔ްĢڎָтɠۮۮȿਸ਼͊ܢŔѶդ֨ࡈϦخΐ֘࢈˄ԪؤI\"],encodeOffsets:[[-5318,36614]]}},{type:\"Feature\",id:\"MDA\",properties:{name:\"Moldova\"},geometry:{type:\"Polygon\",coordinates:[\"@@ȨŮ֒ĊؤʽΊϞɥÑ˵̪ƏŨΗ̊ɇÏűƾčɝ×ӷ|ĉŜǫãÒƭɱˍƥ˽ɁĝƯϦĘΪςӝԂˉΠʹʠʯĈ\"],encodeOffsets:[[27259,49379]]}},{type:\"Feature\",id:\"MDG\",properties:{name:\"Madagascar\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɠΥȺ։Ɗঢ়ɒϽĉЗƩʙ˷ӰǁʝǈثõΥɵȗ¿܅ͧওб୅ԯཧ͑ୟϛইہȣܻΡӛɊڙ̜ɳѺÇݘ̑ڠù؂Ʈ؄ϰƢD˪Дِø՚șЈǃՌãޠ̊ҺŔՒмҶǤ̶Ʋτ\\\\ӐӎۖԮʦцŗάΦĵҪ׎fԐ˦ϔ̊ί\"],encodeOffsets:[[50733,-12769]]}},{type:\"Feature\",id:\"MEX\",properties:{name:\"Mexico\"},geometry:{type:\"Polygon\",coordinates:[\"@@͙݅ƥ؁Õ૷ąЧƤқʺЧǚٳ֎سȞӏ͢бࢾɝΐΙ݄ɾٚĎؼưՊƠՖ΂ȨӬè۸Ƣʖ֬ɚࢶȚݔԚîȬǱЙҋԁȥԝƸƥűγɁٽɅɎǭcǃY̝ԓƳĲķPŭޥV޷AAӁϛC̺˫̶șĢǹƌ½s˷ઃEЙۅŢƽĭȟqʕ्ࣞџ˘ۇɖҷÓګ́чĉץɜؿǄ޹ϬؿŠ्ϸ۱ВɃɤҹº࡯ˈΓϦࣗӊсՌȧЦ˪ĈđʈȖɔJ̄˱Ϙùͮ˭ъ݋࠴ࡋڀУԼܝ΄ƷȴŸԲѓȞӹФȽהҍæӣѸϿФˀҍو̓٠^͔؇ͬ˫ӑɴƇͿƔЕĆف̀΋خׁƒȡŸÓŎ˽Ƭ\\\\ǜթʮɇǴ̕Նё˨ޯʠρɸϿ²ѷКͶϡ̨ϑqƭΝ̱ƫJɛԞջӎ؃РїɈؚŵҖЏʺֿϒŏŇɃɖԭȰӷӦÖÚΊ³̸̼Ϝ٩׶ӱɶ̱Հ̷վϳڦͿݲॖÞ੪ĞÿǑ౔СኀףဪPژ@DΌผ@̪̕јˇԀσ˨ѭȾҥѢʩۤʥՊڒۊhפͱфֹ̄ӯӸӏȂחɾЃپʹ׮ȁ͞|\"],encodeOffsets:[[-99471,26491]]}},{type:\"Feature\",id:\"MKD\",properties:{name:\"Macedonia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ńOǤӺżȊ˺¶ϴbтˏÒ։ǅƑƥҕh͋ǿջõΑȴšήń˸\"],encodeOffsets:[[21085,42860]]}},{type:\"Feature\",id:\"MLI\",properties:{name:\"Mali\"},geometry:{type:\"Polygon\",coordinates:[\"@@˰ƶƘӶˊpזɻӄǖ͖ÇŴȈ⁚^ȈךƣļЛ⋈Л⋆౾dᬼᆳᬼᆳȨϿԺʉ϶ƋV՗ठĈFካҟ֗íԭݛƃ଩ï̳̗ա՟Iȿǈҥš޻ΑǅʿٳϕŗɍΙǡНŔɱȳūֻڙۡp˳ɭΣÆӥ΋ůȝŁŽάʍĥơhƷʕ٭PɷŴŉùʱʎ¬ʢĿİǳĉ˚Ǥɐ΅ΚĳɴȇȂǙvȫş˕őɱǹΫäɷɈƓɕőƅAµ̮ʾí̽͘ʀǓӔԺ\"],encodeOffsets:[[-12462,14968]]}},{type:\"Feature\",id:\"MMR\",properties:{name:\"Myanmar\"},geometry:{type:\"Polygon\",coordinates:[\"@@ӫηץϥࣥΟƳО݅ՔؗΈօ̭ܵ̃ƹȪу֖ڙĪҷ_ϵ͠ދң޵Сࡷăذʴ٠˯ӼæࣸͽѤ˛৔Ʊਗ਼εۢօуॕ׳ҽöԳȠ̂ਪǫ޾څॺļ̢ӭņ׭ۆÅڰ̊ŵj׾дȦęΤȐ˺࢈ڂȑϐۘ¨ЦҪ۶}Ӕજ׆׸ƱçԬ̎ƸÛ͈ӮÚˮӵξȧ|ٟۙߓۭĳঽࢲƔȨޛՐǍʓۣز́ζƷ؞ʔ~΍܏յǳ̱ӓȗ\"],encodeOffsets:[[101933,20672]]}},{type:\"Feature\",id:\"MNE\",properties:{name:\"Montenegro\"},geometry:{type:\"Polygon\",coordinates:[\"@@ÁǀηЯÊˋǫÞɽ˞εǖĢƜŬҦ˚ȜƾüɠƟŬśˠě͌ǧçïƽȋɧó\"],encodeOffsets:[[20277,43521]]}},{type:\"Feature\",id:\"MNG\",properties:{name:\"Mongolia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࢮƢ྄ܤ౬Єܴʳ࢚]֘Ͻ࠼ௐɁࠈגͿӶࢊࢊश΍ނįনɍǈؿஜΛߐƺਫ਼ŌࡆōࠖЗԚѕެT੒Ƌޜȼૈƒ௸פԌĝѰ˭ৌêХهק࠽ɐ΅ӈńࠤŽ٦̴ڬˏހוğ̗ڏĦ௟ŏןʅ؝։౱͙࠷ѽࡹǞҿúѳէˎ͓ƌˣי˯׽҇গ̑ఽഫ̇এҋϋʾ৭AఓԜࠥŰૣśჃȊऑmӱԀϣޠԱĢ৩ԼଅŞুƞ̡θ͖চׅڲன̀۷Ѿəז\"],encodeOffsets:[[89858,50481]]}},{type:\"Feature\",id:\"MOZ\",properties:{name:\"Mozambique\"},geometry:{type:\"Polygon\",coordinates:[\"@@لæ৞ʁɖńגt̚ʦԌaऀ͜ڞӤƊϕ࠷ľ݅ಿƨЫʣ׷͙׍՗Եޏ͉ृСॉ͓ࣕƵוׯ΋ȗí׳ЌُǔӱZʣƪ¦{ࠗƋϷȤƝűΓΗ̗ۗ˳য়ҕρ̳ðΟɊÉíѵّRïϊůϖí̠ƬपɓװГஂࢬ॔ɜ؆ŶúĨӶƉʞغǐ׌E੠ѥ˒ЏÔǹȼϳǰ۫gÅ̼āװᢈۘӚЕɴüͨɅ¸͵ǯϷØסոԱʲ׌ζǰíઊΙ؈̣˖̅]ɽદɾٔ\"],encodeOffsets:[[35390,-11796]]}},{type:\"Feature\",id:\"MRT\",properties:{name:\"Mauritania\"},geometry:{type:\"Polygon\",coordinates:[\"@@և־ԗؤ֍ɞГʚҵUЧǽйð˽ˏïҐɺаŀߊģࠨĵкČмɑЎѵδǾˬᾔMǃ௎ȴќ߀øᒸ᪂©F౞Ṗ᎟౽cМ⋅М⋇ƤĻȇי⁙]ųȇ͕ÈӃǕוɼˉoƗӵ˯Ƶ\"],encodeOffsets:[[-12462,14968]]}},{type:\"Feature\",id:\"MWI\",properties:{name:\"Malawi\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɽٓɾથ̆^̤˕Κ؇îઉεǯʱ׋շԲ×עǰϸ·ͶͧɆɳûәЖѵɔʮޮ˄̈Ǉۢǚڼƞɪɉ܌Ѕϐ࠘ƽǜɵ˶Ϲɾଡ\"],encodeOffsets:[[35390,-11796]]}},{type:\"Feature\",id:\"MYS\",properties:{name:\"Malaysia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@àћֈĶ˞ΈȘýӸԓΜ֛¶֣ęϡĆ˿Öӻ̒ɵͤݑe˳׫Éߑخ঵ښįђӟ֚ś̡۠ҜĠؔȃΤƤƮۈρ\"],[\"@@أ˹ܯƚॱ@̅ॗ͓̇љୟۅǵߑɾЕóөщ՛Òէǟַӆƕ֘؜˽ٮǀǜ܆άǂ৖Ǻ׾ڔЬՐϦѥǮ˺В¸՜а٪אшڀͼHќыιֆɻ۬ʧÑ֝͡¥ƮЧ\"]],encodeOffsets:[[[103502,6354]],[[121466,4586]]]}},{type:\"Feature\",id:\"NAM\",properties:{name:\"Namibia\"},geometry:{type:\"Polygon\",coordinates:[\"@@رٌؖ͡ȃࠊȷ،˯ಒm৒ŅҞ͛Όѡۜѳ৘ǽՆۃࠐ»٢КǆԊƞհ}ԄϝŶÐ₮׌Е᎞ş໴΂یȒհµͨȍPéӁȍʭC՛͍ͣΎಕ̍س{ᲽࠣBយA᷋ݣѕҋÕՇǄϗÔƗάͩɰГг\"],encodeOffsets:[[16738,-29262]]}},{type:\"Feature\",id:\"NCL\",properties:{name:\"New Caledonia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ېԵѨϭ͉ȫҥɪ׹ϚէѼ։פś˶β[Һ˹φ˷ˎɻ\"],encodeOffsets:[[169759,-21585]]}},{type:\"Feature\",id:\"NER\",properties:{name:\"Niger\"},geometry:{type:\"Polygon\",coordinates:[\"@@nּॹȐОҿպœϤâТբ̴̘ପðݜƄîԮҠ֘Eኬஈϒᝪ࿸᮪ཾ೨αӀңר̸ȸಯ̾ɓ`ˋΔ˽ǻί͕ၻ«ધੳߋγૉΔ̵CեբmčЃʁµˋƻm֩ंȟځҷٱʔҍ¸ʏşӯ~ӷΧѓq৯ѢЉȵѓb̿͆ࡅ̼ࣗıɕǻşӗʋ͹ÍݣٗӚ̟E˭ʗ\"],encodeOffsets:[[2207,12227]]}},{type:\"Feature\",id:\"NGA\",properties:{name:\"Nigeria\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࢍ̡͉¬͓ȉڥl҇Ղˡ؊שֆكYݍB¶തs՘ǂՊʶʴТԴėɨǔ͸ȍӾ˪ÎݤʌͺŠӘɖǼࣘĲࡆ̻̀ͅєaЊȶৰѡєrӸΨӰ}ʐŠҎ·ٲʓڂҸȠ֪ँƼnͬͯğƱ«˧۽ٱɛՙšѧǱȉǝי҅ΉŽыȋ͹ÿΓֽ˱ҽΊ͇aԃӭʑQЍ߷ɍש\"],encodeOffsets:[[8705,4887]]}},{type:\"Feature\",id:\"NIC\",properties:{name:\"Nicaragua\"},geometry:{type:\"Polygon\",coordinates:[\"@@̃ˆϽͺȁ˲Ο˄сϜĤžƒŵÚÒʾŀȔŬRkЮȠrǬOǺɤʜǝĒľƺĲ̊ɴbǦĄQňȪĖ|ƜŹǚȆńɄB̈ŌŜŖ˾iïă§ȉĐ̫ȗ˹ěͷυ®ɏtϙŹĉýΫÌɛǣɋ ɩźƏȩǱʛÈƓǦˉêȕŉօɞųŇ\"],encodeOffsets:[[-87769,11355]]}},{type:\"Feature\",id:\"NLD\",properties:{name:\"Netherlands\"},geometry:{type:\"Polygon\",coordinates:[\"@@ۦyǀ˳Ƚޓɇ́ԍ@ƘࢡҥȞՏπީǩ؛âѠɲ݀ఆଲΘ\"],encodeOffsets:[[6220,54795]]}},{type:\"Feature\",id:\"NOR\",properties:{name:\"Norway\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@᥆ؙઍɣऄՅෛ͵ڵû΢לઃͰಫ˵Ы؝ߟωࣗȮ઱¥णѼԉɝԷūփནƊɝҵ߭Hևױ࠿झಫ஁̨˹̇ͫ࠯bձ޿¾૟՞э˥ধֻۧυӛ֝Ԫဋঁ૫ȟ୏є̛ࣚˇ኶ޞզᕠ۶ဌࢂ໤୦፺ྴඦلᘼ੊ᇎπ൪­౮ۢ໖ພǘ\"],[\"@@ም΅๝Ȝ׆ɐԕˎეǚͮ̿ொȍ\"],[\"@@᪖صᑟͥұأ݅ǁЍۡৣᅵԢނ̘ఽʐ࿕܂ٷڄᘎ̜Ң̋஦\\\\͊˼௾੖̋\"],[\"@@࿮̏ఝҍ᝱ı៙ƖƫɴஹdँϬᣴɼ௞ȫࡘʤᑺȽ\"]],encodeOffsets:[[[28842,72894]],[[25318,79723]],[[18690,81615]],[[26059,82338]]]}},{type:\"Feature\",id:\"NPL\",properties:{name:\"Nepal\"},geometry:{type:\"Polygon\",coordinates:[\"@@ÝαŌՕĩͩ۩aয়Ȟ٭ĂӛђଷŊયҼ߉Ю߿͆͜޼ՒϠΒȪڪʳࡔշҾť˰ЕٶǓۀσौȕঔć\"],encodeOffsets:[[90236,28546]]}},{type:\"Feature\",id:\"NZL\",properties:{name:\"New Zealand\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Ȓ΋װ;ʐΡBΝ̹ϳչإїͷ̴З٭Yܗ̓ɣջӋࡗڇϓнʇޝlխˢࣱÐƗ̰Ҍذ੐ࠦժǀ׾͌ܜѰԎѦώظ͈ɆŰҶלϴȆΧ\"],[\"@@،ࢫlָϜɯŲًڰ˛֨ãӒ͎юĭȯݗʯӫٛjɡʭþαūƻͅҏзֹ٭ͯƟɘΕŨӞ۔˟ҨࣛͲz̦؈̌ƚ٨լͻ֜vƪБΎڋݔΗת̸àҚұٺɑʂݡ\"]],encodeOffsets:[[[177173,-41901]],[[178803,-37024]]]}},{type:\"Feature\",id:\"OMN\",properties:{name:\"Oman\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ֹ̻ϟªǩȧƉэļ֗ÿĻϯFԽ̻ćХȓǯԹP͡ɃJͻПɷҩĂ֗˳ϱ³˝טٿ൴ᠾ࠾֖၂ϩתv͸ʔΐFΆϞǒƩŞèմіHϖֵҸ̧؞ŋӼƳϜӕɨ˧̞ŃCȉ̩ԃƅɽΟˏ\"],[\"@@ŉƳǅ˺ʔ˺ľñā΍\"]],encodeOffsets:[[[60274,21621]],[[57745,26518]]]}},{type:\"Feature\",id:\"PAK\",properties:{name:\"Pakistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@تϻʞ٥൨ͻ߹۷ऩůౣȲЫα̖݁̈֩ڴгܑӟ`׳ࠃࡇՃ࡝࢝ࢡউÚऑࢡռϗĪ٧ҾэǘܝᇛD֓֕؛Ɇʣ؀٭٘໻ǁിeஃŝ̈́ঊொѢéϰГƌw݊ߥφͷԔеѶඨѕࡀŲԈŅǞȂגóદΔ܎ҶӈشCĠɼٞŌ̴ý͢ʀ±ԌΦԖ՘Ɇͥ֊ߜɴ̢͒мΜĩмȣΤӬμࣘǮ८ĮѐƺӨĦ\"],encodeOffsets:[[76962,38025]]}},{type:\"Feature\",id:\"PAN\",properties:{name:\"Panama\"},geometry:{type:\"Polygon\",coordinates:[\"@@˫ʎǵҒȺɢɅÎƿˤлɸοÁǝ̇ͻɁǽĉǩВҗɯŅŧŭϷ©ơԈŋƛˡ¸ǝ͸·ÈɓİέCǻĩŶªǖìǠƲŲĲǩŲK͸͘ö̠̝iǱͲĀæɴȵЮÔΨɄԜǞ˺ʤҬ·ĉҶώơ˜ʧ̈́ɵĹūȜӵǁʟ˓ÒŅС\"],encodeOffsets:[[-79750,7398]]}},{type:\"Feature\",id:\"PER\",properties:{name:\"Peru\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɥљћɋࡅӘñΈရࡊທࣾ٫԰ΏۜƐʎ܅ાࠣ༄ߍီ΅Ϥ˃ؤٷպױͼ˖ϒПߢʼךڢՎĲΓʇȧx̭ΎâͼĝΚщӆΌǄ֤ԦܶৠͨࣸࢠʾմŝٔɢĂ֒ЉˎЅϴɏӶࢣضĿҨɞ̤ƣԎð٠Ͻթࡣʤoрҁݳ œųۍǉ॥ֱÓϻɉ̇ČғԕʍBΡɛƵΔݳҲԝǱί֐µ͆҃ݐuېӸÇ౧ϢĩӄƠܪടǷ˵£ןg܍͟пƮ̵ȕ˯β۹Ջ࣡\"],encodeOffsets:[[-71260,-18001]]}},{type:\"Feature\",id:\"PHL\",properties:{name:\"Philippines\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@Đ֏ºҽ˹ޑ̫ࡨϽэˎإʉϿ঩Ӧɿ؊ʰЎՑЈˁΑЃثҵƑʖ͢۾ՌʀҜ̈́̔ϝٔɰƎϒרv·ٰڼЋêхÐ̱\"],[\"@@̟ˡˁՍ˃ʝԫ׈ǦɤɂɾĢԸҨ¸Ɖ֣جߺāߡ\"],[\"@@ૣߕЬט؈԰Ԏ׊Ѱ࠲Ʈۅևҧѳֿ\"],[\"@@Ԏʹ՘BgΗϳΣՕʧϸÒєŽА\"],[\"@@ʀभ٫ɞj˭ȶԯЍȋעʧªƁԘӶãY͈ԣٜ߮mɴ̻\"],[\"@@ɟܩέоѓ٘ܚ̡̈\"],[\"@@ԮʉʶɖüɇƍΑ˼׻ɛۥӷ˥ƁڳȊڝѾġϊĲਾүăҙ˜ȫēϯٻЮ̵Ѵɍ̯՗ԊރůлȆ¨ΎˀɊʣȘŇ̡бӚűμߨͺˡĔೄ˜ހԘA\"]],encodeOffsets:[[[129410,8617]],[[126959,10526]],[[121349,9540]],[[124809,12178]],[[128515,12455]],[[124445,13384]],[[124234,18949]]]}},{type:\"Feature\",id:\"PNG\",properties:{name:\"Papua New Guinea\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ɽčε͔ρՔǷ٘ŜĆĜʡʬȏРՑЈ˵ŝɽ\"],[\"@@ѯçƃɽҟȱћȟѽBۏʔӑɺêʺݬũҠàŶЖŦrĆѽӐÜʂ˼Ҹ̚ġӸԌfǜƏgү˯ԡ\"],[\"@@ݤտղࢻӖω٬ƛʥǁࣀΝġʏ֋ÏȷɔܟĦࡕŴٷ՚ӉҦѧ݀ભπ܇ʇԡˣńإڇ˿һƖࢅaᩒaᩒภ׃༊ӓׄїҴхŸӵඔԱȲѽޛěȄ֕\"],[\"@@ʿɡǁӸȝ͘ϝ˞ӍΪ؇ʚɺȮҒɻ˸ȁΜȫʹΛ͊ˏĶѧ\"]],encodeOffsets:[[[159622,-6983]],[[155631,-5609]],[[150725,-7565]],[[156816,-4607]]]}},{type:\"Feature\",id:\"POL\",properties:{name:\"Poland\"},geometry:{type:\"Polygon\",coordinates:[\"@@·՜à̂ȹ̧҆̚ɺɤȝђָʘ಼ϴ੒˴࠼ƙÚȱ߸Yਚħ໶^њěȬʵωɸ͋KͯԋǡʸϳfϏцܻěɽзįރۥɒϗǿ¶ߙ͔؁šЇĒӹǵч̖Ήŕ³¼ϭаر¼ăˀֻĦűɑҗǨÀɴػòЉ˔\"],encodeOffsets:[[15378,52334]]}},{type:\"Feature\",id:\"PRI\",properties:{name:\"Puerto Rico\"},geometry:{type:\"Polygon\",coordinates:[\"@@јõưǕɋɃمLӫ·άŢŬیK\"],encodeOffsets:[[-67873,18960]]}},{type:\"Feature\",id:\"PRK\",properties:{name:\"North Korea\"},geometry:{type:\"Polygon\",coordinates:[\"@@Şƥ͉ºη˵ʣ˷׽ѣȅƫƧ̓ʝ֓ƏηɥηįġͰƋӈσŧȭΧÇץ¡͝ϛϑÁùСǆĵƿʙéǀɑüɥƆɰφȤİõƶɆҒÅƎөĠЇɤۄբऒҌ־׮ЎˁܪſѺಚβͰҼժӹ\"],encodeOffsets:[[133776,43413]]}},{type:\"Feature\",id:\"PRT\",properties:{name:\"Portugal\"},geometry:{type:\"Polygon\",coordinates:[\"@@̦Ɉ΄ŬɂЫӺDƞłӪɼуϱɩYٽƍūЇγçʹԋɵտ̄ʡřɫ̵̿ê˥ͷɓѷŠџġŸڂÿԬϓþȩ͈äռͰ̨ÒͼǪԎkΤǙ̠˲\"],encodeOffsets:[[-9251,42886]]}},{type:\"Feature\",id:\"PRY\",properties:{name:\"Paraguay\"},geometry:{type:\"Polygon\",coordinates:[\"@@ͦ৖tҌЖ݌าʔޮ]޴їbʵʞҳÇଛࢲǇ΄ǐ֦ɩǀʣþޓİ͓̼̀ƌ̢ƳAҥŕӻǑӛƍݏށ١ړƇऻŸࡑɮࠢ౨ťψࡽ͢ਅبۉŸ໵ൌ\"],encodeOffsets:[[-64189,-22783]]}},{type:\"Feature\",id:\"QAT\",properties:{name:\"Qatar\"},geometry:{type:\"Polygon\",coordinates:[\"@@ÇؔɨѲɰĜʬˁdӯǽӳɵÑʫǖ\"],encodeOffsets:[[52030,25349]]}},{type:\"Feature\",id:\"ROU\",properties:{name:\"Romania\"},geometry:{type:\"Polygon\",coordinates:[\"@@δǶԴġՠGϸȳ˺źبĄɄȠΠ@ʰćʺʟˊΟӞԁρėΩưϥϒƹЂƊϠƟpɏПǹʯĀɻ৥ӳĖ̪ؑফțзɋ௽¬٥ƀ͙ÕʍΊƵƦȚƘȷŀ˃ȋөʔßΌԟȢĥˌҕͤڪǂԖ֮Њ֬ԢǮ\"],encodeOffsets:[[23256,49032]]}},{type:\"Feature\",id:\"RUS\",properties:{name:\"Russia\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ࡌ๫కˤԫ்ࠌࡳyוُԒսٱƻ۸Ĥࠊħ࣢Țٌ૴ӯࠜôରަϮͭϴϐŠɔ։̆ߵuࠟΎࡑ\"],[\"@@໵]ਙĨȒτ୊˚ࢢƧψƃęɱäɉ\"],[\"@@֦Ƚțؐᗸű࿨޻࠭λ൛ēsࠑͳǩ޽~ٗ̊ૣʖȉθ࡟Ǝॗŉҗ̎Ǽ̸৓ȥϚЃӉΣ@„Ꮪٛᔺ࠳ïԷ\"],[\"@@ः©ƭˌੲΖ@ַ\"],[\"@@ળ»@ָň܈E௒ʉïŗࡽȩ\"],[\"@@ౡMႣĤƧ¬ߘͪੀþஞ͏ĸə\"],[\"@@ॿͩഉø༛ͨȪ˖༨ųᑔɗ\"],[\"@@ډرᶽzඃȣမղҎ׀૎ǂᕞᴬѽ\"],[\"@@ӹóᩣŊɟώູɦūҒ࡮ǶҞသܒޙĺ፨݆ɩϢሤѺ᪪բ᫠ǀ෴̸࿐Ŋאͩ֟ʻᲗз᢭Џᤙߝఫࠍ೉߱Ǡۥྎۏ\"],[\"@@ɨгސȲឤYቈЧڬ̿ȽѧङʝᕅүفʟਬşఖɃݴǄєաτɔഊƂ᧪ƑȴϽ↲ů´ٜᄼƥഄLബѷϮ՝ӹΙੌڋ೔Ϳ߸ࢦഖϙ෢ɦྼʵؤʀൖş؅ޮૐζ䢀ձܐӿᔲٛ₎ǄာƑ۪΍Ĺؙਜʇ૴Ǥ๰vཚǑཪĢะݛਪˎڷ՞ϐώᧆɻფºᝂБ୲ν@”MKઇσઝÖݶҁԄەϲɧĮΏɑɝ༧Ǿ᚝مݛĭ౽ן௛ԧ̱ϣய׊ᔗڇϣ̸ߵΫ૱Ř˓ց৙߽ͻड़ȋő௣ޭΫ۱Δα฽ѕ̅ॡభȳʥ࡟ே޳ׂ̳έ௬ҵለИ୘܀ԆªϾರȊຊ੒คࡺຢڢڮஆ৷ëԍۗᒉइۍਖᓧ˷ᑃටۚԧሙɕಝēÔ؊ಯŶ਩ЭᢵƠ᪏ʟᨩ࿛ủጝ೚ŁаՃࠄȅ՞оईÃௌऍ܍ځ࠽ë্ϛഉ్௓˯ׇଙ঑ଇॻթӹ૩ӱՉYՇФૻؙſ˩ŝƦKѐіxŦ঴ɛܚܞ̒৶Ʃ֢ࠈ˾ऄ͚̮Ѵݲ൷ʛܯͧ౧Dͻ߄হװหˎ̵ࠖ̉Ԫ̿βԯࡐ̲݇షʢ૛uਯƱۛлҤȥXҩұˑݷࢻRσஅՍ৙̈́োéѯˮԋĞ௷ףેƑޛȻੑƌޫSԙіࠕИࡅŎ੝ŋߏƹ஛ΜǇـধɎށİवΎࢉࢉ΀ӵࠇב௏ɂ࠻֗Ͼ࢙^ܳʴ౫Ѓྃܣࢭơ͡çѽԤઍőΧΦחǌЙӠҩưிɍୃӜ҃ѯሟᒒੵٮ̮˂ᑋߍ߭³êҞઅ˺࢙ȱ˃ࢊມǺݯΑᑅ̳Чȹḭ̇ϫ˻؆ֹ߭ɓǀɭ߭ХസֿɁЉ୻ʓʟ੹Ѧ೯iࢻΟহͼᇡ׊ಽsჃࣳĿؗࡹӤڡउʖǡӝُ܊֫ذx՚֗ďѝѐƋϥӽ߿Ƒ࠳ࢁކߕĉ֣ࣼফԇ͹ƝɇωÌֿԚɿՅȚʳΈ޵ǮԙƁƥƼଥЖఅƌ܃ƞĹıੱ܂य़̈́ܩӴؒƈۤ۰ҹͪఌ΄uȀݯƉώѠɼ߼ÖƄ˪ȅҪ΀ѰWʚఉ˚ӭUԯЀ١ƃ੩̐lǒ̗θڟ¤éʼɀǞ՝ӈࢋąʭ¦Ƀȑ̽ȷ՞ȟ˨ǊĀڴ͞Ȁʍɢ֥ƪ¼Ʋ΁ƴՃվǸɨĉЂࠑȨѱĳšȼࢭɂˑӸíТЙȖάˊʝ޶װӞųƤक़ҬࢡЎᅢ੶ޮӠ͂єగּΆնݳش֢ܜ঍ग़ޢي౿֔ŬךڶüොͶࢀ̈൦ԕᘨȧṺो٤ЋÆ֓टѳ൏ɡ⏷ٔ؟Ńൌ؛ÂϵÆ࡫ઌʯڂɓňРԑΰ՘͈᎖Թ۾Ȳ֣؜ዦࠖޢµ޸̋Ӫ׀۫ԄЪԊءԶᚠˑӔҹ੡ĻNҳڌ˽ಜǼȶ՚ჶАᰪܞي£ࠣԙਬĕ׼˼༾xఢΐफ़ԏॖ֌ࢡӢѪˤ២ʫ୒ʿᴾॣ֚ѰࡡѺ{ǴৣĈˢЌ҅ټ}ː༄ݾրކزǒᕮɛǬұߕڽԺˋ˒חȏଵऒԧέ֕࿫஝०ŭ̢ͮऎɎɞжܮЎөӌϼֈࣿêȫҲڢࡈણۆຒ֦șװмnѴүͧ߷࣐Ƶϥ؄ඤͦლ¬༈ӏݛ۪ċࣆศǞ፾ᆘŌہѮংւॲx࿎иᕠŐ˪ɲᕂþیȋሴҀ໲aɶδߤΨጤΈ෸˗ଥȷበŹ\"],[\"@@ⵙ͕ໞીےĦقÃᒈӋʟͿ\"],[\"@@૽ōݱÛśƏঙƑ࣫ȦӐʾል~࿞ƶ౨XǢɧӘȬߊƐఞǿ͗ŷ\"],[\"@@ᆳĿᚉʎඅ͎٣׾଩ǔᔆָᆎȎ࿌чኬ߻ȹݯ\"]],encodeOffsets:[[[147096,51966]],[[23277,55632]],[[-179214,68183]],[[184320,72533]],[[-182982,72595]],[[147051,74970]],[[154350,76887]],[[148569,77377]],[[58917,72418]],[[109538,78822]],[[107598,80187]],[[52364,82481]],[[102339,80775]]]}},{type:\"Feature\",id:\"RWA\",properties:{name:\"Rwanda\"},geometry:{type:\"Polygon\",coordinates:[\"@@ͬӃµӵʏŁѿÆʱӍԛàþҠŘÞԄʎɺȰďԈʸ\"],encodeOffsets:[[31150,-1161]]}},{type:\"Feature\",id:\"ESH\",properties:{name:\"Western Sahara\"},geometry:{type:\"Polygon\",coordinates:[\"@@oҊŸ@@ÉeǋEౝ᪁ªᒷ޿÷ȳћǄ்ᾓNǽ˫΢bCቆäĶ̢ΆϘˤୌୠ࣢Ђ੖ˀÖ˜ټۺĜ̦ŉϢ@˔ȒԲ\"],encodeOffsets:[[-9005,27772]]}},{type:\"Feature\",id:\"SAU\",properties:{name:\"Saudi Arabia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ŉΪʩʨÝͲѡ̞҃۴ʁۆׇ׀ϑƐ֋ߠīאӾӕञϿ͠ґǨˡӖ°ȎɹѦʕȊ͝زԟڴѓ־лIžҦ̌ļͲनƅζʶȪ̢ٚŚƒˮˤƜ࠷ࡀ၆фǆŴৢɩబיᛎၕ༠ãݠąȾЏתv͠ܥаȓƠִ̏Λ¼΍ċ˩ł˯ʎɽŐ˟ŲȵʬǕɶÒǆ͍ș࡙͐ᡌщǞǲϪש֕၁ᠽ࠽ᝑ͑޷ϙ׻ࢥϹƕɁˬ͏§߻ĎƷČॹmɫùΉɔɝЭĒΟρˋ\"],encodeOffsets:[[43807,16741]]}},{type:\"Feature\",id:\"SDN\",properties:{name:\"Sudan\"},geometry:{type:\"Polygon\",coordinates:[\"@@śhdмĵ̀џͨĵ؄ĶبϳÌÍȇԍ©Ȭʕðԍңңл؅џđ۹Ӫͅǥđʓџǃǥ࠵@řǦ؃̡ƝɳîѝӬƟɲ؃ŗɱϵɏݣ˿ǁʳğå ̅ʎÃʼƌΔE΄ӛՀĩάZȰ̱ʜUӦǭ͖̍µĎ̰ɒΖħΐˢʴǫȞɞ԰ϨئܦÏ¥ ZΚॲH@း⁪@Ὂ@ῼ@˔ࠗȁƳŪࡻ্̰͌ȷҠ̳ыӑأƏ˅ʳĉ֑α௿ĚͳƅܟͿࠟԓзέٛč΃Љɽʝ࢟Dĳ\"],encodeOffsets:[[34779,9692]]}},{type:\"Feature\",id:\"SDS\",properties:{name:\"South Sudan\"},geometry:{type:\"Polygon\",coordinates:[\"@@Xٽűʯѿq˷ӏԨÑюХƨͳϦșӼࣳ֫օԫԇԫϭסFگȟՕȊ΋ɭ݉֐ȥάҵǱϱÆɣƕϗĸԗۚƉˊعͪɅԌΕζ֟ѬS˘ҡͼ֯͠ʴĠ̀ǂɐݤɲ϶؄ŘƠɱўӫɴí̢ƞ؄Śǥ࠶@ǦѠǄĒʔ͆ǦۺөѠĒм؆ҤҤïԎȫʖԎªÎȈϴËĵاĶ؃ѠͧĶ˿cлŜg\"],encodeOffsets:[[34779,9692]]}},{type:\"Feature\",id:\"SEN\",properties:{name:\"Senegal\"},geometry:{type:\"Polygon\",coordinates:[\"@@΍ٺн̚φǄРמȦќ˾ːкïШǾҶVДʙ֎ɝԘأֈֽԹǔӓ̾ɿî͗ʽŧ³қâÙģȃk׿ȲЛV༇ɥħ˥ѻƋƏ٢ވkȬŞƮR̸ȘήǯκcζȌǝʐˡƙʻJͧȸˉ_ȍȥࣵy\"],encodeOffsets:[[-17114,13922]]}},{type:\"Feature\",id:\"SLB\",properties:{name:\"Solomon Islands\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ɾ˿חN͉ԬԈȯǜ\"],[\"@@͝mԧĎǫżÀͮֈƁ˜ǭƎə\"],[\"@@ųƹحܰǫԈ˺@̠ڥʹЗ\"],[\"@@ǛڅΦҟ̠̿˪ŰĐϮȫېϭȢˉ\"],[\"@@Ǘ³οȒ·Ί¨ƖԈΡͰ˛\"]],encodeOffsets:[[[166010,-10734]],[[164713,-10109]],[[165561,-9830]],[[163713,-8537]],[[161320,-7524]]]}},{type:\"Feature\",id:\"SLE\",properties:{name:\"Sierra Leone\"},geometry:{type:\"Polygon\",coordinates:[\"@@ɧØ؁ͺѩ҈Ƨ̬Ĺت҆τĬɺƞǸɶpȜǂڦCɺ̛ǼΛʓƈɗṶɴ´ϹϹϛҗ«ʓȩˏ\"],encodeOffsets:[[-11713,6949]]}},{type:\"Feature\",id:\"SLV\",properties:{name:\"El Salvador\"},geometry:{type:\"Polygon\",coordinates:[\"@@ġȡӡ^̡Ą΍ǘұÀʃǶ~Ů˾ɄǀĢ«ĲȠ¾ʜëǸǙʪƇœτĴǤÑŘĝÏͳ\"],encodeOffsets:[[-89900,13706]]}},{type:\"Feature\",id:\"-99\",properties:{name:\"Somaliland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ϛԩד۫۹Mᩧা͍̜̳К̳ҨǾ̖̲҈˚ƹǒΏϜΗкGߊɌࣴĴ݌ʼиÆ̚ƶӎKaE΋Aࡑ@ѫ\"],\nencodeOffsets:[[50113,9679]]}},{type:\"Feature\",id:\"SOM\",properties:{name:\"Somalia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ѼĎЊ˾͈FpɵýӧHѳǯ̣ʁࣥЙयԱ੷ܝ௷ܓवধ଩ࡁڹష࠯޳ٕँৱȗѷȍȣӽۚWᵤܾ॒ɰˆբfݠפબᛜᡄה۬ϜԪ@ѬBࡒFΌLbːhϰŰ\"],encodeOffsets:[[50923,11857]]}},{type:\"Feature\",id:\"SRB\",properties:{name:\"Republic of Serbia\"},geometry:{type:\"Polygon\",coordinates:[\"@@Ԡȡà΋Ӫʓ˄ȌȸĿșƗƶƥȷȏø̫Тγ͋ʿƗˋĞĳƑšϳa˹µØĴĴĦȴšKǍƼƑ ŋƆƽÀšŠƯ±ś˧ȩÑèð͋Ǩ˟ĜūŜɟƠȢŬЄЛ͔ɀτ̥Ë͔́ˉʈȱ͘٢ɚԾҖͣĦˋ\"],encodeOffsets:[[21376,46507]]}},{type:\"Feature\",id:\"SUR\",properties:{name:\"Suriname\"},geometry:{type:\"Polygon\",coordinates:[\"@@৔ǙĞưڶÔࣚɥѩܟâֹͤӽƥίóϩɉΛӓǲЇđ͹öčʏƘǗ÷ǡҙèԡܴōӄˏBωؐƺѠ¯ȤԜɖƈݲ\"],encodeOffsets:[[-58518,6117]]}},{type:\"Feature\",id:\"SVK\",properties:{name:\"Slovakia\"},geometry:{type:\"Polygon\",coordinates:[\"@@´»ΊŖш̕ӺǶЈđ؂Ţߚ͓ɷɓǏ͹ǳđ࣑ʮ˟»ȟȡЁĿěÄХŽͭ}ãǙ۷Ļ̱ĠёɌċ̆äńŢȂόa˺Ĕxþǈ¢ÆȒȖžưʢD\"],encodeOffsets:[[19306,50685]]}},{type:\"Feature\",id:\"SVN\",properties:{name:\"Slovenia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ۜÝъȐܾtǈƘƘUǎ˳ڝɟć͹̇đHɻͣh˷ƎƷƙבȈúȫΨĞа\"],encodeOffsets:[[14138,47626]]}},{type:\"Feature\",id:\"SWE\",properties:{name:\"Sweden\"},geometry:{type:\"Polygon\",coordinates:[\"@@ࠁוƀԥ೹ڭྱܡؓஃײףߦүޗॅ࢑ȝ͍තӋ޿৳ĆӅڗঃˉߐ۳॔ٓஐφӜּۨ˦ন՝ю½ૠղ߀࠰ä̧ͬ˺ಬஂࡀञֈײ߮GɞҶཔƉŬքԸ૪Щ಼ֱv಑˴͛ฃʃ\"],encodeOffsets:[[22716,67302]]}},{type:\"Feature\",id:\"SWZ\",properties:{name:\"Swaziland\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǡύӭěԅҖS̄ɰ̀ĂʔʐÒшƵŰϕðω\"],encodeOffsets:[[32842,-27375]]}},{type:\"Feature\",id:\"SYR\",properties:{name:\"Syria\"},geometry:{type:\"Polygon\",coordinates:[\"@@࿩ࣅऩͬgNŖŶ_ΈȸҠҜ̈́Əͤϗ¨ÿٞȶΌɤȀɤȀ°Ҹ˞Ǐऎɺ҂ƿۖFॴ̀Ґaक़žїԽҡȹĂؗͅ৫ᇵ࢓\"],encodeOffsets:[[39724,34180]]}},{type:\"Feature\",id:\"TCD\",properties:{name:\"Chad\"},geometry:{type:\"Polygon\",coordinates:[\"@@ĎЄաnDզΓ̶δ૊ੴߌ¬ન͖ၼǼΰΓ˾_ˌ̽ɔȷರࡔҠ…ྑ…ྏ¦ ܥÐϧإɝԯǬȝˡʳĨΏɑΕč̯̎¶Ǯ͕Vӥ̲ʛYȯՏƛэͽ؉ࣹ߅ϳ߹¾ʁûĊ̏ѫ̋Σ͟੓͏ȽȐƓhƹɍۛÙƀɪ˅ׄşΐλƜӷӪǼІϦċʂÐҸSқކ֐É֐ͭՠ\"],encodeOffsets:[[14844,13169]]}},{type:\"Feature\",id:\"TGO\",properties:{name:\"Togo\"},geometry:{type:\"Polygon\",coordinates:[\"@@ڱǳȇ̎ɡՔãкȆݴɁ̬ăڎD؎ΕѠÖˀ݂kŅѵʲʝ̈̋ЭǜǥኝȺׅ\"],encodeOffsets:[[1911,6290]]}},{type:\"Feature\",id:\"THA\",properties:{name:\"Thailand\"},geometry:{type:\"Polygon\",coordinates:[\"@@ݭϬܗeŬڈ݉Káऋґ௯˙ݏÌ؋ն΀ދưܭҶӓԚĭѤѧ˝·ևĵßќۇςƣƭͧ͒ƝжҁӄПЌƏӳǃҲĠԾʚ߬ТࡸҤ޶͟ތ`϶ĩҸ֕ښȩф̄ƺ̮ܶ·ֆՓؘН݆ΠƴϦࣦצӬθӔȘθʷ´ԍ֨ȷࢭpݫࢰԆʤƧӰzǜَ̊ÍٖڽÀࠥںܷ܅˙ϛ޿Ŧગǅ՟ۧȤ১\"],encodeOffsets:[[105047,12480]]}},{type:\"Feature\",id:\"TJK\",properties:{name:\"Tajikistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@̭ʷࣳƖāӛ࣬Þਢ˗འŶɈާˠĐԜȓ͛ŴӍࡿBׁØԻϕύĉ̉ǯͩˠþ۸ʩ¢ĞʲғȐα̇ė͹Żūԇj˕ϩ˯ǌ؋ˑʱĺӀࡘǹض؟ȨɔφۮЌҬˌբ૲ȜǩϵŤɹΎv\"],encodeOffsets:[[72719,41211]]}},{type:\"Feature\",id:\"TKM\",properties:{name:\"Turkmenistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@ñۼطॣݔڣĠगюׯþσƽ֙|ׯӓ݇ǋƻרŪ࢞ٽ˶Ɏֺ֏¸Ȇ۾ߊȵ݈ˎؓԎʉӔڱɋď؛ʿհψ˨ॖǪ֨ɻךڅњ¤ॆ\\\\Əцܖ̂۾ӦଆѹĜڡ͐ǣࣦˮƳаࡽ०ׇոЃ࢞Щ૤ΫwԥʩЅɤſ̙۽ǋǙڥӁʭڏŵǫϟهŏࡩ͈\"],encodeOffsets:[[62680,36506]]}},{type:\"Feature\",id:\"TLS\",properties:{name:\"East Timor\"},geometry:{type:\"Polygon\",coordinates:[\"@@ĲȤܢȌזˀŀ͆Ľ̯ɫ࢕ο۳ʋeʬďǔ\"],encodeOffsets:[[127968,-9106]]}},{type:\"Feature\",id:\"TTO\",properties:{name:\"Trinidad and Tobago\"},geometry:{type:\"Polygon\",coordinates:[\"@@ӚŊǮصۭġƯúʒɲiͪ\"],encodeOffsets:[[-63160,11019]]}},{type:\"Feature\",id:\"TUN\",properties:{name:\"Tunisia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ΩພԭͺQȰۉԄóنԮҶȢۚƃߠǠќࣶͺךĵ}ы܊̲ÒǉпЫMϱ̆ȽōܫփхǄқѤaɄЍ͊ſ³٥Хʋʵˏֽ͓ĘΑïΟЧț\"],encodeOffsets:[[9710,31035]]}},{type:\"Feature\",id:\"TUR\",properties:{name:\"Turkey\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@஺͗ঐżܤõলѬࣆ¢ߴЭƜ̑ăУزȻͨʕֻʇˀ५ǏʻҠڧЕƙ̏Ɋ঍ňίŽॗŽҏbॳ̿ەEҁǀऍɹ˝ǐ¯ҷɣǿɣǿ̱Ϡ͈͂ԟí۱ȖֿәౣĥڹҊࣟȗΑׇĳ߻҄ࣻeӽ࠶ؗҰЦٸՓВठߨಒΜྀٔŏ৞հ঒ʄർlุף\"],[\"@@۫ҏ˃Ϻ\\\\ǦȦĦʺՂХɞࡦ˄ܤőĴ͓ܼ˓Ƶȵি±Ωʷ\"]],encodeOffsets:[[[37800,42328]],[[27845,41668]]]}},{type:\"Feature\",id:\"TZA\",properties:{name:\"United Republic of Tanzania\"},geometry:{type:\"Polygon\",coordinates:[\"@@ƚġᵂႋÌӣ஼࠿ϱਙ¸Ӊՠ̩~ɓɳԓ¶ʭÇГ̌Ճΐ̰ࠡǿڝӣࣿ͛ԋb̙ʥבsɕŃঢ়ʂكåɽଢ˵ϺǛɶࠗƾӉʨՕƘͯƘΗɈґ੖ӣҺǗӤČѨƯޞΎ ̨̦͜ѬȺǮS˘ǷȐ·ͨʐł¶Ӷͫӄ̎Ķऄ[ႎà\"],encodeOffsets:[[34718,-972]]}},{type:\"Feature\",id:\"UGA\",properties:{name:\"Uganda\"},geometry:{type:\"Polygon\",coordinates:[\"@@ः\\\\̍ĵԇʷȯĐPوȜ͎²ڬǰϸ͎Ѭ͔ɠ˒̘͵Ŗ¼চΌɮՖȉڰȠעEԬϮЊ׍İсτ९̧ؓЯ֋ʉͽTࢹႍß\"],encodeOffsets:[[32631,-1052]]}},{type:\"Feature\",id:\"UKR\",properties:{name:\"Ukraine\"},geometry:{type:\"Polygon\",coordinates:[\"@@̾ɄȒʮ¥ࢌĆ՞Ӈȿǝêʻڠ£̘ηkǑ੪̏٢Ƅ԰ϿӮVఊ˙XʙͿѯȆҩƃ˩߻Õџɻύڡã֑˕޽«ܣ̻¸ԹЪȭࡨ¼Ǐ̛ँơଛӟұǠȄЂࣽʘƨǈߪ˪ʑȔಯɆË̼ީĻ̷ҧٱةϟƠЁƉϑƺɂĞƦ˾ɲˎÑƮǬäĊśӸ{ɞØƽĎÐŲ̉ɈŧΘ̩ƐÒ˶ϝɦΉأʾ֑ĉȧŭΟ@Ƀȟاă˹ŹϷȴ՟HԳĢγǵÍɤұɮǐͺɸɔȀµɑϘބۦиİĜɾхܼДҢɪٲnࡖßबȫڎi͂ŧ̀Ʀɚȝݸ¢ͮąÄцʶȂܞº\"],encodeOffsets:[[32549,53353]]}},{type:\"Feature\",id:\"URY\",properties:{name:\"Uruguay\"},geometry:{type:\"Polygon\",coordinates:[\"@@ղĚࡆٯ̺|ࡺ՟ڈҫӠֱχЉɸӇεՇॉұاǚғěޥΰ֫ԟҬÞլǾȈS࠸ɤࡺȾڦ\"],encodeOffsets:[[-59008,-30941]]}},{type:\"Feature\",id:\"USA\",properties:{name:\"United States of America\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ũƕȽŤ|ɾƓ̨¦ĤƤƎÍǔ¸þÜe͐ƙƬñƌőɊ̍q¯͟ǵˏſ\"],[\"@@˭ÑƟǮīèQÀĈî̘āɘŹëĵ\"],[\"@@ĝ҉|Úĸа\"],[\"@@­µÓŻŃȒɤŚêÃʐ˥\"],[\"@@ıĉ˱ƴªÖŸĈȘijȝ\"],[\"@@Ƭңʼƛז½࡬ƅࠂʹڼŊਖɓ˞Tݨʄ߂̧ࠒ͗ں˩ٶˏĈəȢĉ½ĉɦǎĔ¦ȣǜƅɴ@ŬĹĽƫ࢖ЁǶށǚܳʗӹЁҥȁ̍mēĦť˸Ɓɂ@ঊ҆ࡾƀસмfĐ÷ʰƉǒϜƆࠜHޘAˎ͞ŀàࢶ؄ϜƸ౦N໾BĎȺː¦Φž̖Ϣʲٺٚي˨ə֜ƜώʏAଧռӅƢ˝࣋Пࡷ̃ࢱʝѻӿƛȋSѽˤѽΒsė̬ʦȇãʇ֥ƋЗhةƥλ¥ӥ¥۫ʏఀǂʠǃ୳ʥ՗C|ĺʭɷʚǹ׽ؑ٧×Ɏȁª˟ɀǪҍȼƭ^ͅˏ͛ҿڡûʺֲѕ͎įۦǉεǴՑևƀׂ˓ߛʊÍĖ̃ŠࡁՕدࢇʝցӱнÁэ̱ţ˭इձӁЍЅӽŻׯƪ׍ˬܗώשLεЊঅ֥͛ȿԡʣŃЯĺƁς͋ȖѻܢϹٞű͢Ǥ֐ɽҦٻ۲͟źࡑϡƭ¦СϼՃȺोŁݗĤٙÍΏſƲɟaͽǴǓǇō̵Ů́ǃ؍طѺܻĿ؏ȚԹÏۻȝއح࠳γҝБȕϗUׅ¨ЕǄ˹͝{׭ȂٽʺɽЄȁטӷӐ̃ӰуֺףͲۉgՉڑۣʦѡʪȽҦ˧Ѯӿτїˈ̩̖ป@C΋ڗ@ဩOቿפ౓ТĀǒ੩ĝॕÝƙіխӚϻĴğʌһ¦̝ɪޭĊɉƌĹҢࠁࡊ۩ୠȚχˤٯ۴řۆ҃ҞȀۢܜˍ٢͠ߊĸނĺނƱૼˇܘʓ϶ĸǐ௒˷҂ߋȺɜƇې˷ێᛸ@᠂@ࠜ@ᢢ@៚@ᡀ@ᡄ@᭰@ᮞBაAF͔˴J\"],[\"@@࠽͋ѕɐŽЀބ̘҆Ÿ֐ÉΤʻܫЍ\"],[\"@@ԧŽսƾԛɮࠦƞښùĂ͑\"],[\"@@԰ǅԾĒڸɛ࠲őéĝُǱٕǾ͋Ʋݍµȧôº̈́\"],[\"@@؊ϛώǌහ»¹ȕ౾ƛࡨČᄚ˅ྤā٨ŉ૦Ǝౢʧࣲŝ@@MᷱIⷍࠠ{ࠌɵהρݜցࠈҺࡈ˖Ҁѡ֤·ޒϙՂ׽࡮य़ේ՗xՋұЙҥ͂ݍˌʃܺએںҍߎ߯Ä೷rটʌ჉ࢎߩǄ฽̜୑í࿻ϬৃΨटǯǦ׏ҫÁঁǫ݉˱झǳťӶϚࠚࣀʶɱɂੱҵֵ֑௅ױؚСߏ׿ࣗΗࡁʱȻωಽѡ˅ϿছΫֽÞ޷ɻ࡝˹ۧ˫෹ʉſƘऀϾࠔʸࣆҠਬĨвΈ୘ԊȈǚب̒ƢْђӸॹʫ˓Ơҕ̧շюɧ̝̽м࠿ͳԩBïԄƲ̮ե̚થǇ܁ЀַȬIӈ٩Ϊ͘ӘۆҸ̚њںÖ־ƇڴМ؎ï٘ʼƻϨҹưج͖ԩWࢻǽʯȃڏȄஏĥ௷ȬΛ͸੟Ӧ୾ΘመШ۔@ŕнᄢڽԶਕ͌ױр߫ΨଽˈҺѲ๰ਗ਼ϦȨФ࡬ЎࠊĪཪώޜÉಐ҄ౚǭ\"]],encodeOffsets:[[[-159275,19542]],[[-159825,21140]],[[-160520,21686]],[[-161436,21834]],[[-163169,22510]],[[-97093,50575]],[[-156678,58487]],[[-169553,61348]],[[-175853,65314]],[[-158789,72856]]]}},{type:\"Feature\",id:\"UZB\",properties:{name:\"Uzbekistan\"},geometry:{type:\"Polygon\",coordinates:[\"@@xԦૣά࢝ЪշЄ॥׈Яࡾ˭ƴࣥ͏ǤěڢଅѺ۽ӥܕ́Ɛхॅ[ᶾᓘӺƾïದ׻یͅߤݵঢŪ෸à৔ؗÙࡅЦMǢۍ੬ɲЉ̺Lπ׺૎הӖƺʠĉ۵խئ́ײȾ়ѷ੽؁ٕĊ΍uţɺǪ϶૱țˋաЋҫۭ ɓυؠȧǺصҿࡗهǰҳN\"],encodeOffsets:[[68116,38260]]}},{type:\"Feature\",id:\"VEN\",properties:{name:\"Venezuela\"},geometry:{type:\"Polygon\",coordinates:[\"@@yȣӱĭ˜ϡYѭυӥ͆ڙδÆȌ؈ʻ̒§َਸ਼΀řІ̎ˆ̞ןל_մҵ˧ݮQ࣌ĔӖϕٞĻҼʾXɄਨ¼৖\\\\܉ʛ˼Їڦ×ِЯƆڧѬn͢ȣڕӱó̫˾̷ȽƽԫƉjϱɫɱّ֪Őʁ̭͍ऱ̽׿Žʏȣڛɀثņƿýϔɑ֝ŜՉ܆ï°ǭ׷ʅĭΣΉƏسȝǋʱٷÅҧѼʯ࠺ɟ̧̌ȄюмȊʅʠǛ֒à׼Ȉ˰ƲҎ̓Ơӏĩ؁®ͻęסܢӥńઉăȧ̊ȷêǬĴ̶áͺȃȂŅϮѡÈɸӮĺ׶ʔ̸͘ʌɈрդƖ\"],encodeOffsets:[[-73043,12059]]}},{type:\"Feature\",id:\"VNM\",properties:{name:\"Vietnam\"},geometry:{type:\"Polygon\",coordinates:[\"@@૭ܗ۫ߍȁ׍٠ࢭ޺ળނԱԞګϪ།ŕ๓۫փ१եۇ۫਷ޱ̧ՠʀ֬دӌܬ͸ࢦÔσԚප٨ļ৖ț֖ƶࡀɃצٍאՋ݌ۥ঴৓Ԋʊ̠՞ɘ͙ܺਙPϕކӭڐҊȴڢIࠈĬܒ҄К̿ސƵƃӛАͿࡎɓ\"],encodeOffsets:[[110644,22070]]}},{type:\"Feature\",id:\"VUT\",properties:{name:\"Vanuatu\"},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ˣō˭ςɤՆӗ\"],[\"@@ƌڱɥŀǩ­ťɴi٢Дʵ\"]],encodeOffsets:[[[171874,-16861]],[[171119,-15292]]]}},{type:\"Feature\",id:\"PSE\",properties:{name:\"West Bank\"},geometry:{type:\"Polygon\",coordinates:[\"@@@ԣŭʙЃŕɜɌŚɁĦǬ̤֔ś\"],encodeOffsets:[[36399,33172]]}},{type:\"Feature\",id:\"YEM\",properties:{name:\"Yemen\"},geometry:{type:\"Polygon\",coordinates:[\"@@؉ɥǋύo˹࠷Οഇϻݩףυ±ʥºӭΑ՗ǉ۷©ɃµǿɛəÕŻɇеlˍœ׉¨ɓӬzҠƍʜǑتʋΊǚ¤đϨĸǊξςˌđΠɞЮΊɓɬúॺnƸċ߼č͐¨ɂ˫ϺƖ׼ࢦ޸Ϛᝒ͒ڀ൳˞ח\"],encodeOffsets:[[54384,17051]]}},{type:\"Feature\",id:\"ZAF\",properties:{name:\"South Africa\"},geometry:{type:\"Polygon\",coordinates:[\"@@ǏŧΣяɻћӇ׻ोࢁףԋًϣ࢛͙ѓ«ŇɷԛŰеǅ࣫ǊԙĹΏ¬ࡿͩܓƃԱͅϡoΣ̚˳fαϒśŏɦLӰ˙֞˔ƴs٤ս޼х܈AF׽તДдͪɯƘΫϘÓՈǃҌÖݤіB᷌ɨűӾߙûԟȈ̏׼ĒрϒЊʨȶДЦȚΠķВɽۂ£՞ȜĐʾƨДҚäʨ͂˪֔ݮغஒؤ΂UОƛ˲Ķ҂ċД஁ɔׯƫऩî̟чƶʏÑāʓɯ̿T̃ԆҕӮĜǢώْQȿؑıۥɑϛֵщ\",\"@@νʶϻǟҕ҃͡Տـ٧̜ČƺˎҴƀƜ˜ʴФ̅ʪ\"],encodeOffsets:[[32278,-29959],[29674,-29650]]}},{type:\"Feature\",id:\"ZMB\",properties:{name:\"Zambia\"},geometry:{type:\"Polygon\",coordinates:[\"@@ІϏɊ܋ƝɩǙڻǈۡ˃̇ʭޭѶɓᢇۗĂׯٍřӍͯĹ̛̅ßܵۓҭխ˳o˗ĬऱĠƯÚOêͧȎկ¶ۋȑչԾ֣یᦶშYí̂Ű̀ƧЀĪТėʺ̂q¶ʽϾrՖûˬϡڨŝԤˆȌѯ٠ş̴ΧΈҥ٠Që࣠ɱƳח͞ɧƬļࡈƬসȉψʈ՚ɤĶ଀ƚͦđΘɇͰƗՖƗӊʧ\"],encodeOffsets:[[33546,-9452]]}},{type:\"Feature\",id:\"ZWE\",properties:{name:\"Zimbabwe\"},geometry:{type:\"Polygon\",coordinates:[\"@@ҁČ˱ĵНƜ΁VՙϞٯźʙՒC̒έĞ्ई˃ӢǛƮ͓ڤलğ˘ī˴pҮծܶ۔̜àĺ̆ӎͰَŚÆ̻۬hϴǯǺȻАÓѦˑF੟Ǐ׋عƊʝħӵŵùɛ؅ࢫ॓\"],encodeOffsets:[[31941,-22785]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/xiang_gang_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"8100\",properties:{name:\"香港\",cp:[114.2784,22.3057],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@@}ScTʟ@cWuJÁ]l¦RLj¼BĄà H@TOHCTDDDHDNAT@PEHDDNJLX@BABALHFF@DKHADBBLDHHFBLEJB@GDBBFBADDB@@KFAFBBJJA@BB@@FFDDADFF@FADDDBJC@AFBD@@DDD@DAA@D@DB@DHHBFJBBFEHDFAN@DGDC@DLCBDDCFDlAFBFCBEF@BC@GDAB@FD@DZJX´HĐMja@Ý`p_PCZ@lLnRGSDMFK|a\\\\Y}­§Mën\"],encodeOffsets:[[117078,22678]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/xin_jiang_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"6528\",properties:{name:\"巴音郭楞蒙古自治州\",cp:[88.1653,39.6002],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@@ÈÒĊanwŎVȮ¦ͪŃĢÜōȂçČéƐżLɆóĊĊaʊŁ±¯²Um»ˌmÈ»VʠţWÑÅ¯ǓéôƑƒğÆīŎī@Ƿwô˺LÞ¯ƨVǪÑƒĢȘV°wĢôk°¯ƒ»΀@Ȃ»ĸǔ@΀͔ôôLɆó̐ÝɜLɲōͪƨóŤK@ī@IU܃ÛmȻţǩÝ˹ÛǉťǓǫō@Ɲ²¯VçōKͿŁΗÇţ»ƽɅƑLÓŏÅÅɱV@ÝĊU¯ÑĊĭÞLÞŎJ±̃XȣˌōlUÈ¯ŎKÆƅ°XÑÜ±nŗġV¯óaUƧUōŁÑ±çɲ¥lĉkğ°k¥nğţL¯ÝÝUƽĬ΁lķ°@ōXÿÝ¯V»ŹLʉÞɱŤĉó°ÝJ¦ÝKÝ£ţÜÈĉ@xǩUċƑ@ky͓¹`U²ĉVġ»ğa¯¥ť@ĉó@ŻÛÛJw¯nó¯ġWƽʩķÝɛwĉĕÝ¼ȭÞķō@ó£Å΀Ƒ¯ôȯÞ¯ȰÆōèĉXÇ¼ó@ÝnºĸÞVƜĸȚUʶõˀĵĖɱŎÝĖVࢰӒѢ°˘nϚVˌÈmɼĵŦW¤öʊõʔ@°ÈXVènŎȁb¯ǫĉ±Èğ`ġwōÔğ»mVVÝ¥ó@ĸķô@bXĶmV²²`Þ_ɴbͪÈ°ÞWĸÈŌmÞkɲÈUÆ»n¼ǬVķĸźô¯°n¦ɄÇÈ\"],encodeOffsets:[[86986,44534]]}},{type:\"Feature\",id:\"6532\",properties:{name:\"和田地区\",cp:[81.167,36.9855],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@ƨ¥èź٨ΘƑᩄbUࢯÞĕɲōĶĕöʿVʵķșUƛÝķm¹Þô@È»ĊWŎçÅ°ȯȰÝ°óƒÆͿĉ»̽çnmɱĵƧºóUƽ@±wóL¯°̻L±Æ¯Vƴķb¯VÇ¥ğ²Ǖbk¥ÇKlÅɱġ@ÑóK@ÇaÝXğţxĉČǫķê¯K@ÑaŹƑK¼¯VóaónġwóÞéUġbóĉğÇl¹aUóğKWVÅ¯nÇŋƑķnʇ»óxĉwçÇ°Åw°ċXób±kÈÇJm²ţx@ÒÝŦÇºnó¼n°ÇbUÒ±¼XĸĠłƽXmwĉºzÈÜmnxmx²ĖmÒbnƧêUºĊêÆVóĖóUĉ¼ÅĬƑ°ɆƆŻŚlłÞL¼nĠ¼@ÞÞź@ŎÞ°VɄɴжϼِ͈Ŏ\"],encodeOffsets:[[81293,39764]]}},{type:\"Feature\",id:\"6522\",properties:{name:\"哈密地区\",cp:[93.7793,42.9236],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@WnŐÆĶLĢ¦ţºźlxÅĸƽŚɄĮè@ô²ÞUĔƐńV°¯ĸX¦Ɛm̐bƒ»Ɇa΀ĢƐLˤȘÑnІǉĸÿn¯ĶaŎ¯ĢĕȘ¯°΂la¯¥ǕǔwˤӱlťО̻nŻmɃĕċţUw°WUóƨÅţķ°ýV±óÅǓéʉ¯ƽŁéōǖȁÝƏůǕw˹ǫȗǓƧǕVýé@ĬţLƧôͩɱŎɛK̏ÞɅôóK@²@°ōŘ¼lŦ¯ŰóƜÛlV¼ķ¼°kȰŰĠǬŚÝŎmĖ`@ÇÜn\"],encodeOffsets:[[93387,44539]]}},{type:\"Feature\",id:\"6529\",properties:{name:\"阿克苏地区\",cp:[82.9797,41.0229],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@VÆxˌŎÞŎ°nȂÒ°²VĊ¯VğƾˍǬƨÞÞKÈÞĊVźôɆÞĢèŌôWČ²ŤVÞĸʶbl¯ôn_VÆĸlmÞnVź_ĸ¼ȮmǖéĸW°°ĸJkʠ¼Æw°¤ÈlxɆzČºĶI²ÆǔU°ô@Þ¦UnUĠ¼ŎÓĢxĠ_²ÇĊǬ°ȂamōçUÇW@¯öʓõʉX£ĶťnɻÇUˋmϙ¯˗ӑѡᩃaΗƒɜ°xWƴUxɃÒˣ¤ɅwğʉōóÝŹ±°ȗ@¯Æƒ²¼\",\"@@ōгwȁ¥Ƨ°ŹÑķV¼ÞêĊ»lĵm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘnIÇŃÛÝĊÑĠƏ\"],encodeOffsets:[[80022,41294],[83914,41474]]}},{type:\"Feature\",id:\"6543\",properties:{name:\"阿勒泰地区\",cp:[88.2971,47.0929],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ɲˣĊIÈ¥ÅU±Ċýkō°ĉƽó»ĶƽXóʵʵȯƑÅȁɅ¯ĉ@ÇሗK֛@@ˤV֜ʵрƒǬVĸƑŎ@ƆϯÑóķ@ʇ»ķ¦έmlÈĸĊX¼WźÛÞÝѸĢČþĀĊôάVö¼ĊUƨ°°èŎČUÜÆóôVôô²êȘlˌç°`n²ǬĊaÛ°±kğmm»@°ÝɆÛÅÇVaÝVm͔ğôÝÈb@n¯ÜUĢÑĊ@źīżWŤÈǖWôŁÆI²ÓƨL@ĊXmmÑÆ»ȰÑkĶō@ý°m¯\"],encodeOffsets:[[92656,48460]]}},{type:\"Feature\",id:\"6531\",properties:{name:\"喀什地区\",cp:[77.168,37.8534],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@Č@°ĠôÓô@Ŏĉ@Ƴĸ@Ť£ĢlVôWVóřXĉŤêÞ@ƐÒĢÑlèÈV@ĠIk°ÆŘ@ÈÈĀ@ǶťÒğ@@ÒĉlŻ_@ƧĖÅĬōÆ@bźÞnƒlVÝĬWÆ¼ʇÝÅ@ÇÅÈwWóĉ±ğzĬČƨÆÝIĉÝ¯bÇÑĉ¯ʈV°xUŰĊ¤ƪ_ôÓɚI@lȚXȮŎlɴȘ՘¦ɲÆʈ_ɴźôÞʊŎĠɆxˤ£ɄÑVwXƳ¯wɛŹ٧çƧ¦ōُ͇еϻɃɳUÝ¯@ōÝŹ@Ý»mğ»ÝKkŁżřɅƅƒ¯ÆīĊ»ôVôĕÅUĉéV¹ƨémanÑ±ĕnwmwnÇÛyĉ¹ŹlŏkĵèķmōÞġKñÔċKÅèĉzômxȗÿƿI@þÅČÝKÝ°@¼ÈVº@ÅĢÆUċłnÝÆǕČĵJm£ÝJ¦@ĊxV°ƏLċ¼ǩ@m@ÅĢómÇÆğ¹ÇÆĖÞKxwô¦ÆÑÆL²ÆƾU±ŚÅŻĖ@ĬŤÈñ@ǔÇxÈÇƒ\",\"@@VÇţ°ğUĠ¯mk¯ó¥ķIġÿƏbĉa±ÒĸĀlKU_m»nwm@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁVé\"],encodeOffsets:[[76624,39196],[81507,40877]]}},{type:\"Feature\",id:\"6542\",properties:{name:\"塔城地区\",cp:[86.6272,45.8514],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@ήnĸ¥ʈ¼ĸ@ôϰÒ@ƅƒōUķƑǫʶпU֛܃LګK@΋ĸ@Æ£ÞġÅĠċLVÝ»@Å»Ýnm¯»nŻĊ@nķŃ@¯ómóÛÝǟ¯aÝóȭ¥ōUmxĉbÇÑ@bUº¯X¯ÆƧbVÒĉnǕw¯°ƑVÇ@kx±UɱnÅK¯ƒĠǠU°ɜL@°xnĬĀŋŎÇLğϱÞέƜkôÅĀǕłĸĊŤUŰĢ°¦ȂϰÜɨ°x@°żǠÆƈČVĠ»ČL°ÇbĊÑ̐óÞlĶwÞɆVÞwǬxǪţÈ¼ÜLŐĶˢ@\",\"@@óKĵĀV͈ĉłƾǊÆŤzXl°ÆL²¼źôÈĢǔ¦lô°ɜÞʊĠğÅm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI»ĉmğnaċƨbVğwġ¯@UōaĉÝJğÑÆŎkŎÞĀlź¦\"],encodeOffsets:[[87593,48184],[86884,45760]]}},{type:\"Feature\",id:\"6523\",properties:{name:\"昌吉回族自治州\",cp:[89.6814,44.4507],childNum:7},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@መL@È°ĊȂɆƒÆĊ£ťôWÓɆbĢÅŎÆ¦ČÑW¥°ķU¯ƏŃVē±Ý@óçĭɃƾřÆķkwŹŤ¹ġ¥ĵKŏÅXmˍщwǓ¤Ƒ@wóōVķ£ɱġôÛa±ÒȁóèţIVƽ¼k¤ó¹ġJmx»ÝU²@ÅÆĸǫŎĊmŎǬ՘\"],[\"@@Þô°bÞǠôÜôn@°ĸńǶkł¼UÞKğČÆÝĢÅ¤ķ@@ΌڬL܄K@ˣȂ˭lĉÅW¥ĵVÆý@ŃÞēUŃȗƅ@ŹƩǕĉ»k»ÇVğóřXŻKƏċêȁèÛŎġͩń\"]],encodeOffsets:[[[90113,46080]],[[87638,44579]]]}},{type:\"Feature\",id:\"6530\",properties:{name:\"克孜勒苏柯尔克孜自治州\",cp:[74.6301,39.5233],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@ˎǫĠƽ°UUĉ¯±ȁÑm¯ÝōˋōwUÅ±»ÅƑ°Ș@²¯ɳʇ`ɱÅ¥՗ɳȗōkȭșW@kəJóÔƩ`ĉ£Vů¯wU°ʇĊÈÒ°aĊÞÞJÅċƧīĠyĊ²XôÇxÈÆÆ@ÞʈÅ»XÞīUƑkmŹÝ@aŎÅÆīƨĕ@ż`Ċk@ÑĠ@ŦÑ@ǵÇÿ@ÇÅŗl¯ğJ@ÇUkçġÒƏÑÝ@ţéWĊôŚUóXUġkţ¤ķ@@ƴōĊó@óÔğ¯ċ@@Ò¤kôˣŰ͓k»KX¯ċwƧôğɐÒôIVÆ¯UķǬķn¼ôb°ÒȰVVÈÞ°ĸó¤V¼°V°²êlĢÒUƨ¦ôȰƴĊVV¼ǖIċĊÞɜénČW˸ǸařÈw±īçĸ¤ĊôwĸUĢ¦éǖĬĀô¼lÞkÒ°x°ƆÞxÆV²ǔ»b°wÞȘ¥°nŎV@°ʠèŰȂb\"],encodeOffsets:[[80269,42396]]}},{type:\"Feature\",id:\"6521\",properties:{name:\"吐鲁番地区\",cp:[89.6375,42.4127],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@ôKĉǪa²¼lÜô@ʠê°ĬôȂ²ÑÜbĢóɲĸ¤ŎUô@xƒǔ£ъxˎmÈÛ@_nĕÞōřǫğůlȯ¯ĸ»U»Ükôƛ°ůkť»Ŏŗ@¯@±͓óͿǓ@ķȁ¼Ϳ@Ƒ¼¯°ólġ¯xȗUġƑǩÒƧUÝ°˹Kóx@ǸōĬÅĬƑĠóƒǔêÆ°XÒʟŤUÇ¼ˋnn¼±V²°ȂUŌÝbʟǔɅô@żǬaҎÈ\"],encodeOffsets:[[90248,44371]]}},{type:\"Feature\",id:\"6540\",properties:{name:\"伊犁哈萨克自治州\",cp:[82.5513,43.5498],childNum:10},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ĉÆŘȁ̐mÞ¯ĀX°±¼@ƾ¯ƴ°ŎÝþŋ¦WÜÞbȂĉźUÇmwVUȂóô@ȰÝ΀nÆJnƾʠŌLČóǪ¯¥ǔaǖŌaôÝĢLxÆLɲm²VlwÈ@Uƒ°¯ǖxĊmUÑƨa°Å°WV¹aÇɃÈm¥°¯ŹóĸķǫUm»Å¼ÇVɱlÝŋnķÇÝX¯ͩÇɳaÝ`±_U±ĵnWa@ĸóķ¯ǓV±ÅĵJċ¹ɅykwÇ¯£Åxʟ»lķI¯X¯ķêǕȭnķ»Ź`±kÞ@Ýô@Þ°xŤŎIƨÆUxō¯²ǔĬǬlUŚ\"],[\"@@ÞĀlź¦¯ĸŤKÞċƨbVğwġ¯@ţƽJ\"]],encodeOffsets:[[[82722,44337]],[[86817,45456]]]}},{type:\"Feature\",id:\"6527\",properties:{name:\"博尔塔拉蒙古自治州\",cp:[81.8481,44.6979],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@ήƛϲÝĠÈKŌōÿmīw@¯ɛKV¯ğǟ°ƑwġKóÞŋbǕǓb¦ǩ°ċôŋKʟƽmÅImͿȯÞó@ȁôUVnxÈŹVȁĊÝabŻ£¯°lóxȂŤĸkĊÞyĊêĊmĢxVƨÈĠXΘÆĠÔźɆţ°LXƾŤŤb\"],encodeOffsets:[[84555,46311]]}},{type:\"Feature\",id:\"6501\",properties:{name:\"乌鲁木齐市\",cp:[87.9236,43.5883],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@WôŚUĠÈl¼Ċ¼ƪǖ@źȘƆ@ýlÜXVŘÞ¦V¼kĖóÒèkĊȁˮ֜@ǫ՗nōĉǬōķÆÅ@±ÞV¼nwĢIôºl£ƾ»UŤJôçó¯īʟéó@kÛ±»ǩbĊóLҍÇǫb@ŻɆóʠǓaŋÞȁVʉłĉbĉɅô\"],encodeOffsets:[[88887,44146]]}},{type:\"Feature\",id:\"6502\",properties:{name:\"克拉玛依市\",cp:[85.2869,45.5054],childNum:2},geometry:{type:\"MultiPolygon\",coordinates:[[\"@@ɜÞʊĊýVaÅm»ʵƳƑʝȗīV¥¯ĉ°Ñ@ŃÅI»ĉmğnaÝţL°ķóKĵĀV͈ĉłƾǊÆŤzXl°ÆL²¼źôÈĢǔ¦lô°\"],[\"@@ƾIŤ@UUwōaĉÝJğÑÆŎkŎ\"]],encodeOffsets:[[[87424,47245]],[[86817,45456]]]}},{type:\"Feature\",id:\"659002\",properties:{name:\"阿拉尔市\",cp:[81.2769,40.6549],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@nIÇŃÛÝĊÑĠƏōгwȁ¥Ƨ°ŹÑķV¼ÞêĊ»lĵm¦ÅW@ĀôÈźaɜxÈbÞÆĶIОŘ\"],encodeOffsets:[[83824,41929]]}},{type:\"Feature\",id:\"659003\",properties:{name:\"图木舒克市\",cp:[79.1345,39.8749],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@VéVÇţ°ğUĠ¯mk¯ó¥ķIġÿƏbĉa±ÒĸĀlKU_m»nwm@ÈŤ¦ĉbÞ°±Þżł̦°ĢŁ\"],encodeOffsets:[[81496,40962]]}},{type:\"Feature\",id:\"659004\",properties:{name:\"五家渠市\",cp:[87.5391,44.3024],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@çôÑlĕU»¥ÝUŗWkÛ@þVńÝĔ@ńÅþĶUX¦Æ\"],encodeOffsets:[[89674,45636]]}},{type:\"Feature\",id:\"659001\",properties:{name:\"石河子市\",cp:[86.0229,44.2914],childNum:1},geometry:{type:\"Polygon\",coordinates:[\"@@lŁǵmĉ@mż¼n°ÞmÆ¼@\"],encodeOffsets:[[88178,45529]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/xi_zang_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"5424\",properties:{name:\"那曲地区\",cp:[88.1982,33.3215],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@ƨʔĸbÜºÞwnxźbÞ°ô@ĶĸIÈ¼ĊJŎÈôUÝƒ¤ǔLÞŎ@ĢȘblôLÇźçÈ¤ôL¥ÞIÞ¯ĶxʊťƨƿÑĉXVķŦ¯ȂKÇǕÑ¯IU£¯Óƿ£VĕÅÞÿÆwƑ£ǖxÞĕ±ÇÝaUÑÈU¯UōÈÝwWŁĵ±ÝóĢÿ°IÞ±mÅĢ¯mÿ¥°UnÑŤĢĕĶwǬŻͪwŎ¼źÇĢĠĕˎŁ°óƨ¼Èam@¥°wǔǖ°ƨÇŤġƨŎŃôbÈÛŎĊ°@Ġw²ÑÞJÆÆb²°êĊUÞlÈ²VÈKĊÒĸĉ»ÅôťUÅÇk¯@ÇÑklÇÅlĢVÑó@°@ÛĸV¯ÇĊn¯Uĕƽ¯m¯bÈ@Ò°Ĭbĵ¼kxķýÇJk£ÝaUÑÅóĶǟkÓʉnĉÝ¼Ƒó»Þmn£mČ¯@ȮÿV¯ĸk@Ýów»ğġ±ǓLōV¼Əèķĉè±b@ÒţUÑóakl£Ó@¯L@ÇlUóȁ¯aġÈÅĕÝLķ¯Ė¯@WĬxÒÈnW°ţôU²ǓÓġ²V°¯ôǔÝLċk»Ý»Ý¯ÞVwÛÝÇōͩÈĉċ»ĉm¯£W¥ţKkóġƏW@¯±kōÈb@ÒÇaÆ¯akóÛÇ¦Ýa¯Ýĉ@Ç»ÛmǓxķƛ¯lVĀÅÞġbÇJUÅVĖƑWzō»ōWn@è¯ÞóVkwƩnkźÇÞÒÞ¯ýğÇUxÆÈnè±bĉÝ»ÈŃwwÞ@m»ÈV@ýÇ°ķxaÝ¯Xċ¥ÈóW@ôkxlnxVÈóĊkŤġ¼@°¯ŰƑL̻Ű±ŎÝVÞVÇÞÅÇakƞ@èğŎĸżƾ°ÒLÞôĠKȰĖźVÈÒĠ¤VôUÈþťL@ôǬÞlÜÈnÇÒUŚ@ĊƨW°°X@ČÇþƴĉÒķ¦@ĢôWĀôłUÞĢǬź°¼@ôV°bUÆnzm¤ƽĸÈ\"],encodeOffsets:[[88133,36721]]}},{type:\"Feature\",id:\"5425\",properties:{name:\"阿里地区\",cp:[82.3645,32.7667],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@Çƾķn£myVÅaU¯ó@¯»ŹġǫVÝóŁXÿġó@ĸ¥ĊÑƳÈý@ċW¯X¯ĉƧ@VřÈÑÇmkÛǫÝ@óŦKÇýVUó£ğÇÑŹUȯĕğLÝóK¯ÑƽķŻĠō@çlƝÈbÆÈÝUÝÞU²ō̼ůƒK°ů@¯UK±ĊƧbōÇmçÈġóÅóbźó¥kīÆ¯ólçKôĵUÅVŃķ¥nÅŏm¯¹Å»@ÑÇóxÝkʇȤU¤ķb@ƒ¯ĊÇx¯ĸĉKm°Āk¦lKnĬȀƾÛ¦WÆÅmǊĉ°ōUţ¤UŎ°ŎKÞłÆǓ¦Þř¯bmUÝl¯Umğl¯£șwÅǫaÝnĉĶk@¯Kō»ĉnaÞ»ťnkmlĸ¥UÅŻkÑťĉVôó°LôīĠUÿĉǕÅz±K¤²ō¤¯Ė¯UÝ¥VĵóÈťÝwķÈÑk¤óWýĵĕVĠVóǓķ°k±VU±ţ¦UǟÝÅJVÑ¥XUċUÅlÛƆǕÆȗƆ¯wŏÞÅ@ĉlÝóÒnUôÅlxólÝôÛ±LÛôÝL@ġ¯X¯ÇUÅ¼óaó¤¼XÒġŎóLk¦ôÅ¼ĸĠ¼KġƆô¦ÆƑÔĉĶ¯ImÒ°¦n°¯ÞlÝČnƒÒKĠÞĕklýƾťôIĖŤÒnƜm¼¯lnżóÞ@Ůó¦ôƽĖċŚn°Ý°ôÈUƜblÞó@ǖô°UÈƆ°XþôôlѢ²Ėm¦°@¤XĊblÜzkºƒĖmXŎWVóÞn°lĠxȚa°»żLźb@Æ°XĠÝȚxĊĕŤaȚ°È@@èŤ¦Ü¼WÞkÈ@V°lŤkŎ±²¦ƐUǉ°aÈÑŎbĢŎbÆ¥ÞIȘlôVÈUbkɲĶnmnXb̼òƾĖŎ@ĢȂÑôÓĠĖʊĊÔ\"],encodeOffsets:[[88133,36721]]}},{type:\"Feature\",id:\"5423\",properties:{name:\"日喀则地区\",cp:[86.2427,29.5093],childNum:18},geometry:{type:\"Polygon\",coordinates:[\"@@ĶĖXþôl£ÒĸÇÞxÇŦôUĶÞ¦°V°ĕŎ£±£²LÆyĊǖĀğVóĬ¯KóôUĊŦlÒżVÆķ¦klnŦmÝ¼bĊmŎ¼L@°lĊĵÞmǬbÆȚx°¤Ġkn°VÞkVn°aŚÝǔ¥ÅÝŁōL¯ōVŤ£ŎVĊ¯nǉÆXÅÜ¥ǿƽmīLkl¥ÿn¯ĊL°ķÈw°ĉ@ƑĸaV£ʈȣÞlôwÈ@Ò¼Æ°ºŐnmÆĸ¦UńÆVóĶLèôkÅ°lĬ¦ŹôôaÆôÇĢnèŎÈƨaĉ²VLĢ»lţôĉUÇwkmlw@óôXÇČ¦°WÞbwĸÈ¯@þÇUn¼Ý@xxÇńÞ¼Ċ²amçÅÇVwĠÈþ°ÝÑÈÝlŹƪmlxôU°Ý@çmXŎŎ¼yƒXĕÆUVÈIĢaÆÝUÿ°kĸƜǔwnÜÈ¼Ċ@Þ°ÞbÈ¥Üôl°bÅÈb@ÑaÇ¯UU¯Vġ»¯aV¯Ç°ÅmnÑŤçǬVǬ±ĉ¯¥Vĕ¯Ýk£ōw@±ġÛ°ÇVÑ@Ûa@ČLƳÇa¯¤ÝIĵ¼U¥ƿōķÅţŻókÝóĕ¥¯U»Æ£X¯ġŃÛkÝ°V°ó¼¯èWôÞĖȎkĀƧĀówm¥¯JÅ¹ÝJÝōVVÅaÝƑ@ğŭÇ¯_ĵVnxÅónĵxÇĖĉVÝÈğVÒó¯±Żĉ£ķÆÅLǈĉýţÛ¯VnV¤ÝÈ@°ÅÞÝ¤ŰğŁm¦ÝxóK¥ɱÈUĠôêVôÛ¼ÇWÝçĵaō¦óĖƧlÇĢƑnŎÇV¼¼ºÛ@m¦ƽĉmm¯ÝKÛç¯bŏłĬb¼ÅLmxť°ÅUÝXkÝmĉ¦W¯KÒknÝaVÝè¯KɅńÝKnÞ¯¼\"],encodeOffsets:[[84117,30927]]}},{type:\"Feature\",id:\"5426\",properties:{name:\"林芝地区\",cp:[95.4602,29.1138],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@VÈłVôÈk@°K@Ôk¤lôbVÒŤ@Ñ²açĸĊƐçU»ŎǔKĢ²Ġ¼ôx@ÞlƨĬUl¯ÈLVÞJ°ÜnʊwÜbXêVÞ¯°anaU°wÆ¼ɴÑWÑ°mÈýÈam¥Þ£Ť@¥ôblÞĢź¥ôxÈÅmÝĕÅV»ĉōŤōnó»ÈīķIUĠÑ°ġĸLÞ¯VÒÆ@Āb¼WôÈ@V¼ôóŤKÈÑU»wVǫżnWÒÈx¼lŦ£ĊōŤx²¯@ÆU¯çÆ@¤°£é°k°lůÈó@¯ŤÇÈĉkkÿó¥ÝXķÑÜ@ÒóŚÝ¯°ĉówÇ±¦ÅJUÒĉĀķw¯°mĖ¯±akxÝÅn»lÑK@¯lU¯UVÑ¯óĊ¯mōğVǓƅÞWÝÈÛ@ƿô¯ÜġzÅþ¯ólmôʇġĊÅUͿřŏȁˋŁóÇˡōƧÇbw°Ķôk¦ÒnUþġÒÔkǔķèó@²@ŘōńĵyzġaÝ¤ÅI¤Ƀť¦ğÑ¯¤ķbó¯ó±U²°¤ČÜVnÈÆŚŎ°ôĢþÆzèVĀÇĀÇXŹÑ¯¤ówċķk¦łUÒġzÇ@ÆÝx@²Þ@Æ¤Uô¦U°xU\"],encodeOffsets:[[94737,30809]]}},{type:\"Feature\",id:\"5421\",properties:{name:\"昌都地区\",cp:[97.0203,30.7068],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@VĖm°ĉÈU°ķÜ¯@@ôUÒġkÆkÈlÒ@Èl°ÈVÆóŦÆ¼aÅĢɄwnōw@¥Ŏ¦°ŹÞmV°wnÿwwÝw@¯mÞŗ°wĠĸkÞğlĔ²¦°@ĕĸwVóal@nĢÇĊn°@¦źUXçǔůĸVÆKÈÝĠ²ÅĔô@lÈ_mzǖlaU¼ôwV°¯¦ĬÈal@ČÇ¼nIxô»ɜ@ƨ¥ɆŁŃǪȁkƛƨȍʊȡóĭ@ÈÇVůÞĸƅmēƨťÅÈʉVǵ°ġVŭÅɧ°ÿnɛ£mķ²ŃóÑUĉ°mÇ»¯@mxUĀ¯èţ°ȁÝçġU¯ÆÇţÈ@°ÇôŰ¯k¯lê¯¤£Å@èV°Å@±°ţwĉŎť¤k»ÇwXÑŻmUǬxV¼ÇÒţLóôU»Ç@Xó»a@ÿÅUÑÝ°ķK¯ĢğÒVĸJÇĬ¼môţŎĊŎU¼ÆĖnÞÇÆówŹ¦ġkÝóa¦ţ@Ý¤n¦ÇbÇþ¯nXÒɳÒÅ»¯xVmbb¯Ý°UWéÛaxʉÛm¯ÝIUÇKk°VƧīķU°ȭĀ@ċ°nm¤Ýnô¼ƒÞ»ĊʊmlÔĵǠÆôVÒÞbl¤ÈIĸþlw»Ķa¯ī@ÑÇ°anƾ°\"],encodeOffsets:[[97302,31917]]}},{type:\"Feature\",id:\"5422\",properties:{name:\"山南地区\",cp:[92.2083,28.3392],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@°ÞUĖ°¦²ĊôÇÜLǖĀɜȘŰÞLĸźêÞ@UÜUŤ°ɞ¯Ü°WŦĀmŎ¦ĢyVÑŁl¥Čĸôx°£źÒWÈÿÈUÿçÅyýóġō¯řÅmÇÛUċ¯£V±²°ôôĸa°£ĠÒŦ¥Ʉ£ÆJÞ£ĢbyĶzŎŃ@ŗ±ô@ĸçlǓÓĢÑVýmÑl¥ĵó¯̻̥ƛǫÝһÇƧĉyţ¼ҍēVĶĉŎ°ĸmÞVÝĸÒÛaċóŹĖèÈÈl¼k¤ÝX@`Þŏ¼Æō¼ÇçĉKUÝÝ£ğ¤@¦ġl¯Òġĉ¯ómóxÝÞğVƴċK@b@ÜUÒ¯ÈĢÜ@²xŎl¤\"],encodeOffsets:[[92363,29672]]}},{type:\"Feature\",id:\"5401\",properties:{name:\"拉萨市\",cp:[91.1865,30.1465],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@Ŏ²l@°XĢƐlôŤLX¦°¤ĊnČ¼ÇĊŎͪÞÈÜxU°ÝÞÞ¼¼lČÞKǓ°óU¯Ģ±ǔÔV±ŤóX¯ÇmÑwXī°@°ĕĸÞKÆĖĢÇ°bȂÇŁUV¯wVó¥VÅ£Ý@@±ÞwÅÈ@¥nōťÿ¯XÛɝ°ţ¯ÛVVÝ@ŹéķÝKȗůɛǕÿÛKóÈǫǫUţèmÒn¯Æ°ÈU°b¼UĢV°°V\"],encodeOffsets:[[92059,30696]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/yun_nan_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"5308\",properties:{name:\"普洱市\",cp:[100.7446,23.4229],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@Uô²a@²²Ķ¥V°Ķ²bl¤kVxl@°Ś²@y@ô¦¯@xxVxUVbVÜm¼ŎĢmºXXWÆ@ĀmmXU°ÅÒm¼Þx°w@°XêĠ°»nV°Ul@k@V±ôī@£ČŃÆ£KÞý@¥k@ya@nWVUVwm£Jknm@wmknXX¥mUUlUnb¯°nkVInlIUw°nmk@@mlanXlanmk@wVWUw_@éĠanmUaÜ£mX¥¯@@óUmÝ¯¯ÞÝlKnxô£»»ĠJ°aVUÝÿV¥ÛbI@wmón¯yÛL@WkÅmÈ`IWa¯K@¯mUnmaXmbmak¯ĢÒÝm¯mV¯KÇb¯KÛWWX@aVknċLUWVkXóW@ka@ób¯Uwmb¥UUlaU¥U£maķKXkmÝ@kwmÑ¯k±ċbUUVakaġ¦kL@`a¯xmÅLUW@ċnÅUV°LkL@b°°@¤²nôôkl°kèÒÈzV¤ÈWôônV@¦@¼Ux\"],encodeOffsets:[[101903,23637]]}},{type:\"Feature\",id:\"5325\",properties:{name:\"红河哈尼族彝族自治州\",cp:[103.0408,23.6041],childNum:13},geometry:{type:\"Polygon\",coordinates:[\"@@°°nÞôV@°@¦WnÛ¤Vbmnğb@ê`VxUX@xÆÞUnnWÞĸĢÈ@Çè@zÛÜWÅêl²KnV¯ĖĊx@bk@@°JÆ£Èblnnm°nlUkVUUwVmKnnVÞxVLX¥laX@@xl@VzÈVmk@b°ÈĸmV¦`WXbUbbX¼°x@aVVkn@lþnXUlVxŤÅyIUkaIŎĊ@lXx@bz@ô¥_V@ln@ôy@al_l`nmÈ»@kmXwWKU¯»aÅ@wmUÝKUaUUwW@w²»@kÆV£mm£VKkÑV@@»nw¥@kÆnllIVlnLVakalknJWmnaUaVÑVVÞn¥m@¯Uÿl@VçaXaV¯UyVLVk@nJlXLlkxlbla²Òl@nVJVkxKlkUaVķÝÑU@Åm¯@±Uó°ğńķĠmUÑ@Ç¯¯Å¼@nml@°¯¯`@w£@¯Çk@»nmċ¯U»I¯LÇĶÛn@bó°Uwm¯UmÇ¯aI@ykIVU¯bIğ¼¼ó¤mwkLÝÞ\"],encodeOffsets:[[104243,23429]]}},{type:\"Feature\",id:\"5326\",properties:{name:\"文山壮族苗族自治州\",cp:[104.8865,23.5712],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@wô@²¯maUmôUÆx@XbÞInlVUVwJVaUK°¥xmÞXnlKlnna°@ĊČÆwUmnkl@°£nyn@VV@Vak@@kÞÝbmx°Vnw°klÞInĖÞVlKl@Xa°KlVU@JnxU@ÈĢbUKlm@ak_wanWUk°l»k@Wk@lwU_@UalóU¥ÇnkJW@mVXx±bK@nV±a@Åa£ÝK²WknamKknÇk¯aVV¯ĀUÒ¥I@mm¯¯xÅW@@`k@ó»UU¯lm£ÅWlĵw@mmwÅmWU@y±UxmwU¯U¥Ý¥¯£m@kÇVUV°VbklLwUlUImk@±ÑkbkalwkWKkmI@UlUKVzU°WbbUè@kVĀ°@nm¦ÝUUUÒVbmbXnmIkllbUbmKUkkJmkÅ@l¦mx@¼U@lÒULn¤nU¤Å@l±¼@xXxVVVbÞLVn@xÆb°¼V\"],encodeOffsets:[[106504,25037]]}},{type:\"Feature\",id:\"5303\",properties:{name:\"曲靖市\",cp:[103.9417,25.7025],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@È¦lKÞĕUV¯Um¯ÇVUnVVUĉnĊÇƾLn°°ÈJÆw@lbÞa¦VXJ°¯W¯aÞJVkUa@lKnÅmWUk¯a¯»@m±@ÑkkbWWX_WÓU»_lkÑm@U»m@l@IWċn¯l@VanVUVUVwVxKÈVmUē@n@VÝÆLwVVwnVlmkUVÑÇ°ka@kÿÝaÞUl£ċĕX±±ĉa@UnVnalónk@wlUVmkÝJaW@ÅwóVVnnb±°@óxXLWxn@lÇ¼nmk_k`@bózm@kU@`¦ó@nW@ÜÅXWw@yb¦@ÒlnUb@xlÜk@²Ç@U¯bmy@kV@bb¦U`lLVx@bLl¼Þ¤@°VVÞU@WÞUbJ@nn@lnnmxUUUbK@ÇwklkUVWakn@lbU@@ULVxkKUn°¯Ò@¼km¦m@klȰ@lUl¦@Vl°wnnþĊUÆbUxbVĖU°annaVal@@b\"],encodeOffsets:[[106099,27653]]}},{type:\"Feature\",id:\"5323\",properties:{name:\"楚雄彝族自治州\",cp:[101.6016,25.3619],childNum:10},geometry:{type:\"Polygon\",coordinates:[\"@@mÒXU`Wn@Xl±¦Uxnbl°knmKUxxVôUx°¼ôÒÈ°JlnÞKĠW°¦Vx²JVw_°¥@UV@@wnymknK¯I@²b°£V¥wUV¤nLkÆJÈwôô°l»Č¯ġVUU@@°ÝXl@U»°Å@U¯@w±¯VmUUlm@mÑnIVyUwmak£Vwm±@Çw@n@UxkwlÇnLmkÅ@±kka@kóJV¯Ç»U£lw¯Xalbl¥¯UX@aUaÈL@ÇVIVkaU¯mmakLWkUJ¯Umxn@kUx¯xmWÅīÝkkbŤbkxWmXwWk¯wKkLÅ¤ċń@¤óĬU²@@lk¯VmU¯¼@xV@k°l°kbU°nmVnU@°UVèÞÆbUÒÞnU¦V¼lô@Vl\"],encodeOffsets:[[103433,26196]]}},{type:\"Feature\",id:\"5329\",properties:{name:\"大理白族自治州\",cp:[99.9536,25.6805],childNum:12},geometry:{type:\"Polygon\",coordinates:[\"@@lbKVIUa@²m@bxôÒÜxXLmbnl@K°¼kUôxôlV¦nJUÆnm@xÆwbXÆôôLUVwôK@wlmaVw@WknmIUmlnJla@_@kÝmKUaÑm¯Xw°aUaVl»²JVbÆJkôĶĀ²VVkmbVwUówVwnLlmk¯maVw²¥Wk@XmV_WnÑUk@kó»UV¥ÝmVÑÅaÝUçV@¯VUmn¯mVlak¯l¯U@@wğWé¯@¯xÝw¯¯Jċa¯U¥mLU¤bÞȤbÇLWUwmIUVW¼kb`UVb¯L±ĊÛkÿÝKkwKţêUĉþÈV¯ÞVbU°KVk²ÝmImV@kmUkVxm¯KXÈķJU¦V°ULWxL@môb@bkx±LnVUVLnkÜWnwlLÅƒmW@kkJU_VWĊÞ\"],encodeOffsets:[[101408,26770]]}},{type:\"Feature\",id:\"5309\",properties:{name:\"临沧市\",cp:[99.613,24.0546],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@xĢl`²X°Vx@x°Þ°KXağUÑWbnIl`X²°bxl°V@xVxk¦mbl@xXVÆzX¤Æk°kx@lźêlaX»VUnJVxXÈKaÝȣaV£nKV¦°Čb°I°n»ÆÑV¯nWn@ÿXÅWWn¹ġōn»ÛUaUVUww@w°ó¥@z±@ř¯@kUwlk£±aĵ¯Uĵ¦±±@bó±VÝ@ó¤w¯I@mÅóm±X¯IólK@°UllbzkKlln@@ÔºUmVk²ôÒxŎUVóLbmÈnmbnlax@z@Æ¦k\"],encodeOffsets:[[101251,24734]]}},{type:\"Feature\",id:\"5334\",properties:{name:\"迪庆藏族自治州\",cp:[99.4592,27.9327],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@WXw@akk@yk°īX¥Uóķ¯w@n»UaVaUÛ¯mV¼kÞċô@n¯xÛÒmV¯Ô@x@kwmÅa@UaÝ¯VÅyVa@ÿn»ÝVmankmmÞÅô@n£±ğzÇmU¦VmnÜmbn@°nV@xmzÅ@mºV¦k°ln¤¼õôn@xkÆIUxU@Ť¦VmVkmkXW¤XzVx@Æx¼Þ¯b@lVĸÞVm¼Xm¦VÞ@Æ¹Vón¥ÆKnKX¯x@èĊÈ±łXaÆxnlV@UÛlȻkğV¥m²ǉmÅÞĕƒƛm°ÆmX¤mznÆV¦ÞVVb°bnÞWbn°l@VÈ@VĵĊ±@óInxÆw¥@£ÞW¯ĸ£UUKk±akkkbmWmÈķaÆÇUÈÆW@wmknmU¯\"],encodeOffsets:[[102702,28401]]}},{type:\"Feature\",id:\"5306\",properties:{name:\"昭通市\",cp:[104.0955,27.6031],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@mnK@wmUÅ¥móXǓŏmX@VmL@xţnk@mlUŻÒğŋ@L@mmLkm@bXÅW¼ka¯lÇŹ¯aÇ»ÝÝ_@m@@a@UklwUm@ak@bUmbmbV¯ĕUaVwÅaĉVmým¯xUk@k¥VUX¤VÈm`@ńÇÜ@ĀknĔkƞÆĠÞUVôƆÞI@UxÆ¦nl@ĊĊnxUÒ°¦Vb¯WUnWIml@xnUbô¤¼ÈxlI»KV@ÈÔJkUĖ±ÆVb@nVÜVUVLwĠlknĠ@nx°¥Æ²mUw@mmÅUl¯UÑÑUmLllIl±@VkwW@w°@U»kUóI°»ĢÑL`nUĠ²lmbôV@nJUxÆ¦X¦l@ŎUV@lVKVÅV£UaÞUnW@¯VU@ó\"],encodeOffsets:[[107787,28244]]}},{type:\"Feature\",id:\"5301\",properties:{name:\"昆明市\",cp:[102.9199,25.4663],childNum:11},geometry:{type:\"Polygon\",coordinates:[\"@@n@VkVUn²°@x°V@¯ÆV¼k@WÞ¯@@VVUĢċ°k¼VĊx¤Ōx°mVkÑÈL°x°X°VmĊLVxUĖ°bX¦VW@kȯlkn@¥ln@»°Ñ¯VmlLUwVK@V@ka@lmXbUlVlkÈx@LVaVVwnmm@km@mIVaÝ@XVUÝ¯U@Ý£k»K@aUwkKV_¥a@alU@nz°aVÈ@@±lÛk@wVakm@Ñ¥az@XxÆW@ÛX@m@y@aWw@kōĉJlbVJzţÆUwVkmWkým@UlU@b¯wVºUVUêĠXUaUbVĊUWXUmkKWnUUUVVVÝ@kk±¯Lk±WkXlVkl@wXbmLVUIVmk@Ubma@kkaVKUkmlXLWnJ¯ÒĊ°@zkºlLUŤn@@nô@lÆnmKkÈlxVw@@mÈx@n²Uxl¤nbVxUzmJÒn\"],encodeOffsets:[[104828,25999]]}},{type:\"Feature\",id:\"5307\",properties:{name:\"丽江市\",cp:[100.448,26.955],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@l@@w°ÓUnÜÑ°w@mČóÝlU»n°VÜUbVbm¼@°xôĸVW¦¯Ĭl@zll@bWxXaX@ÆĠÆaXwl@XaÆ¦n¼Jn@mnKW¯È»V¯°akVanXVwl@VyUĕVUbÈīlaUk°k¯l²VUkƛô@I@mVwĊaVakaÆbUVLaXIWKUwaWÑÅKUaVk°@Uw¯¥XğÝLkm¯IÇóÑ¯»anUl±UĵÿlóÅIaU±Ik¼UVb¯bWxn°ÒVbnLlÞ@@`kbmIkVnJmnXl@Uxbkn@xóLUxVKóóÅWaÅxw@nÅmVôXLlVU¤b¦m¼@ĀbUzUÆ°ÞVb@Æbnx\"],encodeOffsets:[[101937,28227]]}},{type:\"Feature\",id:\"5328\",properties:{name:\"西双版纳傣族自治州\",cp:[100.8984,21.8628],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@l²°nÒlxÞ@nWlLĸnbV¤V¦kbVV¦nax°Vôa@b@lôXlWUVXČKlmU@bWXXÜ°LÈa°LnU°ÞnÑġ°lnba¯¯KWó@kmK@UĉV@k°VV¹a@y_ċl_nÓlL@anI@óWl£VUlkĕlKVwU@kVam¯ÅL@bÝk@VnUbÇbÝwÅ@ċ¥¯lk¼ÅÒ°b@¦nlUn@ÇVmÆbWôU@ÝÅōm¯aUmkWWw@±n¯UèaL¯mLkwl@°mnÈÒ¯ów@VxĀU¤°Į°Xl\"],encodeOffsets:[[102376,22579]]}},{type:\"Feature\",id:\"5305\",properties:{name:\"保山市\",cp:[99.0637,24.9884],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@X°Il@¦È¼m¼ÞaÞÅlÈxV¼lVôÈÆlLÞ£ÈºlkUUw¯UĕVwĊ@n¦mlnVĸIWÇ°LnUwlVn@lnUnJÞl±U¯LVUa°ÝUÇĊýVŤéLlxÞLĀÜl²ĉ°KUaV_Źé@klw¯lÅW£ÅyUW@wknal¥Uw@wUk¯w¯aW±k_mJaXVÒĠWb¯L¯Ý@wwU¯±Wk_ġwwōKmb@¤bk°lĖôUJVnÅlťU¯°VbnbWxXmÞWUĀLyWzÛKmbUxVKknÝkVĀċ¤Ux@¯m@¦\"],encodeOffsets:[[100440,25943]]}},{type:\"Feature\",id:\"5304\",properties:{name:\"玉溪市\",cp:[101.9312,23.8898],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@lL°xXlWxXnlwaţlaÞlÆĬnX°wVwl@mnw°VVIXllKbnnV°lbUUJ@ÈÇKVb@bW°Vk¦kaWb°kxV¤È¼U°ôI@llbl²@@ó@mm@VţkKl¹@yĉ¯°ÑIXmWKnklVULlb@lnbVal@UnVJUnKWax@lkkUlW²XlK°l²@lÞUUUVVVXmlLVnXWVUĉVaVbWğVéUVU¹W»aVaaWX_U¥nÇķ¯@alUnÇUyk@@wW@kbW¦UKÝwUmmLUnVxUVVlk¯mmnmkÇaÅ¤¯I@l@@aĉw°ĕmUL±kÆéXÜÛ@yÈç@ÇġÝķXmmÝVÅlmnkbmWkb@nl@nm¯VxkJmUJml¯°makVVnV¦WWmnl@xmnlI¤nxUVUmX@b@zl@¦Ýþ\"],encodeOffsets:[[103703,24874]]}},{type:\"Feature\",id:\"5333\",properties:{name:\"怒江傈僳族自治州\",cp:[99.1516,26.5594],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@WyX£lWlnnUU¥@ţVVwJlÅ@wmöó»£kml¯U¥n¹Æ@ny@wmU@¯mnamÛnUV¥ÈnĠy²m¤@ÆónÝnmlnbÞU¥aV£kUKWómIU¥ókwVól»¯Lk@mnaWKÛwóÑw@a±n@VbUJLkaÝXĉUV`lI@lnXÆƑkKmxÛXmlUKVmU²Klw@aaó@nKXwVKU¯V¥mUnkm¥ĉ@UxVĖ°VxVklmÞkKWĀkVWnl°Lnm@°UxlV@nk¦JVÈ°VÒ@nX°@ÆlUômlnô²nxmłnVV¯x@Èm°XblVUl°@xkXU¤WXXWXÆmkÅJmÞw±bxUīkKmÅVUĖÝèVkx@lXlnk¤LkĖk¦xUL°¯Ė@LnK@b°xVI¥Ua°Ñ@»nm@¹KŎÞÈWln²n\"],encodeOffsets:[[101071,28891]]}},{type:\"Feature\",id:\"5331\",properties:{name:\"德宏傣族景颇族自治州\",cp:[98.1299,24.5874],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@¥n@°@VwČ£ÿUlÞlmULVwnaÜLXyzKVÿXÝnWXwmaUa°¯VŦÆkUmVIókĕl¯a@£nama@¯m¯ó@óyţbġkÅm±ÛammVkLwU`Wk@VkUmÅlUUKmbkkUVUw¦ó°¼bn°ô¦lºz@x¯@U°nU¤ţU°VƆ@ÈmlnzÞl°¦ÆaxUxLkxWƒn@²ŰW@°ÈXl°Llx\"],encodeOffsets:[[100440,25943]]}}],UTF8Encoding:!0}}),i(\"echarts/util/mapData/geoJson/zhe_jiang_geo\",[],function(){return{type:\"FeatureCollection\",features:[{type:\"Feature\",id:\"3311\",properties:{name:\"丽水市\",cp:[119.5642,28.1854],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@@VbVl@XnUXKV@¦nxlUXVnKVmnLUV@bn¤lLXK²`nnlJXIVJIVnn°KnnVll@VLXWV@UkVaVKzV@VVaUK@U»VUl@@WnUU@wVLn@Vwl@XW°LVbn@VU@Xl`@XnKVbkl@XVJlUnlVxlL@lnXl@VUnV°°@aUVLXblWVXn@VVUV@L¤VLVUVbnalLUUVX_laVaWVzXKV@@a@KUmImmXama@kU@yVIUKaVa@kXK@aWU@VIUmW@kkVmU@VwUa@K@k@U`@kUKVk@UV@VaUm²Vy@klUUWUkVmUa@_KVaXaXmU@mUlWkaUX@mmkL@wJnVVÅbWKXa@@I@aJUUÇ@VULW@akLmb@K@aXXw@mVmUVkUy@£@aU@@VkUWm@kUKXUWU_mW@wkkmJUUkLWWUXW@IkJ@k@mW_kÓ_UlLm@I@aUa¯m@ka¯LUJ@mVVxUba@LUKkXbm@Uak@@a@Um`IUbUJ@nUVW@@LnVV@lUbVlUX@`@blXklWUmXlm¦U@@V¯bml@@nUb@llnn@VbX@lV@UVULmU@JVnbVbkbVWxU@@nUVk@\"],encodeOffsets:[[121546,28992]]}},{type:\"Feature\",id:\"3301\",properties:{name:\"杭州市\",cp:[119.5313,29.8773],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@X@l°KXXlWb@²`bIX`l@@bWl@n@VnLUV@V@°¦@l@XVlU@@xVbUb@Vkb@@XVJVzJ@LÞ@VmLUxUJ@LUVxbxXUl@VaÈwbaÞa@Vl@XUVx@V@VLlbnVal@lbVnnLnKnL@VlbVJXalIb@KUU@mVInJUVl@xUVLnU@UÞaV@lkV@UanKL@UlKVUnbÆmn@@nUlVnVJl@@UXUL@WVIVJVxVLXV@IÜKnbn@V¥V@@I@y°b@UUwnk°ÆƨVlUçXm£aÇIkV@WV@@aWIUWUIkb@WW@UnK@UU@kaWVkVIVVnU@UWVUV@VmVkKkWIkVWaULU`UImJUImmU@wmwUVIUWVkUamaU@mVkb@KVU@aVU@anKULVJU@kÛUJUVkkVakU@aVwkW@UWkXmWaULUaUK@XJUUmVU@UVUkJ@ImwmKU@k@lUW@@akKmkamIkWl_UwVm@UkaVUUa@UamakbWlkL@aUalU@mkL@U@UlmK@XkKm@Ýakb@xnXb`nUUU@U@wU@@mKkkV¯U@lULUbVbUb@Va@LºÝb@bLmKx@VUL@bk@mxULWl\"],encodeOffsets:[[121185,30184]]}},{type:\"Feature\",id:\"3303\",properties:{name:\"温州市\",cp:[120.498,27.8119],childNum:9},geometry:{type:\"Polygon\",coordinates:[\"@@ll@xnXV`VXWVL@lXnlV@UV@@b@¤VzUlnVU@nWxW@b@LnalK@bXVKUÈ@VVI@b@J@WbXLÆaUUmI@xlKnn@VWlbkXV@nVWnWbUbL@`VbUnVlVXkV@lUz±VnUbU@@VUlVL@l_@V@l@LVbV@XLV`VÈlxn@lU@aaVVk@XJ@nl@@LU`°LVbL°a@aUVy@anI@aanV@²wÜJX@VVV°kna@WVkaWwU@m@kaUĕÝÝŤnÈaaóI»@±XWkUķ@kV±kwUkWwUÝ»ÛkɳlImaUaWóXÿǬkUnWVmmkKţnŏÞğlUlUx@XWbV@JkX°mb@VULVxUVk@@LWWk@WIkUkJmUkVmI@y@UakLmU@mUUUkaVk@mK@UlUU@UmKmbUUUJ@n@KVLUL@VkJWXX`mnULWlkL@JVLVb@°kxkU@LVV@VLV`UL@VUX\"],encodeOffsets:[[122502,28334]]}},{type:\"Feature\",id:\"3302\",properties:{name:\"宁波市\",cp:[121.5967,29.6466],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@Ċ¦ĸĀ°nXÞVKkƨƑźÿ°»n@wô¥ÜbU°ÆXÞWóçĉÝ±IUÈ¥@U°wÆ»²mm_@aXVKÞVlk@akk̅@£X»VwÆXWa¯aȗbKƽŰĊxLók@@¯nKUL@xkLÑkWULUUmJUXVU@mUX¯@V`mbXbV@@nn¤WXx@kJ@nVVUVl²UbÝVUVk@Wx@V@VXzmlaL@VlLU`XUVVVUnl@VbnJlnUVVnlUKkbmnnVxlJnxmbU@UL@KUVX@xmb@lk@mnVVUè\"],encodeOffsets:[[123784,30977]]}},{type:\"Feature\",id:\"3309\",properties:{name:\"舟山市\",cp:[122.2559,30.2234],childNum:3},geometry:{type:\"Polygon\",coordinates:[\"@@l΢ƒʠþÆVĢLĊǬXĊÜXôVÑÆwlƏÈóVĭVǓ@ĉwɛkmK@ĉXīWaĉUĵÝm¯ĉwĉ±±nÅ¼¯x@VÇ¦V²JĊÞôèÝXÅW¯VÛaó¦@xm¯¼ŹĀ\"],\nencodeOffsets:[[124437,30983]]}},{type:\"Feature\",id:\"3310\",properties:{name:\"台州市\",cp:[121.1353,28.6688],childNum:7},geometry:{type:\"Polygon\",coordinates:[\"@@lVIVWVz@bXJl@Xal@°nLll@nVxnVK@UJVb¦°k`UIWJXnÆ@bUJXl@lbWn@UzVV@bVVmVnnJVXnabKUKnUVVUnVLlKVLXaJm£@mU@WanaU_°@VWnV@UVWnIVVVKlXÒlK@wVKL°m@l@ôKwĉƾůUl£@»UVkm@ƅUaÛIŏmUk@mw@a£Wk@ţIm±@ankôUlaUUw¯ōabÇbţmÞÞVĖbl@@nVXxbUl@Xmb¯lUUUW@ÛI±xU@mb@bmJ@bUzV@b¯bKUa¯KV_@Kk@@mWI@lUUb@bkVm@kwUÇU_WKU@Ux@VUnllX@VnJ@UXV@bWL@lUbbVLUJ@zV@lnbWbnnnJV@L\"],encodeOffsets:[[123312,29526]]}},{type:\"Feature\",id:\"3307\",properties:{name:\"金华市\",cp:[120.0037,29.1028],childNum:8},geometry:{type:\"Polygon\",coordinates:[\"@@nbVb@VbUVlb@VUnVxk`lXnJlbnlL@bX@V@klV@nLnx@JlIVU@VUVnVVI@WVLVbVKXbWnXl@VlXUxb@lVUbllVUIÜVnalKX@@bV@@aUUlUwUw@naWWUVaUUaVbLlxXJVk°UlkU¥@ka@LVlXLVlVWznVn@lxJl_@WX_@mVaa@alU@kVVnaKVLlKb@UUaVabnUWmXU@k@yVI@aÅWmXIVJl_¯¥UaVI@LmUUw@mkkmK¯k@Wbk@WI@aUyUXJkU@bU@WLUyXUbkbW`UVVkKmbUaVUUK£@KVUUUm@UWkXWaUKV@b¯¯mUV@UkmW@kkKwUmkkVUI@WlkUamL@Wk_W@UVm@Ua¯KWXk@Uxm@UK@xVmV@Xk@UVV¼@VLUbUU@yULUbVlU@@XlVUVVbU@lXXVW@XUVl@@VUVÈn@VVU@lVa@UmL@`X@`WL@VUX@lUL@xlx\"],encodeOffsets:[[122119,29948]]}},{type:\"Feature\",id:\"3308\",properties:{name:\"衢州市\",cp:[118.6853,28.8666],childNum:5},geometry:{type:\"Polygon\",coordinates:[\"@@XkVKnwl@@aVK@UwnLK@aÞa¹@Kb@UVaUaVaVK@k°VUllnL@V@xV@V@VVm_Wam@wlaÞbn@lL@WnLk@V@VlK@nkVVb@blKXklakw@wVK@kVW@UXK@_W@_nKV@Ub@kVUUm@ÇVU@Uk@VU@WUXWW@kVUaVUkU@WWXUKk@Ukmm¯LmmUJUIWJkImm_±WLkKm£@aVUmKUnLmWUkVmw@¥ULVWm@WUka@UmmLmm@@bUX@@WUIm@UVUK@UVUUUVVJmb@bXnmV¼nnn¦mJUVLV@VW@UzUlVnUbl`UnVl@XU@kl@bmÈUxVk@@J@¼W@ÅaVVnzmV@WJk@kWJ@lXbWbXxmVnlLXb@°lKVXnWbWVXmbV@XlbI@Kn@@x@VLlm\"],encodeOffsets:[[121185,30184]]}},{type:\"Feature\",id:\"3306\",properties:{name:\"绍兴市\",cp:[120.564,29.7565],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@x@VnnVJnIVJV_VKXblUXJllLUUnU@UVVX@mVUUUJlXUlbV@@VLVmX@@XlaVJVXXJ@b@XU@lUJÈb¤ŌJçVUUnml@@kna@wWVU@LVKV@namwkIUwmnmlaVLkUmVUkmmIUak@VmUUVUWV_kK@UKbnkWyU@@UXwl@VUÞUVak±VUUU@mlI@wXWIWbUKkLUKVmUUmVVLLambUWmIUmnUU@aUUVym@Xkak@W@z@lWVXnmVaUbVb@VakLUKLmbUU@lkV@bbUb@nW`@Xk`Ikwm@mUXyUUkWKUk@Kb@lV¦klV¯UlWIkwKUabVVUbVXXmb@VxxkVVV@bU@@aW@kLmb@lVUIVKmL@bUV@bUV@LalnUV@nbVbUlVXJVUnx\"],encodeOffsets:[[122997,30561]]}},{type:\"Feature\",id:\"3304\",properties:{name:\"嘉兴市\",cp:[120.9155,30.6354],childNum:6},geometry:{type:\"Polygon\",coordinates:[\"@@@blIX@@VÜVUnn@lklKnI°Þl`²LVKVbnbVaVLUVn@W¦@VkVVb@VI`@blLnLaX@VVb@U@XlVa@@kVaUKV»U_lWXU@albk@VllnLVKn@@UVIUw@y°IVVXU@VV@lwm@wVkƾaJLkΡƧƒlLÝUmW¯ķÿĉ¥IŋWnèkVƧU¯ÅmlVx@V¯az@@JU@U¦m@@nVmn@VLV\"],encodeOffsets:[[123233,31382]]}},{type:\"Feature\",id:\"3305\",properties:{name:\"湖州市\",cp:[119.8608,30.7782],childNum:4},geometry:{type:\"Polygon\",coordinates:[\"@@kLlkm@VmÛU@UW@kJ@aUK@UnmmU@maÛL@JWUUKUwUIUJ@XKWV@Vk@UIUmVk@mm@ÅnmaUVkL@VKmLVbU@klU@ÝbV@mVUKV@wUkVmIUJ@nVV@LakJWbUIka@UmKmLKmmUUVk@@nmLX`WXUV@@nUlkmlU@UbxVVIlVnn@@nUÒ@°n@@xmb@VbnV@@b@`@L@L@x@blVklVbnnV@aXb°VlU@Wb°ULXWVUVVwÈwÜ»ĸaĠnUVw²X@V@lVU@wlaUUVm@knUV\"],encodeOffsets:[[123379,31500]]}}],UTF8Encoding:!0}}),i(\"echarts/chart/gauge\",[\"require\",\"./base\",\"../util/shape/GaugePointer\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Rectangle\",\"zrender/shape/Circle\",\"zrender/shape/Sector\",\"../config\",\"../util/ecData\",\"../util/accMath\",\"zrender/tool/util\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"../util/shape/GaugePointer\"),a=e(\"zrender/shape/Text\"),o=e(\"zrender/shape/Line\"),r=e(\"zrender/shape/Rectangle\"),s=e(\"zrender/shape/Circle\"),l=e(\"zrender/shape/Sector\"),h=e(\"../config\");h.gauge={zlevel:0,z:2,center:[\"50%\",\"50%\"],clickable:!0,legendHoverLink:!0,radius:\"75%\",startAngle:225,endAngle:-45,min:0,max:100,splitNumber:10,axisLine:{show:!0,lineStyle:{color:[[.2,\"#228b22\"],[.8,\"#48b\"],[1,\"#ff4500\"]],width:30}},axisTick:{show:!0,splitNumber:5,length:8,lineStyle:{color:\"#eee\",width:1,type:\"solid\"}},axisLabel:{show:!0,textStyle:{color:\"auto\"}},splitLine:{show:!0,length:30,lineStyle:{color:\"#eee\",width:2,type:\"solid\"}},pointer:{show:!0,length:\"80%\",width:8,color:\"auto\"},title:{show:!0,offsetCenter:[0,\"-40%\"],textStyle:{color:\"#333\",fontSize:15}},detail:{show:!0,backgroundColor:\"rgba(0,0,0,0)\",borderWidth:0,borderColor:\"#ccc\",width:100,height:40,offsetCenter:[0,\"40%\"],textStyle:{color:\"auto\",fontSize:30}}};var m=e(\"../util/ecData\"),V=e(\"../util/accMath\"),U=e(\"zrender/tool/util\");return t.prototype={type:h.CHART_TYPE_GAUGE,_buildShape:function(){var e=this.series;this._paramsMap={},this.selectedMap={};for(var t=0,i=e.length;i>t;t++)e[t].type===h.CHART_TYPE_GAUGE&&(this.selectedMap[e[t].name]=!0,e[t]=this.reformOption(e[t]),this.legendHoverLink=e[t].legendHoverLink||this.legendHoverLink,this._buildSingleGauge(t),this.buildMark(t));this.addShapeList()},_buildSingleGauge:function(e){var t=this.series[e];this._paramsMap[e]={center:this.parseCenter(this.zr,t.center),radius:this.parseRadius(this.zr,t.radius),startAngle:t.startAngle.toFixed(2)-0,endAngle:t.endAngle.toFixed(2)-0},this._paramsMap[e].totalAngle=this._paramsMap[e].startAngle-this._paramsMap[e].endAngle,this._colorMap(e),this._buildAxisLine(e),this._buildSplitLine(e),this._buildAxisTick(e),this._buildAxisLabel(e),this._buildPointer(e),this._buildTitle(e),this._buildDetail(e)},_buildAxisLine:function(e){var t=this.series[e];if(t.axisLine.show)for(var i,n,a=t.min,o=t.max-a,r=this._paramsMap[e],s=r.center,l=r.startAngle,h=r.totalAngle,V=r.colorArray,U=t.axisLine.lineStyle,d=this.parsePercent(U.width,r.radius[1]),p=r.radius[1],c=p-d,u=l,y=0,g=V.length;g>y;y++)n=l-h*(V[y][0]-a)/o,i=this._getSector(s,c,p,n,u,V[y][1],U,t.zlevel,t.z),u=n,i._animationAdd=\"r\",m.set(i,\"seriesIndex\",e),m.set(i,\"dataIndex\",y),this.shapeList.push(i)},_buildSplitLine:function(e){var t=this.series[e];if(t.splitLine.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.splitLine,V=this.parsePercent(m.length,r.radius[1]),U=m.lineStyle,d=U.color,p=r.center,c=r.startAngle*Math.PI/180,u=r.totalAngle*Math.PI/180,y=r.radius[1],g=y-V,b=0;s>=b;b++)i=c-u/s*b,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:p[0]+a*y,yStart:p[1]-n*y,xEnd:p[0]+a*g,yEnd:p[1]-n*g,strokeColor:\"auto\"===d?this._getColor(e,l+h/s*b):d,lineType:U.type,lineWidth:U.width,shadowColor:U.shadowColor,shadowBlur:U.shadowBlur,shadowOffsetX:U.shadowOffsetX,shadowOffsetY:U.shadowOffsetY}}))},_buildAxisTick:function(e){var t=this.series[e];if(t.axisTick.show)for(var i,n,a,r=this._paramsMap[e],s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisTick,V=m.splitNumber,U=this.parsePercent(m.length,r.radius[1]),d=m.lineStyle,p=d.color,c=r.center,u=r.startAngle*Math.PI/180,y=r.totalAngle*Math.PI/180,g=r.radius[1],b=g-U,f=0,k=s*V;k>=f;f++)f%V!==0&&(i=u-y/k*f,n=Math.sin(i),a=Math.cos(i),this.shapeList.push(new o({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{xStart:c[0]+a*g,yStart:c[1]-n*g,xEnd:c[0]+a*b,yEnd:c[1]-n*b,strokeColor:\"auto\"===p?this._getColor(e,l+h/k*f):p,lineType:d.type,lineWidth:d.width,shadowColor:d.shadowColor,shadowBlur:d.shadowBlur,shadowOffsetX:d.shadowOffsetX,shadowOffsetY:d.shadowOffsetY}})))},_buildAxisLabel:function(e){var t=this.series[e];if(t.axisLabel.show)for(var i,n,o,r,s=t.splitNumber,l=t.min,h=t.max-l,m=t.axisLabel.textStyle,U=this.getFont(m),d=m.color,p=this._paramsMap[e],c=p.center,u=p.startAngle,y=p.totalAngle,g=p.radius[1]-this.parsePercent(t.splitLine.length,p.radius[1])-5,b=0;s>=b;b++)r=V.accAdd(l,V.accMul(V.accDiv(h,s),b)),i=u-y/s*b,n=Math.sin(i*Math.PI/180),o=Math.cos(i*Math.PI/180),i=(i+360)%360,this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+1,hoverable:!1,style:{x:c[0]+o*g,y:c[1]-n*g,color:\"auto\"===d?this._getColor(e,r):d,text:this._getLabelText(t.axisLabel.formatter,r),textAlign:i>=110&&250>=i?\"left\":70>=i||i>=290?\"right\":\"center\",textBaseline:i>=10&&170>=i?\"top\":i>=190&&350>=i?\"bottom\":\"middle\",textFont:U,shadowColor:m.shadowColor,shadowBlur:m.shadowBlur,shadowOffsetX:m.shadowOffsetX,shadowOffsetY:m.shadowOffsetY}}))},_buildPointer:function(e){var t=this.series[e];if(t.pointer.show){var i=t.max-t.min,a=t.pointer,o=this._paramsMap[e],r=this.parsePercent(a.length,o.radius[1]),l=this.parsePercent(a.width,o.radius[1]),h=o.center,V=this._getValue(e);V=V<t.max?V:t.max;var U=(o.startAngle-o.totalAngle/i*(V-t.min))*Math.PI/180,d=\"auto\"===a.color?this._getColor(e,V):a.color,p=new n({zlevel:t.zlevel,z:t.z+1,clickable:this.query(t,\"clickable\"),style:{x:h[0],y:h[1],r:r,startAngle:o.startAngle*Math.PI/180,angle:U,color:d,width:l,shadowColor:a.shadowColor,shadowBlur:a.shadowBlur,shadowOffsetX:a.shadowOffsetX,shadowOffsetY:a.shadowOffsetY},highlightStyle:{brushType:\"fill\",width:l>2?2:l/2,color:\"#fff\"}});m.pack(p,this.series[e],e,this.series[e].data[0],0,this.series[e].data[0].name,V),this.shapeList.push(p),this.shapeList.push(new s({zlevel:t.zlevel,z:t.z+2,hoverable:!1,style:{x:h[0],y:h[1],r:a.width/2.5,color:\"#fff\"}}))}},_buildTitle:function(e){var t=this.series[e];if(t.title.show){var i=t.data[0],n=null!=i.name?i.name:\"\";if(\"\"!==n){var o=t.title,r=o.offsetCenter,s=o.textStyle,l=s.color,h=this._paramsMap[e],m=h.center[0]+this.parsePercent(r[0],h.radius[1]),V=h.center[1]+this.parsePercent(r[1],h.radius[1]);this.shapeList.push(new a({zlevel:t.zlevel,z:t.z+(Math.abs(m-h.center[0])+Math.abs(V-h.center[1])<2*s.fontSize?2:1),hoverable:!1,style:{x:m,y:V,color:\"auto\"===l?this._getColor(e):l,text:n,textAlign:\"center\",textFont:this.getFont(s),shadowColor:s.shadowColor,shadowBlur:s.shadowBlur,shadowOffsetX:s.shadowOffsetX,shadowOffsetY:s.shadowOffsetY}}))}}},_buildDetail:function(e){var t=this.series[e];if(t.detail.show){var i=t.detail,n=i.offsetCenter,a=i.backgroundColor,o=i.textStyle,s=o.color,l=this._paramsMap[e],h=this._getValue(e),m=l.center[0]-i.width/2+this.parsePercent(n[0],l.radius[1]),V=l.center[1]+this.parsePercent(n[1],l.radius[1]);this.shapeList.push(new r({zlevel:t.zlevel,z:t.z+(Math.abs(m+i.width/2-l.center[0])+Math.abs(V+i.height/2-l.center[1])<o.fontSize?2:1),hoverable:!1,style:{x:m,y:V,width:i.width,height:i.height,brushType:\"both\",color:\"auto\"===a?this._getColor(e,h):a,lineWidth:i.borderWidth,strokeColor:i.borderColor,shadowColor:i.shadowColor,shadowBlur:i.shadowBlur,shadowOffsetX:i.shadowOffsetX,shadowOffsetY:i.shadowOffsetY,text:this._getLabelText(i.formatter,h),textFont:this.getFont(o),textPosition:\"inside\",textColor:\"auto\"===s?this._getColor(e,h):s}}))}},_getValue:function(e){return this.getDataFromOption(this.series[e].data[0])},_colorMap:function(e){var t=this.series[e],i=t.min,n=t.max-i,a=t.axisLine.lineStyle.color;a instanceof Array||(a=[[1,a]]);for(var o=[],r=0,s=a.length;s>r;r++)o.push([a[r][0]*n+i,a[r][1]]);this._paramsMap[e].colorArray=o},_getColor:function(e,t){null==t&&(t=this._getValue(e));for(var i=this._paramsMap[e].colorArray,n=0,a=i.length;a>n;n++)if(i[n][0]>=t)return i[n][1];return i[i.length-1][1]},_getSector:function(e,t,i,n,a,o,r,s,h){return new l({zlevel:s,z:h,hoverable:!1,style:{x:e[0],y:e[1],r0:t,r:i,startAngle:n,endAngle:a,brushType:\"fill\",color:o,shadowColor:r.shadowColor,shadowBlur:r.shadowBlur,shadowOffsetX:r.shadowOffsetX,shadowOffsetY:r.shadowOffsetY}})},_getLabelText:function(e,t){if(e){if(\"function\"==typeof e)return e.call(this.myChart,t);if(\"string\"==typeof e)return e.replace(\"{value}\",t)}return t},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},U.inherits(t,i),e(\"../chart\").define(\"gauge\",t),t}),i(\"echarts/util/shape/GaugePointer\",[\"require\",\"zrender/shape/Base\",\"zrender/tool/util\",\"./normalIsCover\"],function(e){function t(e){i.call(this,e)}var i=e(\"zrender/shape/Base\"),n=e(\"zrender/tool/util\");return t.prototype={type:\"gauge-pointer\",buildPath:function(e,t){var i=t.r,n=t.width,a=t.angle,o=t.x-Math.cos(a)*n*(n>=i/3?1:2),r=t.y+Math.sin(a)*n*(n>=i/3?1:2);a=t.angle-Math.PI/2,e.moveTo(o,r),e.lineTo(t.x+Math.cos(a)*n,t.y-Math.sin(a)*n),e.lineTo(t.x+Math.cos(t.angle)*i,t.y-Math.sin(t.angle)*i),e.lineTo(t.x-Math.cos(a)*n,t.y+Math.sin(a)*n),e.lineTo(o,r)},getRect:function(e){if(e.__rect)return e.__rect;var t=2*e.width,i=e.x,n=e.y,a=i+Math.cos(e.angle)*e.r,o=n-Math.sin(e.angle)*e.r;return e.__rect={x:Math.min(i,a)-t,y:Math.min(n,o)-t,width:Math.abs(i-a)+t,height:Math.abs(n-o)+t},e.__rect},isCover:e(\"./normalIsCover\")},n.inherits(t,i),t}),i(\"echarts/chart/funnel\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"zrender/shape/Polygon\",\"../config\",\"../util/ecData\",\"../util/number\",\"zrender/tool/util\",\"zrender/tool/color\",\"zrender/tool/area\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Line\"),o=e(\"zrender/shape/Polygon\"),r=e(\"../config\");r.funnel={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,x:80,y:60,x2:80,y2:60,min:0,max:100,minSize:\"0%\",maxSize:\"100%\",sort:\"descending\",gap:0,funnelAlign:\"center\",itemStyle:{normal:{borderColor:\"#fff\",borderWidth:1,label:{show:!0,position:\"outer\"},labelLine:{show:!0,length:10,lineStyle:{width:1,type:\"solid\"}}},emphasis:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,label:{show:!0},labelLine:{show:!0}}}};var s=e(\"../util/ecData\"),l=e(\"../util/number\"),h=e(\"zrender/tool/util\"),m=e(\"zrender/tool/color\"),V=e(\"zrender/tool/area\");return t.prototype={type:r.CHART_TYPE_FUNNEL,_buildShape:function(){var e=this.series,t=this.component.legend;this._paramsMap={},this._selected={},this.selectedMap={};for(var i,n=0,a=e.length;a>n;n++)if(e[n].type===r.CHART_TYPE_FUNNEL){if(e[n]=this.reformOption(e[n]),this.legendHoverLink=e[n].legendHoverLink||this.legendHoverLink,i=e[n].name||\"\",this.selectedMap[i]=t?t.isSelected(i):!0,!this.selectedMap[i])continue;this._buildSingleFunnel(n),this.buildMark(n)}this.addShapeList()},_buildSingleFunnel:function(e){var t=this.component.legend,i=this.series[e],n=this._mapData(e),a=this._getLocation(e);this._paramsMap[e]={location:a,data:n};for(var o,r=0,s=[],h=0,m=n.length;m>h;h++)o=n[h].name,this.selectedMap[o]=t?t.isSelected(o):!0,this.selectedMap[o]&&!isNaN(n[h].value)&&(s.push(n[h]),r++);if(0!==r){for(var V,U,d,p,c=this._buildFunnelCase(e),u=i.funnelAlign,y=i.gap,g=r>1?(a.height-(r-1)*y)/r:a.height,b=a.y,f=\"descending\"===i.sort?this._getItemWidth(e,s[0].value):l.parsePercent(i.minSize,a.width),k=\"descending\"===i.sort?1:0,x=a.centerX,_=[],h=0,m=s.length;m>h;h++)if(o=s[h].name,this.selectedMap[o]&&!isNaN(s[h].value)){switch(V=m-2>=h?this._getItemWidth(e,s[h+k].value):\"descending\"===i.sort?l.parsePercent(i.minSize,a.width):l.parsePercent(i.maxSize,a.width),u){case\"left\":U=a.x;break;case\"right\":U=a.x+a.width-f;break;default:U=x-f/2}d=this._buildItem(e,s[h]._index,t?t.getColor(o):this.zr.getColor(s[h]._index),U,b,f,V,g,u),b+=g+y,p=d.style.pointList,_.unshift([p[0][0]-10,p[0][1]]),_.push([p[1][0]+10,p[1][1]]),0===h&&(0===f?(p=_.pop(),\"center\"==u&&(_[0][0]+=10),\"right\"==u&&(_[0][0]=p[0]),_[0][1]-=\"center\"==u?10:15,1==m&&(p=d.style.pointList)):(_[_.length-1][1]-=5,_[0][1]-=5)),f=V}c&&(_.unshift([p[3][0]-10,p[3][1]]),_.push([p[2][0]+10,p[2][1]]),0===f?(p=_.pop(),\"center\"==u&&(_[0][0]+=10),\"right\"==u&&(_[0][0]=p[0]),_[0][1]+=\"center\"==u?10:15):(_[_.length-1][1]+=5,_[0][1]+=5),c.style.pointList=_)}},_buildFunnelCase:function(e){var t=this.series[e];if(this.deepQuery([t,this.option],\"calculable\")){var i=this._paramsMap[e].location,n=10,a={hoverable:!1,style:{pointListd:[[i.x-n,i.y-n],[i.x+i.width+n,i.y-n],[i.x+i.width+n,i.y+i.height+n],[i.x-n,i.y+i.height+n]],brushType:\"stroke\",lineWidth:1,strokeColor:t.calculableHolderColor||this.ecTheme.calculableHolderColor||r.calculableHolderColor}};return s.pack(a,t,e,void 0,-1),this.setCalculable(a),a=new o(a),this.shapeList.push(a),a}},_getLocation:function(e){var t=this.series[e],i=this.zr.getWidth(),n=this.zr.getHeight(),a=this.parsePercent(t.x,i),o=this.parsePercent(t.y,n),r=null==t.width?i-a-this.parsePercent(t.x2,i):this.parsePercent(t.width,i);return{x:a,y:o,width:r,height:null==t.height?n-o-this.parsePercent(t.y2,n):this.parsePercent(t.height,n),centerX:a+r/2}},_mapData:function(e){function t(e,t){return\"-\"===e.value?1:\"-\"===t.value?-1:t.value-e.value}function i(e,i){return-t(e,i)}for(var n=this.series[e],a=h.clone(n.data),o=0,r=a.length;r>o;o++)a[o]._index=o;return\"none\"!=n.sort&&a.sort(\"descending\"===n.sort?t:i),a},_buildItem:function(e,t,i,n,a,o,r,l,h){var m=this.series,V=m[e],U=V.data[t],d=this.getPolygon(e,t,i,n,a,o,r,l,h);s.pack(d,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(d);var p=this.getLabel(e,t,i,n,a,o,r,l,h);s.pack(p,m[e],e,m[e].data[t],t,m[e].data[t].name),this.shapeList.push(p),this._needLabel(V,U,!1)||(p.invisible=!0);var c=this.getLabelLine(e,t,i,n,a,o,r,l,h);this.shapeList.push(c),this._needLabelLine(V,U,!1)||(c.invisible=!0);var u=[],y=[];return this._needLabelLine(V,U,!0)&&(u.push(c.id),y.push(c.id)),this._needLabel(V,U,!0)&&(u.push(p.id),y.push(d.id)),d.hoverConnect=u,p.hoverConnect=y,d},_getItemWidth:function(e,t){var i=this.series[e],n=this._paramsMap[e].location,a=i.min,o=i.max,r=l.parsePercent(i.minSize,n.width),s=l.parsePercent(i.maxSize,n.width);return(t-a)*(s-r)/(o-a)+r},getPolygon:function(e,t,i,n,a,r,s,l,h){var V,U=this.series[e],d=U.data[t],p=[d,U],c=this.deepMerge(p,\"itemStyle.normal\")||{},u=this.deepMerge(p,\"itemStyle.emphasis\")||{},y=this.getItemStyleColor(c.color,e,t,d)||i,g=this.getItemStyleColor(u.color,e,t,d)||(\"string\"==typeof y?m.lift(y,-.2):y);switch(h){case\"left\":V=n;break;case\"right\":V=n+(r-s);break;default:V=n+(r-s)/2}var b={zlevel:U.zlevel,z:U.z,clickable:this.deepQuery(p,\"clickable\"),style:{pointList:[[n,a],[n+r,a],[V+s,a+l],[V,a+l]],brushType:\"both\",color:y,lineWidth:c.borderWidth,strokeColor:c.borderColor},highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};return this.deepQuery([d,U,this.option],\"calculable\")&&(this.setCalculable(b),b.draggable=!0),new o(b)},getLabel:function(e,t,i,a,o,r,s,l,U){var d,p=this.series[e],c=p.data[t],u=this._paramsMap[e].location,y=h.merge(h.clone(c.itemStyle)||{},p.itemStyle),g=\"normal\",b=y[g].label,f=b.textStyle||{},k=y[g].labelLine.length,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i;b.position=b.position||y.normal.label.position,\"inner\"===b.position||\"inside\"===b.position||\"center\"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?\"#fff\":m.reverse(i)):d=\"left\"===b.position?\"right\":\"left\";var W={zlevel:p.zlevel,z:p.z+1,style:{x:this._getLabelPoint(b.position,a,u,r,s,k,U),y:o+l/2,color:f.color||L,text:x,textAlign:f.align||d,textBaseline:f.baseline||\"middle\",textFont:_}};return g=\"emphasis\",b=y[g].label||b,f=b.textStyle||f,k=y[g].labelLine.length||k,b.position=b.position||y.normal.label.position,x=this.getLabelText(e,t,g),_=this.getFont(f),L=i,\"inner\"===b.position||\"inside\"===b.position||\"center\"===b.position?(d=U,L=Math.max(r,s)/2>V.getTextWidth(x,_)?\"#fff\":m.reverse(i)):d=\"left\"===b.position?\"right\":\"left\",W.highlightStyle={x:this._getLabelPoint(b.position,a,u,r,s,k,U),color:f.color||L,text:x,textAlign:f.align||d,textFont:_,brushType:\"fill\"},new n(W)},getLabelText:function(e,t,i){var n=this.series,a=n[e],o=a.data[t],r=this.deepQuery([o,a],\"itemStyle.\"+i+\".label.formatter\");return r?\"function\"==typeof r?r.call(this.myChart,{seriesIndex:e,seriesName:a.name||\"\",series:a,dataIndex:t,data:o,name:o.name,value:o.value}):\"string\"==typeof r?r=r.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\").replace(\"{a0}\",a.name).replace(\"{b0}\",o.name).replace(\"{c0}\",o.value):void 0:o.name},getLabelLine:function(e,t,i,n,o,r,s,l,m){var V=this.series[e],U=V.data[t],d=this._paramsMap[e].location,p=h.merge(h.clone(U.itemStyle)||{},V.itemStyle),c=\"normal\",u=p[c].labelLine,y=p[c].labelLine.length,g=u.lineStyle||{},b=p[c].label;b.position=b.position||p.normal.label.position;var f={zlevel:V.zlevel,z:V.z+1,hoverable:!1,style:{xStart:this._getLabelLineStartPoint(n,d,r,s,m),yStart:o+l/2,xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),yEnd:o+l/2,strokeColor:g.color||i,lineType:g.type,lineWidth:g.width}};return c=\"emphasis\",u=p[c].labelLine||u,y=p[c].labelLine.length||y,g=u.lineStyle||g,b=p[c].label||b,b.position=b.position,f.highlightStyle={xEnd:this._getLabelPoint(b.position,n,d,r,s,y,m),strokeColor:g.color||i,lineType:g.type,lineWidth:g.width},new a(f)},_getLabelPoint:function(e,t,i,n,a,o,r){switch(e=\"inner\"===e||\"inside\"===e?\"center\":e){case\"center\":return\"center\"==r?t+n/2:\"left\"==r?t+10:t+n-10;case\"left\":return\"auto\"===o?i.x-10:\"center\"==r?i.centerX-Math.max(n,a)/2-o:\"right\"==r?t-(a>n?a-n:0)-o:i.x-o;default:return\"auto\"===o?i.x+i.width+10:\"center\"==r?i.centerX+Math.max(n,a)/2+o:\"right\"==r?i.x+i.width+o:t+Math.max(n,a)+o}},_getLabelLineStartPoint:function(e,t,i,n,a){return\"center\"==a?t.centerX:n>i?e+Math.min(i,n)/2:e+Math.max(i,n)/2},_needLabel:function(e,t,i){return this.deepQuery([t,e],\"itemStyle.\"+(i?\"emphasis\":\"normal\")+\".label.show\")},_needLabelLine:function(e,t,i){return this.deepQuery([t,e],\"itemStyle.\"+(i?\"emphasis\":\"normal\")+\".labelLine.show\")},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},h.inherits(t,i),e(\"../chart\").define(\"funnel\",t),t}),i(\"echarts/chart/eventRiver\",[\"require\",\"./base\",\"../layout/eventRiver\",\"zrender/shape/Polygon\",\"../component/axis\",\"../component/grid\",\"../component/dataZoom\",\"../config\",\"../util/ecData\",\"../util/date\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o);var r=this;r._ondragend=function(){r.isDragend=!0},this.refresh(a)}var i=e(\"./base\"),n=e(\"../layout/eventRiver\"),a=e(\"zrender/shape/Polygon\");e(\"../component/axis\"),e(\"../component/grid\"),e(\"../component/dataZoom\");var o=e(\"../config\");o.eventRiver={zlevel:0,z:2,clickable:!0,legendHoverLink:!0,itemStyle:{normal:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,label:{show:!0,position:\"inside\",formatter:\"{b}\"}},emphasis:{borderColor:\"rgba(0,0,0,0)\",borderWidth:1,label:{show:!0}}}};var r=e(\"../util/ecData\"),s=e(\"../util/date\"),l=e(\"zrender/tool/util\"),h=e(\"zrender/tool/color\");return t.prototype={type:o.CHART_TYPE_EVENTRIVER,_buildShape:function(){var e=this.series;this.selectedMap={},this._dataPreprocessing();for(var t=this.component.legend,i=[],a=0;a<e.length;a++)if(e[a].type===this.type){e[a]=this.reformOption(e[a]),this.legendHoverLink=e[a].legendHoverLink||this.legendHoverLink;var o=e[a].name||\"\";if(this.selectedMap[o]=t?t.isSelected(o):!0,!this.selectedMap[o])continue;this.buildMark(a),i.push(this.series[a])}n(i,this._intervalX,this.component.grid.getArea()),this._drawEventRiver(),this.addShapeList()},_dataPreprocessing:function(){for(var e,t,i=this.series,n=0,a=i.length;a>n;n++)if(i[n].type===this.type){e=this.component.xAxis.getAxis(i[n].xAxisIndex||0);for(var o=0,r=i[n].data.length;r>o;o++){t=i[n].data[o].evolution;for(var l=0,h=t.length;h>l;l++)t[l].timeScale=e.getCoord(s.getNewDate(t[l].time)-0),t[l].valueScale=Math.pow(t[l].value,.8)}}this._intervalX=Math.round(this.component.grid.getWidth()/40)},_drawEventRiver:function(){for(var e=this.series,t=0;t<e.length;t++){var i=e[t].name||\"\";if(e[t].type===this.type&&this.selectedMap[i])for(var n=0;n<e[t].data.length;n++)this._drawEventBubble(e[t].data[n],t,n)}},_drawEventBubble:function(e,t,i){var n=this.series,o=n[t],s=o.name||\"\",l=o.data[i],m=[l,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,\"itemStyle.normal\")||{},p=this.deepMerge(m,\"itemStyle.emphasis\")||{},c=this.getItemStyleColor(d.color,t,i,l)||U,u=this.getItemStyleColor(p.color,t,i,l)||(\"string\"==typeof c?h.lift(c,-.2):c),y=this._calculateControlPoints(e),g={zlevel:o.zlevel,z:o.z,clickable:this.deepQuery(m,\"clickable\"),style:{pointList:y,smooth:\"spline\",brushType:\"both\",lineJoin:\"round\",color:c,lineWidth:d.borderWidth,strokeColor:d.borderColor},highlightStyle:{color:u,lineWidth:p.borderWidth,strokeColor:p.borderColor},draggable:\"vertical\",ondragend:this._ondragend};g=new a(g),this.addLabel(g,o,l,e.name),r.pack(g,n[t],t,n[t].data[i],i,n[t].data[i].name),this.shapeList.push(g)},_calculateControlPoints:function(e){var t=this._intervalX,i=e.y,n=e.evolution,a=n.length;if(!(1>a)){for(var o=[],r=[],s=0;a>s;s++)o.push(n[s].timeScale),r.push(n[s].valueScale);var l=[];l.push([o[0],i]);var s=0;for(s=0;a-1>s;s++)l.push([(o[s]+o[s+1])/2,r[s]/-2+i]);for(l.push([(o[s]+(o[s]+t))/2,r[s]/-2+i]),l.push([o[s]+t,i]),l.push([(o[s]+(o[s]+t))/2,r[s]/2+i]),s=a-1;s>0;s--)l.push([(o[s]+o[s-1])/2,r[s-1]/2+i]);return l}},ondragend:function(e,t){this.isDragend&&e.target&&(t.dragOut=!0,t.dragIn=!0,t.needRefresh=!1,this.isDragend=!1)},refresh:function(e){e&&(this.option=e,this.series=e.series),this.backupShapeList(),this._buildShape()}},l.inherits(t,i),e(\"../chart\").define(\"eventRiver\",t),t}),i(\"echarts/layout/eventRiver\",[\"require\"],function(){function e(e,i,o){function r(e,t){var i=e.importance,n=t.importance;return i>n?-1:n>i?1:0}for(var s=4,l=0;l<e.length;l++){for(var h=0;h<e[l].data.length;h++){null==e[l].data[h].weight&&(e[l].data[h].weight=1);for(var m=0,V=0;V<e[l].data[h].evolution.length;V++)m+=e[l].data[h].evolution[V].valueScale;e[l].data[h].importance=m*e[l].data[h].weight}e[l].data.sort(r)}for(var l=0;l<e.length;l++){null==e[l].weight&&(e[l].weight=1);for(var m=0,h=0;h<e[l].data.length;h++)m+=e[l].data[h].weight;e[l].importance=m*e[l].weight}e.sort(r);for(var U=Number.MAX_VALUE,d=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++)for(var V=0;V<e[l].data[h].evolution.length;V++){var p=e[l].data[h].evolution[V].timeScale;U=Math.min(U,p),d=Math.max(d,p)}U=~~U,d=~~d;for(var c=function(){var e=d-U+1+~~i;if(0>=e)return[0];for(var t=[];e--;)t.push(0);return t}(),u=c.slice(0),y=[],g=0,b=0,l=0;l<e.length;l++)for(var h=0;h<e[l].data.length;h++){var f=e[l].data[h];f.time=[],f.value=[];for(var k,x=0,V=0;V<e[l].data[h].evolution.length;V++)k=e[l].data[h].evolution[V],f.time.push(k.timeScale),f.value.push(k.valueScale),x=Math.max(x,k.valueScale);n(f,i,U),f.y=a(u,f,function(e,t){return e.ypx[t]}),f._offset=a(c,f,function(){return s}),g=Math.max(g,f.y+x),b=Math.max(b,f._offset),y.push(f)}t(y,o,g,b)}function t(e,t,i,n){for(var a=t.height,o=n/a>.5?.5:1,r=t.y,s=(t.height-n)/i,l=0,h=e.length;h>l;l++){var m=e[l];m.y=r+s*m.y+m._offset*o,delete m.time,delete m.value,delete m.xpx,delete m.ypx,delete m._offset;for(var V=m.evolution,U=0,d=V.length;d>U;U++)V[U].valueScale*=s}}function i(e,t,i,n){if(e===i)throw new Error(\"x0 is equal with x1!!!\");if(t===n)return function(){return t};var a=(t-n)/(e-i),o=(n*e-t*i)/(e-i);return function(e){return a*e+o}}function n(e,t,n){var a=~~t,o=e.time.length;e.xpx=[],e.ypx=[];for(var r,s=0,l=0,h=0,m=0,V=0;o>s;s++){l=~~e.time[s],m=e.value[s]/2,s===o-1?(h=l+a,V=0):(h=~~e.time[s+1],V=e.value[s+1]/2),r=i(l,m,h,V);for(var U=l;h>U;U++)e.xpx.push(U-n),e.ypx.push(r(U))}e.xpx.push(h-n),e.ypx.push(V)}function a(e,t,i){for(var n,a=0,o=t.xpx.length,r=0;o>r;r++)n=i(t,r),a=Math.max(a,n+e[t.xpx[r]]);for(r=0;o>r;r++)n=i(t,r),e[t.xpx[r]]=a+n;return a}return e}),i(\"echarts/chart/venn\",[\"require\",\"./base\",\"zrender/shape/Text\",\"zrender/shape/Circle\",\"zrender/shape/Path\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"zrender/shape/Circle\"),o=e(\"zrender/shape/Path\"),r=e(\"../config\");r.venn={zlevel:0,z:1,calculable:!1};var s=e(\"../util/ecData\"),l=e(\"zrender/tool/util\");return t.prototype={type:r.CHART_TYPE_VENN,_buildShape:function(){this.selectedMap={},this._symbol=this.option.symbolList,this._queryTarget,this._dropBoxList=[],this._vennDataCounter=0;for(var e=this.series,t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===r.CHART_TYPE_VENN){e[i]=this.reformOption(e[i]);var n=e[i].name||\"\";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this._buildVenn(i)}this.addShapeList()},_buildVenn:function(e){var t,i,n=this.series[e],a=n.data;a[0].value>a[1].value?(t=this.zr.getHeight()/3,i=t*Math.sqrt(a[1].value)/Math.sqrt(a[0].value)):(i=this.zr.getHeight()/3,t=i*Math.sqrt(a[0].value)/Math.sqrt(a[1].value));var o=this.zr.getWidth()/2-t,r=(t+i)/2*Math.sqrt(a[2].value)/Math.sqrt((a[0].value+a[1].value)/2),s=t+i;0!==a[2].value&&(s=this._getCoincideLength(a[0].value,a[1].value,a[2].value,t,i,r,Math.abs(t-i),t+i));var l=o+s,h=this.zr.getHeight()/2;if(this._buildItem(e,0,a[0],o,h,t),this._buildItem(e,1,a[1],l,h,i),0!==a[2].value&&a[2].value!==a[0].value&&a[2].value!==a[1].value){var m=(t*t-i*i)/(2*s)+s/2,V=s/2-(t*t-i*i)/(2*s),U=Math.sqrt(t*t-m*m),d=0,p=0;a[0].value>a[1].value&&o+m>l&&(p=1),a[0].value<a[1].value&&o+V>l&&(d=1),this._buildCoincideItem(e,2,a[2],o+m,h-U,h+U,t,i,d,p)}},_getCoincideLength:function(e,t,i,n,a,o,r,s){var l=(n*n-a*a)/(2*o)+o/2,h=o/2-(n*n-a*a)/(2*o),m=Math.acos(l/n),V=Math.acos(h/a),U=n*n*Math.PI,d=m*n*n-l*n*Math.sin(m)+V*a*a-h*a*Math.sin(V),p=d/U,c=i/e,u=Math.abs(p/c);return u>.999&&1.001>u?o:.999>=u?(s=o,o=(o+r)/2,this._getCoincideLength(e,t,i,n,a,o,r,s)):(r=o,o=(o+s)/2,this._getCoincideLength(e,t,i,n,a,o,r,s))},_buildItem:function(e,t,i,n,a,o){var r=this.series,l=r[e],h=this.getCircle(e,t,i,n,a,o);if(s.pack(h,l,e,i,t,i.name),this.shapeList.push(h),l.itemStyle.normal.label.show){var m=this.getLabel(e,t,i,n,a,o);s.pack(m,l,e,l.data[t],t,l.data[t].name),this.shapeList.push(m)}},_buildCoincideItem:function(e,t,i,n,a,r,l,h,m,V){var U=this.series,d=U[e],p=[i,d],c=this.deepMerge(p,\"itemStyle.normal\")||{},u=this.deepMerge(p,\"itemStyle.emphasis\")||{},y=c.color||this.zr.getColor(t),g=u.color||this.zr.getColor(t),b=\"M\"+n+\",\"+a+\"A\"+l+\",\"+l+\",0,\"+m+\",1,\"+n+\",\"+r+\"A\"+h+\",\"+h+\",0,\"+V+\",1,\"+n+\",\"+a,f={color:y,path:b},k={zlevel:d.zlevel,z:d.z,style:f,highlightStyle:{color:g,lineWidth:u.borderWidth,strokeColor:u.borderColor}};k=new o(k),k.buildPathArray&&(k.style.pathArray=k.buildPathArray(f.path)),s.pack(k,U[e],0,i,t,i.name),this.shapeList.push(k)},getCircle:function(e,t,i,n,o,r){var s=this.series[e],l=[i,s],h=this.deepMerge(l,\"itemStyle.normal\")||{},m=this.deepMerge(l,\"itemStyle.emphasis\")||{},V=h.color||this.zr.getColor(t),U=m.color||this.zr.getColor(t),d={zlevel:s.zlevel,z:s.z,clickable:!0,style:{x:n,y:o,r:r,brushType:\"fill\",opacity:1,color:V},highlightStyle:{color:U,lineWidth:m.borderWidth,strokeColor:m.borderColor}};return this.deepQuery([i,s,this.option],\"calculable\")&&(this.setCalculable(d),d.draggable=!0),new a(d)},getLabel:function(e,t,i,a,o,r){var s=this.series[e],l=s.itemStyle,h=[i,s],m=this.deepMerge(h,\"itemStyle.normal\")||{},V=\"normal\",U=l[V].label,d=U.textStyle||{},p=this.getLabelText(t,i,V),c=this.getFont(d),u=m.color||this.zr.getColor(t),y=d.fontSize||12,g={zlevel:s.zlevel,z:s.z,style:{x:a,y:o-r-y,color:d.color||u,text:p,textFont:c,textAlign:\"center\"}};return new n(g)},getLabelText:function(e,t,i){var n=this.series,a=n[0],o=this.deepQuery([t,a],\"itemStyle.\"+i+\".label.formatter\");return o?\"function\"==typeof o?o(a.name,t.name,t.value):\"string\"==typeof o?(o=o.replace(\"{a}\",\"{a0}\").replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\"),o=o.replace(\"{a0}\",a.name).replace(\"{b0}\",t.name).replace(\"{c0}\",t.value)):void 0:t.name},refresh:function(e){e&&(this.option=e,this.series=e.series),this._buildShape()}},l.inherits(t,i),e(\"../chart\").define(\"venn\",t),t}),i(\"echarts/chart/treemap\",[\"require\",\"./base\",\"zrender/tool/area\",\"zrender/shape/Rectangle\",\"zrender/shape/Text\",\"zrender/shape/Line\",\"../layout/TreeMap\",\"../data/Tree\",\"../config\",\"../util/ecData\",\"zrender/config\",\"zrender/tool/event\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a);var r=this;r._onclick=function(e){return r.__onclick(e)},r.zr.on(V.EVENT.CLICK,r._onclick)}var i=e(\"./base\"),n=e(\"zrender/tool/area\"),a=e(\"zrender/shape/Rectangle\"),o=e(\"zrender/shape/Text\"),r=e(\"zrender/shape/Line\"),s=e(\"../layout/TreeMap\"),l=e(\"../data/Tree\"),h=e(\"../config\");h.treemap={zlevel:0,z:1,calculable:!1,clickable:!0,center:[\"50%\",\"50%\"],size:[\"80%\",\"80%\"],root:\"\",itemStyle:{normal:{label:{\nshow:!0,x:5,y:12,textStyle:{align:\"left\",color:\"#000\",fontFamily:\"Arial\",fontSize:13,fontStyle:\"normal\",fontWeight:\"normal\"}},breadcrumb:{show:!0,textStyle:{}},borderWidth:1,borderColor:\"#ccc\",childBorderWidth:1,childBorderColor:\"#ccc\"},emphasis:{}}};var m=e(\"../util/ecData\"),V=e(\"zrender/config\"),U=(e(\"zrender/tool/event\"),e(\"zrender/tool/util\")),d=e(\"zrender/tool/color\");return t.prototype={type:h.CHART_TYPE_TREEMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series),this._treesMap={};for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===h.CHART_TYPE_TREEMAP){t[n]=this.reformOption(t[n]);var a=t[n].name||\"\";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){var i=l.fromOptionData(e.name,e.data);this._treesMap[t]=i;var n=e.root&&i.getNodeById(e.root)||i.root;this._buildTreemap(n,t)},_buildTreemap:function(e,t){for(var i=this.shapeList,n=0;n<i.length;){var a=i[n];m.get(a,\"seriesIndex\")===t?(this.zr.delShape(i[n]),i.splice(n,1)):n++}for(var o=i.length,r=this.series[t],l=r.itemStyle,h=this.parsePercent(r.size[0],this.zr.getWidth())||400,V=this.parsePercent(r.size[1],this.zr.getHeight())||500,U=this.parseCenter(this.zr,r.center),d=U[0]-.5*h,p=U[1]-.5*V,c=h*V,u=0,y=[],g=e.children,n=0;n<g.length;n++)u+=g[n].data.value;for(var b=0;b<g.length;b++)y.push(g[b].data.value*c/u);for(var f=new s({x:d,y:p,width:h,height:V}),k=f.run(y),x=0;x<k.length;x++){var _=g[x].data,L=k[x],W=[_.itemStyle,l],X=this.deepMerge(W);X.normal.color||(X.normal.color=this.zr.getColor(x)),X.emphasis.color||(X.emphasis.color=X.normal.color),this._buildItem(_,X,L,t,x),_.children&&this._buildChildrenTreemap(_.children,X,L,t)}this.query(r,\"itemStyle.normal.breadcrumb.show\")&&this._buildBreadcrumb(e,t,d,p+V);for(var n=o;n<i.length;n++)this.zr.addShape(i[n])},_buildItem:function(e,t,i,n,a){var o=this.series,r=this.getRectangle(e,t,i);m.pack(r,o[n],n,e,a,e.name),this.shapeList.push(r)},getRectangle:function(e,t,i){var n=t.emphasis,o=t.normal,r=this.getLabel(t,i,e.name,e.value),s=this.option.hoverable,l={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:s,clickable:!0,style:U.merge({x:i.x,y:i.y,width:i.width,height:i.height,brushType:\"both\",color:o.color,lineWidth:o.borderWidth,strokeColor:o.borderColor},r.style,!0),highlightStyle:U.merge({color:n.color,lineWidth:n.borderWidth,strokeColor:n.borderColor},r.highlightStyle,!0)};return new a(l)},getLabel:function(e,t,i,a){var o=e.normal.label.textStyle,r=[e.emphasis.label.textStyle,o],s=this.deepMerge(r),l=e.normal.label.formatter,h=this.getLabelText(i,a,l),m=this.getFont(o),V=n.getTextWidth(h,m),U=n.getTextHeight(h,m),d=this.deepQuery([e.emphasis,e.normal],\"label.formatter\"),p=this.getLabelText(i,a,d),c=this.getFont(s),u=n.getTextWidth(h,c),y=n.getTextHeight(h,c);e.normal.label.show?(e.normal.label.x+V>t.width||e.normal.label.y+U>t.height)&&(h=\"\"):h=\"\",e.emphasis.label.show?(s.x+u>t.width||s.y+y>t.height)&&(p=\"\"):p=\"\";var g={style:{textX:t.x+e.normal.label.x,textY:t.y+e.normal.label.y,text:h,textPosition:\"specific\",textColor:o.color,textFont:m},highlightStyle:{textX:t.x+e.emphasis.label.x,textY:t.y+e.emphasis.label.y,text:p,textColor:s.color,textPosition:\"specific\"}};return g},getLabelText:function(e,t,i){return i?\"function\"==typeof i?i.call(this.myChart,e,t):\"string\"==typeof i?(i=i.replace(\"{b}\",\"{b0}\").replace(\"{c}\",\"{c0}\"),i=i.replace(\"{b0}\",e).replace(\"{c0}\",t)):void 0:e},_buildChildrenTreemap:function(e,t,i,n){for(var a=i.width*i.height,o=0,r=[],l=0;l<e.length;l++)o+=e[l].value;for(var h=0;h<e.length;h++)r.push(e[h].value*a/o);for(var V=new s({x:i.x,y:i.y,width:i.width,height:i.height}),U=V.run(r),d=t.normal.childBorderWidth,p=t.normal.childBorderColor,c=0;c<U.length;c++){var u=U[c],y=[];i.y.toFixed(2)!==u.y.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x+u.width,u.y,d,p)),i.x.toFixed(2)!==u.x.toFixed(2)&&y.push(this._getLine(u.x,u.y,u.x,u.y+u.height,d,p)),(i.y+i.height).toFixed(2)!==(u.y+u.height).toFixed(2)&&y.push(this._getLine(u.x,u.y+u.height,u.x+u.width,u.y+u.height,d,p)),(i.x+i.width).toFixed(2)!==(u.x+u.width).toFixed(2)&&y.push(this._getLine(u.x+u.width,u.y,u.x+u.width,u.y+u.height,d,p));for(var g=0;g<y.length;g++)m.set(y[g],\"seriesIndex\",n),this.shapeList.push(y[g])}},_getLine:function(e,t,i,n,a,o){var s={zlevel:this.getZlevelBase(),z:this.getZBase(),hoverable:!1,style:{xStart:e,yStart:t,xEnd:i,yEnd:n,lineWidth:a,strokeColor:o}};return new r(s)},_buildBreadcrumb:function(e,t,i,n){for(var a=[],r=e;r;)a.unshift(r.data.name),r=r.parent;for(var s=this.series[t],l=this.query(s,\"itemStyle.normal.breadcrumb.textStyle\")||{},h=this.query(s,\"itemStyle.emphasis.breadcrumb.textStyle\")||{},V={y:n+10,textBaseline:\"top\",textAlign:\"left\",color:l.color,textFont:this.getFont(l)},p={brushType:\"fill\",color:h.color||d.lift(l.color,-.3),textFont:this.getFont(h)},c=0;c<a.length;c++){var u=new o({zlevel:this.getZlevelBase(),z:this.getZBase(),style:U.merge({x:i,text:a[c]+(a.length-1-c?\" > \":\"\")},V),clickable:!0,highlightStyle:p});m.set(u,\"seriesIndex\",t),m.set(u,\"name\",a[c]),i+=u.getRect(u.style).width,this.shapeList.push(u)}},__onclick:function(e){var t=e.target;if(t){var i=m.get(t,\"seriesIndex\"),n=m.get(t,\"name\"),a=this._treesMap[i],o=a.getNodeById(n);o&&o.children.length&&this._buildTreemap(o,i)}}},U.inherits(t,i),e(\"../chart\").define(\"treemap\",t),t}),i(\"echarts/layout/TreeMap\",[\"require\"],function(){function e(e){({x:e.x,y:e.y,width:e.width,height:e.height});this.x=e.x,this.y=e.y,this.width=e.width,this.height=e.height}return e.prototype.run=function(e){var t=[];return this._squarify(e,{x:this.x,y:this.y,width:this.width,height:this.height},t),t},e.prototype._squarify=function(e,t,i){var n=\"VERTICAL\",a=t.width,o=t.height;t.width<t.height&&(n=\"HORIZONTAL\",a=t.height,o=t.width);for(var r=this._getShapeListInAbstractRow(e,a,o),s=0;s<r.length;s++){r[s].x=0,r[s].y=0;for(var l=0;s>l;l++)r[s].y+=r[l].height}var h={};if(\"VERTICAL\"==n){for(var m=0;m<r.length;m++)i.push({x:r[m].x+t.x,y:r[m].y+t.y,width:r[m].width,height:r[m].height});h={x:r[0].width+t.x,y:t.y,width:t.width-r[0].width,height:t.height}}else{for(var V=0;V<r.length;V++)i.push({x:r[V].y+t.x,y:r[V].x+t.y,width:r[V].height,height:r[V].width});h={x:t.x,y:t.y+r[0].width,width:t.width,height:t.height-r[0].width}}var U=e.slice(r.length);0!==U.length&&this._squarify(U,h,i)},e.prototype._getShapeListInAbstractRow=function(e,t,i){if(1===e.length)return[{width:t,height:i}];for(var n=1;n<e.length;n++){var a=this._placeFixedNumberRectangles(e.slice(0,n),t,i),o=this._placeFixedNumberRectangles(e.slice(0,n+1),t,i);if(this._isFirstBetter(a,o))return a}},e.prototype._placeFixedNumberRectangles=function(e,t,i){for(var n=e.length,a=[],o=0,r=0;r<e.length;r++)o+=e[r];for(var s=o/i,l=0;n>l;l++){var h=i*e[l]/o;a.push({width:s,height:h})}return a},e.prototype._isFirstBetter=function(e,t){var i=e[0].height/e[0].width;i=i>1?1/i:i;var n=t[0].height/t[0].width;return n=n>1?1/n:n,Math.abs(i-1)<=Math.abs(n-1)?!0:!1},e}),i(\"echarts/data/Tree\",[\"require\",\"zrender/tool/util\"],function(e){function t(e,t){this.id=e,this.depth=0,this.height=0,this.children=[],this.parent=null,this.data=t||null}function i(e){this.root=new t(e)}var n=e(\"zrender/tool/util\");return t.prototype.add=function(e){var t=this.children;e.parent!==this&&(t.push(e),e.parent=this)},t.prototype.remove=function(e){var t=this.children,i=n.indexOf(t,e);i>=0&&(t.splice(i,1),e.parent=null)},t.prototype.traverse=function(e,t){e.call(t,this);for(var i=0;i<this.children.length;i++)this.children[i].traverse(e,t)},t.prototype.updateDepthAndHeight=function(e){var t=0;this.depth=e;for(var i=0;i<this.children.length;i++){var n=this.children[i];n.updateDepthAndHeight(e+1),n.height>t&&(t=n.height)}this.height=t+1},t.prototype.getNodeById=function(e){if(this.id===e)return this;for(var t=0;t<this.children.length;t++){var i=this.children[t].getNodeById(e);if(i)return i}},i.prototype.traverse=function(e,t){this.root.traverse(e,t)},i.prototype.getSubTree=function(e){var t=this.getNodeById(e);if(t){var n=new i(t.id);return n.root=t,n}},i.prototype.getNodeById=function(e){return this.root.getNodeById(e)},i.fromOptionData=function(e,n){function a(e,i){var n=new t(e.name,e);i.add(n);var o=e.children;if(o)for(var r=0;r<o.length;r++)a(o[r],n)}var o=new i(e),r=o.root;r.data={name:e,children:n};for(var s=0;s<n.length;s++)a(n[s],r);return o.root.updateDepthAndHeight(0),o},i.fromGraph=function(e){function n(t){for(var i=e.getNodeById(t.id),a=0;a<i.outEdges.length;a++){var r=i.outEdges[a],s=o[r.node2.id];t.children.push(s),n(s)}}for(var a={},o={},r=0;r<e.nodes.length;r++){var s,l=e.nodes[r];0===l.inDegree()?(a[l.id]=new i(l.id),s=a[l.id].root):s=new t(l.id),s.data=l.data,o[l.id]=s}var h=[];for(var m in a)n(a[m].root),a[m].root.updateDepthAndHeight(0),h.push(a[m]);return h},i}),i(\"echarts/chart/tree\",[\"require\",\"./base\",\"../util/shape/Icon\",\"zrender/shape/Image\",\"zrender/shape/Line\",\"zrender/shape/BezierCurve\",\"../layout/Tree\",\"../data/Tree\",\"../config\",\"../util/ecData\",\"zrender/config\",\"zrender/tool/event\",\"zrender/tool/util\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=.618,a=e(\"../util/shape/Icon\"),o=e(\"zrender/shape/Image\"),r=e(\"zrender/shape/Line\"),s=e(\"zrender/shape/BezierCurve\"),l=e(\"../layout/Tree\"),h=e(\"../data/Tree\"),m=e(\"../config\");m.tree={zlevel:1,z:2,calculable:!1,clickable:!0,rootLocation:{},orient:\"vertical\",symbol:\"circle\",symbolSize:20,nodePadding:30,layerPadding:100,itemStyle:{normal:{label:{show:!0},lineStyle:{width:1,color:\"#777\",type:\"curve\"}},emphasis:{}}};var V=e(\"../util/ecData\"),U=(e(\"zrender/config\"),e(\"zrender/tool/event\"),e(\"zrender/tool/util\"));return t.prototype={type:m.CHART_TYPE_TREE,_buildShape:function(e,t){var i=e.data[0];this.tree=h.fromOptionData(i.name,i.children),this.tree.root.data=i,this._setTreeShape(e),this.tree.traverse(function(i){this._buildItem(i,e,t),i.children.length>0&&this._buildLink(i,e)},this);var n=e.roam===!0||\"move\"===e.roam,a=e.roam===!0||\"scale\"===e.roam;this.zr.modLayer(this.getZlevelBase(),{panable:n,zoomable:a}),(this.query(\"markPoint.effect.show\")||this.query(\"markLine.effect.show\"))&&this.zr.modLayer(m.EFFECT_ZLEVEL,{panable:n,zoomable:a}),this.addShapeList()},_buildItem:function(e,t,i){var n=[e.data,t],r=this.deepQuery(n,\"symbol\"),s=this.deepMerge(n,\"itemStyle.normal\")||{},l=this.deepMerge(n,\"itemStyle.emphasis\")||{},h=s.color||this.zr.getColor(),m=l.color||this.zr.getColor(),U=-e.layout.angle||0;e.id===this.tree.root.id&&(U=0);var d=\"right\";Math.abs(U)>=Math.PI/2&&Math.abs(U)<3*Math.PI/2&&(U+=Math.PI,d=\"left\");var p=[U,e.layout.position[0],e.layout.position[1]],c=new a({zlevel:this.getZlevelBase(),z:this.getZBase()+1,rotation:p,clickable:this.deepQuery(n,\"clickable\"),style:{x:e.layout.position[0]-.5*e.layout.width,y:e.layout.position[1]-.5*e.layout.height,width:e.layout.width,height:e.layout.height,iconType:r,color:h,brushType:\"both\",lineWidth:s.borderWidth,strokeColor:s.borderColor},highlightStyle:{color:m,lineWidth:l.borderWidth,strokeColor:l.borderColor}});c.style.iconType.match(\"image\")&&(c.style.image=c.style.iconType.replace(new RegExp(\"^image:\\\\/\\\\/\"),\"\"),c=new o({rotation:p,style:c.style,highlightStyle:c.highlightStyle,clickable:c.clickable,zlevel:this.getZlevelBase(),z:this.getZBase()})),this.deepQuery(n,\"itemStyle.normal.label.show\")&&(c.style.text=null==e.data.label?e.id:e.data.label,c.style.textPosition=this.deepQuery(n,\"itemStyle.normal.label.position\"),\"radial\"===t.orient&&\"inside\"!==c.style.textPosition&&(c.style.textPosition=d),c.style.textColor=this.deepQuery(n,\"itemStyle.normal.label.textStyle.color\"),c.style.textFont=this.getFont(this.deepQuery(n,\"itemStyle.normal.label.textStyle\")||{})),this.deepQuery(n,\"itemStyle.emphasis.label.show\")&&(c.highlightStyle.textPosition=this.deepQuery(n,\"itemStyle.emphasis.label.position\"),c.highlightStyle.textColor=this.deepQuery(n,\"itemStyle.emphasis.label.textStyle.color\"),c.highlightStyle.textFont=this.getFont(this.deepQuery(n,\"itemStyle.emphasis.label.textStyle\")||{})),V.pack(c,t,i,e.data,0,e.id),this.shapeList.push(c)},_buildLink:function(e,t){var i=t.itemStyle.normal.lineStyle;if(\"broken\"===i.type)return void this._buildBrokenLine(e,i,t);for(var n=0;n<e.children.length;n++){var a=e.layout.position[0],o=e.layout.position[1],r=e.children[n].layout.position[0],s=e.children[n].layout.position[1];switch(i.type){case\"curve\":this._buildBezierCurve(e,e.children[n],i,t);break;case\"broken\":break;default:var l=this._getLine(a,o,r,s,i);this.shapeList.push(l)}}},_buildBrokenLine:function(e,t,i){var a=U.clone(t);a.type=\"solid\";var o=[],r=e.layout.position[0],s=e.layout.position[1],l=i.orient,h=e.children[0].layout.position[1],m=r,V=s+(h-s)*(1-n),d=e.children[0].layout.position[0],p=V,c=e.children[e.children.length-1].layout.position[0],u=V;if(\"horizontal\"===l){var y=e.children[0].layout.position[0];m=r+(y-r)*(1-n),V=s,d=m,p=e.children[0].layout.position[1],c=m,u=e.children[e.children.length-1].layout.position[1]}o.push(this._getLine(r,s,m,V,a)),o.push(this._getLine(d,p,c,u,a));for(var g=0;g<e.children.length;g++)y=e.children[g].layout.position[0],h=e.children[g].layout.position[1],\"horizontal\"===l?p=h:d=y,o.push(this._getLine(d,p,y,h,a));this.shapeList=this.shapeList.concat(o)},_getLine:function(e,t,i,n,a){return e===i&&(e=i=this.subPixelOptimize(e,a.width)),t===n&&(t=n=this.subPixelOptimize(t,a.width)),new r({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:e,yStart:t,xEnd:i,yEnd:n,lineType:a.type,strokeColor:a.color,lineWidth:a.width},a,!0)})},_buildBezierCurve:function(e,t,i,a){var o=n,r=a.orient,l=e.layout.position[0],h=e.layout.position[1],m=t.layout.position[0],V=t.layout.position[1],d=l,p=(V-h)*o+h,c=m,u=(V-h)*(1-o)+h;if(\"horizontal\"===r)d=(m-l)*o+l,p=h,c=(m-l)*(1-o)+l,u=V;else if(\"radial\"===r)if(e.id===this.tree.root.id)d=(m-l)*o+l,p=(V-h)*o+h,c=(m-l)*(1-o)+l,u=(V-h)*(1-o)+h;else{var y=e.layout.originPosition[0],g=e.layout.originPosition[1],b=t.layout.originPosition[0],f=t.layout.originPosition[1],k=this.tree.root.layout.position[0],x=this.tree.root.layout.position[1];d=y,p=(f-g)*o+g,c=b,u=(f-g)*(1-o)+g;var _=(d-this.minX)/this.width*Math.PI*2;d=p*Math.cos(_)+k,p=p*Math.sin(_)+x,_=(c-this.minX)/this.width*Math.PI*2,c=u*Math.cos(_)+k,u=u*Math.sin(_)+x}var L=new s({zlevel:this.getZlevelBase(),hoverable:!1,style:U.merge({xStart:l,yStart:h,cpX1:d,cpY1:p,cpX2:c,cpY2:u,xEnd:m,yEnd:V,strokeColor:i.color,lineWidth:i.width},i,!0)});this.shapeList.push(L)},_setTreeShape:function(e){var t=new l({nodePadding:e.nodePadding,layerPadding:e.layerPadding});this.tree.traverse(function(t){var i=[t.data,e],n=this.deepQuery(i,\"symbolSize\");\"number\"==typeof n&&(n=[n,n]),t.layout={width:n[0],height:n[1]}},this),t.run(this.tree);var i=e.orient,n=e.rootLocation.x,a=e.rootLocation.y,o=this.zr.getWidth(),r=this.zr.getHeight();n=\"center\"===n?.5*o:this.parsePercent(n,o),a=\"center\"===a?.5*r:this.parsePercent(a,r),a=this.parsePercent(a,r),\"horizontal\"===i&&(n=isNaN(n)?10:n,a=isNaN(a)?.5*r:a),\"radial\"===i?(n=isNaN(n)?.5*o:n,a=isNaN(a)?.5*r:a):(n=isNaN(n)?.5*o:n,a=isNaN(a)?10:a);var s=this.tree.root.layout.position[0];if(\"radial\"===i){var h=1/0,m=0,V=0;this.tree.traverse(function(e){m=Math.max(m,e.layout.position[0]),h=Math.min(h,e.layout.position[0]),V=Math.max(V,e.layout.width)}),this.width=m-h+2*V,this.minX=h}this.tree.traverse(function(t){var o,r;if(\"vertical\"===i&&\"inverse\"===e.direction)o=t.layout.position[0]-s+n,r=a-t.layout.position[1];else if(\"vertical\"===i)o=t.layout.position[0]-s+n,r=t.layout.position[1]+a;else if(\"horizontal\"===i&&\"inverse\"===e.direction)r=t.layout.position[0]-s+a,o=n-t.layout.position[1];else if(\"horizontal\"===i)r=t.layout.position[0]-s+a,o=t.layout.position[1]+n;else{o=t.layout.position[0],r=t.layout.position[1],t.layout.originPosition=[o,r];var l=r,m=(o-h)/this.width*Math.PI*2;o=l*Math.cos(m)+n,r=l*Math.sin(m)+a,t.layout.angle=m}t.layout.position[0]=o,t.layout.position[1]=r},this)},refresh:function(e){this.clear(),e&&(this.option=e,this.series=this.option.series);for(var t=this.series,i=this.component.legend,n=0;n<t.length;n++)if(t[n].type===m.CHART_TYPE_TREE){t[n]=this.reformOption(t[n]);var a=t[n].name||\"\";if(this.selectedMap[a]=i?i.isSelected(a):!0,!this.selectedMap[a])continue;this._buildSeries(t[n],n)}},_buildSeries:function(e,t){this._buildShape(e,t)}},U.inherits(t,i),e(\"../chart\").define(\"tree\",t),t}),i(\"echarts/layout/Tree\",[\"require\",\"zrender/tool/vector\"],function(e){function t(e){e=e||{},this.nodePadding=e.nodePadding||30,this.layerPadding=e.layerPadding||100,this._layerOffsets=[],this._layers=[]}var i=e(\"zrender/tool/vector\");return t.prototype.run=function(e){this._layerOffsets.length=0;for(var t=0;t<e.root.height+1;t++)this._layerOffsets[t]=0,this._layers[t]=[];this._updateNodeXPosition(e.root);var i=e.root;this._updateNodeYPosition(i,0,i.layout.height)},t.prototype._updateNodeXPosition=function(e){var t=1/0,n=-(1/0);e.layout.position=e.layout.position||i.create();for(var a=0;a<e.children.length;a++){var o=e.children[a];this._updateNodeXPosition(o);var r=o.layout.position[0];t>r&&(t=r),r>n&&(n=r)}e.layout.position[0]=e.children.length>0?(t+n)/2:0;var s=this._layerOffsets[e.depth]||0;if(s>e.layout.position[0]){var l=s-e.layout.position[0];this._shiftSubtree(e,l);for(var a=e.depth+1;a<e.height+e.depth;a++)this._layerOffsets[a]+=l}this._layerOffsets[e.depth]=e.layout.position[0]+e.layout.width+this.nodePadding,this._layers[e.depth].push(e)},t.prototype._shiftSubtree=function(e,t){e.layout.position[0]+=t;for(var i=0;i<e.children.length;i++)this._shiftSubtree(e.children[i],t)},t.prototype._updateNodeYPosition=function(e,t,i){e.layout.position[1]=t;for(var n=0,a=0;a<e.children.length;a++)n=Math.max(e.children[a].layout.height,n);var o=this.layerPadding;\"function\"==typeof o&&(o=o(e.depth));for(var a=0;a<e.children.length;a++)this._updateNodeYPosition(e.children[a],t+o+i,n)},t}),i(\"echarts/chart/wordCloud\",[\"require\",\"./base\",\"zrender/shape/Text\",\"../layout/WordCloud\",\"../component/grid\",\"../component/dataRange\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"zrender/shape/Text\"),a=e(\"../layout/WordCloud\");e(\"../component/grid\"),e(\"../component/dataRange\");var o=e(\"../config\"),r=e(\"../util/ecData\"),s=e(\"zrender/tool/util\"),l=e(\"zrender/tool/color\");return o.wordCloud={zlevel:0,z:2,clickable:!0,center:[\"50%\",\"50%\"],size:[\"40%\",\"40%\"],textRotation:[0,90],textPadding:0,autoSize:{enable:!0,minSize:12},itemStyle:{normal:{textStyle:{fontSize:function(e){return e.value}}}}},t.prototype={type:o.CHART_TYPE_WORDCLOUD,refresh:function(e){e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=this.component.legend,i=0;i<e.length;i++)if(e[i].type===o.CHART_TYPE_WORDCLOUD){e[i]=this.reformOption(e[i]);var n=e[i].name||\"\";if(this.selectedMap[n]=t?t.isSelected(n):!0,!this.selectedMap[n])continue;this.buildMark(i),this._initSerie(e[i])}},_initSerie:function(e){var t=e.itemStyle.normal.textStyle,i=[this.parsePercent(e.size[0],this.zr.getWidth())||200,this.parsePercent(e.size[1],this.zr.getHeight())||200],n=this.parseCenter(this.zr,e.center),o={size:i,wordletype:{autoSizeCal:e.autoSize},center:n,rotate:e.textRotation,padding:e.textPadding,font:t.fontFamily,fontSize:t.fontSize,fontWeight:t.fontWeight,fontStyle:t.fontStyle,text:function(e){return e.name},data:e.data},r=new a(o),s=this;r.end(function(e){s._buildShapes(e)}),r.start()},_buildShapes:function(e){for(var t=e.length,i=0;t>i;i++)this._buildTextShape(e[i],0,i);this.addShapeList()},_buildTextShape:function(e,t,i){var a=this.series,o=a[t],s=o.name||\"\",h=o.data[i],m=[h,o],V=this.component.legend,U=V?V.getColor(s):this.zr.getColor(t),d=this.deepMerge(m,\"itemStyle.normal\")||{},p=this.deepMerge(m,\"itemStyle.emphasis\")||{},c=this.getItemStyleColor(d.color,t,i,h)||U,u=this.getItemStyleColor(p.color,t,i,h)||(\"string\"==typeof c?l.lift(c,-.2):c),y=new n({zlevel:o.zlevel,z:o.z,hoverable:!0,clickable:this.deepQuery(m,\"clickable\"),style:{x:0,y:0,text:e.text,color:c,textFont:[e.style,e.weight,e.size+\"px\",e.font].join(\" \"),textBaseline:\"alphabetic\",textAlign:\"center\"},highlightStyle:{brushType:p.borderWidth?\"both\":\"fill\",color:u,lineWidth:p.borderWidth||0,strokeColor:p.borderColor},position:[e.x,e.y],rotation:[-e.rotate/180*Math.PI,0,0]});r.pack(y,o,t,h,i,h.name),this.shapeList.push(y)}},s.inherits(t,i),e(\"../chart\").define(\"wordCloud\",t),t}),i(\"echarts/layout/WordCloud\",[\"require\",\"../layout/WordCloudRectZero\",\"zrender/tool/util\"],function(e){function t(e){this._init(e)}var i=e(\"../layout/WordCloudRectZero\"),n=e(\"zrender/tool/util\");return t.prototype={start:function(){function e(){p.totalArea=r,U.autoSizeCal.enable&&p._autoCalTextSize(m,r,a,o,U.autoSizeCal.minSize),V.timer&&clearInterval(V.timer),V.timer=setInterval(t,0),t()}function t(){for(var e,t=+new Date,i=m.length;+new Date-t<V.timeInterval&&++s<i&&V.timer;)e=m[s],e.x=d[0]>>1,e.y=d[1]>>1,p._cloudSprite(e,m,s),e.hasText&&p._place(n,e,h)&&(l.push(e),e.x-=d[0]>>1,e.y-=d[1]>>1);s>=i&&(p.stop(),p._fixTagPosition(l),V.endcallback(l))}var n=null,a=0,o=0,r=0,s=-1,l=[],h=null,m=this.wordsdata,V=this.defaultOption,U=V.wordletype,d=V.size,p=this,c=new i({type:U.type,width:d[0],height:d[1]});return c.calculate(function(t){n=t.initarr,a=t.maxWit,o=t.maxHit,r=t.area,h=t.imgboard,e()},this),this},_fixTagPosition:function(e){for(var t=this.defaultOption.center,i=0,n=e.length;n>i;i++)e[i].x+=t[0],e[i].y+=t[1]},stop:function(){return this.defaultOption.timer&&(clearInterval(this.defaultOption.timer),this.defaultOption.timer=null),this},end:function(e){return e&&(this.defaultOption.endcallback=e),this},_init:function(e){this.defaultOption={},this._initProperty(e),this._initMethod(e),this._initCanvas(),this._initData(e.data)},_initData:function(e){var t=this,i=t.defaultOption;this.wordsdata=e.map(function(e,n){return e.text=i.text.call(t,e,n),e.font=i.font.call(t,e,n),e.style=i.fontStyle.call(t,e,n),e.weight=i.fontWeight.call(t,e,n),e.rotate=i.rotate.call(t,e,n),e.size=~~i.fontSize.call(t,e,n),e.padding=i.padding.call(t,e,n),e}).sort(function(e,t){return t.value-e.value})},_initMethod:function(e){function t(e){return e.name}function i(){return\"sans-serif\"}function n(){return\"normal\"}function a(e){return e.value}function o(){return 0}function r(e){return function(){return e[Math.round(Math.random()*(e.length-1))]}}function s(){return 0}function l(e){var t=e[0]/e[1];return function(e){return[t*(e*=.1)*Math.cos(e),e*Math.sin(e)]}}function h(e){var t=4,i=t*e[0]/e[1],n=0,a=0;return function(e){var o=0>e?-1:1;switch(Math.sqrt(1+4*o*e)-o&3){case 0:n+=i;break;case 1:a+=t;break;case 2:n-=i;break;default:a-=t}return[n,a]}}function m(e){return\"function\"==typeof e?e:function(){return e}}var V=this.defaultOption;V.text=e.text?m(e.text):t,V.font=e.font?m(e.font):i,V.fontSize=e.fontSize?m(e.fontSize):a,V.fontStyle=e.fontStyle?m(e.fontStyle):n,V.fontWeight=e.fontWeight?m(e.fontWeight):n,V.rotate=e.rotate?r(e.rotate):o,V.padding=e.padding?m(e.padding):s,V.center=e.center,V.spiral=l,V.endcallback=function(){},V.rectangularSpiral=h,V.archimedeanSpiral=l},_initProperty:function(e){var t=this.defaultOption;t.size=e.size||[256,256],t.wordletype=e.wordletype,t.words=e.words||[],t.timeInterval=1/0,t.timer=null,t.spirals={archimedean:t.archimedeanSpiral,rectangular:t.rectangularSpiral},n.merge(t,{size:[256,256],wordletype:{type:\"RECT\",areaPresent:.058,autoSizeCal:{enable:!0,minSize:12}}})},_initCanvas:function(){var e,t=Math.PI/180,i=64,n=2048,a=1;\"undefined\"!=typeof document?(e=document.createElement(\"canvas\"),e.width=1,e.height=1,a=Math.sqrt(e.getContext(\"2d\").getImageData(0,0,1,1).data.length>>2),e.width=(i<<5)/a,e.height=n/a):e=new Canvas(i<<5,n);var o=e.getContext(\"2d\");o.fillStyle=o.strokeStyle=\"red\",o.textAlign=\"center\",this.defaultOption.c=o,this.defaultOption.cw=i,this.defaultOption.ch=n,this.defaultOption.ratio=a,this.defaultOption.cloudRadians=t},_cloudSprite:function(e,t,i){if(!e.sprite){var n=this.defaultOption.cw,a=this.defaultOption.ch,o=this.defaultOption.c,r=this.defaultOption.ratio,s=this.defaultOption.cloudRadians;o.clearRect(0,0,(n<<5)/r,a/r);var l=0,h=0,m=0,V=t.length;for(--i;++i<V;){e=t[i],o.save(),o.font=e.style+\" \"+e.weight+\" \"+~~((e.size+1)/r)+\"px \"+e.font;var U=o.measureText(e.text+\"m\").width*r,d=e.size<<1;if(e.rotate){var p=Math.sin(e.rotate*s),c=Math.cos(e.rotate*s),u=U*c,y=U*p,g=d*c,b=d*p;U=Math.max(Math.abs(u+b),Math.abs(u-b))+31>>5<<5,d=~~Math.max(Math.abs(y+g),Math.abs(y-g))}else U=U+31>>5<<5;if(d>m&&(m=d),l+U>=n<<5&&(l=0,h+=m,m=0),h+d>=a)break;o.translate((l+(U>>1))/r,(h+(d>>1))/r),e.rotate&&o.rotate(e.rotate*s),o.fillText(e.text,0,0),e.padding&&(o.lineWidth=2*e.padding,o.strokeText(e.text,0,0)),o.restore(),e.width=U,e.height=d,e.xoff=l,e.yoff=h,e.x1=U>>1,e.y1=d>>1,e.x0=-e.x1,e.y0=-e.y1,e.hasText=!0,l+=U}for(var f=o.getImageData(0,0,(n<<5)/r,a/r).data,k=[];--i>=0;)if(e=t[i],e.hasText){for(var U=e.width,x=U>>5,d=e.y1-e.y0,_=0;d*x>_;_++)k[_]=0;if(l=e.xoff,null==l)return;h=e.yoff;for(var L=0,W=-1,X=0;d>X;X++){for(var _=0;U>_;_++){var v=x*X+(_>>5),w=f[(h+X)*(n<<5)+(l+_)<<2]?1<<31-_%32:0;k[v]|=w,L|=w}L?W=X:(e.y0++,d--,X--,h++)}e.y1=e.y0+W,e.sprite=k.slice(0,(e.y1-e.y0)*x)}}},_place:function(e,t,i){function n(e,t,i){i>>=5;for(var n,a=e.sprite,o=e.width>>5,r=e.x-(o<<4),s=127&r,l=32-s,h=e.y1-e.y0,m=(e.y+e.y0)*i+(r>>5),V=0;h>V;V++){n=0;for(var U=0;o>=U;U++)if((n<<l|(o>U?(n=a[V*o+U])>>>s:0))&t[m+U])return!0;m+=i}return!1}function a(e,t){return t.row[e.y]&&t.cloumn[e.x]&&e.x>=t.row[e.y].start&&e.x<=t.row[e.y].end&&e.y>=t.cloumn[e.x].start&&e.y<=t.cloumn[e.x].end}for(var o,r,s,l=this.defaultOption.size,h=([{x:0,y:0},{x:l[0],y:l[1]}],t.x),m=t.y,V=Math.sqrt(l[0]*l[0]+l[1]*l[1]),U=this.defaultOption.spiral(l),d=Math.random()<.5?1:-1,p=-d;(o=U(p+=d))&&(r=~~o[0],s=~~o[1],!(Math.min(r,s)>V));)if(t.x=h+r,t.y=m+s,!(t.x+t.x0<0||t.y+t.y0<0||t.x+t.x1>l[0]||t.y+t.y1>l[1])&&!n(t,e,l[0])&&a(t,i)){for(var c,u=t.sprite,y=t.width>>5,g=l[0]>>5,b=t.x-(y<<4),f=127&b,k=32-f,x=t.y1-t.y0,_=(t.y+t.y0)*g+(b>>5),L=0;x>L;L++){c=0;for(var W=0;y>=W;W++)e[_+W]|=c<<k|(y>W?(c=u[L*y+W])>>>f:0);_+=g}return delete t.sprite,!0}return!1},_autoCalTextSize:function(e,t,i,n,a){function o(e){c.clearRect(0,0,(d<<5)/u,p/u),c.save(),c.font=e.style+\" \"+e.weight+\" \"+~~((e.size+1)/u)+\"px \"+e.font;var t=c.measureText(e.text+\"m\").width*u,r=e.size<<1;t=t+31>>5<<5,c.restore(),e.aw=t,e.ah=r;var s,l,h;if(e.rotate){var m=Math.sin(e.rotate*y),V=Math.cos(e.rotate*y),g=t*V,b=t*m,f=r*V,k=r*m;l=Math.max(Math.abs(g+k),Math.abs(g-k))+31>>5<<5,h=~~Math.max(Math.abs(b+f),Math.abs(b-f))}return e.size<=U||e.rotate&&t*r<=e.area&&i>=l&&n>=h||t*r<=e.area&&i>=t&&n>=r?void(e.area=t*r):(s=e.rotate&&l>i&&h>n?Math.min(i/l,n/h):t>i||r>n?Math.min(i/t,n/r):Math.sqrt(e.area/(e.aw*e.ah)),e.size=~~(s*e.size),e.size<a?void(e.size=a):o(e))}function r(e,t){for(var i=e.length,n=0;i--;)n+=t(e[i]);return n}for(var s,l,h=r(e,function(e){return e.size}),m=e.length,V=.25,U=a,d=this.defaultOption.cw,p=this.defaultOption.ch,c=this.defaultOption.c,u=this.defaultOption.ratio,y=this.defaultOption.cloudRadians;m--;)s=e[m],l=s.size/h,s.areapre=V?V>l?l:V:l,s.area=t*s.areapre,s.totalarea=t,o(s)}},t}),i(\"echarts/layout/WordCloudRectZero\",[\"require\"],function(){function e(e){this.defaultOption={type:\"RECT\"},this._init(e)}return e.prototype={RECT:\"_calculateRect\",_init:function(e){this._initOption(e),this._initCanvas()},_initOption:function(e){for(k in e)this.defaultOption[k]=e[k]},_initCanvas:function(){var e=document.createElement(\"canvas\");e.width=1,e.height=1;var t=Math.sqrt(e.getContext(\"2d\").getImageData(0,0,1,1).data.length>>2);if(e.width=this.defaultOption.width,e.height=this.defaultOption.height,e.getContext)var i=e.getContext(\"2d\");this.canvas=e,this.ctx=i,this.ratio=t},calculate:function(e,t){var i=this.defaultOption.type,n=this[i];this[n].call(this,e,t)},_calculateReturn:function(e,t,i){t.call(i,e)},_calculateRect:function(e,t){var i={},n=this.defaultOption.width>>5<<5,a=this.defaultOption.height;i.initarr=this._rectZeroArray(n*a),i.area=n*a,i.maxHit=a,i.maxWit=n,i.imgboard=this._rectBoard(n,a),this._calculateReturn(i,e,t)},_rectBoard:function(e,t){for(var i=[],n=0;t>n;n++)i.push({y:n,start:0,end:e});for(var a=[],n=0;e>n;n++)a.push({x:n,start:0,end:t});return{row:i,cloumn:a}},_rectZeroArray:function(e){for(var t=[],i=e,n=-1;++n<i;)t[n]=0;return t}},e}),i(\"echarts/chart/heatmap\",[\"require\",\"./base\",\"../layer/heatmap\",\"../config\",\"../util/ecData\",\"zrender/tool/util\",\"zrender/tool/color\",\"zrender/shape/Image\",\"../chart\"],function(e){function t(e,t,n,a,o){i.call(this,e,t,n,a,o),this.refresh(a)}var i=e(\"./base\"),n=e(\"../layer/heatmap\"),a=e(\"../config\"),o=(e(\"../util/ecData\"),e(\"zrender/tool/util\")),r=(e(\"zrender/tool/color\"),e(\"zrender/shape/Image\"));return a.heatmap={zlevel:0,z:2,clickable:!0},t.prototype={type:a.CHART_TYPE_HEATMAP,refresh:function(e){this.clear(),e&&(this.option=e,this.series=e.series),this._init()},_init:function(){var e=this.series;this.backupShapeList();for(var t=e.length,i=0;t>i;++i)if(e[i].type===a.CHART_TYPE_HEATMAP){e[i]=this.reformOption(e[i]);var o=new n(e[i]),s=o.getCanvas(e[i].data,this.zr.getWidth(),this.zr.getHeight()),l=new r({position:[0,0],scale:[1,1],hoverable:this.option.hoverable,style:{x:0,y:0,image:s,width:s.width,height:s.height}});this.shapeList.push(l)}this.addShapeList()}},o.inherits(t,i),e(\"../chart\").define(\"heatmap\",t),t});var n=t(\"zrender\");n.tool={color:t(\"zrender/tool/color\"),math:t(\"zrender/tool/math\"),util:t(\"zrender/tool/util\"),vector:t(\"zrender/tool/vector\"),area:t(\"zrender/tool/area\"),event:t(\"zrender/tool/event\")},n.animation={Animation:t(\"zrender/animation/Animation\"),Cip:t(\"zrender/animation/Clip\"),easing:t(\"zrender/animation/easing\")};var a=t(\"echarts\");a.config=t(\"echarts/config\"),a.util={mapData:{params:t(\"echarts/util/mapData/params\")}},t(\"echarts/chart/line\"),t(\"echarts/chart/bar\"),t(\"echarts/chart/scatter\"),t(\"echarts/chart/k\"),t(\"echarts/chart/pie\"),t(\"echarts/chart/radar\"),t(\"echarts/chart/chord\"),t(\"echarts/chart/force\"),t(\"echarts/chart/map\"),t(\"echarts/chart/gauge\"),t(\"echarts/chart/funnel\"),t(\"echarts/chart/eventRiver\"),t(\"echarts/chart/venn\"),t(\"echarts/chart/treemap\"),t(\"echarts/chart/tree\"),t(\"echarts/chart/wordCloud\"),t(\"echarts/chart/heatmap\"),e.echarts=a,e.zrender=n}(window);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/fancybox/jquery.fancybox.css",
    "content": "/*! fancyBox v2.1.5 fancyapps.com | fancyapps.com/fancybox/#license */\n.fancybox-wrap,\n.fancybox-skin,\n.fancybox-outer,\n.fancybox-inner,\n.fancybox-image,\n.fancybox-wrap iframe,\n.fancybox-wrap object,\n.fancybox-nav,\n.fancybox-nav span,\n.fancybox-tmp\n{\n\tpadding: 0;\n\tmargin: 0;\n\tborder: 0;\n\toutline: none;\n\tvertical-align: top;\n}\n\n.fancybox-wrap {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\tz-index: 8020;\n}\n\n.fancybox-skin {\n\tposition: relative;\n\tbackground: #f9f9f9;\n\tcolor: #444;\n\ttext-shadow: none;\n\t-webkit-border-radius: 4px;\n\t   -moz-border-radius: 4px;\n\t        border-radius: 4px;\n}\n\n.fancybox-opened {\n\tz-index: 8030;\n}\n\n.fancybox-opened .fancybox-skin {\n\t-webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);\n\t   -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);\n\t        box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5);\n}\n\n.fancybox-outer, .fancybox-inner {\n\tposition: relative;\n}\n\n.fancybox-inner {\n\toverflow: hidden;\n}\n\n.fancybox-type-iframe .fancybox-inner {\n\t-webkit-overflow-scrolling: touch;\n}\n\n.fancybox-error {\n\tcolor: #444;\n\tfont: 14px/20px \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n\tmargin: 0;\n\tpadding: 15px;\n\twhite-space: nowrap;\n}\n\n.fancybox-image, .fancybox-iframe {\n\tdisplay: block;\n\twidth: 100%;\n\theight: 100%;\n}\n\n.fancybox-image {\n\tmax-width: 100%;\n\tmax-height: 100%;\n}\n\n#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {\n\tbackground-image: url('fancybox_sprite.png');\n}\n\n#fancybox-loading {\n\tposition: fixed;\n\ttop: 50%;\n\tleft: 50%;\n\tmargin-top: -22px;\n\tmargin-left: -22px;\n\tbackground-position: 0 -108px;\n\topacity: 0.8;\n\tcursor: pointer;\n\tz-index: 8060;\n}\n\n#fancybox-loading div {\n\twidth: 44px;\n\theight: 44px;\n\tbackground: url('fancybox_loading.gif') center center no-repeat;\n}\n\n.fancybox-close {\n\tposition: absolute;\n\ttop: -18px;\n\tright: -18px;\n\twidth: 36px;\n\theight: 36px;\n\tcursor: pointer;\n\tz-index: 8040;\n}\n\n.fancybox-nav {\n\tposition: absolute;\n\ttop: 0;\n\twidth: 40%;\n\theight: 100%;\n\tcursor: pointer;\n\ttext-decoration: none;\n\tbackground: transparent url('blank.gif'); /* helps IE */\n\t-webkit-tap-highlight-color: rgba(0,0,0,0);\n\tz-index: 8040;\n}\n\n.fancybox-prev {\n\tleft: 0;\n}\n\n.fancybox-next {\n\tright: 0;\n}\n\n.fancybox-nav span {\n\tposition: absolute;\n\ttop: 50%;\n\twidth: 36px;\n\theight: 34px;\n\tmargin-top: -18px;\n\tcursor: pointer;\n\tz-index: 8040;\n\tvisibility: hidden;\n}\n\n.fancybox-prev span {\n\tleft: 10px;\n\tbackground-position: 0 -36px;\n}\n\n.fancybox-next span {\n\tright: 10px;\n\tbackground-position: 0 -72px;\n}\n\n.fancybox-nav:hover span {\n\tvisibility: visible;\n}\n\n.fancybox-tmp {\n\tposition: absolute;\n\ttop: -99999px;\n\tleft: -99999px;\n\tvisibility: hidden;\n\tmax-width: 99999px;\n\tmax-height: 99999px;\n\toverflow: visible !important;\n}\n\n/* Overlay helper */\n\n.fancybox-lock {\n    overflow: hidden !important;\n    width: auto;\n}\n\n.fancybox-lock body {\n    overflow: hidden !important;\n}\n\n.fancybox-lock-test {\n    overflow-y: hidden !important;\n}\n\n.fancybox-overlay {\n\tposition: absolute;\n\ttop: 0;\n\tleft: 0;\n\toverflow: hidden;\n\tdisplay: none;\n\tz-index: 8010;\n\tbackground: url('fancybox_overlay.png');\n}\n\n.fancybox-overlay-fixed {\n\tposition: fixed;\n\tbottom: 0;\n\tright: 0;\n}\n\n.fancybox-lock .fancybox-overlay {\n\toverflow: auto;\n\toverflow-y: scroll;\n}\n\n/* Title helper */\n\n.fancybox-title {\n\tvisibility: hidden;\n\tfont: normal 13px/20px \"Helvetica Neue\",Helvetica,Arial,sans-serif;\n\tposition: relative;\n\ttext-shadow: none;\n\tz-index: 8050;\n}\n\n.fancybox-opened .fancybox-title {\n\tvisibility: visible;\n}\n\n.fancybox-title-float-wrap {\n\tposition: absolute;\n\tbottom: 0;\n\tright: 50%;\n\tmargin-bottom: -35px;\n\tz-index: 8050;\n\ttext-align: center;\n}\n\n.fancybox-title-float-wrap .child {\n\tdisplay: inline-block;\n\tmargin-right: -100%;\n\tpadding: 2px 20px;\n\tbackground: transparent; /* Fallback for web browsers that doesn't support RGBa */\n\tbackground: rgba(0, 0, 0, 0.8);\n\t-webkit-border-radius: 15px;\n\t   -moz-border-radius: 15px;\n\t        border-radius: 15px;\n\ttext-shadow: 0 1px 2px #222;\n\tcolor: #FFF;\n\tfont-weight: bold;\n\tline-height: 24px;\n\twhite-space: nowrap;\n}\n\n.fancybox-title-outside-wrap {\n\tposition: relative;\n\tmargin-top: 10px;\n\tcolor: #fff;\n}\n\n.fancybox-title-inside-wrap {\n\tpadding-top: 10px;\n}\n\n.fancybox-title-over-wrap {\n\tposition: absolute;\n\tbottom: 0;\n\tleft: 0;\n\tcolor: #fff;\n\tpadding: 10px;\n\tbackground: #000;\n\tbackground: rgba(0, 0, 0, .8);\n}\n\n/*Retina graphics!*/\n@media only screen and (-webkit-min-device-pixel-ratio: 1.5),\n\t   only screen and (min--moz-device-pixel-ratio: 1.5),\n\t   only screen and (min-device-pixel-ratio: 1.5){\n\n\t#fancybox-loading, .fancybox-close, .fancybox-prev span, .fancybox-next span {\n\t\tbackground-image: url('fancybox_sprite%402x.png');\n\t\tbackground-size: 44px 152px; /*The size of the normal image, half the size of the hi-res image*/\n\t}\n\n\t#fancybox-loading div {\n\t\tbackground-image: url('fancybox_loading%402x.gif');\n\t\tbackground-size: 24px 24px; /*The size of the normal image, half the size of the hi-res image*/\n\t}\n}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/fancybox/jquery.fancybox.js",
    "content": "/*!\n * fancyBox - jQuery Plugin\n * version: 2.1.5 (Fri, 14 Jun 2013)\n * @requires jQuery v1.6 or later\n *\n * Examples at http://fancyapps.com/fancybox/\n * License: www.fancyapps.com/fancybox/#license\n *\n * Copyright 2012 Janis Skarnelis - janis@fancyapps.com\n *\n */\n\n(function (window, document, $, undefined) {\n\t\"use strict\";\n\n\tvar H = $(\"html\"),\n\t\tW = $(window),\n\t\tD = $(document),\n\t\tF = $.fancybox = function () {\n\t\t\tF.open.apply( this, arguments );\n\t\t},\n\t\tIE =  navigator.userAgent.match(/msie/i),\n\t\tdidUpdate\t= null,\n\t\tisTouch\t\t= document.createTouch !== undefined,\n\n\t\tisQuery\t= function(obj) {\n\t\t\treturn obj && obj.hasOwnProperty && obj instanceof $;\n\t\t},\n\t\tisString = function(str) {\n\t\t\treturn str && $.type(str) === \"string\";\n\t\t},\n\t\tisPercentage = function(str) {\n\t\t\treturn isString(str) && str.indexOf('%') > 0;\n\t\t},\n\t\tisScrollable = function(el) {\n\t\t\treturn (el && !(el.style.overflow && el.style.overflow === 'hidden') && ((el.clientWidth && el.scrollWidth > el.clientWidth) || (el.clientHeight && el.scrollHeight > el.clientHeight)));\n\t\t},\n\t\tgetScalar = function(orig, dim) {\n\t\t\tvar value = parseInt(orig, 10) || 0;\n\n\t\t\tif (dim && isPercentage(orig)) {\n\t\t\t\tvalue = F.getViewport()[ dim ] / 100 * value;\n\t\t\t}\n\n\t\t\treturn Math.ceil(value);\n\t\t},\n\t\tgetValue = function(value, dim) {\n\t\t\treturn getScalar(value, dim) + 'px';\n\t\t};\n\n\t$.extend(F, {\n\t\t// The current version of fancyBox\n\t\tversion: '2.1.5',\n\n\t\tdefaults: {\n\t\t\tpadding : 15,\n\t\t\tmargin  : 20,\n\n\t\t\twidth     : 800,\n\t\t\theight    : 600,\n\t\t\tminWidth  : 100,\n\t\t\tminHeight : 100,\n\t\t\tmaxWidth  : 9999,\n\t\t\tmaxHeight : 9999,\n\t\t\tpixelRatio: 1, // Set to 2 for retina display support\n\n\t\t\tautoSize   : true,\n\t\t\tautoHeight : false,\n\t\t\tautoWidth  : false,\n\n\t\t\tautoResize  : true,\n\t\t\tautoCenter  : !isTouch,\n\t\t\tfitToView   : true,\n\t\t\taspectRatio : false,\n\t\t\ttopRatio    : 0.5,\n\t\t\tleftRatio   : 0.5,\n\n\t\t\tscrolling : 'auto', // 'auto', 'yes' or 'no'\n\t\t\twrapCSS   : '',\n\n\t\t\tarrows     : true,\n\t\t\tcloseBtn   : true,\n\t\t\tcloseClick : false,\n\t\t\tnextClick  : false,\n\t\t\tmouseWheel : true,\n\t\t\tautoPlay   : false,\n\t\t\tplaySpeed  : 3000,\n\t\t\tpreload    : 3,\n\t\t\tmodal      : false,\n\t\t\tloop       : true,\n\n\t\t\tajax  : {\n\t\t\t\tdataType : 'html',\n\t\t\t\theaders  : { 'X-fancyBox': true }\n\t\t\t},\n\t\t\tiframe : {\n\t\t\t\tscrolling : 'auto',\n\t\t\t\tpreload   : true\n\t\t\t},\n\t\t\tswf : {\n\t\t\t\twmode: 'transparent',\n\t\t\t\tallowfullscreen   : 'true',\n\t\t\t\tallowscriptaccess : 'always'\n\t\t\t},\n\n\t\t\tkeys  : {\n\t\t\t\tnext : {\n\t\t\t\t\t13 : 'left', // enter\n\t\t\t\t\t34 : 'up',   // page down\n\t\t\t\t\t39 : 'left', // right arrow\n\t\t\t\t\t40 : 'up'    // down arrow\n\t\t\t\t},\n\t\t\t\tprev : {\n\t\t\t\t\t8  : 'right',  // backspace\n\t\t\t\t\t33 : 'down',   // page up\n\t\t\t\t\t37 : 'right',  // left arrow\n\t\t\t\t\t38 : 'down'    // up arrow\n\t\t\t\t},\n\t\t\t\tclose  : [27], // escape key\n\t\t\t\tplay   : [32], // space - start/stop slideshow\n\t\t\t\ttoggle : [70]  // letter \"f\" - toggle fullscreen\n\t\t\t},\n\n\t\t\tdirection : {\n\t\t\t\tnext : 'left',\n\t\t\t\tprev : 'right'\n\t\t\t},\n\n\t\t\tscrollOutside  : true,\n\n\t\t\t// Override some properties\n\t\t\tindex   : 0,\n\t\t\ttype    : null,\n\t\t\thref    : null,\n\t\t\tcontent : null,\n\t\t\ttitle   : null,\n\n\t\t\t// HTML templates\n\t\t\ttpl: {\n\t\t\t\twrap     : '<div class=\"fancybox-wrap\" tabIndex=\"-1\"><div class=\"fancybox-skin\"><div class=\"fancybox-outer\"><div class=\"fancybox-inner\"></div></div></div></div>',\n\t\t\t\timage    : '<img class=\"fancybox-image\" src=\"{href}\" alt=\"\" />',\n\t\t\t\tiframe   : '<iframe id=\"fancybox-frame{rnd}\" name=\"fancybox-frame{rnd}\" class=\"fancybox-iframe\" frameborder=\"0\" vspace=\"0\" hspace=\"0\" webkitAllowFullScreen mozallowfullscreen allowFullScreen' + (IE ? ' allowtransparency=\"true\"' : '') + '></iframe>',\n\t\t\t\terror    : '<p class=\"fancybox-error\">The requested content cannot be loaded.<br/>Please try again later.</p>',\n\t\t\t\tcloseBtn : '<a title=\"Close\" class=\"fancybox-item fancybox-close\" href=\"javascript:;\"></a>',\n\t\t\t\tnext     : '<a title=\"Next\" class=\"fancybox-nav fancybox-next\" href=\"javascript:;\"><span></span></a>',\n\t\t\t\tprev     : '<a title=\"Previous\" class=\"fancybox-nav fancybox-prev\" href=\"javascript:;\"><span></span></a>'\n\t\t\t},\n\n\t\t\t// Properties for each animation type\n\t\t\t// Opening fancyBox\n\t\t\topenEffect  : 'fade', // 'elastic', 'fade' or 'none'\n\t\t\topenSpeed   : 250,\n\t\t\topenEasing  : 'swing',\n\t\t\topenOpacity : true,\n\t\t\topenMethod  : 'zoomIn',\n\n\t\t\t// Closing fancyBox\n\t\t\tcloseEffect  : 'fade', // 'elastic', 'fade' or 'none'\n\t\t\tcloseSpeed   : 250,\n\t\t\tcloseEasing  : 'swing',\n\t\t\tcloseOpacity : true,\n\t\t\tcloseMethod  : 'zoomOut',\n\n\t\t\t// Changing next gallery item\n\t\t\tnextEffect : 'elastic', // 'elastic', 'fade' or 'none'\n\t\t\tnextSpeed  : 250,\n\t\t\tnextEasing : 'swing',\n\t\t\tnextMethod : 'changeIn',\n\n\t\t\t// Changing previous gallery item\n\t\t\tprevEffect : 'elastic', // 'elastic', 'fade' or 'none'\n\t\t\tprevSpeed  : 250,\n\t\t\tprevEasing : 'swing',\n\t\t\tprevMethod : 'changeOut',\n\n\t\t\t// Enable default helpers\n\t\t\thelpers : {\n\t\t\t\toverlay : true,\n\t\t\t\ttitle   : true\n\t\t\t},\n\n\t\t\t// Callbacks\n\t\t\tonCancel     : $.noop, // If canceling\n\t\t\tbeforeLoad   : $.noop, // Before loading\n\t\t\tafterLoad    : $.noop, // After loading\n\t\t\tbeforeShow   : $.noop, // Before changing in current item\n\t\t\tafterShow    : $.noop, // After opening\n\t\t\tbeforeChange : $.noop, // Before changing gallery item\n\t\t\tbeforeClose  : $.noop, // Before closing\n\t\t\tafterClose   : $.noop  // After closing\n\t\t},\n\n\t\t//Current state\n\t\tgroup    : {}, // Selected group\n\t\topts     : {}, // Group options\n\t\tprevious : null,  // Previous element\n\t\tcoming   : null,  // Element being loaded\n\t\tcurrent  : null,  // Currently loaded element\n\t\tisActive : false, // Is activated\n\t\tisOpen   : false, // Is currently open\n\t\tisOpened : false, // Have been fully opened at least once\n\n\t\twrap  : null,\n\t\tskin  : null,\n\t\touter : null,\n\t\tinner : null,\n\n\t\tplayer : {\n\t\t\ttimer    : null,\n\t\t\tisActive : false\n\t\t},\n\n\t\t// Loaders\n\t\tajaxLoad   : null,\n\t\timgPreload : null,\n\n\t\t// Some collections\n\t\ttransitions : {},\n\t\thelpers     : {},\n\n\t\t/*\n\t\t *\tStatic methods\n\t\t */\n\n\t\topen: function (group, opts) {\n\t\t\tif (!group) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!$.isPlainObject(opts)) {\n\t\t\t\topts = {};\n\t\t\t}\n\n\t\t\t// Close if already active\n\t\t\tif (false === F.close(true)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Normalize group\n\t\t\tif (!$.isArray(group)) {\n\t\t\t\tgroup = isQuery(group) ? $(group).get() : [group];\n\t\t\t}\n\n\t\t\t// Recheck if the type of each element is `object` and set content type (image, ajax, etc)\n\t\t\t$.each(group, function(i, element) {\n\t\t\t\tvar obj = {},\n\t\t\t\t\thref,\n\t\t\t\t\ttitle,\n\t\t\t\t\tcontent,\n\t\t\t\t\ttype,\n\t\t\t\t\trez,\n\t\t\t\t\threfParts,\n\t\t\t\t\tselector;\n\n\t\t\t\tif ($.type(element) === \"object\") {\n\t\t\t\t\t// Check if is DOM element\n\t\t\t\t\tif (element.nodeType) {\n\t\t\t\t\t\telement = $(element);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (isQuery(element)) {\n\t\t\t\t\t\tobj = {\n\t\t\t\t\t\t\thref    : element.data('fancybox-href') || element.attr('href'),\n\t\t\t\t\t\t\ttitle   : element.data('fancybox-title') || element.attr('title'),\n\t\t\t\t\t\t\tisDom   : true,\n\t\t\t\t\t\t\telement : element\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\tif ($.metadata) {\n\t\t\t\t\t\t\t$.extend(true, obj, element.metadata());\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tobj = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\thref  = opts.href  || obj.href || (isString(element) ? element : null);\n\t\t\t\ttitle = opts.title !== undefined ? opts.title : obj.title || '';\n\n\t\t\t\tcontent = opts.content || obj.content;\n\t\t\t\ttype    = content ? 'html' : (opts.type  || obj.type);\n\n\t\t\t\tif (!type && obj.isDom) {\n\t\t\t\t\ttype = element.data('fancybox-type');\n\n\t\t\t\t\tif (!type) {\n\t\t\t\t\t\trez  = element.prop('class').match(/fancybox\\.(\\w+)/);\n\t\t\t\t\t\ttype = rez ? rez[1] : null;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (isString(href)) {\n\t\t\t\t\t// Try to guess the content type\n\t\t\t\t\tif (!type) {\n\t\t\t\t\t\tif (F.isImage(href)) {\n\t\t\t\t\t\t\ttype = 'image';\n\n\t\t\t\t\t\t} else if (F.isSWF(href)) {\n\t\t\t\t\t\t\ttype = 'swf';\n\n\t\t\t\t\t\t} else if (href.charAt(0) === '#') {\n\t\t\t\t\t\t\ttype = 'inline';\n\n\t\t\t\t\t\t} else if (isString(element)) {\n\t\t\t\t\t\t\ttype    = 'html';\n\t\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Split url into two pieces with source url and content selector, e.g,\n\t\t\t\t\t// \"/mypage.html #my_id\" will load \"/mypage.html\" and display element having id \"my_id\"\n\t\t\t\t\tif (type === 'ajax') {\n\t\t\t\t\t\threfParts = href.split(/\\s+/, 2);\n\t\t\t\t\t\thref      = hrefParts.shift();\n\t\t\t\t\t\tselector  = hrefParts.shift();\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (!content) {\n\t\t\t\t\tif (type === 'inline') {\n\t\t\t\t\t\tif (href) {\n\t\t\t\t\t\t\tcontent = $( isString(href) ? href.replace(/.*(?=#[^\\s]+$)/, '') : href ); //strip for ie7\n\n\t\t\t\t\t\t} else if (obj.isDom) {\n\t\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} else if (type === 'html') {\n\t\t\t\t\t\tcontent = href;\n\n\t\t\t\t\t} else if (!type && !href && obj.isDom) {\n\t\t\t\t\t\ttype    = 'inline';\n\t\t\t\t\t\tcontent = element;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t$.extend(obj, {\n\t\t\t\t\thref     : href,\n\t\t\t\t\ttype     : type,\n\t\t\t\t\tcontent  : content,\n\t\t\t\t\ttitle    : title,\n\t\t\t\t\tselector : selector\n\t\t\t\t});\n\n\t\t\t\tgroup[ i ] = obj;\n\t\t\t});\n\n\t\t\t// Extend the defaults\n\t\t\tF.opts = $.extend(true, {}, F.defaults, opts);\n\n\t\t\t// All options are merged recursive except keys\n\t\t\tif (opts.keys !== undefined) {\n\t\t\t\tF.opts.keys = opts.keys ? $.extend({}, F.defaults.keys, opts.keys) : false;\n\t\t\t}\n\n\t\t\tF.group = group;\n\n\t\t\treturn F._start(F.opts.index);\n\t\t},\n\n\t\t// Cancel image loading or abort ajax request\n\t\tcancel: function () {\n\t\t\tvar coming = F.coming;\n\n\t\t\tif (!coming || false === F.trigger('onCancel')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.hideLoading();\n\n\t\t\tif (F.ajaxLoad) {\n\t\t\t\tF.ajaxLoad.abort();\n\t\t\t}\n\n\t\t\tF.ajaxLoad = null;\n\n\t\t\tif (F.imgPreload) {\n\t\t\t\tF.imgPreload.onload = F.imgPreload.onerror = null;\n\t\t\t}\n\n\t\t\tif (coming.wrap) {\n\t\t\t\tcoming.wrap.stop(true, true).trigger('onReset').remove();\n\t\t\t}\n\n\t\t\tF.coming = null;\n\n\t\t\t// If the first item has been canceled, then clear everything\n\t\t\tif (!F.current) {\n\t\t\t\tF._afterZoomOut( coming );\n\t\t\t}\n\t\t},\n\n\t\t// Start closing animation if is open; remove immediately if opening/closing\n\t\tclose: function (event) {\n\t\t\tF.cancel();\n\n\t\t\tif (false === F.trigger('beforeClose')) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.unbindEvents();\n\n\t\t\tif (!F.isActive) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (!F.isOpen || event === true) {\n\t\t\t\t$('.fancybox-wrap').stop(true).trigger('onReset').remove();\n\n\t\t\t\tF._afterZoomOut();\n\n\t\t\t} else {\n\t\t\t\tF.isOpen = F.isOpened = false;\n\t\t\t\tF.isClosing = true;\n\n\t\t\t\t$('.fancybox-item, .fancybox-nav').remove();\n\n\t\t\t\tF.wrap.stop(true, true).removeClass('fancybox-opened');\n\n\t\t\t\tF.transitions[ F.current.closeMethod ]();\n\t\t\t}\n\t\t},\n\n\t\t// Manage slideshow:\n\t\t//   $.fancybox.play(); - toggle slideshow\n\t\t//   $.fancybox.play( true ); - start\n\t\t//   $.fancybox.play( false ); - stop\n\t\tplay: function ( action ) {\n\t\t\tvar clear = function () {\n\t\t\t\t\tclearTimeout(F.player.timer);\n\t\t\t\t},\n\t\t\t\tset = function () {\n\t\t\t\t\tclear();\n\n\t\t\t\t\tif (F.current && F.player.isActive) {\n\t\t\t\t\t\tF.player.timer = setTimeout(F.next, F.current.playSpeed);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tstop = function () {\n\t\t\t\t\tclear();\n\n\t\t\t\t\tD.unbind('.player');\n\n\t\t\t\t\tF.player.isActive = false;\n\n\t\t\t\t\tF.trigger('onPlayEnd');\n\t\t\t\t},\n\t\t\t\tstart = function () {\n\t\t\t\t\tif (F.current && (F.current.loop || F.current.index < F.group.length - 1)) {\n\t\t\t\t\t\tF.player.isActive = true;\n\n\t\t\t\t\t\tD.bind({\n\t\t\t\t\t\t\t'onCancel.player beforeClose.player' : stop,\n\t\t\t\t\t\t\t'onUpdate.player'   : set,\n\t\t\t\t\t\t\t'beforeLoad.player' : clear\n\t\t\t\t\t\t});\n\n\t\t\t\t\t\tset();\n\n\t\t\t\t\t\tF.trigger('onPlayStart');\n\t\t\t\t\t}\n\t\t\t\t};\n\n\t\t\tif (action === true || (!F.player.isActive && action !== false)) {\n\t\t\t\tstart();\n\t\t\t} else {\n\t\t\t\tstop();\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to next gallery item\n\t\tnext: function ( direction ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (current) {\n\t\t\t\tif (!isString(direction)) {\n\t\t\t\t\tdirection = current.direction.next;\n\t\t\t\t}\n\n\t\t\t\tF.jumpto(current.index + 1, direction, 'next');\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to previous gallery item\n\t\tprev: function ( direction ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (current) {\n\t\t\t\tif (!isString(direction)) {\n\t\t\t\t\tdirection = current.direction.prev;\n\t\t\t\t}\n\n\t\t\t\tF.jumpto(current.index - 1, direction, 'prev');\n\t\t\t}\n\t\t},\n\n\t\t// Navigate to gallery item by index\n\t\tjumpto: function ( index, direction, router ) {\n\t\t\tvar current = F.current;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tindex = getScalar(index);\n\n\t\t\tF.direction = direction || current.direction[ (index >= current.index ? 'next' : 'prev') ];\n\t\t\tF.router    = router || 'jumpto';\n\n\t\t\tif (current.loop) {\n\t\t\t\tif (index < 0) {\n\t\t\t\t\tindex = current.group.length + (index % current.group.length);\n\t\t\t\t}\n\n\t\t\t\tindex = index % current.group.length;\n\t\t\t}\n\n\t\t\tif (current.group[ index ] !== undefined) {\n\t\t\t\tF.cancel();\n\n\t\t\t\tF._start(index);\n\t\t\t}\n\t\t},\n\n\t\t// Center inside viewport and toggle position type to fixed or absolute if needed\n\t\treposition: function (e, onlyAbsolute) {\n\t\t\tvar current = F.current,\n\t\t\t\twrap    = current ? current.wrap : null,\n\t\t\t\tpos;\n\n\t\t\tif (wrap) {\n\t\t\t\tpos = F._getPosition(onlyAbsolute);\n\n\t\t\t\tif (e && e.type === 'scroll') {\n\t\t\t\t\tdelete pos.position;\n\n\t\t\t\t\twrap.stop(true, true).animate(pos, 200);\n\n\t\t\t\t} else {\n\t\t\t\t\twrap.css(pos);\n\n\t\t\t\t\tcurrent.pos = $.extend({}, current.dim, pos);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\tupdate: function (e) {\n\t\t\tvar type = (e && e.type),\n\t\t\t\tanyway = !type || type === 'orientationchange';\n\n\t\t\tif (anyway) {\n\t\t\t\tclearTimeout(didUpdate);\n\n\t\t\t\tdidUpdate = null;\n\t\t\t}\n\n\t\t\tif (!F.isOpen || didUpdate) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tdidUpdate = setTimeout(function() {\n\t\t\t\tvar current = F.current;\n\n\t\t\t\tif (!current || F.isClosing) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tF.wrap.removeClass('fancybox-tmp');\n\n\t\t\t\tif (anyway || type === 'load' || (type === 'resize' && current.autoResize)) {\n\t\t\t\t\tF._setDimension();\n\t\t\t\t}\n\n\t\t\t\tif (!(type === 'scroll' && current.canShrink)) {\n\t\t\t\t\tF.reposition(e);\n\t\t\t\t}\n\n\t\t\t\tF.trigger('onUpdate');\n\n\t\t\t\tdidUpdate = null;\n\n\t\t\t}, (anyway && !isTouch ? 0 : 300));\n\t\t},\n\n\t\t// Shrink content to fit inside viewport or restore if resized\n\t\ttoggle: function ( action ) {\n\t\t\tif (F.isOpen) {\n\t\t\t\tF.current.fitToView = $.type(action) === \"boolean\" ? action : !F.current.fitToView;\n\n\t\t\t\t// Help browser to restore document dimensions\n\t\t\t\tif (isTouch) {\n\t\t\t\t\tF.wrap.removeAttr('style').addClass('fancybox-tmp');\n\n\t\t\t\t\tF.trigger('onUpdate');\n\t\t\t\t}\n\n\t\t\t\tF.update();\n\t\t\t}\n\t\t},\n\n\t\thideLoading: function () {\n\t\t\tD.unbind('.loading');\n\n\t\t\t$('#fancybox-loading').remove();\n\t\t},\n\n\t\tshowLoading: function () {\n\t\t\tvar el, viewport;\n\n\t\t\tF.hideLoading();\n\n\t\t\tel = $('<div id=\"fancybox-loading\"><div></div></div>').click(F.cancel).appendTo('body');\n\n\t\t\t// If user will press the escape-button, the request will be canceled\n\t\t\tD.bind('keydown.loading', function(e) {\n\t\t\t\tif ((e.which || e.keyCode) === 27) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tF.cancel();\n\t\t\t\t}\n\t\t\t});\n\n\t\t\tif (!F.defaults.fixed) {\n\t\t\t\tviewport = F.getViewport();\n\n\t\t\t\tel.css({\n\t\t\t\t\tposition : 'absolute',\n\t\t\t\t\ttop  : (viewport.h * 0.5) + viewport.y,\n\t\t\t\t\tleft : (viewport.w * 0.5) + viewport.x\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tgetViewport: function () {\n\t\t\tvar locked = (F.current && F.current.locked) || false,\n\t\t\t\trez    = {\n\t\t\t\t\tx: W.scrollLeft(),\n\t\t\t\t\ty: W.scrollTop()\n\t\t\t\t};\n\n\t\t\tif (locked) {\n\t\t\t\trez.w = locked[0].clientWidth;\n\t\t\t\trez.h = locked[0].clientHeight;\n\n\t\t\t} else {\n\t\t\t\t// See http://bugs.jquery.com/ticket/6724\n\t\t\t\trez.w = isTouch && window.innerWidth  ? window.innerWidth  : W.width();\n\t\t\t\trez.h = isTouch && window.innerHeight ? window.innerHeight : W.height();\n\t\t\t}\n\n\t\t\treturn rez;\n\t\t},\n\n\t\t// Unbind the keyboard / clicking actions\n\t\tunbindEvents: function () {\n\t\t\tif (F.wrap && isQuery(F.wrap)) {\n\t\t\t\tF.wrap.unbind('.fb');\n\t\t\t}\n\n\t\t\tD.unbind('.fb');\n\t\t\tW.unbind('.fb');\n\t\t},\n\n\t\tbindEvents: function () {\n\t\t\tvar current = F.current,\n\t\t\t\tkeys;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Changing document height on iOS devices triggers a 'resize' event,\n\t\t\t// that can change document height... repeating infinitely\n\t\t\tW.bind('orientationchange.fb' + (isTouch ? '' : ' resize.fb') + (current.autoCenter && !current.locked ? ' scroll.fb' : ''), F.update);\n\n\t\t\tkeys = current.keys;\n\n\t\t\tif (keys) {\n\t\t\t\tD.bind('keydown.fb', function (e) {\n\t\t\t\t\tvar code   = e.which || e.keyCode,\n\t\t\t\t\t\ttarget = e.target || e.srcElement;\n\n\t\t\t\t\t// Skip esc key if loading, because showLoading will cancel preloading\n\t\t\t\t\tif (code === 27 && F.coming) {\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Ignore key combinations and key events within form elements\n\t\t\t\t\tif (!e.ctrlKey && !e.altKey && !e.shiftKey && !e.metaKey && !(target && (target.type || $(target).is('[contenteditable]')))) {\n\t\t\t\t\t\t$.each(keys, function(i, val) {\n\t\t\t\t\t\t\tif (current.group.length > 1 && val[ code ] !== undefined) {\n\t\t\t\t\t\t\t\tF[ i ]( val[ code ] );\n\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tif ($.inArray(code, val) > -1) {\n\t\t\t\t\t\t\t\tF[ i ] ();\n\n\t\t\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t\t\t\treturn false;\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\n\t\t\tif ($.fn.mousewheel && current.mouseWheel) {\n\t\t\t\tF.wrap.bind('mousewheel.fb', function (e, delta, deltaX, deltaY) {\n\t\t\t\t\tvar target = e.target || null,\n\t\t\t\t\t\tparent = $(target),\n\t\t\t\t\t\tcanScroll = false;\n\n\t\t\t\t\twhile (parent.length) {\n\t\t\t\t\t\tif (canScroll || parent.is('.fancybox-skin') || parent.is('.fancybox-wrap')) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcanScroll = isScrollable( parent[0] );\n\t\t\t\t\t\tparent    = $(parent).parent();\n\t\t\t\t\t}\n\n\t\t\t\t\tif (delta !== 0 && !canScroll) {\n\t\t\t\t\t\tif (F.group.length > 1 && !current.canShrink) {\n\t\t\t\t\t\t\tif (deltaY > 0 || deltaX > 0) {\n\t\t\t\t\t\t\t\tF.prev( deltaY > 0 ? 'down' : 'left' );\n\n\t\t\t\t\t\t\t} else if (deltaY < 0 || deltaX < 0) {\n\t\t\t\t\t\t\t\tF.next( deltaY < 0 ? 'up' : 'right' );\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\te.preventDefault();\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\ttrigger: function (event, o) {\n\t\t\tvar ret, obj = o || F.coming || F.current;\n\n\t\t\tif (!obj) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ($.isFunction( obj[event] )) {\n\t\t\t\tret = obj[event].apply(obj, Array.prototype.slice.call(arguments, 1));\n\t\t\t}\n\n\t\t\tif (ret === false) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (obj.helpers) {\n\t\t\t\t$.each(obj.helpers, function (helper, opts) {\n\t\t\t\t\tif (opts && F.helpers[helper] && $.isFunction(F.helpers[helper][event])) {\n\t\t\t\t\t\tF.helpers[helper][event]($.extend(true, {}, F.helpers[helper].defaults, opts), obj);\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tD.trigger(event);\n\t\t},\n\n\t\tisImage: function (str) {\n\t\t\treturn isString(str) && str.match(/(^data:image\\/.*,)|(\\.(jp(e|g|eg)|gif|png|bmp|webp|svg)((\\?|#).*)?$)/i);\n\t\t},\n\n\t\tisSWF: function (str) {\n\t\t\treturn isString(str) && str.match(/\\.(swf)((\\?|#).*)?$/i);\n\t\t},\n\n\t\t_start: function (index) {\n\t\t\tvar coming = {},\n\t\t\t\tobj,\n\t\t\t\thref,\n\t\t\t\ttype,\n\t\t\t\tmargin,\n\t\t\t\tpadding;\n\n\t\t\tindex = getScalar( index );\n\t\t\tobj   = F.group[ index ] || null;\n\n\t\t\tif (!obj) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tcoming = $.extend(true, {}, F.opts, obj);\n\n\t\t\t// Convert margin and padding properties to array - top, right, bottom, left\n\t\t\tmargin  = coming.margin;\n\t\t\tpadding = coming.padding;\n\n\t\t\tif ($.type(margin) === 'number') {\n\t\t\t\tcoming.margin = [margin, margin, margin, margin];\n\t\t\t}\n\n\t\t\tif ($.type(padding) === 'number') {\n\t\t\t\tcoming.padding = [padding, padding, padding, padding];\n\t\t\t}\n\n\t\t\t// 'modal' propery is just a shortcut\n\t\t\tif (coming.modal) {\n\t\t\t\t$.extend(true, coming, {\n\t\t\t\t\tcloseBtn   : false,\n\t\t\t\t\tcloseClick : false,\n\t\t\t\t\tnextClick  : false,\n\t\t\t\t\tarrows     : false,\n\t\t\t\t\tmouseWheel : false,\n\t\t\t\t\tkeys       : null,\n\t\t\t\t\thelpers: {\n\t\t\t\t\t\toverlay : {\n\t\t\t\t\t\t\tcloseClick : false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// 'autoSize' property is a shortcut, too\n\t\t\tif (coming.autoSize) {\n\t\t\t\tcoming.autoWidth = coming.autoHeight = true;\n\t\t\t}\n\n\t\t\tif (coming.width === 'auto') {\n\t\t\t\tcoming.autoWidth = true;\n\t\t\t}\n\n\t\t\tif (coming.height === 'auto') {\n\t\t\t\tcoming.autoHeight = true;\n\t\t\t}\n\n\t\t\t/*\n\t\t\t * Add reference to the group, so it`s possible to access from callbacks, example:\n\t\t\t * afterLoad : function() {\n\t\t\t *     this.title = 'Image ' + (this.index + 1) + ' of ' + this.group.length + (this.title ? ' - ' + this.title : '');\n\t\t\t * }\n\t\t\t */\n\n\t\t\tcoming.group  = F.group;\n\t\t\tcoming.index  = index;\n\n\t\t\t// Give a chance for callback or helpers to update coming item (type, title, etc)\n\t\t\tF.coming = coming;\n\n\t\t\tif (false === F.trigger('beforeLoad')) {\n\t\t\t\tF.coming = null;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttype = coming.type;\n\t\t\thref = coming.href;\n\n\t\t\tif (!type) {\n\t\t\t\tF.coming = null;\n\n\t\t\t\t//If we can not determine content type then drop silently or display next/prev item if looping through gallery\n\t\t\t\tif (F.current && F.router && F.router !== 'jumpto') {\n\t\t\t\t\tF.current.index = index;\n\n\t\t\t\t\treturn F[ F.router ]( F.direction );\n\t\t\t\t}\n\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tF.isActive = true;\n\n\t\t\tif (type === 'image' || type === 'swf') {\n\t\t\t\tcoming.autoHeight = coming.autoWidth = false;\n\t\t\t\tcoming.scrolling  = 'visible';\n\t\t\t}\n\n\t\t\tif (type === 'image') {\n\t\t\t\tcoming.aspectRatio = true;\n\t\t\t}\n\n\t\t\tif (type === 'iframe' && isTouch) {\n\t\t\t\tcoming.scrolling = 'scroll';\n\t\t\t}\n\n\t\t\t// Build the neccessary markup\n\t\t\tcoming.wrap = $(coming.tpl.wrap).addClass('fancybox-' + (isTouch ? 'mobile' : 'desktop') + ' fancybox-type-' + type + ' fancybox-tmp ' + coming.wrapCSS).appendTo( coming.parent || 'body' );\n\n\t\t\t$.extend(coming, {\n\t\t\t\tskin  : $('.fancybox-skin',  coming.wrap),\n\t\t\t\touter : $('.fancybox-outer', coming.wrap),\n\t\t\t\tinner : $('.fancybox-inner', coming.wrap)\n\t\t\t});\n\n\t\t\t$.each([\"Top\", \"Right\", \"Bottom\", \"Left\"], function(i, v) {\n\t\t\t\tcoming.skin.css('padding' + v, getValue(coming.padding[ i ]));\n\t\t\t});\n\n\t\t\tF.trigger('onReady');\n\n\t\t\t// Check before try to load; 'inline' and 'html' types need content, others - href\n\t\t\tif (type === 'inline' || type === 'html') {\n\t\t\t\tif (!coming.content || !coming.content.length) {\n\t\t\t\t\treturn F._error( 'content' );\n\t\t\t\t}\n\n\t\t\t} else if (!href) {\n\t\t\t\treturn F._error( 'href' );\n\t\t\t}\n\n\t\t\tif (type === 'image') {\n\t\t\t\tF._loadImage();\n\n\t\t\t} else if (type === 'ajax') {\n\t\t\t\tF._loadAjax();\n\n\t\t\t} else if (type === 'iframe') {\n\t\t\t\tF._loadIframe();\n\n\t\t\t} else {\n\t\t\t\tF._afterLoad();\n\t\t\t}\n\t\t},\n\n\t\t_error: function ( type ) {\n\t\t\t$.extend(F.coming, {\n\t\t\t\ttype       : 'html',\n\t\t\t\tautoWidth  : true,\n\t\t\t\tautoHeight : true,\n\t\t\t\tminWidth   : 0,\n\t\t\t\tminHeight  : 0,\n\t\t\t\tscrolling  : 'no',\n\t\t\t\thasError   : type,\n\t\t\t\tcontent    : F.coming.tpl.error\n\t\t\t});\n\n\t\t\tF._afterLoad();\n\t\t},\n\n\t\t_loadImage: function () {\n\t\t\t// Reset preload image so it is later possible to check \"complete\" property\n\t\t\tvar img = F.imgPreload = new Image();\n\n\t\t\timg.onload = function () {\n\t\t\t\tthis.onload = this.onerror = null;\n\n\t\t\t\tF.coming.width  = this.width / F.opts.pixelRatio;\n\t\t\t\tF.coming.height = this.height / F.opts.pixelRatio;\n\n\t\t\t\tF._afterLoad();\n\t\t\t};\n\n\t\t\timg.onerror = function () {\n\t\t\t\tthis.onload = this.onerror = null;\n\n\t\t\t\tF._error( 'image' );\n\t\t\t};\n\n\t\t\timg.src = F.coming.href;\n\n\t\t\tif (img.complete !== true) {\n\t\t\t\tF.showLoading();\n\t\t\t}\n\t\t},\n\n\t\t_loadAjax: function () {\n\t\t\tvar coming = F.coming;\n\n\t\t\tF.showLoading();\n\n\t\t\tF.ajaxLoad = $.ajax($.extend({}, coming.ajax, {\n\t\t\t\turl: coming.href,\n\t\t\t\terror: function (jqXHR, textStatus) {\n\t\t\t\t\tif (F.coming && textStatus !== 'abort') {\n\t\t\t\t\t\tF._error( 'ajax', jqXHR );\n\n\t\t\t\t\t} else {\n\t\t\t\t\t\tF.hideLoading();\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tsuccess: function (data, textStatus) {\n\t\t\t\t\tif (textStatus === 'success') {\n\t\t\t\t\t\tcoming.content = data;\n\n\t\t\t\t\t\tF._afterLoad();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}));\n\t\t},\n\n\t\t_loadIframe: function() {\n\t\t\tvar coming = F.coming,\n\t\t\t\tiframe = $(coming.tpl.iframe.replace(/\\{rnd\\}/g, new Date().getTime()))\n\t\t\t\t\t.attr('scrolling', isTouch ? 'auto' : coming.iframe.scrolling)\n\t\t\t\t\t.attr('src', coming.href);\n\n\t\t\t// This helps IE\n\t\t\t$(coming.wrap).bind('onReset', function () {\n\t\t\t\ttry {\n\t\t\t\t\t$(this).find('iframe').hide().attr('src', '//about:blank').end().empty();\n\t\t\t\t} catch (e) {}\n\t\t\t});\n\n\t\t\tif (coming.iframe.preload) {\n\t\t\t\tF.showLoading();\n\n\t\t\t\tiframe.one('load', function() {\n\t\t\t\t\t$(this).data('ready', 1);\n\n\t\t\t\t\t// iOS will lose scrolling if we resize\n\t\t\t\t\tif (!isTouch) {\n\t\t\t\t\t\t$(this).bind('load.fb', F.update);\n\t\t\t\t\t}\n\n\t\t\t\t\t// Without this trick:\n\t\t\t\t\t//   - iframe won't scroll on iOS devices\n\t\t\t\t\t//   - IE7 sometimes displays empty iframe\n\t\t\t\t\t$(this).parents('.fancybox-wrap').width('100%').removeClass('fancybox-tmp').show();\n\n\t\t\t\t\tF._afterLoad();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tcoming.content = iframe.appendTo( coming.inner );\n\n\t\t\tif (!coming.iframe.preload) {\n\t\t\t\tF._afterLoad();\n\t\t\t}\n\t\t},\n\n\t\t_preloadImages: function() {\n\t\t\tvar group   = F.group,\n\t\t\t\tcurrent = F.current,\n\t\t\t\tlen     = group.length,\n\t\t\t\tcnt     = current.preload ? Math.min(current.preload, len - 1) : 0,\n\t\t\t\titem,\n\t\t\t\ti;\n\n\t\t\tfor (i = 1; i <= cnt; i += 1) {\n\t\t\t\titem = group[ (current.index + i ) % len ];\n\n\t\t\t\tif (item.type === 'image' && item.href) {\n\t\t\t\t\tnew Image().src = item.href;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t_afterLoad: function () {\n\t\t\tvar coming   = F.coming,\n\t\t\t\tprevious = F.current,\n\t\t\t\tplaceholder = 'fancybox-placeholder',\n\t\t\t\tcurrent,\n\t\t\t\tcontent,\n\t\t\t\ttype,\n\t\t\t\tscrolling,\n\t\t\t\thref,\n\t\t\t\tembed;\n\n\t\t\tF.hideLoading();\n\n\t\t\tif (!coming || F.isActive === false) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (false === F.trigger('afterLoad', coming, previous)) {\n\t\t\t\tcoming.wrap.stop(true).trigger('onReset').remove();\n\n\t\t\t\tF.coming = null;\n\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (previous) {\n\t\t\t\tF.trigger('beforeChange', previous);\n\n\t\t\t\tprevious.wrap.stop(true).removeClass('fancybox-opened')\n\t\t\t\t\t.find('.fancybox-item, .fancybox-nav')\n\t\t\t\t\t.remove();\n\t\t\t}\n\n\t\t\tF.unbindEvents();\n\n\t\t\tcurrent   = coming;\n\t\t\tcontent   = coming.content;\n\t\t\ttype      = coming.type;\n\t\t\tscrolling = coming.scrolling;\n\n\t\t\t$.extend(F, {\n\t\t\t\twrap  : current.wrap,\n\t\t\t\tskin  : current.skin,\n\t\t\t\touter : current.outer,\n\t\t\t\tinner : current.inner,\n\t\t\t\tcurrent  : current,\n\t\t\t\tprevious : previous\n\t\t\t});\n\n\t\t\thref = current.href;\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'inline':\n\t\t\t\tcase 'ajax':\n\t\t\t\tcase 'html':\n\t\t\t\t\tif (current.selector) {\n\t\t\t\t\t\tcontent = $('<div>').html(content).find(current.selector);\n\n\t\t\t\t\t} else if (isQuery(content)) {\n\t\t\t\t\t\tif (!content.data(placeholder)) {\n\t\t\t\t\t\t\tcontent.data(placeholder, $('<div class=\"' + placeholder + '\"></div>').insertAfter( content ).hide() );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tcontent = content.show().detach();\n\n\t\t\t\t\t\tcurrent.wrap.bind('onReset', function () {\n\t\t\t\t\t\t\tif ($(this).find(content).length) {\n\t\t\t\t\t\t\t\tcontent.hide().replaceAll( content.data(placeholder) ).data(placeholder, false);\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\tbreak;\n\n\t\t\t\tcase 'image':\n\t\t\t\t\tcontent = current.tpl.image.replace('{href}', href);\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'swf':\n\t\t\t\t\tcontent = '<object id=\"fancybox-swf\" classid=\"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000\" width=\"100%\" height=\"100%\"><param name=\"movie\" value=\"' + href + '\"></param>';\n\t\t\t\t\tembed   = '';\n\n\t\t\t\t\t$.each(current.swf, function(name, val) {\n\t\t\t\t\t\tcontent += '<param name=\"' + name + '\" value=\"' + val + '\"></param>';\n\t\t\t\t\t\tembed   += ' ' + name + '=\"' + val + '\"';\n\t\t\t\t\t});\n\n\t\t\t\t\tcontent += '<embed src=\"' + href + '\" type=\"application/x-shockwave-flash\" width=\"100%\" height=\"100%\"' + embed + '></embed></object>';\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif (!(isQuery(content) && content.parent().is(current.inner))) {\n\t\t\t\tcurrent.inner.append( content );\n\t\t\t}\n\n\t\t\t// Give a chance for helpers or callbacks to update elements\n\t\t\tF.trigger('beforeShow');\n\n\t\t\t// Set scrolling before calculating dimensions\n\t\t\tcurrent.inner.css('overflow', scrolling === 'yes' ? 'scroll' : (scrolling === 'no' ? 'hidden' : scrolling));\n\n\t\t\t// Set initial dimensions and start position\n\t\t\tF._setDimension();\n\n\t\t\tF.reposition();\n\n\t\t\tF.isOpen = false;\n\t\t\tF.coming = null;\n\n\t\t\tF.bindEvents();\n\n\t\t\tif (!F.isOpened) {\n\t\t\t\t$('.fancybox-wrap').not( current.wrap ).stop(true).trigger('onReset').remove();\n\n\t\t\t} else if (previous.prevMethod) {\n\t\t\t\tF.transitions[ previous.prevMethod ]();\n\t\t\t}\n\n\t\t\tF.transitions[ F.isOpened ? current.nextMethod : current.openMethod ]();\n\n\t\t\tF._preloadImages();\n\t\t},\n\n\t\t_setDimension: function () {\n\t\t\tvar viewport   = F.getViewport(),\n\t\t\t\tsteps      = 0,\n\t\t\t\tcanShrink  = false,\n\t\t\t\tcanExpand  = false,\n\t\t\t\twrap       = F.wrap,\n\t\t\t\tskin       = F.skin,\n\t\t\t\tinner      = F.inner,\n\t\t\t\tcurrent    = F.current,\n\t\t\t\twidth      = current.width,\n\t\t\t\theight     = current.height,\n\t\t\t\tminWidth   = current.minWidth,\n\t\t\t\tminHeight  = current.minHeight,\n\t\t\t\tmaxWidth   = current.maxWidth,\n\t\t\t\tmaxHeight  = current.maxHeight,\n\t\t\t\tscrolling  = current.scrolling,\n\t\t\t\tscrollOut  = current.scrollOutside ? current.scrollbarWidth : 0,\n\t\t\t\tmargin     = current.margin,\n\t\t\t\twMargin    = getScalar(margin[1] + margin[3]),\n\t\t\t\thMargin    = getScalar(margin[0] + margin[2]),\n\t\t\t\twPadding,\n\t\t\t\thPadding,\n\t\t\t\twSpace,\n\t\t\t\thSpace,\n\t\t\t\torigWidth,\n\t\t\t\torigHeight,\n\t\t\t\torigMaxWidth,\n\t\t\t\torigMaxHeight,\n\t\t\t\tratio,\n\t\t\t\twidth_,\n\t\t\t\theight_,\n\t\t\t\tmaxWidth_,\n\t\t\t\tmaxHeight_,\n\t\t\t\tiframe,\n\t\t\t\tbody;\n\n\t\t\t// Reset dimensions so we could re-check actual size\n\t\t\twrap.add(skin).add(inner).width('auto').height('auto').removeClass('fancybox-tmp');\n\n\t\t\twPadding = getScalar(skin.outerWidth(true)  - skin.width());\n\t\t\thPadding = getScalar(skin.outerHeight(true) - skin.height());\n\n\t\t\t// Any space between content and viewport (margin, padding, border, title)\n\t\t\twSpace = wMargin + wPadding;\n\t\t\thSpace = hMargin + hPadding;\n\n\t\t\torigWidth  = isPercentage(width)  ? (viewport.w - wSpace) * getScalar(width)  / 100 : width;\n\t\t\torigHeight = isPercentage(height) ? (viewport.h - hSpace) * getScalar(height) / 100 : height;\n\n\t\t\tif (current.type === 'iframe') {\n\t\t\t\tiframe = current.content;\n\n\t\t\t\tif (current.autoHeight && iframe.data('ready') === 1) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (iframe[0].contentWindow.document.location) {\n\t\t\t\t\t\t\tinner.width( origWidth ).height(9999);\n\n\t\t\t\t\t\t\tbody = iframe.contents().find('body');\n\n\t\t\t\t\t\t\tif (scrollOut) {\n\t\t\t\t\t\t\t\tbody.css('overflow-x', 'hidden');\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\torigHeight = body.outerHeight(true);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t} catch (e) {}\n\t\t\t\t}\n\n\t\t\t} else if (current.autoWidth || current.autoHeight) {\n\t\t\t\tinner.addClass( 'fancybox-tmp' );\n\n\t\t\t\t// Set width or height in case we need to calculate only one dimension\n\t\t\t\tif (!current.autoWidth) {\n\t\t\t\t\tinner.width( origWidth );\n\t\t\t\t}\n\n\t\t\t\tif (!current.autoHeight) {\n\t\t\t\t\tinner.height( origHeight );\n\t\t\t\t}\n\n\t\t\t\tif (current.autoWidth) {\n\t\t\t\t\torigWidth = inner.width();\n\t\t\t\t}\n\n\t\t\t\tif (current.autoHeight) {\n\t\t\t\t\torigHeight = inner.height();\n\t\t\t\t}\n\n\t\t\t\tinner.removeClass( 'fancybox-tmp' );\n\t\t\t}\n\n\t\t\twidth  = getScalar( origWidth );\n\t\t\theight = getScalar( origHeight );\n\n\t\t\tratio  = origWidth / origHeight;\n\n\t\t\t// Calculations for the content\n\t\t\tminWidth  = getScalar(isPercentage(minWidth) ? getScalar(minWidth, 'w') - wSpace : minWidth);\n\t\t\tmaxWidth  = getScalar(isPercentage(maxWidth) ? getScalar(maxWidth, 'w') - wSpace : maxWidth);\n\n\t\t\tminHeight = getScalar(isPercentage(minHeight) ? getScalar(minHeight, 'h') - hSpace : minHeight);\n\t\t\tmaxHeight = getScalar(isPercentage(maxHeight) ? getScalar(maxHeight, 'h') - hSpace : maxHeight);\n\n\t\t\t// These will be used to determine if wrap can fit in the viewport\n\t\t\torigMaxWidth  = maxWidth;\n\t\t\torigMaxHeight = maxHeight;\n\n\t\t\tif (current.fitToView) {\n\t\t\t\tmaxWidth  = Math.min(viewport.w - wSpace, maxWidth);\n\t\t\t\tmaxHeight = Math.min(viewport.h - hSpace, maxHeight);\n\t\t\t}\n\n\t\t\tmaxWidth_  = viewport.w - wMargin;\n\t\t\tmaxHeight_ = viewport.h - hMargin;\n\n\t\t\tif (current.aspectRatio) {\n\t\t\t\tif (width > maxWidth) {\n\t\t\t\t\twidth  = maxWidth;\n\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t}\n\n\t\t\t\tif (height > maxHeight) {\n\t\t\t\t\theight = maxHeight;\n\t\t\t\t\twidth  = getScalar(height * ratio);\n\t\t\t\t}\n\n\t\t\t\tif (width < minWidth) {\n\t\t\t\t\twidth  = minWidth;\n\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t}\n\n\t\t\t\tif (height < minHeight) {\n\t\t\t\t\theight = minHeight;\n\t\t\t\t\twidth  = getScalar(height * ratio);\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\twidth = Math.max(minWidth, Math.min(width, maxWidth));\n\n\t\t\t\tif (current.autoHeight && current.type !== 'iframe') {\n\t\t\t\t\tinner.width( width );\n\n\t\t\t\t\theight = inner.height();\n\t\t\t\t}\n\n\t\t\t\theight = Math.max(minHeight, Math.min(height, maxHeight));\n\t\t\t}\n\n\t\t\t// Try to fit inside viewport (including the title)\n\t\t\tif (current.fitToView) {\n\t\t\t\tinner.width( width ).height( height );\n\n\t\t\t\twrap.width( width + wPadding );\n\n\t\t\t\t// Real wrap dimensions\n\t\t\t\twidth_  = wrap.width();\n\t\t\t\theight_ = wrap.height();\n\n\t\t\t\tif (current.aspectRatio) {\n\t\t\t\t\twhile ((width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight) {\n\t\t\t\t\t\tif (steps++ > 19) {\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\theight = Math.max(minHeight, Math.min(maxHeight, height - 10));\n\t\t\t\t\t\twidth  = getScalar(height * ratio);\n\n\t\t\t\t\t\tif (width < minWidth) {\n\t\t\t\t\t\t\twidth  = minWidth;\n\t\t\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif (width > maxWidth) {\n\t\t\t\t\t\t\twidth  = maxWidth;\n\t\t\t\t\t\t\theight = getScalar(width / ratio);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tinner.width( width ).height( height );\n\n\t\t\t\t\t\twrap.width( width + wPadding );\n\n\t\t\t\t\t\twidth_  = wrap.width();\n\t\t\t\t\t\theight_ = wrap.height();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\twidth  = Math.max(minWidth,  Math.min(width,  width  - (width_  - maxWidth_)));\n\t\t\t\t\theight = Math.max(minHeight, Math.min(height, height - (height_ - maxHeight_)));\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (scrollOut && scrolling === 'auto' && height < origHeight && (width + wPadding + scrollOut) < maxWidth_) {\n\t\t\t\twidth += scrollOut;\n\t\t\t}\n\n\t\t\tinner.width( width ).height( height );\n\n\t\t\twrap.width( width + wPadding );\n\n\t\t\twidth_  = wrap.width();\n\t\t\theight_ = wrap.height();\n\n\t\t\tcanShrink = (width_ > maxWidth_ || height_ > maxHeight_) && width > minWidth && height > minHeight;\n\t\t\tcanExpand = current.aspectRatio ? (width < origMaxWidth && height < origMaxHeight && width < origWidth && height < origHeight) : ((width < origMaxWidth || height < origMaxHeight) && (width < origWidth || height < origHeight));\n\n\t\t\t$.extend(current, {\n\t\t\t\tdim : {\n\t\t\t\t\twidth\t: getValue( width_ ),\n\t\t\t\t\theight\t: getValue( height_ )\n\t\t\t\t},\n\t\t\t\torigWidth  : origWidth,\n\t\t\t\torigHeight : origHeight,\n\t\t\t\tcanShrink  : canShrink,\n\t\t\t\tcanExpand  : canExpand,\n\t\t\t\twPadding   : wPadding,\n\t\t\t\thPadding   : hPadding,\n\t\t\t\twrapSpace  : height_ - skin.outerHeight(true),\n\t\t\t\tskinSpace  : skin.height() - height\n\t\t\t});\n\n\t\t\tif (!iframe && current.autoHeight && height > minHeight && height < maxHeight && !canExpand) {\n\t\t\t\tinner.height('auto');\n\t\t\t}\n\t\t},\n\n\t\t_getPosition: function (onlyAbsolute) {\n\t\t\tvar current  = F.current,\n\t\t\t\tviewport = F.getViewport(),\n\t\t\t\tmargin   = current.margin,\n\t\t\t\twidth    = F.wrap.width()  + margin[1] + margin[3],\n\t\t\t\theight   = F.wrap.height() + margin[0] + margin[2],\n\t\t\t\trez      = {\n\t\t\t\t\tposition: 'absolute',\n\t\t\t\t\ttop  : margin[0],\n\t\t\t\t\tleft : margin[3]\n\t\t\t\t};\n\n\t\t\tif (current.autoCenter && current.fixed && !onlyAbsolute && height <= viewport.h && width <= viewport.w) {\n\t\t\t\trez.position = 'fixed';\n\n\t\t\t} else if (!current.locked) {\n\t\t\t\trez.top  += viewport.y;\n\t\t\t\trez.left += viewport.x;\n\t\t\t}\n\n\t\t\trez.top  = getValue(Math.max(rez.top,  rez.top  + ((viewport.h - height) * current.topRatio)));\n\t\t\trez.left = getValue(Math.max(rez.left, rez.left + ((viewport.w - width)  * current.leftRatio)));\n\n\t\t\treturn rez;\n\t\t},\n\n\t\t_afterZoomIn: function () {\n\t\t\tvar current = F.current;\n\n\t\t\tif (!current) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tF.isOpen = F.isOpened = true;\n\n\t\t\tF.wrap.css('overflow', 'visible').addClass('fancybox-opened');\n\n\t\t\tF.update();\n\n\t\t\t// Assign a click event\n\t\t\tif ( current.closeClick || (current.nextClick && F.group.length > 1) ) {\n\t\t\t\tF.inner.css('cursor', 'pointer').bind('click.fb', function(e) {\n\t\t\t\t\tif (!$(e.target).is('a') && !$(e.target).parent().is('a')) {\n\t\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\t\tF[ current.closeClick ? 'close' : 'next' ]();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Create a close button\n\t\t\tif (current.closeBtn) {\n\t\t\t\t$(current.tpl.closeBtn).appendTo(F.skin).bind('click.fb', function(e) {\n\t\t\t\t\te.preventDefault();\n\n\t\t\t\t\tF.close();\n\t\t\t\t});\n\t\t\t}\n\n\t\t\t// Create navigation arrows\n\t\t\tif (current.arrows && F.group.length > 1) {\n\t\t\t\tif (current.loop || current.index > 0) {\n\t\t\t\t\t$(current.tpl.prev).appendTo(F.outer).bind('click.fb', F.prev);\n\t\t\t\t}\n\n\t\t\t\tif (current.loop || current.index < F.group.length - 1) {\n\t\t\t\t\t$(current.tpl.next).appendTo(F.outer).bind('click.fb', F.next);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tF.trigger('afterShow');\n\n\t\t\t// Stop the slideshow if this is the last item\n\t\t\tif (!current.loop && current.index === current.group.length - 1) {\n\t\t\t\tF.play( false );\n\n\t\t\t} else if (F.opts.autoPlay && !F.player.isActive) {\n\t\t\t\tF.opts.autoPlay = false;\n\n\t\t\t\tF.play();\n\t\t\t}\n\t\t},\n\n\t\t_afterZoomOut: function ( obj ) {\n\t\t\tobj = obj || F.current;\n\n\t\t\t$('.fancybox-wrap').trigger('onReset').remove();\n\n\t\t\t$.extend(F, {\n\t\t\t\tgroup  : {},\n\t\t\t\topts   : {},\n\t\t\t\trouter : false,\n\t\t\t\tcurrent   : null,\n\t\t\t\tisActive  : false,\n\t\t\t\tisOpened  : false,\n\t\t\t\tisOpen    : false,\n\t\t\t\tisClosing : false,\n\t\t\t\twrap   : null,\n\t\t\t\tskin   : null,\n\t\t\t\touter  : null,\n\t\t\t\tinner  : null\n\t\t\t});\n\n\t\t\tF.trigger('afterClose', obj);\n\t\t}\n\t});\n\n\t/*\n\t *\tDefault transitions\n\t */\n\n\tF.transitions = {\n\t\tgetOrigPosition: function () {\n\t\t\tvar current  = F.current,\n\t\t\t\telement  = current.element,\n\t\t\t\torig     = current.orig,\n\t\t\t\tpos      = {},\n\t\t\t\twidth    = 50,\n\t\t\t\theight   = 50,\n\t\t\t\thPadding = current.hPadding,\n\t\t\t\twPadding = current.wPadding,\n\t\t\t\tviewport = F.getViewport();\n\n\t\t\tif (!orig && current.isDom && element.is(':visible')) {\n\t\t\t\torig = element.find('img:first');\n\n\t\t\t\tif (!orig.length) {\n\t\t\t\t\torig = element;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (isQuery(orig)) {\n\t\t\t\tpos = orig.offset();\n\n\t\t\t\tif (orig.is('img')) {\n\t\t\t\t\twidth  = orig.outerWidth();\n\t\t\t\t\theight = orig.outerHeight();\n\t\t\t\t}\n\n\t\t\t} else {\n\t\t\t\tpos.top  = viewport.y + (viewport.h - height) * current.topRatio;\n\t\t\t\tpos.left = viewport.x + (viewport.w - width)  * current.leftRatio;\n\t\t\t}\n\n\t\t\tif (F.wrap.css('position') === 'fixed' || current.locked) {\n\t\t\t\tpos.top  -= viewport.y;\n\t\t\t\tpos.left -= viewport.x;\n\t\t\t}\n\n\t\t\tpos = {\n\t\t\t\ttop     : getValue(pos.top  - hPadding * current.topRatio),\n\t\t\t\tleft    : getValue(pos.left - wPadding * current.leftRatio),\n\t\t\t\twidth   : getValue(width  + wPadding),\n\t\t\t\theight  : getValue(height + hPadding)\n\t\t\t};\n\n\t\t\treturn pos;\n\t\t},\n\n\t\tstep: function (now, fx) {\n\t\t\tvar ratio,\n\t\t\t\tpadding,\n\t\t\t\tvalue,\n\t\t\t\tprop       = fx.prop,\n\t\t\t\tcurrent    = F.current,\n\t\t\t\twrapSpace  = current.wrapSpace,\n\t\t\t\tskinSpace  = current.skinSpace;\n\n\t\t\tif (prop === 'width' || prop === 'height') {\n\t\t\t\tratio = fx.end === fx.start ? 1 : (now - fx.start) / (fx.end - fx.start);\n\n\t\t\t\tif (F.isClosing) {\n\t\t\t\t\tratio = 1 - ratio;\n\t\t\t\t}\n\n\t\t\t\tpadding = prop === 'width' ? current.wPadding : current.hPadding;\n\t\t\t\tvalue   = now - padding;\n\n\t\t\t\tF.skin[ prop ](  getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) ) );\n\t\t\t\tF.inner[ prop ]( getScalar( prop === 'width' ?  value : value - (wrapSpace * ratio) - (skinSpace * ratio) ) );\n\t\t\t}\n\t\t},\n\n\t\tzoomIn: function () {\n\t\t\tvar current  = F.current,\n\t\t\t\tstartPos = current.pos,\n\t\t\t\teffect   = current.openEffect,\n\t\t\t\telastic  = effect === 'elastic',\n\t\t\t\tendPos   = $.extend({opacity : 1}, startPos);\n\n\t\t\t// Remove \"position\" property that breaks older IE\n\t\t\tdelete endPos.position;\n\n\t\t\tif (elastic) {\n\t\t\t\tstartPos = this.getOrigPosition();\n\n\t\t\t\tif (current.openOpacity) {\n\t\t\t\t\tstartPos.opacity = 0.1;\n\t\t\t\t}\n\n\t\t\t} else if (effect === 'fade') {\n\t\t\t\tstartPos.opacity = 0.1;\n\t\t\t}\n\n\t\t\tF.wrap.css(startPos).animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : current.openSpeed,\n\t\t\t\teasing   : current.openEasing,\n\t\t\t\tstep     : elastic ? this.step : null,\n\t\t\t\tcomplete : F._afterZoomIn\n\t\t\t});\n\t\t},\n\n\t\tzoomOut: function () {\n\t\t\tvar current  = F.current,\n\t\t\t\teffect   = current.closeEffect,\n\t\t\t\telastic  = effect === 'elastic',\n\t\t\t\tendPos   = {opacity : 0.1};\n\n\t\t\tif (elastic) {\n\t\t\t\tendPos = this.getOrigPosition();\n\n\t\t\t\tif (current.closeOpacity) {\n\t\t\t\t\tendPos.opacity = 0.1;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tF.wrap.animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : current.closeSpeed,\n\t\t\t\teasing   : current.closeEasing,\n\t\t\t\tstep     : elastic ? this.step : null,\n\t\t\t\tcomplete : F._afterZoomOut\n\t\t\t});\n\t\t},\n\n\t\tchangeIn: function () {\n\t\t\tvar current   = F.current,\n\t\t\t\teffect    = current.nextEffect,\n\t\t\t\tstartPos  = current.pos,\n\t\t\t\tendPos    = { opacity : 1 },\n\t\t\t\tdirection = F.direction,\n\t\t\t\tdistance  = 200,\n\t\t\t\tfield;\n\n\t\t\tstartPos.opacity = 0.1;\n\n\t\t\tif (effect === 'elastic') {\n\t\t\t\tfield = direction === 'down' || direction === 'up' ? 'top' : 'left';\n\n\t\t\t\tif (direction === 'down' || direction === 'right') {\n\t\t\t\t\tstartPos[ field ] = getValue(getScalar(startPos[ field ]) - distance);\n\t\t\t\t\tendPos[ field ]   = '+=' + distance + 'px';\n\n\t\t\t\t} else {\n\t\t\t\t\tstartPos[ field ] = getValue(getScalar(startPos[ field ]) + distance);\n\t\t\t\t\tendPos[ field ]   = '-=' + distance + 'px';\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Workaround for http://bugs.jquery.com/ticket/12273\n\t\t\tif (effect === 'none') {\n\t\t\t\tF._afterZoomIn();\n\n\t\t\t} else {\n\t\t\t\tF.wrap.css(startPos).animate(endPos, {\n\t\t\t\t\tduration : current.nextSpeed,\n\t\t\t\t\teasing   : current.nextEasing,\n\t\t\t\t\tcomplete : F._afterZoomIn\n\t\t\t\t});\n\t\t\t}\n\t\t},\n\n\t\tchangeOut: function () {\n\t\t\tvar previous  = F.previous,\n\t\t\t\teffect    = previous.prevEffect,\n\t\t\t\tendPos    = { opacity : 0.1 },\n\t\t\t\tdirection = F.direction,\n\t\t\t\tdistance  = 200;\n\n\t\t\tif (effect === 'elastic') {\n\t\t\t\tendPos[ direction === 'down' || direction === 'up' ? 'top' : 'left' ] = ( direction === 'up' || direction === 'left' ? '-' : '+' ) + '=' + distance + 'px';\n\t\t\t}\n\n\t\t\tprevious.wrap.animate(endPos, {\n\t\t\t\tduration : effect === 'none' ? 0 : previous.prevSpeed,\n\t\t\t\teasing   : previous.prevEasing,\n\t\t\t\tcomplete : function () {\n\t\t\t\t\t$(this).trigger('onReset').remove();\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t};\n\n\t/*\n\t *\tOverlay helper\n\t */\n\n\tF.helpers.overlay = {\n\t\tdefaults : {\n\t\t\tcloseClick : true,      // if true, fancyBox will be closed when user clicks on the overlay\n\t\t\tspeedOut   : 200,       // duration of fadeOut animation\n\t\t\tshowEarly  : true,      // indicates if should be opened immediately or wait until the content is ready\n\t\t\tcss        : {},        // custom CSS properties\n\t\t\tlocked     : !isTouch,  // if true, the content will be locked into overlay\n\t\t\tfixed      : true       // if false, the overlay CSS position property will not be set to \"fixed\"\n\t\t},\n\n\t\toverlay : null,      // current handle\n\t\tfixed   : false,     // indicates if the overlay has position \"fixed\"\n\t\tel      : $('html'), // element that contains \"the lock\"\n\n\t\t// Public methods\n\t\tcreate : function(opts) {\n\t\t\topts = $.extend({}, this.defaults, opts);\n\n\t\t\tif (this.overlay) {\n\t\t\t\tthis.close();\n\t\t\t}\n\n\t\t\tthis.overlay = $('<div class=\"fancybox-overlay\"></div>').appendTo( F.coming ? F.coming.parent : opts.parent );\n\t\t\tthis.fixed   = false;\n\n\t\t\tif (opts.fixed && F.defaults.fixed) {\n\t\t\t\tthis.overlay.addClass('fancybox-overlay-fixed');\n\n\t\t\t\tthis.fixed = true;\n\t\t\t}\n\t\t},\n\n\t\topen : function(opts) {\n\t\t\tvar that = this;\n\n\t\t\topts = $.extend({}, this.defaults, opts);\n\n\t\t\tif (this.overlay) {\n\t\t\t\tthis.overlay.unbind('.overlay').width('auto').height('auto');\n\n\t\t\t} else {\n\t\t\t\tthis.create(opts);\n\t\t\t}\n\n\t\t\tif (!this.fixed) {\n\t\t\t\tW.bind('resize.overlay', $.proxy( this.update, this) );\n\n\t\t\t\tthis.update();\n\t\t\t}\n\n\t\t\tif (opts.closeClick) {\n\t\t\t\tthis.overlay.bind('click.overlay', function(e) {\n\t\t\t\t\tif ($(e.target).hasClass('fancybox-overlay')) {\n\t\t\t\t\t\tif (F.isActive) {\n\t\t\t\t\t\t\tF.close();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthat.close();\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\treturn false;\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tthis.overlay.css( opts.css ).show();\n\t\t},\n\n\t\tclose : function() {\n\t\t\tvar scrollV, scrollH;\n\n\t\t\tW.unbind('resize.overlay');\n\n\t\t\tif (this.el.hasClass('fancybox-lock')) {\n\t\t\t\t$('.fancybox-margin').removeClass('fancybox-margin');\n\n\t\t\t\tscrollV = W.scrollTop();\n\t\t\t\tscrollH = W.scrollLeft();\n\n\t\t\t\tthis.el.removeClass('fancybox-lock');\n\n\t\t\t\tW.scrollTop( scrollV ).scrollLeft( scrollH );\n\t\t\t}\n\n\t\t\t$('.fancybox-overlay').remove().hide();\n\n\t\t\t$.extend(this, {\n\t\t\t\toverlay : null,\n\t\t\t\tfixed   : false\n\t\t\t});\n\t\t},\n\n\t\t// Private, callbacks\n\n\t\tupdate : function () {\n\t\t\tvar width = '100%', offsetWidth;\n\n\t\t\t// Reset width/height so it will not mess\n\t\t\tthis.overlay.width(width).height('100%');\n\n\t\t\t// jQuery does not return reliable result for IE\n\t\t\tif (IE) {\n\t\t\t\toffsetWidth = Math.max(document.documentElement.offsetWidth, document.body.offsetWidth);\n\n\t\t\t\tif (D.width() > offsetWidth) {\n\t\t\t\t\twidth = D.width();\n\t\t\t\t}\n\n\t\t\t} else if (D.width() > W.width()) {\n\t\t\t\twidth = D.width();\n\t\t\t}\n\n\t\t\tthis.overlay.width(width).height(D.height());\n\t\t},\n\n\t\t// This is where we can manipulate DOM, because later it would cause iframes to reload\n\t\tonReady : function (opts, obj) {\n\t\t\tvar overlay = this.overlay;\n\n\t\t\t$('.fancybox-overlay').stop(true, true);\n\n\t\t\tif (!overlay) {\n\t\t\t\tthis.create(opts);\n\t\t\t}\n\n\t\t\tif (opts.locked && this.fixed && obj.fixed) {\n\t\t\t\tif (!overlay) {\n\t\t\t\t\tthis.margin = D.height() > W.height() ? $('html').css('margin-right').replace(\"px\", \"\") : false;\n\t\t\t\t}\n\n\t\t\t\tobj.locked = this.overlay.append( obj.wrap );\n\t\t\t\tobj.fixed  = false;\n\t\t\t}\n\n\t\t\tif (opts.showEarly === true) {\n\t\t\t\tthis.beforeShow.apply(this, arguments);\n\t\t\t}\n\t\t},\n\n\t\tbeforeShow : function(opts, obj) {\n\t\t\tvar scrollV, scrollH;\n\n\t\t\tif (obj.locked) {\n\t\t\t\tif (this.margin !== false) {\n\t\t\t\t\t$('*').filter(function(){\n\t\t\t\t\t\treturn ($(this).css('position') === 'fixed' && !$(this).hasClass(\"fancybox-overlay\") && !$(this).hasClass(\"fancybox-wrap\") );\n\t\t\t\t\t}).addClass('fancybox-margin');\n\n\t\t\t\t\tthis.el.addClass('fancybox-margin');\n\t\t\t\t}\n\n\t\t\t\tscrollV = W.scrollTop();\n\t\t\t\tscrollH = W.scrollLeft();\n\n\t\t\t\tthis.el.addClass('fancybox-lock');\n\n\t\t\t\tW.scrollTop( scrollV ).scrollLeft( scrollH );\n\t\t\t}\n\n\t\t\tthis.open(opts);\n\t\t},\n\n\t\tonUpdate : function() {\n\t\t\tif (!this.fixed) {\n\t\t\t\tthis.update();\n\t\t\t}\n\t\t},\n\n\t\tafterClose: function (opts) {\n\t\t\t// Remove overlay if exists and fancyBox is not opening\n\t\t\t// (e.g., it is not being open using afterClose callback)\n\t\t\t//if (this.overlay && !F.isActive) {\n\t\t\tif (this.overlay && !F.coming) {\n\t\t\t\tthis.overlay.fadeOut(opts.speedOut, $.proxy( this.close, this ));\n\t\t\t}\n\t\t}\n\t};\n\n\t/*\n\t *\tTitle helper\n\t */\n\n\tF.helpers.title = {\n\t\tdefaults : {\n\t\t\ttype     : 'float', // 'float', 'inside', 'outside' or 'over',\n\t\t\tposition : 'bottom' // 'top' or 'bottom'\n\t\t},\n\n\t\tbeforeShow: function (opts) {\n\t\t\tvar current = F.current,\n\t\t\t\ttext    = current.title,\n\t\t\t\ttype    = opts.type,\n\t\t\t\ttitle,\n\t\t\t\ttarget;\n\n\t\t\tif ($.isFunction(text)) {\n\t\t\t\ttext = text.call(current.element, current);\n\t\t\t}\n\n\t\t\tif (!isString(text) || $.trim(text) === '') {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\ttitle = $('<div class=\"fancybox-title fancybox-title-' + type + '-wrap\">' + text + '</div>');\n\n\t\t\tswitch (type) {\n\t\t\t\tcase 'inside':\n\t\t\t\t\ttarget = F.skin;\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'outside':\n\t\t\t\t\ttarget = F.wrap;\n\t\t\t\tbreak;\n\n\t\t\t\tcase 'over':\n\t\t\t\t\ttarget = F.inner;\n\t\t\t\tbreak;\n\n\t\t\t\tdefault: // 'float'\n\t\t\t\t\ttarget = F.skin;\n\n\t\t\t\t\ttitle.appendTo('body');\n\n\t\t\t\t\tif (IE) {\n\t\t\t\t\t\ttitle.width( title.width() );\n\t\t\t\t\t}\n\n\t\t\t\t\ttitle.wrapInner('<span class=\"child\"></span>');\n\n\t\t\t\t\t//Increase bottom margin so this title will also fit into viewport\n\t\t\t\t\tF.current.margin[2] += Math.abs( getScalar(title.css('margin-bottom')) );\n\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\ttitle[ (opts.position === 'top' ? 'prependTo'  : 'appendTo') ](target);\n\t\t}\n\t};\n\n\t// jQuery plugin initialization\n\t$.fn.fancybox = function (options) {\n\t\tvar index,\n\t\t\tthat     = $(this),\n\t\t\tselector = this.selector || '',\n\t\t\trun      = function(e) {\n\t\t\t\tvar what = $(this).blur(), idx = index, relType, relVal;\n\n\t\t\t\tif (!(e.ctrlKey || e.altKey || e.shiftKey || e.metaKey) && !what.is('.fancybox-wrap')) {\n\t\t\t\t\trelType = options.groupAttr || 'data-fancybox-group';\n\t\t\t\t\trelVal  = what.attr(relType);\n\n\t\t\t\t\tif (!relVal) {\n\t\t\t\t\t\trelType = 'rel';\n\t\t\t\t\t\trelVal  = what.get(0)[ relType ];\n\t\t\t\t\t}\n\n\t\t\t\t\tif (relVal && relVal !== '' && relVal !== 'nofollow') {\n\t\t\t\t\t\twhat = selector.length ? $(selector) : that;\n\t\t\t\t\t\twhat = what.filter('[' + relType + '=\"' + relVal + '\"]');\n\t\t\t\t\t\tidx  = what.index(this);\n\t\t\t\t\t}\n\n\t\t\t\t\toptions.index = idx;\n\n\t\t\t\t\t// Stop an event from bubbling if everything is fine\n\t\t\t\t\tif (F.open(what, options) !== false) {\n\t\t\t\t\t\te.preventDefault();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t};\n\n\t\toptions = options || {};\n\t\tindex   = options.index || 0;\n\n\t\tif (!selector || options.live === false) {\n\t\t\tthat.unbind('click.fb-start').bind('click.fb-start', run);\n\n\t\t} else {\n\t\t\tD.undelegate(selector, 'click.fb-start').delegate(selector + \":not('.fancybox-item, .fancybox-nav')\", 'click.fb-start', run);\n\t\t}\n\n\t\tthis.filter('[data-fancybox-start=1]').trigger('click');\n\n\t\treturn this;\n\t};\n\n\t// Tests that need a body at doc ready\n\tD.ready(function() {\n\t\tvar w1, w2;\n\n\t\tif ( $.scrollbarWidth === undefined ) {\n\t\t\t// http://benalman.com/projects/jquery-misc-plugins/#scrollbarwidth\n\t\t\t$.scrollbarWidth = function() {\n\t\t\t\tvar parent = $('<div style=\"width:50px;height:50px;overflow:auto\"><div/></div>').appendTo('body'),\n\t\t\t\t\tchild  = parent.children(),\n\t\t\t\t\twidth  = child.innerWidth() - child.height( 99 ).innerWidth();\n\n\t\t\t\tparent.remove();\n\n\t\t\t\treturn width;\n\t\t\t};\n\t\t}\n\n\t\tif ( $.support.fixedPosition === undefined ) {\n\t\t\t$.support.fixedPosition = (function() {\n\t\t\t\tvar elem  = $('<div style=\"position:fixed;top:20px;\"></div>').appendTo('body'),\n\t\t\t\t\tfixed = ( elem[0].offsetTop === 20 || elem[0].offsetTop === 15 );\n\n\t\t\t\telem.remove();\n\n\t\t\t\treturn fixed;\n\t\t\t}());\n\t\t}\n\n\t\t$.extend(F.defaults, {\n\t\t\tscrollbarWidth : $.scrollbarWidth(),\n\t\t\tfixed  : $.support.fixedPosition,\n\t\t\tparent : $('body')\n\t\t});\n\n\t\t//Get real width of page scroll-bar\n\t\tw1 = $(window).width();\n\n\t\tH.addClass('fancybox-lock-test');\n\n\t\tw2 = $(window).width();\n\n\t\tH.removeClass('fancybox-lock-test');\n\n\t\t$(\"<style type='text/css'>.fancybox-margin{margin-right:\" + (w2 - w1) + \"px;}</style>\").appendTo(\"head\");\n\t});\n\n}(window, document, jQuery));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/curvedLines.js",
    "content": "/* The MIT License\n\n Copyright (c) 2011 by Michael Zinsmaier and nergal.dev\n Copyright (c) 2012 by Thomas Ritou\n\n Permission is hereby granted, free of charge, to any person obtaining a copy\n of this software and associated documentation files (the \"Software\"), to deal\n in the Software without restriction, including without limitation the rights\n to use, copy, modify, merge, publish, distribute, sublicense, and/or sell\n copies of the Software, and to permit persons to whom the Software is\n furnished to do so, subject to the following conditions:\n\n The above copyright notice and this permission notice shall be included in\n all copies or substantial portions of the Software.\n\n THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\n IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\n FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\n AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\n LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\n OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN\n THE SOFTWARE.\n */\n\n/*\n\n ____________________________________________________\n\n what it is:\n ____________________________________________________\n\n curvedLines is a plugin for flot, that tries to display lines in a smoother way.\n The plugin is based on nergal.dev's work https://code.google.com/p/flot/issues/detail?id=226\n and further extended with a mode that forces the min/max points of the curves to be on the\n points. Both modes are achieved through adding of more data points\n => 1) with large data sets you may get trouble\n => 2) if you want to display the points too, you have to plot them as 2nd data series over the lines\n\n && 3) consecutive x data points are not allowed to have the same value\n\n This is version 0.5 of curvedLines so it will probably not work in every case. However\n the basic form of use descirbed next works (:\n\n Feel free to further improve the code\n\n ____________________________________________________\n\n how to use it:\n ____________________________________________________\n\n var d1 = [[5,5],[7,3],[9,12]];\n\n var options = { series: { curvedLines: {  active: true }}};\n\n $.plot($(\"#placeholder\"), [{data = d1, lines: { show: true}, curvedLines: {apply: true}}], options);\n\n _____________________________________________________\n\n options:\n _____________________________________________________\n\n active:           bool true => plugin can be used\n apply:            bool true => series will be drawn as curved line\n fit:              bool true => forces the max,mins of the curve to be on the datapoints\n curvePointFactor  int  defines how many \"virtual\" points are used per \"real\" data point to\n emulate the curvedLines (points total = real points * curvePointFactor)\n fitPointDist:     int  defines the x axis distance of the additional two points that are used\n to enforce the min max condition.\n\n + line options (since v0.5 curved lines use flots line implementation for drawing\n => line options like fill, show ... are supported out of the box)\n\n */\n\n/*\n *  v0.1   initial commit\n *  v0.15  negative values should work now (outcommented a negative -> 0 hook hope it does no harm)\n *  v0.2   added fill option (thanks to monemihir) and multi axis support (thanks to soewono effendi)\n *  v0.3   improved saddle handling and added basic handling of Dates\n *  v0.4   rewritten fill option (thomas ritou) mostly from original flot code (now fill between points rather than to graph bottom), corrected fill Opacity bug\n *  v0.5   rewritten instead of implementing a own draw function CurvedLines is now based on the processDatapoints flot hook (credits go to thomas ritou).\n * \t\t   This change breakes existing code however CurvedLines are now just many tiny straight lines to flot and therefore all flot lines options (like gradient fill,\n * \t       shadow) are now supported out of the box\n *  v0.6   flot 0.8 compatibility and some bug fixes\n */\n\n(function($) {\n\n    var options = {\n        series : {\n            curvedLines : {\n                active : false,\n                apply: false,\n                fit : false,\n                curvePointFactor : 20,\n                fitPointDist : undefined\n            }\n        }\n    };\n\n    function init(plot) {\n\n        plot.hooks.processOptions.push(processOptions);\n\n        //if the plugin is active register processDatapoints method\n        function processOptions(plot, options) {\n            if (options.series.curvedLines.active) {\n                plot.hooks.processDatapoints.unshift(processDatapoints);\n            }\n        }\n\n        //only if the plugin is active\n        function processDatapoints(plot, series, datapoints) {\n            var nrPoints = datapoints.points.length / datapoints.pointsize;\n            var EPSILON = 0.5; //pretty large epsilon but save\n\n            if (series.curvedLines.apply == true && series.originSeries === undefined && nrPoints > (1 + EPSILON)) {\n                if (series.lines.fill) {\n\n                    var pointsTop = calculateCurvePoints(datapoints, series.curvedLines, 1)\n                        ,pointsBottom = calculateCurvePoints(datapoints, series.curvedLines, 2); //flot makes sure for us that we've got a second y point if fill is true !\n\n                    //Merge top and bottom curve\n                    datapoints.pointsize = 3;\n                    datapoints.points = [];\n                    var j = 0;\n                    var k = 0;\n                    var i = 0;\n                    var ps = 2;\n                    while (i < pointsTop.length || j < pointsBottom.length) {\n                        if (pointsTop[i] == pointsBottom[j]) {\n                            datapoints.points[k] = pointsTop[i];\n                            datapoints.points[k + 1] = pointsTop[i + 1];\n                            datapoints.points[k + 2] = pointsBottom[j + 1];\n                            j += ps;\n                            i += ps;\n\n                        } else if (pointsTop[i] < pointsBottom[j]) {\n                            datapoints.points[k] = pointsTop[i];\n                            datapoints.points[k + 1] = pointsTop[i + 1];\n                            datapoints.points[k + 2] = k > 0 ? datapoints.points[k-1] : null;\n                            i += ps;\n                        } else {\n                            datapoints.points[k] = pointsBottom[j];\n                            datapoints.points[k + 1] = k > 1 ? datapoints.points[k-2] : null;\n                            datapoints.points[k + 2] = pointsBottom[j + 1];\n                            j += ps;\n                        }\n                        k += 3;\n                    }\n                } else if (series.lines.lineWidth > 0) {\n                    datapoints.points = calculateCurvePoints(datapoints, series.curvedLines, 1);\n                    datapoints.pointsize = 2;\n                }\n            }\n        }\n\n        //no real idea whats going on here code mainly from https://code.google.com/p/flot/issues/detail?id=226\n        //if fit option is selected additional datapoints get inserted before the curve calculations in nergal.dev s code.\n        function calculateCurvePoints(datapoints, curvedLinesOptions, yPos) {\n\n            var points = datapoints.points, ps = datapoints.pointsize;\n            var num = curvedLinesOptions.curvePointFactor * (points.length / ps);\n\n            var xdata = new Array;\n            var ydata = new Array;\n\n            var curX = -1;\n            var curY = -1;\n            var j = 0;\n\n            if (curvedLinesOptions.fit) {\n                //insert a point before and after the \"real\" data point to force the line\n                //to have a max,min at the data point.\n\n                var fpDist;\n                if(typeof curvedLinesOptions.fitPointDist == 'undefined') {\n                    //estimate it\n                    var minX = points[0];\n                    var maxX = points[points.length-ps];\n                    fpDist = (maxX - minX) / (500 * 100); //x range / (estimated pixel length of placeholder * factor)\n                } else {\n                    //use user defined value\n                    fpDist = curvedLinesOptions.fitPointDist;\n                }\n\n                for (var i = 0; i < points.length; i += ps) {\n\n                    var frontX;\n                    var backX;\n                    curX = i;\n                    curY = i + yPos;\n\n                    //add point X s\n                    frontX = points[curX] - fpDist;\n                    backX = points[curX] + fpDist;\n\n                    var factor = 2;\n                    while (frontX == points[curX] || backX == points[curX]) {\n                        //inside the ulp\n                        frontX = points[curX] - (fpDist * factor);\n                        backX = points[curX] + (fpDist * factor);\n                        factor++;\n                    }\n\n                    //add curve points\n                    xdata[j] = frontX;\n                    ydata[j] = points[curY];\n                    j++;\n\n                    xdata[j] = points[curX];\n                    ydata[j] = points[curY];\n                    j++;\n\n                    xdata[j] = backX;\n                    ydata[j] = points[curY];\n                    j++;\n                }\n            } else {\n                //just use the datapoints\n                for (var i = 0; i < points.length; i += ps) {\n                    curX = i;\n                    curY = i + yPos;\n\n                    xdata[j] = points[curX];\n                    ydata[j] = points[curY];\n                    j++;\n                }\n            }\n\n            var n = xdata.length;\n\n            var y2 = new Array();\n            var delta = new Array();\n            y2[0] = 0;\n            y2[n - 1] = 0;\n            delta[0] = 0;\n\n            for (var i = 1; i < n - 1; ++i) {\n                var d = (xdata[i + 1] - xdata[i - 1]);\n                if (d == 0) {\n                    //point before current point and after current point need some space in between\n                    return [];\n                }\n\n                var s = (xdata[i] - xdata[i - 1]) / d;\n                var p = s * y2[i - 1] + 2;\n                y2[i] = (s - 1) / p;\n                delta[i] = (ydata[i + 1] - ydata[i]) / (xdata[i + 1] - xdata[i]) - (ydata[i] - ydata[i - 1]) / (xdata[i] - xdata[i - 1]);\n                delta[i] = (6 * delta[i] / (xdata[i + 1] - xdata[i - 1]) - s * delta[i - 1]) / p;\n            }\n\n            for (var j = n - 2; j >= 0; --j) {\n                y2[j] = y2[j] * y2[j + 1] + delta[j];\n            }\n\n            //   xmax  - xmin  / #points\n            var step = (xdata[n - 1] - xdata[0]) / (num - 1);\n\n            var xnew = new Array;\n            var ynew = new Array;\n            var result = new Array;\n\n            xnew[0] = xdata[0];\n            ynew[0] = ydata[0];\n\n            result.push(xnew[0]);\n            result.push(ynew[0]);\n\n            for ( j = 1; j < num; ++j) {\n                //new x point (sampling point for the created curve)\n                xnew[j] = xnew[0] + j * step;\n\n                var max = n - 1;\n                var min = 0;\n\n                while (max - min > 1) {\n                    var k = Math.round((max + min) / 2);\n                    if (xdata[k] > xnew[j]) {\n                        max = k;\n                    } else {\n                        min = k;\n                    }\n                }\n\n                //found point one to the left and one to the right of generated new point\n                var h = (xdata[max] - xdata[min]);\n\n                if (h == 0) {\n                    //similar to above two points from original x data need some space between them\n                    return [];\n                }\n\n                var a = (xdata[max] - xnew[j]) / h;\n                var b = (xnew[j] - xdata[min]) / h;\n\n                ynew[j] = a * ydata[min] + b * ydata[max] + ((a * a * a - a) * y2[min] + (b * b * b - b) * y2[max]) * (h * h) / 6;\n\n                result.push(xnew[j]);\n                result.push(ynew[j]);\n            }\n\n            return result;\n        }\n\n    }//end init\n\n    $.plot.plugins.push({\n        init : init,\n        options : options,\n        name : 'curvedLines',\n        version : '0.5'\n    });\n\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/jquery.flot.js",
    "content": "/*! Javascript plotting library for jQuery, v. 0.7.\n *\n * Released under the MIT license by IOLA, December 2007.\n *\n */\n\n// first an inline dependency, jquery.colorhelpers.js, we inline it here\n// for convenience\n\n/* Plugin for jQuery for working with colors.\n *\n * Version 1.1.\n *\n * Inspiration from jQuery color animation plugin by John Resig.\n *\n * Released under the MIT license by Ole Laursen, October 2009.\n *\n * Examples:\n *\n *   $.color.parse(\"#fff\").scale('rgb', 0.25).add('a', -0.5).toString()\n *   var c = $.color.extract($(\"#mydiv\"), 'background-color');\n *   console.log(c.r, c.g, c.b, c.a);\n *   $.color.make(100, 50, 25, 0.4).toString() // returns \"rgba(100,50,25,0.4)\"\n *\n * Note that .scale() and .add() return the same modified object\n * instead of making a new one.\n *\n * V. 1.1: Fix error handling so e.g. parsing an empty string does\n * produce a color rather than just crashing.\n */\n(function(B){B.color={};B.color.make=function(F,E,C,D){var G={};G.r=F||0;G.g=E||0;G.b=C||0;G.a=D!=null?D:1;G.add=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]+=I}return G.normalize()};G.scale=function(J,I){for(var H=0;H<J.length;++H){G[J.charAt(H)]*=I}return G.normalize()};G.toString=function(){if(G.a>=1){return\"rgb(\"+[G.r,G.g,G.b].join(\",\")+\")\"}else{return\"rgba(\"+[G.r,G.g,G.b,G.a].join(\",\")+\")\"}};G.normalize=function(){function H(J,K,I){return K<J?J:(K>I?I:K)}G.r=H(0,parseInt(G.r),255);G.g=H(0,parseInt(G.g),255);G.b=H(0,parseInt(G.b),255);G.a=H(0,G.a,1);return G};G.clone=function(){return B.color.make(G.r,G.b,G.g,G.a)};return G.normalize()};B.color.extract=function(D,C){var E;do{E=D.css(C).toLowerCase();if(E!=\"\"&&E!=\"transparent\"){break}D=D.parent()}while(!B.nodeName(D.get(0),\"body\"));if(E==\"rgba(0, 0, 0, 0)\"){E=\"transparent\"}return B.color.parse(E)};B.color.parse=function(F){var E,C=B.color.make;if(E=/rgb\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10))}if(E=/rgba\\(\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]{1,3})\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseInt(E[1],10),parseInt(E[2],10),parseInt(E[3],10),parseFloat(E[4]))}if(E=/rgb\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55)}if(E=/rgba\\(\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\%\\s*,\\s*([0-9]+(?:\\.[0-9]+)?)\\s*\\)/.exec(F)){return C(parseFloat(E[1])*2.55,parseFloat(E[2])*2.55,parseFloat(E[3])*2.55,parseFloat(E[4]))}if(E=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(F)){return C(parseInt(E[1],16),parseInt(E[2],16),parseInt(E[3],16))}if(E=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(F)){return C(parseInt(E[1]+E[1],16),parseInt(E[2]+E[2],16),parseInt(E[3]+E[3],16))}var D=B.trim(F).toLowerCase();if(D==\"transparent\"){return C(255,255,255,0)}else{E=A[D]||[0,0,0];return C(E[0],E[1],E[2])}};var A={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0]}})(jQuery);\n\n// the actual Flot code\n(function($) {\n    function Plot(placeholder, data_, options_, plugins) {\n        // data is on the form:\n        //   [ series1, series2 ... ]\n        // where series is either just the data as [ [x1, y1], [x2, y2], ... ]\n        // or { data: [ [x1, y1], [x2, y2], ... ], label: \"some label\", ... }\n\n        var series = [],\n            options = {\n                // the color theme used for graphs\n                colors: [\"#edc240\", \"#afd8f8\", \"#cb4b4b\", \"#4da74d\", \"#9440ed\"],\n                legend: {\n                    show: true,\n                    noColumns: 1, // number of colums in legend table\n                    labelFormatter: null, // fn: string -> string\n                    labelBoxBorderColor: \"#ccc\", // border color for the little label boxes\n                    container: null, // container (as jQuery object) to put legend in, null means default on top of graph\n                    position: \"ne\", // position of default legend container within plot\n                    margin: 5, // distance from grid edge to default legend container within plot\n                    backgroundColor: null, // null means auto-detect\n                    backgroundOpacity: 0.85 // set to 0 to avoid background\n                },\n                xaxis: {\n                    show: null, // null = auto-detect, true = always, false = never\n                    position: \"bottom\", // or \"top\"\n                    mode: null, // null or \"time\"\n                    color: null, // base color, labels, ticks\n                    tickColor: null, // possibly different color of ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    transform: null, // null or f: number -> number to transform axis\n                    inverseTransform: null, // if transform is set, this should be the inverse function\n                    min: null, // min. value to show, null means set automatically\n                    max: null, // max. value to show, null means set automatically\n                    autoscaleMargin: null, // margin in % to add if auto-setting min/max\n                    ticks: null, // either [1, 3] or [[1, \"a\"], 3] or (fn: axis info -> ticks) or app. number of ticks for auto-ticks\n                    tickFormatter: null, // fn: number -> string\n                    labelWidth: null, // size of tick labels in pixels\n                    labelHeight: null,\n                    reserveSpace: null, // whether to reserve space even if axis isn't shown\n                    tickLength: null, // size in pixels of ticks, or \"full\" for whole line\n                    alignTicksWithAxis: null, // axis number or null for no sync\n\n                    // mode specific options\n                    tickDecimals: null, // no. of decimals, null means auto\n                    tickSize: null, // number or [number, \"unit\"]\n                    minTickSize: null, // number or [number, \"unit\"]\n                    monthNames: null, // list of names of months\n                    timeformat: null, // format string to use\n                    twelveHourClock: false // 12 or 24 time in time mode\n                },\n                yaxis: {\n                    autoscaleMargin: 0.02,\n                    position: \"left\" // or \"right\"\n                },\n                xaxes: [],\n                yaxes: [],\n                series: {\n                    points: {\n                        show: false,\n                        radius: 3,\n                        lineWidth: 2, // in pixels\n                        fill: true,\n                        fillColor: \"#ffffff\",\n                        symbol: \"circle\" // or callback\n                    },\n                    lines: {\n                        // we don't put in show: false so we can see\n                        // whether lines were actively disabled\n                        lineWidth: 2, // in pixels\n                        fill: false,\n                        fillColor: null,\n                        steps: false\n                    },\n                    bars: {\n                        show: false,\n                        lineWidth: 2, // in pixels\n                        barWidth: 1, // in units of the x axis\n                        fill: true,\n                        fillColor: null,\n                        align: \"left\", // or \"center\"\n                        horizontal: false\n                    },\n                    shadowSize: 3\n                },\n                grid: {\n                    show: true,\n                    aboveData: false,\n                    color: \"#545454\", // primary color used for outline and labels\n                    backgroundColor: null, // null for transparent, else color\n                    borderColor: null, // set if different from the grid color\n                    tickColor: null, // color for the ticks, e.g. \"rgba(0,0,0,0.15)\"\n                    labelMargin: 5, // in pixels\n                    axisMargin: 8, // in pixels\n                    borderWidth: 2, // in pixels\n                    minBorderMargin: null, // in pixels, null means taken from points radius\n                    markings: null, // array of ranges or fn: axes -> array of ranges\n                    markingsColor: \"#f4f4f4\",\n                    markingsLineWidth: 2,\n                    // interactive stuff\n                    clickable: false,\n                    hoverable: false,\n                    autoHighlight: true, // highlight in case mouse is near\n                    mouseActiveRadius: 10 // how far the mouse can be away to activate an item\n                },\n                hooks: {}\n            },\n        canvas = null,      // the canvas for the plot itself\n        overlay = null,     // canvas for interactive stuff on top of plot\n        eventHolder = null, // jQuery object that events should be bound to\n        ctx = null, octx = null,\n        xaxes = [], yaxes = [],\n        plotOffset = { left: 0, right: 0, top: 0, bottom: 0},\n        canvasWidth = 0, canvasHeight = 0,\n        plotWidth = 0, plotHeight = 0,\n        hooks = {\n            processOptions: [],\n            processRawData: [],\n            processDatapoints: [],\n            drawSeries: [],\n            draw: [],\n            bindEvents: [],\n            drawOverlay: [],\n            shutdown: []\n        },\n        plot = this;\n\n        // public functions\n        plot.setData = setData;\n        plot.setupGrid = setupGrid;\n        plot.draw = draw;\n        plot.getPlaceholder = function() { return placeholder; };\n        plot.getCanvas = function() { return canvas; };\n        plot.getPlotOffset = function() { return plotOffset; };\n        plot.width = function () { return plotWidth; };\n        plot.height = function () { return plotHeight; };\n        plot.offset = function () {\n            var o = eventHolder.offset();\n            o.left += plotOffset.left;\n            o.top += plotOffset.top;\n            return o;\n        };\n        plot.getData = function () { return series; };\n        plot.getAxes = function () {\n            var res = {}, i;\n            $.each(xaxes.concat(yaxes), function (_, axis) {\n                if (axis)\n                    res[axis.direction + (axis.n != 1 ? axis.n : \"\") + \"axis\"] = axis;\n            });\n            return res;\n        };\n        plot.getXAxes = function () { return xaxes; };\n        plot.getYAxes = function () { return yaxes; };\n        plot.c2p = canvasToAxisCoords;\n        plot.p2c = axisToCanvasCoords;\n        plot.getOptions = function () { return options; };\n        plot.highlight = highlight;\n        plot.unhighlight = unhighlight;\n        plot.triggerRedrawOverlay = triggerRedrawOverlay;\n        plot.pointOffset = function(point) {\n            return {\n                left: parseInt(xaxes[axisNumber(point, \"x\") - 1].p2c(+point.x) + plotOffset.left),\n                top: parseInt(yaxes[axisNumber(point, \"y\") - 1].p2c(+point.y) + plotOffset.top)\n            };\n        };\n        plot.shutdown = shutdown;\n        plot.resize = function () {\n            getCanvasDimensions();\n            resizeCanvas(canvas);\n            resizeCanvas(overlay);\n        };\n\n        // public attributes\n        plot.hooks = hooks;\n\n        // initialize\n        initPlugins(plot);\n        parseOptions(options_);\n        setupCanvases();\n        setData(data_);\n        setupGrid();\n        draw();\n        bindEvents();\n\n\n        function executeHooks(hook, args) {\n            args = [plot].concat(args);\n            for (var i = 0; i < hook.length; ++i)\n                hook[i].apply(this, args);\n        }\n\n        function initPlugins() {\n            for (var i = 0; i < plugins.length; ++i) {\n                var p = plugins[i];\n                p.init(plot);\n                if (p.options)\n                    $.extend(true, options, p.options);\n            }\n        }\n\n        function parseOptions(opts) {\n            var i;\n\n            $.extend(true, options, opts);\n\n            if (options.xaxis.color == null)\n                options.xaxis.color = options.grid.color;\n            if (options.yaxis.color == null)\n                options.yaxis.color = options.grid.color;\n\n            if (options.xaxis.tickColor == null) // backwards-compatibility\n                options.xaxis.tickColor = options.grid.tickColor;\n            if (options.yaxis.tickColor == null) // backwards-compatibility\n                options.yaxis.tickColor = options.grid.tickColor;\n\n            if (options.grid.borderColor == null)\n                options.grid.borderColor = options.grid.color;\n            if (options.grid.tickColor == null)\n                options.grid.tickColor = $.color.parse(options.grid.color).scale('a', 0.22).toString();\n\n            // fill in defaults in axes, copy at least always the\n            // first as the rest of the code assumes it'll be there\n            for (i = 0; i < Math.max(1, options.xaxes.length); ++i)\n                options.xaxes[i] = $.extend(true, {}, options.xaxis, options.xaxes[i]);\n            for (i = 0; i < Math.max(1, options.yaxes.length); ++i)\n                options.yaxes[i] = $.extend(true, {}, options.yaxis, options.yaxes[i]);\n\n            // backwards compatibility, to be removed in future\n            if (options.xaxis.noTicks && options.xaxis.ticks == null)\n                options.xaxis.ticks = options.xaxis.noTicks;\n            if (options.yaxis.noTicks && options.yaxis.ticks == null)\n                options.yaxis.ticks = options.yaxis.noTicks;\n            if (options.x2axis) {\n                options.xaxes[1] = $.extend(true, {}, options.xaxis, options.x2axis);\n                options.xaxes[1].position = \"top\";\n            }\n            if (options.y2axis) {\n                options.yaxes[1] = $.extend(true, {}, options.yaxis, options.y2axis);\n                options.yaxes[1].position = \"right\";\n            }\n            if (options.grid.coloredAreas)\n                options.grid.markings = options.grid.coloredAreas;\n            if (options.grid.coloredAreasColor)\n                options.grid.markingsColor = options.grid.coloredAreasColor;\n            if (options.lines)\n                $.extend(true, options.series.lines, options.lines);\n            if (options.points)\n                $.extend(true, options.series.points, options.points);\n            if (options.bars)\n                $.extend(true, options.series.bars, options.bars);\n            if (options.shadowSize != null)\n                options.series.shadowSize = options.shadowSize;\n\n            // save options on axes for future reference\n            for (i = 0; i < options.xaxes.length; ++i)\n                getOrCreateAxis(xaxes, i + 1).options = options.xaxes[i];\n            for (i = 0; i < options.yaxes.length; ++i)\n                getOrCreateAxis(yaxes, i + 1).options = options.yaxes[i];\n\n            // add hooks from options\n            for (var n in hooks)\n                if (options.hooks[n] && options.hooks[n].length)\n                    hooks[n] = hooks[n].concat(options.hooks[n]);\n\n            executeHooks(hooks.processOptions, [options]);\n        }\n\n        function setData(d) {\n            series = parseData(d);\n            fillInSeriesOptions();\n            processData();\n        }\n\n        function parseData(d) {\n            var res = [];\n            for (var i = 0; i < d.length; ++i) {\n                var s = $.extend(true, {}, options.series);\n\n                if (d[i].data != null) {\n                    s.data = d[i].data; // move the data instead of deep-copy\n                    delete d[i].data;\n\n                    $.extend(true, s, d[i]);\n\n                    d[i].data = s.data;\n                }\n                else\n                    s.data = d[i];\n                res.push(s);\n            }\n\n            return res;\n        }\n\n        function axisNumber(obj, coord) {\n            var a = obj[coord + \"axis\"];\n            if (typeof a == \"object\") // if we got a real axis, extract number\n                a = a.n;\n            if (typeof a != \"number\")\n                a = 1; // default to first axis\n            return a;\n        }\n\n        function allAxes() {\n            // return flat array without annoying null entries\n            return $.grep(xaxes.concat(yaxes), function (a) { return a; });\n        }\n\n        function canvasToAxisCoords(pos) {\n            // return an object with x/y corresponding to all used axes\n            var res = {}, i, axis;\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used)\n                    res[\"x\" + axis.n] = axis.c2p(pos.left);\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used)\n                    res[\"y\" + axis.n] = axis.c2p(pos.top);\n            }\n\n            if (res.x1 !== undefined)\n                res.x = res.x1;\n            if (res.y1 !== undefined)\n                res.y = res.y1;\n\n            return res;\n        }\n\n        function axisToCanvasCoords(pos) {\n            // get canvas coords from the first pair of x/y found in pos\n            var res = {}, i, axis, key;\n\n            for (i = 0; i < xaxes.length; ++i) {\n                axis = xaxes[i];\n                if (axis && axis.used) {\n                    key = \"x\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"x\";\n\n                    if (pos[key] != null) {\n                        res.left = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            for (i = 0; i < yaxes.length; ++i) {\n                axis = yaxes[i];\n                if (axis && axis.used) {\n                    key = \"y\" + axis.n;\n                    if (pos[key] == null && axis.n == 1)\n                        key = \"y\";\n\n                    if (pos[key] != null) {\n                        res.top = axis.p2c(pos[key]);\n                        break;\n                    }\n                }\n            }\n\n            return res;\n        }\n\n        function getOrCreateAxis(axes, number) {\n            if (!axes[number - 1])\n                axes[number - 1] = {\n                    n: number, // save the number for future reference\n                    direction: axes == xaxes ? \"x\" : \"y\",\n                    options: $.extend(true, {}, axes == xaxes ? options.xaxis : options.yaxis)\n                };\n\n            return axes[number - 1];\n        }\n\n        function fillInSeriesOptions() {\n            var i;\n\n            // collect what we already got of colors\n            var neededColors = series.length,\n                usedColors = [],\n                assignedColors = [];\n            for (i = 0; i < series.length; ++i) {\n                var sc = series[i].color;\n                if (sc != null) {\n                    --neededColors;\n                    if (typeof sc == \"number\")\n                        assignedColors.push(sc);\n                    else\n                        usedColors.push($.color.parse(series[i].color));\n                }\n            }\n\n            // we might need to generate more colors if higher indices\n            // are assigned\n            for (i = 0; i < assignedColors.length; ++i) {\n                neededColors = Math.max(neededColors, assignedColors[i] + 1);\n            }\n\n            // produce colors as needed\n            var colors = [], variation = 0;\n            i = 0;\n            while (colors.length < neededColors) {\n                var c;\n                if (options.colors.length == i) // check degenerate case\n                    c = $.color.make(100, 100, 100);\n                else\n                    c = $.color.parse(options.colors[i]);\n\n                // vary color if needed\n                var sign = variation % 2 == 1 ? -1 : 1;\n                c.scale('rgb', 1 + sign * Math.ceil(variation / 2) * 0.2)\n\n                // FIXME: if we're getting to close to something else,\n                // we should probably skip this one\n                colors.push(c);\n\n                ++i;\n                if (i >= options.colors.length) {\n                    i = 0;\n                    ++variation;\n                }\n            }\n\n            // fill in the options\n            var colori = 0, s;\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                // assign colors\n                if (s.color == null) {\n                    s.color = colors[colori].toString();\n                    ++colori;\n                }\n                else if (typeof s.color == \"number\")\n                    s.color = colors[s.color].toString();\n\n                // turn on lines automatically in case nothing is set\n                if (s.lines.show == null) {\n                    var v, show = true;\n                    for (v in s)\n                        if (s[v] && s[v].show) {\n                            show = false;\n                            break;\n                        }\n                    if (show)\n                        s.lines.show = true;\n                }\n\n                // setup axes\n                s.xaxis = getOrCreateAxis(xaxes, axisNumber(s, \"x\"));\n                s.yaxis = getOrCreateAxis(yaxes, axisNumber(s, \"y\"));\n            }\n        }\n\n        function processData() {\n            var topSentry = Number.POSITIVE_INFINITY,\n                bottomSentry = Number.NEGATIVE_INFINITY,\n                fakeInfinity = Number.MAX_VALUE,\n                i, j, k, m, length,\n                s, points, ps, x, y, axis, val, f, p;\n\n            function updateAxis(axis, min, max) {\n                if (min < axis.datamin && min != -fakeInfinity)\n                    axis.datamin = min;\n                if (max > axis.datamax && max != fakeInfinity)\n                    axis.datamax = max;\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                // init axis\n                axis.datamin = topSentry;\n                axis.datamax = bottomSentry;\n                axis.used = false;\n            });\n\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                s.datapoints = { points: [] };\n\n                executeHooks(hooks.processRawData, [ s, s.data, s.datapoints ]);\n            }\n\n            // first pass: clean and copy data\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                var data = s.data, format = s.datapoints.format;\n\n                if (!format) {\n                    format = [];\n                    // find out how to copy\n                    format.push({ x: true, number: true, required: true });\n                    format.push({ y: true, number: true, required: true });\n\n                    if (s.bars.show || (s.lines.show && s.lines.fill)) {\n                        format.push({ y: true, number: true, required: false, defaultValue: 0 });\n                        if (s.bars.horizontal) {\n                            delete format[format.length - 1].y;\n                            format[format.length - 1].x = true;\n                        }\n                    }\n\n                    s.datapoints.format = format;\n                }\n\n                if (s.datapoints.pointsize != null)\n                    continue; // already filled in\n\n                s.datapoints.pointsize = format.length;\n\n                ps = s.datapoints.pointsize;\n                points = s.datapoints.points;\n\n                insertSteps = s.lines.show && s.lines.steps;\n                s.xaxis.used = s.yaxis.used = true;\n\n                for (j = k = 0; j < data.length; ++j, k += ps) {\n                    p = data[j];\n\n                    var nullify = p == null;\n                    if (!nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = p[m];\n                            f = format[m];\n\n                            if (f) {\n                                if (f.number && val != null) {\n                                    val = +val; // convert to number\n                                    if (isNaN(val))\n                                        val = null;\n                                    else if (val == Infinity)\n                                        val = fakeInfinity;\n                                    else if (val == -Infinity)\n                                        val = -fakeInfinity;\n                                }\n\n                                if (val == null) {\n                                    if (f.required)\n                                        nullify = true;\n\n                                    if (f.defaultValue != null)\n                                        val = f.defaultValue;\n                                }\n                            }\n\n                            points[k + m] = val;\n                        }\n                    }\n\n                    if (nullify) {\n                        for (m = 0; m < ps; ++m) {\n                            val = points[k + m];\n                            if (val != null) {\n                                f = format[m];\n                                // extract min/max info\n                                if (f.x)\n                                    updateAxis(s.xaxis, val, val);\n                                if (f.y)\n                                    updateAxis(s.yaxis, val, val);\n                            }\n                            points[k + m] = null;\n                        }\n                    }\n                    else {\n                        // a little bit of line specific stuff that\n                        // perhaps shouldn't be here, but lacking\n                        // better means...\n                        if (insertSteps && k > 0\n                            && points[k - ps] != null\n                            && points[k - ps] != points[k]\n                            && points[k - ps + 1] != points[k + 1]) {\n                            // copy the point to make room for a middle point\n                            for (m = 0; m < ps; ++m)\n                                points[k + ps + m] = points[k + m];\n\n                            // middle point has same y\n                            points[k + 1] = points[k - ps + 1];\n\n                            // we've added a point, better reflect that\n                            k += ps;\n                        }\n                    }\n                }\n            }\n\n            // give the hooks a chance to run\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n\n                executeHooks(hooks.processDatapoints, [ s, s.datapoints]);\n            }\n\n            // second pass: find datamax/datamin for auto-scaling\n            for (i = 0; i < series.length; ++i) {\n                s = series[i];\n                points = s.datapoints.points,\n                ps = s.datapoints.pointsize;\n\n                var xmin = topSentry, ymin = topSentry,\n                    xmax = bottomSentry, ymax = bottomSentry;\n\n                for (j = 0; j < points.length; j += ps) {\n                    if (points[j] == null)\n                        continue;\n\n                    for (m = 0; m < ps; ++m) {\n                        val = points[j + m];\n                        f = format[m];\n                        if (!f || val == fakeInfinity || val == -fakeInfinity)\n                            continue;\n\n                        if (f.x) {\n                            if (val < xmin)\n                                xmin = val;\n                            if (val > xmax)\n                                xmax = val;\n                        }\n                        if (f.y) {\n                            if (val < ymin)\n                                ymin = val;\n                            if (val > ymax)\n                                ymax = val;\n                        }\n                    }\n                }\n\n                if (s.bars.show) {\n                    // make sure we got room for the bar on the dancing floor\n                    var delta = s.bars.align == \"left\" ? 0 : -s.bars.barWidth/2;\n                    if (s.bars.horizontal) {\n                        ymin += delta;\n                        ymax += delta + s.bars.barWidth;\n                    }\n                    else {\n                        xmin += delta;\n                        xmax += delta + s.bars.barWidth;\n                    }\n                }\n\n                updateAxis(s.xaxis, xmin, xmax);\n                updateAxis(s.yaxis, ymin, ymax);\n            }\n\n            $.each(allAxes(), function (_, axis) {\n                if (axis.datamin == topSentry)\n                    axis.datamin = null;\n                if (axis.datamax == bottomSentry)\n                    axis.datamax = null;\n            });\n        }\n\n        function makeCanvas(skipPositioning, cls) {\n            var c = document.createElement('canvas');\n            c.className = cls;\n            c.width = canvasWidth;\n            c.height = canvasHeight;\n\n            if (!skipPositioning)\n                $(c).css({ position: 'absolute', left: 0, top: 0 });\n\n            $(c).appendTo(placeholder);\n\n            if (!c.getContext) // excanvas hack\n                c = window.G_vmlCanvasManager.initElement(c);\n\n            // used for resetting in case we get replotted\n            c.getContext(\"2d\").save();\n\n            return c;\n        }\n\n        function getCanvasDimensions() {\n            canvasWidth = placeholder.width();\n            canvasHeight = placeholder.height();\n\n            if (canvasWidth <= 0 || canvasHeight <= 0)\n                throw \"Invalid dimensions for plot, width = \" + canvasWidth + \", height = \" + canvasHeight;\n        }\n\n        function resizeCanvas(c) {\n            // resizing should reset the state (excanvas seems to be\n            // buggy though)\n            if (c.width != canvasWidth)\n                c.width = canvasWidth;\n\n            if (c.height != canvasHeight)\n                c.height = canvasHeight;\n\n            // so try to get back to the initial state (even if it's\n            // gone now, this should be safe according to the spec)\n            var cctx = c.getContext(\"2d\");\n            cctx.restore();\n\n            // and save again\n            cctx.save();\n        }\n\n        function setupCanvases() {\n            var reused,\n                existingCanvas = placeholder.children(\"canvas.base\"),\n                existingOverlay = placeholder.children(\"canvas.overlay\");\n\n            if (existingCanvas.length == 0 || existingOverlay == 0) {\n                // init everything\n\n                placeholder.html(\"\"); // make sure placeholder is clear\n\n                placeholder.css({ padding: 0 }); // padding messes up the positioning\n\n                if (placeholder.css(\"position\") == 'static')\n                    placeholder.css(\"position\", \"relative\"); // for positioning labels and overlay\n\n                getCanvasDimensions();\n\n                canvas = makeCanvas(true, \"base\");\n                overlay = makeCanvas(false, \"overlay\"); // overlay canvas for interactive features\n\n                reused = false;\n            }\n            else {\n                // reuse existing elements\n\n                canvas = existingCanvas.get(0);\n                overlay = existingOverlay.get(0);\n\n                reused = true;\n            }\n\n            ctx = canvas.getContext(\"2d\");\n            octx = overlay.getContext(\"2d\");\n\n            // we include the canvas in the event holder too, because IE 7\n            // sometimes has trouble with the stacking order\n            eventHolder = $([overlay, canvas]);\n\n            if (reused) {\n                // run shutdown in the old plot object\n                placeholder.data(\"plot\").shutdown();\n\n                // reset reused canvases\n                plot.resize();\n\n                // make sure overlay pixels are cleared (canvas is cleared when we redraw)\n                octx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n                // then whack any remaining obvious garbage left\n                eventHolder.unbind();\n                placeholder.children().not([canvas, overlay]).remove();\n            }\n\n            // save in case we get replotted\n            placeholder.data(\"plot\", plot);\n        }\n\n        function bindEvents() {\n            // bind events\n            if (options.grid.hoverable) {\n                eventHolder.mousemove(onMouseMove);\n                eventHolder.mouseleave(onMouseLeave);\n            }\n\n            if (options.grid.clickable)\n                eventHolder.click(onClick);\n\n            executeHooks(hooks.bindEvents, [eventHolder]);\n        }\n\n        function shutdown() {\n            if (redrawTimeout)\n                clearTimeout(redrawTimeout);\n\n            eventHolder.unbind(\"mousemove\", onMouseMove);\n            eventHolder.unbind(\"mouseleave\", onMouseLeave);\n            eventHolder.unbind(\"click\", onClick);\n\n            executeHooks(hooks.shutdown, [eventHolder]);\n        }\n\n        function setTransformationHelpers(axis) {\n            // set helper functions on the axis, assumes plot area\n            // has been computed already\n\n            function identity(x) { return x; }\n\n            var s, m, t = axis.options.transform || identity,\n                it = axis.options.inverseTransform;\n\n            // precompute how much the axis is scaling a point\n            // in canvas space\n            if (axis.direction == \"x\") {\n                s = axis.scale = plotWidth / Math.abs(t(axis.max) - t(axis.min));\n                m = Math.min(t(axis.max), t(axis.min));\n            }\n            else {\n                s = axis.scale = plotHeight / Math.abs(t(axis.max) - t(axis.min));\n                s = -s;\n                m = Math.max(t(axis.max), t(axis.min));\n            }\n\n            // data point to canvas coordinate\n            if (t == identity) // slight optimization\n                axis.p2c = function (p) { return (p - m) * s; };\n            else\n                axis.p2c = function (p) { return (t(p) - m) * s; };\n            // canvas coordinate to data point\n            if (!it)\n                axis.c2p = function (c) { return m + c / s; };\n            else\n                axis.c2p = function (c) { return it(m + c / s); };\n        }\n\n        function measureTickLabels(axis) {\n            var opts = axis.options, i, ticks = axis.ticks || [], labels = [],\n                l, w = opts.labelWidth, h = opts.labelHeight, dummyDiv;\n\n            function makeDummyDiv(labels, width) {\n                return $('<div style=\"position:absolute;top:-10000px;' + width + 'font-size:smaller\">' +\n                         '<div class=\"' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis\">'\n                         + labels.join(\"\") + '</div></div>')\n                    .appendTo(placeholder);\n            }\n\n            if (axis.direction == \"x\") {\n                // to avoid measuring the widths of the labels (it's slow), we\n                // construct fixed-size boxes and put the labels inside\n                // them, we don't need the exact figures and the\n                // fixed-size box content is easy to center\n                if (w == null)\n                    w = Math.floor(canvasWidth / (ticks.length > 0 ? ticks.length : 1));\n\n                // measure x label heights\n                if (h == null) {\n                    labels = [];\n                    for (i = 0; i < ticks.length; ++i) {\n                        l = ticks[i].label;\n                        if (l)\n                            labels.push('<div class=\"tickLabel\" style=\"float:left;width:' + w + 'px\">' + l + '</div>');\n                    }\n\n                    if (labels.length > 0) {\n                        // stick them all in the same div and measure\n                        // collective height\n                        labels.push('<div style=\"clear:left\"></div>');\n                        dummyDiv = makeDummyDiv(labels, \"width:10000px;\");\n                        h = dummyDiv.height();\n                        dummyDiv.remove();\n                    }\n                }\n            }\n            else if (w == null || h == null) {\n                // calculate y label dimensions\n                for (i = 0; i < ticks.length; ++i) {\n                    l = ticks[i].label;\n                    if (l)\n                        labels.push('<div class=\"tickLabel\">' + l + '</div>');\n                }\n\n                if (labels.length > 0) {\n                    dummyDiv = makeDummyDiv(labels, \"\");\n                    if (w == null)\n                        w = dummyDiv.children().width();\n                    if (h == null)\n                        h = dummyDiv.find(\"div.tickLabel\").height();\n                    dummyDiv.remove();\n                }\n            }\n\n            if (w == null)\n                w = 0;\n            if (h == null)\n                h = 0;\n\n            axis.labelWidth = w;\n            axis.labelHeight = h;\n        }\n\n        function allocateAxisBoxFirstPhase(axis) {\n            // find the bounding box of the axis by looking at label\n            // widths/heights and ticks, make room by diminishing the\n            // plotOffset\n\n            var lw = axis.labelWidth,\n                lh = axis.labelHeight,\n                pos = axis.options.position,\n                tickLength = axis.options.tickLength,\n                axismargin = options.grid.axisMargin,\n                padding = options.grid.labelMargin,\n                all = axis.direction == \"x\" ? xaxes : yaxes,\n                index;\n\n            // determine axis margin\n            var samePosition = $.grep(all, function (a) {\n                return a && a.options.position == pos && a.reserveSpace;\n            });\n            if ($.inArray(axis, samePosition) == samePosition.length - 1)\n                axismargin = 0; // outermost\n\n            // determine tick length - if we're innermost, we can use \"full\"\n            if (tickLength == null)\n                tickLength = \"full\";\n\n            var sameDirection = $.grep(all, function (a) {\n                return a && a.reserveSpace;\n            });\n\n            var innermost = $.inArray(axis, sameDirection) == 0;\n            if (!innermost && tickLength == \"full\")\n                tickLength = 5;\n\n            if (!isNaN(+tickLength))\n                padding += +tickLength;\n\n            // compute box\n            if (axis.direction == \"x\") {\n                lh += padding;\n\n                if (pos == \"bottom\") {\n                    plotOffset.bottom += lh + axismargin;\n                    axis.box = { top: canvasHeight - plotOffset.bottom, height: lh };\n                }\n                else {\n                    axis.box = { top: plotOffset.top + axismargin, height: lh };\n                    plotOffset.top += lh + axismargin;\n                }\n            }\n            else {\n                lw += padding;\n\n                if (pos == \"left\") {\n                    axis.box = { left: plotOffset.left + axismargin, width: lw };\n                    plotOffset.left += lw + axismargin;\n                }\n                else {\n                    plotOffset.right += lw + axismargin;\n                    axis.box = { left: canvasWidth - plotOffset.right, width: lw };\n                }\n            }\n\n             // save for future reference\n            axis.position = pos;\n            axis.tickLength = tickLength;\n            axis.box.padding = padding;\n            axis.innermost = innermost;\n        }\n\n        function allocateAxisBoxSecondPhase(axis) {\n            // set remaining bounding box coordinates\n            if (axis.direction == \"x\") {\n                axis.box.left = plotOffset.left;\n                axis.box.width = plotWidth;\n            }\n            else {\n                axis.box.top = plotOffset.top;\n                axis.box.height = plotHeight;\n            }\n        }\n\n        function setupGrid() {\n            var i, axes = allAxes();\n\n            // first calculate the plot and axis box dimensions\n\n            $.each(axes, function (_, axis) {\n                axis.show = axis.options.show;\n                if (axis.show == null)\n                    axis.show = axis.used; // by default an axis is visible if it's got data\n\n                axis.reserveSpace = axis.show || axis.options.reserveSpace;\n\n                setRange(axis);\n            });\n\n            allocatedAxes = $.grep(axes, function (axis) { return axis.reserveSpace; });\n\n            plotOffset.left = plotOffset.right = plotOffset.top = plotOffset.bottom = 0;\n            if (options.grid.show) {\n                $.each(allocatedAxes, function (_, axis) {\n                    // make the ticks\n                    setupTickGeneration(axis);\n                    setTicks(axis);\n                    snapRangeToTicks(axis, axis.ticks);\n\n                    // find labelWidth/Height for axis\n                    measureTickLabels(axis);\n                });\n\n                // with all dimensions in house, we can compute the\n                // axis boxes, start from the outside (reverse order)\n                for (i = allocatedAxes.length - 1; i >= 0; --i)\n                    allocateAxisBoxFirstPhase(allocatedAxes[i]);\n\n                // make sure we've got enough space for things that\n                // might stick out\n                var minMargin = options.grid.minBorderMargin;\n                if (minMargin == null) {\n                    minMargin = 0;\n                    for (i = 0; i < series.length; ++i)\n                        minMargin = Math.max(minMargin, series[i].points.radius + series[i].points.lineWidth/2);\n                }\n\n                for (var a in plotOffset) {\n                    plotOffset[a] += options.grid.borderWidth;\n                    plotOffset[a] = Math.max(minMargin, plotOffset[a]);\n                }\n            }\n\n            plotWidth = canvasWidth - plotOffset.left - plotOffset.right;\n            plotHeight = canvasHeight - plotOffset.bottom - plotOffset.top;\n\n            // now we got the proper plotWidth/Height, we can compute the scaling\n            $.each(axes, function (_, axis) {\n                setTransformationHelpers(axis);\n            });\n\n            if (options.grid.show) {\n                $.each(allocatedAxes, function (_, axis) {\n                    allocateAxisBoxSecondPhase(axis);\n                });\n\n                insertAxisLabels();\n            }\n\n            insertLegend();\n        }\n\n        function setRange(axis) {\n            var opts = axis.options,\n                min = +(opts.min != null ? opts.min : axis.datamin),\n                max = +(opts.max != null ? opts.max : axis.datamax),\n                delta = max - min;\n\n            if (delta == 0.0) {\n                // degenerate case\n                var widen = max == 0 ? 1 : 0.01;\n\n                if (opts.min == null)\n                    min -= widen;\n                // always widen max if we couldn't widen min to ensure we\n                // don't fall into min == max which doesn't work\n                if (opts.max == null || opts.min != null)\n                    max += widen;\n            }\n            else {\n                // consider autoscaling\n                var margin = opts.autoscaleMargin;\n                if (margin != null) {\n                    if (opts.min == null) {\n                        min -= delta * margin;\n                        // make sure we don't go below zero if all values\n                        // are positive\n                        if (min < 0 && axis.datamin != null && axis.datamin >= 0)\n                            min = 0;\n                    }\n                    if (opts.max == null) {\n                        max += delta * margin;\n                        if (max > 0 && axis.datamax != null && axis.datamax <= 0)\n                            max = 0;\n                    }\n                }\n            }\n            axis.min = min;\n            axis.max = max;\n        }\n\n        function setupTickGeneration(axis) {\n            var opts = axis.options;\n\n            // estimate number of ticks\n            var noTicks;\n            if (typeof opts.ticks == \"number\" && opts.ticks > 0)\n                noTicks = opts.ticks;\n            else\n                // heuristic based on the model a*sqrt(x) fitted to\n                // some data points that seemed reasonable\n                noTicks = 0.3 * Math.sqrt(axis.direction == \"x\" ? canvasWidth : canvasHeight);\n\n            var delta = (axis.max - axis.min) / noTicks,\n                size, generator, unit, formatter, i, magn, norm;\n\n            if (opts.mode == \"time\") {\n                // pretty handling of time\n\n                // map of app. size of time units in milliseconds\n                var timeUnitSize = {\n                    \"second\": 1000,\n                    \"minute\": 60 * 1000,\n                    \"hour\": 60 * 60 * 1000,\n                    \"day\": 24 * 60 * 60 * 1000,\n                    \"month\": 30 * 24 * 60 * 60 * 1000,\n                    \"year\": 365.2425 * 24 * 60 * 60 * 1000\n                };\n\n\n                // the allowed tick sizes, after 1 year we use\n                // an integer algorithm\n                var spec = [\n                    [1, \"second\"], [2, \"second\"], [5, \"second\"], [10, \"second\"],\n                    [30, \"second\"],\n                    [1, \"minute\"], [2, \"minute\"], [5, \"minute\"], [10, \"minute\"],\n                    [30, \"minute\"],\n                    [1, \"hour\"], [2, \"hour\"], [4, \"hour\"],\n                    [8, \"hour\"], [12, \"hour\"],\n                    [1, \"day\"], [2, \"day\"], [3, \"day\"],\n                    [0.25, \"month\"], [0.5, \"month\"], [1, \"month\"],\n                    [2, \"month\"], [3, \"month\"], [6, \"month\"],\n                    [1, \"year\"]\n                ];\n\n                var minSize = 0;\n                if (opts.minTickSize != null) {\n                    if (typeof opts.tickSize == \"number\")\n                        minSize = opts.tickSize;\n                    else\n                        minSize = opts.minTickSize[0] * timeUnitSize[opts.minTickSize[1]];\n                }\n\n                for (var i = 0; i < spec.length - 1; ++i)\n                    if (delta < (spec[i][0] * timeUnitSize[spec[i][1]]\n                                 + spec[i + 1][0] * timeUnitSize[spec[i + 1][1]]) / 2\n                       && spec[i][0] * timeUnitSize[spec[i][1]] >= minSize)\n                        break;\n                size = spec[i][0];\n                unit = spec[i][1];\n\n                // special-case the possibility of several years\n                if (unit == \"year\") {\n                    magn = Math.pow(10, Math.floor(Math.log(delta / timeUnitSize.year) / Math.LN10));\n                    norm = (delta / timeUnitSize.year) / magn;\n                    if (norm < 1.5)\n                        size = 1;\n                    else if (norm < 3)\n                        size = 2;\n                    else if (norm < 7.5)\n                        size = 5;\n                    else\n                        size = 10;\n\n                    size *= magn;\n                }\n\n                axis.tickSize = opts.tickSize || [size, unit];\n\n                generator = function(axis) {\n                    var ticks = [],\n                        tickSize = axis.tickSize[0], unit = axis.tickSize[1],\n                        d = new Date(axis.min);\n\n                    var step = tickSize * timeUnitSize[unit];\n\n                    if (unit == \"second\")\n                        d.setUTCSeconds(floorInBase(d.getUTCSeconds(), tickSize));\n                    if (unit == \"minute\")\n                        d.setUTCMinutes(floorInBase(d.getUTCMinutes(), tickSize));\n                    if (unit == \"hour\")\n                        d.setUTCHours(floorInBase(d.getUTCHours(), tickSize));\n                    if (unit == \"month\")\n                        d.setUTCMonth(floorInBase(d.getUTCMonth(), tickSize));\n                    if (unit == \"year\")\n                        d.setUTCFullYear(floorInBase(d.getUTCFullYear(), tickSize));\n\n                    // reset smaller components\n                    d.setUTCMilliseconds(0);\n                    if (step >= timeUnitSize.minute)\n                        d.setUTCSeconds(0);\n                    if (step >= timeUnitSize.hour)\n                        d.setUTCMinutes(0);\n                    if (step >= timeUnitSize.day)\n                        d.setUTCHours(0);\n                    if (step >= timeUnitSize.day * 4)\n                        d.setUTCDate(1);\n                    if (step >= timeUnitSize.year)\n                        d.setUTCMonth(0);\n\n\n                    var carry = 0, v = Number.NaN, prev;\n                    do {\n                        prev = v;\n                        v = d.getTime();\n                        ticks.push(v);\n                        if (unit == \"month\") {\n                            if (tickSize < 1) {\n                                // a bit complicated - we'll divide the month\n                                // up but we need to take care of fractions\n                                // so we don't end up in the middle of a day\n                                d.setUTCDate(1);\n                                var start = d.getTime();\n                                d.setUTCMonth(d.getUTCMonth() + 1);\n                                var end = d.getTime();\n                                d.setTime(v + carry * timeUnitSize.hour + (end - start) * tickSize);\n                                carry = d.getUTCHours();\n                                d.setUTCHours(0);\n                            }\n                            else\n                                d.setUTCMonth(d.getUTCMonth() + tickSize);\n                        }\n                        else if (unit == \"year\") {\n                            d.setUTCFullYear(d.getUTCFullYear() + tickSize);\n                        }\n                        else\n                            d.setTime(v + step);\n                    } while (v < axis.max && v != prev);\n\n                    return ticks;\n                };\n\n                formatter = function (v, axis) {\n                    var d = new Date(v);\n\n                    // first check global format\n                    if (opts.timeformat != null)\n                        return $.plot.formatDate(d, opts.timeformat, opts.monthNames);\n\n                    var t = axis.tickSize[0] * timeUnitSize[axis.tickSize[1]];\n                    var span = axis.max - axis.min;\n                    var suffix = (opts.twelveHourClock) ? \" %p\" : \"\";\n\n                    if (t < timeUnitSize.minute)\n                        fmt = \"%h:%M:%S\" + suffix;\n                    else if (t < timeUnitSize.day) {\n                        if (span < 2 * timeUnitSize.day)\n                            fmt = \"%h:%M\" + suffix;\n                        else\n                            fmt = \"%b %d %h:%M\" + suffix;\n                    }\n                    else if (t < timeUnitSize.month)\n                        fmt = \"%b %d\";\n                    else if (t < timeUnitSize.year) {\n                        if (span < timeUnitSize.year)\n                            fmt = \"%b\";\n                        else\n                            fmt = \"%b %y\";\n                    }\n                    else\n                        fmt = \"%y\";\n\n                    return $.plot.formatDate(d, fmt, opts.monthNames);\n                };\n            }\n            else {\n                // pretty rounding of base-10 numbers\n                var maxDec = opts.tickDecimals;\n                var dec = -Math.floor(Math.log(delta) / Math.LN10);\n                if (maxDec != null && dec > maxDec)\n                    dec = maxDec;\n\n                magn = Math.pow(10, -dec);\n                norm = delta / magn; // norm is between 1.0 and 10.0\n\n                if (norm < 1.5)\n                    size = 1;\n                else if (norm < 3) {\n                    size = 2;\n                    // special case for 2.5, requires an extra decimal\n                    if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n                        size = 2.5;\n                        ++dec;\n                    }\n                }\n                else if (norm < 7.5)\n                    size = 5;\n                else\n                    size = 10;\n\n                size *= magn;\n\n                if (opts.minTickSize != null && size < opts.minTickSize)\n                    size = opts.minTickSize;\n\n                axis.tickDecimals = Math.max(0, maxDec != null ? maxDec : dec);\n                axis.tickSize = opts.tickSize || size;\n\n                generator = function (axis) {\n                    var ticks = [];\n\n                    // spew out all possible ticks\n                    var start = floorInBase(axis.min, axis.tickSize),\n                        i = 0, v = Number.NaN, prev;\n                    do {\n                        prev = v;\n                        v = start + i * axis.tickSize;\n                        ticks.push(v);\n                        ++i;\n                    } while (v < axis.max && v != prev);\n                    return ticks;\n                };\n\n                formatter = function (v, axis) {\n                    return v.toFixed(axis.tickDecimals);\n                };\n            }\n\n            if (opts.alignTicksWithAxis != null) {\n                var otherAxis = (axis.direction == \"x\" ? xaxes : yaxes)[opts.alignTicksWithAxis - 1];\n                if (otherAxis && otherAxis.used && otherAxis != axis) {\n                    // consider snapping min/max to outermost nice ticks\n                    var niceTicks = generator(axis);\n                    if (niceTicks.length > 0) {\n                        if (opts.min == null)\n                            axis.min = Math.min(axis.min, niceTicks[0]);\n                        if (opts.max == null && niceTicks.length > 1)\n                            axis.max = Math.max(axis.max, niceTicks[niceTicks.length - 1]);\n                    }\n\n                    generator = function (axis) {\n                        // copy ticks, scaled to this axis\n                        var ticks = [], v, i;\n                        for (i = 0; i < otherAxis.ticks.length; ++i) {\n                            v = (otherAxis.ticks[i].v - otherAxis.min) / (otherAxis.max - otherAxis.min);\n                            v = axis.min + v * (axis.max - axis.min);\n                            ticks.push(v);\n                        }\n                        return ticks;\n                    };\n\n                    // we might need an extra decimal since forced\n                    // ticks don't necessarily fit naturally\n                    if (axis.mode != \"time\" && opts.tickDecimals == null) {\n                        var extraDec = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1),\n                            ts = generator(axis);\n\n                        // only proceed if the tick interval rounded\n                        // with an extra decimal doesn't give us a\n                        // zero at end\n                        if (!(ts.length > 1 && /\\..*0$/.test((ts[1] - ts[0]).toFixed(extraDec))))\n                            axis.tickDecimals = extraDec;\n                    }\n                }\n            }\n\n            axis.tickGenerator = generator;\n            if ($.isFunction(opts.tickFormatter))\n                axis.tickFormatter = function (v, axis) { return \"\" + opts.tickFormatter(v, axis); };\n            else\n                axis.tickFormatter = formatter;\n        }\n\n        function setTicks(axis) {\n            var oticks = axis.options.ticks, ticks = [];\n            if (oticks == null || (typeof oticks == \"number\" && oticks > 0))\n                ticks = axis.tickGenerator(axis);\n            else if (oticks) {\n                if ($.isFunction(oticks))\n                    // generate the ticks\n                    ticks = oticks({ min: axis.min, max: axis.max });\n                else\n                    ticks = oticks;\n            }\n\n            // clean up/labelify the supplied ticks, copy them over\n            var i, v;\n            axis.ticks = [];\n            for (i = 0; i < ticks.length; ++i) {\n                var label = null;\n                var t = ticks[i];\n                if (typeof t == \"object\") {\n                    v = +t[0];\n                    if (t.length > 1)\n                        label = t[1];\n                }\n                else\n                    v = +t;\n                if (label == null)\n                    label = axis.tickFormatter(v, axis);\n                if (!isNaN(v))\n                    axis.ticks.push({ v: v, label: label });\n            }\n        }\n\n        function snapRangeToTicks(axis, ticks) {\n            if (axis.options.autoscaleMargin && ticks.length > 0) {\n                // snap to ticks\n                if (axis.options.min == null)\n                    axis.min = Math.min(axis.min, ticks[0].v);\n                if (axis.options.max == null && ticks.length > 1)\n                    axis.max = Math.max(axis.max, ticks[ticks.length - 1].v);\n            }\n        }\n\n        function draw() {\n            ctx.clearRect(0, 0, canvasWidth, canvasHeight);\n\n            var grid = options.grid;\n\n            // draw background, if any\n            if (grid.show && grid.backgroundColor)\n                drawBackground();\n\n            if (grid.show && !grid.aboveData)\n                drawGrid();\n\n            for (var i = 0; i < series.length; ++i) {\n                executeHooks(hooks.drawSeries, [ctx, series[i]]);\n                drawSeries(series[i]);\n            }\n\n            executeHooks(hooks.draw, [ctx]);\n\n            if (grid.show && grid.aboveData)\n                drawGrid();\n        }\n\n        function extractRange(ranges, coord) {\n            var axis, from, to, key, axes = allAxes();\n\n            for (i = 0; i < axes.length; ++i) {\n                axis = axes[i];\n                if (axis.direction == coord) {\n                    key = coord + axis.n + \"axis\";\n                    if (!ranges[key] && axis.n == 1)\n                        key = coord + \"axis\"; // support x1axis as xaxis\n                    if (ranges[key]) {\n                        from = ranges[key].from;\n                        to = ranges[key].to;\n                        break;\n                    }\n                }\n            }\n\n            // backwards-compat stuff - to be removed in future\n            if (!ranges[key]) {\n                axis = coord == \"x\" ? xaxes[0] : yaxes[0];\n                from = ranges[coord + \"1\"];\n                to = ranges[coord + \"2\"];\n            }\n\n            // auto-reverse as an added bonus\n            if (from != null && to != null && from > to) {\n                var tmp = from;\n                from = to;\n                to = tmp;\n            }\n\n            return { from: from, to: to, axis: axis };\n        }\n\n        function drawBackground() {\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            ctx.fillStyle = getColorOrGradient(options.grid.backgroundColor, plotHeight, 0, \"rgba(255, 255, 255, 0)\");\n            ctx.fillRect(0, 0, plotWidth, plotHeight);\n            ctx.restore();\n        }\n\n        function drawGrid() {\n            var i;\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // draw markings\n            var markings = options.grid.markings;\n            if (markings) {\n                if ($.isFunction(markings)) {\n                    var axes = plot.getAxes();\n                    // xmin etc. is backwards compatibility, to be\n                    // removed in the future\n                    axes.xmin = axes.xaxis.min;\n                    axes.xmax = axes.xaxis.max;\n                    axes.ymin = axes.yaxis.min;\n                    axes.ymax = axes.yaxis.max;\n\n                    markings = markings(axes);\n                }\n\n                for (i = 0; i < markings.length; ++i) {\n                    var m = markings[i],\n                        xrange = extractRange(m, \"x\"),\n                        yrange = extractRange(m, \"y\");\n\n                    // fill in missing\n                    if (xrange.from == null)\n                        xrange.from = xrange.axis.min;\n                    if (xrange.to == null)\n                        xrange.to = xrange.axis.max;\n                    if (yrange.from == null)\n                        yrange.from = yrange.axis.min;\n                    if (yrange.to == null)\n                        yrange.to = yrange.axis.max;\n\n                    // clip\n                    if (xrange.to < xrange.axis.min || xrange.from > xrange.axis.max ||\n                        yrange.to < yrange.axis.min || yrange.from > yrange.axis.max)\n                        continue;\n\n                    xrange.from = Math.max(xrange.from, xrange.axis.min);\n                    xrange.to = Math.min(xrange.to, xrange.axis.max);\n                    yrange.from = Math.max(yrange.from, yrange.axis.min);\n                    yrange.to = Math.min(yrange.to, yrange.axis.max);\n\n                    if (xrange.from == xrange.to && yrange.from == yrange.to)\n                        continue;\n\n                    // then draw\n                    xrange.from = xrange.axis.p2c(xrange.from);\n                    xrange.to = xrange.axis.p2c(xrange.to);\n                    yrange.from = yrange.axis.p2c(yrange.from);\n                    yrange.to = yrange.axis.p2c(yrange.to);\n\n                    if (xrange.from == xrange.to || yrange.from == yrange.to) {\n                        // draw line\n                        ctx.beginPath();\n                        ctx.strokeStyle = m.color || options.grid.markingsColor;\n                        ctx.lineWidth = m.lineWidth || options.grid.markingsLineWidth;\n                        ctx.moveTo(xrange.from, yrange.from);\n                        ctx.lineTo(xrange.to, yrange.to);\n                        ctx.stroke();\n                    }\n                    else {\n                        // fill area\n                        ctx.fillStyle = m.color || options.grid.markingsColor;\n                        ctx.fillRect(xrange.from, yrange.to,\n                                     xrange.to - xrange.from,\n                                     yrange.from - yrange.to);\n                    }\n                }\n            }\n\n            // draw the ticks\n            var axes = allAxes(), bw = options.grid.borderWidth;\n\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box,\n                    t = axis.tickLength, x, y, xoff, yoff;\n                if (!axis.show || axis.ticks.length == 0)\n                    continue\n\n                ctx.strokeStyle = axis.options.tickColor || $.color.parse(axis.options.color).scale('a', 0.22).toString();\n                ctx.lineWidth = 1;\n\n                // find the edges\n                if (axis.direction == \"x\") {\n                    x = 0;\n                    if (t == \"full\")\n                        y = (axis.position == \"top\" ? 0 : plotHeight);\n                    else\n                        y = box.top - plotOffset.top + (axis.position == \"top\" ? box.height : 0);\n                }\n                else {\n                    y = 0;\n                    if (t == \"full\")\n                        x = (axis.position == \"left\" ? 0 : plotWidth);\n                    else\n                        x = box.left - plotOffset.left + (axis.position == \"left\" ? box.width : 0);\n                }\n\n                // draw tick bar\n                if (!axis.innermost) {\n                    ctx.beginPath();\n                    xoff = yoff = 0;\n                    if (axis.direction == \"x\")\n                        xoff = plotWidth;\n                    else\n                        yoff = plotHeight;\n\n                    if (ctx.lineWidth == 1) {\n                        x = Math.floor(x) + 0.5;\n                        y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                    ctx.stroke();\n                }\n\n                // draw ticks\n                ctx.beginPath();\n                for (i = 0; i < axis.ticks.length; ++i) {\n                    var v = axis.ticks[i].v;\n\n                    xoff = yoff = 0;\n\n                    if (v < axis.min || v > axis.max\n                        // skip those lying on the axes if we got a border\n                        || (t == \"full\" && bw > 0\n                            && (v == axis.min || v == axis.max)))\n                        continue;\n\n                    if (axis.direction == \"x\") {\n                        x = axis.p2c(v);\n                        yoff = t == \"full\" ? -plotHeight : t;\n\n                        if (axis.position == \"top\")\n                            yoff = -yoff;\n                    }\n                    else {\n                        y = axis.p2c(v);\n                        xoff = t == \"full\" ? -plotWidth : t;\n\n                        if (axis.position == \"left\")\n                            xoff = -xoff;\n                    }\n\n                    if (ctx.lineWidth == 1) {\n                        if (axis.direction == \"x\")\n                            x = Math.floor(x) + 0.5;\n                        else\n                            y = Math.floor(y) + 0.5;\n                    }\n\n                    ctx.moveTo(x, y);\n                    ctx.lineTo(x + xoff, y + yoff);\n                }\n\n                ctx.stroke();\n            }\n\n\n            // draw border\n            if (bw) {\n                ctx.lineWidth = bw;\n                ctx.strokeStyle = options.grid.borderColor;\n                ctx.strokeRect(-bw/2, -bw/2, plotWidth + bw, plotHeight + bw);\n            }\n\n            ctx.restore();\n        }\n\n        function insertAxisLabels() {\n            placeholder.find(\".tickLabels\").remove();\n\n            var html = ['<div class=\"tickLabels\" style=\"font-size:smaller\">'];\n\n            var axes = allAxes();\n            for (var j = 0; j < axes.length; ++j) {\n                var axis = axes[j], box = axis.box;\n                if (!axis.show)\n                    continue;\n                //debug: html.push('<div style=\"position:absolute;opacity:0.10;background-color:red;left:' + box.left + 'px;top:' + box.top + 'px;width:' + box.width +  'px;height:' + box.height + 'px\"></div>')\n                html.push('<div class=\"' + axis.direction + 'Axis ' + axis.direction + axis.n + 'Axis\" style=\"color:' + axis.options.color + '\">');\n                for (var i = 0; i < axis.ticks.length; ++i) {\n                    var tick = axis.ticks[i];\n                    if (!tick.label || tick.v < axis.min || tick.v > axis.max)\n                        continue;\n\n                    var pos = {}, align;\n\n                    if (axis.direction == \"x\") {\n                        align = \"center\";\n                        pos.left = Math.round(plotOffset.left + axis.p2c(tick.v) - axis.labelWidth/2);\n                        if (axis.position == \"bottom\")\n                            pos.top = box.top + box.padding;\n                        else\n                            pos.bottom = canvasHeight - (box.top + box.height - box.padding);\n                    }\n                    else {\n                        pos.top = Math.round(plotOffset.top + axis.p2c(tick.v) - axis.labelHeight/2);\n                        if (axis.position == \"left\") {\n                            pos.right = canvasWidth - (box.left + box.width - box.padding)\n                            align = \"right\";\n                        }\n                        else {\n                            pos.left = box.left + box.padding;\n                            align = \"left\";\n                        }\n                    }\n\n                    pos.width = axis.labelWidth;\n\n                    var style = [\"position:absolute\", \"text-align:\" + align ];\n                    for (var a in pos)\n                        style.push(a + \":\" + pos[a] + \"px\")\n\n                    html.push('<div class=\"tickLabel\" style=\"' + style.join(';') + '\">' + tick.label + '</div>');\n                }\n                html.push('</div>');\n            }\n\n            html.push('</div>');\n\n            placeholder.append(html.join(\"\"));\n        }\n\n        function drawSeries(series) {\n            if (series.lines.show)\n                drawSeriesLines(series);\n            if (series.bars.show)\n                drawSeriesBars(series);\n            if (series.points.show)\n                drawSeriesPoints(series);\n        }\n\n        function drawSeriesLines(series) {\n            function plotLine(datapoints, xoffset, yoffset, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    prevx = null, prevy = null;\n\n                ctx.beginPath();\n                for (var i = ps; i < points.length; i += ps) {\n                    var x1 = points[i - ps], y1 = points[i - ps + 1],\n                        x2 = points[i], y2 = points[i + 1];\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min) {\n                        if (y2 < axisy.min)\n                            continue;   // line segment is outside\n                        // compute new intersection point\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min) {\n                        if (y1 < axisy.min)\n                            continue;\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max) {\n                        if (y2 > axisy.max)\n                            continue;\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max) {\n                        if (y1 > axisy.max)\n                            continue;\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (x1 != prevx || y1 != prevy)\n                        ctx.moveTo(axisx.p2c(x1) + xoffset, axisy.p2c(y1) + yoffset);\n\n                    prevx = x2;\n                    prevy = y2;\n                    ctx.lineTo(axisx.p2c(x2) + xoffset, axisy.p2c(y2) + yoffset);\n                }\n                ctx.stroke();\n            }\n\n            function plotLineArea(datapoints, axisx, axisy) {\n                var points = datapoints.points,\n                    ps = datapoints.pointsize,\n                    bottom = Math.min(Math.max(0, axisy.min), axisy.max),\n                    i = 0, top, areaOpen = false,\n                    ypos = 1, segmentStart = 0, segmentEnd = 0;\n\n                // we process each segment in two turns, first forward\n                // direction to sketch out top, then once we hit the\n                // end we go backwards to sketch the bottom\n                while (true) {\n                    if (ps > 0 && i > points.length + ps)\n                        break;\n\n                    i += ps; // ps is negative if going backwards\n\n                    var x1 = points[i - ps],\n                        y1 = points[i - ps + ypos],\n                        x2 = points[i], y2 = points[i + ypos];\n\n                    if (areaOpen) {\n                        if (ps > 0 && x1 != null && x2 == null) {\n                            // at turning point\n                            segmentEnd = i;\n                            ps = -ps;\n                            ypos = 2;\n                            continue;\n                        }\n\n                        if (ps < 0 && i == segmentStart + ps) {\n                            // done with the reverse sweep\n                            ctx.fill();\n                            areaOpen = false;\n                            ps = -ps;\n                            ypos = 1;\n                            i = segmentStart = segmentEnd + ps;\n                            continue;\n                        }\n                    }\n\n                    if (x1 == null || x2 == null)\n                        continue;\n\n                    // clip x values\n\n                    // clip with xmin\n                    if (x1 <= x2 && x1 < axisx.min) {\n                        if (x2 < axisx.min)\n                            continue;\n                        y1 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.min;\n                    }\n                    else if (x2 <= x1 && x2 < axisx.min) {\n                        if (x1 < axisx.min)\n                            continue;\n                        y2 = (axisx.min - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.min;\n                    }\n\n                    // clip with xmax\n                    if (x1 >= x2 && x1 > axisx.max) {\n                        if (x2 > axisx.max)\n                            continue;\n                        y1 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x1 = axisx.max;\n                    }\n                    else if (x2 >= x1 && x2 > axisx.max) {\n                        if (x1 > axisx.max)\n                            continue;\n                        y2 = (axisx.max - x1) / (x2 - x1) * (y2 - y1) + y1;\n                        x2 = axisx.max;\n                    }\n\n                    if (!areaOpen) {\n                        // open area\n                        ctx.beginPath();\n                        ctx.moveTo(axisx.p2c(x1), axisy.p2c(bottom));\n                        areaOpen = true;\n                    }\n\n                    // now first check the case where both is outside\n                    if (y1 >= axisy.max && y2 >= axisy.max) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.max));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.max));\n                        continue;\n                    }\n                    else if (y1 <= axisy.min && y2 <= axisy.min) {\n                        ctx.lineTo(axisx.p2c(x1), axisy.p2c(axisy.min));\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(axisy.min));\n                        continue;\n                    }\n\n                    // else it's a bit more complicated, there might\n                    // be a flat maxed out rectangle first, then a\n                    // triangular cutout or reverse; to find these\n                    // keep track of the current x values\n                    var x1old = x1, x2old = x2;\n\n                    // clip the y values, without shortcutting, we\n                    // go through all cases in turn\n\n                    // clip with ymin\n                    if (y1 <= y2 && y1 < axisy.min && y2 >= axisy.min) {\n                        x1 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.min;\n                    }\n                    else if (y2 <= y1 && y2 < axisy.min && y1 >= axisy.min) {\n                        x2 = (axisy.min - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.min;\n                    }\n\n                    // clip with ymax\n                    if (y1 >= y2 && y1 > axisy.max && y2 <= axisy.max) {\n                        x1 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y1 = axisy.max;\n                    }\n                    else if (y2 >= y1 && y2 > axisy.max && y1 <= axisy.max) {\n                        x2 = (axisy.max - y1) / (y2 - y1) * (x2 - x1) + x1;\n                        y2 = axisy.max;\n                    }\n\n                    // if the x value was changed we got a rectangle\n                    // to fill\n                    if (x1 != x1old) {\n                        ctx.lineTo(axisx.p2c(x1old), axisy.p2c(y1));\n                        // it goes to (x1, y1), but we fill that below\n                    }\n\n                    // fill triangular section, this sometimes result\n                    // in redundant points if (x1, y1) hasn't changed\n                    // from previous line to, but we just ignore that\n                    ctx.lineTo(axisx.p2c(x1), axisy.p2c(y1));\n                    ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n\n                    // fill the other rectangle if it's there\n                    if (x2 != x2old) {\n                        ctx.lineTo(axisx.p2c(x2), axisy.p2c(y2));\n                        ctx.lineTo(axisx.p2c(x2old), axisy.p2c(y2));\n                    }\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n            ctx.lineJoin = \"round\";\n\n            var lw = series.lines.lineWidth,\n                sw = series.shadowSize;\n            // FIXME: consider another form of shadow when filling is turned on\n            if (lw > 0 && sw > 0) {\n                // draw shadow as a thick and thin line with transparency\n                ctx.lineWidth = sw;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                // position shadow at angle from the mid of line\n                var angle = Math.PI/18;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/2), Math.cos(angle) * (lw/2 + sw/2), series.xaxis, series.yaxis);\n                ctx.lineWidth = sw/2;\n                plotLine(series.datapoints, Math.sin(angle) * (lw/2 + sw/4), Math.cos(angle) * (lw/2 + sw/4), series.xaxis, series.yaxis);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            var fillStyle = getFillStyle(series.lines, series.color, 0, plotHeight);\n            if (fillStyle) {\n                ctx.fillStyle = fillStyle;\n                plotLineArea(series.datapoints, series.xaxis, series.yaxis);\n            }\n\n            if (lw > 0)\n                plotLine(series.datapoints, 0, 0, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function drawSeriesPoints(series) {\n            function plotPoints(datapoints, radius, fillStyle, offset, shadow, axisx, axisy, symbol) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    var x = points[i], y = points[i + 1];\n                    if (x == null || x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                        continue;\n\n                    ctx.beginPath();\n                    x = axisx.p2c(x);\n                    y = axisy.p2c(y) + offset;\n                    if (symbol == \"circle\")\n                        ctx.arc(x, y, radius, 0, shadow ? Math.PI : Math.PI * 2, false);\n                    else\n                        symbol(ctx, x, y, radius, shadow);\n                    ctx.closePath();\n\n                    if (fillStyle) {\n                        ctx.fillStyle = fillStyle;\n                        ctx.fill();\n                    }\n                    ctx.stroke();\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            var lw = series.points.lineWidth,\n                sw = series.shadowSize,\n                radius = series.points.radius,\n                symbol = series.points.symbol;\n            if (lw > 0 && sw > 0) {\n                // draw shadow in two steps\n                var w = sw / 2;\n                ctx.lineWidth = w;\n                ctx.strokeStyle = \"rgba(0,0,0,0.1)\";\n                plotPoints(series.datapoints, radius, null, w + w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n\n                ctx.strokeStyle = \"rgba(0,0,0,0.2)\";\n                plotPoints(series.datapoints, radius, null, w/2, true,\n                           series.xaxis, series.yaxis, symbol);\n            }\n\n            ctx.lineWidth = lw;\n            ctx.strokeStyle = series.color;\n            plotPoints(series.datapoints, radius,\n                       getFillStyle(series.points, series.color), 0, false,\n                       series.xaxis, series.yaxis, symbol);\n            ctx.restore();\n        }\n\n        function drawBar(x, y, b, barLeft, barRight, offset, fillStyleCallback, axisx, axisy, c, horizontal, lineWidth) {\n            var left, right, bottom, top,\n                drawLeft, drawRight, drawTop, drawBottom,\n                tmp;\n\n            // in horizontal mode, we start the bar from the left\n            // instead of from the bottom so it appears to be\n            // horizontal rather than vertical\n            if (horizontal) {\n                drawBottom = drawRight = drawTop = true;\n                drawLeft = false;\n                left = b;\n                right = x;\n                top = y + barLeft;\n                bottom = y + barRight;\n\n                // account for negative bars\n                if (right < left) {\n                    tmp = right;\n                    right = left;\n                    left = tmp;\n                    drawLeft = true;\n                    drawRight = false;\n                }\n            }\n            else {\n                drawLeft = drawRight = drawTop = true;\n                drawBottom = false;\n                left = x + barLeft;\n                right = x + barRight;\n                bottom = b;\n                top = y;\n\n                // account for negative bars\n                if (top < bottom) {\n                    tmp = top;\n                    top = bottom;\n                    bottom = tmp;\n                    drawBottom = true;\n                    drawTop = false;\n                }\n            }\n\n            // clip\n            if (right < axisx.min || left > axisx.max ||\n                top < axisy.min || bottom > axisy.max)\n                return;\n\n            if (left < axisx.min) {\n                left = axisx.min;\n                drawLeft = false;\n            }\n\n            if (right > axisx.max) {\n                right = axisx.max;\n                drawRight = false;\n            }\n\n            if (bottom < axisy.min) {\n                bottom = axisy.min;\n                drawBottom = false;\n            }\n\n            if (top > axisy.max) {\n                top = axisy.max;\n                drawTop = false;\n            }\n\n            left = axisx.p2c(left);\n            bottom = axisy.p2c(bottom);\n            right = axisx.p2c(right);\n            top = axisy.p2c(top);\n\n            // fill the bar\n            if (fillStyleCallback) {\n                c.beginPath();\n                c.moveTo(left, bottom);\n                c.lineTo(left, top);\n                c.lineTo(right, top);\n                c.lineTo(right, bottom);\n                c.fillStyle = fillStyleCallback(bottom, top);\n                c.fill();\n            }\n\n            // draw outline\n            if (lineWidth > 0 && (drawLeft || drawRight || drawTop || drawBottom)) {\n                c.beginPath();\n\n                // FIXME: inline moveTo is buggy with excanvas\n                c.moveTo(left, bottom + offset);\n                if (drawLeft)\n                    c.lineTo(left, top + offset);\n                else\n                    c.moveTo(left, top + offset);\n                if (drawTop)\n                    c.lineTo(right, top + offset);\n                else\n                    c.moveTo(right, top + offset);\n                if (drawRight)\n                    c.lineTo(right, bottom + offset);\n                else\n                    c.moveTo(right, bottom + offset);\n                if (drawBottom)\n                    c.lineTo(left, bottom + offset);\n                else\n                    c.moveTo(left, bottom + offset);\n                c.stroke();\n            }\n        }\n\n        function drawSeriesBars(series) {\n            function plotBars(datapoints, barLeft, barRight, offset, fillStyleCallback, axisx, axisy) {\n                var points = datapoints.points, ps = datapoints.pointsize;\n\n                for (var i = 0; i < points.length; i += ps) {\n                    if (points[i] == null)\n                        continue;\n                    drawBar(points[i], points[i + 1], points[i + 2], barLeft, barRight, offset, fillStyleCallback, axisx, axisy, ctx, series.bars.horizontal, series.bars.lineWidth);\n                }\n            }\n\n            ctx.save();\n            ctx.translate(plotOffset.left, plotOffset.top);\n\n            // FIXME: figure out a way to add shadows (for instance along the right edge)\n            ctx.lineWidth = series.bars.lineWidth;\n            ctx.strokeStyle = series.color;\n            var barLeft = series.bars.align == \"left\" ? 0 : -series.bars.barWidth/2;\n            var fillStyleCallback = series.bars.fill ? function (bottom, top) { return getFillStyle(series.bars, series.color, bottom, top); } : null;\n            plotBars(series.datapoints, barLeft, barLeft + series.bars.barWidth, 0, fillStyleCallback, series.xaxis, series.yaxis);\n            ctx.restore();\n        }\n\n        function getFillStyle(filloptions, seriesColor, bottom, top) {\n            var fill = filloptions.fill;\n            if (!fill)\n                return null;\n\n            if (filloptions.fillColor)\n                return getColorOrGradient(filloptions.fillColor, bottom, top, seriesColor);\n\n            var c = $.color.parse(seriesColor);\n            c.a = typeof fill == \"number\" ? fill : 0.4;\n            c.normalize();\n            return c.toString();\n        }\n\n        function insertLegend() {\n            placeholder.find(\".legend\").remove();\n\n            if (!options.legend.show)\n                return;\n\n            var fragments = [], rowStarted = false,\n                lf = options.legend.labelFormatter, s, label;\n            for (var i = 0; i < series.length; ++i) {\n                s = series[i];\n                label = s.label;\n                if (!label)\n                    continue;\n\n                if (i % options.legend.noColumns == 0) {\n                    if (rowStarted)\n                        fragments.push('</tr>');\n                    fragments.push('<tr>');\n                    rowStarted = true;\n                }\n\n                if (lf)\n                    label = lf(label, s);\n\n                fragments.push(\n                    '<td class=\"legendColorBox\"><div style=\"border:1px solid ' + options.legend.labelBoxBorderColor + ';padding:1px\"><div style=\"width:4px;height:0;border:5px solid ' + s.color + ';overflow:hidden\"></div></div></td>' +\n                    '<td class=\"legendLabel\">' + label + '</td>');\n            }\n            if (rowStarted)\n                fragments.push('</tr>');\n\n            if (fragments.length == 0)\n                return;\n\n            var table = '<table style=\"font-size:smaller;color:' + options.grid.color + '\">' + fragments.join(\"\") + '</table>';\n            if (options.legend.container != null)\n                $(options.legend.container).html(table);\n            else {\n                var pos = \"\",\n                    p = options.legend.position,\n                    m = options.legend.margin;\n                if (m[0] == null)\n                    m = [m, m];\n                if (p.charAt(0) == \"n\")\n                    pos += 'top:' + (m[1] + plotOffset.top) + 'px;';\n                else if (p.charAt(0) == \"s\")\n                    pos += 'bottom:' + (m[1] + plotOffset.bottom) + 'px;';\n                if (p.charAt(1) == \"e\")\n                    pos += 'right:' + (m[0] + plotOffset.right) + 'px;';\n                else if (p.charAt(1) == \"w\")\n                    pos += 'left:' + (m[0] + plotOffset.left) + 'px;';\n                var legend = $('<div class=\"legend\">' + table.replace('style=\"', 'style=\"position:absolute;' + pos +';') + '</div>').appendTo(placeholder);\n                if (options.legend.backgroundOpacity != 0.0) {\n                    // put in the transparent background\n                    // separately to avoid blended labels and\n                    // label boxes\n                    var c = options.legend.backgroundColor;\n                    if (c == null) {\n                        c = options.grid.backgroundColor;\n                        if (c && typeof c == \"string\")\n                            c = $.color.parse(c);\n                        else\n                            c = $.color.extract(legend, 'background-color');\n                        c.a = 1;\n                        c = c.toString();\n                    }\n                    var div = legend.children();\n                    $('<div style=\"position:absolute;width:' + div.width() + 'px;height:' + div.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').prependTo(legend).css('opacity', options.legend.backgroundOpacity);\n                }\n            }\n        }\n\n\n        // interactive features\n\n        var highlights = [],\n            redrawTimeout = null;\n\n        // returns the data item the mouse is over, or null if none is found\n        function findNearbyItem(mouseX, mouseY, seriesFilter) {\n            var maxDistance = options.grid.mouseActiveRadius,\n                smallestDistance = maxDistance * maxDistance + 1,\n                item = null, foundPoint = false, i, j;\n\n            for (i = series.length - 1; i >= 0; --i) {\n                if (!seriesFilter(series[i]))\n                    continue;\n\n                var s = series[i],\n                    axisx = s.xaxis,\n                    axisy = s.yaxis,\n                    points = s.datapoints.points,\n                    ps = s.datapoints.pointsize,\n                    mx = axisx.c2p(mouseX), // precompute some stuff to make the loop faster\n                    my = axisy.c2p(mouseY),\n                    maxx = maxDistance / axisx.scale,\n                    maxy = maxDistance / axisy.scale;\n\n                // with inverse transforms, we can't use the maxx/maxy\n                // optimization, sadly\n                if (axisx.options.inverseTransform)\n                    maxx = Number.MAX_VALUE;\n                if (axisy.options.inverseTransform)\n                    maxy = Number.MAX_VALUE;\n\n                if (s.lines.show || s.points.show) {\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1];\n                        if (x == null)\n                            continue;\n\n                        // For points and lines, the cursor must be within a\n                        // certain distance to the data point\n                        if (x - mx > maxx || x - mx < -maxx ||\n                            y - my > maxy || y - my < -maxy)\n                            continue;\n\n                        // We have to calculate distances in pixels, not in\n                        // data units, because the scales of the axes may be different\n                        var dx = Math.abs(axisx.p2c(x) - mouseX),\n                            dy = Math.abs(axisy.p2c(y) - mouseY),\n                            dist = dx * dx + dy * dy; // we save the sqrt\n\n                        // use <= to ensure last point takes precedence\n                        // (last generally means on top of)\n                        if (dist < smallestDistance) {\n                            smallestDistance = dist;\n                            item = [i, j / ps];\n                        }\n                    }\n                }\n\n                if (s.bars.show && !item) { // no other point can be nearby\n                    var barLeft = s.bars.align == \"left\" ? 0 : -s.bars.barWidth/2,\n                        barRight = barLeft + s.bars.barWidth;\n\n                    for (j = 0; j < points.length; j += ps) {\n                        var x = points[j], y = points[j + 1], b = points[j + 2];\n                        if (x == null)\n                            continue;\n\n                        // for a bar graph, the cursor must be inside the bar\n                        if (series[i].bars.horizontal ?\n                            (mx <= Math.max(b, x) && mx >= Math.min(b, x) &&\n                             my >= y + barLeft && my <= y + barRight) :\n                            (mx >= x + barLeft && mx <= x + barRight &&\n                             my >= Math.min(b, y) && my <= Math.max(b, y)))\n                                item = [i, j / ps];\n                    }\n                }\n            }\n\n            if (item) {\n                i = item[0];\n                j = item[1];\n                ps = series[i].datapoints.pointsize;\n\n                return { datapoint: series[i].datapoints.points.slice(j * ps, (j + 1) * ps),\n                         dataIndex: j,\n                         series: series[i],\n                         seriesIndex: i };\n            }\n\n            return null;\n        }\n\n        function onMouseMove(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return s[\"hoverable\"] != false; });\n        }\n\n        function onMouseLeave(e) {\n            if (options.grid.hoverable)\n                triggerClickHoverEvent(\"plothover\", e,\n                                       function (s) { return false; });\n        }\n\n        function onClick(e) {\n            triggerClickHoverEvent(\"plotclick\", e,\n                                   function (s) { return s[\"clickable\"] != false; });\n        }\n\n        // trigger click or hover event (they send the same parameters\n        // so we share their code)\n        function triggerClickHoverEvent(eventname, event, seriesFilter) {\n            var offset = eventHolder.offset(),\n                canvasX = event.pageX - offset.left - plotOffset.left,\n                canvasY = event.pageY - offset.top - plotOffset.top,\n            pos = canvasToAxisCoords({ left: canvasX, top: canvasY });\n\n            pos.pageX = event.pageX;\n            pos.pageY = event.pageY;\n\n            var item = findNearbyItem(canvasX, canvasY, seriesFilter);\n\n            if (item) {\n                // fill in mouse pos for any listeners out there\n                item.pageX = parseInt(item.series.xaxis.p2c(item.datapoint[0]) + offset.left + plotOffset.left);\n                item.pageY = parseInt(item.series.yaxis.p2c(item.datapoint[1]) + offset.top + plotOffset.top);\n            }\n\n            if (options.grid.autoHighlight) {\n                // clear auto-highlights\n                for (var i = 0; i < highlights.length; ++i) {\n                    var h = highlights[i];\n                    if (h.auto == eventname &&\n                        !(item && h.series == item.series &&\n                          h.point[0] == item.datapoint[0] &&\n                          h.point[1] == item.datapoint[1]))\n                        unhighlight(h.series, h.point);\n                }\n\n                if (item)\n                    highlight(item.series, item.datapoint, eventname);\n            }\n\n            placeholder.trigger(eventname, [ pos, item ]);\n        }\n\n        function triggerRedrawOverlay() {\n            if (!redrawTimeout)\n                redrawTimeout = setTimeout(drawOverlay, 30);\n        }\n\n        function drawOverlay() {\n            redrawTimeout = null;\n\n            // draw highlights\n            octx.save();\n            octx.clearRect(0, 0, canvasWidth, canvasHeight);\n            octx.translate(plotOffset.left, plotOffset.top);\n\n            var i, hi;\n            for (i = 0; i < highlights.length; ++i) {\n                hi = highlights[i];\n\n                if (hi.series.bars.show)\n                    drawBarHighlight(hi.series, hi.point);\n                else\n                    drawPointHighlight(hi.series, hi.point);\n            }\n            octx.restore();\n\n            executeHooks(hooks.drawOverlay, [octx]);\n        }\n\n        function highlight(s, point, auto) {\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\") {\n                var ps = s.datapoints.pointsize;\n                point = s.datapoints.points.slice(ps * point, ps * (point + 1));\n            }\n\n            var i = indexOfHighlight(s, point);\n            if (i == -1) {\n                highlights.push({ series: s, point: point, auto: auto });\n\n                triggerRedrawOverlay();\n            }\n            else if (!auto)\n                highlights[i].auto = false;\n        }\n\n        function unhighlight(s, point) {\n            if (s == null && point == null) {\n                highlights = [];\n                triggerRedrawOverlay();\n            }\n\n            if (typeof s == \"number\")\n                s = series[s];\n\n            if (typeof point == \"number\")\n                point = s.data[point];\n\n            var i = indexOfHighlight(s, point);\n            if (i != -1) {\n                highlights.splice(i, 1);\n\n                triggerRedrawOverlay();\n            }\n        }\n\n        function indexOfHighlight(s, p) {\n            for (var i = 0; i < highlights.length; ++i) {\n                var h = highlights[i];\n                if (h.series == s && h.point[0] == p[0]\n                    && h.point[1] == p[1])\n                    return i;\n            }\n            return -1;\n        }\n\n        function drawPointHighlight(series, point) {\n            var x = point[0], y = point[1],\n                axisx = series.xaxis, axisy = series.yaxis;\n\n            if (x < axisx.min || x > axisx.max || y < axisy.min || y > axisy.max)\n                return;\n\n            var pointRadius = series.points.radius + series.points.lineWidth / 2;\n            octx.lineWidth = pointRadius;\n            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();\n            var radius = 1.5 * pointRadius,\n                x = axisx.p2c(x),\n                y = axisy.p2c(y);\n\n            octx.beginPath();\n            if (series.points.symbol == \"circle\")\n                octx.arc(x, y, radius, 0, 2 * Math.PI, false);\n            else\n                series.points.symbol(octx, x, y, radius, false);\n            octx.closePath();\n            octx.stroke();\n        }\n\n        function drawBarHighlight(series, point) {\n            octx.lineWidth = series.bars.lineWidth;\n            octx.strokeStyle = $.color.parse(series.color).scale('a', 0.5).toString();\n            var fillStyle = $.color.parse(series.color).scale('a', 0.5).toString();\n            var barLeft = series.bars.align == \"left\" ? 0 : -series.bars.barWidth/2;\n            drawBar(point[0], point[1], point[2] || 0, barLeft, barLeft + series.bars.barWidth,\n                    0, function () { return fillStyle; }, series.xaxis, series.yaxis, octx, series.bars.horizontal, series.bars.lineWidth);\n        }\n\n        function getColorOrGradient(spec, bottom, top, defaultColor) {\n            if (typeof spec == \"string\")\n                return spec;\n            else {\n                // assume this is a gradient spec; IE currently only\n                // supports a simple vertical gradient properly, so that's\n                // what we support too\n                var gradient = ctx.createLinearGradient(0, top, 0, bottom);\n\n                for (var i = 0, l = spec.colors.length; i < l; ++i) {\n                    var c = spec.colors[i];\n                    if (typeof c != \"string\") {\n                        var co = $.color.parse(defaultColor);\n                        if (c.brightness != null)\n                            co = co.scale('rgb', c.brightness)\n                        if (c.opacity != null)\n                            co.a *= c.opacity;\n                        c = co.toString();\n                    }\n                    gradient.addColorStop(i / (l - 1), c);\n                }\n\n                return gradient;\n            }\n        }\n    }\n\n    $.plot = function(placeholder, data, options) {\n        //var t0 = new Date();\n        var plot = new Plot($(placeholder), data, options, $.plot.plugins);\n        //(window.console ? console.log : alert)(\"time used (msecs): \" + ((new Date()).getTime() - t0.getTime()));\n        return plot;\n    };\n\n    $.plot.version = \"0.7\";\n\n    $.plot.plugins = [];\n\n    // returns a string with the date d formatted according to fmt\n    $.plot.formatDate = function(d, fmt, monthNames) {\n        var leftPad = function(n) {\n            n = \"\" + n;\n            return n.length == 1 ? \"0\" + n : n;\n        };\n\n        var r = [];\n        var escape = false, padNext = false;\n        var hours = d.getUTCHours();\n        var isAM = hours < 12;\n        if (monthNames == null)\n            monthNames = [\"1月\", \"2月\", \"3月\", \"4月\", \"5月\", \"6月\", \"7月\", \"8月\", \"9月\", \"10月\", \"11月\", \"12月\"];\n\n        if (fmt.search(/%p|%P/) != -1) {\n            if (hours > 12) {\n                hours = hours - 12;\n            } else if (hours == 0) {\n                hours = 12;\n            }\n        }\n        for (var i = 0; i < fmt.length; ++i) {\n            var c = fmt.charAt(i);\n\n            if (escape) {\n                switch (c) {\n                case 'h': c = \"\" + hours; break;\n                case 'H': c = leftPad(hours); break;\n                case 'M': c = leftPad(d.getUTCMinutes()); break;\n                case 'S': c = leftPad(d.getUTCSeconds()); break;\n                case 'd': c = \"\" + d.getUTCDate(); break;\n                case 'm': c = \"\" + (d.getUTCMonth() + 1); break;\n                case 'y': c = \"\" + d.getUTCFullYear(); break;\n                case 'b': c = \"\" + monthNames[d.getUTCMonth()]; break;\n                case 'p': c = (isAM) ? (\"\" + \"am\") : (\"\" + \"pm\"); break;\n                case 'P': c = (isAM) ? (\"\" + \"AM\") : (\"\" + \"PM\"); break;\n                case '0': c = \"\"; padNext = true; break;\n                }\n                if (c && padNext) {\n                    c = leftPad(c);\n                    padNext = false;\n                }\n                r.push(c);\n                if (!padNext)\n                    escape = false;\n            }\n            else {\n                if (c == \"%\")\n                    escape = true;\n                else\n                    r.push(c);\n            }\n        }\n        return r.join(\"\");\n    };\n\n    // round to nearby lower multiple of base\n    function floorInBase(n, base) {\n        return base * Math.floor(n / base);\n    }\n\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/jquery.flot.pie.js",
    "content": "/*\nFlot plugin for rendering pie charts. The plugin assumes the data is\ncoming is as a single data value for each series, and each of those\nvalues is a positive value or zero (negative numbers don't make\nany sense and will cause strange effects). The data values do\nNOT need to be passed in as percentage values because it\ninternally calculates the total and percentages.\n\n* Created by Brian Medendorp, June 2009\n* Updated November 2009 with contributions from: btburnett3, Anthony Aragues and Xavi Ivars\n\n* Changes:\n\t2009-10-22: lineJoin set to round\n\t2009-10-23: IE full circle fix, donut\n\t2009-11-11: Added basic hover from btburnett3 - does not work in IE, and center is off in Chrome and Opera\n\t2009-11-17: Added IE hover capability submitted by Anthony Aragues\n\t2009-11-18: Added bug fix submitted by Xavi Ivars (issues with arrays when other JS libraries are included as well)\n\n\nAvailable options are:\nseries: {\n\tpie: {\n\t\tshow: true/false\n\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length, or 'auto'\n\t\tinnerRadius: 0-1 for percentage of fullsize or a specified pixel length, for creating a donut effect\n\t\tstartAngle: 0-2 factor of PI used for starting angle (in radians) i.e 3/2 starts at the top, 0 and 2 have the same result\n\t\ttilt: 0-1 for percentage to tilt the pie, where 1 is no tilt, and 0 is completely flat (nothing will show)\n\t\toffset: {\n\t\t\ttop: integer value to move the pie up or down\n\t\t\tleft: integer value to move the pie left or right, or 'auto'\n\t\t},\n\t\tstroke: {\n\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#FFF')\n\t\t\twidth: integer pixel width of the stroke\n\t\t},\n\t\tlabel: {\n\t\t\tshow: true/false, or 'auto'\n\t\t\tformatter:  a user-defined function that modifies the text/style of the label text\n\t\t\tradius: 0-1 for percentage of fullsize, or a specified pixel length\n\t\t\tbackground: {\n\t\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#000')\n\t\t\t\topacity: 0-1\n\t\t\t},\n\t\t\tthreshold: 0-1 for the percentage value at which to hide labels (if they're too small)\n\t\t},\n\t\tcombine: {\n\t\t\tthreshold: 0-1 for the percentage value at which to combine slices (if they're too small)\n\t\t\tcolor: any hexidecimal color value (other formats may or may not work, so best to stick with something like '#CCC'), if null, the plugin will automatically use the color of the first slice to be combined\n\t\t\tlabel: any text value of what the combined slice should be labeled\n\t\t}\n\t\thighlight: {\n\t\t\topacity: 0-1\n\t\t}\n\t}\n}\n\nMore detail and specific examples can be found in the included HTML file.\n\n*/\n\n(function ($)\n{\n\tfunction init(plot) // this is the \"body\" of the plugin\n\t{\n\t\tvar canvas = null;\n\t\tvar target = null;\n\t\tvar maxRadius = null;\n\t\tvar centerLeft = null;\n\t\tvar centerTop = null;\n\t\tvar total = 0;\n\t\tvar redraw = true;\n\t\tvar redrawAttempts = 10;\n\t\tvar shrink = 0.95;\n\t\tvar legendWidth = 0;\n\t\tvar processed = false;\n\t\tvar raw = false;\n\n\t\t// interactive variables\n\t\tvar highlights = [];\n\n\t\t// add hook to determine if pie plugin in enabled, and then perform necessary operations\n\t\tplot.hooks.processOptions.push(checkPieEnabled);\n\t\tplot.hooks.bindEvents.push(bindEvents);\n\n\t\t// check to see if the pie plugin is enabled\n\t\tfunction checkPieEnabled(plot, options)\n\t\t{\n\t\t\tif (options.series.pie.show)\n\t\t\t{\n\t\t\t\t//disable grid\n\t\t\t\toptions.grid.show = false;\n\n\t\t\t\t// set labels.show\n\t\t\t\tif (options.series.pie.label.show=='auto')\n\t\t\t\t\tif (options.legend.show)\n\t\t\t\t\t\toptions.series.pie.label.show = false;\n\t\t\t\t\telse\n\t\t\t\t\t\toptions.series.pie.label.show = true;\n\n\t\t\t\t// set radius\n\t\t\t\tif (options.series.pie.radius=='auto')\n\t\t\t\t\tif (options.series.pie.label.show)\n\t\t\t\t\t\toptions.series.pie.radius = 3/4;\n\t\t\t\t\telse\n\t\t\t\t\t\toptions.series.pie.radius = 1;\n\n\t\t\t\t// ensure sane tilt\n\t\t\t\tif (options.series.pie.tilt>1)\n\t\t\t\t\toptions.series.pie.tilt=1;\n\t\t\t\tif (options.series.pie.tilt<0)\n\t\t\t\t\toptions.series.pie.tilt=0;\n\n\t\t\t\t// add processData hook to do transformations on the data\n\t\t\t\tplot.hooks.processDatapoints.push(processDatapoints);\n\t\t\t\tplot.hooks.drawOverlay.push(drawOverlay);\n\n\t\t\t\t// add draw hook\n\t\t\t\tplot.hooks.draw.push(draw);\n\t\t\t}\n\t\t}\n\n\t\t// bind hoverable events\n\t\tfunction bindEvents(plot, eventHolder)\n\t\t{\n\t\t\tvar options = plot.getOptions();\n\n\t\t\tif (options.series.pie.show && options.grid.hoverable)\n\t\t\t\teventHolder.unbind('mousemove').mousemove(onMouseMove);\n\n\t\t\tif (options.series.pie.show && options.grid.clickable)\n\t\t\t\teventHolder.unbind('click').click(onClick);\n\t\t}\n\n\n\t\t// debugging function that prints out an object\n\t\tfunction alertObject(obj)\n\t\t{\n\t\t\tvar msg = '';\n\t\t\tfunction traverse(obj, depth)\n\t\t\t{\n\t\t\t\tif (!depth)\n\t\t\t\t\tdepth = 0;\n\t\t\t\tfor (var i = 0; i < obj.length; ++i)\n\t\t\t\t{\n\t\t\t\t\tfor (var j=0; j<depth; j++)\n\t\t\t\t\t\tmsg += '\\t';\n\n\t\t\t\t\tif( typeof obj[i] == \"object\")\n\t\t\t\t\t{\t// its an object\n\t\t\t\t\t\tmsg += ''+i+':\\n';\n\t\t\t\t\t\ttraverse(obj[i], depth+1);\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\t// its a value\n\t\t\t\t\t\tmsg += ''+i+': '+obj[i]+'\\n';\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\ttraverse(obj);\n\t\t\talert(msg);\n\t\t}\n\n\t\tfunction calcTotal(data)\n\t\t{\n\t\t\tfor (var i = 0; i < data.length; ++i)\n\t\t\t{\n\t\t\t\tvar item = parseFloat(data[i].data[0][1]);\n\t\t\t\tif (item)\n\t\t\t\t\ttotal += item;\n\t\t\t}\n\t\t}\n\n\t\tfunction processDatapoints(plot, series, data, datapoints)\n\t\t{\n\t\t\tif (!processed)\n\t\t\t{\n\t\t\t\tprocessed = true;\n\n\t\t\t\tcanvas = plot.getCanvas();\n\t\t\t\ttarget = $(canvas).parent();\n\t\t\t\toptions = plot.getOptions();\n\n\t\t\t\tplot.setData(combine(plot.getData()));\n\t\t\t}\n\t\t}\n\n\t\tfunction setupPie()\n\t\t{\n\t\t\tlegendWidth = target.children().filter('.legend').children().width();\n\n\t\t\t// calculate maximum radius and center point\n\t\t\tmaxRadius =  Math.min(canvas.width,(canvas.height/options.series.pie.tilt))/2;\n\t\t\tcenterTop = (canvas.height/2)+options.series.pie.offset.top;\n\t\t\tcenterLeft = (canvas.width/2);\n\n\t\t\tif (options.series.pie.offset.left=='auto')\n\t\t\t\tif (options.legend.position.match('w'))\n\t\t\t\t\tcenterLeft += legendWidth/2;\n\t\t\t\telse\n\t\t\t\t\tcenterLeft -= legendWidth/2;\n\t\t\telse\n\t\t\t\tcenterLeft += options.series.pie.offset.left;\n\n\t\t\tif (centerLeft<maxRadius)\n\t\t\t\tcenterLeft = maxRadius;\n\t\t\telse if (centerLeft>canvas.width-maxRadius)\n\t\t\t\tcenterLeft = canvas.width-maxRadius;\n\t\t}\n\n\t\tfunction fixData(data)\n\t\t{\n\t\t\tfor (var i = 0; i < data.length; ++i)\n\t\t\t{\n\t\t\t\tif (typeof(data[i].data)=='number')\n\t\t\t\t\tdata[i].data = [[1,data[i].data]];\n\t\t\t\telse if (typeof(data[i].data)=='undefined' || typeof(data[i].data[0])=='undefined')\n\t\t\t\t{\n\t\t\t\t\tif (typeof(data[i].data)!='undefined' && typeof(data[i].data.label)!='undefined')\n\t\t\t\t\t\tdata[i].label = data[i].data.label; // fix weirdness coming from flot\n\t\t\t\t\tdata[i].data = [[1,0]];\n\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn data;\n\t\t}\n\n\t\tfunction combine(data)\n\t\t{\n\t\t\tdata = fixData(data);\n\t\t\tcalcTotal(data);\n\t\t\tvar combined = 0;\n\t\t\tvar numCombined = 0;\n\t\t\tvar color = options.series.pie.combine.color;\n\n\t\t\tvar newdata = [];\n\t\t\tfor (var i = 0; i < data.length; ++i)\n\t\t\t{\n\t\t\t\t// make sure its a number\n\t\t\t\tdata[i].data[0][1] = parseFloat(data[i].data[0][1]);\n\t\t\t\tif (!data[i].data[0][1])\n\t\t\t\t\tdata[i].data[0][1] = 0;\n\n\t\t\t\tif (data[i].data[0][1]/total<=options.series.pie.combine.threshold)\n\t\t\t\t{\n\t\t\t\t\tcombined += data[i].data[0][1];\n\t\t\t\t\tnumCombined++;\n\t\t\t\t\tif (!color)\n\t\t\t\t\t\tcolor = data[i].color;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\tnewdata.push({\n\t\t\t\t\t\tdata: [[1,data[i].data[0][1]]],\n\t\t\t\t\t\tcolor: data[i].color,\n\t\t\t\t\t\tlabel: data[i].label,\n\t\t\t\t\t\tangle: (data[i].data[0][1]*(Math.PI*2))/total,\n\t\t\t\t\t\tpercent: (data[i].data[0][1]/total*100)\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (numCombined>0)\n\t\t\t\tnewdata.push({\n\t\t\t\t\tdata: [[1,combined]],\n\t\t\t\t\tcolor: color,\n\t\t\t\t\tlabel: options.series.pie.combine.label,\n\t\t\t\t\tangle: (combined*(Math.PI*2))/total,\n\t\t\t\t\tpercent: (combined/total*100)\n\t\t\t\t});\n\t\t\treturn newdata;\n\t\t}\n\n\t\tfunction draw(plot, newCtx)\n\t\t{\n\t\t\tif (!target) return; // if no series were passed\n\t\t\tctx = newCtx;\n\n\t\t\tsetupPie();\n\t\t\tvar slices = plot.getData();\n\n\t\t\tvar attempts = 0;\n\t\t\twhile (redraw && attempts<redrawAttempts)\n\t\t\t{\n\t\t\t\tredraw = false;\n\t\t\t\tif (attempts>0)\n\t\t\t\t\tmaxRadius *= shrink;\n\t\t\t\tattempts += 1;\n\t\t\t\tclear();\n\t\t\t\tif (options.series.pie.tilt<=0.8)\n\t\t\t\t\tdrawShadow();\n\t\t\t\tdrawPie();\n\t\t\t}\n\t\t\tif (attempts >= redrawAttempts) {\n\t\t\t\tclear();\n\t\t\t\ttarget.prepend('<div class=\"error\">Could not draw pie with labels contained inside canvas</div>');\n\t\t\t}\n\n\t\t\tif ( plot.setSeries && plot.insertLegend )\n\t\t\t{\n\t\t\t\tplot.setSeries(slices);\n\t\t\t\tplot.insertLegend();\n\t\t\t}\n\n\t\t\t// we're actually done at this point, just defining internal functions at this point\n\n\t\t\tfunction clear()\n\t\t\t{\n\t\t\t\tctx.clearRect(0,0,canvas.width,canvas.height);\n\t\t\t\ttarget.children().filter('.pieLabel, .pieLabelBackground').remove();\n\t\t\t}\n\n\t\t\tfunction drawShadow()\n\t\t\t{\n\t\t\t\tvar shadowLeft = 5;\n\t\t\t\tvar shadowTop = 15;\n\t\t\t\tvar edge = 10;\n\t\t\t\tvar alpha = 0.02;\n\n\t\t\t\t// set radius\n\t\t\t\tif (options.series.pie.radius>1)\n\t\t\t\t\tvar radius = options.series.pie.radius;\n\t\t\t\telse\n\t\t\t\t\tvar radius = maxRadius * options.series.pie.radius;\n\n\t\t\t\tif (radius>=(canvas.width/2)-shadowLeft || radius*options.series.pie.tilt>=(canvas.height/2)-shadowTop || radius<=edge)\n\t\t\t\t\treturn;\t// shadow would be outside canvas, so don't draw it\n\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(shadowLeft,shadowTop);\n\t\t\t\tctx.globalAlpha = alpha;\n\t\t\t\tctx.fillStyle = '#000';\n\n\t\t\t\t// center and rotate to starting position\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\n\t\t\t\t//radius -= edge;\n\t\t\t\tfor (var i=1; i<=edge; i++)\n\t\t\t\t{\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.arc(0,0,radius,0,Math.PI*2,false);\n\t\t\t\t\tctx.fill();\n\t\t\t\t\tradius -= i;\n\t\t\t\t}\n\n\t\t\t\tctx.restore();\n\t\t\t}\n\n\t\t\tfunction drawPie()\n\t\t\t{\n\t\t\t\tstartAngle = Math.PI*options.series.pie.startAngle;\n\n\t\t\t\t// set radius\n\t\t\t\tif (options.series.pie.radius>1)\n\t\t\t\t\tvar radius = options.series.pie.radius;\n\t\t\t\telse\n\t\t\t\t\tvar radius = maxRadius * options.series.pie.radius;\n\n\t\t\t\t// center and rotate to starting position\n\t\t\t\tctx.save();\n\t\t\t\tctx.translate(centerLeft,centerTop);\n\t\t\t\tctx.scale(1, options.series.pie.tilt);\n\t\t\t\t//ctx.rotate(startAngle); // start at top; -- This doesn't work properly in Opera\n\n\t\t\t\t// draw slices\n\t\t\t\tctx.save();\n\t\t\t\tvar currentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i)\n\t\t\t\t{\n\t\t\t\t\tslices[i].startAngle = currentAngle;\n\t\t\t\t\tdrawSlice(slices[i].angle, slices[i].color, true);\n\t\t\t\t}\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw slice outlines\n\t\t\t\tctx.save();\n\t\t\t\tctx.lineWidth = options.series.pie.stroke.width;\n\t\t\t\tcurrentAngle = startAngle;\n\t\t\t\tfor (var i = 0; i < slices.length; ++i)\n\t\t\t\t\tdrawSlice(slices[i].angle, options.series.pie.stroke.color, false);\n\t\t\t\tctx.restore();\n\n\t\t\t\t// draw donut hole\n\t\t\t\tdrawDonutHole(ctx);\n\n\t\t\t\t// draw labels\n\t\t\t\tif (options.series.pie.label.show)\n\t\t\t\t\tdrawLabels();\n\n\t\t\t\t// restore to original state\n\t\t\t\tctx.restore();\n\n\t\t\t\tfunction drawSlice(angle, color, fill)\n\t\t\t\t{\n\t\t\t\t\tif (angle<=0)\n\t\t\t\t\t\treturn;\n\n\t\t\t\t\tif (fill)\n\t\t\t\t\t\tctx.fillStyle = color;\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\tctx.strokeStyle = color;\n\t\t\t\t\t\tctx.lineJoin = 'round';\n\t\t\t\t\t}\n\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tif (Math.abs(angle - Math.PI*2) > 0.000000001)\n\t\t\t\t\t\tctx.moveTo(0,0); // Center of the pie\n\t\t\t\t\telse if ($.browser.msie)\n\t\t\t\t\t\tangle -= 0.0001;\n\t\t\t\t\t//ctx.arc(0,0,radius,0,angle,false); // This doesn't work properly in Opera\n\t\t\t\t\tctx.arc(0,0,radius,currentAngle,currentAngle+angle,false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\t//ctx.rotate(angle); // This doesn't work properly in Opera\n\t\t\t\t\tcurrentAngle += angle;\n\n\t\t\t\t\tif (fill)\n\t\t\t\t\t\tctx.fill();\n\t\t\t\t\telse\n\t\t\t\t\t\tctx.stroke();\n\t\t\t\t}\n\n\t\t\t\tfunction drawLabels()\n\t\t\t\t{\n\t\t\t\t\tvar currentAngle = startAngle;\n\n\t\t\t\t\t// set radius\n\t\t\t\t\tif (options.series.pie.label.radius>1)\n\t\t\t\t\t\tvar radius = options.series.pie.label.radius;\n\t\t\t\t\telse\n\t\t\t\t\t\tvar radius = maxRadius * options.series.pie.label.radius;\n\n\t\t\t\t\tfor (var i = 0; i < slices.length; ++i)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (slices[i].percent >= options.series.pie.label.threshold*100)\n\t\t\t\t\t\t\tdrawLabel(slices[i], currentAngle, i);\n\t\t\t\t\t\tcurrentAngle += slices[i].angle;\n\t\t\t\t\t}\n\n\t\t\t\t\tfunction drawLabel(slice, startAngle, index)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (slice.data[0][1]==0)\n\t\t\t\t\t\t\treturn;\n\n\t\t\t\t\t\t// format label text\n\t\t\t\t\t\tvar lf = options.legend.labelFormatter, text, plf = options.series.pie.label.formatter;\n\t\t\t\t\t\tif (lf)\n\t\t\t\t\t\t\ttext = lf(slice.label, slice);\n\t\t\t\t\t\telse\n\t\t\t\t\t\t\ttext = slice.label;\n\t\t\t\t\t\tif (plf)\n\t\t\t\t\t\t\ttext = plf(text, slice);\n\n\t\t\t\t\t\tvar halfAngle = ((startAngle+slice.angle) + startAngle)/2;\n\t\t\t\t\t\tvar x = centerLeft + Math.round(Math.cos(halfAngle) * radius);\n\t\t\t\t\t\tvar y = centerTop + Math.round(Math.sin(halfAngle) * radius) * options.series.pie.tilt;\n\n\t\t\t\t\t\tvar html = '<span class=\"pieLabel\" id=\"pieLabel'+index+'\" style=\"position:absolute;top:' + y + 'px;left:' + x + 'px;\">' + text + \"</span>\";\n\t\t\t\t\t\ttarget.append(html);\n\t\t\t\t\t\tvar label = target.children('#pieLabel'+index);\n\t\t\t\t\t\tvar labelTop = (y - label.height()/2);\n\t\t\t\t\t\tvar labelLeft = (x - label.width()/2);\n\t\t\t\t\t\tlabel.css('top', labelTop);\n\t\t\t\t\t\tlabel.css('left', labelLeft);\n\n\t\t\t\t\t\t// check to make sure that the label is not outside the canvas\n\t\t\t\t\t\tif (0-labelTop>0 || 0-labelLeft>0 || canvas.height-(labelTop+label.height())<0 || canvas.width-(labelLeft+label.width())<0)\n\t\t\t\t\t\t\tredraw = true;\n\n\t\t\t\t\t\tif (options.series.pie.label.background.opacity != 0) {\n\t\t\t\t\t\t\t// put in the transparent background separately to avoid blended labels and label boxes\n\t\t\t\t\t\t\tvar c = options.series.pie.label.background.color;\n\t\t\t\t\t\t\tif (c == null) {\n\t\t\t\t\t\t\t\tc = slice.color;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tvar pos = 'top:'+labelTop+'px;left:'+labelLeft+'px;';\n\t\t\t\t\t\t\t$('<div class=\"pieLabelBackground\" style=\"position:absolute;width:' + label.width() + 'px;height:' + label.height() + 'px;' + pos +'background-color:' + c + ';\"> </div>').insertBefore(label).css('opacity', options.series.pie.label.background.opacity);\n\t\t\t\t\t\t}\n\t\t\t\t\t} // end individual label function\n\t\t\t\t} // end drawLabels function\n\t\t\t} // end drawPie function\n\t\t} // end draw function\n\n\t\t// Placed here because it needs to be accessed from multiple locations\n\t\tfunction drawDonutHole(layer)\n\t\t{\n\t\t\t// draw donut hole\n\t\t\tif(options.series.pie.innerRadius > 0)\n\t\t\t{\n\t\t\t\t// subtract the center\n\t\t\t\tlayer.save();\n\t\t\t\tinnerRadius = options.series.pie.innerRadius > 1 ? options.series.pie.innerRadius : maxRadius * options.series.pie.innerRadius;\n\t\t\t\tlayer.globalCompositeOperation = 'destination-out'; // this does not work with excanvas, but it will fall back to using the stroke color\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.fillStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0,0,innerRadius,0,Math.PI*2,false);\n\t\t\t\tlayer.fill();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\n\t\t\t\t// add inner stroke\n\t\t\t\tlayer.save();\n\t\t\t\tlayer.beginPath();\n\t\t\t\tlayer.strokeStyle = options.series.pie.stroke.color;\n\t\t\t\tlayer.arc(0,0,innerRadius,0,Math.PI*2,false);\n\t\t\t\tlayer.stroke();\n\t\t\t\tlayer.closePath();\n\t\t\t\tlayer.restore();\n\t\t\t\t// TODO: add extra shadow inside hole (with a mask) if the pie is tilted.\n\t\t\t}\n\t\t}\n\n\t\t//-- Additional Interactive related functions --\n\n\t\tfunction isPointInPoly(poly, pt)\n\t\t{\n\t\t\tfor(var c = false, i = -1, l = poly.length, j = l - 1; ++i < l; j = i)\n\t\t\t\t((poly[i][1] <= pt[1] && pt[1] < poly[j][1]) || (poly[j][1] <= pt[1] && pt[1]< poly[i][1]))\n\t\t\t\t&& (pt[0] < (poly[j][0] - poly[i][0]) * (pt[1] - poly[i][1]) / (poly[j][1] - poly[i][1]) + poly[i][0])\n\t\t\t\t&& (c = !c);\n\t\t\treturn c;\n\t\t}\n\n\t\tfunction findNearbySlice(mouseX, mouseY)\n\t\t{\n\t\t\tvar slices = plot.getData(),\n\t\t\t\toptions = plot.getOptions(),\n\t\t\t\tradius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\tfor (var i = 0; i < slices.length; ++i)\n\t\t\t{\n\t\t\t\tvar s = slices[i];\n\n\t\t\t\tif(s.pie.show)\n\t\t\t\t{\n\t\t\t\t\tctx.save();\n\t\t\t\t\tctx.beginPath();\n\t\t\t\t\tctx.moveTo(0,0); // Center of the pie\n\t\t\t\t\t//ctx.scale(1, options.series.pie.tilt);\t// this actually seems to break everything when here.\n\t\t\t\t\tctx.arc(0,0,radius,s.startAngle,s.startAngle+s.angle,false);\n\t\t\t\t\tctx.closePath();\n\t\t\t\t\tx = mouseX-centerLeft;\n\t\t\t\t\ty = mouseY-centerTop;\n\t\t\t\t\tif(ctx.isPointInPath)\n\t\t\t\t\t{\n\t\t\t\t\t\tif (ctx.isPointInPath(mouseX-centerLeft, mouseY-centerTop))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\t//alert('found slice!');\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\telse\n\t\t\t\t\t{\n\t\t\t\t\t\t// excanvas for IE doesn;t support isPointInPath, this is a workaround.\n\t\t\t\t\t\tp1X = (radius * Math.cos(s.startAngle));\n\t\t\t\t\t\tp1Y = (radius * Math.sin(s.startAngle));\n\t\t\t\t\t\tp2X = (radius * Math.cos(s.startAngle+(s.angle/4)));\n\t\t\t\t\t\tp2Y = (radius * Math.sin(s.startAngle+(s.angle/4)));\n\t\t\t\t\t\tp3X = (radius * Math.cos(s.startAngle+(s.angle/2)));\n\t\t\t\t\t\tp3Y = (radius * Math.sin(s.startAngle+(s.angle/2)));\n\t\t\t\t\t\tp4X = (radius * Math.cos(s.startAngle+(s.angle/1.5)));\n\t\t\t\t\t\tp4Y = (radius * Math.sin(s.startAngle+(s.angle/1.5)));\n\t\t\t\t\t\tp5X = (radius * Math.cos(s.startAngle+s.angle));\n\t\t\t\t\t\tp5Y = (radius * Math.sin(s.startAngle+s.angle));\n\t\t\t\t\t\tarrPoly = [[0,0],[p1X,p1Y],[p2X,p2Y],[p3X,p3Y],[p4X,p4Y],[p5X,p5Y]];\n\t\t\t\t\t\tarrPoint = [x,y];\n\t\t\t\t\t\t// TODO: perhaps do some mathmatical trickery here with the Y-coordinate to compensate for pie tilt?\n\t\t\t\t\t\tif(isPointInPoly(arrPoly, arrPoint))\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tctx.restore();\n\t\t\t\t\t\t\treturn {datapoint: [s.percent, s.data], dataIndex: 0, series: s, seriesIndex: i};\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tctx.restore();\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn null;\n\t\t}\n\n\t\tfunction onMouseMove(e)\n\t\t{\n\t\t\ttriggerClickHoverEvent('plothover', e);\n\t\t}\n\n        function onClick(e)\n\t\t{\n\t\t\ttriggerClickHoverEvent('plotclick', e);\n        }\n\n\t\t// trigger click or hover event (they send the same parameters so we share their code)\n\t\tfunction triggerClickHoverEvent(eventname, e)\n\t\t{\n\t\t\tvar offset = plot.offset(),\n\t\t\t\tcanvasX = parseInt(e.pageX - offset.left),\n\t\t\t\tcanvasY =  parseInt(e.pageY - offset.top),\n\t\t\t\titem = findNearbySlice(canvasX, canvasY);\n\n\t\t\tif (options.grid.autoHighlight)\n\t\t\t{\n\t\t\t\t// clear auto-highlights\n\t\t\t\tfor (var i = 0; i < highlights.length; ++i)\n\t\t\t\t{\n\t\t\t\t\tvar h = highlights[i];\n\t\t\t\t\tif (h.auto == eventname && !(item && h.series == item.series))\n\t\t\t\t\t\tunhighlight(h.series);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// highlight the slice\n\t\t\tif (item)\n\t\t\t    highlight(item.series, eventname);\n\n\t\t\t// trigger any hover bind events\n\t\t\tvar pos = { pageX: e.pageX, pageY: e.pageY };\n\t\t\ttarget.trigger(eventname, [ pos, item ]);\n\t\t}\n\n\t\tfunction highlight(s, auto)\n\t\t{\n\t\t\tif (typeof s == \"number\")\n\t\t\t\ts = series[s];\n\n\t\t\tvar i = indexOfHighlight(s);\n\t\t\tif (i == -1)\n\t\t\t{\n\t\t\t\thighlights.push({ series: s, auto: auto });\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t\telse if (!auto)\n\t\t\t\thighlights[i].auto = false;\n\t\t}\n\n\t\tfunction unhighlight(s)\n\t\t{\n\t\t\tif (s == null)\n\t\t\t{\n\t\t\t\thighlights = [];\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\n\t\t\tif (typeof s == \"number\")\n\t\t\t\ts = series[s];\n\n\t\t\tvar i = indexOfHighlight(s);\n\t\t\tif (i != -1)\n\t\t\t{\n\t\t\t\thighlights.splice(i, 1);\n\t\t\t\tplot.triggerRedrawOverlay();\n\t\t\t}\n\t\t}\n\n\t\tfunction indexOfHighlight(s)\n\t\t{\n\t\t\tfor (var i = 0; i < highlights.length; ++i)\n\t\t\t{\n\t\t\t\tvar h = highlights[i];\n\t\t\t\tif (h.series == s)\n\t\t\t\t\treturn i;\n\t\t\t}\n\t\t\treturn -1;\n\t\t}\n\n\t\tfunction drawOverlay(plot, octx)\n\t\t{\n\t\t\t//alert(options.series.pie.radius);\n\t\t\tvar options = plot.getOptions();\n\t\t\t//alert(options.series.pie.radius);\n\n\t\t\tvar radius = options.series.pie.radius > 1 ? options.series.pie.radius : maxRadius * options.series.pie.radius;\n\n\t\t\toctx.save();\n\t\t\toctx.translate(centerLeft, centerTop);\n\t\t\toctx.scale(1, options.series.pie.tilt);\n\n\t\t\tfor (i = 0; i < highlights.length; ++i)\n\t\t\t\tdrawHighlight(highlights[i].series);\n\n\t\t\tdrawDonutHole(octx);\n\n\t\t\toctx.restore();\n\n\t\t\tfunction drawHighlight(series)\n\t\t\t{\n\t\t\t\tif (series.angle < 0) return;\n\n\t\t\t\t//octx.fillStyle = parseColor(options.series.pie.highlight.color).scale(null, null, null, options.series.pie.highlight.opacity).toString();\n\t\t\t\toctx.fillStyle = \"rgba(255, 255, 255, \"+options.series.pie.highlight.opacity+\")\"; // this is temporary until we have access to parseColor\n\n\t\t\t\toctx.beginPath();\n\t\t\t\tif (Math.abs(series.angle - Math.PI*2) > 0.000000001)\n\t\t\t\t\toctx.moveTo(0,0); // Center of the pie\n\t\t\t\toctx.arc(0,0,radius,series.startAngle,series.startAngle+series.angle,false);\n\t\t\t\toctx.closePath();\n\t\t\t\toctx.fill();\n\t\t\t}\n\n\t\t}\n\n\t} // end init (plugin body)\n\n\t// define pie specific options and their default values\n\tvar options = {\n\t\tseries: {\n\t\t\tpie: {\n\t\t\t\tshow: false,\n\t\t\t\tradius: 'auto',\t// actual radius of the visible pie (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\tinnerRadius:0, /* for donut */\n\t\t\t\tstartAngle: 3/2,\n\t\t\t\ttilt: 1,\n\t\t\t\toffset: {\n\t\t\t\t\ttop: 0,\n\t\t\t\t\tleft: 'auto'\n\t\t\t\t},\n\t\t\t\tstroke: {\n\t\t\t\t\tcolor: '#FFF',\n\t\t\t\t\twidth: 1\n\t\t\t\t},\n\t\t\t\tlabel: {\n\t\t\t\t\tshow: 'auto',\n\t\t\t\t\tformatter: function(label, slice){\n\t\t\t\t\t\treturn '<div style=\"font-size:x-small;text-align:center;padding:2px;color:'+slice.color+';\">'+label+'<br/>'+Math.round(slice.percent)+'%</div>';\n\t\t\t\t\t},\t// formatter function\n\t\t\t\t\tradius: 1,\t// radius at which to place the labels (based on full calculated radius if <=1, or hard pixel value)\n\t\t\t\t\tbackground: {\n\t\t\t\t\t\tcolor: null,\n\t\t\t\t\t\topacity: 0\n\t\t\t\t\t},\n\t\t\t\t\tthreshold: 0\t// percentage at which to hide the label (i.e. the slice is too narrow)\n\t\t\t\t},\n\t\t\t\tcombine: {\n\t\t\t\t\tthreshold: -1,\t// percentage at which to combine little slices into one larger slice\n\t\t\t\t\tcolor: null,\t// color to give the new slice (auto-generated if null)\n\t\t\t\t\tlabel: 'Other'\t// label to give the new slice\n\t\t\t\t},\n\t\t\t\thighlight: {\n\t\t\t\t\t//color: '#FFF',\t\t// will add this functionality once parseColor is available\n\t\t\t\t\topacity: 0.5\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t$.plot.plugins.push({\n\t\tinit: init,\n\t\toptions: options,\n\t\tname: \"pie\",\n\t\tversion: \"1.0\"\n\t});\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/jquery.flot.resize.js",
    "content": "/* Flot plugin for automatically redrawing plots as the placeholder resizes.\n\nCopyright (c) 2007-2013 IOLA and Ole Laursen.\nLicensed under the MIT license.\n\nIt works by listening for changes on the placeholder div (through the jQuery\nresize event plugin) - if the size changes, it will redraw the plot.\n\nThere are no options. If you need to disable the plugin for some plots, you\ncan just fix the size of their placeholders.\n\n*/\n\n/* Inline dependency:\n * jQuery resize event - v1.1 - 3/14/2010\n * http://benalman.com/projects/jquery-resize-plugin/\n *\n * Copyright (c) 2010 \"Cowboy\" Ben Alman\n * Dual licensed under the MIT and GPL licenses.\n * http://benalman.com/about/license/\n */\n\n(function($,h,c){var a=$([]),e=$.resize=$.extend($.resize,{}),i,k=\"setTimeout\",j=\"resize\",d=j+\"-special-event\",b=\"delay\",f=\"throttleWindow\";e[b]=250;e[f]=true;$.event.special[j]={setup:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.add(l);$.data(this,d,{w:l.width(),h:l.height()});if(a.length===1){g()}},teardown:function(){if(!e[f]&&this[k]){return false}var l=$(this);a=a.not(l);l.removeData(d);if(!a.length){clearTimeout(i)}},add:function(l){if(!e[f]&&this[k]){return false}var n;function m(s,o,p){var q=$(this),r=$.data(this,d);r.w=o!==c?o:q.width();r.h=p!==c?p:q.height();n.apply(this,arguments)}if($.isFunction(l)){n=l;return m}else{n=l.handler;l.handler=m}}};function g(){i=h[k](function(){a.each(function(){var n=$(this),m=n.width(),l=n.height(),o=$.data(this,d);if(m!==o.w||l!==o.h){n.trigger(j,[o.w=m,o.h=l])}});g()},e[b])}})(jQuery,this);\n\n(function ($) {\n    var options = { }; // no options\n\n    function init(plot) {\n        function onResize() {\n            var placeholder = plot.getPlaceholder();\n\n            // somebody might have hidden us and we can't plot\n            // when we don't have the dimensions\n            if (placeholder.width() == 0 || placeholder.height() == 0)\n                return;\n\n            plot.resize();\n            plot.setupGrid();\n            plot.draw();\n        }\n\n        function bindEvents(plot, eventHolder) {\n            plot.getPlaceholder().resize(onResize);\n        }\n\n        function shutdown(plot, eventHolder) {\n            plot.getPlaceholder().unbind(\"resize\", onResize);\n        }\n\n        plot.hooks.bindEvents.push(bindEvents);\n        plot.hooks.shutdown.push(shutdown);\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        options: options,\n        name: 'resize',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/jquery.flot.spline.js",
    "content": "/**\n * Flot plugin that provides spline interpolation for line graphs\n * author: Alex Bardas < alex.bardas@gmail.com >\n * modified by: Avi Kohn https://github.com/AMKohn\n * based on the spline interpolation described at:\n *\t\t http://scaledinnovation.com/analytics/splines/aboutSplines.html\n *\n * Example usage: (add in plot options series object)\n *\t\tfor linespline:\n *\t\t\tseries: {\n *\t\t\t\t...\n *\t\t\t\tlines: {\n *\t\t\t\t\tshow: false\n *\t\t\t\t},\n *\t\t\t\tsplines: {\n *\t\t\t\t\tshow: true,\n *\t\t\t\t\ttension: x, (float between 0 and 1, defaults to 0.5),\n *\t\t\t\t\tlineWidth: y (number, defaults to 2),\n *\t\t\t\t\tfill: z (float between 0 .. 1 or false, as in flot documentation)\n *\t\t\t\t},\n *\t\t\t\t...\n *\t\t\t}\n *\t\tareaspline:\n *\t\t\tseries: {\n *\t\t\t\t...\n *\t\t\t\tlines: {\n *\t\t\t\t\tshow: true,\n *\t\t\t\t\tlineWidth: 0, (line drawing will not execute)\n *\t\t\t\t\tfill: x, (float between 0 .. 1, as in flot documentation)\n *\t\t\t\t\t...\n *\t\t\t\t},\n *\t\t\t\tsplines: {\n *\t\t\t\t\tshow: true,\n *\t\t\t\t\ttension: 0.5 (float between 0 and 1)\n *\t\t\t\t},\n *\t\t\t\t...\n *\t\t\t}\n *\n */\n\n(function($) {\n    'use strict'\n\n    /**\n     * @param {Number} x0, y0, x1, y1: coordinates of the end (knot) points of the segment\n     * @param {Number} x2, y2: the next knot (not connected, but needed to calculate p2)\n     * @param {Number} tension: control how far the control points spread\n     * @return {Array}: p1 -> control point, from x1 back toward x0\n     * \t\t\t\t\tp2 -> the next control point, returned to become the next segment's p1\n     *\n     * @api private\n     */\n    function getControlPoints(x0, y0, x1, y1, x2, y2, tension) {\n\n        var pow = Math.pow,\n            sqrt = Math.sqrt,\n            d01, d12, fa, fb, p1x, p1y, p2x, p2y;\n\n        //  Scaling factors: distances from this knot to the previous and following knots.\n        d01 = sqrt(pow(x1 - x0, 2) + pow(y1 - y0, 2));\n        d12 = sqrt(pow(x2 - x1, 2) + pow(y2 - y1, 2));\n\n        fa = tension * d01 / (d01 + d12);\n        fb = tension - fa;\n\n        p1x = x1 + fa * (x0 - x2);\n        p1y = y1 + fa * (y0 - y2);\n\n        p2x = x1 - fb * (x0 - x2);\n        p2y = y1 - fb * (y0 - y2);\n\n        return [p1x, p1y, p2x, p2y];\n    }\n\n    var line = [];\n\n    function drawLine(points, ctx, height, fill, seriesColor) {\n        var c = $.color.parse(seriesColor);\n\n        c.a = typeof fill == \"number\" ? fill : .3;\n        c.normalize();\n        c = c.toString();\n\n        ctx.beginPath();\n        ctx.moveTo(points[0][0], points[0][1]);\n\n        var plength = points.length;\n\n        for (var i = 0; i < plength; i++) {\n            ctx[points[i][3]].apply(ctx, points[i][2]);\n        }\n\n        ctx.stroke();\n\n        ctx.lineWidth = 0;\n        ctx.lineTo(points[plength - 1][0], height);\n        ctx.lineTo(points[0][0], height);\n\n        ctx.closePath();\n\n        if (fill !== false) {\n            ctx.fillStyle = c;\n            ctx.fill();\n        }\n    }\n\n    /**\n     * @param {Object} ctx: canvas context\n     * @param {String} type: accepted strings: 'bezier' or 'quadratic' (defaults to quadratic)\n     * @param {Array} points: 2 points for which to draw the interpolation\n     * @param {Array} cpoints: control points for those segment points\n     *\n     * @api private\n     */\n    function queue(ctx, type, points, cpoints) {\n        if (type === void 0 || (type !== 'bezier' && type !== 'quadratic')) {\n            type = 'quadratic';\n        }\n        type = type + 'CurveTo';\n\n        if (line.length == 0) line.push([points[0], points[1], cpoints.concat(points.slice(2)), type]);\n        else if (type == \"quadraticCurveTo\" && points.length == 2) {\n            cpoints = cpoints.slice(0, 2).concat(points);\n\n            line.push([points[0], points[1], cpoints, type]);\n        }\n        else line.push([points[2], points[3], cpoints.concat(points.slice(2)), type]);\n    }\n\n    /**\n     * @param {Object} plot\n     * @param {Object} ctx: canvas context\n     * @param {Object} series\n     *\n     * @api private\n     */\n\n    function drawSpline(plot, ctx, series) {\n        // Not interested if spline is not requested\n        if (series.splines.show !== true) {\n            return;\n        }\n\n        var cp = [],\n        // array of control points\n            tension = series.splines.tension || 0.5,\n            idx, x, y, points = series.datapoints.points,\n            ps = series.datapoints.pointsize,\n            plotOffset = plot.getPlotOffset(),\n            len = points.length,\n            pts = [];\n\n        line = [];\n\n        // Cannot display a linespline/areaspline if there are less than 3 points\n        if (len / ps < 4) {\n            $.extend(series.lines, series.splines);\n            return;\n        }\n\n        for (idx = 0; idx < len; idx += ps) {\n            x = points[idx];\n            y = points[idx + 1];\n            if (x == null || x < series.xaxis.min || x > series.xaxis.max || y < series.yaxis.min || y > series.yaxis.max) {\n                continue;\n            }\n\n            pts.push(series.xaxis.p2c(x) + plotOffset.left, series.yaxis.p2c(y) + plotOffset.top);\n        }\n\n        len = pts.length;\n\n        // Draw an open curve, not connected at the ends\n        for (idx = 0; idx < len - 2; idx += 2) {\n            cp = cp.concat(getControlPoints.apply(this, pts.slice(idx, idx + 6).concat([tension])));\n        }\n\n        ctx.save();\n        ctx.strokeStyle = series.color;\n        ctx.lineWidth = series.splines.lineWidth;\n\n        queue(ctx, 'quadratic', pts.slice(0, 4), cp.slice(0, 2));\n\n        for (idx = 2; idx < len - 3; idx += 2) {\n            queue(ctx, 'bezier', pts.slice(idx, idx + 4), cp.slice(2 * idx - 2, 2 * idx + 2));\n        }\n\n        queue(ctx, 'quadratic', pts.slice(len - 2, len), [cp[2 * len - 10], cp[2 * len - 9], pts[len - 4], pts[len - 3]]);\n\n        drawLine(line, ctx, plot.height() + 10, series.splines.fill, series.color);\n\n        ctx.restore();\n    }\n\n    $.plot.plugins.push({\n        init: function(plot) {\n            plot.hooks.drawSeries.push(drawSpline);\n        },\n        options: {\n            series: {\n                splines: {\n                    show: false,\n                    lineWidth: 2,\n                    tension: 0.5,\n                    fill: false\n                }\n            }\n        },\n        name: 'spline',\n        version: '0.8.2'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/flot/jquery.flot.symbol.js",
    "content": "/* Flot plugin that adds some extra symbols for plotting points.\n\n Copyright (c) 2007-2014 IOLA and Ole Laursen.\n Licensed under the MIT license.\n\n The symbols are accessed as strings through the standard symbol options:\n\n series: {\n points: {\n symbol: \"square\" // or \"diamond\", \"triangle\", \"cross\"\n }\n }\n\n */\n\n(function ($) {\n    function processRawData(plot, series, datapoints) {\n        // we normalize the area of each symbol so it is approximately the\n        // same as a circle of the given radius\n\n        var handlers = {\n            square: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.rect(x - size, y - size, size + size, size + size);\n            },\n            diamond: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 2s^2  =>  s = r * sqrt(pi/2)\n                var size = radius * Math.sqrt(Math.PI / 2);\n                ctx.moveTo(x - size, y);\n                ctx.lineTo(x, y - size);\n                ctx.lineTo(x + size, y);\n                ctx.lineTo(x, y + size);\n                ctx.lineTo(x - size, y);\n            },\n            triangle: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = 1/2 * s^2 * sin (pi / 3)  =>  s = r * sqrt(2 * pi / sin(pi / 3))\n                var size = radius * Math.sqrt(2 * Math.PI / Math.sin(Math.PI / 3));\n                var height = size * Math.sin(Math.PI / 3);\n                ctx.moveTo(x - size/2, y + height/2);\n                ctx.lineTo(x + size/2, y + height/2);\n                if (!shadow) {\n                    ctx.lineTo(x, y - height/2);\n                    ctx.lineTo(x - size/2, y + height/2);\n                }\n            },\n            cross: function (ctx, x, y, radius, shadow) {\n                // pi * r^2 = (2s)^2  =>  s = r * sqrt(pi)/2\n                var size = radius * Math.sqrt(Math.PI) / 2;\n                ctx.moveTo(x - size, y - size);\n                ctx.lineTo(x + size, y + size);\n                ctx.moveTo(x - size, y + size);\n                ctx.lineTo(x + size, y - size);\n            }\n        };\n\n        var s = series.points.symbol;\n        if (handlers[s])\n            series.points.symbol = handlers[s];\n    }\n\n    function init(plot) {\n        plot.hooks.processDatapoints.push(processRawData);\n    }\n\n    $.plot.plugins.push({\n        init: init,\n        name: 'symbols',\n        version: '1.0'\n    });\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/gritter/jquery.gritter.css",
    "content": "/* the norm */\n#gritter-notice-wrapper {\n\tposition:fixed;\n\ttop:40px;\n\tright:20px;\n\twidth:301px;\n\tz-index:9999;\n\n    -webkit-animation-duration: 1s;\n    animation-duration: 1s;\n    -webkit-animation-fill-mode: both;\n    animation-fill-mode: both;\n\n    -webkit-animation-name: bounceIn;\n    animation-name: bounceIn;\n}\n@keyframes bounceIn {\n    0% {\n        opacity: 0;\n        -webkit-transform: scale(.3);\n        -ms-transform: scale(.3);\n        transform: scale(.3);\n    }\n\n    50% {\n        opacity: 1;\n        -webkit-transform: scale(1.05);\n        -ms-transform: scale(1.05);\n        transform: scale(1.05);\n    }\n\n    70% {\n        -webkit-transform: scale(.9);\n        -ms-transform: scale(.9);\n        transform: scale(.9);\n    }\n\n    100% {\n        opacity: 1;\n        -webkit-transform: scale(1);\n        -ms-transform: scale(1);\n        transform: scale(1);\n    }\n}\n#gritter-notice-wrapper.top-left {\n    left: 20px;\n    right: auto;\n}\n#gritter-notice-wrapper.bottom-right {\n    top: auto;\n    left: auto;\n    bottom: 20px;\n    right: 20px;\n}\n#gritter-notice-wrapper.bottom-left {\n    top: auto;\n    right: auto;\n    bottom: 20px;\n    left: 20px;\n}\n.gritter-item-wrapper {\n\tposition:relative;\n\tmargin:0 0 10px 0;\n\tbackground:url('images/ie-spacer.gif'); /* ie7/8 fix */\n}\n\n.hover .gritter-top {\n\t/*background-position:right -30px;*/\n}\n.gritter-bottom {\n\theight:8px;\n\tmargin:0;\n}\n\n.gritter-item {\n\tdisplay:block;\n\tbackground-color: rgba(39,58,75,0.8);\n    border-radius: 4px;\n\tcolor:#eee;\n\tpadding:10px 11px 10px 11px;\n\tfont-size: 11px;\n\tfont-family:verdana;\n}\n.hover .gritter-item {\n\tbackground-position:right -40px;\n}\n.gritter-item p {\n\tpadding:0;\n\tmargin:0;\n\tword-wrap:break-word;\n}\n\n.gritter-item a:hover {\n    color: #f8ac59;\n    text-decoration: underline;\n}\n.gritter-close {\n\tdisplay:none;\n\tposition:absolute;\n\ttop:5px;\n\tright:3px;\n\tbackground:url(images/gritter.png) no-repeat left top;\n\tcursor:pointer;\n\twidth:30px;\n\theight:30px;\n\ttext-indent:-9999em;\n}\n.gritter-title {\n\tfont-size:12px;\n\tfont-weight:bold;\n\tpadding:0 0 7px 0;\n\tdisplay:block;\n    text-transform: uppercase;\n}\n.gritter-image {\n\twidth:48px;\n\theight:48px;\n\tfloat:left;\n}\n.gritter-with-image,\n.gritter-without-image {\n\tpadding:0;\n}\n.gritter-with-image {\n\twidth:220px;\n\tfloat:right;\n}\n/* for the light (white) version of the gritter notice */\n.gritter-light .gritter-item,\n.gritter-light .gritter-bottom,\n.gritter-light .gritter-top,\n.gritter-light .gritter-close {\n    background-image: url(images/gritter-light.png);\n    color: #222;\n}\n.gritter-light .gritter-title {\n    text-shadow: none;\n}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/jeditable/jquery.jeditable.js",
    "content": "/*\n * Jeditable - jQuery in place edit plugin\n *\n * Copyright (c) 2006-2009 Mika Tuupola, Dylan Verheul\n *\n * Licensed under the MIT license:\n *   http://www.opensource.org/licenses/mit-license.php\n *\n * Project home:\n *   http://www.appelsiini.net/projects/jeditable\n *\n * Based on editable by Dylan Verheul <dylan_at_dyve.net>:\n *    http://www.dyve.net/jquery/?editable\n *\n */\n\n/**\n * Version 1.7.1\n *\n * ** means there is basic unit tests for this parameter.\n *\n * @name  Jeditable\n * @type  jQuery\n * @param String  target             (POST) URL or function to send edited content to **\n * @param Hash    options            additional options\n * @param String  options[method]    method to use to send edited content (POST or PUT) **\n * @param Function options[callback] Function to run after submitting edited content **\n * @param String  options[name]      POST parameter name of edited content\n * @param String  options[id]        POST parameter name of edited div id\n * @param Hash    options[submitdata] Extra parameters to send when submitting edited content.\n * @param String  options[type]      text, textarea or select (or any 3rd party input type) **\n * @param Integer options[rows]      number of rows if using textarea **\n * @param Integer options[cols]      number of columns if using textarea **\n * @param Mixed   options[height]    'auto', 'none' or height in pixels **\n * @param Mixed   options[width]     'auto', 'none' or width in pixels **\n * @param String  options[loadurl]   URL to fetch input content before editing **\n * @param String  options[loadtype]  Request type for load url. Should be GET or POST.\n * @param String  options[loadtext]  Text to display while loading external content.\n * @param Mixed   options[loaddata]  Extra parameters to pass when fetching content before editing.\n * @param Mixed   options[data]      Or content given as paramameter. String or function.**\n * @param String  options[indicator] indicator html to show when saving\n * @param String  options[tooltip]   optional tooltip text via title attribute **\n * @param String  options[event]     jQuery event such as 'click' of 'dblclick' **\n * @param String  options[submit]    submit button value, empty means no button **\n * @param String  options[cancel]    cancel button value, empty means no button **\n * @param String  options[cssclass]  CSS class to apply to input form. 'inherit' to copy from parent. **\n * @param String  options[style]     Style to apply to input form 'inherit' to copy from parent. **\n * @param String  options[select]    true or false, when true text is highlighted ??\n * @param String  options[placeholder] Placeholder text or html to insert when element is empty. **\n * @param String  options[onblur]    'cancel', 'submit', 'ignore' or function ??\n *\n * @param Function options[onsubmit] function(settings, original) { ... } called before submit\n * @param Function options[onreset]  function(settings, original) { ... } called before reset\n * @param Function options[onerror]  function(settings, original, xhr) { ... } called on error\n *\n * @param Hash    options[ajaxoptions]  jQuery Ajax options. See docs.jquery.com.\n *\n */\n\n(function($) {\n\n    $.fn.editable = function(target, options) {\n\n        if ('disable' == target) {\n            $(this).data('disabled.editable', true);\n            return;\n        }\n        if ('enable' == target) {\n            $(this).data('disabled.editable', false);\n            return;\n        }\n        if ('destroy' == target) {\n            $(this)\n                .unbind($(this).data('event.editable'))\n                .removeData('disabled.editable')\n                .removeData('event.editable');\n            return;\n        }\n\n        var settings = $.extend({}, $.fn.editable.defaults, {target:target}, options);\n\n        /* setup some functions */\n        var plugin   = $.editable.types[settings.type].plugin || function() { };\n        var submit   = $.editable.types[settings.type].submit || function() { };\n        var buttons  = $.editable.types[settings.type].buttons\n            || $.editable.types['defaults'].buttons;\n        var content  = $.editable.types[settings.type].content\n            || $.editable.types['defaults'].content;\n        var element  = $.editable.types[settings.type].element\n            || $.editable.types['defaults'].element;\n        var reset    = $.editable.types[settings.type].reset\n            || $.editable.types['defaults'].reset;\n        var callback = settings.callback || function() { };\n        var onedit   = settings.onedit   || function() { };\n        var onsubmit = settings.onsubmit || function() { };\n        var onreset  = settings.onreset  || function() { };\n        var onerror  = settings.onerror  || reset;\n\n        /* show tooltip */\n        if (settings.tooltip) {\n            $(this).attr('title', settings.tooltip);\n        }\n\n        settings.autowidth  = 'auto' == settings.width;\n        settings.autoheight = 'auto' == settings.height;\n\n        return this.each(function() {\n\n            /* save this to self because this changes when scope changes */\n            var self = this;\n\n            /* inlined block elements lose their width and height after first edit */\n            /* save them for later use as workaround */\n            var savedwidth  = $(self).width();\n            var savedheight = $(self).height();\n\n            /* save so it can be later used by $.editable('destroy') */\n            $(this).data('event.editable', settings.event);\n\n            /* if element is empty add something clickable (if requested) */\n            if (!$.trim($(this).html())) {\n                $(this).html(settings.placeholder);\n            }\n\n            $(this).bind(settings.event, function(e) {\n\n                /* abort if disabled for this element */\n                if (true === $(this).data('disabled.editable')) {\n                    return;\n                }\n\n                /* prevent throwing an exeption if edit field is clicked again */\n                if (self.editing) {\n                    return;\n                }\n\n                /* abort if onedit hook returns false */\n                if (false === onedit.apply(this, [settings, self])) {\n                    return;\n                }\n\n                /* prevent default action and bubbling */\n                e.preventDefault();\n                e.stopPropagation();\n\n                /* remove tooltip */\n                if (settings.tooltip) {\n                    $(self).removeAttr('title');\n                }\n\n                /* figure out how wide and tall we are, saved width and height */\n                /* are workaround for http://dev.jquery.com/ticket/2190 */\n                if (0 == $(self).width()) {\n                    //$(self).css('visibility', 'hidden');\n                    settings.width  = savedwidth;\n                    settings.height = savedheight;\n                } else {\n                    if (settings.width != 'none') {\n                        settings.width =\n                            settings.autowidth ? $(self).width()  : settings.width;\n                    }\n                    if (settings.height != 'none') {\n                        settings.height =\n                            settings.autoheight ? $(self).height() : settings.height;\n                    }\n                }\n                //$(this).css('visibility', '');\n\n                /* remove placeholder text, replace is here because of IE */\n                if ($(this).html().toLowerCase().replace(/(;|\")/g, '') ==\n                    settings.placeholder.toLowerCase().replace(/(;|\")/g, '')) {\n                    $(this).html('');\n                }\n\n                self.editing    = true;\n                self.revert     = $(self).html();\n                $(self).html('');\n\n                /* create the form object */\n                var form = $('<form />');\n\n                /* apply css or style or both */\n                if (settings.cssclass) {\n                    if ('inherit' == settings.cssclass) {\n                        form.attr('class', $(self).attr('class'));\n                    } else {\n                        form.attr('class', settings.cssclass);\n                    }\n                }\n\n                if (settings.style) {\n                    if ('inherit' == settings.style) {\n                        form.attr('style', $(self).attr('style'));\n                        /* IE needs the second line or display wont be inherited */\n                        form.css('display', $(self).css('display'));\n                    } else {\n                        form.attr('style', settings.style);\n                    }\n                }\n\n                /* add main input element to form and store it in input */\n                var input = element.apply(form, [settings, self]);\n\n                /* set input content via POST, GET, given data or existing value */\n                var input_content;\n\n                if (settings.loadurl) {\n                    var t = setTimeout(function() {\n                        input.disabled = true;\n                        content.apply(form, [settings.loadtext, settings, self]);\n                    }, 100);\n\n                    var loaddata = {};\n                    loaddata[settings.id] = self.id;\n                    if ($.isFunction(settings.loaddata)) {\n                        $.extend(loaddata, settings.loaddata.apply(self, [self.revert, settings]));\n                    } else {\n                        $.extend(loaddata, settings.loaddata);\n                    }\n                    $.ajax({\n                        type : settings.loadtype,\n                        url  : settings.loadurl,\n                        data : loaddata,\n                        async : false,\n                        success: function(result) {\n                            window.clearTimeout(t);\n                            input_content = result;\n                            input.disabled = false;\n                        }\n                    });\n                } else if (settings.data) {\n                    input_content = settings.data;\n                    if ($.isFunction(settings.data)) {\n                        input_content = settings.data.apply(self, [self.revert, settings]);\n                    }\n                } else {\n                    input_content = self.revert;\n                }\n                content.apply(form, [input_content, settings, self]);\n\n                input.attr('name', settings.name);\n\n                /* add buttons to the form */\n                buttons.apply(form, [settings, self]);\n\n                /* add created form to self */\n                $(self).append(form);\n\n                /* attach 3rd party plugin if requested */\n                plugin.apply(form, [settings, self]);\n\n                /* focus to first visible form element */\n                $(':input:visible:enabled:first', form).focus();\n\n                /* highlight input contents when requested */\n                if (settings.select) {\n                    input.select();\n                }\n\n                /* discard changes if pressing esc */\n                input.keydown(function(e) {\n                    if (e.keyCode == 27) {\n                        e.preventDefault();\n                        //self.reset();\n                        reset.apply(form, [settings, self]);\n                    }\n                });\n\n                /* discard, submit or nothing with changes when clicking outside */\n                /* do nothing is usable when navigating with tab */\n                var t;\n                if ('cancel' == settings.onblur) {\n                    input.blur(function(e) {\n                        /* prevent canceling if submit was clicked */\n                        t = setTimeout(function() {\n                            reset.apply(form, [settings, self]);\n                        }, 500);\n                    });\n                } else if ('submit' == settings.onblur) {\n                    input.blur(function(e) {\n                        /* prevent double submit if submit was clicked */\n                        t = setTimeout(function() {\n                            form.submit();\n                        }, 200);\n                    });\n                } else if ($.isFunction(settings.onblur)) {\n                    input.blur(function(e) {\n                        settings.onblur.apply(self, [input.val(), settings]);\n                    });\n                } else {\n                    input.blur(function(e) {\n                        /* TODO: maybe something here */\n                    });\n                }\n\n                form.submit(function(e) {\n\n                    if (t) {\n                        clearTimeout(t);\n                    }\n\n                    /* do no submit */\n                    e.preventDefault();\n\n                    /* call before submit hook. */\n                    /* if it returns false abort submitting */\n                    if (false !== onsubmit.apply(form, [settings, self])) {\n                        /* custom inputs call before submit hook. */\n                        /* if it returns false abort submitting */\n                        if (false !== submit.apply(form, [settings, self])) {\n\n                            /* check if given target is function */\n                            if ($.isFunction(settings.target)) {\n                                var str = settings.target.apply(self, [input.val(), settings]);\n                                $(self).html(str);\n                                self.editing = false;\n                                callback.apply(self, [self.innerHTML, settings]);\n                                /* TODO: this is not dry */\n                                if (!$.trim($(self).html())) {\n                                    $(self).html(settings.placeholder);\n                                }\n                            } else {\n                                /* add edited content and id of edited element to POST */\n                                var submitdata = {};\n                                submitdata[settings.name] = input.val();\n                                submitdata[settings.id] = self.id;\n                                /* add extra data to be POST:ed */\n                                if ($.isFunction(settings.submitdata)) {\n                                    $.extend(submitdata, settings.submitdata.apply(self, [self.revert, settings]));\n                                } else {\n                                    $.extend(submitdata, settings.submitdata);\n                                }\n\n                                /* quick and dirty PUT support */\n                                if ('PUT' == settings.method) {\n                                    submitdata['_method'] = 'put';\n                                }\n\n                                /* show the saving indicator */\n                                $(self).html(settings.indicator);\n\n                                /* defaults for ajaxoptions */\n                                var ajaxoptions = {\n                                    type    : 'POST',\n                                    data    : submitdata,\n                                    dataType: 'html',\n                                    url     : settings.target,\n                                    success : function(result, status) {\n                                        if (ajaxoptions.dataType == 'html') {\n                                            $(self).html(result);\n                                        }\n                                        self.editing = false;\n                                        callback.apply(self, [result, settings]);\n                                        if (!$.trim($(self).html())) {\n                                            $(self).html(settings.placeholder);\n                                        }\n                                    },\n                                    error   : function(xhr, status, error) {\n                                        onerror.apply(form, [settings, self, xhr]);\n                                    }\n                                };\n\n                                /* override with what is given in settings.ajaxoptions */\n                                $.extend(ajaxoptions, settings.ajaxoptions);\n                                $.ajax(ajaxoptions);\n\n                            }\n                        }\n                    }\n\n                    /* show tooltip again */\n                    $(self).attr('title', settings.tooltip);\n\n                    return false;\n                });\n            });\n\n            /* privileged methods */\n            this.reset = function(form) {\n                /* prevent calling reset twice when blurring */\n                if (this.editing) {\n                    /* before reset hook, if it returns false abort reseting */\n                    if (false !== onreset.apply(form, [settings, self])) {\n                        $(self).html(self.revert);\n                        self.editing   = false;\n                        if (!$.trim($(self).html())) {\n                            $(self).html(settings.placeholder);\n                        }\n                        /* show tooltip again */\n                        if (settings.tooltip) {\n                            $(self).attr('title', settings.tooltip);\n                        }\n                    }\n                }\n            };\n        });\n\n    };\n\n\n    $.editable = {\n        types: {\n            defaults: {\n                element : function(settings, original) {\n                    var input = $('<input type=\"hidden\"></input>');\n                    $(this).append(input);\n                    return(input);\n                },\n                content : function(string, settings, original) {\n                    $(':input:first', this).val(string);\n                },\n                reset : function(settings, original) {\n                    original.reset(this);\n                },\n                buttons : function(settings, original) {\n                    var form = this;\n                    if (settings.submit) {\n                        /* if given html string use that */\n                        if (settings.submit.match(/>$/)) {\n                            var submit = $(settings.submit).click(function() {\n                                if (submit.attr(\"type\") != \"submit\") {\n                                    form.submit();\n                                }\n                            });\n                            /* otherwise use button with given string as text */\n                        } else {\n                            var submit = $('<button type=\"submit\" />');\n                            submit.html(settings.submit);\n                        }\n                        $(this).append(submit);\n                    }\n                    if (settings.cancel) {\n                        /* if given html string use that */\n                        if (settings.cancel.match(/>$/)) {\n                            var cancel = $(settings.cancel);\n                            /* otherwise use button with given string as text */\n                        } else {\n                            var cancel = $('<button type=\"cancel\" />');\n                            cancel.html(settings.cancel);\n                        }\n                        $(this).append(cancel);\n\n                        $(cancel).click(function(event) {\n                            //original.reset();\n                            if ($.isFunction($.editable.types[settings.type].reset)) {\n                                var reset = $.editable.types[settings.type].reset;\n                            } else {\n                                var reset = $.editable.types['defaults'].reset;\n                            }\n                            reset.apply(form, [settings, original]);\n                            return false;\n                        });\n                    }\n                }\n            },\n            text: {\n                element : function(settings, original) {\n                    var input = $('<input />');\n                    if (settings.width  != 'none') { input.width(settings.width);  }\n                    if (settings.height != 'none') { input.height(settings.height); }\n                    /* https://bugzilla.mozilla.org/show_bug.cgi?id=236791 */\n                    //input[0].setAttribute('autocomplete','off');\n                    input.attr('autocomplete','off');\n                    $(this).append(input);\n                    return(input);\n                }\n            },\n            textarea: {\n                element : function(settings, original) {\n                    var textarea = $('<textarea />');\n                    if (settings.rows) {\n                        textarea.attr('rows', settings.rows);\n                    } else if (settings.height != \"none\") {\n                        textarea.height(settings.height);\n                    }\n                    if (settings.cols) {\n                        textarea.attr('cols', settings.cols);\n                    } else if (settings.width != \"none\") {\n                        textarea.width(settings.width);\n                    }\n                    $(this).append(textarea);\n                    return(textarea);\n                }\n            },\n            select: {\n                element : function(settings, original) {\n                    var select = $('<select />');\n                    $(this).append(select);\n                    return(select);\n                },\n                content : function(data, settings, original) {\n                    /* If it is string assume it is json. */\n                    if (String == data.constructor) {\n                        eval ('var json = ' + data);\n                    } else {\n                        /* Otherwise assume it is a hash already. */\n                        var json = data;\n                    }\n                    for (var key in json) {\n                        if (!json.hasOwnProperty(key)) {\n                            continue;\n                        }\n                        if ('selected' == key) {\n                            continue;\n                        }\n                        var option = $('<option />').val(key).append(json[key]);\n                        $('select', this).append(option);\n                    }\n                    /* Loop option again to set selected. IE needed this... */\n                    $('select', this).children().each(function() {\n                        if ($(this).val() == json['selected'] ||\n                            $(this).text() == $.trim(original.revert)) {\n                            $(this).attr('selected', 'selected');\n                        }\n                    });\n                }\n            }\n        },\n\n        /* Add new input type */\n        addInputType: function(name, input) {\n            $.editable.types[name] = input;\n        }\n    };\n\n    // publicly accessible defaults\n    $.fn.editable.defaults = {\n        name       : 'value',\n        id         : 'id',\n        type       : 'text',\n        width      : 'auto',\n        height     : 'auto',\n        event      : 'click.editable',\n        onblur     : 'cancel',\n        loadtype   : 'GET',\n        loadtext   : 'Loading...',\n        placeholder: 'Click to edit',\n        loaddata   : {},\n        submitdata : {},\n        ajaxoptions: {}\n    };\n\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/jqgrid/i18n/grid.locale-cnffe4.js",
    "content": "/**\n * jqGrid Chinese Translation\n * 咖啡兔 yanhonglei@gmail.com\n * http://www.kafeitu.me\n * Dual licensed under the MIT and GPL licenses:\n * http://www.opensource.org/licenses/mit-license.php\n * http://www.gnu.org/licenses/gpl.html\n**/\n/*global jQuery, define */\n(function( factory ) {\n\t\"use strict\";\n\tif ( typeof define === \"function\" && define.amd ) {\n\t\t// AMD. Register as an anonymous module.\n\t\tdefine([\n\t\t\t\"jquery\",\n\t\t\t\"../grid.base\"\n\t\t], factory );\n\t} else {\n\t\t// Browser globals\n\t\tfactory( jQuery );\n\t}\n}(function( $ ) {\n\n$.jgrid = $.jgrid || {};\nif(!$.jgrid.hasOwnProperty(\"regional\")) {\n\t$.jgrid.regional = [];\n}\n$.jgrid.regional[\"cn\"] = {\n    defaults : {\n        recordtext: \"{0} - {1}\\u3000共 {2} 条\", // 共字前是全角空格\n        emptyrecords: \"无数据显示\",\n        loadtext: \"读取中...\",\n\t\tsavetext: \"Saving...\",\n        pgtext : \" {0} 共 {1} 页\",\n\t\tpgfirst : \"First Page\",\n\t\tpglast : \"Last Page\",\n\t\tpgnext : \"Next Page\",\n\t\tpgprev : \"Previous Page\",\n\t\tpgrecs : \"Records per Page\",\n\t\tshowhide: \"Toggle Expand Collapse Grid\",\n\t\t// mobile\n\t\tpagerCaption : \"Grid::Page Settings\",\n\t\tpageText : \"Page:\",\n\t\trecordPage : \"Records per Page\",\n\t\tnomorerecs : \"No more records...\",\n\t\tscrollPullup: \"Pull up to load more...\",\n\t\tscrollPulldown : \"Pull down to refresh...\",\n\t\tscrollRefresh : \"Release to refresh...\"\n    },\n    search : {\n        caption: \"搜索...\",\n        Find: \"查找\",\n        Reset: \"重置\",\n        odata: [{ oper:'eq', text:'等于\\u3000\\u3000'},{ oper:'ne', text:'不等\\u3000\\u3000'},{ oper:'lt', text:'小于\\u3000\\u3000'},{ oper:'le', text:'小于等于'},{ oper:'gt', text:'大于\\u3000\\u3000'},{ oper:'ge', text:'大于等于'},{ oper:'bw', text:'开始于'},{ oper:'bn', text:'不开始于'},{ oper:'in', text:'属于\\u3000\\u3000'},{ oper:'ni', text:'不属于'},{ oper:'ew', text:'结束于'},{ oper:'en', text:'不结束于'},{ oper:'cn', text:'包含\\u3000\\u3000'},{ oper:'nc', text:'不包含'},{ oper:'nu', text:'不存在'},{ oper:'nn', text:'存在'}],\n        groupOps: [ { op: \"AND\", text: \"所有\" },    { op: \"OR\",  text: \"任一\" } ],\n\t\toperandTitle : \"Click to select search operation.\",\n\t\tresetTitle : \"Reset Search Value\"\n    },\n    edit : {\n        addCaption: \"添加记录\",\n        editCaption: \"编辑记录\",\n        bSubmit: \"提交\",\n        bCancel: \"取消\",\n        bClose: \"关闭\",\n        saveData: \"数据已改变，是否保存？\",\n        bYes : \"是\",\n        bNo : \"否\",\n        bExit : \"取消\",\n        msg: {\n            required:\"此字段必需\",\n            number:\"请输入有效数字\",\n            minValue:\"输值必须大于等于 \",\n            maxValue:\"输值必须小于等于 \",\n            email: \"这不是有效的e-mail地址\",\n            integer: \"请输入有效整数\",\n            date: \"请输入有效时间\",\n            url: \"无效网址。前缀必须为 ('http://' 或 'https://')\",\n            nodefined : \" 未定义！\",\n            novalue : \" 需要返回值！\",\n            customarray : \"自定义函数需要返回数组！\",\n            customfcheck : \"必须有自定义函数!\"\n        }\n    },\n    view : {\n        caption: \"查看记录\",\n        bClose: \"关闭\"\n    },\n    del : {\n        caption: \"删除\",\n        msg: \"删除所选记录？\",\n        bSubmit: \"删除\",\n        bCancel: \"取消\"\n    },\n    nav : {\n        edittext: \"\",\n        edittitle: \"编辑所选记录\",\n        addtext:\"\",\n        addtitle: \"添加新记录\",\n        deltext: \"\",\n        deltitle: \"删除所选记录\",\n        searchtext: \"\",\n        searchtitle: \"查找\",\n        refreshtext: \"\",\n        refreshtitle: \"刷新表格\",\n        alertcap: \"注意\",\n        alerttext: \"请选择记录\",\n        viewtext: \"\",\n        viewtitle: \"查看所选记录\",\n\t\tsavetext: \"\",\n\t\tsavetitle: \"Save row\",\n\t\tcanceltext: \"\",\n\t\tcanceltitle : \"Cancel row editing\",\n\t\tselectcaption : \"Actions...\"\n    },\n    col : {\n        caption: \"选择列\",\n        bSubmit: \"确定\",\n        bCancel: \"取消\"\n    },\n    errors : {\n        errcap : \"错误\",\n        nourl : \"没有设置url\",\n        norecords: \"没有要处理的记录\",\n        model : \"colNames 和 colModel 长度不等！\"\n    },\n    formatter : {\n        integer : {thousandsSeparator: \",\", defaultValue: '0'},\n        number : {decimalSeparator:\".\", thousandsSeparator: \",\", decimalPlaces: 2, defaultValue: '0.00'},\n        currency : {decimalSeparator:\".\", thousandsSeparator: \",\", decimalPlaces: 2, prefix: \"\", suffix:\"\", defaultValue: '0.00'},\n        date : {\n            dayNames:   [\n                \"日\", \"一\", \"二\", \"三\", \"四\", \"五\", \"六\",\n                \"星期日\", \"星期一\", \"星期二\", \"星期三\", \"星期四\", \"星期五\", \"星期六\",\n            ],\n            monthNames: [\n                \"一\", \"二\", \"三\", \"四\", \"五\", \"六\", \"七\", \"八\", \"九\", \"十\", \"十一\", \"十二\",\n                \"一月\", \"二月\", \"三月\", \"四月\", \"五月\", \"六月\", \"七月\", \"八月\", \"九月\", \"十月\", \"十一月\", \"十二月\"\n            ],\n            AmPm : [\"am\",\"pm\",\"上午\",\"下午\"],\n            S: function (j) {return j < 11 || j > 13 ? ['st', 'nd', 'rd', 'th'][Math.min((j - 1) % 10, 3)] : 'th';},\n            srcformat: 'Y-m-d',\n            newformat: 'Y-m-d',\n            parseRe : /[#%\\\\\\/:_;.,\\t\\s-]/,\n            masks : {\n                // see http://php.net/manual/en/function.date.php for PHP format used in jqGrid\n                // and see http://docs.jquery.com/UI/Datepicker/formatDate\n                // and https://github.com/jquery/globalize#dates for alternative formats used frequently\n                // one can find on https://github.com/jquery/globalize/tree/master/lib/cultures many\n                // information about date, time, numbers and currency formats used in different countries\n                // one should just convert the information in PHP format\n                ISO8601Long:\"Y-m-d H:i:s\",\n                ISO8601Short:\"Y-m-d\",\n                // short date:\n                //    n - Numeric representation of a month, without leading zeros\n                //    j - Day of the month without leading zeros\n                //    Y - A full numeric representation of a year, 4 digits\n                // example: 3/1/2012 which means 1 March 2012\n                ShortDate: \"n/j/Y\", // in jQuery UI Datepicker: \"M/d/yyyy\"\n                // long date:\n                //    l - A full textual representation of the day of the week\n                //    F - A full textual representation of a month\n                //    d - Day of the month, 2 digits with leading zeros\n                //    Y - A full numeric representation of a year, 4 digits\n                LongDate: \"l, F d, Y\", // in jQuery UI Datepicker: \"dddd, MMMM dd, yyyy\"\n                // long date with long time:\n                //    l - A full textual representation of the day of the week\n                //    F - A full textual representation of a month\n                //    d - Day of the month, 2 digits with leading zeros\n                //    Y - A full numeric representation of a year, 4 digits\n                //    g - 12-hour format of an hour without leading zeros\n                //    i - Minutes with leading zeros\n                //    s - Seconds, with leading zeros\n                //    A - Uppercase Ante meridiem and Post meridiem (AM or PM)\n                FullDateTime: \"l, F d, Y g:i:s A\", // in jQuery UI Datepicker: \"dddd, MMMM dd, yyyy h:mm:ss tt\"\n                // month day:\n                //    F - A full textual representation of a month\n                //    d - Day of the month, 2 digits with leading zeros\n                MonthDay: \"F d\", // in jQuery UI Datepicker: \"MMMM dd\"\n                // short time (without seconds)\n                //    g - 12-hour format of an hour without leading zeros\n                //    i - Minutes with leading zeros\n                //    A - Uppercase Ante meridiem and Post meridiem (AM or PM)\n                ShortTime: \"g:i A\", // in jQuery UI Datepicker: \"h:mm tt\"\n                // long time (with seconds)\n                //    g - 12-hour format of an hour without leading zeros\n                //    i - Minutes with leading zeros\n                //    s - Seconds, with leading zeros\n                //    A - Uppercase Ante meridiem and Post meridiem (AM or PM)\n                LongTime: \"g:i:s A\", // in jQuery UI Datepicker: \"h:mm:ss tt\"\n                SortableDateTime: \"Y-m-d\\\\TH:i:s\",\n                UniversalSortableDateTime: \"Y-m-d H:i:sO\",\n                // month with year\n                //    Y - A full numeric representation of a year, 4 digits\n                //    F - A full textual representation of a month\n                YearMonth: \"F, Y\" // in jQuery UI Datepicker: \"MMMM, yyyy\"\n            },\n            reformatAfterEdit : false,\n\t\t\tuserLocalTime : false\n        },\n        baseLinkUrl: '',\n        showAction: '',\n        target: '',\n        checkbox : {disabled:true},\n        idName : 'id'\n    }\n};\n}));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/jqgrid/jquery.jqGrid.minffe4.js",
    "content": "/**\n*\n* @license Guriddo jqGrid JS - v5.0.0 - 2015-08-03\n* Copyright(c) 2008, Tony Tomov, tony@trirand.com\n*\n* License: http://guriddo.net/?page_id=103334\n*/\n\n!function(a){\"use strict\";\"function\"==typeof define&&define.amd?define([\"jquery\"],a):a(jQuery)}(function($){\"use strict\";function _pivotfilter(a,b){var c,d,e,f=[];if(!this||\"function\"!=typeof a||a instanceof RegExp)throw new TypeError;for(e=this.length,c=0;e>c;c++)if(this.hasOwnProperty(c)&&(d=this[c],a.call(b,d,c,this))){f.push(d);break}return f}$.jgrid=$.jgrid||{},$.jgrid.hasOwnProperty(\"defaults\")||($.jgrid.defaults={}),$.extend($.jgrid,{version:\"5.0.0\",htmlDecode:function(a){return a&&(\"&nbsp;\"===a||\"&#160;\"===a||1===a.length&&160===a.charCodeAt(0))?\"\":a?String(a).replace(/&gt;/g,\">\").replace(/&lt;/g,\"<\").replace(/&quot;/g,'\"').replace(/&amp;/g,\"&\"):a},htmlEncode:function(a){return a?String(a).replace(/&/g,\"&amp;\").replace(/\\\"/g,\"&quot;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\"):a},template:function(a){var b,c=$.makeArray(arguments).slice(1),d=c.length;return null==a&&(a=\"\"),a.replace(/\\{([\\w\\-]+)(?:\\:([\\w\\.]*)(?:\\((.*?)?\\))?)?\\}/g,function(a,e){if(!isNaN(parseInt(e,10)))return c[parseInt(e,10)];for(b=0;d>b;b++)if($.isArray(c[b]))for(var f=c[b],g=f.length;g--;)if(e===f[g].nm)return f[g].v})},msie:\"Microsoft Internet Explorer\"===navigator.appName,msiever:function(){var a=-1,b=navigator.userAgent,c=new RegExp(\"MSIE ([0-9]{1,}[.0-9]{0,})\");return null!=c.exec(b)&&(a=parseFloat(RegExp.$1)),a},getCellIndex:function(a){var b=$(a);return b.is(\"tr\")?-1:(b=(b.is(\"td\")||b.is(\"th\")?b:b.closest(\"td,th\"))[0],$.jgrid.msie?$.inArray(b,b.parentNode.cells):b.cellIndex)},stripHtml:function(a){a=String(a);var b=/<(\"[^\"]*\"|'[^']*'|[^'\">])*>/gi;return a?(a=a.replace(b,\"\"),a&&\"&nbsp;\"!==a&&\"&#160;\"!==a?a.replace(/\\\"/g,\"'\"):\"\"):a},stripPref:function(a,b){var c=$.type(a);return(\"string\"===c||\"number\"===c)&&(a=String(a),b=\"\"!==a?String(b).replace(String(a),\"\"):b),b},parse:function(jsonString){var js=jsonString;return\"while(1);\"===js.substr(0,9)&&(js=js.substr(9)),\"/*\"===js.substr(0,2)&&(js=js.substr(2,js.length-4)),js||(js=\"{}\"),$.jgrid.useJSON===!0&&\"object\"==typeof JSON&&\"function\"==typeof JSON.parse?JSON.parse(js):eval(\"(\"+js+\")\")},parseDate:function(a,b,c,d){var e,f,g,h=/\\\\.|[dDjlNSwzWFmMntLoYyaABgGhHisueIOPTZcrU]/g,i=/\\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\\d{4})?)\\b/g,j=/[^-+\\dA-Z]/g,k=new RegExp(\"^/Date\\\\((([-+])?[0-9]+)(([-+])([0-9]{2})([0-9]{2}))?\\\\)/$\"),l=\"string\"==typeof b?b.match(k):null,m=function(a,b){for(a=String(a),b=parseInt(b,10)||2;a.length<b;)a=\"0\"+a;return a},n={m:1,d:1,y:1970,h:0,i:0,s:0,u:0},o=0,p=function(a,b){return 0===a?12===b&&(b=0):12!==b&&(b+=12),b},q=0;if(void 0===d&&(d=$.jgrid.getRegional(this,\"formatter.date\")),void 0===d.parseRe&&(d.parseRe=/[#%\\\\\\/:_;.,\\t\\s-]/),d.masks.hasOwnProperty(a)&&(a=d.masks[a]),b&&null!=b)if(isNaN(b-0)||\"u\"!==String(a).toLowerCase())if(b.constructor===Date)o=b;else if(null!==l)o=new Date(parseInt(l[1],10)),l[3]&&(q=60*Number(l[5])+Number(l[6]),q*=\"-\"===l[4]?1:-1,q-=o.getTimezoneOffset(),o.setTime(Number(Number(o)+60*q*1e3)));else{for(\"ISO8601Long\"===d.srcformat&&\"Z\"===b.charAt(b.length-1)&&(q-=(new Date).getTimezoneOffset()),b=String(b).replace(/\\T/g,\"#\").replace(/\\t/,\"%\").split(d.parseRe),a=a.replace(/\\T/g,\"#\").replace(/\\t/,\"%\").split(d.parseRe),f=0,g=a.length;g>f;f++){switch(a[f]){case\"M\":e=$.inArray(b[f],d.monthNames),-1!==e&&12>e&&(b[f]=e+1,n.m=b[f]);break;case\"F\":e=$.inArray(b[f],d.monthNames,12),-1!==e&&e>11&&(b[f]=e+1-12,n.m=b[f]);break;case\"n\":a[f]=\"m\";break;case\"j\":a[f]=\"d\";break;case\"a\":e=$.inArray(b[f],d.AmPm),-1!==e&&2>e&&b[f]===d.AmPm[e]&&(b[f]=e,n.h=p(b[f],n.h));break;case\"A\":e=$.inArray(b[f],d.AmPm),-1!==e&&e>1&&b[f]===d.AmPm[e]&&(b[f]=e-2,n.h=p(b[f],n.h));break;case\"g\":n.h=parseInt(b[f],10)}void 0!==b[f]&&(n[a[f].toLowerCase()]=parseInt(b[f],10))}if(n.f&&(n.m=n.f),0===n.m&&0===n.y&&0===n.d)return\"&#160;\";n.m=parseInt(n.m,10)-1;var r=n.y;r>=70&&99>=r?n.y=1900+n.y:r>=0&&69>=r&&(n.y=2e3+n.y),o=new Date(n.y,n.m,n.d,n.h,n.i,n.s,n.u),q>0&&o.setTime(Number(Number(o)+60*q*1e3))}else o=new Date(1e3*parseFloat(b));else o=new Date(n.y,n.m,n.d,n.h,n.i,n.s,n.u);if(d.userLocalTime&&0===q&&(q-=(new Date).getTimezoneOffset(),q>0&&o.setTime(Number(Number(o)+60*q*1e3))),void 0===c)return o;d.masks.hasOwnProperty(c)?c=d.masks[c]:c||(c=\"Y-m-d\");var s=o.getHours(),t=o.getMinutes(),u=o.getDate(),v=o.getMonth()+1,w=o.getTimezoneOffset(),x=o.getSeconds(),y=o.getMilliseconds(),z=o.getDay(),A=o.getFullYear(),B=(z+6)%7+1,C=(new Date(A,v-1,u)-new Date(A,0,1))/864e5,D={d:m(u),D:d.dayNames[z],j:u,l:d.dayNames[z+7],N:B,S:d.S(u),w:z,z:C,W:5>B?Math.floor((C+B-1)/7)+1:Math.floor((C+B-1)/7)||((new Date(A-1,0,1).getDay()+6)%7<4?53:52),F:d.monthNames[v-1+12],m:m(v),M:d.monthNames[v-1],n:v,t:\"?\",L:\"?\",o:\"?\",Y:A,y:String(A).substring(2),a:12>s?d.AmPm[0]:d.AmPm[1],A:12>s?d.AmPm[2]:d.AmPm[3],B:\"?\",g:s%12||12,G:s,h:m(s%12||12),H:m(s),i:m(t),s:m(x),u:y,e:\"?\",I:\"?\",O:(w>0?\"-\":\"+\")+m(100*Math.floor(Math.abs(w)/60)+Math.abs(w)%60,4),P:\"?\",T:(String(o).match(i)||[\"\"]).pop().replace(j,\"\"),Z:\"?\",c:\"?\",r:\"?\",U:Math.floor(o/1e3)};return c.replace(h,function(a){return D.hasOwnProperty(a)?D[a]:a.substring(1)})},jqID:function(a){return String(a).replace(/[!\"#$%&'()*+,.\\/:; <=>?@\\[\\\\\\]\\^`{|}~]/g,\"\\\\$&\")},guid:1,uidPref:\"jqg\",randId:function(a){return(a||$.jgrid.uidPref)+$.jgrid.guid++},getAccessor:function(a,b){var c,d,e,f=[];if(\"function\"==typeof b)return b(a);if(c=a[b],void 0===c)try{if(\"string\"==typeof b&&(f=b.split(\".\")),e=f.length)for(c=a;c&&e--;)d=f.shift(),c=c[d]}catch(g){}return c},getXmlData:function(a,b,c){var d,e=\"string\"==typeof b?b.match(/^(.*)\\[(\\w+)\\]$/):null;return\"function\"==typeof b?b(a):e&&e[2]?e[1]?$(e[1],a).attr(e[2]):$(a).attr(e[2]):(d=$(b,a),c?d:d.length>0?$(d).text():void 0)},cellWidth:function(){var a=$(\"<div class='ui-jqgrid' style='left:10000px'><table class='ui-jqgrid-btable ui-common-table' style='width:5px;'><tr class='jqgrow'><td style='width:5px;display:block;'></td></tr></table></div>\"),b=a.appendTo(\"body\").find(\"td\").width();return a.remove(),Math.abs(b-5)>.1},isLocalStorage:function(){try{return\"localStorage\"in window&&null!==window.localStorage}catch(a){return!1}},getRegional:function(a,b,c){var d;return void 0!==c?c:(a.p&&a.p.regional&&$.jgrid.regional&&(d=$.jgrid.getAccessor($.jgrid.regional[a.p.regional]||{},b)),void 0===d&&(d=$.jgrid.getAccessor($.jgrid,b)),d)},isMobile:function(){try{return/Android|webOS|iPhone|iPad|iPod|pocket|psp|kindle|avantgo|blazer|midori|Tablet|Palm|maemo|plucker|phone|BlackBerry|symbian|IEMobile|mobile|ZuneWP7|Windows Phone|Opera Mini/i.test(navigator.userAgent)?!0:!1}catch(a){return!1}},cell_width:!0,ajaxOptions:{},from:function(source){var $t=this,QueryObject=function(d,q){\"string\"==typeof d&&(d=$.data(d));var self=this,_data=d,_usecase=!0,_trim=!1,_query=q,_stripNum=/[\\$,%]/g,_lastCommand=null,_lastField=null,_orDepth=0,_negate=!1,_queuedOperator=\"\",_sorting=[],_useProperties=!0;if(\"object\"!=typeof d||!d.push)throw\"data provides is not an array\";return d.length>0&&(_useProperties=\"object\"!=typeof d[0]?!1:!0),this._hasData=function(){return null===_data?!1:0===_data.length?!1:!0},this._getStr=function(a){var b=[];return _trim&&b.push(\"jQuery.trim(\"),b.push(\"String(\"+a+\")\"),_trim&&b.push(\")\"),_usecase||b.push(\".toLowerCase()\"),b.join(\"\")},this._strComp=function(a){return\"string\"==typeof a?\".toString()\":\"\"},this._group=function(a,b){return{field:a.toString(),unique:b,items:[]}},this._toStr=function(a){return _trim&&(a=$.trim(a)),a=a.toString().replace(/\\\\/g,\"\\\\\\\\\").replace(/\\\"/g,'\\\\\"'),_usecase?a:a.toLowerCase()},this._funcLoop=function(a){var b=[];return $.each(_data,function(c,d){b.push(a(d))}),b},this._append=function(a){var b;for(null===_query?_query=\"\":_query+=\"\"===_queuedOperator?\" && \":_queuedOperator,b=0;_orDepth>b;b++)_query+=\"(\";_negate&&(_query+=\"!\"),_query+=\"(\"+a+\")\",_negate=!1,_queuedOperator=\"\",_orDepth=0},this._setCommand=function(a,b){_lastCommand=a,_lastField=b},this._resetNegate=function(){_negate=!1},this._repeatCommand=function(a,b){return null===_lastCommand?self:null!==a&&null!==b?_lastCommand(a,b):null===_lastField?_lastCommand(a):_useProperties?_lastCommand(_lastField,a):_lastCommand(a)},this._equals=function(a,b){return 0===self._compare(a,b,1)},this._compare=function(a,b,c){var d=Object.prototype.toString;return void 0===c&&(c=1),void 0===a&&(a=null),void 0===b&&(b=null),null===a&&null===b?0:null===a&&null!==b?1:null!==a&&null===b?-1:\"[object Date]\"===d.call(a)&&\"[object Date]\"===d.call(b)?b>a?-c:a>b?c:0:(_usecase||\"number\"==typeof a||\"number\"==typeof b||(a=String(a),b=String(b)),b>a?-c:a>b?c:0)},this._performSort=function(){0!==_sorting.length&&(_data=self._doSort(_data,0))},this._doSort=function(a,b){var c=_sorting[b].by,d=_sorting[b].dir,e=_sorting[b].type,f=_sorting[b].datefmt,g=_sorting[b].sfunc;if(b===_sorting.length-1)return self._getOrder(a,c,d,e,f,g);b++;var h,i,j,k=self._getGroup(a,c,d,e,f),l=[];for(h=0;h<k.length;h++)for(j=self._doSort(k[h].items,b),i=0;i<j.length;i++)l.push(j[i]);return l},this._getOrder=function(a,b,c,d,e,f){var g,h,i,j,k=[],l=[],m=\"a\"===c?1:-1;void 0===d&&(d=\"text\"),j=\"float\"===d||\"number\"===d||\"currency\"===d||\"numeric\"===d?function(a){var b=parseFloat(String(a).replace(_stripNum,\"\"));return isNaN(b)?Number.NEGATIVE_INFINITY:b}:\"int\"===d||\"integer\"===d?function(a){return a?parseFloat(String(a).replace(_stripNum,\"\")):Number.NEGATIVE_INFINITY}:\"date\"===d||\"datetime\"===d?function(a){return $.jgrid.parseDate.call($t,e,a).getTime()}:$.isFunction(d)?d:function(a){return a=a?$.trim(String(a)):\"\",_usecase?a:a.toLowerCase()},$.each(a,function(a,c){h=\"\"!==b?$.jgrid.getAccessor(c,b):c,void 0===h&&(h=\"\"),h=j(h,c),l.push({vSort:h,index:a})}),l.sort($.isFunction(f)?function(a,b){return a=a.vSort,b=b.vSort,f.call(this,a,b,m)}:function(a,b){return a=a.vSort,b=b.vSort,self._compare(a,b,m)}),i=0;for(var n=a.length;n>i;)g=l[i].index,k.push(a[g]),i++;return k},this._getGroup=function(a,b,c,d,e){var f,g=[],h=null,i=null;return $.each(self._getOrder(a,b,c,d,e),function(a,c){f=$.jgrid.getAccessor(c,b),null==f&&(f=\"\"),self._equals(i,f)||(i=f,null!==h&&g.push(h),h=self._group(b,f)),h.items.push(c)}),null!==h&&g.push(h),g},this.ignoreCase=function(){return _usecase=!1,self},this.useCase=function(){return _usecase=!0,self},this.trim=function(){return _trim=!0,self},this.noTrim=function(){return _trim=!1,self},this.execute=function(){var match=_query,results=[];return null===match?self:($.each(_data,function(){eval(match)&&results.push(this)}),_data=results,self)},this.data=function(){return _data},this.select=function(a){if(self._performSort(),!self._hasData())return[];if(self.execute(),$.isFunction(a)){var b=[];return $.each(_data,function(c,d){b.push(a(d))}),b}return _data},this.hasMatch=function(){return self._hasData()?(self.execute(),_data.length>0):!1},this.andNot=function(a,b,c){return _negate=!_negate,self.and(a,b,c)},this.orNot=function(a,b,c){return _negate=!_negate,self.or(a,b,c)},this.not=function(a,b,c){return self.andNot(a,b,c)},this.and=function(a,b,c){return _queuedOperator=\" && \",void 0===a?self:self._repeatCommand(a,b,c)},this.or=function(a,b,c){return _queuedOperator=\" || \",void 0===a?self:self._repeatCommand(a,b,c)},this.orBegin=function(){return _orDepth++,self},this.orEnd=function(){return null!==_query&&(_query+=\")\"),self},this.isNot=function(a){return _negate=!_negate,self.is(a)},this.is=function(a){return self._append(\"this.\"+a),self._resetNegate(),self},this._compareValues=function(a,b,c,d,e){var f;f=_useProperties?\"jQuery.jgrid.getAccessor(this,'\"+b+\"')\":\"this\",void 0===c&&(c=null);var g=c,h=void 0===e.stype?\"text\":e.stype;if(null!==c)switch(h){case\"int\":case\"integer\":g=isNaN(Number(g))||\"\"===g?\"0\":g,f=\"parseInt(\"+f+\",10)\",g=\"parseInt(\"+g+\",10)\";break;case\"float\":case\"number\":case\"numeric\":g=String(g).replace(_stripNum,\"\"),g=isNaN(Number(g))||\"\"===g?\"0\":g,f=\"parseFloat(\"+f+\")\",g=\"parseFloat(\"+g+\")\";break;case\"date\":case\"datetime\":g=String($.jgrid.parseDate.call($t,e.srcfmt||\"Y-m-d\",g).getTime()),f='jQuery.jgrid.parseDate.call(jQuery(\"#'+$.jgrid.jqID($t.p.id)+'\")[0],\"'+e.srcfmt+'\",'+f+\").getTime()\";break;default:f=self._getStr(f),g=self._getStr('\"'+self._toStr(g)+'\"')}return self._append(f+\" \"+d+\" \"+g),self._setCommand(a,b),self._resetNegate(),self},this.equals=function(a,b,c){return self._compareValues(self.equals,a,b,\"==\",c)},this.notEquals=function(a,b,c){return self._compareValues(self.equals,a,b,\"!==\",c)},this.isNull=function(a,b,c){return self._compareValues(self.equals,a,null,\"===\",c)},this.greater=function(a,b,c){return self._compareValues(self.greater,a,b,\">\",c)},this.less=function(a,b,c){return self._compareValues(self.less,a,b,\"<\",c)},this.greaterOrEquals=function(a,b,c){return self._compareValues(self.greaterOrEquals,a,b,\">=\",c)},this.lessOrEquals=function(a,b,c){return self._compareValues(self.lessOrEquals,a,b,\"<=\",c)},this.startsWith=function(a,b){var c=null==b?a:b,d=_trim?$.trim(c.toString()).length:c.toString().length;return _useProperties?self._append(self._getStr(\"jQuery.jgrid.getAccessor(this,'\"+a+\"')\")+\".substr(0,\"+d+\") == \"+self._getStr('\"'+self._toStr(b)+'\"')):(null!=b&&(d=_trim?$.trim(b.toString()).length:b.toString().length),self._append(self._getStr(\"this\")+\".substr(0,\"+d+\") == \"+self._getStr('\"'+self._toStr(a)+'\"'))),self._setCommand(self.startsWith,a),self._resetNegate(),self},this.endsWith=function(a,b){var c=null==b?a:b,d=_trim?$.trim(c.toString()).length:c.toString().length;return self._append(_useProperties?self._getStr(\"jQuery.jgrid.getAccessor(this,'\"+a+\"')\")+\".substr(\"+self._getStr(\"jQuery.jgrid.getAccessor(this,'\"+a+\"')\")+\".length-\"+d+\",\"+d+') == \"'+self._toStr(b)+'\"':self._getStr(\"this\")+\".substr(\"+self._getStr(\"this\")+'.length-\"'+self._toStr(a)+'\".length,\"'+self._toStr(a)+'\".length) == \"'+self._toStr(a)+'\"'),self._setCommand(self.endsWith,a),self._resetNegate(),self},this.contains=function(a,b){return self._append(_useProperties?self._getStr(\"jQuery.jgrid.getAccessor(this,'\"+a+\"')\")+'.indexOf(\"'+self._toStr(b)+'\",0) > -1':self._getStr(\"this\")+'.indexOf(\"'+self._toStr(a)+'\",0) > -1'),self._setCommand(self.contains,a),self._resetNegate(),self},this.groupBy=function(a,b,c,d){return self._hasData()?self._getGroup(_data,a,b,c,d):null},this.orderBy=function(a,b,c,d,e){return b=null==b?\"a\":$.trim(b.toString().toLowerCase()),null==c&&(c=\"text\"),null==d&&(d=\"Y-m-d\"),null==e&&(e=!1),(\"desc\"===b||\"descending\"===b)&&(b=\"d\"),(\"asc\"===b||\"ascending\"===b)&&(b=\"a\"),_sorting.push({by:a,dir:b,type:c,datefmt:d,sfunc:e}),self},self};return new QueryObject(source,null)},getMethod:function(a){return this.getAccessor($.fn.jqGrid,a)},extend:function(a){$.extend($.fn.jqGrid,a),this.no_legacy_api||$.fn.extend(a)},clearBeforeUnload:function(a){var b,c=$(\"#\"+$.jgrid.jqID(a))[0];if(c.grid){b=c.grid,$.isFunction(b.emptyRows)&&b.emptyRows.call(c,!0,!0),$(document).unbind(\"mouseup.jqGrid\"+c.p.id),$(b.hDiv).unbind(\"mousemove\"),$(c).unbind();var d,e=b.headers.length,f=[\"formatCol\",\"sortData\",\"updatepager\",\"refreshIndex\",\"setHeadCheckBox\",\"constructTr\",\"formatter\",\"addXmlData\",\"addJSONData\",\"grid\",\"p\"];for(d=0;e>d;d++)b.headers[d].el=null;for(d in b)b.hasOwnProperty(d)&&(b[d]=null);for(d in c.p)c.p.hasOwnProperty(d)&&(c.p[d]=$.isArray(c.p[d])?[]:null);for(e=f.length,d=0;e>d;d++)c.hasOwnProperty(f[d])&&(c[f[d]]=null,delete c[f[d]])}},gridUnload:function(a){if(a){a=$.trim(a),0===a.indexOf(\"#\")&&(a=a.substring(1));var b=$(\"#\"+$.jgrid.jqID(a))[0];if(b.grid){var c={id:$(b).attr(\"id\"),cl:$(b).attr(\"class\")};b.p.pager&&$(b.p.pager).unbind().empty().removeClass(\"ui-state-default ui-jqgrid-pager ui-corner-bottom\");var d=document.createElement(\"table\");d.className=c.cl;var e=$.jgrid.jqID(b.id);$(d).removeClass(\"ui-jqgrid-btable ui-common-table\").insertBefore(\"#gbox_\"+e),1===$(b.p.pager).parents(\"#gbox_\"+e).length&&$(b.p.pager).insertBefore(\"#gbox_\"+e),$.jgrid.clearBeforeUnload(a),$(\"#gbox_\"+e).remove(),$(d).attr({id:c.id}),$(\"#alertmod_\"+$.jgrid.jqID(a)).remove()}}},gridDestroy:function(a){if(a){a=$.trim(a),0===a.indexOf(\"#\")&&(a=a.substring(1));var b=$(\"#\"+$.jgrid.jqID(a))[0];if(b.grid){b.p.pager&&$(b.p.pager).remove();try{$.jgrid.clearBeforeUnload(a),$(\"#gbox_\"+$.jgrid.jqID(a)).remove()}catch(c){}}}},styleUI:{jQueryUI:{common:{disabled:\"ui-state-disabled\",highlight:\"ui-state-highlight\",hover:\"ui-state-hover\",cornerall:\"ui-corner-all\",cornertop:\"ui-corner-top\",cornerbottom:\"ui-corner-bottom\",hidden:\"ui-helper-hidden\",icon_base:\"ui-icon\",overlay:\"ui-widget-overlay\",active:\"ui-state-active\",error:\"ui-state-error\",button:\"ui-state-default ui-corner-all\",content:\"ui-widget-content\"},base:{entrieBox:\"ui-widget ui-widget-content ui-corner-all\",viewBox:\"\",headerTable:\"\",headerBox:\"ui-state-default\",rowTable:\"\",rowBox:\"ui-widget-content\",footerTable:\"\",footerBox:\"ui-widget-content\",headerDiv:\"ui-state-default\",gridtitleBox:\"ui-widget-header ui-corner-top ui-helper-clearfix\",customtoolbarBox:\"ui-state-default\",loadingBox:\"ui-state-default ui-state-active\",rownumBox:\"ui-state-default\",scrollBox:\"ui-widget-content\",multiBox:\"cbox\",pagerBox:\"ui-state-default ui-corner-bottom\",toppagerBox:\"ui-state-default\",pgInput:\"ui-corner-all\",pgSelectBox:\"ui-widget-content ui-corner-all\",pgButtonBox:\"ui-corner-all\",icon_first:\"ui-icon-seek-first\",icon_prev:\"ui-icon-seek-prev\",icon_next:\"ui-icon-seek-next\",icon_end:\"ui-icon-seek-end\",icon_asc:\"ui-icon-triangle-1-n\",icon_desc:\"ui-icon-triangle-1-s\",icon_caption_open:\"ui-icon-circle-triangle-n\",icon_caption_close:\"ui-icon-circle-triangle-s\"},modal:{modal:\"ui-widget ui-widget-content ui-corner-all\",header:\"ui-widget-header ui-corner-all ui-helper-clearfix\",content:\"ui-widget-content\",resizable:\"ui-resizable-handle ui-resizable-se\",icon_close:\"ui-icon-closethick\",icon_resizable:\"ui-icon-gripsmall-diagonal-se\"},celledit:{inputClass:\"ui-widget-content ui-corner-all\"},inlinedit:{inputClass:\"ui-widget-content ui-corner-all\",icon_edit_nav:\"ui-icon-pencil\",icon_add_nav:\"ui-icon-plus\",icon_save_nav:\"ui-icon-disk\",icon_cancel_nav:\"ui-icon-cancel\"},formedit:{inputClass:\"ui-widget-content ui-corner-all\",icon_prev:\"ui-icon-triangle-1-w\",icon_next:\"ui-icon-triangle-1-e\",icon_save:\"ui-icon-disk\",icon_close:\"ui-icon-close\",icon_del:\"ui-icon-scissors\",icon_cancel:\"ui-icon-cancel\"},navigator:{icon_edit_nav:\"ui-icon-pencil\",icon_add_nav:\"ui-icon-plus\",icon_del_nav:\"ui-icon-trash\",icon_search_nav:\"ui-icon-search\",icon_refresh_nav:\"ui-icon-refresh\",icon_view_nav:\"ui-icon-document\",icon_newbutton_nav:\"ui-icon-newwin\"},grouping:{icon_plus:\"ui-icon-circlesmall-plus\",icon_minus:\"ui-icon-circlesmall-minus\"},filter:{table_widget:\"ui-widget ui-widget-content\",srSelect:\"ui-widget-content ui-corner-all\",srInput:\"ui-widget-content ui-corner-all\",menu_widget:\"ui-widget ui-widget-content ui-corner-all\",icon_search:\"ui-icon-search\",icon_reset:\"ui-icon-arrowreturnthick-1-w\",icon_query:\"ui-icon-comment\"},subgrid:{icon_plus:\"ui-icon-plus\",icon_minus:\"ui-icon-minus\",icon_open:\"ui-icon-carat-1-sw\"},treegrid:{icon_plus:\"ui-icon-triangle-1-\",icon_minus:\"ui-icon-triangle-1-s\",icon_leaf:\"ui-icon-radio-off\"},fmatter:{icon_edit:\"ui-icon-pencil\",icon_add:\"ui-icon-plus\",icon_save:\"ui-icon-disk\",icon_cancel:\"ui-icon-cancel\",icon_del:\"ui-icon-trash\"}},Bootstrap:{common:{disabled:\"ui-disabled\",highlight:\"success\",hover:\"active\",cornerall:\"\",cornertop:\"\",cornerbottom:\"\",hidden:\"\",icon_base:\"glyphicon\",overlay:\"ui-overlay\",active:\"active\",error:\"bg-danger\",button:\"btn btn-default\",content:\"\"},base:{entrieBox:\"\",viewBox:\"table-responsive\",headerTable:\"table table-bordered\",headerBox:\"\",rowTable:\"table table-bordered\",rowBox:\"\",footerTable:\"table table-bordered\",footerBox:\"\",headerDiv:\"\",gridtitleBox:\"\",customtoolbarBox:\"\",loadingBox:\"row\",rownumBox:\"active\",scrollBox:\"\",multiBox:\"checkbox\",pagerBox:\"\",toppagerBox:\"\",pgInput:\"form-control\",pgSelectBox:\"form-control\",pgButtonBox:\"\",icon_first:\"glyphicon-step-backward\",icon_prev:\"glyphicon-backward\",icon_next:\"glyphicon-forward\",icon_end:\"glyphicon-step-forward\",icon_asc:\"glyphicon-triangle-top\",icon_desc:\"glyphicon-triangle-bottom\",icon_caption_open:\"glyphicon-circle-arrow-up\",icon_caption_close:\"glyphicon-circle-arrow-down\"},modal:{modal:\"modal-content\",header:\"modal-header\",title:\"modal-title\",content:\"modal-body\",resizable:\"ui-resizable-handle ui-resizable-se\",icon_close:\"glyphicon-remove-circle\",icon_resizable:\"glyphicon-import\"},celledit:{inputClass:\"form-control\"},inlinedit:{inputClass:\"form-control\",icon_edit_nav:\"glyphicon-edit\",icon_add_nav:\"glyphicon-plus\",icon_save_nav:\"glyphicon-save\",icon_cancel_nav:\"glyphicon-remove-circle\"},formedit:{inputClass:\"form-control\",icon_prev:\"glyphicon-step-backward\",icon_next:\"glyphicon-step-forward\",icon_save:\"glyphicon-save\",icon_close:\"glyphicon-remove-circle\",icon_del:\"glyphicon-trash\",icon_cancel:\"glyphicon-remove-circle\"},navigator:{icon_edit_nav:\"glyphicon-edit\",icon_add_nav:\"glyphicon-plus\",icon_del_nav:\"glyphicon-trash\",icon_search_nav:\"glyphicon-search\",icon_refresh_nav:\"glyphicon-refresh\",icon_view_nav:\"glyphicon-info-sign\",icon_newbutton_nav:\"glyphicon-new-window\"},grouping:{icon_plus:\"glyphicon-triangle-right\",icon_minus:\"glyphicon-triangle-bottom\"},filter:{table_widget:\"table table-condensed\",srSelect:\"form-control\",srInput:\"form-control\",menu_widget:\"\",icon_search:\"glyphicon-search\",icon_reset:\"glyphicon-refresh\",icon_query:\"glyphicon-comment\"},subgrid:{icon_plus:\"glyphicon-triangle-right\",icon_minus:\"glyphicon-triangle-bottom\",icon_open:\"glyphicon-indent-left\"},treegrid:{icon_plus:\"glyphicon-triangle-right\",icon_minus:\"glyphicon-triangle-bottom\",icon_leaf:\"glyphicon-unchecked\"},fmatter:{icon_edit:\"glyphicon-edit\",icon_add:\"glyphicon-plus\",icon_save:\"glyphicon-save\",icon_cancel:\"glyphicon-remove-circle\",icon_del:\"glyphicon-trash\"}}}}),$.fn.jqGrid=function(a){if(\"string\"==typeof a){var b=$.jgrid.getMethod(a);if(!b)throw\"jqGrid - No such method: \"+a;var c=$.makeArray(arguments).slice(1);return b.apply(this,c)}return this.each(function(){if(!this.grid){var b;null!=a&&void 0!==a.data&&(b=a.data,a.data=[]);var c=$.extend(!0,{url:\"\",height:150,page:1,rowNum:20,rowTotal:null,records:0,pager:\"\",pgbuttons:!0,pginput:!0,colModel:[],rowList:[],colNames:[],sortorder:\"asc\",sortname:\"\",datatype:\"xml\",mtype:\"GET\",altRows:!1,selarrrow:[],savedRow:[],shrinkToFit:!0,xmlReader:{},jsonReader:{},subGrid:!1,subGridModel:[],reccount:0,lastpage:0,lastsort:0,selrow:null,beforeSelectRow:null,onSelectRow:null,onSortCol:null,ondblClickRow:null,onRightClickRow:null,onPaging:null,onSelectAll:null,onInitGrid:null,loadComplete:null,gridComplete:null,loadError:null,loadBeforeSend:null,afterInsertRow:null,beforeRequest:null,beforeProcessing:null,onHeaderClick:null,viewrecords:!1,loadonce:!1,multiselect:!1,multikey:!1,editurl:null,search:!1,caption:\"\",hidegrid:!0,hiddengrid:!1,postData:{},userData:{},treeGrid:!1,treeGridModel:\"nested\",treeReader:{},treeANode:-1,ExpandColumn:null,tree_root_level:0,prmNames:{page:\"page\",rows:\"rows\",sort:\"sidx\",order:\"sord\",search:\"_search\",nd:\"nd\",id:\"id\",oper:\"oper\",editoper:\"edit\",addoper:\"add\",deloper:\"del\",subgridid:\"id\",npage:null,totalrows:\"totalrows\"},forceFit:!1,gridstate:\"visible\",cellEdit:!1,cellsubmit:\"remote\",nv:0,loadui:\"enable\",toolbar:[!1,\"\"],scroll:!1,multiboxonly:!1,deselectAfterSort:!0,scrollrows:!1,autowidth:!1,scrollOffset:18,cellLayout:5,subGridWidth:20,multiselectWidth:30,gridview:!0,rownumWidth:35,rownumbers:!1,pagerpos:\"center\",recordpos:\"right\",footerrow:!1,userDataOnFooter:!1,hoverrows:!0,altclass:\"ui-priority-secondary\",viewsortcols:[!1,\"vertical\",!0],resizeclass:\"\",autoencode:!1,remapColumns:[],ajaxGridOptions:{},direction:\"ltr\",toppager:!1,headertitles:!1,scrollTimeout:40,data:[],_index:{},grouping:!1,groupingView:{groupField:[],groupOrder:[],groupText:[],groupColumnShow:[],groupSummary:[],showSummaryOnHide:!1,sortitems:[],sortnames:[],summary:[],summaryval:[],plusicon:\"\",minusicon:\"\",displayField:[],groupSummaryPos:[],formatDisplayField:[],_locgr:!1},ignoreCase:!0,cmTemplate:{},idPrefix:\"\",multiSort:!1,minColWidth:33,scrollPopUp:!1,scrollTopOffset:0,scrollLeftOffset:\"100%\",storeNavOptions:!1,regional:\"en\",styleUI:\"jQueryUI\",responsive:!1},$.jgrid.defaults,a);void 0!==b&&(c.data=b,a.data=b);var d=this,e={headers:[],cols:[],footers:[],dragStart:function(a,b,e){var f=$(this.bDiv).offset().left;this.resizing={idx:a,startX:b.pageX,sOL:b.pageX-f},this.hDiv.style.cursor=\"col-resize\",this.curGbox=$(\"#rs_m\"+$.jgrid.jqID(c.id),\"#gbox_\"+$.jgrid.jqID(c.id)),this.curGbox.css({display:\"block\",left:b.pageX-f,top:e[1],height:e[2]}),$(d).triggerHandler(\"jqGridResizeStart\",[b,a]),$.isFunction(c.resizeStart)&&c.resizeStart.call(d,b,a),document.onselectstart=function(){return!1}},dragMove:function(a){if(this.resizing){var b,d,e=a.pageX-this.resizing.startX,f=this.headers[this.resizing.idx],g=\"ltr\"===c.direction?f.width+e:f.width-e;g>33&&(this.curGbox.css({left:this.resizing.sOL+e}),c.forceFit===!0?(b=this.headers[this.resizing.idx+c.nv],d=\"ltr\"===c.direction?b.width-e:b.width+e,d>c.minColWidth&&(f.newWidth=g,b.newWidth=d)):(this.newWidth=\"ltr\"===c.direction?c.tblwidth+e:c.tblwidth-e,f.newWidth=g))}},dragEnd:function(a){if(this.hDiv.style.cursor=\"default\",this.resizing){var b=this.resizing.idx,e=this.headers[b].newWidth||this.headers[b].width;e=parseInt(e,10),this.resizing=!1,$(\"#rs_m\"+$.jgrid.jqID(c.id)).css(\"display\",\"none\"),c.colModel[b].width=e,this.headers[b].width=e,this.headers[b].el.style.width=e+\"px\",this.cols[b].style.width=e+\"px\",this.footers.length>0&&(this.footers[b].style.width=e+\"px\"),c.forceFit===!0?(e=this.headers[b+c.nv].newWidth||this.headers[b+c.nv].width,this.headers[b+c.nv].width=e,this.headers[b+c.nv].el.style.width=e+\"px\",this.cols[b+c.nv].style.width=e+\"px\",this.footers.length>0&&(this.footers[b+c.nv].style.width=e+\"px\"),c.colModel[b+c.nv].width=e):(c.tblwidth=this.newWidth||c.tblwidth,$(\"table:first\",this.bDiv).css(\"width\",c.tblwidth+\"px\"),$(\"table:first\",this.hDiv).css(\"width\",c.tblwidth+\"px\"),this.hDiv.scrollLeft=this.bDiv.scrollLeft,c.footerrow&&($(\"table:first\",this.sDiv).css(\"width\",c.tblwidth+\"px\"),this.sDiv.scrollLeft=this.bDiv.scrollLeft)),a&&($(d).triggerHandler(\"jqGridResizeStop\",[e,b]),$.isFunction(c.resizeStop)&&c.resizeStop.call(d,e,b))}this.curGbox=null,document.onselectstart=function(){return!0}},populateVisible:function(){e.timer&&clearTimeout(e.timer),e.timer=null;var a=$(e.bDiv).height();if(a){var b,f,g=$(\"table:first\",e.bDiv);if(g[0].rows.length)try{b=g[0].rows[1],f=b?$(b).outerHeight()||e.prevRowHeight:e.prevRowHeight}catch(h){f=e.prevRowHeight}if(f){e.prevRowHeight=f;var i,j,k,l=c.rowNum,m=e.scrollTop=e.bDiv.scrollTop,n=Math.round(g.position().top)-m,o=n+g.height(),p=f*l;if(a>o&&0>=n&&(void 0===c.lastpage||(parseInt((o+m+p-1)/p,10)||0)<=c.lastpage)&&(j=parseInt((a-o+p-1)/p,10)||1,o>=0||2>j||c.scroll===!0?(i=(Math.round((o+m)/p)||0)+1,n=-1):n=1),n>0&&(i=(parseInt(m/p,10)||0)+1,j=(parseInt((m+a)/p,10)||0)+2-i,k=!0),j){if(c.lastpage&&(i>c.lastpage||1===c.lastpage||i===c.page&&i===c.lastpage))return;e.hDiv.loading?e.timer=setTimeout(e.populateVisible,c.scrollTimeout):(c.page=i,k&&(e.selectionPreserver(g[0]),e.emptyRows.call(g[0],!1,!1)),e.populate(j)),c.scrollPopUp&&null!=c.lastpage&&($(\"#scroll_g\"+c.id).show().html($.jgrid.template($.jgrid.getRegional(d,\"defaults.pgtext\",c.pgtext),c.page,c.lastpage)).css({top:c.scrollTopOffset+m*((parseInt(c.height,10)-45)/(parseInt(f,10)*parseInt(c.records,10)))+\"px\",left:c.scrollLeftOffset}),$(this).mouseout(function(){$(\"#scroll_g\"+c.id).hide()}))}}}},scrollGrid:function(a){if(c.scroll){var b=e.bDiv.scrollTop;void 0===e.scrollTop&&(e.scrollTop=0),b!==e.scrollTop&&(e.scrollTop=b,e.timer&&clearTimeout(e.timer),e.timer=setTimeout(e.populateVisible,c.scrollTimeout))}e.hDiv.scrollLeft=e.bDiv.scrollLeft,c.footerrow&&(e.sDiv.scrollLeft=e.bDiv.scrollLeft),c.frozenColumns&&$(e.fbDiv).scrollTop(e.bDiv.scrollTop),a&&a.stopPropagation()},selectionPreserver:function(a){var b=a.p,c=b.selrow,d=b.selarrrow?$.makeArray(b.selarrrow):null,e=a.grid.bDiv.scrollLeft,f=function(){var g;if(b.selrow=null,b.selarrrow=[],b.multiselect&&d&&d.length>0)for(g=0;g<d.length;g++)d[g]!==c&&$(a).jqGrid(\"setSelection\",d[g],!1,null);c&&$(a).jqGrid(\"setSelection\",c,!1,null),a.grid.bDiv.scrollLeft=e,$(a).unbind(\".selectionPreserver\",f)};$(a).bind(\"jqGridGridComplete.selectionPreserver\",f)}};if(\"TABLE\"!==this.tagName.toUpperCase()||null==this.id)return void alert(\"Element is not a table or has no id!\");if(void 0!==document.documentMode&&document.documentMode<=5)return void alert(\"Grid can not be used in this ('quirks') mode!\");var f,g,h,i=0;for(g in $.jgrid.regional)$.jgrid.regional.hasOwnProperty(g)&&(0===i&&(f=g),i++);if(1===i&&f!==c.regional&&(c.regional=f),$(this).empty().attr(\"tabindex\",\"0\"),this.p=c,this.p.useProp=!!$.fn.prop,0===this.p.colNames.length)for(i=0;i<this.p.colModel.length;i++)this.p.colNames[i]=this.p.colModel[i].label||this.p.colModel[i].name;if(this.p.colNames.length!==this.p.colModel.length)return void alert($.jgrid.getRegional(this,\"errors.model\"));var j,k=$.jgrid.getMethod(\"getStyleUI\"),l=d.p.styleUI+\".common\",m=k(l,\"disabled\",!0),n=k(l,\"highlight\",!0),o=k(l,\"hover\",!0),p=k(l,\"cornerall\",!0),q=k(l,\"icon_base\",!0),r=$.jgrid.msie,s=[],t=[],u=[];l=d.p.styleUI+\".base\",j=$(\"<div \"+k(l,\"viewBox\",!1,\"ui-jqgrid-view\")+\" role='grid'></div>\"),d.p.direction=$.trim(d.p.direction.toLowerCase()),d.p._ald=!1,-1===$.inArray(d.p.direction,[\"ltr\",\"rtl\"])&&(d.p.direction=\"ltr\"),h=d.p.direction,$(j).insertBefore(this),$(this).appendTo(j);var v=$(\"<div \"+k(l,\"entrieBox\",!1,\"ui-jqgrid\")+\"></div>\");$(v).attr({id:\"gbox_\"+this.id,dir:h}).insertBefore(j),$(j).attr(\"id\",\"gview_\"+this.id).appendTo(v),$(\"<div \"+k(d.p.styleUI+\".common\",\"overlay\",!1,\"jqgrid-overlay\")+\" id='lui_\"+this.id+\"'></div>\").insertBefore(j),$(\"<div \"+k(l,\"loadingBox\",!1,\"loading\")+\" id='load_\"+this.id+\"'>\"+$.jgrid.getRegional(d,\"defaults.loadtext\",this.p.loadtext)+\"</div>\").insertBefore(j),$(this).attr({role:\"presentation\",\"aria-multiselectable\":!!this.p.multiselect,\"aria-labelledby\":\"gbox_\"+this.id});var w,x=[\"shiftKey\",\"altKey\",\"ctrlKey\"],y=function(a,b){return a=parseInt(a,10),isNaN(a)?b||0:a},z=function(a,b,c,f,g,h){var i,j,k=d.p.colModel[a],l=k.align,m='style=\"',n=k.classes,o=k.name,p=[];return l&&(m+=\"text-align:\"+l+\";\"),k.hidden===!0&&(m+=\"display:none;\"),0===b?m+=\"width: \"+e.headers[a].width+\"px;\":($.isFunction(k.cellattr)||\"string\"==typeof k.cellattr&&null!=$.jgrid.cellattr&&$.isFunction($.jgrid.cellattr[k.cellattr]))&&(i=$.isFunction(k.cellattr)?k.cellattr:$.jgrid.cellattr[k.cellattr],j=i.call(d,g,c,f,k,h),j&&\"string\"==typeof j&&(j=j.replace(/style/i,\"style\").replace(/title/i,\"title\"),j.indexOf(\"title\")>-1&&(k.title=!1),j.indexOf(\"class\")>-1&&(n=void 0),p=j.replace(/\\-style/g,\"-sti\").split(/style/),2===p.length?(p[1]=$.trim(p[1].replace(/\\-sti/g,\"-style\").replace(\"=\",\"\")),(0===p[1].indexOf(\"'\")||0===p[1].indexOf('\"'))&&(p[1]=p[1].substring(1)),m+=p[1].replace(/'/gi,'\"')):m+='\"')),p.length||(p[0]=\"\",m+='\"'),m+=(void 0!==n?' class=\"'+n+'\"':\"\")+(k.title&&c?' title=\"'+$.jgrid.stripHtml(c)+'\"':\"\"),m+=' aria-describedby=\"'+d.p.id+\"_\"+o+'\"',m+p[0]},A=function(a){return null==a||\"\"===a?\"&#160;\":d.p.autoencode?$.jgrid.htmlEncode(a):String(a)},B=function(a,b,c,e,f){var g,h=d.p.colModel[c];if(void 0!==h.formatter){a=\"\"!==String(d.p.idPrefix)?$.jgrid.stripPref(d.p.idPrefix,a):a;var i={rowId:a,colModel:h,gid:d.p.id,pos:c,styleUI:d.p.styleUI};g=$.isFunction(h.formatter)?h.formatter.call(d,b,i,e,f):$.fmatter?$.fn.fmatter.call(d,h.formatter,b,i,e,f):A(b)}else g=A(b);return g},C=function(a,b,c,d,e,f){var g,h;return g=B(a,b,c,e,\"add\"),h=z(c,d,g,e,a,f),'<td role=\"gridcell\" '+h+\">\"+g+\"</td>\"},D=function(a,b,c,e,f){var g='<input role=\"checkbox\" type=\"checkbox\" id=\"jqg_'+d.p.id+\"_\"+a+'\" '+f+' name=\"jqg_'+d.p.id+\"_\"+a+'\"'+(e?'checked=\"checked\"':\"\")+\"/>\",h=z(b,c,\"\",null,a,!0);return'<td role=\"gridcell\" '+h+\">\"+g+\"</td>\"},E=function(a,b,c,d,e){var f=(parseInt(c,10)-1)*parseInt(d,10)+1+b,g=z(a,b,f,null,b,!0);return'<td role=\"gridcell\" '+e+\" \"+g+\">\"+f+\"</td>\"},F=function(a){var b,c,e=[],f=0;for(c=0;c<d.p.colModel.length;c++)b=d.p.colModel[c],\"cb\"!==b.name&&\"subgrid\"!==b.name&&\"rn\"!==b.name&&(e[f]=\"local\"===a?b.name:\"xml\"===a||\"xmlstring\"===a?b.xmlmap||b.name:b.jsonmap||b.name,d.p.keyName!==!1&&b.key===!0&&(d.p.keyName=e[f]),f++);\nreturn e},G=function(a){var b=d.p.remapColumns;return b&&b.length||(b=$.map(d.p.colModel,function(a,b){return b})),a&&(b=$.map(b,function(b){return a>b?null:b-a})),b},H=function(a,b){var c;this.p.deepempty?$(this.rows).slice(1).remove():(c=this.rows.length>0?this.rows[0]:null,$(this.firstChild).empty().append(c)),a&&this.p.scroll&&($(this.grid.bDiv.firstChild).css({height:\"auto\"}),$(this.grid.bDiv.firstChild.firstChild).css({height:\"0px\",display:\"none\"}),0!==this.grid.bDiv.scrollTop&&(this.grid.bDiv.scrollTop=0)),b===!0&&this.p.treeGrid&&!this.p.loadonce&&(this.p.data=[],this.p._index={})},I=function(){var a,b,c,e,f,g,h,i,j,k,l,m=d.p,n=m.data,o=n.length,p=m.localReader,q=m.colModel,r=p.cell,s=(m.multiselect===!0?1:0)+(m.subGrid===!0?1:0)+(m.rownumbers===!0?1:0),t=m.scroll?$.jgrid.randId():1;if(\"local\"===m.datatype&&p.repeatitems===!0)for(j=G(s),k=F(\"local\"),e=m.keyIndex===!1?$.isFunction(p.id)?p.id.call(d,n):p.id:m.keyIndex,a=0;o>a;a++){for(c=n[a],f=$.jgrid.getAccessor(c,e),void 0===f&&(\"number\"==typeof e&&null!=q[e+s]&&(f=$.jgrid.getAccessor(c,q[e+s].name)),void 0===f&&(f=t+a,r&&(g=$.jgrid.getAccessor(c,r)||c,f=null!=g&&void 0!==g[e]?g[e]:f,g=null))),i={},i[p.id]=f,r&&(c=$.jgrid.getAccessor(c,r)||c),l=$.isArray(c)?j:k,b=0;b<l.length;b++)h=$.jgrid.getAccessor(c,l[b]),i[q[b+s].name]=h;$.extend(!0,n[a],i)}},J=function(){var a,b,c,e=d.p.data.length;for(a=d.p.keyName===!1||d.p.loadonce===!0?d.p.localReader.id:d.p.keyName,d.p._index=[],b=0;e>b;b++)c=$.jgrid.getAccessor(d.p.data[b],a),void 0===c&&(c=String(b+1)),d.p._index[c]=b},K=function(a,b,c,e,f){var g,h=\"-1\",i=\"\",j=b?\"display:none;\":\"\",k=$(d).triggerHandler(\"jqGridRowAttr\",[e,f,a]);if(\"object\"!=typeof k&&(k=$.isFunction(d.p.rowattr)?d.p.rowattr.call(d,e,f,a):\"string\"==typeof d.p.rowattr&&null!=$.jgrid.rowattr&&$.isFunction($.jgrid.rowattr[d.p.rowattr])?$.jgrid.rowattr[d.p.rowattr].call(d,e,f,a):{}),!$.isEmptyObject(k)){k.hasOwnProperty(\"id\")&&(a=k.id,delete k.id),k.hasOwnProperty(\"tabindex\")&&(h=k.tabindex,delete k.tabindex),k.hasOwnProperty(\"style\")&&(j+=k.style,delete k.style),k.hasOwnProperty(\"class\")&&(c+=\" \"+k[\"class\"],delete k[\"class\"]);try{delete k.role}catch(l){}for(g in k)k.hasOwnProperty(g)&&(i+=\" \"+g+\"=\"+k[g])}return'<tr role=\"row\" id=\"'+a+'\" tabindex=\"'+h+'\" class=\"'+c+'\"'+(\"\"===j?\"\":' style=\"'+j+'\"')+i+\">\"},L=function(a,b,c,e){var f=new Date,g=\"local\"!==d.p.datatype&&d.p.loadonce||\"xmlstring\"===d.p.datatype,h=\"_id_\",i=d.p.xmlReader,j=\"local\"===d.p.datatype?\"local\":\"xml\";if(g&&(d.p.data=[],d.p._index={},d.p.localReader.id=h),d.p.reccount=0,$.isXMLDoc(a)){-1!==d.p.treeANode||d.p.scroll?b=b>1?b:1:(H.call(d,!1,!0),b=1);var m,n,o,p,q,r,s,t,u,v,w=$(d),x=0,z=d.p.multiselect===!0?1:0,A=0,B=d.p.rownumbers===!0?1:0,I=[],J={},L=[],M=d.p.altRows===!0?d.p.altclass:\"\",N=k(l,\"rowBox\",!0,\"jqgrow ui-row-\"+d.p.direction);d.p.subGrid===!0&&(A=1,p=$.jgrid.getMethod(\"addSubGridCell\")),i.repeatitems||(I=F(j)),q=d.p.keyName===!1?$.isFunction(i.id)?i.id.call(d,a):i.id:d.p.keyName,r=-1===String(q).indexOf(\"[\")?I.length?function(a,b){return $(q,a).text()||b}:function(a,b){return $(i.cell,a).eq(q).text()||b}:function(a,b){return a.getAttribute(q.replace(/[\\[\\]]/g,\"\"))||b},d.p.userData={},d.p.page=y($.jgrid.getXmlData(a,i.page),d.p.page),d.p.lastpage=y($.jgrid.getXmlData(a,i.total),1),d.p.records=y($.jgrid.getXmlData(a,i.records)),$.isFunction(i.userdata)?d.p.userData=i.userdata.call(d,a)||{}:$.jgrid.getXmlData(a,i.userdata,!0).each(function(){d.p.userData[this.getAttribute(\"name\")]=$(this).text()});var O=$.jgrid.getXmlData(a,i.root,!0);O=$.jgrid.getXmlData(O,i.row,!0),O||(O=[]);var P,Q=O.length,R=0,S=[],T=parseInt(d.p.rowNum,10),U=d.p.scroll?$.jgrid.randId():1;if(Q>0&&d.p.page<=0&&(d.p.page=1),O&&Q){e&&(T*=e+1);var V,W=$.isFunction(d.p.afterInsertRow),X=!1,Y=$(\"#\"+$.jgrid.jqID(d.p.id)+\" tbody:first\"),Z=B?k(l,\"rownumBox\",!1,\"jqgrid-rownum\"):\"\",_=z?k(l,\"multiBox\",!1,\"cbox\"):\"\";for(d.p.grouping&&(X=d.p.groupingView.groupCollapse===!0,V=$.jgrid.getMethod(\"groupingPrepare\"));Q>R;){t=O[R],u=r(t,U+R),u=d.p.idPrefix+u,P=0===b?0:b+1,v=N+((P+R)%2===1?\" \"+M:\"\");var ab=L.length;if(L.push(\"\"),B&&L.push(E(0,R,d.p.page,d.p.rowNum,Z)),z&&L.push(D(u,B,R,!1,_)),A&&L.push(p.call(w,z+B,R+b)),i.repeatitems){s||(s=G(z+A+B));var bb=$.jgrid.getXmlData(t,i.cell,!0);$.each(s,function(a){var c=bb[this];return c?(o=c.textContent||c.text,J[d.p.colModel[a+z+A+B].name]=o,void L.push(C(u,o,a+z+A+B,R+b,t,J))):!1})}else for(m=0;m<I.length;m++)o=$.jgrid.getXmlData(t,I[m]),J[d.p.colModel[m+z+A+B].name]=o,L.push(C(u,o,m+z+A+B,R+b,t,J));if(L[ab]=K(u,X,v,J,t),L.push(\"</tr>\"),d.p.grouping&&(S.push(L),d.p.groupingView._locgr||V.call(w,J,R),L=[]),(g||d.p.treeGrid===!0&&!d.p._ald)&&(J[h]=$.jgrid.stripPref(d.p.idPrefix,u),d.p.data.push(J),d.p._index[J[h]]=d.p.data.length-1),d.p.gridview===!1&&(Y.append(L.join(\"\")),w.triggerHandler(\"jqGridAfterInsertRow\",[u,J,t]),W&&d.p.afterInsertRow.call(d,u,J,t),L=[]),J={},x++,R++,x===T)break}}if(d.p.gridview===!0&&(n=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?g||(w.jqGrid(\"groupingRender\",S,d.p.colModel.length,d.p.page,T),S=null):d.p.treeGrid===!0&&n>0?$(d.rows[n]).after(L.join(\"\")):(Y.append(L.join(\"\")),d.grid.cols=d.rows[0].cells)),d.p.subGrid===!0)try{w.jqGrid(\"addSubGrid\",z+B)}catch(cb){}if(d.p.totaltime=new Date-f,x>0&&0===d.p.records&&(d.p.records=Q),L=null,d.p.treeGrid===!0)try{w.jqGrid(\"setTreeNode\",n+1,x+n+1)}catch(db){}if(d.p.reccount=x,d.p.treeANode=-1,d.p.userDataOnFooter&&w.jqGrid(\"footerData\",\"set\",d.p.userData,!0),g&&(d.p.records=Q,d.p.lastpage=Math.ceil(Q/T)),c||d.updatepager(!1,!0),g){for(;Q>x;){if(t=O[x],u=r(t,x+U),u=d.p.idPrefix+u,i.repeatitems){s||(s=G(z+A+B));var eb=$.jgrid.getXmlData(t,i.cell,!0);$.each(s,function(a){var b=eb[this];return b?(o=b.textContent||b.text,void(J[d.p.colModel[a+z+A+B].name]=o)):!1})}else for(m=0;m<I.length;m++)o=$.jgrid.getXmlData(t,I[m]),J[d.p.colModel[m+z+A+B].name]=o;J[h]=$.jgrid.stripPref(d.p.idPrefix,u),d.p.grouping&&V.call(w,J,x),d.p.data.push(J),d.p._index[J[h]]=d.p.data.length-1,J={},x++}d.p.grouping&&(d.p.groupingView._locgr=!0,w.jqGrid(\"groupingRender\",S,d.p.colModel.length,d.p.page,T),S=null)}}},M=function(a,b,c,e){var f=new Date;if(a){-1!==d.p.treeANode||d.p.scroll?b=b>1?b:1:(H.call(d,!1,!0),b=1);var g,h,i=\"_id_\",j=\"local\"!==d.p.datatype&&d.p.loadonce||\"jsonstring\"===d.p.datatype;j&&(d.p.data=[],d.p._index={},d.p.localReader.id=i),d.p.reccount=0,\"local\"===d.p.datatype?(g=d.p.localReader,h=\"local\"):(g=d.p.jsonReader,h=\"json\");var m,o,p,q,r,s,t,u,v,w,x,z,A=$(d),B=0,I=[],J=d.p.multiselect?1:0,L=d.p.subGrid===!0?1:0,M=d.p.rownumbers===!0?1:0,N=G(J+L+M),O=F(h),P={},Q=[],R=d.p.altRows===!0?d.p.altclass:\"\",S=k(l,\"rowBox\",!0,\"jqgrow ui-row-\"+d.p.direction);d.p.page=y($.jgrid.getAccessor(a,g.page),d.p.page),d.p.lastpage=y($.jgrid.getAccessor(a,g.total),1),d.p.records=y($.jgrid.getAccessor(a,g.records)),d.p.userData=$.jgrid.getAccessor(a,g.userdata)||{},L&&(r=$.jgrid.getMethod(\"addSubGridCell\")),v=d.p.keyName===!1?$.isFunction(g.id)?g.id.call(d,a):g.id:d.p.keyName,u=$.jgrid.getAccessor(a,g.root),null==u&&$.isArray(a)&&(u=a),u||(u=[]),t=u.length,o=0,t>0&&d.p.page<=0&&(d.p.page=1);var T,U,V=parseInt(d.p.rowNum,10),W=d.p.scroll?$.jgrid.randId():1,X=!1;e&&(V*=e+1),\"local\"!==d.p.datatype||d.p.deselectAfterSort||(X=!0);var Y,Z=$.isFunction(d.p.afterInsertRow),_=[],ab=!1,bb=$(\"#\"+$.jgrid.jqID(d.p.id)+\" tbody:first\"),cb=M?k(l,\"rownumBox\",!1,\"jqgrid-rownum\"):\"\",db=J?k(l,\"multiBox\",!1,\"cbox\"):\"\";for(d.p.grouping&&(ab=d.p.groupingView.groupCollapse===!0,Y=$.jgrid.getMethod(\"groupingPrepare\"));t>o;){if(q=u[o],x=$.jgrid.getAccessor(q,v),void 0===x&&(\"number\"==typeof v&&null!=d.p.colModel[v+J+L+M]&&(x=$.jgrid.getAccessor(q,d.p.colModel[v+J+L+M].name)),void 0===x&&(x=W+o,0===I.length&&g.cell))){var eb=$.jgrid.getAccessor(q,g.cell)||q;x=null!=eb&&void 0!==eb[v]?eb[v]:x,eb=null}x=d.p.idPrefix+x,T=1===b?0:b,z=S+((T+o)%2===1?\" \"+R:\"\"),X&&(U=d.p.multiselect?-1!==$.inArray(x,d.p.selarrrow):x===d.p.selrow);var fb=Q.length;for(Q.push(\"\"),M&&Q.push(E(0,o,d.p.page,d.p.rowNum,cb)),J&&Q.push(D(x,M,o,U,db)),L&&Q.push(r.call(A,J+M,o+b)),s=O,g.repeatitems&&(g.cell&&(q=$.jgrid.getAccessor(q,g.cell)||q),$.isArray(q)&&(s=N)),p=0;p<s.length;p++)m=$.jgrid.getAccessor(q,s[p]),P[d.p.colModel[p+J+L+M].name]=m,Q.push(C(x,m,p+J+L+M,o+b,q,P));if(z+=U?\" \"+n:\"\",Q[fb]=K(x,ab,z,P,q),Q.push(\"</tr>\"),d.p.grouping&&(_.push(Q),d.p.groupingView._locgr||Y.call(A,P,o),Q=[]),(j||d.p.treeGrid===!0&&!d.p._ald)&&(P[i]=$.jgrid.stripPref(d.p.idPrefix,x),d.p.data.push(P),d.p._index[P[i]]=d.p.data.length-1),d.p.gridview===!1&&(bb.append(Q.join(\"\")),A.triggerHandler(\"jqGridAfterInsertRow\",[x,P,q]),Z&&d.p.afterInsertRow.call(d,x,P,q),Q=[]),P={},B++,o++,B===V)break}if(d.p.gridview===!0&&(w=d.p.treeANode>-1?d.p.treeANode:0,d.p.grouping?j||(A.jqGrid(\"groupingRender\",_,d.p.colModel.length,d.p.page,V),_=null):d.p.treeGrid===!0&&w>0?$(d.rows[w]).after(Q.join(\"\")):(bb.append(Q.join(\"\")),d.grid.cols=d.rows[0].cells)),d.p.subGrid===!0)try{A.jqGrid(\"addSubGrid\",J+M)}catch(gb){}if(d.p.totaltime=new Date-f,B>0&&0===d.p.records&&(d.p.records=t),Q=null,d.p.treeGrid===!0)try{A.jqGrid(\"setTreeNode\",w+1,B+w+1)}catch(hb){}if(d.p.reccount=B,d.p.treeANode=-1,d.p.userDataOnFooter&&A.jqGrid(\"footerData\",\"set\",d.p.userData,!0),j&&(d.p.records=t,d.p.lastpage=Math.ceil(t/V)),c||d.updatepager(!1,!0),j){for(;t>B&&u[B];){if(q=u[B],x=$.jgrid.getAccessor(q,v),void 0===x&&(\"number\"==typeof v&&null!=d.p.colModel[v+J+L+M]&&(x=$.jgrid.getAccessor(q,d.p.colModel[v+J+L+M].name)),void 0===x&&(x=W+B,0===I.length&&g.cell))){var ib=$.jgrid.getAccessor(q,g.cell)||q;x=null!=ib&&void 0!==ib[v]?ib[v]:x,ib=null}if(q){for(x=d.p.idPrefix+x,s=O,g.repeatitems&&(g.cell&&(q=$.jgrid.getAccessor(q,g.cell)||q),$.isArray(q)&&(s=N)),p=0;p<s.length;p++)P[d.p.colModel[p+J+L+M].name]=$.jgrid.getAccessor(q,s[p]);P[i]=$.jgrid.stripPref(d.p.idPrefix,x),d.p.grouping&&Y.call(A,P,B),d.p.data.push(P),d.p._index[P[i]]=d.p.data.length-1,P={}}B++}d.p.grouping&&(d.p.groupingView._locgr=!0,A.jqGrid(\"groupingRender\",_,d.p.colModel.length,d.p.page,V),_=null)}}},N=function(){function a(b){var c,e,f,g,h,i,k=0;if(null!=b.groups){for(e=b.groups.length&&\"OR\"===b.groupOp.toString().toUpperCase(),e&&q.orBegin(),c=0;c<b.groups.length;c++){k>0&&e&&q.or();try{a(b.groups[c])}catch(l){alert(l)}k++}e&&q.orEnd()}if(null!=b.rules)try{for(f=b.rules.length&&\"OR\"===b.groupOp.toString().toUpperCase(),f&&q.orBegin(),c=0;c<b.rules.length;c++)h=b.rules[c],g=b.groupOp.toString().toUpperCase(),p[h.op]&&h.field&&(k>0&&g&&\"OR\"===g&&(q=q.or()),i=j[h.field],\"date\"===i.stype&&i.srcfmt&&i.newfmt&&i.srcfmt!==i.newfmt&&(h.data=$.jgrid.parseDate.call(d,i.newfmt,h.data,i.srcfmt)),q=p[h.op](q,g)(h.field,h.data,j[h.field])),k++;f&&q.orEnd()}catch(m){alert(m)}}var b,c,e,f,g=d.p.multiSort?[]:\"\",h=[],i=!1,j={},k=[],l=[];if($.isArray(d.p.data)){var m,n,o=d.p.grouping?d.p.groupingView:!1;if($.each(d.p.colModel,function(){if(c=this.sorttype||\"text\",\"date\"===c||\"datetime\"===c?(this.formatter&&\"string\"==typeof this.formatter&&\"date\"===this.formatter?(b=this.formatoptions&&this.formatoptions.srcformat?this.formatoptions.srcformat:$.jgrid.getRegional(d,\"formatter.date.srcformat\"),e=this.formatoptions&&this.formatoptions.newformat?this.formatoptions.newformat:$.jgrid.getRegional(d,\"formatter.date.newformat\")):b=e=this.datefmt||\"Y-m-d\",j[this.name]={stype:c,srcfmt:b,newfmt:e,sfunc:this.sortfunc||null}):j[this.name]={stype:c,srcfmt:\"\",newfmt:\"\",sfunc:this.sortfunc||null},d.p.grouping)for(n=0,m=o.groupField.length;m>n;n++)if(this.name===o.groupField[n]){var a=this.name;this.index&&(a=this.index),k[n]=j[a],l[n]=a}d.p.multiSort||i||this.index!==d.p.sortname&&this.name!==d.p.sortname||(g=this.name,i=!0)}),d.p.multiSort&&(g=s,h=t),d.p.treeGrid&&d.p._sort)return void $(d).jqGrid(\"SortTree\",g,d.p.sortorder,j[g].stype||\"text\",j[g].srcfmt||\"\");var p={eq:function(a){return a.equals},ne:function(a){return a.notEquals},lt:function(a){return a.less},le:function(a){return a.lessOrEquals},gt:function(a){return a.greater},ge:function(a){return a.greaterOrEquals},cn:function(a){return a.contains},nc:function(a,b){return\"OR\"===b?a.orNot().contains:a.andNot().contains},bw:function(a){return a.startsWith},bn:function(a,b){return\"OR\"===b?a.orNot().startsWith:a.andNot().startsWith},en:function(a,b){return\"OR\"===b?a.orNot().endsWith:a.andNot().endsWith},ew:function(a){return a.endsWith},ni:function(a,b){return\"OR\"===b?a.orNot().equals:a.andNot().equals},\"in\":function(a){return a.equals},nu:function(a){return a.isNull},nn:function(a,b){return\"OR\"===b?a.orNot().isNull:a.andNot().isNull}},q=$.jgrid.from.call(d,d.p.data);if(d.p.ignoreCase&&(q=q.ignoreCase()),d.p.search===!0){var r=d.p.postData.filters;if(r)\"string\"==typeof r&&(r=$.jgrid.parse(r)),a(r);else try{f=j[d.p.postData.searchField],\"date\"===f.stype&&f.srcfmt&&f.newfmt&&f.srcfmt!==f.newfmt&&(d.p.postData.searchString=$.jgrid.parseDate.call(d,f.newfmt,d.p.postData.searchString,f.srcfmt)),q=p[d.p.postData.searchOper](q)(d.p.postData.searchField,d.p.postData.searchString,j[d.p.postData.searchField])}catch(u){}}else d.p.treeGrid&&\"nested\"===d.p.treeGridModel&&q.orderBy(d.p.treeReader.left_field,\"asc\",\"integer\",\"\",null);if(d.p.treeGrid&&\"adjacency\"===d.p.treeGridModel&&(m=0,g=null),d.p.grouping)for(n=0;m>n;n++)q.orderBy(l[n],o.groupOrder[n],k[n].stype,k[n].srcfmt);d.p.multiSort?$.each(g,function(a){q.orderBy(this,h[a],j[this].stype,j[this].srcfmt,j[this].sfunc)}):g&&d.p.sortorder&&i&&(\"DESC\"===d.p.sortorder.toUpperCase()?q.orderBy(d.p.sortname,\"d\",j[g].stype,j[g].srcfmt,j[g].sfunc):q.orderBy(d.p.sortname,\"a\",j[g].stype,j[g].srcfmt,j[g].sfunc));var v=q.select(),w=parseInt(d.p.rowNum,10),x=v.length,y=parseInt(d.p.page,10),z=Math.ceil(x/w),A={};if((d.p.search||d.p.resetsearch)&&d.p.grouping&&d.p.groupingView._locgr){d.p.groupingView.groups=[];var B,C,D,E=$.jgrid.getMethod(\"groupingPrepare\");if(d.p.footerrow&&d.p.userDataOnFooter){for(C in d.p.userData)d.p.userData.hasOwnProperty(C)&&(d.p.userData[C]=0);D=!0}for(B=0;x>B;B++){if(D)for(C in d.p.userData)d.p.userData.hasOwnProperty(C)&&(d.p.userData[C]+=parseFloat(v[B][C]||0));E.call($(d),v[B],B,w)}}return v=d.p.treeGrid&&d.p.search?$(d).jqGrid(\"searchTree\",v):v.slice((y-1)*w,y*w),q=null,j=null,A[d.p.localReader.total]=z,A[d.p.localReader.page]=y,A[d.p.localReader.records]=x,A[d.p.localReader.root]=v,A[d.p.localReader.userdata]=d.p.userData,v=null,A}},O=function(a,b){var c,e,f,g,h,i,j,n,p=\"\",q=d.p.pager?$.jgrid.jqID(d.p.pager.substr(1)):\"\",r=q?\"_\"+q:\"\",s=d.p.toppager?\"_\"+d.p.toppager.substr(1):\"\";if(f=parseInt(d.p.page,10)-1,0>f&&(f=0),f*=parseInt(d.p.rowNum,10),h=f+d.p.reccount,d.p.scroll){var t=$(\"tbody:first > tr:gt(0)\",d.grid.bDiv);f=h-t.length,d.p.reccount=t.length;var u=t.outerHeight()||d.grid.prevRowHeight;if(u){var v=f*u,w=parseInt(d.p.records,10)*u;$(\">div:first\",d.grid.bDiv).css({height:w}).children(\"div:first\").css({height:v,display:v?\"\":\"none\"}),0===d.grid.bDiv.scrollTop&&d.p.page>1&&(d.grid.bDiv.scrollTop=d.p.rowNum*(d.p.page-1)*u)}d.grid.bDiv.scrollLeft=d.grid.hDiv.scrollLeft}if(p=d.p.pager||\"\",p+=d.p.toppager?p?\",\"+d.p.toppager:d.p.toppager:\"\"){if(j=$.jgrid.getRegional(d,\"formatter.integer\"),c=y(d.p.page),e=y(d.p.lastpage),$(\".selbox\",p)[this.p.useProp?\"prop\":\"attr\"](\"disabled\",!1),d.p.pginput===!0&&($(\"#input\"+r).html($.jgrid.template($.jgrid.getRegional(d,\"defaults.pgtext\",d.p.pgtext)||\"\",\"<input \"+k(l,\"pgInput\",!1,\"ui-pg-input\")+\" type='text' size='2' maxlength='7' value='0' role='textbox'/>\",\"<span id='sp_1_\"+$.jgrid.jqID(q)+\"'></span>\")),d.p.toppager&&$(\"#input_t\"+s).html($.jgrid.template($.jgrid.getRegional(d,\"defaults.pgtext\",d.p.pgtext)||\"\",\"<input \"+k(l,\"pgInput\",!1,\"ui-pg-input\")+\" type='text' size='2' maxlength='7' value='0' role='textbox'/>\",\"<span id='sp_1_\"+$.jgrid.jqID(q)+\"_toppager'></span>\")),$(\".ui-pg-input\",p).val(d.p.page),n=d.p.toppager?\"#sp_1\"+r+\",#sp_1\"+r+\"_toppager\":\"#sp_1\"+r,$(n).html($.fmatter?$.fmatter.util.NumberFormat(d.p.lastpage,j):d.p.lastpage)),d.p.viewrecords)if(0===d.p.reccount)$(\".ui-paging-info\",p).html($.jgrid.getRegional(d,\"defaults.emptyrecords\",d.p.emptyrecords));else{g=f+1,i=d.p.records,$.fmatter&&(g=$.fmatter.util.NumberFormat(g,j),h=$.fmatter.util.NumberFormat(h,j),i=$.fmatter.util.NumberFormat(i,j));var x=$.jgrid.getRegional(d,\"defaults.recordtext\",d.p.recordtext);$(\".ui-paging-info\",p).html($.jgrid.template(x,g,h,i))}d.p.pgbuttons===!0&&(0>=c&&(c=e=0),1===c||0===c?($(\"#first\"+r+\", #prev\"+r).addClass(m).removeClass(o),d.p.toppager&&$(\"#first_t\"+s+\", #prev_t\"+s).addClass(m).removeClass(o)):($(\"#first\"+r+\", #prev\"+r).removeClass(m),d.p.toppager&&$(\"#first_t\"+s+\", #prev_t\"+s).removeClass(m)),c===e||0===c?($(\"#next\"+r+\", #last\"+r).addClass(m).removeClass(o),d.p.toppager&&$(\"#next_t\"+s+\", #last_t\"+s).addClass(m).removeClass(o)):($(\"#next\"+r+\", #last\"+r).removeClass(m),d.p.toppager&&$(\"#next_t\"+s+\", #last_t\"+s).removeClass(m)))}a===!0&&d.p.rownumbers===!0&&$(\">td.jqgrid-rownum\",d.rows).each(function(a){$(this).html(f+1+a)}),b&&d.p.jqgdnd&&$(d).jqGrid(\"gridDnD\",\"updateDnD\"),$(d).triggerHandler(\"jqGridGridComplete\"),$.isFunction(d.p.gridComplete)&&d.p.gridComplete.call(d),$(d).triggerHandler(\"jqGridAfterGridComplete\")},P=function(){d.grid.hDiv.loading=!0,d.p.hiddengrid||$(d).jqGrid(\"progressBar\",{method:\"show\",loadtype:d.p.loadui,htmlcontent:$.jgrid.getRegional(d,\"defaults.loadtext\",d.p.loadtext)})},Q=function(){d.grid.hDiv.loading=!1,$(d).jqGrid(\"progressBar\",{method:\"hide\",loadtype:d.p.loadui})},R=function(a){if(!d.grid.hDiv.loading){var b,c,e=d.p.scroll&&a===!1,f={},g=d.p.prmNames;d.p.page<=0&&(d.p.page=Math.min(1,d.p.lastpage)),null!==g.search&&(f[g.search]=d.p.search),null!==g.nd&&(f[g.nd]=(new Date).getTime()),null!==g.rows&&(f[g.rows]=d.p.rowNum),null!==g.page&&(f[g.page]=d.p.page),null!==g.sort&&(f[g.sort]=d.p.sortname),null!==g.order&&(f[g.order]=d.p.sortorder),null!==d.p.rowTotal&&null!==g.totalrows&&(f[g.totalrows]=d.p.rowTotal);var h=$.isFunction(d.p.loadComplete),i=h?d.p.loadComplete:null,j=0;if(a=a||1,a>1?null!==g.npage?(f[g.npage]=a,j=a-1,a=1):i=function(b){d.p.page++,d.grid.hDiv.loading=!1,h&&d.p.loadComplete.call(d,b),R(a-1)}:null!==g.npage&&delete d.p.postData[g.npage],d.p.grouping){$(d).jqGrid(\"groupingSetup\");var k,l=d.p.groupingView,m=\"\";for(k=0;k<l.groupField.length;k++){var n=l.groupField[k];$.each(d.p.colModel,function(a,b){b.name===n&&b.index&&(n=b.index)}),m+=n+\" \"+l.groupOrder[k]+\", \"}f[g.sort]=m+f[g.sort]}$.extend(d.p.postData,f);var o=d.p.scroll?d.rows.length-1:1,p=$(d).triggerHandler(\"jqGridBeforeRequest\");if(p===!1||\"stop\"===p)return;if($.isFunction(d.p.datatype))return void d.p.datatype.call(d,d.p.postData,\"load_\"+d.p.id,o,a,j);if($.isFunction(d.p.beforeRequest)&&(p=d.p.beforeRequest.call(d),void 0===p&&(p=!0),p===!1))return;switch(b=d.p.datatype.toLowerCase()){case\"json\":case\"jsonp\":case\"xml\":case\"script\":$.ajax($.extend({url:d.p.url,type:d.p.mtype,dataType:b,data:$.isFunction(d.p.serializeGridData)?d.p.serializeGridData.call(d,d.p.postData):d.p.postData,success:function(c,f,g){return $.isFunction(d.p.beforeProcessing)&&d.p.beforeProcessing.call(d,c,f,g)===!1?void Q():(\"xml\"===b?L(c,o,a>1,j):M(c,o,a>1,j),$(d).triggerHandler(\"jqGridLoadComplete\",[c]),i&&i.call(d,c),$(d).triggerHandler(\"jqGridAfterLoadComplete\",[c]),e&&d.grid.populateVisible(),(d.p.loadonce||d.p.treeGrid)&&(d.p.datatype=\"local\"),c=null,void(1===a&&Q()))},error:function(b,c,e){$.isFunction(d.p.loadError)&&d.p.loadError.call(d,b,c,e),1===a&&Q(),b=null},beforeSend:function(a,b){var c=!0;return $.isFunction(d.p.loadBeforeSend)&&(c=d.p.loadBeforeSend.call(d,a,b)),void 0===c&&(c=!0),c===!1?!1:void P()}},$.jgrid.ajaxOptions,d.p.ajaxGridOptions));break;case\"xmlstring\":P(),c=\"string\"!=typeof d.p.datastr?d.p.datastr:$.parseXML(d.p.datastr),L(c),$(d).triggerHandler(\"jqGridLoadComplete\",[c]),h&&d.p.loadComplete.call(d,c),$(d).triggerHandler(\"jqGridAfterLoadComplete\",[c]),d.p.datatype=\"local\",d.p.datastr=null,Q();break;case\"jsonstring\":P(),c=\"string\"==typeof d.p.datastr?$.jgrid.parse(d.p.datastr):d.p.datastr,M(c),$(d).triggerHandler(\"jqGridLoadComplete\",[c]),h&&d.p.loadComplete.call(d,c),$(d).triggerHandler(\"jqGridAfterLoadComplete\",[c]),d.p.datatype=\"local\",d.p.datastr=null,Q();break;case\"local\":case\"clientside\":P(),d.p.datatype=\"local\",d.p._ald=!0;var q=N();M(q,o,a>1,j),$(d).triggerHandler(\"jqGridLoadComplete\",[q]),i&&i.call(d,q),$(d).triggerHandler(\"jqGridAfterLoadComplete\",[q]),e&&d.grid.populateVisible(),Q(),d.p._ald=!1}d.p._sort=!1}},S=function(a){$(\"#cb_\"+$.jgrid.jqID(d.p.id),d.grid.hDiv)[d.p.useProp?\"prop\":\"attr\"](\"checked\",a);var b=d.p.frozenColumns?d.p.id+\"_frozen\":\"\";b&&$(\"#cb_\"+$.jgrid.jqID(d.p.id),d.grid.fhDiv)[d.p.useProp?\"prop\":\"attr\"](\"checked\",a)},T=function(a,b){var c,e,f,g,i,j,n,p=\"<td class='ui-pg-button \"+m+\"'><span class='ui-separator'></span></td>\",r=\"\",s=\"<table class='ui-pg-table ui-common-table ui-paging-pager'><tbody><tr>\",t=\"\",u=function(a,b){var c;return $.isFunction(d.p.onPaging)&&(c=d.p.onPaging.call(d,a,b)),\"stop\"===c?!1:(d.p.selrow=null,d.p.multiselect&&(d.p.selarrrow=[],S(!1)),d.p.savedRow=[],!0)};if(a=a.substr(1),b+=\"_\"+a,c=\"pg_\"+a,e=a+\"_left\",f=a+\"_center\",g=a+\"_right\",$(\"#\"+$.jgrid.jqID(a)).append(\"<div id='\"+c+\"' class='ui-pager-control' role='group'><table class='ui-pg-table ui-common-table ui-pager-table'><tbody><tr><td id='\"+e+\"' align='left'></td><td id='\"+f+\"' align='center' style='white-space:pre;'></td><td id='\"+g+\"' align='right'></td></tr></tbody></table></div>\").attr(\"dir\",\"ltr\"),d.p.rowList.length>0){t='<td dir=\"'+h+'\">',t+=\"<select \"+k(l,\"pgSelectBox\",!1,\"ui-pg-selbox\")+' role=\"listbox\" title=\"'+($.jgrid.getRegional(d,\"defaults.pgrecs\",d.p.pgrecs)||\"\")+'\">';var v;for(n=0;n<d.p.rowList.length;n++)v=d.p.rowList[n].toString().split(\":\"),1===v.length&&(v[1]=v[0]),t+='<option role=\"option\" value=\"'+v[0]+'\"'+(y(d.p.rowNum,0)===y(v[0],0)?' selected=\"selected\"':\"\")+\">\"+v[1]+\"</option>\";t+=\"</select></td>\"}if(\"rtl\"===h&&(s+=t),d.p.pginput===!0&&(r=\"<td id='input\"+b+\"' dir='\"+h+\"'>\"+$.jgrid.template($.jgrid.getRegional(d,\"defaults.pgtext\",d.p.pgtext)||\"\",\"<input class='ui-pg-input' type='text' size='2' maxlength='7' value='0' role='textbox'/>\",\"<span id='sp_1_\"+$.jgrid.jqID(a)+\"'></span>\")+\"</td>\"),d.p.pgbuttons===!0){var w=[\"first\"+b,\"prev\"+b,\"next\"+b,\"last\"+b],x=k(l,\"pgButtonBox\",!0,\"ui-pg-button\"),z=[$.jgrid.getRegional(d,\"defaults.pgfirst\",d.p.pgfirst)||\"\",$.jgrid.getRegional(d,\"defaults.pgprev\",d.p.pgprev)||\"\",$.jgrid.getRegional(d,\"defaults.pgnext\",d.p.pgnext)||\"\",$.jgrid.getRegional(d,\"defaults.pglast\",d.p.pglast)||\"\"];\"rtl\"===h&&(w.reverse(),z.reverse()),s+=\"<td id='\"+w[0]+\"' class='\"+x+\"' title='\"+z[0]+\"'><span \"+k(l,\"icon_first\",!1,q)+\"></span></td>\",s+=\"<td id='\"+w[1]+\"' class='\"+x+\"'  title='\"+z[1]+\"'><span \"+k(l,\"icon_prev\",!1,q)+\"></span></td>\",s+=\"\"!==r?p+r+p:\"\",s+=\"<td id='\"+w[2]+\"' class='\"+x+\"' title='\"+z[2]+\"'><span \"+k(l,\"icon_next\",!1,q)+\"></span></td>\",s+=\"<td id='\"+w[3]+\"' class='\"+x+\"' title='\"+z[3]+\"'><span \"+k(l,\"icon_end\",!1,q)+\"></span></td>\"}else\"\"!==r&&(s+=r);\"ltr\"===h&&(s+=t),s+=\"</tr></tbody></table>\",d.p.viewrecords===!0&&$(\"td#\"+a+\"_\"+d.p.recordpos,\"#\"+c).append(\"<div dir='\"+h+\"' style='text-align:\"+d.p.recordpos+\"' class='ui-paging-info'></div>\"),$(\"td#\"+a+\"_\"+d.p.pagerpos,\"#\"+c).append(s),j=$(\"#gbox_\"+$.jgrid.jqID(d.p.id)).css(\"font-size\")||\"11px\",$(\"#gbox_\"+$.jgrid.jqID(d.p.id)).append(\"<div id='testpg' \"+k(l,\"entrieBox\",!1,\"ui-jqgrid\")+\" style='font-size:\"+j+\";visibility:hidden;' ></div>\"),i=$(s).clone().appendTo(\"#testpg\").width(),$(\"#testpg\").remove(),i>0&&(\"\"!==r&&(i+=50),$(\"td#\"+a+\"_\"+d.p.pagerpos,\"#\"+c).width(i)),d.p._nvtd=[],d.p._nvtd[0]=Math.floor(i?(d.p.width-i)/2:d.p.width/3),d.p._nvtd[1]=0,s=null,$(\".ui-pg-selbox\",\"#\"+c).bind(\"change\",function(){return u(\"records\",this)?(d.p.page=Math.round(d.p.rowNum*(d.p.page-1)/this.value-.5)+1,d.p.rowNum=this.value,d.p.pager&&$(\".ui-pg-selbox\",d.p.pager).val(this.value),d.p.toppager&&$(\".ui-pg-selbox\",d.p.toppager).val(this.value),R(),!1):!1}),d.p.pgbuttons===!0&&($(\".ui-pg-button\",\"#\"+c).hover(function(){$(this).hasClass(m)?this.style.cursor=\"default\":($(this).addClass(o),this.style.cursor=\"pointer\")},function(){$(this).hasClass(m)||($(this).removeClass(o),this.style.cursor=\"default\")}),$(\"#first\"+$.jgrid.jqID(b)+\", #prev\"+$.jgrid.jqID(b)+\", #next\"+$.jgrid.jqID(b)+\", #last\"+$.jgrid.jqID(b)).click(function(){if($(this).hasClass(m))return!1;var a=y(d.p.page,1),c=y(d.p.lastpage,1),e=!1,f=!0,g=!0,h=!0,i=!0;return 0===c||1===c?(f=!1,g=!1,h=!1,i=!1):c>1&&a>=1?1===a?(f=!1,g=!1):a===c&&(h=!1,i=!1):c>1&&0===a&&(h=!1,i=!1,a=c-1),u(this.id.split(\"_\")[0],this)?(this.id===\"first\"+b&&f&&(d.p.page=1,e=!0),this.id===\"prev\"+b&&g&&(d.p.page=a-1,e=!0),this.id===\"next\"+b&&h&&(d.p.page=a+1,e=!0),this.id===\"last\"+b&&i&&(d.p.page=c,e=!0),e&&R(),!1):!1})),d.p.pginput===!0&&$(\"#\"+c).on(\"keypress\",\"input.ui-pg-input\",function(a){var b=a.charCode||a.keyCode||0;return 13===b?u(\"user\",this)?($(this).val(y($(this).val(),1)),d.p.page=$(this).val()>0?$(this).val():d.p.page,R(),!1):!1:this})},U=function(a,b){var c,e=d.p.colModel,f=d.p.frozenColumns?b:d.grid.headers[a].el,g=\"\";$(\"span.ui-grid-ico-sort\",f).addClass(m),$(f).attr(\"aria-selected\",\"false\"),c=\"local\"===d.p.datatype?e[a].name:e[a].index||e[a].name,e[a].lso?\"asc\"===e[a].lso?(e[a].lso+=\"-desc\",g=\"desc\"):\"desc\"===e[a].lso?(e[a].lso+=\"-asc\",g=\"asc\"):(\"asc-desc\"===e[a].lso||\"desc-asc\"===e[a].lso)&&(e[a].lso=\"\"):e[a].lso=g=e[a].firstsortorder||\"asc\",g?($(\"span.s-ico\",f).show(),$(\"span.ui-icon-\"+g,f).removeClass(m),$(f).attr(\"aria-selected\",\"true\")):d.p.viewsortcols[0]||$(\"span.s-ico\",f).hide();var h=s.indexOf(c);-1===h?(s.push(c),t.push(g)):g?t[h]=g:(t.splice(h,1),s.splice(h,1)),d.p.sortorder=\"\",d.p.sortname=\"\";for(var i=0,j=s.length;j>i;i++)i>0&&(d.p.sortname+=\", \"),d.p.sortname+=s[i],i!==j-1&&(d.p.sortname+=\" \"+t[i]);d.p.sortorder=t[j-1]},V=function(a,b,c,e,f){if(d.p.colModel[b].sortable&&!(d.p.savedRow.length>0)){if(c||(d.p.lastsort===b&&\"\"!==d.p.sortname?\"asc\"===d.p.sortorder?d.p.sortorder=\"desc\":\"desc\"===d.p.sortorder&&(d.p.sortorder=\"asc\"):d.p.sortorder=d.p.colModel[b].firstsortorder||\"asc\",d.p.page=1),d.p.multiSort)U(b,f);else{if(e){if(d.p.lastsort===b&&d.p.sortorder===e&&!c)return;d.p.sortorder=e}var g,h=d.grid.headers[d.p.lastsort]?d.grid.headers[d.p.lastsort].el:null,i=d.p.frozenColumns?f:d.grid.headers[b].el,j=\"single\"===d.p.viewsortcols[1]?!0:!1;g=$(h).find(\"span.ui-grid-ico-sort\"),g.addClass(m),j&&$(g).css(\"display\",\"none\"),$(h).attr(\"aria-selected\",\"false\"),d.p.frozenColumns&&(g=d.grid.fhDiv.find(\"span.ui-grid-ico-sort\"),g.addClass(m),j&&g.css(\"display\",\"none\"),d.grid.fhDiv.find(\"th\").attr(\"aria-selected\",\"false\")),g=$(i).find(\"span.ui-icon-\"+d.p.sortorder),g.removeClass(m),j&&g.css(\"display\",\"\"),$(i).attr(\"aria-selected\",\"true\"),d.p.viewsortcols[0]||(d.p.lastsort!==b?(d.p.frozenColumns&&d.grid.fhDiv.find(\"span.s-ico\").hide(),$(\"span.s-ico\",h).hide(),$(\"span.s-ico\",i).show()):\"\"===d.p.sortname&&$(\"span.s-ico\",i).show()),a=a.substring(5+d.p.id.length+1),d.p.sortname=d.p.colModel[b].index||a}if(\"stop\"===$(d).triggerHandler(\"jqGridSortCol\",[d.p.sortname,b,d.p.sortorder]))return void(d.p.lastsort=b);if($.isFunction(d.p.onSortCol)&&\"stop\"===d.p.onSortCol.call(d,d.p.sortname,b,d.p.sortorder))return void(d.p.lastsort=b);if(\"local\"===d.p.datatype?d.p.deselectAfterSort&&$(d).jqGrid(\"resetSelection\"):(d.p.selrow=null,d.p.multiselect&&S(!1),d.p.selarrrow=[],d.p.savedRow=[]),d.p.scroll){var k=d.grid.bDiv.scrollLeft;H.call(d,!0,!1),d.grid.hDiv.scrollLeft=k}d.p.subGrid&&\"local\"===d.p.datatype&&$(\"td.sgexpanded\",\"#\"+$.jgrid.jqID(d.p.id)).each(function(){$(this).trigger(\"click\")}),d.p._sort=!0,R(),d.p.lastsort=b,d.p.sortname!==a&&b&&(d.p.lastsort=b)}},W=function(){var a,b,c,f,g=0,h=$.jgrid.cell_width?0:y(d.p.cellLayout,0),i=0,j=y(d.p.scrollOffset,0),k=!1,l=0;$.each(d.p.colModel,function(){if(void 0===this.hidden&&(this.hidden=!1),d.p.grouping&&d.p.autowidth){var a=$.inArray(this.name,d.p.groupingView.groupField);a>=0&&d.p.groupingView.groupColumnShow.length>a&&(this.hidden=!d.p.groupingView.groupColumnShow[a])}this.widthOrg=b=y(this.width,0),this.hidden===!1&&(g+=b+h,this.fixed?l+=b+h:i++)}),isNaN(d.p.width)&&(d.p.width=g+(d.p.shrinkToFit!==!1||isNaN(d.p.height)?0:j)),e.width=d.p.width,d.p.tblwidth=g,d.p.shrinkToFit===!1&&d.p.forceFit===!0&&(d.p.forceFit=!1),d.p.shrinkToFit===!0&&i>0&&(c=e.width-h*i-l,isNaN(d.p.height)||(c-=j,k=!0),g=0,$.each(d.p.colModel,function(e){this.hidden!==!1||this.fixed||(b=Math.round(c*this.width/(d.p.tblwidth-h*i-l)),this.width=b,g+=b,a=e)}),f=0,k?e.width-l-(g+h*i)!==j&&(f=e.width-l-(g+h*i)-j):k||1===Math.abs(e.width-l-(g+h*i))||(f=e.width-l-(g+h*i)),d.p.colModel[a].width+=f,d.p.tblwidth=g+f+h*i+l,d.p.tblwidth>d.p.width&&(d.p.colModel[a].width-=d.p.tblwidth-parseInt(d.p.width,10),d.p.tblwidth=d.p.width))},X=function(a){var b,c=a,e=a;for(b=a+1;b<d.p.colModel.length;b++)if(d.p.colModel[b].hidden!==!0){e=b;break}return e-c},Y=function(a){var b=$(d.grid.headers[a].el),c=[b.position().left+b.outerWidth()];return\"rtl\"===d.p.direction&&(c[0]=d.p.width-c[0]),c[0]-=d.grid.bDiv.scrollLeft,c.push($(d.grid.hDiv).position().top),c.push($(d.grid.bDiv).offset().top-$(d.grid.hDiv).offset().top+$(d.grid.bDiv).height()),c},Z=function(a){var b,c=d.grid.headers,e=$.jgrid.getCellIndex(a);for(b=0;b<c.length;b++)if(a===c[b].el){e=b;break}return e};for(this.p.id=this.id,-1===$.inArray(d.p.multikey,x)&&(d.p.multikey=!1),d.p.keyName=!1,i=0;i<d.p.colModel.length;i++)w=\"string\"==typeof d.p.colModel[i].template?null!=$.jgrid.cmTemplate&&\"object\"==typeof $.jgrid.cmTemplate[d.p.colModel[i].template]?$.jgrid.cmTemplate[d.p.colModel[i].template]:{}:d.p.colModel[i].template,d.p.colModel[i]=$.extend(!0,{},d.p.cmTemplate,w||{},d.p.colModel[i]),d.p.keyName===!1&&d.p.colModel[i].key===!0&&(d.p.keyName=d.p.colModel[i].name);if(d.p.sortorder=d.p.sortorder.toLowerCase(),$.jgrid.cell_width=$.jgrid.cellWidth(),d.p.grouping===!0&&(d.p.scroll=!1,d.p.rownumbers=!1,d.p.treeGrid=!1,d.p.gridview=!0),this.p.treeGrid===!0){try{$(this).jqGrid(\"setTreeGrid\")}catch(_){}\"local\"!==d.p.datatype&&(d.p.localReader={id:\"_id_\"})}if(this.p.subGrid)try{$(d).jqGrid(\"setSubGrid\")}catch(ab){}this.p.multiselect&&(this.p.colNames.unshift(\"<input role='checkbox' id='cb_\"+this.p.id+\"' class='cbox' type='checkbox'/>\"),this.p.colModel.unshift({name:\"cb\",width:$.jgrid.cell_width?d.p.multiselectWidth+d.p.cellLayout:d.p.multiselectWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,align:\"center\",fixed:!0,frozen:!0})),this.p.rownumbers&&(this.p.colNames.unshift(\"\"),this.p.colModel.unshift({name:\"rn\",width:d.p.rownumWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,align:\"center\",fixed:!0,frozen:!0})),d.p.xmlReader=$.extend(!0,{root:\"rows\",row:\"row\",page:\"rows>page\",total:\"rows>total\",records:\"rows>records\",repeatitems:!0,cell:\"cell\",id:\"[id]\",userdata:\"userdata\",subgrid:{root:\"rows\",row:\"row\",repeatitems:!0,cell:\"cell\"}},d.p.xmlReader),d.p.jsonReader=$.extend(!0,{root:\"rows\",page:\"page\",total:\"total\",records:\"records\",repeatitems:!0,cell:\"cell\",id:\"id\",userdata:\"userdata\",subgrid:{root:\"rows\",repeatitems:!0,cell:\"cell\"}},d.p.jsonReader),d.p.localReader=$.extend(!0,{root:\"rows\",page:\"page\",total:\"total\",records:\"records\",repeatitems:!1,cell:\"cell\",id:\"id\",userdata:\"userdata\",subgrid:{root:\"rows\",repeatitems:!0,cell:\"cell\"}},d.p.localReader),d.p.scroll&&(d.p.pgbuttons=!1,d.p.pginput=!1,d.p.rowList=[]),d.p.data.length&&(I(),J());var bb,cb,db,eb,fb,gb,hb,ib,jb=\"<thead><tr class='ui-jqgrid-labels' role='row'>\",kb=\"\",lb=\"\",mb=\"\";if(d.p.shrinkToFit===!0&&d.p.forceFit===!0)for(i=d.p.colModel.length-1;i>=0;i--)if(!d.p.colModel[i].hidden){d.p.colModel[i].resizable=!1;break}if(\"horizontal\"===d.p.viewsortcols[1]?(lb=\" ui-i-asc\",mb=\" ui-i-desc\"):\"single\"===d.p.viewsortcols[1]&&(lb=\" ui-single-sort-asc\",mb=\" ui-single-sort-desc\",kb=\" style='display:none'\",d.p.viewsortcols[0]=!1),bb=r?\"class='ui-th-div-ie'\":\"\",ib=\"<span class='s-ico' style='display:none'>\",ib+=\"<span sort='asc'  class='ui-grid-ico-sort ui-icon-asc\"+lb+\" ui-sort-\"+h+\" \"+m+\" \"+q+\" \"+k(l,\"icon_asc\",!0)+\"'\"+kb+\"></span>\",ib+=\"<span sort='desc' class='ui-grid-ico-sort ui-icon-desc\"+mb+\" ui-sort-\"+h+\" \"+m+\" \"+q+\" \"+k(l,\"icon_desc\",!0)+\"'\"+kb+\"></span></span>\",d.p.multiSort&&d.p.sortname)for(s=d.p.sortname.split(\",\"),i=0;i<s.length;i++)u=$.trim(s[i]).split(\" \"),s[i]=$.trim(u[0]),t[i]=u[1]?$.trim(u[1]):d.p.sortorder||\"asc\";\nfor(i=0;i<this.p.colNames.length;i++){var nb=d.p.headertitles?' title=\"'+$.jgrid.stripHtml(d.p.colNames[i])+'\"':\"\";jb+=\"<th id='\"+d.p.id+\"_\"+d.p.colModel[i].name+\"' role='columnheader' \"+k(l,\"headerBox\",!1,\"ui-th-column ui-th-\"+h)+\" \"+nb+\">\",cb=d.p.colModel[i].index||d.p.colModel[i].name,jb+=\"<div id='jqgh_\"+d.p.id+\"_\"+d.p.colModel[i].name+\"' \"+bb+\">\"+d.p.colNames[i],d.p.colModel[i].width=d.p.colModel[i].width?parseInt(d.p.colModel[i].width,10):150,\"boolean\"!=typeof d.p.colModel[i].title&&(d.p.colModel[i].title=!0),d.p.colModel[i].lso=\"\",cb===d.p.sortname&&(d.p.lastsort=i),d.p.multiSort&&(u=$.inArray(cb,s),-1!==u&&(d.p.colModel[i].lso=t[u])),jb+=ib+\"</div></th>\"}if(jb+=\"</tr></thead>\",ib=null,$(this).append(jb),$(\"thead tr:first th\",this).hover(function(){$(this).addClass(o)},function(){$(this).removeClass(o)}),this.p.multiselect){var ob,pb=[];$(\"#cb_\"+$.jgrid.jqID(d.p.id),this).bind(\"click\",function(){d.p.selarrrow=[];var a=d.p.frozenColumns===!0?d.p.id+\"_frozen\":\"\";this.checked?($(d.rows).each(function(b){b>0&&($(this).hasClass(\"ui-subgrid\")||$(this).hasClass(\"jqgroup\")||$(this).hasClass(m)||$(this).hasClass(\"jqfoot\")||($(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(this.id))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!0),$(this).addClass(n).attr(\"aria-selected\",\"true\"),d.p.selarrrow.push(this.id),d.p.selrow=this.id,a&&($(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(this.id),d.grid.fbDiv)[d.p.useProp?\"prop\":\"attr\"](\"checked\",!0),$(\"#\"+$.jgrid.jqID(this.id),d.grid.fbDiv).addClass(n))))}),ob=!0,pb=[]):($(d.rows).each(function(b){b>0&&($(this).hasClass(\"ui-subgrid\")||$(this).hasClass(\"jqgroup\")||$(this).hasClass(m)||$(this).hasClass(\"jqfoot\")||($(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(this.id))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),$(this).removeClass(n).attr(\"aria-selected\",\"false\"),pb.push(this.id),a&&($(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(this.id),d.grid.fbDiv)[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),$(\"#\"+$.jgrid.jqID(this.id),d.grid.fbDiv).removeClass(n))))}),d.p.selrow=null,ob=!1),$(d).triggerHandler(\"jqGridSelectAll\",[ob?d.p.selarrrow:pb,ob]),$.isFunction(d.p.onSelectAll)&&d.p.onSelectAll.call(d,ob?d.p.selarrrow:pb,ob)})}if(d.p.autowidth===!0){var qb=$(v).innerWidth();d.p.width=qb>0?qb:\"nw\"}W(),$(v).css(\"width\",e.width+\"px\").append(\"<div class='ui-jqgrid-resize-mark' id='rs_m\"+d.p.id+\"'>&#160;</div>\"),d.p.scrollPopUp&&$(v).append(\"<div \"+k(l,\"scrollBox\",!1,\"loading ui-scroll-popup\")+\" id='scroll_g\"+d.p.id+\"'></div>\"),$(j).css(\"width\",e.width+\"px\"),jb=$(\"thead:first\",d).get(0);var rb=\"\";d.p.footerrow&&(rb+=\"<table role='presentation' style='width:\"+d.p.tblwidth+\"px' \"+k(l,\"footerTable\",!1,\"ui-jqgrid-ftable ui-common-table\")+\"><tbody><tr role='row' \"+k(l,\"footerBox\",!1,\"footrow footrow-\"+h)+\">\");var sb=$(\"tr:first\",jb),tb=\"<tr class='jqgfirstrow' role='row'>\";if(d.p.disableClick=!1,$(\"th\",sb).each(function(a){db=d.p.colModel[a].width,void 0===d.p.colModel[a].resizable&&(d.p.colModel[a].resizable=!0),d.p.colModel[a].resizable?(eb=document.createElement(\"span\"),$(eb).html(\"&#160;\").addClass(\"ui-jqgrid-resize ui-jqgrid-resize-\"+h).css(\"cursor\",\"col-resize\"),$(this).addClass(d.p.resizeclass)):eb=\"\",$(this).css(\"width\",db+\"px\").prepend(eb),eb=null;var b=\"\";d.p.colModel[a].hidden&&($(this).css(\"display\",\"none\"),b=\"display:none;\"),tb+=\"<td role='gridcell' style='height:0px;width:\"+db+\"px;\"+b+\"'></td>\",e.headers[a]={width:db,el:this},kb=d.p.colModel[a].sortable,\"boolean\"!=typeof kb&&(d.p.colModel[a].sortable=!0,kb=!0);var c=d.p.colModel[a].name;\"cb\"!==c&&\"subgrid\"!==c&&\"rn\"!==c&&d.p.viewsortcols[2]&&$(\">div\",this).addClass(\"ui-jqgrid-sortable\"),kb&&(d.p.multiSort?d.p.viewsortcols[0]?($(\"div span.s-ico\",this).show(),d.p.colModel[a].lso&&$(\"div span.ui-icon-\"+d.p.colModel[a].lso,this).removeClass(m).css(\"display\",\"\")):d.p.colModel[a].lso&&($(\"div span.s-ico\",this).show(),$(\"div span.ui-icon-\"+d.p.colModel[a].lso,this).removeClass(m).css(\"display\",\"\")):d.p.viewsortcols[0]?($(\"div span.s-ico\",this).show(),a===d.p.lastsort&&$(\"div span.ui-icon-\"+d.p.sortorder,this).removeClass(m).css(\"display\",\"\")):a===d.p.lastsort&&\"\"!==d.p.sortname&&($(\"div span.s-ico\",this).show(),$(\"div span.ui-icon-\"+d.p.sortorder,this).removeClass(m).css(\"display\",\"\"))),d.p.footerrow&&(rb+=\"<td role='gridcell' \"+z(a,0,\"\",null,\"\",!1)+\">&#160;</td>\")}).mousedown(function(a){if(1===$(a.target).closest(\"th>span.ui-jqgrid-resize\").length){var b=Z(this);return d.p.forceFit===!0&&(d.p.nv=X(b)),e.dragStart(b,a,Y(b)),!1}}).click(function(a){if(d.p.disableClick)return d.p.disableClick=!1,!1;var b,c,e=\"th>div.ui-jqgrid-sortable\";d.p.viewsortcols[2]||(e=\"th>div>span>span.ui-grid-ico-sort\");var f=$(a.target).closest(e);if(1===f.length){var g;if(d.p.frozenColumns){var h=$(this)[0].id.substring(d.p.id.length+1);$(d.p.colModel).each(function(a){return this.name===h?(g=a,!1):void 0})}else g=Z(this);return d.p.viewsortcols[2]||(b=!0,c=f.attr(\"sort\")),null!=g&&V($(\"div\",this)[0].id,g,b,c,this),!1}}),d.p.sortable&&$.fn.sortable)try{$(d).jqGrid(\"sortableColumns\",sb)}catch(ub){}d.p.footerrow&&(rb+=\"</tr></tbody></table>\"),tb+=\"</tr>\",hb=document.createElement(\"tbody\"),this.appendChild(hb),$(this).addClass(k(l,\"rowTable\",!0,\"ui-jqgrid-btable ui-common-table\")).append(tb),tb=null;var vb=$(\"<table \"+k(l,\"headerTable\",!1,\"ui-jqgrid-htable ui-common-table\")+\" style='width:\"+d.p.tblwidth+\"px' role='presentation' aria-labelledby='gbox_\"+this.id+\"'></table>\").append(jb),wb=d.p.caption&&d.p.hiddengrid===!0?!0:!1,xb=$(\"<div class='ui-jqgrid-hbox\"+(\"rtl\"===h?\"-rtl\":\"\")+\"'></div>\");jb=null,e.hDiv=document.createElement(\"div\"),e.hDiv.style.width=e.width+\"px\",e.hDiv.className=k(l,\"headerDiv\",!0,\"ui-jqgrid-hdiv\"),$(e.hDiv).append(xb),$(xb).append(vb),vb=null,wb&&$(e.hDiv).hide(),d.p.pager&&(\"string\"==typeof d.p.pager?\"#\"!==d.p.pager.substr(0,1)&&(d.p.pager=\"#\"+d.p.pager):d.p.pager=\"#\"+$(d.p.pager).attr(\"id\"),$(d.p.pager).css({width:e.width+\"px\"}).addClass(k(l,\"pagerBox\",!0,\"ui-jqgrid-pager\")).appendTo(v),wb&&$(d.p.pager).hide(),T(d.p.pager,\"\")),d.p.cellEdit===!1&&d.p.hoverrows===!0&&$(d).bind(\"mouseover\",function(a){gb=$(a.target).closest(\"tr.jqgrow\"),\"ui-subgrid\"!==$(gb).attr(\"class\")&&$(gb).addClass(o)}).bind(\"mouseout\",function(a){gb=$(a.target).closest(\"tr.jqgrow\"),$(gb).removeClass(o)});var yb,zb,Ab;$(d).before(e.hDiv).click(function(a){if(fb=a.target,gb=$(fb,d.rows).closest(\"tr.jqgrow\"),0===$(gb).length||gb[0].className.indexOf(m)>-1||($(fb,d).closest(\"table.ui-jqgrid-btable\").attr(\"id\")||\"\").replace(\"_frozen\",\"\")!==d.id)return this;var b=$(fb).hasClass(\"cbox\"),c=$(d).triggerHandler(\"jqGridBeforeSelectRow\",[gb[0].id,a]);if(c=c===!1||\"stop\"===c?!1:!0,$.isFunction(d.p.beforeSelectRow)){var e=d.p.beforeSelectRow.call(d,gb[0].id,a);(e===!1||\"stop\"===e)&&(c=!1)}if(\"A\"!==fb.tagName&&(\"INPUT\"!==fb.tagName&&\"TEXTAREA\"!==fb.tagName&&\"OPTION\"!==fb.tagName&&\"SELECT\"!==fb.tagName||b)){if(yb=gb[0].id,fb=$(fb).closest(\"tr.jqgrow>td\"),fb.length>0&&(zb=$.jgrid.getCellIndex(fb),Ab=$(fb).closest(\"td,th\").html(),$(d).triggerHandler(\"jqGridCellSelect\",[yb,zb,Ab,a]),$.isFunction(d.p.onCellSelect)&&d.p.onCellSelect.call(d,yb,zb,Ab,a)),d.p.cellEdit===!0)if(d.p.multiselect&&b&&c)$(d).jqGrid(\"setSelection\",yb,!0,a);else if(fb.length>0){yb=gb[0].rowIndex;try{$(d).jqGrid(\"editCell\",yb,zb,!0)}catch(f){}}if(c)if(d.p.multikey)a[d.p.multikey]?$(d).jqGrid(\"setSelection\",yb,!0,a):d.p.multiselect&&b&&(b=$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+yb).is(\":checked\"),$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+yb)[d.p.useProp?\"prop\":\"attr\"](\"checked\",!b));else if(d.p.multiselect&&d.p.multiboxonly)if(b)$(d).jqGrid(\"setSelection\",yb,!0,a);else{var g=d.p.frozenColumns?d.p.id+\"_frozen\":\"\";$(d.p.selarrrow).each(function(a,b){var c=$(d).jqGrid(\"getGridRowById\",b);c&&$(c).removeClass(n),$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),g&&($(\"#\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(g)).removeClass(n),$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(g))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1))}),d.p.selarrrow=[],$(d).jqGrid(\"setSelection\",yb,!0,a)}else $(d).jqGrid(\"setSelection\",yb,!0,a)}}).bind(\"reloadGrid\",function(a,b){if(d.p.treeGrid===!0&&(d.p.datatype=d.p.treedatatype),b=b||{},b.current&&d.grid.selectionPreserver(d),\"local\"===d.p.datatype?($(d).jqGrid(\"resetSelection\"),d.p.data.length&&(I(),J())):d.p.treeGrid||(d.p.selrow=null,d.p.multiselect&&(d.p.selarrrow=[],S(!1)),d.p.savedRow=[]),d.p.scroll&&H.call(d,!0,!1),b.page){var c=b.page;c>d.p.lastpage&&(c=d.p.lastpage),1>c&&(c=1),d.p.page=c,d.grid.bDiv.scrollTop=d.grid.prevRowHeight?(c-1)*d.grid.prevRowHeight*d.p.rowNum:0}return d.grid.prevRowHeight&&d.p.scroll&&void 0===b.page?(delete d.p.lastpage,d.grid.populateVisible()):d.grid.populate(),d.p.inlineNav===!0&&$(d).jqGrid(\"showAddEditButtons\"),!1}).dblclick(function(a){if(fb=a.target,gb=$(fb,d.rows).closest(\"tr.jqgrow\"),0!==$(gb).length){yb=gb[0].rowIndex,zb=$.jgrid.getCellIndex(fb);var b=$(d).triggerHandler(\"jqGridDblClickRow\",[$(gb).attr(\"id\"),yb,zb,a]);return null!=b?b:$.isFunction(d.p.ondblClickRow)&&(b=d.p.ondblClickRow.call(d,$(gb).attr(\"id\"),yb,zb,a),null!=b)?b:void 0}}).bind(\"contextmenu\",function(a){if(fb=a.target,gb=$(fb,d.rows).closest(\"tr.jqgrow\"),0!==$(gb).length){d.p.multiselect||$(d).jqGrid(\"setSelection\",gb[0].id,!0,a),yb=gb[0].rowIndex,zb=$.jgrid.getCellIndex(fb);var b=$(d).triggerHandler(\"jqGridRightClickRow\",[$(gb).attr(\"id\"),yb,zb,a]);return null!=b?b:$.isFunction(d.p.onRightClickRow)&&(b=d.p.onRightClickRow.call(d,$(gb).attr(\"id\"),yb,zb,a),null!=b)?b:void 0}}),e.bDiv=document.createElement(\"div\"),r&&\"auto\"===String(d.p.height).toLowerCase()&&(d.p.height=\"100%\"),$(e.bDiv).append($('<div style=\"position:relative;\"></div>').append(\"<div></div>\").append(this)).addClass(\"ui-jqgrid-bdiv\").css({height:d.p.height+(isNaN(d.p.height)?\"\":\"px\"),width:e.width+\"px\"}).scroll(e.scrollGrid),$(\"table:first\",e.bDiv).css({width:d.p.tblwidth+\"px\"}),$.support.tbody||2===$(\"tbody\",this).length&&$(\"tbody:gt(0)\",this).remove(),d.p.multikey&&($.jgrid.msie?$(e.bDiv).bind(\"selectstart\",function(){return!1}):$(e.bDiv).bind(\"mousedown\",function(){return!1})),wb&&$(e.bDiv).hide();var Bb=q+\" \"+k(l,\"icon_caption_open\",!0),Cb=q+\" \"+k(l,\"icon_caption_close\",!0);e.cDiv=document.createElement(\"div\");var Db=d.p.hidegrid===!0?$(\"<a role='link' class='ui-jqgrid-titlebar-close HeaderButton \"+p+\"' title='\"+($.jgrid.getRegional(d,\"defaults.showhide\",d.p.showhide)||\"\")+\"' />\").hover(function(){Db.addClass(o)},function(){Db.removeClass(o)}).append(\"<span class='ui-jqgrid-headlink \"+Bb+\"'></span>\").css(\"rtl\"===h?\"left\":\"right\",\"0px\"):\"\";if($(e.cDiv).append(Db).append(\"<span class='ui-jqgrid-title'>\"+d.p.caption+\"</span>\").addClass(\"ui-jqgrid-titlebar ui-jqgrid-caption\"+(\"rtl\"===h?\"-rtl\":\"\")+\" \"+k(l,\"gridtitleBox\",!0)),$(e.cDiv).insertBefore(e.hDiv),d.p.toolbar[0]){var Eb=k(l,\"customtoolbarBox\",!0,\"ui-userdata\");e.uDiv=document.createElement(\"div\"),\"top\"===d.p.toolbar[1]?$(e.uDiv).insertBefore(e.hDiv):\"bottom\"===d.p.toolbar[1]&&$(e.uDiv).insertAfter(e.hDiv),\"both\"===d.p.toolbar[1]?(e.ubDiv=document.createElement(\"div\"),$(e.uDiv).addClass(Eb+\" ui-userdata-top\").attr(\"id\",\"t_\"+this.id).insertBefore(e.hDiv).width(e.width),$(e.ubDiv).addClass(Eb+\" ui-userdata-bottom\").attr(\"id\",\"tb_\"+this.id).insertAfter(e.hDiv).width(e.width),wb&&$(e.ubDiv).hide()):$(e.uDiv).width(e.width).addClass(Eb+\" ui-userdata-top\").attr(\"id\",\"t_\"+this.id),wb&&$(e.uDiv).hide()}if(d.p.toppager&&(d.p.toppager=$.jgrid.jqID(d.p.id)+\"_toppager\",e.topDiv=$(\"<div id='\"+d.p.toppager+\"'></div>\")[0],d.p.toppager=\"#\"+d.p.toppager,$(e.topDiv).addClass(k(l,\"toppagerBox\",!0,\"ui-jqgrid-toppager\")).width(e.width).insertBefore(e.hDiv),T(d.p.toppager,\"_t\")),d.p.footerrow&&(e.sDiv=$(\"<div class='ui-jqgrid-sdiv'></div>\")[0],xb=$(\"<div class='ui-jqgrid-hbox\"+(\"rtl\"===h?\"-rtl\":\"\")+\"'></div>\"),$(e.sDiv).append(xb).width(e.width).insertAfter(e.hDiv),$(xb).append(rb),e.footers=$(\".ui-jqgrid-ftable\",e.sDiv)[0].rows[0].cells,d.p.rownumbers&&(e.footers[0].className=k(l,\"rownumBox\",!0,\"jqgrid-rownum\")),wb&&$(e.sDiv).hide()),xb=null,d.p.caption){var Fb=d.p.datatype;d.p.hidegrid===!0&&($(\".ui-jqgrid-titlebar-close\",e.cDiv).click(function(a){var b,c=$.isFunction(d.p.onHeaderClick),f=\".ui-jqgrid-bdiv, .ui-jqgrid-hdiv, .ui-jqgrid-toppager, .ui-jqgrid-pager, .ui-jqgrid-sdiv\",g=this;return d.p.toolbar[0]===!0&&(\"both\"===d.p.toolbar[1]&&(f+=\", #\"+$(e.ubDiv).attr(\"id\")),f+=\", #\"+$(e.uDiv).attr(\"id\")),b=$(f,\"#gview_\"+$.jgrid.jqID(d.p.id)).length,\"visible\"===d.p.gridstate?$(f,\"#gbox_\"+$.jgrid.jqID(d.p.id)).slideUp(\"fast\",function(){b--,0===b&&($(\"span\",g).removeClass(Bb).addClass(Cb),d.p.gridstate=\"hidden\",$(\"#gbox_\"+$.jgrid.jqID(d.p.id)).hasClass(\"ui-resizable\")&&$(\".ui-resizable-handle\",\"#gbox_\"+$.jgrid.jqID(d.p.id)).hide(),$(d).triggerHandler(\"jqGridHeaderClick\",[d.p.gridstate,a]),c&&(wb||d.p.onHeaderClick.call(d,d.p.gridstate,a)))}):\"hidden\"===d.p.gridstate&&$(f,\"#gbox_\"+$.jgrid.jqID(d.p.id)).slideDown(\"fast\",function(){b--,0===b&&($(\"span\",g).removeClass(Cb).addClass(Bb),wb&&(d.p.datatype=Fb,R(),wb=!1),d.p.gridstate=\"visible\",$(\"#gbox_\"+$.jgrid.jqID(d.p.id)).hasClass(\"ui-resizable\")&&$(\".ui-resizable-handle\",\"#gbox_\"+$.jgrid.jqID(d.p.id)).show(),$(d).triggerHandler(\"jqGridHeaderClick\",[d.p.gridstate,a]),c&&(wb||d.p.onHeaderClick.call(d,d.p.gridstate,a)))}),!1}),wb&&(d.p.datatype=\"local\",$(\".ui-jqgrid-titlebar-close\",e.cDiv).trigger(\"click\")))}else $(e.cDiv).hide(),d.p.toppager||$(e.hDiv).addClass(k(d.p.styleUI+\".common\",\"cornertop\",!0));if($(e.hDiv).after(e.bDiv).mousemove(function(a){return e.resizing?(e.dragMove(a),!1):void 0}),$(\".ui-jqgrid-labels\",e.hDiv).bind(\"selectstart\",function(){return!1}),$(document).bind(\"mouseup.jqGrid\"+d.p.id,function(){return e.resizing?(e.dragEnd(!0),!1):!0}),d.formatCol=z,d.sortData=V,d.updatepager=O,d.refreshIndex=J,d.setHeadCheckBox=S,d.constructTr=K,d.formatter=function(a,b,c,d,e){return B(a,b,c,d,e)},$.extend(e,{populate:R,emptyRows:H,beginReq:P,endReq:Q}),this.grid=e,d.addXmlData=function(a){L(a)},d.addJSONData=function(a){M(a)},this.grid.cols=this.rows[0].cells,$(d).triggerHandler(\"jqGridInitGrid\"),$.isFunction(d.p.onInitGrid)&&d.p.onInitGrid.call(d),R(),d.p.hiddengrid=!1,d.p.responsive){var Gb=\"onorientationchange\"in window,Hb=Gb?\"orientationchange\":\"resize\";$(window).on(Hb,function(){$(d).jqGrid(\"resizeGrid\")})}}})},$.jgrid.extend({getGridParam:function(a,b){var c,d=this[0];if(d&&d.grid){if(void 0===b&&\"string\"!=typeof b&&(b=\"jqGrid\"),c=d.p,\"jqGrid\"!==b)try{c=$(d).data(b)}catch(e){c=d.p}return a?void 0!==c[a]?c[a]:null:c}},setGridParam:function(a,b){return this.each(function(){if(null==b&&(b=!1),this.grid&&\"object\"==typeof a)if(b===!0){var c=$.extend({},this.p,a);this.p=c}else $.extend(!0,this.p,a)})},getGridRowById:function(a){var b;return this.each(function(){try{for(var c=this.rows.length;c--;)if(a.toString()===this.rows[c].id){b=this.rows[c];break}}catch(d){b=$(this.grid.bDiv).find(\"#\"+$.jgrid.jqID(a))}}),b},getDataIDs:function(){var a,b=[],c=0,d=0;return this.each(function(){if(a=this.rows.length,a&&a>0)for(;a>c;)$(this.rows[c]).hasClass(\"jqgrow\")&&(b[d]=this.rows[c].id,d++),c++}),b},setSelection:function(a,b,c){return this.each(function(){function d(a){var b=$(l.grid.bDiv)[0].clientHeight,c=$(l.grid.bDiv)[0].scrollTop,d=$(l.rows[a]).position().top,e=l.rows[a].clientHeight;d+e>=b+c?$(l.grid.bDiv)[0].scrollTop=d-(b+c)+e+c:b+c>d&&c>d&&($(l.grid.bDiv)[0].scrollTop=d)}var e,f,g,h,i,j,k,l=this,m=$.jgrid.getMethod(\"getStyleUI\"),n=m(l.p.styleUI+\".common\",\"highlight\",!0),o=m(l.p.styleUI+\".common\",\"disabled\",!0);void 0!==a&&(b=b===!1?!1:!0,f=$(l).jqGrid(\"getGridRowById\",a),!f||!f.className||f.className.indexOf(o)>-1||(l.p.scrollrows===!0&&(g=$(l).jqGrid(\"getGridRowById\",a).rowIndex,g>=0&&d(g)),l.p.frozenColumns===!0&&(j=l.p.id+\"_frozen\"),l.p.multiselect?(l.setHeadCheckBox(!1),l.p.selrow=f.id,h=$.inArray(l.p.selrow,l.p.selarrrow),-1===h?(\"ui-subgrid\"!==f.className&&$(f).addClass(n).attr(\"aria-selected\",\"true\"),e=!0,l.p.selarrrow.push(l.p.selrow)):(\"ui-subgrid\"!==f.className&&$(f).removeClass(n).attr(\"aria-selected\",\"false\"),e=!1,l.p.selarrrow.splice(h,1),i=l.p.selarrrow[0],l.p.selrow=void 0===i?null:i),$(\"#jqg_\"+$.jgrid.jqID(l.p.id)+\"_\"+$.jgrid.jqID(f.id))[l.p.useProp?\"prop\":\"attr\"](\"checked\",e),j&&(-1===h?$(\"#\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(j)).addClass(n):$(\"#\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(j)).removeClass(n),$(\"#jqg_\"+$.jgrid.jqID(l.p.id)+\"_\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(j))[l.p.useProp?\"prop\":\"attr\"](\"checked\",e)),b&&($(l).triggerHandler(\"jqGridSelectRow\",[f.id,e,c]),l.p.onSelectRow&&l.p.onSelectRow.call(l,f.id,e,c))):\"ui-subgrid\"!==f.className&&(l.p.selrow!==f.id?(k=$(l).jqGrid(\"getGridRowById\",l.p.selrow),k&&$(k).removeClass(n).attr({\"aria-selected\":\"false\",tabindex:\"-1\"}),$(f).addClass(n).attr({\"aria-selected\":\"true\",tabindex:\"0\"}),j&&($(\"#\"+$.jgrid.jqID(l.p.selrow),\"#\"+$.jgrid.jqID(j)).removeClass(n),$(\"#\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(j)).addClass(n)),e=!0):e=!1,l.p.selrow=f.id,b&&($(l).triggerHandler(\"jqGridSelectRow\",[f.id,e,c]),l.p.onSelectRow&&l.p.onSelectRow.call(l,f.id,e,c)))))})},resetSelection:function(a){return this.each(function(){var b,c,d=this,e=$.jgrid.getMethod(\"getStyleUI\"),f=e(d.p.styleUI+\".common\",\"highlight\",!0),g=e(d.p.styleUI+\".common\",\"hover\",!0);if(d.p.frozenColumns===!0&&(c=d.p.id+\"_frozen\"),void 0!==a){if(b=a===d.p.selrow?d.p.selrow:a,$(\"#\"+$.jgrid.jqID(d.p.id)+\" tbody:first tr#\"+$.jgrid.jqID(b)).removeClass(f).attr(\"aria-selected\",\"false\"),c&&$(\"#\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(c)).removeClass(f),d.p.multiselect){$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(d.p.id))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),c&&$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(c))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),d.setHeadCheckBox(!1);var h=$.inArray($.jgrid.jqID(b),d.p.selarrrow);-1!==h&&d.p.selarrrow.splice(h,1)}d.p.onUnSelectRow&&d.p.onUnSelectRow.call(d,b),b=null}else d.p.multiselect?($(d.p.selarrrow).each(function(a,b){$($(d).jqGrid(\"getGridRowById\",b)).removeClass(f).attr(\"aria-selected\",\"false\"),$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1),c&&($(\"#\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(c)).removeClass(f),$(\"#jqg_\"+$.jgrid.jqID(d.p.id)+\"_\"+$.jgrid.jqID(b),\"#\"+$.jgrid.jqID(c))[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1)),d.p.onUnSelectRow&&d.p.onUnSelectRow.call(d,b)}),d.setHeadCheckBox(!1),d.p.selarrrow=[],d.p.selrow=null):d.p.selrow&&($(\"#\"+$.jgrid.jqID(d.p.id)+\" tbody:first tr#\"+$.jgrid.jqID(d.p.selrow)).removeClass(f).attr(\"aria-selected\",\"false\"),c&&$(\"#\"+$.jgrid.jqID(d.p.selrow),\"#\"+$.jgrid.jqID(c)).removeClass(f),d.p.onUnSelectRow&&d.p.onUnSelectRow.call(d,d.p.selrow),d.p.selrow=null);d.p.cellEdit===!0&&parseInt(d.p.iCol,10)>=0&&parseInt(d.p.iRow,10)>=0&&($(\"td:eq(\"+d.p.iCol+\")\",d.rows[d.p.iRow]).removeClass(\"edit-cell \"+f),$(d.rows[d.p.iRow]).removeClass(\"selected-row \"+g)),d.p.savedRow=[]})},getRowData:function(a,b){var c,d,e={},f=!1,g=0;return this.each(function(){var h,i,j=this;if(null==a)f=!0,c=[],d=j.rows.length;else{if(i=$(j).jqGrid(\"getGridRowById\",a),!i)return e;d=2}for(b&&b===!0&&j.p.data.length>0||(b=!1);d>g;)f&&(i=j.rows[g]),$(i).hasClass(\"jqgrow\")&&(b?e=j.p.data[j.p._index[i.id]]:$('td[role=\"gridcell\"]',i).each(function(a){if(h=j.p.colModel[a].name,\"cb\"!==h&&\"subgrid\"!==h&&\"rn\"!==h)if(j.p.treeGrid===!0&&h===j.p.ExpandColumn)e[h]=$.jgrid.htmlDecode($(\"span:first\",this).html());else try{e[h]=$.unformat.call(j,this,{rowId:i.id,colModel:j.p.colModel[a]},a)}catch(b){e[h]=$.jgrid.htmlDecode($(this).html())}}),f&&(c.push(e),e={})),g++}),c||e},delRowData:function(a){var b,c,d,e=!1;return this.each(function(){var f=this;if(b=$(f).jqGrid(\"getGridRowById\",a),!b)return!1;if(f.p.subGrid&&(d=$(b).next(),d.hasClass(\"ui-subgrid\")&&d.remove()),$(b).remove(),f.p.records--,f.p.reccount--,f.updatepager(!0,!1),e=!0,f.p.multiselect&&(c=$.inArray(a,f.p.selarrrow),-1!==c&&f.p.selarrrow.splice(c,1)),f.p.selrow=f.p.multiselect&&f.p.selarrrow.length>0?f.p.selarrrow[f.p.selarrrow.length-1]:null,\"local\"===f.p.datatype){var g=$.jgrid.stripPref(f.p.idPrefix,a),h=f.p._index[g];void 0!==h&&(f.p.data.splice(h,1),f.refreshIndex())}if(f.p.altRows===!0&&e){var i=f.p.altclass;$(f.rows).each(function(a){a%2===1?$(this).addClass(i):$(this).removeClass(i)})}}),e},setRowData:function(a,b,c){var d,e,f=!0;return this.each(function(){if(!this.grid)return!1;var g,h,i=this,j=typeof c,k={};if(h=$(this).jqGrid(\"getGridRowById\",a),!h)return!1;if(b)try{if($(this.p.colModel).each(function(c){d=this.name;var f=$.jgrid.getAccessor(b,d);void 0!==f&&(k[d]=this.formatter&&\"string\"==typeof this.formatter&&\"date\"===this.formatter?$.unformat.date.call(i,f,this):f,g=i.formatter(a,k[d],c,b,\"edit\"),e=this.title?{title:$.jgrid.stripHtml(g)}:{},i.p.treeGrid===!0&&d===i.p.ExpandColumn?$(\"td[role='gridcell']:eq(\"+c+\") > span:first\",h).html(g).attr(e):$(\"td[role='gridcell']:eq(\"+c+\")\",h).html(g).attr(e))}),\"local\"===i.p.datatype){var l,m=$.jgrid.stripPref(i.p.idPrefix,a),n=i.p._index[m];if(i.p.treeGrid)for(l in i.p.treeReader)i.p.treeReader.hasOwnProperty(l)&&delete k[i.p.treeReader[l]];void 0!==n&&(i.p.data[n]=$.extend(!0,i.p.data[n],k)),k=null}}catch(o){f=!1}f&&(\"string\"===j?$(h).addClass(c):null!==c&&\"object\"===j&&$(h).css(c),$(i).triggerHandler(\"jqGridAfterGridComplete\"))}),f},addRowData:function(a,b,c,d){-1==[\"first\",\"last\",\"before\",\"after\"].indexOf(c)&&(c=\"last\");var e,f,g,h,i,j,k,l,m,n,o,p,q,r,s=!1,t=\"\",u=\"\",v=\"\";return b&&($.isArray(b)?(m=!0,n=a):(b=[b],m=!1),this.each(function(){var w=this,x=b.length;i=w.p.rownumbers===!0?1:0,g=w.p.multiselect===!0?1:0,h=w.p.subGrid===!0?1:0,m||(void 0!==a?a=String(a):(a=$.jgrid.randId(),w.p.keyName!==!1&&(n=w.p.keyName,void 0!==b[0][n]&&(a=b[0][n])))),o=w.p.altclass;var y,z=0,A=$(w).jqGrid(\"getStyleUI\",w.p.styleUI+\".base\",\"rowBox\",!0,\"jqgrow ui-row-\"+w.p.direction),B={},C=$.isFunction(w.p.afterInsertRow)?!0:!1;for(i&&(t=$(w).jqGrid(\"getStyleUI\",w.p.styleUI+\".base\",\"rownumBox\",!1,\"jqgrid-rownum\")),g&&(u=$(w).jqGrid(\"getStyleUI\",w.p.styleUI+\".base\",\"multiBox\",!1,\"cbox\"));x>z;){if(p=b[z],f=[],y=A,m){try{a=p[n],void 0===a&&(a=$.jgrid.randId())}catch(D){a=$.jgrid.randId()}y+=w.p.altRows===!0&&(w.rows.length-1)%2===0?\" \"+o:\"\"}for(r=a,a=w.p.idPrefix+a,i&&(v=w.formatCol(0,1,\"\",null,a,!0),f[f.length]='<td role=\"gridcell\" '+t+\" \"+v+\">0</td>\"),g&&(l='<input role=\"checkbox\" type=\"checkbox\" id=\"jqg_'+w.p.id+\"_\"+a+'\" '+u+\"/>\",v=w.formatCol(i,1,\"\",null,a,!0),f[f.length]='<td role=\"gridcell\" '+v+\">\"+l+\"</td>\"),h&&(f[f.length]=$(w).jqGrid(\"addSubGridCell\",g+i,1)),k=g+h+i;k<w.p.colModel.length;k++)q=w.p.colModel[k],e=q.name,B[e]=p[e],l=w.formatter(a,$.jgrid.getAccessor(p,e),k,p),v=w.formatCol(k,1,l,p,a,B),f[f.length]='<td role=\"gridcell\" '+v+\">\"+l+\"</td>\";if(f.unshift(w.constructTr(a,!1,y,B,p)),f[f.length]=\"</tr>\",0===w.rows.length)$(\"table:first\",w.grid.bDiv).append(f.join(\"\"));else switch(c){case\"last\":$(w.rows[w.rows.length-1]).after(f.join(\"\")),j=w.rows.length-1;break;case\"first\":$(w.rows[0]).after(f.join(\"\")),j=1;break;case\"after\":j=$(w).jqGrid(\"getGridRowById\",d),j&&($(w.rows[j.rowIndex+1]).hasClass(\"ui-subgrid\")?$(w.rows[j.rowIndex+1]).after(f):$(j).after(f.join(\"\")),j=j.rowIndex+1);break;case\"before\":j=$(w).jqGrid(\"getGridRowById\",d),j&&($(j).before(f.join(\"\")),j=j.rowIndex-1)}w.p.subGrid===!0&&$(w).jqGrid(\"addSubGrid\",g+i,j),w.p.records++,w.p.reccount++,$(w).triggerHandler(\"jqGridAfterInsertRow\",[a,p,p]),C&&w.p.afterInsertRow.call(w,a,p,p),z++,\"local\"===w.p.datatype&&(B[w.p.localReader.id]=r,w.p._index[r]=w.p.data.length,w.p.data.push(B),B={})}w.p.altRows!==!0||m||(\"last\"===c?(w.rows.length-1)%2===0&&$(w.rows[w.rows.length-1]).addClass(o):$(w.rows).each(function(a){a%2===0?$(this).addClass(o):$(this).removeClass(o)})),w.updatepager(!0,!0),s=!0})),s},footerData:function(a,b,c){function d(a){var b;for(b in a)if(a.hasOwnProperty(b))return!1;return!0}var e,f,g=!1,h={};return void 0===a&&(a=\"get\"),\"boolean\"!=typeof c&&(c=!0),a=a.toLowerCase(),this.each(function(){var i,j=this;return j.grid&&j.p.footerrow?\"set\"===a&&d(b)?!1:(g=!0,void $(this.p.colModel).each(function(d){e=this.name,\"set\"===a?void 0!==b[e]&&(i=c?j.formatter(\"\",b[e],d,b,\"edit\"):b[e],f=this.title?{title:$.jgrid.stripHtml(i)}:{},$(\"tr.footrow td:eq(\"+d+\")\",j.grid.sDiv).html(i).attr(f),g=!0):\"get\"===a&&(h[e]=$(\"tr.footrow td:eq(\"+d+\")\",j.grid.sDiv).html())})):!1}),\"get\"===a?h:g},showHideCol:function(a,b){return this.each(function(){var c,d=this,e=!1,f=$.jgrid.cell_width?0:d.p.cellLayout;if(d.grid){\"string\"==typeof a&&(a=[a]),b=\"none\"!==b?\"\":\"none\";var g=\"\"===b?!0:!1,h=d.p.groupHeader&&($.isArray(d.p.groupHeader)||$.isFunction(d.p.groupHeader));if(h&&$(d).jqGrid(\"destroyGroupHeader\",!1),$(this.p.colModel).each(function(h){if(-1!==$.inArray(this.name,a)&&this.hidden===g){if(d.p.frozenColumns===!0&&this.frozen===!0)return!0;$(\"tr[role=row]\",d.grid.hDiv).each(function(){$(this.cells[h]).css(\"display\",b)}),$(d.rows).each(function(){$(this).hasClass(\"jqgroup\")||$(this.cells[h]).css(\"display\",b)}),d.p.footerrow&&$(\"tr.footrow td:eq(\"+h+\")\",d.grid.sDiv).css(\"display\",b),c=parseInt(this.width,10),\"none\"===b?d.p.tblwidth-=c+f:d.p.tblwidth+=c+f,this.hidden=!g,e=!0,$(d).triggerHandler(\"jqGridShowHideCol\",[g,this.name,h])}}),e===!0&&(d.p.shrinkToFit!==!0||isNaN(d.p.height)||(d.p.tblwidth+=parseInt(d.p.scrollOffset,10)),$(d).jqGrid(\"setGridWidth\",d.p.shrinkToFit===!0?d.p.tblwidth:d.p.width)),h){var i=$.extend([],d.p.groupHeader);d.p.groupHeader=null;for(var j=0;j<i.length;j++)$(d).jqGrid(\"setGroupHeaders\",i[j])}}})},hideCol:function(a){return this.each(function(){$(this).jqGrid(\"showHideCol\",a,\"none\")})},showCol:function(a){return this.each(function(){$(this).jqGrid(\"showHideCol\",a,\"\")})},remapColumns:function(a,b,c){function d(b){var c;c=b.length?$.makeArray(b):$.extend({},b),$.each(a,function(a){b[a]=c[this]})}function e(b,c){$(\">tr\"+(c||\"\"),b).each(function(){var b=this,c=$.makeArray(b.cells);$.each(a,function(){var a=c[this];a&&b.appendChild(a)})})}var f=this.get(0);d(f.p.colModel),d(f.p.colNames),d(f.grid.headers),e($(\"thead:first\",f.grid.hDiv),c&&\":not(.ui-jqgrid-labels)\"),b&&e($(\"#\"+$.jgrid.jqID(f.p.id)+\" tbody:first\"),\".jqgfirstrow, tr.jqgrow, tr.jqfoot\"),f.p.footerrow&&e($(\"tbody:first\",f.grid.sDiv)),f.p.remapColumns&&(f.p.remapColumns.length?d(f.p.remapColumns):f.p.remapColumns=$.makeArray(a)),f.p.lastsort=$.inArray(f.p.lastsort,a),f.p.treeGrid&&(f.p.expColInd=$.inArray(f.p.expColInd,a)),$(f).triggerHandler(\"jqGridRemapColumns\",[a,b,c])},setGridWidth:function(a,b){return this.each(function(){if(this.grid){var c,d,e,f,g=this,h=0,i=$.jgrid.cell_width?0:g.p.cellLayout,j=0,k=!1,l=g.p.scrollOffset,m=0;if(\"boolean\"!=typeof b&&(b=g.p.shrinkToFit),!isNaN(a)){if(a=parseInt(a,10),g.grid.width=g.p.width=a,$(\"#gbox_\"+$.jgrid.jqID(g.p.id)).css(\"width\",a+\"px\"),$(\"#gview_\"+$.jgrid.jqID(g.p.id)).css(\"width\",a+\"px\"),$(g.grid.bDiv).css(\"width\",a+\"px\"),$(g.grid.hDiv).css(\"width\",a+\"px\"),g.p.pager&&$(g.p.pager).css(\"width\",a+\"px\"),g.p.toppager&&$(g.p.toppager).css(\"width\",a+\"px\"),g.p.toolbar[0]===!0&&($(g.grid.uDiv).css(\"width\",a+\"px\"),\"both\"===g.p.toolbar[1]&&$(g.grid.ubDiv).css(\"width\",a+\"px\")),g.p.footerrow&&$(g.grid.sDiv).css(\"width\",a+\"px\"),b===!1&&g.p.forceFit===!0&&(g.p.forceFit=!1),b===!0){if($.each(g.p.colModel,function(){this.hidden===!1&&(c=this.widthOrg,h+=c+i,this.fixed?m+=c+i:j++)}),0===j)return;g.p.tblwidth=h,e=a-i*j-m,isNaN(g.p.height)||($(g.grid.bDiv)[0].clientHeight<$(g.grid.bDiv)[0].scrollHeight||1===g.rows.length)&&(k=!0,e-=l),h=0;var n=g.grid.cols.length>0;if($.each(g.p.colModel,function(a){if(this.hidden===!1&&!this.fixed){if(c=this.widthOrg,c=Math.round(e*c/(g.p.tblwidth-i*j-m)),0>c)return;this.width=c,h+=c,g.grid.headers[a].width=c,g.grid.headers[a].el.style.width=c+\"px\",g.p.footerrow&&(g.grid.footers[a].style.width=c+\"px\"),n&&(g.grid.cols[a].style.width=c+\"px\"),d=a}}),!d)return;if(f=0,k?a-m-(h+i*j)!==l&&(f=a-m-(h+i*j)-l):1!==Math.abs(a-m-(h+i*j))&&(f=a-m-(h+i*j)),g.p.colModel[d].width+=f,g.p.tblwidth=h+f+i*j+m,g.p.tblwidth>a){var o=g.p.tblwidth-parseInt(a,10);g.p.tblwidth=a,c=g.p.colModel[d].width=g.p.colModel[d].width-o}else c=g.p.colModel[d].width;g.grid.headers[d].width=c,g.grid.headers[d].el.style.width=c+\"px\",n&&(g.grid.cols[d].style.width=c+\"px\"),g.p.footerrow&&(g.grid.footers[d].style.width=c+\"px\")}g.p.tblwidth&&($(\"table:first\",g.grid.bDiv).css(\"width\",g.p.tblwidth+\"px\"),$(\"table:first\",g.grid.hDiv).css(\"width\",g.p.tblwidth+\"px\"),g.grid.hDiv.scrollLeft=g.grid.bDiv.scrollLeft,g.p.footerrow&&$(\"table:first\",g.grid.sDiv).css(\"width\",g.p.tblwidth+\"px\"))}}})},setGridHeight:function(a){return this.each(function(){var b=this;if(b.grid){var c=$(b.grid.bDiv);c.css({height:a+(isNaN(a)?\"\":\"px\")}),b.p.frozenColumns===!0&&$(\"#\"+$.jgrid.jqID(b.p.id)+\"_frozen\").parent().height(c.height()-16),b.p.height=a,b.p.scroll&&b.grid.populateVisible()}})},setCaption:function(a){return this.each(function(){var b=$(this).jqGrid(\"getStyleUI\",this.p.styleUI+\".common\",\"cornertop\",!0);this.p.caption=a,$(\".ui-jqgrid-title, .ui-jqgrid-title-rtl\",this.grid.cDiv).html(a),$(this.grid.cDiv).show(),$(this.grid.hDiv).removeClass(b)})},setLabel:function(a,b,c,d){return this.each(function(){var e=this,f=-1;if(e.grid&&void 0!==a&&($(e.p.colModel).each(function(b){return this.name===a?(f=b,!1):void 0}),f>=0)){var g=$(\"tr.ui-jqgrid-labels th:eq(\"+f+\")\",e.grid.hDiv);if(b){var h=$(\".s-ico\",g);$(\"[id^=jqgh_]\",g).empty().html(b).append(h),e.p.colNames[f]=b}c&&(\"string\"==typeof c?$(g).addClass(c):$(g).css(c)),\"object\"==typeof d&&$(g).attr(d)}})},setCell:function(a,b,c,d,e,f){return this.each(function(){var g,h,i=this,j=-1;if(i.grid&&(isNaN(b)?$(i.p.colModel).each(function(a){return this.name===b?(j=a,!1):void 0}):j=parseInt(b,10),j>=0)){var k=$(i).jqGrid(\"getGridRowById\",a);if(k){var l=$(\"td:eq(\"+j+\")\",k),m=0,n=[];if(\"\"!==c||f===!0){if(void 0!==k.cells)for(;m<k.cells.length;)n.push(k.cells[m].innerHTML),m++;if(g=i.formatter(a,c,j,n,\"edit\"),h=i.p.colModel[j].title?{title:$.jgrid.stripHtml(g)}:{},i.p.treeGrid&&$(\".tree-wrap\",$(l)).length>0?$(\"span\",$(l)).html(g).attr(h):$(l).html(g).attr(h),\"local\"===i.p.datatype){var o,p=i.p.colModel[j];c=p.formatter&&\"string\"==typeof p.formatter&&\"date\"===p.formatter?$.unformat.date.call(i,c,p):c,o=i.p._index[$.jgrid.stripPref(i.p.idPrefix,a)],void 0!==o&&(i.p.data[o][p.name]=c)}}\"string\"==typeof d?$(l).addClass(d):d&&$(l).css(d),\"object\"==typeof e&&$(l).attr(e)}}})},getCell:function(a,b){var c=!1;return this.each(function(){var d=this,e=-1;if(d.grid&&(isNaN(b)?$(d.p.colModel).each(function(a){return this.name===b?(e=a,!1):void 0}):e=parseInt(b,10),e>=0)){var f=$(d).jqGrid(\"getGridRowById\",a);if(f)try{c=$.unformat.call(d,$(\"td:eq(\"+e+\")\",f),{rowId:f.id,colModel:d.p.colModel[e]},e)}catch(g){c=$.jgrid.htmlDecode($(\"td:eq(\"+e+\")\",f).html())}}}),c},getCol:function(a,b,c){var d,e,f,g,h=[],i=0;return b=\"boolean\"!=typeof b?!1:b,void 0===c&&(c=!1),this.each(function(){var j=this,k=-1;if(j.grid&&(isNaN(a)?$(j.p.colModel).each(function(b){return this.name===a?(k=b,!1):void 0}):k=parseInt(a,10),k>=0)){var l=j.rows.length,m=0,n=0;if(l&&l>0){for(;l>m;){if($(j.rows[m]).hasClass(\"jqgrow\")){try{d=$.unformat.call(j,$(j.rows[m].cells[k]),{rowId:j.rows[m].id,colModel:j.p.colModel[k]},k)}catch(o){d=$.jgrid.htmlDecode(j.rows[m].cells[k].innerHTML)}c?(g=parseFloat(d),isNaN(g)||(i+=g,void 0===f&&(f=e=g),e=Math.min(e,g),f=Math.max(f,g),n++)):h.push(b?{id:j.rows[m].id,value:d}:d)}m++}if(c)switch(c.toLowerCase()){case\"sum\":h=i;break;case\"avg\":h=i/n;break;case\"count\":h=l-1;break;case\"min\":h=e;break;case\"max\":h=f}}}}),h},clearGridData:function(a){return this.each(function(){var b=this;if(b.grid){if(\"boolean\"!=typeof a&&(a=!1),b.p.deepempty)$(\"#\"+$.jgrid.jqID(b.p.id)+\" tbody:first tr:gt(0)\").remove();else{var c=$(\"#\"+$.jgrid.jqID(b.p.id)+\" tbody:first tr:first\")[0];$(\"#\"+$.jgrid.jqID(b.p.id)+\" tbody:first\").empty().append(c)}b.p.footerrow&&a&&$(\".ui-jqgrid-ftable td\",b.grid.sDiv).html(\"&#160;\"),b.p.selrow=null,b.p.selarrrow=[],b.p.savedRow=[],b.p.records=0,b.p.page=1,b.p.lastpage=0,b.p.reccount=0,b.p.data=[],b.p._index={},b.updatepager(!0,!1)}})},getInd:function(a,b){var c,d=!1;\nreturn this.each(function(){c=$(this).jqGrid(\"getGridRowById\",a),c&&(d=b===!0?c:c.rowIndex)}),d},bindKeys:function(a){var b=$.extend({onEnter:null,onSpace:null,onLeftKey:null,onRightKey:null,scrollingRows:!0},a||{});return this.each(function(){var a=this;$(\"body\").is(\"[role]\")||$(\"body\").attr(\"role\",\"application\"),a.p.scrollrows=b.scrollingRows,$(a).keydown(function(c){var d,e,f,g=$(a).find(\"tr[tabindex=0]\")[0],h=a.p.treeReader.expanded_field;if(g)if(f=a.p._index[$.jgrid.stripPref(a.p.idPrefix,g.id)],37===c.keyCode||38===c.keyCode||39===c.keyCode||40===c.keyCode){if(38===c.keyCode){if(e=g.previousSibling,d=\"\",e)if($(e).is(\":hidden\")){for(;e;)if(e=e.previousSibling,!$(e).is(\":hidden\")&&$(e).hasClass(\"jqgrow\")){d=e.id;break}}else d=e.id;$(a).jqGrid(\"setSelection\",d,!0,c),c.preventDefault()}if(40===c.keyCode){if(e=g.nextSibling,d=\"\",e)if($(e).is(\":hidden\")){for(;e;)if(e=e.nextSibling,!$(e).is(\":hidden\")&&$(e).hasClass(\"jqgrow\")){d=e.id;break}}else d=e.id;$(a).jqGrid(\"setSelection\",d,!0,c),c.preventDefault()}37===c.keyCode&&(a.p.treeGrid&&a.p.data[f][h]&&$(g).find(\"div.treeclick\").trigger(\"click\"),$(a).triggerHandler(\"jqGridKeyLeft\",[a.p.selrow]),$.isFunction(b.onLeftKey)&&b.onLeftKey.call(a,a.p.selrow)),39===c.keyCode&&(a.p.treeGrid&&!a.p.data[f][h]&&$(g).find(\"div.treeclick\").trigger(\"click\"),$(a).triggerHandler(\"jqGridKeyRight\",[a.p.selrow]),$.isFunction(b.onRightKey)&&b.onRightKey.call(a,a.p.selrow))}else 13===c.keyCode?($(a).triggerHandler(\"jqGridKeyEnter\",[a.p.selrow]),$.isFunction(b.onEnter)&&b.onEnter.call(a,a.p.selrow)):32===c.keyCode&&($(a).triggerHandler(\"jqGridKeySpace\",[a.p.selrow]),$.isFunction(b.onSpace)&&b.onSpace.call(a,a.p.selrow))})})},unbindKeys:function(){return this.each(function(){$(this).unbind(\"keydown\")})},getLocalRow:function(a){var b,c=!1;return this.each(function(){void 0!==a&&(b=this.p._index[$.jgrid.stripPref(this.p.idPrefix,a)],b>=0&&(c=this.p.data[b]))}),c},progressBar:function(a){return a=$.extend({htmlcontent:\"\",method:\"hide\",loadtype:\"disable\"},a||{}),this.each(function(){var b,c,d=\"show\"===a.method?!0:!1,e=$(\"#load_\"+$.jgrid.jqID(this.p.id)),f=$(window).scrollTop();switch(\"\"!==a.htmlcontent&&e.html(a.htmlcontent),a.loadtype){case\"disable\":break;case\"enable\":e.toggle(d);break;case\"block\":$(\"#lui_\"+$.jgrid.jqID(this.p.id)).toggle(d),e.toggle(d)}e.is(\":visible\")&&(b=e.offsetParent(),e.css(\"top\",\"\"),e.offset().top<f&&(c=Math.min(10+f-b.offset().top,b.height()-e.height()),e.css(\"top\",c+\"px\")))})},getColProp:function(a){var b={},c=this[0];if(!c.grid)return!1;var d,e=c.p.colModel;for(d=0;d<e.length;d++)if(e[d].name===a){b=e[d];break}return b},setColProp:function(a,b){return this.each(function(){if(this.grid&&b){var c,d=this.p.colModel;for(c=0;c<d.length;c++)if(d[c].name===a){$.extend(!0,this.p.colModel[c],b);break}}})},sortGrid:function(a,b,c){return this.each(function(){var d,e=this,f=-1,g=!1;if(e.grid){for(a||(a=e.p.sortname),d=0;d<e.p.colModel.length;d++)if(e.p.colModel[d].index===a||e.p.colModel[d].name===a){f=d,e.p.frozenColumns===!0&&e.p.colModel[d].frozen===!0&&(g=e.grid.fhDiv.find(\"#\"+e.p.id+\"_\"+a));break}if(-1!==f){var h=e.p.colModel[f].sortable;g||(g=e.grid.headers[f].el),\"boolean\"!=typeof h&&(h=!0),\"boolean\"!=typeof b&&(b=!1),h&&e.sortData(\"jqgh_\"+e.p.id+\"_\"+a,f,b,c,g)}}})},setGridState:function(a){return this.each(function(){if(this.grid){var b=this,c=$(this).jqGrid(\"getStyleUI\",this.p.styleUI+\".base\",\"icon_caption_open\",!0),d=$(this).jqGrid(\"getStyleUI\",this.p.styleUI+\".base\",\"icon_caption_close\",!0);\"hidden\"===a?($(\".ui-jqgrid-bdiv, .ui-jqgrid-hdiv\",\"#gview_\"+$.jgrid.jqID(b.p.id)).slideUp(\"fast\"),b.p.pager&&$(b.p.pager).slideUp(\"fast\"),b.p.toppager&&$(b.p.toppager).slideUp(\"fast\"),b.p.toolbar[0]===!0&&(\"both\"===b.p.toolbar[1]&&$(b.grid.ubDiv).slideUp(\"fast\"),$(b.grid.uDiv).slideUp(\"fast\")),b.p.footerrow&&$(\".ui-jqgrid-sdiv\",\"#gbox_\"+$.jgrid.jqID(b.p.id)).slideUp(\"fast\"),$(\".ui-jqgrid-headlink\",b.grid.cDiv).removeClass(c).addClass(d),b.p.gridstate=\"hidden\"):\"visible\"===a&&($(\".ui-jqgrid-hdiv, .ui-jqgrid-bdiv\",\"#gview_\"+$.jgrid.jqID(b.p.id)).slideDown(\"fast\"),b.p.pager&&$(b.p.pager).slideDown(\"fast\"),b.p.toppager&&$(b.p.toppager).slideDown(\"fast\"),b.p.toolbar[0]===!0&&(\"both\"===b.p.toolbar[1]&&$(b.grid.ubDiv).slideDown(\"fast\"),$(b.grid.uDiv).slideDown(\"fast\")),b.p.footerrow&&$(\".ui-jqgrid-sdiv\",\"#gbox_\"+$.jgrid.jqID(b.p.id)).slideDown(\"fast\"),$(\".ui-jqgrid-headlink\",b.grid.cDiv).removeClass(d).addClass(c),b.p.gridstate=\"visible\")}})},setFrozenColumns:function(){return this.each(function(){if(this.grid){var a=this,b=a.p.colModel,c=0,d=b.length,e=-1,f=!1,g=$(a).jqGrid(\"getStyleUI\",a.p.styleUI+\".base\",\"headerDiv\",!0,\"ui-jqgrid-hdiv\"),h=$(a).jqGrid(\"getStyleUI\",a.p.styleUI+\".common\",\"hover\",!0);if(a.p.subGrid!==!0&&a.p.treeGrid!==!0&&a.p.cellEdit!==!0&&!a.p.sortable&&!a.p.scroll){for(a.p.rownumbers&&c++,a.p.multiselect&&c++;d>c&&b[c].frozen===!0;)f=!0,e=c,c++;if(e>=0&&f){var i=a.p.caption?$(a.grid.cDiv).outerHeight():0,j=$(\".ui-jqgrid-htable\",\"#gview_\"+$.jgrid.jqID(a.p.id)).height();a.p.toppager&&(i+=$(a.grid.topDiv).outerHeight()),a.p.toolbar[0]===!0&&\"bottom\"!==a.p.toolbar[1]&&(i+=$(a.grid.uDiv).outerHeight()),a.grid.fhDiv=$('<div style=\"position:absolute;'+(\"rtl\"===a.p.direction?\"right:0;\":\"left:0;\")+\"top:\"+i+\"px;height:\"+j+'px;\" class=\"frozen-div '+g+'\"></div>'),a.grid.fbDiv=$('<div style=\"position:absolute;'+(\"rtl\"===a.p.direction?\"right:0;\":\"left:0;\")+\"top:\"+(parseInt(i,10)+parseInt(j,10)+1)+'px;overflow-y:hidden\" class=\"frozen-bdiv ui-jqgrid-bdiv\"></div>'),$(\"#gview_\"+$.jgrid.jqID(a.p.id)).append(a.grid.fhDiv);var k=$(\".ui-jqgrid-htable\",\"#gview_\"+$.jgrid.jqID(a.p.id)).clone(!0);if(a.p.groupHeader){$(\"tr.jqg-first-row-header, tr.jqg-third-row-header\",k).each(function(){$(\"th:gt(\"+e+\")\",this).remove()});var l,m,n=-1,o=-1;$(\"tr.jqg-second-row-header th\",k).each(function(){return l=parseInt($(this).attr(\"colspan\"),10),m=parseInt($(this).attr(\"rowspan\"),10),m&&(n++,o++),l&&(n+=l,o++),n===e?(o=e,!1):void 0}),n!==e&&(o=e),$(\"tr.jqg-second-row-header\",k).each(function(){$(\"th:gt(\"+o+\")\",this).remove()})}else $(\"tr\",k).each(function(){$(\"th:gt(\"+e+\")\",this).remove()});if($(k).width(1),$(a.grid.fhDiv).append(k).mousemove(function(b){return a.grid.resizing?(a.grid.dragMove(b),!1):void 0}),a.p.footerrow){var p=$(\".ui-jqgrid-bdiv\",\"#gview_\"+$.jgrid.jqID(a.p.id)).height();a.grid.fsDiv=$('<div style=\"position:absolute;left:0px;top:'+(parseInt(i,10)+parseInt(j,10)+parseInt(p,10)+1)+'px;\" class=\"frozen-sdiv ui-jqgrid-sdiv\"></div>'),$(\"#gview_\"+$.jgrid.jqID(a.p.id)).append(a.grid.fsDiv);var q=$(\".ui-jqgrid-ftable\",\"#gview_\"+$.jgrid.jqID(a.p.id)).clone(!0);$(\"tr\",q).each(function(){$(\"td:gt(\"+e+\")\",this).remove()}),$(q).width(1),$(a.grid.fsDiv).append(q)}$(a).bind(\"jqGridResizeStop.setFrozenColumns\",function(b,c,d){var e=$(\".ui-jqgrid-htable\",a.grid.fhDiv);$(\"th:eq(\"+d+\")\",e).width(c);var f=$(\".ui-jqgrid-btable\",a.grid.fbDiv);if($(\"tr:first td:eq(\"+d+\")\",f).width(c),a.p.footerrow){var g=$(\".ui-jqgrid-ftable\",a.grid.fsDiv);$(\"tr:first td:eq(\"+d+\")\",g).width(c)}}),$(\"#gview_\"+$.jgrid.jqID(a.p.id)).append(a.grid.fbDiv),$(a.grid.fbDiv).bind(\"mousewheel DOMMouseScroll\",function(b){var c=$(a.grid.bDiv).scrollTop();$(a.grid.bDiv).scrollTop(b.originalEvent.wheelDelta>0||b.originalEvent.detail<0?c-25:c+25),b.preventDefault()}),a.p.hoverrows===!0&&$(\"#\"+$.jgrid.jqID(a.p.id)).unbind(\"mouseover\").unbind(\"mouseout\"),$(a).bind(\"jqGridAfterGridComplete.setFrozenColumns\",function(){$(\"#\"+$.jgrid.jqID(a.p.id)+\"_frozen\").remove(),$(a.grid.fbDiv).height($(a.grid.bDiv).height()-16);var b=$(\"#\"+$.jgrid.jqID(a.p.id)).clone(!0);$(\"tr[role=row]\",b).each(function(){$(\"td[role=gridcell]:gt(\"+e+\")\",this).remove()}),$(b).width(1).attr(\"id\",a.p.id+\"_frozen\"),$(a.grid.fbDiv).append(b),a.p.hoverrows===!0&&($(\"tr.jqgrow\",b).hover(function(){$(this).addClass(h),$(\"#\"+$.jgrid.jqID(this.id),\"#\"+$.jgrid.jqID(a.p.id)).addClass(h)},function(){$(this).removeClass(h),$(\"#\"+$.jgrid.jqID(this.id),\"#\"+$.jgrid.jqID(a.p.id)).removeClass(h)}),$(\"tr.jqgrow\",\"#\"+$.jgrid.jqID(a.p.id)).hover(function(){$(this).addClass(h),$(\"#\"+$.jgrid.jqID(this.id),\"#\"+$.jgrid.jqID(a.p.id)+\"_frozen\").addClass(h)},function(){$(this).removeClass(h),$(\"#\"+$.jgrid.jqID(this.id),\"#\"+$.jgrid.jqID(a.p.id)+\"_frozen\").removeClass(h)})),b=null}),a.grid.hDiv.loading||$(a).triggerHandler(\"jqGridAfterGridComplete\"),a.p.frozenColumns=!0}}}})},destroyFrozenColumns:function(){return this.each(function(){if(this.grid&&this.p.frozenColumns===!0){var a=this,b=$(a).jqGrid(\"getStyleUI\",a.p.styleUI+\".common\",\"hover\",!0);if($(a.grid.fhDiv).remove(),$(a.grid.fbDiv).remove(),a.grid.fhDiv=null,a.grid.fbDiv=null,a.p.footerrow&&($(a.grid.fsDiv).remove(),a.grid.fsDiv=null),$(this).unbind(\".setFrozenColumns\"),a.p.hoverrows===!0){var c;$(\"#\"+$.jgrid.jqID(a.p.id)).bind(\"mouseover\",function(a){c=$(a.target).closest(\"tr.jqgrow\"),\"ui-subgrid\"!==$(c).attr(\"class\")&&$(c).addClass(b)}).bind(\"mouseout\",function(a){c=$(a.target).closest(\"tr.jqgrow\"),$(c).removeClass(b)})}this.p.frozenColumns=!1}})},resizeColumn:function(a,b){return this.each(function(){var c,d,e,f=this.grid,g=this.p,h=g.colModel,i=h.length;if(\"string\"==typeof a){for(c=0;i>c;c++)if(h[c].name===a){a=c;break}}else a=parseInt(a,10);if(b=parseInt(b,10),!(\"number\"!=typeof a||0>a||a>h.length-1||\"number\"!=typeof b||b<g.minColWidth)){if(g.forceFit)for(g.nv=0,c=a+1;i>c;c++)if(h[c].hidden!==!0){g.nv=c-a;break}if(f.resizing={idx:a},d=b-f.headers[a].width,g.forceFit){if(e=f.headers[a+g.nv].width-d,e<g.minColWidth)return;f.headers[a+g.nv].newWidth=f.headers[a+g.nv].width-d}f.newWidth=g.tblwidth+d,f.headers[a].newWidth=b,f.dragEnd(!1)}})},getStyleUI:function(a,b,c,d){try{var e=\"\",f=a.split(\".\"),g=\"\";switch(c||(e=\"class=\",g='\"'),null==d&&(d=\"\"),f.length){case 1:e+=g+d+\" \"+$.jgrid.styleUI[f[0]][b]+g;break;case 2:e+=g+d+\" \"+$.jgrid.styleUI[f[0]][f[1]][b]+g}}catch(h){e=\"\"}return $.trim(e)},resizeGrid:function(a){return this.each(function(){var b=this;void 0===a&&(a=500),setTimeout(function(){var a=$(window).width(),c=$(\"#gbox_\"+$.jgrid.jqID(b.p.id)).parent().width(),d=b.p.width;d=a-c>3?c:a,$(\"#\"+$.jgrid.jqID(b.p.id)).jqGrid(\"setGridWidth\",d)},a)})}}),$.jgrid.extend({editCell:function(a,b,c){return this.each(function(){var d,e,f,g,h=this,i=$(this).jqGrid(\"getStyleUI\",h.p.styleUI+\".common\",\"highlight\",!0),j=$(this).jqGrid(\"getStyleUI\",h.p.styleUI+\".common\",\"hover\",!0),k=$(this).jqGrid(\"getStyleUI\",h.p.styleUI+\".celledit\",\"inputClass\",!0);if(h.grid&&h.p.cellEdit===!0){if(b=parseInt(b,10),h.p.selrow=h.rows[a].id,h.p.knv||$(h).jqGrid(\"GridNav\"),h.p.savedRow.length>0){if(c===!0&&a==h.p.iRow&&b==h.p.iCol)return;$(h).jqGrid(\"saveCell\",h.p.savedRow[0].id,h.p.savedRow[0].ic)}else window.setTimeout(function(){$(\"#\"+$.jgrid.jqID(h.p.knv)).attr(\"tabindex\",\"-1\").focus()},1);if(g=h.p.colModel[b],d=g.name,\"subgrid\"!==d&&\"cb\"!==d&&\"rn\"!==d){if(f=$(\"td:eq(\"+b+\")\",h.rows[a]),g.editable!==!0||c!==!0||f.hasClass(\"not-editable-cell\")||$.isFunction(h.p.isCellEditable)&&!h.p.isCellEditable.call(h,d,a,b))parseInt(h.p.iCol,10)>=0&&parseInt(h.p.iRow,10)>=0&&$(h.rows[h.p.iRow]).removeClass(\"selected-row \"+j).find(\"td:eq(\"+h.p.iCol+\")\").removeClass(\"edit-cell \"+i),f.addClass(\"edit-cell \"+i),$(h.rows[a]).addClass(\"selected-row \"+j),e=f.html().replace(/\\&#160\\;/gi,\"\"),$(h).triggerHandler(\"jqGridSelectCell\",[h.rows[a].id,d,e,a,b]),$.isFunction(h.p.onSelectCell)&&h.p.onSelectCell.call(h,h.rows[a].id,d,e,a,b);else{parseInt(h.p.iCol,10)>=0&&parseInt(h.p.iRow,10)>=0&&$(h.rows[h.p.iRow]).removeClass(\"selected-row \"+j).find(\"td:eq(\"+h.p.iCol+\")\").removeClass(\"edit-cell \"+i),$(f).addClass(\"edit-cell \"+i),$(h.rows[a]).addClass(\"selected-row \"+j);try{e=$.unformat.call(h,f,{rowId:h.rows[a].id,colModel:g},b)}catch(l){e=g.edittype&&\"textarea\"===g.edittype?$(f).text():$(f).html()}if(h.p.autoencode&&(e=$.jgrid.htmlDecode(e)),g.edittype||(g.edittype=\"text\"),h.p.savedRow.push({id:a,ic:b,name:d,v:e}),(\"&nbsp;\"===e||\"&#160;\"===e||1===e.length&&160===e.charCodeAt(0))&&(e=\"\"),$.isFunction(h.p.formatCell)){var m=h.p.formatCell.call(h,h.rows[a].id,d,e,a,b);void 0!==m&&(e=m)}$(h).triggerHandler(\"jqGridBeforeEditCell\",[h.rows[a].id,d,e,a,b]),$.isFunction(h.p.beforeEditCell)&&h.p.beforeEditCell.call(h,h.rows[a].id,d,e,a,b);var n=$.extend({},g.editoptions||{},{id:a+\"_\"+d,name:d,rowId:h.rows[a].id,oper:\"edit\"}),o=$.jgrid.createEl.call(h,g.edittype,n,e,!0,$.extend({},$.jgrid.ajaxOptions,h.p.ajaxSelectOptions||{}));$.inArray(g.edittype,[\"text\",\"textarea\",\"password\",\"select\"])>-1&&$(o).addClass(k),$(f).html(\"\").append(o).attr(\"tabindex\",\"0\"),$.jgrid.bindEv.call(h,o,n),window.setTimeout(function(){$(o).focus()},1),$(\"input, select, textarea\",f).bind(\"keydown\",function(c){if(27===c.keyCode&&($(\"input.hasDatepicker\",f).length>0?$(\".ui-datepicker\").is(\":hidden\")?$(h).jqGrid(\"restoreCell\",a,b):$(\"input.hasDatepicker\",f).datepicker(\"hide\"):$(h).jqGrid(\"restoreCell\",a,b)),13===c.keyCode&&!c.shiftKey)return $(h).jqGrid(\"saveCell\",a,b),!1;if(9===c.keyCode){if(h.grid.hDiv.loading)return!1;c.shiftKey?$(h).jqGrid(\"prevCell\",a,b):$(h).jqGrid(\"nextCell\",a,b)}c.stopPropagation()}),$(h).triggerHandler(\"jqGridAfterEditCell\",[h.rows[a].id,d,e,a,b]),$.isFunction(h.p.afterEditCell)&&h.p.afterEditCell.call(h,h.rows[a].id,d,e,a,b)}h.p.iCol=b,h.p.iRow=a}}})},saveCell:function(a,b){return this.each(function(){var c,d=this,e=$.jgrid.getRegional(this,\"errors\"),f=$.jgrid.getRegional(this,\"edit\");if(d.grid&&d.p.cellEdit===!0){if(c=d.p.savedRow.length>=1?0:null,null!==c){var g,h,i=$(\"td:eq(\"+b+\")\",d.rows[a]),j=d.p.colModel[b],k=j.name,l=$.jgrid.jqID(k);switch(j.edittype){case\"select\":if(j.editoptions.multiple){var m=$(\"#\"+a+\"_\"+l,d.rows[a]),n=[];g=$(m).val(),g?g.join(\",\"):g=\"\",$(\"option:selected\",m).each(function(a,b){n[a]=$(b).text()}),h=n.join(\",\")}else g=$(\"#\"+a+\"_\"+l+\" option:selected\",d.rows[a]).val(),h=$(\"#\"+a+\"_\"+l+\" option:selected\",d.rows[a]).text();j.formatter&&(h=g);break;case\"checkbox\":var o=[\"Yes\",\"No\"];j.editoptions&&(o=j.editoptions.value.split(\":\")),g=$(\"#\"+a+\"_\"+l,d.rows[a]).is(\":checked\")?o[0]:o[1],h=g;break;case\"password\":case\"text\":case\"textarea\":case\"button\":g=$(\"#\"+a+\"_\"+l,d.rows[a]).val(),h=g;break;case\"custom\":try{if(!j.editoptions||!$.isFunction(j.editoptions.custom_value))throw\"e1\";if(g=j.editoptions.custom_value.call(d,$(\".customelement\",i),\"get\"),void 0===g)throw\"e2\";h=g}catch(p){\"e1\"===p?$.jgrid.info_dialog(e.errcap,\"function 'custom_value' \"+f.msg.nodefined,f.bClose,{styleUI:d.p.styleUI}):\"e2\"===p?$.jgrid.info_dialog(e.errcap,\"function 'custom_value' \"+f.msg.novalue,f.bClose,{styleUI:d.p.styleUI}):$.jgrid.info_dialog(e.errcap,p.message,f.bClose,{styleUI:d.p.styleUI})}}if(h!==d.p.savedRow[c].v){var q=$(d).triggerHandler(\"jqGridBeforeSaveCell\",[d.rows[a].id,k,g,a,b]);if(q&&(g=q,h=q),$.isFunction(d.p.beforeSaveCell)){var r=d.p.beforeSaveCell.call(d,d.rows[a].id,k,g,a,b);r&&(g=r,h=r)}var s=$.jgrid.checkValues.call(d,g,b);if(s[0]===!0){var t=$(d).triggerHandler(\"jqGridBeforeSubmitCell\",[d.rows[a].id,k,g,a,b])||{};if($.isFunction(d.p.beforeSubmitCell)&&(t=d.p.beforeSubmitCell.call(d,d.rows[a].id,k,g,a,b),t||(t={})),$(\"input.hasDatepicker\",i).length>0&&$(\"input.hasDatepicker\",i).datepicker(\"hide\"),\"remote\"===d.p.cellsubmit)if(d.p.cellurl){var u={};d.p.autoencode&&(g=$.jgrid.htmlEncode(g)),u[k]=g;var v,w,x;x=d.p.prmNames,v=x.id,w=x.oper,u[v]=$.jgrid.stripPref(d.p.idPrefix,d.rows[a].id),u[w]=x.editoper,u=$.extend(t,u),$(d).jqGrid(\"progressBar\",{method:\"show\",loadtype:d.p.loadui,htmlcontent:$.jgrid.getRegional(d,\"defaults.savetext\")}),d.grid.hDiv.loading=!0,$.ajax($.extend({url:d.p.cellurl,data:$.isFunction(d.p.serializeCellData)?d.p.serializeCellData.call(d,u):u,type:\"POST\",complete:function(c,j){if($(d).jqGrid(\"progressBar\",{method:\"hide\",loadtype:d.p.loadui}),d.grid.hDiv.loading=!1,\"success\"===j){var l=$(d).triggerHandler(\"jqGridAfterSubmitCell\",[d,c,u.id,k,g,a,b])||[!0,\"\"];l[0]===!0&&$.isFunction(d.p.afterSubmitCell)&&(l=d.p.afterSubmitCell.call(d,c,u.id,k,g,a,b)),l[0]===!0?($(i).empty(),$(d).jqGrid(\"setCell\",d.rows[a].id,b,h,!1,!1,!0),$(i).addClass(\"dirty-cell\"),$(d.rows[a]).addClass(\"edited\"),$(d).triggerHandler(\"jqGridAfterSaveCell\",[d.rows[a].id,k,g,a,b]),$.isFunction(d.p.afterSaveCell)&&d.p.afterSaveCell.call(d,d.rows[a].id,k,g,a,b),d.p.savedRow.splice(0,1)):($.jgrid.info_dialog(e.errcap,l[1],f.bClose,{styleUI:d.p.styleUI}),$(d).jqGrid(\"restoreCell\",a,b))}},error:function(c,g,h){$(\"#lui_\"+$.jgrid.jqID(d.p.id)).hide(),d.grid.hDiv.loading=!1,$(d).triggerHandler(\"jqGridErrorCell\",[c,g,h]),$.isFunction(d.p.errorCell)?(d.p.errorCell.call(d,c,g,h),$(d).jqGrid(\"restoreCell\",a,b)):($.jgrid.info_dialog(e.errcap,c.status+\" : \"+c.statusText+\"<br/>\"+g,f.bClose,{styleUI:d.p.styleUI}),$(d).jqGrid(\"restoreCell\",a,b))}},$.jgrid.ajaxOptions,d.p.ajaxCellOptions||{}))}else try{$.jgrid.info_dialog(e.errcap,e.nourl,f.bClose,{styleUI:d.p.styleUI}),$(d).jqGrid(\"restoreCell\",a,b)}catch(p){}\"clientArray\"===d.p.cellsubmit&&($(i).empty(),$(d).jqGrid(\"setCell\",d.rows[a].id,b,h,!1,!1,!0),$(i).addClass(\"dirty-cell\"),$(d.rows[a]).addClass(\"edited\"),$(d).triggerHandler(\"jqGridAfterSaveCell\",[d.rows[a].id,k,g,a,b]),$.isFunction(d.p.afterSaveCell)&&d.p.afterSaveCell.call(d,d.rows[a].id,k,g,a,b),d.p.savedRow.splice(0,1))}else try{window.setTimeout(function(){$.jgrid.info_dialog(e.errcap,g+\" \"+s[1],f.bClose,{styleUI:d.p.styleUI})},100),$(d).jqGrid(\"restoreCell\",a,b)}catch(p){}}else $(d).jqGrid(\"restoreCell\",a,b)}window.setTimeout(function(){$(\"#\"+$.jgrid.jqID(d.p.knv)).attr(\"tabindex\",\"-1\").focus()},0)}})},restoreCell:function(a,b){return this.each(function(){var c,d=this;if(d.grid&&d.p.cellEdit===!0){if(c=d.p.savedRow.length>=1?0:null,null!==c){var e=$(\"td:eq(\"+b+\")\",d.rows[a]);if($.isFunction($.fn.datepicker))try{$(\"input.hasDatepicker\",e).datepicker(\"hide\")}catch(f){}$(e).empty().attr(\"tabindex\",\"-1\"),$(d).jqGrid(\"setCell\",d.rows[a].id,b,d.p.savedRow[c].v,!1,!1,!0),$(d).triggerHandler(\"jqGridAfterRestoreCell\",[d.rows[a].id,d.p.savedRow[c].v,a,b]),$.isFunction(d.p.afterRestoreCell)&&d.p.afterRestoreCell.call(d,d.rows[a].id,d.p.savedRow[c].v,a,b),d.p.savedRow.splice(0,1)}window.setTimeout(function(){$(\"#\"+d.p.knv).attr(\"tabindex\",\"-1\").focus()},0)}})},nextCell:function(a,b){return this.each(function(){var c,d=this,e=!1;if(d.grid&&d.p.cellEdit===!0){for(c=b+1;c<d.p.colModel.length;c++)if(d.p.colModel[c].editable===!0&&(!$.isFunction(d.p.isCellEditable)||d.p.isCellEditable.call(d,d.p.colModel[c].name,a,c))){e=c;break}e!==!1?$(d).jqGrid(\"editCell\",a,e,!0):d.p.savedRow.length>0&&$(d).jqGrid(\"saveCell\",a,b)}})},prevCell:function(a,b){return this.each(function(){var c,d=this,e=!1;if(d.grid&&d.p.cellEdit===!0){for(c=b-1;c>=0;c--)if(d.p.colModel[c].editable===!0&&(!$.isFunction(d.p.isCellEditable)||d.p.isCellEditable.call(d,d.p.colModel[c].name,a,c))){e=c;break}e!==!1?$(d).jqGrid(\"editCell\",a,e,!0):d.p.savedRow.length>0&&$(d).jqGrid(\"saveCell\",a,b)}})},GridNav:function(){return this.each(function(){function a(a,b,d){if(\"v\"===d.substr(0,1)){var e=$(c.grid.bDiv)[0].clientHeight,f=$(c.grid.bDiv)[0].scrollTop,g=c.rows[a].offsetTop+c.rows[a].clientHeight,h=c.rows[a].offsetTop;\"vd\"===d&&g>=e&&($(c.grid.bDiv)[0].scrollTop=$(c.grid.bDiv)[0].scrollTop+c.rows[a].clientHeight),\"vu\"===d&&f>h&&($(c.grid.bDiv)[0].scrollTop=$(c.grid.bDiv)[0].scrollTop-c.rows[a].clientHeight)}if(\"h\"===d){var i=$(c.grid.bDiv)[0].clientWidth,j=$(c.grid.bDiv)[0].scrollLeft,k=c.rows[a].cells[b].offsetLeft+c.rows[a].cells[b].clientWidth,l=c.rows[a].cells[b].offsetLeft;k>=i+parseInt(j,10)?$(c.grid.bDiv)[0].scrollLeft=$(c.grid.bDiv)[0].scrollLeft+c.rows[a].cells[b].clientWidth:j>l&&($(c.grid.bDiv)[0].scrollLeft=$(c.grid.bDiv)[0].scrollLeft-c.rows[a].cells[b].clientWidth)}}function b(a,b){var d,e;if(\"lft\"===b)for(d=a+1,e=a;e>=0;e--)if(c.p.colModel[e].hidden!==!0){d=e;break}if(\"rgt\"===b)for(d=a-1,e=a;e<c.p.colModel.length;e++)if(c.p.colModel[e].hidden!==!0){d=e;break}return d}var c=this;if(c.grid&&c.p.cellEdit===!0){c.p.knv=c.p.id+\"_kn\";var d,e,f=$(\"<div style='position:fixed;top:0px;width:1px;height:1px;' tabindex='0'><div tabindex='-1' style='width:1px;height:1px;' id='\"+c.p.knv+\"'></div></div>\");$(f).insertBefore(c.grid.cDiv),$(\"#\"+c.p.knv).focus().keydown(function(f){switch(e=f.keyCode,\"rtl\"===c.p.direction&&(37===e?e=39:39===e&&(e=37)),e){case 38:c.p.iRow-1>0&&(a(c.p.iRow-1,c.p.iCol,\"vu\"),$(c).jqGrid(\"editCell\",c.p.iRow-1,c.p.iCol,!1));break;case 40:c.p.iRow+1<=c.rows.length-1&&(a(c.p.iRow+1,c.p.iCol,\"vd\"),$(c).jqGrid(\"editCell\",c.p.iRow+1,c.p.iCol,!1));break;case 37:c.p.iCol-1>=0&&(d=b(c.p.iCol-1,\"lft\"),a(c.p.iRow,d,\"h\"),$(c).jqGrid(\"editCell\",c.p.iRow,d,!1));break;case 39:c.p.iCol+1<=c.p.colModel.length-1&&(d=b(c.p.iCol+1,\"rgt\"),a(c.p.iRow,d,\"h\"),$(c).jqGrid(\"editCell\",c.p.iRow,d,!1));break;case 13:parseInt(c.p.iCol,10)>=0&&parseInt(c.p.iRow,10)>=0&&$(c).jqGrid(\"editCell\",c.p.iRow,c.p.iCol,!0);break;default:return!0}return!1})}})},getChangedCells:function(a){var b=[];return a||(a=\"all\"),this.each(function(){var c,d=this;d.grid&&d.p.cellEdit===!0&&$(d.rows).each(function(e){var f={};$(this).hasClass(\"edited\")&&($(\"td\",this).each(function(b){if(c=d.p.colModel[b].name,\"cb\"!==c&&\"subgrid\"!==c)if(\"dirty\"===a){if($(this).hasClass(\"dirty-cell\"))try{f[c]=$.unformat.call(d,this,{rowId:d.rows[e].id,colModel:d.p.colModel[b]},b)}catch(g){f[c]=$.jgrid.htmlDecode($(this).html())}}else try{f[c]=$.unformat.call(d,this,{rowId:d.rows[e].id,colModel:d.p.colModel[b]},b)}catch(g){f[c]=$.jgrid.htmlDecode($(this).html())}}),f.id=this.id,b.push(f))})}),b}}),$.extend($.jgrid,{showModal:function(a){a.w.show()},closeModal:function(a){a.w.hide().attr(\"aria-hidden\",\"true\"),a.o&&a.o.remove()},hideModal:function(a,b){b=$.extend({jqm:!0,gb:\"\",removemodal:!1,formprop:!1,form:\"\"},b||{});var c=b.gb&&\"string\"==typeof b.gb&&\"#gbox_\"===b.gb.substr(0,6)?$(\"#\"+b.gb.substr(6))[0]:!1;if(b.onClose){var d=c?b.onClose.call(c,a):b.onClose(a);if(\"boolean\"==typeof d&&!d)return}if(b.formprop&&c&&b.form){var e=$(a)[0].style.height,f=$(a)[0].style.width;e.indexOf(\"px\")>-1&&(e=parseFloat(e)),f.indexOf(\"px\")>-1&&(f=parseFloat(f));var g,h;\"edit\"===b.form?(g=\"#\"+$.jgrid.jqID(\"FrmGrid_\"+b.gb.substr(6)),h=\"formProp\"):\"view\"===b.form&&(g=\"#\"+$.jgrid.jqID(\"ViewGrid_\"+b.gb.substr(6)),h=\"viewProp\"),$(c).data(h,{top:parseFloat($(a).css(\"top\")),left:parseFloat($(a).css(\"left\")),width:f,height:e,dataheight:$(g).height(),datawidth:$(g).width()})}if($.fn.jqm&&b.jqm===!0)$(a).attr(\"aria-hidden\",\"true\").jqmHide();else{if(\"\"!==b.gb)try{$(\".jqgrid-overlay:first\",b.gb).hide()}catch(i){}$(a).hide().attr(\"aria-hidden\",\"true\")}b.removemodal&&$(a).remove()},findPos:function(a){var b=0,c=0;if(a.offsetParent)do b+=a.offsetLeft,c+=a.offsetTop;while(a=a.offsetParent);return[b,c]},createModal:function(a,b,c,d,e,f,g){c=$.extend(!0,{},$.jgrid.jqModal||{},c);var h=this,i=\"rtl\"===$(c.gbox).attr(\"dir\")?!0:!1,j=$.jgrid.styleUI[c.styleUI||\"jQueryUI\"].modal,k=$.jgrid.styleUI[c.styleUI||\"jQueryUI\"].common,l=document.createElement(\"div\");g=$.extend({},g||{}),l.className=\"ui-jqdialog \"+j.modal,l.id=a.themodal;var m=document.createElement(\"div\");m.className=\"ui-jqdialog-titlebar \"+j.header,m.id=a.modalhead,$(m).append(\"<span class='ui-jqdialog-title'>\"+c.caption+\"</span>\");var n=$(\"<a class='ui-jqdialog-titlebar-close \"+k.cornerall+\"'></a>\").hover(function(){n.addClass(k.hover)},function(){n.removeClass(k.hover)}).append(\"<span class='\"+k.icon_base+\" \"+j.icon_close+\"'></span>\");$(m).append(n),i?(l.dir=\"rtl\",$(\".ui-jqdialog-title\",m).css(\"float\",\"right\"),$(\".ui-jqdialog-titlebar-close\",m).css(\"left\",\"0.3em\")):(l.dir=\"ltr\",$(\".ui-jqdialog-title\",m).css(\"float\",\"left\"),$(\".ui-jqdialog-titlebar-close\",m).css(\"right\",\"0.3em\"));var o=document.createElement(\"div\");$(o).addClass(\"ui-jqdialog-content \"+j.content).attr(\"id\",a.modalcontent),$(o).append(b),l.appendChild(o),$(l).prepend(m),f===!0?$(\"body\").append(l):\"string\"==typeof f?$(f).append(l):$(l).insertBefore(d),$(l).css(g),void 0===c.jqModal&&(c.jqModal=!0);var p={};if($.fn.jqm&&c.jqModal===!0){if(0===c.left&&0===c.top&&c.overlay){var q=[];q=$.jgrid.findPos(e),c.left=q[0]+4,c.top=q[1]+4}p.top=c.top+\"px\",p.left=c.left}else(0!==c.left||0!==c.top)&&(p.left=c.left,p.top=c.top+\"px\");if($(\"a.ui-jqdialog-titlebar-close\",m).click(function(){var b=$(\"#\"+$.jgrid.jqID(a.themodal)).data(\"onClose\")||c.onClose,d=$(\"#\"+$.jgrid.jqID(a.themodal)).data(\"gbox\")||c.gbox;return h.hideModal(\"#\"+$.jgrid.jqID(a.themodal),{gb:d,jqm:c.jqModal,onClose:b,removemodal:c.removemodal||!1,formprop:!c.recreateForm||!1,form:c.form||\"\"}),!1}),0!==c.width&&c.width||(c.width=300),0!==c.height&&c.height||(c.height=200),!c.zIndex){var r=$(d).parents(\"*[role=dialog]\").filter(\":first\").css(\"z-index\");c.zIndex=r?parseInt(r,10)+2:950}var s=0;if(i&&p.left&&!f&&(s=$(c.gbox).width()-(isNaN(c.width)?0:parseInt(c.width,10))-8,p.left=parseInt(p.left,10)+parseInt(s,10)),p.left&&(p.left+=\"px\"),$(l).css($.extend({width:isNaN(c.width)?\"auto\":c.width+\"px\",height:isNaN(c.height)?\"auto\":c.height+\"px\",zIndex:c.zIndex,overflow:\"hidden\"},p)).attr({tabIndex:\"-1\",role:\"dialog\",\"aria-labelledby\":a.modalhead,\"aria-hidden\":\"true\"}),void 0===c.drag&&(c.drag=!0),void 0===c.resize&&(c.resize=!0),c.drag)if($(m).css(\"cursor\",\"move\"),$.fn.jqDrag)$(l).jqDrag(m);else try{$(l).draggable({handle:$(\"#\"+$.jgrid.jqID(m.id))})}catch(t){}if(c.resize)if($.fn.jqResize)$(l).append(\"<div class='jqResize \"+j.resizable+\" \"+k.icon_base+\" \"+j.icon_resizable+\"'></div>\"),$(\"#\"+$.jgrid.jqID(a.themodal)).jqResize(\".jqResize\",a.scrollelm?\"#\"+$.jgrid.jqID(a.scrollelm):!1);else try{$(l).resizable({handles:\"se, sw\",alsoResize:a.scrollelm?\"#\"+$.jgrid.jqID(a.scrollelm):!1})}catch(u){}c.closeOnEscape===!0&&$(l).keydown(function(b){if(27===b.which){var d=$(\"#\"+$.jgrid.jqID(a.themodal)).data(\"onClose\")||c.onClose;h.hideModal(\"#\"+$.jgrid.jqID(a.themodal),{gb:c.gbox,jqm:c.jqModal,onClose:d,removemodal:c.removemodal||!1,formprop:!c.recreateForm||!1,form:c.form||\"\"})}})},viewModal:function(a,b){if(b=$.extend({toTop:!0,overlay:10,modal:!1,overlayClass:\"ui-widget-overlay\",onShow:$.jgrid.showModal,onHide:$.jgrid.closeModal,gbox:\"\",jqm:!0,jqM:!0},b||{}),void 0===b.focusField&&(b.focusField=0),b.focusField=\"number\"==typeof b.focusField&&b.focusField>=0?parseInt(b.focusField,10):\"boolean\"!=typeof b.focusField||b.focusField?0:!1,$.fn.jqm&&b.jqm===!0)b.jqM?$(a).attr(\"aria-hidden\",\"false\").jqm(b).jqmShow():$(a).attr(\"aria-hidden\",\"false\").jqmShow();else if(\"\"!==b.gbox&&($(\".jqgrid-overlay:first\",b.gbox).show(),$(a).data(\"gbox\",b.gbox)),$(a).show().attr(\"aria-hidden\",\"false\"),b.focusField>=0)try{$(\":input:visible\",a)[parseInt(b.focusField,10)].focus()}catch(c){}},info_dialog:function(a,b,c,d){var e={width:290,height:\"auto\",dataheight:\"auto\",drag:!0,resize:!1,left:250,top:170,zIndex:1e3,jqModal:!0,modal:!1,closeOnEscape:!0,align:\"center\",buttonalign:\"center\",buttons:[]};$.extend(!0,e,$.jgrid.jqModal||{},{caption:\"<b>\"+a+\"</b>\"},d||{});var f=e.jqModal,g=this,h=$.jgrid.styleUI[e.styleUI||\"jQueryUI\"].modal,i=$.jgrid.styleUI[e.styleUI||\"jQueryUI\"].common;$.fn.jqm&&!f&&(f=!1);var j,k=\"\";if(e.buttons.length>0)for(j=0;j<e.buttons.length;j++)void 0===e.buttons[j].id&&(e.buttons[j].id=\"info_button_\"+j),k+=\"<a id='\"+e.buttons[j].id+\"' class='fm-button \"+i.button+\"'>\"+e.buttons[j].text+\"</a>\";var l=isNaN(e.dataheight)?e.dataheight:e.dataheight+\"px\",m=\"text-align:\"+e.align+\";\",n=\"<div id='info_id'>\";n+=\"<div id='infocnt' style='margin:0px;padding-bottom:1em;width:100%;overflow:auto;position:relative;height:\"+l+\";\"+m+\"'>\"+b+\"</div>\",n+=c?\"<div class='\"+h.header+\"' style='text-align:\"+e.buttonalign+\";padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;'><a id='closedialog' class='fm-button \"+i.button+\"'>\"+c+\"</a>\"+k+\"</div>\":\"\"!==k?\"<div class='\"+h.header+\"' style='text-align:\"+e.buttonalign+\";padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;'>\"+k+\"</div>\":\"\",n+=\"</div>\";try{\"false\"===$(\"#info_dialog\").attr(\"aria-hidden\")&&$.jgrid.hideModal(\"#info_dialog\",{jqm:f}),$(\"#info_dialog\").remove()}catch(o){}$.jgrid.createModal({themodal:\"info_dialog\",modalhead:\"info_head\",modalcontent:\"info_content\",scrollelm:\"infocnt\"},n,e,\"\",\"\",!0),k&&$.each(e.buttons,function(a){$(\"#\"+$.jgrid.jqID(this.id),\"#info_id\").bind(\"click\",function(){return e.buttons[a].onClick.call($(\"#info_dialog\")),!1})}),$(\"#closedialog\",\"#info_id\").click(function(){return g.hideModal(\"#info_dialog\",{jqm:f,onClose:$(\"#info_dialog\").data(\"onClose\")||e.onClose,gb:$(\"#info_dialog\").data(\"gbox\")||e.gbox}),!1}),$(\".fm-button\",\"#info_dialog\").hover(function(){$(this).addClass(i.hover)},function(){$(this).removeClass(i.hover)}),$.isFunction(e.beforeOpen)&&e.beforeOpen(),$.jgrid.viewModal(\"#info_dialog\",{onHide:function(a){a.w.hide().remove(),a.o&&a.o.remove()},modal:e.modal,jqm:f}),$.isFunction(e.afterOpen)&&e.afterOpen();try{$(\"#info_dialog\").focus()}catch(p){}},bindEv:function(a,b){var c=this;$.isFunction(b.dataInit)&&b.dataInit.call(c,a,b),b.dataEvents&&$.each(b.dataEvents,function(){void 0!==this.data?$(a).bind(this.type,this.data,this.fn):$(a).bind(this.type,this.fn)})},createEl:function(a,b,c,d,e){function f(a,b,c){var d=[\"dataInit\",\"dataEvents\",\"dataUrl\",\"buildSelect\",\"sopt\",\"searchhidden\",\"defaultValue\",\"attr\",\"custom_element\",\"custom_value\",\"oper\"];void 0!==c&&$.isArray(c)&&$.merge(d,c),$.each(b,function(b,c){-1===$.inArray(b,d)&&$(a).attr(b,c)}),b.hasOwnProperty(\"id\")||$(a).attr(\"id\",$.jgrid.randId())}var g=\"\",h=this;switch(a){case\"textarea\":g=document.createElement(\"textarea\"),d?b.cols||$(g).css({width:\"98%\"}):b.cols||(b.cols=20),b.rows||(b.rows=2),(\"&nbsp;\"===c||\"&#160;\"===c||1===c.length&&160===c.charCodeAt(0))&&(c=\"\"),g.value=c,f(g,b),$(g).attr({role:\"textbox\",multiline:\"true\"});break;case\"checkbox\":if(g=document.createElement(\"input\"),g.type=\"checkbox\",b.value){var i=b.value.split(\":\");c===i[0]&&(g.checked=!0,g.defaultChecked=!0),g.value=i[0],$(g).attr(\"offval\",i[1])}else{var j=(c+\"\").toLowerCase();j.search(/(false|f|0|no|n|off|undefined)/i)<0&&\"\"!==j?(g.checked=!0,g.defaultChecked=!0,g.value=c):g.value=\"on\",$(g).attr(\"offval\",\"off\")}f(g,b,[\"value\"]),$(g).attr(\"role\",\"checkbox\");break;case\"select\":g=document.createElement(\"select\"),g.setAttribute(\"role\",\"select\");var k,l=[];if(b.multiple===!0?(k=!0,g.multiple=\"multiple\",$(g).attr(\"aria-multiselectable\",\"true\")):k=!1,null!=b.dataUrl){var m=null,n=b.postData||e.postData;try{m=b.rowId}catch(o){}h.p&&h.p.idPrefix&&(m=$.jgrid.stripPref(h.p.idPrefix,m)),$.ajax($.extend({url:$.isFunction(b.dataUrl)?b.dataUrl.call(h,m,c,String(b.name)):b.dataUrl,type:\"GET\",dataType:\"html\",data:$.isFunction(n)?n.call(h,m,c,String(b.name)):n,context:{elem:g,options:b,vl:c},success:function(a){var b,c=[],d=this.elem,e=this.vl,g=$.extend({},this.options),i=g.multiple===!0,j=g.cacheUrlData===!0,k=\"\",l=$.isFunction(g.buildSelect)?g.buildSelect.call(h,a):a;\"string\"==typeof l&&(l=$($.trim(l)).html()),l&&($(d).append(l),f(d,g,n?[\"postData\"]:void 0),void 0===g.size&&(g.size=i?3:1),i?(c=e.split(\",\"),c=$.map(c,function(a){return $.trim(a)})):c[0]=$.trim(e),setTimeout(function(){if($(\"option\",d).each(function(a){b=$(this).text(),e=$(this).val()||b,j&&(k+=(0!==a?\";\":\"\")+e+\":\"+b),0===a&&d.multiple&&(this.selected=!1),$(this).attr(\"role\",\"option\"),($.inArray($.trim(b),c)>-1||$.inArray($.trim(e),c)>-1)&&(this.selected=\"selected\")}),j)if(\"edit\"===g.oper)$(h).jqGrid(\"setColProp\",g.name,{editoptions:{buildSelect:null,dataUrl:null,value:k}});else if(\"search\"===g.oper)$(h).jqGrid(\"setColProp\",g.name,{searchoptions:{dataUrl:null,value:k}});else if(\"filter\"===g.oper&&$(\"#fbox_\"+h.p.id)[0].p){var a,f=$(\"#fbox_\"+h.p.id)[0].p.columns;$.each(f,function(){return a=this.index||this.name,g.name===a?(this.searchoptions.dataUrl=null,this.searchoptions.value=k,!1):void 0})}$(h).triggerHandler(\"jqGridAddEditAfterSelectUrlComplete\",[d])},0))}},e||{}))}else if(b.value){var p;void 0===b.size&&(b.size=k?3:1),k&&(l=c.split(\",\"),l=$.map(l,function(a){return $.trim(a)})),\"function\"==typeof b.value&&(b.value=b.value());var q,r,s,t,u,v,w=void 0===b.separator?\":\":b.separator,x=void 0===b.delimiter?\";\":b.delimiter;if(\"string\"==typeof b.value)for(q=b.value.split(x),p=0;p<q.length;p++)r=q[p].split(w),r.length>2&&(r[1]=$.map(r,function(a,b){return b>0?a:void 0\n}).join(w)),s=document.createElement(\"option\"),s.setAttribute(\"role\",\"option\"),s.value=r[0],s.innerHTML=r[1],g.appendChild(s),k||$.trim(r[0])!==$.trim(c)&&$.trim(r[1])!==$.trim(c)||(s.selected=\"selected\"),k&&($.inArray($.trim(r[1]),l)>-1||$.inArray($.trim(r[0]),l)>-1)&&(s.selected=\"selected\");else if(\"[object Array]\"===Object.prototype.toString.call(b.value))for(t=b.value,p=0;p<t.length;p++)2===t[p].length&&(u=t[p][0],v=t[p][1],s=document.createElement(\"option\"),s.setAttribute(\"role\",\"option\"),s.value=u,s.innerHTML=v,g.appendChild(s),k||$.trim(u)!==$.trim(c)&&$.trim(v)!==$.trim(c)||(s.selected=\"selected\"),k&&($.inArray($.trim(v),l)>-1||$.inArray($.trim(u),l)>-1)&&(s.selected=\"selected\"));else if(\"object\"==typeof b.value){t=b.value;for(u in t)t.hasOwnProperty(u)&&(s=document.createElement(\"option\"),s.setAttribute(\"role\",\"option\"),s.value=u,s.innerHTML=t[u],g.appendChild(s),k||$.trim(u)!==$.trim(c)&&$.trim(t[u])!==$.trim(c)||(s.selected=\"selected\"),k&&($.inArray($.trim(t[u]),l)>-1||$.inArray($.trim(u),l)>-1)&&(s.selected=\"selected\"))}f(g,b,[\"value\"])}break;case\"image\":case\"file\":g=document.createElement(\"input\"),g.type=a,f(g,b);break;case\"custom\":g=document.createElement(\"span\");try{if(!$.isFunction(b.custom_element))throw\"e1\";var y=b.custom_element.call(h,c,b);if(!y)throw\"e2\";y=$(y).addClass(\"customelement\").attr({id:b.id,name:b.name}),$(g).empty().append(y)}catch(o){var z=$.jgrid.getRegional(h,\"errors\"),A=$.jgrid.getRegional(h,\"edit\");\"e1\"===o?$.jgrid.info_dialog(z.errcap,\"function 'custom_element' \"+A.msg.nodefined,A.bClose,{styleUI:h.p.styleUI}):\"e2\"===o?$.jgrid.info_dialog(z.errcap,\"function 'custom_element' \"+A.msg.novalue,A.bClose,{styleUI:h.p.styleUI}):$.jgrid.info_dialog(z.errcap,\"string\"==typeof o?o:o.message,A.bClose,{styleUI:h.p.styleUI})}break;default:var B;B=\"button\"===a?\"button\":\"textbox\",g=document.createElement(\"input\"),g.type=a,g.value=c,f(g,b),\"button\"!==a&&(d?b.size||$(g).css({width:\"96%\"}):b.size||(b.size=20)),$(g).attr(\"role\",B)}return g},checkDate:function(a,b){var c,d=function(a){return a%4!==0||a%100===0&&a%400!==0?28:29},e={};if(a=a.toLowerCase(),c=-1!==a.indexOf(\"/\")?\"/\":-1!==a.indexOf(\"-\")?\"-\":-1!==a.indexOf(\".\")?\".\":\"/\",a=a.split(c),b=b.split(c),3!==b.length)return!1;var f,g,h=-1,i=-1,j=-1;for(g=0;g<a.length;g++){var k=isNaN(b[g])?0:parseInt(b[g],10);e[a[g]]=k,f=a[g],-1!==f.indexOf(\"y\")&&(h=g),-1!==f.indexOf(\"m\")&&(j=g),-1!==f.indexOf(\"d\")&&(i=g)}f=\"y\"===a[h]||\"yyyy\"===a[h]?4:\"yy\"===a[h]?2:-1;var l,m=[0,31,29,31,30,31,30,31,31,30,31,30,31];return-1===h?!1:(l=e[a[h]].toString(),2===f&&1===l.length&&(f=1),l.length!==f||0===e[a[h]]&&\"00\"!==b[h]?!1:-1===j?!1:(l=e[a[j]].toString(),l.length<1||e[a[j]]<1||e[a[j]]>12?!1:-1===i?!1:(l=e[a[i]].toString(),l.length<1||e[a[i]]<1||e[a[i]]>31||2===e[a[j]]&&e[a[i]]>d(e[a[h]])||e[a[i]]>m[e[a[j]]]?!1:!0)))},isEmpty:function(a){return a.match(/^\\s+$/)||\"\"===a?!0:!1},checkTime:function(a){var b,c=/^(\\d{1,2}):(\\d{2})([apAP][Mm])?$/;if(!$.jgrid.isEmpty(a)){if(b=a.match(c),!b)return!1;if(b[3]){if(b[1]<1||b[1]>12)return!1}else if(b[1]>23)return!1;if(b[2]>59)return!1}return!0},checkValues:function(a,b,c,d){var e,f,g,h,i,j,k=this,l=k.p.colModel,m=$.jgrid.getRegional(this,\"edit.msg\");if(void 0===c)if(\"string\"==typeof b){for(f=0,i=l.length;i>f;f++)if(l[f].name===b){e=l[f].editrules,b=f,null!=l[f].formoptions&&(g=l[f].formoptions.label);break}}else b>=0&&(e=l[b].editrules);else e=c,g=void 0===d?\"_\":d;if(e){if(g||(g=null!=k.p.colNames?k.p.colNames[b]:l[b].label),e.required===!0&&$.jgrid.isEmpty(a))return[!1,g+\": \"+m.required,\"\"];var n=e.required===!1?!1:!0;if(e.number===!0&&(n!==!1||!$.jgrid.isEmpty(a))&&isNaN(a))return[!1,g+\": \"+m.number,\"\"];if(void 0!==e.minValue&&!isNaN(e.minValue)&&parseFloat(a)<parseFloat(e.minValue))return[!1,g+\": \"+m.minValue+\" \"+e.minValue,\"\"];if(void 0!==e.maxValue&&!isNaN(e.maxValue)&&parseFloat(a)>parseFloat(e.maxValue))return[!1,g+\": \"+m.maxValue+\" \"+e.maxValue,\"\"];var o;if(e.email===!0&&!(n===!1&&$.jgrid.isEmpty(a)||(o=/^((([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,o.test(a))))return[!1,g+\": \"+m.email,\"\"];if(e.integer===!0&&(n!==!1||!$.jgrid.isEmpty(a))){if(isNaN(a))return[!1,g+\": \"+m.integer,\"\"];if(a%1!==0||-1!==a.indexOf(\".\"))return[!1,g+\": \"+m.integer,\"\"]}if(e.date===!0&&!(n===!1&&$.jgrid.isEmpty(a)||(l[b].formatoptions&&l[b].formatoptions.newformat?(h=l[b].formatoptions.newformat,j=$.jgrid.getRegional(k,\"formatter.date.masks\"),j&&j.hasOwnProperty(h)&&(h=j[h])):h=l[b].datefmt||\"Y-m-d\",$.jgrid.checkDate(h,a))))return[!1,g+\": \"+m.date+\" - \"+h,\"\"];if(e.time===!0&&!(n===!1&&$.jgrid.isEmpty(a)||$.jgrid.checkTime(a)))return[!1,g+\": \"+m.date+\" - hh:mm (am/pm)\",\"\"];if(e.url===!0&&!(n===!1&&$.jgrid.isEmpty(a)||(o=/^(((https?)|(ftp)):\\/\\/([\\-\\w]+\\.)+\\w{2,3}(\\/[%\\-\\w]+(\\.\\w{2,})?)*(([\\w\\-\\.\\?\\\\\\/+@&#;`~=%!]*)(\\.\\w{2,})?)*\\/?)/i,o.test(a))))return[!1,g+\": \"+m.url,\"\"];if(e.custom===!0&&(n!==!1||!$.jgrid.isEmpty(a))){if($.isFunction(e.custom_func)){var p=e.custom_func.call(k,a,g,b);return $.isArray(p)?p:[!1,m.customarray,\"\"]}return[!1,m.customfcheck,\"\"]}}return[!0,\"\",\"\"]}}),$.fn.jqFilter=function(a){if(\"string\"==typeof a){var b=$.fn.jqFilter[a];if(!b)throw\"jqFilter - No such method: \"+a;var c=$.makeArray(arguments).slice(1);return b.apply(this,c)}var d=$.extend(!0,{filter:null,columns:[],sortStrategy:null,onChange:null,afterRedraw:null,checkValues:null,error:!1,errmsg:\"\",errorcheck:!0,showQuery:!0,sopt:null,ops:[],operands:null,numopts:[\"eq\",\"ne\",\"lt\",\"le\",\"gt\",\"ge\",\"nu\",\"nn\",\"in\",\"ni\"],stropts:[\"eq\",\"ne\",\"bw\",\"bn\",\"ew\",\"en\",\"cn\",\"nc\",\"nu\",\"nn\",\"in\",\"ni\"],strarr:[\"text\",\"string\",\"blob\"],groupOps:[{op:\"AND\",text:\"AND\"},{op:\"OR\",text:\"OR\"}],groupButton:!0,ruleButtons:!0,direction:\"ltr\"},$.jgrid.filter,a||{});return this.each(function(){if(!this.filter){this.p=d,(null===this.p.filter||void 0===this.p.filter)&&(this.p.filter={groupOp:this.p.groupOps[0].op,rules:[],groups:[]}),null!=this.p.sortStrategy&&$.isFunction(this.p.sortStrategy)&&this.p.columns.sort(this.p.sortStrategy);var a,b,c=this.p.columns.length,e=/msie/i.test(navigator.userAgent)&&!window.opera;if(this.p.initFilter=$.extend(!0,{},this.p.filter),c){for(a=0;c>a;a++)b=this.p.columns[a],b.stype?b.inputtype=b.stype:b.inputtype||(b.inputtype=\"text\"),b.sorttype?b.searchtype=b.sorttype:b.searchtype||(b.searchtype=\"string\"),void 0===b.hidden&&(b.hidden=!1),b.label||(b.label=b.name),b.index&&(b.name=b.index),b.hasOwnProperty(\"searchoptions\")||(b.searchoptions={}),b.hasOwnProperty(\"searchrules\")||(b.searchrules={});var f=function(){return $(\"#\"+$.jgrid.jqID(d.id))[0]||null},g=f(),h=$.jgrid.styleUI[g.p.styleUI||\"jQueryUI\"].filter,i=$.jgrid.styleUI[g.p.styleUI||\"jQueryUI\"].common;this.p.showQuery&&$(this).append(\"<table class='queryresult \"+h.table_widget+\"' style='display:block;max-width:440px;border:0px none;' dir='\"+this.p.direction+\"'><tbody><tr><td class='query'></td></tr></tbody></table>\");var j=function(a,b){var c=[!0,\"\"],e=f();if($.isFunction(b.searchrules))c=b.searchrules.call(e,a,b);else if($.jgrid&&$.jgrid.checkValues)try{c=$.jgrid.checkValues.call(e,a,-1,b.searchrules,b.label)}catch(g){}c&&c.length&&c[0]===!1&&(d.error=!c[0],d.errmsg=c[1])};this.onchange=function(){return this.p.error=!1,this.p.errmsg=\"\",$.isFunction(this.p.onChange)?this.p.onChange.call(this,this.p):!1},this.reDraw=function(){$(\"table.group:first\",this).remove();var a=this.createTableForGroup(d.filter,null);$(this).append(a),$.isFunction(this.p.afterRedraw)&&this.p.afterRedraw.call(this,this.p)},this.createTableForGroup=function(a,b){var c,e=this,f=$(\"<table class='group \"+h.table_widget+\" ui-search-table' style='border:0px none;'><tbody></tbody></table>\"),g=\"left\";\"rtl\"===this.p.direction&&(g=\"right\",f.attr(\"dir\",\"rtl\")),null===b&&f.append(\"<tr class='error' style='display:none;'><th colspan='5' class='\"+i.error+\"' align='\"+g+\"'></th></tr>\");var j=$(\"<tr></tr>\");f.append(j);var k=$(\"<th colspan='5' align='\"+g+\"'></th>\");if(j.append(k),this.p.ruleButtons===!0){var l=$(\"<select class='opsel \"+h.srSelect+\"'></select>\");k.append(l);var m,n=\"\";for(c=0;c<d.groupOps.length;c++)m=a.groupOp===e.p.groupOps[c].op?\" selected='selected'\":\"\",n+=\"<option value='\"+e.p.groupOps[c].op+\"'\"+m+\">\"+e.p.groupOps[c].text+\"</option>\";l.append(n).bind(\"change\",function(){a.groupOp=$(l).val(),e.onchange()})}var o=\"<span></span>\";if(this.p.groupButton&&(o=$(\"<input type='button' value='+ {}' title='Add subgroup' class='add-group \"+i.button+\"'/>\"),o.bind(\"click\",function(){return void 0===a.groups&&(a.groups=[]),a.groups.push({groupOp:d.groupOps[0].op,rules:[],groups:[]}),e.reDraw(),e.onchange(),!1})),k.append(o),this.p.ruleButtons===!0){var p,q=$(\"<input type='button' value='+' title='Add rule' class='add-rule ui-add \"+i.button+\"'/>\");q.bind(\"click\",function(){for(void 0===a.rules&&(a.rules=[]),c=0;c<e.p.columns.length;c++){var b=void 0===e.p.columns[c].search?!0:e.p.columns[c].search,d=e.p.columns[c].hidden===!0,f=e.p.columns[c].searchoptions.searchhidden===!0;if(f&&b||b&&!d){p=e.p.columns[c];break}}var g;return g=p.searchoptions.sopt?p.searchoptions.sopt:e.p.sopt?e.p.sopt:-1!==$.inArray(p.searchtype,e.p.strarr)?e.p.stropts:e.p.numopts,a.rules.push({field:p.name,op:g[0],data:\"\"}),e.reDraw(),!1}),k.append(q)}if(null!==b){var r=$(\"<input type='button' value='-' title='Delete group' class='delete-group \"+i.button+\"'/>\");k.append(r),r.bind(\"click\",function(){for(c=0;c<b.groups.length;c++)if(b.groups[c]===a){b.groups.splice(c,1);break}return e.reDraw(),e.onchange(),!1})}if(void 0!==a.groups)for(c=0;c<a.groups.length;c++){var s=$(\"<tr></tr>\");f.append(s);var t=$(\"<td class='first'></td>\");s.append(t);var u=$(\"<td colspan='4'></td>\");u.append(this.createTableForGroup(a.groups[c],a)),s.append(u)}if(void 0===a.groupOp&&(a.groupOp=e.p.groupOps[0].op),void 0!==a.rules)for(c=0;c<a.rules.length;c++)f.append(this.createTableRowForRule(a.rules[c],a));return f},this.createTableRowForRule=function(a,b){var c,g,j,k,l,m=this,n=f(),o=$(\"<tr></tr>\"),p=\"\";o.append(\"<td class='first'></td>\");var q=$(\"<td class='columns'></td>\");o.append(q);var r,s=$(\"<select class='\"+h.srSelect+\"'></select>\"),t=[];q.append(s),s.bind(\"change\",function(){for(a.field=$(s).val(),j=$(this).parents(\"tr:first\"),$(\".data\",j).empty(),c=0;c<m.p.columns.length;c++)if(m.p.columns[c].name===a.field){k=m.p.columns[c];break}if(k){k.searchoptions.id=$.jgrid.randId(),k.searchoptions.name=a.field,k.searchoptions.oper=\"filter\",e&&\"text\"===k.inputtype&&(k.searchoptions.size||(k.searchoptions.size=10));var b=$.jgrid.createEl.call(n,k.inputtype,k.searchoptions,\"\",!0,m.p.ajaxSelectOptions||{},!0);$(b).addClass(\"input-elm \"+h.srInput),g=k.searchoptions.sopt?k.searchoptions.sopt:m.p.sopt?m.p.sopt:-1!==$.inArray(k.searchtype,m.p.strarr)?m.p.stropts:m.p.numopts;var d=\"\",f=0;for(t=[],$.each(m.p.ops,function(){t.push(this.oper)}),c=0;c<g.length;c++)r=$.inArray(g[c],t),-1!==r&&(0===f&&(a.op=m.p.ops[r].oper),d+=\"<option value='\"+m.p.ops[r].oper+\"'>\"+m.p.ops[r].text+\"</option>\",f++);if($(\".selectopts\",j).empty().append(d),$(\".selectopts\",j)[0].selectedIndex=0,$.jgrid.msie&&$.jgrid.msiever()<9){var i=parseInt($(\"select.selectopts\",j)[0].offsetWidth,10)+1;$(\".selectopts\",j).width(i),$(\".selectopts\",j).css(\"width\",\"auto\")}$(\".data\",j).append(b),$.jgrid.bindEv.call(n,b,k.searchoptions),$(\".input-elm\",j).bind(\"change\",function(b){var c=b.target;a.data=\"SPAN\"===c.nodeName.toUpperCase()&&k.searchoptions&&$.isFunction(k.searchoptions.custom_value)?k.searchoptions.custom_value.call(n,$(c).children(\".customelement:first\"),\"get\"):c.value,m.onchange()}),setTimeout(function(){a.data=$(b).val(),m.onchange()},0)}});var u=0;for(c=0;c<m.p.columns.length;c++){var v=void 0===m.p.columns[c].search?!0:m.p.columns[c].search,w=m.p.columns[c].hidden===!0,x=m.p.columns[c].searchoptions.searchhidden===!0;(x&&v||v&&!w)&&(l=\"\",a.field===m.p.columns[c].name&&(l=\" selected='selected'\",u=c),p+=\"<option value='\"+m.p.columns[c].name+\"'\"+l+\">\"+m.p.columns[c].label+\"</option>\")}s.append(p);var y=$(\"<td class='operators'></td>\");o.append(y),k=d.columns[u],k.searchoptions.id=$.jgrid.randId(),e&&\"text\"===k.inputtype&&(k.searchoptions.size||(k.searchoptions.size=10)),k.searchoptions.name=a.field,k.searchoptions.oper=\"filter\";var z=$.jgrid.createEl.call(n,k.inputtype,k.searchoptions,a.data,!0,m.p.ajaxSelectOptions||{},!0);(\"nu\"===a.op||\"nn\"===a.op)&&($(z).attr(\"readonly\",\"true\"),$(z).attr(\"disabled\",\"true\"));var A=$(\"<select class='selectopts \"+h.srSelect+\"'></select>\");for(y.append(A),A.bind(\"change\",function(){a.op=$(A).val(),j=$(this).parents(\"tr:first\");var b=$(\".input-elm\",j)[0];\"nu\"===a.op||\"nn\"===a.op?(a.data=\"\",\"SELECT\"!==b.tagName.toUpperCase()&&(b.value=\"\"),b.setAttribute(\"readonly\",\"true\"),b.setAttribute(\"disabled\",\"true\")):(\"SELECT\"===b.tagName.toUpperCase()&&(a.data=b.value),b.removeAttribute(\"readonly\"),b.removeAttribute(\"disabled\")),m.onchange()}),g=k.searchoptions.sopt?k.searchoptions.sopt:m.p.sopt?m.p.sopt:-1!==$.inArray(k.searchtype,m.p.strarr)?m.p.stropts:m.p.numopts,p=\"\",$.each(m.p.ops,function(){t.push(this.oper)}),c=0;c<g.length;c++)r=$.inArray(g[c],t),-1!==r&&(l=a.op===m.p.ops[r].oper?\" selected='selected'\":\"\",p+=\"<option value='\"+m.p.ops[r].oper+\"'\"+l+\">\"+m.p.ops[r].text+\"</option>\");A.append(p);var B=$(\"<td class='data'></td>\");o.append(B),B.append(z),$.jgrid.bindEv.call(n,z,k.searchoptions),$(z).addClass(\"input-elm \"+h.srInput).bind(\"change\",function(){a.data=\"custom\"===k.inputtype?k.searchoptions.custom_value.call(n,$(this).children(\".customelement:first\"),\"get\"):$(this).val(),m.onchange()});var C=$(\"<td></td>\");if(o.append(C),this.p.ruleButtons===!0){var D=$(\"<input type='button' value='-' title='Delete rule' class='delete-rule ui-del \"+i.button+\"'/>\");C.append(D),D.bind(\"click\",function(){for(c=0;c<b.rules.length;c++)if(b.rules[c]===a){b.rules.splice(c,1);break}return m.reDraw(),m.onchange(),!1})}return o},this.getStringForGroup=function(a){var b,c=\"(\";if(void 0!==a.groups)for(b=0;b<a.groups.length;b++){c.length>1&&(c+=\" \"+a.groupOp+\" \");try{c+=this.getStringForGroup(a.groups[b])}catch(d){alert(d)}}if(void 0!==a.rules)try{for(b=0;b<a.rules.length;b++)c.length>1&&(c+=\" \"+a.groupOp+\" \"),c+=this.getStringForRule(a.rules[b])}catch(e){alert(e)}return c+=\")\",\"()\"===c?\"\":c},this.getStringForRule=function(a){var b,c,e,f,g=\"\",h=\"\",i=[\"int\",\"integer\",\"float\",\"number\",\"currency\"];for(b=0;b<this.p.ops.length;b++)if(this.p.ops[b].oper===a.op){g=this.p.operands.hasOwnProperty(a.op)?this.p.operands[a.op]:\"\",h=this.p.ops[b].oper;break}for(b=0;b<this.p.columns.length;b++)if(this.p.columns[b].name===a.field){c=this.p.columns[b];break}return void 0===c?\"\":(f=a.data,(\"bw\"===h||\"bn\"===h)&&(f+=\"%\"),(\"ew\"===h||\"en\"===h)&&(f=\"%\"+f),(\"cn\"===h||\"nc\"===h)&&(f=\"%\"+f+\"%\"),(\"in\"===h||\"ni\"===h)&&(f=\" (\"+f+\")\"),d.errorcheck&&j(a.data,c),e=-1!==$.inArray(c.searchtype,i)||\"nn\"===h||\"nu\"===h?a.field+\" \"+g+\" \"+f:a.field+\" \"+g+' \"'+f+'\"')},this.resetFilter=function(){this.p.filter=$.extend(!0,{},this.p.initFilter),this.reDraw(),this.onchange()},this.hideError=function(){$(\"th.\"+i.error,this).html(\"\"),$(\"tr.error\",this).hide()},this.showError=function(){$(\"th.\"+i.error,this).html(this.p.errmsg),$(\"tr.error\",this).show()},this.toUserFriendlyString=function(){return this.getStringForGroup(d.filter)},this.toString=function(){function a(a){if(c.p.errorcheck){var b,d;for(b=0;b<c.p.columns.length;b++)if(c.p.columns[b].name===a.field){d=c.p.columns[b];break}d&&j(a.data,d)}return a.op+\"(item.\"+a.field+\",'\"+a.data+\"')\"}function b(c){var d,e=\"(\";if(void 0!==c.groups)for(d=0;d<c.groups.length;d++)e.length>1&&(e+=\"OR\"===c.groupOp?\" || \":\" && \"),e+=b(c.groups[d]);if(void 0!==c.rules)for(d=0;d<c.rules.length;d++)e.length>1&&(e+=\"OR\"===c.groupOp?\" || \":\" && \"),e+=a(c.rules[d]);return e+=\")\",\"()\"===e?\"\":e}var c=this;return b(this.p.filter)},this.reDraw(),this.p.showQuery&&this.onchange(),this.filter=!0}}})},$.extend($.fn.jqFilter,{toSQLString:function(){var a=\"\";return this.each(function(){a=this.toUserFriendlyString()}),a},filterData:function(){var a;return this.each(function(){a=this.p.filter}),a},getParameter:function(a){return void 0!==a&&this.p.hasOwnProperty(a)?this.p[a]:this.p},resetFilter:function(){return this.each(function(){this.resetFilter()})},addFilter:function(a){\"string\"==typeof a&&(a=$.jgrid.parse(a)),this.each(function(){this.p.filter=a,this.reDraw(),this.onchange()})}}),$.jgrid.extend({filterToolbar:function(a){var b=$.jgrid.getRegional(this[0],\"search\");return a=$.extend({autosearch:!0,autosearchDelay:500,searchOnEnter:!0,beforeSearch:null,afterSearch:null,beforeClear:null,afterClear:null,searchurl:\"\",stringResult:!1,groupOp:\"AND\",defaultSearch:\"bw\",searchOperators:!1,resetIcon:\"x\",operands:{eq:\"==\",ne:\"!\",lt:\"<\",le:\"<=\",gt:\">\",ge:\">=\",bw:\"^\",bn:\"!^\",\"in\":\"=\",ni:\"!=\",ew:\"|\",en:\"!@\",cn:\"~\",nc:\"!~\",nu:\"#\",nn:\"!#\"}},b,a||{}),this.each(function(){var c=this;if(!c.p.filterToolbar){$(c).data(\"filterToolbar\")||$(c).data(\"filterToolbar\",a),c.p.force_regional&&(a=$.extend(a,b));var d,e=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].filter,f=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].common,g=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].base,h=function(){var b,d,e,f={},g=0,h={};$.each(c.p.colModel,function(){var i=$(\"#gs_\"+c.p.idPrefix+$.jgrid.jqID(this.name),this.frozen===!0&&c.p.frozenColumns===!0?c.grid.fhDiv:c.grid.hDiv);if(d=this.index||this.name,e=a.searchOperators?i.parent().prev().children(\"a\").attr(\"soper\")||a.defaultSearch:this.searchoptions&&this.searchoptions.sopt?this.searchoptions.sopt[0]:\"select\"===this.stype?\"eq\":a.defaultSearch,b=\"custom\"===this.stype&&$.isFunction(this.searchoptions.custom_value)&&i.length>0&&\"SPAN\"===i[0].nodeName.toUpperCase()?this.searchoptions.custom_value.call(c,i.children(\".customelement:first\"),\"get\"):i.val(),b||\"nu\"===e||\"nn\"===e)f[d]=b,h[d]=e,g++;else try{delete c.p.postData[d]}catch(j){}});var i=g>0?!0:!1;if(a.stringResult===!0||\"local\"===c.p.datatype||a.searchOperators===!0){var j='{\"groupOp\":\"'+a.groupOp+'\",\"rules\":[',k=0;$.each(f,function(a,b){k>0&&(j+=\",\"),j+='{\"field\":\"'+a+'\",',j+='\"op\":\"'+h[a]+'\",',b+=\"\",j+='\"data\":\"'+b.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\\"/g,'\\\\\"')+'\"}',k++}),j+=\"]}\",$.extend(c.p.postData,{filters:j}),$.each([\"searchField\",\"searchString\",\"searchOper\"],function(a,b){c.p.postData.hasOwnProperty(b)&&delete c.p.postData[b]})}else $.extend(c.p.postData,f);var l;c.p.searchurl&&(l=c.p.url,$(c).jqGrid(\"setGridParam\",{url:c.p.searchurl}));var m=\"stop\"===$(c).triggerHandler(\"jqGridToolbarBeforeSearch\")?!0:!1;!m&&$.isFunction(a.beforeSearch)&&(m=a.beforeSearch.call(c)),m||$(c).jqGrid(\"setGridParam\",{search:i}).trigger(\"reloadGrid\",[{page:1}]),l&&$(c).jqGrid(\"setGridParam\",{url:l}),$(c).triggerHandler(\"jqGridToolbarAfterSearch\"),$.isFunction(a.afterSearch)&&a.afterSearch.call(c)},i=function(b){var d,e={},f=0;b=\"boolean\"!=typeof b?!0:b,$.each(c.p.colModel,function(){var a,b=$(\"#gs_\"+c.p.idPrefix+$.jgrid.jqID(this.name),this.frozen===!0&&c.p.frozenColumns===!0?c.grid.fhDiv:c.grid.hDiv);switch(this.searchoptions&&void 0!==this.searchoptions.defaultValue&&(a=this.searchoptions.defaultValue),d=this.index||this.name,this.stype){case\"select\":if(b.find(\"option\").each(function(b){return 0===b&&(this.selected=!0),$(this).val()===a?(this.selected=!0,!1):void 0}),void 0!==a)e[d]=a,f++;else try{delete c.p.postData[d]}catch(g){}break;case\"text\":if(b.val(a||\"\"),void 0!==a)e[d]=a,f++;else try{delete c.p.postData[d]}catch(h){}break;case\"custom\":$.isFunction(this.searchoptions.custom_value)&&b.length>0&&\"SPAN\"===b[0].nodeName.toUpperCase()&&this.searchoptions.custom_value.call(c,b.children(\".customelement:first\"),\"set\",a||\"\")}});var g=f>0?!0:!1;if(c.p.resetsearch=!0,a.stringResult===!0||\"local\"===c.p.datatype){var h='{\"groupOp\":\"'+a.groupOp+'\",\"rules\":[',i=0;$.each(e,function(a,b){i>0&&(h+=\",\"),h+='{\"field\":\"'+a+'\",',h+='\"op\":\"eq\",',b+=\"\",h+='\"data\":\"'+b.replace(/\\\\/g,\"\\\\\\\\\").replace(/\\\"/g,'\\\\\"')+'\"}',i++}),h+=\"]}\",$.extend(c.p.postData,{filters:h}),$.each([\"searchField\",\"searchString\",\"searchOper\"],function(a,b){c.p.postData.hasOwnProperty(b)&&delete c.p.postData[b]})}else $.extend(c.p.postData,e);var j;c.p.searchurl&&(j=c.p.url,$(c).jqGrid(\"setGridParam\",{url:c.p.searchurl}));var k=\"stop\"===$(c).triggerHandler(\"jqGridToolbarBeforeClear\")?!0:!1;!k&&$.isFunction(a.beforeClear)&&(k=a.beforeClear.call(c)),k||b&&$(c).jqGrid(\"setGridParam\",{search:g}).trigger(\"reloadGrid\",[{page:1}]),j&&$(c).jqGrid(\"setGridParam\",{url:j}),$(c).triggerHandler(\"jqGridToolbarAfterClear\"),$.isFunction(a.afterClear)&&a.afterClear()},j=function(){var a=$(\"tr.ui-search-toolbar\",c.grid.hDiv),b=c.p.frozenColumns===!0?$(\"tr.ui-search-toolbar\",c.grid.fhDiv):!1;\"none\"===a.css(\"display\")?(a.show(),b&&b.show()):(a.hide(),b&&b.hide())},k=function(b,d,g){$(\"#sopt_menu\").remove(),d=parseInt(d,10),g=parseInt(g,10)+18;for(var i,j,k=$(\".ui-jqgrid-view\").css(\"font-size\")||\"11px\",l='<ul id=\"sopt_menu\" class=\"ui-search-menu modal-content\" role=\"menu\" tabindex=\"0\" style=\"font-size:'+k+\";left:\"+d+\"px;top:\"+g+'px;\">',m=$(b).attr(\"soper\"),n=[],o=0,p=$(b).attr(\"colname\"),q=c.p.colModel.length;q>o&&c.p.colModel[o].name!==p;)o++;var r=c.p.colModel[o],s=$.extend({},r.searchoptions);for(s.sopt||(s.sopt=[],s.sopt[0]=\"select\"===r.stype?\"eq\":a.defaultSearch),$.each(a.odata,function(){n.push(this.oper)}),o=0;o<s.sopt.length;o++)j=$.inArray(s.sopt[o],n),-1!==j&&(i=m===a.odata[j].oper?f.highlight:\"\",l+='<li class=\"ui-menu-item '+i+'\" role=\"presentation\"><a class=\"'+f.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" value=\"'+a.odata[j].oper+'\" oper=\"'+a.operands[a.odata[j].oper]+'\"><table class=\"ui-common-table\"><tr><td width=\"25px\">'+a.operands[a.odata[j].oper]+\"</td><td>\"+a.odata[j].text+\"</td></tr></table></a></li>\");l+=\"</ul>\",$(\"body\").append(l),$(\"#sopt_menu\").addClass(\"ui-menu \"+e.menu_widget),$(\"#sopt_menu > li > a\").hover(function(){$(this).addClass(f.hover)},function(){$(this).removeClass(f.hover)}).click(function(){var d=$(this).attr(\"value\"),e=$(this).attr(\"oper\");if($(c).triggerHandler(\"jqGridToolbarSelectOper\",[d,e,b]),$(\"#sopt_menu\").hide(),$(b).text(e).attr(\"soper\",d),a.autosearch===!0){var f=$(b).parent().next().children()[0];($(f).val()||\"nu\"===d||\"nn\"===d)&&h()}})},l=$(\"<tr class='ui-search-toolbar' role='row'></tr>\");$.each(c.p.colModel,function(b){var f,i,j,k,m,n,o,p=this,q=\"\",r=\"=\",s=$(\"<th role='columnheader' class='\"+g.headerBox+\" ui-th-\"+c.p.direction+\"' id='gsh_\"+c.p.id+\"_\"+p.name+\"' ></th>\"),t=$(\"<div></div>\"),u=$(\"<table class='ui-search-table' cellspacing='0'><tr><td class='ui-search-oper' headers=''></td><td class='ui-search-input' headers=''></td><td class='ui-search-clear' headers=''></td></tr></table>\");if(this.hidden===!0&&$(s).css(\"display\",\"none\"),this.search=this.search===!1?!1:!0,void 0===this.stype&&(this.stype=\"text\"),f=$.extend({},this.searchoptions||{},{name:p.index||p.name,id:\"gs_\"+c.p.idPrefix+p.name,oper:\"search\"}),this.search){if(a.searchOperators){for(i=f.sopt?f.sopt[0]:\"select\"===p.stype?\"eq\":a.defaultSearch,j=0;j<a.odata.length;j++)if(a.odata[j].oper===i){r=a.operands[i]||\"\";break}k=null!=f.searchtitle?f.searchtitle:a.operandTitle,q=\"<a title='\"+k+\"' style='padding-right: 0.5em;' soper='\"+i+\"' class='soptclass' colname='\"+this.name+\"'>\"+r+\"</a>\"}switch($(\"td:eq(0)\",u).attr(\"colindex\",b).append(q),void 0===f.clearSearch&&(f.clearSearch=!0),f.clearSearch?(m=a.resetTitle||\"Clear Search Value\",$(\"td:eq(2)\",u).append(\"<a title='\"+m+\"' style='padding-right: 0.3em;padding-left: 0.3em;' class='clearsearchclass'>\"+a.resetIcon+\"</a>\")):$(\"td:eq(2)\",u).hide(),this.surl&&(f.dataUrl=this.surl),n=\"\",f.defaultValue&&(n=$.isFunction(f.defaultValue)?f.defaultValue.call(c):f.defaultValue),o=$.jgrid.createEl.call(c,this.stype,f,n,!1,$.extend({},$.jgrid.ajaxOptions,c.p.ajaxSelectOptions||{})),$(o).css({width:\"100%\"}).addClass(e.srInput),$(\"td:eq(1)\",u).append(o),$(t).append(u),this.stype){case\"select\":a.autosearch===!0&&(f.dataEvents=[{type:\"change\",fn:function(){return h(),!1}}]);break;case\"text\":a.autosearch===!0&&(f.dataEvents=a.searchOnEnter?[{type:\"keypress\",fn:function(a){var b=a.charCode||a.keyCode||0;return 13===b?(h(),!1):this}}]:[{type:\"keydown\",fn:function(b){var c=b.which;switch(c){case 13:return!1;case 9:case 16:case 37:case 38:case 39:case 40:case 27:break;default:d&&clearTimeout(d),d=setTimeout(function(){h()},a.autosearchDelay)}}}])}$.jgrid.bindEv.call(c,o,f)}$(s).append(t),$(l).append(s),a.searchOperators||$(\"td:eq(0)\",u).hide()}),$(\"table thead\",c.grid.hDiv).append(l),a.searchOperators&&($(\".soptclass\",l).click(function(a){var b=$(this).offset(),c=b.left,d=b.top;k(this,c,d),a.stopPropagation()}),$(\"body\").on(\"click\",function(a){\"soptclass\"!==a.target.className&&$(\"#sopt_menu\").hide()})),$(\".clearsearchclass\",l).click(function(){var b=$(this).parents(\"tr:first\"),d=parseInt($(\"td.ui-search-oper\",b).attr(\"colindex\"),10),e=$.extend({},c.p.colModel[d].searchoptions||{}),f=e.defaultValue?e.defaultValue:\"\";\"select\"===c.p.colModel[d].stype?f?$(\"td.ui-search-input select\",b).val(f):$(\"td.ui-search-input select\",b)[0].selectedIndex=0:$(\"td.ui-search-input input\",b).val(f),a.autosearch===!0&&h()}),this.p.filterToolbar=!0,this.triggerToolbar=h,this.clearToolbar=i,this.toggleToolbar=j}})},destroyFilterToolbar:function(){return this.each(function(){this.p.filterToolbar&&(this.triggerToolbar=null,this.clearToolbar=null,this.toggleToolbar=null,this.p.filterToolbar=!1,$(this.grid.hDiv).find(\"table thead tr.ui-search-toolbar\").remove())})},searchGrid:function(a){var b=$.jgrid.getRegional(this[0],\"search\");return a=$.extend(!0,{recreateFilter:!1,drag:!0,sField:\"searchField\",sValue:\"searchString\",sOper:\"searchOper\",sFilter:\"filters\",loadDefaults:!0,beforeShowSearch:null,afterShowSearch:null,onInitializeSearch:null,afterRedraw:null,afterChange:null,sortStrategy:null,closeAfterSearch:!1,closeAfterReset:!1,closeOnEscape:!1,searchOnEnter:!1,multipleSearch:!1,multipleGroup:!1,top:0,left:0,jqModal:!0,modal:!1,resize:!0,width:450,height:\"auto\",dataheight:\"auto\",showQuery:!1,errorcheck:!0,sopt:null,stringResult:void 0,onClose:null,onSearch:null,onReset:null,toTop:!0,overlay:30,columns:[],tmplNames:null,tmplFilters:null,tmplLabel:\" Template: \",showOnLoad:!1,layer:null,operands:{eq:\"=\",ne:\"<>\",lt:\"<\",le:\"<=\",gt:\">\",ge:\">=\",bw:\"LIKE\",bn:\"NOT LIKE\",\"in\":\"IN\",ni:\"NOT IN\",ew:\"LIKE\",en:\"NOT LIKE\",cn:\"LIKE\",nc:\"NOT LIKE\",nu:\"IS NULL\",nn:\"ISNOT NULL\"}},b,a||{}),this.each(function(){function b(b){f=$(c).triggerHandler(\"jqGridFilterBeforeShow\",[b]),void 0===f&&(f=!0),f&&$.isFunction(a.beforeShowSearch)&&(f=a.beforeShowSearch.call(c,b)),f&&($.jgrid.viewModal(\"#\"+$.jgrid.jqID(h.themodal),{gbox:\"#gbox_\"+$.jgrid.jqID(e),jqm:a.jqModal,modal:a.modal,overlay:a.overlay,toTop:a.toTop}),$(c).triggerHandler(\"jqGridFilterAfterShow\",[b]),$.isFunction(a.afterShowSearch)&&a.afterShowSearch.call(c,b))}var c=this;if(c.grid){var d,e=\"fbox_\"+c.p.id,f=!0,g=!0,h={themodal:\"searchmod\"+e,modalhead:\"searchhd\"+e,modalcontent:\"searchcnt\"+e,scrollelm:e},i=c.p.postData[a.sFilter],j=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].filter,k=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].common;if(a.styleUI=c.p.styleUI,\"string\"==typeof i&&(i=$.jgrid.parse(i)),a.recreateFilter===!0&&$(\"#\"+$.jgrid.jqID(h.themodal)).remove(),void 0!==$(\"#\"+$.jgrid.jqID(h.themodal))[0])b($(\"#fbox_\"+$.jgrid.jqID(c.p.id)));else{var l=$(\"<div><div id='\"+e+\"' class='searchFilter' style='overflow:auto'></div></div>\").insertBefore(\"#gview_\"+$.jgrid.jqID(c.p.id)),m=\"left\",n=\"\";\"rtl\"===c.p.direction&&(m=\"right\",n=\" style='text-align:left'\",l.attr(\"dir\",\"rtl\"));var o,p,q=$.extend([],c.p.colModel),r=\"<a id='\"+e+\"_search' class='fm-button \"+k.button+\" fm-button-icon-right ui-search'><span class='\"+k.icon_base+\" \"+j.icon_search+\"'></span>\"+a.Find+\"</a>\",s=\"<a id='\"+e+\"_reset' class='fm-button \"+k.button+\" fm-button-icon-left ui-reset'><span class='\"+k.icon_base+\" \"+j.icon_reset+\"'></span>\"+a.Reset+\"</a>\",t=\"\",u=\"\",v=!1,w=-1;if(a.showQuery&&(t=\"<a id='\"+e+\"_query' class='fm-button \"+k.button+\" fm-button-icon-left'><span class='\"+k.icon_base+\" \"+j.icon_query+\"'></span>Query</a>\"),a.columns.length?(q=a.columns,w=0,o=q[0].index||q[0].name):$.each(q,function(a,b){if(b.label||(b.label=c.p.colNames[a]),!v){var d=void 0===b.search?!0:b.search,e=b.hidden===!0,f=b.searchoptions&&b.searchoptions.searchhidden===!0;(f&&d||d&&!e)&&(v=!0,o=b.index||b.name,w=a)}}),!i&&o||a.multipleSearch===!1){var x=\"eq\";w>=0&&q[w].searchoptions&&q[w].searchoptions.sopt?x=q[w].searchoptions.sopt[0]:a.sopt&&a.sopt.length&&(x=a.sopt[0]),i={groupOp:\"AND\",rules:[{field:o,op:x,data:\"\"}]}}v=!1,a.tmplNames&&a.tmplNames.length&&(v=!0,u=\"<tr><td class='ui-search-label'>\"+a.tmplLabel+\"</td>\",u+=\"<td><select class='ui-template \"+j.srSelect+\"'>\",u+=\"<option value='default'>Default</option>\",$.each(a.tmplNames,function(a,b){u+=\"<option value='\"+a+\"'>\"+b+\"</option>\"}),u+=\"</select></td></tr>\"),p=\"<table class='EditTable' style='border:0px none;margin-top:5px' id='\"+e+\"_2'><tbody><tr><td colspan='2'><hr class='\"+k.content+\"' style='margin:1px'/></td></tr>\"+u+\"<tr><td class='EditButton' style='text-align:\"+m+\"'>\"+s+\"</td><td class='EditButton' \"+n+\">\"+t+r+\"</td></tr></tbody></table>\",e=$.jgrid.jqID(e),$(\"#\"+e).jqFilter({columns:q,sortStrategy:a.sortStrategy,filter:a.loadDefaults?i:null,showQuery:a.showQuery,errorcheck:a.errorcheck,sopt:a.sopt,groupButton:a.multipleGroup,ruleButtons:a.multipleSearch,afterRedraw:a.afterRedraw,ops:a.odata,operands:a.operands,ajaxSelectOptions:c.p.ajaxSelectOptions,groupOps:a.groupOps,onChange:function(){this.p.showQuery&&$(\".query\",this).html(this.toUserFriendlyString()),$.isFunction(a.afterChange)&&a.afterChange.call(c,$(\"#\"+e),a)},direction:c.p.direction,id:c.p.id}),l.append(p),v&&a.tmplFilters&&a.tmplFilters.length&&$(\".ui-template\",l).bind(\"change\",function(){var b=$(this).val();return\"default\"===b?$(\"#\"+e).jqFilter(\"addFilter\",i):$(\"#\"+e).jqFilter(\"addFilter\",a.tmplFilters[parseInt(b,10)]),!1}),a.multipleGroup===!0&&(a.multipleSearch=!0),$(c).triggerHandler(\"jqGridFilterInitialize\",[$(\"#\"+e)]),$.isFunction(a.onInitializeSearch)&&a.onInitializeSearch.call(c,$(\"#\"+e)),a.gbox=\"#gbox_\"+e,a.layer?$.jgrid.createModal(h,l,a,\"#gview_\"+$.jgrid.jqID(c.p.id),$(\"#gbox_\"+$.jgrid.jqID(c.p.id))[0],\"#\"+$.jgrid.jqID(a.layer),{position:\"relative\"}):$.jgrid.createModal(h,l,a,\"#gview_\"+$.jgrid.jqID(c.p.id),$(\"#gbox_\"+$.jgrid.jqID(c.p.id))[0]),(a.searchOnEnter||a.closeOnEscape)&&$(\"#\"+$.jgrid.jqID(h.themodal)).keydown(function(b){var c=$(b.target);return!a.searchOnEnter||13!==b.which||c.hasClass(\"add-group\")||c.hasClass(\"add-rule\")||c.hasClass(\"delete-group\")||c.hasClass(\"delete-rule\")||c.hasClass(\"fm-button\")&&c.is(\"[id$=_query]\")?a.closeOnEscape&&27===b.which?($(\"#\"+$.jgrid.jqID(h.modalhead)).find(\".ui-jqdialog-titlebar-close\").click(),!1):void 0:($(\"#\"+e+\"_search\").click(),!1)}),t&&$(\"#\"+e+\"_query\").bind(\"click\",function(){return $(\".queryresult\",l).toggle(),!1}),void 0===a.stringResult&&(a.stringResult=a.multipleSearch),$(\"#\"+e+\"_search\").bind(\"click\",function(){var b,f,i={};if(d=$(\"#\"+e),d.find(\".input-elm:focus\").change(),f=d.jqFilter(\"filterData\"),a.errorcheck&&(d[0].hideError(),a.showQuery||d.jqFilter(\"toSQLString\"),d[0].p.error))return d[0].showError(),!1;if(a.stringResult){try{b=JSON.stringify(f)}catch(j){}\"string\"==typeof b&&(i[a.sFilter]=b,$.each([a.sField,a.sValue,a.sOper],function(){i[this]=\"\"}))}else a.multipleSearch?(i[a.sFilter]=f,$.each([a.sField,a.sValue,a.sOper],function(){i[this]=\"\"\n})):(i[a.sField]=f.rules[0].field,i[a.sValue]=f.rules[0].data,i[a.sOper]=f.rules[0].op,i[a.sFilter]=\"\");return c.p.search=!0,$.extend(c.p.postData,i),g=$(c).triggerHandler(\"jqGridFilterSearch\"),void 0===g&&(g=!0),g&&$.isFunction(a.onSearch)&&(g=a.onSearch.call(c,c.p.filters)),g!==!1&&$(c).trigger(\"reloadGrid\",[{page:1}]),a.closeAfterSearch&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(h.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(c.p.id),jqm:a.jqModal,onClose:a.onClose}),!1}),$(\"#\"+e+\"_reset\").bind(\"click\",function(){var b={},d=$(\"#\"+e);return c.p.search=!1,c.p.resetsearch=!0,a.multipleSearch===!1?b[a.sField]=b[a.sValue]=b[a.sOper]=\"\":b[a.sFilter]=\"\",d[0].resetFilter(),v&&$(\".ui-template\",l).val(\"default\"),$.extend(c.p.postData,b),g=$(c).triggerHandler(\"jqGridFilterReset\"),void 0===g&&(g=!0),g&&$.isFunction(a.onReset)&&(g=a.onReset.call(c)),g!==!1&&$(c).trigger(\"reloadGrid\",[{page:1}]),a.closeAfterReset&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(h.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(c.p.id),jqm:a.jqModal,onClose:a.onClose}),!1}),b($(\"#\"+e)),$(\".fm-button:not(.\"+k.disabled+\")\",l).hover(function(){$(this).addClass(k.hover)},function(){$(this).removeClass(k.hover)})}}})}});var rp_ge={};if($.jgrid.extend({editGridRow:function(a,b){var c=$.jgrid.getRegional(this[0],\"edit\"),d=this[0].p.styleUI,e=$.jgrid.styleUI[d].formedit,f=$.jgrid.styleUI[d].common;return b=$.extend(!0,{top:0,left:0,width:\"500\",datawidth:\"auto\",height:\"auto\",dataheight:\"auto\",modal:!1,overlay:30,drag:!0,resize:!0,url:null,mtype:\"POST\",clearAfterAdd:!0,closeAfterEdit:!1,reloadAfterSubmit:!0,onInitializeForm:null,beforeInitData:null,beforeShowForm:null,afterShowForm:null,beforeSubmit:null,afterSubmit:null,onclickSubmit:null,afterComplete:null,onclickPgButtons:null,afterclickPgButtons:null,editData:{},recreateForm:!1,jqModal:!0,closeOnEscape:!1,addedrow:\"first\",topinfo:\"\",bottominfo:\"\",saveicon:[],closeicon:[],savekey:[!1,13],navkeys:[!1,38,40],checkOnSubmit:!1,checkOnUpdate:!1,_savedData:{},processing:!1,onClose:null,ajaxEditOptions:{},serializeEditData:null,viewPagerButtons:!0,overlayClass:f.overlay,removemodal:!0,form:\"edit\",template:null,focusField:!0},c,b||{}),rp_ge[$(this)[0].p.id]=b,this.each(function(){function c(){return $(x).find(\".FormElement\").each(function(){var a=$(\".customelement\",this);if(a.length){var b=a[0],c=$(b).attr(\"name\");$.each(p.p.colModel,function(){if(this.name===c&&this.editoptions&&$.isFunction(this.editoptions.custom_value)){try{if(r[c]=this.editoptions.custom_value.call(p,$(\"#\"+$.jgrid.jqID(c),x),\"get\"),void 0===r[c])throw\"e1\"}catch(a){\"e1\"===a?$.jgrid.info_dialog(D.errcap,\"function 'custom_value' \"+rp_ge[$(this)[0]].p.msg.novalue,rp_ge[$(this)[0]].p.bClose,{styleUI:rp_ge[$(this)[0]].p.styleUI}):$.jgrid.info_dialog(D.errcap,a.message,rp_ge[$(this)[0]].p.bClose,{styleUI:rp_ge[$(this)[0]].p.styleUI})}return!0}})}else{switch($(this).get(0).type){case\"checkbox\":if($(this).is(\":checked\"))r[this.name]=$(this).val();else{var d=$(this).attr(\"offval\");r[this.name]=d}break;case\"select-one\":r[this.name]=$(\"option:selected\",this).val();break;case\"select-multiple\":r[this.name]=$(this).val(),r[this.name]=r[this.name]?r[this.name].join(\",\"):\"\";var e=[];$(\"option:selected\",this).each(function(a,b){e[a]=$(b).text()});break;case\"password\":case\"text\":case\"textarea\":case\"button\":r[this.name]=$(this).val()}p.p.autoencode&&(r[this.name]=$.jgrid.htmlEncode(r[this.name]))}}),!0}function d(a,b,c,d){var f,g,h,i,j,k,l,m=0,n=[],o=!1,q=\"<td class='CaptionTD'>&#160;</td><td class='DataTD'>&#160;</td>\",r=\"\";for(l=1;d>=l;l++)r+=q;if(\"_empty\"!==a&&(o=$(b).jqGrid(\"getInd\",a)),$(b.p.colModel).each(function(l){if(f=this.name,g=this.editrules&&this.editrules.edithidden===!0?!1:this.hidden===!0?!0:!1,j=g?\"style='display:none'\":\"\",\"cb\"!==f&&\"subgrid\"!==f&&this.editable===!0&&\"rn\"!==f){if(o===!1)i=\"\";else if(f===b.p.ExpandColumn&&b.p.treeGrid===!0)i=$(\"td[role='gridcell']:eq(\"+l+\")\",b.rows[o]).text();else{try{i=$.unformat.call(b,$(\"td[role='gridcell']:eq(\"+l+\")\",b.rows[o]),{rowId:a,colModel:this},l)}catch(q){i=this.edittype&&\"textarea\"===this.edittype?$(\"td[role='gridcell']:eq(\"+l+\")\",b.rows[o]).text():$(\"td[role='gridcell']:eq(\"+l+\")\",b.rows[o]).html()}(!i||\"&nbsp;\"===i||\"&#160;\"===i||1===i.length&&160===i.charCodeAt(0))&&(i=\"\")}var s=$.extend({},this.editoptions||{},{id:f,name:f,rowId:a,oper:\"edit\"}),t=$.extend({},{elmprefix:\"\",elmsuffix:\"\",rowabove:!1,rowcontent:\"\"},this.formoptions||{}),u=parseInt(t.rowpos,10)||m+1,w=parseInt(2*(parseInt(t.colpos,10)||1),10);if(\"_empty\"===a&&s.defaultValue&&(i=$.isFunction(s.defaultValue)?s.defaultValue.call(p):s.defaultValue),this.edittype||(this.edittype=\"text\"),p.p.autoencode&&(i=$.jgrid.htmlDecode(i)),k=$.jgrid.createEl.call(p,this.edittype,s,i,!1,$.extend({},$.jgrid.ajaxOptions,b.p.ajaxSelectOptions||{})),\"select\"===this.edittype&&(i=$(k).val(),\"select-multiple\"===$(k).get(0).type&&i&&(i=i.join(\",\"))),\"checkbox\"===this.edittype&&(i=$(k).is(\":checked\")?$(k).val():$(k).attr(\"offval\")),(rp_ge[p.p.id].checkOnSubmit||rp_ge[p.p.id].checkOnUpdate)&&(rp_ge[p.p.id]._savedData[f]=i),$(k).addClass(\"FormElement\"),$.inArray(this.edittype,[\"text\",\"textarea\",\"password\",\"select\"])>-1&&$(k).addClass(e.inputClass),C)$(I).find(\"#\"+f).replaceWith(k);else{if(h=$(c).find(\"tr[rowpos=\"+u+\"]\"),t.rowabove){var x=$(\"<tr><td class='contentinfo' colspan='\"+2*d+\"'>\"+t.rowcontent+\"</td></tr>\");$(c).append(x),x[0].rp=u}0===h.length&&(h=$(\"<tr \"+j+\" rowpos='\"+u+\"'></tr>\").addClass(\"FormData\").attr(\"id\",\"tr_\"+f),$(h).append(r),$(c).append(h),h[0].rp=u),$(\"td:eq(\"+(w-2)+\")\",h[0]).html(\"<label for='\"+f+\"'>\"+(void 0===t.label?b.p.colNames[l]:t.label)+\"</label>\"),$(\"td:eq(\"+(w-1)+\")\",h[0]).append(t.elmprefix).append(k).append(t.elmsuffix)}\"custom\"===this.edittype&&$.isFunction(s.custom_value)&&s.custom_value.call(p,$(\"#\"+f,v),\"set\",i),$.jgrid.bindEv.call(p,k,s),n[m]=l,m++}}),m>0){var s;C?(s=\"<div class='FormData' style='display:none'><input class='FormElement' id='id_g' type='text' name='\"+b.p.id+\"_id' value='\"+a+\"'/>\",$(I).append(s)):(s=$(\"<tr class='FormData' style='display:none'><td class='CaptionTD'></td><td colspan='\"+(2*d-1)+\"' class='DataTD'><input class='FormElement' id='id_g' type='text' name='\"+b.p.id+\"_id' value='\"+a+\"'/></td></tr>\"),s[0].rp=m+999,$(c).append(s)),(rp_ge[p.p.id].checkOnSubmit||rp_ge[p.p.id].checkOnUpdate)&&(rp_ge[p.p.id]._savedData[b.p.id+\"_id\"]=a)}return n}function g(a,b,c){var d,e,f,g,h,i,j=0;(rp_ge[p.p.id].checkOnSubmit||rp_ge[p.p.id].checkOnUpdate)&&(rp_ge[p.p.id]._savedData={},rp_ge[p.p.id]._savedData[b.p.id+\"_id\"]=a);var k=b.p.colModel;if(\"_empty\"===a)return $(k).each(function(){d=this.name,g=$.extend({},this.editoptions||{}),f=$(\"#\"+$.jgrid.jqID(d),c),f&&f.length&&null!==f[0]&&(h=\"\",\"custom\"===this.edittype&&$.isFunction(g.custom_value)?g.custom_value.call(p,$(\"#\"+d,c),\"set\",h):g.defaultValue?(h=$.isFunction(g.defaultValue)?g.defaultValue.call(p):g.defaultValue,\"checkbox\"===f[0].type?(i=h.toLowerCase(),i.search(/(false|f|0|no|n|off|undefined)/i)<0&&\"\"!==i?(f[0].checked=!0,f[0].defaultChecked=!0,f[0].value=h):(f[0].checked=!1,f[0].defaultChecked=!1)):f.val(h)):\"checkbox\"===f[0].type?(f[0].checked=!1,f[0].defaultChecked=!1,h=$(f).attr(\"offval\")):f[0].type&&\"select\"===f[0].type.substr(0,6)?f[0].selectedIndex=0:f.val(h),(rp_ge[p.p.id].checkOnSubmit===!0||rp_ge[p.p.id].checkOnUpdate)&&(rp_ge[p.p.id]._savedData[d]=h))}),void $(\"#id_g\",c).val(a);var l=$(b).jqGrid(\"getInd\",a,!0);l&&($('td[role=\"gridcell\"]',l).each(function(f){if(d=k[f].name,\"cb\"!==d&&\"subgrid\"!==d&&\"rn\"!==d&&k[f].editable===!0){if(d===b.p.ExpandColumn&&b.p.treeGrid===!0)e=$(this).text();else try{e=$.unformat.call(b,$(this),{rowId:a,colModel:k[f]},f)}catch(g){e=\"textarea\"===k[f].edittype?$(this).text():$(this).html()}switch(p.p.autoencode&&(e=$.jgrid.htmlDecode(e)),(rp_ge[p.p.id].checkOnSubmit===!0||rp_ge[p.p.id].checkOnUpdate)&&(rp_ge[p.p.id]._savedData[d]=e),d=$.jgrid.jqID(d),k[f].edittype){case\"password\":case\"text\":case\"button\":case\"image\":case\"textarea\":(\"&nbsp;\"===e||\"&#160;\"===e||1===e.length&&160===e.charCodeAt(0))&&(e=\"\"),$(\"#\"+d,c).val(e);break;case\"select\":var h=e.split(\",\");h=$.map(h,function(a){return $.trim(a)}),$(\"#\"+d+\" option\",c).each(function(){this.selected=k[f].editoptions.multiple||$.trim(e)!==$.trim($(this).text())&&h[0]!==$.trim($(this).text())&&h[0]!==$.trim($(this).val())?k[f].editoptions.multiple&&($.inArray($.trim($(this).text()),h)>-1||$.inArray($.trim($(this).val()),h)>-1)?!0:!1:!0}),(rp_ge[p.p.id].checkOnSubmit===!0||rp_ge[p.p.id].checkOnUpdate)&&(e=$(\"#\"+d,c).val(),k[f].editoptions.multiple&&(e=e.join(\",\")),rp_ge[p.p.id]._savedData[d]=e);break;case\"checkbox\":if(e=String(e),k[f].editoptions&&k[f].editoptions.value){var i=k[f].editoptions.value.split(\":\");$(\"#\"+d,c)[p.p.useProp?\"prop\":\"attr\"](i[0]===e?{checked:!0,defaultChecked:!0}:{checked:!1,defaultChecked:!1})}else e=e.toLowerCase(),e.search(/(false|f|0|no|n|off|undefined)/i)<0&&\"\"!==e?($(\"#\"+d,c)[p.p.useProp?\"prop\":\"attr\"](\"checked\",!0),$(\"#\"+d,c)[p.p.useProp?\"prop\":\"attr\"](\"defaultChecked\",!0)):($(\"#\"+d,c)[p.p.useProp?\"prop\":\"attr\"](\"checked\",!1),$(\"#\"+d,c)[p.p.useProp?\"prop\":\"attr\"](\"defaultChecked\",!1));(rp_ge[p.p.id].checkOnSubmit===!0||rp_ge[p.p.id].checkOnUpdate)&&(e=$(\"#\"+d,c).is(\":checked\")?$(\"#\"+d,c).val():$(\"#\"+d,c).attr(\"offval\"));break;case\"custom\":try{if(!k[f].editoptions||!$.isFunction(k[f].editoptions.custom_value))throw\"e1\";k[f].editoptions.custom_value.call(p,$(\"#\"+d,c),\"set\",e)}catch(l){\"e1\"===l?$.jgrid.info_dialog(D.errcap,\"function 'custom_value' \"+rp_ge[$(this)[0]].p.msg.nodefined,$.rp_ge[$(this)[0]].p.bClose,{styleUI:rp_ge[$(this)[0]].p.styleUI}):$.jgrid.info_dialog(D.errcap,l.message,$.rp_ge[$(this)[0]].p.bClose,{styleUI:rp_ge[$(this)[0]].p.styleUI})}}j++}}),j>0&&$(\"#id_g\",x).val(a))}function h(){$.each(p.p.colModel,function(a,b){b.editoptions&&b.editoptions.NullIfEmpty===!0&&r.hasOwnProperty(b.name)&&\"\"===r[b.name]&&(r[b.name]=\"null\")})}function i(){var a,c,d,e,i,j,k,l=[!0,\"\",\"\"],m={},n=p.p.prmNames,o=$(p).triggerHandler(\"jqGridAddEditBeforeCheckValues\",[$(v),t]);o&&\"object\"==typeof o&&(r=o),$.isFunction(rp_ge[p.p.id].beforeCheckValues)&&(o=rp_ge[p.p.id].beforeCheckValues.call(p,r,$(v),t),o&&\"object\"==typeof o&&(r=o));for(e in r)if(r.hasOwnProperty(e)&&(l=$.jgrid.checkValues.call(p,r[e],e),l[0]===!1))break;if(h(),l[0]&&(m=$(p).triggerHandler(\"jqGridAddEditClickSubmit\",[rp_ge[p.p.id],r,t]),void 0===m&&$.isFunction(rp_ge[p.p.id].onclickSubmit)&&(m=rp_ge[p.p.id].onclickSubmit.call(p,rp_ge[p.p.id],r,t)||{}),l=$(p).triggerHandler(\"jqGridAddEditBeforeSubmit\",[r,$(v),t]),void 0===l&&(l=[!0,\"\",\"\"]),l[0]&&$.isFunction(rp_ge[p.p.id].beforeSubmit)&&(l=rp_ge[p.p.id].beforeSubmit.call(p,r,$(v),t))),l[0]&&!rp_ge[p.p.id].processing){if(rp_ge[p.p.id].processing=!0,$(\"#sData\",x+\"_2\").addClass(f.active),k=rp_ge[p.p.id].url||$(p).jqGrid(\"getGridParam\",\"editurl\"),d=n.oper,c=\"clientArray\"===k?p.p.keyName:n.id,r[d]=\"_empty\"===$.trim(r[p.p.id+\"_id\"])?n.addoper:n.editoper,r[d]!==n.addoper?r[c]=r[p.p.id+\"_id\"]:void 0===r[c]&&(r[c]=r[p.p.id+\"_id\"]),delete r[p.p.id+\"_id\"],r=$.extend(r,rp_ge[p.p.id].editData,m),p.p.treeGrid===!0){if(r[d]===n.addoper){i=$(p).jqGrid(\"getGridParam\",\"selrow\");var q=\"adjacency\"===p.p.treeGridModel?p.p.treeReader.parent_id_field:\"parent_id\";r[q]=i}for(j in p.p.treeReader)if(p.p.treeReader.hasOwnProperty(j)){var s=p.p.treeReader[j];if(r.hasOwnProperty(s)){if(r[d]===n.addoper&&\"parent_id_field\"===j)continue;delete r[s]}}}r[c]=$.jgrid.stripPref(p.p.idPrefix,r[c]);var w=$.extend({url:k,type:rp_ge[p.p.id].mtype,data:$.isFunction(rp_ge[p.p.id].serializeEditData)?rp_ge[p.p.id].serializeEditData.call(p,r):r,complete:function(e,h){var j;if($(\"#sData\",x+\"_2\").removeClass(f.active),r[c]=p.p.idPrefix+r[c],e.status>=300&&304!==e.status?(l[0]=!1,l[1]=$(p).triggerHandler(\"jqGridAddEditErrorTextFormat\",[e,t]),l[1]=$.isFunction(rp_ge[p.p.id].errorTextFormat)?rp_ge[p.p.id].errorTextFormat.call(p,e,t):h+\" Status: '\"+e.statusText+\"'. Error code: \"+e.status):(l=$(p).triggerHandler(\"jqGridAddEditAfterSubmit\",[e,r,t]),void 0===l&&(l=[!0,\"\",\"\"]),l[0]&&$.isFunction(rp_ge[p.p.id].afterSubmit)&&(l=rp_ge[p.p.id].afterSubmit.call(p,e,r,t))),l[0]===!1)$(\".FormError\",v).html(l[1]),$(\".FormError\",v).show();else if(p.p.autoencode&&$.each(r,function(a,b){r[a]=$.jgrid.htmlDecode(b)}),r[d]===n.addoper?(l[2]||(l[2]=$.jgrid.randId()),null==r[c]||\"_empty\"===r[c]?r[c]=l[2]:l[2]=r[c],rp_ge[p.p.id].reloadAfterSubmit?$(p).trigger(\"reloadGrid\"):p.p.treeGrid===!0?$(p).jqGrid(\"addChildNode\",l[2],i,r):$(p).jqGrid(\"addRowData\",l[2],r,b.addedrow),rp_ge[p.p.id].closeAfterAdd?(p.p.treeGrid!==!0&&$(p).jqGrid(\"setSelection\",l[2]),$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form})):rp_ge[p.p.id].clearAfterAdd&&g(\"_empty\",p,v)):(rp_ge[p.p.id].reloadAfterSubmit?($(p).trigger(\"reloadGrid\"),rp_ge[p.p.id].closeAfterEdit||setTimeout(function(){$(p).jqGrid(\"setSelection\",r[c])},1e3)):p.p.treeGrid===!0?$(p).jqGrid(\"setTreeRow\",r[c],r):$(p).jqGrid(\"setRowData\",r[c],r),rp_ge[p.p.id].closeAfterEdit&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form})),$.isFunction(rp_ge[p.p.id].afterComplete)&&(a=e,setTimeout(function(){$(p).triggerHandler(\"jqGridAddEditAfterComplete\",[a,r,$(v),t]),rp_ge[p.p.id].afterComplete.call(p,a,r,$(v),t),a=null},500)),(rp_ge[p.p.id].checkOnSubmit||rp_ge[p.p.id].checkOnUpdate)&&($(v).data(\"disabled\",!1),\"_empty\"!==rp_ge[p.p.id]._savedData[p.p.id+\"_id\"]))for(j in rp_ge[p.p.id]._savedData)rp_ge[p.p.id]._savedData.hasOwnProperty(j)&&r[j]&&(rp_ge[p.p.id]._savedData[j]=r[j]);rp_ge[p.p.id].processing=!1;try{$(\":input:visible\",v)[0].focus()}catch(k){}}},$.jgrid.ajaxOptions,rp_ge[p.p.id].ajaxEditOptions);if(w.url||rp_ge[p.p.id].useDataProxy||($.isFunction(p.p.dataProxy)?rp_ge[p.p.id].useDataProxy=!0:(l[0]=!1,l[1]+=\" \"+D.nourl)),l[0])if(rp_ge[p.p.id].useDataProxy){var z=p.p.dataProxy.call(p,w,\"set_\"+p.p.id);void 0===z&&(z=[!0,\"\"]),z[0]===!1?(l[0]=!1,l[1]=z[1]||\"Error deleting the selected row!\"):(w.data.oper===n.addoper&&rp_ge[p.p.id].closeAfterAdd&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),w.data.oper===n.editoper&&rp_ge[p.p.id].closeAfterEdit&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}))}else\"clientArray\"===w.url?(rp_ge[p.p.id].reloadAfterSubmit=!1,r=w.data,w.complete({status:200,statusText:\"\"},\"\")):$.ajax(w)}l[0]===!1&&($(\".FormError\",v).html(l[1]),$(\".FormError\",v).show())}function j(a,b){var c,d=!1;for(c in a)if(a.hasOwnProperty(c)&&a[c]!=b[c]){d=!0;break}return d}function k(){var a=!0;return $(\".FormError\",v).hide(),rp_ge[p.p.id].checkOnUpdate&&(r={},c(),s=j(r,rp_ge[p.p.id]._savedData),s&&($(v).data(\"disabled\",!0),$(\".confirm\",\"#\"+y.themodal).show(),a=!1)),a}function l(){var b;if(\"_empty\"!==a&&void 0!==p.p.savedRow&&p.p.savedRow.length>0&&$.isFunction($.fn.jqGrid.restoreRow))for(b=0;b<p.p.savedRow.length;b++)if(p.p.savedRow[b].id===a){$(p).jqGrid(\"restoreRow\",a);break}}function m(a,b){var c=b[1].length-1;0===a?$(\"#pData\",q).addClass(f.disabled):void 0!==b[1][a-1]&&$(\"#\"+$.jgrid.jqID(b[1][a-1])).hasClass(f.disabled)?$(\"#pData\",q).addClass(f.disabled):$(\"#pData\",q).removeClass(f.disabled),a===c?$(\"#nData\",q).addClass(f.disabled):void 0!==b[1][a+1]&&$(\"#\"+$.jgrid.jqID(b[1][a+1])).hasClass(f.disabled)?$(\"#nData\",q).addClass(f.disabled):$(\"#nData\",q).removeClass(f.disabled)}function n(){var a=$(p).jqGrid(\"getDataIDs\"),b=$(\"#id_g\",x).val(),c=$.inArray(b,a);return[c,a]}function o(a){var b=\"\";return\"string\"==typeof a&&(b=a.replace(/\\{([\\w\\-]+)(?:\\:([\\w\\.]*)(?:\\((.*?)?\\))?)?\\}/g,function(a,b){return'<span id=\"'+b+'\" ></span>'})),b}var p=this;if(p.grid&&a){var q,r,s,t,u=p.p.id,v=\"FrmGrid_\"+u,w=\"TblGrid_\"+u,x=\"#\"+$.jgrid.jqID(w),y={themodal:\"editmod\"+u,modalhead:\"edithd\"+u,modalcontent:\"editcnt\"+u,scrollelm:v},z=!0,A=1,B=0,C=\"string\"==typeof rp_ge[p.p.id].template&&rp_ge[p.p.id].template.length>0,D=$.jgrid.getRegional(this,\"errors\");rp_ge[p.p.id].styleUI=p.p.styleUI||\"jQueryUI\",$.jgrid.isMobile()&&(rp_ge[p.p.id].resize=!1),\"new\"===a?(a=\"_empty\",t=\"add\",b.caption=rp_ge[p.p.id].addCaption):(b.caption=rp_ge[p.p.id].editCaption,t=\"edit\"),b.recreateForm||$(p).data(\"formProp\")&&$.extend(rp_ge[$(this)[0].p.id],$(p).data(\"formProp\"));var E=!0;b.checkOnUpdate&&b.jqModal&&!b.modal&&(E=!1);var F,G=isNaN(rp_ge[$(this)[0].p.id].dataheight)?rp_ge[$(this)[0].p.id].dataheight:rp_ge[$(this)[0].p.id].dataheight+\"px\",H=isNaN(rp_ge[$(this)[0].p.id].datawidth)?rp_ge[$(this)[0].p.id].datawidth:rp_ge[$(this)[0].p.id].datawidth+\"px\",I=$(\"<form name='FormPost' id='\"+v+\"' class='FormGrid' onSubmit='return false;' style='width:\"+H+\";height:\"+G+\";'></form>\").data(\"disabled\",!1);if(C?(F=o(rp_ge[$(this)[0].p.id].template),q=x):(F=$(\"<table id='\"+w+\"' class='EditTable ui-common-table'><tbody></tbody></table>\"),q=x+\"_2\"),v=\"#\"+$.jgrid.jqID(v),$(I).append(\"<div class='FormError \"+f.error+\"' style='display:none;'></div>\"),$(I).append(\"<div class='tinfo topinfo'>\"+rp_ge[p.p.id].topinfo+\"</div>\"),$(p.p.colModel).each(function(){var a=this.formoptions;A=Math.max(A,a?a.colpos||0:0),B=Math.max(B,a?a.rowpos||0:0)}),$(I).append(F),z=$(p).triggerHandler(\"jqGridAddEditBeforeInitData\",[I,t]),void 0===z&&(z=!0),z&&$.isFunction(rp_ge[p.p.id].beforeInitData)&&(z=rp_ge[p.p.id].beforeInitData.call(p,I,t)),z!==!1){l(),d(a,p,F,A);var J=\"rtl\"===p.p.direction?!0:!1,K=J?\"nData\":\"pData\",L=J?\"pData\":\"nData\",M=\"<a id='\"+K+\"' class='fm-button \"+f.button+\"'><span class='\"+f.icon_base+\" \"+e.icon_prev+\"'></span></a>\",N=\"<a id='\"+L+\"' class='fm-button \"+f.button+\"'><span class='\"+f.icon_base+\" \"+e.icon_next+\"'></span></a>\",O=\"<a id='sData' class='fm-button \"+f.button+\"'>\"+b.bSubmit+\"</a>\",P=\"<a id='cData' class='fm-button \"+f.button+\"'>\"+b.bCancel+\"</a>\",Q=\"<table style='height:auto' class='EditTable ui-common-table' id='\"+w+\"_2'><tbody><tr><td colspan='2'><hr class='\"+f.content+\"' style='margin:1px'/></td></tr><tr id='Act_Buttons'><td class='navButton'>\"+(J?N+M:M+N)+\"</td><td class='EditButton'>\"+O+P+\"</td></tr>\";if(Q+=\"</tbody></table>\",B>0){var R=[];$.each($(F)[0].rows,function(a,b){R[a]=b}),R.sort(function(a,b){return a.rp>b.rp?1:a.rp<b.rp?-1:0}),$.each(R,function(a,b){$(\"tbody\",F).append(b)})}b.gbox=\"#gbox_\"+$.jgrid.jqID(u);var S=!1;b.closeOnEscape===!0&&(b.closeOnEscape=!1,S=!0);var T;if(C?($(I).find(\"#pData\").replaceWith(M),$(I).find(\"#nData\").replaceWith(N),$(I).find(\"#sData\").replaceWith(O),$(I).find(\"#cData\").replaceWith(P),T=$(\"<div id=\"+w+\"></div>\").append(I)):T=$(\"<div></div>\").append(I).append(Q),$(I).append(\"<div class='binfo topinfo bottominfo'>\"+rp_ge[p.p.id].bottominfo+\"</div>\"),$.jgrid.createModal(y,T,rp_ge[$(this)[0].p.id],\"#gview_\"+$.jgrid.jqID(p.p.id),$(\"#gbox_\"+$.jgrid.jqID(p.p.id))[0]),J&&($(\"#pData, #nData\",x+\"_2\").css(\"float\",\"right\"),$(\".EditButton\",x+\"_2\").css(\"text-align\",\"left\")),rp_ge[p.p.id].topinfo&&$(\".tinfo\",v).show(),rp_ge[p.p.id].bottominfo&&$(\".binfo\",v).show(),T=null,Q=null,$(\"#\"+$.jgrid.jqID(y.themodal)).keydown(function(a){var c=a.target;if($(v).data(\"disabled\")===!0)return!1;if(rp_ge[p.p.id].savekey[0]===!0&&a.which===rp_ge[p.p.id].savekey[1]&&\"TEXTAREA\"!==c.tagName)return $(\"#sData\",x+\"_2\").trigger(\"click\"),!1;if(27===a.which)return k()?(S&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:b.gbox,jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),!1):!1;if(rp_ge[p.p.id].navkeys[0]===!0){if(\"_empty\"===$(\"#id_g\",x).val())return!0;if(a.which===rp_ge[p.p.id].navkeys[1])return $(\"#pData\",q).trigger(\"click\"),!1;if(a.which===rp_ge[p.p.id].navkeys[2])return $(\"#nData\",q).trigger(\"click\"),!1}}),b.checkOnUpdate&&($(\"a.ui-jqdialog-titlebar-close span\",\"#\"+$.jgrid.jqID(y.themodal)).removeClass(\"jqmClose\"),$(\"a.ui-jqdialog-titlebar-close\",\"#\"+$.jgrid.jqID(y.themodal)).unbind(\"click\").click(function(){return k()?($.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),!1):!1})),b.saveicon=$.extend([!0,\"left\",e.icon_save],b.saveicon),b.closeicon=$.extend([!0,\"left\",e.icon_close],b.closeicon),b.saveicon[0]===!0&&$(\"#sData\",q).addClass(\"right\"===b.saveicon[1]?\"fm-button-icon-right\":\"fm-button-icon-left\").append(\"<span class='\"+f.icon_base+\" \"+b.saveicon[2]+\"'></span>\"),b.closeicon[0]===!0&&$(\"#cData\",q).addClass(\"right\"===b.closeicon[1]?\"fm-button-icon-right\":\"fm-button-icon-left\").append(\"<span class='\"+f.icon_base+\" \"+b.closeicon[2]+\"'></span>\"),rp_ge[p.p.id].checkOnSubmit||rp_ge[p.p.id].checkOnUpdate){O=\"<a id='sNew' class='fm-button \"+f.button+\"' style='z-index:1002'>\"+b.bYes+\"</a>\",N=\"<a id='nNew' class='fm-button \"+f.button+\"' style='z-index:1002;margin-left:5px'>\"+b.bNo+\"</a>\",P=\"<a id='cNew' class='fm-button \"+f.button+\"' style='z-index:1002;margin-left:5px;'>\"+b.bExit+\"</a>\";var U=b.zIndex||999;U++,$(\"<div class='\"+b.overlayClass+\" jqgrid-overlay confirm' style='z-index:\"+U+\";display:none;'>&#160;</div><div class='confirm ui-jqconfirm \"+f.content+\"' style='z-index:\"+(U+1)+\"'>\"+b.saveData+\"<br/><br/>\"+O+N+P+\"</div>\").insertAfter(v),$(\"#sNew\",\"#\"+$.jgrid.jqID(y.themodal)).click(function(){return i(),$(v).data(\"disabled\",!1),$(\".confirm\",\"#\"+$.jgrid.jqID(y.themodal)).hide(),!1}),$(\"#nNew\",\"#\"+$.jgrid.jqID(y.themodal)).click(function(){return $(\".confirm\",\"#\"+$.jgrid.jqID(y.themodal)).hide(),$(v).data(\"disabled\",!1),setTimeout(function(){$(\":input:visible\",v)[0].focus()},0),!1}),$(\"#cNew\",\"#\"+$.jgrid.jqID(y.themodal)).click(function(){return $(\".confirm\",\"#\"+$.jgrid.jqID(y.themodal)).hide(),$(v).data(\"disabled\",!1),$.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),!1})}$(p).triggerHandler(\"jqGridAddEditInitializeForm\",[$(v),t]),$.isFunction(rp_ge[p.p.id].onInitializeForm)&&rp_ge[p.p.id].onInitializeForm.call(p,$(v),t),\"_empty\"!==a&&rp_ge[p.p.id].viewPagerButtons?$(\"#pData,#nData\",q).show():$(\"#pData,#nData\",q).hide(),$(p).triggerHandler(\"jqGridAddEditBeforeShowForm\",[$(v),t]),$.isFunction(rp_ge[p.p.id].beforeShowForm)&&rp_ge[p.p.id].beforeShowForm.call(p,$(v),t),$(\"#\"+$.jgrid.jqID(y.themodal)).data(\"onClose\",rp_ge[p.p.id].onClose),$.jgrid.viewModal(\"#\"+$.jgrid.jqID(y.themodal),{gbox:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,overlay:b.overlay,modal:b.modal,overlayClass:b.overlayClass,focusField:b.focusField,onHide:function(a){var b=$(\"#editmod\"+u)[0].style.height,c=$(\"#editmod\"+u)[0].style.width;b.indexOf(\"px\")>-1&&(b=parseFloat(b)),c.indexOf(\"px\")>-1&&(c=parseFloat(c)),$(p).data(\"formProp\",{top:parseFloat($(a.w).css(\"top\")),left:parseFloat($(a.w).css(\"left\")),width:c,height:b,dataheight:$(v).height(),datawidth:$(v).width()}),a.w.remove(),a.o&&a.o.remove()}}),E||$(\".\"+$.jgrid.jqID(b.overlayClass)).click(function(){return k()?($.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),!1):!1}),$(\".fm-button\",\"#\"+$.jgrid.jqID(y.themodal)).hover(function(){$(this).addClass(f.hover)},function(){$(this).removeClass(f.hover)}),$(\"#sData\",q).click(function(){return r={},$(\".FormError\",v).hide(),c(),\"_empty\"===r[p.p.id+\"_id\"]?i():b.checkOnSubmit===!0?(s=j(r,rp_ge[p.p.id]._savedData),s?($(v).data(\"disabled\",!0),$(\".confirm\",\"#\"+$.jgrid.jqID(y.themodal)).show()):i()):i(),!1}),$(\"#cData\",q).click(function(){return k()?($.jgrid.hideModal(\"#\"+$.jgrid.jqID(y.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(u),jqm:b.jqModal,onClose:rp_ge[p.p.id].onClose,removemodal:rp_ge[p.p.id].removemodal,formprop:!rp_ge[p.p.id].recreateForm,form:rp_ge[p.p.id].form}),!1):!1}),$(\"#nData\",q).click(function(){if(!k())return!1;$(\".FormError\",v).hide();var a=n();if(a[0]=parseInt(a[0],10),-1!==a[0]&&a[1][a[0]+1]){$(p).triggerHandler(\"jqGridAddEditClickPgButtons\",[\"next\",$(v),a[1][a[0]]]);var c;if($.isFunction(b.onclickPgButtons)&&(c=b.onclickPgButtons.call(p,\"next\",$(v),a[1][a[0]]),void 0!==c&&c===!1))return!1;if($(\"#\"+$.jgrid.jqID(a[1][a[0]+1])).hasClass(f.disabled))return!1;g(a[1][a[0]+1],p,v),$(p).jqGrid(\"setSelection\",a[1][a[0]+1]),$(p).triggerHandler(\"jqGridAddEditAfterClickPgButtons\",[\"next\",$(v),a[1][a[0]]]),$.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons.call(p,\"next\",$(v),a[1][a[0]+1]),m(a[0]+1,a)}return!1}),$(\"#pData\",q).click(function(){if(!k())return!1;$(\".FormError\",v).hide();var a=n();if(-1!==a[0]&&a[1][a[0]-1]){$(p).triggerHandler(\"jqGridAddEditClickPgButtons\",[\"prev\",$(v),a[1][a[0]]]);var c;if($.isFunction(b.onclickPgButtons)&&(c=b.onclickPgButtons.call(p,\"prev\",$(v),a[1][a[0]]),void 0!==c&&c===!1))return!1;if($(\"#\"+$.jgrid.jqID(a[1][a[0]-1])).hasClass(f.disabled))return!1;g(a[1][a[0]-1],p,v),$(p).jqGrid(\"setSelection\",a[1][a[0]-1]),$(p).triggerHandler(\"jqGridAddEditAfterClickPgButtons\",[\"prev\",$(v),a[1][a[0]]]),$.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons.call(p,\"prev\",$(v),a[1][a[0]-1]),m(a[0]-1,a)}return!1}),$(p).triggerHandler(\"jqGridAddEditAfterShowForm\",[$(v),t]),$.isFunction(rp_ge[p.p.id].afterShowForm)&&rp_ge[p.p.id].afterShowForm.call(p,$(v),t);var V=n();m(V[0],V)}}})},viewGridRow:function(a,b){var c=$.jgrid.getRegional(this[0],\"view\"),d=this[0].p.styleUI,e=$.jgrid.styleUI[d].formedit,f=$.jgrid.styleUI[d].common;return b=$.extend(!0,{top:0,left:0,width:500,datawidth:\"auto\",height:\"auto\",dataheight:\"auto\",modal:!1,overlay:30,drag:!0,resize:!0,jqModal:!0,closeOnEscape:!1,labelswidth:\"30%\",closeicon:[],navkeys:[!1,38,40],onClose:null,beforeShowForm:null,beforeInitData:null,viewPagerButtons:!0,recreateForm:!1,removemodal:!0,form:\"view\"},c,b||{}),rp_ge[$(this)[0].p.id]=b,this.each(function(){function c(){(rp_ge[j.p.id].closeOnEscape===!0||rp_ge[j.p.id].navkeys[0]===!0)&&setTimeout(function(){$(\".ui-jqdialog-titlebar-close\",\"#\"+$.jgrid.jqID(p.modalhead)).attr(\"tabindex\",\"-1\").focus()},0)}function d(a,c,d,e){var g,h,i,j,k,l,m,n,o,p=0,q=[],r=!1,s=\"<td class='CaptionTD form-view-label \"+f.content+\"' width='\"+b.labelswidth+\"'>&#160;</td><td class='DataTD form-view-data ui-helper-reset \"+f.content+\"'>&#160;</td>\",t=\"\",u=\"<td class='CaptionTD form-view-label \"+f.content+\"'>&#160;</td><td class='DataTD form-view-data \"+f.content+\"'>&#160;</td>\",v=[\"integer\",\"number\",\"currency\"],w=0,x=0;for(l=1;e>=l;l++)t+=1===l?s:u;if($(c.p.colModel).each(function(){h=this.editrules&&this.editrules.edithidden===!0?!1:this.hidden===!0?!0:!1,h||\"right\"!==this.align||(this.formatter&&-1!==$.inArray(this.formatter,v)?w=Math.max(w,parseInt(this.width,10)):x=Math.max(x,parseInt(this.width,10)))}),m=0!==w?w:0!==x?x:0,r=$(c).jqGrid(\"getInd\",a),$(c.p.colModel).each(function(a){if(g=this.name,n=!1,h=this.editrules&&this.editrules.edithidden===!0?!1:this.hidden===!0?!0:!1,k=h?\"style='display:none'\":\"\",o=\"boolean\"!=typeof this.viewable?!0:this.viewable,\"cb\"!==g&&\"subgrid\"!==g&&\"rn\"!==g&&o){j=r===!1?\"\":g===c.p.ExpandColumn&&c.p.treeGrid===!0?$(\"td:eq(\"+a+\")\",c.rows[r]).text():$(\"td:eq(\"+a+\")\",c.rows[r]).html(),n=\"right\"===this.align&&0!==m?!0:!1;var b=$.extend({},{rowabove:!1,rowcontent:\"\"},this.formoptions||{}),f=parseInt(b.rowpos,10)||p+1,l=parseInt(2*(parseInt(b.colpos,10)||1),10);if(b.rowabove){var s=$(\"<tr><td class='contentinfo' colspan='\"+2*e+\"'>\"+b.rowcontent+\"</td></tr>\");$(d).append(s),s[0].rp=f}i=$(d).find(\"tr[rowpos=\"+f+\"]\"),0===i.length&&(i=$(\"<tr \"+k+\" rowpos='\"+f+\"'></tr>\").addClass(\"FormData\").attr(\"id\",\"trv_\"+g),$(i).append(t),$(d).append(i),i[0].rp=f),$(\"td:eq(\"+(l-2)+\")\",i[0]).html(\"<b>\"+(void 0===b.label?c.p.colNames[a]:b.label)+\"</b>\"),$(\"td:eq(\"+(l-1)+\")\",i[0]).append(\"<span>\"+j+\"</span>\").attr(\"id\",\"v_\"+g),n&&$(\"td:eq(\"+(l-1)+\") span\",i[0]).css({\"text-align\":\"right\",width:m+\"px\"}),q[p]=a,p++}}),p>0){var y=$(\"<tr class='FormData' style='display:none'><td class='CaptionTD'></td><td colspan='\"+(2*e-1)+\"' class='DataTD'><input class='FormElement' id='id_g' type='text' name='id' value='\"+a+\"'/></td></tr>\");y[0].rp=p+99,$(d).append(y)}return q}function g(a,b){var c,d,e,f,g=0;f=$(b).jqGrid(\"getInd\",a,!0),f&&($(\"td\",f).each(function(a){c=b.p.colModel[a].name,d=b.p.colModel[a].editrules&&b.p.colModel[a].editrules.edithidden===!0?!1:b.p.colModel[a].hidden===!0?!0:!1,\"cb\"!==c&&\"subgrid\"!==c&&\"rn\"!==c&&(e=c===b.p.ExpandColumn&&b.p.treeGrid===!0?$(this).text():$(this).html(),c=$.jgrid.jqID(\"v_\"+c),$(\"#\"+c+\" span\",\"#\"+m).html(e),d&&$(\"#\"+c,\"#\"+m).parents(\"tr:first\").hide(),g++)}),g>0&&$(\"#id_g\",\"#\"+m).val(a))}function h(a,b){var c=b[1].length-1;0===a?$(\"#pData\",\"#\"+m+\"_2\").addClass(f.disabled):void 0!==b[1][a-1]&&$(\"#\"+$.jgrid.jqID(b[1][a-1])).hasClass(f.disabled)?$(\"#pData\",m+\"_2\").addClass(f.disabled):$(\"#pData\",\"#\"+m+\"_2\").removeClass(f.disabled),a===c?$(\"#nData\",\"#\"+m+\"_2\").addClass(f.disabled):void 0!==b[1][a+1]&&$(\"#\"+$.jgrid.jqID(b[1][a+1])).hasClass(f.disabled)?$(\"#nData\",m+\"_2\").addClass(f.disabled):$(\"#nData\",\"#\"+m+\"_2\").removeClass(f.disabled)}function i(){var a=$(j).jqGrid(\"getDataIDs\"),b=$(\"#id_g\",\"#\"+m).val(),c=$.inArray(b,a);return[c,a]}var j=this;if(j.grid&&a){var k=j.p.id,l=\"ViewGrid_\"+$.jgrid.jqID(k),m=\"ViewTbl_\"+$.jgrid.jqID(k),n=\"ViewGrid_\"+k,o=\"ViewTbl_\"+k,p={themodal:\"viewmod\"+k,modalhead:\"viewhd\"+k,modalcontent:\"viewcnt\"+k,scrollelm:l},q=$.isFunction(rp_ge[j.p.id].beforeInitData)?rp_ge[j.p.id].beforeInitData:!1,r=!0,s=1,t=0;rp_ge[j.p.id].styleUI=j.p.styleUI||\"jQueryUI\",b.recreateForm||$(j).data(\"viewProp\")&&$.extend(rp_ge[$(this)[0].p.id],$(j).data(\"viewProp\"));var u=isNaN(rp_ge[$(this)[0].p.id].dataheight)?rp_ge[$(this)[0].p.id].dataheight:rp_ge[$(this)[0].p.id].dataheight+\"px\",v=isNaN(rp_ge[$(this)[0].p.id].datawidth)?rp_ge[$(this)[0].p.id].datawidth:rp_ge[$(this)[0].p.id].datawidth+\"px\",w=$(\"<form name='FormPost' id='\"+n+\"' class='FormGrid' style='width:\"+v+\";height:\"+u+\";'></form>\"),x=$(\"<table id='\"+o+\"' class='EditTable ViewTable'><tbody></tbody></table>\");if($(j.p.colModel).each(function(){var a=this.formoptions;s=Math.max(s,a?a.colpos||0:0),t=Math.max(t,a?a.rowpos||0:0)}),$(w).append(x),q&&(r=q.call(j,w),void 0===r&&(r=!0)),r!==!1){d(a,j,x,s);var y=\"rtl\"===j.p.direction?!0:!1,z=y?\"nData\":\"pData\",A=y?\"pData\":\"nData\",B=\"<a id='\"+z+\"' class='fm-button \"+f.button+\"'><span class='\"+f.icon_base+\" \"+e.icon_prev+\"'></span></a>\",C=\"<a id='\"+A+\"' class='fm-button \"+f.button+\"'><span class='\"+f.icon_base+\" \"+e.icon_next+\"'></span></a>\",D=\"<a id='cData' class='fm-button \"+f.button+\"'>\"+b.bClose+\"</a>\";if(t>0){var E=[];$.each($(x)[0].rows,function(a,b){E[a]=b}),E.sort(function(a,b){return a.rp>b.rp?1:a.rp<b.rp?-1:0}),$.each(E,function(a,b){$(\"tbody\",x).append(b)})}b.gbox=\"#gbox_\"+$.jgrid.jqID(k);var F=$(\"<div></div>\").append(w).append(\"<table border='0' class='EditTable' id='\"+m+\"_2'><tbody><tr id='Act_Buttons'><td class='navButton' width='\"+b.labelswidth+\"'>\"+(y?C+B:B+C)+\"</td><td class='EditButton'>\"+D+\"</td></tr></tbody></table>\");$.jgrid.createModal(p,F,rp_ge[$(this)[0].p.id],\"#gview_\"+$.jgrid.jqID(j.p.id),$(\"#gview_\"+$.jgrid.jqID(j.p.id))[0]),y&&($(\"#pData, #nData\",\"#\"+m+\"_2\").css(\"float\",\"right\"),$(\".EditButton\",\"#\"+m+\"_2\").css(\"text-align\",\"left\")),b.viewPagerButtons||$(\"#pData, #nData\",\"#\"+m+\"_2\").hide(),F=null,$(\"#\"+p.themodal).keydown(function(a){if(27===a.which)return rp_ge[j.p.id].closeOnEscape&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(p.themodal),{gb:b.gbox,jqm:b.jqModal,onClose:b.onClose,removemodal:rp_ge[j.p.id].removemodal,formprop:!rp_ge[j.p.id].recreateForm,form:rp_ge[j.p.id].form}),!1;\nif(b.navkeys[0]===!0){if(a.which===b.navkeys[1])return $(\"#pData\",\"#\"+m+\"_2\").trigger(\"click\"),!1;if(a.which===b.navkeys[2])return $(\"#nData\",\"#\"+m+\"_2\").trigger(\"click\"),!1}}),b.closeicon=$.extend([!0,\"left\",e.icon_close],b.closeicon),b.closeicon[0]===!0&&$(\"#cData\",\"#\"+m+\"_2\").addClass(\"right\"===b.closeicon[1]?\"fm-button-icon-right\":\"fm-button-icon-left\").append(\"<span class='\"+f.icon_base+\" \"+b.closeicon[2]+\"'></span>\"),$.isFunction(b.beforeShowForm)&&b.beforeShowForm.call(j,$(\"#\"+l)),$.jgrid.viewModal(\"#\"+$.jgrid.jqID(p.themodal),{gbox:\"#gbox_\"+$.jgrid.jqID(k),jqm:b.jqModal,overlay:b.overlay,modal:b.modal,onHide:function(a){$(j).data(\"viewProp\",{top:parseFloat($(a.w).css(\"top\")),left:parseFloat($(a.w).css(\"left\")),width:$(a.w).width(),height:$(a.w).height(),dataheight:$(\"#\"+l).height(),datawidth:$(\"#\"+l).width()}),a.w.remove(),a.o&&a.o.remove()}}),$(\".fm-button:not(.\"+f.disabled+\")\",\"#\"+m+\"_2\").hover(function(){$(this).addClass(f.hover)},function(){$(this).removeClass(f.hover)}),c(),$(\"#cData\",\"#\"+m+\"_2\").click(function(){return $.jgrid.hideModal(\"#\"+$.jgrid.jqID(p.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(k),jqm:b.jqModal,onClose:b.onClose,removemodal:rp_ge[j.p.id].removemodal,formprop:!rp_ge[j.p.id].recreateForm,form:rp_ge[j.p.id].form}),!1}),$(\"#nData\",\"#\"+m+\"_2\").click(function(){$(\"#FormError\",\"#\"+m).hide();var a=i();return a[0]=parseInt(a[0],10),-1!==a[0]&&a[1][a[0]+1]&&($.isFunction(b.onclickPgButtons)&&b.onclickPgButtons.call(j,\"next\",$(\"#\"+l),a[1][a[0]]),g(a[1][a[0]+1],j),$(j).jqGrid(\"setSelection\",a[1][a[0]+1]),$.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons.call(j,\"next\",$(\"#\"+l),a[1][a[0]+1]),h(a[0]+1,a)),c(),!1}),$(\"#pData\",\"#\"+m+\"_2\").click(function(){$(\"#FormError\",\"#\"+m).hide();var a=i();return-1!==a[0]&&a[1][a[0]-1]&&($.isFunction(b.onclickPgButtons)&&b.onclickPgButtons.call(j,\"prev\",$(\"#\"+l),a[1][a[0]]),g(a[1][a[0]-1],j),$(j).jqGrid(\"setSelection\",a[1][a[0]-1]),$.isFunction(b.afterclickPgButtons)&&b.afterclickPgButtons.call(j,\"prev\",$(\"#\"+l),a[1][a[0]-1]),h(a[0]-1,a)),c(),!1});var G=i();h(G[0],G)}}})},delGridRow:function(a,b){var c=$.jgrid.getRegional(this[0],\"del\"),d=this[0].p.styleUI,e=$.jgrid.styleUI[d].formedit,f=$.jgrid.styleUI[d].common;return b=$.extend(!0,{top:0,left:0,width:240,height:\"auto\",dataheight:\"auto\",modal:!1,overlay:30,drag:!0,resize:!0,url:\"\",mtype:\"POST\",reloadAfterSubmit:!0,beforeShowForm:null,beforeInitData:null,afterShowForm:null,beforeSubmit:null,onclickSubmit:null,afterSubmit:null,jqModal:!0,closeOnEscape:!1,delData:{},delicon:[],cancelicon:[],onClose:null,ajaxDelOptions:{},processing:!1,serializeDelData:null,useDataProxy:!1},c,b||{}),rp_ge[$(this)[0].p.id]=b,this.each(function(){var c=this;if(c.grid&&a){var d,g,h,i,j=$.isFunction(rp_ge[c.p.id].beforeShowForm),k=$.isFunction(rp_ge[c.p.id].afterShowForm),l=$.isFunction(rp_ge[c.p.id].beforeInitData)?rp_ge[c.p.id].beforeInitData:!1,m=c.p.id,n={},o=!0,p=\"DelTbl_\"+$.jgrid.jqID(m),q=\"DelTbl_\"+m,r={themodal:\"delmod\"+m,modalhead:\"delhd\"+m,modalcontent:\"delcnt\"+m,scrollelm:p};if(rp_ge[c.p.id].styleUI=c.p.styleUI||\"jQueryUI\",$.isArray(a)&&(a=a.join()),void 0!==$(\"#\"+$.jgrid.jqID(r.themodal))[0]){if(l&&(o=l.call(c,$(\"#\"+p)),void 0===o&&(o=!0)),o===!1)return;$(\"#DelData>td\",\"#\"+p).text(a),$(\"#DelError\",\"#\"+p).hide(),rp_ge[c.p.id].processing===!0&&(rp_ge[c.p.id].processing=!1,$(\"#dData\",\"#\"+p).removeClass(f.active)),j&&rp_ge[c.p.id].beforeShowForm.call(c,$(\"#\"+p)),$.jgrid.viewModal(\"#\"+$.jgrid.jqID(r.themodal),{gbox:\"#gbox_\"+$.jgrid.jqID(m),jqm:rp_ge[c.p.id].jqModal,jqM:!1,overlay:rp_ge[c.p.id].overlay,modal:rp_ge[c.p.id].modal}),k&&rp_ge[c.p.id].afterShowForm.call(c,$(\"#\"+p))}else{var s=isNaN(rp_ge[c.p.id].dataheight)?rp_ge[c.p.id].dataheight:rp_ge[c.p.id].dataheight+\"px\",t=isNaN(b.datawidth)?b.datawidth:b.datawidth+\"px\",u=\"<div id='\"+q+\"' class='formdata' style='width:\"+t+\";overflow:auto;position:relative;height:\"+s+\";'>\";u+=\"<table class='DelTable'><tbody>\",u+=\"<tr id='DelError' style='display:none'><td class='\"+f.error+\"'></td></tr>\",u+=\"<tr id='DelData' style='display:none'><td >\"+a+\"</td></tr>\",u+='<tr><td class=\"delmsg\" style=\"white-space:pre;\">'+rp_ge[c.p.id].msg+\"</td></tr><tr><td >&#160;</td></tr>\",u+=\"</tbody></table></div>\";var v=\"<a id='dData' class='fm-button \"+f.button+\"'>\"+b.bSubmit+\"</a>\",w=\"<a id='eData' class='fm-button \"+f.button+\"'>\"+b.bCancel+\"</a>\";if(u+=\"<table class='EditTable ui-common-table' id='\"+p+\"_2'><tbody><tr><td><hr class='\"+f.content+\"' style='margin:1px'/></td></tr><tr><td class='DelButton EditButton'>\"+v+\"&#160;\"+w+\"</td></tr></tbody></table>\",b.gbox=\"#gbox_\"+$.jgrid.jqID(m),$.jgrid.createModal(r,u,rp_ge[c.p.id],\"#gview_\"+$.jgrid.jqID(c.p.id),$(\"#gview_\"+$.jgrid.jqID(c.p.id))[0]),l&&(o=l.call(c,$(u)),void 0===o&&(o=!0)),o===!1)return;$(\".fm-button\",\"#\"+p+\"_2\").hover(function(){$(this).addClass(f.hover)},function(){$(this).removeClass(f.hover)}),b.delicon=$.extend([!0,\"left\",e.icon_del],rp_ge[c.p.id].delicon),b.cancelicon=$.extend([!0,\"left\",e.icon_cancel],rp_ge[c.p.id].cancelicon),b.delicon[0]===!0&&$(\"#dData\",\"#\"+p+\"_2\").addClass(\"right\"===b.delicon[1]?\"fm-button-icon-right\":\"fm-button-icon-left\").append(\"<span class='\"+f.icon_base+\" \"+b.delicon[2]+\"'></span>\"),b.cancelicon[0]===!0&&$(\"#eData\",\"#\"+p+\"_2\").addClass(\"right\"===b.cancelicon[1]?\"fm-button-icon-right\":\"fm-button-icon-left\").append(\"<span class='\"+f.icon_base+\" \"+b.cancelicon[2]+\"'></span>\"),$(\"#dData\",\"#\"+p+\"_2\").click(function(){var a,e=[!0,\"\"],j=$(\"#DelData>td\",\"#\"+p).text();if(n={},$.isFunction(rp_ge[c.p.id].onclickSubmit)&&(n=rp_ge[c.p.id].onclickSubmit.call(c,rp_ge[c.p.id],j)||{}),$.isFunction(rp_ge[c.p.id].beforeSubmit)&&(e=rp_ge[c.p.id].beforeSubmit.call(c,j)),e[0]&&!rp_ge[c.p.id].processing){if(rp_ge[c.p.id].processing=!0,h=c.p.prmNames,d=$.extend({},rp_ge[c.p.id].delData,n),i=h.oper,d[i]=h.deloper,g=h.id,j=String(j).split(\",\"),!j.length)return!1;for(a in j)j.hasOwnProperty(a)&&(j[a]=$.jgrid.stripPref(c.p.idPrefix,j[a]));d[g]=j.join(),$(this).addClass(f.active);var k=$.extend({url:rp_ge[c.p.id].url||$(c).jqGrid(\"getGridParam\",\"editurl\"),type:rp_ge[c.p.id].mtype,data:$.isFunction(rp_ge[c.p.id].serializeDelData)?rp_ge[c.p.id].serializeDelData.call(c,d):d,complete:function(a,g){var h;if($(\"#dData\",\"#\"+p+\"_2\").removeClass(f.active),a.status>=300&&304!==a.status?(e[0]=!1,e[1]=$.isFunction(rp_ge[c.p.id].errorTextFormat)?rp_ge[c.p.id].errorTextFormat.call(c,a):g+\" Status: '\"+a.statusText+\"'. Error code: \"+a.status):$.isFunction(rp_ge[c.p.id].afterSubmit)&&(e=rp_ge[c.p.id].afterSubmit.call(c,a,d)),e[0]===!1)$(\"#DelError>td\",\"#\"+p).html(e[1]),$(\"#DelError\",\"#\"+p).show();else{if(rp_ge[c.p.id].reloadAfterSubmit&&\"local\"!==c.p.datatype)$(c).trigger(\"reloadGrid\");else{if(c.p.treeGrid===!0)try{$(c).jqGrid(\"delTreeNode\",c.p.idPrefix+j[0])}catch(i){}else for(h=0;h<j.length;h++)$(c).jqGrid(\"delRowData\",c.p.idPrefix+j[h]);c.p.selrow=null,c.p.selarrrow=[]}$.isFunction(rp_ge[c.p.id].afterComplete)&&setTimeout(function(){rp_ge[c.p.id].afterComplete.call(c,a,j)},500)}rp_ge[c.p.id].processing=!1,e[0]&&$.jgrid.hideModal(\"#\"+$.jgrid.jqID(r.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(m),jqm:b.jqModal,onClose:rp_ge[c.p.id].onClose})}},$.jgrid.ajaxOptions,rp_ge[c.p.id].ajaxDelOptions);if(k.url||rp_ge[c.p.id].useDataProxy||($.isFunction(c.p.dataProxy)?rp_ge[c.p.id].useDataProxy=!0:(e[0]=!1,e[1]+=\" \"+$.jgrid.getRegional(c,\"errors.nourl\"))),e[0])if(rp_ge[c.p.id].useDataProxy){var l=c.p.dataProxy.call(c,k,\"del_\"+c.p.id);void 0===l&&(l=[!0,\"\"]),l[0]===!1?(e[0]=!1,e[1]=l[1]||\"Error deleting the selected row!\"):$.jgrid.hideModal(\"#\"+$.jgrid.jqID(r.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(m),jqm:b.jqModal,onClose:rp_ge[c.p.id].onClose})}else\"clientArray\"===k.url?(d=k.data,k.complete({status:200,statusText:\"\"},\"\")):$.ajax(k)}return e[0]===!1&&($(\"#DelError>td\",\"#\"+p).html(e[1]),$(\"#DelError\",\"#\"+p).show()),!1}),$(\"#eData\",\"#\"+p+\"_2\").click(function(){return $.jgrid.hideModal(\"#\"+$.jgrid.jqID(r.themodal),{gb:\"#gbox_\"+$.jgrid.jqID(m),jqm:rp_ge[c.p.id].jqModal,onClose:rp_ge[c.p.id].onClose}),!1}),j&&rp_ge[c.p.id].beforeShowForm.call(c,$(\"#\"+p)),$.jgrid.viewModal(\"#\"+$.jgrid.jqID(r.themodal),{gbox:\"#gbox_\"+$.jgrid.jqID(m),jqm:rp_ge[c.p.id].jqModal,overlay:rp_ge[c.p.id].overlay,modal:rp_ge[c.p.id].modal}),k&&rp_ge[c.p.id].afterShowForm.call(c,$(\"#\"+p))}rp_ge[c.p.id].closeOnEscape===!0&&setTimeout(function(){$(\".ui-jqdialog-titlebar-close\",\"#\"+$.jgrid.jqID(r.modalhead)).attr(\"tabindex\",\"-1\").focus()},0)}})},navGrid:function(a,b,c,d,e,f,g){var h=$.jgrid.getRegional(this[0],\"nav\"),i=this[0].p.styleUI,j=$.jgrid.styleUI[i].navigator,k=$.jgrid.styleUI[i].common;return b=$.extend({edit:!0,editicon:j.icon_edit_nav,add:!0,addicon:j.icon_add_nav,del:!0,delicon:j.icon_del_nav,search:!0,searchicon:j.icon_search_nav,refresh:!0,refreshicon:j.icon_refresh_nav,refreshstate:\"firstpage\",view:!1,viewicon:j.icon_view_nav,position:\"left\",closeOnEscape:!0,beforeRefresh:null,afterRefresh:null,cloneToTop:!1,alertwidth:200,alertheight:\"auto\",alerttop:null,alertleft:null,alertzIndex:null,dropmenu:!1},h,b||{}),this.each(function(){if(!this.p.navGrid){var j,l,m,n={themodal:\"alertmod_\"+this.p.id,modalhead:\"alerthd_\"+this.p.id,modalcontent:\"alertcnt_\"+this.p.id},o=this;if(o.grid&&\"string\"==typeof a){$(o).data(\"navGrid\")||$(o).data(\"navGrid\",b),m=$(o).data(\"navGrid\"),o.p.force_regional&&(m=$.extend(m,h)),void 0===$(\"#\"+n.themodal)[0]&&(m.alerttop||m.alertleft||(void 0!==window.innerWidth?(m.alertleft=window.innerWidth,m.alerttop=window.innerHeight):void 0!==document.documentElement&&void 0!==document.documentElement.clientWidth&&0!==document.documentElement.clientWidth?(m.alertleft=document.documentElement.clientWidth,m.alerttop=document.documentElement.clientHeight):(m.alertleft=1024,m.alerttop=768),m.alertleft=m.alertleft/2-parseInt(m.alertwidth,10)/2,m.alerttop=m.alerttop/2-25),$.jgrid.createModal(n,\"<div>\"+m.alerttext+\"</div><span tabindex='0'><span tabindex='-1' id='jqg_alrt'></span></span>\",{gbox:\"#gbox_\"+$.jgrid.jqID(o.p.id),jqModal:!0,drag:!0,resize:!0,caption:m.alertcap,top:m.alerttop,left:m.alertleft,width:m.alertwidth,height:m.alertheight,closeOnEscape:m.closeOnEscape,zIndex:m.alertzIndex,styleUI:o.p.styleUI},\"#gview_\"+$.jgrid.jqID(o.p.id),$(\"#gbox_\"+$.jgrid.jqID(o.p.id))[0],!0));var p,q=1,r=function(){$(this).hasClass(k.disabled)||$(this).addClass(k.hover)},s=function(){$(this).removeClass(k.hover)};for(m.cloneToTop&&o.p.toppager&&(q=2),p=0;q>p;p++){var t,u,v,w=$(\"<table class='ui-pg-table navtable ui-common-table'><tbody><tr></tr></tbody></table>\"),x=\"<td class='ui-pg-button \"+k.disabled+\"' style='width:4px;'><span class='ui-separator'></span></td>\";0===p?(u=a,v=o.p.id,u===o.p.toppager&&(v+=\"_top\",q=1)):(u=o.p.toppager,v=o.p.id+\"_top\"),\"rtl\"===o.p.direction&&$(w).attr(\"dir\",\"rtl\").css(\"float\",\"right\"),d=d||{},m.add&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.addicon+\"'></span>\"+m.addtext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.addtitle||\"\",id:d.id||\"add_\"+v}).click(function(){return $(this).hasClass(k.disabled)||($.isFunction(m.addfunc)?m.addfunc.call(o):$(o).jqGrid(\"editGridRow\",\"new\",d)),!1}).hover(r,s),t=null),c=c||{},m.edit&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.editicon+\"'></span>\"+m.edittext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.edittitle||\"\",id:c.id||\"edit_\"+v}).click(function(){if(!$(this).hasClass(k.disabled)){var a=o.p.selrow;a?$.isFunction(m.editfunc)?m.editfunc.call(o,a):$(o).jqGrid(\"editGridRow\",a,c):($.jgrid.viewModal(\"#\"+n.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(o.p.id),jqm:!0}),$(\"#jqg_alrt\").focus())}return!1}).hover(r,s),t=null),g=g||{},m.view&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.viewicon+\"'></span>\"+m.viewtext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.viewtitle||\"\",id:g.id||\"view_\"+v}).click(function(){if(!$(this).hasClass(k.disabled)){var a=o.p.selrow;a?$.isFunction(m.viewfunc)?m.viewfunc.call(o,a):$(o).jqGrid(\"viewGridRow\",a,g):($.jgrid.viewModal(\"#\"+n.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(o.p.id),jqm:!0}),$(\"#jqg_alrt\").focus())}return!1}).hover(r,s),t=null),e=e||{},m.del&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.delicon+\"'></span>\"+m.deltext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.deltitle||\"\",id:e.id||\"del_\"+v}).click(function(){if(!$(this).hasClass(k.disabled)){var a;o.p.multiselect?(a=o.p.selarrrow,0===a.length&&(a=null)):a=o.p.selrow,a?$.isFunction(m.delfunc)?m.delfunc.call(o,a):$(o).jqGrid(\"delGridRow\",a,e):($.jgrid.viewModal(\"#\"+n.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(o.p.id),jqm:!0}),$(\"#jqg_alrt\").focus())}return!1}).hover(r,s),t=null),(m.add||m.edit||m.del||m.view)&&$(\"tr\",w).append(x),f=f||{},m.search&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.searchicon+\"'></span>\"+m.searchtext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.searchtitle||\"\",id:f.id||\"search_\"+v}).click(function(){return $(this).hasClass(k.disabled)||($.isFunction(m.searchfunc)?m.searchfunc.call(o,f):$(o).jqGrid(\"searchGrid\",f)),!1}).hover(r,s),f.showOnLoad&&f.showOnLoad===!0&&$(t,w).click(),t=null),m.refresh&&(t=$(\"<td class='ui-pg-button \"+k.cornerall+\"'></td>\"),$(t).append(\"<div class='ui-pg-div'><span class='\"+k.icon_base+\" \"+m.refreshicon+\"'></span>\"+m.refreshtext+\"</div>\"),$(\"tr\",w).append(t),$(t,w).attr({title:m.refreshtitle||\"\",id:\"refresh_\"+v}).click(function(){if(!$(this).hasClass(k.disabled)){$.isFunction(m.beforeRefresh)&&m.beforeRefresh.call(o),o.p.search=!1,o.p.resetsearch=!0;try{if(\"currentfilter\"!==m.refreshstate){var a=o.p.id;o.p.postData.filters=\"\";try{$(\"#fbox_\"+$.jgrid.jqID(a)).jqFilter(\"resetFilter\")}catch(b){}$.isFunction(o.clearToolbar)&&o.clearToolbar.call(o,!1)}}catch(c){}switch(m.refreshstate){case\"firstpage\":$(o).trigger(\"reloadGrid\",[{page:1}]);break;case\"current\":case\"currentfilter\":$(o).trigger(\"reloadGrid\",[{current:!0}])}$.isFunction(m.afterRefresh)&&m.afterRefresh.call(o)}return!1}).hover(r,s),t=null),l=$(\".ui-jqgrid\").css(\"font-size\")||\"11px\",$(\"body\").append(\"<div id='testpg2' class='ui-jqgrid \"+$.jgrid.styleUI[i].base.entrieBox+\"' style='font-size:\"+l+\";visibility:hidden;' ></div>\"),j=$(w).clone().appendTo(\"#testpg2\").width(),$(\"#testpg2\").remove(),o.p._nvtd&&(m.dropmenu?(w=null,$(o).jqGrid(\"_buildNavMenu\",u,v,b,c,d,e,f,g)):j>o.p._nvtd[0]?(o.p.responsive?(w=null,$(o).jqGrid(\"_buildNavMenu\",u,v,b,c,d,e,f,g)):$(u+\"_\"+m.position,u).width(j),o.p._nvtd[0]=j):$(u+\"_\"+m.position,u).append(w),o.p._nvtd[1]=j),o.p.navGrid=!0}o.p.storeNavOptions&&(o.p.navOptions=m,o.p.editOptions=c,o.p.addOptions=d,o.p.delOptions=e,o.p.searchOptions=f,o.p.viewOptions=g)}}})},navButtonAdd:function(a,b){var c=this[0].p.styleUI,d=$.jgrid.styleUI[c].navigator;return b=$.extend({caption:\"newButton\",title:\"\",buttonicon:d.icon_newbutton_nav,onClickButton:null,position:\"last\",cursor:\"pointer\"},b||{}),this.each(function(){if(this.grid){\"string\"==typeof a&&0!==a.indexOf(\"#\")&&(a=\"#\"+$.jgrid.jqID(a));var d=$(\".navtable\",a)[0],e=this,f=$.jgrid.styleUI[c].common.disabled,g=$.jgrid.styleUI[c].common.hover,h=$.jgrid.styleUI[c].common.cornerall,i=$.jgrid.styleUI[c].common.icon_base;if(d){if(b.id&&void 0!==$(\"#\"+$.jgrid.jqID(b.id),d)[0])return;var j=$(\"<td></td>\");$(j).addClass(\"ui-pg-button \"+h).append(\"NONE\"===b.buttonicon.toString().toUpperCase()?\"<div class='ui-pg-div'>\"+b.caption+\"</div>\":\"<div class='ui-pg-div'><span class='\"+i+\" \"+b.buttonicon+\"'></span>\"+b.caption+\"</div>\"),b.id&&$(j).attr(\"id\",b.id),\"first\"===b.position?0===d.rows[0].cells.length?$(\"tr\",d).append(j):$(\"tr td:eq(0)\",d).before(j):$(\"tr\",d).append(j),$(j,d).attr(\"title\",b.title||\"\").click(function(a){return $(this).hasClass(f)||$.isFunction(b.onClickButton)&&b.onClickButton.call(e,a),!1}).hover(function(){$(this).hasClass(f)||$(this).addClass(g)},function(){$(this).removeClass(g)})}else if(d=$(\".dropdownmenu\",a)[0]){var k=$(d).val(),l=b.id||$.jgrid.randId(),m=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+h+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+l+'\">'+(b.caption||b.title)+\"</a></li>\");k&&(\"first\"===b.position?$(\"#\"+k).prepend(m):$(\"#\"+k).append(m),$(m).on(\"click\",function(a){return $(this).hasClass(f)||($(\"#\"+k).hide(),$.isFunction(b.onClickButton)&&b.onClickButton.call(e,a)),!1}).find(\"a\").hover(function(){$(this).hasClass(f)||$(this).addClass(g)},function(){$(this).removeClass(g)}))}}})},navSeparatorAdd:function(a,b){var c=this[0].p.styleUI,d=$.jgrid.styleUI[c].common;return b=$.extend({sepclass:\"ui-separator\",sepcontent:\"\",position:\"last\"},b||{}),this.each(function(){if(this.grid){\"string\"==typeof a&&0!==a.indexOf(\"#\")&&(a=\"#\"+$.jgrid.jqID(a));var c,e,f=$(\".navtable\",a)[0];f?(c=\"<td class='ui-pg-button \"+d.disabled+\"' style='width:4px;'><span class='\"+b.sepclass+\"'></span>\"+b.sepcontent+\"</td>\",\"first\"===b.position?0===f.rows[0].cells.length?$(\"tr\",f).append(c):$(\"tr td:eq(0)\",f).before(c):$(\"tr\",f).append(c)):(f=$(\".dropdownmenu\",a)[0],c=\"<li class='ui-menu-item \"+d.disabled+\"' style='width:100%' role='presentation'><hr class='ui-separator-li'></li>\",f&&(e=$(f).val(),e&&(\"first\"===b.position?$(\"#\"+e).prepend(c):$(\"#\"+e).append(c))))}})},_buildNavMenu:function(a,b,c,d,e,f,g,h){return this.each(function(){var i=this,j=i.p.styleUI,k=($.jgrid.styleUI[j].navigator,$.jgrid.styleUI[j].filter),l=$.jgrid.styleUI[j].common,m=\"form_menu_\"+$.jgrid.randId(),n=\"<button class='dropdownmenu \"+l.button+\"' value='\"+m+\"'>Actions</button>\";$(a+\"_\"+c.position,a).append(n);var o={themodal:\"alertmod_\"+this.p.id,modalhead:\"alerthd_\"+this.p.id,modalcontent:\"alertcnt_\"+this.p.id},p=function(){var a,j,n=$(\".ui-jqgrid-view\").css(\"font-size\")||\"11px\",p=$('<ul id=\"'+m+'\" class=\"ui-nav-menu modal-content\" role=\"menu\" tabindex=\"0\" style=\"display:none;font-size:'+n+'\"></ul>');c.add&&(e=e||{},a=e.id||\"add_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.addtext||c.addtitle)+\"</a></li>\").click(function(){return $(this).hasClass(l.disabled)||($.isFunction(c.addfunc)?c.addfunc.call(i):$(i).jqGrid(\"editGridRow\",\"new\",e),$(p).hide()),!1}),$(p).append(j)),c.edit&&(d=d||{},a=d.id||\"edit_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.edittext||c.edittitle)+\"</a></li>\").click(function(){if(!$(this).hasClass(l.disabled)){var a=i.p.selrow;a?$.isFunction(c.editfunc)?c.editfunc.call(i,a):$(i).jqGrid(\"editGridRow\",a,d):($.jgrid.viewModal(\"#\"+o.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(i.p.id),jqm:!0}),$(\"#jqg_alrt\").focus()),$(p).hide()}return!1}),$(p).append(j)),c.view&&(h=h||{},a=h.id||\"view_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.viewtext||c.viewtitle)+\"</a></li>\").click(function(){if(!$(this).hasClass(l.disabled)){var a=i.p.selrow;a?$.isFunction(c.editfunc)?c.viewfunc.call(i,a):$(i).jqGrid(\"viewGridRow\",a,h):($.jgrid.viewModal(\"#\"+o.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(i.p.id),jqm:!0}),$(\"#jqg_alrt\").focus()),$(p).hide()}return!1}),$(p).append(j)),c.del&&(f=f||{},a=f.id||\"del_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.deltext||c.deltitle)+\"</a></li>\").click(function(){if(!$(this).hasClass(l.disabled)){var a;i.p.multiselect?(a=i.p.selarrrow,0===a.length&&(a=null)):a=i.p.selrow,a?$.isFunction(c.delfunc)?c.delfunc.call(i,a):$(i).jqGrid(\"delGridRow\",a,f):($.jgrid.viewModal(\"#\"+o.themodal,{gbox:\"#gbox_\"+$.jgrid.jqID(i.p.id),jqm:!0}),$(\"#jqg_alrt\").focus()),$(p).hide()}return!1}),$(p).append(j)),(c.add||c.edit||c.del||c.view)&&$(p).append(\"<li class='ui-menu-item \"+l.disabled+\"' style='width:100%' role='presentation'><hr class='ui-separator-li'></li>\"),c.search&&(g=g||{},a=g.id||\"search_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.searchtext||c.searchtitle)+\"</a></li>\").click(function(){return $(this).hasClass(l.disabled)||($.isFunction(c.searchfunc)?c.searchfunc.call(i,g):$(i).jqGrid(\"searchGrid\",g),$(p).hide()),!1}),$(p).append(j),g.showOnLoad&&g.showOnLoad===!0&&$(j).click()),c.refresh&&(a=g.id||\"search_\"+b,j=$('<li class=\"ui-menu-item\" role=\"presentation\"><a class=\"'+l.cornerall+' g-menu-item\" tabindex=\"0\" role=\"menuitem\" id=\"'+a+'\">'+(c.refreshtext||c.refreshtitle)+\"</a></li>\").click(function(){if(!$(this).hasClass(l.disabled)){$.isFunction(c.beforeRefresh)&&c.beforeRefresh.call(i),i.p.search=!1,i.p.resetsearch=!0;try{if(\"currentfilter\"!==c.refreshstate){var a=i.p.id;i.p.postData.filters=\"\";try{$(\"#fbox_\"+$.jgrid.jqID(a)).jqFilter(\"resetFilter\")}catch(b){}$.isFunction(i.clearToolbar)&&i.clearToolbar.call(i,!1)}}catch(d){}switch(c.refreshstate){case\"firstpage\":$(i).trigger(\"reloadGrid\",[{page:1}]);break;case\"current\":case\"currentfilter\":$(i).trigger(\"reloadGrid\",[{current:!0}])}$.isFunction(c.afterRefresh)&&c.afterRefresh.call(i),$(p).hide()}return!1}),$(p).append(j)),$(p).hide(),$(\"body\").append(p),$(\"#\"+m).addClass(\"ui-menu \"+k.menu_widget),$(\"#\"+m+\" > li > a\").hover(function(){$(this).addClass(l.hover)},function(){$(this).removeClass(l.hover)})};p(),$(\".dropdownmenu\").on(\"click\",function(){var a=$(this).offset(),b=a.left,c=parseInt(a.top),d=$(this).val();$(\"#\"+d).show().css({top:c-($(\"#\"+d).height()+10)+\"px\",left:b+\"px\"})}),$(\"body\").on(\"click\",function(a){$(a.target).hasClass(\"dropdownmenu\")||$(\"#\"+m).hide()})})},GridToForm:function(a,b){return this.each(function(){var c,d=this;if(d.grid){var e=$(d).jqGrid(\"getRowData\",a);if(e)for(c in e)e.hasOwnProperty(c)&&($(\"[name=\"+$.jgrid.jqID(c)+\"]\",b).is(\"input:radio\")||$(\"[name=\"+$.jgrid.jqID(c)+\"]\",b).is(\"input:checkbox\")?$(\"[name=\"+$.jgrid.jqID(c)+\"]\",b).each(function(){$(this).val()==e[c]?$(this)[d.p.useProp?\"prop\":\"attr\"](\"checked\",!0):$(this)[d.p.useProp?\"prop\":\"attr\"](\"checked\",!1)}):$(\"[name=\"+$.jgrid.jqID(c)+\"]\",b).val(e[c]))}})},FormToGrid:function(a,b,c,d){return this.each(function(){var e=this;if(e.grid){c||(c=\"set\"),d||(d=\"first\");var f=$(b).serializeArray(),g={};$.each(f,function(a,b){g[b.name]=b.value}),\"add\"===c?$(e).jqGrid(\"addRowData\",a,g,d):\"set\"===c&&$(e).jqGrid(\"setRowData\",a,g)}})}}),$.jgrid.extend({groupingSetup:function(){return this.each(function(){var a,b,c,d=this,e=d.p.colModel,f=d.p.groupingView,g=$.jgrid.styleUI[d.p.styleUI||\"jQueryUI\"].grouping;if(null===f||\"object\"!=typeof f&&!$.isFunction(f))d.p.grouping=!1;else if(f.plusicon||(f.plusicon=g.icon_plus),f.minusicon||(f.minusicon=g.icon_minus),f.groupField.length){for(void 0===f.visibiltyOnNextGrouping&&(f.visibiltyOnNextGrouping=[]),f.lastvalues=[],f._locgr||(f.groups=[]),f.counters=[],a=0;a<f.groupField.length;a++)f.groupOrder[a]||(f.groupOrder[a]=\"asc\"),f.groupText[a]||(f.groupText[a]=\"{0}\"),\"boolean\"!=typeof f.groupColumnShow[a]&&(f.groupColumnShow[a]=!0),\"boolean\"!=typeof f.groupSummary[a]&&(f.groupSummary[a]=!1),f.groupSummaryPos[a]||(f.groupSummaryPos[a]=\"footer\"),f.groupColumnShow[a]===!0?(f.visibiltyOnNextGrouping[a]=!0,$(d).jqGrid(\"showCol\",f.groupField[a])):(f.visibiltyOnNextGrouping[a]=$(\"#\"+$.jgrid.jqID(d.p.id+\"_\"+f.groupField[a])).is(\":visible\"),$(d).jqGrid(\"hideCol\",f.groupField[a]));for(f.summary=[],f.hideFirstGroupCol&&(f.formatDisplayField[0]=function(a){return a}),b=0,c=e.length;c>b;b++)f.hideFirstGroupCol&&(e[b].hidden||f.groupField[0]!==e[b].name||(e[b].formatter=function(){return\"\"})),e[b].summaryType&&f.summary.push(e[b].summaryDivider?{nm:e[b].name,st:e[b].summaryType,v:\"\",sd:e[b].summaryDivider,vd:\"\",sr:e[b].summaryRound,srt:e[b].summaryRoundType||\"round\"}:{nm:e[b].name,st:e[b].summaryType,v:\"\",sr:e[b].summaryRound,srt:e[b].summaryRoundType||\"round\"})}else d.p.grouping=!1})},groupingPrepare:function(a,b){return this.each(function(){var c,d,e,f,g,h=this.p.groupingView,i=this,j=function(){$.isFunction(this.st)?this.v=this.st.call(i,this.v,this.nm,a):(this.v=$(i).jqGrid(\"groupingCalculations.handler\",this.st,this.v,this.nm,this.sr,this.srt,a),\"avg\"===this.st.toLowerCase()&&this.sd&&(this.vd=$(i).jqGrid(\"groupingCalculations.handler\",this.st,this.vd,this.sd,this.sr,this.srt,a)))},k=h.groupField.length,l=0;for(c=0;k>c;c++)d=h.groupField[c],f=h.displayField[c],e=a[d],g=null==f?null:a[f],null==g&&(g=e),void 0!==e&&(0===b?(h.groups.push({idx:c,dataIndex:d,value:e,displayValue:g,startRow:b,cnt:1,summary:[]}),h.lastvalues[c]=e,h.counters[c]={cnt:1,pos:h.groups.length-1,summary:$.extend(!0,[],h.summary)},$.each(h.counters[c].summary,j),h.groups[h.counters[c].pos].summary=h.counters[c].summary):\"object\"==typeof e||($.isArray(h.isInTheSameGroup)&&$.isFunction(h.isInTheSameGroup[c])?h.isInTheSameGroup[c].call(i,h.lastvalues[c],e,c,h):h.lastvalues[c]===e)?1===l?(h.groups.push({idx:c,dataIndex:d,value:e,displayValue:g,startRow:b,cnt:1,summary:[]}),h.lastvalues[c]=e,h.counters[c]={cnt:1,pos:h.groups.length-1,summary:$.extend(!0,[],h.summary)},$.each(h.counters[c].summary,j),h.groups[h.counters[c].pos].summary=h.counters[c].summary):(h.counters[c].cnt+=1,h.groups[h.counters[c].pos].cnt=h.counters[c].cnt,$.each(h.counters[c].summary,j),h.groups[h.counters[c].pos].summary=h.counters[c].summary):(h.groups.push({idx:c,dataIndex:d,value:e,displayValue:g,startRow:b,cnt:1,summary:[]}),h.lastvalues[c]=e,l=1,h.counters[c]={cnt:1,pos:h.groups.length-1,summary:$.extend(!0,[],h.summary)},$.each(h.counters[c].summary,j),h.groups[h.counters[c].pos].summary=h.counters[c].summary))}),this},groupingToggle:function(a){return this.each(function(){var b=this,c=b.p.groupingView,d=a.split(\"_\"),e=parseInt(d[d.length-2],10);d.splice(d.length-2,2);var f,g,h=d.join(\"_\"),i=c.minusicon,j=c.plusicon,k=$(\"#\"+$.jgrid.jqID(a)),l=k.length?k[0].nextSibling:null,m=$(\"#\"+$.jgrid.jqID(a)+\" span.tree-wrap-\"+b.p.direction),n=function(a){var b=$.map(a.split(\" \"),function(a){return a.substring(0,h.length+1)===h+\"_\"?parseInt(a.substring(h.length+1),10):void 0});return b.length>0?b[0]:void 0},o=!1,p=!1,q=b.p.frozenColumns?b.p.id+\"_frozen\":!1,r=q?$(\"#\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(q)):!1,s=r&&r.length?r[0].nextSibling:null;if(m.hasClass(i)){if(c.showSummaryOnHide){if(l)for(;l&&(f=n(l.className),!(void 0!==f&&e>=f));)$(l).hide(),l=l.nextSibling,q&&($(s).hide(),s=s.nextSibling)}else if(l)for(;l&&(f=n(l.className),!(void 0!==f&&e>=f));)$(l).hide(),l=l.nextSibling,q&&($(s).hide(),s=s.nextSibling);m.removeClass(i).addClass(j),o=!0}else{if(l)for(g=void 0;l;){if(f=n(l.className),void 0===g&&(g=void 0===f),p=$(l).hasClass(\"ui-subgrid\")&&$(l).hasClass(\"ui-sg-collapsed\"),void 0!==f){if(e>=f)break;f===e+1&&(p||($(l).show().find(\">td>span.tree-wrap-\"+b.p.direction).removeClass(i).addClass(j),q&&$(s).show().find(\">td>span.tree-wrap-\"+b.p.direction).removeClass(i).addClass(j)))}else g&&(p||($(l).show(),q&&$(s).show()));l=l.nextSibling,q&&(s=s.nextSibling)}m.removeClass(j).addClass(i)}$(b).triggerHandler(\"jqGridGroupingClickGroup\",[a,o]),$.isFunction(b.p.onClickGroup)&&b.p.onClickGroup.call(b,a,o)}),!1},groupingRender:function(a,b,c,d){return this.each(function(){function e(a,b,c){var d,e=!1;if(0===b)e=c[a];else{var f=c[a].idx;if(0===f)e=c[a];else for(d=a;d>=0;d--)if(c[d].idx===f-b){e=c[d];break}}return e}function f(a,c,d,f){var g,h,i=e(a,c,d),k=j.p.colModel,l=i.cnt,m=\"\";for(h=f;b>h;h++){var n=\"<td \"+j.formatCol(h,1,\"\")+\">&#160;</td>\",o=\"{0}\";$.each(i.summary,function(){if(this.nm===k[h].name){k[h].summaryTpl&&(o=k[h].summaryTpl),\"string\"==typeof this.st&&\"avg\"===this.st.toLowerCase()&&(this.sd&&this.vd?this.v=this.v/this.vd:this.v&&l>0&&(this.v=this.v/l));try{this.groupCount=i.cnt,this.groupIndex=i.dataIndex,this.groupValue=i.value,g=j.formatter(\"\",this.v,h,this)}catch(a){g=this.v}return n=\"<td \"+j.formatCol(h,1,\"\")+\">\"+$.jgrid.template(o,g)+\"</td>\",!1}}),m+=n}return m}var g,h,i,j=this,k=j.p.groupingView,l=\"\",m=\"\",n=k.groupCollapse?k.plusicon:k.minusicon,o=[],p=k.groupField.length,q=$.jgrid.styleUI[j.p.styleUI||\"jQueryUI\"].common;n=n+\" tree-wrap-\"+j.p.direction,$.each(j.p.colModel,function(a,b){var c;for(c=0;p>c;c++)if(k.groupField[c]===b.name){o[c]=a;break}});var r,s=0,t=$.makeArray(k.groupSummary);t.reverse(),r=j.p.multiselect?' colspan=\"2\"':\"\",$.each(k.groups,function(e,u){if(k._locgr&&!(u.startRow+u.cnt>(c-1)*d&&u.startRow<c*d))return!0;s++,h=j.p.id+\"ghead_\"+u.idx,g=h+\"_\"+e,m=\"<span style='cursor:pointer;margin-right:8px;margin-left:5px;' class='\"+q.icon_base+\" \"+n+\"' onclick=\\\"jQuery('#\"+$.jgrid.jqID(j.p.id)+\"').jqGrid('groupingToggle','\"+g+\"');return false;\\\"></span>\";try{$.isArray(k.formatDisplayField)&&$.isFunction(k.formatDisplayField[u.idx])?(u.displayValue=k.formatDisplayField[u.idx].call(j,u.displayValue,u.value,j.p.colModel[o[u.idx]],u.idx,k),i=u.displayValue):i=j.formatter(g,u.displayValue,o[u.idx],u.value)}catch(v){i=u.displayValue}var w=\"\";w=$.isFunction(k.groupText[u.idx])?k.groupText[u.idx].call(j,i,u.cnt,u.summary):$.jgrid.template(k.groupText[u.idx],i,u.cnt,u.summary),\"string\"!=typeof w&&\"number\"!=typeof w&&(w=i),\"header\"===k.groupSummaryPos[u.idx]?(l+='<tr id=\"'+g+'\"'+(k.groupCollapse&&u.idx>0?' style=\"display:none;\" ':\" \")+'role=\"row\" class= \"'+q.content+\" jqgroup ui-row-\"+j.p.direction+\" \"+h+'\"><td style=\"padding-left:'+12*u.idx+'px;\"'+r+\">\"+m+w+\"</td>\",l+=f(e,0,k.groups,k.groupColumnShow[u.idx]===!1?\"\"===r?2:3:\"\"===r?1:2),l+=\"</tr>\"):l+='<tr id=\"'+g+'\"'+(k.groupCollapse&&u.idx>0?' style=\"display:none;\" ':\" \")+'role=\"row\" class= \"'+q.content+\" jqgroup ui-row-\"+j.p.direction+\" \"+h+'\"><td style=\"padding-left:'+12*u.idx+'px;\" colspan=\"'+(k.groupColumnShow[u.idx]===!1?b-1:b)+'\">'+m+w+\"</td></tr>\";var x=p-1===u.idx;if(x){var y,z,A=k.groups[e+1],B=0,C=u.startRow,D=void 0!==A?A.startRow:k.groups[e].startRow+k.groups[e].cnt;for(k._locgr&&(B=(c-1)*d,B>u.startRow&&(C=B)),y=C;D>y&&a[y-B];y++)l+=a[y-B].join(\"\");if(\"header\"!==k.groupSummaryPos[u.idx]){var E;if(void 0!==A){for(E=0;E<k.groupField.length&&A.dataIndex!==k.groupField[E];E++);s=k.groupField.length-E}for(z=0;s>z;z++)if(t[z]){var F=\"\";k.groupCollapse&&!k.showSummaryOnHide&&(F=' style=\"display:none;\"'),l+=\"<tr\"+F+' jqfootlevel=\"'+(u.idx-z)+'\" role=\"row\" class=\"'+q.content+\" jqfoot ui-row-\"+j.p.direction+'\">',l+=f(e,z,k.groups,0),l+=\"</tr>\"}s=E}}}),$(\"#\"+$.jgrid.jqID(j.p.id)+\" tbody:first\").append(l),l=null})},groupingGroupBy:function(a,b){return this.each(function(){var c=this;\"string\"==typeof a&&(a=[a]);var d=c.p.groupingView;c.p.grouping=!0,d._locgr=!1,void 0===d.visibiltyOnNextGrouping&&(d.visibiltyOnNextGrouping=[]);var e;for(e=0;e<d.groupField.length;e++)!d.groupColumnShow[e]&&d.visibiltyOnNextGrouping[e]&&$(c).jqGrid(\"showCol\",d.groupField[e]);for(e=0;e<a.length;e++)d.visibiltyOnNextGrouping[e]=$(\"#\"+$.jgrid.jqID(c.p.id)+\"_\"+$.jgrid.jqID(a[e])).is(\":visible\");c.p.groupingView=$.extend(c.p.groupingView,b||{}),d.groupField=a,$(c).trigger(\"reloadGrid\")})},groupingRemove:function(a){return this.each(function(){var b=this;if(void 0===a&&(a=!0),b.p.grouping=!1,a===!0){var c,d=b.p.groupingView;for(c=0;c<d.groupField.length;c++)!d.groupColumnShow[c]&&d.visibiltyOnNextGrouping[c]&&$(b).jqGrid(\"showCol\",d.groupField);$(\"tr.jqgroup, tr.jqfoot\",\"#\"+$.jgrid.jqID(b.p.id)+\" tbody:first\").remove(),$(\"tr.jqgrow:hidden\",\"#\"+$.jgrid.jqID(b.p.id)+\" tbody:first\").show()}else $(b).trigger(\"reloadGrid\")})},groupingCalculations:{handler:function(a,b,c,d,e,f){var g={sum:function(){return parseFloat(b||0)+parseFloat(f[c]||0)},min:function(){return\"\"===b?parseFloat(f[c]||0):Math.min(parseFloat(b),parseFloat(f[c]||0))},max:function(){return\"\"===b?parseFloat(f[c]||0):Math.max(parseFloat(b),parseFloat(f[c]||0))},count:function(){return\"\"===b&&(b=0),f.hasOwnProperty(c)?b+1:0},avg:function(){return g.sum()}};if(!g[a])throw\"jqGrid Grouping No such method: \"+a;var h=g[a]();if(null!=d)if(\"fixed\"===e)h=h.toFixed(d);else{var i=Math.pow(10,d);h=Math.round(h*i)/i}return h}},setGroupHeaders:function(a){return a=$.extend({useColSpanStyle:!1,groupHeaders:[]},a||{}),this.each(function(){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p=this,q=0,r=p.p.colModel,s=r.length,t=p.grid.headers,u=$(\"table.ui-jqgrid-htable\",p.grid.hDiv),v=u.children(\"thead\").children(\"tr.ui-jqgrid-labels:last\").addClass(\"jqg-second-row-header\"),w=u.children(\"thead\"),x=u.find(\".jqg-first-row-header\"),y=$.jgrid.styleUI[p.p.styleUI||\"jQueryUI\"].base;\np.p.groupHeader||(p.p.groupHeader=[]),p.p.groupHeader.push(a),void 0===x[0]?x=$(\"<tr>\",{role:\"row\",\"aria-hidden\":\"true\"}).addClass(\"jqg-first-row-header\").css(\"height\",\"auto\"):x.empty();var z,A=function(a,b){var c,d=b.length;for(c=0;d>c;c++)if(b[c].startColumnName===a)return c;return-1};for($(p).prepend(w),d=$(\"<tr>\",{role:\"row\"}).addClass(\"ui-jqgrid-labels jqg-third-row-header\"),b=0;s>b;b++)if(f=t[b].el,g=$(f),c=r[b],h={height:\"0px\",width:t[b].width+\"px\",display:c.hidden?\"none\":\"\"},$(\"<th>\",{role:\"gridcell\"}).css(h).addClass(\"ui-first-th-\"+p.p.direction).appendTo(x),f.style.width=\"\",i=A(c.name,a.groupHeaders),i>=0){for(j=a.groupHeaders[i],k=j.numberOfColumns,l=j.titleText,n=j.className||\"\",m=0,i=0;k>i&&s>b+i;i++)r[b+i].hidden||m++;e=$(\"<th>\").attr({role:\"columnheader\"}).addClass(y.headerBox+\" ui-th-column-header ui-th-\"+p.p.direction+\" \"+n).html(l),m>0&&e.attr(\"colspan\",String(m)),p.p.headertitles&&e.attr(\"title\",e.text()),0===m&&e.hide(),g.before(e),d.append(f),q=k-1}else 0===q?a.useColSpanStyle?g.attr(\"rowspan\",\"2\"):($(\"<th>\",{role:\"columnheader\"}).addClass(y.headerBox+\" ui-th-column-header ui-th-\"+p.p.direction).css({display:c.hidden?\"none\":\"\"}).insertBefore(g),d.append(f)):(d.append(f),q--);o=$(p).children(\"thead\"),o.prepend(x),d.insertAfter(v),u.append(o),a.useColSpanStyle&&(u.find(\"span.ui-jqgrid-resize\").each(function(){var a=$(this).parent();a.is(\":visible\")&&(this.style.cssText=\"height: \"+a.height()+\"px !important; cursor: col-resize;\")}),u.find(\"div.ui-jqgrid-sortable\").each(function(){var a=$(this),b=a.parent();b.is(\":visible\")&&b.is(\":has(span.ui-jqgrid-resize)\")&&a.css(\"top\",(b.height()-a.outerHeight())/2-4+\"px\")})),z=o.find(\"tr.jqg-first-row-header\"),$(p).bind(\"jqGridResizeStop.setGroupHeaders\",function(a,b,c){z.find(\"th\").eq(c).width(b)})})},destroyGroupHeader:function(a){return void 0===a&&(a=!0),this.each(function(){var b,c,d,e,f,g,h,i=this,j=i.grid,k=$(\"table.ui-jqgrid-htable thead\",j.hDiv),l=i.p.colModel;if(j){for($(this).unbind(\".setGroupHeaders\"),b=$(\"<tr>\",{role:\"row\"}).addClass(\"ui-jqgrid-labels\"),e=j.headers,c=0,d=e.length;d>c;c++){h=l[c].hidden?\"none\":\"\",f=$(e[c].el).width(e[c].width).css(\"display\",h);try{f.removeAttr(\"rowSpan\")}catch(m){f.attr(\"rowSpan\",1)}b.append(f),g=f.children(\"span.ui-jqgrid-resize\"),g.length>0&&(g[0].style.height=\"\"),f.children(\"div\")[0].style.top=\"\"}$(k).children(\"tr.ui-jqgrid-labels\").remove(),$(k).prepend(b),a===!0&&$(i).jqGrid(\"setGridParam\",{groupHeader:null})}})}}),$.jgrid=$.jgrid||{},$.extend($.jgrid,{saveState:function(a,b){if(b=$.extend({useStorage:!0,storageType:\"localStorage\",beforeSetItem:null,compression:!1,compressionModule:\"LZString\",compressionMethod:\"compressToUTF16\"},b||{}),a){var c,d,e=\"\",f=\"\",g=$(\"#\"+a)[0];if(g.grid){if(d=$(g).data(\"inlineNav\"),d&&g.p.inlineNav&&$(g).jqGrid(\"setGridParam\",{_iN:d}),d=$(g).data(\"filterToolbar\"),d&&g.p.filterToolbar&&$(g).jqGrid(\"setGridParam\",{_fT:d}),e=$(g).jqGrid(\"jqGridExport\",{exptype:\"jsonstring\",ident:\"\",root:\"\"}),$(g.grid.bDiv).find(\".ui-jqgrid-btable tr:gt(0)\").each(function(a,b){f+=b.outerHTML}),$.isFunction(b.beforeSetItem)&&(c=b.beforeSetItem.call(g,e),null!=c&&(e=c)),b.compression&&b.compressionModule)try{c=window[b.compressionModule][b.compressionMethod](e),null!=c&&(e=c,f=window[b.compressionModule][b.compressionMethod](f))}catch(h){}if(b.useStorage&&$.jgrid.isLocalStorage())try{window[b.storageType].setItem(\"jqGrid\"+g.p.id,e),window[b.storageType].setItem(\"jqGrid\"+g.p.id+\"_data\",f)}catch(h){22===h.code&&alert(\"Local storage limit is over!\")}return e}}},loadState:function(a,b,c){if(c=$.extend({useStorage:!0,storageType:\"localStorage\",clearAfterLoad:!1,beforeSetGrid:null,decompression:!1,decompressionModule:\"LZString\",decompressionMethod:\"decompressFromUTF16\"},c||{}),a){var d,e,f,g,h,i=$(\"#\"+a)[0];if(i.grid&&$.jgrid.gridUnload(a),c.useStorage)try{b=window[c.storageType].getItem(\"jqGrid\"+i.id),f=window[c.storageType].getItem(\"jqGrid\"+i.id+\"_data\")}catch(j){}if(b){if(c.decompression&&c.decompressionModule)try{d=window[c.decompressionModule][c.decompressionMethod](b),null!=d&&(b=d,f=window[c.decompressionModule][c.decompressionMethod](f))}catch(j){}if(d=jqGridUtils.parse(b),d&&\"object\"===$.type(d)){$.isFunction(c.beforeSetGrid)&&(e=c.beforeSetGrid(d),e&&\"object\"===$.type(e)&&(d=e));var k=function(a){var b;return b=a},l={reccount:d.reccount,records:d.records,lastpage:d.lastpage,shrinkToFit:k(d.shrinkToFit),data:k(d.data),datatype:k(d.datatype),grouping:k(d.grouping)};d.shrinkToFit=!1,d.data=[],d.datatype=\"local\",d.grouping=!1,d.navGrid=!1,d.inlineNav&&(g=k(d._iN),d._iN=null,delete d._iN),d.filterToolbar&&(h=k(d._fT),d._fT=null,delete d._fT);var m=$(\"#\"+a).jqGrid(d);m.append(f),m.jqGrid(\"setGridParam\",l),d.storeNavOptions&&m.jqGrid(\"navGrid\",d.pager,d.navOptions,d.editOptions,d.addOptions,d.delOptions,d.searchOptions,d.viewOptions),d.inlineNav&&g&&(m.jqGrid(\"setGridParam\",{inlineNav:!1}),m.jqGrid(\"inlineNav\",d.pager,g)),d.filterToolbar&&h&&(m.jqGrid(\"setGridParam\",{filterToolbar:!1}),m.jqGrid(\"filterToolbar\",h)),m[0].updatepager(!0,!0),c.clearAfterLoad&&(window[c.storageType].removeItem(\"jqGrid\"+i.id),window[c.storageType].removeItem(\"jqGrid\"+i.id+\"_data\"))}else alert(\"can not convert to object\")}}},setRegional:function(a,b){$.jgrid.saveState(a,{storageType:\"sessionStorage\"}),$.jgrid.loadState(a,null,{storageType:\"sessionStorage\",beforeSetGrid:function(a){return a.regional=b.regional,a.force_regional=!0,a}});var c=$(\"#\"+a)[0],d=$(c).jqGrid(\"getGridParam\",\"colModel\"),e=-1,f=$.jgrid.getRegional(c,\"nav\");$.each(d,function(a){return this.formatter&&\"actions\"===this.formatter?(e=a,!1):void 0}),-1!==e&&f&&$(\"#\"+a+\" tbody tr\").each(function(){var a=this.cells[e];$(a).find(\".ui-inline-edit\").attr(\"title\",f.edittitle),$(a).find(\".ui-inline-del\").attr(\"title\",f.deltitle),$(a).find(\".ui-inline-save\").attr(\"title\",f.savetitle),$(a).find(\".ui-inline-cancel\").attr(\"title\",f.canceltitle)});try{window.sessionStorage.removeItem(\"jqGrid\"+c.id),window.sessionStorage.removeItem(\"jqGrid\"+c.id+\"_data\")}catch(g){}},jqGridImport:function(a,b){b=$.extend({imptype:\"xml\",impstring:\"\",impurl:\"\",mtype:\"GET\",impData:{},xmlGrid:{config:\"root>grid\",data:\"root>rows\"},jsonGrid:{config:\"grid\",data:\"data\"},ajaxOptions:{}},b||{});var c=(0===a.indexOf(\"#\")?\"\":\"#\")+$.jgrid.jqID(a),d=function(a,b){var d,e,f,g=$(b.xmlGrid.config,a)[0],h=$(b.xmlGrid.data,a)[0];if(jqGridUtils.xmlToJSON){d=jqGridUtils.xmlToJSON(g);for(f in d)d.hasOwnProperty(f)&&(e=d[f]);if(h){var i=d.grid.datatype;d.grid.datatype=\"xmlstring\",d.grid.datastr=a,$(c).jqGrid(e).jqGrid(\"setGridParam\",{datatype:i})}else setTimeout(function(){$(c).jqGrid(e)},0)}else alert(\"xml2json or parse are not present\")},e=function(a,b){if(a&&\"string\"==typeof a){var d=jqGridUtils.parse(a),e=d[b.jsonGrid.config],f=d[b.jsonGrid.data];if(f){var g=e.datatype;e.datatype=\"jsonstring\",e.datastr=f,$(c).jqGrid(e).jqGrid(\"setGridParam\",{datatype:g})}else $(c).jqGrid(e)}};switch(b.imptype){case\"xml\":$.ajax($.extend({url:b.impurl,type:b.mtype,data:b.impData,dataType:\"xml\",complete:function(a,e){\"success\"===e&&(d(a.responseXML,b),$(c).triggerHandler(\"jqGridImportComplete\",[a,b]),$.isFunction(b.importComplete)&&b.importComplete(a)),a=null}},b.ajaxOptions));break;case\"xmlstring\":if(b.impstring&&\"string\"==typeof b.impstring){var f=$.parseXML(b.impstring);f&&(d(f,b),$(c).triggerHandler(\"jqGridImportComplete\",[f,b]),$.isFunction(b.importComplete)&&b.importComplete(f))}break;case\"json\":$.ajax($.extend({url:b.impurl,type:b.mtype,data:b.impData,dataType:\"json\",complete:function(a){try{e(a.responseText,b),$(c).triggerHandler(\"jqGridImportComplete\",[a,b]),$.isFunction(b.importComplete)&&b.importComplete(a)}catch(d){}a=null}},b.ajaxOptions));break;case\"jsonstring\":b.impstring&&\"string\"==typeof b.impstring&&(e(b.impstring,b),$(c).triggerHandler(\"jqGridImportComplete\",[b.impstring,b]),$.isFunction(b.importComplete)&&b.importComplete(b.impstring))}}}),$.jgrid.extend({jqGridExport:function(a){a=$.extend({exptype:\"xmlstring\",root:\"grid\",ident:\"\t\",addOptions:{}},a||{});var b=null;return this.each(function(){if(this.grid){var c,d=$.extend(!0,{},$(this).jqGrid(\"getGridParam\"),a.addOptions);if(d.rownumbers&&(d.colNames.splice(0,1),d.colModel.splice(0,1)),d.multiselect&&(d.colNames.splice(0,1),d.colModel.splice(0,1)),d.subGrid&&(d.colNames.splice(0,1),d.colModel.splice(0,1)),d.knv=null,d.treeGrid)for(c in d.treeReader)d.treeReader.hasOwnProperty(c)&&(d.colNames.splice(d.colNames.length-1),d.colModel.splice(d.colModel.length-1));switch(a.exptype){case\"xmlstring\":b=\"<\"+a.root+\">\"+jqGridUtils.jsonToXML(d,{xmlDecl:\"\"})+\"</\"+a.root+\">\";break;case\"jsonstring\":b=jqGridUtils.stringify(d),a.root&&(b=\"{\"+a.root+\":\"+b+\"}\")}}}),b},excelExport:function(a){return a=$.extend({exptype:\"remote\",url:null,oper:\"oper\",tag:\"excel\",exportOptions:{}},a||{}),this.each(function(){if(this.grid){var b;if(\"remote\"===a.exptype){var c=$.extend({},this.p.postData);c[a.oper]=a.tag;var d=jQuery.param(c);b=-1!==a.url.indexOf(\"?\")?a.url+\"&\"+d:a.url+\"?\"+d,window.location=b}}})}}),$.jgrid.inlineEdit=$.jgrid.inlineEdit||{},$.jgrid.extend({editRow:function(a,b,c,d,e,f,g,h,i){var j={},k=$.makeArray(arguments).slice(1);return\"object\"===$.type(k[0])?j=k[0]:(void 0!==b&&(j.keys=b),$.isFunction(c)&&(j.oneditfunc=c),$.isFunction(d)&&(j.successfunc=d),void 0!==e&&(j.url=e),void 0!==f&&(j.extraparam=f),$.isFunction(g)&&(j.aftersavefunc=g),$.isFunction(h)&&(j.errorfunc=h),$.isFunction(i)&&(j.afterrestorefunc=i)),j=$.extend(!0,{keys:!1,oneditfunc:null,successfunc:null,url:null,extraparam:{},aftersavefunc:null,errorfunc:null,afterrestorefunc:null,restoreAfterError:!0,mtype:\"POST\",focusField:!0},$.jgrid.inlineEdit,j),this.each(function(){var b,c,d,e,f,g,h=this,i=0,k=null,l={},m=$(this).jqGrid(\"getStyleUI\",h.p.styleUI+\".inlinedit\",\"inputClass\",!0);h.grid&&(e=$(h).jqGrid(\"getInd\",a,!0),e!==!1&&(g=$.isFunction(j.beforeEditRow)?j.beforeEditRow.call(h,j,a):void 0,void 0===g&&(g=!0),g&&(d=$(e).attr(\"editable\")||\"0\",\"0\"!==d||$(e).hasClass(\"not-editable-row\")||(f=h.p.colModel,$('td[role=\"gridcell\"]',e).each(function(d){b=f[d].name;var e=h.p.treeGrid===!0&&b===h.p.ExpandColumn;if(e)c=$(\"span:first\",this).html();else try{c=$.unformat.call(h,this,{rowId:a,colModel:f[d]},d)}catch(g){c=f[d].edittype&&\"textarea\"===f[d].edittype?$(this).text():$(this).html()}if(\"cb\"!==b&&\"subgrid\"!==b&&\"rn\"!==b&&(h.p.autoencode&&(c=$.jgrid.htmlDecode(c)),l[b]=c,f[d].editable===!0)){null===k&&(k=d),e?$(\"span:first\",this).html(\"\"):$(this).html(\"\");var j=$.extend({},f[d].editoptions||{},{id:a+\"_\"+b,name:b,rowId:a,oper:\"edit\"});f[d].edittype||(f[d].edittype=\"text\"),(\"&nbsp;\"===c||\"&#160;\"===c||1===c.length&&160===c.charCodeAt(0))&&(c=\"\");var n=$.jgrid.createEl.call(h,f[d].edittype,j,c,!0,$.extend({},$.jgrid.ajaxOptions,h.p.ajaxSelectOptions||{}));$(n).addClass(\"editable inline-edit-cell\"),$.inArray(f[d].edittype,[\"text\",\"textarea\",\"password\",\"select\"])>-1&&$(n).addClass(m),e?$(\"span:first\",this).append(n):$(this).append(n),$.jgrid.bindEv.call(h,n,j),\"select\"===f[d].edittype&&void 0!==f[d].editoptions&&f[d].editoptions.multiple===!0&&void 0===f[d].editoptions.dataUrl&&$.jgrid.msie&&$(n).width($(n).width()),i++}}),i>0&&(l.id=a,h.p.savedRow.push(l),$(e).attr(\"editable\",\"1\"),j.focusField&&(\"number\"==typeof j.focusField&&parseInt(j.focusField,10)<=f.length&&(k=j.focusField),setTimeout(function(){var a=$(\"td:eq(\"+k+\") :input:visible\",e).not(\":disabled\");a.length>0&&a.focus()},0)),j.keys===!0&&$(e).bind(\"keyup\",function(b){if(27===b.keyCode){if($(h).jqGrid(\"restoreRow\",a,j.afterrestorefunc),h.p.inlineNav)try{$(h).jqGrid(\"showAddEditButtons\")}catch(c){}return!1}if(13===b.keyCode){var d=b.target;if(\"TEXTAREA\"===d.tagName)return!0;if($(h).jqGrid(\"saveRow\",a,j)&&h.p.inlineNav)try{$(h).jqGrid(\"showAddEditButtons\")}catch(e){}return!1}}),$(h).triggerHandler(\"jqGridInlineEditRow\",[a,j]),$.isFunction(j.oneditfunc)&&j.oneditfunc.call(h,a))))))})},saveRow:function(a,b,c,d,e,f,g){var h=$.makeArray(arguments).slice(1),i={},j=this[0];\"object\"===$.type(h[0])?i=h[0]:($.isFunction(b)&&(i.successfunc=b),void 0!==c&&(i.url=c),void 0!==d&&(i.extraparam=d),$.isFunction(e)&&(i.aftersavefunc=e),$.isFunction(f)&&(i.errorfunc=f),$.isFunction(g)&&(i.afterrestorefunc=g)),i=$.extend(!0,{successfunc:null,url:null,extraparam:{},aftersavefunc:null,errorfunc:null,afterrestorefunc:null,restoreAfterError:!0,mtype:\"POST\",saveui:\"enable\",savetext:$.jgrid.getRegional(j,\"defaults.savetext\")},$.jgrid.inlineEdit,i);var k,l,m,n,o,p=!1,q={},r={},s={},t=!1,u=$.trim($(j).jqGrid(\"getStyleUI\",j.p.styleUI+\".common\",\"error\",!0));if(!j.grid)return p;if(o=$(j).jqGrid(\"getInd\",a,!0),o===!1)return p;var v=$.jgrid.getRegional(this,\"errors\"),w=$.jgrid.getRegional(this,\"edit\"),x=$.isFunction(i.beforeSaveRow)?i.beforeSaveRow.call(j,i,a):void 0;if(void 0===x&&(x=!0),x){if(l=$(o).attr(\"editable\"),i.url=i.url||j.p.editurl,\"1\"===l){var y;if($('td[role=\"gridcell\"]',o).each(function(a){if(y=j.p.colModel[a],k=y.name,\"cb\"!==k&&\"subgrid\"!==k&&y.editable===!0&&\"rn\"!==k&&!$(this).hasClass(\"not-editable-cell\")){switch(y.edittype){case\"checkbox\":var b=[\"Yes\",\"No\"];y.editoptions&&(b=y.editoptions.value.split(\":\")),q[k]=$(\"input\",this).is(\":checked\")?b[0]:b[1];break;case\"text\":case\"password\":case\"textarea\":case\"button\":q[k]=$(\"input, textarea\",this).val();break;case\"select\":if(y.editoptions.multiple){var c=$(\"select\",this),d=[];q[k]=$(c).val(),q[k]=q[k]?q[k].join(\",\"):\"\",$(\"select option:selected\",this).each(function(a,b){d[a]=$(b).text()}),r[k]=d.join(\",\")}else q[k]=$(\"select option:selected\",this).val(),r[k]=$(\"select option:selected\",this).text();y.formatter&&\"select\"===y.formatter&&(r={});break;case\"custom\":try{if(!y.editoptions||!$.isFunction(y.editoptions.custom_value))throw\"e1\";if(q[k]=y.editoptions.custom_value.call(j,$(\".customelement\",this),\"get\"),void 0===q[k])throw\"e2\"}catch(e){\"e1\"===e?$.jgrid.info_dialog(v.errcap,\"function 'custom_value' \"+w.msg.nodefined,w.bClose,{styleUI:j.p.styleUI}):$.jgrid.info_dialog(v.errcap,e.message,w.bClose,{styleUI:j.p.styleUI})}}if(n=$.jgrid.checkValues.call(j,q[k],a),n[0]===!1)return!1;j.p.autoencode&&(q[k]=$.jgrid.htmlEncode(q[k])),\"clientArray\"!==i.url&&y.editoptions&&y.editoptions.NullIfEmpty===!0&&\"\"===q[k]&&(s[k]=\"null\",t=!0)}}),n[0]===!1){try{var z=$(j).jqGrid(\"getGridRowById\",a),A=$.jgrid.findPos(z);$.jgrid.info_dialog(v.errcap,n[1],w.bClose,{left:A[0],top:A[1]+$(z).outerHeight(),styleUI:j.p.styleUI})}catch(B){alert(n[1])}return p}var C,D=j.p.prmNames,E=a;if(C=j.p.keyName===!1?D.id:j.p.keyName,q){if(q[D.oper]=D.editoper,void 0===q[C]||\"\"===q[C])q[C]=a;else if(o.id!==j.p.idPrefix+q[C]){var F=$.jgrid.stripPref(j.p.idPrefix,a);if(void 0!==j.p._index[F]&&(j.p._index[q[C]]=j.p._index[F],delete j.p._index[F]),a=j.p.idPrefix+q[C],$(o).attr(\"id\",a),j.p.selrow===E&&(j.p.selrow=a),$.isArray(j.p.selarrrow)){var G=$.inArray(E,j.p.selarrrow);G>=0&&(j.p.selarrrow[G]=a)}if(j.p.multiselect){var H=\"jqg_\"+j.p.id+\"_\"+a;$(\"input.cbox\",o).attr(\"id\",H).attr(\"name\",H)}}void 0===j.p.inlineData&&(j.p.inlineData={}),q=$.extend({},q,j.p.inlineData,i.extraparam)}if(\"clientArray\"===i.url){q=$.extend({},q,r),j.p.autoencode&&$.each(q,function(a,b){q[a]=$.jgrid.htmlDecode(b)});var I,J=$(j).jqGrid(\"setRowData\",a,q);for($(o).attr(\"editable\",\"0\"),I=0;I<j.p.savedRow.length;I++)if(String(j.p.savedRow[I].id)===String(E)){m=I;break}m>=0&&j.p.savedRow.splice(m,1),$(j).triggerHandler(\"jqGridInlineAfterSaveRow\",[a,J,q,i]),$.isFunction(i.aftersavefunc)&&i.aftersavefunc.call(j,a,J,q,i),p=!0,$(o).removeClass(\"jqgrid-new-row\").unbind(\"keydown\")}else $(j).jqGrid(\"progressBar\",{method:\"show\",loadtype:i.saveui,htmlcontent:i.savetext}),s=$.extend({},q,s),s[C]=$.jgrid.stripPref(j.p.idPrefix,s[C]),$.ajax($.extend({url:i.url,data:$.isFunction(j.p.serializeRowData)?j.p.serializeRowData.call(j,s):s,type:i.mtype,async:!1,complete:function(b,c){if($(j).jqGrid(\"progressBar\",{method:\"hide\",loadtype:i.saveui,htmlcontent:i.savetext}),\"success\"===c){var d,e,f=!0;if(d=$(j).triggerHandler(\"jqGridInlineSuccessSaveRow\",[b,a,i]),$.isArray(d)||(d=[!0,s]),d[0]&&$.isFunction(i.successfunc)&&(d=i.successfunc.call(j,b)),$.isArray(d)?(f=d[0],q=d[1]||q):f=d,f===!0){for(j.p.autoencode&&$.each(q,function(a,b){q[a]=$.jgrid.htmlDecode(b)}),t&&$.each(q,function(a){\"null\"===q[a]&&(q[a]=\"\")}),q=$.extend({},q,r),$(j).jqGrid(\"setRowData\",a,q),$(o).attr(\"editable\",\"0\"),e=0;e<j.p.savedRow.length;e++)if(String(j.p.savedRow[e].id)===String(a)){m=e;break}m>=0&&j.p.savedRow.splice(m,1),$(j).triggerHandler(\"jqGridInlineAfterSaveRow\",[a,b,q,i]),$.isFunction(i.aftersavefunc)&&i.aftersavefunc.call(j,a,b,q,i),p=!0,$(o).removeClass(\"jqgrid-new-row\").unbind(\"keydown\")}else $(j).triggerHandler(\"jqGridInlineErrorSaveRow\",[a,b,c,null,i]),$.isFunction(i.errorfunc)&&i.errorfunc.call(j,a,b,c,null),i.restoreAfterError===!0&&$(j).jqGrid(\"restoreRow\",a,i.afterrestorefunc)}},error:function(b,c,d){if($(\"#lui_\"+$.jgrid.jqID(j.p.id)).hide(),$(j).triggerHandler(\"jqGridInlineErrorSaveRow\",[a,b,c,d,i]),$.isFunction(i.errorfunc))i.errorfunc.call(j,a,b,c,d);else{var e=b.responseText||b.statusText;try{$.jgrid.info_dialog(v.errcap,'<div class=\"'+u+'\">'+e+\"</div>\",w.bClose,{buttonalign:\"right\",styleUI:j.p.styleUI})}catch(f){alert(e)}}i.restoreAfterError===!0&&$(j).jqGrid(\"restoreRow\",a,i.afterrestorefunc)}},$.jgrid.ajaxOptions,j.p.ajaxRowOptions||{}))}return p}},restoreRow:function(a,b){var c=$.makeArray(arguments).slice(1),d={};return\"object\"===$.type(c[0])?d=c[0]:$.isFunction(b)&&(d.afterrestorefunc=b),d=$.extend(!0,{},$.jgrid.inlineEdit,d),this.each(function(){var b,c,e=this,f=-1,g={};if(e.grid&&(b=$(e).jqGrid(\"getInd\",a,!0),b!==!1)){var h=$.isFunction(d.beforeCancelRow)?d.beforeCancelRow.call(e,d,a):void 0;if(void 0===h&&(h=!0),h){for(c=0;c<e.p.savedRow.length;c++)if(String(e.p.savedRow[c].id)===String(a)){f=c;break}if(f>=0){if($.isFunction($.fn.datepicker))try{$(\"input.hasDatepicker\",\"#\"+$.jgrid.jqID(b.id)).datepicker(\"hide\")}catch(i){}$.each(e.p.colModel,function(){this.editable===!0&&e.p.savedRow[f].hasOwnProperty(this.name)&&(g[this.name]=e.p.savedRow[f][this.name])}),$(e).jqGrid(\"setRowData\",a,g),$(b).attr(\"editable\",\"0\").unbind(\"keydown\"),e.p.savedRow.splice(f,1),$(\"#\"+$.jgrid.jqID(a),\"#\"+$.jgrid.jqID(e.p.id)).hasClass(\"jqgrid-new-row\")&&setTimeout(function(){$(e).jqGrid(\"delRowData\",a),$(e).jqGrid(\"showAddEditButtons\")},0)}$(e).triggerHandler(\"jqGridInlineAfterRestoreRow\",[a]),$.isFunction(d.afterrestorefunc)&&d.afterrestorefunc.call(e,a)}}})},addRow:function(a){return a=$.extend(!0,{rowID:null,initdata:{},position:\"first\",useDefValues:!0,useFormatter:!1,addRowParams:{extraparam:{}}},a||{}),this.each(function(){if(this.grid){var b=this,c=$.isFunction(a.beforeAddRow)?a.beforeAddRow.call(b,a.addRowParams):void 0;if(void 0===c&&(c=!0),c)if(a.rowID=$.isFunction(a.rowID)?a.rowID.call(b,a):null!=a.rowID?a.rowID:$.jgrid.randId(),a.useDefValues===!0&&$(b.p.colModel).each(function(){if(this.editoptions&&this.editoptions.defaultValue){var c=this.editoptions.defaultValue,d=$.isFunction(c)?c.call(b):c;a.initdata[this.name]=d}}),$(b).jqGrid(\"addRowData\",a.rowID,a.initdata,a.position),a.rowID=b.p.idPrefix+a.rowID,$(\"#\"+$.jgrid.jqID(a.rowID),\"#\"+$.jgrid.jqID(b.p.id)).addClass(\"jqgrid-new-row\"),a.useFormatter)$(\"#\"+$.jgrid.jqID(a.rowID)+\" .ui-inline-edit\",\"#\"+$.jgrid.jqID(b.p.id)).click();else{var d=b.p.prmNames,e=d.oper;a.addRowParams.extraparam[e]=d.addoper,$(b).jqGrid(\"editRow\",a.rowID,a.addRowParams),$(b).jqGrid(\"setSelection\",a.rowID)}}})},inlineNav:function(a,b){var c=this[0],d=$.jgrid.getRegional(c,\"nav\"),e=$.jgrid.styleUI[c.p.styleUI].inlinedit;return b=$.extend(!0,{edit:!0,editicon:e.icon_edit_nav,add:!0,addicon:e.icon_add_nav,save:!0,saveicon:e.icon_save_nav,cancel:!0,cancelicon:e.icon_cancel_nav,addParams:{addRowParams:{extraparam:{}}},editParams:{},restoreAfterSelect:!0},d,b||{}),this.each(function(){if(this.grid&&!this.p.inlineNav){var e=$.jgrid.jqID(c.p.id),f=$.trim($(c).jqGrid(\"getStyleUI\",c.p.styleUI+\".common\",\"disabled\",!0));if(c.p.navGrid||$(c).jqGrid(\"navGrid\",a,{refresh:!1,edit:!1,add:!1,del:!1,search:!1,view:!1}),$(c).data(\"inlineNav\")||$(c).data(\"inlineNav\",b),c.p.force_regional&&(b=$.extend(b,d)),c.p.inlineNav=!0,b.addParams.useFormatter===!0){var g,h=c.p.colModel;for(g=0;g<h.length;g++)if(h[g].formatter&&\"actions\"===h[g].formatter){if(h[g].formatoptions){var i={keys:!1,onEdit:null,onSuccess:null,afterSave:null,onError:null,afterRestore:null,extraparam:{},url:null},j=$.extend(i,h[g].formatoptions);b.addParams.addRowParams={keys:j.keys,oneditfunc:j.onEdit,successfunc:j.onSuccess,url:j.url,extraparam:j.extraparam,aftersavefunc:j.afterSave,errorfunc:j.onError,afterrestorefunc:j.afterRestore}}break}}b.add&&$(c).jqGrid(\"navButtonAdd\",a,{caption:b.addtext,title:b.addtitle,buttonicon:b.addicon,id:c.p.id+\"_iladd\",onClickButton:function(){$(c).jqGrid(\"addRow\",b.addParams),b.addParams.useFormatter||($(\"#\"+e+\"_ilsave\").removeClass(f),$(\"#\"+e+\"_ilcancel\").removeClass(f),$(\"#\"+e+\"_iladd\").addClass(f),$(\"#\"+e+\"_iledit\").addClass(f))}}),b.edit&&$(c).jqGrid(\"navButtonAdd\",a,{caption:b.edittext,title:b.edittitle,buttonicon:b.editicon,id:c.p.id+\"_iledit\",onClickButton:function(){var a=$(c).jqGrid(\"getGridParam\",\"selrow\");a?($(c).jqGrid(\"editRow\",a,b.editParams),$(\"#\"+e+\"_ilsave\").removeClass(f),$(\"#\"+e+\"_ilcancel\").removeClass(f),$(\"#\"+e+\"_iladd\").addClass(f),$(\"#\"+e+\"_iledit\").addClass(f)):($.jgrid.viewModal(\"#alertmod_\"+e,{gbox:\"#gbox_\"+e,jqm:!0}),$(\"#jqg_alrt\").focus())}}),b.save&&($(c).jqGrid(\"navButtonAdd\",a,{caption:b.savetext||\"\",title:b.savetitle||\"Save row\",buttonicon:b.saveicon,id:c.p.id+\"_ilsave\",onClickButton:function(){var a=c.p.savedRow[0].id;if(a){var d=c.p.prmNames,f=d.oper,g=b.editParams;$(\"#\"+$.jgrid.jqID(a),\"#\"+e).hasClass(\"jqgrid-new-row\")?(b.addParams.addRowParams.extraparam[f]=d.addoper,g=b.addParams.addRowParams):(b.editParams.extraparam||(b.editParams.extraparam={}),b.editParams.extraparam[f]=d.editoper),$(c).jqGrid(\"saveRow\",a,g)&&$(c).jqGrid(\"showAddEditButtons\")}else $.jgrid.viewModal(\"#alertmod_\"+e,{gbox:\"#gbox_\"+e,jqm:!0}),$(\"#jqg_alrt\").focus()}}),$(\"#\"+e+\"_ilsave\").addClass(f)),b.cancel&&($(c).jqGrid(\"navButtonAdd\",a,{caption:b.canceltext||\"\",title:b.canceltitle||\"Cancel row editing\",buttonicon:b.cancelicon,id:c.p.id+\"_ilcancel\",onClickButton:function(){var a=c.p.savedRow[0].id,d=b.editParams;a?($(\"#\"+$.jgrid.jqID(a),\"#\"+e).hasClass(\"jqgrid-new-row\")&&(d=b.addParams.addRowParams),$(c).jqGrid(\"restoreRow\",a,d),$(c).jqGrid(\"showAddEditButtons\")):($.jgrid.viewModal(\"#alertmod\",{gbox:\"#gbox_\"+e,jqm:!0}),$(\"#jqg_alrt\").focus())}}),$(\"#\"+e+\"_ilcancel\").addClass(f)),b.restoreAfterSelect===!0&&$(c).bind(\"jqGridBeforeSelectRow.inlineNav\",function(a,d){c.p.savedRow.length>0&&c.p.inlineNav===!0&&d!==c.p.selrow&&null!==c.p.selrow&&(c.p.selrow===b.addParams.rowID?$(c).jqGrid(\"delRowData\",c.p.selrow):$(c).jqGrid(\"restoreRow\",c.p.selrow,b.editParams),$(c).jqGrid(\"showAddEditButtons\"))})}})},showAddEditButtons:function(){return this.each(function(){if(this.grid){var a=$.jgrid.jqID(this.p.id),b=$.trim($(this).jqGrid(\"getStyleUI\",this.p.styleUI+\".common\",\"disabled\",!0));$(\"#\"+a+\"_ilsave\").addClass(b),$(\"#\"+a+\"_ilcancel\").addClass(b),$(\"#\"+a+\"_iladd\").removeClass(b),$(\"#\"+a+\"_iledit\").removeClass(b)}})}}),$.jgrid.msie&&8===$.jgrid.msiever()&&($.expr[\":\"].hidden=function(a){return 0===a.offsetWidth||0===a.offsetHeight||\"none\"===a.style.display}),$.jgrid._multiselect=!1,$.ui&&$.ui.multiselect){if($.ui.multiselect.prototype._setSelected){var setSelected=$.ui.multiselect.prototype._setSelected;$.ui.multiselect.prototype._setSelected=function(a,b){var c=setSelected.call(this,a,b);if(b&&this.selectedList){var d=this.element;this.selectedList.find(\"li\").each(function(){$(this).data(\"optionLink\")&&$(this).data(\"optionLink\").remove().appendTo(d)})}return c}}$.ui.multiselect.prototype.destroy&&($.ui.multiselect.prototype.destroy=function(){this.element.show(),this.container.remove(),void 0===$.Widget?$.widget.prototype.destroy.apply(this,arguments):$.Widget.prototype.destroy.apply(this,arguments)}),$.jgrid._multiselect=!0}$.jgrid.extend({sortableColumns:function(a){return this.each(function(){function b(){c.p.disableClick=!0}var c=this,d=$.jgrid.jqID(c.p.id),e={tolerance:\"pointer\",axis:\"x\",scrollSensitivity:\"1\",items:\">th:not(:has(#jqgh_\"+d+\"_cb,#jqgh_\"+d+\"_rn,#jqgh_\"+d+\"_subgrid),:hidden)\",placeholder:{element:function(a){var b=$(document.createElement(a[0].nodeName)).addClass(a[0].className+\" ui-sortable-placeholder ui-state-highlight\").removeClass(\"ui-sortable-helper\")[0];return b},update:function(a,b){b.height(a.currentItem.innerHeight()-parseInt(a.currentItem.css(\"paddingTop\")||0,10)-parseInt(a.currentItem.css(\"paddingBottom\")||0,10)),b.width(a.currentItem.innerWidth()-parseInt(a.currentItem.css(\"paddingLeft\")||0,10)-parseInt(a.currentItem.css(\"paddingRight\")||0,10))}},update:function(a,b){var d=$(b.item).parent(),e=$(\">th\",d),f=c.p.colModel,g={},h=c.p.id+\"_\";$.each(f,function(a){g[this.name]=a});var i=[];e.each(function(){var a=$(\">div\",this).get(0).id.replace(/^jqgh_/,\"\").replace(h,\"\");g.hasOwnProperty(a)&&i.push(g[a])}),$(c).jqGrid(\"remapColumns\",i,!0,!0),$.isFunction(c.p.sortable.update)&&c.p.sortable.update(i),setTimeout(function(){c.p.disableClick=!1},50)}};if(c.p.sortable.options?$.extend(e,c.p.sortable.options):$.isFunction(c.p.sortable)&&(c.p.sortable={update:c.p.sortable}),e.start){var f=e.start;e.start=function(a,c){b(),f.call(this,a,c)}}else e.start=b;c.p.sortable.exclude&&(e.items+=\":not(\"+c.p.sortable.exclude+\")\");var g=a.sortable(e),h=g.data(\"sortable\")||g.data(\"uiSortable\");null!=h&&(h.data(\"sortable\").floating=!0)})},columnChooser:function(a){function b(a,b,c){var d,e;return b>=0?(d=a.slice(),e=d.splice(b,Math.max(a.length-b,b)),b>a.length&&(b=a.length),d[b]=c,d.concat(e)):a}function c(a,b){a&&(\"string\"==typeof a?$.fn[a]&&$.fn[a].apply(b,$.makeArray(arguments).slice(2)):$.isFunction(a)&&a.apply(b,$.makeArray(arguments).slice(2)))}var d,e,f,g,h,i,j,k=this,l={},m=[],n=k.jqGrid(\"getGridParam\",\"colModel\"),o=k.jqGrid(\"getGridParam\",\"colNames\"),p=function(a){return $.ui.multiselect.prototype&&a.data($.ui.multiselect.prototype.widgetFullName||$.ui.multiselect.prototype.widgetName)||a.data(\"ui-multiselect\")||a.data(\"multiselect\")},q=$.jgrid.getRegional(this[0],\"col\");if(!$(\"#colchooser_\"+$.jgrid.jqID(k[0].p.id)).length){if(d=$('<div id=\"colchooser_'+k[0].p.id+'\" style=\"position:relative;overflow:hidden\"><div><select multiple=\"multiple\"></select></div></div>'),e=$(\"select\",d),a=$.extend({width:400,height:240,classname:null,done:function(a){a&&k.jqGrid(\"remapColumns\",a,!0)},msel:\"multiselect\",dlog:\"dialog\",dialog_opts:{minWidth:470,dialogClass:\"ui-jqdialog\"},dlog_opts:function(a){var b={};return b[a.bSubmit]=function(){a.apply_perm(),a.cleanup(!1)},b[a.bCancel]=function(){a.cleanup(!0)},$.extend(!0,{buttons:b,close:function(){a.cleanup(!0)},modal:a.modal||!1,resizable:a.resizable||!0,width:a.width+70,resize:function(){var a=p(e),b=a.container.closest(\".ui-dialog-content\");b.length>0&&\"object\"==typeof b[0].style?b[0].style.width=\"\":b.css(\"width\",\"\"),a.selectedList.height(Math.max(a.selectedContainer.height()-a.selectedActions.outerHeight()-1,1)),a.availableList.height(Math.max(a.availableContainer.height()-a.availableActions.outerHeight()-1,1))}},a.dialog_opts||{})},apply_perm:function(){var c=[];$(\"option\",e).each(function(){$(this).is(\"[selected]\")?k.jqGrid(\"showCol\",n[this.value].name):k.jqGrid(\"hideCol\",n[this.value].name)}),$(\"option[selected]\",e).each(function(){c.push(parseInt(this.value,10))}),$.each(c,function(){delete l[n[parseInt(this,10)].name]}),$.each(l,function(){var a=parseInt(this,10);c=b(c,a,a)}),a.done&&a.done.call(k,c),k.jqGrid(\"setGridWidth\",k[0].p.width,k[0].p.shrinkToFit)},cleanup:function(b){c(a.dlog,d,\"destroy\"),c(a.msel,e,\"destroy\"),d.remove(),b&&a.done&&a.done.call(k)},msel_opts:{}},q,a||{}),$.ui&&$.ui.multiselect&&$.ui.multiselect.defaults){if(!$.jgrid._multiselect)return void alert(\"Multiselect plugin loaded after jqGrid. Please load the plugin before the jqGrid!\");a.msel_opts=$.extend($.ui.multiselect.defaults,a.msel_opts)}a.caption&&d.attr(\"title\",a.caption),a.classname&&(d.addClass(a.classname),e.addClass(a.classname)),a.width&&($(\">div\",d).css({width:a.width,margin:\"0 auto\"}),e.css(\"width\",a.width)),a.height&&($(\">div\",d).css(\"height\",a.height),e.css(\"height\",a.height-10)),e.empty(),$.each(n,function(a){return l[this.name]=a,this.hidedlg?void(this.hidden||m.push(a)):void e.append(\"<option value='\"+a+\"' \"+(this.hidden?\"\":\"selected='selected'\")+\">\"+$.jgrid.stripHtml(o[a])+\"</option>\")}),f=$.isFunction(a.dlog_opts)?a.dlog_opts.call(k,a):a.dlog_opts,c(a.dlog,d,f),g=$.isFunction(a.msel_opts)?a.msel_opts.call(k,a):a.msel_opts,c(a.msel,e,g),h=$(\"#colchooser_\"+$.jgrid.jqID(k[0].p.id)),h.css({margin:\"auto\"}),h.find(\">div\").css({width:\"100%\",height:\"100%\",margin:\"auto\"}),i=p(e),i.container.css({width:\"100%\",height:\"100%\",margin:\"auto\"}),i.selectedContainer.css({width:100*i.options.dividerLocation+\"%\",height:\"100%\",margin:\"auto\",boxSizing:\"border-box\"}),i.availableContainer.css({width:100-100*i.options.dividerLocation+\"%\",height:\"100%\",margin:\"auto\",boxSizing:\"border-box\"}),i.selectedList.css(\"height\",\"auto\"),i.availableList.css(\"height\",\"auto\"),j=Math.max(i.selectedList.height(),i.availableList.height()),j=Math.min(j,$(window).height()),i.selectedList.css(\"height\",j),i.availableList.css(\"height\",j)}},sortableRows:function(a){return this.each(function(){var b=this;b.grid&&(b.p.treeGrid||$.fn.sortable&&(a=$.extend({cursor:\"move\",axis:\"y\",items:\" > .jqgrow\"},a||{}),a.start&&$.isFunction(a.start)?(a._start_=a.start,delete a.start):a._start_=!1,a.update&&$.isFunction(a.update)?(a._update_=a.update,delete a.update):a._update_=!1,a.start=function(c,d){if($(d.item).css(\"border-width\",\"0\"),$(\"td\",d.item).each(function(a){this.style.width=b.grid.cols[a].style.width}),b.p.subGrid){var e=$(d.item).attr(\"id\");try{$(b).jqGrid(\"collapseSubGridRow\",e)}catch(f){}}a._start_&&a._start_.apply(this,[c,d])},a.update=function(c,d){$(d.item).css(\"border-width\",\"\"),b.p.rownumbers===!0&&$(\"td.jqgrid-rownum\",b.rows).each(function(a){$(this).html(a+1+(parseInt(b.p.page,10)-1)*parseInt(b.p.rowNum,10))}),a._update_&&a._update_.apply(this,[c,d])},$(\"tbody:first\",b).sortable(a),$(\"tbody:first > .jqgrow\",b).disableSelection()))})},gridDnD:function(a){return this.each(function(){function b(){var a=$.data(e,\"dnd\");$(\"tr.jqgrow:not(.ui-draggable)\",e).draggable($.isFunction(a.drag)?a.drag.call($(e),a):a.drag)}var c,d,e=this;if(e.grid&&!e.p.treeGrid&&$.fn.draggable&&$.fn.droppable){var f=\"<table id='jqgrid_dnd' class='ui-jqgrid-dnd'></table>\";if(void 0===$(\"#jqgrid_dnd\")[0]&&$(\"body\").append(f),\"string\"==typeof a&&\"updateDnD\"===a&&e.p.jqgdnd===!0)return void b();if(a=$.extend({drag:function(a){return $.extend({start:function(b,c){var d,f;if(e.p.subGrid){f=$(c.helper).attr(\"id\");try{$(e).jqGrid(\"collapseSubGridRow\",f)}catch(g){}}for(d=0;d<$.data(e,\"dnd\").connectWith.length;d++)0===$($.data(e,\"dnd\").connectWith[d]).jqGrid(\"getGridParam\",\"reccount\")&&$($.data(e,\"dnd\").connectWith[d]).jqGrid(\"addRowData\",\"jqg_empty_row\",{});c.helper.addClass(\"ui-state-highlight\"),$(\"td\",c.helper).each(function(a){this.style.width=e.grid.headers[a].width+\"px\"}),a.onstart&&$.isFunction(a.onstart)&&a.onstart.call($(e),b,c)},stop:function(b,c){var d,f;for(c.helper.dropped&&!a.dragcopy&&(f=$(c.helper).attr(\"id\"),void 0===f&&(f=$(this).attr(\"id\")),$(e).jqGrid(\"delRowData\",f)),d=0;d<$.data(e,\"dnd\").connectWith.length;d++)$($.data(e,\"dnd\").connectWith[d]).jqGrid(\"delRowData\",\"jqg_empty_row\");a.onstop&&$.isFunction(a.onstop)&&a.onstop.call($(e),b,c)}},a.drag_opts||{})},drop:function(a){return $.extend({accept:function(a){if(!$(a).hasClass(\"jqgrow\"))return a;var b=$(a).closest(\"table.ui-jqgrid-btable\");if(b.length>0&&void 0!==$.data(b[0],\"dnd\")){var c=$.data(b[0],\"dnd\").connectWith;return-1!==$.inArray(\"#\"+$.jgrid.jqID(this.id),c)?!0:!1}return!1},drop:function(b,c){if($(c.draggable).hasClass(\"jqgrow\")){var d=$(c.draggable).attr(\"id\"),f=c.draggable.parent().parent().jqGrid(\"getRowData\",d);if(!a.dropbyname){var g,h,i=0,j={},k=$(\"#\"+$.jgrid.jqID(this.id)).jqGrid(\"getGridParam\",\"colModel\");\ntry{for(h in f)f.hasOwnProperty(h)&&(g=k[i].name,\"cb\"!==g&&\"rn\"!==g&&\"subgrid\"!==g&&f.hasOwnProperty(h)&&k[i]&&(j[g]=f[h]),i++);f=j}catch(l){}}if(c.helper.dropped=!0,a.beforedrop&&$.isFunction(a.beforedrop)){var m=a.beforedrop.call(this,b,c,f,$(\"#\"+$.jgrid.jqID(e.p.id)),$(this));void 0!==m&&null!==m&&\"object\"==typeof m&&(f=m)}if(c.helper.dropped){var n;a.autoid&&($.isFunction(a.autoid)?n=a.autoid.call(this,f):(n=Math.ceil(1e3*Math.random()),n=a.autoidprefix+n)),$(\"#\"+$.jgrid.jqID(this.id)).jqGrid(\"addRowData\",n,f,a.droppos)}a.ondrop&&$.isFunction(a.ondrop)&&a.ondrop.call(this,b,c,f)}}},a.drop_opts||{})},onstart:null,onstop:null,beforedrop:null,ondrop:null,drop_opts:{activeClass:\"ui-state-active\",hoverClass:\"ui-state-hover\"},drag_opts:{revert:\"invalid\",helper:\"clone\",cursor:\"move\",appendTo:\"#jqgrid_dnd\",zIndex:5e3},dragcopy:!1,dropbyname:!1,droppos:\"first\",autoid:!0,autoidprefix:\"dnd_\"},a||{}),a.connectWith)for(a.connectWith=a.connectWith.split(\",\"),a.connectWith=$.map(a.connectWith,function(a){return $.trim(a)}),$.data(e,\"dnd\",a),0===e.p.reccount||e.p.jqgdnd||b(),e.p.jqgdnd=!0,c=0;c<a.connectWith.length;c++)d=a.connectWith[c],$(d).droppable($.isFunction(a.drop)?a.drop.call($(e),a):a.drop)}})},gridResize:function(opts){return this.each(function(){var $t=this,gID=$.jgrid.jqID($t.p.id),req;if($t.grid&&$.fn.resizable){if(opts=$.extend({},opts||{}),opts.alsoResize?(opts._alsoResize_=opts.alsoResize,delete opts.alsoResize):opts._alsoResize_=!1,opts.stop&&$.isFunction(opts.stop)?(opts._stop_=opts.stop,delete opts.stop):opts._stop_=!1,opts.stop=function(a,b){$($t).jqGrid(\"setGridParam\",{height:$(\"#gview_\"+gID+\" .ui-jqgrid-bdiv\").height()}),$($t).jqGrid(\"setGridWidth\",b.size.width,opts.shrinkToFit),opts._stop_&&opts._stop_.call($t,a,b),$t.p.caption&&$(\"#gbox_\"+gID).css({height:\"auto\"}),$t.p.frozenColumns&&(req&&clearTimeout(req),req=setTimeout(function(){req&&clearTimeout(req),$(\"#\"+gID).jqGrid(\"destroyFrozenColumns\"),$(\"#\"+gID).jqGrid(\"setFrozenColumns\")}))},opts._alsoResize_){var optstest=\"{'#gview_\"+gID+\" .ui-jqgrid-bdiv':true,'\"+opts._alsoResize_+\"':true}\";opts.alsoResize=eval(\"(\"+optstest+\")\")}else opts.alsoResize=$(\".ui-jqgrid-bdiv\",\"#gview_\"+gID);delete opts._alsoResize_,$(\"#gbox_\"+gID).resizable(opts)}})}}),$.assocArraySize=function(a){var b,c=0;for(b in a)a.hasOwnProperty(b)&&c++;return c},$.jgrid.extend({pivotSetup:function(a,b){var c=[],d=[],e=[],f=[],g=[],h={grouping:!0,groupingView:{groupField:[],groupSummary:[],groupSummaryPos:[]}},i=[],j=$.extend({rowTotals:!1,rowTotalsText:\"Total\",colTotals:!1,groupSummary:!0,groupSummaryPos:\"header\",frozenStaticCols:!1},b||{});return this.each(function(){function b(a,b,c){var d;return d=_pivotfilter.call(a,b,c),d.length>0?d[0]:null}function k(a,b){var c,d=0,e=!0;for(c in a)if(a.hasOwnProperty(c)){if(a[c]!=this[d]){e=!1;break}if(d++,d>=this.length)break}return e&&(p=b),e}function l(a,b,c,d){var e;switch(a){case\"sum\":e=parseFloat(b||0)+parseFloat(d[c]||0);break;case\"count\":(\"\"===b||null==b)&&(b=0),e=d.hasOwnProperty(c)?b+1:0;break;case\"min\":e=\"\"===b||null==b?parseFloat(d[c]||0):Math.min(parseFloat(b),parseFloat(d[c]||0));break;case\"max\":e=\"\"===b||null==b?parseFloat(d[c]||0):Math.max(parseFloat(b),parseFloat(d[c]||0))}return e}function m(a,b,c,d){var e,h,i,j,k=b.length,m=\"\",n=[];for($.isArray(c)?(j=c.length,n=c):(j=1,n[0]=c),f=[],g=[],f.root=0,i=0;j>i;i++){var o,p=[];for(e=0;k>e;e++){if(null==c)h=$.trim(b[e].member)+\"_\"+b[e].aggregator,o=h,n[0]=b[e].label||b[e].aggregator+\" \"+$.trim(b[e].member);else{o=c[i].replace(/\\s+/g,\"\");try{h=1===k?m+o:m+o+\"_\"+b[e].aggregator+\"_\"+String(e)}catch(q){}n[i]=c[i]}h=isNaN(parseInt(h,10))?h:h+\" \",d[h]=p[h]=l(b[e].aggregator,d[h],b[e].member,a),1>=i&&\"_r_Totals\"!==o&&\"\"===m&&(m=o)}f[h]=p,g[h]=n[i]}return d}function n(a){var b,d,e,f,g;for(e in a)if(a.hasOwnProperty(e)){if(\"object\"!=typeof a[e]){if(\"level\"===e){if(void 0===J[a.level]&&(J[a.level]=\"\",a.level>0&&\"_r_Totals\"!==a.text&&(i[a.level-1]={useColSpanStyle:!1,groupHeaders:[]})),J[a.level]!==a.text&&a.children.length&&\"_r_Totals\"!==a.text&&a.level>0){i[a.level-1].groupHeaders.push({titleText:a.label,numberOfColumns:0});var h=i[a.level-1].groupHeaders.length-1,k=0===h?L:K+t;if(a.level-1===(j.rowTotals?1:0)&&h>0){for(var l=0,m=0;h>m;m++)l+=i[a.level-1].groupHeaders[m].numberOfColumns;l&&(k=l+r)}c[k]&&(i[a.level-1].groupHeaders[h].startColumnName=c[k].name,i[a.level-1].groupHeaders[h].numberOfColumns=c.length-k),K=c.length}J[a.level]=a.text}if(a.level===s&&\"level\"===e&&s>0)if(t>1){var o=1;for(b in a.fields)a.fields.hasOwnProperty(b)&&(1===o&&i[s-1].groupHeaders.push({startColumnName:b,numberOfColumns:1,titleText:a.label||a.text}),o++);i[s-1].groupHeaders[i[s-1].groupHeaders.length-1].numberOfColumns=o-1}else i.splice(s-1,1)}if(null!=a[e]&&\"object\"==typeof a[e]&&n(a[e]),\"level\"===e&&a.level>0&&a.level===(0===s?a.level:s)){d=0;for(b in a.fields)if(a.fields.hasOwnProperty(b)){g={};for(f in j.aggregates[d])if(j.aggregates[d].hasOwnProperty(f))switch(f){case\"member\":case\"label\":case\"aggregator\":break;default:g[f]=j.aggregates[d][f]}t>1?(g.name=b,g.label=j.aggregates[d].label||a.label):(g.name=a.text,g.label=\"_r_Totals\"===a.text?j.rowTotalsText:a.label),c.push(g),d++}}}}var o,p,q,r,s,t,u,v,w=a.length,x=0;if(j.rowTotals&&j.yDimension.length>0){var y=j.yDimension[0].dataName;j.yDimension.splice(0,0,{dataName:y}),j.yDimension[0].converter=function(){return\"_r_Totals\"}}if(r=$.isArray(j.xDimension)?j.xDimension.length:0,s=j.yDimension.length,t=$.isArray(j.aggregates)?j.aggregates.length:0,0===r||0===t)throw\"xDimension or aggregates optiona are not set!\";var z;for(q=0;r>q;q++)z={name:j.xDimension[q].dataName,frozen:j.frozenStaticCols},null==j.xDimension[q].isGroupField&&(j.xDimension[q].isGroupField=!0),z=$.extend(!0,z,j.xDimension[q]),c.push(z);for(var A=r-1,B={};w>x;){o=a[x];var C=[],D=[];u={},q=0;do C[q]=$.trim(o[j.xDimension[q].dataName]),u[j.xDimension[q].dataName]=C[q],q++;while(r>q);var E=0;if(p=-1,v=b(d,k,C)){if(p>=0){if(E=0,s>=1){for(E=0;s>E;E++)D[E]=$.trim(o[j.yDimension[E].dataName]),j.yDimension[E].converter&&$.isFunction(j.yDimension[E].converter)&&(D[E]=j.yDimension[E].converter.call(this,D[E],C,D));v=m(o,j.aggregates,D,v)}else 0===s&&(v=m(o,j.aggregates,null,v));d[p]=v}}else{if(E=0,s>=1){for(E=0;s>E;E++)D[E]=$.trim(o[j.yDimension[E].dataName]),j.yDimension[E].converter&&$.isFunction(j.yDimension[E].converter)&&(D[E]=j.yDimension[E].converter.call(this,D[E],C,D));u=m(o,j.aggregates,D,u)}else 0===s&&(u=m(o,j.aggregates,null,u));d.push(u)}var F,G=0,H=null,I=null;for(F in f)if(f.hasOwnProperty(F)){if(0===G)B.children&&void 0!==B.children||(B={text:F,level:0,children:[],label:F}),H=B.children;else{for(I=null,q=0;q<H.length;q++)if(H[q].text===F){I=H[q];break}I?H=I.children:(H.push({children:[],text:F,level:G,fields:f[F],label:g[F]}),H=H[H.length-1].children)}G++}x++}var J=[],K=c.length,L=K;s>0&&(i[s-1]={useColSpanStyle:!1,groupHeaders:[]}),n(B);var M;if(j.colTotals)for(var N=d.length;N--;)for(q=r;q<c.length;q++)M=c[q].name,e[M]?e[M]+=parseFloat(d[N][M]||0):e[M]=parseFloat(d[N][M]||0);if(A>0)for(q=0;A>q;q++)c[q].isGroupField&&(h.groupingView.groupField.push(c[q].name),h.groupingView.groupSummary.push(j.groupSummary),h.groupingView.groupSummaryPos.push(j.groupSummaryPos));else h.grouping=!1;h.sortname=c[A].name,h.groupingView.hideFirstGroupCol=!0}),{colModel:c,rows:d,groupOptions:h,groupHeaders:i,summary:e}},jqPivot:function(a,b,c,d){return this.each(function(){function e(a){var d,e=jQuery(f).jqGrid(\"pivotSetup\",a,b),g=$.assocArraySize(e.summary)>0?!0:!1,h=$.jgrid.from.call(f,e.rows);for(d=0;d<e.groupOptions.groupingView.groupField.length;d++)h.orderBy(e.groupOptions.groupingView.groupField[d],\"a\",\"text\",\"\");jQuery(f).jqGrid($.extend(!0,{datastr:$.extend(h.select(),g?{userdata:e.summary}:{}),datatype:\"jsonstring\",footerrow:g,userDataOnFooter:g,colModel:e.colModel,viewrecords:!0,sortname:b.xDimension[0].dataName},e.groupOptions,c||{}));var i=e.groupHeaders;if(i.length)for(d=0;d<i.length;d++)i[d]&&i[d].groupHeaders.length&&jQuery(f).jqGrid(\"setGroupHeaders\",i[d]);b.frozenStaticCols&&jQuery(f).jqGrid(\"setFrozenColumns\")}var f=this;\"string\"==typeof a?$.ajax($.extend({url:a,dataType:\"json\",success:function(a){e($.jgrid.getAccessor(a,d&&d.reader?d.reader:\"rows\"))}},d||{})):e(a)})}}),$.jgrid.extend({setSubGrid:function(){return this.each(function(){var a,b,c=this,d=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].subgrid,e={plusicon:d.icon_plus,minusicon:d.icon_minus,openicon:d.icon_open,expandOnLoad:!1,delayOnLoad:50,selectOnExpand:!1,selectOnCollapse:!1,reloadOnExpand:!0};if(c.p.subGridOptions=$.extend(e,c.p.subGridOptions||{}),c.p.colNames.unshift(\"\"),c.p.colModel.unshift({name:\"subgrid\",width:$.jgrid.cell_width?c.p.subGridWidth+c.p.cellLayout:c.p.subGridWidth,sortable:!1,resizable:!1,hidedlg:!0,search:!1,fixed:!0}),a=c.p.subGridModel,a[0])for(a[0].align=$.extend([],a[0].align||[]),b=0;b<a[0].name.length;b++)a[0].align[b]=a[0].align[b]||\"left\"})},addSubGridCell:function(a,b){var c,d,e,f=\"\";return this.each(function(){f=this.formatCol(a,b),d=this.p.id,c=this.p.subGridOptions.plusicon,e=$.jgrid.styleUI[this.p.styleUI||\"jQueryUI\"].common}),'<td role=\"gridcell\" aria-describedby=\"'+d+'_subgrid\" class=\"ui-sgcollapsed sgcollapsed\" '+f+\"><a style='cursor:pointer;' class='ui-sghref'><span class='\"+e.icon_base+\" \"+c+\"'></span></a></td>\"},addSubGrid:function(a,b){return this.each(function(){var c=this;if(c.grid){var d,e,f,g,h,i=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].base,j=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].common,k=function(a,b,d){var e=$(\"<td align='\"+c.p.subGridModel[0].align[d]+\"'></td>\").html(b);$(a).append(e)},l=function(a,b){var d,e,f,g=$(\"<table class='\"+i.rowTable+\" ui-common-table'><tbody></tbody></table>\"),h=$(\"<tr></tr>\");for(e=0;e<c.p.subGridModel[0].name.length;e++)d=$(\"<th class='\"+i.headerBox+\" ui-th-subgrid ui-th-column ui-th-\"+c.p.direction+\"'></th>\"),$(d).html(c.p.subGridModel[0].name[e]),$(d).width(c.p.subGridModel[0].width[e]),$(h).append(d);$(g).append(h),a&&(f=c.p.xmlReader.subgrid,$(f.root+\" \"+f.row,a).each(function(){if(h=$(\"<tr class='\"+j.content+\" ui-subtblcell'></tr>\"),f.repeatitems===!0)$(f.cell,this).each(function(a){k(h,$(this).text()||\"&#160;\",a)});else{var a=c.p.subGridModel[0].mapping||c.p.subGridModel[0].name;if(a)for(e=0;e<a.length;e++)k(h,$(a[e],this).text()||\"&#160;\",e)}$(g).append(h)}));var l=$(\"table:first\",c.grid.bDiv).attr(\"id\")+\"_\";return $(\"#\"+$.jgrid.jqID(l+b)).append(g),c.grid.hDiv.loading=!1,$(\"#load_\"+$.jgrid.jqID(c.p.id)).hide(),!1},m=function(a,b){var d,e,f,g,h,l,m=$(\"<table class='\"+i.rowTable+\" ui-common-table'><tbody></tbody></table>\"),n=$(\"<tr></tr>\");for(f=0;f<c.p.subGridModel[0].name.length;f++)d=$(\"<th class='\"+i.headerBox+\" ui-th-subgrid ui-th-column ui-th-\"+c.p.direction+\"'></th>\"),$(d).html(c.p.subGridModel[0].name[f]),$(d).width(c.p.subGridModel[0].width[f]),$(n).append(d);if($(m).append(n),a&&(h=c.p.jsonReader.subgrid,e=$.jgrid.getAccessor(a,h.root),void 0!==e))for(f=0;f<e.length;f++){if(g=e[f],n=$(\"<tr class='\"+j.content+\" ui-subtblcell'></tr>\"),h.repeatitems===!0)for(h.cell&&(g=g[h.cell]),l=0;l<g.length;l++)k(n,g[l]||\"&#160;\",l);else{var o=c.p.subGridModel[0].mapping||c.p.subGridModel[0].name;if(o.length)for(l=0;l<o.length;l++)k(n,g[o[l]]||\"&#160;\",l)}$(m).append(n)}var p=$(\"table:first\",c.grid.bDiv).attr(\"id\")+\"_\";return $(\"#\"+$.jgrid.jqID(p+b)).append(m),c.grid.hDiv.loading=!1,$(\"#load_\"+$.jgrid.jqID(c.p.id)).hide(),!1},n=function(a){var b,d,e,f;if(b=$(a).attr(\"id\"),d={nd_:(new Date).getTime()},d[c.p.prmNames.subgridid]=b,!c.p.subGridModel[0])return!1;if(c.p.subGridModel[0].params)for(f=0;f<c.p.subGridModel[0].params.length;f++)for(e=0;e<c.p.colModel.length;e++)c.p.colModel[e].name===c.p.subGridModel[0].params[f]&&(d[c.p.colModel[e].name]=$(\"td:eq(\"+e+\")\",a).text().replace(/\\&#160\\;/gi,\"\"));if(!c.grid.hDiv.loading)switch(c.grid.hDiv.loading=!0,$(\"#load_\"+$.jgrid.jqID(c.p.id)).show(),c.p.subgridtype||(c.p.subgridtype=c.p.datatype),$.isFunction(c.p.subgridtype)?c.p.subgridtype.call(c,d):c.p.subgridtype=c.p.subgridtype.toLowerCase(),c.p.subgridtype){case\"xml\":case\"json\":$.ajax($.extend({type:c.p.mtype,url:$.isFunction(c.p.subGridUrl)?c.p.subGridUrl.call(c,d):c.p.subGridUrl,dataType:c.p.subgridtype,data:$.isFunction(c.p.serializeSubGridData)?c.p.serializeSubGridData.call(c,d):d,complete:function(a){\"xml\"===c.p.subgridtype?l(a.responseXML,b):m($.jgrid.parse(a.responseText),b),a=null}},$.jgrid.ajaxOptions,c.p.ajaxSubgridOptions||{}))}return!1},o=0;$.each(c.p.colModel,function(){(this.hidden===!0||\"rn\"===this.name||\"cb\"===this.name)&&o++});var p=c.rows.length,q=1;for(void 0!==b&&b>0&&(q=b,p=b+1);p>q;)$(c.rows[q]).hasClass(\"jqgrow\")&&(c.p.scroll&&$(c.rows[q].cells[a]).unbind(\"click\"),$(c.rows[q].cells[a]).bind(\"click\",function(){var b=$(this).parent(\"tr\")[0];if(e=c.p.id,d=b.id,h=$(\"#\"+e+\"_\"+d+\"_expandedContent\"),$(this).hasClass(\"sgcollapsed\")){if(g=$(c).triggerHandler(\"jqGridSubGridBeforeExpand\",[e+\"_\"+d,d]),g=g===!1||\"stop\"===g?!1:!0,g&&$.isFunction(c.p.subGridBeforeExpand)&&(g=c.p.subGridBeforeExpand.call(c,e+\"_\"+d,d)),g===!1)return!1;c.p.subGridOptions.reloadOnExpand===!0||c.p.subGridOptions.reloadOnExpand===!1&&!h.hasClass(\"ui-subgrid\")?(f=a>=1?\"<td colspan='\"+a+\"'>&#160;</td>\":\"\",$(b).after(\"<tr role='row' id='\"+e+\"_\"+d+\"_expandedContent' class='ui-subgrid ui-sg-expanded'>\"+f+\"<td class='\"+j.content+\" subgrid-cell'><span class='\"+j.icon_base+\" \"+c.p.subGridOptions.openicon+\"'></span></td><td colspan='\"+parseInt(c.p.colNames.length-1-o,10)+\"' class='\"+j.content+\" subgrid-data'><div id=\"+e+\"_\"+d+\" class='tablediv'></div></td></tr>\"),$(c).triggerHandler(\"jqGridSubGridRowExpanded\",[e+\"_\"+d,d]),$.isFunction(c.p.subGridRowExpanded)?c.p.subGridRowExpanded.call(c,e+\"_\"+d,d):n(b)):h.show().removeClass(\"ui-sg-collapsed\").addClass(\"ui-sg-expanded\"),$(this).html(\"<a style='cursor:pointer;' class='ui-sghref'><span class='\"+j.icon_base+\" \"+c.p.subGridOptions.minusicon+\"'></span></a>\").removeClass(\"sgcollapsed\").addClass(\"sgexpanded\"),c.p.subGridOptions.selectOnExpand&&$(c).jqGrid(\"setSelection\",d)}else if($(this).hasClass(\"sgexpanded\")){if(g=$(c).triggerHandler(\"jqGridSubGridRowColapsed\",[e+\"_\"+d,d]),g=g===!1||\"stop\"===g?!1:!0,g&&$.isFunction(c.p.subGridRowColapsed)&&(g=c.p.subGridRowColapsed.call(c,e+\"_\"+d,d)),g===!1)return!1;c.p.subGridOptions.reloadOnExpand===!0?h.remove(\".ui-subgrid\"):h.hasClass(\"ui-subgrid\")&&h.hide().addClass(\"ui-sg-collapsed\").removeClass(\"ui-sg-expanded\"),$(this).html(\"<a style='cursor:pointer;' class='ui-sghref'><span class='\"+j.icon_base+\" \"+c.p.subGridOptions.plusicon+\"'></span></a>\").removeClass(\"sgexpanded\").addClass(\"sgcollapsed\"),c.p.subGridOptions.selectOnCollapse&&$(c).jqGrid(\"setSelection\",d)}return!1})),q++;c.p.subGridOptions.expandOnLoad===!0&&$(c.rows).filter(\".jqgrow\").each(function(a,b){$(b.cells[0]).click()}),c.subGridXml=function(a,b){l(a,b)},c.subGridJson=function(a,b){m(a,b)}}})},expandSubGridRow:function(a){return this.each(function(){var b=this;if((b.grid||a)&&b.p.subGrid===!0){var c=$(this).jqGrid(\"getInd\",a,!0);if(c){var d=$(\"td.sgcollapsed\",c)[0];d&&$(d).trigger(\"click\")}}})},collapseSubGridRow:function(a){return this.each(function(){var b=this;if((b.grid||a)&&b.p.subGrid===!0){var c=$(this).jqGrid(\"getInd\",a,!0);if(c){var d=$(\"td.sgexpanded\",c)[0];d&&$(d).trigger(\"click\")}}})},toggleSubGridRow:function(a){return this.each(function(){var b=this;if((b.grid||a)&&b.p.subGrid===!0){var c=$(this).jqGrid(\"getInd\",a,!0);if(c){var d=$(\"td.sgcollapsed\",c)[0];d?$(d).trigger(\"click\"):(d=$(\"td.sgexpanded\",c)[0],d&&$(d).trigger(\"click\"))}}})}}),$.jgrid.extend({setTreeNode:function(a,b){return this.each(function(){var c=this;if(c.grid&&c.p.treeGrid)for(var d,e,f,g,h,i,j,k,l=c.p.expColInd,m=c.p.treeReader.expanded_field,n=c.p.treeReader.leaf_field,o=c.p.treeReader.level_field,p=c.p.treeReader.icon_field,q=c.p.treeReader.loaded,r=$.jgrid.styleUI[c.p.styleUI||\"jQueryUI\"].common;b>a;){var s,t=$.jgrid.stripPref(c.p.idPrefix,c.rows[a].id),u=c.p._index[t];j=c.p.data[u],\"nested\"===c.p.treeGridModel&&(j[n]||(d=parseInt(j[c.p.treeReader.left_field],10),e=parseInt(j[c.p.treeReader.right_field],10),j[n]=e===d+1?\"true\":\"false\",c.rows[a].cells[c.p._treeleafpos].innerHTML=j[n])),f=parseInt(j[o],10),0===c.p.tree_root_level?(g=f+1,h=f):(g=f,h=f-1),i=\"<div class='tree-wrap tree-wrap-\"+c.p.direction+\"' style='width:\"+18*g+\"px;'>\",i+=\"<div style='\"+(\"rtl\"===c.p.direction?\"right:\":\"left:\")+18*h+\"px;' class='\"+r.icon_base+\" \",void 0!==j[q]&&(j[q]=\"true\"===j[q]||j[q]===!0?!0:!1),\"true\"===j[n]||j[n]===!0?(i+=(void 0!==j[p]&&\"\"!==j[p]?j[p]:c.p.treeIcons.leaf)+\" tree-leaf treeclick\",j[n]=!0,k=\"leaf\"):(j[n]=!1,k=\"\"),j[m]=(\"true\"===j[m]||j[m]===!0?!0:!1)&&(j[q]||void 0===j[q]),i+=j[m]===!1?j[n]===!0?\"'\":c.p.treeIcons.plus+\" tree-plus treeclick'\":j[n]===!0?\"'\":c.p.treeIcons.minus+\" tree-minus treeclick'\",i+=\"></div></div>\",$(c.rows[a].cells[l]).wrapInner(\"<span class='cell-wrapper\"+k+\"'></span>\").prepend(i),f!==parseInt(c.p.tree_root_level,10)&&(s=$(c).jqGrid(\"isVisibleNode\",j),s||$(c.rows[a]).css(\"display\",\"none\")),$(c.rows[a].cells[l]).find(\"div.treeclick\").bind(\"click\",function(a){var b=a.target||a.srcElement,d=$.jgrid.stripPref(c.p.idPrefix,$(b,c.rows).closest(\"tr.jqgrow\")[0].id),e=c.p._index[d];return c.p.data[e][n]||(c.p.data[e][m]?($(c).jqGrid(\"collapseRow\",c.p.data[e]),$(c).jqGrid(\"collapseNode\",c.p.data[e])):($(c).jqGrid(\"expandRow\",c.p.data[e]),$(c).jqGrid(\"expandNode\",c.p.data[e]))),!1}),c.p.ExpandColClick===!0&&$(c.rows[a].cells[l]).find(\"span.cell-wrapper\").css(\"cursor\",\"pointer\").bind(\"click\",function(a){var b=a.target||a.srcElement,d=$.jgrid.stripPref(c.p.idPrefix,$(b,c.rows).closest(\"tr.jqgrow\")[0].id),e=c.p._index[d];return c.p.data[e][n]||(c.p.data[e][m]?($(c).jqGrid(\"collapseRow\",c.p.data[e]),$(c).jqGrid(\"collapseNode\",c.p.data[e])):($(c).jqGrid(\"expandRow\",c.p.data[e]),$(c).jqGrid(\"expandNode\",c.p.data[e]))),$(c).jqGrid(\"setSelection\",d),!1}),a++}})},setTreeGrid:function(){return this.each(function(){var a,b,c,d,e=this,f=0,g=!1,h=[],i=$.jgrid.styleUI[e.p.styleUI||\"jQueryUI\"].treegrid;if(e.p.treeGrid){e.p.treedatatype||$.extend(e.p,{treedatatype:e.p.datatype}),e.p.loadonce&&(e.p.treedatatype=\"local\"),e.p.subGrid=!1,e.p.altRows=!1,e.p.pgbuttons=!1,e.p.pginput=!1,e.p.gridview=!0,null===e.p.rowTotal&&(e.p.rowNum=1e4),e.p.multiselect=!1,e.p.rowList=[],e.p.expColInd=0,a=i.icon_plus,\"jQueryUI\"===e.p.styleUI&&(a+=\"rtl\"===e.p.direction?\"w\":\"e\"),e.p.treeIcons=$.extend({plus:a,minus:i.icon_minus,leaf:i.icon_leaf},e.p.treeIcons||{}),\"nested\"===e.p.treeGridModel?e.p.treeReader=$.extend({level_field:\"level\",left_field:\"lft\",right_field:\"rgt\",leaf_field:\"isLeaf\",expanded_field:\"expanded\",loaded:\"loaded\",icon_field:\"icon\"},e.p.treeReader):\"adjacency\"===e.p.treeGridModel&&(e.p.treeReader=$.extend({level_field:\"level\",parent_id_field:\"parent\",leaf_field:\"isLeaf\",expanded_field:\"expanded\",loaded:\"loaded\",icon_field:\"icon\"},e.p.treeReader));for(c in e.p.colModel)if(e.p.colModel.hasOwnProperty(c)){b=e.p.colModel[c].name,b!==e.p.ExpandColumn||g||(g=!0,e.p.expColInd=f),f++;for(d in e.p.treeReader)e.p.treeReader.hasOwnProperty(d)&&e.p.treeReader[d]===b&&h.push(b)}$.each(e.p.treeReader,function(a,b){b&&-1===$.inArray(b,h)&&(\"leaf_field\"===a&&(e.p._treeleafpos=f),f++,e.p.colNames.push(b),e.p.colModel.push({name:b,width:1,hidden:!0,sortable:!1,resizable:!1,hidedlg:!0,editable:!0,search:!1}))})}})},expandRow:function(a){this.each(function(){var b=this;if(b.grid&&b.p.treeGrid){var c=$(b).jqGrid(\"getNodeChildren\",a),d=b.p.treeReader.expanded_field,e=a[b.p.localReader.id],f=$.isFunction(b.p.beforeExpandTreeGridRow)?b.p.beforeExpandTreeGridRow.call(b,e,a,c):!0;f!==!1&&($(c).each(function(){var a=b.p.idPrefix+$.jgrid.getAccessor(this,b.p.localReader.id);$($(b).jqGrid(\"getGridRowById\",a)).css(\"display\",\"\"),this[d]&&$(b).jqGrid(\"expandRow\",this)}),$.isFunction(b.p.afterExpandTreeGridRow)&&b.p.afterExpandTreeGridRow.call(b,e,a,c))}})},collapseRow:function(a){this.each(function(){var b=this;if(b.grid&&b.p.treeGrid){var c=$(b).jqGrid(\"getNodeChildren\",a),d=b.p.treeReader.expanded_field,e=a[b.p.localReader.id],f=$.isFunction(b.p.beforeCollapseTreeGridRow)?b.p.beforeCollapseTreeGridRow.call(b,e,a,c):!0;f!==!1&&($(c).each(function(){var a=b.p.idPrefix+$.jgrid.getAccessor(this,b.p.localReader.id);$($(b).jqGrid(\"getGridRowById\",a)).css(\"display\",\"none\"),this[d]&&$(b).jqGrid(\"collapseRow\",this)}),$.isFunction(b.p.afterCollapseTreeGridRow)&&b.p.afterCollapseTreeGridRow.call(b,e,a,c))}})},getRootNodes:function(a){var b=[];return this.each(function(){var c,d,e,f=this;if(f.grid&&f.p.treeGrid)switch(\"boolean\"!=typeof a&&(a=!1),e=a?$(f).jqGrid(\"getRowData\",null,!0):f.p.data,f.p.treeGridModel){case\"nested\":c=f.p.treeReader.level_field,$(e).each(function(){parseInt(this[c],10)===parseInt(f.p.tree_root_level,10)&&b.push(a?f.p.data[f.p._index[this[f.p.keyName]]]:this)});break;case\"adjacency\":d=f.p.treeReader.parent_id_field,$(e).each(function(){(null===this[d]||\"null\"===String(this[d]).toLowerCase())&&b.push(a?f.p.data[f.p._index[this[f.p.keyName]]]:this)})}}),b},getNodeDepth:function(a){var b=null;return this.each(function(){if(this.grid&&this.p.treeGrid){var c=this;switch(c.p.treeGridModel){case\"nested\":var d=c.p.treeReader.level_field;b=parseInt(a[d],10)-parseInt(c.p.tree_root_level,10);break;case\"adjacency\":b=$(c).jqGrid(\"getNodeAncestors\",a).length}}}),b},getNodeParent:function(a){var b=null;return this.each(function(){var c=this;if(c.grid&&c.p.treeGrid)switch(c.p.treeGridModel){case\"nested\":var d=c.p.treeReader.left_field,e=c.p.treeReader.right_field,f=c.p.treeReader.level_field,g=parseInt(a[d],10),h=parseInt(a[e],10),i=parseInt(a[f],10);$(this.p.data).each(function(){return parseInt(this[f],10)===i-1&&parseInt(this[d],10)<g&&parseInt(this[e],10)>h?(b=this,!1):void 0});break;case\"adjacency\":for(var j=c.p.treeReader.parent_id_field,k=c.p.localReader.id,l=a[k],m=c.p._index[l];m--;)if(c.p.data[m][k]===$.jgrid.stripPref(c.p.idPrefix,a[j])){b=c.p.data[m];break}}}),b},getNodeChildren:function(a){var b=[];return this.each(function(){var c=this;if(c.grid&&c.p.treeGrid)switch(c.p.treeGridModel){case\"nested\":var d=c.p.treeReader.left_field,e=c.p.treeReader.right_field,f=c.p.treeReader.level_field,g=parseInt(a[d],10),h=parseInt(a[e],10),i=parseInt(a[f],10);$(this.p.data).each(function(){parseInt(this[f],10)===i+1&&parseInt(this[d],10)>g&&parseInt(this[e],10)<h&&b.push(this)});break;case\"adjacency\":var j=c.p.treeReader.parent_id_field,k=c.p.localReader.id;$(this.p.data).each(function(){this[j]==$.jgrid.stripPref(c.p.idPrefix,a[k])&&b.push(this)})}}),b},getFullTreeNode:function(a,b){var c=[];return this.each(function(){var d,e=this,f=e.p.treeReader.expanded_field;if(e.grid&&e.p.treeGrid)switch((null==b||\"boolean\"!=typeof b)&&(b=!1),e.p.treeGridModel){case\"nested\":var g=e.p.treeReader.left_field,h=e.p.treeReader.right_field,i=e.p.treeReader.level_field,j=parseInt(a[g],10),k=parseInt(a[h],10),l=parseInt(a[i],10);$(this.p.data).each(function(){parseInt(this[i],10)>=l&&parseInt(this[g],10)>=j&&parseInt(this[g],10)<=k&&(b&&(this[f]=!0),c.push(this))});break;case\"adjacency\":if(a){c.push(a);var m=e.p.treeReader.parent_id_field,n=e.p.localReader.id;$(this.p.data).each(function(a){for(d=c.length,a=0;d>a;a++)if($.jgrid.stripPref(e.p.idPrefix,c[a][n])===this[m]){b&&(this[f]=!0),c.push(this);break}})}}}),c},getNodeAncestors:function(a){var b=[];return this.each(function(){if(this.grid&&this.p.treeGrid)for(var c=$(this).jqGrid(\"getNodeParent\",a);c;)b.push(c),c=$(this).jqGrid(\"getNodeParent\",c)}),b},isVisibleNode:function(a){var b=!0;return this.each(function(){var c=this;if(c.grid&&c.p.treeGrid){var d=$(c).jqGrid(\"getNodeAncestors\",a),e=c.p.treeReader.expanded_field;$(d).each(function(){return b=b&&this[e],b?void 0:!1})}}),b},isNodeLoaded:function(a){var b;return this.each(function(){var c=this;if(c.grid&&c.p.treeGrid){var d=c.p.treeReader.leaf_field,e=c.p.treeReader.loaded;b=void 0!==a?void 0!==a[e]?a[e]:a[d]||$(c).jqGrid(\"getNodeChildren\",a).length>0?!0:!1:!1}}),b},reloadNode:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid){var b=this.p.localReader.id,c=this.p.selrow;$(this).jqGrid(\"delChildren\",a[b]);var d=this.p.treeReader.expanded_field,e=this.p.treeReader.parent_id_field,f=this.p.treeReader.loaded,g=this.p.treeReader.level_field,h=this.p.treeReader.left_field,i=this.p.treeReader.right_field,j=$.jgrid.getAccessor(a,this.p.localReader.id),k=$(\"#\"+j,this.grid.bDiv)[0];a[d]=!0,$(\"div.treeclick\",k).removeClass(this.p.treeIcons.plus+\" tree-plus\").addClass(this.p.treeIcons.minus+\" tree-minus\"),this.p.treeANode=k.rowIndex,this.p.datatype=this.p.treedatatype,\"nested\"===this.p.treeGridModel?$(this).jqGrid(\"setGridParam\",{postData:{nodeid:j,n_left:a[h],n_right:a[i],n_level:a[g]}}):$(this).jqGrid(\"setGridParam\",{postData:{nodeid:j,parentid:a[e],n_level:a[g]}}),$(this).trigger(\"reloadGrid\"),a[f]=!0,\"nested\"===this.p.treeGridModel?$(this).jqGrid(\"setGridParam\",{selrow:c,postData:{nodeid:\"\",n_left:\"\",n_right:\"\",n_level:\"\"}}):$(this).jqGrid(\"setGridParam\",{selrow:c,postData:{nodeid:\"\",parentid:\"\",n_level:\"\"}})}})},expandNode:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid){var b=this.p.treeReader.expanded_field,c=this.p.treeReader.parent_id_field,d=this.p.treeReader.loaded,e=this.p.treeReader.level_field,f=this.p.treeReader.left_field,g=this.p.treeReader.right_field;if(!a[b]){var h=$.jgrid.getAccessor(a,this.p.localReader.id),i=$(\"#\"+this.p.idPrefix+$.jgrid.jqID(h),this.grid.bDiv)[0],j=this.p._index[h],k=$.isFunction(this.p.beforeExpandTreeGridNode)?this.p.beforeExpandTreeGridNode.call(this,h,a):!0;if(k===!1)return;$(this).jqGrid(\"isNodeLoaded\",this.p.data[j])?(a[b]=!0,$(\"div.treeclick\",i).removeClass(this.p.treeIcons.plus+\" tree-plus\").addClass(this.p.treeIcons.minus+\" tree-minus\")):this.grid.hDiv.loading||(a[b]=!0,$(\"div.treeclick\",i).removeClass(this.p.treeIcons.plus+\" tree-plus\").addClass(this.p.treeIcons.minus+\" tree-minus\"),this.p.treeANode=i.rowIndex,this.p.datatype=this.p.treedatatype,\"nested\"===this.p.treeGridModel?$(this).jqGrid(\"setGridParam\",{postData:{nodeid:h,n_left:a[f],n_right:a[g],n_level:a[e]}}):$(this).jqGrid(\"setGridParam\",{postData:{nodeid:h,parentid:a[c],n_level:a[e]}}),$(this).trigger(\"reloadGrid\"),a[d]=!0,\"nested\"===this.p.treeGridModel?$(this).jqGrid(\"setGridParam\",{postData:{nodeid:\"\",n_left:\"\",n_right:\"\",n_level:\"\"}}):$(this).jqGrid(\"setGridParam\",{postData:{nodeid:\"\",parentid:\"\",n_level:\"\"}})),$.isFunction(this.p.afterExpandTreeGridNode)&&this.p.afterExpandTreeGridNode.call(this,h,a)}}})},collapseNode:function(a){return this.each(function(){if(this.grid&&this.p.treeGrid){var b=this.p.treeReader.expanded_field;if(a[b]){var c=$.jgrid.getAccessor(a,this.p.localReader.id),d=$.isFunction(this.p.beforeCollapseTreeGridNode)?this.p.beforeCollapseTreeGridNode.call(this,c,a):!0,e=$(\"#\"+this.p.idPrefix+$.jgrid.jqID(c),this.grid.bDiv)[0];if(a[b]=!1,d===!1)return;$(\"div.treeclick\",e).removeClass(this.p.treeIcons.minus+\" tree-minus\").addClass(this.p.treeIcons.plus+\" tree-plus\"),$.isFunction(this.p.afterCollapseTreeGridNode)&&this.p.afterCollapseTreeGridNode.call(this,c,a)}}})},SortTree:function(a,b,c,d){return this.each(function(){if(this.grid&&this.p.treeGrid){var e,f,g,h,i,j=[],k=this,l=$(this).jqGrid(\"getRootNodes\",k.p.search);for(h=$.jgrid.from.call(this,l),h.orderBy(a,b,c,d),i=h.select(),e=0,f=i.length;f>e;e++)g=i[e],j.push(g),$(this).jqGrid(\"collectChildrenSortTree\",j,g,a,b,c,d);$.each(j,function(a){var b=$.jgrid.getAccessor(this,k.p.localReader.id);$(\"#\"+$.jgrid.jqID(k.p.id)+\" tbody tr:eq(\"+a+\")\").after($(\"tr#\"+$.jgrid.jqID(b),k.grid.bDiv))}),h=null,i=null,j=null}})},searchTree:function(a){var b,c,d,e=a.length||0,f=[],g=[],h=[];return this.each(function(){if(this.grid&&this.p.treeGrid&&e)for(c=this.p.localReader.id,b=0;e>b;b++)f=$(this).jqGrid(\"getNodeAncestors\",a[b]),f.length||f.push(a[b]),d=f[f.length-1][c],-1===$.inArray(d,g)&&(g.push(d),f=$(this).jqGrid(\"getFullTreeNode\",f[f.length-1],!0),h=h.concat(f))}),h},collectChildrenSortTree:function(a,b,c,d,e,f){return this.each(function(){if(this.grid&&this.p.treeGrid){var g,h,i,j,k,l;for(j=$(this).jqGrid(\"getNodeChildren\",b),k=$.jgrid.from.call(this,j),k.orderBy(c,d,e,f),l=k.select(),g=0,h=l.length;h>g;g++)i=l[g],a.push(i),$(this).jqGrid(\"collectChildrenSortTree\",a,i,c,d,e,f)}})},setTreeRow:function(a,b){var c=!1;return this.each(function(){var d=this;d.grid&&d.p.treeGrid&&(c=$(d).jqGrid(\"setRowData\",a,b))}),c},delTreeNode:function(a){return this.each(function(){var b,c,d,e,f,g=this,h=g.p.localReader.id,i=g.p.treeReader.left_field,j=g.p.treeReader.right_field;if(g.grid&&g.p.treeGrid){var k=g.p._index[a];if(void 0!==k){c=parseInt(g.p.data[k][j],10),d=c-parseInt(g.p.data[k][i],10)+1;var l=$(g).jqGrid(\"getFullTreeNode\",g.p.data[k]);if(l.length>0)for(b=0;b<l.length;b++)$(g).jqGrid(\"delRowData\",l[b][h]);if(\"nested\"===g.p.treeGridModel){if(e=$.jgrid.from.call(g,g.p.data).greater(i,c,{stype:\"integer\"}).select(),e.length)for(f in e)e.hasOwnProperty(f)&&(e[f][i]=parseInt(e[f][i],10)-d);if(e=$.jgrid.from.call(g,g.p.data).greater(j,c,{stype:\"integer\"}).select(),e.length)for(f in e)e.hasOwnProperty(f)&&(e[f][j]=parseInt(e[f][j],10)-d)}}}})},delChildren:function(a){return this.each(function(){var b,c,d,e,f=this,g=f.p.localReader.id,h=f.p.treeReader.left_field,i=f.p.treeReader.right_field;if(f.grid&&f.p.treeGrid){var j=f.p._index[a];if(void 0!==j){b=parseInt(f.p.data[j][i],10),c=b-parseInt(f.p.data[j][h],10)+1;var k=$(f).jqGrid(\"getFullTreeNode\",f.p.data[j]);if(k.length>0)for(var l=0;l<k.length;l++)k[l][g]!==a&&$(f).jqGrid(\"delRowData\",k[l][g]);if(\"nested\"===f.p.treeGridModel){if(d=$.jgrid.from(f.p.data).greater(h,b,{stype:\"integer\"}).select(),d.length)for(e in d)d.hasOwnProperty(e)&&(d[e][h]=parseInt(d[e][h],10)-c);if(d=$.jgrid.from(f.p.data).greater(i,b,{stype:\"integer\"}).select(),d.length)for(e in d)d.hasOwnProperty(e)&&(d[e][i]=parseInt(d[e][i],10)-c)}}}})},addChildNode:function(a,b,c,d){var e=this[0];if(c){var f,g,h,i,j,k,l,m,n=e.p.treeReader.expanded_field,o=e.p.treeReader.leaf_field,p=e.p.treeReader.level_field,q=e.p.treeReader.parent_id_field,r=e.p.treeReader.left_field,s=e.p.treeReader.right_field,t=e.p.treeReader.loaded,u=0,v=b;if(void 0===d&&(d=!1),null==a){if(j=e.p.data.length-1,j>=0)for(;j>=0;)u=Math.max(u,parseInt(e.p.data[j][e.p.localReader.id],10)),j--;a=u+1}var w=$(e).jqGrid(\"getInd\",b);if(l=!1,void 0===b||null===b||\"\"===b)b=null,v=null,f=\"last\",i=e.p.tree_root_level,j=e.p.data.length+1;else{f=\"after\",g=e.p._index[b],h=e.p.data[g],b=h[e.p.localReader.id],i=parseInt(h[p],10)+1;var x=$(e).jqGrid(\"getFullTreeNode\",h);x.length?(j=x[x.length-1][e.p.localReader.id],v=j,j=$(e).jqGrid(\"getInd\",v)+1):j=$(e).jqGrid(\"getInd\",b)+1,h[o]&&(l=!0,h[n]=!0,$(e.rows[w]).find(\"span.cell-wrapperleaf\").removeClass(\"cell-wrapperleaf\").addClass(\"cell-wrapper\").end().find(\"div.tree-leaf\").removeClass(e.p.treeIcons.leaf+\" tree-leaf\").addClass(e.p.treeIcons.minus+\" tree-minus\"),e.p.data[g][o]=!1,h[t]=!0)}if(k=j+1,void 0===c[n]&&(c[n]=!1),void 0===c[t]&&(c[t]=!1),c[p]=i,void 0===c[o]&&(c[o]=!0),\"adjacency\"===e.p.treeGridModel&&(c[q]=b),\"nested\"===e.p.treeGridModel){var y,z,A;if(null!==b){if(m=parseInt(h[s],10),y=$.jgrid.from.call(e,e.p.data),y=y.greaterOrEquals(s,m,{stype:\"integer\"}),z=y.select(),z.length)for(A in z)z.hasOwnProperty(A)&&(z[A][r]=z[A][r]>m?parseInt(z[A][r],10)+2:z[A][r],z[A][s]=z[A][s]>=m?parseInt(z[A][s],10)+2:z[A][s]);c[r]=m,c[s]=m+1}else{if(m=parseInt($(e).jqGrid(\"getCol\",s,!1,\"max\"),10),z=$.jgrid.from.call(e,e.p.data).greater(r,m,{stype:\"integer\"}).select(),z.length)for(A in z)z.hasOwnProperty(A)&&(z[A][r]=parseInt(z[A][r],10)+2);if(z=$.jgrid.from.call(e,e.p.data).greater(s,m,{stype:\"integer\"}).select(),z.length)for(A in z)z.hasOwnProperty(A)&&(z[A][s]=parseInt(z[A][s],10)+2);c[r]=m+1,c[s]=m+2}}(null===b||$(e).jqGrid(\"isNodeLoaded\",h)||l)&&($(e).jqGrid(\"addRowData\",a,c,f,v),$(e).jqGrid(\"setTreeNode\",j,k)),h&&!h[n]&&d&&$(e.rows[w]).find(\"div.treeclick\").click()}}}),$.fn.jqDrag=function(a){return i(this,a,\"d\")},$.fn.jqResize=function(a,b){return i(this,a,\"r\",b)},$.jqDnR={dnr:{},e:0,drag:function(a){return\"d\"==M.k?E.css({left:M.X+a.pageX-M.pX,top:M.Y+a.pageY-M.pY}):(E.css({width:Math.max(a.pageX-M.pX+M.W,0),height:Math.max(a.pageY-M.pY+M.H,0)}),M1&&E1.css({width:Math.max(a.pageX-M1.pX+M1.W,0),height:Math.max(a.pageY-M1.pY+M1.H,0)})),!1\n},stop:function(){$(document).unbind(\"mousemove\",J.drag).unbind(\"mouseup\",J.stop)}};var J=$.jqDnR,M=J.dnr,E=J.e,E1,M1,i=function(a,b,c,d){return a.each(function(){b=b?$(b,a):a,b.bind(\"mousedown\",{e:a,k:c},function(a){var b=a.data,c={};if(E=b.e,E1=d?$(d):!1,\"relative\"!=E.css(\"position\"))try{E.position(c)}catch(e){}if(M={X:c.left||f(\"left\")||0,Y:c.top||f(\"top\")||0,W:f(\"width\")||E[0].scrollWidth||0,H:f(\"height\")||E[0].scrollHeight||0,pX:a.pageX,pY:a.pageY,k:b.k},M1=E1&&\"d\"!=b.k?{X:c.left||f1(\"left\")||0,Y:c.top||f1(\"top\")||0,W:E1[0].offsetWidth||f1(\"width\")||0,H:E1[0].offsetHeight||f1(\"height\")||0,pX:a.pageX,pY:a.pageY,k:b.k}:!1,$(\"input.hasDatepicker\",E[0])[0])try{$(\"input.hasDatepicker\",E[0]).datepicker(\"hide\")}catch(g){}return $(document).mousemove($.jqDnR.drag).mouseup($.jqDnR.stop),!1})})},f=function(a){return parseInt(E.css(a),10)||!1},f1=function(a){return parseInt(E1.css(a),10)||!1};$.fn.jqm=function(a){var b={overlay:50,closeoverlay:!0,overlayClass:\"jqmOverlay\",closeClass:\"jqmClose\",trigger:\".jqModal\",ajax:F,ajaxText:\"\",target:F,modal:F,toTop:F,onShow:F,onHide:F,onLoad:F};return this.each(function(){return this._jqm?H[this._jqm].c=$.extend({},H[this._jqm].c,a):(s++,this._jqm=s,H[s]={c:$.extend(b,$.jqm.params,a),a:F,w:$(this).addClass(\"jqmID\"+s),s:s},void(b.trigger&&$(this).jqmAddTrigger(b.trigger)))})},$.fn.jqmAddClose=function(a){return hs(this,a,\"jqmHide\")},$.fn.jqmAddTrigger=function(a){return hs(this,a,\"jqmShow\")},$.fn.jqmShow=function(a){return this.each(function(){$.jqm.open(this._jqm,a)})},$.fn.jqmHide=function(a){return this.each(function(){$.jqm.close(this._jqm,a)})},$.jqm={hash:{},open:function(a,b){var c=H[a],d=c.c,f=\".\"+d.closeClass,g=parseInt(c.w.css(\"z-index\"));g=g>0?g:3e3;var h=$(\"<div></div>\").css({height:\"100%\",width:\"100%\",position:\"fixed\",left:0,top:0,\"z-index\":g-1,opacity:d.overlay/100});if(c.a)return F;if(c.t=b,c.a=!0,c.w.css(\"z-index\",g),d.modal?(A[0]||setTimeout(function(){new L(\"bind\")},1),A.push(a)):d.overlay>0?d.closeoverlay&&c.w.jqmAddClose(h):h=F,c.o=h?h.addClass(d.overlayClass).prependTo(\"body\"):F,d.ajax){var i=d.target||c.w,j=d.ajax;i=\"string\"==typeof i?$(i,c.w):$(i),j=\"@\"===j.substr(0,1)?$(b).attr(j.substring(1)):j,i.html(d.ajaxText).load(j,function(){d.onLoad&&d.onLoad.call(this,c),f&&c.w.jqmAddClose($(f,c.w)),e(c)})}else f&&c.w.jqmAddClose($(f,c.w));return d.toTop&&c.o&&c.w.before('<span id=\"jqmP'+c.w[0]._jqm+'\"></span>').insertAfter(c.o),d.onShow?d.onShow(c):c.w.show(),e(c),F},close:function(a){var b=H[a];return b.a?(b.a=F,A[0]&&(A.pop(),A[0]||new L(\"unbind\")),b.c.toTop&&b.o&&$(\"#jqmP\"+b.w[0]._jqm).after(b.w).remove(),b.c.onHide?b.c.onHide(b):(b.w.hide(),b.o&&b.o.remove()),F):F},params:{}};var s=0,H=$.jqm.hash,A=[],F=!1,e=function(a){void 0===a.c.focusField&&(a.c.focusField=0),a.c.focusField>=0&&f(a)},f=function(a){try{$(\":input:visible\",a.w)[parseInt(a.c.focusField,10)].focus()}catch(b){}},L=function(a){$(document)[a](\"keypress\",m)[a](\"keydown\",m)[a](\"mousedown\",m)},m=function(a){var b=H[A[A.length-1]],c=!$(a.target).parents(\".jqmID\"+b.s)[0];return c&&($(\".jqmID\"+b.s).each(function(){var b=$(this),d=b.offset();return d.top<=a.pageY&&a.pageY<=d.top+b.height()&&d.left<=a.pageX&&a.pageX<=d.left+b.width()?(c=!1,!1):void 0}),f(b)),!c},hs=function(a,b,c){return a.each(function(){var a=this._jqm;$(b).each(function(){this[c]||(this[c]=[],$(this).click(function(){for(var a in{jqmShow:1,jqmHide:1})for(var b in this[a])H[this[a][b]]&&H[this[a][b]].w[a](this);return F})),this[c].push(a)})})};$.fmatter={},$.extend($.fmatter,{isBoolean:function(a){return\"boolean\"==typeof a},isObject:function(a){return a&&(\"object\"==typeof a||$.isFunction(a))||!1},isString:function(a){return\"string\"==typeof a},isNumber:function(a){return\"number\"==typeof a&&isFinite(a)},isValue:function(a){return this.isObject(a)||this.isString(a)||this.isNumber(a)||this.isBoolean(a)},isEmpty:function(a){return!this.isString(a)&&this.isValue(a)?!1:this.isValue(a)?(a=$.trim(a).replace(/\\&nbsp\\;/gi,\"\").replace(/\\&#160\\;/gi,\"\"),\"\"===a):!0}}),$.fn.fmatter=function(a,b,c,d,e){var f=b;c=$.extend({},$.jgrid.getRegional(this,\"formatter\"),c);try{f=$.fn.fmatter[a].call(this,b,c,d,e)}catch(g){}return f},$.fmatter.util={NumberFormat:function(a,b){if($.fmatter.isNumber(a)||(a*=1),$.fmatter.isNumber(a)){var c,d=0>a,e=String(a),f=b.decimalSeparator||\".\";if($.fmatter.isNumber(b.decimalPlaces)){var g=b.decimalPlaces,h=Math.pow(10,g);if(e=String(Math.round(a*h)/h),c=e.lastIndexOf(\".\"),g>0)for(0>c?(e+=f,c=e.length-1):\".\"!==f&&(e=e.replace(\".\",f));e.length-1-c<g;)e+=\"0\"}if(b.thousandsSeparator){var i=b.thousandsSeparator;c=e.lastIndexOf(f),c=c>-1?c:e.length;var j,k=e.substring(c),l=-1;for(j=c;j>0;j--)l++,l%3===0&&j!==c&&(!d||j>1)&&(k=i+k),k=e.charAt(j-1)+k;e=k}return e=b.prefix?b.prefix+e:e,e=b.suffix?e+b.suffix:e}return a}},$.fn.fmatter.defaultFormat=function(a,b){return $.fmatter.isValue(a)&&\"\"!==a?a:b.defaultValue||\"&#160;\"},$.fn.fmatter.email=function(a,b){return $.fmatter.isEmpty(a)?$.fn.fmatter.defaultFormat(a,b):'<a href=\"mailto:'+a+'\">'+a+\"</a>\"},$.fn.fmatter.checkbox=function(a,b){var c,d=$.extend({},b.checkbox);void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(d=$.extend({},d,b.colModel.formatoptions)),c=d.disabled===!0?'disabled=\"disabled\"':\"\",($.fmatter.isEmpty(a)||void 0===a)&&(a=$.fn.fmatter.defaultFormat(a,d)),a=String(a),a=(a+\"\").toLowerCase();var e=a.search(/(false|f|0|no|n|off|undefined)/i)<0?\" checked='checked' \":\"\";return'<input type=\"checkbox\" '+e+' value=\"'+a+'\" offval=\"no\" '+c+\"/>\"},$.fn.fmatter.link=function(a,b){var c={target:b.target},d=\"\";return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(c=$.extend({},c,b.colModel.formatoptions)),c.target&&(d=\"target=\"+c.target),$.fmatter.isEmpty(a)?$.fn.fmatter.defaultFormat(a,b):\"<a \"+d+' href=\"'+a+'\">'+a+\"</a>\"},$.fn.fmatter.showlink=function(a,b){var c,d={baseLinkUrl:b.baseLinkUrl,showAction:b.showAction,addParam:b.addParam||\"\",target:b.target,idName:b.idName},e=\"\";return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(d=$.extend({},d,b.colModel.formatoptions)),d.target&&(e=\"target=\"+d.target),c=d.baseLinkUrl+d.showAction+\"?\"+d.idName+\"=\"+b.rowId+d.addParam,$.fmatter.isString(a)||$.fmatter.isNumber(a)?\"<a \"+e+' href=\"'+c+'\">'+a+\"</a>\":$.fn.fmatter.defaultFormat(a,b)},$.fn.fmatter.integer=function(a,b){var c=$.extend({},b.integer);return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(c=$.extend({},c,b.colModel.formatoptions)),$.fmatter.isEmpty(a)?c.defaultValue:$.fmatter.util.NumberFormat(a,c)},$.fn.fmatter.number=function(a,b){var c=$.extend({},b.number);return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(c=$.extend({},c,b.colModel.formatoptions)),$.fmatter.isEmpty(a)?c.defaultValue:$.fmatter.util.NumberFormat(a,c)},$.fn.fmatter.currency=function(a,b){var c=$.extend({},b.currency);return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(c=$.extend({},c,b.colModel.formatoptions)),$.fmatter.isEmpty(a)?c.defaultValue:$.fmatter.util.NumberFormat(a,c)},$.fn.fmatter.date=function(a,b,c,d){var e=$.extend({},b.date);return void 0!==b.colModel&&void 0!==b.colModel.formatoptions&&(e=$.extend({},e,b.colModel.formatoptions)),e.reformatAfterEdit||\"edit\"!==d?$.fmatter.isEmpty(a)?$.fn.fmatter.defaultFormat(a,b):$.jgrid.parseDate.call(this,e.srcformat,a,e.newformat,e):$.fn.fmatter.defaultFormat(a,b)},$.fn.fmatter.select=function(a,b){a=String(a);var c,d,e=!1,f=[];if(void 0!==b.colModel.formatoptions?(e=b.colModel.formatoptions.value,c=void 0===b.colModel.formatoptions.separator?\":\":b.colModel.formatoptions.separator,d=void 0===b.colModel.formatoptions.delimiter?\";\":b.colModel.formatoptions.delimiter):void 0!==b.colModel.editoptions&&(e=b.colModel.editoptions.value,c=void 0===b.colModel.editoptions.separator?\":\":b.colModel.editoptions.separator,d=void 0===b.colModel.editoptions.delimiter?\";\":b.colModel.editoptions.delimiter),e){var g,h=(null!=b.colModel.editoptions&&b.colModel.editoptions.multiple===!0)==!0?!0:!1,i=[];if(h&&(i=a.split(\",\"),i=$.map(i,function(a){return $.trim(a)})),$.fmatter.isString(e)){var j,k=e.split(d),l=0;for(j=0;j<k.length;j++)if(g=k[j].split(c),g.length>2&&(g[1]=$.map(g,function(a,b){return b>0?a:void 0}).join(c)),h)$.inArray(g[0],i)>-1&&(f[l]=g[1],l++);else if($.trim(g[0])===$.trim(a)){f[0]=g[1];break}}else $.fmatter.isObject(e)&&(h?f=$.map(i,function(a){return e[a]}):f[0]=e[a]||\"\")}return a=f.join(\", \"),\"\"===a?$.fn.fmatter.defaultFormat(a,b):a},$.fn.fmatter.rowactions=function(a){var b=$(this).closest(\"tr.jqgrow\"),c=b.attr(\"id\"),d=$(this).closest(\"table.ui-jqgrid-btable\").attr(\"id\").replace(/_frozen([^_]*)$/,\"$1\"),e=$(\"#\"+d),f=e[0],g=f.p,h=g.colModel[$.jgrid.getCellIndex(this)],i=h.frozen?$(\"tr#\"+c+\" td:eq(\"+$.jgrid.getCellIndex(this)+\") > div\",e):$(this).parent(),j={extraparam:{}},k=function(a,b){$.isFunction(j.afterSave)&&j.afterSave.call(f,a,b),i.find(\"div.ui-inline-edit,div.ui-inline-del\").show(),i.find(\"div.ui-inline-save,div.ui-inline-cancel\").hide()},l=function(a){$.isFunction(j.afterRestore)&&j.afterRestore.call(f,a),i.find(\"div.ui-inline-edit,div.ui-inline-del\").show(),i.find(\"div.ui-inline-save,div.ui-inline-cancel\").hide()};void 0!==h.formatoptions&&(j=$.extend(j,h.formatoptions)),void 0!==g.editOptions&&(j.editOptions=g.editOptions),void 0!==g.delOptions&&(j.delOptions=g.delOptions),b.hasClass(\"jqgrid-new-row\")&&(j.extraparam[g.prmNames.oper]=g.prmNames.addoper);var m={keys:j.keys,oneditfunc:j.onEdit,successfunc:j.onSuccess,url:j.url,extraparam:j.extraparam,aftersavefunc:k,errorfunc:j.onError,afterrestorefunc:l,restoreAfterError:j.restoreAfterError,mtype:j.mtype};switch(a){case\"edit\":e.jqGrid(\"editRow\",c,m),i.find(\"div.ui-inline-edit,div.ui-inline-del\").hide(),i.find(\"div.ui-inline-save,div.ui-inline-cancel\").show(),e.triggerHandler(\"jqGridAfterGridComplete\");break;case\"save\":e.jqGrid(\"saveRow\",c,m)&&(i.find(\"div.ui-inline-edit,div.ui-inline-del\").show(),i.find(\"div.ui-inline-save,div.ui-inline-cancel\").hide(),e.triggerHandler(\"jqGridAfterGridComplete\"));break;case\"cancel\":e.jqGrid(\"restoreRow\",c,l),i.find(\"div.ui-inline-edit,div.ui-inline-del\").show(),i.find(\"div.ui-inline-save,div.ui-inline-cancel\").hide(),e.triggerHandler(\"jqGridAfterGridComplete\");break;case\"del\":e.jqGrid(\"delGridRow\",c,j.delOptions);break;case\"formedit\":e.jqGrid(\"setSelection\",c),e.jqGrid(\"editGridRow\",c,j.editOptions)}},$.fn.fmatter.actions=function(a,b){var c,d={keys:!1,editbutton:!0,delbutton:!0,editformbutton:!1},e=b.rowId,f=\"\",g=$.jgrid.getRegional(this,\"nav\"),h=$.jgrid.styleUI[b.styleUI||\"jQueryUI\"].fmatter,i=$.jgrid.styleUI[b.styleUI||\"jQueryUI\"].common;if(void 0!==b.colModel.formatoptions&&(d=$.extend(d,b.colModel.formatoptions)),void 0===e||$.fmatter.isEmpty(e))return\"\";var j=\"onmouseover=jQuery(this).addClass('\"+i.hover+\"'); onmouseout=jQuery(this).removeClass('\"+i.hover+\"');  \";return d.editformbutton?(c=\"id='jEditButton_\"+e+\"' onclick=jQuery.fn.fmatter.rowactions.call(this,'formedit'); \"+j,f+=\"<div title='\"+g.edittitle+\"' style='float:left;cursor:pointer;' class='ui-pg-div ui-inline-edit' \"+c+\"><span class='\"+i.icon_base+\" \"+h.icon_edit+\"'></span></div>\"):d.editbutton&&(c=\"id='jEditButton_\"+e+\"' onclick=jQuery.fn.fmatter.rowactions.call(this,'edit'); \"+j,f+=\"<div title='\"+g.edittitle+\"' style='float:left;cursor:pointer;' class='ui-pg-div ui-inline-edit' \"+c+\"><span class='\"+i.icon_base+\" \"+h.icon_edit+\"'></span></div>\"),d.delbutton&&(c=\"id='jDeleteButton_\"+e+\"' onclick=jQuery.fn.fmatter.rowactions.call(this,'del'); \"+j,f+=\"<div title='\"+g.deltitle+\"' style='float:left;' class='ui-pg-div ui-inline-del' \"+c+\"><span class='\"+i.icon_base+\" \"+h.icon_del+\"'></span></div>\"),c=\"id='jSaveButton_\"+e+\"' onclick=jQuery.fn.fmatter.rowactions.call(this,'save'); \"+j,f+=\"<div title='\"+g.savetitle+\"' style='float:left;display:none' class='ui-pg-div ui-inline-save' \"+c+\"><span class='\"+i.icon_base+\" \"+h.icon_save+\"'></span></div>\",c=\"id='jCancelButton_\"+e+\"' onclick=jQuery.fn.fmatter.rowactions.call(this,'cancel'); \"+j,f+=\"<div title='\"+g.canceltitle+\"' style='float:left;display:none;' class='ui-pg-div ui-inline-cancel' \"+c+\"><span class='\"+i.icon_base+\" \"+h.icon_cancel+\"'></span></div>\",\"<div style='margin-left:8px;'>\"+f+\"</div>\"},$.unformat=function(a,b,c,d){var e,f,g=b.colModel.formatter,h=b.colModel.formatoptions||{},i=/([\\.\\*\\_\\'\\(\\)\\{\\}\\+\\?\\\\])/g,j=b.colModel.unformat||$.fn.fmatter[g]&&$.fn.fmatter[g].unformat;if(void 0!==j&&$.isFunction(j))e=j.call(this,$(a).text(),b,a);else if(void 0!==g&&$.fmatter.isString(g)){var k,l=$.jgrid.getRegional(this,\"formatter\")||{};switch(g){case\"integer\":h=$.extend({},l.integer,h),f=h.thousandsSeparator.replace(i,\"\\\\$1\"),k=new RegExp(f,\"g\"),e=$(a).text().replace(k,\"\");break;case\"number\":h=$.extend({},l.number,h),f=h.thousandsSeparator.replace(i,\"\\\\$1\"),k=new RegExp(f,\"g\"),e=$(a).text().replace(k,\"\").replace(h.decimalSeparator,\".\");break;case\"currency\":h=$.extend({},l.currency,h),f=h.thousandsSeparator.replace(i,\"\\\\$1\"),k=new RegExp(f,\"g\"),e=$(a).text(),h.prefix&&h.prefix.length&&(e=e.substr(h.prefix.length)),h.suffix&&h.suffix.length&&(e=e.substr(0,e.length-h.suffix.length)),e=e.replace(k,\"\").replace(h.decimalSeparator,\".\");break;case\"checkbox\":var m=b.colModel.editoptions?b.colModel.editoptions.value.split(\":\"):[\"Yes\",\"No\"];e=$(\"input\",a).is(\":checked\")?m[0]:m[1];break;case\"select\":e=$.unformat.select(a,b,c,d);break;case\"actions\":return\"\";default:e=$(a).text()}}return void 0!==e?e:d===!0?$(a).text():$.jgrid.htmlDecode($(a).html())},$.unformat.select=function(a,b,c,d){var e=[],f=$(a).text();if(d===!0)return f;var g=$.extend({},void 0!==b.colModel.formatoptions?b.colModel.formatoptions:b.colModel.editoptions),h=void 0===g.separator?\":\":g.separator,i=void 0===g.delimiter?\";\":g.delimiter;if(g.value){var j,k=g.value,l=g.multiple===!0?!0:!1,m=[];if(l&&(m=f.split(\",\"),m=$.map(m,function(a){return $.trim(a)})),$.fmatter.isString(k)){var n,o=k.split(i),p=0;for(n=0;n<o.length;n++)if(j=o[n].split(h),j.length>2&&(j[1]=$.map(j,function(a,b){return b>0?a:void 0}).join(h)),l)$.inArray($.trim(j[1]),m)>-1&&(e[p]=j[0],p++);else if($.trim(j[1])===$.trim(f)){e[0]=j[0];break}}else($.fmatter.isObject(k)||$.isArray(k))&&(l||(m[0]=f),e=$.map(m,function(a){var b;return $.each(k,function(c,d){return d===a?(b=c,!1):void 0}),void 0!==b?b:void 0}));return e.join(\", \")}return f||\"\"},$.unformat.date=function(a,b){var c=$.jgrid.getRegional(this,\"formatter.date\")||{};return void 0!==b.formatoptions&&(c=$.extend({},c,b.formatoptions)),$.fmatter.isEmpty(a)?$.fn.fmatter.defaultFormat(a,b):$.jgrid.parseDate.call(this,c.newformat,a,c.srcformat,c)},window.jqGridUtils={stringify:function(a){return JSON.stringify(a,function(a,b){return\"function\"==typeof b?b.toString():b})},parse:function(str){return JSON.parse(str,function(key,value){return\"string\"==typeof value&&-1!==value.indexOf(\"function\")?eval(\"(\"+value+\")\"):value})},encode:function(a){return String(a).replace(/&/g,\"&amp;\").replace(/</g,\"&lt;\").replace(/>/g,\"&gt;\").replace(/\"/g,\"&quot;\")},jsonToXML:function(a,b){var c=$.extend({xmlDecl:'<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\\n',attr_prefix:\"-\",encode:!0},b||{}),d=this,e=function(a,b){return\"#text\"===a?c.encode?d.encode(b):b:\"function\"==typeof b?\"<\"+a+\"><![CDATA[\"+b+\"]]></\"+a+\">\\n\":\"\"===b?\"<\"+a+\">__EMPTY_STRING_</\"+a+\">\\n\":\"<\"+a+\">\"+(c.encode?d.encode(b):b)+\"</\"+a+\">\\n\"},f=function(a,b){for(var c=[],d=0;d<b.length;d++){var h=b[d];c[c.length]=\"undefined\"==typeof h||null==h?\"<\"+a+\" />\":\"object\"==typeof h&&h.constructor==Array?f(a,h):\"object\"==typeof h?g(a,h):e(a,h)}return c.length||(c[0]=\"<\"+a+\">__EMPTY_ARRAY_</\"+a+\">\\n\"),c.join(\"\")},g=function(a,b){var h=[],i=[];for(var j in b)if(b.hasOwnProperty(j)){var k=b[j];j.charAt(0)!==c.attr_prefix?h[h.length]=null==k?\"<\"+j+\" />\":\"object\"==typeof k&&k.constructor===Array?f(j,k):\"object\"==typeof k?g(j,k):e(j,k):i[i.length]=\" \"+j.substring(1)+'=\"'+(c.encode?d.encode(k):k)+'\"'}var l=i.join(\"\"),m=h.join(\"\");return null==a||(m=h.length>0?m.match(/\\n/)?\"<\"+a+l+\">\\n\"+m+\"</\"+a+\">\\n\":\"<\"+a+l+\">\"+m+\"</\"+a+\">\\n\":\"<\"+a+l+\" />\\n\"),m},h=g(null,a);return c.xmlDecl+h},xmlToJSON:function(root,options){var o=$.extend({force_array:[],attr_prefix:\"-\"},options||{});if(root){var __force_array={};if(o.force_array)for(var i=0;i<o.force_array.length;i++)__force_array[o.force_array[i]]=1;\"string\"==typeof root&&(root=$.parseXML(root)),root.documentElement&&(root=root.documentElement);var addNode=function(hash,key,cnts,val){if(\"string\"==typeof val)if(-1!==val.indexOf(\"function\"))val=eval(\"(\"+val+\")\");else switch(val){case\"__EMPTY_ARRAY_\":val=[];break;case\"__EMPTY_STRING_\":val=\"\";break;case\"false\":val=!1;break;case\"true\":val=!0}__force_array[key]?(1===cnts&&(hash[key]=[]),hash[key][hash[key].length]=val):1===cnts?hash[key]=val:2===cnts?hash[key]=[hash[key],val]:hash[key][hash[key].length]=val},parseElement=function(a){if(7!==a.nodeType){if(3===a.nodeType||4===a.nodeType){var b=a.nodeValue.match(/[^\\x00-\\x20]/);if(null==b)return;return a.nodeValue}var c,d,e,f,g={};if(a.attributes&&a.attributes.length)for(c={},d=0;d<a.attributes.length;d++)e=a.attributes[d].nodeName,\"string\"==typeof e&&(f=a.attributes[d].nodeValue,f&&(e=o.attr_prefix+e,\"undefined\"==typeof g[e]&&(g[e]=0),g[e]++,addNode(c,e,g[e],f)));if(a.childNodes&&a.childNodes.length){var h=!0;for(c&&(h=!1),d=0;d<a.childNodes.length&&h;d++){var i=a.childNodes[d].nodeType;3!==i&&4!==i&&(h=!1)}if(h)for(c||(c=\"\"),d=0;d<a.childNodes.length;d++)c+=a.childNodes[d].nodeValue;else for(c||(c={}),d=0;d<a.childNodes.length;d++)e=a.childNodes[d].nodeName,\"string\"==typeof e&&(f=parseElement(a.childNodes[d]),f&&(\"undefined\"==typeof g[e]&&(g[e]=0),g[e]++,addNode(c,e,g[e],f)))}return c}},json=parseElement(root);if(__force_array[root.nodeName]&&(json=[json]),11!==root.nodeType){var tmp={};tmp[root.nodeName]=json,json=tmp}return json}}}});\n//# sourceMappingURL=jquery.jqGrid.min.js.map\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/jsKnob/jquery.knob.js",
    "content": "/*!jQuery Knob*/\n/**\n * Downward compatible, touchable dial\n *\n * Version: 1.2.8\n * Requires: jQuery v1.7+\n *\n * Copyright (c) 2012 Anthony Terrien\n * Under MIT License (http://www.opensource.org/licenses/mit-license.php)\n *\n * Thanks to vor, eskimoblood, spiffistan, FabrizioC\n */\n(function($) {\n\n    /**\n     * Kontrol library\n     */\n    \"use strict\";\n\n    /**\n     * Definition of globals and core\n     */\n    var k = {}, // kontrol\n        max = Math.max,\n        min = Math.min;\n\n    k.c = {};\n    k.c.d = $(document);\n    k.c.t = function (e) {\n        return e.originalEvent.touches.length - 1;\n    };\n\n    /**\n     * Kontrol Object\n     *\n     * Definition of an abstract UI control\n     *\n     * Each concrete component must call this one.\n     * <code>\n     * k.o.call(this);\n     * </code>\n     */\n    k.o = function () {\n        var s = this;\n\n        this.o = null; // array of options\n        this.$ = null; // jQuery wrapped element\n        this.i = null; // mixed HTMLInputElement or array of HTMLInputElement\n        this.g = null; // deprecated 2D graphics context for 'pre-rendering'\n        this.v = null; // value ; mixed array or integer\n        this.cv = null; // change value ; not commited value\n        this.x = 0; // canvas x position\n        this.y = 0; // canvas y position\n        this.w = 0; // canvas width\n        this.h = 0; // canvas height\n        this.$c = null; // jQuery canvas element\n        this.c = null; // rendered canvas context\n        this.t = 0; // touches index\n        this.isInit = false;\n        this.fgColor = null; // main color\n        this.pColor = null; // previous color\n        this.dH = null; // draw hook\n        this.cH = null; // change hook\n        this.eH = null; // cancel hook\n        this.rH = null; // release hook\n        this.scale = 1; // scale factor\n        this.relative = false;\n        this.relativeWidth = false;\n        this.relativeHeight = false;\n        this.$div = null; // component div\n\n        this.run = function () {\n            var cf = function (e, conf) {\n                var k;\n                for (k in conf) {\n                    s.o[k] = conf[k];\n                }\n                s._carve().init();\n                s._configure()\n                    ._draw();\n            };\n\n            if(this.$.data('kontroled')) return;\n            this.$.data('kontroled', true);\n\n            this.extend();\n            this.o = $.extend(\n                {\n                    // Config\n                    min : this.$.data('min') !== undefined ? this.$.data('min') : 0,\n                    max : this.$.data('max') !== undefined ? this.$.data('max') : 100,\n                    stopper : true,\n                    readOnly : this.$.data('readonly') || (this.$.attr('readonly') === 'readonly'),\n\n                    // UI\n                    cursor : (this.$.data('cursor') === true && 30) ||\n                        this.$.data('cursor') || 0,\n                    thickness : (\n                        this.$.data('thickness') &&\n                            Math.max(Math.min(this.$.data('thickness'), 1), 0.01)\n                        ) || 0.35,\n                    lineCap : this.$.data('linecap') || 'butt',\n                    width : this.$.data('width') || 200,\n                    height : this.$.data('height') || 200,\n                    displayInput : this.$.data('displayinput') == null || this.$.data('displayinput'),\n                    displayPrevious : this.$.data('displayprevious'),\n                    fgColor : this.$.data('fgcolor') || '#87CEEB',\n                    inputColor: this.$.data('inputcolor'),\n                    font: this.$.data('font') || 'Arial',\n                    fontWeight: this.$.data('font-weight') || 'bold',\n                    inline : false,\n                    step : this.$.data('step') || 1,\n                    rotation: this.$.data('rotation'),\n\n                    // Hooks\n                    draw : null, // function () {}\n                    change : null, // function (value) {}\n                    cancel : null, // function () {}\n                    release : null, // function (value) {}\n\n                    // Output formatting, allows to add unit: %, ms ...\n                    format: function(v) {\n                        return v;\n                    },\n                    parse: function (v) {\n                        return parseFloat(v);\n                    }\n                }, this.o\n            );\n\n            // finalize options\n            this.o.flip = this.o.rotation === 'anticlockwise' || this.o.rotation === 'acw';\n            if(!this.o.inputColor) {\n                this.o.inputColor = this.o.fgColor;\n            }\n\n            // routing value\n            if(this.$.is('fieldset')) {\n\n                // fieldset = array of integer\n                this.v = {};\n                this.i = this.$.find('input');\n                this.i.each(function(k) {\n                    var $this = $(this);\n                    s.i[k] = $this;\n                    s.v[k] = s.o.parse($this.val());\n\n                    $this.bind(\n                        'change blur'\n                        , function () {\n                            var val = {};\n                            val[k] = $this.val();\n                            s.val(val);\n                        }\n                    );\n                });\n                this.$.find('legend').remove();\n\n            } else {\n\n                // input = integer\n                this.i = this.$;\n                this.v = this.o.parse(this.$.val());\n                (this.v === '') && (this.v = this.o.min);\n\n                this.$.bind(\n                    'change blur'\n                    , function () {\n                        s.val(s._validate(s.o.parse(s.$.val())));\n                    }\n                );\n\n            }\n\n            (!this.o.displayInput) && this.$.hide();\n\n            // adds needed DOM elements (canvas, div)\n            this.$c = $(document.createElement('canvas')).attr({\n                width: this.o.width,\n                height: this.o.height\n            });\n\n            // wraps all elements in a div\n            // add to DOM before Canvas init is triggered\n            this.$div = $('<div style=\"'\n                + (this.o.inline ? 'display:inline;' : '')\n                + 'width:' + this.o.width + 'px;height:' + this.o.height + 'px;'\n                + '\"></div>');\n\n            this.$.wrap(this.$div).before(this.$c);\n            this.$div = this.$.parent();\n\n            if (typeof G_vmlCanvasManager !== 'undefined') {\n                G_vmlCanvasManager.initElement(this.$c[0]);\n            }\n\n            this.c = this.$c[0].getContext ? this.$c[0].getContext('2d') : null;\n\n            if (!this.c) {\n                throw {\n                    name:        \"CanvasNotSupportedException\",\n                    message:     \"Canvas not supported. Please use excanvas on IE8.0.\",\n                    toString:    function(){return this.name + \": \" + this.message}\n                }\n            }\n\n            // hdpi support\n            this.scale = (window.devicePixelRatio || 1) /\n                (\n                    this.c.webkitBackingStorePixelRatio ||\n                        this.c.mozBackingStorePixelRatio ||\n                        this.c.msBackingStorePixelRatio ||\n                        this.c.oBackingStorePixelRatio ||\n                        this.c.backingStorePixelRatio || 1\n                    );\n\n            // detects relative width / height\n            this.relativeWidth = ((this.o.width % 1 !== 0) &&\n                this.o.width.indexOf('%'));\n            this.relativeHeight = ((this.o.height % 1 !== 0) &&\n                this.o.height.indexOf('%'));\n            this.relative = (this.relativeWidth || this.relativeHeight);\n\n            // computes size and carves the component\n            this._carve();\n\n            // prepares props for transaction\n            if (this.v instanceof Object) {\n                this.cv = {};\n                this.copy(this.v, this.cv);\n            } else {\n                this.cv = this.v;\n            }\n\n            // binds configure event\n            this.$\n                .bind(\"configure\", cf)\n                .parent()\n                .bind(\"configure\", cf);\n\n            // finalize init\n            this._listen()\n                ._configure()\n                ._xy()\n                .init();\n\n            this.isInit = true;\n\n            this.$.val(this.o.format(this.v));\n            this._draw();\n\n            return this;\n        };\n\n        this._carve = function() {\n            if(this.relative) {\n                var w = this.relativeWidth ?\n                        this.$div.parent().width() *\n                            parseInt(this.o.width) / 100 :\n                        this.$div.parent().width(),\n                    h = this.relativeHeight ?\n                        this.$div.parent().height() *\n                            parseInt(this.o.height) / 100 :\n                        this.$div.parent().height();\n\n                // apply relative\n                this.w = this.h = Math.min(w, h);\n            } else {\n                this.w = this.o.width;\n                this.h = this.o.height;\n            }\n\n            // finalize div\n            this.$div.css({\n                'width': this.w + 'px',\n                'height': this.h + 'px'\n            });\n\n            // finalize canvas with computed width\n            this.$c.attr({\n                width: this.w,\n                height: this.h\n            });\n\n            // scaling\n            if (this.scale !== 1) {\n                this.$c[0].width = this.$c[0].width * this.scale;\n                this.$c[0].height = this.$c[0].height * this.scale;\n                this.$c.width(this.w);\n                this.$c.height(this.h);\n            }\n\n            return this;\n        }\n\n        this._draw = function () {\n\n            // canvas pre-rendering\n            var d = true;\n\n            s.g = s.c;\n\n            s.clear();\n\n            s.dH\n            && (d = s.dH());\n\n            (d !== false) && s.draw();\n\n        };\n\n        this._touch = function (e) {\n\n            var touchMove = function (e) {\n\n                var v = s.xy2val(\n                    e.originalEvent.touches[s.t].pageX,\n                    e.originalEvent.touches[s.t].pageY\n                );\n\n                if (v == s.cv) return;\n\n                if (s.cH && (s.cH(v) === false)) return;\n\n                s.change(s._validate(v));\n                s._draw();\n            };\n\n            // get touches index\n            this.t = k.c.t(e);\n\n            // First touch\n            touchMove(e);\n\n            // Touch events listeners\n            k.c.d\n                .bind(\"touchmove.k\", touchMove)\n                .bind(\n                \"touchend.k\"\n                , function () {\n                    k.c.d.unbind('touchmove.k touchend.k');\n                    s.val(s.cv);\n                }\n            );\n\n            return this;\n        };\n\n        this._mouse = function (e) {\n\n            var mouseMove = function (e) {\n                var v = s.xy2val(e.pageX, e.pageY);\n\n                if (v == s.cv) return;\n\n                if (s.cH && (s.cH(v) === false)) return;\n\n                s.change(s._validate(v));\n                s._draw();\n            };\n\n            // First click\n            mouseMove(e);\n\n            // Mouse events listeners\n            k.c.d\n                .bind(\"mousemove.k\", mouseMove)\n                .bind(\n                // Escape key cancel current change\n                \"keyup.k\"\n                , function (e) {\n                    if (e.keyCode === 27) {\n                        k.c.d.unbind(\"mouseup.k mousemove.k keyup.k\");\n\n                        if (\n                            s.eH\n                                && (s.eH() === false)\n                            ) return;\n\n                        s.cancel();\n                    }\n                }\n            )\n                .bind(\n                \"mouseup.k\"\n                , function (e) {\n                    k.c.d.unbind('mousemove.k mouseup.k keyup.k');\n                    s.val(s.cv);\n                }\n            );\n\n            return this;\n        };\n\n        this._xy = function () {\n            var o = this.$c.offset();\n            this.x = o.left;\n            this.y = o.top;\n            return this;\n        };\n\n        this._listen = function () {\n\n            if (!this.o.readOnly) {\n                this.$c\n                    .bind(\n                    \"mousedown\"\n                    , function (e) {\n                        e.preventDefault();\n                        s._xy()._mouse(e);\n                    }\n                )\n                    .bind(\n                    \"touchstart\"\n                    , function (e) {\n                        e.preventDefault();\n                        s._xy()._touch(e);\n                    }\n                );\n\n                this.listen();\n            } else {\n                this.$.attr('readonly', 'readonly');\n            }\n\n            if(this.relative) {\n                $(window).resize(function() {\n                    s._carve()\n                        .init();\n                    s._draw();\n                });\n            }\n\n            return this;\n        };\n\n        this._configure = function () {\n\n            // Hooks\n            if (this.o.draw) this.dH = this.o.draw;\n            if (this.o.change) this.cH = this.o.change;\n            if (this.o.cancel) this.eH = this.o.cancel;\n            if (this.o.release) this.rH = this.o.release;\n\n            if (this.o.displayPrevious) {\n                this.pColor = this.h2rgba(this.o.fgColor, \"0.4\");\n                this.fgColor = this.h2rgba(this.o.fgColor, \"0.6\");\n            } else {\n                this.fgColor = this.o.fgColor;\n            }\n\n            return this;\n        };\n\n        this._clear = function () {\n            this.$c[0].width = this.$c[0].width;\n        };\n\n        this._validate = function(v) {\n            return (~~ (((v < 0) ? -0.5 : 0.5) + (v/this.o.step))) * this.o.step;\n        };\n\n        // Abstract methods\n        this.listen = function () {}; // on start, one time\n        this.extend = function () {}; // each time configure triggered\n        this.init = function () {}; // each time configure triggered\n        this.change = function (v) {}; // on change\n        this.val = function (v) {}; // on release\n        this.xy2val = function (x, y) {}; //\n        this.draw = function () {}; // on change / on release\n        this.clear = function () { this._clear(); };\n\n        // Utils\n        this.h2rgba = function (h, a) {\n            var rgb;\n            h = h.substring(1,7)\n            rgb = [parseInt(h.substring(0,2),16)\n                ,parseInt(h.substring(2,4),16)\n                ,parseInt(h.substring(4,6),16)];\n            return \"rgba(\" + rgb[0] + \",\" + rgb[1] + \",\" + rgb[2] + \",\" + a + \")\";\n        };\n\n        this.copy = function (f, t) {\n            for (var i in f) { t[i] = f[i]; }\n        };\n    };\n\n\n    /**\n     * k.Dial\n     */\n    k.Dial = function () {\n        k.o.call(this);\n\n        this.startAngle = null;\n        this.xy = null;\n        this.radius = null;\n        this.lineWidth = null;\n        this.cursorExt = null;\n        this.w2 = null;\n        this.PI2 = 2*Math.PI;\n\n        this.extend = function () {\n            this.o = $.extend(\n                {\n                    bgColor : this.$.data('bgcolor') || '#EEEEEE',\n                    angleOffset : this.$.data('angleoffset') || 0,\n                    angleArc : this.$.data('anglearc') || 360,\n                    inline : true\n                }, this.o\n            );\n        };\n\n        this.val = function (v, triggerRelease) {\n            if (null != v) {\n\n                // reverse format\n                v = this.o.parse(v);\n\n                if (\n                    triggerRelease !== false && (v != this.v) && this.rH &&\n                        (this.rH(v) === false)\n                    ) return;\n\n                this.cv = this.o.stopper ? max(min(v, this.o.max), this.o.min) : v;\n                this.v = this.cv;\n                this.$.val(this.o.format(this.v));\n                this._draw();\n            } else {\n                return this.v;\n            }\n        };\n\n        this.xy2val = function (x, y) {\n            var a, ret;\n\n            a = Math.atan2(\n                x - (this.x + this.w2)\n                , - (y - this.y - this.w2)\n            ) - this.angleOffset;\n\n            if (this.o.flip) {\n                a = this.angleArc - a - this.PI2;\n            }\n\n            if(this.angleArc != this.PI2 && (a < 0) && (a > -0.5)) {\n                // if isset angleArc option, set to min if .5 under min\n                a = 0;\n            } else if (a < 0) {\n                a += this.PI2;\n            }\n\n            ret = ~~ (0.5 + (a * (this.o.max - this.o.min) / this.angleArc))\n                + this.o.min;\n\n            this.o.stopper && (ret = max(min(ret, this.o.max), this.o.min));\n\n            return ret;\n        };\n\n        this.listen = function () {\n            // bind MouseWheel\n            var s = this, mwTimerStop, mwTimerRelease,\n                mw = function (e) {\n                    e.preventDefault();\n\n                    var ori = e.originalEvent\n                        ,deltaX = ori.detail || ori.wheelDeltaX\n                        ,deltaY = ori.detail || ori.wheelDeltaY\n                        ,v = s._validate(s.o.parse(s.$.val()))\n                            + (deltaX>0 || deltaY>0 ? s.o.step : deltaX<0 || deltaY<0 ? -s.o.step : 0);\n\n                    v = max(min(v, s.o.max), s.o.min);\n\n                    s.val(v, false);\n\n                    if(s.rH) {\n                        // Handle mousewheel stop\n                        clearTimeout(mwTimerStop);\n                        mwTimerStop = setTimeout(function() {\n                            s.rH(v);\n                            mwTimerStop = null;\n                        }, 100);\n\n                        // Handle mousewheel releases\n                        if(!mwTimerRelease) {\n                            mwTimerRelease = setTimeout(function() {\n                                if(mwTimerStop) s.rH(v);\n                                mwTimerRelease = null;\n                            }, 200);\n                        }\n                    }\n                }\n                , kval, to, m = 1, kv = {37:-s.o.step, 38:s.o.step, 39:s.o.step, 40:-s.o.step};\n\n            this.$\n                .bind(\n                \"keydown\"\n                ,function (e) {\n                    var kc = e.keyCode;\n\n                    // numpad support\n                    if(kc >= 96 && kc <= 105) {\n                        kc = e.keyCode = kc - 48;\n                    }\n\n                    kval = parseInt(String.fromCharCode(kc));\n\n                    if (isNaN(kval)) {\n\n                        (kc !== 13)         // enter\n                            && (kc !== 8)       // bs\n                            && (kc !== 9)       // tab\n                            && (kc !== 189)     // -\n                            && (kc !== 190 || s.$.val().match(/\\./))     // . only allowed once\n                        && e.preventDefault();\n\n                        // arrows\n                        if ($.inArray(kc,[37,38,39,40]) > -1) {\n                            e.preventDefault();\n\n                            var v = s.o.parse(s.$.val()) + kv[kc] * m;\n                            s.o.stopper && (v = max(min(v, s.o.max), s.o.min));\n\n                            s.change(v);\n                            s._draw();\n\n                            // long time keydown speed-up\n                            to = window.setTimeout(\n                                function () { m *= 2; }, 30\n                            );\n                        }\n                    }\n                }\n            )\n                .bind(\n                \"keyup\"\n                ,function (e) {\n                    if (isNaN(kval)) {\n                        if (to) {\n                            window.clearTimeout(to);\n                            to = null;\n                            m = 1;\n                            s.val(s.$.val());\n                        }\n                    } else {\n                        // kval postcond\n                        (s.$.val() > s.o.max && s.$.val(s.o.max))\n                        || (s.$.val() < s.o.min && s.$.val(s.o.min));\n                    }\n\n                }\n            );\n\n            this.$c.bind(\"mousewheel DOMMouseScroll\", mw);\n            this.$.bind(\"mousewheel DOMMouseScroll\", mw)\n        };\n\n        this.init = function () {\n\n            if (\n                this.v < this.o.min\n                    || this.v > this.o.max\n                ) this.v = this.o.min;\n\n            this.$.val(this.v);\n            this.w2 = this.w / 2;\n            this.cursorExt = this.o.cursor / 100;\n            this.xy = this.w2 * this.scale;\n            this.lineWidth = this.xy * this.o.thickness;\n            this.lineCap = this.o.lineCap;\n            this.radius = this.xy - this.lineWidth / 2;\n\n            this.o.angleOffset\n            && (this.o.angleOffset = isNaN(this.o.angleOffset) ? 0 : this.o.angleOffset);\n\n            this.o.angleArc\n            && (this.o.angleArc = isNaN(this.o.angleArc) ? this.PI2 : this.o.angleArc);\n\n            // deg to rad\n            this.angleOffset = this.o.angleOffset * Math.PI / 180;\n            this.angleArc = this.o.angleArc * Math.PI / 180;\n\n            // compute start and end angles\n            this.startAngle = 1.5 * Math.PI + this.angleOffset;\n            this.endAngle = 1.5 * Math.PI + this.angleOffset + this.angleArc;\n\n            var s = max(\n                String(Math.abs(this.o.max)).length\n                , String(Math.abs(this.o.min)).length\n                , 2\n            ) + 2;\n\n            this.o.displayInput\n                && this.i.css({\n                'width' : ((this.w / 2 + 4) >> 0) + 'px'\n                ,'height' : ((this.w / 3) >> 0) + 'px'\n                ,'position' : 'absolute'\n                ,'vertical-align' : 'middle'\n                ,'margin-top' : ((this.w / 3) >> 0) + 'px'\n                ,'margin-left' : '-' + ((this.w * 3 / 4 + 2) >> 0) + 'px'\n                ,'border' : 0\n                ,'background' : 'none'\n                ,'font' : this.o.fontWeight + ' ' + ((this.w / s) >> 0) + 'px ' + this.o.font\n                ,'text-align' : 'center'\n                ,'color' : this.o.inputColor || this.o.fgColor\n                ,'padding' : '0px'\n                ,'-webkit-appearance': 'none'\n            })\n            || this.i.css({\n                'width' : '0px'\n                ,'visibility' : 'hidden'\n            });\n        };\n\n        this.change = function (v) {\n            this.cv = v;\n            this.$.val(this.o.format(v));\n        };\n\n        this.angle = function (v) {\n            return (v - this.o.min) * this.angleArc / (this.o.max - this.o.min);\n        };\n\n        this.arc = function (v) {\n            var sa, ea;\n            v = this.angle(v);\n            if (this.o.flip) {\n                sa = this.endAngle + 0.00001;\n                ea = sa - v - 0.00001;\n            } else {\n                sa = this.startAngle - 0.00001;\n                ea = sa + v + 0.00001;\n            }\n            this.o.cursor\n                && (sa = ea - this.cursorExt)\n            && (ea = ea + this.cursorExt);\n            return {\n                s: sa,\n                e: ea,\n                d: this.o.flip && !this.o.cursor\n            };\n        };\n\n        this.draw = function () {\n\n            var c = this.g,                 // context\n                a = this.arc(this.cv)       // Arc\n                , pa                        // Previous arc\n                , r = 1;\n\n            c.lineWidth = this.lineWidth;\n            c.lineCap = this.lineCap;\n\n            c.beginPath();\n            c.strokeStyle = this.o.bgColor;\n            c.arc(this.xy, this.xy, this.radius, this.endAngle - 0.00001, this.startAngle + 0.00001, true);\n            c.stroke();\n\n            if (this.o.displayPrevious) {\n                pa = this.arc(this.v);\n                c.beginPath();\n                c.strokeStyle = this.pColor;\n                c.arc(this.xy, this.xy, this.radius, pa.s, pa.e, pa.d);\n                c.stroke();\n                r = (this.cv == this.v);\n            }\n\n            c.beginPath();\n            c.strokeStyle = r ? this.o.fgColor : this.fgColor ;\n            c.arc(this.xy, this.xy, this.radius, a.s, a.e, a.d);\n            c.stroke();\n        };\n\n        this.cancel = function () {\n            this.val(this.v);\n        };\n    };\n\n    $.fn.dial = $.fn.knob = function (o) {\n        return this.each(\n            function () {\n                var d = new k.Dial();\n                d.o = o;\n                d.$ = $(this);\n                d.run();\n            }\n        ).parent();\n    };\n\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/jvectormap/jquery-jvectormap-world-mill-en.js",
    "content": "$.fn.vectorMap('addMap', 'world_mill_en',{\"insets\": [{\"width\": 900.0, \"top\": 0, \"height\": 440.7063107441331, \"bbox\": [{\"y\": -12671671.123330014, \"x\": -20004297.151525836}, {\"y\": 6930392.02513512, \"x\": 20026572.394749384}], \"left\": 0}], \"paths\": {\"BD\": {\"path\": \"M652.71,228.85l-0.04,1.38l-0.46,-0.21l-0.42,0.3l0.05,0.65l-0.17,-1.37l-0.48,-1.26l-1.08,-1.6l-0.23,-0.13l-2.31,-0.11l-0.31,0.36l0.21,0.98l-0.6,1.11l-0.8,-0.4l-0.37,0.09l-0.23,0.3l-0.54,-0.21l-0.78,-0.19l-0.38,-2.04l-0.83,-1.89l0.4,-1.5l-0.16,-0.35l-1.24,-0.57l0.36,-0.62l1.5,-0.95l0.02,-0.49l-1.62,-1.26l0.64,-1.31l1.7,1.0l0.12,0.04l0.96,0.11l0.19,1.62l0.25,0.26l2.38,0.37l2.32,-0.04l1.06,0.33l-0.92,1.79l-0.97,0.13l-0.23,0.16l-0.77,1.51l0.05,0.35l1.37,1.37l0.5,-0.14l0.35,-1.46l0.24,-0.0l1.24,3.92Z\", \"name\": \"Bangladesh\"}, \"BE\": {\"path\": \"M429.28,143.95l1.76,0.25l0.13,-0.01l2.16,-0.64l1.46,1.34l1.26,0.71l-0.23,1.8l-0.44,0.08l-0.24,0.25l-0.2,1.36l-1.8,-1.22l-0.23,-0.05l-1.14,0.23l-1.62,-1.43l-1.15,-1.31l-0.21,-0.1l-0.95,-0.04l-0.21,-0.68l1.66,-0.54Z\", \"name\": \"Belgium\"}, \"BF\": {\"path\": \"M413.48,260.21l-1.22,-0.46l-0.13,-0.02l-1.17,0.1l-0.15,0.06l-0.73,0.53l-0.87,-0.41l-0.39,-0.75l-0.13,-0.13l-0.98,-0.48l-0.14,-1.2l0.63,-0.99l0.05,-0.18l-0.05,-0.73l1.9,-2.01l0.08,-0.14l0.35,-1.65l0.49,-0.44l1.05,0.3l0.21,-0.02l1.05,-0.52l0.13,-0.13l0.3,-0.58l1.87,-1.1l0.11,-0.1l0.43,-0.72l2.23,-1.01l1.21,-0.32l0.51,0.4l0.19,0.06l1.25,-0.01l-0.14,0.89l0.01,0.13l0.34,1.16l0.06,0.11l1.35,1.59l0.07,1.13l0.24,0.28l2.64,0.53l-0.05,1.39l-0.42,0.59l-1.11,0.21l-0.22,0.17l-0.46,0.99l-0.69,0.23l-2.12,-0.05l-1.14,-0.2l-0.19,0.03l-0.72,0.36l-1.07,-0.17l-4.35,0.12l-0.29,0.29l-0.06,1.44l0.25,1.45Z\", \"name\": \"Burkina Faso\"}, \"BG\": {\"path\": \"M477.63,166.84l0.51,0.9l0.33,0.14l0.9,-0.21l1.91,0.47l3.68,0.16l0.17,-0.05l1.2,-0.75l2.78,-0.67l1.72,1.05l1.02,0.24l-0.97,0.97l-0.91,2.17l0.0,0.24l0.56,1.19l-1.58,-0.3l-0.16,0.01l-2.55,0.95l-0.2,0.28l-0.02,1.23l-1.92,0.24l-1.68,-0.99l-0.27,-0.02l-1.94,0.8l-1.52,-0.07l-0.15,-1.72l-0.12,-0.21l-0.99,-0.76l0.18,-0.18l0.02,-0.39l-0.17,-0.22l0.33,-0.75l0.91,-0.91l0.01,-0.42l-1.16,-1.25l-0.18,-0.89l0.24,-0.27Z\", \"name\": \"Bulgaria\"}, \"BA\": {\"path\": \"M468.39,164.66l0.16,0.04l0.43,-0.0l-0.43,0.93l0.06,0.34l1.08,1.06l-0.28,1.09l-0.5,0.13l-0.47,0.28l-0.86,0.74l-0.1,0.16l-0.28,1.29l-1.81,-0.94l-0.9,-1.22l-1.0,-0.73l-1.1,-1.1l-0.55,-0.96l-1.11,-1.3l0.3,-0.75l0.59,0.46l0.42,-0.04l0.46,-0.54l1.0,-0.06l2.11,0.5l1.72,-0.03l1.06,0.64Z\", \"name\": \"Bosnia and Herzegovina\"}, \"BN\": {\"path\": \"M707.34,273.57l0.76,-0.72l1.59,-1.03l-0.18,1.93l-0.9,-0.06l-0.28,0.14l-0.31,0.51l-0.68,-0.78Z\", \"name\": \"Brunei\"}, \"BO\": {\"path\": \"M263.83,340.79l-0.23,-0.12l-2.86,-0.11l-0.28,0.17l-0.77,1.67l-1.17,-1.51l-0.18,-0.11l-3.28,-0.64l-0.28,0.1l-2.02,2.3l-1.43,0.29l-0.91,-3.35l-1.31,-2.88l0.75,-2.41l-0.09,-0.32l-1.23,-1.03l-0.31,-1.76l-0.05,-0.12l-1.12,-1.6l1.49,-2.62l0.01,-0.28l-1.0,-2.0l0.48,-0.72l0.02,-0.29l-0.37,-0.78l0.87,-1.13l0.06,-0.18l0.05,-2.17l0.12,-1.71l0.5,-0.8l0.01,-0.3l-1.9,-3.58l1.3,0.15l1.34,-0.05l0.23,-0.12l0.51,-0.7l2.12,-0.99l1.31,-0.93l2.81,-0.37l-0.21,1.51l0.01,0.13l0.29,0.91l-0.19,1.64l0.11,0.27l2.72,2.27l0.15,0.07l2.71,0.41l0.92,0.88l0.12,0.07l1.64,0.49l1.0,0.71l0.18,0.06l1.5,-0.02l1.24,0.64l0.1,1.31l0.05,0.14l0.44,0.68l0.02,0.73l-0.44,0.03l-0.27,0.39l0.96,2.99l0.28,0.21l4.43,0.1l-0.28,1.12l0.0,0.15l0.27,1.02l0.15,0.19l1.27,0.67l0.52,1.42l-0.42,1.91l-0.66,1.1l-0.04,0.2l0.21,1.3l-0.19,0.13l-0.01,-0.27l-0.15,-0.24l-2.33,-1.33l-0.14,-0.04l-2.38,-0.03l-4.36,0.76l-0.21,0.16l-1.2,2.29l-0.03,0.13l-0.06,1.37l-0.79,2.53l-0.05,-0.08Z\", \"name\": \"Bolivia\"}, \"JP\": {\"path\": \"M781.17,166.78l1.8,0.67l0.28,-0.04l1.38,-1.01l0.43,2.67l-3.44,0.77l-0.18,0.12l-2.04,2.79l-3.71,-1.94l-0.42,0.15l-1.29,3.11l-2.32,0.04l-0.3,-2.63l1.12,-2.1l2.51,-0.16l0.28,-0.25l0.73,-4.22l0.58,-1.9l2.59,2.84l2.0,1.1ZM773.66,187.36l-0.92,2.24l-0.01,0.2l0.4,1.3l-1.18,1.81l-3.06,1.28l-4.35,0.17l-0.19,0.08l-3.4,3.06l-1.36,-0.87l-0.1,-1.95l-0.34,-0.28l-4.35,0.62l-2.99,1.33l-2.87,0.05l-0.28,0.2l0.09,0.33l2.37,1.93l-1.57,4.44l-1.35,0.97l-0.9,-0.79l0.57,-2.32l-0.15,-0.34l-1.5,-0.77l-0.81,-1.53l2.04,-0.75l0.14,-0.1l1.28,-1.72l2.47,-1.43l1.84,-1.92l4.83,-0.82l2.62,0.57l0.33,-0.16l2.45,-4.77l1.38,1.14l0.38,0.0l5.1,-4.02l0.09,-0.11l1.57,-3.57l0.02,-0.16l-0.42,-3.22l0.94,-1.67l2.27,-0.47l1.26,3.82l-0.07,2.23l-2.26,2.86l-0.06,0.19l0.04,2.93ZM757.85,196.18l0.22,0.66l-1.11,1.33l-0.8,-0.7l-0.33,-0.04l-1.28,0.65l-0.14,0.15l-0.54,1.34l-1.17,-0.57l0.02,-1.03l1.2,-1.45l1.24,0.28l0.29,-0.1l0.9,-1.03l1.51,0.5Z\", \"name\": \"Japan\"}, \"BI\": {\"path\": \"M494.7,295.83l-0.14,-2.71l-0.04,-0.13l-0.34,-0.62l0.93,0.12l0.3,-0.16l0.67,-1.25l0.9,0.11l0.11,0.76l0.08,0.16l0.46,0.48l0.02,0.56l-0.55,0.48l-0.96,1.29l-0.82,0.82l-0.61,0.07Z\", \"name\": \"Burundi\"}, \"BJ\": {\"path\": \"M427.4,268.94l-1.58,0.22l-0.52,-1.45l0.11,-5.73l-0.08,-0.21l-0.43,-0.44l-0.09,-1.13l-0.09,-0.19l-1.52,-1.52l0.24,-1.01l0.7,-0.23l0.18,-0.16l0.45,-0.97l1.07,-0.21l0.19,-0.12l0.53,-0.73l0.73,-0.65l0.68,-0.0l1.69,1.3l-0.08,0.67l0.02,0.14l0.52,1.38l-0.44,0.9l-0.01,0.24l0.2,0.52l-1.1,1.42l-0.76,0.76l-0.08,0.13l-0.47,1.59l0.05,1.69l-0.13,3.79Z\", \"name\": \"Benin\"}, \"BT\": {\"path\": \"M650.38,213.78l0.88,0.75l-0.13,1.24l-1.77,0.07l-2.1,-0.18l-1.57,0.4l-2.02,-0.91l-0.02,-0.24l1.54,-1.87l1.18,-0.6l1.67,0.59l1.32,0.08l1.01,0.67Z\", \"name\": \"Bhutan\"}, \"JM\": {\"path\": \"M226.67,238.37l1.64,0.23l1.2,0.56l0.11,0.19l-1.25,0.03l-0.14,0.04l-0.65,0.37l-1.24,-0.37l-1.17,-0.77l0.11,-0.22l0.86,-0.15l0.52,0.08Z\", \"name\": \"Jamaica\"}, \"BW\": {\"path\": \"M484.91,331.96l0.53,0.52l0.82,1.53l2.83,2.86l0.14,0.08l0.85,0.22l0.03,0.81l0.74,1.66l0.21,0.17l1.87,0.39l1.17,0.87l-3.13,1.71l-2.3,2.01l-0.07,0.1l-0.82,1.74l-0.66,0.88l-1.24,0.19l-0.24,0.2l-0.65,1.98l-1.4,0.55l-1.9,-0.12l-1.2,-0.74l-1.06,-0.32l-0.22,0.02l-1.22,0.62l-0.14,0.14l-0.58,1.21l-1.16,0.79l-1.18,1.13l-1.5,0.23l-0.4,-0.68l0.22,-1.53l-0.04,-0.19l-1.48,-2.54l-0.11,-0.11l-0.53,-0.31l-0.0,-7.25l2.18,-0.08l0.29,-0.3l0.07,-9.0l1.63,-0.08l3.69,-0.86l0.84,0.93l0.38,0.05l1.53,-0.97l0.79,-0.03l1.3,-0.53l0.23,0.1l0.92,1.96Z\", \"name\": \"Botswana\"}, \"BR\": {\"path\": \"M259.49,274.87l1.42,0.25l1.97,0.62l0.28,-0.05l0.67,-0.55l1.76,-0.38l2.8,-0.94l0.12,-0.08l0.92,-0.96l0.05,-0.33l-0.15,-0.32l0.73,-0.06l0.36,0.35l-0.27,0.93l0.17,0.36l0.76,0.34l0.44,0.9l-0.58,0.73l-0.06,0.13l-0.4,2.13l0.03,0.19l0.62,1.22l0.17,1.11l0.11,0.19l1.54,1.18l0.15,0.06l1.23,0.12l0.29,-0.15l0.2,-0.36l0.71,-0.11l1.13,-0.44l0.79,-0.63l1.25,0.19l0.65,-0.08l1.32,0.2l0.32,-0.18l0.23,-0.51l-0.05,-0.31l-0.31,-0.37l0.11,-0.31l0.75,0.17l0.13,0.0l1.1,-0.24l1.34,0.5l1.08,0.51l0.33,-0.05l0.67,-0.58l0.27,0.05l0.28,0.57l0.31,0.17l1.2,-0.18l0.17,-0.08l1.03,-1.05l0.76,-1.82l1.39,-2.16l0.49,-0.07l0.52,1.17l1.4,4.37l0.2,0.2l1.14,0.35l0.05,1.39l-1.8,1.97l0.01,0.42l0.78,0.75l0.18,0.08l4.16,0.37l0.08,2.25l0.5,0.22l1.78,-1.54l2.98,0.85l4.07,1.5l1.07,1.28l-0.37,1.23l0.36,0.38l2.83,-0.75l4.8,1.3l3.75,-0.09l3.6,2.02l3.27,2.84l1.93,0.72l2.13,0.11l0.76,0.66l1.22,4.56l-0.96,4.03l-1.22,1.58l-3.52,3.51l-1.63,2.91l-1.75,2.09l-0.5,0.04l-0.26,0.19l-0.72,1.99l0.18,4.76l-0.95,5.56l-0.74,0.96l-0.06,0.15l-0.43,3.39l-2.49,3.34l-0.06,0.13l-0.4,2.56l-1.9,1.07l-0.13,0.16l-0.51,1.38l-2.59,0.0l-3.94,1.01l-1.82,1.19l-2.85,0.81l-3.01,2.17l-2.12,2.65l-0.06,0.13l-0.36,2.0l0.01,0.13l0.4,1.42l-0.45,2.63l-0.53,1.23l-1.76,1.53l-2.76,4.79l-2.16,2.15l-1.69,1.29l-0.09,0.12l-1.12,2.6l-1.3,1.26l-0.45,-1.02l0.99,-1.18l0.01,-0.37l-1.5,-1.95l-1.98,-1.54l-2.58,-1.77l-0.2,-0.05l-0.81,0.07l-2.42,-2.05l-0.25,-0.07l-0.77,0.14l2.75,-3.07l2.8,-2.61l1.67,-1.09l2.11,-1.49l0.13,-0.24l0.05,-2.15l-0.07,-0.2l-1.26,-1.54l-0.35,-0.09l-0.64,0.27l0.3,-0.95l0.34,-1.57l0.01,-1.52l-0.16,-0.26l-0.9,-0.48l-0.27,-0.01l-0.86,0.39l-0.65,-0.08l-0.23,-0.8l-0.23,-2.39l-0.04,-0.12l-0.47,-0.79l-0.14,-0.12l-1.69,-0.71l-0.25,0.01l-0.93,0.47l-2.29,-0.44l0.15,-3.3l-0.03,-0.15l-0.62,-1.22l0.57,-0.39l0.13,-0.3l-0.22,-1.37l0.67,-1.13l0.44,-2.04l-0.01,-0.17l-0.59,-1.61l-0.14,-0.16l-1.25,-0.66l-0.22,-0.82l0.35,-1.41l-0.28,-0.37l-4.59,-0.1l-0.78,-2.41l0.34,-0.02l0.28,-0.31l-0.03,-1.1l-0.05,-0.16l-0.45,-0.68l-0.1,-1.4l-0.16,-0.24l-1.45,-0.76l-0.14,-0.03l-1.48,0.02l-1.04,-0.73l-1.62,-0.48l-0.93,-0.9l-0.16,-0.08l-2.72,-0.41l-2.53,-2.12l0.18,-1.54l-0.01,-0.13l-0.29,-0.91l0.26,-1.83l-0.34,-0.34l-3.28,0.43l-0.14,0.05l-1.3,0.93l-2.16,1.01l-0.12,0.09l-0.47,0.65l-1.12,0.05l-1.84,-0.21l-0.12,0.01l-1.33,0.41l-0.82,-0.21l0.16,-3.6l-0.48,-0.26l-1.97,1.43l-1.96,-0.06l-0.86,-1.23l-0.22,-0.13l-1.23,-0.11l0.34,-0.69l-0.05,-0.33l-1.36,-1.5l-0.92,-2.0l0.45,-0.32l0.13,-0.25l-0.0,-0.87l1.34,-0.64l0.17,-0.32l-0.23,-1.23l0.56,-0.77l0.05,-0.13l0.16,-1.03l2.7,-1.61l2.01,-0.47l0.16,-0.09l0.24,-0.27l2.11,0.11l0.31,-0.25l1.13,-6.87l0.06,-1.12l-0.4,-1.53l-0.1,-0.15l-1.0,-0.82l0.01,-1.45l1.08,-0.32l0.39,0.2l0.44,-0.24l0.08,-0.96l-0.25,-0.32l-1.22,-0.22l-0.02,-1.01l4.57,0.05l0.22,-0.09l0.6,-0.63l0.44,0.5l0.47,1.42l0.45,0.16l0.27,-0.18l1.21,1.16l0.23,0.08l1.95,-0.16l0.23,-0.14l0.43,-0.67l1.76,-0.55l1.05,-0.42l0.18,-0.2l0.25,-0.92l1.65,-0.66l0.18,-0.35l-0.14,-0.53l-0.26,-0.22l-1.91,-0.19l-0.29,-1.33l0.1,-1.64l-0.15,-0.28l-0.44,-0.25Z\", \"name\": \"Brazil\"}, \"BS\": {\"path\": \"M227.51,216.69l0.3,0.18l-0.24,1.07l0.03,-1.04l-0.09,-0.21ZM226.5,224.03l-0.13,0.03l-0.54,-1.3l-0.09,-0.12l-0.78,-0.64l0.4,-1.26l0.33,0.05l0.79,2.0l0.01,1.24ZM225.76,216.5l-2.16,0.34l-0.07,-0.41l0.85,-0.16l1.36,0.07l0.02,0.16Z\", \"name\": \"The Bahamas\"}, \"BY\": {\"path\": \"M480.08,135.28l2.09,0.02l0.13,-0.03l2.72,-1.3l0.16,-0.19l0.55,-1.83l1.94,-1.06l0.15,-0.31l-0.2,-1.33l1.33,-0.52l2.58,-1.3l2.39,0.8l0.3,0.75l0.37,0.17l1.22,-0.39l2.18,0.75l0.2,1.36l-0.48,0.85l0.01,0.32l1.57,2.26l0.92,0.6l-0.1,0.41l0.19,0.35l1.61,0.57l0.48,0.6l-0.64,0.49l-1.91,-0.11l-0.18,0.05l-0.48,0.32l-0.1,0.39l0.57,1.1l0.51,1.78l-1.79,0.17l-0.18,0.08l-0.77,0.73l-0.09,0.19l-0.13,1.31l-0.75,-0.22l-2.11,0.15l-0.56,-0.66l-0.39,-0.06l-0.8,0.49l-0.79,-0.4l-0.13,-0.03l-1.94,-0.07l-2.76,-0.79l-2.58,-0.27l-1.98,0.07l-0.15,0.05l-1.31,0.86l-0.8,0.09l-0.04,-1.16l-0.03,-0.12l-0.63,-1.28l1.22,-0.56l0.17,-0.27l0.01,-1.35l-0.04,-0.15l-0.66,-1.24l-0.08,-1.12Z\", \"name\": \"Belarus\"}, \"BZ\": {\"path\": \"M198.03,239.7l0.28,0.19l0.43,-0.1l0.82,-1.42l0.0,0.07l0.29,0.29l0.16,0.0l-0.02,0.35l-0.39,1.08l0.02,0.25l0.16,0.29l-0.23,0.8l0.04,0.24l0.09,0.14l-0.25,1.12l-0.38,0.53l-0.33,0.06l-0.21,0.15l-0.41,0.74l-0.25,0.0l0.17,-2.58l0.01,-2.2Z\", \"name\": \"Belize\"}, \"RU\": {\"path\": \"M688.57,38.85l0.63,2.39l0.44,0.19l2.22,-1.23l7.18,0.07l5.54,2.49l1.85,1.77l-0.55,2.34l-2.64,1.42l-6.57,2.76l-1.95,1.5l0.12,0.53l3.09,0.68l3.69,1.23l0.21,-0.01l1.98,-0.81l1.16,2.84l0.5,0.08l1.03,-1.18l3.86,-0.74l7.79,0.78l0.56,2.05l0.27,0.22l10.47,0.71l0.32,-0.29l0.13,-3.34l4.98,0.8l3.96,-0.02l3.88,2.43l1.06,2.79l-1.38,1.83l0.01,0.38l3.15,3.64l0.1,0.08l3.94,1.86l0.4,-0.14l2.28,-4.56l3.75,1.94l0.22,0.02l4.18,-1.22l4.76,1.4l0.26,-0.04l1.74,-1.23l3.98,0.63l0.32,-0.41l-1.71,-4.1l3.0,-1.86l22.39,3.04l2.06,2.67l0.1,0.08l6.55,3.51l0.17,0.03l10.08,-0.86l4.86,0.73l1.91,1.72l-0.29,3.13l0.18,0.31l3.08,1.26l0.19,0.01l3.32,-0.9l4.37,-0.11l4.78,0.87l4.61,-0.48l4.26,3.82l0.32,0.05l3.1,-1.4l0.12,-0.45l-1.91,-2.67l0.92,-1.64l7.78,1.22l5.22,-0.26l7.12,2.1l9.6,5.22l6.4,4.15l-0.2,2.44l0.14,0.28l1.69,1.04l0.45,-0.31l-0.51,-2.66l6.31,0.58l4.52,3.61l-2.1,1.52l-4.02,0.42l-0.27,0.29l-0.06,3.83l-0.81,0.67l-2.14,-0.11l-1.91,-1.39l-3.19,-1.13l-0.51,-1.63l-0.21,-0.2l-2.54,-0.67l-0.13,-0.0l-2.69,0.5l-1.12,-1.19l0.48,-1.36l-0.38,-0.39l-3.0,0.98l-0.17,0.44l1.02,1.76l-1.27,1.55l-3.09,1.71l-3.15,-0.29l-0.3,0.18l0.07,0.34l2.22,2.1l1.47,3.22l1.15,1.09l0.25,1.41l-0.48,0.76l-4.47,-0.81l-0.17,0.02l-6.97,2.9l-2.2,0.44l-0.11,0.05l-3.83,2.68l-3.63,2.32l-0.1,0.11l-0.76,1.4l-3.3,-2.4l-0.3,-0.03l-6.31,2.85l-0.99,-1.21l-0.4,-0.06l-2.32,1.54l-3.23,-0.49l-0.33,0.2l-0.79,2.39l-2.97,3.51l-0.07,0.21l0.09,1.47l0.22,0.27l2.62,0.74l-0.3,4.7l-2.06,0.12l-0.26,0.2l-1.07,2.94l0.04,0.27l0.83,1.19l-4.03,1.63l-0.18,0.21l-0.83,3.72l-3.55,0.79l-0.23,0.23l-0.73,3.32l-3.22,2.76l-0.76,-1.88l-1.07,-4.88l-1.39,-7.59l1.17,-4.76l2.05,-2.08l0.09,-0.19l0.11,-1.46l3.67,-0.77l0.15,-0.08l4.47,-4.61l4.29,-3.82l4.48,-3.01l0.11,-0.14l2.01,-5.43l-0.31,-0.4l-3.04,0.33l-0.24,0.17l-1.47,3.11l-5.98,3.94l-1.91,-4.36l-0.33,-0.17l-6.46,1.3l-0.15,0.08l-6.27,6.33l-0.01,0.41l1.7,1.87l-5.04,0.87l-3.51,0.34l0.16,-2.32l-0.26,-0.32l-3.89,-0.56l-0.19,0.04l-3.02,1.77l-7.63,-0.63l-8.24,1.1l-0.16,0.07l-8.11,7.09l-9.6,8.31l0.16,0.52l3.79,0.42l1.16,2.03l0.17,0.14l2.43,0.76l0.31,-0.08l1.5,-1.61l2.49,0.2l3.46,3.6l0.08,2.67l-1.91,3.26l-0.04,0.14l-0.21,3.91l-1.11,5.09l-3.73,4.55l-0.87,2.21l-6.73,7.14l-1.59,1.77l-3.23,1.72l-1.38,0.03l-1.48,-1.39l-0.37,-0.03l-3.36,2.22l-0.11,0.14l-0.16,0.42l-0.01,-1.09l1.0,-0.06l0.28,-0.27l0.36,-3.6l-0.61,-2.51l1.85,-0.94l2.94,0.53l0.32,-0.15l1.71,-3.1l0.84,-3.38l0.97,-1.18l1.32,-2.88l-0.34,-0.42l-4.14,0.95l-2.18,1.25l-3.51,-0.0l-0.95,-2.81l-0.1,-0.14l-2.97,-2.3l-0.11,-0.05l-4.19,-1.0l-0.89,-3.08l-0.87,-2.03l-0.95,-1.46l-1.54,-3.37l-0.12,-0.14l-2.27,-1.28l-3.83,-1.02l-3.37,0.1l-3.11,0.61l-0.13,0.06l-2.07,1.69l0.04,0.49l1.23,0.72l0.03,1.53l-1.34,1.05l-2.26,3.51l-0.05,0.17l0.02,1.27l-3.25,1.9l-2.87,-1.17l-0.14,-0.02l-2.86,0.26l-1.22,-1.02l-0.12,-0.06l-1.5,-0.35l-0.23,0.04l-3.62,2.27l-3.24,0.53l-2.28,0.79l-3.08,-0.51l-2.24,0.03l-1.49,-1.61l-2.45,-1.57l-0.11,-0.04l-2.6,-0.43l-3.17,0.43l-2.31,0.59l-3.31,-1.28l-0.45,-2.31l-0.21,-0.23l-2.94,-0.85l-2.26,-0.39l-2.77,-1.36l-0.37,0.09l-2.59,3.45l-0.03,0.32l0.91,1.74l-2.15,2.01l-3.47,-0.79l-2.44,-0.12l-1.59,-1.46l-0.2,-0.08l-2.55,-0.05l-2.12,-0.98l-0.24,-0.01l-3.85,1.57l-4.74,2.79l-2.59,0.55l-0.79,0.21l-1.21,-1.81l-0.29,-0.13l-3.05,0.41l-0.96,-1.25l-0.14,-0.1l-1.65,-0.6l-1.15,-1.82l-0.13,-0.12l-1.38,-0.6l-0.19,-0.02l-3.49,0.82l-3.35,-1.85l-0.38,0.08l-1.08,1.4l-5.36,-8.17l-3.02,-2.52l0.72,-0.85l0.01,-0.38l-0.37,-0.08l-6.22,3.21l-1.98,0.16l0.17,-1.51l-0.2,-0.31l-3.22,-1.17l-0.19,-0.0l-2.3,0.74l-0.72,-3.27l-0.24,-0.23l-4.5,-0.75l-0.21,0.04l-2.2,1.42l-6.21,1.27l-0.11,0.05l-1.16,0.81l-9.3,1.19l-0.18,0.09l-1.15,1.17l-0.02,0.39l1.56,2.01l-2.02,0.74l-0.16,0.42l0.35,0.68l-2.18,1.49l0.02,0.51l3.83,2.16l-0.45,1.13l-3.31,-0.13l-0.25,0.12l-0.57,0.77l-2.97,-1.59l-0.15,-0.04l-3.97,0.07l-0.13,0.03l-2.53,1.32l-2.84,-1.28l-5.52,-2.3l-0.12,-0.02l-3.91,0.09l-0.16,0.05l-5.17,3.6l-0.13,0.21l-0.25,1.89l-2.17,-1.6l-0.44,0.1l-2.0,3.59l0.06,0.37l0.55,0.5l-1.32,2.23l0.04,0.36l2.13,2.17l0.23,0.09l1.7,-0.08l1.42,1.89l-0.23,1.5l0.19,0.32l0.94,0.38l-0.89,1.44l-2.3,0.49l-0.17,0.11l-2.49,3.2l0.0,0.37l2.2,2.81l-0.23,1.93l0.06,0.22l2.56,3.32l-1.27,1.02l-0.4,0.66l-0.8,-0.15l-1.65,-1.75l-0.18,-0.09l-0.66,-0.09l-1.45,-0.64l-0.72,-1.16l-0.18,-0.13l-2.34,-0.63l-0.17,0.0l-1.32,0.41l-0.31,-0.4l-0.12,-0.09l-3.49,-1.48l-3.67,-0.49l-2.1,-0.52l-0.3,0.1l-0.12,0.14l-2.96,-2.4l-2.89,-1.19l-1.69,-1.42l1.27,-0.35l0.16,-0.1l2.08,-2.61l-0.04,-0.41l-1.02,-0.9l3.21,-1.12l0.2,-0.31l-0.07,-0.69l-0.37,-0.26l-1.86,0.42l0.05,-0.86l1.11,-0.76l2.35,-0.23l0.25,-0.19l0.39,-1.07l0.0,-0.19l-0.51,-1.64l0.95,-1.58l0.04,-0.16l-0.03,-0.95l-0.22,-0.28l-3.69,-1.06l-1.43,0.02l-1.45,-1.44l-0.29,-0.08l-1.83,0.49l-2.88,-1.04l0.04,-0.42l-0.04,-0.18l-0.89,-1.43l-0.23,-0.14l-1.77,-0.14l-0.13,-0.66l0.52,-0.56l0.01,-0.4l-1.6,-1.9l-0.27,-0.1l-2.55,0.32l-0.71,-0.16l-0.3,0.1l-0.53,0.63l-0.58,-0.08l-0.56,-1.97l-0.48,-0.94l0.17,-0.11l1.92,0.11l0.2,-0.06l0.97,-0.74l0.05,-0.42l-0.72,-0.91l-0.13,-0.1l-1.43,-0.51l0.09,-0.36l-0.13,-0.33l-0.97,-0.59l-1.43,-2.06l0.44,-0.77l0.04,-0.19l-0.25,-1.64l-0.2,-0.24l-2.45,-0.84l-0.19,-0.0l-1.05,0.34l-0.25,-0.62l-0.18,-0.17l-2.5,-0.84l-0.74,-1.93l-0.21,-1.7l-0.13,-0.21l-0.92,-0.63l0.83,-0.89l0.07,-0.27l-0.71,-3.26l1.69,-2.01l0.03,-0.34l-0.24,-0.41l2.63,-1.9l-0.01,-0.49l-2.31,-1.57l5.08,-4.61l2.33,-2.24l1.01,-2.08l-0.09,-0.37l-3.52,-2.56l0.94,-2.38l-0.04,-0.29l-2.14,-2.86l1.61,-3.35l-0.01,-0.29l-2.81,-4.58l2.19,-3.04l-0.06,-0.42l-3.7,-2.76l0.32,-2.67l1.87,-0.38l4.26,-1.77l2.46,-1.47l3.96,2.58l0.12,0.05l6.81,1.04l9.37,4.87l1.81,1.92l0.15,2.55l-2.61,2.06l-3.95,1.07l-11.1,-3.15l-0.17,0.0l-1.84,0.53l-0.1,0.53l3.97,2.97l0.15,1.77l0.16,4.14l0.19,0.27l3.21,1.22l1.94,1.03l0.44,-0.22l0.32,-1.94l-0.07,-0.25l-1.32,-1.52l1.25,-1.2l5.87,2.45l0.24,-0.01l2.11,-0.98l0.13,-0.42l-1.55,-2.75l5.52,-3.84l2.13,0.22l2.28,1.42l0.43,-0.12l1.46,-2.87l-0.04,-0.33l-1.97,-2.37l1.14,-2.38l-0.02,-0.3l-1.42,-2.07l6.15,1.22l1.14,1.92l-2.74,0.46l-0.25,0.3l0.02,2.36l0.12,0.24l1.97,1.44l0.25,0.05l3.87,-0.91l0.22,-0.23l0.58,-2.55l5.09,-1.98l8.67,-3.69l1.22,0.14l-2.06,2.2l0.18,0.5l3.11,0.45l0.23,-0.07l1.71,-1.41l4.59,-0.12l0.12,-0.03l3.53,-1.72l2.7,2.48l0.42,-0.01l2.85,-2.88l-0.0,-0.43l-2.42,-2.35l1.0,-1.13l7.2,1.31l3.42,1.36l9.06,4.97l0.39,-0.08l1.67,-2.27l-0.04,-0.4l-2.46,-2.23l-0.06,-0.82l-0.26,-0.27l-2.64,-0.38l0.69,-1.76l0.0,-0.22l-1.32,-3.47l-0.07,-1.27l4.52,-4.09l0.08,-0.11l1.6,-4.18l1.67,-0.84l6.33,1.2l0.46,2.31l-2.31,3.67l0.05,0.38l1.49,1.41l0.77,3.04l-0.56,6.05l0.09,0.24l2.62,2.54l-0.99,2.65l-4.87,5.96l0.17,0.48l2.86,0.61l0.31,-0.13l0.94,-1.42l2.67,-1.04l0.18,-0.19l0.64,-2.01l2.11,-1.98l0.05,-0.37l-1.38,-2.32l1.11,-2.74l-0.24,-0.41l-2.53,-0.33l-0.53,-2.16l1.96,-4.42l-0.05,-0.32l-3.03,-3.48l4.21,-2.94l0.12,-0.3l-0.52,-3.04l0.72,-0.06l1.18,2.35l-0.97,4.39l0.2,0.35l2.68,0.84l0.37,-0.38l-1.05,-3.07l3.89,-1.71l5.05,-0.24l4.55,2.62l0.36,-0.05l0.05,-0.36l-2.19,-3.84l-0.23,-4.78l4.07,-0.92l5.98,0.21l5.47,-0.64l0.2,-0.48l-1.88,-2.37l2.65,-2.99l2.75,-0.13l0.12,-0.03l4.82,-2.48l6.56,-0.67l0.23,-0.14l0.76,-1.27l6.33,-0.46l1.97,1.11l0.28,0.01l5.55,-2.71l4.53,0.08l0.29,-0.21l0.67,-2.18l2.29,-2.15l5.75,-2.13l3.48,1.4l-2.7,1.03l-0.19,0.31l0.26,0.26l5.47,0.78ZM871.83,65.73l0.25,-0.15l1.99,0.01l3.3,1.2l-0.08,0.22l-2.41,1.03l-5.73,0.49l-0.31,-1.0l2.99,-1.8ZM797.64,48.44l-2.22,1.51l-3.85,-0.43l-4.35,-1.85l0.42,-1.13l4.42,0.72l5.59,1.17ZM783.82,46.06l-1.71,3.25l-9.05,-0.14l-4.11,1.15l-4.64,-3.04l1.21,-3.13l3.11,-0.91l6.53,0.22l8.66,2.59ZM780.37,145.71l2.28,5.23l-3.09,-0.89l-0.37,0.19l-1.54,4.65l0.04,0.27l2.38,3.17l-0.05,1.4l-1.41,-1.41l-0.46,0.04l-1.23,1.81l-0.33,-1.86l0.28,-3.1l-0.28,-3.41l0.58,-2.46l0.11,-4.39l-0.03,-0.13l-1.44,-3.2l0.21,-4.39l2.19,-1.49l0.09,-0.41l-0.81,-1.3l0.48,-0.21l0.56,1.94l0.86,3.23l-0.05,3.36l1.03,3.35ZM780.16,57.18l-3.4,0.03l-5.06,-0.53l1.97,-1.59l2.95,-0.42l3.35,1.75l0.18,0.77ZM683.84,31.18l-13.29,1.97l4.16,-6.56l1.88,-0.58l1.77,0.34l6.08,3.02l-0.6,1.8ZM670.94,28.02l-5.18,0.65l-6.89,-1.58l-4.03,-2.07l-1.88,-3.98l-0.18,-0.16l-2.8,-0.93l5.91,-3.62l5.25,-1.29l4.73,2.88l5.63,5.44l-0.57,4.66ZM564.37,68.98l-0.85,0.23l-7.93,-0.57l-0.6,-1.84l-0.21,-0.2l-4.34,-1.18l-0.3,-2.08l2.34,-0.92l0.19,-0.29l-0.08,-2.43l4.85,-4.0l-0.12,-0.52l-1.68,-0.43l5.47,-3.94l0.11,-0.33l-0.6,-2.02l5.36,-2.55l8.22,-3.27l8.29,-0.96l4.34,-1.94l4.67,-0.65l1.45,1.72l-1.43,1.37l-8.8,2.52l-7.65,2.42l-7.92,4.84l-3.73,4.75l-3.92,4.58l-0.07,0.23l0.51,3.88l0.11,0.2l4.32,3.39ZM548.86,18.57l-3.28,0.75l-2.25,0.44l-0.22,0.19l-0.3,0.81l-2.67,0.86l-2.27,-1.14l1.2,-1.51l-0.23,-0.49l-3.14,-0.1l2.48,-0.54l3.55,-0.07l0.44,1.36l0.49,0.12l1.4,-1.35l2.2,-0.9l3.13,1.08l-0.54,0.49ZM477.5,133.25l-4.21,0.05l-2.69,-0.34l0.39,-1.03l3.24,-1.06l2.51,0.58l0.85,0.43l-0.2,0.71l-0.0,0.15l0.12,0.52Z\", \"name\": \"Russia\"}, \"RW\": {\"path\": \"M497.03,288.12l0.78,1.11l-0.12,1.19l-0.49,0.21l-1.25,-0.15l-0.3,0.16l-0.67,1.24l-1.01,-0.13l0.16,-0.92l0.22,-0.12l0.15,-0.24l0.09,-1.37l0.49,-0.48l0.42,0.18l0.25,-0.01l1.26,-0.65Z\", \"name\": \"Rwanda\"}, \"RS\": {\"path\": \"M469.75,168.65l0.21,-0.21l0.36,-1.44l-0.08,-0.29l-1.06,-1.03l0.54,-1.16l-0.28,-0.43l-0.26,0.0l0.55,-0.67l-0.01,-0.39l-0.77,-0.86l-0.45,-0.89l1.56,-0.67l1.39,0.12l1.22,1.1l0.26,0.91l0.16,0.19l1.38,0.66l0.17,1.12l0.14,0.21l1.46,0.9l0.35,-0.03l0.62,-0.54l0.09,0.06l-0.28,0.25l-0.03,0.42l0.29,0.34l-0.44,0.5l-0.07,0.26l0.22,1.12l0.07,0.14l1.02,1.1l-0.81,0.84l-0.42,0.96l0.04,0.3l0.12,0.15l-0.15,0.16l-1.04,0.04l-0.39,0.08l0.33,-0.81l-0.29,-0.41l-0.21,0.01l-0.39,-0.45l-0.13,-0.09l-0.32,-0.11l-0.27,-0.4l-0.14,-0.11l-0.4,-0.16l-0.31,-0.37l-0.34,-0.09l-0.45,0.17l-0.18,0.18l-0.29,0.84l-0.96,-0.65l-0.81,-0.33l-0.32,-0.37l-0.22,-0.18Z\", \"name\": \"Republic of Serbia\"}, \"LT\": {\"path\": \"M478.13,133.31l-0.14,-0.63l0.25,-0.88l-0.15,-0.35l-1.17,-0.58l-2.43,-0.57l-0.45,-2.51l2.58,-0.97l4.14,0.22l2.3,-0.32l0.26,0.54l0.22,0.17l1.26,0.22l2.25,1.6l0.19,1.23l-1.87,1.01l-0.14,0.18l-0.54,1.83l-2.54,1.21l-2.18,-0.02l-0.52,-0.91l-0.18,-0.14l-1.11,-0.32Z\", \"name\": \"Lithuania\"}, \"LU\": {\"path\": \"M435.95,147.99l0.33,0.49l-0.11,1.07l-0.39,0.04l-0.29,-0.15l0.21,-1.4l0.25,-0.05Z\", \"name\": \"Luxembourg\"}, \"LR\": {\"path\": \"M401.37,273.67l-0.32,0.01l-2.48,-1.15l-2.24,-1.89l-2.14,-1.38l-1.47,-1.42l0.44,-0.59l0.05,-0.13l0.12,-0.65l1.07,-1.3l1.08,-1.09l0.52,-0.07l0.43,-0.18l0.84,1.24l-0.15,0.89l0.07,0.25l0.49,0.54l0.22,0.1l0.71,0.01l0.27,-0.16l0.42,-0.83l0.19,0.02l-0.06,0.52l0.23,1.12l-0.5,1.03l0.06,0.35l0.73,0.69l0.14,0.08l0.71,0.15l0.92,0.91l0.06,0.76l-0.17,0.22l-0.06,0.15l-0.17,1.8Z\", \"name\": \"Liberia\"}, \"RO\": {\"path\": \"M477.94,155.19l1.02,-0.64l1.49,0.33l1.52,0.01l1.09,0.73l0.32,0.01l0.81,-0.46l1.8,-0.3l0.18,-0.1l0.54,-0.64l0.86,0.0l0.64,0.26l0.71,0.87l0.8,1.35l1.39,1.81l0.07,1.25l-0.26,1.3l0.01,0.15l0.45,1.42l0.15,0.18l1.12,0.57l0.25,0.01l1.05,-0.45l0.86,0.4l0.03,0.43l-0.92,0.51l-0.63,-0.24l-0.4,0.22l-0.64,3.41l-1.12,-0.24l-1.78,-1.09l-0.23,-0.04l-2.95,0.71l-1.25,0.77l-3.55,-0.16l-1.89,-0.47l-0.14,-0.0l-0.75,0.17l-0.61,-1.07l-0.3,-0.36l0.36,-0.32l-0.04,-0.48l-0.62,-0.38l-0.36,0.03l-0.62,0.54l-1.15,-0.71l-0.18,-1.14l-0.17,-0.22l-1.4,-0.67l-0.24,-0.86l-0.09,-0.14l-0.96,-0.87l1.49,-0.44l0.16,-0.11l1.51,-2.14l1.15,-2.09l1.44,-0.63Z\", \"name\": \"Romania\"}, \"GW\": {\"path\": \"M383.03,256.73l-1.12,-0.88l-0.14,-0.06l-0.94,-0.15l-0.43,-0.54l0.01,-0.27l-0.13,-0.26l-0.68,-0.48l-0.05,-0.16l0.99,-0.31l0.77,0.08l0.15,-0.02l0.61,-0.26l4.25,0.1l-0.02,0.44l-0.19,0.18l-0.08,0.29l0.17,0.66l-0.17,0.14l-0.44,0.0l-0.16,0.05l-0.57,0.37l-0.66,-0.04l-0.24,0.1l-0.92,1.03Z\", \"name\": \"Guinea Bissau\"}, \"GT\": {\"path\": \"M195.13,249.89l-1.05,-0.35l-1.5,-0.04l-1.06,-0.47l-1.19,-0.93l0.04,-0.53l0.27,-0.55l-0.03,-0.31l-0.24,-0.32l1.02,-1.77l3.04,-0.01l0.3,-0.28l0.06,-0.88l-0.19,-0.3l-0.3,-0.11l-0.23,-0.45l-0.11,-0.12l-0.9,-0.58l-0.35,-0.33l0.37,-0.0l0.3,-0.3l0.0,-1.15l4.05,0.02l-0.02,1.74l-0.2,2.89l0.3,0.32l0.67,-0.0l0.75,0.42l0.4,-0.11l-0.62,0.53l-1.17,0.7l-0.13,0.16l-0.18,0.49l0.0,0.21l0.14,0.34l-0.35,0.44l-0.49,0.13l-0.2,0.41l0.03,0.06l-0.27,0.16l-0.86,0.64l-0.12,0.22ZM199.35,245.38l0.07,-0.13l0.05,0.02l-0.13,0.11Z\", \"name\": \"Guatemala\"}, \"GR\": {\"path\": \"M487.2,174.55l-0.64,1.54l-0.43,0.24l-1.41,-0.08l-1.28,-0.28l-0.14,0.0l-3.03,0.77l-0.13,0.51l1.39,1.34l-0.78,0.29l-1.2,0.0l-1.23,-1.42l-0.47,0.02l-0.47,0.65l-0.04,0.27l0.56,1.76l0.06,0.11l1.02,1.12l-0.66,0.45l-0.04,0.46l1.39,1.35l1.15,0.79l0.02,1.06l-1.91,-0.63l-0.36,0.42l0.56,1.12l-1.2,0.23l-0.22,0.4l0.8,2.14l-1.15,0.02l-1.89,-1.15l-0.89,-2.19l-0.43,-1.91l-0.05,-0.11l-0.98,-1.35l-1.24,-1.62l-0.13,-0.63l1.07,-1.32l0.06,-0.14l0.13,-0.81l0.68,-0.36l0.16,-0.25l0.03,-0.54l1.4,-0.23l0.12,-0.05l0.87,-0.6l1.26,0.05l0.25,-0.11l0.34,-0.43l0.33,-0.07l1.81,0.08l0.13,-0.02l1.87,-0.77l1.64,0.97l0.19,0.04l2.28,-0.28l0.26,-0.29l0.02,-0.95l0.56,0.36ZM480.44,192.0l1.05,0.74l0.01,0.0l-1.26,-0.23l0.2,-0.51ZM481.76,192.79l1.86,-0.15l1.53,0.17l-0.02,0.19l0.34,0.3l-2.28,0.15l0.01,-0.13l-0.25,-0.31l-1.19,-0.22ZM485.65,193.28l0.65,-0.16l-0.05,0.12l-0.6,0.04Z\", \"name\": \"Greece\"}, \"GQ\": {\"path\": \"M444.81,282.04l-0.21,-0.17l0.74,-2.4l3.56,0.05l0.02,2.42l-3.34,-0.02l-0.76,0.13Z\", \"name\": \"Equatorial Guinea\"}, \"GY\": {\"path\": \"M271.34,264.25l1.43,0.81l1.44,1.53l0.06,1.19l0.28,0.28l0.84,0.05l2.13,1.92l-0.34,1.93l-1.37,0.59l-0.17,0.34l0.12,0.51l-0.43,1.21l0.03,0.26l1.11,1.82l0.26,0.14l0.56,0.0l0.32,1.29l1.25,1.78l-0.08,0.01l-1.34,-0.21l-0.24,0.06l-0.78,0.64l-1.06,0.41l-0.76,0.1l-0.22,0.15l-0.18,0.32l-0.95,-0.1l-1.38,-1.05l-0.19,-1.13l-0.6,-1.18l0.37,-1.96l0.65,-0.83l0.03,-0.32l-0.57,-1.17l-0.15,-0.14l-0.62,-0.27l0.25,-0.85l-0.08,-0.3l-0.58,-0.58l-0.24,-0.09l-1.15,0.1l-1.41,-1.58l0.48,-0.49l0.09,-0.22l-0.04,-0.92l1.31,-0.34l0.73,-0.52l0.04,-0.44l-0.75,-0.82l0.16,-0.66l1.74,-1.3Z\", \"name\": \"Guyana\"}, \"GE\": {\"path\": \"M525.41,174.19l0.26,-0.88l-0.0,-0.17l-0.63,-2.06l-0.1,-0.15l-1.45,-1.12l-0.11,-0.05l-1.31,-0.33l-0.66,-0.69l1.97,0.48l3.65,0.49l3.3,1.41l0.39,0.5l0.33,0.1l1.43,-0.45l2.14,0.58l0.7,1.14l0.13,0.12l1.06,0.47l-0.18,0.11l-0.08,0.43l1.08,1.41l-0.06,0.06l-1.16,-0.15l-1.82,-0.84l-0.31,0.04l-0.55,0.44l-3.29,0.44l-2.32,-1.41l-0.17,-0.04l-2.25,0.12Z\", \"name\": \"Georgia\"}, \"GB\": {\"path\": \"M412.82,118.6l-2.31,3.4l-0.0,0.33l0.31,0.13l2.52,-0.49l2.34,0.02l-0.56,2.51l-2.22,3.13l0.22,0.47l2.43,0.21l2.35,4.35l0.17,0.14l1.58,0.51l1.49,3.78l0.73,1.37l0.2,0.15l2.76,0.59l-0.25,1.75l-1.18,0.91l-0.08,0.39l0.87,1.49l-1.96,1.51l-3.31,-0.02l-4.15,0.88l-1.07,-0.59l-0.35,0.04l-1.55,1.44l-2.17,-0.35l-0.22,0.05l-1.61,1.15l-0.78,-0.38l3.31,-3.12l2.18,-0.7l0.21,-0.31l-0.26,-0.27l-3.78,-0.54l-0.48,-0.9l2.3,-0.92l0.13,-0.46l-1.29,-1.71l0.39,-1.83l3.46,0.29l0.32,-0.24l0.37,-1.99l-0.06,-0.24l-1.71,-2.17l-0.18,-0.11l-2.91,-0.58l-0.43,-0.68l0.82,-1.4l-0.03,-0.35l-0.82,-0.97l-0.46,0.01l-0.85,1.05l-0.11,-2.6l-0.05,-0.16l-1.19,-1.7l0.86,-3.53l1.81,-2.75l1.88,0.26l2.38,-0.24ZM406.39,132.84l-1.09,1.92l-1.65,-0.62l-1.26,0.02l0.41,-1.46l0.0,-0.16l-0.42,-1.51l1.62,-0.11l2.39,1.92Z\", \"name\": \"United Kingdom\"}, \"GA\": {\"path\": \"M448.76,294.47l-2.38,-2.34l-1.63,-2.04l-1.46,-2.48l0.06,-0.66l0.54,-0.81l0.61,-1.82l0.46,-1.69l0.63,-0.11l3.62,0.03l0.3,-0.3l-0.02,-2.75l0.88,-0.12l1.47,0.32l0.13,0.0l1.39,-0.3l-0.13,0.87l0.03,0.19l0.7,1.29l0.3,0.16l1.74,-0.19l0.36,0.29l-1.01,2.7l0.05,0.29l1.13,1.42l0.25,1.82l-0.3,1.56l-0.64,0.99l-1.93,-0.09l-1.26,-1.13l-0.5,0.17l-0.16,0.91l-1.48,0.27l-0.12,0.05l-0.86,0.63l-0.08,0.39l0.81,1.42l-1.48,1.08Z\", \"name\": \"Gabon\"}, \"GN\": {\"path\": \"M399.83,265.31l-0.69,-0.06l-0.3,0.16l-0.43,0.85l-0.39,-0.01l-0.3,-0.33l0.14,-0.87l-0.05,-0.22l-1.05,-1.54l-0.37,-0.11l-0.61,0.27l-0.84,0.12l0.02,-0.54l-0.04,-0.17l-0.35,-0.57l0.07,-0.63l-0.03,-0.17l-0.57,-1.11l-0.7,-0.9l-0.24,-0.12l-2.0,-0.0l-0.19,0.07l-0.51,0.42l-0.6,0.05l-0.21,0.11l-0.43,0.55l-0.3,0.7l-1.04,0.86l-0.91,-1.24l-1.0,-1.02l-0.69,-0.37l-0.52,-0.42l-0.3,-1.11l-0.37,-0.56l-0.1,-0.1l-0.4,-0.23l0.77,-0.85l0.62,0.04l0.18,-0.05l0.58,-0.38l0.46,-0.0l0.19,-0.07l0.39,-0.34l0.1,-0.3l-0.17,-0.67l0.15,-0.14l0.09,-0.2l0.03,-0.57l0.87,0.02l1.76,0.6l0.13,0.01l0.55,-0.06l0.22,-0.13l0.08,-0.12l1.18,0.17l0.17,-0.02l0.09,0.56l0.3,0.25l0.4,-0.0l0.14,-0.03l0.56,-0.29l0.23,0.05l0.63,0.59l0.15,0.07l1.07,0.2l0.24,-0.06l0.65,-0.52l0.77,-0.32l0.55,-0.32l0.3,0.04l0.44,0.45l0.34,0.74l0.84,0.87l-0.35,0.45l-0.06,0.15l-0.1,0.82l0.42,0.31l0.35,-0.16l0.05,0.04l-0.1,0.59l0.09,0.27l0.42,0.4l-0.06,0.02l-0.18,0.21l-0.2,0.86l0.03,0.21l0.56,1.02l0.52,1.71l-0.65,0.21l-0.15,0.12l-0.24,0.35l-0.03,0.28l0.16,0.41l-0.1,0.76l-0.12,0.0Z\", \"name\": \"Guinea\"}, \"GM\": {\"path\": \"M379.18,251.48l0.15,-0.55l2.51,-0.07l0.21,-0.09l0.48,-0.52l0.58,-0.03l0.91,0.58l0.16,0.05l0.78,0.01l0.14,-0.03l0.59,-0.31l0.16,0.24l-0.71,0.38l-0.94,-0.04l-1.02,-0.51l-0.3,0.01l-0.86,0.55l-0.37,0.02l-0.14,0.04l-0.53,0.31l-1.81,-0.04Z\", \"name\": \"Gambia\"}, \"GL\": {\"path\": \"M304.13,6.6l8.19,-3.63l8.72,0.28l0.19,-0.06l3.12,-2.28l8.75,-0.61l19.94,0.8l14.93,4.75l-3.92,2.01l-9.52,0.27l-13.48,0.6l-0.27,0.2l0.09,0.33l1.26,1.09l0.22,0.07l8.81,-0.67l7.49,2.07l0.19,-0.01l4.68,-1.78l1.76,1.84l-2.59,3.26l-0.01,0.36l0.34,0.11l6.35,-2.2l12.09,-2.32l7.31,1.14l1.17,2.13l-9.9,4.05l-1.43,1.32l-7.91,0.98l-0.26,0.31l0.29,0.29l5.25,0.25l-2.63,3.72l-2.02,3.61l-0.04,0.15l0.08,6.05l0.07,0.19l2.61,3.0l-3.4,0.2l-4.12,1.66l-0.04,0.54l4.5,2.67l0.53,3.9l-2.39,0.42l-0.19,0.48l2.91,3.83l-5.0,0.32l-0.27,0.22l0.12,0.33l2.69,1.84l-0.65,1.35l-3.36,0.71l-3.46,0.01l-0.21,0.51l3.05,3.15l0.02,1.53l-4.54,-1.79l-0.32,0.06l-1.29,1.26l0.11,0.5l3.33,1.15l3.17,2.74l0.85,3.29l-4.0,0.78l-1.83,-1.66l-3.1,-2.64l-0.36,-0.02l-0.13,0.33l0.8,2.92l-2.76,2.26l-0.09,0.33l0.28,0.2l6.59,0.19l2.47,0.18l-5.86,3.38l-6.76,3.43l-7.26,1.48l-2.73,0.02l-0.16,0.05l-2.67,1.72l-3.44,4.42l-5.28,2.86l-1.73,0.18l-3.33,1.01l-3.59,0.96l-0.15,0.1l-2.15,2.52l-0.07,0.19l-0.03,2.76l-1.21,2.49l-4.03,3.1l-0.1,0.33l0.98,2.94l-2.31,6.57l-3.21,0.21l-3.6,-3.0l-0.19,-0.07l-4.9,-0.02l-2.29,-1.97l-1.69,-3.78l-4.31,-4.86l-1.23,-2.52l-0.34,-3.58l-0.08,-0.17l-3.35,-3.67l0.85,-2.92l-0.09,-0.31l-1.5,-1.34l2.33,-4.7l3.67,-1.57l0.15,-0.13l1.02,-1.93l0.52,-3.47l-0.44,-0.31l-2.85,1.57l-1.33,0.64l-2.12,0.59l-2.81,-1.32l-0.15,-2.79l0.88,-2.17l2.09,-0.06l5.07,1.2l0.34,-0.17l-0.11,-0.37l-4.3,-2.9l-2.24,-1.58l-0.25,-0.05l-2.38,0.62l-1.7,-0.93l2.62,-4.1l-0.03,-0.36l-1.51,-1.75l-1.97,-3.3l-3.01,-5.21l-0.1,-0.11l-3.04,-1.85l0.03,-1.94l-0.18,-0.28l-6.82,-3.01l-5.35,-0.38l-6.69,0.21l-6.03,0.37l-2.81,-1.59l-3.84,-2.9l5.94,-1.5l5.01,-0.28l0.28,-0.29l-0.26,-0.31l-10.68,-1.38l-5.38,-2.1l0.27,-1.68l9.3,-2.6l9.18,-2.68l0.19,-0.16l0.97,-2.05l-0.18,-0.42l-6.29,-1.91l1.81,-1.9l8.58,-4.05l3.6,-0.63l0.23,-0.4l-0.92,-2.37l5.59,-1.5l7.66,-0.95l7.58,-0.05l2.65,1.84l0.31,0.02l6.52,-3.29l5.85,2.24l3.55,0.49l5.17,1.95l0.38,-0.16l-0.13,-0.39l-5.77,-3.16l0.29,-2.26Z\", \"name\": \"Greenland\"}, \"KW\": {\"path\": \"M540.87,207.81l0.41,0.94l-0.18,0.51l0.0,0.21l0.65,1.66l-1.15,0.05l-0.54,-1.12l-0.24,-0.17l-1.73,-0.2l1.44,-2.06l1.33,0.18Z\", \"name\": \"Kuwait\"}, \"GH\": {\"path\": \"M423.16,269.88l-3.58,1.34l-1.41,0.87l-2.13,0.69l-1.91,-0.61l0.09,-0.75l-0.03,-0.17l-1.04,-2.07l0.62,-2.7l1.04,-2.08l0.03,-0.19l-1.0,-5.46l0.05,-1.12l4.04,-0.11l1.08,0.18l0.18,-0.03l0.72,-0.36l0.75,0.13l-0.11,0.48l0.06,0.26l0.98,1.22l-0.0,1.77l0.24,1.99l0.05,0.13l0.55,0.81l-0.52,2.14l0.19,1.37l0.69,1.66l0.38,0.62Z\", \"name\": \"Ghana\"}, \"OM\": {\"path\": \"M568.16,231.0l-0.08,0.1l-0.84,1.61l-0.93,-0.11l-0.27,0.11l-0.58,0.73l-0.4,1.32l-0.01,0.14l0.29,1.61l-0.07,0.09l-1.0,-0.01l-0.16,0.04l-1.56,0.97l-0.14,0.2l-0.23,1.17l-0.41,0.4l-1.44,-0.02l-0.17,0.05l-0.98,0.65l-0.13,0.25l0.01,0.87l-0.97,0.57l-1.27,-0.22l-0.19,0.03l-1.63,0.84l-0.88,0.11l-2.55,-5.57l7.2,-2.49l0.19,-0.19l1.67,-5.23l-0.03,-0.25l-1.1,-1.78l0.05,-0.89l0.68,-1.03l0.05,-0.16l0.01,-0.89l0.96,-0.44l0.07,-0.5l-0.32,-0.26l0.16,-1.31l0.85,-0.01l1.03,1.67l0.09,0.09l1.4,0.96l0.11,0.05l1.82,0.34l1.37,0.45l1.75,2.32l0.13,0.1l0.7,0.26l-0.0,0.3l-1.25,2.19l-1.01,0.8ZM561.88,218.47l-0.01,0.02l-0.15,-0.29l0.3,-0.38l-0.14,0.65Z\", \"name\": \"Oman\"}, \"_3\": {\"path\": \"M543.2,261.06l-1.07,1.46l-1.65,1.99l-1.91,0.01l-8.08,-2.95l-0.89,-0.84l-0.9,-1.19l-0.81,-1.23l0.44,-0.73l0.76,-1.12l0.49,0.28l0.52,1.05l1.13,1.06l0.2,0.08l1.24,0.01l2.42,-0.65l2.77,-0.31l2.17,-0.78l1.31,-0.19l0.84,-0.43l1.03,-0.06l-0.01,4.54Z\", \"name\": \"Somaliland\"}, \"_2\": {\"path\": \"M384.23,230.37l0.07,-0.06l0.28,-0.89l0.99,-1.13l0.07,-0.13l0.8,-3.54l3.4,-2.8l0.09,-0.13l0.76,-2.17l0.07,5.5l-2.07,0.21l-0.24,0.17l-0.61,1.36l-0.02,0.16l0.43,3.46l-4.01,-0.01ZM391.82,218.2l0.07,-0.06l0.75,-1.93l1.86,-0.25l0.94,0.34l1.14,0.0l0.18,-0.06l0.73,-0.56l1.41,-0.08l-0.0,2.72l-7.08,-0.12Z\", \"name\": \"Western Sahara\"}, \"_1\": {\"path\": \"M472.71,172.84l-0.07,-0.43l-0.16,-0.22l-0.53,-0.27l-0.38,-0.58l0.3,-0.43l0.51,-0.19l0.18,-0.18l0.3,-0.87l0.12,-0.04l0.22,0.26l0.12,0.09l0.38,0.15l0.28,0.41l0.15,0.12l0.34,0.12l0.43,0.5l0.15,0.07l-0.12,0.3l-0.27,0.32l-0.03,0.18l-0.31,0.06l-1.48,0.47l-0.15,0.17Z\", \"name\": \"Kosovo\"}, \"_0\": {\"path\": \"M503.54,192.92l0.09,-0.17l0.41,0.01l-0.08,0.01l-0.42,0.15ZM504.23,192.76l1.02,0.02l0.4,-0.13l-0.09,0.29l0.03,0.08l-0.35,0.16l-0.24,-0.04l-0.06,-0.1l-0.18,-0.17l-0.19,-0.08l-0.33,-0.02Z\", \"name\": \"Northern Cyprus\"}, \"JO\": {\"path\": \"M510.26,200.93l0.28,-0.57l2.53,1.0l0.27,-0.02l4.57,-2.77l0.84,2.84l-0.28,0.25l-4.95,1.37l-0.14,0.49l2.24,2.48l-0.5,0.28l-0.13,0.14l-0.35,0.78l-1.76,0.35l-0.2,0.14l-0.57,0.94l-0.94,0.73l-2.45,-0.38l-0.03,-0.12l1.23,-4.32l-0.04,-1.1l0.34,-0.75l0.03,-0.12l0.0,-1.63Z\", \"name\": \"Jordan\"}, \"HR\": {\"path\": \"M455.49,162.73l1.53,0.09l0.24,-0.1l0.29,-0.34l0.64,0.38l0.14,0.04l0.98,0.06l0.32,-0.3l-0.01,-0.66l0.67,-0.25l0.19,-0.22l0.21,-1.11l1.72,-0.72l0.65,0.32l1.94,1.37l2.07,0.6l0.22,-0.02l0.67,-0.33l0.47,0.94l0.67,0.76l-0.63,0.77l-0.91,-0.55l-0.16,-0.04l-1.69,0.04l-2.2,-0.51l-1.17,0.07l-0.21,0.11l-0.36,0.42l-0.67,-0.53l-0.46,0.12l-0.52,1.29l0.05,0.31l1.21,1.42l0.58,0.99l1.15,1.14l0.95,0.68l0.92,1.23l0.1,0.09l1.75,0.91l-1.87,-0.89l-1.5,-1.11l-2.23,-0.88l-1.77,-1.9l0.12,-0.06l0.1,-0.47l-1.07,-1.22l-0.04,-0.94l-0.21,-0.27l-1.61,-0.49l-0.35,0.14l-0.53,0.93l-0.41,-0.57l0.04,-0.73Z\", \"name\": \"Croatia\"}, \"HT\": {\"path\": \"M237.82,234.68l1.35,0.1l1.95,0.37l0.18,1.15l-0.16,0.83l-0.51,0.37l-0.06,0.44l0.57,0.68l-0.02,0.22l-1.31,-0.35l-1.26,0.17l-1.49,-0.18l-0.15,0.02l-1.03,0.43l-1.02,-0.61l0.09,-0.36l2.04,0.32l1.9,0.21l0.19,-0.05l0.9,-0.58l0.05,-0.47l-1.05,-1.03l0.02,-0.86l-0.23,-0.3l-1.13,-0.29l0.18,-0.23Z\", \"name\": \"Haiti\"}, \"HU\": {\"path\": \"M461.96,157.92l0.68,-1.66l-0.03,-0.29l-0.15,-0.22l0.84,-0.0l0.3,-0.26l0.12,-0.84l0.88,0.57l0.98,0.38l0.16,0.01l2.1,-0.39l0.23,-0.21l0.14,-0.45l0.88,-0.1l1.06,-0.43l0.13,0.1l0.28,0.04l1.18,-0.4l0.14,-0.1l0.52,-0.67l0.63,-0.15l2.6,0.95l0.26,-0.03l0.38,-0.23l1.12,0.7l0.1,0.49l-1.31,0.57l-0.14,0.13l-1.18,2.14l-1.44,2.04l-1.85,0.55l-1.51,-0.13l-0.14,0.02l-1.92,0.82l-0.85,0.42l-1.91,-0.55l-1.83,-1.31l-0.74,-0.37l-0.44,-0.97l-0.26,-0.18Z\", \"name\": \"Hungary\"}, \"HN\": {\"path\": \"M202.48,251.87l-0.33,-0.62l-0.18,-0.14l-0.5,-0.15l0.13,-0.76l-0.11,-0.28l-0.34,-0.28l-0.6,-0.23l-0.18,-0.01l-0.81,0.22l-0.16,-0.24l-0.72,-0.39l-0.51,-0.48l-0.12,-0.07l-0.31,-0.09l0.24,-0.3l0.04,-0.3l-0.16,-0.4l0.1,-0.28l1.14,-0.69l1.0,-0.86l0.09,0.04l0.3,-0.05l0.47,-0.39l0.49,-0.03l0.14,0.13l0.29,0.06l0.31,-0.1l1.16,0.22l1.24,-0.08l0.81,-0.28l0.29,-0.25l0.63,0.1l0.69,0.18l0.65,-0.06l0.49,-0.2l1.04,0.32l0.38,0.06l0.7,0.44l0.71,0.56l0.92,0.41l0.1,0.11l-0.11,-0.01l-0.23,0.09l-0.3,0.3l-0.76,0.29l-0.58,0.0l-0.15,0.04l-0.45,0.26l-0.31,-0.07l-0.37,-0.34l-0.28,-0.07l-0.26,0.07l-0.18,0.15l-0.23,0.43l-0.04,-0.0l-0.33,0.28l-0.03,0.4l-0.76,0.61l-0.45,0.3l-0.15,0.16l-0.51,-0.36l-0.41,0.06l-0.45,0.56l-0.41,-0.01l-0.59,0.06l-0.27,0.31l0.04,0.96l-0.07,0.0l-0.25,0.16l-0.24,0.45l-0.42,0.06Z\", \"name\": \"Honduras\"}, \"PR\": {\"path\": \"M254.95,238.31l1.15,0.21l0.2,0.23l-0.36,0.36l-1.76,-0.01l-1.2,0.07l-0.09,-0.69l0.17,-0.18l1.89,0.01Z\", \"name\": \"Puerto Rico\"}, \"PS\": {\"path\": \"M509.66,201.06l-0.0,1.44l-0.29,0.63l-0.59,0.19l0.02,-0.11l0.52,-0.31l-0.02,-0.53l-0.41,-0.2l0.36,-1.28l0.41,0.17Z\", \"name\": \"West Bank\"}, \"PT\": {\"path\": \"M398.65,173.6l0.75,-0.63l0.7,-0.3l0.51,1.2l0.28,0.18l1.48,-0.0l0.2,-0.08l0.33,-0.3l1.16,0.08l0.52,1.11l-0.95,0.66l-0.13,0.24l-0.03,2.2l-0.33,0.35l-0.08,0.18l-0.08,1.17l-0.86,0.19l-0.2,0.44l0.93,1.64l-0.64,1.79l0.07,0.31l0.72,0.72l-0.24,0.56l-0.9,1.05l-0.07,0.26l0.17,0.77l-0.73,0.54l-1.18,-0.36l-0.16,-0.0l-0.85,0.21l0.31,-1.81l-0.23,-1.87l-0.23,-0.25l-0.99,-0.24l-0.49,-0.91l0.18,-1.72l0.93,-0.99l0.08,-0.16l0.17,-1.17l0.52,-1.76l-0.04,-1.36l-0.51,-1.14l-0.09,-0.8Z\", \"name\": \"Portugal\"}, \"PY\": {\"path\": \"M264.33,341.43l0.93,-2.96l0.07,-1.42l1.1,-2.1l4.19,-0.73l2.22,0.04l2.12,1.21l0.07,0.76l0.7,1.38l-0.16,3.48l0.24,0.31l2.64,0.5l0.19,-0.03l0.9,-0.45l1.47,0.62l0.38,0.64l0.23,2.35l0.3,1.07l0.25,0.21l0.93,0.12l0.16,-0.02l0.8,-0.37l0.61,0.33l-0.0,1.25l-0.33,1.53l-0.5,1.57l-0.39,2.26l-2.14,1.94l-1.85,0.4l-2.74,-0.4l-2.13,-0.62l2.26,-3.75l0.03,-0.24l-0.36,-1.18l-0.17,-0.19l-2.55,-1.03l-3.04,-1.95l-2.07,-0.43l-4.4,-4.12Z\", \"name\": \"Paraguay\"}, \"PA\": {\"path\": \"M213.65,263.79l0.18,-0.43l0.02,-0.18l-0.06,-0.28l0.23,-0.18l-0.01,-0.48l-0.4,-0.29l-0.01,-0.62l0.57,-0.13l0.68,0.69l-0.04,0.39l0.26,0.33l1.0,0.11l0.27,-0.1l0.49,0.44l0.24,0.07l1.34,-0.22l1.04,-0.62l1.49,-0.5l0.86,-0.73l0.99,0.11l0.18,0.28l1.35,0.08l1.02,0.4l0.78,0.72l0.71,0.53l-0.1,0.12l-0.05,0.3l0.53,1.34l-0.28,0.44l-0.6,-0.13l-0.36,0.22l-0.2,0.76l-0.41,-0.36l-0.44,-1.12l0.49,-0.53l-0.14,-0.49l-0.51,-0.14l-0.41,-0.72l-0.11,-0.11l-1.25,-0.7l-0.19,-0.04l-1.1,0.16l-0.22,0.15l-0.47,0.81l-0.9,0.56l-0.49,0.08l-0.22,0.17l-0.25,0.52l0.05,0.32l0.93,1.07l-0.41,0.21l-0.29,0.3l-0.81,0.09l-0.36,-1.26l-0.53,-0.1l-0.21,0.28l-0.5,-0.09l-0.44,-0.88l-0.22,-0.16l-0.99,-0.16l-0.61,-0.28l-0.13,-0.03l-1.0,0.0Z\", \"name\": \"Panama\"}, \"PG\": {\"path\": \"M808.4,298.6l0.62,0.46l1.19,1.56l1.04,0.77l-0.18,0.37l-0.42,0.15l-0.92,-0.82l-1.05,-1.53l-0.27,-0.96ZM804.09,296.06l-0.3,0.26l-0.36,-1.11l-0.66,-1.06l-2.55,-1.89l-1.42,-0.59l0.17,-0.15l1.16,0.6l0.85,0.55l1.01,0.58l0.97,1.02l0.9,0.76l0.24,1.03ZM796.71,297.99l0.15,0.82l0.34,0.24l1.43,-0.19l0.19,-0.11l0.68,-0.82l1.36,-0.87l0.13,-0.31l-0.21,-1.13l1.04,-0.03l0.3,0.25l-0.04,1.17l-0.74,1.34l-1.17,0.18l-0.22,0.15l-0.35,0.62l-2.51,1.13l-1.21,-0.0l-1.99,-0.71l-1.19,-0.58l0.07,-0.28l1.98,0.32l1.46,-0.2l0.24,-0.21l0.25,-0.79ZM789.24,303.52l0.11,0.15l2.19,1.62l1.6,2.62l0.27,0.14l1.09,-0.06l-0.07,0.77l0.23,0.32l1.23,0.27l-0.14,0.09l0.05,0.53l2.39,0.95l-0.11,0.28l-1.33,0.14l-0.51,-0.55l-0.18,-0.09l-4.59,-0.65l-1.87,-1.55l-1.38,-1.35l-1.28,-2.17l-0.16,-0.13l-3.27,-1.1l-0.19,0.0l-2.12,0.72l-1.58,0.85l-0.15,0.31l0.28,1.63l-1.65,0.73l-1.37,-0.4l-2.3,-0.09l-0.08,-15.65l3.95,1.57l4.58,1.42l1.67,1.25l1.32,1.19l0.36,1.39l0.19,0.21l4.06,1.51l0.39,0.85l-1.9,0.22l-0.25,0.39l0.55,1.68Z\", \"name\": \"Papua New Guinea\"}, \"PE\": {\"path\": \"M246.44,329.21l-0.63,1.25l-1.05,0.54l-2.25,-1.33l-0.19,-0.93l-0.16,-0.21l-4.95,-2.58l-4.46,-2.79l-1.87,-1.52l-0.94,-1.91l0.33,-0.6l-0.01,-0.31l-2.11,-3.33l-2.46,-4.66l-2.36,-5.02l-1.04,-1.18l-0.77,-1.81l-0.08,-0.11l-1.95,-1.64l-1.54,-0.88l0.61,-0.85l0.02,-0.31l-1.15,-2.27l0.69,-1.56l1.59,-1.26l0.12,0.42l-0.56,0.47l-0.11,0.25l0.07,0.92l0.36,0.27l0.97,-0.19l0.85,0.23l0.99,1.19l0.41,0.05l1.42,-1.03l0.11,-0.16l0.46,-1.64l1.45,-2.06l2.92,-0.96l0.11,-0.07l2.73,-2.62l0.84,-1.72l0.02,-0.18l-0.3,-1.65l0.28,-0.1l1.49,1.06l0.77,1.14l0.1,0.09l1.08,0.6l1.43,2.55l0.21,0.15l1.86,0.31l0.18,-0.03l1.25,-0.6l0.77,0.37l0.17,0.03l1.4,-0.2l1.57,0.96l-1.45,2.29l0.23,0.46l0.63,0.05l0.66,0.7l-1.51,-0.08l-0.24,0.1l-0.27,0.31l-1.96,0.46l-2.95,1.74l-0.14,0.21l-0.17,1.1l-0.6,0.82l-0.05,0.23l0.21,1.13l-1.31,0.63l-0.17,0.27l0.0,0.91l-0.53,0.37l-0.1,0.37l1.04,2.27l1.31,1.46l-0.44,0.9l0.24,0.43l1.52,0.13l0.87,1.23l0.24,0.13l2.21,0.07l0.18,-0.06l1.55,-1.13l-0.14,3.22l0.23,0.3l1.14,0.29l0.16,-0.0l1.18,-0.36l1.97,3.71l-0.45,0.71l-0.04,0.14l-0.12,1.8l-0.05,2.07l-0.92,1.2l-0.03,0.31l0.38,0.8l-0.48,0.72l-0.02,0.3l1.01,2.02l-1.5,2.64Z\", \"name\": \"Peru\"}, \"PK\": {\"path\": \"M609.08,187.76l1.66,1.21l0.71,2.11l0.2,0.19l3.62,1.01l-1.98,1.95l-2.65,0.4l-3.75,-0.68l-0.26,0.08l-1.23,1.22l-0.07,0.31l0.89,2.46l0.88,1.92l0.1,0.12l1.67,1.14l-1.8,1.35l-0.12,0.25l0.04,1.85l-2.35,2.67l-1.59,2.79l-2.5,2.72l-2.76,-0.2l-0.24,0.09l-2.76,2.83l0.04,0.45l1.54,1.13l0.27,1.94l0.09,0.17l1.34,1.29l0.4,1.83l-5.14,-0.01l-0.22,0.09l-1.53,1.63l-1.52,-0.56l-0.76,-1.88l-1.93,-2.03l-0.25,-0.09l-4.6,0.5l-4.05,0.05l-3.1,0.33l0.77,-2.53l3.48,-1.33l0.19,-0.33l-0.21,-1.24l-0.19,-0.23l-1.01,-0.37l-0.06,-2.18l-0.17,-0.26l-2.32,-1.16l-0.96,-1.57l-0.56,-0.65l3.16,1.05l0.14,0.01l2.45,-0.4l1.44,0.33l0.3,-0.1l0.4,-0.47l1.58,0.22l0.14,-0.01l3.25,-1.14l0.2,-0.27l0.08,-2.23l1.23,-1.38l1.73,0.0l0.28,-0.2l0.22,-0.61l1.68,-0.32l0.86,0.24l0.27,-0.05l0.98,-0.78l0.11,-0.26l-0.13,-1.57l0.96,-1.52l1.51,-0.67l0.14,-0.41l-0.74,-1.4l1.86,0.07l0.26,-0.13l0.69,-1.01l0.05,-0.2l-0.09,-0.94l1.14,-1.09l0.09,-0.28l-0.29,-1.41l-0.51,-1.07l1.23,-1.05l2.6,-0.58l2.86,-0.33l1.33,-0.54l1.3,-0.29Z\", \"name\": \"Pakistan\"}, \"PH\": {\"path\": \"M737.11,263.82l0.25,1.66l0.14,1.34l-0.54,1.46l-0.64,-1.79l-0.5,-0.1l-1.17,1.28l-0.05,0.32l0.74,1.71l-0.49,0.81l-2.6,-1.28l-0.61,-1.57l0.68,-1.07l-0.07,-0.4l-1.59,-1.19l-0.42,0.06l-0.69,0.91l-1.01,-0.08l-0.21,0.06l-1.58,1.2l-0.17,-0.3l0.87,-1.88l1.48,-0.66l1.18,-0.81l0.71,0.92l0.34,0.1l1.9,-0.69l0.18,-0.18l0.34,-0.94l1.57,-0.06l0.29,-0.32l-0.1,-1.38l1.41,0.83l0.36,2.06ZM734.94,254.42l0.56,2.24l-1.41,-0.49l-0.4,0.3l0.07,0.94l0.51,1.3l-0.54,0.26l-0.08,-1.34l-0.25,-0.28l-0.56,-0.1l-0.23,-0.91l1.03,0.14l0.34,-0.31l-0.03,-0.96l-0.06,-0.18l-1.14,-1.44l1.62,0.04l0.57,0.78ZM724.68,238.33l1.48,0.71l0.33,-0.04l0.44,-0.38l0.05,0.13l-0.37,0.97l0.01,0.23l0.81,1.75l-0.59,1.92l-1.37,0.79l-0.14,0.2l-0.39,2.07l0.01,0.14l0.56,2.04l0.23,0.21l1.33,0.28l0.14,-0.0l1.0,-0.27l2.82,1.28l-0.2,1.16l0.12,0.29l0.66,0.5l-0.13,0.56l-1.54,-0.99l-0.89,-1.29l-0.49,0.0l-0.44,0.65l-1.34,-1.28l-0.26,-0.08l-2.18,0.36l-0.96,-0.44l0.09,-0.72l0.69,-0.57l-0.01,-0.47l-0.75,-0.59l-0.47,0.14l-0.15,0.43l-0.86,-1.02l-0.34,-1.02l-0.07,-1.74l0.49,0.41l0.49,-0.21l0.26,-3.99l0.73,-2.1l1.23,0.0ZM731.12,258.92l-0.82,0.75l-0.83,1.64l-0.52,0.5l-1.17,-1.33l0.36,-0.47l0.62,-0.7l0.07,-0.15l0.24,-1.35l0.73,-0.08l-0.31,1.29l0.16,0.34l0.37,-0.09l1.21,-1.6l-0.12,1.24ZM726.66,255.58l0.85,0.45l0.14,0.03l1.28,-0.0l-0.03,0.62l-1.04,0.96l-1.15,0.55l-0.05,-0.71l0.17,-1.26l-0.01,-0.13l-0.16,-0.51ZM724.92,252.06l-0.45,1.5l-0.7,-0.83l-0.95,-1.43l1.44,0.06l0.67,0.7ZM717.48,261.28l-1.87,1.35l0.21,-0.3l1.81,-1.57l1.5,-1.75l0.97,-1.84l0.23,1.08l-1.56,1.33l-1.29,1.7Z\", \"name\": \"Philippines\"}, \"PL\": {\"path\": \"M458.8,144.25l-0.96,-1.98l0.18,-1.06l-0.01,-0.15l-0.62,-1.8l-0.82,-1.11l0.56,-0.73l0.05,-0.28l-0.51,-1.51l1.48,-0.87l3.88,-1.58l3.06,-1.14l2.23,0.52l0.15,0.66l0.29,0.23l2.4,0.04l3.11,0.39l4.56,-0.05l1.12,0.32l0.51,0.89l0.1,1.45l0.03,0.12l0.66,1.23l-0.01,1.08l-1.33,0.61l-0.14,0.41l0.74,1.5l0.07,1.53l1.22,2.79l-0.19,0.66l-1.09,0.33l-0.14,0.09l-2.27,2.72l-0.04,0.31l0.35,0.8l-2.22,-1.16l-0.21,-0.02l-1.72,0.44l-1.1,-0.31l-0.21,0.02l-1.3,0.61l-1.11,-1.02l-0.32,-0.05l-0.81,0.35l-1.15,-1.61l-0.21,-0.12l-1.65,-0.17l-0.19,-0.82l-0.23,-0.23l-1.72,-0.37l-0.34,0.17l-0.25,0.56l-0.88,-0.44l0.12,-0.69l-0.25,-0.35l-1.78,-0.27l-1.08,-0.97Z\", \"name\": \"Poland\"}, \"ZM\": {\"path\": \"M502.81,308.32l1.09,1.04l0.58,1.94l-0.39,0.66l-0.5,2.05l-0.0,0.14l0.45,1.95l-0.69,0.77l-0.06,0.11l-0.76,2.37l0.15,0.36l0.62,0.31l-6.85,1.9l-0.22,0.33l0.2,1.54l-1.62,0.3l-0.12,0.05l-1.43,1.02l-0.11,0.15l-0.25,0.73l-0.73,0.17l-0.14,0.08l-2.18,2.12l-1.33,1.6l-0.65,0.05l-0.83,-0.29l-2.75,-0.28l-0.24,-0.1l-0.15,-0.27l-0.99,-0.58l-0.12,-0.04l-1.73,-0.14l-1.88,0.54l-1.5,-1.48l-1.61,-2.01l0.11,-7.73l4.92,0.03l0.29,-0.37l-0.19,-0.79l0.34,-0.86l0.0,-0.21l-0.41,-1.11l0.26,-1.14l-0.01,-0.16l-0.12,-0.36l0.18,0.01l0.1,0.56l0.31,0.25l1.14,-0.06l1.44,0.21l0.76,1.05l0.19,0.12l2.01,0.35l0.19,-0.03l1.24,-0.65l0.44,1.03l0.22,0.18l1.81,0.34l0.85,0.99l1.02,1.39l0.24,0.12l1.92,0.02l0.3,-0.32l-0.21,-2.74l-0.47,-0.23l-0.53,0.36l-1.58,-0.89l-0.51,-0.34l0.29,-2.36l0.44,-2.99l-0.03,-0.18l-0.5,-0.99l0.61,-1.38l0.53,-0.24l3.26,-0.41l0.89,0.23l1.01,0.62l1.04,0.44l1.6,0.43l1.35,0.72Z\", \"name\": \"Zambia\"}, \"EE\": {\"path\": \"M482.19,120.88l0.23,-1.68l-0.43,-0.31l-0.75,0.37l-1.34,-1.1l-0.18,-1.75l2.92,-0.95l3.07,-0.53l2.66,0.6l2.48,-0.1l0.18,0.31l-1.65,1.96l-0.06,0.26l0.71,3.25l-0.88,0.94l-1.85,-0.01l-2.08,-1.3l-1.14,-0.47l-0.2,-0.01l-1.69,0.51Z\", \"name\": \"Estonia\"}, \"EG\": {\"path\": \"M508.07,208.8l-0.66,1.06l-0.53,2.03l-0.64,1.32l-0.32,0.26l-1.74,-1.85l-1.77,-3.86l-0.48,-0.09l-0.26,0.25l-0.07,0.32l1.04,2.88l1.55,2.76l1.89,4.18l0.94,1.48l0.83,1.54l2.08,2.73l-0.3,0.28l-0.1,0.23l0.08,1.72l0.11,0.22l2.91,2.37l-28.78,0.0l0.0,-19.06l-0.73,-2.2l0.61,-1.59l0.0,-0.2l-0.34,-1.04l0.73,-1.08l3.13,-0.04l2.36,0.72l2.48,0.81l1.15,0.43l0.23,-0.01l1.93,-0.87l1.02,-0.78l2.08,-0.21l1.59,0.31l0.62,1.24l0.52,0.03l0.46,-0.71l1.86,0.59l1.95,0.16l0.17,-0.04l0.92,-0.52l1.48,4.24Z\", \"name\": \"Egypt\"}, \"ZA\": {\"path\": \"M467.06,373.27l-0.13,-0.29l0.01,-1.58l-0.02,-0.12l-0.71,-1.64l0.59,-0.37l0.14,-0.26l-0.07,-2.13l-0.05,-0.15l-1.63,-2.58l-1.25,-2.31l-1.71,-3.37l0.88,-0.98l0.7,0.52l0.39,1.08l0.23,0.19l1.1,0.19l1.55,0.51l0.14,0.01l1.35,-0.2l0.11,-0.04l2.24,-1.39l0.14,-0.25l0.0,-9.4l0.16,0.09l1.39,2.38l-0.22,1.53l0.04,0.19l0.56,0.94l0.3,0.14l1.79,-0.27l0.16,-0.08l1.23,-1.18l1.17,-0.79l0.1,-0.12l0.57,-1.19l1.02,-0.52l0.9,0.28l1.16,0.73l0.14,0.05l2.04,0.13l0.13,-0.02l1.6,-0.62l0.18,-0.19l0.63,-1.93l1.18,-0.19l0.19,-0.12l0.78,-1.05l0.81,-1.71l2.18,-1.91l3.44,-1.88l0.89,0.02l1.17,0.43l0.21,-0.0l0.76,-0.29l1.07,0.21l1.15,3.55l0.63,1.82l-0.44,2.9l0.1,0.52l-0.74,-0.29l-0.18,-0.01l-0.72,0.19l-0.21,0.2l-0.22,0.74l-0.66,0.97l-0.05,0.18l0.02,0.93l0.09,0.21l1.49,1.46l0.27,0.08l1.47,-0.29l0.22,-0.18l0.43,-1.01l1.29,0.02l-0.51,1.63l-0.29,2.2l-0.59,1.12l-2.2,1.78l-1.06,1.39l-0.72,1.44l-1.39,1.93l-2.81,2.84l-1.75,1.65l-1.85,1.24l-2.55,1.06l-1.23,0.14l-0.24,0.18l-0.22,0.54l-1.27,-0.35l-0.2,0.01l-1.15,0.5l-2.62,-0.52l-0.12,0.0l-1.46,0.33l-0.98,-0.14l-0.16,0.02l-2.55,1.1l-2.11,0.44l-1.59,1.07l-0.93,0.06l-0.97,-0.92l-0.19,-0.08l-0.72,-0.04l-1.0,-1.16l-0.25,0.05ZM493.72,359.24l-1.12,-0.86l-0.31,-0.03l-1.23,0.59l-1.36,1.07l-1.39,1.78l0.01,0.38l1.88,2.11l0.31,0.09l0.9,-0.27l0.18,-0.15l0.4,-0.77l1.28,-0.39l0.18,-0.16l0.42,-0.88l0.76,-1.32l-0.05,-0.37l-0.87,-0.82Z\", \"name\": \"South Africa\"}, \"EC\": {\"path\": \"M220.2,293.48l1.25,-1.76l0.02,-0.31l-0.54,-1.09l-0.5,-0.06l-0.78,0.94l-1.03,-0.75l0.33,-0.46l0.05,-0.23l-0.38,-2.04l0.66,-0.28l0.17,-0.19l0.45,-1.52l0.93,-1.58l0.04,-0.2l-0.13,-0.78l1.19,-0.47l1.57,-0.91l2.35,1.34l0.17,0.04l0.28,-0.02l0.52,0.91l0.21,0.15l2.12,0.35l0.2,-0.03l0.55,-0.31l1.08,0.73l0.97,0.54l0.31,1.67l-0.71,1.49l-2.64,2.54l-2.95,0.97l-0.15,0.11l-1.53,2.18l-0.49,1.68l-1.1,0.8l-0.87,-1.05l-0.15,-0.1l-1.01,-0.27l-0.13,-0.0l-0.7,0.14l-0.03,-0.43l0.6,-0.5l0.1,-0.31l-0.26,-0.91Z\", \"name\": \"Ecuador\"}, \"AL\": {\"path\": \"M470.27,171.7l0.38,0.19l0.45,-0.18l0.4,0.61l0.11,0.1l0.46,0.24l0.13,0.87l-0.3,0.95l-0.0,0.17l0.36,1.28l0.12,0.17l0.9,0.63l-0.03,0.44l-0.67,0.35l-0.16,0.22l-0.14,0.88l-0.96,1.18l-0.06,-0.03l-0.04,-0.48l-0.12,-0.22l-1.28,-0.92l-0.19,-1.25l0.2,-1.96l0.33,-0.89l-0.06,-0.3l-0.36,-0.41l-0.13,-0.75l0.66,-0.9Z\", \"name\": \"Albania\"}, \"AO\": {\"path\": \"M461.62,299.93l0.55,1.67l0.73,1.54l1.56,2.18l0.28,0.12l1.66,-0.2l0.81,-0.34l1.28,0.33l0.33,-0.14l0.39,-0.67l0.56,-1.3l1.37,-0.09l0.27,-0.21l0.07,-0.23l0.67,-0.01l-0.13,0.53l0.29,0.37l2.74,-0.02l0.04,1.29l0.03,0.13l0.46,0.87l-0.35,1.52l0.18,1.55l0.07,0.16l0.75,0.85l-0.13,2.89l0.41,0.29l0.56,-0.21l1.11,0.05l1.5,-0.37l0.9,0.12l0.18,0.53l-0.27,1.15l0.01,0.17l0.4,1.08l-0.33,0.85l-0.01,0.18l0.12,0.51l-4.83,-0.03l-0.3,0.3l-0.12,8.13l0.07,0.19l1.69,2.1l1.27,1.25l-4.03,0.92l-5.93,-0.36l-1.66,-1.19l-0.18,-0.06l-10.15,0.11l-0.34,0.13l-1.35,-1.05l-0.17,-0.06l-1.62,-0.08l-1.6,0.45l-0.88,0.36l-0.17,-1.2l0.34,-2.19l0.85,-2.32l0.14,-1.13l0.79,-2.24l0.57,-1.0l1.42,-1.64l0.82,-1.15l0.05,-0.13l0.26,-1.88l-0.13,-1.51l-0.07,-0.16l-0.72,-0.87l-1.23,-2.91l0.09,-0.37l0.73,-0.95l0.05,-0.27l-1.27,-4.12l-1.19,-1.54l0.1,-0.2l0.86,-0.28l0.78,0.03l0.83,-0.29l7.12,0.03ZM451.81,298.94l-0.17,0.07l-0.5,-1.42l0.85,-0.92l0.53,-0.29l0.48,0.44l-0.56,0.32l-0.1,0.1l-0.41,0.65l-0.05,0.14l-0.07,0.91Z\", \"name\": \"Angola\"}, \"KZ\": {\"path\": \"M598.42,172.08l-1.37,0.54l-3.3,2.09l-0.11,0.12l-1.01,1.97l-0.56,0.01l-0.6,-1.24l-0.26,-0.17l-2.95,-0.09l-0.46,-2.22l-0.29,-0.24l-0.91,-0.02l0.17,-2.72l-0.12,-0.26l-3.0,-2.22l-0.2,-0.06l-4.29,0.24l-2.8,0.42l-2.36,-2.7l-6.4,-3.65l-0.23,-0.03l-6.45,1.83l-0.22,0.29l0.1,10.94l-0.84,0.1l-1.65,-2.21l-0.11,-0.09l-1.69,-0.84l-0.2,-0.02l-2.84,0.63l-0.14,0.07l-0.71,0.64l-0.02,-0.11l0.57,-1.17l0.0,-0.26l-0.48,-1.05l-0.17,-0.16l-2.78,-0.99l-1.08,-2.62l-0.13,-0.15l-1.24,-0.7l-0.04,-0.48l2.07,0.25l0.34,-0.29l0.09,-2.03l1.84,-0.44l2.12,0.45l0.36,-0.25l0.45,-3.04l-0.45,-2.06l-0.31,-0.23l-2.44,0.15l-2.07,-0.75l-0.23,0.01l-2.88,1.38l-2.21,0.62l-0.96,-0.38l0.22,-1.39l-0.06,-0.23l-1.6,-2.12l-0.25,-0.12l-1.72,0.08l-1.87,-1.91l1.33,-2.24l-0.06,-0.38l-0.55,-0.5l1.72,-3.08l2.3,1.7l0.48,-0.2l0.29,-2.26l4.99,-3.48l3.76,-0.08l5.46,2.27l2.96,1.33l0.26,-0.01l2.59,-1.36l3.82,-0.06l3.13,1.67l0.38,-0.09l0.63,-0.85l3.36,0.14l0.29,-0.19l0.63,-1.57l-0.13,-0.37l-3.64,-2.05l2.0,-1.36l0.1,-0.38l-0.32,-0.62l2.09,-0.76l0.13,-0.47l-1.65,-2.13l0.89,-0.91l9.27,-1.18l0.13,-0.05l1.17,-0.82l6.2,-1.27l2.26,-1.43l4.19,0.7l0.74,3.39l0.38,0.22l2.52,-0.81l2.9,1.06l-0.18,1.63l0.32,0.33l2.52,-0.23l5.0,-2.58l0.03,0.39l3.16,2.62l5.57,8.48l0.49,0.02l1.18,-1.53l3.22,1.78l0.21,0.03l3.5,-0.83l1.21,0.52l1.16,1.82l0.15,0.12l1.67,0.61l1.01,1.32l0.28,0.11l3.04,-0.41l1.1,1.64l-1.68,1.89l-1.97,0.28l-0.26,0.29l-0.12,3.09l-1.2,1.23l-4.81,-1.01l-0.35,0.2l-1.77,5.51l-1.14,0.62l-4.92,1.23l-0.2,0.41l2.14,5.06l-1.45,0.67l-0.17,0.31l0.15,1.28l-1.05,-0.3l-1.21,-1.04l-0.17,-0.07l-3.73,-0.32l-4.15,-0.08l-0.92,0.31l-3.46,-1.24l-0.22,0.01l-1.42,0.63l-0.17,0.21l-0.32,1.49l-3.82,-0.97l-0.15,0.0l-1.65,0.43l-0.2,0.17l-0.51,1.21Z\", \"name\": \"Kazakhstan\"}, \"ET\": {\"path\": \"M516.0,247.63l1.21,0.92l0.3,0.04l1.3,-0.53l0.46,0.41l0.19,0.08l1.65,0.03l2.05,0.96l0.67,0.88l1.07,0.79l1.0,1.45l0.7,0.68l-0.72,0.92l-0.85,1.19l-0.04,0.25l0.19,0.67l0.04,0.74l0.29,0.28l1.4,0.04l0.55,-0.15l0.23,0.19l-0.41,0.67l0.01,0.32l0.92,1.39l0.93,1.23l0.99,0.94l0.1,0.06l8.19,2.99l1.51,0.01l-6.51,6.95l-3.14,0.11l-0.18,0.06l-2.15,1.71l-1.51,0.04l-0.22,0.1l-0.6,0.69l-1.46,-0.0l-0.93,-0.78l-0.32,-0.04l-2.29,1.05l-0.12,0.1l-0.64,0.9l-1.44,-0.17l-0.51,-0.26l-0.17,-0.03l-0.56,0.07l-0.68,-0.02l-3.1,-2.08l-0.17,-0.05l-1.62,0.0l-0.68,-0.65l0.0,-1.28l-0.21,-0.29l-1.19,-0.38l-1.42,-2.63l-0.13,-0.12l-1.05,-0.53l-0.46,-1.0l-1.27,-1.23l-0.17,-0.08l-1.08,-0.13l0.53,-0.9l1.17,-0.05l0.26,-0.17l0.37,-0.77l0.03,-0.14l-0.03,-2.23l0.7,-2.49l1.08,-0.65l0.14,-0.19l0.24,-1.0l1.03,-1.85l1.47,-1.22l0.09,-0.12l1.02,-2.51l0.36,-1.96l2.62,0.48l0.33,-0.18l0.63,-1.55Z\", \"name\": \"Ethiopia\"}, \"ZW\": {\"path\": \"M498.95,341.2l-1.16,-0.23l-0.16,0.01l-0.74,0.28l-1.11,-0.41l-1.02,-0.04l-1.52,-1.13l-0.12,-0.05l-1.79,-0.37l-0.65,-1.46l-0.01,-0.86l-0.22,-0.29l-0.99,-0.26l-2.74,-2.77l-0.77,-1.46l-0.52,-0.5l-0.72,-1.54l2.24,0.23l0.78,0.28l0.12,0.02l0.85,-0.06l0.21,-0.11l1.38,-1.66l2.11,-2.05l0.81,-0.18l0.22,-0.2l0.27,-0.8l1.29,-0.93l1.53,-0.28l0.11,0.66l0.3,0.25l2.02,-0.05l1.04,0.48l0.5,0.59l0.18,0.1l1.13,0.18l1.11,0.7l0.01,3.06l-0.49,1.82l-0.11,1.94l0.03,0.16l0.35,0.68l-0.24,1.3l-0.27,0.17l-0.12,0.15l-0.64,1.83l-2.49,2.8Z\", \"name\": \"Zimbabwe\"}, \"ES\": {\"path\": \"M398.67,172.8l0.09,-1.45l-0.06,-0.2l-0.82,-1.05l3.16,-1.96l3.01,0.54l3.33,-0.02l2.64,0.52l2.14,-0.15l3.9,0.1l0.91,1.08l0.14,0.09l4.61,1.38l0.26,-0.04l0.77,-0.55l2.66,1.29l0.17,0.03l2.59,-0.35l0.1,1.28l-2.2,1.85l-3.13,0.62l-0.23,0.23l-0.21,0.92l-1.54,1.68l-0.97,2.4l0.02,0.26l0.85,1.46l-1.27,1.14l-0.09,0.14l-0.5,1.73l-1.73,0.53l-0.15,0.1l-1.68,2.1l-3.03,0.04l-2.38,-0.05l-0.17,0.05l-1.57,1.01l-0.9,1.01l-0.96,-0.19l-0.82,-0.86l-0.69,-1.6l-0.22,-0.18l-2.14,-0.41l-0.13,-0.62l0.83,-0.97l0.39,-0.86l-0.06,-0.33l-0.73,-0.73l0.63,-1.74l-0.02,-0.25l-0.8,-1.41l0.69,-0.15l0.23,-0.27l0.09,-1.29l0.33,-0.36l0.08,-0.2l0.03,-2.16l1.03,-0.72l0.1,-0.37l-0.7,-1.5l-0.25,-0.17l-1.46,-0.11l-0.22,0.07l-0.34,0.3l-1.17,0.0l-0.55,-1.29l-0.39,-0.16l-1.02,0.44l-0.45,0.36Z\", \"name\": \"Spain\"}, \"ER\": {\"path\": \"M527.15,253.05l-0.77,-0.74l-1.01,-1.47l-1.14,-0.86l-0.62,-0.84l-0.11,-0.09l-2.18,-1.02l-0.12,-0.03l-1.61,-0.03l-0.52,-0.46l-0.31,-0.05l-1.31,0.54l-1.38,-1.06l-0.46,0.12l-0.69,1.68l-2.49,-0.46l-0.2,-0.76l1.06,-3.69l0.24,-1.65l0.66,-0.66l1.76,-0.4l0.16,-0.1l0.97,-1.13l1.24,2.55l0.68,2.34l0.09,0.14l1.4,1.27l3.39,2.4l1.37,1.43l2.14,2.34l0.94,0.6l-0.32,0.26l-0.85,-0.17Z\", \"name\": \"Eritrea\"}, \"ME\": {\"path\": \"M469.05,172.9l-0.57,-0.8l-0.1,-0.09l-0.82,-0.46l0.16,-0.33l0.35,-1.57l0.72,-0.62l0.27,-0.16l0.48,0.38l0.35,0.4l0.12,0.08l0.79,0.32l0.66,0.43l-0.43,0.62l-0.28,0.11l-0.07,-0.25l-0.53,-0.1l-1.09,1.49l-0.05,0.23l0.06,0.32Z\", \"name\": \"Montenegro\"}, \"MD\": {\"path\": \"M488.2,153.75l0.14,-0.11l1.49,-0.28l1.75,0.95l1.06,0.14l0.92,0.7l-0.15,0.9l0.15,0.31l0.8,0.46l0.33,1.2l0.09,0.14l0.72,0.66l-0.11,0.28l0.1,0.33l-0.06,0.02l-1.25,-0.08l-0.17,-0.29l-0.39,-0.12l-0.52,0.25l-0.16,0.36l0.13,0.42l-0.6,0.88l-0.43,1.03l-0.22,0.12l-0.32,-1.0l0.25,-1.34l-0.08,-1.38l-0.06,-0.17l-1.43,-1.87l-0.81,-1.36l-0.78,-0.95l-0.12,-0.09l-0.29,-0.12Z\", \"name\": \"Moldova\"}, \"MG\": {\"path\": \"M544.77,316.45l0.64,1.04l0.6,1.62l0.4,3.04l0.63,1.21l-0.22,1.07l-0.15,0.26l-0.59,-1.05l-0.52,-0.01l-0.47,0.76l-0.04,0.23l0.46,1.84l-0.19,0.92l-0.61,0.53l-0.1,0.21l-0.16,2.15l-0.97,2.98l-1.24,3.59l-1.55,4.97l-0.96,3.67l-1.08,2.93l-1.94,0.61l-2.05,1.06l-3.2,-1.53l-0.62,-1.26l-0.18,-2.39l-0.87,-2.07l-0.22,-1.8l0.4,-1.69l1.01,-0.4l0.19,-0.28l0.01,-0.79l1.15,-1.91l0.04,-0.11l0.23,-1.66l-0.03,-0.17l-0.57,-1.21l-0.46,-1.58l-0.19,-2.25l0.82,-1.36l0.33,-1.51l1.11,-0.1l1.4,-0.53l0.9,-0.45l1.03,-0.03l0.21,-0.09l1.41,-1.45l2.12,-1.65l0.75,-1.29l0.03,-0.24l-0.17,-0.56l0.53,0.15l0.32,-0.1l1.38,-1.77l0.06,-0.18l0.04,-1.44l0.54,-0.74l0.62,0.77Z\", \"name\": \"Madagascar\"}, \"MA\": {\"path\": \"M378.66,230.13l0.07,-0.75l0.93,-0.72l0.82,-1.37l0.04,-0.21l-0.14,-0.8l0.8,-1.74l1.33,-1.61l0.79,-0.4l0.14,-0.15l0.66,-1.55l0.08,-1.46l0.83,-1.52l1.6,-0.94l0.11,-0.11l1.56,-2.71l1.2,-0.99l2.24,-0.29l0.17,-0.08l1.95,-1.83l1.3,-0.77l2.09,-2.28l0.07,-0.26l-0.61,-3.34l0.92,-2.3l0.33,-1.44l1.52,-1.79l2.48,-1.27l1.86,-1.16l0.1,-0.11l1.67,-2.93l0.72,-1.59l1.54,0.01l1.43,1.14l0.21,0.06l2.33,-0.19l2.55,0.62l0.97,0.03l0.83,1.6l0.15,1.71l0.86,2.96l0.09,0.14l0.5,0.45l-0.31,0.73l-3.11,0.44l-0.16,0.07l-1.07,0.97l-1.36,0.23l-0.25,0.28l-0.1,1.85l-2.74,1.02l-0.14,0.11l-0.9,1.3l-1.93,0.69l-2.56,0.44l-4.04,2.01l-0.17,0.27l0.02,2.91l-0.08,0.0l-0.3,0.31l0.05,1.15l-1.25,0.07l-0.16,0.06l-0.73,0.55l-0.98,0.0l-0.85,-0.33l-0.15,-0.02l-2.11,0.29l-0.24,0.19l-0.76,1.95l-0.63,0.16l-0.21,0.19l-1.15,3.29l-3.42,2.81l-0.1,0.17l-0.81,3.57l-0.98,1.12l-0.3,0.85l-5.13,0.19Z\", \"name\": \"Morocco\"}, \"UZ\": {\"path\": \"M587.83,186.48l0.06,-1.46l-0.19,-0.29l-3.31,-1.24l-2.57,-1.4l-1.63,-1.38l-2.79,-1.98l-1.2,-2.98l-0.12,-0.14l-0.84,-0.54l-0.18,-0.05l-2.61,0.13l-0.76,-0.48l-0.25,-2.25l-0.17,-0.24l-3.37,-1.6l-0.32,0.04l-2.08,1.73l-2.11,1.02l-0.16,0.35l0.31,1.14l-2.14,0.03l-0.09,-10.68l6.1,-1.74l6.25,3.57l2.36,2.72l0.27,0.1l2.92,-0.44l4.17,-0.23l2.78,2.06l-0.18,2.87l0.29,0.32l0.98,0.02l0.46,2.22l0.28,0.24l3.0,0.09l0.61,1.25l0.28,0.17l0.93,-0.02l0.26,-0.16l1.06,-2.06l3.21,-2.03l1.3,-0.5l0.19,0.08l-1.75,1.62l0.05,0.48l1.85,1.12l0.27,0.02l1.65,-0.69l2.4,1.27l-2.69,1.79l-1.79,-0.27l-0.89,0.06l-0.22,-0.52l0.48,-1.26l-0.34,-0.4l-3.35,0.69l-0.22,0.18l-0.78,1.87l-1.07,1.47l-1.93,-0.13l-0.29,0.16l-0.65,1.29l0.16,0.42l1.69,0.64l0.48,1.91l-1.25,2.6l-1.64,-0.53l-1.18,-0.03Z\", \"name\": \"Uzbekistan\"}, \"MM\": {\"path\": \"M670.1,233.39l-1.46,1.11l-1.68,0.11l-0.26,0.19l-1.1,2.7l-0.95,0.42l-0.14,0.42l1.21,2.27l1.61,1.92l0.94,1.55l-0.82,1.99l-0.77,0.42l-0.13,0.39l0.64,1.35l1.62,1.97l0.26,1.32l-0.04,1.15l0.02,0.13l0.92,2.18l-1.3,2.23l-0.79,1.69l-0.1,-0.77l0.74,-1.87l-0.02,-0.26l-0.8,-1.42l0.2,-2.68l-0.06,-0.2l-0.98,-1.27l-0.8,-2.98l-0.45,-3.22l-1.11,-2.22l-0.45,-0.1l-1.64,1.28l-2.74,1.76l-1.26,-0.2l-1.27,-0.49l0.79,-2.93l0.0,-0.14l-0.52,-2.42l-1.93,-2.97l0.26,-0.8l-0.22,-0.39l-1.37,-0.31l-1.65,-1.98l-0.12,-1.5l0.41,0.19l0.42,-0.26l0.05,-1.7l1.08,-0.54l0.16,-0.34l-0.24,-1.0l0.5,-0.79l0.05,-0.15l0.08,-2.35l1.58,0.49l0.36,-0.15l1.12,-2.19l0.15,-1.34l1.35,-2.18l0.04,-0.17l-0.07,-1.35l2.97,-1.71l1.67,0.45l0.38,-0.33l-0.18,-1.46l0.7,-0.4l0.15,-0.32l-0.13,-0.72l0.94,-0.13l0.74,1.41l0.11,0.12l0.95,0.56l0.07,1.89l-0.09,2.08l-2.28,2.15l-0.09,0.19l-0.3,3.15l0.35,0.32l2.37,-0.39l0.53,2.17l0.2,0.21l1.3,0.42l-0.63,1.9l0.14,0.36l1.86,0.99l1.1,0.49l0.24,0.0l1.45,-0.6l0.04,0.51l-2.01,1.6l-0.56,0.96l-1.34,0.56Z\", \"name\": \"Myanmar\"}, \"ML\": {\"path\": \"M390.79,248.2l0.67,-0.37l0.14,-0.18l0.36,-1.31l0.51,-0.04l1.68,0.69l0.21,0.0l1.34,-0.48l0.89,0.16l0.3,-0.13l0.29,-0.44l9.89,-0.04l0.29,-0.21l0.56,-1.8l-0.11,-0.33l-0.33,-0.24l-2.37,-22.1l3.41,-0.04l8.37,5.73l8.38,5.68l0.56,1.15l0.14,0.14l1.56,0.75l0.99,0.36l0.03,1.45l0.33,0.29l2.45,-0.22l0.01,5.52l-1.3,1.64l-0.06,0.15l-0.18,1.37l-1.99,0.36l-3.4,0.22l-0.19,0.09l-0.85,0.83l-1.48,0.09l-1.49,0.01l-0.54,-0.43l-0.26,-0.05l-1.38,0.36l-2.39,1.08l-0.13,0.12l-0.44,0.73l-1.88,1.11l-0.11,0.12l-0.3,0.57l-0.86,0.42l-1.1,-0.31l-0.28,0.07l-0.69,0.62l-0.09,0.16l-0.35,1.66l-1.93,2.04l-0.08,0.23l0.05,0.76l-0.63,0.99l-0.04,0.19l0.14,1.23l-0.81,0.29l-0.32,0.17l-0.27,-0.75l-0.39,-0.18l-0.65,0.26l-0.36,-0.04l-0.29,0.14l-0.37,0.6l-1.69,-0.02l-0.63,-0.34l-0.32,0.02l-0.12,0.09l-0.47,-0.45l0.1,-0.6l-0.09,-0.27l-0.31,-0.3l-0.33,-0.05l-0.05,0.02l0.02,-0.21l0.46,-0.59l-0.02,-0.39l-0.99,-1.02l-0.34,-0.74l-0.56,-0.56l-0.17,-0.09l-0.5,-0.07l-0.19,0.04l-0.58,0.35l-0.79,0.33l-0.65,0.51l-0.85,-0.16l-0.63,-0.59l-0.14,-0.07l-0.41,-0.08l-0.2,0.03l-0.59,0.31l-0.07,0.0l-0.1,-0.63l0.11,-0.85l-0.21,-0.98l-0.11,-0.17l-0.86,-0.66l-0.45,-1.34l-0.1,-1.36Z\", \"name\": \"Mali\"}, \"MN\": {\"path\": \"M641.06,150.59l2.41,-0.53l4.76,-2.8l3.67,-1.49l2.06,0.96l0.12,0.03l2.5,0.05l1.59,1.45l0.19,0.08l2.47,0.12l3.59,0.81l0.27,-0.07l2.43,-2.28l0.06,-0.36l-0.93,-1.77l2.33,-3.1l2.66,1.3l2.26,0.39l2.75,0.8l0.44,2.3l0.19,0.22l3.56,1.38l0.18,0.01l2.35,-0.6l3.1,-0.42l2.4,0.41l2.37,1.52l1.49,1.63l0.23,0.1l2.29,-0.03l3.13,0.52l0.15,-0.01l2.28,-0.79l3.27,-0.53l0.11,-0.04l3.56,-2.23l1.31,0.31l1.26,1.05l0.22,0.07l2.45,-0.22l-0.98,1.96l-1.77,3.21l-0.01,0.28l0.64,1.31l0.35,0.16l1.35,-0.38l2.4,0.48l0.22,-0.04l1.78,-1.09l1.82,0.92l2.11,2.07l-0.17,0.68l-1.79,-0.31l-3.74,0.45l-1.85,0.96l-1.78,2.01l-3.74,1.18l-2.46,1.61l-2.45,-0.6l-1.42,-0.28l-0.31,0.13l-1.31,1.99l0.0,0.33l0.78,1.15l0.3,0.74l-1.58,0.93l-1.75,1.59l-2.83,1.03l-3.77,0.12l-4.05,1.05l-2.81,1.54l-0.95,-0.8l-0.19,-0.07l-2.96,0.0l-3.64,-1.8l-2.55,-0.48l-3.38,0.41l-5.13,-0.67l-2.66,0.06l-1.35,-1.65l-1.12,-2.78l-0.21,-0.18l-1.5,-0.33l-2.98,-1.89l-0.12,-0.04l-3.37,-0.43l-2.84,-0.51l-0.75,-1.13l0.93,-3.54l-0.04,-0.24l-1.73,-2.55l-0.15,-0.12l-3.52,-1.18l-1.99,-1.61l-0.54,-1.85Z\", \"name\": \"Mongolia\"}, \"MK\": {\"path\": \"M472.73,173.87l0.08,0.01l0.32,-0.25l0.08,-0.44l1.29,-0.41l1.37,-0.28l1.03,-0.04l1.06,0.82l0.14,1.59l-0.22,0.04l-0.17,0.11l-0.32,0.4l-1.2,-0.05l-0.18,0.05l-0.9,0.61l-1.45,0.23l-0.85,-0.59l-0.3,-1.09l0.22,-0.71Z\", \"name\": \"Macedonia\"}, \"MW\": {\"path\": \"M507.18,313.84l-0.67,1.85l-0.01,0.16l0.7,3.31l0.31,0.24l0.75,-0.03l0.78,0.71l0.99,1.75l0.2,3.03l-0.91,0.45l-0.14,0.15l-0.59,1.38l-1.24,-1.21l-0.17,-1.62l0.49,-1.12l0.02,-0.16l-0.15,-1.03l-0.13,-0.21l-0.99,-0.65l-0.26,-0.03l-0.53,0.18l-1.31,-1.12l-1.15,-0.59l0.66,-2.06l0.75,-0.84l0.07,-0.27l-0.47,-2.04l0.48,-1.94l0.4,-0.65l0.03,-0.24l-0.64,-2.15l-0.08,-0.13l-0.44,-0.42l1.34,0.26l1.25,1.73l0.67,3.3Z\", \"name\": \"Malawi\"}, \"MR\": {\"path\": \"M390.54,247.66l-1.48,-1.58l-1.51,-1.88l-0.12,-0.09l-1.64,-0.67l-1.17,-0.74l-0.17,-0.05l-1.4,0.03l-0.12,0.03l-1.14,0.52l-1.15,-0.21l-0.26,0.08l-0.44,0.43l-0.11,-0.72l0.68,-1.29l0.31,-2.43l-0.28,-2.63l-0.29,-1.27l0.24,-1.24l-0.03,-0.2l-0.65,-1.24l-1.19,-1.05l0.32,-0.51l9.64,0.02l0.3,-0.34l-0.46,-3.71l0.51,-1.12l2.17,-0.22l0.27,-0.3l-0.08,-6.5l7.91,0.13l0.31,-0.3l0.01,-3.5l8.17,5.63l-2.89,0.04l-0.29,0.33l2.42,22.56l0.12,0.21l0.26,0.19l-0.43,1.38l-9.83,0.04l-0.25,0.13l-0.27,0.41l-0.77,-0.14l-0.15,0.01l-1.3,0.47l-1.64,-0.67l-0.14,-0.02l-0.79,0.06l-0.27,0.22l-0.39,1.39l-0.53,0.29Z\", \"name\": \"Mauritania\"}, \"UG\": {\"path\": \"M500.74,287.17l-2.84,-0.02l-0.92,0.32l-1.37,0.71l-0.29,-0.12l0.02,-1.6l0.54,-0.89l0.04,-0.13l0.14,-1.96l0.49,-1.09l0.91,-1.24l0.97,-0.68l0.8,-0.89l-0.13,-0.49l-0.79,-0.27l0.13,-2.55l0.78,-0.52l1.45,0.51l0.18,0.01l1.97,-0.57l1.72,0.01l0.18,-0.06l1.29,-0.97l0.98,1.44l0.29,1.24l1.05,2.75l-0.84,1.68l-1.94,2.66l-0.06,0.18l0.02,2.36l-4.8,0.18Z\", \"name\": \"Uganda\"}, \"MY\": {\"path\": \"M717.6,273.52l-1.51,0.7l-2.13,-0.41l-2.88,-0.0l-0.29,0.21l-0.84,2.77l-0.9,0.82l-0.08,0.12l-1.23,3.34l-1.81,0.47l-2.29,-0.68l-0.14,-0.01l-1.2,0.22l-0.14,0.07l-1.36,1.18l-1.47,-0.17l-0.12,0.01l-1.46,0.46l-1.51,-1.25l-0.24,-0.97l1.26,0.59l0.2,0.02l1.93,-0.47l0.22,-0.22l0.47,-1.98l0.9,-0.4l2.97,-0.54l0.17,-0.09l1.8,-1.98l1.02,-1.32l0.9,1.03l0.48,-0.04l0.43,-0.7l1.02,0.07l0.32,-0.27l0.25,-2.72l1.84,-1.67l1.23,-1.89l0.73,-0.01l1.12,1.11l0.1,0.99l0.18,0.24l1.66,0.71l1.85,0.67l-0.09,0.51l-1.45,0.11l-0.26,0.4l0.35,0.97ZM673.78,269.53l0.17,1.14l0.35,0.25l1.65,-0.3l0.18,-0.11l0.68,-0.86l0.31,0.13l1.41,1.45l0.99,1.59l0.13,1.57l-0.26,1.09l0.0,0.15l0.24,0.84l0.18,1.46l0.11,0.2l0.82,0.64l0.92,2.08l-0.03,0.52l-1.4,0.13l-2.29,-1.79l-2.86,-1.92l-0.27,-1.16l-0.07,-0.13l-1.39,-1.61l-0.33,-1.99l-0.05,-0.12l-0.84,-1.27l0.26,-1.72l-0.03,-0.18l-0.45,-0.87l0.13,-0.13l1.71,0.92Z\", \"name\": \"Malaysia\"}, \"MX\": {\"path\": \"M133.41,213.83l0.61,0.09l0.27,-0.09l0.93,-1.01l0.08,-0.18l0.09,-1.22l-0.09,-0.23l-1.93,-1.94l-1.46,-0.77l-2.96,-5.62l-0.86,-2.1l2.44,-0.18l2.68,-0.25l-0.03,0.08l0.17,0.4l3.79,1.35l5.81,1.97l6.96,-0.02l0.3,-0.3l0.0,-0.84l3.91,0.0l0.87,0.93l1.27,0.87l1.44,1.17l0.79,1.37l0.62,1.49l0.12,0.14l1.35,0.85l2.08,0.82l0.35,-0.1l1.49,-2.04l1.81,-0.05l1.63,1.01l1.21,1.8l0.86,1.58l1.47,1.55l0.53,1.82l0.73,1.32l0.14,0.13l1.98,0.84l1.78,0.59l0.61,-0.03l-0.78,1.89l-0.45,1.96l-0.19,3.58l-0.24,1.27l0.01,0.14l0.43,1.43l0.78,1.31l0.49,1.98l0.06,0.12l1.63,1.9l0.61,1.51l0.98,1.28l0.16,0.11l2.58,0.67l0.98,1.02l0.31,0.08l2.17,-0.71l1.91,-0.26l1.87,-0.47l1.67,-0.49l1.59,-1.06l0.11,-0.14l0.6,-1.52l0.22,-2.21l0.35,-0.62l1.58,-0.64l2.59,-0.59l2.18,0.09l1.43,-0.2l0.39,0.36l-0.07,1.02l-1.28,1.48l-0.65,1.68l0.07,0.32l0.33,0.32l-0.79,2.49l-0.28,-0.3l-0.24,-0.09l-1.0,0.08l-0.24,0.15l-0.74,1.28l-0.19,-0.13l-0.28,-0.03l-0.3,0.12l-0.19,0.29l0.0,0.06l-4.34,-0.02l-0.3,0.3l-0.0,1.16l-0.83,0.0l-0.28,0.19l0.08,0.33l0.93,0.86l0.9,0.58l0.24,0.48l0.16,0.15l0.2,0.08l-0.03,0.38l-2.94,0.01l-0.26,0.15l-1.21,2.09l0.02,0.33l0.25,0.33l-0.21,0.44l-0.04,0.22l-2.42,-2.35l-1.36,-0.87l-2.04,-0.67l-0.13,-0.01l-1.4,0.19l-2.07,0.98l-1.14,0.23l-1.72,-0.66l-1.85,-0.48l-2.31,-1.16l-1.92,-0.38l-2.79,-1.18l-2.04,-1.2l-0.6,-0.66l-0.19,-0.1l-1.37,-0.15l-2.45,-0.78l-1.07,-1.18l-2.63,-1.44l-1.2,-1.56l-0.44,-0.93l0.5,-0.15l0.2,-0.39l-0.2,-0.58l0.46,-0.55l0.07,-0.19l0.01,-0.91l-0.06,-0.18l-0.81,-1.13l-0.25,-1.08l-0.86,-1.36l-2.21,-2.63l-2.53,-2.09l-1.2,-1.63l-0.11,-0.09l-2.08,-1.06l-0.34,-0.48l0.35,-1.53l-0.16,-0.34l-1.24,-0.61l-1.39,-1.23l-0.6,-1.81l-0.24,-0.2l-1.25,-0.2l-1.38,-1.35l-1.11,-1.25l-0.1,-0.76l-0.05,-0.13l-1.33,-2.04l-0.85,-2.02l0.04,-0.99l-0.14,-0.27l-1.81,-1.1l-0.2,-0.04l-0.74,0.11l-1.34,-0.72l-0.42,0.16l-0.4,1.12l-0.0,0.19l0.41,1.3l0.24,2.04l0.06,0.15l0.88,1.16l1.84,1.86l0.4,0.61l0.12,0.1l0.27,0.14l0.29,0.82l0.31,0.2l0.2,-0.02l0.43,1.51l0.09,0.14l0.72,0.65l0.51,0.91l1.58,1.4l0.8,2.42l0.77,1.23l0.66,1.19l0.13,1.34l0.28,0.27l1.08,0.08l0.92,1.1l0.83,1.08l-0.03,0.24l-0.88,0.81l-0.13,-0.0l-0.59,-1.42l-0.07,-0.11l-1.67,-1.53l-1.81,-1.28l-1.15,-0.61l0.07,-1.85l-0.38,-1.45l-0.12,-0.17l-2.91,-2.03l-0.39,0.04l-0.11,0.11l-0.42,-0.46l-0.11,-0.08l-1.49,-0.63l-1.09,-1.16Z\", \"name\": \"Mexico\"}, \"VU\": {\"path\": \"M839.92,325.66l0.78,0.73l-0.18,0.07l-0.6,-0.8ZM839.13,322.74l0.27,1.36l-0.13,-0.06l-0.21,-0.02l-0.29,0.08l-0.22,-0.43l-0.03,-1.32l0.61,0.4Z\", \"name\": \"Vanuatu\"}, \"FR\": {\"path\": \"M444.58,172.63l-0.68,1.92l-0.72,-0.38l-0.51,-1.79l0.43,-0.95l1.15,-0.83l0.33,2.04ZM429.71,147.03l1.77,1.57l0.26,0.07l1.16,-0.23l2.12,1.44l0.56,0.28l0.16,0.03l0.61,-0.06l1.09,0.78l0.13,0.05l3.18,0.53l-1.09,1.94l-0.3,2.16l-0.48,0.38l-1.0,-0.26l-0.37,0.32l0.07,0.66l-1.73,1.68l-0.09,0.21l-0.04,1.42l0.41,0.29l0.96,-0.4l0.67,1.07l-0.09,0.78l0.04,0.19l0.61,0.97l-0.71,0.78l-0.07,0.28l0.65,2.39l0.21,0.21l1.09,0.31l-0.2,0.95l-2.08,1.58l-4.81,-0.8l-0.13,0.01l-3.65,0.99l-0.22,0.24l-0.25,1.6l-2.59,0.35l-2.74,-1.33l-0.31,0.03l-0.79,0.57l-4.38,-1.31l-0.79,-0.94l1.16,-1.64l0.05,-0.15l0.48,-6.17l-0.06,-0.21l-2.58,-3.3l-1.89,-1.65l-0.11,-0.06l-3.64,-1.17l-0.2,-1.88l2.92,-0.63l4.14,0.82l0.35,-0.36l-0.65,-3.0l1.77,1.05l0.27,0.02l5.83,-2.54l0.17,-0.19l0.71,-2.54l1.75,-0.53l0.27,0.88l0.27,0.21l1.04,0.05l1.08,1.23ZM289.1,278.45l-0.85,0.84l-0.88,0.13l-0.25,-0.51l-0.21,-0.16l-0.56,-0.1l-0.25,0.07l-0.63,0.55l-0.62,-0.29l0.5,-0.88l0.21,-1.11l0.42,-1.05l-0.03,-0.28l-0.93,-1.42l-0.18,-1.54l1.13,-1.87l2.42,0.78l2.55,2.04l0.33,0.81l-1.4,2.16l-0.77,1.84Z\", \"name\": \"France\"}, \"FI\": {\"path\": \"M492.26,76.42l-0.38,3.12l0.12,0.28l3.6,2.69l-2.14,2.96l-0.01,0.33l2.83,4.61l-1.61,3.36l0.03,0.31l2.15,2.87l-0.96,2.44l0.1,0.35l3.51,2.55l-0.81,1.72l-2.28,2.19l-5.28,4.79l-4.51,0.31l-4.39,1.37l-3.87,0.75l-1.34,-1.89l-0.11,-0.09l-2.23,-1.14l0.53,-3.54l-0.01,-0.14l-1.17,-3.37l1.12,-2.13l2.23,-2.44l5.69,-4.33l1.65,-0.84l0.16,-0.31l-0.26,-1.73l-0.15,-0.22l-3.4,-1.91l-0.77,-1.47l-0.07,-6.45l-0.12,-0.24l-3.91,-2.94l-3.0,-1.92l0.97,-0.76l2.6,2.17l0.21,0.07l3.2,-0.21l2.63,1.03l0.3,-0.05l2.39,-1.94l0.09,-0.13l1.18,-3.12l3.63,-1.42l2.87,1.59l-0.98,2.87Z\", \"name\": \"Finland\"}, \"FJ\": {\"path\": \"M869.98,327.07l-1.31,0.44l-0.14,-0.41l0.96,-0.41l0.85,-0.17l1.43,-0.78l-0.16,0.65l-1.64,0.67ZM867.58,329.12l0.54,0.47l-0.31,1.0l-1.32,0.3l-1.13,-0.26l-0.17,-0.78l0.72,-0.66l0.98,0.27l0.25,-0.04l0.43,-0.29Z\", \"name\": \"Fiji\"}, \"FK\": {\"path\": \"M268.15,427.89l2.6,-1.73l1.98,0.77l0.31,-0.05l1.32,-1.17l1.58,1.18l-0.54,0.84l-3.1,0.92l-1.0,-1.04l-0.39,-0.04l-1.9,1.35l-0.86,-1.04Z\", \"name\": \"Falkland Islands\"}, \"NI\": {\"path\": \"M202.1,252.6l0.23,-0.0l0.12,-0.11l0.68,-0.09l0.22,-0.15l0.23,-0.43l0.2,-0.01l0.28,-0.31l-0.04,-0.97l0.29,-0.03l0.5,0.02l0.25,-0.11l0.37,-0.46l0.51,0.35l0.4,-0.06l0.23,-0.28l0.45,-0.29l0.87,-0.7l0.11,-0.21l0.02,-0.26l0.23,-0.12l0.25,-0.48l0.29,0.27l0.14,0.07l0.5,0.12l0.22,-0.03l0.48,-0.28l0.66,-0.02l0.87,-0.33l0.36,-0.32l0.21,0.01l-0.11,0.48l0.0,0.14l0.22,0.8l-0.54,0.85l-0.27,1.03l-0.09,1.18l0.14,0.72l0.05,0.95l-0.24,0.15l-0.13,0.19l-0.23,1.09l0.0,0.14l0.14,0.53l-0.42,0.53l-0.06,0.24l0.12,0.69l0.08,0.15l0.18,0.19l-0.26,0.23l-0.49,-0.11l-0.35,-0.44l-0.16,-0.1l-0.79,-0.21l-0.23,0.03l-0.45,0.26l-1.51,-0.62l-0.31,0.05l-0.17,0.15l-1.81,-1.62l-0.6,-0.9l-1.04,-0.79l-0.77,-0.71Z\", \"name\": \"Nicaragua\"}, \"NL\": {\"path\": \"M436.22,136.65l1.82,0.08l0.36,0.89l-0.6,2.96l-0.53,1.06l-1.32,0.0l-0.3,0.34l0.35,2.89l-0.83,-0.47l-1.56,-1.43l-0.29,-0.07l-2.26,0.67l-1.02,-0.15l0.68,-0.48l0.1,-0.12l2.14,-4.84l3.25,-1.35Z\", \"name\": \"Netherlands\"}, \"NO\": {\"path\": \"M491.45,67.31l7.06,3.0l-2.52,0.94l-0.11,0.49l2.43,2.49l-3.82,1.59l-1.48,0.3l0.89,-2.61l-0.14,-0.36l-3.21,-1.78l-0.25,-0.02l-3.89,1.52l-0.17,0.17l-1.2,3.17l-2.19,1.78l-2.53,-0.99l-0.13,-0.02l-3.15,0.21l-2.69,-2.25l-0.38,-0.01l-1.43,1.11l-1.47,0.17l-0.26,0.26l-0.33,2.57l-4.42,-0.65l-0.33,0.22l-0.6,2.19l-2.17,-0.01l-0.27,0.16l-4.15,7.68l-3.88,5.76l-0.0,0.33l0.81,1.23l-0.7,1.27l-2.3,-0.06l-0.28,0.18l-1.63,3.72l-0.02,0.13l0.15,5.17l0.07,0.18l1.51,1.84l-0.79,4.24l-2.04,2.5l-0.92,1.75l-1.39,-1.88l-0.44,-0.05l-4.89,4.21l-3.16,0.81l-3.24,-1.74l-0.86,-3.82l-0.78,-8.6l2.18,-2.36l6.56,-3.28l5.0,-4.16l4.63,-5.74l5.99,-8.09l4.17,-3.23l6.84,-5.49l5.39,-1.92l4.06,0.24l0.23,-0.09l3.72,-3.67l4.51,0.19l4.4,-0.89ZM484.58,19.95l4.42,1.82l-3.25,2.68l-7.14,0.65l-7.16,-0.91l-0.39,-1.37l-0.28,-0.22l-3.48,-0.1l-2.25,-2.15l7.09,-1.48l3.55,1.36l0.28,-0.03l2.42,-1.66l6.18,1.41ZM481.99,33.92l-4.73,1.85l-3.76,-1.06l1.27,-1.02l0.04,-0.43l-1.18,-1.35l4.46,-0.94l0.89,1.83l0.17,0.15l2.83,0.96ZM466.5,23.95l7.64,3.87l-5.63,1.94l-0.19,0.19l-1.35,3.88l-2.08,0.96l-0.16,0.19l-1.14,4.18l-2.71,0.18l-4.94,-2.95l1.95,-1.63l-0.08,-0.51l-3.7,-1.54l-4.79,-4.54l-1.78,-4.01l6.29,-1.88l1.25,1.81l0.25,0.13l3.57,-0.08l0.26,-0.17l0.87,-1.79l3.41,-0.18l3.08,1.94Z\", \"name\": \"Norway\"}, \"NA\": {\"path\": \"M461.88,357.98l-1.61,-1.77l-0.94,-1.9l-0.54,-2.58l-0.62,-1.95l-0.83,-4.05l-0.06,-3.13l-0.33,-1.5l-0.07,-0.14l-0.95,-1.06l-1.27,-2.12l-1.3,-3.1l-0.59,-1.71l-1.98,-2.46l-0.13,-1.67l0.99,-0.4l1.44,-0.42l1.48,0.07l1.42,1.11l0.31,0.03l0.32,-0.15l9.99,-0.11l1.66,1.18l0.16,0.06l6.06,0.37l4.69,-1.06l2.01,-0.57l1.5,0.14l0.63,0.37l-1.0,0.41l-0.7,0.01l-0.16,0.05l-1.38,0.88l-0.79,-0.88l-0.29,-0.09l-3.83,0.9l-1.84,0.08l-0.29,0.3l-0.07,8.99l-2.18,0.08l-0.29,0.3l-0.0,17.47l-2.04,1.27l-1.21,0.18l-1.51,-0.49l-0.99,-0.18l-0.36,-1.0l-0.1,-0.14l-0.99,-0.74l-0.4,0.04l-0.98,1.09Z\", \"name\": \"Namibia\"}, \"NC\": {\"path\": \"M835.87,338.68l2.06,1.63l1.01,0.94l-0.49,0.32l-1.21,-0.62l-1.76,-1.16l-1.58,-1.36l-1.61,-1.79l-0.16,-0.41l0.54,0.02l1.32,0.83l1.08,0.87l0.79,0.73Z\", \"name\": \"New Caledonia\"}, \"NE\": {\"path\": \"M426.67,254.17l0.03,-1.04l-0.24,-0.3l-2.66,-0.53l-0.06,-1.0l-0.07,-0.17l-1.37,-1.62l-0.3,-1.04l0.15,-0.94l1.37,-0.09l0.19,-0.09l0.85,-0.83l3.34,-0.22l2.22,-0.41l0.24,-0.26l0.2,-1.5l1.32,-1.65l0.07,-0.19l-0.01,-5.74l3.4,-1.13l7.24,-5.12l8.46,-4.95l3.76,1.08l1.35,1.39l0.36,0.05l1.39,-0.77l0.55,3.66l0.12,0.2l0.82,0.6l0.03,0.69l0.1,0.21l0.87,0.74l-0.47,0.99l-0.96,5.26l-0.13,3.25l-3.08,2.34l-0.1,0.15l-1.08,3.37l0.08,0.31l0.94,0.86l-0.01,1.51l0.29,0.3l1.25,0.05l-0.14,0.66l-0.51,0.11l-0.24,0.26l-0.06,0.57l-0.04,0.0l-1.59,-2.62l-0.21,-0.14l-0.59,-0.1l-0.23,0.05l-1.83,1.33l-1.79,-0.68l-1.42,-0.17l-0.17,0.03l-0.65,0.32l-1.39,-0.07l-0.19,0.06l-1.4,1.03l-1.12,0.05l-2.97,-1.29l-0.26,0.01l-1.12,0.59l-1.08,-0.04l-0.85,-0.88l-0.11,-0.07l-2.51,-0.95l-0.14,-0.02l-2.69,0.3l-0.16,0.07l-0.65,0.55l-0.1,0.16l-0.34,1.41l-0.69,0.98l-0.05,0.15l-0.13,1.72l-1.47,-1.13l-0.18,-0.06l-0.9,0.01l-0.2,0.08l-0.32,0.28Z\", \"name\": \"Niger\"}, \"NG\": {\"path\": \"M442.0,272.7l-2.4,0.83l-0.88,-0.12l-0.19,0.04l-0.89,0.52l-1.78,-0.05l-1.23,-1.44l-0.88,-1.87l-1.77,-1.66l-0.21,-0.08l-3.78,0.03l0.13,-3.75l-0.06,-1.58l0.44,-1.47l0.74,-0.75l1.21,-1.56l0.04,-0.29l-0.22,-0.56l0.44,-0.9l0.01,-0.24l-0.54,-1.44l0.26,-2.97l0.72,-1.06l0.33,-1.37l0.51,-0.43l2.53,-0.28l2.38,0.9l0.89,0.91l0.2,0.09l1.28,0.04l0.15,-0.03l1.06,-0.56l2.9,1.26l0.13,0.02l1.28,-0.06l0.16,-0.06l1.39,-1.02l1.36,0.07l0.15,-0.03l0.64,-0.32l1.22,0.13l1.9,0.73l0.28,-0.04l1.86,-1.35l0.33,0.06l1.62,2.67l0.29,0.14l0.32,-0.04l0.73,0.74l-0.19,0.37l-0.12,0.74l-2.03,1.89l-0.07,0.11l-0.66,1.62l-0.35,1.28l-0.48,0.51l-0.07,0.12l-0.48,1.67l-1.26,0.98l-0.1,0.15l-0.38,1.24l-0.58,1.07l-0.2,0.91l-1.43,0.7l-1.26,-0.93l-0.19,-0.06l-0.95,0.04l-0.2,0.09l-1.41,1.39l-0.61,0.02l-0.26,0.17l-1.19,2.42l-0.61,1.67Z\", \"name\": \"Nigeria\"}, \"NZ\": {\"path\": \"M857.9,379.62l1.85,3.1l0.33,0.14l0.22,-0.28l0.04,-1.41l0.57,0.4l0.35,2.06l0.17,0.22l2.02,0.94l1.78,0.26l0.22,-0.06l1.31,-1.01l0.84,0.22l-0.53,2.27l-0.67,1.5l-1.71,-0.05l-0.25,0.12l-0.67,0.89l-0.05,0.23l0.21,1.15l-0.31,0.46l-2.15,3.57l-1.6,0.99l-0.28,-0.51l-0.15,-0.13l-0.72,-0.3l1.27,-2.15l0.01,-0.29l-0.82,-1.63l-0.15,-0.14l-2.5,-1.09l0.05,-0.69l1.67,-0.94l0.15,-0.21l0.42,-2.24l-0.11,-1.95l-0.03,-0.12l-0.97,-1.85l0.05,-0.41l-0.09,-0.25l-1.18,-1.17l-1.94,-2.49l-0.86,-1.64l0.38,-0.09l1.24,1.43l0.12,0.08l1.81,0.68l0.67,2.39ZM853.93,393.55l0.57,1.24l0.44,0.12l1.51,-1.03l0.52,0.91l0.0,1.09l-0.88,1.31l-1.62,2.2l-1.26,1.2l-0.05,0.38l0.64,1.02l-1.4,0.03l-0.14,0.04l-2.14,1.16l-0.14,0.17l-0.67,2.0l-1.38,3.06l-3.07,2.19l-2.12,-0.06l-1.55,-0.99l-0.14,-0.05l-2.53,-0.2l-0.31,-0.84l1.25,-2.15l3.07,-2.97l1.62,-0.59l1.81,-1.17l2.18,-1.63l1.55,-1.65l1.08,-2.18l0.9,-0.72l0.11,-0.17l0.35,-1.56l1.37,-1.07l0.4,0.91Z\", \"name\": \"New Zealand\"}, \"NP\": {\"path\": \"M641.26,213.53l-0.14,0.95l0.32,1.64l-0.21,0.78l-1.83,0.04l-2.98,-0.62l-1.86,-0.25l-1.37,-1.3l-0.18,-0.08l-3.38,-0.34l-3.21,-1.49l-2.38,-1.34l-2.16,-0.92l0.84,-2.2l1.51,-1.18l0.89,-0.57l1.83,0.77l2.5,1.76l1.39,0.41l0.78,1.21l0.17,0.13l1.91,0.53l2.0,1.17l2.92,0.66l2.63,0.24Z\", \"name\": \"Nepal\"}, \"CI\": {\"path\": \"M413.53,272.08l-0.83,0.02l-1.79,-0.49l-1.64,0.03l-3.04,0.46l-1.73,0.72l-2.4,0.89l-0.12,-0.02l0.16,-1.7l0.19,-0.25l0.06,-0.2l-0.08,-0.99l-0.09,-0.19l-1.06,-1.05l-0.15,-0.08l-0.71,-0.15l-0.51,-0.48l0.45,-0.92l0.02,-0.19l-0.24,-1.16l0.07,-0.43l0.14,-0.0l0.3,-0.26l0.15,-1.1l-0.02,-0.15l-0.13,-0.34l0.09,-0.13l0.83,-0.27l0.19,-0.37l-0.62,-2.02l-0.55,-1.0l0.14,-0.59l0.35,-0.14l0.24,-0.16l0.53,0.29l0.14,0.04l1.93,0.02l0.26,-0.14l0.36,-0.58l0.39,0.01l0.43,-0.17l0.28,0.79l0.43,0.16l0.56,-0.31l0.89,-0.32l0.92,0.45l0.39,0.75l0.14,0.13l1.13,0.53l0.3,-0.03l0.81,-0.59l1.02,-0.08l1.49,0.57l0.62,3.33l-1.03,2.09l-0.65,2.84l0.02,0.2l1.05,2.08l-0.07,0.64Z\", \"name\": \"Ivory Coast\"}, \"CH\": {\"path\": \"M444.71,156.27l0.05,0.3l-0.34,0.69l0.13,0.4l1.13,0.58l1.07,0.1l-0.12,0.81l-0.87,0.42l-1.75,-0.37l-0.34,0.18l-0.47,1.1l-0.86,0.07l-0.33,-0.38l-0.41,-0.04l-1.34,1.01l-1.02,0.13l-0.93,-0.58l-0.82,-1.32l-0.37,-0.12l-0.77,0.32l0.02,-0.84l1.74,-1.69l0.09,-0.25l-0.04,-0.38l0.73,0.19l0.26,-0.06l0.6,-0.48l2.02,0.02l0.24,-0.12l0.38,-0.51l2.31,0.84Z\", \"name\": \"Switzerland\"}, \"CO\": {\"path\": \"M232.24,284.95l-0.94,-0.52l-1.22,-0.82l-0.31,-0.01l-0.62,0.35l-1.88,-0.31l-0.54,-0.95l-0.29,-0.15l-0.37,0.03l-2.34,-1.33l-0.15,-0.35l0.57,-0.11l0.24,-0.32l-0.1,-1.15l0.46,-0.71l1.11,-0.15l0.21,-0.13l1.05,-1.57l0.95,-1.31l-0.08,-0.43l-0.73,-0.47l0.4,-1.24l0.01,-0.16l-0.53,-2.15l0.44,-0.54l0.06,-0.24l-0.4,-2.13l-0.06,-0.13l-0.93,-1.22l0.21,-0.8l0.52,0.12l0.32,-0.13l0.47,-0.75l0.03,-0.27l-0.52,-1.32l0.09,-0.11l1.14,0.07l0.22,-0.08l1.82,-1.71l0.96,-0.25l0.22,-0.28l0.02,-0.81l0.43,-2.01l1.28,-1.04l1.48,-0.05l0.27,-0.19l0.12,-0.31l1.73,0.19l0.2,-0.05l1.96,-1.28l0.97,-0.56l1.16,-1.16l0.64,0.11l0.43,0.44l-0.31,0.55l-1.49,0.39l-0.19,0.16l-0.6,1.2l-0.97,0.74l-0.73,0.94l-0.06,0.13l-0.3,1.76l-0.68,1.44l0.23,0.43l1.1,0.14l0.27,0.97l0.08,0.13l0.49,0.49l0.17,0.85l-0.27,0.86l-0.01,0.14l0.09,0.53l0.2,0.23l0.52,0.18l0.54,0.79l0.27,0.13l3.18,-0.24l1.31,0.29l1.7,2.08l0.31,0.1l0.96,-0.26l1.75,0.13l1.41,-0.27l0.56,0.27l-0.36,1.07l-0.54,0.81l-0.05,0.13l-0.2,1.8l0.51,1.79l0.07,0.12l0.65,0.68l0.05,0.32l-1.16,1.14l0.05,0.47l0.86,0.52l0.6,0.79l0.31,1.01l-0.7,-0.81l-0.44,-0.01l-0.74,0.77l-4.75,-0.05l-0.3,0.31l0.03,1.57l0.25,0.29l1.2,0.21l-0.02,0.24l-0.1,-0.05l-0.22,-0.02l-1.41,0.41l-0.22,0.29l-0.01,1.82l0.11,0.23l1.04,0.85l0.35,1.3l-0.06,1.02l-1.02,6.26l-0.84,-0.89l-0.19,-0.09l-0.25,-0.02l1.35,-2.13l-0.1,-0.42l-1.92,-1.17l-0.2,-0.04l-1.41,0.2l-0.82,-0.39l-0.26,0.0l-1.29,0.62l-1.63,-0.27l-1.4,-2.5l-0.12,-0.12l-1.1,-0.61l-0.83,-1.2l-1.67,-1.19l-0.27,-0.04l-0.54,0.19Z\", \"name\": \"Colombia\"}, \"CN\": {\"path\": \"M740.32,148.94l0.22,0.21l4.3,1.03l2.84,2.2l0.99,2.92l0.28,0.2l3.8,0.0l0.15,-0.04l2.13,-1.24l3.5,-0.8l-1.05,2.29l-0.95,1.13l-0.06,0.12l-0.85,3.41l-1.56,2.81l-2.83,-0.51l-0.19,0.03l-2.15,1.09l-0.15,0.34l0.65,2.59l-0.33,3.3l-1.03,0.07l-0.28,0.3l0.01,0.75l-1.09,-1.2l-0.48,0.05l-0.94,1.6l-3.76,1.26l-0.2,0.36l0.29,1.19l-1.67,-0.08l-1.11,-0.88l-0.42,0.05l-1.69,2.08l-2.71,1.57l-2.04,1.88l-3.42,0.84l-0.11,0.05l-1.8,1.34l-1.54,0.46l0.52,-0.53l0.06,-0.33l-0.44,-0.96l1.84,-1.84l0.02,-0.41l-1.32,-1.56l-0.36,-0.08l-2.23,1.08l-2.83,2.06l-1.52,1.85l-2.32,0.13l-0.2,0.09l-1.28,1.37l-0.03,0.37l1.32,1.97l0.18,0.13l1.83,0.43l0.07,1.08l0.18,0.26l1.98,0.84l0.3,-0.03l2.66,-1.96l2.06,1.04l0.12,0.03l1.4,0.07l0.27,1.0l-3.24,0.73l-0.17,0.11l-1.13,1.5l-2.38,1.4l-0.1,0.1l-1.29,1.99l0.1,0.42l2.6,1.5l0.97,2.72l1.52,2.56l1.66,2.08l-0.03,1.76l-1.4,0.67l-0.15,0.38l0.6,1.47l0.13,0.15l1.29,0.75l-0.35,2.0l-0.58,1.96l-1.22,0.21l-0.2,0.14l-1.83,2.93l-2.02,3.51l-2.29,3.13l-3.4,2.42l-3.42,2.18l-2.75,0.3l-0.15,0.06l-1.32,1.01l-0.68,-0.67l-0.41,-0.01l-1.37,1.27l-3.42,1.28l-2.62,0.4l-0.24,0.21l-0.8,2.57l-0.95,0.11l-0.53,-1.54l0.52,-0.89l-0.19,-0.44l-3.36,-0.84l-0.17,0.01l-1.09,0.4l-2.36,-0.64l-1.0,-0.9l0.35,-1.34l-0.23,-0.37l-2.22,-0.47l-1.15,-0.94l-0.36,-0.02l-2.08,1.37l-2.35,0.29l-1.98,-0.01l-0.13,0.03l-1.32,0.63l-1.28,0.38l-0.21,0.33l0.33,2.65l-0.78,-0.04l-0.14,-0.39l-0.07,-1.04l-0.41,-0.26l-1.72,0.71l-0.96,-0.43l-1.63,-0.86l0.65,-1.95l-0.19,-0.38l-1.43,-0.46l-0.56,-2.27l-0.34,-0.22l-2.26,0.38l0.25,-2.65l2.29,-2.15l0.09,-0.2l0.1,-2.21l-0.07,-2.09l-0.15,-0.25l-1.02,-0.6l-0.8,-1.52l-0.31,-0.16l-1.42,0.2l-2.16,-0.32l0.55,-0.74l0.01,-0.35l-1.17,-1.7l-0.41,-0.08l-1.67,1.07l-1.97,-0.63l-0.25,0.03l-2.89,1.73l-2.26,1.99l-1.82,0.3l-1.0,-0.66l-0.15,-0.05l-1.28,-0.06l-1.75,-0.61l-0.24,0.02l-1.35,0.69l-0.1,0.08l-1.2,1.45l-0.14,-1.41l-0.4,-0.25l-1.46,0.55l-2.83,-0.26l-2.77,-0.61l-1.99,-1.17l-1.91,-0.54l-0.78,-1.21l-0.17,-0.13l-1.36,-0.38l-2.54,-1.79l-2.01,-0.84l-0.28,0.02l-0.89,0.56l-3.31,-1.83l-2.35,-1.67l-0.57,-2.49l1.34,0.28l0.36,-0.28l0.08,-1.42l-0.05,-0.19l-0.93,-1.34l0.24,-2.18l-0.07,-0.22l-2.69,-3.32l-0.15,-0.1l-3.97,-1.11l-0.69,-2.05l-0.11,-0.15l-1.79,-1.3l-0.39,-0.73l-0.36,-1.57l0.08,-1.09l-0.18,-0.3l-1.52,-0.66l-0.22,-0.01l-0.51,0.18l-0.52,-2.21l0.59,-0.55l0.06,-0.35l-0.22,-0.44l2.12,-1.24l1.63,-0.55l2.58,0.39l0.31,-0.16l0.87,-1.75l3.05,-0.34l0.21,-0.12l0.84,-1.12l3.87,-1.59l0.15,-0.14l0.35,-0.68l0.03,-0.17l-0.17,-1.51l1.52,-0.7l0.15,-0.39l-2.12,-5.0l4.62,-1.15l1.35,-0.72l0.14,-0.17l1.72,-5.37l4.7,0.99l0.28,-0.08l1.39,-1.43l0.08,-0.2l0.11,-2.95l1.83,-0.26l0.18,-0.1l1.85,-2.08l0.61,-0.17l0.57,1.97l0.1,0.15l2.2,1.75l3.48,1.17l1.59,2.36l-0.93,3.53l0.04,0.24l0.9,1.35l0.2,0.13l2.98,0.53l3.32,0.43l2.97,1.89l1.49,0.35l1.08,2.67l1.52,1.88l0.24,0.11l2.74,-0.07l5.15,0.67l3.36,-0.41l2.39,0.43l3.67,1.81l0.13,0.03l2.92,-0.0l1.02,0.86l0.34,0.03l2.88,-1.59l3.98,-1.03l3.81,-0.13l3.02,-1.12l1.77,-1.61l1.73,-1.01l0.13,-0.37l-0.41,-1.01l-0.72,-1.07l1.09,-1.66l1.21,0.24l2.57,0.63l0.24,-0.04l2.46,-1.62l3.78,-1.19l0.13,-0.09l1.8,-2.03l1.66,-0.84l3.54,-0.41l1.93,0.35l0.34,-0.22l0.27,-1.12l-0.08,-0.29l-2.27,-2.22l-2.08,-1.07l-0.29,0.01l-1.82,1.12l-2.36,-0.47l-0.14,0.01l-1.18,0.34l-0.46,-0.94l1.69,-3.08l1.1,-2.21l2.75,1.12l0.26,-0.02l3.53,-2.06l0.15,-0.26l-0.02,-1.35l2.18,-3.39l1.35,-1.04l0.12,-0.24l-0.03,-1.85l-0.15,-0.25l-1.0,-0.58l1.68,-1.37l3.01,-0.59l3.25,-0.09l3.67,0.99l2.08,1.18l1.51,3.3l0.95,1.45l0.85,1.99l0.92,3.19ZM697.0,237.37l-1.95,1.12l-1.74,-0.68l-0.06,-1.9l1.08,-1.03l2.62,-0.7l1.23,0.05l0.37,0.65l-1.01,1.08l-0.54,1.4Z\", \"name\": \"China\"}, \"CM\": {\"path\": \"M453.76,278.92l-0.26,-0.11l-0.18,-0.02l-1.42,0.31l-1.56,-0.33l-1.17,0.16l-3.7,-0.05l0.3,-1.63l-0.04,-0.21l-0.98,-1.66l-0.15,-0.13l-1.03,-0.38l-0.46,-1.01l-0.13,-0.14l-0.48,-0.27l0.02,-0.46l0.62,-1.72l1.1,-2.25l0.54,-0.02l0.2,-0.09l1.41,-1.39l0.73,-0.03l1.32,0.97l0.31,0.03l1.72,-0.85l0.16,-0.2l0.22,-1.0l0.57,-1.03l0.36,-1.18l1.26,-0.98l0.1,-0.15l0.49,-1.7l0.48,-0.51l0.07,-0.13l0.35,-1.3l0.63,-1.54l2.06,-1.92l0.09,-0.17l0.12,-0.79l0.24,-0.41l-0.04,-0.36l-0.89,-0.91l0.04,-0.45l0.28,-0.06l0.85,1.39l0.16,1.59l-0.09,1.66l0.04,0.17l1.09,1.84l-0.86,-0.02l-0.72,0.17l-1.07,-0.24l-0.34,0.17l-0.54,1.19l0.06,0.34l1.48,1.47l1.06,0.44l0.32,0.94l0.73,1.6l-0.32,0.57l-1.23,2.49l-0.54,0.41l-0.12,0.21l-0.19,1.95l0.24,1.08l-0.18,0.67l0.07,0.28l1.13,1.25l0.24,0.93l0.92,1.29l1.1,0.8l0.1,1.01l0.26,0.73l-0.12,0.93l-1.65,-0.49l-2.02,-0.66l-3.19,-0.11Z\", \"name\": \"Cameroon\"}, \"CL\": {\"path\": \"M246.8,429.1l-1.14,0.78l-2.25,1.21l-0.16,0.23l-0.37,2.94l-0.75,0.06l-2.72,-1.07l-2.83,-2.34l-3.06,-1.9l-0.71,-1.92l0.67,-1.84l-0.02,-0.25l-1.22,-2.13l-0.31,-5.41l1.02,-2.95l2.59,-2.4l-0.13,-0.51l-3.32,-0.8l2.06,-2.4l0.07,-0.15l0.79,-4.77l2.44,0.95l0.4,-0.22l1.31,-6.31l-0.16,-0.33l-1.68,-0.8l-0.42,0.21l-0.72,3.47l-1.01,-0.27l0.74,-4.06l0.85,-5.46l1.12,-1.96l0.03,-0.22l-0.71,-2.82l-0.19,-2.94l0.76,-0.07l0.26,-0.2l1.53,-4.62l1.73,-4.52l1.07,-4.2l-0.56,-4.2l0.73,-2.2l0.01,-0.12l-0.29,-3.3l1.46,-3.34l0.45,-5.19l0.8,-5.52l0.78,-5.89l-0.18,-4.33l-0.49,-3.47l1.1,-0.56l0.13,-0.13l0.44,-0.88l0.9,1.29l0.32,1.8l0.1,0.18l1.16,0.97l-0.73,2.33l0.01,0.21l1.33,2.91l0.97,3.6l0.35,0.22l1.57,-0.31l0.16,0.34l-0.79,2.51l-2.61,1.25l-0.17,0.28l0.08,4.36l-0.48,0.79l0.01,0.33l0.6,0.84l-1.62,1.55l-1.67,2.6l-0.89,2.47l-0.02,0.13l0.23,2.56l-1.5,2.76l-0.03,0.21l1.15,4.8l0.11,0.17l0.54,0.42l-0.01,2.37l-1.4,2.7l-0.03,0.15l0.06,2.25l-1.8,1.78l-0.09,0.21l0.02,2.73l0.71,2.63l-1.33,0.94l-0.12,0.17l-0.67,2.64l-0.59,3.03l0.4,3.55l-0.84,0.51l-0.14,0.31l0.58,3.5l0.08,0.16l0.96,0.99l-0.7,1.08l0.11,0.43l1.04,0.55l0.19,0.8l-0.89,0.48l-0.16,0.31l0.26,1.77l-0.89,4.06l-1.31,2.67l-0.03,0.19l0.28,1.53l-0.73,1.88l-1.85,1.37l-0.12,0.26l0.22,3.46l0.06,0.16l0.88,1.19l0.28,0.12l1.32,-0.17l-0.04,2.13l0.04,0.15l1.04,1.95l0.24,0.16l5.94,0.44ZM248.79,430.71l0.0,7.41l0.3,0.3l2.67,0.0l1.01,0.06l-0.54,0.91l-1.99,1.01l-1.13,-0.1l-1.42,-0.27l-1.87,-1.06l-2.57,-0.49l-3.09,-1.9l-2.52,-1.83l-2.65,-2.93l0.93,0.32l3.54,2.29l3.32,1.23l0.34,-0.09l1.29,-1.57l0.83,-2.32l2.11,-1.28l1.43,0.32Z\", \"name\": \"Chile\"}, \"CA\": {\"path\": \"M280.14,145.66l-1.66,2.88l0.06,0.37l0.37,0.03l1.5,-1.01l1.17,0.49l-0.64,0.83l0.13,0.46l2.22,0.89l0.28,-0.03l1.02,-0.7l2.09,0.83l-0.69,2.1l0.37,0.38l1.43,-0.45l0.27,1.43l0.74,1.88l-0.95,2.5l-0.88,0.09l-1.34,-0.48l0.49,-2.34l-0.14,-0.32l-0.7,-0.4l-0.36,0.04l-2.81,2.66l-0.63,-0.05l1.2,-1.01l-0.1,-0.52l-2.4,-0.77l-2.79,0.18l-4.65,-0.09l-0.22,-0.54l1.37,-0.99l0.01,-0.48l-0.82,-0.65l1.91,-1.79l2.57,-5.17l1.49,-1.81l2.04,-1.07l0.63,0.08l-0.27,0.51l-1.33,2.07ZM193.92,74.85l-0.01,4.24l0.19,0.28l0.33,-0.07l3.14,-3.22l2.65,2.5l-0.71,3.04l0.06,0.26l2.42,2.88l0.46,0.0l2.66,-3.14l1.83,-3.74l0.03,-0.12l0.13,-4.53l3.23,0.31l3.63,0.64l3.18,2.08l0.13,1.91l-1.79,2.22l-0.0,0.37l1.69,2.2l-0.28,1.8l-4.74,2.84l-3.33,0.62l-2.5,-1.21l-0.41,0.17l-0.73,2.05l-2.39,3.44l-0.74,1.78l-2.78,2.61l-3.48,0.26l-0.17,0.07l-1.98,1.68l-0.1,0.21l-0.15,2.33l-2.68,0.45l-0.17,0.09l-3.1,3.2l-2.75,4.38l-0.99,3.06l-0.14,4.31l0.25,0.31l3.5,0.58l1.07,3.24l1.18,2.76l0.34,0.18l3.43,-0.69l4.55,1.52l2.45,1.32l1.76,1.65l0.12,0.07l3.11,0.96l2.63,1.46l0.13,0.04l4.12,0.2l2.41,0.3l-0.36,2.81l0.8,3.51l1.81,3.78l0.08,0.1l3.73,3.17l0.34,0.03l1.93,-1.08l0.13,-0.15l1.35,-3.44l0.01,-0.18l-1.31,-5.38l-0.08,-0.14l-1.46,-1.5l3.68,-1.51l2.84,-2.46l1.45,-2.55l0.04,-0.17l-0.2,-2.39l-0.04,-0.12l-1.7,-3.07l-2.9,-2.64l2.79,-3.66l0.05,-0.27l-1.08,-3.38l-0.8,-5.75l1.45,-0.75l4.18,1.03l2.6,0.38l0.18,-0.03l1.93,-0.95l2.18,1.23l3.01,2.18l0.73,1.42l0.25,0.16l4.18,0.27l-0.06,2.95l0.83,4.7l0.22,0.24l2.19,0.55l1.75,2.08l0.38,0.07l3.63,-2.03l0.11,-0.11l2.38,-4.06l1.36,-1.43l1.76,3.01l3.26,4.68l2.68,4.19l-0.94,2.09l0.12,0.38l3.31,1.98l2.23,1.98l0.13,0.07l3.94,0.89l1.48,1.02l0.96,2.82l0.22,0.2l1.85,0.43l0.88,1.13l0.17,3.53l-1.68,1.16l-1.76,1.14l-4.08,1.17l-0.11,0.06l-3.08,2.65l-4.11,0.52l-5.35,-0.69l-3.76,-0.02l-2.62,0.23l-0.2,0.1l-2.05,2.29l-3.13,1.41l-0.11,0.08l-3.6,4.24l-2.87,2.92l-0.05,0.36l0.33,0.14l2.13,-0.52l0.15,-0.08l3.98,-4.15l5.16,-2.63l3.58,-0.31l1.82,1.3l-2.09,1.91l-0.09,0.29l0.8,3.46l0.82,2.37l0.15,0.17l3.25,1.56l0.16,0.03l4.14,-0.45l0.21,-0.12l2.03,-2.86l0.11,1.46l0.13,0.22l1.26,0.88l-2.7,1.78l-5.51,1.83l-2.52,1.26l-2.75,2.16l-1.52,-0.18l-0.08,-2.16l4.19,-2.47l0.14,-0.34l-0.3,-0.22l-4.01,0.1l-2.66,0.36l-1.45,-1.56l0.0,-4.16l-0.11,-0.23l-1.11,-0.91l-0.28,-0.05l-1.5,0.48l-0.7,-0.7l-0.45,0.02l-1.91,2.39l-0.8,2.5l-0.82,1.31l-0.95,0.43l-0.77,0.15l-0.23,0.2l-0.18,0.56l-8.2,0.02l-0.13,0.03l-1.19,0.61l-2.95,2.45l-0.78,1.13l-4.6,0.01l-0.12,0.02l-1.13,0.48l-0.13,0.44l0.37,0.55l0.2,0.82l-0.01,0.09l-3.1,1.42l-2.63,0.5l-2.84,1.57l-0.47,0.0l-0.72,-0.4l-0.18,-0.27l0.03,-0.15l0.52,-1.0l1.2,-1.71l0.73,-1.8l0.02,-0.17l-1.03,-5.47l-0.15,-0.21l-2.35,-1.32l0.16,-0.29l-0.05,-0.35l-0.37,-0.38l-0.22,-0.09l-0.56,0.0l-0.35,-0.34l-0.11,-0.65l-0.46,-0.2l-0.39,0.26l-0.2,-0.03l-0.11,-0.33l-0.48,-0.25l-0.21,-0.71l-0.15,-0.18l-3.97,-2.07l-4.8,-2.39l-0.25,-0.01l-2.19,0.89l-0.72,0.03l-3.04,-0.82l-0.14,-0.0l-1.94,0.4l-2.4,-0.98l-2.56,-0.51l-1.7,-0.19l-0.62,-0.44l-0.42,-1.67l-0.3,-0.23l-0.85,0.02l-0.29,0.3l-0.01,0.95l-69.26,-0.01l-4.77,-3.14l-1.78,-1.41l-4.51,-1.38l-1.3,-2.73l0.34,-1.96l-0.17,-0.33l-3.06,-1.37l-0.41,-2.58l-0.11,-0.18l-2.92,-2.4l-0.05,-1.53l1.32,-1.59l0.07,-0.2l-0.07,-2.21l-0.16,-0.26l-4.19,-2.22l-2.52,-4.02l-1.56,-2.6l-0.08,-0.09l-2.28,-1.64l-1.65,-1.48l-1.31,-1.89l-0.38,-0.1l-2.51,1.21l-2.28,1.92l-2.03,-2.22l-1.85,-1.71l-2.44,-1.04l-2.28,-0.12l0.03,-37.72l4.27,0.98l4.0,2.13l2.61,0.4l0.24,-0.07l2.17,-1.81l2.92,-1.33l3.63,0.53l0.18,-0.03l3.72,-1.94l3.89,-1.06l1.6,1.72l0.37,0.06l1.87,-1.04l0.14,-0.19l0.48,-1.83l1.37,0.38l4.18,3.96l0.41,0.0l2.89,-2.62l0.28,2.79l0.37,0.26l3.08,-0.73l0.17,-0.12l0.85,-1.16l2.81,0.24l3.83,1.86l5.86,1.61l3.46,0.75l2.44,-0.26l2.89,1.89l-3.12,1.89l-0.14,0.31l0.24,0.24l4.53,0.92l6.84,-0.5l2.04,-0.71l2.54,2.44l0.39,0.02l2.72,-2.16l-0.01,-0.48l-2.26,-1.61l1.27,-1.16l2.94,-0.19l1.94,-0.42l1.89,0.97l2.49,2.32l0.24,0.08l2.71,-0.33l4.35,1.9l0.17,0.02l3.86,-0.67l3.62,0.1l0.31,-0.33l-0.26,-2.44l1.9,-0.65l3.58,1.36l-0.01,3.84l0.23,0.29l0.34,-0.17l1.51,-3.23l1.81,0.1l0.31,-0.22l1.13,-4.37l-0.08,-0.29l-2.68,-2.73l-2.83,-1.76l0.19,-4.73l2.77,-3.15l3.06,0.69l2.44,1.97l3.24,4.88l-2.05,2.02l0.15,0.51l4.41,0.85ZM265.85,150.7l-0.84,0.04l-3.15,-0.99l-1.77,-1.17l0.19,-0.06l3.17,0.79l2.39,1.27l0.01,0.12ZM249.41,3.71l6.68,0.49l5.34,0.79l4.34,1.6l-0.08,1.24l-5.91,2.56l-6.03,1.21l-2.36,1.38l-0.14,0.34l0.29,0.22l4.37,-0.02l-4.96,3.01l-4.06,1.64l-0.11,0.08l-4.21,4.62l-5.07,0.92l-0.12,0.05l-1.53,1.1l-7.5,0.59l-0.28,0.28l0.24,0.31l2.67,0.54l-1.04,0.6l-0.09,0.44l1.89,2.49l-2.11,1.66l-3.83,1.52l-0.15,0.13l-1.14,2.01l-3.41,1.55l-0.16,0.36l0.35,1.19l0.3,0.22l3.98,-0.19l0.03,0.78l-6.42,2.99l-6.44,-1.41l-7.41,0.79l-3.72,-0.62l-4.48,-0.26l-0.25,-2.0l4.37,-1.13l0.21,-0.38l-1.14,-3.55l1.13,-0.28l6.61,2.29l0.35,-0.12l-0.04,-0.37l-3.41,-3.45l-0.14,-0.08l-3.57,-0.92l1.62,-1.7l4.36,-1.3l0.2,-0.18l0.71,-1.94l-0.12,-0.36l-3.45,-2.15l-0.88,-2.43l6.36,0.23l1.94,0.61l0.23,-0.02l3.91,-2.1l0.15,-0.32l-0.26,-0.24l-5.69,-0.67l-8.69,0.37l-4.3,-1.92l-2.12,-2.39l-2.82,-1.68l-0.44,-1.65l3.41,-1.06l2.93,-0.2l4.91,-0.99l3.69,-2.28l2.93,0.31l2.64,1.68l0.42,-0.1l1.84,-3.23l3.17,-0.96l4.45,-0.69l7.56,-0.26l1.26,0.64l0.18,0.03l7.2,-1.06l10.81,0.8ZM203.94,57.59l0.01,0.32l1.97,2.97l0.51,-0.01l2.26,-3.75l6.05,-1.89l4.08,4.72l-0.36,2.95l0.38,0.33l4.95,-1.36l0.11,-0.05l2.23,-1.77l5.37,2.31l3.32,2.14l0.3,1.89l0.36,0.25l4.48,-1.01l2.49,2.8l0.14,0.09l5.99,1.78l2.09,1.74l2.18,3.83l-4.29,1.91l-0.01,0.54l5.9,2.83l3.95,0.94l3.54,3.84l0.2,0.1l3.58,0.25l-0.67,2.51l-4.18,4.54l-2.84,-1.61l-3.91,-3.95l-0.26,-0.09l-3.24,0.52l-0.25,0.26l-0.32,2.37l0.1,0.26l2.63,2.38l3.42,1.89l0.96,1.0l1.57,3.8l-0.74,2.43l-2.85,-0.96l-6.26,-3.15l-0.38,0.09l0.04,0.39l3.54,3.4l2.55,2.31l0.23,0.78l-6.26,-1.43l-5.33,-2.25l-2.73,-1.73l0.67,-0.86l-0.09,-0.45l-7.38,-4.01l-0.44,0.27l0.03,0.89l-6.85,0.61l-1.8,-1.17l1.43,-2.6l4.56,-0.07l5.15,-0.52l0.23,-0.45l-0.76,-1.34l0.8,-1.89l3.21,-4.06l0.05,-0.29l-0.72,-1.95l-0.97,-1.47l-0.11,-0.1l-3.84,-2.1l-4.53,-1.33l1.09,-0.75l0.05,-0.45l-2.65,-2.75l-0.18,-0.09l-2.12,-0.24l-1.91,-1.47l-0.39,0.02l-1.27,1.25l-4.4,0.56l-9.06,-0.99l-5.28,-1.31l-4.01,-0.67l-1.72,-1.31l2.32,-1.85l0.1,-0.33l-0.28,-0.2l-3.3,-0.02l-0.74,-4.36l1.86,-4.09l2.46,-1.88l5.74,-1.15l-1.5,2.55ZM261.28,159.28l0.19,0.14l1.82,0.42l1.66,-0.05l-0.66,0.68l-0.75,0.16l-3.0,-1.25l-0.46,-0.77l0.51,-0.52l0.68,1.19ZM230.87,84.48l-2.48,0.19l-0.52,-1.74l0.96,-2.17l2.03,-0.53l1.71,1.04l0.02,1.6l-0.22,0.46l-1.5,1.16ZM229.52,58.19l0.14,0.82l-4.99,-0.22l-2.73,0.63l-0.59,-0.23l-2.61,-2.4l0.08,-1.38l0.94,-0.25l5.61,0.51l4.14,2.54ZM222.12,105.0l-0.79,1.63l-0.75,-0.22l-0.52,-0.91l0.04,-0.09l0.84,-1.01l0.74,0.06l0.44,0.55ZM183.77,38.22l2.72,1.65l0.16,0.04l4.83,-0.01l1.92,1.52l-0.51,1.75l0.18,0.36l2.84,1.14l1.56,1.19l0.16,0.06l3.37,0.22l3.65,0.42l4.07,-1.1l5.05,-0.43l3.96,0.35l2.53,1.8l0.48,1.79l-1.37,1.16l-3.6,1.03l-3.22,-0.59l-7.17,0.76l-5.1,0.09l-4.0,-0.6l-6.48,-1.56l-0.81,-2.57l-0.3,-2.49l-0.1,-0.19l-2.51,-2.25l-0.16,-0.07l-5.12,-0.63l-2.61,-1.45l0.75,-1.71l4.88,0.32ZM207.46,91.26l0.42,1.62l0.42,0.19l1.12,-0.55l1.35,0.99l2.74,1.39l2.73,1.2l0.2,1.74l0.35,0.26l1.72,-0.29l1.31,0.97l-1.72,0.96l-3.68,-0.9l-1.34,-1.71l-0.43,-0.04l-2.46,2.1l-3.23,1.85l-0.74,-1.98l-0.31,-0.19l-2.47,0.28l1.49,-1.34l0.1,-0.19l0.32,-3.15l0.79,-3.45l1.34,0.25ZM215.59,102.66l-2.73,2.0l-1.49,-0.08l-0.37,-0.7l1.61,-1.56l3.0,0.03l-0.02,0.3ZM202.79,24.07l0.11,0.12l2.54,1.53l-3.01,1.47l-4.55,4.07l-4.3,0.38l-5.07,-0.68l-2.51,-2.09l0.03,-1.72l1.86,-1.4l0.1,-0.34l-0.29,-0.2l-4.49,0.04l-2.63,-1.79l-1.45,-2.36l1.61,-2.38l1.65,-1.69l2.47,-0.4l0.19,-0.48l-0.72,-0.89l5.1,-0.26l3.1,3.05l0.13,0.07l4.21,1.25l3.99,1.06l1.92,3.65ZM187.5,59.3l-0.15,0.1l-2.59,3.4l-2.5,-0.15l-1.47,-3.92l0.04,-2.24l1.22,-1.92l2.34,-1.26l5.11,0.17l4.28,1.06l-3.36,3.86l-2.9,0.9ZM186.19,48.8l-1.15,1.63l-3.42,-0.35l-2.68,-1.15l1.11,-1.88l3.34,-1.27l2.01,1.63l0.79,1.38ZM185.78,35.41l-0.95,0.13l-4.48,-0.33l-0.4,-0.91l4.5,0.07l1.45,0.82l-0.1,0.21ZM180.76,32.56l-3.43,1.03l-1.85,-1.14l-1.01,-1.92l-0.16,-1.87l2.87,0.2l1.39,0.35l2.75,1.75l-0.55,1.6ZM181.03,76.32l-1.21,1.2l-3.19,-1.26l-0.18,-0.01l-1.92,0.45l-2.88,-1.67l1.84,-1.16l1.6,-1.77l2.45,1.17l1.45,0.77l2.05,2.28ZM169.72,54.76l2.83,0.97l0.14,0.01l4.25,-0.58l0.47,1.01l-2.19,2.16l0.07,0.48l3.61,1.95l-0.41,3.84l-3.87,1.68l-2.23,-0.36l-1.73,-1.75l-6.07,-3.53l0.03,-1.01l4.79,0.55l0.3,-0.16l-0.04,-0.34l-2.55,-2.89l2.59,-2.05ZM174.44,40.56l1.49,1.87l0.07,2.48l-1.07,3.52l-3.87,0.48l-2.41,-0.72l0.05,-2.72l-0.33,-0.3l-3.79,0.36l-0.13,-3.31l2.36,0.14l0.15,-0.03l3.7,-1.74l3.44,0.29l0.31,-0.22l0.03,-0.12ZM170.14,31.5l0.75,1.74l-3.52,-0.52l-4.19,-1.77l-4.65,-0.17l1.65,-1.11l-0.05,-0.52l-2.86,-1.26l-0.13,-1.58l4.52,0.7l6.66,1.99l1.84,2.5ZM134.64,58.08l-1.08,1.93l0.34,0.44l5.44,-1.41l3.37,2.32l0.37,-0.02l2.66,-2.28l2.03,1.38l2.01,4.53l0.53,0.04l1.26,-1.93l0.03,-0.27l-1.67,-4.55l1.82,-0.58l2.36,0.73l2.69,1.84l1.53,4.46l0.77,3.24l0.15,0.19l4.22,2.26l4.32,2.04l-0.21,1.51l-3.87,0.34l-0.19,0.5l1.45,1.54l-0.65,1.23l-4.3,-0.65l-4.4,-1.19l-2.97,0.28l-4.67,1.48l-6.31,0.65l-4.27,0.39l-1.26,-1.91l-0.15,-0.12l-3.42,-1.2l-0.16,-0.01l-2.05,0.45l-2.66,-3.02l1.2,-0.34l3.82,-0.76l3.58,0.19l3.27,-0.78l0.23,-0.29l-0.24,-0.29l-4.84,-1.06l-5.42,0.35l-3.4,-0.09l-0.97,-1.22l5.39,-1.7l0.21,-0.33l-0.3,-0.25l-3.82,0.06l-3.95,-1.1l1.88,-3.13l1.68,-1.81l6.54,-2.84l2.11,0.77ZM158.85,56.58l-1.82,2.62l-3.38,-2.9l0.49,-0.39l3.17,-0.18l1.54,0.86ZM149.71,42.7l1.0,1.87l0.37,0.14l2.17,-0.83l2.33,0.2l0.38,2.16l-1.38,2.17l-8.33,0.76l-6.34,2.15l-3.51,0.1l-0.22,-1.13l4.98,-2.12l0.17,-0.34l-0.31,-0.23l-11.27,0.6l-3.04,-0.78l3.14,-4.57l2.2,-1.35l6.87,1.7l4.4,3.0l0.14,0.05l4.37,0.39l0.27,-0.48l-3.41,-4.68l1.96,-1.62l2.28,0.53l0.79,2.32ZM145.44,29.83l-2.18,0.77l-3.79,-0.0l0.02,-0.31l2.34,-1.5l1.2,0.23l2.42,0.83ZM144.83,34.5l-4.44,1.46l-3.18,-1.48l1.6,-1.36l3.51,-0.53l3.1,0.75l-0.6,1.16ZM119.02,65.87l-6.17,2.07l-1.19,-1.82l-0.13,-0.11l-5.48,-2.32l0.92,-1.7l1.73,-3.44l2.16,-3.15l-0.02,-0.36l-2.09,-2.56l7.84,-0.71l3.59,1.02l6.32,0.27l2.35,1.37l2.25,1.71l-2.68,1.04l-6.21,3.41l-3.1,3.28l-0.08,0.21l0.0,1.81ZM129.66,35.4l-0.3,3.55l-1.77,1.67l-2.34,0.27l-4.62,2.2l-3.89,0.76l-2.83,-0.93l3.85,-3.52l5.04,-3.36l3.75,0.07l3.11,-0.7ZM111.24,152.74l-0.82,0.29l-3.92,-1.39l-0.7,-1.06l-0.12,-0.1l-2.15,-1.09l-0.41,-0.84l-0.2,-0.16l-2.44,-0.56l-0.84,-1.56l0.1,-0.36l2.34,0.64l1.53,0.5l2.28,0.34l0.78,1.04l1.24,1.55l0.09,0.08l2.42,1.3l0.81,1.39ZM88.54,134.82l0.14,0.02l2.0,-0.23l-0.67,3.48l0.06,0.24l1.78,2.22l-0.24,-0.0l-1.4,-1.42l-0.91,-1.53l-1.26,-1.08l-0.42,-1.35l0.09,-0.66l0.82,0.31Z\", \"name\": \"Canada\"}, \"CG\": {\"path\": \"M453.66,296.61l-0.9,-0.82l-0.35,-0.04l-0.83,0.48l-0.77,0.83l-1.65,-2.13l1.66,-1.2l0.08,-0.39l-0.81,-1.43l0.59,-0.43l1.62,-0.29l0.24,-0.24l0.1,-0.58l0.94,0.84l0.19,0.08l2.21,0.11l0.27,-0.14l0.81,-1.29l0.32,-1.76l-0.27,-1.96l-0.06,-0.15l-1.08,-1.35l1.02,-2.74l-0.09,-0.34l-0.62,-0.5l-0.22,-0.06l-1.66,0.18l-0.55,-1.03l0.12,-0.73l2.85,0.09l1.98,0.65l2.0,0.59l0.38,-0.25l0.17,-1.3l1.26,-2.24l1.34,-1.19l1.54,0.38l1.35,0.12l-0.11,1.15l-0.74,1.34l-0.5,1.61l-0.31,2.22l0.12,1.41l-0.4,0.9l-0.06,0.88l-0.24,0.67l-1.57,1.15l-1.24,1.41l-1.09,2.43l-0.03,0.13l0.08,1.95l-0.55,0.69l-1.46,1.23l-1.32,1.41l-0.61,-0.29l-0.13,-0.57l-0.29,-0.23l-1.36,-0.02l-0.23,0.1l-0.72,0.81l-0.41,-0.16Z\", \"name\": \"Republic of the Congo\"}, \"CF\": {\"path\": \"M459.41,266.56l1.9,-0.17l0.22,-0.12l0.36,-0.5l0.14,0.02l0.55,0.51l0.29,0.07l3.15,-0.96l0.12,-0.07l1.05,-0.97l1.29,-0.87l0.12,-0.33l-0.17,-0.61l0.38,-0.12l2.36,0.15l0.15,-0.03l2.36,-1.17l0.12,-0.1l1.78,-2.72l1.18,-0.96l1.23,-0.34l0.21,0.79l0.07,0.13l1.37,1.5l0.01,0.86l-0.39,1.0l-0.01,0.17l0.16,0.78l0.1,0.17l0.91,0.76l1.89,1.09l1.24,0.92l0.02,0.67l0.12,0.23l1.67,1.3l0.99,1.03l0.61,1.46l0.14,0.15l1.79,0.95l0.2,0.4l-0.44,0.14l-1.54,-0.06l-1.98,-0.26l-0.93,0.22l-0.19,0.14l-0.3,0.48l-0.57,0.05l-0.91,-0.49l-0.26,-0.01l-2.7,1.21l-1.04,-0.23l-0.21,0.03l-0.34,0.19l-0.12,0.13l-0.64,1.3l-1.67,-0.43l-1.77,-0.24l-1.58,-0.91l-2.06,-0.85l-0.27,0.02l-1.42,0.88l-0.97,1.27l-0.06,0.14l-0.19,1.46l-1.3,-0.11l-1.67,-0.42l-0.27,0.07l-1.55,1.41l-0.99,1.76l-0.14,-1.18l-0.13,-0.22l-1.1,-0.78l-0.86,-1.2l-0.2,-0.84l-0.07,-0.13l-1.07,-1.19l0.16,-0.59l0.0,-0.15l-0.24,-1.01l0.18,-1.77l0.5,-0.38l0.09,-0.11l1.18,-2.4Z\", \"name\": \"Central African Republic\"}, \"CD\": {\"path\": \"M497.85,276.25l-0.14,2.77l0.2,0.3l0.57,0.19l-0.47,0.52l-1.0,0.71l-0.96,1.31l-0.56,1.22l-0.16,2.04l-0.54,0.89l-0.04,0.15l-0.02,1.76l-0.63,0.61l-0.09,0.2l-0.08,1.33l-0.2,0.11l-0.15,0.21l-0.23,1.37l0.03,0.2l0.6,1.08l0.16,2.96l0.44,2.29l-0.24,1.25l0.01,0.15l0.5,1.46l0.07,0.12l1.41,1.37l1.09,2.56l-0.51,-0.11l-3.45,0.45l-0.67,0.3l-0.15,0.15l-0.71,1.61l0.01,0.26l0.52,1.03l-0.43,2.9l-0.31,2.55l0.13,0.29l0.7,0.46l1.75,0.99l0.31,-0.01l0.26,-0.17l0.15,1.9l-1.44,-0.02l-0.94,-1.28l-0.94,-1.1l-0.17,-0.1l-1.76,-0.33l-0.5,-1.18l-0.42,-0.15l-1.44,0.75l-1.79,-0.32l-0.77,-1.05l-0.2,-0.12l-1.59,-0.23l-0.97,0.04l-0.1,-0.53l-0.27,-0.25l-0.86,-0.06l-1.13,-0.15l-1.62,0.37l-1.04,-0.06l-0.32,0.09l0.11,-2.56l-0.08,-0.21l-0.77,-0.87l-0.17,-1.41l0.36,-1.47l-0.03,-0.21l-0.48,-0.91l-0.04,-1.52l-0.3,-0.29l-2.65,0.02l0.13,-0.53l-0.29,-0.37l-1.28,0.01l-0.28,0.21l-0.07,0.24l-1.35,0.09l-0.26,0.18l-0.62,1.45l-0.25,0.42l-1.17,-0.3l-0.19,0.01l-0.79,0.34l-1.44,0.18l-1.41,-1.96l-0.7,-1.47l-0.61,-1.86l-0.28,-0.21l-7.39,-0.03l-0.92,0.3l-0.78,-0.03l-0.78,0.25l-0.11,-0.25l0.35,-0.15l0.18,-0.26l0.07,-1.02l0.33,-0.52l0.72,-0.42l0.52,0.2l0.33,-0.08l0.76,-0.86l0.99,0.02l0.11,0.48l0.16,0.2l0.94,0.44l0.35,-0.07l1.46,-1.56l1.44,-1.21l0.68,-0.85l0.06,-0.2l-0.08,-1.99l1.04,-2.33l1.1,-1.23l1.62,-1.19l0.11,-0.14l0.29,-0.8l0.08,-0.94l0.38,-0.82l0.03,-0.16l-0.13,-1.38l0.3,-2.16l0.47,-1.51l0.73,-1.31l0.04,-0.12l0.15,-1.51l0.21,-1.66l0.89,-1.16l1.16,-0.7l1.9,0.79l1.69,0.95l1.81,0.24l1.85,0.48l0.35,-0.16l0.71,-1.43l0.16,-0.09l1.03,0.23l0.19,-0.02l2.65,-1.19l0.86,0.46l0.17,0.03l0.81,-0.08l0.23,-0.14l0.31,-0.5l0.75,-0.17l1.83,0.26l1.64,0.06l0.72,-0.21l1.39,1.9l0.16,0.11l1.12,0.3l0.24,-0.04l0.58,-0.36l1.05,0.15l0.15,-0.02l1.15,-0.44l0.47,0.84l0.08,0.09l2.08,1.57Z\", \"name\": \"Democratic Republic of the Congo\"}, \"CZ\": {\"path\": \"M463.29,152.22l-0.88,-0.47l-0.18,-0.03l-1.08,0.15l-1.86,-0.94l-0.21,-0.02l-0.88,0.24l-0.13,0.07l-1.25,1.17l-1.63,-0.91l-1.38,-1.36l-1.22,-0.75l-0.24,-1.24l-0.33,-0.75l1.53,-0.6l0.98,-0.84l1.74,-0.62l0.11,-0.07l0.47,-0.47l0.46,0.27l0.24,0.03l0.96,-0.3l1.06,0.95l0.15,0.07l1.57,0.24l-0.1,0.6l0.16,0.32l1.36,0.68l0.41,-0.15l0.28,-0.62l1.29,0.28l0.19,0.84l0.26,0.23l1.73,0.18l0.74,1.02l-0.17,0.0l-0.25,0.13l-0.32,0.49l-0.46,0.11l-0.22,0.23l-0.13,0.57l-0.32,0.1l-0.2,0.22l-0.03,0.14l-0.65,0.25l-1.05,-0.05l-0.28,0.17l-0.22,0.43Z\", \"name\": \"Czech Republic\"}, \"CY\": {\"path\": \"M505.03,193.75l-1.51,0.68l-1.0,-0.3l-0.32,-0.63l0.69,-0.06l0.41,0.13l0.19,-0.0l0.62,-0.22l0.31,0.02l0.06,0.22l0.49,0.17l0.06,-0.01Z\", \"name\": \"Cyprus\"}, \"CR\": {\"path\": \"M213.0,263.84l-0.98,-0.4l-0.3,-0.31l0.16,-0.24l0.05,-0.21l-0.09,-0.56l-0.1,-0.18l-0.76,-0.65l-0.99,-0.5l-0.74,-0.28l-0.13,-0.58l-0.12,-0.18l-0.66,-0.45l-0.34,-0.0l-0.13,0.31l0.13,0.59l-0.17,0.21l-0.34,-0.42l-0.14,-0.1l-0.7,-0.22l-0.23,-0.34l0.01,-0.62l0.31,-0.74l-0.14,-0.38l-0.3,-0.15l0.47,-0.4l1.48,0.6l0.26,-0.02l0.47,-0.27l0.58,0.15l0.35,0.44l0.17,0.11l0.74,0.17l0.27,-0.07l0.3,-0.27l0.52,1.09l0.97,1.02l0.77,0.71l-0.41,0.1l-0.23,0.3l0.01,1.02l0.12,0.24l0.2,0.14l-0.07,0.05l-0.11,0.3l0.08,0.37l-0.23,0.63Z\", \"name\": \"Costa Rica\"}, \"CU\": {\"path\": \"M215.01,226.09l2.08,0.18l1.94,0.03l2.24,0.86l0.95,0.92l0.25,0.08l2.22,-0.28l0.79,0.55l3.68,2.81l0.19,0.06l0.77,-0.03l1.18,0.42l-0.12,0.47l0.27,0.37l1.78,0.1l1.59,0.9l-0.11,0.22l-1.5,0.3l-1.64,0.13l-1.75,-0.2l-2.69,0.19l1.0,-0.86l-0.03,-0.48l-1.02,-0.68l-0.13,-0.05l-1.52,-0.16l-0.74,-0.64l-0.57,-1.42l-0.3,-0.19l-1.36,0.1l-2.23,-0.67l-0.71,-0.52l-0.14,-0.06l-3.2,-0.4l-0.42,-0.25l0.56,-0.39l0.12,-0.33l-0.27,-0.22l-2.46,-0.13l-0.2,0.06l-1.72,1.31l-0.94,0.03l-0.25,0.15l-0.29,0.53l-1.04,0.24l-0.29,-0.07l0.7,-0.43l0.1,-0.11l0.5,-0.87l1.04,-0.54l1.23,-0.49l1.86,-0.25l0.62,-0.28Z\", \"name\": \"Cuba\"}, \"SZ\": {\"path\": \"M500.95,353.41l-0.41,0.97l-1.16,0.23l-1.29,-1.26l-0.02,-0.71l0.63,-0.93l0.23,-0.7l0.47,-0.12l1.04,0.4l0.32,1.05l0.2,1.08Z\", \"name\": \"Swaziland\"}, \"SY\": {\"path\": \"M510.84,199.83l0.09,-0.11l0.07,-0.2l-0.04,-1.08l0.56,-1.4l1.3,-1.01l0.1,-0.34l-0.41,-1.11l-0.24,-0.19l-0.89,-0.11l-0.2,-1.84l0.55,-1.05l1.3,-1.22l0.09,-0.19l0.09,-1.09l0.39,0.27l0.25,0.04l2.66,-0.77l1.35,0.52l2.06,-0.01l2.93,-1.08l1.35,0.04l2.14,-0.34l-0.83,1.16l-1.31,0.68l-0.16,0.3l0.23,2.03l-0.9,3.25l-5.43,2.87l-4.79,2.91l-2.32,-0.92Z\", \"name\": \"Syria\"}, \"KG\": {\"path\": \"M599.04,172.15l0.38,-0.9l1.43,-0.37l4.04,1.02l0.37,-0.23l0.36,-1.64l1.17,-0.52l3.45,1.24l0.2,-0.0l0.86,-0.31l4.09,0.08l3.61,0.31l1.18,1.02l0.11,0.06l1.19,0.34l-0.13,0.26l-3.84,1.58l-0.13,0.1l-0.81,1.08l-3.08,0.34l-0.24,0.16l-0.85,1.7l-2.43,-0.37l-0.14,0.01l-1.79,0.61l-2.39,1.4l-0.12,0.39l0.25,0.49l-0.48,0.45l-4.57,0.43l-3.04,-0.94l-2.45,0.18l0.14,-1.02l2.42,0.44l0.27,-0.08l0.81,-0.81l1.76,0.27l0.21,-0.05l3.21,-2.14l-0.03,-0.51l-2.97,-1.57l-0.26,-0.01l-1.64,0.69l-1.38,-0.84l1.81,-1.67l-0.09,-0.5l-0.46,-0.18Z\", \"name\": \"Kyrgyzstan\"}, \"KE\": {\"path\": \"M523.3,287.04l0.06,0.17l1.29,1.8l-1.46,0.84l-0.11,0.11l-0.55,0.93l-0.81,0.16l-0.24,0.24l-0.34,1.69l-0.81,1.06l-0.46,1.58l-0.76,0.63l-3.3,-2.3l-0.16,-1.32l-0.15,-0.23l-9.35,-5.28l-0.02,-2.4l1.92,-2.63l0.91,-1.83l0.01,-0.24l-1.09,-2.86l-0.29,-1.24l-1.09,-1.63l2.93,-2.85l0.92,0.3l0.0,1.19l0.09,0.22l0.86,0.83l0.21,0.08l1.65,0.0l3.09,2.08l0.16,0.05l0.79,0.03l0.54,-0.06l0.58,0.28l1.67,0.2l0.28,-0.12l0.69,-0.98l2.04,-0.94l0.86,0.73l0.19,0.07l1.1,0.0l-1.82,2.36l-0.06,0.18l0.03,9.12Z\", \"name\": \"Kenya\"}, \"SS\": {\"path\": \"M505.7,261.39l0.02,1.64l-0.27,0.55l-1.15,0.05l-0.24,0.15l-0.85,1.44l0.22,0.45l1.44,0.17l1.15,1.12l0.42,0.95l0.14,0.15l1.06,0.54l1.33,2.45l-3.06,2.98l-1.44,1.08l-1.75,0.01l-1.92,0.56l-1.5,-0.53l-0.27,0.03l-0.85,0.57l-1.98,-1.5l-0.56,-1.02l-0.37,-0.13l-1.32,0.5l-1.08,-0.15l-0.2,0.04l-0.56,0.35l-0.9,-0.24l-1.44,-1.97l-0.39,-0.77l-0.13,-0.13l-1.78,-0.94l-0.65,-1.5l-1.08,-1.12l-1.57,-1.22l-0.02,-0.68l-0.12,-0.23l-1.37,-1.02l-1.17,-0.68l0.2,-0.08l0.86,-0.48l0.14,-0.18l0.63,-2.22l0.6,-1.02l1.47,-0.28l0.35,0.56l1.29,1.48l0.14,0.09l0.69,0.22l0.22,-0.02l0.83,-0.4l1.58,0.08l0.26,0.39l0.25,0.13l2.49,0.0l0.3,-0.25l0.06,-0.35l1.13,-0.42l0.18,-0.18l0.22,-0.63l0.68,-0.38l1.95,1.37l0.23,0.05l1.29,-0.26l0.19,-0.12l1.23,-1.8l1.36,-1.37l0.08,-0.25l-0.21,-1.52l-0.06,-0.15l-0.25,-0.3l0.94,-0.08l0.26,-0.21l0.1,-0.32l0.6,0.09l-0.25,1.67l0.3,1.83l0.11,0.19l1.22,0.94l0.25,0.73l-0.04,1.2l0.26,0.31l0.09,0.01Z\", \"name\": \"South Sudan\"}, \"SR\": {\"path\": \"M278.1,270.26l2.71,0.45l0.31,-0.14l0.19,-0.32l1.82,-0.16l2.25,0.56l-1.09,1.81l-0.04,0.19l0.2,1.72l0.05,0.13l0.9,1.35l-0.39,0.99l-0.21,1.09l-0.48,0.8l-1.2,-0.44l-0.17,-0.01l-1.12,0.24l-0.95,-0.21l-0.35,0.2l-0.25,0.73l0.05,0.29l0.3,0.35l-0.06,0.13l-1.01,-0.15l-1.42,-2.03l-0.32,-1.36l-0.29,-0.23l-0.63,-0.0l-0.95,-1.56l0.41,-1.16l0.01,-0.17l-0.08,-0.35l1.29,-0.56l0.18,-0.22l0.35,-1.97Z\", \"name\": \"Suriname\"}, \"KH\": {\"path\": \"M680.28,257.89l-0.93,-1.2l-1.24,-2.56l-0.56,-2.9l1.45,-1.92l3.07,-0.46l2.26,0.35l2.03,0.98l0.38,-0.11l1.0,-1.55l1.86,0.79l0.52,1.51l-0.28,2.82l-4.05,1.88l-0.12,0.45l0.79,1.1l-2.2,0.17l-2.08,0.98l-1.89,-0.33Z\", \"name\": \"Cambodia\"}, \"SV\": {\"path\": \"M197.02,248.89l0.18,-0.05l0.59,0.17l0.55,0.51l0.64,0.35l0.06,0.22l0.37,0.21l1.01,-0.28l0.38,0.13l0.16,0.13l-0.14,0.81l-0.18,0.38l-1.22,-0.03l-0.84,-0.23l-1.11,-0.52l-1.31,-0.15l-0.49,-0.38l0.02,-0.08l0.76,-0.57l0.46,-0.27l0.11,-0.35Z\", \"name\": \"El Salvador\"}, \"SK\": {\"path\": \"M468.01,150.02l0.05,0.07l0.36,0.1l0.85,-0.37l1.12,1.02l0.33,0.05l1.38,-0.65l1.07,0.3l0.16,0.0l1.69,-0.43l1.95,1.02l-0.51,0.64l-0.45,1.2l-0.32,0.2l-2.55,-0.93l-0.17,-0.01l-0.82,0.2l-0.17,0.11l-0.53,0.68l-0.94,0.32l-0.14,-0.11l-0.29,-0.04l-1.18,0.48l-0.95,0.09l-0.26,0.21l-0.15,0.47l-1.84,0.34l-0.82,-0.31l-1.14,-0.73l-0.2,-0.89l0.42,-0.84l0.91,0.05l0.12,-0.02l0.86,-0.33l0.18,-0.21l0.03,-0.13l0.32,-0.1l0.2,-0.22l0.12,-0.55l0.39,-0.1l0.18,-0.13l0.3,-0.45l0.43,-0.0Z\", \"name\": \"Slovakia\"}, \"KR\": {\"path\": \"M737.31,185.72l0.84,0.08l0.27,-0.12l0.89,-1.2l1.63,-0.13l1.1,-0.2l0.21,-0.16l0.12,-0.24l1.86,2.95l0.59,1.79l0.02,3.17l-0.84,1.38l-2.23,0.55l-1.95,1.14l-1.91,0.21l-0.22,-1.21l0.45,-2.07l-0.01,-0.17l-0.99,-2.67l1.54,-0.4l0.17,-0.46l-1.55,-2.24Z\", \"name\": \"South Korea\"}, \"SI\": {\"path\": \"M455.77,159.59l1.79,0.21l0.18,-0.04l1.2,-0.68l2.12,-0.08l0.21,-0.1l0.38,-0.42l0.1,0.01l0.28,0.62l-1.71,0.71l-0.18,0.22l-0.21,1.1l-0.71,0.26l-0.2,0.28l0.01,0.55l-0.59,-0.04l-0.79,-0.47l-0.38,0.06l-0.36,0.41l-0.84,-0.05l0.05,-0.15l-0.56,-1.24l0.21,-1.17Z\", \"name\": \"Slovenia\"}, \"KP\": {\"path\": \"M747.76,172.02l-0.23,-0.04l-0.26,0.08l-1.09,1.02l-0.78,1.06l-0.06,0.19l0.09,1.95l-1.12,0.57l-0.53,0.58l-0.88,0.82l-1.69,0.51l-1.09,0.79l-0.12,0.22l-0.07,1.17l-0.22,0.25l0.09,0.47l0.96,0.46l1.22,1.1l-0.19,0.37l-0.91,0.16l-1.75,0.14l-0.22,0.12l-0.87,1.18l-0.95,-0.09l-0.3,0.18l-0.97,-0.44l-0.39,0.13l-0.25,0.44l-0.29,0.09l-0.03,-0.2l-0.18,-0.23l-0.62,-0.25l-0.43,-0.29l0.52,-0.97l0.52,-0.3l0.13,-0.38l-0.18,-0.42l0.59,-1.47l0.01,-0.21l-0.16,-0.48l-0.22,-0.2l-1.41,-0.31l-0.82,-0.55l1.74,-1.62l2.73,-1.58l1.62,-1.96l0.96,0.76l0.17,0.06l2.17,0.11l0.31,-0.37l-0.32,-1.31l3.61,-1.21l0.16,-0.13l0.79,-1.34l1.25,1.38Z\", \"name\": \"North Korea\"}, \"SO\": {\"path\": \"M543.8,256.48l0.61,-0.05l1.14,-0.37l1.31,-0.25l0.12,-0.05l1.11,-0.81l0.57,-0.0l0.03,0.39l-0.23,1.49l0.01,1.25l-0.52,0.92l-0.7,2.71l-1.19,2.79l-1.54,3.2l-2.13,3.66l-2.12,2.79l-2.92,3.39l-2.47,2.0l-3.76,2.5l-2.33,1.9l-2.77,3.06l-0.61,1.35l-0.28,0.29l-1.22,-1.69l-0.03,-8.92l2.12,-2.76l0.59,-0.68l1.47,-0.04l0.18,-0.06l2.15,-1.71l3.16,-0.11l0.21,-0.09l7.08,-7.55l1.76,-2.12l1.14,-1.57l0.06,-0.18l0.01,-4.67Z\", \"name\": \"Somalia\"}, \"SN\": {\"path\": \"M379.28,250.34l-0.95,-1.82l-0.09,-0.1l-0.83,-0.6l0.62,-0.28l0.13,-0.11l1.21,-1.8l0.6,-1.31l0.71,-0.68l1.09,0.2l0.18,-0.02l1.17,-0.53l1.25,-0.03l1.17,0.73l1.59,0.65l1.47,1.83l1.59,1.7l0.12,1.56l0.49,1.46l0.1,0.14l0.85,0.65l0.18,0.82l-0.08,0.57l-0.13,0.05l-1.29,-0.19l-0.29,0.13l-0.11,0.16l-0.35,0.04l-1.83,-0.61l-5.84,-0.13l-0.12,0.02l-0.6,0.26l-0.87,-0.06l-1.01,0.32l-0.26,-1.26l1.9,0.04l0.16,-0.04l0.54,-0.32l0.37,-0.02l0.15,-0.05l0.78,-0.5l0.92,0.46l0.12,0.03l1.09,0.04l0.15,-0.03l1.08,-0.57l0.11,-0.44l-0.51,-0.74l-0.39,-0.1l-0.76,0.39l-0.62,-0.01l-0.92,-0.58l-0.18,-0.05l-0.79,0.04l-0.2,0.09l-0.48,0.51l-2.41,0.06Z\", \"name\": \"Senegal\"}, \"SL\": {\"path\": \"M392.19,267.53l-0.44,-0.12l-1.73,-0.97l-1.24,-1.28l-0.4,-0.84l-0.27,-1.65l1.21,-1.0l0.09,-0.12l0.27,-0.66l0.32,-0.41l0.56,-0.05l0.16,-0.07l0.5,-0.41l1.75,0.0l0.59,0.77l0.49,0.96l-0.07,0.64l0.04,0.19l0.36,0.58l-0.03,0.84l0.24,0.2l-0.64,0.65l-1.13,1.37l-0.06,0.14l-0.12,0.66l-0.43,0.58Z\", \"name\": \"Sierra Leone\"}, \"SB\": {\"path\": \"M826.74,311.51l0.23,0.29l-0.95,-0.01l-0.39,-0.63l0.65,0.27l0.45,0.09ZM825.01,308.52l-1.18,-1.39l-0.37,-1.06l0.24,0.0l0.82,1.84l0.49,0.6ZM823.21,309.42l-0.44,0.03l-1.43,-0.24l-0.32,-0.24l0.08,-0.5l1.29,0.31l0.72,0.47l0.11,0.18ZM817.9,303.81l2.59,1.44l0.3,0.41l-1.21,-0.66l-1.34,-0.89l-0.34,-0.3ZM813.77,302.4l0.48,0.34l0.1,0.08l-0.33,-0.17l-0.25,-0.25Z\", \"name\": \"Solomon Islands\"}, \"SA\": {\"path\": \"M528.24,243.1l-0.2,-0.69l-0.07,-0.12l-0.69,-0.71l-0.18,-0.94l-0.12,-0.19l-1.24,-0.89l-1.28,-2.09l-0.7,-2.08l-0.07,-0.11l-1.73,-1.79l-0.11,-0.07l-1.03,-0.39l-1.57,-2.36l-0.27,-1.72l0.1,-1.53l-0.03,-0.15l-1.44,-2.93l-1.25,-1.13l-1.34,-0.56l-0.72,-1.33l0.11,-0.49l-0.02,-0.2l-0.7,-1.38l-0.08,-0.1l-0.68,-0.56l-0.97,-1.98l-2.8,-4.03l-0.25,-0.13l-0.85,0.01l0.29,-1.11l0.12,-0.97l0.23,-0.81l2.52,0.39l0.23,-0.06l1.08,-0.84l0.6,-0.95l1.78,-0.35l0.22,-0.17l0.37,-0.83l0.74,-0.42l0.08,-0.46l-2.17,-2.4l4.55,-1.26l0.12,-0.06l0.36,-0.32l2.83,0.71l3.67,1.91l7.04,5.5l0.17,0.06l4.64,0.22l2.06,0.24l0.55,1.15l0.28,0.17l1.56,-0.06l0.9,2.15l0.14,0.15l1.14,0.57l0.39,0.85l0.11,0.13l1.59,1.06l0.12,0.91l-0.23,0.83l0.01,0.18l0.32,0.9l0.07,0.11l0.68,0.7l0.33,0.86l0.37,0.65l0.09,0.1l0.76,0.53l0.25,0.04l0.45,-0.12l0.35,0.75l0.1,0.63l0.96,2.68l0.23,0.19l7.53,1.33l0.27,-0.09l0.24,-0.26l0.87,1.41l-1.58,4.96l-7.34,2.54l-7.28,1.02l-2.34,1.17l-0.12,0.1l-1.74,2.63l-0.86,0.32l-0.49,-0.68l-0.28,-0.12l-0.92,0.12l-2.32,-0.25l-0.41,-0.23l-0.15,-0.04l-2.89,0.06l-0.63,0.2l-0.91,-0.59l-0.43,0.11l-0.66,1.27l-0.03,0.21l0.21,0.89l-0.6,0.45Z\", \"name\": \"Saudi Arabia\"}, \"SE\": {\"path\": \"M476.42,90.44l-0.15,0.1l-2.43,2.86l-0.07,0.24l0.36,2.31l-3.84,3.1l-4.83,3.38l-0.11,0.15l-1.82,5.45l0.03,0.26l1.78,2.68l2.27,1.99l-2.13,3.88l-2.49,0.82l-0.2,0.24l-0.95,6.05l-1.32,3.09l-2.82,-0.32l-0.3,0.16l-1.34,2.64l-2.48,0.14l-0.76,-3.15l-2.09,-4.04l-1.85,-5.01l1.03,-1.98l2.06,-2.53l0.06,-0.13l0.83,-4.45l-0.06,-0.25l-1.54,-1.86l-0.15,-5.0l1.52,-3.48l2.28,0.06l0.27,-0.16l0.87,-1.59l-0.01,-0.31l-0.8,-1.21l3.79,-5.63l4.07,-7.54l2.23,0.01l0.29,-0.22l0.59,-2.15l4.46,0.66l0.34,-0.26l0.34,-2.64l1.21,-0.14l3.24,2.08l3.78,2.85l0.06,6.37l0.03,0.14l0.67,1.29l-3.95,1.07Z\", \"name\": \"Sweden\"}, \"SD\": {\"path\": \"M505.98,259.75l-0.31,-0.9l-0.1,-0.14l-1.2,-0.93l-0.27,-1.66l0.29,-1.83l-0.25,-0.34l-1.16,-0.17l-0.33,0.21l-0.11,0.37l-1.3,0.11l-0.21,0.49l0.55,0.68l0.18,1.29l-1.31,1.33l-1.18,1.72l-1.04,0.21l-2.0,-1.4l-0.32,-0.02l-0.95,0.52l-0.14,0.16l-0.21,0.6l-1.16,0.43l-0.19,0.23l-0.04,0.27l-2.08,0.0l-0.25,-0.39l-0.24,-0.13l-1.81,-0.09l-0.14,0.03l-0.8,0.38l-0.49,-0.16l-1.22,-1.39l-0.42,-0.67l-0.31,-0.14l-1.81,0.35l-0.2,0.14l-0.72,1.24l-0.61,2.14l-0.73,0.4l-0.62,0.22l-0.83,-0.68l-0.12,-0.6l0.38,-0.97l0.01,-1.14l-0.08,-0.2l-1.39,-1.53l-0.25,-0.97l0.03,-0.57l-0.11,-0.25l-0.81,-0.66l-0.03,-1.34l-0.04,-0.14l-0.52,-0.98l-0.31,-0.15l-0.42,0.07l0.12,-0.44l0.63,-1.03l0.03,-0.23l-0.24,-0.88l0.69,-0.66l0.02,-0.41l-0.4,-0.46l0.58,-1.39l1.04,-1.71l1.97,0.16l0.32,-0.3l-0.12,-10.24l0.02,-0.8l2.59,-0.01l0.3,-0.3l0.0,-4.92l29.19,0.0l0.68,2.17l-0.4,0.35l-0.1,0.27l0.36,2.69l0.93,3.15l0.12,0.16l2.05,1.4l-0.99,1.15l-1.75,0.4l-0.15,0.08l-0.79,0.79l-0.08,0.17l-0.24,1.69l-1.07,3.75l-0.0,0.16l0.25,0.96l-0.38,2.1l-0.98,2.41l-1.52,1.3l-1.07,1.94l-0.25,0.99l-1.08,0.64l-0.13,0.18l-0.46,1.65Z\", \"name\": \"Sudan\"}, \"DO\": {\"path\": \"M241.7,234.97l0.15,-0.22l1.73,0.01l1.43,0.64l0.15,0.03l0.45,-0.04l0.36,0.74l0.28,0.17l1.02,-0.04l-0.04,0.43l0.27,0.33l1.03,0.09l0.91,0.7l-0.57,0.64l-0.99,-0.47l-0.16,-0.03l-1.11,0.11l-0.79,-0.12l-0.26,0.09l-0.38,0.4l-0.66,0.11l-0.28,-0.45l-0.38,-0.12l-0.83,0.37l-0.14,0.13l-0.85,1.49l-0.27,-0.17l-0.1,-0.58l0.05,-0.67l-0.07,-0.21l-0.44,-0.53l0.35,-0.25l0.12,-0.19l0.19,-1.0l-0.2,-1.4Z\", \"name\": \"Dominican Republic\"}, \"DJ\": {\"path\": \"M528.78,253.36l0.34,0.45l-0.06,0.76l-1.26,0.54l-0.05,0.53l0.82,0.53l-0.57,0.83l-0.3,-0.25l-0.27,-0.05l-0.56,0.17l-1.07,-0.03l-0.04,-0.56l-0.16,-0.56l0.76,-1.07l0.76,-0.97l0.89,0.18l0.25,-0.06l0.51,-0.42Z\", \"name\": \"Djibouti\"}, \"DK\": {\"path\": \"M452.4,129.07l-1.27,2.39l-2.25,-1.69l-0.26,-1.08l3.15,-1.0l0.63,1.39ZM447.87,126.25l-0.35,0.76l-0.47,-0.24l-0.38,0.09l-1.8,2.53l-0.03,0.29l0.56,1.4l-1.22,0.4l-1.68,-0.41l-0.92,-1.76l-0.07,-3.47l0.38,-0.88l0.62,-0.93l2.07,-0.21l0.19,-0.1l0.84,-0.95l1.5,-0.76l-0.06,1.26l-0.7,1.1l-0.03,0.25l0.3,1.0l0.18,0.19l1.06,0.42Z\", \"name\": \"Denmark\"}, \"DE\": {\"path\": \"M445.51,131.69l0.03,0.94l0.21,0.28l2.32,0.74l-0.02,1.0l0.37,0.3l2.55,-0.65l1.36,-0.89l2.63,1.27l1.09,1.01l0.51,1.51l-0.6,0.78l-0.0,0.36l0.88,1.17l0.58,1.68l-0.18,1.08l0.03,0.18l0.87,1.81l-0.66,0.2l-0.55,-0.32l-0.36,0.05l-0.58,0.58l-1.73,0.62l-0.99,0.84l-1.77,0.7l-0.16,0.4l0.42,0.94l0.26,1.34l0.14,0.2l1.25,0.76l1.22,1.2l-0.71,1.2l-0.81,0.37l-0.17,0.32l0.34,1.99l-0.04,0.09l-0.47,-0.39l-0.17,-0.07l-1.2,-0.1l-1.85,0.57l-2.15,-0.13l-0.29,0.18l-0.21,0.5l-0.96,-0.67l-0.24,-0.05l-0.67,0.16l-2.6,-0.94l-0.34,0.1l-0.42,0.57l-1.64,-0.02l0.26,-1.88l1.24,-2.15l-0.21,-0.45l-3.54,-0.58l-0.98,-0.71l0.12,-1.26l-0.05,-0.2l-0.44,-0.64l0.27,-2.18l-0.38,-3.14l1.17,-0.0l0.27,-0.17l0.63,-1.26l0.65,-3.17l-0.02,-0.17l-0.41,-1.0l0.32,-0.47l1.77,-0.16l0.37,0.6l0.47,0.06l1.7,-1.69l0.06,-0.33l-0.55,-1.24l-0.09,-1.51l1.5,0.36l0.16,-0.01l1.22,-0.4Z\", \"name\": \"Germany\"}, \"YE\": {\"path\": \"M553.53,242.65l-1.51,0.58l-0.17,0.16l-0.48,1.14l-0.07,0.79l-2.31,1.0l-3.98,1.19l-2.28,1.8l-0.97,0.12l-0.7,-0.14l-0.23,0.05l-1.42,1.03l-1.51,0.47l-2.07,0.13l-0.68,0.15l-0.17,0.1l-0.49,0.6l-0.57,0.16l-0.18,0.13l-0.3,0.49l-1.06,-0.05l-0.13,0.02l-0.73,0.32l-1.48,-0.11l-0.55,-1.26l0.07,-1.32l-0.04,-0.16l-0.39,-0.72l-0.48,-1.85l-0.52,-0.79l0.08,-0.02l0.22,-0.36l-0.23,-1.05l0.24,-0.39l0.04,-0.19l-0.09,-0.95l0.96,-0.72l0.11,-0.31l-0.23,-0.98l0.46,-0.88l0.75,0.49l0.26,0.03l0.63,-0.22l2.76,-0.06l0.5,0.25l2.42,0.26l0.85,-0.11l0.52,0.71l0.35,0.1l1.17,-0.43l0.15,-0.12l1.75,-2.64l2.22,-1.11l6.95,-0.96l2.55,5.58Z\", \"name\": \"Yemen\"}, \"AT\": {\"path\": \"M463.17,154.15l-0.14,0.99l-1.15,0.01l-0.24,0.47l0.39,0.56l-0.75,1.84l-0.36,0.4l-2.06,0.07l-0.14,0.04l-1.18,0.67l-1.96,-0.23l-3.43,-0.78l-0.5,-0.97l-0.33,-0.16l-2.47,0.55l-0.2,0.16l-0.18,0.37l-1.27,-0.38l-1.28,-0.09l-0.81,-0.41l0.25,-0.51l0.03,-0.18l-0.05,-0.28l0.35,-0.08l1.16,0.81l0.45,-0.13l0.27,-0.64l2.0,0.12l1.84,-0.57l1.05,0.09l0.71,0.59l0.47,-0.11l0.23,-0.54l0.02,-0.17l-0.32,-1.85l0.69,-0.31l0.13,-0.12l0.73,-1.23l1.61,0.89l0.35,-0.04l1.35,-1.27l0.7,-0.19l1.84,0.93l0.18,0.03l1.08,-0.15l0.81,0.43l-0.07,0.15l-0.02,0.2l0.24,1.06Z\", \"name\": \"Austria\"}, \"DZ\": {\"path\": \"M450.58,224.94l-8.31,4.86l-7.23,5.12l-3.46,1.13l-2.42,0.22l-0.02,-1.33l-0.2,-0.28l-1.15,-0.42l-1.45,-0.69l-0.55,-1.13l-0.1,-0.12l-8.45,-5.72l-17.72,-12.17l0.03,-0.38l-0.02,-3.21l3.84,-1.91l2.46,-0.41l2.1,-0.75l0.14,-0.11l0.9,-1.3l2.84,-1.06l0.19,-0.27l0.09,-1.81l1.21,-0.2l0.15,-0.07l1.06,-0.96l3.19,-0.46l0.23,-0.18l0.46,-1.08l-0.08,-0.34l-0.6,-0.54l-0.83,-2.85l-0.18,-1.8l-0.82,-1.57l2.13,-1.37l2.65,-0.49l0.13,-0.05l1.55,-1.15l2.34,-0.85l4.2,-0.51l4.07,-0.23l1.21,0.41l0.23,-0.01l2.3,-1.11l2.52,-0.02l0.94,0.62l0.2,0.05l1.25,-0.13l-0.36,1.03l-0.01,0.14l0.39,2.66l-0.56,2.2l-1.49,1.52l-0.08,0.24l0.22,2.12l0.11,0.2l1.94,1.58l0.02,0.54l0.12,0.23l1.45,1.06l1.04,4.85l0.81,2.42l0.13,1.19l-0.43,2.17l0.17,1.28l-0.31,1.53l0.2,1.56l-0.9,1.02l-0.01,0.38l1.43,1.88l0.09,1.06l0.04,0.13l0.89,1.48l0.37,0.12l1.03,-0.43l1.79,1.12l0.89,1.34Z\", \"name\": \"Algeria\"}, \"US\": {\"path\": \"M892.64,99.05l1.16,0.57l0.21,0.02l1.45,-0.38l1.92,0.99l2.17,0.47l-1.65,0.72l-1.75,-0.79l-0.93,-0.7l-0.21,-0.06l-2.11,0.22l-0.35,-0.2l0.09,-0.87ZM183.29,150.37l0.39,1.54l0.12,0.17l0.78,0.55l0.14,0.05l1.74,0.2l2.52,0.5l2.4,0.98l0.17,0.02l1.96,-0.4l3.01,0.81l0.91,-0.02l2.22,-0.88l4.67,2.33l3.86,2.01l0.21,0.71l0.15,0.18l0.33,0.17l-0.02,0.05l0.23,0.43l0.67,0.1l0.21,-0.05l0.1,-0.07l0.05,0.29l0.09,0.16l0.5,0.5l0.21,0.09l0.56,0.0l0.13,0.13l-0.2,0.36l0.12,0.41l2.49,1.39l0.99,5.24l-0.69,1.68l-1.16,1.64l-0.6,1.18l-0.06,0.31l0.04,0.22l0.28,0.43l0.11,0.1l0.85,0.47l0.15,0.04l0.63,0.0l0.14,-0.04l2.87,-1.58l2.6,-0.49l3.28,-1.5l0.17,-0.23l0.04,-0.43l-0.23,-0.93l-0.24,-0.39l0.74,-0.32l4.7,-0.01l0.25,-0.13l0.77,-1.15l2.9,-2.41l1.04,-0.52l8.35,-0.02l0.28,-0.21l0.2,-0.6l0.7,-0.14l1.06,-0.48l0.13,-0.11l0.92,-1.49l0.75,-2.39l1.67,-2.08l0.59,0.6l0.3,0.07l1.52,-0.49l0.88,0.72l-0.0,4.14l0.08,0.2l1.6,1.72l0.31,0.72l-2.42,1.35l-2.55,1.05l-2.64,0.9l-0.14,0.11l-1.33,1.81l-0.44,0.7l-0.05,0.15l-0.03,1.6l0.03,0.14l0.83,1.59l0.24,0.16l0.78,0.06l-1.15,0.33l-1.25,-0.04l-1.83,0.52l-2.51,0.29l-2.17,0.88l-0.17,0.36l0.33,0.22l3.55,-0.54l0.15,0.11l-2.87,0.73l-1.19,0.0l-0.16,-0.33l-0.36,0.06l-0.76,0.82l0.17,0.5l0.42,0.08l-0.45,1.75l-1.4,1.74l-0.04,-0.17l-0.21,-0.22l-0.48,-0.13l-0.77,-0.69l-0.36,-0.03l-0.12,0.34l0.52,1.58l0.09,0.14l0.52,0.43l0.03,0.87l-0.74,1.05l-0.39,0.63l0.05,-0.12l-0.08,-0.34l-1.19,-1.03l-0.28,-2.31l-0.26,-0.26l-0.32,0.19l-0.48,1.27l-0.01,0.19l0.39,1.33l-1.14,-0.31l-0.36,0.18l0.14,0.38l1.57,0.85l0.1,2.58l0.22,0.28l0.55,0.15l0.21,0.81l0.33,2.72l-1.46,1.94l-2.5,0.81l-0.12,0.07l-1.58,1.58l-1.15,0.17l-0.15,0.06l-1.27,1.03l-0.09,0.13l-0.32,0.85l-2.71,1.79l-1.45,1.37l-1.18,1.64l-0.05,0.12l-0.39,1.96l0.0,0.13l0.44,1.91l0.85,2.37l1.1,1.91l0.03,1.2l1.16,3.07l-0.08,1.74l-0.1,0.99l-0.57,1.48l-0.54,0.24l-0.97,-0.26l-0.34,-1.02l-0.12,-0.16l-0.89,-0.58l-2.44,-4.28l-0.34,-0.94l0.49,-1.71l-0.02,-0.21l-0.7,-1.5l-2.0,-2.35l-0.11,-0.08l-0.98,-0.42l-0.25,0.01l-2.42,1.19l-0.26,-0.08l-1.26,-1.29l-1.57,-0.68l-0.16,-0.02l-2.79,0.34l-2.18,-0.3l-1.98,0.19l-1.12,0.45l-0.14,0.44l0.4,0.65l-0.04,1.02l0.09,0.22l0.29,0.3l-0.06,0.05l-0.77,-0.33l-0.26,0.01l-0.87,0.48l-1.64,-0.08l-1.79,-1.39l-0.23,-0.06l-2.11,0.33l-1.75,-0.61l-0.14,-0.01l-1.61,0.2l-2.11,0.64l-0.11,0.06l-2.25,1.99l-2.53,1.21l-1.43,1.38l-0.58,1.22l-0.03,0.12l-0.03,1.86l0.13,1.32l0.3,0.62l-0.46,0.04l-1.71,-0.57l-1.85,-0.79l-0.63,-1.14l-0.54,-1.85l-0.07,-0.12l-1.45,-1.51l-0.86,-1.58l-1.26,-1.87l-0.09,-0.09l-1.76,-1.09l-0.17,-0.04l-2.05,0.05l-0.23,0.12l-1.44,1.97l-1.84,-0.72l-1.19,-0.76l-0.6,-1.45l-0.9,-1.52l-1.49,-1.21l-1.27,-0.87l-0.89,-0.96l-0.22,-0.1l-4.34,-0.0l-0.3,0.3l-0.0,0.84l-6.62,0.02l-5.66,-1.93l-3.48,-1.24l0.11,-0.25l-0.3,-0.42l-3.18,0.3l-2.6,0.2l-0.35,-1.19l-0.08,-0.13l-1.62,-1.61l-0.13,-0.08l-1.02,-0.29l-0.22,-0.66l-0.25,-0.2l-1.31,-0.13l-0.82,-0.7l-0.16,-0.07l-2.25,-0.27l-0.48,-0.34l-0.28,-1.44l-0.07,-0.14l-2.41,-2.84l-2.03,-3.89l0.08,-0.58l-0.1,-0.27l-1.08,-0.94l-1.87,-2.36l-0.33,-2.31l-0.07,-0.15l-1.24,-1.5l0.52,-2.4l-0.09,-2.57l-0.78,-2.3l0.96,-2.83l0.61,-5.66l-0.46,-4.26l-0.79,-2.71l-0.68,-1.4l0.13,-0.26l3.24,0.97l1.28,2.88l0.52,0.06l0.62,-0.84l0.06,-0.22l-0.4,-2.61l-0.74,-2.29l68.9,-0.0l0.3,-0.3l0.01,-0.95l0.32,-0.01ZM32.5,67.43l1.75,1.99l0.41,0.04l1.02,-0.81l3.79,0.25l-0.1,0.72l0.24,0.34l3.83,0.77l2.6,-0.44l5.21,1.41l4.84,0.43l1.9,0.57l0.15,0.01l3.25,-0.71l3.72,1.32l2.52,0.58l-0.03,38.14l0.29,0.3l2.41,0.11l2.34,1.0l1.7,1.59l2.22,2.42l0.42,0.03l2.41,-2.04l2.25,-1.08l1.23,1.76l1.71,1.53l2.24,1.62l1.54,2.56l2.56,4.09l0.11,0.11l4.1,2.17l0.06,1.93l-1.12,1.35l-1.22,-1.14l-2.08,-1.05l-0.68,-2.94l-0.09,-0.16l-3.18,-2.84l-1.32,-3.35l-0.25,-0.19l-2.43,-0.24l-3.93,-0.09l-2.85,-1.02l-5.24,-3.85l-6.77,-2.04l-3.52,0.3l-4.84,-1.7l-2.96,-1.6l-0.23,-0.02l-2.78,0.8l-0.21,0.35l0.46,2.31l-1.11,0.19l-2.9,0.78l-2.24,1.26l-2.42,0.68l-0.29,-1.79l1.07,-3.49l2.54,-1.11l0.12,-0.45l-0.69,-0.96l-0.41,-0.07l-3.19,2.12l-1.76,2.54l-3.57,2.62l-0.03,0.46l1.63,1.59l-2.14,2.38l-2.64,1.49l-2.49,1.09l-0.16,0.17l-0.58,1.48l-3.8,1.79l-0.14,0.14l-0.75,1.57l-2.75,1.41l-1.62,-0.25l-0.16,0.02l-2.35,0.98l-2.54,1.19l-2.06,1.15l-4.05,0.93l-0.1,-0.15l2.45,-1.45l2.49,-1.1l2.61,-1.88l3.03,-0.39l0.19,-0.1l1.2,-1.41l3.43,-2.11l0.61,-0.75l1.81,-1.24l0.13,-0.2l0.42,-2.7l1.24,-2.12l-0.03,-0.35l-0.34,-0.09l-2.73,1.05l-0.67,-0.53l-0.39,0.02l-1.13,1.11l-1.43,-1.62l-0.49,0.06l-0.41,0.8l-0.67,-1.31l-0.42,-0.12l-2.43,1.43l-1.18,-0.0l-0.18,-1.86l0.43,-1.3l-0.09,-0.33l-1.61,-1.33l-0.26,-0.06l-3.11,0.68l-2.0,-1.66l-1.61,-0.85l-0.01,-1.97l-0.11,-0.23l-1.76,-1.48l0.86,-1.96l2.01,-2.13l0.88,-1.94l1.79,-0.25l1.65,0.6l0.31,-0.06l1.91,-1.8l1.67,0.31l0.22,-0.04l1.91,-1.23l0.13,-0.33l-0.47,-1.82l-0.15,-0.19l-1.0,-0.52l1.51,-1.27l0.09,-0.34l-0.29,-0.19l-1.62,0.06l-2.66,0.88l-0.13,0.09l-0.62,0.72l-1.77,-0.8l-0.16,-0.02l-3.48,0.44l-3.5,-0.92l-1.06,-1.61l-2.78,-2.09l3.07,-1.51l5.52,-2.01l1.65,0.0l-0.28,1.73l0.31,0.35l5.29,-0.16l0.23,-0.49l-2.03,-2.59l-0.1,-0.08l-3.03,-1.58l-1.79,-2.12l-2.4,-1.83l-3.18,-1.27l1.13,-1.84l4.28,-0.14l0.15,-0.05l3.16,-2.0l0.13,-0.17l0.57,-2.07l2.43,-2.02l2.42,-0.52l4.67,-1.98l2.22,0.29l0.2,-0.04l3.74,-2.37l3.57,0.91ZM37.66,123.49l-2.31,1.26l-1.04,-0.75l-0.31,-1.35l2.06,-1.16l1.24,-0.51l1.48,0.22l0.76,0.81l-1.89,1.49ZM30.89,233.84l1.2,0.57l0.35,0.3l0.48,0.69l-1.6,0.86l-0.3,0.31l-0.24,-0.14l0.05,-0.54l-0.02,-0.15l-0.36,-0.83l0.05,-0.12l0.39,-0.38l0.07,-0.31l-0.09,-0.27ZM29.06,231.89l0.5,0.14l0.31,0.19l-0.46,0.1l-0.34,-0.43ZM25.02,230.13l0.2,-0.11l0.4,0.47l-0.43,-0.05l-0.17,-0.31ZM21.29,228.68l0.1,-0.07l0.22,0.02l0.02,0.21l-0.02,0.02l-0.32,-0.18ZM6.0,113.33l-1.19,0.45l-1.5,-0.64l-0.94,-0.63l1.76,-0.46l1.71,0.29l0.16,0.98Z\", \"name\": \"United States of America\"}, \"LV\": {\"path\": \"M473.99,127.16l0.07,-2.15l1.15,-2.11l2.05,-1.07l1.84,2.48l0.25,0.12l2.01,-0.07l0.29,-0.25l0.45,-2.58l1.85,-0.56l0.98,0.4l2.13,1.33l0.16,0.05l1.97,0.01l1.02,0.7l0.21,1.67l0.71,1.84l-2.44,1.23l-1.36,0.53l-2.28,-1.62l-0.12,-0.05l-1.18,-0.2l-0.28,-0.6l-0.31,-0.17l-2.43,0.35l-4.17,-0.23l-0.12,0.02l-2.45,0.93Z\", \"name\": \"Latvia\"}, \"UY\": {\"path\": \"M276.9,363.17l1.3,-0.23l2.4,2.04l0.22,0.07l0.82,-0.07l2.48,1.7l1.93,1.5l1.28,1.67l-0.95,1.14l-0.04,0.31l0.63,1.45l-0.96,1.57l-2.65,1.47l-1.73,-0.53l-0.15,-0.01l-1.25,0.28l-2.22,-1.16l-0.16,-0.03l-1.56,0.08l-1.33,-1.36l0.17,-1.58l0.48,-0.55l0.07,-0.2l-0.02,-2.74l0.66,-2.8l0.57,-2.02Z\", \"name\": \"Uruguay\"}, \"LB\": {\"path\": \"M510.44,198.11l-0.48,0.03l-0.26,0.17l-0.15,0.32l-0.21,-0.0l0.72,-1.85l1.19,-1.9l0.74,0.09l0.27,0.73l-1.19,0.93l-0.09,0.13l-0.54,1.36Z\", \"name\": \"Lebanon\"}, \"LA\": {\"path\": \"M684.87,248.8l0.61,-0.86l0.05,-0.16l0.11,-2.17l-0.08,-0.22l-1.96,-2.16l-0.15,-2.44l-0.08,-0.18l-1.9,-2.1l-0.19,-0.1l-1.89,-0.18l-0.29,0.15l-0.42,0.76l-1.21,0.06l-0.67,-0.41l-0.31,-0.0l-2.2,1.29l-0.05,-1.77l0.61,-2.7l-0.27,-0.37l-1.44,-0.1l-0.12,-1.31l-0.12,-0.21l-0.87,-0.65l0.38,-0.68l1.76,-1.41l0.08,0.22l0.27,0.2l1.33,0.07l0.31,-0.34l-0.35,-2.75l0.85,-0.25l1.32,1.88l1.11,2.36l0.27,0.17l2.89,0.02l0.78,1.82l-1.32,0.56l-0.12,0.09l-0.72,0.93l0.1,0.45l2.93,1.52l3.62,5.27l1.88,1.78l0.58,1.67l-0.38,2.11l-1.87,-0.79l-0.37,0.11l-0.99,1.54l-1.51,-0.73Z\", \"name\": \"Laos\"}, \"TW\": {\"path\": \"M725.6,222.5l-1.5,4.22l-0.82,1.65l-1.01,-1.7l-0.26,-1.8l1.4,-2.48l1.8,-1.81l0.76,0.53l-0.38,1.39Z\", \"name\": \"Taiwan\"}, \"TT\": {\"path\": \"M266.35,259.46l0.41,-0.39l0.09,-0.23l-0.04,-0.75l1.14,-0.26l0.2,0.03l-0.07,1.37l-1.73,0.23Z\", \"name\": \"Trinidad and Tobago\"}, \"TR\": {\"path\": \"M513.25,175.38l3.63,1.17l0.14,0.01l2.88,-0.45l2.11,0.26l0.18,-0.03l2.9,-1.53l2.51,-0.13l2.25,1.37l0.36,0.88l-0.23,1.36l0.19,0.33l1.81,0.72l0.61,0.53l-1.31,0.64l-0.16,0.34l0.76,3.24l-0.44,0.8l0.01,0.3l1.19,2.02l-0.71,0.29l-0.74,-0.62l-0.15,-0.07l-2.91,-0.37l-0.15,0.02l-1.04,0.43l-2.78,0.44l-1.44,-0.03l-2.83,1.06l-1.95,0.01l-1.28,-0.52l-0.2,-0.01l-2.62,0.76l-0.7,-0.48l-0.47,0.22l-0.13,1.49l-1.01,0.94l-0.58,-0.82l0.79,-0.9l0.04,-0.34l-0.31,-0.15l-1.46,0.23l-2.03,-0.64l-0.3,0.07l-1.65,1.58l-3.58,0.3l-1.94,-1.47l-0.17,-0.06l-2.7,-0.1l-0.28,0.17l-0.51,1.06l-1.47,0.29l-2.32,-1.46l-0.17,-0.05l-2.55,0.05l-1.4,-2.7l-1.72,-1.54l1.11,-2.06l-0.07,-0.37l-1.35,-1.19l2.47,-2.51l3.74,-0.11l0.26,-0.17l0.96,-2.07l4.56,0.38l0.19,-0.05l2.97,-1.92l2.84,-0.83l4.03,-0.06l4.31,2.08ZM488.85,176.8l-1.81,1.38l-0.57,-1.01l0.02,-0.36l0.45,-0.25l0.13,-0.15l0.78,-1.87l-0.11,-0.37l-0.72,-0.47l1.91,-0.71l1.89,0.35l0.25,0.97l0.17,0.2l1.87,0.83l-0.19,0.31l-2.82,0.16l-0.18,0.07l-1.06,0.91Z\", \"name\": \"Turkey\"}, \"LK\": {\"path\": \"M625.44,266.07l-0.35,2.4l-0.9,0.61l-1.91,0.5l-1.04,-1.75l-0.43,-3.5l1.0,-3.6l1.34,1.09l1.13,1.72l1.16,2.52Z\", \"name\": \"Sri Lanka\"}, \"TN\": {\"path\": \"M444.91,206.18l-0.99,-4.57l-0.12,-0.18l-1.43,-1.04l-0.02,-0.53l-0.11,-0.22l-1.95,-1.59l-0.19,-1.85l1.44,-1.47l0.08,-0.14l0.59,-2.34l-0.38,-2.77l0.44,-1.28l2.52,-1.08l1.41,0.28l-0.06,1.2l0.43,0.28l1.81,-0.9l0.02,0.06l-1.14,1.28l-0.08,0.2l-0.02,1.32l0.11,0.24l0.74,0.6l-0.29,2.18l-1.56,1.35l-0.09,0.32l0.48,1.54l0.28,0.21l1.11,0.04l0.55,1.17l0.15,0.14l0.76,0.35l-0.12,1.79l-1.1,0.72l-0.8,0.91l-1.68,1.04l-0.13,0.32l0.25,1.08l-0.18,0.96l-0.74,0.39Z\", \"name\": \"Tunisia\"}, \"TL\": {\"path\": \"M734.21,307.22l0.17,-0.34l1.99,-0.52l1.72,-0.08l0.78,-0.3l0.29,0.1l-0.43,0.32l-2.57,1.09l-1.71,0.59l-0.05,-0.49l-0.19,-0.36Z\", \"name\": \"East Timor\"}, \"TM\": {\"path\": \"M553.16,173.51l-0.12,1.0l-0.26,-0.65l0.38,-0.34ZM553.54,173.16l0.13,-0.12l0.43,-0.09l-0.56,0.21ZM555.68,172.6l0.65,-0.14l1.53,0.76l1.71,2.29l0.27,0.12l1.27,-0.14l2.81,-0.04l0.29,-0.38l-0.35,-1.27l1.98,-0.97l1.96,-1.63l3.05,1.44l0.25,2.23l0.14,0.22l0.96,0.61l0.18,0.05l2.61,-0.13l0.68,0.44l1.2,2.97l0.1,0.13l2.85,2.03l1.67,1.41l2.66,1.45l3.13,1.17l-0.05,1.23l-0.36,-0.04l-1.12,-0.73l-0.44,0.14l-0.34,0.89l-1.96,0.52l-0.22,0.23l-0.47,2.17l-1.26,0.78l-1.93,0.42l-0.21,0.18l-0.46,1.14l-1.64,0.33l-2.3,-0.97l-0.2,-2.23l-0.28,-0.27l-1.76,-0.1l-2.78,-2.48l-0.15,-0.07l-1.95,-0.31l-2.82,-1.48l-1.78,-0.27l-0.18,0.03l-1.03,0.51l-1.6,-0.08l-0.22,0.08l-1.72,1.6l-1.83,0.46l-0.39,-1.7l0.36,-3.0l-0.16,-0.3l-1.73,-0.88l0.57,-1.77l-0.25,-0.39l-1.33,-0.14l0.41,-1.85l2.05,0.63l0.21,-0.01l2.2,-0.95l0.09,-0.49l-1.78,-1.75l-0.69,-1.66l-0.07,-0.03Z\", \"name\": \"Turkmenistan\"}, \"TJ\": {\"path\": \"M597.99,178.71l-0.23,0.23l-2.57,-0.47l-0.35,0.25l-0.24,1.7l0.32,0.34l2.66,-0.22l3.15,0.95l4.47,-0.42l0.58,2.45l0.39,0.21l0.71,-0.25l1.22,0.53l-0.06,1.01l0.29,1.28l-2.19,-0.0l-1.71,-0.21l-0.23,0.07l-1.51,1.25l-1.05,0.27l-0.77,0.51l-0.71,-0.67l0.22,-2.28l-0.24,-0.32l-0.43,-0.08l0.17,-0.57l-0.16,-0.36l-1.36,-0.66l-0.34,0.05l-1.08,1.01l-0.09,0.15l-0.25,1.09l-0.24,0.26l-1.36,-0.05l-0.27,0.14l-0.65,1.06l-0.58,-0.39l-0.3,-0.02l-1.68,0.86l-0.36,-0.16l1.28,-2.65l0.02,-0.2l-0.54,-2.17l-0.18,-0.21l-1.53,-0.58l0.41,-0.82l1.89,0.13l0.26,-0.12l1.19,-1.63l0.77,-1.82l2.66,-0.55l-0.33,0.87l0.01,0.23l0.36,0.82l0.3,0.18l0.23,-0.02Z\", \"name\": \"Tajikistan\"}, \"LS\": {\"path\": \"M493.32,359.69l0.69,0.65l-0.65,1.12l-0.38,0.8l-1.27,0.39l-0.18,0.15l-0.4,0.77l-0.59,0.18l-1.59,-1.78l1.16,-1.5l1.3,-1.02l0.97,-0.46l0.94,0.72Z\", \"name\": \"Lesotho\"}, \"TH\": {\"path\": \"M677.42,253.68l-1.7,-0.88l-0.14,-0.03l-1.77,0.04l0.3,-1.64l-0.3,-0.35l-2.21,0.01l-0.3,0.28l-0.2,2.76l-2.15,5.9l-0.02,0.13l0.17,1.83l0.28,0.27l1.45,0.07l0.93,2.1l0.44,2.15l0.08,0.15l1.4,1.44l0.16,0.09l1.43,0.27l1.04,1.05l-0.58,0.73l-1.24,0.22l-0.15,-0.99l-0.15,-0.22l-2.04,-1.1l-0.36,0.06l-0.23,0.23l-0.72,-0.71l-0.41,-1.18l-0.06,-0.11l-1.33,-1.42l-1.22,-1.2l-0.5,0.13l-0.15,0.54l-0.14,-0.41l0.26,-1.48l0.73,-2.38l1.2,-2.57l1.37,-2.35l0.02,-0.27l-0.95,-2.26l0.03,-1.19l-0.29,-1.42l-0.06,-0.13l-1.65,-2.0l-0.46,-0.99l0.62,-0.34l0.13,-0.15l0.92,-2.23l-0.02,-0.27l-1.05,-1.74l-1.57,-1.86l-1.04,-1.96l0.76,-0.34l0.16,-0.16l1.07,-2.63l1.58,-0.1l0.16,-0.06l1.43,-1.11l1.24,-0.52l0.84,0.62l0.13,1.43l0.28,0.27l1.34,0.09l-0.54,2.39l0.05,2.39l0.45,0.25l2.48,-1.45l0.6,0.36l0.17,0.04l1.47,-0.07l0.25,-0.15l0.41,-0.73l1.58,0.15l1.76,1.93l0.15,2.44l0.08,0.18l1.94,2.15l-0.1,1.96l-0.66,0.93l-2.25,-0.34l-3.24,0.49l-0.19,0.12l-1.6,2.12l-0.06,0.24l0.48,2.46Z\", \"name\": \"Thailand\"}, \"TF\": {\"path\": \"M593.76,417.73l1.38,0.84l2.15,0.37l0.04,0.31l-0.59,1.24l-3.36,0.19l-0.05,-1.38l0.43,-1.56Z\", \"name\": \"French Southern and Antarctic Lands\"}, \"TG\": {\"path\": \"M425.23,269.29l-1.49,0.4l-0.43,-0.68l-0.64,-1.54l-0.18,-1.16l0.54,-2.21l-0.04,-0.24l-0.59,-0.86l-0.23,-1.9l0.0,-1.82l-0.07,-0.19l-0.95,-1.19l0.1,-0.41l1.58,0.04l-0.23,0.97l0.08,0.28l1.55,1.55l0.09,1.13l0.08,0.19l0.42,0.43l-0.11,5.66l0.52,1.53Z\", \"name\": \"Togo\"}, \"TD\": {\"path\": \"M457.57,252.46l0.23,-1.08l-0.28,-0.36l-1.32,-0.05l0.0,-1.35l-0.1,-0.22l-0.9,-0.82l0.99,-3.1l3.12,-2.37l0.12,-0.23l0.13,-3.33l0.95,-5.2l0.53,-1.09l-0.07,-0.36l-0.94,-0.81l-0.03,-0.7l-0.12,-0.23l-0.84,-0.61l-0.57,-3.76l2.21,-1.26l19.67,9.88l0.12,9.74l-1.83,-0.15l-0.28,0.14l-1.14,1.89l-0.68,1.62l0.05,0.31l0.33,0.38l-0.61,0.58l-0.08,0.3l0.25,0.93l-0.58,0.95l-0.29,1.01l0.34,0.37l0.67,-0.11l0.39,0.73l0.03,1.4l0.11,0.23l0.8,0.65l-0.01,0.24l-1.38,0.37l-0.11,0.06l-1.27,1.03l-1.83,2.76l-2.21,1.1l-2.34,-0.15l-0.82,0.25l-0.2,0.37l0.19,0.68l-1.16,0.79l-1.01,0.94l-2.92,0.89l-0.5,-0.46l-0.17,-0.08l-0.41,-0.05l-0.28,0.12l-0.38,0.54l-1.36,0.12l0.1,-0.18l0.01,-0.27l-0.78,-1.72l-0.35,-1.03l-0.17,-0.18l-1.03,-0.41l-1.29,-1.28l0.36,-0.78l0.9,0.2l0.14,-0.0l0.67,-0.17l1.36,0.02l0.26,-0.45l-1.32,-2.22l0.09,-1.64l-0.17,-1.68l-0.04,-0.13l-0.93,-1.53Z\", \"name\": \"Chad\"}, \"LY\": {\"path\": \"M457.99,226.38l-1.57,0.87l-1.25,-1.28l-0.13,-0.08l-3.85,-1.11l-1.04,-1.57l-0.09,-0.09l-1.98,-1.23l-0.27,-0.02l-0.93,0.39l-0.72,-1.2l-0.09,-1.07l-0.06,-0.16l-1.33,-1.75l0.83,-0.94l0.07,-0.24l-0.21,-1.64l0.31,-1.43l-0.17,-1.29l0.43,-2.26l-0.15,-1.33l-0.73,-2.18l0.99,-0.52l0.16,-0.21l0.22,-1.16l-0.22,-1.06l1.54,-0.95l0.81,-0.92l1.19,-0.78l0.14,-0.23l0.12,-1.76l2.57,0.84l0.16,0.01l0.99,-0.23l2.01,0.45l3.19,1.2l1.12,2.36l0.2,0.16l2.24,0.53l3.5,1.14l2.65,1.36l0.29,-0.01l1.22,-0.71l1.27,-1.32l0.07,-0.29l-0.55,-2.0l0.69,-1.19l1.7,-1.23l1.61,-0.35l3.2,0.54l0.78,1.14l0.24,0.13l0.85,0.01l0.84,0.47l2.35,0.31l0.42,0.63l-0.79,1.16l-0.04,0.26l0.35,1.08l-0.61,1.6l-0.0,0.2l0.73,2.16l0.0,24.24l-2.58,0.01l-0.3,0.29l-0.02,0.62l-19.55,-9.83l-0.28,0.01l-2.53,1.44Z\", \"name\": \"Libya\"}, \"AE\": {\"path\": \"M550.59,223.8l0.12,0.08l1.92,-0.41l3.54,0.15l0.23,-0.09l1.71,-1.79l1.86,-1.7l1.31,-1.36l0.26,0.5l0.28,1.72l-0.93,0.01l-0.3,0.26l-0.21,1.73l0.11,0.27l0.08,0.06l-0.7,0.32l-0.17,0.27l-0.01,0.99l-0.68,1.02l-0.05,0.15l-0.06,0.96l-0.32,0.36l-7.19,-1.27l-0.79,-2.22Z\", \"name\": \"United Arab Emirates\"}, \"VE\": {\"path\": \"M240.66,256.5l0.65,0.91l-0.03,1.13l-1.05,1.39l-0.03,0.31l0.95,2.0l0.32,0.17l1.08,-0.16l0.24,-0.21l0.56,-1.83l-0.06,-0.29l-0.71,-0.81l-0.1,-1.58l2.9,-0.96l0.19,-0.37l-0.29,-1.02l0.45,-0.41l0.72,1.43l0.26,0.16l1.65,0.04l1.46,1.27l0.08,0.72l0.3,0.27l2.28,0.02l2.55,-0.25l1.34,1.06l0.14,0.06l1.92,0.31l0.2,-0.03l1.4,-0.79l0.15,-0.25l0.02,-0.36l2.82,-0.14l1.17,-0.01l-0.41,0.14l-0.14,0.46l0.86,1.19l0.22,0.12l1.93,0.18l1.73,1.13l0.37,1.9l0.31,0.24l1.21,-0.05l0.52,0.32l-1.63,1.21l-0.11,0.17l-0.22,0.92l0.07,0.27l0.63,0.69l-0.31,0.24l-1.48,0.39l-0.22,0.3l0.04,1.03l-0.59,0.6l-0.01,0.41l1.67,1.87l0.23,0.48l-0.72,0.76l-2.71,0.91l-1.78,0.39l-0.13,0.06l-0.6,0.49l-1.84,-0.58l-1.89,-0.33l-0.18,0.03l-0.47,0.23l-0.02,0.53l0.96,0.56l-0.08,1.58l0.35,1.58l0.26,0.23l1.91,0.19l0.02,0.07l-1.54,0.62l-0.18,0.2l-0.25,0.92l-0.88,0.35l-1.85,0.58l-0.16,0.13l-0.4,0.64l-1.66,0.14l-1.22,-1.18l-0.79,-2.52l-0.67,-0.88l-0.66,-0.43l0.99,-0.98l0.09,-0.26l-0.09,-0.56l-0.08,-0.16l-0.66,-0.69l-0.47,-1.54l0.18,-1.67l0.55,-0.85l0.45,-1.35l-0.15,-0.36l-0.89,-0.43l-0.19,-0.02l-1.39,0.28l-1.76,-0.13l-0.92,0.23l-1.64,-2.01l-0.17,-0.1l-1.54,-0.33l-3.05,0.23l-0.5,-0.73l-0.15,-0.12l-0.45,-0.15l-0.05,-0.28l0.28,-0.86l0.01,-0.15l-0.2,-1.01l-0.08,-0.15l-0.5,-0.5l-0.3,-1.08l-0.25,-0.22l-0.89,-0.12l0.54,-1.18l0.29,-1.73l0.66,-0.85l0.94,-0.7l0.09,-0.11l0.3,-0.6Z\", \"name\": \"Venezuela\"}, \"AF\": {\"path\": \"M574.42,192.1l2.24,0.95l0.18,0.02l1.89,-0.38l0.22,-0.18l0.46,-1.14l1.82,-0.4l1.5,-0.91l0.14,-0.19l0.46,-2.12l1.93,-0.51l0.2,-0.18l0.26,-0.68l0.87,0.57l0.13,0.05l0.79,0.09l1.35,0.02l1.83,0.59l0.75,0.34l0.26,-0.01l1.66,-0.85l0.7,0.46l0.42,-0.09l0.72,-1.17l1.32,0.05l0.23,-0.1l0.39,-0.43l0.07,-0.14l0.24,-1.08l0.86,-0.81l0.94,0.46l-0.2,0.64l0.23,0.38l0.49,0.09l-0.21,2.15l0.09,0.25l0.99,0.94l0.38,0.03l0.83,-0.57l1.06,-0.27l0.12,-0.06l1.46,-1.21l1.63,0.2l2.4,0.0l0.17,0.32l-1.12,0.25l-1.23,0.52l-2.86,0.33l-2.69,0.6l-0.13,0.06l-1.46,1.25l-0.07,0.36l0.58,1.18l0.25,1.21l-1.13,1.08l-0.09,0.25l0.09,0.98l-0.53,0.79l-2.22,-0.08l-0.28,0.44l0.83,1.57l-1.3,0.58l-0.13,0.11l-1.06,1.69l-0.05,0.18l0.13,1.51l-0.73,0.58l-0.78,-0.22l-0.14,-0.01l-1.91,0.36l-0.23,0.19l-0.2,0.57l-1.65,-0.0l-0.22,0.1l-1.4,1.56l-0.08,0.19l-0.08,2.13l-2.99,1.05l-1.67,-0.23l-0.27,0.1l-0.39,0.46l-1.43,-0.31l-2.43,0.4l-3.69,-1.23l1.96,-2.15l0.08,-0.24l-0.21,-1.78l-0.23,-0.26l-1.69,-0.42l-0.19,-1.62l-0.77,-2.08l0.98,-1.41l-0.14,-0.45l-0.82,-0.31l0.6,-1.79l0.93,-3.21Z\", \"name\": \"Afghanistan\"}, \"IQ\": {\"path\": \"M534.42,190.89l0.13,0.14l1.5,0.78l0.15,1.34l-1.13,0.87l-0.11,0.16l-0.58,2.2l0.04,0.24l1.73,2.67l0.12,0.1l2.99,1.49l1.18,1.94l-0.39,1.89l0.29,0.36l0.5,-0.0l0.02,1.17l0.08,0.2l0.83,0.86l-2.36,-0.29l-0.29,0.13l-1.74,2.49l-4.4,-0.21l-7.03,-5.49l-3.73,-1.94l-2.92,-0.74l-0.89,-3.0l5.33,-2.81l0.15,-0.19l0.95,-3.43l-0.2,-2.0l1.19,-0.61l0.11,-0.09l1.23,-1.73l0.92,-0.38l2.75,0.35l0.81,0.68l0.31,0.05l0.94,-0.38l1.5,3.17Z\", \"name\": \"Iraq\"}, \"IS\": {\"path\": \"M384.26,87.96l-0.51,2.35l0.08,0.28l2.61,2.58l-2.99,2.83l-7.16,2.72l-2.08,0.7l-9.51,-1.71l1.89,-1.36l-0.07,-0.53l-4.4,-1.59l3.33,-0.59l0.25,-0.32l-0.11,-1.2l-0.25,-0.27l-4.82,-0.88l1.38,-2.2l3.54,-0.57l3.8,2.74l0.33,0.01l3.68,-2.18l3.02,1.12l0.25,-0.02l4.01,-2.18l3.72,0.27Z\", \"name\": \"Iceland\"}, \"IR\": {\"path\": \"M556.2,187.5l2.05,-0.52l0.13,-0.07l1.69,-1.57l1.55,0.08l0.15,-0.03l1.02,-0.5l1.64,0.25l2.82,1.48l1.91,0.3l2.8,2.49l0.18,0.08l1.61,0.09l0.19,2.09l-1.0,3.47l-0.69,2.04l0.18,0.38l0.73,0.28l-0.85,1.22l-0.04,0.28l0.81,2.19l0.19,1.72l0.23,0.26l1.69,0.42l0.17,1.43l-2.18,2.39l-0.01,0.4l1.22,1.42l1.0,1.62l0.12,0.11l2.23,1.11l0.06,2.2l0.2,0.27l1.03,0.38l0.14,0.83l-3.38,1.3l-0.18,0.19l-0.87,2.85l-4.44,-0.76l-2.75,-0.62l-2.64,-0.32l-1.01,-3.11l-0.17,-0.19l-1.2,-0.48l-0.18,-0.01l-1.99,0.51l-2.42,1.25l-2.89,-0.84l-2.48,-2.03l-2.41,-0.79l-1.61,-2.47l-1.84,-3.63l-0.36,-0.15l-1.22,0.4l-1.48,-0.84l-0.37,0.06l-0.72,0.82l-1.08,-1.12l-0.02,-1.35l-0.3,-0.29l-0.43,0.0l0.34,-1.64l-0.04,-0.22l-1.29,-2.11l-0.12,-0.11l-3.0,-1.49l-1.62,-2.49l0.52,-1.98l1.18,-0.92l0.11,-0.27l-0.19,-1.66l-0.16,-0.23l-1.55,-0.81l-1.58,-3.33l-1.3,-2.2l0.41,-0.75l0.03,-0.21l-0.73,-3.12l1.2,-0.59l0.35,0.9l1.26,1.35l0.15,0.09l1.81,0.39l0.91,-0.09l0.15,-0.06l2.9,-2.13l0.7,-0.16l0.48,0.56l-0.75,1.26l0.05,0.37l1.56,1.53l0.28,0.08l0.37,-0.09l0.7,1.89l0.21,0.19l2.31,0.59l1.69,1.4l0.15,0.07l3.66,0.49l3.91,-0.76l0.23,-0.19l0.19,-0.52Z\", \"name\": \"Iran\"}, \"AM\": {\"path\": \"M530.51,176.08l2.91,-0.39l0.41,0.63l0.11,0.1l0.66,0.36l-0.32,0.47l0.07,0.41l1.1,0.84l-0.53,0.7l0.06,0.42l1.06,0.8l1.01,0.44l0.04,1.56l-0.44,0.04l-0.88,-1.46l0.01,-0.37l-0.3,-0.31l-0.98,0.01l-0.65,-0.69l-0.26,-0.09l-0.38,0.06l-0.97,-0.82l-1.64,-0.65l0.2,-1.2l-0.02,-0.16l-0.28,-0.69Z\", \"name\": \"Armenia\"}, \"IT\": {\"path\": \"M451.68,158.58l0.2,0.16l3.3,0.75l-0.22,1.26l0.02,0.18l0.35,0.78l-1.4,-0.32l-0.21,0.03l-2.04,1.1l-0.16,0.29l0.13,1.47l-0.29,0.82l0.02,0.24l0.82,1.57l0.1,0.11l2.28,1.5l1.29,2.53l2.79,2.43l0.2,0.07l1.83,-0.02l0.31,0.34l-0.46,0.39l0.06,0.5l4.06,1.97l2.06,1.49l0.17,0.36l-0.24,0.53l-1.08,-1.07l-0.15,-0.08l-2.18,-0.49l-0.33,0.15l-1.05,1.91l0.11,0.4l1.63,0.98l-0.22,1.12l-0.84,0.14l-0.22,0.15l-1.27,2.38l-0.54,0.12l0.01,-0.47l0.48,-1.46l0.5,-0.58l0.03,-0.35l-0.97,-1.69l-0.76,-1.48l-0.17,-0.15l-0.94,-0.33l-0.68,-1.18l-0.16,-0.13l-1.53,-0.52l-1.03,-1.14l-0.19,-0.1l-1.78,-0.19l-1.88,-1.3l-2.27,-1.94l-1.64,-1.68l-0.76,-2.94l-0.21,-0.21l-1.22,-0.35l-2.01,-1.0l-0.24,-0.01l-1.15,0.42l-0.11,0.07l-1.38,1.36l-0.5,0.11l0.19,-0.87l-0.21,-0.35l-1.19,-0.34l-0.56,-2.06l0.76,-0.82l0.03,-0.36l-0.68,-1.08l0.04,-0.31l0.68,0.42l0.19,0.04l1.21,-0.15l0.14,-0.06l1.18,-0.89l0.25,0.29l0.25,0.1l1.19,-0.1l0.25,-0.18l0.45,-1.04l1.61,0.34l0.19,-0.02l1.1,-0.53l0.17,-0.22l0.15,-0.95l1.19,0.35l0.35,-0.16l0.23,-0.47l2.11,-0.47l0.45,0.89ZM459.35,184.63l-0.71,1.81l0.0,0.23l0.33,0.79l-0.37,1.03l-1.6,-0.91l-1.33,-0.34l-3.24,-1.36l0.23,-0.99l2.73,0.24l3.95,-0.5ZM443.95,175.91l1.26,1.77l-0.31,3.47l-0.82,-0.13l-0.26,0.08l-0.83,0.79l-0.64,-0.52l-0.1,-3.42l-0.44,-1.34l0.91,0.1l0.21,-0.06l1.01,-0.74Z\", \"name\": \"Italy\"}, \"VN\": {\"path\": \"M690.8,230.21l-2.86,1.93l-2.09,2.46l-0.06,0.11l-0.55,1.8l0.04,0.26l4.26,6.1l2.31,1.63l1.46,1.97l1.12,4.62l-0.32,4.3l-1.97,1.57l-2.85,1.62l-2.09,2.14l-2.83,2.13l-0.67,-1.19l0.65,-1.58l-0.09,-0.35l-1.47,-1.14l1.67,-0.79l2.57,-0.18l0.22,-0.47l-0.89,-1.24l3.88,-1.8l0.17,-0.24l0.31,-3.05l-0.01,-0.13l-0.56,-1.63l0.44,-2.48l-0.01,-0.15l-0.63,-1.81l-0.08,-0.12l-1.87,-1.77l-3.64,-5.3l-0.11,-0.1l-2.68,-1.39l0.45,-0.59l1.53,-0.65l0.16,-0.39l-0.97,-2.27l-0.27,-0.18l-2.89,-0.02l-1.04,-2.21l-1.28,-1.83l0.96,-0.46l1.97,0.01l2.43,-0.3l0.13,-0.05l1.95,-1.29l1.04,0.85l0.13,0.06l1.98,0.42l-0.32,1.21l0.09,0.3l1.19,1.07l0.12,0.07l1.88,0.51Z\", \"name\": \"Vietnam\"}, \"AR\": {\"path\": \"M258.11,341.34l1.4,1.81l0.51,-0.06l0.89,-1.94l2.51,0.1l0.36,0.49l4.6,4.31l0.15,0.08l1.99,0.39l3.01,1.93l2.5,1.01l0.28,0.91l-2.4,3.97l0.17,0.44l2.57,0.74l2.81,0.41l2.09,-0.44l0.14,-0.07l2.27,-2.06l0.09,-0.17l0.38,-2.2l0.88,-0.36l1.05,1.29l-0.04,1.88l-1.98,1.4l-1.72,1.13l-2.84,2.65l-3.34,3.73l-0.07,0.12l-0.63,2.22l-0.67,2.85l0.02,2.73l-0.47,0.54l-0.07,0.17l-0.36,3.28l0.12,0.27l3.03,2.32l-0.31,1.78l0.11,0.29l1.44,1.15l-0.11,1.17l-2.32,3.57l-3.59,1.51l-4.95,0.6l-2.72,-0.29l-0.32,0.38l0.5,1.67l-0.49,2.13l0.01,0.16l0.4,1.29l-1.27,0.88l-2.41,0.39l-2.33,-1.05l-0.31,0.04l-0.97,0.78l-0.11,0.27l0.35,2.98l0.16,0.23l1.69,0.91l0.31,-0.02l1.08,-0.75l0.46,0.96l-2.1,0.88l-2.01,1.89l-0.09,0.18l-0.36,3.05l-0.51,1.42l-2.16,0.01l-0.19,0.07l-1.96,1.59l-0.1,0.15l-0.72,2.34l0.08,0.31l2.46,2.31l0.13,0.07l2.09,0.56l-0.74,2.45l-2.86,1.75l-0.12,0.14l-1.59,3.71l-2.2,1.24l-0.1,0.09l-1.03,1.54l-0.04,0.23l0.81,3.45l0.06,0.13l1.13,1.32l-2.59,-0.57l-5.89,-0.44l-0.92,-1.73l0.05,-2.4l-0.34,-0.3l-1.49,0.19l-0.72,-0.98l-0.2,-3.21l1.79,-1.33l0.1,-0.13l0.79,-2.04l0.02,-0.16l-0.27,-1.52l1.31,-2.69l0.91,-4.15l-0.23,-1.72l0.91,-0.49l0.15,-0.33l-0.27,-1.16l-0.15,-0.2l-0.87,-0.46l0.65,-1.01l-0.04,-0.37l-1.06,-1.09l-0.54,-3.2l0.83,-0.51l0.14,-0.29l-0.42,-3.6l0.58,-2.98l0.64,-2.5l1.41,-1.0l0.12,-0.32l-0.75,-2.8l-0.01,-2.48l1.81,-1.78l0.09,-0.22l-0.06,-2.3l1.39,-2.69l0.03,-0.14l0.01,-2.58l-0.11,-0.24l-0.57,-0.45l-1.1,-4.59l1.49,-2.73l0.04,-0.17l-0.23,-2.59l0.86,-2.38l1.6,-2.48l1.74,-1.65l0.04,-0.39l-0.64,-0.89l0.42,-0.7l0.04,-0.16l-0.08,-4.26l2.55,-1.23l0.16,-0.18l0.86,-2.75l-0.01,-0.22l-0.22,-0.48l1.84,-2.1l3.0,0.59ZM256.77,438.98l-2.1,0.15l-1.18,-1.14l-0.19,-0.08l-1.53,-0.09l-2.38,-0.0l-0.0,-6.28l0.4,0.65l1.25,2.55l0.11,0.12l3.26,2.07l3.19,0.8l-0.82,1.26Z\", \"name\": \"Argentina\"}, \"AU\": {\"path\": \"M705.55,353.06l0.09,0.09l0.37,0.05l0.13,-0.35l-0.57,-1.69l0.48,0.3l0.71,0.99l0.34,0.11l0.2,-0.29l-0.04,-1.37l-0.04,-0.14l-1.22,-2.07l-0.28,-0.9l-0.51,-0.69l0.24,-1.33l0.52,-0.7l0.34,-1.32l0.01,-0.13l-0.25,-1.44l0.51,-0.94l0.1,1.03l0.23,0.26l0.32,-0.14l1.01,-1.72l1.94,-0.84l1.27,-1.14l1.84,-0.92l1.0,-0.18l0.6,0.28l0.26,-0.0l1.94,-0.96l1.48,-0.28l0.19,-0.13l0.32,-0.49l0.51,-0.18l1.42,0.05l2.63,-0.76l0.11,-0.06l1.36,-1.15l0.08,-0.1l0.61,-1.33l1.42,-1.27l0.1,-0.19l0.11,-1.03l0.06,-1.32l1.39,-1.74l0.85,1.79l0.4,0.14l1.07,-0.51l0.11,-0.45l-0.77,-1.05l0.53,-0.84l0.86,0.43l0.43,-0.22l0.29,-1.85l1.29,-1.19l0.6,-0.98l1.16,-0.4l0.2,-0.27l0.02,-0.34l0.74,0.2l0.38,-0.27l0.03,-0.44l1.98,-0.61l1.7,1.08l1.36,1.48l0.22,0.1l1.55,0.02l1.57,0.24l0.33,-0.4l-0.48,-1.27l1.09,-1.86l1.06,-0.63l0.1,-0.42l-0.28,-0.46l0.93,-1.24l1.36,-0.8l1.16,0.27l0.14,0.0l2.1,-0.48l0.23,-0.3l-0.05,-1.3l-0.18,-0.26l-1.08,-0.49l0.44,-0.12l1.52,0.58l1.39,1.06l2.11,0.65l0.19,-0.0l0.59,-0.21l1.44,0.72l0.27,0.0l1.37,-0.68l0.84,0.2l0.26,-0.06l0.37,-0.3l0.82,0.89l-0.56,1.14l-0.84,0.91l-0.75,0.07l-0.26,0.38l0.26,0.9l-0.67,1.15l-0.88,1.24l-0.05,0.25l0.18,0.72l0.12,0.17l1.99,1.42l1.96,0.84l1.25,0.86l1.8,1.51l0.19,0.07l0.63,-0.0l1.15,0.58l0.34,0.7l0.17,0.15l2.39,0.88l0.24,-0.02l1.65,-0.88l0.14,-0.16l0.49,-1.37l0.52,-1.19l0.31,-1.39l0.75,-2.02l0.01,-0.19l-0.33,-1.16l0.16,-0.67l0.0,-0.13l-0.28,-1.41l0.3,-1.78l0.42,-0.45l0.05,-0.33l-0.33,-0.73l0.56,-1.25l0.48,-1.39l0.07,-0.69l0.58,-0.59l0.48,0.84l0.17,1.53l0.17,0.24l0.47,0.23l0.09,0.9l0.05,0.14l0.87,1.23l0.17,1.33l-0.09,0.89l0.03,0.15l0.9,2.0l0.43,0.13l1.38,-0.83l0.71,0.92l1.06,0.88l-0.22,0.96l0.0,0.14l0.53,2.2l0.38,1.3l0.15,0.18l0.52,0.26l0.62,2.01l-0.23,1.27l0.02,0.18l0.81,1.76l0.14,0.14l2.69,1.35l3.21,2.21l-0.2,0.4l0.04,0.34l1.39,1.6l0.95,2.78l0.43,0.16l0.79,-0.46l0.85,0.96l0.39,0.05l0.22,-0.15l0.36,2.33l0.09,0.18l1.78,1.63l1.16,1.01l1.9,2.1l0.67,2.05l0.06,1.47l-0.17,1.64l0.03,0.17l1.16,2.22l-0.14,2.28l-0.43,1.24l-0.68,2.44l0.04,1.63l-0.48,1.92l-1.06,2.43l-1.79,1.32l-0.1,0.12l-0.91,2.15l-0.82,1.37l-0.76,2.47l-0.98,1.46l-0.63,2.14l-0.33,2.02l0.1,0.82l-1.21,0.85l-2.71,0.1l-0.13,0.03l-2.31,1.19l-1.21,1.17l-1.34,1.11l-1.89,-1.18l-1.33,-0.46l0.32,-1.24l-0.4,-0.35l-1.46,0.61l-2.06,1.98l-1.99,-0.73l-1.43,-0.46l-1.45,-0.22l-2.32,-0.81l-1.51,-1.67l-0.45,-2.11l-0.6,-1.5l-0.07,-0.11l-1.23,-1.16l-0.16,-0.08l-1.96,-0.28l0.59,-0.99l0.03,-0.24l-0.61,-2.1l-0.54,-0.08l-1.16,1.85l-1.23,0.29l0.73,-0.88l0.06,-0.12l0.37,-1.57l0.93,-1.33l0.05,-0.2l-0.2,-2.07l-0.53,-0.17l-2.01,2.35l-1.52,0.94l-0.12,0.14l-0.82,1.93l-1.5,-0.9l0.07,-1.32l-0.06,-0.2l-1.57,-2.04l-1.15,-0.92l0.3,-0.41l-0.1,-0.44l-3.21,-1.69l-0.13,-0.03l-1.69,-0.08l-2.35,-1.31l-0.16,-0.04l-4.55,0.27l-3.24,0.99l-2.8,0.91l-2.33,-0.18l-0.17,0.03l-2.63,1.41l-2.14,0.64l-0.2,0.19l-0.47,1.42l-0.8,0.99l-1.99,0.06l-1.55,0.24l-2.27,-0.5l-1.79,0.3l-1.71,0.13l-0.19,0.09l-1.38,1.39l-0.58,-0.1l-0.21,0.04l-1.26,0.8l-1.13,0.85l-1.72,-0.1l-1.6,-0.0l-2.58,-1.76l-1.21,-0.49l0.04,-1.19l1.04,-0.32l0.16,-0.12l0.42,-0.64l0.05,-0.19l-0.09,-0.97l0.3,-2.0l-0.28,-1.64l-1.34,-2.84l-0.39,-1.49l0.1,-1.51l-0.04,-0.17l-0.96,-1.72l-0.06,-0.73l-0.09,-0.19l-1.04,-1.01l-0.3,-2.02l-0.05,-0.12l-1.23,-1.83ZM784.95,393.35l2.39,1.01l0.2,0.01l3.26,-0.96l1.19,0.16l0.16,3.19l-0.78,0.95l-0.07,0.16l-0.19,1.83l-0.43,-0.41l-0.44,0.03l-1.61,1.96l-0.4,-0.12l-1.38,-0.09l-1.43,-2.42l-0.37,-2.03l-1.4,-2.53l0.04,-0.94l1.27,0.2Z\", \"name\": \"Australia\"}, \"IL\": {\"path\": \"M509.04,199.22l0.71,0.0l0.27,-0.17l0.15,-0.33l0.19,-0.01l0.02,0.73l-0.27,0.34l0.02,0.08l-0.32,0.62l-0.65,-0.27l-0.41,0.19l-0.52,1.85l0.16,0.35l0.14,0.07l-0.17,0.1l-0.14,0.21l-0.11,0.73l0.39,0.33l0.81,-0.26l0.03,0.64l-0.97,3.43l-1.28,-3.67l0.62,-0.78l-0.03,-0.41l0.58,-1.16l0.5,-2.07l0.27,-0.54Z\", \"name\": \"Israel\"}, \"IN\": {\"path\": \"M615.84,192.58l2.4,2.97l-0.24,2.17l0.05,0.2l0.94,1.35l-0.06,0.97l-1.46,-0.3l-0.35,0.36l0.7,3.06l0.12,0.18l2.46,1.75l3.11,1.72l-1.23,0.96l-0.1,0.13l-0.97,2.55l0.16,0.38l2.41,1.02l2.37,1.33l3.27,1.52l3.43,0.37l1.37,1.3l0.17,0.08l1.92,0.25l3.0,0.62l2.15,-0.04l0.28,-0.22l0.29,-1.06l0.0,-0.13l-0.32,-1.66l0.16,-0.94l1.0,-0.37l0.23,2.28l0.18,0.24l2.28,1.02l0.2,0.02l1.52,-0.41l2.06,0.18l2.08,-0.08l0.29,-0.27l0.18,-1.66l-0.1,-0.26l-0.53,-0.44l1.38,-0.23l0.15,-0.07l2.26,-2.0l2.75,-1.65l1.97,0.63l0.25,-0.03l1.54,-0.99l0.89,1.28l-0.72,0.97l0.2,0.48l2.49,0.37l0.11,0.61l-0.69,0.39l-0.15,0.3l0.15,1.22l-1.36,-0.37l-0.23,0.03l-3.24,1.86l-0.15,0.28l0.07,1.44l-1.33,2.16l-0.04,0.13l-0.12,1.24l-0.98,1.91l-1.72,-0.53l-0.39,0.28l-0.09,2.66l-0.52,0.83l-0.04,0.23l0.21,0.89l-0.71,0.36l-1.21,-3.85l-0.29,-0.21l-0.69,0.01l-0.29,0.23l-0.28,1.17l-0.84,-0.84l0.6,-1.17l0.97,-0.13l0.23,-0.16l1.15,-2.25l-0.18,-0.42l-1.54,-0.47l-2.3,0.04l-2.13,-0.33l-0.19,-1.63l-0.26,-0.26l-1.13,-0.13l-1.93,-1.13l-0.42,0.13l-0.88,1.82l0.08,0.37l1.47,1.15l-1.21,0.77l-0.1,0.1l-0.56,0.97l0.13,0.42l1.31,0.61l-0.36,1.35l0.01,0.2l0.85,1.95l0.37,2.05l-0.26,0.68l-1.55,-0.02l-3.09,0.54l-0.25,0.32l0.13,1.84l-1.21,1.4l-3.64,1.79l-2.79,3.04l-1.86,1.61l-2.48,1.68l-0.13,0.25l-0.0,1.0l-1.07,0.55l-2.21,0.9l-1.13,0.13l-0.25,0.19l-0.75,1.96l-0.02,0.15l0.52,3.31l0.13,2.03l-1.03,2.35l-0.03,0.12l-0.01,4.03l-1.02,0.1l-0.23,0.15l-1.14,1.93l0.04,0.36l0.44,0.48l-1.83,0.57l-0.18,0.15l-0.81,1.65l-0.74,0.53l-2.14,-2.12l-1.14,-3.47l-0.96,-2.57l-0.9,-1.26l-1.3,-2.38l-0.61,-3.14l-0.44,-1.62l-2.29,-3.56l-1.03,-4.94l-0.74,-3.29l0.01,-3.12l-0.49,-2.51l-0.41,-0.22l-3.56,1.53l-1.59,-0.28l-2.96,-2.87l0.94,-0.74l0.06,-0.41l-0.74,-1.03l-2.73,-2.1l1.35,-1.43l5.38,0.01l0.29,-0.36l-0.5,-2.29l-0.09,-0.15l-1.33,-1.28l-0.27,-1.96l-0.12,-0.2l-1.36,-1.0l2.42,-2.48l2.77,0.2l0.24,-0.1l2.62,-2.85l1.59,-2.8l2.41,-2.74l0.07,-0.2l-0.04,-1.82l2.01,-1.51l-0.01,-0.49l-1.95,-1.33l-0.83,-1.81l-0.82,-2.27l0.98,-0.97l3.64,0.66l2.89,-0.42l0.17,-0.08l2.18,-2.15Z\", \"name\": \"India\"}, \"TZ\": {\"path\": \"M505.77,287.58l0.36,0.23l8.95,5.03l0.15,1.3l0.13,0.21l3.4,2.37l-1.07,2.88l-0.02,0.14l0.15,1.42l0.15,0.23l1.47,0.84l0.05,0.42l-0.66,1.44l-0.02,0.18l0.13,0.72l-0.16,1.16l0.03,0.19l0.87,1.57l1.03,2.48l0.12,0.14l0.53,0.32l-1.59,1.18l-2.64,0.95l-1.45,-0.04l-0.2,0.07l-0.81,0.69l-1.64,0.06l-0.68,0.3l-2.9,-0.69l-1.71,0.17l-0.65,-3.18l-0.05,-0.12l-1.35,-1.88l-0.19,-0.12l-2.41,-0.46l-1.38,-0.74l-1.63,-0.44l-0.96,-0.41l-0.95,-0.58l-1.31,-3.09l-1.47,-1.46l-0.45,-1.31l0.24,-1.34l-0.39,-1.99l0.71,-0.08l0.18,-0.09l0.91,-0.91l0.98,-1.31l0.59,-0.5l0.11,-0.24l-0.02,-0.81l-0.08,-0.2l-0.47,-0.5l-0.1,-0.67l0.51,-0.23l0.18,-0.25l0.14,-1.47l-0.05,-0.2l-0.76,-1.09l0.45,-0.15l2.71,0.03l5.01,-0.19Z\", \"name\": \"Tanzania\"}, \"AZ\": {\"path\": \"M539.36,175.66l0.16,0.09l1.11,0.2l0.32,-0.15l0.4,-0.71l1.22,-0.99l1.11,1.33l1.26,2.09l0.22,0.14l1.06,0.13l0.28,0.29l-1.46,0.17l-0.26,0.24l-0.43,2.26l-0.39,0.92l-0.85,0.63l-0.12,0.25l0.06,1.2l-0.22,0.05l-1.28,-1.25l0.74,-1.25l-0.03,-0.35l-0.74,-0.86l-0.3,-0.1l-1.05,0.27l-2.49,1.82l-0.04,-1.46l-0.18,-0.27l-1.09,-0.47l-0.8,-0.6l0.53,-0.7l-0.06,-0.42l-1.11,-0.84l0.34,-0.51l-0.11,-0.43l-0.89,-0.48l-0.33,-0.49l0.25,-0.2l1.78,0.81l1.35,0.18l0.25,-0.09l0.34,-0.35l0.02,-0.39l-1.04,-1.36l0.28,-0.18l0.49,0.07l1.65,1.74ZM533.53,180.16l0.63,0.67l0.22,0.09l0.8,-0.0l0.04,0.31l0.66,1.09l-0.94,-0.21l-1.16,-1.24l-0.25,-0.71Z\", \"name\": \"Azerbaijan\"}, \"IE\": {\"path\": \"M405.17,135.35l0.36,2.16l-1.78,2.84l-4.28,1.91l-3.02,-0.43l1.81,-3.13l0.02,-0.26l-1.23,-3.26l3.24,-2.56l1.54,-1.32l0.37,1.33l-0.49,1.77l0.3,0.38l1.49,-0.05l1.68,0.63Z\", \"name\": \"Ireland\"}, \"ID\": {\"path\": \"M756.56,287.86l0.69,4.02l0.15,0.21l2.59,1.5l0.39,-0.07l2.05,-2.61l2.75,-1.45l2.09,-0.0l2.08,0.85l1.85,0.89l2.52,0.46l0.08,15.44l-1.72,-1.6l-0.15,-0.07l-2.54,-0.51l-0.29,0.1l-0.53,0.62l-2.53,0.06l0.78,-1.51l1.48,-0.66l0.17,-0.34l-0.65,-2.74l-1.23,-2.19l-0.14,-0.13l-4.85,-2.13l-2.09,-0.23l-3.7,-2.28l-0.41,0.1l-0.67,1.11l-0.63,0.14l-0.41,-0.67l-0.01,-1.01l-0.14,-0.25l-1.39,-0.89l2.05,-0.69l1.73,0.05l0.29,-0.39l-0.21,-0.66l-0.29,-0.21l-3.5,-0.0l-0.9,-1.36l-0.19,-0.13l-2.14,-0.44l-0.65,-0.76l2.86,-0.51l1.28,-0.79l3.75,0.96l0.32,0.76ZM758.01,300.37l-0.79,1.04l-0.14,-1.07l0.4,-0.81l0.29,-0.47l0.24,0.31l-0.0,1.0ZM747.45,292.9l0.48,1.02l-1.45,-0.69l-2.09,-0.21l-1.45,0.16l-1.28,-0.07l0.35,-0.81l2.86,-0.1l2.58,0.68ZM741.15,285.69l-0.16,-0.25l-0.72,-3.08l0.47,-1.86l0.35,-0.38l0.1,0.73l0.25,0.26l1.28,0.19l0.18,0.78l-0.11,1.8l-0.96,-0.18l-0.35,0.22l-0.38,1.52l0.05,0.24ZM741.19,285.75l0.76,0.97l-0.11,0.05l-0.65,-1.02ZM739.18,293.52l-0.61,0.54l-1.44,-0.38l-0.25,-0.55l1.93,-0.09l0.36,0.48ZM728.4,295.87l-0.27,-0.07l-2.26,0.89l-0.37,-0.41l0.27,-0.8l-0.09,-0.33l-1.68,-1.37l0.17,-2.29l-0.42,-0.3l-1.67,0.76l-0.17,0.29l0.21,2.92l0.09,3.34l-1.22,0.28l-0.78,-0.54l0.65,-2.1l0.01,-0.14l-0.39,-2.42l-0.29,-0.25l-0.86,-0.02l-0.63,-1.4l0.99,-1.61l0.35,-1.97l1.24,-3.73l0.49,-0.96l1.95,-1.7l1.86,0.69l3.16,0.35l2.92,-0.1l0.17,-0.06l2.24,-1.65l0.11,0.14l-1.8,2.22l-1.72,0.44l-2.41,-0.48l-4.21,0.13l-2.19,0.36l-0.25,0.24l-0.36,1.9l0.08,0.27l2.24,2.23l0.4,0.02l1.29,-1.08l3.19,-0.58l-0.19,0.06l-1.04,1.4l-2.13,0.94l-0.12,0.45l2.26,3.06l-0.37,0.69l0.03,0.32l1.51,1.95ZM728.48,295.97l0.59,0.76l-0.02,1.37l-1.0,0.55l-0.64,-0.58l1.09,-1.84l-0.02,-0.26ZM728.64,286.95l0.79,-0.14l-0.07,0.39l-0.72,-0.24ZM732.38,310.1l-1.89,0.49l-0.06,-0.06l0.17,-0.64l1.0,-1.42l2.14,-0.87l0.1,0.2l0.04,0.58l-1.49,1.72ZM728.26,305.71l-0.17,0.63l-3.53,0.67l-3.02,-0.28l-0.0,-0.42l1.66,-0.44l1.47,0.71l0.16,0.03l1.75,-0.21l1.69,-0.69ZM722.98,310.33l-0.74,0.03l-2.52,-1.35l1.42,-0.3l1.19,0.7l0.72,0.63l-0.06,0.28ZM716.24,305.63l0.66,0.49l0.22,0.06l1.35,-0.18l0.31,0.53l-4.18,0.77l-0.8,-0.01l0.51,-0.86l1.2,-0.02l0.24,-0.12l0.49,-0.65ZM715.84,280.21l0.09,0.34l2.25,1.86l-2.25,0.22l-0.24,0.17l-0.84,1.71l-0.03,0.15l0.1,2.11l-2.27,1.62l-0.13,0.24l-0.06,2.46l-0.74,2.92l-0.02,-0.05l-0.39,-0.16l-2.62,1.04l-0.86,-1.33l-0.23,-0.14l-1.71,-0.14l-1.19,-0.76l-0.25,-0.03l-2.78,0.84l-0.79,-1.05l-0.26,-0.12l-1.61,0.13l-1.8,-0.25l-0.36,-3.13l-0.15,-0.23l-1.18,-0.65l-1.13,-2.02l-0.33,-2.1l0.27,-2.19l1.05,-1.17l0.28,1.12l0.1,0.16l1.71,1.41l0.28,0.05l1.55,-0.49l1.54,0.17l0.23,-0.07l1.4,-1.21l1.05,-0.19l2.3,0.68l0.16,0.0l2.04,-0.53l0.21,-0.19l1.26,-3.41l0.91,-0.82l0.09,-0.14l0.8,-2.64l2.63,0.0l1.71,0.33l-1.19,1.89l0.02,0.34l1.74,2.24l-0.37,1.0ZM692.67,302.0l0.26,0.19l4.8,0.25l0.28,-0.16l0.44,-0.83l4.29,1.12l0.85,1.52l0.23,0.15l3.71,0.45l2.37,1.15l-2.06,0.69l-2.77,-1.0l-2.25,0.07l-2.57,-0.18l-2.31,-0.45l-2.94,-0.97l-1.84,-0.25l-0.13,0.01l-0.97,0.29l-4.34,-0.98l-0.38,-0.94l-0.25,-0.19l-1.76,-0.14l1.31,-1.84l2.81,0.14l1.97,0.96l0.95,0.19l0.28,0.74ZM685.63,299.27l-2.36,0.04l-2.07,-2.05l-3.17,-2.02l-1.06,-1.5l-1.88,-2.02l-1.22,-1.85l-1.9,-3.49l-2.2,-2.11l-0.71,-2.08l-0.94,-1.99l-0.1,-0.12l-2.21,-1.54l-1.35,-2.17l-1.86,-1.39l-2.53,-2.68l-0.14,-0.81l1.22,0.08l3.76,0.47l2.16,2.4l1.94,1.7l1.37,1.04l2.35,2.67l0.22,0.1l2.44,0.04l1.99,1.62l1.42,2.06l0.09,0.09l1.67,1.0l-0.88,1.8l0.11,0.39l1.44,0.87l0.13,0.04l0.68,0.05l0.41,1.62l0.87,1.4l0.22,0.14l1.71,0.21l1.06,1.38l-0.61,3.04l-0.09,3.6Z\", \"name\": \"Indonesia\"}, \"UA\": {\"path\": \"M500.54,141.42l0.9,0.13l0.27,-0.11l0.52,-0.62l0.68,0.13l2.43,-0.3l1.32,1.57l-0.45,0.48l-0.07,0.26l0.21,1.03l0.27,0.24l1.85,0.15l0.76,1.22l-0.05,0.55l0.2,0.31l3.18,1.15l0.18,0.01l1.75,-0.47l1.42,1.41l0.22,0.09l1.42,-0.03l3.44,0.99l0.02,0.65l-0.97,1.62l-0.03,0.24l0.52,1.67l-0.29,0.79l-2.24,0.22l-0.14,0.05l-1.29,0.89l-0.13,0.23l-0.07,1.16l-1.75,0.22l-0.12,0.04l-1.6,0.98l-2.27,0.16l-0.12,0.04l-2.16,1.17l-0.16,0.29l0.15,1.94l0.14,0.23l1.23,0.75l0.18,0.04l2.06,-0.15l-0.22,0.51l-2.67,0.54l-3.27,1.72l-1.0,-0.45l0.45,-1.19l-0.19,-0.39l-2.34,-0.78l0.15,-0.2l2.32,-1.0l0.09,-0.49l-0.73,-0.72l-0.15,-0.08l-3.69,-0.75l-0.14,-0.96l-0.35,-0.25l-2.32,0.39l-0.21,0.15l-0.91,1.7l-1.77,2.1l-0.93,-0.44l-0.24,-0.0l-1.05,0.45l-0.48,-0.25l0.13,-0.07l0.14,-0.15l0.43,-1.04l0.67,-0.97l0.04,-0.26l-0.1,-0.31l0.04,-0.02l0.11,0.19l0.24,0.15l1.48,0.09l0.78,-0.25l0.07,-0.53l-0.27,-0.19l0.09,-0.25l-0.08,-0.33l-0.81,-0.74l-0.34,-1.24l-0.14,-0.18l-0.73,-0.42l0.15,-0.87l-0.11,-0.29l-1.13,-0.86l-0.15,-0.06l-0.97,-0.11l-1.79,-0.97l-0.2,-0.03l-1.66,0.32l-0.13,0.06l-0.52,0.41l-0.95,-0.0l-0.23,0.11l-0.56,0.66l-1.74,0.29l-0.79,0.43l-1.01,-0.68l-0.16,-0.05l-1.57,-0.01l-1.52,-0.35l-0.23,0.04l-0.71,0.45l-0.09,-0.43l-0.13,-0.19l-1.18,-0.74l0.38,-1.02l0.53,-0.64l0.35,0.12l0.37,-0.41l-0.57,-1.29l2.1,-2.5l1.16,-0.36l0.2,-0.2l0.27,-0.92l-0.01,-0.2l-1.1,-2.52l0.79,-0.09l0.13,-0.05l1.3,-0.86l1.83,-0.07l2.48,0.26l2.84,0.8l1.91,0.06l0.88,0.45l0.29,-0.01l0.72,-0.44l0.49,0.58l0.25,0.11l2.2,-0.16l0.94,0.3l0.39,-0.26l0.15,-1.57l0.61,-0.59l2.01,-0.19Z\", \"name\": \"Ukraine\"}, \"QA\": {\"path\": \"M548.47,221.47l-0.15,-1.72l0.59,-1.23l0.38,-0.16l0.54,0.6l0.04,1.4l-0.47,1.37l-0.41,0.11l-0.53,-0.37Z\", \"name\": \"Qatar\"}, \"MZ\": {\"path\": \"M507.71,314.14l1.65,-0.18l2.96,0.7l0.2,-0.02l0.6,-0.29l1.68,-0.06l0.18,-0.07l0.8,-0.69l1.5,0.02l2.74,-0.98l1.74,-1.27l0.25,0.7l-0.1,2.47l0.31,2.27l0.1,3.97l0.42,1.24l-0.7,1.71l-0.94,1.73l-1.52,1.52l-5.06,2.21l-2.88,2.8l-1.01,0.51l-1.72,1.81l-0.99,0.58l-0.15,0.23l-0.21,1.86l0.04,0.19l1.17,1.95l0.47,1.47l0.03,0.74l0.39,0.28l0.05,-0.01l-0.06,2.13l-0.39,1.19l0.1,0.33l0.42,0.32l-0.28,0.83l-0.95,0.86l-2.03,0.88l-3.08,1.49l-1.1,0.99l-0.09,0.28l0.21,1.13l0.21,0.23l0.38,0.11l-0.14,0.89l-1.39,-0.02l-0.17,-0.94l-0.38,-1.23l-0.2,-0.89l0.44,-2.91l-0.01,-0.14l-0.65,-1.88l-1.15,-3.55l2.52,-2.85l0.68,-1.89l0.29,-0.18l0.14,-0.2l0.28,-1.53l-0.03,-0.19l-0.36,-0.7l0.1,-1.83l0.49,-1.84l-0.01,-3.26l-0.14,-0.25l-1.3,-0.83l-0.11,-0.04l-1.08,-0.17l-0.47,-0.55l-0.1,-0.08l-1.16,-0.54l-0.13,-0.03l-1.83,0.04l-0.32,-2.25l7.19,-1.99l1.32,1.12l0.29,0.06l0.55,-0.19l0.75,0.49l0.11,0.81l-0.49,1.11l-0.02,0.15l0.19,1.81l0.09,0.18l1.63,1.59l0.48,-0.1l0.72,-1.68l0.99,-0.49l0.17,-0.29l-0.21,-3.29l-0.04,-0.13l-1.11,-1.92l-0.9,-0.82l-0.21,-0.08l-0.62,0.03l-0.63,-2.98l0.61,-1.67Z\", \"name\": \"Mozambique\"}}, \"height\": 440.7063107441331, \"projection\": {\"type\": \"mill\", \"centralMeridian\": 11.5}, \"width\": 900.0});\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/extend/layer.ext.js",
    "content": "﻿/*! layer弹层组件拓展类 */\n;!function(){layer.use(\"skin/layer.ext.css\",function(){layer.layui_layer_extendlayerextjs=!0});var a=layer.cache||{},b=function(b){return a.skin?\" \"+a.skin+\" \"+a.skin+\"-\"+b:\"\"};layer.prompt=function(a,c){a=a||{},\"function\"==typeof a&&(c=a);var d,e=2==a.formType?'<textarea class=\"layui-layer-input\">'+(a.value||\"\")+\"</textarea>\":function(){return'<input type=\"'+(1==a.formType?\"password\":\"text\")+'\" class=\"layui-layer-input\" value=\"'+(a.value||\"\")+'\">'}();return layer.open($.extend({btn:[\"&#x786E;&#x5B9A;\",\"&#x53D6;&#x6D88;\"],content:e,skin:\"layui-layer-prompt\"+b(\"prompt\"),success:function(a){d=a.find(\".layui-layer-input\"),d.focus()},yes:function(b){var e=d.val();\"\"===e?d.focus():e.length>(a.maxlength||500)?layer.tips(\"&#x6700;&#x591A;&#x8F93;&#x5165;\"+(a.maxlength||500)+\"&#x4E2A;&#x5B57;&#x6570;\",d,{tips:1}):c&&c(e,b,d)}},a))},layer.tab=function(a){a=a||{};var c=a.tab||{};return layer.open($.extend({type:1,skin:\"layui-layer-tab\"+b(\"tab\"),title:function(){var a=c.length,b=1,d=\"\";if(a>0)for(d='<span class=\"layui-layer-tabnow\">'+c[0].title+\"</span>\";a>b;b++)d+=\"<span>\"+c[b].title+\"</span>\";return d}(),content:'<ul class=\"layui-layer-tabmain\">'+function(){var a=c.length,b=1,d=\"\";if(a>0)for(d='<li class=\"layui-layer-tabli xubox_tab_layer\">'+(c[0].content||\"no content\")+\"</li>\";a>b;b++)d+='<li class=\"layui-layer-tabli\">'+(c[b].content||\"no  content\")+\"</li>\";return d}()+\"</ul>\",success:function(a){var b=a.find(\".layui-layer-title\").children(),c=a.find(\".layui-layer-tabmain\").children();b.on(\"mousedown\",function(a){a.stopPropagation?a.stopPropagation():a.cancelBubble=!0;var b=$(this),d=b.index();b.addClass(\"layui-layer-tabnow\").siblings().removeClass(\"layui-layer-tabnow\"),c.eq(d).show().siblings().hide()})}},a))},layer.photos=function(a,c,d){function e(a,b,c){var d=new Image;d.onload=function(){d.onload=null,b(d)},d.onerror=function(a){d.onerror=null,c(a)},d.src=a}var f={};if(a=a||{},a.photos){var g=a.photos.constructor===Object,h=g?a.photos:{},i=h.data||[],j=h.start||0;if(f.imgIndex=j+1,g){if(0===i.length)return void layer.msg(\"&#x6CA1;&#x6709;&#x56FE;&#x7247;\")}else{var k=$(a.photos),l=k.find(a.img||\"img\");if(0===l.length)return;if(c||k.find(h.img||\"img\").each(function(b){var c=$(this);i.push({alt:c.attr(\"alt\"),pid:c.attr(\"layer-pid\"),src:c.attr(\"layer-src\")||c.attr(\"src\"),thumb:c.attr(\"src\")}),c.on(\"click\",function(){layer.photos($.extend(a,{photos:{start:b,data:i,tab:a.tab},full:a.full}),!0)})}),!c)return}f.imgprev=function(a){f.imgIndex--,f.imgIndex<1&&(f.imgIndex=i.length),f.tabimg(a)},f.imgnext=function(a,b){f.imgIndex++,f.imgIndex>i.length&&(f.imgIndex=1,b)||f.tabimg(a)},f.keyup=function(a){if(!f.end){var b=a.keyCode;a.preventDefault(),37===b?f.imgprev(!0):39===b?f.imgnext(!0):27===b&&layer.close(f.index)}},f.tabimg=function(b){i.length<=1||(h.start=f.imgIndex-1,layer.close(f.index),layer.photos(a,!0,b))},f.event=function(){f.bigimg.hover(function(){f.imgsee.show()},function(){f.imgsee.hide()}),f.bigimg.find(\".layui-layer-imgprev\").on(\"click\",function(a){a.preventDefault(),f.imgprev()}),f.bigimg.find(\".layui-layer-imgnext\").on(\"click\",function(a){a.preventDefault(),f.imgnext()}),$(document).on(\"keyup\",f.keyup)},f.loadi=layer.load(1,{shade:\"shade\"in a?!1:.9,scrollbar:!1}),e(i[j].src,function(c){layer.close(f.loadi),f.index=layer.open($.extend({type:1,area:function(){var b=[c.width,c.height],d=[$(window).width()-100,$(window).height()-100];return!a.full&&b[0]>d[0]&&(b[0]=d[0],b[1]=b[0]*d[1]/b[0]),[b[0]+\"px\",b[1]+\"px\"]}(),title:!1,shade:.9,shadeClose:!0,closeBtn:!1,move:\".layui-layer-phimg img\",moveType:1,scrollbar:!1,moveOut:!0,shift:5*Math.random()|0,skin:\"layui-layer-photos\"+b(\"photos\"),content:'<div class=\"layui-layer-phimg\"><img src=\"'+i[j].src+'\" alt=\"'+(i[j].alt||\"\")+'\" layer-pid=\"'+i[j].pid+'\"><div class=\"layui-layer-imgsee\">'+(i.length>1?'<span class=\"layui-layer-imguide\"><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgprev\"></a><a href=\"javascript:;\" class=\"layui-layer-iconext layui-layer-imgnext\"></a></span>':\"\")+'<div class=\"layui-layer-imgbar\" style=\"display:'+(d?\"block\":\"\")+'\"><span class=\"layui-layer-imgtit\"><a href=\"javascript:;\">'+(i[j].alt||\"\")+\"</a><em>\"+f.imgIndex+\"/\"+i.length+\"</em></span></div></div></div>\",success:function(b,c){f.bigimg=b.find(\".layui-layer-phimg\"),f.imgsee=b.find(\".layui-layer-imguide,.layui-layer-imgbar\"),f.event(b),a.tab&&a.tab(i[j],b)},end:function(){f.end=!0,$(document).off(\"keyup\",f.keyup)}},a))},function(){layer.close(f.loadi),layer.msg(\"&#x5F53;&#x524D;&#x56FE;&#x7247;&#x5730;&#x5740;&#x5F02;&#x5E38;<br>&#x662F;&#x5426;&#x7EE7;&#x7EED;&#x67E5;&#x770B;&#x4E0B;&#x4E00;&#x5F20;&#xFF1F;\",{time:3e4,btn:[\"下一张\",\"不看了\"],yes:function(){i.length>1&&f.imgnext(!0,!0)}})})}}}();\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate/laydate.js",
    "content": "﻿/**\n \n @Name : layDate v1.1 日期控件\n @Author: 贤心\n @Date: 2014-06-25\n @QQ群：176047195\n @Site：http://sentsin.com/layui/laydate\n \n */\n\n;!function(a){var b={path:\"\",defSkin:\"default\",format:\"YYYY-MM-DD\",min:\"1900-01-01 00:00:00\",max:\"2099-12-31 23:59:59\",isv:!1},c={},d=document,e=\"createElement\",f=\"getElementById\",g=\"getElementsByTagName\",h=[\"laydate_box\",\"laydate_void\",\"laydate_click\",\"LayDateSkin\",\"skins/\",\"/laydate.css\"];a.laydate=function(b){b=b||{};try{h.event=a.event?a.event:laydate.caller.arguments[0]}catch(d){}return c.run(b),laydate},laydate.v=\"1.1\",c.getPath=function(){var a=document.scripts,c=a[a.length-1].src;return b.path?b.path:c.substring(0,c.lastIndexOf(\"/\")+1)}(),c.use=function(a,b){var f=d[e](\"link\");f.type=\"text/css\",f.rel=\"stylesheet\",f.href=c.getPath+a+h[5],b&&(f.id=b),d[g](\"head\")[0].appendChild(f),f=null},c.trim=function(a){return a=a||\"\",a.replace(/^\\s|\\s$/g,\"\").replace(/\\s+/g,\" \")},c.digit=function(a){return 10>a?\"0\"+(0|a):a},c.stopmp=function(b){return b=b||a.event,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0,this},c.each=function(a,b){for(var c=0,d=a.length;d>c&&b(c,a[c])!==!1;c++);},c.hasClass=function(a,b){return a=a||{},new RegExp(\"\\\\b\"+b+\"\\\\b\").test(a.className)},c.addClass=function(a,b){return a=a||{},c.hasClass(a,b)||(a.className+=\" \"+b),a.className=c.trim(a.className),this},c.removeClass=function(a,b){if(a=a||{},c.hasClass(a,b)){var d=new RegExp(\"\\\\b\"+b+\"\\\\b\");a.className=a.className.replace(d,\"\")}return this},c.removeCssAttr=function(a,b){var c=a.style;c.removeProperty?c.removeProperty(b):c.removeAttribute(b)},c.shde=function(a,b){a.style.display=b?\"none\":\"block\"},c.query=function(a){var e,b,h,i,j;return a=c.trim(a).split(\" \"),b=d[f](a[0].substr(1)),b?a[1]?/^\\./.test(a[1])?(i=a[1].substr(1),j=new RegExp(\"\\\\b\"+i+\"\\\\b\"),e=[],h=d.getElementsByClassName?b.getElementsByClassName(i):b[g](\"*\"),c.each(h,function(a,b){j.test(b.className)&&e.push(b)}),e[0]?e:\"\"):(e=b[g](a[1]),e[0]?b[g](a[1]):\"\"):b:void 0},c.on=function(b,d,e){return b.attachEvent?b.attachEvent(\"on\"+d,function(){e.call(b,a.even)}):b.addEventListener(d,e,!1),c},c.stopMosup=function(a,b){\"mouseup\"!==a&&c.on(b,\"mouseup\",function(a){c.stopmp(a)})},c.run=function(a){var d,e,g,b=c.query,f=h.event;try{g=f.target||f.srcElement||{}}catch(i){g={}}if(d=a.elem?b(a.elem):g,f&&g.tagName){if(!d||d===c.elem)return;c.stopMosup(f.type,d),c.stopmp(f),c.view(d,a),c.reshow()}else e=a.event||\"click\",c.each((0|d.length)>0?d:[d],function(b,d){c.stopMosup(e,d),c.on(d,e,function(b){c.stopmp(b),d!==c.elem&&(c.view(d,a),c.reshow())})})},c.scroll=function(a){return a=a?\"scrollLeft\":\"scrollTop\",d.body[a]|d.documentElement[a]},c.winarea=function(a){return document.documentElement[a?\"clientWidth\":\"clientHeight\"]},c.isleap=function(a){return 0===a%4&&0!==a%100||0===a%400},c.checkVoid=function(a,b,d){var e=[];return a=0|a,b=0|b,d=0|d,a<c.mins[0]?e=[\"y\"]:a>c.maxs[0]?e=[\"y\",1]:a>=c.mins[0]&&a<=c.maxs[0]&&(a==c.mins[0]&&(b<c.mins[1]?e=[\"m\"]:b==c.mins[1]&&d<c.mins[2]&&(e=[\"d\"])),a==c.maxs[0]&&(b>c.maxs[1]?e=[\"m\",1]:b==c.maxs[1]&&d>c.maxs[2]&&(e=[\"d\",1]))),e},c.timeVoid=function(a,b){if(c.ymd[1]+1==c.mins[1]&&c.ymd[2]==c.mins[2]){if(0===b&&a<c.mins[3])return 1;if(1===b&&a<c.mins[4])return 1;if(2===b&&a<c.mins[5])return 1}else if(c.ymd[1]+1==c.maxs[1]&&c.ymd[2]==c.maxs[2]){if(0===b&&a>c.maxs[3])return 1;if(1===b&&a>c.maxs[4])return 1;if(2===b&&a>c.maxs[5])return 1}return a>(b?59:23)?1:void 0},c.check=function(){var a=c.options.format.replace(/YYYY|MM|DD|hh|mm|ss/g,\"\\\\d+\\\\\").replace(/\\\\$/g,\"\"),b=new RegExp(a),d=c.elem[h.elemv],e=d.match(/\\d+/g)||[],f=c.checkVoid(e[0],e[1],e[2]);if(\"\"!==d.replace(/\\s/g,\"\")){if(!b.test(d))return c.elem[h.elemv]=\"\",c.msg(\"日期不符合格式，请重新选择。\"),1;if(f[0])return c.elem[h.elemv]=\"\",c.msg(\"日期不在有效期内，请重新选择。\"),1;f.value=c.elem[h.elemv].match(b).join(),e=f.value.match(/\\d+/g),e[1]<1?(e[1]=1,f.auto=1):e[1]>12?(e[1]=12,f.auto=1):e[1].length<2&&(f.auto=1),e[2]<1?(e[2]=1,f.auto=1):e[2]>c.months[(0|e[1])-1]?(e[2]=31,f.auto=1):e[2].length<2&&(f.auto=1),e.length>3&&(c.timeVoid(e[3],0)&&(f.auto=1),c.timeVoid(e[4],1)&&(f.auto=1),c.timeVoid(e[5],2)&&(f.auto=1)),f.auto?c.creation([e[0],0|e[1],0|e[2]],1):f.value!==c.elem[h.elemv]&&(c.elem[h.elemv]=f.value)}},c.months=[31,null,31,30,31,30,31,31,30,31,30,31],c.viewDate=function(a,b,d){var f=(c.query,{}),g=new Date;a<(0|c.mins[0])&&(a=0|c.mins[0]),a>(0|c.maxs[0])&&(a=0|c.maxs[0]),g.setFullYear(a,b,d),f.ymd=[g.getFullYear(),g.getMonth(),g.getDate()],c.months[1]=c.isleap(f.ymd[0])?29:28,g.setFullYear(f.ymd[0],f.ymd[1],1),f.FDay=g.getDay(),f.PDay=c.months[0===b?11:b-1]-f.FDay+1,f.NDay=1,c.each(h.tds,function(a,b){var g,d=f.ymd[0],e=f.ymd[1]+1;b.className=\"\",a<f.FDay?(b.innerHTML=g=a+f.PDay,c.addClass(b,\"laydate_nothis\"),1===e&&(d-=1),e=1===e?12:e-1):a>=f.FDay&&a<f.FDay+c.months[f.ymd[1]]?(b.innerHTML=g=a-f.FDay+1,a-f.FDay+1===f.ymd[2]&&(c.addClass(b,h[2]),f.thisDay=b)):(b.innerHTML=g=f.NDay++,c.addClass(b,\"laydate_nothis\"),12===e&&(d+=1),e=12===e?1:e+1),c.checkVoid(d,e,g)[0]&&c.addClass(b,h[1]),c.options.festival&&c.festival(b,e+\".\"+g),b.setAttribute(\"y\",d),b.setAttribute(\"m\",e),b.setAttribute(\"d\",g),d=e=g=null}),c.valid=!c.hasClass(f.thisDay,h[1]),c.ymd=f.ymd,h.year.value=c.ymd[0]+\"年\",h.month.value=c.digit(c.ymd[1]+1)+\"月\",c.each(h.mms,function(a,b){var d=c.checkVoid(c.ymd[0],(0|b.getAttribute(\"m\"))+1);\"y\"===d[0]||\"m\"===d[0]?c.addClass(b,h[1]):c.removeClass(b,h[1]),c.removeClass(b,h[2]),d=null}),c.addClass(h.mms[c.ymd[1]],h[2]),f.times=[0|c.inymd[3]||0,0|c.inymd[4]||0,0|c.inymd[5]||0],c.each(new Array(3),function(a){c.hmsin[a].value=c.digit(c.timeVoid(f.times[a],a)?0|c.mins[a+3]:0|f.times[a])}),c[c.valid?\"removeClass\":\"addClass\"](h.ok,h[1])},c.festival=function(a,b){var c;switch(b){case\"1.1\":c=\"元旦\";break;case\"3.8\":c=\"妇女\";break;case\"4.5\":c=\"清明\";break;case\"5.1\":c=\"劳动\";break;case\"6.1\":c=\"儿童\";break;case\"9.10\":c=\"教师\";break;case\"10.1\":c=\"国庆\"}c&&(a.innerHTML=c),c=null},c.viewYears=function(a){var b=c.query,d=\"\";c.each(new Array(14),function(b){d+=7===b?\"<li \"+(parseInt(h.year.value)===a?'class=\"'+h[2]+'\"':\"\")+' y=\"'+a+'\">'+a+\"年</li>\":'<li y=\"'+(a-7+b)+'\">'+(a-7+b)+\"年</li>\"}),b(\"#laydate_ys\").innerHTML=d,c.each(b(\"#laydate_ys li\"),function(a,b){\"y\"===c.checkVoid(b.getAttribute(\"y\"))[0]?c.addClass(b,h[1]):c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.viewDate(0|this.getAttribute(\"y\"),c.ymd[1],c.ymd[2])})})},c.initDate=function(){var d=(c.query,new Date),e=c.elem[h.elemv].match(/\\d+/g)||[];e.length<3&&(e=c.options.start.match(/\\d+/g)||[],e.length<3&&(e=[d.getFullYear(),d.getMonth()+1,d.getDate()])),c.inymd=e,c.viewDate(e[0],e[1]-1,e[2])},c.iswrite=function(){var a=c.query,b={time:a(\"#laydate_hms\")};c.shde(b.time,!c.options.istime),c.shde(h.oclear,!(\"isclear\"in c.options?c.options.isclear:1)),c.shde(h.otoday,!(\"istoday\"in c.options?c.options.istoday:1)),c.shde(h.ok,!(\"issure\"in c.options?c.options.issure:1))},c.orien=function(a,b){var d,e=c.elem.getBoundingClientRect();a.style.left=e.left+(b?0:c.scroll(1))+\"px\",d=e.bottom+a.offsetHeight/1.5<=c.winarea()?e.bottom-1:e.top>a.offsetHeight/1.5?e.top-a.offsetHeight+1:c.winarea()-a.offsetHeight,a.style.top=d+(b?0:c.scroll())+\"px\"},c.follow=function(a){c.options.fixed?(a.style.position=\"fixed\",c.orien(a,1)):(a.style.position=\"absolute\",c.orien(a))},c.viewtb=function(){var a,b=[],f=[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],h={},i=d[e](\"table\"),j=d[e](\"thead\");return j.appendChild(d[e](\"tr\")),h.creath=function(a){var b=d[e](\"th\");b.innerHTML=f[a],j[g](\"tr\")[0].appendChild(b),b=null},c.each(new Array(6),function(d){b.push([]),a=i.insertRow(0),c.each(new Array(7),function(c){b[d][c]=0,0===d&&h.creath(c),a.insertCell(c)})}),i.insertBefore(j,i.children[0]),i.id=i.className=\"laydate_table\",a=b=null,i.outerHTML.toLowerCase()}(),c.view=function(a,f){var i,g=c.query,j={};f=f||a,c.elem=a,c.options=f,c.options.format||(c.options.format=b.format),c.options.start=c.options.start||\"\",c.mm=j.mm=[c.options.min||b.min,c.options.max||b.max],c.mins=j.mm[0].match(/\\d+/g),c.maxs=j.mm[1].match(/\\d+/g),h.elemv=/textarea|input/.test(c.elem.tagName.toLocaleLowerCase())?\"value\":\"innerHTML\",c.box?c.shde(c.box):(i=d[e](\"div\"),i.id=h[0],i.className=h[0],i.style.cssText=\"position: absolute;\",i.setAttribute(\"name\",\"laydate-v\"+laydate.v),i.innerHTML=j.html='<div class=\"laydate_top\"><div class=\"laydate_ym laydate_y\" id=\"laydate_YY\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_y\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\"><a class=\"laydate_tab laydate_chtop\"><cite></cite></a><ul id=\"laydate_ys\"></ul><a class=\"laydate_tab laydate_chdown\"><cite></cite></a></div></div><div class=\"laydate_ym laydate_m\" id=\"laydate_MM\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_m\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\" id=\"laydate_ms\">'+function(){var a=\"\";return c.each(new Array(12),function(b){a+='<span m=\"'+b+'\">'+c.digit(b+1)+\"月</span>\"}),a}()+\"</div>\"+\"</div>\"+\"</div>\"+c.viewtb+'<div class=\"laydate_bottom\">'+'<ul id=\"laydate_hms\">'+'<li class=\"laydate_sj\">时间</li>'+\"<li><input readonly>:</li>\"+\"<li><input readonly>:</li>\"+\"<li><input readonly></li>\"+\"</ul>\"+'<div class=\"laydate_time\" id=\"laydate_time\"></div>'+'<div class=\"laydate_btn\">'+'<a id=\"laydate_clear\">清空</a>'+'<a id=\"laydate_today\">今天</a>'+'<a id=\"laydate_ok\">确认</a>'+\"</div>\"+(b.isv?'<a href=\"http://sentsin.com/layui/laydate/\" class=\"laydate_v\" target=\"_blank\">laydate-v'+laydate.v+\"</a>\":\"\")+\"</div>\",d.body.appendChild(i),c.box=g(\"#\"+h[0]),c.events(),i=null),c.follow(c.box),f.zIndex?c.box.style.zIndex=f.zIndex:c.removeCssAttr(c.box,\"z-index\"),c.stopMosup(\"click\",c.box),c.initDate(),c.iswrite(),c.check()},c.reshow=function(){return c.each(c.query(\"#\"+h[0]+\" .laydate_show\"),function(a,b){c.removeClass(b,\"laydate_show\")}),this},c.close=function(){c.reshow(),c.shde(c.query(\"#\"+h[0]),1),c.elem=null},c.parse=function(a,d,e){return a=a.concat(d),e=e||(c.options?c.options.format:b.format),e.replace(/YYYY|MM|DD|hh|mm|ss/g,function(){return a.index=0|++a.index,c.digit(a[a.index])})},c.creation=function(a,b){var e=(c.query,c.hmsin),f=c.parse(a,[e[0].value,e[1].value,e[2].value]);c.elem[h.elemv]=f,b||(c.close(),\"function\"==typeof c.options.choose&&c.options.choose(f))},c.events=function(){var b=c.query,e={box:\"#\"+h[0]};c.addClass(d.body,\"laydate_body\"),h.tds=b(\"#laydate_table td\"),h.mms=b(\"#laydate_ms span\"),h.year=b(\"#laydate_y\"),h.month=b(\"#laydate_m\"),c.each(b(e.box+\" .laydate_ym\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.addClass(this[g](\"div\")[0],\"laydate_show\"),a||(e.YY=parseInt(h.year.value),c.viewYears(e.YY))})}),c.on(b(e.box),\"click\",function(){c.reshow()}),e.tabYear=function(a){0===a?c.ymd[0]--:1===a?c.ymd[0]++:2===a?e.YY-=14:e.YY+=14,2>a?(c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2]),c.reshow()):c.viewYears(e.YY)},c.each(b(\"#laydate_YY .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b),e.tabYear(a)})}),e.tabMonth=function(a){a?(c.ymd[1]++,12===c.ymd[1]&&(c.ymd[0]++,c.ymd[1]=0)):(c.ymd[1]--,-1===c.ymd[1]&&(c.ymd[0]--,c.ymd[1]=11)),c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2])},c.each(b(\"#laydate_MM .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),e.tabMonth(a)})}),c.each(b(\"#laydate_ms span\"),function(a,b){c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.hasClass(this,h[1])||c.viewDate(c.ymd[0],0|this.getAttribute(\"m\"),c.ymd[2])})}),c.each(b(\"#laydate_table td\"),function(a,b){c.on(b,\"click\",function(a){c.hasClass(this,h[1])||(c.stopmp(a),c.creation([0|this.getAttribute(\"y\"),0|this.getAttribute(\"m\"),0|this.getAttribute(\"d\")]))})}),h.oclear=b(\"#laydate_clear\"),c.on(h.oclear,\"click\",function(){c.elem[h.elemv]=\"\",c.close()}),h.otoday=b(\"#laydate_today\"),c.on(h.otoday,\"click\",function(){c.elem[h.elemv]=laydate.now(0,c.options.format),c.close()}),h.ok=b(\"#laydate_ok\"),c.on(h.ok,\"click\",function(){c.valid&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])}),e.times=b(\"#laydate_time\"),c.hmsin=e.hmsin=b(\"#laydate_hms input\"),e.hmss=[\"小时\",\"分钟\",\"秒数\"],e.hmsarr=[],c.msg=function(a,d){var f='<div class=\"laydte_hsmtex\">'+(d||\"提示\")+\"<span>×</span></div>\";\"string\"==typeof a?(f+=\"<p>\"+a+\"</p>\",c.shde(b(\"#\"+h[0])),c.removeClass(e.times,\"laydate_time1\").addClass(e.times,\"laydate_msg\")):(e.hmsarr[a]?f=e.hmsarr[a]:(f+='<div id=\"laydate_hmsno\" class=\"laydate_hmsno\">',c.each(new Array(0===a?24:60),function(a){f+=\"<span>\"+a+\"</span>\"}),f+=\"</div>\",e.hmsarr[a]=f),c.removeClass(e.times,\"laydate_msg\"),c[0===a?\"removeClass\":\"addClass\"](e.times,\"laydate_time1\")),c.addClass(e.times,\"laydate_show\"),e.times.innerHTML=f},e.hmson=function(a,d){var e=b(\"#laydate_hmsno span\"),f=c.valid?null:1;c.each(e,function(b,e){f?c.addClass(e,h[1]):c.timeVoid(b,d)?c.addClass(e,h[1]):c.on(e,\"click\",function(){c.hasClass(this,h[1])||(a.value=c.digit(0|this.innerHTML))})}),c.addClass(e[0|a.value],\"laydate_click\")},c.each(e.hmsin,function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.msg(a,e.hmss[a]),e.hmson(this,a)})}),c.on(d,\"mouseup\",function(){var a=b(\"#\"+h[0]);a&&\"none\"!==a.style.display&&(c.check()||c.close())}).on(d,\"keydown\",function(b){b=b||a.event;var d=b.keyCode;13===d&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])})},c.init=function(){c.use(\"need\"),c.use(h[4]+b.defSkin,h[3]),c.skinLink=c.query(\"#\"+h[3])}(),laydate.reset=function(){c.box&&c.elem&&c.follow(c.box)},laydate.now=function(a,b){var d=new Date(0|a?function(a){return 864e5>a?+new Date+864e5*a:a}(parseInt(a)):+new Date);return c.parse([d.getFullYear(),d.getMonth()+1,d.getDate()],[d.getHours(),d.getMinutes(),d.getSeconds()],b)},laydate.skin=function(a){c.skinLink.href=c.getPath+h[4]+a+h[5]}}(window);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate/need/laydate.css",
    "content": "﻿/**\n\n @Name锛� laydate 鏍稿績鏍峰紡\n @Author锛氳搐蹇�\n @Site锛歨ttp://sentsin.com/layui/laydate\n\n**/\n\nhtml{_background-image:url(about:blank); _background-attachment:fixed;}\n.layer-date{display: inline-block!important;vertical-align:text-top;max-width:240px;}\n.laydate_body .laydate_box, .laydate_body .laydate_box *{margin:0; padding:0;}\n.laydate-icon,\n.laydate-icon-default,\n.laydate-icon-danlan,\n.laydate-icon-dahong,\n.laydate-icon-molv{height:34px; padding-right:20px;min-width:34px;vertical-align: text-top;border:1px solid #C6C6C6; background-repeat:no-repeat; background-position:right center;  background-color:#fff; outline:0;}\n.laydate-icon-default{ background-image:url(../skins/default/icon.png)}\n.laydate-icon-danlan{border:1px solid #B1D2EC; background-image:url(../skins/danlan/icon.png)}\n.laydate-icon-dahong{background-image:url(../skins/dahong/icon.png)}\n.laydate-icon-molv{background-image:url(../skins/molv/icon.png)}\n.laydate_body .laydate_box{width:240px; font:12px '\\5B8B\\4F53'; z-index:99999999; *margin:-2px 0 0 -2px; *overflow:hidden; _margin:0; _position:absolute!important; background-color:#fff;}\n.laydate_body .laydate_box li{list-style:none;}\n.laydate_body .laydate_box .laydate_void{cursor:text!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{text-decoration:none; blr:expression(this.onFocus=this.blur()); cursor:pointer;}\n.laydate_body .laydate_box a:hover{text-decoration:none;}\n.laydate_body .laydate_box cite, .laydate_body .laydate_box label{position:absolute; width:0; height:0; border-width:5px; border-style:dashed; border-color:transparent; overflow:hidden; cursor:pointer;}\n.laydate_body .laydate_box .laydate_yms, .laydate_body .laydate_box .laydate_time{display:none;}\n.laydate_body .laydate_box .laydate_show{display:block;}\n.laydate_body .laydate_box input{outline:0; font-size:14px; background-color:#fff;}\n.laydate_body .laydate_top{position:relative; height:26px; padding:5px; *width:100%; z-index:99;}\n.laydate_body .laydate_ym{position:relative; float:left; height:24px; cursor:pointer;}\n.laydate_body .laydate_ym input{float:left; height:24px; line-height:24px; text-align:center; border:none; cursor:pointer;}\n.laydate_body .laydate_ym .laydate_yms{position:absolute; left: -1px; top: 24px; height:181px;}\n.laydate_body .laydate_y{width:121px;}\n.laydate_body .laydate_y input{width:64px; margin-right:15px;}\n.laydate_body .laydate_y .laydate_yms{width:121px; text-align:center;}\n.laydate_body .laydate_y .laydate_yms a{position:relative; display:block; height:20px;}\n.laydate_body .laydate_y .laydate_yms ul{height:139px; padding:0; *overflow:hidden;}\n.laydate_body .laydate_y .laydate_yms ul li{float:left; width:60px; height:20px; line-height: 20px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\n.laydate_box *{box-sizing:content-box!important;}\n.laydate_body .laydate_m{width:99px;float: right;margin-right:-2px;}\n.laydate_body .laydate_m .laydate_yms{width:99px; padding:0;}\n.laydate_body .laydate_m input{width:42px; margin-right:15px;}\n.laydate_body .laydate_m .laydate_yms span{display:block; float:left; width:42px; margin: 5px 0 0 5px; line-height:24px; text-align:center; _display:inline;}\n.laydate_body .laydate_choose{display:block; float:left; position:relative; width:20px; height:24px;}\n.laydate_body .laydate_choose cite, .laydate_body .laydate_tab cite{left:50%; top:50%;}\n.laydate_body .laydate_chtop cite{margin:-7px 0 0 -5px; border-bottom-style:solid;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{top:50%; margin:-2px 0 0 -5px; border-top-style:solid;}\n.laydate_body .laydate_chprev cite{margin:-5px 0 0 -7px;}\n.laydate_body .laydate_chnext cite{margin:-5px 0 0 -2px;}\n.laydate_body .laydate_ym label{right:28px;}\n.laydate_body .laydate_table{ width:230px; margin:0 5px; border-collapse:collapse; border-spacing:0px; }\n.laydate_body .laydate_table td{width:31px; height:19px; line-height:19px; text-align: center; cursor:pointer; font-size: 12px;}\n.laydate_body .laydate_table thead{height:22px; line-height:22px;}\n.laydate_body .laydate_table thead th{font-weight:400; font-size:12px; text-align:center;}\n.laydate_body .laydate_bottom{position:relative; height:22px; line-height:20px; padding:5px; font-size:12px;}\n.laydate_body .laydate_bottom #laydate_hms{position: relative; z-index: 1; float:left; }\n.laydate_body .laydate_time{ position:absolute; left:5px; bottom: 26px; width:129px; height:125px; *overflow:hidden;}\n.laydate_body .laydate_time .laydate_hmsno{ padding:5px 0 0 5px;}\n.laydate_body .laydate_time .laydate_hmsno span{display:block; float:left; width:24px; height:19px; line-height:19px; text-align:center; cursor:pointer; *margin-bottom:-5px;}\n.laydate_body .laydate_time1{width:228px; height:154px;}\n.laydate_body .laydate_time1 .laydate_hmsno{padding: 6px 0 0 8px;}\n.laydate_body .laydate_time1 .laydate_hmsno span{width:21px; height:20px; line-height:20px;}\n.laydate_body .laydate_msg{left:49px; bottom:67px; width:141px; height:auto; overflow: hidden;}\n.laydate_body .laydate_msg p{padding:5px 10px;}\n.laydate_body .laydate_bottom li{float:left; height:20px; line-height:20px; border-right:none; font-weight:900;}\n.laydate_body .laydate_bottom .laydate_sj{width:33px; text-align:center; font-weight:400;}\n.laydate_body .laydate_bottom input{float:left; width:21px; height:20px; line-height:20px; border:none; text-align:center; cursor:pointer; font-size:12px;  font-weight:400;}\n.laydate_body .laydate_bottom .laydte_hsmtex{height:20px; line-height:20px; text-align:center;}\n.laydate_body .laydate_bottom .laydte_hsmtex span{position:absolute; width:20px; top:0; right:0px; cursor:pointer;}\n.laydate_body .laydate_bottom .laydte_hsmtex span:hover{font-size:14px;}\n.laydate_body .laydate_bottom .laydate_btn{position:absolute; right:5px; top:5px;}\n.laydate_body .laydate_bottom .laydate_btn a{float:left; height:20px; padding:0 6px; _padding:0 5px;}\n.laydate_body .laydate_bottom .laydate_v{position:absolute; left:10px; top:6px; font-family:Courier; z-index:0;}\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate/skins/dahong/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：大红\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}\n.laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #D91600;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#333;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate/skins/default/laydate.css",
    "content": "﻿\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}\n.laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #009F95;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}\n.laydate_body .laydate_choose:hover,\n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate/skins/molv/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：墨绿\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}\n.laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #009F95;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/demo.html",
    "content": "﻿<!doctype html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<title>layDate Demo</title>\n<script src=\"laydate/laydate.js\"></script>\n<style>\nhtml{background-color:#E3E3E3; font-size:14px; color:#000; font-family:'微软雅黑'}\nh2{line-height:30px; font-size:20px;}\na,a:hover{ text-decoration:none;}\npre{font-family:'微软雅黑'}\n.box{width:970px; padding:10px 20px; background-color:#fff; margin:10px auto;}\n.box a{padding-right:20px;}\n</style>\n</head>\n<body>\n<div style=\"width:970px; margin:10px auto;\">\n    演示一：<input placeholder=\"请输入日期\" class=\"laydate-icon\" onclick=\"laydate()\">\n</div>\n<div class=\"box\">\n<pre>\n @Name：laydate-v<script>document.write(laydate.v)</script> 日期控件说明\n @Author：贤心\n @Blog：<a href=\"http://sentsin.com\" target=\"_blank\">http://sentsin.com</a>\n @官网：<a href=\"http://sentsin.com/layui/laydate\"  target=\"_blank\">http://sentsin.com/layui/laydate</a>\n @开发版源码：<a href=\"http://sentsin.com/lily/lib/laydate/laydate.dev.js\"  target=\"_blank\">http://sentsin.com/lily/lib/laydate/laydate.dev.js</a>\n\n<strong>【注意事项】</strong>\n一、请千万勿移动laydate中的目录结构，它们具有完整的依赖体系。使用时，只需引入laydate/laydate.js即可。\n二、如果您的网站的js采用合并或模块加载，您需要打开laydate.js，修改path。\n三、laydate遵循LGPL开源协议，永不收费！\n四、版权最终解释权：贤心。\n</pre>\n演示二：<input class=\"laydate-icon\" id=\"demo\" value=\"2014-6-25更新\">\n</div>\n<div class=\"box\" style=\"text-align:center\">\n    <p>现在，您已经看到了layDate的第一个版本了，路漫漫其修远兮，不管您的网站是否存有别的日期控件，但我相信总有一日您会对layDate情有独钟。</p>\n    <a href=\"http://sentsin.com/layui/laydate/api.html\" target=\"_blank\">使用文档</a>\n    <a href=\"http://sentsin.com/layui/laydate/skins.html\" target=\"_blank\">皮肤库</a>\n    <a href=\"http://say.sentsin.com/say-922.html\" target=\"_blank\">更新日志</a>\n    <a href=\"http://say.sentsin.com/home-58.html\" id=\"suggest\" target=\"_blank\">有问必答</a>\n</div>\n\n<script>\n;!function(){\n\n//laydate.skin('molv');\n\nlaydate({\n   elem: '#demo'\n})\n\n}();\n</script>\n</body>\n</html>"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/layDate官网.url",
    "content": "[{000214A0-0000-0000-C000-000000000046}]\nProp3=19,2\n[InternetShortcut]\nURL=http://sentsin.com/layui/laydate/\nIDList=\nHotKey=0\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/laydate/laydate.js",
    "content": "﻿/**\n \n @Name : layDate v1.1 日期控件\n @Author: 贤心\n @Date: 2014-06-25\n @QQ群：176047195\n @Site：http://sentsin.com/layui/laydate\n \n */\n\n;!function(a){var b={path:\"\",defSkin:\"default\",format:\"YYYY-MM-DD\",min:\"1900-01-01 00:00:00\",max:\"2099-12-31 23:59:59\",isv:!1},c={},d=document,e=\"createElement\",f=\"getElementById\",g=\"getElementsByTagName\",h=[\"laydate_box\",\"laydate_void\",\"laydate_click\",\"LayDateSkin\",\"skins/\",\"/laydate.css\"];a.laydate=function(b){b=b||{};try{h.event=a.event?a.event:laydate.caller.arguments[0]}catch(d){}return c.run(b),laydate},laydate.v=\"1.1\",c.getPath=function(){var a=document.scripts,c=a[a.length-1].src;return b.path?b.path:c.substring(0,c.lastIndexOf(\"/\")+1)}(),c.use=function(a,b){var f=d[e](\"link\");f.type=\"text/css\",f.rel=\"stylesheet\",f.href=c.getPath+a+h[5],b&&(f.id=b),d[g](\"head\")[0].appendChild(f),f=null},c.trim=function(a){return a=a||\"\",a.replace(/^\\s|\\s$/g,\"\").replace(/\\s+/g,\" \")},c.digit=function(a){return 10>a?\"0\"+(0|a):a},c.stopmp=function(b){return b=b||a.event,b.stopPropagation?b.stopPropagation():b.cancelBubble=!0,this},c.each=function(a,b){for(var c=0,d=a.length;d>c&&b(c,a[c])!==!1;c++);},c.hasClass=function(a,b){return a=a||{},new RegExp(\"\\\\b\"+b+\"\\\\b\").test(a.className)},c.addClass=function(a,b){return a=a||{},c.hasClass(a,b)||(a.className+=\" \"+b),a.className=c.trim(a.className),this},c.removeClass=function(a,b){if(a=a||{},c.hasClass(a,b)){var d=new RegExp(\"\\\\b\"+b+\"\\\\b\");a.className=a.className.replace(d,\"\")}return this},c.removeCssAttr=function(a,b){var c=a.style;c.removeProperty?c.removeProperty(b):c.removeAttribute(b)},c.shde=function(a,b){a.style.display=b?\"none\":\"block\"},c.query=function(a){var e,b,h,i,j;return a=c.trim(a).split(\" \"),b=d[f](a[0].substr(1)),b?a[1]?/^\\./.test(a[1])?(i=a[1].substr(1),j=new RegExp(\"\\\\b\"+i+\"\\\\b\"),e=[],h=d.getElementsByClassName?b.getElementsByClassName(i):b[g](\"*\"),c.each(h,function(a,b){j.test(b.className)&&e.push(b)}),e[0]?e:\"\"):(e=b[g](a[1]),e[0]?b[g](a[1]):\"\"):b:void 0},c.on=function(b,d,e){return b.attachEvent?b.attachEvent(\"on\"+d,function(){e.call(b,a.even)}):b.addEventListener(d,e,!1),c},c.stopMosup=function(a,b){\"mouseup\"!==a&&c.on(b,\"mouseup\",function(a){c.stopmp(a)})},c.run=function(a){var d,e,g,b=c.query,f=h.event;try{g=f.target||f.srcElement||{}}catch(i){g={}}if(d=a.elem?b(a.elem):g,f&&g.tagName){if(!d||d===c.elem)return;c.stopMosup(f.type,d),c.stopmp(f),c.view(d,a),c.reshow()}else e=a.event||\"click\",c.each((0|d.length)>0?d:[d],function(b,d){c.stopMosup(e,d),c.on(d,e,function(b){c.stopmp(b),d!==c.elem&&(c.view(d,a),c.reshow())})})},c.scroll=function(a){return a=a?\"scrollLeft\":\"scrollTop\",d.body[a]|d.documentElement[a]},c.winarea=function(a){return document.documentElement[a?\"clientWidth\":\"clientHeight\"]},c.isleap=function(a){return 0===a%4&&0!==a%100||0===a%400},c.checkVoid=function(a,b,d){var e=[];return a=0|a,b=0|b,d=0|d,a<c.mins[0]?e=[\"y\"]:a>c.maxs[0]?e=[\"y\",1]:a>=c.mins[0]&&a<=c.maxs[0]&&(a==c.mins[0]&&(b<c.mins[1]?e=[\"m\"]:b==c.mins[1]&&d<c.mins[2]&&(e=[\"d\"])),a==c.maxs[0]&&(b>c.maxs[1]?e=[\"m\",1]:b==c.maxs[1]&&d>c.maxs[2]&&(e=[\"d\",1]))),e},c.timeVoid=function(a,b){if(c.ymd[1]+1==c.mins[1]&&c.ymd[2]==c.mins[2]){if(0===b&&a<c.mins[3])return 1;if(1===b&&a<c.mins[4])return 1;if(2===b&&a<c.mins[5])return 1}else if(c.ymd[1]+1==c.maxs[1]&&c.ymd[2]==c.maxs[2]){if(0===b&&a>c.maxs[3])return 1;if(1===b&&a>c.maxs[4])return 1;if(2===b&&a>c.maxs[5])return 1}return a>(b?59:23)?1:void 0},c.check=function(){var a=c.options.format.replace(/YYYY|MM|DD|hh|mm|ss/g,\"\\\\d+\\\\\").replace(/\\\\$/g,\"\"),b=new RegExp(a),d=c.elem[h.elemv],e=d.match(/\\d+/g)||[],f=c.checkVoid(e[0],e[1],e[2]);if(\"\"!==d.replace(/\\s/g,\"\")){if(!b.test(d))return c.elem[h.elemv]=\"\",c.msg(\"日期不符合格式，请重新选择。\"),1;if(f[0])return c.elem[h.elemv]=\"\",c.msg(\"日期不在有效期内，请重新选择。\"),1;f.value=c.elem[h.elemv].match(b).join(),e=f.value.match(/\\d+/g),e[1]<1?(e[1]=1,f.auto=1):e[1]>12?(e[1]=12,f.auto=1):e[1].length<2&&(f.auto=1),e[2]<1?(e[2]=1,f.auto=1):e[2]>c.months[(0|e[1])-1]?(e[2]=31,f.auto=1):e[2].length<2&&(f.auto=1),e.length>3&&(c.timeVoid(e[3],0)&&(f.auto=1),c.timeVoid(e[4],1)&&(f.auto=1),c.timeVoid(e[5],2)&&(f.auto=1)),f.auto?c.creation([e[0],0|e[1],0|e[2]],1):f.value!==c.elem[h.elemv]&&(c.elem[h.elemv]=f.value)}},c.months=[31,null,31,30,31,30,31,31,30,31,30,31],c.viewDate=function(a,b,d){var f=(c.query,{}),g=new Date;a<(0|c.mins[0])&&(a=0|c.mins[0]),a>(0|c.maxs[0])&&(a=0|c.maxs[0]),g.setFullYear(a,b,d),f.ymd=[g.getFullYear(),g.getMonth(),g.getDate()],c.months[1]=c.isleap(f.ymd[0])?29:28,g.setFullYear(f.ymd[0],f.ymd[1],1),f.FDay=g.getDay(),f.PDay=c.months[0===b?11:b-1]-f.FDay+1,f.NDay=1,c.each(h.tds,function(a,b){var g,d=f.ymd[0],e=f.ymd[1]+1;b.className=\"\",a<f.FDay?(b.innerHTML=g=a+f.PDay,c.addClass(b,\"laydate_nothis\"),1===e&&(d-=1),e=1===e?12:e-1):a>=f.FDay&&a<f.FDay+c.months[f.ymd[1]]?(b.innerHTML=g=a-f.FDay+1,a-f.FDay+1===f.ymd[2]&&(c.addClass(b,h[2]),f.thisDay=b)):(b.innerHTML=g=f.NDay++,c.addClass(b,\"laydate_nothis\"),12===e&&(d+=1),e=12===e?1:e+1),c.checkVoid(d,e,g)[0]&&c.addClass(b,h[1]),c.options.festival&&c.festival(b,e+\".\"+g),b.setAttribute(\"y\",d),b.setAttribute(\"m\",e),b.setAttribute(\"d\",g),d=e=g=null}),c.valid=!c.hasClass(f.thisDay,h[1]),c.ymd=f.ymd,h.year.value=c.ymd[0]+\"年\",h.month.value=c.digit(c.ymd[1]+1)+\"月\",c.each(h.mms,function(a,b){var d=c.checkVoid(c.ymd[0],(0|b.getAttribute(\"m\"))+1);\"y\"===d[0]||\"m\"===d[0]?c.addClass(b,h[1]):c.removeClass(b,h[1]),c.removeClass(b,h[2]),d=null}),c.addClass(h.mms[c.ymd[1]],h[2]),f.times=[0|c.inymd[3]||0,0|c.inymd[4]||0,0|c.inymd[5]||0],c.each(new Array(3),function(a){c.hmsin[a].value=c.digit(c.timeVoid(f.times[a],a)?0|c.mins[a+3]:0|f.times[a])}),c[c.valid?\"removeClass\":\"addClass\"](h.ok,h[1])},c.festival=function(a,b){var c;switch(b){case\"1.1\":c=\"元旦\";break;case\"3.8\":c=\"妇女\";break;case\"4.5\":c=\"清明\";break;case\"5.1\":c=\"劳动\";break;case\"6.1\":c=\"儿童\";break;case\"9.10\":c=\"教师\";break;case\"10.1\":c=\"国庆\"}c&&(a.innerHTML=c),c=null},c.viewYears=function(a){var b=c.query,d=\"\";c.each(new Array(14),function(b){d+=7===b?\"<li \"+(parseInt(h.year.value)===a?'class=\"'+h[2]+'\"':\"\")+' y=\"'+a+'\">'+a+\"年</li>\":'<li y=\"'+(a-7+b)+'\">'+(a-7+b)+\"年</li>\"}),b(\"#laydate_ys\").innerHTML=d,c.each(b(\"#laydate_ys li\"),function(a,b){\"y\"===c.checkVoid(b.getAttribute(\"y\"))[0]?c.addClass(b,h[1]):c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.viewDate(0|this.getAttribute(\"y\"),c.ymd[1],c.ymd[2])})})},c.initDate=function(){var d=(c.query,new Date),e=c.elem[h.elemv].match(/\\d+/g)||[];e.length<3&&(e=c.options.start.match(/\\d+/g)||[],e.length<3&&(e=[d.getFullYear(),d.getMonth()+1,d.getDate()])),c.inymd=e,c.viewDate(e[0],e[1]-1,e[2])},c.iswrite=function(){var a=c.query,b={time:a(\"#laydate_hms\")};c.shde(b.time,!c.options.istime),c.shde(h.oclear,!(\"isclear\"in c.options?c.options.isclear:1)),c.shde(h.otoday,!(\"istoday\"in c.options?c.options.istoday:1)),c.shde(h.ok,!(\"issure\"in c.options?c.options.issure:1))},c.orien=function(a,b){var d,e=c.elem.getBoundingClientRect();a.style.left=e.left+(b?0:c.scroll(1))+\"px\",d=e.bottom+a.offsetHeight/1.5<=c.winarea()?e.bottom-1:e.top>a.offsetHeight/1.5?e.top-a.offsetHeight+1:c.winarea()-a.offsetHeight,a.style.top=d+(b?0:c.scroll())+\"px\"},c.follow=function(a){c.options.fixed?(a.style.position=\"fixed\",c.orien(a,1)):(a.style.position=\"absolute\",c.orien(a))},c.viewtb=function(){var a,b=[],f=[\"日\",\"一\",\"二\",\"三\",\"四\",\"五\",\"六\"],h={},i=d[e](\"table\"),j=d[e](\"thead\");return j.appendChild(d[e](\"tr\")),h.creath=function(a){var b=d[e](\"th\");b.innerHTML=f[a],j[g](\"tr\")[0].appendChild(b),b=null},c.each(new Array(6),function(d){b.push([]),a=i.insertRow(0),c.each(new Array(7),function(c){b[d][c]=0,0===d&&h.creath(c),a.insertCell(c)})}),i.insertBefore(j,i.children[0]),i.id=i.className=\"laydate_table\",a=b=null,i.outerHTML.toLowerCase()}(),c.view=function(a,f){var i,g=c.query,j={};f=f||a,c.elem=a,c.options=f,c.options.format||(c.options.format=b.format),c.options.start=c.options.start||\"\",c.mm=j.mm=[c.options.min||b.min,c.options.max||b.max],c.mins=j.mm[0].match(/\\d+/g),c.maxs=j.mm[1].match(/\\d+/g),h.elemv=/textarea|input/.test(c.elem.tagName.toLocaleLowerCase())?\"value\":\"innerHTML\",c.box?c.shde(c.box):(i=d[e](\"div\"),i.id=h[0],i.className=h[0],i.style.cssText=\"position: absolute;\",i.setAttribute(\"name\",\"laydate-v\"+laydate.v),i.innerHTML=j.html='<div class=\"laydate_top\"><div class=\"laydate_ym laydate_y\" id=\"laydate_YY\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_y\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\"><a class=\"laydate_tab laydate_chtop\"><cite></cite></a><ul id=\"laydate_ys\"></ul><a class=\"laydate_tab laydate_chdown\"><cite></cite></a></div></div><div class=\"laydate_ym laydate_m\" id=\"laydate_MM\"><a class=\"laydate_choose laydate_chprev laydate_tab\"><cite></cite></a><input id=\"laydate_m\" readonly><label></label><a class=\"laydate_choose laydate_chnext laydate_tab\"><cite></cite></a><div class=\"laydate_yms\" id=\"laydate_ms\">'+function(){var a=\"\";return c.each(new Array(12),function(b){a+='<span m=\"'+b+'\">'+c.digit(b+1)+\"月</span>\"}),a}()+\"</div>\"+\"</div>\"+\"</div>\"+c.viewtb+'<div class=\"laydate_bottom\">'+'<ul id=\"laydate_hms\">'+'<li class=\"laydate_sj\">时间</li>'+\"<li><input readonly>:</li>\"+\"<li><input readonly>:</li>\"+\"<li><input readonly></li>\"+\"</ul>\"+'<div class=\"laydate_time\" id=\"laydate_time\"></div>'+'<div class=\"laydate_btn\">'+'<a id=\"laydate_clear\">清空</a>'+'<a id=\"laydate_today\">今天</a>'+'<a id=\"laydate_ok\">确认</a>'+\"</div>\"+(b.isv?'<a href=\"http://sentsin.com/layui/laydate/\" class=\"laydate_v\" target=\"_blank\">laydate-v'+laydate.v+\"</a>\":\"\")+\"</div>\",d.body.appendChild(i),c.box=g(\"#\"+h[0]),c.events(),i=null),c.follow(c.box),f.zIndex?c.box.style.zIndex=f.zIndex:c.removeCssAttr(c.box,\"z-index\"),c.stopMosup(\"click\",c.box),c.initDate(),c.iswrite(),c.check()},c.reshow=function(){return c.each(c.query(\"#\"+h[0]+\" .laydate_show\"),function(a,b){c.removeClass(b,\"laydate_show\")}),this},c.close=function(){c.reshow(),c.shde(c.query(\"#\"+h[0]),1),c.elem=null},c.parse=function(a,d,e){return a=a.concat(d),e=e||(c.options?c.options.format:b.format),e.replace(/YYYY|MM|DD|hh|mm|ss/g,function(){return a.index=0|++a.index,c.digit(a[a.index])})},c.creation=function(a,b){var e=(c.query,c.hmsin),f=c.parse(a,[e[0].value,e[1].value,e[2].value]);c.elem[h.elemv]=f,b||(c.close(),\"function\"==typeof c.options.choose&&c.options.choose(f))},c.events=function(){var b=c.query,e={box:\"#\"+h[0]};c.addClass(d.body,\"laydate_body\"),h.tds=b(\"#laydate_table td\"),h.mms=b(\"#laydate_ms span\"),h.year=b(\"#laydate_y\"),h.month=b(\"#laydate_m\"),c.each(b(e.box+\" .laydate_ym\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.addClass(this[g](\"div\")[0],\"laydate_show\"),a||(e.YY=parseInt(h.year.value),c.viewYears(e.YY))})}),c.on(b(e.box),\"click\",function(){c.reshow()}),e.tabYear=function(a){0===a?c.ymd[0]--:1===a?c.ymd[0]++:2===a?e.YY-=14:e.YY+=14,2>a?(c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2]),c.reshow()):c.viewYears(e.YY)},c.each(b(\"#laydate_YY .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b),e.tabYear(a)})}),e.tabMonth=function(a){a?(c.ymd[1]++,12===c.ymd[1]&&(c.ymd[0]++,c.ymd[1]=0)):(c.ymd[1]--,-1===c.ymd[1]&&(c.ymd[0]--,c.ymd[1]=11)),c.viewDate(c.ymd[0],c.ymd[1],c.ymd[2])},c.each(b(\"#laydate_MM .laydate_tab\"),function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),e.tabMonth(a)})}),c.each(b(\"#laydate_ms span\"),function(a,b){c.on(b,\"click\",function(a){c.stopmp(a).reshow(),c.hasClass(this,h[1])||c.viewDate(c.ymd[0],0|this.getAttribute(\"m\"),c.ymd[2])})}),c.each(b(\"#laydate_table td\"),function(a,b){c.on(b,\"click\",function(a){c.hasClass(this,h[1])||(c.stopmp(a),c.creation([0|this.getAttribute(\"y\"),0|this.getAttribute(\"m\"),0|this.getAttribute(\"d\")]))})}),h.oclear=b(\"#laydate_clear\"),c.on(h.oclear,\"click\",function(){c.elem[h.elemv]=\"\",c.close()}),h.otoday=b(\"#laydate_today\"),c.on(h.otoday,\"click\",function(){c.elem[h.elemv]=laydate.now(0,c.options.format),c.close()}),h.ok=b(\"#laydate_ok\"),c.on(h.ok,\"click\",function(){c.valid&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])}),e.times=b(\"#laydate_time\"),c.hmsin=e.hmsin=b(\"#laydate_hms input\"),e.hmss=[\"小时\",\"分钟\",\"秒数\"],e.hmsarr=[],c.msg=function(a,d){var f='<div class=\"laydte_hsmtex\">'+(d||\"提示\")+\"<span>×</span></div>\";\"string\"==typeof a?(f+=\"<p>\"+a+\"</p>\",c.shde(b(\"#\"+h[0])),c.removeClass(e.times,\"laydate_time1\").addClass(e.times,\"laydate_msg\")):(e.hmsarr[a]?f=e.hmsarr[a]:(f+='<div id=\"laydate_hmsno\" class=\"laydate_hmsno\">',c.each(new Array(0===a?24:60),function(a){f+=\"<span>\"+a+\"</span>\"}),f+=\"</div>\",e.hmsarr[a]=f),c.removeClass(e.times,\"laydate_msg\"),c[0===a?\"removeClass\":\"addClass\"](e.times,\"laydate_time1\")),c.addClass(e.times,\"laydate_show\"),e.times.innerHTML=f},e.hmson=function(a,d){var e=b(\"#laydate_hmsno span\"),f=c.valid?null:1;c.each(e,function(b,e){f?c.addClass(e,h[1]):c.timeVoid(b,d)?c.addClass(e,h[1]):c.on(e,\"click\",function(){c.hasClass(this,h[1])||(a.value=c.digit(0|this.innerHTML))})}),c.addClass(e[0|a.value],\"laydate_click\")},c.each(e.hmsin,function(a,b){c.on(b,\"click\",function(b){c.stopmp(b).reshow(),c.msg(a,e.hmss[a]),e.hmson(this,a)})}),c.on(d,\"mouseup\",function(){var a=b(\"#\"+h[0]);a&&\"none\"!==a.style.display&&(c.check()||c.close())}).on(d,\"keydown\",function(b){b=b||a.event;var d=b.keyCode;13===d&&c.creation([c.ymd[0],c.ymd[1]+1,c.ymd[2]])})},c.init=function(){c.use(\"need\"),c.use(h[4]+b.defSkin,h[3]),c.skinLink=c.query(\"#\"+h[3])}(),laydate.reset=function(){c.box&&c.elem&&c.follow(c.box)},laydate.now=function(a,b){var d=new Date(0|a?function(a){return 864e5>a?+new Date+864e5*a:a}(parseInt(a)):+new Date);return c.parse([d.getFullYear(),d.getMonth()+1,d.getDate()],[d.getHours(),d.getMinutes(),d.getSeconds()],b)},laydate.skin=function(a){c.skinLink.href=c.getPath+h[4]+a+h[5]}}(window);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/laydate/need/laydate.css",
    "content": "﻿/** \n \n @Name： laydate 核心样式\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\nhtml{_background-image:url(about:blank); _background-attachment:fixed;}\n.laydate_body .laydate_box, .laydate_body .laydate_box *{margin:0; padding:0;}\n.laydate-icon,\n.laydate-icon-default,\n.laydate-icon-danlan,\n.laydate-icon-dahong,\n.laydate-icon-molv{height:22px; line-height:22px; padding-right:20px; border:1px solid #C6C6C6; background-repeat:no-repeat; background-position:right center;  background-color:#fff; outline:0;}\n.laydate-icon-default{ background-image:url(../skins/default/icon.png)}\n.laydate-icon-danlan{border:1px solid #B1D2EC; background-image:url(../skins/danlan/icon.png)}\n.laydate-icon-dahong{background-image:url(../skins/dahong/icon.png)}\n.laydate-icon-molv{background-image:url(../skins/molv/icon.png)}\n.laydate_body .laydate_box{width:240px; font:12px '\\5B8B\\4F53'; z-index:99999999; *margin:-2px 0 0 -2px; *overflow:hidden; _margin:0; _position:absolute!important; background-color:#fff;}\n.laydate_body .laydate_box li{list-style:none;}\n.laydate_body .laydate_box .laydate_void{cursor:text!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{text-decoration:none; blr:expression(this.onFocus=this.blur()); cursor:pointer;}\n.laydate_body .laydate_box a:hover{text-decoration:none;}\n.laydate_body .laydate_box cite, .laydate_body .laydate_box label{position:absolute; width:0; height:0; border-width:5px; border-style:dashed; border-color:transparent; overflow:hidden; cursor:pointer;}\n.laydate_body .laydate_box .laydate_yms, .laydate_body .laydate_box .laydate_time{display:none;}\n.laydate_body .laydate_box .laydate_show{display:block;}\n.laydate_body .laydate_box input{outline:0; font-size:14px; background-color:#fff;}\n.laydate_body .laydate_top{position:relative; height:26px; padding:5px; *width:100%; z-index:99;}\n.laydate_body .laydate_ym{position:relative; float:left; height:24px; cursor:pointer;}\n.laydate_body .laydate_ym input{float:left; height:24px; line-height:24px; text-align:center; border:none; cursor:pointer;}\n.laydate_body .laydate_ym .laydate_yms{position:absolute; left: -1px; top: 24px; height:181px;}\n.laydate_body .laydate_y{width:121px; margin-right:6px;}\n.laydate_body .laydate_y input{width:64px; margin-right:15px;}\n.laydate_body .laydate_y .laydate_yms{width:121px; text-align:center;}\n.laydate_body .laydate_y .laydate_yms a{position:relative; display:block; height:20px;}\n.laydate_body .laydate_y .laydate_yms ul{height:139px; padding:0; *overflow:hidden;}\n.laydate_body .laydate_y .laydate_yms ul li{float:left; width:60px; height:20px; line-height: 20px; text-overflow: ellipsis; overflow: hidden; white-space: nowrap;}\n.laydate_body .laydate_m{width:99px;}\n.laydate_body .laydate_m .laydate_yms{width:99px; padding:0;}\n.laydate_body .laydate_m input{width:42px; margin-right:15px;}\n.laydate_body .laydate_m .laydate_yms span{display:block; float:left; width:42px; margin: 5px 0 0 5px; line-height:24px; text-align:center; _display:inline;}\n.laydate_body .laydate_choose{display:block; float:left; position:relative; width:20px; height:24px;}\n.laydate_body .laydate_choose cite, .laydate_body .laydate_tab cite{left:50%; top:50%;}\n.laydate_body .laydate_chtop cite{margin:-7px 0 0 -5px; border-bottom-style:solid;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{top:50%; margin:-2px 0 0 -5px; border-top-style:solid;}\n.laydate_body .laydate_chprev cite{margin:-5px 0 0 -7px;}\n.laydate_body .laydate_chnext cite{margin:-5px 0 0 -2px;}\n.laydate_body .laydate_ym label{right:28px;}\n.laydate_body .laydate_table{ width:230px; margin:0 5px; border-collapse:collapse; border-spacing:0px; }\n.laydate_body .laydate_table td{width:31px; height:19px; line-height:19px; text-align: center; cursor:pointer; font-size: 12px;}\n.laydate_body .laydate_table thead{height:22px; line-height:22px;}\n.laydate_body .laydate_table thead th{font-weight:400; font-size:12px; text-align:center;}\n.laydate_body .laydate_bottom{position:relative; height:22px; line-height:20px; padding:5px; font-size:12px;}\n.laydate_body .laydate_bottom #laydate_hms{position: relative; z-index: 1; float:left; }\n.laydate_body .laydate_time{ position:absolute; left:5px; bottom: 26px; width:129px; height:125px; *overflow:hidden;}\n.laydate_body .laydate_time .laydate_hmsno{ padding:5px 0 0 5px;}\n.laydate_body .laydate_time .laydate_hmsno span{display:block; float:left; width:24px; height:19px; line-height:19px; text-align:center; cursor:pointer; *margin-bottom:-5px;}\n.laydate_body .laydate_time1{width:228px; height:154px;}\n.laydate_body .laydate_time1 .laydate_hmsno{padding: 6px 0 0 8px;}\n.laydate_body .laydate_time1 .laydate_hmsno span{width:21px; height:20px; line-height:20px;}\n.laydate_body .laydate_msg{left:49px; bottom:67px; width:141px; height:auto; overflow: hidden;}\n.laydate_body .laydate_msg p{padding:5px 10px;}\n.laydate_body .laydate_bottom li{float:left; height:20px; line-height:20px; border-right:none; font-weight:900;}\n.laydate_body .laydate_bottom .laydate_sj{width:33px; text-align:center; font-weight:400;}\n.laydate_body .laydate_bottom input{float:left; width:21px; height:20px; line-height:20px; border:none; text-align:center; cursor:pointer; font-size:12px;  font-weight:400;}\n.laydate_body .laydate_bottom .laydte_hsmtex{height:20px; line-height:20px; text-align:center;}\n.laydate_body .laydate_bottom .laydte_hsmtex span{position:absolute; width:20px; top:0; right:0px; cursor:pointer;}\n.laydate_body .laydate_bottom .laydte_hsmtex span:hover{font-size:14px;}\n.laydate_body .laydate_bottom .laydate_btn{position:absolute; right:5px; top:5px;}\n.laydate_body .laydate_bottom .laydate_btn a{float:left; height:20px; padding:0 6px; _padding:0 5px;}\n.laydate_body .laydate_bottom .laydate_v{position:absolute; left:10px; top:6px; font-family:Courier; z-index:0;}\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/laydate/skins/dahong/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：大红\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#F32043!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #D91600; background-color:#D91600}\n.laydate_body .laydate_ym{border:1px solid #D91600; background-color:#D91600;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #D91600; background-color:#D91600; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #D91600;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #D91600; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #D91600;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #D91600;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#F54766;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#333;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#333;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#333;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#F54766; color:#fff;}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/laydate/skins/default/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：默认\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #C6C6C6; background-image:url(icon.png)}\n\n.laydate_body .laydate_box,\n.laydate_body .laydate_ym,\n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_table,\n.laydate_body .laydate_table td,\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time,\n.laydate_body .laydate_bottom .laydate_btn a{border:1px solid #ccc;}\n\n.laydate_body .laydate_y .laydate_yms a,\n.laydate_body .laydate_choose,\n.laydate_body .laydate_table thead,\n.laydate_body .laydate_bottom .laydte_hsmtex{background-color:#F6F6F6;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#333;}\n.laydate_body .laydate_box input{color:#333;}\n.laydate_body .laydate_box .laydate_void{color:#ccc!important; /*text-decoration:line-through;*/}\n.laydate_body .laydate_box .laydate_void:hover{background-color:#fff!important}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#333;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#eee!important;}\n.laydate_body .laydate_top{border-top:1px solid #C6C6C6;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #C6C6C6; background-color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #C6C6C6; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #C6C6C6;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#fff;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#666;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#666;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#666;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#666;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_sj{border-right:1px solid #C6C6C6; background-color:#F6F6F6;}\n.laydate_body .laydate_bottom input{background-color:#fff;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #C6C6C6;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border-right:none; background-color:#F6F6F6;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{color:#000; background-color:#fff;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover{background-color:#F3F3F3}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/laydate/skins/molv/laydate.css",
    "content": "﻿/** \n \n @Name： laydate皮肤：墨绿\n @Author：贤心\n @Site：http://sentsin.com/layui/laydate\n \n**/\n\n.laydate-icon{border:1px solid #ccc; background-image:url(icon.png)}\n\n.laydate_body .laydate_bottom #laydate_hms,\n.laydate_body .laydate_time{border:1px solid #ccc;}\n\n.laydate_body .laydate_box, \n.laydate_body .laydate_ym .laydate_yms,\n.laydate_body .laydate_time{box-shadow: 2px 2px 5px rgba(0,0,0,.1);}\n\n.laydate_body .laydate_box{border-top:none; border-bottom:none; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_box input{background:none!important; color:#fff;}\n.laydate_body .laydate_box .laydate_void{color:#00E8D7!important;}\n.laydate_body .laydate_box a, .laydate_body .laydate_box a:hover{color:#00625A;}\n.laydate_body .laydate_box a:hover{color:#666;}\n.laydate_body .laydate_click{background-color:#009F95!important; color:#fff!important;}\n.laydate_body .laydate_top{border-top:1px solid #009F95; background-color:#009F95}\n.laydate_body .laydate_ym{border:1px solid #009F95; background-color:#009F95;}\n.laydate_body .laydate_ym .laydate_yms{border:1px solid #009F95; background-color:#009F95; color:#fff;}\n.laydate_body .laydate_y .laydate_yms a{border-bottom:1px solid #009F95;}\n.laydate_body .laydate_y .laydate_yms .laydate_chdown{border-top:1px solid #009F95; border-bottom:none;}\n.laydate_body .laydate_choose{border-left:1px solid #009F95;}\n.laydate_body .laydate_chprev{border-left:none; border-right:1px solid #009F95;}\n.laydate_body .laydate_choose:hover, \n.laydate_body .laydate_y .laydate_yms a:hover{background-color:#00C1B3;}\n.laydate_body .laydate_chtop cite{border-bottom-color:#fff;}\n.laydate_body .laydate_chdown cite, .laydate_body .laydate_ym label{border-top-color:#fff;}\n.laydate_body .laydate_chprev cite{border-right-style:solid; border-right-color:#fff;}\n.laydate_body .laydate_chnext cite{border-left-style:solid; border-left-color:#fff;}\n.laydate_body .laydate_table{width: 240px!important; margin: 0!important; border:1px solid #ccc; border-top:none; border-bottom:none;}\n.laydate_body .laydate_table td{border:none;  height:21px!important; line-height:21px!important; background-color:#fff; color:#00625A;}\n.laydate_body .laydate_table .laydate_nothis{color:#999;}\n.laydate_body .laydate_table thead{border-bottom:1px solid #ccc; height:21px!important; line-height:21px!important;}\n.laydate_body .laydate_table thead th{}\n.laydate_body .laydate_bottom{border:1px solid #ccc; border-top:none;}\n.laydate_body .laydate_bottom #laydate_hms{background-color:#fff;}\n.laydate_body .laydate_time{background-color:#fff;}\n.laydate_body .laydate_time1{width: 226px!important; height: 152px!important;}\n.laydate_body .laydate_bottom .laydate_sj{width:31px!important; border-right:1px solid #ccc; background-color:#fff;}\n.laydate_body .laydate_bottom input{background-color:#fff; color:#00625A;}\n.laydate_body .laydate_bottom .laydte_hsmtex{border-bottom:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_btn{border-right:1px solid #ccc;}\n.laydate_body .laydate_bottom .laydate_v{color:#999}\n.laydate_body .laydate_bottom .laydate_btn a{border: 1px solid #ccc; border-right:none; background-color:#fff;}\n.laydate_body .laydate_bottom .laydate_btn a:hover{background-color:#F6F6F6; color:#00625A;}\n\n.laydate_body .laydate_m .laydate_yms span:hover,\n.laydate_body .laydate_time .laydate_hmsno span:hover,\n.laydate_body .laydate_y .laydate_yms ul li:hover,\n.laydate_body .laydate_table td:hover{background-color:#00C1B3; color:#fff;}\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/laydate-v1.1/更新日志.txt",
    "content": "http://sentsin.com/layui/laydate/\n־http://say.sentsin.com/say-922.html\n\n1.1־2014-06-25\n# layer.now(timestamp,format)ֶ֧Ͳtimestampֽ֧ǰ죬ͽĺ죬һЧʱ,򷵻ظʱӦڡʲôû룬򷵻صǰʱڡformatΪڸʽΪʱĬϵġ-ָ\n# ŻĴ롣\n# ֺѡĳ10*6С\n# ޸δжʽ\n# ޸ҳ¼Уlaydateɵִеbug\n# Ƥ[ī]\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/layim/layim.css",
    "content": "/*\n\n @Name: layim WebIM 1.0.0\n @Author：贤心（子涵修改）\n @Date: 2014-04-25\n @Blog: http://sentsin.com\n\n */\nbody,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,input,button,textarea,p,blockquote,th,td,form{margin:0; padding:0;}\ninput,button,textarea,select,optgroup,option{font-family:inherit; font-size:inherit; font-style:inherit; font-weight:inherit; outline: 0;}\nli{list-style:none;}\n.xxim_icon, .xxim_main i, .layim_chatbox i{position:absolute;}\n.loading{background:url(loading.gif) no-repeat center center;}\n.layim_chatbox a, .layim_chatbox a:hover{color:#343434; text-decoration:none; }\n.layim_zero{position:absolute; width:0; height:0; border-style:dashed; border-color:transparent; overflow:hidden;}\n\n.xxim_main{position:fixed; right:1px; bottom:1px; width:230px; border:1px solid #BEBEBE; background-color:#fff; font-size:12px; box-shadow: 0 0 10px rgba(0,0,0,.2); z-index:99999999}\n.layim_chatbox textarea{resize:none;}\n.xxim_main em, .xxim_main i, .layim_chatbox em, .layim_chatbox i{font-style:normal; font-weight:400;}\n.xxim_main h5{font-size:100%; font-weight:400;}\n\n/* 搜索栏 */\n.xxim_search{position:relative; padding-left:40px; height:40px; border-bottom:1px solid #DCDCDC; background-color:#fff;}\n.xxim_search i{left:10px; top:12px; width:16px; height:16px;font-size: 16px;color:#999;}\n.xxim_search input{border:none; background:none; width: 180px; margin-top:10px; line-height:20px;}\n.xxim_search span{display:none; position:absolute; right:10px; top:10px; height:18px; line-height:18px;width:18px;text-align: center;background-color:#AFAFAF; color:#fff; cursor:pointer; border-radius:2px; font-size:12px; font-weight:900;}\n.xxim_search span:hover{background-color:#FCBE00;}\n\n/* 主面板tab */\n.xxim_tabs{height:45px; border-bottom:1px solid #DBDBDB; background-color:#F4F4F4; font-size:0;}\n.xxim_tabs span{position:relative; display:inline-block; *display:inline; *zoom:1; vertical-align:top; width:76px; height:45px; border-right:1px solid #DBDBDB; cursor:pointer; font-size:12px;}\n.xxim_tabs span i{top:12px; left:50%; width:20px; margin-left:-10px; height:20px;font-size:20px;color:#ccc;}\n.xxim_tabs .xxim_tabnow{height:46px; background-color:#fff;}\n.xxim_tabs .xxim_tabnow i{color:#1ab394;}\n.xxim_tabs .xxim_latechat{border-right:none;}\n.xxim_tabs .xxim_tabfriend i{width:14px; margin-left:-7px;}\n\n/* 主面板列表 */\n.xxim_list{display:none; height:350px; padding:5px 0; overflow:hidden;}\n.xxim_list:hover{ overflow-y:auto;}\n.xxim_list h5{position:relative; padding-left:32px; height:26px; line-height:26px; cursor:pointer; color:#000; font-size:0;}\n.xxim_list h5 span{display:inline-block; *display:inline; *zoom:1; vertical-align:top; max-width:140px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap; font-size:12px;}\n.xxim_list h5 i{left:15px; top:8px; width:10px; height:10px;font-size:10px;color:#666;}\n.xxim_list h5 *{font-size:12px;}\n.xxim_list .xxim_chatlist{display:none;}\n.xxim_list .xxim_liston h5 i{width:8px; height:7px;}\n.xxim_list .xxim_liston .xxim_chatlist{display:block;}\n.xxim_chatlist {}\n.xxim_chatlist li{position:relative; height:40px; line-height:30px; padding:5px 10px; font-size:0; cursor:pointer;}\n.xxim_chatlist li:hover{background-color:#F2F4F8}\n.xxim_chatlist li *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; font-size:12px;}\n.xxim_chatlist li span{padding-left:10px; max-width:120px;  overflow:hidden; text-overflow: ellipsis; white-space:nowrap;}\n.xxim_chatlist li img{width:30px; height:30px;}\n.xxim_chatlist li .xxim_time{position:absolute; right:10px; color:#999;}\n.xxim_list .xxim_errormsg{text-align:center; margin:50px 0; color:#999;}\n.xxim_searchmain{position:absolute; width:230px; height:491px; left:0; top:41px; z-index:10; background-color:#fff;}\n\n/* 主面板底部 */\n.xxim_bottom{height:34px; border-top:1px solid #D0DCF3; background-color:#F2F4F8;}\n.xxim_expend{border-left:1px solid #D0DCF3; border-bottom:1px solid #D0DCF3;}\n.xxim_bottom li{position:relative; width:50px; height:32px; line-height:32px; float:left; border-right:1px solid #D0DCF3;  cursor:pointer;}\n.xxim_bottom li i{ top:9px;}\n.xxim_bottom .xxim_hide{border-right:none;}\n.xxim_bottom .xxim_online{width:72px; padding-left:35px;}\n.xxim_online i{left:13px; width:14px; height:14px;font-size:14px;color:#FFA00A;}\n.xxim_setonline{display:none; position:absolute; left:-79px; bottom:-1px;  border:1px solid #DCDCDC; background-color:#fff;}\n.xxim_setonline span{position:relative; display:block; width:32px;width: 77px; padding:0 10px 0 35px;}\n.xxim_setonline span:hover{background-color:#F2F4F8;}\n.xxim_offline .xxim_nowstate, .xxim_setoffline i{color:#999;}\n.xxim_mymsg i{left:18px; width:14px; height:14px;font-size: 14px;}\n.xxim_mymsg a{position:absolute; left:0; top:0; width:50px; height:32px;}\n.xxim_seter i{left:18px; width:14px; height:14px;font-size: 14px;}\n.xxim_hide i{left:18px; width:14px; height:14px;font-size: 14px;}\n.xxim_show i{}\n.xxim_bottom .xxim_on{position:absolute; left:-17px; top:50%; width:16px;text-align: center;color:#999;line-height: 97px; height:97px; margin-top:-49px;border:solid 1px #BEBEBE;border-right: none; background:#F2F4F8;}\n.xxim_bottom .xxim_off{}\n\n/* 聊天窗口 */\n.layim_chatbox{width:620px; border:1px solid #BEBEBE; background-color:#fff; font-size:12px; box-shadow: 0 0 10px rgba(0,0,0,.2);}\n.layim_chatbox h6{position:relative; height:40px; border-bottom:1px solid #D9D9D9; background-color:#FCFDFA}\n.layim_move{position:absolute; height:40px; width: 620px; z-index:0;}\n.layim_face{position:absolute; bottom:-1px; left:10px; width:64px; height:64px;padding:1px;background: #fff; border:1px solid #ccc;}\n.layim_face img{width:60px; height:60px;}\n.layim_names{position:absolute; left:90px; max-width:300px; line-height:40px; color:#000; overflow:hidden; text-overflow: ellipsis; white-space:nowrap; font-size:14px;}\n.layim_rightbtn{position:absolute; right:15px; top:12px; font-size:20px;}\n.layim_rightbtn i{position:relative; width:16px; height:16px; display:inline-block; *display:inline; *zoom:1; vertical-align:top; cursor:pointer; transition: all .3s;text-align: center;line-height: 16px;}\n.layim_rightbtn .layim_close{background: #FFA00A;color:#fff;}\n.layim_rightbtn .layim_close:hover{-webkit-transform: rotate(180deg); -moz-transform: rotate(180deg);}\n.layim_rightbtn .layer_setmin{margin-right:5px;color:#999;font-size:14px;font-weight: 700;}\n.layim_chat, .layim_chatmore,.layim_groups{height:450px; overflow:hidden;}\n.layim_chatmore{display:none; float:left; width:135px; border-right:1px solid #BEBEBE; background-color:#F2F2F2}\n.layim_chatlist li, .layim_groups li{position:relative; height:30px; line-height:30px; padding:0 10px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap; cursor:pointer;}\n.layim_chatlist li{padding:0 20px 0 10px;}\n.layim_chatlist li:hover{background-color:#E3E3E3;}\n.layim_chatlist li span{display:inline-block; *display:inline; *zoom:1; vertical-align:top; width:90px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap;}\n.layim_chatlist li em{display:none; position:absolute; top:6px; right:10px; height:18px; line-height:18px;width:18px;text-align: center;font-size:14px;font-weight:900; border-radius:3px;}\n.layim_chatlist li em:hover{background-color: #FCBE00; color:#fff;}\n.layim_chatlist .layim_chatnow,.layim_chatlist .layim_chatnow:hover{/*border-top:1px solid #D9D9D9; border-bottom:1px solid #D9D9D9;*/ background-color:#fff;}\n.layim_chat{}\n.layim_chatarea{height:280px;}\n.layim_chatview{display:none; height:280px; overflow:hidden;}\n.layim_chatmore:hover, .layim_groups:hover, .layim_chatview:hover{overflow-y:auto;}\n.layim_chatview li{margin-bottom:10px; clear:both; *zoom:1;}\n.layim_chatview li:after{content:'\\20'; clear:both; *zoom:1; display:block; height:0;}\n\n.layim_chatthis{display:block;}\n.layim_chatuser{float:left; padding:15px; font-size:0;}\n.layim_chatuser *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; line-height:30px; font-size:12px; padding-right:10px;}\n.layim_chatuser img{width:30px; height:30px;padding-right: 0;margin-right: 15px;}\n.layim_chatuser .layim_chatname{max-width:230px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap;}\n.layim_chatuser .layim_chattime{color:#999; padding-left:10px;}\n.layim_chatsay{position:relative; float:left; margin:0 15px; padding:10px; line-height:20px; background-color:#F3F3F3; border-radius:3px; clear:both;}\n.layim_chatsay .layim_zero{left:5px; top:-8px; border-width:8px; border-right-style:solid; border-right-color:#F3F3F3;}\n.layim_chateme .layim_chatuser{float:right;}\n.layim_chateme .layim_chatuser *{padding-right:0; padding-left:10px;}\n.layim_chateme .layim_chatuser img{margin-left:15px;padding-left: 0;}\n.layim_chateme .layim_chatsay .layim_zero{left:auto; right:10px;}\n.layim_chateme .layim_chatuser .layim_chattime{padding-left:0; padding-right:10px;}\n.layim_chateme .layim_chatsay{float:right; background-color:#EBFBE3}\n.layim_chateme .layim_zero{border-right-color:#EBFBE3;}\n.layim_groups{display:none; float:right; width:130px; border-left:1px solid #D9D9D9; background-color:#fff;}\n.layim_groups ul{display:none;}\n.layim_groups ul.layim_groupthis{display:block;}\n.layim_groups li *{display:inline-block; *display:inline; *zoom:1; vertical-align:top; margin-right:10px;}\n.layim_groups li img{width:20px; height:20px; margin-top:5px;}\n.layim_groups li span{max-width:80px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap;}\n.layim_groups li:hover{background-color:#F3F3F3;}\n.layim_groups .layim_errors{text-align:center; color:#999;}\n.layim_tool{position:relative; height:35px; line-height:35px; padding-left:10px; background-color:#F3F3F3;}\n.layim_tool i{position:relative; top:10px; display:inline-block; *display:inline; *zoom:1; vertical-align:top; width:16px; height:16px; margin-right:10px; cursor:pointer;font-size:16px;color:#999;font-weight: 700;}\n.layim_tool i:hover{color:#FFA00A;}\n.layim_tool .layim_seechatlog{position:absolute; right:15px;}\n.layim_tool .layim_seechatlog i{}\n.layim_write{display:block; border:none; width:98%; height:90px; line-height:20px; margin:5px auto 0;}\n.layim_send{position:relative; height:40px; background-color:#F3F3F3;}\n.layim_sendbtn{position:absolute; height:26px; line-height:26px; right:10px; top:8px; padding:0 40px 0 20px; background-color:#FFA00A; color:#fff; border-radius:3px; cursor:pointer;}\n.layim_enter{position:absolute; right:0; border-left:1px solid #FFB94F; width:24px; height:26px;}\n.layim_enter:hover{background-color:#E68A00; border-radius:0 3px 3px 0;}\n.layim_enter .layim_zero{left:7px; top:11px; border-width:5px; border-top-style:solid; border-top-color:#FFE0B3;}\n.layim_sendtype{display:none; position:absolute; right:10px; bottom:37px; border:1px solid #D9D9D9; background-color:#fff; text-align:left;}\n.layim_sendtype span{display:block; line-height:24px; padding:0 10px 0 25px; cursor:pointer;}\n.layim_sendtype span:hover{background-color:#F3F3F3;}\n.layim_sendtype span i{left:5px;}\n\n.layim_min{display:none; position:absolute; left:-190px; bottom:-1px; width:160px; height:32px; line-height:32px; padding:0 10px; overflow:hidden; text-overflow: ellipsis; white-space:nowrap; border:1px solid #ccc; box-shadow: 0 0 5px rgba(0,0,75,.2); background-color:#FCFDFA; cursor:pointer;}\n\n\n\n\n\n\n\n\n\n\n\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/layim/layim.js",
    "content": "/*\n\n @Name: layui WebIM 1.0.0\n @Author：贤心\n @Date: 2014-04-25\n @Blog: http://sentsin.com\n\n */\n\n;!function(win, undefined){\n\nvar config = {\n    msgurl: 'mailbox.html?msg=',\n    chatlogurl: 'mailbox.html?user=',\n    aniTime: 200,\n    right: -232,\n    api: {\n        friend: 'js/plugins/layer/layim/data/friend.json', //好友列表接口\n        group: 'js/plugins/layer/layim/data/group.json', //群组列表接口\n        chatlog: 'js/plugins/layer/layim/data/chatlog.json', //聊天记录接口\n        groups: 'js/plugins/layer/layim/data/groups.json', //群组成员接口\n        sendurl: '' //发送消息接口\n    },\n    user: { //当前用户信息\n        name: '游客',\n        face: 'img/a1.jpg'\n    },\n\n    //自动回复内置文案，也可动态读取数据库配置\n    autoReplay: [\n        '您好，我现在有事不在，一会再和您联系。',\n        '你没发错吧？',\n        '洗澡中，请勿打扰，偷窥请购票，个体四十，团体八折，订票电话：一般人我不告诉他！',\n        '你好，我是主人的美女秘书，有什么事就跟我说吧，等他回来我会转告他的。',\n        '我正在拉磨，没法招呼您，因为我们家毛驴去动物保护协会把我告了，说我剥夺它休产假的权利。',\n        '<（@￣︶￣@）>',\n        '你要和我说话？你真的要和我说话？你确定自己想说吗？你一定非说不可吗？那你说吧，这是自动回复。',\n        '主人正在开机自检，键盘鼠标看好机会出去凉快去了，我是他的电冰箱，我打字比较慢，你慢慢说，别急……',\n        '(*^__^*) 嘻嘻，是贤心吗？'\n    ],\n\n\n    chating: {},\n    hosts: (function(){\n        var dk = location.href.match(/\\:\\d+/);\n        dk = dk ? dk[0] : '';\n        return 'http://' + document.domain + dk + '/';\n    })(),\n    json: function(url, data, callback, error){\n        return $.ajax({\n            type: 'POST',\n            url: url,\n            data: data,\n            dataType: 'json',\n            success: callback,\n            error: error\n        });\n    },\n    stopMP: function(e){\n        e ? e.stopPropagation() : e.cancelBubble = true;\n    }\n}, dom = [$(window), $(document), $('html'), $('body')], xxim = {};\n\n//主界面tab\nxxim.tabs = function(index){\n    var node = xxim.node;\n    node.tabs.eq(index).addClass('xxim_tabnow').siblings().removeClass('xxim_tabnow');\n    node.list.eq(index).show().siblings('.xxim_list').hide();\n    if(node.list.eq(index).find('li').length === 0){\n        xxim.getDates(index);\n    }\n};\n\n//节点\nxxim.renode = function(){\n    var node = xxim.node = {\n        tabs: $('#xxim_tabs>span'),\n        list: $('.xxim_list'),\n        online: $('.xxim_online'),\n        setonline: $('.xxim_setonline'),\n        onlinetex: $('#xxim_onlinetex'),\n        xximon: $('#xxim_on'),\n        layimFooter: $('#xxim_bottom'),\n        xximHide: $('#xxim_hide'),\n        xximSearch: $('#xxim_searchkey'),\n        searchMian: $('#xxim_searchmain'),\n        closeSearch: $('#xxim_closesearch'),\n        layimMin: $('#layim_min')\n    };\n};\n\n//主界面缩放\nxxim.expend = function(){\n    var node = xxim.node;\n    if(xxim.layimNode.attr('state') !== '1'){\n        xxim.layimNode.stop().animate({right: config.right}, config.aniTime, function(){\n            node.xximon.addClass('xxim_off');\n            try{\n                localStorage.layimState = 1;\n            }catch(e){}\n            xxim.layimNode.attr({state: 1});\n            node.layimFooter.addClass('xxim_expend').stop().animate({marginLeft: config.right}, config.aniTime/2);\n            node.xximHide.addClass('xxim_show');\n        });\n    } else {\n        xxim.layimNode.stop().animate({right: 1}, config.aniTime, function(){\n            node.xximon.removeClass('xxim_off');\n            try{\n                localStorage.layimState = 2;\n            }catch(e){}\n            xxim.layimNode.removeAttr('state');\n            node.layimFooter.removeClass('xxim_expend');\n            node.xximHide.removeClass('xxim_show');\n        });\n        node.layimFooter.stop().animate({marginLeft: 0}, config.aniTime);\n    }\n};\n\n//初始化窗口格局\nxxim.layinit = function(){\n    var node = xxim.node;\n\n    //主界面\n    try{\n        /*\n        if(!localStorage.layimState){\n            config.aniTime = 0;\n            localStorage.layimState = 1;\n        }\n        */\n        if(localStorage.layimState === '1'){\n            xxim.layimNode.attr({state: 1}).css({right: config.right});\n            node.xximon.addClass('xxim_off');\n            node.layimFooter.addClass('xxim_expend').css({marginLeft: config.right});\n            node.xximHide.addClass('xxim_show');\n        }\n    }catch(e){\n        //layer.msg(e.message, 5, -1);\n    }\n};\n\n//聊天窗口\nxxim.popchat = function(param){\n    var node = xxim.node, log = {};\n\n    log.success = function(layero){\n        layer.setMove();\n\n        xxim.chatbox = layero.find('#layim_chatbox');\n        log.chatlist = xxim.chatbox.find('.layim_chatmore>ul');\n\n        log.chatlist.html('<li data-id=\"'+ param.id +'\" type=\"'+ param.type +'\"  id=\"layim_user'+ param.type + param.id +'\"><span>'+ param.name +'</span><em>×</em></li>')\n        xxim.tabchat(param, xxim.chatbox);\n\n        //最小化聊天窗\n        xxim.chatbox.find('.layer_setmin').on('click', function(){\n            var indexs = layero.attr('times');\n            layero.hide();\n            node.layimMin.text(xxim.nowchat.name).show();\n        });\n\n        //关闭窗口\n        xxim.chatbox.find('.layim_close').on('click', function(){\n            var indexs = layero.attr('times');\n            layer.close(indexs);\n            xxim.chatbox = null;\n            config.chating = {};\n            config.chatings = 0;\n        });\n\n        //关闭某个聊天\n        log.chatlist.on('mouseenter', 'li', function(){\n            $(this).find('em').show();\n        }).on('mouseleave', 'li', function(){\n            $(this).find('em').hide();\n        });\n        log.chatlist.on('click', 'li em', function(e){\n            var parents = $(this).parent(), dataType = parents.attr('type');\n            var dataId = parents.attr('data-id'), index = parents.index();\n            var chatlist = log.chatlist.find('li'), indexs;\n\n            config.stopMP(e);\n\n            delete config.chating[dataType + dataId];\n            config.chatings--;\n\n            parents.remove();\n            $('#layim_area'+ dataType + dataId).remove();\n            if(dataType === 'group'){\n                $('#layim_group'+ dataType + dataId).remove();\n            }\n\n            if(parents.hasClass('layim_chatnow')){\n                if(index === config.chatings){\n                    indexs = index - 1;\n                } else {\n                    indexs = index + 1;\n                }\n                xxim.tabchat(config.chating[chatlist.eq(indexs).attr('type') + chatlist.eq(indexs).attr('data-id')]);\n            }\n\n            if(log.chatlist.find('li').length === 1){\n                log.chatlist.parent().hide();\n            }\n        });\n\n        //聊天选项卡\n        log.chatlist.on('click', 'li', function(){\n            var othis = $(this), dataType = othis.attr('type'), dataId = othis.attr('data-id');\n            xxim.tabchat(config.chating[dataType + dataId]);\n        });\n\n        //发送热键切换\n        log.sendType = $('#layim_sendtype'), log.sendTypes = log.sendType.find('span');\n        $('#layim_enter').on('click', function(e){\n            config.stopMP(e);\n            log.sendType.show();\n        });\n        log.sendTypes.on('click', function(){\n            log.sendTypes.find('i').text('')\n            $(this).find('i').text('√');\n        });\n\n        xxim.transmit();\n    };\n\n    log.html = '<div class=\"layim_chatbox\" id=\"layim_chatbox\">'\n            +'<h6>'\n            +'<span class=\"layim_move\"></span>'\n            +'    <a href=\"'+ param.url +'\" class=\"layim_face\" target=\"_blank\"><img src=\"'+ param.face +'\" ></a>'\n            +'    <a href=\"'+ param.url +'\" class=\"layim_names\" target=\"_blank\">'+ param.name +'</a>'\n            +'    <span class=\"layim_rightbtn\">'\n            +'        <i class=\"layer_setmin\">—</i>'\n            +'        <i class=\"layim_close\">&times;</i>'\n            +'    </span>'\n            +'</h6>'\n            +'<div class=\"layim_chatmore\" id=\"layim_chatmore\">'\n            +'    <ul class=\"layim_chatlist\"></ul>'\n            +'</div>'\n            +'<div class=\"layim_groups\" id=\"layim_groups\"></div>'\n            +'<div class=\"layim_chat\">'\n            +'    <div class=\"layim_chatarea\" id=\"layim_chatarea\">'\n            +'        <ul class=\"layim_chatview layim_chatthis\"  id=\"layim_area'+ param.type + param.id +'\"></ul>'\n            +'    </div>'\n            +'    <div class=\"layim_tool\">'\n            +'        <i class=\"layim_addface fa fa-meh-o\" title=\"发送表情\"></i>'\n            +'        <a href=\"javascript:;\"><i class=\"layim_addimage fa fa-picture-o\" title=\"上传图片\"></i></a>'\n            +'        <a href=\"javascript:;\"><i class=\"layim_addfile fa fa-paperclip\" title=\"上传附件\"></i></a>'\n            +'        <a href=\"\" target=\"_blank\" class=\"layim_seechatlog\"><i class=\"fa fa-comment-o\"></i>聊天记录</a>'\n            +'    </div>'\n            +'    <textarea class=\"layim_write\" id=\"layim_write\"></textarea>'\n            +'    <div class=\"layim_send\">'\n            +'        <div class=\"layim_sendbtn\" id=\"layim_sendbtn\">发送<span class=\"layim_enter\" id=\"layim_enter\"><em class=\"layim_zero\"></em></span></div>'\n            +'        <div class=\"layim_sendtype\" id=\"layim_sendtype\">'\n            +'            <span><i>√</i>按Enter键发送</span>'\n            +'            <span><i></i>按Ctrl+Enter键发送</span>'\n            +'        </div>'\n            +'    </div>'\n            +'</div>'\n            +'</div>';\n\n    if(config.chatings < 1){\n        $.layer({\n            type: 1,\n            border: [0],\n            title: false,\n            shade: [0],\n            area: ['620px', '493px'],\n            move: '.layim_chatbox .layim_move',\n            moveType: 1,\n            closeBtn: false,\n            offset: [(($(window).height() - 493)/2)+'px', ''],\n            page: {\n                html: log.html\n            }, success: function(layero){\n                log.success(layero);\n            }\n        })\n    } else {\n        log.chatmore = xxim.chatbox.find('#layim_chatmore');\n        log.chatarea = xxim.chatbox.find('#layim_chatarea');\n\n        log.chatmore.show();\n\n        log.chatmore.find('ul>li').removeClass('layim_chatnow');\n        log.chatmore.find('ul').append('<li data-id=\"'+ param.id +'\" type=\"'+ param.type +'\" id=\"layim_user'+ param.type + param.id +'\" class=\"layim_chatnow\"><span>'+ param.name +'</span><em>×</em></li>');\n\n        log.chatarea.find('.layim_chatview').removeClass('layim_chatthis');\n        log.chatarea.append('<ul class=\"layim_chatview layim_chatthis\" id=\"layim_area'+ param.type + param.id +'\"></ul>');\n\n        xxim.tabchat(param);\n    }\n\n    //群组\n    log.chatgroup = xxim.chatbox.find('#layim_groups');\n    if(param.type === 'group'){\n        log.chatgroup.find('ul').removeClass('layim_groupthis');\n        log.chatgroup.append('<ul class=\"layim_groupthis\" id=\"layim_group'+ param.type + param.id +'\"></ul>');\n        xxim.getGroups(param);\n    }\n    //点击群员切换聊天窗\n    log.chatgroup.on('click', 'ul>li', function(){\n        xxim.popchatbox($(this));\n    });\n};\n\n//定位到某个聊天队列\nxxim.tabchat = function(param){\n    var node = xxim.node, log = {}, keys = param.type + param.id;\n    xxim.nowchat = param;\n\n    xxim.chatbox.find('#layim_user'+ keys).addClass('layim_chatnow').siblings().removeClass('layim_chatnow');\n    xxim.chatbox.find('#layim_area'+ keys).addClass('layim_chatthis').siblings().removeClass('layim_chatthis');\n    xxim.chatbox.find('#layim_group'+ keys).addClass('layim_groupthis').siblings().removeClass('layim_groupthis');\n\n    xxim.chatbox.find('.layim_face>img').attr('src', param.face);\n    xxim.chatbox.find('.layim_face, .layim_names').attr('href', param.href);\n    xxim.chatbox.find('.layim_names').text(param.name);\n\n    xxim.chatbox.find('.layim_seechatlog').attr('href', config.chatlogurl + param.id);\n\n    log.groups = xxim.chatbox.find('.layim_groups');\n    if(param.type === 'group'){\n        log.groups.show();\n    } else {\n        log.groups.hide();\n    }\n\n    $('#layim_write').focus();\n\n};\n\n//弹出聊天窗\nxxim.popchatbox = function(othis){\n    var node = xxim.node, dataId = othis.attr('data-id'), param = {\n        id: dataId, //用户ID\n        type: othis.attr('type'),\n        name: othis.find('.xxim_onename').text(),  //用户名\n        face: othis.find('.xxim_oneface').attr('src'),  //用户头像\n        href: 'profile.html?user=' + dataId //用户主页\n    }, key = param.type + dataId;\n    if(!config.chating[key]){\n        xxim.popchat(param);\n        config.chatings++;\n    } else {\n        xxim.tabchat(param);\n    }\n    config.chating[key] = param;\n\n    var chatbox = $('#layim_chatbox');\n    if(chatbox[0]){\n        node.layimMin.hide();\n        chatbox.parents('.xubox_layer').show();\n    }\n};\n\n//请求群员\nxxim.getGroups = function(param){\n    var keys = param.type + param.id, str = '',\n    groupss = xxim.chatbox.find('#layim_group'+ keys);\n    groupss.addClass('loading');\n    config.json(config.api.groups, {}, function(datas){\n        if(datas.status === 1){\n            var ii = 0, lens = datas.data.length;\n            if(lens > 0){\n                for(; ii < lens; ii++){\n                    str += '<li data-id=\"'+ datas.data[ii].id +'\" type=\"one\"><img src=\"'+ datas.data[ii].face +'\" class=\"xxim_oneface\"><span class=\"xxim_onename\">'+ datas.data[ii].name +'</span></li>';\n                }\n            } else {\n                str = '<li class=\"layim_errors\">没有群员</li>';\n            }\n\n        } else {\n            str = '<li class=\"layim_errors\">'+ datas.msg +'</li>';\n        }\n        groupss.removeClass('loading');\n        groupss.html(str);\n    }, function(){\n        groupss.removeClass('loading');\n        groupss.html('<li class=\"layim_errors\">请求异常</li>');\n    });\n};\n\n//消息传输\nxxim.transmit = function(){\n    var node = xxim.node, log = {};\n    node.sendbtn = $('#layim_sendbtn');\n    node.imwrite = $('#layim_write');\n\n    //发送\n    log.send = function(){\n        var data = {\n            content: node.imwrite.val(),\n            id: xxim.nowchat.id,\n            sign_key: '', //密匙\n            _: +new Date\n        };\n\n        if(data.content.replace(/\\s/g, '') === ''){\n            layer.tips('说点啥呗！', '#layim_write', 2);\n            node.imwrite.focus();\n        } else {\n            //此处皆为模拟\n            var keys = xxim.nowchat.type + xxim.nowchat.id;\n\n            //聊天模版\n            log.html = function(param, type){\n                return '<li class=\"'+ (type === 'me' ? 'layim_chateme' : '') +'\">'\n                    +'<div class=\"layim_chatuser\">'\n                        + function(){\n                            if(type === 'me'){\n                                return '<span class=\"layim_chattime\">'+ param.time +'</span>'\n                                       +'<span class=\"layim_chatname\">'+ param.name +'</span>'\n                                       +'<img src=\"'+ param.face +'\" >';\n                            } else {\n                                return '<img src=\"'+ param.face +'\" >'\n                                       +'<span class=\"layim_chatname\">'+ param.name +'</span>'\n                                       +'<span class=\"layim_chattime\">'+ param.time +'</span>';\n                            }\n                        }()\n                    +'</div>'\n                    +'<div class=\"layim_chatsay\">'+ param.content +'<em class=\"layim_zero\"></em></div>'\n                +'</li>';\n            };\n\n            log.imarea = xxim.chatbox.find('#layim_area'+ keys);\n\n            log.imarea.append(log.html({\n                time: '2014-04-26 0:37',\n                name: config.user.name,\n                face: config.user.face,\n                content: data.content\n            }, 'me'));\n            node.imwrite.val('').focus();\n            log.imarea.scrollTop(log.imarea[0].scrollHeight);\n\n            setTimeout(function(){\n                log.imarea.append(log.html({\n                    time: '2014-04-26 0:38',\n                    name: xxim.nowchat.name,\n                    face: xxim.nowchat.face,\n                    content: config.autoReplay[(Math.random()*config.autoReplay.length) | 0]\n                }));\n                log.imarea.scrollTop(log.imarea[0].scrollHeight);\n            }, 500);\n\n            /*\n            that.json(config.api.sendurl, data, function(datas){\n\n            });\n            */\n        }\n\n    };\n    node.sendbtn.on('click', log.send);\n\n    node.imwrite.keyup(function(e){\n        if(e.keyCode === 13){\n            log.send();\n        }\n    });\n};\n\n//事件\nxxim.event = function(){\n    var node = xxim.node;\n\n    //主界面tab\n    node.tabs.eq(0).addClass('xxim_tabnow');\n    node.tabs.on('click', function(){\n        var othis = $(this), index = othis.index();\n        xxim.tabs(index);\n    });\n\n    //列表展收\n    node.list.on('click', 'h5', function(){\n        var othis = $(this), chat = othis.siblings('.xxim_chatlist'), parentss = othis.find(\"i\");\n        if(parentss.hasClass('fa-caret-down')){\n            chat.hide();\n            parentss.attr('class','fa fa-caret-right');\n        } else {\n            chat.show();\n            parentss.attr('class','fa fa-caret-down');\n        }\n    });\n\n    //设置在线隐身\n    node.online.on('click', function(e){\n        config.stopMP(e);\n        node.setonline.show();\n    });\n    node.setonline.find('span').on('click', function(e){\n        var index = $(this).index();\n        config.stopMP(e);\n        if(index === 0){\n            node.onlinetex.html('在线');\n            node.online.removeClass('xxim_offline');\n        } else if(index === 1) {\n            node.onlinetex.html('隐身');\n            node.online.addClass('xxim_offline');\n        }\n        node.setonline.hide();\n    });\n\n    node.xximon.on('click', xxim.expend);\n    node.xximHide.on('click', xxim.expend);\n\n    //搜索\n    node.xximSearch.keyup(function(){\n        var val = $(this).val().replace(/\\s/g, '');\n        if(val !== ''){\n            node.searchMian.show();\n            node.closeSearch.show();\n            //此处的搜索ajax参考xxim.getDates\n            node.list.eq(3).html('<li class=\"xxim_errormsg\">没有符合条件的结果</li>');\n        } else {\n            node.searchMian.hide();\n            node.closeSearch.hide();\n        }\n    });\n    node.closeSearch.on('click', function(){\n        $(this).hide();\n        node.searchMian.hide();\n        node.xximSearch.val('').focus();\n    });\n\n    //弹出聊天窗\n    config.chatings = 0;\n    node.list.on('click', '.xxim_childnode', function(){\n        var othis = $(this);\n        xxim.popchatbox(othis);\n    });\n\n    //点击最小化栏\n    node.layimMin.on('click', function(){\n        $(this).hide();\n        $('#layim_chatbox').parents('.xubox_layer').show();\n    });\n\n\n    //document事件\n    dom[1].on('click', function(){\n        node.setonline.hide();\n        $('#layim_sendtype').hide();\n    });\n};\n\n//请求列表数据\nxxim.getDates = function(index){\n    var api = [config.api.friend, config.api.group, config.api.chatlog],\n        node = xxim.node, myf = node.list.eq(index);\n    myf.addClass('loading');\n    config.json(api[index], {}, function(datas){\n        if(datas.status === 1){\n            var i = 0, myflen = datas.data.length, str = '', item;\n            if(myflen > 1){\n                if(index !== 2){\n                    for(; i < myflen; i++){\n                        str += '<li data-id=\"'+ datas.data[i].id +'\" class=\"xxim_parentnode\">'\n                            +'<h5><i class=\"fa fa-caret-right\"></i><span class=\"xxim_parentname\">'+ datas.data[i].name +'</span><em class=\"xxim_nums\">（'+ datas.data[i].nums +'）</em></h5>'\n                            +'<ul class=\"xxim_chatlist\">';\n                        item = datas.data[i].item;\n                        for(var j = 0; j < item.length; j++){\n                            str += '<li data-id=\"'+ item[j].id +'\" class=\"xxim_childnode\" type=\"'+ (index === 0 ? 'one' : 'group') +'\"><img src=\"'+ item[j].face +'\" class=\"xxim_oneface\"><span class=\"xxim_onename\">'+ item[j].name +'</span></li>';\n                        }\n                        str += '</ul></li>';\n                    }\n                } else {\n                    str += '<li class=\"xxim_liston\">'\n                        +'<ul class=\"xxim_chatlist\">';\n                    for(; i < myflen; i++){\n                        str += '<li data-id=\"'+ datas.data[i].id +'\" class=\"xxim_childnode\" type=\"one\"><img src=\"'+ datas.data[i].face +'\"  class=\"xxim_oneface\"><span  class=\"xxim_onename\">'+ datas.data[i].name +'</span><em class=\"xxim_time\">'+ datas.data[i].time +'</em></li>';\n                    }\n                    str += '</ul></li>';\n                }\n                myf.html(str);\n            } else {\n                myf.html('<li class=\"xxim_errormsg\">没有任何数据</li>');\n            }\n            myf.removeClass('loading');\n        } else {\n            myf.html('<li class=\"xxim_errormsg\">'+ datas.msg +'</li>');\n        }\n    }, function(){\n        myf.html('<li class=\"xxim_errormsg\">请求失败</li>');\n        myf.removeClass('loading');\n    });\n};\n\n//渲染骨架\nxxim.view = (function(){\n    var xximNode = xxim.layimNode = $('<div id=\"xximmm\" class=\"xxim_main\">'\n            +'<div class=\"xxim_top\" id=\"xxim_top\">'\n            +'  <div class=\"xxim_search\"><i class=\"fa fa-search\"></i><input id=\"xxim_searchkey\" /><span id=\"xxim_closesearch\">×</span></div>'\n            +'  <div class=\"xxim_tabs\" id=\"xxim_tabs\"><span class=\"xxim_tabfriend\" title=\"好友\"><i class=\"fa fa-user\"></i></span><span class=\"xxim_tabgroup\" title=\"群组\"><i class=\"fa fa-users\"></i></span><span class=\"xxim_latechat\"  title=\"最近聊天\"><i class=\"fa fa-clock-o\"></i></span></div>'\n            +'  <ul class=\"xxim_list\" style=\"display:block\"></ul>'\n            +'  <ul class=\"xxim_list\"></ul>'\n            +'  <ul class=\"xxim_list\"></ul>'\n            +'  <ul class=\"xxim_list xxim_searchmain\" id=\"xxim_searchmain\"></ul>'\n            +'</div>'\n            +'<ul class=\"xxim_bottom\" id=\"xxim_bottom\">'\n            +'<li class=\"xxim_online\" id=\"xxim_online\">'\n                +'<i class=\"xxim_nowstate fa fa-check-circle\"></i><span id=\"xxim_onlinetex\">在线</span>'\n                +'<div class=\"xxim_setonline\">'\n                    +'<span><i class=\"fa fa-check-circle\"></i>在线</span>'\n                    +'<span class=\"xxim_setoffline\"><i class=\"fa fa-check-circle\"></i>隐身</span>'\n                +'</div>'\n            +'</li>'\n            +'<li class=\"xxim_mymsg\" id=\"xxim_mymsg\" title=\"我的私信\"><i class=\"fa fa-comment\"></i><a href=\"'+ config.msgurl +'\" target=\"_blank\"></a></li>'\n            +'<li class=\"xxim_seter\" id=\"xxim_seter\" title=\"设置\">'\n                +'<i class=\"fa fa-gear\"></i>'\n                +'<div>'\n\n                +'</div>'\n            +'</li>'\n            +'<li class=\"xxim_hide\" id=\"xxim_hide\"><i class=\"fa fa-exchange\"></i></li>'\n            +'<li id=\"xxim_on\" class=\"xxim_icon xxim_on fa fa-ellipsis-v\"></li>'\n            +'<div class=\"layim_min\" id=\"layim_min\"></div>'\n        +'</ul>'\n    +'</div>');\n    dom[3].append(xximNode);\n\n    xxim.renode();\n    xxim.getDates(0);\n    xxim.event();\n    xxim.layinit();\n}());\n\n}(window);\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/skin/layer.css",
    "content": "/*!\n\n @Name: layer's style\n @Author: 贤心\n @Blog： sentsin.com\n\n */*html{background-image:url(about:blank);background-attachment:fixed}html #layui_layer_skinlayercss{display:none;position:absolute;width:1989px}.layui-layer,.layui-layer-shade{position:fixed;_position:absolute;pointer-events:auto}.layui-layer-shade{top:0;left:0;width:100%;height:100%;_height:expression(document.body.offsetHeight+\"px\")}.layui-layer{top:150px;left:50%;margin:0;padding:0;background-color:#fff;-webkit-background-clip:content;box-shadow:1px 1px 50px rgba(0,0,0,.3);border-radius:2px;-webkit-animation-fill-mode:both;animation-fill-mode:both;-webkit-animation-duration:.3s;animation-duration:.3s}.layui-layer-close{position:absolute}.layui-layer-content{position:relative}.layui-layer-border{border:1px solid #B2B2B2;border:1px solid rgba(0,0,0,.3);box-shadow:1px 1px 5px rgba(0,0,0,.2)}.layui-layer-moves{position:absolute;border:3px solid #666;border:3px solid rgba(0,0,0,.5);cursor:move;background-color:#fff;background-color:rgba(255,255,255,.3);filter:alpha(opacity=50)}.layui-layer-load{background:url(default/loading-0.gif) center center no-repeat #fff}.layui-layer-ico{background:url(default/icon.png) no-repeat}.layui-layer-btn a,.layui-layer-dialog .layui-layer-ico,.layui-layer-setwin a{display:inline-block;*display:inline;*zoom:1;vertical-align:top}@-webkit-keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceIn{0%{opacity:0;-webkit-transform:scale(.5);-ms-transform:scale(.5);transform:scale(.5)}100%{opacity:1;-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim{-webkit-animation-name:bounceIn;animation-name:bounceIn}@-webkit-keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);transform:scale(1)}}@keyframes bounceOut{100%{opacity:0;-webkit-transform:scale(.7);-ms-transform:scale(.7);transform:scale(.7)}30%{-webkit-transform:scale(1.03);-ms-transform:scale(1.03);transform:scale(1.03)}0%{-webkit-transform:scale(1);-ms-transform:scale(1);transform:scale(1)}}.layui-anim-close{-webkit-animation-name:bounceOut;animation-name:bounceOut;-webkit-animation-duration:.2s;animation-duration:.2s}@-webkit-keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInDown{0%{opacity:0;-webkit-transform:scale(.1) translateY(-2000px);-ms-transform:scale(.1) translateY(-2000px);transform:scale(.1) translateY(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateY(60px);-ms-transform:scale(.475) translateY(60px);transform:scale(.475) translateY(60px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-01{-webkit-animation-name:zoomInDown;animation-name:zoomInDown}@-webkit-keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);transform:translateY(0)}}@keyframes fadeInUpBig{0%{opacity:0;-webkit-transform:translateY(2000px);-ms-transform:translateY(2000px);transform:translateY(2000px)}100%{opacity:1;-webkit-transform:translateY(0);-ms-transform:translateY(0);transform:translateY(0)}}.layui-anim-02{-webkit-animation-name:fadeInUpBig;animation-name:fadeInUpBig}@-webkit-keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}@keyframes zoomInLeft{0%{opacity:0;-webkit-transform:scale(.1) translateX(-2000px);-ms-transform:scale(.1) translateX(-2000px);transform:scale(.1) translateX(-2000px);-webkit-animation-timing-function:ease-in-out;animation-timing-function:ease-in-out}60%{opacity:1;-webkit-transform:scale(.475) translateX(48px);-ms-transform:scale(.475) translateX(48px);transform:scale(.475) translateX(48px);-webkit-animation-timing-function:ease-out;animation-timing-function:ease-out}}.layui-anim-03{-webkit-animation-name:zoomInLeft;animation-name:zoomInLeft}@-webkit-keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}@keyframes rollIn{0%{opacity:0;-webkit-transform:translateX(-100%) rotate(-120deg);-ms-transform:translateX(-100%) rotate(-120deg);transform:translateX(-100%) rotate(-120deg)}100%{opacity:1;-webkit-transform:translateX(0) rotate(0);-ms-transform:translateX(0) rotate(0);transform:translateX(0) rotate(0)}}.layui-anim-04{-webkit-animation-name:rollIn;animation-name:rollIn}@keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-anim-05{-webkit-animation-name:fadeIn;animation-name:fadeIn}@-webkit-keyframes shake{0%,100%{-webkit-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);transform:translateX(10px)}}@keyframes shake{0%,100%{-webkit-transform:translateX(0);-ms-transform:translateX(0);transform:translateX(0)}10%,30%,50%,70%,90%{-webkit-transform:translateX(-10px);-ms-transform:translateX(-10px);transform:translateX(-10px)}20%,40%,60%,80%{-webkit-transform:translateX(10px);-ms-transform:translateX(10px);transform:translateX(10px)}}.layui-anim-06{-webkit-animation-name:shake;animation-name:shake}@-webkit-keyframes fadeIn{0%{opacity:0}100%{opacity:1}}.layui-layer-title{padding:0 80px 0 20px;height:42px;line-height:42px;border-bottom:1px solid #eee;font-size:14px;color:#333;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;background-color:#F8F8F8}.layui-layer-setwin{position:absolute;right:15px;*right:0;top:15px;font-size:0;line-height:initial}.layui-layer-setwin a{position:relative;width:16px;height:16px;margin-left:10px;font-size:12px;_overflow:hidden}.layui-layer-setwin .layui-layer-min cite{position:absolute;width:14px;height:2px;left:0;top:50%;margin-top:-1px;background-color:#2E2D3C;cursor:pointer;_overflow:hidden}.layui-layer-setwin .layui-layer-min:hover cite{background-color:#2D93CA}.layui-layer-setwin .layui-layer-max{background-position:-32px -40px}.layui-layer-setwin .layui-layer-max:hover{background-position:-16px -40px}.layui-layer-setwin .layui-layer-maxmin{background-position:-65px -40px}.layui-layer-setwin .layui-layer-maxmin:hover{background-position:-49px -40px}.layui-layer-setwin .layui-layer-close1{background-position:0 -40px;cursor:pointer}.layui-layer-setwin .layui-layer-close1:hover{opacity:.7}.layui-layer-setwin .layui-layer-close2{position:absolute;right:-28px;top:-28px;width:30px;height:30px;margin-left:0;background-position:-150px -31px;*right:-18px;_display:none}.layui-layer-setwin .layui-layer-close2:hover{background-position:-181px -31px}.layui-layer-btn{text-align:right;padding:0 10px 12px;pointer-events:auto}.layui-layer-btn a{height:28px;line-height:28px;margin:0 6px;padding:0 15px;border:1px solid #dedede;background-color:#f1f1f1;color:#333;border-radius:2px;font-weight:400;cursor:pointer;text-decoration:none}.layui-layer-btn a:hover{opacity:.9;text-decoration:none}.layui-layer-btn a:active{opacity:.7}.layui-layer-btn .layui-layer-btn0{border-color:#4898d5;background-color:#2e8ded;color:#fff}.layui-layer-dialog{min-width:260px}.layui-layer-dialog .layui-layer-content{position:relative;padding:20px;line-height:24px;word-break:break-all;font-size:14px;overflow:auto}.layui-layer-dialog .layui-layer-content .layui-layer-ico{position:absolute;top:16px;left:15px;_left:-40px;width:30px;height:30px}.layui-layer-ico1{background-position:-30px 0}.layui-layer-ico2{background-position:-60px 0}.layui-layer-ico3{background-position:-90px 0}.layui-layer-ico4{background-position:-120px 0}.layui-layer-ico5{background-position:-150px 0}.layui-layer-ico6{background-position:-180px 0}.layui-layer-rim{border:6px solid #8D8D8D;border:6px solid rgba(0,0,0,.3);border-radius:5px;box-shadow:none}.layui-layer-msg{min-width:180px;border:1px solid #D3D4D3;box-shadow:none}.layui-layer-hui{min-width:100px;background-color:#000;filter:alpha(opacity=60);background-color:rgba(0,0,0,.6);color:#fff;border:none}.layui-layer-hui .layui-layer-content{padding:12px 25px;text-align:center}.layui-layer-dialog .layui-layer-padding{padding:20px 20px 20px 55px;text-align:left}.layui-layer-page .layui-layer-content{position:relative;overflow:auto}.layui-layer-iframe .layui-layer-btn,.layui-layer-page .layui-layer-btn{padding-top:10px}.layui-layer-nobg{background:0 0}.layui-layer-iframe .layui-layer-content{overflow:hidden}.layui-layer-iframe iframe{display:block;width:100%}.layui-layer-loading{border-radius:100%;background:0 0;box-shadow:none;border:none}.layui-layer-loading .layui-layer-content{width:60px;height:24px;background:url(default/loading-0.gif) no-repeat}.layui-layer-loading .layui-layer-loading1{width:37px;height:37px;background:url(default/loading-1.gif) no-repeat}.layui-layer-ico16,.layui-layer-loading .layui-layer-loading2{width:32px;height:32px;background:url(default/loading-2.gif) no-repeat}.layui-layer-tips{background:0 0;box-shadow:none;border:none}.layui-layer-tips .layui-layer-content{position:relative;line-height:22px;min-width:12px;padding:5px 10px;font-size:12px;_float:left;border-radius:3px;box-shadow:1px 1px 3px rgba(0,0,0,.3);background-color:#F90;color:#fff}.layui-layer-tips .layui-layer-close{right:-2px;top:-1px}.layui-layer-tips i.layui-layer-TipsG{position:absolute;width:0;height:0;border-width:8px;border-color:transparent;border-style:dashed;*overflow:hidden}.layui-layer-tips i.layui-layer-TipsB,.layui-layer-tips i.layui-layer-TipsT{left:5px;border-right-style:solid;border-right-color:#F90}.layui-layer-tips i.layui-layer-TipsT{bottom:-8px}.layui-layer-tips i.layui-layer-TipsB{top:-8px}.layui-layer-tips i.layui-layer-TipsL,.layui-layer-tips i.layui-layer-TipsR{top:1px;border-bottom-style:solid;border-bottom-color:#F90}.layui-layer-tips i.layui-layer-TipsR{left:-8px}.layui-layer-tips i.layui-layer-TipsL{right:-8px}.layui-layer-lan[type=dialog]{min-width:280px}.layui-layer-lan .layui-layer-title{background:#4476A7;color:#fff;border:none}.layui-layer-lan .layui-layer-lan .layui-layer-btn{padding:10px;text-align:right;border-top:1px solid #E9E7E7}.layui-layer-lan .layui-layer-btn a{background:#BBB5B5;border:none}.layui-layer-lan .layui-layer-btn .layui-layer-btn1{background:#C9C5C5}.layui-layer-molv .layui-layer-title{background:#009f95;color:#fff;border:none}.layui-layer-molv .layui-layer-btn a{background:#009f95}.layui-layer-molv .layui-layer-btn .layui-layer-btn1{background:#92B8B1}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/skin/layer.ext.css",
    "content": "/*!\n\n @Name: layer拓展样式\n @Date: 2012.12.13\n @Author: 贤心\n @blog: sentsin.com\n\n */.layui-layer-imgbar,.layui-layer-imgtit a,.layui-layer-tab .layui-layer-title span{text-overflow:ellipsis;white-space:nowrap}.layui-layer-iconext{background:url(default/icon-ext.png) no-repeat}html #layui_layer_skinlayerextcss{display:none;position:absolute;width:1989px}.layui-layer-prompt .layui-layer-input{display:block;width:220px;height:30px;margin:0 auto;line-height:30px;padding:0 5px;border:1px solid #ccc;box-shadow:1px 1px 5px rgba(0,0,0,.1) inset;color:#333}.layui-layer-prompt textarea.layui-layer-input{width:300px;height:100px;line-height:20px}.layui-layer-tab{box-shadow:1px 1px 50px rgba(0,0,0,.4)}.layui-layer-tab .layui-layer-title{padding-left:0;border-bottom:1px solid #ccc;background-color:#eee;overflow:visible}.layui-layer-tab .layui-layer-title span{position:relative;float:left;min-width:80px;max-width:260px;padding:0 20px;text-align:center;cursor:default;overflow:hidden}.layui-layer-tab .layui-layer-title span.layui-layer-tabnow{height:43px;border-left:1px solid #ccc;border-right:1px solid #ccc;background-color:#fff;z-index:10}.layui-layer-tab .layui-layer-title span:first-child{border-left:none}.layui-layer-tabmain{line-height:24px;clear:both}.layui-layer-tabmain .layui-layer-tabli{display:none}.layui-layer-tabmain .layui-layer-tabli.xubox_tab_layer{display:block}.xubox_tabclose{position:absolute;right:10px;top:5px;cursor:pointer}.layui-layer-photos{-webkit-animation-duration:1s;animation-duration:1s;background:url(default/xubox_loading1.gif) center center no-repeat #000}.layui-layer-photos .layui-layer-content{overflow:hidden;text-align:center}.layui-layer-photos .layui-layer-phimg img{position:relative;width:100%;display:inline-block;*display:inline;*zoom:1;vertical-align:top}.layui-layer-imgbar,.layui-layer-imguide{display:none}.layui-layer-imgnext,.layui-layer-imgprev{position:absolute;top:50%;width:27px;_width:44px;height:44px;margin-top:-22px;outline:0;blr:expression(this.onFocus=this.blur())}.layui-layer-imgprev{left:10px;background-position:-5px -5px;_background-position:-70px -5px}.layui-layer-imgprev:hover{background-position:-33px -5px;_background-position:-120px -5px}.layui-layer-imgnext{right:10px;_right:8px;background-position:-5px -50px;_background-position:-70px -50px}.layui-layer-imgnext:hover{background-position:-33px -50px;_background-position:-120px -50px}.layui-layer-imgbar{position:absolute;left:0;bottom:0;width:100%;height:32px;line-height:32px;background-color:rgba(0,0,0,.8);background-color:#000\\9;filter:Alpha(opacity=80);color:#fff;overflow:hidden;font-size:0}.layui-layer-imgtit *{display:inline-block;*display:inline;*zoom:1;vertical-align:top;font-size:12px}.layui-layer-imgtit a{max-width:65%;overflow:hidden;color:#fff}.layui-layer-imgtit a:hover{color:#fff;text-decoration:underline}.layui-layer-imgtit em{padding-left:10px;font-style:normal}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/layer/skin/moon/style.css",
    "content": "/*\n * layer皮肤\n * 作者：一☆隐☆一\n * QQ:9073194\n * 请保留这里的信息 谢谢！虽然你不保留我也不能把你怎么样！\n */\n\nhtml #layui_layer_skinmoonstylecss {\n\tdisplay: none;\n\tposition: absolute;\n\twidth: 1989px;\n}\nbody .layer-ext-moon[type=\"dialog\"] {\n\tmin-width: 320px;\n}\nbody .layer-ext-moon-msg[type=\"dialog\"]{min-width:200px;}\nbody .layer-ext-moon .layui-layer-title {\n\tbackground: #f6f6f6;\n\tcolor: #212a31;\n\tfont-size: 16px;\n\tfont-weight: bold;\n\theight: 46px;\n\tline-height: 46px;\n}\n\n\n\nbody .layer-ext-moon .layui-layer-content .layui-layer-ico {\n\theight: 32px;\n\twidth: 32px;\n\ttop:18.5px;\n}\nbody .layer-ext-moon .layui-layer-ico0 {\n\tbackground: url(default.png) no-repeat -96px 0;\n\t;\n}\nbody .layer-ext-moon .layui-layer-ico1 {\n\tbackground: url(default.png) no-repeat -224px 0;\n\t;\n}\nbody .layer-ext-moon .layui-layer-ico2 {\n\tbackground: url(default.png) no-repeat -192px 0;\n}\nbody .layer-ext-moon .layui-layer-ico3 {\n\tbackground: url(default.png) no-repeat -160px 0;\n}\nbody .layer-ext-moon .layui-layer-ico4 {\n\tbackground: url(default.png) no-repeat -320px 0;\n}\nbody .layer-ext-moon .layui-layer-ico5 {\n\tbackground: url(default.png) no-repeat -288px 0;\n}\nbody .layer-ext-moon .layui-layer-ico6 {\n\tbackground: url(default.png) -256px 0;\n}\nbody .layer-ext-moon .layui-layer-ico7 {\n\tbackground: url(default.png) no-repeat -128px 0;\n}\nbody .layer-ext-moon .layui-layer-setwin {\n\ttop: 15px;\n\tright: 15px;\n}\nbody .layer-ext-moon .layui-layer-setwin a {\n\twidth: 16px;\n\theight: 16px;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-min cite:hover {\n\tbackground-color: #56abe4;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-max {\n\tbackground: url(default.png) no-repeat -80px 0;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-max:hover {\n\tbackground: url(default.png) no-repeat -64px 0;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin {\n\tbackground: url(default.png) no-repeat -32px 0;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-maxmin:hover {\n\tbackground: url(default.png) no-repeat -16px 0;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-close1,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2 {\n\tbackground: url(default.png) 0 0;\n}\nbody .layer-ext-moon .layui-layer-setwin .layui-layer-close1:hover,body .layer-ext-moon .layui-layer-setwin .layui-layer-close2:hover {\n\tbackground: url(default.png) -48px 0;\n}\nbody .layer-ext-moon .layui-layer-padding{padding-top: 24px;}\nbody .layer-ext-moon .layui-layer-btn {\n\tpadding: 15px 0;\n\tbackground: #f0f4f7;\n\tborder-top: 1px #c7c7c7 solid;\n}\nbody .layer-ext-moon .layui-layer-btn a {\n\tfont-size: 12px;\n\tfont-weight: normal;\n\tmargin: 0 3px;\n\tmargin-right: 7px;\n\tmargin-left: 7px;\n\tpadding: 6px 20px;\n\tcolor: #fff;\n\tborder: 1px solid #0064b6;\n\tbackground: #0071ce;\n\tborder-radius: 3px;\n\tdisplay: inline-block;\n\theight: 20px;\n\tline-height: 20px;\n\ttext-align: center;\n\tvertical-align: middle;\n\tbackground-repeat: no-repeat;\n\ttext-decoration: none;\n\toutline: none;\n\t-moz-box-sizing: content-box;\n\t-webkit-box-sizing: content-box;\n\tbox-sizing: content-box;\n}\nbody .layer-ext-moon .layui-layer-btn .layui-layer-btn0 {\n\tbackground: #0071ce;\n}\nbody .layer-ext-moon .layui-layer-btn .layui-layer-btn1 {\n\tbackground: #fff;\n\tcolor: #404a58;\n\tborder: 1px solid #c0c4cd;\n\tborder-radius: 3px;\n}\nbody .layer-ext-moon .layui-layer-btn .layui-layer-btn2 {\n\tbackground: #f60;\n\tcolor: #fff;\n\tborder: 1px solid #f60;\n\tborder-radius: 3px;\n}\nbody .layer-ext-moon .layui-layer-btn .layui-layer-btn3 {\n\tbackground: #f00;\n\tcolor: #fff;\n\tborder: 1px solid #f00;\n\tborder-radius: 3px;\n}\n\nbody .layer-ext-moon .layui-layer-title span.layui-layer-tabnow{\n\theight:46px;\n}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/markdown/bootstrap-markdown.js",
    "content": "/* ===================================================\n * bootstrap-markdown.js v2.7.0\n * http://github.com/toopay/bootstrap-markdown\n * ===================================================\n * Copyright 2013-2014 Taufan Aditya\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! function ($) {\n\n    \"use strict\"; // jshint ;_;\n\n\n    /* MARKDOWN CLASS DEFINITION\n     * ========================== */\n\n    var Markdown = function (element, options) {\n        // Class Properties\n        this.$ns = 'bootstrap-markdown'\n        this.$element = $(element)\n        this.$editable = {\n            el: null,\n            type: null,\n            attrKeys: [],\n            attrValues: [],\n            content: null\n        }\n        this.$options = $.extend(true, {}, $.fn.markdown.defaults, options, this.$element.data(), this.$element.data('options'))\n        this.$oldContent = null\n        this.$isPreview = false\n        this.$isFullscreen = false\n        this.$editor = null\n        this.$textarea = null\n        this.$handler = []\n        this.$callback = []\n        this.$nextTab = []\n\n        this.showEditor()\n    }\n\n    Markdown.prototype = {\n\n        constructor: Markdown\n\n        ,\n        __alterButtons: function (name, alter) {\n            var handler = this.$handler,\n                isAll = (name == 'all'),\n                that = this\n\n            $.each(handler, function (k, v) {\n                var halt = true\n                if (isAll) {\n                    halt = false\n                } else {\n                    halt = v.indexOf(name) < 0\n                }\n\n                if (halt == false) {\n                    alter(that.$editor.find('button[data-handler=\"' + v + '\"]'))\n                }\n            })\n        }\n\n        ,\n        __buildButtons: function (buttonsArray, container) {\n            var i,\n                ns = this.$ns,\n                handler = this.$handler,\n                callback = this.$callback\n\n            for (i = 0; i < buttonsArray.length; i++) {\n                // Build each group container\n                var y, btnGroups = buttonsArray[i]\n                for (y = 0; y < btnGroups.length; y++) {\n                    // Build each button group\n                    var z,\n                        buttons = btnGroups[y].data,\n                        btnGroupContainer = $('<div/>', {\n                            'class': 'btn-group'\n                        })\n\n                    for (z = 0; z < buttons.length; z++) {\n                        var button = buttons[z],\n                            buttonContainer, buttonIconContainer,\n                            buttonHandler = ns + '-' + button.name,\n                            buttonIcon = this.__getIcon(button.icon),\n                            btnText = button.btnText ? button.btnText : '',\n                            btnClass = button.btnClass ? button.btnClass : 'btn',\n                            tabIndex = button.tabIndex ? button.tabIndex : '-1',\n                            hotkey = typeof button.hotkey !== 'undefined' ? button.hotkey : '',\n                            hotkeyCaption = typeof jQuery.hotkeys !== 'undefined' && hotkey !== '' ? ' (' + hotkey + ')' : ''\n\n                        // Construct the button object\n                        buttonContainer = $('<button></button>');\n                        buttonContainer.text(' ' + this.__localize(btnText)).addClass('btn-white btn-sm').addClass(btnClass);\n                        if (btnClass.match(/btn\\-(primary|success|info|warning|danger|link)/)) {\n                            buttonContainer.removeClass('btn-default');\n                        }\n                        buttonContainer.attr({\n                            'type': 'button',\n                            'title': this.__localize(button.title) + hotkeyCaption,\n                            'tabindex': tabIndex,\n                            'data-provider': ns,\n                            'data-handler': buttonHandler,\n                            'data-hotkey': hotkey\n                        });\n                        if (button.toggle == true) {\n                            buttonContainer.attr('data-toggle', 'button');\n                        }\n                        buttonIconContainer = $('<span/>');\n                        buttonIconContainer.addClass(buttonIcon);\n                        buttonIconContainer.prependTo(buttonContainer);\n\n                        // Attach the button object\n                        btnGroupContainer.append(buttonContainer);\n\n                        // Register handler and callback\n                        handler.push(buttonHandler);\n                        callback.push(button.callback);\n                    }\n\n                    // Attach the button group into container dom\n                    container.append(btnGroupContainer);\n                }\n            }\n\n            return container;\n        },\n        __setListener: function () {\n            // Set size and resizable Properties\n            var hasRows = typeof this.$textarea.attr('rows') != 'undefined',\n                maxRows = this.$textarea.val().split(\"\\n\").length > 5 ? this.$textarea.val().split(\"\\n\").length : '5',\n                rowsVal = hasRows ? this.$textarea.attr('rows') : maxRows\n\n            this.$textarea.attr('rows', rowsVal)\n            if (this.$options.resize) {\n                this.$textarea.css('resize', this.$options.resize)\n            }\n\n            this.$textarea\n                .on('focus', $.proxy(this.focus, this))\n                .on('keypress', $.proxy(this.keypress, this))\n                .on('keyup', $.proxy(this.keyup, this))\n                .on('change', $.proxy(this.change, this))\n\n            if (this.eventSupported('keydown')) {\n                this.$textarea.on('keydown', $.proxy(this.keydown, this))\n            }\n\n            // Re-attach markdown data\n            this.$textarea.data('markdown', this)\n        }\n\n        ,\n        __handle: function (e) {\n            var target = $(e.currentTarget),\n                handler = this.$handler,\n                callback = this.$callback,\n                handlerName = target.attr('data-handler'),\n                callbackIndex = handler.indexOf(handlerName),\n                callbackHandler = callback[callbackIndex]\n\n            // Trigger the focusin\n            $(e.currentTarget).focus()\n\n            callbackHandler(this)\n\n            // Trigger onChange for each button handle\n            this.change(this);\n\n            // Unless it was the save handler,\n            // focusin the textarea\n            if (handlerName.indexOf('cmdSave') < 0) {\n                this.$textarea.focus()\n            }\n\n            e.preventDefault()\n        }\n\n        ,\n        __localize: function (string) {\n            var messages = $.fn.markdown.messages,\n                language = this.$options.language\n            if (\n                typeof messages !== 'undefined' &&\n                typeof messages[language] !== 'undefined' &&\n                typeof messages[language][string] !== 'undefined'\n            ) {\n                return messages[language][string];\n            }\n            return string;\n        }\n\n        ,\n        __getIcon: function (src) {\n            return typeof src == 'object' ? src[this.$options.iconlibrary] : src;\n        }\n\n        ,\n        setFullscreen: function (mode) {\n            var $editor = this.$editor,\n                $textarea = this.$textarea\n\n            if (mode === true) {\n                $editor.addClass('md-fullscreen-mode')\n                $('body').addClass('md-nooverflow')\n                this.$options.onFullscreen(this)\n            } else {\n                $editor.removeClass('md-fullscreen-mode')\n                $('body').removeClass('md-nooverflow')\n            }\n\n            this.$isFullscreen = mode;\n            $textarea.focus()\n        }\n\n        ,\n        showEditor: function () {\n            var instance = this,\n                textarea,\n                ns = this.$ns,\n                container = this.$element,\n                originalHeigth = container.css('height'),\n                originalWidth = container.css('width'),\n                editable = this.$editable,\n                handler = this.$handler,\n                callback = this.$callback,\n                options = this.$options,\n                editor = $('<div/>', {\n                    'class': 'md-editor',\n                    click: function () {\n                        instance.focus()\n                    }\n                })\n\n            // Prepare the editor\n            if (this.$editor == null) {\n                // Create the panel\n                var editorHeader = $('<div/>', {\n                    'class': 'md-header btn-toolbar'\n                })\n\n                // Merge the main & additional button groups together\n                var allBtnGroups = []\n                if (options.buttons.length > 0) allBtnGroups = allBtnGroups.concat(options.buttons[0])\n                if (options.additionalButtons.length > 0) allBtnGroups = allBtnGroups.concat(options.additionalButtons[0])\n\n                // Reduce and/or reorder the button groups\n                if (options.reorderButtonGroups.length > 0) {\n                    allBtnGroups = allBtnGroups\n                        .filter(function (btnGroup) {\n                            return options.reorderButtonGroups.indexOf(btnGroup.name) > -1\n                        })\n                        .sort(function (a, b) {\n                            if (options.reorderButtonGroups.indexOf(a.name) < options.reorderButtonGroups.indexOf(b.name)) return -1\n                            if (options.reorderButtonGroups.indexOf(a.name) > options.reorderButtonGroups.indexOf(b.name)) return 1\n                            return 0\n                        })\n                }\n\n                // Build the buttons\n                if (allBtnGroups.length > 0) {\n                    editorHeader = this.__buildButtons([allBtnGroups], editorHeader)\n                }\n\n                if (options.fullscreen.enable) {\n                    editorHeader.append('<div class=\"md-controls\"><a class=\"md-control md-control-fullscreen\" href=\"#\"><span class=\"' + this.__getIcon(options.fullscreen.icons.fullscreenOn) + '\"></span></a></div>').on('click', '.md-control-fullscreen', function (e) {\n                        e.preventDefault();\n                        instance.setFullscreen(true)\n                    })\n                }\n\n                editor.append(editorHeader)\n\n                // Wrap the textarea\n                if (container.is('textarea')) {\n                    container.before(editor)\n                    textarea = container\n                    textarea.addClass('md-input')\n                    editor.append(textarea)\n                } else {\n                    var rawContent = (typeof toMarkdown == 'function') ? toMarkdown(container.html()) : container.html(),\n                        currentContent = $.trim(rawContent)\n\n                    // This is some arbitrary content that could be edited\n                    textarea = $('<textarea/>', {\n                        'class': 'md-input',\n                        'val': currentContent\n                    })\n\n                    editor.append(textarea)\n\n                    // Save the editable\n                    editable.el = container\n                    editable.type = container.prop('tagName').toLowerCase()\n                    editable.content = container.html()\n\n                    $(container[0].attributes).each(function () {\n                        editable.attrKeys.push(this.nodeName)\n                        editable.attrValues.push(this.nodeValue)\n                    })\n\n                    // Set editor to blocked the original container\n                    container.replaceWith(editor)\n                }\n\n                var editorFooter = $('<div/>', {\n                        'class': 'md-footer'\n                    }),\n                    createFooter = false,\n                    footer = ''\n                    // Create the footer if savable\n                if (options.savable) {\n                    createFooter = true;\n                    var saveHandler = 'cmdSave'\n\n                    // Register handler and callback\n                    handler.push(saveHandler)\n                    callback.push(options.onSave)\n\n                    editorFooter.append('<button class=\"btn btn-success\" data-provider=\"' + ns + '\" data-handler=\"' + saveHandler + '\"><i class=\"icon icon-white icon-ok\"></i> ' + this.__localize('Save') + '</button>')\n\n\n                }\n\n                footer = typeof options.footer === 'function' ? options.footer(this) : options.footer\n\n                if ($.trim(footer) !== '') {\n                    createFooter = true;\n                    editorFooter.append(footer);\n                }\n\n                if (createFooter) editor.append(editorFooter)\n\n                // Set width\n                if (options.width && options.width !== 'inherit') {\n                    if (jQuery.isNumeric(options.width)) {\n                        editor.css('display', 'table')\n                        textarea.css('width', options.width + 'px')\n                    } else {\n                        editor.addClass(options.width)\n                    }\n                }\n\n                // Set height\n                if (options.height && options.height !== 'inherit') {\n                    if (jQuery.isNumeric(options.height)) {\n                        var height = options.height\n                        if (editorHeader) height = Math.max(0, height - editorHeader.outerHeight())\n                        if (editorFooter) height = Math.max(0, height - editorFooter.outerHeight())\n                        textarea.css('height', height + 'px')\n                    } else {\n                        editor.addClass(options.height)\n                    }\n                }\n\n                // Reference\n                this.$editor = editor\n                this.$textarea = textarea\n                this.$editable = editable\n                this.$oldContent = this.getContent()\n\n                this.__setListener()\n\n                // Set editor attributes, data short-hand API and listener\n                this.$editor.attr('id', (new Date).getTime())\n                this.$editor.on('click', '[data-provider=\"bootstrap-markdown\"]', $.proxy(this.__handle, this))\n\n                if (this.$element.is(':disabled') || this.$element.is('[readonly]')) {\n                    this.$editor.addClass('md-editor-disabled');\n                    this.disableButtons('all');\n                }\n\n                if (this.eventSupported('keydown') && typeof jQuery.hotkeys === 'object') {\n                    editorHeader.find('[data-provider=\"bootstrap-markdown\"]').each(function () {\n                        var $button = $(this),\n                            hotkey = $button.attr('data-hotkey')\n                        if (hotkey.toLowerCase() !== '') {\n                            textarea.bind('keydown', hotkey, function () {\n                                $button.trigger('click')\n                                return false;\n                            })\n                        }\n                    })\n                }\n\n                if (options.initialstate === 'preview') {\n                    this.showPreview();\n                } else if (options.initialstate === 'fullscreen' && options.fullscreen.enable) {\n                    this.setFullscreen(true)\n                }\n\n            } else {\n                this.$editor.show()\n            }\n\n            if (options.autofocus) {\n                this.$textarea.focus()\n                this.$editor.addClass('active')\n            }\n\n            if (options.fullscreen.enable && options.fullscreen !== false) {\n                this.$editor.append('\\\n          <div class=\"md-fullscreen-controls\">\\\n            <a href=\"#\" class=\"exit-fullscreen\" title=\"Exit fullscreen\"><span class=\"' + this.__getIcon(options.fullscreen.icons.fullscreenOff) + '\"></span></a>\\\n          </div>')\n\n                this.$editor.on('click', '.exit-fullscreen', function (e) {\n                    e.preventDefault()\n                    instance.setFullscreen(false)\n                })\n            }\n\n            // hide hidden buttons from options\n            this.hideButtons(options.hiddenButtons)\n\n            // disable disabled buttons from options\n            this.disableButtons(options.disabledButtons)\n\n            // Trigger the onShow hook\n            options.onShow(this)\n\n            return this\n        }\n\n        ,\n        parseContent: function () {\n            var content,\n                callbackContent = this.$options.onPreview(this) // Try to get the content from callback\n\n            if (typeof callbackContent == 'string') {\n                // Set the content based by callback content\n                content = callbackContent\n            } else {\n                // Set the content\n                var val = this.$textarea.val();\n                if (typeof markdown == 'object') {\n                    content = markdown.toHTML(val);\n                } else if (typeof marked == 'function') {\n                    content = marked(val);\n                } else {\n                    content = val;\n                }\n            }\n\n            return content;\n        }\n\n        ,\n        showPreview: function () {\n            var options = this.$options,\n                container = this.$textarea,\n                afterContainer = container.next(),\n                replacementContainer = $('<div/>', {\n                    'class': 'md-preview',\n                    'data-provider': 'markdown-preview'\n                }),\n                content\n\n            // Give flag that tell the editor enter preview mode\n            this.$isPreview = true\n            // Disable all buttons\n            this.disableButtons('all').enableButtons('cmdPreview')\n\n            content = this.parseContent()\n\n            // Build preview element\n            replacementContainer.html(content)\n\n            if (afterContainer && afterContainer.attr('class') == 'md-footer') {\n                // If there is footer element, insert the preview container before it\n                replacementContainer.insertBefore(afterContainer)\n            } else {\n                // Otherwise, just append it after textarea\n                container.parent().append(replacementContainer)\n            }\n\n            // Set the preview element dimensions\n            replacementContainer.css({\n                width: container.outerWidth() + 'px',\n                height: container.outerHeight() + 'px'\n            })\n\n            if (this.$options.resize) {\n                replacementContainer.css('resize', this.$options.resize)\n            }\n\n            // Hide the last-active textarea\n            container.hide()\n\n            // Attach the editor instances\n            replacementContainer.data('markdown', this)\n\n            if (this.$element.is(':disabled') || this.$element.is('[readonly]')) {\n                this.$editor.addClass('md-editor-disabled');\n                this.disableButtons('all');\n            }\n\n            return this\n        }\n\n        ,\n        hidePreview: function () {\n            // Give flag that tell the editor quit preview mode\n            this.$isPreview = false\n\n            // Obtain the preview container\n            var container = this.$editor.find('div[data-provider=\"markdown-preview\"]')\n\n            // Remove the preview container\n            container.remove()\n\n            // Enable all buttons\n            this.enableButtons('all')\n            // Disable configured disabled buttons\n            this.disableButtons(this.$options.disabledButtons)\n\n            // Back to the editor\n            this.$textarea.show()\n            this.__setListener()\n\n            return this\n        }\n\n        ,\n        isDirty: function () {\n            return this.$oldContent != this.getContent()\n        }\n\n        ,\n        getContent: function () {\n            return this.$textarea.val()\n        }\n\n        ,\n        setContent: function (content) {\n            this.$textarea.val(content)\n\n            return this\n        }\n\n        ,\n        findSelection: function (chunk) {\n            var content = this.getContent(),\n                startChunkPosition\n\n            if (startChunkPosition = content.indexOf(chunk), startChunkPosition >= 0 && chunk.length > 0) {\n                var oldSelection = this.getSelection(),\n                    selection\n\n                this.setSelection(startChunkPosition, startChunkPosition + chunk.length)\n                selection = this.getSelection()\n\n                this.setSelection(oldSelection.start, oldSelection.end)\n\n                return selection\n            } else {\n                return null\n            }\n        }\n\n        ,\n        getSelection: function () {\n\n            var e = this.$textarea[0]\n\n            return (\n\n                ('selectionStart' in e && function () {\n                    var l = e.selectionEnd - e.selectionStart\n                    return {\n                        start: e.selectionStart,\n                        end: e.selectionEnd,\n                        length: l,\n                        text: e.value.substr(e.selectionStart, l)\n                    }\n                }) ||\n\n                /* browser not supported */\n                function () {\n                    return null\n                }\n\n            )()\n\n        }\n\n        ,\n        setSelection: function (start, end) {\n\n            var e = this.$textarea[0]\n\n            return (\n\n                ('selectionStart' in e && function () {\n                    e.selectionStart = start\n                    e.selectionEnd = end\n                    return\n                }) ||\n\n                /* browser not supported */\n                function () {\n                    return null\n                }\n\n            )()\n\n        }\n\n        ,\n        replaceSelection: function (text) {\n\n            var e = this.$textarea[0]\n\n            return (\n\n                ('selectionStart' in e && function () {\n                    e.value = e.value.substr(0, e.selectionStart) + text + e.value.substr(e.selectionEnd, e.value.length)\n                    // Set cursor to the last replacement end\n                    e.selectionStart = e.value.length\n                    return this\n                }) ||\n\n                /* browser not supported */\n                function () {\n                    e.value += text\n                    return jQuery(e)\n                }\n\n            )()\n\n        }\n\n        ,\n        getNextTab: function () {\n            // Shift the nextTab\n            if (this.$nextTab.length == 0) {\n                return null\n            } else {\n                var nextTab, tab = this.$nextTab.shift()\n\n                if (typeof tab == 'function') {\n                    nextTab = tab()\n                } else if (typeof tab == 'object' && tab.length > 0) {\n                    nextTab = tab\n                }\n\n                return nextTab\n            }\n        }\n\n        ,\n        setNextTab: function (start, end) {\n            // Push new selection into nextTab collections\n            if (typeof start == 'string') {\n                var that = this\n                this.$nextTab.push(function () {\n                    return that.findSelection(start)\n                })\n            } else if (typeof start == 'number' && typeof end == 'number') {\n                var oldSelection = this.getSelection()\n\n                this.setSelection(start, end)\n                this.$nextTab.push(this.getSelection())\n\n                this.setSelection(oldSelection.start, oldSelection.end)\n            }\n\n            return\n        }\n\n        ,\n        __parseButtonNameParam: function (nameParam) {\n            var buttons = []\n\n            if (typeof nameParam == 'string') {\n                buttons.push(nameParam)\n            } else {\n                buttons = nameParam\n            }\n\n            return buttons\n        }\n\n        ,\n        enableButtons: function (name) {\n            var buttons = this.__parseButtonNameParam(name),\n                that = this\n\n            $.each(buttons, function (i, v) {\n                that.__alterButtons(buttons[i], function (el) {\n                    el.removeAttr('disabled')\n                });\n            })\n\n            return this;\n        }\n\n        ,\n        disableButtons: function (name) {\n            var buttons = this.__parseButtonNameParam(name),\n                that = this\n\n            $.each(buttons, function (i, v) {\n                that.__alterButtons(buttons[i], function (el) {\n                    el.attr('disabled', 'disabled')\n                });\n            })\n\n            return this;\n        }\n\n        ,\n        hideButtons: function (name) {\n            var buttons = this.__parseButtonNameParam(name),\n                that = this\n\n            $.each(buttons, function (i, v) {\n                that.__alterButtons(buttons[i], function (el) {\n                    el.addClass('hidden');\n                });\n            })\n\n            return this;\n\n        }\n\n        ,\n        showButtons: function (name) {\n            var buttons = this.__parseButtonNameParam(name),\n                that = this\n\n            $.each(buttons, function (i, v) {\n                that.__alterButtons(buttons[i], function (el) {\n                    el.removeClass('hidden');\n                });\n            })\n\n            return this;\n\n        }\n\n        ,\n        eventSupported: function (eventName) {\n            var isSupported = eventName in this.$element\n            if (!isSupported) {\n                this.$element.setAttribute(eventName, 'return;')\n                isSupported = typeof this.$element[eventName] === 'function'\n            }\n            return isSupported\n        }\n\n        ,\n        keyup: function (e) {\n            var blocked = false\n            switch (e.keyCode) {\n            case 40: // down arrow\n            case 38: // up arrow\n            case 16: // shift\n            case 17: // ctrl\n            case 18: // alt\n                break\n\n            case 9: // tab\n                var nextTab\n                if (nextTab = this.getNextTab(), nextTab != null) {\n                    // Get the nextTab if exists\n                    var that = this\n                    setTimeout(function () {\n                        that.setSelection(nextTab.start, nextTab.end)\n                    }, 500)\n\n                    blocked = true\n                } else {\n                    // The next tab memory contains nothing...\n                    // check the cursor position to determine tab action\n                    var cursor = this.getSelection()\n\n                    if (cursor.start == cursor.end && cursor.end == this.getContent().length) {\n                        // The cursor already reach the end of the content\n                        blocked = false\n\n                    } else {\n                        // Put the cursor to the end\n                        this.setSelection(this.getContent().length, this.getContent().length)\n\n                        blocked = true\n                    }\n                }\n\n                break\n\n            case 13: // enter\n                blocked = false\n                break\n            case 27: // escape\n                if (this.$isFullscreen) this.setFullscreen(false)\n                blocked = false\n                break\n\n            default:\n                blocked = false\n            }\n\n            if (blocked) {\n                e.stopPropagation()\n                e.preventDefault()\n            }\n\n            this.$options.onChange(this)\n        }\n\n        ,\n        change: function (e) {\n            this.$options.onChange(this);\n            return this;\n        }\n\n        ,\n        focus: function (e) {\n            var options = this.$options,\n                isHideable = options.hideable,\n                editor = this.$editor\n\n            editor.addClass('active')\n\n            // Blur other markdown(s)\n            $(document).find('.md-editor').each(function () {\n                if ($(this).attr('id') != editor.attr('id')) {\n                    var attachedMarkdown\n\n                    if (attachedMarkdown = $(this).find('textarea').data('markdown'),\n                        attachedMarkdown == null) {\n                        attachedMarkdown = $(this).find('div[data-provider=\"markdown-preview\"]').data('markdown')\n                    }\n\n                    if (attachedMarkdown) {\n                        attachedMarkdown.blur()\n                    }\n                }\n            })\n\n            // Trigger the onFocus hook\n            options.onFocus(this);\n\n            return this\n        }\n\n        ,\n        blur: function (e) {\n            var options = this.$options,\n                isHideable = options.hideable,\n                editor = this.$editor,\n                editable = this.$editable\n\n            if (editor.hasClass('active') || this.$element.parent().length == 0) {\n                editor.removeClass('active')\n\n                if (isHideable) {\n\n                    // Check for editable elements\n                    if (editable.el != null) {\n                        // Build the original element\n                        var oldElement = $('<' + editable.type + '/>'),\n                            content = this.getContent(),\n                            currentContent = (typeof markdown == 'object') ? markdown.toHTML(content) : content\n\n                        $(editable.attrKeys).each(function (k, v) {\n                            oldElement.attr(editable.attrKeys[k], editable.attrValues[k])\n                        })\n\n                        // Get the editor content\n                        oldElement.html(currentContent)\n\n                        editor.replaceWith(oldElement)\n                    } else {\n                        editor.hide()\n\n                    }\n                }\n\n                // Trigger the onBlur hook\n                options.onBlur(this)\n            }\n\n            return this\n        }\n\n    }\n\n    /* MARKDOWN PLUGIN DEFINITION\n     * ========================== */\n\n    var old = $.fn.markdown\n\n    $.fn.markdown = function (option) {\n        return this.each(function () {\n            var $this = $(this),\n                data = $this.data('markdown'),\n                options = typeof option == 'object' && option\n            if (!data) $this.data('markdown', (data = new Markdown(this, options)))\n        })\n    }\n\n    $.fn.markdown.messages = {}\n\n    $.fn.markdown.defaults = {\n        /* Editor Properties */\n        autofocus: false,\n        hideable: false,\n        savable: false,\n        width: 'inherit',\n        height: 'inherit',\n        resize: 'none',\n        iconlibrary: 'glyph',\n        language: 'zh',\n        initialstate: 'editor',\n\n        /* Buttons Properties */\n        buttons: [\n      [{\n                name: 'groupFont',\n                data: [{\n                    name: 'cmdBold',\n                    hotkey: 'Ctrl+B',\n                    title: 'Bold',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-bold',\n                        fa: 'fa fa-bold',\n                        'fa-3': 'icon-bold'\n                    },\n                    callback: function (e) {\n                        // Give/remove ** surround the selection\n                        var chunk, cursor, selected = e.getSelection(),\n                            content = e.getContent()\n\n                        if (selected.length == 0) {\n                            // Give extra word\n                            chunk = e.__localize('strong text')\n                        } else {\n                            chunk = selected.text\n                        }\n\n                        // transform selection and set the cursor into chunked text\n                        if (content.substr(selected.start - 2, 2) == '**' && content.substr(selected.end, 2) == '**') {\n                            e.setSelection(selected.start - 2, selected.end + 2)\n                            e.replaceSelection(chunk)\n                            cursor = selected.start - 2\n                        } else {\n                            e.replaceSelection('**' + chunk + '**')\n                            cursor = selected.start + 2\n                        }\n\n                        // Set the cursor\n                        e.setSelection(cursor, cursor + chunk.length)\n                    }\n        }, {\n                    name: 'cmdItalic',\n                    title: 'Italic',\n                    hotkey: 'Ctrl+I',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-italic',\n                        fa: 'fa fa-italic',\n                        'fa-3': 'icon-italic'\n                    },\n                    callback: function (e) {\n                        // Give/remove * surround the selection\n                        var chunk, cursor, selected = e.getSelection(),\n                            content = e.getContent()\n\n                        if (selected.length == 0) {\n                            // Give extra word\n                            chunk = e.__localize('emphasized text')\n                        } else {\n                            chunk = selected.text\n                        }\n\n                        // transform selection and set the cursor into chunked text\n                        if (content.substr(selected.start - 1, 1) == '_' && content.substr(selected.end, 1) == '_') {\n                            e.setSelection(selected.start - 1, selected.end + 1)\n                            e.replaceSelection(chunk)\n                            cursor = selected.start - 1\n                        } else {\n                            e.replaceSelection('_' + chunk + '_')\n                            cursor = selected.start + 1\n                        }\n\n                        // Set the cursor\n                        e.setSelection(cursor, cursor + chunk.length)\n                    }\n        }, {\n                    name: 'cmdHeading',\n                    title: 'Heading',\n                    hotkey: 'Ctrl+H',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-header',\n                        fa: 'fa fa-header',\n                        'fa-3': 'icon-font'\n                    },\n                    callback: function (e) {\n                        // Append/remove ### surround the selection\n                        var chunk, cursor, selected = e.getSelection(),\n                            content = e.getContent(),\n                            pointer, prevChar\n\n                        if (selected.length == 0) {\n                            // Give extra word\n                            chunk = e.__localize('heading text')\n                        } else {\n                            chunk = selected.text + '\\n';\n                        }\n\n                        // transform selection and set the cursor into chunked text\n                        if ((pointer = 4, content.substr(selected.start - pointer, pointer) == '### ') || (pointer = 3, content.substr(selected.start - pointer, pointer) == '###')) {\n                            e.setSelection(selected.start - pointer, selected.end)\n                            e.replaceSelection(chunk)\n                            cursor = selected.start - pointer\n                        } else if (selected.start > 0 && (prevChar = content.substr(selected.start - 1, 1), !!prevChar && prevChar != '\\n')) {\n                            e.replaceSelection('\\n\\n### ' + chunk)\n                            cursor = selected.start + 6\n                        } else {\n                            // Empty string before element\n                            e.replaceSelection('### ' + chunk)\n                            cursor = selected.start + 4\n                        }\n\n                        // Set the cursor\n                        e.setSelection(cursor, cursor + chunk.length)\n                    }\n        }]\n      }, {\n                name: 'groupLink',\n                data: [{\n                    name: 'cmdUrl',\n                    title: 'URL/Link',\n                    hotkey: 'Ctrl+L',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-link',\n                        fa: 'fa fa-link',\n                        'fa-3': 'icon-link'\n                    },\n                    callback: function (e) {\n                        // Give [] surround the selection and prepend the link\n                        var chunk, cursor, selected = e.getSelection(),\n                            content = e.getContent(),\n                            link\n\n                        if (selected.length == 0) {\n                            // Give extra word\n                            chunk = e.__localize('enter link description here')\n                        } else {\n                            chunk = selected.text\n                        }\n\n                        link = prompt(e.__localize('Insert Hyperlink'), 'http://')\n\n                        if (link != null && link != '' && link != 'http://' && link.substr(0, 4) == 'http') {\n                            var sanitizedLink = $('<div>' + link + '</div>').text()\n\n                            // transform selection and set the cursor into chunked text\n                            e.replaceSelection('[' + chunk + '](' + sanitizedLink + ')')\n                            cursor = selected.start + 1\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n                    }\n        }, {\n                    name: 'cmdImage',\n                    title: 'Image',\n                    hotkey: 'Ctrl+G',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-picture',\n                        fa: 'fa fa-picture-o',\n                        'fa-3': 'icon-picture'\n                    },\n                    callback: function (e) {\n                        // Give ![] surround the selection and prepend the image link\n                        var chunk, cursor, selected = e.getSelection(),\n                            content = e.getContent(),\n                            link\n\n                        if (selected.length == 0) {\n                            // Give extra word\n                            chunk = e.__localize('enter image description here')\n                        } else {\n                            chunk = selected.text\n                        }\n\n                        link = prompt(e.__localize('Insert Image Hyperlink'), 'http://')\n\n                        if (link != null && link != '' && link != 'http://' && link.substr(0, 4) == 'http') {\n                            var sanitizedLink = $('<div>' + link + '</div>').text()\n\n                            // transform selection and set the cursor into chunked text\n                            e.replaceSelection('![' + chunk + '](' + sanitizedLink + ' \"' + e.__localize('enter image title here') + '\")')\n                            cursor = selected.start + 2\n\n                            // Set the next tab\n                            e.setNextTab(e.__localize('enter image title here'))\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n                    }\n        }]\n      }, {\n                name: 'groupMisc',\n                data: [{\n                        name: 'cmdList',\n                        hotkey: 'Ctrl+U',\n                        title: 'Unordered List',\n                        icon: {\n                            glyph: 'glyphicon glyphicon-list',\n                            fa: 'fa fa-list',\n                            'fa-3': 'icon-list-ul'\n                        },\n                        callback: function (e) {\n                            // Prepend/Give - surround the selection\n                            var chunk, cursor, selected = e.getSelection(),\n                                content = e.getContent()\n\n                            // transform selection and set the cursor into chunked text\n                            if (selected.length == 0) {\n                                // Give extra word\n                                chunk = e.__localize('list text here')\n\n                                e.replaceSelection('- ' + chunk)\n                                // Set the cursor\n                                cursor = selected.start + 2\n\n                            } else {\n                                if (selected.text.indexOf('\\n') < 0) {\n                                    chunk = selected.text\n\n                                    e.replaceSelection('- ' + chunk)\n\n                                    // Set the cursor\n                                    cursor = selected.start + 2\n                                } else {\n                                    var list = []\n\n                                    list = selected.text.split('\\n')\n                                    chunk = list[0]\n\n                                    $.each(list, function (k, v) {\n                                        list[k] = '- ' + v\n                                    })\n\n                                    e.replaceSelection('\\n\\n' + list.join('\\n'))\n\n                                    // Set the cursor\n                                    cursor = selected.start + 4\n                                }\n                            }\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n        },\n                    {\n                        name: 'cmdListO',\n                        hotkey: 'Ctrl+O',\n                        title: 'Ordered List',\n                        icon: {\n                            glyph: 'glyphicon glyphicon-th-list',\n                            fa: 'fa fa-list-ol',\n                            'fa-3': 'icon-list-ol'\n                        },\n                        callback: function (e) {\n\n                            // Prepend/Give - surround the selection\n                            var chunk, cursor, selected = e.getSelection(),\n                                content = e.getContent()\n\n                            // transform selection and set the cursor into chunked text\n                            if (selected.length == 0) {\n                                // Give extra word\n                                chunk = e.__localize('list text here')\n                                e.replaceSelection('1. ' + chunk)\n                                // Set the cursor\n                                cursor = selected.start + 3\n\n                            } else {\n                                if (selected.text.indexOf('\\n') < 0) {\n                                    chunk = selected.text\n\n                                    e.replaceSelection('1. ' + chunk)\n\n                                    // Set the cursor\n                                    cursor = selected.start + 3\n                                } else {\n                                    var list = []\n\n                                    list = selected.text.split('\\n')\n                                    chunk = list[0]\n\n                                    $.each(list, function (k, v) {\n                                        list[k] = '1. ' + v\n                                    })\n\n                                    e.replaceSelection('\\n\\n' + list.join('\\n'))\n\n                                    // Set the cursor\n                                    cursor = selected.start + 5\n                                }\n                            }\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n        },\n                    {\n                        name: 'cmdCode',\n                        hotkey: 'Ctrl+K',\n                        title: 'Code',\n                        icon: {\n                            glyph: 'glyphicon glyphicon-asterisk',\n                            fa: 'fa fa-code',\n                            'fa-3': 'icon-code'\n                        },\n                        callback: function (e) {\n\n                            // Give/remove ** surround the selection\n                            var chunk, cursor, selected = e.getSelection(),\n                                content = e.getContent()\n\n                            if (selected.length == 0) {\n                                // Give extra word\n                                chunk = e.__localize('code text here')\n                            } else {\n                                chunk = selected.text\n                            }\n\n                            // transform selection and set the cursor into chunked text\n                            if (content.substr(selected.start - 1, 1) == '`' && content.substr(selected.end, 1) == '`') {\n                                e.setSelection(selected.start - 1, selected.end + 1)\n                                e.replaceSelection(chunk)\n                                cursor = selected.start - 1\n                            } else {\n                                e.replaceSelection('`' + chunk + '`')\n                                cursor = selected.start + 1\n                            }\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n        },\n                    {\n                        name: 'cmdQuote',\n                        hotkey: 'Ctrl+Q',\n                        title: 'Quote',\n                        icon: {\n                            glyph: 'glyphicon glyphicon-comment',\n                            fa: 'fa fa-quote-left',\n                            'fa-3': 'icon-quote-left'\n                        },\n                        callback: function (e) {\n                            // Prepend/Give - surround the selection\n                            var chunk, cursor, selected = e.getSelection(),\n                                content = e.getContent()\n\n                            // transform selection and set the cursor into chunked text\n                            if (selected.length == 0) {\n                                // Give extra word\n                                chunk = e.__localize('quote here')\n                                e.replaceSelection('> ' + chunk)\n                                // Set the cursor\n                                cursor = selected.start + 2\n\n                            } else {\n                                if (selected.text.indexOf('\\n') < 0) {\n                                    chunk = selected.text\n\n                                    e.replaceSelection('> ' + chunk)\n\n                                    // Set the cursor\n                                    cursor = selected.start + 2\n                                } else {\n                                    var list = []\n\n                                    list = selected.text.split('\\n')\n                                    chunk = list[0]\n\n                                    $.each(list, function (k, v) {\n                                        list[k] = '> ' + v\n                                    })\n\n                                    e.replaceSelection('\\n\\n' + list.join('\\n'))\n\n                                    // Set the cursor\n                                    cursor = selected.start + 4\n                                }\n                            }\n\n                            // Set the cursor\n                            e.setSelection(cursor, cursor + chunk.length)\n                        }\n        }]\n      }, {\n                name: 'groupUtil',\n                data: [{\n                    name: 'cmdPreview',\n                    toggle: true,\n                    hotkey: 'Ctrl+P',\n                    title: 'Preview',\n                    btnText: 'Preview',\n                    btnClass: 'btn btn-sm',\n                    icon: {\n                        glyph: 'glyphicon glyphicon-search',\n                        fa: 'fa fa-search',\n                        'fa-3': 'icon-search'\n                    },\n                    callback: function (e) {\n                        // Check the preview mode and toggle based on this flag\n                        var isPreview = e.$isPreview,\n                            content\n\n                        if (isPreview == false) {\n                            // Give flag that tell the editor enter preview mode\n                            e.showPreview()\n                        } else {\n                            e.hidePreview()\n                        }\n                    }\n        }]\n      }]\n    ],\n        additionalButtons: [], // Place to hook more buttons by code\n        reorderButtonGroups: [],\n        hiddenButtons: [], // Default hidden buttons\n        disabledButtons: [], // Default disabled buttons\n        footer: '',\n        fullscreen: {\n            enable: true,\n            icons: {\n                fullscreenOn: {\n                    fa: 'fa fa-expand',\n                    glyph: 'glyphicon glyphicon-fullscreen',\n                    'fa-3': 'icon-resize-full'\n                },\n                fullscreenOff: {\n                    fa: 'fa fa-compress',\n                    glyph: 'glyphicon glyphicon-fullscreen',\n                    'fa-3': 'icon-resize-small'\n                }\n            }\n        },\n\n        /* Events hook */\n        onShow: function (e) {},\n        onPreview: function (e) {},\n        onSave: function (e) {},\n        onBlur: function (e) {},\n        onFocus: function (e) {},\n        onChange: function (e) {},\n        onFullscreen: function (e) {}\n    }\n\n    $.fn.markdown.Constructor = Markdown\n\n\n    /* MARKDOWN NO CONFLICT\n     * ==================== */\n\n    $.fn.markdown.noConflict = function () {\n        $.fn.markdown = old\n        return this\n    }\n\n    /* MARKDOWN GLOBAL FUNCTION & DATA-API\n     * ==================================== */\n    var initMarkdown = function (el) {\n        var $this = el\n\n        if ($this.data('markdown')) {\n            $this.data('markdown').showEditor()\n            return\n        }\n\n        $this.markdown()\n    }\n\n    var blurNonFocused = function (e) {\n        var $activeElement = $(document.activeElement)\n\n        // Blur event\n        $(document).find('.md-editor').each(function () {\n            var $this = $(this),\n                focused = $activeElement.closest('.md-editor')[0] === this,\n                attachedMarkdown = $this.find('textarea').data('markdown') ||\n                $this.find('div[data-provider=\"markdown-preview\"]').data('markdown')\n\n            if (attachedMarkdown && !focused) {\n                attachedMarkdown.blur()\n            }\n        })\n    }\n\n    $(document)\n        .on('click.markdown.data-api', '[data-provide=\"markdown-editable\"]', function (e) {\n            initMarkdown($(this))\n            e.preventDefault()\n        })\n        .on('click focusin', function (e) {\n            blurNonFocused(e)\n        })\n        .ready(function () {\n            $('textarea[data-provide=\"markdown\"]').each(function () {\n                initMarkdown($(this))\n            })\n        })\n\n}(window.jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/markdown/bootstrap-markdown.zh.js",
    "content": "/**\n * Chinese translation for bootstrap-markdown\n * benhaile <denghaier@163.com>\n */\n(function ($) {\n  $.fn.markdown.messages.zh = {\n    'Bold': \"粗体\",\n    'Italic': \"斜体\",\n    'Heading': \"标题\",\n    'URL/Link': \"链接\",\n    'Image': \"图片\",\n    'List': \"列表\",\n    'Unordered List': \"无序列表\",\n    'Ordered List': \"有序列表\",\n    'Code': \"代码\",\n    'Quote': \"引用\",\n    'Preview': \"预览\",\n    'strong text': \"粗体\",\n    'emphasized text': \"强调\",\n    'heading text': \"标题\",\n    'enter link description here': \"输入链接说明\",\n    'Insert Hyperlink': \"URL地址\",\n    'enter image description here': \"输入图片说明\",\n    'Insert Image Hyperlink': \"图片URL地址\",\n    'enter image title here': \"在这里输入图片标题\",\n    'list text here': \"这里是列表文本\",\n    'code text here': \"这里输入代码\",\n    'quote here': \"这里输入引用文本\"\n\n\n  };\n}(jQuery));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/markdown/markdown.js",
    "content": "// Released under MIT license\n// Copyright (c) 2009-2010 Dominic Baggott\n// Copyright (c) 2009-2010 Ash Berlin\n// Copyright (c) 2011 Christoph Dorn <christoph@christophdorn.com> (http://www.christophdorn.com)\n\n(function( expose ) {\n\n/**\n *  class Markdown\n *\n *  Markdown processing in Javascript done right. We have very particular views\n *  on what constitutes 'right' which include:\n *\n *  - produces well-formed HTML (this means that em and strong nesting is\n *    important)\n *\n *  - has an intermediate representation to allow processing of parsed data (We\n *    in fact have two, both as [JsonML]: a markdown tree and an HTML tree).\n *\n *  - is easily extensible to add new dialects without having to rewrite the\n *    entire parsing mechanics\n *\n *  - has a good test suite\n *\n *  This implementation fulfills all of these (except that the test suite could\n *  do with expanding to automatically run all the fixtures from other Markdown\n *  implementations.)\n *\n *  ##### Intermediate Representation\n *\n *  *TODO* Talk about this :) Its JsonML, but document the node names we use.\n *\n *  [JsonML]: http://jsonml.org/ \"JSON Markup Language\"\n **/\nvar Markdown = expose.Markdown = function Markdown(dialect) {\n  switch (typeof dialect) {\n    case \"undefined\":\n      this.dialect = Markdown.dialects.Gruber;\n      break;\n    case \"object\":\n      this.dialect = dialect;\n      break;\n    default:\n      if (dialect in Markdown.dialects) {\n        this.dialect = Markdown.dialects[dialect];\n      }\n      else {\n        throw new Error(\"Unknown Markdown dialect '\" + String(dialect) + \"'\");\n      }\n      break;\n  }\n  this.em_state = [];\n  this.strong_state = [];\n  this.debug_indent = \"\";\n};\n\n/**\n *  parse( markdown, [dialect] ) -> JsonML\n *  - markdown (String): markdown string to parse\n *  - dialect (String | Dialect): the dialect to use, defaults to gruber\n *\n *  Parse `markdown` and return a markdown document as a Markdown.JsonML tree.\n **/\nexpose.parse = function( source, dialect ) {\n  // dialect will default if undefined\n  var md = new Markdown( dialect );\n  return md.toTree( source );\n};\n\n/**\n *  toHTML( markdown, [dialect]  ) -> String\n *  toHTML( md_tree ) -> String\n *  - markdown (String): markdown string to parse\n *  - md_tree (Markdown.JsonML): parsed markdown tree\n *\n *  Take markdown (either as a string or as a JsonML tree) and run it through\n *  [[toHTMLTree]] then turn it into a well-formated HTML fragment.\n **/\nexpose.toHTML = function toHTML( source , dialect , options ) {\n  var input = expose.toHTMLTree( source , dialect , options );\n\n  return expose.renderJsonML( input );\n};\n\n/**\n *  toHTMLTree( markdown, [dialect] ) -> JsonML\n *  toHTMLTree( md_tree ) -> JsonML\n *  - markdown (String): markdown string to parse\n *  - dialect (String | Dialect): the dialect to use, defaults to gruber\n *  - md_tree (Markdown.JsonML): parsed markdown tree\n *\n *  Turn markdown into HTML, represented as a JsonML tree. If a string is given\n *  to this function, it is first parsed into a markdown tree by calling\n *  [[parse]].\n **/\nexpose.toHTMLTree = function toHTMLTree( input, dialect , options ) {\n  // convert string input to an MD tree\n  if ( typeof input ===\"string\" ) input = this.parse( input, dialect );\n\n  // Now convert the MD tree to an HTML tree\n\n  // remove references from the tree\n  var attrs = extract_attr( input ),\n      refs = {};\n\n  if ( attrs && attrs.references ) {\n    refs = attrs.references;\n  }\n\n  var html = convert_tree_to_html( input, refs , options );\n  merge_text_nodes( html );\n  return html;\n};\n\n// For Spidermonkey based engines\nfunction mk_block_toSource() {\n  return \"Markdown.mk_block( \" +\n          uneval(this.toString()) +\n          \", \" +\n          uneval(this.trailing) +\n          \", \" +\n          uneval(this.lineNumber) +\n          \" )\";\n}\n\n// node\nfunction mk_block_inspect() {\n  var util = require('util');\n  return \"Markdown.mk_block( \" +\n          util.inspect(this.toString()) +\n          \", \" +\n          util.inspect(this.trailing) +\n          \", \" +\n          util.inspect(this.lineNumber) +\n          \" )\";\n\n}\n\nvar mk_block = Markdown.mk_block = function(block, trail, line) {\n  // Be helpful for default case in tests.\n  if ( arguments.length == 1 ) trail = \"\\n\\n\";\n\n  var s = new String(block);\n  s.trailing = trail;\n  // To make it clear its not just a string\n  s.inspect = mk_block_inspect;\n  s.toSource = mk_block_toSource;\n\n  if (line != undefined)\n    s.lineNumber = line;\n\n  return s;\n};\n\nfunction count_lines( str ) {\n  var n = 0, i = -1;\n  while ( ( i = str.indexOf('\\n', i+1) ) !== -1) n++;\n  return n;\n}\n\n// Internal - split source into rough blocks\nMarkdown.prototype.split_blocks = function splitBlocks( input, startLine ) {\n  // [\\s\\S] matches _anything_ (newline or space)\n  var re = /([\\s\\S]+?)($|\\n(?:\\s*\\n|$)+)/g,\n      blocks = [],\n      m;\n\n  var line_no = 1;\n\n  if ( ( m = /^(\\s*\\n)/.exec(input) ) != null ) {\n    // skip (but count) leading blank lines\n    line_no += count_lines( m[0] );\n    re.lastIndex = m[0].length;\n  }\n\n  while ( ( m = re.exec(input) ) !== null ) {\n    blocks.push( mk_block( m[1], m[2], line_no ) );\n    line_no += count_lines( m[0] );\n  }\n\n  return blocks;\n};\n\n/**\n *  Markdown#processBlock( block, next ) -> undefined | [ JsonML, ... ]\n *  - block (String): the block to process\n *  - next (Array): the following blocks\n *\n * Process `block` and return an array of JsonML nodes representing `block`.\n *\n * It does this by asking each block level function in the dialect to process\n * the block until one can. Succesful handling is indicated by returning an\n * array (with zero or more JsonML nodes), failure by a false value.\n *\n * Blocks handlers are responsible for calling [[Markdown#processInline]]\n * themselves as appropriate.\n *\n * If the blocks were split incorrectly or adjacent blocks need collapsing you\n * can adjust `next` in place using shift/splice etc.\n *\n * If any of this default behaviour is not right for the dialect, you can\n * define a `__call__` method on the dialect that will get invoked to handle\n * the block processing.\n */\nMarkdown.prototype.processBlock = function processBlock( block, next ) {\n  var cbs = this.dialect.block,\n      ord = cbs.__order__;\n\n  if ( \"__call__\" in cbs ) {\n    return cbs.__call__.call(this, block, next);\n  }\n\n  for ( var i = 0; i < ord.length; i++ ) {\n    //D:this.debug( \"Testing\", ord[i] );\n    var res = cbs[ ord[i] ].call( this, block, next );\n    if ( res ) {\n      //D:this.debug(\"  matched\");\n      if ( !isArray(res) || ( res.length > 0 && !( isArray(res[0]) ) ) )\n        this.debug(ord[i], \"didn't return a proper array\");\n      //D:this.debug( \"\" );\n      return res;\n    }\n  }\n\n  // Uhoh! no match! Should we throw an error?\n  return [];\n};\n\nMarkdown.prototype.processInline = function processInline( block ) {\n  return this.dialect.inline.__call__.call( this, String( block ) );\n};\n\n/**\n *  Markdown#toTree( source ) -> JsonML\n *  - source (String): markdown source to parse\n *\n *  Parse `source` into a JsonML tree representing the markdown document.\n **/\n// custom_tree means set this.tree to `custom_tree` and restore old value on return\nMarkdown.prototype.toTree = function toTree( source, custom_root ) {\n  var blocks = source instanceof Array ? source : this.split_blocks( source );\n\n  // Make tree a member variable so its easier to mess with in extensions\n  var old_tree = this.tree;\n  try {\n    this.tree = custom_root || this.tree || [ \"markdown\" ];\n\n    blocks:\n    while ( blocks.length ) {\n      var b = this.processBlock( blocks.shift(), blocks );\n\n      // Reference blocks and the like won't return any content\n      if ( !b.length ) continue blocks;\n\n      this.tree.push.apply( this.tree, b );\n    }\n    return this.tree;\n  }\n  finally {\n    if ( custom_root ) {\n      this.tree = old_tree;\n    }\n  }\n};\n\n// Noop by default\nMarkdown.prototype.debug = function () {\n  var args = Array.prototype.slice.call( arguments);\n  args.unshift(this.debug_indent);\n  if (typeof print !== \"undefined\")\n      print.apply( print, args );\n  if (typeof console !== \"undefined\" && typeof console.log !== \"undefined\")\n      console.log.apply( null, args );\n}\n\nMarkdown.prototype.loop_re_over_block = function( re, block, cb ) {\n  // Dont use /g regexps with this\n  var m,\n      b = block.valueOf();\n\n  while ( b.length && (m = re.exec(b) ) != null) {\n    b = b.substr( m[0].length );\n    cb.call(this, m);\n  }\n  return b;\n};\n\n/**\n * Markdown.dialects\n *\n * Namespace of built-in dialects.\n **/\nMarkdown.dialects = {};\n\n/**\n * Markdown.dialects.Gruber\n *\n * The default dialect that follows the rules set out by John Gruber's\n * markdown.pl as closely as possible. Well actually we follow the behaviour of\n * that script which in some places is not exactly what the syntax web page\n * says.\n **/\nMarkdown.dialects.Gruber = {\n  block: {\n    atxHeader: function atxHeader( block, next ) {\n      var m = block.match( /^(#{1,6})\\s*(.*?)\\s*#*\\s*(?:\\n|$)/ );\n\n      if ( !m ) return undefined;\n\n      var header = [ \"header\", { level: m[ 1 ].length } ];\n      Array.prototype.push.apply(header, this.processInline(m[ 2 ]));\n\n      if ( m[0].length < block.length )\n        next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n      return [ header ];\n    },\n\n    setextHeader: function setextHeader( block, next ) {\n      var m = block.match( /^(.*)\\n([-=])\\2\\2+(?:\\n|$)/ );\n\n      if ( !m ) return undefined;\n\n      var level = ( m[ 2 ] === \"=\" ) ? 1 : 2;\n      var header = [ \"header\", { level : level }, m[ 1 ] ];\n\n      if ( m[0].length < block.length )\n        next.unshift( mk_block( block.substr( m[0].length ), block.trailing, block.lineNumber + 2 ) );\n\n      return [ header ];\n    },\n\n    code: function code( block, next ) {\n      // |    Foo\n      // |bar\n      // should be a code block followed by a paragraph. Fun\n      //\n      // There might also be adjacent code block to merge.\n\n      var ret = [],\n          re = /^(?: {0,3}\\t| {4})(.*)\\n?/,\n          lines;\n\n      // 4 spaces + content\n      if ( !block.match( re ) ) return undefined;\n\n      block_search:\n      do {\n        // Now pull out the rest of the lines\n        var b = this.loop_re_over_block(\n                  re, block.valueOf(), function( m ) { ret.push( m[1] ); } );\n\n        if (b.length) {\n          // Case alluded to in first comment. push it back on as a new block\n          next.unshift( mk_block(b, block.trailing) );\n          break block_search;\n        }\n        else if (next.length) {\n          // Check the next block - it might be code too\n          if ( !next[0].match( re ) ) break block_search;\n\n          // Pull how how many blanks lines follow - minus two to account for .join\n          ret.push ( block.trailing.replace(/[^\\n]/g, '').substring(2) );\n\n          block = next.shift();\n        }\n        else {\n          break block_search;\n        }\n      } while (true);\n\n      return [ [ \"code_block\", ret.join(\"\\n\") ] ];\n    },\n\n    horizRule: function horizRule( block, next ) {\n      // this needs to find any hr in the block to handle abutting blocks\n      var m = block.match( /^(?:([\\s\\S]*?)\\n)?[ \\t]*([-_*])(?:[ \\t]*\\2){2,}[ \\t]*(?:\\n([\\s\\S]*))?$/ );\n\n      if ( !m ) {\n        return undefined;\n      }\n\n      var jsonml = [ [ \"hr\" ] ];\n\n      // if there's a leading abutting block, process it\n      if ( m[ 1 ] ) {\n        jsonml.unshift.apply( jsonml, this.processBlock( m[ 1 ], [] ) );\n      }\n\n      // if there's a trailing abutting block, stick it into next\n      if ( m[ 3 ] ) {\n        next.unshift( mk_block( m[ 3 ] ) );\n      }\n\n      return jsonml;\n    },\n\n    // There are two types of lists. Tight and loose. Tight lists have no whitespace\n    // between the items (and result in text just in the <li>) and loose lists,\n    // which have an empty line between list items, resulting in (one or more)\n    // paragraphs inside the <li>.\n    //\n    // There are all sorts weird edge cases about the original markdown.pl's\n    // handling of lists:\n    //\n    // * Nested lists are supposed to be indented by four chars per level. But\n    //   if they aren't, you can get a nested list by indenting by less than\n    //   four so long as the indent doesn't match an indent of an existing list\n    //   item in the 'nest stack'.\n    //\n    // * The type of the list (bullet or number) is controlled just by the\n    //    first item at the indent. Subsequent changes are ignored unless they\n    //    are for nested lists\n    //\n    lists: (function( ) {\n      // Use a closure to hide a few variables.\n      var any_list = \"[*+-]|\\\\d+\\\\.\",\n          bullet_list = /[*+-]/,\n          number_list = /\\d+\\./,\n          // Capture leading indent as it matters for determining nested lists.\n          is_list_re = new RegExp( \"^( {0,3})(\" + any_list + \")[ \\t]+\" ),\n          indent_re = \"(?: {0,3}\\\\t| {4})\";\n\n      // TODO: Cache this regexp for certain depths.\n      // Create a regexp suitable for matching an li for a given stack depth\n      function regex_for_depth( depth ) {\n\n        return new RegExp(\n          // m[1] = indent, m[2] = list_type\n          \"(?:^(\" + indent_re + \"{0,\" + depth + \"} {0,3})(\" + any_list + \")\\\\s+)|\" +\n          // m[3] = cont\n          \"(^\" + indent_re + \"{0,\" + (depth-1) + \"}[ ]{0,4})\"\n        );\n      }\n      function expand_tab( input ) {\n        return input.replace( / {0,3}\\t/g, \"    \" );\n      }\n\n      // Add inline content `inline` to `li`. inline comes from processInline\n      // so is an array of content\n      function add(li, loose, inline, nl) {\n        if (loose) {\n          li.push( [ \"para\" ].concat(inline) );\n          return;\n        }\n        // Hmmm, should this be any block level element or just paras?\n        var add_to = li[li.length -1] instanceof Array && li[li.length - 1][0] == \"para\"\n                   ? li[li.length -1]\n                   : li;\n\n        // If there is already some content in this list, add the new line in\n        if (nl && li.length > 1) inline.unshift(nl);\n\n        for (var i=0; i < inline.length; i++) {\n          var what = inline[i],\n              is_str = typeof what == \"string\";\n          if (is_str && add_to.length > 1 && typeof add_to[add_to.length-1] == \"string\" ) {\n            add_to[ add_to.length-1 ] += what;\n          }\n          else {\n            add_to.push( what );\n          }\n        }\n      }\n\n      // contained means have an indent greater than the current one. On\n      // *every* line in the block\n      function get_contained_blocks( depth, blocks ) {\n\n        var re = new RegExp( \"^(\" + indent_re + \"{\" + depth + \"}.*?\\\\n?)*$\" ),\n            replace = new RegExp(\"^\" + indent_re + \"{\" + depth + \"}\", \"gm\"),\n            ret = [];\n\n        while ( blocks.length > 0 ) {\n          if ( re.exec( blocks[0] ) ) {\n            var b = blocks.shift(),\n                // Now remove that indent\n                x = b.replace( replace, \"\");\n\n            ret.push( mk_block( x, b.trailing, b.lineNumber ) );\n          }\n          break;\n        }\n        return ret;\n      }\n\n      // passed to stack.forEach to turn list items up the stack into paras\n      function paragraphify(s, i, stack) {\n        var list = s.list;\n        var last_li = list[list.length-1];\n\n        if (last_li[1] instanceof Array && last_li[1][0] == \"para\") {\n          return;\n        }\n        if (i+1 == stack.length) {\n          // Last stack frame\n          // Keep the same array, but replace the contents\n          last_li.push( [\"para\"].concat( last_li.splice(1) ) );\n        }\n        else {\n          var sublist = last_li.pop();\n          last_li.push( [\"para\"].concat( last_li.splice(1) ), sublist );\n        }\n      }\n\n      // The matcher function\n      return function( block, next ) {\n        var m = block.match( is_list_re );\n        if ( !m ) return undefined;\n\n        function make_list( m ) {\n          var list = bullet_list.exec( m[2] )\n                   ? [\"bulletlist\"]\n                   : [\"numberlist\"];\n\n          stack.push( { list: list, indent: m[1] } );\n          return list;\n        }\n\n\n        var stack = [], // Stack of lists for nesting.\n            list = make_list( m ),\n            last_li,\n            loose = false,\n            ret = [ stack[0].list ],\n            i;\n\n        // Loop to search over block looking for inner block elements and loose lists\n        loose_search:\n        while( true ) {\n          // Split into lines preserving new lines at end of line\n          var lines = block.split( /(?=\\n)/ );\n\n          // We have to grab all lines for a li and call processInline on them\n          // once as there are some inline things that can span lines.\n          var li_accumulate = \"\";\n\n          // Loop over the lines in this block looking for tight lists.\n          tight_search:\n          for (var line_no=0; line_no < lines.length; line_no++) {\n            var nl = \"\",\n                l = lines[line_no].replace(/^\\n/, function(n) { nl = n; return \"\"; });\n\n            // TODO: really should cache this\n            var line_re = regex_for_depth( stack.length );\n\n            m = l.match( line_re );\n            //print( \"line:\", uneval(l), \"\\nline match:\", uneval(m) );\n\n            // We have a list item\n            if ( m[1] !== undefined ) {\n              // Process the previous list item, if any\n              if ( li_accumulate.length ) {\n                add( last_li, loose, this.processInline( li_accumulate ), nl );\n                // Loose mode will have been dealt with. Reset it\n                loose = false;\n                li_accumulate = \"\";\n              }\n\n              m[1] = expand_tab( m[1] );\n              var wanted_depth = Math.floor(m[1].length/4)+1;\n              //print( \"want:\", wanted_depth, \"stack:\", stack.length);\n              if ( wanted_depth > stack.length ) {\n                // Deep enough for a nested list outright\n                //print ( \"new nested list\" );\n                list = make_list( m );\n                last_li.push( list );\n                last_li = list[1] = [ \"listitem\" ];\n              }\n              else {\n                // We aren't deep enough to be strictly a new level. This is\n                // where Md.pl goes nuts. If the indent matches a level in the\n                // stack, put it there, else put it one deeper then the\n                // wanted_depth deserves.\n                var found = false;\n                for (i = 0; i < stack.length; i++) {\n                  if ( stack[ i ].indent != m[1] ) continue;\n                  list = stack[ i ].list;\n                  stack.splice( i+1 );\n                  found = true;\n                  break;\n                }\n\n                if (!found) {\n                  //print(\"not found. l:\", uneval(l));\n                  wanted_depth++;\n                  if (wanted_depth <= stack.length) {\n                    stack.splice(wanted_depth);\n                    //print(\"Desired depth now\", wanted_depth, \"stack:\", stack.length);\n                    list = stack[wanted_depth-1].list;\n                    //print(\"list:\", uneval(list) );\n                  }\n                  else {\n                    //print (\"made new stack for messy indent\");\n                    list = make_list(m);\n                    last_li.push(list);\n                  }\n                }\n\n                //print( uneval(list), \"last\", list === stack[stack.length-1].list );\n                last_li = [ \"listitem\" ];\n                list.push(last_li);\n              } // end depth of shenegains\n              nl = \"\";\n            }\n\n            // Add content\n            if (l.length > m[0].length) {\n              li_accumulate += nl + l.substr( m[0].length );\n            }\n          } // tight_search\n\n          if ( li_accumulate.length ) {\n            add( last_li, loose, this.processInline( li_accumulate ), nl );\n            // Loose mode will have been dealt with. Reset it\n            loose = false;\n            li_accumulate = \"\";\n          }\n\n          // Look at the next block - we might have a loose list. Or an extra\n          // paragraph for the current li\n          var contained = get_contained_blocks( stack.length, next );\n\n          // Deal with code blocks or properly nested lists\n          if (contained.length > 0) {\n            // Make sure all listitems up the stack are paragraphs\n            forEach( stack, paragraphify, this);\n\n            last_li.push.apply( last_li, this.toTree( contained, [] ) );\n          }\n\n          var next_block = next[0] && next[0].valueOf() || \"\";\n\n          if ( next_block.match(is_list_re) || next_block.match( /^ / ) ) {\n            block = next.shift();\n\n            // Check for an HR following a list: features/lists/hr_abutting\n            var hr = this.dialect.block.horizRule( block, next );\n\n            if (hr) {\n              ret.push.apply(ret, hr);\n              break;\n            }\n\n            // Make sure all listitems up the stack are paragraphs\n            forEach( stack, paragraphify, this);\n\n            loose = true;\n            continue loose_search;\n          }\n          break;\n        } // loose_search\n\n        return ret;\n      };\n    })(),\n\n    blockquote: function blockquote( block, next ) {\n      if ( !block.match( /^>/m ) )\n        return undefined;\n\n      var jsonml = [];\n\n      // separate out the leading abutting block, if any\n      if ( block[ 0 ] != \">\" ) {\n        var lines = block.split( /\\n/ ),\n            prev = [];\n\n        // keep shifting lines until you find a crotchet\n        while ( lines.length && lines[ 0 ][ 0 ] != \">\" ) {\n            prev.push( lines.shift() );\n        }\n\n        // reassemble!\n        block = lines.join( \"\\n\" );\n        jsonml.push.apply( jsonml, this.processBlock( prev.join( \"\\n\" ), [] ) );\n      }\n\n      // if the next block is also a blockquote merge it in\n      while ( next.length && next[ 0 ][ 0 ] == \">\" ) {\n        var b = next.shift();\n        block = new String(block + block.trailing + b);\n        block.trailing = b.trailing;\n      }\n\n      // Strip off the leading \"> \" and re-process as a block.\n      var input = block.replace( /^> ?/gm, '' ),\n          old_tree = this.tree;\n      jsonml.push( this.toTree( input, [ \"blockquote\" ] ) );\n\n      return jsonml;\n    },\n\n    referenceDefn: function referenceDefn( block, next) {\n      var re = /^\\s*\\[(.*?)\\]:\\s*(\\S+)(?:\\s+(?:(['\"])(.*?)\\3|\\((.*?)\\)))?\\n?/;\n      // interesting matches are [ , ref_id, url, , title, title ]\n\n      if ( !block.match(re) )\n        return undefined;\n\n      // make an attribute node if it doesn't exist\n      if ( !extract_attr( this.tree ) ) {\n        this.tree.splice( 1, 0, {} );\n      }\n\n      var attrs = extract_attr( this.tree );\n\n      // make a references hash if it doesn't exist\n      if ( attrs.references === undefined ) {\n        attrs.references = {};\n      }\n\n      var b = this.loop_re_over_block(re, block, function( m ) {\n\n        if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n          m[2] = m[2].substring( 1, m[2].length - 1 );\n\n        var ref = attrs.references[ m[1].toLowerCase() ] = {\n          href: m[2]\n        };\n\n        if (m[4] !== undefined)\n          ref.title = m[4];\n        else if (m[5] !== undefined)\n          ref.title = m[5];\n\n      } );\n\n      if (b.length)\n        next.unshift( mk_block( b, block.trailing ) );\n\n      return [];\n    },\n\n    para: function para( block, next ) {\n      // everything's a para!\n      return [ [\"para\"].concat( this.processInline( block ) ) ];\n    }\n  }\n};\n\nMarkdown.dialects.Gruber.inline = {\n\n    __oneElement__: function oneElement( text, patterns_or_re, previous_nodes ) {\n      var m,\n          res,\n          lastIndex = 0;\n\n      patterns_or_re = patterns_or_re || this.dialect.inline.__patterns__;\n      var re = new RegExp( \"([\\\\s\\\\S]*?)(\" + (patterns_or_re.source || patterns_or_re) + \")\" );\n\n      m = re.exec( text );\n      if (!m) {\n        // Just boring text\n        return [ text.length, text ];\n      }\n      else if ( m[1] ) {\n        // Some un-interesting text matched. Return that first\n        return [ m[1].length, m[1] ];\n      }\n\n      var res;\n      if ( m[2] in this.dialect.inline ) {\n        res = this.dialect.inline[ m[2] ].call(\n                  this,\n                  text.substr( m.index ), m, previous_nodes || [] );\n      }\n      // Default for now to make dev easier. just slurp special and output it.\n      res = res || [ m[2].length, m[2] ];\n      return res;\n    },\n\n    __call__: function inline( text, patterns ) {\n\n      var out = [],\n          res;\n\n      function add(x) {\n        //D:self.debug(\"  adding output\", uneval(x));\n        if (typeof x == \"string\" && typeof out[out.length-1] == \"string\")\n          out[ out.length-1 ] += x;\n        else\n          out.push(x);\n      }\n\n      while ( text.length > 0 ) {\n        res = this.dialect.inline.__oneElement__.call(this, text, patterns, out );\n        text = text.substr( res.shift() );\n        forEach(res, add )\n      }\n\n      return out;\n    },\n\n    // These characters are intersting elsewhere, so have rules for them so that\n    // chunks of plain text blocks don't include them\n    \"]\": function () {},\n    \"}\": function () {},\n\n    \"\\\\\": function escaped( text ) {\n      // [ length of input processed, node/children to add... ]\n      // Only esacape: \\ ` * _ { } [ ] ( ) # * + - . !\n      if ( text.match( /^\\\\[\\\\`\\*_{}\\[\\]()#\\+.!\\-]/ ) )\n        return [ 2, text[1] ];\n      else\n        // Not an esacpe\n        return [ 1, \"\\\\\" ];\n    },\n\n    \"![\": function image( text ) {\n\n      // Unlike images, alt text is plain text only. no other elements are\n      // allowed in there\n\n      // ![Alt text](/path/to/img.jpg \"Optional title\")\n      //      1          2            3       4         <--- captures\n      var m = text.match( /^!\\[(.*?)\\][ \\t]*\\([ \\t]*(\\S*)(?:[ \\t]+([\"'])(.*?)\\3)?[ \\t]*\\)/ );\n\n      if ( m ) {\n        if ( m[2] && m[2][0] == '<' && m[2][m[2].length-1] == '>' )\n          m[2] = m[2].substring( 1, m[2].length - 1 );\n\n        m[2] = this.dialect.inline.__call__.call( this, m[2], /\\\\/ )[0];\n\n        var attrs = { alt: m[1], href: m[2] || \"\" };\n        if ( m[4] !== undefined)\n          attrs.title = m[4];\n\n        return [ m[0].length, [ \"img\", attrs ] ];\n      }\n\n      // ![Alt text][id]\n      m = text.match( /^!\\[(.*?)\\][ \\t]*\\[(.*?)\\]/ );\n\n      if ( m ) {\n        // We can't check if the reference is known here as it likely wont be\n        // found till after. Check it in md tree->hmtl tree conversion\n        return [ m[0].length, [ \"img_ref\", { alt: m[1], ref: m[2].toLowerCase(), original: m[0] } ] ];\n      }\n\n      // Just consume the '!['\n      return [ 2, \"![\" ];\n    },\n\n    \"[\": function link( text ) {\n\n      var orig = String(text);\n      // Inline content is possible inside `link text`\n      var res = Markdown.DialectHelpers.inline_until_char.call( this, text.substr(1), ']' );\n\n      // No closing ']' found. Just consume the [\n      if ( !res ) return [ 1, '[' ];\n\n      var consumed = 1 + res[ 0 ],\n          children = res[ 1 ],\n          link,\n          attrs;\n\n      // At this point the first [...] has been parsed. See what follows to find\n      // out which kind of link we are (reference or direct url)\n      text = text.substr( consumed );\n\n      // [link text](/path/to/img.jpg \"Optional title\")\n      //                 1            2       3         <--- captures\n      // This will capture up to the last paren in the block. We then pull\n      // back based on if there a matching ones in the url\n      //    ([here](/url/(test))\n      // The parens have to be balanced\n      var m = text.match( /^\\s*\\([ \\t]*(\\S+)(?:[ \\t]+([\"'])(.*?)\\2)?[ \\t]*\\)/ );\n      if ( m ) {\n        var url = m[1];\n        consumed += m[0].length;\n\n        if ( url && url[0] == '<' && url[url.length-1] == '>' )\n          url = url.substring( 1, url.length - 1 );\n\n        // If there is a title we don't have to worry about parens in the url\n        if ( !m[3] ) {\n          var open_parens = 1; // One open that isn't in the capture\n          for (var len = 0; len < url.length; len++) {\n            switch ( url[len] ) {\n            case '(':\n              open_parens++;\n              break;\n            case ')':\n              if ( --open_parens == 0) {\n                consumed -= url.length - len;\n                url = url.substring(0, len);\n              }\n              break;\n            }\n          }\n        }\n\n        // Process escapes only\n        url = this.dialect.inline.__call__.call( this, url, /\\\\/ )[0];\n\n        attrs = { href: url || \"\" };\n        if ( m[3] !== undefined)\n          attrs.title = m[3];\n\n        link = [ \"link\", attrs ].concat( children );\n        return [ consumed, link ];\n      }\n\n      // [Alt text][id]\n      // [Alt text] [id]\n      m = text.match( /^\\s*\\[(.*?)\\]/ );\n\n      if ( m ) {\n\n        consumed += m[ 0 ].length;\n\n        // [links][] uses links as its reference\n        attrs = { ref: ( m[ 1 ] || String(children) ).toLowerCase(),  original: orig.substr( 0, consumed ) };\n\n        link = [ \"link_ref\", attrs ].concat( children );\n\n        // We can't check if the reference is known here as it likely wont be\n        // found till after. Check it in md tree->hmtl tree conversion.\n        // Store the original so that conversion can revert if the ref isn't found.\n        return [ consumed, link ];\n      }\n\n      // [id]\n      // Only if id is plain (no formatting.)\n      if ( children.length == 1 && typeof children[0] == \"string\" ) {\n\n        attrs = { ref: children[0].toLowerCase(),  original: orig.substr( 0, consumed ) };\n        link = [ \"link_ref\", attrs, children[0] ];\n        return [ consumed, link ];\n      }\n\n      // Just consume the '['\n      return [ 1, \"[\" ];\n    },\n\n\n    \"<\": function autoLink( text ) {\n      var m;\n\n      if ( ( m = text.match( /^<(?:((https?|ftp|mailto):[^>]+)|(.*?@.*?\\.[a-zA-Z]+))>/ ) ) != null ) {\n        if ( m[3] ) {\n          return [ m[0].length, [ \"link\", { href: \"mailto:\" + m[3] }, m[3] ] ];\n\n        }\n        else if ( m[2] == \"mailto\" ) {\n          return [ m[0].length, [ \"link\", { href: m[1] }, m[1].substr(\"mailto:\".length ) ] ];\n        }\n        else\n          return [ m[0].length, [ \"link\", { href: m[1] }, m[1] ] ];\n      }\n\n      return [ 1, \"<\" ];\n    },\n\n    \"`\": function inlineCode( text ) {\n      // Inline code block. as many backticks as you like to start it\n      // Always skip over the opening ticks.\n      var m = text.match( /(`+)(([\\s\\S]*?)\\1)/ );\n\n      if ( m && m[2] )\n        return [ m[1].length + m[2].length, [ \"inlinecode\", m[3] ] ];\n      else {\n        // TODO: No matching end code found - warn!\n        return [ 1, \"`\" ];\n      }\n    },\n\n    \"  \\n\": function lineBreak( text ) {\n      return [ 3, [ \"linebreak\" ] ];\n    }\n\n};\n\n// Meta Helper/generator method for em and strong handling\nfunction strong_em( tag, md ) {\n\n  var state_slot = tag + \"_state\",\n      other_slot = tag == \"strong\" ? \"em_state\" : \"strong_state\";\n\n  function CloseTag(len) {\n    this.len_after = len;\n    this.name = \"close_\" + md;\n  }\n\n  return function ( text, orig_match ) {\n\n    if (this[state_slot][0] == md) {\n      // Most recent em is of this type\n      //D:this.debug(\"closing\", md);\n      this[state_slot].shift();\n\n      // \"Consume\" everything to go back to the recrusion in the else-block below\n      return[ text.length, new CloseTag(text.length-md.length) ];\n    }\n    else {\n      // Store a clone of the em/strong states\n      var other = this[other_slot].slice(),\n          state = this[state_slot].slice();\n\n      this[state_slot].unshift(md);\n\n      //D:this.debug_indent += \"  \";\n\n      // Recurse\n      var res = this.processInline( text.substr( md.length ) );\n      //D:this.debug_indent = this.debug_indent.substr(2);\n\n      var last = res[res.length - 1];\n\n      //D:this.debug(\"processInline from\", tag + \": \", uneval( res ) );\n\n      var check = this[state_slot].shift();\n      if (last instanceof CloseTag) {\n        res.pop();\n        // We matched! Huzzah.\n        var consumed = text.length - last.len_after;\n        return [ consumed, [ tag ].concat(res) ];\n      }\n      else {\n        // Restore the state of the other kind. We might have mistakenly closed it.\n        this[other_slot] = other;\n        this[state_slot] = state;\n\n        // We can't reuse the processed result as it could have wrong parsing contexts in it.\n        return [ md.length, md ];\n      }\n    }\n  }; // End returned function\n}\n\nMarkdown.dialects.Gruber.inline[\"**\"] = strong_em(\"strong\", \"**\");\nMarkdown.dialects.Gruber.inline[\"__\"] = strong_em(\"strong\", \"__\");\nMarkdown.dialects.Gruber.inline[\"*\"]  = strong_em(\"em\", \"*\");\nMarkdown.dialects.Gruber.inline[\"_\"]  = strong_em(\"em\", \"_\");\n\n\n// Build default order from insertion order.\nMarkdown.buildBlockOrder = function(d) {\n  var ord = [];\n  for ( var i in d ) {\n    if ( i == \"__order__\" || i == \"__call__\" ) continue;\n    ord.push( i );\n  }\n  d.__order__ = ord;\n};\n\n// Build patterns for inline matcher\nMarkdown.buildInlinePatterns = function(d) {\n  var patterns = [];\n\n  for ( var i in d ) {\n    // __foo__ is reserved and not a pattern\n    if ( i.match( /^__.*__$/) ) continue;\n    var l = i.replace( /([\\\\.*+?|()\\[\\]{}])/g, \"\\\\$1\" )\n             .replace( /\\n/, \"\\\\n\" );\n    patterns.push( i.length == 1 ? l : \"(?:\" + l + \")\" );\n  }\n\n  patterns = patterns.join(\"|\");\n  d.__patterns__ = patterns;\n  //print(\"patterns:\", uneval( patterns ) );\n\n  var fn = d.__call__;\n  d.__call__ = function(text, pattern) {\n    if (pattern != undefined) {\n      return fn.call(this, text, pattern);\n    }\n    else\n    {\n      return fn.call(this, text, patterns);\n    }\n  };\n};\n\nMarkdown.DialectHelpers = {};\nMarkdown.DialectHelpers.inline_until_char = function( text, want ) {\n  var consumed = 0,\n      nodes = [];\n\n  while ( true ) {\n    if ( text[ consumed ] == want ) {\n      // Found the character we were looking for\n      consumed++;\n      return [ consumed, nodes ];\n    }\n\n    if ( consumed >= text.length ) {\n      // No closing char found. Abort.\n      return null;\n    }\n\n    var res = this.dialect.inline.__oneElement__.call(this, text.substr( consumed ) );\n    consumed += res[ 0 ];\n    // Add any returned nodes.\n    nodes.push.apply( nodes, res.slice( 1 ) );\n  }\n}\n\n// Helper function to make sub-classing a dialect easier\nMarkdown.subclassDialect = function( d ) {\n  function Block() {}\n  Block.prototype = d.block;\n  function Inline() {}\n  Inline.prototype = d.inline;\n\n  return { block: new Block(), inline: new Inline() };\n};\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Gruber.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Gruber.inline );\n\nMarkdown.dialects.Maruku = Markdown.subclassDialect( Markdown.dialects.Gruber );\n\nMarkdown.dialects.Maruku.processMetaHash = function processMetaHash( meta_string ) {\n  var meta = split_meta_hash( meta_string ),\n      attr = {};\n\n  for ( var i = 0; i < meta.length; ++i ) {\n    // id: #foo\n    if ( /^#/.test( meta[ i ] ) ) {\n      attr.id = meta[ i ].substring( 1 );\n    }\n    // class: .foo\n    else if ( /^\\./.test( meta[ i ] ) ) {\n      // if class already exists, append the new one\n      if ( attr['class'] ) {\n        attr['class'] = attr['class'] + meta[ i ].replace( /./, \" \" );\n      }\n      else {\n        attr['class'] = meta[ i ].substring( 1 );\n      }\n    }\n    // attribute: foo=bar\n    else if ( /\\=/.test( meta[ i ] ) ) {\n      var s = meta[ i ].split( /\\=/ );\n      attr[ s[ 0 ] ] = s[ 1 ];\n    }\n  }\n\n  return attr;\n}\n\nfunction split_meta_hash( meta_string ) {\n  var meta = meta_string.split( \"\" ),\n      parts = [ \"\" ],\n      in_quotes = false;\n\n  while ( meta.length ) {\n    var letter = meta.shift();\n    switch ( letter ) {\n      case \" \" :\n        // if we're in a quoted section, keep it\n        if ( in_quotes ) {\n          parts[ parts.length - 1 ] += letter;\n        }\n        // otherwise make a new part\n        else {\n          parts.push( \"\" );\n        }\n        break;\n      case \"'\" :\n      case '\"' :\n        // reverse the quotes and move straight on\n        in_quotes = !in_quotes;\n        break;\n      case \"\\\\\" :\n        // shift off the next letter to be used straight away.\n        // it was escaped so we'll keep it whatever it is\n        letter = meta.shift();\n      default :\n        parts[ parts.length - 1 ] += letter;\n        break;\n    }\n  }\n\n  return parts;\n}\n\nMarkdown.dialects.Maruku.block.document_meta = function document_meta( block, next ) {\n  // we're only interested in the first block\n  if ( block.lineNumber > 1 ) return undefined;\n\n  // document_meta blocks consist of one or more lines of `Key: Value\\n`\n  if ( ! block.match( /^(?:\\w+:.*\\n)*\\w+:.*$/ ) ) return undefined;\n\n  // make an attribute node if it doesn't exist\n  if ( !extract_attr( this.tree ) ) {\n    this.tree.splice( 1, 0, {} );\n  }\n\n  var pairs = block.split( /\\n/ );\n  for ( p in pairs ) {\n    var m = pairs[ p ].match( /(\\w+):\\s*(.*)$/ ),\n        key = m[ 1 ].toLowerCase(),\n        value = m[ 2 ];\n\n    this.tree[ 1 ][ key ] = value;\n  }\n\n  // document_meta produces no content!\n  return [];\n};\n\nMarkdown.dialects.Maruku.block.block_meta = function block_meta( block, next ) {\n  // check if the last line of the block is an meta hash\n  var m = block.match( /(^|\\n) {0,3}\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}$/ );\n  if ( !m ) return undefined;\n\n  // process the meta hash\n  var attr = this.dialect.processMetaHash( m[ 2 ] );\n\n  var hash;\n\n  // if we matched ^ then we need to apply meta to the previous block\n  if ( m[ 1 ] === \"\" ) {\n    var node = this.tree[ this.tree.length - 1 ];\n    hash = extract_attr( node );\n\n    // if the node is a string (rather than JsonML), bail\n    if ( typeof node === \"string\" ) return undefined;\n\n    // create the attribute hash if it doesn't exist\n    if ( !hash ) {\n      hash = {};\n      node.splice( 1, 0, hash );\n    }\n\n    // add the attributes in\n    for ( a in attr ) {\n      hash[ a ] = attr[ a ];\n    }\n\n    // return nothing so the meta hash is removed\n    return [];\n  }\n\n  // pull the meta hash off the block and process what's left\n  var b = block.replace( /\\n.*$/, \"\" ),\n      result = this.processBlock( b, [] );\n\n  // get or make the attributes hash\n  hash = extract_attr( result[ 0 ] );\n  if ( !hash ) {\n    hash = {};\n    result[ 0 ].splice( 1, 0, hash );\n  }\n\n  // attach the attributes to the block\n  for ( a in attr ) {\n    hash[ a ] = attr[ a ];\n  }\n\n  return result;\n};\n\nMarkdown.dialects.Maruku.block.definition_list = function definition_list( block, next ) {\n  // one or more terms followed by one or more definitions, in a single block\n  var tight = /^((?:[^\\s:].*\\n)+):\\s+([\\s\\S]+)$/,\n      list = [ \"dl\" ],\n      i;\n\n  // see if we're dealing with a tight or loose block\n  if ( ( m = block.match( tight ) ) ) {\n    // pull subsequent tight DL blocks out of `next`\n    var blocks = [ block ];\n    while ( next.length && tight.exec( next[ 0 ] ) ) {\n      blocks.push( next.shift() );\n    }\n\n    for ( var b = 0; b < blocks.length; ++b ) {\n      var m = blocks[ b ].match( tight ),\n          terms = m[ 1 ].replace( /\\n$/, \"\" ).split( /\\n/ ),\n          defns = m[ 2 ].split( /\\n:\\s+/ );\n\n      // print( uneval( m ) );\n\n      for ( i = 0; i < terms.length; ++i ) {\n        list.push( [ \"dt\", terms[ i ] ] );\n      }\n\n      for ( i = 0; i < defns.length; ++i ) {\n        // run inline processing over the definition\n        list.push( [ \"dd\" ].concat( this.processInline( defns[ i ].replace( /(\\n)\\s+/, \"$1\" ) ) ) );\n      }\n    }\n  }\n  else {\n    return undefined;\n  }\n\n  return [ list ];\n};\n\nMarkdown.dialects.Maruku.inline[ \"{:\" ] = function inline_meta( text, matches, out ) {\n  if ( !out.length ) {\n    return [ 2, \"{:\" ];\n  }\n\n  // get the preceeding element\n  var before = out[ out.length - 1 ];\n\n  if ( typeof before === \"string\" ) {\n    return [ 2, \"{:\" ];\n  }\n\n  // match a meta hash\n  var m = text.match( /^\\{:\\s*((?:\\\\\\}|[^\\}])*)\\s*\\}/ );\n\n  // no match, false alarm\n  if ( !m ) {\n    return [ 2, \"{:\" ];\n  }\n\n  // attach the attributes to the preceeding element\n  var meta = this.dialect.processMetaHash( m[ 1 ] ),\n      attr = extract_attr( before );\n\n  if ( !attr ) {\n    attr = {};\n    before.splice( 1, 0, attr );\n  }\n\n  for ( var k in meta ) {\n    attr[ k ] = meta[ k ];\n  }\n\n  // cut out the string and replace it with nothing\n  return [ m[ 0 ].length, \"\" ];\n};\n\nMarkdown.buildBlockOrder ( Markdown.dialects.Maruku.block );\nMarkdown.buildInlinePatterns( Markdown.dialects.Maruku.inline );\n\nvar isArray = Array.isArray || function(obj) {\n  return Object.prototype.toString.call(obj) == '[object Array]';\n};\n\nvar forEach;\n// Don't mess with Array.prototype. Its not friendly\nif ( Array.prototype.forEach ) {\n  forEach = function( arr, cb, thisp ) {\n    return arr.forEach( cb, thisp );\n  };\n}\nelse {\n  forEach = function(arr, cb, thisp) {\n    for (var i = 0; i < arr.length; i++) {\n      cb.call(thisp || arr, arr[i], i, arr);\n    }\n  }\n}\n\nfunction extract_attr( jsonml ) {\n  return isArray(jsonml)\n      && jsonml.length > 1\n      && typeof jsonml[ 1 ] === \"object\"\n      && !( isArray(jsonml[ 1 ]) )\n      ? jsonml[ 1 ]\n      : undefined;\n}\n\n\n\n/**\n *  renderJsonML( jsonml[, options] ) -> String\n *  - jsonml (Array): JsonML array to render to XML\n *  - options (Object): options\n *\n *  Converts the given JsonML into well-formed XML.\n *\n *  The options currently understood are:\n *\n *  - root (Boolean): wether or not the root node should be included in the\n *    output, or just its children. The default `false` is to not include the\n *    root itself.\n */\nexpose.renderJsonML = function( jsonml, options ) {\n  options = options || {};\n  // include the root element in the rendered output?\n  options.root = options.root || false;\n\n  var content = [];\n\n  if ( options.root ) {\n    content.push( render_tree( jsonml ) );\n  }\n  else {\n    jsonml.shift(); // get rid of the tag\n    if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n      jsonml.shift(); // get rid of the attributes\n    }\n\n    while ( jsonml.length ) {\n      content.push( render_tree( jsonml.shift() ) );\n    }\n  }\n\n  return content.join( \"\\n\\n\" );\n};\n\nfunction escapeHTML( text ) {\n  return text.replace( /&/g, \"&amp;\" )\n             .replace( /</g, \"&lt;\" )\n             .replace( />/g, \"&gt;\" )\n             .replace( /\"/g, \"&quot;\" )\n             .replace( /'/g, \"&#39;\" );\n}\n\nfunction render_tree( jsonml ) {\n  // basic case\n  if ( typeof jsonml === \"string\" ) {\n    return escapeHTML( jsonml );\n  }\n\n  var tag = jsonml.shift(),\n      attributes = {},\n      content = [];\n\n  if ( jsonml.length && typeof jsonml[ 0 ] === \"object\" && !( jsonml[ 0 ] instanceof Array ) ) {\n    attributes = jsonml.shift();\n  }\n\n  while ( jsonml.length ) {\n    content.push( arguments.callee( jsonml.shift() ) );\n  }\n\n  var tag_attrs = \"\";\n  for ( var a in attributes ) {\n    tag_attrs += \" \" + a + '=\"' + escapeHTML( attributes[ a ] ) + '\"';\n  }\n\n  // be careful about adding whitespace here for inline elements\n  if ( tag == \"img\" || tag == \"br\" || tag == \"hr\" ) {\n    return \"<\"+ tag + tag_attrs + \"/>\";\n  }\n  else {\n    return \"<\"+ tag + tag_attrs + \">\" + content.join( \"\" ) + \"</\" + tag + \">\";\n  }\n}\n\nfunction convert_tree_to_html( tree, references, options ) {\n  var i;\n  options = options || {};\n\n  // shallow clone\n  var jsonml = tree.slice( 0 );\n\n  if (typeof options.preprocessTreeNode === \"function\") {\n      jsonml = options.preprocessTreeNode(jsonml, references);\n  }\n\n  // Clone attributes if they exist\n  var attrs = extract_attr( jsonml );\n  if ( attrs ) {\n    jsonml[ 1 ] = {};\n    for ( i in attrs ) {\n      jsonml[ 1 ][ i ] = attrs[ i ];\n    }\n    attrs = jsonml[ 1 ];\n  }\n\n  // basic case\n  if ( typeof jsonml === \"string\" ) {\n    return jsonml;\n  }\n\n  // convert this node\n  switch ( jsonml[ 0 ] ) {\n    case \"header\":\n      jsonml[ 0 ] = \"h\" + jsonml[ 1 ].level;\n      delete jsonml[ 1 ].level;\n      break;\n    case \"bulletlist\":\n      jsonml[ 0 ] = \"ul\";\n      break;\n    case \"numberlist\":\n      jsonml[ 0 ] = \"ol\";\n      break;\n    case \"listitem\":\n      jsonml[ 0 ] = \"li\";\n      break;\n    case \"para\":\n      jsonml[ 0 ] = \"p\";\n      break;\n    case \"markdown\":\n      jsonml[ 0 ] = \"html\";\n      if ( attrs ) delete attrs.references;\n      break;\n    case \"code_block\":\n      jsonml[ 0 ] = \"pre\";\n      i = attrs ? 2 : 1;\n      var code = [ \"code\" ];\n      code.push.apply( code, jsonml.splice( i ) );\n      jsonml[ i ] = code;\n      break;\n    case \"inlinecode\":\n      jsonml[ 0 ] = \"code\";\n      break;\n    case \"img\":\n      jsonml[ 1 ].src = jsonml[ 1 ].href;\n      delete jsonml[ 1 ].href;\n      break;\n    case \"linebreak\":\n      jsonml[ 0 ] = \"br\";\n    break;\n    case \"link\":\n      jsonml[ 0 ] = \"a\";\n      break;\n    case \"link_ref\":\n      jsonml[ 0 ] = \"a\";\n\n      // grab this ref and clean up the attribute node\n      var ref = references[ attrs.ref ];\n\n      // if the reference exists, make the link\n      if ( ref ) {\n        delete attrs.ref;\n\n        // add in the href and title, if present\n        attrs.href = ref.href;\n        if ( ref.title ) {\n          attrs.title = ref.title;\n        }\n\n        // get rid of the unneeded original text\n        delete attrs.original;\n      }\n      // the reference doesn't exist, so revert to plain text\n      else {\n        return attrs.original;\n      }\n      break;\n    case \"img_ref\":\n      jsonml[ 0 ] = \"img\";\n\n      // grab this ref and clean up the attribute node\n      var ref = references[ attrs.ref ];\n\n      // if the reference exists, make the link\n      if ( ref ) {\n        delete attrs.ref;\n\n        // add in the href and title, if present\n        attrs.src = ref.href;\n        if ( ref.title ) {\n          attrs.title = ref.title;\n        }\n\n        // get rid of the unneeded original text\n        delete attrs.original;\n      }\n      // the reference doesn't exist, so revert to plain text\n      else {\n        return attrs.original;\n      }\n      break;\n  }\n\n  // convert all the children\n  i = 1;\n\n  // deal with the attribute node, if it exists\n  if ( attrs ) {\n    // if there are keys, skip over it\n    for ( var key in jsonml[ 1 ] ) {\n      i = 2;\n    }\n    // if there aren't, remove it\n    if ( i === 1 ) {\n      jsonml.splice( i, 1 );\n    }\n  }\n\n  for ( ; i < jsonml.length; ++i ) {\n    jsonml[ i ] = arguments.callee( jsonml[ i ], references, options );\n  }\n\n  return jsonml;\n}\n\n\n// merges adjacent text nodes into a single node\nfunction merge_text_nodes( jsonml ) {\n  // skip the tag name and attribute hash\n  var i = extract_attr( jsonml ) ? 2 : 1;\n\n  while ( i < jsonml.length ) {\n    // if it's a string check the next item too\n    if ( typeof jsonml[ i ] === \"string\" ) {\n      if ( i + 1 < jsonml.length && typeof jsonml[ i + 1 ] === \"string\" ) {\n        // merge the second string into the first and remove it\n        jsonml[ i ] += jsonml.splice( i + 1, 1 )[ 0 ];\n      }\n      else {\n        ++i;\n      }\n    }\n    // if it's not a string recurse\n    else {\n      arguments.callee( jsonml[ i ] );\n      ++i;\n    }\n  }\n}\n\n} )( (function() {\n  if ( typeof exports === \"undefined\" ) {\n    window.markdown = {};\n    return window.markdown;\n  }\n  else {\n    return exports;\n  }\n} )() );\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/markdown/to-markdown.js",
    "content": "/*\n * to-markdown - an HTML to Markdown converter\n *\n * Copyright 2011, Dom Christie\n * Licenced under the MIT licence\n *\n */\n\nvar toMarkdown = function(string) {\n\n  var ELEMENTS = [\n    {\n      patterns: 'p',\n      replacement: function(str, attrs, innerHTML) {\n        return innerHTML ? '\\n\\n' + innerHTML + '\\n' : '';\n      }\n    },\n    {\n      patterns: 'br',\n      type: 'void',\n      replacement: '\\n'\n    },\n    {\n      patterns: 'h([1-6])',\n      replacement: function(str, hLevel, attrs, innerHTML) {\n        var hPrefix = '';\n        for(var i = 0; i < hLevel; i++) {\n          hPrefix += '#';\n        }\n        return '\\n\\n' + hPrefix + ' ' + innerHTML + '\\n';\n      }\n    },\n    {\n      patterns: 'hr',\n      type: 'void',\n      replacement: '\\n\\n* * *\\n'\n    },\n    {\n      patterns: 'a',\n      replacement: function(str, attrs, innerHTML) {\n        var href = attrs.match(attrRegExp('href')),\n            title = attrs.match(attrRegExp('title'));\n        return href ? '[' + innerHTML + ']' + '(' + href[1] + (title && title[1] ? ' \"' + title[1] + '\"' : '') + ')' : str;\n      }\n    },\n    {\n      patterns: ['b', 'strong'],\n      replacement: function(str, attrs, innerHTML) {\n        return innerHTML ? '**' + innerHTML + '**' : '';\n      }\n    },\n    {\n      patterns: ['i', 'em'],\n      replacement: function(str, attrs, innerHTML) {\n        return innerHTML ? '_' + innerHTML + '_' : '';\n      }\n    },\n    {\n      patterns: 'code',\n      replacement: function(str, attrs, innerHTML) {\n        return innerHTML ? '`' + innerHTML + '`' : '';\n      }\n    },\n    {\n      patterns: 'img',\n      type: 'void',\n      replacement: function(str, attrs, innerHTML) {\n        var src = attrs.match(attrRegExp('src')),\n            alt = attrs.match(attrRegExp('alt')),\n            title = attrs.match(attrRegExp('title'));\n        return '![' + (alt && alt[1] ? alt[1] : '') + ']' + '(' + src[1] + (title && title[1] ? ' \"' + title[1] + '\"' : '') + ')';\n      }\n    }\n  ];\n\n  for(var i = 0, len = ELEMENTS.length; i < len; i++) {\n    if(typeof ELEMENTS[i].patterns === 'string') {\n      string = replaceEls(string, { tag: ELEMENTS[i].patterns, replacement: ELEMENTS[i].replacement, type:  ELEMENTS[i].type });\n    }\n    else {\n      for(var j = 0, pLen = ELEMENTS[i].patterns.length; j < pLen; j++) {\n        string = replaceEls(string, { tag: ELEMENTS[i].patterns[j], replacement: ELEMENTS[i].replacement, type:  ELEMENTS[i].type });\n      }\n    }\n  }\n\n  function replaceEls(html, elProperties) {\n    var pattern = elProperties.type === 'void' ? '<' + elProperties.tag + '\\\\b([^>]*)\\\\/?>' : '<' + elProperties.tag + '\\\\b([^>]*)>([\\\\s\\\\S]*?)<\\\\/' + elProperties.tag + '>',\n        regex = new RegExp(pattern, 'gi'),\n        markdown = '';\n    if(typeof elProperties.replacement === 'string') {\n      markdown = html.replace(regex, elProperties.replacement);\n    }\n    else {\n      markdown = html.replace(regex, function(str, p1, p2, p3) {\n        return elProperties.replacement.call(this, str, p1, p2, p3);\n      });\n    }\n    return markdown;\n  }\n\n  function attrRegExp(attr) {\n    return new RegExp(attr + '\\\\s*=\\\\s*[\"\\']?([^\"\\']*)[\"\\']?', 'i');\n  }\n\n  // Pre code blocks\n\n  string = string.replace(/<pre\\b[^>]*>`([\\s\\S]*)`<\\/pre>/gi, function(str, innerHTML) {\n    innerHTML = innerHTML.replace(/^\\t+/g, '  '); // convert tabs to spaces (you know it makes sense)\n    innerHTML = innerHTML.replace(/\\n/g, '\\n    ');\n    return '\\n\\n    ' + innerHTML + '\\n';\n  });\n\n  // Lists\n\n  // Escape numbers that could trigger an ol\n  // If there are more than three spaces before the code, it would be in a pre tag\n  // Make sure we are escaping the period not matching any character\n  string = string.replace(/^(\\s{0,3}\\d+)\\. /g, '$1\\\\. ');\n\n  // Converts lists that have no child lists (of same type) first, then works it's way up\n  var noChildrenRegex = /<(ul|ol)\\b[^>]*>(?:(?!<ul|<ol)[\\s\\S])*?<\\/\\1>/gi;\n  while(string.match(noChildrenRegex)) {\n    string = string.replace(noChildrenRegex, function(str) {\n      return replaceLists(str);\n    });\n  }\n\n  function replaceLists(html) {\n\n    html = html.replace(/<(ul|ol)\\b[^>]*>([\\s\\S]*?)<\\/\\1>/gi, function(str, listType, innerHTML) {\n      var lis = innerHTML.split('</li>');\n      lis.splice(lis.length - 1, 1);\n\n      for(i = 0, len = lis.length; i < len; i++) {\n        if(lis[i]) {\n          var prefix = (listType === 'ol') ? (i + 1) + \".  \" : \"*   \";\n          lis[i] = lis[i].replace(/\\s*<li[^>]*>([\\s\\S]*)/i, function(str, innerHTML) {\n\n            innerHTML = innerHTML.replace(/^\\s+/, '');\n            innerHTML = innerHTML.replace(/\\n\\n/g, '\\n\\n    ');\n            // indent nested lists\n            innerHTML = innerHTML.replace(/\\n([ ]*)+(\\*|\\d+\\.) /g, '\\n$1    $2 ');\n            return prefix + innerHTML;\n          });\n        }\n      }\n      return lis.join('\\n');\n    });\n    return '\\n\\n' + html.replace(/[ \\t]+\\n|\\s+$/g, '');\n  }\n\n  // Blockquotes\n  var deepest = /<blockquote\\b[^>]*>((?:(?!<blockquote)[\\s\\S])*?)<\\/blockquote>/gi;\n  while(string.match(deepest)) {\n    string = string.replace(deepest, function(str) {\n      return replaceBlockquotes(str);\n    });\n  }\n\n  function replaceBlockquotes(html) {\n    html = html.replace(/<blockquote\\b[^>]*>([\\s\\S]*?)<\\/blockquote>/gi, function(str, inner) {\n      inner = inner.replace(/^\\s+|\\s+$/g, '');\n      inner = cleanUp(inner);\n      inner = inner.replace(/^/gm, '> ');\n      inner = inner.replace(/^(>([ \\t]{2,}>)+)/gm, '> >');\n      return inner;\n    });\n    return html;\n  }\n\n  function cleanUp(string) {\n    string = string.replace(/^[\\t\\r\\n]+|[\\t\\r\\n]+$/g, ''); // trim leading/trailing whitespace\n    string = string.replace(/\\n\\s+\\n/g, '\\n\\n');\n    string = string.replace(/\\n{3,}/g, '\\n\\n'); // limit consecutive linebreaks to 2\n    return string;\n  }\n\n  return cleanUp(string);\n};\n\nif (typeof exports === 'object') {\n  exports.toMarkdown = toMarkdown;\n}\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/metisMenu/jquery.metisMenu.js",
    "content": "/*\n * metismenu - v1.1.3\n * Easy menu jQuery plugin for Twitter Bootstrap 3\n * https://github.com/onokumus/metisMenu\n *\n * Made by Osman Nuri Okumus\n * Under MIT License\n */\n;(function($, window, document, undefined) {\n\n    var pluginName = \"metisMenu\",\n        defaults = {\n            toggle: true,\n            doubleTapToGo: false\n        };\n\n    function Plugin(element, options) {\n        this.element = $(element);\n        this.settings = $.extend({}, defaults, options);\n        this._defaults = defaults;\n        this._name = pluginName;\n        this.init();\n    }\n\n    Plugin.prototype = {\n        init: function() {\n\n            var $this = this.element,\n                $toggle = this.settings.toggle,\n                obj = this;\n\n            if (this.isIE() <= 9) {\n                $this.find(\"li.active\").has(\"ul\").children(\"ul\").collapse(\"show\");\n                $this.find(\"li\").not(\".active\").has(\"ul\").children(\"ul\").collapse(\"hide\");\n            } else {\n                $this.find(\"li.active\").has(\"ul\").children(\"ul\").addClass(\"collapse in\");\n                $this.find(\"li\").not(\".active\").has(\"ul\").children(\"ul\").addClass(\"collapse\");\n            }\n\n            //add the \"doubleTapToGo\" class to active items if needed\n            if (obj.settings.doubleTapToGo) {\n                $this.find(\"li.active\").has(\"ul\").children(\"a\").addClass(\"doubleTapToGo\");\n            }\n\n            $this.find(\"li\").has(\"ul\").children(\"a\").on(\"click\" + \".\" + pluginName, function(e) {\n                e.preventDefault();\n\n                //Do we need to enable the double tap\n                if (obj.settings.doubleTapToGo) {\n\n                    //if we hit a second time on the link and the href is valid, navigate to that url\n                    if (obj.doubleTapToGo($(this)) && $(this).attr(\"href\") !== \"#\" && $(this).attr(\"href\") !== \"\") {\n                        e.stopPropagation();\n                        document.location = $(this).attr(\"href\");\n                        return;\n                    }\n                }\n\n                $(this).parent(\"li\").toggleClass(\"active\").children(\"ul\").collapse(\"toggle\");\n\n                if ($toggle) {\n                    $(this).parent(\"li\").siblings().removeClass(\"active\").children(\"ul.in\").collapse(\"hide\");\n                }\n\n            });\n        },\n\n        isIE: function() { //https://gist.github.com/padolsey/527683\n            var undef,\n                v = 3,\n                div = document.createElement(\"div\"),\n                all = div.getElementsByTagName(\"i\");\n\n            while (\n                div.innerHTML = \"<!--[if gt IE \" + (++v) + \"]><i></i><![endif]-->\",\n                    all[0]\n                ) {\n                return v > 4 ? v : undef;\n            }\n        },\n\n        //Enable the link on the second click.\n        doubleTapToGo: function(elem) {\n            var $this = this.element;\n\n            //if the class \"doubleTapToGo\" exists, remove it and return\n            if (elem.hasClass(\"doubleTapToGo\")) {\n                elem.removeClass(\"doubleTapToGo\");\n                return true;\n            }\n\n            //does not exists, add a new class and return false\n            if (elem.parent().children(\"ul\").length) {\n                //first remove all other class\n                $this.find(\".doubleTapToGo\").removeClass(\"doubleTapToGo\");\n                //add the class on the current element\n                elem.addClass(\"doubleTapToGo\");\n                return false;\n            }\n        },\n\n        remove: function() {\n            this.element.off(\".\" + pluginName);\n            this.element.removeData(pluginName);\n        }\n\n    };\n\n    $.fn[pluginName] = function(options) {\n        this.each(function () {\n            var el = $(this);\n            if (el.data(pluginName)) {\n                el.data(pluginName).remove();\n            }\n            el.data(pluginName, new Plugin(this, options));\n        });\n        return this;\n    };\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/morris/morris.js",
    "content": "(function() {\n  var $, Morris, minutesSpecHelper, secondsSpecHelper,\n    __slice = [].slice,\n    __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; },\n    __hasProp = {}.hasOwnProperty,\n    __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n    __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\n  Morris = window.Morris = {};\n\n  $ = jQuery;\n\n  Morris.EventEmitter = (function() {\n    function EventEmitter() {}\n\n    EventEmitter.prototype.on = function(name, handler) {\n      if (this.handlers == null) {\n        this.handlers = {};\n      }\n      if (this.handlers[name] == null) {\n        this.handlers[name] = [];\n      }\n      this.handlers[name].push(handler);\n      return this;\n    };\n\n    EventEmitter.prototype.fire = function() {\n      var args, handler, name, _i, _len, _ref, _results;\n      name = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n      if ((this.handlers != null) && (this.handlers[name] != null)) {\n        _ref = this.handlers[name];\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          handler = _ref[_i];\n          _results.push(handler.apply(null, args));\n        }\n        return _results;\n      }\n    };\n\n    return EventEmitter;\n\n  })();\n\n  Morris.commas = function(num) {\n    var absnum, intnum, ret, strabsnum;\n    if (num != null) {\n      ret = num < 0 ? \"-\" : \"\";\n      absnum = Math.abs(num);\n      intnum = Math.floor(absnum).toFixed(0);\n      ret += intnum.replace(/(?=(?:\\d{3})+$)(?!^)/g, ',');\n      strabsnum = absnum.toString();\n      if (strabsnum.length > intnum.length) {\n        ret += strabsnum.slice(intnum.length);\n      }\n      return ret;\n    } else {\n      return '-';\n    }\n  };\n\n  Morris.pad2 = function(number) {\n    return (number < 10 ? '0' : '') + number;\n  };\n\n  Morris.Grid = (function(_super) {\n    __extends(Grid, _super);\n\n    function Grid(options) {\n      this.resizeHandler = __bind(this.resizeHandler, this);\n      var _this = this;\n      if (typeof options.element === 'string') {\n        this.el = $(document.getElementById(options.element));\n      } else {\n        this.el = $(options.element);\n      }\n      if ((this.el == null) || this.el.length === 0) {\n        throw new Error(\"Graph container element not found\");\n      }\n      if (this.el.css('position') === 'static') {\n        this.el.css('position', 'relative');\n      }\n      this.options = $.extend({}, this.gridDefaults, this.defaults || {}, options);\n      if (typeof this.options.units === 'string') {\n        this.options.postUnits = options.units;\n      }\n      this.raphael = new Raphael(this.el[0]);\n      this.elementWidth = null;\n      this.elementHeight = null;\n      this.dirty = false;\n      this.selectFrom = null;\n      if (this.init) {\n        this.init();\n      }\n      this.setData(this.options.data);\n      this.el.bind('mousemove', function(evt) {\n        var left, offset, right, width, x;\n        offset = _this.el.offset();\n        x = evt.pageX - offset.left;\n        if (_this.selectFrom) {\n          left = _this.data[_this.hitTest(Math.min(x, _this.selectFrom))]._x;\n          right = _this.data[_this.hitTest(Math.max(x, _this.selectFrom))]._x;\n          width = right - left;\n          return _this.selectionRect.attr({\n            x: left,\n            width: width\n          });\n        } else {\n          return _this.fire('hovermove', x, evt.pageY - offset.top);\n        }\n      });\n      this.el.bind('mouseleave', function(evt) {\n        if (_this.selectFrom) {\n          _this.selectionRect.hide();\n          _this.selectFrom = null;\n        }\n        return _this.fire('hoverout');\n      });\n      this.el.bind('touchstart touchmove touchend', function(evt) {\n        var offset, touch;\n        touch = evt.originalEvent.touches[0] || evt.originalEvent.changedTouches[0];\n        offset = _this.el.offset();\n        _this.fire('hover', touch.pageX - offset.left, touch.pageY - offset.top);\n        return touch;\n      });\n      this.el.bind('click', function(evt) {\n        var offset;\n        offset = _this.el.offset();\n        return _this.fire('gridclick', evt.pageX - offset.left, evt.pageY - offset.top);\n      });\n      if (this.options.rangeSelect) {\n        this.selectionRect = this.raphael.rect(0, 0, 0, this.el.innerHeight()).attr({\n          fill: this.options.rangeSelectColor,\n          stroke: false\n        }).toBack().hide();\n        this.el.bind('mousedown', function(evt) {\n          var offset;\n          offset = _this.el.offset();\n          return _this.startRange(evt.pageX - offset.left);\n        });\n        this.el.bind('mouseup', function(evt) {\n          var offset;\n          offset = _this.el.offset();\n          _this.endRange(evt.pageX - offset.left);\n          return _this.fire('hovermove', evt.pageX - offset.left, evt.pageY - offset.top);\n        });\n      }\n      if (this.options.resize) {\n        $(window).bind('resize', function(evt) {\n          if (_this.timeoutId != null) {\n            window.clearTimeout(_this.timeoutId);\n          }\n          return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);\n        });\n      }\n      if (this.postInit) {\n        this.postInit();\n      }\n    }\n\n    Grid.prototype.gridDefaults = {\n      dateFormat: null,\n      axes: true,\n      grid: true,\n      gridLineColor: '#aaa',\n      gridStrokeWidth: 0.5,\n      gridTextColor: '#888',\n      gridTextSize: 12,\n      gridTextFamily: 'sans-serif',\n      gridTextWeight: 'normal',\n      hideHover: false,\n      yLabelFormat: null,\n      xLabelAngle: 0,\n      numLines: 5,\n      padding: 25,\n      parseTime: true,\n      postUnits: '',\n      preUnits: '',\n      ymax: 'auto',\n      ymin: 'auto 0',\n      goals: [],\n      goalStrokeWidth: 1.0,\n      goalLineColors: ['#666633', '#999966', '#cc6666', '#663333'],\n      events: [],\n      eventStrokeWidth: 1.0,\n      eventLineColors: ['#005a04', '#ccffbb', '#3a5f0b', '#005502'],\n      rangeSelect: null,\n      rangeSelectColor: '#eef',\n      resize: false\n    };\n\n    Grid.prototype.setData = function(data, redraw) {\n      var e, idx, index, maxGoal, minGoal, ret, row, step, total, y, ykey, ymax, ymin, yval, _ref;\n      if (redraw == null) {\n        redraw = true;\n      }\n      this.options.data = data;\n      if ((data == null) || data.length === 0) {\n        this.data = [];\n        this.raphael.clear();\n        if (this.hover != null) {\n          this.hover.hide();\n        }\n        return;\n      }\n      ymax = this.cumulative ? 0 : null;\n      ymin = this.cumulative ? 0 : null;\n      if (this.options.goals.length > 0) {\n        minGoal = Math.min.apply(Math, this.options.goals);\n        maxGoal = Math.max.apply(Math, this.options.goals);\n        ymin = ymin != null ? Math.min(ymin, minGoal) : minGoal;\n        ymax = ymax != null ? Math.max(ymax, maxGoal) : maxGoal;\n      }\n      this.data = (function() {\n        var _i, _len, _results;\n        _results = [];\n        for (index = _i = 0, _len = data.length; _i < _len; index = ++_i) {\n          row = data[index];\n          ret = {\n            src: row\n          };\n          ret.label = row[this.options.xkey];\n          if (this.options.parseTime) {\n            ret.x = Morris.parseDate(ret.label);\n            if (this.options.dateFormat) {\n              ret.label = this.options.dateFormat(ret.x);\n            } else if (typeof ret.label === 'number') {\n              ret.label = new Date(ret.label).toString();\n            }\n          } else {\n            ret.x = index;\n            if (this.options.xLabelFormat) {\n              ret.label = this.options.xLabelFormat(ret);\n            }\n          }\n          total = 0;\n          ret.y = (function() {\n            var _j, _len1, _ref, _results1;\n            _ref = this.options.ykeys;\n            _results1 = [];\n            for (idx = _j = 0, _len1 = _ref.length; _j < _len1; idx = ++_j) {\n              ykey = _ref[idx];\n              yval = row[ykey];\n              if (typeof yval === 'string') {\n                yval = parseFloat(yval);\n              }\n              if ((yval != null) && typeof yval !== 'number') {\n                yval = null;\n              }\n              if (yval != null) {\n                if (this.cumulative) {\n                  total += yval;\n                } else {\n                  if (ymax != null) {\n                    ymax = Math.max(yval, ymax);\n                    ymin = Math.min(yval, ymin);\n                  } else {\n                    ymax = ymin = yval;\n                  }\n                }\n              }\n              if (this.cumulative && (total != null)) {\n                ymax = Math.max(total, ymax);\n                ymin = Math.min(total, ymin);\n              }\n              _results1.push(yval);\n            }\n            return _results1;\n          }).call(this);\n          _results.push(ret);\n        }\n        return _results;\n      }).call(this);\n      if (this.options.parseTime) {\n        this.data = this.data.sort(function(a, b) {\n          return (a.x > b.x) - (b.x > a.x);\n        });\n      }\n      this.xmin = this.data[0].x;\n      this.xmax = this.data[this.data.length - 1].x;\n      this.events = [];\n      if (this.options.events.length > 0) {\n        if (this.options.parseTime) {\n          this.events = (function() {\n            var _i, _len, _ref, _results;\n            _ref = this.options.events;\n            _results = [];\n            for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n              e = _ref[_i];\n              _results.push(Morris.parseDate(e));\n            }\n            return _results;\n          }).call(this);\n        } else {\n          this.events = this.options.events;\n        }\n        this.xmax = Math.max(this.xmax, Math.max.apply(Math, this.events));\n        this.xmin = Math.min(this.xmin, Math.min.apply(Math, this.events));\n      }\n      if (this.xmin === this.xmax) {\n        this.xmin -= 1;\n        this.xmax += 1;\n      }\n      this.ymin = this.yboundary('min', ymin);\n      this.ymax = this.yboundary('max', ymax);\n      if (this.ymin === this.ymax) {\n        if (ymin) {\n          this.ymin -= 1;\n        }\n        this.ymax += 1;\n      }\n      if (((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') || this.options.grid === true) {\n        if (this.options.ymax === this.gridDefaults.ymax && this.options.ymin === this.gridDefaults.ymin) {\n          this.grid = this.autoGridLines(this.ymin, this.ymax, this.options.numLines);\n          this.ymin = Math.min(this.ymin, this.grid[0]);\n          this.ymax = Math.max(this.ymax, this.grid[this.grid.length - 1]);\n        } else {\n          step = (this.ymax - this.ymin) / (this.options.numLines - 1);\n          this.grid = (function() {\n            var _i, _ref1, _ref2, _results;\n            _results = [];\n            for (y = _i = _ref1 = this.ymin, _ref2 = this.ymax; step > 0 ? _i <= _ref2 : _i >= _ref2; y = _i += step) {\n              _results.push(y);\n            }\n            return _results;\n          }).call(this);\n        }\n      }\n      this.dirty = true;\n      if (redraw) {\n        return this.redraw();\n      }\n    };\n\n    Grid.prototype.yboundary = function(boundaryType, currentValue) {\n      var boundaryOption, suggestedValue;\n      boundaryOption = this.options[\"y\" + boundaryType];\n      if (typeof boundaryOption === 'string') {\n        if (boundaryOption.slice(0, 4) === 'auto') {\n          if (boundaryOption.length > 5) {\n            suggestedValue = parseInt(boundaryOption.slice(5), 10);\n            if (currentValue == null) {\n              return suggestedValue;\n            }\n            return Math[boundaryType](currentValue, suggestedValue);\n          } else {\n            if (currentValue != null) {\n              return currentValue;\n            } else {\n              return 0;\n            }\n          }\n        } else {\n          return parseInt(boundaryOption, 10);\n        }\n      } else {\n        return boundaryOption;\n      }\n    };\n\n    Grid.prototype.autoGridLines = function(ymin, ymax, nlines) {\n      var gmax, gmin, grid, smag, span, step, unit, y, ymag;\n      span = ymax - ymin;\n      ymag = Math.floor(Math.log(span) / Math.log(10));\n      unit = Math.pow(10, ymag);\n      gmin = Math.floor(ymin / unit) * unit;\n      gmax = Math.ceil(ymax / unit) * unit;\n      step = (gmax - gmin) / (nlines - 1);\n      if (unit === 1 && step > 1 && Math.ceil(step) !== step) {\n        step = Math.ceil(step);\n        gmax = gmin + step * (nlines - 1);\n      }\n      if (gmin < 0 && gmax > 0) {\n        gmin = Math.floor(ymin / step) * step;\n        gmax = Math.ceil(ymax / step) * step;\n      }\n      if (step < 1) {\n        smag = Math.floor(Math.log(step) / Math.log(10));\n        grid = (function() {\n          var _i, _results;\n          _results = [];\n          for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {\n            _results.push(parseFloat(y.toFixed(1 - smag)));\n          }\n          return _results;\n        })();\n      } else {\n        grid = (function() {\n          var _i, _results;\n          _results = [];\n          for (y = _i = gmin; step > 0 ? _i <= gmax : _i >= gmax; y = _i += step) {\n            _results.push(y);\n          }\n          return _results;\n        })();\n      }\n      return grid;\n    };\n\n    Grid.prototype._calc = function() {\n      var bottomOffsets, gridLine, h, i, w, yLabelWidths, _ref, _ref1;\n      w = this.el.width();\n      h = this.el.height();\n      if (this.elementWidth !== w || this.elementHeight !== h || this.dirty) {\n        this.elementWidth = w;\n        this.elementHeight = h;\n        this.dirty = false;\n        this.left = this.options.padding;\n        this.right = this.elementWidth - this.options.padding;\n        this.top = this.options.padding;\n        this.bottom = this.elementHeight - this.options.padding;\n        if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'y') {\n          yLabelWidths = (function() {\n            var _i, _len, _ref1, _results;\n            _ref1 = this.grid;\n            _results = [];\n            for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n              gridLine = _ref1[_i];\n              _results.push(this.measureText(this.yAxisFormat(gridLine)).width);\n            }\n            return _results;\n          }).call(this);\n          this.left += Math.max.apply(Math, yLabelWidths);\n        }\n        if ((_ref1 = this.options.axes) === true || _ref1 === 'both' || _ref1 === 'x') {\n          bottomOffsets = (function() {\n            var _i, _ref2, _results;\n            _results = [];\n            for (i = _i = 0, _ref2 = this.data.length; 0 <= _ref2 ? _i < _ref2 : _i > _ref2; i = 0 <= _ref2 ? ++_i : --_i) {\n              _results.push(this.measureText(this.data[i].text, -this.options.xLabelAngle).height);\n            }\n            return _results;\n          }).call(this);\n          this.bottom -= Math.max.apply(Math, bottomOffsets);\n        }\n        this.width = Math.max(1, this.right - this.left);\n        this.height = Math.max(1, this.bottom - this.top);\n        this.dx = this.width / (this.xmax - this.xmin);\n        this.dy = this.height / (this.ymax - this.ymin);\n        if (this.calc) {\n          return this.calc();\n        }\n      }\n    };\n\n    Grid.prototype.transY = function(y) {\n      return this.bottom - (y - this.ymin) * this.dy;\n    };\n\n    Grid.prototype.transX = function(x) {\n      if (this.data.length === 1) {\n        return (this.left + this.right) / 2;\n      } else {\n        return this.left + (x - this.xmin) * this.dx;\n      }\n    };\n\n    Grid.prototype.redraw = function() {\n      this.raphael.clear();\n      this._calc();\n      this.drawGrid();\n      this.drawGoals();\n      this.drawEvents();\n      if (this.draw) {\n        return this.draw();\n      }\n    };\n\n    Grid.prototype.measureText = function(text, angle) {\n      var ret, tt;\n      if (angle == null) {\n        angle = 0;\n      }\n      tt = this.raphael.text(100, 100, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).rotate(angle);\n      ret = tt.getBBox();\n      tt.remove();\n      return ret;\n    };\n\n    Grid.prototype.yAxisFormat = function(label) {\n      return this.yLabelFormat(label);\n    };\n\n    Grid.prototype.yLabelFormat = function(label) {\n      if (typeof this.options.yLabelFormat === 'function') {\n        return this.options.yLabelFormat(label);\n      } else {\n        return \"\" + this.options.preUnits + (Morris.commas(label)) + this.options.postUnits;\n      }\n    };\n\n    Grid.prototype.drawGrid = function() {\n      var lineY, y, _i, _len, _ref, _ref1, _ref2, _results;\n      if (this.options.grid === false && ((_ref = this.options.axes) !== true && _ref !== 'both' && _ref !== 'y')) {\n        return;\n      }\n      _ref1 = this.grid;\n      _results = [];\n      for (_i = 0, _len = _ref1.length; _i < _len; _i++) {\n        lineY = _ref1[_i];\n        y = this.transY(lineY);\n        if ((_ref2 = this.options.axes) === true || _ref2 === 'both' || _ref2 === 'y') {\n          this.drawYAxisLabel(this.left - this.options.padding / 2, y, this.yAxisFormat(lineY));\n        }\n        if (this.options.grid) {\n          _results.push(this.drawGridLine(\"M\" + this.left + \",\" + y + \"H\" + (this.left + this.width)));\n        } else {\n          _results.push(void 0);\n        }\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawGoals = function() {\n      var color, goal, i, _i, _len, _ref, _results;\n      _ref = this.options.goals;\n      _results = [];\n      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n        goal = _ref[i];\n        color = this.options.goalLineColors[i % this.options.goalLineColors.length];\n        _results.push(this.drawGoal(goal, color));\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawEvents = function() {\n      var color, event, i, _i, _len, _ref, _results;\n      _ref = this.events;\n      _results = [];\n      for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n        event = _ref[i];\n        color = this.options.eventLineColors[i % this.options.eventLineColors.length];\n        _results.push(this.drawEvent(event, color));\n      }\n      return _results;\n    };\n\n    Grid.prototype.drawGoal = function(goal, color) {\n      return this.raphael.path(\"M\" + this.left + \",\" + (this.transY(goal)) + \"H\" + this.right).attr('stroke', color).attr('stroke-width', this.options.goalStrokeWidth);\n    };\n\n    Grid.prototype.drawEvent = function(event, color) {\n      return this.raphael.path(\"M\" + (this.transX(event)) + \",\" + this.bottom + \"V\" + this.top).attr('stroke', color).attr('stroke-width', this.options.eventStrokeWidth);\n    };\n\n    Grid.prototype.drawYAxisLabel = function(xPos, yPos, text) {\n      return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor).attr('text-anchor', 'end');\n    };\n\n    Grid.prototype.drawGridLine = function(path) {\n      return this.raphael.path(path).attr('stroke', this.options.gridLineColor).attr('stroke-width', this.options.gridStrokeWidth);\n    };\n\n    Grid.prototype.startRange = function(x) {\n      this.hover.hide();\n      this.selectFrom = x;\n      return this.selectionRect.attr({\n        x: x,\n        width: 0\n      }).show();\n    };\n\n    Grid.prototype.endRange = function(x) {\n      var end, start;\n      if (this.selectFrom) {\n        start = Math.min(this.selectFrom, x);\n        end = Math.max(this.selectFrom, x);\n        this.options.rangeSelect.call(this.el, {\n          start: this.data[this.hitTest(start)].x,\n          end: this.data[this.hitTest(end)].x\n        });\n        return this.selectFrom = null;\n      }\n    };\n\n    Grid.prototype.resizeHandler = function() {\n      this.timeoutId = null;\n      this.raphael.setSize(this.el.width(), this.el.height());\n      return this.redraw();\n    };\n\n    return Grid;\n\n  })(Morris.EventEmitter);\n\n  Morris.parseDate = function(date) {\n    var isecs, m, msecs, n, o, offsetmins, p, q, r, ret, secs;\n    if (typeof date === 'number') {\n      return date;\n    }\n    m = date.match(/^(\\d+) Q(\\d)$/);\n    n = date.match(/^(\\d+)-(\\d+)$/);\n    o = date.match(/^(\\d+)-(\\d+)-(\\d+)$/);\n    p = date.match(/^(\\d+) W(\\d+)$/);\n    q = date.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+)(Z|([+-])(\\d\\d):?(\\d\\d))?$/);\n    r = date.match(/^(\\d+)-(\\d+)-(\\d+)[ T](\\d+):(\\d+):(\\d+(\\.\\d+)?)(Z|([+-])(\\d\\d):?(\\d\\d))?$/);\n    if (m) {\n      return new Date(parseInt(m[1], 10), parseInt(m[2], 10) * 3 - 1, 1).getTime();\n    } else if (n) {\n      return new Date(parseInt(n[1], 10), parseInt(n[2], 10) - 1, 1).getTime();\n    } else if (o) {\n      return new Date(parseInt(o[1], 10), parseInt(o[2], 10) - 1, parseInt(o[3], 10)).getTime();\n    } else if (p) {\n      ret = new Date(parseInt(p[1], 10), 0, 1);\n      if (ret.getDay() !== 4) {\n        ret.setMonth(0, 1 + ((4 - ret.getDay()) + 7) % 7);\n      }\n      return ret.getTime() + parseInt(p[2], 10) * 604800000;\n    } else if (q) {\n      if (!q[6]) {\n        return new Date(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10)).getTime();\n      } else {\n        offsetmins = 0;\n        if (q[6] !== 'Z') {\n          offsetmins = parseInt(q[8], 10) * 60 + parseInt(q[9], 10);\n          if (q[7] === '+') {\n            offsetmins = 0 - offsetmins;\n          }\n        }\n        return Date.UTC(parseInt(q[1], 10), parseInt(q[2], 10) - 1, parseInt(q[3], 10), parseInt(q[4], 10), parseInt(q[5], 10) + offsetmins);\n      }\n    } else if (r) {\n      secs = parseFloat(r[6]);\n      isecs = Math.floor(secs);\n      msecs = Math.round((secs - isecs) * 1000);\n      if (!r[8]) {\n        return new Date(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10), isecs, msecs).getTime();\n      } else {\n        offsetmins = 0;\n        if (r[8] !== 'Z') {\n          offsetmins = parseInt(r[10], 10) * 60 + parseInt(r[11], 10);\n          if (r[9] === '+') {\n            offsetmins = 0 - offsetmins;\n          }\n        }\n        return Date.UTC(parseInt(r[1], 10), parseInt(r[2], 10) - 1, parseInt(r[3], 10), parseInt(r[4], 10), parseInt(r[5], 10) + offsetmins, isecs, msecs);\n      }\n    } else {\n      return new Date(parseInt(date, 10), 0, 1).getTime();\n    }\n  };\n\n  Morris.Hover = (function() {\n    Hover.defaults = {\n      \"class\": 'morris-hover morris-default-style'\n    };\n\n    function Hover(options) {\n      if (options == null) {\n        options = {};\n      }\n      this.options = $.extend({}, Morris.Hover.defaults, options);\n      this.el = $(\"<div class='\" + this.options[\"class\"] + \"'></div>\");\n      this.el.hide();\n      this.options.parent.append(this.el);\n    }\n\n    Hover.prototype.update = function(html, x, y) {\n      this.html;\n      this.show();\n      return this.moveTo(x, y);\n    };\n\n    Hover.prototype.html = function(content) {\n      return this.el.html(content);\n    };\n\n    Hover.prototype.moveTo = function(x, y) {\n      var hoverHeight, hoverWidth, left, parentHeight, parentWidth, top;\n      parentWidth = this.options.parent.innerWidth();\n      parentHeight = this.options.parent.innerHeight();\n      hoverWidth = this.el.outerWidth();\n      hoverHeight = this.el.outerHeight();\n      left = Math.min(Math.max(0, x - hoverWidth / 2), parentWidth - hoverWidth);\n      if (y != null) {\n        top = y - hoverHeight - 10;\n        if (top < 0) {\n          top = y + 10;\n          if (top + hoverHeight > parentHeight) {\n            top = parentHeight / 2 - hoverHeight / 2;\n          }\n        }\n      } else {\n        top = parentHeight / 2 - hoverHeight / 2;\n      }\n      return this.el.css({\n        left: left + \"px\",\n        top: parseInt(top) + \"px\"\n      });\n    };\n\n    Hover.prototype.show = function() {\n      return this.el.show();\n    };\n\n    Hover.prototype.hide = function() {\n      return this.el.hide();\n    };\n\n    return Hover;\n\n  })();\n\n  Morris.Line = (function(_super) {\n    __extends(Line, _super);\n\n    function Line(options) {\n      this.hilight = __bind(this.hilight, this);\n      this.onHoverOut = __bind(this.onHoverOut, this);\n      this.onHoverMove = __bind(this.onHoverMove, this);\n      this.onGridClick = __bind(this.onGridClick, this);\n      if (!(this instanceof Morris.Line)) {\n        return new Morris.Line(options);\n      }\n      Line.__super__.constructor.call(this, options);\n    }\n\n    Line.prototype.init = function() {\n      if (this.options.hideHover !== 'always') {\n        this.hover = new Morris.Hover({\n          parent: this.el\n        });\n        this.on('hovermove', this.onHoverMove);\n        this.on('hoverout', this.onHoverOut);\n        return this.on('gridclick', this.onGridClick);\n      }\n    };\n\n    Line.prototype.defaults = {\n      lineWidth: 3,\n      pointSize: 4,\n      lineColors: ['#0b62a4', '#7A92A3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],\n      pointStrokeWidths: [1],\n      pointStrokeColors: ['#ffffff'],\n      pointFillColors: [],\n      smooth: true,\n      xLabels: 'auto',\n      xLabelFormat: null,\n      xLabelMargin: 24,\n      continuousLine: true,\n      hideHover: false\n    };\n\n    Line.prototype.calc = function() {\n      this.calcPoints();\n      return this.generatePaths();\n    };\n\n    Line.prototype.calcPoints = function() {\n      var row, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        row._x = this.transX(row.x);\n        row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(this.transY(y));\n            } else {\n              _results1.push(y);\n            }\n          }\n          return _results1;\n        }).call(this);\n        _results.push(row._ymax = Math.min.apply(Math, [this.bottom].concat((function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row._y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(y);\n            }\n          }\n          return _results1;\n        })())));\n      }\n      return _results;\n    };\n\n    Line.prototype.hitTest = function(x) {\n      var index, r, _i, _len, _ref;\n      if (this.data.length === 0) {\n        return null;\n      }\n      _ref = this.data.slice(1);\n      for (index = _i = 0, _len = _ref.length; _i < _len; index = ++_i) {\n        r = _ref[index];\n        if (x < (r._x + this.data[index]._x) / 2) {\n          break;\n        }\n      }\n      return index;\n    };\n\n    Line.prototype.onGridClick = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.fire('click', index, this.data[index].src, x, y);\n    };\n\n    Line.prototype.onHoverMove = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.displayHoverForRow(index);\n    };\n\n    Line.prototype.onHoverOut = function() {\n      if (this.options.hideHover !== false) {\n        return this.displayHoverForRow(null);\n      }\n    };\n\n    Line.prototype.displayHoverForRow = function(index) {\n      var _ref;\n      if (index != null) {\n        (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));\n        return this.hilight(index);\n      } else {\n        this.hover.hide();\n        return this.hilight();\n      }\n    };\n\n    Line.prototype.hoverContentForRow = function(index) {\n      var content, j, row, y, _i, _len, _ref;\n      row = this.data[index];\n      content = \"<div class='morris-hover-row-label'>\" + row.label + \"</div>\";\n      _ref = row.y;\n      for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {\n        y = _ref[j];\n        content += \"<div class='morris-hover-point' style='color: \" + (this.colorFor(row, j, 'label')) + \"'>\\n  \" + this.options.labels[j] + \":\\n  \" + (this.yLabelFormat(y)) + \"\\n</div>\";\n      }\n      if (typeof this.options.hoverCallback === 'function') {\n        content = this.options.hoverCallback(index, this.options, content, row.src);\n      }\n      return [content, row._x, row._ymax];\n    };\n\n    Line.prototype.generatePaths = function() {\n      var c, coords, i, r, smooth;\n      return this.paths = (function() {\n        var _i, _ref, _ref1, _results;\n        _results = [];\n        for (i = _i = 0, _ref = this.options.ykeys.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n          smooth = typeof this.options.smooth === \"boolean\" ? this.options.smooth : (_ref1 = this.options.ykeys[i], __indexOf.call(this.options.smooth, _ref1) >= 0);\n          coords = (function() {\n            var _j, _len, _ref2, _results1;\n            _ref2 = this.data;\n            _results1 = [];\n            for (_j = 0, _len = _ref2.length; _j < _len; _j++) {\n              r = _ref2[_j];\n              if (r._y[i] !== void 0) {\n                _results1.push({\n                  x: r._x,\n                  y: r._y[i]\n                });\n              }\n            }\n            return _results1;\n          }).call(this);\n          if (this.options.continuousLine) {\n            coords = (function() {\n              var _j, _len, _results1;\n              _results1 = [];\n              for (_j = 0, _len = coords.length; _j < _len; _j++) {\n                c = coords[_j];\n                if (c.y !== null) {\n                  _results1.push(c);\n                }\n              }\n              return _results1;\n            })();\n          }\n          if (coords.length > 1) {\n            _results.push(Morris.Line.createPath(coords, smooth, this.bottom));\n          } else {\n            _results.push(null);\n          }\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Line.prototype.draw = function() {\n      var _ref;\n      if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {\n        this.drawXAxis();\n      }\n      this.drawSeries();\n      if (this.options.hideHover === false) {\n        return this.displayHoverForRow(this.data.length - 1);\n      }\n    };\n\n    Line.prototype.drawXAxis = function() {\n      var drawLabel, l, labels, prevAngleMargin, prevLabelMargin, row, ypos, _i, _len, _results,\n        _this = this;\n      ypos = this.bottom + this.options.padding / 2;\n      prevLabelMargin = null;\n      prevAngleMargin = null;\n      drawLabel = function(labelText, xpos) {\n        var label, labelBox, margin, offset, textBox;\n        label = _this.drawXAxisLabel(_this.transX(xpos), ypos, labelText);\n        textBox = label.getBBox();\n        label.transform(\"r\" + (-_this.options.xLabelAngle));\n        labelBox = label.getBBox();\n        label.transform(\"t0,\" + (labelBox.height / 2) + \"...\");\n        if (_this.options.xLabelAngle !== 0) {\n          offset = -0.5 * textBox.width * Math.cos(_this.options.xLabelAngle * Math.PI / 180.0);\n          label.transform(\"t\" + offset + \",0...\");\n        }\n        labelBox = label.getBBox();\n        if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < _this.el.width()) {\n          if (_this.options.xLabelAngle !== 0) {\n            margin = 1.25 * _this.options.gridTextSize / Math.sin(_this.options.xLabelAngle * Math.PI / 180.0);\n            prevAngleMargin = labelBox.x - margin;\n          }\n          return prevLabelMargin = labelBox.x - _this.options.xLabelMargin;\n        } else {\n          return label.remove();\n        }\n      };\n      if (this.options.parseTime) {\n        if (this.data.length === 1 && this.options.xLabels === 'auto') {\n          labels = [[this.data[0].label, this.data[0].x]];\n        } else {\n          labels = Morris.labelSeries(this.xmin, this.xmax, this.width, this.options.xLabels, this.options.xLabelFormat);\n        }\n      } else {\n        labels = (function() {\n          var _i, _len, _ref, _results;\n          _ref = this.data;\n          _results = [];\n          for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n            row = _ref[_i];\n            _results.push([row.label, row.x]);\n          }\n          return _results;\n        }).call(this);\n      }\n      labels.reverse();\n      _results = [];\n      for (_i = 0, _len = labels.length; _i < _len; _i++) {\n        l = labels[_i];\n        _results.push(drawLabel(l[0], l[1]));\n      }\n      return _results;\n    };\n\n    Line.prototype.drawSeries = function() {\n      var i, _i, _j, _ref, _ref1, _results;\n      this.seriesPoints = [];\n      for (i = _i = _ref = this.options.ykeys.length - 1; _ref <= 0 ? _i <= 0 : _i >= 0; i = _ref <= 0 ? ++_i : --_i) {\n        this._drawLineFor(i);\n      }\n      _results = [];\n      for (i = _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; i = _ref1 <= 0 ? ++_j : --_j) {\n        _results.push(this._drawPointFor(i));\n      }\n      return _results;\n    };\n\n    Line.prototype._drawPointFor = function(index) {\n      var circle, row, _i, _len, _ref, _results;\n      this.seriesPoints[index] = [];\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        circle = null;\n        if (row._y[index] != null) {\n          circle = this.drawLinePoint(row._x, row._y[index], this.colorFor(row, index, 'point'), index);\n        }\n        _results.push(this.seriesPoints[index].push(circle));\n      }\n      return _results;\n    };\n\n    Line.prototype._drawLineFor = function(index) {\n      var path;\n      path = this.paths[index];\n      if (path !== null) {\n        return this.drawLinePath(path, this.colorFor(null, index, 'line'), index);\n      }\n    };\n\n    Line.createPath = function(coords, smooth, bottom) {\n      var coord, g, grads, i, ix, lg, path, prevCoord, x1, x2, y1, y2, _i, _len;\n      path = \"\";\n      if (smooth) {\n        grads = Morris.Line.gradients(coords);\n      }\n      prevCoord = {\n        y: null\n      };\n      for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {\n        coord = coords[i];\n        if (coord.y != null) {\n          if (prevCoord.y != null) {\n            if (smooth) {\n              g = grads[i];\n              lg = grads[i - 1];\n              ix = (coord.x - prevCoord.x) / 4;\n              x1 = prevCoord.x + ix;\n              y1 = Math.min(bottom, prevCoord.y + ix * lg);\n              x2 = coord.x - ix;\n              y2 = Math.min(bottom, coord.y - ix * g);\n              path += \"C\" + x1 + \",\" + y1 + \",\" + x2 + \",\" + y2 + \",\" + coord.x + \",\" + coord.y;\n            } else {\n              path += \"L\" + coord.x + \",\" + coord.y;\n            }\n          } else {\n            if (!smooth || (grads[i] != null)) {\n              path += \"M\" + coord.x + \",\" + coord.y;\n            }\n          }\n        }\n        prevCoord = coord;\n      }\n      return path;\n    };\n\n    Line.gradients = function(coords) {\n      var coord, grad, i, nextCoord, prevCoord, _i, _len, _results;\n      grad = function(a, b) {\n        return (a.y - b.y) / (a.x - b.x);\n      };\n      _results = [];\n      for (i = _i = 0, _len = coords.length; _i < _len; i = ++_i) {\n        coord = coords[i];\n        if (coord.y != null) {\n          nextCoord = coords[i + 1] || {\n            y: null\n          };\n          prevCoord = coords[i - 1] || {\n            y: null\n          };\n          if ((prevCoord.y != null) && (nextCoord.y != null)) {\n            _results.push(grad(prevCoord, nextCoord));\n          } else if (prevCoord.y != null) {\n            _results.push(grad(prevCoord, coord));\n          } else if (nextCoord.y != null) {\n            _results.push(grad(coord, nextCoord));\n          } else {\n            _results.push(null);\n          }\n        } else {\n          _results.push(null);\n        }\n      }\n      return _results;\n    };\n\n    Line.prototype.hilight = function(index) {\n      var i, _i, _j, _ref, _ref1;\n      if (this.prevHilight !== null && this.prevHilight !== index) {\n        for (i = _i = 0, _ref = this.seriesPoints.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {\n          if (this.seriesPoints[i][this.prevHilight]) {\n            this.seriesPoints[i][this.prevHilight].animate(this.pointShrinkSeries(i));\n          }\n        }\n      }\n      if (index !== null && this.prevHilight !== index) {\n        for (i = _j = 0, _ref1 = this.seriesPoints.length - 1; 0 <= _ref1 ? _j <= _ref1 : _j >= _ref1; i = 0 <= _ref1 ? ++_j : --_j) {\n          if (this.seriesPoints[i][index]) {\n            this.seriesPoints[i][index].animate(this.pointGrowSeries(i));\n          }\n        }\n      }\n      return this.prevHilight = index;\n    };\n\n    Line.prototype.colorFor = function(row, sidx, type) {\n      if (typeof this.options.lineColors === 'function') {\n        return this.options.lineColors.call(this, row, sidx, type);\n      } else if (type === 'point') {\n        return this.options.pointFillColors[sidx % this.options.pointFillColors.length] || this.options.lineColors[sidx % this.options.lineColors.length];\n      } else {\n        return this.options.lineColors[sidx % this.options.lineColors.length];\n      }\n    };\n\n    Line.prototype.drawXAxisLabel = function(xPos, yPos, text) {\n      return this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);\n    };\n\n    Line.prototype.drawLinePath = function(path, lineColor, lineIndex) {\n      return this.raphael.path(path).attr('stroke', lineColor).attr('stroke-width', this.lineWidthForSeries(lineIndex));\n    };\n\n    Line.prototype.drawLinePoint = function(xPos, yPos, pointColor, lineIndex) {\n      return this.raphael.circle(xPos, yPos, this.pointSizeForSeries(lineIndex)).attr('fill', pointColor).attr('stroke-width', this.pointStrokeWidthForSeries(lineIndex)).attr('stroke', this.pointStrokeColorForSeries(lineIndex));\n    };\n\n    Line.prototype.pointStrokeWidthForSeries = function(index) {\n      return this.options.pointStrokeWidths[index % this.options.pointStrokeWidths.length];\n    };\n\n    Line.prototype.pointStrokeColorForSeries = function(index) {\n      return this.options.pointStrokeColors[index % this.options.pointStrokeColors.length];\n    };\n\n    Line.prototype.lineWidthForSeries = function(index) {\n      if (this.options.lineWidth instanceof Array) {\n        return this.options.lineWidth[index % this.options.lineWidth.length];\n      } else {\n        return this.options.lineWidth;\n      }\n    };\n\n    Line.prototype.pointSizeForSeries = function(index) {\n      if (this.options.pointSize instanceof Array) {\n        return this.options.pointSize[index % this.options.pointSize.length];\n      } else {\n        return this.options.pointSize;\n      }\n    };\n\n    Line.prototype.pointGrowSeries = function(index) {\n      return Raphael.animation({\n        r: this.pointSizeForSeries(index) + 3\n      }, 25, 'linear');\n    };\n\n    Line.prototype.pointShrinkSeries = function(index) {\n      return Raphael.animation({\n        r: this.pointSizeForSeries(index)\n      }, 25, 'linear');\n    };\n\n    return Line;\n\n  })(Morris.Grid);\n\n  Morris.labelSeries = function(dmin, dmax, pxwidth, specName, xLabelFormat) {\n    var d, d0, ddensity, name, ret, s, spec, t, _i, _len, _ref;\n    ddensity = 200 * (dmax - dmin) / pxwidth;\n    d0 = new Date(dmin);\n    spec = Morris.LABEL_SPECS[specName];\n    if (spec === void 0) {\n      _ref = Morris.AUTO_LABEL_ORDER;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        name = _ref[_i];\n        s = Morris.LABEL_SPECS[name];\n        if (ddensity >= s.span) {\n          spec = s;\n          break;\n        }\n      }\n    }\n    if (spec === void 0) {\n      spec = Morris.LABEL_SPECS[\"second\"];\n    }\n    if (xLabelFormat) {\n      spec = $.extend({}, spec, {\n        fmt: xLabelFormat\n      });\n    }\n    d = spec.start(d0);\n    ret = [];\n    while ((t = d.getTime()) <= dmax) {\n      if (t >= dmin) {\n        ret.push([spec.fmt(d), t]);\n      }\n      spec.incr(d);\n    }\n    return ret;\n  };\n\n  minutesSpecHelper = function(interval) {\n    return {\n      span: interval * 60 * 1000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours());\n      },\n      fmt: function(d) {\n        return \"\" + (Morris.pad2(d.getHours())) + \":\" + (Morris.pad2(d.getMinutes()));\n      },\n      incr: function(d) {\n        return d.setUTCMinutes(d.getUTCMinutes() + interval);\n      }\n    };\n  };\n\n  secondsSpecHelper = function(interval) {\n    return {\n      span: interval * 1000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate(), d.getHours(), d.getMinutes());\n      },\n      fmt: function(d) {\n        return \"\" + (Morris.pad2(d.getHours())) + \":\" + (Morris.pad2(d.getMinutes())) + \":\" + (Morris.pad2(d.getSeconds()));\n      },\n      incr: function(d) {\n        return d.setUTCSeconds(d.getUTCSeconds() + interval);\n      }\n    };\n  };\n\n  Morris.LABEL_SPECS = {\n    \"decade\": {\n      span: 172800000000,\n      start: function(d) {\n        return new Date(d.getFullYear() - d.getFullYear() % 10, 0, 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear());\n      },\n      incr: function(d) {\n        return d.setFullYear(d.getFullYear() + 10);\n      }\n    },\n    \"year\": {\n      span: 17280000000,\n      start: function(d) {\n        return new Date(d.getFullYear(), 0, 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear());\n      },\n      incr: function(d) {\n        return d.setFullYear(d.getFullYear() + 1);\n      }\n    },\n    \"month\": {\n      span: 2419200000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), 1);\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1));\n      },\n      incr: function(d) {\n        return d.setMonth(d.getMonth() + 1);\n      }\n    },\n    \"week\": {\n      span: 604800000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1)) + \"-\" + (Morris.pad2(d.getDate()));\n      },\n      incr: function(d) {\n        return d.setDate(d.getDate() + 7);\n      }\n    },\n    \"day\": {\n      span: 86400000,\n      start: function(d) {\n        return new Date(d.getFullYear(), d.getMonth(), d.getDate());\n      },\n      fmt: function(d) {\n        return \"\" + (d.getFullYear()) + \"-\" + (Morris.pad2(d.getMonth() + 1)) + \"-\" + (Morris.pad2(d.getDate()));\n      },\n      incr: function(d) {\n        return d.setDate(d.getDate() + 1);\n      }\n    },\n    \"hour\": minutesSpecHelper(60),\n    \"30min\": minutesSpecHelper(30),\n    \"15min\": minutesSpecHelper(15),\n    \"10min\": minutesSpecHelper(10),\n    \"5min\": minutesSpecHelper(5),\n    \"minute\": minutesSpecHelper(1),\n    \"30sec\": secondsSpecHelper(30),\n    \"15sec\": secondsSpecHelper(15),\n    \"10sec\": secondsSpecHelper(10),\n    \"5sec\": secondsSpecHelper(5),\n    \"second\": secondsSpecHelper(1)\n  };\n\n  Morris.AUTO_LABEL_ORDER = [\"decade\", \"year\", \"month\", \"week\", \"day\", \"hour\", \"30min\", \"15min\", \"10min\", \"5min\", \"minute\", \"30sec\", \"15sec\", \"10sec\", \"5sec\", \"second\"];\n\n  Morris.Area = (function(_super) {\n    var areaDefaults;\n\n    __extends(Area, _super);\n\n    areaDefaults = {\n      fillOpacity: 'auto',\n      behaveLikeLine: false\n    };\n\n    function Area(options) {\n      var areaOptions;\n      if (!(this instanceof Morris.Area)) {\n        return new Morris.Area(options);\n      }\n      areaOptions = $.extend({}, areaDefaults, options);\n      this.cumulative = !areaOptions.behaveLikeLine;\n      if (areaOptions.fillOpacity === 'auto') {\n        areaOptions.fillOpacity = areaOptions.behaveLikeLine ? .8 : 1;\n      }\n      Area.__super__.constructor.call(this, areaOptions);\n    }\n\n    Area.prototype.calcPoints = function() {\n      var row, total, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        row = _ref[_i];\n        row._x = this.transX(row.x);\n        total = 0;\n        row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (this.options.behaveLikeLine) {\n              _results1.push(this.transY(y));\n            } else {\n              total += y || 0;\n              _results1.push(this.transY(total));\n            }\n          }\n          return _results1;\n        }).call(this);\n        _results.push(row._ymax = Math.max.apply(Math, row._y));\n      }\n      return _results;\n    };\n\n    Area.prototype.drawSeries = function() {\n      var i, range, _i, _j, _k, _len, _ref, _ref1, _results, _results1, _results2;\n      this.seriesPoints = [];\n      if (this.options.behaveLikeLine) {\n        range = (function() {\n          _results = [];\n          for (var _i = 0, _ref = this.options.ykeys.length - 1; 0 <= _ref ? _i <= _ref : _i >= _ref; 0 <= _ref ? _i++ : _i--){ _results.push(_i); }\n          return _results;\n        }).apply(this);\n      } else {\n        range = (function() {\n          _results1 = [];\n          for (var _j = _ref1 = this.options.ykeys.length - 1; _ref1 <= 0 ? _j <= 0 : _j >= 0; _ref1 <= 0 ? _j++ : _j--){ _results1.push(_j); }\n          return _results1;\n        }).apply(this);\n      }\n      _results2 = [];\n      for (_k = 0, _len = range.length; _k < _len; _k++) {\n        i = range[_k];\n        this._drawFillFor(i);\n        this._drawLineFor(i);\n        _results2.push(this._drawPointFor(i));\n      }\n      return _results2;\n    };\n\n    Area.prototype._drawFillFor = function(index) {\n      var path;\n      path = this.paths[index];\n      if (path !== null) {\n        path = path + (\"L\" + (this.transX(this.xmax)) + \",\" + this.bottom + \"L\" + (this.transX(this.xmin)) + \",\" + this.bottom + \"Z\");\n        return this.drawFilledPath(path, this.fillForSeries(index));\n      }\n    };\n\n    Area.prototype.fillForSeries = function(i) {\n      var color;\n      color = Raphael.rgb2hsl(this.colorFor(this.data[i], i, 'line'));\n      return Raphael.hsl(color.h, this.options.behaveLikeLine ? color.s * 0.9 : color.s * 0.75, Math.min(0.98, this.options.behaveLikeLine ? color.l * 1.2 : color.l * 1.25));\n    };\n\n    Area.prototype.drawFilledPath = function(path, fill) {\n      return this.raphael.path(path).attr('fill', fill).attr('fill-opacity', this.options.fillOpacity).attr('stroke', 'none');\n    };\n\n    return Area;\n\n  })(Morris.Line);\n\n  Morris.Bar = (function(_super) {\n    __extends(Bar, _super);\n\n    function Bar(options) {\n      this.onHoverOut = __bind(this.onHoverOut, this);\n      this.onHoverMove = __bind(this.onHoverMove, this);\n      this.onGridClick = __bind(this.onGridClick, this);\n      if (!(this instanceof Morris.Bar)) {\n        return new Morris.Bar(options);\n      }\n      Bar.__super__.constructor.call(this, $.extend({}, options, {\n        parseTime: false\n      }));\n    }\n\n    Bar.prototype.init = function() {\n      this.cumulative = this.options.stacked;\n      if (this.options.hideHover !== 'always') {\n        this.hover = new Morris.Hover({\n          parent: this.el\n        });\n        this.on('hovermove', this.onHoverMove);\n        this.on('hoverout', this.onHoverOut);\n        return this.on('gridclick', this.onGridClick);\n      }\n    };\n\n    Bar.prototype.defaults = {\n      barSizeRatio: 0.75,\n      barGap: 3,\n      barColors: ['#0b62a4', '#7a92a3', '#4da74d', '#afd8f8', '#edc240', '#cb4b4b', '#9440ed'],\n      barOpacity: 1.0,\n      barRadius: [0, 0, 0, 0],\n      xLabelMargin: 50\n    };\n\n    Bar.prototype.calc = function() {\n      var _ref;\n      this.calcBars();\n      if (this.options.hideHover === false) {\n        return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(this.data.length - 1));\n      }\n    };\n\n    Bar.prototype.calcBars = function() {\n      var idx, row, y, _i, _len, _ref, _results;\n      _ref = this.data;\n      _results = [];\n      for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {\n        row = _ref[idx];\n        row._x = this.left + this.width * (idx + 0.5) / this.data.length;\n        _results.push(row._y = (function() {\n          var _j, _len1, _ref1, _results1;\n          _ref1 = row.y;\n          _results1 = [];\n          for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n            y = _ref1[_j];\n            if (y != null) {\n              _results1.push(this.transY(y));\n            } else {\n              _results1.push(null);\n            }\n          }\n          return _results1;\n        }).call(this));\n      }\n      return _results;\n    };\n\n    Bar.prototype.draw = function() {\n      var _ref;\n      if ((_ref = this.options.axes) === true || _ref === 'both' || _ref === 'x') {\n        this.drawXAxis();\n      }\n      return this.drawSeries();\n    };\n\n    Bar.prototype.drawXAxis = function() {\n      var i, label, labelBox, margin, offset, prevAngleMargin, prevLabelMargin, row, textBox, ypos, _i, _ref, _results;\n      ypos = this.bottom + (this.options.xAxisLabelTopPadding || this.options.padding / 2);\n      prevLabelMargin = null;\n      prevAngleMargin = null;\n      _results = [];\n      for (i = _i = 0, _ref = this.data.length; 0 <= _ref ? _i < _ref : _i > _ref; i = 0 <= _ref ? ++_i : --_i) {\n        row = this.data[this.data.length - 1 - i];\n        label = this.drawXAxisLabel(row._x, ypos, row.label);\n        textBox = label.getBBox();\n        label.transform(\"r\" + (-this.options.xLabelAngle));\n        labelBox = label.getBBox();\n        label.transform(\"t0,\" + (labelBox.height / 2) + \"...\");\n        if (this.options.xLabelAngle !== 0) {\n          offset = -0.5 * textBox.width * Math.cos(this.options.xLabelAngle * Math.PI / 180.0);\n          label.transform(\"t\" + offset + \",0...\");\n        }\n        if (((prevLabelMargin == null) || prevLabelMargin >= labelBox.x + labelBox.width || (prevAngleMargin != null) && prevAngleMargin >= labelBox.x) && labelBox.x >= 0 && (labelBox.x + labelBox.width) < this.el.width()) {\n          if (this.options.xLabelAngle !== 0) {\n            margin = 1.25 * this.options.gridTextSize / Math.sin(this.options.xLabelAngle * Math.PI / 180.0);\n            prevAngleMargin = labelBox.x - margin;\n          }\n          _results.push(prevLabelMargin = labelBox.x - this.options.xLabelMargin);\n        } else {\n          _results.push(label.remove());\n        }\n      }\n      return _results;\n    };\n\n    Bar.prototype.drawSeries = function() {\n      var barWidth, bottom, groupWidth, idx, lastTop, left, leftPadding, numBars, row, sidx, size, top, ypos, zeroPos;\n      groupWidth = this.width / this.options.data.length;\n      numBars = this.options.stacked != null ? 1 : this.options.ykeys.length;\n      barWidth = (groupWidth * this.options.barSizeRatio - this.options.barGap * (numBars - 1)) / numBars;\n      leftPadding = groupWidth * (1 - this.options.barSizeRatio) / 2;\n      zeroPos = this.ymin <= 0 && this.ymax >= 0 ? this.transY(0) : null;\n      return this.bars = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.data;\n        _results = [];\n        for (idx = _i = 0, _len = _ref.length; _i < _len; idx = ++_i) {\n          row = _ref[idx];\n          lastTop = 0;\n          _results.push((function() {\n            var _j, _len1, _ref1, _results1;\n            _ref1 = row._y;\n            _results1 = [];\n            for (sidx = _j = 0, _len1 = _ref1.length; _j < _len1; sidx = ++_j) {\n              ypos = _ref1[sidx];\n              if (ypos !== null) {\n                if (zeroPos) {\n                  top = Math.min(ypos, zeroPos);\n                  bottom = Math.max(ypos, zeroPos);\n                } else {\n                  top = ypos;\n                  bottom = this.bottom;\n                }\n                left = this.left + idx * groupWidth + leftPadding;\n                if (!this.options.stacked) {\n                  left += sidx * (barWidth + this.options.barGap);\n                }\n                size = bottom - top;\n                if (this.options.stacked) {\n                  top -= lastTop;\n                }\n                this.drawBar(left, top, barWidth, size, this.colorFor(row, sidx, 'bar'), this.options.barOpacity, this.options.barRadius);\n                _results1.push(lastTop += size);\n              } else {\n                _results1.push(null);\n              }\n            }\n            return _results1;\n          }).call(this));\n        }\n        return _results;\n      }).call(this);\n    };\n\n    Bar.prototype.colorFor = function(row, sidx, type) {\n      var r, s;\n      if (typeof this.options.barColors === 'function') {\n        r = {\n          x: row.x,\n          y: row.y[sidx],\n          label: row.label\n        };\n        s = {\n          index: sidx,\n          key: this.options.ykeys[sidx],\n          label: this.options.labels[sidx]\n        };\n        return this.options.barColors.call(this, r, s, type);\n      } else {\n        return this.options.barColors[sidx % this.options.barColors.length];\n      }\n    };\n\n    Bar.prototype.hitTest = function(x) {\n      if (this.data.length === 0) {\n        return null;\n      }\n      x = Math.max(Math.min(x, this.right), this.left);\n      return Math.min(this.data.length - 1, Math.floor((x - this.left) / (this.width / this.data.length)));\n    };\n\n    Bar.prototype.onGridClick = function(x, y) {\n      var index;\n      index = this.hitTest(x);\n      return this.fire('click', index, this.data[index].src, x, y);\n    };\n\n    Bar.prototype.onHoverMove = function(x, y) {\n      var index, _ref;\n      index = this.hitTest(x);\n      return (_ref = this.hover).update.apply(_ref, this.hoverContentForRow(index));\n    };\n\n    Bar.prototype.onHoverOut = function() {\n      if (this.options.hideHover !== false) {\n        return this.hover.hide();\n      }\n    };\n\n    Bar.prototype.hoverContentForRow = function(index) {\n      var content, j, row, x, y, _i, _len, _ref;\n      row = this.data[index];\n      content = \"<div class='morris-hover-row-label'>\" + row.label + \"</div>\";\n      _ref = row.y;\n      for (j = _i = 0, _len = _ref.length; _i < _len; j = ++_i) {\n        y = _ref[j];\n        content += \"<div class='morris-hover-point' style='color: \" + (this.colorFor(row, j, 'label')) + \"'>\\n  \" + this.options.labels[j] + \":\\n  \" + (this.yLabelFormat(y)) + \"\\n</div>\";\n      }\n      if (typeof this.options.hoverCallback === 'function') {\n        content = this.options.hoverCallback(index, this.options, content, row.src);\n      }\n      x = this.left + (index + 0.5) * this.width / this.data.length;\n      return [content, x];\n    };\n\n    Bar.prototype.drawXAxisLabel = function(xPos, yPos, text) {\n      var label;\n      return label = this.raphael.text(xPos, yPos, text).attr('font-size', this.options.gridTextSize).attr('font-family', this.options.gridTextFamily).attr('font-weight', this.options.gridTextWeight).attr('fill', this.options.gridTextColor);\n    };\n\n    Bar.prototype.drawBar = function(xPos, yPos, width, height, barColor, opacity, radiusArray) {\n      var maxRadius, path;\n      maxRadius = Math.max.apply(Math, radiusArray);\n      if (maxRadius === 0 || maxRadius > height) {\n        path = this.raphael.rect(xPos, yPos, width, height);\n      } else {\n        path = this.raphael.path(this.roundedRect(xPos, yPos, width, height, radiusArray));\n      }\n      return path.attr('fill', barColor).attr('fill-opacity', opacity).attr('stroke', 'none');\n    };\n\n    Bar.prototype.roundedRect = function(x, y, w, h, r) {\n      if (r == null) {\n        r = [0, 0, 0, 0];\n      }\n      return [\"M\", x, r[0] + y, \"Q\", x, y, x + r[0], y, \"L\", x + w - r[1], y, \"Q\", x + w, y, x + w, y + r[1], \"L\", x + w, y + h - r[2], \"Q\", x + w, y + h, x + w - r[2], y + h, \"L\", x + r[3], y + h, \"Q\", x, y + h, x, y + h - r[3], \"Z\"];\n    };\n\n    return Bar;\n\n  })(Morris.Grid);\n\n  Morris.Donut = (function(_super) {\n    __extends(Donut, _super);\n\n    Donut.prototype.defaults = {\n      colors: ['#0B62A4', '#3980B5', '#679DC6', '#95BBD7', '#B0CCE1', '#095791', '#095085', '#083E67', '#052C48', '#042135'],\n      backgroundColor: '#FFFFFF',\n      labelColor: '#000000',\n      formatter: Morris.commas,\n      resize: false\n    };\n\n    function Donut(options) {\n      this.resizeHandler = __bind(this.resizeHandler, this);\n      this.select = __bind(this.select, this);\n      this.click = __bind(this.click, this);\n      var _this = this;\n      if (!(this instanceof Morris.Donut)) {\n        return new Morris.Donut(options);\n      }\n      this.options = $.extend({}, this.defaults, options);\n      if (typeof options.element === 'string') {\n        this.el = $(document.getElementById(options.element));\n      } else {\n        this.el = $(options.element);\n      }\n      if (this.el === null || this.el.length === 0) {\n        throw new Error(\"Graph placeholder not found.\");\n      }\n      if (options.data === void 0 || options.data.length === 0) {\n        return;\n      }\n      this.raphael = new Raphael(this.el[0]);\n      if (this.options.resize) {\n        $(window).bind('resize', function(evt) {\n          if (_this.timeoutId != null) {\n            window.clearTimeout(_this.timeoutId);\n          }\n          return _this.timeoutId = window.setTimeout(_this.resizeHandler, 100);\n        });\n      }\n      this.setData(options.data);\n    }\n\n    Donut.prototype.redraw = function() {\n      var C, cx, cy, i, idx, last, max_value, min, next, seg, total, value, w, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;\n      this.raphael.clear();\n      cx = this.el.width() / 2;\n      cy = this.el.height() / 2;\n      w = (Math.min(cx, cy) - 10) / 3;\n      total = 0;\n      _ref = this.values;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        value = _ref[_i];\n        total += value;\n      }\n      min = 5 / (2 * w);\n      C = 1.9999 * Math.PI - min * this.data.length;\n      last = 0;\n      idx = 0;\n      this.segments = [];\n      _ref1 = this.values;\n      for (i = _j = 0, _len1 = _ref1.length; _j < _len1; i = ++_j) {\n        value = _ref1[i];\n        next = last + min + C * (value / total);\n        seg = new Morris.DonutSegment(cx, cy, w * 2, w, last, next, this.data[i].color || this.options.colors[idx % this.options.colors.length], this.options.backgroundColor, idx, this.raphael);\n        seg.render();\n        this.segments.push(seg);\n        seg.on('hover', this.select);\n        seg.on('click', this.click);\n        last = next;\n        idx += 1;\n      }\n      this.text1 = this.drawEmptyDonutLabel(cx, cy - 10, this.options.labelColor, 15, 800);\n      this.text2 = this.drawEmptyDonutLabel(cx, cy + 10, this.options.labelColor, 14);\n      max_value = Math.max.apply(Math, this.values);\n      idx = 0;\n      _ref2 = this.values;\n      _results = [];\n      for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {\n        value = _ref2[_k];\n        if (value === max_value) {\n          this.select(idx);\n          break;\n        }\n        _results.push(idx += 1);\n      }\n      return _results;\n    };\n\n    Donut.prototype.setData = function(data) {\n      var row;\n      this.data = data;\n      this.values = (function() {\n        var _i, _len, _ref, _results;\n        _ref = this.data;\n        _results = [];\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          row = _ref[_i];\n          _results.push(parseFloat(row.value));\n        }\n        return _results;\n      }).call(this);\n      return this.redraw();\n    };\n\n    Donut.prototype.click = function(idx) {\n      return this.fire('click', idx, this.data[idx]);\n    };\n\n    Donut.prototype.select = function(idx) {\n      var row, s, segment, _i, _len, _ref;\n      _ref = this.segments;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        s = _ref[_i];\n        s.deselect();\n      }\n      segment = this.segments[idx];\n      segment.select();\n      row = this.data[idx];\n      return this.setLabels(row.label, this.options.formatter(row.value, row));\n    };\n\n    Donut.prototype.setLabels = function(label1, label2) {\n      var inner, maxHeightBottom, maxHeightTop, maxWidth, text1bbox, text1scale, text2bbox, text2scale;\n      inner = (Math.min(this.el.width() / 2, this.el.height() / 2) - 10) * 2 / 3;\n      maxWidth = 1.8 * inner;\n      maxHeightTop = inner / 2;\n      maxHeightBottom = inner / 3;\n      this.text1.attr({\n        text: label1,\n        transform: ''\n      });\n      text1bbox = this.text1.getBBox();\n      text1scale = Math.min(maxWidth / text1bbox.width, maxHeightTop / text1bbox.height);\n      this.text1.attr({\n        transform: \"S\" + text1scale + \",\" + text1scale + \",\" + (text1bbox.x + text1bbox.width / 2) + \",\" + (text1bbox.y + text1bbox.height)\n      });\n      this.text2.attr({\n        text: label2,\n        transform: ''\n      });\n      text2bbox = this.text2.getBBox();\n      text2scale = Math.min(maxWidth / text2bbox.width, maxHeightBottom / text2bbox.height);\n      return this.text2.attr({\n        transform: \"S\" + text2scale + \",\" + text2scale + \",\" + (text2bbox.x + text2bbox.width / 2) + \",\" + text2bbox.y\n      });\n    };\n\n    Donut.prototype.drawEmptyDonutLabel = function(xPos, yPos, color, fontSize, fontWeight) {\n      var text;\n      text = this.raphael.text(xPos, yPos, '').attr('font-size', fontSize).attr('fill', color);\n      if (fontWeight != null) {\n        text.attr('font-weight', fontWeight);\n      }\n      return text;\n    };\n\n    Donut.prototype.resizeHandler = function() {\n      this.timeoutId = null;\n      this.raphael.setSize(this.el.width(), this.el.height());\n      return this.redraw();\n    };\n\n    return Donut;\n\n  })(Morris.EventEmitter);\n\n  Morris.DonutSegment = (function(_super) {\n    __extends(DonutSegment, _super);\n\n    function DonutSegment(cx, cy, inner, outer, p0, p1, color, backgroundColor, index, raphael) {\n      this.cx = cx;\n      this.cy = cy;\n      this.inner = inner;\n      this.outer = outer;\n      this.color = color;\n      this.backgroundColor = backgroundColor;\n      this.index = index;\n      this.raphael = raphael;\n      this.deselect = __bind(this.deselect, this);\n      this.select = __bind(this.select, this);\n      this.sin_p0 = Math.sin(p0);\n      this.cos_p0 = Math.cos(p0);\n      this.sin_p1 = Math.sin(p1);\n      this.cos_p1 = Math.cos(p1);\n      this.is_long = (p1 - p0) > Math.PI ? 1 : 0;\n      this.path = this.calcSegment(this.inner + 3, this.inner + this.outer - 5);\n      this.selectedPath = this.calcSegment(this.inner + 3, this.inner + this.outer);\n      this.hilight = this.calcArc(this.inner);\n    }\n\n    DonutSegment.prototype.calcArcPoints = function(r) {\n      return [this.cx + r * this.sin_p0, this.cy + r * this.cos_p0, this.cx + r * this.sin_p1, this.cy + r * this.cos_p1];\n    };\n\n    DonutSegment.prototype.calcSegment = function(r1, r2) {\n      var ix0, ix1, iy0, iy1, ox0, ox1, oy0, oy1, _ref, _ref1;\n      _ref = this.calcArcPoints(r1), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];\n      _ref1 = this.calcArcPoints(r2), ox0 = _ref1[0], oy0 = _ref1[1], ox1 = _ref1[2], oy1 = _ref1[3];\n      return (\"M\" + ix0 + \",\" + iy0) + (\"A\" + r1 + \",\" + r1 + \",0,\" + this.is_long + \",0,\" + ix1 + \",\" + iy1) + (\"L\" + ox1 + \",\" + oy1) + (\"A\" + r2 + \",\" + r2 + \",0,\" + this.is_long + \",1,\" + ox0 + \",\" + oy0) + \"Z\";\n    };\n\n    DonutSegment.prototype.calcArc = function(r) {\n      var ix0, ix1, iy0, iy1, _ref;\n      _ref = this.calcArcPoints(r), ix0 = _ref[0], iy0 = _ref[1], ix1 = _ref[2], iy1 = _ref[3];\n      return (\"M\" + ix0 + \",\" + iy0) + (\"A\" + r + \",\" + r + \",0,\" + this.is_long + \",0,\" + ix1 + \",\" + iy1);\n    };\n\n    DonutSegment.prototype.render = function() {\n      var _this = this;\n      this.arc = this.drawDonutArc(this.hilight, this.color);\n      return this.seg = this.drawDonutSegment(this.path, this.color, this.backgroundColor, function() {\n        return _this.fire('hover', _this.index);\n      }, function() {\n        return _this.fire('click', _this.index);\n      });\n    };\n\n    DonutSegment.prototype.drawDonutArc = function(path, color) {\n      return this.raphael.path(path).attr({\n        stroke: color,\n        'stroke-width': 2,\n        opacity: 0\n      });\n    };\n\n    DonutSegment.prototype.drawDonutSegment = function(path, fillColor, strokeColor, hoverFunction, clickFunction) {\n      return this.raphael.path(path).attr({\n        fill: fillColor,\n        stroke: strokeColor,\n        'stroke-width': 3\n      }).hover(hoverFunction).click(clickFunction);\n    };\n\n    DonutSegment.prototype.select = function() {\n      if (!this.selected) {\n        this.seg.animate({\n          path: this.selectedPath\n        }, 150, '<>');\n        this.arc.animate({\n          opacity: 1\n        }, 150, '<>');\n        return this.selected = true;\n      }\n    };\n\n    DonutSegment.prototype.deselect = function() {\n      if (this.selected) {\n        this.seg.animate({\n          path: this.path\n        }, 150, '<>');\n        this.arc.animate({\n          opacity: 0\n        }, 150, '<>');\n        return this.selected = false;\n      }\n    };\n\n    return DonutSegment;\n\n  })(Morris.EventEmitter);\n\n}).call(this);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/nestable/jquery.nestable.js",
    "content": "/*!\n * Nestable jQuery Plugin - Copyright (c) 2012 David Bushell - http://dbushell.com/\n * Dual-licensed under the BSD or MIT licenses\n */\n;(function($, window, document, undefined)\n{\n    var hasTouch = 'ontouchstart' in document;\n\n    /**\n     * Detect CSS pointer-events property\n     * events are normally disabled on the dragging element to avoid conflicts\n     * https://github.com/ausi/Feature-detection-technique-for-pointer-events/blob/master/modernizr-pointerevents.js\n     */\n    var hasPointerEvents = (function()\n    {\n        var el    = document.createElement('div'),\n            docEl = document.documentElement;\n        if (!('pointerEvents' in el.style)) {\n            return false;\n        }\n        el.style.pointerEvents = 'auto';\n        el.style.pointerEvents = 'x';\n        docEl.appendChild(el);\n        var supports = window.getComputedStyle && window.getComputedStyle(el, '').pointerEvents === 'auto';\n        docEl.removeChild(el);\n        return !!supports;\n    })();\n\n    var defaults = {\n        listNodeName    : 'ol',\n        itemNodeName    : 'li',\n        rootClass       : 'dd',\n        listClass       : 'dd-list',\n        itemClass       : 'dd-item',\n        dragClass       : 'dd-dragel',\n        handleClass     : 'dd-handle',\n        collapsedClass  : 'dd-collapsed',\n        placeClass      : 'dd-placeholder',\n        noDragClass     : 'dd-nodrag',\n        emptyClass      : 'dd-empty',\n        expandBtnHTML   : '<button data-action=\"expand\" type=\"button\">展开</button>',\n        collapseBtnHTML : '<button data-action=\"collapse\" type=\"button\">关闭</button>',\n        group           : 0,\n        maxDepth        : 5,\n        threshold       : 20\n    };\n\n    function Plugin(element, options)\n    {\n        this.w  = $(document);\n        this.el = $(element);\n        this.options = $.extend({}, defaults, options);\n        this.init();\n    }\n\n    Plugin.prototype = {\n\n        init: function()\n        {\n            var list = this;\n\n            list.reset();\n\n            list.el.data('nestable-group', this.options.group);\n\n            list.placeEl = $('<div class=\"' + list.options.placeClass + '\"/>');\n\n            $.each(this.el.find(list.options.itemNodeName), function(k, el) {\n                list.setParent($(el));\n            });\n\n            list.el.on('click', 'button', function(e) {\n                if (list.dragEl) {\n                    return;\n                }\n                var target = $(e.currentTarget),\n                    action = target.data('action'),\n                    item   = target.parent(list.options.itemNodeName);\n                if (action === 'collapse') {\n                    list.collapseItem(item);\n                }\n                if (action === 'expand') {\n                    list.expandItem(item);\n                }\n            });\n\n            var onStartEvent = function(e)\n            {\n                var handle = $(e.target);\n                if (!handle.hasClass(list.options.handleClass)) {\n                    if (handle.closest('.' + list.options.noDragClass).length) {\n                        return;\n                    }\n                    handle = handle.closest('.' + list.options.handleClass);\n                }\n\n                if (!handle.length || list.dragEl) {\n                    return;\n                }\n\n                list.isTouch = /^touch/.test(e.type);\n                if (list.isTouch && e.touches.length !== 1) {\n                    return;\n                }\n\n                e.preventDefault();\n                list.dragStart(e.touches ? e.touches[0] : e);\n            };\n\n            var onMoveEvent = function(e)\n            {\n                if (list.dragEl) {\n                    e.preventDefault();\n                    list.dragMove(e.touches ? e.touches[0] : e);\n                }\n            };\n\n            var onEndEvent = function(e)\n            {\n                if (list.dragEl) {\n                    e.preventDefault();\n                    list.dragStop(e.touches ? e.touches[0] : e);\n                }\n            };\n\n            if (hasTouch) {\n                list.el[0].addEventListener('touchstart', onStartEvent, false);\n                window.addEventListener('touchmove', onMoveEvent, false);\n                window.addEventListener('touchend', onEndEvent, false);\n                window.addEventListener('touchcancel', onEndEvent, false);\n            }\n\n            list.el.on('mousedown', onStartEvent);\n            list.w.on('mousemove', onMoveEvent);\n            list.w.on('mouseup', onEndEvent);\n\n        },\n\n        serialize: function()\n        {\n            var data,\n                depth = 0,\n                list  = this;\n            step  = function(level, depth)\n            {\n                var array = [ ],\n                    items = level.children(list.options.itemNodeName);\n                items.each(function()\n                {\n                    var li   = $(this),\n                        item = $.extend({}, li.data()),\n                        sub  = li.children(list.options.listNodeName);\n                    if (sub.length) {\n                        item.children = step(sub, depth + 1);\n                    }\n                    array.push(item);\n                });\n                return array;\n            };\n            data = step(list.el.find(list.options.listNodeName).first(), depth);\n            return data;\n        },\n\n        serialise: function()\n        {\n            return this.serialize();\n        },\n\n        reset: function()\n        {\n            this.mouse = {\n                offsetX   : 0,\n                offsetY   : 0,\n                startX    : 0,\n                startY    : 0,\n                lastX     : 0,\n                lastY     : 0,\n                nowX      : 0,\n                nowY      : 0,\n                distX     : 0,\n                distY     : 0,\n                dirAx     : 0,\n                dirX      : 0,\n                dirY      : 0,\n                lastDirX  : 0,\n                lastDirY  : 0,\n                distAxX   : 0,\n                distAxY   : 0\n            };\n            this.isTouch    = false;\n            this.moving     = false;\n            this.dragEl     = null;\n            this.dragRootEl = null;\n            this.dragDepth  = 0;\n            this.hasNewRoot = false;\n            this.pointEl    = null;\n        },\n\n        expandItem: function(li)\n        {\n            li.removeClass(this.options.collapsedClass);\n            li.children('[data-action=\"expand\"]').hide();\n            li.children('[data-action=\"collapse\"]').show();\n            li.children(this.options.listNodeName).show();\n        },\n\n        collapseItem: function(li)\n        {\n            var lists = li.children(this.options.listNodeName);\n            if (lists.length) {\n                li.addClass(this.options.collapsedClass);\n                li.children('[data-action=\"collapse\"]').hide();\n                li.children('[data-action=\"expand\"]').show();\n                li.children(this.options.listNodeName).hide();\n            }\n        },\n\n        expandAll: function()\n        {\n            var list = this;\n            list.el.find(list.options.itemNodeName).each(function() {\n                list.expandItem($(this));\n            });\n        },\n\n        collapseAll: function()\n        {\n            var list = this;\n            list.el.find(list.options.itemNodeName).each(function() {\n                list.collapseItem($(this));\n            });\n        },\n\n        setParent: function(li)\n        {\n            if (li.children(this.options.listNodeName).length) {\n                li.prepend($(this.options.expandBtnHTML));\n                li.prepend($(this.options.collapseBtnHTML));\n            }\n            li.children('[data-action=\"expand\"]').hide();\n        },\n\n        unsetParent: function(li)\n        {\n            li.removeClass(this.options.collapsedClass);\n            li.children('[data-action]').remove();\n            li.children(this.options.listNodeName).remove();\n        },\n\n        dragStart: function(e)\n        {\n            var mouse    = this.mouse,\n                target   = $(e.target),\n                dragItem = target.closest(this.options.itemNodeName);\n\n            this.placeEl.css('height', dragItem.height());\n\n            mouse.offsetX = e.offsetX !== undefined ? e.offsetX : e.pageX - target.offset().left;\n            mouse.offsetY = e.offsetY !== undefined ? e.offsetY : e.pageY - target.offset().top;\n            mouse.startX = mouse.lastX = e.pageX;\n            mouse.startY = mouse.lastY = e.pageY;\n\n            this.dragRootEl = this.el;\n\n            this.dragEl = $(document.createElement(this.options.listNodeName)).addClass(this.options.listClass + ' ' + this.options.dragClass);\n            this.dragEl.css('width', dragItem.width());\n\n            dragItem.after(this.placeEl);\n            dragItem[0].parentNode.removeChild(dragItem[0]);\n            dragItem.appendTo(this.dragEl);\n\n            $(document.body).append(this.dragEl);\n            this.dragEl.css({\n                'left' : e.pageX - mouse.offsetX,\n                'top'  : e.pageY - mouse.offsetY\n            });\n            // total depth of dragging item\n            var i, depth,\n                items = this.dragEl.find(this.options.itemNodeName);\n            for (i = 0; i < items.length; i++) {\n                depth = $(items[i]).parents(this.options.listNodeName).length;\n                if (depth > this.dragDepth) {\n                    this.dragDepth = depth;\n                }\n            }\n        },\n\n        dragStop: function(e)\n        {\n            var el = this.dragEl.children(this.options.itemNodeName).first();\n            el[0].parentNode.removeChild(el[0]);\n            this.placeEl.replaceWith(el);\n\n            this.dragEl.remove();\n            this.el.trigger('change');\n            if (this.hasNewRoot) {\n                this.dragRootEl.trigger('change');\n            }\n            this.reset();\n        },\n\n        dragMove: function(e)\n        {\n            var list, parent, prev, next, depth,\n                opt   = this.options,\n                mouse = this.mouse;\n\n            this.dragEl.css({\n                'left' : e.pageX - mouse.offsetX,\n                'top'  : e.pageY - mouse.offsetY\n            });\n\n            // mouse position last events\n            mouse.lastX = mouse.nowX;\n            mouse.lastY = mouse.nowY;\n            // mouse position this events\n            mouse.nowX  = e.pageX;\n            mouse.nowY  = e.pageY;\n            // distance mouse moved between events\n            mouse.distX = mouse.nowX - mouse.lastX;\n            mouse.distY = mouse.nowY - mouse.lastY;\n            // direction mouse was moving\n            mouse.lastDirX = mouse.dirX;\n            mouse.lastDirY = mouse.dirY;\n            // direction mouse is now moving (on both axis)\n            mouse.dirX = mouse.distX === 0 ? 0 : mouse.distX > 0 ? 1 : -1;\n            mouse.dirY = mouse.distY === 0 ? 0 : mouse.distY > 0 ? 1 : -1;\n            // axis mouse is now moving on\n            var newAx   = Math.abs(mouse.distX) > Math.abs(mouse.distY) ? 1 : 0;\n\n            // do nothing on first move\n            if (!mouse.moving) {\n                mouse.dirAx  = newAx;\n                mouse.moving = true;\n                return;\n            }\n\n            // calc distance moved on this axis (and direction)\n            if (mouse.dirAx !== newAx) {\n                mouse.distAxX = 0;\n                mouse.distAxY = 0;\n            } else {\n                mouse.distAxX += Math.abs(mouse.distX);\n                if (mouse.dirX !== 0 && mouse.dirX !== mouse.lastDirX) {\n                    mouse.distAxX = 0;\n                }\n                mouse.distAxY += Math.abs(mouse.distY);\n                if (mouse.dirY !== 0 && mouse.dirY !== mouse.lastDirY) {\n                    mouse.distAxY = 0;\n                }\n            }\n            mouse.dirAx = newAx;\n\n            /**\n             * move horizontal\n             */\n            if (mouse.dirAx && mouse.distAxX >= opt.threshold) {\n                // reset move distance on x-axis for new phase\n                mouse.distAxX = 0;\n                prev = this.placeEl.prev(opt.itemNodeName);\n                // increase horizontal level if previous sibling exists and is not collapsed\n                if (mouse.distX > 0 && prev.length && !prev.hasClass(opt.collapsedClass)) {\n                    // cannot increase level when item above is collapsed\n                    list = prev.find(opt.listNodeName).last();\n                    // check if depth limit has reached\n                    depth = this.placeEl.parents(opt.listNodeName).length;\n                    if (depth + this.dragDepth <= opt.maxDepth) {\n                        // create new sub-level if one doesn't exist\n                        if (!list.length) {\n                            list = $('<' + opt.listNodeName + '/>').addClass(opt.listClass);\n                            list.append(this.placeEl);\n                            prev.append(list);\n                            this.setParent(prev);\n                        } else {\n                            // else append to next level up\n                            list = prev.children(opt.listNodeName).last();\n                            list.append(this.placeEl);\n                        }\n                    }\n                }\n                // decrease horizontal level\n                if (mouse.distX < 0) {\n                    // we can't decrease a level if an item preceeds the current one\n                    next = this.placeEl.next(opt.itemNodeName);\n                    if (!next.length) {\n                        parent = this.placeEl.parent();\n                        this.placeEl.closest(opt.itemNodeName).after(this.placeEl);\n                        if (!parent.children().length) {\n                            this.unsetParent(parent.parent());\n                        }\n                    }\n                }\n            }\n\n            var isEmpty = false;\n\n            // find list item under cursor\n            if (!hasPointerEvents) {\n                this.dragEl[0].style.visibility = 'hidden';\n            }\n            this.pointEl = $(document.elementFromPoint(e.pageX - document.body.scrollLeft, e.pageY - (window.pageYOffset || document.documentElement.scrollTop)));\n            if (!hasPointerEvents) {\n                this.dragEl[0].style.visibility = 'visible';\n            }\n            if (this.pointEl.hasClass(opt.handleClass)) {\n                this.pointEl = this.pointEl.parent(opt.itemNodeName);\n            }\n            if (this.pointEl.hasClass(opt.emptyClass)) {\n                isEmpty = true;\n            }\n            else if (!this.pointEl.length || !this.pointEl.hasClass(opt.itemClass)) {\n                return;\n            }\n\n            // find parent list of item under cursor\n            var pointElRoot = this.pointEl.closest('.' + opt.rootClass),\n                isNewRoot   = this.dragRootEl.data('nestable-id') !== pointElRoot.data('nestable-id');\n\n            /**\n             * move vertical\n             */\n            if (!mouse.dirAx || isNewRoot || isEmpty) {\n                // check if groups match if dragging over new root\n                if (isNewRoot && opt.group !== pointElRoot.data('nestable-group')) {\n                    return;\n                }\n                // check depth limit\n                depth = this.dragDepth - 1 + this.pointEl.parents(opt.listNodeName).length;\n                if (depth > opt.maxDepth) {\n                    return;\n                }\n                var before = e.pageY < (this.pointEl.offset().top + this.pointEl.height() / 2);\n                parent = this.placeEl.parent();\n                // if empty create new list to replace empty placeholder\n                if (isEmpty) {\n                    list = $(document.createElement(opt.listNodeName)).addClass(opt.listClass);\n                    list.append(this.placeEl);\n                    this.pointEl.replaceWith(list);\n                }\n                else if (before) {\n                    this.pointEl.before(this.placeEl);\n                }\n                else {\n                    this.pointEl.after(this.placeEl);\n                }\n                if (!parent.children().length) {\n                    this.unsetParent(parent.parent());\n                }\n                if (!this.dragRootEl.find(opt.itemNodeName).length) {\n                    this.dragRootEl.append('<div class=\"' + opt.emptyClass + '\"/>');\n                }\n                // parent root list has changed\n                if (isNewRoot) {\n                    this.dragRootEl = pointElRoot;\n                    this.hasNewRoot = this.el[0] !== this.dragRootEl[0];\n                }\n            }\n        }\n\n    };\n\n    $.fn.nestable = function(params)\n    {\n        var lists  = this,\n            retval = this;\n\n        lists.each(function()\n        {\n            var plugin = $(this).data(\"nestable\");\n\n            if (!plugin) {\n                $(this).data(\"nestable\", new Plugin(this, params));\n                $(this).data(\"nestable-id\", new Date().getTime());\n            } else {\n                if (typeof params === 'string' && typeof plugin[params] === 'function') {\n                    retval = plugin[params]();\n                }\n            }\n        });\n\n        return retval || lists;\n    };\n\n})(window.jQuery || window.Zepto, window, document);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/plyr/plyr.js",
    "content": "// ==========================================================================\n// Plyr\n// plyr.js v1.3.6\n// https://github.com/selz/plyr\n// License: The MIT License (MIT)\n// ==========================================================================\n// Credits: http://paypal.github.io/accessible-html5-video-player/\n// ==========================================================================\n\n(function (api) {\n    'use strict';\n    /*global YT*/\n\n    // Globals\n    var fullscreen, config, callbacks = {\n        youtube: []\n    };\n\n    // Default config\n    var defaults = {\n        enabled: true,\n        debug: false,\n        seekTime: 10,\n        volume: 5,\n        click: true,\n        tooltips: true,\n        displayDuration: true,\n        iconPrefix: 'icon',\n        selectors: {\n            container: '.player',\n            controls: '.player-controls',\n            labels: '[data-player] .sr-only, label .sr-only',\n            buttons: {\n                seek: '[data-player=\"seek\"]',\n                play: '[data-player=\"play\"]',\n                pause: '[data-player=\"pause\"]',\n                restart: '[data-player=\"restart\"]',\n                rewind: '[data-player=\"rewind\"]',\n                forward: '[data-player=\"fast-forward\"]',\n                mute: '[data-player=\"mute\"]',\n                volume: '[data-player=\"volume\"]',\n                captions: '[data-player=\"captions\"]',\n                fullscreen: '[data-player=\"fullscreen\"]'\n            },\n            progress: {\n                container: '.player-progress',\n                buffer: '.player-progress-buffer',\n                played: '.player-progress-played'\n            },\n            captions: '.player-captions',\n            currentTime: '.player-current-time',\n            duration: '.player-duration'\n        },\n        classes: {\n            videoWrapper: 'player-video-wrapper',\n            embedWrapper: 'player-video-embed',\n            type: 'player-{0}',\n            stopped: 'stopped',\n            playing: 'playing',\n            muted: 'muted',\n            loading: 'loading',\n            tooltip: 'player-tooltip',\n            hidden: 'sr-only',\n            hover: 'player-hover',\n            captions: {\n                enabled: 'captions-enabled',\n                active: 'captions-active'\n            },\n            fullscreen: {\n                enabled: 'fullscreen-enabled',\n                active: 'fullscreen-active',\n                hideControls: 'fullscreen-hide-controls'\n            }\n        },\n        captions: {\n            defaultActive: false\n        },\n        fullscreen: {\n            enabled: true,\n            fallback: true,\n            hideControls: true\n        },\n        storage: {\n            enabled: true,\n            key: 'plyr_volume'\n        },\n        controls: ['restart', 'rewind', 'play', 'fast-forward', 'current-time', 'duration', 'mute', 'volume', /*'captions',*/ 'fullscreen'],\n        i18n: {\n            restart: '重新播放',\n            rewind: '后退{seektime}秒',\n            play: '播放',\n            pause: '暂停',\n            forward: '快进{seektime}秒',\n            played: '播放中',\n            buffered: '缓冲中',\n            currentTime: '当前时间',\n            duration: '持续时间',\n            volume: '音量',\n            toggleMute: '静音',\n            toggleCaptions: '字幕',\n            toggleFullscreen: '全屏'\n        }\n    };\n\n    // Build the default HTML\n    function _buildControls() {\n        // Open and add the progress and seek elements\n        var html = [\n        '<div class=\"player-controls\">',\n            '<div class=\"player-progress\">',\n                '<label for=\"seek{id}\" class=\"sr-only\">Seek</label>',\n                '<input id=\"seek{id}\" class=\"player-progress-seek\" type=\"range\" min=\"0\" max=\"100\" step=\"0.5\" value=\"0\" data-player=\"seek\">',\n                '<progress class=\"player-progress-played\" max=\"100\" value=\"0\">',\n                    '<span>0</span>% ' + config.i18n.played,\n                '</progress>',\n                '<progress class=\"player-progress-buffer\" max=\"100\" value=\"0\">',\n                    '<span>0</span>% ' + config.i18n.buffered,\n                '</progress>',\n            '</div>',\n            '<span class=\"player-controls-left\">'];\n\n        // Restart button\n        if (_inArray(config.controls, 'restart')) {\n            html.push(\n                '<button type=\"button\" data-player=\"restart\">',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-restart\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.restart + '</span>',\n                '</button>'\n            );\n        }\n\n        // Rewind button\n        if (_inArray(config.controls, 'rewind')) {\n            html.push(\n                '<button type=\"button\" data-player=\"rewind\">',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-rewind\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.rewind + '</span>',\n                '</button>'\n            );\n        }\n\n        // Play/pause button\n        if (_inArray(config.controls, 'play')) {\n            html.push(\n                '<button type=\"button\" data-player=\"play\">',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-play\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.play + '</span>',\n                '</button>',\n                '<button type=\"button\" data-player=\"pause\">',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-pause\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.pause + '</span>',\n                '</button>'\n            );\n        }\n\n        // Fast forward button\n        if (_inArray(config.controls, 'fast-forward')) {\n            html.push(\n                '<button type=\"button\" data-player=\"fast-forward\">',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-fast-forward\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.forward + '</span>',\n                '</button>'\n            );\n        }\n\n        // Media current time display\n        if (_inArray(config.controls, 'current-time')) {\n            html.push(\n                '<span class=\"player-time\">',\n                '<span class=\"sr-only\">' + config.i18n.currentTime + '</span>',\n                '<span class=\"player-current-time\">00:00</span>',\n                '</span>'\n            );\n        }\n\n        // Media duration display\n        if (_inArray(config.controls, 'duration')) {\n            html.push(\n                '<span class=\"player-time\">',\n                '<span class=\"sr-only\">' + config.i18n.duration + '</span>',\n                '<span class=\"player-duration\">00:00</span>',\n                '</span>'\n            );\n        }\n\n        // Close left controls\n        html.push(\n            '</span>',\n            '<span class=\"player-controls-right\">'\n        );\n\n        // Toggle mute button\n        if (_inArray(config.controls, 'mute')) {\n            html.push(\n                '<button type=\"button\" data-player=\"mute\">',\n                '<svg class=\"icon-muted\"><use xlink:href=\"#' + config.iconPrefix + '-muted\" /></svg>',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-volume\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.toggleMute + '</span>',\n                '</button>'\n            );\n        }\n\n        // Volume range control\n        if (_inArray(config.controls, 'volume')) {\n            html.push(\n                '<label for=\"volume{id}\" class=\"sr-only\">' + config.i18n.volume + '</label>',\n                '<input id=\"volume{id}\" class=\"player-volume\" type=\"range\" min=\"0\" max=\"10\" value=\"5\" data-player=\"volume\">'\n            );\n        }\n\n        // Toggle captions button\n        if (_inArray(config.controls, 'captions')) {\n            html.push(\n                '<button type=\"button\" data-player=\"captions\">',\n                '<svg class=\"icon-captions-on\"><use xlink:href=\"#' + config.iconPrefix + '-captions-on\" /></svg>',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-captions-off\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.toggleCaptions + '</span>',\n                '</button>'\n            );\n        }\n\n        // Toggle fullscreen button\n        if (_inArray(config.controls, 'fullscreen')) {\n            html.push(\n                '<button type=\"button\" data-player=\"fullscreen\">',\n                '<svg class=\"icon-exit-fullscreen\"><use xlink:href=\"#' + config.iconPrefix + '-exit-fullscreen\" /></svg>',\n                '<svg><use xlink:href=\"#' + config.iconPrefix + '-enter-fullscreen\" /></svg>',\n                '<span class=\"sr-only\">' + config.i18n.toggleFullscreen + '</span>',\n                '</button>'\n            );\n        }\n\n        // Close everything\n        html.push(\n            '</span>',\n            '</div>'\n        );\n\n        return html.join('');\n    }\n\n    // Debugging\n    function _log(text, error) {\n        if (config.debug && window.console) {\n            console[(error ? 'error' : 'log')](text);\n        }\n    }\n\n    // Credits: http://paypal.github.io/accessible-html5-video-player/\n    // Unfortunately, due to mixed support, UA sniffing is required\n    function _browserSniff() {\n        var nAgt = navigator.userAgent,\n            name = navigator.appName,\n            fullVersion = '' + parseFloat(navigator.appVersion),\n            majorVersion = parseInt(navigator.appVersion, 10),\n            nameOffset,\n            verOffset,\n            ix;\n\n        // MSIE 11\n        if ((navigator.appVersion.indexOf('Windows NT') !== -1) && (navigator.appVersion.indexOf('rv:11') !== -1)) {\n            name = 'IE';\n            fullVersion = '11;';\n        }\n        // MSIE\n        else if ((verOffset = nAgt.indexOf('MSIE')) !== -1) {\n            name = 'IE';\n            fullVersion = nAgt.substring(verOffset + 5);\n        }\n        // Chrome\n        else if ((verOffset = nAgt.indexOf('Chrome')) !== -1) {\n            name = 'Chrome';\n            fullVersion = nAgt.substring(verOffset + 7);\n        }\n        // Safari\n        else if ((verOffset = nAgt.indexOf('Safari')) !== -1) {\n            name = 'Safari';\n            fullVersion = nAgt.substring(verOffset + 7);\n            if ((verOffset = nAgt.indexOf('Version')) !== -1) {\n                fullVersion = nAgt.substring(verOffset + 8);\n            }\n        }\n        // Firefox\n        else if ((verOffset = nAgt.indexOf('Firefox')) !== -1) {\n            name = 'Firefox';\n            fullVersion = nAgt.substring(verOffset + 8);\n        }\n        // In most other browsers, 'name/version' is at the end of userAgent\n        else if ((nameOffset = nAgt.lastIndexOf(' ') + 1) < (verOffset = nAgt.lastIndexOf('/'))) {\n            name = nAgt.substring(nameOffset, verOffset);\n            fullVersion = nAgt.substring(verOffset + 1);\n\n            if (name.toLowerCase() == name.toUpperCase()) {\n                name = navigator.appName;\n            }\n        }\n        // Trim the fullVersion string at semicolon/space if present\n        if ((ix = fullVersion.indexOf(';')) !== -1) {\n            fullVersion = fullVersion.substring(0, ix);\n        }\n        if ((ix = fullVersion.indexOf(' ')) !== -1) {\n            fullVersion = fullVersion.substring(0, ix);\n        }\n        // Get major version\n        majorVersion = parseInt('' + fullVersion, 10);\n        if (isNaN(majorVersion)) {\n            fullVersion = '' + parseFloat(navigator.appVersion);\n            majorVersion = parseInt(navigator.appVersion, 10);\n        }\n\n        // Return data\n        return {\n            name: name,\n            version: majorVersion,\n            ios: /(iPad|iPhone|iPod)/g.test(navigator.platform)\n        };\n    }\n\n    // Check for mime type support against a player instance\n    // Credits: http://diveintohtml5.info/everything.html\n    // Related: http://www.leanbackplayer.com/test/h5mt.html\n    function _supportMime(player, mimeType) {\n        var media = player.media;\n\n        // Only check video types for video players\n        if (player.type == 'video') {\n            // Check type\n            switch (mimeType) {\n            case 'video/webm':\n                return !!(media.canPlayType && media.canPlayType('video/webm; codecs=\"vp8, vorbis\"').replace(/no/, ''));\n            case 'video/mp4':\n                return !!(media.canPlayType && media.canPlayType('video/mp4; codecs=\"avc1.42E01E, mp4a.40.2\"').replace(/no/, ''));\n            case 'video/ogg':\n                return !!(media.canPlayType && media.canPlayType('video/ogg; codecs=\"theora\"').replace(/no/, ''));\n            }\n        }\n\n        // Only check audio types for audio players\n        else if (player.type == 'audio') {\n            // Check type\n            switch (mimeType) {\n            case 'audio/mpeg':\n                return !!(media.canPlayType && media.canPlayType('audio/mpeg;').replace(/no/, ''));\n            case 'audio/ogg':\n                return !!(media.canPlayType && media.canPlayType('audio/ogg; codecs=\"vorbis\"').replace(/no/, ''));\n            case 'audio/wav':\n                return !!(media.canPlayType && media.canPlayType('audio/wav; codecs=\"1\"').replace(/no/, ''));\n            }\n        }\n\n        // If we got this far, we're stuffed\n        return false;\n    }\n\n    // Inject a script\n    function _injectScript(source) {\n        if (document.querySelectorAll('script[src=\"' + source + '\"]').length) {\n            return;\n        }\n\n        var tag = document.createElement('script');\n        tag.src = source;\n        var firstScriptTag = document.getElementsByTagName('script')[0];\n        firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);\n    }\n\n    // Element exists in an array\n    function _inArray(haystack, needle) {\n        return Array.prototype.indexOf && (haystack.indexOf(needle) != -1);\n    }\n\n    // Replace all\n    function _replaceAll(string, find, replace) {\n        return string.replace(new RegExp(find.replace(/([.*+?\\^=!:${}()|\\[\\]\\/\\\\])/g, '\\\\$1'), 'g'), replace);\n    }\n\n    // Wrap an element\n    function _wrap(elements, wrapper) {\n        // Convert `elements` to an array, if necessary.\n        if (!elements.length) {\n            elements = [elements];\n        }\n\n        // Loops backwards to prevent having to clone the wrapper on the\n        // first element (see `child` below).\n        for (var i = elements.length - 1; i >= 0; i--) {\n            var child = (i > 0) ? wrapper.cloneNode(true) : wrapper;\n            var element = elements[i];\n\n            // Cache the current parent and sibling.\n            var parent = element.parentNode;\n            var sibling = element.nextSibling;\n\n            // Wrap the element (is automatically removed from its current\n            // parent).\n            child.appendChild(element);\n\n            // If the element had a sibling, insert the wrapper before\n            // the sibling to maintain the HTML structure; otherwise, just\n            // append it to the parent.\n            if (sibling) {\n                parent.insertBefore(child, sibling);\n            } else {\n                parent.appendChild(child);\n            }\n        }\n    }\n\n    // Unwrap an element\n    // http://plainjs.com/javascript/manipulation/unwrap-a-dom-element-35/\n    function _unwrap(wrapper) {\n        // Get the element's parent node\n        var parent = wrapper.parentNode;\n\n        // Move all children out of the element\n        while (wrapper.firstChild) {\n            parent.insertBefore(wrapper.firstChild, wrapper);\n        }\n\n        // Remove the empty element\n        parent.removeChild(wrapper);\n    }\n\n    // Remove an element\n    function _remove(element) {\n        element.parentNode.removeChild(element);\n    }\n\n    // Prepend child\n    function _prependChild(parent, element) {\n        parent.insertBefore(element, parent.firstChild);\n    }\n\n    // Set attributes\n    function _setAttributes(element, attributes) {\n        for (var key in attributes) {\n            element.setAttribute(key, attributes[key]);\n        }\n    }\n\n    // Toggle class on an element\n    function _toggleClass(element, name, state) {\n        if (element) {\n            if (element.classList) {\n                element.classList[state ? 'add' : 'remove'](name);\n            } else {\n                var className = (' ' + element.className + ' ').replace(/\\s+/g, ' ').replace(' ' + name + ' ', '');\n                element.className = className + (state ? ' ' + name : '');\n            }\n        }\n    }\n\n    // Toggle event\n    function _toggleHandler(element, events, callback, toggle) {\n        var eventList = events.split(' ');\n\n        // If a nodelist is passed, call itself on each node\n        if (element instanceof NodeList) {\n            for (var x = 0; x < element.length; x++) {\n                if (element[x] instanceof Node) {\n                    _toggleHandler(element[x], arguments[1], arguments[2], arguments[3]);\n                }\n            }\n            return;\n        }\n\n        // If a single node is passed, bind the event listener\n        for (var i = 0; i < eventList.length; i++) {\n            element[toggle ? 'addEventListener' : 'removeEventListener'](eventList[i], callback, false);\n        }\n    }\n\n    // Bind event\n    function _on(element, events, callback) {\n        if (element) {\n            _toggleHandler(element, events, callback, true);\n        }\n    }\n\n    // Unbind event\n    function _off(element, events, callback) {\n        if (element) {\n            _toggleHandler(element, events, callback, false);\n        }\n    }\n\n    // Trigger event\n    function _triggerEvent(element, event) {\n        // Create faux event\n        var fauxEvent = document.createEvent('MouseEvents');\n\n        // Set the event type\n        fauxEvent.initEvent(event, true, true);\n\n        // Dispatch the event\n        element.dispatchEvent(fauxEvent);\n    }\n\n    // Toggle aria-pressed state on a toggle button\n    function _toggleState(target, state) {\n        // Get state\n        state = (typeof state === 'boolean' ? state : !target.getAttribute('aria-pressed'));\n\n        // Set the attribute on target\n        target.setAttribute('aria-pressed', state);\n\n        return state;\n    }\n\n    // Get percentage\n    function _getPercentage(current, max) {\n        if (current === 0 || max === 0 || isNaN(current) || isNaN(max)) {\n            return 0;\n        }\n        return ((current / max) * 100).toFixed(2);\n    }\n\n    // Deep extend/merge two Objects\n    // http://andrewdupont.net/2009/08/28/deep-extending-objects-in-javascript/\n    // Removed call to arguments.callee (used explicit function name instead)\n    function _extend(destination, source) {\n        for (var property in source) {\n            if (source[property] && source[property].constructor && source[property].constructor === Object) {\n                destination[property] = destination[property] || {};\n                _extend(destination[property], source[property]);\n            } else {\n                destination[property] = source[property];\n            }\n        }\n        return destination;\n    }\n\n    // Fullscreen API\n    function _fullscreen() {\n        var fullscreen = {\n                supportsFullScreen: false,\n                isFullScreen: function () {\n                    return false;\n                },\n                requestFullScreen: function () {},\n                cancelFullScreen: function () {},\n                fullScreenEventName: '',\n                element: null,\n                prefix: ''\n            },\n            browserPrefixes = 'webkit moz o ms khtml'.split(' ');\n\n        // Check for native support\n        if (typeof document.cancelFullScreen !== 'undefined') {\n            fullscreen.supportsFullScreen = true;\n        } else {\n            // Check for fullscreen support by vendor prefix\n            for (var i = 0, il = browserPrefixes.length; i < il; i++) {\n                fullscreen.prefix = browserPrefixes[i];\n\n                if (typeof document[fullscreen.prefix + 'CancelFullScreen'] !== 'undefined') {\n                    fullscreen.supportsFullScreen = true;\n                    break;\n                }\n                // Special case for MS (when isn't it?)\n                else if (typeof document.msExitFullscreen !== 'undefined' && document.msFullscreenEnabled) {\n                    fullscreen.prefix = 'ms';\n                    fullscreen.supportsFullScreen = true;\n                    break;\n                }\n            }\n        }\n\n        // Update methods to do something useful\n        if (fullscreen.supportsFullScreen) {\n            // Yet again Microsoft awesomeness,\n            // Sometimes the prefix is 'ms', sometimes 'MS' to keep you on your toes\n            fullscreen.fullScreenEventName = (fullscreen.prefix == 'ms' ? 'MSFullscreenChange' : fullscreen.prefix + 'fullscreenchange');\n\n            fullscreen.isFullScreen = function (element) {\n                if (typeof element === 'undefined') {\n                    element = document.body;\n                }\n                switch (this.prefix) {\n                case '':\n                    return document.fullscreenElement == element;\n                case 'moz':\n                    return document.mozFullScreenElement == element;\n                default:\n                    return document[this.prefix + 'FullscreenElement'] == element;\n                }\n            };\n            fullscreen.requestFullScreen = function (element) {\n                if (typeof element === 'undefined') {\n                    element = document.body;\n                }\n                return (this.prefix === '') ? element.requestFullScreen() : element[this.prefix + (this.prefix == 'ms' ? 'RequestFullscreen' : 'RequestFullScreen')]();\n            };\n            fullscreen.cancelFullScreen = function () {\n                return (this.prefix === '') ? document.cancelFullScreen() : document[this.prefix + (this.prefix == 'ms' ? 'ExitFullscreen' : 'CancelFullScreen')]();\n            };\n            fullscreen.element = function () {\n                return (this.prefix === '') ? document.fullscreenElement : document[this.prefix + 'FullscreenElement'];\n            };\n        }\n\n        return fullscreen;\n    }\n\n    // Local storage\n    function _storage() {\n        var storage = {\n            supported: (function () {\n                try {\n                    return 'localStorage' in window && window.localStorage !== null;\n                } catch (e) {\n                    return false;\n                }\n            })()\n        };\n        return storage;\n    }\n\n    // Player instance\n    function Plyr(container) {\n        var player = this;\n        player.container = container;\n\n        // Captions functions\n        // Seek the manual caption time and update UI\n        function _seekManualCaptions(time) {\n            // If it's not video, or we're using textTracks, bail.\n            if (player.usingTextTracks || player.type !== 'video' || !player.supported.full) {\n                return;\n            }\n\n            // Reset subcount\n            player.subcount = 0;\n\n            // Check time is a number, if not use currentTime\n            // IE has a bug where currentTime doesn't go to 0\n            // https://twitter.com/Sam_Potts/status/573715746506731521\n            time = typeof time === 'number' ? time : player.media.currentTime;\n\n            while (_timecodeMax(player.captions[player.subcount][0]) < time.toFixed(1)) {\n                player.subcount++;\n                if (player.subcount > player.captions.length - 1) {\n                    player.subcount = player.captions.length - 1;\n                    break;\n                }\n            }\n\n            // Check if the next caption is in the current time range\n            if (player.media.currentTime.toFixed(1) >= _timecodeMin(player.captions[player.subcount][0]) &&\n                player.media.currentTime.toFixed(1) <= _timecodeMax(player.captions[player.subcount][0])) {\n                player.currentCaption = player.captions[player.subcount][1];\n\n                // Trim caption text\n                var content = player.currentCaption.trim();\n\n                // Render the caption (only if changed)\n                if (player.captionsContainer.innerHTML != content) {\n                    // Empty caption\n                    // Otherwise NVDA reads it twice\n                    player.captionsContainer.innerHTML = '';\n\n                    // Set new caption text\n                    player.captionsContainer.innerHTML = content;\n                }\n            } else {\n                player.captionsContainer.innerHTML = '';\n            }\n        }\n\n        // Display captions container and button (for initialization)\n        function _showCaptions() {\n            // If there's no caption toggle, bail\n            if (!player.buttons.captions) {\n                return;\n            }\n\n            _toggleClass(player.container, config.classes.captions.enabled, true);\n\n            if (config.captions.defaultActive) {\n                _toggleClass(player.container, config.classes.captions.active, true);\n                _toggleState(player.buttons.captions, true);\n            }\n        }\n\n        // Utilities for caption time codes\n        function _timecodeMin(tc) {\n            var tcpair = [];\n            tcpair = tc.split(' --> ');\n            return _subTcSecs(tcpair[0]);\n        }\n\n        function _timecodeMax(tc) {\n            var tcpair = [];\n            tcpair = tc.split(' --> ');\n            return _subTcSecs(tcpair[1]);\n        }\n\n        function _subTcSecs(tc) {\n            if (tc === null || tc === undefined) {\n                return 0;\n            } else {\n                var tc1 = [],\n                    tc2 = [],\n                    seconds;\n                tc1 = tc.split(',');\n                tc2 = tc1[0].split(':');\n                seconds = Math.floor(tc2[0] * 60 * 60) + Math.floor(tc2[1] * 60) + Math.floor(tc2[2]);\n                return seconds;\n            }\n        }\n\n        // Find all elements\n        function _getElements(selector) {\n            return player.container.querySelectorAll(selector);\n        }\n\n        // Find a single element\n        function _getElement(selector) {\n            return _getElements(selector)[0];\n        }\n\n        // Determine if we're in an iframe\n        function _inFrame() {\n            try {\n                return window.self !== window.top;\n            } catch (e) {\n                return true;\n            }\n        }\n\n        // Insert controls\n        function _injectControls() {\n            // Make a copy of the html\n            var html = config.html;\n\n            // Insert custom video controls\n            _log('Injecting custom controls.');\n\n            // If no controls are specified, create default\n            if (!html) {\n                html = _buildControls();\n            }\n\n            // Replace seek time instances\n            html = _replaceAll(html, '{seektime}', config.seekTime);\n\n            // Replace all id references with random numbers\n            html = _replaceAll(html, '{id}', Math.floor(Math.random() * (10000)));\n\n            // Inject into the container\n            player.container.insertAdjacentHTML('beforeend', html);\n\n            // Setup tooltips\n            if (config.tooltips) {\n                var labels = _getElements(config.selectors.labels);\n\n                for (var i = labels.length - 1; i >= 0; i--) {\n                    var label = labels[i];\n\n                    _toggleClass(label, config.classes.hidden, false);\n                    _toggleClass(label, config.classes.tooltip, true);\n                }\n            }\n        }\n\n        // Find the UI controls and store references\n        function _findElements() {\n            try {\n                player.controls = _getElement(config.selectors.controls);\n\n                // Buttons\n                player.buttons = {};\n                player.buttons.seek = _getElement(config.selectors.buttons.seek);\n                player.buttons.play = _getElement(config.selectors.buttons.play);\n                player.buttons.pause = _getElement(config.selectors.buttons.pause);\n                player.buttons.restart = _getElement(config.selectors.buttons.restart);\n                player.buttons.rewind = _getElement(config.selectors.buttons.rewind);\n                player.buttons.forward = _getElement(config.selectors.buttons.forward);\n                player.buttons.fullscreen = _getElement(config.selectors.buttons.fullscreen);\n\n                // Inputs\n                player.buttons.mute = _getElement(config.selectors.buttons.mute);\n                player.buttons.captions = _getElement(config.selectors.buttons.captions);\n                player.checkboxes = _getElements('[type=\"checkbox\"]');\n\n                // Progress\n                player.progress = {};\n                player.progress.container = _getElement(config.selectors.progress.container);\n\n                // Progress - Buffering\n                player.progress.buffer = {};\n                player.progress.buffer.bar = _getElement(config.selectors.progress.buffer);\n                player.progress.buffer.text = player.progress.buffer.bar && player.progress.buffer.bar.getElementsByTagName('span')[0];\n\n                // Progress - Played\n                player.progress.played = {};\n                player.progress.played.bar = _getElement(config.selectors.progress.played);\n                player.progress.played.text = player.progress.played.bar && player.progress.played.bar.getElementsByTagName('span')[0];\n\n                // Volume\n                player.volume = _getElement(config.selectors.buttons.volume);\n\n                // Timing\n                player.duration = _getElement(config.selectors.duration);\n                player.currentTime = _getElement(config.selectors.currentTime);\n                player.seekTime = _getElements(config.selectors.seekTime);\n\n                return true;\n            } catch (e) {\n                _log('It looks like there\\'s a problem with your controls html. Bailing.', true);\n\n                // Restore native video controls\n                player.media.setAttribute('controls', '');\n\n                return false;\n            }\n        }\n\n        // Setup aria attribute for play\n        function _setupPlayAria() {\n            // If there's no play button, bail\n            if (!player.buttons.play) {\n                return;\n            }\n\n            // Find the current text\n            var label = player.buttons.play.innerText || config.i18n.play;\n\n            // If there's a media title set, use that for the label\n            if (typeof (config.title) !== 'undefined' && config.title.length) {\n                label += ', ' + config.title;\n            }\n\n            player.buttons.play.setAttribute('aria-label', label);\n        }\n\n        // Setup media\n        function _setupMedia() {\n            // If there's no media, bail\n            if (!player.media) {\n                _log('No audio or video element found!', true);\n                return false;\n            }\n\n            if (player.supported.full) {\n                // Remove native video controls\n                player.media.removeAttribute('controls');\n\n                // Add type class\n                _toggleClass(player.container, config.classes.type.replace('{0}', player.type), true);\n\n                // If there's no autoplay attribute, assume the video is stopped and add state class\n                _toggleClass(player.container, config.classes.stopped, (player.media.getAttribute('autoplay') === null));\n\n                // Add iOS class\n                if (player.browser.ios) {\n                    _toggleClass(player.container, 'ios', true);\n                }\n\n                // Inject the player wrapper\n                if (player.type === 'video') {\n                    // Create the wrapper div\n                    var wrapper = document.createElement('div');\n                    wrapper.setAttribute('class', config.classes.videoWrapper);\n\n                    // Wrap the video in a container\n                    _wrap(player.media, wrapper);\n\n                    // Cache the container\n                    player.videoContainer = wrapper;\n                }\n            }\n\n            // YouTube\n            if (player.type == 'youtube') {\n                _setupYouTube(player.media.getAttribute('data-video-id'));\n            }\n\n            // Autoplay\n            if (player.media.getAttribute('autoplay') !== null) {\n                _play();\n            }\n        }\n\n        // Setup YouTube\n        function _setupYouTube(id) {\n            // Remove old containers\n            var containers = _getElements('[id^=\"youtube\"]');\n            for (var i = containers.length - 1; i >= 0; i--) {\n                _remove(containers[i]);\n            }\n\n            // Create the YouTube container\n            var container = document.createElement('div');\n            container.setAttribute('id', 'youtube-' + Math.floor(Math.random() * (10000)));\n            player.media.appendChild(container);\n\n            // Add embed class for responsive\n            _toggleClass(player.media, config.classes.videoWrapper, true);\n            _toggleClass(player.media, config.classes.embedWrapper, true);\n\n            if (typeof YT === 'object') {\n                _YTReady(id, container);\n            } else {\n                // Load the API\n                _injectScript('https://www.youtube.com/iframe_api');\n\n                // Add callback to queue\n                callbacks.youtube.push(function () {\n                    _YTReady(id, container);\n                });\n\n                // Setup callback for the API\n                window.onYouTubeIframeAPIReady = function () {\n                    for (var i = callbacks.youtube.length - 1; i >= 0; i--) {\n                        // Fire callback\n                        callbacks.youtube[i]();\n\n                        // Remove from queue\n                        callbacks.youtube.splice(i, 1);\n                    }\n                };\n            }\n        }\n\n        // Handle API ready\n        function _YTReady(id, container) {\n            _log('YouTube API Ready');\n\n            // Setup timers object\n            // We have to poll YouTube for updates\n            if (!('timer' in player)) {\n                player.timer = {};\n            }\n\n            // Setup instance\n            // https://developers.google.com/youtube/iframe_api_reference\n            player.embed = new YT.Player(container.id, {\n                videoId: id,\n                playerVars: {\n                    autoplay: 0,\n                    controls: (player.supported.full ? 0 : 1),\n                    rel: 0,\n                    showinfo: 0,\n                    iv_load_policy: 3,\n                    cc_load_policy: (config.captions.defaultActive ? 1 : 0),\n                    cc_lang_pref: 'en',\n                    wmode: 'transparent',\n                    modestbranding: 1,\n                    disablekb: 1\n                },\n                events: {\n                    'onReady': function (event) {\n                        // Get the instance\n                        var instance = event.target;\n\n                        // Create a faux HTML5 API using the YouTube API\n                        player.media.play = function () {\n                            instance.playVideo();\n                        };\n                        player.media.pause = function () {\n                            instance.pauseVideo();\n                        };\n                        player.media.stop = function () {\n                            instance.stopVideo();\n                        };\n                        player.media.duration = instance.getDuration();\n                        player.media.paused = true;\n                        player.media.currentTime = instance.getCurrentTime();\n                        player.media.muted = instance.isMuted();\n\n                        // Trigger timeupdate\n                        _triggerEvent(player.media, 'timeupdate');\n\n                        // Reset timer\n                        window.clearInterval(player.timer.buffering);\n\n                        // Setup buffering\n                        player.timer.buffering = window.setInterval(function () {\n                            // Get loaded % from YouTube\n                            player.media.buffered = instance.getVideoLoadedFraction();\n\n                            // Trigger progress\n                            _triggerEvent(player.media, 'progress');\n\n                            // Bail if we're at 100%\n                            if (player.media.buffered === 1) {\n                                window.clearInterval(player.timer.buffering);\n                            }\n                        }, 200);\n\n                        if (player.supported.full) {\n                            // Only setup controls once\n                            if (!player.container.querySelectorAll(config.selectors.controls).length) {\n                                _setupInterface();\n                            }\n\n                            // Display duration if available\n                            if (config.displayDuration) {\n                                _displayDuration();\n                            }\n                        }\n                    },\n                    'onStateChange': function (event) {\n                        // Get the instance\n                        var instance = event.target;\n\n                        // Reset timer\n                        window.clearInterval(player.timer.playing);\n\n                        // Handle events\n                        // -1   Unstarted\n                        // 0    Ended\n                        // 1    Playing\n                        // 2    Paused\n                        // 3    Buffering\n                        // 5    Video cued\n                        switch (event.data) {\n                        case 0:\n                            player.media.paused = true;\n                            _triggerEvent(player.media, 'ended');\n                            break;\n\n                        case 1:\n                            player.media.paused = false;\n                            _triggerEvent(player.media, 'play');\n\n                            // Poll to get playback progress\n                            player.timer.playing = window.setInterval(function () {\n                                // Set the current time\n                                player.media.currentTime = instance.getCurrentTime();\n\n                                // Trigger timeupdate\n                                _triggerEvent(player.media, 'timeupdate');\n                            }, 200);\n\n                            break;\n\n                        case 2:\n                            player.media.paused = true;\n                            _triggerEvent(player.media, 'pause');\n                        }\n                    }\n                }\n            });\n        }\n\n        // Setup captions\n        function _setupCaptions() {\n            if (player.type === 'video') {\n                // Inject the container\n                player.videoContainer.insertAdjacentHTML('afterbegin', '<div class=\"' + config.selectors.captions.replace('.', '') + '\"><span></span></div>');\n\n                // Cache selector\n                player.captionsContainer = _getElement(config.selectors.captions).querySelector('span');\n\n                // Determine if HTML5 textTracks is supported\n                player.usingTextTracks = false;\n                if (player.media.textTracks) {\n                    player.usingTextTracks = true;\n                }\n\n                // Get URL of caption file if exists\n                var captionSrc = '',\n                    kind,\n                    children = player.media.childNodes;\n\n                for (var i = 0; i < children.length; i++) {\n                    if (children[i].nodeName.toLowerCase() === 'track') {\n                        kind = children[i].kind;\n                        if (kind === 'captions' || kind === 'subtitles') {\n                            captionSrc = children[i].getAttribute('src');\n                        }\n                    }\n                }\n\n                // Record if caption file exists or not\n                player.captionExists = true;\n                if (captionSrc === '') {\n                    player.captionExists = false;\n                    _log('No caption track found.');\n                } else {\n                    _log('Caption track found; URI: ' + captionSrc);\n                }\n\n                // If no caption file exists, hide container for caption text\n                if (!player.captionExists) {\n                    _toggleClass(player.container, config.classes.captions.enabled);\n                }\n                // If caption file exists, process captions\n                else {\n                    // Turn off native caption rendering to avoid double captions\n                    // This doesn't seem to work in Safari 7+, so the <track> elements are removed from the dom below\n                    var tracks = player.media.textTracks;\n                    for (var x = 0; x < tracks.length; x++) {\n                        tracks[x].mode = 'hidden';\n                    }\n\n                    // Enable UI\n                    _showCaptions(player);\n\n                    // Disable unsupported browsers than report false positive\n                    if ((player.browser.name === 'IE' && player.browser.version >= 10) ||\n                        (player.browser.name === 'Firefox' && player.browser.version >= 31) ||\n                        (player.browser.name === 'Chrome' && player.browser.version >= 43) ||\n                        (player.browser.name === 'Safari' && player.browser.version >= 7)) {\n                        // Debugging\n                        _log('Detected unsupported browser for HTML5 captions. Using fallback.');\n\n                        // Set to false so skips to 'manual' captioning\n                        player.usingTextTracks = false;\n                    }\n\n                    // Rendering caption tracks\n                    // Native support required - http://caniuse.com/webvtt\n                    if (player.usingTextTracks) {\n                        _log('TextTracks supported.');\n\n                        for (var y = 0; y < tracks.length; y++) {\n                            var track = tracks[y];\n\n                            if (track.kind === 'captions' || track.kind === 'subtitles') {\n                                _on(track, 'cuechange', function () {\n                                    // Clear container\n                                    player.captionsContainer.innerHTML = '';\n\n                                    // Display a cue, if there is one\n                                    if (this.activeCues[0] && this.activeCues[0].hasOwnProperty('text')) {\n                                        player.captionsContainer.appendChild(this.activeCues[0].getCueAsHTML().trim());\n                                    }\n                                });\n                            }\n                        }\n                    }\n                    // Caption tracks not natively supported\n                    else {\n                        _log('TextTracks not supported so rendering captions manually.');\n\n                        // Render captions from array at appropriate time\n                        player.currentCaption = '';\n                        player.captions = [];\n\n                        if (captionSrc !== '') {\n                            // Create XMLHttpRequest Object\n                            var xhr = new XMLHttpRequest();\n\n                            xhr.onreadystatechange = function () {\n                                if (xhr.readyState === 4) {\n                                    if (xhr.status === 200) {\n                                        var records = [],\n                                            record,\n                                            req = xhr.responseText;\n\n                                        records = req.split('\\n\\n');\n\n                                        for (var r = 0; r < records.length; r++) {\n                                            record = records[r];\n                                            player.captions[r] = [];\n                                            player.captions[r] = record.split('\\n');\n                                        }\n\n                                        // Remove first element ('VTT')\n                                        player.captions.shift();\n\n                                        _log('Successfully loaded the caption file via AJAX.');\n                                    } else {\n                                        _log('There was a problem loading the caption file via AJAX.', true);\n                                    }\n                                }\n                            };\n\n                            xhr.open('get', captionSrc, true);\n\n                            xhr.send();\n                        }\n                    }\n\n                    // If Safari 7+, removing track from DOM [see 'turn off native caption rendering' above]\n                    if (player.browser.name === 'Safari' && player.browser.version >= 7) {\n                        _log('Safari 7+ detected; removing track from DOM.');\n\n                        // Find all <track> elements\n                        tracks = player.media.getElementsByTagName('track');\n\n                        // Loop through and remove one by one\n                        for (var t = 0; t < tracks.length; t++) {\n                            player.media.removeChild(tracks[t]);\n                        }\n                    }\n                }\n            }\n        }\n\n        // Setup fullscreen\n        function _setupFullscreen() {\n            if (player.type != 'audio' && config.fullscreen.enabled) {\n                // Check for native support\n                var nativeSupport = fullscreen.supportsFullScreen;\n\n                if (nativeSupport || (config.fullscreen.fallback && !_inFrame())) {\n                    _log((nativeSupport ? 'Native' : 'Fallback') + ' fullscreen enabled.');\n\n                    // Add styling hook\n                    _toggleClass(player.container, config.classes.fullscreen.enabled, true);\n                } else {\n                    _log('Fullscreen not supported and fallback disabled.');\n                }\n\n                // Toggle state\n                _toggleState(player.buttons.fullscreen, false);\n\n                // Set control hide class hook\n                if (config.fullscreen.hideControls) {\n                    _toggleClass(player.container, config.classes.fullscreen.hideControls, true);\n                }\n            }\n        }\n\n        // Play media\n        function _play() {\n            player.media.play();\n        }\n\n        // Pause media\n        function _pause() {\n            player.media.pause();\n        }\n\n        // Toggle playback\n        function _togglePlay(toggle) {\n            // Play\n            if (toggle === true) {\n                _play();\n            }\n            // Pause\n            else if (toggle === false) {\n                _pause();\n            }\n            // True toggle\n            else {\n                player.media[player.media.paused ? 'play' : 'pause']();\n            }\n        }\n\n        // Rewind\n        function _rewind(seekTime) {\n            // Use default if needed\n            if (typeof seekTime !== 'number') {\n                seekTime = config.seekTime;\n            }\n            _seek(player.media.currentTime - seekTime);\n        }\n\n        // Fast forward\n        function _forward(seekTime) {\n            // Use default if needed\n            if (typeof seekTime !== 'number') {\n                seekTime = config.seekTime;\n            }\n            _seek(player.media.currentTime + seekTime);\n        }\n\n        // Seek to time\n        // The input parameter can be an event or a number\n        function _seek(input) {\n            var targetTime = 0,\n                paused = player.media.paused;\n\n            // Explicit position\n            if (typeof input === 'number') {\n                targetTime = input;\n            }\n            // Event\n            else if (typeof input === 'object' && (input.type === 'input' || input.type === 'change')) {\n                // It's the seek slider\n                // Seek to the selected time\n                targetTime = ((input.target.value / input.target.max) * player.media.duration);\n            }\n\n            // Normalise targetTime\n            if (targetTime < 0) {\n                targetTime = 0;\n            } else if (targetTime > player.media.duration) {\n                targetTime = player.media.duration;\n            }\n\n            // Set the current time\n            // Try/catch incase the media isn't set and we're calling seek() from source() and IE moans\n            try {\n                player.media.currentTime = targetTime.toFixed(1);\n            } catch (e) {}\n\n            // YouTube\n            if (player.type == 'youtube') {\n                player.embed.seekTo(targetTime);\n\n                if (paused) {\n                    _pause();\n                }\n\n                // Trigger timeupdate\n                _triggerEvent(player.media, 'timeupdate');\n            }\n\n            // Logging\n            _log('Seeking to ' + player.media.currentTime + ' seconds');\n\n            // Special handling for 'manual' captions\n            _seekManualCaptions(targetTime);\n        }\n\n        // Check playing state\n        function _checkPlaying() {\n            _toggleClass(player.container, config.classes.playing, !player.media.paused);\n            _toggleClass(player.container, config.classes.stopped, player.media.paused);\n        }\n\n        // Toggle fullscreen\n        function _toggleFullscreen(event) {\n            // Check for native support\n            var nativeSupport = fullscreen.supportsFullScreen;\n\n            // If it's a fullscreen change event, it's probably a native close\n            if (event && event.type === fullscreen.fullScreenEventName) {\n                player.isFullscreen = fullscreen.isFullScreen(player.container);\n            }\n            // If there's native support, use it\n            else if (nativeSupport) {\n                // Request fullscreen\n                if (!fullscreen.isFullScreen(player.container)) {\n                    fullscreen.requestFullScreen(player.container);\n                }\n                // Bail from fullscreen\n                else {\n                    fullscreen.cancelFullScreen();\n                }\n\n                // Check if we're actually full screen (it could fail)\n                player.isFullscreen = fullscreen.isFullScreen(player.container);\n            } else {\n                // Otherwise, it's a simple toggle\n                player.isFullscreen = !player.isFullscreen;\n\n                // Bind/unbind escape key\n                if (player.isFullscreen) {\n                    _on(document, 'keyup', _handleEscapeFullscreen);\n                    document.body.style.overflow = 'hidden';\n                } else {\n                    _off(document, 'keyup', _handleEscapeFullscreen);\n                    document.body.style.overflow = '';\n                }\n            }\n\n            // Set class hook\n            _toggleClass(player.container, config.classes.fullscreen.active, player.isFullscreen);\n\n            // Set button state\n            _toggleState(player.buttons.fullscreen, player.isFullscreen);\n\n            // Toggle controls visibility based on mouse movement and location\n            var hoverTimer, isMouseOver = false;\n\n            // Show the player controls\n            function _showControls() {\n                // Set shown class\n                _toggleClass(player.container, config.classes.hover, true);\n\n                // Clear timer every movement\n                window.clearTimeout(hoverTimer);\n\n                // If the mouse is not over the controls, set a timeout to hide them\n                if (!isMouseOver) {\n                    hoverTimer = window.setTimeout(function () {\n                        _toggleClass(player.container, config.classes.hover, false);\n                    }, 2000);\n                }\n            }\n\n            // Check mouse is over the controls\n            function _setMouseOver(event) {\n                isMouseOver = (event.type === 'mouseenter');\n            }\n\n            if (config.fullscreen.hideControls) {\n                // Hide on entering full screen\n                _toggleClass(player.controls, config.classes.hover, false);\n\n                // Keep an eye on the mouse location in relation to controls\n                _toggleHandler(player.controls, 'mouseenter mouseleave', _setMouseOver, player.isFullscreen);\n\n                // Show the controls on mouse move\n                _toggleHandler(player.container, 'mousemove', _showControls, player.isFullscreen);\n            }\n        }\n\n        // Bail from faux-fullscreen\n        function _handleEscapeFullscreen(event) {\n            // If it's a keypress and not escape, bail\n            if ((event.which || event.charCode || event.keyCode) === 27 && player.isFullscreen) {\n                _toggleFullscreen();\n            }\n        }\n\n        // Set volume\n        function _setVolume(volume) {\n            // Use default if no value specified\n            if (typeof volume === 'undefined') {\n                if (config.storage.enabled && _storage().supported) {\n                    volume = window.localStorage[config.storage.key] || config.volume;\n                } else {\n                    volume = config.volume;\n                }\n            }\n\n            // Maximum is 10\n            if (volume > 10) {\n                volume = 10;\n            }\n            // Minimum is 0\n            if (volume < 0) {\n                volume = 0;\n            }\n\n            // Set the player volume\n            player.media.volume = parseFloat(volume / 10);\n\n            // YouTube\n            if (player.type == 'youtube') {\n                player.embed.setVolume(player.media.volume * 100);\n\n                // Trigger timeupdate\n                _triggerEvent(player.media, 'volumechange');\n            }\n\n            // Toggle muted state\n            if (player.media.muted && volume > 0) {\n                _toggleMute();\n            }\n        }\n\n        // Mute\n        function _toggleMute(muted) {\n            // If the method is called without parameter, toggle based on current value\n            if (typeof muted !== 'boolean') {\n                muted = !player.media.muted;\n            }\n\n            // Set button state\n            _toggleState(player.buttons.mute, muted);\n\n            // Set mute on the player\n            player.media.muted = muted;\n\n            // YouTube\n            if (player.type === 'youtube') {\n                player.embed[player.media.muted ? 'mute' : 'unMute']();\n\n                // Trigger timeupdate\n                _triggerEvent(player.media, 'volumechange');\n            }\n        }\n\n        // Update volume UI and storage\n        function _updateVolume() {\n            // Get the current volume\n            var volume = player.media.muted ? 0 : (player.media.volume * 10);\n\n            // Update the <input type=\"range\"> if present\n            if (player.supported.full && player.volume) {\n                player.volume.value = volume;\n            }\n\n            // Store the volume in storage\n            if (config.storage.enabled && _storage().supported) {\n                window.localStorage.setItem(config.storage.key, volume);\n            }\n\n            // Toggle class if muted\n            _toggleClass(player.container, config.classes.muted, (volume === 0));\n\n            // Update checkbox for mute state\n            if (player.supported.full && player.buttons.mute) {\n                _toggleState(player.buttons.mute, (volume === 0));\n            }\n        }\n\n        // Toggle captions\n        function _toggleCaptions(show) {\n            // If there's no full support, or there's no caption toggle\n            if (!player.supported.full || !player.buttons.captions) {\n                return;\n            }\n\n            // If the method is called without parameter, toggle based on current value\n            if (typeof show !== 'boolean') {\n                show = (player.container.className.indexOf(config.classes.captions.active) === -1);\n            }\n\n            // Toggle state\n            _toggleState(player.buttons.captions, show);\n\n            // Add class hook\n            _toggleClass(player.container, config.classes.captions.active, show);\n        }\n\n        // Check if media is loading\n        function _checkLoading(event) {\n            var loading = (event.type === 'waiting');\n\n            // Clear timer\n            clearTimeout(player.loadingTimer);\n\n            // Timer to prevent flicker when seeking\n            player.loadingTimer = setTimeout(function () {\n                _toggleClass(player.container, config.classes.loading, loading);\n            }, (loading ? 250 : 0));\n        }\n\n        // Update <progress> elements\n        function _updateProgress(event) {\n            var progress = player.progress.played.bar,\n                text = player.progress.played.text,\n                value = 0;\n\n            if (event) {\n                switch (event.type) {\n                    // Video playing\n                case 'timeupdate':\n                case 'seeking':\n                    value = _getPercentage(player.media.currentTime, player.media.duration);\n\n                    // Set seek range value only if it's a 'natural' time event\n                    if (event.type == 'timeupdate' && player.buttons.seek) {\n                        player.buttons.seek.value = value;\n                    }\n\n                    break;\n\n                    // Events from seek range\n                case 'change':\n                case 'input':\n                    value = event.target.value;\n                    break;\n\n\n                    // Check buffer status\n                case 'playing':\n                case 'progress':\n                    progress = player.progress.buffer.bar;\n                    text = player.progress.buffer.text;\n                    value = (function () {\n                        var buffered = player.media.buffered;\n\n                        // HTML5\n                        if (buffered && buffered.length) {\n                            return _getPercentage(buffered.end(0), player.media.duration);\n                        }\n                        // YouTube returns between 0 and 1\n                        else if (typeof buffered === 'number') {\n                            return (buffered * 100);\n                        }\n\n                        return 0;\n                    })();\n                }\n            }\n\n            // Set values\n            if (progress) {\n                progress.value = value;\n            }\n            if (text) {\n                text.innerHTML = value;\n            }\n        }\n\n        // Update the displayed time\n        function _updateTimeDisplay(time, element) {\n            // Bail if there's no duration display\n            if (!element) {\n                return;\n            }\n\n            player.secs = parseInt(time % 60);\n            player.mins = parseInt((time / 60) % 60);\n            player.hours = parseInt(((time / 60) / 60) % 60);\n\n            // Do we need to display hours?\n            var displayHours = (parseInt(((player.media.duration / 60) / 60) % 60) > 0);\n\n            // Ensure it's two digits. For example, 03 rather than 3.\n            player.secs = ('0' + player.secs).slice(-2);\n            player.mins = ('0' + player.mins).slice(-2);\n\n            // Render\n            element.innerHTML = (displayHours ? player.hours + ':' : '') + player.mins + ':' + player.secs;\n        }\n\n        // Show the duration on metadataloaded\n        function _displayDuration() {\n            var duration = player.media.duration || 0;\n\n            // If there's only one time display, display duration there\n            if (!player.duration && config.displayDuration && player.media.paused) {\n                _updateTimeDisplay(duration, player.currentTime);\n            }\n\n            // If there's a duration element, update content\n            if (player.duration) {\n                _updateTimeDisplay(duration, player.duration);\n            }\n        }\n\n        // Handle time change event\n        function _timeUpdate(event) {\n            // Duration\n            _updateTimeDisplay(player.media.currentTime, player.currentTime);\n\n            // Playing progress\n            _updateProgress(event);\n        }\n\n        // Remove <source> children and src attribute\n        function _removeSources() {\n            // Find child <source> elements\n            var sources = player.media.querySelectorAll('source');\n\n            // Remove each\n            for (var i = sources.length - 1; i >= 0; i--) {\n                _remove(sources[i]);\n            }\n\n            // Remove src attribute\n            player.media.removeAttribute('src');\n        }\n\n        // Inject a source\n        function _addSource(attributes) {\n            if (attributes.src) {\n                // Create a new <source>\n                var element = document.createElement('source');\n\n                // Set all passed attributes\n                _setAttributes(element, attributes);\n\n                // Inject the new source\n                _prependChild(player.media, element);\n            }\n        }\n\n        // Update source\n        // Sources are not checked for support so be careful\n        function _parseSource(sources) {\n            // YouTube\n            if (player.type === 'youtube' && typeof sources === 'string') {\n                // Destroy YouTube instance\n                player.embed.destroy();\n\n                // Re-setup YouTube\n                // We don't use loadVideoBy[x] here since it has issues\n                _setupYouTube(sources);\n\n                // Update times\n                _timeUpdate();\n\n                // Bail\n                return;\n            }\n\n            // Pause playback (webkit freaks out)\n            _pause();\n\n            // Restart\n            _seek();\n\n            // Remove current sources\n            _removeSources();\n\n            // If a single source is passed\n            // .source('path/to/video.mp4')\n            if (typeof sources === 'string') {\n                _addSource({\n                    src: sources\n                });\n            }\n\n            // An array of source objects\n            // Check if a source exists, use that or set the 'src' attribute?\n            // .source([{ src: 'path/to/video.mp4', type: 'video/mp4' },{ src: 'path/to/video.webm', type: 'video/webm' }])\n            else if (sources.constructor === Array) {\n                for (var index in sources) {\n                    _addSource(sources[index]);\n                }\n            }\n\n            if (player.supported.full) {\n                // Reset time display\n                _timeUpdate();\n\n                // Update the UI\n                _checkPlaying();\n            }\n\n            // Re-load sources\n            player.media.load();\n\n            // Play if autoplay attribute is present\n            if (player.media.getAttribute('autoplay') !== null) {\n                _play();\n            }\n        }\n\n        // Update poster\n        function _updatePoster(source) {\n            if (player.type === 'video') {\n                player.media.setAttribute('poster', source);\n            }\n        }\n\n        // Listen for events\n        function _listeners() {\n            // IE doesn't support input event, so we fallback to change\n            var inputEvent = (player.browser.name == 'IE' ? 'change' : 'input');\n\n            // Detect tab focus\n            function checkFocus() {\n                var focused = document.activeElement;\n                if (!focused || focused == document.body) {\n                    focused = null;\n                } else if (document.querySelector) {\n                    focused = document.querySelector(':focus');\n                }\n                for (var button in player.buttons) {\n                    var element = player.buttons[button];\n\n                    _toggleClass(element, 'tab-focus', (element === focused));\n                }\n            }\n            _on(window, 'keyup', function (event) {\n                var code = (event.keyCode ? event.keyCode : event.which);\n\n                if (code == 9) {\n                    checkFocus();\n                }\n            });\n            for (var button in player.buttons) {\n                var element = player.buttons[button];\n\n                _on(element, 'blur', function () {\n                    _toggleClass(element, 'tab-focus', false);\n                });\n            }\n\n            // Play\n            _on(player.buttons.play, 'click', function () {\n                _play();\n                setTimeout(function () {\n                    player.buttons.pause.focus();\n                }, 100);\n            });\n\n            // Pause\n            _on(player.buttons.pause, 'click', function () {\n                _pause();\n                setTimeout(function () {\n                    player.buttons.play.focus();\n                }, 100);\n            });\n\n            // Restart\n            _on(player.buttons.restart, 'click', _seek);\n\n            // Rewind\n            _on(player.buttons.rewind, 'click', _rewind);\n\n            // Fast forward\n            _on(player.buttons.forward, 'click', _forward);\n\n            // Seek\n            _on(player.buttons.seek, inputEvent, _seek);\n\n            // Set volume\n            _on(player.volume, inputEvent, function () {\n                _setVolume(this.value);\n            });\n\n            // Mute\n            _on(player.buttons.mute, 'click', _toggleMute);\n\n            // Fullscreen\n            _on(player.buttons.fullscreen, 'click', _toggleFullscreen);\n\n            // Handle user exiting fullscreen by escaping etc\n            if (fullscreen.supportsFullScreen) {\n                _on(document, fullscreen.fullScreenEventName, _toggleFullscreen);\n            }\n\n            // Time change on media\n            _on(player.media, 'timeupdate seeking', _timeUpdate);\n\n            // Update manual captions\n            _on(player.media, 'timeupdate', _seekManualCaptions);\n\n            // Display duration\n            _on(player.media, 'loadedmetadata', _displayDuration);\n\n            // Captions\n            _on(player.buttons.captions, 'click', _toggleCaptions);\n\n            // Handle the media finishing\n            _on(player.media, 'ended', function () {\n                // Clear\n                if (player.type === 'video') {\n                    player.captionsContainer.innerHTML = '';\n                }\n\n                // Reset UI\n                _checkPlaying();\n            });\n\n            // Check for buffer progress\n            _on(player.media, 'progress playing', _updateProgress);\n\n            // Handle native mute\n            _on(player.media, 'volumechange', _updateVolume);\n\n            // Handle native play/pause\n            _on(player.media, 'play pause', _checkPlaying);\n\n            // Loading\n            _on(player.media, 'waiting canplay seeked', _checkLoading);\n\n            // Click video\n            if (player.type === 'video' && config.click) {\n                _on(player.videoContainer, 'click', function () {\n                    if (player.media.paused) {\n                        _triggerEvent(player.buttons.play, 'click');\n                    } else if (player.media.ended) {\n                        _seek();\n                        _triggerEvent(player.buttons.play, 'click');\n                    } else {\n                        _triggerEvent(player.buttons.pause, 'click');\n                    }\n                });\n            }\n        }\n\n        // Destroy an instance\n        // Event listeners are removed when elements are removed\n        // http://stackoverflow.com/questions/12528049/if-a-dom-element-is-removed-are-its-listeners-also-removed-from-memory\n        function _destroy() {\n            // Bail if the element is not initialized\n            if (!player.init) {\n                return null;\n            }\n\n            // Reset container classname\n            player.container.setAttribute('class', config.selectors.container.replace('.', ''));\n\n            // Remove init flag\n            player.init = false;\n\n            // Remove controls\n            _remove(_getElement(config.selectors.controls));\n\n            // YouTube\n            if (player.type === 'youtube') {\n                player.embed.destroy();\n                return;\n            }\n\n            // If video, we need to remove some more\n            if (player.type === 'video') {\n                // Remove captions\n                _remove(_getElement(config.selectors.captions));\n\n                // Remove video wrapper\n                _unwrap(player.videoContainer);\n            }\n\n            // Restore native video controls\n            player.media.setAttribute('controls', '');\n\n            // Clone the media element to remove listeners\n            // http://stackoverflow.com/questions/19469881/javascript-remove-all-event-listeners-of-specific-type\n            var clone = player.media.cloneNode(true);\n            player.media.parentNode.replaceChild(clone, player.media);\n        }\n\n        // Setup a player\n        function _init() {\n            // Bail if the element is initialized\n            if (player.init) {\n                return null;\n            }\n\n            // Setup the fullscreen api\n            fullscreen = _fullscreen();\n\n            // Sniff out the browser\n            player.browser = _browserSniff();\n\n            // Get the media element\n            player.media = player.container.querySelectorAll('audio, video, div')[0];\n\n            // Set media type\n            var tagName = player.media.tagName.toLowerCase();\n            if (tagName === 'div') {\n                player.type = player.media.getAttribute('data-type');\n            } else {\n                player.type = tagName;\n            }\n\n            // Check for full support\n            player.supported = api.supported(player.type);\n\n            // If no native support, bail\n            if (!player.supported.basic) {\n                return false;\n            }\n\n            // Debug info\n            _log(player.browser.name + ' ' + player.browser.version);\n\n            // Setup media\n            _setupMedia();\n\n            // Setup interface\n            if (player.type == 'video' || player.type == 'audio') {\n                // Bail if no support\n                if (!player.supported.full) {\n                    // Successful setup\n                    player.init = true;\n\n                    // Don't inject controls if no full support\n                    return;\n                }\n\n                // Setup UI\n                _setupInterface();\n\n                // Display duration if available\n                if (config.displayDuration) {\n                    _displayDuration();\n                }\n\n                // Set up aria-label for Play button with the title option\n                _setupPlayAria();\n            }\n\n            // Successful setup\n            player.init = true;\n        }\n\n        function _setupInterface() {\n            // Inject custom controls\n            _injectControls();\n\n            // Find the elements\n            if (!_findElements()) {\n                return false;\n            }\n\n            // Captions\n            _setupCaptions();\n\n            // Set volume\n            _setVolume();\n            _updateVolume();\n\n            // Setup fullscreen\n            _setupFullscreen();\n\n            // Listeners\n            _listeners();\n        }\n\n        // Initialize instance\n        _init();\n\n        // If init failed, return an empty object\n        if (!player.init) {\n            return {};\n        }\n\n        return {\n            media: player.media,\n            play: _play,\n            pause: _pause,\n            restart: _seek,\n            rewind: _rewind,\n            forward: _forward,\n            seek: _seek,\n            source: _parseSource,\n            poster: _updatePoster,\n            setVolume: _setVolume,\n            togglePlay: _togglePlay,\n            toggleMute: _toggleMute,\n            toggleCaptions: _toggleCaptions,\n            toggleFullscreen: _toggleFullscreen,\n            isFullscreen: function () {\n                return player.isFullscreen || false;\n            },\n            support: function (mimeType) {\n                return _supportMime(player, mimeType);\n            },\n            destroy: _destroy,\n            restore: _init\n        };\n    }\n\n    // Check for support\n    api.supported = function (type) {\n        var browser = _browserSniff(),\n            oldIE = (browser.name === 'IE' && browser.version <= 9),\n            iPhone = /iPhone|iPod/i.test(navigator.userAgent),\n            audio = !!document.createElement('audio').canPlayType,\n            video = !!document.createElement('video').canPlayType,\n            basic, full;\n\n        switch (type) {\n        case 'video':\n            basic = video;\n            full = (basic && (!oldIE && !iPhone));\n            break;\n\n        case 'audio':\n            basic = audio;\n            full = (basic && !oldIE);\n            break;\n\n        case 'youtube':\n            basic = true;\n            full = (!oldIE && !iPhone);\n            break;\n\n        default:\n            basic = (audio && video);\n            full = (basic && !oldIE);\n        }\n\n        return {\n            basic: basic,\n            full: full\n        };\n    };\n\n    // Expose setup function\n    api.setup = function (options) {\n        // Extend the default options with user specified\n        config = _extend(defaults, options);\n\n        // Bail if disabled or no basic support\n        // You may want to disable certain UAs etc\n        if (!config.enabled || !api.supported().basic) {\n            return false;\n        }\n\n        // Get the players\n        var elements = document.querySelectorAll(config.selectors.container),\n            players = [];\n\n        // Create a player instance for each element\n        for (var i = elements.length - 1; i >= 0; i--) {\n            // Get the current element\n            var element = elements[i];\n\n            // Setup a player instance and add to the element\n            if (typeof element.plyr === 'undefined') {\n                // Create new instance\n                var instance = new Plyr(element);\n\n                // Set plyr to false if setup failed\n                element.plyr = (Object.keys(instance).length ? instance : false);\n\n                // Callback\n                if (typeof config.onSetup === 'function') {\n                    config.onSetup.apply(element.plyr);\n                }\n            }\n\n            // Add to return array even if it's already setup\n            players.push(element.plyr);\n        }\n\n        return players;\n    };\n\n}(this.plyr = this.plyr || {}));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/prettyfile/bootstrap-prettyfile.js",
    "content": "/*\n * jQuery and Bootsrap3 Plugin prettyFile\n *\n * version 2.0, Jan 20th, 2014\n * by episage, sujin2f\n * Git repository : https://github.com/episage/bootstrap-3-pretty-file-upload\n */\n( function( $ ) {\n\t$.fn.extend({\n\t\tprettyFile: function( options ) {\n\t\t\tvar defaults = {\n\t\t\t\ttext : \"选择文件\"\n\t\t\t};\n\n\t\t\tvar options =  $.extend(defaults, options);\n\t\t\tvar plugin = this;\n\n\t\t\tfunction make_form( $el, text ) {\n\t\t\t\t$el.wrap('<div></div>');\n\n\t\t\t\t$el.hide();\n\t\t\t\t$el.after( '\\\n\t\t\t\t<div class=\"input-append input-group\"\">\\\n\t\t\t\t\t<span class=\"input-group-btn\">\\\n\t\t\t\t\t\t<button class=\"btn btn-white\" type=\"button\">' + text + '</button>\\\n\t\t\t\t\t</span>\\\n\t\t\t\t\t<input class=\"input-large form-control\" type=\"text\">\\\n\t\t\t\t</div>\\\n\t\t\t\t' );\n\n\t\t\t\treturn $el.parent();\n\t\t\t};\n\n\t\t\tfunction bind_change( $wrap, multiple ) {\n\t\t\t\t$wrap.find( 'input[type=\"file\"]' ).change(function () {\n\t\t\t\t\t// When original file input changes, get its value, show it in the fake input\n\t\t\t\t\tvar files = $( this )[0].files,\n\t\t\t\t\tinfo = '';\n\n\t\t\t\t\tif ( files.length == 0 )\n\t\t\t\t\t\treturn false;\n\n\t\t\t\t\tif ( !multiple || files.length == 1 ) {\n\t\t\t\t\t\tvar path = $( this ).val().split('\\\\');\n\t\t\t\t\t\tinfo = path[path.length - 1];\n\t\t\t\t\t} else if ( files.length > 1 ) {\n\t\t\t\t\t\t// Display number of selected files instead of filenames\n\t\t\t\t\t\tinfo = \"已选择了\" + files.length + ' 个文件';\n\t\t\t\t\t}\n\n\t\t\t\t\t$wrap.find('.input-append input').val( info );\n\t\t\t\t});\n\t\t\t};\n\n\t\t\tfunction bind_button( $wrap, multiple ) {\n\t\t\t\t$wrap.find( '.input-append' ).click( function( e ) {\n\t\t\t\t\te.preventDefault();\n\t\t\t\t\t$wrap.find( 'input[type=\"file\"]' ).click();\n\t\t\t\t});\n\t\t\t};\n\n\t\t\treturn plugin.each( function() {\n\t\t\t\t$this = $( this );\n\n\t\t\t\tif ( $this ) {\n\t\t\t\t\tvar multiple = $this.attr( 'multiple' );\n\n\t\t\t\t\t$wrap = make_form( $this, options.text );\n\t\t\t\t\tbind_change( $wrap, multiple );\n\t\t\t\t\tbind_button( $wrap );\n\t\t\t\t}\n\t\t\t});\n\t\t}\n\t});\n}( jQuery ));\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/rickshaw/vendor/d3.v3.js",
    "content": "d3=function(){function n(n){return null!=n&&!isNaN(n)}function t(n){return n.length}function e(n){for(var t=1;n*t%1;)t*=10;return t}function r(n,t){try{for(var e in t)Object.defineProperty(n.prototype,e,{value:t[e],enumerable:!1})}catch(r){n.prototype=t}}function u(){}function i(){}function o(n,t,e){return function(){var r=e.apply(t,arguments);return r===t?n:r}}function a(n,t){if(t in n)return t;t=t.charAt(0).toUpperCase()+t.substring(1);for(var e=0,r=Do.length;r>e;++e){var u=Do[e]+t;if(u in n)return u}}function c(){}function l(){}function s(n){function t(){for(var t,r=e,u=-1,i=r.length;++u<i;)(t=r[u].on)&&t.apply(this,arguments);return n}var e=[],r=new u;return t.on=function(t,u){var i,o=r.get(t);return arguments.length<2?o&&o.on:(o&&(o.on=null,e=e.slice(0,i=e.indexOf(o)).concat(e.slice(i+1)),r.remove(t)),u&&e.push(r.set(t,{on:u})),n)},t}function f(){mo.event.preventDefault()}function h(){for(var n,t=mo.event;n=t.sourceEvent;)t=n;return t}function g(n){for(var t=new l,e=0,r=arguments.length;++e<r;)t[arguments[e]]=s(t);return t.of=function(e,r){return function(u){try{var i=u.sourceEvent=mo.event;u.target=n,mo.event=u,t[u.type].apply(e,r)}finally{mo.event=i}}},t}function p(n){return Lo(n,Ro),n}function d(n){return\"function\"==typeof n?n:function(){return Ho(n,this)}}function v(n){return\"function\"==typeof n?n:function(){return Fo(n,this)}}function m(n,t){function e(){this.removeAttribute(n)}function r(){this.removeAttributeNS(n.space,n.local)}function u(){this.setAttribute(n,t)}function i(){this.setAttributeNS(n.space,n.local,t)}function o(){var e=t.apply(this,arguments);null==e?this.removeAttribute(n):this.setAttribute(n,e)}function a(){var e=t.apply(this,arguments);null==e?this.removeAttributeNS(n.space,n.local):this.setAttributeNS(n.space,n.local,e)}return n=mo.ns.qualify(n),null==t?n.local?r:e:\"function\"==typeof t?n.local?a:o:n.local?i:u}function y(n){return n.trim().replace(/\\s+/g,\" \")}function M(n){return new RegExp(\"(?:^|\\\\s+)\"+mo.requote(n)+\"(?:\\\\s+|$)\",\"g\")}function x(n,t){function e(){for(var e=-1;++e<u;)n[e](this,t)}function r(){for(var e=-1,r=t.apply(this,arguments);++e<u;)n[e](this,r)}n=n.trim().split(/\\s+/).map(b);var u=n.length;return\"function\"==typeof t?r:e}function b(n){var t=M(n);return function(e,r){if(u=e.classList)return r?u.add(n):u.remove(n);var u=e.getAttribute(\"class\")||\"\";r?(t.lastIndex=0,t.test(u)||e.setAttribute(\"class\",y(u+\" \"+n))):e.setAttribute(\"class\",y(u.replace(t,\" \")))}}function _(n,t,e){function r(){this.style.removeProperty(n)}function u(){this.style.setProperty(n,t,e)}function i(){var r=t.apply(this,arguments);null==r?this.style.removeProperty(n):this.style.setProperty(n,r,e)}return null==t?r:\"function\"==typeof t?i:u}function w(n,t){function e(){delete this[n]}function r(){this[n]=t}function u(){var e=t.apply(this,arguments);null==e?delete this[n]:this[n]=e}return null==t?e:\"function\"==typeof t?u:r}function S(n){return\"function\"==typeof n?n:(n=mo.ns.qualify(n)).local?function(){return xo.createElementNS(n.space,n.local)}:function(){return xo.createElementNS(this.namespaceURI,n)}}function E(n){return{__data__:n}}function k(n){return function(){return Oo(this,n)}}function A(n){return arguments.length||(n=mo.ascending),function(t,e){return t&&e?n(t.__data__,e.__data__):!t-!e}}function N(n,t){for(var e=0,r=n.length;r>e;e++)for(var u,i=n[e],o=0,a=i.length;a>o;o++)(u=i[o])&&t(u,o,e);return n}function T(n){return Lo(n,Io),n}function q(n){var t,e;return function(r,u,i){var o,a=n[i].update,c=a.length;for(i!=e&&(e=i,t=0),u>=t&&(t=u+1);!(o=a[t])&&++t<c;);return o}}function z(){var n=this.__transition__;n&&++n.active}function C(n,t,e){function r(){var t=this[o];t&&(this.removeEventListener(n,t,t.$),delete this[o])}function u(){var u=l(t,Mo(arguments));r.call(this),this.addEventListener(n,this[o]=u,u.$=e),u._=t}function i(){var t,e=new RegExp(\"^__on([^.]+)\"+mo.requote(n)+\"$\");for(var r in this)if(t=r.match(e)){var u=this[r];this.removeEventListener(t[1],u,u.$),delete this[r]}}var o=\"__on\"+n,a=n.indexOf(\".\"),l=D;a>0&&(n=n.substring(0,a));var s=Zo.get(n);return s&&(n=s,l=j),a?t?u:r:t?c:i}function D(n,t){return function(e){var r=mo.event;mo.event=e,t[0]=this.__data__;try{n.apply(this,t)}finally{mo.event=r}}}function j(n,t){var e=D(n,t);return function(n){var t=this,r=n.relatedTarget;r&&(r===t||8&r.compareDocumentPosition(t))||e.call(t,n)}}function L(){var n=\".dragsuppress-\"+ ++Xo,t=\"touchmove\"+n,e=\"selectstart\"+n,r=\"dragstart\"+n,u=\"click\"+n,i=mo.select(_o).on(t,f).on(e,f).on(r,f),o=bo.style,a=o[Vo];return o[Vo]=\"none\",function(t){function e(){i.on(u,null)}i.on(n,null),o[Vo]=a,t&&(i.on(u,function(){f(),e()},!0),setTimeout(e,0))}}function H(n,t){t.changedTouches&&(t=t.changedTouches[0]);var e=n.ownerSVGElement||n;if(e.createSVGPoint){var r=e.createSVGPoint();if(0>$o&&(_o.scrollX||_o.scrollY)){e=mo.select(\"body\").append(\"svg\").style({position:\"absolute\",top:0,left:0,margin:0,padding:0,border:\"none\"},\"important\");var u=e[0][0].getScreenCTM();$o=!(u.f||u.e),e.remove()}return $o?(r.x=t.pageX,r.y=t.pageY):(r.x=t.clientX,r.y=t.clientY),r=r.matrixTransform(n.getScreenCTM().inverse()),[r.x,r.y]}var i=n.getBoundingClientRect();return[t.clientX-i.left-n.clientLeft,t.clientY-i.top-n.clientTop]}function F(n){return n>0?1:0>n?-1:0}function P(n){return n>1?0:-1>n?Bo:Math.acos(n)}function O(n){return n>1?Jo:-1>n?-Jo:Math.asin(n)}function R(n){return((n=Math.exp(n))-1/n)/2}function Y(n){return((n=Math.exp(n))+1/n)/2}function I(n){return((n=Math.exp(2*n))-1)/(n+1)}function U(n){return(n=Math.sin(n/2))*n}function Z(){}function V(n,t,e){return new X(n,t,e)}function X(n,t,e){this.h=n,this.s=t,this.l=e}function $(n,t,e){function r(n){return n>360?n-=360:0>n&&(n+=360),60>n?i+(o-i)*n/60:180>n?o:240>n?i+(o-i)*(240-n)/60:i}function u(n){return Math.round(255*r(n))}var i,o;return n=isNaN(n)?0:(n%=360)<0?n+360:n,t=isNaN(t)?0:0>t?0:t>1?1:t,e=0>e?0:e>1?1:e,o=.5>=e?e*(1+t):e+t-e*t,i=2*e-o,ot(u(n+120),u(n),u(n-120))}function B(n,t,e){return new W(n,t,e)}function W(n,t,e){this.h=n,this.c=t,this.l=e}function J(n,t,e){return isNaN(n)&&(n=0),isNaN(t)&&(t=0),G(e,Math.cos(n*=Qo)*t,Math.sin(n)*t)}function G(n,t,e){return new K(n,t,e)}function K(n,t,e){this.l=n,this.a=t,this.b=e}function Q(n,t,e){var r=(n+16)/116,u=r+t/500,i=r-e/200;return u=tt(u)*sa,r=tt(r)*fa,i=tt(i)*ha,ot(rt(3.2404542*u-1.5371385*r-.4985314*i),rt(-.969266*u+1.8760108*r+.041556*i),rt(.0556434*u-.2040259*r+1.0572252*i))}function nt(n,t,e){return n>0?B(Math.atan2(e,t)*na,Math.sqrt(t*t+e*e),n):B(0/0,0/0,n)}function tt(n){return n>.206893034?n*n*n:(n-4/29)/7.787037}function et(n){return n>.008856?Math.pow(n,1/3):7.787037*n+4/29}function rt(n){return Math.round(255*(.00304>=n?12.92*n:1.055*Math.pow(n,1/2.4)-.055))}function ut(n){return ot(n>>16,255&n>>8,255&n)}function it(n){return ut(n)+\"\"}function ot(n,t,e){return new at(n,t,e)}function at(n,t,e){this.r=n,this.g=t,this.b=e}function ct(n){return 16>n?\"0\"+Math.max(0,n).toString(16):Math.min(255,n).toString(16)}function lt(n,t,e){var r,u,i,o=0,a=0,c=0;if(r=/([a-z]+)\\((.*)\\)/i.exec(n))switch(u=r[2].split(\",\"),r[1]){case\"hsl\":return e(parseFloat(u[0]),parseFloat(u[1])/100,parseFloat(u[2])/100);case\"rgb\":return t(gt(u[0]),gt(u[1]),gt(u[2]))}return(i=da.get(n))?t(i.r,i.g,i.b):(null!=n&&\"#\"===n.charAt(0)&&(4===n.length?(o=n.charAt(1),o+=o,a=n.charAt(2),a+=a,c=n.charAt(3),c+=c):7===n.length&&(o=n.substring(1,3),a=n.substring(3,5),c=n.substring(5,7)),o=parseInt(o,16),a=parseInt(a,16),c=parseInt(c,16)),t(o,a,c))}function st(n,t,e){var r,u,i=Math.min(n/=255,t/=255,e/=255),o=Math.max(n,t,e),a=o-i,c=(o+i)/2;return a?(u=.5>c?a/(o+i):a/(2-o-i),r=n==o?(t-e)/a+(e>t?6:0):t==o?(e-n)/a+2:(n-t)/a+4,r*=60):(r=0/0,u=c>0&&1>c?0:r),V(r,u,c)}function ft(n,t,e){n=ht(n),t=ht(t),e=ht(e);var r=et((.4124564*n+.3575761*t+.1804375*e)/sa),u=et((.2126729*n+.7151522*t+.072175*e)/fa),i=et((.0193339*n+.119192*t+.9503041*e)/ha);return G(116*u-16,500*(r-u),200*(u-i))}function ht(n){return(n/=255)<=.04045?n/12.92:Math.pow((n+.055)/1.055,2.4)}function gt(n){var t=parseFloat(n);return\"%\"===n.charAt(n.length-1)?Math.round(2.55*t):t}function pt(n){return\"function\"==typeof n?n:function(){return n}}function dt(n){return n}function vt(n){return function(t,e,r){return 2===arguments.length&&\"function\"==typeof e&&(r=e,e=null),mt(t,e,n,r)}}function mt(n,t,e,r){function u(){var n,t=c.status;if(!t&&c.responseText||t>=200&&300>t||304===t){try{n=e.call(i,c)}catch(r){return o.error.call(i,r),void 0}o.load.call(i,n)}else o.error.call(i,c)}var i={},o=mo.dispatch(\"beforesend\",\"progress\",\"load\",\"error\"),a={},c=new XMLHttpRequest,l=null;return!_o.XDomainRequest||\"withCredentials\"in c||!/^(http(s)?:)?\\/\\//.test(n)||(c=new XDomainRequest),\"onload\"in c?c.onload=c.onerror=u:c.onreadystatechange=function(){c.readyState>3&&u()},c.onprogress=function(n){var t=mo.event;mo.event=n;try{o.progress.call(i,c)}finally{mo.event=t}},i.header=function(n,t){return n=(n+\"\").toLowerCase(),arguments.length<2?a[n]:(null==t?delete a[n]:a[n]=t+\"\",i)},i.mimeType=function(n){return arguments.length?(t=null==n?null:n+\"\",i):t},i.responseType=function(n){return arguments.length?(l=n,i):l},i.response=function(n){return e=n,i},[\"get\",\"post\"].forEach(function(n){i[n]=function(){return i.send.apply(i,[n].concat(Mo(arguments)))}}),i.send=function(e,r,u){if(2===arguments.length&&\"function\"==typeof r&&(u=r,r=null),c.open(e,n,!0),null==t||\"accept\"in a||(a.accept=t+\",*/*\"),c.setRequestHeader)for(var s in a)c.setRequestHeader(s,a[s]);return null!=t&&c.overrideMimeType&&c.overrideMimeType(t),null!=l&&(c.responseType=l),null!=u&&i.on(\"error\",u).on(\"load\",function(n){u(null,n)}),o.beforesend.call(i,c),c.send(null==r?null:r),i},i.abort=function(){return c.abort(),i},mo.rebind(i,o,\"on\"),null==r?i:i.get(yt(r))}function yt(n){return 1===n.length?function(t,e){n(null==t?e:null)}:n}function Mt(){var n=bt(),t=_t()-n;t>24?(isFinite(t)&&(clearTimeout(Ma),Ma=setTimeout(Mt,t)),ya=0):(ya=1,ba(Mt))}function xt(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now()),xa.callback=n,xa.time=e+t}function bt(){var n=Date.now();for(xa=va;xa;)n>=xa.time&&(xa.flush=xa.callback(n-xa.time)),xa=xa.next;return n}function _t(){for(var n,t=va,e=1/0;t;)t.flush?t=n?n.next=t.next:va=t.next:(t.time<e&&(e=t.time),t=(n=t).next);return ma=n,e}function wt(n,t){var e=Math.pow(10,3*Math.abs(8-t));return{scale:t>8?function(n){return n/e}:function(n){return n*e},symbol:n}}function St(n,t){return t-(n?Math.ceil(Math.log(n)/Math.LN10):1)}function Et(n){return n+\"\"}function kt(){}function At(n,t,e){var r=e.s=n+t,u=r-n,i=r-u;e.t=n-i+(t-u)}function Nt(n,t){n&&Da.hasOwnProperty(n.type)&&Da[n.type](n,t)}function Tt(n,t,e){var r,u=-1,i=n.length-e;for(t.lineStart();++u<i;)r=n[u],t.point(r[0],r[1],r[2]);t.lineEnd()}function qt(n,t){var e=-1,r=n.length;for(t.polygonStart();++e<r;)Tt(n[e],t,1);t.polygonEnd()}function zt(){function n(n,t){n*=Qo,t=t*Qo/2+Bo/4;var e=n-r,o=Math.cos(t),a=Math.sin(t),c=i*a,l=u*o+c*Math.cos(e),s=c*Math.sin(e);La.add(Math.atan2(s,l)),r=n,u=o,i=a}var t,e,r,u,i;Ha.point=function(o,a){Ha.point=n,r=(t=o)*Qo,u=Math.cos(a=(e=a)*Qo/2+Bo/4),i=Math.sin(a)},Ha.lineEnd=function(){n(t,e)}}function Ct(n){var t=n[0],e=n[1],r=Math.cos(e);return[r*Math.cos(t),r*Math.sin(t),Math.sin(e)]}function Dt(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]}function jt(n,t){return[n[1]*t[2]-n[2]*t[1],n[2]*t[0]-n[0]*t[2],n[0]*t[1]-n[1]*t[0]]}function Lt(n,t){n[0]+=t[0],n[1]+=t[1],n[2]+=t[2]}function Ht(n,t){return[n[0]*t,n[1]*t,n[2]*t]}function Ft(n){var t=Math.sqrt(n[0]*n[0]+n[1]*n[1]+n[2]*n[2]);n[0]/=t,n[1]/=t,n[2]/=t}function Pt(n){return[Math.atan2(n[1],n[0]),O(n[2])]}function Ot(n,t){return Math.abs(n[0]-t[0])<Go&&Math.abs(n[1]-t[1])<Go}function Rt(n,t){n*=Qo;var e=Math.cos(t*=Qo);Yt(e*Math.cos(n),e*Math.sin(n),Math.sin(t))}function Yt(n,t,e){++Fa,Oa+=(n-Oa)/Fa,Ra+=(t-Ra)/Fa,Ya+=(e-Ya)/Fa}function It(){function n(n,u){n*=Qo;var i=Math.cos(u*=Qo),o=i*Math.cos(n),a=i*Math.sin(n),c=Math.sin(u),l=Math.atan2(Math.sqrt((l=e*c-r*a)*l+(l=r*o-t*c)*l+(l=t*a-e*o)*l),t*o+e*a+r*c);Pa+=l,Ia+=l*(t+(t=o)),Ua+=l*(e+(e=a)),Za+=l*(r+(r=c)),Yt(t,e,r)}var t,e,r;Ba.point=function(u,i){u*=Qo;var o=Math.cos(i*=Qo);t=o*Math.cos(u),e=o*Math.sin(u),r=Math.sin(i),Ba.point=n,Yt(t,e,r)}}function Ut(){Ba.point=Rt}function Zt(){function n(n,t){n*=Qo;var e=Math.cos(t*=Qo),o=e*Math.cos(n),a=e*Math.sin(n),c=Math.sin(t),l=u*c-i*a,s=i*o-r*c,f=r*a-u*o,h=Math.sqrt(l*l+s*s+f*f),g=r*o+u*a+i*c,p=h&&-P(g)/h,d=Math.atan2(h,g);Va+=p*l,Xa+=p*s,$a+=p*f,Pa+=d,Ia+=d*(r+(r=o)),Ua+=d*(u+(u=a)),Za+=d*(i+(i=c)),Yt(r,u,i)}var t,e,r,u,i;Ba.point=function(o,a){t=o,e=a,Ba.point=n,o*=Qo;var c=Math.cos(a*=Qo);r=c*Math.cos(o),u=c*Math.sin(o),i=Math.sin(a),Yt(r,u,i)},Ba.lineEnd=function(){n(t,e),Ba.lineEnd=Ut,Ba.point=Rt}}function Vt(){return!0}function Xt(n,t,e,r,u){var i=[],o=[];if(n.forEach(function(n){if(!((t=n.length-1)<=0)){var t,e=n[0],r=n[t];if(Ot(e,r)){u.lineStart();for(var a=0;t>a;++a)u.point((e=n[a])[0],e[1]);return u.lineEnd(),void 0}var c={point:e,points:n,other:null,visited:!1,entry:!0,subject:!0},l={point:e,points:[e],other:c,visited:!1,entry:!1,subject:!1};c.other=l,i.push(c),o.push(l),c={point:r,points:[r],other:null,visited:!1,entry:!1,subject:!0},l={point:r,points:[r],other:c,visited:!1,entry:!0,subject:!1},c.other=l,i.push(c),o.push(l)}}),o.sort(t),$t(i),$t(o),i.length){for(var a=0,c=e,l=o.length;l>a;++a)o[a].entry=c=!c;for(var s,f,h,g=i[0];;){for(s=g;s.visited;)if((s=s.next)===g)return;f=s.points,u.lineStart();do{if(s.visited=s.other.visited=!0,s.entry){if(s.subject)for(var a=0;a<f.length;a++)u.point((h=f[a])[0],h[1]);else r(s.point,s.next.point,1,u);s=s.next}else{if(s.subject){f=s.prev.points;for(var a=f.length;--a>=0;)u.point((h=f[a])[0],h[1])}else r(s.point,s.prev.point,-1,u);s=s.prev}s=s.other,f=s.points}while(!s.visited);u.lineEnd()}}}function $t(n){if(t=n.length){for(var t,e,r=0,u=n[0];++r<t;)u.next=e=n[r],e.prev=u,u=e;u.next=e=n[0],e.prev=u}}function Bt(n,t,e,r){return function(u,i){function o(t,e){var r=u(t,e);n(t=r[0],e=r[1])&&i.point(t,e)}function a(n,t){var e=u(n,t);v.point(e[0],e[1])}function c(){y.point=a,v.lineStart()}function l(){y.point=o,v.lineEnd()}function s(n,t){d.push([n,t]);var e=u(n,t);x.point(e[0],e[1])}function f(){x.lineStart(),d=[]}function h(){s(d[0][0],d[0][1]),x.lineEnd();var n,t=x.clean(),e=M.buffer(),r=e.length;if(d.pop(),p.push(d),d=null,r){if(1&t){n=e[0];var u,r=n.length-1,o=-1;for(i.lineStart();++o<r;)i.point((u=n[o])[0],u[1]);return i.lineEnd(),void 0}r>1&&2&t&&e.push(e.pop().concat(e.shift())),g.push(e.filter(Wt))}}var g,p,d,v=t(i),m=u.invert(r[0],r[1]),y={point:o,lineStart:c,lineEnd:l,polygonStart:function(){y.point=s,y.lineStart=f,y.lineEnd=h,g=[],p=[],i.polygonStart()},polygonEnd:function(){y.point=o,y.lineStart=c,y.lineEnd=l,g=mo.merge(g);var n=Kt(m,p);g.length?Xt(g,Gt,n,e,i):n&&(i.lineStart(),e(null,null,1,i),i.lineEnd()),i.polygonEnd(),g=p=null},sphere:function(){i.polygonStart(),i.lineStart(),e(null,null,1,i),i.lineEnd(),i.polygonEnd()}},M=Jt(),x=t(M);return y}}function Wt(n){return n.length>1}function Jt(){var n,t=[];return{lineStart:function(){t.push(n=[])},point:function(t,e){n.push([t,e])},lineEnd:c,buffer:function(){var e=t;return t=[],n=null,e},rejoin:function(){t.length>1&&t.push(t.pop().concat(t.shift()))}}}function Gt(n,t){return((n=n.point)[0]<0?n[1]-Jo-Go:Jo-n[1])-((t=t.point)[0]<0?t[1]-Jo-Go:Jo-t[1])}function Kt(n,t){var e=n[0],r=n[1],u=[Math.sin(e),-Math.cos(e),0],i=0,o=0;La.reset();for(var a=0,c=t.length;c>a;++a){var l=t[a],s=l.length;if(s)for(var f=l[0],h=f[0],g=f[1]/2+Bo/4,p=Math.sin(g),d=Math.cos(g),v=1;;){v===s&&(v=0),n=l[v];var m=n[0],y=n[1]/2+Bo/4,M=Math.sin(y),x=Math.cos(y),b=m-h,_=Math.abs(b)>Bo,w=p*M;if(La.add(Math.atan2(w*Math.sin(b),d*x+w*Math.cos(b))),i+=_?b+(b>=0?2:-2)*Bo:b,_^h>=e^m>=e){var S=jt(Ct(f),Ct(n));Ft(S);var E=jt(u,S);Ft(E);var k=(_^b>=0?-1:1)*O(E[2]);(r>k||r===k&&(S[0]||S[1]))&&(o+=_^b>=0?1:-1)}if(!v++)break;h=m,p=M,d=x,f=n}}return(-Go>i||Go>i&&0>La)^1&o}function Qt(n){var t,e=0/0,r=0/0,u=0/0;return{lineStart:function(){n.lineStart(),t=1},point:function(i,o){var a=i>0?Bo:-Bo,c=Math.abs(i-e);Math.abs(c-Bo)<Go?(n.point(e,r=(r+o)/2>0?Jo:-Jo),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),n.point(i,r),t=0):u!==a&&c>=Bo&&(Math.abs(e-u)<Go&&(e-=u*Go),Math.abs(i-a)<Go&&(i-=a*Go),r=ne(e,r,i,o),n.point(u,r),n.lineEnd(),n.lineStart(),n.point(a,r),t=0),n.point(e=i,r=o),u=a},lineEnd:function(){n.lineEnd(),e=r=0/0},clean:function(){return 2-t}}}function ne(n,t,e,r){var u,i,o=Math.sin(n-e);return Math.abs(o)>Go?Math.atan((Math.sin(t)*(i=Math.cos(r))*Math.sin(e)-Math.sin(r)*(u=Math.cos(t))*Math.sin(n))/(u*i*o)):(t+r)/2}function te(n,t,e,r){var u;if(null==n)u=e*Jo,r.point(-Bo,u),r.point(0,u),r.point(Bo,u),r.point(Bo,0),r.point(Bo,-u),r.point(0,-u),r.point(-Bo,-u),r.point(-Bo,0),r.point(-Bo,u);else if(Math.abs(n[0]-t[0])>Go){var i=(n[0]<t[0]?1:-1)*Bo;u=e*i/2,r.point(-i,u),r.point(0,u),r.point(i,u)}else r.point(t[0],t[1])}function ee(n){function t(n,t){return Math.cos(n)*Math.cos(t)>i}function e(n){var e,i,c,l,s;return{lineStart:function(){l=c=!1,s=1},point:function(f,h){var g,p=[f,h],d=t(f,h),v=o?d?0:u(f,h):d?u(f+(0>f?Bo:-Bo),h):0;if(!e&&(l=c=d)&&n.lineStart(),d!==c&&(g=r(e,p),(Ot(e,g)||Ot(p,g))&&(p[0]+=Go,p[1]+=Go,d=t(p[0],p[1]))),d!==c)s=0,d?(n.lineStart(),g=r(p,e),n.point(g[0],g[1])):(g=r(e,p),n.point(g[0],g[1]),n.lineEnd()),e=g;else if(a&&e&&o^d){var m;v&i||!(m=r(p,e,!0))||(s=0,o?(n.lineStart(),n.point(m[0][0],m[0][1]),n.point(m[1][0],m[1][1]),n.lineEnd()):(n.point(m[1][0],m[1][1]),n.lineEnd(),n.lineStart(),n.point(m[0][0],m[0][1])))}!d||e&&Ot(e,p)||n.point(p[0],p[1]),e=p,c=d,i=v},lineEnd:function(){c&&n.lineEnd(),e=null},clean:function(){return s|(l&&c)<<1}}}function r(n,t,e){var r=Ct(n),u=Ct(t),o=[1,0,0],a=jt(r,u),c=Dt(a,a),l=a[0],s=c-l*l;if(!s)return!e&&n;var f=i*c/s,h=-i*l/s,g=jt(o,a),p=Ht(o,f),d=Ht(a,h);Lt(p,d);var v=g,m=Dt(p,v),y=Dt(v,v),M=m*m-y*(Dt(p,p)-1);if(!(0>M)){var x=Math.sqrt(M),b=Ht(v,(-m-x)/y);if(Lt(b,p),b=Pt(b),!e)return b;var _,w=n[0],S=t[0],E=n[1],k=t[1];w>S&&(_=w,w=S,S=_);var A=S-w,N=Math.abs(A-Bo)<Go,T=N||Go>A;if(!N&&E>k&&(_=E,E=k,k=_),T?N?E+k>0^b[1]<(Math.abs(b[0]-w)<Go?E:k):E<=b[1]&&b[1]<=k:A>Bo^(w<=b[0]&&b[0]<=S)){var q=Ht(v,(-m+x)/y);return Lt(q,p),[b,Pt(q)]}}}function u(t,e){var r=o?n:Bo-n,u=0;return-r>t?u|=1:t>r&&(u|=2),-r>e?u|=4:e>r&&(u|=8),u}var i=Math.cos(n),o=i>0,a=Math.abs(i)>Go,c=Te(n,6*Qo);return Bt(t,e,c,o?[0,-n]:[-Bo,n-Bo])}function re(n,t,e,r){function u(r,u){return Math.abs(r[0]-n)<Go?u>0?0:3:Math.abs(r[0]-e)<Go?u>0?2:1:Math.abs(r[1]-t)<Go?u>0?1:0:u>0?3:2}function i(n,t){return o(n.point,t.point)}function o(n,t){var e=u(n,1),r=u(t,1);return e!==r?e-r:0===e?t[1]-n[1]:1===e?n[0]-t[0]:2===e?n[1]-t[1]:t[0]-n[0]}function a(u,i){var o=i[0]-u[0],a=i[1]-u[1],c=[0,1];return Math.abs(o)<Go&&Math.abs(a)<Go?n<=u[0]&&u[0]<=e&&t<=u[1]&&u[1]<=r:ue(n-u[0],o,c)&&ue(u[0]-e,-o,c)&&ue(t-u[1],a,c)&&ue(u[1]-r,-a,c)?(c[1]<1&&(i[0]=u[0]+c[1]*o,i[1]=u[1]+c[1]*a),c[0]>0&&(u[0]+=c[0]*o,u[1]+=c[0]*a),!0):!1}return function(c){function l(n){for(var t=0,e=y.length,r=n[1],u=0;e>u;++u)for(var i,o=1,a=y[u],c=a.length,l=a[0];c>o;++o)i=a[o],l[1]<=r?i[1]>r&&s(l,i,n)>0&&++t:i[1]<=r&&s(l,i,n)<0&&--t,l=i;return 0!==t}function s(n,t,e){return(t[0]-n[0])*(e[1]-n[1])-(e[0]-n[0])*(t[1]-n[1])}function f(i,a,c,l){var s=0,f=0;if(null==i||(s=u(i,c))!==(f=u(a,c))||o(i,a)<0^c>0){do l.point(0===s||3===s?n:e,s>1?r:t);while((s=(s+c+4)%4)!==f)}else l.point(a[0],a[1])}function h(u,i){return u>=n&&e>=u&&i>=t&&r>=i}function g(n,t){h(n,t)&&c.point(n,t)}function p(){q.point=v,y&&y.push(M=[]),k=!0,E=!1,w=S=0/0}function d(){m&&(v(x,b),_&&E&&T.rejoin(),m.push(T.buffer())),q.point=g,E&&c.lineEnd()}function v(n,t){n=Math.max(-Ja,Math.min(Ja,n)),t=Math.max(-Ja,Math.min(Ja,t));var e=h(n,t);if(y&&M.push([n,t]),k)x=n,b=t,_=e,k=!1,e&&(c.lineStart(),c.point(n,t));else if(e&&E)c.point(n,t);else{var r=[w,S],u=[n,t];a(r,u)?(E||(c.lineStart(),c.point(r[0],r[1])),c.point(u[0],u[1]),e||c.lineEnd(),A=!1):e&&(c.lineStart(),c.point(n,t),A=!1)}w=n,S=t,E=e}var m,y,M,x,b,_,w,S,E,k,A,N=c,T=Jt(),q={point:g,lineStart:p,lineEnd:d,polygonStart:function(){c=T,m=[],y=[],A=!0},polygonEnd:function(){c=N,m=mo.merge(m);var t=l([n,r]),e=A&&t,u=m.length;(e||u)&&(c.polygonStart(),e&&(c.lineStart(),f(null,null,1,c),c.lineEnd()),u&&Xt(m,i,t,f,c),c.polygonEnd()),m=y=M=null}};return q}}function ue(n,t,e){if(Math.abs(t)<Go)return 0>=n;var r=n/t;if(t>0){if(r>e[1])return!1;r>e[0]&&(e[0]=r)}else{if(r<e[0])return!1;r<e[1]&&(e[1]=r)}return!0}function ie(n,t){function e(e,r){return e=n(e,r),t(e[0],e[1])}return n.invert&&t.invert&&(e.invert=function(e,r){return e=t.invert(e,r),e&&n.invert(e[0],e[1])}),e}function oe(n){var t=0,e=Bo/3,r=be(n),u=r(t,e);return u.parallels=function(n){return arguments.length?r(t=n[0]*Bo/180,e=n[1]*Bo/180):[180*(t/Bo),180*(e/Bo)]},u}function ae(n,t){function e(n,t){var e=Math.sqrt(i-2*u*Math.sin(t))/u;return[e*Math.sin(n*=u),o-e*Math.cos(n)]}var r=Math.sin(n),u=(r+Math.sin(t))/2,i=1+r*(2*u-r),o=Math.sqrt(i)/u;return e.invert=function(n,t){var e=o-t;return[Math.atan2(n,e)/u,O((i-(n*n+e*e)*u*u)/(2*u))]},e}function ce(){function n(n,t){Ka+=u*n-r*t,r=n,u=t}var t,e,r,u;rc.point=function(i,o){rc.point=n,t=r=i,e=u=o},rc.lineEnd=function(){n(t,e)}}function le(n,t){Qa>n&&(Qa=n),n>tc&&(tc=n),nc>t&&(nc=t),t>ec&&(ec=t)}function se(){function n(n,t){o.push(\"M\",n,\",\",t,i)}function t(n,t){o.push(\"M\",n,\",\",t),a.point=e}function e(n,t){o.push(\"L\",n,\",\",t)}function r(){a.point=n}function u(){o.push(\"Z\")}var i=fe(4.5),o=[],a={point:n,lineStart:function(){a.point=t},lineEnd:r,polygonStart:function(){a.lineEnd=u},polygonEnd:function(){a.lineEnd=r,a.point=n},pointRadius:function(n){return i=fe(n),a},result:function(){if(o.length){var n=o.join(\"\");return o=[],n}}};return a}function fe(n){return\"m0,\"+n+\"a\"+n+\",\"+n+\" 0 1,1 0,\"+-2*n+\"a\"+n+\",\"+n+\" 0 1,1 0,\"+2*n+\"z\"}function he(n,t){Oa+=n,Ra+=t,++Ya}function ge(){function n(n,r){var u=n-t,i=r-e,o=Math.sqrt(u*u+i*i);Ia+=o*(t+n)/2,Ua+=o*(e+r)/2,Za+=o,he(t=n,e=r)}var t,e;ic.point=function(r,u){ic.point=n,he(t=r,e=u)}}function pe(){ic.point=he}function de(){function n(n,t){var e=n-r,i=t-u,o=Math.sqrt(e*e+i*i);Ia+=o*(r+n)/2,Ua+=o*(u+t)/2,Za+=o,o=u*n-r*t,Va+=o*(r+n),Xa+=o*(u+t),$a+=3*o,he(r=n,u=t)}var t,e,r,u;ic.point=function(i,o){ic.point=n,he(t=r=i,e=u=o)},ic.lineEnd=function(){n(t,e)}}function ve(n){function t(t,e){n.moveTo(t,e),n.arc(t,e,o,0,Wo)}function e(t,e){n.moveTo(t,e),a.point=r}function r(t,e){n.lineTo(t,e)}function u(){a.point=t}function i(){n.closePath()}var o=4.5,a={point:t,lineStart:function(){a.point=e},lineEnd:u,polygonStart:function(){a.lineEnd=i},polygonEnd:function(){a.lineEnd=u,a.point=t},pointRadius:function(n){return o=n,a},result:c};return a}function me(n){function t(t){function r(e,r){e=n(e,r),t.point(e[0],e[1])}function u(){M=0/0,S.point=o,t.lineStart()}function o(r,u){var o=Ct([r,u]),a=n(r,u);e(M,x,y,b,_,w,M=a[0],x=a[1],y=r,b=o[0],_=o[1],w=o[2],i,t),t.point(M,x)}function a(){S.point=r,t.lineEnd()}function c(){u(),S.point=l,S.lineEnd=s}function l(n,t){o(f=n,h=t),g=M,p=x,d=b,v=_,m=w,S.point=o}function s(){e(M,x,y,b,_,w,g,p,f,d,v,m,i,t),S.lineEnd=a,a()}var f,h,g,p,d,v,m,y,M,x,b,_,w,S={point:r,lineStart:u,lineEnd:a,polygonStart:function(){t.polygonStart(),S.lineStart=c},polygonEnd:function(){t.polygonEnd(),S.lineStart=u}};return S}function e(t,i,o,a,c,l,s,f,h,g,p,d,v,m){var y=s-t,M=f-i,x=y*y+M*M;if(x>4*r&&v--){var b=a+g,_=c+p,w=l+d,S=Math.sqrt(b*b+_*_+w*w),E=Math.asin(w/=S),k=Math.abs(Math.abs(w)-1)<Go?(o+h)/2:Math.atan2(_,b),A=n(k,E),N=A[0],T=A[1],q=N-t,z=T-i,C=M*q-y*z;(C*C/x>r||Math.abs((y*q+M*z)/x-.5)>.3||u>a*g+c*p+l*d)&&(e(t,i,o,a,c,l,N,T,k,b/=S,_/=S,w,v,m),m.point(N,T),e(N,T,k,b,_,w,s,f,h,g,p,d,v,m))}}var r=.5,u=Math.cos(30*Qo),i=16;return t.precision=function(n){return arguments.length?(i=(r=n*n)>0&&16,t):Math.sqrt(r)},t}function ye(n){this.stream=n}function Me(n){var t=me(function(t,e){return n([t*na,e*na])});return function(n){var e=new ye(n=t(n));return e.point=function(t,e){n.point(t*Qo,e*Qo)},e}}function xe(n){return be(function(){return n})()}function be(n){function t(n){return n=a(n[0]*Qo,n[1]*Qo),[n[0]*h+c,l-n[1]*h]}function e(n){return n=a.invert((n[0]-c)/h,(l-n[1])/h),n&&[n[0]*na,n[1]*na]}function r(){a=ie(o=Ee(m,y,M),i);var n=i(d,v);return c=g-n[0]*h,l=p+n[1]*h,u()}function u(){return s&&(s.valid=!1,s=null),t}var i,o,a,c,l,s,f=me(function(n,t){return n=i(n,t),[n[0]*h+c,l-n[1]*h]}),h=150,g=480,p=250,d=0,v=0,m=0,y=0,M=0,x=Wa,b=dt,_=null,w=null;return t.stream=function(n){return s&&(s.valid=!1),s=_e(x(o,f(b(n)))),s.valid=!0,s},t.clipAngle=function(n){return arguments.length?(x=null==n?(_=n,Wa):ee((_=+n)*Qo),u()):_},t.clipExtent=function(n){return arguments.length?(w=n,b=n?re(n[0][0],n[0][1],n[1][0],n[1][1]):dt,u()):w},t.scale=function(n){return arguments.length?(h=+n,r()):h},t.translate=function(n){return arguments.length?(g=+n[0],p=+n[1],r()):[g,p]},t.center=function(n){return arguments.length?(d=n[0]%360*Qo,v=n[1]%360*Qo,r()):[d*na,v*na]},t.rotate=function(n){return arguments.length?(m=n[0]%360*Qo,y=n[1]%360*Qo,M=n.length>2?n[2]%360*Qo:0,r()):[m*na,y*na,M*na]},mo.rebind(t,f,\"precision\"),function(){return i=n.apply(this,arguments),t.invert=i.invert&&e,r()}}function _e(n){var t=new ye(n);return t.point=function(t,e){n.point(t*Qo,e*Qo)},t}function we(n,t){return[n,t]}function Se(n,t){return[n>Bo?n-Wo:-Bo>n?n+Wo:n,t]}function Ee(n,t,e){return n?t||e?ie(Ae(n),Ne(t,e)):Ae(n):t||e?Ne(t,e):Se}function ke(n){return function(t,e){return t+=n,[t>Bo?t-Wo:-Bo>t?t+Wo:t,e]}}function Ae(n){var t=ke(n);return t.invert=ke(-n),t}function Ne(n,t){function e(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*r+a*u;return[Math.atan2(c*i-s*o,a*r-l*u),O(s*i+c*o)]}var r=Math.cos(n),u=Math.sin(n),i=Math.cos(t),o=Math.sin(t);return e.invert=function(n,t){var e=Math.cos(t),a=Math.cos(n)*e,c=Math.sin(n)*e,l=Math.sin(t),s=l*i-c*o;return[Math.atan2(c*i+l*o,a*r+s*u),O(s*r-a*u)]},e}function Te(n,t){var e=Math.cos(n),r=Math.sin(n);return function(u,i,o,a){var c=o*t;null!=u?(u=qe(e,u),i=qe(e,i),(o>0?i>u:u>i)&&(u+=o*Wo)):(u=n+o*Wo,i=n-.5*c);for(var l,s=u;o>0?s>i:i>s;s-=c)a.point((l=Pt([e,-r*Math.cos(s),-r*Math.sin(s)]))[0],l[1])}}function qe(n,t){var e=Ct(t);e[0]-=n,Ft(e);var r=P(-e[1]);return((-e[2]<0?-r:r)+2*Math.PI-Go)%(2*Math.PI)}function ze(n,t,e){var r=mo.range(n,t-Go,e).concat(t);return function(n){return r.map(function(t){return[n,t]})}}function Ce(n,t,e){var r=mo.range(n,t-Go,e).concat(t);return function(n){return r.map(function(t){return[t,n]})}}function De(n){return n.source}function je(n){return n.target}function Le(n,t,e,r){var u=Math.cos(t),i=Math.sin(t),o=Math.cos(r),a=Math.sin(r),c=u*Math.cos(n),l=u*Math.sin(n),s=o*Math.cos(e),f=o*Math.sin(e),h=2*Math.asin(Math.sqrt(U(r-t)+u*o*U(e-n))),g=1/Math.sin(h),p=h?function(n){var t=Math.sin(n*=h)*g,e=Math.sin(h-n)*g,r=e*c+t*s,u=e*l+t*f,o=e*i+t*a;return[Math.atan2(u,r)*na,Math.atan2(o,Math.sqrt(r*r+u*u))*na]}:function(){return[n*na,t*na]};return p.distance=h,p}function He(){function n(n,u){var i=Math.sin(u*=Qo),o=Math.cos(u),a=Math.abs((n*=Qo)-t),c=Math.cos(a);oc+=Math.atan2(Math.sqrt((a=o*Math.sin(a))*a+(a=r*i-e*o*c)*a),e*i+r*o*c),t=n,e=i,r=o}var t,e,r;ac.point=function(u,i){t=u*Qo,e=Math.sin(i*=Qo),r=Math.cos(i),ac.point=n},ac.lineEnd=function(){ac.point=ac.lineEnd=c}}function Fe(n,t){function e(t,e){var r=Math.cos(t),u=Math.cos(e),i=n(r*u);return[i*u*Math.sin(t),i*Math.sin(e)]}return e.invert=function(n,e){var r=Math.sqrt(n*n+e*e),u=t(r),i=Math.sin(u),o=Math.cos(u);return[Math.atan2(n*i,r*o),Math.asin(r&&e*i/r)]},e}function Pe(n,t){function e(n,t){var e=Math.abs(Math.abs(t)-Jo)<Go?0:o/Math.pow(u(t),i);return[e*Math.sin(i*n),o-e*Math.cos(i*n)]}var r=Math.cos(n),u=function(n){return Math.tan(Bo/4+n/2)},i=n===t?Math.sin(n):Math.log(r/Math.cos(t))/Math.log(u(t)/u(n)),o=r*Math.pow(u(n),i)/i;return i?(e.invert=function(n,t){var e=o-t,r=F(i)*Math.sqrt(n*n+e*e);return[Math.atan2(n,e)/i,2*Math.atan(Math.pow(o/r,1/i))-Jo]},e):Re}function Oe(n,t){function e(n,t){var e=i-t;return[e*Math.sin(u*n),i-e*Math.cos(u*n)]}var r=Math.cos(n),u=n===t?Math.sin(n):(r-Math.cos(t))/(t-n),i=r/u+n;return Math.abs(u)<Go?we:(e.invert=function(n,t){var e=i-t;return[Math.atan2(n,e)/u,i-F(u)*Math.sqrt(n*n+e*e)]},e)}function Re(n,t){return[n,Math.log(Math.tan(Bo/4+t/2))]}function Ye(n){var t,e=xe(n),r=e.scale,u=e.translate,i=e.clipExtent;return e.scale=function(){var n=r.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.translate=function(){var n=u.apply(e,arguments);return n===e?t?e.clipExtent(null):e:n},e.clipExtent=function(n){var o=i.apply(e,arguments);if(o===e){if(t=null==n){var a=Bo*r(),c=u();i([[c[0]-a,c[1]-a],[c[0]+a,c[1]+a]])}}else t&&(o=null);return o},e.clipExtent(null)}function Ie(n,t){var e=Math.cos(t)*Math.sin(n);return[Math.log((1+e)/(1-e))/2,Math.atan2(Math.tan(t),Math.cos(n))]}function Ue(n){function t(t){function o(){l.push(\"M\",i(n(s),a))}for(var c,l=[],s=[],f=-1,h=t.length,g=pt(e),p=pt(r);++f<h;)u.call(this,c=t[f],f)?s.push([+g.call(this,c,f),+p.call(this,c,f)]):s.length&&(o(),s=[]);return s.length&&o(),l.length?l.join(\"\"):null}var e=Ze,r=Ve,u=Vt,i=Xe,o=i.key,a=.7;return t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.defined=function(n){return arguments.length?(u=n,t):u},t.interpolate=function(n){return arguments.length?(o=\"function\"==typeof n?i=n:(i=gc.get(n)||Xe).key,t):o},t.tension=function(n){return arguments.length?(a=n,t):a},t}function Ze(n){return n[0]}function Ve(n){return n[1]}function Xe(n){return n.join(\"L\")}function $e(n){return Xe(n)+\"Z\"}function Be(n){for(var t=0,e=n.length,r=n[0],u=[r[0],\",\",r[1]];++t<e;)u.push(\"H\",(r[0]+(r=n[t])[0])/2,\"V\",r[1]);return e>1&&u.push(\"H\",r[0]),u.join(\"\")}function We(n){for(var t=0,e=n.length,r=n[0],u=[r[0],\",\",r[1]];++t<e;)u.push(\"V\",(r=n[t])[1],\"H\",r[0]);return u.join(\"\")}function Je(n){for(var t=0,e=n.length,r=n[0],u=[r[0],\",\",r[1]];++t<e;)u.push(\"H\",(r=n[t])[0],\"V\",r[1]);return u.join(\"\")}function Ge(n,t){return n.length<4?Xe(n):n[1]+nr(n.slice(1,n.length-1),tr(n,t))}function Ke(n,t){return n.length<3?Xe(n):n[0]+nr((n.push(n[0]),n),tr([n[n.length-2]].concat(n,[n[1]]),t))}function Qe(n,t){return n.length<3?Xe(n):n[0]+nr(n,tr(n,t))}function nr(n,t){if(t.length<1||n.length!=t.length&&n.length!=t.length+2)return Xe(n);var e=n.length!=t.length,r=\"\",u=n[0],i=n[1],o=t[0],a=o,c=1;if(e&&(r+=\"Q\"+(i[0]-2*o[0]/3)+\",\"+(i[1]-2*o[1]/3)+\",\"+i[0]+\",\"+i[1],u=n[1],c=2),t.length>1){a=t[1],i=n[c],c++,r+=\"C\"+(u[0]+o[0])+\",\"+(u[1]+o[1])+\",\"+(i[0]-a[0])+\",\"+(i[1]-a[1])+\",\"+i[0]+\",\"+i[1];for(var l=2;l<t.length;l++,c++)i=n[c],a=t[l],r+=\"S\"+(i[0]-a[0])+\",\"+(i[1]-a[1])+\",\"+i[0]+\",\"+i[1]}if(e){var s=n[c];r+=\"Q\"+(i[0]+2*a[0]/3)+\",\"+(i[1]+2*a[1]/3)+\",\"+s[0]+\",\"+s[1]}return r}function tr(n,t){for(var e,r=[],u=(1-t)/2,i=n[0],o=n[1],a=1,c=n.length;++a<c;)e=i,i=o,o=n[a],r.push([u*(o[0]-e[0]),u*(o[1]-e[1])]);return r}function er(n){if(n.length<3)return Xe(n);var t=1,e=n.length,r=n[0],u=r[0],i=r[1],o=[u,u,u,(r=n[1])[0]],a=[i,i,i,r[1]],c=[u,\",\",i,\"L\",or(vc,o),\",\",or(vc,a)];for(n.push(n[e-1]);++t<=e;)r=n[t],o.shift(),o.push(r[0]),a.shift(),a.push(r[1]),ar(c,o,a);return n.pop(),c.push(\"L\",r),c.join(\"\")}function rr(n){if(n.length<4)return Xe(n);for(var t,e=[],r=-1,u=n.length,i=[0],o=[0];++r<3;)t=n[r],i.push(t[0]),o.push(t[1]);for(e.push(or(vc,i)+\",\"+or(vc,o)),--r;++r<u;)t=n[r],i.shift(),i.push(t[0]),o.shift(),o.push(t[1]),ar(e,i,o);return e.join(\"\")}function ur(n){for(var t,e,r=-1,u=n.length,i=u+4,o=[],a=[];++r<4;)e=n[r%u],o.push(e[0]),a.push(e[1]);for(t=[or(vc,o),\",\",or(vc,a)],--r;++r<i;)e=n[r%u],o.shift(),o.push(e[0]),a.shift(),a.push(e[1]),ar(t,o,a);return t.join(\"\")}function ir(n,t){var e=n.length-1;if(e)for(var r,u,i=n[0][0],o=n[0][1],a=n[e][0]-i,c=n[e][1]-o,l=-1;++l<=e;)r=n[l],u=l/e,r[0]=t*r[0]+(1-t)*(i+u*a),r[1]=t*r[1]+(1-t)*(o+u*c);return er(n)}function or(n,t){return n[0]*t[0]+n[1]*t[1]+n[2]*t[2]+n[3]*t[3]}function ar(n,t,e){n.push(\"C\",or(pc,t),\",\",or(pc,e),\",\",or(dc,t),\",\",or(dc,e),\",\",or(vc,t),\",\",or(vc,e))}function cr(n,t){return(t[1]-n[1])/(t[0]-n[0])}function lr(n){for(var t=0,e=n.length-1,r=[],u=n[0],i=n[1],o=r[0]=cr(u,i);++t<e;)r[t]=(o+(o=cr(u=i,i=n[t+1])))/2;return r[t]=o,r\n}function sr(n){for(var t,e,r,u,i=[],o=lr(n),a=-1,c=n.length-1;++a<c;)t=cr(n[a],n[a+1]),Math.abs(t)<Go?o[a]=o[a+1]=0:(e=o[a]/t,r=o[a+1]/t,u=e*e+r*r,u>9&&(u=3*t/Math.sqrt(u),o[a]=u*e,o[a+1]=u*r));for(a=-1;++a<=c;)u=(n[Math.min(c,a+1)][0]-n[Math.max(0,a-1)][0])/(6*(1+o[a]*o[a])),i.push([u||0,o[a]*u||0]);return i}function fr(n){return n.length<3?Xe(n):n[0]+nr(n,sr(n))}function hr(n,t,e,r){var u,i,o,a,c,l,s;return u=r[n],i=u[0],o=u[1],u=r[t],a=u[0],c=u[1],u=r[e],l=u[0],s=u[1],(s-o)*(a-i)-(c-o)*(l-i)>0}function gr(n,t,e){return(e[0]-t[0])*(n[1]-t[1])<(e[1]-t[1])*(n[0]-t[0])}function pr(n,t,e,r){var u=n[0],i=e[0],o=t[0]-u,a=r[0]-i,c=n[1],l=e[1],s=t[1]-c,f=r[1]-l,h=(a*(c-l)-f*(u-i))/(f*o-a*s);return[u+h*o,c+h*s]}function dr(n){var t=n[0],e=n[n.length-1];return!(t[0]-e[0]||t[1]-e[1])}function vr(n,t){var e={list:n.map(function(n,t){return{index:t,x:n[0],y:n[1]}}).sort(function(n,t){return n.y<t.y?-1:n.y>t.y?1:n.x<t.x?-1:n.x>t.x?1:0}),bottomSite:null},r={list:[],leftEnd:null,rightEnd:null,init:function(){r.leftEnd=r.createHalfEdge(null,\"l\"),r.rightEnd=r.createHalfEdge(null,\"l\"),r.leftEnd.r=r.rightEnd,r.rightEnd.l=r.leftEnd,r.list.unshift(r.leftEnd,r.rightEnd)},createHalfEdge:function(n,t){return{edge:n,side:t,vertex:null,l:null,r:null}},insert:function(n,t){t.l=n,t.r=n.r,n.r.l=t,n.r=t},leftBound:function(n){var t=r.leftEnd;do t=t.r;while(t!=r.rightEnd&&u.rightOf(t,n));return t=t.l},del:function(n){n.l.r=n.r,n.r.l=n.l,n.edge=null},right:function(n){return n.r},left:function(n){return n.l},leftRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[n.side]},rightRegion:function(n){return null==n.edge?e.bottomSite:n.edge.region[yc[n.side]]}},u={bisect:function(n,t){var e={region:{l:n,r:t},ep:{l:null,r:null}},r=t.x-n.x,u=t.y-n.y,i=r>0?r:-r,o=u>0?u:-u;return e.c=n.x*r+n.y*u+.5*(r*r+u*u),i>o?(e.a=1,e.b=u/r,e.c/=r):(e.b=1,e.a=r/u,e.c/=u),e},intersect:function(n,t){var e=n.edge,r=t.edge;if(!e||!r||e.region.r==r.region.r)return null;var u=e.a*r.b-e.b*r.a;if(Math.abs(u)<1e-10)return null;var i,o,a=(e.c*r.b-r.c*e.b)/u,c=(r.c*e.a-e.c*r.a)/u,l=e.region.r,s=r.region.r;l.y<s.y||l.y==s.y&&l.x<s.x?(i=n,o=e):(i=t,o=r);var f=a>=o.region.r.x;return f&&\"l\"===i.side||!f&&\"r\"===i.side?null:{x:a,y:c}},rightOf:function(n,t){var e=n.edge,r=e.region.r,u=t.x>r.x;if(u&&\"l\"===n.side)return 1;if(!u&&\"r\"===n.side)return 0;if(1===e.a){var i=t.y-r.y,o=t.x-r.x,a=0,c=0;if(!u&&e.b<0||u&&e.b>=0?c=a=i>=e.b*o:(c=t.x+t.y*e.b>e.c,e.b<0&&(c=!c),c||(a=1)),!a){var l=r.x-e.region.l.x;c=e.b*(o*o-i*i)<l*i*(1+2*o/l+e.b*e.b),e.b<0&&(c=!c)}}else{var s=e.c-e.a*t.x,f=t.y-s,h=t.x-r.x,g=s-r.y;c=f*f>h*h+g*g}return\"l\"===n.side?c:!c},endPoint:function(n,e,r){n.ep[e]=r,n.ep[yc[e]]&&t(n)},distance:function(n,t){var e=n.x-t.x,r=n.y-t.y;return Math.sqrt(e*e+r*r)}},i={list:[],insert:function(n,t,e){n.vertex=t,n.ystar=t.y+e;for(var r=0,u=i.list,o=u.length;o>r;r++){var a=u[r];if(!(n.ystar>a.ystar||n.ystar==a.ystar&&t.x>a.vertex.x))break}u.splice(r,0,n)},del:function(n){for(var t=0,e=i.list,r=e.length;r>t&&e[t]!=n;++t);e.splice(t,1)},empty:function(){return 0===i.list.length},nextEvent:function(n){for(var t=0,e=i.list,r=e.length;r>t;++t)if(e[t]==n)return e[t+1];return null},min:function(){var n=i.list[0];return{x:n.vertex.x,y:n.ystar}},extractMin:function(){return i.list.shift()}};r.init(),e.bottomSite=e.list.shift();for(var o,a,c,l,s,f,h,g,p,d,v,m,y,M=e.list.shift();;)if(i.empty()||(o=i.min()),M&&(i.empty()||M.y<o.y||M.y==o.y&&M.x<o.x))a=r.leftBound(M),c=r.right(a),h=r.rightRegion(a),m=u.bisect(h,M),f=r.createHalfEdge(m,\"l\"),r.insert(a,f),d=u.intersect(a,f),d&&(i.del(a),i.insert(a,d,u.distance(d,M))),a=f,f=r.createHalfEdge(m,\"r\"),r.insert(a,f),d=u.intersect(f,c),d&&i.insert(f,d,u.distance(d,M)),M=e.list.shift();else{if(i.empty())break;a=i.extractMin(),l=r.left(a),c=r.right(a),s=r.right(c),h=r.leftRegion(a),g=r.rightRegion(c),v=a.vertex,u.endPoint(a.edge,a.side,v),u.endPoint(c.edge,c.side,v),r.del(a),i.del(c),r.del(c),y=\"l\",h.y>g.y&&(p=h,h=g,g=p,y=\"r\"),m=u.bisect(h,g),f=r.createHalfEdge(m,y),r.insert(l,f),u.endPoint(m,yc[y],v),d=u.intersect(l,f),d&&(i.del(l),i.insert(l,d,u.distance(d,h))),d=u.intersect(f,s),d&&i.insert(f,d,u.distance(d,h))}for(a=r.right(r.leftEnd);a!=r.rightEnd;a=r.right(a))t(a.edge)}function mr(n){return n.x}function yr(n){return n.y}function Mr(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function xr(n,t,e,r,u,i){if(!n(t,e,r,u,i)){var o=.5*(e+u),a=.5*(r+i),c=t.nodes;c[0]&&xr(n,c[0],e,r,o,a),c[1]&&xr(n,c[1],o,r,u,a),c[2]&&xr(n,c[2],e,a,o,i),c[3]&&xr(n,c[3],o,a,u,i)}}function br(n,t){n=mo.rgb(n),t=mo.rgb(t);var e=n.r,r=n.g,u=n.b,i=t.r-e,o=t.g-r,a=t.b-u;return function(n){return\"#\"+ct(Math.round(e+i*n))+ct(Math.round(r+o*n))+ct(Math.round(u+a*n))}}function _r(n,t){var e,r={},u={};for(e in n)e in t?r[e]=Er(n[e],t[e]):u[e]=n[e];for(e in t)e in n||(u[e]=t[e]);return function(n){for(e in r)u[e]=r[e](n);return u}}function wr(n,t){return t-=n=+n,function(e){return n+t*e}}function Sr(n,t){var e,r,u,i,o,a=0,c=0,l=[],s=[];for(n+=\"\",t+=\"\",Mc.lastIndex=0,r=0;e=Mc.exec(t);++r)e.index&&l.push(t.substring(a,c=e.index)),s.push({i:l.length,x:e[0]}),l.push(null),a=Mc.lastIndex;for(a<t.length&&l.push(t.substring(a)),r=0,i=s.length;(e=Mc.exec(n))&&i>r;++r)if(o=s[r],o.x==e[0]){if(o.i)if(null==l[o.i+1])for(l[o.i-1]+=o.x,l.splice(o.i,1),u=r+1;i>u;++u)s[u].i--;else for(l[o.i-1]+=o.x+l[o.i+1],l.splice(o.i,2),u=r+1;i>u;++u)s[u].i-=2;else if(null==l[o.i+1])l[o.i]=o.x;else for(l[o.i]=o.x+l[o.i+1],l.splice(o.i+1,1),u=r+1;i>u;++u)s[u].i--;s.splice(r,1),i--,r--}else o.x=wr(parseFloat(e[0]),parseFloat(o.x));for(;i>r;)o=s.pop(),null==l[o.i+1]?l[o.i]=o.x:(l[o.i]=o.x+l[o.i+1],l.splice(o.i+1,1)),i--;return 1===l.length?null==l[0]?(o=s[0].x,function(n){return o(n)+\"\"}):function(){return t}:function(n){for(r=0;i>r;++r)l[(o=s[r]).i]=o.x(n);return l.join(\"\")}}function Er(n,t){for(var e,r=mo.interpolators.length;--r>=0&&!(e=mo.interpolators[r](n,t)););return e}function kr(n,t){var e,r=[],u=[],i=n.length,o=t.length,a=Math.min(n.length,t.length);for(e=0;a>e;++e)r.push(Er(n[e],t[e]));for(;i>e;++e)u[e]=n[e];for(;o>e;++e)u[e]=t[e];return function(n){for(e=0;a>e;++e)u[e]=r[e](n);return u}}function Ar(n){return function(t){return 0>=t?0:t>=1?1:n(t)}}function Nr(n){return function(t){return 1-n(1-t)}}function Tr(n){return function(t){return.5*(.5>t?n(2*t):2-n(2-2*t))}}function qr(n){return n*n}function zr(n){return n*n*n}function Cr(n){if(0>=n)return 0;if(n>=1)return 1;var t=n*n,e=t*n;return 4*(.5>n?e:3*(n-t)+e-.75)}function Dr(n){return function(t){return Math.pow(t,n)}}function jr(n){return 1-Math.cos(n*Jo)}function Lr(n){return Math.pow(2,10*(n-1))}function Hr(n){return 1-Math.sqrt(1-n*n)}function Fr(n,t){var e;return arguments.length<2&&(t=.45),arguments.length?e=t/Wo*Math.asin(1/n):(n=1,e=t/4),function(r){return 1+n*Math.pow(2,-10*r)*Math.sin((r-e)*Wo/t)}}function Pr(n){return n||(n=1.70158),function(t){return t*t*((n+1)*t-n)}}function Or(n){return 1/2.75>n?7.5625*n*n:2/2.75>n?7.5625*(n-=1.5/2.75)*n+.75:2.5/2.75>n?7.5625*(n-=2.25/2.75)*n+.9375:7.5625*(n-=2.625/2.75)*n+.984375}function Rr(n,t){n=mo.hcl(n),t=mo.hcl(t);var e=n.h,r=n.c,u=n.l,i=t.h-e,o=t.c-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.c:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return J(e+i*n,r+o*n,u+a*n)+\"\"}}function Yr(n,t){n=mo.hsl(n),t=mo.hsl(t);var e=n.h,r=n.s,u=n.l,i=t.h-e,o=t.s-r,a=t.l-u;return isNaN(o)&&(o=0,r=isNaN(r)?t.s:r),isNaN(i)?(i=0,e=isNaN(e)?t.h:e):i>180?i-=360:-180>i&&(i+=360),function(n){return $(e+i*n,r+o*n,u+a*n)+\"\"}}function Ir(n,t){n=mo.lab(n),t=mo.lab(t);var e=n.l,r=n.a,u=n.b,i=t.l-e,o=t.a-r,a=t.b-u;return function(n){return Q(e+i*n,r+o*n,u+a*n)+\"\"}}function Ur(n,t){return t-=n,function(e){return Math.round(n+t*e)}}function Zr(n){var t=[n.a,n.b],e=[n.c,n.d],r=Xr(t),u=Vr(t,e),i=Xr($r(e,t,-u))||0;t[0]*e[1]<e[0]*t[1]&&(t[0]*=-1,t[1]*=-1,r*=-1,u*=-1),this.rotate=(r?Math.atan2(t[1],t[0]):Math.atan2(-e[0],e[1]))*na,this.translate=[n.e,n.f],this.scale=[r,i],this.skew=i?Math.atan2(u,i)*na:0}function Vr(n,t){return n[0]*t[0]+n[1]*t[1]}function Xr(n){var t=Math.sqrt(Vr(n,n));return t&&(n[0]/=t,n[1]/=t),t}function $r(n,t,e){return n[0]+=e*t[0],n[1]+=e*t[1],n}function Br(n,t){var e,r=[],u=[],i=mo.transform(n),o=mo.transform(t),a=i.translate,c=o.translate,l=i.rotate,s=o.rotate,f=i.skew,h=o.skew,g=i.scale,p=o.scale;return a[0]!=c[0]||a[1]!=c[1]?(r.push(\"translate(\",null,\",\",null,\")\"),u.push({i:1,x:wr(a[0],c[0])},{i:3,x:wr(a[1],c[1])})):c[0]||c[1]?r.push(\"translate(\"+c+\")\"):r.push(\"\"),l!=s?(l-s>180?s+=360:s-l>180&&(l+=360),u.push({i:r.push(r.pop()+\"rotate(\",null,\")\")-2,x:wr(l,s)})):s&&r.push(r.pop()+\"rotate(\"+s+\")\"),f!=h?u.push({i:r.push(r.pop()+\"skewX(\",null,\")\")-2,x:wr(f,h)}):h&&r.push(r.pop()+\"skewX(\"+h+\")\"),g[0]!=p[0]||g[1]!=p[1]?(e=r.push(r.pop()+\"scale(\",null,\",\",null,\")\"),u.push({i:e-4,x:wr(g[0],p[0])},{i:e-2,x:wr(g[1],p[1])})):(1!=p[0]||1!=p[1])&&r.push(r.pop()+\"scale(\"+p+\")\"),e=u.length,function(n){for(var t,i=-1;++i<e;)r[(t=u[i]).i]=t.x(n);return r.join(\"\")}}function Wr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return(e-n)*t}}function Jr(n,t){return t=t-(n=+n)?1/(t-n):0,function(e){return Math.max(0,Math.min(1,(e-n)*t))}}function Gr(n){for(var t=n.source,e=n.target,r=Qr(t,e),u=[t];t!==r;)t=t.parent,u.push(t);for(var i=u.length;e!==r;)u.splice(i,0,e),e=e.parent;return u}function Kr(n){for(var t=[],e=n.parent;null!=e;)t.push(n),n=e,e=e.parent;return t.push(n),t}function Qr(n,t){if(n===t)return n;for(var e=Kr(n),r=Kr(t),u=e.pop(),i=r.pop(),o=null;u===i;)o=u,u=e.pop(),i=r.pop();return o}function nu(n){n.fixed|=2}function tu(n){n.fixed&=-7}function eu(n){n.fixed|=4,n.px=n.x,n.py=n.y}function ru(n){n.fixed&=-5}function uu(n,t,e){var r=0,u=0;if(n.charge=0,!n.leaf)for(var i,o=n.nodes,a=o.length,c=-1;++c<a;)i=o[c],null!=i&&(uu(i,t,e),n.charge+=i.charge,r+=i.charge*i.cx,u+=i.charge*i.cy);if(n.point){n.leaf||(n.point.x+=Math.random()-.5,n.point.y+=Math.random()-.5);var l=t*e[n.point.index];n.charge+=n.pointCharge=l,r+=l*n.point.x,u+=l*n.point.y}n.cx=r/n.charge,n.cy=u/n.charge}function iu(n,t){return mo.rebind(n,t,\"sort\",\"children\",\"value\"),n.nodes=n,n.links=lu,n}function ou(n){return n.children}function au(n){return n.value}function cu(n,t){return t.value-n.value}function lu(n){return mo.merge(n.map(function(n){return(n.children||[]).map(function(t){return{source:n,target:t}})}))}function su(n){return n.x}function fu(n){return n.y}function hu(n,t,e){n.y0=t,n.y=e}function gu(n){return mo.range(n.length)}function pu(n){for(var t=-1,e=n[0].length,r=[];++t<e;)r[t]=0;return r}function du(n){for(var t,e=1,r=0,u=n[0][1],i=n.length;i>e;++e)(t=n[e][1])>u&&(r=e,u=t);return r}function vu(n){return n.reduce(mu,0)}function mu(n,t){return n+t[1]}function yu(n,t){return Mu(n,Math.ceil(Math.log(t.length)/Math.LN2+1))}function Mu(n,t){for(var e=-1,r=+n[0],u=(n[1]-r)/t,i=[];++e<=t;)i[e]=u*e+r;return i}function xu(n){return[mo.min(n),mo.max(n)]}function bu(n,t){return n.parent==t.parent?1:2}function _u(n){var t=n.children;return t&&t.length?t[0]:n._tree.thread}function wu(n){var t,e=n.children;return e&&(t=e.length)?e[t-1]:n._tree.thread}function Su(n,t){var e=n.children;if(e&&(u=e.length))for(var r,u,i=-1;++i<u;)t(r=Su(e[i],t),n)>0&&(n=r);return n}function Eu(n,t){return n.x-t.x}function ku(n,t){return t.x-n.x}function Au(n,t){return n.depth-t.depth}function Nu(n,t){function e(n,r){var u=n.children;if(u&&(o=u.length))for(var i,o,a=null,c=-1;++c<o;)i=u[c],e(i,a),a=i;t(n,r)}e(n,null)}function Tu(n){for(var t,e=0,r=0,u=n.children,i=u.length;--i>=0;)t=u[i]._tree,t.prelim+=e,t.mod+=e,e+=t.shift+(r+=t.change)}function qu(n,t,e){n=n._tree,t=t._tree;var r=e/(t.number-n.number);n.change+=r,t.change-=r,t.shift+=e,t.prelim+=e,t.mod+=e}function zu(n,t,e){return n._tree.ancestor.parent==t.parent?n._tree.ancestor:e}function Cu(n,t){return n.value-t.value}function Du(n,t){var e=n._pack_next;n._pack_next=t,t._pack_prev=n,t._pack_next=e,e._pack_prev=t}function ju(n,t){n._pack_next=t,t._pack_prev=n}function Lu(n,t){var e=t.x-n.x,r=t.y-n.y,u=n.r+t.r;return.999*u*u>e*e+r*r}function Hu(n){function t(n){s=Math.min(n.x-n.r,s),f=Math.max(n.x+n.r,f),h=Math.min(n.y-n.r,h),g=Math.max(n.y+n.r,g)}if((e=n.children)&&(l=e.length)){var e,r,u,i,o,a,c,l,s=1/0,f=-1/0,h=1/0,g=-1/0;if(e.forEach(Fu),r=e[0],r.x=-r.r,r.y=0,t(r),l>1&&(u=e[1],u.x=u.r,u.y=0,t(u),l>2))for(i=e[2],Ru(r,u,i),t(i),Du(r,i),r._pack_prev=i,Du(i,u),u=r._pack_next,o=3;l>o;o++){Ru(r,u,i=e[o]);var p=0,d=1,v=1;for(a=u._pack_next;a!==u;a=a._pack_next,d++)if(Lu(a,i)){p=1;break}if(1==p)for(c=r._pack_prev;c!==a._pack_prev&&!Lu(c,i);c=c._pack_prev,v++);p?(v>d||d==v&&u.r<r.r?ju(r,u=a):ju(r=c,u),o--):(Du(r,i),u=i,t(i))}var m=(s+f)/2,y=(h+g)/2,M=0;for(o=0;l>o;o++)i=e[o],i.x-=m,i.y-=y,M=Math.max(M,i.r+Math.sqrt(i.x*i.x+i.y*i.y));n.r=M,e.forEach(Pu)}}function Fu(n){n._pack_next=n._pack_prev=n}function Pu(n){delete n._pack_next,delete n._pack_prev}function Ou(n,t,e,r){var u=n.children;if(n.x=t+=r*n.x,n.y=e+=r*n.y,n.r*=r,u)for(var i=-1,o=u.length;++i<o;)Ou(u[i],t,e,r)}function Ru(n,t,e){var r=n.r+e.r,u=t.x-n.x,i=t.y-n.y;if(r&&(u||i)){var o=t.r+e.r,a=u*u+i*i;o*=o,r*=r;var c=.5+(r-o)/(2*a),l=Math.sqrt(Math.max(0,2*o*(r+a)-(r-=a)*r-o*o))/(2*a);e.x=n.x+c*u+l*i,e.y=n.y+c*i-l*u}else e.x=n.x+r,e.y=n.y}function Yu(n){return 1+mo.max(n,function(n){return n.y})}function Iu(n){return n.reduce(function(n,t){return n+t.x},0)/n.length}function Uu(n){var t=n.children;return t&&t.length?Uu(t[0]):n}function Zu(n){var t,e=n.children;return e&&(t=e.length)?Zu(e[t-1]):n}function Vu(n){return{x:n.x,y:n.y,dx:n.dx,dy:n.dy}}function Xu(n,t){var e=n.x+t[3],r=n.y+t[0],u=n.dx-t[1]-t[3],i=n.dy-t[0]-t[2];return 0>u&&(e+=u/2,u=0),0>i&&(r+=i/2,i=0),{x:e,y:r,dx:u,dy:i}}function $u(n){var t=n[0],e=n[n.length-1];return e>t?[t,e]:[e,t]}function Bu(n){return n.rangeExtent?n.rangeExtent():$u(n.range())}function Wu(n,t,e,r){var u=e(n[0],n[1]),i=r(t[0],t[1]);return function(n){return i(u(n))}}function Ju(n,t){var e,r=0,u=n.length-1,i=n[r],o=n[u];return i>o&&(e=r,r=u,u=e,e=i,i=o,o=e),n[r]=t.floor(i),n[u]=t.ceil(o),n}function Gu(n){return n?{floor:function(t){return Math.floor(t/n)*n},ceil:function(t){return Math.ceil(t/n)*n}}:Tc}function Ku(n,t,e,r){var u=[],i=[],o=0,a=Math.min(n.length,t.length)-1;for(n[a]<n[0]&&(n=n.slice().reverse(),t=t.slice().reverse());++o<=a;)u.push(e(n[o-1],n[o])),i.push(r(t[o-1],t[o]));return function(t){var e=mo.bisect(n,t,1,a)-1;return i[e](u[e](t))}}function Qu(n,t,e,r){function u(){var u=Math.min(n.length,t.length)>2?Ku:Wu,c=r?Jr:Wr;return o=u(n,t,c,e),a=u(t,n,c,Er),i}function i(n){return o(n)}var o,a;return i.invert=function(n){return a(n)},i.domain=function(t){return arguments.length?(n=t.map(Number),u()):n},i.range=function(n){return arguments.length?(t=n,u()):t},i.rangeRound=function(n){return i.range(n).interpolate(Ur)},i.clamp=function(n){return arguments.length?(r=n,u()):r},i.interpolate=function(n){return arguments.length?(e=n,u()):e},i.ticks=function(t){return ri(n,t)},i.tickFormat=function(t,e){return ui(n,t,e)},i.nice=function(t){return ti(n,t),u()},i.copy=function(){return Qu(n,t,e,r)},u()}function ni(n,t){return mo.rebind(n,t,\"range\",\"rangeRound\",\"interpolate\",\"clamp\")}function ti(n,t){return Ju(n,Gu(ei(n,t)[2]))}function ei(n,t){null==t&&(t=10);var e=$u(n),r=e[1]-e[0],u=Math.pow(10,Math.floor(Math.log(r/t)/Math.LN10)),i=t/r*u;return.15>=i?u*=10:.35>=i?u*=5:.75>=i&&(u*=2),e[0]=Math.ceil(e[0]/u)*u,e[1]=Math.floor(e[1]/u)*u+.5*u,e[2]=u,e}function ri(n,t){return mo.range.apply(mo,ei(n,t))}function ui(n,t,e){var r=-Math.floor(Math.log(ei(n,t)[2])/Math.LN10+.01);return mo.format(e?e.replace(Aa,function(n,t,e,u,i,o,a,c,l,s){return[t,e,u,i,o,a,c,l||\".\"+(r-2*(\"%\"===s)),s].join(\"\")}):\",.\"+r+\"f\")}function ii(n,t,e,r){function u(n){return(e?Math.log(0>n?0:n):-Math.log(n>0?0:-n))/Math.log(t)}function i(n){return e?Math.pow(t,n):-Math.pow(t,-n)}function o(t){return n(u(t))}return o.invert=function(t){return i(n.invert(t))},o.domain=function(t){return arguments.length?(e=t[0]>=0,n.domain((r=t.map(Number)).map(u)),o):r},o.base=function(e){return arguments.length?(t=+e,n.domain(r.map(u)),o):t},o.nice=function(){var t=Ju(r.map(u),e?Math:zc);return n.domain(t),r=t.map(i),o},o.ticks=function(){var n=$u(r),o=[],a=n[0],c=n[1],l=Math.floor(u(a)),s=Math.ceil(u(c)),f=t%1?2:t;if(isFinite(s-l)){if(e){for(;s>l;l++)for(var h=1;f>h;h++)o.push(i(l)*h);o.push(i(l))}else for(o.push(i(l));l++<s;)for(var h=f-1;h>0;h--)o.push(i(l)*h);for(l=0;o[l]<a;l++);for(s=o.length;o[s-1]>c;s--);o=o.slice(l,s)}return o},o.tickFormat=function(n,t){if(!arguments.length)return qc;arguments.length<2?t=qc:\"function\"!=typeof t&&(t=mo.format(t));var r,a=Math.max(.1,n/o.ticks().length),c=e?(r=1e-12,Math.ceil):(r=-1e-12,Math.floor);return function(n){return n/i(c(u(n)+r))<=a?t(n):\"\"}},o.copy=function(){return ii(n.copy(),t,e,r)},ni(o,n)}function oi(n,t,e){function r(t){return n(u(t))}var u=ai(t),i=ai(1/t);return r.invert=function(t){return i(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain((e=t.map(Number)).map(u)),r):e},r.ticks=function(n){return ri(e,n)},r.tickFormat=function(n,t){return ui(e,n,t)},r.nice=function(n){return r.domain(ti(e,n))},r.exponent=function(o){return arguments.length?(u=ai(t=o),i=ai(1/t),n.domain(e.map(u)),r):t},r.copy=function(){return oi(n.copy(),t,e)},ni(r,n)}function ai(n){return function(t){return 0>t?-Math.pow(-t,n):Math.pow(t,n)}}function ci(n,t){function e(e){return o[((i.get(e)||\"range\"===t.t&&i.set(e,n.push(e)))-1)%o.length]}function r(t,e){return mo.range(n.length).map(function(n){return t+e*n})}var i,o,a;return e.domain=function(r){if(!arguments.length)return n;n=[],i=new u;for(var o,a=-1,c=r.length;++a<c;)i.has(o=r[a])||i.set(o,n.push(o));return e[t.t].apply(e,t.a)},e.range=function(n){return arguments.length?(o=n,a=0,t={t:\"range\",a:arguments},e):o},e.rangePoints=function(u,i){arguments.length<2&&(i=0);var c=u[0],l=u[1],s=(l-c)/(Math.max(1,n.length-1)+i);return o=r(n.length<2?(c+l)/2:c+s*i/2,s),a=0,t={t:\"rangePoints\",a:arguments},e},e.rangeBands=function(u,i,c){arguments.length<2&&(i=0),arguments.length<3&&(c=i);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=(f-s)/(n.length-i+2*c);return o=r(s+h*c,h),l&&o.reverse(),a=h*(1-i),t={t:\"rangeBands\",a:arguments},e},e.rangeRoundBands=function(u,i,c){arguments.length<2&&(i=0),arguments.length<3&&(c=i);var l=u[1]<u[0],s=u[l-0],f=u[1-l],h=Math.floor((f-s)/(n.length-i+2*c)),g=f-s-(n.length-i)*h;return o=r(s+Math.round(g/2),h),l&&o.reverse(),a=Math.round(h*(1-i)),t={t:\"rangeRoundBands\",a:arguments},e},e.rangeBand=function(){return a},e.rangeExtent=function(){return $u(t.a[0])},e.copy=function(){return ci(n,t)},e.domain(n)}function li(n,t){function e(){var e=0,i=t.length;for(u=[];++e<i;)u[e-1]=mo.quantile(n,e/i);return r}function r(n){return isNaN(n=+n)?void 0:t[mo.bisect(u,n)]}var u;return r.domain=function(t){return arguments.length?(n=t.filter(function(n){return!isNaN(n)}).sort(mo.ascending),e()):n},r.range=function(n){return arguments.length?(t=n,e()):t},r.quantiles=function(){return u},r.invertExtent=function(e){return e=t.indexOf(e),0>e?[0/0,0/0]:[e>0?u[e-1]:n[0],e<u.length?u[e]:n[n.length-1]]},r.copy=function(){return li(n,t)},e()}function si(n,t,e){function r(t){return e[Math.max(0,Math.min(o,Math.floor(i*(t-n))))]}function u(){return i=e.length/(t-n),o=e.length-1,r}var i,o;return r.domain=function(e){return arguments.length?(n=+e[0],t=+e[e.length-1],u()):[n,t]},r.range=function(n){return arguments.length?(e=n,u()):e},r.invertExtent=function(t){return t=e.indexOf(t),t=0>t?0/0:t/i+n,[t,t+1/i]},r.copy=function(){return si(n,t,e)},u()}function fi(n,t){function e(e){return e>=e?t[mo.bisect(n,e)]:void 0}return e.domain=function(t){return arguments.length?(n=t,e):n},e.range=function(n){return arguments.length?(t=n,e):t},e.invertExtent=function(e){return e=t.indexOf(e),[n[e-1],n[e]]},e.copy=function(){return fi(n,t)},e}function hi(n){function t(n){return+n}return t.invert=t,t.domain=t.range=function(e){return arguments.length?(n=e.map(t),t):n},t.ticks=function(t){return ri(n,t)},t.tickFormat=function(t,e){return ui(n,t,e)},t.copy=function(){return hi(n)},t}function gi(n){return n.innerRadius}function pi(n){return n.outerRadius}function di(n){return n.startAngle}function vi(n){return n.endAngle}function mi(n){for(var t,e,r,u=-1,i=n.length;++u<i;)t=n[u],e=t[0],r=t[1]+Hc,t[0]=e*Math.cos(r),t[1]=e*Math.sin(r);return n}function yi(n){function t(t){function c(){d.push(\"M\",a(n(m),f),s,l(n(v.reverse()),f),\"Z\")}for(var h,g,p,d=[],v=[],m=[],y=-1,M=t.length,x=pt(e),b=pt(u),_=e===r?function(){return g}:pt(r),w=u===i?function(){return p}:pt(i);++y<M;)o.call(this,h=t[y],y)?(v.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),m.push([+_.call(this,h,y),+w.call(this,h,y)])):v.length&&(c(),v=[],m=[]);return v.length&&c(),d.length?d.join(\"\"):null}var e=Ze,r=Ze,u=0,i=Ve,o=Vt,a=Xe,c=a.key,l=a,s=\"L\",f=.7;return t.x=function(n){return arguments.length?(e=r=n,t):r},t.x0=function(n){return arguments.length?(e=n,t):e},t.x1=function(n){return arguments.length?(r=n,t):r},t.y=function(n){return arguments.length?(u=i=n,t):i},t.y0=function(n){return arguments.length?(u=n,t):u},t.y1=function(n){return arguments.length?(i=n,t):i},t.defined=function(n){return arguments.length?(o=n,t):o},t.interpolate=function(n){return arguments.length?(c=\"function\"==typeof n?a=n:(a=gc.get(n)||Xe).key,l=a.reverse||a,s=a.closed?\"M\":\"L\",t):c},t.tension=function(n){return arguments.length?(f=n,t):f},t}function Mi(n){return n.radius}function xi(n){return[n.x,n.y]}function bi(n){return function(){var t=n.apply(this,arguments),e=t[0],r=t[1]+Hc;return[e*Math.cos(r),e*Math.sin(r)]}}function _i(){return 64}function wi(){return\"circle\"}function Si(n){var t=Math.sqrt(n/Bo);return\"M0,\"+t+\"A\"+t+\",\"+t+\" 0 1,1 0,\"+-t+\"A\"+t+\",\"+t+\" 0 1,1 0,\"+t+\"Z\"}function Ei(n,t){return Lo(n,Uc),n.id=t,n}function ki(n,t,e,r){var u=n.id;return N(n,\"function\"==typeof e?function(n,i,o){n.__transition__[u].tween.set(t,r(e.call(n,n.__data__,i,o)))}:(e=r(e),function(n){n.__transition__[u].tween.set(t,e)}))}function Ai(n){return null==n&&(n=\"\"),function(){this.textContent=n}}function Ni(n,t,e,r){var i=n.__transition__||(n.__transition__={active:0,count:0}),o=i[e];if(!o){var a=r.time;o=i[e]={tween:new u,time:a,ease:r.ease,delay:r.delay,duration:r.duration},++i.count,mo.timer(function(r){function u(r){return i.active>e?l():(i.active=e,o.event&&o.event.start.call(n,s,t),o.tween.forEach(function(e,r){(r=r.call(n,s,t))&&p.push(r)}),c(r||1)?1:(xt(c,h,a),void 0))}function c(r){if(i.active!==e)return l();for(var u=r/g,a=f(u),c=p.length;c>0;)p[--c].call(n,a);return u>=1?(o.event&&o.event.end.call(n,s,t),l()):void 0}function l(){return--i.count?delete i[e]:delete n.__transition__,1}var s=n.__data__,f=o.ease,h=o.delay,g=o.duration,p=[];return r>=h?u(r-h):(xt(u,h,a),void 0)},0,a)}}function Ti(n,t){n.attr(\"transform\",function(n){return\"translate(\"+t(n)+\",0)\"})}function qi(n,t){n.attr(\"transform\",function(n){return\"translate(0,\"+t(n)+\")\"})}function zi(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Ci(n,t,e){function r(t){var e=n(t),r=i(e,1);return r-t>t-e?e:r}function u(e){return t(e=n(new Jc(e-1)),1),e}function i(n,e){return t(n=new Jc(+n),e),n}function o(n,r,i){var o=u(n),a=[];if(i>1)for(;r>o;)e(o)%i||a.push(new Date(+o)),t(o,1);else for(;r>o;)a.push(new Date(+o)),t(o,1);return a}function a(n,t,e){try{Jc=zi;var r=new zi;return r._=n,o(r,t,e)}finally{Jc=Date}}n.floor=n,n.round=r,n.ceil=u,n.offset=i,n.range=o;var c=n.utc=Di(n);return c.floor=c,c.round=Di(r),c.ceil=Di(u),c.offset=Di(i),c.range=a,n}function Di(n){return function(t,e){try{Jc=zi;var r=new zi;return r._=t,n(r,e)._}finally{Jc=Date}}}function ji(n){function t(t){for(var r,u,i,o=[],a=-1,c=0;++a<e;)37===n.charCodeAt(a)&&(o.push(n.substring(c,a)),null!=(u=dl[r=n.charAt(++a)])&&(r=n.charAt(++a)),(i=vl[r])&&(r=i(t,null==u?\"e\"===r?\" \":\"0\":u)),o.push(r),c=a+1);return o.push(n.substring(c,a)),o.join(\"\")}var e=n.length;return t.parse=function(t){var e={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null},r=Li(e,n,t,0);if(r!=t.length)return null;\"p\"in e&&(e.H=e.H%12+12*e.p);var u=null!=e.Z&&Jc!==zi,i=new(u?zi:Jc);return\"j\"in e?i.setFullYear(e.y,0,e.j):\"w\"in e&&(\"W\"in e||\"U\"in e)?(i.setFullYear(e.y,0,1),i.setFullYear(e.y,0,\"W\"in e?(e.w+6)%7+7*e.W-(i.getDay()+5)%7:e.w+7*e.U-(i.getDay()+6)%7)):i.setFullYear(e.y,e.m,e.d),i.setHours(e.H+Math.floor(e.Z/100),e.M+e.Z%100,e.S,e.L),u?i._:i},t.toString=function(){return n},t}function Li(n,t,e,r){for(var u,i,o,a=0,c=t.length,l=e.length;c>a;){if(r>=l)return-1;if(u=t.charCodeAt(a++),37===u){if(o=t.charAt(a++),i=ml[o in dl?t.charAt(a++):o],!i||(r=i(n,e,r))<0)return-1}else if(u!=e.charCodeAt(r++))return-1}return r}function Hi(n){return new RegExp(\"^(?:\"+n.map(mo.requote).join(\"|\")+\")\",\"i\")}function Fi(n){for(var t=new u,e=-1,r=n.length;++e<r;)t.set(n[e].toLowerCase(),e);return t}function Pi(n,t,e){var r=0>n?\"-\":\"\",u=(r?-n:n)+\"\",i=u.length;return r+(e>i?new Array(e-i+1).join(t)+u:u)}function Oi(n,t,e){cl.lastIndex=0;var r=cl.exec(t.substring(e));return r?(n.w=ll.get(r[0].toLowerCase()),e+r[0].length):-1}function Ri(n,t,e){ol.lastIndex=0;var r=ol.exec(t.substring(e));return r?(n.w=al.get(r[0].toLowerCase()),e+r[0].length):-1}function Yi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+1));return r?(n.w=+r[0],e+r[0].length):-1}function Ii(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e));return r?(n.U=+r[0],e+r[0].length):-1}function Ui(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e));return r?(n.W=+r[0],e+r[0].length):-1}function Zi(n,t,e){hl.lastIndex=0;var r=hl.exec(t.substring(e));return r?(n.m=gl.get(r[0].toLowerCase()),e+r[0].length):-1}function Vi(n,t,e){sl.lastIndex=0;var r=sl.exec(t.substring(e));return r?(n.m=fl.get(r[0].toLowerCase()),e+r[0].length):-1}function Xi(n,t,e){return Li(n,vl.c.toString(),t,e)}function $i(n,t,e){return Li(n,vl.x.toString(),t,e)}function Bi(n,t,e){return Li(n,vl.X.toString(),t,e)}function Wi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+4));return r?(n.y=+r[0],e+r[0].length):-1}function Ji(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.y=Ki(+r[0]),e+r[0].length):-1}function Gi(n,t,e){return/^[+-]\\d{4}$/.test(t=t.substring(e,e+5))?(n.Z=+t,e+5):-1}function Ki(n){return n+(n>68?1900:2e3)}function Qi(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.m=r[0]-1,e+r[0].length):-1}function no(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.d=+r[0],e+r[0].length):-1}function to(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+3));return r?(n.j=+r[0],e+r[0].length):-1}function eo(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.H=+r[0],e+r[0].length):-1}function ro(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.M=+r[0],e+r[0].length):-1}function uo(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+2));return r?(n.S=+r[0],e+r[0].length):-1}function io(n,t,e){yl.lastIndex=0;var r=yl.exec(t.substring(e,e+3));return r?(n.L=+r[0],e+r[0].length):-1}function oo(n,t,e){var r=Ml.get(t.substring(e,e+=2).toLowerCase());return null==r?-1:(n.p=r,e)}function ao(n){var t=n.getTimezoneOffset(),e=t>0?\"-\":\"+\",r=~~(Math.abs(t)/60),u=Math.abs(t)%60;return e+Pi(r,\"0\",2)+Pi(u,\"0\",2)}function co(n,t,e){pl.lastIndex=0;var r=pl.exec(t.substring(e,e+1));return r?e+r[0].length:-1}function lo(n){function t(n){try{Jc=zi;var t=new Jc;return t._=n,e(t)}finally{Jc=Date}}var e=ji(n);return t.parse=function(n){try{Jc=zi;var t=e.parse(n);return t&&t._}finally{Jc=Date}},t.toString=e.toString,t}function so(n){return n.toISOString()}function fo(n,t,e){function r(t){return n(t)}function u(n,e){var r=n[1]-n[0],u=r/e,i=mo.bisect(bl,u);return i==bl.length?[t.year,ei(n.map(function(n){return n/31536e6}),e)[2]]:i?t[u/bl[i-1]<bl[i]/u?i-1:i]:[El,ei(n,e)[2]]}return r.invert=function(t){return ho(n.invert(t))},r.domain=function(t){return arguments.length?(n.domain(t),r):n.domain().map(ho)},r.nice=function(n,t){function e(e){return!isNaN(e)&&!n.range(e,ho(+e+1),t).length}var i=r.domain(),o=$u(i),a=null==n?u(o,10):\"number\"==typeof n&&u(o,n);return a&&(n=a[0],t=a[1]),r.domain(Ju(i,t>1?{floor:function(t){for(;e(t=n.floor(t));)t=ho(t-1);return t},ceil:function(t){for(;e(t=n.ceil(t));)t=ho(+t+1);return t}}:n))},r.ticks=function(n,t){var e=$u(r.domain()),i=null==n?u(e,10):\"number\"==typeof n?u(e,n):!n.range&&[{range:n},t];return i&&(n=i[0],t=i[1]),n.range(e[0],ho(+e[1]+1),1>t?1:t)},r.tickFormat=function(){return e},r.copy=function(){return fo(n.copy(),t,e)},ni(r,n)}function ho(n){return new Date(n)}function go(n){return function(t){for(var e=n.length-1,r=n[e];!r[1](t);)r=n[--e];return r[0](t)}}function po(n){return JSON.parse(n.responseText)}function vo(n){var t=xo.createRange();return t.selectNode(xo.body),t.createContextualFragment(n.responseText)}var mo={version:\"3.3.6\"};Date.now||(Date.now=function(){return+new Date});var yo=[].slice,Mo=function(n){return yo.call(n)},xo=document,bo=xo.documentElement,_o=window;try{Mo(bo.childNodes)[0].nodeType}catch(wo){Mo=function(n){for(var t=n.length,e=new Array(t);t--;)e[t]=n[t];return e}}try{xo.createElement(\"div\").style.setProperty(\"opacity\",0,\"\")}catch(So){var Eo=_o.Element.prototype,ko=Eo.setAttribute,Ao=Eo.setAttributeNS,No=_o.CSSStyleDeclaration.prototype,To=No.setProperty;Eo.setAttribute=function(n,t){ko.call(this,n,t+\"\")},Eo.setAttributeNS=function(n,t,e){Ao.call(this,n,t,e+\"\")},No.setProperty=function(n,t,e){To.call(this,n,t+\"\",e)}}mo.ascending=function(n,t){return t>n?-1:n>t?1:n>=t?0:0/0},mo.descending=function(n,t){return n>t?-1:t>n?1:t>=n?0:0/0},mo.min=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&e>r&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&e>r&&(e=r)}return e},mo.max=function(n,t){var e,r,u=-1,i=n.length;if(1===arguments.length){for(;++u<i&&!(null!=(e=n[u])&&e>=e);)e=void 0;for(;++u<i;)null!=(r=n[u])&&r>e&&(e=r)}else{for(;++u<i&&!(null!=(e=t.call(n,n[u],u))&&e>=e);)e=void 0;for(;++u<i;)null!=(r=t.call(n,n[u],u))&&r>e&&(e=r)}return e},mo.extent=function(n,t){var e,r,u,i=-1,o=n.length;if(1===arguments.length){for(;++i<o&&!(null!=(e=u=n[i])&&e>=e);)e=u=void 0;for(;++i<o;)null!=(r=n[i])&&(e>r&&(e=r),r>u&&(u=r))}else{for(;++i<o&&!(null!=(e=u=t.call(n,n[i],i))&&e>=e);)e=void 0;for(;++i<o;)null!=(r=t.call(n,n[i],i))&&(e>r&&(e=r),r>u&&(u=r))}return[e,u]},mo.sum=function(n,t){var e,r=0,u=n.length,i=-1;if(1===arguments.length)for(;++i<u;)isNaN(e=+n[i])||(r+=e);else for(;++i<u;)isNaN(e=+t.call(n,n[i],i))||(r+=e);return r},mo.mean=function(t,e){var r,u=t.length,i=0,o=-1,a=0;if(1===arguments.length)for(;++o<u;)n(r=t[o])&&(i+=(r-i)/++a);else for(;++o<u;)n(r=e.call(t,t[o],o))&&(i+=(r-i)/++a);return a?i:void 0},mo.quantile=function(n,t){var e=(n.length-1)*t+1,r=Math.floor(e),u=+n[r-1],i=e-r;return i?u+i*(n[r]-u):u},mo.median=function(t,e){return arguments.length>1&&(t=t.map(e)),t=t.filter(n),t.length?mo.quantile(t.sort(mo.ascending),.5):void 0},mo.bisector=function(n){return{left:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;n.call(t,t[i],i)<e?r=i+1:u=i}return r},right:function(t,e,r,u){for(arguments.length<3&&(r=0),arguments.length<4&&(u=t.length);u>r;){var i=r+u>>>1;e<n.call(t,t[i],i)?u=i:r=i+1}return r}}};var qo=mo.bisector(function(n){return n});mo.bisectLeft=qo.left,mo.bisect=mo.bisectRight=qo.right,mo.shuffle=function(n){for(var t,e,r=n.length;r;)e=0|Math.random()*r--,t=n[r],n[r]=n[e],n[e]=t;return n},mo.permute=function(n,t){for(var e=t.length,r=new Array(e);e--;)r[e]=n[t[e]];return r},mo.pairs=function(n){for(var t,e=0,r=n.length-1,u=n[0],i=new Array(0>r?0:r);r>e;)i[e]=[t=u,u=n[++e]];return i},mo.zip=function(){if(!(u=arguments.length))return[];for(var n=-1,e=mo.min(arguments,t),r=new Array(e);++n<e;)for(var u,i=-1,o=r[n]=new Array(u);++i<u;)o[i]=arguments[i][n];return r},mo.transpose=function(n){return mo.zip.apply(mo,n)},mo.keys=function(n){var t=[];for(var e in n)t.push(e);return t},mo.values=function(n){var t=[];for(var e in n)t.push(n[e]);return t},mo.entries=function(n){var t=[];\n    for(var e in n)t.push({key:e,value:n[e]});return t},mo.merge=function(n){return Array.prototype.concat.apply([],n)},mo.range=function(n,t,r){if(arguments.length<3&&(r=1,arguments.length<2&&(t=n,n=0)),1/0===(t-n)/r)throw new Error(\"infinite range\");var u,i=[],o=e(Math.abs(r)),a=-1;if(n*=o,t*=o,r*=o,0>r)for(;(u=n+r*++a)>t;)i.push(u/o);else for(;(u=n+r*++a)<t;)i.push(u/o);return i},mo.map=function(n){var t=new u;if(n instanceof u)n.forEach(function(n,e){t.set(n,e)});else for(var e in n)t.set(e,n[e]);return t},r(u,{has:function(n){return zo+n in this},get:function(n){return this[zo+n]},set:function(n,t){return this[zo+n]=t},remove:function(n){return n=zo+n,n in this&&delete this[n]},keys:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},values:function(){var n=[];return this.forEach(function(t,e){n.push(e)}),n},entries:function(){var n=[];return this.forEach(function(t,e){n.push({key:t,value:e})}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Co&&n.call(this,t.substring(1),this[t])}});var zo=\"\\x00\",Co=zo.charCodeAt(0);mo.nest=function(){function n(t,a,c){if(c>=o.length)return r?r.call(i,a):e?a.sort(e):a;for(var l,s,f,h,g=-1,p=a.length,d=o[c++],v=new u;++g<p;)(h=v.get(l=d(s=a[g])))?h.push(s):v.set(l,[s]);return t?(s=t(),f=function(e,r){s.set(e,n(t,r,c))}):(s={},f=function(e,r){s[e]=n(t,r,c)}),v.forEach(f),s}function t(n,e){if(e>=o.length)return n;var r=[],u=a[e++];return n.forEach(function(n,u){r.push({key:n,values:t(u,e)})}),u?r.sort(function(n,t){return u(n.key,t.key)}):r}var e,r,i={},o=[],a=[];return i.map=function(t,e){return n(e,t,0)},i.entries=function(e){return t(n(mo.map,e,0),0)},i.key=function(n){return o.push(n),i},i.sortKeys=function(n){return a[o.length-1]=n,i},i.sortValues=function(n){return e=n,i},i.rollup=function(n){return r=n,i},i},mo.set=function(n){var t=new i;if(n)for(var e=0,r=n.length;r>e;++e)t.add(n[e]);return t},r(i,{has:function(n){return zo+n in this},add:function(n){return this[zo+n]=!0,n},remove:function(n){return n=zo+n,n in this&&delete this[n]},values:function(){var n=[];return this.forEach(function(t){n.push(t)}),n},forEach:function(n){for(var t in this)t.charCodeAt(0)===Co&&n.call(this,t.substring(1))}}),mo.behavior={},mo.rebind=function(n,t){for(var e,r=1,u=arguments.length;++r<u;)n[e=arguments[r]]=o(n,t,t[e]);return n};var Do=[\"webkit\",\"ms\",\"moz\",\"Moz\",\"o\",\"O\"];mo.dispatch=function(){for(var n=new l,t=-1,e=arguments.length;++t<e;)n[arguments[t]]=s(n);return n},l.prototype.on=function(n,t){var e=n.indexOf(\".\"),r=\"\";if(e>=0&&(r=n.substring(e+1),n=n.substring(0,e)),n)return arguments.length<2?this[n].on(r):this[n].on(r,t);if(2===arguments.length){if(null==t)for(n in this)this.hasOwnProperty(n)&&this[n].on(r,null);return this}},mo.event=null,mo.requote=function(n){return n.replace(jo,\"\\\\$&\")};var jo=/[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g,Lo={}.__proto__?function(n,t){n.__proto__=t}:function(n,t){for(var e in t)n[e]=t[e]},Ho=function(n,t){return t.querySelector(n)},Fo=function(n,t){return t.querySelectorAll(n)},Po=bo[a(bo,\"matchesSelector\")],Oo=function(n,t){return Po.call(n,t)};\"function\"==typeof Sizzle&&(Ho=function(n,t){return Sizzle(n,t)[0]||null},Fo=function(n,t){return Sizzle.uniqueSort(Sizzle(n,t))},Oo=Sizzle.matchesSelector),mo.selection=function(){return Uo};var Ro=mo.selection.prototype=[];Ro.select=function(n){var t,e,r,u,i=[];n=d(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]),t.parentNode=(r=this[o]).parentNode;for(var c=-1,l=r.length;++c<l;)(u=r[c])?(t.push(e=n.call(u,u.__data__,c,o)),e&&\"__data__\"in u&&(e.__data__=u.__data__)):t.push(null)}return p(i)},Ro.selectAll=function(n){var t,e,r=[];n=v(n);for(var u=-1,i=this.length;++u<i;)for(var o=this[u],a=-1,c=o.length;++a<c;)(e=o[a])&&(r.push(t=Mo(n.call(e,e.__data__,a,u))),t.parentNode=e);return p(r)};var Yo={svg:\"http://www.w3.org/2000/svg\",xhtml:\"http://www.w3.org/1999/xhtml\",xlink:\"http://www.w3.org/1999/xlink\",xml:\"http://www.w3.org/XML/1998/namespace\",xmlns:\"http://www.w3.org/2000/xmlns/\"};mo.ns={prefix:Yo,qualify:function(n){var t=n.indexOf(\":\"),e=n;return t>=0&&(e=n.substring(0,t),n=n.substring(t+1)),Yo.hasOwnProperty(e)?{space:Yo[e],local:n}:n}},Ro.attr=function(n,t){if(arguments.length<2){if(\"string\"==typeof n){var e=this.node();return n=mo.ns.qualify(n),n.local?e.getAttributeNS(n.space,n.local):e.getAttribute(n)}for(t in n)this.each(m(t,n[t]));return this}return this.each(m(n,t))},Ro.classed=function(n,t){if(arguments.length<2){if(\"string\"==typeof n){var e=this.node(),r=(n=n.trim().split(/^|\\s+/g)).length,u=-1;if(t=e.classList){for(;++u<r;)if(!t.contains(n[u]))return!1}else for(t=e.getAttribute(\"class\");++u<r;)if(!M(n[u]).test(t))return!1;return!0}for(t in n)this.each(x(t,n[t]));return this}return this.each(x(n,t))},Ro.style=function(n,t,e){var r=arguments.length;if(3>r){if(\"string\"!=typeof n){2>r&&(t=\"\");for(e in n)this.each(_(e,n[e],t));return this}if(2>r)return _o.getComputedStyle(this.node(),null).getPropertyValue(n);e=\"\"}return this.each(_(n,t,e))},Ro.property=function(n,t){if(arguments.length<2){if(\"string\"==typeof n)return this.node()[n];for(t in n)this.each(w(t,n[t]));return this}return this.each(w(n,t))},Ro.text=function(n){return arguments.length?this.each(\"function\"==typeof n?function(){var t=n.apply(this,arguments);this.textContent=null==t?\"\":t}:null==n?function(){this.textContent=\"\"}:function(){this.textContent=n}):this.node().textContent},Ro.html=function(n){return arguments.length?this.each(\"function\"==typeof n?function(){var t=n.apply(this,arguments);this.innerHTML=null==t?\"\":t}:null==n?function(){this.innerHTML=\"\"}:function(){this.innerHTML=n}):this.node().innerHTML},Ro.append=function(n){return n=S(n),this.select(function(){return this.appendChild(n.apply(this,arguments))})},Ro.insert=function(n,t){return n=S(n),t=d(t),this.select(function(){return this.insertBefore(n.apply(this,arguments),t.apply(this,arguments))})},Ro.remove=function(){return this.each(function(){var n=this.parentNode;n&&n.removeChild(this)})},Ro.data=function(n,t){function e(n,e){var r,i,o,a=n.length,f=e.length,h=Math.min(a,f),g=new Array(f),p=new Array(f),d=new Array(a);if(t){var v,m=new u,y=new u,M=[];for(r=-1;++r<a;)v=t.call(i=n[r],i.__data__,r),m.has(v)?d[r]=i:m.set(v,i),M.push(v);for(r=-1;++r<f;)v=t.call(e,o=e[r],r),(i=m.get(v))?(g[r]=i,i.__data__=o):y.has(v)||(p[r]=E(o)),y.set(v,o),m.remove(v);for(r=-1;++r<a;)m.has(M[r])&&(d[r]=n[r])}else{for(r=-1;++r<h;)i=n[r],o=e[r],i?(i.__data__=o,g[r]=i):p[r]=E(o);for(;f>r;++r)p[r]=E(e[r]);for(;a>r;++r)d[r]=n[r]}p.update=g,p.parentNode=g.parentNode=d.parentNode=n.parentNode,c.push(p),l.push(g),s.push(d)}var r,i,o=-1,a=this.length;if(!arguments.length){for(n=new Array(a=(r=this[0]).length);++o<a;)(i=r[o])&&(n[o]=i.__data__);return n}var c=T([]),l=p([]),s=p([]);if(\"function\"==typeof n)for(;++o<a;)e(r=this[o],n.call(r,r.parentNode.__data__,o));else for(;++o<a;)e(r=this[o],n);return l.enter=function(){return c},l.exit=function(){return s},l},Ro.datum=function(n){return arguments.length?this.property(\"__data__\",n):this.property(\"__data__\")},Ro.filter=function(n){var t,e,r,u=[];\"function\"!=typeof n&&(n=k(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]),t.parentNode=(e=this[i]).parentNode;for(var a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a)&&t.push(r)}return p(u)},Ro.order=function(){for(var n=-1,t=this.length;++n<t;)for(var e,r=this[n],u=r.length-1,i=r[u];--u>=0;)(e=r[u])&&(i&&i!==e.nextSibling&&i.parentNode.insertBefore(e,i),i=e);return this},Ro.sort=function(n){n=A.apply(this,arguments);for(var t=-1,e=this.length;++t<e;)this[t].sort(n);return this.order()},Ro.each=function(n){return N(this,function(t,e,r){n.call(t,t.__data__,e,r)})},Ro.call=function(n){var t=Mo(arguments);return n.apply(t[0]=this,t),this},Ro.empty=function(){return!this.node()},Ro.node=function(){for(var n=0,t=this.length;t>n;n++)for(var e=this[n],r=0,u=e.length;u>r;r++){var i=e[r];if(i)return i}return null},Ro.size=function(){var n=0;return this.each(function(){++n}),n};var Io=[];mo.selection.enter=T,mo.selection.enter.prototype=Io,Io.append=Ro.append,Io.empty=Ro.empty,Io.node=Ro.node,Io.call=Ro.call,Io.size=Ro.size,Io.select=function(n){for(var t,e,r,u,i,o=[],a=-1,c=this.length;++a<c;){r=(u=this[a]).update,o.push(t=[]),t.parentNode=u.parentNode;for(var l=-1,s=u.length;++l<s;)(i=u[l])?(t.push(r[l]=e=n.call(u.parentNode,i.__data__,l,a)),e.__data__=i.__data__):t.push(null)}return p(o)},Io.insert=function(n,t){return arguments.length<2&&(t=q(this)),Ro.insert.call(this,n,t)},Ro.transition=function(){for(var n,t,e=Oc||++Zc,r=[],u=Rc||{time:Date.now(),ease:Cr,delay:0,duration:250},i=-1,o=this.length;++i<o;){r.push(n=[]);for(var a=this[i],c=-1,l=a.length;++c<l;)(t=a[c])&&Ni(t,c,e,u),n.push(t)}return Ei(r,e)},Ro.interrupt=function(){return this.each(z)},mo.select=function(n){var t=[\"string\"==typeof n?Ho(n,xo):n];return t.parentNode=bo,p([t])},mo.selectAll=function(n){var t=Mo(\"string\"==typeof n?Fo(n,xo):n);return t.parentNode=bo,p([t])};var Uo=mo.select(bo);Ro.on=function(n,t,e){var r=arguments.length;if(3>r){if(\"string\"!=typeof n){2>r&&(t=!1);for(e in n)this.each(C(e,n[e],t));return this}if(2>r)return(r=this.node()[\"__on\"+n])&&r._;e=!1}return this.each(C(n,t,e))};var Zo=mo.map({mouseenter:\"mouseover\",mouseleave:\"mouseout\"});Zo.forEach(function(n){\"on\"+n in xo&&Zo.remove(n)});var Vo=a(bo.style,\"userSelect\"),Xo=0;mo.mouse=function(n){return H(n,h())};var $o=/WebKit/.test(_o.navigator.userAgent)?-1:0;mo.touches=function(n,t){return arguments.length<2&&(t=h().touches),t?Mo(t).map(function(t){var e=H(n,t);return e.identifier=t.identifier,e}):[]},mo.behavior.drag=function(){function n(){this.on(\"mousedown.drag\",o).on(\"touchstart.drag\",a)}function t(){return mo.event.changedTouches[0].identifier}function e(n,t){return mo.touches(n).filter(function(n){return n.identifier===t})[0]}function r(n,t,e,r){return function(){function o(){var n=t(s,g),e=n[0]-d[0],r=n[1]-d[1];v|=e|r,d=n,f({type:\"drag\",x:n[0]+c[0],y:n[1]+c[1],dx:e,dy:r})}function a(){m.on(e+\".\"+p,null).on(r+\".\"+p,null),y(v&&mo.event.target===h),f({type:\"dragend\"})}var c,l=this,s=l.parentNode,f=u.of(l,arguments),h=mo.event.target,g=n(),p=null==g?\"drag\":\"drag-\"+g,d=t(s,g),v=0,m=mo.select(_o).on(e+\".\"+p,o).on(r+\".\"+p,a),y=L();i?(c=i.apply(l,arguments),c=[c.x-d[0],c.y-d[1]]):c=[0,0],f({type:\"dragstart\"})}}var u=g(n,\"drag\",\"dragstart\",\"dragend\"),i=null,o=r(c,mo.mouse,\"mousemove\",\"mouseup\"),a=r(t,e,\"touchmove\",\"touchend\");return n.origin=function(t){return arguments.length?(i=t,n):i},mo.rebind(n,u,\"on\")};var Bo=Math.PI,Wo=2*Bo,Jo=Bo/2,Go=1e-6,Ko=Go*Go,Qo=Bo/180,na=180/Bo,ta=Math.SQRT2,ea=2,ra=4;mo.interpolateZoom=function(n,t){function e(n){var t=n*y;if(m){var e=Y(d),o=i/(ea*h)*(e*I(ta*t+d)-R(d));return[r+o*l,u+o*s,i*e/Y(ta*t+d)]}return[r+n*l,u+n*s,i*Math.exp(ta*t)]}var r=n[0],u=n[1],i=n[2],o=t[0],a=t[1],c=t[2],l=o-r,s=a-u,f=l*l+s*s,h=Math.sqrt(f),g=(c*c-i*i+ra*f)/(2*i*ea*h),p=(c*c-i*i-ra*f)/(2*c*ea*h),d=Math.log(Math.sqrt(g*g+1)-g),v=Math.log(Math.sqrt(p*p+1)-p),m=v-d,y=(m||Math.log(c/i))/ta;return e.duration=1e3*y,e},mo.behavior.zoom=function(){function n(n){n.on(A,l).on(oa+\".zoom\",h).on(N,p).on(\"dblclick.zoom\",d).on(q,s)}function t(n){return[(n[0]-S.x)/S.k,(n[1]-S.y)/S.k]}function e(n){return[n[0]*S.k+S.x,n[1]*S.k+S.y]}function r(n){S.k=Math.max(k[0],Math.min(k[1],n))}function u(n,t){t=e(t),S.x+=n[0]-t[0],S.y+=n[1]-t[1]}function i(){b&&b.domain(x.range().map(function(n){return(n-S.x)/S.k}).map(x.invert)),w&&w.domain(_.range().map(function(n){return(n-S.y)/S.k}).map(_.invert))}function o(n){n({type:\"zoomstart\"})}function a(n){i(),n({type:\"zoom\",scale:S.k,translate:[S.x,S.y]})}function c(n){n({type:\"zoomend\"})}function l(){function n(){s=1,u(mo.mouse(r),h),a(i)}function e(){f.on(N,_o===r?p:null).on(T,null),g(s&&mo.event.target===l),c(i)}var r=this,i=C.of(r,arguments),l=mo.event.target,s=0,f=mo.select(_o).on(N,n).on(T,e),h=t(mo.mouse(r)),g=L();z.call(r),o(i)}function s(){function n(){var n=mo.touches(p);return g=S.k,n.forEach(function(n){n.identifier in v&&(v[n.identifier]=t(n))}),n}function e(){for(var t=mo.event.changedTouches,e=0,i=t.length;i>e;++e)v[t[e].identifier]=null;var o=n(),c=Date.now();if(1===o.length){if(500>c-M){var l=o[0],s=v[l.identifier];r(2*S.k),u(l,s),f(),a(d)}M=c}else if(o.length>1){var l=o[0],h=o[1],g=l[0]-h[0],p=l[1]-h[1];m=g*g+p*p}}function i(){for(var n,t,e,i,o=mo.touches(p),c=0,l=o.length;l>c;++c,i=null)if(e=o[c],i=v[e.identifier]){if(t)break;n=e,t=i}if(i){var s=(s=e[0]-n[0])*s+(s=e[1]-n[1])*s,f=m&&Math.sqrt(s/m);n=[(n[0]+e[0])/2,(n[1]+e[1])/2],t=[(t[0]+i[0])/2,(t[1]+i[1])/2],r(f*g)}M=null,u(n,t),a(d)}function h(){if(mo.event.touches.length){for(var t=mo.event.changedTouches,e=0,r=t.length;r>e;++e)delete v[t[e].identifier];for(var u in v)return void n()}_.on(x,null).on(b,null),w.on(A,l).on(q,s),E(),c(d)}var g,p=this,d=C.of(p,arguments),v={},m=0,y=mo.event.changedTouches[0].identifier,x=\"touchmove.zoom-\"+y,b=\"touchend.zoom-\"+y,_=mo.select(_o).on(x,i).on(b,h),w=mo.select(p).on(A,null).on(q,e),E=L();z.call(p),e(),o(d)}function h(){var n=C.of(this,arguments);y?clearTimeout(y):(z.call(this),o(n)),y=setTimeout(function(){y=null,c(n)},50),f();var e=m||mo.mouse(this);v||(v=t(e)),r(Math.pow(2,.002*ua())*S.k),u(e,v),a(n)}function p(){v=null}function d(){var n=C.of(this,arguments),e=mo.mouse(this),i=t(e),l=Math.log(S.k)/Math.LN2;o(n),r(Math.pow(2,mo.event.shiftKey?Math.ceil(l)-1:Math.floor(l)+1)),u(e,i),a(n),c(n)}var v,m,y,M,x,b,_,w,S={x:0,y:0,k:1},E=[960,500],k=ia,A=\"mousedown.zoom\",N=\"mousemove.zoom\",T=\"mouseup.zoom\",q=\"touchstart.zoom\",C=g(n,\"zoomstart\",\"zoom\",\"zoomend\");return n.event=function(n){n.each(function(){var n=C.of(this,arguments),t=S;Oc?mo.select(this).transition().each(\"start.zoom\",function(){S=this.__chart__||{x:0,y:0,k:1},o(n)}).tween(\"zoom:zoom\",function(){var e=E[0],r=E[1],u=e/2,i=r/2,o=mo.interpolateZoom([(u-S.x)/S.k,(i-S.y)/S.k,e/S.k],[(u-t.x)/t.k,(i-t.y)/t.k,e/t.k]);return function(t){var r=o(t),c=e/r[2];this.__chart__=S={x:u-r[0]*c,y:i-r[1]*c,k:c},a(n)}}).each(\"end.zoom\",function(){c(n)}):(this.__chart__=S,o(n),a(n),c(n))})},n.translate=function(t){return arguments.length?(S={x:+t[0],y:+t[1],k:S.k},i(),n):[S.x,S.y]},n.scale=function(t){return arguments.length?(S={x:S.x,y:S.y,k:+t},i(),n):S.k},n.scaleExtent=function(t){return arguments.length?(k=null==t?ia:[+t[0],+t[1]],n):k},n.center=function(t){return arguments.length?(m=t&&[+t[0],+t[1]],n):m},n.size=function(t){return arguments.length?(E=t&&[+t[0],+t[1]],n):E},n.x=function(t){return arguments.length?(b=t,x=t.copy(),S={x:0,y:0,k:1},n):b},n.y=function(t){return arguments.length?(w=t,_=t.copy(),S={x:0,y:0,k:1},n):w},mo.rebind(n,C,\"on\")};var ua,ia=[0,1/0],oa=\"onwheel\"in xo?(ua=function(){return-mo.event.deltaY*(mo.event.deltaMode?120:1)},\"wheel\"):\"onmousewheel\"in xo?(ua=function(){return mo.event.wheelDelta},\"mousewheel\"):(ua=function(){return-mo.event.detail},\"MozMousePixelScroll\");Z.prototype.toString=function(){return this.rgb()+\"\"},mo.hsl=function(n,t,e){return 1===arguments.length?n instanceof X?V(n.h,n.s,n.l):lt(\"\"+n,st,V):V(+n,+t,+e)};var aa=X.prototype=new Z;aa.brighter=function(n){return n=Math.pow(.7,arguments.length?n:1),V(this.h,this.s,this.l/n)},aa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),V(this.h,this.s,n*this.l)},aa.rgb=function(){return $(this.h,this.s,this.l)},mo.hcl=function(n,t,e){return 1===arguments.length?n instanceof W?B(n.h,n.c,n.l):n instanceof K?nt(n.l,n.a,n.b):nt((n=ft((n=mo.rgb(n)).r,n.g,n.b)).l,n.a,n.b):B(+n,+t,+e)};var ca=W.prototype=new Z;ca.brighter=function(n){return B(this.h,this.c,Math.min(100,this.l+la*(arguments.length?n:1)))},ca.darker=function(n){return B(this.h,this.c,Math.max(0,this.l-la*(arguments.length?n:1)))},ca.rgb=function(){return J(this.h,this.c,this.l).rgb()},mo.lab=function(n,t,e){return 1===arguments.length?n instanceof K?G(n.l,n.a,n.b):n instanceof W?J(n.l,n.c,n.h):ft((n=mo.rgb(n)).r,n.g,n.b):G(+n,+t,+e)};var la=18,sa=.95047,fa=1,ha=1.08883,ga=K.prototype=new Z;ga.brighter=function(n){return G(Math.min(100,this.l+la*(arguments.length?n:1)),this.a,this.b)},ga.darker=function(n){return G(Math.max(0,this.l-la*(arguments.length?n:1)),this.a,this.b)},ga.rgb=function(){return Q(this.l,this.a,this.b)},mo.rgb=function(n,t,e){return 1===arguments.length?n instanceof at?ot(n.r,n.g,n.b):lt(\"\"+n,ot,$):ot(~~n,~~t,~~e)};var pa=at.prototype=new Z;pa.brighter=function(n){n=Math.pow(.7,arguments.length?n:1);var t=this.r,e=this.g,r=this.b,u=30;return t||e||r?(t&&u>t&&(t=u),e&&u>e&&(e=u),r&&u>r&&(r=u),ot(Math.min(255,~~(t/n)),Math.min(255,~~(e/n)),Math.min(255,~~(r/n)))):ot(u,u,u)},pa.darker=function(n){return n=Math.pow(.7,arguments.length?n:1),ot(~~(n*this.r),~~(n*this.g),~~(n*this.b))},pa.hsl=function(){return st(this.r,this.g,this.b)},pa.toString=function(){return\"#\"+ct(this.r)+ct(this.g)+ct(this.b)};var da=mo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});da.forEach(function(n,t){da.set(n,ut(t))}),mo.functor=pt,mo.xhr=vt(dt),mo.dsv=function(n,t){function e(n,e,i){arguments.length<3&&(i=e,e=null);var o=mo.xhr(n,t,i);return o.row=function(n){return arguments.length?o.response(null==(e=n)?r:u(n)):e},o.row(e)}function r(n){return e.parse(n.responseText)}function u(n){return function(t){return e.parse(t.responseText,n)}}function o(t){return t.map(a).join(n)}function a(n){return c.test(n)?'\"'+n.replace(/\\\"/g,'\"\"')+'\"':n}var c=new RegExp('[\"'+n+\"\\n]\"),l=n.charCodeAt(0);return e.parse=function(n,t){var r;return e.parseRows(n,function(n,e){if(r)return r(n,e-1);var u=new Function(\"d\",\"return {\"+n.map(function(n,t){return JSON.stringify(n)+\": d[\"+t+\"]\"}).join(\",\")+\"}\");r=t?function(n,e){return t(u(n),e)}:u})},e.parseRows=function(n,t){function e(){if(s>=c)return o;if(u)return u=!1,i;var t=s;if(34===n.charCodeAt(t)){for(var e=t;e++<c;)if(34===n.charCodeAt(e)){if(34!==n.charCodeAt(e+1))break;++e}s=e+2;var r=n.charCodeAt(e+1);return 13===r?(u=!0,10===n.charCodeAt(e+2)&&++s):10===r&&(u=!0),n.substring(t+1,e).replace(/\"\"/g,'\"')}for(;c>s;){var r=n.charCodeAt(s++),a=1;if(10===r)u=!0;else if(13===r)u=!0,10===n.charCodeAt(s)&&(++s,++a);else if(r!==l)continue;return n.substring(t,s-a)}return n.substring(t)}for(var r,u,i={},o={},a=[],c=n.length,s=0,f=0;(r=e())!==o;){for(var h=[];r!==i&&r!==o;)h.push(r),r=e();(!t||(h=t(h,f++)))&&a.push(h)}return a},e.format=function(t){if(Array.isArray(t[0]))return e.formatRows(t);var r=new i,u=[];return t.forEach(function(n){for(var t in n)r.has(t)||u.push(r.add(t))}),[u.map(a).join(n)].concat(t.map(function(t){return u.map(function(n){return a(t[n])}).join(n)})).join(\"\\n\")},e.formatRows=function(n){return n.map(o).join(\"\\n\")},e},mo.csv=mo.dsv(\",\",\"text/csv\"),mo.tsv=mo.dsv(\"\t\",\"text/tab-separated-values\");var va,ma,ya,Ma,xa,ba=_o[a(_o,\"requestAnimationFrame\")]||function(n){setTimeout(n,17)};mo.timer=function(n,t,e){var r=arguments.length;2>r&&(t=0),3>r&&(e=Date.now());var u=e+t,i={callback:n,time:u,next:null};ma?ma.next=i:va=i,ma=i,ya||(Ma=clearTimeout(Ma),ya=1,ba(Mt))},mo.timer.flush=function(){bt(),_t()};var _a=\".\",wa=\",\",Sa=[3,3],Ea=\"$\",ka=[\"y\",\"z\",\"a\",\"f\",\"p\",\"n\",\"\\xb5\",\"m\",\"\",\"k\",\"M\",\"G\",\"T\",\"P\",\"E\",\"Z\",\"Y\"].map(wt);mo.formatPrefix=function(n,t){var e=0;return n&&(0>n&&(n*=-1),t&&(n=mo.round(n,St(n,t))),e=1+Math.floor(1e-12+Math.log(n)/Math.LN10),e=Math.max(-24,Math.min(24,3*Math.floor((0>=e?e+1:e-1)/3)))),ka[8+e/3]},mo.round=function(n,t){return t?Math.round(n*(t=Math.pow(10,t)))/t:Math.round(n)},mo.format=function(n){var t=Aa.exec(n),e=t[1]||\" \",r=t[2]||\">\",u=t[3]||\"\",i=t[4]||\"\",o=t[5],a=+t[6],c=t[7],l=t[8],s=t[9],f=1,h=\"\",g=!1;switch(l&&(l=+l.substring(1)),(o||\"0\"===e&&\"=\"===r)&&(o=e=\"0\",r=\"=\",c&&(a-=Math.floor((a-1)/4))),s){case\"n\":c=!0,s=\"g\";break;case\"%\":f=100,h=\"%\",s=\"f\";break;case\"p\":f=100,h=\"%\",s=\"r\";break;case\"b\":case\"o\":case\"x\":case\"X\":\"#\"===i&&(i=\"0\"+s.toLowerCase());case\"c\":case\"d\":g=!0,l=0;break;case\"s\":f=-1,s=\"r\"}\"#\"===i?i=\"\":\"$\"===i&&(i=Ea),\"r\"!=s||l||(s=\"g\"),null!=l&&(\"g\"==s?l=Math.max(1,Math.min(21,l)):(\"e\"==s||\"f\"==s)&&(l=Math.max(0,Math.min(20,l)))),s=Na.get(s)||Et;var p=o&&c;return function(n){if(g&&n%1)return\"\";var t=0>n||0===n&&0>1/n?(n=-n,\"-\"):u;if(0>f){var d=mo.formatPrefix(n,l);n=d.scale(n),h=d.symbol}else n*=f;n=s(n,l);var v=n.lastIndexOf(\".\"),m=0>v?n:n.substring(0,v),y=0>v?\"\":_a+n.substring(v+1);!o&&c&&(m=Ta(m));var M=i.length+m.length+y.length+(p?0:t.length),x=a>M?new Array(M=a-M+1).join(e):\"\";return p&&(m=Ta(x+m)),t+=i,n=m+y,(\"<\"===r?t+n+x:\">\"===r?x+t+n:\"^\"===r?x.substring(0,M>>=1)+t+n+x.substring(M):t+(p?n:x+n))+h}};var Aa=/(?:([^{])?([<>=^]))?([+\\- ])?([$#])?(0)?(\\d+)?(,)?(\\.-?\\d+)?([a-z%])?/i,Na=mo.map({b:function(n){return n.toString(2)},c:function(n){return String.fromCharCode(n)},o:function(n){return n.toString(8)},x:function(n){return n.toString(16)},X:function(n){return n.toString(16).toUpperCase()},g:function(n,t){return n.toPrecision(t)},e:function(n,t){return n.toExponential(t)},f:function(n,t){return n.toFixed(t)},r:function(n,t){return(n=mo.round(n,St(n,t))).toFixed(Math.max(0,Math.min(20,St(n*(1+1e-15),t))))}}),Ta=dt;if(Sa){var qa=Sa.length;Ta=function(n){for(var t=n.length,e=[],r=0,u=Sa[0];t>0&&u>0;)e.push(n.substring(t-=u,t+u)),u=Sa[r=(r+1)%qa];return e.reverse().join(wa)}}mo.geo={},kt.prototype={s:0,t:0,add:function(n){At(n,this.t,za),At(za.s,this.s,this),this.s?this.t+=za.t:this.s=za.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var za=new kt;mo.geo.stream=function(n,t){n&&Ca.hasOwnProperty(n.type)?Ca[n.type](n,t):Nt(n,t)};var Ca={Feature:function(n,t){Nt(n.geometry,t)},FeatureCollection:function(n,t){for(var e=n.features,r=-1,u=e.length;++r<u;)Nt(e[r].geometry,t)}},Da={Sphere:function(n,t){t.sphere()},Point:function(n,t){n=n.coordinates,t.point(n[0],n[1],n[2])},MultiPoint:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)n=e[r],t.point(n[0],n[1],n[2])},LineString:function(n,t){Tt(n.coordinates,t,0)},MultiLineString:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)Tt(e[r],t,0)},Polygon:function(n,t){qt(n.coordinates,t)},MultiPolygon:function(n,t){for(var e=n.coordinates,r=-1,u=e.length;++r<u;)qt(e[r],t)},GeometryCollection:function(n,t){for(var e=n.geometries,r=-1,u=e.length;++r<u;)Nt(e[r],t)}};mo.geo.area=function(n){return ja=0,mo.geo.stream(n,Ha),ja};var ja,La=new kt,Ha={sphere:function(){ja+=4*Bo},point:c,lineStart:c,lineEnd:c,polygonStart:function(){La.reset(),Ha.lineStart=zt},polygonEnd:function(){var n=2*La;ja+=0>n?4*Bo+n:n,Ha.lineStart=Ha.lineEnd=Ha.point=c}};mo.geo.bounds=function(){function n(n,t){M.push(x=[s=n,h=n]),f>t&&(f=t),t>g&&(g=t)}function t(t,e){var r=Ct([t*Qo,e*Qo]);if(m){var u=jt(m,r),i=[u[1],-u[0],0],o=jt(i,u);Ft(o),o=Pt(o);var c=t-p,l=c>0?1:-1,d=o[0]*na*l,v=Math.abs(c)>180;if(v^(d>l*p&&l*t>d)){var y=o[1]*na;y>g&&(g=y)}else if(d=(d+360)%360-180,v^(d>l*p&&l*t>d)){var y=-o[1]*na;f>y&&(f=y)}else f>e&&(f=e),e>g&&(g=e);v?p>t?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t):h>=s?(s>t&&(s=t),t>h&&(h=t)):t>p?a(s,t)>a(s,h)&&(h=t):a(t,h)>a(s,h)&&(s=t)}else n(t,e);m=r,p=t}function e(){b.point=t}function r(){x[0]=s,x[1]=h,b.point=n,m=null}function u(n,e){if(m){var r=n-p;y+=Math.abs(r)>180?r+(r>0?360:-360):r}else d=n,v=e;Ha.point(n,e),t(n,e)}function i(){Ha.lineStart()}function o(){u(d,v),Ha.lineEnd(),Math.abs(y)>Go&&(s=-(h=180)),x[0]=s,x[1]=h,m=null}function a(n,t){return(t-=n)<0?t+360:t}function c(n,t){return n[0]-t[0]}function l(n,t){return t[0]<=t[1]?t[0]<=n&&n<=t[1]:n<t[0]||t[1]<n}var s,f,h,g,p,d,v,m,y,M,x,b={point:n,lineStart:e,lineEnd:r,polygonStart:function(){b.point=u,b.lineStart=i,b.lineEnd=o,y=0,Ha.polygonStart()},polygonEnd:function(){Ha.polygonEnd(),b.point=n,b.lineStart=e,b.lineEnd=r,0>La?(s=-(h=180),f=-(g=90)):y>Go?g=90:-Go>y&&(f=-90),x[0]=s,x[1]=h}};return function(n){g=h=-(s=f=1/0),M=[],mo.geo.stream(n,b);var t=M.length;if(t){M.sort(c);for(var e,r=1,u=M[0],i=[u];t>r;++r)e=M[r],l(e[0],u)||l(e[1],u)?(a(u[0],e[1])>a(u[0],u[1])&&(u[1]=e[1]),a(e[0],u[1])>a(u[0],u[1])&&(u[0]=e[0])):i.push(u=e);for(var o,e,p=-1/0,t=i.length-1,r=0,u=i[t];t>=r;u=e,++r)e=i[r],(o=a(u[1],e[0]))>p&&(p=o,s=e[0],h=u[1])}return M=x=null,1/0===s||1/0===f?[[0/0,0/0],[0/0,0/0]]:[[s,f],[h,g]]}}(),mo.geo.centroid=function(n){Fa=Pa=Oa=Ra=Ya=Ia=Ua=Za=Va=Xa=$a=0,mo.geo.stream(n,Ba);var t=Va,e=Xa,r=$a,u=t*t+e*e+r*r;return Ko>u&&(t=Ia,e=Ua,r=Za,Go>Pa&&(t=Oa,e=Ra,r=Ya),u=t*t+e*e+r*r,Ko>u)?[0/0,0/0]:[Math.atan2(e,t)*na,O(r/Math.sqrt(u))*na]};var Fa,Pa,Oa,Ra,Ya,Ia,Ua,Za,Va,Xa,$a,Ba={sphere:c,point:Rt,lineStart:It,lineEnd:Ut,polygonStart:function(){Ba.lineStart=Zt},polygonEnd:function(){Ba.lineStart=It}},Wa=Bt(Vt,Qt,te,[-Bo,-Bo/2]),Ja=1e9;mo.geo.clipExtent=function(){var n,t,e,r,u,i,o={stream:function(n){return u&&(u.valid=!1),u=i(n),u.valid=!0,u},extent:function(a){return arguments.length?(i=re(n=+a[0][0],t=+a[0][1],e=+a[1][0],r=+a[1][1]),u&&(u.valid=!1,u=null),o):[[n,t],[e,r]]}};return o.extent([[0,0],[960,500]])},(mo.geo.conicEqualArea=function(){return oe(ae)}).raw=ae,mo.geo.albers=function(){return mo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},mo.geo.albersUsa=function(){function n(n){var i=n[0],o=n[1];return t=null,e(i,o),t||(r(i,o),t)||u(i,o),t}var t,e,r,u,i=mo.geo.albers(),o=mo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),a=mo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),c={point:function(n,e){t=[n,e]}};return n.invert=function(n){var t=i.scale(),e=i.translate(),r=(n[0]-e[0])/t,u=(n[1]-e[1])/t;return(u>=.12&&.234>u&&r>=-.425&&-.214>r?o:u>=.166&&.234>u&&r>=-.214&&-.115>r?a:i).invert(n)},n.stream=function(n){var t=i.stream(n),e=o.stream(n),r=a.stream(n);return{point:function(n,u){t.point(n,u),e.point(n,u),r.point(n,u)},sphere:function(){t.sphere(),e.sphere(),r.sphere()},lineStart:function(){t.lineStart(),e.lineStart(),r.lineStart()},lineEnd:function(){t.lineEnd(),e.lineEnd(),r.lineEnd()},polygonStart:function(){t.polygonStart(),e.polygonStart(),r.polygonStart()},polygonEnd:function(){t.polygonEnd(),e.polygonEnd(),r.polygonEnd()}}},n.precision=function(t){return arguments.length?(i.precision(t),o.precision(t),a.precision(t),n):i.precision()},n.scale=function(t){return arguments.length?(i.scale(t),o.scale(.35*t),a.scale(t),n.translate(i.translate())):i.scale()},n.translate=function(t){if(!arguments.length)return i.translate();var l=i.scale(),s=+t[0],f=+t[1];return e=i.translate(t).clipExtent([[s-.455*l,f-.238*l],[s+.455*l,f+.238*l]]).stream(c).point,r=o.translate([s-.307*l,f+.201*l]).clipExtent([[s-.425*l+Go,f+.12*l+Go],[s-.214*l-Go,f+.234*l-Go]]).stream(c).point,u=a.translate([s-.205*l,f+.212*l]).clipExtent([[s-.214*l+Go,f+.166*l+Go],[s-.115*l-Go,f+.234*l-Go]]).stream(c).point,n},n.scale(1070)};var Ga,Ka,Qa,nc,tc,ec,rc={point:c,lineStart:c,lineEnd:c,polygonStart:function(){Ka=0,rc.lineStart=ce},polygonEnd:function(){rc.lineStart=rc.lineEnd=rc.point=c,Ga+=Math.abs(Ka/2)}},uc={point:le,lineStart:c,lineEnd:c,polygonStart:c,polygonEnd:c},ic={point:he,lineStart:ge,lineEnd:pe,polygonStart:function(){ic.lineStart=de},polygonEnd:function(){ic.point=he,ic.lineStart=ge,ic.lineEnd=pe}};mo.geo.transform=function(n){return{stream:function(t){var e=new ye(t);for(var r in n)e[r]=n[r];return e}}},ye.prototype={point:function(n,t){this.stream.point(n,t)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},mo.geo.path=function(){function n(n){return n&&(\"function\"==typeof a&&i.pointRadius(+a.apply(this,arguments)),o&&o.valid||(o=u(i)),mo.geo.stream(n,o)),i.result()}function t(){return o=null,n}var e,r,u,i,o,a=4.5;return n.area=function(n){return Ga=0,mo.geo.stream(n,u(rc)),Ga},n.centroid=function(n){return Oa=Ra=Ya=Ia=Ua=Za=Va=Xa=$a=0,mo.geo.stream(n,u(ic)),$a?[Va/$a,Xa/$a]:Za?[Ia/Za,Ua/Za]:Ya?[Oa/Ya,Ra/Ya]:[0/0,0/0]},n.bounds=function(n){return tc=ec=-(Qa=nc=1/0),mo.geo.stream(n,u(uc)),[[Qa,nc],[tc,ec]]},n.projection=function(n){return arguments.length?(u=(e=n)?n.stream||Me(n):dt,t()):e},n.context=function(n){return arguments.length?(i=null==(r=n)?new se:new ve(n),\"function\"!=typeof a&&i.pointRadius(a),t()):r},n.pointRadius=function(t){return arguments.length?(a=\"function\"==typeof t?t:(i.pointRadius(+t),+t),n):a},n.projection(mo.geo.albersUsa()).context(null)},mo.geo.projection=xe,mo.geo.projectionMutator=be,(mo.geo.equirectangular=function(){return xe(we)}).raw=we.invert=we,mo.geo.rotation=function(n){function t(t){return t=n(t[0]*Qo,t[1]*Qo),t[0]*=na,t[1]*=na,t}return n=Ee(n[0]%360*Qo,n[1]*Qo,n.length>2?n[2]*Qo:0),t.invert=function(t){return t=n.invert(t[0]*Qo,t[1]*Qo),t[0]*=na,t[1]*=na,t},t},Se.invert=we,mo.geo.circle=function(){function n(){var n=\"function\"==typeof r?r.apply(this,arguments):r,t=Ee(-n[0]*Qo,-n[1]*Qo,0).invert,u=[];return e(null,null,1,{point:function(n,e){u.push(n=t(n,e)),n[0]*=na,n[1]*=na}}),{type:\"Polygon\",coordinates:[u]}}var t,e,r=[0,0],u=6;return n.origin=function(t){return arguments.length?(r=t,n):r},n.angle=function(r){return arguments.length?(e=Te((t=+r)*Qo,u*Qo),n):t},n.precision=function(r){return arguments.length?(e=Te(t*Qo,(u=+r)*Qo),n):u},n.angle(90)},mo.geo.distance=function(n,t){var e,r=(t[0]-n[0])*Qo,u=n[1]*Qo,i=t[1]*Qo,o=Math.sin(r),a=Math.cos(r),c=Math.sin(u),l=Math.cos(u),s=Math.sin(i),f=Math.cos(i);return Math.atan2(Math.sqrt((e=f*o)*e+(e=l*s-c*f*a)*e),c*s+l*f*a)},mo.geo.graticule=function(){function n(){return{type:\"MultiLineString\",coordinates:t()}}function t(){return mo.range(Math.ceil(i/v)*v,u,v).map(h).concat(mo.range(Math.ceil(l/m)*m,c,m).map(g)).concat(mo.range(Math.ceil(r/p)*p,e,p).filter(function(n){return Math.abs(n%v)>Go\n}).map(s)).concat(mo.range(Math.ceil(a/d)*d,o,d).filter(function(n){return Math.abs(n%m)>Go}).map(f))}var e,r,u,i,o,a,c,l,s,f,h,g,p=10,d=p,v=90,m=360,y=2.5;return n.lines=function(){return t().map(function(n){return{type:\"LineString\",coordinates:n}})},n.outline=function(){return{type:\"Polygon\",coordinates:[h(i).concat(g(c).slice(1),h(u).reverse().slice(1),g(l).reverse().slice(1))]}},n.extent=function(t){return arguments.length?n.majorExtent(t).minorExtent(t):n.minorExtent()},n.majorExtent=function(t){return arguments.length?(i=+t[0][0],u=+t[1][0],l=+t[0][1],c=+t[1][1],i>u&&(t=i,i=u,u=t),l>c&&(t=l,l=c,c=t),n.precision(y)):[[i,l],[u,c]]},n.minorExtent=function(t){return arguments.length?(r=+t[0][0],e=+t[1][0],a=+t[0][1],o=+t[1][1],r>e&&(t=r,r=e,e=t),a>o&&(t=a,a=o,o=t),n.precision(y)):[[r,a],[e,o]]},n.step=function(t){return arguments.length?n.majorStep(t).minorStep(t):n.minorStep()},n.majorStep=function(t){return arguments.length?(v=+t[0],m=+t[1],n):[v,m]},n.minorStep=function(t){return arguments.length?(p=+t[0],d=+t[1],n):[p,d]},n.precision=function(t){return arguments.length?(y=+t,s=ze(a,o,90),f=Ce(r,e,y),h=ze(l,c,90),g=Ce(i,u,y),n):y},n.majorExtent([[-180,-90+Go],[180,90-Go]]).minorExtent([[-180,-80-Go],[180,80+Go]])},mo.geo.greatArc=function(){function n(){return{type:\"LineString\",coordinates:[t||r.apply(this,arguments),e||u.apply(this,arguments)]}}var t,e,r=De,u=je;return n.distance=function(){return mo.geo.distance(t||r.apply(this,arguments),e||u.apply(this,arguments))},n.source=function(e){return arguments.length?(r=e,t=\"function\"==typeof e?null:e,n):r},n.target=function(t){return arguments.length?(u=t,e=\"function\"==typeof t?null:t,n):u},n.precision=function(){return arguments.length?n:0},n},mo.geo.interpolate=function(n,t){return Le(n[0]*Qo,n[1]*Qo,t[0]*Qo,t[1]*Qo)},mo.geo.length=function(n){return oc=0,mo.geo.stream(n,ac),oc};var oc,ac={sphere:c,point:c,lineStart:He,lineEnd:c,polygonStart:c,polygonEnd:c},cc=Fe(function(n){return Math.sqrt(2/(1+n))},function(n){return 2*Math.asin(n/2)});(mo.geo.azimuthalEqualArea=function(){return xe(cc)}).raw=cc;var lc=Fe(function(n){var t=Math.acos(n);return t&&t/Math.sin(t)},dt);(mo.geo.azimuthalEquidistant=function(){return xe(lc)}).raw=lc,(mo.geo.conicConformal=function(){return oe(Pe)}).raw=Pe,(mo.geo.conicEquidistant=function(){return oe(Oe)}).raw=Oe;var sc=Fe(function(n){return 1/n},Math.atan);(mo.geo.gnomonic=function(){return xe(sc)}).raw=sc,Re.invert=function(n,t){return[n,2*Math.atan(Math.exp(t))-Jo]},(mo.geo.mercator=function(){return Ye(Re)}).raw=Re;var fc=Fe(function(){return 1},Math.asin);(mo.geo.orthographic=function(){return xe(fc)}).raw=fc;var hc=Fe(function(n){return 1/(1+n)},function(n){return 2*Math.atan(n)});(mo.geo.stereographic=function(){return xe(hc)}).raw=hc,Ie.invert=function(n,t){return[Math.atan2(R(n),Math.cos(t)),O(Math.sin(t)/Y(n))]},(mo.geo.transverseMercator=function(){return Ye(Ie)}).raw=Ie,mo.geom={},mo.svg={},mo.svg.line=function(){return Ue(dt)};var gc=mo.map({linear:Xe,\"linear-closed\":$e,step:Be,\"step-before\":We,\"step-after\":Je,basis:er,\"basis-open\":rr,\"basis-closed\":ur,bundle:ir,cardinal:Qe,\"cardinal-open\":Ge,\"cardinal-closed\":Ke,monotone:fr});gc.forEach(function(n,t){t.key=n,t.closed=/-closed$/.test(n)});var pc=[0,2/3,1/3,0],dc=[0,1/3,2/3,0],vc=[0,1/6,2/3,1/6];mo.geom.hull=function(n){function t(n){if(n.length<3)return[];var t,u,i,o,a,c,l,s,f,h,g,p,d=pt(e),v=pt(r),m=n.length,y=m-1,M=[],x=[],b=0;if(d===Ze&&r===Ve)t=n;else for(i=0,t=[];m>i;++i)t.push([+d.call(this,u=n[i],i),+v.call(this,u,i)]);for(i=1;m>i;++i)(t[i][1]<t[b][1]||t[i][1]==t[b][1]&&t[i][0]<t[b][0])&&(b=i);for(i=0;m>i;++i)i!==b&&(c=t[i][1]-t[b][1],a=t[i][0]-t[b][0],M.push({angle:Math.atan2(c,a),index:i}));for(M.sort(function(n,t){return n.angle-t.angle}),g=M[0].angle,h=M[0].index,f=0,i=1;y>i;++i){if(o=M[i].index,g==M[i].angle){if(a=t[h][0]-t[b][0],c=t[h][1]-t[b][1],l=t[o][0]-t[b][0],s=t[o][1]-t[b][1],a*a+c*c>=l*l+s*s){M[i].index=-1;continue}M[f].index=-1}g=M[i].angle,f=i,h=o}for(x.push(b),i=0,o=0;2>i;++o)M[o].index>-1&&(x.push(M[o].index),i++);for(p=x.length;y>o;++o)if(!(M[o].index<0)){for(;!hr(x[p-2],x[p-1],M[o].index,t);)--p;x[p++]=M[o].index}var _=[];for(i=p-1;i>=0;--i)_.push(n[x[i]]);return _}var e=Ze,r=Ve;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t)},mo.geom.polygon=function(n){return Lo(n,mc),n};var mc=mo.geom.polygon.prototype=[];mc.area=function(){for(var n,t=-1,e=this.length,r=this[e-1],u=0;++t<e;)n=r,r=this[t],u+=n[1]*r[0]-n[0]*r[1];return.5*u},mc.centroid=function(n){var t,e,r=-1,u=this.length,i=0,o=0,a=this[u-1];for(arguments.length||(n=-1/(6*this.area()));++r<u;)t=a,a=this[r],e=t[0]*a[1]-a[0]*t[1],i+=(t[0]+a[0])*e,o+=(t[1]+a[1])*e;return[i*n,o*n]},mc.clip=function(n){for(var t,e,r,u,i,o,a=dr(n),c=-1,l=this.length-dr(this),s=this[l-1];++c<l;){for(t=n.slice(),n.length=0,u=this[c],i=t[(r=t.length-a)-1],e=-1;++e<r;)o=t[e],gr(o,s,u)?(gr(i,s,u)||n.push(pr(i,o,s,u)),n.push(o)):gr(i,s,u)&&n.push(pr(i,o,s,u)),i=o;a&&n.push(n[0]),s=u}return n},mo.geom.delaunay=function(n){var t=n.map(function(){return[]}),e=[];return vr(n,function(e){t[e.region.l.index].push(n[e.region.r.index])}),t.forEach(function(t,r){var u=n[r],i=u[0],o=u[1];t.forEach(function(n){n.angle=Math.atan2(n[0]-i,n[1]-o)}),t.sort(function(n,t){return n.angle-t.angle});for(var a=0,c=t.length-1;c>a;a++)e.push([u,t[a],t[a+1]])}),e},mo.geom.voronoi=function(n){function t(n){var t,i,o,a=n.map(function(){return[]}),c=pt(e),l=pt(r),s=n.length,f=1e6;if(c===Ze&&l===Ve)t=n;else for(t=new Array(s),o=0;s>o;++o)t[o]=[+c.call(this,i=n[o],o),+l.call(this,i,o)];if(vr(t,function(n){var t,e,r,u,i,o;1===n.a&&n.b>=0?(t=n.ep.r,e=n.ep.l):(t=n.ep.l,e=n.ep.r),1===n.a?(i=t?t.y:-f,r=n.c-n.b*i,o=e?e.y:f,u=n.c-n.b*o):(r=t?t.x:-f,i=n.c-n.a*r,u=e?e.x:f,o=n.c-n.a*u);var c=[r,i],l=[u,o];a[n.region.l.index].push(c,l),a[n.region.r.index].push(c,l)}),a=a.map(function(n,e){var r=t[e][0],u=t[e][1],i=n.map(function(n){return Math.atan2(n[0]-r,n[1]-u)}),o=mo.range(n.length).sort(function(n,t){return i[n]-i[t]});return o.filter(function(n,t){return!t||i[n]-i[o[t-1]]>Go}).map(function(t){return n[t]})}),a.forEach(function(n,e){var r=n.length;if(!r)return n.push([-f,-f],[-f,f],[f,f],[f,-f]);if(!(r>2)){var u=t[e],i=n[0],o=n[1],a=u[0],c=u[1],l=i[0],s=i[1],h=o[0],g=o[1],p=Math.abs(h-l),d=g-s;if(Math.abs(d)<Go){var v=s>c?-f:f;n.push([-f,v],[f,v])}else if(Go>p){var m=l>a?-f:f;n.push([m,-f],[m,f])}else{var v=(l-a)*(g-s)>(h-l)*(s-c)?f:-f,y=Math.abs(d)-p;Math.abs(y)<Go?n.push([0>d?v:-v,v]):(y>0&&(v*=-1),n.push([-f,v],[f,v]))}}}),u)for(o=0;s>o;++o)u.clip(a[o]);for(o=0;s>o;++o)a[o].point=n[o];return a}var e=Ze,r=Ve,u=null;return arguments.length?t(n):(t.x=function(n){return arguments.length?(e=n,t):e},t.y=function(n){return arguments.length?(r=n,t):r},t.clipExtent=function(n){if(!arguments.length)return u&&[u[0],u[2]];if(null==n)u=null;else{var e=+n[0][0],r=+n[0][1],i=+n[1][0],o=+n[1][1];u=mo.geom.polygon([[e,r],[e,o],[i,o],[i,r]])}return t},t.size=function(n){return arguments.length?t.clipExtent(n&&[[0,0],n]):u&&u[2]},t.links=function(n){var t,u,i,o=n.map(function(){return[]}),a=[],c=pt(e),l=pt(r),s=n.length;if(c===Ze&&l===Ve)t=n;else for(t=new Array(s),i=0;s>i;++i)t[i]=[+c.call(this,u=n[i],i),+l.call(this,u,i)];return vr(t,function(t){var e=t.region.l.index,r=t.region.r.index;o[e][r]||(o[e][r]=o[r][e]=!0,a.push({source:n[e],target:n[r]}))}),a},t.triangles=function(n){if(e===Ze&&r===Ve)return mo.geom.delaunay(n);for(var t,u=new Array(c),i=pt(e),o=pt(r),a=-1,c=n.length;++a<c;)(u[a]=[+i.call(this,t=n[a],a),+o.call(this,t,a)]).data=t;return mo.geom.delaunay(u).map(function(n){return n.map(function(n){return n.data})})},t)};var yc={l:\"r\",r:\"l\"};mo.geom.quadtree=function(n,t,e,r,u){function i(n){function i(n,t,e,r,u,i,o,a){if(!isNaN(e)&&!isNaN(r))if(n.leaf){var c=n.x,s=n.y;if(null!=c)if(Math.abs(c-e)+Math.abs(s-r)<.01)l(n,t,e,r,u,i,o,a);else{var f=n.point;n.x=n.y=n.point=null,l(n,f,c,s,u,i,o,a),l(n,t,e,r,u,i,o,a)}else n.x=e,n.y=r,n.point=t}else l(n,t,e,r,u,i,o,a)}function l(n,t,e,r,u,o,a,c){var l=.5*(u+a),s=.5*(o+c),f=e>=l,h=r>=s,g=(h<<1)+f;n.leaf=!1,n=n.nodes[g]||(n.nodes[g]=Mr()),f?u=l:a=l,h?o=s:c=s,i(n,t,e,r,u,o,a,c)}var s,f,h,g,p,d,v,m,y,M=pt(a),x=pt(c);if(null!=t)d=t,v=e,m=r,y=u;else if(m=y=-(d=v=1/0),f=[],h=[],p=n.length,o)for(g=0;p>g;++g)s=n[g],s.x<d&&(d=s.x),s.y<v&&(v=s.y),s.x>m&&(m=s.x),s.y>y&&(y=s.y),f.push(s.x),h.push(s.y);else for(g=0;p>g;++g){var b=+M(s=n[g],g),_=+x(s,g);d>b&&(d=b),v>_&&(v=_),b>m&&(m=b),_>y&&(y=_),f.push(b),h.push(_)}var w=m-d,S=y-v;w>S?y=v+w:m=d+S;var E=Mr();if(E.add=function(n){i(E,n,+M(n,++g),+x(n,g),d,v,m,y)},E.visit=function(n){xr(n,E,d,v,m,y)},g=-1,null==t){for(;++g<p;)i(E,n[g],f[g],h[g],d,v,m,y);--g}else n.forEach(E.add);return f=h=n=s=null,E}var o,a=Ze,c=Ve;return(o=arguments.length)?(a=mr,c=yr,3===o&&(u=e,r=t,e=t=0),i(n)):(i.x=function(n){return arguments.length?(a=n,i):a},i.y=function(n){return arguments.length?(c=n,i):c},i.extent=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=+n[0][0],e=+n[0][1],r=+n[1][0],u=+n[1][1]),i):null==t?null:[[t,e],[r,u]]},i.size=function(n){return arguments.length?(null==n?t=e=r=u=null:(t=e=0,r=+n[0],u=+n[1]),i):null==t?null:[r-t,u-e]},i)},mo.interpolateRgb=br,mo.interpolateObject=_r,mo.interpolateNumber=wr,mo.interpolateString=Sr;var Mc=/[-+]?(?:\\d+\\.?\\d*|\\.?\\d+)(?:[eE][-+]?\\d+)?/g;mo.interpolate=Er,mo.interpolators=[function(n,t){var e=typeof t;return(\"string\"===e?da.has(t)||/^(#|rgb\\(|hsl\\()/.test(t)?br:Sr:t instanceof Z?br:\"object\"===e?Array.isArray(t)?kr:_r:wr)(n,t)}],mo.interpolateArray=kr;var xc=function(){return dt},bc=mo.map({linear:xc,poly:Dr,quad:function(){return qr},cubic:function(){return zr},sin:function(){return jr},exp:function(){return Lr},circle:function(){return Hr},elastic:Fr,back:Pr,bounce:function(){return Or}}),_c=mo.map({\"in\":dt,out:Nr,\"in-out\":Tr,\"out-in\":function(n){return Tr(Nr(n))}});mo.ease=function(n){var t=n.indexOf(\"-\"),e=t>=0?n.substring(0,t):n,r=t>=0?n.substring(t+1):\"in\";return e=bc.get(e)||xc,r=_c.get(r)||dt,Ar(r(e.apply(null,Array.prototype.slice.call(arguments,1))))},mo.interpolateHcl=Rr,mo.interpolateHsl=Yr,mo.interpolateLab=Ir,mo.interpolateRound=Ur,mo.transform=function(n){var t=xo.createElementNS(mo.ns.prefix.svg,\"g\");return(mo.transform=function(n){if(null!=n){t.setAttribute(\"transform\",n);var e=t.transform.baseVal.consolidate()}return new Zr(e?e.matrix:wc)})(n)},Zr.prototype.toString=function(){return\"translate(\"+this.translate+\")rotate(\"+this.rotate+\")skewX(\"+this.skew+\")scale(\"+this.scale+\")\"};var wc={a:1,b:0,c:0,d:1,e:0,f:0};mo.interpolateTransform=Br,mo.layout={},mo.layout.bundle=function(){return function(n){for(var t=[],e=-1,r=n.length;++e<r;)t.push(Gr(n[e]));return t}},mo.layout.chord=function(){function n(){var n,l,f,h,g,p={},d=[],v=mo.range(i),m=[];for(e=[],r=[],n=0,h=-1;++h<i;){for(l=0,g=-1;++g<i;)l+=u[h][g];d.push(l),m.push(mo.range(i)),n+=l}for(o&&v.sort(function(n,t){return o(d[n],d[t])}),a&&m.forEach(function(n,t){n.sort(function(n,e){return a(u[t][n],u[t][e])})}),n=(Wo-s*i)/n,l=0,h=-1;++h<i;){for(f=l,g=-1;++g<i;){var y=v[h],M=m[y][g],x=u[y][M],b=l,_=l+=x*n;p[y+\"-\"+M]={index:y,subindex:M,startAngle:b,endAngle:_,value:x}}r[y]={index:y,startAngle:f,endAngle:l,value:(l-f)/n},l+=s}for(h=-1;++h<i;)for(g=h-1;++g<i;){var w=p[h+\"-\"+g],S=p[g+\"-\"+h];(w.value||S.value)&&e.push(w.value<S.value?{source:S,target:w}:{source:w,target:S})}c&&t()}function t(){e.sort(function(n,t){return c((n.source.value+n.target.value)/2,(t.source.value+t.target.value)/2)})}var e,r,u,i,o,a,c,l={},s=0;return l.matrix=function(n){return arguments.length?(i=(u=n)&&u.length,e=r=null,l):u},l.padding=function(n){return arguments.length?(s=n,e=r=null,l):s},l.sortGroups=function(n){return arguments.length?(o=n,e=r=null,l):o},l.sortSubgroups=function(n){return arguments.length?(a=n,e=null,l):a},l.sortChords=function(n){return arguments.length?(c=n,e&&t(),l):c},l.chords=function(){return e||n(),e},l.groups=function(){return r||n(),r},l},mo.layout.force=function(){function n(n){return function(t,e,r,u){if(t.point!==n){var i=t.cx-n.x,o=t.cy-n.y,a=1/Math.sqrt(i*i+o*o);if(d>(u-e)*a){var c=t.charge*a*a;return n.px-=i*c,n.py-=o*c,!0}if(t.point&&isFinite(a)){var c=t.pointCharge*a*a;n.px-=i*c,n.py-=o*c}}return!t.charge}}function t(n){n.px=mo.event.x,n.py=mo.event.y,a.resume()}var e,r,u,i,o,a={},c=mo.dispatch(\"start\",\"tick\",\"end\"),l=[1,1],s=.9,f=Sc,h=Ec,g=-30,p=.1,d=.8,v=[],m=[];return a.tick=function(){if((r*=.99)<.005)return c.end({type:\"end\",alpha:r=0}),!0;var t,e,a,f,h,d,y,M,x,b=v.length,_=m.length;for(e=0;_>e;++e)a=m[e],f=a.source,h=a.target,M=h.x-f.x,x=h.y-f.y,(d=M*M+x*x)&&(d=r*i[e]*((d=Math.sqrt(d))-u[e])/d,M*=d,x*=d,h.x-=M*(y=f.weight/(h.weight+f.weight)),h.y-=x*y,f.x+=M*(y=1-y),f.y+=x*y);if((y=r*p)&&(M=l[0]/2,x=l[1]/2,e=-1,y))for(;++e<b;)a=v[e],a.x+=(M-a.x)*y,a.y+=(x-a.y)*y;if(g)for(uu(t=mo.geom.quadtree(v),r,o),e=-1;++e<b;)(a=v[e]).fixed||t.visit(n(a));for(e=-1;++e<b;)a=v[e],a.fixed?(a.x=a.px,a.y=a.py):(a.x-=(a.px-(a.px=a.x))*s,a.y-=(a.py-(a.py=a.y))*s);c.tick({type:\"tick\",alpha:r})},a.nodes=function(n){return arguments.length?(v=n,a):v},a.links=function(n){return arguments.length?(m=n,a):m},a.size=function(n){return arguments.length?(l=n,a):l},a.linkDistance=function(n){return arguments.length?(f=\"function\"==typeof n?n:+n,a):f},a.distance=a.linkDistance,a.linkStrength=function(n){return arguments.length?(h=\"function\"==typeof n?n:+n,a):h},a.friction=function(n){return arguments.length?(s=+n,a):s},a.charge=function(n){return arguments.length?(g=\"function\"==typeof n?n:+n,a):g},a.gravity=function(n){return arguments.length?(p=+n,a):p},a.theta=function(n){return arguments.length?(d=+n,a):d},a.alpha=function(n){return arguments.length?(n=+n,r?r=n>0?n:0:n>0&&(c.start({type:\"start\",alpha:r=n}),mo.timer(a.tick)),a):r},a.start=function(){function n(n,r){for(var u,i=t(e),o=-1,a=i.length;++o<a;)if(!isNaN(u=i[o][n]))return u;return Math.random()*r}function t(){if(!c){for(c=[],r=0;p>r;++r)c[r]=[];for(r=0;d>r;++r){var n=m[r];c[n.source.index].push(n.target),c[n.target.index].push(n.source)}}return c[e]}var e,r,c,s,p=v.length,d=m.length,y=l[0],M=l[1];for(e=0;p>e;++e)(s=v[e]).index=e,s.weight=0;for(e=0;d>e;++e)s=m[e],\"number\"==typeof s.source&&(s.source=v[s.source]),\"number\"==typeof s.target&&(s.target=v[s.target]),++s.source.weight,++s.target.weight;for(e=0;p>e;++e)s=v[e],isNaN(s.x)&&(s.x=n(\"x\",y)),isNaN(s.y)&&(s.y=n(\"y\",M)),isNaN(s.px)&&(s.px=s.x),isNaN(s.py)&&(s.py=s.y);if(u=[],\"function\"==typeof f)for(e=0;d>e;++e)u[e]=+f.call(this,m[e],e);else for(e=0;d>e;++e)u[e]=f;if(i=[],\"function\"==typeof h)for(e=0;d>e;++e)i[e]=+h.call(this,m[e],e);else for(e=0;d>e;++e)i[e]=h;if(o=[],\"function\"==typeof g)for(e=0;p>e;++e)o[e]=+g.call(this,v[e],e);else for(e=0;p>e;++e)o[e]=g;return a.resume()},a.resume=function(){return a.alpha(.1)},a.stop=function(){return a.alpha(0)},a.drag=function(){return e||(e=mo.behavior.drag().origin(dt).on(\"dragstart.force\",nu).on(\"drag.force\",t).on(\"dragend.force\",tu)),arguments.length?(this.on(\"mouseover.force\",eu).on(\"mouseout.force\",ru).call(e),void 0):e},mo.rebind(a,c,\"on\")};var Sc=20,Ec=1;mo.layout.hierarchy=function(){function n(t,o,a){var c=u.call(e,t,o);if(t.depth=o,a.push(t),c&&(l=c.length)){for(var l,s,f=-1,h=t.children=[],g=0,p=o+1;++f<l;)s=n(c[f],p,a),s.parent=t,h.push(s),g+=s.value;r&&h.sort(r),i&&(t.value=g)}else i&&(t.value=+i.call(e,t,o)||0);return t}function t(n,r){var u=n.children,o=0;if(u&&(a=u.length))for(var a,c=-1,l=r+1;++c<a;)o+=t(u[c],l);else i&&(o=+i.call(e,n,r)||0);return i&&(n.value=o),o}function e(t){var e=[];return n(t,0,e),e}var r=cu,u=ou,i=au;return e.sort=function(n){return arguments.length?(r=n,e):r},e.children=function(n){return arguments.length?(u=n,e):u},e.value=function(n){return arguments.length?(i=n,e):i},e.revalue=function(n){return t(n,0),n},e},mo.layout.partition=function(){function n(t,e,r,u){var i=t.children;if(t.x=e,t.y=t.depth*u,t.dx=r,t.dy=u,i&&(o=i.length)){var o,a,c,l=-1;for(r=t.value?r/t.value:0;++l<o;)n(a=i[l],e,c=a.value*r,u),e+=c}}function t(n){var e=n.children,r=0;if(e&&(u=e.length))for(var u,i=-1;++i<u;)r=Math.max(r,t(e[i]));return 1+r}function e(e,i){var o=r.call(this,e,i);return n(o[0],0,u[0],u[1]/t(o[0])),o}var r=mo.layout.hierarchy(),u=[1,1];return e.size=function(n){return arguments.length?(u=n,e):u},iu(e,r)},mo.layout.pie=function(){function n(i){var o=i.map(function(e,r){return+t.call(n,e,r)}),a=+(\"function\"==typeof r?r.apply(this,arguments):r),c=((\"function\"==typeof u?u.apply(this,arguments):u)-a)/mo.sum(o),l=mo.range(i.length);null!=e&&l.sort(e===kc?function(n,t){return o[t]-o[n]}:function(n,t){return e(i[n],i[t])});var s=[];return l.forEach(function(n){var t;s[n]={data:i[n],value:t=o[n],startAngle:a,endAngle:a+=t*c}}),s}var t=Number,e=kc,r=0,u=Wo;return n.value=function(e){return arguments.length?(t=e,n):t},n.sort=function(t){return arguments.length?(e=t,n):e},n.startAngle=function(t){return arguments.length?(r=t,n):r},n.endAngle=function(t){return arguments.length?(u=t,n):u},n};var kc={};mo.layout.stack=function(){function n(a,c){var l=a.map(function(e,r){return t.call(n,e,r)}),s=l.map(function(t){return t.map(function(t,e){return[i.call(n,t,e),o.call(n,t,e)]})}),f=e.call(n,s,c);l=mo.permute(l,f),s=mo.permute(s,f);var h,g,p,d=r.call(n,s,c),v=l.length,m=l[0].length;for(g=0;m>g;++g)for(u.call(n,l[0][g],p=d[g],s[0][g][1]),h=1;v>h;++h)u.call(n,l[h][g],p+=s[h-1][g][1],s[h][g][1]);return a}var t=dt,e=gu,r=pu,u=hu,i=su,o=fu;return n.values=function(e){return arguments.length?(t=e,n):t},n.order=function(t){return arguments.length?(e=\"function\"==typeof t?t:Ac.get(t)||gu,n):e},n.offset=function(t){return arguments.length?(r=\"function\"==typeof t?t:Nc.get(t)||pu,n):r},n.x=function(t){return arguments.length?(i=t,n):i},n.y=function(t){return arguments.length?(o=t,n):o},n.out=function(t){return arguments.length?(u=t,n):u},n};var Ac=mo.map({\"inside-out\":function(n){var t,e,r=n.length,u=n.map(du),i=n.map(vu),o=mo.range(r).sort(function(n,t){return u[n]-u[t]}),a=0,c=0,l=[],s=[];for(t=0;r>t;++t)e=o[t],c>a?(a+=i[e],l.push(e)):(c+=i[e],s.push(e));return s.reverse().concat(l)},reverse:function(n){return mo.range(n.length).reverse()},\"default\":gu}),Nc=mo.map({silhouette:function(n){var t,e,r,u=n.length,i=n[0].length,o=[],a=0,c=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];r>a&&(a=r),o.push(r)}for(e=0;i>e;++e)c[e]=(a-o[e])/2;return c},wiggle:function(n){var t,e,r,u,i,o,a,c,l,s=n.length,f=n[0],h=f.length,g=[];for(g[0]=c=l=0,e=1;h>e;++e){for(t=0,u=0;s>t;++t)u+=n[t][e][1];for(t=0,i=0,a=f[e][0]-f[e-1][0];s>t;++t){for(r=0,o=(n[t][e][1]-n[t][e-1][1])/(2*a);t>r;++r)o+=(n[r][e][1]-n[r][e-1][1])/a;i+=o*n[t][e][1]}g[e]=c-=u?i/u*a:0,l>c&&(l=c)}for(e=0;h>e;++e)g[e]-=l;return g},expand:function(n){var t,e,r,u=n.length,i=n[0].length,o=1/u,a=[];for(e=0;i>e;++e){for(t=0,r=0;u>t;t++)r+=n[t][e][1];if(r)for(t=0;u>t;t++)n[t][e][1]/=r;else for(t=0;u>t;t++)n[t][e][1]=o}for(e=0;i>e;++e)a[e]=0;return a},zero:pu});mo.layout.histogram=function(){function n(n,i){for(var o,a,c=[],l=n.map(e,this),s=r.call(this,l,i),f=u.call(this,s,l,i),i=-1,h=l.length,g=f.length-1,p=t?1:1/h;++i<g;)o=c[i]=[],o.dx=f[i+1]-(o.x=f[i]),o.y=0;if(g>0)for(i=-1;++i<h;)a=l[i],a>=s[0]&&a<=s[1]&&(o=c[mo.bisect(f,a,1,g)-1],o.y+=p,o.push(n[i]));return c}var t=!0,e=Number,r=xu,u=yu;return n.value=function(t){return arguments.length?(e=t,n):e},n.range=function(t){return arguments.length?(r=pt(t),n):r},n.bins=function(t){return arguments.length?(u=\"number\"==typeof t?function(n){return Mu(n,t)}:pt(t),n):u},n.frequency=function(e){return arguments.length?(t=!!e,n):t},n},mo.layout.tree=function(){function n(n,i){function o(n,t){var r=n.children,u=n._tree;if(r&&(i=r.length)){for(var i,a,l,s=r[0],f=s,h=-1;++h<i;)l=r[h],o(l,a),f=c(l,a,f),a=l;Tu(n);var g=.5*(s._tree.prelim+l._tree.prelim);t?(u.prelim=t._tree.prelim+e(n,t),u.mod=u.prelim-g):u.prelim=g}else t&&(u.prelim=t._tree.prelim+e(n,t))}function a(n,t){n.x=n._tree.prelim+t;var e=n.children;if(e&&(r=e.length)){var r,u=-1;for(t+=n._tree.mod;++u<r;)a(e[u],t)}}function c(n,t,r){if(t){for(var u,i=n,o=n,a=t,c=n.parent.children[0],l=i._tree.mod,s=o._tree.mod,f=a._tree.mod,h=c._tree.mod;a=wu(a),i=_u(i),a&&i;)c=_u(c),o=wu(o),o._tree.ancestor=n,u=a._tree.prelim+f-i._tree.prelim-l+e(a,i),u>0&&(qu(zu(a,n,r),n,u),l+=u,s+=u),f+=a._tree.mod,l+=i._tree.mod,h+=c._tree.mod,s+=o._tree.mod;a&&!wu(o)&&(o._tree.thread=a,o._tree.mod+=f-s),i&&!_u(c)&&(c._tree.thread=i,c._tree.mod+=l-h,r=n)}return r}var l=t.call(this,n,i),s=l[0];Nu(s,function(n,t){n._tree={ancestor:n,prelim:0,mod:0,change:0,shift:0,number:t?t._tree.number+1:0}}),o(s),a(s,-s._tree.prelim);var f=Su(s,ku),h=Su(s,Eu),g=Su(s,Au),p=f.x-e(f,h)/2,d=h.x+e(h,f)/2,v=g.depth||1;return Nu(s,u?function(n){n.x*=r[0],n.y=n.depth*r[1],delete n._tree}:function(n){n.x=(n.x-p)/(d-p)*r[0],n.y=n.depth/v*r[1],delete n._tree}),l}var t=mo.layout.hierarchy().sort(null).value(null),e=bu,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},iu(n,t)},mo.layout.pack=function(){function n(n,i){var o=e.call(this,n,i),a=o[0],c=u[0],l=u[1],s=null==t?Math.sqrt:\"function\"==typeof t?t:function(){return t};if(a.x=a.y=0,Nu(a,function(n){n.r=+s(n.value)}),Nu(a,Hu),r){var f=r*(t?1:Math.max(2*a.r/c,2*a.r/l))/2;Nu(a,function(n){n.r+=f}),Nu(a,Hu),Nu(a,function(n){n.r-=f})}return Ou(a,c/2,l/2,t?1:1/Math.max(2*a.r/c,2*a.r/l)),o}var t,e=mo.layout.hierarchy().sort(Cu),r=0,u=[1,1];return n.size=function(t){return arguments.length?(u=t,n):u},n.radius=function(e){return arguments.length?(t=null==e||\"function\"==typeof e?e:+e,n):t},n.padding=function(t){return arguments.length?(r=+t,n):r},iu(n,e)},mo.layout.cluster=function(){function n(n,i){var o,a=t.call(this,n,i),c=a[0],l=0;Nu(c,function(n){var t=n.children;t&&t.length?(n.x=Iu(t),n.y=Yu(t)):(n.x=o?l+=e(n,o):0,n.y=0,o=n)});var s=Uu(c),f=Zu(c),h=s.x-e(s,f)/2,g=f.x+e(f,s)/2;return Nu(c,u?function(n){n.x=(n.x-c.x)*r[0],n.y=(c.y-n.y)*r[1]}:function(n){n.x=(n.x-h)/(g-h)*r[0],n.y=(1-(c.y?n.y/c.y:1))*r[1]}),a}var t=mo.layout.hierarchy().sort(null).value(null),e=bu,r=[1,1],u=!1;return n.separation=function(t){return arguments.length?(e=t,n):e},n.size=function(t){return arguments.length?(u=null==(r=t),n):u?null:r},n.nodeSize=function(t){return arguments.length?(u=null!=(r=t),n):u?r:null},iu(n,t)},mo.layout.treemap=function(){function n(n,t){for(var e,r,u=-1,i=n.length;++u<i;)r=(e=n[u]).value*(0>t?0:t),e.area=isNaN(r)||0>=r?0:r}function t(e){var i=e.children;if(i&&i.length){var o,a,c,l=f(e),s=[],h=i.slice(),p=1/0,d=\"slice\"===g?l.dx:\"dice\"===g?l.dy:\"slice-dice\"===g?1&e.depth?l.dy:l.dx:Math.min(l.dx,l.dy);for(n(h,l.dx*l.dy/e.value),s.area=0;(c=h.length)>0;)s.push(o=h[c-1]),s.area+=o.area,\"squarify\"!==g||(a=r(s,d))<=p?(h.pop(),p=a):(s.area-=s.pop().area,u(s,d,l,!1),d=Math.min(l.dx,l.dy),s.length=s.area=0,p=1/0);s.length&&(u(s,d,l,!0),s.length=s.area=0),i.forEach(t)}}function e(t){var r=t.children;if(r&&r.length){var i,o=f(t),a=r.slice(),c=[];for(n(a,o.dx*o.dy/t.value),c.area=0;i=a.pop();)c.push(i),c.area+=i.area,null!=i.z&&(u(c,i.z?o.dx:o.dy,o,!a.length),c.length=c.area=0);r.forEach(e)}}function r(n,t){for(var e,r=n.area,u=0,i=1/0,o=-1,a=n.length;++o<a;)(e=n[o].area)&&(i>e&&(i=e),e>u&&(u=e));return r*=r,t*=t,r?Math.max(t*u*p/r,r/(t*i*p)):1/0}function u(n,t,e,r){var u,i=-1,o=n.length,a=e.x,l=e.y,s=t?c(n.area/t):0;if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<o;)u=n[i],u.x=a,u.y=l,u.dy=s,a+=u.dx=Math.min(e.x+e.dx-a,s?c(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-a,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<o;)u=n[i],u.x=a,u.y=l,u.dx=s,l+=u.dy=Math.min(e.y+e.dy-l,s?c(u.area/s):0);u.z=!1,u.dy+=e.y+e.dy-l,e.x+=s,e.dx-=s}}function i(r){var u=o||a(r),i=u[0];return i.x=0,i.y=0,i.dx=l[0],i.dy=l[1],o&&a.revalue(i),n([i],i.dx*i.dy/i.value),(o?e:t)(i),h&&(o=u),u}var o,a=mo.layout.hierarchy(),c=Math.round,l=[1,1],s=null,f=Vu,h=!1,g=\"squarify\",p=.5*(1+Math.sqrt(5));return i.size=function(n){return arguments.length?(l=n,i):l},i.padding=function(n){function t(t){var e=n.call(i,t,t.depth);return null==e?Vu(t):Xu(t,\"number\"==typeof e?[e,e,e,e]:e)}function e(t){return Xu(t,n)}if(!arguments.length)return s;var r;return f=null==(s=n)?Vu:\"function\"==(r=typeof n)?t:\"number\"===r?(n=[n,n,n,n],e):e,i},i.round=function(n){return arguments.length?(c=n?Math.round:Number,i):c!=Number},i.sticky=function(n){return arguments.length?(h=n,o=null,i):h},i.ratio=function(n){return arguments.length?(p=n,i):p},i.mode=function(n){return arguments.length?(g=n+\"\",i):g},iu(i,a)},mo.random={normal:function(n,t){var e=arguments.length;return 2>e&&(t=1),1>e&&(n=0),function(){var e,r,u;do e=2*Math.random()-1,r=2*Math.random()-1,u=e*e+r*r;while(!u||u>1);return n+t*e*Math.sqrt(-2*Math.log(u)/u)}},logNormal:function(){var n=mo.random.normal.apply(mo,arguments);return function(){return Math.exp(n())}},irwinHall:function(n){return function(){for(var t=0,e=0;n>e;e++)t+=Math.random();return t/n}}},mo.scale={};var Tc={floor:dt,ceil:dt};mo.scale.linear=function(){return Qu([0,1],[0,1],Er,!1)},mo.scale.log=function(){return ii(mo.scale.linear().domain([0,1]),10,!0,[1,10])};var qc=mo.format(\".0e\"),zc={floor:function(n){return-Math.ceil(-n)},ceil:function(n){return-Math.floor(-n)}};mo.scale.pow=function(){return oi(mo.scale.linear(),1,[0,1])},mo.scale.sqrt=function(){return mo.scale.pow().exponent(.5)},mo.scale.ordinal=function(){return ci([],{t:\"range\",a:[[]]})},mo.scale.category10=function(){return mo.scale.ordinal().range(Cc)},mo.scale.category20=function(){return mo.scale.ordinal().range(Dc)},mo.scale.category20b=function(){return mo.scale.ordinal().range(jc)},mo.scale.category20c=function(){return mo.scale.ordinal().range(Lc)};var Cc=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(it),Dc=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(it),jc=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(it),Lc=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(it);mo.scale.quantile=function(){return li([],[])},mo.scale.quantize=function(){return si(0,1,[0,1])},mo.scale.threshold=function(){return fi([.5],[0,1])},mo.scale.identity=function(){return hi([0,1])},mo.svg.arc=function(){function n(){var n=t.apply(this,arguments),i=e.apply(this,arguments),o=r.apply(this,arguments)+Hc,a=u.apply(this,arguments)+Hc,c=(o>a&&(c=o,o=a,a=c),a-o),l=Bo>c?\"0\":\"1\",s=Math.cos(o),f=Math.sin(o),h=Math.cos(a),g=Math.sin(a);return c>=Fc?n?\"M0,\"+i+\"A\"+i+\",\"+i+\" 0 1,1 0,\"+-i+\"A\"+i+\",\"+i+\" 0 1,1 0,\"+i+\"M0,\"+n+\"A\"+n+\",\"+n+\" 0 1,0 0,\"+-n+\"A\"+n+\",\"+n+\" 0 1,0 0,\"+n+\"Z\":\"M0,\"+i+\"A\"+i+\",\"+i+\" 0 1,1 0,\"+-i+\"A\"+i+\",\"+i+\" 0 1,1 0,\"+i+\"Z\":n?\"M\"+i*s+\",\"+i*f+\"A\"+i+\",\"+i+\" 0 \"+l+\",1 \"+i*h+\",\"+i*g+\"L\"+n*h+\",\"+n*g+\"A\"+n+\",\"+n+\" 0 \"+l+\",0 \"+n*s+\",\"+n*f+\"Z\":\"M\"+i*s+\",\"+i*f+\"A\"+i+\",\"+i+\" 0 \"+l+\",1 \"+i*h+\",\"+i*g+\"L0,0\"+\"Z\"}var t=gi,e=pi,r=di,u=vi;return n.innerRadius=function(e){return arguments.length?(t=pt(e),n):t},n.outerRadius=function(t){return arguments.length?(e=pt(t),n):e},n.startAngle=function(t){return arguments.length?(r=pt(t),n):r},n.endAngle=function(t){return arguments.length?(u=pt(t),n):u},n.centroid=function(){var n=(t.apply(this,arguments)+e.apply(this,arguments))/2,i=(r.apply(this,arguments)+u.apply(this,arguments))/2+Hc;return[Math.cos(i)*n,Math.sin(i)*n]},n};var Hc=-Jo,Fc=Wo-Go;mo.svg.line.radial=function(){var n=Ue(mi);return n.radius=n.x,delete n.x,n.angle=n.y,delete n.y,n},We.reverse=Je,Je.reverse=We,mo.svg.area=function(){return yi(dt)},mo.svg.area.radial=function(){var n=yi(mi);return n.radius=n.x,delete n.x,n.innerRadius=n.x0,delete n.x0,n.outerRadius=n.x1,delete n.x1,n.angle=n.y,delete n.y,n.startAngle=n.y0,delete n.y0,n.endAngle=n.y1,delete n.y1,n},mo.svg.chord=function(){function n(n,a){var c=t(this,i,n,a),l=t(this,o,n,a);return\"M\"+c.p0+r(c.r,c.p1,c.a1-c.a0)+(e(c,l)?u(c.r,c.p1,c.r,c.p0):u(c.r,c.p1,l.r,l.p0)+r(l.r,l.p1,l.a1-l.a0)+u(l.r,l.p1,c.r,c.p0))+\"Z\"}function t(n,t,e,r){var u=t.call(n,e,r),i=a.call(n,u,r),o=c.call(n,u,r)+Hc,s=l.call(n,u,r)+Hc;return{r:i,a0:o,a1:s,p0:[i*Math.cos(o),i*Math.sin(o)],p1:[i*Math.cos(s),i*Math.sin(s)]}}function e(n,t){return n.a0==t.a0&&n.a1==t.a1}function r(n,t,e){return\"A\"+n+\",\"+n+\" 0 \"+ +(e>Bo)+\",1 \"+t}function u(n,t,e,r){return\"Q 0,0 \"+r}var i=De,o=je,a=Mi,c=di,l=vi;return n.radius=function(t){return arguments.length?(a=pt(t),n):a},n.source=function(t){return arguments.length?(i=pt(t),n):i},n.target=function(t){return arguments.length?(o=pt(t),n):o},n.startAngle=function(t){return arguments.length?(c=pt(t),n):c},n.endAngle=function(t){return arguments.length?(l=pt(t),n):l},n},mo.svg.diagonal=function(){function n(n,u){var i=t.call(this,n,u),o=e.call(this,n,u),a=(i.y+o.y)/2,c=[i,{x:i.x,y:a},{x:o.x,y:a},o];return c=c.map(r),\"M\"+c[0]+\"C\"+c[1]+\" \"+c[2]+\" \"+c[3]}var t=De,e=je,r=xi;return n.source=function(e){return arguments.length?(t=pt(e),n):t},n.target=function(t){return arguments.length?(e=pt(t),n):e},n.projection=function(t){return arguments.length?(r=t,n):r},n},mo.svg.diagonal.radial=function(){var n=mo.svg.diagonal(),t=xi,e=n.projection;return n.projection=function(n){return arguments.length?e(bi(t=n)):t},n},mo.svg.symbol=function(){function n(n,r){return(Pc.get(t.call(this,n,r))||Si)(e.call(this,n,r))}var t=wi,e=_i;return n.type=function(e){return arguments.length?(t=pt(e),n):t},n.size=function(t){return arguments.length?(e=pt(t),n):e},n};var Pc=mo.map({circle:Si,cross:function(n){var t=Math.sqrt(n/5)/2;return\"M\"+-3*t+\",\"+-t+\"H\"+-t+\"V\"+-3*t+\"H\"+t+\"V\"+-t+\"H\"+3*t+\"V\"+t+\"H\"+t+\"V\"+3*t+\"H\"+-t+\"V\"+t+\"H\"+-3*t+\"Z\"},diamond:function(n){var t=Math.sqrt(n/(2*Ic)),e=t*Ic;return\"M0,\"+-t+\"L\"+e+\",0\"+\" 0,\"+t+\" \"+-e+\",0\"+\"Z\"},square:function(n){var t=Math.sqrt(n)/2;return\"M\"+-t+\",\"+-t+\"L\"+t+\",\"+-t+\" \"+t+\",\"+t+\" \"+-t+\",\"+t+\"Z\"},\"triangle-down\":function(n){var t=Math.sqrt(n/Yc),e=t*Yc/2;return\"M0,\"+e+\"L\"+t+\",\"+-e+\" \"+-t+\",\"+-e+\"Z\"},\"triangle-up\":function(n){var t=Math.sqrt(n/Yc),e=t*Yc/2;return\"M0,\"+-e+\"L\"+t+\",\"+e+\" \"+-t+\",\"+e+\"Z\"}});mo.svg.symbolTypes=Pc.keys();var Oc,Rc,Yc=Math.sqrt(3),Ic=Math.tan(30*Qo),Uc=[],Zc=0;Uc.call=Ro.call,Uc.empty=Ro.empty,Uc.node=Ro.node,Uc.size=Ro.size,mo.transition=function(n){return arguments.length?Oc?n.transition():n:Uo.transition()},mo.transition.prototype=Uc,Uc.select=function(n){var t,e,r,u=this.id,i=[];n=d(n);for(var o=-1,a=this.length;++o<a;){i.push(t=[]);for(var c=this[o],l=-1,s=c.length;++l<s;)(r=c[l])&&(e=n.call(r,r.__data__,l,o))?(\"__data__\"in r&&(e.__data__=r.__data__),Ni(e,l,u,r.__transition__[u]),t.push(e)):t.push(null)}return Ei(i,u)},Uc.selectAll=function(n){var t,e,r,u,i,o=this.id,a=[];n=v(n);for(var c=-1,l=this.length;++c<l;)for(var s=this[c],f=-1,h=s.length;++f<h;)if(r=s[f]){i=r.__transition__[o],e=n.call(r,r.__data__,f,c),a.push(t=[]);for(var g=-1,p=e.length;++g<p;)(u=e[g])&&Ni(u,g,o,i),t.push(u)}return Ei(a,o)},Uc.filter=function(n){var t,e,r,u=[];\"function\"!=typeof n&&(n=k(n));for(var i=0,o=this.length;o>i;i++){u.push(t=[]);for(var e=this[i],a=0,c=e.length;c>a;a++)(r=e[a])&&n.call(r,r.__data__,a)&&t.push(r)}return Ei(u,this.id)},Uc.tween=function(n,t){var e=this.id;return arguments.length<2?this.node().__transition__[e].tween.get(n):N(this,null==t?function(t){t.__transition__[e].tween.remove(n)}:function(r){r.__transition__[e].tween.set(n,t)})},Uc.attr=function(n,t){function e(){this.removeAttribute(a)}function r(){this.removeAttributeNS(a.space,a.local)}function u(n){return null==n?e:(n+=\"\",function(){var t,e=this.getAttribute(a);return e!==n&&(t=o(e,n),function(n){this.setAttribute(a,t(n))})})}function i(n){return null==n?r:(n+=\"\",function(){var t,e=this.getAttributeNS(a.space,a.local);return e!==n&&(t=o(e,n),function(n){this.setAttributeNS(a.space,a.local,t(n))\n})})}if(arguments.length<2){for(t in n)this.attr(t,n[t]);return this}var o=\"transform\"==n?Br:Er,a=mo.ns.qualify(n);return ki(this,\"attr.\"+n,t,a.local?i:u)},Uc.attrTween=function(n,t){function e(n,e){var r=t.call(this,n,e,this.getAttribute(u));return r&&function(n){this.setAttribute(u,r(n))}}function r(n,e){var r=t.call(this,n,e,this.getAttributeNS(u.space,u.local));return r&&function(n){this.setAttributeNS(u.space,u.local,r(n))}}var u=mo.ns.qualify(n);return this.tween(\"attr.\"+n,u.local?r:e)},Uc.style=function(n,t,e){function r(){this.style.removeProperty(n)}function u(t){return null==t?r:(t+=\"\",function(){var r,u=_o.getComputedStyle(this,null).getPropertyValue(n);return u!==t&&(r=Er(u,t),function(t){this.style.setProperty(n,r(t),e)})})}var i=arguments.length;if(3>i){if(\"string\"!=typeof n){2>i&&(t=\"\");for(e in n)this.style(e,n[e],t);return this}e=\"\"}return ki(this,\"style.\"+n,t,u)},Uc.styleTween=function(n,t,e){function r(r,u){var i=t.call(this,r,u,_o.getComputedStyle(this,null).getPropertyValue(n));return i&&function(t){this.style.setProperty(n,i(t),e)}}return arguments.length<3&&(e=\"\"),this.tween(\"style.\"+n,r)},Uc.text=function(n){return ki(this,\"text\",n,Ai)},Uc.remove=function(){return this.each(\"end.transition\",function(){var n;this.__transition__.count<2&&(n=this.parentNode)&&n.removeChild(this)})},Uc.ease=function(n){var t=this.id;return arguments.length<1?this.node().__transition__[t].ease:(\"function\"!=typeof n&&(n=mo.ease.apply(mo,arguments)),N(this,function(e){e.__transition__[t].ease=n}))},Uc.delay=function(n){var t=this.id;return N(this,\"function\"==typeof n?function(e,r,u){e.__transition__[t].delay=+n.call(e,e.__data__,r,u)}:(n=+n,function(e){e.__transition__[t].delay=n}))},Uc.duration=function(n){var t=this.id;return N(this,\"function\"==typeof n?function(e,r,u){e.__transition__[t].duration=Math.max(1,n.call(e,e.__data__,r,u))}:(n=Math.max(1,n),function(e){e.__transition__[t].duration=n}))},Uc.each=function(n,t){var e=this.id;if(arguments.length<2){var r=Rc,u=Oc;Oc=e,N(this,function(t,r,u){Rc=t.__transition__[e],n.call(t,t.__data__,r,u)}),Rc=r,Oc=u}else N(this,function(r){var u=r.__transition__[e];(u.event||(u.event=mo.dispatch(\"start\",\"end\"))).on(n,t)});return this},Uc.transition=function(){for(var n,t,e,r,u=this.id,i=++Zc,o=[],a=0,c=this.length;c>a;a++){o.push(n=[]);for(var t=this[a],l=0,s=t.length;s>l;l++)(e=t[l])&&(r=Object.create(e.__transition__[u]),r.delay+=r.duration,Ni(e,l,i,r)),n.push(e)}return Ei(o,i)},mo.svg.axis=function(){function n(n){n.each(function(){var n,l=mo.select(this),s=this.__chart__||e,f=this.__chart__=e.copy(),h=null==c?f.ticks?f.ticks.apply(f,a):f.domain():c,g=null==t?f.tickFormat?f.tickFormat.apply(f,a):dt:t,p=l.selectAll(\".tick\").data(h,f),d=p.enter().insert(\"g\",\".domain\").attr(\"class\",\"tick\").style(\"opacity\",Go),v=mo.transition(p.exit()).style(\"opacity\",Go).remove(),m=mo.transition(p).style(\"opacity\",1),y=Bu(f),M=l.selectAll(\".domain\").data([0]),x=(M.enter().append(\"path\").attr(\"class\",\"domain\"),mo.transition(M));d.append(\"line\"),d.append(\"text\");var b=d.select(\"line\"),_=m.select(\"line\"),w=p.select(\"text\").text(g),S=d.select(\"text\"),E=m.select(\"text\");switch(r){case\"bottom\":n=Ti,b.attr(\"y2\",u),S.attr(\"y\",Math.max(u,0)+o),_.attr(\"x2\",0).attr(\"y2\",u),E.attr(\"x\",0).attr(\"y\",Math.max(u,0)+o),w.attr(\"dy\",\".71em\").style(\"text-anchor\",\"middle\"),x.attr(\"d\",\"M\"+y[0]+\",\"+i+\"V0H\"+y[1]+\"V\"+i);break;case\"top\":n=Ti,b.attr(\"y2\",-u),S.attr(\"y\",-(Math.max(u,0)+o)),_.attr(\"x2\",0).attr(\"y2\",-u),E.attr(\"x\",0).attr(\"y\",-(Math.max(u,0)+o)),w.attr(\"dy\",\"0em\").style(\"text-anchor\",\"middle\"),x.attr(\"d\",\"M\"+y[0]+\",\"+-i+\"V0H\"+y[1]+\"V\"+-i);break;case\"left\":n=qi,b.attr(\"x2\",-u),S.attr(\"x\",-(Math.max(u,0)+o)),_.attr(\"x2\",-u).attr(\"y2\",0),E.attr(\"x\",-(Math.max(u,0)+o)).attr(\"y\",0),w.attr(\"dy\",\".32em\").style(\"text-anchor\",\"end\"),x.attr(\"d\",\"M\"+-i+\",\"+y[0]+\"H0V\"+y[1]+\"H\"+-i);break;case\"right\":n=qi,b.attr(\"x2\",u),S.attr(\"x\",Math.max(u,0)+o),_.attr(\"x2\",u).attr(\"y2\",0),E.attr(\"x\",Math.max(u,0)+o).attr(\"y\",0),w.attr(\"dy\",\".32em\").style(\"text-anchor\",\"start\"),x.attr(\"d\",\"M\"+i+\",\"+y[0]+\"H0V\"+y[1]+\"H\"+i)}if(f.rangeBand){var k=f.rangeBand()/2,A=function(n){return f(n)+k};d.call(n,A),m.call(n,A)}else d.call(n,s),m.call(n,f),v.call(n,f)})}var t,e=mo.scale.linear(),r=Vc,u=6,i=6,o=3,a=[10],c=null;return n.scale=function(t){return arguments.length?(e=t,n):e},n.orient=function(t){return arguments.length?(r=t in Xc?t+\"\":Vc,n):r},n.ticks=function(){return arguments.length?(a=arguments,n):a},n.tickValues=function(t){return arguments.length?(c=t,n):c},n.tickFormat=function(e){return arguments.length?(t=e,n):t},n.tickSize=function(t){var e=arguments.length;return e?(u=+t,i=+arguments[e-1],n):u},n.innerTickSize=function(t){return arguments.length?(u=+t,n):u},n.outerTickSize=function(t){return arguments.length?(i=+t,n):i},n.tickPadding=function(t){return arguments.length?(o=+t,n):o},n.tickSubdivide=function(){return arguments.length&&n},n};var Vc=\"bottom\",Xc={top:1,right:1,bottom:1,left:1};mo.svg.brush=function(){function n(i){i.each(function(){var i=mo.select(this).style(\"pointer-events\",\"all\").style(\"-webkit-tap-highlight-color\",\"rgba(0,0,0,0)\").on(\"mousedown.brush\",u).on(\"touchstart.brush\",u),o=i.selectAll(\".background\").data([0]);o.enter().append(\"rect\").attr(\"class\",\"background\").style(\"visibility\",\"hidden\").style(\"cursor\",\"crosshair\"),i.selectAll(\".extent\").data([0]).enter().append(\"rect\").attr(\"class\",\"extent\").style(\"cursor\",\"move\");var a=i.selectAll(\".resize\").data(v,dt);a.exit().remove(),a.enter().append(\"g\").attr(\"class\",function(n){return\"resize \"+n}).style(\"cursor\",function(n){return $c[n]}).append(\"rect\").attr(\"x\",function(n){return/[ew]$/.test(n)?-3:null}).attr(\"y\",function(n){return/^[ns]/.test(n)?-3:null}).attr(\"width\",6).attr(\"height\",6).style(\"visibility\",\"hidden\"),a.style(\"display\",n.empty()?\"none\":null);var s,f=mo.transition(i),h=mo.transition(o);c&&(s=Bu(c),h.attr(\"x\",s[0]).attr(\"width\",s[1]-s[0]),e(f)),l&&(s=Bu(l),h.attr(\"y\",s[0]).attr(\"height\",s[1]-s[0]),r(f)),t(f)})}function t(n){n.selectAll(\".resize\").attr(\"transform\",function(n){return\"translate(\"+s[+/e$/.test(n)]+\",\"+h[+/^s/.test(n)]+\")\"})}function e(n){n.select(\".extent\").attr(\"x\",s[0]),n.selectAll(\".extent,.n>rect,.s>rect\").attr(\"width\",s[1]-s[0])}function r(n){n.select(\".extent\").attr(\"y\",h[0]),n.selectAll(\".extent,.e>rect,.w>rect\").attr(\"height\",h[1]-h[0])}function u(){function u(){32==mo.event.keyCode&&(N||(M=null,q[0]-=s[1],q[1]-=h[1],N=2),f())}function g(){32==mo.event.keyCode&&2==N&&(q[0]+=s[1],q[1]+=h[1],N=0,f())}function v(){var n=mo.mouse(b),u=!1;x&&(n[0]+=x[0],n[1]+=x[1]),N||(mo.event.altKey?(M||(M=[(s[0]+s[1])/2,(h[0]+h[1])/2]),q[0]=s[+(n[0]<M[0])],q[1]=h[+(n[1]<M[1])]):M=null),k&&m(n,c,0)&&(e(S),u=!0),A&&m(n,l,1)&&(r(S),u=!0),u&&(t(S),w({type:\"brush\",mode:N?\"move\":\"resize\"}))}function m(n,t,e){var r,u,a=Bu(t),c=a[0],l=a[1],f=q[e],g=e?h:s,v=g[1]-g[0];return N&&(c-=f,l-=v+f),r=(e?d:p)?Math.max(c,Math.min(l,n[e])):n[e],N?u=(r+=f)+v:(M&&(f=Math.max(c,Math.min(l,2*M[e]-r))),r>f?(u=r,r=f):u=f),g[0]!=r||g[1]!=u?(e?o=null:i=null,g[0]=r,g[1]=u,!0):void 0}function y(){v(),S.style(\"pointer-events\",\"all\").selectAll(\".resize\").style(\"display\",n.empty()?\"none\":null),mo.select(\"body\").style(\"cursor\",null),z.on(\"mousemove.brush\",null).on(\"mouseup.brush\",null).on(\"touchmove.brush\",null).on(\"touchend.brush\",null).on(\"keydown.brush\",null).on(\"keyup.brush\",null),T(),w({type:\"brushend\"})}var M,x,b=this,_=mo.select(mo.event.target),w=a.of(b,arguments),S=mo.select(b),E=_.datum(),k=!/^(n|s)$/.test(E)&&c,A=!/^(e|w)$/.test(E)&&l,N=_.classed(\"extent\"),T=L(),q=mo.mouse(b),z=mo.select(_o).on(\"keydown.brush\",u).on(\"keyup.brush\",g);if(mo.event.changedTouches?z.on(\"touchmove.brush\",v).on(\"touchend.brush\",y):z.on(\"mousemove.brush\",v).on(\"mouseup.brush\",y),S.interrupt().selectAll(\"*\").interrupt(),N)q[0]=s[0]-q[0],q[1]=h[0]-q[1];else if(E){var C=+/w$/.test(E),D=+/^n/.test(E);x=[s[1-C]-q[0],h[1-D]-q[1]],q[0]=s[C],q[1]=h[D]}else mo.event.altKey&&(M=q.slice());S.style(\"pointer-events\",\"none\").selectAll(\".resize\").style(\"display\",null),mo.select(\"body\").style(\"cursor\",_.style(\"cursor\")),w({type:\"brushstart\"}),v()}var i,o,a=g(n,\"brushstart\",\"brush\",\"brushend\"),c=null,l=null,s=[0,0],h=[0,0],p=!0,d=!0,v=Bc[0];return n.event=function(n){n.each(function(){var n=a.of(this,arguments),t={x:s,y:h,i:i,j:o},e=this.__chart__||t;this.__chart__=t,Oc?mo.select(this).transition().each(\"start.brush\",function(){i=e.i,o=e.j,s=e.x,h=e.y,n({type:\"brushstart\"})}).tween(\"brush:brush\",function(){var e=kr(s,t.x),r=kr(h,t.y);return i=o=null,function(u){s=t.x=e(u),h=t.y=r(u),n({type:\"brush\",mode:\"resize\"})}}).each(\"end.brush\",function(){i=t.i,o=t.j,n({type:\"brush\",mode:\"resize\"}),n({type:\"brushend\"})}):(n({type:\"brushstart\"}),n({type:\"brush\",mode:\"resize\"}),n({type:\"brushend\"}))})},n.x=function(t){return arguments.length?(c=t,v=Bc[!c<<1|!l],n):c},n.y=function(t){return arguments.length?(l=t,v=Bc[!c<<1|!l],n):l},n.clamp=function(t){return arguments.length?(c&&l?(p=!!t[0],d=!!t[1]):c?p=!!t:l&&(d=!!t),n):c&&l?[p,d]:c?p:l?d:null},n.extent=function(t){var e,r,u,a,f;return arguments.length?(c&&(e=t[0],r=t[1],l&&(e=e[0],r=r[0]),i=[e,r],c.invert&&(e=c(e),r=c(r)),e>r&&(f=e,e=r,r=f),(e!=s[0]||r!=s[1])&&(s=[e,r])),l&&(u=t[0],a=t[1],c&&(u=u[1],a=a[1]),o=[u,a],l.invert&&(u=l(u),a=l(a)),u>a&&(f=u,u=a,a=f),(u!=h[0]||a!=h[1])&&(h=[u,a])),n):(c&&(i?(e=i[0],r=i[1]):(e=s[0],r=s[1],c.invert&&(e=c.invert(e),r=c.invert(r)),e>r&&(f=e,e=r,r=f))),l&&(o?(u=o[0],a=o[1]):(u=h[0],a=h[1],l.invert&&(u=l.invert(u),a=l.invert(a)),u>a&&(f=u,u=a,a=f))),c&&l?[[e,u],[r,a]]:c?[e,r]:l&&[u,a])},n.clear=function(){return n.empty()||(s=[0,0],h=[0,0],i=o=null),n},n.empty=function(){return!!c&&s[0]==s[1]||!!l&&h[0]==h[1]},mo.rebind(n,a,\"on\")};var $c={n:\"ns-resize\",e:\"ew-resize\",s:\"ns-resize\",w:\"ew-resize\",nw:\"nwse-resize\",ne:\"nesw-resize\",se:\"nwse-resize\",sw:\"nesw-resize\"},Bc=[[\"n\",\"e\",\"s\",\"w\",\"nw\",\"ne\",\"se\",\"sw\"],[\"e\",\"w\"],[\"n\",\"s\"],[]],Wc=mo.time={},Jc=Date,Gc=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"];zi.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){Kc.setUTCDate.apply(this._,arguments)},setDay:function(){Kc.setUTCDay.apply(this._,arguments)},setFullYear:function(){Kc.setUTCFullYear.apply(this._,arguments)},setHours:function(){Kc.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){Kc.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){Kc.setUTCMinutes.apply(this._,arguments)},setMonth:function(){Kc.setUTCMonth.apply(this._,arguments)},setSeconds:function(){Kc.setUTCSeconds.apply(this._,arguments)},setTime:function(){Kc.setTime.apply(this._,arguments)}};var Kc=Date.prototype,Qc=\"%a %b %e %X %Y\",nl=\"%m/%d/%Y\",tl=\"%H:%M:%S\",el=[\"Sunday\",\"Monday\",\"Tuesday\",\"Wednesday\",\"Thursday\",\"Friday\",\"Saturday\"],rl=[\"Sun\",\"Mon\",\"Tue\",\"Wed\",\"Thu\",\"Fri\",\"Sat\"],ul=[\"January\",\"February\",\"March\",\"April\",\"May\",\"June\",\"July\",\"August\",\"September\",\"October\",\"November\",\"December\"],il=[\"Jan\",\"Feb\",\"Mar\",\"Apr\",\"May\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Oct\",\"Nov\",\"Dec\"];Wc.year=Ci(function(n){return n=Wc.day(n),n.setMonth(0,1),n},function(n,t){n.setFullYear(n.getFullYear()+t)},function(n){return n.getFullYear()}),Wc.years=Wc.year.range,Wc.years.utc=Wc.year.utc.range,Wc.day=Ci(function(n){var t=new Jc(2e3,0);return t.setFullYear(n.getFullYear(),n.getMonth(),n.getDate()),t},function(n,t){n.setDate(n.getDate()+t)},function(n){return n.getDate()-1}),Wc.days=Wc.day.range,Wc.days.utc=Wc.day.utc.range,Wc.dayOfYear=function(n){var t=Wc.year(n);return Math.floor((n-t-6e4*(n.getTimezoneOffset()-t.getTimezoneOffset()))/864e5)},Gc.forEach(function(n,t){n=n.toLowerCase(),t=7-t;var e=Wc[n]=Ci(function(n){return(n=Wc.day(n)).setDate(n.getDate()-(n.getDay()+t)%7),n},function(n,t){n.setDate(n.getDate()+7*Math.floor(t))},function(n){var e=Wc.year(n).getDay();return Math.floor((Wc.dayOfYear(n)+(e+t)%7)/7)-(e!==t)});Wc[n+\"s\"]=e.range,Wc[n+\"s\"].utc=e.utc.range,Wc[n+\"OfYear\"]=function(n){var e=Wc.year(n).getDay();return Math.floor((Wc.dayOfYear(n)+(e+t)%7)/7)}}),Wc.week=Wc.sunday,Wc.weeks=Wc.sunday.range,Wc.weeks.utc=Wc.sunday.utc.range,Wc.weekOfYear=Wc.sundayOfYear,Wc.format=ji;var ol=Hi(el),al=Fi(el),cl=Hi(rl),ll=Fi(rl),sl=Hi(ul),fl=Fi(ul),hl=Hi(il),gl=Fi(il),pl=/^%/,dl={\"-\":\"\",_:\" \",0:\"0\"},vl={a:function(n){return rl[n.getDay()]},A:function(n){return el[n.getDay()]},b:function(n){return il[n.getMonth()]},B:function(n){return ul[n.getMonth()]},c:ji(Qc),d:function(n,t){return Pi(n.getDate(),t,2)},e:function(n,t){return Pi(n.getDate(),t,2)},H:function(n,t){return Pi(n.getHours(),t,2)},I:function(n,t){return Pi(n.getHours()%12||12,t,2)},j:function(n,t){return Pi(1+Wc.dayOfYear(n),t,3)},L:function(n,t){return Pi(n.getMilliseconds(),t,3)},m:function(n,t){return Pi(n.getMonth()+1,t,2)},M:function(n,t){return Pi(n.getMinutes(),t,2)},p:function(n){return n.getHours()>=12?\"PM\":\"AM\"},S:function(n,t){return Pi(n.getSeconds(),t,2)},U:function(n,t){return Pi(Wc.sundayOfYear(n),t,2)},w:function(n){return n.getDay()},W:function(n,t){return Pi(Wc.mondayOfYear(n),t,2)},x:ji(nl),X:ji(tl),y:function(n,t){return Pi(n.getFullYear()%100,t,2)},Y:function(n,t){return Pi(n.getFullYear()%1e4,t,4)},Z:ao,\"%\":function(){return\"%\"}},ml={a:Oi,A:Ri,b:Zi,B:Vi,c:Xi,d:no,e:no,H:eo,I:eo,j:to,L:io,m:Qi,M:ro,p:oo,S:uo,U:Ii,w:Yi,W:Ui,x:$i,X:Bi,y:Ji,Y:Wi,Z:Gi,\"%\":co},yl=/^\\s*\\d+/,Ml=mo.map({am:0,pm:1});ji.utc=lo;var xl=lo(\"%Y-%m-%dT%H:%M:%S.%LZ\");ji.iso=Date.prototype.toISOString&&+new Date(\"2000-01-01T00:00:00.000Z\")?so:xl,so.parse=function(n){var t=new Date(n);return isNaN(t)?null:t},so.toString=xl.toString,Wc.second=Ci(function(n){return new Jc(1e3*Math.floor(n/1e3))},function(n,t){n.setTime(n.getTime()+1e3*Math.floor(t))},function(n){return n.getSeconds()}),Wc.seconds=Wc.second.range,Wc.seconds.utc=Wc.second.utc.range,Wc.minute=Ci(function(n){return new Jc(6e4*Math.floor(n/6e4))},function(n,t){n.setTime(n.getTime()+6e4*Math.floor(t))},function(n){return n.getMinutes()}),Wc.minutes=Wc.minute.range,Wc.minutes.utc=Wc.minute.utc.range,Wc.hour=Ci(function(n){var t=n.getTimezoneOffset()/60;return new Jc(36e5*(Math.floor(n/36e5-t)+t))},function(n,t){n.setTime(n.getTime()+36e5*Math.floor(t))},function(n){return n.getHours()}),Wc.hours=Wc.hour.range,Wc.hours.utc=Wc.hour.utc.range,Wc.month=Ci(function(n){return n=Wc.day(n),n.setDate(1),n},function(n,t){n.setMonth(n.getMonth()+t)},function(n){return n.getMonth()}),Wc.months=Wc.month.range,Wc.months.utc=Wc.month.utc.range;var bl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],_l=[[Wc.second,1],[Wc.second,5],[Wc.second,15],[Wc.second,30],[Wc.minute,1],[Wc.minute,5],[Wc.minute,15],[Wc.minute,30],[Wc.hour,1],[Wc.hour,3],[Wc.hour,6],[Wc.hour,12],[Wc.day,1],[Wc.day,2],[Wc.week,1],[Wc.month,1],[Wc.month,3],[Wc.year,1]],wl=[[ji(\"%Y\"),Vt],[ji(\"%B\"),function(n){return n.getMonth()}],[ji(\"%b %d\"),function(n){return 1!=n.getDate()}],[ji(\"%a %d\"),function(n){return n.getDay()&&1!=n.getDate()}],[ji(\"%I %p\"),function(n){return n.getHours()}],[ji(\"%I:%M\"),function(n){return n.getMinutes()}],[ji(\":%S\"),function(n){return n.getSeconds()}],[ji(\".%L\"),function(n){return n.getMilliseconds()}]],Sl=go(wl);_l.year=Wc.year,Wc.scale=function(){return fo(mo.scale.linear(),_l,Sl)};var El={range:function(n,t,e){return mo.range(+n,+t,e).map(ho)}},kl=_l.map(function(n){return[n[0].utc,n[1]]}),Al=[[lo(\"%Y\"),Vt],[lo(\"%B\"),function(n){return n.getUTCMonth()}],[lo(\"%b %d\"),function(n){return 1!=n.getUTCDate()}],[lo(\"%a %d\"),function(n){return n.getUTCDay()&&1!=n.getUTCDate()}],[lo(\"%I %p\"),function(n){return n.getUTCHours()}],[lo(\"%I:%M\"),function(n){return n.getUTCMinutes()}],[lo(\":%S\"),function(n){return n.getUTCSeconds()}],[lo(\".%L\"),function(n){return n.getUTCMilliseconds()}]],Nl=go(Al);return kl.year=Wc.year.utc,Wc.scale.utc=function(){return fo(mo.scale.linear(),kl,Nl)},mo.text=vt(function(n){return n.responseText}),mo.json=function(n,t){return mt(n,\"application/json\",po,t)},mo.html=function(n,t){return mt(n,\"text/html\",vo,t)},mo.xml=vt(function(n){return n.responseXML}),mo}();\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/simditor/hotkeys.js",
    "content": "(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define('simple-hotkeys', [\"jquery\",\n      \"simple-module\"], function ($, SimpleModule) {\n      return (root.returnExportsGlobal = factory($, SimpleModule));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like enviroments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"),\n      require(\"simple-module\"));\n  } else {\n    root.simple = root.simple || {};\n    root.simple['hotkeys'] = factory(jQuery,\n      SimpleModule);\n  }\n}(this, function ($, SimpleModule) {\n\nvar Hotkeys, hotkeys,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nHotkeys = (function(_super) {\n  __extends(Hotkeys, _super);\n\n  function Hotkeys() {\n    return Hotkeys.__super__.constructor.apply(this, arguments);\n  }\n\n  Hotkeys.count = 0;\n\n  Hotkeys.keyNameMap = {\n    8: \"Backspace\",\n    9: \"Tab\",\n    13: \"Enter\",\n    16: \"Shift\",\n    17: \"Control\",\n    18: \"Alt\",\n    19: \"Pause\",\n    20: \"CapsLock\",\n    27: \"Esc\",\n    32: \"Spacebar\",\n    33: \"PageUp\",\n    34: \"PageDown\",\n    35: \"End\",\n    36: \"Home\",\n    37: \"Left\",\n    38: \"Up\",\n    39: \"Right\",\n    40: \"Down\",\n    45: \"Insert\",\n    46: \"Del\",\n    91: \"Meta\",\n    93: \"Meta\",\n    48: \"0\",\n    49: \"1\",\n    50: \"2\",\n    51: \"3\",\n    52: \"4\",\n    53: \"5\",\n    54: \"6\",\n    55: \"7\",\n    56: \"8\",\n    57: \"9\",\n    65: \"A\",\n    66: \"B\",\n    67: \"C\",\n    68: \"D\",\n    69: \"E\",\n    70: \"F\",\n    71: \"G\",\n    72: \"H\",\n    73: \"I\",\n    74: \"J\",\n    75: \"K\",\n    76: \"L\",\n    77: \"M\",\n    78: \"N\",\n    79: \"O\",\n    80: \"P\",\n    81: \"Q\",\n    82: \"R\",\n    83: \"S\",\n    84: \"T\",\n    85: \"U\",\n    86: \"V\",\n    87: \"W\",\n    88: \"X\",\n    89: \"Y\",\n    90: \"Z\",\n    96: \"0\",\n    97: \"1\",\n    98: \"2\",\n    99: \"3\",\n    100: \"4\",\n    101: \"5\",\n    102: \"6\",\n    103: \"7\",\n    104: \"8\",\n    105: \"9\",\n    106: \"Multiply\",\n    107: \"Add\",\n    109: \"Subtract\",\n    110: \"Decimal\",\n    111: \"Divide\",\n    112: \"F1\",\n    113: \"F2\",\n    114: \"F3\",\n    115: \"F4\",\n    116: \"F5\",\n    117: \"F6\",\n    118: \"F7\",\n    119: \"F8\",\n    120: \"F9\",\n    121: \"F10\",\n    122: \"F11\",\n    123: \"F12\",\n    124: \"F13\",\n    125: \"F14\",\n    126: \"F15\",\n    127: \"F16\",\n    128: \"F17\",\n    129: \"F18\",\n    130: \"F19\",\n    131: \"F20\",\n    132: \"F21\",\n    133: \"F22\",\n    134: \"F23\",\n    135: \"F24\",\n    59: \";\",\n    61: \"=\",\n    186: \";\",\n    187: \"=\",\n    188: \",\",\n    190: \".\",\n    191: \"/\",\n    192: \"`\",\n    219: \"[\",\n    220: \"\\\\\",\n    221: \"]\",\n    222: \"'\"\n  };\n\n  Hotkeys.aliases = {\n    \"escape\": \"esc\",\n    \"delete\": \"del\",\n    \"return\": \"enter\",\n    \"ctrl\": \"control\",\n    \"space\": \"spacebar\",\n    \"ins\": \"insert\",\n    \"cmd\": \"meta\",\n    \"command\": \"meta\",\n    \"wins\": \"meta\",\n    \"windows\": \"meta\"\n  };\n\n  Hotkeys.normalize = function(shortcut) {\n    var i, key, keyname, keys, _i, _len;\n    keys = shortcut.toLowerCase().replace(/\\s+/gi, \"\").split(\"+\");\n    for (i = _i = 0, _len = keys.length; _i < _len; i = ++_i) {\n      key = keys[i];\n      keys[i] = this.aliases[key] || key;\n    }\n    keyname = keys.pop();\n    keys.sort().push(keyname);\n    return keys.join(\"_\");\n  };\n\n  Hotkeys.prototype.opts = {\n    el: document\n  };\n\n  Hotkeys.prototype._init = function() {\n    this.id = ++this.constructor.count;\n    this._map = {};\n    this._delegate = typeof this.opts.el === \"string\" ? document : this.opts.el;\n    return $(this._delegate).on(\"keydown.simple-hotkeys-\" + this.id, this.opts.el, (function(_this) {\n      return function(e) {\n        var _ref;\n        return (_ref = _this._getHander(e)) != null ? _ref.call(_this, e) : void 0;\n      };\n    })(this));\n  };\n\n  Hotkeys.prototype._getHander = function(e) {\n    var keyname, shortcut;\n    if (!(keyname = this.constructor.keyNameMap[e.which])) {\n      return;\n    }\n    shortcut = \"\";\n    if (e.altKey) {\n      shortcut += \"alt_\";\n    }\n    if (e.ctrlKey) {\n      shortcut += \"control_\";\n    }\n    if (e.metaKey) {\n      shortcut += \"meta_\";\n    }\n    if (e.shiftKey) {\n      shortcut += \"shift_\";\n    }\n    shortcut += keyname.toLowerCase();\n    return this._map[shortcut];\n  };\n\n  Hotkeys.prototype.respondTo = function(subject) {\n    if (typeof subject === 'string') {\n      return this._map[this.constructor.normalize(subject)] != null;\n    } else {\n      return this._getHander(subject) != null;\n    }\n  };\n\n  Hotkeys.prototype.add = function(shortcut, handler) {\n    this._map[this.constructor.normalize(shortcut)] = handler;\n    return this;\n  };\n\n  Hotkeys.prototype.remove = function(shortcut) {\n    delete this._map[this.constructor.normalize(shortcut)];\n    return this;\n  };\n\n  Hotkeys.prototype.destroy = function() {\n    $(this._delegate).off(\".simple-hotkeys-\" + this.id);\n    this._map = {};\n    return this;\n  };\n\n  return Hotkeys;\n\n})(SimpleModule);\n\nhotkeys = function(opts) {\n  return new Hotkeys(opts);\n};\n\n\nreturn hotkeys;\n\n\n}));\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/simditor/module.js",
    "content": "(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define('simple-module', [\"jquery\"], function ($) {\n      return (root.returnExportsGlobal = factory($));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like enviroments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"));\n  } else {\n    root['SimpleModule'] = factory(jQuery);\n  }\n}(this, function ($) {\n\nvar Module,\n  __slice = [].slice;\n\nModule = (function() {\n  Module.extend = function(obj) {\n    var key, val, _ref;\n    if (!((obj != null) && typeof obj === 'object')) {\n      return;\n    }\n    for (key in obj) {\n      val = obj[key];\n      if (key !== 'included' && key !== 'extended') {\n        this[key] = val;\n      }\n    }\n    return (_ref = obj.extended) != null ? _ref.call(this) : void 0;\n  };\n\n  Module.include = function(obj) {\n    var key, val, _ref;\n    if (!((obj != null) && typeof obj === 'object')) {\n      return;\n    }\n    for (key in obj) {\n      val = obj[key];\n      if (key !== 'included' && key !== 'extended') {\n        this.prototype[key] = val;\n      }\n    }\n    return (_ref = obj.included) != null ? _ref.call(this) : void 0;\n  };\n\n  Module.connect = function(cls) {\n    if (typeof cls !== 'function') {\n      return;\n    }\n    if (!cls.pluginName) {\n      throw new Error('Module.connect: cannot connect plugin without pluginName');\n      return;\n    }\n    cls.prototype._connected = true;\n    if (!this._connectedClasses) {\n      this._connectedClasses = [];\n    }\n    this._connectedClasses.push(cls);\n    if (cls.pluginName) {\n      return this[cls.pluginName] = cls;\n    }\n  };\n\n  Module.prototype.opts = {};\n\n  function Module(opts) {\n    var cls, instance, instances, name, _base, _i, _len;\n    this.opts = $.extend({}, this.opts, opts);\n    (_base = this.constructor)._connectedClasses || (_base._connectedClasses = []);\n    instances = (function() {\n      var _i, _len, _ref, _results;\n      _ref = this.constructor._connectedClasses;\n      _results = [];\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        cls = _ref[_i];\n        name = cls.pluginName.charAt(0).toLowerCase() + cls.pluginName.slice(1);\n        if (cls.prototype._connected) {\n          cls.prototype._module = this;\n        }\n        _results.push(this[name] = new cls());\n      }\n      return _results;\n    }).call(this);\n    if (this._connected) {\n      this.opts = $.extend({}, this.opts, this._module.opts);\n    } else {\n      this._init();\n      for (_i = 0, _len = instances.length; _i < _len; _i++) {\n        instance = instances[_i];\n        if (typeof instance._init === \"function\") {\n          instance._init();\n        }\n      }\n    }\n    this.trigger('initialized');\n  }\n\n  Module.prototype._init = function() {};\n\n  Module.prototype.on = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    (_ref = $(this)).on.apply(_ref, args);\n    return this;\n  };\n\n  Module.prototype.one = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    (_ref = $(this)).one.apply(_ref, args);\n    return this;\n  };\n\n  Module.prototype.off = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    (_ref = $(this)).off.apply(_ref, args);\n    return this;\n  };\n\n  Module.prototype.trigger = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    (_ref = $(this)).trigger.apply(_ref, args);\n    return this;\n  };\n\n  Module.prototype.triggerHandler = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    return (_ref = $(this)).triggerHandler.apply(_ref, args);\n  };\n\n  Module.prototype._t = function() {\n    var args, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    return (_ref = this.constructor)._t.apply(_ref, args);\n  };\n\n  Module._t = function() {\n    var args, key, result, _ref;\n    key = arguments[0], args = 2 <= arguments.length ? __slice.call(arguments, 1) : [];\n    result = ((_ref = this.i18n[this.locale]) != null ? _ref[key] : void 0) || '';\n    if (!(args.length > 0)) {\n      return result;\n    }\n    result = result.replace(/([^%]|^)%(?:(\\d+)\\$)?s/g, function(p0, p, position) {\n      if (position) {\n        return p + args[parseInt(position) - 1];\n      } else {\n        return p + args.shift();\n      }\n    });\n    return result.replace(/%%s/g, '%s');\n  };\n\n  Module.i18n = {\n    'zh-CN': {}\n  };\n\n  Module.locale = 'zh-CN';\n\n  return Module;\n\n})();\n\n\nreturn Module;\n\n\n}));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/simditor/simditor.js",
    "content": "(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define('simditor', [\"jquery\",\n      \"simple-module\",\n      \"simple-hotkeys\",\n      \"simple-uploader\"], function ($, SimpleModule, simpleHotkeys, simpleUploader) {\n      return (root.returnExportsGlobal = factory($, SimpleModule, simpleHotkeys, simpleUploader));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like enviroments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"),\n      require(\"simple-module\"),\n      require(\"simple-hotkeys\"),\n      require(\"simple-uploader\"));\n  } else {\n    root['Simditor'] = factory(jQuery,\n      SimpleModule,\n      simple.hotkeys,\n      simple.uploader);\n  }\n}(this, function ($, SimpleModule, simpleHotkeys, simpleUploader) {\n\nvar Selection,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nSelection = (function(_super) {\n  __extends(Selection, _super);\n\n  function Selection() {\n    return Selection.__super__.constructor.apply(this, arguments);\n  }\n\n  Selection.pluginName = 'Selection';\n\n  Selection.prototype._init = function() {\n    this.editor = this._module;\n    return this.sel = document.getSelection();\n  };\n\n  Selection.prototype.clear = function() {\n    var e;\n    try {\n      return this.sel.removeAllRanges();\n    } catch (_error) {\n      e = _error;\n    }\n  };\n\n  Selection.prototype.getRange = function() {\n    if (!this.editor.inputManager.focused || !this.sel.rangeCount) {\n      return null;\n    }\n    return this.sel.getRangeAt(0);\n  };\n\n  Selection.prototype.selectRange = function(range) {\n    this.clear();\n    this.sel.addRange(range);\n    if (!this.editor.inputManager.focused && (this.editor.util.browser.firefox || this.editor.util.browser.msie)) {\n      this.editor.body.focus();\n    }\n    return range;\n  };\n\n  Selection.prototype.rangeAtEndOf = function(node, range) {\n    var endNode, endNodeLength, result;\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (!((range != null) && range.collapsed)) {\n      return;\n    }\n    node = $(node)[0];\n    endNode = range.endContainer;\n    endNodeLength = this.editor.util.getNodeLength(endNode);\n    if (!(range.endOffset === endNodeLength - 1 && $(endNode).contents().last().is('br')) && range.endOffset !== endNodeLength) {\n      return false;\n    }\n    if (node === endNode) {\n      return true;\n    } else if (!$.contains(node, endNode)) {\n      return false;\n    }\n    result = true;\n    $(endNode).parentsUntil(node).addBack().each((function(_this) {\n      return function(i, n) {\n        var $lastChild, nodes;\n        nodes = $(n).parent().contents().filter(function() {\n          return !(this !== n && this.nodeType === 3 && !this.nodeValue);\n        });\n        $lastChild = nodes.last();\n        if (!($lastChild.get(0) === n || ($lastChild.is('br') && $lastChild.prev().get(0) === n))) {\n          result = false;\n          return false;\n        }\n      };\n    })(this));\n    return result;\n  };\n\n  Selection.prototype.rangeAtStartOf = function(node, range) {\n    var result, startNode;\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (!((range != null) && range.collapsed)) {\n      return;\n    }\n    node = $(node)[0];\n    startNode = range.startContainer;\n    if (range.startOffset !== 0) {\n      return false;\n    }\n    if (node === startNode) {\n      return true;\n    } else if (!$.contains(node, startNode)) {\n      return false;\n    }\n    result = true;\n    $(startNode).parentsUntil(node).addBack().each((function(_this) {\n      return function(i, n) {\n        var nodes;\n        nodes = $(n).parent().contents().filter(function() {\n          return !(this !== n && this.nodeType === 3 && !this.nodeValue);\n        });\n        if (nodes.first().get(0) !== n) {\n          return result = false;\n        }\n      };\n    })(this));\n    return result;\n  };\n\n  Selection.prototype.insertNode = function(node, range) {\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (range == null) {\n      return;\n    }\n    node = $(node)[0];\n    range.insertNode(node);\n    return this.setRangeAfter(node, range);\n  };\n\n  Selection.prototype.setRangeAfter = function(node, range) {\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (range == null) {\n      return;\n    }\n    node = $(node)[0];\n    range.setEndAfter(node);\n    range.collapse(false);\n    return this.selectRange(range);\n  };\n\n  Selection.prototype.setRangeBefore = function(node, range) {\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (range == null) {\n      return;\n    }\n    node = $(node)[0];\n    range.setEndBefore(node);\n    range.collapse(false);\n    return this.selectRange(range);\n  };\n\n  Selection.prototype.setRangeAtStartOf = function(node, range) {\n    if (range == null) {\n      range = this.getRange();\n    }\n    node = $(node).get(0);\n    range.setEnd(node, 0);\n    range.collapse(false);\n    return this.selectRange(range);\n  };\n\n  Selection.prototype.setRangeAtEndOf = function(node, range) {\n    var $lastNode, $node, contents, lastChild, lastText, nodeLength;\n    if (range == null) {\n      range = this.getRange();\n    }\n    $node = $(node);\n    node = $node.get(0);\n    if ($node.is('pre')) {\n      contents = $node.contents();\n      if (contents.length > 0) {\n        lastChild = contents.last();\n        lastText = lastChild.text();\n        if (lastText.charAt(lastText.length - 1) === '\\n') {\n          range.setEnd(lastChild[0], this.editor.util.getNodeLength(lastChild[0]) - 1);\n        } else {\n          range.setEnd(lastChild[0], this.editor.util.getNodeLength(lastChild[0]));\n        }\n      } else {\n        range.setEnd(node, 0);\n      }\n    } else {\n      nodeLength = this.editor.util.getNodeLength(node);\n      if (node.nodeType !== 3 && nodeLength > 0) {\n        $lastNode = $(node).contents().last();\n        if ($lastNode.is('br')) {\n          nodeLength -= 1;\n        } else if ($lastNode[0].nodeType !== 3 && this.editor.util.isEmptyNode($lastNode)) {\n          $lastNode.append(this.editor.util.phBr);\n          node = $lastNode[0];\n          nodeLength = 0;\n        }\n      }\n      range.setEnd(node, nodeLength);\n    }\n    range.collapse(false);\n    return this.selectRange(range);\n  };\n\n  Selection.prototype.deleteRangeContents = function(range) {\n    var endRange, startRange;\n    if (range == null) {\n      range = this.getRange();\n    }\n    startRange = range.cloneRange();\n    endRange = range.cloneRange();\n    startRange.collapse(true);\n    endRange.collapse(false);\n    if (!range.collapsed && this.rangeAtStartOf(this.editor.body, startRange) && this.rangeAtEndOf(this.editor.body, endRange)) {\n      this.editor.body.empty();\n      range.setStart(this.editor.body[0], 0);\n      range.collapse(true);\n      this.selectRange(range);\n    } else {\n      range.deleteContents();\n    }\n    return range;\n  };\n\n  Selection.prototype.breakBlockEl = function(el, range) {\n    var $el;\n    if (range == null) {\n      range = this.getRange();\n    }\n    $el = $(el);\n    if (!range.collapsed) {\n      return $el;\n    }\n    range.setStartBefore($el.get(0));\n    if (range.collapsed) {\n      return $el;\n    }\n    return $el.before(range.extractContents());\n  };\n\n  Selection.prototype.save = function(range) {\n    var endCaret, endRange, startCaret;\n    if (range == null) {\n      range = this.getRange();\n    }\n    if (this._selectionSaved) {\n      return;\n    }\n    endRange = range.cloneRange();\n    endRange.collapse(false);\n    startCaret = $('<span/>').addClass('simditor-caret-start');\n    endCaret = $('<span/>').addClass('simditor-caret-end');\n    endRange.insertNode(endCaret[0]);\n    range.insertNode(startCaret[0]);\n    this.clear();\n    return this._selectionSaved = true;\n  };\n\n  Selection.prototype.restore = function() {\n    var endCaret, endContainer, endOffset, range, startCaret, startContainer, startOffset;\n    if (!this._selectionSaved) {\n      return false;\n    }\n    startCaret = this.editor.body.find('.simditor-caret-start');\n    endCaret = this.editor.body.find('.simditor-caret-end');\n    if (startCaret.length && endCaret.length) {\n      startContainer = startCaret.parent();\n      startOffset = startContainer.contents().index(startCaret);\n      endContainer = endCaret.parent();\n      endOffset = endContainer.contents().index(endCaret);\n      if (startContainer[0] === endContainer[0]) {\n        endOffset -= 1;\n      }\n      range = document.createRange();\n      range.setStart(startContainer.get(0), startOffset);\n      range.setEnd(endContainer.get(0), endOffset);\n      startCaret.remove();\n      endCaret.remove();\n      this.selectRange(range);\n    } else {\n      startCaret.remove();\n      endCaret.remove();\n    }\n    this._selectionSaved = false;\n    return range;\n  };\n\n  return Selection;\n\n})(SimpleModule);\n\nvar Formatter,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\nFormatter = (function(_super) {\n  __extends(Formatter, _super);\n\n  function Formatter() {\n    return Formatter.__super__.constructor.apply(this, arguments);\n  }\n\n  Formatter.pluginName = 'Formatter';\n\n  Formatter.prototype._init = function() {\n    this.editor = this._module;\n    this._allowedTags = ['br', 'a', 'img', 'b', 'strong', 'i', 'u', 'font', 'p', 'ul', 'ol', 'li', 'blockquote', 'pre', 'h1', 'h2', 'h3', 'h4', 'hr'];\n    this._allowedAttributes = {\n      img: ['src', 'alt', 'width', 'height', 'data-image-src', 'data-image-size', 'data-image-name', 'data-non-image'],\n      a: ['href', 'target'],\n      font: ['color'],\n      pre: ['data-lang', 'class'],\n      p: ['data-indent'],\n      h1: ['data-indent'],\n      h2: ['data-indent'],\n      h3: ['data-indent'],\n      h4: ['data-indent']\n    };\n    return this.editor.body.on('click', 'a', (function(_this) {\n      return function(e) {\n        return false;\n      };\n    })(this));\n  };\n\n  Formatter.prototype.decorate = function($el) {\n    if ($el == null) {\n      $el = this.editor.body;\n    }\n    return this.editor.trigger('decorate', [$el]);\n  };\n\n  Formatter.prototype.undecorate = function($el) {\n    if ($el == null) {\n      $el = this.editor.body.clone();\n    }\n    this.editor.trigger('undecorate', [$el]);\n    return $.trim($el.html());\n  };\n\n  Formatter.prototype.autolink = function($el) {\n    var $node, findLinkNode, lastIndex, linkNodes, match, re, replaceEls, text, uri, _i, _len;\n    if ($el == null) {\n      $el = this.editor.body;\n    }\n    linkNodes = [];\n    findLinkNode = function($parentNode) {\n      return $parentNode.contents().each(function(i, node) {\n        var $node, text;\n        $node = $(node);\n        if ($node.is('a') || $node.closest('a, pre', $el).length) {\n          return;\n        }\n        if ($node.contents().length) {\n          return findLinkNode($node);\n        } else if ((text = $node.text()) && /https?:\\/\\/|www\\./ig.test(text)) {\n          return linkNodes.push($node);\n        }\n      });\n    };\n    findLinkNode($el);\n    re = /(https?:\\/\\/|www\\.)[\\w\\-\\.\\?&=\\/#%:,@\\!\\+]+/ig;\n    for (_i = 0, _len = linkNodes.length; _i < _len; _i++) {\n      $node = linkNodes[_i];\n      text = $node.text();\n      replaceEls = [];\n      match = null;\n      lastIndex = 0;\n      while ((match = re.exec(text)) !== null) {\n        replaceEls.push(document.createTextNode(text.substring(lastIndex, match.index)));\n        lastIndex = re.lastIndex;\n        uri = /^(http(s)?:\\/\\/|\\/)/.test(match[0]) ? match[0] : 'http://' + match[0];\n        replaceEls.push($('<a href=\"' + uri + '\" rel=\"nofollow\"></a>').text(match[0])[0]);\n      }\n      replaceEls.push(document.createTextNode(text.substring(lastIndex)));\n      $node.replaceWith($(replaceEls));\n    }\n    return $el;\n  };\n\n  Formatter.prototype.format = function($el) {\n    var $node, blockNode, n, node, _i, _j, _len, _len1, _ref, _ref1;\n    if ($el == null) {\n      $el = this.editor.body;\n    }\n    if ($el.is(':empty')) {\n      $el.append('<p>' + this.editor.util.phBr + '</p>');\n      return $el;\n    }\n    _ref = $el.contents();\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      n = _ref[_i];\n      this.cleanNode(n, true);\n    }\n    _ref1 = $el.contents();\n    for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n      node = _ref1[_j];\n      $node = $(node);\n      if ($node.is('br')) {\n        if (typeof blockNode !== \"undefined\" && blockNode !== null) {\n          blockNode = null;\n        }\n        $node.remove();\n      } else if (this.editor.util.isBlockNode(node)) {\n        if ($node.is('li')) {\n          if (blockNode && blockNode.is('ul, ol')) {\n            blockNode.append(node);\n          } else {\n            blockNode = $('<ul/>').insertBefore(node);\n            blockNode.append(node);\n          }\n        } else {\n          blockNode = null;\n        }\n      } else {\n        if (!blockNode || blockNode.is('ul, ol')) {\n          blockNode = $('<p/>').insertBefore(node);\n        }\n        blockNode.append(node);\n      }\n    }\n    return $el;\n  };\n\n  Formatter.prototype.cleanNode = function(node, recursive) {\n    var $childImg, $node, $p, $td, allowedAttributes, attr, contents, isDecoration, n, text, textNode, _i, _j, _len, _len1, _ref, _ref1;\n    $node = $(node);\n    if (!($node.length > 0)) {\n      return;\n    }\n    if ($node[0].nodeType === 3) {\n      text = $node.text().replace(/(\\r\\n|\\n|\\r)/gm, '');\n      if (text) {\n        textNode = document.createTextNode(text);\n        $node.replaceWith(textNode);\n      } else {\n        $node.remove();\n      }\n      return;\n    }\n    contents = $node.contents();\n    isDecoration = $node.is('[class^=\"simditor-\"]');\n    if ($node.is(this._allowedTags.join(',')) || isDecoration) {\n      if ($node.is('a') && ($childImg = $node.find('img')).length > 0) {\n        $node.replaceWith($childImg);\n        $node = $childImg;\n        contents = null;\n      }\n      if ($node.is('img') && $node.hasClass('uploading')) {\n        $node.remove();\n      }\n      if (!isDecoration) {\n        allowedAttributes = this._allowedAttributes[$node[0].tagName.toLowerCase()];\n        _ref = $.makeArray($node[0].attributes);\n        for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n          attr = _ref[_i];\n          if (!((allowedAttributes != null) && (_ref1 = attr.name, __indexOf.call(allowedAttributes, _ref1) >= 0))) {\n            $node.removeAttr(attr.name);\n          }\n        }\n      }\n    } else if ($node[0].nodeType === 1 && !$node.is(':empty')) {\n      if ($node.is('div, article, dl, header, footer, tr')) {\n        $node.append('<br/>');\n        contents.first().unwrap();\n      } else if ($node.is('table')) {\n        $p = $('<p/>');\n        $node.find('tr').each((function(_this) {\n          return function(i, tr) {\n            return $p.append($(tr).text() + '<br/>');\n          };\n        })(this));\n        $node.replaceWith($p);\n        contents = null;\n      } else if ($node.is('thead, tfoot')) {\n        $node.remove();\n        contents = null;\n      } else if ($node.is('th')) {\n        $td = $('<td/>').append($node.contents());\n        $node.replaceWith($td);\n      } else {\n        contents.first().unwrap();\n      }\n    } else {\n      $node.remove();\n      contents = null;\n    }\n    if (recursive && (contents != null) && !$node.is('pre')) {\n      for (_j = 0, _len1 = contents.length; _j < _len1; _j++) {\n        n = contents[_j];\n        this.cleanNode(n, true);\n      }\n    }\n    return null;\n  };\n\n  Formatter.prototype.clearHtml = function(html, lineBreak) {\n    var container, contents, result;\n    if (lineBreak == null) {\n      lineBreak = true;\n    }\n    container = $('<div/>').append(html);\n    contents = container.contents();\n    result = '';\n    contents.each((function(_this) {\n      return function(i, node) {\n        var $node, children;\n        if (node.nodeType === 3) {\n          return result += node.nodeValue;\n        } else if (node.nodeType === 1) {\n          $node = $(node);\n          children = $node.contents();\n          if (children.length > 0) {\n            result += _this.clearHtml(children);\n          }\n          if (lineBreak && i < contents.length - 1 && $node.is('br, p, div, li, tr, pre, address, artticle, aside, dl, figcaption, footer, h1, h2, h3, h4, header')) {\n            return result += '\\n';\n          }\n        }\n      };\n    })(this));\n    return result;\n  };\n\n  Formatter.prototype.beautify = function($contents) {\n    var uselessP;\n    uselessP = function($el) {\n      return !!($el.is('p') && !$el.text() && $el.children(':not(br)').length < 1);\n    };\n    return $contents.each((function(_this) {\n      return function(i, el) {\n        var $el;\n        $el = $(el);\n        if ($el.is(':not(img, br, col, td, hr, [class^=\"simditor-\"]):empty')) {\n          $el.remove();\n        }\n        if (uselessP($el)) {\n          $el.remove();\n        }\n        return $el.find(':not(img, br, col, td, hr, [class^=\"simditor-\"]):empty').remove();\n      };\n    })(this));\n  };\n\n  return Formatter;\n\n})(SimpleModule);\n\nvar InputManager,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; };\n\nInputManager = (function(_super) {\n  __extends(InputManager, _super);\n\n  function InputManager() {\n    return InputManager.__super__.constructor.apply(this, arguments);\n  }\n\n  InputManager.pluginName = 'InputManager';\n\n  InputManager.prototype.opts = {\n    pasteImage: false\n  };\n\n  InputManager.prototype._modifierKeys = [16, 17, 18, 91, 93, 224];\n\n  InputManager.prototype._arrowKeys = [37, 38, 39, 40];\n\n  InputManager.prototype._init = function() {\n    var submitKey;\n    this.editor = this._module;\n    if (this.opts.pasteImage && typeof this.opts.pasteImage !== 'string') {\n      this.opts.pasteImage = 'inline';\n    }\n    this._keystrokeHandlers = {};\n    this.hotkeys = simpleHotkeys({\n      el: this.editor.body\n    });\n    this._pasteArea = $('<div/>').css({\n      width: '1px',\n      height: '1px',\n      overflow: 'hidden',\n      position: 'fixed',\n      right: '0',\n      bottom: '100px'\n    }).attr({\n      tabIndex: '-1',\n      contentEditable: true\n    }).addClass('simditor-paste-area').appendTo(this.editor.el);\n    this._cleanPasteArea = $('<textarea/>').css({\n      width: '1px',\n      height: '1px',\n      overflow: 'hidden',\n      position: 'fixed',\n      right: '0',\n      bottom: '101px'\n    }).attr({\n      tabIndex: '-1'\n    }).addClass('simditor-clean-paste-area').appendTo(this.editor.el);\n    $(document).on('selectionchange.simditor' + this.editor.id, (function(_this) {\n      return function(e) {\n        if (!_this.focused) {\n          return;\n        }\n        if (_this._selectionTimer) {\n          clearTimeout(_this._selectionTimer);\n          _this._selectionTimer = null;\n        }\n        return _this._selectionTimer = setTimeout(function() {\n          return _this.editor.trigger('selectionchanged');\n        }, 20);\n      };\n    })(this));\n    this.editor.on('valuechanged', (function(_this) {\n      return function() {\n        if (!_this.editor.util.closestBlockEl() && _this.focused) {\n          _this.editor.selection.save();\n          _this.editor.formatter.format();\n          _this.editor.selection.restore();\n        }\n        _this.editor.body.find('hr, pre, .simditor-table').each(function(i, el) {\n          var $el, formatted;\n          $el = $(el);\n          if ($el.parent().is('blockquote') || $el.parent()[0] === _this.editor.body[0]) {\n            formatted = false;\n            if ($el.next().length === 0) {\n              $('<p/>').append(_this.editor.util.phBr).insertAfter($el);\n              formatted = true;\n            }\n            if ($el.prev().length === 0) {\n              $('<p/>').append(_this.editor.util.phBr).insertBefore($el);\n              formatted = true;\n            }\n            if (formatted) {\n              return setTimeout(function() {\n                return _this.editor.trigger('valuechanged');\n              }, 10);\n            }\n          }\n        });\n        _this.editor.body.find('pre:empty').append(_this.editor.util.phBr);\n        if (!_this.editor.util.supportSelectionChange && _this.focused) {\n          return _this.editor.trigger('selectionchanged');\n        }\n      };\n    })(this));\n    this.editor.on('selectionchanged', (function(_this) {\n      return function(e) {\n        return _this.editor.undoManager.update();\n      };\n    })(this));\n    this.editor.body.on('keydown', $.proxy(this._onKeyDown, this)).on('keypress', $.proxy(this._onKeyPress, this)).on('keyup', $.proxy(this._onKeyUp, this)).on('mouseup', $.proxy(this._onMouseUp, this)).on('focus', $.proxy(this._onFocus, this)).on('blur', $.proxy(this._onBlur, this)).on('paste', $.proxy(this._onPaste, this)).on('drop', $.proxy(this._onDrop, this));\n    if (this.editor.util.browser.firefox) {\n      this.addShortcut('cmd+left', (function(_this) {\n        return function(e) {\n          e.preventDefault();\n          _this.editor.selection.sel.modify('move', 'backward', 'lineboundary');\n          return false;\n        };\n      })(this));\n      this.addShortcut('cmd+right', (function(_this) {\n        return function(e) {\n          e.preventDefault();\n          _this.editor.selection.sel.modify('move', 'forward', 'lineboundary');\n          return false;\n        };\n      })(this));\n      this.addShortcut('cmd+a', (function(_this) {\n        return function(e) {\n          var $children, firstBlock, lastBlock, range;\n          $children = _this.editor.body.children();\n          if (!($children.length > 0)) {\n            return;\n          }\n          firstBlock = $children.first().get(0);\n          lastBlock = $children.last().get(0);\n          range = document.createRange();\n          range.setStart(firstBlock, 0);\n          range.setEnd(lastBlock, _this.editor.util.getNodeLength(lastBlock));\n          _this.editor.selection.selectRange(range);\n          return false;\n        };\n      })(this));\n    }\n    submitKey = this.editor.util.os.mac ? 'cmd+enter' : 'ctrl+enter';\n    this.addShortcut(submitKey, (function(_this) {\n      return function(e) {\n        _this.editor.el.closest('form').find('button:submit').click();\n        return false;\n      };\n    })(this));\n    if (this.editor.textarea.attr('autofocus')) {\n      return setTimeout((function(_this) {\n        return function() {\n          return _this.editor.focus();\n        };\n      })(this), 0);\n    }\n  };\n\n  InputManager.prototype._onFocus = function(e) {\n    this.editor.el.addClass('focus').removeClass('error');\n    this.focused = true;\n    this.lastCaretPosition = null;\n    return setTimeout((function(_this) {\n      return function() {\n        _this.editor.triggerHandler('focus');\n        return _this.editor.trigger('selectionchanged');\n      };\n    })(this), 0);\n  };\n\n  InputManager.prototype._onBlur = function(e) {\n    var _ref;\n    this.editor.el.removeClass('focus');\n    this.editor.sync();\n    this.focused = false;\n    this.lastCaretPosition = (_ref = this.editor.undoManager.currentState()) != null ? _ref.caret : void 0;\n    return this.editor.triggerHandler('blur');\n  };\n\n  InputManager.prototype._onMouseUp = function(e) {\n    if (!this.editor.util.supportSelectionChange) {\n      return setTimeout((function(_this) {\n        return function() {\n          return _this.editor.trigger('selectionchanged');\n        };\n      })(this), 0);\n    }\n  };\n\n  InputManager.prototype._onKeyDown = function(e) {\n    var $blockEl, metaKey, result, _base, _ref, _ref1;\n    if (this.editor.triggerHandler(e) === false) {\n      return false;\n    }\n    if (this.hotkeys.respondTo(e)) {\n      return;\n    }\n    if (e.which in this._keystrokeHandlers) {\n      result = typeof (_base = this._keystrokeHandlers[e.which])['*'] === \"function\" ? _base['*'](e) : void 0;\n      if (result) {\n        this.editor.trigger('valuechanged');\n        return false;\n      }\n      this.editor.util.traverseUp((function(_this) {\n        return function(node) {\n          var handler, _ref;\n          if (node.nodeType !== 1) {\n            return;\n          }\n          handler = (_ref = _this._keystrokeHandlers[e.which]) != null ? _ref[node.tagName.toLowerCase()] : void 0;\n          result = typeof handler === \"function\" ? handler(e, $(node)) : void 0;\n          if (result === true || result === false) {\n            return false;\n          }\n        };\n      })(this));\n      if (result) {\n        this.editor.trigger('valuechanged');\n        return false;\n      }\n    }\n    if ((_ref = e.which, __indexOf.call(this._modifierKeys, _ref) >= 0) || (_ref1 = e.which, __indexOf.call(this._arrowKeys, _ref1) >= 0)) {\n      return;\n    }\n    metaKey = this.editor.util.metaKey(e);\n    $blockEl = this.editor.util.closestBlockEl();\n    if (metaKey && e.which === 86) {\n      return;\n    }\n    if (this.editor.util.browser.webkit && e.which === 8 && this.editor.selection.rangeAtStartOf($blockEl)) {\n      setTimeout((function(_this) {\n        return function() {\n          var $newBlockEl;\n          if (!_this.focused) {\n            return;\n          }\n          $newBlockEl = _this.editor.util.closestBlockEl();\n          _this.editor.selection.save();\n          _this.editor.formatter.cleanNode($newBlockEl, true);\n          _this.editor.selection.restore();\n          return _this.editor.trigger('valuechanged');\n        };\n      })(this), 10);\n      this.typing = true;\n    } else if (this._typing) {\n      if (this._typing !== true) {\n        clearTimeout(this._typing);\n      }\n      this._typing = setTimeout((function(_this) {\n        return function() {\n          _this.editor.trigger('valuechanged');\n          return _this._typing = false;\n        };\n      })(this), 200);\n    } else {\n      setTimeout((function(_this) {\n        return function() {\n          return _this.editor.trigger('valuechanged');\n        };\n      })(this), 10);\n      this._typing = true;\n    }\n    return null;\n  };\n\n  InputManager.prototype._onKeyPress = function(e) {\n    if (this.editor.triggerHandler(e) === false) {\n      return false;\n    }\n  };\n\n  InputManager.prototype._onKeyUp = function(e) {\n    var p, _ref;\n    if (this.editor.triggerHandler(e) === false) {\n      return false;\n    }\n    if (!this.editor.util.supportSelectionChange && (_ref = e.which, __indexOf.call(this._arrowKeys, _ref) >= 0)) {\n      this.editor.trigger('selectionchanged');\n      return;\n    }\n    if ((e.which === 8 || e.which === 46) && this.editor.util.isEmptyNode(this.editor.body)) {\n      this.editor.body.empty();\n      p = $('<p/>').append(this.editor.util.phBr).appendTo(this.editor.body);\n      this.editor.selection.setRangeAtStartOf(p);\n    }\n  };\n\n  InputManager.prototype._onPaste = function(e) {\n    var $blockEl, cleanPaste, imageFile, pasteItem, range, uploadOpt, _ref;\n    if (this.editor.triggerHandler(e) === false) {\n      return false;\n    }\n    range = this.editor.selection.deleteRangeContents();\n    if (!range.collapsed) {\n      range.collapse(true);\n    }\n    $blockEl = this.editor.util.closestBlockEl();\n    cleanPaste = $blockEl.is('pre, table');\n    if (e.originalEvent.clipboardData && e.originalEvent.clipboardData.items && e.originalEvent.clipboardData.items.length > 0) {\n      pasteItem = e.originalEvent.clipboardData.items[0];\n      if (/^image\\//.test(pasteItem.type) && !cleanPaste) {\n        imageFile = pasteItem.getAsFile();\n        if (!((imageFile != null) && this.opts.pasteImage)) {\n          return;\n        }\n        if (!imageFile.name) {\n          imageFile.name = \"Clipboard Image.png\";\n        }\n        uploadOpt = {};\n        uploadOpt[this.opts.pasteImage] = true;\n        if ((_ref = this.editor.uploader) != null) {\n          _ref.upload(imageFile, uploadOpt);\n        }\n        return false;\n      }\n    }\n    this.editor.selection.save(range);\n    if (cleanPaste) {\n      this._cleanPasteArea.focus();\n      if (this.editor.util.browser.firefox) {\n        e.preventDefault();\n        this._cleanPasteArea.val(e.originalEvent.clipboardData.getData('text/plain'));\n      } else if (this.editor.util.browser.msie && this.editor.util.browser.version === 10) {\n        e.preventDefault();\n        this._cleanPasteArea.val(window.clipboardData.getData('Text'));\n      }\n    } else {\n      this._pasteArea.focus();\n      if (this.editor.util.browser.msie && this.editor.util.browser.version === 10) {\n        e.preventDefault();\n        this._pasteArea.html(window.clipboardData.getData('Text'));\n      }\n    }\n    return setTimeout((function(_this) {\n      return function() {\n        var $img, blob, children, insertPosition, lastLine, line, lines, node, pasteContent, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref1, _ref2, _ref3;\n        if (_this._pasteArea.is(':empty') && !_this._cleanPasteArea.val()) {\n          pasteContent = null;\n        } else if (cleanPaste) {\n          pasteContent = _this._cleanPasteArea.val();\n        } else {\n          pasteContent = $('<div/>').append(_this._pasteArea.contents());\n          pasteContent.find('table colgroup').remove();\n          _this.editor.formatter.format(pasteContent);\n          _this.editor.formatter.decorate(pasteContent);\n          _this.editor.formatter.beautify(pasteContent.children());\n          pasteContent = pasteContent.contents();\n        }\n        _this._pasteArea.empty();\n        _this._cleanPasteArea.val('');\n        range = _this.editor.selection.restore();\n        if (_this.editor.triggerHandler('pasting', [pasteContent]) === false) {\n          return;\n        }\n        if (!pasteContent) {\n          return;\n        } else if (cleanPaste) {\n          if ($blockEl.is('table')) {\n            lines = pasteContent.split('\\n');\n            lastLine = lines.pop();\n            for (_i = 0, _len = lines.length; _i < _len; _i++) {\n              line = lines[_i];\n              _this.editor.selection.insertNode(document.createTextNode(line));\n              _this.editor.selection.insertNode($('<br/>'));\n            }\n            _this.editor.selection.insertNode(document.createTextNode(lastLine));\n          } else {\n            pasteContent = $('<div/>').text(pasteContent);\n            _ref1 = pasteContent.contents();\n            for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {\n              node = _ref1[_j];\n              _this.editor.selection.insertNode($(node)[0], range);\n            }\n          }\n        } else if ($blockEl.is(_this.editor.body)) {\n          for (_k = 0, _len2 = pasteContent.length; _k < _len2; _k++) {\n            node = pasteContent[_k];\n            _this.editor.selection.insertNode(node, range);\n          }\n        } else if (pasteContent.length < 1) {\n          return;\n        } else if (pasteContent.length === 1) {\n          if (pasteContent.is('p')) {\n            children = pasteContent.contents();\n            if (children.length === 1 && children.is('img')) {\n              $img = children;\n              if (/^data:image/.test($img.attr('src'))) {\n                if (!_this.opts.pasteImage) {\n                  return;\n                }\n                blob = _this.editor.util.dataURLtoBlob($img.attr(\"src\"));\n                blob.name = \"Clipboard Image.png\";\n                uploadOpt = {};\n                uploadOpt[_this.opts.pasteImage] = true;\n                if ((_ref2 = _this.editor.uploader) != null) {\n                  _ref2.upload(blob, uploadOpt);\n                }\n                return;\n              } else if ($img.is('img[src^=\"webkit-fake-url://\"]')) {\n                return;\n              }\n            }\n            for (_l = 0, _len3 = children.length; _l < _len3; _l++) {\n              node = children[_l];\n              _this.editor.selection.insertNode(node, range);\n            }\n          } else if ($blockEl.is('p') && _this.editor.util.isEmptyNode($blockEl)) {\n            $blockEl.replaceWith(pasteContent);\n            _this.editor.selection.setRangeAtEndOf(pasteContent, range);\n          } else if (pasteContent.is('ul, ol')) {\n            if (pasteContent.find('li').length === 1) {\n              pasteContent = $('<div/>').text(pasteContent.text());\n              _ref3 = pasteContent.contents();\n              for (_m = 0, _len4 = _ref3.length; _m < _len4; _m++) {\n                node = _ref3[_m];\n                _this.editor.selection.insertNode($(node)[0], range);\n              }\n            } else if ($blockEl.is('li')) {\n              $blockEl.parent().after(pasteContent);\n              _this.editor.selection.setRangeAtEndOf(pasteContent, range);\n            } else {\n              $blockEl.after(pasteContent);\n              _this.editor.selection.setRangeAtEndOf(pasteContent, range);\n            }\n          } else {\n            $blockEl.after(pasteContent);\n            _this.editor.selection.setRangeAtEndOf(pasteContent, range);\n          }\n        } else {\n          if ($blockEl.is('li')) {\n            $blockEl = $blockEl.parent();\n          }\n          if (_this.editor.selection.rangeAtStartOf($blockEl, range)) {\n            insertPosition = 'before';\n          } else if (_this.editor.selection.rangeAtEndOf($blockEl, range)) {\n            insertPosition = 'after';\n          } else {\n            _this.editor.selection.breakBlockEl($blockEl, range);\n            insertPosition = 'before';\n          }\n          $blockEl[insertPosition](pasteContent);\n          _this.editor.selection.setRangeAtEndOf(pasteContent.last(), range);\n        }\n        return _this.editor.trigger('valuechanged');\n      };\n    })(this), 10);\n  };\n\n  InputManager.prototype._onDrop = function(e) {\n    if (this.editor.triggerHandler(e) === false) {\n      return false;\n    }\n    return setTimeout((function(_this) {\n      return function() {\n        return _this.editor.trigger('valuechanged');\n      };\n    })(this), 0);\n  };\n\n  InputManager.prototype.addKeystrokeHandler = function(key, node, handler) {\n    if (!this._keystrokeHandlers[key]) {\n      this._keystrokeHandlers[key] = {};\n    }\n    return this._keystrokeHandlers[key][node] = handler;\n  };\n\n  InputManager.prototype.addShortcut = function(keys, handler) {\n    return this.hotkeys.add(keys, $.proxy(handler, this));\n  };\n\n  return InputManager;\n\n})(SimpleModule);\n\nvar Keystroke,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nKeystroke = (function(_super) {\n  __extends(Keystroke, _super);\n\n  function Keystroke() {\n    return Keystroke.__super__.constructor.apply(this, arguments);\n  }\n\n  Keystroke.pluginName = 'Keystroke';\n\n  Keystroke.prototype._init = function() {\n    var titleEnterHandler;\n    this.editor = this._module;\n    if (this.editor.util.browser.safari) {\n      this.editor.inputManager.addKeystrokeHandler('13', '*', (function(_this) {\n        return function(e) {\n          var $blockEl, $br;\n          if (!e.shiftKey) {\n            return;\n          }\n          $blockEl = _this.editor.util.closestBlockEl();\n          if ($blockEl.is('pre')) {\n            return;\n          }\n          $br = $('<br/>');\n          if (_this.editor.selection.rangeAtEndOf($blockEl)) {\n            _this.editor.selection.insertNode($br);\n            _this.editor.selection.insertNode($('<br/>'));\n            _this.editor.selection.setRangeBefore($br);\n          } else {\n            _this.editor.selection.insertNode($br);\n          }\n          return true;\n        };\n      })(this));\n    }\n    if (this.editor.util.browser.webkit || this.editor.util.browser.msie) {\n      titleEnterHandler = (function(_this) {\n        return function(e, $node) {\n          var $p;\n          if (!_this.editor.selection.rangeAtEndOf($node)) {\n            return;\n          }\n          $p = $('<p/>').append(_this.editor.util.phBr).insertAfter($node);\n          _this.editor.selection.setRangeAtStartOf($p);\n          return true;\n        };\n      })(this);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h1', titleEnterHandler);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h2', titleEnterHandler);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h3', titleEnterHandler);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h4', titleEnterHandler);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h5', titleEnterHandler);\n      this.editor.inputManager.addKeystrokeHandler('13', 'h6', titleEnterHandler);\n    }\n    this.editor.inputManager.addKeystrokeHandler('8', '*', (function(_this) {\n      return function(e) {\n        var $prevBlockEl, $rootBlock;\n        $rootBlock = _this.editor.util.furthestBlockEl();\n        $prevBlockEl = $rootBlock.prev();\n        if ($prevBlockEl.is('hr') && _this.editor.selection.rangeAtStartOf($rootBlock)) {\n          _this.editor.selection.save();\n          $prevBlockEl.remove();\n          _this.editor.selection.restore();\n          return true;\n        }\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('9', '*', (function(_this) {\n      return function(e) {\n        var codeButton;\n        codeButton = _this.editor.toolbar.findButton('code');\n        if (!(_this.editor.opts.tabIndent || (codeButton && codeButton.active))) {\n          return;\n        }\n        if (e.shiftKey) {\n          _this.editor.util.outdent();\n        } else {\n          _this.editor.util.indent();\n        }\n        return true;\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('13', 'li', (function(_this) {\n      return function(e, $node) {\n        var $cloneNode, listEl, newBlockEl, newListEl;\n        $cloneNode = $node.clone();\n        $cloneNode.find('ul, ol').remove();\n        if (!(_this.editor.util.isEmptyNode($cloneNode) && $node.is(_this.editor.util.closestBlockEl()))) {\n          return;\n        }\n        listEl = $node.parent();\n        if ($node.next('li').length > 0) {\n          if (!_this.editor.util.isEmptyNode($node)) {\n            return;\n          }\n          if (listEl.parent('li').length > 0) {\n            newBlockEl = $('<li/>').append(_this.editor.util.phBr).insertAfter(listEl.parent('li'));\n            newListEl = $('<' + listEl[0].tagName + '/>').append($node.nextAll('li'));\n            newBlockEl.append(newListEl);\n          } else {\n            newBlockEl = $('<p/>').append(_this.editor.util.phBr).insertAfter(listEl);\n            newListEl = $('<' + listEl[0].tagName + '/>').append($node.nextAll('li'));\n            newBlockEl.after(newListEl);\n          }\n        } else {\n          if (listEl.parent('li').length > 0) {\n            newBlockEl = $('<li/>').insertAfter(listEl.parent('li'));\n            if ($node.contents().length > 0) {\n              newBlockEl.append($node.contents());\n            } else {\n              newBlockEl.append(_this.editor.util.phBr);\n            }\n          } else {\n            newBlockEl = $('<p/>').append(_this.editor.util.phBr).insertAfter(listEl);\n            if ($node.children('ul, ol').length > 0) {\n              newBlockEl.after($node.children('ul, ol'));\n            }\n          }\n        }\n        if ($node.prev('li').length) {\n          $node.remove();\n        } else {\n          listEl.remove();\n        }\n        _this.editor.selection.setRangeAtStartOf(newBlockEl);\n        return true;\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('13', 'pre', (function(_this) {\n      return function(e, $node) {\n        var $p, breakNode, range;\n        e.preventDefault();\n        if (e.shiftKey) {\n          $p = $('<p/>').append(_this.editor.util.phBr).insertAfter($node);\n          _this.editor.selection.setRangeAtStartOf($p);\n          return true;\n        }\n        range = _this.editor.selection.getRange();\n        breakNode = null;\n        range.deleteContents();\n        if (!_this.editor.util.browser.msie && _this.editor.selection.rangeAtEndOf($node)) {\n          breakNode = document.createTextNode('\\n\\n');\n          range.insertNode(breakNode);\n          range.setEnd(breakNode, 1);\n        } else {\n          breakNode = document.createTextNode('\\n');\n          range.insertNode(breakNode);\n          range.setStartAfter(breakNode);\n        }\n        range.collapse(false);\n        _this.editor.selection.selectRange(range);\n        return true;\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('13', 'blockquote', (function(_this) {\n      return function(e, $node) {\n        var $closestBlock, range;\n        $closestBlock = _this.editor.util.closestBlockEl();\n        if (!($closestBlock.is('p') && !$closestBlock.next().length && _this.editor.util.isEmptyNode($closestBlock))) {\n          return;\n        }\n        $node.after($closestBlock);\n        range = document.createRange();\n        _this.editor.selection.setRangeAtStartOf($closestBlock, range);\n        return true;\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('8', 'li', (function(_this) {\n      return function(e, $node) {\n        var $br, $childList, $newLi, $prevChildList, $prevNode, $textNode, range, text;\n        $childList = $node.children('ul, ol');\n        $prevNode = $node.prev('li');\n        if (!($childList.length > 0 && $prevNode.length > 0)) {\n          return false;\n        }\n        text = '';\n        $textNode = null;\n        $node.contents().each(function(i, n) {\n          if (n.nodeType === 1 && /UL|OL/.test(n.nodeName)) {\n            return false;\n          }\n          if (n.nodeType === 1 && /BR/.test(n.nodeName)) {\n            return;\n          }\n          if (n.nodeType === 3 && n.nodeValue) {\n            text += n.nodeValue;\n          } else if (n.nodeType === 1) {\n            text += $(n).text();\n          }\n          return $textNode = $(n);\n        });\n        if ($textNode && text.length === 1 && _this.editor.util.browser.firefox && !$textNode.next('br').length) {\n          $br = $(_this.editor.util.phBr).insertAfter($textNode);\n          $textNode.remove();\n          _this.editor.selection.setRangeBefore($br);\n          return true;\n        } else if (text.length > 0) {\n          return false;\n        }\n        range = document.createRange();\n        $prevChildList = $prevNode.children('ul, ol');\n        if ($prevChildList.length > 0) {\n          $newLi = $('<li/>').append(_this.editor.util.phBr).appendTo($prevChildList);\n          $prevChildList.append($childList.children('li'));\n          $node.remove();\n          _this.editor.selection.setRangeAtEndOf($newLi, range);\n        } else {\n          _this.editor.selection.setRangeAtEndOf($prevNode, range);\n          $prevNode.append($childList);\n          $node.remove();\n          _this.editor.selection.selectRange(range);\n        }\n        return true;\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('8', 'pre', (function(_this) {\n      return function(e, $node) {\n        var $newNode, codeStr, range;\n        if (!_this.editor.selection.rangeAtStartOf($node)) {\n          return;\n        }\n        codeStr = $node.html().replace('\\n', '<br/>');\n        $newNode = $('<p/>').append(codeStr || _this.editor.util.phBr).insertAfter($node);\n        $node.remove();\n        range = document.createRange();\n        _this.editor.selection.setRangeAtStartOf($newNode, range);\n        return true;\n      };\n    })(this));\n    return this.editor.inputManager.addKeystrokeHandler('8', 'blockquote', (function(_this) {\n      return function(e, $node) {\n        var $firstChild, range;\n        if (!_this.editor.selection.rangeAtStartOf($node)) {\n          return;\n        }\n        $firstChild = $node.children().first().unwrap();\n        range = document.createRange();\n        _this.editor.selection.setRangeAtStartOf($firstChild, range);\n        return true;\n      };\n    })(this));\n  };\n\n  return Keystroke;\n\n})(SimpleModule);\n\nvar UndoManager,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nUndoManager = (function(_super) {\n  __extends(UndoManager, _super);\n\n  function UndoManager() {\n    return UndoManager.__super__.constructor.apply(this, arguments);\n  }\n\n  UndoManager.pluginName = 'UndoManager';\n\n  UndoManager.prototype._index = -1;\n\n  UndoManager.prototype._capacity = 50;\n\n  UndoManager.prototype._timer = null;\n\n  UndoManager.prototype._init = function() {\n    var redoShortcut, undoShortcut;\n    this.editor = this._module;\n    this._stack = [];\n    if (this.editor.util.os.mac) {\n      undoShortcut = 'cmd+z';\n      redoShortcut = 'shift+cmd+z';\n    } else if (this.editor.util.os.win) {\n      undoShortcut = 'ctrl+z';\n      redoShortcut = 'ctrl+y';\n    } else {\n      undoShortcut = 'ctrl+z';\n      redoShortcut = 'shift+ctrl+z';\n    }\n    this.editor.inputManager.addShortcut(undoShortcut, (function(_this) {\n      return function(e) {\n        e.preventDefault();\n        _this.undo();\n        return false;\n      };\n    })(this));\n    this.editor.inputManager.addShortcut(redoShortcut, (function(_this) {\n      return function(e) {\n        e.preventDefault();\n        _this.redo();\n        return false;\n      };\n    })(this));\n    return this.editor.on('valuechanged', (function(_this) {\n      return function(e, src) {\n        if (src === 'undo') {\n          return;\n        }\n        if (_this._timer) {\n          clearTimeout(_this._timer);\n          _this._timer = null;\n        }\n        return _this._timer = setTimeout(function() {\n          _this._pushUndoState();\n          return _this._timer = null;\n        }, 200);\n      };\n    })(this));\n  };\n\n  UndoManager.prototype._pushUndoState = function() {\n    var currentState, html;\n    if (this.editor.triggerHandler('pushundostate') === false) {\n      return;\n    }\n    currentState = this.currentState();\n    html = this.editor.body.html();\n    if (currentState && currentState.html === html) {\n      return;\n    }\n    this._index += 1;\n    this._stack.length = this._index;\n    this._stack.push({\n      html: html,\n      caret: this.caretPosition()\n    });\n    if (this._stack.length > this._capacity) {\n      this._stack.shift();\n      return this._index -= 1;\n    }\n  };\n\n  UndoManager.prototype.currentState = function() {\n    if (this._stack.length && this._index > -1) {\n      return this._stack[this._index];\n    } else {\n      return null;\n    }\n  };\n\n  UndoManager.prototype.undo = function() {\n    var state;\n    if (this._index < 1 || this._stack.length < 2) {\n      return;\n    }\n    this.editor.hidePopover();\n    this._index -= 1;\n    state = this._stack[this._index];\n    this.editor.body.html(state.html);\n    this.caretPosition(state.caret);\n    this.editor.body.find('.selected').removeClass('selected');\n    this.editor.sync();\n    return this.editor.trigger('valuechanged', ['undo']);\n  };\n\n  UndoManager.prototype.redo = function() {\n    var state;\n    if (this._index < 0 || this._stack.length < this._index + 2) {\n      return;\n    }\n    this.editor.hidePopover();\n    this._index += 1;\n    state = this._stack[this._index];\n    this.editor.body.html(state.html);\n    this.caretPosition(state.caret);\n    this.editor.body.find('.selected').removeClass('selected');\n    this.editor.sync();\n    return this.editor.trigger('valuechanged', ['undo']);\n  };\n\n  UndoManager.prototype.update = function() {\n    var currentState, html;\n    if (this._timer) {\n      return;\n    }\n    currentState = this.currentState();\n    if (!currentState) {\n      return;\n    }\n    html = this.editor.body.html();\n    currentState.html = html;\n    return currentState.caret = this.caretPosition();\n  };\n\n  UndoManager.prototype._getNodeOffset = function(node, index) {\n    var $parent, merging, offset;\n    if (index) {\n      $parent = $(node);\n    } else {\n      $parent = $(node).parent();\n    }\n    offset = 0;\n    merging = false;\n    $parent.contents().each((function(_this) {\n      return function(i, child) {\n        if (index === i || node === child) {\n          return false;\n        }\n        if (child.nodeType === 3) {\n          if (!merging) {\n            offset += 1;\n            merging = true;\n          }\n        } else {\n          offset += 1;\n          merging = false;\n        }\n        return null;\n      };\n    })(this));\n    return offset;\n  };\n\n  UndoManager.prototype._getNodePosition = function(node, offset) {\n    var position, prevNode;\n    if (node.nodeType === 3) {\n      prevNode = node.previousSibling;\n      while (prevNode && prevNode.nodeType === 3) {\n        node = prevNode;\n        offset += this.editor.util.getNodeLength(prevNode);\n        prevNode = prevNode.previousSibling;\n      }\n    } else {\n      offset = this._getNodeOffset(node, offset);\n    }\n    position = [];\n    position.unshift(offset);\n    this.editor.util.traverseUp((function(_this) {\n      return function(n) {\n        return position.unshift(_this._getNodeOffset(n));\n      };\n    })(this), node);\n    return position;\n  };\n\n  UndoManager.prototype._getNodeByPosition = function(position) {\n    var child, childNodes, i, node, offset, _i, _len, _ref;\n    node = this.editor.body[0];\n    _ref = position.slice(0, position.length - 1);\n    for (i = _i = 0, _len = _ref.length; _i < _len; i = ++_i) {\n      offset = _ref[i];\n      childNodes = node.childNodes;\n      if (offset > childNodes.length - 1) {\n        if (i === position.length - 2 && $(node).is('pre')) {\n          child = document.createTextNode('');\n          node.appendChild(child);\n          childNodes = node.childNodes;\n        } else {\n          node = null;\n          break;\n        }\n      }\n      node = childNodes[offset];\n    }\n    return node;\n  };\n\n  UndoManager.prototype.caretPosition = function(caret) {\n    var endContainer, endOffset, range, startContainer, startOffset;\n    if (!caret) {\n      range = this.editor.selection.getRange();\n      if (!(this.editor.inputManager.focused && (range != null))) {\n        return {};\n      }\n      caret = {\n        start: [],\n        end: null,\n        collapsed: true\n      };\n      caret.start = this._getNodePosition(range.startContainer, range.startOffset);\n      if (!range.collapsed) {\n        caret.end = this._getNodePosition(range.endContainer, range.endOffset);\n        caret.collapsed = false;\n      }\n      return caret;\n    } else {\n      if (!this.editor.inputManager.focused) {\n        this.editor.body.focus();\n      }\n      if (!caret.start) {\n        this.editor.body.blur();\n        return;\n      }\n      startContainer = this._getNodeByPosition(caret.start);\n      startOffset = caret.start[caret.start.length - 1];\n      if (caret.collapsed) {\n        endContainer = startContainer;\n        endOffset = startOffset;\n      } else {\n        endContainer = this._getNodeByPosition(caret.end);\n        endOffset = caret.start[caret.start.length - 1];\n      }\n      if (!startContainer || !endContainer) {\n        throw new Error('simditor: invalid caret state');\n        return;\n      }\n      range = document.createRange();\n      range.setStart(startContainer, startOffset);\n      range.setEnd(endContainer, endOffset);\n      return this.editor.selection.selectRange(range);\n    }\n  };\n\n  return UndoManager;\n\n})(SimpleModule);\n\nvar Util,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nUtil = (function(_super) {\n  __extends(Util, _super);\n\n  function Util() {\n    return Util.__super__.constructor.apply(this, arguments);\n  }\n\n  Util.pluginName = 'Util';\n\n  Util.prototype._init = function() {\n    this.editor = this._module;\n    if (this.browser.msie && this.browser.version < 11) {\n      return this.phBr = '';\n    }\n  };\n\n  Util.prototype.phBr = '<br/>';\n\n  Util.prototype.os = (function() {\n    var os;\n    os = {};\n    if (/Mac/.test(navigator.appVersion)) {\n      os.mac = true;\n    } else if (/Linux/.test(navigator.appVersion)) {\n      os.linux = true;\n    } else if (/Win/.test(navigator.appVersion)) {\n      os.win = true;\n    } else if (/X11/.test(navigator.appVersion)) {\n      os.unix = true;\n    }\n    if (/Mobi/.test(navigator.appVersion)) {\n      os.mobile = true;\n    }\n    return os;\n  })();\n\n  Util.prototype.browser = (function() {\n    var chrome, firefox, ie, safari, ua, _ref, _ref1, _ref2, _ref3;\n    ua = navigator.userAgent;\n    ie = /(msie|trident)/i.test(ua);\n    chrome = /chrome|crios/i.test(ua);\n    safari = /safari/i.test(ua) && !chrome;\n    firefox = /firefox/i.test(ua);\n    if (ie) {\n      return {\n        msie: true,\n        version: ((_ref = ua.match(/(msie |rv:)(\\d+(\\.\\d+)?)/i)) != null ? _ref[2] : void 0) * 1\n      };\n    } else if (chrome) {\n      return {\n        webkit: true,\n        chrome: true,\n        version: ((_ref1 = ua.match(/(?:chrome|crios)\\/(\\d+(\\.\\d+)?)/i)) != null ? _ref1[1] : void 0) * 1\n      };\n    } else if (safari) {\n      return {\n        webkit: true,\n        safari: true,\n        version: ((_ref2 = ua.match(/version\\/(\\d+(\\.\\d+)?)/i)) != null ? _ref2[1] : void 0) * 1\n      };\n    } else if (firefox) {\n      return {\n        mozilla: true,\n        firefox: true,\n        version: ((_ref3 = ua.match(/firefox\\/(\\d+(\\.\\d+)?)/i)) != null ? _ref3[1] : void 0) * 1\n      };\n    } else {\n      return {};\n    }\n  })();\n\n  Util.prototype.supportSelectionChange = (function() {\n    var e, onselectionchange;\n    onselectionchange = document.onselectionchange;\n    if (onselectionchange !== void 0) {\n      try {\n        document.onselectionchange = 0;\n        return document.onselectionchange === null;\n      } catch (_error) {\n        e = _error;\n      } finally {\n        document.onselectionchange = onselectionchange;\n      }\n    }\n    return false;\n  })();\n\n  Util.prototype.reflow = function(el) {\n    if (el == null) {\n      el = document;\n    }\n    return $(el)[0].offsetHeight;\n  };\n\n  Util.prototype.metaKey = function(e) {\n    var isMac;\n    isMac = /Mac/.test(navigator.userAgent);\n    if (isMac) {\n      return e.metaKey;\n    } else {\n      return e.ctrlKey;\n    }\n  };\n\n  Util.prototype.isEmptyNode = function(node) {\n    var $node;\n    $node = $(node);\n    return $node.is(':empty') || (!$node.text() && !$node.find(':not(br, span, div)').length);\n  };\n\n  Util.prototype.isBlockNode = function(node) {\n    node = $(node)[0];\n    if (!node || node.nodeType === 3) {\n      return false;\n    }\n    return /^(div|p|ul|ol|li|blockquote|hr|pre|h1|h2|h3|h4|table)$/.test(node.nodeName.toLowerCase());\n  };\n\n  Util.prototype.closestBlockEl = function(node) {\n    var $node, blockEl, range;\n    if (node == null) {\n      range = this.editor.selection.getRange();\n      node = range != null ? range.commonAncestorContainer : void 0;\n    }\n    $node = $(node);\n    if (!$node.length) {\n      return null;\n    }\n    blockEl = $node.parentsUntil(this.editor.body).addBack();\n    blockEl = blockEl.filter((function(_this) {\n      return function(i) {\n        return _this.isBlockNode(blockEl.eq(i));\n      };\n    })(this));\n    if (blockEl.length) {\n      return blockEl.last();\n    } else {\n      return null;\n    }\n  };\n\n  Util.prototype.furthestNode = function(node, filter) {\n    var $node, blockEl, range;\n    if (node == null) {\n      range = this.editor.selection.getRange();\n      node = range != null ? range.commonAncestorContainer : void 0;\n    }\n    $node = $(node);\n    if (!$node.length) {\n      return null;\n    }\n    blockEl = $node.parentsUntil(this.editor.body).addBack();\n    blockEl = blockEl.filter((function(_this) {\n      return function(i) {\n        var $n;\n        $n = blockEl.eq(i);\n        if ($.isFunction(filter)) {\n          return filter($n);\n        } else {\n          return $n.is(filter);\n        }\n      };\n    })(this));\n    if (blockEl.length) {\n      return blockEl.first();\n    } else {\n      return null;\n    }\n  };\n\n  Util.prototype.furthestBlockEl = function(node) {\n    return this.furthestNode(node, this.isBlockNode);\n  };\n\n  Util.prototype.getNodeLength = function(node) {\n    switch (node.nodeType) {\n      case 7:\n      case 10:\n        return 0;\n      case 3:\n      case 8:\n        return node.length;\n      default:\n        return node.childNodes.length;\n    }\n  };\n\n  Util.prototype.traverseUp = function(callback, node) {\n    var n, nodes, range, result, _i, _len, _results;\n    if (node == null) {\n      range = this.editor.selection.getRange();\n      node = range != null ? range.commonAncestorContainer : void 0;\n    }\n    if ((node == null) || !$.contains(this.editor.body[0], node)) {\n      return false;\n    }\n    nodes = $(node).parentsUntil(this.editor.body).get();\n    nodes.unshift(node);\n    _results = [];\n    for (_i = 0, _len = nodes.length; _i < _len; _i++) {\n      n = nodes[_i];\n      result = callback(n);\n      if (result === false) {\n        break;\n      } else {\n        _results.push(void 0);\n      }\n    }\n    return _results;\n  };\n\n  Util.prototype.indent = function() {\n    var $blockEl, $childList, $nextTd, $parentLi, $td, indentLevel, range, spaceNode, tagName, _ref;\n    $blockEl = this.editor.util.closestBlockEl();\n    if (!($blockEl && $blockEl.length > 0)) {\n      return false;\n    }\n    if ($blockEl.is('pre')) {\n      spaceNode = document.createTextNode('\\u00A0\\u00A0');\n      this.editor.selection.insertNode(spaceNode);\n    } else if ($blockEl.is('li')) {\n      $parentLi = $blockEl.prev('li');\n      if ($parentLi.length < 1) {\n        return false;\n      }\n      this.editor.selection.save();\n      tagName = $blockEl.parent()[0].tagName;\n      $childList = $parentLi.children('ul, ol');\n      if ($childList.length > 0) {\n        $childList.append($blockEl);\n      } else {\n        $('<' + tagName + '/>').append($blockEl).appendTo($parentLi);\n      }\n      this.editor.selection.restore();\n    } else if ($blockEl.is('p, h1, h2, h3, h4')) {\n      indentLevel = (_ref = $blockEl.attr('data-indent')) != null ? _ref : 0;\n      indentLevel = indentLevel * 1 + 1;\n      if (indentLevel > 10) {\n        indentLevel = 10;\n      }\n      $blockEl.attr('data-indent', indentLevel);\n    } else if ($blockEl.is('table')) {\n      range = this.editor.selection.getRange();\n      $td = $(range.commonAncestorContainer).closest('td');\n      $nextTd = $td.next('td');\n      if (!($nextTd.length > 0)) {\n        $nextTd = $td.parent('tr').next('tr').find('td:first');\n      }\n      if (!($td.length > 0 && $nextTd.length > 0)) {\n        return false;\n      }\n      this.editor.selection.setRangeAtEndOf($nextTd);\n    } else {\n      spaceNode = document.createTextNode('\\u00A0\\u00A0\\u00A0\\u00A0');\n      this.editor.selection.insertNode(spaceNode);\n    }\n    this.editor.trigger('valuechanged');\n    return true;\n  };\n\n  Util.prototype.outdent = function() {\n    var $blockEl, $parent, $parentLi, $prevTd, $td, button, indentLevel, range, _ref;\n    $blockEl = this.editor.util.closestBlockEl();\n    if (!($blockEl && $blockEl.length > 0)) {\n      return false;\n    }\n    if ($blockEl.is('pre')) {\n      return false;\n    } else if ($blockEl.is('li')) {\n      $parent = $blockEl.parent();\n      $parentLi = $parent.parent('li');\n      if ($parentLi.length < 1) {\n        button = this.editor.toolbar.findButton($parent[0].tagName.toLowerCase());\n        if (button != null) {\n          button.command();\n        }\n        return false;\n      }\n      this.editor.selection.save();\n      if ($blockEl.next('li').length > 0) {\n        $('<' + $parent[0].tagName + '/>').append($blockEl.nextAll('li')).appendTo($blockEl);\n      }\n      $blockEl.insertAfter($parentLi);\n      if ($parent.children('li').length < 1) {\n        $parent.remove();\n      }\n      this.editor.selection.restore();\n    } else if ($blockEl.is('p, h1, h2, h3, h4')) {\n      indentLevel = (_ref = $blockEl.attr('data-indent')) != null ? _ref : 0;\n      indentLevel = indentLevel * 1 - 1;\n      if (indentLevel < 0) {\n        indentLevel = 0;\n      }\n      $blockEl.attr('data-indent', indentLevel);\n    } else if ($blockEl.is('table')) {\n      range = this.editor.selection.getRange();\n      $td = $(range.commonAncestorContainer).closest('td');\n      $prevTd = $td.prev('td');\n      if (!($prevTd.length > 0)) {\n        $prevTd = $td.parent('tr').prev('tr').find('td:last');\n      }\n      if (!($td.length > 0 && $prevTd.length > 0)) {\n        return false;\n      }\n      this.editor.selection.setRangeAtEndOf($prevTd);\n    } else {\n      return false;\n    }\n    this.editor.trigger('valuechanged');\n    return true;\n  };\n\n  Util.prototype.dataURLtoBlob = function(dataURL) {\n    var BlobBuilder, arrayBuffer, bb, byteString, hasArrayBufferViewSupport, hasBlobConstructor, i, intArray, mimeString, _i, _ref;\n    hasBlobConstructor = window.Blob && (function() {\n      var e;\n      try {\n        return Boolean(new Blob());\n      } catch (_error) {\n        e = _error;\n        return false;\n      }\n    })();\n    hasArrayBufferViewSupport = hasBlobConstructor && window.Uint8Array && (function() {\n      var e;\n      try {\n        return new Blob([new Uint8Array(100)]).size === 100;\n      } catch (_error) {\n        e = _error;\n        return false;\n      }\n    })();\n    BlobBuilder = window.BlobBuilder || window.WebKitBlobBuilder || window.MozBlobBuilder || window.MSBlobBuilder;\n    if (!((hasBlobConstructor || BlobBuilder) && window.atob && window.ArrayBuffer && window.Uint8Array)) {\n      return false;\n    }\n    if (dataURL.split(',')[0].indexOf('base64') >= 0) {\n      byteString = atob(dataURL.split(',')[1]);\n    } else {\n      byteString = decodeURIComponent(dataURL.split(',')[1]);\n    }\n    arrayBuffer = new ArrayBuffer(byteString.length);\n    intArray = new Uint8Array(arrayBuffer);\n    for (i = _i = 0, _ref = byteString.length; 0 <= _ref ? _i <= _ref : _i >= _ref; i = 0 <= _ref ? ++_i : --_i) {\n      intArray[i] = byteString.charCodeAt(i);\n    }\n    mimeString = dataURL.split(',')[0].split(':')[1].split(';')[0];\n    if (hasBlobConstructor) {\n      return new Blob([hasArrayBufferViewSupport ? intArray : arrayBuffer], {\n        type: mimeString\n      });\n    }\n    bb = new BlobBuilder();\n    bb.append(arrayBuffer);\n    return bb.getBlob(mimeString);\n  };\n\n  return Util;\n\n})(SimpleModule);\n\nvar Toolbar,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nToolbar = (function(_super) {\n  __extends(Toolbar, _super);\n\n  function Toolbar() {\n    return Toolbar.__super__.constructor.apply(this, arguments);\n  }\n\n  Toolbar.pluginName = 'Toolbar';\n\n  Toolbar.prototype.opts = {\n    toolbar: true,\n    toolbarFloat: true,\n    toolbarHidden: false,\n    toolbarFloatOffset: 0\n  };\n\n  Toolbar.prototype._tpl = {\n    wrapper: '<div class=\"simditor-toolbar\"><ul></ul></div>',\n    separator: '<li><span class=\"separator\"></span></li>'\n  };\n\n  Toolbar.prototype._init = function() {\n    var toolbarHeight;\n    this.editor = this._module;\n    if (!this.opts.toolbar) {\n      return;\n    }\n    if (!$.isArray(this.opts.toolbar)) {\n      this.opts.toolbar = ['bold', 'italic', 'underline', 'strikethrough', '|', 'ol', 'ul', 'blockquote', 'code', '|', 'link', 'image', '|', 'indent', 'outdent'];\n    }\n    this._render();\n    this.list.on('click', (function(_this) {\n      return function(e) {\n        return false;\n      };\n    })(this));\n    this.wrapper.on('mousedown', (function(_this) {\n      return function(e) {\n        return _this.list.find('.menu-on').removeClass('.menu-on');\n      };\n    })(this));\n    $(document).on('mousedown.simditor' + this.editor.id, (function(_this) {\n      return function(e) {\n        return _this.list.find('.menu-on').removeClass('.menu-on');\n      };\n    })(this));\n    if (!this.opts.toolbarHidden && this.opts.toolbarFloat) {\n      this.wrapper.width(this.wrapper.outerWidth());\n      this.wrapper.css('top', this.opts.toolbarFloatOffset);\n      toolbarHeight = this.wrapper.outerHeight();\n      if (!this.editor.util.os.mobile) {\n        $(window).on('resize.simditor-' + this.editor.id, (function(_this) {\n          return function(e) {\n            _this.wrapper.css('position', 'static');\n            _this.editor.util.reflow(_this.wrapper);\n            _this.wrapper.css('left', _this.wrapper.offset().left);\n            return _this.wrapper.css('position', '');\n          };\n        })(this)).resize();\n      }\n      $(window).on('scroll.simditor-' + this.editor.id, (function(_this) {\n        return function(e) {\n          var bottomEdge, scrollTop, topEdge;\n          topEdge = _this.editor.wrapper.offset().top;\n          bottomEdge = topEdge + _this.editor.wrapper.outerHeight() - 80;\n          scrollTop = $(document).scrollTop() + _this.opts.toolbarFloatOffset;\n          if (scrollTop <= topEdge || scrollTop >= bottomEdge) {\n            _this.editor.wrapper.removeClass('toolbar-floating').css('padding-top', '');\n            if (_this.editor.util.os.mobile) {\n              return _this.wrapper.css('top', _this.opts.toolbarFloatOffset);\n            }\n          } else {\n            _this.editor.wrapper.addClass('toolbar-floating').css('padding-top', toolbarHeight);\n            if (_this.editor.util.os.mobile) {\n              return _this.wrapper.css('top', scrollTop - topEdge + _this.opts.toolbarFloatOffset);\n            }\n          }\n        };\n      })(this));\n    }\n    this.editor.on('selectionchanged', (function(_this) {\n      return function() {\n        return _this.toolbarStatus();\n      };\n    })(this));\n    this.editor.on('destroy', (function(_this) {\n      return function() {\n        return _this.buttons.length = 0;\n      };\n    })(this));\n    return $(document).on('mousedown.simditor-' + this.editor.id, (function(_this) {\n      return function(e) {\n        return _this.list.find('li.menu-on').removeClass('menu-on');\n      };\n    })(this));\n  };\n\n  Toolbar.prototype._render = function() {\n    var name, _i, _len, _ref;\n    this.buttons = [];\n    this.wrapper = $(this._tpl.wrapper).prependTo(this.editor.wrapper);\n    this.list = this.wrapper.find('ul');\n    _ref = this.opts.toolbar;\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      name = _ref[_i];\n      if (name === '|') {\n        $(this._tpl.separator).appendTo(this.list);\n        continue;\n      }\n      if (!this.constructor.buttons[name]) {\n        throw new Error('simditor: invalid toolbar button \"' + name + '\"');\n        continue;\n      }\n      this.buttons.push(new this.constructor.buttons[name]({\n        editor: this.editor\n      }));\n    }\n    if (this.opts.toolbarHidden) {\n      return this.wrapper.hide();\n    } else {\n      return this.editor.placeholderEl.css('top', this.wrapper.outerHeight());\n    }\n  };\n\n  Toolbar.prototype.toolbarStatus = function(name) {\n    var buttons;\n    if (!this.editor.inputManager.focused) {\n      return;\n    }\n    buttons = this.buttons.slice(0);\n    return this.editor.util.traverseUp((function(_this) {\n      return function(node) {\n        var button, i, removeButtons, _i, _j, _len, _len1;\n        removeButtons = [];\n        for (i = _i = 0, _len = buttons.length; _i < _len; i = ++_i) {\n          button = buttons[i];\n          if ((name != null) && button.name !== name) {\n            continue;\n          }\n          if (!button.status || button.status($(node)) === true) {\n            removeButtons.push(button);\n          }\n        }\n        for (_j = 0, _len1 = removeButtons.length; _j < _len1; _j++) {\n          button = removeButtons[_j];\n          i = $.inArray(button, buttons);\n          buttons.splice(i, 1);\n        }\n        if (buttons.length === 0) {\n          return false;\n        }\n      };\n    })(this));\n  };\n\n  Toolbar.prototype.findButton = function(name) {\n    var button;\n    button = this.list.find('.toolbar-item-' + name).data('button');\n    return button != null ? button : null;\n  };\n\n  Toolbar.addButton = function(btn) {\n    return this.buttons[btn.prototype.name] = btn;\n  };\n\n  Toolbar.buttons = {};\n\n  return Toolbar;\n\n})(SimpleModule);\n\nvar Simditor,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nSimditor = (function(_super) {\n  __extends(Simditor, _super);\n\n  function Simditor() {\n    return Simditor.__super__.constructor.apply(this, arguments);\n  }\n\n  Simditor.connect(Util);\n\n  Simditor.connect(InputManager);\n\n  Simditor.connect(UndoManager);\n\n  Simditor.connect(Keystroke);\n\n  Simditor.connect(Formatter);\n\n  Simditor.connect(Selection);\n\n  Simditor.connect(Toolbar);\n\n  Simditor.count = 0;\n\n  Simditor.prototype.opts = {\n    textarea: null,\n    placeholder: '',\n    defaultImage: 'images/image.png',\n    params: {},\n    upload: false,\n    tabIndent: true\n  };\n\n  Simditor.prototype._init = function() {\n    var e, editor, form, uploadOpts;\n    this.textarea = $(this.opts.textarea);\n    this.opts.placeholder = this.opts.placeholder || this.textarea.attr('placeholder');\n    if (!this.textarea.length) {\n      throw new Error('simditor: param textarea is required.');\n      return;\n    }\n    editor = this.textarea.data('simditor');\n    if (editor != null) {\n      editor.destroy();\n    }\n    this.id = ++Simditor.count;\n    this._render();\n    if (this.opts.upload && simpleUploader) {\n      uploadOpts = typeof this.opts.upload === 'object' ? this.opts.upload : {};\n      this.uploader = simpleUploader(uploadOpts);\n    }\n    form = this.textarea.closest('form');\n    if (form.length) {\n      form.on('submit.simditor-' + this.id, (function(_this) {\n        return function() {\n          return _this.sync();\n        };\n      })(this));\n      form.on('reset.simditor-' + this.id, (function(_this) {\n        return function() {\n          return _this.setValue('');\n        };\n      })(this));\n    }\n    this.on('initialized', (function(_this) {\n      return function() {\n        if (_this.opts.placeholder) {\n          _this.on('valuechanged', function() {\n            return _this._placeholder();\n          });\n        }\n        return _this.setValue(_this.textarea.val().trim() || '');\n      };\n    })(this));\n    if (this.util.browser.mozilla) {\n      this.util.reflow();\n      try {\n        document.execCommand(\"enableObjectResizing\", false, false);\n        return document.execCommand(\"enableInlineTableEditing\", false, false);\n      } catch (_error) {\n        e = _error;\n      }\n    }\n  };\n\n  Simditor.prototype._tpl = \"<div class=\\\"simditor\\\">\\n  <div class=\\\"simditor-wrapper\\\">\\n    <div class=\\\"simditor-placeholder\\\"></div>\\n    <div class=\\\"simditor-body\\\" contenteditable=\\\"true\\\">\\n    </div>\\n  </div>\\n</div>\";\n\n  Simditor.prototype._render = function() {\n    var key, val, _ref, _results;\n    this.el = $(this._tpl).insertBefore(this.textarea);\n    this.wrapper = this.el.find('.simditor-wrapper');\n    this.body = this.wrapper.find('.simditor-body');\n    this.placeholderEl = this.wrapper.find('.simditor-placeholder').append(this.opts.placeholder);\n    this.el.append(this.textarea).data('simditor', this);\n    this.textarea.data('simditor', this).hide().blur();\n    this.body.attr('tabindex', this.textarea.attr('tabindex'));\n    if (this.util.os.mac) {\n      this.el.addClass('simditor-mac');\n    } else if (this.util.os.linux) {\n      this.el.addClass('simditor-linux');\n    }\n    if (this.util.os.mobile) {\n      this.el.addClass('simditor-mobile');\n    }\n    if (this.opts.params) {\n      _ref = this.opts.params;\n      _results = [];\n      for (key in _ref) {\n        val = _ref[key];\n        _results.push($('<input/>', {\n          type: 'hidden',\n          name: key,\n          value: val\n        }).insertAfter(this.textarea));\n      }\n      return _results;\n    }\n  };\n\n  Simditor.prototype._placeholder = function() {\n    var children, _ref;\n    children = this.body.children();\n    if (children.length === 0 || (children.length === 1 && this.util.isEmptyNode(children) && ((_ref = children.data('indent')) != null ? _ref : 0) < 1)) {\n      return this.placeholderEl.show();\n    } else {\n      return this.placeholderEl.hide();\n    }\n  };\n\n  Simditor.prototype.setValue = function(val) {\n    this.hidePopover();\n    this.textarea.val(val);\n    this.body.html(val);\n    this.formatter.format();\n    this.formatter.decorate();\n    this.util.reflow(this.body);\n    this.inputManager.lastCaretPosition = null;\n    return this.trigger('valuechanged');\n  };\n\n  Simditor.prototype.getValue = function() {\n    return this.sync();\n  };\n\n  Simditor.prototype.sync = function() {\n    var children, cloneBody, emptyP, firstP, lastP, val;\n    cloneBody = this.body.clone();\n    this.formatter.undecorate(cloneBody);\n    this.formatter.format(cloneBody);\n    this.formatter.autolink(cloneBody);\n    children = cloneBody.children();\n    lastP = children.last('p');\n    firstP = children.first('p');\n    while (lastP.is('p') && this.util.isEmptyNode(lastP)) {\n      emptyP = lastP;\n      lastP = lastP.prev('p');\n      emptyP.remove();\n    }\n    while (firstP.is('p') && this.util.isEmptyNode(firstP)) {\n      emptyP = firstP;\n      firstP = lastP.next('p');\n      emptyP.remove();\n    }\n    cloneBody.find('img.uploading').remove();\n    val = $.trim(cloneBody.html());\n    this.textarea.val(val);\n    return val;\n  };\n\n  Simditor.prototype.focus = function() {\n    var $blockEl, range;\n    if (this.inputManager.lastCaretPosition) {\n      return this.undoManager.caretPosition(this.inputManager.lastCaretPosition);\n    } else {\n      $blockEl = this.body.find('p, li, pre, h1, h2, h3, h4, td').first();\n      if (!($blockEl.length > 0)) {\n        return;\n      }\n      range = document.createRange();\n      this.selection.setRangeAtStartOf($blockEl, range);\n      return this.body.focus();\n    }\n  };\n\n  Simditor.prototype.blur = function() {\n    return this.body.blur();\n  };\n\n  Simditor.prototype.hidePopover = function() {\n    return this.el.find('.simditor-popover').each((function(_this) {\n      return function(i, popover) {\n        popover = $(popover).data('popover');\n        if (popover.active) {\n          return popover.hide();\n        }\n      };\n    })(this));\n  };\n\n  Simditor.prototype.destroy = function() {\n    this.triggerHandler('destroy');\n    this.textarea.closest('form').off('.simditor .simditor-' + this.id);\n    this.selection.clear();\n    this.inputManager.focused = false;\n    this.textarea.insertBefore(this.el).hide().val('').removeData('simditor');\n    this.el.remove();\n    $(document).off('.simditor-' + this.id);\n    $(window).off('.simditor-' + this.id);\n    return this.off();\n  };\n\n  return Simditor;\n\n})(SimpleModule);\n\nSimditor.i18n = {\n  'zh-CN': {\n    'blockquote': '引用',\n    'bold': '加粗文字',\n    'code': '插入代码',\n    'color': '文字颜色',\n    'hr': '分隔线',\n    'image': '插入图片',\n    'localImage': '本地图片',\n    'externalImage': '外链图片',\n    'uploadImage': '上传图片',\n    'uploadFailed': '上传失败了',\n    'uploadError': '上传出错了',\n    'imageUrl': '图片地址',\n    'imageSize': '图片尺寸',\n    'restoreImageSize': '还原图片尺寸',\n    'uploading': '正在上传',\n    'indent': '向右缩进',\n    'outdent': '向左缩进',\n    'italic': '斜体文字',\n    'link': '插入链接',\n    'text': '文本',\n    'linkText': '链接文字',\n    'linkUrl': '地址',\n    'removeLink': '移除链接',\n    'ol': '有序列表',\n    'ul': '无序列表',\n    'strikethrough': '删除线文字',\n    'table': '表格',\n    'deleteRow': '删除行',\n    'insertRowAbove': '在上面插入行',\n    'insertRowBelow': '在下面插入行',\n    'deleteColumn': '删除列',\n    'insertColumnLeft': '在左边插入列',\n    'insertColumnRight': '在右边插入列',\n    'deleteTable': '删除表格',\n    'title': '标题',\n    'normalText': '普通文本',\n    'underline': '下划线文字'\n  }\n};\n\nvar Button,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __slice = [].slice;\n\nButton = (function(_super) {\n  __extends(Button, _super);\n\n  Button.prototype._tpl = {\n    item: '<li><a tabindex=\"-1\" unselectable=\"on\" class=\"toolbar-item\" href=\"javascript:;\"><span></span></a></li>',\n    menuWrapper: '<div class=\"toolbar-menu\"></div>',\n    menuItem: '<li><a tabindex=\"-1\" unselectable=\"on\" class=\"menu-item\" href=\"javascript:;\"><span></span></a></li>',\n    separator: '<li><span class=\"separator\"></span></li>'\n  };\n\n  Button.prototype.name = '';\n\n  Button.prototype.icon = '';\n\n  Button.prototype.title = '';\n\n  Button.prototype.text = '';\n\n  Button.prototype.htmlTag = '';\n\n  Button.prototype.disableTag = '';\n\n  Button.prototype.menu = false;\n\n  Button.prototype.active = false;\n\n  Button.prototype.disabled = false;\n\n  Button.prototype.needFocus = true;\n\n  Button.prototype.shortcut = null;\n\n  function Button(opts) {\n    this.editor = opts.editor;\n    this.title = this._t(this.name);\n    Button.__super__.constructor.call(this, opts);\n  }\n\n  Button.prototype._init = function() {\n    var tag, _i, _len, _ref, _results;\n    this.render();\n    this.el.on('mousedown', (function(_this) {\n      return function(e) {\n        var exceed, param;\n        e.preventDefault();\n        if (_this.el.hasClass('disabled') || (_this.needFocus && !_this.editor.inputManager.focused)) {\n          return false;\n        }\n        if (_this.menu) {\n          _this.wrapper.toggleClass('menu-on').siblings('li').removeClass('menu-on');\n          if (_this.wrapper.is('.menu-on')) {\n            exceed = _this.menuWrapper.offset().left + _this.menuWrapper.outerWidth() + 5 - _this.editor.wrapper.offset().left - _this.editor.wrapper.outerWidth();\n            if (exceed > 0) {\n              _this.menuWrapper.css({\n                'left': 'auto',\n                'right': 0\n              });\n            }\n            _this.trigger('menuexpand');\n          }\n          return false;\n        }\n        param = _this.el.data('param');\n        _this.command(param);\n        return false;\n      };\n    })(this));\n    this.wrapper.on('click', 'a.menu-item', (function(_this) {\n      return function(e) {\n        var btn, param;\n        e.preventDefault();\n        btn = $(e.currentTarget);\n        _this.wrapper.removeClass('menu-on');\n        if (btn.hasClass('disabled') || (_this.needFocus && !_this.editor.inputManager.focused)) {\n          return false;\n        }\n        _this.editor.toolbar.wrapper.removeClass('menu-on');\n        param = btn.data('param');\n        _this.command(param);\n        return false;\n      };\n    })(this));\n    this.wrapper.on('mousedown', 'a.menu-item', (function(_this) {\n      return function(e) {\n        return false;\n      };\n    })(this));\n    this.editor.on('blur', (function(_this) {\n      return function() {\n        _this.setActive(false);\n        return _this.setDisabled(false);\n      };\n    })(this));\n    if (this.shortcut != null) {\n      this.editor.inputManager.addShortcut(this.shortcut, (function(_this) {\n        return function(e) {\n          _this.el.mousedown();\n          return false;\n        };\n      })(this));\n    }\n    _ref = this.htmlTag.split(',');\n    _results = [];\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      tag = _ref[_i];\n      tag = $.trim(tag);\n      if (tag && $.inArray(tag, this.editor.formatter._allowedTags) < 0) {\n        _results.push(this.editor.formatter._allowedTags.push(tag));\n      } else {\n        _results.push(void 0);\n      }\n    }\n    return _results;\n  };\n\n  Button.prototype.render = function() {\n    this.wrapper = $(this._tpl.item).appendTo(this.editor.toolbar.list);\n    this.el = this.wrapper.find('a.toolbar-item');\n    this.el.attr('title', this.title).addClass('toolbar-item-' + this.name).data('button', this);\n    this.el.find('span').addClass(this.icon ? 'fa fa-' + this.icon : '').text(this.text);\n    if (!this.menu) {\n      return;\n    }\n    this.menuWrapper = $(this._tpl.menuWrapper).appendTo(this.wrapper);\n    this.menuWrapper.addClass('toolbar-menu-' + this.name);\n    return this.renderMenu();\n  };\n\n  Button.prototype.renderMenu = function() {\n    var $menuBtntnEl, $menuItemEl, menuItem, _i, _len, _ref, _ref1, _results;\n    if (!$.isArray(this.menu)) {\n      return;\n    }\n    this.menuEl = $('<ul/>').appendTo(this.menuWrapper);\n    _ref = this.menu;\n    _results = [];\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      menuItem = _ref[_i];\n      if (menuItem === '|') {\n        $(this._tpl.separator).appendTo(this.menuEl);\n        continue;\n      }\n      $menuItemEl = $(this._tpl.menuItem).appendTo(this.menuEl);\n      _results.push($menuBtntnEl = $menuItemEl.find('a.menu-item').attr({\n        'title': (_ref1 = menuItem.title) != null ? _ref1 : menuItem.text,\n        'data-param': menuItem.param\n      }).addClass('menu-item-' + menuItem.name).find('span').text(menuItem.text));\n    }\n    return _results;\n  };\n\n  Button.prototype.setActive = function(active) {\n    if (active === this.active) {\n      return;\n    }\n    this.active = active;\n    this.el.toggleClass('active', this.active);\n    return this.editor.toolbar.trigger('buttonstatus', [this]);\n  };\n\n  Button.prototype.setDisabled = function(disabled) {\n    if (disabled === this.disabled) {\n      return;\n    }\n    this.disabled = disabled;\n    this.el.toggleClass('disabled', this.disabled);\n    return this.editor.toolbar.trigger('buttonstatus', [this]);\n  };\n\n  Button.prototype.status = function($node) {\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    if ($node != null) {\n      this.setActive($node.is(this.htmlTag));\n    }\n    return this.active;\n  };\n\n  Button.prototype.command = function(param) {};\n\n  Button.prototype._t = function() {\n    var args, result, _ref;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    result = Button.__super__._t.apply(this, args);\n    if (!result) {\n      result = (_ref = this.editor)._t.apply(_ref, args);\n    }\n    return result;\n  };\n\n  return Button;\n\n})(SimpleModule);\n\nSimditor.Button = Button;\n\nvar Popover,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nPopover = (function(_super) {\n  __extends(Popover, _super);\n\n  Popover.prototype.offset = {\n    top: 4,\n    left: 0\n  };\n\n  Popover.prototype.target = null;\n\n  Popover.prototype.active = false;\n\n  function Popover(opts) {\n    this.button = opts.button;\n    this.editor = opts.button.editor;\n    Popover.__super__.constructor.call(this, opts);\n  }\n\n  Popover.prototype._init = function() {\n    this.el = $('<div class=\"simditor-popover\"></div>').appendTo(this.editor.el).data('popover', this);\n    this.render();\n    this.el.on('mouseenter', (function(_this) {\n      return function(e) {\n        return _this.el.addClass('hover');\n      };\n    })(this));\n    return this.el.on('mouseleave', (function(_this) {\n      return function(e) {\n        return _this.el.removeClass('hover');\n      };\n    })(this));\n  };\n\n  Popover.prototype.render = function() {};\n\n  Popover.prototype.show = function($target, position) {\n    if (position == null) {\n      position = 'bottom';\n    }\n    if ($target == null) {\n      return;\n    }\n    this.el.siblings('.simditor-popover').each((function(_this) {\n      return function(i, popover) {\n        popover = $(popover).data('popover');\n        if (popover.active) {\n          return popover.hide();\n        }\n      };\n    })(this));\n    this.target = $target.addClass('selected');\n    if (this.active) {\n      this.refresh(position);\n      return this.trigger('popovershow');\n    } else {\n      this.active = true;\n      this.el.css({\n        left: -9999\n      }).show();\n      return setTimeout((function(_this) {\n        return function() {\n          _this.refresh(position);\n          return _this.trigger('popovershow');\n        };\n      })(this), 0);\n    }\n  };\n\n  Popover.prototype.hide = function() {\n    if (!this.active) {\n      return;\n    }\n    if (this.target) {\n      this.target.removeClass('selected');\n    }\n    this.target = null;\n    this.active = false;\n    this.el.hide();\n    return this.trigger('popoverhide');\n  };\n\n  Popover.prototype.refresh = function(position) {\n    var editorOffset, left, targetH, targetOffset, top;\n    if (position == null) {\n      position = 'bottom';\n    }\n    if (!this.active) {\n      return;\n    }\n    editorOffset = this.editor.el.offset();\n    targetOffset = this.target.offset();\n    targetH = this.target.outerHeight();\n    if (position === 'bottom') {\n      top = targetOffset.top - editorOffset.top + targetH;\n    } else if (position === 'top') {\n      top = targetOffset.top - editorOffset.top - this.el.height();\n    }\n    left = Math.min(targetOffset.left - editorOffset.left, this.editor.wrapper.width() - this.el.outerWidth() - 10);\n    return this.el.css({\n      top: top + this.offset.top,\n      left: left + this.offset.left\n    });\n  };\n\n  Popover.prototype.destroy = function() {\n    this.target = null;\n    this.active = false;\n    this.editor.off('.linkpopover');\n    return this.el.remove();\n  };\n\n  return Popover;\n\n})(SimpleModule);\n\nSimditor.Popover = Popover;\n\nvar TitleButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nTitleButton = (function(_super) {\n  __extends(TitleButton, _super);\n\n  function TitleButton() {\n    return TitleButton.__super__.constructor.apply(this, arguments);\n  }\n\n  TitleButton.prototype.name = 'title';\n\n  TitleButton.prototype.htmlTag = 'h1, h2, h3, h4';\n\n  TitleButton.prototype.disableTag = 'pre, table';\n\n  TitleButton.prototype._init = function() {\n    this.menu = [\n      {\n        name: 'normal',\n        text: this._t('normalText'),\n        param: 'p'\n      }, '|', {\n        name: 'h1',\n        text: this._t('title') + ' 1',\n        param: 'h1'\n      }, {\n        name: 'h2',\n        text: this._t('title') + ' 2',\n        param: 'h2'\n      }, {\n        name: 'h3',\n        text: this._t('title') + ' 3',\n        param: 'h3'\n      }, {\n        name: 'h4',\n        text: this._t('title') + ' 4',\n        param: 'h4'\n      }, {\n        name: 'h5',\n        text: this._t('title') + ' 5',\n        param: 'h5'\n      }\n    ];\n    return TitleButton.__super__._init.call(this);\n  };\n\n  TitleButton.prototype.setActive = function(active, param) {\n    TitleButton.__super__.setActive.call(this, active);\n    this.el.removeClass('active-p active-h1 active-h2 active-h3');\n    if (active) {\n      return this.el.addClass('active active-' + param);\n    }\n  };\n\n  TitleButton.prototype.status = function($node) {\n    var param, _ref;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    if ($node != null) {\n      param = (_ref = $node[0].tagName) != null ? _ref.toLowerCase() : void 0;\n      this.setActive($node.is(this.htmlTag), param);\n    }\n    return this.active;\n  };\n\n  TitleButton.prototype.command = function(param) {\n    var $contents, $endBlock, $startBlock, endNode, node, range, results, startNode, _i, _len, _ref;\n    range = this.editor.selection.getRange();\n    startNode = range.startContainer;\n    endNode = range.endContainer;\n    $startBlock = this.editor.util.closestBlockEl(startNode);\n    $endBlock = this.editor.util.closestBlockEl(endNode);\n    this.editor.selection.save();\n    range.setStartBefore($startBlock[0]);\n    range.setEndAfter($endBlock[0]);\n    $contents = $(range.extractContents());\n    results = [];\n    $contents.children().each((function(_this) {\n      return function(i, el) {\n        var c, converted, _i, _len, _results;\n        converted = _this._convertEl(el, param);\n        _results = [];\n        for (_i = 0, _len = converted.length; _i < _len; _i++) {\n          c = converted[_i];\n          _results.push(results.push(c));\n        }\n        return _results;\n      };\n    })(this));\n    _ref = results.reverse();\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      node = _ref[_i];\n      range.insertNode(node[0]);\n    }\n    this.editor.selection.restore();\n    return this.editor.trigger('valuechanged');\n  };\n\n  TitleButton.prototype._convertEl = function(el, param) {\n    var $block, $el, results;\n    $el = $(el);\n    results = [];\n    if ($el.is(param)) {\n      results.push($el);\n    } else {\n      $block = $('<' + param + '/>').append($el.contents());\n      results.push($block);\n    }\n    return results;\n  };\n\n  return TitleButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(TitleButton);\n\nvar BoldButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nBoldButton = (function(_super) {\n  __extends(BoldButton, _super);\n\n  function BoldButton() {\n    return BoldButton.__super__.constructor.apply(this, arguments);\n  }\n\n  BoldButton.prototype.name = 'bold';\n\n  BoldButton.prototype.icon = 'bold';\n\n  BoldButton.prototype.htmlTag = 'b, strong';\n\n  BoldButton.prototype.disableTag = 'pre';\n\n  BoldButton.prototype.shortcut = 'cmd+b';\n\n  BoldButton.prototype._init = function() {\n    if (this.editor.util.os.mac) {\n      this.title = this.title + ' ( Cmd + b )';\n    } else {\n      this.title = this.title + ' ( Ctrl + b )';\n      this.shortcut = 'ctrl+b';\n    }\n    return BoldButton.__super__._init.call(this);\n  };\n\n  BoldButton.prototype.status = function($node) {\n    var active;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    active = document.queryCommandState('bold') === true;\n    this.setActive(active);\n    return active;\n  };\n\n  BoldButton.prototype.command = function() {\n    document.execCommand('bold');\n    this.editor.trigger('valuechanged');\n    return $(document).trigger('selectionchange');\n  };\n\n  return BoldButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(BoldButton);\n\nvar ItalicButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nItalicButton = (function(_super) {\n  __extends(ItalicButton, _super);\n\n  function ItalicButton() {\n    return ItalicButton.__super__.constructor.apply(this, arguments);\n  }\n\n  ItalicButton.prototype.name = 'italic';\n\n  ItalicButton.prototype.icon = 'italic';\n\n  ItalicButton.prototype.htmlTag = 'i';\n\n  ItalicButton.prototype.disableTag = 'pre';\n\n  ItalicButton.prototype.shortcut = 'cmd+i';\n\n  ItalicButton.prototype._init = function() {\n    if (this.editor.util.os.mac) {\n      this.title = this.title + ' ( Cmd + i )';\n    } else {\n      this.title = this.title + ' ( Ctrl + i )';\n      this.shortcut = 'ctrl+i';\n    }\n    return ItalicButton.__super__._init.call(this);\n  };\n\n  ItalicButton.prototype.status = function($node) {\n    var active;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return this.disabled;\n    }\n    active = document.queryCommandState('italic') === true;\n    this.setActive(active);\n    return active;\n  };\n\n  ItalicButton.prototype.command = function() {\n    document.execCommand('italic');\n    this.editor.trigger('valuechanged');\n    return $(document).trigger('selectionchange');\n  };\n\n  return ItalicButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(ItalicButton);\n\nvar UnderlineButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nUnderlineButton = (function(_super) {\n  __extends(UnderlineButton, _super);\n\n  function UnderlineButton() {\n    return UnderlineButton.__super__.constructor.apply(this, arguments);\n  }\n\n  UnderlineButton.prototype.name = 'underline';\n\n  UnderlineButton.prototype.icon = 'underline';\n\n  UnderlineButton.prototype.htmlTag = 'u';\n\n  UnderlineButton.prototype.disableTag = 'pre';\n\n  UnderlineButton.prototype.shortcut = 'cmd+u';\n\n  UnderlineButton.prototype.render = function() {\n    if (this.editor.util.os.mac) {\n      this.title = this.title + ' ( Cmd + u )';\n    } else {\n      this.title = this.title + ' ( Ctrl + u )';\n      this.shortcut = 'ctrl+u';\n    }\n    return UnderlineButton.__super__.render.call(this);\n  };\n\n  UnderlineButton.prototype.status = function($node) {\n    var active;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return this.disabled;\n    }\n    active = document.queryCommandState('underline') === true;\n    this.setActive(active);\n    return active;\n  };\n\n  UnderlineButton.prototype.command = function() {\n    document.execCommand('underline');\n    this.editor.trigger('valuechanged');\n    return $(document).trigger('selectionchange');\n  };\n\n  return UnderlineButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(UnderlineButton);\n\nvar ColorButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __slice = [].slice;\n\nColorButton = (function(_super) {\n  __extends(ColorButton, _super);\n\n  function ColorButton() {\n    return ColorButton.__super__.constructor.apply(this, arguments);\n  }\n\n  ColorButton.prototype.name = 'color';\n\n  ColorButton.prototype.icon = 'font';\n\n  ColorButton.prototype.disableTag = 'pre';\n\n  ColorButton.prototype.menu = true;\n\n  ColorButton.prototype.render = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    return ColorButton.__super__.render.apply(this, args);\n  };\n\n  ColorButton.prototype.renderMenu = function() {\n    $('<ul class=\"color-list\">\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-1\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-2\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-3\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-4\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-5\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-6\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-7\" data-color=\"\"></a></li>\\n  <li><a href=\"javascript:;\" class=\"font-color font-color-default\" data-color=\"\"></a></li>\\n</ul>').appendTo(this.menuWrapper);\n    this.menuWrapper.on('mousedown', '.color-list', function(e) {\n      return false;\n    });\n    return this.menuWrapper.on('click', '.font-color', (function(_this) {\n      return function(e) {\n        var $link, $p, hex, rgb;\n        _this.wrapper.removeClass('menu-on');\n        $link = $(e.currentTarget);\n        if ($link.hasClass('font-color-default')) {\n          $p = _this.editor.body.find('p, li');\n          if (!($p.length > 0)) {\n            return;\n          }\n          rgb = window.getComputedStyle($p[0], null).getPropertyValue('color');\n          hex = _this._convertRgbToHex(rgb);\n        } else {\n          rgb = window.getComputedStyle($link[0], null).getPropertyValue('background-color');\n          hex = _this._convertRgbToHex(rgb);\n        }\n        if (!hex) {\n          return;\n        }\n        document.execCommand('foreColor', false, hex);\n        return _this.editor.trigger('valuechanged');\n      };\n    })(this));\n  };\n\n  ColorButton.prototype._convertRgbToHex = function(rgb) {\n    var match, re, rgbToHex;\n    re = /rgb\\((\\d+),\\s?(\\d+),\\s?(\\d+)\\)/g;\n    match = re.exec(rgb);\n    if (!match) {\n      return '';\n    }\n    rgbToHex = function(r, g, b) {\n      var componentToHex;\n      componentToHex = function(c) {\n        var hex;\n        hex = c.toString(16);\n        if (hex.length === 1) {\n          return '0' + hex;\n        } else {\n          return hex;\n        }\n      };\n      return \"#\" + componentToHex(r) + componentToHex(g) + componentToHex(b);\n    };\n    return rgbToHex(match[1] * 1, match[2] * 1, match[3] * 1);\n  };\n\n  return ColorButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(ColorButton);\n\nvar ListButton, OrderListButton, UnorderListButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nListButton = (function(_super) {\n  __extends(ListButton, _super);\n\n  function ListButton() {\n    return ListButton.__super__.constructor.apply(this, arguments);\n  }\n\n  ListButton.prototype.type = '';\n\n  ListButton.prototype.disableTag = 'pre, table';\n\n  ListButton.prototype.status = function($node) {\n    var anotherType;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    if ($node == null) {\n      return this.active;\n    }\n    anotherType = this.type === 'ul' ? 'ol' : 'ul';\n    if ($node.is(anotherType)) {\n      this.setActive(false);\n      return true;\n    } else {\n      this.setActive($node.is(this.htmlTag));\n      return this.active;\n    }\n  };\n\n  ListButton.prototype.command = function(param) {\n    var $contents, $endBlock, $furthestEnd, $furthestStart, $parent, $startBlock, endLevel, endNode, getListLevel, node, range, results, startLevel, startNode, _i, _len, _ref;\n    range = this.editor.selection.getRange();\n    startNode = range.startContainer;\n    endNode = range.endContainer;\n    $startBlock = this.editor.util.closestBlockEl(startNode);\n    $endBlock = this.editor.util.closestBlockEl(endNode);\n    this.editor.selection.save();\n    range.setStartBefore($startBlock[0]);\n    range.setEndAfter($endBlock[0]);\n    if ($startBlock.is('li') && $endBlock.is('li')) {\n      $furthestStart = this.editor.util.furthestNode($startBlock, 'ul, ol');\n      $furthestEnd = this.editor.util.furthestNode($endBlock, 'ul, ol');\n      if ($furthestStart.is($furthestEnd)) {\n        getListLevel = function($li) {\n          var lvl;\n          lvl = 1;\n          while (!$li.parent().is($furthestStart)) {\n            lvl += 1;\n            $li = $li.parent();\n          }\n          return lvl;\n        };\n        startLevel = getListLevel($startBlock);\n        endLevel = getListLevel($endBlock);\n        if (startLevel > endLevel) {\n          $parent = $endBlock.parent();\n        } else {\n          $parent = $startBlock.parent();\n        }\n        range.setStartBefore($parent[0]);\n        range.setEndAfter($parent[0]);\n      } else {\n        range.setStartBefore($furthestStart[0]);\n        range.setEndAfter($furthestEnd[0]);\n      }\n    }\n    $contents = $(range.extractContents());\n    results = [];\n    $contents.children().each((function(_this) {\n      return function(i, el) {\n        var c, converted, _i, _len, _results;\n        converted = _this._convertEl(el);\n        _results = [];\n        for (_i = 0, _len = converted.length; _i < _len; _i++) {\n          c = converted[_i];\n          if (results.length && results[results.length - 1].is(_this.type) && c.is(_this.type)) {\n            _results.push(results[results.length - 1].append(c.children()));\n          } else {\n            _results.push(results.push(c));\n          }\n        }\n        return _results;\n      };\n    })(this));\n    _ref = results.reverse();\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      node = _ref[_i];\n      range.insertNode(node[0]);\n    }\n    this.editor.selection.restore();\n    return this.editor.trigger('valuechanged');\n  };\n\n  ListButton.prototype._convertEl = function(el) {\n    var $el, anotherType, block, child, children, results, _i, _len, _ref;\n    $el = $(el);\n    results = [];\n    anotherType = this.type === 'ul' ? 'ol' : 'ul';\n    if ($el.is(this.type)) {\n      $el.children('li').each((function(_this) {\n        return function(i, li) {\n          var $childList, $li, block;\n          $li = $(li);\n          $childList = $li.children('ul, ol').remove();\n          block = $('<p/>').append($(li).html() || _this.editor.util.phBr);\n          results.push(block);\n          if ($childList.length > 0) {\n            return results.push($childList);\n          }\n        };\n      })(this));\n    } else if ($el.is(anotherType)) {\n      block = $('<' + this.type + '/>').append($el.html());\n      results.push(block);\n    } else if ($el.is('blockquote')) {\n      _ref = $el.children().get();\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        child = _ref[_i];\n        children = this._convertEl(child);\n      }\n      $.merge(results, children);\n    } else if ($el.is('table')) {\n\n    } else {\n      block = $('<' + this.type + '><li></li></' + this.type + '>');\n      block.find('li').append($el.html() || this.editor.util.phBr);\n      results.push(block);\n    }\n    return results;\n  };\n\n  return ListButton;\n\n})(Button);\n\nOrderListButton = (function(_super) {\n  __extends(OrderListButton, _super);\n\n  function OrderListButton() {\n    return OrderListButton.__super__.constructor.apply(this, arguments);\n  }\n\n  OrderListButton.prototype.type = 'ol';\n\n  OrderListButton.prototype.name = 'ol';\n\n  OrderListButton.prototype.icon = 'list-ol';\n\n  OrderListButton.prototype.htmlTag = 'ol';\n\n  OrderListButton.prototype.shortcut = 'cmd+/';\n\n  OrderListButton.prototype._init = function() {\n    if (this.editor.util.os.mac) {\n      this.title = this.title + ' ( Cmd + / )';\n    } else {\n      this.title = this.title + ' ( ctrl + / )';\n      this.shortcut = 'ctrl+/';\n    }\n    return OrderListButton.__super__._init.call(this);\n  };\n\n  return OrderListButton;\n\n})(ListButton);\n\nUnorderListButton = (function(_super) {\n  __extends(UnorderListButton, _super);\n\n  function UnorderListButton() {\n    return UnorderListButton.__super__.constructor.apply(this, arguments);\n  }\n\n  UnorderListButton.prototype.type = 'ul';\n\n  UnorderListButton.prototype.name = 'ul';\n\n  UnorderListButton.prototype.icon = 'list-ul';\n\n  UnorderListButton.prototype.htmlTag = 'ul';\n\n  UnorderListButton.prototype.shortcut = 'cmd+.';\n\n  UnorderListButton.prototype._init = function() {\n    if (this.editor.util.os.mac) {\n      this.title = this.title + ' ( Cmd + . )';\n    } else {\n      this.title = this.title + ' ( Ctrl + . )';\n      this.shortcut = 'ctrl+.';\n    }\n    return UnorderListButton.__super__._init.call(this);\n  };\n\n  return UnorderListButton;\n\n})(ListButton);\n\nSimditor.Toolbar.addButton(OrderListButton);\n\nSimditor.Toolbar.addButton(UnorderListButton);\n\nvar BlockquoteButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nBlockquoteButton = (function(_super) {\n  __extends(BlockquoteButton, _super);\n\n  function BlockquoteButton() {\n    return BlockquoteButton.__super__.constructor.apply(this, arguments);\n  }\n\n  BlockquoteButton.prototype.name = 'blockquote';\n\n  BlockquoteButton.prototype.icon = 'quote-left';\n\n  BlockquoteButton.prototype.htmlTag = 'blockquote';\n\n  BlockquoteButton.prototype.disableTag = 'pre, table';\n\n  BlockquoteButton.prototype.command = function() {\n    var $contents, $endBlock, $startBlock, endNode, node, range, results, startNode, _i, _len, _ref;\n    range = this.editor.selection.getRange();\n    startNode = range.startContainer;\n    endNode = range.endContainer;\n    $startBlock = this.editor.util.furthestBlockEl(startNode);\n    $endBlock = this.editor.util.furthestBlockEl(endNode);\n    this.editor.selection.save();\n    range.setStartBefore($startBlock[0]);\n    range.setEndAfter($endBlock[0]);\n    $contents = $(range.extractContents());\n    results = [];\n    $contents.children().each((function(_this) {\n      return function(i, el) {\n        var c, converted, _i, _len, _results;\n        converted = _this._convertEl(el);\n        _results = [];\n        for (_i = 0, _len = converted.length; _i < _len; _i++) {\n          c = converted[_i];\n          if (results.length && results[results.length - 1].is(_this.htmlTag) && c.is(_this.htmlTag)) {\n            _results.push(results[results.length - 1].append(c.children()));\n          } else {\n            _results.push(results.push(c));\n          }\n        }\n        return _results;\n      };\n    })(this));\n    _ref = results.reverse();\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      node = _ref[_i];\n      range.insertNode(node[0]);\n    }\n    this.editor.selection.restore();\n    return this.editor.trigger('valuechanged');\n  };\n\n  BlockquoteButton.prototype._convertEl = function(el) {\n    var $el, block, results;\n    $el = $(el);\n    results = [];\n    if ($el.is(this.htmlTag)) {\n      $el.children().each((function(_this) {\n        return function(i, node) {\n          return results.push($(node));\n        };\n      })(this));\n    } else {\n      block = $('<' + this.htmlTag + '/>').append($el);\n      results.push(block);\n    }\n    return results;\n  };\n\n  return BlockquoteButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(BlockquoteButton);\n\nvar CodeButton, CodePopover,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __slice = [].slice;\n\nCodeButton = (function(_super) {\n  __extends(CodeButton, _super);\n\n  function CodeButton() {\n    return CodeButton.__super__.constructor.apply(this, arguments);\n  }\n\n  CodeButton.prototype.name = 'code';\n\n  CodeButton.prototype.icon = 'code';\n\n  CodeButton.prototype.htmlTag = 'pre';\n\n  CodeButton.prototype.disableTag = 'li, table';\n\n  CodeButton.prototype._init = function() {\n    CodeButton.__super__._init.call(this);\n    this.editor.on('decorate', (function(_this) {\n      return function(e, $el) {\n        return $el.find('pre').each(function(i, pre) {\n          return _this.decorate($(pre));\n        });\n      };\n    })(this));\n    return this.editor.on('undecorate', (function(_this) {\n      return function(e, $el) {\n        return $el.find('pre').each(function(i, pre) {\n          return _this.undecorate($(pre));\n        });\n      };\n    })(this));\n  };\n\n  CodeButton.prototype.render = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    CodeButton.__super__.render.apply(this, args);\n    return this.popover = new CodePopover({\n      button: this\n    });\n  };\n\n  CodeButton.prototype.status = function($node) {\n    var result;\n    result = CodeButton.__super__.status.call(this, $node);\n    if (this.active) {\n      this.popover.show($node);\n    } else if (this.editor.util.isBlockNode($node)) {\n      this.popover.hide();\n    }\n    return result;\n  };\n\n  CodeButton.prototype.decorate = function($pre) {\n    var lang;\n    lang = $pre.attr('data-lang');\n    $pre.removeClass();\n    if (lang && lang !== -1) {\n      return $pre.addClass('lang-' + lang);\n    }\n  };\n\n  CodeButton.prototype.undecorate = function($pre) {\n    var lang;\n    lang = $pre.attr('data-lang');\n    $pre.removeClass();\n    if (lang && lang !== -1) {\n      return $pre.addClass('lang-' + lang);\n    }\n  };\n\n  CodeButton.prototype.command = function() {\n    var $contents, $endBlock, $startBlock, endNode, node, range, results, startNode, _i, _len, _ref;\n    range = this.editor.selection.getRange();\n    startNode = range.startContainer;\n    endNode = range.endContainer;\n    $startBlock = this.editor.util.closestBlockEl(startNode);\n    $endBlock = this.editor.util.closestBlockEl(endNode);\n    range.setStartBefore($startBlock[0]);\n    range.setEndAfter($endBlock[0]);\n    $contents = $(range.extractContents());\n    results = [];\n    $contents.children().each((function(_this) {\n      return function(i, el) {\n        var c, converted, _i, _len, _results;\n        converted = _this._convertEl(el);\n        _results = [];\n        for (_i = 0, _len = converted.length; _i < _len; _i++) {\n          c = converted[_i];\n          if (results.length && results[results.length - 1].is(_this.htmlTag) && c.is(_this.htmlTag)) {\n            _results.push(results[results.length - 1].append(c.contents()));\n          } else {\n            _results.push(results.push(c));\n          }\n        }\n        return _results;\n      };\n    })(this));\n    _ref = results.reverse();\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      node = _ref[_i];\n      range.insertNode(node[0]);\n    }\n    this.editor.selection.setRangeAtEndOf(results[0]);\n    return this.editor.trigger('valuechanged');\n  };\n\n  CodeButton.prototype._convertEl = function(el) {\n    var $el, block, codeStr, results;\n    $el = $(el);\n    results = [];\n    if ($el.is(this.htmlTag)) {\n      block = $('<p/>').append($el.html().replace('\\n', '<br/>'));\n      results.push(block);\n    } else {\n      if (!$el.text() && $el.children().length === 1 && $el.children().is('br')) {\n        codeStr = '\\n';\n      } else {\n        codeStr = this.editor.formatter.clearHtml($el);\n      }\n      block = $('<' + this.htmlTag + '/>').text(codeStr);\n      results.push(block);\n    }\n    return results;\n  };\n\n  return CodeButton;\n\n})(Button);\n\nCodePopover = (function(_super) {\n  __extends(CodePopover, _super);\n\n  function CodePopover() {\n    return CodePopover.__super__.constructor.apply(this, arguments);\n  }\n\n  CodePopover.prototype._tpl = \"<div class=\\\"code-settings\\\">\\n  <div class=\\\"settings-field\\\">\\n    <select class=\\\"select-lang\\\">\\n      <option value=\\\"-1\\\">选择程序语言</option>\\n      <option value=\\\"bash\\\">Bash</option>\\n      <option value=\\\"c++\\\">C++</option>\\n      <option value=\\\"cs\\\">C#</option>\\n      <option value=\\\"css\\\">CSS</option>\\n      <option value=\\\"erlang\\\">Erlang</option>\\n      <option value=\\\"less\\\">Less</option>\\n      <option value=\\\"scss\\\">Sass</option>\\n      <option value=\\\"diff\\\">Diff</option>\\n      <option value=\\\"coffeeScript\\\">CoffeeScript</option>\\n      <option value=\\\"html\\\">Html,XML</option>\\n      <option value=\\\"json\\\">JSON</option>\\n      <option value=\\\"java\\\">Java</option>\\n      <option value=\\\"js\\\">JavaScript</option>\\n      <option value=\\\"markdown\\\">Markdown</option>\\n      <option value=\\\"oc\\\">Objective C</option>\\n      <option value=\\\"php\\\">PHP</option>\\n      <option value=\\\"perl\\\">Perl</option>\\n      <option value=\\\"python\\\">Python</option>\\n      <option value=\\\"ruby\\\">Ruby</option>\\n      <option value=\\\"sql\\\">SQL</option>\\n    </select>\\n  </div>\\n</div>\";\n\n  CodePopover.prototype.render = function() {\n    this.el.addClass('code-popover').append(this._tpl);\n    this.selectEl = this.el.find('.select-lang');\n    return this.selectEl.on('change', (function(_this) {\n      return function(e) {\n        var selected;\n        _this.lang = _this.selectEl.val();\n        selected = _this.target.hasClass('selected');\n        _this.target.removeClass().removeAttr('data-lang');\n        if (_this.lang !== -1) {\n          _this.target.addClass('lang-' + _this.lang);\n          _this.target.attr('data-lang', _this.lang);\n        }\n        if (selected) {\n          return _this.target.addClass('selected');\n        }\n      };\n    })(this));\n  };\n\n  CodePopover.prototype.show = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    CodePopover.__super__.show.apply(this, args);\n    this.lang = this.target.attr('data-lang');\n    if (this.lang != null) {\n      return this.selectEl.val(this.lang);\n    } else {\n      return this.selectEl.val(-1);\n    }\n  };\n\n  return CodePopover;\n\n})(Popover);\n\nSimditor.Toolbar.addButton(CodeButton);\n\nvar LinkButton, LinkPopover,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __slice = [].slice;\n\nLinkButton = (function(_super) {\n  __extends(LinkButton, _super);\n\n  function LinkButton() {\n    return LinkButton.__super__.constructor.apply(this, arguments);\n  }\n\n  LinkButton.prototype.name = 'link';\n\n  LinkButton.prototype.icon = 'link';\n\n  LinkButton.prototype.htmlTag = 'a';\n\n  LinkButton.prototype.disableTag = 'pre';\n\n  LinkButton.prototype.render = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    LinkButton.__super__.render.apply(this, args);\n    return this.popover = new LinkPopover({\n      button: this\n    });\n  };\n\n  LinkButton.prototype.status = function($node) {\n    var showPopover;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    if ($node == null) {\n      return this.active;\n    }\n    showPopover = true;\n    if (!$node.is(this.htmlTag) || $node.is('[class^=\"simditor-\"]')) {\n      this.setActive(false);\n      showPopover = false;\n    } else if (this.editor.selection.rangeAtEndOf($node)) {\n      this.setActive(true);\n      showPopover = false;\n    } else {\n      this.setActive(true);\n    }\n    if (showPopover) {\n      this.popover.show($node);\n    } else if (this.editor.util.isBlockNode($node)) {\n      this.popover.hide();\n    }\n    return this.active;\n  };\n\n  LinkButton.prototype.command = function() {\n    var $contents, $endBlock, $link, $newBlock, $startBlock, endNode, linkText, range, startNode, txtNode;\n    range = this.editor.selection.getRange();\n    if (this.active) {\n      $link = $(range.commonAncestorContainer).closest('a');\n      txtNode = document.createTextNode($link.text());\n      $link.replaceWith(txtNode);\n      range.selectNode(txtNode);\n    } else {\n      startNode = range.startContainer;\n      endNode = range.endContainer;\n      $startBlock = this.editor.util.closestBlockEl(startNode);\n      $endBlock = this.editor.util.closestBlockEl(endNode);\n      $contents = $(range.extractContents());\n      linkText = this.editor.formatter.clearHtml($contents.contents(), false);\n      $link = $('<a/>', {\n        href: 'http://www.example.com',\n        target: '_blank',\n        text: linkText || this._t('linkText')\n      });\n      if ($startBlock[0] === $endBlock[0]) {\n        range.insertNode($link[0]);\n      } else {\n        $newBlock = $('<p/>').append($link);\n        range.insertNode($newBlock[0]);\n      }\n      range.selectNodeContents($link[0]);\n      this.popover.one('popovershow', (function(_this) {\n        return function() {\n          if (linkText) {\n            _this.popover.urlEl.focus();\n            return _this.popover.urlEl[0].select();\n          } else {\n            _this.popover.textEl.focus();\n            return _this.popover.textEl[0].select();\n          }\n        };\n      })(this));\n    }\n    this.editor.selection.selectRange(range);\n    return this.editor.trigger('valuechanged');\n  };\n\n  return LinkButton;\n\n})(Button);\n\nLinkPopover = (function(_super) {\n  __extends(LinkPopover, _super);\n\n  function LinkPopover() {\n    return LinkPopover.__super__.constructor.apply(this, arguments);\n  }\n\n  LinkPopover.prototype.render = function() {\n    var tpl;\n    tpl = \"<div class=\\\"link-settings\\\">\\n  <div class=\\\"settings-field\\\">\\n    <label>\" + (this._t('text')) + \"</label>\\n    <input class=\\\"link-text\\\" type=\\\"text\\\"/>\\n    <a class=\\\"btn-unlink\\\" href=\\\"javascript:;\\\" title=\\\"\" + (this._t('removeLink')) + \"\\\" tabindex=\\\"-1\\\"><span class=\\\"fa fa-unlink\\\"></span></a>\\n  </div>\\n  <div class=\\\"settings-field\\\">\\n    <label>\" + (this._t('linkUrl')) + \"</label>\\n    <input class=\\\"link-url\\\" type=\\\"text\\\"/>\\n  </div>\\n</div>\";\n    this.el.addClass('link-popover').append(tpl);\n    this.textEl = this.el.find('.link-text');\n    this.urlEl = this.el.find('.link-url');\n    this.unlinkEl = this.el.find('.btn-unlink');\n    this.textEl.on('keyup', (function(_this) {\n      return function(e) {\n        if (e.which === 13) {\n          return;\n        }\n        return _this.target.text(_this.textEl.val());\n      };\n    })(this));\n    this.urlEl.on('keyup', (function(_this) {\n      return function(e) {\n        var val;\n        if (e.which === 13) {\n          return;\n        }\n        val = _this.urlEl.val();\n        if (!(/https?:\\/\\/|^\\//ig.test(val) || !val)) {\n          val = 'http://' + val;\n        }\n        return _this.target.attr('href', val);\n      };\n    })(this));\n    $([this.urlEl[0], this.textEl[0]]).on('keydown', (function(_this) {\n      return function(e) {\n        if (e.which === 13 || e.which === 27 || (!e.shiftKey && e.which === 9 && $(e.target).hasClass('link-url'))) {\n          e.preventDefault();\n          return setTimeout(function() {\n            var range;\n            range = document.createRange();\n            _this.editor.selection.setRangeAfter(_this.target, range);\n            _this.hide();\n            return _this.editor.trigger('valuechanged');\n          }, 0);\n        }\n      };\n    })(this));\n    return this.unlinkEl.on('click', (function(_this) {\n      return function(e) {\n        var range, txtNode;\n        txtNode = document.createTextNode(_this.target.text());\n        _this.target.replaceWith(txtNode);\n        _this.hide();\n        range = document.createRange();\n        _this.editor.selection.setRangeAfter(txtNode, range);\n        return _this.editor.trigger('valuechanged');\n      };\n    })(this));\n  };\n\n  LinkPopover.prototype.show = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    LinkPopover.__super__.show.apply(this, args);\n    this.textEl.val(this.target.text());\n    return this.urlEl.val(this.target.attr('href'));\n  };\n\n  return LinkPopover;\n\n})(Popover);\n\nSimditor.Toolbar.addButton(LinkButton);\n\nvar ImageButton, ImagePopover,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },\n  __slice = [].slice;\n\nImageButton = (function(_super) {\n  __extends(ImageButton, _super);\n\n  function ImageButton() {\n    return ImageButton.__super__.constructor.apply(this, arguments);\n  }\n\n  ImageButton.prototype.name = 'image';\n\n  ImageButton.prototype.icon = 'picture-o';\n\n  ImageButton.prototype.htmlTag = 'img';\n\n  ImageButton.prototype.disableTag = 'pre, table';\n\n  ImageButton.prototype.defaultImage = '';\n\n  ImageButton.prototype.needFocus = false;\n\n  ImageButton.prototype._init = function() {\n    if (this.editor.uploader != null) {\n      this.menu = [\n        {\n          name: 'upload-image',\n          text: this._t('localImage')\n        }, {\n          name: 'external-image',\n          text: this._t('externalImage')\n        }\n      ];\n    } else {\n      this.menu = false;\n    }\n    this.defaultImage = this.editor.opts.defaultImage;\n    this.editor.body.on('click', 'img:not([data-non-image])', (function(_this) {\n      return function(e) {\n        var $img, range;\n        $img = $(e.currentTarget);\n        range = document.createRange();\n        range.selectNode($img[0]);\n        _this.editor.selection.selectRange(range);\n        if (!_this.editor.util.supportSelectionChange) {\n          _this.editor.trigger('selectionchanged');\n        }\n        return false;\n      };\n    })(this));\n    this.editor.body.on('mouseup', 'img:not([data-non-image])', (function(_this) {\n      return function(e) {\n        return false;\n      };\n    })(this));\n    this.editor.on('selectionchanged.image', (function(_this) {\n      return function() {\n        var $contents, $img, range;\n        range = _this.editor.selection.getRange();\n        if (range == null) {\n          return;\n        }\n        $contents = $(range.cloneContents()).contents();\n        if ($contents.length === 1 && $contents.is('img:not([data-non-image])')) {\n          $img = $(range.startContainer).contents().eq(range.startOffset);\n          return _this.popover.show($img);\n        } else {\n          return _this.popover.hide();\n        }\n      };\n    })(this));\n    this.editor.on('valuechanged.image', (function(_this) {\n      return function() {\n        var $masks;\n        $masks = _this.editor.wrapper.find('.simditor-image-loading');\n        if (!($masks.length > 0)) {\n          return;\n        }\n        return $masks.each(function(i, mask) {\n          var $img, $mask, file;\n          $mask = $(mask);\n          $img = $mask.data('img');\n          if (!($img && $img.parent().length > 0)) {\n            $mask.remove();\n            if ($img) {\n              file = $img.data('file');\n              if (file) {\n                _this.editor.uploader.cancel(file);\n                if (_this.editor.body.find('img.uploading').length < 1) {\n                  return _this.editor.uploader.trigger('uploadready', [file]);\n                }\n              }\n            }\n          }\n        });\n      };\n    })(this));\n    return ImageButton.__super__._init.call(this);\n  };\n\n  ImageButton.prototype.render = function() {\n    var args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    ImageButton.__super__.render.apply(this, args);\n    return this.popover = new ImagePopover({\n      button: this\n    });\n  };\n\n  ImageButton.prototype.renderMenu = function() {\n    var $input, $uploadItem, createInput;\n    ImageButton.__super__.renderMenu.call(this);\n    $uploadItem = this.menuEl.find('.menu-item-upload-image');\n    $input = null;\n    createInput = (function(_this) {\n      return function() {\n        if ($input) {\n          $input.remove();\n        }\n        return $input = $('<input type=\"file\" title=\"' + _this._t('uploadImage') + '\" accept=\"image/*\">').appendTo($uploadItem);\n      };\n    })(this);\n    createInput();\n    $uploadItem.on('click mousedown', 'input[type=file]', (function(_this) {\n      return function(e) {\n        return e.stopPropagation();\n      };\n    })(this));\n    $uploadItem.on('change', 'input[type=file]', (function(_this) {\n      return function(e) {\n        if (_this.editor.inputManager.focused) {\n          _this.editor.uploader.upload($input, {\n            inline: true\n          });\n          createInput();\n        } else {\n          _this.editor.one('focus', function(e) {\n            _this.editor.uploader.upload($input, {\n              inline: true\n            });\n            return createInput();\n          });\n          _this.editor.focus();\n        }\n        return _this.wrapper.removeClass('menu-on');\n      };\n    })(this));\n    return this._initUploader();\n  };\n\n  ImageButton.prototype._initUploader = function() {\n    if (this.editor.uploader == null) {\n      this.el.find('.btn-upload').remove();\n      return;\n    }\n    this.editor.uploader.on('beforeupload', (function(_this) {\n      return function(e, file) {\n        var $img;\n        if (!file.inline) {\n          return;\n        }\n        if (file.img) {\n          $img = $(file.img);\n        } else {\n          $img = _this.createImage(file.name);\n          file.img = $img;\n        }\n        $img.addClass('uploading');\n        $img.data('file', file);\n        return _this.editor.uploader.readImageFile(file.obj, function(img) {\n          var src;\n          if (!$img.hasClass('uploading')) {\n            return;\n          }\n          src = img ? img.src : _this.defaultImage;\n          return _this.loadImage($img, src, function() {\n            if (_this.popover.active) {\n              _this.popover.refresh();\n              return _this.popover.srcEl.val(_this._t('uploading')).prop('disabled', true);\n            }\n          });\n        });\n      };\n    })(this));\n    this.editor.uploader.on('uploadprogress', (function(_this) {\n      return function(e, file, loaded, total) {\n        var $img, $mask, $txt, percent;\n        if (!file.inline) {\n          return;\n        }\n        percent = loaded / total;\n        percent = (percent * 100).toFixed(0);\n        if (percent > 99) {\n          percent = 99;\n        }\n        $mask = file.img.data('mask');\n        if ($mask) {\n          $img = $mask.data('img');\n          $txt = $mask.find('span');\n          if ($img && $img.parent().length > 0 && percent !== $txt.text()) {\n            return $txt.text(percent);\n          } else {\n            return $mask.remove();\n          }\n        }\n      };\n    })(this));\n    this.editor.uploader.on('uploadsuccess', (function(_this) {\n      return function(e, file, result) {\n        var $img, $mask, msg;\n        if (!file.inline) {\n          return;\n        }\n        $img = file.img;\n        $img.removeData('file');\n        $img.removeClass('uploading');\n        $mask = $img.data('mask');\n        if ($mask) {\n          $mask.remove();\n        }\n        $img.removeData('mask');\n        if (result.success === false) {\n          msg = result.msg || _this._t('uploadFailed');\n          alert(msg);\n          $img.attr('src', _this.defaultImage);\n        } else {\n          $img.attr('src', result.file_path);\n        }\n        if (_this.popover.active) {\n          _this.popover.srcEl.prop('disabled', false);\n          _this.popover.srcEl.val(result.file_path);\n        }\n        _this.editor.trigger('valuechanged');\n        if (_this.editor.body.find('img.uploading').length < 1) {\n          return _this.editor.uploader.trigger('uploadready', [file, result]);\n        }\n      };\n    })(this));\n    return this.editor.uploader.on('uploaderror', (function(_this) {\n      return function(e, file, xhr) {\n        var $img, $mask, msg, result;\n        if (!file.inline) {\n          return;\n        }\n        if (xhr.statusText === 'abort') {\n          return;\n        }\n        if (xhr.responseText) {\n          try {\n            result = $.parseJSON(xhr.responseText);\n            msg = result.msg;\n          } catch (_error) {\n            e = _error;\n            msg = _this._t('uploadError');\n          }\n          alert(msg);\n        }\n        $img = file.img;\n        $img.removeData('file');\n        $img.removeClass('uploading');\n        $mask = $img.data('mask');\n        if ($mask) {\n          $mask.remove();\n        }\n        $img.removeData('mask');\n        $img.attr('src', _this.defaultImage);\n        if (_this.popover.active) {\n          _this.popover.srcEl.prop('disabled', false);\n          _this.popover.srcEl.val(_this.defaultImage);\n        }\n        _this.editor.trigger('valuechanged');\n        if (_this.editor.body.find('img.uploading').length < 1) {\n          return _this.editor.uploader.trigger('uploadready', [file, result]);\n        }\n      };\n    })(this));\n  };\n\n  ImageButton.prototype.status = function($node) {\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n  };\n\n  ImageButton.prototype.loadImage = function($img, src, callback) {\n    var $mask, img;\n    $mask = $img.data('mask');\n    if (!$mask) {\n      $mask = $('<div class=\"simditor-image-loading\"><span></span></div>').hide().appendTo(this.editor.wrapper);\n      if ($img.hasClass('uploading')) {\n        $mask.addClass('uploading');\n      }\n      $img.data('mask', $mask);\n      $mask.data('img', $img);\n    }\n    img = new Image();\n    img.onload = (function(_this) {\n      return function() {\n        var height, imgOffset, width, wrapperOffset;\n        if ($mask.hasClass('uploading') && !$img.hasClass('uploading')) {\n          return;\n        }\n        width = img.width;\n        height = img.height;\n        $img.attr({\n          src: src,\n          'data-image-size': width + ',' + height\n        });\n        if ($img.hasClass('uploading')) {\n          _this.editor.util.reflow(_this.editor.body);\n          wrapperOffset = _this.editor.wrapper.offset();\n          imgOffset = $img.offset();\n          $mask.css({\n            top: imgOffset.top - wrapperOffset.top,\n            left: imgOffset.left - wrapperOffset.left,\n            width: $img.width(),\n            height: $img.height()\n          }).show();\n        } else {\n          $mask.remove();\n          $img.removeData('mask');\n        }\n        return callback(img);\n      };\n    })(this);\n    img.onerror = (function(_this) {\n      return function() {\n        callback(false);\n        $mask.remove();\n        return $img.removeData('mask');\n      };\n    })(this);\n    return img.src = src;\n  };\n\n  ImageButton.prototype.createImage = function(name) {\n    var $block, $img, $nextBlock, range;\n    if (name == null) {\n      name = 'Image';\n    }\n    if (!this.editor.inputManager.focused) {\n      this.editor.focus();\n    }\n    range = this.editor.selection.getRange();\n    range.deleteContents();\n    $block = this.editor.util.closestBlockEl();\n    if ($block.is('p') && !this.editor.util.isEmptyNode($block)) {\n      $block = $('<p/>').append(this.editor.util.phBr).insertAfter($block);\n      this.editor.selection.setRangeAtStartOf($block, range);\n    }\n    $img = $('<img/>').attr('alt', name);\n    range.insertNode($img[0]);\n    $nextBlock = $block.next('p');\n    if (!($nextBlock.length > 0)) {\n      $nextBlock = $('<p/>').append(this.editor.util.phBr).insertAfter($block);\n    }\n    this.editor.selection.setRangeAtStartOf($nextBlock);\n    return $img;\n  };\n\n  ImageButton.prototype.command = function(src) {\n    var $img;\n    $img = this.createImage();\n    return this.loadImage($img, src || this.defaultImage, (function(_this) {\n      return function() {\n        _this.editor.trigger('valuechanged');\n        _this.editor.util.reflow($img);\n        $img.click();\n        return _this.popover.one('popovershow', function() {\n          _this.popover.srcEl.focus();\n          return _this.popover.srcEl[0].select();\n        });\n      };\n    })(this));\n  };\n\n  return ImageButton;\n\n})(Button);\n\nImagePopover = (function(_super) {\n  __extends(ImagePopover, _super);\n\n  function ImagePopover() {\n    return ImagePopover.__super__.constructor.apply(this, arguments);\n  }\n\n  ImagePopover.prototype.offset = {\n    top: 6,\n    left: -4\n  };\n\n  ImagePopover.prototype.render = function() {\n    var tpl;\n    tpl = \"<div class=\\\"link-settings\\\">\\n  <div class=\\\"settings-field\\\">\\n    <label>\" + (this._t('imageUrl')) + \"</label>\\n    <input class=\\\"image-src\\\" type=\\\"text\\\" tabindex=\\\"1\\\" />\\n    <a class=\\\"btn-upload\\\" href=\\\"javascript:;\\\" title=\\\"\" + (this._t('uploadImage')) + \"\\\" tabindex=\\\"-1\\\">\\n      <span class=\\\"fa fa-upload\\\"></span>\\n    </a>\\n  </div>\\n  <div class=\\\"settings-field\\\">\\n    <label>\" + (this._t('imageSize')) + \"</label>\\n    <input class=\\\"image-size\\\" id=\\\"image-width\\\" type=\\\"text\\\" tabindex=\\\"2\\\" />\\n    <span class=\\\"times\\\">×</span>\\n    <input class=\\\"image-size\\\" id=\\\"image-height\\\" type=\\\"text\\\" tabindex=\\\"3\\\" />\\n    <a class=\\\"btn-restore\\\" href=\\\"javascript:;\\\" title=\\\"\" + (this._t('restoreImageSize')) + \"\\\" tabindex=\\\"-1\\\">\\n      <span class=\\\"fa fa-reply\\\"></span>\\n    </a>\\n  </div>\\n</div>\";\n    this.el.addClass('image-popover').append(tpl);\n    this.srcEl = this.el.find('.image-src');\n    this.srcEl.on('keydown', (function(_this) {\n      return function(e) {\n        var hideAndFocus, src;\n        if (!(e.which === 13 || e.which === 27)) {\n          return;\n        }\n        e.preventDefault();\n        hideAndFocus = function() {\n          _this.button.editor.body.focus();\n          _this.button.editor.selection.setRangeAfter(_this.target);\n          return _this.hide();\n        };\n        if (e.which === 13 && !_this.target.hasClass('uploading')) {\n          src = _this.srcEl.val();\n          if (/^data:image/.test(src) && !_this.editor.uploader) {\n            hideAndFocus();\n            return;\n          }\n          return _this.button.loadImage(_this.target, src, function(success) {\n            var blob;\n            if (!success) {\n              return;\n            }\n            if (/^data:image/.test(src)) {\n              blob = _this.editor.util.dataURLtoBlob(src);\n              blob.name = \"Base64 Image.png\";\n              return _this.editor.uploader.upload(blob, {\n                inline: true,\n                img: _this.target\n              });\n            } else {\n              hideAndFocus();\n              return _this.editor.trigger('valuechanged');\n            }\n          });\n        } else {\n          return hideAndFocus();\n        }\n      };\n    })(this));\n    this.widthEl = this.el.find('#image-width');\n    this.heightEl = this.el.find('#image-height');\n    this.el.find('.image-size').on('blur', (function(_this) {\n      return function(e) {\n        _this._resizeImg($(e.currentTarget));\n        return _this.el.data('popover').refresh();\n      };\n    })(this));\n    this.el.find('.image-size').on('keyup', (function(_this) {\n      return function(e) {\n        var inputEl;\n        inputEl = $(e.currentTarget);\n        if (!(e.which === 13 || e.which === 27 || e.which === 9)) {\n          return _this._resizeImg(inputEl, true);\n        }\n      };\n    })(this));\n    this.el.find('.image-size').on('keydown', (function(_this) {\n      return function(e) {\n        var inputEl;\n        inputEl = $(e.currentTarget);\n        if (e.which === 13 || e.which === 27) {\n          e.preventDefault();\n          if (e.which === 13) {\n            _this._resizeImg(inputEl);\n          } else {\n            _this._restoreImg();\n          }\n          _this.button.editor.body.focus();\n          _this.button.editor.selection.setRangeAfter(_this.target);\n          return _this.hide();\n        } else if (e.which === 9) {\n          return _this.el.data('popover').refresh();\n        }\n      };\n    })(this));\n    this.el.find('.btn-restore').on('click', (function(_this) {\n      return function(e) {\n        _this._restoreImg();\n        return _this.el.data('popover').refresh();\n      };\n    })(this));\n    this.editor.on('valuechanged', (function(_this) {\n      return function(e) {\n        if (_this.active) {\n          return _this.refresh();\n        }\n      };\n    })(this));\n    return this._initUploader();\n  };\n\n  ImagePopover.prototype._initUploader = function() {\n    var $uploadBtn, createInput;\n    $uploadBtn = this.el.find('.btn-upload');\n    if (this.editor.uploader == null) {\n      $uploadBtn.remove();\n      return;\n    }\n    createInput = (function(_this) {\n      return function() {\n        if (_this.input) {\n          _this.input.remove();\n        }\n        return _this.input = $('<input type=\"file\" title=\"' + _this._t('uploadImage') + '\" accept=\"image/*\">').appendTo($uploadBtn);\n      };\n    })(this);\n    createInput();\n    this.el.on('click mousedown', 'input[type=file]', (function(_this) {\n      return function(e) {\n        return e.stopPropagation();\n      };\n    })(this));\n    return this.el.on('change', 'input[type=file]', (function(_this) {\n      return function(e) {\n        _this.editor.uploader.upload(_this.input, {\n          inline: true,\n          img: _this.target\n        });\n        return createInput();\n      };\n    })(this));\n  };\n\n  ImagePopover.prototype._resizeImg = function(inputEl, onlySetVal) {\n    var height, value, width;\n    if (onlySetVal == null) {\n      onlySetVal = false;\n    }\n    value = inputEl.val() * 1;\n    if (!($.isNumeric(value) || value < 0)) {\n      return;\n    }\n    if (inputEl.is(this.widthEl)) {\n      height = this.height * value / this.width;\n      this.heightEl.val(height);\n    } else {\n      width = this.width * value / this.height;\n      this.widthEl.val(width);\n    }\n    if (!onlySetVal) {\n      return this.target.attr({\n        width: width || value,\n        height: height || value\n      });\n    }\n  };\n\n  ImagePopover.prototype._restoreImg = function() {\n    var size, _ref;\n    size = ((_ref = this.target.data('image-size')) != null ? _ref.split(\",\") : void 0) || [this.width, this.height];\n    this.target.attr({\n      width: size[0] * 1,\n      height: size[1] * 1\n    });\n    this.widthEl.val(size[0]);\n    return this.heightEl.val(size[1]);\n  };\n\n  ImagePopover.prototype.show = function() {\n    var $img, args;\n    args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];\n    ImagePopover.__super__.show.apply(this, args);\n    $img = this.target;\n    this.width = $img.width();\n    this.height = $img.height();\n    if ($img.hasClass('uploading')) {\n      return this.srcEl.val(this._t('uploading')).prop('disabled', true);\n    } else {\n      this.srcEl.val($img.attr('src')).prop('disabled', false);\n      this.widthEl.val(this.width);\n      return this.heightEl.val(this.height);\n    }\n  };\n\n  return ImagePopover;\n\n})(Popover);\n\nSimditor.Toolbar.addButton(ImageButton);\n\nvar IndentButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nIndentButton = (function(_super) {\n  __extends(IndentButton, _super);\n\n  function IndentButton() {\n    return IndentButton.__super__.constructor.apply(this, arguments);\n  }\n\n  IndentButton.prototype.name = 'indent';\n\n  IndentButton.prototype.icon = 'indent';\n\n  IndentButton.prototype._init = function() {\n    this.title = this._t(this.name) + ' (Tab)';\n    return IndentButton.__super__._init.call(this);\n  };\n\n  IndentButton.prototype.status = function($node) {\n    return true;\n  };\n\n  IndentButton.prototype.command = function() {\n    return this.editor.util.indent();\n  };\n\n  return IndentButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(IndentButton);\n\nvar OutdentButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nOutdentButton = (function(_super) {\n  __extends(OutdentButton, _super);\n\n  function OutdentButton() {\n    return OutdentButton.__super__.constructor.apply(this, arguments);\n  }\n\n  OutdentButton.prototype.name = 'outdent';\n\n  OutdentButton.prototype.icon = 'outdent';\n\n  OutdentButton.prototype._init = function() {\n    this.title = this._t(this.name) + ' (Shift + Tab)';\n    return OutdentButton.__super__._init.call(this);\n  };\n\n  OutdentButton.prototype.status = function($node) {\n    return true;\n  };\n\n  OutdentButton.prototype.command = function() {\n    return this.editor.util.outdent();\n  };\n\n  return OutdentButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(OutdentButton);\n\nvar HrButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nHrButton = (function(_super) {\n  __extends(HrButton, _super);\n\n  function HrButton() {\n    return HrButton.__super__.constructor.apply(this, arguments);\n  }\n\n  HrButton.prototype.name = 'hr';\n\n  HrButton.prototype.icon = 'minus';\n\n  HrButton.prototype.htmlTag = 'hr';\n\n  HrButton.prototype.status = function($node) {\n    return true;\n  };\n\n  HrButton.prototype.command = function() {\n    var $hr, $newBlock, $nextBlock, $rootBlock;\n    $rootBlock = this.editor.util.furthestBlockEl();\n    $nextBlock = $rootBlock.next();\n    if ($nextBlock.length > 0) {\n      this.editor.selection.save();\n    } else {\n      $newBlock = $('<p/>').append(this.editor.util.phBr);\n    }\n    $hr = $('<hr/>').insertAfter($rootBlock);\n    if ($newBlock) {\n      $newBlock.insertAfter($hr);\n      this.editor.selection.setRangeAtStartOf($newBlock);\n    } else {\n      this.editor.selection.restore();\n    }\n    return this.editor.trigger('valuechanged');\n  };\n\n  return HrButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(HrButton);\n\nvar TableButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nTableButton = (function(_super) {\n  __extends(TableButton, _super);\n\n  function TableButton() {\n    return TableButton.__super__.constructor.apply(this, arguments);\n  }\n\n  TableButton.prototype.name = 'table';\n\n  TableButton.prototype.icon = 'table';\n\n  TableButton.prototype.htmlTag = 'table';\n\n  TableButton.prototype.disableTag = 'pre, li, blockquote';\n\n  TableButton.prototype.menu = true;\n\n  TableButton.prototype._init = function() {\n    TableButton.__super__._init.call(this);\n    $.merge(this.editor.formatter._allowedTags, ['tbody', 'tr', 'td', 'colgroup', 'col']);\n    $.extend(this.editor.formatter._allowedAttributes, {\n      td: ['rowspan', 'colspan'],\n      col: ['width']\n    });\n    this._initShortcuts();\n    this.editor.on('decorate', (function(_this) {\n      return function(e, $el) {\n        return $el.find('table').each(function(i, table) {\n          return _this.decorate($(table));\n        });\n      };\n    })(this));\n    this.editor.on('undecorate', (function(_this) {\n      return function(e, $el) {\n        return $el.find('table').each(function(i, table) {\n          return _this.undecorate($(table));\n        });\n      };\n    })(this));\n    this.editor.on('selectionchanged.table', (function(_this) {\n      return function(e) {\n        var $container, range;\n        _this.editor.body.find('.simditor-table td').removeClass('active');\n        range = _this.editor.selection.getRange();\n        if (range == null) {\n          return;\n        }\n        $container = $(range.commonAncestorContainer);\n        if (range.collapsed && $container.is('.simditor-table')) {\n          if (_this.editor.selection.rangeAtStartOf($container)) {\n            $container = $container.find('td:first');\n          } else {\n            $container = $container.find('td:last');\n          }\n          _this.editor.selection.setRangeAtEndOf($container);\n        }\n        return $container.closest('td', _this.editor.body).addClass('active');\n      };\n    })(this));\n    this.editor.on('blur.table', (function(_this) {\n      return function(e) {\n        return _this.editor.body.find('.simditor-table td').removeClass('active');\n      };\n    })(this));\n    this.editor.inputManager.addKeystrokeHandler('38', 'td', (function(_this) {\n      return function(e, $node) {\n        var $prevTr, $tr, index;\n        $tr = $node.parent('tr');\n        $prevTr = $tr.prev('tr');\n        if (!($prevTr.length > 0)) {\n          return true;\n        }\n        index = $tr.find('td').index($node);\n        _this.editor.selection.setRangeAtEndOf($prevTr.find('td').eq(index));\n        return true;\n      };\n    })(this));\n    return this.editor.inputManager.addKeystrokeHandler('40', 'td', (function(_this) {\n      return function(e, $node) {\n        var $nextTr, $tr, index;\n        $tr = $node.parent('tr');\n        $nextTr = $tr.next('tr');\n        if (!($nextTr.length > 0)) {\n          return true;\n        }\n        index = $tr.find('td').index($node);\n        _this.editor.selection.setRangeAtEndOf($nextTr.find('td').eq(index));\n        return true;\n      };\n    })(this));\n  };\n\n  TableButton.prototype.initResize = function($table) {\n    var $colgroup, $resizeHandle, $wrapper;\n    $wrapper = $table.parent('.simditor-table');\n    $colgroup = $table.find('colgroup');\n    if ($colgroup.length < 1) {\n      $colgroup = $('<colgroup/>').prependTo($table);\n      $table.find('tr:first td').each((function(_this) {\n        return function(i, td) {\n          var $col;\n          return $col = $('<col/>').appendTo($colgroup);\n        };\n      })(this));\n      this.refreshTableWidth($table);\n    }\n    $resizeHandle = $('<div class=\"simditor-resize-handle\" contenteditable=\"false\"></div>').appendTo($wrapper);\n    $wrapper.on('mousemove', 'td', (function(_this) {\n      return function(e) {\n        var $col, $td, index, x, _ref, _ref1;\n        if ($wrapper.hasClass('resizing')) {\n          return;\n        }\n        $td = $(e.currentTarget);\n        x = e.pageX - $(e.currentTarget).offset().left;\n        if (x < 5 && $td.prev().length > 0) {\n          $td = $td.prev();\n        }\n        if ($td.next('td').length < 1) {\n          $resizeHandle.hide();\n          return;\n        }\n        if ((_ref = $resizeHandle.data('td')) != null ? _ref.is($td) : void 0) {\n          $resizeHandle.show();\n          return;\n        }\n        index = $td.parent().find('td').index($td);\n        $col = $colgroup.find('col').eq(index);\n        if ((_ref1 = $resizeHandle.data('col')) != null ? _ref1.is($col) : void 0) {\n          $resizeHandle.show();\n          return;\n        }\n        return $resizeHandle.css('left', $td.position().left + $td.outerWidth() - 5).data('td', $td).data('col', $col).show();\n      };\n    })(this));\n    $wrapper.on('mouseleave', (function(_this) {\n      return function(e) {\n        return $resizeHandle.hide();\n      };\n    })(this));\n    return $wrapper.on('mousedown', '.simditor-resize-handle', (function(_this) {\n      return function(e) {\n        var $handle, $leftCol, $leftTd, $rightCol, $rightTd, minWidth, startHandleLeft, startLeftWidth, startRightWidth, startX, tableWidth;\n        $handle = $(e.currentTarget);\n        $leftTd = $handle.data('td');\n        $leftCol = $handle.data('col');\n        $rightTd = $leftTd.next('td');\n        $rightCol = $leftCol.next('col');\n        startX = e.pageX;\n        startLeftWidth = $leftTd.outerWidth() * 1;\n        startRightWidth = $rightTd.outerWidth() * 1;\n        startHandleLeft = parseFloat($handle.css('left'));\n        tableWidth = $leftTd.closest('table').width();\n        minWidth = 50;\n        $(document).on('mousemove.simditor-resize-table', function(e) {\n          var deltaX, leftWidth, rightWidth;\n          deltaX = e.pageX - startX;\n          leftWidth = startLeftWidth + deltaX;\n          rightWidth = startRightWidth - deltaX;\n          if (leftWidth < minWidth) {\n            leftWidth = minWidth;\n            deltaX = minWidth - startLeftWidth;\n            rightWidth = startRightWidth - deltaX;\n          } else if (rightWidth < minWidth) {\n            rightWidth = minWidth;\n            deltaX = startRightWidth - minWidth;\n            leftWidth = startLeftWidth + deltaX;\n          }\n          $leftCol.attr('width', (leftWidth / tableWidth * 100) + '%');\n          $rightCol.attr('width', (rightWidth / tableWidth * 100) + '%');\n          return $handle.css('left', startHandleLeft + deltaX);\n        });\n        $(document).one('mouseup.simditor-resize-table', function(e) {\n          $(document).off('.simditor-resize-table');\n          return $wrapper.removeClass('resizing');\n        });\n        $wrapper.addClass('resizing');\n        return false;\n      };\n    })(this));\n  };\n\n  TableButton.prototype._initShortcuts = function() {\n    this.editor.inputManager.addShortcut('ctrl+alt+up', (function(_this) {\n      return function(e) {\n        _this.editMenu.find('.menu-item[data-param=insertRowAbove]').click();\n        return false;\n      };\n    })(this));\n    this.editor.inputManager.addShortcut('ctrl+alt+down', (function(_this) {\n      return function(e) {\n        _this.editMenu.find('.menu-item[data-param=insertRowBelow]').click();\n        return false;\n      };\n    })(this));\n    this.editor.inputManager.addShortcut('ctrl+alt+left', (function(_this) {\n      return function(e) {\n        _this.editMenu.find('.menu-item[data-param=insertColLeft]').click();\n        return false;\n      };\n    })(this));\n    return this.editor.inputManager.addShortcut('ctrl+alt+right', (function(_this) {\n      return function(e) {\n        _this.editMenu.find('.menu-item[data-param=insertColRight]').click();\n        return false;\n      };\n    })(this));\n  };\n\n  TableButton.prototype.decorate = function($table) {\n    if ($table.parent('.simditor-table').length > 0) {\n      this.undecorate($table);\n    }\n    $table.wrap('<div class=\"simditor-table\"></div>');\n    this.initResize($table);\n    return $table.parent();\n  };\n\n  TableButton.prototype.undecorate = function($table) {\n    if (!($table.parent('.simditor-table').length > 0)) {\n      return;\n    }\n    return $table.parent().replaceWith($table);\n  };\n\n  TableButton.prototype.renderMenu = function() {\n    $(\"<div class=\\\"menu-create-table\\\">\\n</div>\\n<div class=\\\"menu-edit-table\\\">\\n  <ul>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"deleteRow\\\"><span>\" + (this._t('deleteRow')) + \" ( Ctrl + Alt + → )</span></a></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"insertRowAbove\\\"><span>\" + (this._t('insertRowAbove')) + \" ( Ctrl + Alt + ↑ )</span></a></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"insertRowBelow\\\"><span>\" + (this._t('insertRowBelow')) + \" ( Ctrl + Alt + ↓ )</span></a></li>\\n    <li><span class=\\\"separator\\\"></span></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"deleteCol\\\"><span>\" + (this._t('deleteColumn')) + \"</span></a></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"insertColLeft\\\"><span>\" + (this._t('insertColumnLeft')) + \" ( Ctrl + Alt + ← )</span></a></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"insertColRight\\\"><span>\" + (this._t('insertColumnRight')) + \" ( Ctrl + Alt + → )</span></a></li>\\n    <li><span class=\\\"separator\\\"></span></li>\\n    <li><a tabindex=\\\"-1\\\" unselectable=\\\"on\\\" class=\\\"menu-item\\\" href=\\\"javascript:;\\\" data-param=\\\"deleteTable\\\"><span>\" + (this._t('deleteTable')) + \"</span></a></li>\\n  </ul>\\n</div>\").appendTo(this.menuWrapper);\n    this.createMenu = this.menuWrapper.find('.menu-create-table');\n    this.editMenu = this.menuWrapper.find('.menu-edit-table');\n    this.createTable(6, 6).appendTo(this.createMenu);\n    this.createMenu.on('mouseenter', 'td', (function(_this) {\n      return function(e) {\n        var $td, $tr, num;\n        _this.createMenu.find('td').removeClass('selected');\n        $td = $(e.currentTarget);\n        $tr = $td.parent();\n        num = $tr.find('td').index($td) + 1;\n        return $tr.prevAll('tr').addBack().find('td:lt(' + num + ')').addClass('selected');\n      };\n    })(this));\n    this.createMenu.on('mouseleave', (function(_this) {\n      return function(e) {\n        return $(e.currentTarget).find('td').removeClass('selected');\n      };\n    })(this));\n    return this.createMenu.on('mousedown', 'td', (function(_this) {\n      return function(e) {\n        var $closestBlock, $table, $td, $tr, colNum, rowNum;\n        _this.wrapper.removeClass('menu-on');\n        if (!_this.editor.inputManager.focused) {\n          return;\n        }\n        $td = $(e.currentTarget);\n        $tr = $td.parent();\n        colNum = $tr.find('td').index($td) + 1;\n        rowNum = $tr.prevAll('tr').length + 1;\n        $table = _this.createTable(rowNum, colNum, true);\n        $closestBlock = _this.editor.util.closestBlockEl();\n        if (_this.editor.util.isEmptyNode($closestBlock)) {\n          $closestBlock.replaceWith($table);\n        } else {\n          $closestBlock.after($table);\n        }\n        _this.decorate($table);\n        _this.editor.selection.setRangeAtStartOf($table.find('td:first'));\n        _this.editor.trigger('valuechanged');\n        return false;\n      };\n    })(this));\n  };\n\n  TableButton.prototype.createTable = function(row, col, phBr) {\n    var $table, $tbody, $td, $tr, c, r, _i, _j;\n    $table = $('<table/>');\n    $tbody = $('<tbody/>').appendTo($table);\n    for (r = _i = 0; 0 <= row ? _i < row : _i > row; r = 0 <= row ? ++_i : --_i) {\n      $tr = $('<tr/>').appendTo($tbody);\n      for (c = _j = 0; 0 <= col ? _j < col : _j > col; c = 0 <= col ? ++_j : --_j) {\n        $td = $('<td/>').appendTo($tr);\n        if (phBr) {\n          $td.append(this.editor.util.phBr);\n        }\n      }\n    }\n    return $table;\n  };\n\n  TableButton.prototype.refreshTableWidth = function($table) {\n    var cols, tableWidth;\n    tableWidth = $table.width();\n    cols = $table.find('col');\n    return $table.find('tr:first td').each((function(_this) {\n      return function(i, td) {\n        var $col;\n        $col = cols.eq(i);\n        return $col.attr('width', ($(td).outerWidth() / tableWidth * 100) + '%');\n      };\n    })(this));\n  };\n\n  TableButton.prototype.setActive = function(active) {\n    TableButton.__super__.setActive.call(this, active);\n    if (active) {\n      this.createMenu.hide();\n      return this.editMenu.show();\n    } else {\n      this.createMenu.show();\n      return this.editMenu.hide();\n    }\n  };\n\n  TableButton.prototype.deleteRow = function($td) {\n    var $newTr, $tr, index;\n    $tr = $td.parent('tr');\n    if ($tr.siblings('tr').length < 1) {\n      return this.deleteTable($td);\n    } else {\n      $newTr = $tr.next('tr');\n      if (!($newTr.length > 0)) {\n        $newTr = $tr.prev('tr');\n      }\n      index = $tr.find('td').index($td);\n      $tr.remove();\n      return this.editor.selection.setRangeAtEndOf($newTr.find('td').eq(index));\n    }\n  };\n\n  TableButton.prototype.insertRow = function($td, direction) {\n    var $newTr, $table, $tr, colNum, i, index, _i;\n    if (direction == null) {\n      direction = 'after';\n    }\n    $tr = $td.parent('tr');\n    $table = $tr.closest('table');\n    colNum = 0;\n    $table.find('tr').each((function(_this) {\n      return function(i, tr) {\n        return colNum = Math.max(colNum, $(tr).find('td').length);\n      };\n    })(this));\n    $newTr = $('<tr/>');\n    for (i = _i = 1; 1 <= colNum ? _i <= colNum : _i >= colNum; i = 1 <= colNum ? ++_i : --_i) {\n      $('<td/>').append(this.editor.util.phBr).appendTo($newTr);\n    }\n    $tr[direction]($newTr);\n    index = $tr.find('td').index($td);\n    return this.editor.selection.setRangeAtStartOf($newTr.find('td').eq(index));\n  };\n\n  TableButton.prototype.deleteCol = function($td) {\n    var $newTd, $table, $tr, index;\n    $tr = $td.parent('tr');\n    if ($tr.siblings('tr').length < 1 && $td.siblings('td').length < 1) {\n      return this.deleteTable($td);\n    } else {\n      index = $tr.find('td').index($td);\n      $newTd = $td.next('td');\n      if (!($newTd.length > 0)) {\n        $newTd = $tr.prev('td');\n      }\n      $table = $tr.closest('table');\n      $table.find('col').eq(index).remove();\n      $table.find('tr').each((function(_this) {\n        return function(i, tr) {\n          return $(tr).find('td').eq(index).remove();\n        };\n      })(this));\n      this.refreshTableWidth($table);\n      return this.editor.selection.setRangeAtEndOf($newTd);\n    }\n  };\n\n  TableButton.prototype.insertCol = function($td, direction) {\n    var $col, $newCol, $newTd, $table, $tr, index, tableWidth, width;\n    if (direction == null) {\n      direction = 'after';\n    }\n    $tr = $td.parent('tr');\n    index = $tr.find('td').index($td);\n    $table = $td.closest('table');\n    $col = $table.find('col').eq(index);\n    $table.find('tr').each((function(_this) {\n      return function(i, tr) {\n        var $newTd;\n        $newTd = $('<td/>').append(_this.editor.util.phBr);\n        return $(tr).find('td').eq(index)[direction]($newTd);\n      };\n    })(this));\n    $newCol = $('<col/>');\n    $col[direction]($newCol);\n    tableWidth = $table.width();\n    width = Math.max(parseFloat($col.attr('width')) / 2, 50 / tableWidth * 100);\n    $col.attr('width', width + '%');\n    $newCol.attr('width', width + '%');\n    this.refreshTableWidth($table);\n    $newTd = direction === 'after' ? $td.next('td') : $td.prev('td');\n    return this.editor.selection.setRangeAtStartOf($newTd);\n  };\n\n  TableButton.prototype.deleteTable = function($td) {\n    var $block, $table;\n    $table = $td.closest('.simditor-table');\n    $block = $table.next('p');\n    $table.remove();\n    if ($block.length > 0) {\n      return this.editor.selection.setRangeAtStartOf($block);\n    }\n  };\n\n  TableButton.prototype.command = function(param) {\n    var $td, range;\n    range = this.editor.selection.getRange();\n    $td = $(range.commonAncestorContainer).closest('td');\n    if (!($td.length > 0)) {\n      return;\n    }\n    if (param === 'deleteRow') {\n      this.deleteRow($td);\n    } else if (param === 'insertRowAbove') {\n      this.insertRow($td, 'before');\n    } else if (param === 'insertRowBelow') {\n      this.insertRow($td);\n    } else if (param === 'deleteCol') {\n      this.deleteCol($td);\n    } else if (param === 'insertColLeft') {\n      this.insertCol($td, 'before');\n    } else if (param === 'insertColRight') {\n      this.insertCol($td);\n    } else if (param === 'deleteTable') {\n      this.deleteTable($td);\n    } else {\n      return;\n    }\n    return this.editor.trigger('valuechanged');\n  };\n\n  return TableButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(TableButton);\n\nvar StrikethroughButton,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nStrikethroughButton = (function(_super) {\n  __extends(StrikethroughButton, _super);\n\n  function StrikethroughButton() {\n    return StrikethroughButton.__super__.constructor.apply(this, arguments);\n  }\n\n  StrikethroughButton.prototype.name = 'strikethrough';\n\n  StrikethroughButton.prototype.icon = 'strikethrough';\n\n  StrikethroughButton.prototype.htmlTag = 'strike';\n\n  StrikethroughButton.prototype.disableTag = 'pre';\n\n  StrikethroughButton.prototype.status = function($node) {\n    var active;\n    if ($node != null) {\n      this.setDisabled($node.is(this.disableTag));\n    }\n    if (this.disabled) {\n      return true;\n    }\n    active = document.queryCommandState('strikethrough') === true;\n    this.setActive(active);\n    return active;\n  };\n\n  StrikethroughButton.prototype.command = function() {\n    document.execCommand('strikethrough');\n    this.editor.trigger('valuechanged');\n    return $(document).trigger('selectionchange');\n  };\n\n  return StrikethroughButton;\n\n})(Button);\n\nSimditor.Toolbar.addButton(StrikethroughButton);\n\nreturn Simditor;\n\n}));\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/simditor/uploader.js",
    "content": "(function (root, factory) {\n  if (typeof define === 'function' && define.amd) {\n    // AMD. Register as an anonymous module.\n    define('simple-uploader', [\"jquery\",\n      \"simple-module\"], function ($, SimpleModule) {\n      return (root.returnExportsGlobal = factory($, SimpleModule));\n    });\n  } else if (typeof exports === 'object') {\n    // Node. Does not work with strict CommonJS, but\n    // only CommonJS-like enviroments that support module.exports,\n    // like Node.\n    module.exports = factory(require(\"jquery\"),\n      require(\"simple-module\"));\n  } else {\n    root.simple = root.simple || {};\n    root.simple['uploader'] = factory(jQuery,\n      SimpleModule);\n  }\n}(this, function ($, SimpleModule) {\n\nvar Uploader, uploader,\n  __hasProp = {}.hasOwnProperty,\n  __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };\n\nUploader = (function(_super) {\n  __extends(Uploader, _super);\n\n  function Uploader() {\n    return Uploader.__super__.constructor.apply(this, arguments);\n  }\n\n  Uploader.count = 0;\n\n  Uploader.prototype.opts = {\n    url: '',\n    params: null,\n    fileKey: 'upload_file',\n    connectionCount: 3\n  };\n\n  Uploader.prototype._init = function() {\n    this.files = [];\n    this.queue = [];\n    this.id = ++Uploader.count;\n    this.on('uploadcomplete', (function(_this) {\n      return function(e, file) {\n        _this.files.splice($.inArray(file, _this.files), 1);\n        if (_this.queue.length > 0 && _this.files.length < _this.opts.connectionCount) {\n          return _this.upload(_this.queue.shift());\n        } else {\n          return _this.uploading = false;\n        }\n      };\n    })(this));\n    return $(window).on('beforeunload.uploader-' + this.id, (function(_this) {\n      return function(e) {\n        if (!_this.uploading) {\n          return;\n        }\n        e.originalEvent.returnValue = _this._t('leaveConfirm');\n        return _this._t('leaveConfirm');\n      };\n    })(this));\n  };\n\n  Uploader.prototype.generateId = (function() {\n    var id;\n    id = 0;\n    return function() {\n      return id += 1;\n    };\n  })();\n\n  Uploader.prototype.upload = function(file, opts) {\n    var f, key, _i, _len;\n    if (opts == null) {\n      opts = {};\n    }\n    if (file == null) {\n      return;\n    }\n    if ($.isArray(file)) {\n      for (_i = 0, _len = file.length; _i < _len; _i++) {\n        f = file[_i];\n        this.upload(f, opts);\n      }\n    } else if ($(file).is('input:file')) {\n      key = $(file).attr('name');\n      if (key) {\n        opts.fileKey = key;\n      }\n      this.upload($.makeArray($(file)[0].files), opts);\n    } else if (!file.id || !file.obj) {\n      file = this.getFile(file);\n    }\n    if (!(file && file.obj)) {\n      return;\n    }\n    $.extend(file, opts);\n    if (this.files.length >= this.opts.connectionCount) {\n      this.queue.push(file);\n      return;\n    }\n    if (this.triggerHandler('beforeupload', [file]) === false) {\n      return;\n    }\n    this.files.push(file);\n    this._xhrUpload(file);\n    return this.uploading = true;\n  };\n\n  Uploader.prototype.getFile = function(fileObj) {\n    var name, _ref, _ref1;\n    if (fileObj instanceof window.File || fileObj instanceof window.Blob) {\n      name = (_ref = fileObj.fileName) != null ? _ref : fileObj.name;\n    } else {\n      return null;\n    }\n    return {\n      id: this.generateId(),\n      url: this.opts.url,\n      params: this.opts.params,\n      fileKey: this.opts.fileKey,\n      name: name,\n      size: (_ref1 = fileObj.fileSize) != null ? _ref1 : fileObj.size,\n      ext: name ? name.split('.').pop().toLowerCase() : '',\n      obj: fileObj\n    };\n  };\n\n  Uploader.prototype._xhrUpload = function(file) {\n    var formData, k, v, _ref;\n    formData = new FormData();\n    formData.append(file.fileKey, file.obj);\n    formData.append(\"original_filename\", file.name);\n    if (file.params) {\n      _ref = file.params;\n      for (k in _ref) {\n        v = _ref[k];\n        formData.append(k, v);\n      }\n    }\n    return file.xhr = $.ajax({\n      url: file.url,\n      data: formData,\n      dataType: 'json',\n      processData: false,\n      contentType: false,\n      type: 'POST',\n      headers: {\n        'X-File-Name': encodeURIComponent(file.name)\n      },\n      xhr: function() {\n        var req;\n        req = $.ajaxSettings.xhr();\n        if (req) {\n          req.upload.onprogress = (function(_this) {\n            return function(e) {\n              return _this.progress(e);\n            };\n          })(this);\n        }\n        return req;\n      },\n      progress: (function(_this) {\n        return function(e) {\n          if (!e.lengthComputable) {\n            return;\n          }\n          return _this.trigger('uploadprogress', [file, e.loaded, e.total]);\n        };\n      })(this),\n      error: (function(_this) {\n        return function(xhr, status, err) {\n          return _this.trigger('uploaderror', [file, xhr, status]);\n        };\n      })(this),\n      success: (function(_this) {\n        return function(result) {\n          _this.trigger('uploadprogress', [file, file.size, file.size]);\n          return _this.trigger('uploadsuccess', [file, result]);\n        };\n      })(this),\n      complete: (function(_this) {\n        return function(xhr, status) {\n          return _this.trigger('uploadcomplete', [file, xhr.responseText]);\n        };\n      })(this)\n    });\n  };\n\n  Uploader.prototype.cancel = function(file) {\n    var f, _i, _len, _ref;\n    if (!file.id) {\n      _ref = this.files;\n      for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n        f = _ref[_i];\n        if (f.id === file * 1) {\n          file = f;\n          break;\n        }\n      }\n    }\n    this.trigger('uploadcancel', [file]);\n    if (file.xhr) {\n      file.xhr.abort();\n    }\n    return file.xhr = null;\n  };\n\n  Uploader.prototype.readImageFile = function(fileObj, callback) {\n    var fileReader, img;\n    if (!$.isFunction(callback)) {\n      return;\n    }\n    img = new Image();\n    img.onload = function() {\n      return callback(img);\n    };\n    img.onerror = function() {\n      return callback();\n    };\n    if (window.FileReader && FileReader.prototype.readAsDataURL && /^image/.test(fileObj.type)) {\n      fileReader = new FileReader();\n      fileReader.onload = function(e) {\n        return img.src = e.target.result;\n      };\n      return fileReader.readAsDataURL(fileObj);\n    } else {\n      return callback();\n    }\n  };\n\n  Uploader.prototype.destroy = function() {\n    var file, _i, _len, _ref;\n    this.queue.length = 0;\n    _ref = this.files;\n    for (_i = 0, _len = _ref.length; _i < _len; _i++) {\n      file = _ref[_i];\n      this.cancel(file);\n    }\n    $(window).off('.uploader-' + this.id);\n    return $(document).off('.uploader-' + this.id);\n  };\n\n  Uploader.i18n = {\n    'zh-CN': {\n      leaveConfirm: '正在上传文件，如果离开上传会自动取消'\n    }\n  };\n\n  Uploader.locale = 'zh-CN';\n\n  return Uploader;\n\n})(SimpleModule);\n\nuploader = function(opts) {\n  return new Uploader(opts);\n};\n\n\nreturn uploader;\n\n\n}));\n\n\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/suggest/data.json",
    "content": "{\n  \"message\": \"\",\n  \"value\": [\n    {\n      \"userName\": \"淳芸\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20001\n    }, {\n      \"userName\": \"orion-01\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20000\n    }, {\n      \"userName\": \"穆晓晨\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20002\n    }, {\n      \"userName\": \"张欢引\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20003\n    }, {\n      \"userName\": \"吴琼\",\n      \"shortAccount\": \"wuqiong\",\n      \"userId\": 20004\n    }, {\n      \"userName\": \"吴东鹏\",\n      \"shortAccount\": \"wudongpeng\",\n      \"userId\": 20005\n    }, {\n      \"userName\": \"黄少铅\",\n      \"shortAccount\": \"huangshaoqian\",\n      \"userId\": 20006\n    }, {\n      \"userName\": \"胡运燕\",\n      \"shortAccount\": \"yunyan\",\n      \"userId\": 20007\n    }, {\n      \"userName\": \"刘幸\",\n      \"shortAccount\": \"liuxing\",\n      \"userId\": 20008\n    }, {\n      \"userName\": \"陈媛媛\",\n      \"shortAccount\": \"chenyuanyuan\",\n      \"userId\": 20009\n    }, {\n      \"userName\": \"旷东林\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20010\n    }, {\n      \"userName\": \"唐宏禹\",\n      \"shortAccount\": \"chunyun\",\n      \"userId\": 20011\n    }, {\n      \"userName\": \"旷东林\",\n      \"shortAccount\": \"kuangdonglin\",\n      \"userId\": 20010\n    }, {\n      \"userName\": \"唐宏禹\",\n      \"shortAccount\": \"tanghongyu\",\n      \"userId\": 20011\n    }\n  ],\n  \"code\": 200,\n  \"redirect\": \"\"\n}"
  },
  {
    "path": "public/assets/dashboard/js/plugins/summernote/summernote-zh-CN.js",
    "content": "(function ($) {\n  $.extend($.summernote.lang, {\n    'zh-CN': {\n      font: {\n        bold: '粗体',\n        italic: '斜体',\n        underline: '下划线',\n        strikethrough: '删除线',\n        clear: '清除格式',\n        height: '行高',\n        name: '字体',\n        size: '字号'\n      },\n      image: {\n        image: '图片',\n        insert: '插入图片',\n        resizeFull: '调整至 100%',\n        resizeHalf: '调整至 50%',\n        resizeQuarter: '调整至 25%',\n        floatLeft: '左浮动',\n        floatRight: '右浮动',\n        floatNone: '不浮动',\n        dragImageHere: '将图片拖至此处',\n        selectFromFiles: '从本地上传',\n        url: '图片地址'\n      },\n      link: {\n        link: '链接',\n        insert: '插入链接',\n        unlink: '去除链接',\n        edit: '编辑链接',\n        textToDisplay: '显示文本',\n        url: '链接地址',\n        openInNewWindow: '在新窗口打开'\n      },\n      video: {\n        video: '视频',\n        videoLink: '视频链接',\n        insert: '插入视频',\n        url: '视频地址',\n        providers: '(优酷, Instagram, DailyMotion, Youtube等)'\n      },\n      table: {\n        table: '表格'\n      },\n      hr: {\n        insert: '水平线'\n      },\n      style: {\n        style: '样式',\n        normal: '普通',\n        blockquote: '引用',\n        pre: '代码',\n        h1: '标题 1',\n        h2: '标题 2',\n        h3: '标题 3',\n        h4: '标题 4',\n        h5: '标题 5',\n        h6: '标题 6'\n      },\n      lists: {\n        unordered: '无序列表',\n        ordered: '有序列表'\n      },\n      options: {\n        help: '帮助',\n        fullscreen: '全屏',\n        codeview: '源代码'\n      },\n      paragraph: {\n        paragraph: '段落',\n        outdent: '减少缩进',\n        indent: '增加缩进',\n        left: '左对齐',\n        center: '居中对齐',\n        right: '右对齐',\n        justify: '两端对齐'\n      },\n      color: {\n        recent: '最近使用',\n        more: '更多',\n        background: '背景',\n        foreground: '前景',\n        transparent: '透明',\n        setTransparent: '透明',\n        reset: '重置',\n        resetToDefault: '默认'\n      },\n      shortcut: {\n        shortcuts: '快捷键',\n        close: '关闭',\n        textFormatting: '文本格式',\n        action: '动作',\n        paragraphFormatting: '段落格式',\n        documentStyle: '文档样式'\n      },\n      history: {\n        undo: '撤销',\n        redo: '重做'\n      }\n    }\n  });\n})(jQuery);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/switchery/switchery.js",
    "content": "(function(){function require(path,parent,orig){var resolved=require.resolve(path);if(null==resolved){orig=orig||path;parent=parent||\"root\";var err=new Error('Failed to require \"'+orig+'\" from \"'+parent+'\"');err.path=orig;err.parent=parent;err.require=true;throw err}var module=require.modules[resolved];if(!module._resolving&&!module.exports){var mod={};mod.exports={};mod.client=mod.component=true;module._resolving=true;module.call(this,mod.exports,require.relative(resolved),mod);delete module._resolving;module.exports=mod.exports}return module.exports}require.modules={};require.aliases={};require.resolve=function(path){if(path.charAt(0)===\"/\")path=path.slice(1);var paths=[path,path+\".js\",path+\".json\",path+\"/index.js\",path+\"/index.json\"];for(var i=0;i<paths.length;i++){var path=paths[i];if(require.modules.hasOwnProperty(path))return path;if(require.aliases.hasOwnProperty(path))return require.aliases[path]}};require.normalize=function(curr,path){var segs=[];if(\".\"!=path.charAt(0))return path;curr=curr.split(\"/\");path=path.split(\"/\");for(var i=0;i<path.length;++i){if(\"..\"==path[i]){curr.pop()}else if(\".\"!=path[i]&&\"\"!=path[i]){segs.push(path[i])}}return curr.concat(segs).join(\"/\")};require.register=function(path,definition){require.modules[path]=definition};require.alias=function(from,to){if(!require.modules.hasOwnProperty(from)){throw new Error('Failed to alias \"'+from+'\", it does not exist')}require.aliases[to]=from};require.relative=function(parent){var p=require.normalize(parent,\"..\");function lastIndexOf(arr,obj){var i=arr.length;while(i--){if(arr[i]===obj)return i}return-1}function localRequire(path){var resolved=localRequire.resolve(path);return require(resolved,parent,path)}localRequire.resolve=function(path){var c=path.charAt(0);if(\"/\"==c)return path.slice(1);if(\".\"==c)return require.normalize(p,path);var segs=parent.split(\"/\");var i=lastIndexOf(segs,\"deps\")+1;if(!i)i=0;path=segs.slice(0,i+1).join(\"/\")+\"/deps/\"+path;return path};localRequire.exists=function(path){return require.modules.hasOwnProperty(localRequire.resolve(path))};return localRequire};require.register(\"abpetkov-transitionize/transitionize.js\",function(exports,require,module){module.exports=Transitionize;function Transitionize(element,props){if(!(this instanceof Transitionize))return new Transitionize(element,props);this.element=element;this.props=props||{};this.init()}Transitionize.prototype.isSafari=function(){return/Safari/.test(navigator.userAgent)&&/Apple Computer/.test(navigator.vendor)};Transitionize.prototype.init=function(){var transitions=[];for(var key in this.props){transitions.push(key+\" \"+this.props[key])}this.element.style.transition=transitions.join(\", \");if(this.isSafari())this.element.style.webkitTransition=transitions.join(\", \")}});require.register(\"ftlabs-fastclick/lib/fastclick.js\",function(exports,require,module){function FastClick(layer){\"use strict\";var oldOnClick,self=this;this.trackingClick=false;this.trackingClickStart=0;this.targetElement=null;this.touchStartX=0;this.touchStartY=0;this.lastTouchIdentifier=0;this.touchBoundary=10;this.layer=layer;if(!layer||!layer.nodeType){throw new TypeError(\"Layer must be a document node\")}this.onClick=function(){return FastClick.prototype.onClick.apply(self,arguments)};this.onMouse=function(){return FastClick.prototype.onMouse.apply(self,arguments)};this.onTouchStart=function(){return FastClick.prototype.onTouchStart.apply(self,arguments)};this.onTouchMove=function(){return FastClick.prototype.onTouchMove.apply(self,arguments)};this.onTouchEnd=function(){return FastClick.prototype.onTouchEnd.apply(self,arguments)};this.onTouchCancel=function(){return FastClick.prototype.onTouchCancel.apply(self,arguments)};if(FastClick.notNeeded(layer)){return}if(this.deviceIsAndroid){layer.addEventListener(\"mouseover\",this.onMouse,true);layer.addEventListener(\"mousedown\",this.onMouse,true);layer.addEventListener(\"mouseup\",this.onMouse,true)}layer.addEventListener(\"click\",this.onClick,true);layer.addEventListener(\"touchstart\",this.onTouchStart,false);layer.addEventListener(\"touchmove\",this.onTouchMove,false);layer.addEventListener(\"touchend\",this.onTouchEnd,false);layer.addEventListener(\"touchcancel\",this.onTouchCancel,false);if(!Event.prototype.stopImmediatePropagation){layer.removeEventListener=function(type,callback,capture){var rmv=Node.prototype.removeEventListener;if(type===\"click\"){rmv.call(layer,type,callback.hijacked||callback,capture)}else{rmv.call(layer,type,callback,capture)}};layer.addEventListener=function(type,callback,capture){var adv=Node.prototype.addEventListener;if(type===\"click\"){adv.call(layer,type,callback.hijacked||(callback.hijacked=function(event){if(!event.propagationStopped){callback(event)}}),capture)}else{adv.call(layer,type,callback,capture)}}}if(typeof layer.onclick===\"function\"){oldOnClick=layer.onclick;layer.addEventListener(\"click\",function(event){oldOnClick(event)},false);layer.onclick=null}}FastClick.prototype.deviceIsAndroid=navigator.userAgent.indexOf(\"Android\")>0;FastClick.prototype.deviceIsIOS=/iP(ad|hone|od)/.test(navigator.userAgent);FastClick.prototype.deviceIsIOS4=FastClick.prototype.deviceIsIOS&&/OS 4_\\d(_\\d)?/.test(navigator.userAgent);FastClick.prototype.deviceIsIOSWithBadTarget=FastClick.prototype.deviceIsIOS&&/OS ([6-9]|\\d{2})_\\d/.test(navigator.userAgent);FastClick.prototype.needsClick=function(target){\"use strict\";switch(target.nodeName.toLowerCase()){case\"button\":case\"select\":case\"textarea\":if(target.disabled){return true}break;case\"input\":if(this.deviceIsIOS&&target.type===\"file\"||target.disabled){return true}break;case\"label\":case\"video\":return true}return/\\bneedsclick\\b/.test(target.className)};FastClick.prototype.needsFocus=function(target){\"use strict\";switch(target.nodeName.toLowerCase()){case\"textarea\":return true;case\"select\":return!this.deviceIsAndroid;case\"input\":switch(target.type){case\"button\":case\"checkbox\":case\"file\":case\"image\":case\"radio\":case\"submit\":return false}return!target.disabled&&!target.readOnly;default:return/\\bneedsfocus\\b/.test(target.className)}};FastClick.prototype.sendClick=function(targetElement,event){\"use strict\";var clickEvent,touch;if(document.activeElement&&document.activeElement!==targetElement){document.activeElement.blur()}touch=event.changedTouches[0];clickEvent=document.createEvent(\"MouseEvents\");clickEvent.initMouseEvent(this.determineEventType(targetElement),true,true,window,1,touch.screenX,touch.screenY,touch.clientX,touch.clientY,false,false,false,false,0,null);clickEvent.forwardedTouchEvent=true;targetElement.dispatchEvent(clickEvent)};FastClick.prototype.determineEventType=function(targetElement){\"use strict\";if(this.deviceIsAndroid&&targetElement.tagName.toLowerCase()===\"select\"){return\"mousedown\"}return\"click\"};FastClick.prototype.focus=function(targetElement){\"use strict\";var length;if(this.deviceIsIOS&&targetElement.setSelectionRange&&targetElement.type.indexOf(\"date\")!==0&&targetElement.type!==\"time\"){length=targetElement.value.length;targetElement.setSelectionRange(length,length)}else{targetElement.focus()}};FastClick.prototype.updateScrollParent=function(targetElement){\"use strict\";var scrollParent,parentElement;scrollParent=targetElement.fastClickScrollParent;if(!scrollParent||!scrollParent.contains(targetElement)){parentElement=targetElement;do{if(parentElement.scrollHeight>parentElement.offsetHeight){scrollParent=parentElement;targetElement.fastClickScrollParent=parentElement;break}parentElement=parentElement.parentElement}while(parentElement)}if(scrollParent){scrollParent.fastClickLastScrollTop=scrollParent.scrollTop}};FastClick.prototype.getTargetElementFromEventTarget=function(eventTarget){\"use strict\";if(eventTarget.nodeType===Node.TEXT_NODE){return eventTarget.parentNode}return eventTarget};FastClick.prototype.onTouchStart=function(event){\"use strict\";var targetElement,touch,selection;if(event.targetTouches.length>1){return true}targetElement=this.getTargetElementFromEventTarget(event.target);touch=event.targetTouches[0];if(this.deviceIsIOS){selection=window.getSelection();if(selection.rangeCount&&!selection.isCollapsed){return true}if(!this.deviceIsIOS4){if(touch.identifier===this.lastTouchIdentifier){event.preventDefault();return false}this.lastTouchIdentifier=touch.identifier;this.updateScrollParent(targetElement)}}this.trackingClick=true;this.trackingClickStart=event.timeStamp;this.targetElement=targetElement;this.touchStartX=touch.pageX;this.touchStartY=touch.pageY;if(event.timeStamp-this.lastClickTime<200){event.preventDefault()}return true};FastClick.prototype.touchHasMoved=function(event){\"use strict\";var touch=event.changedTouches[0],boundary=this.touchBoundary;if(Math.abs(touch.pageX-this.touchStartX)>boundary||Math.abs(touch.pageY-this.touchStartY)>boundary){return true}return false};FastClick.prototype.onTouchMove=function(event){\"use strict\";if(!this.trackingClick){return true}if(this.targetElement!==this.getTargetElementFromEventTarget(event.target)||this.touchHasMoved(event)){this.trackingClick=false;this.targetElement=null}return true};FastClick.prototype.findControl=function(labelElement){\"use strict\";if(labelElement.control!==undefined){return labelElement.control}if(labelElement.htmlFor){return document.getElementById(labelElement.htmlFor)}return labelElement.querySelector(\"button, input:not([type=hidden]), keygen, meter, output, progress, select, textarea\")};FastClick.prototype.onTouchEnd=function(event){\"use strict\";var forElement,trackingClickStart,targetTagName,scrollParent,touch,targetElement=this.targetElement;if(!this.trackingClick){return true}if(event.timeStamp-this.lastClickTime<200){this.cancelNextClick=true;return true}this.cancelNextClick=false;this.lastClickTime=event.timeStamp;trackingClickStart=this.trackingClickStart;this.trackingClick=false;this.trackingClickStart=0;if(this.deviceIsIOSWithBadTarget){touch=event.changedTouches[0];targetElement=document.elementFromPoint(touch.pageX-window.pageXOffset,touch.pageY-window.pageYOffset)||targetElement;targetElement.fastClickScrollParent=this.targetElement.fastClickScrollParent}targetTagName=targetElement.tagName.toLowerCase();if(targetTagName===\"label\"){forElement=this.findControl(targetElement);if(forElement){this.focus(targetElement);if(this.deviceIsAndroid){return false}targetElement=forElement}}else if(this.needsFocus(targetElement)){if(event.timeStamp-trackingClickStart>100||this.deviceIsIOS&&window.top!==window&&targetTagName===\"input\"){this.targetElement=null;return false}this.focus(targetElement);if(!this.deviceIsIOS4||targetTagName!==\"select\"){this.targetElement=null;event.preventDefault()}return false}if(this.deviceIsIOS&&!this.deviceIsIOS4){scrollParent=targetElement.fastClickScrollParent;if(scrollParent&&scrollParent.fastClickLastScrollTop!==scrollParent.scrollTop){return true}}if(!this.needsClick(targetElement)){event.preventDefault();this.sendClick(targetElement,event)}return false};FastClick.prototype.onTouchCancel=function(){\"use strict\";this.trackingClick=false;this.targetElement=null};FastClick.prototype.onMouse=function(event){\"use strict\";if(!this.targetElement){return true}if(event.forwardedTouchEvent){return true}if(!event.cancelable){return true}if(!this.needsClick(this.targetElement)||this.cancelNextClick){if(event.stopImmediatePropagation){event.stopImmediatePropagation()}else{event.propagationStopped=true}event.stopPropagation();event.preventDefault();return false}return true};FastClick.prototype.onClick=function(event){\"use strict\";var permitted;if(this.trackingClick){this.targetElement=null;this.trackingClick=false;return true}if(event.target.type===\"submit\"&&event.detail===0){return true}permitted=this.onMouse(event);if(!permitted){this.targetElement=null}return permitted};FastClick.prototype.destroy=function(){\"use strict\";var layer=this.layer;if(this.deviceIsAndroid){layer.removeEventListener(\"mouseover\",this.onMouse,true);layer.removeEventListener(\"mousedown\",this.onMouse,true);layer.removeEventListener(\"mouseup\",this.onMouse,true)}layer.removeEventListener(\"click\",this.onClick,true);layer.removeEventListener(\"touchstart\",this.onTouchStart,false);layer.removeEventListener(\"touchmove\",this.onTouchMove,false);layer.removeEventListener(\"touchend\",this.onTouchEnd,false);layer.removeEventListener(\"touchcancel\",this.onTouchCancel,false)};FastClick.notNeeded=function(layer){\"use strict\";var metaViewport;var chromeVersion;if(typeof window.ontouchstart===\"undefined\"){return true}chromeVersion=+(/Chrome\\/([0-9]+)/.exec(navigator.userAgent)||[,0])[1];if(chromeVersion){if(FastClick.prototype.deviceIsAndroid){metaViewport=document.querySelector(\"meta[name=viewport]\");if(metaViewport){if(metaViewport.content.indexOf(\"user-scalable=no\")!==-1){return true}if(chromeVersion>31&&window.innerWidth<=window.screen.width){return true}}}else{return true}}if(layer.style.msTouchAction===\"none\"){return true}return false};FastClick.attach=function(layer){\"use strict\";return new FastClick(layer)};if(typeof define!==\"undefined\"&&define.amd){define(function(){\"use strict\";return FastClick})}else if(typeof module!==\"undefined\"&&module.exports){module.exports=FastClick.attach;module.exports.FastClick=FastClick}else{window.FastClick=FastClick}});require.register(\"switchery/switchery.js\",function(exports,require,module){var transitionize=require(\"transitionize\"),fastclick=require(\"fastclick\");module.exports=Switchery;var defaults={color:\"#64bd63\",secondaryColor:\"#dfdfdf\",className:\"switchery\",disabled:false,disabledOpacity:.5,speed:\"0.4s\"};function Switchery(element,options){if(!(this instanceof Switchery))return new Switchery(element,options);this.element=element;this.options=options||{};for(var i in defaults){if(this.options[i]==null){this.options[i]=defaults[i]}}if(this.element!=null&&this.element.type==\"checkbox\")this.init()}Switchery.prototype.hide=function(){this.element.style.display=\"none\"};Switchery.prototype.show=function(){var switcher=this.create();this.insertAfter(this.element,switcher)};Switchery.prototype.create=function(){this.switcher=document.createElement(\"span\");this.jack=document.createElement(\"small\");this.switcher.appendChild(this.jack);this.switcher.className=this.options.className;return this.switcher};Switchery.prototype.insertAfter=function(reference,target){reference.parentNode.insertBefore(target,reference.nextSibling)};Switchery.prototype.isChecked=function(){return this.element.checked};Switchery.prototype.isDisabled=function(){return this.options.disabled||this.element.disabled};Switchery.prototype.setPosition=function(clicked){var checked=this.isChecked(),switcher=this.switcher,jack=this.jack;if(clicked&&checked)checked=false;else if(clicked&&!checked)checked=true;if(checked===true){this.element.checked=true;if(window.getComputedStyle)jack.style.left=parseInt(window.getComputedStyle(switcher).width)-parseInt(window.getComputedStyle(jack).width)+\"px\";else jack.style.left=parseInt(switcher.currentStyle[\"width\"])-parseInt(jack.currentStyle[\"width\"])+\"px\";if(this.options.color)this.colorize();this.setSpeed()}else{jack.style.left=0;this.element.checked=false;this.switcher.style.boxShadow=\"inset 0 0 0 0 \"+this.options.secondaryColor;this.switcher.style.borderColor=this.options.secondaryColor;this.switcher.style.backgroundColor=\"\";this.setSpeed()}};Switchery.prototype.setSpeed=function(){var switcherProp={},jackProp={left:this.options.speed.replace(/[a-z]/,\"\")/2+\"s\"};if(this.isChecked()){switcherProp={border:this.options.speed,\"box-shadow\":this.options.speed,\"background-color\":this.options.speed.replace(/[a-z]/,\"\")*3+\"s\"}}else{switcherProp={border:this.options.speed,\"box-shadow\":this.options.speed}}transitionize(this.switcher,switcherProp);transitionize(this.jack,jackProp)};Switchery.prototype.setAttributes=function(){var id=this.element.getAttribute(\"id\"),name=this.element.getAttribute(\"name\");if(id)this.switcher.setAttribute(\"id\",id);if(name)this.switcher.setAttribute(\"name\",name)};Switchery.prototype.colorize=function(){this.switcher.style.backgroundColor=this.options.color;this.switcher.style.borderColor=this.options.color;this.switcher.style.boxShadow=\"inset 0 0 0 16px \"+this.options.color};Switchery.prototype.handleOnchange=function(state){if(typeof Event===\"function\"||!document.fireEvent){var event=document.createEvent(\"HTMLEvents\");event.initEvent(\"change\",true,true);this.element.dispatchEvent(event)}else{this.element.fireEvent(\"onchange\")}};Switchery.prototype.handleChange=function(){var self=this,el=this.element;if(el.addEventListener){el.addEventListener(\"change\",function(){self.setPosition()})}else{el.attachEvent(\"onchange\",function(){self.setPosition()})}};Switchery.prototype.handleClick=function(){var self=this,switcher=this.switcher;if(this.isDisabled()===false){fastclick(switcher);if(switcher.addEventListener){switcher.addEventListener(\"click\",function(){self.setPosition(true);self.handleOnchange(self.element.checked)})}else{switcher.attachEvent(\"onclick\",function(){self.setPosition(true);self.handleOnchange(self.element.checked)})}}else{this.element.disabled=true;this.switcher.style.opacity=this.options.disabledOpacity}};Switchery.prototype.disableLabel=function(){var parent=this.element.parentNode,labels=document.getElementsByTagName(\"label\"),attached=null;for(var i=0;i<labels.length;i++){if(labels[i].getAttribute(\"for\")===this.element.id){attached=true}}if(attached===true||parent.tagName.toLowerCase()===\"label\"){if(parent.addEventListener){parent.addEventListener(\"click\",function(e){e.preventDefault()})}else{parent.attachEvent(\"onclick\",function(e){e.returnValue=false})}}};Switchery.prototype.markAsSwitched=function(){this.element.setAttribute(\"data-switchery\",true)};Switchery.prototype.markedAsSwitched=function(){return this.element.getAttribute(\"data-switchery\")};Switchery.prototype.init=function(){this.hide();this.show();this.setPosition();this.setAttributes();this.markAsSwitched();this.disableLabel();this.handleChange();this.handleClick()}});require.alias(\"abpetkov-transitionize/transitionize.js\",\"switchery/deps/transitionize/transitionize.js\");require.alias(\"abpetkov-transitionize/transitionize.js\",\"switchery/deps/transitionize/index.js\");require.alias(\"abpetkov-transitionize/transitionize.js\",\"transitionize/index.js\");require.alias(\"abpetkov-transitionize/transitionize.js\",\"abpetkov-transitionize/index.js\");require.alias(\"ftlabs-fastclick/lib/fastclick.js\",\"switchery/deps/fastclick/lib/fastclick.js\");require.alias(\"ftlabs-fastclick/lib/fastclick.js\",\"switchery/deps/fastclick/index.js\");require.alias(\"ftlabs-fastclick/lib/fastclick.js\",\"fastclick/index.js\");require.alias(\"ftlabs-fastclick/lib/fastclick.js\",\"ftlabs-fastclick/index.js\");require.alias(\"switchery/switchery.js\",\"switchery/index.js\");if(typeof exports==\"object\"){module.exports=require(\"switchery\")}else if(typeof define==\"function\"&&define.amd){define(function(){return require(\"switchery\")})}else{this[\"Switchery\"]=require(\"switchery\")}})();\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/treeview/bootstrap-treeview.js",
    "content": "/* =========================================================\n * bootstrap-treeview.js v1.0.0\n * =========================================================\n * Copyright 2013 Jonathan Miles\n * Project URL : http://www.jondmiles.com/bootstrap-treeview\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;(function($, window, document, undefined) {\n\n\t/*global jQuery, console*/\n\n\t'use strict';\n\n\tvar pluginName = 'treeview';\n\n\tvar Tree = function(element, options) {\n\n\t\tthis.$element = $(element);\n\t\tthis._element = element;\n\t\tthis._elementId = this._element.id;\n\t\tthis._styleId = this._elementId + '-style';\n\n\t\tthis.tree = [];\n\t\tthis.nodes = [];\n\t\tthis.selectedNode = {};\n\n\t\tthis._init(options);\n\t};\n\n\tTree.defaults = {\n\n\t\tinjectStyle: true,\n\n\t\tlevels: 2,\n\n\t\texpandIcon: 'glyphicon glyphicon-plus',\n\t\tcollapseIcon: 'glyphicon glyphicon-minus',\n\t\tnodeIcon: 'glyphicon glyphicon-stop',\n\n\t\tcolor: undefined, // '#000000',\n\t\tbackColor: undefined, // '#FFFFFF',\n\t\tborderColor: undefined, // '#dddddd',\n\t\tonhoverColor: '#F5F5F5',\n\t\tselectedColor: '#FFFFFF',\n\t\tselectedBackColor: '#428bca',\n\n\t\tenableLinks: false,\n\t\thighlightSelected: true,\n\t\tshowBorder: true,\n\t\tshowTags: false,\n\n\t\t// Event handler for when a node is selected\n\t\tonNodeSelected: undefined\n\t};\n\n\tTree.prototype = {\n\n\t\tremove: function() {\n\n\t\t\tthis._destroy();\n\t\t\t$.removeData(this, 'plugin_' + pluginName);\n\t\t\t$('#' + this._styleId).remove();\n\t\t},\n\n\t\t_destroy: function() {\n\n\t\t\tif (this.initialized) {\n\t\t\t\tthis.$wrapper.remove();\n\t\t\t\tthis.$wrapper = null;\n\n\t\t\t\t// Switch off events\n\t\t\t\tthis._unsubscribeEvents();\n\t\t\t}\n\n\t\t\t// Reset initialized flag\n\t\t\tthis.initialized = false;\n\t\t},\n\n\t\t_init: function(options) {\n\n\t\t\tif (options.data) {\n\t\t\t\tif (typeof options.data === 'string') {\n\t\t\t\t\toptions.data = $.parseJSON(options.data);\n\t\t\t\t}\n\t\t\t\tthis.tree = $.extend(true, [], options.data);\n\t\t\t\tdelete options.data;\n\t\t\t}\n\n\t\t\tthis.options = $.extend({}, Tree.defaults, options);\n\n\t\t\tthis._setInitialLevels(this.tree, 0);\n\n\t\t\tthis._destroy();\n\t\t\tthis._subscribeEvents();\n\t\t\tthis._render();\n\t\t},\n\n\t\t_unsubscribeEvents: function() {\n\n\t\t\tthis.$element.off('click');\n\t\t},\n\n\t\t_subscribeEvents: function() {\n\n\t\t\tthis._unsubscribeEvents();\n\n\t\t\tthis.$element.on('click', $.proxy(this._clickHandler, this));\n\n\t\t\tif (typeof (this.options.onNodeSelected) === 'function') {\n\t\t\t\tthis.$element.on('nodeSelected', this.options.onNodeSelected);\n\t\t\t}\n\t\t},\n\n\t\t_clickHandler: function(event) {\n\n\t\t\tif (!this.options.enableLinks) { event.preventDefault(); }\n\n\t\t\tvar target = $(event.target),\n\t\t\t\tclassList = target.attr('class') ? target.attr('class').split(' ') : [],\n\t\t\t\tnode = this._findNode(target);\n\n\t\t\tif ((classList.indexOf('click-expand') != -1) ||\n\t\t\t\t\t(classList.indexOf('click-collapse') != -1)) {\n\t\t\t\t// Expand or collapse node by toggling child node visibility\n\t\t\t\tthis._toggleNodes(node);\n\t\t\t\tthis._render();\n\t\t\t}\n\t\t\telse if (node) {\n\t\t\t\tthis._setSelectedNode(node);\n\t\t\t}\n\t\t},\n\n\t\t// Looks up the DOM for the closest parent list item to retrieve the\n\t\t// data attribute nodeid, which is used to lookup the node in the flattened structure.\n\t\t_findNode: function(target) {\n\n\t\t\tvar nodeId = target.closest('li.list-group-item').attr('data-nodeid'),\n\t\t\t\tnode = this.nodes[nodeId];\n\n\t\t\tif (!node) {\n\t\t\t\tconsole.log('Error: node does not exist');\n\t\t\t}\n\t\t\treturn node;\n\t\t},\n\n\t\t// Actually triggers the nodeSelected event\n\t\t_triggerNodeSelectedEvent: function(node) {\n\n\t\t\tthis.$element.trigger('nodeSelected', [$.extend(true, {}, node)]);\n\t\t},\n\n\t\t// Handles selecting and unselecting of nodes,\n\t\t// as well as determining whether or not to trigger the nodeSelected event\n\t\t_setSelectedNode: function(node) {\n\n\t\t\tif (!node) { return; }\n\n\t\t\tif (node === this.selectedNode) {\n\t\t\t\tthis.selectedNode = {};\n\t\t\t}\n\t\t\telse {\n\t\t\t\tthis._triggerNodeSelectedEvent(this.selectedNode = node);\n\t\t\t}\n\n\t\t\tthis._render();\n\t\t},\n\n\t\t// On initialization recurses the entire tree structure\n\t\t// setting expanded / collapsed states based on initial levels\n\t\t_setInitialLevels: function(nodes, level) {\n\n\t\t\tif (!nodes) { return; }\n\t\t\tlevel += 1;\n\n\t\t\tvar self = this;\n\t\t\t$.each(nodes, function addNodes(id, node) {\n\n\t\t\t\tif (level >= self.options.levels) {\n\t\t\t\t\tself._toggleNodes(node);\n\t\t\t\t}\n\n\t\t\t\t// Need to traverse both nodes and _nodes to ensure\n\t\t\t\t// all levels collapsed beyond levels\n\t\t\t\tvar nodes = node.nodes ? node.nodes : node._nodes ? node._nodes : undefined;\n\t\t\t\tif (nodes) {\n\t\t\t\t\treturn self._setInitialLevels(nodes, level);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Toggle renaming nodes -> _nodes, _nodes -> nodes\n\t\t// to simulate expanding or collapsing a node.\n\t\t_toggleNodes: function(node) {\n\n\t\t\tif (!node.nodes && !node._nodes) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif (node.nodes) {\n\t\t\t\tnode._nodes = node.nodes;\n\t\t\t\tdelete node.nodes;\n\t\t\t}\n\t\t\telse {\n\t\t\t\tnode.nodes = node._nodes;\n\t\t\t\tdelete node._nodes;\n\t\t\t}\n\t\t},\n\n\t\t_render: function() {\n\n\t\t\tvar self = this;\n\n\t\t\tif (!self.initialized) {\n\n\t\t\t\t// Setup first time only components\n\t\t\t\tself.$element.addClass(pluginName);\n\t\t\t\tself.$wrapper = $(self._template.list);\n\n\t\t\t\tself._injectStyle();\n\n\t\t\t\tself.initialized = true;\n\t\t\t}\n\n\t\t\tself.$element.empty().append(self.$wrapper.empty());\n\n\t\t\t// Build tree\n\t\t\tself.nodes = [];\n\t\t\tself._buildTree(self.tree, 0);\n\t\t},\n\n\t\t// Starting from the root node, and recursing down the\n\t\t// structure we build the tree one node at a time\n\t\t_buildTree: function(nodes, level) {\n\n\t\t\tif (!nodes) { return; }\n\t\t\tlevel += 1;\n\n\t\t\tvar self = this;\n\t\t\t$.each(nodes, function addNodes(id, node) {\n\n\t\t\t\tnode.nodeId = self.nodes.length;\n\t\t\t\tself.nodes.push(node);\n\n\t\t\t\tvar treeItem = $(self._template.item)\n\t\t\t\t\t.addClass('node-' + self._elementId)\n\t\t\t\t\t.addClass((node === self.selectedNode) ? 'node-selected' : '')\n\t\t\t\t\t.attr('data-nodeid', node.nodeId)\n\t\t\t\t\t.attr('style', self._buildStyleOverride(node));\n\n\t\t\t\t// Add indent/spacer to mimic tree structure\n\t\t\t\tfor (var i = 0; i < (level - 1); i++) {\n\t\t\t\t\ttreeItem.append(self._template.indent);\n\t\t\t\t}\n\n\t\t\t\t// Add expand, collapse or empty spacer icons\n\t\t\t\t// to facilitate tree structure navigation\n\t\t\t\tif (node._nodes) {\n\t\t\t\t\ttreeItem\n\t\t\t\t\t\t.append($(self._template.iconWrapper)\n\t\t\t\t\t\t\t.append($(self._template.icon)\n\t\t\t\t\t\t\t\t.addClass('click-expand')\n\t\t\t\t\t\t\t\t.addClass(self.options.expandIcon))\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse if (node.nodes) {\n\t\t\t\t\ttreeItem\n\t\t\t\t\t\t.append($(self._template.iconWrapper)\n\t\t\t\t\t\t\t.append($(self._template.icon)\n\t\t\t\t\t\t\t\t.addClass('click-collapse')\n\t\t\t\t\t\t\t\t.addClass(self.options.collapseIcon))\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\ttreeItem\n\t\t\t\t\t\t.append($(self._template.iconWrapper)\n\t\t\t\t\t\t\t.append($(self._template.icon)\n\t\t\t\t\t\t\t\t.addClass('glyphicon'))\n\t\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\t// Add node icon\n\t\t\t\ttreeItem\n\t\t\t\t\t.append($(self._template.iconWrapper)\n\t\t\t\t\t\t.append($(self._template.icon)\n\t\t\t\t\t\t\t.addClass(node.icon ? node.icon : self.options.nodeIcon))\n\t\t\t\t\t);\n\n\t\t\t\t// Add text\n\t\t\t\tif (self.options.enableLinks) {\n\t\t\t\t\t// Add hyperlink\n\t\t\t\t\ttreeItem\n\t\t\t\t\t\t.append($(self._template.link)\n\t\t\t\t\t\t\t.attr('href', node.href)\n\t\t\t\t\t\t\t.append(node.text)\n\t\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\t// otherwise just text\n\t\t\t\t\ttreeItem\n\t\t\t\t\t\t.append(node.text);\n\t\t\t\t}\n\n\t\t\t\t// Add tags as badges\n\t\t\t\tif (self.options.showTags && node.tags) {\n\t\t\t\t\t$.each(node.tags, function addTag(id, tag) {\n\t\t\t\t\t\ttreeItem\n\t\t\t\t\t\t\t.append($(self._template.badge)\n\t\t\t\t\t\t\t\t.append(tag)\n\t\t\t\t\t\t\t);\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\t// Add item to the tree\n\t\t\t\tself.$wrapper.append(treeItem);\n\n\t\t\t\t// Recursively add child ndoes\n\t\t\t\tif (node.nodes) {\n\t\t\t\t\treturn self._buildTree(node.nodes, level);\n\t\t\t\t}\n\t\t\t});\n\t\t},\n\n\t\t// Define any node level style override for\n\t\t// 1. selectedNode\n\t\t// 2. node|data assigned color overrides\n\t\t_buildStyleOverride: function(node) {\n\n\t\t\tvar style = '';\n\t\t\tif (this.options.highlightSelected && (node === this.selectedNode)) {\n\t\t\t\tstyle += 'color:' + this.options.selectedColor + ';';\n\t\t\t}\n\t\t\telse if (node.color) {\n\t\t\t\tstyle += 'color:' + node.color + ';';\n\t\t\t}\n\n\t\t\tif (this.options.highlightSelected && (node === this.selectedNode)) {\n\t\t\t\tstyle += 'background-color:' + this.options.selectedBackColor + ';';\n\t\t\t}\n\t\t\telse if (node.backColor) {\n\t\t\t\tstyle += 'background-color:' + node.backColor + ';';\n\t\t\t}\n\n\t\t\treturn style;\n\t\t},\n\n\t\t// Add inline style into head\n\t\t_injectStyle: function() {\n\n\t\t\tif (this.options.injectStyle && !document.getElementById(this._styleId)) {\n\t\t\t\t$('<style type=\"text/css\" id=\"' + this._styleId + '\"> ' + this._buildStyle() + ' </style>').appendTo('head');\n\t\t\t}\n\t\t},\n\n\t\t// Construct trees style based on user options\n\t\t_buildStyle: function() {\n\n\t\t\tvar style = '.node-' + this._elementId + '{';\n\t\t\tif (this.options.color) {\n\t\t\t\tstyle += 'color:' + this.options.color + ';';\n\t\t\t}\n\t\t\tif (this.options.backColor) {\n\t\t\t\tstyle += 'background-color:' + this.options.backColor + ';';\n\t\t\t}\n\t\t\tif (!this.options.showBorder) {\n\t\t\t\tstyle += 'border:none;';\n\t\t\t}\n\t\t\telse if (this.options.borderColor) {\n\t\t\t\tstyle += 'border:1px solid ' + this.options.borderColor + ';';\n\t\t\t}\n\t\t\tstyle += '}';\n\n\t\t\tif (this.options.onhoverColor) {\n\t\t\t\tstyle += '.node-' + this._elementId + ':hover{' +\n\t\t\t\t'background-color:' + this.options.onhoverColor + ';' +\n\t\t\t\t'}';\n\t\t\t}\n\n\t\t\treturn this._css + style;\n\t\t},\n\n\t\t_template: {\n\t\t\tlist: '<ul class=\"list-group\"></ul>',\n\t\t\titem: '<li class=\"list-group-item\"></li>',\n\t\t\tindent: '<span class=\"indent\"></span>',\n\t\t\ticonWrapper: '<span class=\"icon\"></span>',\n\t\t\ticon: '<i></i>',\n\t\t\tlink: '<a href=\"#\" style=\"color:inherit;\"></a>',\n\t\t\tbadge: '<span class=\"badge\"></span>'\n\t\t},\n\n\t\t_css: '.list-group-item{cursor:pointer;}span.indent{margin-left:10px;margin-right:10px}span.icon{margin-right:5px}'\n\t\t// _css: '.list-group-item{cursor:pointer;}.list-group-item:hover{background-color:#f5f5f5;}span.indent{margin-left:10px;margin-right:10px}span.icon{margin-right:5px}'\n\n\t};\n\n\tvar logError = function(message) {\n        if(window.console) {\n            window.console.error(message);\n        }\n    };\n\n\t// Prevent against multiple instantiations,\n\t// handle updates and method calls\n\t$.fn[pluginName] = function(options, args) {\n\t\treturn this.each(function() {\n\t\t\tvar self = $.data(this, 'plugin_' + pluginName);\n\t\t\tif (typeof options === 'string') {\n\t\t\t\tif (!self) {\n\t\t\t\t\tlogError('Not initialized, can not call method : ' + options);\n\t\t\t\t}\n\t\t\t\telse if (!$.isFunction(self[options]) || options.charAt(0) === '_') {\n\t\t\t\t\tlogError('No such method : ' + options);\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tif (typeof args === 'string') {\n\t\t\t\t\t\targs = [args];\n\t\t\t\t\t}\n\t\t\t\t\tself[options].apply(self, args);\n\t\t\t\t}\n\t\t\t}\n\t\t\telse {\n\t\t\t\tif (!self) {\n\t\t\t\t\t$.data(this, 'plugin_' + pluginName, new Tree(this, $.extend(true, {}, options)));\n\t\t\t\t}\n\t\t\t\telse {\n\t\t\t\t\tself._init(options);\n\t\t\t\t}\n\t\t\t}\n\t\t});\n\t};\n\n})(jQuery, window, document);\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/webuploader/index.html",
    "content": "<!DOCTYPE HTML PUBLIC \"-//IETF//DTD HTML 2.0//EN\">\n<html><head>\n<title>403 Forbidden</title>\n</head><body>\n<h1>Forbidden</h1>\n<p>You don't have permission to access /theme/hplus/js/plugins/webuploader/\non this server.</p>\n<hr>\n<address>Apache Server at www.zi-han.net Port 80</address>\n</body></html>\n"
  },
  {
    "path": "public/assets/dashboard/js/plugins/zTree/jquery.ztree.core-3.5.js",
    "content": "/*\n * JQuery zTree core v3.5.17\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2014-05-08\n */\n(function($){\n\tvar settings = {}, roots = {}, caches = {},\n\t//default consts of core\n\t_consts = {\n\t\tclassName: {\n\t\t\tBUTTON: \"button\",\n\t\t\tLEVEL: \"level\",\n\t\t\tICO_LOADING: \"ico_loading\",\n\t\t\tSWITCH: \"switch\"\n\t\t},\n\t\tevent: {\n\t\t\tNODECREATED: \"ztree_nodeCreated\",\n\t\t\tCLICK: \"ztree_click\",\n\t\t\tEXPAND: \"ztree_expand\",\n\t\t\tCOLLAPSE: \"ztree_collapse\",\n\t\t\tASYNC_SUCCESS: \"ztree_async_success\",\n\t\t\tASYNC_ERROR: \"ztree_async_error\",\n\t\t\tREMOVE: \"ztree_remove\"\n\t\t},\n\t\tid: {\n\t\t\tA: \"_a\",\n\t\t\tICON: \"_ico\",\n\t\t\tSPAN: \"_span\",\n\t\t\tSWITCH: \"_switch\",\n\t\t\tUL: \"_ul\"\n\t\t},\n\t\tline: {\n\t\t\tROOT: \"root\",\n\t\t\tROOTS: \"roots\",\n\t\t\tCENTER: \"center\",\n\t\t\tBOTTOM: \"bottom\",\n\t\t\tNOLINE: \"noline\",\n\t\t\tLINE: \"line\"\n\t\t},\n\t\tfolder: {\n\t\t\tOPEN: \"open\",\n\t\t\tCLOSE: \"close\",\n\t\t\tDOCU: \"docu\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED: \"curSelectedNode\"\n\t\t}\n\t},\n\t//default setting of core\n\t_setting = {\n\t\ttreeId: \"\",\n\t\ttreeObj: null,\n\t\tview: {\n\t\t\taddDiyDom: null,\n\t\t\tautoCancelSelected: true,\n\t\t\tdblClickExpand: true,\n\t\t\texpandSpeed: \"fast\",\n\t\t\tfontCss: {},\n\t\t\tnameIsHTML: false,\n\t\t\tselectedMulti: true,\n\t\t\tshowIcon: true,\n\t\t\tshowLine: true,\n\t\t\tshowTitle: true,\n\t\t\ttxtSelectedEnable: false\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchildren: \"children\",\n\t\t\t\tname: \"name\",\n\t\t\t\ttitle: \"\",\n\t\t\t\turl: \"url\"\n\t\t\t},\n\t\t\tsimpleData: {\n\t\t\t\tenable: false,\n\t\t\t\tidKey: \"id\",\n\t\t\t\tpIdKey: \"pId\",\n\t\t\t\trootPId: null\n\t\t\t},\n\t\t\tkeep: {\n\t\t\t\tparent: false,\n\t\t\t\tleaf: false\n\t\t\t}\n\t\t},\n\t\tasync: {\n\t\t\tenable: false,\n\t\t\tcontentType: \"application/x-www-form-urlencoded\",\n\t\t\ttype: \"post\",\n\t\t\tdataType: \"text\",\n\t\t\turl: \"\",\n\t\t\tautoParam: [],\n\t\t\totherParam: [],\n\t\t\tdataFilter: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeAsync:null,\n\t\t\tbeforeClick:null,\n\t\t\tbeforeDblClick:null,\n\t\t\tbeforeRightClick:null,\n\t\t\tbeforeMouseDown:null,\n\t\t\tbeforeMouseUp:null,\n\t\t\tbeforeExpand:null,\n\t\t\tbeforeCollapse:null,\n\t\t\tbeforeRemove:null,\n\n\t\t\tonAsyncError:null,\n\t\t\tonAsyncSuccess:null,\n\t\t\tonNodeCreated:null,\n\t\t\tonClick:null,\n\t\t\tonDblClick:null,\n\t\t\tonRightClick:null,\n\t\t\tonMouseDown:null,\n\t\t\tonMouseUp:null,\n\t\t\tonExpand:null,\n\t\t\tonCollapse:null,\n\t\t\tonRemove:null\n\t\t}\n\t},\n\t//default root of core\n\t//zTree use root to save full data\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tif (!r) {\n\t\t\tr = {};\n\t\t\tdata.setRoot(setting, r);\n\t\t}\n\t\tr[setting.data.key.children] = [];\n\t\tr.expandTriggerFlag = false;\n\t\tr.curSelectedList = [];\n\t\tr.noSelection = true;\n\t\tr.createdNodes = [];\n\t\tr.zId = 0;\n\t\tr._ver = (new Date()).getTime();\n\t},\n\t//default cache of core\n\t_initCache = function(setting) {\n\t\tvar c = data.getCache(setting);\n\t\tif (!c) {\n\t\t\tc = {};\n\t\t\tdata.setCache(setting, c);\n\t\t}\n\t\tc.nodes = [];\n\t\tc.doms = [];\n\t},\n\t//default bindEvent of core\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.NODECREATED, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onNodeCreated, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.CLICK, function (event, srcEvent, treeId, node, clickFlag) {\n\t\t\ttools.apply(setting.callback.onClick, [srcEvent, treeId, node, clickFlag]);\n\t\t});\n\n\t\to.bind(c.EXPAND, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onExpand, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.COLLAPSE, function (event, treeId, node) {\n\t\t\ttools.apply(setting.callback.onCollapse, [event, treeId, node]);\n\t\t});\n\n\t\to.bind(c.ASYNC_SUCCESS, function (event, treeId, node, msg) {\n\t\t\ttools.apply(setting.callback.onAsyncSuccess, [event, treeId, node, msg]);\n\t\t});\n\n\t\to.bind(c.ASYNC_ERROR, function (event, treeId, node, XMLHttpRequest, textStatus, errorThrown) {\n\t\t\ttools.apply(setting.callback.onAsyncError, [event, treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t});\n\n\t\to.bind(c.REMOVE, function (event, treeId, treeNode) {\n\t\t\ttools.apply(setting.callback.onRemove, [event, treeId, treeNode]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.NODECREATED)\n\t\t.unbind(c.CLICK)\n\t\t.unbind(c.EXPAND)\n\t\t.unbind(c.COLLAPSE)\n\t\t.unbind(c.ASYNC_SUCCESS)\n\t\t.unbind(c.ASYNC_ERROR)\n\t\t.unbind(c.REMOVE);\n\t},\n\t//default event proxy of core\n\t_eventProxy = function(event) {\n\t\tvar target = event.target,\n\t\tsetting = data.getSetting(event.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(event.type, \"mousedown\")) {\n\t\t\ttreeEventType = \"mousedown\";\n\t\t} else if (tools.eqs(event.type, \"mouseup\")) {\n\t\t\ttreeEventType = \"mouseup\";\n\t\t} else if (tools.eqs(event.type, \"contextmenu\")) {\n\t\t\ttreeEventType = \"contextmenu\";\n\t\t} else if (tools.eqs(event.type, \"click\")) {\n\t\t\tif (tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.SWITCH) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t} else {\n\t\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\t\tif (tmp) {\n\t\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\t\tnodeEventType = \"clickNode\";\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (tools.eqs(event.type, \"dblclick\")) {\n\t\t\ttreeEventType = \"dblclick\";\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"switchNode\";\n\t\t\t}\n\t\t}\n\t\tif (treeEventType.length > 0 && tId.length == 0) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {tId = tools.getNodeMainDom(tmp).id;}\n\t\t}\n\t\t// event to node\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"switchNode\" :\n\t\t\t\t\tif (!node.isParent) {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t} else if (tools.eqs(event.type, \"click\")\n\t\t\t\t\t\t|| (tools.eqs(event.type, \"dblclick\") && tools.apply(setting.view.dblClickExpand, [setting.treeId, node], setting.view.dblClickExpand))) {\n\t\t\t\t\t\tnodeEventCallback = handler.onSwitchNode;\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnodeEventType = \"\";\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"clickNode\" :\n\t\t\t\t\tnodeEventCallback = handler.onClickNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\t// event to zTree\n\t\tswitch (treeEventType) {\n\t\t\tcase \"mousedown\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMousedown;\n\t\t\t\tbreak;\n\t\t\tcase \"mouseup\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeMouseup;\n\t\t\t\tbreak;\n\t\t\tcase \"dblclick\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeDblclick;\n\t\t\t\tbreak;\n\t\t\tcase \"contextmenu\" :\n\t\t\t\ttreeEventCallback = handler.onZTreeContextmenu;\n\t\t\t\tbreak;\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of core\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar r = data.getRoot(setting),\n\t\tchildKey = setting.data.key.children;\n\t\tn.level = level;\n\t\tn.tId = setting.treeId + \"_\" + (++r.zId);\n\t\tn.parentTId = parentNode ? parentNode.tId : null;\n\t\tn.open = (typeof n.open == \"string\") ? tools.eqs(n.open, \"true\") : !!n.open;\n\t\tif (n[childKey] && n[childKey].length > 0) {\n\t\t\tn.isParent = true;\n\t\t\tn.zAsync = true;\n\t\t} else {\n\t\t\tn.isParent = (typeof n.isParent == \"string\") ? tools.eqs(n.isParent, \"true\") : !!n.isParent;\n\t\t\tn.open = (n.isParent && !setting.async.enable) ? n.open : false;\n\t\t\tn.zAsync = !n.isParent;\n\t\t}\n\t\tn.isFirstNode = isFirstNode;\n\t\tn.isLastNode = isLastNode;\n\t\tn.getParentNode = function() {return data.getNodeCache(setting, n.parentTId);};\n\t\tn.getPreNode = function() {return data.getPreNode(setting, n);};\n\t\tn.getNextNode = function() {return data.getNextNode(setting, n);};\n\t\tn.isAjaxing = false;\n\t\tdata.fixPIdKeyValue(setting, n);\n\t},\n\t_init = {\n\t\tbind: [_bindEvent],\n\t\tunbind: [_unbindEvent],\n\t\tcaches: [_initCache],\n\t\tnodes: [_initNode],\n\t\tproxys: [_eventProxy],\n\t\troots: [_initRoot],\n\t\tbeforeA: [],\n\t\tafterA: [],\n\t\tinnerBeforeA: [],\n\t\tinnerAfterA: [],\n\t\tzTreeTools: []\n\t},\n\t//method of operate data\n\tdata = {\n\t\taddNodeCache: function(setting, node) {\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = node;\n\t\t},\n\t\tgetNodeCacheId: function(tId) {\n\t\t\treturn tId.substring(tId.lastIndexOf(\"_\")+1);\n\t\t},\n\t\taddAfterA: function(afterA) {\n\t\t\t_init.afterA.push(afterA);\n\t\t},\n\t\taddBeforeA: function(beforeA) {\n\t\t\t_init.beforeA.push(beforeA);\n\t\t},\n\t\taddInnerAfterA: function(innerAfterA) {\n\t\t\t_init.innerAfterA.push(innerAfterA);\n\t\t},\n\t\taddInnerBeforeA: function(innerBeforeA) {\n\t\t\t_init.innerBeforeA.push(innerBeforeA);\n\t\t},\n\t\taddInitBind: function(bindEvent) {\n\t\t\t_init.bind.push(bindEvent);\n\t\t},\n\t\taddInitUnBind: function(unbindEvent) {\n\t\t\t_init.unbind.push(unbindEvent);\n\t\t},\n\t\taddInitCache: function(initCache) {\n\t\t\t_init.caches.push(initCache);\n\t\t},\n\t\taddInitNode: function(initNode) {\n\t\t\t_init.nodes.push(initNode);\n\t\t},\n\t\taddInitProxy: function(initProxy, isFirst) {\n\t\t\tif (!!isFirst) {\n\t\t\t\t_init.proxys.splice(0,0,initProxy);\n\t\t\t} else {\n\t\t\t\t_init.proxys.push(initProxy);\n\t\t\t}\n\t\t},\n\t\taddInitRoot: function(initRoot) {\n\t\t\t_init.roots.push(initRoot);\n\t\t},\n\t\taddNodesData: function(setting, parentNode, nodes) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (!parentNode[childKey]) parentNode[childKey] = [];\n\t\t\tif (parentNode[childKey].length > 0) {\n\t\t\t\tparentNode[childKey][parentNode[childKey].length - 1].isLastNode = false;\n\t\t\t\tview.setNodeLineIcos(setting, parentNode[childKey][parentNode[childKey].length - 1]);\n\t\t\t}\n\t\t\tparentNode.isParent = true;\n\t\t\tparentNode[childKey] = parentNode[childKey].concat(nodes);\n\t\t},\n\t\taddSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tif (!data.isSelectedNode(setting, node)) {\n\t\t\t\troot.curSelectedList.push(node);\n\t\t\t}\n\t\t},\n\t\taddCreatedNode: function(setting, node) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\troot.createdNodes.push(node);\n\t\t\t}\n\t\t},\n\t\taddZTreeTools: function(zTreeTools) {\n\t\t\t_init.zTreeTools.push(zTreeTools);\n\t\t},\n\t\texSetting: function(s) {\n\t\t\t$.extend(true, _setting, s);\n\t\t},\n\t\tfixPIdKeyValue: function(setting, node) {\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnode[setting.data.simpleData.pIdKey] = node.parentTId ? node.getParentNode()[setting.data.simpleData.idKey] : setting.data.simpleData.rootPId;\n\t\t\t}\n\t\t},\n\t\tgetAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.afterA.length; i<j; i++) {\n\t\t\t\t_init.afterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.beforeA.length; i<j; i++) {\n\t\t\t\t_init.beforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerAfterA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerAfterA.length; i<j; i++) {\n\t\t\t\t_init.innerAfterA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetInnerBeforeA: function(setting, node, array) {\n\t\t\tfor (var i=0, j=_init.innerBeforeA.length; i<j; i++) {\n\t\t\t\t_init.innerBeforeA[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tgetCache: function(setting) {\n\t\t\treturn caches[setting.treeId];\n\t\t},\n\t\tgetNextNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length-1; i<=l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==l ? null : p[childKey][i+1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return null;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\treturn nodes[i];\n\t\t\t\t}\n\t\t\t\tvar tmp = data.getNodeByParam(setting, nodes[i][childKey], key, value);\n\t\t\t\tif (tmp) return tmp;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeCache: function(setting, tId) {\n\t\t\tif (!tId) return null;\n\t\t\tvar n = caches[setting.treeId].nodes[data.getNodeCacheId(tId)];\n\t\t\treturn n ? n : null;\n\t\t},\n\t\tgetNodeName: function(setting, node) {\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\treturn \"\" + node[nameKey];\n\t\t},\n\t\tgetNodeTitle: function(setting, node) {\n\t\t\tvar t = setting.data.key.title === \"\" ? setting.data.key.name : setting.data.key.title;\n\t\t\treturn \"\" + node[t];\n\t\t},\n\t\tgetNodes: function(setting) {\n\t\t\treturn data.getRoot(setting)[setting.data.key.children];\n\t\t},\n\t\tgetNodesByParam: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i][key] == value) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParam(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByParamFuzzy: function(setting, nodes, key, value) {\n\t\t\tif (!nodes || !key) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = [];\n\t\t\tvalue = value.toLowerCase();\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (typeof nodes[i][key] == \"string\" && nodes[i][key].toLowerCase().indexOf(value)>-1) {\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tresult = result.concat(data.getNodesByParamFuzzy(setting, nodes[i][childKey], key, value));\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetNodesByFilter: function(setting, nodes, filter, isSingle, invokeParam) {\n\t\t\tif (!nodes) return (isSingle ? null : []);\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tresult = isSingle ? null : [];\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (tools.apply(filter, [nodes[i], invokeParam], false)) {\n\t\t\t\t\tif (isSingle) {return nodes[i];}\n\t\t\t\t\tresult.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tvar tmpResult = data.getNodesByFilter(setting, nodes[i][childKey], filter, isSingle, invokeParam);\n\t\t\t\tif (isSingle && !!tmpResult) {return tmpResult;}\n\t\t\t\tresult = isSingle ? tmpResult : result.concat(tmpResult);\n\t\t\t}\n\t\t\treturn result;\n\t\t},\n\t\tgetPreNode: function(setting, node) {\n\t\t\tif (!node) return null;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tp = node.parentTId ? node.getParentNode() : data.getRoot(setting);\n\t\t\tfor (var i=0, l=p[childKey].length; i<l; i++) {\n\t\t\t\tif (p[childKey][i] === node) {\n\t\t\t\t\treturn (i==0 ? null : p[childKey][i-1]);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetRoot: function(setting) {\n\t\t\treturn setting ? roots[setting.treeId] : null;\n\t\t},\n\t\tgetRoots: function() {\n\t\t\treturn roots;\n\t\t},\n\t\tgetSetting: function(treeId) {\n\t\t\treturn settings[treeId];\n\t\t},\n\t\tgetSettings: function() {\n\t\t\treturn settings;\n\t\t},\n\t\tgetZTreeTools: function(treeId) {\n\t\t\tvar r = this.getRoot(this.getSetting(treeId));\n\t\t\treturn r ? r.treeTools : null;\n\t\t},\n\t\tinitCache: function(setting) {\n\t\t\tfor (var i=0, j=_init.caches.length; i<j; i++) {\n\t\t\t\t_init.caches[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitNode: function(setting, level, node, parentNode, preNode, nextNode) {\n\t\t\tfor (var i=0, j=_init.nodes.length; i<j; i++) {\n\t\t\t\t_init.nodes[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tinitRoot: function(setting) {\n\t\t\tfor (var i=0, j=_init.roots.length; i<j; i++) {\n\t\t\t\t_init.roots[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tisSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i]) return true;\n\t\t\t}\n\t\t\treturn false;\n\t\t},\n\t\tremoveNodeCache: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i=0, l=node[childKey].length; i<l; i++) {\n\t\t\t\t\targuments.callee(setting, node[childKey][i]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getCache(setting).nodes[data.getNodeCacheId(node.tId)] = null;\n\t\t},\n\t\tremoveSelectedNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tfor (var i=0, j=root.curSelectedList.length; i<j; i++) {\n\t\t\t\tif(node === root.curSelectedList[i] || !data.getNodeCache(setting, root.curSelectedList[i].tId)) {\n\t\t\t\t\troot.curSelectedList.splice(i, 1);\n\t\t\t\t\ti--;j--;\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetCache: function(setting, cache) {\n\t\t\tcaches[setting.treeId] = cache;\n\t\t},\n\t\tsetRoot: function(setting, root) {\n\t\t\troots[setting.treeId] = root;\n\t\t},\n\t\tsetZTreeTools: function(setting, zTreeTools) {\n\t\t\tfor (var i=0, j=_init.zTreeTools.length; i<j; i++) {\n\t\t\t\t_init.zTreeTools[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\ttransformToArrayFormat: function (setting, nodes) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tr = [];\n\t\t\tif (tools.isArray(nodes)) {\n\t\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\tr.push(nodes[i]);\n\t\t\t\t\tif (nodes[i][childKey])\n\t\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[i][childKey]));\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tr.push(nodes);\n\t\t\t\tif (nodes[childKey])\n\t\t\t\t\tr = r.concat(data.transformToArrayFormat(setting, nodes[childKey]));\n\t\t\t}\n\t\t\treturn r;\n\t\t},\n\t\ttransformTozTreeFormat: function(setting, sNodes) {\n\t\t\tvar i,l,\n\t\t\tkey = setting.data.simpleData.idKey,\n\t\t\tparentKey = setting.data.simpleData.pIdKey,\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (!key || key==\"\" || !sNodes) return [];\n\n\t\t\tif (tools.isArray(sNodes)) {\n\t\t\t\tvar r = [];\n\t\t\t\tvar tmpMap = [];\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\ttmpMap[sNodes[i][key]] = sNodes[i];\n\t\t\t\t}\n\t\t\t\tfor (i=0, l=sNodes.length; i<l; i++) {\n\t\t\t\t\tif (tmpMap[sNodes[i][parentKey]] && sNodes[i][key] != sNodes[i][parentKey]) {\n\t\t\t\t\t\tif (!tmpMap[sNodes[i][parentKey]][childKey])\n\t\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey] = [];\n\t\t\t\t\t\ttmpMap[sNodes[i][parentKey]][childKey].push(sNodes[i]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tr.push(sNodes[i]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn r;\n\t\t\t}else {\n\t\t\t\treturn [sNodes];\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\tevent = {\n\t\tbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.bind.length; i<j; i++) {\n\t\t\t\t_init.bind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tunbindEvent: function(setting) {\n\t\t\tfor (var i=0, j=_init.unbind.length; i<j; i++) {\n\t\t\t\t_init.unbind[i].apply(this, arguments);\n\t\t\t}\n\t\t},\n\t\tbindTree: function(setting) {\n\t\t\tvar eventParam = {\n\t\t\t\ttreeId: setting.treeId\n\t\t\t},\n\t\t\to = setting.treeObj;\n\t\t\tif (!setting.view.txtSelectedEnable) {\n\t\t\t\t// for can't select text\n\t\t\t\to.bind('selectstart', function(e){\n\t\t\t\t\tvar node\n\t\t\t\t\tvar n = e.originalEvent.srcElement.nodeName.toLowerCase();\n\t\t\t\t\treturn (n === \"input\" || n === \"textarea\" );\n\t\t\t\t}).css({\n\t\t\t\t\t\"-moz-user-select\":\"-moz-none\"\n\t\t\t\t});\n\t\t\t}\n\t\t\to.bind('click', eventParam, event.proxy);\n\t\t\to.bind('dblclick', eventParam, event.proxy);\n\t\t\to.bind('mouseover', eventParam, event.proxy);\n\t\t\to.bind('mouseout', eventParam, event.proxy);\n\t\t\to.bind('mousedown', eventParam, event.proxy);\n\t\t\to.bind('mouseup', eventParam, event.proxy);\n\t\t\to.bind('contextmenu', eventParam, event.proxy);\n\t\t},\n\t\tunbindTree: function(setting) {\n\t\t\tvar o = setting.treeObj;\n\t\t\to.unbind('click', event.proxy)\n\t\t\t.unbind('dblclick', event.proxy)\n\t\t\t.unbind('mouseover', event.proxy)\n\t\t\t.unbind('mouseout', event.proxy)\n\t\t\t.unbind('mousedown', event.proxy)\n\t\t\t.unbind('mouseup', event.proxy)\n\t\t\t.unbind('contextmenu', event.proxy);\n\t\t},\n\t\tdoProxy: function(e) {\n\t\t\tvar results = [];\n\t\t\tfor (var i=0, j=_init.proxys.length; i<j; i++) {\n\t\t\t\tvar proxyResult = _init.proxys[i].apply(this, arguments);\n\t\t\t\tresults.push(proxyResult);\n\t\t\t\tif (proxyResult.stop) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tproxy: function(e) {\n\t\t\tvar setting = data.getSetting(e.data.treeId);\n\t\t\tif (!tools.uCanDo(setting, e)) return true;\n\t\t\tvar results = event.doProxy(e),\n\t\t\tr = true, x = false;\n\t\t\tfor (var i=0, l=results.length; i<l; i++) {\n\t\t\t\tvar proxyResult = results[i];\n\t\t\t\tif (proxyResult.nodeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.nodeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t\tif (proxyResult.treeEventCallback) {\n\t\t\t\t\tx = true;\n\t\t\t\t\tr = proxyResult.treeEventCallback.apply(proxyResult, [e, proxyResult.node]) && r;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn r;\n\t\t}\n\t},\n\t//method of event handler\n\thandler = {\n\t\tonSwitchNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (node.open) {\n\t\t\t\tif (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t} else {\n\t\t\t\tif (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false) return true;\n\t\t\t\tdata.getRoot(setting).expandTriggerFlag = true;\n\t\t\t\tview.switchNode(setting, node);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonClickNode: function (event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tclickFlag = ( (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey)) && data.isSelectedNode(setting, node)) ? 0 : (setting.view.autoCancelSelected && (event.ctrlKey || event.metaKey) && setting.view.selectedMulti) ? 2 : 1;\n\t\t\tif (tools.apply(setting.callback.beforeClick, [setting.treeId, node, clickFlag], true) == false) return true;\n\t\t\tif (clickFlag === 0) {\n\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t} else {\n\t\t\t\tview.selectNode(setting, node, clickFlag === 2);\n\t\t\t}\n\t\t\tsetting.treeObj.trigger(consts.event.CLICK, [event, setting.treeId, node, clickFlag]);\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMousedown: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseDown, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseDown, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeMouseup: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeMouseUp, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onMouseUp, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeDblclick: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeDblClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onDblClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn true;\n\t\t},\n\t\tonZTreeContextmenu: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId);\n\t\t\tif (tools.apply(setting.callback.beforeRightClick, [setting.treeId, node], true)) {\n\t\t\t\ttools.apply(setting.callback.onRightClick, [event, setting.treeId, node]);\n\t\t\t}\n\t\t\treturn (typeof setting.callback.onRightClick) != \"function\";\n\t\t}\n\t},\n\t//method of tools for zTree\n\ttools = {\n\t\tapply: function(fun, param, defaultValue) {\n\t\t\tif ((typeof fun) == \"function\") {\n\t\t\t\treturn fun.apply(zt, param?param:[]);\n\t\t\t}\n\t\t\treturn defaultValue;\n\t\t},\n\t\tcanAsync: function(setting, node) {\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\treturn (setting.async.enable && node && node.isParent && !(node.zAsync || (node[childKey] && node[childKey].length > 0)));\n\t\t},\n\t\tclone: function (obj){\n\t\t\tif (obj === null) return null;\n\t\t\tvar o = tools.isArray(obj) ? [] : {};\n\t\t\tfor(var i in obj){\n\t\t\t\to[i] = (obj[i] instanceof Date) ? new Date(obj[i].getTime()) : (typeof obj[i] === \"object\" ? arguments.callee(obj[i]) : obj[i]);\n\t\t\t}\n\t\t\treturn o;\n\t\t},\n\t\teqs: function(str1, str2) {\n\t\t\treturn str1.toLowerCase() === str2.toLowerCase();\n\t\t},\n\t\tisArray: function(arr) {\n\t\t\treturn Object.prototype.toString.apply(arr) === \"[object Array]\";\n\t\t},\n\t\t$: function(node, exp, setting) {\n\t\t\tif (!!exp && typeof exp != \"string\") {\n\t\t\t\tsetting = exp;\n\t\t\t\texp = \"\";\n\t\t\t}\n\t\t\tif (typeof node == \"string\") {\n\t\t\t\treturn $(node, setting ? setting.treeObj.get(0).ownerDocument : null);\n\t\t\t} else {\n\t\t\t\treturn $(\"#\" + node.tId + exp, setting ? setting.treeObj : null);\n\t\t\t}\n\t\t},\n\t\tgetMDom: function (setting, curDom, targetExpr) {\n\t\t\tif (!curDom) return null;\n\t\t\twhile (curDom && curDom.id !== setting.treeId) {\n\t\t\t\tfor (var i=0, l=targetExpr.length; curDom.tagName && i<l; i++) {\n\t\t\t\t\tif (tools.eqs(curDom.tagName, targetExpr[i].tagName) && curDom.getAttribute(targetExpr[i].attrName) !== null) {\n\t\t\t\t\t\treturn curDom;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tcurDom = curDom.parentNode;\n\t\t\t}\n\t\t\treturn null;\n\t\t},\n\t\tgetNodeMainDom:function(target) {\n\t\t\treturn ($(target).parent(\"li\").get(0) || $(target).parentsUntil(\"li\").parent().get(0));\n\t\t},\n\t\tisChildOrSelf: function(dom, parentId) {\n\t\t\treturn ( $(dom).closest(\"#\" + parentId).length> 0 );\n\t\t},\n\t\tuCanDo: function(setting, e) {\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of operate ztree dom\n\tview = {\n\t\taddNodes: function(setting, parentNode, newNodes, isSilent) {\n\t\t\tif (setting.data.keep.leaf && parentNode && !parentNode.isParent) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.isArray(newNodes)) {\n\t\t\t\tnewNodes = [newNodes];\n\t\t\t}\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\tnewNodes = data.transformTozTreeFormat(setting, newNodes);\n\t\t\t}\n\t\t\tif (parentNode) {\n\t\t\t\tvar target_switchObj = $$(parentNode, consts.id.SWITCH, setting),\n\t\t\t\ttarget_icoObj = $$(parentNode, consts.id.ICON, setting),\n\t\t\t\ttarget_ulObj = $$(parentNode, consts.id.UL, setting);\n\n\t\t\t\tif (!parentNode.open) {\n\t\t\t\t\tview.replaceSwitchClass(parentNode, target_switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(parentNode, target_icoObj, consts.folder.CLOSE);\n\t\t\t\t\tparentNode.open = false;\n\t\t\t\t\ttarget_ulObj.css({\n\t\t\t\t\t\t\"display\": \"none\"\n\t\t\t\t\t});\n\t\t\t\t}\n\n\t\t\t\tdata.addNodesData(setting, parentNode, newNodes);\n\t\t\t\tview.createNodes(setting, parentNode.level + 1, newNodes, parentNode);\n\t\t\t\tif (!isSilent) {\n\t\t\t\t\tview.expandCollapseParentNode(setting, parentNode, true);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tdata.addNodesData(setting, data.getRoot(setting), newNodes);\n\t\t\t\tview.createNodes(setting, 0, newNodes, null);\n\t\t\t}\n\t\t},\n\t\tappendNodes: function(setting, level, nodes, parentNode, initFlag, openFlag) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar html = [],\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tvar node = nodes[i];\n\t\t\t\tif (initFlag) {\n\t\t\t\t\tvar tmpPNode = (parentNode) ? parentNode: data.getRoot(setting),\n\t\t\t\t\ttmpPChild = tmpPNode[childKey],\n\t\t\t\t\tisFirstNode = ((tmpPChild.length == nodes.length) && (i == 0)),\n\t\t\t\t\tisLastNode = (i == (nodes.length - 1));\n\t\t\t\t\tdata.initNode(setting, level, node, parentNode, isFirstNode, isLastNode, openFlag);\n\t\t\t\t\tdata.addNodeCache(setting, node);\n\t\t\t\t}\n\n\t\t\t\tvar childHtml = [];\n\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t//make child html first, because checkType\n\t\t\t\t\tchildHtml = view.appendNodes(setting, level + 1, node[childKey], node, initFlag, openFlag && node.open);\n\t\t\t\t}\n\t\t\t\tif (openFlag) {\n\n\t\t\t\t\tview.makeDOMNodeMainBefore(html, setting, node);\n\t\t\t\t\tview.makeDOMNodeLine(html, setting, node);\n\t\t\t\t\tdata.getBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameBefore(html, setting, node);\n\t\t\t\t\tdata.getInnerBeforeA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeIcon(html, setting, node);\n\t\t\t\t\tdata.getInnerAfterA(setting, node, html);\n\t\t\t\t\tview.makeDOMNodeNameAfter(html, setting, node);\n\t\t\t\t\tdata.getAfterA(setting, node, html);\n\t\t\t\t\tif (node.isParent && node.open) {\n\t\t\t\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\t\t\t}\n\t\t\t\t\tview.makeDOMNodeMainAfter(html, setting, node);\n\t\t\t\t\tdata.addCreatedNode(setting, node);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn html;\n\t\t},\n\t\tappendParentULDom: function(setting, node) {\n\t\t\tvar html = [],\n\t\t\tnObj = $$(node, setting);\n\t\t\tif (!nObj.get(0) && !!node.parentTId) {\n\t\t\t\tview.appendParentULDom(setting, node.getParentNode());\n\t\t\t\tnObj = $$(node, setting);\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting);\n\t\t\tif (ulObj.get(0)) {\n\t\t\t\tulObj.remove();\n\t\t\t}\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tchildHtml = view.appendNodes(setting, node.level+1, node[childKey], node, false, true);\n\t\t\tview.makeUlHtml(setting, node, html, childHtml.join(''));\n\t\t\tnObj.append(html.join(''));\n\t\t},\n\t\tasyncNode: function(setting, node, isSilent, callback) {\n\t\t\tvar i, l;\n\t\t\tif (node && !node.isParent) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t} else if (node && node.isAjaxing) {\n\t\t\t\treturn false;\n\t\t\t} else if (tools.apply(setting.callback.beforeAsync, [setting.treeId, node], true) == false) {\n\t\t\t\ttools.apply(callback);\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tif (node) {\n\t\t\t\tnode.isAjaxing = true;\n\t\t\t\tvar icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\ticoObj.attr({\"style\":\"\", \"class\":consts.className.BUTTON + \" \" + consts.className.ICO_LOADING});\n\t\t\t}\n\n\t\t\tvar tmpParam = {};\n\t\t\tfor (i = 0, l = setting.async.autoParam.length; node && i < l; i++) {\n\t\t\t\tvar pKey = setting.async.autoParam[i].split(\"=\"), spKey = pKey;\n\t\t\t\tif (pKey.length>1) {\n\t\t\t\t\tspKey = pKey[1];\n\t\t\t\t\tpKey = pKey[0];\n\t\t\t\t}\n\t\t\t\ttmpParam[spKey] = node[pKey];\n\t\t\t}\n\t\t\tif (tools.isArray(setting.async.otherParam)) {\n\t\t\t\tfor (i = 0, l = setting.async.otherParam.length; i < l; i += 2) {\n\t\t\t\t\ttmpParam[setting.async.otherParam[i]] = setting.async.otherParam[i + 1];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (var p in setting.async.otherParam) {\n\t\t\t\t\ttmpParam[p] = setting.async.otherParam[p];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tvar _tmpV = data.getRoot(setting)._ver;\n\t\t\t$.ajax({\n\t\t\t\tcontentType: setting.async.contentType,\n\t\t\t\ttype: setting.async.type,\n\t\t\t\turl: tools.apply(setting.async.url, [setting.treeId, node], setting.async.url),\n\t\t\t\tdata: tmpParam,\n\t\t\t\tdataType: setting.async.dataType,\n\t\t\t\tsuccess: function(msg) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = [];\n\t\t\t\t\ttry {\n\t\t\t\t\t\tif (!msg || msg.length == 0) {\n\t\t\t\t\t\t\tnewNodes = [];\n\t\t\t\t\t\t} else if (typeof msg == \"string\") {\n\t\t\t\t\t\t\tnewNodes = eval(\"(\" + msg + \")\");\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t\t}\n\t\t\t\t\t} catch(err) {\n\t\t\t\t\t\tnewNodes = msg;\n\t\t\t\t\t}\n\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tnode.isAjaxing = null;\n\t\t\t\t\t\tnode.zAsync = true;\n\t\t\t\t\t}\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tif (newNodes && newNodes !== \"\") {\n\t\t\t\t\t\tnewNodes = tools.apply(setting.async.dataFilter, [setting.treeId, node, newNodes], newNodes);\n\t\t\t\t\t\tview.addNodes(setting, node, !!newNodes ? tools.clone(newNodes) : [], !!isSilent);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tview.addNodes(setting, node, [], !!isSilent);\n\t\t\t\t\t}\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_SUCCESS, [setting.treeId, node, msg]);\n\t\t\t\t\ttools.apply(callback);\n\t\t\t\t},\n\t\t\t\terror: function(XMLHttpRequest, textStatus, errorThrown) {\n\t\t\t\t\tif (_tmpV != data.getRoot(setting)._ver) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tif (node) node.isAjaxing = null;\n\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.ASYNC_ERROR, [setting.treeId, node, XMLHttpRequest, textStatus, errorThrown]);\n\t\t\t\t}\n\t\t\t});\n\t\t\treturn true;\n\t\t},\n\t\tcancelPreSelectedNode: function (setting, node) {\n\t\t\tvar list = data.getRoot(setting).curSelectedList;\n\t\t\tfor (var i=0, j=list.length-1; j>=i; j--) {\n\t\t\t\tif (!node || node === list[j]) {\n\t\t\t\t\t$$(list[j], consts.id.A, setting).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\tif (node) {\n\t\t\t\t\t\tdata.removeSelectedNode(setting, node);\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\tif (!node) data.getRoot(setting).curSelectedList = [];\n\t\t},\n\t\tcreateNodeCallback: function(setting) {\n\t\t\tif (!!setting.callback.onNodeCreated || !!setting.view.addDiyDom) {\n\t\t\t\tvar root = data.getRoot(setting);\n\t\t\t\twhile (root.createdNodes.length>0) {\n\t\t\t\t\tvar node = root.createdNodes.shift();\n\t\t\t\t\ttools.apply(setting.view.addDiyDom, [setting.treeId, node]);\n\t\t\t\t\tif (!!setting.callback.onNodeCreated) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.NODECREATED, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tcreateNodes: function(setting, level, nodes, parentNode) {\n\t\t\tif (!nodes || nodes.length == 0) return;\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\topenFlag = !parentNode || parentNode.open || !!$$(parentNode[childKey][0], setting).get(0);\n\t\t\troot.createdNodes = [];\n\t\t\tvar zTreeHtml = view.appendNodes(setting, level, nodes, parentNode, true, openFlag);\n\t\t\tif (!parentNode) {\n\t\t\t\tsetting.treeObj.append(zTreeHtml.join(''));\n\t\t\t} else {\n\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\tif (ulObj.get(0)) {\n\t\t\t\t\tulObj.append(zTreeHtml.join(''));\n\t\t\t\t}\n\t\t\t}\n\t\t\tview.createNodeCallback(setting);\n\t\t},\n\t\tdestroy: function(setting) {\n\t\t\tif (!setting) return;\n\t\t\tdata.initCache(setting);\n\t\t\tdata.initRoot(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tsetting.treeObj.empty();\n\t\t\tdelete settings[setting.treeId];\n\t\t},\n\t\texpandCollapseNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (!node) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (root.expandTriggerFlag) {\n\t\t\t\tvar _callback = callback;\n\t\t\t\tcallback = function(){\n\t\t\t\t\tif (_callback) _callback();\n\t\t\t\t\tif (node.open) {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.EXPAND, [setting.treeId, node]);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.COLLAPSE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t};\n\t\t\t\troot.expandTriggerFlag = false;\n\t\t\t}\n\t\t\tif (!node.open && node.isParent && ((!$$(node, consts.id.UL, setting).get(0)) || (node[childKey] && node[childKey].length>0 && !$$(node[childKey][0], setting).get(0)))) {\n\t\t\t\tview.appendParentULDom(setting, node);\n\t\t\t\tview.createNodeCallback(setting);\n\t\t\t}\n\t\t\tif (node.open == expandFlag) {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar ulObj = $$(node, consts.id.UL, setting),\n\t\t\tswitchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting);\n\n\t\t\tif (node.isParent) {\n\t\t\t\tnode.open = !node.open;\n\t\t\t\tif (node.iconOpen && node.iconClose) {\n\t\t\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\t\t}\n\n\t\t\t\tif (node.open) {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.OPEN);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.OPEN);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\") {\n\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\t\t\t\tulObj.slideDown(setting.view.expandSpeed, callback);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tulObj.show();\n\t\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(node, switchObj, consts.folder.CLOSE);\n\t\t\t\t\tview.replaceIcoClass(node, icoObj, consts.folder.CLOSE);\n\t\t\t\t\tif (animateFlag == false || setting.view.expandSpeed == \"\" || !(node[childKey] && node[childKey].length > 0)) {\n\t\t\t\t\t\tulObj.hide();\n\t\t\t\t\t\ttools.apply(callback, []);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tulObj.slideUp(setting.view.expandSpeed, callback);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\ttools.apply(callback, []);\n\t\t\t}\n\t\t},\n\t\texpandCollapseParentNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tif (!node) return;\n\t\t\tif (!node.parentTId) {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback);\n\t\t\t\treturn;\n\t\t\t} else {\n\t\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag);\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, animateFlag, callback);\n\t\t\t}\n\t\t},\n\t\texpandCollapseSonNode: function(setting, node, expandFlag, animateFlag, callback) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\ttreeNodes = (node) ? node[childKey]: root[childKey],\n\t\t\tselfAnimateSign = (node) ? false : animateFlag,\n\t\t\texpandTriggerFlag = data.getRoot(setting).expandTriggerFlag;\n\t\t\tdata.getRoot(setting).expandTriggerFlag = false;\n\t\t\tif (treeNodes) {\n\t\t\t\tfor (var i = 0, l = treeNodes.length; i < l; i++) {\n\t\t\t\t\tif (treeNodes[i]) view.expandCollapseSonNode(setting, treeNodes[i], expandFlag, selfAnimateSign);\n\t\t\t\t}\n\t\t\t}\n\t\t\tdata.getRoot(setting).expandTriggerFlag = expandTriggerFlag;\n\t\t\tview.expandCollapseNode(setting, node, expandFlag, animateFlag, callback );\n\t\t},\n\t\tmakeDOMNodeIcon: function(html, setting, node) {\n\t\t\tvar nameStr = data.getNodeName(setting, node),\n\t\t\tname = setting.view.nameIsHTML ? nameStr : nameStr.replace(/&/g,'&amp;').replace(/</g,'&lt;').replace(/>/g,'&gt;');\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.ICON,\n\t\t\t\t\"' title='' treeNode\", consts.id.ICON,\" class='\", view.makeNodeIcoClass(setting, node),\n\t\t\t\t\"' style='\", view.makeNodeIcoStyle(setting, node), \"'></span><span id='\", node.tId, consts.id.SPAN,\n\t\t\t\t\"'>\",name,\"</span>\");\n\t\t},\n\t\tmakeDOMNodeLine: function(html, setting, node) {\n\t\t\thtml.push(\"<span id='\", node.tId, consts.id.SWITCH,\t\"' title='' class='\", view.makeNodeLineClass(setting, node), \"' treeNode\", consts.id.SWITCH,\"></span>\");\n\t\t},\n\t\tmakeDOMNodeMainAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</li>\");\n\t\t},\n\t\tmakeDOMNodeMainBefore: function(html, setting, node) {\n\t\t\thtml.push(\"<li id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level,\"' tabindex='0' hidefocus='true' treenode>\");\n\t\t},\n\t\tmakeDOMNodeNameAfter: function(html, setting, node) {\n\t\t\thtml.push(\"</a>\");\n\t\t},\n\t\tmakeDOMNodeNameBefore: function(html, setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\turl = view.makeNodeUrl(setting, node),\n\t\t\tfontcss = view.makeNodeFontCss(setting, node),\n\t\t\tfontStyle = [];\n\t\t\tfor (var f in fontcss) {\n\t\t\t\tfontStyle.push(f, \":\", fontcss[f], \";\");\n\t\t\t}\n\t\t\thtml.push(\"<a id='\", node.tId, consts.id.A, \"' class='\", consts.className.LEVEL, node.level,\"' treeNode\", consts.id.A,\" onclick=\\\"\", (node.click || ''),\n\t\t\t\t\"\\\" \", ((url != null && url.length > 0) ? \"href='\" + url + \"'\" : \"\"), \" target='\",view.makeNodeTarget(node),\"' style='\", fontStyle.join(''),\n\t\t\t\t\"'\");\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle) && title) {html.push(\"title='\", title.replace(/'/g,\"&#39;\").replace(/</g,'&lt;').replace(/>/g,'&gt;'),\"'\");}\n\t\t\thtml.push(\">\");\n\t\t},\n\t\tmakeNodeFontCss: function(setting, node) {\n\t\t\tvar fontCss = tools.apply(setting.view.fontCss, [setting.treeId, node], setting.view.fontCss);\n\t\t\treturn (fontCss && ((typeof fontCss) != \"function\")) ? fontCss : {};\n\t\t},\n\t\tmakeNodeIcoClass: function(setting, node) {\n\t\t\tvar icoCss = [\"ico\"];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\ticoCss[0] = (node.iconSkin ? node.iconSkin + \"_\" : \"\") + icoCss[0];\n\t\t\t\tif (node.isParent) {\n\t\t\t\t\ticoCss.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t\t} else {\n\t\t\t\t\ticoCss.push(consts.folder.DOCU);\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn consts.className.BUTTON + \" \" + icoCss.join('_');\n\t\t},\n\t\tmakeNodeIcoStyle: function(setting, node) {\n\t\t\tvar icoStyle = [];\n\t\t\tif (!node.isAjaxing) {\n\t\t\t\tvar icon = (node.isParent && node.iconOpen && node.iconClose) ? (node.open ? node.iconOpen : node.iconClose) : node.icon;\n\t\t\t\tif (icon) icoStyle.push(\"background:url(\", icon, \") 0 0 no-repeat;\");\n\t\t\t\tif (setting.view.showIcon == false || !tools.apply(setting.view.showIcon, [setting.treeId, node], true)) {\n\t\t\t\t\ticoStyle.push(\"width:0px;height:0px;\");\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn icoStyle.join('');\n\t\t},\n\t\tmakeNodeLineClass: function(setting, node) {\n\t\t\tvar lineClass = [];\n\t\t\tif (setting.view.showLine) {\n\t\t\t\tif (node.level == 0 && node.isFirstNode && node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOT);\n\t\t\t\t} else if (node.level == 0 && node.isFirstNode) {\n\t\t\t\t\tlineClass.push(consts.line.ROOTS);\n\t\t\t\t} else if (node.isLastNode) {\n\t\t\t\t\tlineClass.push(consts.line.BOTTOM);\n\t\t\t\t} else {\n\t\t\t\t\tlineClass.push(consts.line.CENTER);\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.line.NOLINE);\n\t\t\t}\n\t\t\tif (node.isParent) {\n\t\t\t\tlineClass.push(node.open ? consts.folder.OPEN : consts.folder.CLOSE);\n\t\t\t} else {\n\t\t\t\tlineClass.push(consts.folder.DOCU);\n\t\t\t}\n\t\t\treturn view.makeNodeLineClassEx(node) + lineClass.join('_');\n\t\t},\n\t\tmakeNodeLineClassEx: function(node) {\n\t\t\treturn consts.className.BUTTON + \" \" + consts.className.LEVEL + node.level + \" \" + consts.className.SWITCH + \" \";\n\t\t},\n\t\tmakeNodeTarget: function(node) {\n\t\t\treturn (node.target || \"_blank\");\n\t\t},\n\t\tmakeNodeUrl: function(setting, node) {\n\t\t\tvar urlKey = setting.data.key.url;\n\t\t\treturn node[urlKey] ? node[urlKey] : null;\n\t\t},\n\t\tmakeUlHtml: function(setting, node, html, content) {\n\t\t\thtml.push(\"<ul id='\", node.tId, consts.id.UL, \"' class='\", consts.className.LEVEL, node.level, \" \", view.makeUlLineClass(setting, node), \"' style='display:\", (node.open ? \"block\": \"none\"),\"'>\");\n\t\t\thtml.push(content);\n\t\t\thtml.push(\"</ul>\");\n\t\t},\n\t\tmakeUlLineClass: function(setting, node) {\n\t\t\treturn ((setting.view.showLine && !node.isLastNode) ? consts.line.LINE : \"\");\n\t\t},\n\t\tremoveChildNodes: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tnodes = node[childKey];\n\t\t\tif (!nodes) return;\n\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tdata.removeNodeCache(setting, nodes[i]);\n\t\t\t}\n\t\t\tdata.removeSelectedNode(setting);\n\t\t\tdelete node[childKey];\n\n\t\t\tif (!setting.data.keep.parent) {\n\t\t\t\tnode.isParent = false;\n\t\t\t\tnode.open = false;\n\t\t\t\tvar tmp_switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(node, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(node, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(node, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\t$$(node, consts.id.UL, setting).remove();\n\t\t\t} else {\n\t\t\t\t$$(node, consts.id.UL, setting).empty();\n\t\t\t}\n\t\t},\n\t\tsetFirstNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][0].isFirstNode = true;\n\t\t\t}\n\t\t},\n\t\tsetLastNode: function(setting, parentNode) {\n\t\t\tvar childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t\t\tif ( childLength > 0) {\n\t\t\t\tparentNode[childKey][childLength - 1].isLastNode = true;\n\t\t\t}\n\t\t},\n\t\tremoveNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : root;\n\n\t\t\tnode.isFirstNode = false;\n\t\t\tnode.isLastNode = false;\n\t\t\tnode.getPreNode = function() {return null;};\n\t\t\tnode.getNextNode = function() {return null;};\n\n\t\t\tif (!data.getNodeCache(setting, node.tId)) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$$(node, setting).remove();\n\t\t\tdata.removeNodeCache(setting, node);\n\t\t\tdata.removeSelectedNode(setting, node);\n\n\t\t\tfor (var i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\tif (parentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\tparentNode[childKey].splice(i, 1);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\tview.setFirstNode(setting, parentNode);\n\t\t\tview.setLastNode(setting, parentNode);\n\n\t\t\tvar tmp_ulObj,tmp_switchObj,tmp_icoObj,\n\t\t\tchildLength = parentNode[childKey].length;\n\n\t\t\t//repair nodes old parent\n\t\t\tif (!setting.data.keep.parent && childLength == 0) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\tparentNode.isParent = false;\n\t\t\t\tparentNode.open = false;\n\t\t\t\ttmp_ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(parentNode, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(parentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(parentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(parentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (setting.view.showLine && childLength > 0) {\n\t\t\t\t//old parentNode has child nodes\n\t\t\t\tvar newLast = parentNode[childKey][childLength - 1];\n\t\t\t\ttmp_ulObj = $$(newLast, consts.id.UL, setting);\n\t\t\t\ttmp_switchObj = $$(newLast, consts.id.SWITCH, setting);\n\t\t\t\ttmp_icoObj = $$(newLast, consts.id.ICON, setting);\n\t\t\t\tif (parentNode == root) {\n\t\t\t\t\tif (parentNode[childKey].length == 1) {\n\t\t\t\t\t\t//node was root, and ztree has only one root after move node\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.ROOT);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar tmp_first_switchObj = $$(parentNode[childKey][0], consts.id.SWITCH, setting);\n\t\t\t\t\t\tview.replaceSwitchClass(parentNode[childKey][0], tmp_first_switchObj, consts.line.ROOTS);\n\t\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tview.replaceSwitchClass(newLast, tmp_switchObj, consts.line.BOTTOM);\n\t\t\t\t}\n\t\t\t\ttmp_ulObj.removeClass(consts.line.LINE);\n\t\t\t}\n\t\t},\n\t\treplaceIcoClass: function(node, obj, newName) {\n\t\t\tif (!obj || node.isAjaxing) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[tmpList.length-1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t},\n\t\treplaceSwitchClass: function(node, obj, newName) {\n\t\t\tif (!obj) return;\n\t\t\tvar tmpName = obj.attr(\"class\");\n\t\t\tif (tmpName == undefined) return;\n\t\t\tvar tmpList = tmpName.split(\"_\");\n\t\t\tswitch (newName) {\n\t\t\t\tcase consts.line.ROOT:\n\t\t\t\tcase consts.line.ROOTS:\n\t\t\t\tcase consts.line.CENTER:\n\t\t\t\tcase consts.line.BOTTOM:\n\t\t\t\tcase consts.line.NOLINE:\n\t\t\t\t\ttmpList[0] = view.makeNodeLineClassEx(node) + newName;\n\t\t\t\t\tbreak;\n\t\t\t\tcase consts.folder.OPEN:\n\t\t\t\tcase consts.folder.CLOSE:\n\t\t\t\tcase consts.folder.DOCU:\n\t\t\t\t\ttmpList[1] = newName;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tobj.attr(\"class\", tmpList.join(\"_\"));\n\t\t\tif (newName !== consts.folder.DOCU) {\n\t\t\t\tobj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tobj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t},\n\t\tselectNode: function(setting, node, addFlag) {\n\t\t\tif (!addFlag) {\n\t\t\t\tview.cancelPreSelectedNode(setting);\n\t\t\t}\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED);\n\t\t\tdata.addSelectedNode(setting, node);\n\t\t},\n\t\tsetNodeFontCss: function(setting, treeNode) {\n\t\t\tvar aObj = $$(treeNode, consts.id.A, setting),\n\t\t\tfontCss = view.makeNodeFontCss(setting, treeNode);\n\t\t\tif (fontCss) {\n\t\t\t\taObj.css(fontCss);\n\t\t\t}\n\t\t},\n\t\tsetNodeLineIcos: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar switchObj = $$(node, consts.id.SWITCH, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\ticoObj = $$(node, consts.id.ICON, setting),\n\t\t\tulLine = view.makeUlLineClass(setting, node);\n\t\t\tif (ulLine.length==0) {\n\t\t\t\tulObj.removeClass(consts.line.LINE);\n\t\t\t} else {\n\t\t\t\tulObj.addClass(ulLine);\n\t\t\t}\n\t\t\tswitchObj.attr(\"class\", view.makeNodeLineClass(setting, node));\n\t\t\tif (node.isParent) {\n\t\t\t\tswitchObj.removeAttr(\"disabled\");\n\t\t\t} else {\n\t\t\t\tswitchObj.attr(\"disabled\", \"disabled\");\n\t\t\t}\n\t\t\ticoObj.removeAttr(\"style\");\n\t\t\ticoObj.attr(\"style\", view.makeNodeIcoStyle(setting, node));\n\t\t\ticoObj.attr(\"class\", view.makeNodeIcoClass(setting, node));\n\t\t},\n\t\tsetNodeName: function(setting, node) {\n\t\t\tvar title = data.getNodeTitle(setting, node),\n\t\t\tnObj = $$(node, consts.id.SPAN, setting);\n\t\t\tnObj.empty();\n\t\t\tif (setting.view.nameIsHTML) {\n\t\t\t\tnObj.html(data.getNodeName(setting, node));\n\t\t\t} else {\n\t\t\t\tnObj.text(data.getNodeName(setting, node));\n\t\t\t}\n\t\t\tif (tools.apply(setting.view.showTitle, [setting.treeId, node], setting.view.showTitle)) {\n\t\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.attr(\"title\", !title ? \"\" : title);\n\t\t\t}\n\t\t},\n\t\tsetNodeTarget: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\taObj.attr(\"target\", view.makeNodeTarget(node));\n\t\t},\n\t\tsetNodeUrl: function(setting, node) {\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\turl = view.makeNodeUrl(setting, node);\n\t\t\tif (url == null || url.length == 0) {\n\t\t\t\taObj.removeAttr(\"href\");\n\t\t\t} else {\n\t\t\t\taObj.attr(\"href\", url);\n\t\t\t}\n\t\t},\n\t\tswitchNode: function(setting, node) {\n\t\t\tif (node.open || !tools.canAsync(setting, node)) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t} else if (setting.async.enable) {\n\t\t\t\tif (!view.asyncNode(setting, node)) {\n\t\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else if (node) {\n\t\t\t\tview.expandCollapseNode(setting, node, !node.open);\n\t\t\t}\n\t\t}\n\t};\n\t// zTree defind\n\t$.fn.zTree = {\n\t\tconsts : _consts,\n\t\t_z : {\n\t\t\ttools: tools,\n\t\t\tview: view,\n\t\t\tevent: event,\n\t\t\tdata: data\n\t\t},\n\t\tgetZTreeObj: function(treeId) {\n\t\t\tvar o = data.getZTreeTools(treeId);\n\t\t\treturn o ? o : null;\n\t\t},\n\t\tdestroy: function(treeId) {\n\t\t\tif (!!treeId && treeId.length > 0) {\n\t\t\t\tview.destroy(data.getSetting(treeId));\n\t\t\t} else {\n\t\t\t\tfor(var s in settings) {\n\t\t\t\t\tview.destroy(settings[s]);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tinit: function(obj, zSetting, zNodes) {\n\t\t\tvar setting = tools.clone(_setting);\n\t\t\t$.extend(true, setting, zSetting);\n\t\t\tsetting.treeId = obj.attr(\"id\");\n\t\t\tsetting.treeObj = obj;\n\t\t\tsetting.treeObj.empty();\n\t\t\tsettings[setting.treeId] = setting;\n\t\t\t//For some older browser,(e.g., ie6)\n\t\t\tif(typeof document.body.style.maxHeight === \"undefined\") {\n\t\t\t\tsetting.view.expandSpeed = \"\";\n\t\t\t}\n\t\t\tdata.initRoot(setting);\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tzNodes = zNodes ? tools.clone(tools.isArray(zNodes)? zNodes : [zNodes]) : [];\n\t\t\tif (setting.data.simpleData.enable) {\n\t\t\t\troot[childKey] = data.transformTozTreeFormat(setting, zNodes);\n\t\t\t} else {\n\t\t\t\troot[childKey] = zNodes;\n\t\t\t}\n\n\t\t\tdata.initCache(setting);\n\t\t\tevent.unbindTree(setting);\n\t\t\tevent.bindTree(setting);\n\t\t\tevent.unbindEvent(setting);\n\t\t\tevent.bindEvent(setting);\n\n\t\t\tvar zTreeTools = {\n\t\t\t\tsetting : setting,\n\t\t\t\taddNodes : function(parentNode, newNodes, isSilent) {\n\t\t\t\t\tif (!newNodes) return null;\n\t\t\t\t\tif (!parentNode) parentNode = null;\n\t\t\t\t\tif (parentNode && !parentNode.isParent && setting.data.keep.leaf) return null;\n\t\t\t\t\tvar xNewNodes = tools.clone(tools.isArray(newNodes)? newNodes: [newNodes]);\n\t\t\t\t\tfunction addCallback() {\n\t\t\t\t\t\tview.addNodes(setting, parentNode, xNewNodes, (isSilent==true));\n\t\t\t\t\t}\n\n\t\t\t\t\tif (tools.canAsync(setting, parentNode)) {\n\t\t\t\t\t\tview.asyncNode(setting, parentNode, isSilent, addCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\taddCallback();\n\t\t\t\t\t}\n\t\t\t\t\treturn xNewNodes;\n\t\t\t\t},\n\t\t\t\tcancelSelectedNode : function(node) {\n\t\t\t\t\tview.cancelPreSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\tdestroy : function() {\n\t\t\t\t\tview.destroy(setting);\n\t\t\t\t},\n\t\t\t\texpandAll : function(expandFlag) {\n\t\t\t\t\texpandFlag = !!expandFlag;\n\t\t\t\t\tview.expandCollapseSonNode(setting, null, expandFlag, true);\n\t\t\t\t\treturn expandFlag;\n\t\t\t\t},\n\t\t\t\texpandNode : function(node, expandFlag, sonSign, focus, callbackFlag) {\n\t\t\t\t\tif (!node || !node.isParent) return null;\n\t\t\t\t\tif (expandFlag !== true && expandFlag !== false) {\n\t\t\t\t\t\texpandFlag = !node.open;\n\t\t\t\t\t}\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\t\t\tif (callbackFlag && expandFlag && (tools.apply(setting.callback.beforeExpand, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t} else if (callbackFlag && !expandFlag && (tools.apply(setting.callback.beforeCollapse, [setting.treeId, node], true) == false)) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag && node.parentTId) {\n\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), expandFlag, false);\n\t\t\t\t\t}\n\t\t\t\t\tif (expandFlag === node.open && !sonSign) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\n\t\t\t\t\tdata.getRoot(setting).expandTriggerFlag = callbackFlag;\n\t\t\t\t\tif (!tools.canAsync(setting, node) && sonSign) {\n\t\t\t\t\t\tview.expandCollapseSonNode(setting, node, expandFlag, true, function() {\n\t\t\t\t\t\t\tif (focus !== false) {try{$$(node, setting).focus().blur();}catch(e){}}\n\t\t\t\t\t\t});\n\t\t\t\t\t} else {\n\t\t\t\t\t\tnode.open = !expandFlag;\n\t\t\t\t\t\tview.switchNode(this.setting, node);\n\t\t\t\t\t\tif (focus !== false) {try{$$(node, setting).focus().blur();}catch(e){}}\n\t\t\t\t\t}\n\t\t\t\t\treturn expandFlag;\n\t\t\t\t},\n\t\t\t\tgetNodes : function() {\n\t\t\t\t\treturn data.getNodes(setting);\n\t\t\t\t},\n\t\t\t\tgetNodeByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodeByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodeByTId : function(tId) {\n\t\t\t\t\treturn data.getNodeCache(setting, tId);\n\t\t\t\t},\n\t\t\t\tgetNodesByParam : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParam(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByParamFuzzy : function(key, value, parentNode) {\n\t\t\t\t\tif (!key) return null;\n\t\t\t\t\treturn data.getNodesByParamFuzzy(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), key, value);\n\t\t\t\t},\n\t\t\t\tgetNodesByFilter: function(filter, isSingle, parentNode, invokeParam) {\n\t\t\t\t\tisSingle = !!isSingle;\n\t\t\t\t\tif (!filter || (typeof filter != \"function\")) return (isSingle ? null : []);\n\t\t\t\t\treturn data.getNodesByFilter(setting, parentNode?parentNode[setting.data.key.children]:data.getNodes(setting), filter, isSingle, invokeParam);\n\t\t\t\t},\n\t\t\t\tgetNodeIndex : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tparentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\tfor (var i=0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\tif (parentNode[childKey][i] == node) return i;\n\t\t\t\t\t}\n\t\t\t\t\treturn -1;\n\t\t\t\t},\n\t\t\t\tgetSelectedNodes : function() {\n\t\t\t\t\tvar r = [], list = data.getRoot(setting).curSelectedList;\n\t\t\t\t\tfor (var i=0, l=list.length; i<l; i++) {\n\t\t\t\t\t\tr.push(list[i]);\n\t\t\t\t\t}\n\t\t\t\t\treturn r;\n\t\t\t\t},\n\t\t\t\tisSelectedNode : function(node) {\n\t\t\t\t\treturn data.isSelectedNode(setting, node);\n\t\t\t\t},\n\t\t\t\treAsyncChildNodes : function(parentNode, reloadType, isSilent) {\n\t\t\t\t\tif (!this.setting.async.enable) return;\n\t\t\t\t\tvar isRoot = !parentNode;\n\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\tparentNode = data.getRoot(setting);\n\t\t\t\t\t}\n\t\t\t\t\tif (reloadType==\"refresh\") {\n\t\t\t\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\t\t\t\tfor (var i = 0, l = parentNode[childKey] ? parentNode[childKey].length : 0; i < l; i++) {\n\t\t\t\t\t\t\tdata.removeNodeCache(setting, parentNode[childKey][i]);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tdata.removeSelectedNode(setting);\n\t\t\t\t\t\tparentNode[childKey] = [];\n\t\t\t\t\t\tif (isRoot) {\n\t\t\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar ulObj = $$(parentNode, consts.id.UL, setting);\n\t\t\t\t\t\t\tulObj.empty();\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tview.asyncNode(this.setting, isRoot? null:parentNode, !!isSilent);\n\t\t\t\t},\n\t\t\t\trefresh : function() {\n\t\t\t\t\tthis.setting.treeObj.empty();\n\t\t\t\t\tvar root = data.getRoot(setting),\n\t\t\t\t\tnodes = root[setting.data.key.children]\n\t\t\t\t\tdata.initRoot(setting);\n\t\t\t\t\troot[setting.data.key.children] = nodes\n\t\t\t\t\tdata.initCache(setting);\n\t\t\t\t\tview.createNodes(setting, 0, root[setting.data.key.children]);\n\t\t\t\t},\n\t\t\t\tremoveChildNodes : function(node) {\n\t\t\t\t\tif (!node) return null;\n\t\t\t\t\tvar childKey = setting.data.key.children,\n\t\t\t\t\tnodes = node[childKey];\n\t\t\t\t\tview.removeChildNodes(setting, node);\n\t\t\t\t\treturn nodes ? nodes : null;\n\t\t\t\t},\n\t\t\t\tremoveNode : function(node, callbackFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tcallbackFlag = !!callbackFlag;\n\t\t\t\t\tif (callbackFlag && tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tif (callbackFlag) {\n\t\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tselectNode : function(node, addFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\t\t\taddFlag = setting.view.selectedMulti && addFlag;\n\t\t\t\t\t\tif (node.parentTId) {\n\t\t\t\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, false, function() {\n\t\t\t\t\t\t\t\ttry{$$(node, setting).focus().blur();}catch(e){}\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttry{$$(node, setting).focus().blur();}catch(e){}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNode(setting, node, addFlag);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\ttransformTozTreeNodes : function(simpleNodes) {\n\t\t\t\t\treturn data.transformTozTreeFormat(setting, simpleNodes);\n\t\t\t\t},\n\t\t\t\ttransformToArray : function(nodes) {\n\t\t\t\t\treturn data.transformToArrayFormat(setting, nodes);\n\t\t\t\t},\n\t\t\t\tupdateNode : function(node, checkTypeFlag) {\n\t\t\t\t\tif (!node) return;\n\t\t\t\t\tvar nObj = $$(node, setting);\n\t\t\t\t\tif (nObj.get(0) && tools.uCanDo(setting)) {\n\t\t\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\t\t\tview.setNodeTarget(setting, node);\n\t\t\t\t\t\tview.setNodeUrl(setting, node);\n\t\t\t\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\t\t\t\tview.setNodeFontCss(setting, node);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\troot.treeTools = zTreeTools;\n\t\t\tdata.setZTreeTools(setting, zTreeTools);\n\n\t\t\tif (root[childKey] && root[childKey].length > 0) {\n\t\t\t\tview.createNodes(setting, 0, root[childKey]);\n\t\t\t} else if (setting.async.enable && setting.async.url && setting.async.url !== '') {\n\t\t\t\tview.asyncNode(setting);\n\t\t\t}\n\t\t\treturn zTreeTools;\n\t\t}\n\t};\n\n\tvar zt = $.fn.zTree,\n\t$$ = tools.$,\n\tconsts = zt.consts;\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/zTree/jquery.ztree.excheck-3.5.js",
    "content": "/*\n * JQuery zTree excheck v3.5.17\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2014-05-08\n */\n(function($){\n\t//default consts of excheck\n\tvar _consts = {\n\t\tevent: {\n\t\t\tCHECK: \"ztree_check\"\n\t\t},\n\t\tid: {\n\t\t\tCHECK: \"_check\"\n\t\t},\n\t\tcheckbox: {\n\t\t\tSTYLE: \"checkbox\",\n\t\t\tDEFAULT: \"chk\",\n\t\t\tDISABLED: \"disable\",\n\t\t\tFALSE: \"false\",\n\t\t\tTRUE: \"true\",\n\t\t\tFULL: \"full\",\n\t\t\tPART: \"part\",\n\t\t\tFOCUS: \"focus\"\n\t\t},\n\t\tradio: {\n\t\t\tSTYLE: \"radio\",\n\t\t\tTYPE_ALL: \"all\",\n\t\t\tTYPE_LEVEL: \"level\"\n\t\t}\n\t},\n\t//default setting of excheck\n\t_setting = {\n\t\tcheck: {\n\t\t\tenable: false,\n\t\t\tautoCheckTrigger: false,\n\t\t\tchkStyle: _consts.checkbox.STYLE,\n\t\t\tnocheckInherit: false,\n\t\t\tchkDisabledInherit: false,\n\t\t\tradioType: _consts.radio.TYPE_LEVEL,\n\t\t\tchkboxType: {\n\t\t\t\t\"Y\": \"ps\",\n\t\t\t\t\"N\": \"ps\"\n\t\t\t}\n\t\t},\n\t\tdata: {\n\t\t\tkey: {\n\t\t\t\tchecked: \"checked\"\n\t\t\t}\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeCheck:null,\n\t\t\tonCheck:null\n\t\t}\n\t},\n\t//default root of excheck\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting);\n\t\tr.radioCheckedList = [];\n\t},\n\t//default cache of excheck\n\t_initCache = function(treeId) {},\n\t//default bind event of excheck\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.bind(c.CHECK, function (event, srcEvent, treeId, node) {\n\t\t\tevent.srcEvent = srcEvent;\n\t\t\ttools.apply(setting.callback.onCheck, [event, treeId, node]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj,\n\t\tc = consts.event;\n\t\to.unbind(c.CHECK);\n\t},\n\t//default event proxy of excheck\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoverCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"mouseoutCheck\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"click\")) {\n\t\t\tif (setting.check.enable && tools.eqs(target.tagName, \"span\") && target.getAttribute(\"treeNode\"+ consts.id.CHECK) !== null) {\n\t\t\t\ttId = tools.getNodeMainDom(target).id;\n\t\t\t\tnodeEventType = \"checkNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"checkNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onCheckNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoverCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoverCheck;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"mouseoutCheck\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMouseoutCheck;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: nodeEventType === \"checkNode\",\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of excheck\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (typeof n[checkedKey] == \"string\") n[checkedKey] = tools.eqs(n[checkedKey], \"true\");\n\t\tn[checkedKey] = !!n[checkedKey];\n\t\tn.checkedOld = n[checkedKey];\n\t\tif (typeof n.nocheck == \"string\") n.nocheck = tools.eqs(n.nocheck, \"true\");\n\t\tn.nocheck = !!n.nocheck || (setting.check.nocheckInherit && parentNode && !!parentNode.nocheck);\n\t\tif (typeof n.chkDisabled == \"string\") n.chkDisabled = tools.eqs(n.chkDisabled, \"true\");\n\t\tn.chkDisabled = !!n.chkDisabled || (setting.check.chkDisabledInherit && parentNode && !!parentNode.chkDisabled);\n\t\tif (typeof n.halfCheck == \"string\") n.halfCheck = tools.eqs(n.halfCheck, \"true\");\n\t\tn.halfCheck = !!n.halfCheck;\n\t\tn.check_Child_State = -1;\n\t\tn.check_Focus = false;\n\t\tn.getCheckStatus = function() {return data.getCheckStatus(setting, n);};\n\n\t\tif (setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL && n[checkedKey] ) {\n\t\t\tvar r = data.getRoot(setting);\n\t\t\tr.radioCheckedList.push(n);\n\t\t}\n\t},\n\t//add dom for check\n\t_beforeA = function(setting, node, html) {\n\t\tvar checkedKey = setting.data.key.checked;\n\t\tif (setting.check.enable) {\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\thtml.push(\"<span ID='\", node.tId, consts.id.CHECK, \"' class='\", view.makeChkClass(setting, node), \"' treeNode\", consts.id.CHECK, (node.nocheck === true?\" style='display:none;'\":\"\"),\"></span>\");\n\t\t}\n\t},\n\t//update zTreeObj, add method of check\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.checkNode = function(node, checked, checkTypeFlag, callbackFlag) {\n\t\t\tvar checkedKey = this.setting.data.key.checked;\n\t\t\tif (node.chkDisabled === true) return;\n\t\t\tif (checked !== true && checked !== false) {\n\t\t\t\tchecked = !node[checkedKey];\n\t\t\t}\n\t\t\tcallbackFlag = !!callbackFlag;\n\n\t\t\tif (node[checkedKey] === checked && !checkTypeFlag) {\n\t\t\t\treturn;\n\t\t\t} else if (callbackFlag && tools.apply(this.setting.callback.beforeCheck, [this.setting.treeId, node], true) == false) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (tools.uCanDo(this.setting) && this.setting.check.enable && node.nocheck !== true) {\n\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t\tif (callbackFlag) {\n\t\t\t\t\tthis.setting.treeObj.trigger(consts.event.CHECK, [null, this.setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tzTreeTools.checkAllNodes = function(checked) {\n\t\t\tview.repairAllChk(this.setting, !!checked);\n\t\t}\n\n\t\tzTreeTools.getCheckedNodes = function(checked) {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\tchecked = (checked !== false);\n\t\t\treturn data.getTreeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey], checked);\n\t\t}\n\n\t\tzTreeTools.getChangeCheckedNodes = function() {\n\t\t\tvar childKey = this.setting.data.key.children;\n\t\t\treturn data.getTreeChangeCheckedNodes(this.setting, data.getRoot(this.setting)[childKey]);\n\t\t}\n\n\t\tzTreeTools.setChkDisabled = function(node, disabled, inheritParent, inheritChildren) {\n\t\t\tdisabled = !!disabled;\n\t\t\tinheritParent = !!inheritParent;\n\t\t\tinheritChildren = !!inheritChildren;\n\t\t\tview.repairSonChkDisabled(this.setting, node, disabled, inheritChildren);\n\t\t\tview.repairParentChkDisabled(this.setting, node.getParentNode(), disabled, inheritParent);\n\t\t}\n\n\t\tvar _updateNode = zTreeTools.updateNode;\n\t\tzTreeTools.updateNode = function(node, checkTypeFlag) {\n\t\t\tif (_updateNode) _updateNode.apply(zTreeTools, arguments);\n\t\t\tif (!node || !this.setting.check.enable) return;\n\t\t\tvar nObj = $$(node, this.setting);\n\t\t\tif (nObj.get(0) && tools.uCanDo(this.setting)) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, this.setting);\n\t\t\t\tif (checkTypeFlag == true || this.setting.check.chkStyle === consts.radio.STYLE) view.checkNodeRelation(this.setting, node);\n\t\t\t\tview.setChkClass(this.setting, checkObj, node);\n\t\t\t\tview.repairParentChkClassWithSelf(this.setting, node);\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tgetRadioCheckedList: function(setting) {\n\t\t\tvar checkedList = data.getRoot(setting).radioCheckedList;\n\t\t\tfor (var i=0, j=checkedList.length; i<j; i++) {\n\t\t\t\tif(!data.getNodeCache(setting, checkedList[i].tId)) {\n\t\t\t\t\tcheckedList.splice(i, 1);\n\t\t\t\t\ti--; j--;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn checkedList;\n\t\t},\n\t\tgetCheckStatus: function(setting, node) {\n\t\t\tif (!setting.check.enable || node.nocheck || node.chkDisabled) return null;\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tr = {\n\t\t\t\tchecked: node[checkedKey],\n\t\t\t\thalf: node.halfCheck ? node.halfCheck : (setting.check.chkStyle == consts.radio.STYLE ? (node.check_Child_State === 2) : (node[checkedKey] ? (node.check_Child_State > -1 && node.check_Child_State < 2) : (node.check_Child_State > 0)))\n\t\t\t};\n\t\t\treturn r;\n\t\t},\n\t\tgetTreeCheckedNodes: function(setting, nodes, checked, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tonlyOne = (checked && setting.check.chkStyle == consts.radio.STYLE && setting.check.radioType == consts.radio.TYPE_ALL);\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] == checked) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t\tif(onlyOne) {\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tdata.getTreeCheckedNodes(setting, nodes[i][childKey], checked, results);\n\t\t\t\tif(onlyOne && results.length > 0) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tgetTreeChangeCheckedNodes: function(setting, nodes, results) {\n\t\t\tif (!nodes) return [];\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tresults = !results ? [] : results;\n\t\t\tfor (var i = 0, l = nodes.length; i < l; i++) {\n\t\t\t\tif (nodes[i].nocheck !== true && nodes[i].chkDisabled !== true && nodes[i][checkedKey] != nodes[i].checkedOld) {\n\t\t\t\t\tresults.push(nodes[i]);\n\t\t\t\t}\n\t\t\t\tdata.getTreeChangeCheckedNodes(setting, nodes[i][childKey], results);\n\t\t\t}\n\t\t\treturn results;\n\t\t},\n\t\tmakeChkFlag: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tchkFlag = -1;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar cNode = node[childKey][i];\n\t\t\t\t\tvar tmp = -1;\n\t\t\t\t\tif (setting.check.chkStyle == consts.radio.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else if (cNode[checkedKey]) {\n\t\t\t\t\t\t\ttmp = 2;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State > 0 ? 2:0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp == 2) {\n\t\t\t\t\t\t\tchkFlag = 2; break;\n\t\t\t\t\t\t} else if (tmp == 0){\n\t\t\t\t\t\t\tchkFlag = 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t} else if (setting.check.chkStyle == consts.checkbox.STYLE) {\n\t\t\t\t\t\tif (cNode.nocheck === true || cNode.chkDisabled === true) {\n\t\t\t\t\t\t\ttmp = cNode.check_Child_State;\n\t\t\t\t\t\t} else if (cNode.halfCheck === true) {\n\t\t\t\t\t\t\ttmp = 1;\n\t\t\t\t\t\t} else if (cNode[checkedKey] ) {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State === -1 || cNode.check_Child_State === 2) ? 2 : 1;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmp = (cNode.check_Child_State > 0) ? 1 : 0;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (tmp === 1) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp === 2 && chkFlag > -1 && i > 0 && tmp !== chkFlag) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (chkFlag === 2 && tmp > -1 && tmp < 2) {\n\t\t\t\t\t\t\tchkFlag = 1; break;\n\t\t\t\t\t\t} else if (tmp > -1) {\n\t\t\t\t\t\t\tchkFlag = tmp;\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\tnode.check_Child_State = chkFlag;\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonCheckNode: function (event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckedKey = setting.data.key.checked;\n\t\t\tif (tools.apply(setting.callback.beforeCheck, [setting.treeId, node], true) == false) return true;\n\t\t\tnode[checkedKey] = !node[checkedKey];\n\t\t\tview.checkNodeRelation(setting, node);\n\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [event, setting.treeId, node]);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoverCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = true;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t},\n\t\tonMouseoutCheck: function(event, node) {\n\t\t\tif (node.chkDisabled === true) return false;\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tnode.check_Focus = false;\n\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\tcheckNodeRelation: function(setting, node) {\n\t\t\tvar pNode, i, l,\n\t\t\tchildKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tr = consts.radio;\n\t\t\tif (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tvar checkedList = data.getRadioCheckedList(setting);\n\t\t\t\tif (node[checkedKey]) {\n\t\t\t\t\tif (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\t\tfor (i = checkedList.length-1; i >= 0; i--) {\n\t\t\t\t\t\t\tpNode = checkedList[i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tcheckedList.splice(i, 1);\n\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\n\t\t\t\t\t\t\t\tif (pNode.parentTId != node.parentTId) {\n\t\t\t\t\t\t\t\t\tview.repairParentChkClassWithSelf(setting, pNode);\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\tcheckedList.push(node);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tvar parentNode = (node.parentTId) ? node.getParentNode() : data.getRoot(setting);\n\t\t\t\t\t\tfor (i = 0, l = parentNode[childKey].length; i < l; i++) {\n\t\t\t\t\t\t\tpNode = parentNode[childKey][i];\n\t\t\t\t\t\t\tif (pNode[checkedKey] && pNode != node) {\n\t\t\t\t\t\t\t\tpNode[checkedKey] = false;\n\t\t\t\t\t\t\t\tview.setChkClass(setting, $$(pNode, consts.id.CHECK, setting), pNode);\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} else if (setting.check.radioType == r.TYPE_ALL) {\n\t\t\t\t\tfor (i = 0, l = checkedList.length; i < l; i++) {\n\t\t\t\t\t\tif (node == checkedList[i]) {\n\t\t\t\t\t\t\tcheckedList.splice(i, 1);\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}\n\n\t\t\t} else {\n\t\t\t\tif (node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.Y.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && (!node[childKey] || node[childKey].length==0 || setting.check.chkboxType.N.indexOf(\"s\") > -1)) {\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t\tif (node[checkedKey] && setting.check.chkboxType.Y.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, true);\n\t\t\t\t}\n\t\t\t\tif (!node[checkedKey] && setting.check.chkboxType.N.indexOf(\"p\") > -1) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node, false);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tmakeChkClass: function(setting, node) {\n\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\tc = consts.checkbox, r = consts.radio,\n\t\t\tfullStyle = \"\";\n\t\t\tif (node.chkDisabled === true) {\n\t\t\t\tfullStyle = c.DISABLED;\n\t\t\t} else if (node.halfCheck) {\n\t\t\t\tfullStyle = c.PART;\n\t\t\t} else if (setting.check.chkStyle == r.STYLE) {\n\t\t\t\tfullStyle = (node.check_Child_State < 1)? c.FULL:c.PART;\n\t\t\t} else {\n\t\t\t\tfullStyle = node[checkedKey] ? ((node.check_Child_State === 2 || node.check_Child_State === -1) ? c.FULL:c.PART) : ((node.check_Child_State < 1)? c.FULL:c.PART);\n\t\t\t}\n\t\t\tvar chkName = setting.check.chkStyle + \"_\" + (node[checkedKey] ? c.TRUE : c.FALSE) + \"_\" + fullStyle;\n\t\t\tchkName = (node.check_Focus && node.chkDisabled !== true) ? chkName + \"_\" + c.FOCUS : chkName;\n\t\t\treturn consts.className.BUTTON + \" \" + c.DEFAULT + \" \" + chkName;\n\t\t},\n\t\trepairAllChk: function(setting, checked) {\n\t\t\tif (setting.check.enable && setting.check.chkStyle === consts.checkbox.STYLE) {\n\t\t\t\tvar checkedKey = setting.data.key.checked,\n\t\t\t\tchildKey = setting.data.key.children,\n\t\t\t\troot = data.getRoot(setting);\n\t\t\t\tfor (var i = 0, l = root[childKey].length; i<l ; i++) {\n\t\t\t\t\tvar node = root[childKey][i];\n\t\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\t\tnode[checkedKey] = checked;\n\t\t\t\t\t}\n\t\t\t\t\tview.setSonNodeCheckBox(setting, node, checked);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairChkClass: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true) {\n\t\t\t\tvar checkObj = $$(node, consts.id.CHECK, setting);\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t}\n\t\t},\n\t\trepairParentChkClass: function(setting, node) {\n\t\t\tif (!node || !node.parentTId) return;\n\t\t\tvar pNode = node.getParentNode();\n\t\t\tview.repairChkClass(setting, pNode);\n\t\t\tview.repairParentChkClass(setting, pNode);\n\t\t},\n\t\trepairParentChkClassWithSelf: function(setting, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node[childKey] && node[childKey].length > 0) {\n\t\t\t\tview.repairParentChkClass(setting, node[childKey][0]);\n\t\t\t} else {\n\t\t\t\tview.repairParentChkClass(setting, node);\n\t\t\t}\n\t\t},\n\t\trepairSonChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tif (node.chkDisabled != chkDisabled) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tif (node[childKey] && inherit) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.repairSonChkDisabled(setting, sNode, chkDisabled, inherit);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\trepairParentChkDisabled: function(setting, node, chkDisabled, inherit) {\n\t\t\tif (!node) return;\n\t\t\tif (node.chkDisabled != chkDisabled && inherit) {\n\t\t\t\tnode.chkDisabled = chkDisabled;\n\t\t\t}\n\t\t\tview.repairChkClass(setting, node);\n\t\t\tview.repairParentChkDisabled(setting, node.getParentNode(), chkDisabled, inherit);\n\t\t},\n\t\tsetChkClass: function(setting, obj, node) {\n\t\t\tif (!obj) return;\n\t\t\tif (node.nocheck === true) {\n\t\t\t\tobj.hide();\n\t\t\t} else {\n\t\t\t\tobj.show();\n\t\t\t}\n            obj.attr('class', view.makeChkClass(setting, node));\n\t\t},\n\t\tsetParentNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\t\t\tdata.makeChkFlag(setting, node);\n\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\tnode[checkedKey] = value;\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (node.parentTId) {\n\t\t\t\tvar pSign = true;\n\t\t\t\tif (!value) {\n\t\t\t\t\tvar pNodes = node.getParentNode()[childKey];\n\t\t\t\t\tfor (var i = 0, l = pNodes.length; i < l; i++) {\n\t\t\t\t\t\tif ((pNodes[i].nocheck !== true && pNodes[i].chkDisabled !== true && pNodes[i][checkedKey])\n\t\t\t\t\t\t|| ((pNodes[i].nocheck === true || pNodes[i].chkDisabled === true) && pNodes[i].check_Child_State > 0)) {\n\t\t\t\t\t\t\tpSign = false;\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}\n\t\t\t\tif (pSign) {\n\t\t\t\t\tview.setParentNodeCheckBox(setting, node.getParentNode(), value, srcNode);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tsetSonNodeCheckBox: function(setting, node, value, srcNode) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children,\n\t\t\tcheckedKey = setting.data.key.checked,\n\t\t\tcheckObj = $$(node, consts.id.CHECK, setting);\n\t\t\tif (!srcNode) srcNode = node;\n\n\t\t\tvar hasDisable = false;\n\t\t\tif (node[childKey]) {\n\t\t\t\tfor (var i = 0, l = node[childKey].length; i < l && node.chkDisabled !== true; i++) {\n\t\t\t\t\tvar sNode = node[childKey][i];\n\t\t\t\t\tview.setSonNodeCheckBox(setting, sNode, value, srcNode);\n\t\t\t\t\tif (sNode.chkDisabled === true) hasDisable = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (node != data.getRoot(setting) && node.chkDisabled !== true) {\n\t\t\t\tif (hasDisable && node.nocheck !== true) {\n\t\t\t\t\tdata.makeChkFlag(setting, node);\n\t\t\t\t}\n\t\t\t\tif (node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tnode[checkedKey] = value;\n\t\t\t\t\tif (!hasDisable) node.check_Child_State = (node[childKey] && node[childKey].length > 0) ? (value ? 2 : 0) : -1;\n\t\t\t\t} else {\n\t\t\t\t\tnode.check_Child_State = -1;\n\t\t\t\t}\n\t\t\t\tview.setChkClass(setting, checkObj, node);\n\t\t\t\tif (setting.check.autoCheckTrigger && node != srcNode && node.nocheck !== true && node.chkDisabled !== true) {\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.CHECK, [null, setting.treeId, node]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy, true);\n\tdata.addInitRoot(_initRoot);\n\tdata.addBeforeA(_beforeA);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode) {\n\t\tif (_createNodes) _createNodes.apply(view, arguments);\n\t\tif (!nodes) return;\n\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t}\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar parentNode = node.getParentNode();\n\t\tif (_removeNode) _removeNode.apply(view, arguments);\n\t\tif (!node || !parentNode) return;\n\t\tview.repairChkClass(setting, parentNode);\n\t\tview.repairParentChkClass(setting, parentNode);\n\t}\n\n\tvar _appendNodes = view.appendNodes;\n\tview.appendNodes = function(setting, level, nodes, parentNode, initFlag, openFlag) {\n\t\tvar html = \"\";\n\t\tif (_appendNodes) {\n\t\t\thtml = _appendNodes.apply(view, arguments);\n\t\t}\n\t\tif (parentNode) {\n\t\t\tdata.makeChkFlag(setting, parentNode);\n\t\t}\n\t\treturn html;\n\t}\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/zTree/jquery.ztree.exedit-3.5.js",
    "content": "/*\n * JQuery zTree exedit v3.5.17\n * http://zTree.me/\n *\n * Copyright (c) 2010 Hunter.z\n *\n * Licensed same as jquery - MIT License\n * http://www.opensource.org/licenses/mit-license.php\n *\n * email: hunter.z@263.net\n * Date: 2014-05-08\n */\n(function($){\n\t//default consts of exedit\n\tvar _consts = {\n\t\tevent: {\n\t\t\tDRAG: \"ztree_drag\",\n\t\t\tDROP: \"ztree_drop\",\n\t\t\tRENAME: \"ztree_rename\",\n\t\t\tDRAGMOVE:\"ztree_dragmove\"\n\t\t},\n\t\tid: {\n\t\t\tEDIT: \"_edit\",\n\t\t\tINPUT: \"_input\",\n\t\t\tREMOVE: \"_remove\"\n\t\t},\n\t\tmove: {\n\t\t\tTYPE_INNER: \"inner\",\n\t\t\tTYPE_PREV: \"prev\",\n\t\t\tTYPE_NEXT: \"next\"\n\t\t},\n\t\tnode: {\n\t\t\tCURSELECTED_EDIT: \"curSelectedNode_Edit\",\n\t\t\tTMPTARGET_TREE: \"tmpTargetzTree\",\n\t\t\tTMPTARGET_NODE: \"tmpTargetNode\"\n\t\t}\n\t},\n\t//default setting of exedit\n\t_setting = {\n\t\tedit: {\n\t\t\tenable: false,\n\t\t\teditNameSelectAll: false,\n\t\t\tshowRemoveBtn: true,\n\t\t\tshowRenameBtn: true,\n\t\t\tremoveTitle: \"remove\",\n\t\t\trenameTitle: \"rename\",\n\t\t\tdrag: {\n\t\t\t\tautoExpandTrigger: false,\n\t\t\t\tisCopy: true,\n\t\t\t\tisMove: true,\n\t\t\t\tprev: true,\n\t\t\t\tnext: true,\n\t\t\t\tinner: true,\n\t\t\t\tminMoveSize: 5,\n\t\t\t\tborderMax: 10,\n\t\t\t\tborderMin: -5,\n\t\t\t\tmaxShowNodeNum: 5,\n\t\t\t\tautoOpenTime: 500\n\t\t\t}\n\t\t},\n\t\tview: {\n\t\t\taddHoverDom: null,\n\t\t\tremoveHoverDom: null\n\t\t},\n\t\tcallback: {\n\t\t\tbeforeDrag:null,\n\t\t\tbeforeDragOpen:null,\n\t\t\tbeforeDrop:null,\n\t\t\tbeforeEditName:null,\n\t\t\tbeforeRename:null,\n\t\t\tonDrag:null,\n\t\t\tonDragMove:null,\n\t\t\tonDrop:null,\n\t\t\tonRename:null\n\t\t}\n\t},\n\t//default root of exedit\n\t_initRoot = function (setting) {\n\t\tvar r = data.getRoot(setting), rs = data.getRoots();\n\t\tr.curEditNode = null;\n\t\tr.curEditInput = null;\n\t\tr.curHoverNode = null;\n\t\tr.dragFlag = 0;\n\t\tr.dragNodeShowBefore = [];\n\t\tr.dragMaskList = new Array();\n\t\trs.showHoverDom = true;\n\t},\n\t//default cache of exedit\n\t_initCache = function(treeId) {},\n\t//default bind event of exedit\n\t_bindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.bind(c.RENAME, function (event, treeId, treeNode, isCancel) {\n\t\t\ttools.apply(setting.callback.onRename, [event, treeId, treeNode, isCancel]);\n\t\t});\n\n\t\to.bind(c.DRAG, function (event, srcEvent, treeId, treeNodes) {\n\t\t\ttools.apply(setting.callback.onDrag, [srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DRAGMOVE,function(event, srcEvent, treeId, treeNodes){\n\t\t\ttools.apply(setting.callback.onDragMove,[srcEvent, treeId, treeNodes]);\n\t\t});\n\n\t\to.bind(c.DROP, function (event, srcEvent, treeId, treeNodes, targetNode, moveType, isCopy) {\n\t\t\ttools.apply(setting.callback.onDrop, [srcEvent, treeId, treeNodes, targetNode, moveType, isCopy]);\n\t\t});\n\t},\n\t_unbindEvent = function(setting) {\n\t\tvar o = setting.treeObj;\n\t\tvar c = consts.event;\n\t\to.unbind(c.RENAME);\n\t\to.unbind(c.DRAG);\n\t\to.unbind(c.DRAGMOVE);\n\t\to.unbind(c.DROP);\n\t},\n\t//default event proxy of exedit\n\t_eventProxy = function(e) {\n\t\tvar target = e.target,\n\t\tsetting = data.getSetting(e.data.treeId),\n\t\trelatedTarget = e.relatedTarget,\n\t\ttId = \"\", node = null,\n\t\tnodeEventType = \"\", treeEventType = \"\",\n\t\tnodeEventCallback = null, treeEventCallback = null,\n\t\ttmp = null;\n\n\t\tif (tools.eqs(e.type, \"mouseover\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"hoverOverNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mouseout\")) {\n\t\t\ttmp = tools.getMDom(setting, relatedTarget, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (!tmp) {\n\t\t\t\ttId = \"remove\";\n\t\t\t\tnodeEventType = \"hoverOutNode\";\n\t\t\t}\n\t\t} else if (tools.eqs(e.type, \"mousedown\")) {\n\t\t\ttmp = tools.getMDom(setting, target, [{tagName:\"a\", attrName:\"treeNode\"+consts.id.A}]);\n\t\t\tif (tmp) {\n\t\t\t\ttId = tools.getNodeMainDom(tmp).id;\n\t\t\t\tnodeEventType = \"mousedownNode\";\n\t\t\t}\n\t\t}\n\t\tif (tId.length>0) {\n\t\t\tnode = data.getNodeCache(setting, tId);\n\t\t\tswitch (nodeEventType) {\n\t\t\t\tcase \"mousedownNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onMousedownNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOverNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOverNode;\n\t\t\t\t\tbreak;\n\t\t\t\tcase \"hoverOutNode\" :\n\t\t\t\t\tnodeEventCallback = _handler.onHoverOutNode;\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t\tvar proxyResult = {\n\t\t\tstop: false,\n\t\t\tnode: node,\n\t\t\tnodeEventType: nodeEventType,\n\t\t\tnodeEventCallback: nodeEventCallback,\n\t\t\ttreeEventType: treeEventType,\n\t\t\ttreeEventCallback: treeEventCallback\n\t\t};\n\t\treturn proxyResult\n\t},\n\t//default init node of exedit\n\t_initNode = function(setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n\t\tif (!n) return;\n\t\tn.isHover = false;\n\t\tn.editNameFlag = false;\n\t},\n\t//update zTreeObj, add method of edit\n\t_zTreeTools = function(setting, zTreeTools) {\n\t\tzTreeTools.cancelEditName = function(newName) {\n\t\t\tvar root = data.getRoot(this.setting);\n\t\t\tif (!root.curEditNode) return;\n\t\t\tview.cancelCurEditNode(this.setting, newName?newName:null, true);\n\t\t}\n\t\tzTreeTools.copyNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return null;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) return null;\n\t\t\tvar _this = this,\n\t\t\t\tnewNode = tools.clone(node);\n\t\t\tif (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tfunction copyCallback() {\n\t\t\t\t\tview.addNodes(_this.setting, targetNode, [newNode], isSilent);\n\t\t\t\t}\n\n\t\t\t\tif (tools.canAsync(this.setting, targetNode)) {\n\t\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, copyCallback);\n\t\t\t\t} else {\n\t\t\t\t\tcopyCallback();\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tview.addNodes(this.setting, targetNode.parentNode, [newNode], isSilent);\n\t\t\t\tview.moveNode(this.setting, targetNode, newNode, moveType, false, isSilent);\n\t\t\t}\n\t\t\treturn newNode;\n\t\t}\n\t\tzTreeTools.editName = function(node) {\n\t\t\tif (!node || !node.tId || node !== data.getNodeCache(this.setting, node.tId)) return;\n\t\t\tif (node.parentTId) view.expandCollapseParentNode(this.setting, node.getParentNode(), true);\n\t\t\tview.editNode(this.setting, node)\n\t\t}\n\t\tzTreeTools.moveNode = function(targetNode, node, moveType, isSilent) {\n\t\t\tif (!node) return node;\n\t\t\tif (targetNode && !targetNode.isParent && this.setting.data.keep.leaf && moveType === consts.move.TYPE_INNER) {\n\t\t\t\treturn null;\n\t\t\t} else if (targetNode && ((node.parentTId == targetNode.tId && moveType == consts.move.TYPE_INNER) || $$(node, this.setting).find(\"#\" + targetNode.tId).length > 0)) {\n\t\t\t\treturn null;\n\t\t\t} else if (!targetNode) {\n\t\t\t\ttargetNode = null;\n\t\t\t}\n\t\t\tvar _this = this;\n\t\t\tfunction moveCallback() {\n\t\t\t\tview.moveNode(_this.setting, targetNode, node, moveType, false, isSilent);\n\t\t\t}\n\t\t\tif (tools.canAsync(this.setting, targetNode) && moveType === consts.move.TYPE_INNER) {\n\t\t\t\tview.asyncNode(this.setting, targetNode, isSilent, moveCallback);\n\t\t\t} else {\n\t\t\t\tmoveCallback();\n\t\t\t}\n\t\t\treturn node;\n\t\t}\n\t\tzTreeTools.setEditable = function(editable) {\n\t\t\tthis.setting.edit.enable = editable;\n\t\t\treturn this.refresh();\n\t\t}\n\t},\n\t//method of operate data\n\t_data = {\n\t\tsetSonNodeLevel: function(setting, parentNode, node) {\n\t\t\tif (!node) return;\n\t\t\tvar childKey = setting.data.key.children;\n\t\t\tnode.level = (parentNode)? parentNode.level + 1 : 0;\n\t\t\tif (!node[childKey]) return;\n\t\t\tfor (var i = 0, l = node[childKey].length; i < l; i++) {\n\t\t\t\tif (node[childKey][i]) data.setSonNodeLevel(setting, node, node[childKey][i]);\n\t\t\t}\n\t\t}\n\t},\n\t//method of event proxy\n\t_event = {\n\n\t},\n\t//method of event handler\n\t_handler = {\n\t\tonHoverOverNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode != node) {\n\t\t\t\t_handler.onHoverOutNode(event);\n\t\t\t}\n\t\t\troot.curHoverNode = node;\n\t\t\tview.addHoverDom(setting, node);\n\t\t},\n\t\tonHoverOutNode: function(event, node) {\n\t\t\tvar setting = data.getSetting(event.data.treeId),\n\t\t\troot = data.getRoot(setting);\n\t\t\tif (root.curHoverNode && !data.isSelectedNode(setting, root.curHoverNode)) {\n\t\t\t\tview.removeTreeDom(setting, root.curHoverNode);\n\t\t\t\troot.curHoverNode = null;\n\t\t\t}\n\t\t},\n\t\tonMousedownNode: function(eventMouseDown, _node) {\n\t\t\tvar i,l,\n\t\t\tsetting = data.getSetting(eventMouseDown.data.treeId),\n\t\t\troot = data.getRoot(setting), roots = data.getRoots();\n\t\t\t//right click can't drag & drop\n\t\t\tif (eventMouseDown.button == 2 || !setting.edit.enable || (!setting.edit.drag.isCopy && !setting.edit.drag.isMove)) return true;\n\n\t\t\t//input of edit node name can't drag & drop\n\t\t\tvar target = eventMouseDown.target,\n\t\t\t_nodes = data.getRoot(setting).curSelectedList,\n\t\t\tnodes = [];\n\t\t\tif (!data.isSelectedNode(setting, _node)) {\n\t\t\t\tnodes = [_node];\n\t\t\t} else {\n\t\t\t\tfor (i=0, l=_nodes.length; i<l; i++) {\n\t\t\t\t\tif (_nodes[i].editNameFlag && tools.eqs(target.tagName, \"input\") && target.getAttribute(\"treeNode\"+consts.id.INPUT) !== null) {\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\t\t\t\t\tnodes.push(_nodes[i]);\n\t\t\t\t\tif (nodes[0].parentTId !== _nodes[i].parentTId) {\n\t\t\t\t\t\tnodes = [_node];\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\tview.editNodeBlur = true;\n\t\t\tview.cancelCurEditNode(setting);\n\n\t\t\tvar doc = $(setting.treeObj.get(0).ownerDocument),\n\t\t\tbody = $(setting.treeObj.get(0).ownerDocument.body), curNode, tmpArrow, tmpTarget,\n\t\t\tisOtherTree = false,\n\t\t\ttargetSetting = setting,\n\t\t\tsourceSetting = setting,\n\t\t\tpreNode, nextNode,\n\t\t\tpreTmpTargetNodeId = null,\n\t\t\tpreTmpMoveType = null,\n\t\t\ttmpTargetNodeId = null,\n\t\t\tmoveType = consts.move.TYPE_INNER,\n\t\t\tmouseDownX = eventMouseDown.clientX,\n\t\t\tmouseDownY = eventMouseDown.clientY,\n\t\t\tstartTime = (new Date()).getTime();\n\n\t\t\tif (tools.uCanDo(setting)) {\n\t\t\t\tdoc.bind(\"mousemove\", _docMouseMove);\n\t\t\t}\n\t\t\tfunction _docMouseMove(event) {\n\t\t\t\t//avoid start drag after click node\n\t\t\t\tif (root.dragFlag == 0 && Math.abs(mouseDownX - event.clientX) < setting.edit.drag.minMoveSize\n\t\t\t\t\t&& Math.abs(mouseDownY - event.clientY) < setting.edit.drag.minMoveSize) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\tvar i, l, tmpNode, tmpDom, tmpNodes,\n\t\t\t\tchildKey = setting.data.key.children;\n\t\t\t\tbody.css(\"cursor\", \"pointer\");\n\n\t\t\t\tif (root.dragFlag == 0) {\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrag, [setting.treeId, nodes], true) == false) {\n\t\t\t\t\t\t_docMouseUp(event);\n\t\t\t\t\t\treturn true;\n\t\t\t\t\t}\n\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\tif (i==0) {\n\t\t\t\t\t\t\troot.dragNodeShowBefore = [];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\tif (tmpNode.isParent && tmpNode.open) {\n\t\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = true;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\troot.dragNodeShowBefore[tmpNode.tId] = false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\troot.dragFlag = 1;\n\t\t\t\t\troots.showHoverDom = false;\n\t\t\t\t\ttools.showIfameMask(setting, true);\n\n\t\t\t\t\t//sort\n\t\t\t\t\tvar isOrder = true, lastIndex = -1;\n\t\t\t\t\tif (nodes.length>1) {\n\t\t\t\t\t\tvar pNodes = nodes[0].parentTId ? nodes[0].getParentNode()[childKey] : data.getNodes(setting);\n\t\t\t\t\t\ttmpNodes = [];\n\t\t\t\t\t\tfor (i=0, l=pNodes.length; i<l; i++) {\n\t\t\t\t\t\t\tif (root.dragNodeShowBefore[pNodes[i].tId] !== undefined) {\n\t\t\t\t\t\t\t\tif (isOrder && lastIndex > -1 && (lastIndex+1) !== i) {\n\t\t\t\t\t\t\t\t\tisOrder = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\ttmpNodes.push(pNodes[i]);\n\t\t\t\t\t\t\t\tlastIndex = i;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (nodes.length === tmpNodes.length) {\n\t\t\t\t\t\t\t\tnodes = tmpNodes;\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\tif (isOrder) {\n\t\t\t\t\t\tpreNode = nodes[0].getPreNode();\n\t\t\t\t\t\tnextNode = nodes[nodes.length-1].getNextNode();\n\t\t\t\t\t}\n\n\t\t\t\t\t//set node in selected\n\t\t\t\t\tcurNode = $$(\"<ul class='zTreeDragUL'></ul>\", setting);\n\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\ttmpNode.editNameFlag = false;\n\t\t\t\t\t\tview.selectNode(setting, tmpNode, i>0);\n\t\t\t\t\t\tview.removeTreeDom(setting, tmpNode);\n\n\t\t\t\t\t\tif (i > setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_tmp'></li>\", setting);\n\t\t\t\t\t\ttmpDom.append($$(tmpNode, consts.id.A, setting).clone());\n\t\t\t\t\t\ttmpDom.css(\"padding\", \"0\");\n\t\t\t\t\t\ttmpDom.children(\"#\" + tmpNode.tId + consts.id.A).removeClass(consts.node.CURSELECTED);\n\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\tif (i == setting.edit.drag.maxShowNodeNum-1) {\n\t\t\t\t\t\t\ttmpDom = $$(\"<li id='\"+ tmpNode.tId +\"_moretmp'><a>  ...  </a></li>\", setting);\n\t\t\t\t\t\t\tcurNode.append(tmpDom);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tcurNode.attr(\"id\", nodes[0].tId + consts.id.UL + \"_tmp\");\n\t\t\t\t\tcurNode.addClass(setting.treeObj.attr(\"class\"));\n\t\t\t\t\tcurNode.appendTo(body);\n\n\t\t\t\t\ttmpArrow = $$(\"<span class='tmpzTreeMove_arrow'></span>\", setting);\n\t\t\t\t\ttmpArrow.attr(\"id\", \"zTreeMove_arrow_tmp\");\n\t\t\t\t\ttmpArrow.appendTo(body);\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAG, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\n\t\t\t\tif (root.dragFlag == 1) {\n\t\t\t\t\tif (tmpTarget && tmpArrow.attr(\"id\") == event.target.id && tmpTargetNodeId && (event.clientX + doc.scrollLeft()+2) > ($(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).offset().left)) {\n\t\t\t\t\t\tvar xT = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget);\n\t\t\t\t\t\tevent.target = (xT.length > 0) ? xT.get(0) : event.target;\n\t\t\t\t\t} else if (tmpTarget) {\n\t\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t\t}\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\ttmpTargetNodeId = null;\n\n\t\t\t\t\t//judge drag & drop in multi ztree\n\t\t\t\t\tisOtherTree = false;\n\t\t\t\t\ttargetSetting = setting;\n\t\t\t\t\tvar settings = data.getSettings();\n\t\t\t\t\tfor (var s in settings) {\n\t\t\t\t\t\tif (settings[s].treeId && settings[s].edit.enable && settings[s].treeId != setting.treeId\n\t\t\t\t\t\t\t&& (event.target.id == settings[s].treeId || $(event.target).parents(\"#\" + settings[s].treeId).length>0)) {\n\t\t\t\t\t\t\tisOtherTree = true;\n\t\t\t\t\t\t\ttargetSetting = settings[s];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar docScrollTop = doc.scrollTop(),\n\t\t\t\t\tdocScrollLeft = doc.scrollLeft(),\n\t\t\t\t\ttreeOffset = targetSetting.treeObj.offset(),\n\t\t\t\t\tscrollHeight = targetSetting.treeObj.get(0).scrollHeight,\n\t\t\t\t\tscrollWidth = targetSetting.treeObj.get(0).scrollWidth,\n\t\t\t\t\tdTop = (event.clientY + docScrollTop - treeOffset.top),\n\t\t\t\t\tdBottom = (targetSetting.treeObj.height() + treeOffset.top - event.clientY - docScrollTop),\n\t\t\t\t\tdLeft = (event.clientX + docScrollLeft - treeOffset.left),\n\t\t\t\t\tdRight = (targetSetting.treeObj.width() + treeOffset.left - event.clientX - docScrollLeft),\n\t\t\t\t\tisTop = (dTop < setting.edit.drag.borderMax && dTop > setting.edit.drag.borderMin),\n\t\t\t\t\tisBottom = (dBottom < setting.edit.drag.borderMax && dBottom > setting.edit.drag.borderMin),\n\t\t\t\t\tisLeft = (dLeft < setting.edit.drag.borderMax && dLeft > setting.edit.drag.borderMin),\n\t\t\t\t\tisRight = (dRight < setting.edit.drag.borderMax && dRight > setting.edit.drag.borderMin),\n\t\t\t\t\tisTreeInner = dTop > setting.edit.drag.borderMin && dBottom > setting.edit.drag.borderMin && dLeft > setting.edit.drag.borderMin && dRight > setting.edit.drag.borderMin,\n\t\t\t\t\tisTreeTop = (isTop && targetSetting.treeObj.scrollTop() <= 0),\n\t\t\t\t\tisTreeBottom = (isBottom && (targetSetting.treeObj.scrollTop() + targetSetting.treeObj.height()+10) >= scrollHeight),\n\t\t\t\t\tisTreeLeft = (isLeft && targetSetting.treeObj.scrollLeft() <= 0),\n\t\t\t\t\tisTreeRight = (isRight && (targetSetting.treeObj.scrollLeft() + targetSetting.treeObj.width()+10) >= scrollWidth);\n\n\t\t\t\t\tif (event.target && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//get node <li> dom\n\t\t\t\t\t\tvar targetObj = event.target;\n\t\t\t\t\t\twhile (targetObj && targetObj.tagName && !tools.eqs(targetObj.tagName, \"li\") && targetObj.id != targetSetting.treeId) {\n\t\t\t\t\t\t\ttargetObj = targetObj.parentNode;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tvar canMove = true;\n\t\t\t\t\t\t//don't move to self or children of self\n\t\t\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\t\t\tif (targetObj.id === tmpNode.tId) {\n\t\t\t\t\t\t\t\tcanMove = false;\n\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t} else if ($$(tmpNode, setting).find(\"#\" + targetObj.id).length > 0) {\n\t\t\t\t\t\t\t\tcanMove = false;\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\tif (canMove && event.target && tools.isChildOrSelf(event.target, targetObj.id + consts.id.A)) {\n\t\t\t\t\t\t\ttmpTarget = $(targetObj);\n\t\t\t\t\t\t\ttmpTargetNodeId = targetObj.id;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t//the mouse must be in zTree\n\t\t\t\t\ttmpNode = nodes[0];\n\t\t\t\t\tif (isTreeInner && tools.isChildOrSelf(event.target, targetSetting.treeId)) {\n\t\t\t\t\t\t//judge mouse move in root of ztree\n\t\t\t\t\t\tif (!tmpTarget && (event.target.id == targetSetting.treeId || isTreeTop || isTreeBottom || isTreeLeft || isTreeRight) && (isOtherTree || (!isOtherTree && tmpNode.parentTId))) {\n\t\t\t\t\t\t\ttmpTarget = targetSetting.treeObj;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll top\n\t\t\t\t\t\tif (isTop) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()-10);\n\t\t\t\t\t\t} else if (isBottom)  {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollTop(targetSetting.treeObj.scrollTop()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (isLeft) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()-10);\n\t\t\t\t\t\t} else if (isRight) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+10);\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//auto scroll left\n\t\t\t\t\t\tif (tmpTarget && tmpTarget != targetSetting.treeObj && tmpTarget.offset().left < targetSetting.treeObj.offset().left) {\n\t\t\t\t\t\t\ttargetSetting.treeObj.scrollLeft(targetSetting.treeObj.scrollLeft()+ tmpTarget.offset().left - targetSetting.treeObj.offset().left);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tcurNode.css({\n\t\t\t\t\t\t\"top\": (event.clientY + docScrollTop + 3) + \"px\",\n\t\t\t\t\t\t\"left\": (event.clientX + docScrollLeft + 3) + \"px\"\n\t\t\t\t\t});\n\n\t\t\t\t\tvar dX = 0;\n\t\t\t\t\tvar dY = 0;\n\t\t\t\t\tif (tmpTarget && tmpTarget.attr(\"id\")!=targetSetting.treeId) {\n\t\t\t\t\t\tvar tmpTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId),\n\t\t\t\t\t\tisCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy),\n\t\t\t\t\t\tisPrev = !!(preNode && tmpTargetNodeId === preNode.tId),\n\t\t\t\t\t\tisNext = !!(nextNode && tmpTargetNodeId === nextNode.tId),\n\t\t\t\t\t\tisInner = (tmpNode.parentTId && tmpNode.parentTId == tmpTargetNodeId),\n\t\t\t\t\t\tcanPrev = (isCopy || !isNext) && tools.apply(targetSetting.edit.drag.prev, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.prev),\n\t\t\t\t\t\tcanNext = (isCopy || !isPrev) && tools.apply(targetSetting.edit.drag.next, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.next),\n\t\t\t\t\t\tcanInner = (isCopy || !isInner) && !(targetSetting.data.keep.leaf && !tmpTargetNode.isParent) && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, tmpTargetNode], !!targetSetting.edit.drag.inner);\n\t\t\t\t\t\tif (!canPrev && !canNext && !canInner) {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t\ttmpTargetNodeId = \"\";\n\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tvar tmpTargetA = $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget),\n\t\t\t\t\t\t\ttmpNextA = tmpTargetNode.isLastNode ? null : $(\"#\" + tmpTargetNode.getNextNode().tId + consts.id.A, tmpTarget.next()),\n\t\t\t\t\t\t\ttmpTop = tmpTargetA.offset().top,\n\t\t\t\t\t\t\ttmpLeft = tmpTargetA.offset().left,\n\t\t\t\t\t\t\tprevPercent = canPrev ? (canInner ? 0.25 : (canNext ? 0.5 : 1) ) : -1,\n\t\t\t\t\t\t\tnextPercent = canNext ? (canInner ? 0.75 : (canPrev ? 0.5 : 0) ) : -1,\n\t\t\t\t\t\t\tdY_percent = (event.clientY + docScrollTop - tmpTop)/tmpTargetA.height();\n\t\t\t\t\t\t\tif ((prevPercent==1 ||dY_percent<=prevPercent && dY_percent>=-.2) && canPrev) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop - tmpArrow.height()/2;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_PREV;\n\t\t\t\t\t\t\t} else if ((nextPercent==0 || dY_percent>=nextPercent && dY_percent<=1.2) && canNext) {\n\t\t\t\t\t\t\t\tdX = 1 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = (tmpNextA == null || (tmpTargetNode.isParent && tmpTargetNode.open)) ? (tmpTop + tmpTargetA.height() - tmpArrow.height()/2) : (tmpNextA.offset().top - tmpArrow.height()/2);\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_NEXT;\n\t\t\t\t\t\t\t}else {\n\t\t\t\t\t\t\t\tdX = 5 - tmpArrow.width();\n\t\t\t\t\t\t\t\tdY = tmpTop;\n\t\t\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\t\"display\":\"block\",\n\t\t\t\t\t\t\t\t\"top\": dY + \"px\",\n\t\t\t\t\t\t\t\t\"left\": (tmpLeft + dX) + \"px\"\n\t\t\t\t\t\t\t});\n\t\t\t\t\t\t\ttmpTargetA.addClass(consts.node.TMPTARGET_NODE + \"_\" + moveType);\n\n\t\t\t\t\t\t\tif (preTmpTargetNodeId != tmpTargetNodeId || preTmpMoveType != moveType) {\n\t\t\t\t\t\t\t\tstartTime = (new Date()).getTime();\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tvar startTimer = true;\n\t\t\t\t\t\t\t\tif (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId !== tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t\t\t}else if (window.zTreeMoveTimer && window.zTreeMoveTargetNodeTId === tmpTargetNode.tId) {\n\t\t\t\t\t\t\t\t\tstartTimer = false;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (startTimer) {\n\t\t\t\t\t\t\t\t\twindow.zTreeMoveTimer = setTimeout(function() {\n\t\t\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_INNER) return;\n\t\t\t\t\t\t\t\t\t\tif (tmpTargetNode && tmpTargetNode.isParent && !tmpTargetNode.open && (new Date()).getTime() - startTime > targetSetting.edit.drag.autoOpenTime\n\t\t\t\t\t\t\t\t\t\t\t&& tools.apply(targetSetting.callback.beforeDragOpen, [targetSetting.treeId, tmpTargetNode], true)) {\n\t\t\t\t\t\t\t\t\t\t\tview.switchNode(targetSetting, tmpTargetNode);\n\t\t\t\t\t\t\t\t\t\t\tif (targetSetting.edit.drag.autoExpandTrigger) {\n\t\t\t\t\t\t\t\t\t\t\t\ttargetSetting.treeObj.trigger(consts.event.EXPAND, [targetSetting.treeId, tmpTargetNode]);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}, targetSetting.edit.drag.autoOpenTime+50);\n\t\t\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = tmpTargetNode.tId;\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} else {\n\t\t\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t\t\t\tif (tmpTarget && tools.apply(targetSetting.edit.drag.inner, [targetSetting.treeId, nodes, null], !!targetSetting.edit.drag.inner)) {\n\t\t\t\t\t\t\ttmpTarget.addClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\ttmpTarget = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttmpArrow.css({\n\t\t\t\t\t\t\t\"display\":\"none\"\n\t\t\t\t\t\t});\n\t\t\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tpreTmpTargetNodeId = tmpTargetNodeId;\n\t\t\t\t\tpreTmpMoveType = moveType;\n\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DRAGMOVE, [event, setting.treeId, nodes]);\n\t\t\t\t}\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tdoc.bind(\"mouseup\", _docMouseUp);\n\t\t\tfunction _docMouseUp(event) {\n\t\t\t\tif (window.zTreeMoveTimer) {\n\t\t\t\t\tclearTimeout(window.zTreeMoveTimer);\n\t\t\t\t\twindow.zTreeMoveTargetNodeTId = null;\n\t\t\t\t}\n\t\t\t\tpreTmpTargetNodeId = null;\n\t\t\t\tpreTmpMoveType = null;\n\t\t\t\tdoc.unbind(\"mousemove\", _docMouseMove);\n\t\t\t\tdoc.unbind(\"mouseup\", _docMouseUp);\n\t\t\t\tdoc.unbind(\"selectstart\", _docSelect);\n\t\t\t\tbody.css(\"cursor\", \"auto\");\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\ttmpTarget.removeClass(consts.node.TMPTARGET_TREE);\n\t\t\t\t\tif (tmpTargetNodeId) $(\"#\" + tmpTargetNodeId + consts.id.A, tmpTarget).removeClass(consts.node.TMPTARGET_NODE + \"_\" + consts.move.TYPE_PREV)\n\t\t\t\t\t\t\t.removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_NEXT).removeClass(consts.node.TMPTARGET_NODE + \"_\" + _consts.move.TYPE_INNER);\n\t\t\t\t}\n\t\t\t\ttools.showIfameMask(setting, false);\n\n\t\t\t\troots.showHoverDom = true;\n\t\t\t\tif (root.dragFlag == 0) return;\n\t\t\t\troot.dragFlag = 0;\n\n\t\t\t\tvar i, l, tmpNode;\n\t\t\t\tfor (i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\ttmpNode = nodes[i];\n\t\t\t\t\tif (tmpNode.isParent && root.dragNodeShowBefore[tmpNode.tId] && !tmpNode.open) {\n\t\t\t\t\t\tview.expandCollapseNode(setting, tmpNode, !tmpNode.open);\n\t\t\t\t\t\tdelete root.dragNodeShowBefore[tmpNode.tId];\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tif (curNode) curNode.remove();\n\t\t\t\tif (tmpArrow) tmpArrow.remove();\n\n\t\t\t\tvar isCopy = ((event.ctrlKey || event.metaKey) && setting.edit.drag.isMove && setting.edit.drag.isCopy) || (!setting.edit.drag.isMove && setting.edit.drag.isCopy);\n\t\t\t\tif (!isCopy && tmpTarget && tmpTargetNodeId && nodes[0].parentTId && tmpTargetNodeId==nodes[0].parentTId && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\ttmpTarget = null;\n\t\t\t\t}\n\t\t\t\tif (tmpTarget) {\n\t\t\t\t\tvar dragTargetNode = tmpTargetNodeId == null ? null: data.getNodeCache(targetSetting, tmpTargetNodeId);\n\t\t\t\t\tif (tools.apply(setting.callback.beforeDrop, [targetSetting.treeId, nodes, dragTargetNode, moveType, isCopy], true) == false) {\n\t\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t\tvar newNodes = isCopy ? tools.clone(nodes) : nodes;\n\n\t\t\t\t\tfunction dropCallback() {\n\t\t\t\t\t\tif (isOtherTree) {\n\t\t\t\t\t\t\tif (!isCopy) {\n\t\t\t\t\t\t\t\tfor(var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\tview.removeNode(setting, nodes[i]);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);\n\t\t\t\t\t\t\t\tif (moveType == consts.move.TYPE_PREV) {\n\t\t\t\t\t\t\t\t\tfor (i=0, l=newNodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfor (i=-1, l=newNodes.length-1; i<l; l--) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, 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}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (isCopy && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode, newNodes);\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (isCopy) {\n\t\t\t\t\t\t\t\t\tview.addNodes(targetSetting, dragTargetNode.getParentNode(), newNodes);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (moveType != consts.move.TYPE_NEXT) {\n\t\t\t\t\t\t\t\t\tfor (i=0, l=newNodes.length; i<l; i++) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[i], moveType, false);\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tfor (i=-1, l=newNodes.length-1; i<l; l--) {\n\t\t\t\t\t\t\t\t\t\tview.moveNode(targetSetting, dragTargetNode, newNodes[l], moveType, 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}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tview.selectNodes(targetSetting, newNodes);\n\t\t\t\t\t\t$$(newNodes[0], setting).focus().blur();\n\n\t\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, targetSetting.treeId, newNodes, dragTargetNode, moveType, isCopy]);\n\t\t\t\t\t}\n\n\t\t\t\t\tif (moveType == consts.move.TYPE_INNER && tools.canAsync(targetSetting, dragTargetNode)) {\n\t\t\t\t\t\tview.asyncNode(targetSetting, dragTargetNode, false, dropCallback);\n\t\t\t\t\t} else {\n\t\t\t\t\t\tdropCallback();\n\t\t\t\t\t}\n\n\t\t\t\t} else {\n\t\t\t\t\tview.selectNodes(sourceSetting, nodes);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.DROP, [event, setting.treeId, nodes, null, null, null]);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tdoc.bind(\"selectstart\", _docSelect);\n\t\t\tfunction _docSelect() {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\t//Avoid FireFox's Bug\n\t\t\t//If zTree Div CSS set 'overflow', so drag node outside of zTree, and event.target is error.\n\t\t\tif(eventMouseDown.preventDefault) {\n\t\t\t\teventMouseDown.preventDefault();\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n\t//method of tools for zTree\n\t_tools = {\n\t\tgetAbs: function (obj) {\n\t\t\tvar oRect = obj.getBoundingClientRect(),\n\t\t\tscrollTop = document.body.scrollTop+document.documentElement.scrollTop,\n\t\t\tscrollLeft = document.body.scrollLeft+document.documentElement.scrollLeft;\n\t\t\treturn [oRect.left+scrollLeft,oRect.top+scrollTop];\n\t\t},\n\t\tinputFocus: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\ttools.setCursorPosition(inputObj.get(0), inputObj.val().length);\n\t\t\t}\n\t\t},\n\t\tinputSelect: function(inputObj) {\n\t\t\tif (inputObj.get(0)) {\n\t\t\t\tinputObj.focus();\n\t\t\t\tinputObj.select();\n\t\t\t}\n\t\t},\n\t\tsetCursorPosition: function(obj, pos){\n\t\t\tif(obj.setSelectionRange) {\n\t\t\t\tobj.focus();\n\t\t\t\tobj.setSelectionRange(pos,pos);\n\t\t\t} else if (obj.createTextRange) {\n\t\t\t\tvar range = obj.createTextRange();\n\t\t\t\trange.collapse(true);\n\t\t\t\trange.moveEnd('character', pos);\n\t\t\t\trange.moveStart('character', pos);\n\t\t\t\trange.select();\n\t\t\t}\n\t\t},\n\t\tshowIfameMask: function(setting, showSign) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\t//clear full mask\n\t\t\twhile (root.dragMaskList.length > 0) {\n\t\t\t\troot.dragMaskList[0].remove();\n\t\t\t\troot.dragMaskList.shift();\n\t\t\t}\n\t\t\tif (showSign) {\n\t\t\t\t//show mask\n\t\t\t\tvar iframeList = $$(\"iframe\", setting);\n\t\t\t\tfor (var i = 0, l = iframeList.length; i < l; i++) {\n\t\t\t\t\tvar obj = iframeList.get(i),\n\t\t\t\t\tr = tools.getAbs(obj),\n\t\t\t\t\tdragMask = $$(\"<div id='zTreeMask_\" + i + \"' class='zTreeMask' style='top:\" + r[1] + \"px; left:\" + r[0] + \"px; width:\" + obj.offsetWidth + \"px; height:\" + obj.offsetHeight + \"px;'></div>\", setting);\n\t\t\t\t\tdragMask.appendTo($$(\"body\", setting));\n\t\t\t\t\troot.dragMaskList.push(dragMask);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t},\n\t//method of operate ztree dom\n\t_view = {\n\t\taddEditBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.EDIT, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRenameBtn, [setting.treeId, node], setting.edit.showRenameBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\teditStr = \"<span class='\" + consts.className.BUTTON + \" edit' id='\" + node.tId + consts.id.EDIT + \"' title='\"+tools.apply(setting.edit.renameTitle, [setting.treeId, node], setting.edit.renameTitle)+\"' treeNode\"+consts.id.EDIT+\" style='display:none;'></span>\";\n\t\t\taObj.append(editStr);\n\n\t\t\t$$(node, consts.id.EDIT, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeEditName, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.editNode(setting, node);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddRemoveBtn: function(setting, node) {\n\t\t\tif (node.editNameFlag || $$(node, consts.id.REMOVE, setting).length > 0) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!tools.apply(setting.edit.showRemoveBtn, [setting.treeId, node], setting.edit.showRemoveBtn)) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar aObj = $$(node, consts.id.A, setting),\n\t\t\tremoveStr = \"<span class='\" + consts.className.BUTTON + \" remove' id='\" + node.tId + consts.id.REMOVE + \"' title='\"+tools.apply(setting.edit.removeTitle, [setting.treeId, node], setting.edit.removeTitle)+\"' treeNode\"+consts.id.REMOVE+\" style='display:none;'></span>\";\n\t\t\taObj.append(removeStr);\n\n\t\t\t$$(node, consts.id.REMOVE, setting).bind('click',\n\t\t\t\tfunction() {\n\t\t\t\t\tif (!tools.uCanDo(setting) || tools.apply(setting.callback.beforeRemove, [setting.treeId, node], true) == false) return false;\n\t\t\t\t\tview.removeNode(setting, node);\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.REMOVE, [setting.treeId, node]);\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\t).bind('mousedown',\n\t\t\t\tfunction(eventMouseDown) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t\t).show();\n\t\t},\n\t\taddHoverDom: function(setting, node) {\n\t\t\tif (data.getRoots().showHoverDom) {\n\t\t\t\tnode.isHover = true;\n\t\t\t\tif (setting.edit.enable) {\n\t\t\t\t\tview.addEditBtn(setting, node);\n\t\t\t\t\tview.addRemoveBtn(setting, node);\n\t\t\t\t}\n\t\t\t\ttools.apply(setting.view.addHoverDom, [setting.treeId, node]);\n\t\t\t}\n\t\t},\n\t\tcancelCurEditNode: function (setting, forceName, isCancel) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tnameKey = setting.data.key.name,\n\t\t\tnode = root.curEditNode;\n\n\t\t\tif (node) {\n\t\t\t\tvar inputObj = root.curEditInput,\n\t\t\t\tnewName = forceName ? forceName:(isCancel ? node[nameKey]: inputObj.val());\n\t\t\t\tif (tools.apply(setting.callback.beforeRename, [setting.treeId, node, newName, isCancel], true) === false) {\n\t\t\t\t\treturn false;\n\t\t\t\t} else {\n\t\t\t\t\tnode[nameKey] = newName;\n\t\t\t\t\tsetting.treeObj.trigger(consts.event.RENAME, [setting.treeId, node, isCancel]);\n\t\t\t\t}\n\t\t\t\tvar aObj = $$(node, consts.id.A, setting);\n\t\t\t\taObj.removeClass(consts.node.CURSELECTED_EDIT);\n\t\t\t\tinputObj.unbind();\n\t\t\t\tview.setNodeName(setting, node);\n\t\t\t\tnode.editNameFlag = false;\n\t\t\t\troot.curEditNode = null;\n\t\t\t\troot.curEditInput = null;\n\t\t\t\tview.selectNode(setting, node, false);\n\t\t\t}\n\t\t\troot.noSelection = true;\n\t\t\treturn true;\n\t\t},\n\t\teditNode: function(setting, node) {\n\t\t\tvar root = data.getRoot(setting);\n\t\t\tview.editNodeBlur = false;\n\t\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\t\tsetTimeout(function() {tools.inputFocus(root.curEditInput);}, 0);\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tvar nameKey = setting.data.key.name;\n\t\t\tnode.editNameFlag = true;\n\t\t\tview.removeTreeDom(setting, node);\n\t\t\tview.cancelCurEditNode(setting);\n\t\t\tview.selectNode(setting, node, false);\n\t\t\t$$(node, consts.id.SPAN, setting).html(\"<input type=text class='rename' id='\" + node.tId + consts.id.INPUT + \"' treeNode\" + consts.id.INPUT + \" >\");\n\t\t\tvar inputObj = $$(node, consts.id.INPUT, setting);\n\t\t\tinputObj.attr(\"value\", node[nameKey]);\n\t\t\tif (setting.edit.editNameSelectAll) {\n\t\t\t\ttools.inputSelect(inputObj);\n\t\t\t} else {\n\t\t\t\ttools.inputFocus(inputObj);\n\t\t\t}\n\n\t\t\tinputObj.bind('blur', function(event) {\n\t\t\t\tif (!view.editNodeBlur) {\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t}\n\t\t\t}).bind('keydown', function(event) {\n\t\t\t\tif (event.keyCode==\"13\") {\n\t\t\t\t\tview.editNodeBlur = true;\n\t\t\t\t\tview.cancelCurEditNode(setting);\n\t\t\t\t} else if (event.keyCode==\"27\") {\n\t\t\t\t\tview.cancelCurEditNode(setting, null, true);\n\t\t\t\t}\n\t\t\t}).bind('click', function(event) {\n\t\t\t\treturn false;\n\t\t\t}).bind('dblclick', function(event) {\n\t\t\t\treturn false;\n\t\t\t});\n\n\t\t\t$$(node, consts.id.A, setting).addClass(consts.node.CURSELECTED_EDIT);\n\t\t\troot.curEditInput = inputObj;\n\t\t\troot.noSelection = false;\n\t\t\troot.curEditNode = node;\n\t\t},\n\t\tmoveNode: function(setting, targetNode, node, moveType, animateFlag, isSilent) {\n\t\t\tvar root = data.getRoot(setting),\n\t\t\tchildKey = setting.data.key.children;\n\t\t\tif (targetNode == node) return;\n\t\t\tif (setting.data.keep.leaf && targetNode && !targetNode.isParent && moveType == consts.move.TYPE_INNER) return;\n\t\t\tvar oldParentNode = (node.parentTId ? node.getParentNode(): root),\n\t\t\ttargetNodeIsRoot = (targetNode === null || targetNode == root);\n\t\t\tif (targetNodeIsRoot && targetNode === null) targetNode = root;\n\t\t\tif (targetNodeIsRoot) moveType = consts.move.TYPE_INNER;\n\t\t\tvar targetParentNode = (targetNode.parentTId ? targetNode.getParentNode() : root);\n\n\t\t\tif (moveType != consts.move.TYPE_PREV && moveType != consts.move.TYPE_NEXT) {\n\t\t\t\tmoveType = consts.move.TYPE_INNER;\n\t\t\t}\n\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (targetNodeIsRoot) {\n\t\t\t\t\t//parentTId of root node is null\n\t\t\t\t\tnode.parentTId = null;\n\t\t\t\t} else {\n\t\t\t\t\tif (!targetNode.isParent) {\n\t\t\t\t\t\ttargetNode.isParent = true;\n\t\t\t\t\t\ttargetNode.open = !!targetNode.open;\n\t\t\t\t\t\tview.setNodeLineIcos(setting, targetNode);\n\t\t\t\t\t}\n\t\t\t\t\tnode.parentTId = targetNode.tId;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t//move node Dom\n\t\t\tvar targetObj, target_ulObj;\n\t\t\tif (targetNodeIsRoot) {\n\t\t\t\ttargetObj = setting.treeObj;\n\t\t\t\ttarget_ulObj = targetObj;\n\t\t\t} else {\n\t\t\t\tif (!isSilent && moveType == consts.move.TYPE_INNER) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode, true, false);\n\t\t\t\t} else if (!isSilent) {\n\t\t\t\t\tview.expandCollapseNode(setting, targetNode.getParentNode(), true, false);\n\t\t\t\t}\n\t\t\t\ttargetObj = $$(targetNode, setting);\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t\tif (!!targetObj.get(0) && !target_ulObj.get(0)) {\n\t\t\t\t\tvar ulstr = [];\n\t\t\t\t\tview.makeUlHtml(setting, targetNode, ulstr, '');\n\t\t\t\t\ttargetObj.append(ulstr.join(''));\n\t\t\t\t}\n\t\t\t\ttarget_ulObj = $$(targetNode, consts.id.UL, setting);\n\t\t\t}\n\t\t\tvar nodeDom = $$(node, setting);\n\t\t\tif (!nodeDom.get(0)) {\n\t\t\t\tnodeDom = view.appendNodes(setting, node.level, [node], null, false, true).join('');\n\t\t\t} else if (!targetObj.get(0)) {\n\t\t\t\tnodeDom.remove();\n\t\t\t}\n\t\t\tif (target_ulObj.get(0) && moveType == consts.move.TYPE_INNER) {\n\t\t\t\ttarget_ulObj.append(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetObj.before(nodeDom);\n\t\t\t} else if (targetObj.get(0) && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetObj.after(nodeDom);\n\t\t\t}\n\n\t\t\t//repair the data after move\n\t\t\tvar i,l,\n\t\t\ttmpSrcIndex = -1,\n\t\t\ttmpTargetIndex = 0,\n\t\t\toldNeighbor = null,\n\t\t\tnewNeighbor = null,\n\t\t\toldLevel = node.level;\n\t\t\tif (node.isFirstNode) {\n\t\t\t\ttmpSrcIndex = 0;\n\t\t\t\tif (oldParentNode[childKey].length > 1 ) {\n\t\t\t\t\toldNeighbor = oldParentNode[childKey][1];\n\t\t\t\t\toldNeighbor.isFirstNode = true;\n\t\t\t\t}\n\t\t\t} else if (node.isLastNode) {\n\t\t\t\ttmpSrcIndex = oldParentNode[childKey].length -1;\n\t\t\t\toldNeighbor = oldParentNode[childKey][tmpSrcIndex - 1];\n\t\t\t\toldNeighbor.isLastNode = true;\n\t\t\t} else {\n\t\t\t\tfor (i = 0, l = oldParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (oldParentNode[childKey][i].tId == node.tId) {\n\t\t\t\t\t\ttmpSrcIndex = i;\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\tif (tmpSrcIndex >= 0) {\n\t\t\t\toldParentNode[childKey].splice(tmpSrcIndex, 1);\n\t\t\t}\n\t\t\tif (moveType != consts.move.TYPE_INNER) {\n\t\t\t\tfor (i = 0, l = targetParentNode[childKey].length; i < l; i++) {\n\t\t\t\t\tif (targetParentNode[childKey][i].tId == targetNode.tId) tmpTargetIndex = i;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (moveType == consts.move.TYPE_INNER) {\n\t\t\t\tif (!targetNode[childKey]) targetNode[childKey] = new Array();\n\t\t\t\tif (targetNode[childKey].length > 0) {\n\t\t\t\t\tnewNeighbor = targetNode[childKey][targetNode[childKey].length - 1];\n\t\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\t}\n\t\t\t\ttargetNode[childKey].splice(targetNode[childKey].length, 0, node);\n\t\t\t\tnode.isLastNode = true;\n\t\t\t\tnode.isFirstNode = (targetNode[childKey].length == 1);\n\t\t\t} else if (targetNode.isFirstNode && moveType == consts.move.TYPE_PREV) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isFirstNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = true;\n\t\t\t\tnode.isLastNode = false;\n\n\t\t\t} else if (targetNode.isLastNode && moveType == consts.move.TYPE_NEXT) {\n\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\tnewNeighbor = targetNode;\n\t\t\t\tnewNeighbor.isLastNode = false;\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = true;\n\n\t\t\t} else {\n\t\t\t\tif (moveType == consts.move.TYPE_PREV) {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex, 0, node);\n\t\t\t\t} else {\n\t\t\t\t\ttargetParentNode[childKey].splice(tmpTargetIndex + 1, 0, node);\n\t\t\t\t}\n\t\t\t\tnode.parentTId = targetNode.parentTId;\n\t\t\t\tnode.isFirstNode = false;\n\t\t\t\tnode.isLastNode = false;\n\t\t\t}\n\t\t\tdata.fixPIdKeyValue(setting, node);\n\t\t\tdata.setSonNodeLevel(setting, node.getParentNode(), node);\n\n\t\t\t//repair node what been moved\n\t\t\tview.setNodeLineIcos(setting, node);\n\t\t\tview.repairNodeLevelClass(setting, node, oldLevel)\n\n\t\t\t//repair node's old parentNode dom\n\t\t\tif (!setting.data.keep.parent && oldParentNode[childKey].length < 1) {\n\t\t\t\t//old parentNode has no child nodes\n\t\t\t\toldParentNode.isParent = false;\n\t\t\t\toldParentNode.open = false;\n\t\t\t\tvar tmp_ulObj = $$(oldParentNode, consts.id.UL, setting),\n\t\t\t\ttmp_switchObj = $$(oldParentNode, consts.id.SWITCH, setting),\n\t\t\t\ttmp_icoObj = $$(oldParentNode, consts.id.ICON, setting);\n\t\t\t\tview.replaceSwitchClass(oldParentNode, tmp_switchObj, consts.folder.DOCU);\n\t\t\t\tview.replaceIcoClass(oldParentNode, tmp_icoObj, consts.folder.DOCU);\n\t\t\t\ttmp_ulObj.css(\"display\", \"none\");\n\n\t\t\t} else if (oldNeighbor) {\n\t\t\t\t//old neigbor node\n\t\t\t\tview.setNodeLineIcos(setting, oldNeighbor);\n\t\t\t}\n\n\t\t\t//new neigbor node\n\t\t\tif (newNeighbor) {\n\t\t\t\tview.setNodeLineIcos(setting, newNeighbor);\n\t\t\t}\n\n\t\t\t//repair checkbox / radio\n\t\t\tif (!!setting.check && setting.check.enable && view.repairChkClass) {\n\t\t\t\tview.repairChkClass(setting, oldParentNode);\n\t\t\t\tview.repairParentChkClassWithSelf(setting, oldParentNode);\n\t\t\t\tif (oldParentNode != node.parent)\n\t\t\t\t\tview.repairParentChkClassWithSelf(setting, node);\n\t\t\t}\n\n\t\t\t//expand parents after move\n\t\t\tif (!isSilent) {\n\t\t\t\tview.expandCollapseParentNode(setting, node.getParentNode(), true, animateFlag);\n\t\t\t}\n\t\t},\n\t\tremoveEditBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.EDIT, setting).unbind().remove();\n\t\t},\n\t\tremoveRemoveBtn: function(setting, node) {\n\t\t\t$$(node, consts.id.REMOVE, setting).unbind().remove();\n\t\t},\n\t\tremoveTreeDom: function(setting, node) {\n\t\t\tnode.isHover = false;\n\t\t\tview.removeEditBtn(setting, node);\n\t\t\tview.removeRemoveBtn(setting, node);\n\t\t\ttools.apply(setting.view.removeHoverDom, [setting.treeId, node]);\n\t\t},\n\t\trepairNodeLevelClass: function(setting, node, oldLevel) {\n\t\t\tif (oldLevel === node.level) return;\n\t\t\tvar liObj = $$(node, setting),\n\t\t\taObj = $$(node, consts.id.A, setting),\n\t\t\tulObj = $$(node, consts.id.UL, setting),\n\t\t\toldClass = consts.className.LEVEL + oldLevel,\n\t\t\tnewClass = consts.className.LEVEL + node.level;\n\t\t\tliObj.removeClass(oldClass);\n\t\t\tliObj.addClass(newClass);\n\t\t\taObj.removeClass(oldClass);\n\t\t\taObj.addClass(newClass);\n\t\t\tulObj.removeClass(oldClass);\n\t\t\tulObj.addClass(newClass);\n\t\t},\n\t\tselectNodes : function(setting, nodes) {\n\t\t\tfor (var i=0, l=nodes.length; i<l; i++) {\n\t\t\t\tview.selectNode(setting, nodes[i], i>0);\n\t\t\t}\n\t\t}\n\t},\n\n\t_z = {\n\t\ttools: _tools,\n\t\tview: _view,\n\t\tevent: _event,\n\t\tdata: _data\n\t};\n\t$.extend(true, $.fn.zTree.consts, _consts);\n\t$.extend(true, $.fn.zTree._z, _z);\n\n\tvar zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n\tdata.exSetting(_setting);\n\tdata.addInitBind(_bindEvent);\n\tdata.addInitUnBind(_unbindEvent);\n\tdata.addInitCache(_initCache);\n\tdata.addInitNode(_initNode);\n\tdata.addInitProxy(_eventProxy);\n\tdata.addInitRoot(_initRoot);\n\tdata.addZTreeTools(_zTreeTools);\n\n\tvar _cancelPreSelectedNode = view.cancelPreSelectedNode;\n\tview.cancelPreSelectedNode = function (setting, node) {\n\t\tvar list = data.getRoot(setting).curSelectedList;\n\t\tfor (var i=0, j=list.length; i<j; i++) {\n\t\t\tif (!node || node === list[i]) {\n\t\t\t\tview.removeTreeDom(setting, list[i]);\n\t\t\t\tif (node) break;\n\t\t\t}\n\t\t}\n\t\tif (_cancelPreSelectedNode) _cancelPreSelectedNode.apply(view, arguments);\n\t}\n\n\tvar _createNodes = view.createNodes;\n\tview.createNodes = function(setting, level, nodes, parentNode) {\n\t\tif (_createNodes) {\n\t\t\t_createNodes.apply(view, arguments);\n\t\t}\n\t\tif (!nodes) return;\n\t\tif (view.repairParentChkClassWithSelf) {\n\t\t\tview.repairParentChkClassWithSelf(setting, parentNode);\n\t\t}\n\t}\n\n\tvar _makeNodeUrl = view.makeNodeUrl;\n\tview.makeNodeUrl = function(setting, node) {\n\t\treturn setting.edit.enable ? null : (_makeNodeUrl.apply(view, arguments));\n\t}\n\n\tvar _removeNode = view.removeNode;\n\tview.removeNode = function(setting, node) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (root.curEditNode === node) root.curEditNode = null;\n\t\tif (_removeNode) {\n\t\t\t_removeNode.apply(view, arguments);\n\t\t}\n\t}\n\n\tvar _selectNode = view.selectNode;\n\tview.selectNode = function(setting, node, addFlag) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (data.isSelectedNode(setting, node) && root.curEditNode == node && node.editNameFlag) {\n\t\t\treturn false;\n\t\t}\n\t\tif (_selectNode) _selectNode.apply(view, arguments);\n\t\tview.addHoverDom(setting, node);\n\t\treturn true;\n\t}\n\n\tvar _uCanDo = tools.uCanDo;\n\ttools.uCanDo = function(setting, e) {\n\t\tvar root = data.getRoot(setting);\n\t\tif (e && (tools.eqs(e.type, \"mouseover\") || tools.eqs(e.type, \"mouseout\") || tools.eqs(e.type, \"mousedown\") || tools.eqs(e.type, \"mouseup\"))) {\n\t\t\treturn true;\n\t\t}\n\t\tif (root.curEditNode) {\n\t\t\tview.editNodeBlur = false;\n\t\t\troot.curEditInput.focus();\n\t\t}\n\t\treturn (!root.curEditNode) && (_uCanDo ? _uCanDo.apply(view, arguments) : true);\n\t}\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/zTree/jquery.ztree.exhide-3.5.js",
    "content": "/*\n* JQuery zTree exHideNodes v3.5.17\n* http://zTree.me/\n*\n* Copyright (c) 2010 Hunter.z\n*\n* Licensed same as jquery - MIT License\n* http://www.opensource.org/licenses/mit-license.php\n*\n* email: hunter.z@263.net\n* Date: 2014-05-08\n*/\n(function ($) {\n    //default init node of exLib\n    var _initNode = function (setting, level, n, parentNode, isFirstNode, isLastNode, openFlag) {\n        if (typeof n.isHidden == \"string\") n.isHidden = tools.eqs(n.isHidden, \"true\");\n        n.isHidden = !!n.isHidden;\n        data.initHideForExCheck(setting, n);\n    },\n    //add dom for check\n\t_beforeA = function (setting, node, html) { },\n    //update zTreeObj, add method of exLib\n\t_zTreeTools = function (setting, zTreeTools) {\n\t    zTreeTools.showNodes = function (nodes, options) {\n\t        view.showNodes(setting, nodes, options);\n\t    }\n\t    zTreeTools.showNode = function (node, options) {\n\t        if (!node) {\n\t            return;\n\t        }\n\t        view.showNodes(setting, [node], options);\n\t    }\n\t    zTreeTools.hideNodes = function (nodes, options) {\n\t        view.hideNodes(setting, nodes, options);\n\t    }\n\t    zTreeTools.hideNode = function (node, options) {\n\t        if (!node) {\n\t            return;\n\t        }\n\t        view.hideNodes(setting, [node], options);\n\t    }\n\n\t    var _checkNode = zTreeTools.checkNode;\n\t    if (_checkNode) {\n\t        zTreeTools.checkNode = function (node, checked, checkTypeFlag, callbackFlag) {\n\t            if (!!node && !!node.isHidden) {\n\t                return;\n\t            }\n\t            _checkNode.apply(zTreeTools, arguments);\n\t        }\n\t    }\n\t},\n    //method of operate data\n\t_data = {\n\t    initHideForExCheck: function (setting, n) {\n\t        if (n.isHidden && setting.check && setting.check.enable) {\n\t            if (typeof n._nocheck == \"undefined\") {\n\t                n._nocheck = !!n.nocheck\n\t                n.nocheck = true;\n\t            }\n\t            n.check_Child_State = -1;\n\t            if (view.repairParentChkClassWithSelf) {\n\t                view.repairParentChkClassWithSelf(setting, n);\n\t            }\n\t        }\n\t    },\n\t    initShowForExCheck: function (setting, n) {\n\t        if (!n.isHidden && setting.check && setting.check.enable) {\n\t            if (typeof n._nocheck != \"undefined\") {\n\t                n.nocheck = n._nocheck;\n\t                delete n._nocheck;\n\t            }\n\t            if (view.setChkClass) {\n\t                var checkObj = $$(n, consts.id.CHECK, setting);\n\t                view.setChkClass(setting, checkObj, n);\n\t            }\n\t            if (view.repairParentChkClassWithSelf) {\n\t                view.repairParentChkClassWithSelf(setting, n);\n\t            }\n\t        }\n\t    }\n\t},\n    //method of operate ztree dom\n\t_view = {\n\t    clearOldFirstNode: function (setting, node) {\n\t        var n = node.getNextNode();\n\t        while (!!n) {\n\t            if (n.isFirstNode) {\n\t                n.isFirstNode = false;\n\t                view.setNodeLineIcos(setting, n);\n\t                break;\n\t            }\n\t            if (n.isLastNode) {\n\t                break;\n\t            }\n\t            n = n.getNextNode();\n\t        }\n\t    },\n\t    clearOldLastNode: function (setting, node, openFlag) {\n\t        var n = node.getPreNode();\n\t        while (!!n) {\n\t            if (n.isLastNode) {\n\t                n.isLastNode = false;\n\t                if (openFlag) {\n\t                    view.setNodeLineIcos(setting, n);\n\t                }\n\t                break;\n\t            }\n\t            if (n.isFirstNode) {\n\t                break;\n\t            }\n\t            n = n.getPreNode();\n\t        }\n\t    },\n\t    makeDOMNodeMainBefore: function (html, setting, node) {\n\t        html.push(\"<li \", (node.isHidden ? \"style='display:none;' \" : \"\"), \"id='\", node.tId, \"' class='\", consts.className.LEVEL, node.level, \"' tabindex='0' hidefocus='true' treenode>\");\n\t    },\n\t    showNode: function (setting, node, options) {\n\t        node.isHidden = false;\n\t        data.initShowForExCheck(setting, node);\n\t        $$(node, setting).show();\n\t    },\n\t    showNodes: function (setting, nodes, options) {\n\t        if (!nodes || nodes.length == 0) {\n\t            return;\n\t        }\n\t        var pList = {}, i, j;\n\t        for (i = 0, j = nodes.length; i < j; i++) {\n\t            var n = nodes[i];\n\t            if (!pList[n.parentTId]) {\n\t                var pn = n.getParentNode();\n\t                pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n\t            }\n\t            view.showNode(setting, n, options);\n\t        }\n\t        for (var tId in pList) {\n\t            var children = pList[tId][setting.data.key.children];\n\t            view.setFirstNodeForShow(setting, children);\n\t            view.setLastNodeForShow(setting, children);\n\t        }\n\t    },\n\t    hideNode: function (setting, node, options) {\n\t        node.isHidden = true;\n\t        node.isFirstNode = false;\n\t        node.isLastNode = false;\n\t        data.initHideForExCheck(setting, node);\n\t        view.cancelPreSelectedNode(setting, node);\n\t        $$(node, setting).hide();\n\t    },\n\t    hideNodes: function (setting, nodes, options) {\n\t        if (!nodes || nodes.length == 0) {\n\t            return;\n\t        }\n\t        var pList = {}, i, j;\n\t        for (i = 0, j = nodes.length; i < j; i++) {\n\t            var n = nodes[i];\n\t            if ((n.isFirstNode || n.isLastNode) && !pList[n.parentTId]) {\n\t                var pn = n.getParentNode();\n\t                pList[n.parentTId] = (pn === null) ? data.getRoot(setting) : n.getParentNode();\n\t            }\n\t            view.hideNode(setting, n, options);\n\t        }\n\t        for (var tId in pList) {\n\t            var children = pList[tId][setting.data.key.children];\n\t            view.setFirstNodeForHide(setting, children);\n\t            view.setLastNodeForHide(setting, children);\n\t        }\n\t    },\n\t    setFirstNode: function (setting, parentNode) {\n\t        var childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t        if (childLength > 0 && !parentNode[childKey][0].isHidden) {\n\t            parentNode[childKey][0].isFirstNode = true;\n\t        } else if (childLength > 0) {\n\t            view.setFirstNodeForHide(setting, parentNode[childKey]);\n\t        }\n\t    },\n\t    setLastNode: function (setting, parentNode) {\n\t        var childKey = setting.data.key.children, childLength = parentNode[childKey].length;\n\t        if (childLength > 0 && !parentNode[childKey][0].isHidden) {\n\t            parentNode[childKey][childLength - 1].isLastNode = true;\n\t        } else if (childLength > 0) {\n\t            view.setLastNodeForHide(setting, parentNode[childKey]);\n\t        }\n\t    },\n\t    setFirstNodeForHide: function (setting, nodes) {\n\t        var n, i, j;\n\t        for (i = 0, j = nodes.length; i < j; i++) {\n\t            n = nodes[i];\n\t            if (n.isFirstNode) {\n\t                break;\n\t            }\n\t            if (!n.isHidden && !n.isFirstNode) {\n\t                n.isFirstNode = true;\n\t                view.setNodeLineIcos(setting, n);\n\t                break;\n\t            } else {\n\t                n = null;\n\t            }\n\t        }\n\t        return n;\n\t    },\n\t    setFirstNodeForShow: function (setting, nodes) {\n\t        var n, i, j, first, old;\n\t        for (i = 0, j = nodes.length; i < j; i++) {\n\t            n = nodes[i];\n\t            if (!first && !n.isHidden && n.isFirstNode) {\n\t                first = n;\n\t                break;\n\t            } else if (!first && !n.isHidden && !n.isFirstNode) {\n\t                n.isFirstNode = true;\n\t                first = n;\n\t                view.setNodeLineIcos(setting, n);\n\t            } else if (first && n.isFirstNode) {\n\t                n.isFirstNode = false;\n\t                old = n;\n\t                view.setNodeLineIcos(setting, n);\n\t                break;\n\t            } else {\n\t                n = null;\n\t            }\n\t        }\n\t        return { \"new\": first, \"old\": old };\n\t    },\n\t    setLastNodeForHide: function (setting, nodes) {\n\t        var n, i;\n\t        for (i = nodes.length - 1; i >= 0; i--) {\n\t            n = nodes[i];\n\t            if (n.isLastNode) {\n\t                break;\n\t            }\n\t            if (!n.isHidden && !n.isLastNode) {\n\t                n.isLastNode = true;\n\t                view.setNodeLineIcos(setting, n);\n\t                break;\n\t            } else {\n\t                n = null;\n\t            }\n\t        }\n\t        return n;\n\t    },\n\t    setLastNodeForShow: function (setting, nodes) {\n\t        var n, i, j, last, old;\n\t        for (i = nodes.length - 1; i >= 0; i--) {\n\t            n = nodes[i];\n\t            if (!last && !n.isHidden && n.isLastNode) {\n\t                last = n;\n\t                break;\n\t            } else if (!last && !n.isHidden && !n.isLastNode) {\n\t                n.isLastNode = true;\n\t                last = n;\n\t                view.setNodeLineIcos(setting, n);\n\t            } else if (last && n.isLastNode) {\n\t                n.isLastNode = false;\n\t                old = n;\n\t                view.setNodeLineIcos(setting, n);\n\t                break;\n\t            } else {\n\t                n = null;\n\t            }\n\t        }\n\t        return { \"new\": last, \"old\": old };\n\t    }\n\t},\n\n\t_z = {\n\t    view: _view,\n\t    data: _data\n\t};\n    $.extend(true, $.fn.zTree._z, _z);\n\n    var zt = $.fn.zTree,\n\ttools = zt._z.tools,\n\tconsts = zt.consts,\n\tview = zt._z.view,\n\tdata = zt._z.data,\n\tevent = zt._z.event,\n\t$$ = tools.$;\n\n    data.addInitNode(_initNode);\n    data.addBeforeA(_beforeA);\n    data.addZTreeTools(_zTreeTools);\n\n    //\tOverride method in core\n    var _dInitNode = data.initNode;\n    data.initNode = function (setting, level, node, parentNode, isFirstNode, isLastNode, openFlag) {\n        var tmpPNode = (parentNode) ? parentNode : data.getRoot(setting),\n            children = tmpPNode[setting.data.key.children];\n        data.tmpHideFirstNode = view.setFirstNodeForHide(setting, children);\n        data.tmpHideLastNode = view.setLastNodeForHide(setting, children);\n        if (openFlag) {\n            view.setNodeLineIcos(setting, data.tmpHideFirstNode);\n            view.setNodeLineIcos(setting, data.tmpHideLastNode);\n        }\n        isFirstNode = (data.tmpHideFirstNode === node);\n        isLastNode = (data.tmpHideLastNode === node);\n        if (_dInitNode) _dInitNode.apply(data, arguments);\n        if (openFlag && isLastNode) {\n            view.clearOldLastNode(setting, node, openFlag);\n        }\n    };\n\n    var _makeChkFlag = data.makeChkFlag;\n    if (!!_makeChkFlag) {\n        data.makeChkFlag = function (setting, node) {\n            if (!!node && !!node.isHidden) {\n                return;\n            }\n            _makeChkFlag.apply(data, arguments);\n        }\n    }\n\n    var _getTreeCheckedNodes = data.getTreeCheckedNodes;\n    if (!!_getTreeCheckedNodes) {\n        data.getTreeCheckedNodes = function (setting, nodes, checked, results) {\n            if (!!nodes && nodes.length > 0) {\n                var p = nodes[0].getParentNode();\n                if (!!p && !!p.isHidden) {\n                    return [];\n                }\n            }\n            return _getTreeCheckedNodes.apply(data, arguments);\n        }\n    }\n\n    var _getTreeChangeCheckedNodes = data.getTreeChangeCheckedNodes;\n    if (!!_getTreeChangeCheckedNodes) {\n        data.getTreeChangeCheckedNodes = function (setting, nodes, results) {\n            if (!!nodes && nodes.length > 0) {\n                var p = nodes[0].getParentNode();\n                if (!!p && !!p.isHidden) {\n                    return [];\n                }\n            }\n            return _getTreeChangeCheckedNodes.apply(data, arguments);\n        }\n    }\n\n    var _expandCollapseSonNode = view.expandCollapseSonNode;\n    if (!!_expandCollapseSonNode) {\n        view.expandCollapseSonNode = function (setting, node, expandFlag, animateFlag, callback) {\n            if (!!node && !!node.isHidden) {\n                return;\n            }\n            _expandCollapseSonNode.apply(view, arguments);\n        }\n    }\n\n    var _setSonNodeCheckBox = view.setSonNodeCheckBox;\n    if (!!_setSonNodeCheckBox) {\n        view.setSonNodeCheckBox = function (setting, node, value, srcNode) {\n            if (!!node && !!node.isHidden) {\n                return;\n            }\n            _setSonNodeCheckBox.apply(view, arguments);\n        }\n    }\n\n    var _repairParentChkClassWithSelf = view.repairParentChkClassWithSelf;\n    if (!!_repairParentChkClassWithSelf) {\n        view.repairParentChkClassWithSelf = function (setting, node) {\n            if (!!node && !!node.isHidden) {\n                return;\n            }\n            _repairParentChkClassWithSelf.apply(view, arguments);\n        }\n    }\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/js/plugins/zTree/zTreeStyle.css",
    "content": "/*-------------------------------------\nzTree Style\n\nversion:\t3.5.17\nauthor:\t\tHunter.z\nemail:\t\thunter.z@263.net\nwebsite:\thttp://code.google.com/p/jquerytree/\n\n-------------------------------------*/\n\n.ztree * {padding:0; margin:0; font-size:12px; font-family: Verdana, Arial, Helvetica, AppleGothic, sans-serif}\n.ztree {margin:0; padding:5px 5px 40px; color:#333; display:table;}\n.ztree li{padding:0; margin:0; list-style:none; line-height:22px; text-align:left; white-space:nowrap; outline:0;}\n.ztree li ul{ margin:0; padding:0 0 0 18px}\n.ztree li ul.line{ background:url(./img/line_conn.gif) 0 0 repeat-y;}\n\n.ztree li a {padding:1px 15px 0 0; margin:0; cursor:pointer; color:#333; background-color: transparent;\n\ttext-decoration:none; vertical-align:top; display: inline-block; z-index: 10; background:#fff;}\n.ztree li a:hover {text-decoration:underline}\n.ztree li a.curSelectedNode {padding-top:0px; background-color:#eef3f9; color:black; opacity:0.8;}\n.ztree li a.curSelectedNode_Edit {padding-top:0px; background-color:#eef3f9; color:black; height:22px;  opacity:0.8;}\n.ztree li a.tmpTargetNode_inner {padding-top:0px; background-color:#316AC5; color:white; height:22px; border:1px #316AC5 solid;\n\topacity:0.8; filter:alpha(opacity=80)}\n.ztree li a.tmpTargetNode_prev {}\n.ztree li a.tmpTargetNode_next {}\n.ztree li a input.rename {height:22px; width:80px; padding:0; margin:0;\n\tfont-size:12px; border:1px #7EC4CC solid; *border:0px}\n.ztree li span {line-height:22px; margin-right:2px;}\n.ztree li span.button {line-height:0; margin:0; width:16px; height:22px; display: inline-block; vertical-align:middle;border:0 none; cursor: pointer;outline:none;background-color:transparent; background-repeat:no-repeat; background-attachment: scroll;background-image:url(\"./img/button.png\"); *background-image:url(\"./img/button.gif\")}\n.ztree li span.button.chk {width:13px; height:13px; margin:0 3px 0 0; cursor: auto}\n.ztree li span.button.chk.checkbox_false_full {background-position:0 -200px;}\n.ztree li span.button.chk.checkbox_false_full_focus {background-position:0 -244px}\n.ztree li span.button.chk.checkbox_false_part {background-position:0 -288px;}\n.ztree li span.button.chk.checkbox_false_part_focus {background-position:0 -332px}\n.ztree li span.button.chk.checkbox_false_disable {background-position:0 -56px}\n.ztree li span.button.chk.checkbox_true_full {background-position:0px -222px}\n.ztree li span.button.chk.checkbox_true_full_focus {background-position:0px -266px}\n.ztree li span.button.chk.checkbox_true_part {background-position:0px -310px}\n.ztree li span.button.chk.checkbox_true_part_focus {background-position:-0px -354px}\n.ztree li span.button.chk.checkbox_true_disable {background-position:0px -398px}\n.ztree li span.button.chk.radio_false_full {background-position:-28px 0}\n.ztree li span.button.chk.radio_false_full_focus {background-position:-28px -14px}\n.ztree li span.button.chk.radio_false_part {background-position:-28px -28px}\n.ztree li span.button.chk.radio_false_part_focus {background-position:-28px -42px}\n.ztree li span.button.chk.radio_false_disable {background-position:-28px -56px}\n.ztree li span.button.chk.radio_true_full {background-position:-42px 0}\n.ztree li span.button.chk.radio_true_full_focus {background-position:-42px -14px}\n.ztree li span.button.chk.radio_true_part {background-position:-42px -28px}\n.ztree li span.button.chk.radio_true_part_focus {background-position:-42px -42px}\n.ztree li span.button.chk.radio_true_disable {background-position:-42px -56px}\n.ztree li span.button.switch {width:22px; height:22px}\n.ztree li span.button.root_open{background-position:0px -44px}\n.ztree li span.button.root_close{background-position:0px -66px}\n.ztree li span.button.roots_open{background-position:0px -44px}\n.ztree li span.button.roots_close{background-position:0px -66px}\n.ztree li span.button.center_open{background-position:0px -44px}\n.ztree li span.button.center_close{background-position:0px -66px}\n.ztree li span.button.bottom_open{background-position:0px -44px}\n.ztree li span.button.bottom_close{background-position:-0px -66px}\n.ztree li span.button.noline_open{background-position:-92px -72px}\n.ztree li span.button.noline_close{background-position:-74px -72px}\n.ztree li span.button.root_docu{ background:none;}\n.ztree li span.button.roots_docu{background-position:-56px 0}\n.ztree li span.button.center_docu{background-position:-56px -18px}\n.ztree li span.button.bottom_docu{background-position:-56px -36px}\n.ztree li span.button.noline_docu{ background:none;}\n.ztree li span.button.ico_open{margin-right:2px; background-position:0px 0px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_close{margin-right:2px; background-position:0px -176px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.ico_docu{margin-right:2px; background-position:0px -22px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.edit {margin-right:2px; background-position:12px -132px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.remove {margin-right:2px; background-position:12px -154px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.import {margin-right:2px; background-position:12px -88px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.add {margin-left:2px; margin-right: -1px; background-position:12px -110px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.list {margin-right:2px; background-position:12px -176px; vertical-align:top; *vertical-align:middle}\n.ztree li span.button.page {margin-left:2px; background-position:12px -22px; vertical-align:top; *vertical-align:middle}\n\n#tagwords li span {line-height:22px; margin-right:2px}\n#tagwords li span.button {line-height:0; margin:0; width:16px; height:22px; display: inline-block; vertical-align:middle;\n\tborder:0 none; cursor: pointer;outline:none;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-image:url(\"./img/button.png\"); *background-image:url(\"./img/button.gif\")}\n#tagwords li span.button.remove {margin-right:2px; background-position:5px -154px;; vertical-align:top; *vertical-align:middle}\n\n.ztree li span.button.ico_loading{margin-right:2px; background:url(./img/loading.gif) no-repeat scroll 0 0 transparent; vertical-align:top; *vertical-align:middle}\n\nul.tmpTargetzTree {background-color:#FFE6B0; opacity:0.8; filter:alpha(opacity=80)}\n\nspan.tmpzTreeMove_arrow {width:16px; height:22px; display: inline-block; padding:0; margin:2px 0 0 1px; border:0 none; position:absolute;\n\tbackground-color:transparent; background-repeat:no-repeat; background-attachment: scroll;\n\tbackground-position:-110px -80px; background-image:url(\"./img/button.png\"); *background-image:url(\"./img/button.gif\")}\n\nul.ztree.zTreeDragUL {margin:0; padding:0; position:absolute; width:auto; height:auto;overflow:hidden; background-color:#cfcfcf; border:1px #00B83F dotted; opacity:0.8; filter:alpha(opacity=80)}\n.zTreeMask {z-index:10000; background-color:#cfcfcf; opacity:0.0; filter:alpha(opacity=0); position:absolute}\n.ztree li .show_tabs{ display:table; position:absolute; top:0px; border:1px solid #ccd1d6; border-bottom:none; background:#fff;z-index:1000;}\n.ztree li  .show_tabs span.button{padding:0px; margin:0px; width:110px; text-align:center; float:none;line-height:22px; display:block; text-decoration:none; border-bottom:1px solid #ccd1d6; font-size:12px;padding-left:15px;}\n.ztree li .show_tabs span.button:hover{background-color:#eef3f9;}\n/* level style*/\n/*.ztree li span.button.level0 {\n\tdisplay:none;\n}\n.ztree li ul.level0 {\n\tpadding:0;\n\tbackground:none;\n}*/\n"
  },
  {
    "path": "public/assets/dashboard/js/xss.js",
    "content": "(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require==\"function\"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error(\"Cannot find module '\"+o+\"'\");throw f.code=\"MODULE_NOT_FOUND\",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require==\"function\"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){\n    /**\n     * 默认配置\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var FilterCSS = require('cssfilter').FilterCSS;\n    var getDefaultCSSWhiteList = require('cssfilter').getDefaultWhiteList;\n    var _ = require('./util');\n\n// 默认白名单\n    function getDefaultWhiteList () {\n        return {\n            a:      ['target', 'href', 'title'],\n            abbr:   ['title'],\n            address: [],\n            area:   ['shape', 'coords', 'href', 'alt'],\n            article: [],\n            aside:  [],\n            audio:  ['autoplay', 'controls', 'loop', 'preload', 'src'],\n            b:      [],\n            bdi:    ['dir'],\n            bdo:    ['dir'],\n            big:    [],\n            blockquote: ['cite'],\n            br:     [],\n            caption: [],\n            center: [],\n            cite:   [],\n            code:   [],\n            col:    ['align', 'valign', 'span', 'width'],\n            colgroup: ['align', 'valign', 'span', 'width'],\n            dd:     [],\n            del:    ['datetime'],\n            details: ['open'],\n            div:    [],\n            dl:     [],\n            dt:     [],\n            em:     [],\n            font:   ['color', 'size', 'face'],\n            footer: [],\n            h1:     [],\n            h2:     [],\n            h3:     [],\n            h4:     [],\n            h5:     [],\n            h6:     [],\n            header: [],\n            hr:     [],\n            i:      [],\n            img:    ['src', 'alt', 'title', 'width', 'height'],\n            ins:    ['datetime'],\n            li:     [],\n            mark:   [],\n            nav:    [],\n            ol:     [],\n            p:      [],\n            pre:    [],\n            s:      [],\n            section:[],\n            small:  [],\n            span:   [],\n            sub:    [],\n            sup:    [],\n            strong: [],\n            table:  ['width', 'border', 'align', 'valign'],\n            tbody:  ['align', 'valign'],\n            td:     ['width', 'rowspan', 'colspan', 'align', 'valign'],\n            tfoot:  ['align', 'valign'],\n            th:     ['width', 'rowspan', 'colspan', 'align', 'valign'],\n            thead:  ['align', 'valign'],\n            tr:     ['rowspan', 'align', 'valign'],\n            tt:     [],\n            u:      [],\n            ul:     [],\n            video:  ['autoplay', 'controls', 'loop', 'preload', 'src', 'height', 'width']\n        };\n    }\n\n// 默认CSS Filter\n    var defaultCSSFilter = new FilterCSS();\n\n    /**\n     * 匹配到标签时的处理方法\n     *\n     * @param {String} tag\n     * @param {String} html\n     * @param {Object} options\n     * @return {String}\n     */\n    function onTag (tag, html, options) {\n        // do nothing\n    }\n\n    /**\n     * 匹配到不在白名单上的标签时的处理方法\n     *\n     * @param {String} tag\n     * @param {String} html\n     * @param {Object} options\n     * @return {String}\n     */\n    function onIgnoreTag (tag, html, options) {\n        // do nothing\n    }\n\n    /**\n     * 匹配到标签属性时的处理方法\n     *\n     * @param {String} tag\n     * @param {String} name\n     * @param {String} value\n     * @return {String}\n     */\n    function onTagAttr (tag, name, value) {\n        // do nothing\n    }\n\n    /**\n     * 匹配到不在白名单上的标签属性时的处理方法\n     *\n     * @param {String} tag\n     * @param {String} name\n     * @param {String} value\n     * @return {String}\n     */\n    function onIgnoreTagAttr (tag, name, value) {\n        // do nothing\n    }\n\n    /**\n     * HTML转义\n     *\n     * @param {String} html\n     */\n    function escapeHtml (html) {\n        return html.replace(REGEXP_LT, '&lt;').replace(REGEXP_GT, '&gt;');\n    }\n\n    /**\n     * 安全的标签属性值\n     *\n     * @param {String} tag\n     * @param {String} name\n     * @param {String} value\n     * @param {Object} cssFilter\n     * @return {String}\n     */\n    function safeAttrValue (tag, name, value, cssFilter) {\n        // 转换为友好的属性值，再做判断\n        value = friendlyAttrValue(value);\n\n        if (name === 'href' || name === 'src') {\n            // 过滤 href 和 src 属性\n            // 仅允许 http:// | https:// | mailto: | / | # 开头的地址\n            value = _.trim(value);\n            if (value === '#') return '#';\n            if (!(value.substr(0, 7) === 'http://' ||\n                value.substr(0, 8) === 'https://' ||\n                value.substr(0, 7) === 'mailto:' ||\n                value[0] === '#' ||\n                value[0] === '/')) {\n                return '';\n            }\n        } else if (name === 'background') {\n            // 过滤 background 属性 （这个xss漏洞较老了，可能已经不适用）\n            // javascript:\n            REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n            if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n                return '';\n            }\n        } else if (name === 'style') {\n            // /*注释*/\n            /*REGEXP_DEFAULT_ON_TAG_ATTR_3.lastIndex = 0;\n             if (REGEXP_DEFAULT_ON_TAG_ATTR_3.test(value)) {\n             return '';\n             }*/\n            // expression()\n            REGEXP_DEFAULT_ON_TAG_ATTR_7.lastIndex = 0;\n            if (REGEXP_DEFAULT_ON_TAG_ATTR_7.test(value)) {\n                return '';\n            }\n            // url()\n            REGEXP_DEFAULT_ON_TAG_ATTR_8.lastIndex = 0;\n            if (REGEXP_DEFAULT_ON_TAG_ATTR_8.test(value)) {\n                REGEXP_DEFAULT_ON_TAG_ATTR_4.lastIndex = 0;\n                if (REGEXP_DEFAULT_ON_TAG_ATTR_4.test(value)) {\n                    return '';\n                }\n            }\n            if (cssFilter !== false) {\n                cssFilter = cssFilter || defaultCSSFilter;\n                value = cssFilter.process(value);\n            }\n        }\n\n        // 输出时需要转义<>\"\n        value = escapeAttrValue(value);\n        return value;\n    }\n\n// 正则表达式\n    var REGEXP_LT = /</g;\n    var REGEXP_GT = />/g;\n    var REGEXP_QUOTE = /\"/g;\n    var REGEXP_QUOTE_2 = /&quot;/g;\n    var REGEXP_ATTR_VALUE_1 = /&#([a-zA-Z0-9]*);?/img;\n    var REGEXP_ATTR_VALUE_COLON = /&colon;?/img;\n    var REGEXP_ATTR_VALUE_NEWLINE = /&newline;?/img;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_3 = /\\/\\*|\\*\\//mg;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_4 = /((j\\s*a\\s*v\\s*a|v\\s*b|l\\s*i\\s*v\\s*e)\\s*s\\s*c\\s*r\\s*i\\s*p\\s*t\\s*|m\\s*o\\s*c\\s*h\\s*a)\\:/ig;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_5 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:/ig;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_6 = /^[\\s\"'`]*(d\\s*a\\s*t\\s*a\\s*)\\:\\s*image\\//ig;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_7 = /e\\s*x\\s*p\\s*r\\s*e\\s*s\\s*s\\s*i\\s*o\\s*n\\s*\\(.*/ig;\n    var REGEXP_DEFAULT_ON_TAG_ATTR_8 = /u\\s*r\\s*l\\s*\\(.*/ig;\n\n    /**\n     * 对双引号进行转义\n     *\n     * @param {String} str\n     * @return {String} str\n     */\n    function escapeQuote (str) {\n        return str.replace(REGEXP_QUOTE, '&quot;');\n    }\n\n    /**\n     * 对双引号进行转义\n     *\n     * @param {String} str\n     * @return {String} str\n     */\n    function unescapeQuote (str) {\n        return str.replace(REGEXP_QUOTE_2, '\"');\n    }\n\n    /**\n     * 对html实体编码进行转义\n     *\n     * @param {String} str\n     * @return {String}\n     */\n    function escapeHtmlEntities (str) {\n        return str.replace(REGEXP_ATTR_VALUE_1, function replaceUnicode (str, code) {\n            return (code[0] === 'x' || code[0] === 'X')\n                ? String.fromCharCode(parseInt(code.substr(1), 16))\n                : String.fromCharCode(parseInt(code, 10));\n        });\n    }\n\n    /**\n     * 对html5新增的危险实体编码进行转义\n     *\n     * @param {String} str\n     * @return {String}\n     */\n    function escapeDangerHtml5Entities (str) {\n        return str.replace(REGEXP_ATTR_VALUE_COLON, ':')\n            .replace(REGEXP_ATTR_VALUE_NEWLINE, ' ');\n    }\n\n    /**\n     * 清除不可见字符\n     *\n     * @param {String} str\n     * @return {String}\n     */\n    function clearNonPrintableCharacter (str) {\n        var str2 = '';\n        for (var i = 0, len = str.length; i < len; i++) {\n            str2 += str.charCodeAt(i) < 32 ? ' ' : str.charAt(i);\n        }\n        return _.trim(str2);\n    }\n\n    /**\n     * 将标签的属性值转换成一般字符，便于分析\n     *\n     * @param {String} str\n     * @return {String}\n     */\n    function friendlyAttrValue (str) {\n        str = unescapeQuote(str);             // 双引号\n        str = escapeHtmlEntities(str);         // 转换HTML实体编码\n        str = escapeDangerHtml5Entities(str);  // 转换危险的HTML5新增实体编码\n        str = clearNonPrintableCharacter(str); // 清除不可见字符\n        return str;\n    }\n\n    /**\n     * 转义用于输出的标签属性值\n     *\n     * @param {String} str\n     * @return {String}\n     */\n    function escapeAttrValue (str) {\n        str = escapeQuote(str);\n        str = escapeHtml(str);\n        return str;\n    }\n\n    /**\n     * 去掉不在白名单中的标签onIgnoreTag处理方法\n     */\n    function onIgnoreTagStripAll () {\n        return '';\n    }\n\n    /**\n     * 删除标签体\n     *\n     * @param {array} tags 要删除的标签列表\n     * @param {function} next 对不在列表中的标签的处理函数，可选\n     */\n    function StripTagBody (tags, next) {\n        if (typeof(next) !== 'function') {\n            next = function () {};\n        }\n\n        var isRemoveAllTag = !Array.isArray(tags);\n        function isRemoveTag (tag) {\n            if (isRemoveAllTag) return true;\n            return (_.indexOf(tags, tag) !== -1);\n        }\n\n        var removeList = [];   // 要删除的位置范围列表\n        var posStart = false;  // 当前标签开始位置\n\n        return {\n            onIgnoreTag: function (tag, html, options) {\n                if (isRemoveTag(tag)) {\n                    if (options.isClosing) {\n                        var ret = '[/removed]';\n                        var end = options.position + ret.length;\n                        removeList.push([posStart !== false ? posStart : options.position, end]);\n                        posStart = false;\n                        return ret;\n                    } else {\n                        if (!posStart) {\n                            posStart = options.position;\n                        }\n                        return '[removed]';\n                    }\n                } else {\n                    return next(tag, html, options);\n                }\n            },\n            remove: function (html) {\n                var rethtml = '';\n                var lastPos = 0;\n                _.forEach(removeList, function (pos) {\n                    rethtml += html.slice(lastPos, pos[0]);\n                    lastPos = pos[1];\n                });\n                rethtml += html.slice(lastPos);\n                return rethtml;\n            }\n        };\n    }\n\n    /**\n     * 去除备注标签\n     *\n     * @param {String} html\n     * @return {String}\n     */\n    function stripCommentTag (html) {\n        return html.replace(STRIP_COMMENT_TAG_REGEXP, '');\n    }\n    var STRIP_COMMENT_TAG_REGEXP = /<!--[\\s\\S]*?-->/g;\n\n    /**\n     * 去除不可见字符\n     *\n     * @param {String} html\n     * @return {String}\n     */\n    function stripBlankChar (html) {\n        var chars = html.split('');\n        chars = chars.filter(function (char) {\n            var c = char.charCodeAt(0);\n            if (c === 127) return false;\n            if (c <= 31) {\n                if (c === 10 || c === 13) return true;\n                return false;\n            }\n            return true;\n        });\n        return chars.join('');\n    }\n\n\n    exports.whiteList = getDefaultWhiteList();\n    exports.getDefaultWhiteList = getDefaultWhiteList;\n    exports.onTag = onTag;\n    exports.onIgnoreTag = onIgnoreTag;\n    exports.onTagAttr = onTagAttr;\n    exports.onIgnoreTagAttr = onIgnoreTagAttr;\n    exports.safeAttrValue = safeAttrValue;\n    exports.escapeHtml = escapeHtml;\n    exports.escapeQuote = escapeQuote;\n    exports.unescapeQuote = unescapeQuote;\n    exports.escapeHtmlEntities = escapeHtmlEntities;\n    exports.escapeDangerHtml5Entities = escapeDangerHtml5Entities;\n    exports.clearNonPrintableCharacter = clearNonPrintableCharacter;\n    exports.friendlyAttrValue = friendlyAttrValue;\n    exports.escapeAttrValue = escapeAttrValue;\n    exports.onIgnoreTagStripAll = onIgnoreTagStripAll;\n    exports.StripTagBody = StripTagBody;\n    exports.stripCommentTag = stripCommentTag;\n    exports.stripBlankChar = stripBlankChar;\n    exports.cssFilter = defaultCSSFilter;\n    exports.getDefaultCSSWhiteList = getDefaultCSSWhiteList;\n\n},{\"./util\":4,\"cssfilter\":8}],2:[function(require,module,exports){\n    /**\n     * 模块入口\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var DEFAULT = require('./default');\n    var parser = require('./parser');\n    var FilterXSS = require('./xss');\n\n\n    /**\n     * XSS过滤\n     *\n     * @param {String} html 要过滤的HTML代码\n     * @param {Object} options 选项：whiteList, onTag, onTagAttr, onIgnoreTag, onIgnoreTagAttr, safeAttrValue, escapeHtml\n     * @return {String}\n     */\n    function filterXSS (html, options) {\n        var xss = new FilterXSS(options);\n        return xss.process(html);\n    }\n\n\n// 输出\n    exports = module.exports = filterXSS;\n    exports.FilterXSS = FilterXSS;\n    for (var i in DEFAULT) exports[i] = DEFAULT[i];\n    for (var i in parser) exports[i] = parser[i];\n\n\n// 在浏览器端使用\n    if (typeof window !== 'undefined') {\n        window.filterXSS = module.exports;\n    }\n\n},{\"./default\":1,\"./parser\":3,\"./xss\":5}],3:[function(require,module,exports){\n    /**\n     * 简单 HTML Parser\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var _ = require('./util');\n\n    /**\n     * 获取标签的名称\n     *\n     * @param {String} html 如：'<a hef=\"#\">'\n     * @return {String}\n     */\n    function getTagName (html) {\n        var i = html.indexOf(' ');\n        if (i === -1) {\n            var tagName = html.slice(1, -1);\n        } else {\n            var tagName = html.slice(1, i + 1);\n        }\n        tagName = _.trim(tagName).toLowerCase();\n        if (tagName.slice(0, 1) === '/') tagName = tagName.slice(1);\n        if (tagName.slice(-1) === '/') tagName = tagName.slice(0, -1);\n        return tagName;\n    }\n\n    /**\n     * 是否为闭合标签\n     *\n     * @param {String} html 如：'<a hef=\"#\">'\n     * @return {Boolean}\n     */\n    function isClosing (html) {\n        return (html.slice(0, 2) === '</');\n    }\n\n    /**\n     * 分析HTML代码，调用相应的函数处理，返回处理后的HTML\n     *\n     * @param {String} html\n     * @param {Function} onTag 处理标签的函数\n     *   参数格式： function (sourcePosition, position, tag, html, isClosing)\n     * @param {Function} escapeHtml 对HTML进行转义的函数\n     * @return {String}\n     */\n    function parseTag (html, onTag, escapeHtml) {\n        'user strict';\n\n        var rethtml = '';        // 待返回的HTML\n        var lastPos = 0;         // 上一个标签结束位置\n        var tagStart = false;    // 当前标签开始位置\n        var quoteStart = false;  // 引号开始位置\n        var currentPos = 0;      // 当前位置\n        var len = html.length;   // HTML长度\n        var currentHtml = '';    // 当前标签的HTML代码\n        var currentTagName = ''; // 当前标签的名称\n\n        // 逐个分析字符\n        for (currentPos = 0; currentPos < len; currentPos++) {\n            var c = html.charAt(currentPos);\n            if (tagStart === false) {\n                if (c === '<') {\n                    tagStart = currentPos;\n                    continue;\n                }\n            } else {\n                if (quoteStart === false) {\n                    if (c === '<') {\n                        rethtml += escapeHtml(html.slice(lastPos, currentPos));\n                        tagStart = currentPos;\n                        lastPos = currentPos;\n                        continue;\n                    }\n                    if (c === '>') {\n                        rethtml += escapeHtml(html.slice(lastPos, tagStart));\n                        currentHtml = html.slice(tagStart, currentPos + 1);\n                        currentTagName = getTagName(currentHtml);\n                        rethtml += onTag(tagStart,\n                            rethtml.length,\n                            currentTagName,\n                            currentHtml,\n                            isClosing(currentHtml));\n                        lastPos = currentPos + 1;\n                        tagStart = false;\n                        continue;\n                    }\n                    // HTML标签内的引号仅当前一个字符是等于号时才有效\n                    if ((c === '\"' || c === \"'\") && html.charAt(currentPos - 1) === '=') {\n                        quoteStart = c;\n                        continue;\n                    }\n                } else {\n                    if (c === quoteStart) {\n                        quoteStart = false;\n                        continue;\n                    }\n                }\n            }\n        }\n        if (lastPos < html.length) {\n            rethtml += escapeHtml(html.substr(lastPos));\n        }\n\n        return rethtml;\n    }\n\n// 不符合属性名称规则的正则表达式\n    var REGEXP_ATTR_NAME = /[^a-zA-Z0-9_:\\.\\-]/img;\n\n    /**\n     * 分析标签HTML代码，调用相应的函数处理，返回HTML\n     *\n     * @param {String} html 如标签'<a href=\"#\" target=\"_blank\">' 则为 'href=\"#\" target=\"_blank\"'\n     * @param {Function} onAttr 处理属性值的函数\n     *   函数格式： function (name, value)\n     * @return {String}\n     */\n    function parseAttr (html, onAttr) {\n        'user strict';\n\n        var lastPos = 0;        // 当前位置\n        var retAttrs = [];      // 待返回的属性列表\n        var tmpName = false;    // 临时属性名称\n        var len = html.length;  // HTML代码长度\n\n        function addAttr (name, value) {\n            name = _.trim(name);\n            name = name.replace(REGEXP_ATTR_NAME, '').toLowerCase();\n            if (name.length < 1) return;\n            var ret = onAttr(name, value || '');\n            if (ret) retAttrs.push(ret);\n        };\n\n        // 逐个分析字符\n        for (var i = 0; i < len; i++) {\n            var c = html.charAt(i);\n            var v, j;\n            if (tmpName === false && c === '=') {\n                tmpName = html.slice(lastPos, i);\n                lastPos = i + 1;\n                continue;\n            }\n            if (tmpName !== false) {\n                // HTML标签内的引号仅当前一个字符是等于号时才有效\n                if (i === lastPos && (c === '\"' || c === \"'\") && html.charAt(i - 1) === '=') {\n                    j = html.indexOf(c, i + 1);\n                    if (j === -1) {\n                        break;\n                    } else {\n                        v = _.trim(html.slice(lastPos + 1, j));\n                        addAttr(tmpName, v);\n                        tmpName = false;\n                        i = j;\n                        lastPos = i + 1;\n                        continue;\n                    }\n                }\n            }\n            if (c === ' ') {\n                if (tmpName === false) {\n                    j = findNextEqual(html, i);\n                    if (j === -1) {\n                        v = _.trim(html.slice(lastPos, i));\n                        addAttr(v);\n                        tmpName = false;\n                        lastPos = i + 1;\n                        continue;\n                    } else {\n                        i = j - 1;\n                        continue;\n                    }\n                } else {\n                    j = findBeforeEqual(html, i - 1);\n                    if (j === -1) {\n                        v = _.trim(html.slice(lastPos, i));\n                        v = stripQuoteWrap(v);\n                        addAttr(tmpName, v);\n                        tmpName = false;\n                        lastPos = i + 1;\n                        continue;\n                    } else {\n                        continue;\n                    }\n                }\n            }\n        }\n\n        if (lastPos < html.length) {\n            if (tmpName === false) {\n                addAttr(html.slice(lastPos));\n            } else {\n                addAttr(tmpName, stripQuoteWrap(_.trim(html.slice(lastPos))));\n            }\n        }\n\n        return _.trim(retAttrs.join(' '));\n    }\n\n    function findNextEqual (str, i) {\n        for (; i < str.length; i++) {\n            var c = str[i];\n            if (c === ' ') continue;\n            if (c === '=') return i;\n            return -1;\n        }\n    }\n\n    function findBeforeEqual (str, i) {\n        for (; i > 0; i--) {\n            var c = str[i];\n            if (c === ' ') continue;\n            if (c === '=') return i;\n            return -1;\n        }\n    }\n\n    function isQuoteWrapString (text) {\n        if ((text[0] === '\"' && text[text.length - 1] === '\"') ||\n            (text[0] === '\\'' && text[text.length - 1] === '\\'')) {\n            return true;\n        } else {\n            return false;\n        }\n    };\n\n    function stripQuoteWrap (text) {\n        if (isQuoteWrapString(text)) {\n            return text.substr(1, text.length - 2);\n        } else {\n            return text;\n        }\n    };\n\n\n    exports.parseTag = parseTag;\n    exports.parseAttr = parseAttr;\n\n},{\"./util\":4}],4:[function(require,module,exports){\n    module.exports = {\n        indexOf: function (arr, item) {\n            var i, j;\n            if (Array.prototype.indexOf) {\n                return arr.indexOf(item);\n            }\n            for (i = 0, j = arr.length; i < j; i++) {\n                if (arr[i] === item) {\n                    return i;\n                }\n            }\n            return -1;\n        },\n        forEach: function (arr, fn, scope) {\n            var i, j;\n            if (Array.prototype.forEach) {\n                return arr.forEach(fn, scope);\n            }\n            for (i = 0, j = arr.length; i < j; i++) {\n                fn.call(scope, arr[i], i, arr);\n            }\n        },\n        trim: function (str) {\n            if (String.prototype.trim) {\n                return str.trim();\n            }\n            return str.replace(/(^\\s*)|(\\s*$)/g, '');\n        }\n    };\n\n},{}],5:[function(require,module,exports){\n    /**\n     * 过滤XSS\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var FilterCSS = require('cssfilter').FilterCSS;\n    var DEFAULT = require('./default');\n    var parser = require('./parser');\n    var parseTag = parser.parseTag;\n    var parseAttr = parser.parseAttr;\n    var _ = require('./util');\n\n\n    /**\n     * 返回值是否为空\n     *\n     * @param {Object} obj\n     * @return {Boolean}\n     */\n    function isNull (obj) {\n        return (obj === undefined || obj === null);\n    }\n\n    /**\n     * 取标签内的属性列表字符串\n     *\n     * @param {String} html\n     * @return {Object}\n     *   - {String} html\n     *   - {Boolean} closing\n     */\n    function getAttrs (html) {\n        var i = html.indexOf(' ');\n        if (i === -1) {\n            return {\n                html:    '',\n                closing: (html[html.length - 2] === '/')\n            };\n        }\n        html = _.trim(html.slice(i + 1, -1));\n        var isClosing = (html[html.length - 1] === '/');\n        if (isClosing) html = _.trim(html.slice(0, -1));\n        return {\n            html:    html,\n            closing: isClosing\n        };\n    }\n\n    /**\n     * 浅拷贝对象\n     *\n     * @param {Object} obj\n     * @return {Object}\n     */\n    function shallowCopyObject (obj) {\n        var ret = {};\n        for (var i in obj) {\n            ret[i] = obj[i];\n        }\n        return ret;\n    }\n\n    /**\n     * XSS过滤对象\n     *\n     * @param {Object} options\n     *   选项：whiteList, onTag, onTagAttr, onIgnoreTag,\n     *        onIgnoreTagAttr, safeAttrValue, escapeHtml\n     *        stripIgnoreTagBody, allowCommentTag, stripBlankChar\n     *        css{whiteList, onAttr, onIgnoreAttr} css=false表示禁用cssfilter\n     */\n    function FilterXSS (options) {\n        options = shallowCopyObject(options || {});\n\n        if (options.stripIgnoreTag) {\n            if (options.onIgnoreTag) {\n                console.error('Notes: cannot use these two options \"stripIgnoreTag\" and \"onIgnoreTag\" at the same time');\n            }\n            options.onIgnoreTag = DEFAULT.onIgnoreTagStripAll;\n        }\n\n        options.whiteList = options.whiteList || DEFAULT.whiteList;\n        options.onTag = options.onTag || DEFAULT.onTag;\n        options.onTagAttr = options.onTagAttr || DEFAULT.onTagAttr;\n        options.onIgnoreTag = options.onIgnoreTag || DEFAULT.onIgnoreTag;\n        options.onIgnoreTagAttr = options.onIgnoreTagAttr || DEFAULT.onIgnoreTagAttr;\n        options.safeAttrValue = options.safeAttrValue || DEFAULT.safeAttrValue;\n        options.escapeHtml = options.escapeHtml || DEFAULT.escapeHtml;\n        this.options = options;\n\n        if (options.css === false) {\n            this.cssFilter = false;\n        } else {\n            options.css = options.css || {};\n            this.cssFilter = new FilterCSS(options.css);\n        }\n    }\n\n    /**\n     * 开始处理\n     *\n     * @param {String} html\n     * @return {String}\n     */\n    FilterXSS.prototype.process = function (html) {\n        // 兼容各种奇葩输入\n        html = html || '';\n        html = html.toString();\n        if (!html) return '';\n\n        var me = this;\n        var options = me.options;\n        var whiteList = options.whiteList;\n        var onTag = options.onTag;\n        var onIgnoreTag = options.onIgnoreTag;\n        var onTagAttr = options.onTagAttr;\n        var onIgnoreTagAttr = options.onIgnoreTagAttr;\n        var safeAttrValue = options.safeAttrValue;\n        var escapeHtml = options.escapeHtml;\n        var cssFilter = me.cssFilter;\n\n        // 是否清除不可见字符\n        if (options.stripBlankChar) {\n            html = DEFAULT.stripBlankChar(html);\n        }\n\n        // 是否禁止备注标签\n        if (!options.allowCommentTag) {\n            html = DEFAULT.stripCommentTag(html);\n        }\n\n        // 如果开启了stripIgnoreTagBody\n        var stripIgnoreTagBody = false;\n        if (options.stripIgnoreTagBody) {\n            var stripIgnoreTagBody = DEFAULT.StripTagBody(options.stripIgnoreTagBody, onIgnoreTag);\n            onIgnoreTag = stripIgnoreTagBody.onIgnoreTag;\n        }\n\n        var retHtml = parseTag(html, function (sourcePosition, position, tag, html, isClosing) {\n            var info = {\n                sourcePosition: sourcePosition,\n                position:       position,\n                isClosing:      isClosing,\n                isWhite:        (tag in whiteList)\n            };\n\n            // 调用onTag处理\n            var ret = onTag(tag, html, info);\n            if (!isNull(ret)) return ret;\n\n            // 默认标签处理方法\n            if (info.isWhite) {\n                // 白名单标签，解析标签属性\n                // 如果是闭合标签，则不需要解析属性\n                if (info.isClosing) {\n                    return '</' + tag + '>';\n                }\n\n                var attrs = getAttrs(html);\n                var whiteAttrList = whiteList[tag];\n                var attrsHtml = parseAttr(attrs.html, function (name, value) {\n\n                    // 调用onTagAttr处理\n                    var isWhiteAttr = (_.indexOf(whiteAttrList, name) !== -1);\n                    var ret = onTagAttr(tag, name, value, isWhiteAttr);\n                    if (!isNull(ret)) return ret;\n\n                    // 默认的属性处理方法\n                    if (isWhiteAttr) {\n                        // 白名单属性，调用safeAttrValue过滤属性值\n                        value = safeAttrValue(tag, name, value, cssFilter);\n                        if (value) {\n                            return name + '=\"' + value + '\"';\n                        } else {\n                            return name;\n                        }\n                    } else {\n                        // 非白名单属性，调用onIgnoreTagAttr处理\n                        var ret = onIgnoreTagAttr(tag, name, value, isWhiteAttr);\n                        if (!isNull(ret)) return ret;\n                        return;\n                    }\n                });\n\n                // 构造新的标签代码\n                var html = '<' + tag;\n                if (attrsHtml) html += ' ' + attrsHtml;\n                if (attrs.closing) html += ' /';\n                html += '>';\n                return html;\n\n            } else {\n                // 非白名单标签，调用onIgnoreTag处理\n                var ret = onIgnoreTag(tag, html, info);\n                if (!isNull(ret)) return ret;\n                return escapeHtml(html);\n            }\n\n        }, escapeHtml);\n\n        // 如果开启了stripIgnoreTagBody，需要对结果再进行处理\n        if (stripIgnoreTagBody) {\n            retHtml = stripIgnoreTagBody.remove(retHtml);\n        }\n\n        return retHtml;\n    };\n\n\n    module.exports = FilterXSS;\n\n},{\"./default\":1,\"./parser\":3,\"./util\":4,\"cssfilter\":8}],6:[function(require,module,exports){\n    /**\n     * cssfilter\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var DEFAULT = require('./default');\n    var parseStyle = require('./parser');\n    var _ = require('./util');\n\n\n    /**\n     * 返回值是否为空\n     *\n     * @param {Object} obj\n     * @return {Boolean}\n     */\n    function isNull (obj) {\n        return (obj === undefined || obj === null);\n    }\n\n    /**\n     * 浅拷贝对象\n     *\n     * @param {Object} obj\n     * @return {Object}\n     */\n    function shallowCopyObject (obj) {\n        var ret = {};\n        for (var i in obj) {\n            ret[i] = obj[i];\n        }\n        return ret;\n    }\n\n    /**\n     * 创建CSS过滤器\n     *\n     * @param {Object} options\n     *   - {Object} whiteList\n     *   - {Object} onAttr\n     *   - {Object} onIgnoreAttr\n     */\n    function FilterCSS (options) {\n        options = shallowCopyObject(options || {});\n        options.whiteList = options.whiteList || DEFAULT.whiteList;\n        options.onAttr = options.onAttr || DEFAULT.onAttr;\n        options.onIgnoreAttr = options.onIgnoreAttr || DEFAULT.onIgnoreAttr;\n        this.options = options;\n    }\n\n    FilterCSS.prototype.process = function (css) {\n        // 兼容各种奇葩输入\n        css = css || '';\n        css = css.toString();\n        if (!css) return '';\n\n        var me = this;\n        var options = me.options;\n        var whiteList = options.whiteList;\n        var onAttr = options.onAttr;\n        var onIgnoreAttr = options.onIgnoreAttr;\n\n        var retCSS = parseStyle(css, function (sourcePosition, position, name, value, source) {\n\n            var check = whiteList[name];\n            var isWhite = false;\n            if (check === true) isWhite = check;\n            else if (typeof check === 'function') isWhite = check(value);\n            else if (check instanceof RegExp) isWhite = check.test(value);\n            if (isWhite !== true) isWhite = false;\n\n            var opts = {\n                position: position,\n                sourcePosition: sourcePosition,\n                source: source,\n                isWhite: isWhite\n            };\n\n            if (isWhite) {\n\n                var ret = onAttr(name, value, opts);\n                if (isNull(ret)) {\n                    return name + ':' + value;\n                } else {\n                    return ret;\n                }\n\n            } else {\n\n                var ret = onIgnoreAttr(name, value, opts);\n                if (!isNull(ret)) {\n                    return ret;\n                }\n\n            }\n        });\n\n        return retCSS;\n    };\n\n\n    module.exports = FilterCSS;\n\n},{\"./default\":7,\"./parser\":9,\"./util\":10}],7:[function(require,module,exports){\n    /**\n     * cssfilter\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    function getDefaultWhiteList () {\n        // 白名单值说明：\n        // true: 允许该属性\n        // Function: function (val) { } 返回true表示允许该属性，其他值均表示不允许\n        // RegExp: regexp.test(val) 返回true表示允许该属性，其他值均表示不允许\n        // 除上面列出的值外均表示不允许\n        var whiteList = {};\n\n        whiteList['align-content'] = false; // default: auto\n        whiteList['align-items'] = false; // default: auto\n        whiteList['align-self'] = false; // default: auto\n        whiteList['alignment-adjust'] = false; // default: auto\n        whiteList['alignment-baseline'] = false; // default: baseline\n        whiteList['all'] = false; // default: depending on individual properties\n        whiteList['anchor-point'] = false; // default: none\n        whiteList['animation'] = false; // default: depending on individual properties\n        whiteList['animation-delay'] = false; // default: 0\n        whiteList['animation-direction'] = false; // default: normal\n        whiteList['animation-duration'] = false; // default: 0\n        whiteList['animation-fill-mode'] = false; // default: none\n        whiteList['animation-iteration-count'] = false; // default: 1\n        whiteList['animation-name'] = false; // default: none\n        whiteList['animation-play-state'] = false; // default: running\n        whiteList['animation-timing-function'] = false; // default: ease\n        whiteList['azimuth'] = false; // default: center\n        whiteList['backface-visibility'] = false; // default: visible\n        whiteList['background'] = true; // default: depending on individual properties\n        whiteList['background-attachment'] = true; // default: scroll\n        whiteList['background-clip'] = true; // default: border-box\n        whiteList['background-color'] = true; // default: transparent\n        whiteList['background-image'] = true; // default: none\n        whiteList['background-origin'] = true; // default: padding-box\n        whiteList['background-position'] = true; // default: 0% 0%\n        whiteList['background-repeat'] = true; // default: repeat\n        whiteList['background-size'] = true; // default: auto\n        whiteList['baseline-shift'] = false; // default: baseline\n        whiteList['binding'] = false; // default: none\n        whiteList['bleed'] = false; // default: 6pt\n        whiteList['bookmark-label'] = false; // default: content()\n        whiteList['bookmark-level'] = false; // default: none\n        whiteList['bookmark-state'] = false; // default: open\n        whiteList['border'] = true; // default: depending on individual properties\n        whiteList['border-bottom'] = true; // default: depending on individual properties\n        whiteList['border-bottom-color'] = true; // default: current color\n        whiteList['border-bottom-left-radius'] = true; // default: 0\n        whiteList['border-bottom-right-radius'] = true; // default: 0\n        whiteList['border-bottom-style'] = true; // default: none\n        whiteList['border-bottom-width'] = true; // default: medium\n        whiteList['border-collapse'] = true; // default: separate\n        whiteList['border-color'] = true; // default: depending on individual properties\n        whiteList['border-image'] = true; // default: none\n        whiteList['border-image-outset'] = true; // default: 0\n        whiteList['border-image-repeat'] = true; // default: stretch\n        whiteList['border-image-slice'] = true; // default: 100%\n        whiteList['border-image-source'] = true; // default: none\n        whiteList['border-image-width'] = true; // default: 1\n        whiteList['border-left'] = true; // default: depending on individual properties\n        whiteList['border-left-color'] = true; // default: current color\n        whiteList['border-left-style'] = true; // default: none\n        whiteList['border-left-width'] = true; // default: medium\n        whiteList['border-radius'] = true; // default: 0\n        whiteList['border-right'] = true; // default: depending on individual properties\n        whiteList['border-right-color'] = true; // default: current color\n        whiteList['border-right-style'] = true; // default: none\n        whiteList['border-right-width'] = true; // default: medium\n        whiteList['border-spacing'] = true; // default: 0\n        whiteList['border-style'] = true; // default: depending on individual properties\n        whiteList['border-top'] = true; // default: depending on individual properties\n        whiteList['border-top-color'] = true; // default: current color\n        whiteList['border-top-left-radius'] = true; // default: 0\n        whiteList['border-top-right-radius'] = true; // default: 0\n        whiteList['border-top-style'] = true; // default: none\n        whiteList['border-top-width'] = true; // default: medium\n        whiteList['border-width'] = true; // default: depending on individual properties\n        whiteList['bottom'] = false; // default: auto\n        whiteList['box-decoration-break'] = true; // default: slice\n        whiteList['box-shadow'] = true; // default: none\n        whiteList['box-sizing'] = true; // default: content-box\n        whiteList['box-snap'] = true; // default: none\n        whiteList['box-suppress'] = true; // default: show\n        whiteList['break-after'] = true; // default: auto\n        whiteList['break-before'] = true; // default: auto\n        whiteList['break-inside'] = true; // default: auto\n        whiteList['caption-side'] = false; // default: top\n        whiteList['chains'] = false; // default: none\n        whiteList['clear'] = true; // default: none\n        whiteList['clip'] = false; // default: auto\n        whiteList['clip-path'] = false; // default: none\n        whiteList['clip-rule'] = false; // default: nonzero\n        whiteList['color'] = true; // default: implementation dependent\n        whiteList['color-interpolation-filters'] = true; // default: auto\n        whiteList['column-count'] = false; // default: auto\n        whiteList['column-fill'] = false; // default: balance\n        whiteList['column-gap'] = false; // default: normal\n        whiteList['column-rule'] = false; // default: depending on individual properties\n        whiteList['column-rule-color'] = false; // default: current color\n        whiteList['column-rule-style'] = false; // default: medium\n        whiteList['column-rule-width'] = false; // default: medium\n        whiteList['column-span'] = false; // default: none\n        whiteList['column-width'] = false; // default: auto\n        whiteList['columns'] = false; // default: depending on individual properties\n        whiteList['contain'] = false; // default: none\n        whiteList['content'] = false; // default: normal\n        whiteList['counter-increment'] = false; // default: none\n        whiteList['counter-reset'] = false; // default: none\n        whiteList['counter-set'] = false; // default: none\n        whiteList['crop'] = false; // default: auto\n        whiteList['cue'] = false; // default: depending on individual properties\n        whiteList['cue-after'] = false; // default: none\n        whiteList['cue-before'] = false; // default: none\n        whiteList['cursor'] = false; // default: auto\n        whiteList['direction'] = false; // default: ltr\n        whiteList['display'] = true; // default: depending on individual properties\n        whiteList['display-inside'] = true; // default: auto\n        whiteList['display-list'] = true; // default: none\n        whiteList['display-outside'] = true; // default: inline-level\n        whiteList['dominant-baseline'] = false; // default: auto\n        whiteList['elevation'] = false; // default: level\n        whiteList['empty-cells'] = false; // default: show\n        whiteList['filter'] = false; // default: none\n        whiteList['flex'] = false; // default: depending on individual properties\n        whiteList['flex-basis'] = false; // default: auto\n        whiteList['flex-direction'] = false; // default: row\n        whiteList['flex-flow'] = false; // default: depending on individual properties\n        whiteList['flex-grow'] = false; // default: 0\n        whiteList['flex-shrink'] = false; // default: 1\n        whiteList['flex-wrap'] = false; // default: nowrap\n        whiteList['float'] = false; // default: none\n        whiteList['float-offset'] = false; // default: 0 0\n        whiteList['flood-color'] = false; // default: black\n        whiteList['flood-opacity'] = false; // default: 1\n        whiteList['flow-from'] = false; // default: none\n        whiteList['flow-into'] = false; // default: none\n        whiteList['font'] = true; // default: depending on individual properties\n        whiteList['font-family'] = true; // default: implementation dependent\n        whiteList['font-feature-settings'] = true; // default: normal\n        whiteList['font-kerning'] = true; // default: auto\n        whiteList['font-language-override'] = true; // default: normal\n        whiteList['font-size'] = true; // default: medium\n        whiteList['font-size-adjust'] = true; // default: none\n        whiteList['font-stretch'] = true; // default: normal\n        whiteList['font-style'] = true; // default: normal\n        whiteList['font-synthesis'] = true; // default: weight style\n        whiteList['font-variant'] = true; // default: normal\n        whiteList['font-variant-alternates'] = true; // default: normal\n        whiteList['font-variant-caps'] = true; // default: normal\n        whiteList['font-variant-east-asian'] = true; // default: normal\n        whiteList['font-variant-ligatures'] = true; // default: normal\n        whiteList['font-variant-numeric'] = true; // default: normal\n        whiteList['font-variant-position'] = true; // default: normal\n        whiteList['font-weight'] = true; // default: normal\n        whiteList['grid'] = false; // default: depending on individual properties\n        whiteList['grid-area'] = false; // default: depending on individual properties\n        whiteList['grid-auto-columns'] = false; // default: auto\n        whiteList['grid-auto-flow'] = false; // default: none\n        whiteList['grid-auto-rows'] = false; // default: auto\n        whiteList['grid-column'] = false; // default: depending on individual properties\n        whiteList['grid-column-end'] = false; // default: auto\n        whiteList['grid-column-start'] = false; // default: auto\n        whiteList['grid-row'] = false; // default: depending on individual properties\n        whiteList['grid-row-end'] = false; // default: auto\n        whiteList['grid-row-start'] = false; // default: auto\n        whiteList['grid-template'] = false; // default: depending on individual properties\n        whiteList['grid-template-areas'] = false; // default: none\n        whiteList['grid-template-columns'] = false; // default: none\n        whiteList['grid-template-rows'] = false; // default: none\n        whiteList['hanging-punctuation'] = false; // default: none\n        whiteList['height'] = true; // default: auto\n        whiteList['hyphens'] = false; // default: manual\n        whiteList['icon'] = false; // default: auto\n        whiteList['image-orientation'] = false; // default: auto\n        whiteList['image-resolution'] = false; // default: normal\n        whiteList['ime-mode'] = false; // default: auto\n        whiteList['initial-letters'] = false; // default: normal\n        whiteList['inline-box-align'] = false; // default: last\n        whiteList['justify-content'] = false; // default: auto\n        whiteList['justify-items'] = false; // default: auto\n        whiteList['justify-self'] = false; // default: auto\n        whiteList['left'] = false; // default: auto\n        whiteList['letter-spacing'] = true; // default: normal\n        whiteList['lighting-color'] = true; // default: white\n        whiteList['line-box-contain'] = false; // default: block inline replaced\n        whiteList['line-break'] = false; // default: auto\n        whiteList['line-grid'] = false; // default: match-parent\n        whiteList['line-height'] = false; // default: normal\n        whiteList['line-snap'] = false; // default: none\n        whiteList['line-stacking'] = false; // default: depending on individual properties\n        whiteList['line-stacking-ruby'] = false; // default: exclude-ruby\n        whiteList['line-stacking-shift'] = false; // default: consider-shifts\n        whiteList['line-stacking-strategy'] = false; // default: inline-line-height\n        whiteList['list-style'] = true; // default: depending on individual properties\n        whiteList['list-style-image'] = true; // default: none\n        whiteList['list-style-position'] = true; // default: outside\n        whiteList['list-style-type'] = true; // default: disc\n        whiteList['margin'] = true; // default: depending on individual properties\n        whiteList['margin-bottom'] = true; // default: 0\n        whiteList['margin-left'] = true; // default: 0\n        whiteList['margin-right'] = true; // default: 0\n        whiteList['margin-top'] = true; // default: 0\n        whiteList['marker-offset'] = false; // default: auto\n        whiteList['marker-side'] = false; // default: list-item\n        whiteList['marks'] = false; // default: none\n        whiteList['mask'] = false; // default: border-box\n        whiteList['mask-box'] = false; // default: see individual properties\n        whiteList['mask-box-outset'] = false; // default: 0\n        whiteList['mask-box-repeat'] = false; // default: stretch\n        whiteList['mask-box-slice'] = false; // default: 0 fill\n        whiteList['mask-box-source'] = false; // default: none\n        whiteList['mask-box-width'] = false; // default: auto\n        whiteList['mask-clip'] = false; // default: border-box\n        whiteList['mask-image'] = false; // default: none\n        whiteList['mask-origin'] = false; // default: border-box\n        whiteList['mask-position'] = false; // default: center\n        whiteList['mask-repeat'] = false; // default: no-repeat\n        whiteList['mask-size'] = false; // default: border-box\n        whiteList['mask-source-type'] = false; // default: auto\n        whiteList['mask-type'] = false; // default: luminance\n        whiteList['max-height'] = true; // default: none\n        whiteList['max-lines'] = false; // default: none\n        whiteList['max-width'] = true; // default: none\n        whiteList['min-height'] = true; // default: 0\n        whiteList['min-width'] = true; // default: 0\n        whiteList['move-to'] = false; // default: normal\n        whiteList['nav-down'] = false; // default: auto\n        whiteList['nav-index'] = false; // default: auto\n        whiteList['nav-left'] = false; // default: auto\n        whiteList['nav-right'] = false; // default: auto\n        whiteList['nav-up'] = false; // default: auto\n        whiteList['object-fit'] = false; // default: fill\n        whiteList['object-position'] = false; // default: 50% 50%\n        whiteList['opacity'] = false; // default: 1\n        whiteList['order'] = false; // default: 0\n        whiteList['orphans'] = false; // default: 2\n        whiteList['outline'] = false; // default: depending on individual properties\n        whiteList['outline-color'] = false; // default: invert\n        whiteList['outline-offset'] = false; // default: 0\n        whiteList['outline-style'] = false; // default: none\n        whiteList['outline-width'] = false; // default: medium\n        whiteList['overflow'] = false; // default: depending on individual properties\n        whiteList['overflow-wrap'] = false; // default: normal\n        whiteList['overflow-x'] = false; // default: visible\n        whiteList['overflow-y'] = false; // default: visible\n        whiteList['padding'] = true; // default: depending on individual properties\n        whiteList['padding-bottom'] = true; // default: 0\n        whiteList['padding-left'] = true; // default: 0\n        whiteList['padding-right'] = true; // default: 0\n        whiteList['padding-top'] = true; // default: 0\n        whiteList['page'] = false; // default: auto\n        whiteList['page-break-after'] = false; // default: auto\n        whiteList['page-break-before'] = false; // default: auto\n        whiteList['page-break-inside'] = false; // default: auto\n        whiteList['page-policy'] = false; // default: start\n        whiteList['pause'] = false; // default: implementation dependent\n        whiteList['pause-after'] = false; // default: implementation dependent\n        whiteList['pause-before'] = false; // default: implementation dependent\n        whiteList['perspective'] = false; // default: none\n        whiteList['perspective-origin'] = false; // default: 50% 50%\n        whiteList['pitch'] = false; // default: medium\n        whiteList['pitch-range'] = false; // default: 50\n        whiteList['play-during'] = false; // default: auto\n        whiteList['position'] = false; // default: static\n        whiteList['presentation-level'] = false; // default: 0\n        whiteList['quotes'] = false; // default: text\n        whiteList['region-fragment'] = false; // default: auto\n        whiteList['resize'] = false; // default: none\n        whiteList['rest'] = false; // default: depending on individual properties\n        whiteList['rest-after'] = false; // default: none\n        whiteList['rest-before'] = false; // default: none\n        whiteList['richness'] = false; // default: 50\n        whiteList['right'] = false; // default: auto\n        whiteList['rotation'] = false; // default: 0\n        whiteList['rotation-point'] = false; // default: 50% 50%\n        whiteList['ruby-align'] = false; // default: auto\n        whiteList['ruby-merge'] = false; // default: separate\n        whiteList['ruby-position'] = false; // default: before\n        whiteList['shape-image-threshold'] = false; // default: 0.0\n        whiteList['shape-outside'] = false; // default: none\n        whiteList['shape-margin'] = false; // default: 0\n        whiteList['size'] = false; // default: auto\n        whiteList['speak'] = false; // default: auto\n        whiteList['speak-as'] = false; // default: normal\n        whiteList['speak-header'] = false; // default: once\n        whiteList['speak-numeral'] = false; // default: continuous\n        whiteList['speak-punctuation'] = false; // default: none\n        whiteList['speech-rate'] = false; // default: medium\n        whiteList['stress'] = false; // default: 50\n        whiteList['string-set'] = false; // default: none\n        whiteList['tab-size'] = false; // default: 8\n        whiteList['table-layout'] = false; // default: auto\n        whiteList['text-align'] = true; // default: start\n        whiteList['text-align-last'] = true; // default: auto\n        whiteList['text-combine-upright'] = true; // default: none\n        whiteList['text-decoration'] = true; // default: none\n        whiteList['text-decoration-color'] = true; // default: currentColor\n        whiteList['text-decoration-line'] = true; // default: none\n        whiteList['text-decoration-skip'] = true; // default: objects\n        whiteList['text-decoration-style'] = true; // default: solid\n        whiteList['text-emphasis'] = true; // default: depending on individual properties\n        whiteList['text-emphasis-color'] = true; // default: currentColor\n        whiteList['text-emphasis-position'] = true; // default: over right\n        whiteList['text-emphasis-style'] = true; // default: none\n        whiteList['text-height'] = true; // default: auto\n        whiteList['text-indent'] = true; // default: 0\n        whiteList['text-justify'] = true; // default: auto\n        whiteList['text-orientation'] = true; // default: mixed\n        whiteList['text-overflow'] = true; // default: clip\n        whiteList['text-shadow'] = true; // default: none\n        whiteList['text-space-collapse'] = true; // default: collapse\n        whiteList['text-transform'] = true; // default: none\n        whiteList['text-underline-position'] = true; // default: auto\n        whiteList['text-wrap'] = true; // default: normal\n        whiteList['top'] = false; // default: auto\n        whiteList['transform'] = false; // default: none\n        whiteList['transform-origin'] = false; // default: 50% 50% 0\n        whiteList['transform-style'] = false; // default: flat\n        whiteList['transition'] = false; // default: depending on individual properties\n        whiteList['transition-delay'] = false; // default: 0s\n        whiteList['transition-duration'] = false; // default: 0s\n        whiteList['transition-property'] = false; // default: all\n        whiteList['transition-timing-function'] = false; // default: ease\n        whiteList['unicode-bidi'] = false; // default: normal\n        whiteList['vertical-align'] = false; // default: baseline\n        whiteList['visibility'] = false; // default: visible\n        whiteList['voice-balance'] = false; // default: center\n        whiteList['voice-duration'] = false; // default: auto\n        whiteList['voice-family'] = false; // default: implementation dependent\n        whiteList['voice-pitch'] = false; // default: medium\n        whiteList['voice-range'] = false; // default: medium\n        whiteList['voice-rate'] = false; // default: normal\n        whiteList['voice-stress'] = false; // default: normal\n        whiteList['voice-volume'] = false; // default: medium\n        whiteList['volume'] = false; // default: medium\n        whiteList['white-space'] = false; // default: normal\n        whiteList['widows'] = false; // default: 2\n        whiteList['width'] = true; // default: auto\n        whiteList['will-change'] = false; // default: auto\n        whiteList['word-break'] = true; // default: normal\n        whiteList['word-spacing'] = true; // default: normal\n        whiteList['word-wrap'] = true; // default: normal\n        whiteList['wrap-flow'] = false; // default: auto\n        whiteList['wrap-through'] = false; // default: wrap\n        whiteList['writing-mode'] = false; // default: horizontal-tb\n        whiteList['z-index'] = false; // default: auto\n\n        return whiteList;\n    }\n\n\n    /**\n     * 匹配到白名单上的一个属性时\n     *\n     * @param {String} name\n     * @param {String} value\n     * @param {Object} options\n     * @return {String}\n     */\n    function onAttr (name, value, options) {\n        // do nothing\n    }\n\n    /**\n     * 匹配到不在白名单上的一个属性时\n     *\n     * @param {String} name\n     * @param {String} value\n     * @param {Object} options\n     * @return {String}\n     */\n    function onIgnoreAttr (name, value, options) {\n        // do nothing\n    }\n\n\n    exports.whiteList = getDefaultWhiteList();\n    exports.getDefaultWhiteList = getDefaultWhiteList;\n    exports.onAttr = onAttr;\n    exports.onIgnoreAttr = onIgnoreAttr;\n\n},{}],8:[function(require,module,exports){\n    /**\n     * cssfilter\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var DEFAULT = require('./default');\n    var FilterCSS = require('./css');\n\n\n    /**\n     * XSS过滤\n     *\n     * @param {String} css 要过滤的CSS代码\n     * @param {Object} options 选项：whiteList, onAttr, onIgnoreAttr\n     * @return {String}\n     */\n    function filterCSS (html, options) {\n        var xss = new FilterCSS(options);\n        return xss.process(html);\n    }\n\n\n// 输出\n    exports = module.exports = filterCSS;\n    exports.FilterCSS = FilterCSS;\n    for (var i in DEFAULT) exports[i] = DEFAULT[i];\n\n// 在浏览器端使用\n    if (typeof window !== 'undefined') {\n        window.filterCSS = module.exports;\n    }\n\n},{\"./css\":6,\"./default\":7}],9:[function(require,module,exports){\n    /**\n     * cssfilter\n     *\n     * @author 老雷<leizongmin@gmail.com>\n     */\n\n    var _ = require('./util');\n\n\n    /**\n     * 解析style\n     *\n     * @param {String} css\n     * @param {Function} onAttr 处理属性的函数\n     *   参数格式： function (sourcePosition, position, name, value, source)\n     * @return {String}\n     */\n    function parseStyle (css, onAttr) {\n        css = _.trimRight(css);\n        if (css[css.length - 1] !== ';') css += ';';\n        var cssLength = css.length;\n        var isParenthesisOpen = false;\n        var lastPos = 0;\n        var i = 0;\n        var retCSS = '';\n\n        function addNewAttr () {\n            // 如果没有正常的闭合圆括号，则直接忽略当前属性\n            if (!isParenthesisOpen) {\n                var source = _.trim(css.slice(lastPos, i));\n                var j = source.indexOf(':');\n                if (j !== -1) {\n                    var name = _.trim(source.slice(0, j));\n                    var value = _.trim(source.slice(j + 1));\n                    // 必须有属性名称\n                    if (name) {\n                        var ret = onAttr(lastPos, retCSS.length, name, value, source);\n                        if (ret) retCSS += ret + '; ';\n                    }\n                }\n            }\n            lastPos = i + 1;\n        }\n\n        for (; i < cssLength; i++) {\n            var c = css[i];\n            if (c === '/' && css[i + 1] === '*') {\n                // 备注开始\n                var j = css.indexOf('*/', i + 2);\n                // 如果没有正常的备注结束，则后面的部分全部跳过\n                if (j === -1) break;\n                // 直接将当前位置调到备注结尾，并且初始化状态\n                i = j + 1;\n                lastPos = i + 1;\n                isParenthesisOpen = false;\n            } else if (c === '(') {\n                isParenthesisOpen = true;\n            } else if (c === ')') {\n                isParenthesisOpen = false;\n            } else if (c === ';') {\n                if (isParenthesisOpen) {\n                    // 在圆括号里面，忽略\n                } else {\n                    addNewAttr();\n                }\n            } else if (c === '\\n') {\n                addNewAttr();\n            }\n        }\n\n        return _.trim(retCSS);\n    }\n\n    module.exports = parseStyle;\n\n},{\"./util\":10}],10:[function(require,module,exports){\n    module.exports = {\n        indexOf: function (arr, item) {\n            var i, j;\n            if (Array.prototype.indexOf) {\n                return arr.indexOf(item);\n            }\n            for (i = 0, j = arr.length; i < j; i++) {\n                if (arr[i] === item) {\n                    return i;\n                }\n            }\n            return -1;\n        },\n        forEach: function (arr, fn, scope) {\n            var i, j;\n            if (Array.prototype.forEach) {\n                return arr.forEach(fn, scope);\n            }\n            for (i = 0, j = arr.length; i < j; i++) {\n                fn.call(scope, arr[i], i, arr);\n            }\n        },\n        trim: function (str) {\n            if (String.prototype.trim) {\n                return str.trim();\n            }\n            return str.replace(/(^\\s*)|(\\s*$)/g, '');\n        },\n        trimRight: function (str) {\n            if (String.prototype.trimRight) {\n                return str.trimRight();\n            }\n            return str.replace(/(\\s*$)/g, '');\n        }\n    };\n\n},{}]},{},[2]);"
  },
  {
    "path": "public/assets/dashboard/uploadify/uploadify.css",
    "content": "\n.uploadify {\n\tposition: relative;\n\tmargin-bottom: 1em;\n}\n.uploadify-button {\n\tbackground: #D0EEFF;/*背景颜色*/\n\tborder-radius: 4px;\n\tpadding: 1px 12px;\n\tborder: 1px solid #99D3F5;/*边框颜色*/\n\tcolor: #1E88C7;/*字体颜色*/\t\n\ttext-align: center;\t\n\n}\n.uploadify:hover .uploadify-button {\n\tbackground: #AADFFD;\n\tborder-color: #78C3F3;\n    color: #004974;\n    text-decoration: none;\n}\n.uploadify-button.disabled {\n\tbackground-color: #27a9e3;\n\tcolor: #188bbe;\n}\n.uploadify-queue {\n\tmargin-bottom: 1em;\n}\n.uploadify-queue-item {\n\tbackground-color: #F5F5F5;\n\t-webkit-border-radius: 3px;\n\t-moz-border-radius: 3px;\n\tborder-radius: 3px;\n\tfont: 11px Verdana, Geneva, sans-serif;\n\tmargin-top: 5px;\n\tmax-width: 350px;\n\tpadding: 10px;\n}\n.uploadify-error {\n\tbackground-color: #FDE5DD !important;\n}\n.uploadify-queue-item .cancel a {\n\tbackground: url('uploadify-cancel.png') 0 0 no-repeat;\n\tfloat: right;\n\theight:\t16px;\n\ttext-indent: -9999px;\n\twidth: 16px;\n}\n.uploadify-queue-item.completed {\n\tbackground-color: #E5E5E5;\n}\n.uploadify-progress {\n\tbackground-color: #E5E5E5;\n\tmargin-top: 10px;\n\twidth: 100%;\n}\n.uploadify-progress-bar {\n\tbackground-color: #0099FF;\n\theight: 3px;\n\twidth: 1px;\n}"
  },
  {
    "path": "public/assets/dashboard/wangeditor/css/wangEditor-huise.css",
    "content": "/* 编辑器边框颜色 */\n/* 菜单颜色、上边框颜色 */\n/* 菜单选中状态的颜色 */\n/* input focus 时的颜色 */\n/* 按钮颜色 */\n/* tab selected 状态下的颜色 */\n.wangEditor-container {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  z-index: 1;\n  width: 100%;\n}\n.wangEditor-container a:focus,\n.wangEditor-container button:focus {\n  outline: none;\n}\n.wangEditor-container,\n.wangEditor-container * {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  line-height: 1;\n}\n.wangEditor-container img {\n  border: none;\n}\n.wangEditor-container .clearfix:after {\n  content: '';\n  display: table;\n  clear: both;\n}\n.wangEditor-container .clearfix {\n  *zoom: 1;\n}\n.wangEditor-container textarea {\n  border: none;\n}\n.wangEditor-container textarea:focus {\n  outline: none;\n}\n.wangEditor-container .height-tip {\n  position: absolute;\n  width: 3px;\n  background-color: #ccc;\n  left: 0;\n  transition: top .2s;\n}\n.wangEditor-container .txt-toolbar {\n  position: absolute;\n  background-color: #fff;\n  padding: 3px 5px;\n  border-top: 2px solid #666;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-container .txt-toolbar .tip-triangle {\n  display: block;\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 5px solid;\n  border-color: transparent transparent #666 transparent;\n  top: -12px;\n  left: 50%;\n  margin-left: -5px;\n}\n.wangEditor-container .txt-toolbar a {\n  color: #666;\n  display: inline-block;\n  margin: 0 3px;\n  padding: 5px;\n  text-decoration: none;\n  border-radius: 3px;\n}\n.wangEditor-container .txt-toolbar a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-container .img-drag-point {\n  display: block;\n  position: absolute;\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  cursor: se-resize;\n  background-color: #666;\n  margin-left: -6px;\n  margin-top: -6px;\n  box-shadow: 1px 1px 5px #999;\n}\n.wangEditor-container .wangEditor-upload-progress {\n  position: absolute;\n  height: 1px;\n  background: #1e88e5;\n  width: 0;\n  display: none;\n  -webkit-transition: width .5s;\n  -o-transition: width .5s;\n  transition: width .5s;\n}\n.wangEditor-fullscreen {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.wangEditor-container .code-textarea {\n  resize: none;\n  width: 100%;\n  font-size: 14px;\n  line-height: 1.5;\n  font-family: 'Verdana';\n  color: #333;\n  padding: 0 15px 0 15px;\n}\n.wangEditor-menu-container {\n  width: 100%;\n  border-bottom: 1px solid #f1f1f1;\n  background-color: #fff;\n}\n.wangEditor-menu-container a {\n  text-decoration: none;\n}\n.wangEditor-menu-container .menu-group {\n  float: left;\n  padding: 0 8px;\n  border-right: 1px solid #f1f1f1;\n}\n.wangEditor-menu-container .menu-item {\n  float: left;\n  position: relative;\n  text-align: center;\n  height: 31px;\n  width: 35px;\n}\n.wangEditor-menu-container .menu-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-menu-container .menu-item a {\n  display: block;\n  text-align: center;\n  color: #666;\n  width: 100%;\n  padding: 8px 0;\n  font-size: 0.9em;\n}\n.wangEditor-menu-container .menu-item .selected {\n  color: #1e88e5;\n}\n.wangEditor-menu-container .menu-item .active {\n  background-color: #f1f1f1;\n}\n.wangEditor-menu-container .menu-item .disable {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.wangEditor-menu-container .menu-tip {\n  display: block;\n  position: absolute;\n  z-index: 20;\n  width: 60px;\n  text-align: center;\n  background-color: #666;\n  color: #fff;\n  padding: 7px 0;\n  font-size: 12px;\n  top: 100%;\n  left: 50%;\n  margin-left: -30px;\n  border-radius: 2px;\n  box-shadow: 1px 1px 5px #999;\n  display: none;\n  /*// 小三角\n        .tip-triangle {\n            display: block;\n            position: absolute;\n            width: 0;\n            height: 0;\n            border:5px solid;\n            border-color: transparent transparent @fore-color transparent;\n            top: -10px;\n            left: 50%;\n            margin-left: -5px;\n        }*/\n}\n.wangEditor-menu-container .menu-tip-40 {\n  width: 40px;\n  margin-left: -20px;\n}\n.wangEditor-menu-container .menu-tip-50 {\n  width: 50px;\n  margin-left: -25px;\n}\n.wangEditor-menu-shadow {\n  /*border-bottom-width: 0;*/\n  border-bottom: 1px\\9 solid\\9 #f1f1f1\\9;\n  box-shadow: 0 1px 3px #999;\n}\n.wangEditor-container .wangEditor-txt {\n  width: 100%;\n  text-align: left;\n  padding: 15px;\n  padding-top: 0;\n  margin-top: 5px;\n  overflow-y: auto;\n}\n.wangEditor-container .wangEditor-txt p,\n.wangEditor-container .wangEditor-txt h1,\n.wangEditor-container .wangEditor-txt h2,\n.wangEditor-container .wangEditor-txt h3,\n.wangEditor-container .wangEditor-txt h4,\n.wangEditor-container .wangEditor-txt h5 {\n  margin: 10px 0;\n  line-height: 1.8;\n}\n.wangEditor-container .wangEditor-txt p *,\n.wangEditor-container .wangEditor-txt h1 *,\n.wangEditor-container .wangEditor-txt h2 *,\n.wangEditor-container .wangEditor-txt h3 *,\n.wangEditor-container .wangEditor-txt h4 *,\n.wangEditor-container .wangEditor-txt h5 * {\n  line-height: 1.8;\n}\n.wangEditor-container .wangEditor-txt ul,\n.wangEditor-container .wangEditor-txt ol {\n  padding-left: 20px;\n}\n.wangEditor-container .wangEditor-txt img {\n  cursor: pointer;\n}\n.wangEditor-container .wangEditor-txt img.clicked {\n  box-shadow: 1px 1px 10px #999;\n}\n.wangEditor-container .wangEditor-txt table.clicked {\n  box-shadow: 1px 1px 10px #999;\n}\n.wangEditor-container .wangEditor-txt pre code {\n  line-height: 1.5;\n}\n.wangEditor-container .wangEditor-txt:focus {\n  outline: none;\n}\n.wangEditor-container .wangEditor-txt blockquote {\n  display: block;\n  border-left: 8px solid #d0e5f2;\n  padding: 5px 10px;\n  margin: 10px 0;\n  line-height: 1.4;\n  font-size: 100%;\n  background-color: #f1f1f1;\n}\n.wangEditor-container .wangEditor-txt table {\n  border: none;\n  border-collapse: collapse;\n}\n.wangEditor-container .wangEditor-txt table td,\n.wangEditor-container .wangEditor-txt table th {\n  border: 1px solid #999;\n  padding: 3px 5px;\n  min-width: 50px;\n  height: 20px;\n}\n.wangEditor-container .wangEditor-txt pre {\n  border: 1px solid #ccc;\n  background-color: #f8f8f8;\n  padding: 10px;\n  margin: 5px 0px;\n  font-size: 0.8em;\n  border-radius: 3px;\n}\n.wangEditor-drop-list {\n  display: none;\n  position: absolute;\n  background-color: #fff;\n  overflow: hidden;\n  z-index: 10;\n  transition: height .7s;\n  border-top: 1px solid #f1f1f1;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-drop-list a {\n  text-decoration: none;\n  display: block;\n  color: #666;\n  padding: 3px 5px;\n}\n.wangEditor-drop-list a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel,\n.txt-toolbar {\n  display: none;\n  position: absolute;\n  padding: 10px;\n  font-size: 14px;\n  /*border: 1px\\9 solid\\9 #cccccc\\9;*/\n  background-color: #fff;\n  z-index: 10;\n  border-top: 2px solid #666;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-drop-panel .tip-triangle,\n.txt-toolbar .tip-triangle {\n  display: block;\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 5px solid;\n  border-color: transparent transparent #666 transparent;\n  top: -12px;\n  left: 50%;\n  margin-left: -5px;\n}\n.wangEditor-drop-panel a,\n.txt-toolbar a {\n  text-decoration: none;\n}\n.wangEditor-drop-panel input[type=text],\n.txt-toolbar input[type=text] {\n  border: none;\n  border-bottom: 1px solid #ccc;\n  font-size: 14px;\n  height: 20px;\n  color: #333;\n  padding: 3px 0;\n}\n.wangEditor-drop-panel input[type=text]:focus,\n.txt-toolbar input[type=text]:focus {\n  outline: none;\n  border-bottom: 2px solid #1e88e5;\n}\n.wangEditor-drop-panel input[type=text].block,\n.txt-toolbar input[type=text].block {\n  display: block;\n  width: 100%;\n}\n.wangEditor-drop-panel textarea,\n.txt-toolbar textarea {\n  border: 1px solid #ccc;\n}\n.wangEditor-drop-panel textarea:focus,\n.txt-toolbar textarea:focus {\n  outline: none;\n  border-color: #1e88e5;\n}\n.wangEditor-drop-panel button,\n.txt-toolbar button {\n  font-size: 14px;\n  color: #1e88e5;\n  border: none;\n  padding: 10px;\n  background-color: #fff;\n  cursor: pointer;\n  border-radius: 3px;\n}\n.wangEditor-drop-panel button:hover,\n.txt-toolbar button:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel button:focus,\n.txt-toolbar button:focus {\n  outline: none;\n}\n.wangEditor-drop-panel button.right,\n.txt-toolbar button.right {\n  float: right;\n  margin-left: 10px;\n}\n.wangEditor-drop-panel button.gray,\n.txt-toolbar button.gray {\n  color: #999;\n}\n.wangEditor-drop-panel button.link,\n.txt-toolbar button.link {\n  padding: 5px 10px;\n}\n.wangEditor-drop-panel button.link:hover,\n.txt-toolbar button.link:hover {\n  background-color: #fff;\n  text-decoration: underline;\n}\n.wangEditor-drop-panel .color-item,\n.txt-toolbar .color-item {\n  display: block;\n  float: left;\n  width: 25px;\n  height: 25px;\n  text-align: center;\n  padding: 2px;\n  border-radius: 2px;\n  text-decoration: underline;\n}\n.wangEditor-drop-panel .color-item:hover,\n.txt-toolbar .color-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel .list-menu-item,\n.txt-toolbar .list-menu-item {\n  display: block;\n  float: left;\n  color: #333;\n  padding: 5px 5px;\n  border-radius: 2px;\n}\n.wangEditor-drop-panel .list-menu-item:hover,\n.txt-toolbar .list-menu-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel table.choose-table,\n.txt-toolbar table.choose-table {\n  border: none;\n  border-collapse: collapse;\n}\n.wangEditor-drop-panel table.choose-table td,\n.txt-toolbar table.choose-table td {\n  border: 1px solid #ccc;\n  width: 16px;\n  height: 12px;\n}\n.wangEditor-drop-panel table.choose-table td.active,\n.txt-toolbar table.choose-table td.active {\n  background-color: #ccc;\n  opacity: .5;\n  filter: alpha(opacity=50);\n}\n.wangEditor-drop-panel .panel-tab .tab-container,\n.txt-toolbar .panel-tab .tab-container {\n  margin-bottom: 5px;\n}\n.wangEditor-drop-panel .panel-tab .tab-container a,\n.txt-toolbar .panel-tab .tab-container a {\n  display: inline-block;\n  color: #999;\n  text-align: center;\n  margin: 0 5px;\n  padding: 5px 5px;\n}\n.wangEditor-drop-panel .panel-tab .tab-container a.selected,\n.txt-toolbar .panel-tab .tab-container a.selected {\n  color: #1e88e5;\n  border-bottom: 2px solid #1e88e5;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content,\n.txt-toolbar .panel-tab .content-container .content {\n  display: none;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content a,\n.txt-toolbar .panel-tab .content-container .content a {\n  display: inline-block;\n  margin: 2px;\n  padding: 2px;\n  border-radius: 2px;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content a:hover,\n.txt-toolbar .panel-tab .content-container .content a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel .panel-tab .content-container .selected,\n.txt-toolbar .panel-tab .content-container .selected {\n  display: block;\n}\n.wangEditor-drop-panel .panel-tab .emotion-content-container,\n.txt-toolbar .panel-tab .emotion-content-container {\n  height: 200px;\n  overflow-y: auto;\n}\n.wangEditor-drop-panel .upload-icon-container,\n.txt-toolbar .upload-icon-container {\n  color: #ccc;\n  text-align: center;\n  margin: 20px 20px 15px 20px !important;\n  padding: 5px !important;\n  font-size: 65px;\n  cursor: pointer;\n  border: 2px dotted #f1f1f1;\n  display: block !important;\n}\n.wangEditor-drop-panel .upload-icon-container:hover,\n.txt-toolbar .upload-icon-container:hover {\n  color: #666;\n  border-color: #ccc;\n}\n.wangEditor-modal {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  background-color: #fff;\n  border-top: 1px solid #f1f1f1;\n  box-shadow: 1px 3px 3px #999;\n  border-top: 1px\\9 solid\\9 #ccc\\9;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-modal .wangEditor-modal-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  margin-top: -25px;\n  margin-right: -25px;\n  font-size: 1.5em;\n  color: #666;\n  cursor: pointer;\n}\n@font-face {\n  font-family: 'icomoon';\n  src: url('../fonts/icomoon.eot?-qdfu1s');\n  src: url('../fonts/icomoon.eot?#iefix-qdfu1s') format('embedded-opentype'), url('../fonts/icomoon.ttf?-qdfu1s') format('truetype'), url('../fonts/icomoon.woff?-qdfu1s') format('woff'), url('../fonts/icomoon.svg?-qdfu1s#icomoon') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n[class^=\"wangeditor-menu-img-\"],\n[class*=\" wangeditor-menu-img-\"] {\n  font-family: 'icomoon';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.wangeditor-menu-img-link:before {\n  content: \"\\e800\";\n}\n.wangeditor-menu-img-unlink:before {\n  content: \"\\e801\";\n}\n.wangeditor-menu-img-code:before {\n  content: \"\\e802\";\n}\n.wangeditor-menu-img-cancel:before {\n  content: \"\\e803\";\n}\n.wangeditor-menu-img-terminal:before {\n  content: \"\\e804\";\n}\n.wangeditor-menu-img-angle-down:before {\n  content: \"\\e805\";\n}\n.wangeditor-menu-img-font:before {\n  content: \"\\e806\";\n}\n.wangeditor-menu-img-bold:before {\n  content: \"\\e807\";\n}\n.wangeditor-menu-img-italic:before {\n  content: \"\\e808\";\n}\n.wangeditor-menu-img-header:before {\n  content: \"\\e809\";\n}\n.wangeditor-menu-img-align-left:before {\n  content: \"\\e80a\";\n}\n.wangeditor-menu-img-align-center:before {\n  content: \"\\e80b\";\n}\n.wangeditor-menu-img-align-right:before {\n  content: \"\\e80c\";\n}\n.wangeditor-menu-img-list-bullet:before {\n  content: \"\\e80d\";\n}\n.wangeditor-menu-img-indent-left:before {\n  content: \"\\e80e\";\n}\n.wangeditor-menu-img-indent-right:before {\n  content: \"\\e80f\";\n}\n.wangeditor-menu-img-list-numbered:before {\n  content: \"\\e810\";\n}\n.wangeditor-menu-img-underline:before {\n  content: \"\\e811\";\n}\n.wangeditor-menu-img-table:before {\n  content: \"\\e812\";\n}\n.wangeditor-menu-img-eraser:before {\n  content: \"\\e813\";\n}\n.wangeditor-menu-img-text-height:before {\n  content: \"\\e814\";\n}\n.wangeditor-menu-img-brush:before {\n  content: \"\\e815\";\n}\n.wangeditor-menu-img-pencil:before {\n  content: \"\\e816\";\n}\n.wangeditor-menu-img-minus:before {\n  content: \"\\e817\";\n}\n.wangeditor-menu-img-picture:before {\n  content: \"\\e818\";\n}\n.wangeditor-menu-img-file-image:before {\n  content: \"\\e819\";\n}\n.wangeditor-menu-img-cw:before {\n  content: \"\\e81a\";\n}\n.wangeditor-menu-img-ccw:before {\n  content: \"\\e81b\";\n}\n.wangeditor-menu-img-music:before {\n  content: \"\\e911\";\n}\n.wangeditor-menu-img-play:before {\n  content: \"\\e912\";\n}\n.wangeditor-menu-img-location:before {\n  content: \"\\e947\";\n}\n.wangeditor-menu-img-happy:before {\n  content: \"\\e9df\";\n}\n.wangeditor-menu-img-sigma:before {\n  content: \"\\ea67\";\n}\n.wangeditor-menu-img-enlarge2:before {\n  content: \"\\e98b\";\n}\n.wangeditor-menu-img-shrink2:before {\n  content: \"\\e98c\";\n}\n.wangeditor-menu-img-newspaper:before {\n  content: \"\\e904\";\n}\n.wangeditor-menu-img-camera:before {\n  content: \"\\e90f\";\n}\n.wangeditor-menu-img-video-camera:before {\n  content: \"\\e914\";\n}\n.wangeditor-menu-img-file-zip:before {\n  content: \"\\e92b\";\n}\n.wangeditor-menu-img-stack:before {\n  content: \"\\e92e\";\n}\n.wangeditor-menu-img-credit-card:before {\n  content: \"\\e93f\";\n}\n.wangeditor-menu-img-address-book:before {\n  content: \"\\e944\";\n}\n.wangeditor-menu-img-envelop:before {\n  content: \"\\e945\";\n}\n.wangeditor-menu-img-drawer:before {\n  content: \"\\e95c\";\n}\n.wangeditor-menu-img-download:before {\n  content: \"\\e960\";\n}\n.wangeditor-menu-img-upload:before {\n  content: \"\\e961\";\n}\n.wangeditor-menu-img-lock:before {\n  content: \"\\e98f\";\n}\n.wangeditor-menu-img-unlocked:before {\n  content: \"\\e990\";\n}\n.wangeditor-menu-img-wrench:before {\n  content: \"\\e991\";\n}\n.wangeditor-menu-img-eye:before {\n  content: \"\\e9ce\";\n}\n.wangeditor-menu-img-eye-blocked:before {\n  content: \"\\e9d1\";\n}\n.wangeditor-menu-img-command:before {\n  content: \"\\ea4e\";\n}\n.wangeditor-menu-img-font2:before {\n  content: \"\\ea5c\";\n}\n.wangeditor-menu-img-libreoffice:before {\n  content: \"\\eade\";\n}\n.wangeditor-menu-img-quotes-left:before {\n  content: \"\\e977\";\n}\n.wangeditor-menu-img-strikethrough:before {\n  content: \"\\ea65\";\n}\n.wangeditor-menu-img-desktop:before {\n  content: \"\\f108\";\n}\n.wangeditor-menu-img-tablet:before {\n  content: \"\\f10a\";\n}\n.wangeditor-menu-img-search-plus:before {\n  content: \"\\f00e\";\n}\n.wangeditor-menu-img-search-minus:before {\n  content: \"\\f010\";\n}\n.wangeditor-menu-img-trash-o:before {\n  content: \"\\f014\";\n}\n.wangeditor-menu-img-align-justify:before {\n  content: \"\\f039\";\n}\n.wangeditor-menu-img-arrows-v:before {\n  content: \"\\f07d\";\n}\n.wangeditor-menu-img-sigma2:before {\n  content: \"\\ea68\";\n}\n.wangeditor-menu-img-omega:before {\n  content: \"\\e900\";\n}\n.wangeditor-menu-img-cancel-circle:before {\n  content: \"\\e901\";\n}\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  color: #333;\n  background: #f8f8f8;\n  -webkit-text-size-adjust: none;\n}\n.hljs-comment,\n.diff .hljs-header {\n  color: #998;\n  font-style: italic;\n}\n.hljs-keyword,\n.css .rule .hljs-keyword,\n.hljs-winutils,\n.nginx .hljs-title,\n.hljs-subst,\n.hljs-request,\n.hljs-status {\n  color: #333;\n  font-weight: bold;\n}\n.hljs-number,\n.hljs-hexcolor,\n.ruby .hljs-constant {\n  color: #008080;\n}\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-doctag,\n.tex .hljs-formula {\n  color: #d14;\n}\n.hljs-title,\n.hljs-id,\n.scss .hljs-preprocessor {\n  color: #900;\n  font-weight: bold;\n}\n.hljs-list .hljs-keyword,\n.hljs-subst {\n  font-weight: normal;\n}\n.hljs-class .hljs-title,\n.hljs-type,\n.vhdl .hljs-literal,\n.tex .hljs-command {\n  color: #458;\n  font-weight: bold;\n}\n.hljs-tag,\n.hljs-tag .hljs-title,\n.hljs-rule .hljs-property,\n.django .hljs-tag .hljs-keyword {\n  color: #000080;\n  font-weight: normal;\n}\n.hljs-attribute,\n.hljs-variable,\n.lisp .hljs-body,\n.hljs-name {\n  color: #008080;\n}\n.hljs-regexp {\n  color: #009926;\n}\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.lisp .hljs-keyword,\n.clojure .hljs-keyword,\n.scheme .hljs-keyword,\n.tex .hljs-special,\n.hljs-prompt {\n  color: #990073;\n}\n.hljs-built_in {\n  color: #0086b3;\n}\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-pi,\n.hljs-doctype,\n.hljs-shebang,\n.hljs-cdata {\n  color: #999;\n  font-weight: bold;\n}\n.hljs-deletion {\n  background: #fdd;\n}\n.hljs-addition {\n  background: #dfd;\n}\n.diff .hljs-change {\n  background: #0086b3;\n}\n.hljs-chunk {\n  color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/dashboard/wangeditor/css/wangEditor.css",
    "content": "/* 菜单颜色、上边框颜色 */\n/* 菜单选中状态的颜色 */\n/* input focus 时的颜色 */\n/* 按钮颜色 */\n/* tab selected 状态下的颜色 */\n.wangEditor-container {\n  position: relative;\n  background-color: #fff;\n  border: 1px solid #c6ffc6;\n  z-index: 1;\n  width: 100%;\n}\n.wangEditor-container a:focus,\n.wangEditor-container button:focus {\n  outline: none;\n}\n.wangEditor-container,\n.wangEditor-container * {\n  margin: 0;\n  padding: 0;\n  box-sizing: border-box;\n  line-height: 1;\n}\n.wangEditor-container img {\n  border: none;\n}\n.wangEditor-container .clearfix:after {\n  content: '';\n  display: table;\n  clear: both;\n}\n.wangEditor-container .clearfix {\n  *zoom: 1;\n}\n.wangEditor-container textarea {\n  border: none;\n}\n.wangEditor-container textarea:focus {\n  outline: none;\n}\n.wangEditor-container .height-tip {\n  position: absolute;\n  width: 3px;\n  background-color: #ccc;\n  left: 0;\n  transition: top .2s;\n}\n.wangEditor-container .txt-toolbar {\n  position: absolute;\n  background-color: #fff;\n  padding: 3px 5px;\n  border-top: 2px solid #c6ffc6;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-container .txt-toolbar .tip-triangle {\n  display: block;\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 5px solid;\n  border-color: transparent transparent #c6ffc6 transparent;\n  top: -12px;\n  left: 50%;\n  margin-left: -5px;\n}\n.wangEditor-container .txt-toolbar a {\n  color: #c6ffc6;\n  display: inline-block;\n  margin: 0 3px;\n  padding: 5px;\n  text-decoration: none;\n  border-radius: 3px;\n}\n.wangEditor-container .txt-toolbar a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-container .img-drag-point {\n  display: block;\n  position: absolute;\n  width: 12px;\n  height: 12px;\n  border-radius: 50%;\n  cursor: se-resize;\n  background-color: #c6ffc6;\n  margin-left: -6px;\n  margin-top: -6px;\n  box-shadow: 1px 1px 5px #999;\n}\n.wangEditor-container .wangEditor-upload-progress {\n  position: absolute;\n  height: 1px;\n  background: #1e88e5;\n  width: 0;\n  display: none;\n  -webkit-transition: width .5s;\n  -o-transition: width .5s;\n  transition: width .5s;\n}\n.wangEditor-fullscreen {\n  position: fixed;\n  top: 0;\n  bottom: 0;\n  left: 0;\n  right: 0;\n}\n.wangEditor-container .code-textarea {\n  resize: none;\n  width: 100%;\n  font-size: 14px;\n  line-height: 1.5;\n  font-family: 'Verdana';\n  color: #333;\n  padding: 0 15px 0 15px;\n}\n.wangEditor-menu-container {\n  width: 100%;\n  border-bottom: 1px solid #f1f1f1;\n  background-color: #fff;\n}\n.wangEditor-menu-container a {\n  text-decoration: none;\n}\n.wangEditor-menu-container .menu-group {\n  float: left;\n  padding: 0 8px;\n  border-right: 1px solid #f1f1f1;\n}\n.wangEditor-menu-container .menu-item {\n  float: left;\n  position: relative;\n  text-align: center;\n  height: 31px;\n  width: 35px;\n}\n.wangEditor-menu-container .menu-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-menu-container .menu-item a {\n  display: block;\n  text-align: center;\n  color: #c6ffc6;\n  width: 100%;\n  padding: 8px 0;\n  font-size: 0.9em;\n}\n.wangEditor-menu-container .menu-item .selected {\n  color: #1e88e5;\n}\n.wangEditor-menu-container .menu-item .active {\n  background-color: #f1f1f1;\n}\n.wangEditor-menu-container .menu-item .disable {\n  opacity: 0.5;\n  filter: alpha(opacity=50);\n}\n.wangEditor-menu-container .menu-tip {\n  display: block;\n  position: absolute;\n  z-index: 20;\n  width: 60px;\n  text-align: center;\n  background-color: #c6ffc6;\n  color: #fff;\n  padding: 7px 0;\n  font-size: 12px;\n  top: 100%;\n  left: 50%;\n  margin-left: -30px;\n  border-radius: 2px;\n  box-shadow: 1px 1px 5px #999;\n  display: none;\n  /*// 小三角\n        .tip-triangle {\n            display: block;\n            position: absolute;\n            width: 0;\n            height: 0;\n            border:5px solid;\n            border-color: transparent transparent @fore-color transparent;\n            top: -10px;\n            left: 50%;\n            margin-left: -5px;\n        }*/\n\n}\n.wangEditor-menu-container .menu-tip-40 {\n  width: 40px;\n  margin-left: -20px;\n}\n.wangEditor-menu-container .menu-tip-50 {\n  width: 50px;\n  margin-left: -25px;\n}\n.wangEditor-menu-shadow {\n  /*border-bottom-width: 0;*/\n\n  border-bottom: 1px\\9 solid\\9 #f1f1f1\\9;\n  box-shadow: 0 1px 3px #999;\n}\n.wangEditor-container .wangEditor-txt {\n  width: 100%;\n  text-align: left;\n  padding: 15px;\n  padding-top: 0;\n  margin-top: 5px;\n  overflow-y: auto;\n}\n.wangEditor-container .wangEditor-txt p,\n.wangEditor-container .wangEditor-txt h1,\n.wangEditor-container .wangEditor-txt h2,\n.wangEditor-container .wangEditor-txt h3,\n.wangEditor-container .wangEditor-txt h4,\n.wangEditor-container .wangEditor-txt h5 {\n  margin: 10px 0;\n  line-height: 1.8;\n}\n.wangEditor-container .wangEditor-txt p *,\n.wangEditor-container .wangEditor-txt h1 *,\n.wangEditor-container .wangEditor-txt h2 *,\n.wangEditor-container .wangEditor-txt h3 *,\n.wangEditor-container .wangEditor-txt h4 *,\n.wangEditor-container .wangEditor-txt h5 * {\n  line-height: 1.8;\n}\n.wangEditor-container .wangEditor-txt ul,\n.wangEditor-container .wangEditor-txt ol {\n  padding-left: 20px;\n}\n.wangEditor-container .wangEditor-txt img {\n  cursor: pointer;\n}\n.wangEditor-container .wangEditor-txt img.clicked {\n  box-shadow: 1px 1px 10px #999;\n}\n.wangEditor-container .wangEditor-txt table.clicked {\n  box-shadow: 1px 1px 10px #999;\n}\n.wangEditor-container .wangEditor-txt pre code {\n  line-height: 1.5;\n}\n.wangEditor-container .wangEditor-txt:focus {\n  outline: none;\n}\n.wangEditor-container .wangEditor-txt blockquote {\n  display: block;\n  border-left: 8px solid #d0e5f2;\n  padding: 5px 10px;\n  margin: 10px 0;\n  line-height: 1.4;\n  font-size: 100%;\n  background-color: #f1f1f1;\n}\n.wangEditor-container .wangEditor-txt table {\n  border: none;\n  border-collapse: collapse;\n}\n.wangEditor-container .wangEditor-txt table td,\n.wangEditor-container .wangEditor-txt table th {\n  border: 1px solid #999;\n  padding: 3px 5px;\n  min-width: 50px;\n  height: 20px;\n}\n.wangEditor-container .wangEditor-txt pre {\n  border: 1px solid #ccc;\n  background-color: #f8f8f8;\n  padding: 10px;\n  margin: 5px 0px;\n  font-size: 0.8em;\n  border-radius: 3px;\n}\n.wangEditor-drop-list {\n  display: none;\n  position: absolute;\n  background-color: #fff;\n  overflow: hidden;\n  z-index: 10;\n  transition: height .7s;\n  border-top: 1px solid #f1f1f1;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-drop-list a {\n  text-decoration: none;\n  display: block;\n  color: #c6ffc6;\n  padding: 3px 5px;\n}\n.wangEditor-drop-list a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel,\n.txt-toolbar {\n  display: none;\n  position: absolute;\n  padding: 10px;\n  font-size: 14px;\n  /*border: 1px\\9 solid\\9 #cccccc\\9;*/\n\n  background-color: #fff;\n  z-index: 10;\n  border-top: 2px solid #c6ffc6;\n  box-shadow: 1px 3px 3px #999;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-drop-panel .tip-triangle,\n.txt-toolbar .tip-triangle {\n  display: block;\n  position: absolute;\n  width: 0;\n  height: 0;\n  border: 5px solid;\n  border-color: transparent transparent #c6ffc6 transparent;\n  top: -12px;\n  left: 50%;\n  margin-left: -5px;\n}\n.wangEditor-drop-panel a,\n.txt-toolbar a {\n  text-decoration: none;\n}\n.wangEditor-drop-panel input[type=text],\n.txt-toolbar input[type=text] {\n  border: none;\n  border-bottom: 1px solid #ccc;\n  font-size: 14px;\n  height: 20px;\n  color: #333;\n  padding: 3px 0;\n}\n.wangEditor-drop-panel input[type=text]:focus,\n.txt-toolbar input[type=text]:focus {\n  outline: none;\n  border-bottom: 2px solid #1e88e5;\n}\n.wangEditor-drop-panel input[type=text].block,\n.txt-toolbar input[type=text].block {\n  display: block;\n  width: 100%;\n}\n.wangEditor-drop-panel textarea,\n.txt-toolbar textarea {\n  border: 1px solid #ccc;\n}\n.wangEditor-drop-panel textarea:focus,\n.txt-toolbar textarea:focus {\n  outline: none;\n  border-color: #1e88e5;\n}\n.wangEditor-drop-panel button,\n.txt-toolbar button {\n  font-size: 14px;\n  color: #1e88e5;\n  border: none;\n  padding: 10px;\n  background-color: #fff;\n  cursor: pointer;\n  border-radius: 3px;\n}\n.wangEditor-drop-panel button:hover,\n.txt-toolbar button:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel button:focus,\n.txt-toolbar button:focus {\n  outline: none;\n}\n.wangEditor-drop-panel button.right,\n.txt-toolbar button.right {\n  float: right;\n  margin-left: 10px;\n}\n.wangEditor-drop-panel button.gray,\n.txt-toolbar button.gray {\n  color: #999;\n}\n.wangEditor-drop-panel button.link,\n.txt-toolbar button.link {\n  padding: 5px 10px;\n}\n.wangEditor-drop-panel button.link:hover,\n.txt-toolbar button.link:hover {\n  background-color: #fff;\n  text-decoration: underline;\n}\n.wangEditor-drop-panel .color-item,\n.txt-toolbar .color-item {\n  display: block;\n  float: left;\n  width: 25px;\n  height: 25px;\n  text-align: center;\n  padding: 2px;\n  border-radius: 2px;\n  text-decoration: underline;\n}\n.wangEditor-drop-panel .color-item:hover,\n.txt-toolbar .color-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel .list-menu-item,\n.txt-toolbar .list-menu-item {\n  display: block;\n  float: left;\n  color: #333;\n  padding: 5px 5px;\n  border-radius: 2px;\n}\n.wangEditor-drop-panel .list-menu-item:hover,\n.txt-toolbar .list-menu-item:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel table.choose-table,\n.txt-toolbar table.choose-table {\n  border: none;\n  border-collapse: collapse;\n}\n.wangEditor-drop-panel table.choose-table td,\n.txt-toolbar table.choose-table td {\n  border: 1px solid #ccc;\n  width: 16px;\n  height: 12px;\n}\n.wangEditor-drop-panel table.choose-table td.active,\n.txt-toolbar table.choose-table td.active {\n  background-color: #ccc;\n  opacity: .5;\n  filter: alpha(opacity=50);\n}\n.wangEditor-drop-panel .panel-tab .tab-container,\n.txt-toolbar .panel-tab .tab-container {\n  margin-bottom: 5px;\n}\n.wangEditor-drop-panel .panel-tab .tab-container a,\n.txt-toolbar .panel-tab .tab-container a {\n  display: inline-block;\n  color: #999;\n  text-align: center;\n  margin: 0 5px;\n  padding: 5px 5px;\n}\n.wangEditor-drop-panel .panel-tab .tab-container a.selected,\n.txt-toolbar .panel-tab .tab-container a.selected {\n  color: #1e88e5;\n  border-bottom: 2px solid #1e88e5;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content,\n.txt-toolbar .panel-tab .content-container .content {\n  display: none;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content a,\n.txt-toolbar .panel-tab .content-container .content a {\n  display: inline-block;\n  margin: 2px;\n  padding: 2px;\n  border-radius: 2px;\n}\n.wangEditor-drop-panel .panel-tab .content-container .content a:hover,\n.txt-toolbar .panel-tab .content-container .content a:hover {\n  background-color: #f1f1f1;\n}\n.wangEditor-drop-panel .panel-tab .content-container .selected,\n.txt-toolbar .panel-tab .content-container .selected {\n  display: block;\n}\n.wangEditor-drop-panel .panel-tab .emotion-content-container,\n.txt-toolbar .panel-tab .emotion-content-container {\n  height: 200px;\n  overflow-y: auto;\n}\n.wangEditor-drop-panel .upload-icon-container,\n.txt-toolbar .upload-icon-container {\n  color: #ccc;\n  text-align: center;\n  margin: 20px 20px 15px 20px !important;\n  padding: 5px !important;\n  font-size: 65px;\n  cursor: pointer;\n  border: 2px dotted #f1f1f1;\n  display: block !important;\n}\n.wangEditor-drop-panel .upload-icon-container:hover,\n.txt-toolbar .upload-icon-container:hover {\n  color: #666;\n  border-color: #ccc;\n}\n.wangEditor-modal {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  background-color: #fff;\n  border-top: 1px solid #f1f1f1;\n  box-shadow: 1px 3px 3px #999;\n  border-top: 1px\\9 solid\\9 #ccc\\9;\n  border-left: 1px\\9 solid\\9 #ccc\\9;\n  border-bottom: 1px\\9 solid\\9 #999\\9;\n  border-right: 1px\\9 solid\\9 #999\\9;\n}\n.wangEditor-modal .wangEditor-modal-close {\n  position: absolute;\n  top: 0;\n  right: 0;\n  margin-top: -25px;\n  margin-right: -25px;\n  font-size: 1.5em;\n  color: #666;\n  cursor: pointer;\n}\n@font-face {\n  font-family: 'icomoon';\n  src: url('../fonts/icomoon.eot?-qdfu1s');\n  src: url('../fonts/icomoon.eot?#iefix-qdfu1s') format('embedded-opentype'), url('../fonts/icomoon.ttf?-qdfu1s') format('truetype'), url('../fonts/icomoon.woff?-qdfu1s') format('woff'), url('../fonts/icomoon.svg?-qdfu1s#icomoon') format('svg');\n  font-weight: normal;\n  font-style: normal;\n}\n[class^=\"wangeditor-menu-img-\"],\n[class*=\" wangeditor-menu-img-\"] {\n  font-family: 'icomoon';\n  speak: none;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-transform: none;\n  line-height: 1;\n  /* Better Font Rendering =========== */\n\n  -webkit-font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n}\n.wangeditor-menu-img-link:before {\n  content: \"\\e800\";\n}\n.wangeditor-menu-img-unlink:before {\n  content: \"\\e801\";\n}\n.wangeditor-menu-img-code:before {\n  content: \"\\e802\";\n}\n.wangeditor-menu-img-cancel:before {\n  content: \"\\e803\";\n}\n.wangeditor-menu-img-terminal:before {\n  content: \"\\e804\";\n}\n.wangeditor-menu-img-angle-down:before {\n  content: \"\\e805\";\n}\n.wangeditor-menu-img-font:before {\n  content: \"\\e806\";\n}\n.wangeditor-menu-img-bold:before {\n  content: \"\\e807\";\n}\n.wangeditor-menu-img-italic:before {\n  content: \"\\e808\";\n}\n.wangeditor-menu-img-header:before {\n  content: \"\\e809\";\n}\n.wangeditor-menu-img-align-left:before {\n  content: \"\\e80a\";\n}\n.wangeditor-menu-img-align-center:before {\n  content: \"\\e80b\";\n}\n.wangeditor-menu-img-align-right:before {\n  content: \"\\e80c\";\n}\n.wangeditor-menu-img-list-bullet:before {\n  content: \"\\e80d\";\n}\n.wangeditor-menu-img-indent-left:before {\n  content: \"\\e80e\";\n}\n.wangeditor-menu-img-indent-right:before {\n  content: \"\\e80f\";\n}\n.wangeditor-menu-img-list-numbered:before {\n  content: \"\\e810\";\n}\n.wangeditor-menu-img-underline:before {\n  content: \"\\e811\";\n}\n.wangeditor-menu-img-table:before {\n  content: \"\\e812\";\n}\n.wangeditor-menu-img-eraser:before {\n  content: \"\\e813\";\n}\n.wangeditor-menu-img-text-height:before {\n  content: \"\\e814\";\n}\n.wangeditor-menu-img-brush:before {\n  content: \"\\e815\";\n}\n.wangeditor-menu-img-pencil:before {\n  content: \"\\e816\";\n}\n.wangeditor-menu-img-minus:before {\n  content: \"\\e817\";\n}\n.wangeditor-menu-img-picture:before {\n  content: \"\\e818\";\n}\n.wangeditor-menu-img-file-image:before {\n  content: \"\\e819\";\n}\n.wangeditor-menu-img-cw:before {\n  content: \"\\e81a\";\n}\n.wangeditor-menu-img-ccw:before {\n  content: \"\\e81b\";\n}\n.wangeditor-menu-img-music:before {\n  content: \"\\e911\";\n}\n.wangeditor-menu-img-play:before {\n  content: \"\\e912\";\n}\n.wangeditor-menu-img-location:before {\n  content: \"\\e947\";\n}\n.wangeditor-menu-img-happy:before {\n  content: \"\\e9df\";\n}\n.wangeditor-menu-img-sigma:before {\n  content: \"\\ea67\";\n}\n.wangeditor-menu-img-enlarge2:before {\n  content: \"\\e98b\";\n}\n.wangeditor-menu-img-shrink2:before {\n  content: \"\\e98c\";\n}\n.wangeditor-menu-img-newspaper:before {\n  content: \"\\e904\";\n}\n.wangeditor-menu-img-camera:before {\n  content: \"\\e90f\";\n}\n.wangeditor-menu-img-video-camera:before {\n  content: \"\\e914\";\n}\n.wangeditor-menu-img-file-zip:before {\n  content: \"\\e92b\";\n}\n.wangeditor-menu-img-stack:before {\n  content: \"\\e92e\";\n}\n.wangeditor-menu-img-credit-card:before {\n  content: \"\\e93f\";\n}\n.wangeditor-menu-img-address-book:before {\n  content: \"\\e944\";\n}\n.wangeditor-menu-img-envelop:before {\n  content: \"\\e945\";\n}\n.wangeditor-menu-img-drawer:before {\n  content: \"\\e95c\";\n}\n.wangeditor-menu-img-download:before {\n  content: \"\\e960\";\n}\n.wangeditor-menu-img-upload:before {\n  content: \"\\e961\";\n}\n.wangeditor-menu-img-lock:before {\n  content: \"\\e98f\";\n}\n.wangeditor-menu-img-unlocked:before {\n  content: \"\\e990\";\n}\n.wangeditor-menu-img-wrench:before {\n  content: \"\\e991\";\n}\n.wangeditor-menu-img-eye:before {\n  content: \"\\e9ce\";\n}\n.wangeditor-menu-img-eye-blocked:before {\n  content: \"\\e9d1\";\n}\n.wangeditor-menu-img-command:before {\n  content: \"\\ea4e\";\n}\n.wangeditor-menu-img-font2:before {\n  content: \"\\ea5c\";\n}\n.wangeditor-menu-img-libreoffice:before {\n  content: \"\\eade\";\n}\n.wangeditor-menu-img-quotes-left:before {\n  content: \"\\e977\";\n}\n.wangeditor-menu-img-strikethrough:before {\n  content: \"\\ea65\";\n}\n.wangeditor-menu-img-desktop:before {\n  content: \"\\f108\";\n}\n.wangeditor-menu-img-tablet:before {\n  content: \"\\f10a\";\n}\n.wangeditor-menu-img-search-plus:before {\n  content: \"\\f00e\";\n}\n.wangeditor-menu-img-search-minus:before {\n  content: \"\\f010\";\n}\n.wangeditor-menu-img-trash-o:before {\n  content: \"\\f014\";\n}\n.wangeditor-menu-img-align-justify:before {\n  content: \"\\f039\";\n}\n.wangeditor-menu-img-arrows-v:before {\n  content: \"\\f07d\";\n}\n.wangeditor-menu-img-sigma2:before {\n  content: \"\\ea68\";\n}\n.wangeditor-menu-img-omega:before {\n  content: \"\\e900\";\n}\n.wangeditor-menu-img-cancel-circle:before {\n  content: \"\\e901\";\n}\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  color: #333;\n  background: #f8f8f8;\n  -webkit-text-size-adjust: none;\n}\n.hljs-comment,\n.diff .hljs-header {\n  color: #998;\n  font-style: italic;\n}\n.hljs-keyword,\n.css .rule .hljs-keyword,\n.hljs-winutils,\n.nginx .hljs-title,\n.hljs-subst,\n.hljs-request,\n.hljs-status {\n  color: #333;\n  font-weight: bold;\n}\n.hljs-number,\n.hljs-hexcolor,\n.ruby .hljs-constant {\n  color: #008080;\n}\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-doctag,\n.tex .hljs-formula {\n  color: #d14;\n}\n.hljs-title,\n.hljs-id,\n.scss .hljs-preprocessor {\n  color: #900;\n  font-weight: bold;\n}\n.hljs-list .hljs-keyword,\n.hljs-subst {\n  font-weight: normal;\n}\n.hljs-class .hljs-title,\n.hljs-type,\n.vhdl .hljs-literal,\n.tex .hljs-command {\n  color: #458;\n  font-weight: bold;\n}\n.hljs-tag,\n.hljs-tag .hljs-title,\n.hljs-rule .hljs-property,\n.django .hljs-tag .hljs-keyword {\n  color: #000080;\n  font-weight: normal;\n}\n.hljs-attribute,\n.hljs-variable,\n.lisp .hljs-body,\n.hljs-name {\n  color: #008080;\n}\n.hljs-regexp {\n  color: #009926;\n}\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.lisp .hljs-keyword,\n.clojure .hljs-keyword,\n.scheme .hljs-keyword,\n.tex .hljs-special,\n.hljs-prompt {\n  color: #990073;\n}\n.hljs-built_in {\n  color: #0086b3;\n}\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-pi,\n.hljs-doctype,\n.hljs-shebang,\n.hljs-cdata {\n  color: #999;\n  font-weight: bold;\n}\n.hljs-deletion {\n  background: #fdd;\n}\n.hljs-addition {\n  background: #dfd;\n}\n.diff .hljs-change {\n  background: #0086b3;\n}\n.hljs-chunk {\n  color: #aaa;\n}\n"
  },
  {
    "path": "public/assets/dashboard/wangeditor/css/wangEditor.less",
    "content": "\n// ---------- begin 全局颜色配置 ------------\n\n/* 编辑器边框颜色 */\n//@border-color: #ccc;\n//@border-color: #c6ffc6;\n//\n///* 菜单颜色、上边框颜色 */\n//@fore-color: #666;\n//\n///* 菜单选中状态的颜色 */\n//@selected-color: #1e88e5;\n//\n///* input focus 时的颜色 */\n//@focus-input-color: #1e88e5;\n//\n///* 按钮颜色 */\n//@button-color: #1e88e5;\n//\n///* tab selected 状态下的颜色 */\n//@selected-tab-color: #1e88e5;\n\n\n@border-color: #c6ffc6;\n\n/* 菜单颜色、上边框颜色 */\n@fore-color: #c6ffc6;\n\n/* 菜单选中状态的颜色 */\n@selected-color: #1e88e5;\n\n/* input focus 时的颜色 */\n@focus-input-color: #1e88e5;\n\n/* 按钮颜色 */\n@button-color: #1e88e5;\n\n/* tab selected 状态下的颜色 */\n@selected-tab-color: #1e88e5;\n\n// ---------- end 全局颜色配置 ------------\n\n\n.wangEditor-container {\n    position: relative;\n    background-color: #fff;\n    border: 1px solid @border-color;\n    z-index: 1;\n    width: 100%;\n\n    a:focus,\n    button:focus{\n        outline:none;\n    }\n\n    &,* {\n        margin: 0;\n        padding: 0;\n        box-sizing: border-box;\n        line-height: 1;\n    }\n\n    img {\n        border: none;\n    }\n\n    .clearfix:after {\n        content: '';\n        display: table;\n        clear: both;\n    }\n    .clearfix {\n        *zoom: 1;\n    }\n\n    textarea {\n        border: none;\n        &:focus{\n            outline: none; \n        }\n    }\n\n    // 显示p head 高度的 tip\n    .height-tip {\n        position: absolute;\n        width: 3px;\n        background-color: #ccc;\n        left: 0;\n        transition: top .2s;\n    }\n\n    // 设置 img table 的 toolbar\n    .txt-toolbar {\n        position: absolute;\n        background-color: #fff;\n        padding: 3px 5px;\n        border-top: 2px solid @fore-color;\n        box-shadow: 1px 3px 3px #999;\n\n        // for IE8\n        border-left: 1px\\9 solid\\9 #ccc\\9;\n        border-bottom: 1px\\9 solid\\9 #999\\9;\n        border-right: 1px\\9 solid\\9 #999\\9;\n\n        // 小三角\n        .tip-triangle {\n            display: block;\n            position: absolute;\n            width: 0;\n            height: 0;\n            border: 5px solid;\n            border-color: transparent transparent @fore-color transparent;\n            top: -12px;\n            left: 50%;\n            margin-left: -5px;\n        }\n\n        a {\n            color: @fore-color;\n            display: inline-block;\n            margin: 0 3px;\n            padding: 5px;\n            text-decoration: none;\n            border-radius: 3px;\n\n            &:hover {\n                background-color: #f1f1f1;\n            }\n        }\n    }\n    // 图品拖拽大小\n    .img-drag-point {\n        display: block;\n        position: absolute;\n        width: 12px;\n        height: 12px;\n        border-radius: 50%;\n        cursor: se-resize;\n        background-color: @fore-color;\n        margin-left: -6px;\n        margin-top: -6px;\n        box-shadow: 1px 1px 5px #999;\n    }\n\n    // 进度条\n    .wangEditor-upload-progress {\n        position: absolute;\n        height: 1px;\n        background: #1e88e5;\n        width: 0;\n        display: none;\n        -webkit-transition: width .5s;\n        -o-transition: width .5s;\n        transition: width .5s;\n    }\n}\n.wangEditor-fullscreen {\n    position: fixed;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    right: 0;\n}\n.wangEditor-container {\n    .code-textarea {\n        resize: none;\n        width: 100%;\n        font-size: 14px;\n        line-height: 1.5;\n        font-family: 'Verdana';\n        color: #333;\n        padding: 0 15px 0 15px;\n    }\n}\n.wangEditor-menu-container {\n\n    width: 100%;\n    border-bottom: 1px solid #f1f1f1;\n    background-color: #fff;\n    \n    a {\n        text-decoration: none;\n    }\n\n    // 菜单组\n    .menu-group {\n        float: left;\n        padding: 0 8px;\n        border-right: 1px solid #f1f1f1;\n    }\n\n    // 单个菜单容器\n    .menu-item {\n        float: left;\n        position: relative;\n        text-align: center;\n        height: 31px;\n        width: 35px;\n\n        &:hover {\n            background-color: #f1f1f1;\n        }\n\n        // 菜单\n        a {\n            display: block;\n            text-align: center;\n            color: @fore-color;\n            width: 100%;\n            padding: 8px 0;\n            font-size: 0.9em;\n        }\n\n         // 菜单选中状态\n        .selected {\n            color: @selected-color;\n        }\n\n        // 激活状态\n        .active {\n            background-color: #f1f1f1;\n        }\n\n        // 禁用状态\n        .disable {\n            opacity: 0.5;\n            filter: Alpha(opacity=50);\n        }\n    }\n\n    // tip提示\n    .menu-tip {\n        display: block;\n        position: absolute;\n        z-index: 20;\n        width: 60px;\n        text-align: center;\n        background-color: @fore-color;\n        color: #fff;\n        padding: 7px 0;\n        font-size: 12px;\n        top: 100%;\n        left: 50%;\n        margin-left: -30px;\n        border-radius: 2px;\n        box-shadow: 1px 1px 5px #999;\n\n        display: none;\n\n        /*// 小三角\n        .tip-triangle {\n            display: block;\n            position: absolute;\n            width: 0;\n            height: 0;\n            border:5px solid;\n            border-color: transparent transparent @fore-color transparent;\n            top: -10px;\n            left: 50%;\n            margin-left: -5px;\n        }*/\n    }\n    .menu-tip-40 {\n        width: 40px;\n        margin-left: -20px;\n    }\n    .menu-tip-50 {\n        width: 50px;\n        margin-left: -25px;\n    }\n}\n.wangEditor-menu-shadow {\n    /*border-bottom-width: 0;*/\n    border-bottom: 1px\\9 solid\\9 #f1f1f1\\9;\n    box-shadow: 0 1px 3px #999;\n}\n.wangEditor-container {\n    .wangEditor-txt{\n        width: 100%;\n        text-align: left;\n        padding: 15px;\n        padding-top: 0;\n        margin-top: 5px;\n        overflow-y: auto;\n\n        p,h1,h2,h3,h4,h5 {\n            margin: 10px 0;\n            line-height: 1.8;\n\n            * {\n                line-height: 1.8;\n            }\n        }\n\n        ul, ol {\n            padding-left: 20px;\n        }\n\n        img {\n            cursor: pointer;\n        }\n        img.clicked {\n            box-shadow: 1px 1px 10px #999;\n        }\n\n        table.clicked {\n            box-shadow: 1px 1px 10px #999;\n        }\n\n        pre code {\n            line-height: 1.5;\n        }\n\n        &:focus{\n            outline: none; \n        }\n    }\n}\n.wangEditor-container {\n    .wangEditor-txt {\n        blockquote {\n            display: block; \n            border-left: 8px solid #d0e5f2;\n            padding: 5px 10px;\n            margin: 10px 0; \n            line-height: 1.4; \n            font-size: 100%;\n            background-color: #f1f1f1;\n        }\n        table {\n            border: none;\n            border-collapse: collapse;\n        }\n        table td,\n        table th {\n            border: 1px solid #999;\n            padding: 3px 5px;\n            min-width: 50px;\n            height: 20px;\n        }\n        pre {\n            border: 1px solid #ccc; \n            background-color: #f8f8f8; \n            padding: 10px; \n            margin: 5px 0px;\n            font-size: 0.8em;\n            border-radius: 3px;\n        }\n    }\n}\n.wangEditor-drop-list {\n    display: none;\n    position: absolute;\n    background-color: #fff;\n    overflow: hidden;\n    z-index: 10;\n\n    transition: height .7s;\n    \n    border-top: 1px solid #f1f1f1;\n    box-shadow: 1px 3px 3px #999;\n\n    // for IE8\n    border-left: 1px\\9 solid\\9 #ccc\\9;\n    border-bottom: 1px\\9 solid\\9 #999\\9;\n    border-right: 1px\\9 solid\\9 #999\\9;\n\n    a {\n        text-decoration: none;\n        display: block;\n        color: @fore-color;\n        padding: 3px 5px;\n\n        &:hover {\n            background-color: #f1f1f1;\n        }\n    }\n}\n.wangEditor-drop-panel,\n.txt-toolbar {\n    display: none;\n    position: absolute;\n    padding: 10px;\n    font-size: 14px;\n    /*border: 1px\\9 solid\\9 #cccccc\\9;*/\n\n    background-color: #fff;\n    z-index: 10;\n    \n    border-top: 2px solid @fore-color;\n    box-shadow: 1px 3px 3px #999;\n\n    // for IE8\n    border-left: 1px\\9 solid\\9 #ccc\\9;\n    border-bottom: 1px\\9 solid\\9 #999\\9;\n    border-right: 1px\\9 solid\\9 #999\\9;\n\n    // 小三角\n    .tip-triangle {\n        display: block;\n        position: absolute;\n        width: 0;\n        height: 0;\n        border: 5px solid;\n        border-color: transparent transparent @fore-color transparent;\n        top: -12px;\n        left: 50%;\n        margin-left: -5px;\n    }\n\n    a {\n        text-decoration: none;\n    }\n\n    // 输入框\n    input[type=text] {\n        border: none;\n        border-bottom: 1px solid #ccc;\n        font-size: 14px;\n        height: 20px;\n        color: #333;\n        padding: 3px 0;\n\n        &:focus{\n            outline: none;\n            border-bottom: 2px solid @focus-input-color;\n        }\n    }\n    input[type=text].block {\n        display: block;\n        width: 100%;\n    }\n    textarea {\n        border: 1px solid #ccc;\n        &:focus {\n            outline: none;\n            border-color: @focus-input-color;\n        }\n    }\n\n    // 按钮\n    button {\n        font-size: 14px;\n        color: @button-color;\n        border: none;\n        padding: 10px;\n        background-color: #fff;\n        cursor: pointer;\n        border-radius: 3px;\n        \n        &:hover {\n            background-color: #f1f1f1;\n        }\n        &:focus{\n            outline: none; \n        }\n    }\n    button.right {\n        float: right;\n        margin-left: 10px;\n    }\n    button.gray {\n        color: #999;\n    }\n    button.link {\n        padding: 5px 10px;\n        &:hover {\n            background-color: #fff;\n            text-decoration: underline;\n        }\n    }\n    \n    // 颜色块\n    .color-item {\n        display: block;\n        float: left;\n        width: 25px;\n        height: 25px;\n        text-align: center;\n        padding: 2px;\n        border-radius: 2px;\n        text-decoration: underline;\n\n        &:hover {\n            background-color: #f1f1f1;\n        }\n    }\n\n    // 列表\n    .list-menu-item {\n        display: block;\n        float: left;\n        color: #333;\n        padding: 5px 5px;\n        border-radius: 2px;\n\n        &:hover {\n            background-color: #f1f1f1;\n        }\n    }\n\n    // 表格\n    table.choose-table {\n        border: none;\n        border-collapse: collapse;\n\n        td {\n            border: 1px solid #ccc;\n            width: 16px;\n            height: 12px;\n        }\n        td.active {\n            background-color: #ccc;\n            opacity: .5;\n            filter: Alpha(opacity=50);\n        }\n    }\n\n    // tab\n    .panel-tab {\n        .tab-container {\n            margin-bottom: 5px;\n\n            a {\n                display: inline-block;\n                color: #999;\n                text-align: center;\n                margin: 0 5px;\n                padding: 5px 5px;\n            }\n\n            a.selected {\n                color: @selected-tab-color;\n                border-bottom: 2px solid @selected-tab-color;\n            }\n        }\n        .content-container {\n            .content {\n                display: none;\n\n                a {\n                    display: inline-block;\n                    margin: 2px;\n                    padding: 2px;\n                    border-radius: 2px;\n\n                    &:hover {\n                        background-color: #f1f1f1;\n                    }\n                }\n            }\n            .selected {\n                display: block;\n            }\n        }\n        .emotion-content-container {\n            height: 200px;\n            overflow-y: auto;\n        }\n    }\n\n    // 上传图片\n    .upload-icon-container {\n        color: #ccc;\n        text-align: center;\n        margin: 20px 20px 15px 20px !important;\n        padding: 5px !important;\n        font-size: 65px;\n        cursor: pointer;\n        border: 2px dotted #f1f1f1;\n        display: block !important;\n\n        &:hover {\n            color: #666;\n            border-color: #ccc;\n        }\n    }\n}\n.wangEditor-modal {\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    background-color: #fff;\n    \n    border-top: 1px solid #f1f1f1;\n    box-shadow: 1px 3px 3px #999;\n\n    // for IE8\n    border-top: 1px\\9 solid\\9 #ccc\\9;\n    border-left: 1px\\9 solid\\9 #ccc\\9;\n    border-bottom: 1px\\9 solid\\9 #999\\9;\n    border-right: 1px\\9 solid\\9 #999\\9;\n\n    // 关闭按钮\n    .wangEditor-modal-close {\n        position: absolute;\n        top: 0;\n        right: 0;\n        margin-top: -25px;\n        margin-right: -25px;\n        font-size: 1.5em;\n        color: #666;\n        cursor: pointer;\n    }\n    \n}\n@font-face {\n    font-family: 'icomoon';\n    src:url('../fonts/icomoon.eot?-qdfu1s');\n    src:url('../fonts/icomoon.eot?#iefix-qdfu1s') format('embedded-opentype'),\n        url('../fonts/icomoon.ttf?-qdfu1s') format('truetype'),\n        url('../fonts/icomoon.woff?-qdfu1s') format('woff'),\n        url('../fonts/icomoon.svg?-qdfu1s#icomoon') format('svg');\n    font-weight: normal;\n    font-style: normal;\n}\n\n[class^=\"wangeditor-menu-img-\"], [class*=\" wangeditor-menu-img-\"] {\n    font-family: 'icomoon';\n    speak: none;\n    font-style: normal;\n    font-weight: normal;\n    font-variant: normal;\n    text-transform: none;\n    line-height: 1;\n\n    /* Better Font Rendering =========== */\n    -webkit-font-smoothing: antialiased;\n    -moz-osx-font-smoothing: grayscale;\n}\n.wangeditor-menu-img-link:before {content: \"\\e800\";}\n.wangeditor-menu-img-unlink:before {content: \"\\e801\";}\n.wangeditor-menu-img-code:before {content: \"\\e802\";}\n.wangeditor-menu-img-cancel:before {content: \"\\e803\";}\n.wangeditor-menu-img-terminal:before {content: \"\\e804\";}\n.wangeditor-menu-img-angle-down:before {content: \"\\e805\";}\n.wangeditor-menu-img-font:before {content: \"\\e806\";}\n.wangeditor-menu-img-bold:before {content: \"\\e807\";}\n.wangeditor-menu-img-italic:before {content: \"\\e808\";}\n.wangeditor-menu-img-header:before {content: \"\\e809\";}\n.wangeditor-menu-img-align-left:before {content: \"\\e80a\";}\n.wangeditor-menu-img-align-center:before {content: \"\\e80b\";}\n.wangeditor-menu-img-align-right:before {content: \"\\e80c\";}\n.wangeditor-menu-img-list-bullet:before {content: \"\\e80d\";}\n.wangeditor-menu-img-indent-left:before {content: \"\\e80e\";}\n.wangeditor-menu-img-indent-right:before {content: \"\\e80f\";}\n.wangeditor-menu-img-list-numbered:before {content: \"\\e810\";}\n.wangeditor-menu-img-underline:before {content: \"\\e811\";}\n.wangeditor-menu-img-table:before {content: \"\\e812\";}\n.wangeditor-menu-img-eraser:before {content: \"\\e813\";}\n.wangeditor-menu-img-text-height:before {content: \"\\e814\";}\n.wangeditor-menu-img-brush:before {content: \"\\e815\";}\n.wangeditor-menu-img-pencil:before {content: \"\\e816\";}\n.wangeditor-menu-img-minus:before {content: \"\\e817\";}\n.wangeditor-menu-img-picture:before {content: \"\\e818\";}\n.wangeditor-menu-img-file-image:before {content: \"\\e819\";}\n.wangeditor-menu-img-cw:before {content: \"\\e81a\";}\n.wangeditor-menu-img-ccw:before {content: \"\\e81b\";}\n.wangeditor-menu-img-music:before {content: \"\\e911\";}\n.wangeditor-menu-img-play:before {content: \"\\e912\";}\n.wangeditor-menu-img-location:before {content: \"\\e947\";}\n.wangeditor-menu-img-happy:before {content: \"\\e9df\";}\n.wangeditor-menu-img-sigma:before {content: \"\\ea67\";}\n.wangeditor-menu-img-enlarge2:before {content: \"\\e98b\";}\n.wangeditor-menu-img-shrink2:before {content: \"\\e98c\";}\n.wangeditor-menu-img-newspaper:before{content: \"\\e904\";}\n.wangeditor-menu-img-camera:before{content: \"\\e90f\";}\n.wangeditor-menu-img-video-camera:before{content: \"\\e914\";}\n.wangeditor-menu-img-file-zip:before{content: \"\\e92b\";}\n.wangeditor-menu-img-stack:before{content: \"\\e92e\";}\n.wangeditor-menu-img-credit-card:before{content: \"\\e93f\";}\n.wangeditor-menu-img-address-book:before{content: \"\\e944\";}\n.wangeditor-menu-img-envelop:before{content: \"\\e945\";}\n.wangeditor-menu-img-drawer:before{content: \"\\e95c\";}\n.wangeditor-menu-img-download:before{content: \"\\e960\";}\n.wangeditor-menu-img-upload:before{content: \"\\e961\";}\n.wangeditor-menu-img-lock:before{content: \"\\e98f\";}\n.wangeditor-menu-img-unlocked:before{content: \"\\e990\";}\n.wangeditor-menu-img-wrench:before{content: \"\\e991\";}\n.wangeditor-menu-img-eye:before{content: \"\\e9ce\";}\n.wangeditor-menu-img-eye-blocked:before{content: \"\\e9d1\";}\n.wangeditor-menu-img-command:before{content: \"\\ea4e\";}\n.wangeditor-menu-img-font2:before{content: \"\\ea5c\";}\n.wangeditor-menu-img-libreoffice:before{content: \"\\eade\";}\n.wangeditor-menu-img-quotes-left:before{content: \"\\e977\";}\n.wangeditor-menu-img-strikethrough:before{content: \"\\ea65\";}\n.wangeditor-menu-img-desktop:before{content: \"\\f108\";}\n.wangeditor-menu-img-tablet:before{content: \"\\f10a\";}\n.wangeditor-menu-img-search-plus:before {\n    content: \"\\f00e\";\n}\n.wangeditor-menu-img-search-minus:before {\n    content: \"\\f010\";\n}\n.wangeditor-menu-img-trash-o:before {\n    content: \"\\f014\";\n}\n.wangeditor-menu-img-align-justify:before {\n    content: \"\\f039\";\n}\n.wangeditor-menu-img-arrows-v:before {\n    content: \"\\f07d\";\n}\n.wangeditor-menu-img-sigma2:before {\n    content: \"\\ea68\";\n}\n.wangeditor-menu-img-omega:before {\n    content: \"\\e900\";\n}\n.wangeditor-menu-img-cancel-circle:before {\n    content: \"\\e901\";\n}\n.hljs {\n  display: block;\n  overflow-x: auto;\n  padding: 0.5em;\n  color: #333;\n  background: #f8f8f8;\n  -webkit-text-size-adjust: none;\n}\n\n.hljs-comment,\n.diff .hljs-header {\n  color: #998;\n  font-style: italic;\n}\n\n.hljs-keyword,\n.css .rule .hljs-keyword,\n.hljs-winutils,\n.nginx .hljs-title,\n.hljs-subst,\n.hljs-request,\n.hljs-status {\n  color: #333;\n  font-weight: bold;\n}\n\n.hljs-number,\n.hljs-hexcolor,\n.ruby .hljs-constant {\n  color: #008080;\n}\n\n.hljs-string,\n.hljs-tag .hljs-value,\n.hljs-doctag,\n.tex .hljs-formula {\n  color: #d14;\n}\n\n.hljs-title,\n.hljs-id,\n.scss .hljs-preprocessor {\n  color: #900;\n  font-weight: bold;\n}\n\n.hljs-list .hljs-keyword,\n.hljs-subst {\n  font-weight: normal;\n}\n\n.hljs-class .hljs-title,\n.hljs-type,\n.vhdl .hljs-literal,\n.tex .hljs-command {\n  color: #458;\n  font-weight: bold;\n}\n\n.hljs-tag,\n.hljs-tag .hljs-title,\n.hljs-rule .hljs-property,\n.django .hljs-tag .hljs-keyword {\n  color: #000080;\n  font-weight: normal;\n}\n\n.hljs-attribute,\n.hljs-variable,\n.lisp .hljs-body,\n.hljs-name {\n  color: #008080;\n}\n\n.hljs-regexp {\n  color: #009926;\n}\n\n.hljs-symbol,\n.ruby .hljs-symbol .hljs-string,\n.lisp .hljs-keyword,\n.clojure .hljs-keyword,\n.scheme .hljs-keyword,\n.tex .hljs-special,\n.hljs-prompt {\n  color: #990073;\n}\n\n.hljs-built_in {\n  color: #0086b3;\n}\n\n.hljs-preprocessor,\n.hljs-pragma,\n.hljs-pi,\n.hljs-doctype,\n.hljs-shebang,\n.hljs-cdata {\n  color: #999;\n  font-weight: bold;\n}\n\n.hljs-deletion {\n  background: #fdd;\n}\n\n.hljs-addition {\n  background: #dfd;\n}\n\n.diff .hljs-change {\n  background: #0086b3;\n}\n\n.hljs-chunk {\n  color: #aaa;\n}"
  },
  {
    "path": "public/assets/dashboard/wangeditor/js/emotions.data",
    "content": "[{\"phrase\":\"[坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_org.png\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/pcmoren_huaixiao_thumb.png\",\"value\":\"[坏笑]\",\"picid\":\"\"},{\"phrase\":\"[舔屏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_org.png\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/pcmoren_tian_thumb.png\",\"value\":\"[舔屏]\",\"picid\":\"\"},{\"phrase\":\"[污]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_org.png\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/pcmoren_wu_thumb.png\",\"value\":\"[污]\",\"picid\":\"\"},{\"phrase\":\"[微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_thumb.gif\",\"value\":\"[微笑]\",\"picid\":\"\"},{\"phrase\":\"[嘻嘻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_thumb.gif\",\"value\":\"[嘻嘻]\",\"picid\":\"\"},{\"phrase\":\"[哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif\",\"value\":\"[哈哈]\",\"picid\":\"\"},{\"phrase\":\"[可爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_thumb.gif\",\"value\":\"[可爱]\",\"picid\":\"\"},{\"phrase\":\"[可怜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_thumb.gif\",\"value\":\"[可怜]\",\"picid\":\"\"},{\"phrase\":\"[挖鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_thumb.gif\",\"value\":\"[挖鼻]\",\"picid\":\"\"},{\"phrase\":\"[吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_thumb.gif\",\"value\":\"[吃惊]\",\"picid\":\"\"},{\"phrase\":\"[害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_thumb.gif\",\"value\":\"[害羞]\",\"picid\":\"\"},{\"phrase\":\"[挤眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_thumb.gif\",\"value\":\"[挤眼]\",\"picid\":\"\"},{\"phrase\":\"[闭嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_thumb.gif\",\"value\":\"[闭嘴]\",\"picid\":\"\"},{\"phrase\":\"[鄙视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_thumb.gif\",\"value\":\"[鄙视]\",\"picid\":\"\"},{\"phrase\":\"[爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_thumb.gif\",\"value\":\"[爱你]\",\"picid\":\"\"},{\"phrase\":\"[泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_thumb.gif\",\"value\":\"[泪]\",\"picid\":\"\"},{\"phrase\":\"[偷笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_thumb.gif\",\"value\":\"[偷笑]\",\"picid\":\"\"},{\"phrase\":\"[亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_thumb.gif\",\"value\":\"[亲亲]\",\"picid\":\"\"},{\"phrase\":\"[生病]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_thumb.gif\",\"value\":\"[生病]\",\"picid\":\"\"},{\"phrase\":\"[太开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_thumb.gif\",\"value\":\"[太开心]\",\"picid\":\"\"},{\"phrase\":\"[白眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_thumb.gif\",\"value\":\"[白眼]\",\"picid\":\"\"},{\"phrase\":\"[右哼哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_thumb.gif\",\"value\":\"[右哼哼]\",\"picid\":\"\"},{\"phrase\":\"[左哼哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_thumb.gif\",\"value\":\"[左哼哼]\",\"picid\":\"\"},{\"phrase\":\"[嘘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_thumb.gif\",\"value\":\"[嘘]\",\"picid\":\"\"},{\"phrase\":\"[衰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif\",\"value\":\"[衰]\",\"picid\":\"\"},{\"phrase\":\"[委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/wq_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/wq_thumb.gif\",\"value\":\"[委屈]\",\"picid\":\"\"},{\"phrase\":\"[吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/t_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/t_thumb.gif\",\"value\":\"[吐]\",\"picid\":\"\"},{\"phrase\":\"[哈欠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/haqianv2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/haqianv2_thumb.gif\",\"value\":\"[哈欠]\",\"picid\":\"\"},{\"phrase\":\"[抱抱_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/bba_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/bba_thumb.gif\",\"value\":\"[抱抱_旧]\",\"picid\":\"\"},{\"phrase\":\"[怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/angrya_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/angrya_thumb.gif\",\"value\":\"[怒]\",\"picid\":\"\"},{\"phrase\":\"[疑问]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/yw_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/yw_thumb.gif\",\"value\":\"[疑问]\",\"picid\":\"\"},{\"phrase\":\"[馋嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/cza_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/cza_thumb.gif\",\"value\":\"[馋嘴]\",\"picid\":\"\"},{\"phrase\":\"[拜拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/88_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/88_thumb.gif\",\"value\":\"[拜拜]\",\"picid\":\"\"},{\"phrase\":\"[思考]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/sk_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/sk_thumb.gif\",\"value\":\"[思考]\",\"picid\":\"\"},{\"phrase\":\"[汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/sweata_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/sweata_thumb.gif\",\"value\":\"[汗]\",\"picid\":\"\"},{\"phrase\":\"[困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kunv2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kunv2_thumb.gif\",\"value\":\"[困]\",\"picid\":\"\"},{\"phrase\":\"[睡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/huangliansj_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/huangliansj_thumb.gif\",\"value\":\"[睡]\",\"picid\":\"\"},{\"phrase\":\"[钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/money_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/money_thumb.gif\",\"value\":\"[钱]\",\"picid\":\"\"},{\"phrase\":\"[失望]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/sw_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/sw_thumb.gif\",\"value\":\"[失望]\",\"picid\":\"\"},{\"phrase\":\"[酷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/cool_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/cool_thumb.gif\",\"value\":\"[酷]\",\"picid\":\"\"},{\"phrase\":\"[色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/huanglianse_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/huanglianse_thumb.gif\",\"value\":\"[色]\",\"picid\":\"\"},{\"phrase\":\"[哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/hatea_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/hatea_thumb.gif\",\"value\":\"[哼]\",\"picid\":\"\"},{\"phrase\":\"[鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/gza_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/gza_thumb.gif\",\"value\":\"[鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/dizzya_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/dizzya_thumb.gif\",\"value\":\"[晕]\",\"picid\":\"\"},{\"phrase\":\"[悲伤]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/bs_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/bs_thumb.gif\",\"value\":\"[悲伤]\",\"picid\":\"\"},{\"phrase\":\"[抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/crazya_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/crazya_thumb.gif\",\"value\":\"[抓狂]\",\"picid\":\"\"},{\"phrase\":\"[黑线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/h_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/h_thumb.gif\",\"value\":\"[黑线]\",\"picid\":\"\"},{\"phrase\":\"[阴险]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/yx_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/yx_thumb.gif\",\"value\":\"[阴险]\",\"picid\":\"\"},{\"phrase\":\"[怒骂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/numav2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/numav2_thumb.gif\",\"value\":\"[怒骂]\",\"picid\":\"\"},{\"phrase\":\"[互粉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/hufen_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/hufen_thumb.gif\",\"value\":\"[互粉]\",\"picid\":\"\"},{\"phrase\":\"[心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/hearta_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/hearta_thumb.gif\",\"value\":\"[心]\",\"picid\":\"\"},{\"phrase\":\"[伤心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/unheart.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/unheart.gif\",\"value\":\"[伤心]\",\"picid\":\"\"},{\"phrase\":\"[猪头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/pig.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/pig.gif\",\"value\":\"[猪头]\",\"picid\":\"\"},{\"phrase\":\"[熊猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/panda_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/panda_thumb.gif\",\"value\":\"[熊猫]\",\"picid\":\"\"},{\"phrase\":\"[兔子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/rabbit_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/rabbit_thumb.gif\",\"value\":\"[兔子]\",\"picid\":\"\"},{\"phrase\":\"[ok]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/ok_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/ok_thumb.gif\",\"value\":\"[ok]\",\"picid\":\"\"},{\"phrase\":\"[耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/ye_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/ye_thumb.gif\",\"value\":\"[耶]\",\"picid\":\"\"},{\"phrase\":\"[good]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/good_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/good_thumb.gif\",\"value\":\"[good]\",\"picid\":\"\"},{\"phrase\":\"[NO]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/buyao_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/buyao_org.gif\",\"value\":\"[NO]\",\"picid\":\"\"},{\"phrase\":\"[赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/z2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/z2_thumb.gif\",\"value\":\"[赞]\",\"picid\":\"\"},{\"phrase\":\"[来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/come_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/come_thumb.gif\",\"value\":\"[来]\",\"picid\":\"\"},{\"phrase\":\"[弱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/sad_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/sad_thumb.gif\",\"value\":\"[弱]\",\"picid\":\"\"},{\"phrase\":\"[草泥马]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/shenshou_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/shenshou_thumb.gif\",\"value\":\"[草泥马]\",\"picid\":\"\"},{\"phrase\":\"[神马]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_thumb.gif\",\"value\":\"[神马]\",\"picid\":\"\"},{\"phrase\":\"[囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j_thumb.gif\",\"value\":\"[囧]\",\"picid\":\"\"},{\"phrase\":\"[浮云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/fuyun_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/fuyun_thumb.gif\",\"value\":\"[浮云]\",\"picid\":\"\"},{\"phrase\":\"[给力]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/geiliv2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/geiliv2_thumb.gif\",\"value\":\"[给力]\",\"picid\":\"\"},{\"phrase\":\"[围观]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/wg_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/wg_thumb.gif\",\"value\":\"[围观]\",\"picid\":\"\"},{\"phrase\":\"[威武]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/vw_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/vw_thumb.gif\",\"value\":\"[威武]\",\"picid\":\"\"},{\"phrase\":\"[话筒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/huatongv2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/huatongv2_thumb.gif\",\"value\":\"[话筒]\",\"picid\":\"\"},{\"phrase\":\"[蜡烛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/lazhuv2_org.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/lazhuv2_thumb.gif\",\"value\":\"[蜡烛]\",\"picid\":\"\"},{\"phrase\":\"[蛋糕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/cakev2_thumb.gif\",\"hot\":false,\"common\":true,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/cakev2_thumb.gif\",\"value\":\"[蛋糕]\",\"picid\":\"\"},{\"phrase\":\"[发红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/fahongbao_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/fahongbao_thumb.gif\",\"value\":\"[发红包]\",\"picid\":\"\"},{\"phrase\":\"[红包飞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/../e0/hongbao1_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/../e0/hongbao1_thumb.gif\",\"value\":\"[红包飞]\",\"picid\":\"\"},{\"phrase\":\"[广告]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/ad_new0902_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/ad_new0902_thumb.gif\",\"value\":\"[广告]\",\"picid\":\"\"},{\"phrase\":\"[doge]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/doge_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/doge_thumb.gif\",\"value\":\"[doge]\",\"picid\":\"\"},{\"phrase\":\"[喵喵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/mm_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/mm_thumb.gif\",\"value\":\"[喵喵]\",\"picid\":\"\"},{\"phrase\":\"[二哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/moren_hashiqi_org.png\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/moren_hashiqi_thumb.png\",\"value\":\"[二哈]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_thumb.gif\",\"value\":\"[哆啦A梦吃惊]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_thumb.gif\",\"value\":\"[哆啦A梦微笑]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦花心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_thumb.gif\",\"value\":\"[哆啦A梦花心]\",\"picid\":\"\"},{\"phrase\":\"[笑cry]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/xiaoku_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/xiaoku_thumb.gif\",\"value\":\"[笑cry]\",\"picid\":\"\"},{\"phrase\":\"[摊手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/pcmoren_tanshou_org.png\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/pcmoren_tanshou_thumb.png\",\"value\":\"[摊手]\",\"picid\":\"\"},{\"phrase\":\"[抱抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/pcmoren_baobao_org.png\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/pcmoren_baobao_thumb.png\",\"value\":\"[抱抱]\",\"picid\":\"\"},{\"phrase\":\"[冰川时代希德奶奶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/bhsj5_nainai_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/bhsj5_nainai_thumb.gif\",\"value\":\"[冰川时代希德奶奶]\",\"picid\":\"\"},{\"phrase\":\"[快银]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/xman_kuaiyin_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/xman_kuaiyin_org.gif\",\"value\":\"[快银]\",\"picid\":\"\"},{\"phrase\":\"[暴风女]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/xman_baofengnv_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/xman_baofengnv_thumb.gif\",\"value\":\"[暴风女]\",\"picid\":\"\"},{\"phrase\":\"[芒果流口水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/mango_07_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/mango_07_thumb.gif\",\"value\":\"[芒果流口水]\",\"picid\":\"\"},{\"phrase\":\"[芒果点赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_thumb.gif\",\"value\":\"[芒果点赞]\",\"picid\":\"\"},{\"phrase\":\"[芒果大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mango_02_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mango_02_thumb.gif\",\"value\":\"[芒果大笑]\",\"picid\":\"\"},{\"phrase\":\"[芒果得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mango_03_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mango_03_thumb.gif\",\"value\":\"[芒果得意]\",\"picid\":\"\"},{\"phrase\":\"[芒果萌萌哒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/mango_11_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/mango_11_thumb.gif\",\"value\":\"[芒果萌萌哒]\",\"picid\":\"\"},{\"phrase\":\"[羊年大吉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/yangniandj_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/yangniandj_thumb.gif\",\"value\":\"[羊年大吉]\",\"picid\":\"\"},{\"phrase\":\"[西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/watermelon.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/watermelon.gif\",\"value\":\"[西瓜]\",\"picid\":\"\"},{\"phrase\":\"[足球]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/football.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/football.gif\",\"value\":\"[足球]\",\"picid\":\"\"},{\"phrase\":\"[老妈我爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/mothersday_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/mothersday_thumb.gif\",\"value\":\"[老妈我爱你]\",\"picid\":\"\"},{\"phrase\":\"[母亲节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/carnation_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/carnation_thumb.gif\",\"value\":\"[母亲节]\",\"picid\":\"\"},{\"phrase\":\"[肥皂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/soap_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/soap_thumb.gif\",\"value\":\"[肥皂]\",\"picid\":\"\"},{\"phrase\":\"[有钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/youqian_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/youqian_thumb.gif\",\"value\":\"[有钱]\",\"picid\":\"\"},{\"phrase\":\"[地球一小时]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/earth1r_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/earth1r_thumb.gif\",\"value\":\"[地球一小时]\",\"picid\":\"\"},{\"phrase\":\"[国旗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/flag_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/flag_thumb.gif\",\"value\":\"[国旗]\",\"picid\":\"\"},{\"phrase\":\"[许愿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/lxhxuyuan_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/lxhxuyuan_thumb.gif\",\"value\":\"[许愿]\",\"picid\":\"\"},{\"phrase\":\"[风扇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/fan.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/fan.gif\",\"value\":\"[风扇]\",\"picid\":\"\"},{\"phrase\":\"[炸鸡和啤酒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/zhaji_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/zhaji_thumb.gif\",\"value\":\"[炸鸡和啤酒]\",\"picid\":\"\"},{\"phrase\":\"[雪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/snow_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/snow_thumb.gif\",\"value\":\"[雪]\",\"picid\":\"\"},{\"phrase\":\"[马上有对象]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mashangyouduixiang_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mashangyouduixiang_thumb.gif\",\"value\":\"[马上有对象]\",\"picid\":\"\"},{\"phrase\":\"[马到成功旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/madaochenggong_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/madaochenggong_thumb.gif\",\"value\":\"[马到成功旧]\",\"picid\":\"\"},{\"phrase\":\"[青啤鸿运当头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_thumb.gif\",\"value\":\"[青啤鸿运当头]\",\"picid\":\"\"},{\"phrase\":\"[让红包飞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/hongbaofei2014_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/hongbaofei2014_thumb.gif\",\"value\":\"[让红包飞]\",\"picid\":\"\"},{\"phrase\":\"[ali做鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/alizuoguiliannew_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/alizuoguiliannew_thumb.gif\",\"value\":\"[ali做鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[ali哇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/aliwanew_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/aliwanew_thumb.gif\",\"value\":\"[ali哇]\",\"picid\":\"\"},{\"phrase\":\"[xkl转圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/xklzhuanquan_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/xklzhuanquan_thumb.gif\",\"value\":\"[xkl转圈]\",\"picid\":\"\"},{\"phrase\":\"[酷库熊顽皮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/kxwanpi_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/kxwanpi_thumb.gif\",\"value\":\"[酷库熊顽皮]\",\"picid\":\"\"},{\"phrase\":\"[bm可爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/bmkeai_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/bmkeai_thumb.gif\",\"value\":\"[bm可爱]\",\"picid\":\"\"},{\"phrase\":\"[BOBO爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/boaini_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/boaini_thumb.gif\",\"value\":\"[BOBO爱你]\",\"picid\":\"\"},{\"phrase\":\"[转发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhzhuanfa_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhzhuanfa_thumb.gif\",\"value\":\"[转发]\",\"picid\":\"\"},{\"phrase\":\"[得意地笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhdeyidixiao_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhdeyidixiao_thumb.gif\",\"value\":\"[得意地笑]\",\"picid\":\"\"},{\"phrase\":\"[ppb鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbguzhang_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbguzhang_thumb.gif\",\"value\":\"[ppb鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[din推撞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/dintuizhuang_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/dintuizhuang_thumb.gif\",\"value\":\"[din推撞]\",\"picid\":\"\"},{\"phrase\":\"[moc转发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/moczhuanfa_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/moczhuanfa_thumb.gif\",\"value\":\"[moc转发]\",\"picid\":\"\"},{\"phrase\":\"[lt切克闹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ltqiekenao_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ltqiekenao_thumb.gif\",\"value\":\"[lt切克闹]\",\"picid\":\"\"},{\"phrase\":\"[江南style]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/gangnamstyle_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/gangnamstyle_thumb.gif\",\"value\":\"[江南style]\",\"picid\":\"\"},{\"phrase\":\"[笑哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_org.gif\",\"hot\":true,\"common\":false,\"category\":\"\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_thumb.gif\",\"value\":\"[笑哈哈]\",\"picid\":\"\"},{\"phrase\":\"[挤眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/zy_thumb.gif\",\"value\":\"[挤眼]\",\"picid\":\"\"},{\"phrase\":\"[亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/qq_thumb.gif\",\"value\":\"[亲亲]\",\"picid\":\"\"},{\"phrase\":\"[太开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/mb_thumb.gif\",\"value\":\"[太开心]\",\"picid\":\"\"},{\"phrase\":\"[生病]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/sb_thumb.gif\",\"value\":\"[生病]\",\"picid\":\"\"},{\"phrase\":\"[书呆子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/sdz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/sdz_thumb.gif\",\"value\":\"[书呆子]\",\"picid\":\"\"},{\"phrase\":\"[失望]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/sw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/sw_thumb.gif\",\"value\":\"[失望]\",\"picid\":\"\"},{\"phrase\":\"[可怜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/kl_thumb.gif\",\"value\":\"[可怜]\",\"picid\":\"\"},{\"phrase\":\"[黑线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/h_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/h_thumb.gif\",\"value\":\"[黑线]\",\"picid\":\"\"},{\"phrase\":\"[吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/t_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/t_thumb.gif\",\"value\":\"[吐]\",\"picid\":\"\"},{\"phrase\":\"[委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/wq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/wq_thumb.gif\",\"value\":\"[委屈]\",\"picid\":\"\"},{\"phrase\":\"[思考]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/sk_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/sk_thumb.gif\",\"value\":\"[思考]\",\"picid\":\"\"},{\"phrase\":\"[哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh.gif\",\"value\":\"[哈哈]\",\"picid\":\"\"},{\"phrase\":\"[嘘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/x_thumb.gif\",\"value\":\"[嘘]\",\"picid\":\"\"},{\"phrase\":\"[右哼哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/yhh_thumb.gif\",\"value\":\"[右哼哼]\",\"picid\":\"\"},{\"phrase\":\"[左哼哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/zhh_thumb.gif\",\"value\":\"[左哼哼]\",\"picid\":\"\"},{\"phrase\":\"[疑问]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/yw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/yw_thumb.gif\",\"value\":\"[疑问]\",\"picid\":\"\"},{\"phrase\":\"[阴险]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/yx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/yx_thumb.gif\",\"value\":\"[阴险]\",\"picid\":\"\"},{\"phrase\":\"[顶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/d_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/d_thumb.gif\",\"value\":\"[顶]\",\"picid\":\"\"},{\"phrase\":\"[钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/money_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/money_thumb.gif\",\"value\":\"[钱]\",\"picid\":\"\"},{\"phrase\":\"[悲伤]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/bs_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/bs_thumb.gif\",\"value\":\"[悲伤]\",\"picid\":\"\"},{\"phrase\":\"[鄙视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bs2_thumb.gif\",\"value\":\"[鄙视]\",\"picid\":\"\"},{\"phrase\":\"[拜拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/88_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/88_thumb.gif\",\"value\":\"[拜拜]\",\"picid\":\"\"},{\"phrase\":\"[吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cj_thumb.gif\",\"value\":\"[吃惊]\",\"picid\":\"\"},{\"phrase\":\"[闭嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bz_thumb.gif\",\"value\":\"[闭嘴]\",\"picid\":\"\"},{\"phrase\":\"[衰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry.gif\",\"value\":\"[衰]\",\"picid\":\"\"},{\"phrase\":\"[愤怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/fn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/fn_thumb.gif\",\"value\":\"[愤怒]\",\"picid\":\"\"},{\"phrase\":\"[感冒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/gm_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/gm_thumb.gif\",\"value\":\"[感冒]\",\"picid\":\"\"},{\"phrase\":\"[酷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/cool_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/cool_thumb.gif\",\"value\":\"[酷]\",\"picid\":\"\"},{\"phrase\":\"[来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/come_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/come_thumb.gif\",\"value\":\"[来]\",\"picid\":\"\"},{\"phrase\":\"[good]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/good_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/good_thumb.gif\",\"value\":\"[good]\",\"picid\":\"\"},{\"phrase\":\"[haha]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/ha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/ha_thumb.gif\",\"value\":\"[haha]\",\"picid\":\"\"},{\"phrase\":\"[ok]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/ok_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/ok_thumb.gif\",\"value\":\"[ok]\",\"picid\":\"\"},{\"phrase\":\"[拳头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/o_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/o_thumb.gif\",\"value\":\"[拳头]\",\"picid\":\"\"},{\"phrase\":\"[弱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/sad_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/sad_thumb.gif\",\"value\":\"[弱]\",\"picid\":\"\"},{\"phrase\":\"[握手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ws_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ws_thumb.gif\",\"value\":\"[握手]\",\"picid\":\"\"},{\"phrase\":\"[赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/z2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/z2_thumb.gif\",\"value\":\"[赞]\",\"picid\":\"\"},{\"phrase\":\"[耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/ye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/ye_thumb.gif\",\"value\":\"[耶]\",\"picid\":\"\"},{\"phrase\":\"[最差]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/bad_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/bad_thumb.gif\",\"value\":\"[最差]\",\"picid\":\"\"},{\"phrase\":\"[NO]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/buyao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/buyao_org.gif\",\"value\":\"[NO]\",\"picid\":\"\"},{\"phrase\":\"[怒骂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/numav2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/numav2_thumb.gif\",\"value\":\"[怒骂]\",\"picid\":\"\"},{\"phrase\":\"[困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kunv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kunv2_thumb.gif\",\"value\":\"[困]\",\"picid\":\"\"},{\"phrase\":\"[哈欠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/haqianv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/haqianv2_thumb.gif\",\"value\":\"[哈欠]\",\"picid\":\"\"},{\"phrase\":\"[微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/huanglianwx_thumb.gif\",\"value\":\"[微笑]\",\"picid\":\"\"},{\"phrase\":\"[白眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/landeln_thumb.gif\",\"value\":\"[白眼]\",\"picid\":\"\"},{\"phrase\":\"[睡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/huangliansj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/huangliansj_thumb.gif\",\"value\":\"[睡]\",\"picid\":\"\"},{\"phrase\":\"[色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/huanglianse_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/huanglianse_thumb.gif\",\"value\":\"[色]\",\"picid\":\"\"},{\"phrase\":\"[挖鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/wabi_thumb.gif\",\"value\":\"[挖鼻]\",\"picid\":\"\"},{\"phrase\":\"[傻眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/shayan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/shayan_thumb.gif\",\"value\":\"[傻眼]\",\"picid\":\"\"},{\"phrase\":\"[打脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/dalian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/dalian_thumb.gif\",\"value\":\"[打脸]\",\"picid\":\"\"},{\"phrase\":\"[作揖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/zuoyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/zuoyi_thumb.gif\",\"value\":\"[作揖]\",\"picid\":\"\"},{\"phrase\":\"[笑cry]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/xiaoku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/xiaoku_thumb.gif\",\"value\":\"[笑cry]\",\"picid\":\"\"},{\"phrase\":\"[红丝带]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/red_band_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/red_band_thumb.gif\",\"value\":\"[红丝带]\",\"picid\":\"\"},{\"phrase\":\"[绿丝带]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/green_band_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/green_band_thumb.gif\",\"value\":\"[绿丝带]\",\"picid\":\"\"},{\"phrase\":\"[可爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/tza_thumb.gif\",\"value\":\"[可爱]\",\"picid\":\"\"},{\"phrase\":\"[嘻嘻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/tootha_thumb.gif\",\"value\":\"[嘻嘻]\",\"picid\":\"\"},{\"phrase\":\"[汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/sweata_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/sweata_thumb.gif\",\"value\":\"[汗]\",\"picid\":\"\"},{\"phrase\":\"[害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/shamea_thumb.gif\",\"value\":\"[害羞]\",\"picid\":\"\"},{\"phrase\":\"[泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/sada_thumb.gif\",\"value\":\"[泪]\",\"picid\":\"\"},{\"phrase\":\"[爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/lovea_thumb.gif\",\"value\":\"[爱你]\",\"picid\":\"\"},{\"phrase\":\"[偷笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/heia_thumb.gif\",\"value\":\"[偷笑]\",\"picid\":\"\"},{\"phrase\":\"[心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/hearta_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/hearta_thumb.gif\",\"value\":\"[心]\",\"picid\":\"\"},{\"phrase\":\"[哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/hatea_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/hatea_thumb.gif\",\"value\":\"[哼]\",\"picid\":\"\"},{\"phrase\":\"[鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/gza_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/gza_thumb.gif\",\"value\":\"[鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/dizzya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/dizzya_thumb.gif\",\"value\":\"[晕]\",\"picid\":\"\"},{\"phrase\":\"[馋嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/cza_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/cza_thumb.gif\",\"value\":\"[馋嘴]\",\"picid\":\"\"},{\"phrase\":\"[抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/crazya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/crazya_thumb.gif\",\"value\":\"[抓狂]\",\"picid\":\"\"},{\"phrase\":\"[抱抱_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/bba_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/bba_thumb.gif\",\"value\":\"[抱抱_旧]\",\"picid\":\"\"},{\"phrase\":\"[怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/angrya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/angrya_thumb.gif\",\"value\":\"[怒]\",\"picid\":\"\"},{\"phrase\":\"[右抱抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/right_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/right_thumb.gif\",\"value\":\"[右抱抱]\",\"picid\":\"\"},{\"phrase\":\"[左抱抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/left_org.gif\",\"hot\":false,\"common\":false,\"category\":\"心情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/left_thumb.gif\",\"value\":\"[左抱抱]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦花心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/dorahaose_thumb.gif\",\"value\":\"[哆啦A梦花心]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦害怕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/dorahaipa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/dorahaipa_thumb.gif\",\"value\":\"[哆啦A梦害怕]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/dorachijing_thumb.gif\",\"value\":\"[哆啦A梦吃惊]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/dorahan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/dorahan_thumb.gif\",\"value\":\"[哆啦A梦汗]\",\"picid\":\"\"},{\"phrase\":\"[哆啦A梦微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/jqmweixiao_thumb.gif\",\"value\":\"[哆啦A梦微笑]\",\"picid\":\"\"},{\"phrase\":\"[伴我同行]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/jqmbwtxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/jqmbwtxing_thumb.gif\",\"value\":\"[伴我同行]\",\"picid\":\"\"},{\"phrase\":\"[静香微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/jiqimaojingxiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/jiqimaojingxiang_thumb.gif\",\"value\":\"[静香微笑]\",\"picid\":\"\"},{\"phrase\":\"[大雄微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/jiqimaodaxiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/jiqimaodaxiong_thumb.gif\",\"value\":\"[大雄微笑]\",\"picid\":\"\"},{\"phrase\":\"[胖虎微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/jiqimaopanghu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/jiqimaopanghu_thumb.gif\",\"value\":\"[胖虎微笑]\",\"picid\":\"\"},{\"phrase\":\"[小夫微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/jiqimaoxiaofu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哆啦A梦\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/jiqimaoxiaofu_thumb.gif\",\"value\":\"[小夫微笑]\",\"picid\":\"\"},{\"phrase\":\"[bm做操]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/bmzuocao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/bmzuocao_thumb.gif\",\"value\":\"[bm做操]\",\"picid\":\"\"},{\"phrase\":\"[bm抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/bmzhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/bmzhuakuang_thumb.gif\",\"value\":\"[bm抓狂]\",\"picid\":\"\"},{\"phrase\":\"[bm中枪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/bmzhongqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/bmzhongqiang_thumb.gif\",\"value\":\"[bm中枪]\",\"picid\":\"\"},{\"phrase\":\"[bm震惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/bmzhenjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/bmzhenjing_thumb.gif\",\"value\":\"[bm震惊]\",\"picid\":\"\"},{\"phrase\":\"[bm赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/bmzan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/bmzan_thumb.gif\",\"value\":\"[bm赞]\",\"picid\":\"\"},{\"phrase\":\"[bm喜悦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/bmxiyue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/bmxiyue_thumb.gif\",\"value\":\"[bm喜悦]\",\"picid\":\"\"},{\"phrase\":\"[bm醒悟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmxingwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmxingwu_thumb.gif\",\"value\":\"[bm醒悟]\",\"picid\":\"\"},{\"phrase\":\"[bm兴奋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/bmxingfen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/bmxingfen_thumb.gif\",\"value\":\"[bm兴奋]\",\"picid\":\"\"},{\"phrase\":\"[bm血泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/bmxielei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/bmxielei_thumb.gif\",\"value\":\"[bm血泪]\",\"picid\":\"\"},{\"phrase\":\"[bm挖鼻孔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/bmwabikong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/bmwabikong_thumb.gif\",\"value\":\"[bm挖鼻孔]\",\"picid\":\"\"},{\"phrase\":\"[bm吐舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmtushetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmtushetou_thumb.gif\",\"value\":\"[bm吐舌头]\",\"picid\":\"\"},{\"phrase\":\"[bm吐槽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/bmtucao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/bmtucao_thumb.gif\",\"value\":\"[bm吐槽]\",\"picid\":\"\"},{\"phrase\":\"[bm投诉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/bmtousu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/bmtousu_thumb.gif\",\"value\":\"[bm投诉]\",\"picid\":\"\"},{\"phrase\":\"[bm跳绳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/bmtiaosheng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/bmtiaosheng_thumb.gif\",\"value\":\"[bm跳绳]\",\"picid\":\"\"},{\"phrase\":\"[bm调皮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/bmtiaopi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/bmtiaopi_thumb.gif\",\"value\":\"[bm调皮]\",\"picid\":\"\"},{\"phrase\":\"[bm讨论]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/bmtaolun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/bmtaolun_thumb.gif\",\"value\":\"[bm讨论]\",\"picid\":\"\"},{\"phrase\":\"[bm抬腿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/bmtaitui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/bmtaitui_thumb.gif\",\"value\":\"[bm抬腿]\",\"picid\":\"\"},{\"phrase\":\"[bm思考]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/bmsikao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/bmsikao_thumb.gif\",\"value\":\"[bm思考]\",\"picid\":\"\"},{\"phrase\":\"[bm生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmshengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/bmshengqi_thumb.gif\",\"value\":\"[bm生气]\",\"picid\":\"\"},{\"phrase\":\"[bm亲吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmqinwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmqinwen_thumb.gif\",\"value\":\"[bm亲吻]\",\"picid\":\"\"},{\"phrase\":\"[bm庆幸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bmqingxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bmqingxing_thumb.gif\",\"value\":\"[bm庆幸]\",\"picid\":\"\"},{\"phrase\":\"[bm内涵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/bmneihan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/bmneihan_thumb.gif\",\"value\":\"[bm内涵]\",\"picid\":\"\"},{\"phrase\":\"[bm忙碌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/bmmanglu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/bmmanglu_thumb.gif\",\"value\":\"[bm忙碌]\",\"picid\":\"\"},{\"phrase\":\"[bm乱入]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/bmluanru_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/bmluanru_thumb.gif\",\"value\":\"[bm乱入]\",\"picid\":\"\"},{\"phrase\":\"[bm卖萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/bmluanmeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/bmluanmeng_thumb.gif\",\"value\":\"[bm卖萌]\",\"picid\":\"\"},{\"phrase\":\"[bm流泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/bmliulei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/bmliulei_thumb.gif\",\"value\":\"[bm流泪]\",\"picid\":\"\"},{\"phrase\":\"[bm流口水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmliukoushui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmliukoushui_thumb.gif\",\"value\":\"[bm流口水]\",\"picid\":\"\"},{\"phrase\":\"[bm流鼻涕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/bmliubiti_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/bmliubiti_thumb.gif\",\"value\":\"[bm流鼻涕]\",\"picid\":\"\"},{\"phrase\":\"[bm路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/bmliguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/bmliguo_thumb.gif\",\"value\":\"[bm路过]\",\"picid\":\"\"},{\"phrase\":\"[bm咧嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/bmliezui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/bmliezui_thumb.gif\",\"value\":\"[bm咧嘴]\",\"picid\":\"\"},{\"phrase\":\"[bm啦啦队]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/bmlaladui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/bmlaladui_thumb.gif\",\"value\":\"[bm啦啦队]\",\"picid\":\"\"},{\"phrase\":\"[bm哭诉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/bmkusu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/bmkusu_thumb.gif\",\"value\":\"[bm哭诉]\",\"picid\":\"\"},{\"phrase\":\"[bm哭泣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/bmkuqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/bmkuqi_thumb.gif\",\"value\":\"[bm哭泣]\",\"picid\":\"\"},{\"phrase\":\"[bm苦逼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/bmkubi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/bmkubi_thumb.gif\",\"value\":\"[bm苦逼]\",\"picid\":\"\"},{\"phrase\":\"[bm口哨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/bmkoushao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/bmkoushao_thumb.gif\",\"value\":\"[bm口哨]\",\"picid\":\"\"},{\"phrase\":\"[bm可爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/bmkeai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/bmkeai_thumb.gif\",\"value\":\"[bm可爱]\",\"picid\":\"\"},{\"phrase\":\"[bm紧张]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/bmjinzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/bmjinzhang_thumb.gif\",\"value\":\"[bm紧张]\",\"picid\":\"\"},{\"phrase\":\"[bm惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/bmjingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/bmjingya_thumb.gif\",\"value\":\"[bm惊讶]\",\"picid\":\"\"},{\"phrase\":\"[bm惊吓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/bmjingxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/bmjingxia_thumb.gif\",\"value\":\"[bm惊吓]\",\"picid\":\"\"},{\"phrase\":\"[bm焦虑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/bmjiaolv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/bmjiaolv_thumb.gif\",\"value\":\"[bm焦虑]\",\"picid\":\"\"},{\"phrase\":\"[bm会心笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bmhuixinxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bmhuixinxiao_thumb.gif\",\"value\":\"[bm会心笑]\",\"picid\":\"\"},{\"phrase\":\"[bm坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/bmhuaixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/bmhuaixiao_thumb.gif\",\"value\":\"[bm坏笑]\",\"picid\":\"\"},{\"phrase\":\"[bm花痴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/bmhuachi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/bmhuachi_thumb.gif\",\"value\":\"[bm花痴]\",\"picid\":\"\"},{\"phrase\":\"[bm厚脸皮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/bmhoulianpi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/bmhoulianpi_thumb.gif\",\"value\":\"[bm厚脸皮]\",\"picid\":\"\"},{\"phrase\":\"[bm好吧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/bmhaoba_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/bmhaoba_thumb.gif\",\"value\":\"[bm好吧]\",\"picid\":\"\"},{\"phrase\":\"[bm害怕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bmhaipa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bmhaipa_thumb.gif\",\"value\":\"[bm害怕]\",\"picid\":\"\"},{\"phrase\":\"[bm鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/bmguilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/bmguilian_thumb.gif\",\"value\":\"[bm鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[bm孤独]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/bmgudu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/bmgudu_thumb.gif\",\"value\":\"[bm孤独]\",\"picid\":\"\"},{\"phrase\":\"[bm高兴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bmgaoxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bmgaoxing_thumb.gif\",\"value\":\"[bm高兴]\",\"picid\":\"\"},{\"phrase\":\"[bm搞怪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/bmgaoguai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/bmgaoguai_thumb.gif\",\"value\":\"[bm搞怪]\",\"picid\":\"\"},{\"phrase\":\"[bm干笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/bmganxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/bmganxiao_thumb.gif\",\"value\":\"[bm干笑]\",\"picid\":\"\"},{\"phrase\":\"[bm感动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/bmgandong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/bmgandong_thumb.gif\",\"value\":\"[bm感动]\",\"picid\":\"\"},{\"phrase\":\"[bm愤懑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/bmfenmen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/bmfenmen_thumb.gif\",\"value\":\"[bm愤懑]\",\"picid\":\"\"},{\"phrase\":\"[bm反对]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/bmfandui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/bmfandui_thumb.gif\",\"value\":\"[bm反对]\",\"picid\":\"\"},{\"phrase\":\"[bm踱步]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/bmduobu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/bmduobu_thumb.gif\",\"value\":\"[bm踱步]\",\"picid\":\"\"},{\"phrase\":\"[bm顶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/bmding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/bmding_thumb.gif\",\"value\":\"[bm顶]\",\"picid\":\"\"},{\"phrase\":\"[bm得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/bmdeyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/bmdeyi_thumb.gif\",\"value\":\"[bm得意]\",\"picid\":\"\"},{\"phrase\":\"[bm得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/bmdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/bmdese_thumb.gif\",\"value\":\"[bm得瑟]\",\"picid\":\"\"},{\"phrase\":\"[bm大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/bmdaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/bmdaxiao_thumb.gif\",\"value\":\"[bm大笑]\",\"picid\":\"\"},{\"phrase\":\"[bm蛋糕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/bmdangao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/bmdangao_thumb.gif\",\"value\":\"[bm蛋糕]\",\"picid\":\"\"},{\"phrase\":\"[bm大哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/bmdaku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/bmdaku_thumb.gif\",\"value\":\"[bm大哭]\",\"picid\":\"\"},{\"phrase\":\"[bm大叫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/bmdajiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/bmdajiao_thumb.gif\",\"value\":\"[bm大叫]\",\"picid\":\"\"},{\"phrase\":\"[bm吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/bmchijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/bmchijing_thumb.gif\",\"value\":\"[bm吃惊]\",\"picid\":\"\"},{\"phrase\":\"[bm馋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/bmchan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/bmchan_thumb.gif\",\"value\":\"[bm馋]\",\"picid\":\"\"},{\"phrase\":\"[bm彩色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bmcaise_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bmcaise_thumb.gif\",\"value\":\"[bm彩色]\",\"picid\":\"\"},{\"phrase\":\"[bm缤纷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/bmbinfen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/bmbinfen_thumb.gif\",\"value\":\"[bm缤纷]\",\"picid\":\"\"},{\"phrase\":\"[bm变身]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/bmbianshen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/bmbianshen_thumb.gif\",\"value\":\"[bm变身]\",\"picid\":\"\"},{\"phrase\":\"[bm悲催]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/bmbeicui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/bmbeicui_thumb.gif\",\"value\":\"[bm悲催]\",\"picid\":\"\"},{\"phrase\":\"[bm暴怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/bmbaonu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/bmbaonu_thumb.gif\",\"value\":\"[bm暴怒]\",\"picid\":\"\"},{\"phrase\":\"[bm熬夜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmaoye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/bmaoye_thumb.gif\",\"value\":\"[bm熬夜]\",\"picid\":\"\"},{\"phrase\":\"[bm暗爽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/bmanshuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"暴走漫画\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/bmanshuang_thumb.gif\",\"value\":\"[bm暗爽]\",\"picid\":\"\"},{\"phrase\":\"[xkl拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xklbainian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xklbainian_thumb.gif\",\"value\":\"[xkl拜年]\",\"picid\":\"\"},{\"phrase\":\"[xkl恭喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/xklgongxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/xklgongxi_thumb.gif\",\"value\":\"[xkl恭喜]\",\"picid\":\"\"},{\"phrase\":\"[xkl发财]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/xklfacai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/xklfacai_thumb.gif\",\"value\":\"[xkl发财]\",\"picid\":\"\"},{\"phrase\":\"[xkl鞭炮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/xklbianpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/xklbianpao_thumb.gif\",\"value\":\"[xkl鞭炮]\",\"picid\":\"\"},{\"phrase\":\"[xkl下雪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/xklxiaxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/xklxiaxue_thumb.gif\",\"value\":\"[xkl下雪]\",\"picid\":\"\"},{\"phrase\":\"[xkl撒花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/xklsahua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/xklsahua_thumb.gif\",\"value\":\"[xkl撒花]\",\"picid\":\"\"},{\"phrase\":\"[xkl扔糖豆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/xklrengtangdou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/xklrengtangdou_thumb.gif\",\"value\":\"[xkl扔糖豆]\",\"picid\":\"\"},{\"phrase\":\"[xkl扭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/xklniu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/xklniu_thumb.gif\",\"value\":\"[xkl扭]\",\"picid\":\"\"},{\"phrase\":\"[xkl你拍一]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/xklnipaiyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/xklnipaiyi_thumb.gif\",\"value\":\"[xkl你拍一]\",\"picid\":\"\"},{\"phrase\":\"[xkl打岔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/xkldacha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/xkldacha_thumb.gif\",\"value\":\"[xkl打岔]\",\"picid\":\"\"},{\"phrase\":\"[dada搬糖豆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xklbanyun2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xklbanyun2_thumb.gif\",\"value\":\"[dada搬糖豆]\",\"picid\":\"\"},{\"phrase\":\"[xkl搬糖豆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/xklbanyun1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/xklbanyun1_thumb.gif\",\"value\":\"[xkl搬糖豆]\",\"picid\":\"\"},{\"phrase\":\"[dada转圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/dadazhuanquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/dadazhuanquan_thumb.gif\",\"value\":\"[dada转圈]\",\"picid\":\"\"},{\"phrase\":\"[dada秧歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/dadayangge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/dadayangge_thumb.gif\",\"value\":\"[dada秧歌]\",\"picid\":\"\"},{\"phrase\":\"[dada提灯笼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/dadadenglong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/dadadenglong_thumb.gif\",\"value\":\"[dada提灯笼]\",\"picid\":\"\"},{\"phrase\":\"[xkl追]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/xklzhui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/xklzhui_thumb.gif\",\"value\":\"[xkl追]\",\"picid\":\"\"},{\"phrase\":\"[xkl拥抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/xklyongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/xklyongbao_thumb.gif\",\"value\":\"[xkl拥抱]\",\"picid\":\"\"},{\"phrase\":\"[xkl亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/xklqinqin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/xklqinqin_thumb.gif\",\"value\":\"[xkl亲亲]\",\"picid\":\"\"},{\"phrase\":\"[xkl困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/xklkun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/xklkun_thumb.gif\",\"value\":\"[xkl困]\",\"picid\":\"\"},{\"phrase\":\"[xkl达达喜欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/xkldadaxihuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/xkldadaxihuan_thumb.gif\",\"value\":\"[xkl达达喜欢]\",\"picid\":\"\"},{\"phrase\":\"[xkl达达吐舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/xkldadatushetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/xkldadatushetou_thumb.gif\",\"value\":\"[xkl达达吐舌头]\",\"picid\":\"\"},{\"phrase\":\"[xkl达达坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/xkldadahuaixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/xkldadahuaixiao_thumb.gif\",\"value\":\"[xkl达达坏笑]\",\"picid\":\"\"},{\"phrase\":\"[xkl达达黑暗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/xkldadaheian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/xkldadaheian_thumb.gif\",\"value\":\"[xkl达达黑暗]\",\"picid\":\"\"},{\"phrase\":\"[xkl吃西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/xklchixigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/xklchixigua_thumb.gif\",\"value\":\"[xkl吃西瓜]\",\"picid\":\"\"},{\"phrase\":\"[kxl晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/kxlyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/kxlyun_thumb.gif\",\"value\":\"[kxl晕]\",\"picid\":\"\"},{\"phrase\":\"[xkl抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/xklzhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/xklzhuakuang_thumb.gif\",\"value\":\"[xkl抓狂]\",\"picid\":\"\"},{\"phrase\":\"[xkl眨眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/xklzhayan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/xklzhayan_thumb.gif\",\"value\":\"[xkl眨眼]\",\"picid\":\"\"},{\"phrase\":\"[xkl摇尾巴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/xklyaoweiba_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/xklyaoweiba_thumb.gif\",\"value\":\"[xkl摇尾巴]\",\"picid\":\"\"},{\"phrase\":\"[xkl偷看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/xkltoukan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/xkltoukan_thumb.gif\",\"value\":\"[xkl偷看]\",\"picid\":\"\"},{\"phrase\":\"[xkl糖豆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/xkltangdou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/xkltangdou_thumb.gif\",\"value\":\"[xkl糖豆]\",\"picid\":\"\"},{\"phrase\":\"[xkl囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/xkljiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/xkljiong_thumb.gif\",\"value\":\"[xkl囧]\",\"picid\":\"\"},{\"phrase\":\"[xkl抚摸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/xklfumo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/xklfumo_thumb.gif\",\"value\":\"[xkl抚摸]\",\"picid\":\"\"},{\"phrase\":\"[xkl奔跑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/xklbenpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/xklbenpao_thumb.gif\",\"value\":\"[xkl奔跑]\",\"picid\":\"\"},{\"phrase\":\"[xkl被抓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/xklbeizhua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/xklbeizhua_thumb.gif\",\"value\":\"[xkl被抓]\",\"picid\":\"\"},{\"phrase\":\"[xkl被电]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xklbeidian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xklbeidian_thumb.gif\",\"value\":\"[xkl被电]\",\"picid\":\"\"},{\"phrase\":\"[xkl怒火]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/xlknuhuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/xlknuhuo_thumb.gif\",\"value\":\"[xkl怒火]\",\"picid\":\"\"},{\"phrase\":\"[xkl转圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/xklzhuanquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/xklzhuanquan_thumb.gif\",\"value\":\"[xkl转圈]\",\"picid\":\"\"},{\"phrase\":\"[xkl喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/xklxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/xklxi_thumb.gif\",\"value\":\"[xkl喜]\",\"picid\":\"\"},{\"phrase\":\"[xkl委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/xklweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/xklweiqu_thumb.gif\",\"value\":\"[xkl委屈]\",\"picid\":\"\"},{\"phrase\":\"[xkl石化]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/xklshihua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/xklshihua_thumb.gif\",\"value\":\"[xkl石化]\",\"picid\":\"\"},{\"phrase\":\"[xkl期待]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/xklqidai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/xklqidai_thumb.gif\",\"value\":\"[xkl期待]\",\"picid\":\"\"},{\"phrase\":\"[xkl捏脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/xklnielian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/xklnielian_thumb.gif\",\"value\":\"[xkl捏脸]\",\"picid\":\"\"},{\"phrase\":\"[xkl路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/xklluguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/xklluguo_thumb.gif\",\"value\":\"[xkl路过]\",\"picid\":\"\"},{\"phrase\":\"[xkl哈哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/xklhahaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/xklhahaha_thumb.gif\",\"value\":\"[xkl哈哈哈]\",\"picid\":\"\"},{\"phrase\":\"[xkl顶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/xklding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小恐龙\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/xklding_thumb.gif\",\"value\":\"[xkl顶]\",\"picid\":\"\"},{\"phrase\":\"[lt火车票]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lttickets_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lttickets_thumb.gif\",\"value\":\"[lt火车票]\",\"picid\":\"\"},{\"phrase\":\"[lt五一]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/ltwuyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/ltwuyi_thumb.gif\",\"value\":\"[lt五一]\",\"picid\":\"\"},{\"phrase\":\"[lt新年好]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ltxinnianhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ltxinnianhao_thumb.gif\",\"value\":\"[lt新年好]\",\"picid\":\"\"},{\"phrase\":\"[lt火车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/lttrain_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/lttrain_thumb.gif\",\"value\":\"[lt火车]\",\"picid\":\"\"},{\"phrase\":\"[lt红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/lthongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/lthongbao_thumb.gif\",\"value\":\"[lt红包]\",\"picid\":\"\"},{\"phrase\":\"[lt摇滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/ltrock_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/ltrock_thumb.gif\",\"value\":\"[lt摇滚]\",\"picid\":\"\"},{\"phrase\":\"[lt万圣节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/lthalloween_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/lthalloween_thumb.gif\",\"value\":\"[lt万圣节]\",\"picid\":\"\"},{\"phrase\":\"[lt赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/ltgood_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/ltgood_thumb.gif\",\"value\":\"[lt赞]\",\"picid\":\"\"},{\"phrase\":\"[lt江南style]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/ltgangnamstyle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/ltgangnamstyle_thumb.gif\",\"value\":\"[lt江南style]\",\"picid\":\"\"},{\"phrase\":\"[lt吃东西]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/lteating_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/lteating_thumb.gif\",\"value\":\"[lt吃东西]\",\"picid\":\"\"},{\"phrase\":\"[lt最右]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ltzuiyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ltzuiyou_thumb.gif\",\"value\":\"[lt最右]\",\"picid\":\"\"},{\"phrase\":\"[lt切克闹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ltqiekenao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ltqiekenao_thumb.gif\",\"value\":\"[lt切克闹]\",\"picid\":\"\"},{\"phrase\":\"[lt犯困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ltfankun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ltfankun_thumb.gif\",\"value\":\"[lt犯困]\",\"picid\":\"\"},{\"phrase\":\"[lt戳瞎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ltchuoxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ltchuoxia_thumb.gif\",\"value\":\"[lt戳瞎]\",\"picid\":\"\"},{\"phrase\":\"[lt鼻血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/ltbixue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/ltbixue_thumb.gif\",\"value\":\"[lt鼻血]\",\"picid\":\"\"},{\"phrase\":\"[lt阴险]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/ltyinxian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/ltyinxian_thumb.gif\",\"value\":\"[lt阴险]\",\"picid\":\"\"},{\"phrase\":\"[lt摇摆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/ltyaobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/ltyaobai_thumb.gif\",\"value\":\"[lt摇摆]\",\"picid\":\"\"},{\"phrase\":\"[lt羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ltxiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ltxiu_thumb.gif\",\"value\":\"[lt羞]\",\"picid\":\"\"},{\"phrase\":\"[lt闪瞎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/ltshanxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/ltshanxia_thumb.gif\",\"value\":\"[lt闪瞎]\",\"picid\":\"\"},{\"phrase\":\"[lt拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/ltpaishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/ltpaishou_thumb.gif\",\"value\":\"[lt拍手]\",\"picid\":\"\"},{\"phrase\":\"[lt蛋疼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/ltdanteng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/ltdanteng_thumb.gif\",\"value\":\"[lt蛋疼]\",\"picid\":\"\"},{\"phrase\":\"[lt撒花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/ltsahua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/ltsahua_thumb.gif\",\"value\":\"[lt撒花]\",\"picid\":\"\"},{\"phrase\":\"[lt母亲节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/ltmuqinjie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/ltmuqinjie_thumb.gif\",\"value\":\"[lt母亲节]\",\"picid\":\"\"},{\"phrase\":\"[lt挖鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/ltwabi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/ltwabi_thumb.gif\",\"value\":\"[lt挖鼻]\",\"picid\":\"\"},{\"phrase\":\"[lt哈欠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/lehaqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/lehaqian_thumb.gif\",\"value\":\"[lt哈欠]\",\"picid\":\"\"},{\"phrase\":\"[lt泪目]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ltleimu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ltleimu_thumb.gif\",\"value\":\"[lt泪目]\",\"picid\":\"\"},{\"phrase\":\"[lt雷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/ltlei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/ltlei_thumb.gif\",\"value\":\"[lt雷]\",\"picid\":\"\"},{\"phrase\":\"[lt中枪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ltzhongqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ltzhongqiang_thumb.gif\",\"value\":\"[lt中枪]\",\"picid\":\"\"},{\"phrase\":\"[lt耳朵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lterduo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lterduo_thumb.gif\",\"value\":\"[lt耳朵]\",\"picid\":\"\"},{\"phrase\":\"[lt顶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/ltding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/ltding_thumb.gif\",\"value\":\"[lt顶]\",\"picid\":\"\"},{\"phrase\":\"[lt潜水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ltqianshui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ltqianshui_thumb.gif\",\"value\":\"[lt潜水]\",\"picid\":\"\"},{\"phrase\":\"[lt拍桌大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ltpaizhuodaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ltpaizhuodaxiao_thumb.gif\",\"value\":\"[lt拍桌大笑]\",\"picid\":\"\"},{\"phrase\":\"[lt黑线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/ltheixian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/ltheixian_thumb.gif\",\"value\":\"[lt黑线]\",\"picid\":\"\"},{\"phrase\":\"[lt喷血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ltpenxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ltpenxue_thumb.gif\",\"value\":\"[lt喷血]\",\"picid\":\"\"},{\"phrase\":\"[lt巨汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/ltjuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/ltjuhan_thumb.gif\",\"value\":\"[lt巨汗]\",\"picid\":\"\"},{\"phrase\":\"[lt疑惑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/ltyihuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/ltyihuo_thumb.gif\",\"value\":\"[lt疑惑]\",\"picid\":\"\"},{\"phrase\":\"[lt浮云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/ltfuyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/ltfuyun_thumb.gif\",\"value\":\"[lt浮云]\",\"picid\":\"\"},{\"phrase\":\"[lt笑话]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/ltxiaohua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/ltxiaohua_thumb.gif\",\"value\":\"[lt笑话]\",\"picid\":\"\"},{\"phrase\":\"[lt喷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/ltpen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/ltpen_thumb.gif\",\"value\":\"[lt喷]\",\"picid\":\"\"},{\"phrase\":\"[lt雪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/ltxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/ltxue_thumb.gif\",\"value\":\"[lt雪]\",\"picid\":\"\"},{\"phrase\":\"[lt转发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/ltzhuanfa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/ltzhuanfa_thumb.gif\",\"value\":\"[lt转发]\",\"picid\":\"\"},{\"phrase\":\"[lt偷窥]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/lttoukui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/lttoukui_thumb.gif\",\"value\":\"[lt偷窥]\",\"picid\":\"\"},{\"phrase\":\"[lt惊吓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/ltjingxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/ltjingxia_thumb.gif\",\"value\":\"[lt惊吓]\",\"picid\":\"\"},{\"phrase\":\"[lt囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/ltjiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/ltjiong_thumb.gif\",\"value\":\"[lt囧]\",\"picid\":\"\"},{\"phrase\":\"[lt灰飞烟灭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lthuifeiyanmie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lthuifeiyanmie_thumb.gif\",\"value\":\"[lt灰飞烟灭]\",\"picid\":\"\"},{\"phrase\":\"[lt冰封]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/ltbengfeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/ltbengfeng_thumb.gif\",\"value\":\"[lt冰封]\",\"picid\":\"\"},{\"phrase\":\"[lt吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/lttu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/lttu_thumb.gif\",\"value\":\"[lt吐]\",\"picid\":\"\"},{\"phrase\":\"[lt吹泡泡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/ltchuipaopao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/ltchuipaopao_thumb.gif\",\"value\":\"[lt吹泡泡]\",\"picid\":\"\"},{\"phrase\":\"[lt吓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ltxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"冷兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ltxia_thumb.gif\",\"value\":\"[lt吓]\",\"picid\":\"\"},{\"phrase\":\"[芒果点赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_thumb.gif\",\"value\":\"[芒果点赞]\",\"picid\":\"\"},{\"phrase\":\"[芒果萌萌哒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/mango_11_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/mango_11_thumb.gif\",\"value\":\"[芒果萌萌哒]\",\"picid\":\"\"},{\"phrase\":\"[芒果舔屏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/mango_10_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/mango_10_thumb.gif\",\"value\":\"[芒果舔屏]\",\"picid\":\"\"},{\"phrase\":\"[芒果帅炸了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/mango_09_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/mango_09_thumb.gif\",\"value\":\"[芒果帅炸了]\",\"picid\":\"\"},{\"phrase\":\"[芒果魔性]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/mango_08_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/mango_08_thumb.gif\",\"value\":\"[芒果魔性]\",\"picid\":\"\"},{\"phrase\":\"[芒果流口水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/mango_07_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/mango_07_thumb.gif\",\"value\":\"[芒果流口水]\",\"picid\":\"\"},{\"phrase\":\"[芒果可怜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/mango_06_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/mango_06_thumb.gif\",\"value\":\"[芒果可怜]\",\"picid\":\"\"},{\"phrase\":\"[芒果惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/mango_05_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/mango_05_thumb.gif\",\"value\":\"[芒果惊讶]\",\"picid\":\"\"},{\"phrase\":\"[芒果红包脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/mango_04_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/mango_04_thumb.gif\",\"value\":\"[芒果红包脸]\",\"picid\":\"\"},{\"phrase\":\"[芒果得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mango_03_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/mango_03_thumb.gif\",\"value\":\"[芒果得意]\",\"picid\":\"\"},{\"phrase\":\"[芒果大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mango_02_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mango_02_thumb.gif\",\"value\":\"[芒果大笑]\",\"picid\":\"\"},{\"phrase\":\"[芒果霸屏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/mango_01_org.gif\",\"hot\":false,\"common\":false,\"category\":\"芒果表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/mango_01_thumb.gif\",\"value\":\"[芒果霸屏]\",\"picid\":\"\"},{\"phrase\":\"[粉丝俱乐部]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/fansclub_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/fansclub_thumb.gif\",\"value\":\"[粉丝俱乐部]\",\"picid\":\"\"},{\"phrase\":\"[应援]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/fansyingyuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/fansyingyuan_thumb.gif\",\"value\":\"[应援]\",\"picid\":\"\"},{\"phrase\":\"[TF]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/tffans_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/tffans_thumb.gif\",\"value\":\"[TF]\",\"picid\":\"\"},{\"phrase\":\"[凯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/tfkai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/tfkai_thumb.gif\",\"value\":\"[凯]\",\"picid\":\"\"},{\"phrase\":\"[源]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/tfyuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/tfyuan_thumb.gif\",\"value\":\"[源]\",\"picid\":\"\"},{\"phrase\":\"[千]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/tfqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/tfqian_thumb.gif\",\"value\":\"[千]\",\"picid\":\"\"},{\"phrase\":\"[t]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/newt_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/newt_thumb.gif\",\"value\":\"[t]\",\"picid\":\"\"},{\"phrase\":\"[f]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/newf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/newf_thumb.gif\",\"value\":\"[f]\",\"picid\":\"\"},{\"phrase\":\"[b]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/weibob_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/weibob_thumb.gif\",\"value\":\"[b]\",\"picid\":\"\"},{\"phrase\":\"[o]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/weiboo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/weiboo_thumb.gif\",\"value\":\"[o]\",\"picid\":\"\"},{\"phrase\":\"[y]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/newy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/newy_thumb.gif\",\"value\":\"[y]\",\"picid\":\"\"},{\"phrase\":\"[s]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/news_org.gif\",\"hot\":false,\"common\":false,\"category\":\"明星表情\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/news_thumb.gif\",\"value\":\"[s]\",\"picid\":\"\"},{\"phrase\":\"[din看看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/dinkankan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/dinkankan_thumb.gif\",\"value\":\"[din看看]\",\"picid\":\"\"},{\"phrase\":\"[din说话]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/dinshuohua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/dinshuohua_thumb.gif\",\"value\":\"[din说话]\",\"picid\":\"\"},{\"phrase\":\"[din癫当圣诞礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/dindongshengdanliwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/dindongshengdanliwu_thumb.gif\",\"value\":\"[din癫当圣诞礼物]\",\"picid\":\"\"},{\"phrase\":\"[din阿赞招财猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/dinjenzhaocaimao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/dinjenzhaocaimao_thumb.gif\",\"value\":\"[din阿赞招财猫]\",\"picid\":\"\"},{\"phrase\":\"[din阿赞福到]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/dinjenfudao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/dinjenfudao_thumb.gif\",\"value\":\"[din阿赞福到]\",\"picid\":\"\"},{\"phrase\":\"[din癫当招财猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/dindongzhaocaimao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/dindongzhaocaimao_thumb.gif\",\"value\":\"[din癫当招财猫]\",\"picid\":\"\"},{\"phrase\":\"[din癫当xmas]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/dindongxmas_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/dindongxmas_thumb.gif\",\"value\":\"[din癫当xmas]\",\"picid\":\"\"},{\"phrase\":\"[din癫当圣诞树]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/dindongshengdanshu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/dindongshengdanshu_thumb.gif\",\"value\":\"[din癫当圣诞树]\",\"picid\":\"\"},{\"phrase\":\"[din癫当阿赞圣诞奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dindongjenshengdanben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dindongjenshengdanben_thumb.gif\",\"value\":\"[din癫当阿赞圣诞奔]\",\"picid\":\"\"},{\"phrase\":\"[din癫当阿赞炮竹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/dindongjenpaozhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/dindongjenpaozhu_thumb.gif\",\"value\":\"[din癫当阿赞炮竹]\",\"picid\":\"\"},{\"phrase\":\"[din癫当阿赞礼物盒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/dindongjenliwuhe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/dindongjenliwuhe_thumb.gif\",\"value\":\"[din癫当阿赞礼物盒]\",\"picid\":\"\"},{\"phrase\":\"[din癫当阿赞礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/dindongjenliwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/dindongjenliwu_thumb.gif\",\"value\":\"[din癫当阿赞礼物]\",\"picid\":\"\"},{\"phrase\":\"[din癫当阿赞变身]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/dindongjenbianshen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/dindongjenbianshen_thumb.gif\",\"value\":\"[din癫当阿赞变身]\",\"picid\":\"\"},{\"phrase\":\"[din癫当红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/dindonghongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/dindonghongbao_thumb.gif\",\"value\":\"[din癫当红包]\",\"picid\":\"\"},{\"phrase\":\"[din癫当财神]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/dindongcaishen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/dindongcaishen_thumb.gif\",\"value\":\"[din癫当财神]\",\"picid\":\"\"},{\"phrase\":\"[din转转]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/dinzhuanzhuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/dinzhuanzhuan_thumb.gif\",\"value\":\"[din转转]\",\"picid\":\"\"},{\"phrase\":\"[din撞墙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/dinzhuangqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/dinzhuangqiang_thumb.gif\",\"value\":\"[din撞墙]\",\"picid\":\"\"},{\"phrase\":\"[din抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/dinzhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/dinzhuakuang_thumb.gif\",\"value\":\"[din抓狂]\",\"picid\":\"\"},{\"phrase\":\"[din赞好]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/dinzanhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/dinzanhao_thumb.gif\",\"value\":\"[din赞好]\",\"picid\":\"\"},{\"phrase\":\"[din信息]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/dinxinxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/dinxinxi_thumb.gif\",\"value\":\"[din信息]\",\"picid\":\"\"},{\"phrase\":\"[din兴奋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/dinxingfen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/dinxingfen_thumb.gif\",\"value\":\"[din兴奋]\",\"picid\":\"\"},{\"phrase\":\"[din推撞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/dintuizhuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/dintuizhuang_thumb.gif\",\"value\":\"[din推撞]\",\"picid\":\"\"},{\"phrase\":\"[din天哦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/dintiano_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/dintiano_thumb.gif\",\"value\":\"[din天哦]\",\"picid\":\"\"},{\"phrase\":\"[din弹弹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/dintantan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/dintantan_thumb.gif\",\"value\":\"[din弹弹]\",\"picid\":\"\"},{\"phrase\":\"[din睡觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/dinshuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/dinshuijiao_thumb.gif\",\"value\":\"[din睡觉]\",\"picid\":\"\"},{\"phrase\":\"[din帅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/dinshuai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/dinshuai_thumb.gif\",\"value\":\"[din帅]\",\"picid\":\"\"},{\"phrase\":\"[din闪避]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/dinshanbi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/dinshanbi_thumb.gif\",\"value\":\"[din闪避]\",\"picid\":\"\"},{\"phrase\":\"[din亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/dinqinqin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/dinqinqin_thumb.gif\",\"value\":\"[din亲亲]\",\"picid\":\"\"},{\"phrase\":\"[din拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/dinpaishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/dinpaishou_thumb.gif\",\"value\":\"[din拍手]\",\"picid\":\"\"},{\"phrase\":\"[din怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/dinnu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/dinnu_thumb.gif\",\"value\":\"[din怒]\",\"picid\":\"\"},{\"phrase\":\"[din摸头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/dinmotou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/dinmotou_thumb.gif\",\"value\":\"[din摸头]\",\"picid\":\"\"},{\"phrase\":\"[din流血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/dinliuxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/dinliuxue_thumb.gif\",\"value\":\"[din流血]\",\"picid\":\"\"},{\"phrase\":\"[din厉害]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/dinlihai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/dinlihai_thumb.gif\",\"value\":\"[din厉害]\",\"picid\":\"\"},{\"phrase\":\"[din脸红]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/dinlianhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/dinlianhong_thumb.gif\",\"value\":\"[din脸红]\",\"picid\":\"\"},{\"phrase\":\"[din泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/dinlei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/dinlei_thumb.gif\",\"value\":\"[din泪]\",\"picid\":\"\"},{\"phrase\":\"[din贱香]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/dinjianxiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/dinjianxiang_thumb.gif\",\"value\":\"[din贱香]\",\"picid\":\"\"},{\"phrase\":\"[din挥手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/dinhuishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/dinhuishou_thumb.gif\",\"value\":\"[din挥手]\",\"picid\":\"\"},{\"phrase\":\"[din化妆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/dinhuazhuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/dinhuazhuang_thumb.gif\",\"value\":\"[din化妆]\",\"picid\":\"\"},{\"phrase\":\"[din喝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/dinhe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/dinhe_thumb.gif\",\"value\":\"[din喝]\",\"picid\":\"\"},{\"phrase\":\"[din汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dinhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dinhan_thumb.gif\",\"value\":\"[din汗]\",\"picid\":\"\"},{\"phrase\":\"[din害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/dinhaixiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/dinhaixiu_thumb.gif\",\"value\":\"[din害羞]\",\"picid\":\"\"},{\"phrase\":\"[din鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/dinguilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/dinguilian_thumb.gif\",\"value\":\"[din鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[din挂了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/dinguale_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/dinguale_thumb.gif\",\"value\":\"[din挂了]\",\"picid\":\"\"},{\"phrase\":\"[din分身1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/dinfenshenb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/dinfenshenb_thumb.gif\",\"value\":\"[din分身1]\",\"picid\":\"\"},{\"phrase\":\"[din分身2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/dinfenshena_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/dinfenshena_thumb.gif\",\"value\":\"[din分身2]\",\"picid\":\"\"},{\"phrase\":\"[din癫当]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/dindiandang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/dindiandang_thumb.gif\",\"value\":\"[din癫当]\",\"picid\":\"\"},{\"phrase\":\"[din戴熊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/dindaixiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/dindaixiong_thumb.gif\",\"value\":\"[din戴熊]\",\"picid\":\"\"},{\"phrase\":\"[din吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/dinchi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/dinchi_thumb.gif\",\"value\":\"[din吃]\",\"picid\":\"\"},{\"phrase\":\"[din变身]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/dinbianshen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/dinbianshen_thumb.gif\",\"value\":\"[din变身]\",\"picid\":\"\"},{\"phrase\":\"[din变脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/dinbianlian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/dinbianlian_thumb.gif\",\"value\":\"[din变脸]\",\"picid\":\"\"},{\"phrase\":\"[din白旗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/dinbaiqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/dinbaiqi_thumb.gif\",\"value\":\"[din白旗]\",\"picid\":\"\"},{\"phrase\":\"[din爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/dinaini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"癫当\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/dinaini_thumb.gif\",\"value\":\"[din爱你]\",\"picid\":\"\"},{\"phrase\":\"[ali微博益起来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/aligongyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/aligongyi_thumb.gif\",\"value\":\"[ali微博益起来]\",\"picid\":\"\"},{\"phrase\":\"[ali皇冠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/newalidese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/newalidese_thumb.gif\",\"value\":\"[ali皇冠]\",\"picid\":\"\"},{\"phrase\":\"[ali做鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/alizuoguiliannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/alizuoguiliannew_thumb.gif\",\"value\":\"[ali做鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[ali追]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/alizhuinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/alizhuinew_thumb.gif\",\"value\":\"[ali追]\",\"picid\":\"\"},{\"phrase\":\"[ali转圈哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/alizhuanquankunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/alizhuanquankunew_thumb.gif\",\"value\":\"[ali转圈哭]\",\"picid\":\"\"},{\"phrase\":\"[ali转]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/alizhuannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/alizhuannew_thumb.gif\",\"value\":\"[ali转]\",\"picid\":\"\"},{\"phrase\":\"[ali郁闷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/aliyumengnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/aliyumengnew_thumb.gif\",\"value\":\"[ali郁闷]\",\"picid\":\"\"},{\"phrase\":\"[ali元宝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/aliyuanbaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/aliyuanbaonew_thumb.gif\",\"value\":\"[ali元宝]\",\"picid\":\"\"},{\"phrase\":\"[ali摇晃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/aliyaohuangnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/aliyaohuangnew_thumb.gif\",\"value\":\"[ali摇晃]\",\"picid\":\"\"},{\"phrase\":\"[ali嘘嘘嘘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/alixuxunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/alixuxunew_thumb.gif\",\"value\":\"[ali嘘嘘嘘]\",\"picid\":\"\"},{\"phrase\":\"[ali羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/alixiunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/alixiunew_thumb.gif\",\"value\":\"[ali羞]\",\"picid\":\"\"},{\"phrase\":\"[ali笑死了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/alixiaosilenew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/alixiaosilenew_thumb.gif\",\"value\":\"[ali笑死了]\",\"picid\":\"\"},{\"phrase\":\"[ali笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/alixiaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/alixiaonew_thumb.gif\",\"value\":\"[ali笑]\",\"picid\":\"\"},{\"phrase\":\"[ali掀桌子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/alixianzhuozinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/alixianzhuozinew_thumb.gif\",\"value\":\"[ali掀桌子]\",\"picid\":\"\"},{\"phrase\":\"[ali鲜花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/alixianhuanew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/alixianhuanew_thumb.gif\",\"value\":\"[ali鲜花]\",\"picid\":\"\"},{\"phrase\":\"[ali想]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/alixiangnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/alixiangnew_thumb.gif\",\"value\":\"[ali想]\",\"picid\":\"\"},{\"phrase\":\"[ali吓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/alixianew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/alixianew_thumb.gif\",\"value\":\"[ali吓]\",\"picid\":\"\"},{\"phrase\":\"[ali哇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/aliwanew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/aliwanew_thumb.gif\",\"value\":\"[ali哇]\",\"picid\":\"\"},{\"phrase\":\"[ali吐血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/alituxuenew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/alituxuenew_thumb.gif\",\"value\":\"[ali吐血]\",\"picid\":\"\"},{\"phrase\":\"[ali偷看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/alitoukannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/alitoukannew_thumb.gif\",\"value\":\"[ali偷看]\",\"picid\":\"\"},{\"phrase\":\"[ali送礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/alisongliwunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/alisongliwunew_thumb.gif\",\"value\":\"[ali送礼物]\",\"picid\":\"\"},{\"phrase\":\"[ali睡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/alishuinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/alishuinew_thumb.gif\",\"value\":\"[ali睡]\",\"picid\":\"\"},{\"phrase\":\"[ali甩手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/alishuaishounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/alishuaishounew_thumb.gif\",\"value\":\"[ali甩手]\",\"picid\":\"\"},{\"phrase\":\"[ali摔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/alishuainew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/alishuainew_thumb.gif\",\"value\":\"[ali摔]\",\"picid\":\"\"},{\"phrase\":\"[ali撒钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/alisaqiannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/alisaqiannew_thumb.gif\",\"value\":\"[ali撒钱]\",\"picid\":\"\"},{\"phrase\":\"[ali揪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/aliqiunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/aliqiunew_thumb.gif\",\"value\":\"[ali揪]\",\"picid\":\"\"},{\"phrase\":\"[ali亲一个]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/aliqinyigenew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/aliqinyigenew_thumb.gif\",\"value\":\"[ali亲一个]\",\"picid\":\"\"},{\"phrase\":\"[ali欠揍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/aliqianzounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/aliqianzounew_thumb.gif\",\"value\":\"[ali欠揍]\",\"picid\":\"\"},{\"phrase\":\"[ali扑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/alipunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/alipunew_thumb.gif\",\"value\":\"[ali扑]\",\"picid\":\"\"},{\"phrase\":\"[ali扑倒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/alipudaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/alipudaonew_thumb.gif\",\"value\":\"[ali扑倒]\",\"picid\":\"\"},{\"phrase\":\"[ali飘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/alipiaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/alipiaonew_thumb.gif\",\"value\":\"[ali飘]\",\"picid\":\"\"},{\"phrase\":\"[ali飘过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/alipiaoguonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/alipiaoguonew_thumb.gif\",\"value\":\"[ali飘过]\",\"picid\":\"\"},{\"phrase\":\"[ali喷嚏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/alipengtinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/alipengtinew_thumb.gif\",\"value\":\"[ali喷嚏]\",\"picid\":\"\"},{\"phrase\":\"[ali拍拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/alipaipaishounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/alipaipaishounew_thumb.gif\",\"value\":\"[ali拍拍手]\",\"picid\":\"\"},{\"phrase\":\"[ali你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/alininew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/alininew_thumb.gif\",\"value\":\"[ali你]\",\"picid\":\"\"},{\"phrase\":\"[ali挠墙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/alinaoqiangnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/alinaoqiangnew_thumb.gif\",\"value\":\"[ali挠墙]\",\"picid\":\"\"},{\"phrase\":\"[ali摸摸头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/alimomotounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/alimomotounew_thumb.gif\",\"value\":\"[ali摸摸头]\",\"picid\":\"\"},{\"phrase\":\"[ali溜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/aliliunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/aliliunew_thumb.gif\",\"value\":\"[ali溜]\",\"picid\":\"\"},{\"phrase\":\"[ali赖皮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/alilaipinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/alilaipinew_thumb.gif\",\"value\":\"[ali赖皮]\",\"picid\":\"\"},{\"phrase\":\"[ali来吧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/alilaibanew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/alilaibanew_thumb.gif\",\"value\":\"[ali来吧]\",\"picid\":\"\"},{\"phrase\":\"[ali囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/alijiongnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/alijiongnew_thumb.gif\",\"value\":\"[ali囧]\",\"picid\":\"\"},{\"phrase\":\"[ali惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/alijingnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/alijingnew_thumb.gif\",\"value\":\"[ali惊]\",\"picid\":\"\"},{\"phrase\":\"[ali加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/alijiayounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/alijiayounew_thumb.gif\",\"value\":\"[ali加油]\",\"picid\":\"\"},{\"phrase\":\"[ali僵尸跳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/alijiangshitiaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/alijiangshitiaonew_thumb.gif\",\"value\":\"[ali僵尸跳]\",\"picid\":\"\"},{\"phrase\":\"[ali呼啦圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/alihulaquannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/alihulaquannew_thumb.gif\",\"value\":\"[ali呼啦圈]\",\"picid\":\"\"},{\"phrase\":\"[ali画圈圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/alihuaquanquannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/alihuaquanquannew_thumb.gif\",\"value\":\"[ali画圈圈]\",\"picid\":\"\"},{\"phrase\":\"[ali欢呼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/alihuanhunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/alihuanhunew_thumb.gif\",\"value\":\"[ali欢呼]\",\"picid\":\"\"},{\"phrase\":\"[ali坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/alihuaixiaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/alihuaixiaonew_thumb.gif\",\"value\":\"[ali坏笑]\",\"picid\":\"\"},{\"phrase\":\"[ali跪求]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/aliguiqiunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/aliguiqiunew_thumb.gif\",\"value\":\"[ali跪求]\",\"picid\":\"\"},{\"phrase\":\"[ali风筝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/alifengzhengnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/alifengzhengnew_thumb.gif\",\"value\":\"[ali风筝]\",\"picid\":\"\"},{\"phrase\":\"[ali飞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/alifeinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/alifeinew_thumb.gif\",\"value\":\"[ali飞]\",\"picid\":\"\"},{\"phrase\":\"[ali翻白眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/alifanbaiyannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/alifanbaiyannew_thumb.gif\",\"value\":\"[ali翻白眼]\",\"picid\":\"\"},{\"phrase\":\"[ali顶起]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/alidingqinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/alidingqinew_thumb.gif\",\"value\":\"[ali顶起]\",\"picid\":\"\"},{\"phrase\":\"[ali点头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/alidiantounew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/alidiantounew_thumb.gif\",\"value\":\"[ali点头]\",\"picid\":\"\"},{\"phrase\":\"[ali得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/alidesenew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/alidesenew_thumb.gif\",\"value\":\"[ali得瑟]\",\"picid\":\"\"},{\"phrase\":\"[ali打篮球]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/alidalanqiunew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/alidalanqiunew_thumb.gif\",\"value\":\"[ali打篮球]\",\"picid\":\"\"},{\"phrase\":\"[ali打滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/alidagunnew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/alidagunnew_thumb.gif\",\"value\":\"[ali打滚]\",\"picid\":\"\"},{\"phrase\":\"[ali大吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/alidachinew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/alidachinew_thumb.gif\",\"value\":\"[ali大吃]\",\"picid\":\"\"},{\"phrase\":\"[ali踩]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/alicainew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/alicainew_thumb.gif\",\"value\":\"[ali踩]\",\"picid\":\"\"},{\"phrase\":\"[ali不耐烦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/alibunaifannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/alibunaifannew_thumb.gif\",\"value\":\"[ali不耐烦]\",\"picid\":\"\"},{\"phrase\":\"[ali不吗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/alibumanew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/alibumanew_thumb.gif\",\"value\":\"[ali不吗]\",\"picid\":\"\"},{\"phrase\":\"[alibiechaonew]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/alibiechaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/alibiechaonew_thumb.gif\",\"value\":\"[alibiechaonew]\",\"picid\":\"\"},{\"phrase\":\"[ali鞭炮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/alibianpaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/alibianpaonew_thumb.gif\",\"value\":\"[ali鞭炮]\",\"picid\":\"\"},{\"phrase\":\"[ali抱一抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/alibaoyibaonew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/alibaoyibaonew_thumb.gif\",\"value\":\"[ali抱一抱]\",\"picid\":\"\"},{\"phrase\":\"[ali拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/alibainiannew_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/alibainiannew_thumb.gif\",\"value\":\"[ali拜年]\",\"picid\":\"\"},{\"phrase\":\"[ali88]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/ali88new_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/ali88new_thumb.gif\",\"value\":\"[ali88]\",\"picid\":\"\"},{\"phrase\":\"[ali狂笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/zk_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/zk_thumb.gif\",\"value\":\"[ali狂笑]\",\"picid\":\"\"},{\"phrase\":\"[ali冤]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/wq2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/wq2_thumb.gif\",\"value\":\"[ali冤]\",\"picid\":\"\"},{\"phrase\":\"[ali蜷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/q2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/q2_thumb.gif\",\"value\":\"[ali蜷]\",\"picid\":\"\"},{\"phrase\":\"[ali美好]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/mh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/mh_thumb.gif\",\"value\":\"[ali美好]\",\"picid\":\"\"},{\"phrase\":\"[ali乐和]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/m2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/m2_thumb.gif\",\"value\":\"[ali乐和]\",\"picid\":\"\"},{\"phrase\":\"[ali揪耳朵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j3_thumb.gif\",\"value\":\"[ali揪耳朵]\",\"picid\":\"\"},{\"phrase\":\"[ali晃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/h2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/h2_thumb.gif\",\"value\":\"[ali晃]\",\"picid\":\"\"},{\"phrase\":\"[aliigh]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/f_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/f_thumb.gif\",\"value\":\"[aliigh]\",\"picid\":\"\"},{\"phrase\":\"[ali蹭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/c_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/c_thumb.gif\",\"value\":\"[ali蹭]\",\"picid\":\"\"},{\"phrase\":\"[ali抱枕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/bz3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/bz3_thumb.gif\",\"value\":\"[ali抱枕]\",\"picid\":\"\"},{\"phrase\":\"[ali不公平]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bgp_org.gif\",\"hot\":false,\"common\":false,\"category\":\"阿狸\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bgp_thumb.gif\",\"value\":\"[ali不公平]\",\"picid\":\"\"},{\"phrase\":\"[BOBO害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bohaixiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/bohaixiu_thumb.gif\",\"value\":\"[BOBO害羞]\",\"picid\":\"\"},{\"phrase\":\"[BOBO哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/bohaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/bohaha_thumb.gif\",\"value\":\"[BOBO哈哈]\",\"picid\":\"\"},{\"phrase\":\"[BOBO吃面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/bochimian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/bochimian_thumb.gif\",\"value\":\"[BOBO吃面]\",\"picid\":\"\"},{\"phrase\":\"[BOBO擦泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bocalei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bocalei_thumb.gif\",\"value\":\"[BOBO擦泪]\",\"picid\":\"\"},{\"phrase\":\"[bobuyaoa]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bobuyaoa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bobuyaoa_thumb.gif\",\"value\":\"[bobuyaoa]\",\"picid\":\"\"},{\"phrase\":\"[BOBO变身]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/bobianshen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/bobianshen_thumb.gif\",\"value\":\"[BOBO变身]\",\"picid\":\"\"},{\"phrase\":\"[BOBO崩溃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/bobengkui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/bobengkui_thumb.gif\",\"value\":\"[BOBO崩溃]\",\"picid\":\"\"},{\"phrase\":\"[BOBO拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/bobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/bobai_thumb.gif\",\"value\":\"[BOBO拜]\",\"picid\":\"\"},{\"phrase\":\"[BOBO爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/boaini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/boaini_thumb.gif\",\"value\":\"[BOBO爱你]\",\"picid\":\"\"},{\"phrase\":\"[TOTO打我啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/todawoa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/todawoa_thumb.gif\",\"value\":\"[TOTO打我啊]\",\"picid\":\"\"},{\"phrase\":\"[toto拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/longniantoto_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/longniantoto_thumb.gif\",\"value\":\"[toto拜年]\",\"picid\":\"\"},{\"phrase\":\"[bobo拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bobolongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bobolongnian_thumb.gif\",\"value\":\"[bobo拜年]\",\"picid\":\"\"},{\"phrase\":\"[toto无聊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/totowuliao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/totowuliao_thumb.gif\",\"value\":\"[toto无聊]\",\"picid\":\"\"},{\"phrase\":\"[toto我最摇滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/totowozuiyaogun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/totowozuiyaogun_thumb.gif\",\"value\":\"[toto我最摇滚]\",\"picid\":\"\"},{\"phrase\":\"[toto数落]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/totoshuluo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/totoshuluo_thumb.gif\",\"value\":\"[toto数落]\",\"picid\":\"\"},{\"phrase\":\"[toto睡觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/totoshuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/totoshuijiao_thumb.gif\",\"value\":\"[toto睡觉]\",\"picid\":\"\"},{\"phrase\":\"[toto甩头发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/totoshuaitoufa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/totoshuaitoufa_thumb.gif\",\"value\":\"[toto甩头发]\",\"picid\":\"\"},{\"phrase\":\"[toto飘过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/totopiaoguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/totopiaoguo_thumb.gif\",\"value\":\"[toto飘过]\",\"picid\":\"\"},{\"phrase\":\"[toto狂汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/totokuanghan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/totokuanghan_thumb.gif\",\"value\":\"[toto狂汗]\",\"picid\":\"\"},{\"phrase\":\"[toto好累]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/totohaolei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/totohaolei_thumb.gif\",\"value\":\"[toto好累]\",\"picid\":\"\"},{\"phrase\":\"[bobo抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/bobozhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/bobozhuakuang_thumb.gif\",\"value\":\"[bobo抓狂]\",\"picid\":\"\"},{\"phrase\":\"[bobo疑问]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/boboyiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/boboyiwen_thumb.gif\",\"value\":\"[bobo疑问]\",\"picid\":\"\"},{\"phrase\":\"[bobo抛媚眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/bobopaomeiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/bobopaomeiyan_thumb.gif\",\"value\":\"[bobo抛媚眼]\",\"picid\":\"\"},{\"phrase\":\"[bobo膜拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/bobomobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/bobomobai_thumb.gif\",\"value\":\"[bobo膜拜]\",\"picid\":\"\"},{\"phrase\":\"[bobo纠结]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/bobojiujie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/bobojiujie_thumb.gif\",\"value\":\"[bobo纠结]\",\"picid\":\"\"},{\"phrase\":\"[bobo不要啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/bobobuyaoa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/bobobuyaoa_thumb.gif\",\"value\":\"[bobo不要啊]\",\"picid\":\"\"},{\"phrase\":\"[bobo不理你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/bobobulini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/bobobulini_thumb.gif\",\"value\":\"[bobo不理你]\",\"picid\":\"\"},{\"phrase\":\"[有爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/totoyouai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/totoyouai_thumb.gif\",\"value\":\"[有爱]\",\"picid\":\"\"},{\"phrase\":\"[TOTOYES]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/totoyes_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/totoyes_thumb.gif\",\"value\":\"[TOTOYES]\",\"picid\":\"\"},{\"phrase\":\"[我爱听]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/tototingge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/tototingge_thumb.gif\",\"value\":\"[我爱听]\",\"picid\":\"\"},{\"phrase\":\"[怒火]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/totonu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/totonu_thumb.gif\",\"value\":\"[怒火]\",\"picid\":\"\"},{\"phrase\":\"[擂鼓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/totoleigu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/totoleigu_thumb.gif\",\"value\":\"[擂鼓]\",\"picid\":\"\"},{\"phrase\":\"[讥笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/totojixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/totojixiao_thumb.gif\",\"value\":\"[讥笑]\",\"picid\":\"\"},{\"phrase\":\"[抛钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/totoheixianpaoqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/totoheixianpaoqian_thumb.gif\",\"value\":\"[抛钱]\",\"picid\":\"\"},{\"phrase\":\"[变花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/boboxianhua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/boboxianhua_thumb.gif\",\"value\":\"[变花]\",\"picid\":\"\"},{\"phrase\":\"[飙泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/boboweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/boboweiqu_thumb.gif\",\"value\":\"[飙泪]\",\"picid\":\"\"},{\"phrase\":\"[藏猫猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/bobotoukan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/bobotoukan_thumb.gif\",\"value\":\"[藏猫猫]\",\"picid\":\"\"},{\"phrase\":\"[淘气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/bobotiaopi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/bobotiaopi_thumb.gif\",\"value\":\"[淘气]\",\"picid\":\"\"},{\"phrase\":\"[生闷气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/boboshengmenqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/boboshengmenqi_thumb.gif\",\"value\":\"[生闷气]\",\"picid\":\"\"},{\"phrase\":\"[忍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/boboren_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/boboren_thumb.gif\",\"value\":\"[忍]\",\"picid\":\"\"},{\"phrase\":\"[泡泡糖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/bobopaopaotang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/bobopaopaotang_thumb.gif\",\"value\":\"[泡泡糖]\",\"picid\":\"\"},{\"phrase\":\"[BOBO赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/bobook_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/bobook_thumb.gif\",\"value\":\"[BOBO赞]\",\"picid\":\"\"},{\"phrase\":\"[Hi]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/bobohi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/bobohi_thumb.gif\",\"value\":\"[Hi]\",\"picid\":\"\"},{\"phrase\":\"[BOBO么么哒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/bobofeiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/bobofeiwen_thumb.gif\",\"value\":\"[BOBO么么哒]\",\"picid\":\"\"},{\"phrase\":\"[我爱西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bobochixigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/bobochixigua_thumb.gif\",\"value\":\"[我爱西瓜]\",\"picid\":\"\"},{\"phrase\":\"[吓一跳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/bobochijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/bobochijing_thumb.gif\",\"value\":\"[吓一跳]\",\"picid\":\"\"},{\"phrase\":\"[吃饭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/bobochifan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"BOBO和TOTO\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/bobochifan_thumb.gif\",\"value\":\"[吃饭]\",\"picid\":\"\"},{\"phrase\":\"[doge]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/doge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/doge_thumb.gif\",\"value\":\"[doge]\",\"picid\":\"\"},{\"phrase\":\"[喵喵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/mm_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/mm_thumb.gif\",\"value\":\"[喵喵]\",\"picid\":\"\"},{\"phrase\":\"[二哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/moren_hashiqi_org.png\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/moren_hashiqi_thumb.png\",\"value\":\"[二哈]\",\"picid\":\"\"},{\"phrase\":\"[织]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/zz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/zz2_thumb.gif\",\"value\":\"[织]\",\"picid\":\"\"},{\"phrase\":\"[兔子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/rabbit_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/rabbit_thumb.gif\",\"value\":\"[兔子]\",\"picid\":\"\"},{\"phrase\":\"[神马]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/horse2_thumb.gif\",\"value\":\"[神马]\",\"picid\":\"\"},{\"phrase\":\"[浮云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/fuyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/fuyun_thumb.gif\",\"value\":\"[浮云]\",\"picid\":\"\"},{\"phrase\":\"[给力]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/geiliv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/geiliv2_thumb.gif\",\"value\":\"[给力]\",\"picid\":\"\"},{\"phrase\":\"[萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/kawayi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/kawayi_thumb.gif\",\"value\":\"[萌]\",\"picid\":\"\"},{\"phrase\":\"[熊猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/panda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/panda_thumb.gif\",\"value\":\"[熊猫]\",\"picid\":\"\"},{\"phrase\":\"[互粉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/hufen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/hufen_thumb.gif\",\"value\":\"[互粉]\",\"picid\":\"\"},{\"phrase\":\"[围观]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/wg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/wg_thumb.gif\",\"value\":\"[围观]\",\"picid\":\"\"},{\"phrase\":\"[扔鸡蛋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/rjd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/rjd_thumb.gif\",\"value\":\"[扔鸡蛋]\",\"picid\":\"\"},{\"phrase\":\"[奥特曼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/otm_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/otm_thumb.gif\",\"value\":\"[奥特曼]\",\"picid\":\"\"},{\"phrase\":\"[威武]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/vw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/vw_thumb.gif\",\"value\":\"[威武]\",\"picid\":\"\"},{\"phrase\":\"[伤心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/unheart.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/unheart.gif\",\"value\":\"[伤心]\",\"picid\":\"\"},{\"phrase\":\"[热吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/rw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/rw_thumb.gif\",\"value\":\"[热吻]\",\"picid\":\"\"},{\"phrase\":\"[囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/j_thumb.gif\",\"value\":\"[囧]\",\"picid\":\"\"},{\"phrase\":\"[orz]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/orz1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/orz1_thumb.gif\",\"value\":\"[orz]\",\"picid\":\"\"},{\"phrase\":\"[宅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/z_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/z_thumb.gif\",\"value\":\"[宅]\",\"picid\":\"\"},{\"phrase\":\"[帅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/s2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/s2_thumb.gif\",\"value\":\"[帅]\",\"picid\":\"\"},{\"phrase\":\"[猪头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/pig.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/pig.gif\",\"value\":\"[猪头]\",\"picid\":\"\"},{\"phrase\":\"[实习]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/sx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/sx_thumb.gif\",\"value\":\"[实习]\",\"picid\":\"\"},{\"phrase\":\"[骷髅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/kl2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/kl2_thumb.gif\",\"value\":\"[骷髅]\",\"picid\":\"\"},{\"phrase\":\"[便便]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/s_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/s_thumb.gif\",\"value\":\"[便便]\",\"picid\":\"\"},{\"phrase\":\"[黄牌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/yellowcard.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/yellowcard.gif\",\"value\":\"[黄牌]\",\"picid\":\"\"},{\"phrase\":\"[红牌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/redcard.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/redcard.gif\",\"value\":\"[红牌]\",\"picid\":\"\"},{\"phrase\":\"[跳舞花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/twh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/twh_thumb.gif\",\"value\":\"[跳舞花]\",\"picid\":\"\"},{\"phrase\":\"[礼花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/bingo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/bingo_thumb.gif\",\"value\":\"[礼花]\",\"picid\":\"\"},{\"phrase\":\"[打针]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/zt_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/zt_thumb.gif\",\"value\":\"[打针]\",\"picid\":\"\"},{\"phrase\":\"[闪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/03_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/03_thumb.gif\",\"value\":\"[闪]\",\"picid\":\"\"},{\"phrase\":\"[啦啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/04_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/04_thumb.gif\",\"value\":\"[啦啦]\",\"picid\":\"\"},{\"phrase\":\"[吼吼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/05_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/05_thumb.gif\",\"value\":\"[吼吼]\",\"picid\":\"\"},{\"phrase\":\"[庆祝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/06_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/06_thumb.gif\",\"value\":\"[庆祝]\",\"picid\":\"\"},{\"phrase\":\"[嘿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/01_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/01_thumb.gif\",\"value\":\"[嘿]\",\"picid\":\"\"},{\"phrase\":\"[团]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/tuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/tuan_thumb.gif\",\"value\":\"[团]\",\"picid\":\"\"},{\"phrase\":\"[圆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/yuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/yuan_thumb.gif\",\"value\":\"[圆]\",\"picid\":\"\"},{\"phrase\":\"[男孩儿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kissboy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kissboy_thumb.gif\",\"value\":\"[男孩儿]\",\"picid\":\"\"},{\"phrase\":\"[女孩儿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/kissgirl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/kissgirl_thumb.gif\",\"value\":\"[女孩儿]\",\"picid\":\"\"},{\"phrase\":\"[炸鸡啤酒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/zhajibeer_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/zhajibeer_thumb.gif\",\"value\":\"[炸鸡啤酒]\",\"picid\":\"\"},{\"phrase\":\"[做鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/guilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/guilian_thumb.gif\",\"value\":\"[做鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[22]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/twot_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/twot_thumb.gif\",\"value\":\"[22]\",\"picid\":\"\"},{\"phrase\":\"[00]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/zero_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/zero_thumb.gif\",\"value\":\"[00]\",\"picid\":\"\"},{\"phrase\":\"[2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/two_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/two_thumb.gif\",\"value\":\"[2]\",\"picid\":\"\"},{\"phrase\":\"[3]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/three_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/three_thumb.gif\",\"value\":\"[3]\",\"picid\":\"\"},{\"phrase\":\"[6]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/six_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/six_thumb.gif\",\"value\":\"[6]\",\"picid\":\"\"},{\"phrase\":\"[7]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/seven_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/seven_thumb.gif\",\"value\":\"[7]\",\"picid\":\"\"},{\"phrase\":\"[1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/one_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/one_thumb.gif\",\"value\":\"[1]\",\"picid\":\"\"},{\"phrase\":\"[9]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/nine_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/nine_thumb.gif\",\"value\":\"[9]\",\"picid\":\"\"},{\"phrase\":\"[4]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/four_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/four_thumb.gif\",\"value\":\"[4]\",\"picid\":\"\"},{\"phrase\":\"[5]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/five_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/five_thumb.gif\",\"value\":\"[5]\",\"picid\":\"\"},{\"phrase\":\"[8]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/eight_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/eight_thumb.gif\",\"value\":\"[8]\",\"picid\":\"\"},{\"phrase\":\"[z]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/newz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/newz_thumb.gif\",\"value\":\"[z]\",\"picid\":\"\"},{\"phrase\":\"[y]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/newy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/newy_thumb.gif\",\"value\":\"[y]\",\"picid\":\"\"},{\"phrase\":\"[x]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/newx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/newx_thumb.gif\",\"value\":\"[x]\",\"picid\":\"\"},{\"phrase\":\"[v]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/newv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/newv_thumb.gif\",\"value\":\"[v]\",\"picid\":\"\"},{\"phrase\":\"[u]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/newu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/newu_thumb.gif\",\"value\":\"[u]\",\"picid\":\"\"},{\"phrase\":\"[t]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/newt_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/newt_thumb.gif\",\"value\":\"[t]\",\"picid\":\"\"},{\"phrase\":\"[s]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/news_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/news_thumb.gif\",\"value\":\"[s]\",\"picid\":\"\"},{\"phrase\":\"[r]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/newr_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/newr_thumb.gif\",\"value\":\"[r]\",\"picid\":\"\"},{\"phrase\":\"[q]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/newq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/newq_thumb.gif\",\"value\":\"[q]\",\"picid\":\"\"},{\"phrase\":\"[p]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/newp_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/newp_thumb.gif\",\"value\":\"[p]\",\"picid\":\"\"},{\"phrase\":\"[n]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/newn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/newn_thumb.gif\",\"value\":\"[n]\",\"picid\":\"\"},{\"phrase\":\"[l]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/newl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/newl_thumb.gif\",\"value\":\"[l]\",\"picid\":\"\"},{\"phrase\":\"[k]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/newk_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/newk_thumb.gif\",\"value\":\"[k]\",\"picid\":\"\"},{\"phrase\":\"[j]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/newj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/newj_thumb.gif\",\"value\":\"[j]\",\"picid\":\"\"},{\"phrase\":\"[h]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/newh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/newh_thumb.gif\",\"value\":\"[h]\",\"picid\":\"\"},{\"phrase\":\"[g]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/newg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/newg_thumb.gif\",\"value\":\"[g]\",\"picid\":\"\"},{\"phrase\":\"[d]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/newd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/newd_thumb.gif\",\"value\":\"[d]\",\"picid\":\"\"},{\"phrase\":\"[a]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/newa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/newa_thumb.gif\",\"value\":\"[a]\",\"picid\":\"\"},{\"phrase\":\"[w]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/weibow_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/weibow_thumb.gif\",\"value\":\"[w]\",\"picid\":\"\"},{\"phrase\":\"[o]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/weiboo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/weiboo_thumb.gif\",\"value\":\"[o]\",\"picid\":\"\"},{\"phrase\":\"[m]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/weibom_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/weibom_thumb.gif\",\"value\":\"[m]\",\"picid\":\"\"},{\"phrase\":\"[i]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/weiboi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/weiboi_thumb.gif\",\"value\":\"[i]\",\"picid\":\"\"},{\"phrase\":\"[e]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/weiboe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/weiboe_thumb.gif\",\"value\":\"[e]\",\"picid\":\"\"},{\"phrase\":\"[c]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/weiboc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/weiboc_thumb.gif\",\"value\":\"[c]\",\"picid\":\"\"},{\"phrase\":\"[b]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/weibob_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/weibob_thumb.gif\",\"value\":\"[b]\",\"picid\":\"\"},{\"phrase\":\"[鸭梨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/pear_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/pear_thumb.gif\",\"value\":\"[鸭梨]\",\"picid\":\"\"},{\"phrase\":\"[省略号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/shengluehao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/shengluehao_thumb.gif\",\"value\":\"[省略号]\",\"picid\":\"\"},{\"phrase\":\"[kiss]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/kiss2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/kiss2_thumb.gif\",\"value\":\"[kiss]\",\"picid\":\"\"},{\"phrase\":\"[雪人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/xx2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/xx2_thumb.gif\",\"value\":\"[雪人]\",\"picid\":\"\"},{\"phrase\":\"[小丑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/xc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/xc_thumb.gif\",\"value\":\"[小丑]\",\"picid\":\"\"},{\"phrase\":\"[问号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/wh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/wh_thumb.gif\",\"value\":\"[问号]\",\"picid\":\"\"},{\"phrase\":\"[叹号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/th_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/th_thumb.gif\",\"value\":\"[叹号]\",\"picid\":\"\"},{\"phrase\":\"[句号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/jh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"搞怪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/jh_thumb.gif\",\"value\":\"[句号]\",\"picid\":\"\"},{\"phrase\":\"[c帅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/cshuai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/cshuai_thumb.gif\",\"value\":\"[c帅]\",\"picid\":\"\"},{\"phrase\":\"[c窃喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/cqiexi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/cqiexi_thumb.gif\",\"value\":\"[c窃喜]\",\"picid\":\"\"},{\"phrase\":\"[c迷糊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/cmihu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/cmihu_thumb.gif\",\"value\":\"[c迷糊]\",\"picid\":\"\"},{\"phrase\":\"[c面瘫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/cmiantan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/cmiantan_thumb.gif\",\"value\":\"[c面瘫]\",\"picid\":\"\"},{\"phrase\":\"[c囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/cjiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/cjiong_thumb.gif\",\"value\":\"[c囧]\",\"picid\":\"\"},{\"phrase\":\"[c汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/chan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/chan_thumb.gif\",\"value\":\"[c汗]\",\"picid\":\"\"},{\"phrase\":\"[c高明]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/cgaoming_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/cgaoming_thumb.gif\",\"value\":\"[c高明]\",\"picid\":\"\"},{\"phrase\":\"[c大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/cdaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/cdaxiao_thumb.gif\",\"value\":\"[c大笑]\",\"picid\":\"\"},{\"phrase\":\"[c变脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/cbianlian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/cbianlian_thumb.gif\",\"value\":\"[c变脸]\",\"picid\":\"\"},{\"phrase\":\"[c左右看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/xcjzuoyoukan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/xcjzuoyoukan_thumb.gif\",\"value\":\"[c左右看]\",\"picid\":\"\"},{\"phrase\":\"[c坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/xcjhuaixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/xcjhuaixiao_thumb.gif\",\"value\":\"[c坏笑]\",\"picid\":\"\"},{\"phrase\":\"[c看热闹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/xcjkanrenao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/xcjkanrenao_thumb.gif\",\"value\":\"[c看热闹]\",\"picid\":\"\"},{\"phrase\":\"[c开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/xcjkaixin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/xcjkaixin_thumb.gif\",\"value\":\"[c开心]\",\"picid\":\"\"},{\"phrase\":\"[c关注]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xcjguanzhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xcjguanzhu_thumb.gif\",\"value\":\"[c关注]\",\"picid\":\"\"},{\"phrase\":\"[c娇羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/xcjjiaoxiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/xcjjiaoxiu_thumb.gif\",\"value\":\"[c娇羞]\",\"picid\":\"\"},{\"phrase\":\"[c无语]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xcjwuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/xcjwuyu_thumb.gif\",\"value\":\"[c无语]\",\"picid\":\"\"},{\"phrase\":\"[c疑惑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xcjyihuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xcjyihuo_thumb.gif\",\"value\":\"[c疑惑]\",\"picid\":\"\"},{\"phrase\":\"[c正经]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xcjzhengjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/xcjzhengjing_thumb.gif\",\"value\":\"[c正经]\",\"picid\":\"\"},{\"phrase\":\"[c无聊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/xcjwuliao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/xcjwuliao_thumb.gif\",\"value\":\"[c无聊]\",\"picid\":\"\"},{\"phrase\":\"[c挖鼻孔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/xcjwabikong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/xcjwabikong_thumb.gif\",\"value\":\"[c挖鼻孔]\",\"picid\":\"\"},{\"phrase\":\"[c期待]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/xcjqidai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/xcjqidai_thumb.gif\",\"value\":\"[c期待]\",\"picid\":\"\"},{\"phrase\":\"[c摇头看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/xcjyaotoukan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/xcjyaotoukan_thumb.gif\",\"value\":\"[c摇头看]\",\"picid\":\"\"},{\"phrase\":\"[c亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xcjqinqin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xcjqinqin_thumb.gif\",\"value\":\"[c亲亲]\",\"picid\":\"\"},{\"phrase\":\"[c羞涩]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/xcjxiushe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/xcjxiushe_thumb.gif\",\"value\":\"[c羞涩]\",\"picid\":\"\"},{\"phrase\":\"[c悲催]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/xcjbeicui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/xcjbeicui_thumb.gif\",\"value\":\"[c悲催]\",\"picid\":\"\"},{\"phrase\":\"[c得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/xcjdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/xcjdese_thumb.gif\",\"value\":\"[c得瑟]\",\"picid\":\"\"},{\"phrase\":\"[c冷眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/xcjlengyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/xcjlengyan_thumb.gif\",\"value\":\"[c冷眼]\",\"picid\":\"\"},{\"phrase\":\"[c惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/xcjjingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/xcjjingya_thumb.gif\",\"value\":\"[c惊讶]\",\"picid\":\"\"},{\"phrase\":\"[c委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/xcjweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/xcjweiqu_thumb.gif\",\"value\":\"[c委屈]\",\"picid\":\"\"},{\"phrase\":\"[c甩舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xcjshuaishetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/xcjshuaishetou_thumb.gif\",\"value\":\"[c甩舌头]\",\"picid\":\"\"},{\"phrase\":\"[c摇头萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/xcjyaotoumeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/xcjyaotoumeng_thumb.gif\",\"value\":\"[c摇头萌]\",\"picid\":\"\"},{\"phrase\":\"[c抓狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/xcjzhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/xcjzhuakuang_thumb.gif\",\"value\":\"[c抓狂]\",\"picid\":\"\"},{\"phrase\":\"[c发火]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/xcjfahuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/xcjfahuo_thumb.gif\",\"value\":\"[c发火]\",\"picid\":\"\"},{\"phrase\":\"[c卖萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/xcjmaimeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/xcjmaimeng_thumb.gif\",\"value\":\"[c卖萌]\",\"picid\":\"\"},{\"phrase\":\"[c伤心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xcjshangxin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xcjshangxin_thumb.gif\",\"value\":\"[c伤心]\",\"picid\":\"\"},{\"phrase\":\"[c捂脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/xcjwulian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/xcjwulian_thumb.gif\",\"value\":\"[c捂脸]\",\"picid\":\"\"},{\"phrase\":\"[c震惊哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/xcjzhenjingku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/xcjzhenjingku_thumb.gif\",\"value\":\"[c震惊哭]\",\"picid\":\"\"},{\"phrase\":\"[c摇摆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/xcjyaobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/xcjyaobai_thumb.gif\",\"value\":\"[c摇摆]\",\"picid\":\"\"},{\"phrase\":\"[c得意笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/xcjdeyixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/xcjdeyixiao_thumb.gif\",\"value\":\"[c得意笑]\",\"picid\":\"\"},{\"phrase\":\"[c烦躁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/xcjfanzao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/xcjfanzao_thumb.gif\",\"value\":\"[c烦躁]\",\"picid\":\"\"},{\"phrase\":\"[c得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/xcjdeyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/xcjdeyi_thumb.gif\",\"value\":\"[c得意]\",\"picid\":\"\"},{\"phrase\":\"[c脸红]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/xcjlianhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小纯洁\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/xcjlianhong_thumb.gif\",\"value\":\"[c脸红]\",\"picid\":\"\"},{\"phrase\":\"[lxhx喵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/lxhxmiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/lxhxmiao_thumb.gif\",\"value\":\"[lxhx喵]\",\"picid\":\"\"},{\"phrase\":\"[lxhx喵喵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/lxhxmiao2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/lxhxmiao2_thumb.gif\",\"value\":\"[lxhx喵喵]\",\"picid\":\"\"},{\"phrase\":\"[lxhx奔跑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/lxhxbenpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/lxhxbenpao_thumb.gif\",\"value\":\"[lxhx奔跑]\",\"picid\":\"\"},{\"phrase\":\"[lxhx走]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/lxhxzou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/lxhxzou_thumb.gif\",\"value\":\"[lxhx走]\",\"picid\":\"\"},{\"phrase\":\"[lxhx蠕过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/lxhxruguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/lxhxruguo_thumb.gif\",\"value\":\"[lxhx蠕过]\",\"picid\":\"\"},{\"phrase\":\"[lxhx蹭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/lxhxceng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/lxhxceng_thumb.gif\",\"value\":\"[lxhx蹭]\",\"picid\":\"\"},{\"phrase\":\"[lxhx狂欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/lxhxkuanghuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/lxhxkuanghuan_thumb.gif\",\"value\":\"[lxhx狂欢]\",\"picid\":\"\"},{\"phrase\":\"[lxhx奋斗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/lxhxfendou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/lxhxfendou_thumb.gif\",\"value\":\"[lxhx奋斗]\",\"picid\":\"\"},{\"phrase\":\"[lxhx笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhxxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhxxiao_thumb.gif\",\"value\":\"[lxhx笑]\",\"picid\":\"\"},{\"phrase\":\"[lxhx懒腰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhxlanyao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhxlanyao_thumb.gif\",\"value\":\"[lxhx懒腰]\",\"picid\":\"\"},{\"phrase\":\"[lxhx得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/lxhxdeyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/lxhxdeyi_thumb.gif\",\"value\":\"[lxhx得意]\",\"picid\":\"\"},{\"phrase\":\"[lxhx右边]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/lxhxyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/lxhxyou_thumb.gif\",\"value\":\"[lxhx右边]\",\"picid\":\"\"},{\"phrase\":\"[lxhx转头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lxhxzhuantou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lxhxzhuantou_thumb.gif\",\"value\":\"[lxhx转头]\",\"picid\":\"\"},{\"phrase\":\"[lxhx跳跃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/lxhxtiaoyue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/lxhxtiaoyue_thumb.gif\",\"value\":\"[lxhx跳跃]\",\"picid\":\"\"},{\"phrase\":\"[lxhx转体]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lxhxzhuanti_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lxhxzhuanti_thumb.gif\",\"value\":\"[lxhx转体]\",\"picid\":\"\"},{\"phrase\":\"[lxhx撒欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/lxhxsahuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/lxhxsahuan_thumb.gif\",\"value\":\"[lxhx撒欢]\",\"picid\":\"\"},{\"phrase\":\"[lxhx挠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/lxhxnao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/lxhxnao_thumb.gif\",\"value\":\"[lxhx挠]\",\"picid\":\"\"},{\"phrase\":\"[lxhx挠皇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/lxhxnaohuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/lxhxnaohuang_thumb.gif\",\"value\":\"[lxhx挠皇]\",\"picid\":\"\"},{\"phrase\":\"[lxhx逗转圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhxdouzhuanquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhxdouzhuanquan_thumb.gif\",\"value\":\"[lxhx逗转圈]\",\"picid\":\"\"},{\"phrase\":\"[lxhx划]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/lxhxhua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/lxhxhua_thumb.gif\",\"value\":\"[lxhx划]\",\"picid\":\"\"},{\"phrase\":\"[lxhx得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/lxhxdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/lxhxdese_thumb.gif\",\"value\":\"[lxhx得瑟]\",\"picid\":\"\"},{\"phrase\":\"[lxhx喷嚏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/lxhxpenti2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/lxhxpenti2_thumb.gif\",\"value\":\"[lxhx喷嚏]\",\"picid\":\"\"},{\"phrase\":\"[lxhx打喷嚏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/lxhxpenti_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/lxhxpenti_thumb.gif\",\"value\":\"[lxhx打喷嚏]\",\"picid\":\"\"},{\"phrase\":\"[lxhx哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lxhxku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lxhxku_thumb.gif\",\"value\":\"[lxhx哭]\",\"picid\":\"\"},{\"phrase\":\"[lxhx扫灰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhxsaohui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhxsaohui_thumb.gif\",\"value\":\"[lxhx扫灰]\",\"picid\":\"\"},{\"phrase\":\"[lxhx听歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhxtingge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhxtingge_thumb.gif\",\"value\":\"[lxhx听歌]\",\"picid\":\"\"},{\"phrase\":\"[lxhx狂吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/lxhxkuangchi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/lxhxkuangchi_thumb.gif\",\"value\":\"[lxhx狂吃]\",\"picid\":\"\"},{\"phrase\":\"[lxhx画圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/lxhxhuaquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/lxhxhuaquan_thumb.gif\",\"value\":\"[lxhx画圈]\",\"picid\":\"\"},{\"phrase\":\"[lxhx掀桌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/lxhxxianzhuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/lxhxxianzhuo_thumb.gif\",\"value\":\"[lxhx掀桌]\",\"picid\":\"\"},{\"phrase\":\"[lxhx刷牙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/lxhxshuaya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/lxhxshuaya_thumb.gif\",\"value\":\"[lxhx刷牙]\",\"picid\":\"\"},{\"phrase\":\"[lxhx抱枕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/lxhxbaozhen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/lxhxbaozhen_thumb.gif\",\"value\":\"[lxhx抱枕]\",\"picid\":\"\"},{\"phrase\":\"[lxhx都不给]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxdoubugei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxdoubugei_thumb.gif\",\"value\":\"[lxhx都不给]\",\"picid\":\"\"},{\"phrase\":\"[lxhx逗左右]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/lxhxdouzuoyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/lxhxdouzuoyou_thumb.gif\",\"value\":\"[lxhx逗左右]\",\"picid\":\"\"},{\"phrase\":\"[lxhx变化]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhxbianhua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhxbianhua_thumb.gif\",\"value\":\"[lxhx变化]\",\"picid\":\"\"},{\"phrase\":\"[lxhx打地鼠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/lxhxdadishu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/lxhxdadishu_thumb.gif\",\"value\":\"[lxhx打地鼠]\",\"picid\":\"\"},{\"phrase\":\"[lxhx西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/lxhxxigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/lxhxxigua_thumb.gif\",\"value\":\"[lxhx西瓜]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/lxhxxiu1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/lxhxxiu1_thumb.gif\",\"value\":\"[lxhx咻]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/lxhxxiu2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/lxhxxiu2_thumb.gif\",\"value\":\"[lxhx咻2]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻3]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhxxiu3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhxxiu3_thumb.gif\",\"value\":\"[lxhx咻3]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻4]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/lxhxxiu4_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/lxhxxiu4_thumb.gif\",\"value\":\"[lxhx咻4]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻5]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhxxiu5_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhxxiu5_thumb.gif\",\"value\":\"[lxhx咻5]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻6]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/lxhxxiu6_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/lxhxxiu6_thumb.gif\",\"value\":\"[lxhx咻6]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻7]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/lxhxxiu7_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/lxhxxiu7_thumb.gif\",\"value\":\"[lxhx咻7]\",\"picid\":\"\"},{\"phrase\":\"[lxhx咻8]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/lxhxxiu8_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/lxhxxiu8_thumb.gif\",\"value\":\"[lxhx咻8]\",\"picid\":\"\"},{\"phrase\":\"[lxhx滚过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhxgunguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhxgunguo_thumb.gif\",\"value\":\"[lxhx滚过]\",\"picid\":\"\"},{\"phrase\":\"[lxhx躺中枪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lxhxtangzhongqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lxhxtangzhongqiang_thumb.gif\",\"value\":\"[lxhx躺中枪]\",\"picid\":\"\"},{\"phrase\":\"[lxhx讨厌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/lxhxtaoyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/lxhxtaoyan_thumb.gif\",\"value\":\"[lxhx讨厌]\",\"picid\":\"\"},{\"phrase\":\"[lxhx逗上下]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/lxhxdoushangxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/lxhxdoushangxia_thumb.gif\",\"value\":\"[lxhx逗上下]\",\"picid\":\"\"},{\"phrase\":\"[lxhx吐血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxtuxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxtuxue_thumb.gif\",\"value\":\"[lxhx吐血]\",\"picid\":\"\"},{\"phrase\":\"[lxhx病了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/lxhxbingle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/lxhxbingle_thumb.gif\",\"value\":\"[lxhx病了]\",\"picid\":\"\"},{\"phrase\":\"[lxhx泪目]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/lxhxleimu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/lxhxleimu_thumb.gif\",\"value\":\"[lxhx泪目]\",\"picid\":\"\"},{\"phrase\":\"[lxhx无语]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/lxhxwuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/lxhxwuyu_thumb.gif\",\"value\":\"[lxhx无语]\",\"picid\":\"\"},{\"phrase\":\"[lxhx问号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhxwenhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhxwenhao_thumb.gif\",\"value\":\"[lxhx问号]\",\"picid\":\"\"},{\"phrase\":\"[lxhx侧目]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhxcemu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhxcemu_thumb.gif\",\"value\":\"[lxhx侧目]\",\"picid\":\"\"},{\"phrase\":\"[lxhx惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lxhxjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lxhxjing_thumb.gif\",\"value\":\"[lxhx惊]\",\"picid\":\"\"},{\"phrase\":\"[lxhx吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/lxhxtu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/lxhxtu_thumb.gif\",\"value\":\"[lxhx吐]\",\"picid\":\"\"},{\"phrase\":\"[lxhx失落]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhxshiluo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhxshiluo_thumb.gif\",\"value\":\"[lxhx失落]\",\"picid\":\"\"},{\"phrase\":\"[lxhx汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/lxhxhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/lxhxhan_thumb.gif\",\"value\":\"[lxhx汗]\",\"picid\":\"\"},{\"phrase\":\"[lxhx暴汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxhan1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhxhan1_thumb.gif\",\"value\":\"[lxhx暴汗]\",\"picid\":\"\"},{\"phrase\":\"[lxhx狠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhxhen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhxhen_thumb.gif\",\"value\":\"[lxhx狠]\",\"picid\":\"\"},{\"phrase\":\"[lxhx怨念]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/lxhxyuannian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/lxhxyuannian_thumb.gif\",\"value\":\"[lxhx怨念]\",\"picid\":\"\"},{\"phrase\":\"[lxhx睡觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/lxhxshuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/lxhxshuijiao_thumb.gif\",\"value\":\"[lxhx睡觉]\",\"picid\":\"\"},{\"phrase\":\"[lxhx求表扬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/lxhxqiubiaoyang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/lxhxqiubiaoyang_thumb.gif\",\"value\":\"[lxhx求表扬]\",\"picid\":\"\"},{\"phrase\":\"[lxhx啄地]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/lxhxzhuodi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/lxhxzhuodi_thumb.gif\",\"value\":\"[lxhx啄地]\",\"picid\":\"\"},{\"phrase\":\"[lxhx无聊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lxhxwuliao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/lxhxwuliao_thumb.gif\",\"value\":\"[lxhx无聊]\",\"picid\":\"\"},{\"phrase\":\"[lxhx顺毛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/lxhxshunmao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/lxhxshunmao_thumb.gif\",\"value\":\"[lxhx顺毛]\",\"picid\":\"\"},{\"phrase\":\"[lxhx喝奶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/lxhxhenai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/lxhxhenai_thumb.gif\",\"value\":\"[lxhx喝奶]\",\"picid\":\"\"},{\"phrase\":\"[lxhx不爽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhxbushuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhxbushuang_thumb.gif\",\"value\":\"[lxhx不爽]\",\"picid\":\"\"},{\"phrase\":\"[lxhx老大]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/lxhxlaoda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/lxhxlaoda_thumb.gif\",\"value\":\"[lxhx老大]\",\"picid\":\"\"},{\"phrase\":\"[lxhx生日快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhxshengrikuaile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhxshengrikuaile_thumb.gif\",\"value\":\"[lxhx生日快乐]\",\"picid\":\"\"},{\"phrase\":\"[mtjj拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/longnianmtjj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"罗小黑\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/longnianmtjj_thumb.gif\",\"value\":\"[mtjj拜年]\",\"picid\":\"\"},{\"phrase\":\"[j微博益起来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/xyjgongyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/xyjgongyi_thumb.gif\",\"value\":\"[j微博益起来]\",\"picid\":\"\"},{\"phrase\":\"[j疯了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/xyjfengle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/xyjfengle_thumb.gif\",\"value\":\"[j疯了]\",\"picid\":\"\"},{\"phrase\":\"[j撒娇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/xyjsajiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/xyjsajiao_thumb.gif\",\"value\":\"[j撒娇]\",\"picid\":\"\"},{\"phrase\":\"[j吐血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/xyjtuxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/xyjtuxue_thumb.gif\",\"value\":\"[j吐血]\",\"picid\":\"\"},{\"phrase\":\"[j浪笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/xyjlangxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/xyjlangxiao_thumb.gif\",\"value\":\"[j浪笑]\",\"picid\":\"\"},{\"phrase\":\"[j作揖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/xyjzuoyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/xyjzuoyi_thumb.gif\",\"value\":\"[j作揖]\",\"picid\":\"\"},{\"phrase\":\"[j哎呀]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/xyjaiya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/xyjaiya_thumb.gif\",\"value\":\"[j哎呀]\",\"picid\":\"\"},{\"phrase\":\"[j挂了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/xyjguale_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/xyjguale_thumb.gif\",\"value\":\"[j挂了]\",\"picid\":\"\"},{\"phrase\":\"[j扭秧歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/xyjniuyangge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/xyjniuyangge_thumb.gif\",\"value\":\"[j扭秧歌]\",\"picid\":\"\"},{\"phrase\":\"[j媚眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/xyjmeiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/xyjmeiyan_thumb.gif\",\"value\":\"[j媚眼]\",\"picid\":\"\"},{\"phrase\":\"[j来嘛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/xyjlaima_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/xyjlaima_thumb.gif\",\"value\":\"[j来嘛]\",\"picid\":\"\"},{\"phrase\":\"[j蹭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/xyjceng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/xyjceng_thumb.gif\",\"value\":\"[j蹭]\",\"picid\":\"\"},{\"phrase\":\"[xyj年年有鱼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/longnianxyjyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/longnianxyjyu_thumb.gif\",\"value\":\"[xyj年年有鱼]\",\"picid\":\"\"},{\"phrase\":\"[xyj红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/longnianxyjhb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/longnianxyjhb_thumb.gif\",\"value\":\"[xyj红包]\",\"picid\":\"\"},{\"phrase\":\"[xyj拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/longnianxyjbai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/longnianxyjbai_thumb.gif\",\"value\":\"[xyj拜年]\",\"picid\":\"\"},{\"phrase\":\"[抓沙发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/chn_zhuashafa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/chn_zhuashafa_thumb.gif\",\"value\":\"[抓沙发]\",\"picid\":\"\"},{\"phrase\":\"[震撼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/chn_zhenhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/chn_zhenhan_thumb.gif\",\"value\":\"[震撼]\",\"picid\":\"\"},{\"phrase\":\"[晕晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/chn_yun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/chn_yun_thumb.gif\",\"value\":\"[晕晕]\",\"picid\":\"\"},{\"phrase\":\"[瞎眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/chn_xiayan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/chn_xiayan_thumb.gif\",\"value\":\"[瞎眼]\",\"picid\":\"\"},{\"phrase\":\"[为难]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/chn_weinan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/chn_weinan_thumb.gif\",\"value\":\"[为难]\",\"picid\":\"\"},{\"phrase\":\"[舔_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/chn_tian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/chn_tian_thumb.gif\",\"value\":\"[舔_旧]\",\"picid\":\"\"},{\"phrase\":\"[流汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/chn_liuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/chn_liuhan_thumb.gif\",\"value\":\"[流汗]\",\"picid\":\"\"},{\"phrase\":\"[冷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/chn_leng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/chn_leng_thumb.gif\",\"value\":\"[冷]\",\"picid\":\"\"},{\"phrase\":\"[老大]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/chn_laoda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/chn_laoda_thumb.gif\",\"value\":\"[老大]\",\"picid\":\"\"},{\"phrase\":\"[瞌睡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/chn_keshui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/chn_keshui_thumb.gif\",\"value\":\"[瞌睡]\",\"picid\":\"\"},{\"phrase\":\"[可怜的]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/chn_kelian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/chn_kelian_thumb.gif\",\"value\":\"[可怜的]\",\"picid\":\"\"},{\"phrase\":\"[咖啡咖啡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/chn_kafei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/chn_kafei_thumb.gif\",\"value\":\"[咖啡咖啡]\",\"picid\":\"\"},{\"phrase\":\"[坏笑_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/chn_huaixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/chn_huaixiao_thumb.gif\",\"value\":\"[坏笑_旧]\",\"picid\":\"\"},{\"phrase\":\"[顶啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/chn_ding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/chn_ding_thumb.gif\",\"value\":\"[顶啊]\",\"picid\":\"\"},{\"phrase\":\"[好得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/chn_deyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/chn_deyi_thumb.gif\",\"value\":\"[好得意]\",\"picid\":\"\"},{\"phrase\":\"[冲啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/chn_chonga_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/chn_chonga_thumb.gif\",\"value\":\"[冲啊]\",\"picid\":\"\"},{\"phrase\":\"[吃西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/chn_chixigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/chn_chixigua_thumb.gif\",\"value\":\"[吃西瓜]\",\"picid\":\"\"},{\"phrase\":\"[不要啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/chn_buyaoya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/chn_buyaoya_thumb.gif\",\"value\":\"[不要啊]\",\"picid\":\"\"},{\"phrase\":\"[飙泪中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/chn_biaolei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/chn_biaolei_thumb.gif\",\"value\":\"[飙泪中]\",\"picid\":\"\"},{\"phrase\":\"[爱你哦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/chn_aini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小幺鸡\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/chn_aini_thumb.gif\",\"value\":\"[爱你哦]\",\"picid\":\"\"},{\"phrase\":\"[moc生日快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/mocshengrikuaile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/mocshengrikuaile_thumb.gif\",\"value\":\"[moc生日快乐]\",\"picid\":\"\"},{\"phrase\":\"[moc自重]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/moczizhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/moczizhong_thumb.gif\",\"value\":\"[moc自重]\",\"picid\":\"\"},{\"phrase\":\"[moc转头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/moczhuangtou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/moczhuangtou_thumb.gif\",\"value\":\"[moc转头]\",\"picid\":\"\"},{\"phrase\":\"[moc装酷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/moczhuangku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/moczhuangku_thumb.gif\",\"value\":\"[moc装酷]\",\"picid\":\"\"},{\"phrase\":\"[moc转发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/moczhuanfa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/moczhuanfa_thumb.gif\",\"value\":\"[moc转发]\",\"picid\":\"\"},{\"phrase\":\"[moc中箭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/moczhongjian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/moczhongjian_thumb.gif\",\"value\":\"[moc中箭]\",\"picid\":\"\"},{\"phrase\":\"[moc晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/mocyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/mocyun_thumb.gif\",\"value\":\"[moc晕]\",\"picid\":\"\"},{\"phrase\":\"[moc羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mocxiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mocxiu_thumb.gif\",\"value\":\"[moc羞]\",\"picid\":\"\"},{\"phrase\":\"[moc围观]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/mocweiguan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/mocweiguan_thumb.gif\",\"value\":\"[moc围观]\",\"picid\":\"\"},{\"phrase\":\"[moc晚安]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/mocwanan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/mocwanan_thumb.gif\",\"value\":\"[moc晚安]\",\"picid\":\"\"},{\"phrase\":\"[moc弹跳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/moctantiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/moctantiao_thumb.gif\",\"value\":\"[moc弹跳]\",\"picid\":\"\"},{\"phrase\":\"[moc石化]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/mocshihua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/mocshihua_thumb.gif\",\"value\":\"[moc石化]\",\"picid\":\"\"},{\"phrase\":\"[moc生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/mocshengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/mocshengqi_thumb.gif\",\"value\":\"[moc生气]\",\"picid\":\"\"},{\"phrase\":\"[moc亲亲女]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/mocqinqinzuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/mocqinqinzuo_thumb.gif\",\"value\":\"[moc亲亲女]\",\"picid\":\"\"},{\"phrase\":\"[moc亲亲男]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/mocqinqinyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/mocqinqinyou_thumb.gif\",\"value\":\"[moc亲亲男]\",\"picid\":\"\"},{\"phrase\":\"[moc亲吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/mocqinqinwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/mocqinqinwen_thumb.gif\",\"value\":\"[moc亲吻]\",\"picid\":\"\"},{\"phrase\":\"[moc强吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/mocqiangwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/mocqiangwen_thumb.gif\",\"value\":\"[moc强吻]\",\"picid\":\"\"},{\"phrase\":\"[moc拍照]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/mocpaizhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/mocpaizhao_thumb.gif\",\"value\":\"[moc拍照]\",\"picid\":\"\"},{\"phrase\":\"[moc呕吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/mocoutu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/mocoutu_thumb.gif\",\"value\":\"[moc呕吐]\",\"picid\":\"\"},{\"phrase\":\"[moc冒出]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/mocmaochu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/mocmaochu_thumb.gif\",\"value\":\"[moc冒出]\",\"picid\":\"\"},{\"phrase\":\"[moc路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/mocluguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/mocluguo_thumb.gif\",\"value\":\"[moc路过]\",\"picid\":\"\"},{\"phrase\":\"[moc看清楚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/mockanqingchu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/mockanqingchu_thumb.gif\",\"value\":\"[moc看清楚]\",\"picid\":\"\"},{\"phrase\":\"[moc结冰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/mocjiebing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/mocjiebing_thumb.gif\",\"value\":\"[moc结冰]\",\"picid\":\"\"},{\"phrase\":\"[moc挤]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/mocji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/mocji_thumb.gif\",\"value\":\"[moc挤]\",\"picid\":\"\"},{\"phrase\":\"[moc鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/mocguilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/mocguilian_thumb.gif\",\"value\":\"[moc鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[moc尴尬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/mocganga_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/mocganga_thumb.gif\",\"value\":\"[moc尴尬]\",\"picid\":\"\"},{\"phrase\":\"[moc浮云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/mocfuyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/mocfuyun_thumb.gif\",\"value\":\"[moc浮云]\",\"picid\":\"\"},{\"phrase\":\"[moc顶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/mocding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/mocding_thumb.gif\",\"value\":\"[moc顶]\",\"picid\":\"\"},{\"phrase\":\"[moc大哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/mocdaku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/mocdaku_thumb.gif\",\"value\":\"[moc大哭]\",\"picid\":\"\"},{\"phrase\":\"[moc大口吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/mocdakouchi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/mocdakouchi_thumb.gif\",\"value\":\"[moc大口吃]\",\"picid\":\"\"},{\"phrase\":\"[moc打击]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/mocdaji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/mocdaji_thumb.gif\",\"value\":\"[moc打击]\",\"picid\":\"\"},{\"phrase\":\"[moc呲牙笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mocciyaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mocciyaxiao_thumb.gif\",\"value\":\"[moc呲牙笑]\",\"picid\":\"\"},{\"phrase\":\"[moc扯脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/mocchelian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"摩丝摩丝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/mocchelian_thumb.gif\",\"value\":\"[moc扯脸]\",\"picid\":\"\"},{\"phrase\":\"[g思考]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/guibao1sikao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/guibao1sikao_thumb.gif\",\"value\":\"[g思考]\",\"picid\":\"\"},{\"phrase\":\"[g震惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/guibao2zhenjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/guibao2zhenjing_thumb.gif\",\"value\":\"[g震惊]\",\"picid\":\"\"},{\"phrase\":\"[g狂笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/guibao3kuangxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/guibao3kuangxiao_thumb.gif\",\"value\":\"[g狂笑]\",\"picid\":\"\"},{\"phrase\":\"[g脸红]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/guibao4lianhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/guibao4lianhong_thumb.gif\",\"value\":\"[g脸红]\",\"picid\":\"\"},{\"phrase\":\"[g发愣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/guibao5faleng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/guibao5faleng_thumb.gif\",\"value\":\"[g发愣]\",\"picid\":\"\"},{\"phrase\":\"[g话痨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/guibao6hualao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/guibao6hualao_thumb.gif\",\"value\":\"[g话痨]\",\"picid\":\"\"},{\"phrase\":\"[g吹发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/guibao7chuifa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/guibao7chuifa_thumb.gif\",\"value\":\"[g吹发]\",\"picid\":\"\"},{\"phrase\":\"[g爆哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/guibao8baoku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/guibao8baoku_thumb.gif\",\"value\":\"[g爆哭]\",\"picid\":\"\"},{\"phrase\":\"[g伤心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/guibao9shangxin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/guibao9shangxin_thumb.gif\",\"value\":\"[g伤心]\",\"picid\":\"\"},{\"phrase\":\"[g得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/guibao10dese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/guibao10dese_thumb.gif\",\"value\":\"[g得瑟]\",\"picid\":\"\"},{\"phrase\":\"[g魅眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/guibao11meiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/guibao11meiyan_thumb.gif\",\"value\":\"[g魅眼]\",\"picid\":\"\"},{\"phrase\":\"[g无辜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/guibao12wugu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/guibao12wugu_thumb.gif\",\"value\":\"[g无辜]\",\"picid\":\"\"},{\"phrase\":\"[g挑眉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/guibao13tiaomei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/guibao13tiaomei_thumb.gif\",\"value\":\"[g挑眉]\",\"picid\":\"\"},{\"phrase\":\"[g墨镜1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/guibao14mojing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/guibao14mojing_thumb.gif\",\"value\":\"[g墨镜1]\",\"picid\":\"\"},{\"phrase\":\"[g墨镜2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/guibao16mojing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/guibao16mojing_thumb.gif\",\"value\":\"[g墨镜2]\",\"picid\":\"\"},{\"phrase\":\"[g变脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/guibao17bianlian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/guibao17bianlian_thumb.gif\",\"value\":\"[g变脸]\",\"picid\":\"\"},{\"phrase\":\"[g扇笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/guibao18shanxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/guibao18shanxiao_thumb.gif\",\"value\":\"[g扇笑]\",\"picid\":\"\"},{\"phrase\":\"[g扣鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/guibao19koubi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/guibao19koubi_thumb.gif\",\"value\":\"[g扣鼻]\",\"picid\":\"\"},{\"phrase\":\"[g扣鼻2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/guibao20koubi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/guibao20koubi_thumb.gif\",\"value\":\"[g扣鼻2]\",\"picid\":\"\"},{\"phrase\":\"[g瀑汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/guibao21baohan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/guibao21baohan_thumb.gif\",\"value\":\"[g瀑汗]\",\"picid\":\"\"},{\"phrase\":\"[g汗滴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/guibao22handi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/guibao22handi_thumb.gif\",\"value\":\"[g汗滴]\",\"picid\":\"\"},{\"phrase\":\"[g咀嚼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/guibao23jujue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/guibao23jujue_thumb.gif\",\"value\":\"[g咀嚼]\",\"picid\":\"\"},{\"phrase\":\"[g阴影]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/guibao24yinying_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/guibao24yinying_thumb.gif\",\"value\":\"[g阴影]\",\"picid\":\"\"},{\"phrase\":\"[g鼻血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/guibao25bixue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/guibao25bixue_thumb.gif\",\"value\":\"[g鼻血]\",\"picid\":\"\"},{\"phrase\":\"[g呕吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/guibao26outu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/guibao26outu_thumb.gif\",\"value\":\"[g呕吐]\",\"picid\":\"\"},{\"phrase\":\"[g噴血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/guibao27penxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/guibao27penxue_thumb.gif\",\"value\":\"[g噴血]\",\"picid\":\"\"},{\"phrase\":\"[g泪滴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/guibao28leidi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/guibao28leidi_thumb.gif\",\"value\":\"[g泪滴]\",\"picid\":\"\"},{\"phrase\":\"[g惊讶1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/guibao29jingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/guibao29jingya_thumb.gif\",\"value\":\"[g惊讶1]\",\"picid\":\"\"},{\"phrase\":\"[g头晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/guibao30touyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/guibao30touyun_thumb.gif\",\"value\":\"[g头晕]\",\"picid\":\"\"},{\"phrase\":\"[g闪牙1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/guibao31shanya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/guibao31shanya_thumb.gif\",\"value\":\"[g闪牙1]\",\"picid\":\"\"},{\"phrase\":\"[g闪牙2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/guibao32shanya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/guibao32shanya_thumb.gif\",\"value\":\"[g闪牙2]\",\"picid\":\"\"},{\"phrase\":\"[g巨汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/guibao33juhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/guibao33juhan_thumb.gif\",\"value\":\"[g巨汗]\",\"picid\":\"\"},{\"phrase\":\"[g鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/guibao34guzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/guibao34guzhang_thumb.gif\",\"value\":\"[g鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[g招呼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/guibao35zhaohu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/guibao35zhaohu_thumb.gif\",\"value\":\"[g招呼]\",\"picid\":\"\"},{\"phrase\":\"[g鼓掌2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/guibao36guzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/guibao36guzhang_thumb.gif\",\"value\":\"[g鼓掌2]\",\"picid\":\"\"},{\"phrase\":\"[g无所谓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/guibao37wusuowei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/guibao37wusuowei_thumb.gif\",\"value\":\"[g无所谓]\",\"picid\":\"\"},{\"phrase\":\"[g雷击]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/guibao38leiji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/guibao38leiji_thumb.gif\",\"value\":\"[g雷击]\",\"picid\":\"\"},{\"phrase\":\"[g邪笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/guibao39xiexiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/guibao39xiexiao_thumb.gif\",\"value\":\"[g邪笑]\",\"picid\":\"\"},{\"phrase\":\"[g裸奔1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/guibao40luoben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/guibao40luoben_thumb.gif\",\"value\":\"[g裸奔1]\",\"picid\":\"\"},{\"phrase\":\"[g裸奔2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/guibao41luoben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/guibao41luoben_thumb.gif\",\"value\":\"[g裸奔2]\",\"picid\":\"\"},{\"phrase\":\"[g裸奔3]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/guibao42luoben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/guibao42luoben_thumb.gif\",\"value\":\"[g裸奔3]\",\"picid\":\"\"},{\"phrase\":\"[g举刀]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/guibao43judao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/guibao43judao_thumb.gif\",\"value\":\"[g举刀]\",\"picid\":\"\"},{\"phrase\":\"[g喝茶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/guibao44hecha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/guibao44hecha_thumb.gif\",\"value\":\"[g喝茶]\",\"picid\":\"\"},{\"phrase\":\"[g摇手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/guibao45yaoshou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/guibao45yaoshou_thumb.gif\",\"value\":\"[g摇手]\",\"picid\":\"\"},{\"phrase\":\"[g病了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/guibao46bingle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/guibao46bingle_thumb.gif\",\"value\":\"[g病了]\",\"picid\":\"\"},{\"phrase\":\"[g冻上]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/guibao47dongshang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/guibao47dongshang_thumb.gif\",\"value\":\"[g冻上]\",\"picid\":\"\"},{\"phrase\":\"[g好冷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/guibao48haoleng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/guibao48haoleng_thumb.gif\",\"value\":\"[g好冷]\",\"picid\":\"\"},{\"phrase\":\"[g委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/guibao49weiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/guibao49weiqu_thumb.gif\",\"value\":\"[g委屈]\",\"picid\":\"\"},{\"phrase\":\"[g发飘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/guibao50fapiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/guibao50fapiao_thumb.gif\",\"value\":\"[g发飘]\",\"picid\":\"\"},{\"phrase\":\"[g卖萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/guibao51maimeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/guibao51maimeng_thumb.gif\",\"value\":\"[g卖萌]\",\"picid\":\"\"},{\"phrase\":\"[g唱歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/guibao52changge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/guibao52changge_thumb.gif\",\"value\":\"[g唱歌]\",\"picid\":\"\"},{\"phrase\":\"[g吃糖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/guibao53chitang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/guibao53chitang_thumb.gif\",\"value\":\"[g吃糖]\",\"picid\":\"\"},{\"phrase\":\"[g桂宝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/guibao54guibao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/guibao54guibao_thumb.gif\",\"value\":\"[g桂宝]\",\"picid\":\"\"},{\"phrase\":\"[g汪汪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/guibao55wangwang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/guibao55wangwang_thumb.gif\",\"value\":\"[g汪汪]\",\"picid\":\"\"},{\"phrase\":\"[g吐舌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/guibao56tushe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/guibao56tushe_thumb.gif\",\"value\":\"[g吐舌]\",\"picid\":\"\"},{\"phrase\":\"[g骨头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/guibao57gutou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/guibao57gutou_thumb.gif\",\"value\":\"[g骨头]\",\"picid\":\"\"},{\"phrase\":\"[g口水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/guibao58koushui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/guibao58koushui_thumb.gif\",\"value\":\"[g口水]\",\"picid\":\"\"},{\"phrase\":\"[g惊讶2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/guibao59jingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/guibao59jingya_thumb.gif\",\"value\":\"[g惊讶2]\",\"picid\":\"\"},{\"phrase\":\"[g爆哭2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/guibao60baoku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/guibao60baoku_thumb.gif\",\"value\":\"[g爆哭2]\",\"picid\":\"\"},{\"phrase\":\"[g激动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/guibao60jidong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"桂宝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/guibao60jidong_thumb.gif\",\"value\":\"[g激动]\",\"picid\":\"\"},{\"phrase\":\"[lm招财猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/lmmzhaocaimao0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/lmmzhaocaimao0_thumb.gif\",\"value\":\"[lm招财猫]\",\"picid\":\"\"},{\"phrase\":\"[lm贼笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/lmmzeixiao0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/lmmzeixiao0_thumb.gif\",\"value\":\"[lm贼笑]\",\"picid\":\"\"},{\"phrase\":\"[lm严肃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/lmmyansu0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/lmmyansu0_thumb.gif\",\"value\":\"[lm严肃]\",\"picid\":\"\"},{\"phrase\":\"[lm小地主]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/lmmxiaodizhu0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/lmmxiaodizhu0_thumb.gif\",\"value\":\"[lm小地主]\",\"picid\":\"\"},{\"phrase\":\"[lm无奈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lmmwunai0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/lmmwunai0_thumb.gif\",\"value\":\"[lm无奈]\",\"picid\":\"\"},{\"phrase\":\"[lm挖鼻屎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/lmmwabisi0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/lmmwabisi0_thumb.gif\",\"value\":\"[lm挖鼻屎]\",\"picid\":\"\"},{\"phrase\":\"[lm天然呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/lmmtianrandai0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/lmmtianrandai0_thumb.gif\",\"value\":\"[lm天然呆]\",\"picid\":\"\"},{\"phrase\":\"[lm生病了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/lmmshengbingle0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/lmmshengbingle0_thumb.gif\",\"value\":\"[lm生病了]\",\"picid\":\"\"},{\"phrase\":\"[lm扑克脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lmmpukelian0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lmmpukelian0_thumb.gif\",\"value\":\"[lm扑克脸]\",\"picid\":\"\"},{\"phrase\":\"[lm瀑布汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/lmmpubuhan0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/lmmpubuhan0_thumb.gif\",\"value\":\"[lm瀑布汗]\",\"picid\":\"\"},{\"phrase\":\"[lm磨牙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/lmmmoya0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/lmmmoya0_thumb.gif\",\"value\":\"[lm磨牙]\",\"picid\":\"\"},{\"phrase\":\"[lm没听见]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lmmmeitingjian0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lmmmeitingjian0_thumb.gif\",\"value\":\"[lm没听见]\",\"picid\":\"\"},{\"phrase\":\"[lm没事吧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/lmmmeishiba0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/lmmmeishiba0_thumb.gif\",\"value\":\"[lm没事吧]\",\"picid\":\"\"},{\"phrase\":\"[lm茫然]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/lmmmangran0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/lmmmangran0_thumb.gif\",\"value\":\"[lm茫然]\",\"picid\":\"\"},{\"phrase\":\"[lm泪流满面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/lmmleiliumanmian0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/lmmleiliumanmian0_thumb.gif\",\"value\":\"[lm泪流满面]\",\"picid\":\"\"},{\"phrase\":\"[lm囧汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/lmmjionghan0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/lmmjionghan0_thumb.gif\",\"value\":\"[lm囧汗]\",\"picid\":\"\"},{\"phrase\":\"[lm惊恐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/lmmjingkong0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/lmmjingkong0_thumb.gif\",\"value\":\"[lm惊恐]\",\"picid\":\"\"},{\"phrase\":\"[lm惊呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/lmmjingdai0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/lmmjingdai0_thumb.gif\",\"value\":\"[lm惊呆]\",\"picid\":\"\"},{\"phrase\":\"[lm警察]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/lmmjingcha0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/lmmjingcha0_thumb.gif\",\"value\":\"[lm警察]\",\"picid\":\"\"},{\"phrase\":\"[lm混乱中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/lmmhunluan0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/lmmhunluan0_thumb.gif\",\"value\":\"[lm混乱中]\",\"picid\":\"\"},{\"phrase\":\"[lm花痴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/lmmhuachi0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/lmmhuachi0_thumb.gif\",\"value\":\"[lm花痴]\",\"picid\":\"\"},{\"phrase\":\"[lm喝水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/lmmheshui0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/lmmheshui0_thumb.gif\",\"value\":\"[lm喝水]\",\"picid\":\"\"},{\"phrase\":\"[lm嘿嘿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/lmmheihei0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/lmmheihei0_thumb.gif\",\"value\":\"[lm嘿嘿]\",\"picid\":\"\"},{\"phrase\":\"[lm哈哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/lmmhahaha0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/lmmhahaha0_thumb.gif\",\"value\":\"[lm哈哈哈]\",\"picid\":\"\"},{\"phrase\":\"[lm干笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/lmmganxiao0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/lmmganxiao0_thumb.gif\",\"value\":\"[lm干笑]\",\"picid\":\"\"},{\"phrase\":\"[lm疯了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lmmfengle0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lmmfengle0_thumb.gif\",\"value\":\"[lm疯了]\",\"picid\":\"\"},{\"phrase\":\"[lm恶心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lmmexin0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lmmexin0_thumb.gif\",\"value\":\"[lm恶心]\",\"picid\":\"\"},{\"phrase\":\"[lm嘟嘟嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/lmmduduzui0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/de/lmmduduzui0_thumb.gif\",\"value\":\"[lm嘟嘟嘴]\",\"picid\":\"\"},{\"phrase\":\"[lm滴蜡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lmmdila0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lmmdila0_thumb.gif\",\"value\":\"[lm滴蜡]\",\"picid\":\"\"},{\"phrase\":\"[lm点头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/lmmdiantou0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/lmmdiantou0_thumb.gif\",\"value\":\"[lm点头]\",\"picid\":\"\"},{\"phrase\":\"[lm大怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/lmmdanu0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/lmmdanu0_thumb.gif\",\"value\":\"[lm大怒]\",\"picid\":\"\"},{\"phrase\":\"[lm大惊失色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/lmmdajingshise0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/lmmdajingshise0_thumb.gif\",\"value\":\"[lm大惊失色]\",\"picid\":\"\"},{\"phrase\":\"[lm呆笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lmmdaixiao0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lmmdaixiao0_thumb.gif\",\"value\":\"[lm呆笑]\",\"picid\":\"\"},{\"phrase\":\"[lm搭错线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/lmmdacuoxian0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/lmmdacuoxian0_thumb.gif\",\"value\":\"[lm搭错线]\",\"picid\":\"\"},{\"phrase\":\"[lm大便]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/lmmdabian0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/lmmdabian0_thumb.gif\",\"value\":\"[lm大便]\",\"picid\":\"\"},{\"phrase\":\"[lm不]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/lmmbu0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/lmmbu0_thumb.gif\",\"value\":\"[lm不]\",\"picid\":\"\"},{\"phrase\":\"[lm鼻涕虫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lmmbitichong0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lmmbitichong0_thumb.gif\",\"value\":\"[lm鼻涕虫]\",\"picid\":\"\"},{\"phrase\":\"[lm暴雨汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/db/lmmbaoyuhan0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/db/lmmbaoyuhan0_thumb.gif\",\"value\":\"[lm暴雨汗]\",\"picid\":\"\"},{\"phrase\":\"[lm啊呜啊呜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/lmmawuawu0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/lmmawuawu0_thumb.gif\",\"value\":\"[lm啊呜啊呜]\",\"picid\":\"\"},{\"phrase\":\"[lm爱爱爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/lmmaiaiai0_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/lmmaiaiai0_thumb.gif\",\"value\":\"[lm爱爱爱]\",\"picid\":\"\"},{\"phrase\":\"[mk拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/longnianmk_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/longnianmk_thumb.gif\",\"value\":\"[mk拜年]\",\"picid\":\"\"},{\"phrase\":\"[真淡定]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/cat_zhendanding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/cat_zhendanding_thumb.gif\",\"value\":\"[真淡定]\",\"picid\":\"\"},{\"phrase\":\"[运气中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/cat_yunqizhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/cat_yunqizhong_thumb.gif\",\"value\":\"[运气中]\",\"picid\":\"\"},{\"phrase\":\"[嗯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/cat_yi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/cat_yi_thumb.gif\",\"value\":\"[嗯]\",\"picid\":\"\"},{\"phrase\":\"[一头竖线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/cat_yitoushuxian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/cat_yitoushuxian_thumb.gif\",\"value\":\"[一头竖线]\",\"picid\":\"\"},{\"phrase\":\"[星星眼儿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/cat_xingxingyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/cat_xingxingyan_thumb.gif\",\"value\":\"[星星眼儿]\",\"picid\":\"\"},{\"phrase\":\"[笑眯眯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/cat_xiaomimi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/cat_xiaomimi_thumb.gif\",\"value\":\"[笑眯眯]\",\"picid\":\"\"},{\"phrase\":\"[小地主]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/cat_xiaodizhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/cat_xiaodizhu_thumb.gif\",\"value\":\"[小地主]\",\"picid\":\"\"},{\"phrase\":\"[我错了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/cat_wocuole_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/54/cat_wocuole_thumb.gif\",\"value\":\"[我错了]\",\"picid\":\"\"},{\"phrase\":\"[喂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/cat_wei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/cat_wei_thumb.gif\",\"value\":\"[喂]\",\"picid\":\"\"},{\"phrase\":\"[伸舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/cat_tushetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/cat_tushetou_thumb.gif\",\"value\":\"[伸舌头]\",\"picid\":\"\"},{\"phrase\":\"[天然呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/cat_tianrandai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/cat_tianrandai_thumb.gif\",\"value\":\"[天然呆]\",\"picid\":\"\"},{\"phrase\":\"[陶醉了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/cat_taozuile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/cat_taozuile_thumb.gif\",\"value\":\"[陶醉了]\",\"picid\":\"\"},{\"phrase\":\"[生气了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/cat_shengqile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/cat_shengqile_thumb.gif\",\"value\":\"[生气了]\",\"picid\":\"\"},{\"phrase\":\"[生病鸟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/cat_shengbingle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/cat_shengbingle_thumb.gif\",\"value\":\"[生病鸟]\",\"picid\":\"\"},{\"phrase\":\"[忍不了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/cat_renbuliao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/cat_renbuliao_thumb.gif\",\"value\":\"[忍不了]\",\"picid\":\"\"},{\"phrase\":\"[扑克脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/cat_pukelian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/cat_pukelian_thumb.gif\",\"value\":\"[扑克脸]\",\"picid\":\"\"},{\"phrase\":\"[瀑布汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/cat_pubuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/cat_pubuhan_thumb.gif\",\"value\":\"[瀑布汗]\",\"picid\":\"\"},{\"phrase\":\"[你没事吧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/cat_nimeishiba_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/cat_nimeishiba_thumb.gif\",\"value\":\"[你没事吧]\",\"picid\":\"\"},{\"phrase\":\"[内牛满面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/cat_neiniumanmian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/cat_neiniumanmian_thumb.gif\",\"value\":\"[内牛满面]\",\"picid\":\"\"},{\"phrase\":\"[没听见]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/cat_meitingjian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/cat_meitingjian_thumb.gif\",\"value\":\"[没听见]\",\"picid\":\"\"},{\"phrase\":\"[哭死啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/cat_kusila_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/cat_kusila_thumb.gif\",\"value\":\"[哭死啦]\",\"picid\":\"\"},{\"phrase\":\"[囧汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/cat_jionghan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/cat_jionghan_thumb.gif\",\"value\":\"[囧汗]\",\"picid\":\"\"},{\"phrase\":\"[惊恐中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/cat_jingkongzhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/cat_jingkongzhong_thumb.gif\",\"value\":\"[惊恐中]\",\"picid\":\"\"},{\"phrase\":\"[混乱中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/cat_hunluanzhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/cat_hunluanzhong_thumb.gif\",\"value\":\"[混乱中]\",\"picid\":\"\"},{\"phrase\":\"[花痴闪闪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/cat_huachishanshan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/cat_huachishanshan_thumb.gif\",\"value\":\"[花痴闪闪]\",\"picid\":\"\"},{\"phrase\":\"[嘿嘿嘿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/cat_heiheihei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/cat_heiheihei_thumb.gif\",\"value\":\"[嘿嘿嘿]\",\"picid\":\"\"},{\"phrase\":\"[哈哈哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/cat_hahaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/cat_hahaha_thumb.gif\",\"value\":\"[哈哈哈哈]\",\"picid\":\"\"},{\"phrase\":\"[干笑中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/cat_ganxiaozhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/cat_ganxiaozhong_thumb.gif\",\"value\":\"[干笑中]\",\"picid\":\"\"},{\"phrase\":\"[恶心死]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/cat_exinsi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/cat_exinsi_thumb.gif\",\"value\":\"[恶心死]\",\"picid\":\"\"},{\"phrase\":\"[嘟嘟嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/cat_duduzui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/cat_duduzui_thumb.gif\",\"value\":\"[嘟嘟嘴]\",\"picid\":\"\"},{\"phrase\":\"[大怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/cat_danu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/cat_danu_thumb.gif\",\"value\":\"[大怒]\",\"picid\":\"\"},{\"phrase\":\"[大惊失色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/cat_dajingshise_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/cat_dajingshise_thumb.gif\",\"value\":\"[大惊失色]\",\"picid\":\"\"},{\"phrase\":\"[呆呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/cat_daidai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/cat_daidai_thumb.gif\",\"value\":\"[呆呆]\",\"picid\":\"\"},{\"phrase\":\"[搭错线]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/cat_dacuoxian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/cat_dacuoxian_thumb.gif\",\"value\":\"[搭错线]\",\"picid\":\"\"},{\"phrase\":\"[鼻涕虫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/cat_bitichong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/15/cat_bitichong_thumb.gif\",\"value\":\"[鼻涕虫]\",\"picid\":\"\"},{\"phrase\":\"[暴雨汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/cat_baoyuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/cat_baoyuhan_thumb.gif\",\"value\":\"[暴雨汗]\",\"picid\":\"\"},{\"phrase\":\"[啊呜啊呜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cat_awuawu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/cat_awuawu_thumb.gif\",\"value\":\"[啊呜啊呜]\",\"picid\":\"\"},{\"phrase\":\"[哇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/cat_ai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/cat_ai_thumb.gif\",\"value\":\"[哇]\",\"picid\":\"\"},{\"phrase\":\"[爱爱爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/cat_aiaiai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"懒猫猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/cat_aiaiai_thumb.gif\",\"value\":\"[爱爱爱]\",\"picid\":\"\"},{\"phrase\":\"[bed蹬腿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/brddengtui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/brddengtui_thumb.gif\",\"value\":\"[bed蹬腿]\",\"picid\":\"\"},{\"phrase\":\"[bed弹跳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/brdtantiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/brdtantiao_thumb.gif\",\"value\":\"[bed弹跳]\",\"picid\":\"\"},{\"phrase\":\"[bed扯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/brdche_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/brdche_thumb.gif\",\"value\":\"[bed扯]\",\"picid\":\"\"},{\"phrase\":\"[bed凌乱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/brdlingluan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/brdlingluan_thumb.gif\",\"value\":\"[bed凌乱]\",\"picid\":\"\"},{\"phrase\":\"[bed奔跑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/brdbenpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/brdbenpao_thumb.gif\",\"value\":\"[bed奔跑]\",\"picid\":\"\"},{\"phrase\":\"[bed仰卧起坐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/brdyangwoqizuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/brdyangwoqizuo_thumb.gif\",\"value\":\"[bed仰卧起坐]\",\"picid\":\"\"},{\"phrase\":\"[bed出浴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/brdchuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/brdchuyu_thumb.gif\",\"value\":\"[bed出浴]\",\"picid\":\"\"},{\"phrase\":\"[bed练腰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/brdlianyao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/brdlianyao_thumb.gif\",\"value\":\"[bed练腰]\",\"picid\":\"\"},{\"phrase\":\"[bed皮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/brdpi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/brdpi_thumb.gif\",\"value\":\"[bed皮]\",\"picid\":\"\"},{\"phrase\":\"[bed挠痒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/brdnaoyang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/brdnaoyang_thumb.gif\",\"value\":\"[bed挠痒]\",\"picid\":\"\"},{\"phrase\":\"[bed啦啦啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/brdlalala_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/brdlalala_thumb.gif\",\"value\":\"[bed啦啦啦]\",\"picid\":\"\"},{\"phrase\":\"[bed举哑铃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/brdjuyaling_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/brdjuyaling_thumb.gif\",\"value\":\"[bed举哑铃]\",\"picid\":\"\"},{\"phrase\":\"[bed飘忽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/brdpiaohu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/brdpiaohu_thumb.gif\",\"value\":\"[bed飘忽]\",\"picid\":\"\"},{\"phrase\":\"[bed拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/brdpaishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/brdpaishou_thumb.gif\",\"value\":\"[bed拍手]\",\"picid\":\"\"},{\"phrase\":\"[bed嘿哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/brdheiha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/brdheiha_thumb.gif\",\"value\":\"[bed嘿哈]\",\"picid\":\"\"},{\"phrase\":\"[bed踏步]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/brdtabu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/brdtabu_thumb.gif\",\"value\":\"[bed踏步]\",\"picid\":\"\"},{\"phrase\":\"[bed揉眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/brdrouyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/brdrouyan_thumb.gif\",\"value\":\"[bed揉眼]\",\"picid\":\"\"},{\"phrase\":\"[bed转圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/brdzhuanquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/brdzhuanquan_thumb.gif\",\"value\":\"[bed转圈]\",\"picid\":\"\"},{\"phrase\":\"[bed飞吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/brdfeiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/brdfeiwen_thumb.gif\",\"value\":\"[bed飞吻]\",\"picid\":\"\"},{\"phrase\":\"[bed跳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/brdtiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/brdtiao_thumb.gif\",\"value\":\"[bed跳]\",\"picid\":\"\"},{\"phrase\":\"[bed巴掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/brdbazhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/brdbazhang_thumb.gif\",\"value\":\"[bed巴掌]\",\"picid\":\"\"},{\"phrase\":\"[bed撒娇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/brdsajiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/brdsajiao_thumb.gif\",\"value\":\"[bed撒娇]\",\"picid\":\"\"},{\"phrase\":\"[bed拍脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/brdpailian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/brdpailian_thumb.gif\",\"value\":\"[bed拍脸]\",\"picid\":\"\"},{\"phrase\":\"[bed好饱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/brdhaobao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/brdhaobao_thumb.gif\",\"value\":\"[bed好饱]\",\"picid\":\"\"},{\"phrase\":\"[bed跑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/brdpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/brdpao_thumb.gif\",\"value\":\"[bed跑]\",\"picid\":\"\"},{\"phrase\":\"[bed兴奋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/brdxingfen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/brdxingfen_thumb.gif\",\"value\":\"[bed兴奋]\",\"picid\":\"\"},{\"phrase\":\"[brd新]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/brdxinlongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/82/brdxinlongnian_thumb.gif\",\"value\":\"[brd新]\",\"picid\":\"\"},{\"phrase\":\"[brd年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/brdnianlongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/brdnianlongnian_thumb.gif\",\"value\":\"[brd年]\",\"picid\":\"\"},{\"phrase\":\"[brd拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/brdlongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/brdlongnian_thumb.gif\",\"value\":\"[brd拜年]\",\"picid\":\"\"},{\"phrase\":\"[brd谨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/brdjinlongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/brdjinlongnian_thumb.gif\",\"value\":\"[brd谨]\",\"picid\":\"\"},{\"phrase\":\"[brd贺]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/brdhelongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"彼尔德\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/brdhelongnian_thumb.gif\",\"value\":\"[brd贺]\",\"picid\":\"\"},{\"phrase\":\"[芒果点赞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/mango_12_thumb.gif\",\"value\":\"[芒果点赞]\",\"picid\":\"\"},{\"phrase\":\"[雾]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/w_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/w_thumb.gif\",\"value\":\"[雾]\",\"picid\":\"\"},{\"phrase\":\"[台风]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/tf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/tf_thumb.gif\",\"value\":\"[台风]\",\"picid\":\"\"},{\"phrase\":\"[沙尘暴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/sc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/sc_thumb.gif\",\"value\":\"[沙尘暴]\",\"picid\":\"\"},{\"phrase\":\"[晴转多云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/qzdy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/qzdy_thumb.gif\",\"value\":\"[晴转多云]\",\"picid\":\"\"},{\"phrase\":\"[流星]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/lx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/lx_thumb.gif\",\"value\":\"[流星]\",\"picid\":\"\"},{\"phrase\":\"[龙卷风]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/ljf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/ljf_thumb.gif\",\"value\":\"[龙卷风]\",\"picid\":\"\"},{\"phrase\":\"[洪水]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/hs2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/hs2_thumb.gif\",\"value\":\"[洪水]\",\"picid\":\"\"},{\"phrase\":\"[风]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/gf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/gf_thumb.gif\",\"value\":\"[风]\",\"picid\":\"\"},{\"phrase\":\"[多云转晴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/dyzq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/dyzq_thumb.gif\",\"value\":\"[多云转晴]\",\"picid\":\"\"},{\"phrase\":\"[彩虹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/ch_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/ch_thumb.gif\",\"value\":\"[彩虹]\",\"picid\":\"\"},{\"phrase\":\"[冰雹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/bb2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/bb2_thumb.gif\",\"value\":\"[冰雹]\",\"picid\":\"\"},{\"phrase\":\"[微风]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/wind_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/wind_thumb.gif\",\"value\":\"[微风]\",\"picid\":\"\"},{\"phrase\":\"[阳光]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/sunny_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/sunny_thumb.gif\",\"value\":\"[阳光]\",\"picid\":\"\"},{\"phrase\":\"[雪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/snow_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/snow_thumb.gif\",\"value\":\"[雪]\",\"picid\":\"\"},{\"phrase\":\"[闪电]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/sh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/sh_thumb.gif\",\"value\":\"[闪电]\",\"picid\":\"\"},{\"phrase\":\"[下雨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/rain.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/rain.gif\",\"value\":\"[下雨]\",\"picid\":\"\"},{\"phrase\":\"[阴天]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/dark_org.gif\",\"hot\":false,\"common\":false,\"category\":\"天气\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/dark_thumb.gif\",\"value\":\"[阴天]\",\"picid\":\"\"},{\"phrase\":\"[真心英雄陈学冬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/zxyxchenxuedong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/zxyxchenxuedong_thumb.gif\",\"value\":\"[真心英雄陈学冬]\",\"picid\":\"\"},{\"phrase\":\"[真心英雄张杰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/zxyxwanzi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/zxyxwanzi_thumb.gif\",\"value\":\"[真心英雄张杰]\",\"picid\":\"\"},{\"phrase\":\"[糖宝惊呆了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/hqgtangbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/hqgtangbao_thumb.gif\",\"value\":\"[糖宝惊呆了]\",\"picid\":\"\"},{\"phrase\":\"[夏天公主]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bbqnxiatian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/bbqnxiatian_thumb.gif\",\"value\":\"[夏天公主]\",\"picid\":\"\"},{\"phrase\":\"[萌娃大竣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/bbqnmengwadajun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/bbqnmengwadajun_thumb.gif\",\"value\":\"[萌娃大竣]\",\"picid\":\"\"},{\"phrase\":\"[真心英雄佟大为]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/zxyxtongdawei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/zxyxtongdawei_thumb.gif\",\"value\":\"[真心英雄佟大为]\",\"picid\":\"\"},{\"phrase\":\"[痴情轩轩]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/bbqnxuanxuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/bbqnxuanxuan_thumb.gif\",\"value\":\"[痴情轩轩]\",\"picid\":\"\"},{\"phrase\":\"[康康保佑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/bbqnkkbaoyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/bbqnkkbaoyou_thumb.gif\",\"value\":\"[康康保佑]\",\"picid\":\"\"},{\"phrase\":\"[诺一粗来嗨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/bbqnchulaihai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/bbqnchulaihai_thumb.gif\",\"value\":\"[诺一粗来嗨]\",\"picid\":\"\"},{\"phrase\":\"[小骨最萌了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/huaqianguxiaogu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/huaqianguxiaogu_thumb.gif\",\"value\":\"[小骨最萌了]\",\"picid\":\"\"},{\"phrase\":\"[最美杀阡陌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/huaqiangusqm_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/huaqiangusqm_thumb.gif\",\"value\":\"[最美杀阡陌]\",\"picid\":\"\"},{\"phrase\":\"[尊上么么哒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/hqgzunshangv1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/hqgzunshangv1_thumb.gif\",\"value\":\"[尊上么么哒]\",\"picid\":\"\"},{\"phrase\":\"[七夕快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/qixi2015_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/qixi2015_thumb.gif\",\"value\":\"[七夕快乐]\",\"picid\":\"\"},{\"phrase\":\"[看跌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/kandiev2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/kandiev2_thumb.gif\",\"value\":\"[看跌]\",\"picid\":\"\"},{\"phrase\":\"[看涨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/kanzhangv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/kanzhangv2_thumb.gif\",\"value\":\"[看涨]\",\"picid\":\"\"},{\"phrase\":\"[支持红方]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/htzchongfang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/htzchongfang_thumb.gif\",\"value\":\"[支持红方]\",\"picid\":\"\"},{\"phrase\":\"[国旗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/flag_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/flag_thumb.gif\",\"value\":\"[国旗]\",\"picid\":\"\"},{\"phrase\":\"[支持蓝方]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/htzclanfang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/htzclanfang_thumb.gif\",\"value\":\"[支持蓝方]\",\"picid\":\"\"},{\"phrase\":\"[国庆65周年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/gqzn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/gqzn_thumb.gif\",\"value\":\"[国庆65周年]\",\"picid\":\"\"},{\"phrase\":\"[圣诞铃铛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/chrisbell_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/chrisbell_thumb.gif\",\"value\":\"[圣诞铃铛]\",\"picid\":\"\"},{\"phrase\":\"[鞭炮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/../23/bianpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/../23/bianpao_thumb.gif\",\"value\":\"[鞭炮]\",\"picid\":\"\"},{\"phrase\":\"[红包飞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/../e0/hongbao1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/../e0/hongbao1_thumb.gif\",\"value\":\"[红包飞]\",\"picid\":\"\"},{\"phrase\":\"[围脖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/weijin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/weijin_thumb.gif\",\"value\":\"[围脖]\",\"picid\":\"\"},{\"phrase\":\"[温暖帽子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/wennuanmaozi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/wennuanmaozi_thumb.gif\",\"value\":\"[温暖帽子]\",\"picid\":\"\"},{\"phrase\":\"[手套]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/shoutao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/shoutao_thumb.gif\",\"value\":\"[手套]\",\"picid\":\"\"},{\"phrase\":\"[红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/hongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/hongbao_thumb.gif\",\"value\":\"[红包]\",\"picid\":\"\"},{\"phrase\":\"[喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/xi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/xi_thumb.gif\",\"value\":\"[喜]\",\"picid\":\"\"},{\"phrase\":\"[礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/liwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/liwu_thumb.gif\",\"value\":\"[礼物]\",\"picid\":\"\"},{\"phrase\":\"[钻戒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/r_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/r_thumb.gif\",\"value\":\"[钻戒]\",\"picid\":\"\"},{\"phrase\":\"[钻石]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/diamond_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/diamond_thumb.gif\",\"value\":\"[钻石]\",\"picid\":\"\"},{\"phrase\":\"[大巴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/dynamicbus_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/dynamicbus_thumb.gif\",\"value\":\"[大巴]\",\"picid\":\"\"},{\"phrase\":\"[飞机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/travel_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/travel_thumb.gif\",\"value\":\"[飞机]\",\"picid\":\"\"},{\"phrase\":\"[自行车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/zxc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/zxc_thumb.gif\",\"value\":\"[自行车]\",\"picid\":\"\"},{\"phrase\":\"[汽车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/jc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/jc_thumb.gif\",\"value\":\"[汽车]\",\"picid\":\"\"},{\"phrase\":\"[手机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/sj2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/sj2_thumb.gif\",\"value\":\"[手机]\",\"picid\":\"\"},{\"phrase\":\"[照相机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/camera_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/camera_thumb.gif\",\"value\":\"[照相机]\",\"picid\":\"\"},{\"phrase\":\"[药]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/y_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/y_thumb.gif\",\"value\":\"[药]\",\"picid\":\"\"},{\"phrase\":\"[电脑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/dn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/dn_thumb.gif\",\"value\":\"[电脑]\",\"picid\":\"\"},{\"phrase\":\"[手纸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/sz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/sz_thumb.gif\",\"value\":\"[手纸]\",\"picid\":\"\"},{\"phrase\":\"[落叶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/yellowMood_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/yellowMood_thumb.gif\",\"value\":\"[落叶]\",\"picid\":\"\"},{\"phrase\":\"[圣诞树]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/christree_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/christree_thumb.gif\",\"value\":\"[圣诞树]\",\"picid\":\"\"},{\"phrase\":\"[圣诞帽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/chrishat_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/chrishat_thumb.gif\",\"value\":\"[圣诞帽]\",\"picid\":\"\"},{\"phrase\":\"[圣诞老人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/chrisfather_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/chrisfather_thumb.gif\",\"value\":\"[圣诞老人]\",\"picid\":\"\"},{\"phrase\":\"[圣诞袜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/chrisocks_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/chrisocks_thumb.gif\",\"value\":\"[圣诞袜]\",\"picid\":\"\"},{\"phrase\":\"[牛郎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/qixi2016_niulang2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/qixi2016_niulang2_thumb.gif\",\"value\":\"[牛郎]\",\"picid\":\"\"},{\"phrase\":\"[织女]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/qixi2016_zhinv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/qixi2016_zhinv2_thumb.gif\",\"value\":\"[织女]\",\"picid\":\"\"},{\"phrase\":\"[星星]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/allstar_dp_org.png\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/allstar_dp_thumb.png\",\"value\":\"[星星]\",\"picid\":\"\"},{\"phrase\":\"[半星]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/halfstar_dp_org.png\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/halfstar_dp_thumb.png\",\"value\":\"[半星]\",\"picid\":\"\"},{\"phrase\":\"[空星]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/blankstar_dp_org.png\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/blankstar_dp_thumb.png\",\"value\":\"[空星]\",\"picid\":\"\"},{\"phrase\":\"[发红包啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/hb_fahongbao2016_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/hb_fahongbao2016_thumb.gif\",\"value\":\"[发红包啦]\",\"picid\":\"\"},{\"phrase\":\"[抢到啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/hb_qiangdao2016_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/hb_qiangdao2016_thumb.gif\",\"value\":\"[抢到啦]\",\"picid\":\"\"},{\"phrase\":\"[火华社长美男子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/bbqnshezhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/bbqnshezhang_thumb.gif\",\"value\":\"[火华社长美男子]\",\"picid\":\"\"},{\"phrase\":\"[小公主珊珊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/bbqnxiaogongzhushanshan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/bbqnxiaogongzhushanshan_thumb.gif\",\"value\":\"[小公主珊珊]\",\"picid\":\"\"},{\"phrase\":\"[弟弟皓皓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bbqndidihaohao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bbqndidihaohao_thumb.gif\",\"value\":\"[弟弟皓皓]\",\"picid\":\"\"},{\"phrase\":\"[可爱霓娜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/bbqnnina_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/bbqnnina_thumb.gif\",\"value\":\"[可爱霓娜]\",\"picid\":\"\"},{\"phrase\":\"[你的宫铃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/ndgl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/ndgl_thumb.gif\",\"value\":\"[你的宫铃]\",\"picid\":\"\"},{\"phrase\":\"[父亲节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/fuqinjie2015_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/fuqinjie2015_org.gif\",\"value\":\"[父亲节]\",\"picid\":\"\"},{\"phrase\":\"[话筒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/huatongv2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/huatongv2_thumb.gif\",\"value\":\"[话筒]\",\"picid\":\"\"},{\"phrase\":\"[马到成功]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/mdcg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/mdcg_thumb.gif\",\"value\":\"[马到成功]\",\"picid\":\"\"},{\"phrase\":\"[浪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/lang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/lang_thumb.gif\",\"value\":\"[浪]\",\"picid\":\"\"},{\"phrase\":\"[织女2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/zv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/zv_thumb.gif\",\"value\":\"[织女2]\",\"picid\":\"\"},{\"phrase\":\"[牛郎2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/nl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/nl_thumb.gif\",\"value\":\"[牛郎2]\",\"picid\":\"\"},{\"phrase\":\"[荷兰队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/goNederland_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/goNederland_thumb.gif\",\"value\":\"[荷兰队加油]\",\"picid\":\"\"},{\"phrase\":\"[德国队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/goGermany_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/goGermany_thumb.gif\",\"value\":\"[德国队加油]\",\"picid\":\"\"},{\"phrase\":\"[法国队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/goFrance_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/goFrance_thumb.gif\",\"value\":\"[法国队加油]\",\"picid\":\"\"},{\"phrase\":\"[哥斯达黎加队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/goCostaRica_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/goCostaRica_thumb.gif\",\"value\":\"[哥斯达黎加队加油]\",\"picid\":\"\"},{\"phrase\":\"[哥伦比亚队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/goColombia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/goColombia_thumb.gif\",\"value\":\"[哥伦比亚队加油]\",\"picid\":\"\"},{\"phrase\":\"[巴西队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/goBrazil_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/goBrazil_thumb.gif\",\"value\":\"[巴西队加油]\",\"picid\":\"\"},{\"phrase\":\"[比利时队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/goBelgium_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/goBelgium_thumb.gif\",\"value\":\"[比利时队加油]\",\"picid\":\"\"},{\"phrase\":\"[阿根廷队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/goArgentina_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/goArgentina_thumb.gif\",\"value\":\"[阿根廷队加油]\",\"picid\":\"\"},{\"phrase\":\"[我爱世界杯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/wasjb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/wasjb_thumb.gif\",\"value\":\"[我爱世界杯]\",\"picid\":\"\"},{\"phrase\":\"[康乃馨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/muqinjie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/muqinjie_thumb.gif\",\"value\":\"[康乃馨]\",\"picid\":\"\"},{\"phrase\":\"[老妈我爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/mothersday_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/mothersday_thumb.gif\",\"value\":\"[老妈我爱你]\",\"picid\":\"\"},{\"phrase\":\"[母亲节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/carnation_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/carnation_thumb.gif\",\"value\":\"[母亲节]\",\"picid\":\"\"},{\"phrase\":\"[随手拍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/suishoupai2014_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/suishoupai2014_thumb.gif\",\"value\":\"[随手拍]\",\"picid\":\"\"},{\"phrase\":\"[青啤鸿运当头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_thumb.gif\",\"value\":\"[青啤鸿运当头]\",\"picid\":\"\"},{\"phrase\":\"[鸿运当头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/hongyun_thumb.gif\",\"value\":\"[鸿运当头]\",\"picid\":\"\"},{\"phrase\":\"[让红包飞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/hongbaofei2014_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/hongbaofei2014_thumb.gif\",\"value\":\"[让红包飞]\",\"picid\":\"\"},{\"phrase\":\"[Lavida生活]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/lavida_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/lavida_thumb.gif\",\"value\":\"[Lavida生活]\",\"picid\":\"\"},{\"phrase\":\"[劲能样]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/jingnengyang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/jingnengyang_thumb.gif\",\"value\":\"[劲能样]\",\"picid\":\"\"},{\"phrase\":\"[微博益起来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/yiqilai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/yiqilai_thumb.gif\",\"value\":\"[微博益起来]\",\"picid\":\"\"},{\"phrase\":\"[玩去啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/weitrip_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/weitrip_thumb.gif\",\"value\":\"[玩去啦]\",\"picid\":\"\"},{\"phrase\":\"[bh彪悍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/lenovebiaoan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/59/lenovebiaoan_thumb.gif\",\"value\":\"[bh彪悍]\",\"picid\":\"\"},{\"phrase\":\"[offthewall]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/newvans_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/newvans_thumb.gif\",\"value\":\"[offthewall]\",\"picid\":\"\"},{\"phrase\":\"[助力山东]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/goshandong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/goshandong_thumb.gif\",\"value\":\"[助力山东]\",\"picid\":\"\"},{\"phrase\":\"[助力广东]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/goguangdong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/goguangdong_thumb.gif\",\"value\":\"[助力广东]\",\"picid\":\"\"},{\"phrase\":\"[K兵加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/konca_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/konca_thumb.gif\",\"value\":\"[K兵加油]\",\"picid\":\"\"},{\"phrase\":\"[起亚律动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/kiago_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/kiago_thumb.gif\",\"value\":\"[起亚律动]\",\"picid\":\"\"},{\"phrase\":\"[草泥马]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/shenshou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/shenshou_thumb.gif\",\"value\":\"[草泥马]\",\"picid\":\"\"},{\"phrase\":\"[微博三周年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/weibo3yr_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/weibo3yr_thumb.gif\",\"value\":\"[微博三周年]\",\"picid\":\"\"},{\"phrase\":\"[皇小冠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/weibovip_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/weibovip_thumb.gif\",\"value\":\"[皇小冠]\",\"picid\":\"\"},{\"phrase\":\"[达人一周年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/darenanniversary_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/darenanniversary_thumb.gif\",\"value\":\"[达人一周年]\",\"picid\":\"\"},{\"phrase\":\"[神龙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/longniao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/longniao_thumb.gif\",\"value\":\"[神龙]\",\"picid\":\"\"},{\"phrase\":\"[龙蛋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/longdan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/longdan_thumb.gif\",\"value\":\"[龙蛋]\",\"picid\":\"\"},{\"phrase\":\"[驯鹿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/xunlu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/xunlu_thumb.gif\",\"value\":\"[驯鹿]\",\"picid\":\"\"},{\"phrase\":\"[上海志愿者]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/shfabu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/shfabu_thumb.gif\",\"value\":\"[上海志愿者]\",\"picid\":\"\"},{\"phrase\":\"[音乐盒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/yinyuehe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/yinyuehe_thumb.gif\",\"value\":\"[音乐盒]\",\"picid\":\"\"},{\"phrase\":\"[首发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/shoufa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/shoufa_thumb.gif\",\"value\":\"[首发]\",\"picid\":\"\"},{\"phrase\":\"[悼念乔布斯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/Jobs_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/Jobs_thumb.gif\",\"value\":\"[悼念乔布斯]\",\"picid\":\"\"},{\"phrase\":\"[iPhone]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/iPhone_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/iPhone_thumb.gif\",\"value\":\"[iPhone]\",\"picid\":\"\"},{\"phrase\":\"[微博蛋糕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/weibo2zhounian_org.png\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/weibo2zhounian_thumb.png\",\"value\":\"[微博蛋糕]\",\"picid\":\"\"},{\"phrase\":\"[图片]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/tupianimage_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/tupianimage_thumb.gif\",\"value\":\"[图片]\",\"picid\":\"\"},{\"phrase\":\"[植树节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/zhishujie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/56/zhishujie_thumb.gif\",\"value\":\"[植树节]\",\"picid\":\"\"},{\"phrase\":\"[粉蛋糕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/nycake_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bf/nycake_thumb.gif\",\"value\":\"[粉蛋糕]\",\"picid\":\"\"},{\"phrase\":\"[糖果]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/candy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/candy_thumb.gif\",\"value\":\"[糖果]\",\"picid\":\"\"},{\"phrase\":\"[万圣节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/nanguatou2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/nanguatou2_thumb.gif\",\"value\":\"[万圣节]\",\"picid\":\"\"},{\"phrase\":\"[粉红丝带]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/pink_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/pink_thumb.gif\",\"value\":\"[粉红丝带]\",\"picid\":\"\"},{\"phrase\":\"[火炬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/hj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/hj_thumb.gif\",\"value\":\"[火炬]\",\"picid\":\"\"},{\"phrase\":\"[酒壶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/wine_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/wine_thumb.gif\",\"value\":\"[酒壶]\",\"picid\":\"\"},{\"phrase\":\"[月饼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/mooncake3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/mooncake3_thumb.gif\",\"value\":\"[月饼]\",\"picid\":\"\"},{\"phrase\":\"[满月]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/moon1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/moon1_thumb.gif\",\"value\":\"[满月]\",\"picid\":\"\"},{\"phrase\":\"[黑板]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/blackboard_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/blackboard_thumb.gif\",\"value\":\"[黑板]\",\"picid\":\"\"},{\"phrase\":\"[巧克力]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/qkl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b1/qkl_thumb.gif\",\"value\":\"[巧克力]\",\"picid\":\"\"},{\"phrase\":\"[脚印]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/jy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/jy_thumb.gif\",\"value\":\"[脚印]\",\"picid\":\"\"},{\"phrase\":\"[酒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/j2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/j2_thumb.gif\",\"value\":\"[酒]\",\"picid\":\"\"},{\"phrase\":\"[狗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/g_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/g_thumb.gif\",\"value\":\"[狗]\",\"picid\":\"\"},{\"phrase\":\"[工作]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gz3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gz3_thumb.gif\",\"value\":\"[工作]\",\"picid\":\"\"},{\"phrase\":\"[档案]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/gz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/gz2_thumb.gif\",\"value\":\"[档案]\",\"picid\":\"\"},{\"phrase\":\"[叶子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/green_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/green_thumb.gif\",\"value\":\"[叶子]\",\"picid\":\"\"},{\"phrase\":\"[钢琴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gq_thumb.gif\",\"value\":\"[钢琴]\",\"picid\":\"\"},{\"phrase\":\"[印迹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/foot_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/foot_thumb.gif\",\"value\":\"[印迹]\",\"picid\":\"\"},{\"phrase\":\"[钟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/clock_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/clock_thumb.gif\",\"value\":\"[钟]\",\"picid\":\"\"},{\"phrase\":\"[茶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/cha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/cha_thumb.gif\",\"value\":\"[茶]\",\"picid\":\"\"},{\"phrase\":\"[西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/watermelon.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/watermelon.gif\",\"value\":\"[西瓜]\",\"picid\":\"\"},{\"phrase\":\"[雨伞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/umb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/umb_thumb.gif\",\"value\":\"[雨伞]\",\"picid\":\"\"},{\"phrase\":\"[电视机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/tv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/tv_thumb.gif\",\"value\":\"[电视机]\",\"picid\":\"\"},{\"phrase\":\"[电话]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/tel_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/tel_thumb.gif\",\"value\":\"[电话]\",\"picid\":\"\"},{\"phrase\":\"[太阳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/sun.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/sun.gif\",\"value\":\"[太阳]\",\"picid\":\"\"},{\"phrase\":\"[星]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/star_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/star_thumb.gif\",\"value\":\"[星]\",\"picid\":\"\"},{\"phrase\":\"[哨子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/shao.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/shao.gif\",\"value\":\"[哨子]\",\"picid\":\"\"},{\"phrase\":\"[音乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/music_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/music_thumb.gif\",\"value\":\"[音乐]\",\"picid\":\"\"},{\"phrase\":\"[电影]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/movie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/movie_thumb.gif\",\"value\":\"[电影]\",\"picid\":\"\"},{\"phrase\":\"[月亮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/moon.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/moon.gif\",\"value\":\"[月亮]\",\"picid\":\"\"},{\"phrase\":\"[唱歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/ktv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/ktv_thumb.gif\",\"value\":\"[唱歌]\",\"picid\":\"\"},{\"phrase\":\"[冰棍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/ice.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/ice.gif\",\"value\":\"[冰棍]\",\"picid\":\"\"},{\"phrase\":\"[房子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/house_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/house_thumb.gif\",\"value\":\"[房子]\",\"picid\":\"\"},{\"phrase\":\"[帽子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/hat_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/25/hat_thumb.gif\",\"value\":\"[帽子]\",\"picid\":\"\"},{\"phrase\":\"[足球]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/football.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/football.gif\",\"value\":\"[足球]\",\"picid\":\"\"},{\"phrase\":\"[鲜花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/flower_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/flower_thumb.gif\",\"value\":\"[鲜花]\",\"picid\":\"\"},{\"phrase\":\"[花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/flower.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6c/flower.gif\",\"value\":\"[花]\",\"picid\":\"\"},{\"phrase\":\"[风扇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/fan.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/fan.gif\",\"value\":\"[风扇]\",\"picid\":\"\"},{\"phrase\":\"[干杯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/cheer.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/cheer.gif\",\"value\":\"[干杯]\",\"picid\":\"\"},{\"phrase\":\"[咖啡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/cafe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"休闲\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/cafe_thumb.gif\",\"value\":\"[咖啡]\",\"picid\":\"\"},{\"phrase\":\"[ppb生日快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/ppbshengrikuaile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/ppbshengrikuaile_thumb.gif\",\"value\":\"[ppb生日快乐]\",\"picid\":\"\"},{\"phrase\":\"[ppb愚人节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/ppbfool_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/ppbfool_thumb.gif\",\"value\":\"[ppb愚人节]\",\"picid\":\"\"},{\"phrase\":\"[ppb圣诞圣衣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/ppbshengyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/ppbshengyi_thumb.gif\",\"value\":\"[ppb圣诞圣衣]\",\"picid\":\"\"},{\"phrase\":\"[ppb叮叮当]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/ppbddd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/ppbddd_thumb.gif\",\"value\":\"[ppb叮叮当]\",\"picid\":\"\"},{\"phrase\":\"[ppb早安]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/ppbzaoan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/ppbzaoan_thumb.gif\",\"value\":\"[ppb早安]\",\"picid\":\"\"},{\"phrase\":\"[ppb洗澡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/ppbxizao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/ppbxizao_thumb.gif\",\"value\":\"[ppb洗澡]\",\"picid\":\"\"},{\"phrase\":\"[ppb脱光]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/ppbtuoguang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/ppbtuoguang_thumb.gif\",\"value\":\"[ppb脱光]\",\"picid\":\"\"},{\"phrase\":\"[ppb喷血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/ppbpengxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/ppbpengxue_thumb.gif\",\"value\":\"[ppb喷血]\",\"picid\":\"\"},{\"phrase\":\"[ppb捏捏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/ppbnienie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/ppbnienie_thumb.gif\",\"value\":\"[ppb捏捏]\",\"picid\":\"\"},{\"phrase\":\"[ppb裸走]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ppbluozou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/ppbluozou_thumb.gif\",\"value\":\"[ppb裸走]\",\"picid\":\"\"},{\"phrase\":\"[ppb裸舞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/ppbluowu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/ppbluowu_thumb.gif\",\"value\":\"[ppb裸舞]\",\"picid\":\"\"},{\"phrase\":\"[ppb路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/ppbluguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/ppbluguo_thumb.gif\",\"value\":\"[ppb路过]\",\"picid\":\"\"},{\"phrase\":\"[ppb激动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/ppbjidong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/ppbjidong_thumb.gif\",\"value\":\"[ppb激动]\",\"picid\":\"\"},{\"phrase\":\"[ppb奸笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/ppbjianxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/ppbjianxiao_thumb.gif\",\"value\":\"[ppb奸笑]\",\"picid\":\"\"},{\"phrase\":\"[ppb鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbguzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbguzhang_thumb.gif\",\"value\":\"[ppb鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[ppbbibi]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/ppbbibi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/ppbbibi_thumb.gif\",\"value\":\"[ppbbibi]\",\"picid\":\"\"},{\"phrase\":\"[ppb靠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/db/ppbkao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/db/ppbkao_thumb.gif\",\"value\":\"[ppb靠]\",\"picid\":\"\"},{\"phrase\":\"[ppb发狂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/ppbfakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/ppbfakuang_thumb.gif\",\"value\":\"[ppb发狂]\",\"picid\":\"\"},{\"phrase\":\"[ppb困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/ppbkun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/ppbkun_thumb.gif\",\"value\":\"[ppb困]\",\"picid\":\"\"},{\"phrase\":\"[ppb啊哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/ppbahaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/ppbahaha_thumb.gif\",\"value\":\"[ppb啊哈哈]\",\"picid\":\"\"},{\"phrase\":\"[ppb僵尸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/ppbjiangshi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/ppbjiangshi_thumb.gif\",\"value\":\"[ppb僵尸]\",\"picid\":\"\"},{\"phrase\":\"[ppb甩嘴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/ppbshuaizui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/ppbshuaizui_thumb.gif\",\"value\":\"[ppb甩嘴]\",\"picid\":\"\"},{\"phrase\":\"[ppb囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/ppbjiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/ppbjiong_thumb.gif\",\"value\":\"[ppb囧]\",\"picid\":\"\"},{\"phrase\":\"[ppb去死]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/ppbqusi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/ppbqusi_thumb.gif\",\"value\":\"[ppb去死]\",\"picid\":\"\"},{\"phrase\":\"[ppb晴天霹雳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/ppbqingtianpili_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/ppbqingtianpili_thumb.gif\",\"value\":\"[ppb晴天霹雳]\",\"picid\":\"\"},{\"phrase\":\"[ppb啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/ppba_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/ppba_thumb.gif\",\"value\":\"[ppb啊]\",\"picid\":\"\"},{\"phrase\":\"[ppb大哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/ppbdaku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/ppbdaku_thumb.gif\",\"value\":\"[ppb大哭]\",\"picid\":\"\"},{\"phrase\":\"[ppb我砍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbwokan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/ppbwokan_thumb.gif\",\"value\":\"[ppb我砍]\",\"picid\":\"\"},{\"phrase\":\"[ppb扫射]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/ppbsaoshe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/ppbsaoshe_thumb.gif\",\"value\":\"[ppb扫射]\",\"picid\":\"\"},{\"phrase\":\"[ppb杀啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/ppbshaa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/ppbshaa_thumb.gif\",\"value\":\"[ppb杀啊]\",\"picid\":\"\"},{\"phrase\":\"[ppb啊呜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/ppbawu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/ppbawu_thumb.gif\",\"value\":\"[ppb啊呜]\",\"picid\":\"\"},{\"phrase\":\"[ppb蝙蝠侠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ppbbianfuxia_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/ppbbianfuxia_thumb.gif\",\"value\":\"[ppb蝙蝠侠]\",\"picid\":\"\"},{\"phrase\":\"[ppb滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/ppbgun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/ppbgun_thumb.gif\",\"value\":\"[ppb滚]\",\"picid\":\"\"},{\"phrase\":\"[ppb欢迎欢迎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/ppbhuanying_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/ppbhuanying_thumb.gif\",\"value\":\"[ppb欢迎欢迎]\",\"picid\":\"\"},{\"phrase\":\"[ppb狂吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/ppbkuangchi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/92/ppbkuangchi_thumb.gif\",\"value\":\"[ppb狂吃]\",\"picid\":\"\"},{\"phrase\":\"[ppb讨厌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ppbtaoyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/ppbtaoyan_thumb.gif\",\"value\":\"[ppb讨厌]\",\"picid\":\"\"},{\"phrase\":\"[ppb爱你哟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ppbainiyo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ppbainiyo_thumb.gif\",\"value\":\"[ppb爱你哟]\",\"picid\":\"\"},{\"phrase\":\"[ppb卖萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/ppbmaimeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"炮炮兵\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/ppbmaimeng_thumb.gif\",\"value\":\"[ppb卖萌]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊做面膜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/ayxzuomianmo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/ayxzuomianmo_thumb.gif\",\"value\":\"[哎呦熊做面膜]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊咒骂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/ayxzma_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/ayxzma_thumb.gif\",\"value\":\"[哎呦熊咒骂]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊震惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/ayxzhenjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/ayxzhenjing_thumb.gif\",\"value\":\"[哎呦熊震惊]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊yes]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/ayxyes_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/ayxyes_thumb.gif\",\"value\":\"[哎呦熊yes]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊掩面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/ayxyanmian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/ayxyanmian_thumb.gif\",\"value\":\"[哎呦熊掩面]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊乌鸦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/ayxwuya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/ayxwuya_thumb.gif\",\"value\":\"[哎呦熊乌鸦]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊无奈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/ayxwunai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/ayxwunai_thumb.gif\",\"value\":\"[哎呦熊无奈]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊晚安]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/ayxwanan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/ayxwanan_thumb.gif\",\"value\":\"[哎呦熊晚安]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊生日快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/ayxshengrikuaile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/ayxshengrikuaile_thumb.gif\",\"value\":\"[哎呦熊生日快乐]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊撒欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/ayxsahuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/ayxsahuan_thumb.gif\",\"value\":\"[哎呦熊撒欢]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊no]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/ayxno_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/ayxno_thumb.gif\",\"value\":\"[哎呦熊no]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/ayxluguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/ayxluguo_thumb.gif\",\"value\":\"[哎呦熊路过]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊流汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/ayxliuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/ayxliuhan_thumb.gif\",\"value\":\"[哎呦熊流汗]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊流鼻血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/ayxliubixue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/ayxliubixue_thumb.gif\",\"value\":\"[哎呦熊流鼻血]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊雷死]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/ayxleisi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/ayxleisi_thumb.gif\",\"value\":\"[哎呦熊雷死]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊泪奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ayxleiben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ayxleiben_thumb.gif\",\"value\":\"[哎呦熊泪奔]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊哭泣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ayxkuqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ayxkuqi_thumb.gif\",\"value\":\"[哎呦熊哭泣]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ayxkaixin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/ayxkaixin_thumb.gif\",\"value\":\"[哎呦熊开心]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊开饭咯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/ayxkaifanluo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/ayxkaifanluo_thumb.gif\",\"value\":\"[哎呦熊开饭咯]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊纠结]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/ayxjiujie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/ayxjiujie_thumb.gif\",\"value\":\"[哎呦熊纠结]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/ayxhaixiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/29/ayxhaixiu_thumb.gif\",\"value\":\"[哎呦熊害羞]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊鼓掌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/ayxguzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/ayxguzhang_thumb.gif\",\"value\":\"[哎呦熊鼓掌]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊感动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ayxgandong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ayxgandong_thumb.gif\",\"value\":\"[哎呦熊感动]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊浮云]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/ayxfuyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/ayxfuyun_thumb.gif\",\"value\":\"[哎呦熊浮云]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊飞吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ayxfeiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ayxfeiwen_thumb.gif\",\"value\":\"[哎呦熊飞吻]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊打招呼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/ayxdazhaohu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/ayxdazhaohu_thumb.gif\",\"value\":\"[哎呦熊打招呼]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊补妆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/ayxbuzhuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/ayxbuzhuang_thumb.gif\",\"value\":\"[哎呦熊补妆]\",\"picid\":\"\"},{\"phrase\":\"[哎呦熊崩溃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/ayxbenkui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哎呦熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/ayxbenkui_thumb.gif\",\"value\":\"[哎呦熊崩溃]\",\"picid\":\"\"},{\"phrase\":\"[km问号]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/km1wenhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/km1wenhao_thumb.gif\",\"value\":\"[km问号]\",\"picid\":\"\"},{\"phrase\":\"[km爱你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/km1aini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/km1aini_thumb.gif\",\"value\":\"[km爱你]\",\"picid\":\"\"},{\"phrase\":\"[km白块旋转]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/km1baikuaixuanzhuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8e/km1baikuaixuanzhuan_thumb.gif\",\"value\":\"[km白块旋转]\",\"picid\":\"\"},{\"phrase\":\"[km黑块旋转]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/km1heikuaixuanzhuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/km1heikuaixuanzhuan_thumb.gif\",\"value\":\"[km黑块旋转]\",\"picid\":\"\"},{\"phrase\":\"[km花痴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/km1huachi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/km1huachi_thumb.gif\",\"value\":\"[km花痴]\",\"picid\":\"\"},{\"phrase\":\"[km可爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/km1keai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/km1keai_thumb.gif\",\"value\":\"[km可爱]\",\"picid\":\"\"},{\"phrase\":\"[km切]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/km1qie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/km1qie_thumb.gif\",\"value\":\"[km切]\",\"picid\":\"\"},{\"phrase\":\"[km亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/km1qinqin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/km1qinqin_thumb.gif\",\"value\":\"[km亲亲]\",\"picid\":\"\"},{\"phrase\":\"[km亲亲白块]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/km1qinqinbaikuai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/km1qinqinbaikuai_thumb.gif\",\"value\":\"[km亲亲白块]\",\"picid\":\"\"},{\"phrase\":\"[km亲亲黑块]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/km1qinqinheikuai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/km1qinqinheikuai_thumb.gif\",\"value\":\"[km亲亲黑块]\",\"picid\":\"\"},{\"phrase\":\"[km挖鼻屎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/km1wabishi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/km1wabishi_thumb.gif\",\"value\":\"[km挖鼻屎]\",\"picid\":\"\"},{\"phrase\":\"[km哇哇哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/km1wawaku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/km1wawaku_thumb.gif\",\"value\":\"[km哇哇哭]\",\"picid\":\"\"},{\"phrase\":\"[km围观]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/km1weiguan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/km1weiguan_thumb.gif\",\"value\":\"[km围观]\",\"picid\":\"\"},{\"phrase\":\"[km委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/km1weiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/km1weiqu_thumb.gif\",\"value\":\"[km委屈]\",\"picid\":\"\"},{\"phrase\":\"[km羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/km1xiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/47/km1xiu_thumb.gif\",\"value\":\"[km羞]\",\"picid\":\"\"},{\"phrase\":\"[kmFL]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/kmFL_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/kmFL_thumb.gif\",\"value\":\"[kmFL]\",\"picid\":\"\"},{\"phrase\":\"[km侦探]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kmzhentan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kmzhentan_thumb.gif\",\"value\":\"[km侦探]\",\"picid\":\"\"},{\"phrase\":\"[km嘻嘻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/kmxixi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/kmxixi_thumb.gif\",\"value\":\"[km嘻嘻]\",\"picid\":\"\"},{\"phrase\":\"[km呜呜1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/kmwuwu1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/kmwuwu1_thumb.gif\",\"value\":\"[km呜呜1]\",\"picid\":\"\"},{\"phrase\":\"[km冷笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/kmlengxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/18/kmlengxiao_thumb.gif\",\"value\":\"[km冷笑]\",\"picid\":\"\"},{\"phrase\":\"[km邮件]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/kmyoujian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/kmyoujian_thumb.gif\",\"value\":\"[km邮件]\",\"picid\":\"\"},{\"phrase\":\"[km闹钟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/kmnaozhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/kmnaozhong_thumb.gif\",\"value\":\"[km闹钟]\",\"picid\":\"\"},{\"phrase\":\"[km哼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/kmheng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/kmheng_thumb.gif\",\"value\":\"[km哼]\",\"picid\":\"\"},{\"phrase\":\"[km无语]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/kmwuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/kmwuyu_thumb.gif\",\"value\":\"[km无语]\",\"picid\":\"\"},{\"phrase\":\"[km黑块不淡定]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/kmheikuaibudanding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/kmheikuaibudanding_thumb.gif\",\"value\":\"[km黑块不淡定]\",\"picid\":\"\"},{\"phrase\":\"[km害怕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kmhaipa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kmhaipa_thumb.gif\",\"value\":\"[km害怕]\",\"picid\":\"\"},{\"phrase\":\"[km呜呜88]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmwuwu88_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmwuwu88_thumb.gif\",\"value\":\"[km呜呜88]\",\"picid\":\"\"},{\"phrase\":\"[km透亮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/kmtouliang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/kmtouliang_thumb.gif\",\"value\":\"[km透亮]\",\"picid\":\"\"},{\"phrase\":\"[km唔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/kmwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/kmwu_thumb.gif\",\"value\":\"[km唔]\",\"picid\":\"\"},{\"phrase\":\"[km侠盗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/kmxiadao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/kmxiadao_thumb.gif\",\"value\":\"[km侠盗]\",\"picid\":\"\"},{\"phrase\":\"[km醉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kmzui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kmzui_thumb.gif\",\"value\":\"[km醉]\",\"picid\":\"\"},{\"phrase\":\"[km丽莎2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/kmlisha2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/kmlisha2_thumb.gif\",\"value\":\"[km丽莎2]\",\"picid\":\"\"},{\"phrase\":\"[km酷2]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/kmku2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/kmku2_thumb.gif\",\"value\":\"[km酷2]\",\"picid\":\"\"},{\"phrase\":\"[km憨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/kmhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/kmhan_thumb.gif\",\"value\":\"[km憨]\",\"picid\":\"\"},{\"phrase\":\"[km中毒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/kmzhongdu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/kmzhongdu_thumb.gif\",\"value\":\"[km中毒]\",\"picid\":\"\"},{\"phrase\":\"[km电视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/kmdianshi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/kmdianshi_thumb.gif\",\"value\":\"[km电视]\",\"picid\":\"\"},{\"phrase\":\"[km困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmkun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmkun_thumb.gif\",\"value\":\"[km困]\",\"picid\":\"\"},{\"phrase\":\"[km高兴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/kmgaoxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/kmgaoxing_thumb.gif\",\"value\":\"[km高兴]\",\"picid\":\"\"},{\"phrase\":\"[km幺鸡猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/kmyaojimao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/kmyaojimao_thumb.gif\",\"value\":\"[km幺鸡猫]\",\"picid\":\"\"},{\"phrase\":\"[km黑化笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/kmhaihuaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/kmhaihuaxiao_thumb.gif\",\"value\":\"[km黑化笑]\",\"picid\":\"\"},{\"phrase\":\"[km花猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/kmhuamao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/kmhuamao_thumb.gif\",\"value\":\"[km花猫]\",\"picid\":\"\"},{\"phrase\":\"[km好吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/kmhaochi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/kmhaochi_thumb.gif\",\"value\":\"[km好吃]\",\"picid\":\"\"},{\"phrase\":\"[kmAI]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/kmAI_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bc/kmAI_thumb.gif\",\"value\":\"[kmAI]\",\"picid\":\"\"},{\"phrase\":\"[km黑化唠叨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/kmheihualaodao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/kmheihualaodao_thumb.gif\",\"value\":\"[km黑化唠叨]\",\"picid\":\"\"},{\"phrase\":\"[km好吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/kmhaochijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/kmhaochijing_thumb.gif\",\"value\":\"[km好吃惊]\",\"picid\":\"\"},{\"phrase\":\"[km唠叨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kmlaodao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/kmlaodao_thumb.gif\",\"value\":\"[km唠叨]\",\"picid\":\"\"},{\"phrase\":\"[km眼镜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/kmyanjing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/kmyanjing_thumb.gif\",\"value\":\"[km眼镜]\",\"picid\":\"\"},{\"phrase\":\"[km闪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/kmshan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/kmshan_thumb.gif\",\"value\":\"[km闪]\",\"picid\":\"\"},{\"phrase\":\"[kmV]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/kmV_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/kmV_thumb.gif\",\"value\":\"[kmV]\",\"picid\":\"\"},{\"phrase\":\"[km不淡定]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/kmbudanding_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/kmbudanding_thumb.gif\",\"value\":\"[km不淡定]\",\"picid\":\"\"},{\"phrase\":\"[km鼻血1]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/kmbixue1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/kmbixue1_thumb.gif\",\"value\":\"[km鼻血1]\",\"picid\":\"\"},{\"phrase\":\"[km好饿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/kmhaoe_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/kmhaoe_thumb.gif\",\"value\":\"[km好饿]\",\"picid\":\"\"},{\"phrase\":\"[km上传]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/kmshangchuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/kmshangchuan_thumb.gif\",\"value\":\"[km上传]\",\"picid\":\"\"},{\"phrase\":\"[km黑化]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmheihua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmheihua_thumb.gif\",\"value\":\"[km黑化]\",\"picid\":\"\"},{\"phrase\":\"[km鼻血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kmbixue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kmbixue_thumb.gif\",\"value\":\"[km鼻血]\",\"picid\":\"\"},{\"phrase\":\"[km酷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/kmku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/kmku_thumb.gif\",\"value\":\"[km酷]\",\"picid\":\"\"},{\"phrase\":\"[km愁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kmchou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kmchou_thumb.gif\",\"value\":\"[km愁]\",\"picid\":\"\"},{\"phrase\":\"[km相机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/kmxiangji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/kmxiangji_thumb.gif\",\"value\":\"[km相机]\",\"picid\":\"\"},{\"phrase\":\"[km喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/kmxi_thumb.gif\",\"value\":\"[km喜]\",\"picid\":\"\"},{\"phrase\":\"[km得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/kmdeyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/85/kmdeyi_thumb.gif\",\"value\":\"[km得意]\",\"picid\":\"\"},{\"phrase\":\"[km怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/kmnu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/kmnu_thumb.gif\",\"value\":\"[km怒]\",\"picid\":\"\"},{\"phrase\":\"[km生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/kmshengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/kmshengqi_thumb.gif\",\"value\":\"[km生气]\",\"picid\":\"\"},{\"phrase\":\"[kmDW]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/kmDW_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/kmDW_thumb.gif\",\"value\":\"[kmDW]\",\"picid\":\"\"},{\"phrase\":\"[km呜血泪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/km1wuxuelei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/26/km1wuxuelei_thumb.gif\",\"value\":\"[km呜血泪]\",\"picid\":\"\"},{\"phrase\":\"[kmPS]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/kmPS_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/kmPS_thumb.gif\",\"value\":\"[kmPS]\",\"picid\":\"\"},{\"phrase\":\"[km馋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/kmchan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/kmchan_thumb.gif\",\"value\":\"[km馋]\",\"picid\":\"\"},{\"phrase\":\"[km下载]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmxiazai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmxiazai_thumb.gif\",\"value\":\"[km下载]\",\"picid\":\"\"},{\"phrase\":\"[kmX]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/kmX_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/kmX_thumb.gif\",\"value\":\"[kmX]\",\"picid\":\"\"},{\"phrase\":\"[km情书]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/kmqingshu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/kmqingshu_thumb.gif\",\"value\":\"[km情书]\",\"picid\":\"\"},{\"phrase\":\"[km骷髅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmkulou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0e/kmkulou_thumb.gif\",\"value\":\"[km骷髅]\",\"picid\":\"\"},{\"phrase\":\"[km丽莎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/kmlisha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/kmlisha_thumb.gif\",\"value\":\"[km丽莎]\",\"picid\":\"\"},{\"phrase\":\"[km禁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/kmjin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/kmjin_thumb.gif\",\"value\":\"[km禁]\",\"picid\":\"\"},{\"phrase\":\"[km晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kmyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kmyun_thumb.gif\",\"value\":\"[km晕]\",\"picid\":\"\"},{\"phrase\":\"[km热]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kmre_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/kmre_thumb.gif\",\"value\":\"[km热]\",\"picid\":\"\"},{\"phrase\":\"[km冷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/kmleng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/kmleng_thumb.gif\",\"value\":\"[km冷]\",\"picid\":\"\"},{\"phrase\":\"[km猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/kmmao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/kmmao_thumb.gif\",\"value\":\"[km猫]\",\"picid\":\"\"},{\"phrase\":\"[km拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/longniankm_org.gif\",\"hot\":false,\"common\":false,\"category\":\"块猫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/longniankm_thumb.gif\",\"value\":\"[km拜年]\",\"picid\":\"\"},{\"phrase\":\"[bofu吐舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bofutushetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bofutushetou_thumb.gif\",\"value\":\"[bofu吐舌头]\",\"picid\":\"\"},{\"phrase\":\"[bofu拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/bofulongnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0d/bofulongnian_thumb.gif\",\"value\":\"[bofu拜年]\",\"picid\":\"\"},{\"phrase\":\"[bofu淫笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/bofuyinxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/bofuyinxiao_thumb.gif\",\"value\":\"[bofu淫笑]\",\"picid\":\"\"},{\"phrase\":\"[bofu压力山大]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bofuyalishanda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bofuyalishanda_thumb.gif\",\"value\":\"[bofu压力山大]\",\"picid\":\"\"},{\"phrase\":\"[bofu心灰意冷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/bofuxinhuiyileng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/bofuxinhuiyileng_thumb.gif\",\"value\":\"[bofu心灰意冷]\",\"picid\":\"\"},{\"phrase\":\"[bofu心动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/bofuxindong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/bofuxindong_thumb.gif\",\"value\":\"[bofu心动]\",\"picid\":\"\"},{\"phrase\":\"[bofu咸蛋超人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/bofuxiandanchaoren_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/bofuxiandanchaoren_thumb.gif\",\"value\":\"[bofu咸蛋超人]\",\"picid\":\"\"},{\"phrase\":\"[bofu食神]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/bofushishen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/bofushishen_thumb.gif\",\"value\":\"[bofu食神]\",\"picid\":\"\"},{\"phrase\":\"[bofu票子快来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/bofupiaozikuailai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/bofupiaozikuailai_thumb.gif\",\"value\":\"[bofu票子快来]\",\"picid\":\"\"},{\"phrase\":\"[bofu怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/bofunu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/bofunu_thumb.gif\",\"value\":\"[bofu怒]\",\"picid\":\"\"},{\"phrase\":\"[bofu扭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/bofuniu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/bofuniu_thumb.gif\",\"value\":\"[bofu扭]\",\"picid\":\"\"},{\"phrase\":\"[bofu梦遗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/bofumengyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/bofumengyi_thumb.gif\",\"value\":\"[bofu梦遗]\",\"picid\":\"\"},{\"phrase\":\"[bofu累]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/bofulei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/bofulei_thumb.gif\",\"value\":\"[bofu累]\",\"picid\":\"\"},{\"phrase\":\"[bofu啃西瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/bofukenxigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/bofukenxigua_thumb.gif\",\"value\":\"[bofu啃西瓜]\",\"picid\":\"\"},{\"phrase\":\"[bofu给力]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/bofugeili_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/bofugeili_thumb.gif\",\"value\":\"[bofu给力]\",\"picid\":\"\"},{\"phrase\":\"[bofu发愤图强]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bofufafentuqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/bofufafentuqiang_thumb.gif\",\"value\":\"[bofu发愤图强]\",\"picid\":\"\"},{\"phrase\":\"[bofu抖骚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/bofudousao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/bofudousao_thumb.gif\",\"value\":\"[bofu抖骚]\",\"picid\":\"\"},{\"phrase\":\"[bofu得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bofudese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/bofudese_thumb.gif\",\"value\":\"[bofu得瑟]\",\"picid\":\"\"},{\"phrase\":\"[bofu打飞机]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/bofudafeiji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/bofudafeiji_thumb.gif\",\"value\":\"[bofu打飞机]\",\"picid\":\"\"},{\"phrase\":\"[bofu变脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/bofubianlian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/bofubianlian_thumb.gif\",\"value\":\"[bofu变脸]\",\"picid\":\"\"},{\"phrase\":\"[bofu蹦极]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/bofubengji_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/bofubengji_thumb.gif\",\"value\":\"[bofu蹦极]\",\"picid\":\"\"},{\"phrase\":\"[bofu暴躁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/bofubaozao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"柏夫\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/bofubaozao_thumb.gif\",\"value\":\"[bofu暴躁]\",\"picid\":\"\"},{\"phrase\":\"[萌萌星星眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/mmxingxingyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/mmxingxingyan_thumb.gif\",\"value\":\"[萌萌星星眼]\",\"picid\":\"\"},{\"phrase\":\"[萌萌打滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mmdagun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/mmdagun_thumb.gif\",\"value\":\"[萌萌打滚]\",\"picid\":\"\"},{\"phrase\":\"[萌萌甩帽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/mmshuaimaozi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/mmshuaimaozi_thumb.gif\",\"value\":\"[萌萌甩帽]\",\"picid\":\"\"},{\"phrase\":\"[萌萌摔瓶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/mmshuaipingzi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/mmshuaipingzi_thumb.gif\",\"value\":\"[萌萌摔瓶]\",\"picid\":\"\"},{\"phrase\":\"[萌萌扭屁股]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/mmniupigu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/mmniupigu_thumb.gif\",\"value\":\"[萌萌扭屁股]\",\"picid\":\"\"},{\"phrase\":\"[萌萌惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/mmjidujingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/mmjidujingya_thumb.gif\",\"value\":\"[萌萌惊讶]\",\"picid\":\"\"},{\"phrase\":\"[萌萌懒得理]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/mmlandeli_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/mmlandeli_thumb.gif\",\"value\":\"[萌萌懒得理]\",\"picid\":\"\"},{\"phrase\":\"[萌萌偷乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/mmwuzuile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/mmwuzuile_thumb.gif\",\"value\":\"[萌萌偷乐]\",\"picid\":\"\"},{\"phrase\":\"[萌萌鄙视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/mmbishini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/mmbishini_thumb.gif\",\"value\":\"[萌萌鄙视]\",\"picid\":\"\"},{\"phrase\":\"[萌萌哈欠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/mmdagehaqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/mmdagehaqian_thumb.gif\",\"value\":\"[萌萌哈欠]\",\"picid\":\"\"},{\"phrase\":\"[萌萌石化]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/mmshihua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/mmshihua_thumb.gif\",\"value\":\"[萌萌石化]\",\"picid\":\"\"},{\"phrase\":\"[萌萌敲鼓]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/mmqiaodagu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d9/mmqiaodagu_thumb.gif\",\"value\":\"[萌萌敲鼓]\",\"picid\":\"\"},{\"phrase\":\"[萌萌叹气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/mmtankouqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/mmtankouqi_thumb.gif\",\"value\":\"[萌萌叹气]\",\"picid\":\"\"},{\"phrase\":\"[萌萌捶地笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/mmchuidixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/mmchuidixiao_thumb.gif\",\"value\":\"[萌萌捶地笑]\",\"picid\":\"\"},{\"phrase\":\"[萌萌捂脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/mmwulian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/mmwulian_thumb.gif\",\"value\":\"[萌萌捂脸]\",\"picid\":\"\"},{\"phrase\":\"[萌萌流汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/mmkuangliuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/mmkuangliuhan_thumb.gif\",\"value\":\"[萌萌流汗]\",\"picid\":\"\"},{\"phrase\":\"[萌萌抠鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/mmkoubizi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/mmkoubizi_thumb.gif\",\"value\":\"[萌萌抠鼻]\",\"picid\":\"\"},{\"phrase\":\"[萌萌泪奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/mmleiben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/mmleiben_thumb.gif\",\"value\":\"[萌萌泪奔]\",\"picid\":\"\"},{\"phrase\":\"[萌萌献花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/mmxianduohua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"萌萌\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f3/mmxianduohua_thumb.gif\",\"value\":\"[萌萌献花]\",\"picid\":\"\"},{\"phrase\":\"[欢欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/liaobuqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/liaobuqi_thumb.gif\",\"value\":\"[欢欢]\",\"picid\":\"\"},{\"phrase\":\"[乐乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/guanbuzhao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/guanbuzhao_thumb.gif\",\"value\":\"[乐乐]\",\"picid\":\"\"},{\"phrase\":\"[管不着爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/2guanbuzhao1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/2guanbuzhao1_thumb.gif\",\"value\":\"[管不着爱]\",\"picid\":\"\"},{\"phrase\":\"[爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/ai_thumb.gif\",\"value\":\"[爱]\",\"picid\":\"\"},{\"phrase\":\"[了不起爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/2liaobuqiai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/2liaobuqiai_thumb.gif\",\"value\":\"[了不起爱]\",\"picid\":\"\"},{\"phrase\":\"[gbz真穿越]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/gbzzhenchuanyue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/gbzzhenchuanyue_thumb.gif\",\"value\":\"[gbz真穿越]\",\"picid\":\"\"},{\"phrase\":\"[gbz再睡会]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/gbzzaishuihui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/gbzzaishuihui_thumb.gif\",\"value\":\"[gbz再睡会]\",\"picid\":\"\"},{\"phrase\":\"[gbz呜呜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/gbzwuwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/gbzwuwu_thumb.gif\",\"value\":\"[gbz呜呜]\",\"picid\":\"\"},{\"phrase\":\"[gbz委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/gbzweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/gbzweiqu_thumb.gif\",\"value\":\"[gbz委屈]\",\"picid\":\"\"},{\"phrase\":\"[gbz晚安了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/gbzwananle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/gbzwananle_thumb.gif\",\"value\":\"[gbz晚安了]\",\"picid\":\"\"},{\"phrase\":\"[gbz祈福]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/gbzqifu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/gbzqifu_thumb.gif\",\"value\":\"[gbz祈福]\",\"picid\":\"\"},{\"phrase\":\"[gbz祈福了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/gbzqifule_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/gbzqifule_thumb.gif\",\"value\":\"[gbz祈福了]\",\"picid\":\"\"},{\"phrase\":\"[gbz窃笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/gbzqiexiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/gbzqiexiao_thumb.gif\",\"value\":\"[gbz窃笑]\",\"picid\":\"\"},{\"phrase\":\"[gbz起床啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/gbzqichuangla_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/gbzqichuangla_thumb.gif\",\"value\":\"[gbz起床啦]\",\"picid\":\"\"},{\"phrase\":\"[gbz困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/gbzkun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/gbzkun_thumb.gif\",\"value\":\"[gbz困]\",\"picid\":\"\"},{\"phrase\":\"[gbz加班]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/gbzjiaban_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/gbzjiaban_thumb.gif\",\"value\":\"[gbz加班]\",\"picid\":\"\"},{\"phrase\":\"[gbz加班中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/gbzjiabanzhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/gbzjiabanzhong_thumb.gif\",\"value\":\"[gbz加班中]\",\"picid\":\"\"},{\"phrase\":\"[gbz饿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/gbze_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/gbze_thumb.gif\",\"value\":\"[gbz饿]\",\"picid\":\"\"},{\"phrase\":\"[gbz饿晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/gbzeyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/gbzeyun_thumb.gif\",\"value\":\"[gbz饿晕]\",\"picid\":\"\"},{\"phrase\":\"[gbz得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/gbzdeyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/gbzdeyi_thumb.gif\",\"value\":\"[gbz得意]\",\"picid\":\"\"},{\"phrase\":\"[gbz大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/gbzdaxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/gbzdaxiao_thumb.gif\",\"value\":\"[gbz大笑]\",\"picid\":\"\"},{\"phrase\":\"[gbz穿越了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/gbzchuanyuele_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/gbzchuanyuele_thumb.gif\",\"value\":\"[gbz穿越了]\",\"picid\":\"\"},{\"phrase\":\"[有点困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/youdiankun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/68/youdiankun_thumb.gif\",\"value\":\"[有点困]\",\"picid\":\"\"},{\"phrase\":\"[yes]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/yes_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/yes_thumb.gif\",\"value\":\"[yes]\",\"picid\":\"\"},{\"phrase\":\"[咽回去了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/yanhuiqule_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/yanhuiqule_thumb.gif\",\"value\":\"[咽回去了]\",\"picid\":\"\"},{\"phrase\":\"[鸭梨很大]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/yalihenda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/yalihenda_thumb.gif\",\"value\":\"[鸭梨很大]\",\"picid\":\"\"},{\"phrase\":\"[羞羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/xiuxiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/xiuxiu_thumb.gif\",\"value\":\"[羞羞]\",\"picid\":\"\"},{\"phrase\":\"[喜欢你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/xihuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/xihuang_thumb.gif\",\"value\":\"[喜欢你]\",\"picid\":\"\"},{\"phrase\":\"[小便屁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/xiaobianpi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/xiaobianpi_thumb.gif\",\"value\":\"[小便屁]\",\"picid\":\"\"},{\"phrase\":\"[无奈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/wunai22_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/wunai22_thumb.gif\",\"value\":\"[无奈]\",\"picid\":\"\"},{\"phrase\":\"[兔兔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/tutu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/tutu_thumb.gif\",\"value\":\"[兔兔]\",\"picid\":\"\"},{\"phrase\":\"[吐舌头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/tushetou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/98/tushetou_thumb.gif\",\"value\":\"[吐舌头]\",\"picid\":\"\"},{\"phrase\":\"[头晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/touyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/touyun_thumb.gif\",\"value\":\"[头晕]\",\"picid\":\"\"},{\"phrase\":\"[听音乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/tingyinyue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/tingyinyue_thumb.gif\",\"value\":\"[听音乐]\",\"picid\":\"\"},{\"phrase\":\"[睡大觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/shuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/65/shuijiao_thumb.gif\",\"value\":\"[睡大觉]\",\"picid\":\"\"},{\"phrase\":\"[闪闪紫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/shanshanzi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/shanshanzi_thumb.gif\",\"value\":\"[闪闪紫]\",\"picid\":\"\"},{\"phrase\":\"[闪闪绿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/shanshanlu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/shanshanlu_thumb.gif\",\"value\":\"[闪闪绿]\",\"picid\":\"\"},{\"phrase\":\"[闪闪灰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/shanshanhui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/shanshanhui_thumb.gif\",\"value\":\"[闪闪灰]\",\"picid\":\"\"},{\"phrase\":\"[闪闪红]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/shanshanhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/shanshanhong_thumb.gif\",\"value\":\"[闪闪红]\",\"picid\":\"\"},{\"phrase\":\"[闪闪粉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/shanshanfen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/shanshanfen_thumb.gif\",\"value\":\"[闪闪粉]\",\"picid\":\"\"},{\"phrase\":\"[咆哮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/paoxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/paoxiao_thumb.gif\",\"value\":\"[咆哮]\",\"picid\":\"\"},{\"phrase\":\"[摸头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/motou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/motou_thumb.gif\",\"value\":\"[摸头]\",\"picid\":\"\"},{\"phrase\":\"[真美好]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/meihao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/meihao_thumb.gif\",\"value\":\"[真美好]\",\"picid\":\"\"},{\"phrase\":\"[脸红自爆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/lianhongzibao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d8/lianhongzibao_thumb.gif\",\"value\":\"[脸红自爆]\",\"picid\":\"\"},{\"phrase\":\"[哭泣女]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/kuqinv_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/kuqinv_thumb.gif\",\"value\":\"[哭泣女]\",\"picid\":\"\"},{\"phrase\":\"[哭泣男]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kuqinan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/kuqinan_thumb.gif\",\"value\":\"[哭泣男]\",\"picid\":\"\"},{\"phrase\":\"[空]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/kong_thumb.gif\",\"value\":\"[空]\",\"picid\":\"\"},{\"phrase\":\"[尽情玩]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/jinqingwan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/jinqingwan_thumb.gif\",\"value\":\"[尽情玩]\",\"picid\":\"\"},{\"phrase\":\"[惊喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/jingxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/jingxi_thumb.gif\",\"value\":\"[惊喜]\",\"picid\":\"\"},{\"phrase\":\"[惊呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/jingdai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/jingdai_thumb.gif\",\"value\":\"[惊呆]\",\"picid\":\"\"},{\"phrase\":\"[胡萝卜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/huluobo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/huluobo_thumb.gif\",\"value\":\"[胡萝卜]\",\"picid\":\"\"},{\"phrase\":\"[欢腾去爱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/huangtengquai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/huangtengquai_thumb.gif\",\"value\":\"[欢腾去爱]\",\"picid\":\"\"},{\"phrase\":\"[感冒了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/ganmao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/ganmao_thumb.gif\",\"value\":\"[感冒了]\",\"picid\":\"\"},{\"phrase\":\"[怒了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/fennu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/fennu_thumb.gif\",\"value\":\"[怒了]\",\"picid\":\"\"},{\"phrase\":\"[我要奋斗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/fendou123_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/fendou123_thumb.gif\",\"value\":\"[我要奋斗]\",\"picid\":\"\"},{\"phrase\":\"[发芽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/faya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/95/faya_thumb.gif\",\"value\":\"[发芽]\",\"picid\":\"\"},{\"phrase\":\"[春暖花开]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/chunnuanhuakai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/chunnuanhuakai_thumb.gif\",\"value\":\"[春暖花开]\",\"picid\":\"\"},{\"phrase\":\"[抽烟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/chouyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/chouyan_thumb.gif\",\"value\":\"[抽烟]\",\"picid\":\"\"},{\"phrase\":\"[昂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/ang_thumb.gif\",\"value\":\"[昂]\",\"picid\":\"\"},{\"phrase\":\"[啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/aa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/aa_thumb.gif\",\"value\":\"[啊]\",\"picid\":\"\"},{\"phrase\":\"[自插双目]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/zichashuangmu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/zichashuangmu_thumb.gif\",\"value\":\"[自插双目]\",\"picid\":\"\"},{\"phrase\":\"[咦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/yiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/yiwen_thumb.gif\",\"value\":\"[咦]\",\"picid\":\"\"},{\"phrase\":\"[嘘嘘]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/xu_thumb.gif\",\"value\":\"[嘘嘘]\",\"picid\":\"\"},{\"phrase\":\"[我吃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/wochiwode_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/wochiwode_thumb.gif\",\"value\":\"[我吃]\",\"picid\":\"\"},{\"phrase\":\"[喵呜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/weiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/weiqu_thumb.gif\",\"value\":\"[喵呜]\",\"picid\":\"\"},{\"phrase\":\"[v5]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/v5_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/v5_thumb.gif\",\"value\":\"[v5]\",\"picid\":\"\"},{\"phrase\":\"[调戏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/tiaoxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/tiaoxi_thumb.gif\",\"value\":\"[调戏]\",\"picid\":\"\"},{\"phrase\":\"[打牙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/taihaoxiaole_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/taihaoxiaole_thumb.gif\",\"value\":\"[打牙]\",\"picid\":\"\"},{\"phrase\":\"[手贱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/shoujian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/shoujian_thumb.gif\",\"value\":\"[手贱]\",\"picid\":\"\"},{\"phrase\":\"[gbz色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/se_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/se_thumb.gif\",\"value\":\"[gbz色]\",\"picid\":\"\"},{\"phrase\":\"[喷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/pen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/pen_thumb.gif\",\"value\":\"[喷]\",\"picid\":\"\"},{\"phrase\":\"[你懂的]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/nidongde_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2e/nidongde_thumb.gif\",\"value\":\"[你懂的]\",\"picid\":\"\"},{\"phrase\":\"[喵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/miaomiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/miaomiao_thumb.gif\",\"value\":\"[喵]\",\"picid\":\"\"},{\"phrase\":\"[美味]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/meiwei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/meiwei_thumb.gif\",\"value\":\"[美味]\",\"picid\":\"\"},{\"phrase\":\"[惊恐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/jingkong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/jingkong_thumb.gif\",\"value\":\"[惊恐]\",\"picid\":\"\"},{\"phrase\":\"[感动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/gandong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/gandong_thumb.gif\",\"value\":\"[感动]\",\"picid\":\"\"},{\"phrase\":\"[放开]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/fangkai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/fangkai_thumb.gif\",\"value\":\"[放开]\",\"picid\":\"\"},{\"phrase\":\"[痴呆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/chidai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/chidai_thumb.gif\",\"value\":\"[痴呆]\",\"picid\":\"\"},{\"phrase\":\"[扯脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/chelian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/chelian_thumb.gif\",\"value\":\"[扯脸]\",\"picid\":\"\"},{\"phrase\":\"[不知所措]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/buzhisuocuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ab/buzhisuocuo_thumb.gif\",\"value\":\"[不知所措]\",\"picid\":\"\"},{\"phrase\":\"[翻白眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/baiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"管不着\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/baiyan_thumb.gif\",\"value\":\"[翻白眼]\",\"picid\":\"\"},{\"phrase\":\"[cc疯掉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/ccfengdiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/ccfengdiao_thumb.gif\",\"value\":\"[cc疯掉]\",\"picid\":\"\"},{\"phrase\":\"[cc吃货]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/ccchihuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/ccchihuo_thumb.gif\",\"value\":\"[cc吃货]\",\"picid\":\"\"},{\"phrase\":\"[cc疑问]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/ccyiwen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/ccyiwen_thumb.gif\",\"value\":\"[cc疑问]\",\"picid\":\"\"},{\"phrase\":\"[cc老爷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/cclaoye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/cclaoye_thumb.gif\",\"value\":\"[cc老爷]\",\"picid\":\"\"},{\"phrase\":\"[cc开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/cckaixin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/cckaixin_thumb.gif\",\"value\":\"[cc开心]\",\"picid\":\"\"},{\"phrase\":\"[cc怕怕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/ccpapa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/60/ccpapa_thumb.gif\",\"value\":\"[cc怕怕]\",\"picid\":\"\"},{\"phrase\":\"[cc哎呦喂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/ccAUV_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/ccAUV_thumb.gif\",\"value\":\"[cc哎呦喂]\",\"picid\":\"\"},{\"phrase\":\"[cc鼻血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/ccbixue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/ccbixue_thumb.gif\",\"value\":\"[cc鼻血]\",\"picid\":\"\"},{\"phrase\":\"[cc没有]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/ccmeiyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/93/ccmeiyou_thumb.gif\",\"value\":\"[cc没有]\",\"picid\":\"\"},{\"phrase\":\"[cc晕菜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/ccyuncai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/ccyuncai_thumb.gif\",\"value\":\"[cc晕菜]\",\"picid\":\"\"},{\"phrase\":\"[cc媚眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/ccmeiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/ccmeiyan_thumb.gif\",\"value\":\"[cc媚眼]\",\"picid\":\"\"},{\"phrase\":\"[cc鄙视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/ccbishi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/ccbishi_thumb.gif\",\"value\":\"[cc鄙视]\",\"picid\":\"\"},{\"phrase\":\"[cc委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/ccweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/ccweiqu_thumb.gif\",\"value\":\"[cc委屈]\",\"picid\":\"\"},{\"phrase\":\"[cc革命]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/ccgeming_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/ccgeming_thumb.gif\",\"value\":\"[cc革命]\",\"picid\":\"\"},{\"phrase\":\"[cc撞墙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/cczhuangqiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/cczhuangqiang_thumb.gif\",\"value\":\"[cc撞墙]\",\"picid\":\"\"},{\"phrase\":\"[cc穿越]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/ccchuanyue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/ccchuanyue_thumb.gif\",\"value\":\"[cc穿越]\",\"picid\":\"\"},{\"phrase\":\"[cc嘿嘿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/ccheihei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/ccheihei_thumb.gif\",\"value\":\"[cc嘿嘿]\",\"picid\":\"\"},{\"phrase\":\"[cc不行]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/ccbuxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/ccbuxing_thumb.gif\",\"value\":\"[cc不行]\",\"picid\":\"\"},{\"phrase\":\"[cc大哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ccdaku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ccdaku_thumb.gif\",\"value\":\"[cc大哭]\",\"picid\":\"\"},{\"phrase\":\"[cc耍赖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/ccshualai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/ccshualai_thumb.gif\",\"value\":\"[cc耍赖]\",\"picid\":\"\"},{\"phrase\":\"[cc激动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/ccjidong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/ccjidong_thumb.gif\",\"value\":\"[cc激动]\",\"picid\":\"\"},{\"phrase\":\"[cc哭泣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/cckuqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/cckuqi_thumb.gif\",\"value\":\"[cc哭泣]\",\"picid\":\"\"},{\"phrase\":\"[cc亲亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/ccqinqin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/ccqinqin_thumb.gif\",\"value\":\"[cc亲亲]\",\"picid\":\"\"},{\"phrase\":\"[cc心虚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ccxinxu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/ccxinxu_thumb.gif\",\"value\":\"[cc心虚]\",\"picid\":\"\"},{\"phrase\":\"[cc舞动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/ccwudong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/ccwudong_thumb.gif\",\"value\":\"[cc舞动]\",\"picid\":\"\"},{\"phrase\":\"[cc数钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/ccshuqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4c/ccshuqian_thumb.gif\",\"value\":\"[cc数钱]\",\"picid\":\"\"},{\"phrase\":\"[cc抱抱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/ccbaobao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b5/ccbaobao_thumb.gif\",\"value\":\"[cc抱抱]\",\"picid\":\"\"},{\"phrase\":\"[cc睡觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/ccshuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/ccshuijiao_thumb.gif\",\"value\":\"[cc睡觉]\",\"picid\":\"\"},{\"phrase\":\"[cc僵尸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/ccjiangshi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/ccjiangshi_thumb.gif\",\"value\":\"[cc僵尸]\",\"picid\":\"\"},{\"phrase\":\"[cc我踩]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/ccwocai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/ccwocai_thumb.gif\",\"value\":\"[cc我踩]\",\"picid\":\"\"},{\"phrase\":\"[cc运动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/ccyundong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/58/ccyundong_thumb.gif\",\"value\":\"[cc运动]\",\"picid\":\"\"},{\"phrase\":\"[cc恭喜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/ccgongxi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/ccgongxi_thumb.gif\",\"value\":\"[cc恭喜]\",\"picid\":\"\"},{\"phrase\":\"[cc歌唱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/ccgechang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/ccgechang_thumb.gif\",\"value\":\"[cc歌唱]\",\"picid\":\"\"},{\"phrase\":\"[cc无语]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/ccwuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/ccwuyu_thumb.gif\",\"value\":\"[cc无语]\",\"picid\":\"\"},{\"phrase\":\"[cc郁闷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ccyumen_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/ccyumen_thumb.gif\",\"value\":\"[cc郁闷]\",\"picid\":\"\"},{\"phrase\":\"[cc祈祷]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/ccqidao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/ccqidao_thumb.gif\",\"value\":\"[cc祈祷]\",\"picid\":\"\"},{\"phrase\":\"[cc思考]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/ccsikao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c2/ccsikao_thumb.gif\",\"value\":\"[cc思考]\",\"picid\":\"\"},{\"phrase\":\"[cc惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/ccjingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/ccjingya_thumb.gif\",\"value\":\"[cc惊讶]\",\"picid\":\"\"},{\"phrase\":\"[cc得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/ccdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/ccdese_thumb.gif\",\"value\":\"[cc得瑟]\",\"picid\":\"\"},{\"phrase\":\"[cc不嘛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/ccbuma_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/ccbuma_thumb.gif\",\"value\":\"[cc不嘛]\",\"picid\":\"\"},{\"phrase\":\"[cc生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/ccshengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/ccshengqi_thumb.gif\",\"value\":\"[cc生气]\",\"picid\":\"\"},{\"phrase\":\"[cc乞讨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/ccqitao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/ccqitao_thumb.gif\",\"value\":\"[cc乞讨]\",\"picid\":\"\"},{\"phrase\":\"[cc呼啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/cchula_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/cchula_thumb.gif\",\"value\":\"[cc呼啦]\",\"picid\":\"\"},{\"phrase\":\"[cc偷乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/cctoule_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/84/cctoule_thumb.gif\",\"value\":\"[cc偷乐]\",\"picid\":\"\"},{\"phrase\":\"[cc无奈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/ccwunai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c3/ccwunai_thumb.gif\",\"value\":\"[cc无奈]\",\"picid\":\"\"},{\"phrase\":\"[cc蒙面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/ccmengmian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/ccmengmian_thumb.gif\",\"value\":\"[cc蒙面]\",\"picid\":\"\"},{\"phrase\":\"[cc色色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/ccsese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/ccsese_thumb.gif\",\"value\":\"[cc色色]\",\"picid\":\"\"},{\"phrase\":\"[cc哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/cchaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"臭臭\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/36/cchaha_thumb.gif\",\"value\":\"[cc哈哈]\",\"picid\":\"\"},{\"phrase\":\"[nono微博益起来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/npgongyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/npgongyi_thumb.gif\",\"value\":\"[nono微博益起来]\",\"picid\":\"\"},{\"phrase\":\"[nono生日快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/nonoshengrikuaile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/nonoshengrikuaile_thumb.gif\",\"value\":\"[nono生日快乐]\",\"picid\":\"\"},{\"phrase\":\"[nono得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/nonodese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ce/nonodese_thumb.gif\",\"value\":\"[nono得瑟]\",\"picid\":\"\"},{\"phrase\":\"[nono卖帅]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/nonomaishuai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/nonomaishuai_thumb.gif\",\"value\":\"[nono卖帅]\",\"picid\":\"\"},{\"phrase\":\"[nono摇手指]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/nonoyaoshouzhi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/nonoyaoshouzhi_thumb.gif\",\"value\":\"[nono摇手指]\",\"picid\":\"\"},{\"phrase\":\"[nono来呀来呀]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/nonolaiyalaiya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/nonolaiyalaiya_thumb.gif\",\"value\":\"[nono来呀来呀]\",\"picid\":\"\"},{\"phrase\":\"[nono哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/nonoku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/nonoku_thumb.gif\",\"value\":\"[nono哭]\",\"picid\":\"\"},{\"phrase\":\"[nono挑逗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/nonotiaodou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/nonotiaodou_thumb.gif\",\"value\":\"[nono挑逗]\",\"picid\":\"\"},{\"phrase\":\"[nono娇羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/nonojiuxiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/nonojiuxiu_thumb.gif\",\"value\":\"[nono娇羞]\",\"picid\":\"\"},{\"phrase\":\"[nono生病]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/nonoshengbing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/nonoshengbing_thumb.gif\",\"value\":\"[nono生病]\",\"picid\":\"\"},{\"phrase\":\"[nono开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/nonokaixin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/nonokaixin_thumb.gif\",\"value\":\"[nono开心]\",\"picid\":\"\"},{\"phrase\":\"[nono看不见我]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/nonokanbujianwo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/nonokanbujianwo_thumb.gif\",\"value\":\"[nono看不见我]\",\"picid\":\"\"},{\"phrase\":\"[nono眨眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/nonozhayan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/nonozhayan_thumb.gif\",\"value\":\"[nono眨眼]\",\"picid\":\"\"},{\"phrase\":\"[nono大礼包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/nonodalibao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/nonodalibao_thumb.gif\",\"value\":\"[nono大礼包]\",\"picid\":\"\"},{\"phrase\":\"[nono水汪汪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/nonoshuiwangwang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/nonoshuiwangwang_thumb.gif\",\"value\":\"[nono水汪汪]\",\"picid\":\"\"},{\"phrase\":\"[nonokiss]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/nonokiss_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/nonokiss_thumb.gif\",\"value\":\"[nonokiss]\",\"picid\":\"\"},{\"phrase\":\"[nono圣诞节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/nonoshengdanjie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/nonoshengdanjie_thumb.gif\",\"value\":\"[nono圣诞节]\",\"picid\":\"\"},{\"phrase\":\"[nono跳舞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/nonotiaowu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fc/nonotiaowu_thumb.gif\",\"value\":\"[nono跳舞]\",\"picid\":\"\"},{\"phrase\":\"[nono害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/nonohaixiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/nonohaixiu_thumb.gif\",\"value\":\"[nono害羞]\",\"picid\":\"\"},{\"phrase\":\"[nono无语]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/nonowuyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/nonowuyu_thumb.gif\",\"value\":\"[nono无语]\",\"picid\":\"\"},{\"phrase\":\"[nono放屁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/nonofangpi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/73/nonofangpi_thumb.gif\",\"value\":\"[nono放屁]\",\"picid\":\"\"},{\"phrase\":\"[nono晕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/nonoyun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/nonoyun_thumb.gif\",\"value\":\"[nono晕]\",\"picid\":\"\"},{\"phrase\":\"[nono悠哉跑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/nonoyouzaipao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/nonoyouzaipao_thumb.gif\",\"value\":\"[nono悠哉跑]\",\"picid\":\"\"},{\"phrase\":\"[nono打哈欠]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/nonodahaqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/nonodahaqian_thumb.gif\",\"value\":\"[nono打哈欠]\",\"picid\":\"\"},{\"phrase\":\"[nono扭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/nononiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/nononiu_thumb.gif\",\"value\":\"[nono扭]\",\"picid\":\"\"},{\"phrase\":\"[nonomua]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/nonomua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/nonomua_thumb.gif\",\"value\":\"[nonomua]\",\"picid\":\"\"},{\"phrase\":\"[nono尴尬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/nonoganga_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/nonoganga_thumb.gif\",\"value\":\"[nono尴尬]\",\"picid\":\"\"},{\"phrase\":\"[nono跑步]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/nonopaobu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/nonopaobu_thumb.gif\",\"value\":\"[nono跑步]\",\"picid\":\"\"},{\"phrase\":\"[nono转圈圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/nonozhuanquanquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/nonozhuanquanquan_thumb.gif\",\"value\":\"[nono转圈圈]\",\"picid\":\"\"},{\"phrase\":\"[nono心心眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/nonoxinxinyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/80/nonoxinxinyan_thumb.gif\",\"value\":\"[nono心心眼]\",\"picid\":\"\"},{\"phrase\":\"[nono睡觉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/nonoshuijiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/nonoshuijiao_thumb.gif\",\"value\":\"[nono睡觉]\",\"picid\":\"\"},{\"phrase\":\"[nono星星眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/nonoxingxingyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/nonoxingxingyan_thumb.gif\",\"value\":\"[nono星星眼]\",\"picid\":\"\"},{\"phrase\":\"[nono抛小球]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/nonopaoxiaoqiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/nonopaoxiaoqiu_thumb.gif\",\"value\":\"[nono抛小球]\",\"picid\":\"\"},{\"phrase\":\"[nono拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/longnianpanda_org.gif\",\"hot\":false,\"common\":false,\"category\":\"nonopanda\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/longnianpanda_thumb.gif\",\"value\":\"[nono拜年]\",\"picid\":\"\"},{\"phrase\":\"[dino求人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/dinoqiuren_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/dinoqiuren_thumb.gif\",\"value\":\"[dino求人]\",\"picid\":\"\"},{\"phrase\":\"[dino泪奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/dinoleiben_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/dinoleiben_thumb.gif\",\"value\":\"[dino泪奔]\",\"picid\":\"\"},{\"phrase\":\"[dino害羞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/dinohaixiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/dinohaixiu_thumb.gif\",\"value\":\"[dino害羞]\",\"picid\":\"\"},{\"phrase\":\"[dino等人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/dinodengren_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/dinodengren_thumb.gif\",\"value\":\"[dino等人]\",\"picid\":\"\"},{\"phrase\":\"[dino囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinojiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinojiong_thumb.gif\",\"value\":\"[dino囧]\",\"picid\":\"\"},{\"phrase\":\"[dino抠鼻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dinokoubi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/dinokoubi_thumb.gif\",\"value\":\"[dino抠鼻]\",\"picid\":\"\"},{\"phrase\":\"[dino心碎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/dinoxinsui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/dinoxinsui_thumb.gif\",\"value\":\"[dino心碎]\",\"picid\":\"\"},{\"phrase\":\"[dino撒花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/dinosahua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/dinosahua_thumb.gif\",\"value\":\"[dino撒花]\",\"picid\":\"\"},{\"phrase\":\"[dino电筒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/dinodiantong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c0/dinodiantong_thumb.gif\",\"value\":\"[dino电筒]\",\"picid\":\"\"},{\"phrase\":\"[dino热]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/dinore_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/dinore_thumb.gif\",\"value\":\"[dino热]\",\"picid\":\"\"},{\"phrase\":\"[dino坏笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/dinohuaixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/dinohuaixiao_thumb.gif\",\"value\":\"[dino坏笑]\",\"picid\":\"\"},{\"phrase\":\"[dino礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/dinoliwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5e/dinoliwu_thumb.gif\",\"value\":\"[dino礼物]\",\"picid\":\"\"},{\"phrase\":\"[dino晕倒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/dinoyundao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/dinoyundao_thumb.gif\",\"value\":\"[dino晕倒]\",\"picid\":\"\"},{\"phrase\":\"[dino诡异]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/dinoguiyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/dinoguiyi_thumb.gif\",\"value\":\"[dino诡异]\",\"picid\":\"\"},{\"phrase\":\"[dino瞌睡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/dinokeshui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/dinokeshui_thumb.gif\",\"value\":\"[dino瞌睡]\",\"picid\":\"\"},{\"phrase\":\"[dino安慰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/dinoanwei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/dinoanwei_thumb.gif\",\"value\":\"[dino安慰]\",\"picid\":\"\"},{\"phrase\":\"[dino再见]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/dinozaijian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/50/dinozaijian_thumb.gif\",\"value\":\"[dino再见]\",\"picid\":\"\"},{\"phrase\":\"[dino甜筒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/dinotiantong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/dinotiantong_thumb.gif\",\"value\":\"[dino甜筒]\",\"picid\":\"\"},{\"phrase\":\"[dino不屑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/dinobuxie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/dinobuxie_thumb.gif\",\"value\":\"[dino不屑]\",\"picid\":\"\"},{\"phrase\":\"[dino早安]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/dinozaoan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/dinozaoan_thumb.gif\",\"value\":\"[dino早安]\",\"picid\":\"\"},{\"phrase\":\"[dino高兴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/dinogaoxing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/dinogaoxing_thumb.gif\",\"value\":\"[dino高兴]\",\"picid\":\"\"},{\"phrase\":\"[dino投降]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/dinotouxiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/dinotouxiang_thumb.gif\",\"value\":\"[dino投降]\",\"picid\":\"\"},{\"phrase\":\"[dino鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/dinoguilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/dinoguilian_thumb.gif\",\"value\":\"[dino鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[dino吃饭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/dinochifan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/dinochifan_thumb.gif\",\"value\":\"[dino吃饭]\",\"picid\":\"\"},{\"phrase\":\"[dino失望]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/dinoshiwang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/dinoshiwang_thumb.gif\",\"value\":\"[dino失望]\",\"picid\":\"\"},{\"phrase\":\"[dino数钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/dinoshuqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/dinoshuqian_thumb.gif\",\"value\":\"[dino数钱]\",\"picid\":\"\"},{\"phrase\":\"[dino打你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/dinodani_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/dinodani_thumb.gif\",\"value\":\"[dino打你]\",\"picid\":\"\"},{\"phrase\":\"[dino狂叫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/dinokuangjiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/dinokuangjiao_thumb.gif\",\"value\":\"[dino狂叫]\",\"picid\":\"\"},{\"phrase\":\"[dino吐血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/dinotuxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/dinotuxue_thumb.gif\",\"value\":\"[dino吐血]\",\"picid\":\"\"},{\"phrase\":\"[dino委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/dinoweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/dinoweiqu_thumb.gif\",\"value\":\"[dino委屈]\",\"picid\":\"\"},{\"phrase\":\"[dino划圈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/dinohuaquan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/04/dinohuaquan_thumb.gif\",\"value\":\"[dino划圈]\",\"picid\":\"\"},{\"phrase\":\"[dino发怒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/dinofanu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/dinofanu_thumb.gif\",\"value\":\"[dino发怒]\",\"picid\":\"\"},{\"phrase\":\"[dino吃惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinochijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinochijing_thumb.gif\",\"value\":\"[dino吃惊]\",\"picid\":\"\"},{\"phrase\":\"[dino喝酒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/dinohejiu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/dinohejiu_thumb.gif\",\"value\":\"[dino喝酒]\",\"picid\":\"\"},{\"phrase\":\"[dino咬手帕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/dinoyaoshoupa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0b/dinoyaoshoupa_thumb.gif\",\"value\":\"[dino咬手帕]\",\"picid\":\"\"},{\"phrase\":\"[dino臭美]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/dinochoumei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/dinochoumei_thumb.gif\",\"value\":\"[dino臭美]\",\"picid\":\"\"},{\"phrase\":\"[dino困惑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/dinokunhuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/dinokunhuo_thumb.gif\",\"value\":\"[dino困惑]\",\"picid\":\"\"},{\"phrase\":\"[dino许愿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinoxuyuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/dinoxuyuan_thumb.gif\",\"value\":\"[dino许愿]\",\"picid\":\"\"},{\"phrase\":\"[dino打滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/dinodagun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"恐龙宝贝\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/dinodagun_thumb.gif\",\"value\":\"[dino打滚]\",\"picid\":\"\"},{\"phrase\":\"[yz我倒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/yzwodao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/yzwodao_thumb.gif\",\"value\":\"[yz我倒]\",\"picid\":\"\"},{\"phrase\":\"[yz撞玻璃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/yzzhuangboli_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/yzzhuangboli_thumb.gif\",\"value\":\"[yz撞玻璃]\",\"picid\":\"\"},{\"phrase\":\"[yz淋浴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/yzlinyu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/77/yzlinyu_thumb.gif\",\"value\":\"[yz淋浴]\",\"picid\":\"\"},{\"phrase\":\"[yz纳尼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/yznani_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/yznani_thumb.gif\",\"value\":\"[yz纳尼]\",\"picid\":\"\"},{\"phrase\":\"[yz欢呼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/yzhuanhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/yzhuanhu_thumb.gif\",\"value\":\"[yz欢呼]\",\"picid\":\"\"},{\"phrase\":\"[yz拍桌子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/yzpaizhuozi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e4/yzpaizhuozi_thumb.gif\",\"value\":\"[yz拍桌子]\",\"picid\":\"\"},{\"phrase\":\"[yz光棍]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/yzguanglun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/yzguanglun_thumb.gif\",\"value\":\"[yz光棍]\",\"picid\":\"\"},{\"phrase\":\"[yz哇哇叫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/yzwawajiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/yzwawajiao_thumb.gif\",\"value\":\"[yz哇哇叫]\",\"picid\":\"\"},{\"phrase\":\"[yz求你了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/yzqiunile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/yzqiunile_thumb.gif\",\"value\":\"[yz求你了]\",\"picid\":\"\"},{\"phrase\":\"[yz翻滚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/yzfangun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/yzfangun_thumb.gif\",\"value\":\"[yz翻滚]\",\"picid\":\"\"},{\"phrase\":\"[yz偷着笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/yztouzhexiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/yztouzhexiao_thumb.gif\",\"value\":\"[yz偷着笑]\",\"picid\":\"\"},{\"phrase\":\"[yzye]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/yzye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/yzye_thumb.gif\",\"value\":\"[yzye]\",\"picid\":\"\"},{\"phrase\":\"[yz投降]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/yztouxiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/yztouxiang_thumb.gif\",\"value\":\"[yz投降]\",\"picid\":\"\"},{\"phrase\":\"[yz抽风]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/yzchoufeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/yzchoufeng_thumb.gif\",\"value\":\"[yz抽风]\",\"picid\":\"\"},{\"phrase\":\"[yzoye]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/yzoye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/yzoye_thumb.gif\",\"value\":\"[yzoye]\",\"picid\":\"\"},{\"phrase\":\"[yz撒花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/yzsahua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/yzsahua_thumb.gif\",\"value\":\"[yz撒花]\",\"picid\":\"\"},{\"phrase\":\"[yz抱枕头]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/yzbaozhentou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/yzbaozhentou_thumb.gif\",\"value\":\"[yz抱枕头]\",\"picid\":\"\"},{\"phrase\":\"[yz甩手绢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/yzshuaishoujuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/yzshuaishoujuan_thumb.gif\",\"value\":\"[yz甩手绢]\",\"picid\":\"\"},{\"phrase\":\"[yz右边亮了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/yzyoubianliangle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/yzyoubianliangle_thumb.gif\",\"value\":\"[yz右边亮了]\",\"picid\":\"\"},{\"phrase\":\"[yz人呢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/yzrenne_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/yzrenne_thumb.gif\",\"value\":\"[yz人呢]\",\"picid\":\"\"},{\"phrase\":\"[yz傻兮兮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/yzshaxixi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/yzshaxixi_thumb.gif\",\"value\":\"[yz傻兮兮]\",\"picid\":\"\"},{\"phrase\":\"[yz砸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/yzza_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/yzza_thumb.gif\",\"value\":\"[yz砸]\",\"picid\":\"\"},{\"phrase\":\"[yz招财猫]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/yzzhaocaimao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/yzzhaocaimao_thumb.gif\",\"value\":\"[yz招财猫]\",\"picid\":\"\"},{\"phrase\":\"[yz扇扇子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/yzshanshanzi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/63/yzshanshanzi_thumb.gif\",\"value\":\"[yz扇扇子]\",\"picid\":\"\"},{\"phrase\":\"[yz不呢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/yzbune_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/yzbune_thumb.gif\",\"value\":\"[yz不呢]\",\"picid\":\"\"},{\"phrase\":\"[yz拍屁股]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/yzpaipigu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/yzpaipigu_thumb.gif\",\"value\":\"[yz拍屁股]\",\"picid\":\"\"},{\"phrase\":\"[yz委屈哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/yzweiquku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/yzweiquku_thumb.gif\",\"value\":\"[yz委屈哭]\",\"picid\":\"\"},{\"phrase\":\"[yz听歌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/yztingge_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/yztingge_thumb.gif\",\"value\":\"[yz听歌]\",\"picid\":\"\"},{\"phrase\":\"[yz吃瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/yzchigua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3f/yzchigua_thumb.gif\",\"value\":\"[yz吃瓜]\",\"picid\":\"\"},{\"phrase\":\"[yz好哇]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/yzhaowa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/yzhaowa_thumb.gif\",\"value\":\"[yz好哇]\",\"picid\":\"\"},{\"phrase\":\"[yz来看看]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/yzlaikankan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/yzlaikankan_thumb.gif\",\"value\":\"[yz来看看]\",\"picid\":\"\"},{\"phrase\":\"[yz焦糖舞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/yzjiaotangwu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/yzjiaotangwu_thumb.gif\",\"value\":\"[yz焦糖舞]\",\"picid\":\"\"},{\"phrase\":\"[yz放屁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/yzfangpi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/yzfangpi_thumb.gif\",\"value\":\"[yz放屁]\",\"picid\":\"\"},{\"phrase\":\"[yz吃苹果]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/yzchipingguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/yzchipingguo_thumb.gif\",\"value\":\"[yz吃苹果]\",\"picid\":\"\"},{\"phrase\":\"[yz太好了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/yztaihaole_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/61/yztaihaole_thumb.gif\",\"value\":\"[yz太好了]\",\"picid\":\"\"},{\"phrase\":\"[yz好紧张]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/yzhaojinzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"影子\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/yzhaojinzhang_thumb.gif\",\"value\":\"[yz好紧张]\",\"picid\":\"\"},{\"phrase\":\"[猥琐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/weisuo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e1/weisuo_thumb.gif\",\"value\":\"[猥琐]\",\"picid\":\"\"},{\"phrase\":\"[挑眉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/tiaomei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/tiaomei_thumb.gif\",\"value\":\"[挑眉]\",\"picid\":\"\"},{\"phrase\":\"[挑逗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/tiaodou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/tiaodou_thumb.gif\",\"value\":\"[挑逗]\",\"picid\":\"\"},{\"phrase\":\"[亲耳朵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/qinerduo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1c/qinerduo_thumb.gif\",\"value\":\"[亲耳朵]\",\"picid\":\"\"},{\"phrase\":\"[媚眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/meiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/meiyan_thumb.gif\",\"value\":\"[媚眼]\",\"picid\":\"\"},{\"phrase\":\"[冒个泡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/maogepao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/maogepao_thumb.gif\",\"value\":\"[冒个泡]\",\"picid\":\"\"},{\"phrase\":\"[囧耳朵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/jiongerduo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f0/jiongerduo_thumb.gif\",\"value\":\"[囧耳朵]\",\"picid\":\"\"},{\"phrase\":\"[鬼脸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/guilian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/guilian_thumb.gif\",\"value\":\"[鬼脸]\",\"picid\":\"\"},{\"phrase\":\"[放电]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/fangdian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/fangdian_thumb.gif\",\"value\":\"[放电]\",\"picid\":\"\"},{\"phrase\":\"[悲剧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/beiju_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大耳兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/beiju_thumb.gif\",\"value\":\"[悲剧]\",\"picid\":\"\"},{\"phrase\":\"[抚摸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/touch_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/touch_thumb.gif\",\"value\":\"[抚摸]\",\"picid\":\"\"},{\"phrase\":\"[大汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/sweat_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/sweat_thumb.gif\",\"value\":\"[大汗]\",\"picid\":\"\"},{\"phrase\":\"[大惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/suprise_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/suprise_thumb.gif\",\"value\":\"[大惊]\",\"picid\":\"\"},{\"phrase\":\"[惊哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/supcry_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/supcry_thumb.gif\",\"value\":\"[惊哭]\",\"picid\":\"\"},{\"phrase\":\"[星星眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/stareyes_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5c/stareyes_thumb.gif\",\"value\":\"[星星眼]\",\"picid\":\"\"},{\"phrase\":\"[好困]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/sleepy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/sleepy_thumb.gif\",\"value\":\"[好困]\",\"picid\":\"\"},{\"phrase\":\"[呕吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/sick_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/sick_thumb.gif\",\"value\":\"[呕吐]\",\"picid\":\"\"},{\"phrase\":\"[加我一个]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/plus1_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/plus1_thumb.gif\",\"value\":\"[加我一个]\",\"picid\":\"\"},{\"phrase\":\"[痞痞兔耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/pipioye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/pipioye_thumb.gif\",\"value\":\"[痞痞兔耶]\",\"picid\":\"\"},{\"phrase\":\"[mua]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/muamua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c6/muamua_thumb.gif\",\"value\":\"[mua]\",\"picid\":\"\"},{\"phrase\":\"[面抽]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/mianchou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/mianchou_thumb.gif\",\"value\":\"[面抽]\",\"picid\":\"\"},{\"phrase\":\"[大笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/laugh_thumb.gif\",\"value\":\"[大笑]\",\"picid\":\"\"},{\"phrase\":\"[揉]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/knead_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/knead_thumb.gif\",\"value\":\"[揉]\",\"picid\":\"\"},{\"phrase\":\"[痞痞兔囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/jiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/jiong_thumb.gif\",\"value\":\"[痞痞兔囧]\",\"picid\":\"\"},{\"phrase\":\"[哈尼兔耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/honeyoye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/honeyoye_thumb.gif\",\"value\":\"[哈尼兔耶]\",\"picid\":\"\"},{\"phrase\":\"[开心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/happy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/happy_thumb.gif\",\"value\":\"[开心]\",\"picid\":\"\"},{\"phrase\":\"[咬手帕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/handkerchief_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/handkerchief_thumb.gif\",\"value\":\"[咬手帕]\",\"picid\":\"\"},{\"phrase\":\"[去]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/go_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/go_thumb.gif\",\"value\":\"[去]\",\"picid\":\"\"},{\"phrase\":\"[晕死了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/dizzy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a4/dizzy_thumb.gif\",\"value\":\"[晕死了]\",\"picid\":\"\"},{\"phrase\":\"[大哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/cry_thumb.gif\",\"value\":\"[大哭]\",\"picid\":\"\"},{\"phrase\":\"[扇子遮面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/coverface_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/coverface_thumb.gif\",\"value\":\"[扇子遮面]\",\"picid\":\"\"},{\"phrase\":\"[怒气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/angery_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ea/angery_thumb.gif\",\"value\":\"[怒气]\",\"picid\":\"\"},{\"phrase\":\"[886]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/886_org.gif\",\"hot\":false,\"common\":false,\"category\":\"哈皮兔\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/886_thumb.gif\",\"value\":\"[886]\",\"picid\":\"\"},{\"phrase\":\"[白羊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/byz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/byz2_thumb.gif\",\"value\":\"[白羊]\",\"picid\":\"\"},{\"phrase\":\"[射手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/ssz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/46/ssz2_thumb.gif\",\"value\":\"[射手]\",\"picid\":\"\"},{\"phrase\":\"[双鱼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/syz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/syz2_thumb.gif\",\"value\":\"[双鱼]\",\"picid\":\"\"},{\"phrase\":\"[双子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/szz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/89/szz2_thumb.gif\",\"value\":\"[双子]\",\"picid\":\"\"},{\"phrase\":\"[天秤]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/tpz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/tpz2_thumb.gif\",\"value\":\"[天秤]\",\"picid\":\"\"},{\"phrase\":\"[天蝎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/txz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/txz2_thumb.gif\",\"value\":\"[天蝎]\",\"picid\":\"\"},{\"phrase\":\"[水瓶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/spz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/spz2_thumb.gif\",\"value\":\"[水瓶]\",\"picid\":\"\"},{\"phrase\":\"[处女]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/cnz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/cnz2_thumb.gif\",\"value\":\"[处女]\",\"picid\":\"\"},{\"phrase\":\"[金牛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/jnz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/jnz2_thumb.gif\",\"value\":\"[金牛]\",\"picid\":\"\"},{\"phrase\":\"[巨蟹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/jxz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/jxz2_thumb.gif\",\"value\":\"[巨蟹]\",\"picid\":\"\"},{\"phrase\":\"[狮子]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/leo2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/leo2_thumb.gif\",\"value\":\"[狮子]\",\"picid\":\"\"},{\"phrase\":\"[摩羯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/mjz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/16/mjz2_thumb.gif\",\"value\":\"[摩羯]\",\"picid\":\"\"},{\"phrase\":\"[天蝎座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/txz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/txz_thumb.gif\",\"value\":\"[天蝎座]\",\"picid\":\"\"},{\"phrase\":\"[天秤座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/tpz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/tpz_thumb.gif\",\"value\":\"[天秤座]\",\"picid\":\"\"},{\"phrase\":\"[双子座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/szz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/szz_thumb.gif\",\"value\":\"[双子座]\",\"picid\":\"\"},{\"phrase\":\"[双鱼座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/syz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/syz_thumb.gif\",\"value\":\"[双鱼座]\",\"picid\":\"\"},{\"phrase\":\"[射手座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/ssz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5d/ssz_thumb.gif\",\"value\":\"[射手座]\",\"picid\":\"\"},{\"phrase\":\"[水瓶座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/spz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/spz_thumb.gif\",\"value\":\"[水瓶座]\",\"picid\":\"\"},{\"phrase\":\"[摩羯座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/mjz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/mjz_thumb.gif\",\"value\":\"[摩羯座]\",\"picid\":\"\"},{\"phrase\":\"[狮子座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/leo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/leo_thumb.gif\",\"value\":\"[狮子座]\",\"picid\":\"\"},{\"phrase\":\"[巨蟹座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/jxz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/jxz_thumb.gif\",\"value\":\"[巨蟹座]\",\"picid\":\"\"},{\"phrase\":\"[金牛座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/jnz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/jnz_thumb.gif\",\"value\":\"[金牛座]\",\"picid\":\"\"},{\"phrase\":\"[处女座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/cnz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/cnz_thumb.gif\",\"value\":\"[处女座]\",\"picid\":\"\"},{\"phrase\":\"[白羊座]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/byz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"星座\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e0/byz_thumb.gif\",\"value\":\"[白羊座]\",\"picid\":\"\"},{\"phrase\":\"[爱心传递]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/aixincd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"爱心\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/aixincd_thumb.gif\",\"value\":\"[爱心传递]\",\"picid\":\"\"},{\"phrase\":\"[zxh得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/zxhdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/zxhdese_thumb.gif\",\"value\":\"[zxh得瑟]\",\"picid\":\"\"},{\"phrase\":\"[微微笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/xiaoheweixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/xiaoheweixiao_thumb.gif\",\"value\":\"[微微笑]\",\"picid\":\"\"},{\"phrase\":\"[特委屈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/xiaoheweiqu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/xiaoheweiqu_thumb.gif\",\"value\":\"[特委屈]\",\"picid\":\"\"},{\"phrase\":\"[我吐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/xiaohetua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/xiaohetua_thumb.gif\",\"value\":\"[我吐]\",\"picid\":\"\"},{\"phrase\":\"[很生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/xiaoheshengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/66/xiaoheshengqi_thumb.gif\",\"value\":\"[很生气]\",\"picid\":\"\"},{\"phrase\":\"[流鼻涕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/xiaoheliubiti_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/xiaoheliubiti_thumb.gif\",\"value\":\"[流鼻涕]\",\"picid\":\"\"},{\"phrase\":\"[默默哭泣]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/xiaohekuqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a0/xiaohekuqi_thumb.gif\",\"value\":\"[默默哭泣]\",\"picid\":\"\"},{\"phrase\":\"[小盒汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/xiaohehan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/xiaohehan_thumb.gif\",\"value\":\"[小盒汗]\",\"picid\":\"\"},{\"phrase\":\"[发呆中]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/xiaohefadai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/44/xiaohefadai_thumb.gif\",\"value\":\"[发呆中]\",\"picid\":\"\"},{\"phrase\":\"[不理你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/xiaohebulini_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/xiaohebulini_thumb.gif\",\"value\":\"[不理你]\",\"picid\":\"\"},{\"phrase\":\"[强烈鄙视]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/xiaohebishi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/xiaohebishi_thumb.gif\",\"value\":\"[强烈鄙视]\",\"picid\":\"\"},{\"phrase\":\"[烦躁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/fanzao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c5/fanzao_thumb.gif\",\"value\":\"[烦躁]\",\"picid\":\"\"},{\"phrase\":\"[呲牙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/ciya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/ciya_thumb.gif\",\"value\":\"[呲牙]\",\"picid\":\"\"},{\"phrase\":\"[有钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/youqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e6/youqian_thumb.gif\",\"value\":\"[有钱]\",\"picid\":\"\"},{\"phrase\":\"[微笑旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/weixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/weixiao_thumb.gif\",\"value\":\"[微笑旧]\",\"picid\":\"\"},{\"phrase\":\"[帅爆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/shuaibao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/shuaibao_thumb.gif\",\"value\":\"[帅爆]\",\"picid\":\"\"},{\"phrase\":\"[生气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/shengqi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0a/shengqi_thumb.gif\",\"value\":\"[生气]\",\"picid\":\"\"},{\"phrase\":\"[生病了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/shengbing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/shengbing_thumb.gif\",\"value\":\"[生病了]\",\"picid\":\"\"},{\"phrase\":\"[色眯眯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/semimi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/semimi_thumb.gif\",\"value\":\"[色眯眯]\",\"picid\":\"\"},{\"phrase\":\"[疲劳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/pilao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d1/pilao_thumb.gif\",\"value\":\"[疲劳]\",\"picid\":\"\"},{\"phrase\":\"[瞄]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/miao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/miao_thumb.gif\",\"value\":\"[瞄]\",\"picid\":\"\"},{\"phrase\":\"[哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/ku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/ku_thumb.gif\",\"value\":\"[哭]\",\"picid\":\"\"},{\"phrase\":\"[好可怜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/kelian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/76/kelian_thumb.gif\",\"value\":\"[好可怜]\",\"picid\":\"\"},{\"phrase\":\"[紧张]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/jinzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/jinzhang_thumb.gif\",\"value\":\"[紧张]\",\"picid\":\"\"},{\"phrase\":\"[惊讶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/jingya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/dc/jingya_thumb.gif\",\"value\":\"[惊讶]\",\"picid\":\"\"},{\"phrase\":\"[激动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/jidong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/jidong_thumb.gif\",\"value\":\"[激动]\",\"picid\":\"\"},{\"phrase\":\"[见钱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/jianqian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/jianqian_thumb.gif\",\"value\":\"[见钱]\",\"picid\":\"\"},{\"phrase\":\"[汗了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/han_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7d/han_thumb.gif\",\"value\":\"[汗了]\",\"picid\":\"\"},{\"phrase\":\"[奋斗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/fendou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"张小盒\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/fendou_thumb.gif\",\"value\":\"[奋斗]\",\"picid\":\"\"},{\"phrase\":\"[小人得志]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/xrdz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/xrdz_thumb.gif\",\"value\":\"[小人得志]\",\"picid\":\"\"},{\"phrase\":\"[哇哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/whh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cc/whh_thumb.gif\",\"value\":\"[哇哈哈]\",\"picid\":\"\"},{\"phrase\":\"[叹气]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/tq_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/tq_thumb.gif\",\"value\":\"[叹气]\",\"picid\":\"\"},{\"phrase\":\"[冻结]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/sjdj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d3/sjdj_thumb.gif\",\"value\":\"[冻结]\",\"picid\":\"\"},{\"phrase\":\"[切]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/q_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1d/q_thumb.gif\",\"value\":\"[切]\",\"picid\":\"\"},{\"phrase\":\"[悠嘻猴拍照]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/pz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/pz_thumb.gif\",\"value\":\"[悠嘻猴拍照]\",\"picid\":\"\"},{\"phrase\":\"[怕怕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/pp_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/pp_thumb.gif\",\"value\":\"[怕怕]\",\"picid\":\"\"},{\"phrase\":\"[怒吼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/nh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/nh_thumb.gif\",\"value\":\"[怒吼]\",\"picid\":\"\"},{\"phrase\":\"[膜拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mb2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/mb2_thumb.gif\",\"value\":\"[膜拜]\",\"picid\":\"\"},{\"phrase\":\"[路过]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/lg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/lg_thumb.gif\",\"value\":\"[路过]\",\"picid\":\"\"},{\"phrase\":\"[泪奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/lb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/34/lb_thumb.gif\",\"value\":\"[泪奔]\",\"picid\":\"\"},{\"phrase\":\"[脸变色]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lbs_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lbs_thumb.gif\",\"value\":\"[脸变色]\",\"picid\":\"\"},{\"phrase\":\"[亲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/kiss_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/kiss_thumb.gif\",\"value\":\"[亲]\",\"picid\":\"\"},{\"phrase\":\"[恐怖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/kb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/kb_thumb.gif\",\"value\":\"[恐怖]\",\"picid\":\"\"},{\"phrase\":\"[交给我吧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/jgwb_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/jgwb_thumb.gif\",\"value\":\"[交给我吧]\",\"picid\":\"\"},{\"phrase\":\"[欢欣鼓舞]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/hxgw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2b/hxgw_thumb.gif\",\"value\":\"[欢欣鼓舞]\",\"picid\":\"\"},{\"phrase\":\"[高兴]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/gx3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/gx3_thumb.gif\",\"value\":\"[高兴]\",\"picid\":\"\"},{\"phrase\":\"[尴尬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/gg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/gg_thumb.gif\",\"value\":\"[尴尬]\",\"picid\":\"\"},{\"phrase\":\"[发嗲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/fd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4e/fd_thumb.gif\",\"value\":\"[发嗲]\",\"picid\":\"\"},{\"phrase\":\"[犯错]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/fc_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/fc_thumb.gif\",\"value\":\"[犯错]\",\"picid\":\"\"},{\"phrase\":\"[得意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/dy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fb/dy_thumb.gif\",\"value\":\"[得意]\",\"picid\":\"\"},{\"phrase\":\"[吵闹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/cn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/cn_thumb.gif\",\"value\":\"[吵闹]\",\"picid\":\"\"},{\"phrase\":\"[冲锋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/cf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2f/cf_thumb.gif\",\"value\":\"[冲锋]\",\"picid\":\"\"},{\"phrase\":\"[抽耳光]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ceg_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/ceg_thumb.gif\",\"value\":\"[抽耳光]\",\"picid\":\"\"},{\"phrase\":\"[差得远呢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/cdyn_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/cdyn_thumb.gif\",\"value\":\"[差得远呢]\",\"picid\":\"\"},{\"phrase\":\"[被砸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/bz2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5a/bz2_thumb.gif\",\"value\":\"[被砸]\",\"picid\":\"\"},{\"phrase\":\"[拜托]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bt_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/bt_thumb.gif\",\"value\":\"[拜托]\",\"picid\":\"\"},{\"phrase\":\"[必胜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/bs3_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cf/bs3_thumb.gif\",\"value\":\"[必胜]\",\"picid\":\"\"},{\"phrase\":\"[不关我事]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/bgws_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/bgws_thumb.gif\",\"value\":\"[不关我事]\",\"picid\":\"\"},{\"phrase\":\"[上火]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bf_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/bf_thumb.gif\",\"value\":\"[上火]\",\"picid\":\"\"},{\"phrase\":\"[不倒翁]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/bdw_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/bdw_thumb.gif\",\"value\":\"[不倒翁]\",\"picid\":\"\"},{\"phrase\":\"[不错哦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/bco_org.gif\",\"hot\":false,\"common\":false,\"category\":\"悠嘻猴\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/79/bco_thumb.gif\",\"value\":\"[不错哦]\",\"picid\":\"\"},{\"phrase\":\"[yeah]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/yeah_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1a/yeah_thumb.gif\",\"value\":\"[yeah]\",\"picid\":\"\"},{\"phrase\":\"[喜欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/xh_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/xh_thumb.gif\",\"value\":\"[喜欢]\",\"picid\":\"\"},{\"phrase\":\"[心动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/xd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/xd_thumb.gif\",\"value\":\"[心动]\",\"picid\":\"\"},{\"phrase\":\"[无聊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/wl_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/wl_thumb.gif\",\"value\":\"[无聊]\",\"picid\":\"\"},{\"phrase\":\"[手舞足蹈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b2/gx_thumb.gif\",\"value\":\"[手舞足蹈]\",\"picid\":\"\"},{\"phrase\":\"[搞笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/gx2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/gx2_thumb.gif\",\"value\":\"[搞笑]\",\"picid\":\"\"},{\"phrase\":\"[痛哭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/gd_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/gd_thumb.gif\",\"value\":\"[痛哭]\",\"picid\":\"\"},{\"phrase\":\"[爆发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/fn2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/38/fn2_thumb.gif\",\"value\":\"[爆发]\",\"picid\":\"\"},{\"phrase\":\"[发奋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/d2_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/d2_thumb.gif\",\"value\":\"[发奋]\",\"picid\":\"\"},{\"phrase\":\"[不屑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/bx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"小新小浪\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/bx_thumb.gif\",\"value\":\"[不屑]\",\"picid\":\"\"},{\"phrase\":\"[dx拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/longniandx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/91/longniandx_thumb.gif\",\"value\":\"[dx拜年]\",\"picid\":\"\"},{\"phrase\":\"[dx炸弹]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/daxiongzhadan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/78/daxiongzhadan_thumb.gif\",\"value\":\"[dx炸弹]\",\"picid\":\"\"},{\"phrase\":\"[dx洗澡]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/daxiongxizao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/daxiongxizao_thumb.gif\",\"value\":\"[dx洗澡]\",\"picid\":\"\"},{\"phrase\":\"[dx握爪]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/daxiongwozhua_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ff/daxiongwozhua_thumb.gif\",\"value\":\"[dx握爪]\",\"picid\":\"\"},{\"phrase\":\"[dx数落]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/daxiongshuluo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4f/daxiongshuluo_thumb.gif\",\"value\":\"[dx数落]\",\"picid\":\"\"},{\"phrase\":\"[dx刷牙]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/daxiongshuaya_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f5/daxiongshuaya_thumb.gif\",\"value\":\"[dx刷牙]\",\"picid\":\"\"},{\"phrase\":\"[dx傻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/daxiongsha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/daxiongsha_thumb.gif\",\"value\":\"[dx傻]\",\"picid\":\"\"},{\"phrase\":\"[dx晒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/daxiongshai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/daxiongshai_thumb.gif\",\"value\":\"[dx晒]\",\"picid\":\"\"},{\"phrase\":\"[dx抛媚眼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/daxiongpaomeiyan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/daxiongpaomeiyan_thumb.gif\",\"value\":\"[dx抛媚眼]\",\"picid\":\"\"},{\"phrase\":\"[dx拍拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/daxiongpaipaishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/daxiongpaipaishou_thumb.gif\",\"value\":\"[dx拍拍手]\",\"picid\":\"\"},{\"phrase\":\"[dx耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/daxiongoye_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/daxiongoye_thumb.gif\",\"value\":\"[dx耶]\",\"picid\":\"\"},{\"phrase\":\"[dx扭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/daxiongniu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/daxiongniu_thumb.gif\",\"value\":\"[dx扭]\",\"picid\":\"\"},{\"phrase\":\"[dx没有]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/daxiongmeiyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7f/daxiongmeiyou_thumb.gif\",\"value\":\"[dx没有]\",\"picid\":\"\"},{\"phrase\":\"[dx卖萌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/daxiongmaimeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/51/daxiongmaimeng_thumb.gif\",\"value\":\"[dx卖萌]\",\"picid\":\"\"},{\"phrase\":\"[dx脸红]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/daxionglianhong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b7/daxionglianhong_thumb.gif\",\"value\":\"[dx脸红]\",\"picid\":\"\"},{\"phrase\":\"[dx泪奔]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/daxiongleibenxiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/daxiongleibenxiong_thumb.gif\",\"value\":\"[dx泪奔]\",\"picid\":\"\"},{\"phrase\":\"[dx加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/daxiongjiayouxiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d7/daxiongjiayouxiong_thumb.gif\",\"value\":\"[dx加油]\",\"picid\":\"\"},{\"phrase\":\"[dx脚踏车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/daxiongjiaotache_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6a/daxiongjiaotache_thumb.gif\",\"value\":\"[dx脚踏车]\",\"picid\":\"\"},{\"phrase\":\"[dx花心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/daxionghuaxin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b9/daxionghuaxin_thumb.gif\",\"value\":\"[dx花心]\",\"picid\":\"\"},{\"phrase\":\"[dx欢乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/daxionghuanle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/daxionghuanle_thumb.gif\",\"value\":\"[dx欢乐]\",\"picid\":\"\"},{\"phrase\":\"[dx滑板]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/daxionghuaban_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9f/daxionghuaban_thumb.gif\",\"value\":\"[dx滑板]\",\"picid\":\"\"},{\"phrase\":\"[dx倒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/daxiongdao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/57/daxiongdao_thumb.gif\",\"value\":\"[dx倒]\",\"picid\":\"\"},{\"phrase\":\"[dx超人]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/daxiongchaoren_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/70/daxiongchaoren_thumb.gif\",\"value\":\"[dx超人]\",\"picid\":\"\"},{\"phrase\":\"[dx饱]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/daxiongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/27/daxiongbao_thumb.gif\",\"value\":\"[dx饱]\",\"picid\":\"\"},{\"phrase\":\"[dx哎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/daxiongai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"大熊\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/daxiongai_thumb.gif\",\"value\":\"[dx哎]\",\"picid\":\"\"},{\"phrase\":\"[笑哈哈]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/32/lxhwahaha_thumb.gif\",\"value\":\"[笑哈哈]\",\"picid\":\"\"},{\"phrase\":\"[转发]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhzhuanfa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/02/lxhzhuanfa_thumb.gif\",\"value\":\"[转发]\",\"picid\":\"\"},{\"phrase\":\"[得意地笑]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhdeyidixiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/lxhdeyidixiao_thumb.gif\",\"value\":\"[得意地笑]\",\"picid\":\"\"},{\"phrase\":\"[噢耶]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhxixi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhxixi_thumb.gif\",\"value\":\"[噢耶]\",\"picid\":\"\"},{\"phrase\":\"[偷乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhtouxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhtouxiao_thumb.gif\",\"value\":\"[偷乐]\",\"picid\":\"\"},{\"phrase\":\"[泪流满面]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/lxhtongku_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/64/lxhtongku_thumb.gif\",\"value\":\"[泪流满面]\",\"picid\":\"\"},{\"phrase\":\"[巨汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/lxhjuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/lxhjuhan_thumb.gif\",\"value\":\"[巨汗]\",\"picid\":\"\"},{\"phrase\":\"[抠鼻屎]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/lxhkoubishi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/48/lxhkoubishi_thumb.gif\",\"value\":\"[抠鼻屎]\",\"picid\":\"\"},{\"phrase\":\"[求关注]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhqiuguanzhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhqiuguanzhu_thumb.gif\",\"value\":\"[求关注]\",\"picid\":\"\"},{\"phrase\":\"[真V5]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/lxhv5_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3a/lxhv5_thumb.gif\",\"value\":\"[真V5]\",\"picid\":\"\"},{\"phrase\":\"[群体围观]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/lxhweiguan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/lxhweiguan_thumb.gif\",\"value\":\"[群体围观]\",\"picid\":\"\"},{\"phrase\":\"[hold住]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/lxhholdzhu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/05/lxhholdzhu_thumb.gif\",\"value\":\"[hold住]\",\"picid\":\"\"},{\"phrase\":\"[羞嗒嗒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/lxhxiudada_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/df/lxhxiudada_thumb.gif\",\"value\":\"[羞嗒嗒]\",\"picid\":\"\"},{\"phrase\":\"[非常汗]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/lxhpubuhan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/lxhpubuhan_thumb.gif\",\"value\":\"[非常汗]\",\"picid\":\"\"},{\"phrase\":\"[许愿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/lxhxuyuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/lxhxuyuan_thumb.gif\",\"value\":\"[许愿]\",\"picid\":\"\"},{\"phrase\":\"[崩溃]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/lxhzhuakuang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c7/lxhzhuakuang_thumb.gif\",\"value\":\"[崩溃]\",\"picid\":\"\"},{\"phrase\":\"[好囧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/lxhhaojiong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/lxhhaojiong_thumb.gif\",\"value\":\"[好囧]\",\"picid\":\"\"},{\"phrase\":\"[震惊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/lxhchijing_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e7/lxhchijing_thumb.gif\",\"value\":\"[震惊]\",\"picid\":\"\"},{\"phrase\":\"[别烦我]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/lxhbiefanwo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/lxhbiefanwo_thumb.gif\",\"value\":\"[别烦我]\",\"picid\":\"\"},{\"phrase\":\"[不好意思]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/lxhbuhaoyisi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b4/lxhbuhaoyisi_thumb.gif\",\"value\":\"[不好意思]\",\"picid\":\"\"},{\"phrase\":\"[纠结]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/lxhjiujie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1f/lxhjiujie_thumb.gif\",\"value\":\"[纠结]\",\"picid\":\"\"},{\"phrase\":\"[拍手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/lxhguzhang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/lxhguzhang_thumb.gif\",\"value\":\"[拍手]\",\"picid\":\"\"},{\"phrase\":\"[给劲]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/lxhgeili_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/lxhgeili_thumb.gif\",\"value\":\"[给劲]\",\"picid\":\"\"},{\"phrase\":\"[好喜欢]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhlike_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhlike_thumb.gif\",\"value\":\"[好喜欢]\",\"picid\":\"\"},{\"phrase\":\"[好爱哦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/lxhainio_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/lxhainio_thumb.gif\",\"value\":\"[好爱哦]\",\"picid\":\"\"},{\"phrase\":\"[路过这儿]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhluguo_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ac/lxhluguo_thumb.gif\",\"value\":\"[路过这儿]\",\"picid\":\"\"},{\"phrase\":\"[悲催]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhbeicui_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhbeicui_thumb.gif\",\"value\":\"[悲催]\",\"picid\":\"\"},{\"phrase\":\"[不想上班]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/lxhbuxiangshangban_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/lxhbuxiangshangban_thumb.gif\",\"value\":\"[不想上班]\",\"picid\":\"\"},{\"phrase\":\"[躁狂症]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/lxhzaokuangzheng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/lxhzaokuangzheng_thumb.gif\",\"value\":\"[躁狂症]\",\"picid\":\"\"},{\"phrase\":\"[甩甩手]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/lxhshuaishuaishou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a6/lxhshuaishuaishou_thumb.gif\",\"value\":\"[甩甩手]\",\"picid\":\"\"},{\"phrase\":\"[瞧瞧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/lxhqiaoqiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/lxhqiaoqiao_thumb.gif\",\"value\":\"[瞧瞧]\",\"picid\":\"\"},{\"phrase\":\"[同意]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhtongyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/lxhtongyi_thumb.gif\",\"value\":\"[同意]\",\"picid\":\"\"},{\"phrase\":\"[喝多了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/lxhheduole_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a7/lxhheduole_thumb.gif\",\"value\":\"[喝多了]\",\"picid\":\"\"},{\"phrase\":\"[啦啦啦啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhlalalala_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhlalalala_thumb.gif\",\"value\":\"[啦啦啦啦]\",\"picid\":\"\"},{\"phrase\":\"[杰克逊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/lxhjiekexun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/lxhjiekexun_thumb.gif\",\"value\":\"[杰克逊]\",\"picid\":\"\"},{\"phrase\":\"[雷锋]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/lxhleifeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7a/lxhleifeng_thumb.gif\",\"value\":\"[雷锋]\",\"picid\":\"\"},{\"phrase\":\"[带感]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/lxhdaigan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/lxhdaigan_thumb.gif\",\"value\":\"[带感]\",\"picid\":\"\"},{\"phrase\":\"[亲一口]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/lxhqinyikou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/88/lxhqinyikou_thumb.gif\",\"value\":\"[亲一口]\",\"picid\":\"\"},{\"phrase\":\"[飞个吻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/lxhblowakiss_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8a/lxhblowakiss_thumb.gif\",\"value\":\"[飞个吻]\",\"picid\":\"\"},{\"phrase\":\"[加油啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhjiayou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/lxhjiayou_thumb.gif\",\"value\":\"[加油啊]\",\"picid\":\"\"},{\"phrase\":\"[七夕]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/lxhqixi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/lxhqixi_thumb.gif\",\"value\":\"[七夕]\",\"picid\":\"\"},{\"phrase\":\"[困死了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhkunsile_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhkunsile_thumb.gif\",\"value\":\"[困死了]\",\"picid\":\"\"},{\"phrase\":\"[有鸭梨]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/lxhyouyali_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/lxhyouyali_thumb.gif\",\"value\":\"[有鸭梨]\",\"picid\":\"\"},{\"phrase\":\"[右边亮了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/lxhliangle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/lxhliangle_thumb.gif\",\"value\":\"[右边亮了]\",\"picid\":\"\"},{\"phrase\":\"[撒花]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/lxhfangjiala_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/lxhfangjiala_thumb.gif\",\"value\":\"[撒花]\",\"picid\":\"\"},{\"phrase\":\"[好棒]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/lxhhaobang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/lxhhaobang_thumb.gif\",\"value\":\"[好棒]\",\"picid\":\"\"},{\"phrase\":\"[想一想]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/lxhxiangyixiang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/lxhxiangyixiang_thumb.gif\",\"value\":\"[想一想]\",\"picid\":\"\"},{\"phrase\":\"[下班]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhxiaban_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhxiaban_thumb.gif\",\"value\":\"[下班]\",\"picid\":\"\"},{\"phrase\":\"[最右]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/lxhzuiyou_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/c8/lxhzuiyou_thumb.gif\",\"value\":\"[最右]\",\"picid\":\"\"},{\"phrase\":\"[丘比特]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/lxhqiubite_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/35/lxhqiubite_thumb.gif\",\"value\":\"[丘比特]\",\"picid\":\"\"},{\"phrase\":\"[中箭]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/lxhzhongjian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/81/lxhzhongjian_thumb.gif\",\"value\":\"[中箭]\",\"picid\":\"\"},{\"phrase\":\"[互相膜拜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/lxhhuxiangmobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/lxhhuxiangmobai_thumb.gif\",\"value\":\"[互相膜拜]\",\"picid\":\"\"},{\"phrase\":\"[膜拜了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhmobai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhmobai_thumb.gif\",\"value\":\"[膜拜了]\",\"picid\":\"\"},{\"phrase\":\"[放电抛媚]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/lxhfangdianpaomei_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d0/lxhfangdianpaomei_thumb.gif\",\"value\":\"[放电抛媚]\",\"picid\":\"\"},{\"phrase\":\"[霹雳]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/lxhshandian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/41/lxhshandian_thumb.gif\",\"value\":\"[霹雳]\",\"picid\":\"\"},{\"phrase\":\"[被电]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/lxhbeidian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/lxhbeidian_thumb.gif\",\"value\":\"[被电]\",\"picid\":\"\"},{\"phrase\":\"[拍砖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhpaizhuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/lxhpaizhuan_thumb.gif\",\"value\":\"[拍砖]\",\"picid\":\"\"},{\"phrase\":\"[互相拍砖]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/lxhhuxiangpaizhuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/lxhhuxiangpaizhuan_thumb.gif\",\"value\":\"[互相拍砖]\",\"picid\":\"\"},{\"phrase\":\"[采访]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/lxhcaifang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8b/lxhcaifang_thumb.gif\",\"value\":\"[采访]\",\"picid\":\"\"},{\"phrase\":\"[发表言论]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/lxhfabiaoyanlun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f1/lxhfabiaoyanlun_thumb.gif\",\"value\":\"[发表言论]\",\"picid\":\"\"},{\"phrase\":\"[江南style]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/gangnamstyle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/67/gangnamstyle_thumb.gif\",\"value\":\"[江南style]\",\"picid\":\"\"},{\"phrase\":\"[牛]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lxhniu_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lxhniu_thumb.gif\",\"value\":\"[牛]\",\"picid\":\"\"},{\"phrase\":\"[玫瑰]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/lxhrose_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/lxhrose_thumb.gif\",\"value\":\"[玫瑰]\",\"picid\":\"\"},{\"phrase\":\"[赞啊]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhzan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/00/lxhzan_thumb.gif\",\"value\":\"[赞啊]\",\"picid\":\"\"},{\"phrase\":\"[推荐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/lxhtuijian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e9/lxhtuijian_thumb.gif\",\"value\":\"[推荐]\",\"picid\":\"\"},{\"phrase\":\"[放假啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhfangjiale_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/37/lxhfangjiale_thumb.gif\",\"value\":\"[放假啦]\",\"picid\":\"\"},{\"phrase\":\"[萌翻]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/lxhmengfan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/99/lxhmengfan_thumb.gif\",\"value\":\"[萌翻]\",\"picid\":\"\"},{\"phrase\":\"[吃货]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lxhgreedy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ba/lxhgreedy_thumb.gif\",\"value\":\"[吃货]\",\"picid\":\"\"},{\"phrase\":\"[大南瓜]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/lxhpumpkin_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/lxhpumpkin_thumb.gif\",\"value\":\"[大南瓜]\",\"picid\":\"\"},{\"phrase\":\"[立志青年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lxhlizhiqingnian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f9/lxhlizhiqingnian_thumb.gif\",\"value\":\"[立志青年]\",\"picid\":\"\"},{\"phrase\":\"[得瑟]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/lxhdese_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/lxhdese_thumb.gif\",\"value\":\"[得瑟]\",\"picid\":\"\"},{\"phrase\":\"[月儿圆]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhyueeryuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/3d/lxhyueeryuan_thumb.gif\",\"value\":\"[月儿圆]\",\"picid\":\"\"},{\"phrase\":\"[微博三岁啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/lxhweibo3yr_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/lxhweibo3yr_thumb.gif\",\"value\":\"[微博三岁啦]\",\"picid\":\"\"},{\"phrase\":\"[复活节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhfuhuojie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d6/lxhfuhuojie_thumb.gif\",\"value\":\"[复活节]\",\"picid\":\"\"},{\"phrase\":\"[愚人节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/lxhyurenjie_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/21/lxhyurenjie_thumb.gif\",\"value\":\"[愚人节]\",\"picid\":\"\"},{\"phrase\":\"[收藏]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/lxhshoucang_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/lxhshoucang_thumb.gif\",\"value\":\"[收藏]\",\"picid\":\"\"},{\"phrase\":\"[喜得金牌]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/lxhhappygold_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/lxhhappygold_thumb.gif\",\"value\":\"[喜得金牌]\",\"picid\":\"\"},{\"phrase\":\"[夺冠感动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/lxhduoguan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/lxhduoguan_thumb.gif\",\"value\":\"[夺冠感动]\",\"picid\":\"\"},{\"phrase\":\"[冠军诞生]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/lxhguanjun_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/lxhguanjun_thumb.gif\",\"value\":\"[冠军诞生]\",\"picid\":\"\"},{\"phrase\":\"[传火炬]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhchuanhuoju_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f2/lxhchuanhuoju_thumb.gif\",\"value\":\"[传火炬]\",\"picid\":\"\"},{\"phrase\":\"[奥运金牌_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/lxhgold_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/06/lxhgold_thumb.gif\",\"value\":\"[奥运金牌_旧]\",\"picid\":\"\"},{\"phrase\":\"[奥运银牌_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhbronze_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/lxhbronze_thumb.gif\",\"value\":\"[奥运银牌_旧]\",\"picid\":\"\"},{\"phrase\":\"[奥运铜牌_旧]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/lxhsilver_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/lxhsilver_thumb.gif\",\"value\":\"[奥运铜牌_旧]\",\"picid\":\"\"},{\"phrase\":\"[德国加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/germany_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/12/germany_thumb.gif\",\"value\":\"[德国加油]\",\"picid\":\"\"},{\"phrase\":\"[西班牙队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/spain_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/spain_thumb.gif\",\"value\":\"[西班牙队加油]\",\"picid\":\"\"},{\"phrase\":\"[葡萄牙队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/portugal_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f8/portugal_thumb.gif\",\"value\":\"[葡萄牙队加油]\",\"picid\":\"\"},{\"phrase\":\"[意大利队加油]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/italy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/03/italy_thumb.gif\",\"value\":\"[意大利队加油]\",\"picid\":\"\"},{\"phrase\":\"[耍花灯]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/lxhshuahuadeng_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/be/lxhshuahuadeng_thumb.gif\",\"value\":\"[耍花灯]\",\"picid\":\"\"},{\"phrase\":\"[元宵快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/lxhyuanxiaohappy_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/lxhyuanxiaohappy_thumb.gif\",\"value\":\"[元宵快乐]\",\"picid\":\"\"},{\"phrase\":\"[吃元宵]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhchitangyuan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/52/lxhchitangyuan_thumb.gif\",\"value\":\"[吃元宵]\",\"picid\":\"\"},{\"phrase\":\"[金元宝]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/lxhjinyuanbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9b/lxhjinyuanbao_thumb.gif\",\"value\":\"[金元宝]\",\"picid\":\"\"},{\"phrase\":\"[红包拿来]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/lxhhongbaonalai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/lxhhongbaonalai_thumb.gif\",\"value\":\"[红包拿来]\",\"picid\":\"\"},{\"phrase\":\"[福到啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/lxhfudaola_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/f4/lxhfudaola_thumb.gif\",\"value\":\"[福到啦]\",\"picid\":\"\"},{\"phrase\":\"[放鞭炮]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/lxhbianpao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/bd/lxhbianpao_thumb.gif\",\"value\":\"[放鞭炮]\",\"picid\":\"\"},{\"phrase\":\"[大红灯笼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/lxhdahongdenglong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/90/lxhdahongdenglong_thumb.gif\",\"value\":\"[大红灯笼]\",\"picid\":\"\"},{\"phrase\":\"[拜年了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/lxhbainianle_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0c/lxhbainianle_thumb.gif\",\"value\":\"[拜年了]\",\"picid\":\"\"},{\"phrase\":\"[龙啸]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lxhlongxiao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/cd/lxhlongxiao_thumb.gif\",\"value\":\"[龙啸]\",\"picid\":\"\"},{\"phrase\":\"[光棍节]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/lxh1111_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5b/lxh1111_thumb.gif\",\"value\":\"[光棍节]\",\"picid\":\"\"},{\"phrase\":\"[带着微博去旅行]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/eventtravel_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ec/eventtravel_thumb.gif\",\"value\":\"[带着微博去旅行]\",\"picid\":\"\"},{\"phrase\":\"[爱红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/aihongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/aihongbao_thumb.gif\",\"value\":\"[爱红包]\",\"picid\":\"\"},{\"phrase\":\"[拍照]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/lxhpz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d5/lxhpz_thumb.gif\",\"value\":\"[拍照]\",\"picid\":\"\"},{\"phrase\":\"[发红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/fahongbao_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ca/fahongbao_thumb.gif\",\"value\":\"[发红包]\",\"picid\":\"\"},{\"phrase\":\"[冰桶挑战]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/bttz_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8d/bttz_thumb.gif\",\"value\":\"[冰桶挑战]\",\"picid\":\"\"},{\"phrase\":\"[欢乐购车季]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/hlgcj_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/69/hlgcj_thumb.gif\",\"value\":\"[欢乐购车季]\",\"picid\":\"\"},{\"phrase\":\"[去旅行]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/qlx_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/qlx_thumb.gif\",\"value\":\"[去旅行]\",\"picid\":\"\"},{\"phrase\":\"[肥皂]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/soap_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/e5/soap_thumb.gif\",\"value\":\"[肥皂]\",\"picid\":\"\"},{\"phrase\":\"[马上拜年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/mashangbainian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/mashangbainian_thumb.gif\",\"value\":\"[马上拜年]\",\"picid\":\"\"},{\"phrase\":\"[求红包]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/lxhhongbao2014_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/lxhhongbao2014_thumb.gif\",\"value\":\"[求红包]\",\"picid\":\"\"},{\"phrase\":\"[微公益爱心]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lxhgongyi_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/11/lxhgongyi_thumb.gif\",\"value\":\"[微公益爱心]\",\"picid\":\"\"},{\"phrase\":\"[会员一周年]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/vipanniversary_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/19/vipanniversary_thumb.gif\",\"value\":\"[会员一周年]\",\"picid\":\"\"},{\"phrase\":\"[蛇年快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/lxhshenian_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/lxhshenian_thumb.gif\",\"value\":\"[蛇年快乐]\",\"picid\":\"\"},{\"phrase\":\"[过年啦]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/lxhguonianla_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/94/lxhguonianla_thumb.gif\",\"value\":\"[过年啦]\",\"picid\":\"\"},{\"phrase\":\"[圆蛋快乐]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/lxhyuandan_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/eb/lxhyuandan_thumb.gif\",\"value\":\"[圆蛋快乐]\",\"picid\":\"\"},{\"phrase\":\"[发礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lxh_santa_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/24/lxh_santa_thumb.gif\",\"value\":\"[发礼物]\",\"picid\":\"\"},{\"phrase\":\"[要礼物]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/lxh_gift_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/d2/lxh_gift_thumb.gif\",\"value\":\"[要礼物]\",\"picid\":\"\"},{\"phrase\":\"[平安果]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/lxh_apple_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/0f/lxh_apple_thumb.gif\",\"value\":\"[平安果]\",\"picid\":\"\"},{\"phrase\":\"[吓到了]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhscare_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/lxhscare_thumb.gif\",\"value\":\"[吓到了]\",\"picid\":\"\"},{\"phrase\":\"[走你]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/zouni_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ed/zouni_thumb.gif\",\"value\":\"[走你]\",\"picid\":\"\"},{\"phrase\":\"[吐血]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhtuxue_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/lxhtuxue_thumb.gif\",\"value\":\"[吐血]\",\"picid\":\"\"},{\"phrase\":\"[好激动]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/lxhjidong_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/lxhjidong_thumb.gif\",\"value\":\"[好激动]\",\"picid\":\"\"},{\"phrase\":\"[没人疼]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/lxhlonely_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/23/lxhlonely_thumb.gif\",\"value\":\"[没人疼]\",\"picid\":\"\"},{\"phrase\":\"[招财]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/lxhzhaocai_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a9/lxhzhaocai_thumb.gif\",\"value\":\"[招财]\",\"picid\":\"\"},{\"phrase\":\"[挤火车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/lxhjihuoche_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/lxhjihuoche_thumb.gif\",\"value\":\"[挤火车]\",\"picid\":\"\"},{\"phrase\":\"[赶火车]\",\"type\":\"face\",\"url\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/lxhganhuoche_org.gif\",\"hot\":false,\"common\":false,\"category\":\"浪小花\",\"icon\":\"http://img.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/lxhganhuoche_thumb.gif\",\"value\":\"[赶火车]\",\"picid\":\"\"}]"
  },
  {
    "path": "public/assets/dashboard/wangeditor/js/lib/jquery-2.2.1.js",
    "content": "/*!\n * jQuery JavaScript Library v2.2.1\n * http://jquery.com/\n *\n * Includes Sizzle.js\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-02-22T19:11Z\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//\"use strict\";\nvar arr = [];\n\nvar document = window.document;\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\tversion = \"2.2.1\",\n\n\t// Define a local copy of jQuery\n\tjQuery = function( selector, context ) {\n\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\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\teach: function( callback ) {\n\t\treturn jQuery.each( this, callback );\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();\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\n\t\t// Only deal with non-null/undefined values\n\t\tif ( ( options = arguments[ i ] ) != null ) {\n\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 ) ||\n\t\t\t\t\t( copyIsArray = jQuery.isArray( copy ) ) ) ) {\n\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\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\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\tvar realStringObj = obj && obj.toString();\n\t\treturn !jQuery.isArray( obj ) && ( realStringObj - parseFloat( realStringObj ) + 1 ) >= 0;\n\t},\n\n\tisPlainObject: function( obj ) {\n\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\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\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\n\t\t\t\t// Otherwise, avoid the DOM node creation, insertion\n\t\t\t\t// and removal by using an indirect global eval\n\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\teach: function( obj, callback ) {\n\t\tvar length, i = 0;\n\n\t\tif ( isArrayLike( obj ) ) {\n\t\t\tlength = obj.length;\n\t\t\tfor ( ; i < length; i++ ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tfor ( i in obj ) {\n\t\t\t\tif ( callback.call( obj[ i ], i, obj[ i ] ) === false ) {\n\t\t\t\t\tbreak;\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 length, value,\n\t\t\ti = 0,\n\t\t\tret = [];\n\n\t\t// Go through the array, translating each of the items to their new values\n\t\tif ( isArrayLike( elems ) ) {\n\t\t\tlength = elems.length;\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// JSHint would error on this code due to the Symbol not being defined in ES5.\n// Defining this global in .jshintrc would create a danger of using the global\n// unguarded in another place, it seems safer to just disable JSHint for these\n// three lines.\n/* jshint ignore: start */\nif ( typeof Symbol === \"function\" ) {\n\tjQuery.fn[ Symbol.iterator ] = arr[ Symbol.iterator ];\n}\n/* jshint ignore: end */\n\n// Populate the class2type map\njQuery.each( \"Boolean Number String Function Array Date RegExp Object Error Symbol\".split( \" \" ),\nfunction( 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 = !!obj && \"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\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.1\n * http://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2015-10-17\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// http://www.w3.org/TR/css3-selectors/#whitespace\n\twhitespace = \"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",\n\n\t// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier\n\tidentifier = \"(?:\\\\\\\\.|[\\\\w-]|[^\\\\x00-\\\\xa0])+\",\n\n\t// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors\n\tattributes = \"\\\\[\" + whitespace + \"*(\" + identifier + \")(?:\" + 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 = \":(\" + identifier + \")(?:\\\\((\" +\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( \"^#(\" + identifier + \")\" ),\n\t\t\"CLASS\": new RegExp( \"^\\\\.(\" + identifier + \")\" ),\n\t\t\"TAG\": new RegExp( \"^(\" + identifier + \"|[*])\" ),\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 m, i, elem, nid, nidselect, match, groups, newSelector,\n\t\tnewContext = context && context.ownerDocument,\n\n\t\t// nodeType defaults to 9, since context defaults to document\n\t\tnodeType = context ? context.nodeType : 9;\n\n\tresults = results || [];\n\n\t// Return early from calls with invalid selector or context\n\tif ( typeof selector !== \"string\" || !selector ||\n\t\tnodeType !== 1 && nodeType !== 9 && nodeType !== 11 ) {\n\n\t\treturn results;\n\t}\n\n\t// Try to shortcut find operations (as opposed to filters) in HTML documents\n\tif ( !seed ) {\n\n\t\tif ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {\n\t\t\tsetDocument( context );\n\t\t}\n\t\tcontext = context || document;\n\n\t\tif ( documentIsHTML ) {\n\n\t\t\t// If the selector is sufficiently simple, try using a \"get*By*\" DOM method\n\t\t\t// (excepting DocumentFragment context, where the methods don't exist)\n\t\t\tif ( nodeType !== 11 && (match = rquickExpr.exec( selector )) ) {\n\n\t\t\t\t// ID selector\n\t\t\t\tif ( (m = match[1]) ) {\n\n\t\t\t\t\t// Document context\n\t\t\t\t\tif ( nodeType === 9 ) {\n\t\t\t\t\t\tif ( (elem = context.getElementById( m )) ) {\n\n\t\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\t\tif ( elem.id === m ) {\n\t\t\t\t\t\t\t\tresults.push( elem );\n\t\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\treturn results;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// Element context\n\t\t\t\t\t} else {\n\n\t\t\t\t\t\t// Support: IE, Opera, Webkit\n\t\t\t\t\t\t// TODO: identify versions\n\t\t\t\t\t\t// getElementById can match elements by name instead of ID\n\t\t\t\t\t\tif ( newContext && (elem = newContext.getElementById( m )) &&\n\t\t\t\t\t\t\tcontains( context, elem ) &&\n\t\t\t\t\t\t\telem.id === m ) {\n\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}\n\n\t\t\t\t// Type selector\n\t\t\t\t} else if ( match[2] ) {\n\t\t\t\t\tpush.apply( results, context.getElementsByTagName( selector ) );\n\t\t\t\t\treturn results;\n\n\t\t\t\t// Class selector\n\t\t\t\t} else if ( (m = match[3]) && support.getElementsByClassName &&\n\t\t\t\t\tcontext.getElementsByClassName ) {\n\n\t\t\t\t\tpush.apply( results, context.getElementsByClassName( m ) );\n\t\t\t\t\treturn results;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Take advantage of querySelectorAll\n\t\t\tif ( support.qsa &&\n\t\t\t\t!compilerCache[ selector + \" \" ] &&\n\t\t\t\t(!rbuggyQSA || !rbuggyQSA.test( selector )) ) {\n\n\t\t\t\tif ( nodeType !== 1 ) {\n\t\t\t\t\tnewContext = context;\n\t\t\t\t\tnewSelector = selector;\n\n\t\t\t\t// qSA looks outside Element context, which is not what we want\n\t\t\t\t// Thanks to Andrew Dupont for this workaround technique\n\t\t\t\t// Support: IE <=8\n\t\t\t\t// Exclude object elements\n\t\t\t\t} else if ( context.nodeName.toLowerCase() !== \"object\" ) {\n\n\t\t\t\t\t// Capture the context ID, setting it first if necessary\n\t\t\t\t\tif ( (nid = context.getAttribute( \"id\" )) ) {\n\t\t\t\t\t\tnid = nid.replace( rescape, \"\\\\$&\" );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tcontext.setAttribute( \"id\", (nid = expando) );\n\t\t\t\t\t}\n\n\t\t\t\t\t// Prefix every selector in the list\n\t\t\t\t\tgroups = tokenize( selector );\n\t\t\t\t\ti = groups.length;\n\t\t\t\t\tnidselect = ridentifier.test( nid ) ? \"#\" + nid : \"[id='\" + nid + \"']\";\n\t\t\t\t\twhile ( i-- ) {\n\t\t\t\t\t\tgroups[i] = nidselect + \" \" + toSelector( groups[i] );\n\t\t\t\t\t}\n\t\t\t\t\tnewSelector = groups.join( \",\" );\n\n\t\t\t\t\t// Expand context for sibling selectors\n\t\t\t\t\tnewContext = rsibling.test( selector ) && testContext( context.parentNode ) ||\n\t\t\t\t\t\tcontext;\n\t\t\t\t}\n\n\t\t\t\tif ( newSelector ) {\n\t\t\t\t\ttry {\n\t\t\t\t\t\tpush.apply( results,\n\t\t\t\t\t\t\tnewContext.querySelectorAll( newSelector )\n\t\t\t\t\t\t);\n\t\t\t\t\t\treturn results;\n\t\t\t\t\t} catch ( qsaError ) {\n\t\t\t\t\t} finally {\n\t\t\t\t\t\tif ( nid === expando ) {\n\t\t\t\t\t\t\tcontext.removeAttribute( \"id\" );\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\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 = arr.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// Return early if doc is invalid or already selected\n\tif ( doc === document || doc.nodeType !== 9 || !doc.documentElement ) {\n\t\treturn document;\n\t}\n\n\t// Update global variables\n\tdocument = doc;\n\tdocElem = document.documentElement;\n\tdocumentIsHTML = !isXML( document );\n\n\t// Support: IE 9-11, Edge\n\t// Accessing iframe documents after unload throws \"permission denied\" errors (jQuery #13936)\n\tif ( (parent = document.defaultView) && parent.top !== parent ) {\n\t\t// Support: IE 11\n\t\tif ( parent.addEventListener ) {\n\t\t\tparent.addEventListener( \"unload\", unloadHandler, false );\n\n\t\t// Support: IE 9 - 10 only\n\t\t} else if ( parent.attachEvent ) {\n\t\t\tparent.attachEvent( \"onunload\", unloadHandler );\n\t\t}\n\t}\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( document.createComment(\"\") );\n\t\treturn !div.getElementsByTagName(\"*\").length;\n\t});\n\n\t// Support: IE<9\n\tsupport.getElementsByClassName = rnative.test( document.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 !document.getElementsByName || !document.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\treturn m ? [ 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\" &&\n\t\t\t\t\telem.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 ( typeof context.getElementsByClassName !== \"undefined\" && 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( document.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 + \"-\\r\\\\' 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.4, Safari<7.0+, iOS<7.0+, PhantomJS<1.9.8+\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 = document.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 self-exclusive\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 === document || a.ownerDocument === preferredDoc && contains(preferredDoc, a) ) {\n\t\t\t\treturn -1;\n\t\t\t}\n\t\t\tif ( b === document || 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 === document ? -1 :\n\t\t\t\tb === document ? 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 document;\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!compilerCache[ expr + \" \" ] &&\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, uniqueCache, outerCache, node, 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\t\t\t\t\t\tdiff = false;\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 ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) {\n\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\n\t\t\t\t\t\t\t// Seek `elem` from a previously-cached index\n\n\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\tnode = parent;\n\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\tdiff = nodeIndex && 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\tuniqueCache[ 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} else {\n\t\t\t\t\t\t\t// Use previously-cached element index if available\n\t\t\t\t\t\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t// ...in a gzip-friendly way\n\t\t\t\t\t\t\t\tnode = elem;\n\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\tcache = uniqueCache[ type ] || [];\n\t\t\t\t\t\t\t\tnodeIndex = cache[ 0 ] === dirruns && cache[ 1 ];\n\t\t\t\t\t\t\t\tdiff = nodeIndex;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// xml :nth-child(...)\n\t\t\t\t\t\t\t// or :nth-last-child(...) or :nth(-last)?-of-type(...)\n\t\t\t\t\t\t\tif ( diff === false ) {\n\t\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\t\twhile ( (node = ++nodeIndex && node && node[ dir ] ||\n\t\t\t\t\t\t\t\t\t(diff = nodeIndex = 0) || start.pop()) ) {\n\n\t\t\t\t\t\t\t\t\tif ( ( ofType ?\n\t\t\t\t\t\t\t\t\t\tnode.nodeName.toLowerCase() === name :\n\t\t\t\t\t\t\t\t\t\tnode.nodeType === 1 ) &&\n\t\t\t\t\t\t\t\t\t\t++diff ) {\n\n\t\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\t\tif ( useCache ) {\n\t\t\t\t\t\t\t\t\t\t\touterCache = node[ expando ] || (node[ expando ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache = outerCache[ node.uniqueID ] ||\n\t\t\t\t\t\t\t\t\t\t\t\t(outerCache[ node.uniqueID ] = {});\n\n\t\t\t\t\t\t\t\t\t\t\tuniqueCache[ type ] = [ dirruns, diff ];\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tif ( node === elem ) {\n\t\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\t\t}\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, uniqueCache, 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 combinator 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\n\t\t\t\t\t\t// Support: IE <9 only\n\t\t\t\t\t\t// Defend against cloned attroperties (jQuery gh-1709)\n\t\t\t\t\t\tuniqueCache = outerCache[ elem.uniqueID ] || (outerCache[ elem.uniqueID ] = {});\n\n\t\t\t\t\t\tif ( (oldCache = uniqueCache[ 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\tuniqueCache[ 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 || outermost;\n\t\t\t}\n\n\t\t\t// Add elements passing elementMatchers directly to results\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\tif ( !context && elem.ownerDocument !== document ) {\n\t\t\t\t\t\tsetDocument( elem );\n\t\t\t\t\t\txml = !documentIsHTML;\n\t\t\t\t\t}\n\t\t\t\t\twhile ( (matcher = elementMatchers[j++]) ) {\n\t\t\t\t\t\tif ( matcher( elem, context || document, 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// `i` is now the count of elements visited above, and adding it to `matchedCount`\n\t\t\t// makes the latter nonnegative.\n\t\t\tmatchedCount += i;\n\n\t\t\t// Apply set filters to unmatched elements\n\t\t\t// NOTE: This can be skipped if there are no unmatched elements (i.e., `matchedCount`\n\t\t\t// equals `i`), unless we didn't visit _any_ elements in the above loop because we have\n\t\t\t// no element matchers and no seed.\n\t\t\t// Incrementing an initially-string \"0\" `i` allows `i` to remain a string only in that\n\t\t\t// case, which will result in a \"00\" `matchedCount` that differs from `i` but is also\n\t\t\t// numerically zero.\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 only one selector in the list and no seed\n\t// (the latter of which guarantees us context)\n\tif ( match.length === 1 ) {\n\n\t\t// Reduce context if the leading compound 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\t!context || rsibling.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.uniqueSort = jQuery.unique = Sizzle.uniqueSort;\njQuery.text = Sizzle.getText;\njQuery.isXMLDoc = Sizzle.isXML;\njQuery.contains = Sizzle.contains;\n\n\n\nvar dir = function( elem, dir, until ) {\n\tvar matched = [],\n\t\ttruncate = until !== undefined;\n\n\twhile ( ( elem = elem[ dir ] ) && elem.nodeType !== 9 ) {\n\t\tif ( elem.nodeType === 1 ) {\n\t\t\tif ( truncate && jQuery( elem ).is( until ) ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatched.push( elem );\n\t\t}\n\t}\n\treturn matched;\n};\n\n\nvar siblings = function( n, elem ) {\n\tvar matched = [];\n\n\tfor ( ; n; n = n.nextSibling ) {\n\t\tif ( n.nodeType === 1 && n !== elem ) {\n\t\t\tmatched.push( n );\n\t\t}\n\t}\n\n\treturn matched;\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 ) > -1 ) !== 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, root ) {\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// Method init() accepts an alternate rootjQuery\n\t\t// so migrate can support jQuery.sub (gh-2101)\n\t\troot = root || rootjQuery;\n\n\t\t// Handle HTML strings\n\t\tif ( typeof selector === \"string\" ) {\n\t\t\tif ( selector[ 0 ] === \"<\" &&\n\t\t\t\tselector[ selector.length - 1 ] === \">\" &&\n\t\t\t\tselector.length >= 3 ) {\n\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\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\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 || root ).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 root.ready !== undefined ?\n\t\t\t\troot.ready( selector ) :\n\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\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.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\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.uniqueSort( 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.uniqueSort(\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 dir( elem, \"parentNode\" );\n\t},\n\tparentsUntil: function( elem, i, until ) {\n\t\treturn 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 dir( elem, \"nextSibling\" );\n\t},\n\tprevAll: function( elem ) {\n\t\treturn dir( elem, \"previousSibling\" );\n\t},\n\tnextUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"nextSibling\", until );\n\t},\n\tprevUntil: function( elem, i, until ) {\n\t\treturn dir( elem, \"previousSibling\", until );\n\t},\n\tsiblings: function( elem ) {\n\t\treturn siblings( ( elem.parentNode || {} ).firstChild, elem );\n\t},\n\tchildren: function( elem ) {\n\t\treturn siblings( 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\n\t\t\t// Remove duplicates\n\t\t\tif ( !guaranteedUnique[ name ] ) {\n\t\t\t\tjQuery.uniqueSort( 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// Convert String-formatted options into Object-formatted ones\nfunction createOptions( options ) {\n\tvar object = {};\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\tcreateOptions( options ) :\n\t\tjQuery.extend( {}, options );\n\n\tvar // Flag to know if list is currently firing\n\t\tfiring,\n\n\t\t// Last fire value for non-forgettable lists\n\t\tmemory,\n\n\t\t// Flag to know if list was already fired\n\t\tfired,\n\n\t\t// Flag to prevent firing\n\t\tlocked,\n\n\t\t// Actual callback list\n\t\tlist = [],\n\n\t\t// Queue of execution data for repeatable lists\n\t\tqueue = [],\n\n\t\t// Index of currently firing callback (modified by add/remove as needed)\n\t\tfiringIndex = -1,\n\n\t\t// Fire callbacks\n\t\tfire = function() {\n\n\t\t\t// Enforce single-firing\n\t\t\tlocked = options.once;\n\n\t\t\t// Execute callbacks for all pending executions,\n\t\t\t// respecting firingIndex overrides and runtime changes\n\t\t\tfired = firing = true;\n\t\t\tfor ( ; queue.length; firingIndex = -1 ) {\n\t\t\t\tmemory = queue.shift();\n\t\t\t\twhile ( ++firingIndex < list.length ) {\n\n\t\t\t\t\t// Run callback and check for early termination\n\t\t\t\t\tif ( list[ firingIndex ].apply( memory[ 0 ], memory[ 1 ] ) === false &&\n\t\t\t\t\t\toptions.stopOnFalse ) {\n\n\t\t\t\t\t\t// Jump to end and forget the data so .add doesn't re-fire\n\t\t\t\t\t\tfiringIndex = list.length;\n\t\t\t\t\t\tmemory = false;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// Forget the data if we're done with it\n\t\t\tif ( !options.memory ) {\n\t\t\t\tmemory = false;\n\t\t\t}\n\n\t\t\tfiring = false;\n\n\t\t\t// Clean up if we're done firing for good\n\t\t\tif ( locked ) {\n\n\t\t\t\t// Keep an empty list if we have data for future add calls\n\t\t\t\tif ( memory ) {\n\t\t\t\t\tlist = [];\n\n\t\t\t\t// Otherwise, this object is spent\n\t\t\t\t} else {\n\t\t\t\t\tlist = \"\";\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\n\t\t// Actual Callbacks object\n\t\tself = {\n\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\n\t\t\t\t\t// If we have memory from a past run, we should fire after adding\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfiringIndex = list.length - 1;\n\t\t\t\t\t\tqueue.push( memory );\n\t\t\t\t\t}\n\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\tif ( jQuery.isFunction( arg ) ) {\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 && jQuery.type( arg ) !== \"string\" ) {\n\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\n\t\t\t\t\tif ( memory && !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Remove a callback from the list\n\t\t\tremove: function() {\n\t\t\t\tjQuery.each( arguments, function( _, arg ) {\n\t\t\t\t\tvar index;\n\t\t\t\t\twhile ( ( index = jQuery.inArray( arg, list, index ) ) > -1 ) {\n\t\t\t\t\t\tlist.splice( index, 1 );\n\n\t\t\t\t\t\t// Handle firing indexes\n\t\t\t\t\t\tif ( index <= firingIndex ) {\n\t\t\t\t\t\t\tfiringIndex--;\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\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 ?\n\t\t\t\t\tjQuery.inArray( fn, list ) > -1 :\n\t\t\t\t\tlist.length > 0;\n\t\t\t},\n\n\t\t\t// Remove all callbacks from the list\n\t\t\tempty: function() {\n\t\t\t\tif ( list ) {\n\t\t\t\t\tlist = [];\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\n\t\t\t// Disable .fire and .add\n\t\t\t// Abort any current/pending executions\n\t\t\t// Clear all callbacks and values\n\t\t\tdisable: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tlist = memory = \"\";\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tdisabled: function() {\n\t\t\t\treturn !list;\n\t\t\t},\n\n\t\t\t// Disable .fire\n\t\t\t// Also disable .add unless we have memory (since it would have no effect)\n\t\t\t// Abort any pending executions\n\t\t\tlock: function() {\n\t\t\t\tlocked = queue = [];\n\t\t\t\tif ( !memory ) {\n\t\t\t\t\tlist = memory = \"\";\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\t\t\tlocked: function() {\n\t\t\t\treturn !!locked;\n\t\t\t},\n\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 ( !locked ) {\n\t\t\t\t\targs = args || [];\n\t\t\t\t\targs = [ context, args.slice ? args.slice() : args ];\n\t\t\t\t\tqueue.push( args );\n\t\t\t\t\tif ( !firing ) {\n\t\t\t\t\t\tfire();\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn this;\n\t\t\t},\n\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\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\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\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.progress( newDefer.notify )\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} else {\n\t\t\t\t\t\t\t\t\tnewDefer[ tuple[ 0 ] + \"With\" ](\n\t\t\t\t\t\t\t\t\t\tthis === promise ? newDefer.promise() : this,\n\t\t\t\t\t\t\t\t\t\tfn ? [ returned ] : arguments\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\t\t\t\t\t\tfns = null;\n\t\t\t\t\t} ).promise();\n\t\t\t\t},\n\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\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 ||\n\t\t\t\t( subordinate && jQuery.isFunction( subordinate.promise ) ) ? length : 0,\n\n\t\t\t// the master Deferred.\n\t\t\t// 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.progress( updateFunc( i, progressContexts, progressValues ) )\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} 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\n\t// Add the callback\n\tjQuery.ready.promise().done( fn );\n\n\treturn this;\n};\n\njQuery.extend( {\n\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 );\n\twindow.removeEventListener( \"load\", completed );\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\n\t\t// after the browser event has already occurred.\n\t\t// Support: IE9-10 only\n\t\t// Older IE sometimes signals \"interactive\" too soon\n\t\tif ( document.readyState === \"complete\" ||\n\t\t\t( document.readyState !== \"loading\" && !document.documentElement.doScroll ) ) {\n\n\t\t\t// Handle it asynchronously to allow scripts the opportunity to delay ready\n\t\t\twindow.setTimeout( jQuery.ready );\n\n\t\t} else {\n\n\t\t\t// Use the handy event callback\n\t\t\tdocument.addEventListener( \"DOMContentLoaded\", completed );\n\n\t\t\t// A fallback to window.onload, that will always work\n\t\t\twindow.addEventListener( \"load\", completed );\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 = 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\taccess( 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\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(\n\t\t\t\t\telems[ i ], key, raw ?\n\t\t\t\t\tvalue :\n\t\t\t\t\tvalue.call( elems[ i ], i, fn( elems[ i ], key ) )\n\t\t\t\t);\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};\nvar acceptData = function( owner ) {\n\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\n\n\nfunction Data() {\n\tthis.expando = jQuery.expando + Data.uid++;\n}\n\nData.uid = 1;\n\nData.prototype = {\n\n\tregister: function( owner, initial ) {\n\t\tvar value = initial || {};\n\n\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t// use plain assignment\n\t\tif ( owner.nodeType ) {\n\t\t\towner[ this.expando ] = value;\n\n\t\t// Otherwise secure it in a non-enumerable, non-writable property\n\t\t// configurability must be true to allow the property to be\n\t\t// deleted with the delete operator\n\t\t} else {\n\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\tvalue: value,\n\t\t\t\twritable: true,\n\t\t\t\tconfigurable: true\n\t\t\t} );\n\t\t}\n\t\treturn owner[ this.expando ];\n\t},\n\tcache: function( owner ) {\n\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 an empty object.\n\t\tif ( !acceptData( owner ) ) {\n\t\t\treturn {};\n\t\t}\n\n\t\t// Check if the owner object already has a cache\n\t\tvar value = owner[ this.expando ];\n\n\t\t// If not, create one\n\t\tif ( !value ) {\n\t\t\tvalue = {};\n\n\t\t\t// We can accept data for non-element nodes in modern browsers,\n\t\t\t// but we should not, see #8335.\n\t\t\t// Always return an empty object.\n\t\t\tif ( acceptData( owner ) ) {\n\n\t\t\t\t// If it is a node unlikely to be stringify-ed or looped over\n\t\t\t\t// use plain assignment\n\t\t\t\tif ( owner.nodeType ) {\n\t\t\t\t\towner[ this.expando ] = value;\n\n\t\t\t\t// Otherwise secure it in a non-enumerable property\n\t\t\t\t// configurable must be true to allow the property to be\n\t\t\t\t// deleted when data is removed\n\t\t\t\t} else {\n\t\t\t\t\tObject.defineProperty( owner, this.expando, {\n\t\t\t\t\t\tvalue: value,\n\t\t\t\t\t\tconfigurable: true\n\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn value;\n\t},\n\tset: function( owner, data, value ) {\n\t\tvar prop,\n\t\t\tcache = this.cache( owner );\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\n\t\t\t// Copy the properties one-by-one to the cache object\n\t\t\tfor ( prop in data ) {\n\t\t\t\tcache[ prop ] = data[ prop ];\n\t\t\t}\n\t\t}\n\t\treturn cache;\n\t},\n\tget: function( owner, key ) {\n\t\treturn key === undefined ?\n\t\t\tthis.cache( owner ) :\n\t\t\towner[ this.expando ] && owner[ this.expando ][ key ];\n\t},\n\taccess: function( owner, key, value ) {\n\t\tvar stored;\n\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\tcache = owner[ this.expando ];\n\n\t\tif ( cache === undefined ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( key === undefined ) {\n\t\t\tthis.register( owner );\n\n\t\t} else {\n\n\t\t\t// Support array or space separated string of keys\n\t\t\tif ( jQuery.isArray( key ) ) {\n\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\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\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\n\t\t\twhile ( i-- ) {\n\t\t\t\tdelete cache[ name[ i ] ];\n\t\t\t}\n\t\t}\n\n\t\t// Remove the expando if there's no more data\n\t\tif ( key === undefined || jQuery.isEmptyObject( cache ) ) {\n\n\t\t\t// Support: Chrome <= 35-45+\n\t\t\t// Webkit & Blink performance suffers when deleting properties\n\t\t\t// from DOM nodes, so set to undefined instead\n\t\t\t// https://code.google.com/p/chromium/issues/detail?id=378607\n\t\t\tif ( owner.nodeType ) {\n\t\t\t\towner[ this.expando ] = undefined;\n\t\t\t} else {\n\t\t\t\tdelete owner[ this.expando ];\n\t\t\t}\n\t\t}\n\t},\n\thasData: function( owner ) {\n\t\tvar cache = owner[ this.expando ];\n\t\treturn cache !== undefined && !jQuery.isEmptyObject( cache );\n\t}\n};\nvar dataPriv = new Data();\n\nvar dataUser = 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, \"-$&\" ).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\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\tdataUser.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 dataUser.hasData( elem ) || dataPriv.hasData( elem );\n\t},\n\n\tdata: function( elem, name, data ) {\n\t\treturn dataUser.access( elem, name, data );\n\t},\n\n\tremoveData: function( elem, name ) {\n\t\tdataUser.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 dataPriv methods, these can be deprecated.\n\t_data: function( elem, name, data ) {\n\t\treturn dataPriv.access( elem, name, data );\n\t},\n\n\t_removeData: function( elem, name ) {\n\t\tdataPriv.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 = dataUser.get( elem );\n\n\t\t\t\tif ( elem.nodeType === 1 && !dataPriv.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\tdataPriv.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\tdataUser.set( this, key );\n\t\t\t} );\n\t\t}\n\n\t\treturn access( this, function( value ) {\n\t\t\tvar data, camelKey;\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\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 = dataUser.get( elem, key ) ||\n\n\t\t\t\t\t// Try to find dashed key if it exists (gh-2779)\n\t\t\t\t\t// This is for 2.2.x only\n\t\t\t\t\tdataUser.get( elem, key.replace( rmultiDash, \"-$&\" ).toLowerCase() );\n\n\t\t\t\tif ( data !== undefined ) {\n\t\t\t\t\treturn data;\n\t\t\t\t}\n\n\t\t\t\tcamelKey = jQuery.camelCase( key );\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 = dataUser.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\tcamelKey = jQuery.camelCase( key );\n\t\t\tthis.each( function() {\n\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 = dataUser.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\tdataUser.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\tdataUser.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\tdataUser.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 = dataPriv.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 = dataPriv.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 dataPriv.get( elem, key ) || dataPriv.access( elem, key, {\n\t\t\tempty: jQuery.Callbacks( \"once memory\" ).add( function() {\n\t\t\t\tdataPriv.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\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 = dataPriv.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 rcssNum = new RegExp( \"^(?:([+-])=|)(\" + pnum + \")([a-z%]*)$\", \"i\" );\n\n\nvar cssExpand = [ \"Top\", \"Right\", \"Bottom\", \"Left\" ];\n\nvar isHidden = function( elem, el ) {\n\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\" ||\n\t\t\t!jQuery.contains( elem.ownerDocument, elem );\n\t};\n\n\n\nfunction adjustCSS( elem, prop, valueParts, tween ) {\n\tvar adjusted,\n\t\tscale = 1,\n\t\tmaxIterations = 20,\n\t\tcurrentValue = tween ?\n\t\t\tfunction() { return tween.cur(); } :\n\t\t\tfunction() { return jQuery.css( elem, prop, \"\" ); },\n\t\tinitial = currentValue(),\n\t\tunit = valueParts && valueParts[ 3 ] || ( jQuery.cssNumber[ prop ] ? \"\" : \"px\" ),\n\n\t\t// Starting value computation is required for potential unit mismatches\n\t\tinitialInUnit = ( jQuery.cssNumber[ prop ] || unit !== \"px\" && +initial ) &&\n\t\t\trcssNum.exec( jQuery.css( elem, prop ) );\n\n\tif ( initialInUnit && initialInUnit[ 3 ] !== unit ) {\n\n\t\t// Trust units reported by jQuery.css\n\t\tunit = unit || initialInUnit[ 3 ];\n\n\t\t// Make sure we update the tween properties later on\n\t\tvalueParts = valueParts || [];\n\n\t\t// Iteratively approximate from a nonzero starting point\n\t\tinitialInUnit = +initial || 1;\n\n\t\tdo {\n\n\t\t\t// If previous iteration zeroed out, double until we get *something*.\n\t\t\t// Use string for doubling so we don't accidentally see scale as unchanged below\n\t\t\tscale = scale || \".5\";\n\n\t\t\t// Adjust and apply\n\t\t\tinitialInUnit = initialInUnit / scale;\n\t\t\tjQuery.style( elem, prop, initialInUnit + unit );\n\n\t\t// Update scale, tolerating zero or NaN from tween.cur()\n\t\t// Break the loop if scale is unchanged or perfect, or if we've just had enough.\n\t\t} while (\n\t\t\tscale !== ( scale = currentValue() / initial ) && scale !== 1 && --maxIterations\n\t\t);\n\t}\n\n\tif ( valueParts ) {\n\t\tinitialInUnit = +initialInUnit || +initial || 0;\n\n\t\t// Apply relative offset (+=/-=) if specified\n\t\tadjusted = valueParts[ 1 ] ?\n\t\t\tinitialInUnit + ( valueParts[ 1 ] + 1 ) * valueParts[ 2 ] :\n\t\t\t+valueParts[ 2 ];\n\t\tif ( tween ) {\n\t\t\ttween.unit = unit;\n\t\t\ttween.start = initialInUnit;\n\t\t\ttween.end = adjusted;\n\t\t}\n\t}\n\treturn adjusted;\n}\nvar rcheckableType = ( /^(?:checkbox|radio)$/i );\n\nvar rtagName = ( /<([\\w:-]+)/ );\n\nvar rscriptType = ( /^$|\\/(?:java|ecma)script/i );\n\n\n\n// We have to close these tags to support XHTML (#13200)\nvar wrapMap = {\n\n\t// Support: IE9\n\toption: [ 1, \"<select multiple='multiple'>\", \"</select>\" ],\n\n\t// XHTML parsers do not magically insert elements in the\n\t// same way that tag soup parsers do. So we cannot shorten\n\t// this by omitting <tbody> or other required elements.\n\tthead: [ 1, \"<table>\", \"</table>\" ],\n\tcol: [ 2, \"<table><colgroup>\", \"</colgroup></table>\" ],\n\ttr: [ 2, \"<table><tbody>\", \"</tbody></table>\" ],\n\ttd: [ 3, \"<table><tbody><tr>\", \"</tr></tbody></table>\" ],\n\n\t_default: [ 0, \"\", \"\" ]\n};\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\nfunction getAll( context, tag ) {\n\n\t// Support: IE9-11+\n\t// Use typeof to avoid zero-argument method invocation on host objects (#15151)\n\tvar ret = typeof context.getElementsByTagName !== \"undefined\" ?\n\t\t\tcontext.getElementsByTagName( tag || \"*\" ) :\n\t\t\ttypeof context.querySelectorAll !== \"undefined\" ?\n\t\t\t\tcontext.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\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\tdataPriv.set(\n\t\t\telems[ i ],\n\t\t\t\"globalEval\",\n\t\t\t!refElements || dataPriv.get( refElements[ i ], \"globalEval\" )\n\t\t);\n\t}\n}\n\n\nvar rhtml = /<|&#?\\w+;/;\n\nfunction buildFragment( elems, context, scripts, selection, ignored ) {\n\tvar elem, tmp, tag, wrap, contains, j,\n\t\tfragment = context.createDocumentFragment(),\n\t\tnodes = [],\n\t\ti = 0,\n\t\tl = elems.length;\n\n\tfor ( ; i < l; i++ ) {\n\t\telem = elems[ i ];\n\n\t\tif ( elem || elem === 0 ) {\n\n\t\t\t// Add nodes directly\n\t\t\tif ( jQuery.type( elem ) === \"object\" ) {\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, elem.nodeType ? [ elem ] : elem );\n\n\t\t\t// Convert non-html into a text node\n\t\t\t} else if ( !rhtml.test( elem ) ) {\n\t\t\t\tnodes.push( context.createTextNode( elem ) );\n\n\t\t\t// Convert html into DOM nodes\n\t\t\t} else {\n\t\t\t\ttmp = tmp || fragment.appendChild( context.createElement( \"div\" ) );\n\n\t\t\t\t// Deserialize a standard representation\n\t\t\t\ttag = ( rtagName.exec( elem ) || [ \"\", \"\" ] )[ 1 ].toLowerCase();\n\t\t\t\twrap = wrapMap[ tag ] || wrapMap._default;\n\t\t\t\ttmp.innerHTML = wrap[ 1 ] + jQuery.htmlPrefilter( elem ) + wrap[ 2 ];\n\n\t\t\t\t// Descend through wrappers to the right content\n\t\t\t\tj = wrap[ 0 ];\n\t\t\t\twhile ( j-- ) {\n\t\t\t\t\ttmp = tmp.lastChild;\n\t\t\t\t}\n\n\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\tjQuery.merge( nodes, tmp.childNodes );\n\n\t\t\t\t// Remember the top-level container\n\t\t\t\ttmp = fragment.firstChild;\n\n\t\t\t\t// Ensure the created nodes are orphaned (#12392)\n\t\t\t\ttmp.textContent = \"\";\n\t\t\t}\n\t\t}\n\t}\n\n\t// Remove wrapper from fragment\n\tfragment.textContent = \"\";\n\n\ti = 0;\n\twhile ( ( elem = nodes[ i++ ] ) ) {\n\n\t\t// Skip elements already in the context collection (trac-4087)\n\t\tif ( selection && jQuery.inArray( elem, selection ) > -1 ) {\n\t\t\tif ( ignored ) {\n\t\t\t\tignored.push( elem );\n\t\t\t}\n\t\t\tcontinue;\n\t\t}\n\n\t\tcontains = jQuery.contains( elem.ownerDocument, elem );\n\n\t\t// Append to fragment\n\t\ttmp = getAll( fragment.appendChild( elem ), \"script\" );\n\n\t\t// Preserve script evaluation history\n\t\tif ( contains ) {\n\t\t\tsetGlobalEval( tmp );\n\t\t}\n\n\t\t// Capture executables\n\t\tif ( scripts ) {\n\t\t\tj = 0;\n\t\t\twhile ( ( elem = tmp[ j++ ] ) ) {\n\t\t\t\tif ( rscriptType.test( elem.type || \"\" ) ) {\n\t\t\t\t\tscripts.push( elem );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\treturn fragment;\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: Android 4.0-4.3, 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} )();\n\n\nvar\n\trkeyEvent = /^key/,\n\trmouseEvent = /^(?:mouse|pointer|contextmenu|drag|drop)|click/,\n\trtypenamespace = /^([^.]*)(?:\\.(.+)|)/;\n\nfunction returnTrue() {\n\treturn true;\n}\n\nfunction returnFalse() {\n\treturn false;\n}\n\n// Support: IE9\n// See #13393 for more info\nfunction safeActiveElement() {\n\ttry {\n\t\treturn document.activeElement;\n\t} catch ( err ) { }\n}\n\nfunction on( elem, types, selector, data, fn, one ) {\n\tvar origFn, type;\n\n\t// Types can be a map of types/handlers\n\tif ( typeof types === \"object\" ) {\n\n\t\t// ( types-Object, selector, data )\n\t\tif ( typeof selector !== \"string\" ) {\n\n\t\t\t// ( types-Object, data )\n\t\t\tdata = data || selector;\n\t\t\tselector = undefined;\n\t\t}\n\t\tfor ( type in types ) {\n\t\t\ton( elem, type, selector, data, types[ type ], one );\n\t\t}\n\t\treturn elem;\n\t}\n\n\tif ( data == null && fn == null ) {\n\n\t\t// ( types, fn )\n\t\tfn = selector;\n\t\tdata = selector = undefined;\n\t} else if ( fn == null ) {\n\t\tif ( typeof selector === \"string\" ) {\n\n\t\t\t// ( types, selector, fn )\n\t\t\tfn = data;\n\t\t\tdata = undefined;\n\t\t} else {\n\n\t\t\t// ( types, data, fn )\n\t\t\tfn = data;\n\t\t\tdata = selector;\n\t\t\tselector = undefined;\n\t\t}\n\t}\n\tif ( fn === false ) {\n\t\tfn = returnFalse;\n\t} else if ( !fn ) {\n\t\treturn elem;\n\t}\n\n\tif ( one === 1 ) {\n\t\torigFn = fn;\n\t\tfn = function( event ) {\n\n\t\t\t// Can use an empty set, since event contains the info\n\t\t\tjQuery().off( event );\n\t\t\treturn origFn.apply( this, arguments );\n\t\t};\n\n\t\t// Use same guid so caller can remove using origFn\n\t\tfn.guid = origFn.guid || ( origFn.guid = jQuery.guid++ );\n\t}\n\treturn elem.each( function() {\n\t\tjQuery.event.add( this, types, fn, data, selector );\n\t} );\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 = dataPriv.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\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 !== \"undefined\" && 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 ||\n\t\t\t\t\tspecial.setup.call( elem, data, namespaces, eventHandle ) === false ) {\n\n\t\t\t\t\tif ( elem.addEventListener ) {\n\t\t\t\t\t\telem.addEventListener( type, eventHandle );\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 = dataPriv.hasData( elem ) && dataPriv.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 ] &&\n\t\t\t\tnew 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 ||\n\t\t\t\t\t\tselector === \"**\" && 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 ||\n\t\t\t\t\tspecial.teardown.call( elem, namespaces, elemData.handle ) === false ) {\n\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 data and the expando if it's no longer used\n\t\tif ( jQuery.isEmptyObject( events ) ) {\n\t\t\tdataPriv.remove( elem, \"handle events\" );\n\t\t}\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 = ( dataPriv.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++ ] ) &&\n\t\t\t\t!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.rnamespace || event.rnamespace.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 ||\n\t\t\t\t\t\thandleObj.handler ).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// Support (at least): Chrome, IE9\n\t\t// Find delegate handlers\n\t\t// Black-hole SVG <use> instance trees (#13180)\n\t\t//\n\t\t// Support: Firefox<=42+\n\t\t// Avoid non-left-click in FF but don't block IE radio events (#3861, gh-2343)\n\t\tif ( delegateCount && cur.nodeType &&\n\t\t\t( event.type !== \"click\" || isNaN( event.button ) || event.button < 1 ) ) {\n\n\t\t\tfor ( ; cur !== this; cur = cur.parentNode || this ) {\n\n\t\t\t\t// Don't check non-elements (#13208)\n\t\t\t\t// Don't process clicks on disabled elements (#6911, #8165, #11382, #11764)\n\t\t\t\tif ( cur.nodeType === 1 && ( 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 ) > -1 :\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 detail eventPhase \" +\n\t\t\"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 \" +\n\t\t\t\"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 +\n\t\t\t\t\t( doc && doc.scrollLeft || body && body.scrollLeft || 0 ) -\n\t\t\t\t\t( doc && doc.clientLeft || body && body.clientLeft || 0 );\n\t\t\t\tevent.pageY = original.clientY +\n\t\t\t\t\t( doc && doc.scrollTop  || body && body.scrollTop  || 0 ) -\n\t\t\t\t\t( 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\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\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\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\njQuery.removeEvent = function( elem, type, handle ) {\n\n\t// This \"if\" is needed for plain objects\n\tif ( elem.removeEventListener ) {\n\t\telem.removeEventListener( type, handle );\n\t}\n};\n\njQuery.Event = function( src, props ) {\n\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\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\tconstructor: jQuery.Event,\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 ) {\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 ) {\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 ) {\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// so that event delegation works in jQuery.\n// Do the same for pointerenter/pointerleave and pointerover/pointerout\n//\n// Support: Safari 7 only\n// Safari sends mouseenter too often; see:\n// https://code.google.com/p/chromium/issues/detail?id=470258\n// for the description of the bug (it existed in older Chrome versions as well).\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 mouseenter/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\njQuery.fn.extend( {\n\ton: function( types, selector, data, fn ) {\n\t\treturn on( this, types, selector, data, fn );\n\t},\n\tone: function( types, selector, data, fn ) {\n\t\treturn on( this, 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\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 ?\n\t\t\t\t\thandleObj.origType + \".\" + handleObj.namespace :\n\t\t\t\t\thandleObj.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\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\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\n\nvar\n\trxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\\w:-]+)[^>]*)\\/>/gi,\n\n\t// Support: IE 10-11, Edge 10240+\n\t// In IE/Edge using regex groups here causes severe slowdowns.\n\t// See https://connect.microsoft.com/IE/feedback/details/1736512/\n\trnoInnerhtml = /<script|<style|<link/i,\n\n\t// checked=\"checked\" or checked\n\trchecked = /checked\\s*(?:[^=]|=\\s*.checked.)/i,\n\trscriptTypeMasked = /^true\\/(.*)/,\n\trcleanScript = /^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;\n\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\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 ( dataPriv.hasData( src ) ) {\n\t\tpdataOld = dataPriv.access( src );\n\t\tpdataCur = dataPriv.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 ( dataUser.hasData( src ) ) {\n\t\tudataOld = dataUser.access( src );\n\t\tudataCur = jQuery.extend( {}, udataOld );\n\n\t\tdataUser.set( dest, udataCur );\n\t}\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\nfunction domManip( collection, args, callback, ignored ) {\n\n\t// Flatten any nested arrays\n\targs = concat.apply( [], args );\n\n\tvar fragment, first, scripts, hasScripts, node, doc,\n\t\ti = 0,\n\t\tl = collection.length,\n\t\tiNoClone = l - 1,\n\t\tvalue = args[ 0 ],\n\t\tisFunction = jQuery.isFunction( value );\n\n\t// We can't cloneNode fragments that contain checked, in WebKit\n\tif ( isFunction ||\n\t\t\t( l > 1 && typeof value === \"string\" &&\n\t\t\t\t!support.checkClone && rchecked.test( value ) ) ) {\n\t\treturn collection.each( function( index ) {\n\t\t\tvar self = collection.eq( index );\n\t\t\tif ( isFunction ) {\n\t\t\t\targs[ 0 ] = value.call( this, index, self.html() );\n\t\t\t}\n\t\t\tdomManip( self, args, callback, ignored );\n\t\t} );\n\t}\n\n\tif ( l ) {\n\t\tfragment = buildFragment( args, collection[ 0 ].ownerDocument, false, collection, ignored );\n\t\tfirst = fragment.firstChild;\n\n\t\tif ( fragment.childNodes.length === 1 ) {\n\t\t\tfragment = first;\n\t\t}\n\n\t\t// Require either new content or an interest in ignored elements to invoke the callback\n\t\tif ( first || ignored ) {\n\t\t\tscripts = jQuery.map( getAll( fragment, \"script\" ), disableScript );\n\t\t\thasScripts = scripts.length;\n\n\t\t\t// Use the original fragment for the last item\n\t\t\t// instead of the first because it can end up\n\t\t\t// being emptied incorrectly in certain situations (#8070).\n\t\t\tfor ( ; i < l; i++ ) {\n\t\t\t\tnode = fragment;\n\n\t\t\t\tif ( i !== iNoClone ) {\n\t\t\t\t\tnode = jQuery.clone( node, true, true );\n\n\t\t\t\t\t// Keep references to cloned scripts for later restoration\n\t\t\t\t\tif ( hasScripts ) {\n\n\t\t\t\t\t\t// Support: Android<4.1, PhantomJS<2\n\t\t\t\t\t\t// push.apply(_, arraylike) throws on ancient WebKit\n\t\t\t\t\t\tjQuery.merge( scripts, getAll( node, \"script\" ) );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tcallback.call( collection[ i ], node, i );\n\t\t\t}\n\n\t\t\tif ( hasScripts ) {\n\t\t\t\tdoc = scripts[ scripts.length - 1 ].ownerDocument;\n\n\t\t\t\t// Reenable scripts\n\t\t\t\tjQuery.map( scripts, restoreScript );\n\n\t\t\t\t// Evaluate executable scripts on first document insertion\n\t\t\t\tfor ( i = 0; i < hasScripts; i++ ) {\n\t\t\t\t\tnode = scripts[ i ];\n\t\t\t\t\tif ( rscriptType.test( node.type || \"\" ) &&\n\t\t\t\t\t\t!dataPriv.access( node, \"globalEval\" ) &&\n\t\t\t\t\t\tjQuery.contains( doc, node ) ) {\n\n\t\t\t\t\t\tif ( node.src ) {\n\n\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\tif ( jQuery._evalUrl ) {\n\t\t\t\t\t\t\t\tjQuery._evalUrl( node.src );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tjQuery.globalEval( node.textContent.replace( rcleanScript, \"\" ) );\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 collection;\n}\n\nfunction remove( elem, selector, keepData ) {\n\tvar node,\n\t\tnodes = selector ? jQuery.filter( selector, elem ) : elem,\n\t\ti = 0;\n\n\tfor ( ; ( node = nodes[ i ] ) != null; i++ ) {\n\t\tif ( !keepData && node.nodeType === 1 ) {\n\t\t\tjQuery.cleanData( getAll( node ) );\n\t\t}\n\n\t\tif ( node.parentNode ) {\n\t\t\tif ( keepData && jQuery.contains( node.ownerDocument, node ) ) {\n\t\t\t\tsetGlobalEval( getAll( node, \"script\" ) );\n\t\t\t}\n\t\t\tnode.parentNode.removeChild( node );\n\t\t}\n\t}\n\n\treturn elem;\n}\n\njQuery.extend( {\n\thtmlPrefilter: function( html ) {\n\t\treturn html.replace( rxhtmlTag, \"<$1></$2>\" );\n\t},\n\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\tcleanData: function( elems ) {\n\t\tvar data, elem, type,\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 ( acceptData( elem ) ) {\n\t\t\t\tif ( ( data = elem[ dataPriv.expando ] ) ) {\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\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataPriv.expando ] = undefined;\n\t\t\t\t}\n\t\t\t\tif ( elem[ dataUser.expando ] ) {\n\n\t\t\t\t\t// Support: Chrome <= 35-45+\n\t\t\t\t\t// Assign undefined instead of using delete, see Data#remove\n\t\t\t\t\telem[ dataUser.expando ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n} );\n\njQuery.fn.extend( {\n\n\t// Keep domManip exposed until 3.0 (gh-2225)\n\tdomManip: domManip,\n\n\tdetach: function( selector ) {\n\t\treturn remove( this, selector, true );\n\t},\n\n\tremove: function( selector ) {\n\t\treturn remove( this, selector );\n\t},\n\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 domManip( this, 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 domManip( this, 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 domManip( this, 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 domManip( this, 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\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 = jQuery.htmlPrefilter( value );\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 ignored = [];\n\n\t\t// Make the changes, replacing each non-ignored context element with the new content\n\t\treturn domManip( this, arguments, function( elem ) {\n\t\t\tvar parent = this.parentNode;\n\n\t\t\tif ( jQuery.inArray( this, ignored ) < 0 ) {\n\t\t\t\tjQuery.cleanData( getAll( this ) );\n\t\t\t\tif ( parent ) {\n\t\t\t\t\tparent.replaceChild( elem, this );\n\t\t\t\t}\n\t\t\t}\n\n\t\t// Force callback invocation\n\t\t}, ignored );\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\t\t// Support: Firefox\n\t\t// We have to pre-define these values for FF (#10227)\n\t\tHTML: \"block\",\n\t\tBODY: \"block\"\n\t};\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\n// Called only from within defaultDisplay\nfunction actualDisplay( name, doc ) {\n\tvar elem = jQuery( doc.createElement( name ) ).appendTo( doc.body ),\n\n\t\tdisplay = 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'/>\" ) )\n\t\t\t\t.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\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\tvar view = elem.ownerDocument.defaultView;\n\n\t\tif ( !view || !view.opener ) {\n\t\t\tview = window;\n\t\t}\n\n\t\treturn view.getComputedStyle( elem );\n\t};\n\nvar 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 documentElement = document.documentElement;\n\n\n\n( function() {\n\tvar pixelPositionVal, boxSizingReliableVal, pixelMarginRightVal, reliableMarginLeftVal,\n\t\tcontainer = document.createElement( \"div\" ),\n\t\tdiv = document.createElement( \"div\" );\n\n\t// Finish early in limited (non-browser) environments\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:8px;height:0;top:0;left:-9999px;\" +\n\t\t\"padding:0;margin-top:1px;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 computeStyleTests() {\n\t\tdiv.style.cssText =\n\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;box-sizing:border-box;\" +\n\t\t\t\"position:relative;display:block;\" +\n\t\t\t\"margin:auto;border:1px;padding:1px;\" +\n\t\t\t\"top:1%;width:50%\";\n\t\tdiv.innerHTML = \"\";\n\t\tdocumentElement.appendChild( container );\n\n\t\tvar divStyle = window.getComputedStyle( div );\n\t\tpixelPositionVal = divStyle.top !== \"1%\";\n\t\treliableMarginLeftVal = divStyle.marginLeft === \"2px\";\n\t\tboxSizingReliableVal = divStyle.width === \"4px\";\n\n\t\t// Support: Android 4.0 - 4.3 only\n\t\t// Some styles come back with percentage values, even though they shouldn't\n\t\tdiv.style.marginRight = \"50%\";\n\t\tpixelMarginRightVal = divStyle.marginRight === \"4px\";\n\n\t\tdocumentElement.removeChild( container );\n\t}\n\n\tjQuery.extend( support, {\n\t\tpixelPosition: function() {\n\n\t\t\t// This test is executed only once but we still do memoizing\n\t\t\t// since we can use the boxSizingReliable pre-computing.\n\t\t\t// No need to check if the test was already performed, though.\n\t\t\tcomputeStyleTests();\n\t\t\treturn pixelPositionVal;\n\t\t},\n\t\tboxSizingReliable: function() {\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn boxSizingReliableVal;\n\t\t},\n\t\tpixelMarginRight: function() {\n\n\t\t\t// Support: Android 4.0-4.3\n\t\t\t// We're checking for boxSizingReliableVal here instead of pixelMarginRightVal\n\t\t\t// since that compresses better and they're computed together anyway.\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn pixelMarginRightVal;\n\t\t},\n\t\treliableMarginLeft: function() {\n\n\t\t\t// Support: IE <=8 only, Android 4.0 - 4.3 only, Firefox <=3 - 37\n\t\t\tif ( boxSizingReliableVal == null ) {\n\t\t\t\tcomputeStyleTests();\n\t\t\t}\n\t\t\treturn reliableMarginLeftVal;\n\t\t},\n\t\treliableMarginRight: function() {\n\n\t\t\t// Support: Android 2.3\n\t\t\t// Check if div with explicit width and no margin-right incorrectly\n\t\t\t// gets computed margin-right based on width of container. (#3333)\n\t\t\t// WebKit Bug 13343 - getComputedStyle returns wrong value for margin-right\n\t\t\t// This support function is only executed once so no memoizing is needed.\n\t\t\tvar ret,\n\t\t\t\tmarginDiv = div.appendChild( document.createElement( \"div\" ) );\n\n\t\t\t// Reset CSS: box-sizing; display; margin; border; padding\n\t\t\tmarginDiv.style.cssText = div.style.cssText =\n\n\t\t\t\t// Support: Android 2.3\n\t\t\t\t// Vendor-prefix box-sizing\n\t\t\t\t\"-webkit-box-sizing:content-box;box-sizing:content-box;\" +\n\t\t\t\t\"display:block;margin:0;border:0;padding:0\";\n\t\t\tmarginDiv.style.marginRight = marginDiv.style.width = \"0\";\n\t\t\tdiv.style.width = \"1px\";\n\t\t\tdocumentElement.appendChild( container );\n\n\t\t\tret = !parseFloat( window.getComputedStyle( marginDiv ).marginRight );\n\n\t\t\tdocumentElement.removeChild( container );\n\t\t\tdiv.removeChild( marginDiv );\n\n\t\t\treturn ret;\n\t\t}\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\tret = computed ? computed.getPropertyValue( name ) || computed[ name ] : undefined;\n\n\t// Support: Opera 12.1x only\n\t// Fall back to style even without computed\n\t// computed is undefined for elems on document fragments\n\tif ( ( ret === \"\" || ret === undefined ) && !jQuery.contains( elem.ownerDocument, elem ) ) {\n\t\tret = jQuery.style( elem, name );\n\t}\n\n\t// Support: IE9\n\t// getPropertyValue is only needed for .css('filter') (#12537)\n\tif ( computed ) {\n\n\t\t// A tribute to the \"awesome hack by Dean Edwards\"\n\t\t// Android Browser returns percentage for some values,\n\t\t// but width seems to be reliably pixels.\n\t\t// This is against the CSSOM draft spec:\n\t\t// http://dev.w3.org/csswg/cssom/#resolved-values\n\t\tif ( !support.pixelMarginRight() && 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\n\t\t// Support: IE9-11+\n\t\t// IE returns zIndex value as an integer.\n\t\tret + \"\" :\n\t\tret;\n}\n\n\nfunction addGetHookIf( conditionFn, hookFn ) {\n\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\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\nvar\n\n\t// Swappable if display is none or starts with table\n\t// 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\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\temptyStyle = document.createElement( \"div\" ).style;\n\n// Return a css property mapped to a potentially vendor prefixed property\nfunction vendorPropName( name ) {\n\n\t// Shortcut for names that are not vendor prefixed\n\tif ( name in emptyStyle ) {\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\ti = cssPrefixes.length;\n\n\twhile ( i-- ) {\n\t\tname = cssPrefixes[ i ] + capName;\n\t\tif ( name in emptyStyle ) {\n\t\t\treturn name;\n\t\t}\n\t}\n}\n\nfunction setPositiveNumber( elem, value, subtract ) {\n\n\t// Any relative (+/-) values have already been\n\t// normalized at this point\n\tvar matches = rcssNum.exec( value );\n\treturn matches ?\n\n\t\t// Guard against undefined \"subtract\", e.g., when used as in cssHooks\n\t\tMath.max( 0, matches[ 2 ] - ( subtract || 0 ) ) + ( matches[ 3 ] || \"px\" ) :\n\t\tvalue;\n}\n\nfunction augmentWidthOrHeight( elem, name, extra, isBorderBox, styles ) {\n\tvar i = extra === ( isBorderBox ? \"border\" : \"content\" ) ?\n\n\t\t// If we already have the right measurement, avoid augmentation\n\t\t4 :\n\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\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\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\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// Support: IE11 only\n\t// In IE 11 fullscreen elements inside of an iframe have\n\t// 100x too small dimensions (gh-1764).\n\tif ( document.msFullscreenElement && window.top !== window ) {\n\n\t\t// Support: IE11 only\n\t\t// Running getBoundingClientRect on a disconnected node\n\t\t// in IE throws an error.\n\t\tif ( elem.getClientRects().length ) {\n\t\t\tval = Math.round( elem.getBoundingClientRect()[ name ] * 100 );\n\t\t}\n\t}\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\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 ] = dataPriv.get( elem, \"olddisplay\" );\n\t\tdisplay = elem.style.display;\n\t\tif ( show ) {\n\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 ] = dataPriv.access(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\tdefaultDisplay( elem.nodeName )\n\t\t\t\t);\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\tdataPriv.set(\n\t\t\t\t\telem,\n\t\t\t\t\t\"olddisplay\",\n\t\t\t\t\thidden ? display : jQuery.css( elem, \"display\" )\n\t\t\t\t);\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\"animationIterationCount\": true,\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 ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || 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 = rcssNum.exec( value ) ) && ret[ 1 ] ) {\n\t\t\t\tvalue = adjustCSS( elem, name, ret );\n\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 was passed in, add the unit (except for certain CSS properties)\n\t\t\tif ( type === \"number\" ) {\n\t\t\t\tvalue += ret && ret[ 3 ] || ( jQuery.cssNumber[ origName ] ? \"\" : \"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 ) ||\n\t\t\t\t( value = hooks.set( elem, value, extra ) ) !== undefined ) {\n\n\t\t\t\tstyle[ name ] = value;\n\t\t\t}\n\n\t\t} else {\n\n\t\t\t// If a hook was provided get the non-computed value from there\n\t\t\tif ( hooks && \"get\" in hooks &&\n\t\t\t\t( ret = hooks.get( elem, false, extra ) ) !== undefined ) {\n\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 ] ||\n\t\t\t( jQuery.cssProps[ origName ] = vendorPropName( origName ) || 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 || isFinite( 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\" ) ) &&\n\t\t\t\t\telem.offsetWidth === 0 ?\n\t\t\t\t\t\tswap( elem, cssShow, function() {\n\t\t\t\t\t\t\treturn getWidthOrHeight( elem, name, extra );\n\t\t\t\t\t\t} ) :\n\t\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 matches,\n\t\t\t\tstyles = extra && getStyles( elem ),\n\t\t\t\tsubtract = extra && augmentWidthOrHeight(\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);\n\n\t\t\t// Convert to pixels if value adjustment is needed\n\t\t\tif ( subtract && ( matches = rcssNum.exec( value ) ) &&\n\t\t\t\t( matches[ 3 ] || \"px\" ) !== \"px\" ) {\n\n\t\t\t\telem.style[ name ] = value;\n\t\t\t\tvalue = jQuery.css( elem, name );\n\t\t\t}\n\n\t\t\treturn setPositiveNumber( elem, value, subtract );\n\t\t}\n\t};\n} );\n\njQuery.cssHooks.marginLeft = addGetHookIf( support.reliableMarginLeft,\n\tfunction( elem, computed ) {\n\t\tif ( computed ) {\n\t\t\treturn ( parseFloat( curCSS( elem, \"marginLeft\" ) ) ||\n\t\t\t\telem.getBoundingClientRect().left -\n\t\t\t\t\tswap( elem, { marginLeft: 0 }, function() {\n\t\t\t\t\t\treturn elem.getBoundingClientRect().left;\n\t\t\t\t\t} )\n\t\t\t\t) + \"px\";\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 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 || jQuery.easing._default;\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\t// Use a property on the element directly when it is not a DOM element,\n\t\t\t// or when there is no matching style property that exists.\n\t\t\tif ( tween.elem.nodeType !== 1 ||\n\t\t\t\ttween.elem[ tween.prop ] != null && 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\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\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.nodeType === 1 &&\n\t\t\t\t( tween.elem.style[ jQuery.cssProps[ tween.prop ] ] != null ||\n\t\t\t\t\tjQuery.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\t_default: \"swing\"\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\trrun = /queueHooks$/;\n\n// Animations created synchronously will run synchronously\nfunction createFxNow() {\n\twindow.setTimeout( 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 = ( Animation.tweeners[ prop ] || [] ).concat( Animation.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 = dataPriv.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\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\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\tdataPriv.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\n\t\t\t\t// 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 = dataPriv.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\tdataPriv.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 = Animation.prefilters.length,\n\t\tdeferred = jQuery.Deferred().always( function() {\n\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\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, {\n\t\t\t\tspecialEasing: {},\n\t\t\t\teasing: jQuery.easing._default\n\t\t\t}, 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\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.notifyWith( elem, [ animation, 1, 0 ] );\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 = Animation.prefilters[ index ].call( animation, elem, props, animation.opts );\n\t\tif ( result ) {\n\t\t\tif ( jQuery.isFunction( result.stop ) ) {\n\t\t\t\tjQuery._queueHooks( animation.elem, animation.opts.queue ).stop =\n\t\t\t\t\tjQuery.proxy( result.stop, result );\n\t\t\t}\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\ttweeners: {\n\t\t\"*\": [ function( prop, value ) {\n\t\t\tvar tween = this.createTween( prop, value );\n\t\t\tadjustCSS( tween.elem, prop, rcssNum.exec( value ), tween );\n\t\t\treturn tween;\n\t\t} ]\n\t},\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.match( rnotwhite );\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\tAnimation.tweeners[ prop ] = Animation.tweeners[ prop ] || [];\n\t\t\tAnimation.tweeners[ prop ].unshift( callback );\n\t\t}\n\t},\n\n\tprefilters: [ defaultPrefilter ],\n\n\tprefilter: function( callback, prepend ) {\n\t\tif ( prepend ) {\n\t\t\tAnimation.prefilters.unshift( callback );\n\t\t} else {\n\t\t\tAnimation.prefilters.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\" ?\n\t\topt.duration : opt.duration in jQuery.fx.speeds ?\n\t\t\tjQuery.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\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 || dataPriv.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 = dataPriv.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 &&\n\t\t\t\t\t( type == null || timers[ index ].queue === type ) ) {\n\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 = dataPriv.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\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;\njQuery.fx.start = function() {\n\tif ( !timerId ) {\n\t\ttimerId = window.setInterval( jQuery.fx.tick, jQuery.fx.interval );\n\t}\n};\n\njQuery.fx.stop = function() {\n\twindow.clearInterval( timerId );\n\n\ttimerId = null;\n};\n\njQuery.fx.speeds = {\n\tslow: 600,\n\tfast: 200,\n\n\t// Default speed\n\t_default: 400\n};\n\n\n// Based off of the plugin by Clint Helfers, with permission.\n// http://web.archive.org/web/20100324014747/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 = window.setTimeout( next, time );\n\t\thooks.stop = function() {\n\t\t\twindow.clearTimeout( 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 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 ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set attributes on text, comment and attribute nodes\n\t\tif ( 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 === \"undefined\" ) {\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 : undefined );\n\t\t}\n\n\t\tif ( value !== undefined ) {\n\t\t\tif ( value === null ) {\n\t\t\t\tjQuery.removeAttr( elem, name );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\telem.setAttribute( name, value + \"\" );\n\t\t\treturn value;\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tret = jQuery.find.attr( elem, name );\n\n\t\t// Non-existent attributes return null, we normalize to undefined\n\t\treturn ret == null ? undefined : ret;\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\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\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\n// Hooks for boolean attributes\nboolHook = {\n\tset: function( elem, value, name ) {\n\t\tif ( value === false ) {\n\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\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\trclickable = /^(?:a|area)$/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\tprop: function( elem, name, value ) {\n\t\tvar ret, hooks,\n\t\t\tnType = elem.nodeType;\n\n\t\t// Don't get/set properties on text, comment and attribute nodes\n\t\tif ( nType === 3 || nType === 8 || nType === 2 ) {\n\t\t\treturn;\n\t\t}\n\n\t\tif ( nType !== 1 || !jQuery.isXMLDoc( elem ) ) {\n\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\tif ( hooks && \"set\" in hooks &&\n\t\t\t\t( ret = hooks.set( elem, value, name ) ) !== undefined ) {\n\t\t\t\treturn ret;\n\t\t\t}\n\n\t\t\treturn ( elem[ name ] = value );\n\t\t}\n\n\t\tif ( hooks && \"get\" in hooks && ( ret = hooks.get( elem, name ) ) !== null ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn elem[ name ];\n\t},\n\n\tpropHooks: {\n\t\ttabIndex: {\n\t\t\tget: function( elem ) {\n\n\t\t\t\t// elem.tabIndex doesn't always return the\n\t\t\t\t// correct value when it hasn't been explicitly set\n\t\t\t\t// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/\n\t\t\t\t// Use proper attribute retrieval(#12072)\n\t\t\t\tvar tabindex = jQuery.find.attr( elem, \"tabindex\" );\n\n\t\t\t\treturn tabindex ?\n\t\t\t\t\tparseInt( tabindex, 10 ) :\n\t\t\t\t\trfocusable.test( elem.nodeName ) ||\n\t\t\t\t\t\trclickable.test( elem.nodeName ) && elem.href ?\n\t\t\t\t\t\t\t0 :\n\t\t\t\t\t\t\t-1;\n\t\t\t}\n\t\t}\n\t},\n\n\tpropFix: {\n\t\t\"for\": \"htmlFor\",\n\t\t\"class\": \"className\"\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\nfunction getClass( elem ) {\n\treturn elem.getAttribute && elem.getAttribute( \"class\" ) || \"\";\n}\n\njQuery.fn.extend( {\n\taddClass: function( value ) {\n\t\tvar classes, elem, cur, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\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 ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", 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, curValue, clazz, j, finalValue,\n\t\t\ti = 0;\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, getClass( this ) ) );\n\t\t\t} );\n\t\t}\n\n\t\tif ( !arguments.length ) {\n\t\t\treturn this.attr( \"class\", \"\" );\n\t\t}\n\n\t\tif ( typeof value === \"string\" && value ) {\n\t\t\tclasses = value.match( rnotwhite ) || [];\n\n\t\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\t\tcurValue = getClass( elem );\n\n\t\t\t\t// This expression is here for better compressibility (see addClass)\n\t\t\t\tcur = elem.nodeType === 1 &&\n\t\t\t\t\t( \" \" + curValue + \" \" ).replace( rclass, \" \" );\n\n\t\t\t\tif ( cur ) {\n\t\t\t\t\tj = 0;\n\t\t\t\t\twhile ( ( clazz = classes[ j++ ] ) ) {\n\n\t\t\t\t\t\t// Remove *all* instances\n\t\t\t\t\t\twhile ( cur.indexOf( \" \" + clazz + \" \" ) > -1 ) {\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 = jQuery.trim( cur );\n\t\t\t\t\tif ( curValue !== finalValue ) {\n\t\t\t\t\t\telem.setAttribute( \"class\", 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(\n\t\t\t\t\tvalue.call( this, i, getClass( this ), stateVal ),\n\t\t\t\t\tstateVal\n\t\t\t\t);\n\t\t\t} );\n\t\t}\n\n\t\treturn this.each( function() {\n\t\t\tvar className, i, self, classNames;\n\n\t\t\tif ( type === \"string\" ) {\n\n\t\t\t\t// Toggle individual class names\n\t\t\t\ti = 0;\n\t\t\t\tself = jQuery( this );\n\t\t\t\tclassNames = value.match( rnotwhite ) || [];\n\n\t\t\t\twhile ( ( className = classNames[ i++ ] ) ) {\n\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 ( value === undefined || type === \"boolean\" ) {\n\t\t\t\tclassName = getClass( this );\n\t\t\t\tif ( className ) {\n\n\t\t\t\t\t// Store className if set\n\t\t\t\t\tdataPriv.set( this, \"__className__\", 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\tif ( this.setAttribute ) {\n\t\t\t\t\tthis.setAttribute( \"class\",\n\t\t\t\t\t\tclassName || value === false ?\n\t\t\t\t\t\t\"\" :\n\t\t\t\t\t\tdataPriv.get( this, \"__className__\" ) || \"\"\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} );\n\t},\n\n\thasClass: function( selector ) {\n\t\tvar className, elem,\n\t\t\ti = 0;\n\n\t\tclassName = \" \" + selector + \" \";\n\t\twhile ( ( elem = this[ i++ ] ) ) {\n\t\t\tif ( elem.nodeType === 1 &&\n\t\t\t\t( \" \" + getClass( elem ) + \" \" ).replace( rclass, \" \" )\n\t\t\t\t\t.indexOf( className ) > -1\n\t\t\t) {\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 ] ||\n\t\t\t\t\tjQuery.valHooks[ elem.nodeName.toLowerCase() ];\n\n\t\t\t\tif ( hooks &&\n\t\t\t\t\t\"get\" in hooks &&\n\t\t\t\t\t( ret = hooks.get( elem, \"value\" ) ) !== undefined\n\t\t\t\t) {\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\n\t\t\t\t\t// Handle most common string cases\n\t\t\t\t\tret.replace( rreturn, \"\" ) :\n\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\n\t\t\t\t// Support: IE<11\n\t\t\t\t// option.value not trimmed (#14858)\n\t\t\t\treturn jQuery.trim( elem.value );\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// IE8-9 doesn't update selected after form reset (#2551)\n\t\t\t\t\tif ( ( option.selected || i === index ) &&\n\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 ?\n\t\t\t\t\t\t\t\t!option.disabled : option.getAttribute( \"disabled\" ) === null ) &&\n\t\t\t\t\t\t\t( !option.parentNode.disabled ||\n\t\t\t\t\t\t\t\t!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 =\n\t\t\t\t\t\t\tjQuery.inArray( jQuery.valHooks.option.get( option ), values ) > -1\n\t\t\t\t\t) {\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 ) > -1 );\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\nvar rfocusMorph = /^(?:focusinfocus|focusoutblur)$/;\n\njQuery.extend( jQuery.event, {\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( \".\" ) > -1 ) {\n\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.rnamespace = 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 = ( dataPriv.get( cur, \"events\" ) || {} )[ event.type ] &&\n\t\t\t\tdataPriv.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 && 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 ||\n\t\t\t\tspecial._default.apply( eventPath.pop(), data ) === false ) &&\n\t\t\t\tacceptData( 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\t// Piggyback on a donor event to simulate a different one\n\tsimulate: function( type, elem, event ) {\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\n\t\t\t\t// Previously, `originalEvent: {}` was set here, so stopPropagation call\n\t\t\t\t// would not be triggered on donor event, since in our own\n\t\t\t\t// jQuery.event.stopPropagation function we had a check for existence of\n\t\t\t\t// originalEvent.stopPropagation method, so, consequently it would be a noop.\n\t\t\t\t//\n\t\t\t\t// But now, this \"simulate\" function is used only for events\n\t\t\t\t// for which stopPropagation() is noop, so there is no need for that anymore.\n\t\t\t\t//\n\t\t\t\t// For the 1.x branch though, guard for \"click\" and \"submit\"\n\t\t\t\t// events is still used, but was moved to jQuery.event.stopPropagation function\n\t\t\t\t// because `originalEvent` should point to the original event for the constancy\n\t\t\t\t// with other events and for more focused logic\n\t\t\t}\n\t\t);\n\n\t\tjQuery.event.trigger( e, null, elem );\n\n\t\tif ( e.isDefaultPrevented() ) {\n\t\t\tevent.preventDefault();\n\t\t}\n\t}\n\n} );\n\njQuery.fn.extend( {\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\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( \" \" ),\n\tfunction( 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\n\n\n\nsupport.focusin = \"onfocusin\" in window;\n\n\n// Support: Firefox\n// Firefox doesn't have focus(in | out) events\n// Related ticket - https://bugzilla.mozilla.org/show_bug.cgi?id=687787\n//\n// Support: Chrome, Safari\n// focus(in | out) events fire after focus & blur events,\n// which is spec violation - http://www.w3.org/TR/DOM-Level-3-Events/#events-focusevent-event-order\n// Related ticket - https://code.google.com/p/chromium/issues/detail?id=449857\nif ( !support.focusin ) {\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\tjQuery.event.simulate( fix, event.target, jQuery.event.fix( event ) );\n\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 = dataPriv.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\tdataPriv.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 = dataPriv.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\tdataPriv.remove( doc, fix );\n\n\t\t\t\t} else {\n\t\t\t\t\tdataPriv.access( doc, fix, attaches );\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t} );\n}\nvar location = window.location;\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;\n\tif ( !data || typeof data !== \"string\" ) {\n\t\treturn null;\n\t}\n\n\t// Support: IE9\n\ttry {\n\t\txml = ( new window.DOMParser() ).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\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\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// Anchor tag for parsing the document origin\n\toriginAnchor = document.createElement( \"a\" );\n\toriginAnchor.href = location.href;\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\n\t\t\t// For each dataType in the dataTypeExpression\n\t\t\twhile ( ( dataType = dataTypes[ i++ ] ) ) {\n\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\" &&\n\t\t\t\t!seekingTransport && !inspected[ dataTypeOrTransport ] ) {\n\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\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\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\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\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 {\n\t\t\t\t\t\t\t\tstate: \"parsererror\",\n\t\t\t\t\t\t\t\terror: conv ? e : \"No conversion from \" + prev + \" to \" + current\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\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: location.href,\n\t\ttype: \"GET\",\n\t\tisLocal: rlocalProtocol.test( location.protocol ),\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: /\\bxml\\b/,\n\t\t\thtml: /\\bhtml/,\n\t\t\tjson: /\\bjson\\b/\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\n\t\t\t// URL without anti-cache param\n\t\t\tcacheURL,\n\n\t\t\t// Response headers\n\t\t\tresponseHeadersString,\n\t\t\tresponseHeaders,\n\n\t\t\t// timeout handle\n\t\t\ttimeoutTimer,\n\n\t\t\t// Url cleanup var\n\t\t\turlAnchor,\n\n\t\t\t// To know if global events are to be dispatched\n\t\t\tfireGlobals,\n\n\t\t\t// Loop variable\n\t\t\ti,\n\n\t\t\t// Create the final options object\n\t\t\ts = jQuery.ajaxSetup( {}, options ),\n\n\t\t\t// Callbacks context\n\t\t\tcallbackContext = s.context || s,\n\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 &&\n\t\t\t\t( callbackContext.nodeType || callbackContext.jquery ) ?\n\t\t\t\t\tjQuery( callbackContext ) :\n\t\t\t\t\tjQuery.event,\n\n\t\t\t// Deferreds\n\t\t\tdeferred = jQuery.Deferred(),\n\t\t\tcompleteDeferred = jQuery.Callbacks( \"once memory\" ),\n\n\t\t\t// Status-dependent callbacks\n\t\t\tstatusCode = s.statusCode || {},\n\n\t\t\t// Headers (they are sent all at once)\n\t\t\trequestHeaders = {},\n\t\t\trequestHeadersNames = {},\n\n\t\t\t// The jqXHR state\n\t\t\tstate = 0,\n\n\t\t\t// Default abort message\n\t\t\tstrAbort = \"canceled\",\n\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\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\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 || location.href ) + \"\" ).replace( rhash, \"\" )\n\t\t\t.replace( rprotocol, location.protocol + \"//\" );\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 the origin doesn't match the current origin.\n\t\tif ( s.crossDomain == null ) {\n\t\t\turlAnchor = document.createElement( \"a\" );\n\n\t\t\t// Support: IE8-11+\n\t\t\t// IE throws exception if url is malformed, e.g. http://example.com:80x/\n\t\t\ttry {\n\t\t\t\turlAnchor.href = s.url;\n\n\t\t\t\t// Support: IE8-11+\n\t\t\t\t// Anchor's host property isn't correctly set when s.url is relative\n\t\t\t\turlAnchor.href = urlAnchor.href;\n\t\t\t\ts.crossDomain = originAnchor.protocol + \"//\" + originAnchor.host !==\n\t\t\t\t\turlAnchor.protocol + \"//\" + urlAnchor.host;\n\t\t\t} catch ( e ) {\n\n\t\t\t\t// If there is an error parsing the URL, assume it is crossDomain,\n\t\t\t\t// it can be rejected by the transport if it is invalid\n\t\t\t\ts.crossDomain = true;\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\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 ] ] +\n\t\t\t\t\t( 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 &&\n\t\t\t( s.beforeSend.call( callbackContext, jqXHR, s ) === false || state === 2 ) ) {\n\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\n\t\t\t// If request was aborted inside ajaxSend, stop there\n\t\t\tif ( state === 2 ) {\n\t\t\t\treturn jqXHR;\n\t\t\t}\n\n\t\t\t// Timeout\n\t\t\tif ( s.async && s.timeout > 0 ) {\n\t\t\t\ttimeoutTimer = window.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\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\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\twindow.clearTimeout( 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\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\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\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\t// The url can be an options object (which then must have .url)\n\t\treturn jQuery.ajax( jQuery.extend( {\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}, jQuery.isPlainObject( url ) && url ) );\n\t};\n} );\n\n\njQuery._evalUrl = function( url ) {\n\treturn jQuery.ajax( {\n\t\turl: url,\n\n\t\t// Make this explicit, since user can override this through ajaxSetup (#11264)\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\treturn !jQuery.expr.filters.visible( elem );\n};\njQuery.expr.filters.visible = function( elem ) {\n\n\t// Support: Opera <= 12.12\n\t// Opera reports offsetWidths and offsetHeights less than zero on some elements\n\t// Use OR instead of AND as the element is not visible if either is true\n\t// See tickets #10406 and #13132\n\treturn elem.offsetWidth > 0 || elem.offsetHeight > 0 || elem.getClientRects().length > 0;\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\n\t\t// Serialize array item.\n\t\tjQuery.each( obj, function( i, v ) {\n\t\t\tif ( traditional || rbracket.test( prefix ) ) {\n\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\n\t\t\t\t// Item is non-scalar (array or object), encode its numeric index.\n\t\t\t\tbuildParams(\n\t\t\t\t\tprefix + \"[\" + ( typeof v === \"object\" && v != null ? i : \"\" ) + \"]\",\n\t\t\t\t\tv,\n\t\t\t\t\ttraditional,\n\t\t\t\t\tadd\n\t\t\t\t);\n\t\t\t}\n\t\t} );\n\n\t} else if ( !traditional && jQuery.type( obj ) === \"object\" ) {\n\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\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\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\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\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\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 window.XMLHttpRequest();\n\t} catch ( e ) {}\n};\n\nvar xhrSuccessStatus = {\n\n\t\t// File protocol always yields status code 0, assume 200\n\t\t0: 200,\n\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\nsupport.cors = !!xhrSupported && ( \"withCredentials\" in xhrSupported );\nsupport.ajax = xhrSupported = !!xhrSupported;\n\njQuery.ajaxTransport( function( options ) {\n\tvar callback, errorCallback;\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\n\t\t\t\txhr.open(\n\t\t\t\t\toptions.type,\n\t\t\t\t\toptions.url,\n\t\t\t\t\toptions.async,\n\t\t\t\t\toptions.username,\n\t\t\t\t\toptions.password\n\t\t\t\t);\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\tcallback = errorCallback = xhr.onload =\n\t\t\t\t\t\t\t\txhr.onerror = xhr.onabort = xhr.onreadystatechange = 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\n\t\t\t\t\t\t\t\t// Support: IE9\n\t\t\t\t\t\t\t\t// On a manual native abort, IE9 throws\n\t\t\t\t\t\t\t\t// errors on any property access that is not readyState\n\t\t\t\t\t\t\t\tif ( typeof xhr.status !== \"number\" ) {\n\t\t\t\t\t\t\t\t\tcomplete( 0, \"error\" );\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tcomplete(\n\n\t\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\t\txhr.status,\n\t\t\t\t\t\t\t\t\t\txhr.statusText\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} 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\n\t\t\t\t\t\t\t\t\t// Support: IE9 only\n\t\t\t\t\t\t\t\t\t// IE9 has no XHR2 but throws on binary (trac-11426)\n\t\t\t\t\t\t\t\t\t// For XHR2 non-text, let the caller handle it (gh-2498)\n\t\t\t\t\t\t\t\t\t( xhr.responseType || \"text\" ) !== \"text\"  ||\n\t\t\t\t\t\t\t\t\ttypeof xhr.responseText !== \"string\" ?\n\t\t\t\t\t\t\t\t\t\t{ binary: xhr.response } :\n\t\t\t\t\t\t\t\t\t\t{ text: xhr.responseText },\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\terrorCallback = xhr.onerror = callback( \"error\" );\n\n\t\t\t\t// Support: IE9\n\t\t\t\t// Use onreadystatechange to replace onabort\n\t\t\t\t// to handle uncaught aborts\n\t\t\t\tif ( xhr.onabort !== undefined ) {\n\t\t\t\t\txhr.onabort = errorCallback;\n\t\t\t\t} else {\n\t\t\t\t\txhr.onreadystatechange = function() {\n\n\t\t\t\t\t\t// Check readyState before timeout as it changes\n\t\t\t\t\t\tif ( xhr.readyState === 4 ) {\n\n\t\t\t\t\t\t\t// Allow onerror to be called first,\n\t\t\t\t\t\t\t// but that will not handle a native abort\n\t\t\t\t\t\t\t// Also, save errorCallback to a variable\n\t\t\t\t\t\t\t// as xhr.onerror cannot be accessed\n\t\t\t\t\t\t\twindow.setTimeout( function() {\n\t\t\t\t\t\t\t\tif ( callback ) {\n\t\t\t\t\t\t\t\t\terrorCallback();\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// Create the abort callback\n\t\t\t\tcallback = callback( \"abort\" );\n\n\t\t\t\ttry {\n\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\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, \" +\n\t\t\t\"application/ecmascript, application/x-ecmascript\"\n\t},\n\tcontents: {\n\t\tscript: /\\b(?:java|ecma)script\\b/\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\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\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\n\t\t\t\t// Use native DOM manipulation to avoid our domManip AJAX trickery\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\" &&\n\t\t\t\t( s.contentType || \"\" )\n\t\t\t\t\t.indexOf( \"application/x-www-form-urlencoded\" ) === 0 &&\n\t\t\t\trjsonp.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\n\t\t\t// If previous value didn't exist - remove it\n\t\t\tif ( overwritten === undefined ) {\n\t\t\t\tjQuery( window ).removeProp( callbackName );\n\n\t\t\t// Otherwise restore preexisting value\n\t\t\t} else {\n\t\t\t\twindow[ callbackName ] = overwritten;\n\t\t\t}\n\n\t\t\t// Save back as free\n\t\t\tif ( s[ callbackName ] ) {\n\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// Support: Safari 8+\n// In Safari 8 documents created via document.implementation.createHTMLDocument\n// collapse sibling forms: the second one becomes a child of the first one.\n// Because of that, this security measure has to be disabled in Safari 8.\n// https://bugs.webkit.org/show_bug.cgi?id=137337\nsupport.createHTMLDocument = ( function() {\n\tvar body = document.implementation.createHTMLDocument( \"\" ).body;\n\tbody.innerHTML = \"<form></form><form></form>\";\n\treturn body.childNodes.length === 2;\n} )();\n\n\n// Argument \"data\" should be string of html\n// context (optional): If specified, the fragment will be created in this context,\n// 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\n\t// Stop scripts or inline event handlers from being executed immediately\n\t// by using document.implementation\n\tcontext = context || ( support.createHTMLDocument ?\n\t\tdocument.implementation.createHTMLDocument( \"\" ) :\n\t\tdocument );\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 = 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 > -1 ) {\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\t// Make value of this field explicit since\n\t\t\t// user can override it through ajaxSetup method\n\t\t\ttype: type || \"GET\",\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// If the request succeeds, this function gets \"data\", \"status\", \"jqXHR\"\n\t\t// but they are ignored because response was set above.\n\t\t// If it fails, this function gets \"jqXHR\", \"status\", \"error\"\n\t\t} ).always( callback && function( jqXHR, status ) {\n\t\t\tself.each( function() {\n\t\t\t\tcallback.apply( self, response || [ jqXHR.responseText, status, jqXHR ] );\n\t\t\t} );\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( [\n\t\"ajaxStart\",\n\t\"ajaxStop\",\n\t\"ajaxComplete\",\n\t\"ajaxError\",\n\t\"ajaxSuccess\",\n\t\"ajaxSend\"\n], 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\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\n\t\t\t// Use jQuery.extend here to allow modification of coordinates argument (gh-1848)\n\t\t\toptions = options.call( elem, i, jQuery.extend( {}, 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\tbox = elem.getBoundingClientRect();\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},\n\t\t// because it is its only offset parent\n\t\tif ( jQuery.css( elem, \"position\" ) === \"fixed\" ) {\n\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\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\t// This method will return documentElement in the following cases:\n\t// 1) For the element inside the iframe without offsetParent, this method will return\n\t//    documentElement of the parent window\n\t// 2) For the hidden or detached element\n\t// 3) For body or html element, i.e. in case of the html node - it will return itself\n\t//\n\t// but those exceptions were never presented as a real life use-cases\n\t// and might be considered as more preferable results.\n\t//\n\t// This logic, however, is not guaranteed and can change at any point in the future\n\toffsetParent: function() {\n\t\treturn this.map( function() {\n\t\t\tvar offsetParent = this.offsetParent;\n\n\t\t\twhile ( offsetParent && jQuery.css( offsetParent, \"position\" ) === \"static\" ) {\n\t\t\t\toffsetParent = offsetParent.offsetParent;\n\t\t\t}\n\n\t\t\treturn offsetParent || documentElement;\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 : win.pageXOffset,\n\t\t\t\t\ttop ? val : win.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 );\n\t};\n} );\n\n// Support: Safari<7-8+, Chrome<37-44+\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\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 },\n\t\tfunction( defaultExtra, funcName ) {\n\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\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\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\njQuery.fn.extend( {\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\n\t\t// ( namespace ) or ( selector, types [, fn] )\n\t\treturn arguments.length === 1 ?\n\t\t\tthis.off( selector, \"**\" ) :\n\t\t\tthis.off( types, selector || \"**\", fn );\n\t},\n\tsize: function() {\n\t\treturn this.length;\n\t}\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\nvar\n\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 ( !noGlobal ) {\n\twindow.jQuery = window.$ = jQuery;\n}\n\nreturn jQuery;\n}));\n"
  },
  {
    "path": "public/assets/dashboard/wangeditor/js/wangEditor.js",
    "content": "(function (factory) {\n    if (typeof window.define === 'function') {\n        if (window.define.amd) {\n            // AMD模式\n            window.define('wangEditor', [\"jquery\"], factory);\n        } else if (window.define.cmd) {\n            // CMD模式\n            window.define(function (require, exports, module) {\n                return factory;\n            });\n        } else {\n            // 全局模式\n            factory(window.jQuery);\n        }\n    } else if (typeof module === \"object\" && typeof module.exports === \"object\") {\n        // commonjs\n\n        // 引用 css —— webapck\n        require('../css/wangEditor.css');\n        module.exports = factory(\n            // 传入 jquery ，支持使用 npm 方式或者自己定义jquery的路径\n            require('jquery')\n        );\n    } else {\n        // 全局模式\n        factory(window.jQuery);\n    }\n})(function($){\n    \n    // 验证是否引用jquery\n    if (!$ || !$.fn || !$.fn.jquery) {\n        alert('在引用wangEditor.js之前，先引用jQuery，否则无法使用 wangEditor');\n        return;\n    }\n\n    // 定义扩展函数\n    var _e = function (fn) {\n        var E = window.wangEditor;\n        if (E) {\n            // 执行传入的函数\n            fn(E, $);\n        }\n    };\n// 定义构造函数\n(function (window, $) {\n    if (window.wangEditor) {\n        // 重复引用\n        alert('一个页面不能重复引用 wangEditor.js 或 wangEditor.min.js ！！！');\n        return;\n    }\n\n    // 编辑器（整体）构造函数\n    var E = function (elem) {\n        // 支持 id 和 element 两种形式\n        if (typeof elem === 'string') {\n            elem = '#' + elem;\n        }\n\n        // ---------------获取基本节点------------------\n        var $elem = $(elem);\n        if ($elem.length !== 1) {\n            return;\n        }\n        var nodeName = $elem[0].nodeName;\n        if (nodeName !== 'TEXTAREA' && nodeName !== 'DIV') {\n            // 只能是 textarea 和 div ，其他类型的元素不行\n            return;   \n        }\n        this.valueNodeName = nodeName.toLowerCase();\n        this.$valueContainer = $elem;\n\n        // 记录 elem 的 prev 和 parent（最后渲染 editor 要用到）\n        this.$prev = $elem.prev();\n        this.$parent = $elem.parent();\n\n        // ------------------初始化------------------\n        this.init();\n    };\n\n    E.fn = E.prototype;\n\n    E.$body = $('body');\n    E.$document = $(document);\n    E.$window = $(window);\n    E.userAgent = navigator.userAgent;\n    E.getComputedStyle = window.getComputedStyle;\n    E.w3cRange = typeof document.createRange === 'function';\n    E.hostname = location.hostname.toLowerCase();\n    E.websiteHost = 'wangeditor.github.io|www.wangeditor.com|wangeditor.coding.me';\n    E.isOnWebsite = E.websiteHost.indexOf(E.hostname) >= 0;\n    E.docsite = 'http://www.kancloud.cn/wangfupeng/wangeditor2/113961';\n\n    // 暴露给全局对象\n    window.wangEditor = E;\n\n    // 注册 plugin 事件，用于用户自定义插件\n    // 用户在引用 wangEditor.js 之后，还可以通过 E.plugin() 注入自定义函数，\n    // 该函数将会在 editor.create() 方法的最后一步执行\n    E.plugin = function (fn) {\n        if (!E._plugins) {\n            E._plugins = [];\n        }\n\n        if (typeof fn === 'function') {\n            E._plugins.push(fn);\n        }\n    };\n\n})(window, $);\n// editor 绑定事件\n_e(function (E, $) {\n\n    E.fn.init = function () {\n\n        // 初始化 editor 默认配置\n        this.initDefaultConfig();\n\n        // 增加container\n        this.addEditorContainer();\n\n        // 增加编辑区域\n        this.addTxt();\n\n        // 增加menuContainer\n        this.addMenuContainer();\n\n        // 初始化菜单集合\n        this.menus = {};\n\n        // 初始化commandHooks\n        this.commandHooks();\n\n    };\n\n});\n// editor api\n_e(function (E, $) {\n\n    // 预定义 ready 事件\n    E.fn.ready = function (fn) {\n\n        if (!this.readyFns) {\n            this.readyFns = [];\n        }\n\n        this.readyFns.push(fn);\n    };\n\n    // 处理ready事件\n    E.fn.readyHeadler = function () {\n        var fns = this.readyFns;\n\n        while (fns.length) {\n            fns.shift().call(this);\n        }\n    };\n\n    // 更新内容到 $valueContainer\n    E.fn.updateValue = function () {\n        var editor = this;\n        var $valueContainer = editor.$valueContainer;\n        var $txt = editor.txt.$txt;\n\n        if ($valueContainer === $txt) {\n            // 传入生成编辑器的div，即是编辑区域\n            return;\n        }\n\n        var value = $txt.html();\n        $valueContainer.val(value);\n    };\n\n    // 获取初始化的内容\n    E.fn.getInitValue = function () {\n        var editor = this;\n        var $valueContainer = editor.$valueContainer;\n        var currentValue = '';\n        var nodeName = editor.valueNodeName;\n        if (nodeName === 'div') {\n            currentValue = $valueContainer.html();\n        } else if (nodeName === 'textarea') {\n            currentValue = $valueContainer.val();\n        }\n\n        return currentValue;\n    };\n\n    // 触发菜单updatestyle\n    E.fn.updateMenuStyle = function () {\n        var menus = this.menus;\n\n        $.each(menus, function (k, menu) {\n            menu.updateSelected();\n        });\n    };\n\n    // 除了传入的 menuIds，其他全部启用\n    E.fn.enableMenusExcept = function (menuIds) {\n        if (this._disabled) {\n            // 编辑器处于禁用状态，则不执行改操作\n            return;\n        }\n        // menuIds参数：支持数组和字符串\n        menuIds = menuIds || [];\n        if (typeof menuIds === 'string') {\n            menuIds = [menuIds];\n        }\n\n        $.each(this.menus, function (k, menu) {\n            if (menuIds.indexOf(k) >= 0) {\n                return;\n            }\n            menu.disabled(false);\n        });\n    };\n\n    // 除了传入的 menuIds，其他全部禁用\n    E.fn.disableMenusExcept = function (menuIds) {\n        if (this._disabled) {\n            // 编辑器处于禁用状态，则不执行改操作\n            return;\n        }\n        // menuIds参数：支持数组和字符串\n        menuIds = menuIds || [];\n        if (typeof menuIds === 'string') {\n            menuIds = [menuIds];\n        }\n\n        $.each(this.menus, function (k, menu) {\n            if (menuIds.indexOf(k) >= 0) {\n                return;\n            }\n            menu.disabled(true);\n        });\n    };\n\n    // 隐藏所有 dropPanel droplist modal\n    E.fn.hideDropPanelAndModal = function () {\n        var menus = this.menus;\n\n        $.each(menus, function (k, menu) {\n            var m = menu.dropPanel || menu.dropList || menu.modal;\n            if (m && m.hide) {\n                m.hide();\n            }\n        });\n    };\n\n});\n// selection range API\n_e(function (E, $) {\n\n    // 用到 w3c range 的函数，如果检测到浏览器不支持 w3c range，则赋值为空函数\n    var ieRange = !E.w3cRange;\n    function emptyFn() {}\n\n    // 设置或读取当前的range\n    E.fn.currentRange = function (cr){\n        if (cr) {\n            this._rangeData = cr;\n        } else {\n            return this._rangeData;\n        }\n    };\n\n    // 将当前选区折叠\n    E.fn.collapseRange = function (range, opt) {\n        // opt 参数说明：'start'-折叠到开始; 'end'-折叠到结束\n        opt = opt || 'end';\n        opt = opt === 'start' ? true : false;\n\n        range = range || this.currentRange();\n        \n        if (range) {\n            // 合并，保存\n            range.collapse(opt);\n            this.currentRange(range);\n        }\n    };\n\n    // 获取选区的文字\n    E.fn.getRangeText = ieRange ? emptyFn : function (range) {\n        range = range || this.currentRange();\n        if (!range) {\n            return;\n        }\n        return range.toString();\n    };\n\n    // 获取选区对应的DOM对象\n    E.fn.getRangeElem = ieRange ? emptyFn : function (range) {\n        range = range || this.currentRange();\n        var dom = range.commonAncestorContainer;\n\n        if (dom.nodeType === 1) {\n            return dom;\n        } else {\n            return dom.parentNode;\n        }\n    };\n\n    // 选区内容是否为空？\n    E.fn.isRangeEmpty = ieRange ? emptyFn : function (range) {\n        range = range || this.currentRange();\n\n        if (range && range.startContainer) {\n            if (range.startContainer === range.endContainer) {\n                if (range.startOffset === range.endOffset) {\n                    return true;\n                }\n            }\n        }\n\n        return false;\n    };\n\n    // 保存选区数据\n    E.fn.saveSelection = ieRange ? emptyFn : function (range) {\n        var self = this,\n            _parentElem,\n            selection,\n            txt = self.txt.$txt.get(0);\n\n        if (range) {\n            _parentElem = range.commonAncestorContainer;\n        } else {\n            selection = document.getSelection();\n            if (selection.getRangeAt && selection.rangeCount) {\n                range = document.getSelection().getRangeAt(0);\n                _parentElem = range.commonAncestorContainer;\n            }\n        }\n        // 确定父元素一定要包含在编辑器区域内\n        if (_parentElem && ($.contains(txt, _parentElem) || txt === _parentElem) ) {\n            // 保存选择区域\n            self.currentRange(range);\n        }\n    };\n\n    // 恢复选中区域\n    E.fn.restoreSelection = ieRange ? emptyFn : function (range) {\n        var selection;\n\n        range = range || this.currentRange();\n\n        if (!range) {\n            return;\n        }\n\n        // 使用 try catch 来防止 IE 某些情况报错\n        try {\n            selection = document.getSelection();\n            selection.removeAllRanges();\n            selection.addRange(range);\n        } catch (ex) {\n            E.error('执行 editor.restoreSelection 时，IE可能会有异常，不影响使用');\n        }\n    };\n\n    // 根据elem恢复选区\n    E.fn.restoreSelectionByElem = ieRange ? emptyFn : function (elem, opt) {\n        // opt参数说明：'start'-折叠到开始，'end'-折叠到结束，'all'-全部选中\n        if (!elem) {\n            return;\n        }\n        opt = opt || 'end'; // 默认为折叠到结束\n\n        // 根据elem获取选区\n        this.setRangeByElem(elem);\n\n        // 根据 opt 折叠选区\n        if (opt === 'start') {\n            this.collapseRange(this.currentRange(), 'start');\n        }\n        if (opt === 'end') {\n            this.collapseRange(this.currentRange(), 'end');\n        }\n        \n        // 恢复选区\n        this.restoreSelection();\n    };\n\n    // 初始化选区\n    E.fn.initSelection = ieRange ? emptyFn : function () {\n        var editor = this;\n        if( editor.currentRange() ){\n            //如果currentRange有值，则不用再初始化\n            return;\n        }\n\n        var range;\n        var $txt = editor.txt.$txt;\n        var $firstChild = $txt.children().first();\n        \n        if ($firstChild.length) {\n            editor.restoreSelectionByElem($firstChild.get(0));\n        }\n    };\n\n    // 根据元素创建选区\n    E.fn.setRangeByElem = ieRange ? emptyFn : function (elem) {\n        var editor = this;\n        var txtElem = editor.txt.$txt.get(0);\n        if (!elem || !$.contains(txtElem, elem)) {\n            return;\n        }\n\n        // 找到elem的第一个 textNode 和 最后一个 textNode\n        var firstTextNode = elem.firstChild;\n        while (firstTextNode) {\n            if (firstTextNode.nodeType === 3) {\n                break;\n            }\n            // 继续向下\n            firstTextNode = firstTextNode.firstChild;\n        }\n        var lastTextNode = elem.lastChild;\n        while (lastTextNode) {\n            if (lastTextNode.nodeType === 3) {\n                break;\n            }\n            // 继续向下\n            lastTextNode = lastTextNode.lastChild;\n        }\n        \n        var range = document.createRange();\n        if (firstTextNode && lastTextNode) {\n            // 说明 elem 有内容，能取到子元素\n            range.setStart(firstTextNode, 0);\n            range.setEnd(lastTextNode, lastTextNode.textContent.length);\n        } else {\n            // 说明 elem 无内容\n            range.setStart(elem, 0);\n            range.setEnd(elem, 0);\n        }\n\n        // 保存选区\n        editor.saveSelection(range);\n    };\n\n});\n// selection range API - IE8及以下\n_e(function (E, $) {\n\n    if (E.w3cRange) {\n        // 说明支持 W3C 的range方法\n        return;\n    }\n\n    // -----------------IE8时，需要重写以下方法-------------------\n\n    // 获取选区的文字\n    E.fn.getRangeText = function (range) {\n        range = range || this.currentRange();\n        if (!range) {\n            return;\n        }\n        return range.text;\n    };\n\n    // 获取选区对应的DOM对象\n    E.fn.getRangeElem = function (range) {\n        range = range || this.currentRange();\n        if (!range) {\n            return;\n        }\n        var dom = range.parentElement();\n\n        if (dom.nodeType === 1) {\n            return dom;\n        } else {\n            return dom.parentNode;\n        }\n    };\n\n    // 选区内容是否为空？\n    E.fn.isRangeEmpty = function (range) {\n        range = range || this.currentRange();\n\n        if (range && range.text) {\n            return false;\n        }\n\n        return true;\n    };\n\n    // 保存选区数据\n    E.fn.saveSelection = function (range) {\n        var self = this,\n            _parentElem,\n            selection,\n            txt = self.txt.$txt.get(0);\n\n        if (range) {\n            _parentElem = range.parentElement();\n        } else {\n            range = document.selection.createRange();\n            if(typeof range.parentElement === 'undefined'){\n                //IE6、7中，insertImage后会执行此处\n                //由于找不到range.parentElement，所以干脆将_parentElem赋值为null\n                _parentElem = null;\n            }else{\n                _parentElem = range.parentElement();\n            }\n        }\n\n        // 确定父元素一定要包含在编辑器区域内\n        if (_parentElem && ($.contains(txt, _parentElem) || txt === _parentElem) ) {\n            // 保存选择区域\n            self.currentRange(range);\n        }\n    };\n\n    // 恢复选中区域\n    E.fn.restoreSelection = function (currentRange){\n        var editor = this,\n            selection,\n            range;\n\n        currentRange = currentRange || editor.currentRange();\n        if(!currentRange){\n            return;\n        }\n\n        range = document.selection.createRange();\n        try {\n            // 此处，plupload上传上传图片时，IE8-会报一个『参数无效』的错误\n            range.setEndPoint('EndToEnd', currentRange);\n        } catch (ex) {\n\n        }\n        \n        if(currentRange.text.length === 0){\n            try {\n                // IE8 插入表情会报错\n                range.collapse(false);\n            } catch (ex) {\n                \n            }\n            \n        }else{\n            range.setEndPoint('StartToStart', currentRange);\n        }\n        range.select();\n    };\n\n});\n// editor command hooks\n_e(function (E, $) {\n    \n    E.fn.commandHooks = function () {\n        var editor = this;\n        var commandHooks = {};\n        \n        // insertHtml\n        commandHooks.insertHtml = function (html) {\n            var $elem = $(html);\n            var rangeElem = editor.getRangeElem();\n            var targetElem;\n            \n            targetElem = editor.getLegalTags(rangeElem);\n            if (!targetElem) {\n                return;\n            }\n\n            $(targetElem).after($elem);\n        };\n\n        // 保存到对象\n        editor.commandHooks = commandHooks;\n    };\n\n});\n// editor command API\n_e(function (E, $) {\n\n    // 基本命令\n    E.fn.command = function (e, commandName, commandValue, callback) {\n        var editor = this;\n        var hooks;\n        \n        function commandFn() {\n            if (!commandName) {\n                return;\n            }\n            if (editor.queryCommandSupported(commandName)) {\n                // 默认命令\n                document.execCommand(commandName, false, commandValue);\n            } else {\n                // hooks 命令\n                hooks = editor.commandHooks;\n                if (commandName in hooks) {\n                    hooks[commandName](commandValue);\n                }\n            }\n        }\n\n        this.customCommand(e, commandFn, callback);\n    };\n\n    // 针对一个elem对象执行基础命令\n    E.fn.commandForElem = function (elemOpt, e, commandName, commandValue, callback) {\n        // 取得查询elem的查询条件和验证函数\n        var selector;\n        var check;\n        if (typeof elemOpt === 'string') {\n            selector = elemOpt;\n        } else {\n            selector = elemOpt.selector;\n            check = elemOpt.check;\n        }\n\n        // 查询elem\n        var rangeElem = this.getRangeElem();\n        rangeElem = this.getSelfOrParentByName(rangeElem, selector, check);\n\n        // 根据elem设置range\n        if (rangeElem) {\n            this.setRangeByElem(rangeElem);\n        }\n\n        // 然后执行基础命令\n        this.command(e, commandName, commandValue, callback);\n    };\n\n    // 自定义命令\n    E.fn.customCommand = function (e, commandFn, callback) {\n        var editor = this;\n        var range = editor.currentRange();\n\n        if (!range) {\n            // 目前没有选区，则无法执行命令\n            e && e.preventDefault();\n            return;\n        }\n        // 记录内容，以便撤销（执行命令之前就要记录）\n        editor.undoRecord();\n\n        // 恢复选区（有 range 参数）\n        this.restoreSelection(range);\n\n        // 执行命令事件\n        commandFn.call(editor);\n\n        // 保存选区（无参数，要从浏览器直接获取range信息）\n        this.saveSelection();\n        // 重新恢复选区（无参数，要取得刚刚从浏览器得到的range信息）\n        this.restoreSelection();\n\n        // 执行 callback\n        if (callback && typeof callback === 'function') {\n            callback.call(editor);\n        }\n\n        // 最后插入空行\n        editor.txt.insertEmptyP();\n\n        // 包裹暴露的img和text\n        editor.txt.wrapImgAndText();\n\n        // 更新内容\n        editor.updateValue();\n\n        // 更新菜单样式\n        editor.updateMenuStyle();\n\n        // 隐藏 dropPanel dropList modal  设置 200ms 间隔\n        function hidePanelAndModal() {\n            editor.hideDropPanelAndModal();\n        } \n        setTimeout(hidePanelAndModal, 200);\n\n        if (e) {\n            e.preventDefault();\n        }\n    };\n\n    // 封装 document.queryCommandValue 函数\n    // IE8 直接执行偶尔会报错，因此直接用 try catch 封装一下\n    E.fn.queryCommandValue = function (commandName) {\n        var result = '';\n        try {\n            result = document.queryCommandValue(commandName);\n        } catch (ex) {\n\n        }\n        return result;\n    };\n\n    // 封装 document.queryCommandState 函数\n    // IE8 直接执行偶尔会报错，因此直接用 try catch 封装一下\n    E.fn.queryCommandState = function (commandName) {\n        var result = false;\n        try {\n            result = document.queryCommandState(commandName);\n        } catch (ex) {\n\n        }\n        return result;\n    };\n\n    // 封装 document.queryCommandSupported 函数\n    E.fn.queryCommandSupported = function (commandName) {\n        var result = false;\n        try {\n            result = document.queryCommandSupported(commandName);\n        } catch (ex) {\n\n        }\n        return result;\n    };\n\n});\n// dom selector\n_e(function (E, $) {\n\n    var matchesSelector;\n\n    // matchesSelector hook\n    function _matchesSelectorForIE(selector) {\n        var elem = this;\n        var $elems = $(selector);\n        var result = false;\n\n        // 用jquery查找 selector 所有对象，如果其中有一个和传入 elem 相同，则证明 elem 符合 selector\n        $elems.each(function () {\n            if (this === elem) {\n                result = true;\n                return false;\n            }\n        });\n\n        return result;\n    }\n\n    // 从当前的elem，往上去查找合法标签 如 p head table blockquote ul ol 等\n    E.fn.getLegalTags = function (elem) {\n        var legalTags = this.config.legalTags;\n        if (!legalTags) {\n            E.error('配置项中缺少 legalTags 的配置');\n            return;\n        }\n        return this.getSelfOrParentByName(elem, legalTags);\n    };\n\n    // 根据条件，查询自身或者父元素，符合即返回\n    E.fn.getSelfOrParentByName = function (elem, selector, check) {\n\n        if (!elem || !selector) {\n            return;\n        }\n\n        if (!matchesSelector) {\n            // 定义 matchesSelector 函数\n            matchesSelector = elem.webkitMatchesSelector || \n                              elem.mozMatchesSelector ||\n                              elem.oMatchesSelector || \n                              elem.matchesSelector;\n        }\n        if (!matchesSelector) {\n            // 如果浏览器本身不支持 matchesSelector 则使用自定义的hook\n            matchesSelector = _matchesSelectorForIE;\n        }\n\n        var txt = this.txt.$txt.get(0);\n\n        while (elem && txt !== elem && $.contains(txt, elem)) {\n            if (matchesSelector.call(elem, selector)) {\n                // 符合 selector 查询条件\n\n                if (!check) {\n                    // 没有 check 验证函数，直接返回即可\n                    return elem;\n                }\n\n                if (check(elem)) {\n                    // 如果有 check 验证函数，还需 check 函数的确认\n                    return elem;\n                }\n            }\n\n            // 如果上一步没经过验证，则将跳转到父元素\n            elem = elem.parentNode;\n        }\n\n        return;\n    };\n\n});\n// undo redo\n_e(function (E, $) {\n\n    var length = 20;  // 缓存的最大长度\n    function _getRedoList(editor) {\n        if (editor._redoList == null) {\n            editor._redoList = [];\n        }\n        return editor._redoList;\n    }\n    function _getUndoList(editor) {\n        if (editor._undoList == null) {\n            editor._undoList = [];\n        }\n        return editor._undoList;\n    }\n\n    // 数据处理\n    function _handle(editor, data, type) {\n        // var range = data.range;\n        // var range2 = range.cloneRange && range.cloneRange();\n        var val = data.val;\n        var html = editor.txt.$txt.html();\n\n        if(val == null) {\n            return;\n        }\n\n        if (val === html) {\n            if (type === 'redo') { \n                editor.redo();\n                return;\n            } else if (type === 'undo') {\n                editor.undo();\n                return;\n            } else {\n                return;\n            }\n        }\n\n        // 保存数据\n        editor.txt.$txt.html(val);\n        // 更新数据到textarea（有必要的话）\n        editor.updateValue();\n\n        // onchange 事件\n        if (editor.onchange && typeof editor.onchange === 'function') {\n            editor.onchange.call(editor);\n        }\n\n        // ?????\n        // 注释：$txt 被重新赋值之后，range会被重置，cloneRange() 也不好使\n        // // 重置选区\n        // if (range2) {\n        //     editor.restoreSelection(range2);\n        // }\n    }\n\n    // 记录\n    E.fn.undoRecord = function () {\n        var editor = this;\n        var $txt = editor.txt.$txt;\n        var val = $txt.html();\n        var undoList = _getUndoList(editor);\n        var redoList = _getRedoList(editor);\n        var currentVal = undoList.length ? undoList[0] : '';\n\n        if (val === currentVal.val) {\n            return;\n        }\n\n        // 清空 redolist\n        if (redoList.length) {\n            redoList = [];\n        }\n\n        // 添加数据到 undoList\n        undoList.unshift({\n            range: editor.currentRange(),  // 将当前的range也记录下\n            val: val\n        });\n\n        // 限制 undoList 长度\n        if (undoList.length > length) {\n            undoList.pop();\n        }\n    };\n\n    // undo 操作\n    E.fn.undo = function () {\n        var editor = this;\n        var undoList = _getUndoList(editor);\n        var redoList = _getRedoList(editor);\n\n        if (!undoList.length) {\n            return;\n        }\n\n        // 取出 undolist 第一个值，加入 redolist\n        var data = undoList.shift();\n        redoList.unshift(data);\n\n        // 并修改编辑器的内容\n        _handle(this, data, 'undo');\n    };\n\n    // redo 操作\n    E.fn.redo = function () {\n        var editor = this;\n        var undoList = _getUndoList(editor);\n        var redoList = _getRedoList(editor);\n        if (!redoList.length) {\n            return;\n        }\n\n        // 取出 redolist 第一个值，加入 undolist\n        var data = redoList.shift();\n        undoList.unshift(data);\n\n        // 并修改编辑器的内容\n        _handle(this, data, 'redo');\n    };\n});\n// 暴露给用户的 API\n_e(function (E, $) {\n\n    // 创建编辑器\n    E.fn.create = function () {\n        var editor = this;\n\n        // 检查 E.$body 是否有值\n        // 如果在 body 之前引用了 js 文件，body 尚未加载，可能没有值\n        if (!E.$body || E.$body.length === 0) {\n            E.$body = $('body');\n            E.$document = $(document);\n            E.$window = $(window);\n        }\n\n        // 执行 addMenus 之前：\n        // 1. 允许用户修改 editor.UI 自定义配置UI\n        // 2. 允许用户通过修改 editor.menus 来自定义配置菜单\n        // 因此要在 create 时执行，而不是 init           \n        editor.addMenus();\n\n        // 渲染\n        editor.renderMenus();\n        editor.renderMenuContainer();\n        editor.renderTxt();\n        editor.renderEditorContainer();\n\n        // 绑定事件\n        editor.eventMenus();\n        editor.eventMenuContainer();\n        editor.eventTxt();\n\n        // 处理ready事件\n        editor.readyHeadler();\n\n        // 初始化选区\n        editor.initSelection();\n\n        // $txt 快捷方式\n        editor.$txt = editor.txt.$txt;\n\n        // 执行用户自定义事件，通过 E.ready() 添加\n        var _plugins = E._plugins;\n        if (_plugins && _plugins.length) {\n            $.each(_plugins, function (k, val) {\n                val.call(editor);\n            });\n        }\n    };\n\n    // 禁用编辑器\n    E.fn.disable = function () {\n        this.txt.$txt.removeAttr('contenteditable');\n        this.disableMenusExcept();\n\n        // 先禁用，再记录状态\n        this._disabled = true;\n    };\n    // 启用编辑器\n    E.fn.enable = function () {\n        // 先解除状态记录，再启用\n        this._disabled = false;\n        this.txt.$txt.attr('contenteditable', 'true');\n        this.enableMenusExcept();\n    };\n\n    // 销毁编辑器\n    E.fn.destroy = function () {\n        var self = this;\n        var $valueContainer = self.$valueContainer;\n        var $editorContainer = self.$editorContainer;\n        var valueNodeName = self.valueNodeName;\n\n        if (valueNodeName === 'div') {\n            // div 生成的编辑器\n            $valueContainer.removeAttr('contenteditable');\n            $editorContainer.after($valueContainer);\n            $editorContainer.hide();\n        } else {\n            // textarea 生成的编辑器\n            $valueContainer.show();\n            $editorContainer.hide();\n        }\n    };\n\n    // 撤销 销毁编辑器\n    E.fn.undestroy = function () {\n        var self = this;\n        var $valueContainer = self.$valueContainer;\n        var $editorContainer = self.$editorContainer;\n        var $menuContainer = self.menuContainer.$menuContainer;\n        var valueNodeName = self.valueNodeName;\n\n        if (valueNodeName === 'div') {\n            // div 生成的编辑器\n            $valueContainer.attr('contenteditable', 'true');\n            $menuContainer.after($valueContainer);\n            $editorContainer.show();\n        } else {\n            // textarea 生成的编辑器\n            $valueContainer.hide();\n            $editorContainer.show();\n        }\n    };\n\n    // 清空内容的快捷方式\n    E.fn.clear = function () {\n        var editor = this;\n        var $txt = editor.txt.$txt;\n        $txt.html('<p><br></p>');\n        editor.restoreSelectionByElem($txt.find('p').get(0));\n    };\n\n});\n// menuContainer 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var MenuContainer = function (editor) {\n        this.editor = editor;\n        this.init();\n    };\n\n    MenuContainer.fn = MenuContainer.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.MenuContainer = MenuContainer;\n\n});\n// MenuContainer.fn bind fn\n_e(function (E, $) {\n\n    var MenuContainer = E.MenuContainer;\n\n    // 初始化\n    MenuContainer.fn.init = function () {\n        var self = this;\n        var $menuContainer = $('<div class=\"wangEditor-menu-container clearfix\"></div>');\n\n        self.$menuContainer = $menuContainer;\n\n        // change shadow\n        self.changeShadow();\n    };\n\n    // 编辑区域滚动时，增加shadow\n    MenuContainer.fn.changeShadow = function () {\n        var $menuContainer = this.$menuContainer;\n        var editor = this.editor;\n        var $txt = editor.txt.$txt;\n\n        $txt.on('scroll', function () {\n            if ($txt.scrollTop() > 10) {\n                $menuContainer.addClass('wangEditor-menu-shadow');\n            } else {\n                $menuContainer.removeClass('wangEditor-menu-shadow');\n            }\n        });\n    };\n\n});\n// MenuContainer.fn API\n_e(function (E, $) {\n\n    var MenuContainer = E.MenuContainer;\n\n    MenuContainer.fn.render = function () {\n        var $menuContainer = this.$menuContainer;\n        var $editorContainer = this.editor.$editorContainer;\n\n        $editorContainer.append($menuContainer);\n    };\n    \n    // 获取菜单栏的高度\n    MenuContainer.fn.height = function () {\n        var $menuContainer = this.$menuContainer;\n        return $menuContainer.height();\n    };\n\n    // 添加菜单\n    MenuContainer.fn.appendMenu = function (groupIdx, menu) {\n        // 判断是否需要新增一个菜单组\n        this._addGroup(groupIdx);\n        // 增加菜单（返回 $menuItem）\n        return this._addOneMenu(menu);\n    };\n    MenuContainer.fn._addGroup = function (groupIdx) {\n        var $menuContainer = this.$menuContainer;\n        var $menuGroup;\n        if (!this.$currentGroup || this.currentGroupIdx !== groupIdx) {\n            $menuGroup = $('<div class=\"menu-group clearfix\"></div>');\n            $menuContainer.append($menuGroup);\n\n            this.$currentGroup = $menuGroup;\n            this.currentGroupIdx = groupIdx;\n        }\n    };\n    MenuContainer.fn._addOneMenu = function (menu) {\n        var $menuNormal = menu.$domNormal;\n        var $menuSelected = menu.$domSelected;\n\n        var $menuGroup = this.$currentGroup;\n        var $item = $('<div class=\"menu-item clearfix\"></div>');\n        $menuSelected.hide();\n        $item.append($menuNormal).append($menuSelected);\n        $menuGroup.append($item);\n\n        return $item;\n    };\n\n});\n// menu 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var Menu = function (opt) {\n        this.editor = opt.editor;\n        this.id = opt.id;\n        this.title = opt.title;\n        this.$domNormal = opt.$domNormal;\n        this.$domSelected = opt.$domSelected || opt.$domNormal;\n\n        // document.execCommand 的参数\n        this.commandName = opt.commandName;\n        this.commandValue = opt.commandValue;\n        this.commandNameSelected = opt.commandNameSelected || opt.commandName;\n        this.commandValueSelected = opt.commandValueSelected || opt.commandValue;\n    };\n\n    Menu.fn = Menu.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.Menu = Menu;\n});\n// Menu.fn 初始化绑定的事件\n_e(function (E, $) {\n\n    var Menu = E.Menu;\n\n    // 初始化UI\n    Menu.fn.initUI = function () {\n        var editor = this.editor;\n        var uiConfig = editor.UI.menus;\n        var menuId = this.id;\n        var menuUI = uiConfig[menuId];\n\n        if (this.$domNormal && this.$domSelected) {\n            // 自定义的菜单中，已经传入了 $dom 无需从配置文件中查找生成\n            return;\n        }\n\n        if (menuUI == null) {\n            E.warn('editor.UI配置中，没有菜单 \"' + menuId + '\" 的UI配置，只能取默认值');\n            \n            // 必须写成 uiConfig['default'];\n            // 写成 uiConfig.default IE8会报错\n            menuUI = uiConfig['default'];\n        }\n\n        // 正常状态\n        this.$domNormal = $(menuUI.normal);\n\n        // 选中状态\n        if (/^\\./.test(menuUI.selected)) {\n            // 增加一个样式\n            this.$domSelected = this.$domNormal.clone().addClass(menuUI.selected.slice(1));\n        } else {\n            // 一个新的dom对象\n            this.$domSelected = $(menuUI.selected);\n        }\n    };\n\n});\n// Menu.fn API\n_e(function (E, $) {\n\n    var Menu = E.Menu;\n\n    // 渲染菜单\n    Menu.fn.render = function (groupIdx) {\n        // 渲染UI\n        this.initUI();\n        \n        var editor = this.editor;\n        var menuContainer = editor.menuContainer;\n        var $menuItem = menuContainer.appendMenu(groupIdx, this);\n        var onRender = this.onRender;\n\n        // 渲染tip\n        this._renderTip($menuItem);\n\n        // 执行 onRender 函数\n        if (onRender && typeof onRender === 'function') {\n            onRender.call(this);\n        }\n    };\n    Menu.fn._renderTip = function ($menuItem) {\n        var self = this;\n        var editor = self.editor;\n        var title = self.title;\n        var $tip = $('<div class=\"menu-tip\"></div>');\n        // var $triangle = $('<i class=\"tip-triangle\"></i>'); // 小三角\n\n        // 计算 tip 宽度\n        var $tempDiv;\n        if (!self.tipWidth) {\n            // 设置一个纯透明的 p（absolute;top:-10000px;不会显示在内容区域）\n            // 内容赋值为 title ，为了计算tip宽度\n            $tempDiv = $('<p style=\"opacity:0; filter:Alpha(opacity=0); position:absolute;top:-10000px;\">' + title + '</p>');\n            // 先添加到body，计算完再 remove\n            E.$body.append($tempDiv);\n            editor.ready(function () {\n                var editor = this;\n                var titleWidth = $tempDiv.outerWidth() + 5; // 多出 5px 的冗余\n                var currentWidth = $tip.outerWidth();\n                var currentMarginLeft = parseFloat($tip.css('margin-left'), 10);\n                // 计算完，拿到数据，则弃用\n                $tempDiv.remove();\n                $tempDiv = null;\n\n                // 重新设置样式\n                $tip.css({\n                    width: titleWidth,\n                    'margin-left': currentMarginLeft + (currentWidth - titleWidth)/2\n                });\n\n                // 存储\n                self.tipWidth = titleWidth;\n            });\n        }\n\n        // $tip.append($triangle);\n        $tip.append(title);\n        $menuItem.append($tip);\n\n        function show() {\n            $tip.show();\n        }\n        function hide() {\n            $tip.hide();\n        }\n\n        var timeoutId;\n        $menuItem.find('a').on('mouseenter', function (e) {\n            if (!self.active() && !self.disabled()) {\n                timeoutId = setTimeout(show, 200);\n            }\n        }).on('mouseleave', function (e) {\n            timeoutId && clearTimeout(timeoutId);\n            hide();\n        }).on('click', hide);\n    };\n\n    // 绑定事件\n    Menu.fn.bindEvent = function () {\n        var self = this;\n\n        var $domNormal = self.$domNormal;\n        var $domSelected = self.$domSelected;\n\n        // 试图获取该菜单定义的事件（未selected），没有则自己定义\n        var clickEvent = self.clickEvent;\n        if (!clickEvent) {\n            clickEvent = function (e) {\n                // -----------dropPanel dropList modal-----------\n                var dropObj = self.dropPanel || self.dropList || self.modal;\n                if (dropObj && dropObj.show) {\n                    if (dropObj.isShowing) {\n                        dropObj.hide();\n                    } else {\n                        dropObj.show();\n                    }\n                    return;\n                }\n\n                // -----------command-----------\n                var editor = self.editor;\n                var commandName;\n                var commandValue;\n\n                var selected = self.selected;\n                if (selected) {\n                    commandName = self.commandNameSelected;\n                    commandValue = self.commandValueSelected;\n                } else {\n                    commandName = self.commandName;\n                    commandValue = self.commandValue;\n                }\n\n                if (commandName) {\n                    // 执行命令\n                    editor.command(e, commandName, commandValue);\n                } else {\n                    // 提示\n                    E.warn('菜单 \"' + self.id + '\" 未定义click事件');\n                    e.preventDefault();\n                }\n            };\n        }\n        // 获取菜单定义的selected情况下的点击事件\n        var clickEventSelected = self.clickEventSelected || clickEvent;\n\n        // 将事件绑定到菜单dom上\n        $domNormal.click(function (e) {\n            if (!self.disabled()) {\n                clickEvent.call(self, e);\n                self.updateSelected();\n            }\n            e.preventDefault();\n        });\n        $domSelected.click(function (e) {\n            if (!self.disabled()) {\n                clickEventSelected.call(self, e);\n                self.updateSelected();\n            }\n            e.preventDefault();\n        });\n    };\n\n    // 更新选中状态\n    Menu.fn.updateSelected = function () {\n        var self = this;\n        var editor = self.editor;\n\n        // 试图获取用户自定义的判断事件\n        var updateSelectedEvent = self.updateSelectedEvent;\n        if (!updateSelectedEvent) {\n            // 用户未自定义，则设置默认值\n            updateSelectedEvent = function () {\n                var self = this;\n                var editor = self.editor;\n                var commandName = self.commandName;\n                var commandValue = self.commandValue;\n\n                if (commandValue) {\n                    if (editor.queryCommandValue(commandName).toLowerCase() === commandValue.toLowerCase()) {\n                        return true;\n                    }\n                } else if (editor.queryCommandState(commandName)) {\n                    return true;\n                }\n\n                return false;\n            };\n        }\n\n        // 获取结果\n        var result = updateSelectedEvent.call(self);\n        result = !!result;\n\n        // 存储结果、显示效果\n        self.changeSelectedState(result);\n    };\n\n    // 切换选中状态、显示效果\n    Menu.fn.changeSelectedState = function (state) {\n        var self = this;\n        var selected = self.selected;\n\n        if (state != null && typeof state === 'boolean') {\n            if (selected === state) {\n                // 计算结果和当前的状态一样\n                return;\n            }\n            // 存储结果\n            self.selected = state;\n\n            // 切换菜单的显示\n            if (state) {\n                // 选中\n                self.$domNormal.hide();\n                self.$domSelected.show();\n            } else {\n                // 未选中\n                self.$domNormal.show();\n                self.$domSelected.hide();\n            }\n        } // if\n    };\n\n    // 点击菜单，显示了 dropPanel modal 时，菜单的状态 \n    Menu.fn.active = function (active) {\n        if (active == null) {\n            return this._activeState;\n        }\n        this._activeState = active;\n    };\n    Menu.fn.activeStyle = function (active) {\n        var selected = this.selected;\n        var $dom = this.$domNormal;\n        var $domSelected = this.$domSelected;\n\n        if (active) {\n            $dom.addClass('active');\n            $domSelected.addClass('active');\n        } else {\n            $dom.removeClass('active');\n            $domSelected.removeClass('active');\n        }\n\n        // 记录状态 （ menu hover 时会取状态用 ）\n        this.active(active);\n    };\n\n    // 菜单的启用和禁用\n    Menu.fn.disabled = function (opt) {\n        // 参数为空，取值\n        if (opt == null) {\n            return !!this._disabled;\n        }\n\n        if (this._disabled === opt) {\n            // 要设置的参数值和当前参数只一样，无需再次设置\n            return;\n        }\n\n        var $dom = this.$domNormal;\n        var $domSelected = this.$domSelected;\n\n        // 设置样式\n        if (opt) {\n            $dom.addClass('disable');\n            $domSelected.addClass('disable');\n        } else {\n            $dom.removeClass('disable');\n            $domSelected.removeClass('disable');\n        }\n\n        // 存储\n        this._disabled = opt;\n    };\n\n});\n// dropList 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var DropList = function (editor, menu, opt) {\n        this.editor = editor;\n        this.menu = menu;\n\n        // list 的数据源，格式 {'commandValue': 'title', ...}\n        this.data = opt.data;\n        // 要为每个item自定义的模板\n        this.tpl = opt.tpl;\n        // 为了执行 editor.commandForElem 而传入的elem查询方式\n        this.selectorForELemCommand = opt.selectorForELemCommand;\n\n        // 执行事件前后的钩子\n        this.beforeEvent = opt.beforeEvent;\n        this.afterEvent = opt.afterEvent;\n\n        // 初始化\n        this.init();\n    };\n\n    DropList.fn = DropList.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.DropList = DropList;\n});\n// dropList fn bind\n_e(function (E, $) {\n\n    var DropList = E.DropList;\n\n    // init\n    DropList.fn.init = function () {\n        var self = this;\n\n        // 生成dom对象\n        self.initDOM();\n\n        // 绑定command事件\n        self.bindEvent();\n\n        // 声明隐藏的事件\n        self.initHideEvent();\n    };\n\n    // 初始化dom结构\n    DropList.fn.initDOM = function () {\n        var self = this;\n        var data = self.data;\n        var tpl = self.tpl || '<span>{#title}</span>';\n        var $list = $('<div class=\"wangEditor-drop-list clearfix\"></div>');\n\n        var itemContent;\n        var $item;\n        $.each(data, function (commandValue, title) {\n            itemContent = tpl.replace(/{#commandValue}/ig, commandValue).replace(/{#title}/ig, title);\n            $item = $('<a href=\"#\" commandValue=\"' + commandValue + '\"></a>');\n            $item.append(itemContent);\n            $list.append($item);\n        });\n\n        self.$list = $list;\n    };\n\n    // 绑定事件\n    DropList.fn.bindEvent = function () {\n        var self = this;\n        var editor = self.editor;\n        var menu = self.menu;\n        var commandName = menu.commandName;\n        var selectorForELemCommand = self.selectorForELemCommand;\n        var $list = self.$list;\n\n        // 执行事件前后的钩子函数\n        var beforeEvent = self.beforeEvent;\n        var afterEvent = self.afterEvent;\n\n        $list.on('click', 'a[commandValue]', function (e) {\n            // 正式命令执行之前\n            if (beforeEvent && typeof beforeEvent === 'function') {\n                beforeEvent.call(e);\n            }\n\n            // 执行命令\n            var commandValue = $(e.currentTarget).attr('commandValue');\n            if (menu.selected && editor.isRangeEmpty() && selectorForELemCommand) {\n                // 当前处于选中状态，并且选中内容为空\n                editor.commandForElem(selectorForELemCommand, e, commandName, commandValue);\n            } else {\n                // 当前未处于选中状态，或者有选中内容。则执行默认命令\n                editor.command(e, commandName, commandValue);\n            }\n\n            // 正式命令之后的钩子\n            if (afterEvent && typeof afterEvent === 'function') {\n                afterEvent.call(e);\n            }\n        });\n    };\n\n    // 点击其他地方，立即隐藏 droplist\n    DropList.fn.initHideEvent = function () {\n        var self = this;\n\n        // 获取 list elem\n        var thisList = self.$list.get(0);\n\n        E.$body.on('click', function (e) {\n            if (!self.isShowing) {\n                return;\n            }\n            var trigger = e.target;\n\n            // 获取菜单elem\n            var menu = self.menu;\n            var menuDom;\n            if (menu.selected) {\n                menuDom = menu.$domSelected.get(0);\n            } else {\n                menuDom = menu.$domNormal.get(0);\n            }\n\n            if (menuDom === trigger || $.contains(menuDom, trigger)) {\n                // 说明由本菜单点击触发的\n                return;\n            }\n\n            if (thisList === trigger || $.contains(thisList, trigger)) {\n                // 说明由本list点击触发的\n                return;\n            }\n\n            // 其他情况，隐藏 list\n            self.hide();\n        });\n\n        E.$window.scroll(function () {\n            self.hide();\n        });\n\n        E.$window.on('resize', function () {\n            self.hide();\n        });\n    };\n\n});\n// dropListfn api\n_e(function (E, $) {\n    \n    var DropList = E.DropList;\n\n    // 渲染\n    DropList.fn._render = function () {\n        var self = this;\n        var editor = self.editor;\n        var $list = self.$list;\n\n        // 渲染到页面\n        editor.$editorContainer.append($list);\n\n        // 记录状态\n        self.rendered = true;\n    };\n\n    // 定位\n    DropList.fn._position = function () {\n        var self = this;\n        var $list = self.$list;\n        var editor = self.editor;\n        var menu = self.menu;\n        var $menuContainer = editor.menuContainer.$menuContainer;\n        var $menuDom = menu.selected ? menu.$domSelected : menu.$domNormal;\n        // 注意这里的 offsetParent() 要返回 .menu-item 的 position\n        // 因为 .menu-item 是 position:relative\n        var menuPosition = $menuDom.offsetParent().position();\n\n        // 取得 menu 的位置、尺寸属性\n        var menuTop = menuPosition.top;\n        var menuLeft = menuPosition.left;\n        var menuHeight = $menuDom.offsetParent().height();\n        var menuWidth = $menuDom.offsetParent().width();\n\n        // 取得 list 的尺寸属性\n        var listWidth = $list.outerWidth();\n        // var listHeight = $list.outerHeight();\n\n        // 取得 $txt 的尺寸\n        var txtWidth = editor.txt.$txt.outerWidth();\n\n        // ------------开始计算-------------\n\n        // 初步计算 list 位置属性\n        var top = menuTop + menuHeight;\n        var left = menuLeft + menuWidth/2;\n        var marginLeft = 0 - menuWidth/2;\n\n        // 如果超出了有边界，则要左移（且和右侧有间隙）\n        var valWithTxt = (left + listWidth) - txtWidth;\n        if (valWithTxt > -10) {\n            marginLeft = marginLeft - valWithTxt - 10;\n        }\n        // 设置样式\n        $list.css({\n            top: top,\n            left: left,\n            'margin-left': marginLeft\n        });\n\n        // 如果因为向下滚动而导致菜单fixed，则再加一步处理\n        if (editor._isMenufixed) {\n            top = top + (($menuContainer.offset().top + $menuContainer.outerHeight()) - $list.offset().top);\n\n            // 重新设置top\n            $list.css({\n                top: top\n            });\n        }\n    };\n\n    // 显示\n    DropList.fn.show = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.rendered) {\n            // 第一次show之前，先渲染\n            self._render();\n        }\n\n        if (self.isShowing) {\n            return;\n        }\n\n        var $list = self.$list;\n        $list.show();\n\n        // 定位\n        self._position();\n\n        // 记录状态\n        self.isShowing = true;\n\n        // 菜单状态\n        menu.activeStyle(true);\n    };\n\n    // 隐藏\n    DropList.fn.hide = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.isShowing) {\n            return;\n        }\n\n        var $list = self.$list;\n        $list.hide();\n\n        // 记录状态\n        self.isShowing = false;\n\n        // 菜单状态\n        menu.activeStyle(false);\n    };\n});\n// dropPanel 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var DropPanel = function (editor, menu, opt) {\n        this.editor = editor;\n        this.menu = menu;\n        this.$content = opt.$content;\n        this.width = opt.width || 200;\n        this.height = opt.height;\n        this.onRender = opt.onRender;\n\n        // init\n        this.init();\n    };\n\n    DropPanel.fn = DropPanel.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.DropPanel = DropPanel;\n});\n// dropPanel fn bind\n_e(function (E, $) {\n\n    var DropPanel = E.DropPanel;\n\n    // init\n    DropPanel.fn.init = function () {\n        var self = this;\n\n        // 生成dom对象\n        self.initDOM();\n\n        // 声明隐藏的事件\n        self.initHideEvent();\n    };\n\n    // init DOM\n    DropPanel.fn.initDOM = function () {\n        var self = this;\n        var $content = self.$content;\n        var width = self.width;\n        var height = self.height;\n        var $panel = $('<div class=\"wangEditor-drop-panel clearfix\"></div>');\n        var $triangle = $('<div class=\"tip-triangle\"></div>');\n\n        $panel.css({\n            width: width,\n            height: height ? height : 'auto'\n        });\n        $panel.append($triangle);\n        $panel.append($content);\n\n        // 添加对象数据\n        self.$panel = $panel;\n        self.$triangle = $triangle;\n    };\n\n    // 点击其他地方，立即隐藏 dropPanel\n    DropPanel.fn.initHideEvent = function () {\n        var self = this;\n\n        // 获取 panel elem\n        var thisPanle = self.$panel.get(0);\n\n        E.$body.on('click', function (e) {\n            if (!self.isShowing) {\n                return;\n            }\n            var trigger = e.target;\n\n            // 获取菜单elem\n            var menu = self.menu;\n            var menuDom;\n            if (menu.selected) {\n                menuDom = menu.$domSelected.get(0);\n            } else {\n                menuDom = menu.$domNormal.get(0);\n            }\n\n            if (menuDom === trigger || $.contains(menuDom, trigger)) {\n                // 说明由本菜单点击触发的\n                return;\n            }\n\n            if (thisPanle === trigger || $.contains(thisPanle, trigger)) {\n                // 说明由本panel点击触发的\n                return;\n            }\n\n            // 其他情况，隐藏 panel\n            self.hide();\n        });\n\n        E.$window.scroll(function (e) {\n            self.hide();\n        });\n\n        E.$window.on('resize', function () {\n            self.hide();\n        });\n    };\n\n});\n// dropPanel fn api\n_e(function (E, $) {\n   \n    var DropPanel = E.DropPanel;\n\n    // 渲染\n    DropPanel.fn._render = function () {\n        var self = this;\n        var onRender = self.onRender;\n        var editor = self.editor;\n        var $panel = self.$panel;\n\n        // 渲染到页面\n        editor.$editorContainer.append($panel);\n\n        // 渲染后的回调事件\n        onRender && onRender.call(self);\n\n        // 记录状态\n        self.rendered = true;\n    };\n\n    // 定位\n    DropPanel.fn._position = function () {\n        var self = this;\n        var $panel = self.$panel;\n        var $triangle = self.$triangle;\n        var editor = self.editor;\n        var $menuContainer = editor.menuContainer.$menuContainer;\n        var menu = self.menu;\n        var $menuDom = menu.selected ? menu.$domSelected : menu.$domNormal;\n        // 注意这里的 offsetParent() 要返回 .menu-item 的 position\n        // 因为 .menu-item 是 position:relative\n        var menuPosition = $menuDom.offsetParent().position();\n\n        // 取得 menu 的位置、尺寸属性\n        var menuTop = menuPosition.top;\n        var menuLeft = menuPosition.left;\n        var menuHeight = $menuDom.offsetParent().height();\n        var menuWidth = $menuDom.offsetParent().width();\n\n        // 取得 panel 的尺寸属性\n        var panelWidth = $panel.outerWidth();\n        // var panelHeight = $panel.outerHeight();\n\n        // 取得 $txt 的尺寸\n        var txtWidth = editor.txt.$txt.outerWidth();\n\n        // ------------开始计算-------------\n\n        // 初步计算 panel 位置属性\n        var top = menuTop + menuHeight;\n        var left = menuLeft + menuWidth/2;\n        var marginLeft = 0 - panelWidth/2;\n        var marginLeft2 = marginLeft;  // 下文用于和 marginLeft 比较，来设置三角形tip的位置\n\n        // 如果超出了左边界，则移动回来（要和左侧有10px间隙）\n        if ((0 - marginLeft) > (left - 10)) {\n            marginLeft = 0 - (left - 10);\n        }\n\n        // 如果超出了有边界，则要左移（且和右侧有10px间隙）\n        var valWithTxt = (left + panelWidth + marginLeft) - txtWidth;\n        if (valWithTxt > -10) {\n            marginLeft = marginLeft - valWithTxt - 10;\n        }\n\n        // 设置样式\n        $panel.css({\n            top: top,\n            left: left,\n            'margin-left': marginLeft\n        });\n\n        // 如果因为向下滚动而导致菜单fixed，则再加一步处理\n        if (editor._isMenufixed) {\n            top = top + (($menuContainer.offset().top + $menuContainer.outerHeight()) - $panel.offset().top);\n\n            // 重新设置top\n            $panel.css({\n                top: top\n            });\n        }\n\n        // 设置三角形 tip 的位置\n        $triangle.css({\n            'margin-left': marginLeft2 - marginLeft - 5\n        });\n    };\n\n    // focus 第一个 input\n    DropPanel.fn.focusFirstInput = function () {\n        var self = this;\n        var $panel = self.$panel;\n        $panel.find('input[type=text],textarea').each(function () {\n            var $input = $(this);\n            if ($input.attr('disabled') == null) {\n                $input.focus();\n                return false;\n            }\n        });\n    };\n\n    // 显示\n    DropPanel.fn.show = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.rendered) {\n            // 第一次show之前，先渲染\n            self._render();\n        }\n\n        if (self.isShowing) {\n            return;\n        }\n\n        var $panel = self.$panel;\n        $panel.show();\n\n        // 定位\n        self._position();\n\n        // 记录状态\n        self.isShowing = true;\n\n        // 菜单状态\n        menu.activeStyle(true);\n\n        if (E.w3cRange) {\n            // 高级浏览器\n            self.focusFirstInput();\n        } else {\n            // 兼容 IE8 input placeholder\n            E.placeholderForIE8($panel);\n        }\n    };\n\n    // 隐藏\n    DropPanel.fn.hide = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.isShowing) {\n            return;\n        }\n\n        var $panel = self.$panel;\n        $panel.hide();\n\n        // 记录状态\n        self.isShowing = false;\n\n        // 菜单状态\n        menu.activeStyle(false);\n    };\n\n});\n// modal 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var Modal = function (editor, menu, opt) {\n        this.editor = editor;\n        this.menu = menu;\n        this.$content = opt.$content;\n\n        this.init();\n    };\n\n    Modal.fn = Modal.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.Modal = Modal;\n});\n// modal fn bind\n_e(function (E, $) {\n\n    var Modal = E.Modal;\n\n    Modal.fn.init = function () {\n        var self = this;\n\n        // 初始化dom\n        self.initDom();\n\n        // 初始化隐藏事件\n        self.initHideEvent();\n    };\n\n    // 初始化dom\n    Modal.fn.initDom = function () {\n        var self = this;\n        var $content = self.$content;\n        var $modal = $('<div class=\"wangEditor-modal\"></div>');\n        var $close = $('<div class=\"wangEditor-modal-close\"><i class=\"wangeditor-menu-img-cancel-circle\"></i></div>');\n\n        $modal.append($close);\n        $modal.append($content);\n\n        // 记录数据\n        self.$modal = $modal;\n        self.$close = $close;\n    };\n\n    // 初始化隐藏事件\n    Modal.fn.initHideEvent = function () {\n        var self = this;\n        var $close = self.$close;\n        var modal = self.$modal.get(0);\n\n        // 点击 $close 按钮，隐藏\n        $close.click(function () {\n            self.hide();\n        });\n\n        // 点击其他部分，隐藏\n        E.$body.on('click', function (e) {\n            if (!self.isShowing) {\n                return;\n            }\n            var trigger = e.target;\n\n            // 获取菜单elem\n            var menu = self.menu;\n            var menuDom;\n            if (menu) {\n                if (menu.selected) {\n                    menuDom = menu.$domSelected.get(0);\n                } else {\n                    menuDom = menu.$domNormal.get(0);\n                }\n\n                if (menuDom === trigger || $.contains(menuDom, trigger)) {\n                    // 说明由本菜单点击触发的\n                    return;\n                }\n            }\n\n            if (modal === trigger || $.contains(modal, trigger)) {\n                // 说明由本panel点击触发的\n                return;\n            }\n\n            // 其他情况，隐藏 panel\n            self.hide();\n        });\n    };\n});\n// modal fn api\n_e(function (E, $) {\n\n    var Modal = E.Modal;\n\n    // 渲染\n    Modal.fn._render = function () {\n        var self = this;\n        var editor = self.editor;\n        var $modal = self.$modal;\n\n        // $modal的z-index，在配置的z-index基础上再 +10\n        $modal.css('z-index', editor.config.zindex + 10 + '');\n\n        // 渲染到body最后面\n        E.$body.append($modal);\n\n        // 记录状态\n        self.rendered = true;\n    };\n\n    // 定位\n    Modal.fn._position = function () {\n        var self = this;\n        var $modal = self.$modal;\n        var top = $modal.offset().top;\n        var width = $modal.outerWidth();\n        var height = $modal.outerHeight();\n        var marginLeft = 0 - (width / 2);\n        var marginTop = 0 - (height / 2);\n        var sTop = E.$window.scrollTop();\n\n        // 保证modal最顶部，不超过浏览器上边框\n        if ((height / 2) > top) {\n            marginTop = 0 - top;\n        }\n\n        $modal.css({\n            'margin-left': marginLeft + 'px',\n            'margin-top': (marginTop + sTop) + 'px'\n        });\n    };\n\n    // 显示\n    Modal.fn.show = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.rendered) {\n            // 第一次show之前，先渲染\n            self._render();\n        }\n\n        if (self.isShowing) {\n            return;\n        }\n        // 记录状态\n        self.isShowing = true;\n\n        var $modal = self.$modal;\n        $modal.show();\n\n        // 定位\n        self._position();\n\n        // 激活菜单状态\n        menu && menu.activeStyle(true);\n    };\n\n    // 隐藏\n    Modal.fn.hide = function () {\n        var self = this;\n        var menu = self.menu;\n        if (!self.isShowing) {\n            return;\n        }\n        // 记录状态\n        self.isShowing = false;\n\n        // 隐藏\n        var $modal = self.$modal;\n        $modal.hide();\n\n        // 菜单状态\n        menu && menu.activeStyle(false);\n    };\n});\n// txt 构造函数\n_e(function (E, $) {\n\n    // 定义构造函数\n    var Txt = function (editor) {\n        this.editor = editor;\n\n        // 初始化\n        this.init();\n    };\n\n    Txt.fn = Txt.prototype;\n\n    // 暴露给 E 即 window.wangEditor\n    E.Txt = Txt;\n});\n// Txt.fn bind fn\n_e(function (E, $) {\n\n    var Txt = E.Txt;\n\n    // 初始化\n    Txt.fn.init = function () {\n        var self = this;\n        var editor = self.editor;\n        var $valueContainer = editor.$valueContainer;\n        var currentValue = editor.getInitValue();\n        var $txt;\n\n        if ($valueContainer.get(0).nodeName === 'DIV') {\n            // 如果传入生成编辑器的元素就是div，则直接使用\n            $txt = $valueContainer;\n            $txt.addClass(\"wangEditor-txt\");\n            $txt.attr('contentEditable', 'true');\n        } else {\n            // 如果不是div（是textarea），则创建一个div\n            $txt = $(\n                '<div class=\"wangEditor-txt\" contentEditable=\"true\">' +\n                    currentValue +\n                '</div>'\n            );\n        }\n\n        // 试图最后插入一个空行，ready之后才行\n        editor.ready(function () {\n            self.insertEmptyP();\n        });\n\n        self.$txt = $txt;\n\n        // 删除时，如果没有内容了，就添加一个 <p><br></p>\n        self.contentEmptyHandle();\n\n        // enter时，不能使用 div 换行\n        self.bindEnterForDiv();\n\n        // enter时，用 p 包裹 text\n        self.bindEnterForText();\n\n        // tab 插入4个空格\n        self.bindTabEvent();\n\n        // 处理粘贴内容\n        self.bindPasteFilter();\n\n        // $txt.formatText() 方法\n        self.bindFormatText();\n\n        // 定义 $txt.html() 方法\n        self.bindHtml();\n    };\n\n    // 删除时，如果没有内容了，就添加一个 <p><br></p>\n    Txt.fn.contentEmptyHandle = function () {\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n        var $p;\n\n        $txt.on('keydown', function (e) {\n            if (e.keyCode !== 8) {\n                return;\n            }\n            var txtHtml = $.trim($txt.html().toLowerCase());\n            if (txtHtml === '<p><br></p>') {\n                // 如果最后还剩余一个空行，就不再继续删除了\n                e.preventDefault();\n                return;\n            }\n        });\n\n        $txt.on('keyup', function (e) {\n            if (e.keyCode !== 8) {\n                return;\n            }\n            var txtHtml = $.trim($txt.html().toLowerCase());\n            // ff时用 txtHtml === '<br>' 判断，其他用 !txtHtml 判断\n            if (!txtHtml || txtHtml === '<br>') {\n                // 内容空了\n                $p = $('<p><br/></p>');\n                $txt.html(''); // 一定要先清空，否则在 ff 下有问题\n                $txt.append($p);\n                editor.restoreSelectionByElem($p.get(0));\n            }\n        });\n    };\n\n    // enter时，不能使用 div 换行\n    Txt.fn.bindEnterForDiv = function () {\n        var tags = E.config.legalTags; // 配置中编辑器要求的合法标签，如 p head table blockquote ul ol 等\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n\n        var $keydownDivElem;\n        function divHandler() {\n            if (!$keydownDivElem) {\n                return;\n            }\n\n            var $pElem = $('<p>' + $keydownDivElem.html() + '</p>');\n            $keydownDivElem.after($pElem);\n            $keydownDivElem.remove();\n        }\n\n        $txt.on('keydown keyup', function (e) {\n            if (e.keyCode !== 13) {\n                return;\n            }\n            // 查找合法标签\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getLegalTags(rangeElem);\n            var $targetElem;\n            var $pElem;\n\n            if (!targetElem) {\n                // 没找到合法标签，就去查找 div\n                targetElem = editor.getSelfOrParentByName(rangeElem, 'div');\n                if (!targetElem) {\n                    return;\n                }\n                $targetElem = $(targetElem);\n\n                if (e.type === 'keydown') {\n                    // 异步执行（同步执行会出现问题）\n                    $keydownDivElem = $targetElem;\n                    setTimeout(divHandler, 0);\n                }\n\n                if (e.type === 'keyup') {\n                    // 将 div 的内容移动到 p 里面，并移除 div\n                    $pElem = $('<p>' + $targetElem.html() + '</p>');\n                    $targetElem.after($pElem);\n                    $targetElem.remove();\n\n                    // 如果是回车结束，将选区定位到行首\n                    editor.restoreSelectionByElem($pElem.get(0), 'start');\n                }\n            }\n        });\n    };\n\n    // enter时，用 p 包裹 text\n    Txt.fn.bindEnterForText = function () {\n        var self = this;\n        var $txt = self.$txt;\n        var handle;\n        $txt.on('keyup', function (e) {\n            if (e.keyCode !== 13) {\n                return;\n            }\n            if (!handle) {\n                handle = function() {\n                    self.wrapImgAndText();\n                };\n            }\n            setTimeout(handle);\n        });\n    };\n\n    // tab 时，插入4个空格\n    Txt.fn.bindTabEvent = function () {\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n\n        $txt.on('keydown', function (e) {\n            if (e.keyCode !== 9) {\n                // 只监听 tab 按钮\n                return;\n            }\n            // 如果浏览器支持 insertHtml 则插入4个空格。如果不支持，就不管了\n            if (editor.queryCommandSupported('insertHtml')) {\n                editor.command(e, 'insertHtml', '&nbsp;&nbsp;&nbsp;&nbsp;');\n            }\n        });\n    };\n\n    // 处理粘贴内容\n    Txt.fn.bindPasteFilter = function () {\n        var self = this;\n        var editor = self.editor;\n        var resultHtml = '';  //存储最终的结果\n        var $txt = self.$txt;\n        var legalTags = editor.config.legalTags;\n        var legalTagArr = legalTags.split(',');\n\n        $txt.on('paste', function (e) {\n            if (!editor.config.pasteFilter) {\n                // 配置中取消了粘贴过滤\n                return;\n            }\n\n            var currentNodeName = editor.getRangeElem().nodeName;\n            if (currentNodeName === 'TD' || currentNodeName === 'TH') {\n                // 在表格的单元格中粘贴，忽略所有内容。否则会出现异常情况\n                return;\n            }\n\n            resultHtml = ''; // 先清空 resultHtml\n\n            var pasteHtml, $paste, docSplitHtml;\n            var data = e.clipboardData || e.originalEvent.clipboardData;\n            var ieData = window.clipboardData;\n\n            if (editor.config.pasteText) {\n                // 只粘贴纯文本\n\n                if (data && data.getData) {\n                    // w3c\n                    pasteHtml = data.getData('text/plain');\n                } else if (ieData && ieData.getData) {\n                    // IE\n                    pasteHtml = ieData.getData('text');\n                } else {\n                    // 其他情况\n                    return;\n                }\n\n                // 拼接为 <p> 标签\n                if (pasteHtml) {\n                    resultHtml = '<p>' + pasteHtml + '</p>';\n                }\n\n            } else {\n                // 粘贴过滤了样式的、只有标签的 html\n\n                if (data && data.getData) {\n                    // w3c\n\n                    // 获取粘贴过来的html\n                    pasteHtml = data.getData('text/html');\n\n                    // 过滤从 word excel 粘贴过来的乱码\n                    docSplitHtml = pasteHtml.split('</html>');\n                    if (docSplitHtml.length === 2) {\n                        pasteHtml = docSplitHtml[0];\n                    }\n\n                    if (pasteHtml) {\n                        // 创建dom\n                        $paste = $('<div>' + pasteHtml + '</div>');\n                        // 处理，并将结果存储到 resultHtml 『全局』变量\n                        handle($paste.get(0));\n                    } else {\n                        // 得不到html，试图获取text\n                        pasteHtml = data.getData('text/plain');\n                        if (pasteHtml) {\n                            // 替换特殊字符\n                            pasteHtml = pasteHtml.replace(/[ ]/g, '&nbsp;')\n                                                 .replace(/</g, '&lt;')\n                                                 .replace(/>/g, '&gt;')\n                                                 .replace(/\\n/g, '</p><p>');\n                            // 拼接\n                            resultHtml = '<p>' + pasteHtml + '</p>';\n\n                            // 查询链接\n                            resultHtml = resultHtml.replace(/<p>(https?:\\/\\/.*?)<\\/p>/ig, function (match, link) {\n                                return '<p><a href=\"' + link + '\" target=\"_blank\">' + link + '</p>';\n                            });\n                        }\n                    }\n                    \n                } else if (ieData && ieData.getData) {\n                    // IE 直接从剪切板中取出纯文本格式\n                    resultHtml = ieData.getData('text');\n                    if (!resultHtml) {\n                        return;\n                    }\n                    // 拼接为 <p> 标签\n                    resultHtml = '<p>' + resultHtml + '</p>';\n                    resultHtml = resultHtml.replace(new RegExp('\\n', 'g'), '</p><p>');\n                } else {\n                    // 其他情况\n                    return;\n                }\n            }\n\n            // 执行命令\n            if (resultHtml) {\n                editor.command(e, 'insertHtml', resultHtml);\n\n                // 删除内容为空的 p 和嵌套的 p\n                self.clearEmptyOrNestP();\n            }\n        });\n\n        // 处理粘贴的内容\n        function handle(elem) {\n            if (!elem || !elem.nodeType || !elem.nodeName) {\n                return;\n            }\n            var $elem;\n            var nodeName = elem.nodeName.toLowerCase();\n            var nodeType = elem.nodeType;\n            var childNodesClone;\n\n            // 只处理文本和普通node标签\n            if (nodeType !== 3 && nodeType !== 1) {\n                return;\n            }\n\n            $elem = $(elem);\n\n            // 如果是容器，则继续深度遍历\n            if (nodeName === 'div') {\n                childNodesClone = [];\n                $.each(elem.childNodes, function (index, item) {\n                    // elem.childNodes 可获取TEXT节点，而 $elem.children() 就获取不到\n                    // 先将 elem.childNodes 拷贝一份，一面在循环递归过程中 elem 发生变化\n                    childNodesClone.push(item);\n                });\n                // 遍历子元素，执行操作\n                $.each(childNodesClone, function () {\n                    handle(this);\n                });\n                return;\n            }\n            \n            if (legalTagArr.indexOf(nodeName) >= 0) {\n                // 如果是合法标签之内的，则根据元素类型，获取值\n                resultHtml += getResult(elem);\n            } else if (nodeType === 3) {\n                // 如果是文本，则直接插入 p 标签\n                resultHtml += '<p>' + elem.textContent + '</p>';\n            } else if (nodeName === 'br') {\n                // <br>保留\n                resultHtml += '<br/>';\n            }\n            else {\n                // 忽略的标签\n                if (['meta', 'style', 'script', 'object', 'form', 'iframe', 'hr'].indexOf(nodeName) >= 0) {\n                    return;\n                }\n                // 其他标签，移除属性，插入 p 标签\n                $elem = $(removeAttrs(elem));\n                // 注意，这里的 clone() 是必须的，否则会出错\n                resultHtml += $('<div>').append($elem.clone()).html();\n            }\n        }\n\n        // 获取元素的结果\n        function getResult(elem) {\n            var nodeName = elem.nodeName.toLowerCase();\n            var $elem;\n            var htmlForP = '';\n            var htmlForLi = '';\n\n            if (['blockquote'].indexOf(nodeName) >= 0) {\n\n                // 直接取出元素text即可\n                $elem = $(elem);\n                return '<' + nodeName + '>' + $elem.text() + '</' + nodeName + '>';\n\n            } else if (['p', 'h1', 'h2', 'h3', 'h4', 'h5'].indexOf(nodeName) >= 0) {\n\n                //p head 取出 text 和链接\n                elem = removeAttrs(elem);\n                $elem = $(elem);\n                htmlForP = $elem.html();\n\n                // 剔除 a img 之外的元素\n                htmlForP = htmlForP.replace(/<.*?>/ig, function (tag) {\n                    if (tag === '</a>' || tag.indexOf('<a ') === 0 || tag.indexOf('<img ') === 0) {\n                        return tag;\n                    } else {\n                        return '';\n                    }\n                });\n\n                return '<' + nodeName + '>' + htmlForP + '</' + nodeName + '>';\n\n            } else if (['ul', 'ol'].indexOf(nodeName) >= 0) {\n                \n                // ul ol元素，获取子元素（li元素）的text link img，再拼接\n                $elem = $(elem);\n                $elem.children().each(function () {\n                    var $li = $(removeAttrs(this));\n                    var html = $li.html();\n\n                    html = html.replace(/<.*?>/ig, function (tag) {\n                        if (tag === '</a>' || tag.indexOf('<a ') === 0 || tag.indexOf('<img ') === 0) {\n                            return tag;\n                        } else {\n                            return '';\n                        }\n                    });\n\n                    htmlForLi += '<li>' + html + '</li>';\n                });\n                return '<' + nodeName + '>' + htmlForLi + '</' + nodeName + '>';\n            \n            } else {\n                \n                // 其他元素，移除元素属性\n                $elem = $(removeAttrs(elem));\n                return $('<div>').append($elem).html();\n            }\n        }\n\n        // 移除一个元素（子元素）的attr\n        function removeAttrs(elem) {\n            var attrs = elem.attributes || [];\n            var attrNames = [];\n            var exception = ['href', 'target', 'src', 'alt', 'rowspan', 'colspan']; //例外情况\n\n            // 先存储下elem中所有 attr 的名称\n            $.each(attrs, function (key, attr) {\n                if (attr && attr.nodeType === 2) {\n                    attrNames.push(attr.nodeName);\n                }\n            });\n            // 再根据名称删除所有attr\n            $.each(attrNames, function (key, attr) {\n                if (exception.indexOf(attr) < 0) {\n                    // 除了 exception 规定的例外情况，删除其他属性\n                    elem.removeAttribute(attr);\n                }\n            });\n\n\n            // 递归子节点\n            var children = elem.childNodes;\n            if (children.length) {\n                $.each(children, function (key, value) {\n                    removeAttrs(value);\n                });\n            }\n\n            return elem;\n        }\n    };\n\n    // 绑定 $txt.formatText() 方法\n    Txt.fn.bindFormatText = function () {\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n        var legalTags = E.config.legalTags;\n        var legalTagArr = legalTags.split(',');\n        var length = legalTagArr.length;\n        var regArr = [];\n\n        // 将 E.config.legalTags 配置的有效字符，生成正则表达式\n        $.each(legalTagArr, function (k, tag) {\n            var reg = '\\>\\\\s*\\<(' + tag + ')\\>';\n            regArr.push(new RegExp(reg, 'ig'));\n        });\n\n        // 增加 li \n        regArr.push(new RegExp('\\>\\\\s*\\<(li)\\>', 'ig'));\n\n        // 增加 tr\n        regArr.push(new RegExp('\\>\\\\s*\\<(tr)\\>', 'ig'));\n\n        // 增加 code\n        regArr.push(new RegExp('\\>\\\\s*\\<(code)\\>', 'ig'));\n\n        // 生成 formatText 方法\n        $txt.formatText = function () {\n            var $temp = $('<div>');\n            var html = $txt.html();\n\n            // 去除空格\n            html = html.replace(/\\s*</ig, '<');\n\n            // 段落、表格之间换行\n            $.each(regArr, function (k, reg) {\n                if (!reg.test(html)) {\n                    return;\n                }\n                html = html.replace(reg, function (matchStr, tag) {\n                    return '>\\n<' + tag + '>';\n                });\n            });\n\n            $temp.html(html);\n            return $temp.text();\n        };\n    };\n\n    // 定制 $txt.html 方法\n    Txt.fn.bindHtml = function () {\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n        var $valueContainer = editor.$valueContainer;\n        var valueNodeName = editor.valueNodeName;\n\n        $txt.html = function (html) {\n            var result;\n\n            if (valueNodeName === 'div') {\n                // div 生成的编辑器，取值、赋值，都直接触发jquery的html方法\n                result = $.fn.html.call($txt, html);\n            }\n\n            // textarea 生成的编辑器，则需要考虑赋值时，也给textarea赋值\n\n            if (html === undefined) {\n                // 取值，直接触发jquery原生html方法\n                result = $.fn.html.call($txt);\n\n                // 替换 html 中，src和href属性中的 & 字符。\n                // 因为 .html() 或者 .innerHTML 会把所有的 & 字符都改成 &amp; 但是 src 和 href 中的要保持 &\n                result = result.replace(/(href|src)\\=\\\"(.*)\\\"/igm, function (a, b, c) {\n                    return b + '=\"' + c.replace('&amp;', '&') + '\"';\n                });\n            } else {\n                // 赋值，需要同时给 textarea 赋值\n                result = $.fn.html.call($txt, html);\n                $valueContainer.val(html);\n            }\n\n            if (html === undefined) {\n                return result;\n            } else {\n                // 手动触发 change 事件，因为 $txt 监控了 change 事件来判断是否需要执行 editor.onchange \n                $txt.change();\n            }\n        };\n    };\n});\n// Txt.fn api\n_e(function (E, $) {\n\n    var Txt = E.Txt;\n\n    var txtChangeEventNames = 'propertychange change click keyup input paste';\n\n    // 渲染\n    Txt.fn.render = function () {\n        var $txt = this.$txt;\n        var $editorContainer = this.editor.$editorContainer;\n        $editorContainer.append($txt);\n    };\n\n    // 计算高度\n    Txt.fn.initHeight = function () {\n        var editor = this.editor;\n        var $txt = this.$txt;\n        var valueContainerHeight = editor.$valueContainer.height();\n        var menuHeight = editor.menuContainer.height();\n        var txtHeight = valueContainerHeight - menuHeight;\n\n        // 限制最小为 50px\n        txtHeight = txtHeight < 50 ? 50 : txtHeight;\n\n        $txt.height(txtHeight);\n\n        // 记录原始高度\n        editor.valueContainerHeight = valueContainerHeight;\n\n        // 设置 max-height\n        this.initMaxHeight(txtHeight, menuHeight);\n    };\n\n    // 计算最大高度\n    Txt.fn.initMaxHeight = function (txtHeight, menuHeight) {\n        var editor = this.editor;\n        var $menuContainer = editor.menuContainer.$menuContainer;\n        var $txt = this.$txt;\n        var $wrap = $('<div>');\n\n        // 需要浏览器支持 max-height，否则不管\n        if (window.getComputedStyle && 'max-height'in window.getComputedStyle($txt.get(0))) {\n            // 获取 max-height 并判断是否有值\n            var maxHeight = parseInt(editor.$valueContainer.css('max-height'));\n            if (isNaN(maxHeight)) {\n                return;\n            }\n\n            // max-height 和『全屏』暂时有冲突\n            if (editor.menus.fullscreen) {\n                E.warn('max-height和『全屏』菜单一起使用时，会有一些问题尚未解决，请暂时不要两个同时使用');\n                return;\n            }\n\n            // 标记\n            editor.useMaxHeight = true;\n\n            // 设置maxheight\n            $wrap.css({\n                'max-height': (maxHeight - menuHeight) + 'px',\n                'overflow-y': 'auto'\n            });\n            $txt.css({\n                'height': 'auto',\n                'overflow-y': 'visible',\n                'min-height': txtHeight + 'px'\n            });\n\n            // 滚动式，菜单阴影\n            $wrap.on('scroll', function () {\n                if ($txt.parent().scrollTop() > 10) {\n                    $menuContainer.addClass('wangEditor-menu-shadow');\n                } else {\n                    $menuContainer.removeClass('wangEditor-menu-shadow');\n                }\n            });\n\n            // 需在编辑器区域外面再包裹一层\n            $txt.wrap($wrap);\n        }\n    };\n\n    // 保存选区\n    Txt.fn.saveSelectionEvent = function () {\n        var $txt = this.$txt;\n        var editor = this.editor;\n        var timeoutId;\n        var dt = Date.now();\n\n        function save() {\n            editor.saveSelection();\n        }\n\n        // 同步保存选区\n        function saveSync() {\n            // 100ms之内，不重复保存\n            if (Date.now() - dt < 100) {\n                return;\n            }\n\n            dt = Date.now();\n            save();\n        }\n\n        // 异步保存选区\n        function saveAync() {\n            // 节流，防止高频率重复操作\n            if (timeoutId) {\n                clearTimeout(timeoutId);\n            }\n            timeoutId = setTimeout(save, 300);\n        }\n\n        // txt change 、focus、blur 时随时保存选区\n        $txt.on(txtChangeEventNames + ' focus blur', function (e) {\n            // 先同步保存选区，为了让接下来就马上要执行 editor.getRangeElem() 的程序\n            // 能够获取到正确的 rangeElem\n            saveSync();\n\n            // 再异步保存选区，为了确定更加准确的选区，为后续的操作做准备\n            saveAync();\n        });\n\n        // 鼠标拖拽选择时，可能会拖拽到编辑器区域外面再松手，此时 $txt 就监听不到 click事件了\n        $txt.on('mousedown', function () {\n            $txt.on('mouseleave.saveSelection', function (e) {\n                // 先同步后异步，如上述注释\n                saveSync();\n                saveAync();\n\n                // 顺道吧菜单状态也更新了\n                editor.updateMenuStyle();\n            });\n        }).on('mouseup', function () {\n            $txt.off('mouseleave.saveSelection');\n        });\n        \n    };\n\n    // 随时更新 value\n    Txt.fn.updateValueEvent = function () {\n        var $txt = this.$txt;\n        var editor = this.editor;\n        var timeoutId, oldValue;\n\n        // 触发 onchange 事件\n        function doOnchange() {\n            var val = $txt.html();\n            if (oldValue === val) {\n                // 无变化\n                return;\n            }\n\n            // 触发 onchange 事件\n            if (editor.onchange && typeof editor.onchange === 'function') {\n                editor.onchange.call(editor);\n            }\n\n            // 更新内容\n            editor.updateValue();\n\n            // 记录最新内容\n            oldValue = val;\n        }\n\n        // txt change 时随时更新内容\n        $txt.on(txtChangeEventNames, function (e) {\n            // 初始化\n            if (oldValue == null) {\n                oldValue = $txt.html();\n            }\n\n            // 监控内容变化（停止操作 100ms 之后立即执行）\n            if (timeoutId) {\n                clearTimeout(timeoutId);\n            }\n            timeoutId = setTimeout(doOnchange, 100);\n        });\n    };\n\n    // 随时更新 menustyle\n    Txt.fn.updateMenuStyleEvent = function () {\n        var $txt = this.$txt;\n        var editor = this.editor;\n\n        // txt change 时随时更新内容\n        $txt.on(txtChangeEventNames, function (e) {\n            editor.updateMenuStyle();\n        });\n    };\n\n    // 最后插入试图插入 <p><br><p>\n    Txt.fn.insertEmptyP = function () {\n        var $txt = this.$txt;\n        var $children = $txt.children();\n\n        if ($children.length === 0) {\n            $txt.append($('<p><br></p>'));\n            return;\n        }\n\n        if ($.trim($children.last().html()).toLowerCase() !== '<br>') {\n            $txt.append($('<p><br></p>'));\n        }\n    };\n\n    // 将编辑器暴露出来的文字和图片，都用 p 来包裹\n    Txt.fn.wrapImgAndText = function () {\n        var $txt = this.$txt;\n        var $imgs = $txt.children('img');\n        var txt = $txt[0];\n        var childNodes = txt.childNodes;\n        var childrenLength = childNodes.length;\n        var i, childNode, p;\n\n        // 处理图片\n        $imgs.length && $imgs.each(function () {\n            $(this).wrap('<p>');\n        });\n\n        // 处理文字\n        for (i = 0; i < childrenLength; i++) {\n            childNode = childNodes[i];\n            if (childNode.nodeType === 3 && childNode.textContent && $.trim(childNode.textContent)) {\n                $(childNode).wrap('<p>');\n            }\n        }\n    };\n\n    // 清空内容为空的<p>，以及重复包裹的<p>（在windows下的chrome粘贴文字之后，会出现上述情况）\n    Txt.fn.clearEmptyOrNestP = function () {\n        var $txt = this.$txt;\n        var $pList = $txt.find('p');\n\n        $pList.each(function () {\n            var $p = $(this);\n            var $children = $p.children();\n            var childrenLength = $children.length;\n            var $firstChild;\n            var content = $.trim($p.html());\n\n            // 内容为空的p\n            if (!content) {\n                $p.remove();\n                return;\n            }\n\n            // 嵌套的p\n            if (childrenLength === 1) {\n                $firstChild = $children.first();\n                if ($firstChild.get(0) && $firstChild.get(0).nodeName === 'P') {\n                    $p.html( $firstChild.html() );\n                }\n            }\n        });\n    };\n\n    // 获取 scrollTop\n    Txt.fn.scrollTop = function (val) {\n        var self = this;\n        var editor = self.editor;\n        var $txt = self.$txt;\n\n        if (editor.useMaxHeight) {\n            return $txt.parent().scrollTop(val);\n        } else {\n            return $txt.scrollTop(val);\n        }\n    };\n\n    // 鼠标hover时候，显示p、head的高度\n    Txt.fn.showHeightOnHover = function () {\n        var editor = this.editor;\n        var $editorContainer = editor.$editorContainer;\n        var menuContainer = editor.menuContainer;\n        var $txt = this.$txt;\n        var $tip = $('<i class=\"height-tip\"><i>');\n        var isTipInTxt = false;\n\n        function addAndShowTip($target) {\n            if (!isTipInTxt) {\n                $editorContainer.append($tip);\n                isTipInTxt = true;\n            }\n\n            var txtTop = $txt.position().top;\n            var txtHeight = $txt.outerHeight();\n\n            var height = $target.height();\n            var top = $target.position().top;\n            var marginTop = parseInt($target.css('margin-top'), 10);\n            var paddingTop = parseInt($target.css('padding-top'), 10);\n            var marginBottom = parseInt($target.css('margin-bottom'), 10);\n            var paddingBottom = parseInt($target.css('padding-bottom'), 10);\n\n            // 计算初步的结果\n            var resultHeight = height + paddingTop + marginTop + paddingBottom + marginBottom;\n            var resultTop = top + menuContainer.height();\n            \n            // var spaceValue;\n\n            // // 判断是否超出下边界\n            // spaceValue = (resultTop + resultHeight) - (txtTop + txtHeight);\n            // if (spaceValue > 0) {\n            //     resultHeight = resultHeight - spaceValue;\n            // }\n\n            // // 判断是否超出了下边界\n            // spaceValue = txtTop > resultTop;\n            // if (spaceValue) {\n            //     resultHeight = resultHeight - spaceValue;\n            //     top = top + spaceValue;\n            // }\n\n            // 按照最终结果渲染\n            $tip.css({\n                height: height + paddingTop + marginTop + paddingBottom + marginBottom,\n                top: top + menuContainer.height()\n            });\n        }\n        function removeTip() {\n            if (!isTipInTxt) {\n                return;\n            }\n            $tip.remove();\n            isTipInTxt = false;\n        }\n\n        $txt.on('mouseenter', 'ul,ol,blockquote,p,h1,h2,h3,h4,h5,table,pre', function (e) {\n            addAndShowTip($(e.currentTarget));\n        }).on('mouseleave', function () {\n            removeTip();\n        });\n    };\n\n});\n// 工具函数\n_e(function (E, $) {\n\n    // IE8 [].indexOf()\n    if(!Array.prototype.indexOf){\n        //IE低版本不支持 arr.indexOf \n        Array.prototype.indexOf = function(elem){\n            var i = 0,\n                length = this.length;\n            for(; i<length; i++){\n                if(this[i] === elem){\n                    return i;\n                }\n            }\n            return -1;\n        };\n        //IE低版本不支持 arr.lastIndexOf\n        Array.prototype.lastIndexOf = function(elem){\n            var length = this.length;\n            for(length = length - 1; length >= 0; length--){\n                if(this[length] === elem){\n                    return length;\n                }\n            }\n            return -1;\n        };\n    }\n\n    // IE8 Date.now()\n    if (!Date.now) {\n        Date.now = function () {\n            return new Date().valueOf(); \n        };\n    }\n\n    // console.log && console.warn && console.error\n    var console = window.console;\n    var emptyFn = function () {};\n    $.each(['info', 'log', 'warn', 'error'], function (key, value) {\n        if (console == null) {\n            E[value] = emptyFn;\n        } else {\n            E[value] = function (info) {\n                // 通过配置来控制打印输出\n                if (E.config && E.config.printLog) {\n                    console[value]('wangEditor提示: ' + info);\n                }\n            };\n        }\n    });\n\n    // 获取随机数\n    E.random = function () {\n        return Math.random().toString().slice(2);\n    };\n\n    // 浏览器是否支持 placeholder\n    E.placeholder = 'placeholder' in document.createElement('input');\n\n    // 兼容IE8的 input placeholder\n    E.placeholderForIE8 = function ($container) {\n        if (E.placeholder) {\n            return;\n        }\n        $container.find('input[placeholder]').each(function () {\n            var $input = $(this);\n            var placeholder = $input.attr('placeholder');\n\n            if ($input.val() === '') {\n                $input.css('color', '#666');\n                $input.val(placeholder);\n\n                $input.on('focus.placeholder click.placeholder', function () {\n                    $input.val('');\n                    $input.css('color', '#333');\n                    $input.off('focus.placeholder click.placeholder');\n                });\n            }\n        });\n    };\n});\n// 语言包\n_e(function (E, $) {\n    E.langs = {};\n    \n    // 中文\n    E.langs['zh-cn'] = {\n        bold: '粗体',\n        underline: '下划线',\n        italic: '斜体',\n        forecolor: '文字颜色',\n        bgcolor: '背景色',\n        strikethrough: '删除线',\n        eraser: '清空格式',\n        source: '源码',\n        quote: '引用',\n        fontfamily: '字体',\n        fontsize: '字号',\n        head: '标题',\n        orderlist: '有序列表',\n        unorderlist: '无序列表',\n        alignleft: '左对齐',\n        aligncenter: '居中',\n        alignright: '右对齐',\n        link: '链接',\n        text: '文本',\n        submit: '提交',\n        cancel: '取消',\n        unlink: '取消链接',\n        table: '表格',\n        emotion: '表情',\n        img: '图片',\n        uploadImg: '上传图片',\n        linkImg: '网络图片',\n        video: '视频',\n        'width': '宽',\n        'height': '高',\n        location: '位置',\n        loading: '加载中',\n        searchlocation: '搜索位置',\n        dynamicMap: '动态地图',\n        clearLocation: '清除位置',\n        langDynamicOneLocation: '动态地图只能显示一个位置',\n        insertcode: '插入代码',\n        undo: '撤销',\n        redo: '重复',\n        fullscreen: '全屏',\n        openLink: '打开链接'\n    };\n\n    // 英文\n    E.langs.en = {\n        bold: 'Bold',\n        underline: 'Underline',\n        italic: 'Italic',\n        forecolor: 'Color',\n        bgcolor: 'Backcolor',\n        strikethrough: 'Strikethrough',\n        eraser: 'Eraser',\n        source: 'Codeview',\n        quote: 'Quote',\n        fontfamily: 'Font family',\n        fontsize: 'Font size',\n        head: 'Head',\n        orderlist: 'Ordered list',\n        unorderlist: 'Unordered list',\n        alignleft: 'Align left',\n        aligncenter: 'Align center',\n        alignright: 'Align right',\n        link: 'Insert link',\n        text: 'Text',\n        submit: 'Submit',\n        cancel: 'Cancel',\n        unlink: 'Unlink',\n        table: 'Table',\n        emotion: 'Emotions',\n        img: 'Image',\n        uploadImg: 'Upload',\n        linkImg: 'Link',\n        video: 'Video',\n        'width': 'width',\n        'height': 'height',\n        location: 'Location',\n        loading: 'Loading',\n        searchlocation: 'search',\n        dynamicMap: 'Dynamic',\n        clearLocation: 'Clear',\n        langDynamicOneLocation: 'Only one location in dynamic map',\n        insertcode: 'Insert Code',\n        undo: 'Undo',\n        redo: 'Redo',\n        fullscreen: 'Full screnn',\n        openLink: 'open link'\n    };\n});\n// 全局配置\n_e(function (E, $) {\n\n    E.config = {};\n\n    // 全屏时的 z-index\n    E.config.zindex = 10000;\n\n    // 是否打印log\n    E.config.printLog = true;\n\n    // 菜单吸顶：false - 不吸顶；number - 吸顶，值为top值\n    E.config.menuFixed = 0;\n\n    // 编辑源码时，过滤 javascript\n    E.config.jsFilter = true;\n\n    // 编辑器允许的标签\n    E.config.legalTags = 'p,h1,h2,h3,h4,h5,h6,blockquote,table,ul,ol,pre';\n\n    // 语言包\n    E.config.lang = E.langs['zh-cn'];\n\n    // 菜单配置\n    E.config.menus = [\n        'source',\n        '|',\n        'bold',\n        'underline',\n        'italic',\n        'strikethrough',\n        'eraser',\n        'forecolor',\n        'bgcolor',\n        '|',\n        'quote',\n        'fontfamily',\n        'fontsize',\n        'head',\n        'unorderlist',\n        'orderlist',\n        'alignleft',\n        'aligncenter',\n        'alignright',\n        '|',\n        'link',\n        'unlink',\n        'table',\n        'emotion',\n        '|',\n        'img',\n        'video',\n        'location',\n        'insertcode',\n        '|',\n        'undo',\n        'redo',\n        'fullscreen'\n    ];\n\n    // 颜色配置\n    E.config.colors = {\n        // 'value': 'title'\n        '#880000': '暗红色',\n        '#800080': '紫色',\n        '#ff0000': '红色',\n        '#ff00ff': '鲜粉色',\n        '#000080': '深蓝色',\n        '#0000ff': '蓝色',\n        '#00ffff': '湖蓝色',\n        '#008080': '蓝绿色',\n        '#008000': '绿色',\n        '#808000': '橄榄色',\n        '#00ff00': '浅绿色',\n        '#ffcc00': '橙黄色',\n        '#808080': '灰色',\n        '#c0c0c0': '银色',\n        '#000000': '黑色',\n        '#ffffff': '白色'\n    };\n\n    // 字体\n    E.config.familys = [\n        '宋体', '黑体', '楷体', '微软雅黑',\n        'Arial', 'Verdana', 'Georgia',\n        'Times New Roman', 'Microsoft JhengHei',\n        'Trebuchet MS', 'Courier New', 'Impact', 'Comic Sans MS', 'Consolas'\n    ];\n\n    // 字号\n    E.config.fontsizes = {\n        // 格式：'value': 'title'\n        1: '12px',\n        2: '13px',\n        3: '16px',\n        4: '18px',\n        5: '24px',\n        6: '32px',\n        7: '48px'\n    };\n\n    // 表情包\n    E.config.emotionsShow = 'icon'; // 显示项，默认为'icon'，也可以配置成'value'\n    E.config.emotions = {\n        'default': {\n            title: '默认',  // 组名称\n            data: '/static/admin/wangeditor/js/emotions.data'  // 服务器的一个json文件url，例如官网这里配置的是 http://www.wangeditor.com/wangEditor/test/emotions.data\n        },\n        'weibo': {\n            title: '微博表情',\n            data: [\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/7a/shenshou_thumb.gif',\n                    value: '[草泥马]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/60/horse2_thumb.gif',\n                    value: '[神马]'    \n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/fuyun_thumb.gif',\n                    value: '[浮云]'    \n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c9/geili_thumb.gif',\n                    value: '[给力]'    \n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/f2/wg_thumb.gif',\n                    value: '[围观]'    \n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/70/vw_thumb.gif',\n                    value: '[威武]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/6e/panda_thumb.gif',\n                    value: '[熊猫]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/81/rabbit_thumb.gif',\n                    value: '[兔子]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/bc/otm_thumb.gif',\n                    value: '[奥特曼]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/15/j_thumb.gif',\n                    value: '[囧]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/89/hufen_thumb.gif',\n                    value: '[互粉]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/c4/liwu_thumb.gif',\n                    value: '[礼物]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/ac/smilea_thumb.gif',\n                    value: '[呵呵]'\n                },\n                {\n                    icon: 'http://img.t.sinajs.cn/t35/style/images/common/face/ext/normal/0b/tootha_thumb.gif',\n                    value: '[哈哈]'\n                }\n            ]\n        }\n    };\n\n    // 百度地图的key\n    E.config.mapAk = 'TVhjYjq1ICT2qqL5LdS8mwas';\n\n    // 上传图片的配置\n    // server地址\n    E.config.uploadImgUrl = '';\n    // 超时时间\n    E.config.uploadTimeout = 20 * 1000;\n    // 用于存储上传回调事件\n    E.config.uploadImgFns = {};\n    // 自定义上传图片的filename\n    // E.config.uploadImgFileName = 'customFileName';\n\n    // 自定义上传，设置为 true 之后，显示上传图标\n    E.config.customUpload = false;\n    // 自定义上传的init事件\n    // E.config.customUploadInit = function () {....};\n\n    // 自定义上传时传递的参数（如 token）\n    E.config.uploadParams = {\n        /* token: 'abcdef12345' */\n    };\n\n    // 自定义上传是的header参数\n    E.config.uploadHeaders = {\n         /* 'Accept' : 'text/x-json' */\n    };\n\n    // 跨域上传时传递 cookie，默认为 true\n    E.config.withCredentials = true;\n\n    // 隐藏网络图片，默认为 false\n    E.config.hideLinkImg = false;\n\n    // 是否过滤粘贴内容\n    E.config.pasteFilter = true;\n\n    // 是否粘贴纯文本，当 editor.config.pasteFilter === false 时候，此配置将失效\n    E.config.pasteText = false;\n\n    // 插入代码时，默认的语言\n    E.config.codeDefaultLang = 'javascript';\n\n});\n// 全局UI\n_e(function (E, $) {\n\n     E.UI = {};\n\n     // 为菜单自定义配置的UI\n     E.UI.menus = {\n        // 这个 default 不加引号，在 IE8 会报错\n        'default': {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-command\"></i></a>',\n            selected: '.selected'\n        },\n        bold: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-bold\"></i></a>',\n            selected: '.selected'\n        },\n        underline: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-underline\"></i></a>',\n            selected: '.selected'\n        },\n        italic: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-italic\"></i></a>',\n            selected: '.selected'\n        },\n        forecolor: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-pencil\"></i></a>',\n            selected: '.selected'\n        },\n        bgcolor: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-brush\"></i></a>',\n            selected: '.selected'\n        },\n        strikethrough: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-strikethrough\"></i></a>',\n            selected: '.selected'\n        },\n        eraser: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-eraser\"></i></a>',\n            selected: '.selected'\n        },\n        quote: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-quotes-left\"></i></a>',\n            selected: '.selected'\n        },\n        source: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-code\"></i></a>',\n            selected: '.selected'\n        },\n        fontfamily: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-font2\"></i></a>',\n            selected: '.selected'\n        },\n        fontsize: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-text-height\"></i></a>',\n            selected: '.selected'\n        },\n        head: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-header\"></i></a>',\n            selected: '.selected'\n        },\n        orderlist: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-list-numbered\"></i></a>',\n            selected: '.selected'\n        },\n        unorderlist: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-list-bullet\"></i></a>',\n            selected: '.selected'\n        },\n        alignleft: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-align-left\"></i></a>',\n            selected: '.selected'\n        },\n        aligncenter: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-align-center\"></i></a>',\n            selected: '.selected'\n        },\n        alignright: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-align-right\"></i></a>',\n            selected: '.selected'\n        },\n        link: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-link\"></i></a>',\n            selected: '.selected'\n        },\n        unlink: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-unlink\"></i></a>',\n            selected: '.selected'\n        },\n        table: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-table\"></i></a>',\n            selected: '.selected'\n        },\n        emotion: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-happy\"></i></a>',\n            selected: '.selected'\n        },\n        img: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-picture\"></i></a>',\n            selected: '.selected'\n        },\n        video: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-play\"></i></a>',\n            selected: '.selected'\n        },\n        location: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-location\"></i></a>',\n            selected: '.selected'\n        },\n        insertcode: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-terminal\"></i></a>',\n            selected: '.selected'\n        },\n        undo: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-ccw\"></i></a>',\n            selected: '.selected'\n        },\n        redo: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-cw\"></i></a>',\n            selected: '.selected'\n        },\n        fullscreen: {\n            normal: '<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-enlarge2\"></i></a>',\n            selected: '<a href=\"#\" tabindex=\"-1\" class=\"selected\"><i class=\"wangeditor-menu-img-shrink2\"></i></a>'\n        }\n     };\n     \n});\n// 对象配置\n_e(function (E, $) {\n\n    E.fn.initDefaultConfig = function () {\n        var editor = this;\n        editor.config = $.extend({}, E.config);\n        editor.UI = $.extend({}, E.UI);\n    };\n\n});\n// 增加 container\n_e(function (E, $) {\n\n    E.fn.addEditorContainer = function () {\n        this.$editorContainer = $('<div class=\"wangEditor-container\"></div>');\n    };\n\n});\n// 增加编辑区域对象\n_e(function (E, $) {\n\n    E.fn.addTxt = function () {\n        var editor = this;\n        var txt = new E.Txt(editor);\n\n        editor.txt = txt;\n    };\n\n});\n// 增加menuContainer对象\n_e(function (E, $) {\n\n    E.fn.addMenuContainer = function () {\n        var editor = this;\n        editor.menuContainer = new E.MenuContainer(editor);\n    };\n\n});\n// 增加menus\n_e(function (E, $) {\n\n    // 存储创建菜单的函数\n    E.createMenuFns = [];\n    E.createMenu = function (fn) {\n        E.createMenuFns.push(fn);\n    };\n\n    // 创建所有菜单\n    E.fn.addMenus = function () {\n        var editor = this;\n        var menuIds = editor.config.menus;\n\n        // 检验 menuId 是否在配置中存在\n        function check(menuId) {\n            if (menuIds.indexOf(menuId) >= 0) {\n                return true;\n            }\n            return false;\n        }\n\n        // 遍历所有的菜单创建函数，并执行\n        $.each(E.createMenuFns, function (k, createMenuFn) {\n            createMenuFn.call(editor, check);\n        });\n    };\n\n});\n// bold菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'bold';\n        if (!check(menuId)) {\n            return;\n        }\n\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.bold,\n            commandName: 'Bold'\n        });\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 如果选区有内容，则执行基础命令\n                editor.command(e, 'Bold');\n            } else {\n                // 如果选区没有内容\n                editor.commandForElem('b,strong,h1,h2,h3,h4,h5', e, 'Bold');\n            }\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// underline菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'underline';\n        if (!check(menuId)) {\n            return;\n        }\n\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.underline,\n            commandName: 'Underline'\n        });\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 如果选区有内容，则执行基础命令\n                editor.command(e, 'Underline');\n            } else {\n                // 如果选区没有内容\n                editor.commandForElem('u,a', e, 'Underline');\n            }\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// italic 菜单\n_e(function (E, $) {\n    \n    E.createMenu(function (check) {\n        var menuId = 'italic';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.italic,\n            commandName: 'Italic'\n        });\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 如果选区有内容，则执行基础命令\n                editor.command(e, 'Italic');\n            } else {\n                // 如果选区没有内容\n                editor.commandForElem('i', e, 'Italic');\n            }\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// forecolor 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'forecolor';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var configColors = editor.config.colors;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.forecolor\n        });\n\n        // 创建 dropPanel\n        var $content = $('<div></div>');\n        $.each(configColors, function (k, v) {\n            $content.append(\n                [\n                    '<a href=\"#\" class=\"color-item\"',\n                    '    title=\"' + v + '\" commandValue=\"' + k + '\" ',\n                    '    style=\"color: ' + k + '\" ',\n                    '><i class=\"wangeditor-menu-img-pencil\"></i></a>'\n                ].join('')\n            );\n        });\n        $content.on('click', 'a[commandValue]', function (e) {\n            // 执行命令\n            var $elem = $(this);\n            var commandValue = $elem.attr('commandValue');\n\n            if (menu.selected && editor.isRangeEmpty()) {\n                // 当前处于选中状态，并且选中内容为空\n                editor.commandForElem('font[color]', e, 'forecolor', commandValue);\n            } else {\n                // 当前未处于选中状态，或者有选中内容。则执行默认命令\n                editor.command(e, 'forecolor', commandValue);\n            }\n        });\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 125\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'font[color]');\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// bgcolor 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'bgcolor';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var configColors = editor.config.colors;\n\n        // 检查元素是否有 background-color: 内联样式\n        function checkElemFn(elem) {\n            var cssText;\n            if (elem && elem.style && elem.style.cssText != null) {\n                cssText = elem.style.cssText;\n                if (cssText && cssText.indexOf('background-color:') >= 0) {\n                    return true;\n                }\n            }\n            return false;\n        }\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.bgcolor\n        });\n\n        // 创建 dropPanel\n        var $content = $('<div></div>');\n        $.each(configColors, function (k, v) {\n            $content.append(\n                [\n                    '<a href=\"#\" class=\"color-item\"',\n                    '    title=\"' + v + '\" commandValue=\"' + k + '\" ',\n                    '    style=\"color: ' + k + '\" ',\n                    '><i class=\"wangeditor-menu-img-brush\"></i></a>'\n                ].join('')\n            );\n        });\n        $content.on('click', 'a[commandValue]', function (e) {\n            // 执行命令\n\n            var $elem = $(this);\n            var commandValue = $elem.attr('commandValue');\n\n            if (menu.selected && editor.isRangeEmpty()) {\n                // 当前处于选中状态，并且选中内容为空。使用 commandForElem 执行命令\n                editor.commandForElem({\n                    selector: 'span,font',\n                    check: checkElemFn\n                }, e, 'BackColor', commandValue);\n            } else {\n                // 当前未处于选中状态，或者有选中内容。则执行默认命令\n                editor.command(e, 'BackColor', commandValue);\n            }\n        });\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 125\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'span,font', checkElemFn);\n            \n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// strikethrough 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'strikethrough';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.strikethrough,\n            commandName: 'StrikeThrough'\n        });\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 如果选区有内容，则执行基础命令\n                editor.command(e, 'StrikeThrough');\n            } else {\n                // 如果选区没有内容\n                editor.commandForElem('strike', e, 'StrikeThrough');\n            }\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// eraser 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'eraser';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.eraser,\n            commandName: 'RemoveFormat'\n        });\n\n        // 定义点击事件\n        menu.clickEvent = function (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n\n            if (!isRangeEmpty) {\n                // 选区不是空的，则执行默认命令\n                editor.command(e, 'RemoveFormat');\n                return;\n            }\n\n            var $clearElem;\n\n            // 自定义的命令函数\n            function commandFn() {\n                var editor = this;\n                var rangeElem;\n                var pElem, $pElem;\n                var quoteElem, $quoteElem;\n                var listElem, $listElem;\n\n                // 获取选区 elem\n                rangeElem = editor.getRangeElem();\n                // 第一步，获取 quote 父元素\n                quoteElem = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n                if (quoteElem) {\n                    $quoteElem = $(quoteElem);\n                    $clearElem = $('<p>' + $quoteElem.text() + '</p>');\n                    $quoteElem.after($clearElem).remove();\n                }\n                // 第二步，获取 p h 父元素\n                pElem = editor.getSelfOrParentByName(rangeElem, 'p,h1,h2,h3,h4,h5');\n                if (pElem) {\n                    $pElem = $(pElem);\n                    $clearElem = $('<p>' + $pElem.text() + '</p>');\n                    $pElem.after($clearElem).remove();\n                }\n                // 第三步，获取list\n                listElem = editor.getSelfOrParentByName(rangeElem, 'ul,ol');\n                if (listElem) {\n                    $listElem = $(listElem);\n                    $clearElem = $('<p>' + $listElem.text() + '</p>');\n                    $listElem.after($clearElem).remove();\n                }\n            }\n\n            // 自定义 callback 事件\n            function callback() {\n                // callback中，设置range为clearElem\n                var editor = this;\n                if ($clearElem) {\n                    editor.restoreSelectionByElem($clearElem.get(0));\n                }\n            }\n\n            // 执行自定义命令\n            editor.customCommand(e, commandFn, callback);\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// source 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'source';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var txtHtml;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.source\n        });\n\n        menu.isShowCode = false;\n\n        // 更新内容\n        function updateValue() {\n            var $code = menu.$codeTextarea;\n            var $txt = editor.txt.$txt;\n            var value = $.trim($code.val()); // 取值\n\n            if (!value) {\n                value = '<p><br></p>';\n            }\n            \n            // 过滤js代码\n            if (editor.config.jsFilter) {\n                \n                value = value.replace(/<script[\\s\\S]*?<\\/script>/ig, '');\n            }\n            // 赋值\n            try {\n                $txt.html(value);\n            } catch (ex) {\n                // 更新 html 源码出错，一般都是取消了 js 过滤之后，js报错导致的\n            }\n        }\n\n        // 定义click事件\n        menu.clickEvent = function (e) {\n            var self = this;\n            var editor = self.editor;\n            var $txt = editor.txt.$txt;\n            var txtOuterHeight = $txt.outerHeight();\n            var txtHeight = $txt.height();\n\n            if (!self.$codeTextarea) {\n                self.$codeTextarea = $('<textarea class=\"code-textarea\"></textarea>');\n            }\n            var $code = self.$codeTextarea;\n            $code.css({\n                height: txtHeight,\n                'margin-top': txtOuterHeight - txtHeight\n            });\n\n            // 赋值\n            $code.val($txt.html());\n\n            // 监控变化\n            $code.on('change', function (e) {\n                updateValue();\n            });\n\n            // 渲染\n            $txt.after($code).hide();\n            $code.show();\n\n            // 更新状态\n            menu.isShowCode = true;\n\n            // 执行 updateSelected 事件\n            this.updateSelected();\n\n            // 禁用其他菜单\n            editor.disableMenusExcept('source');\n\n            // 记录当前html值\n            txtHtml = $txt.html();\n        };\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var self = this;\n            var editor = self.editor;\n            var $txt = editor.txt.$txt;\n            var $code = self.$codeTextarea;\n            var value;\n\n            if (!$code) {\n                return;\n            }\n\n            // 更新内容\n            updateValue();\n\n            // 渲染\n            $code.after($txt).hide();\n            $txt.show();\n\n            // 更新状态\n            menu.isShowCode = false;\n\n            // 执行 updateSelected 事件\n            this.updateSelected();\n\n            // 启用其他菜单\n            editor.enableMenusExcept('source');\n\n            // 判断是否执行 onchange 事件\n            if ($txt.html() !== txtHtml) {\n                if (editor.onchange && typeof editor.onchange === 'function') {\n                    editor.onchange.call(editor);\n                }\n            }\n        };\n\n        // 定义切换选中状态事件\n        menu.updateSelectedEvent = function () {\n            return this.isShowCode;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// quote 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'quote';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.quote,\n            commandName: 'formatBlock',\n            commandValue: 'blockquote'\n        });\n\n        // 定义click事件\n        menu.clickEvent = function (e) {\n            var rangeElem = editor.getRangeElem();\n            var $rangeElem;\n            if (!rangeElem) {\n                e.preventDefault();\n                return;\n            }\n            var currentQuote = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n            var $quote;\n\n            if (currentQuote) {\n                // 说明当前在quote之内，不做任何处理\n                e.preventDefault();\n                return;\n            }\n\n            rangeElem = editor.getLegalTags(rangeElem);\n            $rangeElem = $(rangeElem);\n\n            // 无文字，则不允许执行引用\n            if (!$rangeElem.text()) {\n                return;\n            }\n\n\n            if (!rangeElem) {\n                // 执行默认命令\n                // IE8 下执行此处（不过，经测试代码无效，也不报错）\n                editor.command(e, 'formatBlock', 'blockquote');\n                return;\n            }\n\n            // 自定义command事件\n            function commandFn() {\n                $quote = $('<p>' + $rangeElem.text() + '</p>');\n                $rangeElem.after($quote).remove();\n                $quote.wrap('<blockquote>');\n            }\n\n            // 自定义 callback 事件\n            function callback() {\n                // callback中，设置range为quote\n                var editor = this;\n                if ($quote) {\n                    editor.restoreSelectionByElem($quote.get(0));\n                }\n            }\n\n            // 执行自定义命令\n            editor.customCommand(e, commandFn, callback);\n        };\n\n        // 定义选中状态下的click事件\n        menu.clickEventSelected = function (e) {\n            var rangeElem;\n            var quoteElem;\n            var $lastChild;\n\n            // 获取当前选区的elem，并试图往上找 quote 元素\n            rangeElem = editor.getRangeElem();\n            quoteElem = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n            if (!quoteElem) {\n                // 没找到，则返回\n                e.preventDefault();\n                return;\n            }\n\n            // 自定义的command事件\n            function commandFn() {\n                var $quoteElem;\n                var $children;\n\n                $quoteElem = $(quoteElem);\n                $children = $quoteElem.children();\n                if ($children.length) {\n                    $children.each(function (k) {\n                        var $item = $(this);\n                        if ($item.get(0).nodeName === 'P') {\n                            $quoteElem.after($item);\n                        } else {\n                            $quoteElem.after('<p>' + $item.text() + '</p>');\n                        }\n                        $lastChild = $item;  // 记录最后一个子元素，用于callback中的range定位\n                    });\n                    $quoteElem.remove();\n                    return;\n                }\n            }\n\n            // 自定义的callback函数\n            function callback() {\n                // callback中，设置range为lastChild\n                var editor = this;\n                if ($lastChild) {\n                    editor.restoreSelectionByElem($lastChild.get(0));\n                }\n            }\n\n            // 执行自定义命令\n            editor.customCommand(e, commandFn, callback);\n        };\n\n        // 定义更新选中状态的事件\n        menu.updateSelectedEvent = function () {\n            var self = this; //菜单对象\n            var editor = self.editor;\n            var rangeElem;\n\n            rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n\n            if (rangeElem) {\n                return true;\n            }\n\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n\n        // --------------- 两次点击 enter 跳出引用 ---------------\n        editor.ready(function () {\n            var editor = this;\n            var $txt = editor.txt.$txt;\n            var isPrevEnter = false;  // 是不是刚刚在quote中按了 enter 键\n            $txt.on('keydown', function (e) {\n                if (e.keyCode !== 13) {\n                    // 不是 enter 键\n                    isPrevEnter = false;\n                    return;\n                }\n\n                var rangeElem = editor.getRangeElem();\n                rangeElem = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n                if (!rangeElem) {\n                    // 选区不是 quote\n                    isPrevEnter = false;\n                    return;\n                }\n\n                if (!isPrevEnter) {\n                    // 最近没有在qote中按enter键\n                    isPrevEnter = true;\n                    return;\n                }\n\n                var currentRangeElem = editor.getRangeElem();\n                var $currentRangeElem = $(currentRangeElem);\n                if ($currentRangeElem.length) {\n                    $currentRangeElem.parent().after($currentRangeElem);\n                }\n\n                // 设置选区\n                editor.restoreSelectionByElem(currentRangeElem, 'start');\n\n                isPrevEnter = false;\n                // 阻止默认行文\n                e.preventDefault();\n\n            });\n        }); // editor.ready(\n\n        // --------------- 处理quote中无内容时不能删除的问题 ---------------\n        editor.ready(function () {\n            var editor = this;\n            var $txt = editor.txt.$txt;\n            var $rangeElem;\n\n            function commandFn() {\n                $rangeElem && $rangeElem.remove();\n            }\n            function callback() {\n                if (!$rangeElem) {\n                    return;\n                }\n                var $prev = $rangeElem.prev();\n                if ($prev.length) {\n                    // 有 prev 则定位到 prev 最后\n                    editor.restoreSelectionByElem($prev.get(0));\n                } else {\n                    // 无 prev 则初始化选区\n                    editor.initSelection();\n                }\n            }\n\n            $txt.on('keydown', function (e) {\n                if (e.keyCode !== 8) {\n                    // 不是 backspace 键\n                    return;\n                }\n\n                var rangeElem = editor.getRangeElem();\n                rangeElem = editor.getSelfOrParentByName(rangeElem, 'blockquote');\n                if (!rangeElem) {\n                    // 选区不是 quote\n                    return;\n                }\n                $rangeElem = $(rangeElem);\n\n                var text = $rangeElem.text();\n                if (text) {\n                    // quote 中还有内容\n                    return;\n                }\n                editor.customCommand(e, commandFn, callback);\n\n            }); // $txt.on\n        }); // editor.ready(\n    });\n\n});\n// 字体 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'fontfamily';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var configFamilys = editor.config.familys;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.fontfamily,\n            commandName: 'fontName'\n        });\n\n        // 初始化数据\n        var data  = {};\n        /*\n            data 需要的结构\n            {\n                'commandValue': 'title'\n                ...\n            }\n        */\n        $.each(configFamilys, function (k, v) {\n            // configFamilys 是数组，data 是对象\n            data[v] = v;\n        });\n\n        // 创建droplist\n        var tpl = '<span style=\"font-family:{#commandValue};\">{#title}</span>';\n        menu.dropList = new E.DropList(editor, menu, {\n            data: data,\n            tpl: tpl,\n            selectorForELemCommand: 'font[face]'  // 为了执行 editor.commandForElem 而传入的elem查询方式\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'font[face]');\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n});\n// 字号 菜单\n_e(function (E, $) {\n    E.createMenu(function (check) {\n        var menuId = 'fontsize';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var configSize = editor.config.fontsizes;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.fontsize,\n            commandName: 'fontSize'\n        });\n\n        // 初始化数据\n        var data  = configSize;\n        /*\n            data 需要的结构\n            {\n                'commandValue': 'title'\n                ...\n            }\n        */\n\n        // 创建droplist\n        var tpl = '<span style=\"font-size:{#title};\">{#title}</span>';\n        menu.dropList = new E.DropList(editor, menu, {\n            data: data,\n            tpl: tpl,\n            selectorForELemCommand: 'font[size]'  // 为了执行 editor.commandForElem 而传入的elem查询方式\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'font[size]');\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n});\n// head 菜单\n_e(function (E, $) {\n    E.createMenu(function (check) {\n        var menuId = 'head';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.head,\n            commandName: 'formatBlock'\n        });\n\n        // 初始化数据\n        var data  = {\n            '<h1>': '标题1',\n            '<h2>': '标题2',\n            '<h3>': '标题3',\n            '<h4>': '标题4',\n            '<h5>': '标题5'\n        };\n        /*\n            data 需要的结构\n            {\n                'commandValue': 'title'\n                ...\n            }\n        */\n\n        var isOrderedList;\n        function beforeEvent(e) {\n            if (editor.queryCommandState('InsertOrderedList')) {\n                isOrderedList = true;\n\n                // 先取消有序列表\n                editor.command(e, 'InsertOrderedList');\n            } else {\n                isOrderedList = false;\n            }\n        }\n\n        function afterEvent(e) {\n            if (isOrderedList) {\n                // 再设置有序列表\n                editor.command(e, 'InsertOrderedList');\n            }\n        }\n\n        // 创建droplist\n        var tpl = '{#commandValue}{#title}';\n        menu.dropList = new E.DropList(editor, menu, {\n            data: data,\n            tpl: tpl,\n            // 对 ol 直接设置 head，会出现每个 li 的 index 都变成 1 的问题，因此要先取消 ol，然后设置 head，最后再增加上 ol\n            beforeEvent: beforeEvent,\n            afterEvent: afterEvent\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'h1,h2,h3,h4,h5');\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n});\n// unorderlist 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'unorderlist';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.unorderlist,\n            commandName: 'InsertUnorderedList'\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// orderlist 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'orderlist';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.orderlist,\n            commandName: 'InsertOrderedList'\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// alignleft 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'alignleft';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.alignleft,\n            commandName: 'JustifyLeft'\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'p,h1,h2,h3,h4,h5,li', function (elem) {\n                var cssText;\n                if (elem && elem.style && elem.style.cssText != null) {\n                    cssText = elem.style.cssText;\n                    if (cssText && /text-align:\\s*left;/.test(cssText)) {\n                        return true;\n                    }\n                }\n                if ($(elem).attr('align') === 'left') {\n                    // ff 中，设置align-left之后，会是 <p align=\"left\">xxx</p>\n                    return true;\n                }\n                return false;\n            });\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// aligncenter 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'aligncenter';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.aligncenter,\n            commandName: 'JustifyCenter'\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'p,h1,h2,h3,h4,h5,li', function (elem) {\n                var cssText;\n                if (elem && elem.style && elem.style.cssText != null) {\n                    cssText = elem.style.cssText;\n                    if (cssText && /text-align:\\s*center;/.test(cssText)) {\n                        return true;\n                    }\n                }\n                if ($(elem).attr('align') === 'center') {\n                    // ff 中，设置align-center之后，会是 <p align=\"center\">xxx</p>\n                    return true;\n                }\n                return false;\n            });\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// alignright 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'alignright';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.alignright,\n            commandName: 'JustifyRight'\n        });\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'p,h1,h2,h3,h4,h5,li', function (elem) {\n                var cssText;\n                if (elem && elem.style && elem.style.cssText != null) {\n                    cssText = elem.style.cssText;\n                    if (cssText && /text-align:\\s*right;/.test(cssText)) {\n                        return true;\n                    }\n                }\n                if ($(elem).attr('align') === 'right') {\n                    // ff 中，设置align-right之后，会是 <p align=\"right\">xxx</p>\n                    return true;\n                }\n                return false;\n            });\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// link 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'link';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.link\n        });\n\n        // 创建 dropPanel\n        var $content = $('<div></div>');\n        var $div1 = $('<div style=\"margin:20px 10px;\" class=\"clearfix\"></div>');\n        var $div2 = $div1.clone();\n        var $div3 = $div1.clone().css('margin', '0 10px');\n        var $textInput = $('<input type=\"text\" class=\"block\" placeholder=\"' + lang.text + '\"/>');\n        var $urlInput = $('<input type=\"text\" class=\"block\" placeholder=\"' + lang.link + '\"/>');\n        var $btnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n        var $btnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n\n        $div1.append($textInput);\n        $div2.append($urlInput);\n        $div3.append($btnSubmit).append($btnCancel);\n        $content.append($div1).append($div2).append($div3);\n        \n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 300\n        });\n\n        // 定义click事件\n        menu.clickEvent = function (e) {\n            var menu = this;\n            var dropPanel = menu.dropPanel;\n\n            // -------------隐藏----------------\n            if (dropPanel.isShowing) {\n                dropPanel.hide();\n                return;\n            }\n\n            // -------------显示----------------\n\n            // 重置 input\n            $textInput.val('');\n            $urlInput.val('http://');\n\n            // 获取url\n            var url = '';\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'a');\n            if (rangeElem) {\n                url = rangeElem.href || '';\n            }\n\n            // 获取 text\n            var text = '';\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 选区不是空\n                text = editor.getRangeText() || '';\n            } else if (rangeElem) {\n                // 如果选区空，并且在 a 标签之内\n                text = rangeElem.textContent || rangeElem.innerHTML;\n            }\n\n            // 设置 url 和 text\n            url && $urlInput.val(url);\n            text && $textInput.val(text);\n\n            // 如果有选区内容，textinput 不能修改\n            if (!isRangeEmpty) {\n                $textInput.attr('disabled', true);\n            } else {\n                $textInput.removeAttr('disabled');\n            }\n\n            // 显示（要设置好了所有input的值和属性之后再显示）\n            dropPanel.show();\n        };\n\n        // 定义 update selected 事件\n        menu.updateSelectedEvent = function () {\n            var rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'a');\n            if (rangeElem) {\n                return true;\n            }\n            return false;\n        };\n\n        // 『取消』 按钮\n        $btnCancel.click(function (e) {\n            e.preventDefault();\n            menu.dropPanel.hide();\n        });\n\n        // 『确定』按钮\n        $btnSubmit.click(function (e) {\n            e.preventDefault();\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getSelfOrParentByName(rangeElem, 'a');\n            var isRangeEmpty = editor.isRangeEmpty();\n\n            var $linkElem, linkHtml;\n            var commandFn, callback;\n            var $txt = editor.txt.$txt;\n            var $oldLinks, $newLinks;\n            var uniqId = 'link' + E.random();\n\n            // 获取数据\n            var url = $.trim($urlInput.val());\n            var text = $.trim($textInput.val());\n\n            if (!url) {\n                menu.dropPanel.focusFirstInput();\n                return;\n            }\n            if (!text) {\n                text = url;\n            }\n\n            if (!isRangeEmpty) {\n                // 选中区域有内容，则执行默认命令\n\n                // 获取目前 txt 内所有链接，并为当前链接做一个标记\n                $oldLinks = $txt.find('a');\n                $oldLinks.attr(uniqId, '1');\n\n                // 执行命令 \n                editor.command(e, 'createLink', url);\n\n                // 去的没有标记的链接，即刚刚插入的链接\n                $newLinks = $txt.find('a').not('[' + uniqId + ']');\n                $newLinks.attr('target', '_blank'); // 增加 _blank\n\n                // 去掉之前做的标记\n                $oldLinks.removeAttr(uniqId);\n\n            } else if (targetElem) {\n                // 无选中区域，在 a 标签之内，修改该 a 标签的内容和链接\n                $linkElem = $(targetElem);\n                commandFn = function () {\n                    $linkElem.attr('href', url);\n                    $linkElem.text(text);\n                };\n                callback = function () {\n                    var editor = this;\n                    editor.restoreSelectionByElem(targetElem);\n                };\n                // 执行命令\n                editor.customCommand(e, commandFn, callback);\n            } else {\n                // 无选中区域，不在 a 标签之内，插入新的链接\n\n                linkHtml = '<a href=\"' + url + '\" target=\"_blank\">' + text + '</a>';\n                if (E.userAgent.indexOf('Firefox') > 0) {\n                    linkHtml += '<span>&nbsp;</span>';\n                }\n                editor.command(e, 'insertHtml', linkHtml);\n            }\n\n        });\n        \n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// unlink 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'unlink';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.unlink,\n            commandName: 'unLink'\n        });\n\n        // click 事件\n        menu.clickEvent = function  (e) {\n            var isRangeEmpty = editor.isRangeEmpty();\n            if (!isRangeEmpty) {\n                // 有选中区域，或者IE8，执行默认命令\n                editor.command(e, 'unLink');\n                return;\n            }\n\n            // 无选中区域...\n\n            var rangeElem = editor.getRangeElem();\n            var aElem = editor.getSelfOrParentByName(rangeElem, 'a');\n            if (!aElem) {\n                // 不在 a 之内，返回\n                e.preventDefault();\n                return;\n            }\n\n            // 在 a 之内\n            var $a = $(aElem);\n            var $span = $('<span>' + $a.text() + '</span>');\n            function commandFn() {\n                $a.after($span).remove();\n            }\n            function callback() {\n                editor.restoreSelectionByElem($span.get(0));\n            }\n            editor.customCommand(e, commandFn, callback);\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// table 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'table';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.table\n        });\n\n        // dropPanel 内容\n        var $content = $('<div style=\"font-size: 14px; color: #666; text-align:right;\"></div>');\n        var $table = $('<table class=\"choose-table\" style=\"margin-bottom:10px;margin-top:5px;\">');\n        var $row = $('<span>0</span>');\n        var $rowspan = $('<span> 行 </span>');\n        var $col = $('<span>0</span>');\n        var $colspan = $('<span> 列</span>');\n        var $tr;\n        var i, j;\n\n        // 创建一个n行n列的表格\n        for (i = 0; i < 15; i++) {\n            $tr = $('<tr index=\"' + (i + 1) + '\">');\n            for (j = 0; j < 20; j++) {\n                $tr.append($('<td index=\"' + (j + 1) + '\">'));\n            }\n            $table.append($tr);\n        }\n        $content.append($table);\n        $content.append($row).append($rowspan).append($col).append($colspan);\n\n        // 定义table事件\n        $table.on('mouseenter', 'td', function (e) {\n            var $currentTd = $(e.currentTarget);\n            var currentTdIndex = $currentTd.attr('index');\n            var $currentTr = $currentTd.parent();\n            var currentTrIndex = $currentTr.attr('index');\n\n            // 显示\n            $row.text(currentTrIndex);\n            $col.text(currentTdIndex);\n\n            // 遍历设置背景颜色\n            $table.find('tr').each(function () {\n                var $tr = $(this);\n                var trIndex = $tr.attr('index');\n                if (parseInt(trIndex, 10) <= parseInt(currentTrIndex, 10)) {\n                    // 该行需要可能需要设置背景色\n                    $tr.find('td').each(function () {\n                        var $td = $(this);\n                        var tdIndex = $td.attr('index');\n                        if (parseInt(tdIndex, 10) <= parseInt(currentTdIndex, 10)) {\n                            // 需要设置背景色\n                            $td.addClass('active');\n                        } else {\n                            // 需要移除背景色\n                            $td.removeClass('active');\n                        }\n                    });\n                } else {\n                    // 改行不需要设置背景色\n                    $tr.find('td').removeClass('active');\n                }\n            });\n        }).on('mouseleave', function (e) {\n            // mouseleave 删除背景色\n            $table.find('td').removeClass('active');\n\n            $row.text(0);\n            $col.text(0);\n        });\n\n        // 插入表格\n        $table.on('click', 'td', function (e) {\n            var $currentTd = $(e.currentTarget);\n            var currentTdIndex = $currentTd.attr('index');\n            var $currentTr = $currentTd.parent();\n            var currentTrIndex = $currentTr.attr('index');\n\n            var rownum = parseInt(currentTrIndex, 10);\n            var colnum = parseInt(currentTdIndex, 10);\n\n            // -------- 拼接tabel html --------\n\n            var i, j;\n            var tableHtml = '<table>';\n            for (i = 0; i < rownum; i++) {\n                tableHtml += '<tr>';\n\n                for (j = 0; j < colnum; j++) {\n                    tableHtml += '<td><span>&nbsp;</span></td>';\n                }\n                tableHtml += '</tr>';\n            }\n            tableHtml += '</table>';\n\n            // -------- 执行命令 --------\n            editor.command(e, 'insertHtml', tableHtml);\n        });\n\n        // 创建 panel\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 262\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// emotion 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'emotion';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var config = editor.config;\n        var lang = config.lang;\n        var configEmotions = config.emotions;\n        var emotionsShow = config.emotionsShow;\n\n        // 记录每一个表情图片的地址\n        editor.emotionUrls = [];\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.emotion\n        });\n\n        // 添加表情图片的函数\n        function insertEmotionImgs(data, $tabContent) {\n            // 添加表情图片\n            $.each(data, function (k, emotion) {\n                var src = emotion.icon || emotion.url;\n                var value = emotion.value || emotion.title;\n                // 通过配置 editor.config.emotionsShow 的值来修改插入到编辑器的内容（图片/value）\n                var commandValue = emotionsShow === 'icon' ? src : value;\n                var $command = $('<a href=\"#\" commandValue=\"' + commandValue + '\"></a>');\n                var $img = $('<img>');\n                $img.attr('_src', src);  // 先将 src 复制到 '_src' 属性，先不加载\n\n                $command.append($img);\n                $tabContent.append($command);\n\n                // 记录下每一个表情图片的地址\n                editor.emotionUrls.push(src);\n            });\n        }\n\n        // 拼接 dropPanel 内容\n        var $panelContent = $('<div class=\"panel-tab\"></div>');\n        var $tabContainer = $('<div class=\"tab-container\"></div>');\n        var $contentContainer = $('<div class=\"content-container emotion-content-container\"></div>');\n        $.each(configEmotions, function (k, emotion) {\n            var title = emotion.title;\n            var data = emotion.data;\n\n            E.log('正在处理 ' + title + ' 表情的数据...');\n\n            // 增加该组表情的tab和content\n            var $tab = $('<a href=\"#\">' + title +' </a>');\n            $tabContainer.append($tab);\n            var $tabContent = $('<div class=\"content\"></div>');\n            $contentContainer.append($tabContent);\n\n            // tab 切换事件\n            $tab.click(function (e) {\n                $tabContainer.children().removeClass('selected');\n                $contentContainer.children().removeClass('selected');\n                $tabContent.addClass('selected');\n                $tab.addClass('selected');\n                e.preventDefault();\n            });\n\n            // 处理data\n            if (typeof data === 'string') {\n                // url 形式，需要通过ajax从该url获取数据\n                E.log('将通过 ' + data + ' 地址ajax下载表情包');\n                $.get(data, function (result) {\n                    result = $.parseJSON(result);\n                    E.log('下载完毕，得到 ' + result.length + ' 个表情');\n                    insertEmotionImgs(result, $tabContent);\n                });\n                \n            } else if ( Object.prototype.toString.call(data).toLowerCase().indexOf('array') > 0 ) {\n                // 数组，即 data 直接就是表情包数据\n                insertEmotionImgs(data, $tabContent);\n            } else {\n                // 其他情况，data格式不对\n                E.error('data 数据格式错误，请修改为正确格式，参考文档：' + E.docsite);\n                return;\n            }\n        });\n        $panelContent.append($tabContainer).append($contentContainer);\n\n        // 默认显示第一个tab\n        $tabContainer.children().first().addClass('selected');\n        $contentContainer.children().first().addClass('selected');\n\n        // 插入表情command事件\n        $contentContainer.on('click', 'a[commandValue]', function (e) {\n            var $a = $(e.currentTarget);\n            var commandValue = $a.attr('commandValue');\n            var img;\n\n            // commandValue 有可能是图片url，也有可能是表情的 value，需要区别对待\n\n            if (emotionsShow === 'icon') {\n                // 插入图片\n                editor.command(e, 'InsertImage', commandValue);\n            } else {\n                // 插入value\n                editor.command(e, 'insertHtml', '<span>' + commandValue + '</span>');\n            }\n\n            e.preventDefault();\n        });\n\n        // 添加panel\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $panelContent,\n            width: 350\n        });\n\n        // 定义click事件（异步加载表情图片）\n        menu.clickEvent = function (e) {\n            var menu = this;\n            var dropPanel = menu.dropPanel;\n\n            // -------------隐藏-------------\n            if (dropPanel.isShowing) {\n                dropPanel.hide();\n                return;\n            }\n\n            // -------------显示-------------\n            dropPanel.show();\n\n            // 异步加载图片\n            if (menu.imgLoaded) {\n                return;\n            }\n            $contentContainer.find('img').each(function () {\n                var $img = $(this);\n                var _src = $img.attr('_src');\n                $img.on('error', function () {\n                    E.error('加载不出表情图片 ' + _src);\n                });\n                $img.attr('src', _src);\n                $img.removeAttr('_src');\n            });\n            menu.imgLoaded = true;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// img 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'img';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.img\n        });\n\n        // 创建 panel content\n        var $panelContent = $('<div class=\"panel-tab\"></div>');\n        var $tabContainer = $('<div class=\"tab-container\"></div>');\n        var $contentContainer = $('<div class=\"content-container\"></div>');\n        $panelContent.append($tabContainer).append($contentContainer);\n\n        // tab\n        var $uploadTab = $('<a href=\"#\">' + lang.uploadImg + '</a>');\n        var $linkTab = $('<a href=\"#\">' + lang.linkImg + '</a>');\n        $tabContainer.append($uploadTab).append($linkTab);\n\n        // 上传图片 content\n        var $uploadContent = $('<div class=\"content\"></div>');\n        $contentContainer.append($uploadContent);\n\n        // 网络图片 content\n        var $linkContent = $('<div class=\"content\"></div>');\n        $contentContainer.append($linkContent);\n        linkContentHandler(editor, menu, $linkContent);\n\n        // 添加panel\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $panelContent,\n            width: 400,\n            onRender: function () {\n                // 渲染后的回调事件，用于执行自定义上传的init\n                // 因为渲染之后，上传面板的dom才会被渲染到页面，才能让第三方空间获取到\n                var init = editor.config.customUploadInit;\n                init && init.call(editor);\n            }\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n\n        // tab 切换事件\n        function tabToggle() {\n            $uploadTab.click(function (e) {\n                $tabContainer.children().removeClass('selected');\n                $contentContainer.children().removeClass('selected');\n                $uploadContent.addClass('selected');\n                $uploadTab.addClass('selected');\n                e.preventDefault();\n            });\n            $linkTab.click(function (e) {\n                $tabContainer.children().removeClass('selected');\n                $contentContainer.children().removeClass('selected');\n                $linkContent.addClass('selected');\n                $linkTab.addClass('selected');\n                e.preventDefault();\n\n                // focus input\n                if (E.placeholder) {\n                    $linkContent.find('input[type=text]').focus();\n                }\n            });\n\n            // 默认情况\n            // $uploadTab.addClass('selected');\n            // $uploadContent.addClass('selected');\n            $uploadTab.click();\n        }\n\n        // 隐藏上传图片\n        function hideUploadImg() {\n            $tabContainer.remove();\n            $uploadContent.remove();\n            $linkContent.addClass('selected');\n        }\n\n        // 隐藏网络图片\n        function hideLinkImg() {\n            $tabContainer.remove();\n            $linkContent.remove();\n            $uploadContent.addClass('selected');\n        }\n\n        // 判断用户是否配置了上传图片\n        editor.ready(function () {\n            var editor = this;\n            var config = editor.config;\n            var uploadImgUrl = config.uploadImgUrl;\n            var customUpload = config.customUpload;\n            var linkImg = config.hideLinkImg;\n            var $uploadImgPanel;\n\n            if (uploadImgUrl || customUpload) {\n                // 第一，暴露出 $uploadContent 以便用户自定义 ！！！重要\n                editor.$uploadContent = $uploadContent;\n\n                // 第二，绑定tab切换事件\n                tabToggle();\n\n                if (linkImg) {\n                    // 隐藏网络图片\n                    hideLinkImg();\n                }\n            } else {\n                // 未配置上传图片功能\n                hideUploadImg();\n            }\n\n            // 点击 $uploadContent 立即隐藏 dropPanel\n            // 为了兼容IE8、9的上传，因为IE8、9使用 modal 上传\n            // 这里使用异步，为了不妨碍高级浏览器通过点击 $uploadContent 选择文件\n            function hidePanel() {\n                menu.dropPanel.hide();\n            }\n            $uploadContent.click(function () {\n                setTimeout(hidePanel);\n            });\n        });\n    });\n\n    // --------------- 处理网络图片content ---------------\n    function linkContentHandler (editor, menu, $linkContent) {\n        var lang = editor.config.lang;\n        var $urlContainer = $('<div style=\"margin:20px 10px 10px 10px;\"></div>');\n        var $urlInput = $('<input type=\"text\" class=\"block\" placeholder=\"http://\"/>');\n        $urlContainer.append($urlInput);\n        var $btnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n        var $btnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n\n        $linkContent.append($urlContainer).append($btnSubmit).append($btnCancel);\n\n        // 取消\n        $btnCancel.click(function (e) {\n            e.preventDefault();\n            menu.dropPanel.hide();\n        });\n\n        // callback \n        function callback() {\n            $urlInput.val('');\n        }\n\n        // 确定\n        $btnSubmit.click(function (e) {\n            e.preventDefault();\n            var url = $.trim($urlInput.val());\n            if (!url) {\n                // 无内容\n                $urlInput.focus();\n                return;\n            }\n\n            var imgHtml = '<img style=\"max-width:100%;\" src=\"' + url + '\"/>';\n            editor.command(e, 'insertHtml', imgHtml, callback);\n        });\n    }\n\n});\n// video 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'video';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n        var reg = /^<(iframe)|(embed)/i;  // <iframe... 或者 <embed... 格式\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.video\n        });\n\n        // 创建 panel 内容\n        var $content = $('<div></div>');\n        var $linkInputContainer = $('<div style=\"margin:20px 10px;\"></div>');\n        var $linkInput = $('<input type=\"text\" class=\"block\" placeholder=\\'格式如：<iframe src=\"...\" frameborder=0 allowfullscreen></iframe>\\'/>');\n        $linkInputContainer.append($linkInput);\n        var $sizeContainer = $('<div style=\"margin:20px 10px;\"></div>');\n        var $widthInput = $('<input type=\"text\" value=\"640\" style=\"width:50px;text-align:center;\"/>');\n        var $heightInput = $('<input type=\"text\" value=\"498\" style=\"width:50px;text-align:center;\"/>');\n        $sizeContainer.append('<span> ' + lang.width + ' </span>')\n                      .append($widthInput)\n                      .append('<span> px &nbsp;&nbsp;&nbsp;</span>')\n                      .append('<span> ' + lang.height + ' </span>')\n                      .append($heightInput)\n                      .append('<span> px </span>');\n        var $btnContainer = $('<div></div>');\n        var $howToCopy = $('<a href=\"http://www.kancloud.cn/wangfupeng/wangeditor2/134973\" target=\"_blank\" style=\"display:inline-block;margin-top:10px;margin-left:10px;color:#999;\">如何复制视频链接？</a>');\n        var $btnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n        var $btnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n        $btnContainer.append($howToCopy).append($btnSubmit).append($btnCancel);\n        $content.append($linkInputContainer).append($sizeContainer).append($btnContainer);\n\n        // 取消按钮\n        $btnCancel.click(function (e) {\n            e.preventDefault();\n            $linkInput.val('');\n            menu.dropPanel.hide();\n        });\n\n        // 确定按钮\n        $btnSubmit.click(function (e) {\n            e.preventDefault();\n            var link = $.trim($linkInput.val());\n            var $link;\n            var width = parseInt($widthInput.val());\n            var height = parseInt($heightInput.val());\n            var $div = $('<div>');\n            var html = '<p>{content}</p>';\n\n            // 验证数据\n            if (!link) {\n                menu.dropPanel.focusFirstInput();\n                return;\n            }\n\n            if (!reg.test(link)) {\n                alert('视频链接格式错误！');\n                menu.dropPanel.focusFirstInput();\n                return;\n            }\n\n            if (isNaN(width) || isNaN(height)) {\n                alert('宽度或高度不是数字！');\n                return;\n            }\n\n            $link = $(link);\n\n            // 设置高度和宽度\n            $link.attr('width', width)\n                 .attr('height', height);\n\n            // 拼接字符串\n            html = html.replace('{content}', $div.append($link).html());\n\n            // 执行命令\n            editor.command(e, 'insertHtml', html);\n            $linkInput.val('');\n        });\n\n        // 创建panel\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 400\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// location 菜单\n_e(function (E, $) {\n\n    // 判断浏览器的 input 是否支持 keyup\n    var inputKeyup = (function (input) {\n        return 'onkeyup' in input;\n    })(document.createElement('input'));\n\n    // 百度地图的key\n    E.baiduMapAk = 'TVhjYjq1ICT2qqL5LdS8mwas';\n\n    // 一个页面中，如果有多个编辑器，地图会出现问题。这个参数记录一下，如果超过 1 就提示\n    E.numberOfLocation = 0;\n\n    E.createMenu(function (check) {\n        var menuId = 'location';\n        if (!check(menuId)) {\n            return;\n        }\n\n        if (++E.numberOfLocation > 1) {\n            E.error('目前不支持在一个页面多个编辑器上同时使用地图，可通过自定义菜单配置去掉地图菜单');\n            return;\n        }\n\n        var editor = this;\n        var config = editor.config;\n        var lang = config.lang;\n        var ak = config.mapAk;\n\n        // 地图的变量存储到这个地方\n        editor.mapData = {};\n        var mapData = editor.mapData;\n\n        // ---------- 地图事件 ----------\n        mapData.markers = [];\n        mapData.mapContainerId = 'map' + E.random();\n\n        mapData.clearLocations = function () {\n            var map = mapData.map;\n            if (!map) {\n                return;\n            }\n            map.clearOverlays();\n\n            //同时，清空marker数组\n            mapData.markers = [];\n        };\n\n        mapData.searchMap = function () {\n            var map = mapData.map;\n            if (!map) {\n                return;\n            }\n\n            var BMap = window.BMap;\n            var cityName = $cityInput.val();\n            var locationName = $searchInput.val();\n            var myGeo, marker;\n\n            if(cityName !== ''){\n                if(!locationName || locationName === ''){\n                    map.centerAndZoom(cityName, 11);\n                }\n\n                //地址解析\n                if(locationName && locationName !== ''){\n                    myGeo = new BMap.Geocoder();\n                    // 将地址解析结果显示在地图上,并调整地图视野\n                    myGeo.getPoint(locationName, function(point){\n                        if (point) {\n                            map.centerAndZoom(point, 13);\n                            marker = new BMap.Marker(point);\n                            map.addOverlay(marker);\n                            marker.enableDragging();  //允许拖拽\n                            mapData.markers.push(marker);  //将marker加入到数组中\n                        }else{\n                            // alert('未找到');\n                            map.centerAndZoom(cityName, 11);  //找不到则重新定位到城市\n                        }\n                    }, cityName);\n                }\n            } // if(cityName !== '')\n        };\n\n        // load script 之后的 callback\n        var hasCallback = false;\n        window.baiduMapCallBack = function(){\n            // 避免重复加载\n            if (hasCallback) {\n                return;\n            } else {\n                hasCallback = true;\n            }\n\n            var BMap = window.BMap;\n            if (!mapData.map) {\n                // 创建Map实例\n                mapData.map = new BMap.Map(mapData.mapContainerId);\n            }\n            var map = mapData.map;\n\n            map.centerAndZoom(new BMap.Point(116.404, 39.915), 11);  // 初始化地图,设置中心点坐标和地图级别\n            map.addControl(new BMap.MapTypeControl());   //添加地图类型控件\n            map.setCurrentCity(\"北京\");          // 设置地图显示的城市 此项是必须设置的\n            map.enableScrollWheelZoom(true);     //开启鼠标滚轮缩放\n\n            //根据IP定位\n            function locationFun(result){\n                var cityName = result.name;\n                map.setCenter(cityName);\n\n                // 设置城市名称\n                $cityInput.val(cityName);\n                if (E.placeholder) {\n                    $searchInput.focus();\n                }\n                var timeoutId, searchFn;\n                if (inputKeyup) {\n                   // 并绑定搜索事件 - input 支持 keyup\n                   searchFn = function (e) {\n                       if (e.type === 'keyup' && e.keyCode === 13) {\n                           e.preventDefault();\n                       }\n                       if (timeoutId) {\n                           clearTimeout(timeoutId);\n                       }\n                       timeoutId = setTimeout(mapData.searchMap, 500);\n                   };\n                   $cityInput.on('keyup change paste', searchFn);\n                   $searchInput.on('keyup change paste', searchFn); \n                } else {\n                    // 并绑定搜索事件 - input 不支持 keyup\n                    searchFn = function () {\n                        if (!$content.is(':visible')) {\n                            // panel 不显示了，就不用再监控了\n                            clearTimeout(timeoutId);\n                            return;\n                        }\n\n                        var currentCity = '';\n                        var currentSearch = '';\n                        var city = $cityInput.val();\n                        var search = $searchInput.val();\n\n                        if (city !== currentCity || search !== currentSearch) {\n                            // 刚获取的数据和之前的数据不一致，执行查询\n                            mapData.searchMap();\n                            // 更新数据\n                            currentCity = city;\n                            currentSearch = search;\n                        }\n\n                        // 继续监控\n                        if (timeoutId) {\n                            clearTimeout(timeoutId);\n                        }\n                        timeoutId = setTimeout(searchFn, 1000);\n                    };\n                    // 开始监控\n                    timeoutId = setTimeout(searchFn, 1000);\n                }\n            }\n            var myCity = new BMap.LocalCity();\n            myCity.get(locationFun);\n\n            //鼠标点击，创建位置\n            map.addEventListener(\"click\", function(e){\n                var marker = new BMap.Marker(new BMap.Point(e.point.lng, e.point.lat)); \n                map.addOverlay(marker);  \n                marker.enableDragging();\n                mapData.markers.push(marker);  //加入到数组中\n            }, false);\n        };\n\n        mapData.loadMapScript = function () {\n            var script = document.createElement(\"script\");\n            script.type = \"text/javascript\";\n            script.src = \"https://api.map.baidu.com/api?v=2.0&ak=\" + ak + \"&s=1&callback=baiduMapCallBack\";  // baiduMapCallBack是一个本地函数\n            try {\n                // IE10- 报错\n                document.body.appendChild(script);\n            } catch (ex) {\n                E.error('加载地图过程中发生错误');\n            }\n        };\n\n        // 初始化地图\n        mapData.initMap = function () {\n            if (window.BMap) {\n                // 不是第一次，直接处理地图即可\n                window.baiduMapCallBack();\n            } else {\n                // 第一次，先加载地图 script，再处理地图（script加载完自动执行处理）\n                mapData.loadMapScript();\n            }\n        };\n\n        // ---------- 创建 menu 对象 ----------\n\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.location\n        });\n\n        editor.menus[menuId] = menu;\n\n        // ---------- 构建UI ----------\n\n        // panel content \n        var $content = $('<div></div>');\n\n        // 搜索框\n        var $inputContainer = $('<div style=\"margin:10px 0;\"></div>');\n        var $cityInput = $('<input type=\"text\"/>');\n        $cityInput.css({\n            width: '80px',\n            'text-align': 'center'\n        });\n        var $searchInput = $('<input type=\"text\"/>');\n        $searchInput.css({\n            width: '300px',\n            'margin-left': '10px'\n        }).attr('placeholder', lang.searchlocation);\n        var $clearBtn = $('<button class=\"right link\">' + lang.clearLocation + '</button>');\n        $inputContainer.append($clearBtn)\n                       .append($cityInput)\n                       .append($searchInput);\n        $content.append($inputContainer);\n\n        // 清除位置按钮\n        $clearBtn.click(function (e) {\n            $searchInput.val('');\n            $searchInput.focus();\n            mapData.clearLocations();\n            e.preventDefault();\n        });\n\n        // 地图\n        var $map = $('<div id=\"' + mapData.mapContainerId + '\"></div>');\n        $map.css({\n            height: '260px',\n            width: '100%',\n            position: 'relative',\n            'margin-top': '10px',\n            border: '1px solid #f1f1f1'\n        });\n        var $mapLoading = $('<span>' + lang.loading + '</span>');\n        $mapLoading.css({\n            position: 'absolute',\n            width: '100px',\n            'text-align': 'center',\n            top: '45%',\n            left: '50%',\n            'margin-left': '-50px'\n        });\n        $map.append($mapLoading);\n        $content.append($map);\n\n        // 按钮\n        var $btnContainer = $('<div style=\"margin:10px 0;\"></div>');\n        var $btnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n        var $btnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n        var $checkLabel = $('<label style=\"display:inline-block;margin-top:10px;color:#666;\"></label>');\n        var $check = $('<input type=\"checkbox\">');\n        $checkLabel.append($check).append('<span style=\"display:inline-block;margin-left:5px;\">  ' + lang.dynamicMap + '</span>');\n        $btnContainer.append($checkLabel)\n                     .append($btnSubmit)\n                     .append($btnCancel);\n        $content.append($btnContainer);\n\n        function callback() {\n            $searchInput.val('');\n        }\n\n        // 『取消』按钮事件\n        $btnCancel.click(function (e) {\n            e.preventDefault();\n            callback();\n            menu.dropPanel.hide();\n        });\n\n        // 『确定』按钮事件\n        $btnSubmit.click(function (e) {\n            e.preventDefault();\n            var map = mapData.map,\n                isDynamic = $check.is(':checked'),\n                markers =  mapData.markers,\n\n                center = map.getCenter(),\n                centerLng = center.lng,\n                centerLat = center.lat,\n\n                zoom = map.getZoom(),\n\n                size = map.getSize(),\n                sizeWidth = size.width,\n                sizeHeight = size.height,\n\n                position,\n                src,\n                iframe;\n\n            if(isDynamic){\n                //动态地址\n                src = 'http://ueditor.baidu.com/ueditor/dialogs/map/show.html#';\n            }else{\n                //静态地址\n                src = 'http://api.map.baidu.com/staticimage?';\n            }\n\n            //src参数\n            src = src +'center=' + centerLng + ',' + centerLat +\n                '&zoom=' + zoom +\n                '&width=' + sizeWidth +\n                '&height=' + sizeHeight;\n            if(markers.length > 0){\n                src = src + '&markers=';\n\n                //添加所有的marker\n                $.each(markers, function(key, value){\n                    position = value.getPosition();\n                    if(key > 0){\n                        src = src + '|';\n                    }\n                    src = src + position.lng + ',' + position.lat;\n                });\n            }\n\n            if(isDynamic){\n                if(markers.length > 1){\n                    alert( lang.langDynamicOneLocation );\n                    return;\n                }\n\n                src += '&markerStyles=l,A';\n\n                //插入iframe\n                iframe = '<iframe class=\"ueditor_baidumap\" src=\"{src}\" frameborder=\"0\" width=\"' + sizeWidth + '\" height=\"' + sizeHeight + '\"></iframe>';\n                iframe = iframe.replace('{src}', src);\n                editor.command(e, 'insertHtml', iframe, callback);\n            }else{\n                //插入图片\n                editor.command(e, 'insertHtml', '<img style=\"max-width:100%;\" src=\"' + src + '\"/>', callback);\n            }\n        });\n\n        // 根据 UI 创建菜单 panel\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 500\n        });\n\n        // ---------- 事件 ----------\n\n        // render 时执行事件\n        menu.onRender = function () {\n            if (ak === E.baiduMapAk) {\n                E.warn('建议在配置中自定义百度地图的mapAk，否则可能影响地图功能，文档：' + E.docsite);\n            }\n        };\n\n        // click 事件\n        menu.clickEvent = function (e) {\n            var menu = this;\n            var dropPanel = menu.dropPanel;\n            var firstTime = false;\n\n            // -------------隐藏-------------\n            if (dropPanel.isShowing) {\n                dropPanel.hide();\n                return;\n            }\n\n            // -------------显示-------------\n            if (!mapData.map) {\n                // 第一次，先加载地图\n                firstTime = true;\n            }\n            \n            dropPanel.show();\n            mapData.initMap();\n\n            if (!firstTime) {\n                $searchInput.focus();\n            }\n        };\n\n    });\n\n});\n// insertcode 菜单\n_e(function (E, $) {\n\n    // 加载 highlightjs 代码\n    function loadHljs() {\n        if (E.userAgent.indexOf('MSIE 8') > 0) {\n            // 不支持 IE8\n            return;\n        }\n        if (window.hljs) {\n            // 不要重复加载\n            return;\n        }\n        var script = document.createElement(\"script\");\n        script.type = \"text/javascript\";\n        script.src = \"//cdn.bootcss.com/highlight.js/9.2.0/highlight.min.js\";\n        document.body.appendChild(script);\n    }\n    \n\n    E.createMenu(function (check) {\n        var menuId = 'insertcode';\n        if (!check(menuId)) {\n            return;\n        }\n\n        // 加载 highlightjs 代码\n        setTimeout(loadHljs, 0);\n\n        var editor = this;\n        var config = editor.config;\n        var lang = config.lang;\n        var $txt = editor.txt.$txt;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.insertcode\n        });\n\n        // click 事件\n        menu.clickEvent = function (e) {\n            var menu = this;\n            var dropPanel = menu.dropPanel;\n\n            // 隐藏\n            if (dropPanel.isShowing) {\n                dropPanel.hide();\n                return;\n            }\n\n            // 显示\n            $textarea.val('');\n            dropPanel.show();\n\n            // highlightjs 语言列表\n            var hljs = window.hljs;\n            if (hljs && hljs.listLanguages) {\n                if ($langSelect.children().length !== 0) {\n                    return;\n                }\n                $langSelect.css({\n                    'margin-top': '9px',\n                    'margin-left': '5px'\n                });\n                $.each(hljs.listLanguages(), function (key, lang) {\n                    if (lang === 'xml') {\n                        lang = 'html';\n                    }\n                    if (lang === config.codeDefaultLang) {\n                        $langSelect.append('<option value=\"' + lang + '\" selected=\"selected\">' + lang + '</option>');\n                    } else {\n                        $langSelect.append('<option value=\"' + lang + '\">' + lang + '</option>');\n                    }\n                });\n            } else {\n                $langSelect.hide();\n            }\n        };\n\n        // 选中状态下的 click 事件\n        menu.clickEventSelected = function (e) {\n            var menu = this;\n            var dropPanel = menu.dropPanel;\n\n            // 隐藏\n            if (dropPanel.isShowing) {\n                dropPanel.hide();\n                return;\n            }\n\n            // 显示\n            dropPanel.show();\n\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getSelfOrParentByName(rangeElem, 'pre');\n            var $targetElem;\n            var className;\n            if (targetElem) {\n                // 确定找到 pre 之后，再找 code\n                targetElem = editor.getSelfOrParentByName(rangeElem, 'code');\n            }\n            if (!targetElem) {\n                return;\n            }\n            $targetElem = $(targetElem);\n\n            // 赋值内容\n            $textarea.val($targetElem.text());\n            if ($langSelect) {\n                // 赋值语言\n                className = $targetElem.attr('class');\n                if (className) {\n                    $langSelect.val(className.split(' ')[0]);\n                }\n            }\n        };\n\n        // 定义更新选中状态的事件\n        menu.updateSelectedEvent = function () {\n            var self = this; //菜单对象\n            var editor = self.editor;\n            var rangeElem;\n\n            rangeElem = editor.getRangeElem();\n            rangeElem = editor.getSelfOrParentByName(rangeElem, 'pre');\n\n            if (rangeElem) {\n                return true;\n            }\n\n            return false;\n        };\n\n        // 创建 panel\n        var $content = $('<div></div>');\n        var $textarea = $('<textarea></textarea>');\n        var $langSelect = $('<select></select>');\n        contentHandle($content);\n        menu.dropPanel = new E.DropPanel(editor, menu, {\n            $content: $content,\n            width: 500\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n\n        // ------ 增加 content 内容 ------\n        function contentHandle($content) {\n            // textarea 区域\n            var $textareaContainer = $('<div></div>');\n            $textareaContainer.css({\n                margin: '15px 5px 5px 5px',\n                height: '160px',\n                'text-align': 'center'\n            });\n            $textarea.css({\n                width: '100%',\n                height: '100%',\n                padding: '10px'\n            });\n            $textarea.on('keydown', function (e) {\n                // 取消 tab 键默认行为\n                if (e.keyCode === 9) {\n                    e.preventDefault();\n                }\n            });\n            $textareaContainer.append($textarea);\n            $content.append($textareaContainer);\n\n            // 按钮区域\n            var $btnContainer = $('<div></div>');\n            var $btnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n            var $btnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n\n            $btnContainer.append($btnSubmit).append($btnCancel).append($langSelect);\n            $content.append($btnContainer);\n\n            // 取消按钮\n            $btnCancel.click(function (e) {\n                e.preventDefault();\n                menu.dropPanel.hide();\n            });\n\n            // 确定按钮\n            var codeTpl = '<pre style=\"max-width:100%;overflow-x:auto;\"><code{#langClass}>{#content}</code></pre>';\n            $btnSubmit.click(function (e) {\n                e.preventDefault();\n                var val = $textarea.val();\n                if (!val) {\n                    // 无内容\n                    $textarea.focus();\n                    return;\n                }\n\n                var rangeElem = editor.getRangeElem();\n                if ($.trim($(rangeElem).text()) && codeTpl.indexOf('<p><br></p>') !== 0) {\n                    codeTpl = '<p><br></p>' + codeTpl;\n                }\n\n                var lang = $langSelect ? $langSelect.val() : ''; // 获取高亮语言\n                var langClass = '';\n                var doHightlight = function () {\n                    $txt.find('pre code').each(function (i, block) {\n                        var $block = $(block);\n                        if ($block.attr('codemark')) {\n                            // 有 codemark 标记的代码块，就不再重新格式化了\n                            return;\n                        } else if (window.hljs) {\n                            // 新代码块，格式化之后，立即标记 codemark\n                            window.hljs.highlightBlock(block);\n                            $block.attr('codemark', '1');\n                        }\n                    });\n                };\n\n                // 语言高亮样式\n                if (lang) {\n                    langClass = ' class=\"' + lang + ' hljs\"';\n                }\n\n                // 替换标签\n                val = val.replace(/&/gm, '&amp;')\n                         .replace(/</gm, '&lt;')\n                         .replace(/>/gm, '&gt;');\n\n                // ---- menu 未选中状态 ----\n                if (!menu.selected) {\n                    // 拼接html\n                    var html = codeTpl.replace('{#langClass}', langClass).replace('{#content}', val);\n                    editor.command(e, 'insertHtml', html, doHightlight);\n                    return;\n                }\n\n                // ---- menu 选中状态 ----\n                var targetElem = editor.getSelfOrParentByName(rangeElem, 'pre');\n                var $targetElem;\n                if (targetElem) {\n                    // 确定找到 pre 之后，再找 code\n                    targetElem = editor.getSelfOrParentByName(rangeElem, 'code');\n                }\n                if (!targetElem) {\n                    return;\n                }\n                $targetElem = $(targetElem);\n\n                function commandFn() {\n                    var className;\n                    if (lang) {\n                        className = $targetElem.attr('class');\n                        if (className !== lang + ' hljs') {\n                            $targetElem.attr('class', lang + ' hljs');\n                        }\n                    }\n                    $targetElem.html(val);\n                }\n                function callback() {\n                    editor.restoreSelectionByElem(targetElem);\n                    doHightlight();\n                }\n                editor.customCommand(e, commandFn, callback);\n            });\n        }\n\n        // ------ enter 时，不另起标签，只换行 ------\n        $txt.on('keydown', function (e) {\n            if (e.keyCode !== 13) {\n                return;\n            }\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getSelfOrParentByName(rangeElem, 'code');\n            if (!targetElem) {\n                return;\n            }\n\n            editor.command(e, 'insertHtml', '\\n');\n        });\n\n        // ------ 点击时，禁用其他标签 ------\n        function updateMenu() {\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getSelfOrParentByName(rangeElem, 'code');\n            if (targetElem) {\n                // 在 code 之内，禁用其他菜单\n                editor.disableMenusExcept('insertcode');\n            } else {\n                // 不是在 code 之内，启用其他菜单\n                editor.enableMenusExcept('insertcode');\n            }\n        }\n        $txt.on('keydown click', function (e) {\n            // 此处必须使用 setTimeout 异步处理，否则不对\n            setTimeout(updateMenu);\n        });\n    });\n\n});\n// undo 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'undo';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.undo\n        });\n\n        // click 事件\n        menu.clickEvent = function (e) {\n            editor.undo();\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n\n\n        // ------------ 初始化时、enter 时、打字中断时，做记录 ------------\n        // ------------ ctrl + z 是调用记录撤销，而不是使用浏览器默认的撤销 ------------\n        editor.ready(function () {\n            var editor = this;\n            var $txt = editor.txt.$txt;\n            var timeoutId;\n\n            // 执行undo记录\n            function undo() {\n                editor.undoRecord();\n            }\n\n            $txt.on('keydown', function (e) {\n                var keyCode = e.keyCode;\n\n                // 撤销 ctrl + z\n                if (e.ctrlKey && keyCode === 90) {\n                    editor.undo();\n                    return;\n                }\n\n                if (keyCode === 13) {\n                    // enter 做记录\n                    undo();\n                } else {\n                    // keyup 之后 1s 之内不操作，则做一次记录\n                    if (timeoutId) {\n                        clearTimeout(timeoutId);\n                    }\n                    timeoutId = setTimeout(undo, 1000);\n                }\n            });\n\n            // 初始化做记录\n            editor.undoRecord();\n        });\n    });\n\n});\n// redo 菜单\n_e(function (E, $) {\n\n    E.createMenu(function (check) {\n        var menuId = 'redo';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var lang = editor.config.lang;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.redo\n        });\n\n        // click 事件\n        menu.clickEvent = function (e) {\n            editor.redo();\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// 全屏 菜单\n_e(function (E, $) {\n\n    // 记录全屏时的scrollTop\n    var scrollTopWhenFullScreen;\n\n    E.createMenu(function (check) {\n        var menuId = 'fullscreen';\n        if (!check(menuId)) {\n            return;\n        }\n        var editor = this;\n        var $txt = editor.txt.$txt;\n        var config = editor.config;\n        var zIndexConfig = config.zindex || 10000;\n        var lang = config.lang;\n\n        var isSelected = false;\n        var zIndex;\n\n        var maxHeight;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,\n            id: menuId,\n            title: lang.fullscreen\n        });\n\n        // 定义click事件\n        menu.clickEvent = function (e) {\n            // 增加样式\n            var $editorContainer = editor.$editorContainer;\n            $editorContainer.addClass('wangEditor-fullscreen');\n\n            // （先保存当前的）再设置z-index\n            zIndex = $editorContainer.css('z-index');\n            $editorContainer.css('z-index', zIndexConfig);\n\n            var $wrapper;\n            var txtHeight = $txt.height();\n            var txtOuterHeight = $txt.outerHeight();\n\n            if (editor.useMaxHeight) {\n                // 记录 max-height，并暂时去掉maxheight\n                maxHeight = $txt.css('max-height');\n                $txt.css('max-height', 'none');\n\n                // 如果使用了maxHeight， 将$txt从它的父元素中移出来\n                $wrapper = $txt.parent();\n                $wrapper.after($txt);\n                $wrapper.remove();\n                $txt.css('overflow-y', 'auto');\n            }\n\n            // 设置高度到全屏\n            var menuContainer = editor.menuContainer;\n            $txt.height(\n                E.$window.height() - \n                menuContainer.height() - \n                (txtOuterHeight - txtHeight)  // 去掉内边距和外边距\n            );\n\n            // 取消menuContainer的内联样式（menu吸顶时，会为 menuContainer 设置一些内联样式）\n            editor.menuContainer.$menuContainer.attr('style', '');\n\n            // 保存状态\n            isSelected = true;\n\n            // 记录编辑器是否全屏\n            editor.isFullScreen = true;\n\n            // 记录设置全屏时的高度\n            scrollTopWhenFullScreen = E.$window.scrollTop();\n        };\n\n        // 定义选中状态的 click 事件\n        menu.clickEventSelected = function (e) {\n            // 取消样式\n            var $editorContainer = editor.$editorContainer;\n            $editorContainer.removeClass('wangEditor-fullscreen');\n            $editorContainer.css('z-index', zIndex);\n\n            // 还原height\n            if (editor.useMaxHeight) {\n                $txt.css('max-height', maxHeight);\n            } else {\n                // editor.valueContainerHeight 在 editor.txt.initHeight() 中事先保存了\n                editor.$valueContainer.css('height', editor.valueContainerHeight);\n            }\n\n            // 重新计算高度\n            editor.txt.initHeight();\n\n            // 保存状态\n            isSelected = false;\n\n            // 记录编辑器是否全屏\n            editor.isFullScreen = false;\n\n            // 还原scrollTop\n            if (scrollTopWhenFullScreen != null) {\n                E.$window.scrollTop(scrollTopWhenFullScreen);\n            }\n        };\n\n        // 定义选中事件\n        menu.updateSelectedEvent = function (e) {\n            return isSelected;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// 渲染menus\n_e(function (E, $) {\n\n    E.fn.renderMenus = function () {\n\n        var editor = this;\n        var menus = editor.menus;\n        var menuIds = editor.config.menus;\n        var menuContainer = editor.menuContainer;\n\n        var menu;\n        var groupIdx = 0;\n        $.each(menuIds, function (k, v) {\n            if (v === '|') {\n                groupIdx++;\n                return;\n            }\n\n            menu = menus[v];\n            if (menu) {\n                menu.render(groupIdx);\n            }\n        });\n    };\n\n});\n// 渲染menus\n_e(function (E, $) {\n\n    E.fn.renderMenuContainer = function () {\n\n        var editor = this;\n        var menuContainer = editor.menuContainer;\n        var $editorContainer = editor.$editorContainer;\n\n        menuContainer.render();\n\n    };\n\n});\n// 渲染 txt\n_e(function (E, $) {\n\n    E.fn.renderTxt = function () {\n\n        var editor = this;\n        var txt = editor.txt;\n\n        txt.render();\n\n        // ready 时候，计算txt的高度\n        editor.ready(function () {\n            txt.initHeight();\n        });\n    };\n\n});\n// 渲染 container\n_e(function (E, $) {\n\n    E.fn.renderEditorContainer = function () {\n\n        var editor = this;\n        var $valueContainer = editor.$valueContainer;\n        var $editorContainer = editor.$editorContainer;\n        var $txt = editor.txt.$txt;\n        var $prev, $parent;\n\n        // 将编辑器渲染到页面中\n        if ($valueContainer === $txt) {\n            $prev = editor.$prev;\n            $parent = editor.$parent;\n\n            if ($prev && $prev.length) {\n                // 有前置节点，就插入到前置节点的后面\n                $prev.after($editorContainer);\n            } else {\n                // 没有前置节点，就直接插入到父元素\n                $parent.prepend($editorContainer);\n            }\n\n        } else {\n            $valueContainer.after($editorContainer);\n            $valueContainer.hide();\n        }\n\n        // 设置宽度（这样设置宽度有问题）\n        // $editorContainer.css('width', $valueContainer.css('width'));\n    };\n\n});\n// 菜单事件\n_e(function (E, $) {\n\n    // 绑定每个菜单的click事件\n    E.fn.eventMenus = function () {\n\n        var menus = this.menus;\n\n        // 绑定菜单的点击事件\n        $.each(menus, function (k, v) {\n            v.bindEvent();\n        });\n\n    };\n\n});\n// 菜单container事件\n_e(function (E, $) {\n\n    E.fn.eventMenuContainer = function () {\n\n    };\n\n});\n// 编辑区域事件\n_e(function (E, $) {\n\n    E.fn.eventTxt = function () {\n\n        var txt = this.txt;\n\n        // txt内容变化时，保存选区\n        txt.saveSelectionEvent();\n\n        // txt内容变化时，随时更新 value\n        txt.updateValueEvent();\n\n        // txt内容变化时，随时更新 menu style\n        txt.updateMenuStyleEvent();\n\n        // // 鼠标hover时，显示 p head 高度（暂时关闭这个功能）\n        // if (!/ie/i.test(E.userAgent)) {\n        //     // 暂时不支持IE\n        //     txt.showHeightOnHover();\n        // }\n    };\n\n});\n// 上传图片事件\n_e(function (E, $) {\n\n    E.plugin(function () {\n        var editor = this;\n        var fns = editor.config.uploadImgFns; // editor.config.uploadImgFns = {} 在config文件中定义了\n\n        // -------- 定义load函数 --------\n        fns.onload || (fns.onload = function (resultText, xhr) {\n            E.log('上传结束，返回结果为 ' + resultText);\n\n            var editor = this;\n            var originalName = editor.uploadImgOriginalName || '';  // 上传图片时，已经将图片的名字存在 editor.uploadImgOriginalName\n            var img;\n            if (resultText.indexOf('error|') === 0) {\n                // 提示错误\n                E.warn('上传失败：' + resultText.split('|')[1]);\n                alert(resultText.split('|')[1]);\n            } else {\n                E.log('上传成功，即将插入编辑区域，结果为：' + resultText);\n\n                // 将结果插入编辑器\n                img = document.createElement('img');\n                img.onload = function () {\n                    var html = '<img src=\"' + resultText + '\" alt=\"' + originalName + '\" style=\"max-width:100%;\"/>';\n                    editor.command(null, 'insertHtml', html);\n\n                    E.log('已插入图片，地址 ' + resultText);\n                    img = null;\n                };\n                img.onerror = function () {\n                    E.error('使用返回的结果获取图片，发生错误。请确认以下结果是否正确：' + resultText);\n                    img = null;\n                };\n                img.src = resultText;\n            }\n\n        });\n\n        // -------- 定义tiemout函数 --------\n        fns.ontimeout || (fns.ontimeout = function (xhr) {\n            E.error('上传图片超时');\n            alert('上传图片超时');\n        });\n\n        // -------- 定义error函数 --------\n        fns.onerror || (fns.onerror = function (xhr) {\n            E.error('上传上图片发生错误');\n            alert('上传上图片发生错误');\n        });\n\n    });\n});\n// xhr 上传图片\n_e(function (E, $) {\n\n    if (!window.FileReader || !window.FormData) {\n        // 如果不支持html5的文档操作，直接返回\n        return;\n    }\n\n    E.plugin(function () {\n\n        var editor = this;\n        var config = editor.config;\n        var uploadImgUrl = config.uploadImgUrl;\n        var uploadTimeout = config.uploadTimeout;\n\n        // 获取配置中的上传事件\n        var uploadImgFns = config.uploadImgFns;\n        var onload = uploadImgFns.onload;\n        var ontimeout = uploadImgFns.ontimeout;\n        var onerror = uploadImgFns.onerror;\n\n        if (!uploadImgUrl) {\n            return;\n        }\n\n        // -------- 将以base64的图片url数据转换为Blob --------\n        function convertBase64UrlToBlob(urlData, filetype){\n            //去掉url的头，并转换为byte\n            var bytes = window.atob(urlData.split(',')[1]);\n            \n            //处理异常,将ascii码小于0的转换为大于0\n            var ab = new ArrayBuffer(bytes.length);\n            var ia = new Uint8Array(ab);\n            var i;\n            for (i = 0; i < bytes.length; i++) {\n                ia[i] = bytes.charCodeAt(i);\n            }\n\n            return new Blob([ab], {type : filetype});\n        }\n\n        // -------- 插入图片的方法 --------\n        function insertImg(src, event) {\n            var img = document.createElement('img');\n            img.onload = function () {\n                var html = '<img src=\"' + src + '\" style=\"max-width:100%;\"/>';\n                editor.command(event, 'insertHtml', html);\n\n                E.log('已插入图片，地址 ' + src);\n                img = null;\n            };\n            img.onerror = function () {\n                E.error('使用返回的结果获取图片，发生错误。请确认以下结果是否正确：' + src);\n                img = null;\n            };\n            img.src = src;\n        }\n\n        // -------- onprogress 事件 --------\n        function updateProgress(e) {\n            if (e.lengthComputable) {\n                var percentComplete = e.loaded / e.total;\n                editor.showUploadProgress(percentComplete * 100);\n            }\n        }\n\n        // -------- xhr 上传图片 --------\n        editor.xhrUploadImg = function (opt) {\n            // opt 数据\n            var event = opt.event;\n            var fileName = opt.filename || '';\n            var base64 = opt.base64;\n            var fileType = opt.fileType || 'image/png'; // 无扩展名则默认使用 png\n            var name = opt.name || 'wangEditor_upload_file';\n            var loadfn = opt.loadfn || onload;\n            var errorfn = opt.errorfn || onerror;\n            var timeoutfn = opt.timeoutfn || ontimeout;\n\n            // 上传参数（如 token）\n            var params = editor.config.uploadParams || {};\n\n            // headers\n            var headers = editor.config.uploadHeaders || {};\n\n            // 获取文件扩展名\n            var fileExt = 'png';  // 默认为 png\n            if (fileName.indexOf('.') > 0) {\n                // 原来的文件名有扩展名\n                fileExt = fileName.slice(fileName.lastIndexOf('.') - fileName.length + 1);\n            } else if (fileType.indexOf('/') > 0 && fileType.split('/')[1]) {\n                // 文件名没有扩展名，通过类型获取，如从 'image/png' 取 'png'\n                fileExt = fileType.split('/')[1];\n            }\n\n            // ------------ begin 预览模拟上传 ------------\n            if (E.isOnWebsite) {\n                E.log('预览模拟上传');\n                insertImg(base64, event);\n                return;\n            }\n            // ------------ end 预览模拟上传 ------------\n\n            // 变量声明\n            var xhr = new XMLHttpRequest();\n            var timeoutId;\n            var src;\n            var formData = new FormData();\n\n            // 超时处理\n            function timeoutCallback() {\n                if (timeoutId) {\n                    clearTimeout(timeoutId);\n                }\n                if (xhr && xhr.abort) {\n                    xhr.abort();\n                }\n\n                // 超时了就阻止默认行为\n                event.preventDefault();\n\n                // 执行回调函数，提示什么内容，都应该在回调函数中定义\n                timeoutfn && timeoutfn.call(editor, xhr);\n\n                // 隐藏进度条\n                editor.hideUploadProgress();\n            }\n\n            xhr.onload = function () {\n                if (timeoutId) {\n                    clearTimeout(timeoutId);\n                }\n\n                // 记录文件名到 editor.uploadImgOriginalName ，插入图片时，可做 alt 属性用\n                editor.uploadImgOriginalName = fileName;\n                if (fileName.indexOf('.') > 0) {\n                    editor.uploadImgOriginalName = fileName.split('.')[0];\n                }\n\n                // 执行load函数，任何操作，都应该在load函数中定义\n                loadfn && loadfn.call(editor, xhr.responseText, xhr);\n\n                // 隐藏进度条\n                editor.hideUploadProgress();\n            };\n            xhr.onerror = function () {\n                if (timeoutId) {\n                    clearTimeout(timeoutId);\n                }\n\n                // 超时了就阻止默认行为\n                event.preventDefault();\n\n                // 执行error函数，错误提示，应该在error函数中定义\n                errorfn && errorfn.call(editor, xhr);\n\n                // 隐藏进度条\n                editor.hideUploadProgress();\n            };\n            // xhr.onprogress = updateProgress;\n            xhr.upload.onprogress = updateProgress;\n\n            // 填充数据\n            formData.append(name, convertBase64UrlToBlob(base64, fileType), E.random() + '.' + fileExt);\n\n            // 添加参数\n            $.each(params, function (key, value) {\n                formData.append(key, value);\n            });\n\n            // 开始上传\n            xhr.open('POST', uploadImgUrl, true);\n            // xhr.setRequestHeader(\"Content-type\",\"application/x-www-form-urlencoded\");  // 将参数解析成传统form的方式上传\n\n            // 修改自定义配置的headers\n            $.each(headers, function (key, value) {\n                xhr.setRequestHeader(key, value);\n            });\n\n            // 跨域上传时，传cookie\n            xhr.withCredentials = editor.config.withCredentials || true;\n\n            // 发送数据\n            xhr.send(formData);\n            timeoutId = setTimeout(timeoutCallback, uploadTimeout);\n\n            E.log('开始上传...并开始超时计算');\n        };\n    });\n});\n// 进度条\n_e(function (E, $) {\n\n    E.plugin(function () {\n\n        var editor = this;\n        var menuContainer = editor.menuContainer;\n        var menuHeight = menuContainer.height();\n        var $editorContainer = editor.$editorContainer;\n        var width = $editorContainer.width();\n        var $progress = $('<div class=\"wangEditor-upload-progress\"></div>');\n\n        // 渲染事件\n        var isRender = false;\n        function render() {\n            if (isRender) {\n                return;\n            }\n            isRender = true;\n\n            $progress.css({\n                top: menuHeight + 'px'\n            });\n            $editorContainer.append($progress);\n        }\n\n        // ------ 显示进度 ------\n        editor.showUploadProgress = function (progress) {\n            if (timeoutId) {\n                clearTimeout(timeoutId);\n            }\n\n            // 显示之前，先判断是否渲染\n            render();\n\n            $progress.show();\n            $progress.width(progress * width / 100);\n        };\n\n        // ------ 隐藏进度条 ------\n        var timeoutId;\n        function hideProgress() {\n            $progress.hide();\n            timeoutId = null;\n        }\n        editor.hideUploadProgress = function (time) {\n            if (timeoutId) {\n                clearTimeout(timeoutId);\n            }\n            time = time || 750;\n            timeoutId = setTimeout(hideProgress, time);\n        };\n    });\n});\n// upload img 插件\n_e(function (E, $) {\n\n    E.plugin(function () {\n        var editor = this;\n        var config = editor.config;\n        var uploadImgUrl = config.uploadImgUrl;\n        var uploadTimeout = config.uploadTimeout;\n        var event;\n\n        if (!uploadImgUrl) {\n            return;\n        }\n\n        // 获取editor的上传dom\n        var $uploadContent = editor.$uploadContent;\n        if (!$uploadContent) {\n            return;\n        }\n\n        // 自定义UI，并添加到上传dom节点上\n        var $uploadIcon = $('<div class=\"upload-icon-container\"><i class=\"wangeditor-menu-img-upload\"></i></div>');\n        $uploadContent.append($uploadIcon);\n\n        // ---------- 构建上传对象 ----------\n        var upfile = new E.UploadFile({\n            editor: editor,\n            uploadUrl: uploadImgUrl,\n            timeout: uploadTimeout,\n            fileAccept: 'image/jpg,image/jpeg,image/png,image/gif,image/bmp'    // 只允许选择图片 \n        });\n\n        // 选择本地文件，上传\n        $uploadIcon.click(function (e) {\n            event = e;\n            upfile.selectFiles();\n        });\n    });\n});\n// h5 方式上传图片\n_e(function (E, $) {\n\n    if (!window.FileReader || !window.FormData) {\n        // 如果不支持html5的文档操作，直接返回\n        return;\n    }\n\n    // 构造函数\n    var UploadFile = function (opt) {\n        this.editor = opt.editor;\n        this.uploadUrl = opt.uploadUrl;\n        this.timeout = opt.timeout;\n        this.fileAccept = opt.fileAccept;\n        this.multiple = true;\n    };\n\n    UploadFile.fn = UploadFile.prototype;\n\n    // clear\n    UploadFile.fn.clear = function () {\n        this.$input.val('');\n        E.log('input value 已清空');\n    };\n\n    // 渲染\n    UploadFile.fn.render = function () {\n        var self = this;\n        if (self._hasRender) {\n            // 不要重复渲染\n            return;\n        }\n\n        E.log('渲染dom');\n\n        var fileAccept = self.fileAccept;\n        var acceptTpl = fileAccept ? 'accept=\"' + fileAccept + '\"' : '';\n        var multiple = self.multiple;\n        var multipleTpl = multiple ? 'multiple=\"multiple\"' : '';\n        var $input = $('<input type=\"file\" ' + acceptTpl + ' ' + multipleTpl + '/>');\n        var $container = $('<div style=\"display:none;\"></div>');\n\n        $container.append($input);\n        E.$body.append($container);\n\n        // onchange 事件\n        $input.on('change', function (e) {\n            self.selected(e, $input.get(0));\n        });\n\n        // 记录对象数据\n        self.$input = $input;\n\n        // 记录\n        self._hasRender = true;\n    };\n\n    // 选择\n    UploadFile.fn.selectFiles = function () {\n        var self = this;\n\n        E.log('使用 html5 方式上传');\n\n        // 先渲染\n        self.render();\n\n        // 选择\n        E.log('选择文件');\n        self.$input.click();\n    };\n\n    // 选中文件之后\n    UploadFile.fn.selected = function (e, input) {\n        var self = this;\n        var files = input.files || [];\n        if (files.length === 0) {\n            return;\n        }\n\n        E.log('选中 ' + files.length + ' 个文件');\n\n        // 遍历选中的文件，预览、上传\n        $.each(files, function (key, value) {\n            self.upload(value);\n        });\n    };\n\n    // 上传单个文件\n    UploadFile.fn.upload = function (file) {\n        var self = this;\n        var editor = self.editor;\n        var filename = file.name || '';\n        var fileType = file.type || '';\n        var uploadImgFns = editor.config.uploadImgFns;\n        var uploadFileName = editor.config.uploadImgFileName || 'wangEditorH5File';\n        var onload = uploadImgFns.onload;\n        var ontimeout = uploadImgFns.ontimeout;\n        var onerror = uploadImgFns.onerror;\n        var reader = new FileReader();\n\n        if (!onload || !ontimeout || !onerror) {\n            E.error('请为编辑器配置上传图片的 onload ontimeout onerror 回调事件');\n            return;\n        }\n\n\n        E.log('开始执行 ' + filename + ' 文件的上传');\n\n        // 清空 input 数据\n        function clearInput() {\n            self.clear();\n        }\n\n        // onload事件\n        reader.onload = function (e) {\n            E.log('已读取' + filename + '文件');\n\n            var base64 = e.target.result || this.result;\n            editor.xhrUploadImg({\n                event: e,\n                filename: filename,\n                base64: base64,\n                fileType: fileType,\n                name: uploadFileName,\n                loadfn: function (resultText, xhr) {\n                    clearInput();\n                    // 执行配置中的方法\n                    var editor = this;\n                    onload.call(editor, resultText, xhr);\n                },\n                errorfn: function (xhr) {\n                    clearInput();\n                    if (E.isOnWebsite) {\n                        alert('wangEditor官网暂时没有服务端，因此报错。实际项目中不会发生');\n                    }\n                    // 执行配置中的方法\n                    var editor = this;\n                    onerror.call(editor, xhr);\n                },\n                timeoutfn: function (xhr) {\n                    clearInput();\n                    if (E.isOnWebsite) {\n                        alert('wangEditor官网暂时没有服务端，因此超时。实际项目中不会发生');\n                    }\n                    // 执行配置中的方法\n                    var editor = this;\n                    ontimeout(editor, xhr);\n                }\n            });\n        };\n\n        // 开始取文件\n        reader.readAsDataURL(file);\n    };\n\n    // 暴露给 E\n    E.UploadFile = UploadFile;\n\n});\n// form方式上传图片\n_e(function (E, $) {\n\n    if (window.FileReader && window.FormData) {\n        // 如果支持 html5 上传，则返回\n        return;\n    }\n    \n    // 构造函数\n    var UploadFile = function (opt) {\n        this.editor = opt.editor;\n        this.uploadUrl = opt.uploadUrl;\n        this.timeout = opt.timeout;\n        this.fileAccept = opt.fileAccept;\n        this.multiple = false;\n    };\n\n    UploadFile.fn = UploadFile.prototype;\n\n    // clear\n    UploadFile.fn.clear = function () {\n        this.$input.val('');\n        E.log('input value 已清空');\n    };\n\n    // 隐藏modal\n    UploadFile.fn.hideModal = function () {\n        this.modal.hide();\n    };\n\n    // 渲染\n    UploadFile.fn.render = function () {\n        var self = this;\n        var editor = self.editor;\n        var uploadFileName = editor.config.uploadImgFileName || 'wangEditorFormFile';\n        if (self._hasRender) {\n            // 不要重复渲染\n            return;\n        }\n\n        // 服务器端路径\n        var uploadUrl = self.uploadUrl;\n\n        E.log('渲染dom');\n\n        // 创建 form 和 iframe\n        var iframeId = 'iframe' + E.random();\n        var $iframe = $('<iframe name=\"' + iframeId + '\" id=\"' + iframeId + '\" frameborder=\"0\" width=\"0\" height=\"0\"></iframe>');\n        var multiple = self.multiple;\n        var multipleTpl = multiple ? 'multiple=\"multiple\"' : '';\n        var $p = $('<p>选择图片并上传</p>');\n        var $input = $('<input type=\"file\" ' + multipleTpl + ' name=\"' + uploadFileName + '\"/>');\n        var $btn = $('<input type=\"submit\" value=\"上传\"/>');\n        var $form = $('<form enctype=\"multipart/form-data\" method=\"post\" action=\"' + uploadUrl + '\" target=\"' + iframeId + '\"></form>');\n        var $container = $('<div style=\"margin:10px 20px;\"></div>');\n\n        $form.append($p).append($input).append($btn);\n\n        // 增加用户配置的参数，如 token\n        $.each(editor.config.uploadParams, function (key, value) {\n            $form.append( $('<input type=\"hidden\" name=\"' + key + '\" value=\"' + value + '\"/>') );\n        });\n\n        $container.append($form);\n        $container.append($iframe);\n\n        self.$input = $input;\n        self.$iframe = $iframe;\n\n        // 生成 modal\n        var modal = new E.Modal(editor, undefined, {\n            $content: $container\n        });\n        self.modal = modal;\n\n        // 记录\n        self._hasRender = true;\n    };\n\n    // 绑定 iframe load 事件\n    UploadFile.fn.bindLoadEvent = function () {\n        var self = this;\n        if (self._hasBindLoad) {\n            // 不要重复绑定\n            return;\n        }\n\n        var editor = self.editor;\n        var $iframe = self.$iframe;\n        var iframe = $iframe.get(0);\n        var iframeWindow = iframe.contentWindow;\n        var onload = editor.config.uploadImgFns.onload;\n\n        // 定义load事件\n        function onloadFn() {\n            var resultText = $.trim(iframeWindow.document.body.innerHTML);\n            if (!resultText) {\n                return;\n            }\n\n            // 获取文件名\n            var fileFullName = self.$input.val();  // 结果如 C:\\folder\\abc.png 格式\n            var fileOriginalName = fileFullName;\n            if (fileFullName.lastIndexOf('\\\\') >= 0) {\n                // 获取 abc.png 格式\n                fileOriginalName = fileFullName.slice(fileFullName.lastIndexOf('\\\\') + 1);\n                if (fileOriginalName.indexOf('.') > 0) {\n                    // 获取 abc （即不带扩展名的文件名）\n                    fileOriginalName = fileOriginalName.split('.')[0];\n                }\n            }\n\n            // 将文件名暂存到 editor.uploadImgOriginalName ，插入图片时，可作为 alt 属性来用\n            editor.uploadImgOriginalName = fileOriginalName;\n\n            // 执行load函数，插入图片的操作，应该在load函数中执行\n            onload.call(editor, resultText);\n\n            // 清空 input 数据\n            self.clear();\n\n            // 隐藏modal\n            self.hideModal();\n        }\n\n        // 绑定 load 事件\n        if (iframe.attachEvent) {\n            iframe.attachEvent('onload', onloadFn);\n        } else {\n            iframe.onload = onloadFn;\n        }\n\n        // 记录\n        self._hasBindLoad = true;\n    };\n\n    UploadFile.fn.show = function () {\n        var self = this;\n        var modal = self.modal;\n\n        function show() {\n            modal.show();\n            self.bindLoadEvent();\n        }\n        setTimeout(show);\n    };\n\n    // 选择\n    UploadFile.fn.selectFiles = function () {\n        var self = this;\n\n        E.log('使用 form 方式上传');\n\n        // 先渲染\n        self.render();\n\n        // 先清空\n        self.clear();\n\n        // 显示\n        self.show();\n    };\n\n    // 暴露给 E\n    E.UploadFile = UploadFile;\n\n});\n// upload img 插件 粘贴图片\n_e(function (E, $) {\n    \n    E.plugin(function () {\n        var editor = this;\n        var txt = editor.txt;\n        var $txt = txt.$txt;\n        var config = editor.config;\n        var uploadImgUrl = config.uploadImgUrl;\n        var uploadFileName = config.uploadImgFileName || 'wangEditorPasteFile';\n        var pasteEvent;\n        var $imgsBeforePaste;\n\n        // 未配置上传图片url，则忽略\n        if (!uploadImgUrl) {\n            return;\n        }\n\n        // -------- 非 chrome 下，通过查找粘贴的图片的方式上传 --------\n        function findPasteImgAndUpload() {\n            var reg = /^data:(image\\/\\w+);base64/;\n            var $imgs = $txt.find('img');\n\n            E.log('粘贴后，检查到编辑器有' + $imgs.length + '个图片。开始遍历图片，试图找到刚刚粘贴过来的图片');\n\n            $.each($imgs, function () {\n                var img = this;\n                var $img = $(img);\n                var flag;\n                var base64 = $img.attr('src');\n                var type;\n\n                // 判断当前图片是否是粘贴之前的\n                $imgsBeforePaste.each(function () {\n                    if (img === this) {\n                        // 当前图片是粘贴之前的\n                        flag = true;\n                        return false;\n                    }\n                });\n\n                // 当前图片是粘贴之前的，则忽略\n                if (flag) {\n                    return;\n                }\n\n                E.log('找到一个粘贴过来的图片');\n\n                if (reg.test(base64)) {\n                    // 得到的粘贴的图片是 base64 格式，符合要求\n                    E.log('src 是 base64 格式，可以上传');\n                    type = base64.match(reg)[1];\n                    editor.xhrUploadImg({\n                        event: pasteEvent,\n                        base64: base64,\n                        fileType: type,\n                        name: uploadFileName\n                    });\n                } else {\n                    E.log('src 为 ' + base64 + ' ，不是 base64 格式，暂时不支持上传');\n                }\n\n                // 最终移除原图片\n                $img.remove();\n            });\n\n            E.log('遍历结束');\n        }\n\n        // 开始监控粘贴事件\n        $txt.on('paste', function (e) {\n            pasteEvent = e;\n            var data = pasteEvent.clipboardData || pasteEvent.originalEvent.clipboardData;\n            var text;\n            var items;\n\n            // -------- 试图获取剪切板中的文字，有文字的情况下，就不处理图片粘贴 --------\n            if (data == null) {\n                text = window.clipboardData && window.clipboardData.getData('text');\n            } else {\n                text = data.getData('text/plain') || data.getData('text/html');\n            }\n            if (text) {\n                return;\n            }\n\n            items = data && data.items;\n            if (items) {\n                // -------- chrome 可以用 data.items 取出图片 -----\n                E.log('通过 data.items 得到了数据');\n\n                $.each(items, function (key, value) {\n                    var fileType = value.type || '';\n                    if(fileType.indexOf('image') < 0) {\n                        // 不是图片\n                        return;\n                    }\n\n                    var file = value.getAsFile();\n                    var reader = new FileReader();\n\n                    E.log('得到一个粘贴图片');\n\n                    reader.onload = function (e) {\n                        E.log('读取到粘贴的图片');\n\n                        // 执行上传\n                        var base64 = e.target.result || this.result;\n                        editor.xhrUploadImg({\n                            event: pasteEvent,\n                            base64: base64,\n                            fileType: fileType,\n                            name: uploadFileName\n                        });\n                    };\n\n                    //读取粘贴的文件\n                    reader.readAsDataURL(file);\n                });\n            } else {\n                // -------- 非 chrome 不能用 data.items 取图片 -----\n\n                E.log('未从 data.items 得到数据，使用检测粘贴图片的方式');\n\n                // 获取\n                $imgsBeforePaste = $txt.find('img');\n                E.log('粘贴前，检查到编辑器有' + $imgsBeforePaste.length + '个图片');\n\n                // 异步上传找到的图片\n                setTimeout(findPasteImgAndUpload, 0);\n            }\n        });\n\n    });\n});\n// 拖拽上传图片 插件 \n_e(function (E, $) {\n\n    E.plugin(function () {\n\n        var editor = this;\n        var txt = editor.txt;\n        var $txt = txt.$txt;\n        var config = editor.config;\n        var uploadImgUrl = config.uploadImgUrl;\n        var uploadFileName = config.uploadImgFileName || 'wangEditorDragFile';\n\n        // 未配置上传图片url，则忽略\n        if (!uploadImgUrl) {\n            return;\n        }\n\n        // 阻止浏览器默认行为\n        E.$document.on('dragleave drop dragenter dragover', function (e) {\n            e.preventDefault();\n        });\n\n        // 监控 $txt drop 事件\n        $txt.on('drop', function (dragEvent) {\n            dragEvent.preventDefault();\n\n            var originalEvent = dragEvent.originalEvent;\n            var files = originalEvent.dataTransfer && originalEvent.dataTransfer.files;\n\n            if (!files || !files.length) {\n                return;\n            }\n\n            $.each(files, function (k, file) {\n                var type = file.type;\n                var name = file.name;\n\n                if (type.indexOf('image/') < 0) {\n                    // 只接收图片\n                    return;\n                }\n\n                E.log('得到图片 ' + name);\n\n                var reader = new FileReader();\n                reader.onload = function (e) {\n                    E.log('读取到图片 ' + name);\n\n                    // 执行上传\n                    var base64 = e.target.result || this.result;\n                    editor.xhrUploadImg({\n                        event: dragEvent,\n                        base64: base64,\n                        fileType: type,\n                        name: uploadFileName\n                    });\n                };\n\n                //读取粘贴的文件\n                reader.readAsDataURL(file);\n\n            });\n        });\n    });\n\n});\n// 编辑器区域 table toolbar\n_e(function (E, $) {\n\n    E.plugin(function () {\n        var editor = this;\n        var txt = editor.txt;\n        var $txt = txt.$txt;\n        var html = '';\n        // 说明：设置了 max-height 之后，$txt.parent() 负责滚动处理\n        var $currentTxt = editor.useMaxHeight ? $txt.parent() : $txt;\n        var $currentTable;\n\n        // 用到的dom节点\n        var isRendered = false;\n        var $toolbar = $('<div class=\"txt-toolbar\"></div>');\n        var $triangle = $('<div class=\"tip-triangle\"></div>');\n        var $delete = $('<a href=\"#\"><i class=\"wangeditor-menu-img-trash-o\"></i></a>');\n        var $zoomSmall = $('<a href=\"#\"><i class=\"wangeditor-menu-img-search-minus\"></i></a>');\n        var $zoomBig = $('<a href=\"#\"><i class=\"wangeditor-menu-img-search-plus\"></i></a>');\n\n        // 渲染到页面\n        function render() {\n            if (isRendered) {\n                return;\n            }\n            \n            // 绑定事件\n            bindEvent();\n\n            // 拼接 渲染到页面上\n            $toolbar.append($triangle)\n                    .append($delete)\n                    .append($zoomSmall)\n                    .append($zoomBig);\n            editor.$editorContainer.append($toolbar);\n            isRendered = true;\n        }\n\n        // 绑定事件\n        function bindEvent() {\n            // 统一执行命令的方法\n            var commandFn;\n            function command(e, callback) {\n                // 执行命令之前，先存储html内容\n                html = $txt.html();\n                // 监控内容变化\n                var cb = function  () {\n                    if (callback) {\n                        callback();\n                    }\n                    if (html !== $txt.html()) {\n                        $txt.change();\n                    }\n                };\n                // 执行命令\n                if (commandFn) {\n                    editor.customCommand(e, commandFn, cb);\n                }\n            }\n\n            // 删除\n            $delete.click(function (e) {\n                commandFn = function () {\n                    $currentTable.remove();\n                };\n                command(e, function () {\n                    setTimeout(hide, 100);\n                });\n            });\n\n            // 放大\n            $zoomBig.click(function (e) {\n                commandFn = function () {\n                    $currentTable.css({\n                        width: '100%'\n                    });\n                };\n                command(e, function () {\n                    setTimeout(show);\n                });\n            });\n\n            // 缩小\n            $zoomSmall.click(function (e) {\n                commandFn = function () {\n                    $currentTable.css({\n                        width: 'auto'\n                    });\n                };\n                command(e, function () {\n                    setTimeout(show);\n                });\n            });\n        }\n\n        // 显示 toolbar\n        function show() {\n            if (editor._disabled) {\n                // 编辑器已经被禁用，则不让显示\n                return;\n            }\n            if ($currentTable == null) {\n                return;\n            }\n            $currentTable.addClass('clicked');\n            var tablePosition = $currentTable.position();\n            var tableTop = tablePosition.top;\n            var tableLeft = tablePosition.left;\n            var tableHeight = $currentTable.outerHeight();\n            var tableWidth = $currentTable.outerWidth();\n\n            // --- 定位 toolbar ---\n\n            // 计算初步结果\n            var top = tableTop + tableHeight;\n            var left = tableLeft;\n            var marginLeft = 0;\n\n            var txtTop = $currentTxt.position().top;\n            var txtHeight = $currentTxt.outerHeight();\n            if (top > (txtTop + txtHeight)) {\n                // top 不得超出编辑范围\n                top = txtTop + txtHeight;\n            }\n\n            // 显示（方便计算 margin）\n            $toolbar.show();\n\n            // 计算 margin\n            var width = $toolbar.outerWidth();\n            marginLeft = tableWidth / 2 - width / 2;\n\n            // 定位\n            $toolbar.css({\n                top: top + 5,\n                left: left,\n                'margin-left': marginLeft\n            });\n            // 如果定位太靠左了\n            if (marginLeft < 0) {\n                // 得到三角形的margin-left\n                $toolbar.css('margin-left', '0');\n                $triangle.hide();\n            } else {\n                $triangle.show();\n            }\n        }\n        \n        // 隐藏 toolbar\n        function hide() {\n            if ($currentTable == null) {\n                return;\n            }\n            $currentTable.removeClass('clicked');\n            $currentTable = null;\n            $toolbar.hide();\n        }\n\n        // click table 事件\n        $currentTxt.on('click', 'table', function (e) {\n            var $table = $(e.currentTarget);\n\n            // 渲染\n            render();\n\n            if ($currentTable && ($currentTable.get(0) === $table.get(0))) {\n                setTimeout(hide, 100);\n                return;\n            }\n\n            // 显示 toolbar\n            $currentTable = $table;\n            show();\n\n            // 阻止冒泡\n            e.preventDefault();\n            e.stopPropagation();\n            \n        }).on('click keydown scroll', function (e) {\n            setTimeout(hide, 100);\n        });\n        E.$body.on('click keydown scroll', function (e) {\n            setTimeout(hide, 100);\n        });\n    });\n\n});\n// 编辑器区域 img toolbar\n_e(function (E, $) {\n\n    if (E.userAgent.indexOf('MSIE 8') > 0) {\n        return;\n    }\n    \n    E.plugin(function () {\n        var editor = this;\n        var lang = editor.config.lang;\n        var txt = editor.txt;\n        var $txt = txt.$txt;\n        var html = '';\n        // 说明：设置了 max-height 之后，$txt.parent() 负责滚动处理\n        var $currentTxt = editor.useMaxHeight ? $txt.parent() : $txt;\n        var $editorContainer = editor.$editorContainer;\n        var $currentImg;\n        var currentLink = '';\n\n        // 用到的dom节点\n        var isRendered = false;\n        var $dragPoint = $('<div class=\"img-drag-point\"></div>');\n\n        var $toolbar = $('<div class=\"txt-toolbar\"></div>');\n        var $triangle = $('<div class=\"tip-triangle\"></div>');\n\n        var $menuContainer = $('<div></div>');\n        var $delete = $('<a href=\"#\"><i class=\"wangeditor-menu-img-trash-o\"></i></a>');\n        var $zoomSmall = $('<a href=\"#\"><i class=\"wangeditor-menu-img-search-minus\"></i></a>');\n        var $zoomBig = $('<a href=\"#\"><i class=\"wangeditor-menu-img-search-plus\"></i></a>');\n        // var $floatLeft = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-left\"></i></a>');\n        // var $noFloat = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-justify\"></i></a>');\n        // var $floatRight = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-right\"></i></a>');\n        var $alignLeft = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-left\"></i></a>');\n        var $alignCenter = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-center\"></i></a>');\n        var $alignRight = $('<a href=\"#\"><i class=\"wangeditor-menu-img-align-right\"></i></a>');\n        var $link = $('<a href=\"#\"><i class=\"wangeditor-menu-img-link\"></i></a>');\n        var $unLink = $('<a href=\"#\"><i class=\"wangeditor-menu-img-unlink\"></i></a>');\n\n        var $linkInputContainer = $('<div style=\"display:none;\"></div>');\n        var $linkInput = $('<input type=\"text\" style=\"height:26px; margin-left:10px; width:200px;\"/>');\n        var $linkBtnSubmit = $('<button class=\"right\">' + lang.submit + '</button>');\n        var $linkBtnCancel = $('<button class=\"right gray\">' + lang.cancel + '</button>');\n\n        // 记录是否正在拖拽\n        var isOnDrag = false;\n\n        // 获取 / 设置 链接\n        function imgLink(e, url) {\n            if (!$currentImg) {\n                return;\n            }\n            var commandFn;\n            var callback = function () {\n                // 及时保存currentLink\n                if (url != null) {\n                    currentLink = url;\n                }\n                if (html !== $txt.html()) {\n                    $txt.change();\n                }\n            };\n            var $link;\n            var inLink = false;\n            var $parent = $currentImg.parent();\n            if ($parent.get(0).nodeName.toLowerCase() === 'a') {\n                // 父元素就是图片链接\n                $link = $parent;\n                inLink = true;\n            } else {\n                // 父元素不是图片链接，则重新创建一个链接\n                $link = $('<a target=\"_blank\"></a>');\n            }\n\n            if (url == null) {\n                // url 无值，是获取链接\n                return $link.attr('href') || '';\n            } else if (url === '') {\n                // url 是空字符串，是取消链接\n                if (inLink) {\n                    commandFn = function () {\n                        $currentImg.unwrap();\n                    };\n                }\n            } else {\n                // url 有值，是设置链接\n                if (url === currentLink) {\n                    return;\n                }\n                commandFn = function () {\n                    $link.attr('href', url);\n\n                    if (!inLink) {\n                        // 当前图片未包含在链接中，则包含进来\n                        $currentImg.wrap($link);\n                    }\n                };\n            }\n\n            // 执行命令\n            if (commandFn) {\n                // 记录下执行命令之前的html内容\n                html = $txt.html();\n                // 执行命令\n                editor.customCommand(e, commandFn, callback);\n            }\n        }\n\n        // 渲染到页面\n        function render() {\n            if (isRendered) {\n                return;\n            }\n            \n            // 绑定事件\n            bindToolbarEvent();\n            bindDragEvent();\n\n            // 菜单放入 container\n            $menuContainer.append($delete)\n                            .append($zoomSmall)\n                            .append($zoomBig)\n                            // .append($floatLeft)\n                            // .append($noFloat)\n                            // .append($floatRight);\n                            .append($alignLeft)\n                            .append($alignCenter)\n                            .append($alignRight)\n                            .append($link)\n                            .append($unLink);\n\n            // 链接input放入container\n            $linkInputContainer.append($linkInput)\n                               .append($linkBtnCancel)\n                               .append($linkBtnSubmit);\n\n            // 拼接 渲染到页面上\n            $toolbar.append($triangle)\n                    .append($menuContainer)\n                    .append($linkInputContainer);\n                    \n            editor.$editorContainer.append($toolbar).append($dragPoint);\n            isRendered = true;\n        }\n\n        // 绑定toolbar事件\n        function bindToolbarEvent() {\n            // 统一执行命令的方法\n            var commandFn;\n            function customCommand(e, callback) {\n                var cb;\n                // 记录下执行命令之前的html内容\n                html = $txt.html();\n                cb = function () {\n                    if (callback) {\n                        callback();\n                    }\n                    if (html !== $txt.html()) {\n                        $txt.change();\n                    }\n                };\n                // 执行命令\n                if (commandFn) {\n                    editor.customCommand(e, commandFn, cb);\n                }\n            }\n\n            // 删除\n            $delete.click(function (e) {\n                // 删除之前先unlink\n                imgLink(e, '');\n\n                // 删除图片\n                commandFn = function () {\n                    $currentImg.remove();\n                };\n                customCommand(e, function () {\n                    setTimeout(hide, 100);\n                });\n            });\n\n            // 放大\n            $zoomBig.click(function (e) {\n                commandFn = function () {\n                    var img = $currentImg.get(0);\n                    var width = img.width;\n                    var height = img.height;\n                    width = width * 1.1;\n                    height = height * 1.1;\n\n                    $currentImg.css({\n                        width: width + 'px',\n                        height: height + 'px'\n                    });\n                };\n                customCommand(e, function () {\n                    setTimeout(show);\n                });\n            });\n\n            // 缩小\n            $zoomSmall.click(function (e) {\n                commandFn = function () {\n                    var img = $currentImg.get(0);\n                    var width = img.width;\n                    var height = img.height;\n                    width = width * 0.9;\n                    height = height * 0.9;\n\n                    $currentImg.css({\n                        width: width + 'px',\n                        height: height + 'px'\n                    });\n                };\n                customCommand(e, function () {\n                    setTimeout(show);\n                });\n            });\n\n            // // 左浮动\n            // $floatLeft.click(function (e) {\n            //     commandFn = function () {\n            //         $currentImg.css({\n            //             float: 'left'\n            //         });\n            //     };\n            //     customCommand(e, function () {\n            //         setTimeout(hide, 100);\n            //     });\n            // });\n\n            // alignLeft\n            $alignLeft.click(function (e) {\n                commandFn = function () {\n                    // 如果 img 增加了链接，那么 img.parent() 就是 a 标签，设置 align 没用的，因此必须找到 P 父节点来设置 align\n                    $currentImg.parents('p').css({\n                        'text-align': 'left'\n                    }).attr('align', 'left');\n                };\n                customCommand(e, function () {\n                    setTimeout(hide, 100);\n                });\n            });\n\n            // // 右浮动\n            // $floatRight.click(function (e) {\n            //     commandFn = function () {\n            //         $currentImg.css({\n            //             float: 'right'\n            //         });\n            //     };\n            //     customCommand(e, function () {\n            //         setTimeout(hide, 100);\n            //     });\n            // });\n\n            // alignRight\n            $alignRight.click(function (e) {\n                commandFn = function () {\n                    // 如果 img 增加了链接，那么 img.parent() 就是 a 标签，设置 align 没用的，因此必须找到 P 父节点来设置 align\n                    $currentImg.parents('p').css({\n                        'text-align': 'right'\n                    }).attr('align', 'right');\n                };\n                customCommand(e, function () {\n                    setTimeout(hide, 100);\n                });\n            });\n\n            // // 无浮动\n            // $noFloat.click(function (e) {\n            //     commandFn = function () {\n            //         $currentImg.css({\n            //             float: 'none'\n            //         });\n            //     };\n            //     customCommand(e, function () {\n            //         setTimeout(hide, 100);\n            //     });\n            // });\n\n            // alignCenter\n            $alignCenter.click(function (e) {\n                commandFn = function () {\n                    // 如果 img 增加了链接，那么 img.parent() 就是 a 标签，设置 align 没用的，因此必须找到 P 父节点来设置 align\n                    $currentImg.parents('p').css({\n                        'text-align': 'center'\n                    }).attr('align', 'center');\n                };\n                customCommand(e, function () {\n                    setTimeout(hide, 100);\n                });\n            });\n\n            // link\n            // 显示链接input\n            $link.click(function (e) {\n                e.preventDefault();\n\n                // 获取当前链接，并显示\n                currentLink = imgLink(e);\n                $linkInput.val(currentLink);\n\n                $menuContainer.hide();\n                $linkInputContainer.show();\n            });\n            // 设置链接\n            $linkBtnSubmit.click(function (e) {\n                e.preventDefault();\n\n                var url = $.trim($linkInput.val());\n                if (url) {\n                    // 设置链接，同时会自动更新 currentLink 的值\n                    imgLink(e, url);\n                }\n\n                // 隐藏 toolbar\n                setTimeout(hide);\n            });\n            // 取消设置链接\n            $linkBtnCancel.click(function (e) {\n                e.preventDefault();\n\n                // 重置链接 input\n                $linkInput.val(currentLink);\n\n                $menuContainer.show();\n                $linkInputContainer.hide();\n            });\n\n            // unlink\n            $unLink.click(function (e) {\n                e.preventDefault();\n\n                // 执行 unlink\n                imgLink(e, '');\n\n                // 隐藏 toolbar\n                setTimeout(hide);\n            });\n        }\n\n        // 绑定drag事件\n        function bindDragEvent() {\n            var _x, _y;\n            var dragMarginLeft, dragMarginTop;\n            var imgWidth, imgHeight;\n\n            function mousemove (e) {\n                var diffX, diffY;\n\n                // 计算差额\n                diffX = e.pageX - _x;\n                diffY = e.pageY - _y;\n\n                // --------- 计算拖拽点的位置 ---------\n                var currentDragMarginLeft = dragMarginLeft + diffX;\n                var currentDragMarginTop = dragMarginTop + diffY;\n                $dragPoint.css({\n                    'margin-left': currentDragMarginLeft,\n                    'margin-top': currentDragMarginTop\n                });\n\n                // --------- 计算图片的大小 ---------\n                var currentImgWidth = imgWidth + diffX;\n                var currentImggHeight = imgHeight + diffY;\n                $currentImg && $currentImg.css({\n                    width: currentImgWidth,\n                    height: currentImggHeight\n                });\n            }\n\n            $dragPoint.on('mousedown', function(e){\n                if (!$currentImg) {\n                    return;\n                }\n                // 当前鼠标位置\n                _x = e.pageX;\n                _y = e.pageY;\n\n                // 当前拖拽点的位置\n                dragMarginLeft = parseFloat($dragPoint.css('margin-left'), 10);\n                dragMarginTop = parseFloat($dragPoint.css('margin-top'), 10);\n\n                // 当前图片的大小\n                imgWidth = $currentImg.width();\n                imgHeight = $currentImg.height();\n\n                // 隐藏 $toolbar\n                $toolbar.hide();\n\n                // 绑定计算事件\n                E.$document.on('mousemove._dragResizeImg', mousemove);\n                E.$document.on('mouseup._dragResizeImg', function (e) {\n                    // 取消绑定\n                    E.$document.off('mousemove._dragResizeImg');\n                    E.$document.off('mouseup._dragResizeImg');\n\n                    // 隐藏，并还原拖拽点的位置\n                    hide();\n                    $dragPoint.css({\n                        'margin-left': dragMarginLeft,\n                        'margin-top': dragMarginTop\n                    });\n\n                    // 记录\n                    isOnDrag = false;\n                });\n\n                // 记录\n                isOnDrag = true;\n            });\n        }\n\n        // 显示 toolbar\n        function show() {\n            if (editor._disabled) {\n                // 编辑器已经被禁用，则不让显示\n                return;\n            }\n            if ($currentImg == null) {\n                return;\n            }\n            $currentImg.addClass('clicked');\n            var imgPosition = $currentImg.position();\n            var imgTop = imgPosition.top;\n            var imgLeft = imgPosition.left;\n            var imgHeight = $currentImg.outerHeight();\n            var imgWidth = $currentImg.outerWidth();\n\n\n            // --- 定位 dragpoint ---\n            $dragPoint.css({\n                top: imgTop + imgHeight,\n                left: imgLeft + imgWidth\n            });\n\n            // --- 定位 toolbar ---\n\n            // 计算初步结果\n            var top = imgTop + imgHeight;\n            var left = imgLeft;\n            var marginLeft = 0;\n\n            var txtTop = $currentTxt.position().top;\n            var txtHeight = $currentTxt.outerHeight();\n            if (top > (txtTop + txtHeight)) {\n                // top 不得超出编辑范围\n                top = txtTop + txtHeight;\n            } else {\n                // top 超出编辑范围，dragPoint就不显示了\n                $dragPoint.show();\n            }\n\n            // 显示（方便计算 margin）\n            $toolbar.show();\n\n            // 计算 margin\n            var width = $toolbar.outerWidth();\n            marginLeft = imgWidth / 2 - width / 2;\n\n            // 定位\n            $toolbar.css({\n                top: top + 5,\n                left: left,\n                'margin-left': marginLeft\n            });\n            // 如果定位太靠左了\n            if (marginLeft < 0) {\n                // 得到三角形的margin-left\n                $toolbar.css('margin-left', '0');\n                $triangle.hide();\n            } else {\n                $triangle.show();\n            }\n\n            // disable 菜单\n            editor.disableMenusExcept();\n        }\n        \n        // 隐藏 toolbar\n        function hide() {\n            if ($currentImg == null) {\n                return;\n            }\n            $currentImg.removeClass('clicked');\n            $currentImg = null;\n\n            $toolbar.hide();\n            $dragPoint.hide();\n\n            // enable 菜单\n            editor.enableMenusExcept();\n        }\n\n        // 判断img是否是一个表情\n        function isEmotion(imgSrc) {\n            var result = false;\n            if (!editor.emotionUrls) {\n                return result;\n            }\n            $.each(editor.emotionUrls, function (index, url) {\n                var flag = false;\n                if (imgSrc === url) {\n                    result = true;\n                    flag = true;\n                }\n                if (flag) {\n                    return false;  // break 循环\n                }\n            });\n            return result;\n        }\n\n        // click img 事件\n        $currentTxt.on('mousedown', 'img', function (e) {\n            e.preventDefault();\n        }).on('click', 'img', function (e) {\n            var $img = $(e.currentTarget);\n            var src = $img.attr('src');\n\n            if (!src || isEmotion(src)) {\n                // 是一个表情图标\n                return;\n            }\n\n            // ---------- 不是表情图标 ---------- \n\n            // 渲染\n            render();\n\n            if ($currentImg && ($currentImg.get(0) === $img.get(0))) {\n                setTimeout(hide, 100);\n                return;\n            }\n\n            // 显示 toolbar\n            $currentImg = $img;\n            show();\n\n            // 默认显示menuContainer，其他默认隐藏\n            $menuContainer.show();\n            $linkInputContainer.hide();\n\n            // 阻止冒泡\n            e.preventDefault();\n            e.stopPropagation();\n            \n        }).on('click keydown scroll', function (e) {\n            if (!isOnDrag) {\n                setTimeout(hide, 100);\n            }\n        });\n\n    });\n\n});\n// 编辑区域 link toolbar\n_e(function (E, $) {\n    E.plugin(function () {\n        var editor = this;\n        var lang = editor.config.lang;\n        var $txt = editor.txt.$txt;\n\n        // 当前命中的链接\n        var $currentLink;\n\n        var $toolbar = $('<div class=\"txt-toolbar\"></div>');\n        var $triangle = $('<div class=\"tip-triangle\"></div>');\n        var $triggerLink = $('<a href=\"#\" target=\"_blank\"><i class=\"wangeditor-menu-img-link\"></i> ' + lang.openLink + '</a>');\n        var isRendered;\n\n        // 记录当前的显示/隐藏状态\n        var isShow = false;\n\n        var showTimeoutId, hideTimeoutId;\n        var showTimeoutIdByToolbar, hideTimeoutIdByToolbar;\n\n        // 渲染 dom\n        function render() {\n            if (isRendered) {\n                return;\n            }\n\n            $toolbar.append($triangle)\n                    .append($triggerLink);\n\n            editor.$editorContainer.append($toolbar);\n\n            isRendered = true;\n        }\n\n        // 定位\n        function setPosition() {\n            if (!$currentLink) {\n                return;\n            }\n\n            var position = $currentLink.position();\n            var left = position.left;\n            var top = position.top;\n            var height = $currentLink.height();\n\n            // 初步计算top值\n            var topResult = top + height + 5;\n\n            // 判断 toolbar 是否超过了编辑器区域的下边界\n            var menuHeight = editor.menuContainer.height();\n            var txtHeight = editor.txt.$txt.outerHeight();\n            if (topResult > menuHeight + txtHeight) {\n                topResult = menuHeight + txtHeight + 5;\n            }\n\n            // 最终设置\n            $toolbar.css({\n                top: topResult,\n                left: left\n            });\n        }\n\n        // 显示 toolbar\n        function show() {\n            if (isShow) {\n                return;\n            }\n\n            if (!$currentLink) {\n                return;\n            }\n\n            render();\n\n            $toolbar.show();\n\n            // 设置链接\n            var href = $currentLink.attr('href');\n            $triggerLink.attr('href', href);\n\n            // 定位\n            setPosition();\n\n            isShow = true;\n        }\n\n        // 隐藏 toolbar\n        function hide() {\n            if (!isShow) {\n                return;\n            }\n\n            if (!$currentLink) {\n                return;\n            }\n\n            $toolbar.hide();\n            isShow = false;\n        }\n\n        // $txt 绑定事件\n        $txt.on('mouseenter', 'a', function (e) {\n            // 延时 500ms 显示toolbar\n            if (showTimeoutId) {\n                clearTimeout(showTimeoutId);\n            }\n            showTimeoutId = setTimeout(function () {\n                var a = e.currentTarget;\n                var $a = $(a);\n                $currentLink = $a;\n\n                var $img = $a.children('img');\n                if ($img.length) {\n                    // 该链接下包含一个图片\n\n                    // 图片点击时，隐藏toolbar\n                    $img.click(function (e) {\n                        hide();\n                    });\n\n                    if ($img.hasClass('clicked')) {\n                        // 图片还处于clicked状态，则不显示toolbar\n                        return;\n                    }\n                }\n\n                // 显示toolbar\n                show();\n            }, 500);\n        }).on('mouseleave', 'a', function (e) {\n            // 延时 500ms 隐藏toolbar\n            if (hideTimeoutId) {\n                clearTimeout(hideTimeoutId);\n            }\n            hideTimeoutId = setTimeout(hide, 500);\n        }).on('click keydown scroll', function (e) {\n            setTimeout(hide, 100);\n        });\n        // $toolbar 绑定事件\n        $toolbar.on('mouseenter', function (e) {\n            // 先中断掉 $txt.mouseleave 导致的隐藏\n            if (hideTimeoutId) {\n                clearTimeout(hideTimeoutId);\n            }\n        }).on('mouseleave', function (e) {\n            // 延时 500ms 显示toolbar\n            if (showTimeoutIdByToolbar) {\n                clearTimeout(showTimeoutIdByToolbar);\n            }\n            showTimeoutIdByToolbar = setTimeout(hide, 500);\n        });\n    });\n});\n// menu吸顶\n_e(function (E, $) {\n\n    E.plugin(function () {\n        var editor = this;\n        var menuFixed = editor.config.menuFixed;\n        if (menuFixed === false || typeof menuFixed !== 'number') {\n            // 没有配置菜单吸顶\n            return;\n        }\n        var bodyMarginTop = parseFloat(E.$body.css('margin-top'), 10);\n        if (isNaN(bodyMarginTop)) {\n            bodyMarginTop = 0;\n        }\n\n        var $editorContainer = editor.$editorContainer;\n        var editorTop = $editorContainer.offset().top;\n        var editorHeight = $editorContainer.outerHeight();\n        \n        var $menuContainer = editor.menuContainer.$menuContainer;\n        var menuCssPosition = $menuContainer.css('position');\n        var menuCssTop = $menuContainer.css('top');\n        var menuTop = $menuContainer.offset().top;\n        var menuHeight = $menuContainer.outerHeight();\n        \n        var $txt = editor.txt.$txt;\n\n        E.$window.scroll(function () {\n            //全屏模式不支持\n            if (editor.isFullScreen) {\n                return;\n            }\n\n            var sTop = E.$window.scrollTop();\n\n            // 需要重新计算宽度，因为浏览器可能此时出现滚动条\n            var menuWidth = $menuContainer.width();\n\n            // 如果 menuTop === 0 说明此前编辑器一直隐藏，后来显示出来了，要重新计算相关数据\n            if (menuTop === 0) {\n                menuTop = $menuContainer.offset().top;\n                editorTop = $editorContainer.offset().top;\n                editorHeight = $editorContainer.outerHeight();\n                menuHeight = $menuContainer.outerHeight();\n            }\n\n            if (sTop >= menuTop && sTop + menuFixed + menuHeight + 30 < editorTop + editorHeight) {\n                // 吸顶\n                $menuContainer.css({\n                    position: 'fixed',\n                    top: menuFixed\n                });\n\n                // 固定宽度\n                $menuContainer.width(menuWidth);\n\n                // 增加body margin-top\n                E.$body.css({\n                    'margin-top': bodyMarginTop + menuHeight\n                });\n\n                // 记录\n                if (!editor._isMenufixed) {\n                    editor._isMenufixed = true;\n                }\n            } else {\n                // 取消吸顶\n                $menuContainer.css({\n                    position: menuCssPosition,\n                    top: menuCssTop\n                });\n\n                // 取消宽度固定\n                $menuContainer.css('width', '100%');\n\n                // 还原 body margin-top\n                E.$body.css({\n                    'margin-top': bodyMarginTop\n                });\n\n                // 撤销记录\n                if (editor._isMenufixed) {\n                    editor._isMenufixed = false;\n                }\n            }\n        });\n    });\n\n});\n// 缩进 菜单插件\n_e(function (E, $) {\n\n    // 用 createMenu 方法创建菜单\n    E.createMenu(function (check) {\n\n        // 定义菜单id，不要和其他菜单id重复。编辑器自带的所有菜单id，可通过『参数配置-自定义菜单』一节查看\n        var menuId = 'indent';\n\n        // check将检查菜单配置（『参数配置-自定义菜单』一节描述）中是否该菜单id，如果没有，则忽略下面的代码。\n        if (!check(menuId)) {\n            return;\n        }\n\n        // this 指向 editor 对象自身\n        var editor = this;\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,  // 编辑器对象\n            id: menuId,  // 菜单id\n            title: '缩进', // 菜单标题\n\n            // 正常状态和选中装下的dom对象，样式需要自定义\n            $domNormal: $('<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-indent-left\"></i></a>'),\n            $domSelected: $('<a href=\"#\" tabindex=\"-1\" class=\"selected\"><i class=\"wangeditor-menu-img-indent-left\"></i></a>')\n        });\n\n        // 菜单正常状态下，点击将触发该事件\n        menu.clickEvent = function (e) {\n            var elem = editor.getRangeElem();\n            var p = editor.getSelfOrParentByName(elem, 'p');\n            var $p;\n\n            if (!p) {\n                // 未找到 p 元素，则忽略\n                return e.preventDefault();\n            }\n            $p = $(p);\n\n            // 使用自定义命令\n            function commandFn() {\n                $p.css('text-indent', '2em');\n            }\n            editor.customCommand(e, commandFn);\n        };\n\n        // 菜单选中状态下，点击将触发该事件\n        menu.clickEventSelected = function (e) {\n            var elem = editor.getRangeElem();\n            var p = editor.getSelfOrParentByName(elem, 'p');\n            var $p;\n\n            if (!p) {\n                // 未找到 p 元素，则忽略\n                return e.preventDefault();\n            }\n            $p = $(p);\n\n            // 使用自定义命令\n            function commandFn() {\n                $p.css('text-indent', '0');\n            }\n            editor.customCommand(e, commandFn);\n        };\n\n        // 根据当前选区，自定义更新菜单的选中状态或者正常状态\n        menu.updateSelectedEvent = function () {\n            // 获取当前选区所在的父元素\n            var elem = editor.getRangeElem();\n            var p = editor.getSelfOrParentByName(elem, 'p');\n            var $p;\n            var indent;\n\n            if (!p) {\n                // 未找到 p 元素，则标记为未处于选中状态\n                return false;\n            }\n            $p = $(p);\n            indent = $p.css('text-indent');\n\n            if (!indent || indent === '0px') {\n                // 得到的p，text-indent 属性是 0，则标记为未处于选中状态\n                return false;\n            }\n\n            // 找到 p 元素，并且 text-indent 不是 0，则标记为选中状态\n            return true;\n        };\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n    });\n\n});\n// 行高 菜单插件\n_e(function (E, $) {\n\n    // 用 createMenu 方法创建菜单\n    E.createMenu(function (check) {\n\n        // 定义菜单id，不要和其他菜单id重复。编辑器自带的所有菜单id，可通过『参数配置-自定义菜单』一节查看\n        var menuId = 'lineheight';\n\n        // check将检查菜单配置（『参数配置-自定义菜单』一节描述）中是否该菜单id，如果没有，则忽略下面的代码。\n        if (!check(menuId)) {\n            return;\n        }\n\n        // this 指向 editor 对象自身\n        var editor = this;\n\n        // 由于浏览器自身不支持 lineHeight 命令，因此要做一个hook\n        editor.commandHooks.lineHeight = function (value) {\n            var rangeElem = editor.getRangeElem();\n            var targetElem = editor.getSelfOrParentByName(rangeElem, 'p,h1,h2,h3,h4,h5,pre');\n            if (!targetElem) {\n                return;\n            }\n            $(targetElem).css('line-height', value + '');\n        };\n\n        // 创建 menu 对象\n        var menu = new E.Menu({\n            editor: editor,  // 编辑器对象\n            id: menuId,  // 菜单id\n            title: '行高', // 菜单标题\n            commandName: 'lineHeight', // 命令名称\n\n            // 正常状态和选中装下的dom对象，样式需要自定义\n            $domNormal: $('<a href=\"#\" tabindex=\"-1\"><i class=\"wangeditor-menu-img-arrows-v\"></i></a>'),\n            $domSelected: $('<a href=\"#\" tabindex=\"-1\" class=\"selected\"><i class=\"wangeditor-menu-img-arrows-v\"></i></a>')\n        });\n\n        // 数据源\n        var data  = {\n            // 格式： 'value' : 'title'\n            '1.0': '1.0倍',\n            '1.5': '1.5倍',\n            '1.8': '1.8倍',\n            '2.0': '2.0倍',\n            '2.5': '2.5倍',\n            '3.0': '3.0倍'\n        };\n\n        // 为menu创建droplist对象\n        var tpl = '<span style=\"line-height:{#commandValue}\">{#title}</span>';\n        menu.dropList = new E.DropList(editor, menu, {\n            data: data,  // 传入数据源\n            tpl: tpl  // 传入模板\n        });\n\n        // 增加到editor对象中\n        editor.menus[menuId] = menu;\n\n    });\n\n});\n// 自定义上传\n_e(function (E, $) {\n\n    E.plugin(function () {\n\n        var editor = this;\n        var customUpload = editor.config.customUpload;\n        if (!customUpload) {\n            return;\n        } else if (editor.config.uploadImgUrl) {\n            alert('自定义上传无效，详看浏览器日志console.log');\n            E.error('已经配置了 uploadImgUrl ，就不能再配置 customUpload ，两者冲突。将导致自定义上传无效。');\n            return;\n        }\n\n        var $uploadContent = editor.$uploadContent;\n        if (!$uploadContent) {\n            E.error('自定义上传，无法获取 editor.$uploadContent');\n        }\n\n        // UI\n        var $uploadIcon = $('<div class=\"upload-icon-container\"><i class=\"wangeditor-menu-img-upload\"></i></div>');\n        $uploadContent.append($uploadIcon);\n\n        // 设置id，并暴露\n        var btnId = 'upload' + E.random();\n        var containerId = 'upload' + E.random();\n        $uploadIcon.attr('id', btnId);\n        $uploadContent.attr('id', containerId);\n\n        editor.customUploadBtnId = btnId;\n        editor.customUploadContainerId = containerId;\n    });\n\n});\n// 版权提示\n_e(function (E, $) {\n    E.info('本页面富文本编辑器由 wangEditor 提供 http://wangeditor.github.io/ ');\n});\n    \n    // 最终返回wangEditor构造函数\n    return window.wangEditor;\n});"
  },
  {
    "path": "public/assets/dashboard/webupload/style.css",
    "content": "#uploader{\n\tposition: relative;\n    \n}\n#uploader .queueList {\n    margin: 20px;\n}\n\n#uploader .placeholder {\n    border: 3px dashed #e6e6e6;\n    min-height: 350px;\n    padding-top: 158px;\n    text-align: center;\n    background: url(../images/image.png) center 93px no-repeat;\n    color: #cccccc;\n    font-size: 18px;\n    position: relative;\n}\n\n#uploader .placeholder .webuploader-pick {\n    font-size: 18px;\n    background: #00b7ee;\n    border-radius: 3px;\n    line-height: 44px;\n    padding: 0 30px;\n    color: #fff;\n    display: inline-block;\n    margin: 20px auto;\n    cursor: pointer;\n    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1);\n}\n\n#uploader .placeholder .webuploader-pick-hover {\n    background: #00a2d4;\n}\n\n#uploader .placeholder .flashTip {\n    color: #666666;\n    font-size: 12px;\n    position: absolute;\n    width: 100%;\n    text-align: center;\n    bottom: 20px;\n}\n#uploader .placeholder .flashTip a {\n    color: #0785d1;\n    text-decoration: none;\n}\n#uploader .placeholder .flashTip a:hover {\n    text-decoration: underline;\n}\n\n#uploader .placeholder.webuploader-dnd-over {\n    border-color: #999999;\n}\n\n#uploader .placeholder.webuploader-dnd-over.webuploader-dnd-denied {\n    border-color: red;\n}\n\n#uploader .filelist {\n    list-style: none;\n    margin-top: 10px;\n    padding: 0;\n}\n\n#uploader .filelist:after {\n    content: '';\n    display: block;\n    width: 0;\n    height: 0;\n    overflow: hidden;\n    clear: both;\n}\n\n#uploader .filelist li {\n    width: 110px;\n    height: 110px;\n    background: url(../images/bg.png) no-repeat;\n    text-align: center;\n    margin: 0 8px 20px 0;\n    position: relative;\n    display: inline;\n    float: left;\n    overflow: hidden;\n    font-size: 12px;\n}\n\n#uploader .filelist li p.log {\n    position: relative;\n    top: -45px;\n}\n\n#uploader .filelist li p.title {\n    position: absolute;\n    top: 0;\n    left: 0;\n    width: 100%;\n    overflow: hidden;\n    white-space: nowrap;\n    text-overflow : ellipsis;\n    top: 5px;\n    text-indent: 5px;\n    text-align: left;\n}\n\n#uploader .filelist li p.progress {\n    position: absolute;\n    width: 100%;\n    bottom: 0;\n    left: 0;\n    height: 8px;\n\tbackground-color:transparent;\n\tmargin-bottom:0;\n    overflow: hidden;\n    z-index: 50;\n}\n#uploader .filelist li p.progress span {\n    display: none;\n    overflow: hidden;\n    width: 0;\n    height: 100%;\n    background: #1483d8 url(../images/progress.png) repeat-x;\n\n    -webit-transition: width 200ms linear;\n    -moz-transition: width 200ms linear;\n    -o-transition: width 200ms linear;\n    -ms-transition: width 200ms linear;\n    transition: width 200ms linear;\n\n    -webkit-animation: progressmove 2s linear infinite;\n    -moz-animation: progressmove 2s linear infinite;\n    -o-animation: progressmove 2s linear infinite;\n    -ms-animation: progressmove 2s linear infinite;\n    animation: progressmove 2s linear infinite;\n\n    -webkit-transform: translateZ(0);\n}\n\n@-webkit-keyframes progressmove {\n    0% {\n       background-position: 0 0;\n    }\n    100% {\n       background-position: 17px 0;\n    }\n}\n@-moz-keyframes progressmove {\n    0% {\n       background-position: 0 0;\n    }\n    100% {\n       background-position: 17px 0;\n    }\n}\n@keyframes progressmove {\n    0% {\n       background-position: 0 0;\n    }\n    100% {\n       background-position: 17px 0;\n    }\n}\n\n#uploader .filelist li p.imgWrap {\n    position: relative;\n    z-index: 2;\n    line-height: 110px;\n    vertical-align: middle;\n    overflow: hidden;\n    width: 110px;\n    height: 110px;\n\n    -webkit-transform-origin: 50% 50%;\n    -moz-transform-origin: 50% 50%;\n    -o-transform-origin: 50% 50%;\n    -ms-transform-origin: 50% 50%;\n    transform-origin: 50% 50%;\n\n    -webit-transition: 200ms ease-out;\n    -moz-transition: 200ms ease-out;\n    -o-transition: 200ms ease-out;\n    -ms-transition: 200ms ease-out;\n    transition: 200ms ease-out;\n}\n\n#uploader .filelist li img {\n    width: 100%;\n}\n\n#uploader .filelist li p.error {\n    background: #f43838;\n    color: #fff;\n    position: absolute;\n    bottom: 0;\n    left: 0;\n    height: 28px;\n    line-height: 28px;\n    width: 100%;\n    z-index: 100;\n}\n\n#uploader .filelist li .success {\n    display: block;\n    position: absolute;\n    left: 0;\n    bottom: 0;\n    height: 40px;\n    width: 100%;\n    z-index: 200;\n    background: url(../images/success.png) no-repeat right bottom;\n}\n\n#uploader .filelist div.file-panel {\n    position: absolute;\n    height: 0;\n    filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#80000000', endColorstr='#80000000')\\0;\n    background: rgba( 0, 0, 0, 0.5 );\n    width: 100%;\n    top: 0;\n    left: 0;\n    overflow: hidden;\n    z-index: 300;\n}\n\n#uploader .filelist div.file-panel span {\n    width: 24px;\n    height: 24px;\n    display: inline;\n    float: right;\n    text-indent: -9999px;\n    overflow: hidden;\n    background: url(../images/icons.png) no-repeat;\n    margin: 5px 1px 1px;\n    cursor: pointer;\n}\n\n#uploader .filelist div.file-panel span.rotateLeft {\n    background-position: 0 -24px;\n}\n#uploader .filelist div.file-panel span.rotateLeft:hover {\n    background-position: 0 0;\n}\n\n#uploader .filelist div.file-panel span.rotateRight {\n    background-position: -24px -24px;\n}\n#uploader .filelist div.file-panel span.rotateRight:hover {\n    background-position: -24px 0;\n}\n\n#uploader .filelist div.file-panel span.cancel {\n    background-position: -48px -24px;\n}\n#uploader .filelist div.file-panel span.cancel:hover {\n    background-position: -48px 0;\n}\n\n#uploader .statusBar {\n    height: 63px;\n    border-top: 1px solid #dadada;\n    padding: 0 20px;\n    line-height: 63px;\n    vertical-align: middle;\n    position: relative;\n}\n\n#uploader .statusBar .progress {\n    border: 1px solid #1483d8;\n    width: 198px;\n    background: #fff;\n    height: 18px;\n    position: relative;\n    display: inline-block;\n    text-align: center;\n    line-height: 20px;\n    color: #6dbfff;\n    position: relative;\n    margin-right: 10px;\n}\n#uploader .statusBar .progress span.percentage {\n    width: 0;\n    height: 100%;\n    left: 0;\n    top: 0;\n    background: #1483d8;\n    position: absolute;\n}\n#uploader .statusBar .progress span.text {\n    position: relative;\n    z-index: 10;\n}\n\n#uploader .statusBar .info {\n    display: inline-block;\n    font-size: 14px;\n    color: #666666;\n}\n\n#uploader .statusBar .btns {\n    position: absolute;\n    top: 10px;\n    right: 20px;\n    line-height: 40px;\n}\n\n#filePicker2 {\n    display: inline-block;\n    float: left;\n}\n\n#uploader .statusBar .btns .webuploader-pick,\n#uploader .statusBar .btns .uploadBtn,\n#uploader .statusBar .btns .uploadBtn.state-uploading,\n#uploader .statusBar .btns .uploadBtn.state-paused {\n    background: #ffffff;\n    border: 1px solid #cfcfcf;\n    color: #565656;\n    padding: 0 18px;\n    display: inline-block;\n    border-radius: 3px;\n    margin-left: 10px;\n    cursor: pointer;\n    font-size: 14px;\n    float: left;\n}\n#uploader .statusBar .btns .webuploader-pick-hover,\n#uploader .statusBar .btns .uploadBtn:hover,\n#uploader .statusBar .btns .uploadBtn.state-uploading:hover,\n#uploader .statusBar .btns .uploadBtn.state-paused:hover {\n    background: #f0f0f0;\n}\n\n#uploader .statusBar .btns .uploadBtn {\n    background: #00b7ee;\n    color: #fff;\n    border-color: transparent;\n}\n#uploader .statusBar .btns .uploadBtn:hover {\n    background: #00a2d4;\n}\n\n#uploader .statusBar .btns .uploadBtn.disabled {\n    pointer-events: none;\n    opacity: 0.6;\n}\n.item{padding-bottom: 10px; line-height: 22px}"
  },
  {
    "path": "public/assets/dashboard/webupload/upload.js",
    "content": "(function ($) {\n    // 当domReady的时候开始初始化\n    $(function () {\n        var $wrap = $('#uploader'),\n                // 图片容器\n                $queue = $('<ul class=\"filelist\"></ul>')\n                .appendTo($wrap.find('.queueList')),\n                // 状态栏，包括进度和控制按钮\n                $statusBar = $wrap.find('.statusBar'),\n                // 文件总体选择信息。\n                $info = $statusBar.find('.info'),\n                // 上传按钮\n                $upload = $wrap.find('.uploadBtn'),\n                // 没选择文件之前的内容。\n                $placeHolder = $wrap.find('.placeholder'),\n                $progress = $statusBar.find('.progress').hide(),\n                // 添加的文件数量\n                fileCount = 0,\n                // 添加的文件总大小\n                fileSize = 0,\n                // 优化retina, 在retina下这个值是2\n                ratio = window.devicePixelRatio || 1,\n                // 缩略图大小\n                thumbnailWidth = 110 * ratio,\n                thumbnailHeight = 110 * ratio,\n                // 可能有pedding, ready, uploading, confirm, done.\n                state = 'pedding',\n                // 所有文件的进度信息，key为file id\n                percentages = {},\n                // 判断浏览器是否支持图片的base64\n                isSupportBase64 = (function () {\n                    var data = new Image();\n                    var support = true;\n                    data.onload = data.onerror = function () {\n                        if (this.width != 1 || this.height != 1) {\n                            support = false;\n                        }\n                    }\n                    data.src = \"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\";\n                    return support;\n                })(),\n                // 检测是否已经安装flash，检测flash的版本\n                flashVersion = (function () {\n                    var version;\n\n                    try {\n                        version = navigator.plugins[ 'Shockwave Flash' ];\n                        version = version.description;\n                    } catch (ex) {\n                        try {\n                            version = new ActiveXObject('ShockwaveFlash.ShockwaveFlash')\n                                    .GetVariable('$version');\n                        } catch (ex2) {\n                            version = '0.0';\n                        }\n                    }\n                    version = version.match(/\\d+/g);\n                    return parseFloat(version[ 0 ] + '.' + version[ 1 ], 10);\n                })(),\n                supportTransition = (function () {\n                    var s = document.createElement('p').style,\n                            r = 'transition' in s ||\n                            'WebkitTransition' in s ||\n                            'MozTransition' in s ||\n                            'msTransition' in s ||\n                            'OTransition' in s;\n                    s = null;\n                    return r;\n                })(),\n                // WebUploader实例\n                uploader;\n\n        if (!WebUploader.Uploader.support('flash') && WebUploader.browser.ie) {\n\n            // flash 安装了但是版本过低。\n            if (flashVersion) {\n                (function (container) {\n                    window['expressinstallcallback'] = function (state) {\n                        switch (state) {\n                            case 'Download.Cancelled':\n                                alert('您取消了更新！')\n                                break;\n\n                            case 'Download.Failed':\n                                alert('安装失败')\n                                break;\n\n                            default:\n                                alert('安装已成功，请刷新！');\n                                break;\n                        }\n                        delete window['expressinstallcallback'];\n                    };\n\n                    var swf = './expressInstall.swf';\n                    // insert flash object\n                    var html = '<object type=\"application/' +\n                            'x-shockwave-flash\" data=\"' + swf + '\" ';\n\n                    if (WebUploader.browser.ie) {\n                        html += 'classid=\"clsid:d27cdb6e-ae6d-11cf-96b8-444553540000\" ';\n                    }\n\n                    html += 'width=\"100%\" height=\"100%\" style=\"outline:0\">' +\n                            '<param name=\"movie\" value=\"' + swf + '\" />' +\n                            '<param name=\"wmode\" value=\"transparent\" />' +\n                            '<param name=\"allowscriptaccess\" value=\"always\" />' +\n                            '</object>';\n\n                    container.html(html);\n\n                })($wrap);\n\n                // 压根就没有安转。\n            } else {\n                $wrap.html('<a href=\"http://www.adobe.com/go/getflashplayer\" target=\"_blank\" border=\"0\"><img alt=\"get flash player\" src=\"http://www.adobe.com/macromedia/style_guide/images/160x41_Get_Flash_Player.jpg\" /></a>');\n            }\n\n            return;\n        } else if (!WebUploader.Uploader.support()) {\n            alert('Web Uploader 不支持您的浏览器！');\n            return;\n        }\n\n        // 实例化\n        uploader = WebUploader.create({\n            pick: {\n                id: '#filePicker',\n                label: '点击选择图片'\n            },\n            formData: {\n                uid: 123\n            },\n            dnd: '#dndArea',\n            paste: '#uploader',\n            swf: 'js/Uploader.swf',\n            chunked: false,\n            chunkSize: 512 * 1024,\n            server: 'upload.php',\n            // runtimeOrder: 'flash',\n\n            // accept: {\n            //     title: 'Images',\n            //     extensions: 'gif,jpg,jpeg,bmp,png',\n            //     mimeTypes: 'image/*'\n            // },\n\n            // 禁掉全局的拖拽功能。这样不会出现图片拖进页面的时候，把图片打开。\n            disableGlobalDnd: true,\n            fileNumLimit: 10,\n            fileSizeLimit: 200 * 1024 * 1024, // 200 M\n            fileSingleSizeLimit: 50 * 1024 * 1024    // 50 M\n        });\n\n        // 拖拽时不接受 js, txt 文件。\n        uploader.on('dndAccept', function (items) {\n            var denied = false,\n                    len = items.length,\n                    i = 0,\n                    // 修改js类型\n                    unAllowed = 'text/plain;application/javascript ';\n\n            for (; i < len; i++) {\n                // 如果在列表里面\n                if (~unAllowed.indexOf(items[ i ].type)) {\n                    denied = true;\n                    break;\n                }\n            }\n\n            return !denied;\n        });\n\n        // uploader.on('filesQueued', function() {\n        //     uploader.sort(function( a, b ) {\n        //         if ( a.name < b.name )\n        //           return -1;\n        //         if ( a.name > b.name )\n        //           return 1;\n        //         return 0;\n        //     });\n        // });\n\n        // 添加“添加文件”的按钮，\n        uploader.addButton({\n            id: '#filePicker2',\n            label: '继续添加'\n        });\n\n        uploader.on('ready', function () {\n            window.uploader = uploader;\n        });\n\n        // 当有文件添加进来时执行，负责view的创建\n        function addFile(file) {\n            var $li = $('<li id=\"' + file.id + '\">' +\n                    '<p class=\"title\">' + file.name + '</p>' +\n                    '<p class=\"imgWrap\"></p>' +\n                    '<p class=\"progress\"><span></span></p>' +\n                    '</li>'),\n                    $btns = $('<div class=\"file-panel\">' +\n                            '<span class=\"cancel\">删除</span>' +\n                            '<span class=\"rotateRight\">向右旋转</span>' +\n                            '<span class=\"rotateLeft\">向左旋转</span></div>').appendTo($li),\n                    $prgress = $li.find('p.progress span'),\n                    $wrap = $li.find('p.imgWrap'),\n                    $info = $('<p class=\"error\"></p>'),\n                    showError = function (code) {\n                        switch (code) {\n                            case 'exceed_size':\n                                text = '文件大小超出';\n                                break;\n\n                            case 'interrupt':\n                                text = '上传暂停';\n                                break;\n\n                            default:\n                                text = '上传失败，请重试';\n                                break;\n                        }\n\n                        $info.text(text).appendTo($li);\n                    };\n\n            if (file.getStatus() === 'invalid') {\n                showError(file.statusText);\n            } else {\n                // @todo lazyload\n                $wrap.text('预览中');\n                uploader.makeThumb(file, function (error, src) {\n                    var img;\n\n                    if (error) {\n                        $wrap.text('不能预览');\n                        return;\n                    }\n\n                    if (isSupportBase64) {\n                        img = $('<img src=\"' + src + '\">');\n                        $wrap.empty().append(img);\n                    } else {\n                        $.ajax('../preview.php', {\n                            method: 'POST',\n                            data: src,\n                            dataType: 'json'\n                        }).done(function (response) {\n                            if (response.result) {\n                                img = $('<img src=\"' + response.result + '\">');\n                                $wrap.empty().append(img);\n                            } else {\n                                $wrap.text(\"预览出错\");\n                            }\n                        });\n                    }\n                }, thumbnailWidth, thumbnailHeight);\n\n                percentages[ file.id ] = [file.size, 0];\n                file.rotation = 0;\n            }\n\n            file.on('statuschange', function (cur, prev) {\n                if (prev === 'progress') {\n                    $prgress.hide().width(0);\n                } else if (prev === 'queued') {\n                    $li.off('mouseenter mouseleave');\n                    $btns.remove();\n                }\n\n                // 成功\n                if (cur === 'error' || cur === 'invalid') {\n                    console.log(file.statusText);\n                    showError(file.statusText);\n                    percentages[ file.id ][ 1 ] = 1;\n                } else if (cur === 'interrupt') {\n                    showError('interrupt');\n                } else if (cur === 'queued') {\n                    percentages[ file.id ][ 1 ] = 0;\n                } else if (cur === 'progress') {\n                    $info.remove();\n                    $prgress.css('display', 'block');\n                } else if (cur === 'complete') {\n                    $li.append('<span class=\"success\"></span>');\n                }\n\n                $li.removeClass('state-' + prev).addClass('state-' + cur);\n            });\n\n            $li.on('mouseenter', function () {\n                $btns.stop().animate({height: 30});\n            });\n\n            $li.on('mouseleave', function () {\n                $btns.stop().animate({height: 0});\n            });\n\n            $btns.on('click', 'span', function () {\n                var index = $(this).index(),\n                        deg;\n\n                switch (index) {\n                    case 0:\n                        uploader.removeFile(file);\n                        return;\n\n                    case 1:\n                        file.rotation += 90;\n                        break;\n\n                    case 2:\n                        file.rotation -= 90;\n                        break;\n                }\n\n                if (supportTransition) {\n                    deg = 'rotate(' + file.rotation + 'deg)';\n                    $wrap.css({\n                        '-webkit-transform': deg,\n                        '-mos-transform': deg,\n                        '-o-transform': deg,\n                        'transform': deg\n                    });\n                } else {\n                    $wrap.css('filter', 'progid:DXImageTransform.Microsoft.BasicImage(rotation=' + (~~((file.rotation / 90) % 4 + 4) % 4) + ')');\n                    // use jquery animate to rotation\n                    // $({\n                    //     rotation: rotation\n                    // }).animate({\n                    //     rotation: file.rotation\n                    // }, {\n                    //     easing: 'linear',\n                    //     step: function( now ) {\n                    //         now = now * Math.PI / 180;\n\n                    //         var cos = Math.cos( now ),\n                    //             sin = Math.sin( now );\n\n                    //         $wrap.css( 'filter', \"progid:DXImageTransform.Microsoft.Matrix(M11=\" + cos + \",M12=\" + (-sin) + \",M21=\" + sin + \",M22=\" + cos + \",SizingMethod='auto expand')\");\n                    //     }\n                    // });\n                }\n\n\n            });\n\n            $li.appendTo($queue);\n        }\n\n        // 负责view的销毁\n        function removeFile(file) {\n            var $li = $('#' + file.id);\n\n            delete percentages[ file.id ];\n            updateTotalProgress();\n            $li.off().find('.file-panel').off().end().remove();\n        }\n\n        function updateTotalProgress() {\n            var loaded = 0,\n                    total = 0,\n                    spans = $progress.children(),\n                    percent;\n\n            $.each(percentages, function (k, v) {\n                total += v[ 0 ];\n                loaded += v[ 0 ] * v[ 1 ];\n            });\n\n            percent = total ? loaded / total : 0;\n\n\n            spans.eq(0).text(Math.round(percent * 100) + '%');\n            spans.eq(1).css('width', Math.round(percent * 100) + '%');\n            updateStatus();\n        }\n\n        function updateStatus() {\n            var text = '', stats;\n\n            if (state === 'ready') {\n                text = '选中' + fileCount + '张图片，共' +\n                        WebUploader.formatSize(fileSize) + '。';\n            } else if (state === 'confirm') {\n                stats = uploader.getStats();\n                if (stats.uploadFailNum) {\n                    text = '已成功上传' + stats.successNum + '张照片至XX相册，' +\n                            stats.uploadFailNum + '张照片上传失败，<a class=\"retry\" href=\"#\">重新上传</a>失败图片或<a class=\"ignore\" href=\"#\">忽略</a>'\n                }\n\n            } else {\n                stats = uploader.getStats();\n                text = '共' + fileCount + '张（' +\n                        WebUploader.formatSize(fileSize) +\n                        '），已上传' + stats.successNum + '张';\n\n                if (stats.uploadFailNum) {\n                    text += '，失败' + stats.uploadFailNum + '张';\n                }\n            }\n\n            $info.html(text);\n        }\n\n        function setState(val) {\n            var file, stats;\n\n            if (val === state) {\n                return;\n            }\n\n            $upload.removeClass('state-' + state);\n            $upload.addClass('state-' + val);\n            state = val;\n\n            switch (state) {\n                case 'pedding':\n                    $placeHolder.removeClass('element-invisible');\n                    $queue.hide();\n                    $statusBar.addClass('element-invisible');\n                    uploader.refresh();\n                    break;\n\n                case 'ready':\n                    $placeHolder.addClass('element-invisible');\n                    $('#filePicker2').removeClass('element-invisible');\n                    $queue.show();\n                    $statusBar.removeClass('element-invisible');\n                    uploader.refresh();\n                    break;\n\n                case 'uploading':\n                    $('#filePicker2').addClass('element-invisible');\n                    $progress.show();\n                    $upload.text('暂停上传');\n                    break;\n\n                case 'paused':\n                    $progress.show();\n                    $upload.text('继续上传');\n                    break;\n\n                case 'confirm':\n                    $progress.hide();\n                    $('#filePicker2').removeClass('element-invisible');\n                    $upload.text('开始上传');\n\n                    stats = uploader.getStats();\n                    if (stats.successNum && !stats.uploadFailNum) {\n                        setState('finish');\n                        return;\n                    }\n                    break;\n                case 'finish':\n                    stats = uploader.getStats();\n                    if (stats.successNum) {\n                        alert('上传成功');\n                    } else {\n                        // 没有成功的图片，重设\n                        state = 'done';\n                        location.reload();\n                    }\n                    break;\n            }\n\n            updateStatus();\n        }\n\n        uploader.onUploadProgress = function (file, percentage) {\n            var $li = $('#' + file.id),\n                    $percent = $li.find('.progress span');\n\n            $percent.css('width', percentage * 100 + '%');\n            percentages[ file.id ][ 1 ] = percentage;\n            updateTotalProgress();\n        };\n\n        uploader.onFileQueued = function (file) {\n            fileCount++;\n            fileSize += file.size;\n\n            if (fileCount === 1) {\n                $placeHolder.addClass('element-invisible');\n                $statusBar.show();\n            }\n\n            addFile(file);\n            setState('ready');\n            updateTotalProgress();\n        };\n\n        uploader.onFileDequeued = function (file) {\n            fileCount--;\n            fileSize -= file.size;\n\n            if (!fileCount) {\n                setState('pedding');\n            }\n\n            removeFile(file);\n            updateTotalProgress();\n\n        };\n\n        uploader.on('all', function (type) {\n            var stats;\n            switch (type) {\n                case 'uploadFinished':\n                    setState('confirm');\n                    break;\n\n                case 'startUpload':\n                    setState('uploading');\n                    break;\n\n                case 'stopUpload':\n                    setState('paused');\n                    break;\n\n            }\n        });\n\n        uploader.onError = function (code) {\n            alert('Eroor: ' + code);\n        };\n\n        $upload.on('click', function () {\n            if ($(this).hasClass('disabled')) {\n                return false;\n            }\n\n            if (state === 'ready') {\n                uploader.upload();\n            } else if (state === 'paused') {\n                uploader.upload();\n            } else if (state === 'uploading') {\n                uploader.stop();\n            }\n        });\n\n        $info.on('click', '.retry', function () {\n            uploader.retry();\n        });\n\n        $info.on('click', '.ignore', function () {\n            alert('todo');\n        });\n\n        $upload.addClass('state-' + state);\n        updateTotalProgress();\n    });\n\n})(jQuery);"
  },
  {
    "path": "public/assets/dashboard/webupload/webuploader.css",
    "content": ".webuploader-container {\n\tposition: relative;\n}\n.webuploader-element-invisible {\n\tposition: absolute !important;\n\tclip: rect(1px 1px 1px 1px); /* IE6, IE7 */\n    clip: rect(1px,1px,1px,1px);\n}\n.webuploader-pick {\n\tposition: relative;\n\tdisplay: inline-block;\n\tcursor: pointer;\n\tbackground: #00b7ee;\n\tpadding: 10px 15px;\n\tcolor: #fff;\n\ttext-align: center;\n\tborder-radius: 3px;\n\toverflow: hidden;\n}\n.webuploader-pick-hover {\n\tbackground: #00a2d4;\n}\n\n.webuploader-pick-disable {\n\topacity: 0.6;\n\tpointer-events:none;\n}\n\n"
  },
  {
    "path": "public/assets/images/emoji/emojify.css",
    "content": ".emojify{width:1.5em;height:1.5em;display:inline-block;margin-bottom:-0.25em}.emojify.alien{background:url(alien.png) no-repeat;background-size:1.5em}.emojify.angel{background:url(angel.png) no-repeat;background-size:1.5em}.emojify.anger{background:url(anger.png) no-repeat;background-size:1.5em}.emojify.angry{background:url(angry.png) no-repeat;background-size:1.5em}.emojify.anguished{background:url(anguished.png) no-repeat;background-size:1.5em}.emojify.astonished{background:url(astonished.png) no-repeat;background-size:1.5em}.emojify.baby{background:url(baby.png) no-repeat;background-size:1.5em}.emojify.blue_heart{background:url(blue_heart.png) no-repeat;background-size:1.5em}.emojify.blush{background:url(blush.png) no-repeat;background-size:1.5em}.emojify.boom{background:url(boom.png) no-repeat;background-size:1.5em}.emojify.bow{background:url(bow.png) no-repeat;background-size:1.5em}.emojify.bowtie{background:url(bowtie.png) no-repeat;background-size:1.5em}.emojify.boy{background:url(boy.png) no-repeat;background-size:1.5em}.emojify.bride_with_veil{background:url(bride_with_veil.png) no-repeat;background-size:1.5em}.emojify.broken_heart{background:url(broken_heart.png) no-repeat;background-size:1.5em}.emojify.bust_in_silhouette{background:url(bust_in_silhouette.png) no-repeat;background-size:1.5em}.emojify.busts_in_silhouette{background:url(busts_in_silhouette.png) no-repeat;background-size:1.5em}.emojify.clap{background:url(clap.png) no-repeat;background-size:1.5em}.emojify.cold_sweat{background:url(cold_sweat.png) no-repeat;background-size:1.5em}.emojify.collision{background:url(collision.png) no-repeat;background-size:1.5em}.emojify.confounded{background:url(confounded.png) no-repeat;background-size:1.5em}.emojify.confused{background:url(confused.png) no-repeat;background-size:1.5em}.emojify.construction_worker{background:url(construction_worker.png) no-repeat;background-size:1.5em}.emojify.cop{background:url(cop.png) no-repeat;background-size:1.5em}.emojify.couple_with_heart{background:url(couple_with_heart.png) no-repeat;background-size:1.5em}.emojify.couple{background:url(couple.png) no-repeat;background-size:1.5em}.emojify.couplekiss{background:url(couplekiss.png) no-repeat;background-size:1.5em}.emojify.cry{background:url(cry.png) no-repeat;background-size:1.5em}.emojify.crying_cat_face{background:url(crying_cat_face.png) no-repeat;background-size:1.5em}.emojify.cupid{background:url(cupid.png) no-repeat;background-size:1.5em}.emojify.dancer{background:url(dancer.png) no-repeat;background-size:1.5em}.emojify.dancers{background:url(dancers.png) no-repeat;background-size:1.5em}.emojify.dash{background:url(dash.png) no-repeat;background-size:1.5em}.emojify.disappointed{background:url(disappointed.png) no-repeat;background-size:1.5em}.emojify.dizzy_face{background:url(dizzy_face.png) no-repeat;background-size:1.5em}.emojify.dizzy{background:url(dizzy.png) no-repeat;background-size:1.5em}.emojify.droplet{background:url(droplet.png) no-repeat;background-size:1.5em}.emojify.ear{background:url(ear.png) no-repeat;background-size:1.5em}.emojify.exclamation{background:url(exclamation.png) no-repeat;background-size:1.5em}.emojify.expressionless{background:url(expressionless.png) no-repeat;background-size:1.5em}.emojify.eyes{background:url(eyes.png) no-repeat;background-size:1.5em}.emojify.facepunch{background:url(facepunch.png) no-repeat;background-size:1.5em}.emojify.family{background:url(family.png) no-repeat;background-size:1.5em}.emojify.fearful{background:url(fearful.png) no-repeat;background-size:1.5em}.emojify.feelsgood{background:url(feelsgood.png) no-repeat;background-size:1.5em}.emojify.feet{background:url(feet.png) no-repeat;background-size:1.5em}.emojify.finnadie{background:url(finnadie.png) no-repeat;background-size:1.5em}.emojify.fire{background:url(fire.png) no-repeat;background-size:1.5em}.emojify.fist{background:url(fist.png) no-repeat;background-size:1.5em}.emojify.flushed{background:url(flushed.png) no-repeat;background-size:1.5em}.emojify.frowning{background:url(frowning.png) no-repeat;background-size:1.5em}.emojify.girl{background:url(girl.png) no-repeat;background-size:1.5em}.emojify.goberserk{background:url(goberserk.png) no-repeat;background-size:1.5em}.emojify.godmode{background:url(godmode.png) no-repeat;background-size:1.5em}.emojify.green_heart{background:url(green_heart.png) no-repeat;background-size:1.5em}.emojify.grey_exclamation{background:url(grey_exclamation.png) no-repeat;background-size:1.5em}.emojify.grey_question{background:url(grey_question.png) no-repeat;background-size:1.5em}.emojify.grimacing{background:url(grimacing.png) no-repeat;background-size:1.5em}.emojify.grin{background:url(grin.png) no-repeat;background-size:1.5em}.emojify.grinning{background:url(grinning.png) no-repeat;background-size:1.5em}.emojify.guardsman{background:url(guardsman.png) no-repeat;background-size:1.5em}.emojify.haircut{background:url(haircut.png) no-repeat;background-size:1.5em}.emojify.hand{background:url(hand.png) no-repeat;background-size:1.5em}.emojify.hankey{background:url(hankey.png) no-repeat;background-size:1.5em}.emojify.hear_no_evil{background:url(hear_no_evil.png) no-repeat;background-size:1.5em}.emojify.heart_eyes_cat{background:url(heart_eyes_cat.png) no-repeat;background-size:1.5em}.emojify.heart_eyes{background:url(heart_eyes.png) no-repeat;background-size:1.5em}.emojify.heart{background:url(heart.png) no-repeat;background-size:1.5em}.emojify.heartbeat{background:url(heartbeat.png) no-repeat;background-size:1.5em}.emojify.heartpulse{background:url(heartpulse.png) no-repeat;background-size:1.5em}.emojify.hurtrealbad{background:url(hurtrealbad.png) no-repeat;background-size:1.5em}.emojify.hushed{background:url(hushed.png) no-repeat;background-size:1.5em}.emojify.imp{background:url(imp.png) no-repeat;background-size:1.5em}.emojify.information_desk_person{background:url(information_desk_person.png) no-repeat;background-size:1.5em}.emojify.innocent{background:url(innocent.png) no-repeat;background-size:1.5em}.emojify.japanese_goblin{background:url(japanese_goblin.png) no-repeat;background-size:1.5em}.emojify.japanese_ogre{background:url(japanese_ogre.png) no-repeat;background-size:1.5em}.emojify.joy_cat{background:url(joy_cat.png) no-repeat;background-size:1.5em}.emojify.joy{background:url(joy.png) no-repeat;background-size:1.5em}.emojify.kiss{background:url(kiss.png) no-repeat;background-size:1.5em}.emojify.kissing_cat{background:url(kissing_cat.png) no-repeat;background-size:1.5em}.emojify.kissing_closed_eyes{background:url(kissing_closed_eyes.png) no-repeat;background-size:1.5em}.emojify.kissing_heart{background:url(kissing_heart.png) no-repeat;background-size:1.5em}.emojify.kissing_smiling_eyes{background:url(kissing_smiling_eyes.png) no-repeat;background-size:1.5em}.emojify.kissing{background:url(kissing.png) no-repeat;background-size:1.5em}.emojify.laughing{background:url(laughing.png) no-repeat;background-size:1.5em}.emojify.lips{background:url(lips.png) no-repeat;background-size:1.5em}.emojify.love_letter{background:url(love_letter.png) no-repeat;background-size:1.5em}.emojify.man_with_gua_pi_mao{background:url(man_with_gua_pi_mao.png) no-repeat;background-size:1.5em}.emojify.man_with_turban{background:url(man_with_turban.png) no-repeat;background-size:1.5em}.emojify.man{background:url(man.png) no-repeat;background-size:1.5em}.emojify.mask{background:url(mask.png) no-repeat;background-size:1.5em}.emojify.massage{background:url(massage.png) no-repeat;background-size:1.5em}.emojify.metal{background:url(metal.png) no-repeat;background-size:1.5em}.emojify.muscle{background:url(muscle.png) no-repeat;background-size:1.5em}.emojify.musical_note{background:url(musical_note.png) no-repeat;background-size:1.5em}.emojify.nail_care{background:url(nail_care.png) no-repeat;background-size:1.5em}.emojify.neckbeard{background:url(neckbeard.png) no-repeat;background-size:1.5em}.emojify.neutral_face{background:url(neutral_face.png) no-repeat;background-size:1.5em}.emojify.no_good{background:url(no_good.png) no-repeat;background-size:1.5em}.emojify.no_mouth{background:url(no_mouth.png) no-repeat;background-size:1.5em}.emojify.nose{background:url(nose.png) no-repeat;background-size:1.5em}.emojify.notes{background:url(notes.png) no-repeat;background-size:1.5em}.emojify.ok_hand{background:url(ok_hand.png) no-repeat;background-size:1.5em}.emojify.ok_woman{background:url(ok_woman.png) no-repeat;background-size:1.5em}.emojify.older_man{background:url(older_man.png) no-repeat;background-size:1.5em}.emojify.older_woman{background:url(older_woman.png) no-repeat;background-size:1.5em}.emojify.open_hands{background:url(open_hands.png) no-repeat;background-size:1.5em}.emojify.open_mouth{background:url(open_mouth.png) no-repeat;background-size:1.5em}.emojify.pensive{background:url(pensive.png) no-repeat;background-size:1.5em}.emojify.persevere{background:url(persevere.png) no-repeat;background-size:1.5em}.emojify.person_frowning{background:url(person_frowning.png) no-repeat;background-size:1.5em}.emojify.person_with_blond_hair{background:url(person_with_blond_hair.png) no-repeat;background-size:1.5em}.emojify.person_with_pouting_face{background:url(person_with_pouting_face.png) no-repeat;background-size:1.5em}.emojify.point_down{background:url(point_down.png) no-repeat;background-size:1.5em}.emojify.point_left{background:url(point_left.png) no-repeat;background-size:1.5em}.emojify.point_right{background:url(point_right.png) no-repeat;background-size:1.5em}.emojify.point_up_2{background:url(point_up_2.png) no-repeat;background-size:1.5em}.emojify.point_up{background:url(point_up.png) no-repeat;background-size:1.5em}.emojify.poop{background:url(poop.png) no-repeat;background-size:1.5em}.emojify.pouting_cat{background:url(pouting_cat.png) no-repeat;background-size:1.5em}.emojify.pray{background:url(pray.png) no-repeat;background-size:1.5em}.emojify.princess{background:url(princess.png) no-repeat;background-size:1.5em}.emojify.punch{background:url(punch.png) no-repeat;background-size:1.5em}.emojify.purple_heart{background:url(purple_heart.png) no-repeat;background-size:1.5em}.emojify.question{background:url(question.png) no-repeat;background-size:1.5em}.emojify.rage{background:url(rage.png) no-repeat;background-size:1.5em}.emojify.rage1{background:url(rage1.png) no-repeat;background-size:1.5em}.emojify.rage2{background:url(rage2.png) no-repeat;background-size:1.5em}.emojify.rage3{background:url(rage3.png) no-repeat;background-size:1.5em}.emojify.rage4{background:url(rage4.png) no-repeat;background-size:1.5em}.emojify.raised_hand{background:url(raised_hand.png) no-repeat;background-size:1.5em}.emojify.raised_hands{background:url(raised_hands.png) no-repeat;background-size:1.5em}.emojify.relaxed{background:url(relaxed.png) no-repeat;background-size:1.5em}.emojify.relieved{background:url(relieved.png) no-repeat;background-size:1.5em}.emojify.revolving_hearts{background:url(revolving_hearts.png) no-repeat;background-size:1.5em}.emojify.runner{background:url(runner.png) no-repeat;background-size:1.5em}.emojify.running{background:url(running.png) no-repeat;background-size:1.5em}.emojify.satisfied{background:url(satisfied.png) no-repeat;background-size:1.5em}.emojify.scream_cat{background:url(scream_cat.png) no-repeat;background-size:1.5em}.emojify.scream{background:url(scream.png) no-repeat;background-size:1.5em}.emojify.see_no_evil{background:url(see_no_evil.png) no-repeat;background-size:1.5em}.emojify.shit{background:url(shit.png) no-repeat;background-size:1.5em}.emojify.skull{background:url(skull.png) no-repeat;background-size:1.5em}.emojify.sleeping{background:url(sleeping.png) no-repeat;background-size:1.5em}.emojify.sleepy{background:url(sleepy.png) no-repeat;background-size:1.5em}.emojify.smile_cat{background:url(smile_cat.png) no-repeat;background-size:1.5em}.emojify.smile{background:url(smile.png) no-repeat;background-size:1.5em}.emojify.smiley_cat{background:url(smiley_cat.png) no-repeat;background-size:1.5em}.emojify.smiley{background:url(smiley.png) no-repeat;background-size:1.5em}.emojify.smiling_imp{background:url(smiling_imp.png) no-repeat;background-size:1.5em}.emojify.smirk_cat{background:url(smirk_cat.png) no-repeat;background-size:1.5em}.emojify.smirk{background:url(smirk.png) no-repeat;background-size:1.5em}.emojify.sob{background:url(sob.png) no-repeat;background-size:1.5em}.emojify.sparkling_heart{background:url(sparkling_heart.png) no-repeat;background-size:1.5em}.emojify.sparkles{background:url(sparkles.png) no-repeat;background-size:1.5em}.emojify.speak_no_evil{background:url(speak_no_evil.png) no-repeat;background-size:1.5em}.emojify.speech_balloon{background:url(speech_balloon.png) no-repeat;background-size:1.5em}.emojify.star{background:url(star.png) no-repeat;background-size:1.5em}.emojify.star2{background:url(star2.png) no-repeat;background-size:1.5em}.emojify.stuck_out_tongue_closed_eyes{background:url(stuck_out_tongue_closed_eyes.png) no-repeat;background-size:1.5em}.emojify.stuck_out_tongue_winking_eye{background:url(stuck_out_tongue_winking_eye.png) no-repeat;background-size:1.5em}.emojify.stuck_out_tongue{background:url(stuck_out_tongue.png) no-repeat;background-size:1.5em}.emojify.sunglasses{background:url(sunglasses.png) no-repeat;background-size:1.5em}.emojify.suspect{background:url(suspect.png) no-repeat;background-size:1.5em}.emojify.sweat_drops{background:url(sweat_drops.png) no-repeat;background-size:1.5em}.emojify.sweat_smile{background:url(sweat_smile.png) no-repeat;background-size:1.5em}.emojify.sweat{background:url(sweat.png) no-repeat;background-size:1.5em}.emojify.thought_balloon{background:url(thought_balloon.png) no-repeat;background-size:1.5em}.emojify.thumbsdown{background:url(thumbsdown.png) no-repeat;background-size:1.5em}.emojify.thumbsup{background:url(thumbsup.png) no-repeat;background-size:1.5em}.emojify.tired_face{background:url(tired_face.png) no-repeat;background-size:1.5em}.emojify.tongue{background:url(tongue.png) no-repeat;background-size:1.5em}.emojify.triumph{background:url(triumph.png) no-repeat;background-size:1.5em}.emojify.trollface{background:url(trollface.png) no-repeat;background-size:1.5em}.emojify.two_hearts{background:url(two_hearts.png) no-repeat;background-size:1.5em}.emojify.two_men_holding_hands{background:url(two_men_holding_hands.png) no-repeat;background-size:1.5em}.emojify.two_women_holding_hands{background:url(two_women_holding_hands.png) no-repeat;background-size:1.5em}.emojify.unamused{background:url(unamused.png) no-repeat;background-size:1.5em}.emojify.v{background:url(v.png) no-repeat;background-size:1.5em}.emojify.walking{background:url(walking.png) no-repeat;background-size:1.5em}.emojify.wave{background:url(wave.png) no-repeat;background-size:1.5em}.emojify.weary{background:url(weary.png) no-repeat;background-size:1.5em}.emojify.wink2{background:url(wink2.png) no-repeat;background-size:1.5em}.emojify.wink{background:url(wink.png) no-repeat;background-size:1.5em}.emojify.woman{background:url(woman.png) no-repeat;background-size:1.5em}.emojify.worried{background:url(worried.png) no-repeat;background-size:1.5em}.emojify.yellow_heart{background:url(yellow_heart.png) no-repeat;background-size:1.5em}.emojify.yum{background:url(yum.png) no-repeat;background-size:1.5em}.emojify.zzz{background:url(zzz.png) no-repeat;background-size:1.5em}.emojify.sunny{background:url(sunny.png) no-repeat;background-size:1.5em}.emojify.umbrella{background:url(umbrella.png) no-repeat;background-size:1.5em}.emojify.cloud{background:url(cloud.png) no-repeat;background-size:1.5em}.emojify.snowflake{background:url(snowflake.png) no-repeat;background-size:1.5em}.emojify.snowman{background:url(snowman.png) no-repeat;background-size:1.5em}.emojify.zap{background:url(zap.png) no-repeat;background-size:1.5em}.emojify.cyclone{background:url(cyclone.png) no-repeat;background-size:1.5em}.emojify.foggy{background:url(foggy.png) no-repeat;background-size:1.5em}.emojify.ocean{background:url(ocean.png) no-repeat;background-size:1.5em}.emojify.cat{background:url(cat.png) no-repeat;background-size:1.5em}.emojify.dog{background:url(dog.png) no-repeat;background-size:1.5em}.emojify.mouse{background:url(mouse.png) no-repeat;background-size:1.5em}.emojify.hamster{background:url(hamster.png) no-repeat;background-size:1.5em}.emojify.rabbit{background:url(rabbit.png) no-repeat;background-size:1.5em}.emojify.wolf{background:url(wolf.png) no-repeat;background-size:1.5em}.emojify.frog{background:url(frog.png) no-repeat;background-size:1.5em}.emojify.tiger{background:url(tiger.png) no-repeat;background-size:1.5em}.emojify.koala{background:url(koala.png) no-repeat;background-size:1.5em}.emojify.bear{background:url(bear.png) no-repeat;background-size:1.5em}.emojify.pig{background:url(pig.png) no-repeat;background-size:1.5em}.emojify.pig_nose{background:url(pig_nose.png) no-repeat;background-size:1.5em}.emojify.cow{background:url(cow.png) no-repeat;background-size:1.5em}.emojify.boar{background:url(boar.png) no-repeat;background-size:1.5em}.emojify.monkey_face{background:url(monkey_face.png) no-repeat;background-size:1.5em}.emojify.monkey{background:url(monkey.png) no-repeat;background-size:1.5em}.emojify.horse{background:url(horse.png) no-repeat;background-size:1.5em}.emojify.racehorse{background:url(racehorse.png) no-repeat;background-size:1.5em}.emojify.camel{background:url(camel.png) no-repeat;background-size:1.5em}.emojify.sheep{background:url(sheep.png) no-repeat;background-size:1.5em}.emojify.elephant{background:url(elephant.png) no-repeat;background-size:1.5em}.emojify.panda_face{background:url(panda_face.png) no-repeat;background-size:1.5em}.emojify.snake{background:url(snake.png) no-repeat;background-size:1.5em}.emojify.bird{background:url(bird.png) no-repeat;background-size:1.5em}.emojify.baby_chick{background:url(baby_chick.png) no-repeat;background-size:1.5em}.emojify.hatched_chick{background:url(hatched_chick.png) no-repeat;background-size:1.5em}.emojify.hatching_chick{background:url(hatching_chick.png) no-repeat;background-size:1.5em}.emojify.chicken{background:url(chicken.png) no-repeat;background-size:1.5em}.emojify.penguin{background:url(penguin.png) no-repeat;background-size:1.5em}.emojify.turtle{background:url(turtle.png) no-repeat;background-size:1.5em}.emojify.bug{background:url(bug.png) no-repeat;background-size:1.5em}.emojify.honeybee{background:url(honeybee.png) no-repeat;background-size:1.5em}.emojify.ant{background:url(ant.png) no-repeat;background-size:1.5em}.emojify.beetle{background:url(beetle.png) no-repeat;background-size:1.5em}.emojify.snail{background:url(snail.png) no-repeat;background-size:1.5em}.emojify.octopus{background:url(octopus.png) no-repeat;background-size:1.5em}.emojify.tropical_fish{background:url(tropical_fish.png) no-repeat;background-size:1.5em}.emojify.fish{background:url(fish.png) no-repeat;background-size:1.5em}.emojify.whale{background:url(whale.png) no-repeat;background-size:1.5em}.emojify.whale2{background:url(whale2.png) no-repeat;background-size:1.5em}.emojify.dolphin{background:url(dolphin.png) no-repeat;background-size:1.5em}.emojify.cow2{background:url(cow2.png) no-repeat;background-size:1.5em}.emojify.ram{background:url(ram.png) no-repeat;background-size:1.5em}.emojify.rat{background:url(rat.png) no-repeat;background-size:1.5em}.emojify.water_buffalo{background:url(water_buffalo.png) no-repeat;background-size:1.5em}.emojify.tiger2{background:url(tiger2.png) no-repeat;background-size:1.5em}.emojify.rabbit2{background:url(rabbit2.png) no-repeat;background-size:1.5em}.emojify.dragon{background:url(dragon.png) no-repeat;background-size:1.5em}.emojify.goat{background:url(goat.png) no-repeat;background-size:1.5em}.emojify.rooster{background:url(rooster.png) no-repeat;background-size:1.5em}.emojify.dog2{background:url(dog2.png) no-repeat;background-size:1.5em}.emojify.pig2{background:url(pig2.png) no-repeat;background-size:1.5em}.emojify.mouse2{background:url(mouse2.png) no-repeat;background-size:1.5em}.emojify.ox{background:url(ox.png) no-repeat;background-size:1.5em}.emojify.dragon_face{background:url(dragon_face.png) no-repeat;background-size:1.5em}.emojify.blowfish{background:url(blowfish.png) no-repeat;background-size:1.5em}.emojify.crocodile{background:url(crocodile.png) no-repeat;background-size:1.5em}.emojify.dromedary_camel{background:url(dromedary_camel.png) no-repeat;background-size:1.5em}.emojify.leopard{background:url(leopard.png) no-repeat;background-size:1.5em}.emojify.cat2{background:url(cat2.png) no-repeat;background-size:1.5em}.emojify.poodle{background:url(poodle.png) no-repeat;background-size:1.5em}.emojify.paw_prints{background:url(paw_prints.png) no-repeat;background-size:1.5em}.emojify.bouquet{background:url(bouquet.png) no-repeat;background-size:1.5em}.emojify.cherry_blossom{background:url(cherry_blossom.png) no-repeat;background-size:1.5em}.emojify.tulip{background:url(tulip.png) no-repeat;background-size:1.5em}.emojify.four_leaf_clover{background:url(four_leaf_clover.png) no-repeat;background-size:1.5em}.emojify.rose{background:url(rose.png) no-repeat;background-size:1.5em}.emojify.sunflower{background:url(sunflower.png) no-repeat;background-size:1.5em}.emojify.hibiscus{background:url(hibiscus.png) no-repeat;background-size:1.5em}.emojify.maple_leaf{background:url(maple_leaf.png) no-repeat;background-size:1.5em}.emojify.leaves{background:url(leaves.png) no-repeat;background-size:1.5em}.emojify.fallen_leaf{background:url(fallen_leaf.png) no-repeat;background-size:1.5em}.emojify.herb{background:url(herb.png) no-repeat;background-size:1.5em}.emojify.mushroom{background:url(mushroom.png) no-repeat;background-size:1.5em}.emojify.cactus{background:url(cactus.png) no-repeat;background-size:1.5em}.emojify.palm_tree{background:url(palm_tree.png) no-repeat;background-size:1.5em}.emojify.evergreen_tree{background:url(evergreen_tree.png) no-repeat;background-size:1.5em}.emojify.deciduous_tree{background:url(deciduous_tree.png) no-repeat;background-size:1.5em}.emojify.chestnut{background:url(chestnut.png) no-repeat;background-size:1.5em}.emojify.seedling{background:url(seedling.png) no-repeat;background-size:1.5em}.emojify.blossom{background:url(blossom.png) no-repeat;background-size:1.5em}.emojify.ear_of_rice{background:url(ear_of_rice.png) no-repeat;background-size:1.5em}.emojify.shell{background:url(shell.png) no-repeat;background-size:1.5em}.emojify.globe_with_meridians{background:url(globe_with_meridians.png) no-repeat;background-size:1.5em}.emojify.sun_with_face{background:url(sun_with_face.png) no-repeat;background-size:1.5em}.emojify.full_moon_with_face{background:url(full_moon_with_face.png) no-repeat;background-size:1.5em}.emojify.new_moon_with_face{background:url(new_moon_with_face.png) no-repeat;background-size:1.5em}.emojify.new_moon{background:url(new_moon.png) no-repeat;background-size:1.5em}.emojify.waxing_crescent_moon{background:url(waxing_crescent_moon.png) no-repeat;background-size:1.5em}.emojify.first_quarter_moon{background:url(first_quarter_moon.png) no-repeat;background-size:1.5em}.emojify.waxing_gibbous_moon{background:url(waxing_gibbous_moon.png) no-repeat;background-size:1.5em}.emojify.full_moon{background:url(full_moon.png) no-repeat;background-size:1.5em}.emojify.waning_gibbous_moon{background:url(waning_gibbous_moon.png) no-repeat;background-size:1.5em}.emojify.last_quarter_moon{background:url(last_quarter_moon.png) no-repeat;background-size:1.5em}.emojify.waning_crescent_moon{background:url(waning_crescent_moon.png) no-repeat;background-size:1.5em}.emojify.last_quarter_moon_with_face{background:url(last_quarter_moon_with_face.png) no-repeat;background-size:1.5em}.emojify.first_quarter_moon_with_face{background:url(first_quarter_moon_with_face.png) no-repeat;background-size:1.5em}.emojify.moon{background:url(moon.png) no-repeat;background-size:1.5em}.emojify.earth_africa{background:url(earth_africa.png) no-repeat;background-size:1.5em}.emojify.earth_americas{background:url(earth_americas.png) no-repeat;background-size:1.5em}.emojify.earth_asia{background:url(earth_asia.png) no-repeat;background-size:1.5em}.emojify.volcano{background:url(volcano.png) no-repeat;background-size:1.5em}.emojify.milky_way{background:url(milky_way.png) no-repeat;background-size:1.5em}.emojify.partly_sunny{background:url(partly_sunny.png) no-repeat;background-size:1.5em}.emojify.octocat{background:url(octocat.png) no-repeat;background-size:1.5em}.emojify.squirrel{background:url(squirrel.png) no-repeat;background-size:1.5em}.emojify.bamboo{background:url(bamboo.png) no-repeat;background-size:1.5em}.emojify.gift_heart{background:url(gift_heart.png) no-repeat;background-size:1.5em}.emojify.dolls{background:url(dolls.png) no-repeat;background-size:1.5em}.emojify.school_satchel{background:url(school_satchel.png) no-repeat;background-size:1.5em}.emojify.mortar_board{background:url(mortar_board.png) no-repeat;background-size:1.5em}.emojify.flags{background:url(flags.png) no-repeat;background-size:1.5em}.emojify.fireworks{background:url(fireworks.png) no-repeat;background-size:1.5em}.emojify.sparkler{background:url(sparkler.png) no-repeat;background-size:1.5em}.emojify.wind_chime{background:url(wind_chime.png) no-repeat;background-size:1.5em}.emojify.rice_scene{background:url(rice_scene.png) no-repeat;background-size:1.5em}.emojify.jack_o_lantern{background:url(jack_o_lantern.png) no-repeat;background-size:1.5em}.emojify.ghost{background:url(ghost.png) no-repeat;background-size:1.5em}.emojify.santa{background:url(santa.png) no-repeat;background-size:1.5em}.emojify.christmas_tree{background:url(christmas_tree.png) no-repeat;background-size:1.5em}.emojify.gift{background:url(gift.png) no-repeat;background-size:1.5em}.emojify.bell{background:url(bell.png) no-repeat;background-size:1.5em}.emojify.no_bell{background:url(no_bell.png) no-repeat;background-size:1.5em}.emojify.tanabata_tree{background:url(tanabata_tree.png) no-repeat;background-size:1.5em}.emojify.tada{background:url(tada.png) no-repeat;background-size:1.5em}.emojify.confetti_ball{background:url(confetti_ball.png) no-repeat;background-size:1.5em}.emojify.balloon{background:url(balloon.png) no-repeat;background-size:1.5em}.emojify.crystal_ball{background:url(crystal_ball.png) no-repeat;background-size:1.5em}.emojify.cd{background:url(cd.png) no-repeat;background-size:1.5em}.emojify.dvd{background:url(dvd.png) no-repeat;background-size:1.5em}.emojify.floppy_disk{background:url(floppy_disk.png) no-repeat;background-size:1.5em}.emojify.camera{background:url(camera.png) no-repeat;background-size:1.5em}.emojify.video_camera{background:url(video_camera.png) no-repeat;background-size:1.5em}.emojify.movie_camera{background:url(movie_camera.png) no-repeat;background-size:1.5em}.emojify.computer{background:url(computer.png) no-repeat;background-size:1.5em}.emojify.tv{background:url(tv.png) no-repeat;background-size:1.5em}.emojify.iphone{background:url(iphone.png) no-repeat;background-size:1.5em}.emojify.phone{background:url(phone.png) no-repeat;background-size:1.5em}.emojify.telephone{background:url(telephone.png) no-repeat;background-size:1.5em}.emojify.telephone_receiver{background:url(telephone_receiver.png) no-repeat;background-size:1.5em}.emojify.pager{background:url(pager.png) no-repeat;background-size:1.5em}.emojify.fax{background:url(fax.png) no-repeat;background-size:1.5em}.emojify.minidisc{background:url(minidisc.png) no-repeat;background-size:1.5em}.emojify.vhs{background:url(vhs.png) no-repeat;background-size:1.5em}.emojify.sound{background:url(sound.png) no-repeat;background-size:1.5em}.emojify.speaker{background:url(speaker.png) no-repeat;background-size:1.5em}.emojify.mute{background:url(mute.png) no-repeat;background-size:1.5em}.emojify.loudspeaker{background:url(loudspeaker.png) no-repeat;background-size:1.5em}.emojify.mega{background:url(mega.png) no-repeat;background-size:1.5em}.emojify.hourglass{background:url(hourglass.png) no-repeat;background-size:1.5em}.emojify.hourglass_flowing_sand{background:url(hourglass_flowing_sand.png) no-repeat;background-size:1.5em}.emojify.alarm_clock{background:url(alarm_clock.png) no-repeat;background-size:1.5em}.emojify.watch{background:url(watch.png) no-repeat;background-size:1.5em}.emojify.radio{background:url(radio.png) no-repeat;background-size:1.5em}.emojify.satellite{background:url(satellite.png) no-repeat;background-size:1.5em}.emojify.loop{background:url(loop.png) no-repeat;background-size:1.5em}.emojify.mag{background:url(mag.png) no-repeat;background-size:1.5em}.emojify.mag_right{background:url(mag_right.png) no-repeat;background-size:1.5em}.emojify.unlock{background:url(unlock.png) no-repeat;background-size:1.5em}.emojify.lock{background:url(lock.png) no-repeat;background-size:1.5em}.emojify.lock_with_ink_pen{background:url(lock_with_ink_pen.png) no-repeat;background-size:1.5em}.emojify.closed_lock_with_key{background:url(closed_lock_with_key.png) no-repeat;background-size:1.5em}.emojify.key{background:url(key.png) no-repeat;background-size:1.5em}.emojify.bulb{background:url(bulb.png) no-repeat;background-size:1.5em}.emojify.flashlight{background:url(flashlight.png) no-repeat;background-size:1.5em}.emojify.high_brightness{background:url(high_brightness.png) no-repeat;background-size:1.5em}.emojify.low_brightness{background:url(low_brightness.png) no-repeat;background-size:1.5em}.emojify.electric_plug{background:url(electric_plug.png) no-repeat;background-size:1.5em}.emojify.battery{background:url(battery.png) no-repeat;background-size:1.5em}.emojify.calling{background:url(calling.png) no-repeat;background-size:1.5em}.emojify.email{background:url(email.png) no-repeat;background-size:1.5em}.emojify.mailbox{background:url(mailbox.png) no-repeat;background-size:1.5em}.emojify.postbox{background:url(postbox.png) no-repeat;background-size:1.5em}.emojify.bath{background:url(bath.png) no-repeat;background-size:1.5em}.emojify.bathtub{background:url(bathtub.png) no-repeat;background-size:1.5em}.emojify.shower{background:url(shower.png) no-repeat;background-size:1.5em}.emojify.toilet{background:url(toilet.png) no-repeat;background-size:1.5em}.emojify.wrench{background:url(wrench.png) no-repeat;background-size:1.5em}.emojify.nut_and_bolt{background:url(nut_and_bolt.png) no-repeat;background-size:1.5em}.emojify.hammer{background:url(hammer.png) no-repeat;background-size:1.5em}.emojify.seat{background:url(seat.png) no-repeat;background-size:1.5em}.emojify.moneybag{background:url(moneybag.png) no-repeat;background-size:1.5em}.emojify.yen{background:url(yen.png) no-repeat;background-size:1.5em}.emojify.dollar{background:url(dollar.png) no-repeat;background-size:1.5em}.emojify.pound{background:url(pound.png) no-repeat;background-size:1.5em}.emojify.euro{background:url(euro.png) no-repeat;background-size:1.5em}.emojify.credit_card{background:url(credit_card.png) no-repeat;background-size:1.5em}.emojify.money_with_wings{background:url(money_with_wings.png) no-repeat;background-size:1.5em}.emojify.e-mail{background:url(e-mail.png) no-repeat;background-size:1.5em}.emojify.inbox_tray{background:url(inbox_tray.png) no-repeat;background-size:1.5em}.emojify.outbox_tray{background:url(outbox_tray.png) no-repeat;background-size:1.5em}.emojify.envelope{background:url(envelope.png) no-repeat;background-size:1.5em}.emojify.incoming_envelope{background:url(incoming_envelope.png) no-repeat;background-size:1.5em}.emojify.postal_horn{background:url(postal_horn.png) no-repeat;background-size:1.5em}.emojify.mailbox_closed{background:url(mailbox_closed.png) no-repeat;background-size:1.5em}.emojify.mailbox_with_mail{background:url(mailbox_with_mail.png) no-repeat;background-size:1.5em}.emojify.mailbox_with_no_mail{background:url(mailbox_with_no_mail.png) no-repeat;background-size:1.5em}.emojify.door{background:url(door.png) no-repeat;background-size:1.5em}.emojify.smoking{background:url(smoking.png) no-repeat;background-size:1.5em}.emojify.bomb{background:url(bomb.png) no-repeat;background-size:1.5em}.emojify.gun{background:url(gun.png) no-repeat;background-size:1.5em}.emojify.hocho{background:url(hocho.png) no-repeat;background-size:1.5em}.emojify.pill{background:url(pill.png) no-repeat;background-size:1.5em}.emojify.syringe{background:url(syringe.png) no-repeat;background-size:1.5em}.emojify.page_facing_up{background:url(page_facing_up.png) no-repeat;background-size:1.5em}.emojify.page_with_curl{background:url(page_with_curl.png) no-repeat;background-size:1.5em}.emojify.bookmark_tabs{background:url(bookmark_tabs.png) no-repeat;background-size:1.5em}.emojify.bar_chart{background:url(bar_chart.png) no-repeat;background-size:1.5em}.emojify.chart_with_upwards_trend{background:url(chart_with_upwards_trend.png) no-repeat;background-size:1.5em}.emojify.chart_with_downwards_trend{background:url(chart_with_downwards_trend.png) no-repeat;background-size:1.5em}.emojify.scroll{background:url(scroll.png) no-repeat;background-size:1.5em}.emojify.clipboard{background:url(clipboard.png) no-repeat;background-size:1.5em}.emojify.calendar{background:url(calendar.png) no-repeat;background-size:1.5em}.emojify.date{background:url(date.png) no-repeat;background-size:1.5em}.emojify.card_index{background:url(card_index.png) no-repeat;background-size:1.5em}.emojify.file_folder{background:url(file_folder.png) no-repeat;background-size:1.5em}.emojify.open_file_folder{background:url(open_file_folder.png) no-repeat;background-size:1.5em}.emojify.scissors{background:url(scissors.png) no-repeat;background-size:1.5em}.emojify.pushpin{background:url(pushpin.png) no-repeat;background-size:1.5em}.emojify.paperclip{background:url(paperclip.png) no-repeat;background-size:1.5em}.emojify.black_nib{background:url(black_nib.png) no-repeat;background-size:1.5em}.emojify.pencil2{background:url(pencil2.png) no-repeat;background-size:1.5em}.emojify.straight_ruler{background:url(straight_ruler.png) no-repeat;background-size:1.5em}.emojify.triangular_ruler{background:url(triangular_ruler.png) no-repeat;background-size:1.5em}.emojify.closed_book{background:url(closed_book.png) no-repeat;background-size:1.5em}.emojify.green_book{background:url(green_book.png) no-repeat;background-size:1.5em}.emojify.blue_book{background:url(blue_book.png) no-repeat;background-size:1.5em}.emojify.orange_book{background:url(orange_book.png) no-repeat;background-size:1.5em}.emojify.notebook{background:url(notebook.png) no-repeat;background-size:1.5em}.emojify.notebook_with_decorative_cover{background:url(notebook_with_decorative_cover.png) no-repeat;background-size:1.5em}.emojify.ledger{background:url(ledger.png) no-repeat;background-size:1.5em}.emojify.books{background:url(books.png) no-repeat;background-size:1.5em}.emojify.bookmark{background:url(bookmark.png) no-repeat;background-size:1.5em}.emojify.name_badge{background:url(name_badge.png) no-repeat;background-size:1.5em}.emojify.microscope{background:url(microscope.png) no-repeat;background-size:1.5em}.emojify.telescope{background:url(telescope.png) no-repeat;background-size:1.5em}.emojify.newspaper{background:url(newspaper.png) no-repeat;background-size:1.5em}.emojify.football{background:url(football.png) no-repeat;background-size:1.5em}.emojify.basketball{background:url(basketball.png) no-repeat;background-size:1.5em}.emojify.soccer{background:url(soccer.png) no-repeat;background-size:1.5em}.emojify.baseball{background:url(baseball.png) no-repeat;background-size:1.5em}.emojify.tennis{background:url(tennis.png) no-repeat;background-size:1.5em}.emojify.eightball{background:url(eightball.png) no-repeat;background-size:1.5em}.emojify.rugby_football{background:url(rugby_football.png) no-repeat;background-size:1.5em}.emojify.bowling{background:url(bowling.png) no-repeat;background-size:1.5em}.emojify.golf{background:url(golf.png) no-repeat;background-size:1.5em}.emojify.mountain_bicyclist{background:url(mountain_bicyclist.png) no-repeat;background-size:1.5em}.emojify.bicyclist{background:url(bicyclist.png) no-repeat;background-size:1.5em}.emojify.horse_racing{background:url(horse_racing.png) no-repeat;background-size:1.5em}.emojify.snowboarder{background:url(snowboarder.png) no-repeat;background-size:1.5em}.emojify.swimmer{background:url(swimmer.png) no-repeat;background-size:1.5em}.emojify.surfer{background:url(surfer.png) no-repeat;background-size:1.5em}.emojify.ski{background:url(ski.png) no-repeat;background-size:1.5em}.emojify.spades{background:url(spades.png) no-repeat;background-size:1.5em}.emojify.hearts{background:url(hearts.png) no-repeat;background-size:1.5em}.emojify.clubs{background:url(clubs.png) no-repeat;background-size:1.5em}.emojify.diamonds{background:url(diamonds.png) no-repeat;background-size:1.5em}.emojify.gem{background:url(gem.png) no-repeat;background-size:1.5em}.emojify.ring{background:url(ring.png) no-repeat;background-size:1.5em}.emojify.trophy{background:url(trophy.png) no-repeat;background-size:1.5em}.emojify.musical_score{background:url(musical_score.png) no-repeat;background-size:1.5em}.emojify.musical_keyboard{background:url(musical_keyboard.png) no-repeat;background-size:1.5em}.emojify.violin{background:url(violin.png) no-repeat;background-size:1.5em}.emojify.space_invader{background:url(space_invader.png) no-repeat;background-size:1.5em}.emojify.video_game{background:url(video_game.png) no-repeat;background-size:1.5em}.emojify.black_joker{background:url(black_joker.png) no-repeat;background-size:1.5em}.emojify.flower_playing_cards{background:url(flower_playing_cards.png) no-repeat;background-size:1.5em}.emojify.game_die{background:url(game_die.png) no-repeat;background-size:1.5em}.emojify.dart{background:url(dart.png) no-repeat;background-size:1.5em}.emojify.mahjong{background:url(mahjong.png) no-repeat;background-size:1.5em}.emojify.clapper{background:url(clapper.png) no-repeat;background-size:1.5em}.emojify.memo{background:url(memo.png) no-repeat;background-size:1.5em}.emojify.pencil{background:url(pencil.png) no-repeat;background-size:1.5em}.emojify.book{background:url(book.png) no-repeat;background-size:1.5em}.emojify.art{background:url(art.png) no-repeat;background-size:1.5em}.emojify.microphone{background:url(microphone.png) no-repeat;background-size:1.5em}.emojify.headphones{background:url(headphones.png) no-repeat;background-size:1.5em}.emojify.trumpet{background:url(trumpet.png) no-repeat;background-size:1.5em}.emojify.saxophone{background:url(saxophone.png) no-repeat;background-size:1.5em}.emojify.guitar{background:url(guitar.png) no-repeat;background-size:1.5em}.emojify.shoe{background:url(shoe.png) no-repeat;background-size:1.5em}.emojify.sandal{background:url(sandal.png) no-repeat;background-size:1.5em}.emojify.high_heel{background:url(high_heel.png) no-repeat;background-size:1.5em}.emojify.lipstick{background:url(lipstick.png) no-repeat;background-size:1.5em}.emojify.boot{background:url(boot.png) no-repeat;background-size:1.5em}.emojify.shirt{background:url(shirt.png) no-repeat;background-size:1.5em}.emojify.tshirt{background:url(tshirt.png) no-repeat;background-size:1.5em}.emojify.necktie{background:url(necktie.png) no-repeat;background-size:1.5em}.emojify.womans_clothes{background:url(womans_clothes.png) no-repeat;background-size:1.5em}.emojify.dress{background:url(dress.png) no-repeat;background-size:1.5em}.emojify.running_shirt_with_sash{background:url(running_shirt_with_sash.png) no-repeat;background-size:1.5em}.emojify.jeans{background:url(jeans.png) no-repeat;background-size:1.5em}.emojify.kimono{background:url(kimono.png) no-repeat;background-size:1.5em}.emojify.bikini{background:url(bikini.png) no-repeat;background-size:1.5em}.emojify.ribbon{background:url(ribbon.png) no-repeat;background-size:1.5em}.emojify.tophat{background:url(tophat.png) no-repeat;background-size:1.5em}.emojify.crown{background:url(crown.png) no-repeat;background-size:1.5em}.emojify.womans_hat{background:url(womans_hat.png) no-repeat;background-size:1.5em}.emojify.mans_shoe{background:url(mans_shoe.png) no-repeat;background-size:1.5em}.emojify.closed_umbrella{background:url(closed_umbrella.png) no-repeat;background-size:1.5em}.emojify.briefcase{background:url(briefcase.png) no-repeat;background-size:1.5em}.emojify.handbag{background:url(handbag.png) no-repeat;background-size:1.5em}.emojify.pouch{background:url(pouch.png) no-repeat;background-size:1.5em}.emojify.purse{background:url(purse.png) no-repeat;background-size:1.5em}.emojify.eyeglasses{background:url(eyeglasses.png) no-repeat;background-size:1.5em}.emojify.fishing_pole_and_fish{background:url(fishing_pole_and_fish.png) no-repeat;background-size:1.5em}.emojify.coffee{background:url(coffee.png) no-repeat;background-size:1.5em}.emojify.tea{background:url(tea.png) no-repeat;background-size:1.5em}.emojify.sake{background:url(sake.png) no-repeat;background-size:1.5em}.emojify.baby_bottle{background:url(baby_bottle.png) no-repeat;background-size:1.5em}.emojify.beer{background:url(beer.png) no-repeat;background-size:1.5em}.emojify.beers{background:url(beers.png) no-repeat;background-size:1.5em}.emojify.cocktail{background:url(cocktail.png) no-repeat;background-size:1.5em}.emojify.tropical_drink{background:url(tropical_drink.png) no-repeat;background-size:1.5em}.emojify.wine_glass{background:url(wine_glass.png) no-repeat;background-size:1.5em}.emojify.fork_and_knife{background:url(fork_and_knife.png) no-repeat;background-size:1.5em}.emojify.pizza{background:url(pizza.png) no-repeat;background-size:1.5em}.emojify.hamburger{background:url(hamburger.png) no-repeat;background-size:1.5em}.emojify.fries{background:url(fries.png) no-repeat;background-size:1.5em}.emojify.poultry_leg{background:url(poultry_leg.png) no-repeat;background-size:1.5em}.emojify.meat_on_bone{background:url(meat_on_bone.png) no-repeat;background-size:1.5em}.emojify.spaghetti{background:url(spaghetti.png) no-repeat;background-size:1.5em}.emojify.curry{background:url(curry.png) no-repeat;background-size:1.5em}.emojify.fried_shrimp{background:url(fried_shrimp.png) no-repeat;background-size:1.5em}.emojify.bento{background:url(bento.png) no-repeat;background-size:1.5em}.emojify.sushi{background:url(sushi.png) no-repeat;background-size:1.5em}.emojify.fish_cake{background:url(fish_cake.png) no-repeat;background-size:1.5em}.emojify.rice_ball{background:url(rice_ball.png) no-repeat;background-size:1.5em}.emojify.rice_cracker{background:url(rice_cracker.png) no-repeat;background-size:1.5em}.emojify.rice{background:url(rice.png) no-repeat;background-size:1.5em}.emojify.ramen{background:url(ramen.png) no-repeat;background-size:1.5em}.emojify.stew{background:url(stew.png) no-repeat;background-size:1.5em}.emojify.oden{background:url(oden.png) no-repeat;background-size:1.5em}.emojify.dango{background:url(dango.png) no-repeat;background-size:1.5em}.emojify.egg{background:url(egg.png) no-repeat;background-size:1.5em}.emojify.bread{background:url(bread.png) no-repeat;background-size:1.5em}.emojify.doughnut{background:url(doughnut.png) no-repeat;background-size:1.5em}.emojify.custard{background:url(custard.png) no-repeat;background-size:1.5em}.emojify.icecream{background:url(icecream.png) no-repeat;background-size:1.5em}.emojify.ice_cream{background:url(ice_cream.png) no-repeat;background-size:1.5em}.emojify.shaved_ice{background:url(shaved_ice.png) no-repeat;background-size:1.5em}.emojify.birthday{background:url(birthday.png) no-repeat;background-size:1.5em}.emojify.cake{background:url(cake.png) no-repeat;background-size:1.5em}.emojify.cookie{background:url(cookie.png) no-repeat;background-size:1.5em}.emojify.chocolate_bar{background:url(chocolate_bar.png) no-repeat;background-size:1.5em}.emojify.candy{background:url(candy.png) no-repeat;background-size:1.5em}.emojify.lollipop{background:url(lollipop.png) no-repeat;background-size:1.5em}.emojify.honey_pot{background:url(honey_pot.png) no-repeat;background-size:1.5em}.emojify.apple{background:url(apple.png) no-repeat;background-size:1.5em}.emojify.green_apple{background:url(green_apple.png) no-repeat;background-size:1.5em}.emojify.tangerine{background:url(tangerine.png) no-repeat;background-size:1.5em}.emojify.lemon{background:url(lemon.png) no-repeat;background-size:1.5em}.emojify.cherries{background:url(cherries.png) no-repeat;background-size:1.5em}.emojify.grapes{background:url(grapes.png) no-repeat;background-size:1.5em}.emojify.watermelon{background:url(watermelon.png) no-repeat;background-size:1.5em}.emojify.strawberry{background:url(strawberry.png) no-repeat;background-size:1.5em}.emojify.peach{background:url(peach.png) no-repeat;background-size:1.5em}.emojify.melon{background:url(melon.png) no-repeat;background-size:1.5em}.emojify.banana{background:url(banana.png) no-repeat;background-size:1.5em}.emojify.pear{background:url(pear.png) no-repeat;background-size:1.5em}.emojify.pineapple{background:url(pineapple.png) no-repeat;background-size:1.5em}.emojify.sweet_potato{background:url(sweet_potato.png) no-repeat;background-size:1.5em}.emojify.eggplant{background:url(eggplant.png) no-repeat;background-size:1.5em}.emojify.tomato{background:url(tomato.png) no-repeat;background-size:1.5em}.emojify.corn{background:url(corn.png) no-repeat;background-size:1.5em}.emojify.onezeronine{background:url(onezeronine.png) no-repeat;background-size:1.5em}.emojify.house{background:url(house.png) no-repeat;background-size:1.5em}.emojify.house_with_garden{background:url(house_with_garden.png) no-repeat;background-size:1.5em}.emojify.school{background:url(school.png) no-repeat;background-size:1.5em}.emojify.office{background:url(office.png) no-repeat;background-size:1.5em}.emojify.post_office{background:url(post_office.png) no-repeat;background-size:1.5em}.emojify.hospital{background:url(hospital.png) no-repeat;background-size:1.5em}.emojify.bank{background:url(bank.png) no-repeat;background-size:1.5em}.emojify.convenience_store{background:url(convenience_store.png) no-repeat;background-size:1.5em}.emojify.love_hotel{background:url(love_hotel.png) no-repeat;background-size:1.5em}.emojify.hotel{background:url(hotel.png) no-repeat;background-size:1.5em}.emojify.wedding{background:url(wedding.png) no-repeat;background-size:1.5em}.emojify.church{background:url(church.png) no-repeat;background-size:1.5em}.emojify.department_store{background:url(department_store.png) no-repeat;background-size:1.5em}.emojify.european_post_office{background:url(european_post_office.png) no-repeat;background-size:1.5em}.emojify.city_sunrise{background:url(city_sunrise.png) no-repeat;background-size:1.5em}.emojify.city_sunset{background:url(city_sunset.png) no-repeat;background-size:1.5em}.emojify.japanese_castle{background:url(japanese_castle.png) no-repeat;background-size:1.5em}.emojify.european_castle{background:url(european_castle.png) no-repeat;background-size:1.5em}.emojify.tent{background:url(tent.png) no-repeat;background-size:1.5em}.emojify.factory{background:url(factory.png) no-repeat;background-size:1.5em}.emojify.tokyo_tower{background:url(tokyo_tower.png) no-repeat;background-size:1.5em}.emojify.japan{background:url(japan.png) no-repeat;background-size:1.5em}.emojify.mount_fuji{background:url(mount_fuji.png) no-repeat;background-size:1.5em}.emojify.sunrise_over_mountains{background:url(sunrise_over_mountains.png) no-repeat;background-size:1.5em}.emojify.sunrise{background:url(sunrise.png) no-repeat;background-size:1.5em}.emojify.stars{background:url(stars.png) no-repeat;background-size:1.5em}.emojify.statue_of_liberty{background:url(statue_of_liberty.png) no-repeat;background-size:1.5em}.emojify.bridge_at_night{background:url(bridge_at_night.png) no-repeat;background-size:1.5em}.emojify.carousel_horse{background:url(carousel_horse.png) no-repeat;background-size:1.5em}.emojify.rainbow{background:url(rainbow.png) no-repeat;background-size:1.5em}.emojify.ferris_wheel{background:url(ferris_wheel.png) no-repeat;background-size:1.5em}.emojify.fountain{background:url(fountain.png) no-repeat;background-size:1.5em}.emojify.roller_coaster{background:url(roller_coaster.png) no-repeat;background-size:1.5em}.emojify.ship{background:url(ship.png) no-repeat;background-size:1.5em}.emojify.speedboat{background:url(speedboat.png) no-repeat;background-size:1.5em}.emojify.boat{background:url(boat.png) no-repeat;background-size:1.5em}.emojify.sailboat{background:url(sailboat.png) no-repeat;background-size:1.5em}.emojify.rowboat{background:url(rowboat.png) no-repeat;background-size:1.5em}.emojify.anchor{background:url(anchor.png) no-repeat;background-size:1.5em}.emojify.rocket{background:url(rocket.png) no-repeat;background-size:1.5em}.emojify.airplane{background:url(airplane.png) no-repeat;background-size:1.5em}.emojify.helicopter{background:url(helicopter.png) no-repeat;background-size:1.5em}.emojify.steam_locomotive{background:url(steam_locomotive.png) no-repeat;background-size:1.5em}.emojify.tram{background:url(tram.png) no-repeat;background-size:1.5em}.emojify.mountain_railway{background:url(mountain_railway.png) no-repeat;background-size:1.5em}.emojify.bike{background:url(bike.png) no-repeat;background-size:1.5em}.emojify.aerial_tramway{background:url(aerial_tramway.png) no-repeat;background-size:1.5em}.emojify.suspension_railway{background:url(suspension_railway.png) no-repeat;background-size:1.5em}.emojify.mountain_cableway{background:url(mountain_cableway.png) no-repeat;background-size:1.5em}.emojify.tractor{background:url(tractor.png) no-repeat;background-size:1.5em}.emojify.blue_car{background:url(blue_car.png) no-repeat;background-size:1.5em}.emojify.oncoming_automobile{background:url(oncoming_automobile.png) no-repeat;background-size:1.5em}.emojify.car{background:url(car.png) no-repeat;background-size:1.5em}.emojify.red_car{background:url(red_car.png) no-repeat;background-size:1.5em}.emojify.taxi{background:url(taxi.png) no-repeat;background-size:1.5em}.emojify.oncoming_taxi{background:url(oncoming_taxi.png) no-repeat;background-size:1.5em}.emojify.articulated_lorry{background:url(articulated_lorry.png) no-repeat;background-size:1.5em}.emojify.bus{background:url(bus.png) no-repeat;background-size:1.5em}.emojify.oncoming_bus{background:url(oncoming_bus.png) no-repeat;background-size:1.5em}.emojify.rotating_light{background:url(rotating_light.png) no-repeat;background-size:1.5em}.emojify.police_car{background:url(police_car.png) no-repeat;background-size:1.5em}.emojify.oncoming_police_car{background:url(oncoming_police_car.png) no-repeat;background-size:1.5em}.emojify.fire_engine{background:url(fire_engine.png) no-repeat;background-size:1.5em}.emojify.ambulance{background:url(ambulance.png) no-repeat;background-size:1.5em}.emojify.minibus{background:url(minibus.png) no-repeat;background-size:1.5em}.emojify.truck{background:url(truck.png) no-repeat;background-size:1.5em}.emojify.train{background:url(train.png) no-repeat;background-size:1.5em}.emojify.station{background:url(station.png) no-repeat;background-size:1.5em}.emojify.train2{background:url(train2.png) no-repeat;background-size:1.5em}.emojify.bullettrain_front{background:url(bullettrain_front.png) no-repeat;background-size:1.5em}.emojify.bullettrain_side{background:url(bullettrain_side.png) no-repeat;background-size:1.5em}.emojify.light_rail{background:url(light_rail.png) no-repeat;background-size:1.5em}.emojify.monorail{background:url(monorail.png) no-repeat;background-size:1.5em}.emojify.railway_car{background:url(railway_car.png) no-repeat;background-size:1.5em}.emojify.trolleybus{background:url(trolleybus.png) no-repeat;background-size:1.5em}.emojify.ticket{background:url(ticket.png) no-repeat;background-size:1.5em}.emojify.fuelpump{background:url(fuelpump.png) no-repeat;background-size:1.5em}.emojify.vertical_traffic_light{background:url(vertical_traffic_light.png) no-repeat;background-size:1.5em}.emojify.traffic_light{background:url(traffic_light.png) no-repeat;background-size:1.5em}.emojify.warning{background:url(warning.png) no-repeat;background-size:1.5em}.emojify.construction{background:url(construction.png) no-repeat;background-size:1.5em}.emojify.beginner{background:url(beginner.png) no-repeat;background-size:1.5em}.emojify.atm{background:url(atm.png) no-repeat;background-size:1.5em}.emojify.slot_machine{background:url(slot_machine.png) no-repeat;background-size:1.5em}.emojify.busstop{background:url(busstop.png) no-repeat;background-size:1.5em}.emojify.barber{background:url(barber.png) no-repeat;background-size:1.5em}.emojify.hotsprings{background:url(hotsprings.png) no-repeat;background-size:1.5em}.emojify.checkered_flag{background:url(checkered_flag.png) no-repeat;background-size:1.5em}.emojify.crossed_flags{background:url(crossed_flags.png) no-repeat;background-size:1.5em}.emojify.izakaya_lantern{background:url(izakaya_lantern.png) no-repeat;background-size:1.5em}.emojify.moyai{background:url(moyai.png) no-repeat;background-size:1.5em}.emojify.circus_tent{background:url(circus_tent.png) no-repeat;background-size:1.5em}.emojify.performing_arts{background:url(performing_arts.png) no-repeat;background-size:1.5em}.emojify.round_pushpin{background:url(round_pushpin.png) no-repeat;background-size:1.5em}.emojify.triangular_flag_on_post{background:url(triangular_flag_on_post.png) no-repeat;background-size:1.5em}.emojify.jp{background:url(jp.png) no-repeat;background-size:1.5em}.emojify.kr{background:url(kr.png) no-repeat;background-size:1.5em}.emojify.cn{background:url(cn.png) no-repeat;background-size:1.5em}.emojify.us{background:url(us.png) no-repeat;background-size:1.5em}.emojify.fr{background:url(fr.png) no-repeat;background-size:1.5em}.emojify.es{background:url(es.png) no-repeat;background-size:1.5em}.emojify.it{background:url(it.png) no-repeat;background-size:1.5em}.emojify.ru{background:url(ru.png) no-repeat;background-size:1.5em}.emojify.gb{background:url(gb.png) no-repeat;background-size:1.5em}.emojify.uk{background:url(uk.png) no-repeat;background-size:1.5em}.emojify.de{background:url(de.png) no-repeat;background-size:1.5em}.emojify.one{background:url(one.png) no-repeat;background-size:1.5em}.emojify.two{background:url(two.png) no-repeat;background-size:1.5em}.emojify.three{background:url(three.png) no-repeat;background-size:1.5em}.emojify.four{background:url(four.png) no-repeat;background-size:1.5em}.emojify.five{background:url(five.png) no-repeat;background-size:1.5em}.emojify.six{background:url(six.png) no-repeat;background-size:1.5em}.emojify.seven{background:url(seven.png) no-repeat;background-size:1.5em}.emojify.eight{background:url(eight.png) no-repeat;background-size:1.5em}.emojify.nine{background:url(nine.png) no-repeat;background-size:1.5em}.emojify.keycap_ten{background:url(keycap_ten.png) no-repeat;background-size:1.5em}.emojify.onetwothreefour{background:url(onetwothreefour.png) no-repeat;background-size:1.5em}.emojify.zero{background:url(zero.png) no-repeat;background-size:1.5em}.emojify.hash{background:url(hash.png) no-repeat;background-size:1.5em}.emojify.symbols{background:url(symbols.png) no-repeat;background-size:1.5em}.emojify.arrow_backward{background:url(arrow_backward.png) no-repeat;background-size:1.5em}.emojify.arrow_down{background:url(arrow_down.png) no-repeat;background-size:1.5em}.emojify.arrow_forward{background:url(arrow_forward.png) no-repeat;background-size:1.5em}.emojify.arrow_left{background:url(arrow_left.png) no-repeat;background-size:1.5em}.emojify.capital_abcd{background:url(capital_abcd.png) no-repeat;background-size:1.5em}.emojify.abcd{background:url(abcd.png) no-repeat;background-size:1.5em}.emojify.abc{background:url(abc.png) no-repeat;background-size:1.5em}.emojify.arrow_lower_left{background:url(arrow_lower_left.png) no-repeat;background-size:1.5em}.emojify.arrow_lower_right{background:url(arrow_lower_right.png) no-repeat;background-size:1.5em}.emojify.arrow_right{background:url(arrow_right.png) no-repeat;background-size:1.5em}.emojify.arrow_up{background:url(arrow_up.png) no-repeat;background-size:1.5em}.emojify.arrow_upper_left{background:url(arrow_upper_left.png) no-repeat;background-size:1.5em}.emojify.arrow_upper_right{background:url(arrow_upper_right.png) no-repeat;background-size:1.5em}.emojify.arrow_double_down{background:url(arrow_double_down.png) no-repeat;background-size:1.5em}.emojify.arrow_double_up{background:url(arrow_double_up.png) no-repeat;background-size:1.5em}.emojify.arrow_down_small{background:url(arrow_down_small.png) no-repeat;background-size:1.5em}.emojify.arrow_heading_down{background:url(arrow_heading_down.png) no-repeat;background-size:1.5em}.emojify.arrow_heading_up{background:url(arrow_heading_up.png) no-repeat;background-size:1.5em}.emojify.leftwards_arrow_with_hook{background:url(leftwards_arrow_with_hook.png) no-repeat;background-size:1.5em}.emojify.arrow_right_hook{background:url(arrow_right_hook.png) no-repeat;background-size:1.5em}.emojify.left_right_arrow{background:url(left_right_arrow.png) no-repeat;background-size:1.5em}.emojify.arrow_up_down{background:url(arrow_up_down.png) no-repeat;background-size:1.5em}.emojify.arrow_up_small{background:url(arrow_up_small.png) no-repeat;background-size:1.5em}.emojify.arrows_clockwise{background:url(arrows_clockwise.png) no-repeat;background-size:1.5em}.emojify.arrows_counterclockwise{background:url(arrows_counterclockwise.png) no-repeat;background-size:1.5em}.emojify.rewind{background:url(rewind.png) no-repeat;background-size:1.5em}.emojify.fast_forward{background:url(fast_forward.png) no-repeat;background-size:1.5em}.emojify.information_source{background:url(information_source.png) no-repeat;background-size:1.5em}.emojify.ok{background:url(ok.png) no-repeat;background-size:1.5em}.emojify.twisted_rightwards_arrows{background:url(twisted_rightwards_arrows.png) no-repeat;background-size:1.5em}.emojify.repeat{background:url(repeat.png) no-repeat;background-size:1.5em}.emojify.repeat_one{background:url(repeat_one.png) no-repeat;background-size:1.5em}.emojify.new{background:url(new.png) no-repeat;background-size:1.5em}.emojify.top{background:url(top.png) no-repeat;background-size:1.5em}.emojify.up{background:url(up.png) no-repeat;background-size:1.5em}.emojify.cool{background:url(cool.png) no-repeat;background-size:1.5em}.emojify.free{background:url(free.png) no-repeat;background-size:1.5em}.emojify.ng{background:url(ng.png) no-repeat;background-size:1.5em}.emojify.cinema{background:url(cinema.png) no-repeat;background-size:1.5em}.emojify.koko{background:url(koko.png) no-repeat;background-size:1.5em}.emojify.signal_strength{background:url(signal_strength.png) no-repeat;background-size:1.5em}.emojify.u5272{background:url(u5272.png) no-repeat;background-size:1.5em}.emojify.u5408{background:url(u5408.png) no-repeat;background-size:1.5em}.emojify.u55b6{background:url(u55b6.png) no-repeat;background-size:1.5em}.emojify.u6307{background:url(u6307.png) no-repeat;background-size:1.5em}.emojify.u6708{background:url(u6708.png) no-repeat;background-size:1.5em}.emojify.u6709{background:url(u6709.png) no-repeat;background-size:1.5em}.emojify.u6e80{background:url(u6e80.png) no-repeat;background-size:1.5em}.emojify.u7121{background:url(u7121.png) no-repeat;background-size:1.5em}.emojify.u7533{background:url(u7533.png) no-repeat;background-size:1.5em}.emojify.u7a7a{background:url(u7a7a.png) no-repeat;background-size:1.5em}.emojify.u7981{background:url(u7981.png) no-repeat;background-size:1.5em}.emojify.sa{background:url(sa.png) no-repeat;background-size:1.5em}.emojify.restroom{background:url(restroom.png) no-repeat;background-size:1.5em}.emojify.mens{background:url(mens.png) no-repeat;background-size:1.5em}.emojify.womens{background:url(womens.png) no-repeat;background-size:1.5em}.emojify.baby_symbol{background:url(baby_symbol.png) no-repeat;background-size:1.5em}.emojify.no_smoking{background:url(no_smoking.png) no-repeat;background-size:1.5em}.emojify.parking{background:url(parking.png) no-repeat;background-size:1.5em}.emojify.wheelchair{background:url(wheelchair.png) no-repeat;background-size:1.5em}.emojify.metro{background:url(metro.png) no-repeat;background-size:1.5em}.emojify.baggage_claim{background:url(baggage_claim.png) no-repeat;background-size:1.5em}.emojify.accept{background:url(accept.png) no-repeat;background-size:1.5em}.emojify.wc{background:url(wc.png) no-repeat;background-size:1.5em}.emojify.potable_water{background:url(potable_water.png) no-repeat;background-size:1.5em}.emojify.put_litter_in_its_place{background:url(put_litter_in_its_place.png) no-repeat;background-size:1.5em}.emojify.secret{background:url(secret.png) no-repeat;background-size:1.5em}.emojify.congratulations{background:url(congratulations.png) no-repeat;background-size:1.5em}.emojify.m{background:url(m.png) no-repeat;background-size:1.5em}.emojify.passport_control{background:url(passport_control.png) no-repeat;background-size:1.5em}.emojify.left_luggage{background:url(left_luggage.png) no-repeat;background-size:1.5em}.emojify.customs{background:url(customs.png) no-repeat;background-size:1.5em}.emojify.ideograph_advantage{background:url(ideograph_advantage.png) no-repeat;background-size:1.5em}.emojify.cl{background:url(cl.png) no-repeat;background-size:1.5em}.emojify.sos{background:url(sos.png) no-repeat;background-size:1.5em}.emojify.id{background:url(id.png) no-repeat;background-size:1.5em}.emojify.no_entry_sign{background:url(no_entry_sign.png) no-repeat;background-size:1.5em}.emojify.underage{background:url(underage.png) no-repeat;background-size:1.5em}.emojify.no_mobile_phones{background:url(no_mobile_phones.png) no-repeat;background-size:1.5em}.emojify.do_not_litter{background:url(do_not_litter.png) no-repeat;background-size:1.5em}.emojify.non-potable_water{background:url(non-potable_water.png) no-repeat;background-size:1.5em}.emojify.no_bicycles{background:url(no_bicycles.png) no-repeat;background-size:1.5em}.emojify.no_pedestrians{background:url(no_pedestrians.png) no-repeat;background-size:1.5em}.emojify.children_crossing{background:url(children_crossing.png) no-repeat;background-size:1.5em}.emojify.no_entry{background:url(no_entry.png) no-repeat;background-size:1.5em}.emojify.eight_spoked_asterisk{background:url(eight_spoked_asterisk.png) no-repeat;background-size:1.5em}.emojify.eight_pointed_black_star{background:url(eight_pointed_black_star.png) no-repeat;background-size:1.5em}.emojify.heart_decoration{background:url(heart_decoration.png) no-repeat;background-size:1.5em}.emojify.vs{background:url(vs.png) no-repeat;background-size:1.5em}.emojify.vibration_mode{background:url(vibration_mode.png) no-repeat;background-size:1.5em}.emojify.mobile_phone_off{background:url(mobile_phone_off.png) no-repeat;background-size:1.5em}.emojify.chart{background:url(chart.png) no-repeat;background-size:1.5em}.emojify.currency_exchange{background:url(currency_exchange.png) no-repeat;background-size:1.5em}.emojify.aries{background:url(aries.png) no-repeat;background-size:1.5em}.emojify.taurus{background:url(taurus.png) no-repeat;background-size:1.5em}.emojify.gemini{background:url(gemini.png) no-repeat;background-size:1.5em}.emojify.cancer{background:url(cancer.png) no-repeat;background-size:1.5em}.emojify.leo{background:url(leo.png) no-repeat;background-size:1.5em}.emojify.virgo{background:url(virgo.png) no-repeat;background-size:1.5em}.emojify.libra{background:url(libra.png) no-repeat;background-size:1.5em}.emojify.scorpius{background:url(scorpius.png) no-repeat;background-size:1.5em}.emojify.sagittarius{background:url(sagittarius.png) no-repeat;background-size:1.5em}.emojify.capricorn{background:url(capricorn.png) no-repeat;background-size:1.5em}.emojify.aquarius{background:url(aquarius.png) no-repeat;background-size:1.5em}.emojify.pisces{background:url(pisces.png) no-repeat;background-size:1.5em}.emojify.ophiuchus{background:url(ophiuchus.png) no-repeat;background-size:1.5em}.emojify.six_pointed_star{background:url(six_pointed_star.png) no-repeat;background-size:1.5em}.emojify.negative_squared_cross_mark{background:url(negative_squared_cross_mark.png) no-repeat;background-size:1.5em}.emojify.a{background:url(a.png) no-repeat;background-size:1.5em}.emojify.b{background:url(b.png) no-repeat;background-size:1.5em}.emojify.ab{background:url(ab.png) no-repeat;background-size:1.5em}.emojify.o2{background:url(o2.png) no-repeat;background-size:1.5em}.emojify.diamond_shape_with_a_dot_inside{background:url(diamond_shape_with_a_dot_inside.png) no-repeat;background-size:1.5em}.emojify.recycle{background:url(recycle.png) no-repeat;background-size:1.5em}.emojify.end{background:url(end.png) no-repeat;background-size:1.5em}.emojify.on{background:url(on.png) no-repeat;background-size:1.5em}.emojify.soon{background:url(soon.png) no-repeat;background-size:1.5em}.emojify.clock1{background:url(clock1.png) no-repeat;background-size:1.5em}.emojify.clock130{background:url(clock130.png) no-repeat;background-size:1.5em}.emojify.clock10{background:url(clock10.png) no-repeat;background-size:1.5em}.emojify.clock1030{background:url(clock1030.png) no-repeat;background-size:1.5em}.emojify.clock11{background:url(clock11.png) no-repeat;background-size:1.5em}.emojify.clock1130{background:url(clock1130.png) no-repeat;background-size:1.5em}.emojify.clock12{background:url(clock12.png) no-repeat;background-size:1.5em}.emojify.clock1230{background:url(clock1230.png) no-repeat;background-size:1.5em}.emojify.clock2{background:url(clock2.png) no-repeat;background-size:1.5em}.emojify.clock230{background:url(clock230.png) no-repeat;background-size:1.5em}.emojify.clock3{background:url(clock3.png) no-repeat;background-size:1.5em}.emojify.clock330{background:url(clock330.png) no-repeat;background-size:1.5em}.emojify.clock4{background:url(clock4.png) no-repeat;background-size:1.5em}.emojify.clock430{background:url(clock430.png) no-repeat;background-size:1.5em}.emojify.clock5{background:url(clock5.png) no-repeat;background-size:1.5em}.emojify.clock530{background:url(clock530.png) no-repeat;background-size:1.5em}.emojify.clock6{background:url(clock6.png) no-repeat;background-size:1.5em}.emojify.clock630{background:url(clock630.png) no-repeat;background-size:1.5em}.emojify.clock7{background:url(clock7.png) no-repeat;background-size:1.5em}.emojify.clock730{background:url(clock730.png) no-repeat;background-size:1.5em}.emojify.clock8{background:url(clock8.png) no-repeat;background-size:1.5em}.emojify.clock830{background:url(clock830.png) no-repeat;background-size:1.5em}.emojify.clock9{background:url(clock9.png) no-repeat;background-size:1.5em}.emojify.clock930{background:url(clock930.png) no-repeat;background-size:1.5em}.emojify.heavy_dollar_sign{background:url(heavy_dollar_sign.png) no-repeat;background-size:1.5em}.emojify.copyright{background:url(copyright.png) no-repeat;background-size:1.5em}.emojify.registered{background:url(registered.png) no-repeat;background-size:1.5em}.emojify.tm{background:url(tm.png) no-repeat;background-size:1.5em}.emojify.x{background:url(x.png) no-repeat;background-size:1.5em}.emojify.heavy_exclamation_mark{background:url(heavy_exclamation_mark.png) no-repeat;background-size:1.5em}.emojify.bangbang{background:url(bangbang.png) no-repeat;background-size:1.5em}.emojify.interrobang{background:url(interrobang.png) no-repeat;background-size:1.5em}.emojify.o{background:url(o.png) no-repeat;background-size:1.5em}.emojify.heavy_multiplication_x{background:url(heavy_multiplication_x.png) no-repeat;background-size:1.5em}.emojify.heavy_plus_sign{background:url(heavy_plus_sign.png) no-repeat;background-size:1.5em}.emojify.heavy_minus_sign{background:url(heavy_minus_sign.png) no-repeat;background-size:1.5em}.emojify.heavy_division_sign{background:url(heavy_division_sign.png) no-repeat;background-size:1.5em}.emojify.white_flower{background:url(white_flower.png) no-repeat;background-size:1.5em}.emojify.onehundred{background:url(onehundred.png) no-repeat;background-size:1.5em}.emojify.heavy_check_mark{background:url(heavy_check_mark.png) no-repeat;background-size:1.5em}.emojify.ballot_box_with_check{background:url(ballot_box_with_check.png) no-repeat;background-size:1.5em}.emojify.radio_button{background:url(radio_button.png) no-repeat;background-size:1.5em}.emojify.link{background:url(link.png) no-repeat;background-size:1.5em}.emojify.curly_loop{background:url(curly_loop.png) no-repeat;background-size:1.5em}.emojify.wavy_dash{background:url(wavy_dash.png) no-repeat;background-size:1.5em}.emojify.part_alternation_mark{background:url(part_alternation_mark.png) no-repeat;background-size:1.5em}.emojify.trident{background:url(trident.png) no-repeat;background-size:1.5em}.emojify.black_square{background:url(black_square.png) no-repeat;background-size:1.5em}.emojify.white_square{background:url(white_square.png) no-repeat;background-size:1.5em}.emojify.white_check_mark{background:url(white_check_mark.png) no-repeat;background-size:1.5em}.emojify.black_square_button{background:url(black_square_button.png) no-repeat;background-size:1.5em}.emojify.white_square_button{background:url(white_square_button.png) no-repeat;background-size:1.5em}.emojify.black_circle{background:url(black_circle.png) no-repeat;background-size:1.5em}.emojify.white_circle{background:url(white_circle.png) no-repeat;background-size:1.5em}.emojify.red_circle{background:url(red_circle.png) no-repeat;background-size:1.5em}.emojify.large_blue_circle{background:url(large_blue_circle.png) no-repeat;background-size:1.5em}.emojify.large_blue_diamond{background:url(large_blue_diamond.png) no-repeat;background-size:1.5em}.emojify.large_orange_diamond{background:url(large_orange_diamond.png) no-repeat;background-size:1.5em}.emojify.small_blue_diamond{background:url(small_blue_diamond.png) no-repeat;background-size:1.5em}.emojify.small_orange_diamond{background:url(small_orange_diamond.png) no-repeat;background-size:1.5em}.emojify.small_red_triangle{background:url(small_red_triangle.png) no-repeat;background-size:1.5em}.emojify.small_red_triangle_down{background:url(small_red_triangle_down.png) no-repeat;background-size:1.5em}.emojify.shipit{background:url(shipit.png) no-repeat;background-size:1.5em}"
  },
  {
    "path": "public/baidu_verify_SEGRBySjTy.html",
    "content": "SEGRBySjTy"
  },
  {
    "path": "public/baidu_verify_qaS2BJWI63.html",
    "content": "qaS2BJWI63"
  },
  {
    "path": "public/css/app.css",
    "content": "@import url(https://fonts.googleapis.com/css?family=Raleway:300,400,600);@charset \"UTF-8\";/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)\n *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */.label,sub,sup{vertical-align:baseline}hr,img{border:0}body,figure{margin:0}.btn-group>.btn-group,.btn-toolbar .btn,.btn-toolbar .btn-group,.btn-toolbar .input-group,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9,.dropdown-menu{float:left}.img-responsive,.img-thumbnail,.table,label{max-width:100%}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.pre-scrollable{max-height:340px}html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative}sup{top:-.5em}sub{bottom:-.25em}img{vertical-align:middle}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{blockquote,img,pre,tr{page-break-inside:avoid}*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:\" (\" attr(href) \")\"}abbr[title]:after{content:\" (\" attr(title) \")\"}a[href^=\"#\"]:after,a[href^=\"javascript:\"]:after{content:\"\"}blockquote,pre{border:1px solid #999}thead{display:table-header-group}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}.btn,.btn-danger.active,.btn-danger:active,.btn-default.active,.btn-default:active,.btn-info.active,.btn-info:active,.btn-primary.active,.btn-primary:active,.btn-warning.active,.btn-warning:active,.btn.active,.btn:active,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover,.form-control,.navbar-toggle,.open>.btn-danger.dropdown-toggle,.open>.btn-default.dropdown-toggle,.open>.btn-info.dropdown-toggle,.open>.btn-primary.dropdown-toggle,.open>.btn-warning.dropdown-toggle{background-image:none}.img-thumbnail,body{background-color:#f5f8fa}@font-face{font-family:'Glyphicons Halflings';src:url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1);src:url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.eot?f4769f9bdb7466be65088239c12046d1?#iefix) format(\"embedded-opentype\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff2?448c34a56d699c29117adc64c43affeb) format(\"woff2\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.woff?fa2772327f55d8198301fdb8bcfc8158) format(\"woff\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.ttf?e18bbf611f2a2e43afc071aa2f4e1512) format(\"truetype\"),url(/fonts/vendor/bootstrap-sass/bootstrap/glyphicons-halflings-regular.svg?89889688147bd7575d6327160d64e760#glyphicons_halflingsregular) format(\"svg\")}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:\"\\002a\"}.glyphicon-plus:before{content:\"\\002b\"}.glyphicon-eur:before,.glyphicon-euro:before{content:\"\\20ac\"}.glyphicon-minus:before{content:\"\\2212\"}.glyphicon-cloud:before{content:\"\\2601\"}.glyphicon-envelope:before{content:\"\\2709\"}.glyphicon-pencil:before{content:\"\\270f\"}.glyphicon-glass:before{content:\"\\e001\"}.glyphicon-music:before{content:\"\\e002\"}.glyphicon-search:before{content:\"\\e003\"}.glyphicon-heart:before{content:\"\\e005\"}.glyphicon-star:before{content:\"\\e006\"}.glyphicon-star-empty:before{content:\"\\e007\"}.glyphicon-user:before{content:\"\\e008\"}.glyphicon-film:before{content:\"\\e009\"}.glyphicon-th-large:before{content:\"\\e010\"}.glyphicon-th:before{content:\"\\e011\"}.glyphicon-th-list:before{content:\"\\e012\"}.glyphicon-ok:before{content:\"\\e013\"}.glyphicon-remove:before{content:\"\\e014\"}.glyphicon-zoom-in:before{content:\"\\e015\"}.glyphicon-zoom-out:before{content:\"\\e016\"}.glyphicon-off:before{content:\"\\e017\"}.glyphicon-signal:before{content:\"\\e018\"}.glyphicon-cog:before{content:\"\\e019\"}.glyphicon-trash:before{content:\"\\e020\"}.glyphicon-home:before{content:\"\\e021\"}.glyphicon-file:before{content:\"\\e022\"}.glyphicon-time:before{content:\"\\e023\"}.glyphicon-road:before{content:\"\\e024\"}.glyphicon-download-alt:before{content:\"\\e025\"}.glyphicon-download:before{content:\"\\e026\"}.glyphicon-upload:before{content:\"\\e027\"}.glyphicon-inbox:before{content:\"\\e028\"}.glyphicon-play-circle:before{content:\"\\e029\"}.glyphicon-repeat:before{content:\"\\e030\"}.glyphicon-refresh:before{content:\"\\e031\"}.glyphicon-list-alt:before{content:\"\\e032\"}.glyphicon-lock:before{content:\"\\e033\"}.glyphicon-flag:before{content:\"\\e034\"}.glyphicon-headphones:before{content:\"\\e035\"}.glyphicon-volume-off:before{content:\"\\e036\"}.glyphicon-volume-down:before{content:\"\\e037\"}.glyphicon-volume-up:before{content:\"\\e038\"}.glyphicon-qrcode:before{content:\"\\e039\"}.glyphicon-barcode:before{content:\"\\e040\"}.glyphicon-tag:before{content:\"\\e041\"}.glyphicon-tags:before{content:\"\\e042\"}.glyphicon-book:before{content:\"\\e043\"}.glyphicon-bookmark:before{content:\"\\e044\"}.glyphicon-print:before{content:\"\\e045\"}.glyphicon-camera:before{content:\"\\e046\"}.glyphicon-font:before{content:\"\\e047\"}.glyphicon-bold:before{content:\"\\e048\"}.glyphicon-italic:before{content:\"\\e049\"}.glyphicon-text-height:before{content:\"\\e050\"}.glyphicon-text-width:before{content:\"\\e051\"}.glyphicon-align-left:before{content:\"\\e052\"}.glyphicon-align-center:before{content:\"\\e053\"}.glyphicon-align-right:before{content:\"\\e054\"}.glyphicon-align-justify:before{content:\"\\e055\"}.glyphicon-list:before{content:\"\\e056\"}.glyphicon-indent-left:before{content:\"\\e057\"}.glyphicon-indent-right:before{content:\"\\e058\"}.glyphicon-facetime-video:before{content:\"\\e059\"}.glyphicon-picture:before{content:\"\\e060\"}.glyphicon-map-marker:before{content:\"\\e062\"}.glyphicon-adjust:before{content:\"\\e063\"}.glyphicon-tint:before{content:\"\\e064\"}.glyphicon-edit:before{content:\"\\e065\"}.glyphicon-share:before{content:\"\\e066\"}.glyphicon-check:before{content:\"\\e067\"}.glyphicon-move:before{content:\"\\e068\"}.glyphicon-step-backward:before{content:\"\\e069\"}.glyphicon-fast-backward:before{content:\"\\e070\"}.glyphicon-backward:before{content:\"\\e071\"}.glyphicon-play:before{content:\"\\e072\"}.glyphicon-pause:before{content:\"\\e073\"}.glyphicon-stop:before{content:\"\\e074\"}.glyphicon-forward:before{content:\"\\e075\"}.glyphicon-fast-forward:before{content:\"\\e076\"}.glyphicon-step-forward:before{content:\"\\e077\"}.glyphicon-eject:before{content:\"\\e078\"}.glyphicon-chevron-left:before{content:\"\\e079\"}.glyphicon-chevron-right:before{content:\"\\e080\"}.glyphicon-plus-sign:before{content:\"\\e081\"}.glyphicon-minus-sign:before{content:\"\\e082\"}.glyphicon-remove-sign:before{content:\"\\e083\"}.glyphicon-ok-sign:before{content:\"\\e084\"}.glyphicon-question-sign:before{content:\"\\e085\"}.glyphicon-info-sign:before{content:\"\\e086\"}.glyphicon-screenshot:before{content:\"\\e087\"}.glyphicon-remove-circle:before{content:\"\\e088\"}.glyphicon-ok-circle:before{content:\"\\e089\"}.glyphicon-ban-circle:before{content:\"\\e090\"}.glyphicon-arrow-left:before{content:\"\\e091\"}.glyphicon-arrow-right:before{content:\"\\e092\"}.glyphicon-arrow-up:before{content:\"\\e093\"}.glyphicon-arrow-down:before{content:\"\\e094\"}.glyphicon-share-alt:before{content:\"\\e095\"}.glyphicon-resize-full:before{content:\"\\e096\"}.glyphicon-resize-small:before{content:\"\\e097\"}.glyphicon-exclamation-sign:before{content:\"\\e101\"}.glyphicon-gift:before{content:\"\\e102\"}.glyphicon-leaf:before{content:\"\\e103\"}.glyphicon-fire:before{content:\"\\e104\"}.glyphicon-eye-open:before{content:\"\\e105\"}.glyphicon-eye-close:before{content:\"\\e106\"}.glyphicon-warning-sign:before{content:\"\\e107\"}.glyphicon-plane:before{content:\"\\e108\"}.glyphicon-calendar:before{content:\"\\e109\"}.glyphicon-random:before{content:\"\\e110\"}.glyphicon-comment:before{content:\"\\e111\"}.glyphicon-magnet:before{content:\"\\e112\"}.glyphicon-chevron-up:before{content:\"\\e113\"}.glyphicon-chevron-down:before{content:\"\\e114\"}.glyphicon-retweet:before{content:\"\\e115\"}.glyphicon-shopping-cart:before{content:\"\\e116\"}.glyphicon-folder-close:before{content:\"\\e117\"}.glyphicon-folder-open:before{content:\"\\e118\"}.glyphicon-resize-vertical:before{content:\"\\e119\"}.glyphicon-resize-horizontal:before{content:\"\\e120\"}.glyphicon-hdd:before{content:\"\\e121\"}.glyphicon-bullhorn:before{content:\"\\e122\"}.glyphicon-bell:before{content:\"\\e123\"}.glyphicon-certificate:before{content:\"\\e124\"}.glyphicon-thumbs-up:before{content:\"\\e125\"}.glyphicon-thumbs-down:before{content:\"\\e126\"}.glyphicon-hand-right:before{content:\"\\e127\"}.glyphicon-hand-left:before{content:\"\\e128\"}.glyphicon-hand-up:before{content:\"\\e129\"}.glyphicon-hand-down:before{content:\"\\e130\"}.glyphicon-circle-arrow-right:before{content:\"\\e131\"}.glyphicon-circle-arrow-left:before{content:\"\\e132\"}.glyphicon-circle-arrow-up:before{content:\"\\e133\"}.glyphicon-circle-arrow-down:before{content:\"\\e134\"}.glyphicon-globe:before{content:\"\\e135\"}.glyphicon-wrench:before{content:\"\\e136\"}.glyphicon-tasks:before{content:\"\\e137\"}.glyphicon-filter:before{content:\"\\e138\"}.glyphicon-briefcase:before{content:\"\\e139\"}.glyphicon-fullscreen:before{content:\"\\e140\"}.glyphicon-dashboard:before{content:\"\\e141\"}.glyphicon-paperclip:before{content:\"\\e142\"}.glyphicon-heart-empty:before{content:\"\\e143\"}.glyphicon-link:before{content:\"\\e144\"}.glyphicon-phone:before{content:\"\\e145\"}.glyphicon-pushpin:before{content:\"\\e146\"}.glyphicon-usd:before{content:\"\\e148\"}.glyphicon-gbp:before{content:\"\\e149\"}.glyphicon-sort:before{content:\"\\e150\"}.glyphicon-sort-by-alphabet:before{content:\"\\e151\"}.glyphicon-sort-by-alphabet-alt:before{content:\"\\e152\"}.glyphicon-sort-by-order:before{content:\"\\e153\"}.glyphicon-sort-by-order-alt:before{content:\"\\e154\"}.glyphicon-sort-by-attributes:before{content:\"\\e155\"}.glyphicon-sort-by-attributes-alt:before{content:\"\\e156\"}.glyphicon-unchecked:before{content:\"\\e157\"}.glyphicon-expand:before{content:\"\\e158\"}.glyphicon-collapse-down:before{content:\"\\e159\"}.glyphicon-collapse-up:before{content:\"\\e160\"}.glyphicon-log-in:before{content:\"\\e161\"}.glyphicon-flash:before{content:\"\\e162\"}.glyphicon-log-out:before{content:\"\\e163\"}.glyphicon-new-window:before{content:\"\\e164\"}.glyphicon-record:before{content:\"\\e165\"}.glyphicon-save:before{content:\"\\e166\"}.glyphicon-open:before{content:\"\\e167\"}.glyphicon-saved:before{content:\"\\e168\"}.glyphicon-import:before{content:\"\\e169\"}.glyphicon-export:before{content:\"\\e170\"}.glyphicon-send:before{content:\"\\e171\"}.glyphicon-floppy-disk:before{content:\"\\e172\"}.glyphicon-floppy-saved:before{content:\"\\e173\"}.glyphicon-floppy-remove:before{content:\"\\e174\"}.glyphicon-floppy-save:before{content:\"\\e175\"}.glyphicon-floppy-open:before{content:\"\\e176\"}.glyphicon-credit-card:before{content:\"\\e177\"}.glyphicon-transfer:before{content:\"\\e178\"}.glyphicon-cutlery:before{content:\"\\e179\"}.glyphicon-header:before{content:\"\\e180\"}.glyphicon-compressed:before{content:\"\\e181\"}.glyphicon-earphone:before{content:\"\\e182\"}.glyphicon-phone-alt:before{content:\"\\e183\"}.glyphicon-tower:before{content:\"\\e184\"}.glyphicon-stats:before{content:\"\\e185\"}.glyphicon-sd-video:before{content:\"\\e186\"}.glyphicon-hd-video:before{content:\"\\e187\"}.glyphicon-subtitles:before{content:\"\\e188\"}.glyphicon-sound-stereo:before{content:\"\\e189\"}.glyphicon-sound-dolby:before{content:\"\\e190\"}.glyphicon-sound-5-1:before{content:\"\\e191\"}.glyphicon-sound-6-1:before{content:\"\\e192\"}.glyphicon-sound-7-1:before{content:\"\\e193\"}.glyphicon-copyright-mark:before{content:\"\\e194\"}.glyphicon-registration-mark:before{content:\"\\e195\"}.glyphicon-cloud-download:before{content:\"\\e197\"}.glyphicon-cloud-upload:before{content:\"\\e198\"}.glyphicon-tree-conifer:before{content:\"\\e199\"}.glyphicon-tree-deciduous:before{content:\"\\e200\"}.glyphicon-cd:before{content:\"\\e201\"}.glyphicon-save-file:before{content:\"\\e202\"}.glyphicon-open-file:before{content:\"\\e203\"}.glyphicon-level-up:before{content:\"\\e204\"}.glyphicon-copy:before{content:\"\\e205\"}.glyphicon-paste:before{content:\"\\e206\"}.glyphicon-alert:before{content:\"\\e209\"}.glyphicon-equalizer:before{content:\"\\e210\"}.glyphicon-king:before{content:\"\\e211\"}.glyphicon-queen:before{content:\"\\e212\"}.glyphicon-pawn:before{content:\"\\e213\"}.glyphicon-bishop:before{content:\"\\e214\"}.glyphicon-knight:before{content:\"\\e215\"}.glyphicon-baby-formula:before{content:\"\\e216\"}.glyphicon-tent:before{content:\"\\26fa\"}.glyphicon-blackboard:before{content:\"\\e218\"}.glyphicon-bed:before{content:\"\\e219\"}.glyphicon-apple:before{content:\"\\f8ff\"}.glyphicon-erase:before{content:\"\\e221\"}.glyphicon-hourglass:before{content:\"\\231b\"}.glyphicon-lamp:before{content:\"\\e223\"}.glyphicon-duplicate:before{content:\"\\e224\"}.glyphicon-piggy-bank:before{content:\"\\e225\"}.glyphicon-scissors:before{content:\"\\e226\"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:\"\\e227\"}.glyphicon-jpy:before,.glyphicon-yen:before{content:\"\\00a5\"}.glyphicon-rub:before,.glyphicon-ruble:before{content:\"\\20bd\"}.glyphicon-scale:before{content:\"\\e230\"}.glyphicon-ice-lolly:before{content:\"\\e231\"}.glyphicon-ice-lolly-tasted:before{content:\"\\e232\"}.glyphicon-education:before{content:\"\\e233\"}.glyphicon-option-horizontal:before{content:\"\\e234\"}.glyphicon-option-vertical:before{content:\"\\e235\"}.glyphicon-menu-hamburger:before{content:\"\\e236\"}.glyphicon-modal-window:before{content:\"\\e237\"}.glyphicon-oil:before{content:\"\\e238\"}.glyphicon-grain:before{content:\"\\e239\"}.glyphicon-sunglasses:before{content:\"\\e240\"}.glyphicon-text-size:before{content:\"\\e241\"}.glyphicon-text-color:before{content:\"\\e242\"}.glyphicon-text-background:before{content:\"\\e243\"}.glyphicon-object-align-top:before{content:\"\\e244\"}.glyphicon-object-align-bottom:before{content:\"\\e245\"}.glyphicon-object-align-horizontal:before{content:\"\\e246\"}.glyphicon-object-align-left:before{content:\"\\e247\"}.glyphicon-object-align-vertical:before{content:\"\\e248\"}.glyphicon-object-align-right:before{content:\"\\e249\"}.glyphicon-triangle-right:before{content:\"\\e250\"}.glyphicon-triangle-left:before{content:\"\\e251\"}.glyphicon-triangle-bottom:before{content:\"\\e252\"}.glyphicon-triangle-top:before{content:\"\\e253\"}.glyphicon-console:before{content:\"\\e254\"}.glyphicon-superscript:before{content:\"\\e255\"}.glyphicon-subscript:before{content:\"\\e256\"}.glyphicon-menu-left:before{content:\"\\e257\"}.glyphicon-menu-right:before{content:\"\\e258\"}.glyphicon-menu-down:before{content:\"\\e259\"}.glyphicon-menu-up:before{content:\"\\e260\"}*,:after,:before{box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:transparent}body{font-family:Raleway,sans-serif;font-size:14px;line-height:1.6;color:#636b6f}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#3097D1;text-decoration:none}a:focus,a:hover{color:#216a94;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.img-responsive{display:block;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.6;border:1px solid #ddd;border-radius:4px;transition:all .2s ease-in-out;display:inline-block;height:auto}.img-circle{border-radius:50%}hr{margin-top:22px;margin-bottom:22px;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:22px;margin-bottom:11px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:11px;margin-bottom:11px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 11px}.lead{margin-bottom:22px;font-size:16px;font-weight:300;line-height:1.4}dt,kbd kbd,label{font-weight:700}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.list-inline,.list-unstyled{padding-left:0;list-style:none}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.initialism,.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#3097D1}a.text-primary:focus,a.text-primary:hover{color:#2579a9}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#3097D1}a.bg-primary:focus,a.bg-primary:hover{background-color:#2579a9}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}pre code,table{background-color:transparent}.page-header{padding-bottom:10px;margin:44px 0 22px;border-bottom:1px solid #eee}dl,ol,ul{margin-top:0}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child,ol ol,ol ul,ul ol,ul ul{margin-bottom:0}address,dl{margin-bottom:22px}ol,ul{margin-bottom:11px}.list-inline{margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dd,dt{line-height:1.6}dd{margin-left:0}.dl-horizontal dd:after,.dl-horizontal dd:before{content:\" \";display:table}.dl-horizontal dd:after{clear:both}@media (min-width:768px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}.container{width:750px}}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dropdown-menu>li>a,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%}blockquote{padding:11px 22px;margin:0 0 22px;font-size:17.5px;border-left:5px solid #eee}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.6;color:#777}legend,pre{color:#333}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\\2014 \\00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}code,kbd{padding:2px 4px;font-size:90%}caption,th{text-align:left}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\\00A0 \\2014'}address{font-style:normal;line-height:1.6}code,kbd,pre,samp{font-family:Menlo,Monaco,Consolas,\"Courier New\",monospace}code{color:#c7254e;background-color:#f9f2f4;border-radius:4px}kbd{color:#fff;background-color:#333;border-radius:3px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;box-shadow:none}pre{display:block;padding:10.5px;margin:0 0 11px;font-size:13px;line-height:1.6;word-break:break-all;word-wrap:break-word;background-color:#f5f5f5;border:1px solid #ccc;border-radius:4px}.container-fluid:after,.container-fluid:before,.container:after,.container:before,.row:after,.row:before{display:table;content:\" \"}.container,.container-fluid{margin-right:auto;margin-left:auto}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;border-radius:0}.container,.container-fluid{padding-left:15px;padding-right:15px}.pre-scrollable{overflow-y:scroll}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1{width:8.33333333%}.col-xs-2{width:16.66666667%}.col-xs-3{width:25%}.col-xs-4{width:33.33333333%}.col-xs-5{width:41.66666667%}.col-xs-6{width:50%}.col-xs-7{width:58.33333333%}.col-xs-8{width:66.66666667%}.col-xs-9{width:75%}.col-xs-10{width:83.33333333%}.col-xs-11{width:91.66666667%}.col-xs-12{width:100%}.col-xs-pull-0{right:auto}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-3{right:25%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-6{right:50%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-9{right:75%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-12{right:100%}.col-xs-push-0{left:auto}.col-xs-push-1{left:8.33333333%}.col-xs-push-2{left:16.66666667%}.col-xs-push-3{left:25%}.col-xs-push-4{left:33.33333333%}.col-xs-push-5{left:41.66666667%}.col-xs-push-6{left:50%}.col-xs-push-7{left:58.33333333%}.col-xs-push-8{left:66.66666667%}.col-xs-push-9{left:75%}.col-xs-push-10{left:83.33333333%}.col-xs-push-11{left:91.66666667%}.col-xs-push-12{left:100%}.col-xs-offset-0{margin-left:0}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-12{margin-left:100%}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-1{width:8.33333333%}.col-sm-2{width:16.66666667%}.col-sm-3{width:25%}.col-sm-4{width:33.33333333%}.col-sm-5{width:41.66666667%}.col-sm-6{width:50%}.col-sm-7{width:58.33333333%}.col-sm-8{width:66.66666667%}.col-sm-9{width:75%}.col-sm-10{width:83.33333333%}.col-sm-11{width:91.66666667%}.col-sm-12{width:100%}.col-sm-pull-0{right:auto}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-3{right:25%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-6{right:50%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-9{right:75%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-12{right:100%}.col-sm-push-0{left:auto}.col-sm-push-1{left:8.33333333%}.col-sm-push-2{left:16.66666667%}.col-sm-push-3{left:25%}.col-sm-push-4{left:33.33333333%}.col-sm-push-5{left:41.66666667%}.col-sm-push-6{left:50%}.col-sm-push-7{left:58.33333333%}.col-sm-push-8{left:66.66666667%}.col-sm-push-9{left:75%}.col-sm-push-10{left:83.33333333%}.col-sm-push-11{left:91.66666667%}.col-sm-push-12{left:100%}.col-sm-offset-0{margin-left:0}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-12{margin-left:100%}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-1{width:8.33333333%}.col-md-2{width:16.66666667%}.col-md-3{width:25%}.col-md-4{width:33.33333333%}.col-md-5{width:41.66666667%}.col-md-6{width:50%}.col-md-7{width:58.33333333%}.col-md-8{width:66.66666667%}.col-md-9{width:75%}.col-md-10{width:83.33333333%}.col-md-11{width:91.66666667%}.col-md-12{width:100%}.col-md-pull-0{right:auto}.col-md-pull-1{right:8.33333333%}.col-md-pull-2{right:16.66666667%}.col-md-pull-3{right:25%}.col-md-pull-4{right:33.33333333%}.col-md-pull-5{right:41.66666667%}.col-md-pull-6{right:50%}.col-md-pull-7{right:58.33333333%}.col-md-pull-8{right:66.66666667%}.col-md-pull-9{right:75%}.col-md-pull-10{right:83.33333333%}.col-md-pull-11{right:91.66666667%}.col-md-pull-12{right:100%}.col-md-push-0{left:auto}.col-md-push-1{left:8.33333333%}.col-md-push-2{left:16.66666667%}.col-md-push-3{left:25%}.col-md-push-4{left:33.33333333%}.col-md-push-5{left:41.66666667%}.col-md-push-6{left:50%}.col-md-push-7{left:58.33333333%}.col-md-push-8{left:66.66666667%}.col-md-push-9{left:75%}.col-md-push-10{left:83.33333333%}.col-md-push-11{left:91.66666667%}.col-md-push-12{left:100%}.col-md-offset-0{margin-left:0}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-3{margin-left:25%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-6{margin-left:50%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-9{margin-left:75%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-12{margin-left:100%}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-1{width:8.33333333%}.col-lg-2{width:16.66666667%}.col-lg-3{width:25%}.col-lg-4{width:33.33333333%}.col-lg-5{width:41.66666667%}.col-lg-6{width:50%}.col-lg-7{width:58.33333333%}.col-lg-8{width:66.66666667%}.col-lg-9{width:75%}.col-lg-10{width:83.33333333%}.col-lg-11{width:91.66666667%}.col-lg-12{width:100%}.col-lg-pull-0{right:auto}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-3{right:25%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-6{right:50%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-9{right:75%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-12{right:100%}.col-lg-push-0{left:auto}.col-lg-push-1{left:8.33333333%}.col-lg-push-2{left:16.66666667%}.col-lg-push-3{left:25%}.col-lg-push-4{left:33.33333333%}.col-lg-push-5{left:41.66666667%}.col-lg-push-6{left:50%}.col-lg-push-7{left:58.33333333%}.col-lg-push-8{left:66.66666667%}.col-lg-push-9{left:75%}.col-lg-push-10{left:83.33333333%}.col-lg-push-11{left:91.66666667%}.col-lg-push-12{left:100%}.col-lg-offset-0{margin-left:0}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-12{margin-left:100%}}caption{padding-top:8px;padding-bottom:8px;color:#777}.table{width:100%;margin-bottom:22px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.6;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#f5f8fa}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover,.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:16.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset,legend{padding:0;border:0}fieldset{margin:0;min-width:0}legend{display:block;width:100%;margin-bottom:22px;font-size:21px;line-height:inherit;border-bottom:1px solid #e5e5e5}label{display:inline-block;margin-bottom:5px}input[type=search]{box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px\\9;line-height:normal}.form-control,output{font-size:14px;line-height:1.6;color:#555;display:block}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{padding-top:7px}.form-control{width:100%;height:36px;padding:6px 12px;background-color:#fff;border:1px solid #ccd0d2;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.075);transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#98cbe8;outline:0;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(152,203,232,.6)}.form-control::-moz-placeholder{color:#b1b7ba;opacity:1}.form-control:-ms-input-placeholder{color:#b1b7ba}.form-control::-webkit-input-placeholder{color:#b1b7ba}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .form-control-feedback,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:36px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],.input-group-sm>.input-group-btn>input[type=date].btn,.input-group-sm>.input-group-btn>input[type=time].btn,.input-group-sm>.input-group-btn>input[type=datetime-local].btn,.input-group-sm>.input-group-btn>input[type=month].btn,.input-group-sm>input[type=date].form-control,.input-group-sm>input[type=date].input-group-addon,.input-group-sm>input[type=time].form-control,.input-group-sm>input[type=time].input-group-addon,.input-group-sm>input[type=datetime-local].form-control,.input-group-sm>input[type=datetime-local].input-group-addon,.input-group-sm>input[type=month].form-control,.input-group-sm>input[type=month].input-group-addon,input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],.input-group-lg>.input-group-btn>input[type=date].btn,.input-group-lg>.input-group-btn>input[type=time].btn,.input-group-lg>.input-group-btn>input[type=datetime-local].btn,.input-group-lg>.input-group-btn>input[type=month].btn,.input-group-lg>input[type=date].form-control,.input-group-lg>input[type=date].input-group-addon,.input-group-lg>input[type=time].form-control,.input-group-lg>input[type=time].input-group-addon,.input-group-lg>input[type=datetime-local].form-control,.input-group-lg>input[type=datetime-local].input-group-addon,.input-group-lg>input[type=month].form-control,.input-group-lg>input[type=month].input-group-addon,input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:22px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px\\9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:36px}.form-control-static.input-lg,.form-control-static.input-sm,.input-group-lg>.form-control-static.form-control,.input-group-lg>.form-control-static.input-group-addon,.input-group-lg>.input-group-btn>.form-control-static.btn,.input-group-sm>.form-control-static.form-control,.input-group-sm>.form-control-static.input-group-addon,.input-group-sm>.input-group-btn>.form-control-static.btn{padding-left:0;padding-right:0}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn,.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.input-group-sm>.input-group-btn>select.btn,.input-group-sm>select.form-control,.input-group-sm>select.input-group-addon,select.input-sm{height:30px;line-height:30px}.input-group-sm>.input-group-btn>select[multiple].btn,.input-group-sm>.input-group-btn>textarea.btn,.input-group-sm>select[multiple].form-control,.input-group-sm>select[multiple].input-group-addon,.input-group-sm>textarea.form-control,.input-group-sm>textarea.input-group-addon,select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:34px;padding:6px 10px;font-size:12px;line-height:1.5}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn,.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.input-group-lg>.input-group-btn>select.btn,.input-group-lg>select.form-control,.input-group-lg>select.input-group-addon,select.input-lg{height:46px;line-height:46px}.input-group-lg>.input-group-btn>select[multiple].btn,.input-group-lg>.input-group-btn>textarea.btn,.input-group-lg>select[multiple].form-control,.input-group-lg>select[multiple].input-group-addon,.input-group-lg>textarea.form-control,.input-group-lg>textarea.input-group-addon,select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:40px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:45px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:36px;height:36px;line-height:36px;text-align:center;pointer-events:none}.collapsing,.dropdown,.dropup{position:relative}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-group-lg>.form-control+.form-control-feedback,.input-group-lg>.input-group-addon+.form-control-feedback,.input-group-lg>.input-group-btn>.btn+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-group-sm>.form-control+.form-control-feedback,.input-group-sm>.input-group-addon+.form-control-feedback,.input-group-sm>.input-group-btn>.btn+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .form-control{border-color:#3c763d;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .form-control-feedback,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .form-control-feedback,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-feedback label~.form-control-feedback{top:27px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#a4aaae}@media (min-width:768px){.form-inline .form-control-static,.form-inline .form-group{display:inline-block}.form-inline .control-label,.form-inline .form-group{margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:29px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}.form-horizontal .form-group:after,.form-horizontal .form-group:before{content:\" \";display:table}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;-ms-touch-action:manipulation;touch-action:manipulation;cursor:pointer;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.6;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#636b6f;text-decoration:none}.btn.active,.btn:active{outline:0;box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#636b6f;background-color:#fff;border-color:#ccc}.btn-default.focus,.btn-default:focus{color:#636b6f;background-color:#e6e5e5;border-color:#8c8c8c}.btn-default.active,.btn-default:active,.btn-default:hover,.open>.btn-default.dropdown-toggle{color:#636b6f;background-color:#e6e5e5;border-color:#adadad}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.btn-default.dropdown-toggle.focus,.open>.btn-default.dropdown-toggle:focus,.open>.btn-default.dropdown-toggle:hover{color:#636b6f;background-color:#d4d4d4;border-color:#8c8c8c}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#636b6f}.btn-primary{color:#fff;background-color:#3097D1;border-color:#2a88bd}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#2579a9;border-color:#133d55}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.btn-primary.dropdown-toggle{color:#fff;background-color:#2579a9;border-color:#1f648b}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.btn-primary.dropdown-toggle.focus,.open>.btn-primary.dropdown-toggle:focus,.open>.btn-primary.dropdown-toggle:hover{color:#fff;background-color:#1f648b;border-color:#133d55}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#3097D1;border-color:#2a88bd}.btn-primary .badge{color:#3097D1;background-color:#fff}.btn-success{color:#fff;background-color:#2ab27b;border-color:#259d6d}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#20895e;border-color:#0d3625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.btn-success.dropdown-toggle{color:#fff;background-color:#20895e;border-color:#196c4b}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.btn-success.dropdown-toggle.focus,.open>.btn-success.dropdown-toggle:focus,.open>.btn-success.dropdown-toggle:hover{color:#fff;background-color:#196c4b;border-color:#0d3625}.btn-success.active,.btn-success:active,.open>.btn-success.dropdown-toggle{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#2ab27b;border-color:#259d6d}.btn-success .badge{color:#2ab27b;background-color:#fff}.btn-info{color:#fff;background-color:#8eb4cb;border-color:#7da8c3}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#6b9dbb;border-color:#3d6983}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.btn-info.dropdown-toggle{color:#fff;background-color:#6b9dbb;border-color:#538db0}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.btn-info.dropdown-toggle.focus,.open>.btn-info.dropdown-toggle:focus,.open>.btn-info.dropdown-toggle:hover{color:#fff;background-color:#538db0;border-color:#3d6983}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#8eb4cb;border-color:#7da8c3}.btn-info .badge{color:#8eb4cb;background-color:#fff}.btn-warning{color:#fff;background-color:#cbb956;border-color:#c5b143}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#b6a338;border-color:#685d20}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.btn-warning.dropdown-toggle{color:#fff;background-color:#b6a338;border-color:#9b8a30}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.btn-warning.dropdown-toggle.focus,.open>.btn-warning.dropdown-toggle:focus,.open>.btn-warning.dropdown-toggle:hover{color:#fff;background-color:#9b8a30;border-color:#685d20}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#cbb956;border-color:#c5b143}.btn-warning .badge{color:#cbb956;background-color:#fff}.btn-danger{color:#fff;background-color:#bf5329;border-color:#aa4a24}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#954120;border-color:#411c0e}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.btn-danger.dropdown-toggle{color:#fff;background-color:#954120;border-color:#78341a}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.btn-danger.dropdown-toggle.focus,.open>.btn-danger.dropdown-toggle:focus,.open>.btn-danger.dropdown-toggle:hover{color:#fff;background-color:#78341a;border-color:#411c0e}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#bf5329;border-color:#aa4a24}.btn-danger .badge{color:#bf5329;background-color:#fff}.btn-link{color:#3097D1;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#216a94;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{height:0;overflow:hidden;transition-property:height,visibility;transition-duration:.35s;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid\\9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu-right,.dropdown-menu.pull-right{left:auto;right:0}.dropdown-header,.dropdown-menu>li>a{display:block;padding:3px 20px;line-height:1.6;white-space:nowrap}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle,.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child,.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child),.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn,.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.dropdown-menu .divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{font-weight:400;color:#333}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#3097D1}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{font-size:12px;color:#777}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid\\9;content:\"\"}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:768px){.navbar-right .dropdown-menu{right:0;left:auto}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar:after,.btn-toolbar:before{content:\" \";display:table}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn .caret,.btn-group>.btn:first-child{margin-left:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group-lg.btn-group>.btn+.dropdown-toggle,.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{box-shadow:none}.btn-group-lg>.btn .caret,.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-group-lg>.btn .caret,.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before{content:\" \";display:table}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-radius:4px 4px 0 0}.btn-group-vertical>.btn:last-child:not(:first-child){border-radius:0 0 4px 4px}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn,.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group,.input-group-btn,.input-group-btn>.btn{position:relative}.input-group{display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group .form-control:focus{z-index:3}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:14px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccd0d2;border-radius:4px}.input-group-addon.input-sm,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.input-group-addon.btn{padding:5px 10px;font-size:12px;border-radius:3px}.input-group-addon.input-lg,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.input-group-addon.btn{padding:10px 16px;font-size:18px;border-radius:6px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{font-size:0;white-space:nowrap}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{z-index:2;margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav:after,.nav:before{content:\" \";display:table}.nav>li,.nav>li>a{display:block;position:relative}.nav:after{clear:both}.nav>li>a{padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#3097D1}.nav .nav-divider{height:1px;margin:10px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.6;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#f5f8fa;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-pills>li{float:left}.nav-justified>li,.nav-stacked>li,.nav-tabs.nav-justified>li{float:none}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#3097D1}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified,.nav-tabs.nav-justified{width:100%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified,.nav-tabs.nav-justified{border-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li,.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a,.nav-tabs.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a,.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover,.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#f5f8fa}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:22px;border:1px solid transparent}.navbar:after,.navbar:before{content:\" \";display:table}.navbar-header:after,.navbar-header:before{content:\" \";display:table}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse:after,.navbar-collapse:before{content:\" \";display:table}.navbar-collapse.in{overflow-y:auto}@media (min-width:768px){.navbar{border-radius:4px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.embed-responsive,.modal,.modal-open,.progress{overflow:hidden}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:14px 15px;font-size:18px;line-height:22px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:768px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}.navbar-nav{margin:7px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:22px}@media (max-width:767px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:22px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}.progress-bar-striped,.progress-striped .progress-bar,.progress-striped .progress-bar-danger,.progress-striped .progress-bar-info,.progress-striped .progress-bar-success,.progress-striped .progress-bar-warning{background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}@media (min-width:768px){.navbar-toggle{display:none}.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:14px;padding-bottom:14px}}.navbar-form{padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:7px -15px}@media (min-width:768px){.navbar-form .form-control-static,.navbar-form .form-group{display:inline-block}.navbar-form .control-label,.navbar-form .form-group{margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;box-shadow:none}}.breadcrumb>li,.pagination{display:inline-block}.btn .badge,.btn .label{top:-1px;position:relative}@media (max-width:767px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:7px;margin-bottom:7px}.btn-group-sm>.navbar-btn.btn,.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.btn-group-xs>.navbar-btn.btn,.navbar-btn.btn-xs,.navbar-text{margin-top:14px;margin-bottom:14px}@media (min-width:768px){.navbar-text{float:left;margin-left:15px;margin-right:15px}.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#d3e0e9}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5d5d;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#eee}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#d3e0e9}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#eee;color:#555}@media (max-width:767px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#eee}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#090909}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#090909;color:#fff}@media (max-width:767px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#090909}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:22px;list-style:none;background-color:#f5f5f5;border-radius:4px}.breadcrumb>li+li:before{content:\"/ \";padding:0 5px;color:#ccc}.breadcrumb>.active{color:#777}.pagination{padding-left:0;margin:22px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.6;text-decoration:none;color:#3097D1;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#216a94;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#3097D1;border-color:#3097D1;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.badge,.label{font-weight:700;line-height:1;white-space:nowrap;text-align:center}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pager{padding-left:0;margin:22px 0;list-style:none;text-align:center}.pager:after,.pager:before{content:\" \";display:table}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;color:#fff;border-radius:.25em}.label:empty{display:none}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#3097D1}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#2579a9}.label-success{background-color:#2ab27b}.label-success[href]:focus,.label-success[href]:hover{background-color:#20895e}.label-info{background-color:#8eb4cb}.label-info[href]:focus,.label-info[href]:hover{background-color:#6b9dbb}.label-warning{background-color:#cbb956}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#b6a338}.label-danger{background-color:#bf5329}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#954120}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;color:#fff;vertical-align:middle;background-color:#777;border-radius:10px}.badge:empty{display:none}.media-object,.thumbnail{display:block}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#3097D1;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.jumbotron,.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;background-color:#eee}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.alert,.thumbnail{margin-bottom:22px}.alert .alert-link,.close{font-weight:700}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.thumbnail{padding:4px;line-height:1.6;background-color:#f5f8fa;border:1px solid #ddd;border-radius:4px;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto;margin-left:auto;margin-right:auto}.thumbnail .caption{padding:9px;color:#636b6f}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#3097D1}.alert{padding:15px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.modal,.modal-backdrop{top:0;right:0;bottom:0;left:0}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{height:22px;margin-bottom:22px;background-color:#f5f5f5;border-radius:4px;box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:22px;color:#fff;text-align:center;background-color:#3097D1;box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#2ab27b}.progress-bar-info{background-color:#8eb4cb}.progress-bar-warning{background-color:#cbb956}.progress-bar-danger{background-color:#bf5329}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object.img-thumbnail{max-width:none}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #d3e0e9}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#3097D1;border-color:#3097D1}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#d7ebf6}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.panel-heading>.dropdown .dropdown-toggle,.panel-title,.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:22px;background-color:#fff;border:1px solid transparent;border-radius:4px;box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-title,.panel>.list-group,.panel>.panel-collapse>.list-group,.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel-body{padding:15px}.panel-body:after,.panel-body:before{content:\" \";display:table}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:3px;border-top-left-radius:3px}.panel-title{margin-top:0;font-size:16px}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #d3e0e9;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel-group .panel-heading,.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive:last-child>.table:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:3px;border-bottom-right-radius:3px}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:3px;border-top-left-radius:3px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:3px;border-bottom-left-radius:3px}.panel>.panel-heading+.panel-collapse>.list-group .list-group-item:first-child{border-top-right-radius:0;border-top-left-radius:0}.panel>.table-responsive:first-child>.table:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-right-radius:3px;border-top-left-radius:3px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:3px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:3px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:3px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:22px}.panel-group .panel{margin-bottom:0;border-radius:4px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #d3e0e9}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #d3e0e9}.panel-default{border-color:#d3e0e9}.panel-default>.panel-heading{color:#333;background-color:#fff;border-color:#d3e0e9}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d3e0e9}.panel-default>.panel-heading .badge{color:#fff;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d3e0e9}.panel-primary{border-color:#3097D1}.panel-primary>.panel-heading{color:#fff;background-color:#3097D1;border-color:#3097D1}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#3097D1}.panel-primary>.panel-heading .badge{color:#3097D1;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#3097D1}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:4px;box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:6px}.well-sm{padding:9px;border-radius:3px}.close{float:right;font-size:21px;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.popover,.tooltip{font-family:Raleway,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.6;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;text-decoration:none}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-content,.popover{background-clip:padding-box}.modal{display:none;position:fixed;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before{display:table;content:\" \"}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);transform:translate(0,-25%);transition:-webkit-transform .3s ease-out;transition:transform .3s ease-out;transition:transform .3s ease-out,-webkit-transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 3px 9px rgba(0,0,0,.5);outline:0}.modal-backdrop{position:fixed;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.6}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;text-align:left;text-align:start;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow,.tooltip.top-left .tooltip-arrow,.tooltip.top-right .tooltip-arrow{bottom:0;border-width:5px 5px 0;border-top-color:#000}.tooltip.top .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.top-left .tooltip-arrow{right:5px;margin-bottom:-5px}.tooltip.top-right .tooltip-arrow{left:5px;margin-bottom:-5px}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow,.tooltip.bottom-left .tooltip-arrow,.tooltip.bottom-right .tooltip-arrow{border-width:0 5px 5px;border-bottom-color:#000;top:0}.tooltip.bottom .tooltip-arrow{left:50%;margin-left:-5px}.tooltip.bottom-left .tooltip-arrow{right:5px;margin-top:-5px}.tooltip.bottom-right .tooltip-arrow{left:5px;margin-top:-5px}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;text-align:left;text-align:start;font-size:14px;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;box-shadow:0 5px 10px rgba(0,0,0,.2)}.carousel-caption,.carousel-control{color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.carousel,.carousel-inner{position:relative}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:\"\"}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:\" \";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.left>.arrow:after,.popover.right>.arrow:after{content:\" \";bottom:-10px}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{left:1px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:\" \";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{right:1px;border-right-width:0;border-left-color:#fff}.carousel-inner{overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{display:block;max-width:100%;height:auto;line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{transition:-webkit-transform .6s ease-in-out;transition:transform .6s ease-in-out;transition:transform .6s ease-in-out,-webkit-transform .6s ease-in-out;-webkit-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;background-color:transparent}.carousel-control.left{background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\\2039'}.carousel-control .icon-next:before{content:'\\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000\\9;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px}.carousel-caption .btn,.text-hide{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before{content:\" \";display:table}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.hidden,.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;background-color:transparent;border:0}.affix{position:fixed}@-ms-viewport{width:device-width}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table!important}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px) and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table!important}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px) and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table!important}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table!important}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}.hidden-lg{display:none!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px) and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px) and (max-width:1199px){.hidden-md{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table!important}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}"
  },
  {
    "path": "public/index.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n\n/*\n|--------------------------------------------------------------------------\n| Register The Auto Loader\n|--------------------------------------------------------------------------\n|\n| Composer provides a convenient, automatically generated class loader for\n| our application. We just need to utilize it! We'll simply require it\n| into the script here so that we don't have to worry about manual\n| loading any of our classes later on. It feels great to relax.\n|\n*/\n\nrequire __DIR__.'/../bootstrap/autoload.php';\n\n/*\n|--------------------------------------------------------------------------\n| Turn On The Lights\n|--------------------------------------------------------------------------\n|\n| We need to illuminate PHP development, so let us turn on the lights.\n| This bootstraps the framework and gets it ready for use, then it\n| will load up this application so that we can run it and send\n| the responses back to the browser and delight our users.\n|\n*/\n\n$app = require_once __DIR__.'/../bootstrap/app.php';\n\n/*\n|--------------------------------------------------------------------------\n| Run The Application\n|--------------------------------------------------------------------------\n|\n| Once we have the application, we can handle the incoming request\n| through the kernel, and send the associated response back to\n| the client's browser allowing them to enjoy the creative\n| and wonderful application we have prepared for them.\n|\n*/\n\n$kernel = $app->make(Illuminate\\Contracts\\Http\\Kernel::class);\n\n$response = $kernel->handle(\n    $request = Illuminate\\Http\\Request::capture()\n);\n\n$response->send();\n\n$kernel->terminate($request, $response);\n"
  },
  {
    "path": "public/js/app.js",
    "content": "!function(t){function e(r){if(n[r])return n[r].exports;var i=n[r]={i:r,l:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.l=!0,i.exports}var n={};e.m=t,e.c=n,e.i=function(t){return t},e.d=function(t,n,r){e.o(t,n)||Object.defineProperty(t,n,{configurable:!1,enumerable:!0,get:r})},e.n=function(t){var n=t&&t.__esModule?function(){return t.default}:function(){return t};return e.d(n,\"a\",n),n},e.o=function(t,e){return Object.prototype.hasOwnProperty.call(t,e)},e.p=\"\",e(e.s=39)}([function(t,e,n){\"use strict\";function r(t){return\"[object Array]\"===C.call(t)}function i(t){return\"[object ArrayBuffer]\"===C.call(t)}function o(t){return\"undefined\"!=typeof FormData&&t instanceof FormData}function a(t){return\"undefined\"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer.isView(t):t&&t.buffer&&t.buffer instanceof ArrayBuffer}function s(t){return\"string\"==typeof t}function u(t){return\"number\"==typeof t}function c(t){return void 0===t}function l(t){return null!==t&&\"object\"==typeof t}function f(t){return\"[object Date]\"===C.call(t)}function p(t){return\"[object File]\"===C.call(t)}function d(t){return\"[object Blob]\"===C.call(t)}function h(t){return\"[object Function]\"===C.call(t)}function v(t){return l(t)&&h(t.pipe)}function g(t){return\"undefined\"!=typeof URLSearchParams&&t instanceof URLSearchParams}function m(t){return t.replace(/^\\s*/,\"\").replace(/\\s*$/,\"\")}function y(){return\"undefined\"!=typeof window&&\"undefined\"!=typeof document&&\"function\"==typeof document.createElement}function b(t,e){if(null!==t&&void 0!==t)if(\"object\"==typeof t||r(t)||(t=[t]),r(t))for(var n=0,i=t.length;n<i;n++)e.call(null,t[n],n,t);else for(var o in t)Object.prototype.hasOwnProperty.call(t,o)&&e.call(null,t[o],o,t)}function _(){function t(t,n){\"object\"==typeof e[n]&&\"object\"==typeof t?e[n]=_(e[n],t):e[n]=t}for(var e={},n=0,r=arguments.length;n<r;n++)b(arguments[n],t);return e}function w(t,e,n){return b(e,function(e,r){t[r]=n&&\"function\"==typeof e?x(e,n):e}),t}var x=n(6),C=Object.prototype.toString;t.exports={isArray:r,isArrayBuffer:i,isFormData:o,isArrayBufferView:a,isString:s,isNumber:u,isObject:l,isUndefined:c,isDate:f,isFile:p,isBlob:d,isFunction:h,isStream:v,isURLSearchParams:g,isStandardBrowserEnv:y,forEach:b,merge:_,extend:w,trim:m}},function(t,e,n){\"use strict\";(function(e){function r(t,e){!i.isUndefined(t)&&i.isUndefined(t[\"Content-Type\"])&&(t[\"Content-Type\"]=e)}var i=n(0),o=n(25),a={\"Content-Type\":\"application/x-www-form-urlencoded\"},s={adapter:function(){var t;return\"undefined\"!=typeof XMLHttpRequest?t=n(2):void 0!==e&&(t=n(2)),t}(),transformRequest:[function(t,e){return o(e,\"Content-Type\"),i.isFormData(t)||i.isArrayBuffer(t)||i.isStream(t)||i.isFile(t)||i.isBlob(t)?t:i.isArrayBufferView(t)?t.buffer:i.isURLSearchParams(t)?(r(e,\"application/x-www-form-urlencoded;charset=utf-8\"),t.toString()):i.isObject(t)?(r(e,\"application/json;charset=utf-8\"),JSON.stringify(t)):t}],transformResponse:[function(t){if(\"string\"==typeof t){t=t.replace(/^\\)\\]\\}',?\\n/,\"\");try{t=JSON.parse(t)}catch(t){}}return t}],timeout:0,xsrfCookieName:\"XSRF-TOKEN\",xsrfHeaderName:\"X-XSRF-TOKEN\",maxContentLength:-1,validateStatus:function(t){return t>=200&&t<300}};s.headers={common:{Accept:\"application/json, text/plain, */*\"}},i.forEach([\"delete\",\"get\",\"head\"],function(t){s.headers[t]={}}),i.forEach([\"post\",\"put\",\"patch\"],function(t){s.headers[t]=i.merge(a)}),t.exports=s}).call(e,n(33))},function(t,e,n){\"use strict\";var r=n(0),i=n(17),o=n(20),a=n(26),s=n(24),u=n(5),c=\"undefined\"!=typeof window&&window.btoa&&window.btoa.bind(window)||n(19);t.exports=function(t){return new Promise(function(e,l){var f=t.data,p=t.headers;r.isFormData(f)&&delete p[\"Content-Type\"];var d=new XMLHttpRequest,h=\"onreadystatechange\",v=!1;if(\"undefined\"==typeof window||!window.XDomainRequest||\"withCredentials\"in d||s(t.url)||(d=new window.XDomainRequest,h=\"onload\",v=!0,d.onprogress=function(){},d.ontimeout=function(){}),t.auth){var g=t.auth.username||\"\",m=t.auth.password||\"\";p.Authorization=\"Basic \"+c(g+\":\"+m)}if(d.open(t.method.toUpperCase(),o(t.url,t.params,t.paramsSerializer),!0),d.timeout=t.timeout,d[h]=function(){if(d&&(4===d.readyState||v)&&(0!==d.status||d.responseURL&&0===d.responseURL.indexOf(\"file:\"))){var n=\"getAllResponseHeaders\"in d?a(d.getAllResponseHeaders()):null,r=t.responseType&&\"text\"!==t.responseType?d.response:d.responseText,o={data:r,status:1223===d.status?204:d.status,statusText:1223===d.status?\"No Content\":d.statusText,headers:n,config:t,request:d};i(e,l,o),d=null}},d.onerror=function(){l(u(\"Network Error\",t)),d=null},d.ontimeout=function(){l(u(\"timeout of \"+t.timeout+\"ms exceeded\",t,\"ECONNABORTED\")),d=null},r.isStandardBrowserEnv()){var y=n(22),b=(t.withCredentials||s(t.url))&&t.xsrfCookieName?y.read(t.xsrfCookieName):void 0;b&&(p[t.xsrfHeaderName]=b)}if(\"setRequestHeader\"in d&&r.forEach(p,function(t,e){void 0===f&&\"content-type\"===e.toLowerCase()?delete p[e]:d.setRequestHeader(e,t)}),t.withCredentials&&(d.withCredentials=!0),t.responseType)try{d.responseType=t.responseType}catch(t){if(\"json\"!==d.responseType)throw t}\"function\"==typeof t.onDownloadProgress&&d.addEventListener(\"progress\",t.onDownloadProgress),\"function\"==typeof t.onUploadProgress&&d.upload&&d.upload.addEventListener(\"progress\",t.onUploadProgress),t.cancelToken&&t.cancelToken.promise.then(function(t){d&&(d.abort(),l(t),d=null)}),void 0===f&&(f=null),d.send(f)})}},function(t,e,n){\"use strict\";function r(t){this.message=t}r.prototype.toString=function(){return\"Cancel\"+(this.message?\": \"+this.message:\"\")},r.prototype.__CANCEL__=!0,t.exports=r},function(t,e,n){\"use strict\";t.exports=function(t){return!(!t||!t.__CANCEL__)}},function(t,e,n){\"use strict\";var r=n(16);t.exports=function(t,e,n,i){var o=new Error(t);return r(o,e,n,i)}},function(t,e,n){\"use strict\";t.exports=function(t,e){return function(){for(var n=new Array(arguments.length),r=0;r<n.length;r++)n[r]=arguments[r];return t.apply(e,n)}}},function(t,e){var n;n=function(){return this}();try{n=n||Function(\"return this\")()||(0,eval)(\"this\")}catch(t){\"object\"==typeof window&&(n=window)}t.exports=n},function(t,e,n){n(29),window.Vue=n(37),Vue.component(\"example\",n(34));new Vue({el:\"#app\"})},function(t,e){},function(t,e,n){t.exports=n(11)},function(t,e,n){\"use strict\";function r(t){var e=new a(t),n=o(a.prototype.request,e);return i.extend(n,a.prototype,e),i.extend(n,e),n}var i=n(0),o=n(6),a=n(13),s=n(1),u=r(s);u.Axios=a,u.create=function(t){return r(i.merge(s,t))},u.Cancel=n(3),u.CancelToken=n(12),u.isCancel=n(4),u.all=function(t){return Promise.all(t)},u.spread=n(27),t.exports=u,t.exports.default=u},function(t,e,n){\"use strict\";function r(t){if(\"function\"!=typeof t)throw new TypeError(\"executor must be a function.\");var e;this.promise=new Promise(function(t){e=t});var n=this;t(function(t){n.reason||(n.reason=new i(t),e(n.reason))})}var i=n(3);r.prototype.throwIfRequested=function(){if(this.reason)throw this.reason},r.source=function(){var t;return{token:new r(function(e){t=e}),cancel:t}},t.exports=r},function(t,e,n){\"use strict\";function r(t){this.defaults=t,this.interceptors={request:new a,response:new a}}var i=n(1),o=n(0),a=n(14),s=n(15),u=n(23),c=n(21);r.prototype.request=function(t){\"string\"==typeof t&&(t=o.merge({url:arguments[0]},arguments[1])),t=o.merge(i,this.defaults,{method:\"get\"},t),t.baseURL&&!u(t.url)&&(t.url=c(t.baseURL,t.url));var e=[s,void 0],n=Promise.resolve(t);for(this.interceptors.request.forEach(function(t){e.unshift(t.fulfilled,t.rejected)}),this.interceptors.response.forEach(function(t){e.push(t.fulfilled,t.rejected)});e.length;)n=n.then(e.shift(),e.shift());return n},o.forEach([\"delete\",\"get\",\"head\"],function(t){r.prototype[t]=function(e,n){return this.request(o.merge(n||{},{method:t,url:e}))}}),o.forEach([\"post\",\"put\",\"patch\"],function(t){r.prototype[t]=function(e,n,r){return this.request(o.merge(r||{},{method:t,url:e,data:n}))}}),t.exports=r},function(t,e,n){\"use strict\";function r(){this.handlers=[]}var i=n(0);r.prototype.use=function(t,e){return this.handlers.push({fulfilled:t,rejected:e}),this.handlers.length-1},r.prototype.eject=function(t){this.handlers[t]&&(this.handlers[t]=null)},r.prototype.forEach=function(t){i.forEach(this.handlers,function(e){null!==e&&t(e)})},t.exports=r},function(t,e,n){\"use strict\";function r(t){t.cancelToken&&t.cancelToken.throwIfRequested()}var i=n(0),o=n(18),a=n(4),s=n(1);t.exports=function(t){return r(t),t.headers=t.headers||{},t.data=o(t.data,t.headers,t.transformRequest),t.headers=i.merge(t.headers.common||{},t.headers[t.method]||{},t.headers||{}),i.forEach([\"delete\",\"get\",\"head\",\"post\",\"put\",\"patch\",\"common\"],function(e){delete t.headers[e]}),(t.adapter||s.adapter)(t).then(function(e){return r(t),e.data=o(e.data,e.headers,t.transformResponse),e},function(e){return a(e)||(r(t),e&&e.response&&(e.response.data=o(e.response.data,e.response.headers,t.transformResponse))),Promise.reject(e)})}},function(t,e,n){\"use strict\";t.exports=function(t,e,n,r){return t.config=e,n&&(t.code=n),t.response=r,t}},function(t,e,n){\"use strict\";var r=n(5);t.exports=function(t,e,n){var i=n.config.validateStatus;n.status&&i&&!i(n.status)?e(r(\"Request failed with status code \"+n.status,n.config,null,n)):t(n)}},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t,e,n){return r.forEach(n,function(n){t=n(t,e)}),t}},function(t,e,n){\"use strict\";function r(){this.message=\"String contains an invalid character\"}function i(t){for(var e,n,i=String(t),a=\"\",s=0,u=o;i.charAt(0|s)||(u=\"=\",s%1);a+=u.charAt(63&e>>8-s%1*8)){if((n=i.charCodeAt(s+=.75))>255)throw new r;e=e<<8|n}return a}var o=\"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=\";r.prototype=new Error,r.prototype.code=5,r.prototype.name=\"InvalidCharacterError\",t.exports=i},function(t,e,n){\"use strict\";function r(t){return encodeURIComponent(t).replace(/%40/gi,\"@\").replace(/%3A/gi,\":\").replace(/%24/g,\"$\").replace(/%2C/gi,\",\").replace(/%20/g,\"+\").replace(/%5B/gi,\"[\").replace(/%5D/gi,\"]\")}var i=n(0);t.exports=function(t,e,n){if(!e)return t;var o;if(n)o=n(e);else if(i.isURLSearchParams(e))o=e.toString();else{var a=[];i.forEach(e,function(t,e){null!==t&&void 0!==t&&(i.isArray(t)&&(e+=\"[]\"),i.isArray(t)||(t=[t]),i.forEach(t,function(t){i.isDate(t)?t=t.toISOString():i.isObject(t)&&(t=JSON.stringify(t)),a.push(r(e)+\"=\"+r(t))}))}),o=a.join(\"&\")}return o&&(t+=(-1===t.indexOf(\"?\")?\"?\":\"&\")+o),t}},function(t,e,n){\"use strict\";t.exports=function(t,e){return t.replace(/\\/+$/,\"\")+\"/\"+e.replace(/^\\/+/,\"\")}},function(t,e,n){\"use strict\";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){return{write:function(t,e,n,i,o,a){var s=[];s.push(t+\"=\"+encodeURIComponent(e)),r.isNumber(n)&&s.push(\"expires=\"+new Date(n).toGMTString()),r.isString(i)&&s.push(\"path=\"+i),r.isString(o)&&s.push(\"domain=\"+o),!0===a&&s.push(\"secure\"),document.cookie=s.join(\"; \")},read:function(t){var e=document.cookie.match(new RegExp(\"(^|;\\\\s*)(\"+t+\")=([^;]*)\"));return e?decodeURIComponent(e[3]):null},remove:function(t){this.write(t,\"\",Date.now()-864e5)}}}():function(){return{write:function(){},read:function(){return null},remove:function(){}}}()},function(t,e,n){\"use strict\";t.exports=function(t){return/^([a-z][a-z\\d\\+\\-\\.]*:)?\\/\\//i.test(t)}},function(t,e,n){\"use strict\";var r=n(0);t.exports=r.isStandardBrowserEnv()?function(){function t(t){var e=t;return n&&(i.setAttribute(\"href\",e),e=i.href),i.setAttribute(\"href\",e),{href:i.href,protocol:i.protocol?i.protocol.replace(/:$/,\"\"):\"\",host:i.host,search:i.search?i.search.replace(/^\\?/,\"\"):\"\",hash:i.hash?i.hash.replace(/^#/,\"\"):\"\",hostname:i.hostname,port:i.port,pathname:\"/\"===i.pathname.charAt(0)?i.pathname:\"/\"+i.pathname}}var e,n=/(msie|trident)/i.test(navigator.userAgent),i=document.createElement(\"a\");return e=t(window.location.href),function(n){var i=r.isString(n)?t(n):n;return i.protocol===e.protocol&&i.host===e.host}}():function(){return function(){return!0}}()},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t,e){r.forEach(t,function(n,r){r!==e&&r.toUpperCase()===e.toUpperCase()&&(t[e]=n,delete t[r])})}},function(t,e,n){\"use strict\";var r=n(0);t.exports=function(t){var e,n,i,o={};return t?(r.forEach(t.split(\"\\n\"),function(t){i=t.indexOf(\":\"),e=r.trim(t.substr(0,i)).toLowerCase(),n=r.trim(t.substr(i+1)),e&&(o[e]=o[e]?o[e]+\", \"+n:n)}),o):o}},function(t,e,n){\"use strict\";t.exports=function(t){return function(e){return t.apply(null,e)}}},function(t,e,n){\"use strict\";Object.defineProperty(e,\"__esModule\",{value:!0}),e.default={mounted:function(){}}},function(t,e,n){window._=n(32);try{window.$=window.jQuery=n(31),n(30)}catch(t){}window.axios=n(10),window.axios.defaults.headers.common[\"X-Requested-With\"]=\"XMLHttpRequest\";var r=document.head.querySelector('meta[name=\"csrf-token\"]');r&&(window.axios.defaults.headers.common[\"X-CSRF-TOKEN\"]=r.content)},function(t,e){/*!\n * Bootstrap v3.3.7 (http://getbootstrap.com)\n * Copyright 2011-2016 Twitter, Inc.\n * Licensed under the MIT license\n */\nif(\"undefined\"==typeof jQuery)throw new Error(\"Bootstrap's JavaScript requires jQuery\");+function(t){\"use strict\";var e=t.fn.jquery.split(\" \")[0].split(\".\");if(e[0]<2&&e[1]<9||1==e[0]&&9==e[1]&&e[2]<1||e[0]>3)throw new Error(\"Bootstrap's JavaScript requires jQuery version 1.9.1 or higher, but lower than version 4\")}(jQuery),function(t){\"use strict\";function e(){var t=document.createElement(\"bootstrap\"),e={WebkitTransition:\"webkitTransitionEnd\",MozTransition:\"transitionend\",OTransition:\"oTransitionEnd otransitionend\",transition:\"transitionend\"};for(var n in e)if(void 0!==t.style[n])return{end:e[n]};return!1}t.fn.emulateTransitionEnd=function(e){var n=!1,r=this;t(this).one(\"bsTransitionEnd\",function(){n=!0});var i=function(){n||t(r).trigger(t.support.transition.end)};return setTimeout(i,e),this},t(function(){t.support.transition=e(),t.support.transition&&(t.event.special.bsTransitionEnd={bindType:t.support.transition.end,delegateType:t.support.transition.end,handle:function(e){if(t(e.target).is(this))return e.handleObj.handler.apply(this,arguments)}})})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var n=t(this),i=n.data(\"bs.alert\");i||n.data(\"bs.alert\",i=new r(this)),\"string\"==typeof e&&i[e].call(n)})}var n='[data-dismiss=\"alert\"]',r=function(e){t(e).on(\"click\",n,this.close)};r.VERSION=\"3.3.7\",r.TRANSITION_DURATION=150,r.prototype.close=function(e){function n(){a.detach().trigger(\"closed.bs.alert\").remove()}var i=t(this),o=i.attr(\"data-target\");o||(o=i.attr(\"href\"),o=o&&o.replace(/.*(?=#[^\\s]*$)/,\"\"));var a=t(\"#\"===o?[]:o);e&&e.preventDefault(),a.length||(a=i.closest(\".alert\")),a.trigger(e=t.Event(\"close.bs.alert\")),e.isDefaultPrevented()||(a.removeClass(\"in\"),t.support.transition&&a.hasClass(\"fade\")?a.one(\"bsTransitionEnd\",n).emulateTransitionEnd(r.TRANSITION_DURATION):n())};var i=t.fn.alert;t.fn.alert=e,t.fn.alert.Constructor=r,t.fn.alert.noConflict=function(){return t.fn.alert=i,this},t(document).on(\"click.bs.alert.data-api\",n,r.prototype.close)}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.button\"),o=\"object\"==typeof e&&e;i||r.data(\"bs.button\",i=new n(this,o)),\"toggle\"==e?i.toggle():e&&i.setState(e)})}var n=function(e,r){this.$element=t(e),this.options=t.extend({},n.DEFAULTS,r),this.isLoading=!1};n.VERSION=\"3.3.7\",n.DEFAULTS={loadingText:\"loading...\"},n.prototype.setState=function(e){var n=\"disabled\",r=this.$element,i=r.is(\"input\")?\"val\":\"html\",o=r.data();e+=\"Text\",null==o.resetText&&r.data(\"resetText\",r[i]()),setTimeout(t.proxy(function(){r[i](null==o[e]?this.options[e]:o[e]),\"loadingText\"==e?(this.isLoading=!0,r.addClass(n).attr(n,n).prop(n,!0)):this.isLoading&&(this.isLoading=!1,r.removeClass(n).removeAttr(n).prop(n,!1))},this),0)},n.prototype.toggle=function(){var t=!0,e=this.$element.closest('[data-toggle=\"buttons\"]');if(e.length){var n=this.$element.find(\"input\");\"radio\"==n.prop(\"type\")?(n.prop(\"checked\")&&(t=!1),e.find(\".active\").removeClass(\"active\"),this.$element.addClass(\"active\")):\"checkbox\"==n.prop(\"type\")&&(n.prop(\"checked\")!==this.$element.hasClass(\"active\")&&(t=!1),this.$element.toggleClass(\"active\")),n.prop(\"checked\",this.$element.hasClass(\"active\")),t&&n.trigger(\"change\")}else this.$element.attr(\"aria-pressed\",!this.$element.hasClass(\"active\")),this.$element.toggleClass(\"active\")};var r=t.fn.button;t.fn.button=e,t.fn.button.Constructor=n,t.fn.button.noConflict=function(){return t.fn.button=r,this},t(document).on(\"click.bs.button.data-api\",'[data-toggle^=\"button\"]',function(n){var r=t(n.target).closest(\".btn\");e.call(r,\"toggle\"),t(n.target).is('input[type=\"radio\"], input[type=\"checkbox\"]')||(n.preventDefault(),r.is(\"input,button\")?r.trigger(\"focus\"):r.find(\"input:visible,button:visible\").first().trigger(\"focus\"))}).on(\"focus.bs.button.data-api blur.bs.button.data-api\",'[data-toggle^=\"button\"]',function(e){t(e.target).closest(\".btn\").toggleClass(\"focus\",/^focus(in)?$/.test(e.type))})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.carousel\"),o=t.extend({},n.DEFAULTS,r.data(),\"object\"==typeof e&&e),a=\"string\"==typeof e?e:o.slide;i||r.data(\"bs.carousel\",i=new n(this,o)),\"number\"==typeof e?i.to(e):a?i[a]():o.interval&&i.pause().cycle()})}var n=function(e,n){this.$element=t(e),this.$indicators=this.$element.find(\".carousel-indicators\"),this.options=n,this.paused=null,this.sliding=null,this.interval=null,this.$active=null,this.$items=null,this.options.keyboard&&this.$element.on(\"keydown.bs.carousel\",t.proxy(this.keydown,this)),\"hover\"==this.options.pause&&!(\"ontouchstart\"in document.documentElement)&&this.$element.on(\"mouseenter.bs.carousel\",t.proxy(this.pause,this)).on(\"mouseleave.bs.carousel\",t.proxy(this.cycle,this))};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=600,n.DEFAULTS={interval:5e3,pause:\"hover\",wrap:!0,keyboard:!0},n.prototype.keydown=function(t){if(!/input|textarea/i.test(t.target.tagName)){switch(t.which){case 37:this.prev();break;case 39:this.next();break;default:return}t.preventDefault()}},n.prototype.cycle=function(e){return e||(this.paused=!1),this.interval&&clearInterval(this.interval),this.options.interval&&!this.paused&&(this.interval=setInterval(t.proxy(this.next,this),this.options.interval)),this},n.prototype.getItemIndex=function(t){return this.$items=t.parent().children(\".item\"),this.$items.index(t||this.$active)},n.prototype.getItemForDirection=function(t,e){var n=this.getItemIndex(e);if((\"prev\"==t&&0===n||\"next\"==t&&n==this.$items.length-1)&&!this.options.wrap)return e;var r=\"prev\"==t?-1:1,i=(n+r)%this.$items.length;return this.$items.eq(i)},n.prototype.to=function(t){var e=this,n=this.getItemIndex(this.$active=this.$element.find(\".item.active\"));if(!(t>this.$items.length-1||t<0))return this.sliding?this.$element.one(\"slid.bs.carousel\",function(){e.to(t)}):n==t?this.pause().cycle():this.slide(t>n?\"next\":\"prev\",this.$items.eq(t))},n.prototype.pause=function(e){return e||(this.paused=!0),this.$element.find(\".next, .prev\").length&&t.support.transition&&(this.$element.trigger(t.support.transition.end),this.cycle(!0)),this.interval=clearInterval(this.interval),this},n.prototype.next=function(){if(!this.sliding)return this.slide(\"next\")},n.prototype.prev=function(){if(!this.sliding)return this.slide(\"prev\")},n.prototype.slide=function(e,r){var i=this.$element.find(\".item.active\"),o=r||this.getItemForDirection(e,i),a=this.interval,s=\"next\"==e?\"left\":\"right\",u=this;if(o.hasClass(\"active\"))return this.sliding=!1;var c=o[0],l=t.Event(\"slide.bs.carousel\",{relatedTarget:c,direction:s});if(this.$element.trigger(l),!l.isDefaultPrevented()){if(this.sliding=!0,a&&this.pause(),this.$indicators.length){this.$indicators.find(\".active\").removeClass(\"active\");var f=t(this.$indicators.children()[this.getItemIndex(o)]);f&&f.addClass(\"active\")}var p=t.Event(\"slid.bs.carousel\",{relatedTarget:c,direction:s});return t.support.transition&&this.$element.hasClass(\"slide\")?(o.addClass(e),o[0].offsetWidth,i.addClass(s),o.addClass(s),i.one(\"bsTransitionEnd\",function(){o.removeClass([e,s].join(\" \")).addClass(\"active\"),i.removeClass([\"active\",s].join(\" \")),u.sliding=!1,setTimeout(function(){u.$element.trigger(p)},0)}).emulateTransitionEnd(n.TRANSITION_DURATION)):(i.removeClass(\"active\"),o.addClass(\"active\"),this.sliding=!1,this.$element.trigger(p)),a&&this.cycle(),this}};var r=t.fn.carousel;t.fn.carousel=e,t.fn.carousel.Constructor=n,t.fn.carousel.noConflict=function(){return t.fn.carousel=r,this};var i=function(n){var r,i=t(this),o=t(i.attr(\"data-target\")||(r=i.attr(\"href\"))&&r.replace(/.*(?=#[^\\s]+$)/,\"\"));if(o.hasClass(\"carousel\")){var a=t.extend({},o.data(),i.data()),s=i.attr(\"data-slide-to\");s&&(a.interval=!1),e.call(o,a),s&&o.data(\"bs.carousel\").to(s),n.preventDefault()}};t(document).on(\"click.bs.carousel.data-api\",\"[data-slide]\",i).on(\"click.bs.carousel.data-api\",\"[data-slide-to]\",i),t(window).on(\"load\",function(){t('[data-ride=\"carousel\"]').each(function(){var n=t(this);e.call(n,n.data())})})}(jQuery),function(t){\"use strict\";function e(e){var n,r=e.attr(\"data-target\")||(n=e.attr(\"href\"))&&n.replace(/.*(?=#[^\\s]+$)/,\"\");return t(r)}function n(e){return this.each(function(){var n=t(this),i=n.data(\"bs.collapse\"),o=t.extend({},r.DEFAULTS,n.data(),\"object\"==typeof e&&e);!i&&o.toggle&&/show|hide/.test(e)&&(o.toggle=!1),i||n.data(\"bs.collapse\",i=new r(this,o)),\"string\"==typeof e&&i[e]()})}var r=function(e,n){this.$element=t(e),this.options=t.extend({},r.DEFAULTS,n),this.$trigger=t('[data-toggle=\"collapse\"][href=\"#'+e.id+'\"],[data-toggle=\"collapse\"][data-target=\"#'+e.id+'\"]'),this.transitioning=null,this.options.parent?this.$parent=this.getParent():this.addAriaAndCollapsedClass(this.$element,this.$trigger),this.options.toggle&&this.toggle()};r.VERSION=\"3.3.7\",r.TRANSITION_DURATION=350,r.DEFAULTS={toggle:!0},r.prototype.dimension=function(){return this.$element.hasClass(\"width\")?\"width\":\"height\"},r.prototype.show=function(){if(!this.transitioning&&!this.$element.hasClass(\"in\")){var e,i=this.$parent&&this.$parent.children(\".panel\").children(\".in, .collapsing\");if(!(i&&i.length&&(e=i.data(\"bs.collapse\"))&&e.transitioning)){var o=t.Event(\"show.bs.collapse\");if(this.$element.trigger(o),!o.isDefaultPrevented()){i&&i.length&&(n.call(i,\"hide\"),e||i.data(\"bs.collapse\",null));var a=this.dimension();this.$element.removeClass(\"collapse\").addClass(\"collapsing\")[a](0).attr(\"aria-expanded\",!0),this.$trigger.removeClass(\"collapsed\").attr(\"aria-expanded\",!0),this.transitioning=1;var s=function(){this.$element.removeClass(\"collapsing\").addClass(\"collapse in\")[a](\"\"),this.transitioning=0,this.$element.trigger(\"shown.bs.collapse\")};if(!t.support.transition)return s.call(this);var u=t.camelCase([\"scroll\",a].join(\"-\"));this.$element.one(\"bsTransitionEnd\",t.proxy(s,this)).emulateTransitionEnd(r.TRANSITION_DURATION)[a](this.$element[0][u])}}}},r.prototype.hide=function(){if(!this.transitioning&&this.$element.hasClass(\"in\")){var e=t.Event(\"hide.bs.collapse\");if(this.$element.trigger(e),!e.isDefaultPrevented()){var n=this.dimension();this.$element[n](this.$element[n]())[0].offsetHeight,this.$element.addClass(\"collapsing\").removeClass(\"collapse in\").attr(\"aria-expanded\",!1),this.$trigger.addClass(\"collapsed\").attr(\"aria-expanded\",!1),this.transitioning=1;var i=function(){this.transitioning=0,this.$element.removeClass(\"collapsing\").addClass(\"collapse\").trigger(\"hidden.bs.collapse\")};if(!t.support.transition)return i.call(this);this.$element[n](0).one(\"bsTransitionEnd\",t.proxy(i,this)).emulateTransitionEnd(r.TRANSITION_DURATION)}}},r.prototype.toggle=function(){this[this.$element.hasClass(\"in\")?\"hide\":\"show\"]()},r.prototype.getParent=function(){return t(this.options.parent).find('[data-toggle=\"collapse\"][data-parent=\"'+this.options.parent+'\"]').each(t.proxy(function(n,r){var i=t(r);this.addAriaAndCollapsedClass(e(i),i)},this)).end()},r.prototype.addAriaAndCollapsedClass=function(t,e){var n=t.hasClass(\"in\");t.attr(\"aria-expanded\",n),e.toggleClass(\"collapsed\",!n).attr(\"aria-expanded\",n)};var i=t.fn.collapse;t.fn.collapse=n,t.fn.collapse.Constructor=r,t.fn.collapse.noConflict=function(){return t.fn.collapse=i,this},t(document).on(\"click.bs.collapse.data-api\",'[data-toggle=\"collapse\"]',function(r){var i=t(this);i.attr(\"data-target\")||r.preventDefault();var o=e(i),a=o.data(\"bs.collapse\"),s=a?\"toggle\":i.data();n.call(o,s)})}(jQuery),function(t){\"use strict\";function e(e){var n=e.attr(\"data-target\");n||(n=e.attr(\"href\"),n=n&&/#[A-Za-z]/.test(n)&&n.replace(/.*(?=#[^\\s]*$)/,\"\"));var r=n&&t(n);return r&&r.length?r:e.parent()}function n(n){n&&3===n.which||(t(i).remove(),t(o).each(function(){var r=t(this),i=e(r),o={relatedTarget:this};i.hasClass(\"open\")&&(n&&\"click\"==n.type&&/input|textarea/i.test(n.target.tagName)&&t.contains(i[0],n.target)||(i.trigger(n=t.Event(\"hide.bs.dropdown\",o)),n.isDefaultPrevented()||(r.attr(\"aria-expanded\",\"false\"),i.removeClass(\"open\").trigger(t.Event(\"hidden.bs.dropdown\",o)))))}))}function r(e){return this.each(function(){var n=t(this),r=n.data(\"bs.dropdown\");r||n.data(\"bs.dropdown\",r=new a(this)),\"string\"==typeof e&&r[e].call(n)})}var i=\".dropdown-backdrop\",o='[data-toggle=\"dropdown\"]',a=function(e){t(e).on(\"click.bs.dropdown\",this.toggle)};a.VERSION=\"3.3.7\",a.prototype.toggle=function(r){var i=t(this);if(!i.is(\".disabled, :disabled\")){var o=e(i),a=o.hasClass(\"open\");if(n(),!a){\"ontouchstart\"in document.documentElement&&!o.closest(\".navbar-nav\").length&&t(document.createElement(\"div\")).addClass(\"dropdown-backdrop\").insertAfter(t(this)).on(\"click\",n);var s={relatedTarget:this};if(o.trigger(r=t.Event(\"show.bs.dropdown\",s)),r.isDefaultPrevented())return;i.trigger(\"focus\").attr(\"aria-expanded\",\"true\"),o.toggleClass(\"open\").trigger(t.Event(\"shown.bs.dropdown\",s))}return!1}},a.prototype.keydown=function(n){if(/(38|40|27|32)/.test(n.which)&&!/input|textarea/i.test(n.target.tagName)){var r=t(this);if(n.preventDefault(),n.stopPropagation(),!r.is(\".disabled, :disabled\")){var i=e(r),a=i.hasClass(\"open\");if(!a&&27!=n.which||a&&27==n.which)return 27==n.which&&i.find(o).trigger(\"focus\"),r.trigger(\"click\");var s=i.find(\".dropdown-menu li:not(.disabled):visible a\");if(s.length){var u=s.index(n.target);38==n.which&&u>0&&u--,40==n.which&&u<s.length-1&&u++,~u||(u=0),s.eq(u).trigger(\"focus\")}}}};var s=t.fn.dropdown;t.fn.dropdown=r,t.fn.dropdown.Constructor=a,t.fn.dropdown.noConflict=function(){return t.fn.dropdown=s,this},t(document).on(\"click.bs.dropdown.data-api\",n).on(\"click.bs.dropdown.data-api\",\".dropdown form\",function(t){t.stopPropagation()}).on(\"click.bs.dropdown.data-api\",o,a.prototype.toggle).on(\"keydown.bs.dropdown.data-api\",o,a.prototype.keydown).on(\"keydown.bs.dropdown.data-api\",\".dropdown-menu\",a.prototype.keydown)}(jQuery),function(t){\"use strict\";function e(e,r){return this.each(function(){var i=t(this),o=i.data(\"bs.modal\"),a=t.extend({},n.DEFAULTS,i.data(),\"object\"==typeof e&&e);o||i.data(\"bs.modal\",o=new n(this,a)),\"string\"==typeof e?o[e](r):a.show&&o.show(r)})}var n=function(e,n){this.options=n,this.$body=t(document.body),this.$element=t(e),this.$dialog=this.$element.find(\".modal-dialog\"),this.$backdrop=null,this.isShown=null,this.originalBodyPad=null,this.scrollbarWidth=0,this.ignoreBackdropClick=!1,this.options.remote&&this.$element.find(\".modal-content\").load(this.options.remote,t.proxy(function(){this.$element.trigger(\"loaded.bs.modal\")},this))};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=300,n.BACKDROP_TRANSITION_DURATION=150,n.DEFAULTS={backdrop:!0,keyboard:!0,show:!0},n.prototype.toggle=function(t){return this.isShown?this.hide():this.show(t)},n.prototype.show=function(e){var r=this,i=t.Event(\"show.bs.modal\",{relatedTarget:e});this.$element.trigger(i),this.isShown||i.isDefaultPrevented()||(this.isShown=!0,this.checkScrollbar(),this.setScrollbar(),this.$body.addClass(\"modal-open\"),this.escape(),this.resize(),this.$element.on(\"click.dismiss.bs.modal\",'[data-dismiss=\"modal\"]',t.proxy(this.hide,this)),this.$dialog.on(\"mousedown.dismiss.bs.modal\",function(){r.$element.one(\"mouseup.dismiss.bs.modal\",function(e){t(e.target).is(r.$element)&&(r.ignoreBackdropClick=!0)})}),this.backdrop(function(){var i=t.support.transition&&r.$element.hasClass(\"fade\");r.$element.parent().length||r.$element.appendTo(r.$body),r.$element.show().scrollTop(0),r.adjustDialog(),i&&r.$element[0].offsetWidth,r.$element.addClass(\"in\"),r.enforceFocus();var o=t.Event(\"shown.bs.modal\",{relatedTarget:e});i?r.$dialog.one(\"bsTransitionEnd\",function(){r.$element.trigger(\"focus\").trigger(o)}).emulateTransitionEnd(n.TRANSITION_DURATION):r.$element.trigger(\"focus\").trigger(o)}))},n.prototype.hide=function(e){e&&e.preventDefault(),e=t.Event(\"hide.bs.modal\"),this.$element.trigger(e),this.isShown&&!e.isDefaultPrevented()&&(this.isShown=!1,this.escape(),this.resize(),t(document).off(\"focusin.bs.modal\"),this.$element.removeClass(\"in\").off(\"click.dismiss.bs.modal\").off(\"mouseup.dismiss.bs.modal\"),this.$dialog.off(\"mousedown.dismiss.bs.modal\"),t.support.transition&&this.$element.hasClass(\"fade\")?this.$element.one(\"bsTransitionEnd\",t.proxy(this.hideModal,this)).emulateTransitionEnd(n.TRANSITION_DURATION):this.hideModal())},n.prototype.enforceFocus=function(){t(document).off(\"focusin.bs.modal\").on(\"focusin.bs.modal\",t.proxy(function(t){document===t.target||this.$element[0]===t.target||this.$element.has(t.target).length||this.$element.trigger(\"focus\")},this))},n.prototype.escape=function(){this.isShown&&this.options.keyboard?this.$element.on(\"keydown.dismiss.bs.modal\",t.proxy(function(t){27==t.which&&this.hide()},this)):this.isShown||this.$element.off(\"keydown.dismiss.bs.modal\")},n.prototype.resize=function(){this.isShown?t(window).on(\"resize.bs.modal\",t.proxy(this.handleUpdate,this)):t(window).off(\"resize.bs.modal\")},n.prototype.hideModal=function(){var t=this;this.$element.hide(),this.backdrop(function(){t.$body.removeClass(\"modal-open\"),t.resetAdjustments(),t.resetScrollbar(),t.$element.trigger(\"hidden.bs.modal\")})},n.prototype.removeBackdrop=function(){this.$backdrop&&this.$backdrop.remove(),this.$backdrop=null},n.prototype.backdrop=function(e){var r=this,i=this.$element.hasClass(\"fade\")?\"fade\":\"\";if(this.isShown&&this.options.backdrop){var o=t.support.transition&&i;if(this.$backdrop=t(document.createElement(\"div\")).addClass(\"modal-backdrop \"+i).appendTo(this.$body),this.$element.on(\"click.dismiss.bs.modal\",t.proxy(function(t){if(this.ignoreBackdropClick)return void(this.ignoreBackdropClick=!1);t.target===t.currentTarget&&(\"static\"==this.options.backdrop?this.$element[0].focus():this.hide())},this)),o&&this.$backdrop[0].offsetWidth,this.$backdrop.addClass(\"in\"),!e)return;o?this.$backdrop.one(\"bsTransitionEnd\",e).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):e()}else if(!this.isShown&&this.$backdrop){this.$backdrop.removeClass(\"in\");var a=function(){r.removeBackdrop(),e&&e()};t.support.transition&&this.$element.hasClass(\"fade\")?this.$backdrop.one(\"bsTransitionEnd\",a).emulateTransitionEnd(n.BACKDROP_TRANSITION_DURATION):a()}else e&&e()},n.prototype.handleUpdate=function(){this.adjustDialog()},n.prototype.adjustDialog=function(){var t=this.$element[0].scrollHeight>document.documentElement.clientHeight;this.$element.css({paddingLeft:!this.bodyIsOverflowing&&t?this.scrollbarWidth:\"\",paddingRight:this.bodyIsOverflowing&&!t?this.scrollbarWidth:\"\"})},n.prototype.resetAdjustments=function(){this.$element.css({paddingLeft:\"\",paddingRight:\"\"})},n.prototype.checkScrollbar=function(){var t=window.innerWidth;if(!t){var e=document.documentElement.getBoundingClientRect();t=e.right-Math.abs(e.left)}this.bodyIsOverflowing=document.body.clientWidth<t,this.scrollbarWidth=this.measureScrollbar()},n.prototype.setScrollbar=function(){var t=parseInt(this.$body.css(\"padding-right\")||0,10);this.originalBodyPad=document.body.style.paddingRight||\"\",this.bodyIsOverflowing&&this.$body.css(\"padding-right\",t+this.scrollbarWidth)},n.prototype.resetScrollbar=function(){this.$body.css(\"padding-right\",this.originalBodyPad)},n.prototype.measureScrollbar=function(){var t=document.createElement(\"div\");t.className=\"modal-scrollbar-measure\",this.$body.append(t);var e=t.offsetWidth-t.clientWidth;return this.$body[0].removeChild(t),e};var r=t.fn.modal;t.fn.modal=e,t.fn.modal.Constructor=n,t.fn.modal.noConflict=function(){return t.fn.modal=r,this},t(document).on(\"click.bs.modal.data-api\",'[data-toggle=\"modal\"]',function(n){var r=t(this),i=r.attr(\"href\"),o=t(r.attr(\"data-target\")||i&&i.replace(/.*(?=#[^\\s]+$)/,\"\")),a=o.data(\"bs.modal\")?\"toggle\":t.extend({remote:!/#/.test(i)&&i},o.data(),r.data());r.is(\"a\")&&n.preventDefault(),o.one(\"show.bs.modal\",function(t){t.isDefaultPrevented()||o.one(\"hidden.bs.modal\",function(){r.is(\":visible\")&&r.trigger(\"focus\")})}),e.call(o,a,this)})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.tooltip\"),o=\"object\"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||r.data(\"bs.tooltip\",i=new n(this,o)),\"string\"==typeof e&&i[e]())})}var n=function(t,e){this.type=null,this.options=null,this.enabled=null,this.timeout=null,this.hoverState=null,this.$element=null,this.inState=null,this.init(\"tooltip\",t,e)};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=150,n.DEFAULTS={animation:!0,placement:\"top\",selector:!1,template:'<div class=\"tooltip\" role=\"tooltip\"><div class=\"tooltip-arrow\"></div><div class=\"tooltip-inner\"></div></div>',trigger:\"hover focus\",title:\"\",delay:0,html:!1,container:!1,viewport:{selector:\"body\",padding:0}},n.prototype.init=function(e,n,r){if(this.enabled=!0,this.type=e,this.$element=t(n),this.options=this.getOptions(r),this.$viewport=this.options.viewport&&t(t.isFunction(this.options.viewport)?this.options.viewport.call(this,this.$element):this.options.viewport.selector||this.options.viewport),this.inState={click:!1,hover:!1,focus:!1},this.$element[0]instanceof document.constructor&&!this.options.selector)throw new Error(\"`selector` option must be specified when initializing \"+this.type+\" on the window.document object!\");for(var i=this.options.trigger.split(\" \"),o=i.length;o--;){var a=i[o];if(\"click\"==a)this.$element.on(\"click.\"+this.type,this.options.selector,t.proxy(this.toggle,this));else if(\"manual\"!=a){var s=\"hover\"==a?\"mouseenter\":\"focusin\",u=\"hover\"==a?\"mouseleave\":\"focusout\";this.$element.on(s+\".\"+this.type,this.options.selector,t.proxy(this.enter,this)),this.$element.on(u+\".\"+this.type,this.options.selector,t.proxy(this.leave,this))}}this.options.selector?this._options=t.extend({},this.options,{trigger:\"manual\",selector:\"\"}):this.fixTitle()},n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.getOptions=function(e){return e=t.extend({},this.getDefaults(),this.$element.data(),e),e.delay&&\"number\"==typeof e.delay&&(e.delay={show:e.delay,hide:e.delay}),e},n.prototype.getDelegateOptions=function(){var e={},n=this.getDefaults();return this._options&&t.each(this._options,function(t,r){n[t]!=r&&(e[t]=r)}),e},n.prototype.enter=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);return n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusin\"==e.type?\"focus\":\"hover\"]=!0),n.tip().hasClass(\"in\")||\"in\"==n.hoverState?void(n.hoverState=\"in\"):(clearTimeout(n.timeout),n.hoverState=\"in\",n.options.delay&&n.options.delay.show?void(n.timeout=setTimeout(function(){\"in\"==n.hoverState&&n.show()},n.options.delay.show)):n.show())},n.prototype.isInStateTrue=function(){for(var t in this.inState)if(this.inState[t])return!0;return!1},n.prototype.leave=function(e){var n=e instanceof this.constructor?e:t(e.currentTarget).data(\"bs.\"+this.type);if(n||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n)),e instanceof t.Event&&(n.inState[\"focusout\"==e.type?\"focus\":\"hover\"]=!1),!n.isInStateTrue()){if(clearTimeout(n.timeout),n.hoverState=\"out\",!n.options.delay||!n.options.delay.hide)return n.hide();n.timeout=setTimeout(function(){\"out\"==n.hoverState&&n.hide()},n.options.delay.hide)}},n.prototype.show=function(){var e=t.Event(\"show.bs.\"+this.type);if(this.hasContent()&&this.enabled){this.$element.trigger(e);var r=t.contains(this.$element[0].ownerDocument.documentElement,this.$element[0]);if(e.isDefaultPrevented()||!r)return;var i=this,o=this.tip(),a=this.getUID(this.type);this.setContent(),o.attr(\"id\",a),this.$element.attr(\"aria-describedby\",a),this.options.animation&&o.addClass(\"fade\");var s=\"function\"==typeof this.options.placement?this.options.placement.call(this,o[0],this.$element[0]):this.options.placement,u=/\\s?auto?\\s?/i,c=u.test(s);c&&(s=s.replace(u,\"\")||\"top\"),o.detach().css({top:0,left:0,display:\"block\"}).addClass(s).data(\"bs.\"+this.type,this),this.options.container?o.appendTo(this.options.container):o.insertAfter(this.$element),this.$element.trigger(\"inserted.bs.\"+this.type);var l=this.getPosition(),f=o[0].offsetWidth,p=o[0].offsetHeight;if(c){var d=s,h=this.getPosition(this.$viewport);s=\"bottom\"==s&&l.bottom+p>h.bottom?\"top\":\"top\"==s&&l.top-p<h.top?\"bottom\":\"right\"==s&&l.right+f>h.width?\"left\":\"left\"==s&&l.left-f<h.left?\"right\":s,o.removeClass(d).addClass(s)}var v=this.getCalculatedOffset(s,l,f,p);this.applyPlacement(v,s);var g=function(){var t=i.hoverState;i.$element.trigger(\"shown.bs.\"+i.type),i.hoverState=null,\"out\"==t&&i.leave(i)};t.support.transition&&this.$tip.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",g).emulateTransitionEnd(n.TRANSITION_DURATION):g()}},n.prototype.applyPlacement=function(e,n){var r=this.tip(),i=r[0].offsetWidth,o=r[0].offsetHeight,a=parseInt(r.css(\"margin-top\"),10),s=parseInt(r.css(\"margin-left\"),10);isNaN(a)&&(a=0),isNaN(s)&&(s=0),e.top+=a,e.left+=s,t.offset.setOffset(r[0],t.extend({using:function(t){r.css({top:Math.round(t.top),left:Math.round(t.left)})}},e),0),r.addClass(\"in\");var u=r[0].offsetWidth,c=r[0].offsetHeight;\"top\"==n&&c!=o&&(e.top=e.top+o-c);var l=this.getViewportAdjustedDelta(n,e,u,c);l.left?e.left+=l.left:e.top+=l.top;var f=/top|bottom/.test(n),p=f?2*l.left-i+u:2*l.top-o+c,d=f?\"offsetWidth\":\"offsetHeight\";r.offset(e),this.replaceArrow(p,r[0][d],f)},n.prototype.replaceArrow=function(t,e,n){this.arrow().css(n?\"left\":\"top\",50*(1-t/e)+\"%\").css(n?\"top\":\"left\",\"\")},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle();t.find(\".tooltip-inner\")[this.options.html?\"html\":\"text\"](e),t.removeClass(\"fade in top bottom left right\")},n.prototype.hide=function(e){function r(){\"in\"!=i.hoverState&&o.detach(),i.$element&&i.$element.removeAttr(\"aria-describedby\").trigger(\"hidden.bs.\"+i.type),e&&e()}var i=this,o=t(this.$tip),a=t.Event(\"hide.bs.\"+this.type);if(this.$element.trigger(a),!a.isDefaultPrevented())return o.removeClass(\"in\"),t.support.transition&&o.hasClass(\"fade\")?o.one(\"bsTransitionEnd\",r).emulateTransitionEnd(n.TRANSITION_DURATION):r(),this.hoverState=null,this},n.prototype.fixTitle=function(){var t=this.$element;(t.attr(\"title\")||\"string\"!=typeof t.attr(\"data-original-title\"))&&t.attr(\"data-original-title\",t.attr(\"title\")||\"\").attr(\"title\",\"\")},n.prototype.hasContent=function(){return this.getTitle()},n.prototype.getPosition=function(e){e=e||this.$element;var n=e[0],r=\"BODY\"==n.tagName,i=n.getBoundingClientRect();null==i.width&&(i=t.extend({},i,{width:i.right-i.left,height:i.bottom-i.top}));var o=window.SVGElement&&n instanceof window.SVGElement,a=r?{top:0,left:0}:o?null:e.offset(),s={scroll:r?document.documentElement.scrollTop||document.body.scrollTop:e.scrollTop()},u=r?{width:t(window).width(),height:t(window).height()}:null;return t.extend({},i,s,u,a)},n.prototype.getCalculatedOffset=function(t,e,n,r){return\"bottom\"==t?{top:e.top+e.height,left:e.left+e.width/2-n/2}:\"top\"==t?{top:e.top-r,left:e.left+e.width/2-n/2}:\"left\"==t?{top:e.top+e.height/2-r/2,left:e.left-n}:{top:e.top+e.height/2-r/2,left:e.left+e.width}},n.prototype.getViewportAdjustedDelta=function(t,e,n,r){var i={top:0,left:0};if(!this.$viewport)return i;var o=this.options.viewport&&this.options.viewport.padding||0,a=this.getPosition(this.$viewport);if(/right|left/.test(t)){var s=e.top-o-a.scroll,u=e.top+o-a.scroll+r;s<a.top?i.top=a.top-s:u>a.top+a.height&&(i.top=a.top+a.height-u)}else{var c=e.left-o,l=e.left+o+n;c<a.left?i.left=a.left-c:l>a.right&&(i.left=a.left+a.width-l)}return i},n.prototype.getTitle=function(){var t=this.$element,e=this.options;return t.attr(\"data-original-title\")||(\"function\"==typeof e.title?e.title.call(t[0]):e.title)},n.prototype.getUID=function(t){do{t+=~~(1e6*Math.random())}while(document.getElementById(t));return t},n.prototype.tip=function(){if(!this.$tip&&(this.$tip=t(this.options.template),1!=this.$tip.length))throw new Error(this.type+\" `template` option must consist of exactly 1 top-level element!\");return this.$tip},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".tooltip-arrow\")},n.prototype.enable=function(){this.enabled=!0},n.prototype.disable=function(){this.enabled=!1},n.prototype.toggleEnabled=function(){this.enabled=!this.enabled},n.prototype.toggle=function(e){var n=this;e&&((n=t(e.currentTarget).data(\"bs.\"+this.type))||(n=new this.constructor(e.currentTarget,this.getDelegateOptions()),t(e.currentTarget).data(\"bs.\"+this.type,n))),e?(n.inState.click=!n.inState.click,n.isInStateTrue()?n.enter(n):n.leave(n)):n.tip().hasClass(\"in\")?n.leave(n):n.enter(n)},n.prototype.destroy=function(){var t=this;clearTimeout(this.timeout),this.hide(function(){t.$element.off(\".\"+t.type).removeData(\"bs.\"+t.type),t.$tip&&t.$tip.detach(),t.$tip=null,t.$arrow=null,t.$viewport=null,t.$element=null})};var r=t.fn.tooltip;t.fn.tooltip=e,t.fn.tooltip.Constructor=n,t.fn.tooltip.noConflict=function(){return t.fn.tooltip=r,this}}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.popover\"),o=\"object\"==typeof e&&e;!i&&/destroy|hide/.test(e)||(i||r.data(\"bs.popover\",i=new n(this,o)),\"string\"==typeof e&&i[e]())})}var n=function(t,e){this.init(\"popover\",t,e)};if(!t.fn.tooltip)throw new Error(\"Popover requires tooltip.js\");n.VERSION=\"3.3.7\",n.DEFAULTS=t.extend({},t.fn.tooltip.Constructor.DEFAULTS,{placement:\"right\",trigger:\"click\",content:\"\",template:'<div class=\"popover\" role=\"tooltip\"><div class=\"arrow\"></div><h3 class=\"popover-title\"></h3><div class=\"popover-content\"></div></div>'}),n.prototype=t.extend({},t.fn.tooltip.Constructor.prototype),n.prototype.constructor=n,n.prototype.getDefaults=function(){return n.DEFAULTS},n.prototype.setContent=function(){var t=this.tip(),e=this.getTitle(),n=this.getContent();t.find(\".popover-title\")[this.options.html?\"html\":\"text\"](e),t.find(\".popover-content\").children().detach().end()[this.options.html?\"string\"==typeof n?\"html\":\"append\":\"text\"](n),t.removeClass(\"fade top bottom left right in\"),t.find(\".popover-title\").html()||t.find(\".popover-title\").hide()},n.prototype.hasContent=function(){return this.getTitle()||this.getContent()},n.prototype.getContent=function(){var t=this.$element,e=this.options;return t.attr(\"data-content\")||(\"function\"==typeof e.content?e.content.call(t[0]):e.content)},n.prototype.arrow=function(){return this.$arrow=this.$arrow||this.tip().find(\".arrow\")};var r=t.fn.popover;t.fn.popover=e,t.fn.popover.Constructor=n,t.fn.popover.noConflict=function(){return t.fn.popover=r,this}}(jQuery),function(t){\"use strict\";function e(n,r){this.$body=t(document.body),this.$scrollElement=t(t(n).is(document.body)?window:n),this.options=t.extend({},e.DEFAULTS,r),this.selector=(this.options.target||\"\")+\" .nav li > a\",this.offsets=[],this.targets=[],this.activeTarget=null,this.scrollHeight=0,this.$scrollElement.on(\"scroll.bs.scrollspy\",t.proxy(this.process,this)),this.refresh(),this.process()}function n(n){return this.each(function(){var r=t(this),i=r.data(\"bs.scrollspy\"),o=\"object\"==typeof n&&n;i||r.data(\"bs.scrollspy\",i=new e(this,o)),\"string\"==typeof n&&i[n]()})}e.VERSION=\"3.3.7\",e.DEFAULTS={offset:10},e.prototype.getScrollHeight=function(){return this.$scrollElement[0].scrollHeight||Math.max(this.$body[0].scrollHeight,document.documentElement.scrollHeight)},e.prototype.refresh=function(){var e=this,n=\"offset\",r=0;this.offsets=[],this.targets=[],this.scrollHeight=this.getScrollHeight(),t.isWindow(this.$scrollElement[0])||(n=\"position\",r=this.$scrollElement.scrollTop()),this.$body.find(this.selector).map(function(){var e=t(this),i=e.data(\"target\")||e.attr(\"href\"),o=/^#./.test(i)&&t(i);return o&&o.length&&o.is(\":visible\")&&[[o[n]().top+r,i]]||null}).sort(function(t,e){return t[0]-e[0]}).each(function(){e.offsets.push(this[0]),e.targets.push(this[1])})},e.prototype.process=function(){var t,e=this.$scrollElement.scrollTop()+this.options.offset,n=this.getScrollHeight(),r=this.options.offset+n-this.$scrollElement.height(),i=this.offsets,o=this.targets,a=this.activeTarget;if(this.scrollHeight!=n&&this.refresh(),e>=r)return a!=(t=o[o.length-1])&&this.activate(t);if(a&&e<i[0])return this.activeTarget=null,this.clear();for(t=i.length;t--;)a!=o[t]&&e>=i[t]&&(void 0===i[t+1]||e<i[t+1])&&this.activate(o[t])},e.prototype.activate=function(e){this.activeTarget=e,this.clear();var n=this.selector+'[data-target=\"'+e+'\"],'+this.selector+'[href=\"'+e+'\"]',r=t(n).parents(\"li\").addClass(\"active\");r.parent(\".dropdown-menu\").length&&(r=r.closest(\"li.dropdown\").addClass(\"active\")),r.trigger(\"activate.bs.scrollspy\")},e.prototype.clear=function(){t(this.selector).parentsUntil(this.options.target,\".active\").removeClass(\"active\")};var r=t.fn.scrollspy;t.fn.scrollspy=n,t.fn.scrollspy.Constructor=e,t.fn.scrollspy.noConflict=function(){return t.fn.scrollspy=r,this},t(window).on(\"load.bs.scrollspy.data-api\",function(){t('[data-spy=\"scroll\"]').each(function(){var e=t(this);n.call(e,e.data())})})}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.tab\");i||r.data(\"bs.tab\",i=new n(this)),\"string\"==typeof e&&i[e]()})}var n=function(e){this.element=t(e)};n.VERSION=\"3.3.7\",n.TRANSITION_DURATION=150,n.prototype.show=function(){var e=this.element,n=e.closest(\"ul:not(.dropdown-menu)\"),r=e.data(\"target\");if(r||(r=e.attr(\"href\"),r=r&&r.replace(/.*(?=#[^\\s]*$)/,\"\")),!e.parent(\"li\").hasClass(\"active\")){var i=n.find(\".active:last a\"),o=t.Event(\"hide.bs.tab\",{relatedTarget:e[0]}),a=t.Event(\"show.bs.tab\",{relatedTarget:i[0]});if(i.trigger(o),e.trigger(a),!a.isDefaultPrevented()&&!o.isDefaultPrevented()){var s=t(r);this.activate(e.closest(\"li\"),n),this.activate(s,s.parent(),function(){i.trigger({type:\"hidden.bs.tab\",relatedTarget:e[0]}),e.trigger({type:\"shown.bs.tab\",relatedTarget:i[0]})})}}},n.prototype.activate=function(e,r,i){function o(){a.removeClass(\"active\").find(\"> .dropdown-menu > .active\").removeClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!1),e.addClass(\"active\").find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),s?(e[0].offsetWidth,e.addClass(\"in\")):e.removeClass(\"fade\"),e.parent(\".dropdown-menu\").length&&e.closest(\"li.dropdown\").addClass(\"active\").end().find('[data-toggle=\"tab\"]').attr(\"aria-expanded\",!0),i&&i()}var a=r.find(\"> .active\"),s=i&&t.support.transition&&(a.length&&a.hasClass(\"fade\")||!!r.find(\"> .fade\").length);a.length&&s?a.one(\"bsTransitionEnd\",o).emulateTransitionEnd(n.TRANSITION_DURATION):o(),a.removeClass(\"in\")};var r=t.fn.tab;t.fn.tab=e,t.fn.tab.Constructor=n,t.fn.tab.noConflict=function(){return t.fn.tab=r,this};var i=function(n){n.preventDefault(),e.call(t(this),\"show\")};t(document).on(\"click.bs.tab.data-api\",'[data-toggle=\"tab\"]',i).on(\"click.bs.tab.data-api\",'[data-toggle=\"pill\"]',i)}(jQuery),function(t){\"use strict\";function e(e){return this.each(function(){var r=t(this),i=r.data(\"bs.affix\"),o=\"object\"==typeof e&&e;i||r.data(\"bs.affix\",i=new n(this,o)),\"string\"==typeof e&&i[e]()})}var n=function(e,r){this.options=t.extend({},n.DEFAULTS,r),this.$target=t(this.options.target).on(\"scroll.bs.affix.data-api\",t.proxy(this.checkPosition,this)).on(\"click.bs.affix.data-api\",t.proxy(this.checkPositionWithEventLoop,this)),this.$element=t(e),this.affixed=null,this.unpin=null,this.pinnedOffset=null,this.checkPosition()};n.VERSION=\"3.3.7\",n.RESET=\"affix affix-top affix-bottom\",n.DEFAULTS={offset:0,target:window},n.prototype.getState=function(t,e,n,r){var i=this.$target.scrollTop(),o=this.$element.offset(),a=this.$target.height();if(null!=n&&\"top\"==this.affixed)return i<n&&\"top\";if(\"bottom\"==this.affixed)return null!=n?!(i+this.unpin<=o.top)&&\"bottom\":!(i+a<=t-r)&&\"bottom\";var s=null==this.affixed,u=s?i:o.top,c=s?a:e;return null!=n&&i<=n?\"top\":null!=r&&u+c>=t-r&&\"bottom\"},n.prototype.getPinnedOffset=function(){if(this.pinnedOffset)return this.pinnedOffset;this.$element.removeClass(n.RESET).addClass(\"affix\");var t=this.$target.scrollTop(),e=this.$element.offset();return this.pinnedOffset=e.top-t},n.prototype.checkPositionWithEventLoop=function(){setTimeout(t.proxy(this.checkPosition,this),1)},n.prototype.checkPosition=function(){if(this.$element.is(\":visible\")){var e=this.$element.height(),r=this.options.offset,i=r.top,o=r.bottom,a=Math.max(t(document).height(),t(document.body).height());\"object\"!=typeof r&&(o=i=r),\"function\"==typeof i&&(i=r.top(this.$element)),\"function\"==typeof o&&(o=r.bottom(this.$element));var s=this.getState(a,e,i,o);if(this.affixed!=s){null!=this.unpin&&this.$element.css(\"top\",\"\");var u=\"affix\"+(s?\"-\"+s:\"\"),c=t.Event(u+\".bs.affix\");if(this.$element.trigger(c),c.isDefaultPrevented())return;this.affixed=s,this.unpin=\"bottom\"==s?this.getPinnedOffset():null,this.$element.removeClass(n.RESET).addClass(u).trigger(u.replace(\"affix\",\"affixed\")+\".bs.affix\")}\"bottom\"==s&&this.$element.offset({top:a-e-o})}};var r=t.fn.affix;t.fn.affix=e,t.fn.affix.Constructor=n,t.fn.affix.noConflict=function(){return t.fn.affix=r,this},t(window).on(\"load\",function(){t('[data-spy=\"affix\"]').each(function(){var n=t(this),r=n.data();r.offset=r.offset||{},null!=r.offsetBottom&&(r.offset.bottom=r.offsetBottom),null!=r.offsetTop&&(r.offset.top=r.offsetTop),e.call(n,r)})})}(jQuery)},function(t,e,n){var r,i;/*!\n * jQuery JavaScript Library v3.2.1\n * https://jquery.com/\n *\n * Includes Sizzle.js\n * https://sizzlejs.com/\n *\n * Copyright JS Foundation and other contributors\n * Released under the MIT license\n * https://jquery.org/license\n *\n * Date: 2017-03-20T18:59Z\n */\n!function(e,n){\"use strict\";\"object\"==typeof t&&\"object\"==typeof t.exports?t.exports=e.document?n(e,!0):function(t){if(!t.document)throw new Error(\"jQuery requires a window with a document\");return n(t)}:n(e)}(\"undefined\"!=typeof window?window:this,function(n,o){\"use strict\";function a(t,e){e=e||at;var n=e.createElement(\"script\");n.text=t,e.head.appendChild(n).parentNode.removeChild(n)}function s(t){var e=!!t&&\"length\"in t&&t.length,n=yt.type(t);return\"function\"!==n&&!yt.isWindow(t)&&(\"array\"===n||0===e||\"number\"==typeof e&&e>0&&e-1 in t)}function u(t,e){return t.nodeName&&t.nodeName.toLowerCase()===e.toLowerCase()}function c(t,e,n){return yt.isFunction(e)?yt.grep(t,function(t,r){return!!e.call(t,r,t)!==n}):e.nodeType?yt.grep(t,function(t){return t===e!==n}):\"string\"!=typeof e?yt.grep(t,function(t){return ft.call(e,t)>-1!==n}):$t.test(e)?yt.filter(e,t,n):(e=yt.filter(e,t),yt.grep(t,function(t){return ft.call(e,t)>-1!==n&&1===t.nodeType}))}function l(t,e){for(;(t=t[e])&&1!==t.nodeType;);return t}function f(t){var e={};return yt.each(t.match(Ot)||[],function(t,n){e[n]=!0}),e}function p(t){return t}function d(t){throw t}function h(t,e,n,r){var i;try{t&&yt.isFunction(i=t.promise)?i.call(t).done(e).fail(n):t&&yt.isFunction(i=t.then)?i.call(t,e,n):e.apply(void 0,[t].slice(r))}catch(t){n.apply(void 0,[t])}}function v(){at.removeEventListener(\"DOMContentLoaded\",v),n.removeEventListener(\"load\",v),yt.ready()}function g(){this.expando=yt.expando+g.uid++}function m(t){return\"true\"===t||\"false\"!==t&&(\"null\"===t?null:t===+t+\"\"?+t:Pt.test(t)?JSON.parse(t):t)}function y(t,e,n){var r;if(void 0===n&&1===t.nodeType)if(r=\"data-\"+e.replace(Ft,\"-$&\").toLowerCase(),\"string\"==typeof(n=t.getAttribute(r))){try{n=m(n)}catch(t){}Rt.set(t,e,n)}else n=void 0;return n}function b(t,e,n,r){var i,o=1,a=20,s=r?function(){return r.cur()}:function(){return yt.css(t,e,\"\")},u=s(),c=n&&n[3]||(yt.cssNumber[e]?\"\":\"px\"),l=(yt.cssNumber[e]||\"px\"!==c&&+u)&&Mt.exec(yt.css(t,e));if(l&&l[3]!==c){c=c||l[3],n=n||[],l=+u||1;do{o=o||\".5\",l/=o,yt.style(t,e,l+c)}while(o!==(o=s()/u)&&1!==o&&--a)}return n&&(l=+l||+u||0,i=n[1]?l+(n[1]+1)*n[2]:+n[2],r&&(r.unit=c,r.start=l,r.end=i)),i}function _(t){var e,n=t.ownerDocument,r=t.nodeName,i=Wt[r];return i||(e=n.body.appendChild(n.createElement(r)),i=yt.css(e,\"display\"),e.parentNode.removeChild(e),\"none\"===i&&(i=\"block\"),Wt[r]=i,i)}function w(t,e){for(var n,r,i=[],o=0,a=t.length;o<a;o++)r=t[o],r.style&&(n=r.style.display,e?(\"none\"===n&&(i[o]=Lt.get(r,\"display\")||null,i[o]||(r.style.display=\"\")),\"\"===r.style.display&&Bt(r)&&(i[o]=_(r))):\"none\"!==n&&(i[o]=\"none\",Lt.set(r,\"display\",n)));for(o=0;o<a;o++)null!=i[o]&&(t[o].style.display=i[o]);return t}function x(t,e){var n;return n=void 0!==t.getElementsByTagName?t.getElementsByTagName(e||\"*\"):void 0!==t.querySelectorAll?t.querySelectorAll(e||\"*\"):[],void 0===e||e&&u(t,e)?yt.merge([t],n):n}function C(t,e){for(var n=0,r=t.length;n<r;n++)Lt.set(t[n],\"globalEval\",!e||Lt.get(e[n],\"globalEval\"))}function T(t,e,n,r,i){for(var o,a,s,u,c,l,f=e.createDocumentFragment(),p=[],d=0,h=t.length;d<h;d++)if((o=t[d])||0===o)if(\"object\"===yt.type(o))yt.merge(p,o.nodeType?[o]:o);else if(Jt.test(o)){for(a=a||f.appendChild(e.createElement(\"div\")),s=(Vt.exec(o)||[\"\",\"\"])[1].toLowerCase(),u=Kt[s]||Kt._default,a.innerHTML=u[1]+yt.htmlPrefilter(o)+u[2],l=u[0];l--;)a=a.lastChild;yt.merge(p,a.childNodes),a=f.firstChild,a.textContent=\"\"}else p.push(e.createTextNode(o));for(f.textContent=\"\",d=0;o=p[d++];)if(r&&yt.inArray(o,r)>-1)i&&i.push(o);else if(c=yt.contains(o.ownerDocument,o),a=x(f.appendChild(o),\"script\"),c&&C(a),n)for(l=0;o=a[l++];)Xt.test(o.type||\"\")&&n.push(o);return f}function $(){return!0}function k(){return!1}function A(){try{return at.activeElement}catch(t){}}function E(t,e,n,r,i,o){var a,s;if(\"object\"==typeof e){\"string\"!=typeof n&&(r=r||n,n=void 0);for(s in e)E(t,s,n,r,e[s],o);return t}if(null==r&&null==i?(i=n,r=n=void 0):null==i&&(\"string\"==typeof n?(i=r,r=void 0):(i=r,r=n,n=void 0)),!1===i)i=k;else if(!i)return t;return 1===o&&(a=i,i=function(t){return yt().off(t),a.apply(this,arguments)},i.guid=a.guid||(a.guid=yt.guid++)),t.each(function(){yt.event.add(this,e,i,r,n)})}function S(t,e){return u(t,\"table\")&&u(11!==e.nodeType?e:e.firstChild,\"tr\")?yt(\">tbody\",t)[0]||t:t}function O(t){return t.type=(null!==t.getAttribute(\"type\"))+\"/\"+t.type,t}function j(t){var e=ne.exec(t.type);return e?t.type=e[1]:t.removeAttribute(\"type\"),t}function N(t,e){var n,r,i,o,a,s,u,c;if(1===e.nodeType){if(Lt.hasData(t)&&(o=Lt.access(t),a=Lt.set(e,o),c=o.events)){delete a.handle,a.events={};for(i in c)for(n=0,r=c[i].length;n<r;n++)yt.event.add(e,i,c[i][n])}Rt.hasData(t)&&(s=Rt.access(t),u=yt.extend({},s),Rt.set(e,u))}}function D(t,e){var n=e.nodeName.toLowerCase();\"input\"===n&&zt.test(t.type)?e.checked=t.checked:\"input\"!==n&&\"textarea\"!==n||(e.defaultValue=t.defaultValue)}function I(t,e,n,r){e=ct.apply([],e);var i,o,s,u,c,l,f=0,p=t.length,d=p-1,h=e[0],v=yt.isFunction(h);if(v||p>1&&\"string\"==typeof h&&!mt.checkClone&&ee.test(h))return t.each(function(i){var o=t.eq(i);v&&(e[0]=h.call(this,i,o.html())),I(o,e,n,r)});if(p&&(i=T(e,t[0].ownerDocument,!1,t,r),o=i.firstChild,1===i.childNodes.length&&(i=o),o||r)){for(s=yt.map(x(i,\"script\"),O),u=s.length;f<p;f++)c=i,f!==d&&(c=yt.clone(c,!0,!0),u&&yt.merge(s,x(c,\"script\"))),n.call(t[f],c,f);if(u)for(l=s[s.length-1].ownerDocument,yt.map(s,j),f=0;f<u;f++)c=s[f],Xt.test(c.type||\"\")&&!Lt.access(c,\"globalEval\")&&yt.contains(l,c)&&(c.src?yt._evalUrl&&yt._evalUrl(c.src):a(c.textContent.replace(re,\"\"),l))}return t}function L(t,e,n){for(var r,i=e?yt.filter(e,t):t,o=0;null!=(r=i[o]);o++)n||1!==r.nodeType||yt.cleanData(x(r)),r.parentNode&&(n&&yt.contains(r.ownerDocument,r)&&C(x(r,\"script\")),r.parentNode.removeChild(r));return t}function R(t,e,n){var r,i,o,a,s=t.style;return n=n||ae(t),n&&(a=n.getPropertyValue(e)||n[e],\"\"!==a||yt.contains(t.ownerDocument,t)||(a=yt.style(t,e)),!mt.pixelMarginRight()&&oe.test(a)&&ie.test(e)&&(r=s.width,i=s.minWidth,o=s.maxWidth,s.minWidth=s.maxWidth=s.width=a,a=n.width,s.width=r,s.minWidth=i,s.maxWidth=o)),void 0!==a?a+\"\":a}function P(t,e){return{get:function(){return t()?void delete this.get:(this.get=e).apply(this,arguments)}}}function F(t){if(t in pe)return t;for(var e=t[0].toUpperCase()+t.slice(1),n=fe.length;n--;)if((t=fe[n]+e)in pe)return t}function q(t){var e=yt.cssProps[t];return e||(e=yt.cssProps[t]=F(t)||t),e}function M(t,e,n){var r=Mt.exec(e);return r?Math.max(0,r[2]-(n||0))+(r[3]||\"px\"):e}function H(t,e,n,r,i){var o,a=0;for(o=n===(r?\"border\":\"content\")?4:\"width\"===e?1:0;o<4;o+=2)\"margin\"===n&&(a+=yt.css(t,n+Ht[o],!0,i)),r?(\"content\"===n&&(a-=yt.css(t,\"padding\"+Ht[o],!0,i)),\"margin\"!==n&&(a-=yt.css(t,\"border\"+Ht[o]+\"Width\",!0,i))):(a+=yt.css(t,\"padding\"+Ht[o],!0,i),\"padding\"!==n&&(a+=yt.css(t,\"border\"+Ht[o]+\"Width\",!0,i)));return a}function B(t,e,n){var r,i=ae(t),o=R(t,e,i),a=\"border-box\"===yt.css(t,\"boxSizing\",!1,i);return oe.test(o)?o:(r=a&&(mt.boxSizingReliable()||o===t.style[e]),\"auto\"===o&&(o=t[\"offset\"+e[0].toUpperCase()+e.slice(1)]),(o=parseFloat(o)||0)+H(t,e,n||(a?\"border\":\"content\"),r,i)+\"px\")}function U(t,e,n,r,i){return new U.prototype.init(t,e,n,r,i)}function W(){he&&(!1===at.hidden&&n.requestAnimationFrame?n.requestAnimationFrame(W):n.setTimeout(W,yt.fx.interval),yt.fx.tick())}function z(){return n.setTimeout(function(){de=void 0}),de=yt.now()}function V(t,e){var n,r=0,i={height:t};for(e=e?1:0;r<4;r+=2-e)n=Ht[r],i[\"margin\"+n]=i[\"padding\"+n]=t;return e&&(i.opacity=i.width=t),i}function X(t,e,n){for(var r,i=(Q.tweeners[e]||[]).concat(Q.tweeners[\"*\"]),o=0,a=i.length;o<a;o++)if(r=i[o].call(n,e,t))return r}function K(t,e,n){var r,i,o,a,s,u,c,l,f=\"width\"in e||\"height\"in e,p=this,d={},h=t.style,v=t.nodeType&&Bt(t),g=Lt.get(t,\"fxshow\");n.queue||(a=yt._queueHooks(t,\"fx\"),null==a.unqueued&&(a.unqueued=0,s=a.empty.fire,a.empty.fire=function(){a.unqueued||s()}),a.unqueued++,p.always(function(){p.always(function(){a.unqueued--,yt.queue(t,\"fx\").length||a.empty.fire()})}));for(r in e)if(i=e[r],ve.test(i)){if(delete e[r],o=o||\"toggle\"===i,i===(v?\"hide\":\"show\")){if(\"show\"!==i||!g||void 0===g[r])continue;v=!0}d[r]=g&&g[r]||yt.style(t,r)}if((u=!yt.isEmptyObject(e))||!yt.isEmptyObject(d)){f&&1===t.nodeType&&(n.overflow=[h.overflow,h.overflowX,h.overflowY],c=g&&g.display,null==c&&(c=Lt.get(t,\"display\")),l=yt.css(t,\"display\"),\"none\"===l&&(c?l=c:(w([t],!0),c=t.style.display||c,l=yt.css(t,\"display\"),w([t]))),(\"inline\"===l||\"inline-block\"===l&&null!=c)&&\"none\"===yt.css(t,\"float\")&&(u||(p.done(function(){h.display=c}),null==c&&(l=h.display,c=\"none\"===l?\"\":l)),h.display=\"inline-block\")),n.overflow&&(h.overflow=\"hidden\",p.always(function(){h.overflow=n.overflow[0],h.overflowX=n.overflow[1],h.overflowY=n.overflow[2]})),u=!1;for(r in d)u||(g?\"hidden\"in g&&(v=g.hidden):g=Lt.access(t,\"fxshow\",{display:c}),o&&(g.hidden=!v),v&&w([t],!0),p.done(function(){v||w([t]),Lt.remove(t,\"fxshow\");for(r in d)yt.style(t,r,d[r])})),u=X(v?g[r]:0,r,p),r in g||(g[r]=u.start,v&&(u.end=u.start,u.start=0))}}function J(t,e){var n,r,i,o,a;for(n in t)if(r=yt.camelCase(n),i=e[r],o=t[n],Array.isArray(o)&&(i=o[1],o=t[n]=o[0]),n!==r&&(t[r]=o,delete t[n]),(a=yt.cssHooks[r])&&\"expand\"in a){o=a.expand(o),delete t[r];for(n in o)n in t||(t[n]=o[n],e[n]=i)}else e[r]=i}function Q(t,e,n){var r,i,o=0,a=Q.prefilters.length,s=yt.Deferred().always(function(){delete u.elem}),u=function(){if(i)return!1;for(var e=de||z(),n=Math.max(0,c.startTime+c.duration-e),r=n/c.duration||0,o=1-r,a=0,u=c.tweens.length;a<u;a++)c.tweens[a].run(o);return s.notifyWith(t,[c,o,n]),o<1&&u?n:(u||s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c]),!1)},c=s.promise({elem:t,props:yt.extend({},e),opts:yt.extend(!0,{specialEasing:{},easing:yt.easing._default},n),originalProperties:e,originalOptions:n,startTime:de||z(),duration:n.duration,tweens:[],createTween:function(e,n){var r=yt.Tween(t,c.opts,e,n,c.opts.specialEasing[e]||c.opts.easing);return c.tweens.push(r),r},stop:function(e){var n=0,r=e?c.tweens.length:0;if(i)return this;for(i=!0;n<r;n++)c.tweens[n].run(1);return e?(s.notifyWith(t,[c,1,0]),s.resolveWith(t,[c,e])):s.rejectWith(t,[c,e]),this}}),l=c.props;for(J(l,c.opts.specialEasing);o<a;o++)if(r=Q.prefilters[o].call(c,t,l,c.opts))return yt.isFunction(r.stop)&&(yt._queueHooks(c.elem,c.opts.queue).stop=yt.proxy(r.stop,r)),r;return yt.map(l,X,c),yt.isFunction(c.opts.start)&&c.opts.start.call(t,c),c.progress(c.opts.progress).done(c.opts.done,c.opts.complete).fail(c.opts.fail).always(c.opts.always),yt.fx.timer(yt.extend(u,{elem:t,anim:c,queue:c.opts.queue})),c}function G(t){return(t.match(Ot)||[]).join(\" \")}function Z(t){return t.getAttribute&&t.getAttribute(\"class\")||\"\"}function Y(t,e,n,r){var i;if(Array.isArray(e))yt.each(e,function(e,i){n||$e.test(t)?r(t,i):Y(t+\"[\"+(\"object\"==typeof i&&null!=i?e:\"\")+\"]\",i,n,r)});else if(n||\"object\"!==yt.type(e))r(t,e);else for(i in e)Y(t+\"[\"+i+\"]\",e[i],n,r)}function tt(t){return function(e,n){\"string\"!=typeof e&&(n=e,e=\"*\");var r,i=0,o=e.toLowerCase().match(Ot)||[];if(yt.isFunction(n))for(;r=o[i++];)\"+\"===r[0]?(r=r.slice(1)||\"*\",(t[r]=t[r]||[]).unshift(n)):(t[r]=t[r]||[]).push(n)}}function et(t,e,n,r){function i(s){var u;return o[s]=!0,yt.each(t[s]||[],function(t,s){var c=s(e,n,r);return\"string\"!=typeof c||a||o[c]?a?!(u=c):void 0:(e.dataTypes.unshift(c),i(c),!1)}),u}var o={},a=t===Ne;return i(e.dataTypes[0])||!o[\"*\"]&&i(\"*\")}function nt(t,e){var n,r,i=yt.ajaxSettings.flatOptions||{};for(n in e)void 0!==e[n]&&((i[n]?t:r||(r={}))[n]=e[n]);return r&&yt.extend(!0,t,r),t}function rt(t,e,n){for(var r,i,o,a,s=t.contents,u=t.dataTypes;\"*\"===u[0];)u.shift(),void 0===r&&(r=t.mimeType||e.getResponseHeader(\"Content-Type\"));if(r)for(i in s)if(s[i]&&s[i].test(r)){u.unshift(i);break}if(u[0]in n)o=u[0];else{for(i in n){if(!u[0]||t.converters[i+\" \"+u[0]]){o=i;break}a||(a=i)}o=o||a}if(o)return o!==u[0]&&u.unshift(o),n[o]}function it(t,e,n,r){var i,o,a,s,u,c={},l=t.dataTypes.slice();if(l[1])for(a in t.converters)c[a.toLowerCase()]=t.converters[a];for(o=l.shift();o;)if(t.responseFields[o]&&(n[t.responseFields[o]]=e),!u&&r&&t.dataFilter&&(e=t.dataFilter(e,t.dataType)),u=o,o=l.shift())if(\"*\"===o)o=u;else if(\"*\"!==u&&u!==o){if(!(a=c[u+\" \"+o]||c[\"* \"+o]))for(i in c)if(s=i.split(\" \"),s[1]===o&&(a=c[u+\" \"+s[0]]||c[\"* \"+s[0]])){!0===a?a=c[i]:!0!==c[i]&&(o=s[0],l.unshift(s[1]));break}if(!0!==a)if(a&&t.throws)e=a(e);else try{e=a(e)}catch(t){return{state:\"parsererror\",error:a?t:\"No conversion from \"+u+\" to \"+o}}}return{state:\"success\",data:e}}var ot=[],at=n.document,st=Object.getPrototypeOf,ut=ot.slice,ct=ot.concat,lt=ot.push,ft=ot.indexOf,pt={},dt=pt.toString,ht=pt.hasOwnProperty,vt=ht.toString,gt=vt.call(Object),mt={},yt=function(t,e){return new yt.fn.init(t,e)},bt=function(t,e){return e.toUpperCase()};yt.fn=yt.prototype={jquery:\"3.2.1\",constructor:yt,length:0,toArray:function(){return ut.call(this)},get:function(t){return null==t?ut.call(this):t<0?this[t+this.length]:this[t]},pushStack:function(t){var e=yt.merge(this.constructor(),t);return e.prevObject=this,e},each:function(t){return yt.each(this,t)},map:function(t){return this.pushStack(yt.map(this,function(e,n){return t.call(e,n,e)}))},slice:function(){return this.pushStack(ut.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(t){var e=this.length,n=+t+(t<0?e:0);return this.pushStack(n>=0&&n<e?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:lt,sort:ot.sort,splice:ot.splice},yt.extend=yt.fn.extend=function(){var t,e,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,c=!1;for(\"boolean\"==typeof a&&(c=a,a=arguments[s]||{},s++),\"object\"==typeof a||yt.isFunction(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(t=arguments[s]))for(e in t)n=a[e],r=t[e],a!==r&&(c&&r&&(yt.isPlainObject(r)||(i=Array.isArray(r)))?(i?(i=!1,o=n&&Array.isArray(n)?n:[]):o=n&&yt.isPlainObject(n)?n:{},a[e]=yt.extend(c,o,r)):void 0!==r&&(a[e]=r));return a},yt.extend({expando:\"jQuery\"+(\"3.2.1\"+Math.random()).replace(/\\D/g,\"\"),isReady:!0,error:function(t){throw new Error(t)},noop:function(){},isFunction:function(t){return\"function\"===yt.type(t)},isWindow:function(t){return null!=t&&t===t.window},isNumeric:function(t){var e=yt.type(t);return(\"number\"===e||\"string\"===e)&&!isNaN(t-parseFloat(t))},isPlainObject:function(t){var e,n;return!(!t||\"[object Object]\"!==dt.call(t))&&(!(e=st(t))||\"function\"==typeof(n=ht.call(e,\"constructor\")&&e.constructor)&&vt.call(n)===gt)},isEmptyObject:function(t){var e;for(e in t)return!1;return!0},type:function(t){return null==t?t+\"\":\"object\"==typeof t||\"function\"==typeof t?pt[dt.call(t)]||\"object\":typeof t},globalEval:function(t){a(t)},camelCase:function(t){return t.replace(/^-ms-/,\"ms-\").replace(/-([a-z])/g,bt)},each:function(t,e){var n,r=0;if(s(t))for(n=t.length;r<n&&!1!==e.call(t[r],r,t[r]);r++);else for(r in t)if(!1===e.call(t[r],r,t[r]))break;return t},trim:function(t){return null==t?\"\":(t+\"\").replace(/^[\\s\\uFEFF\\xA0]+|[\\s\\uFEFF\\xA0]+$/g,\"\")},makeArray:function(t,e){var n=e||[];return null!=t&&(s(Object(t))?yt.merge(n,\"string\"==typeof t?[t]:t):lt.call(n,t)),n},inArray:function(t,e,n){return null==e?-1:ft.call(e,t,n)},merge:function(t,e){for(var n=+e.length,r=0,i=t.length;r<n;r++)t[i++]=e[r];return t.length=i,t},grep:function(t,e,n){for(var r=[],i=0,o=t.length,a=!n;i<o;i++)!e(t[i],i)!==a&&r.push(t[i]);return r},map:function(t,e,n){var r,i,o=0,a=[];if(s(t))for(r=t.length;o<r;o++)null!=(i=e(t[o],o,n))&&a.push(i);else for(o in t)null!=(i=e(t[o],o,n))&&a.push(i);return ct.apply([],a)},guid:1,proxy:function(t,e){var n,r,i;if(\"string\"==typeof e&&(n=t[e],e=t,t=n),yt.isFunction(t))return r=ut.call(arguments,2),i=function(){return t.apply(e||this,r.concat(ut.call(arguments)))},i.guid=t.guid=t.guid||yt.guid++,i},now:Date.now,support:mt}),\"function\"==typeof Symbol&&(yt.fn[Symbol.iterator]=ot[Symbol.iterator]),yt.each(\"Boolean Number String Function Array Date RegExp Object Error Symbol\".split(\" \"),function(t,e){pt[\"[object \"+e+\"]\"]=e.toLowerCase()});var _t=/*!\n * Sizzle CSS Selector Engine v2.3.3\n * https://sizzlejs.com/\n *\n * Copyright jQuery Foundation and other contributors\n * Released under the MIT license\n * http://jquery.org/license\n *\n * Date: 2016-08-08\n */\nfunction(t){function e(t,e,n,r){var i,o,a,s,u,l,p,d=e&&e.ownerDocument,h=e?e.nodeType:9;if(n=n||[],\"string\"!=typeof t||!t||1!==h&&9!==h&&11!==h)return n;if(!r&&((e?e.ownerDocument||e:q)!==j&&O(e),e=e||j,D)){if(11!==h&&(u=vt.exec(t)))if(i=u[1]){if(9===h){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(d&&(a=d.getElementById(i))&&P(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return Q.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&_.getElementsByClassName&&e.getElementsByClassName)return Q.apply(n,e.getElementsByClassName(i)),n}if(_.qsa&&!W[t+\" \"]&&(!I||!I.test(t))){if(1!==h)d=e,p=t;else if(\"object\"!==e.nodeName.toLowerCase()){for((s=e.getAttribute(\"id\"))?s=s.replace(bt,_t):e.setAttribute(\"id\",s=F),l=T(t),o=l.length;o--;)l[o]=\"#\"+s+\" \"+f(l[o]);p=l.join(\",\"),d=gt.test(t)&&c(e.parentNode)||e}if(p)try{return Q.apply(n,d.querySelectorAll(p)),n}catch(t){}finally{s===F&&e.removeAttribute(\"id\")}}}return k(t.replace(ot,\"$1\"),e,n,r)}function n(){function t(n,r){return e.push(n+\" \")>w.cacheLength&&delete t[e.shift()],t[n+\" \"]=r}var e=[];return t}function r(t){return t[F]=!0,t}function i(t){var e=j.createElement(\"fieldset\");try{return!!t(e)}catch(t){return!1}finally{e.parentNode&&e.parentNode.removeChild(e),e=null}}function o(t,e){for(var n=t.split(\"|\"),r=n.length;r--;)w.attrHandle[n[r]]=e}function a(t,e){var n=e&&t,r=n&&1===t.nodeType&&1===e.nodeType&&t.sourceIndex-e.sourceIndex;if(r)return r;if(n)for(;n=n.nextSibling;)if(n===e)return-1;return t?1:-1}function s(t){return function(e){return\"form\"in e?e.parentNode&&!1===e.disabled?\"label\"in e?\"label\"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&xt(e)===t:e.disabled===t:\"label\"in e&&e.disabled===t}}function u(t){return r(function(e){return e=+e,r(function(n,r){for(var i,o=t([],n.length,e),a=o.length;a--;)n[i=o[a]]&&(n[i]=!(r[i]=n[i]))})})}function c(t){return t&&void 0!==t.getElementsByTagName&&t}function l(){}function f(t){for(var e=0,n=t.length,r=\"\";e<n;e++)r+=t[e].value;return r}function p(t,e,n){var r=e.dir,i=e.next,o=i||r,a=n&&\"parentNode\"===o,s=H++;return e.first?function(e,n,i){for(;e=e[r];)if(1===e.nodeType||a)return t(e,n,i);return!1}:function(e,n,u){var c,l,f,p=[M,s];if(u){for(;e=e[r];)if((1===e.nodeType||a)&&t(e,n,u))return!0}else for(;e=e[r];)if(1===e.nodeType||a)if(f=e[F]||(e[F]={}),l=f[e.uniqueID]||(f[e.uniqueID]={}),i&&i===e.nodeName.toLowerCase())e=e[r]||e;else{if((c=l[o])&&c[0]===M&&c[1]===s)return p[2]=c[2];if(l[o]=p,p[2]=t(e,n,u))return!0}return!1}}function d(t){return t.length>1?function(e,n,r){for(var i=t.length;i--;)if(!t[i](e,n,r))return!1;return!0}:t[0]}function h(t,n,r){for(var i=0,o=n.length;i<o;i++)e(t,n[i],r);return r}function v(t,e,n,r,i){for(var o,a=[],s=0,u=t.length,c=null!=e;s<u;s++)(o=t[s])&&(n&&!n(o,r,i)||(a.push(o),c&&e.push(s)));return a}function g(t,e,n,i,o,a){return i&&!i[F]&&(i=g(i)),o&&!o[F]&&(o=g(o,a)),r(function(r,a,s,u){var c,l,f,p=[],d=[],g=a.length,m=r||h(e||\"*\",s.nodeType?[s]:s,[]),y=!t||!r&&e?m:v(m,p,t,s,u),b=n?o||(r?t:g||i)?[]:a:y;if(n&&n(y,b,s,u),i)for(c=v(b,d),i(c,[],s,u),l=c.length;l--;)(f=c[l])&&(b[d[l]]=!(y[d[l]]=f));if(r){if(o||t){if(o){for(c=[],l=b.length;l--;)(f=b[l])&&c.push(y[l]=f);o(null,b=[],c,u)}for(l=b.length;l--;)(f=b[l])&&(c=o?Z(r,f):p[l])>-1&&(r[c]=!(a[c]=f))}}else b=v(b===a?b.splice(g,b.length):b),o?o(null,a,b,u):Q.apply(a,b)})}function m(t){for(var e,n,r,i=t.length,o=w.relative[t[0].type],a=o||w.relative[\" \"],s=o?1:0,u=p(function(t){return t===e},a,!0),c=p(function(t){return Z(e,t)>-1},a,!0),l=[function(t,n,r){var i=!o&&(r||n!==A)||((e=n).nodeType?u(t,n,r):c(t,n,r));return e=null,i}];s<i;s++)if(n=w.relative[t[s].type])l=[p(d(l),n)];else{if(n=w.filter[t[s].type].apply(null,t[s].matches),n[F]){for(r=++s;r<i&&!w.relative[t[r].type];r++);return g(s>1&&d(l),s>1&&f(t.slice(0,s-1).concat({value:\" \"===t[s-2].type?\"*\":\"\"})).replace(ot,\"$1\"),n,s<r&&m(t.slice(s,r)),r<i&&m(t=t.slice(r)),r<i&&f(t))}l.push(n)}return d(l)}function y(t,n){var i=n.length>0,o=t.length>0,a=function(r,a,s,u,c){var l,f,p,d=0,h=\"0\",g=r&&[],m=[],y=A,b=r||o&&w.find.TAG(\"*\",c),_=M+=null==y?1:Math.random()||.1,x=b.length;for(c&&(A=a===j||a||c);h!==x&&null!=(l=b[h]);h++){if(o&&l){for(f=0,a||l.ownerDocument===j||(O(l),s=!D);p=t[f++];)if(p(l,a||j,s)){u.push(l);break}c&&(M=_)}i&&((l=!p&&l)&&d--,r&&g.push(l))}if(d+=h,i&&h!==d){for(f=0;p=n[f++];)p(g,m,a,s);if(r){if(d>0)for(;h--;)g[h]||m[h]||(m[h]=K.call(u));m=v(m)}Q.apply(u,m),c&&!r&&m.length>0&&d+n.length>1&&e.uniqueSort(u)}return c&&(M=_,A=y),g};return i?r(a):a}var b,_,w,x,C,T,$,k,A,E,S,O,j,N,D,I,L,R,P,F=\"sizzle\"+1*new Date,q=t.document,M=0,H=0,B=n(),U=n(),W=n(),z=function(t,e){return t===e&&(S=!0),0},V={}.hasOwnProperty,X=[],K=X.pop,J=X.push,Q=X.push,G=X.slice,Z=function(t,e){for(var n=0,r=t.length;n<r;n++)if(t[n]===e)return n;return-1},Y=\"checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped\",tt=\"[\\\\x20\\\\t\\\\r\\\\n\\\\f]\",et=\"(?:\\\\\\\\.|[\\\\w-]|[^\\0-\\\\xa0])+\",nt=\"\\\\[\"+tt+\"*(\"+et+\")(?:\"+tt+\"*([*^$|!~]?=)\"+tt+\"*(?:'((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\"|(\"+et+\"))|)\"+tt+\"*\\\\]\",rt=\":(\"+et+\")(?:\\\\((('((?:\\\\\\\\.|[^\\\\\\\\'])*)'|\\\"((?:\\\\\\\\.|[^\\\\\\\\\\\"])*)\\\")|((?:\\\\\\\\.|[^\\\\\\\\()[\\\\]]|\"+nt+\")*)|.*)\\\\)|)\",it=new RegExp(tt+\"+\",\"g\"),ot=new RegExp(\"^\"+tt+\"+|((?:^|[^\\\\\\\\])(?:\\\\\\\\.)*)\"+tt+\"+$\",\"g\"),at=new RegExp(\"^\"+tt+\"*,\"+tt+\"*\"),st=new RegExp(\"^\"+tt+\"*([>+~]|\"+tt+\")\"+tt+\"*\"),ut=new RegExp(\"=\"+tt+\"*([^\\\\]'\\\"]*?)\"+tt+\"*\\\\]\",\"g\"),ct=new RegExp(rt),lt=new RegExp(\"^\"+et+\"$\"),ft={ID:new RegExp(\"^#(\"+et+\")\"),CLASS:new RegExp(\"^\\\\.(\"+et+\")\"),TAG:new RegExp(\"^(\"+et+\"|[*])\"),ATTR:new RegExp(\"^\"+nt),PSEUDO:new RegExp(\"^\"+rt),CHILD:new RegExp(\"^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\\\(\"+tt+\"*(even|odd|(([+-]|)(\\\\d*)n|)\"+tt+\"*(?:([+-]|)\"+tt+\"*(\\\\d+)|))\"+tt+\"*\\\\)|)\",\"i\"),bool:new RegExp(\"^(?:\"+Y+\")$\",\"i\"),needsContext:new RegExp(\"^\"+tt+\"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\\\(\"+tt+\"*((?:-\\\\d)?\\\\d*)\"+tt+\"*\\\\)|)(?=[^-]|$)\",\"i\")},pt=/^(?:input|select|textarea|button)$/i,dt=/^h\\d$/i,ht=/^[^{]+\\{\\s*\\[native \\w/,vt=/^(?:#([\\w-]+)|(\\w+)|\\.([\\w-]+))$/,gt=/[+~]/,mt=new RegExp(\"\\\\\\\\([\\\\da-f]{1,6}\"+tt+\"?|(\"+tt+\")|.)\",\"ig\"),yt=function(t,e,n){var r=\"0x\"+e-65536;return r!==r||n?e:r<0?String.fromCharCode(r+65536):String.fromCharCode(r>>10|55296,1023&r|56320)},bt=/([\\0-\\x1f\\x7f]|^-?\\d)|^-$|[^\\0-\\x1f\\x7f-\\uFFFF\\w-]/g,_t=function(t,e){return e?\"\\0\"===t?\"�\":t.slice(0,-1)+\"\\\\\"+t.charCodeAt(t.length-1).toString(16)+\" \":\"\\\\\"+t},wt=function(){O()},xt=p(function(t){return!0===t.disabled&&(\"form\"in t||\"label\"in t)},{dir:\"parentNode\",next:\"legend\"});try{Q.apply(X=G.call(q.childNodes),q.childNodes),X[q.childNodes.length].nodeType}catch(t){Q={apply:X.length?function(t,e){J.apply(t,G.call(e))}:function(t,e){for(var n=t.length,r=0;t[n++]=e[r++];);t.length=n-1}}}_=e.support={},C=e.isXML=function(t){var e=t&&(t.ownerDocument||t).documentElement;return!!e&&\"HTML\"!==e.nodeName},O=e.setDocument=function(t){var e,n,r=t?t.ownerDocument||t:q;return r!==j&&9===r.nodeType&&r.documentElement?(j=r,N=j.documentElement,D=!C(j),q!==j&&(n=j.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener(\"unload\",wt,!1):n.attachEvent&&n.attachEvent(\"onunload\",wt)),_.attributes=i(function(t){return t.className=\"i\",!t.getAttribute(\"className\")}),_.getElementsByTagName=i(function(t){return t.appendChild(j.createComment(\"\")),!t.getElementsByTagName(\"*\").length}),_.getElementsByClassName=ht.test(j.getElementsByClassName),_.getById=i(function(t){return N.appendChild(t).id=F,!j.getElementsByName||!j.getElementsByName(F).length}),_.getById?(w.filter.ID=function(t){var e=t.replace(mt,yt);return function(t){return t.getAttribute(\"id\")===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&D){var n=e.getElementById(t);return n?[n]:[]}}):(w.filter.ID=function(t){var e=t.replace(mt,yt);return function(t){var n=void 0!==t.getAttributeNode&&t.getAttributeNode(\"id\");return n&&n.value===e}},w.find.ID=function(t,e){if(void 0!==e.getElementById&&D){var n,r,i,o=e.getElementById(t);if(o){if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o];for(i=e.getElementsByName(t),r=0;o=i[r++];)if((n=o.getAttributeNode(\"id\"))&&n.value===t)return[o]}return[]}}),w.find.TAG=_.getElementsByTagName?function(t,e){return void 0!==e.getElementsByTagName?e.getElementsByTagName(t):_.qsa?e.querySelectorAll(t):void 0}:function(t,e){var n,r=[],i=0,o=e.getElementsByTagName(t);if(\"*\"===t){for(;n=o[i++];)1===n.nodeType&&r.push(n);return r}return o},w.find.CLASS=_.getElementsByClassName&&function(t,e){if(void 0!==e.getElementsByClassName&&D)return e.getElementsByClassName(t)},L=[],I=[],(_.qsa=ht.test(j.querySelectorAll))&&(i(function(t){N.appendChild(t).innerHTML=\"<a id='\"+F+\"'></a><select id='\"+F+\"-\\r\\\\' msallowcapture=''><option selected=''></option></select>\",t.querySelectorAll(\"[msallowcapture^='']\").length&&I.push(\"[*^$]=\"+tt+\"*(?:''|\\\"\\\")\"),t.querySelectorAll(\"[selected]\").length||I.push(\"\\\\[\"+tt+\"*(?:value|\"+Y+\")\"),t.querySelectorAll(\"[id~=\"+F+\"-]\").length||I.push(\"~=\"),t.querySelectorAll(\":checked\").length||I.push(\":checked\"),t.querySelectorAll(\"a#\"+F+\"+*\").length||I.push(\".#.+[+~]\")}),i(function(t){t.innerHTML=\"<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>\";var e=j.createElement(\"input\");e.setAttribute(\"type\",\"hidden\"),t.appendChild(e).setAttribute(\"name\",\"D\"),t.querySelectorAll(\"[name=d]\").length&&I.push(\"name\"+tt+\"*[*^$|!~]?=\"),2!==t.querySelectorAll(\":enabled\").length&&I.push(\":enabled\",\":disabled\"),N.appendChild(t).disabled=!0,2!==t.querySelectorAll(\":disabled\").length&&I.push(\":enabled\",\":disabled\"),t.querySelectorAll(\"*,:x\"),I.push(\",.*:\")})),(_.matchesSelector=ht.test(R=N.matches||N.webkitMatchesSelector||N.mozMatchesSelector||N.oMatchesSelector||N.msMatchesSelector))&&i(function(t){_.disconnectedMatch=R.call(t,\"*\"),R.call(t,\"[s!='']:x\"),L.push(\"!=\",rt)}),I=I.length&&new RegExp(I.join(\"|\")),L=L.length&&new RegExp(L.join(\"|\")),e=ht.test(N.compareDocumentPosition),P=e||ht.test(N.contains)?function(t,e){var n=9===t.nodeType?t.documentElement:t,r=e&&e.parentNode;return t===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):t.compareDocumentPosition&&16&t.compareDocumentPosition(r)))}:function(t,e){if(e)for(;e=e.parentNode;)if(e===t)return!0;return!1},z=e?function(t,e){if(t===e)return S=!0,0;var n=!t.compareDocumentPosition-!e.compareDocumentPosition;return n||(n=(t.ownerDocument||t)===(e.ownerDocument||e)?t.compareDocumentPosition(e):1,1&n||!_.sortDetached&&e.compareDocumentPosition(t)===n?t===j||t.ownerDocument===q&&P(q,t)?-1:e===j||e.ownerDocument===q&&P(q,e)?1:E?Z(E,t)-Z(E,e):0:4&n?-1:1)}:function(t,e){if(t===e)return S=!0,0;var n,r=0,i=t.parentNode,o=e.parentNode,s=[t],u=[e];if(!i||!o)return t===j?-1:e===j?1:i?-1:o?1:E?Z(E,t)-Z(E,e):0;if(i===o)return a(t,e);for(n=t;n=n.parentNode;)s.unshift(n);for(n=e;n=n.parentNode;)u.unshift(n);for(;s[r]===u[r];)r++;return r?a(s[r],u[r]):s[r]===q?-1:u[r]===q?1:0},j):j},e.matches=function(t,n){return e(t,null,null,n)},e.matchesSelector=function(t,n){if((t.ownerDocument||t)!==j&&O(t),n=n.replace(ut,\"='$1']\"),_.matchesSelector&&D&&!W[n+\" \"]&&(!L||!L.test(n))&&(!I||!I.test(n)))try{var r=R.call(t,n);if(r||_.disconnectedMatch||t.document&&11!==t.document.nodeType)return r}catch(t){}return e(n,j,null,[t]).length>0},e.contains=function(t,e){return(t.ownerDocument||t)!==j&&O(t),P(t,e)},e.attr=function(t,e){(t.ownerDocument||t)!==j&&O(t);var n=w.attrHandle[e.toLowerCase()],r=n&&V.call(w.attrHandle,e.toLowerCase())?n(t,e,!D):void 0;return void 0!==r?r:_.attributes||!D?t.getAttribute(e):(r=t.getAttributeNode(e))&&r.specified?r.value:null},e.escape=function(t){return(t+\"\").replace(bt,_t)},e.error=function(t){throw new Error(\"Syntax error, unrecognized expression: \"+t)},e.uniqueSort=function(t){var e,n=[],r=0,i=0;if(S=!_.detectDuplicates,E=!_.sortStable&&t.slice(0),t.sort(z),S){for(;e=t[i++];)e===t[i]&&(r=n.push(i));for(;r--;)t.splice(n[r],1)}return E=null,t},x=e.getText=function(t){var e,n=\"\",r=0,i=t.nodeType;if(i){if(1===i||9===i||11===i){if(\"string\"==typeof t.textContent)return t.textContent;for(t=t.firstChild;t;t=t.nextSibling)n+=x(t)}else if(3===i||4===i)return t.nodeValue}else for(;e=t[r++];)n+=x(e);return n},w=e.selectors={cacheLength:50,createPseudo:r,match:ft,attrHandle:{},find:{},relative:{\">\":{dir:\"parentNode\",first:!0},\" \":{dir:\"parentNode\"},\"+\":{dir:\"previousSibling\",first:!0},\"~\":{dir:\"previousSibling\"}},preFilter:{ATTR:function(t){return t[1]=t[1].replace(mt,yt),t[3]=(t[3]||t[4]||t[5]||\"\").replace(mt,yt),\"~=\"===t[2]&&(t[3]=\" \"+t[3]+\" \"),t.slice(0,4)},CHILD:function(t){return t[1]=t[1].toLowerCase(),\"nth\"===t[1].slice(0,3)?(t[3]||e.error(t[0]),t[4]=+(t[4]?t[5]+(t[6]||1):2*(\"even\"===t[3]||\"odd\"===t[3])),t[5]=+(t[7]+t[8]||\"odd\"===t[3])):t[3]&&e.error(t[0]),t},PSEUDO:function(t){var e,n=!t[6]&&t[2];return ft.CHILD.test(t[0])?null:(t[3]?t[2]=t[4]||t[5]||\"\":n&&ct.test(n)&&(e=T(n,!0))&&(e=n.indexOf(\")\",n.length-e)-n.length)&&(t[0]=t[0].slice(0,e),t[2]=n.slice(0,e)),t.slice(0,3))}},filter:{TAG:function(t){var e=t.replace(mt,yt).toLowerCase();return\"*\"===t?function(){return!0}:function(t){return t.nodeName&&t.nodeName.toLowerCase()===e}},CLASS:function(t){var e=B[t+\" \"];return e||(e=new RegExp(\"(^|\"+tt+\")\"+t+\"(\"+tt+\"|$)\"))&&B(t,function(t){return e.test(\"string\"==typeof t.className&&t.className||void 0!==t.getAttribute&&t.getAttribute(\"class\")||\"\")})},ATTR:function(t,n,r){return function(i){var o=e.attr(i,t);return null==o?\"!=\"===n:!n||(o+=\"\",\"=\"===n?o===r:\"!=\"===n?o!==r:\"^=\"===n?r&&0===o.indexOf(r):\"*=\"===n?r&&o.indexOf(r)>-1:\"$=\"===n?r&&o.slice(-r.length)===r:\"~=\"===n?(\" \"+o.replace(it,\" \")+\" \").indexOf(r)>-1:\"|=\"===n&&(o===r||o.slice(0,r.length+1)===r+\"-\"))}},CHILD:function(t,e,n,r,i){var o=\"nth\"!==t.slice(0,3),a=\"last\"!==t.slice(-4),s=\"of-type\"===e;return 1===r&&0===i?function(t){return!!t.parentNode}:function(e,n,u){var c,l,f,p,d,h,v=o!==a?\"nextSibling\":\"previousSibling\",g=e.parentNode,m=s&&e.nodeName.toLowerCase(),y=!u&&!s,b=!1;if(g){if(o){for(;v;){for(p=e;p=p[v];)if(s?p.nodeName.toLowerCase()===m:1===p.nodeType)return!1;h=v=\"only\"===t&&!h&&\"nextSibling\"}return!0}if(h=[a?g.firstChild:g.lastChild],a&&y){for(p=g,f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],d=c[0]===M&&c[1],b=d&&c[2],p=d&&g.childNodes[d];p=++d&&p&&p[v]||(b=d=0)||h.pop();)if(1===p.nodeType&&++b&&p===e){l[t]=[M,d,b];break}}else if(y&&(p=e,f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),c=l[t]||[],d=c[0]===M&&c[1],b=d),!1===b)for(;(p=++d&&p&&p[v]||(b=d=0)||h.pop())&&((s?p.nodeName.toLowerCase()!==m:1!==p.nodeType)||!++b||(y&&(f=p[F]||(p[F]={}),l=f[p.uniqueID]||(f[p.uniqueID]={}),l[t]=[M,b]),p!==e)););return(b-=i)===r||b%r==0&&b/r>=0}}},PSEUDO:function(t,n){var i,o=w.pseudos[t]||w.setFilters[t.toLowerCase()]||e.error(\"unsupported pseudo: \"+t);return o[F]?o(n):o.length>1?(i=[t,t,\"\",n],w.setFilters.hasOwnProperty(t.toLowerCase())?r(function(t,e){for(var r,i=o(t,n),a=i.length;a--;)r=Z(t,i[a]),t[r]=!(e[r]=i[a])}):function(t){return o(t,0,i)}):o}},pseudos:{not:r(function(t){var e=[],n=[],i=$(t.replace(ot,\"$1\"));return i[F]?r(function(t,e,n,r){for(var o,a=i(t,null,r,[]),s=t.length;s--;)(o=a[s])&&(t[s]=!(e[s]=o))}):function(t,r,o){return e[0]=t,i(e,null,o,n),e[0]=null,!n.pop()}}),has:r(function(t){return function(n){return e(t,n).length>0}}),contains:r(function(t){return t=t.replace(mt,yt),function(e){return(e.textContent||e.innerText||x(e)).indexOf(t)>-1}}),lang:r(function(t){return lt.test(t||\"\")||e.error(\"unsupported lang: \"+t),t=t.replace(mt,yt).toLowerCase(),function(e){var n;do{if(n=D?e.lang:e.getAttribute(\"xml:lang\")||e.getAttribute(\"lang\"))return(n=n.toLowerCase())===t||0===n.indexOf(t+\"-\")}while((e=e.parentNode)&&1===e.nodeType);return!1}}),target:function(e){var n=t.location&&t.location.hash;return n&&n.slice(1)===e.id},root:function(t){return t===N},focus:function(t){return t===j.activeElement&&(!j.hasFocus||j.hasFocus())&&!!(t.type||t.href||~t.tabIndex)},enabled:s(!1),disabled:s(!0),checked:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&!!t.checked||\"option\"===e&&!!t.selected},selected:function(t){return t.parentNode&&t.parentNode.selectedIndex,!0===t.selected},empty:function(t){for(t=t.firstChild;t;t=t.nextSibling)if(t.nodeType<6)return!1;return!0},parent:function(t){return!w.pseudos.empty(t)},header:function(t){return dt.test(t.nodeName)},input:function(t){return pt.test(t.nodeName)},button:function(t){var e=t.nodeName.toLowerCase();return\"input\"===e&&\"button\"===t.type||\"button\"===e},text:function(t){var e;return\"input\"===t.nodeName.toLowerCase()&&\"text\"===t.type&&(null==(e=t.getAttribute(\"type\"))||\"text\"===e.toLowerCase())},first:u(function(){return[0]}),last:u(function(t,e){return[e-1]}),eq:u(function(t,e,n){return[n<0?n+e:n]}),even:u(function(t,e){for(var n=0;n<e;n+=2)t.push(n);return t}),odd:u(function(t,e){for(var n=1;n<e;n+=2)t.push(n);return t}),lt:u(function(t,e,n){for(var r=n<0?n+e:n;--r>=0;)t.push(r);return t}),gt:u(function(t,e,n){for(var r=n<0?n+e:n;++r<e;)t.push(r);return t})}},w.pseudos.nth=w.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})w.pseudos[b]=function(t){return function(e){return\"input\"===e.nodeName.toLowerCase()&&e.type===t}}(b);for(b in{submit:!0,reset:!0})w.pseudos[b]=function(t){return function(e){var n=e.nodeName.toLowerCase();return(\"input\"===n||\"button\"===n)&&e.type===t}}(b);return l.prototype=w.filters=w.pseudos,w.setFilters=new l,T=e.tokenize=function(t,n){var r,i,o,a,s,u,c,l=U[t+\" \"];if(l)return n?0:l.slice(0);for(s=t,u=[],c=w.preFilter;s;){r&&!(i=at.exec(s))||(i&&(s=s.slice(i[0].length)||s),u.push(o=[])),r=!1,(i=st.exec(s))&&(r=i.shift(),o.push({value:r,type:i[0].replace(ot,\" \")}),s=s.slice(r.length));for(a in w.filter)!(i=ft[a].exec(s))||c[a]&&!(i=c[a](i))||(r=i.shift(),o.push({value:r,type:a,matches:i}),s=s.slice(r.length));if(!r)break}return n?s.length:s?e.error(t):U(t,u).slice(0)},$=e.compile=function(t,e){var n,r=[],i=[],o=W[t+\" \"];if(!o){for(e||(e=T(t)),n=e.length;n--;)o=m(e[n]),o[F]?r.push(o):i.push(o);o=W(t,y(i,r)),o.selector=t}return o},k=e.select=function(t,e,n,r){var i,o,a,s,u,l=\"function\"==typeof t&&t,p=!r&&T(t=l.selector||t);if(n=n||[],1===p.length){if(o=p[0]=p[0].slice(0),o.length>2&&\"ID\"===(a=o[0]).type&&9===e.nodeType&&D&&w.relative[o[1].type]){if(!(e=(w.find.ID(a.matches[0].replace(mt,yt),e)||[])[0]))return n;l&&(e=e.parentNode),t=t.slice(o.shift().value.length)}for(i=ft.needsContext.test(t)?0:o.length;i--&&(a=o[i],!w.relative[s=a.type]);)if((u=w.find[s])&&(r=u(a.matches[0].replace(mt,yt),gt.test(o[0].type)&&c(e.parentNode)||e))){if(o.splice(i,1),!(t=r.length&&f(o)))return Q.apply(n,r),n;break}}return(l||$(t,p))(r,e,!D,n,!e||gt.test(t)&&c(e.parentNode)||e),n},_.sortStable=F.split(\"\").sort(z).join(\"\")===F,_.detectDuplicates=!!S,O(),_.sortDetached=i(function(t){return 1&t.compareDocumentPosition(j.createElement(\"fieldset\"))}),i(function(t){return t.innerHTML=\"<a href='#'></a>\",\"#\"===t.firstChild.getAttribute(\"href\")})||o(\"type|href|height|width\",function(t,e,n){if(!n)return t.getAttribute(e,\"type\"===e.toLowerCase()?1:2)}),_.attributes&&i(function(t){return t.innerHTML=\"<input/>\",t.firstChild.setAttribute(\"value\",\"\"),\"\"===t.firstChild.getAttribute(\"value\")})||o(\"value\",function(t,e,n){if(!n&&\"input\"===t.nodeName.toLowerCase())return t.defaultValue}),i(function(t){return null==t.getAttribute(\"disabled\")})||o(Y,function(t,e,n){var r;if(!n)return!0===t[e]?e.toLowerCase():(r=t.getAttributeNode(e))&&r.specified?r.value:null}),e}(n);yt.find=_t,yt.expr=_t.selectors,yt.expr[\":\"]=yt.expr.pseudos,yt.uniqueSort=yt.unique=_t.uniqueSort,yt.text=_t.getText,yt.isXMLDoc=_t.isXML,yt.contains=_t.contains,yt.escapeSelector=_t.escape;var wt=function(t,e,n){for(var r=[],i=void 0!==n;(t=t[e])&&9!==t.nodeType;)if(1===t.nodeType){if(i&&yt(t).is(n))break;r.push(t)}return r},xt=function(t,e){for(var n=[];t;t=t.nextSibling)1===t.nodeType&&t!==e&&n.push(t);return n},Ct=yt.expr.match.needsContext,Tt=/^<([a-z][^\\/\\0>:\\x20\\t\\r\\n\\f]*)[\\x20\\t\\r\\n\\f]*\\/?>(?:<\\/\\1>|)$/i,$t=/^.[^:#\\[\\.,]*$/;yt.filter=function(t,e,n){var r=e[0];return n&&(t=\":not(\"+t+\")\"),1===e.length&&1===r.nodeType?yt.find.matchesSelector(r,t)?[r]:[]:yt.find.matches(t,yt.grep(e,function(t){return 1===t.nodeType}))},yt.fn.extend({find:function(t){var e,n,r=this.length,i=this;if(\"string\"!=typeof t)return this.pushStack(yt(t).filter(function(){for(e=0;e<r;e++)if(yt.contains(i[e],this))return!0}));for(n=this.pushStack([]),e=0;e<r;e++)yt.find(t,i[e],n);return r>1?yt.uniqueSort(n):n},filter:function(t){return this.pushStack(c(this,t||[],!1))},not:function(t){return this.pushStack(c(this,t||[],!0))},is:function(t){return!!c(this,\"string\"==typeof t&&Ct.test(t)?yt(t):t||[],!1).length}});var kt,At=/^(?:\\s*(<[\\w\\W]+>)[^>]*|#([\\w-]+))$/;(yt.fn.init=function(t,e,n){var r,i;if(!t)return this;if(n=n||kt,\"string\"==typeof t){if(!(r=\"<\"===t[0]&&\">\"===t[t.length-1]&&t.length>=3?[null,t,null]:At.exec(t))||!r[1]&&e)return!e||e.jquery?(e||n).find(t):this.constructor(e).find(t);if(r[1]){if(e=e instanceof yt?e[0]:e,yt.merge(this,yt.parseHTML(r[1],e&&e.nodeType?e.ownerDocument||e:at,!0)),Tt.test(r[1])&&yt.isPlainObject(e))for(r in e)yt.isFunction(this[r])?this[r](e[r]):this.attr(r,e[r]);return this}return i=at.getElementById(r[2]),i&&(this[0]=i,this.length=1),this}return t.nodeType?(this[0]=t,this.length=1,this):yt.isFunction(t)?void 0!==n.ready?n.ready(t):t(yt):yt.makeArray(t,this)}).prototype=yt.fn,kt=yt(at);var Et=/^(?:parents|prev(?:Until|All))/,St={children:!0,contents:!0,next:!0,prev:!0};yt.fn.extend({has:function(t){var e=yt(t,this),n=e.length;return this.filter(function(){for(var t=0;t<n;t++)if(yt.contains(this,e[t]))return!0})},closest:function(t,e){var n,r=0,i=this.length,o=[],a=\"string\"!=typeof t&&yt(t);if(!Ct.test(t))for(;r<i;r++)for(n=this[r];n&&n!==e;n=n.parentNode)if(n.nodeType<11&&(a?a.index(n)>-1:1===n.nodeType&&yt.find.matchesSelector(n,t))){o.push(n);break}return this.pushStack(o.length>1?yt.uniqueSort(o):o)},index:function(t){return t?\"string\"==typeof t?ft.call(yt(t),this[0]):ft.call(this,t.jquery?t[0]:t):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(t,e){return this.pushStack(yt.uniqueSort(yt.merge(this.get(),yt(t,e))))},addBack:function(t){return this.add(null==t?this.prevObject:this.prevObject.filter(t))}}),yt.each({parent:function(t){var e=t.parentNode;return e&&11!==e.nodeType?e:null},parents:function(t){return wt(t,\"parentNode\")},parentsUntil:function(t,e,n){return wt(t,\"parentNode\",n)},next:function(t){return l(t,\"nextSibling\")},prev:function(t){return l(t,\"previousSibling\")},nextAll:function(t){return wt(t,\"nextSibling\")},prevAll:function(t){return wt(t,\"previousSibling\")},nextUntil:function(t,e,n){return wt(t,\"nextSibling\",n)},prevUntil:function(t,e,n){return wt(t,\"previousSibling\",n)},siblings:function(t){return xt((t.parentNode||{}).firstChild,t)},children:function(t){return xt(t.firstChild)},contents:function(t){return u(t,\"iframe\")?t.contentDocument:(u(t,\"template\")&&(t=t.content||t),yt.merge([],t.childNodes))}},function(t,e){yt.fn[t]=function(n,r){var i=yt.map(this,e,n);return\"Until\"!==t.slice(-5)&&(r=n),r&&\"string\"==typeof r&&(i=yt.filter(r,i)),this.length>1&&(St[t]||yt.uniqueSort(i),Et.test(t)&&i.reverse()),this.pushStack(i)}});var Ot=/[^\\x20\\t\\r\\n\\f]+/g;yt.Callbacks=function(t){t=\"string\"==typeof t?f(t):yt.extend({},t);var e,n,r,i,o=[],a=[],s=-1,u=function(){for(i=i||t.once,r=e=!0;a.length;s=-1)for(n=a.shift();++s<o.length;)!1===o[s].apply(n[0],n[1])&&t.stopOnFalse&&(s=o.length,n=!1);t.memory||(n=!1),e=!1,i&&(o=n?[]:\"\")},c={add:function(){return o&&(n&&!e&&(s=o.length-1,a.push(n)),function e(n){yt.each(n,function(n,r){yt.isFunction(r)?t.unique&&c.has(r)||o.push(r):r&&r.length&&\"string\"!==yt.type(r)&&e(r)})}(arguments),n&&!e&&u()),this},remove:function(){return yt.each(arguments,function(t,e){for(var n;(n=yt.inArray(e,o,n))>-1;)o.splice(n,1),n<=s&&s--}),this},has:function(t){return t?yt.inArray(t,o)>-1:o.length>0},empty:function(){return o&&(o=[]),this},disable:function(){return i=a=[],o=n=\"\",this},disabled:function(){return!o},lock:function(){return i=a=[],n||e||(o=n=\"\"),this},locked:function(){return!!i},fireWith:function(t,n){return i||(n=n||[],n=[t,n.slice?n.slice():n],a.push(n),e||u()),this},fire:function(){return c.fireWith(this,arguments),this},fired:function(){return!!r}};return c},yt.extend({Deferred:function(t){var e=[[\"notify\",\"progress\",yt.Callbacks(\"memory\"),yt.Callbacks(\"memory\"),2],[\"resolve\",\"done\",yt.Callbacks(\"once memory\"),yt.Callbacks(\"once memory\"),0,\"resolved\"],[\"reject\",\"fail\",yt.Callbacks(\"once memory\"),yt.Callbacks(\"once memory\"),1,\"rejected\"]],r=\"pending\",i={state:function(){return r},always:function(){return o.done(arguments).fail(arguments),this},catch:function(t){return i.then(null,t)},pipe:function(){var t=arguments;return yt.Deferred(function(n){yt.each(e,function(e,r){var i=yt.isFunction(t[r[4]])&&t[r[4]];o[r[1]](function(){var t=i&&i.apply(this,arguments);t&&yt.isFunction(t.promise)?t.promise().progress(n.notify).done(n.resolve).fail(n.reject):n[r[0]+\"With\"](this,i?[t]:arguments)})}),t=null}).promise()},then:function(t,r,i){function o(t,e,r,i){return function(){var s=this,u=arguments,c=function(){var n,c;if(!(t<a)){if((n=r.apply(s,u))===e.promise())throw new TypeError(\"Thenable self-resolution\");c=n&&(\"object\"==typeof n||\"function\"==typeof n)&&n.then,yt.isFunction(c)?i?c.call(n,o(a,e,p,i),o(a,e,d,i)):(a++,c.call(n,o(a,e,p,i),o(a,e,d,i),o(a,e,p,e.notifyWith))):(r!==p&&(s=void 0,u=[n]),(i||e.resolveWith)(s,u))}},l=i?c:function(){try{c()}catch(n){yt.Deferred.exceptionHook&&yt.Deferred.exceptionHook(n,l.stackTrace),t+1>=a&&(r!==d&&(s=void 0,u=[n]),e.rejectWith(s,u))}};t?l():(yt.Deferred.getStackHook&&(l.stackTrace=yt.Deferred.getStackHook()),n.setTimeout(l))}}var a=0;return yt.Deferred(function(n){e[0][3].add(o(0,n,yt.isFunction(i)?i:p,n.notifyWith)),e[1][3].add(o(0,n,yt.isFunction(t)?t:p)),e[2][3].add(o(0,n,yt.isFunction(r)?r:d))}).promise()},promise:function(t){return null!=t?yt.extend(t,i):i}},o={};return yt.each(e,function(t,n){var a=n[2],s=n[5];i[n[1]]=a.add,s&&a.add(function(){r=s},e[3-t][2].disable,e[0][2].lock),a.add(n[3].fire),o[n[0]]=function(){return o[n[0]+\"With\"](this===o?void 0:this,arguments),this},o[n[0]+\"With\"]=a.fireWith}),i.promise(o),t&&t.call(o,o),o},when:function(t){var e=arguments.length,n=e,r=Array(n),i=ut.call(arguments),o=yt.Deferred(),a=function(t){return function(n){r[t]=this,i[t]=arguments.length>1?ut.call(arguments):n,--e||o.resolveWith(r,i)}};if(e<=1&&(h(t,o.done(a(n)).resolve,o.reject,!e),\"pending\"===o.state()||yt.isFunction(i[n]&&i[n].then)))return o.then();for(;n--;)h(i[n],a(n),o.reject);return o.promise()}});var jt=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;yt.Deferred.exceptionHook=function(t,e){n.console&&n.console.warn&&t&&jt.test(t.name)&&n.console.warn(\"jQuery.Deferred exception: \"+t.message,t.stack,e)},yt.readyException=function(t){n.setTimeout(function(){throw t})};var Nt=yt.Deferred();yt.fn.ready=function(t){return Nt.then(t).catch(function(t){yt.readyException(t)}),this},yt.extend({isReady:!1,readyWait:1,ready:function(t){(!0===t?--yt.readyWait:yt.isReady)||(yt.isReady=!0,!0!==t&&--yt.readyWait>0||Nt.resolveWith(at,[yt]))}}),yt.ready.then=Nt.then,\"complete\"===at.readyState||\"loading\"!==at.readyState&&!at.documentElement.doScroll?n.setTimeout(yt.ready):(at.addEventListener(\"DOMContentLoaded\",v),n.addEventListener(\"load\",v));var Dt=function(t,e,n,r,i,o,a){var s=0,u=t.length,c=null==n;if(\"object\"===yt.type(n)){i=!0;for(s in n)Dt(t,e,s,n[s],!0,o,a)}else if(void 0!==r&&(i=!0,yt.isFunction(r)||(a=!0),c&&(a?(e.call(t,r),e=null):(c=e,e=function(t,e,n){return c.call(yt(t),n)})),e))for(;s<u;s++)e(t[s],n,a?r:r.call(t[s],s,e(t[s],n)));return i?t:c?e.call(t):u?e(t[0],n):o},It=function(t){return 1===t.nodeType||9===t.nodeType||!+t.nodeType};g.uid=1,g.prototype={cache:function(t){var e=t[this.expando];return e||(e={},It(t)&&(t.nodeType?t[this.expando]=e:Object.defineProperty(t,this.expando,{value:e,configurable:!0}))),e},set:function(t,e,n){var r,i=this.cache(t);if(\"string\"==typeof e)i[yt.camelCase(e)]=n;else for(r in e)i[yt.camelCase(r)]=e[r];return i},get:function(t,e){return void 0===e?this.cache(t):t[this.expando]&&t[this.expando][yt.camelCase(e)]},access:function(t,e,n){return void 0===e||e&&\"string\"==typeof e&&void 0===n?this.get(t,e):(this.set(t,e,n),void 0!==n?n:e)},remove:function(t,e){var n,r=t[this.expando];if(void 0!==r){if(void 0!==e){Array.isArray(e)?e=e.map(yt.camelCase):(e=yt.camelCase(e),e=e in r?[e]:e.match(Ot)||[]),n=e.length;for(;n--;)delete r[e[n]]}(void 0===e||yt.isEmptyObject(r))&&(t.nodeType?t[this.expando]=void 0:delete t[this.expando])}},hasData:function(t){var e=t[this.expando];return void 0!==e&&!yt.isEmptyObject(e)}};var Lt=new g,Rt=new g,Pt=/^(?:\\{[\\w\\W]*\\}|\\[[\\w\\W]*\\])$/,Ft=/[A-Z]/g;yt.extend({hasData:function(t){return Rt.hasData(t)||Lt.hasData(t)},data:function(t,e,n){return Rt.access(t,e,n)},removeData:function(t,e){Rt.remove(t,e)},_data:function(t,e,n){return Lt.access(t,e,n)},_removeData:function(t,e){Lt.remove(t,e)}}),yt.fn.extend({data:function(t,e){var n,r,i,o=this[0],a=o&&o.attributes;if(void 0===t){if(this.length&&(i=Rt.get(o),1===o.nodeType&&!Lt.get(o,\"hasDataAttrs\"))){for(n=a.length;n--;)a[n]&&(r=a[n].name,0===r.indexOf(\"data-\")&&(r=yt.camelCase(r.slice(5)),y(o,r,i[r])));Lt.set(o,\"hasDataAttrs\",!0)}return i}return\"object\"==typeof t?this.each(function(){Rt.set(this,t)}):Dt(this,function(e){var n;if(o&&void 0===e){if(void 0!==(n=Rt.get(o,t)))return n;if(void 0!==(n=y(o,t)))return n}else this.each(function(){Rt.set(this,t,e)})},null,e,arguments.length>1,null,!0)},removeData:function(t){return this.each(function(){Rt.remove(this,t)})}}),yt.extend({queue:function(t,e,n){var r;if(t)return e=(e||\"fx\")+\"queue\",r=Lt.get(t,e),n&&(!r||Array.isArray(n)?r=Lt.access(t,e,yt.makeArray(n)):r.push(n)),r||[]},dequeue:function(t,e){e=e||\"fx\";var n=yt.queue(t,e),r=n.length,i=n.shift(),o=yt._queueHooks(t,e),a=function(){yt.dequeue(t,e)};\"inprogress\"===i&&(i=n.shift(),r--),i&&(\"fx\"===e&&n.unshift(\"inprogress\"),delete o.stop,i.call(t,a,o)),!r&&o&&o.empty.fire()},_queueHooks:function(t,e){var n=e+\"queueHooks\";return Lt.get(t,n)||Lt.access(t,n,{empty:yt.Callbacks(\"once memory\").add(function(){Lt.remove(t,[e+\"queue\",n])})})}}),yt.fn.extend({queue:function(t,e){var n=2;return\"string\"!=typeof t&&(e=t,t=\"fx\",n--),arguments.length<n?yt.queue(this[0],t):void 0===e?this:this.each(function(){var n=yt.queue(this,t,e);yt._queueHooks(this,t),\"fx\"===t&&\"inprogress\"!==n[0]&&yt.dequeue(this,t)})},dequeue:function(t){return this.each(function(){yt.dequeue(this,t)})},clearQueue:function(t){return this.queue(t||\"fx\",[])},promise:function(t,e){var n,r=1,i=yt.Deferred(),o=this,a=this.length,s=function(){--r||i.resolveWith(o,[o])};for(\"string\"!=typeof t&&(e=t,t=void 0),t=t||\"fx\";a--;)(n=Lt.get(o[a],t+\"queueHooks\"))&&n.empty&&(r++,n.empty.add(s));return s(),i.promise(e)}});var qt=/[+-]?(?:\\d*\\.|)\\d+(?:[eE][+-]?\\d+|)/.source,Mt=new RegExp(\"^(?:([+-])=|)(\"+qt+\")([a-z%]*)$\",\"i\"),Ht=[\"Top\",\"Right\",\"Bottom\",\"Left\"],Bt=function(t,e){return t=e||t,\"none\"===t.style.display||\"\"===t.style.display&&yt.contains(t.ownerDocument,t)&&\"none\"===yt.css(t,\"display\")},Ut=function(t,e,n,r){var i,o,a={};for(o in e)a[o]=t.style[o],t.style[o]=e[o];i=n.apply(t,r||[]);for(o in e)t.style[o]=a[o];return i},Wt={};yt.fn.extend({show:function(){return w(this,!0)},hide:function(){return w(this)},toggle:function(t){return\"boolean\"==typeof t?t?this.show():this.hide():this.each(function(){Bt(this)?yt(this).show():yt(this).hide()})}});var zt=/^(?:checkbox|radio)$/i,Vt=/<([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]+)/i,Xt=/^$|\\/(?:java|ecma)script/i,Kt={option:[1,\"<select multiple='multiple'>\",\"</select>\"],thead:[1,\"<table>\",\"</table>\"],col:[2,\"<table><colgroup>\",\"</colgroup></table>\"],tr:[2,\"<table><tbody>\",\"</tbody></table>\"],td:[3,\"<table><tbody><tr>\",\"</tr></tbody></table>\"],_default:[0,\"\",\"\"]};Kt.optgroup=Kt.option,Kt.tbody=Kt.tfoot=Kt.colgroup=Kt.caption=Kt.thead,Kt.th=Kt.td;var Jt=/<|&#?\\w+;/;!function(){var t=at.createDocumentFragment(),e=t.appendChild(at.createElement(\"div\")),n=at.createElement(\"input\");n.setAttribute(\"type\",\"radio\"),n.setAttribute(\"checked\",\"checked\"),n.setAttribute(\"name\",\"t\"),e.appendChild(n),mt.checkClone=e.cloneNode(!0).cloneNode(!0).lastChild.checked,e.innerHTML=\"<textarea>x</textarea>\",mt.noCloneChecked=!!e.cloneNode(!0).lastChild.defaultValue}();var Qt=at.documentElement,Gt=/^key/,Zt=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,Yt=/^([^.]*)(?:\\.(.+)|)/;yt.event={global:{},add:function(t,e,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=Lt.get(t);if(g)for(n.handler&&(o=n,n=o.handler,i=o.selector),i&&yt.find.matchesSelector(Qt,i),n.guid||(n.guid=yt.guid++),(u=g.events)||(u=g.events={}),(a=g.handle)||(a=g.handle=function(e){return void 0!==yt&&yt.event.triggered!==e.type?yt.event.dispatch.apply(t,arguments):void 0}),e=(e||\"\").match(Ot)||[\"\"],c=e.length;c--;)s=Yt.exec(e[c])||[],d=v=s[1],h=(s[2]||\"\").split(\".\").sort(),d&&(f=yt.event.special[d]||{},d=(i?f.delegateType:f.bindType)||d,f=yt.event.special[d]||{},l=yt.extend({type:d,origType:v,data:r,handler:n,guid:n.guid,selector:i,needsContext:i&&yt.expr.match.needsContext.test(i),namespace:h.join(\".\")},o),(p=u[d])||(p=u[d]=[],p.delegateCount=0,f.setup&&!1!==f.setup.call(t,r,h,a)||t.addEventListener&&t.addEventListener(d,a)),f.add&&(f.add.call(t,l),l.handler.guid||(l.handler.guid=n.guid)),i?p.splice(p.delegateCount++,0,l):p.push(l),yt.event.global[d]=!0)},remove:function(t,e,n,r,i){var o,a,s,u,c,l,f,p,d,h,v,g=Lt.hasData(t)&&Lt.get(t);if(g&&(u=g.events)){for(e=(e||\"\").match(Ot)||[\"\"],c=e.length;c--;)if(s=Yt.exec(e[c])||[],d=v=s[1],h=(s[2]||\"\").split(\".\").sort(),d){for(f=yt.event.special[d]||{},d=(r?f.delegateType:f.bindType)||d,p=u[d]||[],s=s[2]&&new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"),a=o=p.length;o--;)l=p[o],!i&&v!==l.origType||n&&n.guid!==l.guid||s&&!s.test(l.namespace)||r&&r!==l.selector&&(\"**\"!==r||!l.selector)||(p.splice(o,1),l.selector&&p.delegateCount--,f.remove&&f.remove.call(t,l));a&&!p.length&&(f.teardown&&!1!==f.teardown.call(t,h,g.handle)||yt.removeEvent(t,d,g.handle),delete u[d])}else for(d in u)yt.event.remove(t,d+e[c],n,r,!0);yt.isEmptyObject(u)&&Lt.remove(t,\"handle events\")}},dispatch:function(t){var e,n,r,i,o,a,s=yt.event.fix(t),u=new Array(arguments.length),c=(Lt.get(this,\"events\")||{})[s.type]||[],l=yt.event.special[s.type]||{};for(u[0]=s,e=1;e<arguments.length;e++)u[e]=arguments[e];if(s.delegateTarget=this,!l.preDispatch||!1!==l.preDispatch.call(this,s)){for(a=yt.event.handlers.call(this,s,c),e=0;(i=a[e++])&&!s.isPropagationStopped();)for(s.currentTarget=i.elem,n=0;(o=i.handlers[n++])&&!s.isImmediatePropagationStopped();)s.rnamespace&&!s.rnamespace.test(o.namespace)||(s.handleObj=o,s.data=o.data,void 0!==(r=((yt.event.special[o.origType]||{}).handle||o.handler).apply(i.elem,u))&&!1===(s.result=r)&&(s.preventDefault(),s.stopPropagation()));return l.postDispatch&&l.postDispatch.call(this,s),s.result}},handlers:function(t,e){var n,r,i,o,a,s=[],u=e.delegateCount,c=t.target;if(u&&c.nodeType&&!(\"click\"===t.type&&t.button>=1))for(;c!==this;c=c.parentNode||this)if(1===c.nodeType&&(\"click\"!==t.type||!0!==c.disabled)){for(o=[],a={},n=0;n<u;n++)r=e[n],i=r.selector+\" \",void 0===a[i]&&(a[i]=r.needsContext?yt(i,this).index(c)>-1:yt.find(i,this,null,[c]).length),a[i]&&o.push(r);o.length&&s.push({elem:c,handlers:o})}return c=this,u<e.length&&s.push({elem:c,handlers:e.slice(u)}),s},addProp:function(t,e){Object.defineProperty(yt.Event.prototype,t,{enumerable:!0,configurable:!0,get:yt.isFunction(e)?function(){if(this.originalEvent)return e(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[t]},set:function(e){Object.defineProperty(this,t,{enumerable:!0,configurable:!0,writable:!0,value:e})}})},fix:function(t){return t[yt.expando]?t:new yt.Event(t)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==A()&&this.focus)return this.focus(),!1},delegateType:\"focusin\"},blur:{trigger:function(){if(this===A()&&this.blur)return this.blur(),!1},delegateType:\"focusout\"},click:{trigger:function(){if(\"checkbox\"===this.type&&this.click&&u(this,\"input\"))return this.click(),!1},_default:function(t){return u(t.target,\"a\")}},beforeunload:{postDispatch:function(t){void 0!==t.result&&t.originalEvent&&(t.originalEvent.returnValue=t.result)}}}},yt.removeEvent=function(t,e,n){t.removeEventListener&&t.removeEventListener(e,n)},yt.Event=function(t,e){if(!(this instanceof yt.Event))return new yt.Event(t,e);t&&t.type?(this.originalEvent=t,this.type=t.type,this.isDefaultPrevented=t.defaultPrevented||void 0===t.defaultPrevented&&!1===t.returnValue?$:k,this.target=t.target&&3===t.target.nodeType?t.target.parentNode:t.target,this.currentTarget=t.currentTarget,this.relatedTarget=t.relatedTarget):this.type=t,e&&yt.extend(this,e),this.timeStamp=t&&t.timeStamp||yt.now(),this[yt.expando]=!0},yt.Event.prototype={constructor:yt.Event,isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k,isSimulated:!1,preventDefault:function(){var t=this.originalEvent;this.isDefaultPrevented=$,t&&!this.isSimulated&&t.preventDefault()},stopPropagation:function(){var t=this.originalEvent;this.isPropagationStopped=$,t&&!this.isSimulated&&t.stopPropagation()},stopImmediatePropagation:function(){var t=this.originalEvent;this.isImmediatePropagationStopped=$,t&&!this.isSimulated&&t.stopImmediatePropagation(),this.stopPropagation()}},yt.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,char:!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(t){var e=t.button;return null==t.which&&Gt.test(t.type)?null!=t.charCode?t.charCode:t.keyCode:!t.which&&void 0!==e&&Zt.test(t.type)?1&e?1:2&e?3:4&e?2:0:t.which}},yt.event.addProp),yt.each({mouseenter:\"mouseover\",mouseleave:\"mouseout\",pointerenter:\"pointerover\",pointerleave:\"pointerout\"},function(t,e){yt.event.special[t]={delegateType:e,bindType:e,handle:function(t){var n,r=this,i=t.relatedTarget,o=t.handleObj;return i&&(i===r||yt.contains(r,i))||(t.type=o.origType,n=o.handler.apply(this,arguments),t.type=e),n}}}),yt.fn.extend({on:function(t,e,n,r){return E(this,t,e,n,r)},one:function(t,e,n,r){return E(this,t,e,n,r,1)},off:function(t,e,n){var r,i;if(t&&t.preventDefault&&t.handleObj)return r=t.handleObj,yt(t.delegateTarget).off(r.namespace?r.origType+\".\"+r.namespace:r.origType,r.selector,r.handler),this;if(\"object\"==typeof t){for(i in t)this.off(i,e,t[i]);return this}return!1!==e&&\"function\"!=typeof e||(n=e,e=void 0),!1===n&&(n=k),this.each(function(){yt.event.remove(this,t,n,e)})}});var te=/<script|<style|<link/i,ee=/checked\\s*(?:[^=]|=\\s*.checked.)/i,ne=/^true\\/(.*)/,re=/^\\s*<!(?:\\[CDATA\\[|--)|(?:\\]\\]|--)>\\s*$/g;yt.extend({htmlPrefilter:function(t){return t.replace(/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\\/\\0>\\x20\\t\\r\\n\\f]*)[^>]*)\\/>/gi,\"<$1></$2>\")},clone:function(t,e,n){var r,i,o,a,s=t.cloneNode(!0),u=yt.contains(t.ownerDocument,t);if(!(mt.noCloneChecked||1!==t.nodeType&&11!==t.nodeType||yt.isXMLDoc(t)))for(a=x(s),o=x(t),r=0,i=o.length;r<i;r++)D(o[r],a[r]);if(e)if(n)for(o=o||x(t),a=a||x(s),r=0,i=o.length;r<i;r++)N(o[r],a[r]);else N(t,s);return a=x(s,\"script\"),a.length>0&&C(a,!u&&x(t,\"script\")),s},cleanData:function(t){for(var e,n,r,i=yt.event.special,o=0;void 0!==(n=t[o]);o++)if(It(n)){if(e=n[Lt.expando]){if(e.events)for(r in e.events)i[r]?yt.event.remove(n,r):yt.removeEvent(n,r,e.handle);n[Lt.expando]=void 0}n[Rt.expando]&&(n[Rt.expando]=void 0)}}}),yt.fn.extend({detach:function(t){return L(this,t,!0)},remove:function(t){return L(this,t)},text:function(t){return Dt(this,function(t){return void 0===t?yt.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=t)})},null,t,arguments.length)},append:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){S(this,t).appendChild(t)}})},prepend:function(){return I(this,arguments,function(t){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var e=S(this,t);e.insertBefore(t,e.firstChild)}})},before:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this)})},after:function(){return I(this,arguments,function(t){this.parentNode&&this.parentNode.insertBefore(t,this.nextSibling)})},empty:function(){for(var t,e=0;null!=(t=this[e]);e++)1===t.nodeType&&(yt.cleanData(x(t,!1)),t.textContent=\"\");return this},clone:function(t,e){return t=null!=t&&t,e=null==e?t:e,this.map(function(){return yt.clone(this,t,e)})},html:function(t){return Dt(this,function(t){var e=this[0]||{},n=0,r=this.length;if(void 0===t&&1===e.nodeType)return e.innerHTML;if(\"string\"==typeof t&&!te.test(t)&&!Kt[(Vt.exec(t)||[\"\",\"\"])[1].toLowerCase()]){t=yt.htmlPrefilter(t);try{for(;n<r;n++)e=this[n]||{},1===e.nodeType&&(yt.cleanData(x(e,!1)),e.innerHTML=t);e=0}catch(t){}}e&&this.empty().append(t)},null,t,arguments.length)},replaceWith:function(){var t=[];return I(this,arguments,function(e){var n=this.parentNode;yt.inArray(this,t)<0&&(yt.cleanData(x(this)),n&&n.replaceChild(e,this))},t)}}),yt.each({appendTo:\"append\",prependTo:\"prepend\",insertBefore:\"before\",insertAfter:\"after\",replaceAll:\"replaceWith\"},function(t,e){yt.fn[t]=function(t){for(var n,r=[],i=yt(t),o=i.length-1,a=0;a<=o;a++)n=a===o?this:this.clone(!0),yt(i[a])[e](n),lt.apply(r,n.get());return this.pushStack(r)}});var ie=/^margin/,oe=new RegExp(\"^(\"+qt+\")(?!px)[a-z%]+$\",\"i\"),ae=function(t){var e=t.ownerDocument.defaultView;return e&&e.opener||(e=n),e.getComputedStyle(t)};!function(){function t(){if(s){s.style.cssText=\"box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%\",s.innerHTML=\"\",Qt.appendChild(a);var t=n.getComputedStyle(s);e=\"1%\"!==t.top,o=\"2px\"===t.marginLeft,r=\"4px\"===t.width,s.style.marginRight=\"50%\",i=\"4px\"===t.marginRight,Qt.removeChild(a),s=null}}var e,r,i,o,a=at.createElement(\"div\"),s=at.createElement(\"div\");s.style&&(s.style.backgroundClip=\"content-box\",s.cloneNode(!0).style.backgroundClip=\"\",mt.clearCloneStyle=\"content-box\"===s.style.backgroundClip,a.style.cssText=\"border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute\",a.appendChild(s),yt.extend(mt,{pixelPosition:function(){return t(),e},boxSizingReliable:function(){return t(),r},pixelMarginRight:function(){return t(),i},reliableMarginLeft:function(){return t(),o}}))}();var se=/^(none|table(?!-c[ea]).+)/,ue=/^--/,ce={position:\"absolute\",visibility:\"hidden\",display:\"block\"},le={letterSpacing:\"0\",fontWeight:\"400\"},fe=[\"Webkit\",\"Moz\",\"ms\"],pe=at.createElement(\"div\").style;yt.extend({cssHooks:{opacity:{get:function(t,e){if(e){var n=R(t,\"opacity\");return\"\"===n?\"1\":n}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{float:\"cssFloat\"},style:function(t,e,n,r){if(t&&3!==t.nodeType&&8!==t.nodeType&&t.style){var i,o,a,s=yt.camelCase(e),u=ue.test(e),c=t.style;if(u||(e=q(s)),a=yt.cssHooks[e]||yt.cssHooks[s],void 0===n)return a&&\"get\"in a&&void 0!==(i=a.get(t,!1,r))?i:c[e];o=typeof n,\"string\"===o&&(i=Mt.exec(n))&&i[1]&&(n=b(t,e,i),o=\"number\"),null!=n&&n===n&&(\"number\"===o&&(n+=i&&i[3]||(yt.cssNumber[s]?\"\":\"px\")),mt.clearCloneStyle||\"\"!==n||0!==e.indexOf(\"background\")||(c[e]=\"inherit\"),a&&\"set\"in a&&void 0===(n=a.set(t,n,r))||(u?c.setProperty(e,n):c[e]=n))}},css:function(t,e,n,r){var i,o,a,s=yt.camelCase(e);return ue.test(e)||(e=q(s)),a=yt.cssHooks[e]||yt.cssHooks[s],a&&\"get\"in a&&(i=a.get(t,!0,n)),void 0===i&&(i=R(t,e,r)),\"normal\"===i&&e in le&&(i=le[e]),\"\"===n||n?(o=parseFloat(i),!0===n||isFinite(o)?o||0:i):i}}),yt.each([\"height\",\"width\"],function(t,e){yt.cssHooks[e]={get:function(t,n,r){if(n)return!se.test(yt.css(t,\"display\"))||t.getClientRects().length&&t.getBoundingClientRect().width?B(t,e,r):Ut(t,ce,function(){return B(t,e,r)})},set:function(t,n,r){var i,o=r&&ae(t),a=r&&H(t,e,r,\"border-box\"===yt.css(t,\"boxSizing\",!1,o),o);return a&&(i=Mt.exec(n))&&\"px\"!==(i[3]||\"px\")&&(t.style[e]=n,n=yt.css(t,e)),M(t,n,a)}}}),yt.cssHooks.marginLeft=P(mt.reliableMarginLeft,function(t,e){if(e)return(parseFloat(R(t,\"marginLeft\"))||t.getBoundingClientRect().left-Ut(t,{marginLeft:0},function(){return t.getBoundingClientRect().left}))+\"px\"}),yt.each({margin:\"\",padding:\"\",border:\"Width\"},function(t,e){yt.cssHooks[t+e]={expand:function(n){for(var r=0,i={},o=\"string\"==typeof n?n.split(\" \"):[n];r<4;r++)i[t+Ht[r]+e]=o[r]||o[r-2]||o[0];return i}},ie.test(t)||(yt.cssHooks[t+e].set=M)}),yt.fn.extend({css:function(t,e){return Dt(this,function(t,e,n){var r,i,o={},a=0;if(Array.isArray(e)){for(r=ae(t),i=e.length;a<i;a++)o[e[a]]=yt.css(t,e[a],!1,r);return o}return void 0!==n?yt.style(t,e,n):yt.css(t,e)},t,e,arguments.length>1)}}),yt.Tween=U,U.prototype={constructor:U,init:function(t,e,n,r,i,o){this.elem=t,this.prop=n,this.easing=i||yt.easing._default,this.options=e,this.start=this.now=this.cur(),this.end=r,this.unit=o||(yt.cssNumber[n]?\"\":\"px\")},cur:function(){var t=U.propHooks[this.prop];return t&&t.get?t.get(this):U.propHooks._default.get(this)},run:function(t){var e,n=U.propHooks[this.prop];return this.options.duration?this.pos=e=yt.easing[this.easing](t,this.options.duration*t,0,1,this.options.duration):this.pos=e=t,this.now=(this.end-this.start)*e+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),n&&n.set?n.set(this):U.propHooks._default.set(this),this}},U.prototype.init.prototype=U.prototype,U.propHooks={_default:{get:function(t){var e;return 1!==t.elem.nodeType||null!=t.elem[t.prop]&&null==t.elem.style[t.prop]?t.elem[t.prop]:(e=yt.css(t.elem,t.prop,\"\"),e&&\"auto\"!==e?e:0)},set:function(t){yt.fx.step[t.prop]?yt.fx.step[t.prop](t):1!==t.elem.nodeType||null==t.elem.style[yt.cssProps[t.prop]]&&!yt.cssHooks[t.prop]?t.elem[t.prop]=t.now:yt.style(t.elem,t.prop,t.now+t.unit)}}},U.propHooks.scrollTop=U.propHooks.scrollLeft={set:function(t){t.elem.nodeType&&t.elem.parentNode&&(t.elem[t.prop]=t.now)}},yt.easing={linear:function(t){return t},swing:function(t){return.5-Math.cos(t*Math.PI)/2},_default:\"swing\"},yt.fx=U.prototype.init,yt.fx.step={};var de,he,ve=/^(?:toggle|show|hide)$/,ge=/queueHooks$/;yt.Animation=yt.extend(Q,{tweeners:{\"*\":[function(t,e){var n=this.createTween(t,e);return b(n.elem,t,Mt.exec(e),n),n}]},tweener:function(t,e){yt.isFunction(t)?(e=t,t=[\"*\"]):t=t.match(Ot);for(var n,r=0,i=t.length;r<i;r++)n=t[r],Q.tweeners[n]=Q.tweeners[n]||[],Q.tweeners[n].unshift(e)},prefilters:[K],prefilter:function(t,e){e?Q.prefilters.unshift(t):Q.prefilters.push(t)}}),yt.speed=function(t,e,n){var r=t&&\"object\"==typeof t?yt.extend({},t):{complete:n||!n&&e||yt.isFunction(t)&&t,duration:t,easing:n&&e||e&&!yt.isFunction(e)&&e};return yt.fx.off?r.duration=0:\"number\"!=typeof r.duration&&(r.duration in yt.fx.speeds?r.duration=yt.fx.speeds[r.duration]:r.duration=yt.fx.speeds._default),null!=r.queue&&!0!==r.queue||(r.queue=\"fx\"),r.old=r.complete,r.complete=function(){yt.isFunction(r.old)&&r.old.call(this),r.queue&&yt.dequeue(this,r.queue)},r},yt.fn.extend({fadeTo:function(t,e,n,r){return this.filter(Bt).css(\"opacity\",0).show().end().animate({opacity:e},t,n,r)},animate:function(t,e,n,r){var i=yt.isEmptyObject(t),o=yt.speed(e,n,r),a=function(){var e=Q(this,yt.extend({},t),o);(i||Lt.get(this,\"finish\"))&&e.stop(!0)};return a.finish=a,i||!1===o.queue?this.each(a):this.queue(o.queue,a)},stop:function(t,e,n){var r=function(t){var e=t.stop;delete t.stop,e(n)};return\"string\"!=typeof t&&(n=e,e=t,t=void 0),e&&!1!==t&&this.queue(t||\"fx\",[]),this.each(function(){var e=!0,i=null!=t&&t+\"queueHooks\",o=yt.timers,a=Lt.get(this);if(i)a[i]&&a[i].stop&&r(a[i]);else for(i in a)a[i]&&a[i].stop&&ge.test(i)&&r(a[i]);for(i=o.length;i--;)o[i].elem!==this||null!=t&&o[i].queue!==t||(o[i].anim.stop(n),e=!1,o.splice(i,1));!e&&n||yt.dequeue(this,t)})},finish:function(t){return!1!==t&&(t=t||\"fx\"),this.each(function(){var e,n=Lt.get(this),r=n[t+\"queue\"],i=n[t+\"queueHooks\"],o=yt.timers,a=r?r.length:0;for(n.finish=!0,yt.queue(this,t,[]),i&&i.stop&&i.stop.call(this,!0),e=o.length;e--;)o[e].elem===this&&o[e].queue===t&&(o[e].anim.stop(!0),o.splice(e,1));for(e=0;e<a;e++)r[e]&&r[e].finish&&r[e].finish.call(this);delete n.finish})}}),yt.each([\"toggle\",\"show\",\"hide\"],function(t,e){var n=yt.fn[e];yt.fn[e]=function(t,r,i){return null==t||\"boolean\"==typeof t?n.apply(this,arguments):this.animate(V(e,!0),t,r,i)}}),yt.each({slideDown:V(\"show\"),slideUp:V(\"hide\"),slideToggle:V(\"toggle\"),fadeIn:{opacity:\"show\"},fadeOut:{opacity:\"hide\"},fadeToggle:{opacity:\"toggle\"}},function(t,e){yt.fn[t]=function(t,n,r){return this.animate(e,t,n,r)}}),yt.timers=[],yt.fx.tick=function(){var t,e=0,n=yt.timers;for(de=yt.now();e<n.length;e++)(t=n[e])()||n[e]!==t||n.splice(e--,1);n.length||yt.fx.stop(),de=void 0},yt.fx.timer=function(t){yt.timers.push(t),yt.fx.start()},yt.fx.interval=13,yt.fx.start=function(){he||(he=!0,W())},yt.fx.stop=function(){he=null},yt.fx.speeds={slow:600,fast:200,_default:400},yt.fn.delay=function(t,e){return t=yt.fx?yt.fx.speeds[t]||t:t,e=e||\"fx\",this.queue(e,function(e,r){var i=n.setTimeout(e,t);r.stop=function(){n.clearTimeout(i)}})},function(){var t=at.createElement(\"input\"),e=at.createElement(\"select\"),n=e.appendChild(at.createElement(\"option\"));t.type=\"checkbox\",mt.checkOn=\"\"!==t.value,mt.optSelected=n.selected,t=at.createElement(\"input\"),t.value=\"t\",t.type=\"radio\",mt.radioValue=\"t\"===t.value}();var me,ye=yt.expr.attrHandle;yt.fn.extend({attr:function(t,e){return Dt(this,yt.attr,t,e,arguments.length>1)},removeAttr:function(t){return this.each(function(){yt.removeAttr(this,t)})}}),yt.extend({attr:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return void 0===t.getAttribute?yt.prop(t,e,n):(1===o&&yt.isXMLDoc(t)||(i=yt.attrHooks[e.toLowerCase()]||(yt.expr.match.bool.test(e)?me:void 0)),void 0!==n?null===n?void yt.removeAttr(t,e):i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:(t.setAttribute(e,n+\"\"),n):i&&\"get\"in i&&null!==(r=i.get(t,e))?r:(r=yt.find.attr(t,e),null==r?void 0:r))},attrHooks:{type:{set:function(t,e){if(!mt.radioValue&&\"radio\"===e&&u(t,\"input\")){var n=t.value;return t.setAttribute(\"type\",e),n&&(t.value=n),e}}}},removeAttr:function(t,e){var n,r=0,i=e&&e.match(Ot);if(i&&1===t.nodeType)for(;n=i[r++];)t.removeAttribute(n)}}),me={set:function(t,e,n){return!1===e?yt.removeAttr(t,n):t.setAttribute(n,n),n}},yt.each(yt.expr.match.bool.source.match(/\\w+/g),function(t,e){var n=ye[e]||yt.find.attr;ye[e]=function(t,e,r){var i,o,a=e.toLowerCase();return r||(o=ye[a],ye[a]=i,i=null!=n(t,e,r)?a:null,ye[a]=o),i}});var be=/^(?:input|select|textarea|button)$/i,_e=/^(?:a|area)$/i;yt.fn.extend({prop:function(t,e){return Dt(this,yt.prop,t,e,arguments.length>1)},removeProp:function(t){return this.each(function(){delete this[yt.propFix[t]||t]})}}),yt.extend({prop:function(t,e,n){var r,i,o=t.nodeType;if(3!==o&&8!==o&&2!==o)return 1===o&&yt.isXMLDoc(t)||(e=yt.propFix[e]||e,i=yt.propHooks[e]),void 0!==n?i&&\"set\"in i&&void 0!==(r=i.set(t,n,e))?r:t[e]=n:i&&\"get\"in i&&null!==(r=i.get(t,e))?r:t[e]},propHooks:{tabIndex:{get:function(t){var e=yt.find.attr(t,\"tabindex\");return e?parseInt(e,10):be.test(t.nodeName)||_e.test(t.nodeName)&&t.href?0:-1}}},propFix:{for:\"htmlFor\",class:\"className\"}}),mt.optSelected||(yt.propHooks.selected={get:function(t){var e=t.parentNode;return e&&e.parentNode&&e.parentNode.selectedIndex,null},set:function(t){var e=t.parentNode;e&&(e.selectedIndex,e.parentNode&&e.parentNode.selectedIndex)}}),yt.each([\"tabIndex\",\"readOnly\",\"maxLength\",\"cellSpacing\",\"cellPadding\",\"rowSpan\",\"colSpan\",\"useMap\",\"frameBorder\",\"contentEditable\"],function(){yt.propFix[this.toLowerCase()]=this}),yt.fn.extend({addClass:function(t){var e,n,r,i,o,a,s,u=0;if(yt.isFunction(t))return this.each(function(e){yt(this).addClass(t.call(this,e,Z(this)))});if(\"string\"==typeof t&&t)for(e=t.match(Ot)||[];n=this[u++];)if(i=Z(n),r=1===n.nodeType&&\" \"+G(i)+\" \"){for(a=0;o=e[a++];)r.indexOf(\" \"+o+\" \")<0&&(r+=o+\" \");s=G(r),i!==s&&n.setAttribute(\"class\",s)}return this},removeClass:function(t){var e,n,r,i,o,a,s,u=0;if(yt.isFunction(t))return this.each(function(e){yt(this).removeClass(t.call(this,e,Z(this)))});if(!arguments.length)return this.attr(\"class\",\"\");if(\"string\"==typeof t&&t)for(e=t.match(Ot)||[];n=this[u++];)if(i=Z(n),r=1===n.nodeType&&\" \"+G(i)+\" \"){for(a=0;o=e[a++];)for(;r.indexOf(\" \"+o+\" \")>-1;)r=r.replace(\" \"+o+\" \",\" \");s=G(r),i!==s&&n.setAttribute(\"class\",s)}return this},toggleClass:function(t,e){var n=typeof t;return\"boolean\"==typeof e&&\"string\"===n?e?this.addClass(t):this.removeClass(t):yt.isFunction(t)?this.each(function(n){yt(this).toggleClass(t.call(this,n,Z(this),e),e)}):this.each(function(){var e,r,i,o;if(\"string\"===n)for(r=0,i=yt(this),o=t.match(Ot)||[];e=o[r++];)i.hasClass(e)?i.removeClass(e):i.addClass(e);else void 0!==t&&\"boolean\"!==n||(e=Z(this),e&&Lt.set(this,\"__className__\",e),this.setAttribute&&this.setAttribute(\"class\",e||!1===t?\"\":Lt.get(this,\"__className__\")||\"\"))})},hasClass:function(t){var e,n,r=0;for(e=\" \"+t+\" \";n=this[r++];)if(1===n.nodeType&&(\" \"+G(Z(n))+\" \").indexOf(e)>-1)return!0;return!1}});yt.fn.extend({val:function(t){var e,n,r,i=this[0];{if(arguments.length)return r=yt.isFunction(t),this.each(function(n){var i;1===this.nodeType&&(i=r?t.call(this,n,yt(this).val()):t,null==i?i=\"\":\"number\"==typeof i?i+=\"\":Array.isArray(i)&&(i=yt.map(i,function(t){return null==t?\"\":t+\"\"})),(e=yt.valHooks[this.type]||yt.valHooks[this.nodeName.toLowerCase()])&&\"set\"in e&&void 0!==e.set(this,i,\"value\")||(this.value=i))});if(i)return(e=yt.valHooks[i.type]||yt.valHooks[i.nodeName.toLowerCase()])&&\"get\"in e&&void 0!==(n=e.get(i,\"value\"))?n:(n=i.value,\"string\"==typeof n?n.replace(/\\r/g,\"\"):null==n?\"\":n)}}}),yt.extend({valHooks:{option:{get:function(t){var e=yt.find.attr(t,\"value\");return null!=e?e:G(yt.text(t))}},select:{get:function(t){var e,n,r,i=t.options,o=t.selectedIndex,a=\"select-one\"===t.type,s=a?null:[],c=a?o+1:i.length;for(r=o<0?c:a?o:0;r<c;r++)if(n=i[r],(n.selected||r===o)&&!n.disabled&&(!n.parentNode.disabled||!u(n.parentNode,\"optgroup\"))){if(e=yt(n).val(),a)return e;s.push(e)}return s},set:function(t,e){for(var n,r,i=t.options,o=yt.makeArray(e),a=i.length;a--;)r=i[a],(r.selected=yt.inArray(yt.valHooks.option.get(r),o)>-1)&&(n=!0);return n||(t.selectedIndex=-1),o}}}}),yt.each([\"radio\",\"checkbox\"],function(){yt.valHooks[this]={set:function(t,e){if(Array.isArray(e))return t.checked=yt.inArray(yt(t).val(),e)>-1}},mt.checkOn||(yt.valHooks[this].get=function(t){return null===t.getAttribute(\"value\")?\"on\":t.value})});var we=/^(?:focusinfocus|focusoutblur)$/;yt.extend(yt.event,{trigger:function(t,e,r,i){var o,a,s,u,c,l,f,p=[r||at],d=ht.call(t,\"type\")?t.type:t,h=ht.call(t,\"namespace\")?t.namespace.split(\".\"):[];if(a=s=r=r||at,3!==r.nodeType&&8!==r.nodeType&&!we.test(d+yt.event.triggered)&&(d.indexOf(\".\")>-1&&(h=d.split(\".\"),d=h.shift(),h.sort()),c=d.indexOf(\":\")<0&&\"on\"+d,t=t[yt.expando]?t:new yt.Event(d,\"object\"==typeof t&&t),t.isTrigger=i?2:3,t.namespace=h.join(\".\"),t.rnamespace=t.namespace?new RegExp(\"(^|\\\\.)\"+h.join(\"\\\\.(?:.*\\\\.|)\")+\"(\\\\.|$)\"):null,t.result=void 0,t.target||(t.target=r),e=null==e?[t]:yt.makeArray(e,[t]),f=yt.event.special[d]||{},i||!f.trigger||!1!==f.trigger.apply(r,e))){if(!i&&!f.noBubble&&!yt.isWindow(r)){for(u=f.delegateType||d,we.test(u+d)||(a=a.parentNode);a;a=a.parentNode)p.push(a),s=a;s===(r.ownerDocument||at)&&p.push(s.defaultView||s.parentWindow||n)}for(o=0;(a=p[o++])&&!t.isPropagationStopped();)t.type=o>1?u:f.bindType||d,l=(Lt.get(a,\"events\")||{})[t.type]&&Lt.get(a,\"handle\"),l&&l.apply(a,e),(l=c&&a[c])&&l.apply&&It(a)&&(t.result=l.apply(a,e),!1===t.result&&t.preventDefault());return t.type=d,i||t.isDefaultPrevented()||f._default&&!1!==f._default.apply(p.pop(),e)||!It(r)||c&&yt.isFunction(r[d])&&!yt.isWindow(r)&&(s=r[c],s&&(r[c]=null),yt.event.triggered=d,r[d](),yt.event.triggered=void 0,s&&(r[c]=s)),t.result}},simulate:function(t,e,n){var r=yt.extend(new yt.Event,n,{type:t,isSimulated:!0});yt.event.trigger(r,null,e)}}),yt.fn.extend({trigger:function(t,e){return this.each(function(){yt.event.trigger(t,e,this)})},triggerHandler:function(t,e){var n=this[0];if(n)return yt.event.trigger(t,e,n,!0)}}),yt.each(\"blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu\".split(\" \"),function(t,e){yt.fn[e]=function(t,n){return arguments.length>0?this.on(e,null,t,n):this.trigger(e)}}),yt.fn.extend({hover:function(t,e){return this.mouseenter(t).mouseleave(e||t)}}),mt.focusin=\"onfocusin\"in n,mt.focusin||yt.each({focus:\"focusin\",blur:\"focusout\"},function(t,e){var n=function(t){yt.event.simulate(e,t.target,yt.event.fix(t))};yt.event.special[e]={setup:function(){var r=this.ownerDocument||this,i=Lt.access(r,e);i||r.addEventListener(t,n,!0),Lt.access(r,e,(i||0)+1)},teardown:function(){var r=this.ownerDocument||this,i=Lt.access(r,e)-1;i?Lt.access(r,e,i):(r.removeEventListener(t,n,!0),Lt.remove(r,e))}}});var xe=n.location,Ce=yt.now(),Te=/\\?/;yt.parseXML=function(t){var e;if(!t||\"string\"!=typeof t)return null;try{e=(new n.DOMParser).parseFromString(t,\"text/xml\")}catch(t){e=void 0}return e&&!e.getElementsByTagName(\"parsererror\").length||yt.error(\"Invalid XML: \"+t),e};var $e=/\\[\\]$/,ke=/^(?:submit|button|image|reset|file)$/i,Ae=/^(?:input|select|textarea|keygen)/i;yt.param=function(t,e){var n,r=[],i=function(t,e){var n=yt.isFunction(e)?e():e;r[r.length]=encodeURIComponent(t)+\"=\"+encodeURIComponent(null==n?\"\":n)};if(Array.isArray(t)||t.jquery&&!yt.isPlainObject(t))yt.each(t,function(){i(this.name,this.value)});else for(n in t)Y(n,t[n],e,i);return r.join(\"&\")},yt.fn.extend({serialize:function(){return yt.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var t=yt.prop(this,\"elements\");return t?yt.makeArray(t):this}).filter(function(){var t=this.type;return this.name&&!yt(this).is(\":disabled\")&&Ae.test(this.nodeName)&&!ke.test(t)&&(this.checked||!zt.test(t))}).map(function(t,e){var n=yt(this).val();return null==n?null:Array.isArray(n)?yt.map(n,function(t){return{name:e.name,value:t.replace(/\\r?\\n/g,\"\\r\\n\")}}):{name:e.name,value:n.replace(/\\r?\\n/g,\"\\r\\n\")}}).get()}});var Ee=/^(.*?):[ \\t]*([^\\r\\n]*)$/gm,Se=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Oe=/^(?:GET|HEAD)$/,je={},Ne={},De=\"*/\".concat(\"*\"),Ie=at.createElement(\"a\");Ie.href=xe.href,yt.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:xe.href,type:\"GET\",isLocal:Se.test(xe.protocol),global:!0,processData:!0,async:!0,contentType:\"application/x-www-form-urlencoded; charset=UTF-8\",accepts:{\"*\":De,text:\"text/plain\",html:\"text/html\",xml:\"application/xml, text/xml\",json:\"application/json, text/javascript\"},contents:{xml:/\\bxml\\b/,html:/\\bhtml/,json:/\\bjson\\b/},responseFields:{xml:\"responseXML\",text:\"responseText\",json:\"responseJSON\"},converters:{\"* text\":String,\"text html\":!0,\"text json\":JSON.parse,\"text xml\":yt.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(t,e){return e?nt(nt(t,yt.ajaxSettings),e):nt(yt.ajaxSettings,t)},ajaxPrefilter:tt(je),ajaxTransport:tt(Ne),ajax:function(t,e){function r(t,e,r,s){var c,p,d,_,w,x=e;l||(l=!0,u&&n.clearTimeout(u),i=void 0,a=s||\"\",C.readyState=t>0?4:0,c=t>=200&&t<300||304===t,r&&(_=rt(h,C,r)),_=it(h,_,C,c),c?(h.ifModified&&(w=C.getResponseHeader(\"Last-Modified\"),w&&(yt.lastModified[o]=w),(w=C.getResponseHeader(\"etag\"))&&(yt.etag[o]=w)),204===t||\"HEAD\"===h.type?x=\"nocontent\":304===t?x=\"notmodified\":(x=_.state,p=_.data,d=_.error,c=!d)):(d=x,!t&&x||(x=\"error\",t<0&&(t=0))),C.status=t,C.statusText=(e||x)+\"\",c?m.resolveWith(v,[p,x,C]):m.rejectWith(v,[C,x,d]),C.statusCode(b),b=void 0,f&&g.trigger(c?\"ajaxSuccess\":\"ajaxError\",[C,h,c?p:d]),y.fireWith(v,[C,x]),f&&(g.trigger(\"ajaxComplete\",[C,h]),--yt.active||yt.event.trigger(\"ajaxStop\")))}\"object\"==typeof t&&(e=t,t=void 0),e=e||{};var i,o,a,s,u,c,l,f,p,d,h=yt.ajaxSetup({},e),v=h.context||h,g=h.context&&(v.nodeType||v.jquery)?yt(v):yt.event,m=yt.Deferred(),y=yt.Callbacks(\"once memory\"),b=h.statusCode||{},_={},w={},x=\"canceled\",C={readyState:0,getResponseHeader:function(t){var e;if(l){if(!s)for(s={};e=Ee.exec(a);)s[e[1].toLowerCase()]=e[2];e=s[t.toLowerCase()]}return null==e?null:e},getAllResponseHeaders:function(){return l?a:null},setRequestHeader:function(t,e){return null==l&&(t=w[t.toLowerCase()]=w[t.toLowerCase()]||t,_[t]=e),this},overrideMimeType:function(t){return null==l&&(h.mimeType=t),this},statusCode:function(t){var e;if(t)if(l)C.always(t[C.status]);else for(e in t)b[e]=[b[e],t[e]];return this},abort:function(t){var e=t||x;return i&&i.abort(e),r(0,e),this}};if(m.promise(C),h.url=((t||h.url||xe.href)+\"\").replace(/^\\/\\//,xe.protocol+\"//\"),h.type=e.method||e.type||h.method||h.type,h.dataTypes=(h.dataType||\"*\").toLowerCase().match(Ot)||[\"\"],null==h.crossDomain){c=at.createElement(\"a\");try{c.href=h.url,c.href=c.href,h.crossDomain=Ie.protocol+\"//\"+Ie.host!=c.protocol+\"//\"+c.host}catch(t){h.crossDomain=!0}}if(h.data&&h.processData&&\"string\"!=typeof h.data&&(h.data=yt.param(h.data,h.traditional)),et(je,h,e,C),l)return C;f=yt.event&&h.global,f&&0==yt.active++&&yt.event.trigger(\"ajaxStart\"),h.type=h.type.toUpperCase(),h.hasContent=!Oe.test(h.type),o=h.url.replace(/#.*$/,\"\"),h.hasContent?h.data&&h.processData&&0===(h.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&(h.data=h.data.replace(/%20/g,\"+\")):(d=h.url.slice(o.length),h.data&&(o+=(Te.test(o)?\"&\":\"?\")+h.data,delete h.data),!1===h.cache&&(o=o.replace(/([?&])_=[^&]*/,\"$1\"),d=(Te.test(o)?\"&\":\"?\")+\"_=\"+Ce+++d),h.url=o+d),h.ifModified&&(yt.lastModified[o]&&C.setRequestHeader(\"If-Modified-Since\",yt.lastModified[o]),yt.etag[o]&&C.setRequestHeader(\"If-None-Match\",yt.etag[o])),(h.data&&h.hasContent&&!1!==h.contentType||e.contentType)&&C.setRequestHeader(\"Content-Type\",h.contentType),C.setRequestHeader(\"Accept\",h.dataTypes[0]&&h.accepts[h.dataTypes[0]]?h.accepts[h.dataTypes[0]]+(\"*\"!==h.dataTypes[0]?\", \"+De+\"; q=0.01\":\"\"):h.accepts[\"*\"]);for(p in h.headers)C.setRequestHeader(p,h.headers[p]);if(h.beforeSend&&(!1===h.beforeSend.call(v,C,h)||l))return C.abort();if(x=\"abort\",y.add(h.complete),C.done(h.success),C.fail(h.error),i=et(Ne,h,e,C)){if(C.readyState=1,f&&g.trigger(\"ajaxSend\",[C,h]),l)return C;h.async&&h.timeout>0&&(u=n.setTimeout(function(){C.abort(\"timeout\")},h.timeout));try{l=!1,i.send(_,r)}catch(t){if(l)throw t;r(-1,t)}}else r(-1,\"No Transport\");return C},getJSON:function(t,e,n){return yt.get(t,e,n,\"json\")},getScript:function(t,e){return yt.get(t,void 0,e,\"script\")}}),yt.each([\"get\",\"post\"],function(t,e){yt[e]=function(t,n,r,i){return yt.isFunction(n)&&(i=i||r,r=n,n=void 0),yt.ajax(yt.extend({url:t,type:e,dataType:i,data:n,success:r},yt.isPlainObject(t)&&t))}}),yt._evalUrl=function(t){return yt.ajax({url:t,type:\"GET\",dataType:\"script\",cache:!0,async:!1,global:!1,throws:!0})},yt.fn.extend({wrapAll:function(t){var e;return this[0]&&(yt.isFunction(t)&&(t=t.call(this[0])),e=yt(t,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&e.insertBefore(this[0]),e.map(function(){for(var t=this;t.firstElementChild;)t=t.firstElementChild;return t}).append(this)),this},wrapInner:function(t){return yt.isFunction(t)?this.each(function(e){yt(this).wrapInner(t.call(this,e))}):this.each(function(){var e=yt(this),n=e.contents();n.length?n.wrapAll(t):e.append(t)})},wrap:function(t){var e=yt.isFunction(t);return this.each(function(n){yt(this).wrapAll(e?t.call(this,n):t)})},unwrap:function(t){return this.parent(t).not(\"body\").each(function(){yt(this).replaceWith(this.childNodes)}),this}}),yt.expr.pseudos.hidden=function(t){return!yt.expr.pseudos.visible(t)},yt.expr.pseudos.visible=function(t){return!!(t.offsetWidth||t.offsetHeight||t.getClientRects().length)},yt.ajaxSettings.xhr=function(){try{return new n.XMLHttpRequest}catch(t){}};var Le={0:200,1223:204},Re=yt.ajaxSettings.xhr();mt.cors=!!Re&&\"withCredentials\"in Re,mt.ajax=Re=!!Re,yt.ajaxTransport(function(t){var e,r;if(mt.cors||Re&&!t.crossDomain)return{send:function(i,o){var a,s=t.xhr();if(s.open(t.type,t.url,t.async,t.username,t.password),t.xhrFields)for(a in t.xhrFields)s[a]=t.xhrFields[a];t.mimeType&&s.overrideMimeType&&s.overrideMimeType(t.mimeType),t.crossDomain||i[\"X-Requested-With\"]||(i[\"X-Requested-With\"]=\"XMLHttpRequest\");for(a in i)s.setRequestHeader(a,i[a]);e=function(t){return function(){e&&(e=r=s.onload=s.onerror=s.onabort=s.onreadystatechange=null,\"abort\"===t?s.abort():\"error\"===t?\"number\"!=typeof s.status?o(0,\"error\"):o(s.status,s.statusText):o(Le[s.status]||s.status,s.statusText,\"text\"!==(s.responseType||\"text\")||\"string\"!=typeof s.responseText?{binary:s.response}:{text:s.responseText},s.getAllResponseHeaders()))}},s.onload=e(),r=s.onerror=e(\"error\"),void 0!==s.onabort?s.onabort=r:s.onreadystatechange=function(){4===s.readyState&&n.setTimeout(function(){e&&r()})},e=e(\"abort\");try{s.send(t.hasContent&&t.data||null)}catch(t){if(e)throw t}},abort:function(){e&&e()}}}),yt.ajaxPrefilter(function(t){t.crossDomain&&(t.contents.script=!1)}),yt.ajaxSetup({accepts:{script:\"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript\"},contents:{script:/\\b(?:java|ecma)script\\b/},converters:{\"text script\":function(t){return yt.globalEval(t),t}}}),yt.ajaxPrefilter(\"script\",function(t){void 0===t.cache&&(t.cache=!1),t.crossDomain&&(t.type=\"GET\")}),yt.ajaxTransport(\"script\",function(t){if(t.crossDomain){var e,n;return{send:function(r,i){e=yt(\"<script>\").prop({charset:t.scriptCharset,src:t.url}).on(\"load error\",n=function(t){e.remove(),n=null,t&&i(\"error\"===t.type?404:200,t.type)}),at.head.appendChild(e[0])},abort:function(){n&&n()}}}});var Pe=[],Fe=/(=)\\?(?=&|$)|\\?\\?/;yt.ajaxSetup({jsonp:\"callback\",jsonpCallback:function(){var t=Pe.pop()||yt.expando+\"_\"+Ce++;return this[t]=!0,t}}),yt.ajaxPrefilter(\"json jsonp\",function(t,e,r){var i,o,a,s=!1!==t.jsonp&&(Fe.test(t.url)?\"url\":\"string\"==typeof t.data&&0===(t.contentType||\"\").indexOf(\"application/x-www-form-urlencoded\")&&Fe.test(t.data)&&\"data\");if(s||\"jsonp\"===t.dataTypes[0])return i=t.jsonpCallback=yt.isFunction(t.jsonpCallback)?t.jsonpCallback():t.jsonpCallback,s?t[s]=t[s].replace(Fe,\"$1\"+i):!1!==t.jsonp&&(t.url+=(Te.test(t.url)?\"&\":\"?\")+t.jsonp+\"=\"+i),t.converters[\"script json\"]=function(){return a||yt.error(i+\" was not called\"),a[0]},t.dataTypes[0]=\"json\",o=n[i],n[i]=function(){a=arguments},r.always(function(){void 0===o?yt(n).removeProp(i):n[i]=o,t[i]&&(t.jsonpCallback=e.jsonpCallback,Pe.push(i)),a&&yt.isFunction(o)&&o(a[0]),a=o=void 0}),\"script\"}),mt.createHTMLDocument=function(){var t=at.implementation.createHTMLDocument(\"\").body;return t.innerHTML=\"<form></form><form></form>\",2===t.childNodes.length}(),yt.parseHTML=function(t,e,n){if(\"string\"!=typeof t)return[];\"boolean\"==typeof e&&(n=e,e=!1);var r,i,o;return e||(mt.createHTMLDocument?(e=at.implementation.createHTMLDocument(\"\"),r=e.createElement(\"base\"),r.href=at.location.href,e.head.appendChild(r)):e=at),i=Tt.exec(t),o=!n&&[],i?[e.createElement(i[1])]:(i=T([t],e,o),o&&o.length&&yt(o).remove(),yt.merge([],i.childNodes))},yt.fn.load=function(t,e,n){var r,i,o,a=this,s=t.indexOf(\" \");return s>-1&&(r=G(t.slice(s)),t=t.slice(0,s)),yt.isFunction(e)?(n=e,e=void 0):e&&\"object\"==typeof e&&(i=\"POST\"),a.length>0&&yt.ajax({url:t,type:i||\"GET\",dataType:\"html\",data:e}).done(function(t){o=arguments,a.html(r?yt(\"<div>\").append(yt.parseHTML(t)).find(r):t)}).always(n&&function(t,e){a.each(function(){n.apply(this,o||[t.responseText,e,t])})}),this},yt.each([\"ajaxStart\",\"ajaxStop\",\"ajaxComplete\",\"ajaxError\",\"ajaxSuccess\",\"ajaxSend\"],function(t,e){yt.fn[e]=function(t){return this.on(e,t)}}),yt.expr.pseudos.animated=function(t){return yt.grep(yt.timers,function(e){return t===e.elem}).length},yt.offset={setOffset:function(t,e,n){var r,i,o,a,s,u,c,l=yt.css(t,\"position\"),f=yt(t),p={};\"static\"===l&&(t.style.position=\"relative\"),s=f.offset(),o=yt.css(t,\"top\"),u=yt.css(t,\"left\"),c=(\"absolute\"===l||\"fixed\"===l)&&(o+u).indexOf(\"auto\")>-1,c?(r=f.position(),a=r.top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),yt.isFunction(e)&&(e=e.call(t,n,yt.extend({},s))),null!=e.top&&(p.top=e.top-s.top+a),null!=e.left&&(p.left=e.left-s.left+i),\"using\"in e?e.using.call(t,p):f.css(p)}},yt.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){yt.offset.setOffset(this,t,e)});var e,n,r,i,o=this[0];if(o)return o.getClientRects().length?(r=o.getBoundingClientRect(),e=o.ownerDocument,n=e.documentElement,i=e.defaultView,{top:r.top+i.pageYOffset-n.clientTop,left:r.left+i.pageXOffset-n.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var t,e,n=this[0],r={top:0,left:0};return\"fixed\"===yt.css(n,\"position\")?e=n.getBoundingClientRect():(t=this.offsetParent(),e=this.offset(),u(t[0],\"html\")||(r=t.offset()),r={top:r.top+yt.css(t[0],\"borderTopWidth\",!0),left:r.left+yt.css(t[0],\"borderLeftWidth\",!0)}),{top:e.top-r.top-yt.css(n,\"marginTop\",!0),left:e.left-r.left-yt.css(n,\"marginLeft\",!0)}}},offsetParent:function(){return this.map(function(){for(var t=this.offsetParent;t&&\"static\"===yt.css(t,\"position\");)t=t.offsetParent;return t||Qt})}}),yt.each({scrollLeft:\"pageXOffset\",scrollTop:\"pageYOffset\"},function(t,e){var n=\"pageYOffset\"===e;yt.fn[t]=function(r){return Dt(this,function(t,r,i){var o;if(yt.isWindow(t)?o=t:9===t.nodeType&&(o=t.defaultView),void 0===i)return o?o[e]:t[r];o?o.scrollTo(n?o.pageXOffset:i,n?i:o.pageYOffset):t[r]=i},t,r,arguments.length)}}),yt.each([\"top\",\"left\"],function(t,e){yt.cssHooks[e]=P(mt.pixelPosition,function(t,n){if(n)return n=R(t,e),oe.test(n)?yt(t).position()[e]+\"px\":n})}),yt.each({Height:\"height\",Width:\"width\"},function(t,e){yt.each({padding:\"inner\"+t,content:e,\"\":\"outer\"+t},function(n,r){yt.fn[r]=function(i,o){var a=arguments.length&&(n||\"boolean\"!=typeof i),s=n||(!0===i||!0===o?\"margin\":\"border\");return Dt(this,function(e,n,i){var o;return yt.isWindow(e)?0===r.indexOf(\"outer\")?e[\"inner\"+t]:e.document.documentElement[\"client\"+t]:9===e.nodeType?(o=e.documentElement,Math.max(e.body[\"scroll\"+t],o[\"scroll\"+t],e.body[\"offset\"+t],o[\"offset\"+t],o[\"client\"+t])):void 0===i?yt.css(e,n,s):yt.style(e,n,i,s)},e,a?i:void 0,a)}})}),yt.fn.extend({bind:function(t,e,n){return this.on(t,null,e,n)},unbind:function(t,e){return this.off(t,null,e)},delegate:function(t,e,n,r){return this.on(e,t,n,r)},undelegate:function(t,e,n){return 1===arguments.length?this.off(t,\"**\"):this.off(e,t||\"**\",n)}}),yt.holdReady=function(t){t?yt.readyWait++:yt.ready(!0)},yt.isArray=Array.isArray,yt.parseJSON=JSON.parse,yt.nodeName=u,r=[],void 0!==(i=function(){return yt}.apply(e,r))&&(t.exports=i);var qe=n.jQuery,Me=n.$;return yt.noConflict=function(t){return n.$===yt&&(n.$=Me),t&&n.jQuery===yt&&(n.jQuery=qe),yt},o||(n.jQuery=n.$=yt),yt})},function(t,e,n){(function(t,r){var i;(function(){function o(t,e){return t.set(e[0],e[1]),t}function a(t,e){return t.add(e),t}function s(t,e,n){switch(n.length){case 0:return t.call(e);case 1:return t.call(e,n[0]);case 2:return t.call(e,n[0],n[1]);case 3:return t.call(e,n[0],n[1],n[2])}return t.apply(e,n)}function u(t,e,n,r){for(var i=-1,o=null==t?0:t.length;++i<o;){var a=t[i];e(r,a,n(a),t)}return r}function c(t,e){for(var n=-1,r=null==t?0:t.length;++n<r&&!1!==e(t[n],n,t););return t}function l(t,e){for(var n=null==t?0:t.length;n--&&!1!==e(t[n],n,t););return t}function f(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(!e(t[n],n,t))return!1;return!0}function p(t,e){for(var n=-1,r=null==t?0:t.length,i=0,o=[];++n<r;){var a=t[n];e(a,n,t)&&(o[i++]=a)}return o}function d(t,e){return!!(null==t?0:t.length)&&T(t,e,0)>-1}function h(t,e,n){for(var r=-1,i=null==t?0:t.length;++r<i;)if(n(e,t[r]))return!0;return!1}function v(t,e){for(var n=-1,r=null==t?0:t.length,i=Array(r);++n<r;)i[n]=e(t[n],n,t);return i}function g(t,e){for(var n=-1,r=e.length,i=t.length;++n<r;)t[i+n]=e[n];return t}function m(t,e,n,r){var i=-1,o=null==t?0:t.length;for(r&&o&&(n=t[++i]);++i<o;)n=e(n,t[i],i,t);return n}function y(t,e,n,r){var i=null==t?0:t.length;for(r&&i&&(n=t[--i]);i--;)n=e(n,t[i],i,t);return n}function b(t,e){for(var n=-1,r=null==t?0:t.length;++n<r;)if(e(t[n],n,t))return!0;return!1}function _(t){return t.split(\"\")}function w(t){return t.match(Pe)||[]}function x(t,e,n){var r;return n(t,function(t,n,i){if(e(t,n,i))return r=n,!1}),r}function C(t,e,n,r){for(var i=t.length,o=n+(r?1:-1);r?o--:++o<i;)if(e(t[o],o,t))return o;return-1}function T(t,e,n){return e===e?G(t,e,n):C(t,k,n)}function $(t,e,n,r){for(var i=n-1,o=t.length;++i<o;)if(r(t[i],e))return i;return-1}function k(t){return t!==t}function A(t,e){var n=null==t?0:t.length;return n?N(t,e)/n:Lt}function E(t){return function(e){return null==e?it:e[t]}}function S(t){return function(e){return null==t?it:t[e]}}function O(t,e,n,r,i){return i(t,function(t,i,o){n=r?(r=!1,t):e(n,t,i,o)}),n}function j(t,e){var n=t.length;for(t.sort(e);n--;)t[n]=t[n].value;return t}function N(t,e){for(var n,r=-1,i=t.length;++r<i;){var o=e(t[r]);o!==it&&(n=n===it?o:n+o)}return n}function D(t,e){for(var n=-1,r=Array(t);++n<t;)r[n]=e(n);return r}function I(t,e){return v(e,function(e){return[e,t[e]]})}function L(t){return function(e){return t(e)}}function R(t,e){return v(e,function(e){return t[e]})}function P(t,e){return t.has(e)}function F(t,e){for(var n=-1,r=t.length;++n<r&&T(e,t[n],0)>-1;);return n}function q(t,e){for(var n=t.length;n--&&T(e,t[n],0)>-1;);return n}function M(t,e){for(var n=t.length,r=0;n--;)t[n]===e&&++r;return r}function H(t){return\"\\\\\"+Tn[t]}function B(t,e){return null==t?it:t[e]}function U(t){return vn.test(t)}function W(t){return gn.test(t)}function z(t){for(var e,n=[];!(e=t.next()).done;)n.push(e.value);return n}function V(t){var e=-1,n=Array(t.size);return t.forEach(function(t,r){n[++e]=[r,t]}),n}function X(t,e){return function(n){return t(e(n))}}function K(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n];a!==e&&a!==lt||(t[n]=lt,o[i++]=n)}return o}function J(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=t}),n}function Q(t){var e=-1,n=Array(t.size);return t.forEach(function(t){n[++e]=[t,t]}),n}function G(t,e,n){for(var r=n-1,i=t.length;++r<i;)if(t[r]===e)return r;return-1}function Z(t,e,n){for(var r=n+1;r--;)if(t[r]===e)return r;return r}function Y(t){return U(t)?et(t):Hn(t)}function tt(t){return U(t)?nt(t):_(t)}function et(t){for(var e=dn.lastIndex=0;dn.test(t);)++e;return e}function nt(t){return t.match(dn)||[]}function rt(t){return t.match(hn)||[]}var it,ot=200,at=\"Unsupported core-js use. Try https://npms.io/search?q=ponyfill.\",st=\"Expected a function\",ut=\"__lodash_hash_undefined__\",ct=500,lt=\"__lodash_placeholder__\",ft=1,pt=2,dt=4,ht=1,vt=2,gt=1,mt=2,yt=4,bt=8,_t=16,wt=32,xt=64,Ct=128,Tt=256,$t=512,kt=30,At=\"...\",Et=800,St=16,Ot=1,jt=2,Nt=1/0,Dt=9007199254740991,It=1.7976931348623157e308,Lt=NaN,Rt=4294967295,Pt=Rt-1,Ft=Rt>>>1,qt=[[\"ary\",Ct],[\"bind\",gt],[\"bindKey\",mt],[\"curry\",bt],[\"curryRight\",_t],[\"flip\",$t],[\"partial\",wt],[\"partialRight\",xt],[\"rearg\",Tt]],Mt=\"[object Arguments]\",Ht=\"[object Array]\",Bt=\"[object AsyncFunction]\",Ut=\"[object Boolean]\",Wt=\"[object Date]\",zt=\"[object DOMException]\",Vt=\"[object Error]\",Xt=\"[object Function]\",Kt=\"[object GeneratorFunction]\",Jt=\"[object Map]\",Qt=\"[object Number]\",Gt=\"[object Null]\",Zt=\"[object Object]\",Yt=\"[object Proxy]\",te=\"[object RegExp]\",ee=\"[object Set]\",ne=\"[object String]\",re=\"[object Symbol]\",ie=\"[object Undefined]\",oe=\"[object WeakMap]\",ae=\"[object WeakSet]\",se=\"[object ArrayBuffer]\",ue=\"[object DataView]\",ce=\"[object Float32Array]\",le=\"[object Float64Array]\",fe=\"[object Int8Array]\",pe=\"[object Int16Array]\",de=\"[object Int32Array]\",he=\"[object Uint8Array]\",ve=\"[object Uint8ClampedArray]\",ge=\"[object Uint16Array]\",me=\"[object Uint32Array]\",ye=/\\b__p \\+= '';/g,be=/\\b(__p \\+=) '' \\+/g,_e=/(__e\\(.*?\\)|\\b__t\\)) \\+\\n'';/g,we=/&(?:amp|lt|gt|quot|#39);/g,xe=/[&<>\"']/g,Ce=RegExp(we.source),Te=RegExp(xe.source),$e=/<%=([\\s\\S]+?)%>/g,ke=/\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,Ae=/^\\w*$/,Ee=/^\\./,Se=/[\\\\^$.*+?()[\\]{}|]/g,Oe=RegExp(Se.source),je=/^\\s+|\\s+$/g,Ne=/^\\s+/,De=/\\s+$/,Ie=/\\{(?:\\n\\/\\* \\[wrapped with .+\\] \\*\\/)?\\n?/,Le=/\\{\\n\\/\\* \\[wrapped with (.+)\\] \\*/,Re=/,? & /,Pe=/[^\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\x7f]+/g,Fe=/\\$\\{([^\\\\}]*(?:\\\\.[^\\\\}]*)*)\\}/g,qe=/\\w*$/,Me=/^[-+]0x[0-9a-f]+$/i,He=/^0b[01]+$/i,Be=/^\\[object .+?Constructor\\]$/,Ue=/^0o[0-7]+$/i,We=/^(?:0|[1-9]\\d*)$/,ze=/[\\xc0-\\xd6\\xd8-\\xf6\\xf8-\\xff\\u0100-\\u017f]/g,Ve=/($^)/,Xe=/['\\n\\r\\u2028\\u2029\\\\]/g,Ke=\"\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff\",Je=\"\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\",Qe=\"[\"+Je+\"]\",Ge=\"[\"+Ke+\"]\",Ze=\"[a-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xff]\",Ye=\"[^\\\\ud800-\\\\udfff\"+Je+\"\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",tn=\"\\\\ud83c[\\\\udffb-\\\\udfff]\",en=\"(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}\",nn=\"[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]\",rn=\"[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]\",on=\"(?:\"+Ze+\"|\"+Ye+\")\",an=\"(?:[\\\\u0300-\\\\u036f\\\\ufe20-\\\\ufe2f\\\\u20d0-\\\\u20ff]|\\\\ud83c[\\\\udffb-\\\\udfff])?\",sn=\"(?:\\\\u200d(?:\"+[\"[^\\\\ud800-\\\\udfff]\",en,nn].join(\"|\")+\")[\\\\ufe0e\\\\ufe0f]?\"+an+\")*\",un=\"[\\\\ufe0e\\\\ufe0f]?\"+an+sn,cn=\"(?:\"+[\"[\\\\u2700-\\\\u27bf]\",en,nn].join(\"|\")+\")\"+un,ln=\"(?:\"+[\"[^\\\\ud800-\\\\udfff]\"+Ge+\"?\",Ge,en,nn,\"[\\\\ud800-\\\\udfff]\"].join(\"|\")+\")\",fn=RegExp(\"['’]\",\"g\"),pn=RegExp(Ge,\"g\"),dn=RegExp(tn+\"(?=\"+tn+\")|\"+ln+un,\"g\"),hn=RegExp([rn+\"?\"+Ze+\"+(?:['’](?:d|ll|m|re|s|t|ve))?(?=\"+[Qe,rn,\"$\"].join(\"|\")+\")\",\"(?:[A-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde]|[^\\\\ud800-\\\\udfff\\\\xac\\\\xb1\\\\xd7\\\\xf7\\\\x00-\\\\x2f\\\\x3a-\\\\x40\\\\x5b-\\\\x60\\\\x7b-\\\\xbf\\\\u2000-\\\\u206f \\\\t\\\\x0b\\\\f\\\\xa0\\\\ufeff\\\\n\\\\r\\\\u2028\\\\u2029\\\\u1680\\\\u180e\\\\u2000\\\\u2001\\\\u2002\\\\u2003\\\\u2004\\\\u2005\\\\u2006\\\\u2007\\\\u2008\\\\u2009\\\\u200a\\\\u202f\\\\u205f\\\\u3000\\\\d+\\\\u2700-\\\\u27bfa-z\\\\xdf-\\\\xf6\\\\xf8-\\\\xffA-Z\\\\xc0-\\\\xd6\\\\xd8-\\\\xde])+(?:['’](?:D|LL|M|RE|S|T|VE))?(?=\"+[Qe,rn+on,\"$\"].join(\"|\")+\")\",rn+\"?\"+on+\"+(?:['’](?:d|ll|m|re|s|t|ve))?\",rn+\"+(?:['’](?:D|LL|M|RE|S|T|VE))?\",\"\\\\d*(?:(?:1ST|2ND|3RD|(?![123])\\\\dTH)\\\\b)\",\"\\\\d*(?:(?:1st|2nd|3rd|(?![123])\\\\dth)\\\\b)\",\"\\\\d+\",cn].join(\"|\"),\"g\"),vn=RegExp(\"[\\\\u200d\\\\ud800-\\\\udfff\"+Ke+\"\\\\ufe0e\\\\ufe0f]\"),gn=/[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/,mn=[\"Array\",\"Buffer\",\"DataView\",\"Date\",\"Error\",\"Float32Array\",\"Float64Array\",\"Function\",\"Int8Array\",\"Int16Array\",\"Int32Array\",\"Map\",\"Math\",\"Object\",\"Promise\",\"RegExp\",\"Set\",\"String\",\"Symbol\",\"TypeError\",\"Uint8Array\",\"Uint8ClampedArray\",\"Uint16Array\",\"Uint32Array\",\"WeakMap\",\"_\",\"clearTimeout\",\"isFinite\",\"parseInt\",\"setTimeout\"],yn=-1,bn={};bn[ce]=bn[le]=bn[fe]=bn[pe]=bn[de]=bn[he]=bn[ve]=bn[ge]=bn[me]=!0,bn[Mt]=bn[Ht]=bn[se]=bn[Ut]=bn[ue]=bn[Wt]=bn[Vt]=bn[Xt]=bn[Jt]=bn[Qt]=bn[Zt]=bn[te]=bn[ee]=bn[ne]=bn[oe]=!1;var _n={};_n[Mt]=_n[Ht]=_n[se]=_n[ue]=_n[Ut]=_n[Wt]=_n[ce]=_n[le]=_n[fe]=_n[pe]=_n[de]=_n[Jt]=_n[Qt]=_n[Zt]=_n[te]=_n[ee]=_n[ne]=_n[re]=_n[he]=_n[ve]=_n[ge]=_n[me]=!0,_n[Vt]=_n[Xt]=_n[oe]=!1;var wn={\"À\":\"A\",\"Á\":\"A\",\"Â\":\"A\",\"Ã\":\"A\",\"Ä\":\"A\",\"Å\":\"A\",\"à\":\"a\",\"á\":\"a\",\"â\":\"a\",\"ã\":\"a\",\"ä\":\"a\",\"å\":\"a\",\"Ç\":\"C\",\"ç\":\"c\",\"Ð\":\"D\",\"ð\":\"d\",\"È\":\"E\",\"É\":\"E\",\"Ê\":\"E\",\"Ë\":\"E\",\"è\":\"e\",\"é\":\"e\",\"ê\":\"e\",\"ë\":\"e\",\"Ì\":\"I\",\"Í\":\"I\",\"Î\":\"I\",\"Ï\":\"I\",\"ì\":\"i\",\"í\":\"i\",\"î\":\"i\",\"ï\":\"i\",\"Ñ\":\"N\",\"ñ\":\"n\",\"Ò\":\"O\",\"Ó\":\"O\",\"Ô\":\"O\",\"Õ\":\"O\",\"Ö\":\"O\",\"Ø\":\"O\",\"ò\":\"o\",\"ó\":\"o\",\"ô\":\"o\",\"õ\":\"o\",\"ö\":\"o\",\"ø\":\"o\",\"Ù\":\"U\",\"Ú\":\"U\",\"Û\":\"U\",\"Ü\":\"U\",\"ù\":\"u\",\"ú\":\"u\",\"û\":\"u\",\"ü\":\"u\",\"Ý\":\"Y\",\"ý\":\"y\",\"ÿ\":\"y\",\"Æ\":\"Ae\",\"æ\":\"ae\",\"Þ\":\"Th\",\"þ\":\"th\",\"ß\":\"ss\",\"Ā\":\"A\",\"Ă\":\"A\",\"Ą\":\"A\",\"ā\":\"a\",\"ă\":\"a\",\"ą\":\"a\",\"Ć\":\"C\",\"Ĉ\":\"C\",\"Ċ\":\"C\",\"Č\":\"C\",\"ć\":\"c\",\"ĉ\":\"c\",\"ċ\":\"c\",\"č\":\"c\",\"Ď\":\"D\",\"Đ\":\"D\",\"ď\":\"d\",\"đ\":\"d\",\"Ē\":\"E\",\"Ĕ\":\"E\",\"Ė\":\"E\",\"Ę\":\"E\",\"Ě\":\"E\",\"ē\":\"e\",\"ĕ\":\"e\",\"ė\":\"e\",\"ę\":\"e\",\"ě\":\"e\",\"Ĝ\":\"G\",\"Ğ\":\"G\",\"Ġ\":\"G\",\"Ģ\":\"G\",\"ĝ\":\"g\",\"ğ\":\"g\",\"ġ\":\"g\",\"ģ\":\"g\",\"Ĥ\":\"H\",\"Ħ\":\"H\",\"ĥ\":\"h\",\"ħ\":\"h\",\"Ĩ\":\"I\",\"Ī\":\"I\",\"Ĭ\":\"I\",\"Į\":\"I\",\"İ\":\"I\",\"ĩ\":\"i\",\"ī\":\"i\",\"ĭ\":\"i\",\"į\":\"i\",\"ı\":\"i\",\"Ĵ\":\"J\",\"ĵ\":\"j\",\"Ķ\":\"K\",\"ķ\":\"k\",\"ĸ\":\"k\",\"Ĺ\":\"L\",\"Ļ\":\"L\",\"Ľ\":\"L\",\"Ŀ\":\"L\",\"Ł\":\"L\",\"ĺ\":\"l\",\"ļ\":\"l\",\"ľ\":\"l\",\"ŀ\":\"l\",\"ł\":\"l\",\"Ń\":\"N\",\"Ņ\":\"N\",\"Ň\":\"N\",\"Ŋ\":\"N\",\"ń\":\"n\",\"ņ\":\"n\",\"ň\":\"n\",\"ŋ\":\"n\",\"Ō\":\"O\",\"Ŏ\":\"O\",\"Ő\":\"O\",\"ō\":\"o\",\"ŏ\":\"o\",\"ő\":\"o\",\"Ŕ\":\"R\",\"Ŗ\":\"R\",\"Ř\":\"R\",\"ŕ\":\"r\",\"ŗ\":\"r\",\"ř\":\"r\",\"Ś\":\"S\",\"Ŝ\":\"S\",\"Ş\":\"S\",\"Š\":\"S\",\"ś\":\"s\",\"ŝ\":\"s\",\"ş\":\"s\",\"š\":\"s\",\"Ţ\":\"T\",\"Ť\":\"T\",\"Ŧ\":\"T\",\"ţ\":\"t\",\"ť\":\"t\",\"ŧ\":\"t\",\"Ũ\":\"U\",\"Ū\":\"U\",\"Ŭ\":\"U\",\"Ů\":\"U\",\"Ű\":\"U\",\"Ų\":\"U\",\"ũ\":\"u\",\"ū\":\"u\",\"ŭ\":\"u\",\"ů\":\"u\",\"ű\":\"u\",\"ų\":\"u\",\"Ŵ\":\"W\",\"ŵ\":\"w\",\"Ŷ\":\"Y\",\"ŷ\":\"y\",\"Ÿ\":\"Y\",\"Ź\":\"Z\",\"Ż\":\"Z\",\"Ž\":\"Z\",\"ź\":\"z\",\"ż\":\"z\",\"ž\":\"z\",\"Ĳ\":\"IJ\",\"ĳ\":\"ij\",\"Œ\":\"Oe\",\"œ\":\"oe\",\"ŉ\":\"'n\",\"ſ\":\"s\"},xn={\"&\":\"&amp;\",\"<\":\"&lt;\",\">\":\"&gt;\",'\"':\"&quot;\",\"'\":\"&#39;\"},Cn={\"&amp;\":\"&\",\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&#39;\":\"'\"},Tn={\"\\\\\":\"\\\\\",\"'\":\"'\",\"\\n\":\"n\",\"\\r\":\"r\",\"\\u2028\":\"u2028\",\"\\u2029\":\"u2029\"},$n=parseFloat,kn=parseInt,An=\"object\"==typeof t&&t&&t.Object===Object&&t,En=\"object\"==typeof self&&self&&self.Object===Object&&self,Sn=An||En||Function(\"return this\")(),On=\"object\"==typeof e&&e&&!e.nodeType&&e,jn=On&&\"object\"==typeof r&&r&&!r.nodeType&&r,Nn=jn&&jn.exports===On,Dn=Nn&&An.process,In=function(){try{return Dn&&Dn.binding&&Dn.binding(\"util\")}catch(t){}}(),Ln=In&&In.isArrayBuffer,Rn=In&&In.isDate,Pn=In&&In.isMap,Fn=In&&In.isRegExp,qn=In&&In.isSet,Mn=In&&In.isTypedArray,Hn=E(\"length\"),Bn=S(wn),Un=S(xn),Wn=S(Cn),zn=function t(e){function n(t){if(eu(t)&&!dp(t)&&!(t instanceof _)){if(t instanceof i)return t;if(pl.call(t,\"__wrapped__\"))return Zo(t)}return new i(t)}function r(){}function i(t,e){this.__wrapped__=t,this.__actions__=[],this.__chain__=!!e,this.__index__=0,this.__values__=it}function _(t){this.__wrapped__=t,this.__actions__=[],this.__dir__=1,this.__filtered__=!1,this.__iteratees__=[],this.__takeCount__=Rt,this.__views__=[]}function S(){var t=new _(this.__wrapped__);return t.__actions__=Di(this.__actions__),t.__dir__=this.__dir__,t.__filtered__=this.__filtered__,t.__iteratees__=Di(this.__iteratees__),t.__takeCount__=this.__takeCount__,t.__views__=Di(this.__views__),t}function G(){if(this.__filtered__){var t=new _(this);t.__dir__=-1,t.__filtered__=!0}else t=this.clone(),t.__dir__*=-1;return t}function et(){var t=this.__wrapped__.value(),e=this.__dir__,n=dp(t),r=e<0,i=n?t.length:0,o=Co(0,i,this.__views__),a=o.start,s=o.end,u=s-a,c=r?s:a-1,l=this.__iteratees__,f=l.length,p=0,d=Bl(u,this.__takeCount__);if(!n||!r&&i==u&&d==u)return hi(t,this.__actions__);var h=[];t:for(;u--&&p<d;){c+=e;for(var v=-1,g=t[c];++v<f;){var m=l[v],y=m.iteratee,b=m.type,_=y(g);if(b==jt)g=_;else if(!_){if(b==Ot)continue t;break t}}h[p++]=g}return h}function nt(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Pe(){this.__data__=Zl?Zl(null):{},this.size=0}function Ke(t){var e=this.has(t)&&delete this.__data__[t];return this.size-=e?1:0,e}function Je(t){var e=this.__data__;if(Zl){var n=e[t];return n===ut?it:n}return pl.call(e,t)?e[t]:it}function Qe(t){var e=this.__data__;return Zl?e[t]!==it:pl.call(e,t)}function Ge(t,e){var n=this.__data__;return this.size+=this.has(t)?0:1,n[t]=Zl&&e===it?ut:e,this}function Ze(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function Ye(){this.__data__=[],this.size=0}function tn(t){var e=this.__data__,n=Vn(e,t);return!(n<0)&&(n==e.length-1?e.pop():kl.call(e,n,1),--this.size,!0)}function en(t){var e=this.__data__,n=Vn(e,t);return n<0?it:e[n][1]}function nn(t){return Vn(this.__data__,t)>-1}function rn(t,e){var n=this.__data__,r=Vn(n,t);return r<0?(++this.size,n.push([t,e])):n[r][1]=e,this}function on(t){var e=-1,n=null==t?0:t.length;for(this.clear();++e<n;){var r=t[e];this.set(r[0],r[1])}}function an(){this.size=0,this.__data__={hash:new nt,map:new(Kl||Ze),string:new nt}}function sn(t){var e=bo(this,t).delete(t);return this.size-=e?1:0,e}function un(t){return bo(this,t).get(t)}function cn(t){return bo(this,t).has(t)}function ln(t,e){var n=bo(this,t),r=n.size;return n.set(t,e),this.size+=n.size==r?0:1,this}function dn(t){var e=-1,n=null==t?0:t.length;for(this.__data__=new on;++e<n;)this.add(t[e])}function hn(t){return this.__data__.set(t,ut),this}function vn(t){return this.__data__.has(t)}function gn(t){var e=this.__data__=new Ze(t);this.size=e.size}function wn(){this.__data__=new Ze,this.size=0}function xn(t){var e=this.__data__,n=e.delete(t);return this.size=e.size,n}function Cn(t){return this.__data__.get(t)}function Tn(t){return this.__data__.has(t)}function An(t,e){var n=this.__data__;if(n instanceof Ze){var r=n.__data__;if(!Kl||r.length<ot-1)return r.push([t,e]),this.size=++n.size,this;n=this.__data__=new on(r)}return n.set(t,e),this.size=n.size,this}function En(t,e){var n=dp(t),r=!n&&pp(t),i=!n&&!r&&vp(t),o=!n&&!r&&!i&&_p(t),a=n||r||i||o,s=a?D(t.length,ol):[],u=s.length;for(var c in t)!e&&!pl.call(t,c)||a&&(\"length\"==c||i&&(\"offset\"==c||\"parent\"==c)||o&&(\"buffer\"==c||\"byteLength\"==c||\"byteOffset\"==c)||jo(c,u))||s.push(c);return s}function On(t){var e=t.length;return e?t[Jr(0,e-1)]:it}function jn(t,e){return Ko(Di(t),Zn(e,0,t.length))}function Dn(t){return Ko(Di(t))}function In(t,e,n){(n===it||Hs(t[e],n))&&(n!==it||e in t)||Qn(t,e,n)}function Hn(t,e,n){var r=t[e];pl.call(t,e)&&Hs(r,n)&&(n!==it||e in t)||Qn(t,e,n)}function Vn(t,e){for(var n=t.length;n--;)if(Hs(t[n][0],e))return n;return-1}function Xn(t,e,n,r){return ff(t,function(t,i,o){e(r,t,n(t),o)}),r}function Kn(t,e){return t&&Ii(e,Ru(e),t)}function Jn(t,e){return t&&Ii(e,Pu(e),t)}function Qn(t,e,n){\"__proto__\"==e&&Ol?Ol(t,e,{configurable:!0,enumerable:!0,value:n,writable:!0}):t[e]=n}function Gn(t,e){for(var n=-1,r=e.length,i=Zc(r),o=null==t;++n<r;)i[n]=o?it:Du(t,e[n]);return i}function Zn(t,e,n){return t===t&&(n!==it&&(t=t<=n?t:n),e!==it&&(t=t>=e?t:e)),t}function Yn(t,e,n,r,i,o){var a,s=e&ft,u=e&pt,l=e&dt;if(n&&(a=i?n(t,r,i,o):n(t)),a!==it)return a;if(!tu(t))return t;var f=dp(t);if(f){if(a=ko(t),!s)return Di(t,a)}else{var p=Cf(t),d=p==Xt||p==Kt;if(vp(t))return wi(t,s);if(p==Zt||p==Mt||d&&!i){if(a=u||d?{}:Ao(t),!s)return u?Ri(t,Jn(a,t)):Li(t,Kn(a,t))}else{if(!_n[p])return i?t:{};a=Eo(t,p,Yn,s)}}o||(o=new gn);var h=o.get(t);if(h)return h;o.set(t,a);var v=l?u?vo:ho:u?Pu:Ru,g=f?it:v(t);return c(g||t,function(r,i){g&&(i=r,r=t[i]),Hn(a,i,Yn(r,e,n,i,t,o))}),a}function tr(t){var e=Ru(t);return function(n){return er(n,t,e)}}function er(t,e,n){var r=n.length;if(null==t)return!r;for(t=rl(t);r--;){var i=n[r],o=e[i],a=t[i];if(a===it&&!(i in t)||!o(a))return!1}return!0}function nr(t,e,n){if(\"function\"!=typeof t)throw new al(st);return kf(function(){t.apply(it,n)},e)}function rr(t,e,n,r){var i=-1,o=d,a=!0,s=t.length,u=[],c=e.length;if(!s)return u;n&&(e=v(e,L(n))),r?(o=h,a=!1):e.length>=ot&&(o=P,a=!1,e=new dn(e));t:for(;++i<s;){var l=t[i],f=null==n?l:n(l);if(l=r||0!==l?l:0,a&&f===f){for(var p=c;p--;)if(e[p]===f)continue t;u.push(l)}else o(e,f,r)||u.push(l)}return u}function ir(t,e){var n=!0;return ff(t,function(t,r,i){return n=!!e(t,r,i)}),n}function or(t,e,n){for(var r=-1,i=t.length;++r<i;){var o=t[r],a=e(o);if(null!=a&&(s===it?a===a&&!pu(a):n(a,s)))var s=a,u=o}return u}function ar(t,e,n,r){var i=t.length;for(n=yu(n),n<0&&(n=-n>i?0:i+n),r=r===it||r>i?i:yu(r),r<0&&(r+=i),r=n>r?0:bu(r);n<r;)t[n++]=e;return t}function sr(t,e){var n=[];return ff(t,function(t,r,i){e(t,r,i)&&n.push(t)}),n}function ur(t,e,n,r,i){var o=-1,a=t.length;for(n||(n=Oo),i||(i=[]);++o<a;){var s=t[o];e>0&&n(s)?e>1?ur(s,e-1,n,r,i):g(i,s):r||(i[i.length]=s)}return i}function cr(t,e){return t&&df(t,e,Ru)}function lr(t,e){return t&&hf(t,e,Ru)}function fr(t,e){return p(e,function(e){return Gs(t[e])})}function pr(t,e){e=bi(e,t);for(var n=0,r=e.length;null!=t&&n<r;)t=t[Jo(e[n++])];return n&&n==r?t:it}function dr(t,e,n){var r=e(t);return dp(t)?r:g(r,n(t))}function hr(t){return null==t?t===it?ie:Gt:Sl&&Sl in rl(t)?xo(t):Bo(t)}function vr(t,e){return t>e}function gr(t,e){return null!=t&&pl.call(t,e)}function mr(t,e){return null!=t&&e in rl(t)}function yr(t,e,n){return t>=Bl(e,n)&&t<Hl(e,n)}function br(t,e,n){for(var r=n?h:d,i=t[0].length,o=t.length,a=o,s=Zc(o),u=1/0,c=[];a--;){var l=t[a];a&&e&&(l=v(l,L(e))),u=Bl(l.length,u),s[a]=!n&&(e||i>=120&&l.length>=120)?new dn(a&&l):it}l=t[0];var f=-1,p=s[0];t:for(;++f<i&&c.length<u;){var g=l[f],m=e?e(g):g;if(g=n||0!==g?g:0,!(p?P(p,m):r(c,m,n))){for(a=o;--a;){var y=s[a];if(!(y?P(y,m):r(t[a],m,n)))continue t}p&&p.push(m),c.push(g)}}return c}function _r(t,e,n,r){return cr(t,function(t,i,o){e(r,n(t),i,o)}),r}function wr(t,e,n){e=bi(e,t),t=Wo(t,e);var r=null==t?t:t[Jo(ma(e))];return null==r?it:s(r,t,n)}function xr(t){return eu(t)&&hr(t)==Mt}function Cr(t){return eu(t)&&hr(t)==se}function Tr(t){return eu(t)&&hr(t)==Wt}function $r(t,e,n,r,i){return t===e||(null==t||null==e||!eu(t)&&!eu(e)?t!==t&&e!==e:kr(t,e,n,r,$r,i))}function kr(t,e,n,r,i,o){var a=dp(t),s=dp(e),u=a?Ht:Cf(t),c=s?Ht:Cf(e);u=u==Mt?Zt:u,c=c==Mt?Zt:c;var l=u==Zt,f=c==Zt,p=u==c;if(p&&vp(t)){if(!vp(e))return!1;a=!0,l=!1}if(p&&!l)return o||(o=new gn),a||_p(t)?co(t,e,n,r,i,o):lo(t,e,u,n,r,i,o);if(!(n&ht)){var d=l&&pl.call(t,\"__wrapped__\"),h=f&&pl.call(e,\"__wrapped__\");if(d||h){var v=d?t.value():t,g=h?e.value():e;return o||(o=new gn),i(v,g,n,r,o)}}return!!p&&(o||(o=new gn),fo(t,e,n,r,i,o))}function Ar(t){return eu(t)&&Cf(t)==Jt}function Er(t,e,n,r){var i=n.length,o=i,a=!r;if(null==t)return!o;for(t=rl(t);i--;){var s=n[i];if(a&&s[2]?s[1]!==t[s[0]]:!(s[0]in t))return!1}for(;++i<o;){s=n[i];var u=s[0],c=t[u],l=s[1];if(a&&s[2]){if(c===it&&!(u in t))return!1}else{var f=new gn;if(r)var p=r(c,l,u,t,e,f);if(!(p===it?$r(l,c,ht|vt,r,f):p))return!1}}return!0}function Sr(t){return!(!tu(t)||Ro(t))&&(Gs(t)?yl:Be).test(Qo(t))}function Or(t){return eu(t)&&hr(t)==te}function jr(t){return eu(t)&&Cf(t)==ee}function Nr(t){return eu(t)&&Ys(t.length)&&!!bn[hr(t)]}function Dr(t){return\"function\"==typeof t?t:null==t?kc:\"object\"==typeof t?dp(t)?qr(t[0],t[1]):Fr(t):Ic(t)}function Ir(t){if(!Po(t))return Ml(t);var e=[];for(var n in rl(t))pl.call(t,n)&&\"constructor\"!=n&&e.push(n);return e}function Lr(t){if(!tu(t))return Ho(t);var e=Po(t),n=[];for(var r in t)(\"constructor\"!=r||!e&&pl.call(t,r))&&n.push(r);return n}function Rr(t,e){return t<e}function Pr(t,e){var n=-1,r=Bs(t)?Zc(t.length):[];return ff(t,function(t,i,o){r[++n]=e(t,i,o)}),r}function Fr(t){var e=_o(t);return 1==e.length&&e[0][2]?qo(e[0][0],e[0][1]):function(n){return n===t||Er(n,t,e)}}function qr(t,e){return Do(t)&&Fo(e)?qo(Jo(t),e):function(n){var r=Du(n,t);return r===it&&r===e?Lu(n,t):$r(e,r,ht|vt)}}function Mr(t,e,n,r,i){t!==e&&df(e,function(o,a){if(tu(o))i||(i=new gn),Hr(t,e,a,n,Mr,r,i);else{var s=r?r(t[a],o,a+\"\",t,e,i):it;s===it&&(s=o),In(t,a,s)}},Pu)}function Hr(t,e,n,r,i,o,a){var s=t[n],u=e[n],c=a.get(u);if(c)return void In(t,n,c);var l=o?o(s,u,n+\"\",t,e,a):it,f=l===it;if(f){var p=dp(u),d=!p&&vp(u),h=!p&&!d&&_p(u);l=u,p||d||h?dp(s)?l=s:Us(s)?l=Di(s):d?(f=!1,l=wi(u,!0)):h?(f=!1,l=Ei(u,!0)):l=[]:cu(u)||pp(u)?(l=s,pp(s)?l=wu(s):(!tu(s)||r&&Gs(s))&&(l=Ao(u))):f=!1}f&&(a.set(u,l),i(l,u,r,o,a),a.delete(u)),In(t,n,l)}function Br(t,e){var n=t.length;if(n)return e+=e<0?n:0,jo(e,n)?t[e]:it}function Ur(t,e,n){var r=-1;return e=v(e.length?e:[kc],L(yo())),j(Pr(t,function(t,n,i){return{criteria:v(e,function(e){return e(t)}),index:++r,value:t}}),function(t,e){return Oi(t,e,n)})}function Wr(t,e){return zr(t,e,function(e,n){return Lu(t,n)})}function zr(t,e,n){for(var r=-1,i=e.length,o={};++r<i;){var a=e[r],s=pr(t,a);n(s,a)&&ei(o,bi(a,t),s)}return o}function Vr(t){return function(e){return pr(e,t)}}function Xr(t,e,n,r){var i=r?$:T,o=-1,a=e.length,s=t;for(t===e&&(e=Di(e)),n&&(s=v(t,L(n)));++o<a;)for(var u=0,c=e[o],l=n?n(c):c;(u=i(s,l,u,r))>-1;)s!==t&&kl.call(s,u,1),kl.call(t,u,1);return t}function Kr(t,e){for(var n=t?e.length:0,r=n-1;n--;){var i=e[n];if(n==r||i!==o){var o=i;jo(i)?kl.call(t,i,1):fi(t,i)}}return t}function Jr(t,e){return t+Ll(zl()*(e-t+1))}function Qr(t,e,n,r){for(var i=-1,o=Hl(Il((e-t)/(n||1)),0),a=Zc(o);o--;)a[r?o:++i]=t,t+=n;return a}function Gr(t,e){var n=\"\";if(!t||e<1||e>Dt)return n;do{e%2&&(n+=t),(e=Ll(e/2))&&(t+=t)}while(e);return n}function Zr(t,e){return Af(Uo(t,e,kc),t+\"\")}function Yr(t){return On(Ju(t))}function ti(t,e){var n=Ju(t);return Ko(n,Zn(e,0,n.length))}function ei(t,e,n,r){if(!tu(t))return t;e=bi(e,t);for(var i=-1,o=e.length,a=o-1,s=t;null!=s&&++i<o;){var u=Jo(e[i]),c=n;if(i!=a){var l=s[u];c=r?r(l,u,s):it,c===it&&(c=tu(l)?l:jo(e[i+1])?[]:{})}Hn(s,u,c),s=s[u]}return t}function ni(t){return Ko(Ju(t))}function ri(t,e,n){var r=-1,i=t.length;e<0&&(e=-e>i?0:i+e),n=n>i?i:n,n<0&&(n+=i),i=e>n?0:n-e>>>0,e>>>=0;for(var o=Zc(i);++r<i;)o[r]=t[r+e];return o}function ii(t,e){var n;return ff(t,function(t,r,i){return!(n=e(t,r,i))}),!!n}function oi(t,e,n){var r=0,i=null==t?r:t.length;if(\"number\"==typeof e&&e===e&&i<=Ft){for(;r<i;){var o=r+i>>>1,a=t[o];null!==a&&!pu(a)&&(n?a<=e:a<e)?r=o+1:i=o}return i}return ai(t,e,kc,n)}function ai(t,e,n,r){e=n(e);for(var i=0,o=null==t?0:t.length,a=e!==e,s=null===e,u=pu(e),c=e===it;i<o;){var l=Ll((i+o)/2),f=n(t[l]),p=f!==it,d=null===f,h=f===f,v=pu(f);if(a)var g=r||h;else g=c?h&&(r||p):s?h&&p&&(r||!d):u?h&&p&&!d&&(r||!v):!d&&!v&&(r?f<=e:f<e);g?i=l+1:o=l}return Bl(o,Pt)}function si(t,e){for(var n=-1,r=t.length,i=0,o=[];++n<r;){var a=t[n],s=e?e(a):a;if(!n||!Hs(s,u)){var u=s;o[i++]=0===a?0:a}}return o}function ui(t){return\"number\"==typeof t?t:pu(t)?Lt:+t}function ci(t){if(\"string\"==typeof t)return t;if(dp(t))return v(t,ci)+\"\";if(pu(t))return cf?cf.call(t):\"\";var e=t+\"\";return\"0\"==e&&1/t==-Nt?\"-0\":e}function li(t,e,n){var r=-1,i=d,o=t.length,a=!0,s=[],u=s;if(n)a=!1,i=h;else if(o>=ot){var c=e?null:bf(t);if(c)return J(c);a=!1,i=P,u=new dn}else u=e?[]:s;t:for(;++r<o;){var l=t[r],f=e?e(l):l;if(l=n||0!==l?l:0,a&&f===f){for(var p=u.length;p--;)if(u[p]===f)continue t;e&&u.push(f),s.push(l)}else i(u,f,n)||(u!==s&&u.push(f),s.push(l))}return s}function fi(t,e){return e=bi(e,t),null==(t=Wo(t,e))||delete t[Jo(ma(e))]}function pi(t,e,n,r){return ei(t,e,n(pr(t,e)),r)}function di(t,e,n,r){for(var i=t.length,o=r?i:-1;(r?o--:++o<i)&&e(t[o],o,t););return n?ri(t,r?0:o,r?o+1:i):ri(t,r?o+1:0,r?i:o)}function hi(t,e){var n=t;return n instanceof _&&(n=n.value()),m(e,function(t,e){return e.func.apply(e.thisArg,g([t],e.args))},n)}function vi(t,e,n){var r=t.length;if(r<2)return r?li(t[0]):[];for(var i=-1,o=Zc(r);++i<r;)for(var a=t[i],s=-1;++s<r;)s!=i&&(o[i]=rr(o[i]||a,t[s],e,n));return li(ur(o,1),e,n)}function gi(t,e,n){for(var r=-1,i=t.length,o=e.length,a={};++r<i;){var s=r<o?e[r]:it;n(a,t[r],s)}return a}function mi(t){return Us(t)?t:[]}function yi(t){return\"function\"==typeof t?t:kc}function bi(t,e){return dp(t)?t:Do(t,e)?[t]:Ef(Cu(t))}function _i(t,e,n){var r=t.length;return n=n===it?r:n,!e&&n>=r?t:ri(t,e,n)}function wi(t,e){if(e)return t.slice();var n=t.length,r=xl?xl(n):new t.constructor(n);return t.copy(r),r}function xi(t){var e=new t.constructor(t.byteLength);return new wl(e).set(new wl(t)),e}function Ci(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.byteLength)}function Ti(t,e,n){return m(e?n(V(t),ft):V(t),o,new t.constructor)}function $i(t){var e=new t.constructor(t.source,qe.exec(t));return e.lastIndex=t.lastIndex,e}function ki(t,e,n){return m(e?n(J(t),ft):J(t),a,new t.constructor)}function Ai(t){return uf?rl(uf.call(t)):{}}function Ei(t,e){var n=e?xi(t.buffer):t.buffer;return new t.constructor(n,t.byteOffset,t.length)}function Si(t,e){if(t!==e){var n=t!==it,r=null===t,i=t===t,o=pu(t),a=e!==it,s=null===e,u=e===e,c=pu(e);if(!s&&!c&&!o&&t>e||o&&a&&u&&!s&&!c||r&&a&&u||!n&&u||!i)return 1;if(!r&&!o&&!c&&t<e||c&&n&&i&&!r&&!o||s&&n&&i||!a&&i||!u)return-1}return 0}function Oi(t,e,n){for(var r=-1,i=t.criteria,o=e.criteria,a=i.length,s=n.length;++r<a;){var u=Si(i[r],o[r]);if(u){if(r>=s)return u;return u*(\"desc\"==n[r]?-1:1)}}return t.index-e.index}function ji(t,e,n,r){for(var i=-1,o=t.length,a=n.length,s=-1,u=e.length,c=Hl(o-a,0),l=Zc(u+c),f=!r;++s<u;)l[s]=e[s];for(;++i<a;)(f||i<o)&&(l[n[i]]=t[i]);for(;c--;)l[s++]=t[i++];return l}function Ni(t,e,n,r){for(var i=-1,o=t.length,a=-1,s=n.length,u=-1,c=e.length,l=Hl(o-s,0),f=Zc(l+c),p=!r;++i<l;)f[i]=t[i];for(var d=i;++u<c;)f[d+u]=e[u];for(;++a<s;)(p||i<o)&&(f[d+n[a]]=t[i++]);return f}function Di(t,e){var n=-1,r=t.length;for(e||(e=Zc(r));++n<r;)e[n]=t[n];return e}function Ii(t,e,n,r){var i=!n;n||(n={});for(var o=-1,a=e.length;++o<a;){var s=e[o],u=r?r(n[s],t[s],s,n,t):it;u===it&&(u=t[s]),i?Qn(n,s,u):Hn(n,s,u)}return n}function Li(t,e){return Ii(t,wf(t),e)}function Ri(t,e){return Ii(t,xf(t),e)}function Pi(t,e){return function(n,r){var i=dp(n)?u:Xn,o=e?e():{};return i(n,t,yo(r,2),o)}}function Fi(t){return Zr(function(e,n){var r=-1,i=n.length,o=i>1?n[i-1]:it,a=i>2?n[2]:it;for(o=t.length>3&&\"function\"==typeof o?(i--,o):it,a&&No(n[0],n[1],a)&&(o=i<3?it:o,i=1),e=rl(e);++r<i;){var s=n[r];s&&t(e,s,r,o)}return e})}function qi(t,e){return function(n,r){if(null==n)return n;if(!Bs(n))return t(n,r);for(var i=n.length,o=e?i:-1,a=rl(n);(e?o--:++o<i)&&!1!==r(a[o],o,a););return n}}function Mi(t){return function(e,n,r){for(var i=-1,o=rl(e),a=r(e),s=a.length;s--;){var u=a[t?s:++i];if(!1===n(o[u],u,o))break}return e}}function Hi(t,e,n){function r(){return(this&&this!==Sn&&this instanceof r?o:t).apply(i?n:this,arguments)}var i=e&gt,o=Wi(t);return r}function Bi(t){return function(e){e=Cu(e);var n=U(e)?tt(e):it,r=n?n[0]:e.charAt(0),i=n?_i(n,1).join(\"\"):e.slice(1);return r[t]()+i}}function Ui(t){return function(e){return m(wc(ec(e).replace(fn,\"\")),t,\"\")}}function Wi(t){return function(){var e=arguments;switch(e.length){case 0:return new t;case 1:return new t(e[0]);case 2:return new t(e[0],e[1]);case 3:return new t(e[0],e[1],e[2]);case 4:return new t(e[0],e[1],e[2],e[3]);case 5:return new t(e[0],e[1],e[2],e[3],e[4]);case 6:return new t(e[0],e[1],e[2],e[3],e[4],e[5]);case 7:return new t(e[0],e[1],e[2],e[3],e[4],e[5],e[6])}var n=lf(t.prototype),r=t.apply(n,e);return tu(r)?r:n}}function zi(t,e,n){function r(){for(var o=arguments.length,a=Zc(o),u=o,c=mo(r);u--;)a[u]=arguments[u];var l=o<3&&a[0]!==c&&a[o-1]!==c?[]:K(a,c);return(o-=l.length)<n?no(t,e,Ki,r.placeholder,it,a,l,it,it,n-o):s(this&&this!==Sn&&this instanceof r?i:t,this,a)}var i=Wi(t);return r}function Vi(t){return function(e,n,r){var i=rl(e);if(!Bs(e)){var o=yo(n,3);e=Ru(e),n=function(t){return o(i[t],t,i)}}var a=t(e,n,r);return a>-1?i[o?e[a]:a]:it}}function Xi(t){return po(function(e){var n=e.length,r=n,o=i.prototype.thru;for(t&&e.reverse();r--;){var a=e[r];if(\"function\"!=typeof a)throw new al(st);if(o&&!s&&\"wrapper\"==go(a))var s=new i([],!0)}for(r=s?r:n;++r<n;){a=e[r];var u=go(a),c=\"wrapper\"==u?_f(a):it;s=c&&Lo(c[0])&&c[1]==(Ct|bt|wt|Tt)&&!c[4].length&&1==c[9]?s[go(c[0])].apply(s,c[3]):1==a.length&&Lo(a)?s[u]():s.thru(a)}return function(){var t=arguments,r=t[0];if(s&&1==t.length&&dp(r))return s.plant(r).value();for(var i=0,o=n?e[i].apply(this,t):r;++i<n;)o=e[i].call(this,o);return o}})}function Ki(t,e,n,r,i,o,a,s,u,c){function l(){for(var m=arguments.length,y=Zc(m),b=m;b--;)y[b]=arguments[b];if(h)var _=mo(l),w=M(y,_);if(r&&(y=ji(y,r,i,h)),o&&(y=Ni(y,o,a,h)),m-=w,h&&m<c){var x=K(y,_);return no(t,e,Ki,l.placeholder,n,y,x,s,u,c-m)}var C=p?n:this,T=d?C[t]:t;return m=y.length,s?y=zo(y,s):v&&m>1&&y.reverse(),f&&u<m&&(y.length=u),this&&this!==Sn&&this instanceof l&&(T=g||Wi(T)),T.apply(C,y)}var f=e&Ct,p=e&gt,d=e&mt,h=e&(bt|_t),v=e&$t,g=d?it:Wi(t);return l}function Ji(t,e){return function(n,r){return _r(n,t,e(r),{})}}function Qi(t,e){return function(n,r){var i;if(n===it&&r===it)return e;if(n!==it&&(i=n),r!==it){if(i===it)return r;\"string\"==typeof n||\"string\"==typeof r?(n=ci(n),r=ci(r)):(n=ui(n),r=ui(r)),i=t(n,r)}return i}}function Gi(t){return po(function(e){return e=v(e,L(yo())),Zr(function(n){var r=this;return t(e,function(t){return s(t,r,n)})})})}function Zi(t,e){e=e===it?\" \":ci(e);var n=e.length;if(n<2)return n?Gr(e,t):e;var r=Gr(e,Il(t/Y(e)));return U(e)?_i(tt(r),0,t).join(\"\"):r.slice(0,t)}function Yi(t,e,n,r){function i(){for(var e=-1,u=arguments.length,c=-1,l=r.length,f=Zc(l+u),p=this&&this!==Sn&&this instanceof i?a:t;++c<l;)f[c]=r[c];for(;u--;)f[c++]=arguments[++e];return s(p,o?n:this,f)}var o=e&gt,a=Wi(t);return i}function to(t){return function(e,n,r){return r&&\"number\"!=typeof r&&No(e,n,r)&&(n=r=it),e=mu(e),n===it?(n=e,e=0):n=mu(n),r=r===it?e<n?1:-1:mu(r),Qr(e,n,r,t)}}function eo(t){return function(e,n){return\"string\"==typeof e&&\"string\"==typeof n||(e=_u(e),n=_u(n)),t(e,n)}}function no(t,e,n,r,i,o,a,s,u,c){var l=e&bt,f=l?a:it,p=l?it:a,d=l?o:it,h=l?it:o;e|=l?wt:xt,(e&=~(l?xt:wt))&yt||(e&=~(gt|mt));var v=[t,e,i,d,f,h,p,s,u,c],g=n.apply(it,v);return Lo(t)&&$f(g,v),g.placeholder=r,Vo(g,t,e)}function ro(t){var e=nl[t];return function(t,n){if(t=_u(t),n=null==n?0:Bl(yu(n),292)){var r=(Cu(t)+\"e\").split(\"e\");return r=(Cu(e(r[0]+\"e\"+(+r[1]+n)))+\"e\").split(\"e\"),+(r[0]+\"e\"+(+r[1]-n))}return e(t)}}function io(t){return function(e){var n=Cf(e);return n==Jt?V(e):n==ee?Q(e):I(e,t(e))}}function oo(t,e,n,r,i,o,a,s){var u=e&mt;if(!u&&\"function\"!=typeof t)throw new al(st);var c=r?r.length:0;if(c||(e&=~(wt|xt),r=i=it),a=a===it?a:Hl(yu(a),0),s=s===it?s:yu(s),c-=i?i.length:0,e&xt){var l=r,f=i;r=i=it}var p=u?it:_f(t),d=[t,e,n,r,i,l,f,o,a,s];if(p&&Mo(d,p),t=d[0],e=d[1],n=d[2],r=d[3],i=d[4],s=d[9]=d[9]===it?u?0:t.length:Hl(d[9]-c,0),!s&&e&(bt|_t)&&(e&=~(bt|_t)),e&&e!=gt)h=e==bt||e==_t?zi(t,e,s):e!=wt&&e!=(gt|wt)||i.length?Ki.apply(it,d):Yi(t,e,n,r);else var h=Hi(t,e,n);return Vo((p?vf:$f)(h,d),t,e)}function ao(t,e,n,r){return t===it||Hs(t,cl[n])&&!pl.call(r,n)?e:t}function so(t,e,n,r,i,o){return tu(t)&&tu(e)&&(o.set(e,t),Mr(t,e,it,so,o),o.delete(e)),t}function uo(t){return cu(t)?it:t}function co(t,e,n,r,i,o){var a=n&ht,s=t.length,u=e.length;if(s!=u&&!(a&&u>s))return!1;var c=o.get(t);if(c&&o.get(e))return c==e;var l=-1,f=!0,p=n&vt?new dn:it;for(o.set(t,e),o.set(e,t);++l<s;){var d=t[l],h=e[l];if(r)var v=a?r(h,d,l,e,t,o):r(d,h,l,t,e,o);if(v!==it){if(v)continue;f=!1;break}if(p){if(!b(e,function(t,e){if(!P(p,e)&&(d===t||i(d,t,n,r,o)))return p.push(e)})){f=!1;break}}else if(d!==h&&!i(d,h,n,r,o)){f=!1;break}}return o.delete(t),o.delete(e),f}function lo(t,e,n,r,i,o,a){switch(n){case ue:if(t.byteLength!=e.byteLength||t.byteOffset!=e.byteOffset)return!1;t=t.buffer,e=e.buffer;case se:return!(t.byteLength!=e.byteLength||!o(new wl(t),new wl(e)));case Ut:case Wt:case Qt:return Hs(+t,+e);case Vt:return t.name==e.name&&t.message==e.message;case te:case ne:return t==e+\"\";case Jt:var s=V;case ee:var u=r&ht;if(s||(s=J),t.size!=e.size&&!u)return!1;var c=a.get(t);if(c)return c==e;r|=vt,a.set(t,e);var l=co(s(t),s(e),r,i,o,a);return a.delete(t),l;case re:if(uf)return uf.call(t)==uf.call(e)}return!1}function fo(t,e,n,r,i,o){var a=n&ht,s=ho(t),u=s.length;if(u!=ho(e).length&&!a)return!1;for(var c=u;c--;){var l=s[c];if(!(a?l in e:pl.call(e,l)))return!1}var f=o.get(t);if(f&&o.get(e))return f==e;var p=!0;o.set(t,e),o.set(e,t);for(var d=a;++c<u;){l=s[c];var h=t[l],v=e[l];if(r)var g=a?r(v,h,l,e,t,o):r(h,v,l,t,e,o);if(!(g===it?h===v||i(h,v,n,r,o):g)){p=!1;break}d||(d=\"constructor\"==l)}if(p&&!d){var m=t.constructor,y=e.constructor;m!=y&&\"constructor\"in t&&\"constructor\"in e&&!(\"function\"==typeof m&&m instanceof m&&\"function\"==typeof y&&y instanceof y)&&(p=!1)}return o.delete(t),o.delete(e),p}function po(t){return Af(Uo(t,it,ca),t+\"\")}function ho(t){return dr(t,Ru,wf)}function vo(t){return dr(t,Pu,xf)}function go(t){for(var e=t.name+\"\",n=tf[e],r=pl.call(tf,e)?n.length:0;r--;){var i=n[r],o=i.func;if(null==o||o==t)return i.name}return e}function mo(t){return(pl.call(n,\"placeholder\")?n:t).placeholder}function yo(){var t=n.iteratee||Ac;return t=t===Ac?Dr:t,arguments.length?t(arguments[0],arguments[1]):t}function bo(t,e){var n=t.__data__;return Io(e)?n[\"string\"==typeof e?\"string\":\"hash\"]:n.map}function _o(t){for(var e=Ru(t),n=e.length;n--;){var r=e[n],i=t[r];e[n]=[r,i,Fo(i)]}return e}function wo(t,e){var n=B(t,e);return Sr(n)?n:it}function xo(t){var e=pl.call(t,Sl),n=t[Sl];try{t[Sl]=it;var r=!0}catch(t){}var i=vl.call(t);return r&&(e?t[Sl]=n:delete t[Sl]),i}function Co(t,e,n){for(var r=-1,i=n.length;++r<i;){var o=n[r],a=o.size;switch(o.type){case\"drop\":t+=a;break;case\"dropRight\":e-=a;break;case\"take\":e=Bl(e,t+a);break;case\"takeRight\":t=Hl(t,e-a)}}return{start:t,end:e}}function To(t){var e=t.match(Le);return e?e[1].split(Re):[]}function $o(t,e,n){e=bi(e,t);for(var r=-1,i=e.length,o=!1;++r<i;){var a=Jo(e[r]);if(!(o=null!=t&&n(t,a)))break;t=t[a]}return o||++r!=i?o:!!(i=null==t?0:t.length)&&Ys(i)&&jo(a,i)&&(dp(t)||pp(t))}function ko(t){var e=t.length,n=t.constructor(e);return e&&\"string\"==typeof t[0]&&pl.call(t,\"index\")&&(n.index=t.index,n.input=t.input),n}function Ao(t){return\"function\"!=typeof t.constructor||Po(t)?{}:lf(Cl(t))}function Eo(t,e,n,r){var i=t.constructor;switch(e){case se:return xi(t);case Ut:case Wt:return new i(+t);case ue:return Ci(t,r);case ce:case le:case fe:case pe:case de:case he:case ve:case ge:case me:return Ei(t,r);case Jt:return Ti(t,r,n);case Qt:case ne:return new i(t);case te:return $i(t);case ee:return ki(t,r,n);case re:return Ai(t)}}function So(t,e){var n=e.length;if(!n)return t;var r=n-1;return e[r]=(n>1?\"& \":\"\")+e[r],e=e.join(n>2?\", \":\" \"),t.replace(Ie,\"{\\n/* [wrapped with \"+e+\"] */\\n\")}function Oo(t){return dp(t)||pp(t)||!!(Al&&t&&t[Al])}function jo(t,e){return!!(e=null==e?Dt:e)&&(\"number\"==typeof t||We.test(t))&&t>-1&&t%1==0&&t<e}function No(t,e,n){if(!tu(n))return!1;var r=typeof e;return!!(\"number\"==r?Bs(n)&&jo(e,n.length):\"string\"==r&&e in n)&&Hs(n[e],t)}function Do(t,e){if(dp(t))return!1;var n=typeof t;return!(\"number\"!=n&&\"symbol\"!=n&&\"boolean\"!=n&&null!=t&&!pu(t))||(Ae.test(t)||!ke.test(t)||null!=e&&t in rl(e))}function Io(t){var e=typeof t;return\"string\"==e||\"number\"==e||\"symbol\"==e||\"boolean\"==e?\"__proto__\"!==t:null===t}function Lo(t){var e=go(t),r=n[e];if(\"function\"!=typeof r||!(e in _.prototype))return!1;if(t===r)return!0;var i=_f(r);return!!i&&t===i[0]}function Ro(t){return!!hl&&hl in t}function Po(t){var e=t&&t.constructor;return t===(\"function\"==typeof e&&e.prototype||cl)}function Fo(t){return t===t&&!tu(t)}function qo(t,e){return function(n){return null!=n&&(n[t]===e&&(e!==it||t in rl(n)))}}function Mo(t,e){var n=t[1],r=e[1],i=n|r,o=i<(gt|mt|Ct),a=r==Ct&&n==bt||r==Ct&&n==Tt&&t[7].length<=e[8]||r==(Ct|Tt)&&e[7].length<=e[8]&&n==bt;if(!o&&!a)return t;r&gt&&(t[2]=e[2],i|=n&gt?0:yt);var s=e[3];if(s){var u=t[3];t[3]=u?ji(u,s,e[4]):s,t[4]=u?K(t[3],lt):e[4]}return s=e[5],s&&(u=t[5],t[5]=u?Ni(u,s,e[6]):s,t[6]=u?K(t[5],lt):e[6]),s=e[7],s&&(t[7]=s),r&Ct&&(t[8]=null==t[8]?e[8]:Bl(t[8],e[8])),null==t[9]&&(t[9]=e[9]),t[0]=e[0],t[1]=i,t}function Ho(t){var e=[];if(null!=t)for(var n in rl(t))e.push(n);return e}function Bo(t){return vl.call(t)}function Uo(t,e,n){return e=Hl(e===it?t.length-1:e,0),function(){for(var r=arguments,i=-1,o=Hl(r.length-e,0),a=Zc(o);++i<o;)a[i]=r[e+i];i=-1;for(var u=Zc(e+1);++i<e;)u[i]=r[i];return u[e]=n(a),s(t,this,u)}}function Wo(t,e){return e.length<2?t:pr(t,ri(e,0,-1))}function zo(t,e){for(var n=t.length,r=Bl(e.length,n),i=Di(t);r--;){var o=e[r];t[r]=jo(o,n)?i[o]:it}return t}function Vo(t,e,n){var r=e+\"\";return Af(t,So(r,Go(To(r),n)))}function Xo(t){var e=0,n=0;return function(){var r=Ul(),i=St-(r-n);if(n=r,i>0){if(++e>=Et)return arguments[0]}else e=0;return t.apply(it,arguments)}}function Ko(t,e){var n=-1,r=t.length,i=r-1;for(e=e===it?r:e;++n<e;){var o=Jr(n,i),a=t[o];t[o]=t[n],t[n]=a}return t.length=e,t}function Jo(t){if(\"string\"==typeof t||pu(t))return t;var e=t+\"\";return\"0\"==e&&1/t==-Nt?\"-0\":e}function Qo(t){if(null!=t){try{return fl.call(t)}catch(t){}try{return t+\"\"}catch(t){}}return\"\"}function Go(t,e){return c(qt,function(n){var r=\"_.\"+n[0];e&n[1]&&!d(t,r)&&t.push(r)}),t.sort()}function Zo(t){if(t instanceof _)return t.clone();var e=new i(t.__wrapped__,t.__chain__);return e.__actions__=Di(t.__actions__),e.__index__=t.__index__,e.__values__=t.__values__,e}function Yo(t,e,n){e=(n?No(t,e,n):e===it)?1:Hl(yu(e),0);var r=null==t?0:t.length;if(!r||e<1)return[];for(var i=0,o=0,a=Zc(Il(r/e));i<r;)a[o++]=ri(t,i,i+=e);return a}function ta(t){for(var e=-1,n=null==t?0:t.length,r=0,i=[];++e<n;){var o=t[e];o&&(i[r++]=o)}return i}function ea(){var t=arguments.length;if(!t)return[];for(var e=Zc(t-1),n=arguments[0],r=t;r--;)e[r-1]=arguments[r];return g(dp(n)?Di(n):[n],ur(e,1))}function na(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),ri(t,e<0?0:e,r)):[]}function ra(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),e=r-e,ri(t,0,e<0?0:e)):[]}function ia(t,e){return t&&t.length?di(t,yo(e,3),!0,!0):[]}function oa(t,e){return t&&t.length?di(t,yo(e,3),!0):[]}function aa(t,e,n,r){var i=null==t?0:t.length;return i?(n&&\"number\"!=typeof n&&No(t,e,n)&&(n=0,r=i),ar(t,e,n,r)):[]}function sa(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:yu(n);return i<0&&(i=Hl(r+i,0)),C(t,yo(e,3),i)}function ua(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r-1;return n!==it&&(i=yu(n),i=n<0?Hl(r+i,0):Bl(i,r-1)),C(t,yo(e,3),i,!0)}function ca(t){return(null==t?0:t.length)?ur(t,1):[]}function la(t){return(null==t?0:t.length)?ur(t,Nt):[]}function fa(t,e){return(null==t?0:t.length)?(e=e===it?1:yu(e),ur(t,e)):[]}function pa(t){for(var e=-1,n=null==t?0:t.length,r={};++e<n;){var i=t[e];r[i[0]]=i[1]}return r}function da(t){return t&&t.length?t[0]:it}function ha(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=null==n?0:yu(n);return i<0&&(i=Hl(r+i,0)),T(t,e,i)}function va(t){return(null==t?0:t.length)?ri(t,0,-1):[]}function ga(t,e){return null==t?\"\":ql.call(t,e)}function ma(t){var e=null==t?0:t.length;return e?t[e-1]:it}function ya(t,e,n){var r=null==t?0:t.length;if(!r)return-1;var i=r;return n!==it&&(i=yu(n),i=i<0?Hl(r+i,0):Bl(i,r-1)),e===e?Z(t,e,i):C(t,k,i,!0)}function ba(t,e){return t&&t.length?Br(t,yu(e)):it}function _a(t,e){return t&&t.length&&e&&e.length?Xr(t,e):t}function wa(t,e,n){return t&&t.length&&e&&e.length?Xr(t,e,yo(n,2)):t}function xa(t,e,n){return t&&t.length&&e&&e.length?Xr(t,e,it,n):t}function Ca(t,e){var n=[];if(!t||!t.length)return n;var r=-1,i=[],o=t.length;for(e=yo(e,3);++r<o;){var a=t[r];e(a,r,t)&&(n.push(a),i.push(r))}return Kr(t,i),n}function Ta(t){return null==t?t:Vl.call(t)}function $a(t,e,n){var r=null==t?0:t.length;return r?(n&&\"number\"!=typeof n&&No(t,e,n)?(e=0,n=r):(e=null==e?0:yu(e),n=n===it?r:yu(n)),ri(t,e,n)):[]}function ka(t,e){return oi(t,e)}function Aa(t,e,n){return ai(t,e,yo(n,2))}function Ea(t,e){var n=null==t?0:t.length;if(n){var r=oi(t,e);if(r<n&&Hs(t[r],e))return r}return-1}function Sa(t,e){return oi(t,e,!0)}function Oa(t,e,n){return ai(t,e,yo(n,2),!0)}function ja(t,e){if(null==t?0:t.length){var n=oi(t,e,!0)-1;if(Hs(t[n],e))return n}return-1}function Na(t){return t&&t.length?si(t):[]}function Da(t,e){return t&&t.length?si(t,yo(e,2)):[]}function Ia(t){var e=null==t?0:t.length;return e?ri(t,1,e):[]}function La(t,e,n){return t&&t.length?(e=n||e===it?1:yu(e),ri(t,0,e<0?0:e)):[]}function Ra(t,e,n){var r=null==t?0:t.length;return r?(e=n||e===it?1:yu(e),e=r-e,ri(t,e<0?0:e,r)):[]}function Pa(t,e){return t&&t.length?di(t,yo(e,3),!1,!0):[]}function Fa(t,e){return t&&t.length?di(t,yo(e,3)):[]}function qa(t){return t&&t.length?li(t):[]}function Ma(t,e){return t&&t.length?li(t,yo(e,2)):[]}function Ha(t,e){return e=\"function\"==typeof e?e:it,t&&t.length?li(t,it,e):[]}function Ba(t){if(!t||!t.length)return[];var e=0;return t=p(t,function(t){if(Us(t))return e=Hl(t.length,e),!0}),D(e,function(e){return v(t,E(e))})}function Ua(t,e){if(!t||!t.length)return[];var n=Ba(t);return null==e?n:v(n,function(t){return s(e,it,t)})}function Wa(t,e){return gi(t||[],e||[],Hn)}function za(t,e){return gi(t||[],e||[],ei)}function Va(t){var e=n(t);return e.__chain__=!0,e}function Xa(t,e){return e(t),t}function Ka(t,e){return e(t)}function Ja(){return Va(this)}function Qa(){return new i(this.value(),this.__chain__)}function Ga(){this.__values__===it&&(this.__values__=gu(this.value()));var t=this.__index__>=this.__values__.length;return{done:t,value:t?it:this.__values__[this.__index__++]}}function Za(){return this}function Ya(t){for(var e,n=this;n instanceof r;){var i=Zo(n);i.__index__=0,i.__values__=it,e?o.__wrapped__=i:e=i;var o=i;n=n.__wrapped__}return o.__wrapped__=t,e}function ts(){var t=this.__wrapped__;if(t instanceof _){var e=t;return this.__actions__.length&&(e=new _(this)),e=e.reverse(),e.__actions__.push({func:Ka,args:[Ta],thisArg:it}),new i(e,this.__chain__)}return this.thru(Ta)}function es(){return hi(this.__wrapped__,this.__actions__)}function ns(t,e,n){var r=dp(t)?f:ir;return n&&No(t,e,n)&&(e=it),r(t,yo(e,3))}function rs(t,e){return(dp(t)?p:sr)(t,yo(e,3))}function is(t,e){return ur(ls(t,e),1)}function os(t,e){return ur(ls(t,e),Nt)}function as(t,e,n){return n=n===it?1:yu(n),ur(ls(t,e),n)}function ss(t,e){return(dp(t)?c:ff)(t,yo(e,3))}function us(t,e){return(dp(t)?l:pf)(t,yo(e,3))}function cs(t,e,n,r){t=Bs(t)?t:Ju(t),n=n&&!r?yu(n):0;var i=t.length;return n<0&&(n=Hl(i+n,0)),fu(t)?n<=i&&t.indexOf(e,n)>-1:!!i&&T(t,e,n)>-1}function ls(t,e){return(dp(t)?v:Pr)(t,yo(e,3))}function fs(t,e,n,r){return null==t?[]:(dp(e)||(e=null==e?[]:[e]),n=r?it:n,dp(n)||(n=null==n?[]:[n]),Ur(t,e,n))}function ps(t,e,n){var r=dp(t)?m:O,i=arguments.length<3;return r(t,yo(e,4),n,i,ff)}function ds(t,e,n){var r=dp(t)?y:O,i=arguments.length<3;return r(t,yo(e,4),n,i,pf)}function hs(t,e){return(dp(t)?p:sr)(t,Es(yo(e,3)))}function vs(t){return(dp(t)?On:Yr)(t)}function gs(t,e,n){return e=(n?No(t,e,n):e===it)?1:yu(e),(dp(t)?jn:ti)(t,e)}function ms(t){return(dp(t)?Dn:ni)(t)}function ys(t){if(null==t)return 0;if(Bs(t))return fu(t)?Y(t):t.length;var e=Cf(t);return e==Jt||e==ee?t.size:Ir(t).length}function bs(t,e,n){var r=dp(t)?b:ii;return n&&No(t,e,n)&&(e=it),r(t,yo(e,3))}function _s(t,e){if(\"function\"!=typeof e)throw new al(st);return t=yu(t),function(){if(--t<1)return e.apply(this,arguments)}}function ws(t,e,n){return e=n?it:e,e=t&&null==e?t.length:e,oo(t,Ct,it,it,it,it,e)}function xs(t,e){var n;if(\"function\"!=typeof e)throw new al(st);return t=yu(t),function(){return--t>0&&(n=e.apply(this,arguments)),t<=1&&(e=it),n}}function Cs(t,e,n){e=n?it:e;var r=oo(t,bt,it,it,it,it,it,e);return r.placeholder=Cs.placeholder,r}function Ts(t,e,n){e=n?it:e;var r=oo(t,_t,it,it,it,it,it,e);return r.placeholder=Ts.placeholder,r}function $s(t,e,n){function r(e){var n=p,r=d;return p=d=it,y=e,v=t.apply(r,n)}function i(t){return y=t,g=kf(s,e),b?r(t):v}function o(t){var n=t-m,r=t-y,i=e-n;return _?Bl(i,h-r):i}function a(t){var n=t-m,r=t-y;return m===it||n>=e||n<0||_&&r>=h}function s(){var t=ep();if(a(t))return u(t);g=kf(s,o(t))}function u(t){return g=it,w&&p?r(t):(p=d=it,v)}function c(){g!==it&&yf(g),y=0,p=m=d=g=it}function l(){return g===it?v:u(ep())}function f(){var t=ep(),n=a(t);if(p=arguments,d=this,m=t,n){if(g===it)return i(m);if(_)return g=kf(s,e),r(m)}return g===it&&(g=kf(s,e)),v}var p,d,h,v,g,m,y=0,b=!1,_=!1,w=!0;if(\"function\"!=typeof t)throw new al(st);return e=_u(e)||0,tu(n)&&(b=!!n.leading,_=\"maxWait\"in n,h=_?Hl(_u(n.maxWait)||0,e):h,w=\"trailing\"in n?!!n.trailing:w),f.cancel=c,f.flush=l,f}function ks(t){return oo(t,$t)}function As(t,e){if(\"function\"!=typeof t||null!=e&&\"function\"!=typeof e)throw new al(st);var n=function(){var r=arguments,i=e?e.apply(this,r):r[0],o=n.cache;if(o.has(i))return o.get(i);var a=t.apply(this,r);return n.cache=o.set(i,a)||o,a};return n.cache=new(As.Cache||on),n}function Es(t){if(\"function\"!=typeof t)throw new al(st);return function(){var e=arguments;switch(e.length){case 0:return!t.call(this);case 1:return!t.call(this,e[0]);case 2:return!t.call(this,e[0],e[1]);case 3:return!t.call(this,e[0],e[1],e[2])}return!t.apply(this,e)}}function Ss(t){return xs(2,t)}function Os(t,e){if(\"function\"!=typeof t)throw new al(st);return e=e===it?e:yu(e),Zr(t,e)}function js(t,e){if(\"function\"!=typeof t)throw new al(st);return e=null==e?0:Hl(yu(e),0),Zr(function(n){var r=n[e],i=_i(n,0,e);return r&&g(i,r),s(t,this,i)})}function Ns(t,e,n){var r=!0,i=!0;if(\"function\"!=typeof t)throw new al(st);return tu(n)&&(r=\"leading\"in n?!!n.leading:r,i=\"trailing\"in n?!!n.trailing:i),$s(t,e,{leading:r,maxWait:e,trailing:i})}function Ds(t){return ws(t,1)}function Is(t,e){return sp(yi(e),t)}function Ls(){if(!arguments.length)return[];var t=arguments[0];return dp(t)?t:[t]}function Rs(t){return Yn(t,dt)}function Ps(t,e){return e=\"function\"==typeof e?e:it,Yn(t,dt,e)}function Fs(t){return Yn(t,ft|dt)}function qs(t,e){return e=\"function\"==typeof e?e:it,Yn(t,ft|dt,e)}function Ms(t,e){return null==e||er(t,e,Ru(e))}function Hs(t,e){return t===e||t!==t&&e!==e}function Bs(t){return null!=t&&Ys(t.length)&&!Gs(t)}function Us(t){return eu(t)&&Bs(t)}function Ws(t){return!0===t||!1===t||eu(t)&&hr(t)==Ut}function zs(t){return eu(t)&&1===t.nodeType&&!cu(t)}function Vs(t){if(null==t)return!0;if(Bs(t)&&(dp(t)||\"string\"==typeof t||\"function\"==typeof t.splice||vp(t)||_p(t)||pp(t)))return!t.length;var e=Cf(t);if(e==Jt||e==ee)return!t.size;if(Po(t))return!Ir(t).length;for(var n in t)if(pl.call(t,n))return!1;return!0}function Xs(t,e){return $r(t,e)}function Ks(t,e,n){n=\"function\"==typeof n?n:it;var r=n?n(t,e):it;return r===it?$r(t,e,it,n):!!r}function Js(t){if(!eu(t))return!1;var e=hr(t);return e==Vt||e==zt||\"string\"==typeof t.message&&\"string\"==typeof t.name&&!cu(t)}function Qs(t){return\"number\"==typeof t&&Fl(t)}function Gs(t){if(!tu(t))return!1;var e=hr(t);return e==Xt||e==Kt||e==Bt||e==Yt}function Zs(t){return\"number\"==typeof t&&t==yu(t)}function Ys(t){return\"number\"==typeof t&&t>-1&&t%1==0&&t<=Dt}function tu(t){var e=typeof t;return null!=t&&(\"object\"==e||\"function\"==e)}function eu(t){return null!=t&&\"object\"==typeof t}function nu(t,e){return t===e||Er(t,e,_o(e))}function ru(t,e,n){return n=\"function\"==typeof n?n:it,Er(t,e,_o(e),n)}function iu(t){return uu(t)&&t!=+t}function ou(t){if(Tf(t))throw new tl(at);return Sr(t)}function au(t){return null===t}function su(t){return null==t}function uu(t){return\"number\"==typeof t||eu(t)&&hr(t)==Qt}function cu(t){if(!eu(t)||hr(t)!=Zt)return!1;var e=Cl(t);if(null===e)return!0;var n=pl.call(e,\"constructor\")&&e.constructor;return\"function\"==typeof n&&n instanceof n&&fl.call(n)==gl}function lu(t){return Zs(t)&&t>=-Dt&&t<=Dt}function fu(t){return\"string\"==typeof t||!dp(t)&&eu(t)&&hr(t)==ne}function pu(t){return\"symbol\"==typeof t||eu(t)&&hr(t)==re}function du(t){return t===it}function hu(t){return eu(t)&&Cf(t)==oe}function vu(t){return eu(t)&&hr(t)==ae}function gu(t){if(!t)return[];if(Bs(t))return fu(t)?tt(t):Di(t);if(El&&t[El])return z(t[El]());var e=Cf(t);return(e==Jt?V:e==ee?J:Ju)(t)}function mu(t){if(!t)return 0===t?t:0;if((t=_u(t))===Nt||t===-Nt){return(t<0?-1:1)*It}return t===t?t:0}function yu(t){var e=mu(t),n=e%1;return e===e?n?e-n:e:0}function bu(t){return t?Zn(yu(t),0,Rt):0}function _u(t){if(\"number\"==typeof t)return t;if(pu(t))return Lt;if(tu(t)){var e=\"function\"==typeof t.valueOf?t.valueOf():t;t=tu(e)?e+\"\":e}if(\"string\"!=typeof t)return 0===t?t:+t;t=t.replace(je,\"\");var n=He.test(t);return n||Ue.test(t)?kn(t.slice(2),n?2:8):Me.test(t)?Lt:+t}function wu(t){return Ii(t,Pu(t))}function xu(t){return t?Zn(yu(t),-Dt,Dt):0===t?t:0}function Cu(t){return null==t?\"\":ci(t)}function Tu(t,e){var n=lf(t);return null==e?n:Kn(n,e)}function $u(t,e){return x(t,yo(e,3),cr)}function ku(t,e){return x(t,yo(e,3),lr)}function Au(t,e){return null==t?t:df(t,yo(e,3),Pu)}function Eu(t,e){return null==t?t:hf(t,yo(e,3),Pu)}function Su(t,e){return t&&cr(t,yo(e,3))}function Ou(t,e){return t&&lr(t,yo(e,3))}function ju(t){return null==t?[]:fr(t,Ru(t))}function Nu(t){return null==t?[]:fr(t,Pu(t))}function Du(t,e,n){var r=null==t?it:pr(t,e);return r===it?n:r}function Iu(t,e){return null!=t&&$o(t,e,gr)}function Lu(t,e){return null!=t&&$o(t,e,mr)}function Ru(t){return Bs(t)?En(t):Ir(t)}function Pu(t){return Bs(t)?En(t,!0):Lr(t)}function Fu(t,e){var n={};return e=yo(e,3),cr(t,function(t,r,i){Qn(n,e(t,r,i),t)}),n}function qu(t,e){var n={};return e=yo(e,3),cr(t,function(t,r,i){Qn(n,r,e(t,r,i))}),n}function Mu(t,e){return Hu(t,Es(yo(e)))}function Hu(t,e){if(null==t)return{};var n=v(vo(t),function(t){return[t]});return e=yo(e),zr(t,n,function(t,n){return e(t,n[0])})}function Bu(t,e,n){e=bi(e,t);var r=-1,i=e.length;for(i||(i=1,t=it);++r<i;){var o=null==t?it:t[Jo(e[r])];o===it&&(r=i,o=n),t=Gs(o)?o.call(t):o}return t}function Uu(t,e,n){return null==t?t:ei(t,e,n)}function Wu(t,e,n,r){return r=\"function\"==typeof r?r:it,null==t?t:ei(t,e,n,r)}function zu(t,e,n){var r=dp(t),i=r||vp(t)||_p(t);if(e=yo(e,4),null==n){var o=t&&t.constructor;n=i?r?new o:[]:tu(t)&&Gs(o)?lf(Cl(t)):{}}return(i?c:cr)(t,function(t,r,i){return e(n,t,r,i)}),n}function Vu(t,e){return null==t||fi(t,e)}function Xu(t,e,n){return null==t?t:pi(t,e,yi(n))}function Ku(t,e,n,r){return r=\"function\"==typeof r?r:it,null==t?t:pi(t,e,yi(n),r)}function Ju(t){return null==t?[]:R(t,Ru(t))}function Qu(t){return null==t?[]:R(t,Pu(t))}function Gu(t,e,n){return n===it&&(n=e,e=it),n!==it&&(n=_u(n),n=n===n?n:0),e!==it&&(e=_u(e),e=e===e?e:0),Zn(_u(t),e,n)}function Zu(t,e,n){return e=mu(e),n===it?(n=e,e=0):n=mu(n),t=_u(t),yr(t,e,n)}function Yu(t,e,n){if(n&&\"boolean\"!=typeof n&&No(t,e,n)&&(e=n=it),n===it&&(\"boolean\"==typeof e?(n=e,e=it):\"boolean\"==typeof t&&(n=t,t=it)),t===it&&e===it?(t=0,e=1):(t=mu(t),e===it?(e=t,t=0):e=mu(e)),t>e){var r=t;t=e,e=r}if(n||t%1||e%1){var i=zl();return Bl(t+i*(e-t+$n(\"1e-\"+((i+\"\").length-1))),e)}return Jr(t,e)}function tc(t){return Vp(Cu(t).toLowerCase())}function ec(t){return(t=Cu(t))&&t.replace(ze,Bn).replace(pn,\"\")}function nc(t,e,n){t=Cu(t),e=ci(e);var r=t.length;n=n===it?r:Zn(yu(n),0,r);var i=n;return(n-=e.length)>=0&&t.slice(n,i)==e}function rc(t){return t=Cu(t),t&&Te.test(t)?t.replace(xe,Un):t}function ic(t){return t=Cu(t),t&&Oe.test(t)?t.replace(Se,\"\\\\$&\"):t}function oc(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;if(!e||r>=e)return t;var i=(e-r)/2;return Zi(Ll(i),n)+t+Zi(Il(i),n)}function ac(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;return e&&r<e?t+Zi(e-r,n):t}function sc(t,e,n){t=Cu(t),e=yu(e);var r=e?Y(t):0;return e&&r<e?Zi(e-r,n)+t:t}function uc(t,e,n){return n||null==e?e=0:e&&(e=+e),Wl(Cu(t).replace(Ne,\"\"),e||0)}function cc(t,e,n){return e=(n?No(t,e,n):e===it)?1:yu(e),Gr(Cu(t),e)}function lc(){var t=arguments,e=Cu(t[0]);return t.length<3?e:e.replace(t[1],t[2])}function fc(t,e,n){return n&&\"number\"!=typeof n&&No(t,e,n)&&(e=n=it),(n=n===it?Rt:n>>>0)?(t=Cu(t),t&&(\"string\"==typeof e||null!=e&&!yp(e))&&!(e=ci(e))&&U(t)?_i(tt(t),0,n):t.split(e,n)):[]}function pc(t,e,n){return t=Cu(t),n=null==n?0:Zn(yu(n),0,t.length),e=ci(e),t.slice(n,n+e.length)==e}function dc(t,e,r){var i=n.templateSettings;r&&No(t,e,r)&&(e=it),t=Cu(t),e=$p({},e,i,ao);var o,a,s=$p({},e.imports,i.imports,ao),u=Ru(s),c=R(s,u),l=0,f=e.interpolate||Ve,p=\"__p += '\",d=il((e.escape||Ve).source+\"|\"+f.source+\"|\"+(f===$e?Fe:Ve).source+\"|\"+(e.evaluate||Ve).source+\"|$\",\"g\"),h=\"//# sourceURL=\"+(\"sourceURL\"in e?e.sourceURL:\"lodash.templateSources[\"+ ++yn+\"]\")+\"\\n\";t.replace(d,function(e,n,r,i,s,u){return r||(r=i),p+=t.slice(l,u).replace(Xe,H),n&&(o=!0,p+=\"' +\\n__e(\"+n+\") +\\n'\"),s&&(a=!0,p+=\"';\\n\"+s+\";\\n__p += '\"),r&&(p+=\"' +\\n((__t = (\"+r+\")) == null ? '' : __t) +\\n'\"),l=u+e.length,e}),p+=\"';\\n\";var v=e.variable;v||(p=\"with (obj) {\\n\"+p+\"\\n}\\n\"),p=(a?p.replace(ye,\"\"):p).replace(be,\"$1\").replace(_e,\"$1;\"),p=\"function(\"+(v||\"obj\")+\") {\\n\"+(v?\"\":\"obj || (obj = {});\\n\")+\"var __t, __p = ''\"+(o?\", __e = _.escape\":\"\")+(a?\", __j = Array.prototype.join;\\nfunction print() { __p += __j.call(arguments, '') }\\n\":\";\\n\")+p+\"return __p\\n}\";var g=Xp(function(){return el(u,h+\"return \"+p).apply(it,c)});if(g.source=p,Js(g))throw g;return g}function hc(t){return Cu(t).toLowerCase()}function vc(t){return Cu(t).toUpperCase()}function gc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(je,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t),i=tt(e);return _i(r,F(r,i),q(r,i)+1).join(\"\")}function mc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(De,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t);return _i(r,0,q(r,tt(e))+1).join(\"\")}function yc(t,e,n){if((t=Cu(t))&&(n||e===it))return t.replace(Ne,\"\");if(!t||!(e=ci(e)))return t;var r=tt(t);return _i(r,F(r,tt(e))).join(\"\")}function bc(t,e){var n=kt,r=At;if(tu(e)){var i=\"separator\"in e?e.separator:i;n=\"length\"in e?yu(e.length):n,r=\"omission\"in e?ci(e.omission):r}t=Cu(t);var o=t.length;if(U(t)){var a=tt(t);o=a.length}if(n>=o)return t;var s=n-Y(r);if(s<1)return r;var u=a?_i(a,0,s).join(\"\"):t.slice(0,s);if(i===it)return u+r;if(a&&(s+=u.length-s),yp(i)){if(t.slice(s).search(i)){var c,l=u;for(i.global||(i=il(i.source,Cu(qe.exec(i))+\"g\")),i.lastIndex=0;c=i.exec(l);)var f=c.index;u=u.slice(0,f===it?s:f)}}else if(t.indexOf(ci(i),s)!=s){var p=u.lastIndexOf(i);p>-1&&(u=u.slice(0,p))}return u+r}function _c(t){return t=Cu(t),t&&Ce.test(t)?t.replace(we,Wn):t}function wc(t,e,n){return t=Cu(t),e=n?it:e,e===it?W(t)?rt(t):w(t):t.match(e)||[]}function xc(t){var e=null==t?0:t.length,n=yo();return t=e?v(t,function(t){if(\"function\"!=typeof t[1])throw new al(st);return[n(t[0]),t[1]]}):[],Zr(function(n){for(var r=-1;++r<e;){var i=t[r];if(s(i[0],this,n))return s(i[1],this,n)}})}function Cc(t){return tr(Yn(t,ft))}function Tc(t){return function(){return t}}function $c(t,e){return null==t||t!==t?e:t}function kc(t){return t}function Ac(t){return Dr(\"function\"==typeof t?t:Yn(t,ft))}function Ec(t){return Fr(Yn(t,ft))}function Sc(t,e){return qr(t,Yn(e,ft))}function Oc(t,e,n){var r=Ru(e),i=fr(e,r);null!=n||tu(e)&&(i.length||!r.length)||(n=e,e=t,t=this,i=fr(e,Ru(e)));var o=!(tu(n)&&\"chain\"in n&&!n.chain),a=Gs(t);return c(i,function(n){var r=e[n];t[n]=r,a&&(t.prototype[n]=function(){var e=this.__chain__;if(o||e){var n=t(this.__wrapped__);return(n.__actions__=Di(this.__actions__)).push({func:r,args:arguments,thisArg:t}),n.__chain__=e,n}return r.apply(t,g([this.value()],arguments))})}),t}function jc(){return Sn._===this&&(Sn._=ml),this}function Nc(){}function Dc(t){return t=yu(t),Zr(function(e){return Br(e,t)})}function Ic(t){return Do(t)?E(Jo(t)):Vr(t)}function Lc(t){return function(e){return null==t?it:pr(t,e)}}function Rc(){return[]}function Pc(){return!1}function Fc(){return{}}function qc(){return\"\"}function Mc(){return!0}function Hc(t,e){if((t=yu(t))<1||t>Dt)return[];var n=Rt,r=Bl(t,Rt);e=yo(e),t-=Rt;for(var i=D(r,e);++n<t;)e(n);return i}function Bc(t){return dp(t)?v(t,Jo):pu(t)?[t]:Di(Ef(Cu(t)))}function Uc(t){var e=++dl;return Cu(t)+e}function Wc(t){return t&&t.length?or(t,kc,vr):it}function zc(t,e){return t&&t.length?or(t,yo(e,2),vr):it}function Vc(t){return A(t,kc)}function Xc(t,e){return A(t,yo(e,2))}function Kc(t){return t&&t.length?or(t,kc,Rr):it}function Jc(t,e){return t&&t.length?or(t,yo(e,2),Rr):it}function Qc(t){return t&&t.length?N(t,kc):0}function Gc(t,e){return t&&t.length?N(t,yo(e,2)):0}e=null==e?Sn:zn.defaults(Sn.Object(),e,zn.pick(Sn,mn));var Zc=e.Array,Yc=e.Date,tl=e.Error,el=e.Function,nl=e.Math,rl=e.Object,il=e.RegExp,ol=e.String,al=e.TypeError,sl=Zc.prototype,ul=el.prototype,cl=rl.prototype,ll=e[\"__core-js_shared__\"],fl=ul.toString,pl=cl.hasOwnProperty,dl=0,hl=function(){var t=/[^.]+$/.exec(ll&&ll.keys&&ll.keys.IE_PROTO||\"\");return t?\"Symbol(src)_1.\"+t:\"\"}(),vl=cl.toString,gl=fl.call(rl),ml=Sn._,yl=il(\"^\"+fl.call(pl).replace(Se,\"\\\\$&\").replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g,\"$1.*?\")+\"$\"),bl=Nn?e.Buffer:it,_l=e.Symbol,wl=e.Uint8Array,xl=bl?bl.allocUnsafe:it,Cl=X(rl.getPrototypeOf,rl),Tl=rl.create,$l=cl.propertyIsEnumerable,kl=sl.splice,Al=_l?_l.isConcatSpreadable:it,El=_l?_l.iterator:it,Sl=_l?_l.toStringTag:it,Ol=function(){try{var t=wo(rl,\"defineProperty\");return t({},\"\",{}),t}catch(t){}}(),jl=e.clearTimeout!==Sn.clearTimeout&&e.clearTimeout,Nl=Yc&&Yc.now!==Sn.Date.now&&Yc.now,Dl=e.setTimeout!==Sn.setTimeout&&e.setTimeout,Il=nl.ceil,Ll=nl.floor,Rl=rl.getOwnPropertySymbols,Pl=bl?bl.isBuffer:it,Fl=e.isFinite,ql=sl.join,Ml=X(rl.keys,rl),Hl=nl.max,Bl=nl.min,Ul=Yc.now,Wl=e.parseInt,zl=nl.random,Vl=sl.reverse,Xl=wo(e,\"DataView\"),Kl=wo(e,\"Map\"),Jl=wo(e,\"Promise\"),Ql=wo(e,\"Set\"),Gl=wo(e,\"WeakMap\"),Zl=wo(rl,\"create\"),Yl=Gl&&new Gl,tf={},ef=Qo(Xl),nf=Qo(Kl),rf=Qo(Jl),of=Qo(Ql),af=Qo(Gl),sf=_l?_l.prototype:it,uf=sf?sf.valueOf:it,cf=sf?sf.toString:it,lf=function(){function t(){}return function(e){if(!tu(e))return{};if(Tl)return Tl(e);t.prototype=e;var n=new t;return t.prototype=it,n}}();n.templateSettings={escape:/<%-([\\s\\S]+?)%>/g,evaluate:/<%([\\s\\S]+?)%>/g,interpolate:$e,variable:\"\",imports:{_:n}},n.prototype=r.prototype,n.prototype.constructor=n,i.prototype=lf(r.prototype),i.prototype.constructor=i,_.prototype=lf(r.prototype),_.prototype.constructor=_,nt.prototype.clear=Pe,nt.prototype.delete=Ke,nt.prototype.get=Je,nt.prototype.has=Qe,nt.prototype.set=Ge,Ze.prototype.clear=Ye,Ze.prototype.delete=tn,Ze.prototype.get=en,Ze.prototype.has=nn,Ze.prototype.set=rn,on.prototype.clear=an,on.prototype.delete=sn,on.prototype.get=un,on.prototype.has=cn,on.prototype.set=ln,dn.prototype.add=dn.prototype.push=hn,dn.prototype.has=vn,gn.prototype.clear=wn,gn.prototype.delete=xn,gn.prototype.get=Cn,gn.prototype.has=Tn,gn.prototype.set=An;var ff=qi(cr),pf=qi(lr,!0),df=Mi(),hf=Mi(!0),vf=Yl?function(t,e){return Yl.set(t,e),t}:kc,gf=Ol?function(t,e){return Ol(t,\"toString\",{configurable:!0,enumerable:!1,value:Tc(e),writable:!0})}:kc,mf=Zr,yf=jl||function(t){return Sn.clearTimeout(t)},bf=Ql&&1/J(new Ql([,-0]))[1]==Nt?function(t){return new Ql(t)}:Nc,_f=Yl?function(t){return Yl.get(t)}:Nc,wf=Rl?function(t){return null==t?[]:(t=rl(t),p(Rl(t),function(e){return $l.call(t,e)}))}:Rc,xf=Rl?function(t){for(var e=[];t;)g(e,wf(t)),t=Cl(t);return e}:Rc,Cf=hr;(Xl&&Cf(new Xl(new ArrayBuffer(1)))!=ue||Kl&&Cf(new Kl)!=Jt||Jl&&\"[object Promise]\"!=Cf(Jl.resolve())||Ql&&Cf(new Ql)!=ee||Gl&&Cf(new Gl)!=oe)&&(Cf=function(t){var e=hr(t),n=e==Zt?t.constructor:it,r=n?Qo(n):\"\";if(r)switch(r){case ef:return ue;case nf:return Jt;case rf:return\"[object Promise]\";case of:return ee;case af:return oe}return e});var Tf=ll?Gs:Pc,$f=Xo(vf),kf=Dl||function(t,e){return Sn.setTimeout(t,e)},Af=Xo(gf),Ef=function(t){var e=As(t,function(t){return n.size===ct&&n.clear(),t}),n=e.cache;return e}(function(t){var e=[];return Ee.test(t)&&e.push(\"\"),t.replace(/[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g,function(t,n,r,i){e.push(r?i.replace(/\\\\(\\\\)?/g,\"$1\"):n||t)}),e}),Sf=Zr(function(t,e){return Us(t)?rr(t,ur(e,1,Us,!0)):[]}),Of=Zr(function(t,e){var n=ma(e);return Us(n)&&(n=it),Us(t)?rr(t,ur(e,1,Us,!0),yo(n,2)):[]}),jf=Zr(function(t,e){var n=ma(e);return Us(n)&&(n=it),Us(t)?rr(t,ur(e,1,Us,!0),it,n):[]}),Nf=Zr(function(t){var e=v(t,mi);return e.length&&e[0]===t[0]?br(e):[]}),Df=Zr(function(t){var e=ma(t),n=v(t,mi);return e===ma(n)?e=it:n.pop(),n.length&&n[0]===t[0]?br(n,yo(e,2)):[]}),If=Zr(function(t){var e=ma(t),n=v(t,mi);return e=\"function\"==typeof e?e:it,e&&n.pop(),n.length&&n[0]===t[0]?br(n,it,e):[]}),Lf=Zr(_a),Rf=po(function(t,e){var n=null==t?0:t.length,r=Gn(t,e);return Kr(t,v(e,function(t){return jo(t,n)?+t:t}).sort(Si)),r}),Pf=Zr(function(t){return li(ur(t,1,Us,!0))}),Ff=Zr(function(t){var e=ma(t);return Us(e)&&(e=it),li(ur(t,1,Us,!0),yo(e,2))}),qf=Zr(function(t){var e=ma(t);return e=\"function\"==typeof e?e:it,li(ur(t,1,Us,!0),it,e)}),Mf=Zr(function(t,e){return Us(t)?rr(t,e):[]}),Hf=Zr(function(t){return vi(p(t,Us))}),Bf=Zr(function(t){var e=ma(t);return Us(e)&&(e=it),vi(p(t,Us),yo(e,2))}),Uf=Zr(function(t){var e=ma(t);return e=\"function\"==typeof e?e:it,vi(p(t,Us),it,e)}),Wf=Zr(Ba),zf=Zr(function(t){var e=t.length,n=e>1?t[e-1]:it;return n=\"function\"==typeof n?(t.pop(),n):it,Ua(t,n)}),Vf=po(function(t){var e=t.length,n=e?t[0]:0,r=this.__wrapped__,o=function(e){return Gn(e,t)};return!(e>1||this.__actions__.length)&&r instanceof _&&jo(n)?(r=r.slice(n,+n+(e?1:0)),r.__actions__.push({func:Ka,args:[o],thisArg:it}),new i(r,this.__chain__).thru(function(t){return e&&!t.length&&t.push(it),t})):this.thru(o)}),Xf=Pi(function(t,e,n){pl.call(t,n)?++t[n]:Qn(t,n,1)}),Kf=Vi(sa),Jf=Vi(ua),Qf=Pi(function(t,e,n){pl.call(t,n)?t[n].push(e):Qn(t,n,[e])}),Gf=Zr(function(t,e,n){var r=-1,i=\"function\"==typeof e,o=Bs(t)?Zc(t.length):[];return ff(t,function(t){o[++r]=i?s(e,t,n):wr(t,e,n)}),o}),Zf=Pi(function(t,e,n){Qn(t,n,e)}),Yf=Pi(function(t,e,n){t[n?0:1].push(e)},function(){return[[],[]]}),tp=Zr(function(t,e){if(null==t)return[];var n=e.length;return n>1&&No(t,e[0],e[1])?e=[]:n>2&&No(e[0],e[1],e[2])&&(e=[e[0]]),Ur(t,ur(e,1),[])}),ep=Nl||function(){return Sn.Date.now()},np=Zr(function(t,e,n){var r=gt;if(n.length){var i=K(n,mo(np));r|=wt}return oo(t,r,e,n,i)}),rp=Zr(function(t,e,n){var r=gt|mt;if(n.length){var i=K(n,mo(rp));r|=wt}return oo(e,r,t,n,i)}),ip=Zr(function(t,e){return nr(t,1,e)}),op=Zr(function(t,e,n){return nr(t,_u(e)||0,n)});As.Cache=on;var ap=mf(function(t,e){e=1==e.length&&dp(e[0])?v(e[0],L(yo())):v(ur(e,1),L(yo()));var n=e.length;return Zr(function(r){for(var i=-1,o=Bl(r.length,n);++i<o;)r[i]=e[i].call(this,r[i]);return s(t,this,r)})}),sp=Zr(function(t,e){var n=K(e,mo(sp));return oo(t,wt,it,e,n)}),up=Zr(function(t,e){var n=K(e,mo(up));return oo(t,xt,it,e,n)}),cp=po(function(t,e){return oo(t,Tt,it,it,it,e)}),lp=eo(vr),fp=eo(function(t,e){return t>=e}),pp=xr(function(){return arguments}())?xr:function(t){return eu(t)&&pl.call(t,\"callee\")&&!$l.call(t,\"callee\")},dp=Zc.isArray,hp=Ln?L(Ln):Cr,vp=Pl||Pc,gp=Rn?L(Rn):Tr,mp=Pn?L(Pn):Ar,yp=Fn?L(Fn):Or,bp=qn?L(qn):jr,_p=Mn?L(Mn):Nr,wp=eo(Rr),xp=eo(function(t,e){return t<=e}),Cp=Fi(function(t,e){if(Po(e)||Bs(e))return void Ii(e,Ru(e),t);for(var n in e)pl.call(e,n)&&Hn(t,n,e[n])}),Tp=Fi(function(t,e){Ii(e,Pu(e),t)}),$p=Fi(function(t,e,n,r){Ii(e,Pu(e),t,r)}),kp=Fi(function(t,e,n,r){Ii(e,Ru(e),t,r)}),Ap=po(Gn),Ep=Zr(function(t){return t.push(it,ao),s($p,it,t)}),Sp=Zr(function(t){return t.push(it,so),s(Ip,it,t)}),Op=Ji(function(t,e,n){t[e]=n},Tc(kc)),jp=Ji(function(t,e,n){pl.call(t,e)?t[e].push(n):t[e]=[n]},yo),Np=Zr(wr),Dp=Fi(function(t,e,n){Mr(t,e,n)}),Ip=Fi(function(t,e,n,r){Mr(t,e,n,r)}),Lp=po(function(t,e){var n={};if(null==t)return n;var r=!1;e=v(e,function(e){return e=bi(e,t),r||(r=e.length>1),e}),Ii(t,vo(t),n),r&&(n=Yn(n,ft|pt|dt,uo));for(var i=e.length;i--;)fi(n,e[i]);return n}),Rp=po(function(t,e){return null==t?{}:Wr(t,e)}),Pp=io(Ru),Fp=io(Pu),qp=Ui(function(t,e,n){return e=e.toLowerCase(),t+(n?tc(e):e)}),Mp=Ui(function(t,e,n){return t+(n?\"-\":\"\")+e.toLowerCase()}),Hp=Ui(function(t,e,n){return t+(n?\" \":\"\")+e.toLowerCase()}),Bp=Bi(\"toLowerCase\"),Up=Ui(function(t,e,n){return t+(n?\"_\":\"\")+e.toLowerCase()}),Wp=Ui(function(t,e,n){return t+(n?\" \":\"\")+Vp(e)}),zp=Ui(function(t,e,n){return t+(n?\" \":\"\")+e.toUpperCase()}),Vp=Bi(\"toUpperCase\"),Xp=Zr(function(t,e){try{return s(t,it,e)}catch(t){return Js(t)?t:new tl(t)}}),Kp=po(function(t,e){return c(e,function(e){e=Jo(e),Qn(t,e,np(t[e],t))}),t}),Jp=Xi(),Qp=Xi(!0),Gp=Zr(function(t,e){return function(n){return wr(n,t,e)}}),Zp=Zr(function(t,e){return function(n){return wr(t,n,e)}}),Yp=Gi(v),td=Gi(f),ed=Gi(b),nd=to(),rd=to(!0),id=Qi(function(t,e){return t+e},0),od=ro(\"ceil\"),ad=Qi(function(t,e){return t/e},1),sd=ro(\"floor\"),ud=Qi(function(t,e){return t*e},1),cd=ro(\"round\"),ld=Qi(function(t,e){return t-e},0);return n.after=_s,n.ary=ws,n.assign=Cp,n.assignIn=Tp,n.assignInWith=$p,n.assignWith=kp,n.at=Ap,n.before=xs,n.bind=np,n.bindAll=Kp,n.bindKey=rp,n.castArray=Ls,n.chain=Va,n.chunk=Yo,n.compact=ta,n.concat=ea,n.cond=xc,n.conforms=Cc,n.constant=Tc,n.countBy=Xf,n.create=Tu,n.curry=Cs,n.curryRight=Ts,n.debounce=$s,n.defaults=Ep,n.defaultsDeep=Sp,n.defer=ip,n.delay=op,n.difference=Sf,n.differenceBy=Of,n.differenceWith=jf,n.drop=na,n.dropRight=ra,n.dropRightWhile=ia,n.dropWhile=oa,n.fill=aa,n.filter=rs,n.flatMap=is,n.flatMapDeep=os,n.flatMapDepth=as,n.flatten=ca,n.flattenDeep=la,n.flattenDepth=fa,n.flip=ks,n.flow=Jp,n.flowRight=Qp,n.fromPairs=pa,n.functions=ju,n.functionsIn=Nu,n.groupBy=Qf,n.initial=va,n.intersection=Nf,n.intersectionBy=Df,n.intersectionWith=If,n.invert=Op,n.invertBy=jp,n.invokeMap=Gf,n.iteratee=Ac,n.keyBy=Zf,n.keys=Ru,n.keysIn=Pu,n.map=ls,n.mapKeys=Fu,n.mapValues=qu,n.matches=Ec,n.matchesProperty=Sc,n.memoize=As,n.merge=Dp,n.mergeWith=Ip,n.method=Gp,n.methodOf=Zp,n.mixin=Oc,n.negate=Es,n.nthArg=Dc,n.omit=Lp,n.omitBy=Mu,n.once=Ss,n.orderBy=fs,n.over=Yp,n.overArgs=ap,n.overEvery=td,n.overSome=ed,n.partial=sp,n.partialRight=up,n.partition=Yf,n.pick=Rp,n.pickBy=Hu,n.property=Ic,n.propertyOf=Lc,n.pull=Lf,n.pullAll=_a,n.pullAllBy=wa,n.pullAllWith=xa,n.pullAt=Rf,n.range=nd,n.rangeRight=rd,n.rearg=cp,n.reject=hs,n.remove=Ca,n.rest=Os,n.reverse=Ta,n.sampleSize=gs,n.set=Uu,n.setWith=Wu,n.shuffle=ms,n.slice=$a,n.sortBy=tp,n.sortedUniq=Na,n.sortedUniqBy=Da,n.split=fc,n.spread=js,n.tail=Ia,n.take=La,n.takeRight=Ra,n.takeRightWhile=Pa,n.takeWhile=Fa,n.tap=Xa,n.throttle=Ns,n.thru=Ka,n.toArray=gu,n.toPairs=Pp,n.toPairsIn=Fp,n.toPath=Bc,n.toPlainObject=wu,n.transform=zu,n.unary=Ds,n.union=Pf,n.unionBy=Ff,n.unionWith=qf,n.uniq=qa,n.uniqBy=Ma,n.uniqWith=Ha,n.unset=Vu,n.unzip=Ba,n.unzipWith=Ua,n.update=Xu,n.updateWith=Ku,n.values=Ju,n.valuesIn=Qu,n.without=Mf,n.words=wc,n.wrap=Is,n.xor=Hf,n.xorBy=Bf,n.xorWith=Uf,n.zip=Wf,n.zipObject=Wa,n.zipObjectDeep=za,n.zipWith=zf,n.entries=Pp,n.entriesIn=Fp,n.extend=Tp,n.extendWith=$p,Oc(n,n),n.add=id,n.attempt=Xp,n.camelCase=qp,n.capitalize=tc,n.ceil=od,n.clamp=Gu,n.clone=Rs,n.cloneDeep=Fs,n.cloneDeepWith=qs,n.cloneWith=Ps,n.conformsTo=Ms,n.deburr=ec,n.defaultTo=$c,n.divide=ad,n.endsWith=nc,n.eq=Hs,n.escape=rc,n.escapeRegExp=ic,n.every=ns,n.find=Kf,n.findIndex=sa,n.findKey=$u,n.findLast=Jf,n.findLastIndex=ua,n.findLastKey=ku,n.floor=sd,n.forEach=ss,n.forEachRight=us,n.forIn=Au,n.forInRight=Eu,n.forOwn=Su,n.forOwnRight=Ou,n.get=Du,n.gt=lp,n.gte=fp,n.has=Iu,n.hasIn=Lu,n.head=da,n.identity=kc,n.includes=cs,n.indexOf=ha,n.inRange=Zu,n.invoke=Np,n.isArguments=pp,n.isArray=dp,n.isArrayBuffer=hp,n.isArrayLike=Bs,n.isArrayLikeObject=Us,n.isBoolean=Ws,n.isBuffer=vp,n.isDate=gp,n.isElement=zs,n.isEmpty=Vs,n.isEqual=Xs,n.isEqualWith=Ks,n.isError=Js,n.isFinite=Qs,n.isFunction=Gs,n.isInteger=Zs,n.isLength=Ys,n.isMap=mp,n.isMatch=nu,n.isMatchWith=ru,n.isNaN=iu,n.isNative=ou,n.isNil=su,n.isNull=au,n.isNumber=uu,n.isObject=tu,n.isObjectLike=eu,n.isPlainObject=cu,n.isRegExp=yp,n.isSafeInteger=lu,n.isSet=bp,n.isString=fu,n.isSymbol=pu,n.isTypedArray=_p,n.isUndefined=du,n.isWeakMap=hu,n.isWeakSet=vu,n.join=ga,n.kebabCase=Mp,n.last=ma,n.lastIndexOf=ya,n.lowerCase=Hp,n.lowerFirst=Bp,n.lt=wp,n.lte=xp,n.max=Wc,n.maxBy=zc,n.mean=Vc,n.meanBy=Xc,n.min=Kc,n.minBy=Jc,n.stubArray=Rc,n.stubFalse=Pc,n.stubObject=Fc,n.stubString=qc,n.stubTrue=Mc,n.multiply=ud,n.nth=ba,n.noConflict=jc,n.noop=Nc,n.now=ep,n.pad=oc,n.padEnd=ac,n.padStart=sc,n.parseInt=uc,n.random=Yu,n.reduce=ps,n.reduceRight=ds,n.repeat=cc,n.replace=lc,n.result=Bu,n.round=cd,n.runInContext=t,n.sample=vs,n.size=ys,n.snakeCase=Up,n.some=bs,n.sortedIndex=ka,n.sortedIndexBy=Aa,n.sortedIndexOf=Ea,n.sortedLastIndex=Sa,n.sortedLastIndexBy=Oa,n.sortedLastIndexOf=ja,n.startCase=Wp,n.startsWith=pc,n.subtract=ld,n.sum=Qc,n.sumBy=Gc,n.template=dc,n.times=Hc,n.toFinite=mu,n.toInteger=yu,n.toLength=bu,n.toLower=hc,n.toNumber=_u,n.toSafeInteger=xu,n.toString=Cu,n.toUpper=vc,n.trim=gc,n.trimEnd=mc,n.trimStart=yc,n.truncate=bc,n.unescape=_c,n.uniqueId=Uc,n.upperCase=zp,n.upperFirst=Vp,n.each=ss,n.eachRight=us,n.first=da,Oc(n,function(){var t={};return cr(n,function(e,r){pl.call(n.prototype,r)||(t[r]=e)}),t}(),{chain:!1}),n.VERSION=\"4.17.4\",c([\"bind\",\"bindKey\",\"curry\",\"curryRight\",\"partial\",\"partialRight\"],function(t){n[t].placeholder=n}),c([\"drop\",\"take\"],function(t,e){_.prototype[t]=function(n){n=n===it?1:Hl(yu(n),0);var r=this.__filtered__&&!e?new _(this):this.clone();return r.__filtered__?r.__takeCount__=Bl(n,r.__takeCount__):r.__views__.push({size:Bl(n,Rt),type:t+(r.__dir__<0?\"Right\":\"\")}),r},_.prototype[t+\"Right\"]=function(e){return this.reverse()[t](e).reverse()}}),c([\"filter\",\"map\",\"takeWhile\"],function(t,e){var n=e+1,r=n==Ot||3==n;_.prototype[t]=function(t){var e=this.clone();return e.__iteratees__.push({iteratee:yo(t,3),type:n}),e.__filtered__=e.__filtered__||r,e}}),c([\"head\",\"last\"],function(t,e){var n=\"take\"+(e?\"Right\":\"\");_.prototype[t]=function(){return this[n](1).value()[0]}}),c([\"initial\",\"tail\"],function(t,e){var n=\"drop\"+(e?\"\":\"Right\");_.prototype[t]=function(){return this.__filtered__?new _(this):this[n](1)}}),_.prototype.compact=function(){return this.filter(kc)},_.prototype.find=function(t){return this.filter(t).head()},_.prototype.findLast=function(t){return this.reverse().find(t)},_.prototype.invokeMap=Zr(function(t,e){return\"function\"==typeof t?new _(this):this.map(function(n){return wr(n,t,e)})}),_.prototype.reject=function(t){return this.filter(Es(yo(t)))},_.prototype.slice=function(t,e){t=yu(t);var n=this;return n.__filtered__&&(t>0||e<0)?new _(n):(t<0?n=n.takeRight(-t):t&&(n=n.drop(t)),e!==it&&(e=yu(e),n=e<0?n.dropRight(-e):n.take(e-t)),n)},_.prototype.takeRightWhile=function(t){return this.reverse().takeWhile(t).reverse()},_.prototype.toArray=function(){return this.take(Rt)},cr(_.prototype,function(t,e){var r=/^(?:filter|find|map|reject)|While$/.test(e),o=/^(?:head|last)$/.test(e),a=n[o?\"take\"+(\"last\"==e?\"Right\":\"\"):e],s=o||/^find/.test(e);a&&(n.prototype[e]=function(){var e=this.__wrapped__,u=o?[1]:arguments,c=e instanceof _,l=u[0],f=c||dp(e),p=function(t){var e=a.apply(n,g([t],u));return o&&d?e[0]:e};f&&r&&\"function\"==typeof l&&1!=l.length&&(c=f=!1);var d=this.__chain__,h=!!this.__actions__.length,v=s&&!d,m=c&&!h;if(!s&&f){e=m?e:new _(this);var y=t.apply(e,u);return y.__actions__.push({func:Ka,args:[p],thisArg:it}),new i(y,d)}return v&&m?t.apply(this,u):(y=this.thru(p),v?o?y.value()[0]:y.value():y)})}),c([\"pop\",\"push\",\"shift\",\"sort\",\"splice\",\"unshift\"],function(t){var e=sl[t],r=/^(?:push|sort|unshift)$/.test(t)?\"tap\":\"thru\",i=/^(?:pop|shift)$/.test(t);n.prototype[t]=function(){var t=arguments;if(i&&!this.__chain__){var n=this.value();return e.apply(dp(n)?n:[],t)}return this[r](function(n){return e.apply(dp(n)?n:[],t)})}}),cr(_.prototype,function(t,e){var r=n[e];if(r){var i=r.name+\"\";(tf[i]||(tf[i]=[])).push({name:e,func:r})}}),tf[Ki(it,mt).name]=[{name:\"wrapper\",func:it}],_.prototype.clone=S,_.prototype.reverse=G,_.prototype.value=et,n.prototype.at=Vf,n.prototype.chain=Ja,n.prototype.commit=Qa,n.prototype.next=Ga,n.prototype.plant=Ya,n.prototype.reverse=ts,n.prototype.toJSON=n.prototype.valueOf=n.prototype.value=es,n.prototype.first=n.prototype.head,El&&(n.prototype[El]=Za),n}();Sn._=zn,(i=function(){return zn}.call(e,n,e,r))!==it&&(r.exports=i)}).call(this)}).call(e,n(7),n(38)(t))},function(t,e){function n(){throw new Error(\"setTimeout has not been defined\")}function r(){throw new Error(\"clearTimeout has not been defined\")}function i(t){if(l===setTimeout)return setTimeout(t,0);if((l===n||!l)&&setTimeout)return l=setTimeout,setTimeout(t,0);try{return l(t,0)}catch(e){try{return l.call(null,t,0)}catch(e){return l.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===r||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function a(){v&&d&&(v=!1,d.length?h=d.concat(h):g=-1,h.length&&s())}function s(){if(!v){var t=i(a);v=!0;for(var e=h.length;e;){for(d=h,h=[];++g<e;)d&&d[g].run();g=-1,e=h.length}d=null,v=!1,o(t)}}function u(t,e){this.fun=t,this.array=e}function c(){}var l,f,p=t.exports={};!function(){try{l=\"function\"==typeof setTimeout?setTimeout:n}catch(t){l=n}try{f=\"function\"==typeof clearTimeout?clearTimeout:r}catch(t){f=r}}();var d,h=[],v=!1,g=-1;p.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var n=1;n<arguments.length;n++)e[n-1]=arguments[n];h.push(new u(t,e)),1!==h.length||v||i(s)},u.prototype.run=function(){this.fun.apply(null,this.array)},p.title=\"browser\",p.browser=!0,p.env={},p.argv=[],p.version=\"\",p.versions={},p.on=c,p.addListener=c,p.once=c,p.off=c,p.removeListener=c,p.removeAllListeners=c,p.emit=c,p.prependListener=c,p.prependOnceListener=c,p.listeners=function(t){return[]},p.binding=function(t){throw new Error(\"process.binding is not supported\")},p.cwd=function(){return\"/\"},p.chdir=function(t){throw new Error(\"process.chdir is not supported\")},p.umask=function(){return 0}},function(t,e,n){var r=n(35)(n(28),n(36),null,null);t.exports=r.exports},function(t,e){t.exports=function(t,e,n,r){var i,o=t=t||{},a=typeof t.default;\"object\"!==a&&\"function\"!==a||(i=t,o=t.default);var s=\"function\"==typeof o?o.options:o;if(e&&(s.render=e.render,s.staticRenderFns=e.staticRenderFns),n&&(s._scopeId=n),r){var u=Object.create(s.computed||null);Object.keys(r).forEach(function(t){var e=r[t];u[t]=function(){return e}}),s.computed=u}return{esModule:i,exports:o,options:s}}},function(t,e){t.exports={render:function(){var t=this,e=t.$createElement;t._self._c;return t._m(0)},staticRenderFns:[function(){var t=this,e=t.$createElement,n=t._self._c||e;return n(\"div\",{staticClass:\"container\"},[n(\"div\",{staticClass:\"row\"},[n(\"div\",{staticClass:\"col-md-8 col-md-offset-2\"},[n(\"div\",{staticClass:\"panel panel-default\"},[n(\"div\",{staticClass:\"panel-heading\"},[t._v(\"Example Component\")]),t._v(\" \"),n(\"div\",{staticClass:\"panel-body\"},[t._v(\"\\n                    I'm an example component!\\n                \")])])])])])}]}},function(t,e,n){\"use strict\";(function(e){/*!\n * Vue.js v2.3.3\n * (c) 2014-2017 Evan You\n * Released under the MIT License.\n */\nfunction n(t){return void 0===t||null===t}function r(t){return void 0!==t&&null!==t}function i(t){return!0===t}function o(t){return!1===t}function a(t){return\"string\"==typeof t||\"number\"==typeof t}function s(t){return null!==t&&\"object\"==typeof t}function u(t){return\"[object Object]\"===ji.call(t)}function c(t){return\"[object RegExp]\"===ji.call(t)}function l(t){return null==t?\"\":\"object\"==typeof t?JSON.stringify(t,null,2):String(t)}function f(t){var e=parseFloat(t);return isNaN(e)?t:e}function p(t,e){for(var n=Object.create(null),r=t.split(\",\"),i=0;i<r.length;i++)n[r[i]]=!0;return e?function(t){return n[t.toLowerCase()]}:function(t){return n[t]}}function d(t,e){if(t.length){var n=t.indexOf(e);if(n>-1)return t.splice(n,1)}}function h(t,e){return Di.call(t,e)}function v(t){var e=Object.create(null);return function(n){return e[n]||(e[n]=t(n))}}function g(t,e){function n(n){var r=arguments.length;return r?r>1?t.apply(e,arguments):t.call(e,n):t.call(e)}return n._length=t.length,n}function m(t,e){e=e||0;for(var n=t.length-e,r=new Array(n);n--;)r[n]=t[n+e];return r}function y(t,e){for(var n in e)t[n]=e[n];return t}function b(t){for(var e={},n=0;n<t.length;n++)t[n]&&y(e,t[n]);return e}function _(){}function w(t,e){var n=s(t),r=s(e);if(!n||!r)return!n&&!r&&String(t)===String(e);try{return JSON.stringify(t)===JSON.stringify(e)}catch(n){return t===e}}function x(t,e){for(var n=0;n<t.length;n++)if(w(t[n],e))return n;return-1}function C(t){var e=!1;return function(){e||(e=!0,t.apply(this,arguments))}}function T(t){var e=(t+\"\").charCodeAt(0);return 36===e||95===e}function $(t,e,n,r){Object.defineProperty(t,e,{value:n,enumerable:!!r,writable:!0,configurable:!0})}function k(t){if(!Wi.test(t)){var e=t.split(\".\");return function(t){for(var n=0;n<e.length;n++){if(!t)return;t=t[e[n]]}return t}}}function A(t,e,n){if(Bi.errorHandler)Bi.errorHandler.call(null,t,e,n);else if(!Xi||\"undefined\"==typeof console)throw t}function E(t){return\"function\"==typeof t&&/native code/.test(t.toString())}function S(t){lo.target&&fo.push(lo.target),lo.target=t}function O(){lo.target=fo.pop()}function j(t,e){t.__proto__=e}function N(t,e,n){for(var r=0,i=n.length;r<i;r++){var o=n[r];$(t,o,e[o])}}function D(t,e){if(s(t)){var n;return h(t,\"__ob__\")&&t.__ob__ instanceof mo?n=t.__ob__:go.shouldConvert&&!oo()&&(Array.isArray(t)||u(t))&&Object.isExtensible(t)&&!t._isVue&&(n=new mo(t)),e&&n&&n.vmCount++,n}}function I(t,e,n,r){var i=new lo,o=Object.getOwnPropertyDescriptor(t,e);if(!o||!1!==o.configurable){var a=o&&o.get,s=o&&o.set,u=D(n);Object.defineProperty(t,e,{enumerable:!0,configurable:!0,get:function(){var e=a?a.call(t):n;return lo.target&&(i.depend(),u&&u.dep.depend(),Array.isArray(e)&&P(e)),e},set:function(e){var r=a?a.call(t):n;e===r||e!==e&&r!==r||(s?s.call(t,e):n=e,u=D(e),i.notify())}})}}function L(t,e,n){if(Array.isArray(t)&&\"number\"==typeof e)return t.length=Math.max(t.length,e),t.splice(e,1,n),n;if(h(t,e))return t[e]=n,n;var r=t.__ob__;return t._isVue||r&&r.vmCount?n:r?(I(r.value,e,n),r.dep.notify(),n):(t[e]=n,n)}function R(t,e){if(Array.isArray(t)&&\"number\"==typeof e)return void t.splice(e,1);var n=t.__ob__;t._isVue||n&&n.vmCount||h(t,e)&&(delete t[e],n&&n.dep.notify())}function P(t){for(var e=void 0,n=0,r=t.length;n<r;n++)e=t[n],e&&e.__ob__&&e.__ob__.dep.depend(),Array.isArray(e)&&P(e)}function F(t,e){if(!e)return t;for(var n,r,i,o=Object.keys(e),a=0;a<o.length;a++)n=o[a],r=t[n],i=e[n],h(t,n)?u(r)&&u(i)&&F(r,i):L(t,n,i);return t}function q(t,e){return e?t?t.concat(e):Array.isArray(e)?e:[e]:t}function M(t,e){var n=Object.create(t||null);return e?y(n,e):n}function H(t){var e=t.props;if(e){var n,r,i,o={};if(Array.isArray(e))for(n=e.length;n--;)\"string\"==typeof(r=e[n])&&(i=Ii(r),o[i]={type:null});else if(u(e))for(var a in e)r=e[a],i=Ii(a),o[i]=u(r)?r:{type:r};t.props=o}}function B(t){var e=t.directives;if(e)for(var n in e){var r=e[n];\"function\"==typeof r&&(e[n]={bind:r,update:r})}}function U(t,e,n){function r(r){var i=yo[r]||bo;u[r]=i(t[r],e[r],n,r)}\"function\"==typeof e&&(e=e.options),H(e),B(e);var i=e.extends;if(i&&(t=U(t,i,n)),e.mixins)for(var o=0,a=e.mixins.length;o<a;o++)t=U(t,e.mixins[o],n);var s,u={};for(s in t)r(s);for(s in e)h(t,s)||r(s);return u}function W(t,e,n,r){if(\"string\"==typeof n){var i=t[e];if(h(i,n))return i[n];var o=Ii(n);if(h(i,o))return i[o];var a=Li(o);if(h(i,a))return i[a];return i[n]||i[o]||i[a]}}function z(t,e,n,r){var i=e[t],o=!h(n,t),a=n[t];if(K(Boolean,i.type)&&(o&&!h(i,\"default\")?a=!1:K(String,i.type)||\"\"!==a&&a!==Ri(t)||(a=!0)),void 0===a){a=V(r,i,t);var s=go.shouldConvert;go.shouldConvert=!0,D(a),go.shouldConvert=s}return a}function V(t,e,n){if(h(e,\"default\")){var r=e.default;return t&&t.$options.propsData&&void 0===t.$options.propsData[n]&&void 0!==t._props[n]?t._props[n]:\"function\"==typeof r&&\"Function\"!==X(e.type)?r.call(t):r}}function X(t){var e=t&&t.toString().match(/^\\s*function (\\w+)/);return e?e[1]:\"\"}function K(t,e){if(!Array.isArray(e))return X(e)===X(t);for(var n=0,r=e.length;n<r;n++)if(X(e[n])===X(t))return!0;return!1}function J(t){return new _o(void 0,void 0,void 0,String(t))}function Q(t){var e=new _o(t.tag,t.data,t.children,t.text,t.elm,t.context,t.componentOptions);return e.ns=t.ns,e.isStatic=t.isStatic,e.key=t.key,e.isComment=t.isComment,e.isCloned=!0,e}function G(t){for(var e=t.length,n=new Array(e),r=0;r<e;r++)n[r]=Q(t[r]);return n}function Z(t){function e(){var t=arguments,n=e.fns;if(!Array.isArray(n))return n.apply(null,arguments);for(var r=0;r<n.length;r++)n[r].apply(null,t)}return e.fns=t,e}function Y(t,e,r,i,o){var a,s,u,c;for(a in t)s=t[a],u=e[a],c=To(a),n(s)||(n(u)?(n(s.fns)&&(s=t[a]=Z(s)),r(c.name,s,c.once,c.capture,c.passive)):s!==u&&(u.fns=s,t[a]=u));for(a in e)n(t[a])&&(c=To(a),i(c.name,e[a],c.capture))}function tt(t,e,o){function a(){o.apply(this,arguments),d(s.fns,a)}var s,u=t[e];n(u)?s=Z([a]):r(u.fns)&&i(u.merged)?(s=u,s.fns.push(a)):s=Z([u,a]),s.merged=!0,t[e]=s}function et(t,e,i){var o=e.options.props;if(!n(o)){var a={},s=t.attrs,u=t.props;if(r(s)||r(u))for(var c in o){var l=Ri(c);nt(a,u,c,l,!0)||nt(a,s,c,l,!1)}return a}}function nt(t,e,n,i,o){if(r(e)){if(h(e,n))return t[n]=e[n],o||delete e[n],!0;if(h(e,i))return t[n]=e[i],o||delete e[i],!0}return!1}function rt(t){for(var e=0;e<t.length;e++)if(Array.isArray(t[e]))return Array.prototype.concat.apply([],t);return t}function it(t){return a(t)?[J(t)]:Array.isArray(t)?at(t):void 0}function ot(t){return r(t)&&r(t.text)&&o(t.isComment)}function at(t,e){var o,s,u,c=[];for(o=0;o<t.length;o++)s=t[o],n(s)||\"boolean\"==typeof s||(u=c[c.length-1],Array.isArray(s)?c.push.apply(c,at(s,(e||\"\")+\"_\"+o)):a(s)?ot(u)?u.text+=String(s):\"\"!==s&&c.push(J(s)):ot(s)&&ot(u)?c[c.length-1]=J(u.text+s.text):(i(t._isVList)&&r(s.tag)&&n(s.key)&&r(e)&&(s.key=\"__vlist\"+e+\"_\"+o+\"__\"),c.push(s)));return c}function st(t,e){return s(t)?e.extend(t):t}function ut(t,e,o){if(i(t.error)&&r(t.errorComp))return t.errorComp;if(r(t.resolved))return t.resolved;if(i(t.loading)&&r(t.loadingComp))return t.loadingComp;if(!r(t.contexts)){var a=t.contexts=[o],u=!0,c=function(){for(var t=0,e=a.length;t<e;t++)a[t].$forceUpdate()},l=C(function(n){t.resolved=st(n,e),u||c()}),f=C(function(e){r(t.errorComp)&&(t.error=!0,c())}),p=t(l,f);return s(p)&&(\"function\"==typeof p.then?n(t.resolved)&&p.then(l,f):r(p.component)&&\"function\"==typeof p.component.then&&(p.component.then(l,f),r(p.error)&&(t.errorComp=st(p.error,e)),r(p.loading)&&(t.loadingComp=st(p.loading,e),0===p.delay?t.loading=!0:setTimeout(function(){n(t.resolved)&&n(t.error)&&(t.loading=!0,c())},p.delay||200)),r(p.timeout)&&setTimeout(function(){n(t.resolved)&&f(null)},p.timeout))),u=!1,t.loading?t.loadingComp:t.resolved}t.contexts.push(o)}function ct(t){if(Array.isArray(t))for(var e=0;e<t.length;e++){var n=t[e];if(r(n)&&r(n.componentOptions))return n}}function lt(t){t._events=Object.create(null),t._hasHookEvent=!1;var e=t.$options._parentListeners;e&&dt(t,e)}function ft(t,e,n){n?xo.$once(t,e):xo.$on(t,e)}function pt(t,e){xo.$off(t,e)}function dt(t,e,n){xo=t,Y(e,n||{},ft,pt,t)}function ht(t,e){var n={};if(!t)return n;for(var r=[],i=0,o=t.length;i<o;i++){var a=t[i];if(a.context!==e&&a.functionalContext!==e||!a.data||null==a.data.slot)r.push(a);else{var s=a.data.slot,u=n[s]||(n[s]=[]);\"template\"===a.tag?u.push.apply(u,a.children):u.push(a)}}return r.every(vt)||(n.default=r),n}function vt(t){return t.isComment||\" \"===t.text}function gt(t,e){e=e||{};for(var n=0;n<t.length;n++)Array.isArray(t[n])?gt(t[n],e):e[t[n].key]=t[n].fn;return e}function mt(t){var e=t.$options,n=e.parent;if(n&&!e.abstract){for(;n.$options.abstract&&n.$parent;)n=n.$parent;n.$children.push(t)}t.$parent=n,t.$root=n?n.$root:t,t.$children=[],t.$refs={},t._watcher=null,t._inactive=null,t._directInactive=!1,t._isMounted=!1,t._isDestroyed=!1,t._isBeingDestroyed=!1}function yt(t,e,n){t.$el=e,t.$options.render||(t.$options.render=Co),Ct(t,\"beforeMount\");var r;return r=function(){t._update(t._render(),n)},t._watcher=new Do(t,r,_),n=!1,null==t.$vnode&&(t._isMounted=!0,Ct(t,\"mounted\")),t}function bt(t,e,n,r,i){var o=!!(i||t.$options._renderChildren||r.data.scopedSlots||t.$scopedSlots!==Ui);if(t.$options._parentVnode=r,t.$vnode=r,t._vnode&&(t._vnode.parent=r),t.$options._renderChildren=i,e&&t.$options.props){go.shouldConvert=!1;for(var a=t._props,s=t.$options._propKeys||[],u=0;u<s.length;u++){var c=s[u];a[c]=z(c,t.$options.props,e,t)}go.shouldConvert=!0,t.$options.propsData=e}if(n){var l=t.$options._parentListeners;t.$options._parentListeners=n,dt(t,n,l)}o&&(t.$slots=ht(i,r.context),t.$forceUpdate())}function _t(t){for(;t&&(t=t.$parent);)if(t._inactive)return!0;return!1}function wt(t,e){if(e){if(t._directInactive=!1,_t(t))return}else if(t._directInactive)return;if(t._inactive||null===t._inactive){t._inactive=!1;for(var n=0;n<t.$children.length;n++)wt(t.$children[n]);Ct(t,\"activated\")}}function xt(t,e){if(!(e&&(t._directInactive=!0,_t(t))||t._inactive)){t._inactive=!0;for(var n=0;n<t.$children.length;n++)xt(t.$children[n]);Ct(t,\"deactivated\")}}function Ct(t,e){var n=t.$options[e];if(n)for(var r=0,i=n.length;r<i;r++)try{n[r].call(t)}catch(n){A(n,t,e+\" hook\")}t._hasHookEvent&&t.$emit(\"hook:\"+e)}function Tt(){jo=ko.length=Ao.length=0,Eo={},So=Oo=!1}function $t(){Oo=!0;var t,e;for(ko.sort(function(t,e){return t.id-e.id}),jo=0;jo<ko.length;jo++)t=ko[jo],e=t.id,Eo[e]=null,t.run();var n=Ao.slice(),r=ko.slice();Tt(),Et(n),kt(r),ao&&Bi.devtools&&ao.emit(\"flush\")}function kt(t){for(var e=t.length;e--;){var n=t[e],r=n.vm;r._watcher===n&&r._isMounted&&Ct(r,\"updated\")}}function At(t){t._inactive=!1,Ao.push(t)}function Et(t){for(var e=0;e<t.length;e++)t[e]._inactive=!0,wt(t[e],!0)}function St(t){var e=t.id;if(null==Eo[e]){if(Eo[e]=!0,Oo){for(var n=ko.length-1;n>jo&&ko[n].id>t.id;)n--;ko.splice(n+1,0,t)}else ko.push(t);So||(So=!0,uo($t))}}function Ot(t){Io.clear(),jt(t,Io)}function jt(t,e){var n,r,i=Array.isArray(t);if((i||s(t))&&Object.isExtensible(t)){if(t.__ob__){var o=t.__ob__.dep.id;if(e.has(o))return;e.add(o)}if(i)for(n=t.length;n--;)jt(t[n],e);else for(r=Object.keys(t),n=r.length;n--;)jt(t[r[n]],e)}}function Nt(t,e,n){Lo.get=function(){return this[e][n]},Lo.set=function(t){this[e][n]=t},Object.defineProperty(t,n,Lo)}function Dt(t){t._watchers=[];var e=t.$options;e.props&&It(t,e.props),e.methods&&Mt(t,e.methods),e.data?Lt(t):D(t._data={},!0),e.computed&&Pt(t,e.computed),e.watch&&Ht(t,e.watch)}function It(t,e){var n=t.$options.propsData||{},r=t._props={},i=t.$options._propKeys=[],o=!t.$parent;go.shouldConvert=o;for(var a in e)!function(o){i.push(o);var a=z(o,e,n,t);I(r,o,a),o in t||Nt(t,\"_props\",o)}(a);go.shouldConvert=!0}function Lt(t){var e=t.$options.data;e=t._data=\"function\"==typeof e?Rt(e,t):e||{},u(e)||(e={});for(var n=Object.keys(e),r=t.$options.props,i=n.length;i--;)r&&h(r,n[i])||T(n[i])||Nt(t,\"_data\",n[i]);D(e,!0)}function Rt(t,e){try{return t.call(e)}catch(t){return A(t,e,\"data()\"),{}}}function Pt(t,e){var n=t._computedWatchers=Object.create(null);for(var r in e){var i=e[r],o=\"function\"==typeof i?i:i.get;n[r]=new Do(t,o,_,Ro),r in t||Ft(t,r,i)}}function Ft(t,e,n){\"function\"==typeof n?(Lo.get=qt(e),Lo.set=_):(Lo.get=n.get?!1!==n.cache?qt(e):n.get:_,Lo.set=n.set?n.set:_),Object.defineProperty(t,e,Lo)}function qt(t){return function(){var e=this._computedWatchers&&this._computedWatchers[t];if(e)return e.dirty&&e.evaluate(),lo.target&&e.depend(),e.value}}function Mt(t,e){t.$options.props;for(var n in e)t[n]=null==e[n]?_:g(e[n],t)}function Ht(t,e){for(var n in e){var r=e[n];if(Array.isArray(r))for(var i=0;i<r.length;i++)Bt(t,n,r[i]);else Bt(t,n,r)}}function Bt(t,e,n){var r;u(n)&&(r=n,n=n.handler),\"string\"==typeof n&&(n=t[n]),t.$watch(e,n,r)}function Ut(t){var e=t.$options.provide;e&&(t._provided=\"function\"==typeof e?e.call(t):e)}function Wt(t){var e=zt(t.$options.inject,t);e&&Object.keys(e).forEach(function(n){I(t,n,e[n])})}function zt(t,e){if(t){for(var n=Array.isArray(t),r=Object.create(null),i=n?t:so?Reflect.ownKeys(t):Object.keys(t),o=0;o<i.length;o++)for(var a=i[o],s=n?a:t[a],u=e;u;){if(u._provided&&s in u._provided){r[a]=u._provided[s];break}u=u.$parent}return r}}function Vt(t,e,n,i,o){var a={},s=t.options.props;if(r(s))for(var u in s)a[u]=z(u,s,e||{});else r(n.attrs)&&Xt(a,n.attrs),r(n.props)&&Xt(a,n.props);var c=Object.create(i),l=function(t,e,n,r){return Yt(c,t,e,n,r,!0)},f=t.options.render.call(null,l,{data:n,props:a,children:o,parent:i,listeners:n.on||{},injections:zt(t.options.inject,i),slots:function(){return ht(o,i)}});return f instanceof _o&&(f.functionalContext=i,f.functionalOptions=t.options,n.slot&&((f.data||(f.data={})).slot=n.slot)),f}function Xt(t,e){for(var n in e)t[Ii(n)]=e[n]}function Kt(t,e,o,a,u){if(!n(t)){var c=o.$options._base;if(s(t)&&(t=c.extend(t)),\"function\"==typeof t&&(!n(t.cid)||void 0!==(t=ut(t,c,o)))){de(t),e=e||{},r(e.model)&&Zt(t.options,e);var l=et(e,t,u);if(i(t.options.functional))return Vt(t,l,e,o,a);var f=e.on;e.on=e.nativeOn,i(t.options.abstract)&&(e={}),Qt(e);var p=t.options.name||u;return new _o(\"vue-component-\"+t.cid+(p?\"-\"+p:\"\"),e,void 0,void 0,void 0,o,{Ctor:t,propsData:l,listeners:f,tag:u,children:a})}}}function Jt(t,e,n,i){var o=t.componentOptions,a={_isComponent:!0,parent:e,propsData:o.propsData,_componentTag:o.tag,_parentVnode:t,_parentListeners:o.listeners,_renderChildren:o.children,_parentElm:n||null,_refElm:i||null},s=t.data.inlineTemplate;return r(s)&&(a.render=s.render,a.staticRenderFns=s.staticRenderFns),new o.Ctor(a)}function Qt(t){t.hook||(t.hook={});for(var e=0;e<Fo.length;e++){var n=Fo[e],r=t.hook[n],i=Po[n];t.hook[n]=r?Gt(i,r):i}}function Gt(t,e){return function(n,r,i,o){t(n,r,i,o),e(n,r,i,o)}}function Zt(t,e){var n=t.model&&t.model.prop||\"value\",i=t.model&&t.model.event||\"input\";(e.props||(e.props={}))[n]=e.model.value;var o=e.on||(e.on={});r(o[i])?o[i]=[e.model.callback].concat(o[i]):o[i]=e.model.callback}function Yt(t,e,n,r,o,s){return(Array.isArray(n)||a(n))&&(o=r,r=n,n=void 0),i(s)&&(o=Mo),te(t,e,n,r,o)}function te(t,e,n,i,o){if(r(n)&&r(n.__ob__))return Co();if(!e)return Co();Array.isArray(i)&&\"function\"==typeof i[0]&&(n=n||{},n.scopedSlots={default:i[0]},i.length=0),o===Mo?i=it(i):o===qo&&(i=rt(i));var a,s;if(\"string\"==typeof e){var u;s=Bi.getTagNamespace(e),a=Bi.isReservedTag(e)?new _o(Bi.parsePlatformTagName(e),n,i,void 0,void 0,t):r(u=W(t.$options,\"components\",e))?Kt(u,n,t,i,e):new _o(e,n,i,void 0,void 0,t)}else a=Kt(e,n,t,i);return r(a)?(s&&ee(a,s),a):Co()}function ee(t,e){if(t.ns=e,\"foreignObject\"!==t.tag&&r(t.children))for(var i=0,o=t.children.length;i<o;i++){var a=t.children[i];r(a.tag)&&n(a.ns)&&ee(a,e)}}function ne(t,e){var n,i,o,a,u;if(Array.isArray(t)||\"string\"==typeof t)for(n=new Array(t.length),i=0,o=t.length;i<o;i++)n[i]=e(t[i],i);else if(\"number\"==typeof t)for(n=new Array(t),i=0;i<t;i++)n[i]=e(i+1,i);else if(s(t))for(a=Object.keys(t),n=new Array(a.length),i=0,o=a.length;i<o;i++)u=a[i],n[i]=e(t[u],u,i);return r(n)&&(n._isVList=!0),n}function re(t,e,n,r){var i=this.$scopedSlots[t];if(i)return n=n||{},r&&y(n,r),i(n)||e;var o=this.$slots[t];return o||e}function ie(t){return W(this.$options,\"filters\",t,!0)||Fi}function oe(t,e,n){var r=Bi.keyCodes[e]||n;return Array.isArray(r)?-1===r.indexOf(t):r!==t}function ae(t,e,n,r){if(n)if(s(n)){Array.isArray(n)&&(n=b(n));var i;for(var o in n){if(\"class\"===o||\"style\"===o)i=t;else{var a=t.attrs&&t.attrs.type;i=r||Bi.mustUseProp(e,a,o)?t.domProps||(t.domProps={}):t.attrs||(t.attrs={})}o in i||(i[o]=n[o])}}else;return t}function se(t,e){var n=this._staticTrees[t];return n&&!e?Array.isArray(n)?G(n):Q(n):(n=this._staticTrees[t]=this.$options.staticRenderFns[t].call(this._renderProxy),ce(n,\"__static__\"+t,!1),n)}function ue(t,e,n){return ce(t,\"__once__\"+e+(n?\"_\"+n:\"\"),!0),t}function ce(t,e,n){if(Array.isArray(t))for(var r=0;r<t.length;r++)t[r]&&\"string\"!=typeof t[r]&&le(t[r],e+\"_\"+r,n);else le(t,e,n)}function le(t,e,n){t.isStatic=!0,t.key=e,t.isOnce=n}function fe(t){t._vnode=null,t._staticTrees=null;var e=t.$vnode=t.$options._parentVnode,n=e&&e.context;t.$slots=ht(t.$options._renderChildren,n),t.$scopedSlots=Ui,t._c=function(e,n,r,i){return Yt(t,e,n,r,i,!1)},t.$createElement=function(e,n,r,i){return Yt(t,e,n,r,i,!0)}}function pe(t,e){var n=t.$options=Object.create(t.constructor.options);n.parent=e.parent,n.propsData=e.propsData,n._parentVnode=e._parentVnode,n._parentListeners=e._parentListeners,n._renderChildren=e._renderChildren,n._componentTag=e._componentTag,n._parentElm=e._parentElm,n._refElm=e._refElm,e.render&&(n.render=e.render,n.staticRenderFns=e.staticRenderFns)}function de(t){var e=t.options;if(t.super){var n=de(t.super);if(n!==t.superOptions){t.superOptions=n;var r=he(t);r&&y(t.extendOptions,r),e=t.options=U(n,t.extendOptions),e.name&&(e.components[e.name]=t)}}return e}function he(t){var e,n=t.options,r=t.extendOptions,i=t.sealedOptions;for(var o in n)n[o]!==i[o]&&(e||(e={}),e[o]=ve(n[o],r[o],i[o]));return e}function ve(t,e,n){if(Array.isArray(t)){var r=[];n=Array.isArray(n)?n:[n],e=Array.isArray(e)?e:[e];for(var i=0;i<t.length;i++)(e.indexOf(t[i])>=0||n.indexOf(t[i])<0)&&r.push(t[i]);return r}return t}function ge(t){this._init(t)}function me(t){t.use=function(t){if(t.installed)return this;var e=m(arguments,1);return e.unshift(this),\"function\"==typeof t.install?t.install.apply(t,e):\"function\"==typeof t&&t.apply(null,e),t.installed=!0,this}}function ye(t){t.mixin=function(t){return this.options=U(this.options,t),this}}function be(t){t.cid=0;var e=1;t.extend=function(t){t=t||{};var n=this,r=n.cid,i=t._Ctor||(t._Ctor={});if(i[r])return i[r];var o=t.name||n.options.name,a=function(t){this._init(t)};return a.prototype=Object.create(n.prototype),a.prototype.constructor=a,a.cid=e++,a.options=U(n.options,t),a.super=n,a.options.props&&_e(a),a.options.computed&&we(a),a.extend=n.extend,a.mixin=n.mixin,a.use=n.use,Mi.forEach(function(t){a[t]=n[t]}),o&&(a.options.components[o]=a),a.superOptions=n.options,a.extendOptions=t,a.sealedOptions=y({},a.options),i[r]=a,a}}function _e(t){var e=t.options.props;for(var n in e)Nt(t.prototype,\"_props\",n)}function we(t){var e=t.options.computed;for(var n in e)Ft(t.prototype,n,e[n])}function xe(t){Mi.forEach(function(e){t[e]=function(t,n){return n?(\"component\"===e&&u(n)&&(n.name=n.name||t,n=this.options._base.extend(n)),\"directive\"===e&&\"function\"==typeof n&&(n={bind:n,update:n}),this.options[e+\"s\"][t]=n,n):this.options[e+\"s\"][t]}})}function Ce(t){return t&&(t.Ctor.options.name||t.tag)}function Te(t,e){return\"string\"==typeof t?t.split(\",\").indexOf(e)>-1:!!c(t)&&t.test(e)}function $e(t,e,n){for(var r in t){var i=t[r];if(i){var o=Ce(i.componentOptions);o&&!n(o)&&(i!==e&&ke(i),t[r]=null)}}}function ke(t){t&&t.componentInstance.$destroy()}function Ae(t){for(var e=t.data,n=t,i=t;r(i.componentInstance);)i=i.componentInstance._vnode,i.data&&(e=Ee(i.data,e));for(;r(n=n.parent);)n.data&&(e=Ee(e,n.data));return Se(e)}function Ee(t,e){return{staticClass:Oe(t.staticClass,e.staticClass),class:r(t.class)?[t.class,e.class]:e.class}}function Se(t){var e=t.class,n=t.staticClass;return r(n)||r(e)?Oe(n,je(e)):\"\"}function Oe(t,e){return t?e?t+\" \"+e:t:e||\"\"}function je(t){if(n(t))return\"\";if(\"string\"==typeof t)return t;var e=\"\";if(Array.isArray(t)){for(var i,o=0,a=t.length;o<a;o++)r(t[o])&&r(i=je(t[o]))&&\"\"!==i&&(e+=i+\" \");return e.slice(0,-1)}if(s(t)){for(var u in t)t[u]&&(e+=u+\" \");return e.slice(0,-1)}return e}function Ne(t){return fa(t)?\"svg\":\"math\"===t?\"math\":void 0}function De(t){if(!Xi)return!0;if(da(t))return!1;if(t=t.toLowerCase(),null!=ha[t])return ha[t];var e=document.createElement(t);return t.indexOf(\"-\")>-1?ha[t]=e.constructor===window.HTMLUnknownElement||e.constructor===window.HTMLElement:ha[t]=/HTMLUnknownElement/.test(e.toString())}function Ie(t){if(\"string\"==typeof t){var e=document.querySelector(t);return e||document.createElement(\"div\")}return t}function Le(t,e){var n=document.createElement(t);return\"select\"!==t?n:(e.data&&e.data.attrs&&void 0!==e.data.attrs.multiple&&n.setAttribute(\"multiple\",\"multiple\"),n)}function Re(t,e){return document.createElementNS(ca[t],e)}function Pe(t){return document.createTextNode(t)}function Fe(t){return document.createComment(t)}function qe(t,e,n){t.insertBefore(e,n)}function Me(t,e){t.removeChild(e)}function He(t,e){t.appendChild(e)}function Be(t){return t.parentNode}function Ue(t){return t.nextSibling}function We(t){return t.tagName}function ze(t,e){t.textContent=e}function Ve(t,e,n){t.setAttribute(e,n)}function Xe(t,e){var n=t.data.ref;if(n){var r=t.context,i=t.componentInstance||t.elm,o=r.$refs;e?Array.isArray(o[n])?d(o[n],i):o[n]===i&&(o[n]=void 0):t.data.refInFor?Array.isArray(o[n])&&o[n].indexOf(i)<0?o[n].push(i):o[n]=[i]:o[n]=i}}function Ke(t,e){return t.key===e.key&&t.tag===e.tag&&t.isComment===e.isComment&&r(t.data)===r(e.data)&&Je(t,e)}function Je(t,e){if(\"input\"!==t.tag)return!0;var n;return(r(n=t.data)&&r(n=n.attrs)&&n.type)===(r(n=e.data)&&r(n=n.attrs)&&n.type)}function Qe(t,e,n){var i,o,a={};for(i=e;i<=n;++i)o=t[i].key,r(o)&&(a[o]=i);return a}function Ge(t,e){(t.data.directives||e.data.directives)&&Ze(t,e)}function Ze(t,e){var n,r,i,o=t===ma,a=e===ma,s=Ye(t.data.directives,t.context),u=Ye(e.data.directives,e.context),c=[],l=[];for(n in u)r=s[n],i=u[n],r?(i.oldValue=r.value,en(i,\"update\",e,t),i.def&&i.def.componentUpdated&&l.push(i)):(en(i,\"bind\",e,t),i.def&&i.def.inserted&&c.push(i));if(c.length){var f=function(){for(var n=0;n<c.length;n++)en(c[n],\"inserted\",e,t)};o?tt(e.data.hook||(e.data.hook={}),\"insert\",f):f()}if(l.length&&tt(e.data.hook||(e.data.hook={}),\"postpatch\",function(){for(var n=0;n<l.length;n++)en(l[n],\"componentUpdated\",e,t)}),!o)for(n in s)u[n]||en(s[n],\"unbind\",t,t,a)}function Ye(t,e){var n=Object.create(null);if(!t)return n;var r,i;for(r=0;r<t.length;r++)i=t[r],i.modifiers||(i.modifiers=_a),n[tn(i)]=i,i.def=W(e.$options,\"directives\",i.name,!0);return n}function tn(t){return t.rawName||t.name+\".\"+Object.keys(t.modifiers||{}).join(\".\")}function en(t,e,n,r,i){var o=t.def&&t.def[e];if(o)try{o(n.elm,t,n,r,i)}catch(r){A(r,n.context,\"directive \"+t.name+\" \"+e+\" hook\")}}function nn(t,e){if(!n(t.data.attrs)||!n(e.data.attrs)){var i,o,a=e.elm,s=t.data.attrs||{},u=e.data.attrs||{};r(u.__ob__)&&(u=e.data.attrs=y({},u));for(i in u)o=u[i],s[i]!==o&&rn(a,i,o);Qi&&u.value!==s.value&&rn(a,\"value\",u.value);for(i in s)n(u[i])&&(aa(i)?a.removeAttributeNS(oa,sa(i)):ra(i)||a.removeAttribute(i))}}function rn(t,e,n){ia(e)?ua(n)?t.removeAttribute(e):t.setAttribute(e,e):ra(e)?t.setAttribute(e,ua(n)||\"false\"===n?\"false\":\"true\"):aa(e)?ua(n)?t.removeAttributeNS(oa,sa(e)):t.setAttributeNS(oa,e,n):ua(n)?t.removeAttribute(e):t.setAttribute(e,n)}function on(t,e){var i=e.elm,o=e.data,a=t.data;if(!(n(o.staticClass)&&n(o.class)&&(n(a)||n(a.staticClass)&&n(a.class)))){var s=Ae(e),u=i._transitionClasses;r(u)&&(s=Oe(s,je(u))),s!==i._prevClass&&(i.setAttribute(\"class\",s),i._prevClass=s)}}function an(t){function e(){(a||(a=[])).push(t.slice(h,i).trim()),h=i+1}var n,r,i,o,a,s=!1,u=!1,c=!1,l=!1,f=0,p=0,d=0,h=0;for(i=0;i<t.length;i++)if(r=n,n=t.charCodeAt(i),s)39===n&&92!==r&&(s=!1);else if(u)34===n&&92!==r&&(u=!1);else if(c)96===n&&92!==r&&(c=!1);else if(l)47===n&&92!==r&&(l=!1);else if(124!==n||124===t.charCodeAt(i+1)||124===t.charCodeAt(i-1)||f||p||d){switch(n){case 34:u=!0;break;case 39:s=!0;break;case 96:c=!0;break;case 40:d++;break;case 41:d--;break;case 91:p++;break;case 93:p--;break;case 123:f++;break;case 125:f--}if(47===n){for(var v=i-1,g=void 0;v>=0&&\" \"===(g=t.charAt(v));v--);g&&Ta.test(g)||(l=!0)}}else void 0===o?(h=i+1,o=t.slice(0,i).trim()):e();if(void 0===o?o=t.slice(0,i).trim():0!==h&&e(),a)for(i=0;i<a.length;i++)o=sn(o,a[i]);return o}function sn(t,e){var n=e.indexOf(\"(\");return n<0?'_f(\"'+e+'\")('+t+\")\":'_f(\"'+e.slice(0,n)+'\")('+t+\",\"+e.slice(n+1)}function un(t){}function cn(t,e){return t?t.map(function(t){return t[e]}).filter(function(t){return t}):[]}function ln(t,e,n){(t.props||(t.props=[])).push({name:e,value:n})}function fn(t,e,n){(t.attrs||(t.attrs=[])).push({name:e,value:n})}function pn(t,e,n,r,i,o){(t.directives||(t.directives=[])).push({name:e,rawName:n,value:r,arg:i,modifiers:o})}function dn(t,e,n,r,i,o){r&&r.capture&&(delete r.capture,e=\"!\"+e),r&&r.once&&(delete r.once,e=\"~\"+e),r&&r.passive&&(delete r.passive,e=\"&\"+e);var a;r&&r.native?(delete r.native,a=t.nativeEvents||(t.nativeEvents={})):a=t.events||(t.events={});var s={value:n,modifiers:r},u=a[e];Array.isArray(u)?i?u.unshift(s):u.push(s):a[e]=u?i?[s,u]:[u,s]:s}function hn(t,e,n){var r=vn(t,\":\"+e)||vn(t,\"v-bind:\"+e);if(null!=r)return an(r);if(!1!==n){var i=vn(t,e);if(null!=i)return JSON.stringify(i)}}function vn(t,e){var n;if(null!=(n=t.attrsMap[e]))for(var r=t.attrsList,i=0,o=r.length;i<o;i++)if(r[i].name===e){r.splice(i,1);break}return n}function gn(t,e,n){var r=n||{},i=r.number,o=r.trim,a=\"$$v\";o&&(a=\"(typeof $$v === 'string'? $$v.trim(): $$v)\"),i&&(a=\"_n(\"+a+\")\");var s=mn(e,a);t.model={value:\"(\"+e+\")\",expression:'\"'+e+'\"',callback:\"function ($$v) {\"+s+\"}\"}}function mn(t,e){var n=yn(t);return null===n.idx?t+\"=\"+e:\"var $$exp = \"+n.exp+\", $$idx = \"+n.idx+\";if (!Array.isArray($$exp)){\"+t+\"=\"+e+\"}else{$$exp.splice($$idx, 1, \"+e+\")}\"}function yn(t){if(Vo=t,zo=Vo.length,Ko=Jo=Qo=0,t.indexOf(\"[\")<0||t.lastIndexOf(\"]\")<zo-1)return{exp:t,idx:null};for(;!_n();)Xo=bn(),wn(Xo)?Cn(Xo):91===Xo&&xn(Xo);return{exp:t.substring(0,Jo),idx:t.substring(Jo+1,Qo)}}function bn(){return Vo.charCodeAt(++Ko)}function _n(){return Ko>=zo}function wn(t){return 34===t||39===t}function xn(t){var e=1;for(Jo=Ko;!_n();)if(t=bn(),wn(t))Cn(t);else if(91===t&&e++,93===t&&e--,0===e){Qo=Ko;break}}function Cn(t){for(var e=t;!_n()&&(t=bn())!==e;);}function Tn(t,e,n){Go=n;var r=e.value,i=e.modifiers,o=t.tag,a=t.attrsMap.type;if(\"select\"===o)An(t,r,i);else if(\"input\"===o&&\"checkbox\"===a)$n(t,r,i);else if(\"input\"===o&&\"radio\"===a)kn(t,r,i);else if(\"input\"===o||\"textarea\"===o)En(t,r,i);else if(!Bi.isReservedTag(o))return gn(t,r,i),!1;return!0}function $n(t,e,n){var r=n&&n.number,i=hn(t,\"value\")||\"null\",o=hn(t,\"true-value\")||\"true\",a=hn(t,\"false-value\")||\"false\";ln(t,\"checked\",\"Array.isArray(\"+e+\")?_i(\"+e+\",\"+i+\")>-1\"+(\"true\"===o?\":(\"+e+\")\":\":_q(\"+e+\",\"+o+\")\")),dn(t,ka,\"var $$a=\"+e+\",$$el=$event.target,$$c=$$el.checked?(\"+o+\"):(\"+a+\");if(Array.isArray($$a)){var $$v=\"+(r?\"_n(\"+i+\")\":i)+\",$$i=_i($$a,$$v);if($$c){$$i<0&&(\"+e+\"=$$a.concat($$v))}else{$$i>-1&&(\"+e+\"=$$a.slice(0,$$i).concat($$a.slice($$i+1)))}}else{\"+mn(e,\"$$c\")+\"}\",null,!0)}function kn(t,e,n){var r=n&&n.number,i=hn(t,\"value\")||\"null\";i=r?\"_n(\"+i+\")\":i,ln(t,\"checked\",\"_q(\"+e+\",\"+i+\")\"),dn(t,ka,mn(e,i),null,!0)}function An(t,e,n){var r=n&&n.number,i='Array.prototype.filter.call($event.target.options,function(o){return o.selected}).map(function(o){var val = \"_value\" in o ? o._value : o.value;return '+(r?\"_n(val)\":\"val\")+\"})\",o=\"var $$selectedVal = \"+i+\";\";o=o+\" \"+mn(e,\"$event.target.multiple ? $$selectedVal : $$selectedVal[0]\"),dn(t,\"change\",o,null,!0)}function En(t,e,n){var r=t.attrsMap.type,i=n||{},o=i.lazy,a=i.number,s=i.trim,u=!o&&\"range\"!==r,c=o?\"change\":\"range\"===r?$a:\"input\",l=\"$event.target.value\";s&&(l=\"$event.target.value.trim()\"),a&&(l=\"_n(\"+l+\")\");var f=mn(e,l);u&&(f=\"if($event.target.composing)return;\"+f),ln(t,\"value\",\"(\"+e+\")\"),dn(t,c,f,null,!0),(s||a||\"number\"===r)&&dn(t,\"blur\",\"$forceUpdate()\")}function Sn(t){var e;r(t[$a])&&(e=Ji?\"change\":\"input\",t[e]=[].concat(t[$a],t[e]||[]),delete t[$a]),r(t[ka])&&(e=to?\"click\":\"change\",t[e]=[].concat(t[ka],t[e]||[]),delete t[ka])}function On(t,e,n,r,i){if(n){var o=e,a=Zo;e=function(n){null!==(1===arguments.length?o(n):o.apply(null,arguments))&&jn(t,e,r,a)}}Zo.addEventListener(t,e,eo?{capture:r,passive:i}:r)}function jn(t,e,n,r){(r||Zo).removeEventListener(t,e,n)}function Nn(t,e){if(!n(t.data.on)||!n(e.data.on)){var r=e.data.on||{},i=t.data.on||{};Zo=e.elm,Sn(r),Y(r,i,On,jn,e.context)}}function Dn(t,e){if(!n(t.data.domProps)||!n(e.data.domProps)){var i,o,a=e.elm,s=t.data.domProps||{},u=e.data.domProps||{};r(u.__ob__)&&(u=e.data.domProps=y({},u));for(i in s)n(u[i])&&(a[i]=\"\");for(i in u)if(o=u[i],\"textContent\"!==i&&\"innerHTML\"!==i||(e.children&&(e.children.length=0),o!==s[i]))if(\"value\"===i){a._value=o;var c=n(o)?\"\":String(o);In(a,e,c)&&(a.value=c)}else a[i]=o}}function In(t,e,n){return!t.composing&&(\"option\"===e.tag||Ln(t,n)||Rn(t,n))}function Ln(t,e){return document.activeElement!==t&&t.value!==e}function Rn(t,e){var n=t.value,i=t._vModifiers;return r(i)&&i.number||\"number\"===t.type?f(n)!==f(e):r(i)&&i.trim?n.trim()!==e.trim():n!==e}function Pn(t){var e=Fn(t.style);return t.staticStyle?y(t.staticStyle,e):e}function Fn(t){return Array.isArray(t)?b(t):\"string\"==typeof t?Sa(t):t}function qn(t,e){var n,r={};if(e)for(var i=t;i.componentInstance;)i=i.componentInstance._vnode,i.data&&(n=Pn(i.data))&&y(r,n);(n=Pn(t.data))&&y(r,n);for(var o=t;o=o.parent;)o.data&&(n=Pn(o.data))&&y(r,n);return r}function Mn(t,e){var i=e.data,o=t.data;if(!(n(i.staticStyle)&&n(i.style)&&n(o.staticStyle)&&n(o.style))){var a,s,u=e.elm,c=o.staticStyle,l=o.normalizedStyle||o.style||{},f=c||l,p=Fn(e.data.style)||{};e.data.normalizedStyle=r(p.__ob__)?y({},p):p;var d=qn(e,!0);for(s in f)n(d[s])&&Na(u,s,\"\");for(s in d)(a=d[s])!==f[s]&&Na(u,s,null==a?\"\":a)}}function Hn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.add(e)}):t.classList.add(e);else{var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \";n.indexOf(\" \"+e+\" \")<0&&t.setAttribute(\"class\",(n+e).trim())}}function Bn(t,e){if(e&&(e=e.trim()))if(t.classList)e.indexOf(\" \")>-1?e.split(/\\s+/).forEach(function(e){return t.classList.remove(e)}):t.classList.remove(e);else{for(var n=\" \"+(t.getAttribute(\"class\")||\"\")+\" \",r=\" \"+e+\" \";n.indexOf(r)>=0;)n=n.replace(r,\" \");t.setAttribute(\"class\",n.trim())}}function Un(t){if(t){if(\"object\"==typeof t){var e={};return!1!==t.css&&y(e,Ra(t.name||\"v\")),y(e,t),e}return\"string\"==typeof t?Ra(t):void 0}}function Wn(t){Wa(function(){Wa(t)})}function zn(t,e){(t._transitionClasses||(t._transitionClasses=[])).push(e),Hn(t,e)}function Vn(t,e){t._transitionClasses&&d(t._transitionClasses,e),Bn(t,e)}function Xn(t,e,n){var r=Kn(t,e),i=r.type,o=r.timeout,a=r.propCount;if(!i)return n();var s=i===Fa?Ha:Ua,u=0,c=function(){t.removeEventListener(s,l),n()},l=function(e){e.target===t&&++u>=a&&c()};setTimeout(function(){u<a&&c()},o+1),t.addEventListener(s,l)}function Kn(t,e){var n,r=window.getComputedStyle(t),i=r[Ma+\"Delay\"].split(\", \"),o=r[Ma+\"Duration\"].split(\", \"),a=Jn(i,o),s=r[Ba+\"Delay\"].split(\", \"),u=r[Ba+\"Duration\"].split(\", \"),c=Jn(s,u),l=0,f=0;return e===Fa?a>0&&(n=Fa,l=a,f=o.length):e===qa?c>0&&(n=qa,l=c,f=u.length):(l=Math.max(a,c),n=l>0?a>c?Fa:qa:null,f=n?n===Fa?o.length:u.length:0),{type:n,timeout:l,propCount:f,hasTransform:n===Fa&&za.test(r[Ma+\"Property\"])}}function Jn(t,e){for(;t.length<e.length;)t=t.concat(t);return Math.max.apply(null,e.map(function(e,n){return Qn(e)+Qn(t[n])}))}function Qn(t){return 1e3*Number(t.slice(0,-1))}function Gn(t,e){var i=t.elm;r(i._leaveCb)&&(i._leaveCb.cancelled=!0,i._leaveCb());var o=Un(t.data.transition);if(!n(o)&&!r(i._enterCb)&&1===i.nodeType){for(var a=o.css,u=o.type,c=o.enterClass,l=o.enterToClass,p=o.enterActiveClass,d=o.appearClass,h=o.appearToClass,v=o.appearActiveClass,g=o.beforeEnter,m=o.enter,y=o.afterEnter,b=o.enterCancelled,_=o.beforeAppear,w=o.appear,x=o.afterAppear,T=o.appearCancelled,$=o.duration,k=$o,A=$o.$vnode;A&&A.parent;)A=A.parent,k=A.context;var E=!k._isMounted||!t.isRootInsert;if(!E||w||\"\"===w){var S=E&&d?d:c,O=E&&v?v:p,j=E&&h?h:l,N=E?_||g:g,D=E&&\"function\"==typeof w?w:m,I=E?x||y:y,L=E?T||b:b,R=f(s($)?$.enter:$),P=!1!==a&&!Qi,F=tr(D),q=i._enterCb=C(function(){P&&(Vn(i,j),Vn(i,O)),q.cancelled?(P&&Vn(i,S),L&&L(i)):I&&I(i),i._enterCb=null});t.data.show||tt(t.data.hook||(t.data.hook={}),\"insert\",function(){var e=i.parentNode,n=e&&e._pending&&e._pending[t.key];n&&n.tag===t.tag&&n.elm._leaveCb&&n.elm._leaveCb(),D&&D(i,q)}),N&&N(i),P&&(zn(i,S),zn(i,O),Wn(function(){zn(i,j),Vn(i,S),q.cancelled||F||(Yn(R)?setTimeout(q,R):Xn(i,u,q))})),t.data.show&&(e&&e(),D&&D(i,q)),P||F||q()}}}function Zn(t,e){function i(){T.cancelled||(t.data.show||((o.parentNode._pending||(o.parentNode._pending={}))[t.key]=t),h&&h(o),_&&(zn(o,l),zn(o,d),Wn(function(){zn(o,p),Vn(o,l),T.cancelled||w||(Yn(x)?setTimeout(T,x):Xn(o,c,T))})),v&&v(o,T),_||w||T())}var o=t.elm;r(o._enterCb)&&(o._enterCb.cancelled=!0,o._enterCb());var a=Un(t.data.transition);if(n(a))return e();if(!r(o._leaveCb)&&1===o.nodeType){var u=a.css,c=a.type,l=a.leaveClass,p=a.leaveToClass,d=a.leaveActiveClass,h=a.beforeLeave,v=a.leave,g=a.afterLeave,m=a.leaveCancelled,y=a.delayLeave,b=a.duration,_=!1!==u&&!Qi,w=tr(v),x=f(s(b)?b.leave:b),T=o._leaveCb=C(function(){o.parentNode&&o.parentNode._pending&&(o.parentNode._pending[t.key]=null),_&&(Vn(o,p),Vn(o,d)),T.cancelled?(_&&Vn(o,l),m&&m(o)):(e(),g&&g(o)),o._leaveCb=null});y?y(i):i()}}function Yn(t){return\"number\"==typeof t&&!isNaN(t)}function tr(t){if(n(t))return!1;var e=t.fns;return r(e)?tr(Array.isArray(e)?e[0]:e):(t._length||t.length)>1}function er(t,e){!0!==e.data.show&&Gn(e)}function nr(t,e,n){var r=e.value,i=t.multiple;if(!i||Array.isArray(r)){for(var o,a,s=0,u=t.options.length;s<u;s++)if(a=t.options[s],i)o=x(r,ir(a))>-1,a.selected!==o&&(a.selected=o);else if(w(ir(a),r))return void(t.selectedIndex!==s&&(t.selectedIndex=s));i||(t.selectedIndex=-1)}}function rr(t,e){for(var n=0,r=e.length;n<r;n++)if(w(ir(e[n]),t))return!1;return!0}function ir(t){return\"_value\"in t?t._value:t.value}function or(t){t.target.composing=!0}function ar(t){t.target.composing&&(t.target.composing=!1,sr(t.target,\"input\"))}function sr(t,e){var n=document.createEvent(\"HTMLEvents\");n.initEvent(e,!0,!0),t.dispatchEvent(n)}function ur(t){return!t.componentInstance||t.data&&t.data.transition?t:ur(t.componentInstance._vnode)}function cr(t){var e=t&&t.componentOptions;return e&&e.Ctor.options.abstract?cr(ct(e.children)):t}function lr(t){var e={},n=t.$options;for(var r in n.propsData)e[r]=t[r];var i=n._parentListeners;for(var o in i)e[Ii(o)]=i[o];return e}function fr(t,e){if(/\\d-keep-alive$/.test(e.tag))return t(\"keep-alive\",{props:e.componentOptions.propsData})}function pr(t){for(;t=t.parent;)if(t.data.transition)return!0}function dr(t,e){return e.key===t.key&&e.tag===t.tag}function hr(t){t.elm._moveCb&&t.elm._moveCb(),t.elm._enterCb&&t.elm._enterCb()}function vr(t){t.data.newPos=t.elm.getBoundingClientRect()}function gr(t){var e=t.data.pos,n=t.data.newPos,r=e.left-n.left,i=e.top-n.top;if(r||i){t.data.moved=!0;var o=t.elm.style;o.transform=o.WebkitTransform=\"translate(\"+r+\"px,\"+i+\"px)\",o.transitionDuration=\"0s\"}}function mr(t){return is=is||document.createElement(\"div\"),is.innerHTML=t,is.textContent}function yr(t,e){var n=e?Bs:Hs;return t.replace(n,function(t){return Ms[t]})}function br(t,e){function n(e){l+=e,t=t.substring(e)}function r(t,n,r){var i,s;if(null==n&&(n=l),null==r&&(r=l),t&&(s=t.toLowerCase()),t)for(i=a.length-1;i>=0&&a[i].lowerCasedTag!==s;i--);else i=0;if(i>=0){for(var u=a.length-1;u>=i;u--)e.end&&e.end(a[u].tag,n,r);a.length=i,o=i&&a[i-1].tag}else\"br\"===s?e.start&&e.start(t,[],!0,n,r):\"p\"===s&&(e.start&&e.start(t,[],!1,n,r),e.end&&e.end(t,n,r))}for(var i,o,a=[],s=e.expectHTML,u=e.isUnaryTag||Pi,c=e.canBeLeftOpenTag||Pi,l=0;t;){if(i=t,o&&Fs(o)){var f=o.toLowerCase(),p=qs[f]||(qs[f]=new RegExp(\"([\\\\s\\\\S]*?)(</\"+f+\"[^>]*>)\",\"i\")),d=0,h=t.replace(p,function(t,n,r){return d=r.length,Fs(f)||\"noscript\"===f||(n=n.replace(/<!--([\\s\\S]*?)-->/g,\"$1\").replace(/<!\\[CDATA\\[([\\s\\S]*?)]]>/g,\"$1\")),e.chars&&e.chars(n),\"\"});l+=t.length-h.length,t=h,r(f,l-d,l)}else{var v=t.indexOf(\"<\");if(0===v){if(ms.test(t)){var g=t.indexOf(\"--\\x3e\");if(g>=0){n(g+3);continue}}if(ys.test(t)){var m=t.indexOf(\"]>\");if(m>=0){n(m+2);continue}}var y=t.match(gs);if(y){n(y[0].length);continue}var b=t.match(vs);if(b){var _=l;n(b[0].length),r(b[1],_,l);continue}var w=function(){var e=t.match(ds);if(e){var r={tagName:e[1],attrs:[],start:l};n(e[0].length);for(var i,o;!(i=t.match(hs))&&(o=t.match(ls));)n(o[0].length),r.attrs.push(o);if(i)return r.unarySlash=i[1],n(i[0].length),r.end=l,r}}();if(w){!function(t){var n=t.tagName,i=t.unarySlash;s&&(\"p\"===o&&us(n)&&r(o),c(n)&&o===n&&r(n));for(var l=u(n)||\"html\"===n&&\"head\"===o||!!i,f=t.attrs.length,p=new Array(f),d=0;d<f;d++){var h=t.attrs[d];bs&&-1===h[0].indexOf('\"\"')&&(\"\"===h[3]&&delete h[3],\"\"===h[4]&&delete h[4],\"\"===h[5]&&delete h[5]);var v=h[3]||h[4]||h[5]||\"\";p[d]={name:h[1],value:yr(v,e.shouldDecodeNewlines)}}l||(a.push({tag:n,lowerCasedTag:n.toLowerCase(),attrs:p}),o=n),e.start&&e.start(n,p,l,t.start,t.end)}(w);continue}}var x=void 0,C=void 0,T=void 0;if(v>=0){for(C=t.slice(v);!(vs.test(C)||ds.test(C)||ms.test(C)||ys.test(C)||(T=C.indexOf(\"<\",1))<0);)v+=T,C=t.slice(v);x=t.substring(0,v),n(v)}v<0&&(x=t,t=\"\"),e.chars&&x&&e.chars(x)}if(t===i){e.chars&&e.chars(t);break}}r()}function _r(t,e){var n=e?Ws(e):Us;if(n.test(t)){for(var r,i,o=[],a=n.lastIndex=0;r=n.exec(t);){i=r.index,i>a&&o.push(JSON.stringify(t.slice(a,i)));var s=an(r[1].trim());o.push(\"_s(\"+s+\")\"),a=i+r[0].length}return a<t.length&&o.push(JSON.stringify(t.slice(a))),o.join(\"+\")}}function wr(t,e){function n(t){t.pre&&(s=!1),$s(t.tag)&&(u=!1)}_s=e.warn||un,As=e.getTagNamespace||Pi,ks=e.mustUseProp||Pi,$s=e.isPreTag||Pi,Cs=cn(e.modules,\"preTransformNode\"),xs=cn(e.modules,\"transformNode\"),Ts=cn(e.modules,\"postTransformNode\"),ws=e.delimiters;var r,i,o=[],a=!1!==e.preserveWhitespace,s=!1,u=!1;return br(t,{warn:_s,expectHTML:e.expectHTML,isUnaryTag:e.isUnaryTag,canBeLeftOpenTag:e.canBeLeftOpenTag,shouldDecodeNewlines:e.shouldDecodeNewlines,start:function(t,a,c){var l=i&&i.ns||As(t);Ji&&\"svg\"===l&&(a=Mr(a));var f={type:1,tag:t,attrsList:a,attrsMap:Pr(a),parent:i,children:[]};l&&(f.ns=l),qr(f)&&!oo()&&(f.forbidden=!0);for(var p=0;p<Cs.length;p++)Cs[p](f,e);if(s||(xr(f),f.pre&&(s=!0)),$s(f.tag)&&(u=!0),s)Cr(f);else{kr(f),Ar(f),jr(f),Tr(f),f.plain=!f.key&&!a.length,$r(f),Nr(f),Dr(f);for(var d=0;d<xs.length;d++)xs[d](f,e);Ir(f)}if(r?o.length||r.if&&(f.elseif||f.else)&&Or(r,{exp:f.elseif,block:f}):r=f,i&&!f.forbidden)if(f.elseif||f.else)Er(f,i);else if(f.slotScope){i.plain=!1;var h=f.slotTarget||'\"default\"';(i.scopedSlots||(i.scopedSlots={}))[h]=f}else i.children.push(f),f.parent=i;c?n(f):(i=f,o.push(f));for(var v=0;v<Ts.length;v++)Ts[v](f,e)},end:function(){var t=o[o.length-1],e=t.children[t.children.length-1];e&&3===e.type&&\" \"===e.text&&!u&&t.children.pop(),o.length-=1,i=o[o.length-1],n(t)},chars:function(t){if(i&&(!Ji||\"textarea\"!==i.tag||i.attrsMap.placeholder!==t)){var e=i.children;if(t=u||t.trim()?Fr(i)?t:Zs(t):a&&e.length?\" \":\"\"){var n;!s&&\" \"!==t&&(n=_r(t,ws))?e.push({type:2,expression:n,text:t}):\" \"===t&&e.length&&\" \"===e[e.length-1].text||e.push({type:3,text:t})}}}}),r}function xr(t){null!=vn(t,\"v-pre\")&&(t.pre=!0)}function Cr(t){var e=t.attrsList.length;if(e)for(var n=t.attrs=new Array(e),r=0;r<e;r++)n[r]={name:t.attrsList[r].name,value:JSON.stringify(t.attrsList[r].value)};else t.pre||(t.plain=!0)}function Tr(t){var e=hn(t,\"key\");e&&(t.key=e)}function $r(t){var e=hn(t,\"ref\");e&&(t.ref=e,t.refInFor=Lr(t))}function kr(t){var e;if(e=vn(t,\"v-for\")){var n=e.match(Xs);if(!n)return;t.for=n[2].trim();var r=n[1].trim(),i=r.match(Ks);i?(t.alias=i[1].trim(),t.iterator1=i[2].trim(),i[3]&&(t.iterator2=i[3].trim())):t.alias=r}}function Ar(t){var e=vn(t,\"v-if\");if(e)t.if=e,Or(t,{exp:e,block:t});else{null!=vn(t,\"v-else\")&&(t.else=!0);var n=vn(t,\"v-else-if\");n&&(t.elseif=n)}}function Er(t,e){var n=Sr(e.children);n&&n.if&&Or(n,{exp:t.elseif,block:t})}function Sr(t){for(var e=t.length;e--;){if(1===t[e].type)return t[e];t.pop()}}function Or(t,e){t.ifConditions||(t.ifConditions=[]),t.ifConditions.push(e)}function jr(t){null!=vn(t,\"v-once\")&&(t.once=!0)}function Nr(t){if(\"slot\"===t.tag)t.slotName=hn(t,\"name\");else{var e=hn(t,\"slot\");e&&(t.slotTarget='\"\"'===e?'\"default\"':e),\"template\"===t.tag&&(t.slotScope=vn(t,\"scope\"))}}function Dr(t){var e;(e=hn(t,\"is\"))&&(t.component=e),null!=vn(t,\"inline-template\")&&(t.inlineTemplate=!0)}function Ir(t){var e,n,r,i,o,a,s,u=t.attrsList;for(e=0,n=u.length;e<n;e++)if(r=i=u[e].name,o=u[e].value,Vs.test(r))if(t.hasBindings=!0,a=Rr(r),a&&(r=r.replace(Gs,\"\")),Qs.test(r))r=r.replace(Qs,\"\"),o=an(o),s=!1,a&&(a.prop&&(s=!0,\"innerHtml\"===(r=Ii(r))&&(r=\"innerHTML\")),a.camel&&(r=Ii(r)),a.sync&&dn(t,\"update:\"+Ii(r),mn(o,\"$event\"))),s||ks(t.tag,t.attrsMap.type,r)?ln(t,r,o):fn(t,r,o);else if(zs.test(r))r=r.replace(zs,\"\"),dn(t,r,o,a,!1,_s);else{r=r.replace(Vs,\"\");var c=r.match(Js),l=c&&c[1];l&&(r=r.slice(0,-(l.length+1))),pn(t,r,i,o,l,a)}else{fn(t,r,JSON.stringify(o))}}function Lr(t){for(var e=t;e;){if(void 0!==e.for)return!0;e=e.parent}return!1}function Rr(t){var e=t.match(Gs);if(e){var n={};return e.forEach(function(t){n[t.slice(1)]=!0}),n}}function Pr(t){for(var e={},n=0,r=t.length;n<r;n++)e[t[n].name]=t[n].value;return e}function Fr(t){return\"script\"===t.tag||\"style\"===t.tag}function qr(t){return\"style\"===t.tag||\"script\"===t.tag&&(!t.attrsMap.type||\"text/javascript\"===t.attrsMap.type)}function Mr(t){for(var e=[],n=0;n<t.length;n++){var r=t[n];Ys.test(r.name)||(r.name=r.name.replace(tu,\"\"),e.push(r))}return e}function Hr(t,e){t&&(Es=eu(e.staticKeys||\"\"),Ss=e.isReservedTag||Pi,Ur(t),Wr(t,!1))}function Br(t){return p(\"type,tag,attrsList,attrsMap,plain,parent,children,attrs\"+(t?\",\"+t:\"\"))}function Ur(t){if(t.static=Vr(t),1===t.type){if(!Ss(t.tag)&&\"slot\"!==t.tag&&null==t.attrsMap[\"inline-template\"])return;for(var e=0,n=t.children.length;e<n;e++){var r=t.children[e];Ur(r),r.static||(t.static=!1)}}}function Wr(t,e){if(1===t.type){if((t.static||t.once)&&(t.staticInFor=e),t.static&&t.children.length&&(1!==t.children.length||3!==t.children[0].type))return void(t.staticRoot=!0);if(t.staticRoot=!1,t.children)for(var n=0,r=t.children.length;n<r;n++)Wr(t.children[n],e||!!t.for);t.ifConditions&&zr(t.ifConditions,e)}}function zr(t,e){for(var n=1,r=t.length;n<r;n++)Wr(t[n].block,e)}function Vr(t){return 2!==t.type&&(3===t.type||!(!t.pre&&(t.hasBindings||t.if||t.for||Ni(t.tag)||!Ss(t.tag)||Xr(t)||!Object.keys(t).every(Es))))}function Xr(t){for(;t.parent;){if(t=t.parent,\"template\"!==t.tag)return!1;if(t.for)return!0}return!1}function Kr(t,e,n){var r=e?\"nativeOn:{\":\"on:{\";for(var i in t){r+='\"'+i+'\":'+Jr(i,t[i])+\",\"}return r.slice(0,-1)+\"}\"}function Jr(t,e){if(!e)return\"function(){}\";if(Array.isArray(e))return\"[\"+e.map(function(e){return Jr(t,e)}).join(\",\")+\"]\";var n=ru.test(e.value),r=nu.test(e.value);if(e.modifiers){var i=\"\",o=\"\",a=[];for(var s in e.modifiers)au[s]?(o+=au[s],iu[s]&&a.push(s)):a.push(s);a.length&&(i+=Qr(a)),o&&(i+=o);return\"function($event){\"+i+(n?e.value+\"($event)\":r?\"(\"+e.value+\")($event)\":e.value)+\"}\"}return n||r?e.value:\"function($event){\"+e.value+\"}\"}function Qr(t){return\"if(!('button' in $event)&&\"+t.map(Gr).join(\"&&\")+\")return null;\"}function Gr(t){var e=parseInt(t,10);if(e)return\"$event.keyCode!==\"+e;var n=iu[t];return\"_k($event.keyCode,\"+JSON.stringify(t)+(n?\",\"+JSON.stringify(n):\"\")+\")\"}function Zr(t,e){t.wrapData=function(n){return\"_b(\"+n+\",'\"+t.tag+\"',\"+e.value+(e.modifiers&&e.modifiers.prop?\",true\":\"\")+\")\"}}function Yr(t,e){var n=Ls,r=Ls=[],i=Rs;Rs=0,Ps=e,Os=e.warn||un,js=cn(e.modules,\"transformCode\"),Ns=cn(e.modules,\"genData\"),Ds=e.directives||{},Is=e.isReservedTag||Pi;var o=t?ti(t):'_c(\"div\")';return Ls=n,Rs=i,{render:\"with(this){return \"+o+\"}\",staticRenderFns:r}}function ti(t){if(t.staticRoot&&!t.staticProcessed)return ei(t);if(t.once&&!t.onceProcessed)return ni(t);if(t.for&&!t.forProcessed)return oi(t);if(t.if&&!t.ifProcessed)return ri(t);if(\"template\"!==t.tag||t.slotTarget){if(\"slot\"===t.tag)return yi(t);var e;if(t.component)e=bi(t.component,t);else{var n=t.plain?void 0:ai(t),r=t.inlineTemplate?null:pi(t,!0);e=\"_c('\"+t.tag+\"'\"+(n?\",\"+n:\"\")+(r?\",\"+r:\"\")+\")\"}for(var i=0;i<js.length;i++)e=js[i](t,e);return e}return pi(t)||\"void 0\"}function ei(t){return t.staticProcessed=!0,Ls.push(\"with(this){return \"+ti(t)+\"}\"),\"_m(\"+(Ls.length-1)+(t.staticInFor?\",true\":\"\")+\")\"}function ni(t){if(t.onceProcessed=!0,t.if&&!t.ifProcessed)return ri(t);if(t.staticInFor){for(var e=\"\",n=t.parent;n;){if(n.for){e=n.key;break}n=n.parent}return e?\"_o(\"+ti(t)+\",\"+Rs+++(e?\",\"+e:\"\")+\")\":ti(t)}return ei(t)}function ri(t){return t.ifProcessed=!0,ii(t.ifConditions.slice())}function ii(t){function e(t){return t.once?ni(t):ti(t)}if(!t.length)return\"_e()\";var n=t.shift();return n.exp?\"(\"+n.exp+\")?\"+e(n.block)+\":\"+ii(t):\"\"+e(n.block)}function oi(t){var e=t.for,n=t.alias,r=t.iterator1?\",\"+t.iterator1:\"\",i=t.iterator2?\",\"+t.iterator2:\"\";return t.forProcessed=!0,\"_l((\"+e+\"),function(\"+n+r+i+\"){return \"+ti(t)+\"})\"}function ai(t){var e=\"{\",n=si(t);n&&(e+=n+\",\"),t.key&&(e+=\"key:\"+t.key+\",\"),t.ref&&(e+=\"ref:\"+t.ref+\",\"),t.refInFor&&(e+=\"refInFor:true,\"),t.pre&&(e+=\"pre:true,\"),t.component&&(e+='tag:\"'+t.tag+'\",');for(var r=0;r<Ns.length;r++)e+=Ns[r](t);if(t.attrs&&(e+=\"attrs:{\"+_i(t.attrs)+\"},\"),t.props&&(e+=\"domProps:{\"+_i(t.props)+\"},\"),t.events&&(e+=Kr(t.events,!1,Os)+\",\"),t.nativeEvents&&(e+=Kr(t.nativeEvents,!0,Os)+\",\"),t.slotTarget&&(e+=\"slot:\"+t.slotTarget+\",\"),t.scopedSlots&&(e+=ci(t.scopedSlots)+\",\"),t.model&&(e+=\"model:{value:\"+t.model.value+\",callback:\"+t.model.callback+\",expression:\"+t.model.expression+\"},\"),t.inlineTemplate){var i=ui(t);i&&(e+=i+\",\")}return e=e.replace(/,$/,\"\")+\"}\",t.wrapData&&(e=t.wrapData(e)),e}function si(t){var e=t.directives;if(e){var n,r,i,o,a=\"directives:[\",s=!1;for(n=0,r=e.length;n<r;n++){i=e[n],o=!0;var u=Ds[i.name]||su[i.name];u&&(o=!!u(t,i,Os)),o&&(s=!0,a+='{name:\"'+i.name+'\",rawName:\"'+i.rawName+'\"'+(i.value?\",value:(\"+i.value+\"),expression:\"+JSON.stringify(i.value):\"\")+(i.arg?',arg:\"'+i.arg+'\"':\"\")+(i.modifiers?\",modifiers:\"+JSON.stringify(i.modifiers):\"\")+\"},\")}return s?a.slice(0,-1)+\"]\":void 0}}function ui(t){var e=t.children[0];if(1===e.type){var n=Yr(e,Ps);return\"inlineTemplate:{render:function(){\"+n.render+\"},staticRenderFns:[\"+n.staticRenderFns.map(function(t){return\"function(){\"+t+\"}\"}).join(\",\")+\"]}\"}}function ci(t){return\"scopedSlots:_u([\"+Object.keys(t).map(function(e){return li(e,t[e])}).join(\",\")+\"])\"}function li(t,e){return e.for&&!e.forProcessed?fi(t,e):\"{key:\"+t+\",fn:function(\"+String(e.attrsMap.scope)+\"){return \"+(\"template\"===e.tag?pi(e)||\"void 0\":ti(e))+\"}}\"}function fi(t,e){var n=e.for,r=e.alias,i=e.iterator1?\",\"+e.iterator1:\"\",o=e.iterator2?\",\"+e.iterator2:\"\";return e.forProcessed=!0,\"_l((\"+n+\"),function(\"+r+i+o+\"){return \"+li(t,e)+\"})\"}function pi(t,e){var n=t.children;if(n.length){var r=n[0];if(1===n.length&&r.for&&\"template\"!==r.tag&&\"slot\"!==r.tag)return ti(r);var i=e?di(n):0;return\"[\"+n.map(gi).join(\",\")+\"]\"+(i?\",\"+i:\"\")}}function di(t){for(var e=0,n=0;n<t.length;n++){var r=t[n];if(1===r.type){if(hi(r)||r.ifConditions&&r.ifConditions.some(function(t){return hi(t.block)})){e=2;break}(vi(r)||r.ifConditions&&r.ifConditions.some(function(t){return vi(t.block)}))&&(e=1)}}return e}function hi(t){return void 0!==t.for||\"template\"===t.tag||\"slot\"===t.tag}function vi(t){return!Is(t.tag)}function gi(t){return 1===t.type?ti(t):mi(t)}function mi(t){return\"_v(\"+(2===t.type?t.expression:wi(JSON.stringify(t.text)))+\")\"}function yi(t){var e=t.slotName||'\"default\"',n=pi(t),r=\"_t(\"+e+(n?\",\"+n:\"\"),i=t.attrs&&\"{\"+t.attrs.map(function(t){return Ii(t.name)+\":\"+t.value}).join(\",\")+\"}\",o=t.attrsMap[\"v-bind\"];return!i&&!o||n||(r+=\",null\"),i&&(r+=\",\"+i),o&&(r+=(i?\"\":\",null\")+\",\"+o),r+\")\"}function bi(t,e){var n=e.inlineTemplate?null:pi(e,!0);return\"_c(\"+t+\",\"+ai(e)+(n?\",\"+n:\"\")+\")\"}function _i(t){for(var e=\"\",n=0;n<t.length;n++){var r=t[n];e+='\"'+r.name+'\":'+wi(r.value)+\",\"}return e.slice(0,-1)}function wi(t){return t.replace(/\\u2028/g,\"\\\\u2028\").replace(/\\u2029/g,\"\\\\u2029\")}function xi(t,e){var n=wr(t.trim(),e);Hr(n,e);var r=Yr(n,e);return{ast:n,render:r.render,staticRenderFns:r.staticRenderFns}}function Ci(t,e){try{return new Function(t)}catch(n){return e.push({err:n,code:t}),_}}function Ti(t,e){var n=(e.warn,vn(t,\"class\"));n&&(t.staticClass=JSON.stringify(n));var r=hn(t,\"class\",!1);r&&(t.classBinding=r)}function $i(t){var e=\"\";return t.staticClass&&(e+=\"staticClass:\"+t.staticClass+\",\"),t.classBinding&&(e+=\"class:\"+t.classBinding+\",\"),e}function ki(t,e){var n=(e.warn,vn(t,\"style\"));if(n){t.staticStyle=JSON.stringify(Sa(n))}var r=hn(t,\"style\",!1);r&&(t.styleBinding=r)}function Ai(t){var e=\"\";return t.staticStyle&&(e+=\"staticStyle:\"+t.staticStyle+\",\"),t.styleBinding&&(e+=\"style:(\"+t.styleBinding+\"),\"),e}function Ei(t,e){e.value&&ln(t,\"textContent\",\"_s(\"+e.value+\")\")}function Si(t,e){e.value&&ln(t,\"innerHTML\",\"_s(\"+e.value+\")\")}function Oi(t){if(t.outerHTML)return t.outerHTML;var e=document.createElement(\"div\");return e.appendChild(t.cloneNode(!0)),e.innerHTML}var ji=Object.prototype.toString,Ni=p(\"slot,component\",!0),Di=Object.prototype.hasOwnProperty,Ii=v(function(t){return t.replace(/-(\\w)/g,function(t,e){return e?e.toUpperCase():\"\"})}),Li=v(function(t){return t.charAt(0).toUpperCase()+t.slice(1)}),Ri=v(function(t){return t.replace(/([^-])([A-Z])/g,\"$1-$2\").replace(/([^-])([A-Z])/g,\"$1-$2\").toLowerCase()}),Pi=function(){return!1},Fi=function(t){return t},qi=\"data-server-rendered\",Mi=[\"component\",\"directive\",\"filter\"],Hi=[\"beforeCreate\",\"created\",\"beforeMount\",\"mounted\",\"beforeUpdate\",\"updated\",\"beforeDestroy\",\"destroyed\",\"activated\",\"deactivated\"],Bi={optionMergeStrategies:Object.create(null),silent:!1,productionTip:!1,devtools:!1,performance:!1,errorHandler:null,ignoredElements:[],keyCodes:Object.create(null),isReservedTag:Pi,isReservedAttr:Pi,isUnknownElement:Pi,getTagNamespace:_,parsePlatformTagName:Fi,mustUseProp:Pi,_lifecycleHooks:Hi},Ui=Object.freeze({}),Wi=/[^\\w.$]/,zi=_,Vi=\"__proto__\"in{},Xi=\"undefined\"!=typeof window,Ki=Xi&&window.navigator.userAgent.toLowerCase(),Ji=Ki&&/msie|trident/.test(Ki),Qi=Ki&&Ki.indexOf(\"msie 9.0\")>0,Gi=Ki&&Ki.indexOf(\"edge/\")>0,Zi=Ki&&Ki.indexOf(\"android\")>0,Yi=Ki&&/iphone|ipad|ipod|ios/.test(Ki),to=Ki&&/chrome\\/\\d+/.test(Ki)&&!Gi,eo=!1;if(Xi)try{var no={};Object.defineProperty(no,\"passive\",{get:function(){eo=!0}}),window.addEventListener(\"test-passive\",null,no)}catch(t){}var ro,io,oo=function(){return void 0===ro&&(ro=!Xi&&void 0!==e&&\"server\"===e.process.env.VUE_ENV),ro},ao=Xi&&window.__VUE_DEVTOOLS_GLOBAL_HOOK__,so=\"undefined\"!=typeof Symbol&&E(Symbol)&&\"undefined\"!=typeof Reflect&&E(Reflect.ownKeys),uo=function(){function t(){r=!1;var t=n.slice(0);n.length=0;for(var e=0;e<t.length;e++)t[e]()}var e,n=[],r=!1;if(\"undefined\"!=typeof Promise&&E(Promise)){var i=Promise.resolve(),o=function(t){};e=function(){i.then(t).catch(o),Yi&&setTimeout(_)}}else if(\"undefined\"==typeof MutationObserver||!E(MutationObserver)&&\"[object MutationObserverConstructor]\"!==MutationObserver.toString())e=function(){setTimeout(t,0)};else{var a=1,s=new MutationObserver(t),u=document.createTextNode(String(a));s.observe(u,{characterData:!0}),e=function(){a=(a+1)%2,u.data=String(a)}}return function(t,i){var o;if(n.push(function(){if(t)try{t.call(i)}catch(t){A(t,i,\"nextTick\")}else o&&o(i)}),r||(r=!0,e()),!t&&\"undefined\"!=typeof Promise)return new Promise(function(t,e){o=t})}}();io=\"undefined\"!=typeof Set&&E(Set)?Set:function(){function t(){this.set=Object.create(null)}return t.prototype.has=function(t){return!0===this.set[t]},t.prototype.add=function(t){this.set[t]=!0},t.prototype.clear=function(){this.set=Object.create(null)},t}();var co=0,lo=function(){this.id=co++,this.subs=[]};lo.prototype.addSub=function(t){this.subs.push(t)},lo.prototype.removeSub=function(t){d(this.subs,t)},lo.prototype.depend=function(){lo.target&&lo.target.addDep(this)},lo.prototype.notify=function(){for(var t=this.subs.slice(),e=0,n=t.length;e<n;e++)t[e].update()},lo.target=null;var fo=[],po=Array.prototype,ho=Object.create(po);[\"push\",\"pop\",\"shift\",\"unshift\",\"splice\",\"sort\",\"reverse\"].forEach(function(t){var e=po[t];$(ho,t,function(){for(var n=arguments,r=arguments.length,i=new Array(r);r--;)i[r]=n[r];var o,a=e.apply(this,i),s=this.__ob__;switch(t){case\"push\":case\"unshift\":o=i;break;case\"splice\":o=i.slice(2)}return o&&s.observeArray(o),s.dep.notify(),a})});var vo=Object.getOwnPropertyNames(ho),go={shouldConvert:!0,isSettingProps:!1},mo=function(t){if(this.value=t,this.dep=new lo,this.vmCount=0,$(t,\"__ob__\",this),Array.isArray(t)){(Vi?j:N)(t,ho,vo),this.observeArray(t)}else this.walk(t)};mo.prototype.walk=function(t){for(var e=Object.keys(t),n=0;n<e.length;n++)I(t,e[n],t[e[n]])},mo.prototype.observeArray=function(t){for(var e=0,n=t.length;e<n;e++)D(t[e])};var yo=Bi.optionMergeStrategies;yo.data=function(t,e,n){return n?t||e?function(){var r=\"function\"==typeof e?e.call(n):e,i=\"function\"==typeof t?t.call(n):void 0;return r?F(r,i):i}:void 0:e?\"function\"!=typeof e?t:t?function(){return F(e.call(this),t.call(this))}:e:t},Hi.forEach(function(t){yo[t]=q}),Mi.forEach(function(t){yo[t+\"s\"]=M}),yo.watch=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n={};y(n,t);for(var r in e){var i=n[r],o=e[r];i&&!Array.isArray(i)&&(i=[i]),n[r]=i?i.concat(o):[o]}return n},yo.props=yo.methods=yo.computed=function(t,e){if(!e)return Object.create(t||null);if(!t)return e;var n=Object.create(null);return y(n,t),y(n,e),n};var bo=function(t,e){return void 0===e?t:e},_o=function(t,e,n,r,i,o,a){this.tag=t,this.data=e,this.children=n,this.text=r,this.elm=i,this.ns=void 0,this.context=o,this.functionalContext=void 0,this.key=e&&e.key,this.componentOptions=a,this.componentInstance=void 0,this.parent=void 0,this.raw=!1,this.isStatic=!1,this.isRootInsert=!0,this.isComment=!1,this.isCloned=!1,this.isOnce=!1},wo={child:{}};wo.child.get=function(){return this.componentInstance},Object.defineProperties(_o.prototype,wo);var xo,Co=function(){var t=new _o;return t.text=\"\",t.isComment=!0,t},To=v(function(t){var e=\"&\"===t.charAt(0);t=e?t.slice(1):t;var n=\"~\"===t.charAt(0);t=n?t.slice(1):t;var r=\"!\"===t.charAt(0);return t=r?t.slice(1):t,{name:t,once:n,capture:r,passive:e}}),$o=null,ko=[],Ao=[],Eo={},So=!1,Oo=!1,jo=0,No=0,Do=function(t,e,n,r){this.vm=t,t._watchers.push(this),r?(this.deep=!!r.deep,this.user=!!r.user,this.lazy=!!r.lazy,this.sync=!!r.sync):this.deep=this.user=this.lazy=this.sync=!1,this.cb=n,this.id=++No,this.active=!0,this.dirty=this.lazy,this.deps=[],this.newDeps=[],this.depIds=new io,this.newDepIds=new io,this.expression=\"\",\"function\"==typeof e?this.getter=e:(this.getter=k(e),this.getter||(this.getter=function(){})),this.value=this.lazy?void 0:this.get()};Do.prototype.get=function(){S(this);var t,e=this.vm;if(this.user)try{t=this.getter.call(e,e)}catch(t){A(t,e,'getter for watcher \"'+this.expression+'\"')}else t=this.getter.call(e,e);return this.deep&&Ot(t),O(),this.cleanupDeps(),t},Do.prototype.addDep=function(t){var e=t.id;this.newDepIds.has(e)||(this.newDepIds.add(e),this.newDeps.push(t),this.depIds.has(e)||t.addSub(this))},Do.prototype.cleanupDeps=function(){for(var t=this,e=this.deps.length;e--;){var n=t.deps[e];t.newDepIds.has(n.id)||n.removeSub(t)}var r=this.depIds;this.depIds=this.newDepIds,this.newDepIds=r,this.newDepIds.clear(),r=this.deps,this.deps=this.newDeps,this.newDeps=r,this.newDeps.length=0},Do.prototype.update=function(){this.lazy?this.dirty=!0:this.sync?this.run():St(this)},Do.prototype.run=function(){if(this.active){var t=this.get();if(t!==this.value||s(t)||this.deep){var e=this.value;if(this.value=t,this.user)try{this.cb.call(this.vm,t,e)}catch(t){A(t,this.vm,'callback for watcher \"'+this.expression+'\"')}else this.cb.call(this.vm,t,e)}}},Do.prototype.evaluate=function(){this.value=this.get(),this.dirty=!1},Do.prototype.depend=function(){for(var t=this,e=this.deps.length;e--;)t.deps[e].depend()},Do.prototype.teardown=function(){var t=this;if(this.active){this.vm._isBeingDestroyed||d(this.vm._watchers,this);for(var e=this.deps.length;e--;)t.deps[e].removeSub(t);this.active=!1}};var Io=new io,Lo={enumerable:!0,configurable:!0,get:_,set:_},Ro={lazy:!0},Po={init:function(t,e,n,r){if(!t.componentInstance||t.componentInstance._isDestroyed){(t.componentInstance=Jt(t,$o,n,r)).$mount(e?t.elm:void 0,e)}else if(t.data.keepAlive){var i=t;Po.prepatch(i,i)}},prepatch:function(t,e){var n=e.componentOptions;bt(e.componentInstance=t.componentInstance,n.propsData,n.listeners,e,n.children)},insert:function(t){var e=t.context,n=t.componentInstance;n._isMounted||(n._isMounted=!0,Ct(n,\"mounted\")),t.data.keepAlive&&(e._isMounted?At(n):wt(n,!0))},destroy:function(t){var e=t.componentInstance;e._isDestroyed||(t.data.keepAlive?xt(e,!0):e.$destroy())}},Fo=Object.keys(Po),qo=1,Mo=2,Ho=0;!function(t){t.prototype._init=function(t){var e=this;e._uid=Ho++,e._isVue=!0,t&&t._isComponent?pe(e,t):e.$options=U(de(e.constructor),t||{},e),e._renderProxy=e,e._self=e,mt(e),lt(e),fe(e),Ct(e,\"beforeCreate\"),Wt(e),Dt(e),Ut(e),Ct(e,\"created\"),e.$options.el&&e.$mount(e.$options.el)}}(ge),function(t){var e={};e.get=function(){return this._data};var n={};n.get=function(){return this._props},Object.defineProperty(t.prototype,\"$data\",e),Object.defineProperty(t.prototype,\"$props\",n),t.prototype.$set=L,t.prototype.$delete=R,t.prototype.$watch=function(t,e,n){var r=this;n=n||{},n.user=!0;var i=new Do(r,t,e,n);return n.immediate&&e.call(r,i.value),function(){i.teardown()}}}(ge),function(t){var e=/^hook:/;t.prototype.$on=function(t,n){var r=this,i=this;if(Array.isArray(t))for(var o=0,a=t.length;o<a;o++)r.$on(t[o],n);else(i._events[t]||(i._events[t]=[])).push(n),e.test(t)&&(i._hasHookEvent=!0);return i},t.prototype.$once=function(t,e){function n(){r.$off(t,n),e.apply(r,arguments)}var r=this;return n.fn=e,r.$on(t,n),r},t.prototype.$off=function(t,e){var n=this,r=this;if(!arguments.length)return r._events=Object.create(null),r;if(Array.isArray(t)){for(var i=0,o=t.length;i<o;i++)n.$off(t[i],e);return r}var a=r._events[t];if(!a)return r;if(1===arguments.length)return r._events[t]=null,r;for(var s,u=a.length;u--;)if((s=a[u])===e||s.fn===e){a.splice(u,1);break}return r},t.prototype.$emit=function(t){var e=this,n=e._events[t];if(n){n=n.length>1?m(n):n;for(var r=m(arguments,1),i=0,o=n.length;i<o;i++)n[i].apply(e,r)}return e}}(ge),function(t){t.prototype._update=function(t,e){var n=this;n._isMounted&&Ct(n,\"beforeUpdate\");var r=n.$el,i=n._vnode,o=$o;$o=n,n._vnode=t,n.$el=i?n.__patch__(i,t):n.__patch__(n.$el,t,e,!1,n.$options._parentElm,n.$options._refElm),$o=o,r&&(r.__vue__=null),n.$el&&(n.$el.__vue__=n),n.$vnode&&n.$parent&&n.$vnode===n.$parent._vnode&&(n.$parent.$el=n.$el)},t.prototype.$forceUpdate=function(){var t=this;t._watcher&&t._watcher.update()},t.prototype.$destroy=function(){var t=this;if(!t._isBeingDestroyed){Ct(t,\"beforeDestroy\"),t._isBeingDestroyed=!0;var e=t.$parent;!e||e._isBeingDestroyed||t.$options.abstract||d(e.$children,t),t._watcher&&t._watcher.teardown();for(var n=t._watchers.length;n--;)t._watchers[n].teardown();t._data.__ob__&&t._data.__ob__.vmCount--,t._isDestroyed=!0,t.__patch__(t._vnode,null),Ct(t,\"destroyed\"),t.$off(),t.$el&&(t.$el.__vue__=null),t.$options._parentElm=t.$options._refElm=null}}}(ge),function(t){t.prototype.$nextTick=function(t){return uo(t,this)},t.prototype._render=function(){var t=this,e=t.$options,n=e.render,r=e.staticRenderFns,i=e._parentVnode;if(t._isMounted)for(var o in t.$slots)t.$slots[o]=G(t.$slots[o]);t.$scopedSlots=i&&i.data.scopedSlots||Ui,r&&!t._staticTrees&&(t._staticTrees=[]),t.$vnode=i;var a;try{a=n.call(t._renderProxy,t.$createElement)}catch(e){A(e,t,\"render function\"),a=t._vnode}return a instanceof _o||(a=Co()),a.parent=i,a},t.prototype._o=ue,t.prototype._n=f,t.prototype._s=l,t.prototype._l=ne,t.prototype._t=re,t.prototype._q=w,t.prototype._i=x,t.prototype._m=se,t.prototype._f=ie,t.prototype._k=oe,t.prototype._b=ae,t.prototype._v=J,t.prototype._e=Co,t.prototype._u=gt}(ge);var Bo=[String,RegExp],Uo={name:\"keep-alive\",abstract:!0,props:{include:Bo,exclude:Bo},created:function(){this.cache=Object.create(null)},destroyed:function(){var t=this;for(var e in t.cache)ke(t.cache[e])},watch:{include:function(t){$e(this.cache,this._vnode,function(e){return Te(t,e)})},exclude:function(t){$e(this.cache,this._vnode,function(e){return!Te(t,e)})}},render:function(){var t=ct(this.$slots.default),e=t&&t.componentOptions;if(e){var n=Ce(e);if(n&&(this.include&&!Te(this.include,n)||this.exclude&&Te(this.exclude,n)))return t;var r=null==t.key?e.Ctor.cid+(e.tag?\"::\"+e.tag:\"\"):t.key;this.cache[r]?t.componentInstance=this.cache[r].componentInstance:this.cache[r]=t,t.data.keepAlive=!0}return t}},Wo={KeepAlive:Uo};!function(t){var e={};e.get=function(){return Bi},Object.defineProperty(t,\"config\",e),t.util={warn:zi,extend:y,mergeOptions:U,defineReactive:I},t.set=L,t.delete=R,t.nextTick=uo,t.options=Object.create(null),Mi.forEach(function(e){t.options[e+\"s\"]=Object.create(null)}),t.options._base=t,y(t.options.components,Wo),me(t),ye(t),be(t),xe(t)}(ge),Object.defineProperty(ge.prototype,\"$isServer\",{get:oo}),Object.defineProperty(ge.prototype,\"$ssrContext\",{get:function(){return this.$vnode.ssrContext}}),ge.version=\"2.3.3\";var zo,Vo,Xo,Ko,Jo,Qo,Go,Zo,Yo,ta=p(\"style,class\"),ea=p(\"input,textarea,option,select\"),na=function(t,e,n){return\"value\"===n&&ea(t)&&\"button\"!==e||\"selected\"===n&&\"option\"===t||\"checked\"===n&&\"input\"===t||\"muted\"===n&&\"video\"===t},ra=p(\"contenteditable,draggable,spellcheck\"),ia=p(\"allowfullscreen,async,autofocus,autoplay,checked,compact,controls,declare,default,defaultchecked,defaultmuted,defaultselected,defer,disabled,enabled,formnovalidate,hidden,indeterminate,inert,ismap,itemscope,loop,multiple,muted,nohref,noresize,noshade,novalidate,nowrap,open,pauseonexit,readonly,required,reversed,scoped,seamless,selected,sortable,translate,truespeed,typemustmatch,visible\"),oa=\"http://www.w3.org/1999/xlink\",aa=function(t){return\":\"===t.charAt(5)&&\"xlink\"===t.slice(0,5)},sa=function(t){return aa(t)?t.slice(6,t.length):\"\"},ua=function(t){return null==t||!1===t},ca={svg:\"http://www.w3.org/2000/svg\",math:\"http://www.w3.org/1998/Math/MathML\"},la=p(\"html,body,base,head,link,meta,style,title,address,article,aside,footer,header,h1,h2,h3,h4,h5,h6,hgroup,nav,section,div,dd,dl,dt,figcaption,figure,hr,img,li,main,ol,p,pre,ul,a,b,abbr,bdi,bdo,br,cite,code,data,dfn,em,i,kbd,mark,q,rp,rt,rtc,ruby,s,samp,small,span,strong,sub,sup,time,u,var,wbr,area,audio,map,track,video,embed,object,param,source,canvas,script,noscript,del,ins,caption,col,colgroup,table,thead,tbody,td,th,tr,button,datalist,fieldset,form,input,label,legend,meter,optgroup,option,output,progress,select,textarea,details,dialog,menu,menuitem,summary,content,element,shadow,template\"),fa=p(\"svg,animate,circle,clippath,cursor,defs,desc,ellipse,filter,font-face,foreignObject,g,glyph,image,line,marker,mask,missing-glyph,path,pattern,polygon,polyline,rect,switch,symbol,text,textpath,tspan,use,view\",!0),pa=function(t){return\"pre\"===t},da=function(t){return la(t)||fa(t)},ha=Object.create(null),va=Object.freeze({createElement:Le,createElementNS:Re,createTextNode:Pe,createComment:Fe,insertBefore:qe,removeChild:Me,appendChild:He,parentNode:Be,nextSibling:Ue,tagName:We,setTextContent:ze,setAttribute:Ve}),ga={create:function(t,e){Xe(e)},update:function(t,e){t.data.ref!==e.data.ref&&(Xe(t,!0),Xe(e))},destroy:function(t){Xe(t,!0)}},ma=new _o(\"\",{},[]),ya=[\"create\",\"activate\",\"update\",\"remove\",\"destroy\"],ba={create:Ge,update:Ge,destroy:function(t){Ge(t,ma)}},_a=Object.create(null),wa=[ga,ba],xa={create:nn,update:nn},Ca={create:on,update:on},Ta=/[\\w).+\\-_$\\]]/,$a=\"__r\",ka=\"__c\",Aa={create:Nn,update:Nn},Ea={create:Dn,update:Dn},Sa=v(function(t){var e={};return t.split(/;(?![^(]*\\))/g).forEach(function(t){if(t){var n=t.split(/:(.+)/);n.length>1&&(e[n[0].trim()]=n[1].trim())}}),e}),Oa=/^--/,ja=/\\s*!important$/,Na=function(t,e,n){if(Oa.test(e))t.style.setProperty(e,n);else if(ja.test(n))t.style.setProperty(e,n.replace(ja,\"\"),\"important\");else{var r=Ia(e);if(Array.isArray(n))for(var i=0,o=n.length;i<o;i++)t.style[r]=n[i];else t.style[r]=n}},Da=[\"Webkit\",\"Moz\",\"ms\"],Ia=v(function(t){if(Yo=Yo||document.createElement(\"div\"),\"filter\"!==(t=Ii(t))&&t in Yo.style)return t;for(var e=t.charAt(0).toUpperCase()+t.slice(1),n=0;n<Da.length;n++){var r=Da[n]+e;if(r in Yo.style)return r}}),La={create:Mn,update:Mn},Ra=v(function(t){return{enterClass:t+\"-enter\",enterToClass:t+\"-enter-to\",enterActiveClass:t+\"-enter-active\",leaveClass:t+\"-leave\",leaveToClass:t+\"-leave-to\",leaveActiveClass:t+\"-leave-active\"}}),Pa=Xi&&!Qi,Fa=\"transition\",qa=\"animation\",Ma=\"transition\",Ha=\"transitionend\",Ba=\"animation\",Ua=\"animationend\";Pa&&(void 0===window.ontransitionend&&void 0!==window.onwebkittransitionend&&(Ma=\"WebkitTransition\",Ha=\"webkitTransitionEnd\"),void 0===window.onanimationend&&void 0!==window.onwebkitanimationend&&(Ba=\"WebkitAnimation\",Ua=\"webkitAnimationEnd\"));var Wa=Xi&&window.requestAnimationFrame?window.requestAnimationFrame.bind(window):setTimeout,za=/\\b(transform|all)(,|$)/,Va=Xi?{create:er,activate:er,remove:function(t,e){!0!==t.data.show?Zn(t,e):e()}}:{},Xa=[xa,Ca,Aa,Ea,La,Va],Ka=Xa.concat(wa),Ja=function(t){function e(t){return new _o(O.tagName(t).toLowerCase(),{},[],void 0,t)}function o(t,e){function n(){0==--n.listeners&&s(t)}return n.listeners=e,n}function s(t){var e=O.parentNode(t);r(e)&&O.removeChild(e,t)}function u(t,e,n,o,a){if(t.isRootInsert=!a,!c(t,e,n,o)){var s=t.data,u=t.children,l=t.tag;r(l)?(t.elm=t.ns?O.createElementNS(t.ns,l):O.createElement(l,t),m(t),h(t,u,e),r(s)&&g(t,e),d(n,t.elm,o)):i(t.isComment)?(t.elm=O.createComment(t.text),d(n,t.elm,o)):(t.elm=O.createTextNode(t.text),d(n,t.elm,o))}}function c(t,e,n,o){var a=t.data;if(r(a)){var s=r(t.componentInstance)&&a.keepAlive;if(r(a=a.hook)&&r(a=a.init)&&a(t,!1,n,o),r(t.componentInstance))return l(t,e),i(s)&&f(t,e,n,o),!0}}function l(t,e){r(t.data.pendingInsert)&&e.push.apply(e,t.data.pendingInsert),t.elm=t.componentInstance.$el,v(t)?(g(t,e),m(t)):(Xe(t),e.push(t))}function f(t,e,n,i){for(var o,a=t;a.componentInstance;)if(a=a.componentInstance._vnode,r(o=a.data)&&r(o=o.transition)){for(o=0;o<E.activate.length;++o)E.activate[o](ma,a);e.push(a);break}d(n,t.elm,i)}function d(t,e,n){r(t)&&(r(n)?n.parentNode===t&&O.insertBefore(t,e,n):O.appendChild(t,e))}function h(t,e,n){if(Array.isArray(e))for(var r=0;r<e.length;++r)u(e[r],n,t.elm,null,!0);else a(t.text)&&O.appendChild(t.elm,O.createTextNode(t.text))}function v(t){for(;t.componentInstance;)t=t.componentInstance._vnode;return r(t.tag)}function g(t,e){for(var n=0;n<E.create.length;++n)E.create[n](ma,t);k=t.data.hook,r(k)&&(r(k.create)&&k.create(ma,t),r(k.insert)&&e.push(t))}function m(t){for(var e,n=t;n;)r(e=n.context)&&r(e=e.$options._scopeId)&&O.setAttribute(t.elm,e,\"\"),n=n.parent;r(e=$o)&&e!==t.context&&r(e=e.$options._scopeId)&&O.setAttribute(t.elm,e,\"\")}function y(t,e,n,r,i,o){for(;r<=i;++r)u(n[r],o,t,e)}function b(t){var e,n,i=t.data;if(r(i))for(r(e=i.hook)&&r(e=e.destroy)&&e(t),e=0;e<E.destroy.length;++e)E.destroy[e](t);if(r(e=t.children))for(n=0;n<t.children.length;++n)b(t.children[n])}function _(t,e,n,i){for(;n<=i;++n){var o=e[n];r(o)&&(r(o.tag)?(w(o),b(o)):s(o.elm))}}function w(t,e){if(r(e)||r(t.data)){var n,i=E.remove.length+1;for(r(e)?e.listeners+=i:e=o(t.elm,i),r(n=t.componentInstance)&&r(n=n._vnode)&&r(n.data)&&w(n,e),n=0;n<E.remove.length;++n)E.remove[n](t,e);r(n=t.data.hook)&&r(n=n.remove)?n(t,e):e()}else s(t.elm)}function x(t,e,i,o,a){for(var s,c,l,f,p=0,d=0,h=e.length-1,v=e[0],g=e[h],m=i.length-1,b=i[0],w=i[m],x=!a;p<=h&&d<=m;)n(v)?v=e[++p]:n(g)?g=e[--h]:Ke(v,b)?(C(v,b,o),v=e[++p],b=i[++d]):Ke(g,w)?(C(g,w,o),g=e[--h],w=i[--m]):Ke(v,w)?(C(v,w,o),x&&O.insertBefore(t,v.elm,O.nextSibling(g.elm)),v=e[++p],w=i[--m]):Ke(g,b)?(C(g,b,o),x&&O.insertBefore(t,g.elm,v.elm),g=e[--h],b=i[++d]):(n(s)&&(s=Qe(e,p,h)),c=r(b.key)?s[b.key]:null,n(c)?(u(b,o,t,v.elm),b=i[++d]):(l=e[c],Ke(l,b)?(C(l,b,o),e[c]=void 0,x&&O.insertBefore(t,b.elm,v.elm),b=i[++d]):(u(b,o,t,v.elm),b=i[++d])));p>h?(f=n(i[m+1])?null:i[m+1].elm,y(t,f,i,d,m,o)):d>m&&_(t,e,p,h)}function C(t,e,o,a){if(t!==e){if(i(e.isStatic)&&i(t.isStatic)&&e.key===t.key&&(i(e.isCloned)||i(e.isOnce)))return e.elm=t.elm,void(e.componentInstance=t.componentInstance);var s,u=e.data;r(u)&&r(s=u.hook)&&r(s=s.prepatch)&&s(t,e);var c=e.elm=t.elm,l=t.children,f=e.children;if(r(u)&&v(e)){for(s=0;s<E.update.length;++s)E.update[s](t,e);r(s=u.hook)&&r(s=s.update)&&s(t,e)}n(e.text)?r(l)&&r(f)?l!==f&&x(c,l,f,o,a):r(f)?(r(t.text)&&O.setTextContent(c,\"\"),y(c,null,f,0,f.length-1,o)):r(l)?_(c,l,0,l.length-1):r(t.text)&&O.setTextContent(c,\"\"):t.text!==e.text&&O.setTextContent(c,e.text),r(u)&&r(s=u.hook)&&r(s=s.postpatch)&&s(t,e)}}function T(t,e,n){if(i(n)&&r(t.parent))t.parent.data.pendingInsert=e;else for(var o=0;o<e.length;++o)e[o].data.hook.insert(e[o])}function $(t,e,n){e.elm=t;var i=e.tag,o=e.data,a=e.children;if(r(o)&&(r(k=o.hook)&&r(k=k.init)&&k(e,!0),r(k=e.componentInstance)))return l(e,n),!0;if(r(i)){if(r(a))if(t.hasChildNodes()){for(var s=!0,u=t.firstChild,c=0;c<a.length;c++){if(!u||!$(u,a[c],n)){s=!1;break}u=u.nextSibling}if(!s||u)return!1}else h(e,a,n);if(r(o))for(var f in o)if(!j(f)){g(e,n);break}}else t.data!==e.text&&(t.data=e.text);return!0}var k,A,E={},S=t.modules,O=t.nodeOps;for(k=0;k<ya.length;++k)for(E[ya[k]]=[],A=0;A<S.length;++A)r(S[A][ya[k]])&&E[ya[k]].push(S[A][ya[k]]);var j=p(\"attrs,style,class,staticClass,staticStyle,key\");return function(t,o,a,s,c,l){if(n(o))return void(r(t)&&b(t));var f=!1,p=[];if(n(t))f=!0,u(o,p,c,l);else{var d=r(t.nodeType);if(!d&&Ke(t,o))C(t,o,p,s);else{if(d){if(1===t.nodeType&&t.hasAttribute(qi)&&(t.removeAttribute(qi),a=!0),i(a)&&$(t,o,p))return T(o,p,!0),t;t=e(t)}var h=t.elm,g=O.parentNode(h);if(u(o,p,h._leaveCb?null:g,O.nextSibling(h)),r(o.parent)){for(var m=o.parent;m;)m.elm=o.elm,m=m.parent;if(v(o))for(var y=0;y<E.create.length;++y)E.create[y](ma,o.parent)}r(g)?_(g,[t],0,0):r(t.tag)&&b(t)}}return T(o,p,f),o.elm}}({nodeOps:va,modules:Ka});Qi&&document.addEventListener(\"selectionchange\",function(){var t=document.activeElement;t&&t.vmodel&&sr(t,\"input\")});var Qa={inserted:function(t,e,n){if(\"select\"===n.tag){var r=function(){nr(t,e,n.context)};r(),(Ji||Gi)&&setTimeout(r,0)}else\"textarea\"!==n.tag&&\"text\"!==t.type&&\"password\"!==t.type||(t._vModifiers=e.modifiers,e.modifiers.lazy||(t.addEventListener(\"change\",ar),Zi||(t.addEventListener(\"compositionstart\",or),t.addEventListener(\"compositionend\",ar)),Qi&&(t.vmodel=!0)))},componentUpdated:function(t,e,n){if(\"select\"===n.tag){nr(t,e,n.context);(t.multiple?e.value.some(function(e){return rr(e,t.options)}):e.value!==e.oldValue&&rr(e.value,t.options))&&sr(t,\"change\")}}},Ga={bind:function(t,e,n){var r=e.value;n=ur(n);var i=n.data&&n.data.transition,o=t.__vOriginalDisplay=\"none\"===t.style.display?\"\":t.style.display;r&&i&&!Qi?(n.data.show=!0,Gn(n,function(){t.style.display=o})):t.style.display=r?o:\"none\"},update:function(t,e,n){var r=e.value;r!==e.oldValue&&(n=ur(n),n.data&&n.data.transition&&!Qi?(n.data.show=!0,r?Gn(n,function(){t.style.display=t.__vOriginalDisplay}):Zn(n,function(){t.style.display=\"none\"})):t.style.display=r?t.__vOriginalDisplay:\"none\")},unbind:function(t,e,n,r,i){i||(t.style.display=t.__vOriginalDisplay)}},Za={model:Qa,show:Ga},Ya={name:String,appear:Boolean,css:Boolean,mode:String,type:String,enterClass:String,leaveClass:String,enterToClass:String,leaveToClass:String,enterActiveClass:String,leaveActiveClass:String,appearClass:String,appearActiveClass:String,appearToClass:String,duration:[Number,String,Object]},ts={name:\"transition\",props:Ya,abstract:!0,render:function(t){var e=this,n=this.$slots.default;if(n&&(n=n.filter(function(t){return t.tag}),n.length)){var r=this.mode,i=n[0];if(pr(this.$vnode))return i;var o=cr(i);if(!o)return i;if(this._leaving)return fr(t,i);var s=\"__transition-\"+this._uid+\"-\";o.key=null==o.key?s+o.tag:a(o.key)?0===String(o.key).indexOf(s)?o.key:s+o.key:o.key;var u=(o.data||(o.data={})).transition=lr(this),c=this._vnode,l=cr(c);if(o.data.directives&&o.data.directives.some(function(t){return\"show\"===t.name})&&(o.data.show=!0),l&&l.data&&!dr(o,l)){var f=l&&(l.data.transition=y({},u));if(\"out-in\"===r)return this._leaving=!0,tt(f,\"afterLeave\",function(){e._leaving=!1,e.$forceUpdate()}),fr(t,i);if(\"in-out\"===r){var p,d=function(){p()};tt(u,\"afterEnter\",d),tt(u,\"enterCancelled\",d),tt(f,\"delayLeave\",function(t){p=t})}}return i}}},es=y({tag:String,moveClass:String},Ya);delete es.mode;var ns={props:es,render:function(t){for(var e=this.tag||this.$vnode.data.tag||\"span\",n=Object.create(null),r=this.prevChildren=this.children,i=this.$slots.default||[],o=this.children=[],a=lr(this),s=0;s<i.length;s++){var u=i[s];if(u.tag)if(null!=u.key&&0!==String(u.key).indexOf(\"__vlist\"))o.push(u),n[u.key]=u,(u.data||(u.data={})).transition=a;else;}if(r){for(var c=[],l=[],f=0;f<r.length;f++){var p=r[f];p.data.transition=a,p.data.pos=p.elm.getBoundingClientRect(),n[p.key]?c.push(p):l.push(p)}this.kept=t(e,null,c),this.removed=l}return t(e,null,o)},beforeUpdate:function(){this.__patch__(this._vnode,this.kept,!1,!0),this._vnode=this.kept},updated:function(){var t=this.prevChildren,e=this.moveClass||(this.name||\"v\")+\"-move\";if(t.length&&this.hasMove(t[0].elm,e)){t.forEach(hr),t.forEach(vr),t.forEach(gr);var n=document.body;n.offsetHeight;t.forEach(function(t){if(t.data.moved){var n=t.elm,r=n.style;zn(n,e),r.transform=r.WebkitTransform=r.transitionDuration=\"\",n.addEventListener(Ha,n._moveCb=function t(r){r&&!/transform$/.test(r.propertyName)||(n.removeEventListener(Ha,t),n._moveCb=null,Vn(n,e))})}})}},methods:{hasMove:function(t,e){if(!Pa)return!1;if(null!=this._hasMove)return this._hasMove;var n=t.cloneNode();t._transitionClasses&&t._transitionClasses.forEach(function(t){Bn(n,t)}),Hn(n,e),n.style.display=\"none\",this.$el.appendChild(n);var r=Kn(n);return this.$el.removeChild(n),this._hasMove=r.hasTransform}}},rs={Transition:ts,TransitionGroup:ns};ge.config.mustUseProp=na,ge.config.isReservedTag=da,ge.config.isReservedAttr=ta,ge.config.getTagNamespace=Ne,ge.config.isUnknownElement=De,y(ge.options.directives,Za),y(ge.options.components,rs),ge.prototype.__patch__=Xi?Ja:_,ge.prototype.$mount=function(t,e){return t=t&&Xi?Ie(t):void 0,yt(this,t,e)},setTimeout(function(){Bi.devtools&&ao&&ao.emit(\"init\",ge)},0);var is,os=!!Xi&&function(t,e){var n=document.createElement(\"div\");return n.innerHTML='<div a=\"'+t+'\">',n.innerHTML.indexOf(e)>0}(\"\\n\",\"&#10;\"),as=p(\"area,base,br,col,embed,frame,hr,img,input,isindex,keygen,link,meta,param,source,track,wbr\"),ss=p(\"colgroup,dd,dt,li,options,p,td,tfoot,th,thead,tr,source\"),us=p(\"address,article,aside,base,blockquote,body,caption,col,colgroup,dd,details,dialog,div,dl,dt,fieldset,figcaption,figure,footer,form,h1,h2,h3,h4,h5,h6,head,header,hgroup,hr,html,legend,li,menuitem,meta,optgroup,option,param,rp,rt,source,style,summary,tbody,td,tfoot,th,thead,title,tr,track\"),cs=[/\"([^\"]*)\"+/.source,/'([^']*)'+/.source,/([^\\s\"'=<>`]+)/.source],ls=new RegExp(\"^\\\\s*\"+/([^\\s\"'<>\\/=]+)/.source+\"(?:\\\\s*(\"+/(?:=)/.source+\")\\\\s*(?:\"+cs.join(\"|\")+\"))?\"),fs=\"[a-zA-Z_][\\\\w\\\\-\\\\.]*\",ps=\"((?:\"+fs+\"\\\\:)?\"+fs+\")\",ds=new RegExp(\"^<\"+ps),hs=/^\\s*(\\/?)>/,vs=new RegExp(\"^<\\\\/\"+ps+\"[^>]*>\"),gs=/^<!DOCTYPE [^>]+>/i,ms=/^<!--/,ys=/^<!\\[/,bs=!1;\"x\".replace(/x(.)?/g,function(t,e){bs=\"\"===e});var _s,ws,xs,Cs,Ts,$s,ks,As,Es,Ss,Os,js,Ns,Ds,Is,Ls,Rs,Ps,Fs=p(\"script,style,textarea\",!0),qs={},Ms={\"&lt;\":\"<\",\"&gt;\":\">\",\"&quot;\":'\"',\"&amp;\":\"&\",\"&#10;\":\"\\n\"},Hs=/&(?:lt|gt|quot|amp);/g,Bs=/&(?:lt|gt|quot|amp|#10);/g,Us=/\\{\\{((?:.|\\n)+?)\\}\\}/g,Ws=v(function(t){var e=t[0].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\"),n=t[1].replace(/[-.*+?^${}()|[\\]\\/\\\\]/g,\"\\\\$&\");return new RegExp(e+\"((?:.|\\\\n)+?)\"+n,\"g\")}),zs=/^@|^v-on:/,Vs=/^v-|^@|^:/,Xs=/(.*?)\\s+(?:in|of)\\s+(.*)/,Ks=/\\((\\{[^}]*\\}|[^,]*),([^,]*)(?:,([^,]*))?\\)/,Js=/:(.*)$/,Qs=/^:|^v-bind:/,Gs=/\\.[^.]+/g,Zs=v(mr),Ys=/^xmlns:NS\\d+/,tu=/^NS\\d+:/,eu=v(Br),nu=/^\\s*([\\w$_]+|\\([^)]*?\\))\\s*=>|^function\\s*\\(/,ru=/^\\s*[A-Za-z_$][\\w$]*(?:\\.[A-Za-z_$][\\w$]*|\\['.*?']|\\[\".*?\"]|\\[\\d+]|\\[[A-Za-z_$][\\w$]*])*\\s*$/,iu={esc:27,tab:9,enter:13,space:32,up:38,left:37,right:39,down:40,delete:[8,46]},ou=function(t){return\"if(\"+t+\")return null;\"},au={stop:\"$event.stopPropagation();\",prevent:\"$event.preventDefault();\",self:ou(\"$event.target !== $event.currentTarget\"),ctrl:ou(\"!$event.ctrlKey\"),shift:ou(\"!$event.shiftKey\"),alt:ou(\"!$event.altKey\"),meta:ou(\"!$event.metaKey\"),left:ou(\"'button' in $event && $event.button !== 0\"),middle:ou(\"'button' in $event && $event.button !== 1\"),right:ou(\"'button' in $event && $event.button !== 2\")},su={bind:Zr,cloak:_},uu=(new RegExp(\"\\\\b\"+\"do,if,for,let,new,try,var,case,else,with,await,break,catch,class,const,super,throw,while,yield,delete,export,import,return,switch,default,extends,finally,continue,debugger,function,arguments\".split(\",\").join(\"\\\\b|\\\\b\")+\"\\\\b\"),new RegExp(\"\\\\b\"+\"delete,typeof,void\".split(\",\").join(\"\\\\s*\\\\([^\\\\)]*\\\\)|\\\\b\")+\"\\\\s*\\\\([^\\\\)]*\\\\)\"),{staticKeys:[\"staticClass\"],transformNode:Ti,genData:$i}),cu={staticKeys:[\"staticStyle\"],transformNode:ki,genData:Ai},lu=[uu,cu],fu={model:Tn,text:Ei,html:Si},pu={expectHTML:!0,modules:lu,directives:fu,isPreTag:pa,isUnaryTag:as,mustUseProp:na,canBeLeftOpenTag:ss,isReservedTag:da,getTagNamespace:Ne,staticKeys:function(t){return t.reduce(function(t,e){return t.concat(e.staticKeys||[])},[]).join(\",\")}(lu)},du=function(t){function e(e,n){var r=Object.create(t),i=[],o=[];if(r.warn=function(t,e){(e?o:i).push(t)},n){n.modules&&(r.modules=(t.modules||[]).concat(n.modules)),n.directives&&(r.directives=y(Object.create(t.directives),n.directives));for(var a in n)\"modules\"!==a&&\"directives\"!==a&&(r[a]=n[a])}var s=xi(e,r);return s.errors=i,s.tips=o,s}function n(t,n,i){n=n||{};var o=n.delimiters?String(n.delimiters)+t:t;if(r[o])return r[o];var a=e(t,n),s={},u=[];s.render=Ci(a.render,u);var c=a.staticRenderFns.length;s.staticRenderFns=new Array(c);for(var l=0;l<c;l++)s.staticRenderFns[l]=Ci(a.staticRenderFns[l],u);return r[o]=s}var r=Object.create(null);return{compile:e,compileToFunctions:n}}(pu),hu=du.compileToFunctions,vu=v(function(t){var e=Ie(t);return e&&e.innerHTML}),gu=ge.prototype.$mount;ge.prototype.$mount=function(t,e){if((t=t&&Ie(t))===document.body||t===document.documentElement)return this;var n=this.$options;if(!n.render){var r=n.template;if(r)if(\"string\"==typeof r)\"#\"===r.charAt(0)&&(r=vu(r));else{if(!r.nodeType)return this;r=r.innerHTML}else t&&(r=Oi(t));if(r){var i=hu(r,{shouldDecodeNewlines:os,delimiters:n.delimiters},this),o=i.render,a=i.staticRenderFns;n.render=o,n.staticRenderFns=a}}return gu.call(this,t,e)},ge.compile=hu,t.exports=ge}).call(e,n(7))},function(t,e){t.exports=function(t){return t.webpackPolyfill||(t.deprecate=function(){},t.paths=[],t.children||(t.children=[]),Object.defineProperty(t,\"loaded\",{enumerable:!0,get:function(){return t.l}}),Object.defineProperty(t,\"id\",{enumerable:!0,get:function(){return t.i}}),t.webpackPolyfill=1),t}},function(t,e,n){n(8),t.exports=n(9)}]);"
  },
  {
    "path": "public/mix-manifest.json",
    "content": "{\n    \"/assets/js/front.app.js\": \"/assets/js/front.app.js?id=8c5533650caf38d9e5a0\",\n    \"/assets/css/styles.css\": \"/assets/css/styles.css?id=43ea916dee990e0ec142\",\n    \"/assets/css/editor.css\": \"/assets/css/editor.css?id=0065d8c60ebcab138585\",\n    \"/assets/js/styles.js\": \"/assets/js/styles.js?id=843445e204645c56c78d\",\n    \"/assets/js/editor.js\": \"/assets/js/editor.js?id=de06ded8159b7c676330\"\n}"
  },
  {
    "path": "public/robots.txt",
    "content": "User-agent: *\nDisallow:\n"
  },
  {
    "path": "public/web.config",
    "content": "<configuration>\n  <system.webServer>\n    <rewrite>\n      <rules>\n        <rule name=\"Imported Rule 1\" stopProcessing=\"true\">\n          <match url=\"^(.*)/$\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Redirect\" redirectType=\"Permanent\" url=\"/{R:1}\" />\n        </rule>\n        <rule name=\"Imported Rule 2\" stopProcessing=\"true\">\n          <match url=\"^\" ignoreCase=\"false\" />\n          <conditions>\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsDirectory\" ignoreCase=\"false\" negate=\"true\" />\n            <add input=\"{REQUEST_FILENAME}\" matchType=\"IsFile\" ignoreCase=\"false\" negate=\"true\" />\n          </conditions>\n          <action type=\"Rewrite\" url=\"index.php\" />\n        </rule>\n      </rules>\n    </rewrite>\n  </system.webServer>\n</configuration>\n"
  },
  {
    "path": "readme.md",
    "content": "<p align=\"center\">\n  <br>\n  <b>Ucer-admin</b>\n  <br>\n  <a href=\"https://www.codehaoshi.com\">\n    <img src=\"http://ovdt3w8zp.bkt.clouddn.com/2017-09-05%2010-59-03%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png\" width=800>\n  </a>\n  <br>\n  <a href=\"https://www.codehaoshi.com\">\n    <img src=\"http://ovdt3w8zp.bkt.clouddn.com/2017-09-05%2011-23-07%E5%B1%8F%E5%B9%95%E6%88%AA%E5%9B%BE.png\" width=800>\n  </a>\n</p>\n\n---\n# Code 好事\n\n## 项目描述\n该项目用来记录日常开发的笔记，用 laravel 与 vue 构建。后台使用 [ucer-admin](https://github.com/Ucer/ucer-admin) 管理系统开发。代码完全开源。\n\n* 产品名称：Code 好事\n* 项目代码：Code 好事\n* 官方地址：https://codehaoshi.com\n* vue & laravel 开发的后台管理系统：请移歨 [lucms](https://gitee.com/zhjaa/lucms)\n\n## 功能清单\n\n- 用户注册登录\n- 权限系统\n- 修改 & 找回密码\n- 推文 & 发表问题\n- 文章点告赞 & 评论\n- 用户关注\n- 数据备份\n\n## 运行环境\n\n- Laravel5.5.*\n- Nginx 1.8+\n- PHP 7.1+\n- Mysql 5.7+\n\n## 开发环境部署/安装\n\n### 1. 克隆源代码\n\n克隆源代码到本地：\n\n    > git clone https://github.com/Ucer/codehaoshi.git\n\n### 2. 配置本地的环境\n\n\n- 修改 .env \n```\nAPP_NAME=Code好事 //网站名称\nAPP_ENV=production //生产环境\nAPP_DEBUG=false\nAPP_LOG_LEVEL=debug\nAPP_URL=http://codehaoshi.app/ // 注意最后 加 /\n\nDB_CONNECTION=mysql\nDB_HOST=127.0.0.1\nDB_PORT=3306\nDB_DATABASE=codehaoshi\nDB_USERNAME=homestead\nDB_PASSWORD=secret\n\nCLIENT_ID= // github id\nCLIENT_SECRET= // github secret\nUPLOAD_PATH=uploads //文件上传路径 \nYOUDAO_APP_KEY=\nYOUDAO_APP_SECRET=\nBACKUP_DISK=/srv/www/data-back // 目录不存在则手动创建\n```\n\n- 修改app 配置文件\nconfig/app.php\n```php\n<?php\n// . . .\n'log' => env('APP_LOG', 'daily'), // 每天记录一个文件\n'log_max_files' => 30,\n'timezone' => 'PRC',\n```\n\n- 文件权限问题\n```text\nchmod 777 -R public ;\nchmod 777 -R storage/log storage/framework;\n```\n\n- 安装\n```text\ncomposer install\ncnpm install\nphp artisan passport:install\n```\n\n\n### 3.php 配置\n- 开启 phpinfo\n\n\n### 4.运行安装命令\n```text\ncomposer dump-autoload\nphp artisan codehaoshi:install\n用 github 注册第一个用户或者自己注册一个账号,\n绑定第一个用户为超级管理员.\nphp artisan bindAdmin:Ucer\n\n```\n\n如果在使用过程中碰到任何问题，请在本站对 [开源项目问答](https://codehaoshi.com/q/opensource_project) 的问题专区进行提问\n\n## 任务调度\n\n- 每天 24点 备份一次数据库\n- 每周备份一次 整个项目代码\n- 备份成功与否结果以邮件形式通知\n- 请手动清理备份文件\n\n## Contributors\n\n- [Code 好事](https://codehaoshi.com)\n\n\n\n"
  },
  {
    "path": "resources/assets/js/app.js",
    "content": "\n/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n\nrequire('./bootstrap');\n\nwindow.Vue = require('vue');\n\n/**\n * Next, we will create a fresh Vue application instance and attach it to\n * the page. Then, you may begin adding components to this application\n * or customize the JavaScript scaffolding to fit your unique needs.\n */\n\nVue.component('example', require('./components/Example.vue'));\n\nconst app = new Vue({\n    el: '#app'\n});\n"
  },
  {
    "path": "resources/assets/js/bootstrap.js",
    "content": "\nwindow._ = require('lodash');\n\n/**\n * We'll load jQuery and the Bootstrap jQuery plugin which provides support\n * for JavaScript based Bootstrap features such as modals and tabs. This\n * code may be modified to fit the specific needs of your application.\n */\n\ntry {\n    window.$ = window.jQuery = require('jquery');\n\n    require('bootstrap-sass');\n} catch (e) {}\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\n\nwindow.axios = require('axios');\n\nwindow.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';\n\n/**\n * Next we will register the CSRF Token as a common header with Axios so that\n * all outgoing HTTP requests automatically have it attached. This is just\n * a simple convenience so we don't have to attach every token manually.\n */\n\nlet token = document.head.querySelector('meta[name=\"csrf-token\"]');\n\nif (token) {\n    window.axios.defaults.headers.common['X-CSRF-TOKEN'] = token.content;\n} else {\n    console.error('CSRF token not found: https://laravel.com/docs/csrf#csrf-x-csrf-token');\n}\n\n/**\n * Echo exposes an expressive API for subscribing to channels and listening\n * for events that are broadcast by Laravel. Echo and event broadcasting\n * allows your team to easily build robust real-time web applications.\n */\n\n// import Echo from 'laravel-echo'\n\n// window.Pusher = require('pusher-js');\n\n// window.Echo = new Echo({\n//     broadcaster: 'pusher',\n//     key: 'your-pusher-key'\n// });\n"
  },
  {
    "path": "resources/assets/js/components/Avatar.vue",
    "content": "<template>\n    <div class=\"ui list\" style=\"margin-top: 6px;margin-left: 4px;\">\n        <div class=\"item\">\n            <img class=\"ui centered circular tiny image\" :src=\"src\"/>\n            <div class=\"content user-info\">\n                <a class=\"header title\">{{ user_name }}</a>\n                <div class=\"description\"> 第 {{ id }}&nbsp;&nbsp;位会员 </div>\n                <div class=\"description\"> 注册于&nbsp;<span\n                        class=\"labels-time timeago\">{{ time }}</span></div>\n            </div>\n            <my-upload field=\"myfile\"\n                       @crop-success=\"cropSuccess\"\n                       @crop-upload-success=\"cropUploadSuccess\"\n                       @crop-upload-fail=\"cropUploadFail\"\n                       v-model=\"show\"\n                       :width=\"50\"\n                       :height=\"50\"\n                       url=\"/file/upload\"\n                       :params=\"params\"\n                       :headers=\"headers\"\n                       img-format=\"png\"></my-upload>\n        </div>\n        <div class=\"description labels-time ui teal mini basic button\" @click=\"toggleShow\" v-if=\"this.user_name == this.now_user || this.is_supperadmin\">修改头像</div>\n        <div class=\"description labels-time\"><i class=\"bookmark icon intro\"></i> {{ introduction }} </div>\n    </div>\n</template>\n\n<script>\n\n    export default {\n        props: ['src', 'id', 'user_name', 'time', 'introduction', 'now_user', 'is_supperadmin'],\n        data() {\n            return {\n                show: false,\n                params: {\n                    _token: Laravel.csrfToken,\n                    path: 'avatar',\n                    id: this.id\n                },\n                headers: {\n                    smail: '*_~'\n                },\n                imgDataUrl: this.avata\n            }\n        },\n        methods: {\n            toggleShow() {\n                this.show = !this.show;\n            },\n            /**\n             * crop success\n             *\n             * [param] imgDataUrl\n             * [param] field\n             */\n            cropSuccess(imgDataUrl, field){\n                this.src = imgDataUrl;\n            },\n            /**\n             * upload success\n             *\n             * [param] jsonData  server api return data, already json encode\n             * [param] field\n             */\n            cropUploadSuccess(response, field){\n                this.src = response.msg;\n                this.toggleShow();\n                window.location = '/users/' + this.user_name;\n                toastr.info('头像修改成功')\n            },\n            /**\n             * upload fail\n             *\n             * [param] status    server api return error status, like 500\n             * [param] field\n             */\n            cropUploadFail(status, field){\n//                console.log('-------- upload fail --------');\n//                console.log(status);\n//                console.log('field: ' + field);\n                toastr.error('failed:' + field)\n            }\n        }\n    }\n</script>\n\n<style>\n    .vue-image-crop-upload .vicp-wrap .vicp-operate {\n        position: absolute;\n        left: 20px;\n        bottom: 20px;\n    }\n</style>\n"
  },
  {
    "path": "resources/assets/js/components/Avatar.vue.old",
    "content": "<template>\n    <div class=\"cover-avatar text-center\">\n        <a href=\"javascript:;\" class=\"btn-success-m file\">\n            <span>修改头像</span>\n            <input type=\"file\" name=\"avatar\" class=\"file-m\" @change=\"upload\">\n        </a>\n    </div>\n</template>\n\n<script>\n    import Cropper from '../components/Cropper'\n    export default {\n        props: {\n            src: {\n                type: String,\n                default() {\n                    return ''\n                }\n            }\n        },\n        data() {\n            return {\n                cropImage: undefined,\n                dialogVisible: false,\n                imageType: 'image/png,image/gif,image/jpeg,image/jpg,image/tiff'\n            }\n        },\n        methods: {\n            upload(e) {\n                let image = e.target.files[0];\n                let formData = new FormData();\n\n                formData.append('myfile', image);\n                formData.append('path', 'avatar');\n\n                this.$http.post('file/upload', formData)\n                    .then((response) => {\n                        this.cropImage = response.data;\n\n                        this.dialogVisible = true\n                    })\n\n            },\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/assets/js/components/Comment.vue",
    "content": "<template>\n    <div>\n        <div v-bind:style=\"{display:loading?'block':'none'}\" class=\"ui icon message info\">\n            <i class=\"notched circle loading icon\"></i>\n            <div class=\"content\">\n                <div class=\"header\">稍候 </div>\n                <p>正在努力加载中。。。</p>\n            </div>\n        </div>\n        <div v-bind:style=\"{display:loading?'none':'block'}\">\n            <div class=\"ui message basic centerd voted-box\">\n                <div class=\"buttons\" v-if=\"canVote\">\n                    <div class=\"ui button kb-star-big basic teal\" :class=\"requireLogin\" @click=\"functionVote('up')\"\n                         title=\"点赞相当于收藏，可以在个人页面的「关注的」导航里查看\"><i\n                            class=\"icon thumbs up\"></i> <span class=\"state\">点赞</span>\n                    </div>\n                </div>\n                <div class=\"buttons\" v-else>\n                    <div class=\"ui button kb-star-big basic teal\" @click=\"functionVote('dw')\"\n                         title=\"点赞相当于收藏，可以在个人页面的「赞过的话题」导航里查看\">\n                        <span class=\"state\">取消点赞</span>\n                    </div>\n                </div>\n\n                <div class=\"voted-users\">\n                <span v-for=\"(vote, index) in votes\">\n                    <a :href=\"'/users/' + vote.user_name\" class=\"ui popover\">\n                        <img class=\"ui image avatar image-33 stargazer\"\n                             :src=\"vote.avatar\">\n                    </a>\n                </span>\n                    <span v-if=\"noVote\"> 成为第一个点赞的人吧 &nbsp;&nbsp; <img alt=\":smile:\" class=\"emoji\"\n                                                                      src=\"/assets/images/emoji/smile.png\"\n                                                                      align=\"absmiddle\"/> </span>\n                </div>\n            </div>\n            <div class=\"ui threaded comments comment-list \">\n                <div class=\"ui divider horizontal grey\"><i class=\"icon comments\"></i> {{ comment_count }}\n                </div>\n\n                <div class=\"comments-feed\">\n                    <div class=\"comment\" v-for=\"(comment, index) in comments\">\n                        <a class=\"avatar\" :href=\"'/users/' +comment.user_name\">\n                            <img :src=\"comment.avatar\">\n                        </a>\n                        <div class=\"content\">\n                            <div class=\"comment-header\">\n                                <div class=\"meta\">\n                                    <a class=\"author ui popover\" :href=\"'/users/' + comment.user_name\"> <i\n                                            class=\"icon user\"></i>{{ comment.user_name }}</a>\n                                    <div class=\"metadata\">\n                                        <span class=\"date\"><i class=\"icon wait\"></i>{{ comment.created_at }}</span>\n                                    </div>\n                                </div>\n                                <div class=\"reaction\">\n                                    <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                                        <a title=\"删除\" class=\"ui teal\" href=\"javascript:;\"\n                                           v-if=\"canDelComment(comment.user_id)\"\n                                           @click=\"commentDelete(index, comment.id)\"><i class=\"icon trash\"></i></a>\n                                        <a href=\"#comment_content\" :title=\"'回复'+comment.user_name\"\n                                           @click=\"replyOne(comment.user_name)\"\n                                           class=\"ui teal reply-btn\"><i class=\"icon reply\"></i></a>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"text comment-body markdown-reply\" v-html=\"comment.content_html\">\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <br>\n\n                <div class=\"comment-box\">\n                    <h3 class=\"ui header\" v-if=\"isChecked == 'false'\">\n                        <a href=\"\" class=\"login-required\">登录</a>\n                    </h3>\n                    <div class=\"ui warning message\">\n                        <i class=\"icon warning\"></i> 支持 markdown 语法、支持表情,请务进行语言攻击。\n                    </div>\n\n                    <form class=\"ui reply form\" @submit.prevent=\"comment\"\n                          accept-charset=\"UTF-8\" id=\"comment-composing-form\">\n                        <input type=\"hidden\" name=\"article_id\" value=\"\"/>\n\n                        <div class=\"field\">\n                    <textarea name=\"body\" required=\"请填写内容\" :class=\"requireLogin\" v-model=\"body\"\n                              id=\"comment_content\"></textarea></div>\n                        <button class=\"ui teal labeled icon button\" :disabled=\"isSubmiting ? true : false\"\n                                v-if=\"isChecked != 'false'\" type=\"submit\"\n                                id=\"comment-create-submit\">\n                            <i class=\"icon comment\"></i> {{ isSubmiting ? '提交中...' : '评论' }}\n                        </button>\n                        <!--<span class=\"help-inline\" title=\"Or Command + Enter\">Ctrl+Enter</span>-->\n                        <div class=\"box preview markdown-reply\" id=\"preview-box\" style=\"display: none\"></div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n<script>\n    import {stack_error} from 'config/helper'\n    import emojione from 'emojione';\n    export default {\n        props: {\n            articleId: {\n                type: String,\n                default() {\n                    return '0'\n                }\n            },\n            isChecked: {\n                type: String,\n                default() {\n                    return 'false'\n                }\n            },\n\n            userid: {\n                type: String,\n                default() {\n                    return ''\n                }\n            },\n            isadmin: {\n                default() {\n                    return null;\n                }\n            }\n        },\n        data()\n        {\n            return {\n                comments: [],\n                body: '',\n                isSubmiting: false,\n                votes: [],\n                comment_count: 0,\n                loading: true,\n            }\n        },\n        computed: {\n            requireLogin()\n            {\n                return this.isChecked == 'false' ? 'login-required' : '';\n            },\n            noVote()\n            {\n                return this.votes.count < 1 ? true : false;\n            },\n            canVote()\n            {\n                if (this.userid < 1) return true;\n                let a = [];\n                this.votes.forEach((data) => {\n                    a.push(data.id)\n                });\n                var i = a.find((n) => n == this.userid);\n                if (!i) return true;\n                return false;\n            },\n\n        }\n        ,\n        mounted()\n        {\n            var url = 'comment/' + this.articleId + '/comment';\n            this.$http.get(url, {\n                params: {\n                    order_by: 'created_at'\n                }\n            }).then((response) => {\n                response.data.data.forEach((data) => {\n                    data.content_html = this.parse(data.content_raw);\n                    return data\n                });\n                this.comments = response.data.data;\n                this.comment_count = this.comments.length;\n            });\n            this.loadVoteList()\n        }\n        ,\n        methods: {\n            canDelComment(uid)\n            {\n                if (this.isadmin || this.userid == uid) {\n                    return true; // If nowUser has supper_admin role or is this comment's publish men\n                }\n                return false\n            },\n            userCenter(user_name)\n            {\n                return '//users/' + user_name;\n            },\n            functionVote(type) {\n                var url = 'article/' + this.articleId + '/vote';\n                this.$http.post(url, {type: type}).then((response) => {\n                    toastr.info('操作成功');\n                    if (type == 'up') {\n                        this.votes.push(response.data.data);\n                    } else {\n                        this.loadVoteList()\n                    }\n\n                }).catch(({response}) => {\n                    this.isSubmiting = false;\n                    stack_error(response)\n                })\n            },\n            loadVoteList() {\n                var url = 'article/' + this.articleId + '/voteuser';\n                this.$http.get(url).then((response) => {\n                    this.votes = response.data;\n                    this.loading = false;\n                });\n            },\n            handleCount(type) {\n                if (type == 0) {\n                    this.comment_count += 1;\n                } else {\n                    this.comment_count -= 1;\n                }\n            },\n            parse(html)\n            {\n                marked.setOptions({\n                    highlight: (code) => {\n                        return hljs.highlightAuto(code).value\n                    }\n                });\n                return emojione.toImage(marked(html));\n            }\n            ,\n            comment()\n            {\n\n                const data = {\n                    body: this.body,\n                    article_id: this.articleId\n                };\n                this.isSubmiting = true;\n\n                this.$http.post('comment', data)\n                    .then((response) => { // 只要这里面报错了，就会执行 catch 方法\n                        let comment = null;\n                        comment = response.data.data;\n                        comment.content_html = this.parse(comment.content_raw);\n                        this.comments.push(comment);\n                        this.body = '';\n                        this.handleCount(0);\n                        this.isSubmiting = false;\n                        $(\"#preview-box\").html(this.body);\n\n                        toastr.info('您已成功评论');\n                    })\n                    .catch(({response}) => {\n                        this.isSubmiting = false;\n                        stack_error(response)\n                    })\n\n            }\n            ,\n            replyOne(user_name)\n            {\n                this.body = '@' + user_name + ' ';\n            }\n            ,\n            commentDelete(index, id)\n            {\n                let defaults = this;\n                swal({\n                    title: \"\",\n                    text: \"确定要删除该评论么\",\n                    type: \"warning\",\n                    showCancelButton: true,\n                    cancelButtonText: \"取消\",\n                    confirmButtonText: \"确定\"\n                }, function () {\n                    defaults.$http.delete('comment/' + id)\n                        .then((response) => {\n                            defaults.comments.splice(index, 1);\n                            defaults.handleCount(1);\n                            toastr.info('评论删除成功');\n\n                        })\n                        .catch(({response}) => {\n                            stack_error(response)\n                        });\n                });\n            }\n        }\n    }\n</script>"
  },
  {
    "path": "resources/assets/js/components/Cropper.vue",
    "content": "<template>\n    <div :class=\"wrapper\">\n        <div :class=\"cropperWrapper\">\n            <img id=\"cropImage\" style=\"width:100%\" :src=\"image.msg\">\n        </div>\n        <span slot=\"footer\" class=\"footer\">\n      <button class=\"btn btn-outline-secondary\" @click=\"cancel\">{{ $t('form.cancel') }}</button>\n      <button class=\"btn btn-primary\" @click=\"upload\">{{ $t('form.ok') }}</button>\n    </span>\n    </div>\n</template>\n<script>\n    import 'cropperjs/dist/cropper.css'\n    import Cropper from 'cropperjs'\n    export default {\n        props: {\n            image: {\n                type: Object,\n                default() {\n                    return {}\n                }\n            },\n            wrapper: {\n                type: String,\n                default() {\n                    return ''\n                }\n            },\n            cropperWrapper: {\n                type: String,\n                default() {\n                    return ''\n                }\n            },\n        },\n    }\n</script>\n"
  },
  {
    "path": "resources/assets/js/components/Parse.vue",
    "content": "<template>\n    <div v-if=\"rawHtml == null\" class=\"ui icon message info\">\n        <i class=\"notched circle loading icon\"></i>\n        <div class=\"content\">\n            <div class=\"header\">稍候 </div>\n            <p>正在努力加载中。。。</p>\n        </div>\n    </div>\n    <div v-else>\n        <div class=\"ui readme markdown-body content-body\" v-html=\"rawHtml\">\n        </div>\n    </div>\n</template>\n\n<script>\n\n    import emojione from 'emojione'\n\n    export default {\n        props: {\n            content: {\n                type: String,\n                default() {\n                    return null\n                }\n            }\n        },\n        data() {\n            return {\n                rawHtml: null,\n            }\n        },\n        created() {\n            this.rawHtml = emojione.toImage(marked(this.content))\n        }\n    }\n</script>\n"
  },
  {
    "path": "resources/assets/js/components/Reply.vue",
    "content": "<template>\n    <div>\n        <div v-bind:style=\"{display:loading?'block':'none'}\" class=\"ui icon message info\">\n            <i class=\"notched circle loading icon\"></i>\n            <div class=\"content\">\n                <div class=\"header\">稍候 </div>\n                <p>正在努力加载中。。。</p>\n            </div>\n        </div>\n        <div v-bind:style=\"{display:loading?'none':'block'}\">\n            <div class=\"ui message basic centerd voted-box\">\n                <div class=\"buttons\" v-if=\"canVote\">\n                    <div class=\"ui button kb-star-big basic teal\" :class=\"requireLogin\" @click=\"functionVote('up')\"\n                         title=\"点赞相当于收藏，可以在个人页面的「关注的」导航里查看\"><i\n                            class=\"icon thumbs up\"></i> <span class=\"state\">点赞</span>\n                    </div>\n                </div>\n                <div class=\"buttons\" v-else>\n                    <div class=\"ui button kb-star-big basic teal\" @click=\"functionVote('dw')\"\n                         title=\"点赞相当于收藏，可以在个人页面的「赞过的话题」导航里查看\">\n                        <span class=\"state\">取消点赞</span>\n                    </div>\n                </div>\n\n                <div class=\"voted-users\">\n                <span v-for=\"(vote, index) in votes\">\n                    <a :href=\"'/users/' + vote.user_name\" class=\"ui popover\">\n                        <img class=\"ui image avatar image-33 stargazer\"\n                             :src=\"vote.avatar\">\n                    </a>\n            </span>\n                    <span v-if=\"votes.length == 0\"> 成为第一个点赞的人吧 &nbsp;&nbsp; <img alt=\":smile:\" class=\"emoji\"\n                                                                      src=\"/assets/images/emoji/smile.png\"\n                                                                      align=\"absmiddle\"/> </span>\n                </div>\n            </div>\n            <div class=\"ui threaded comments comment-list \">\n                <div class=\"ui divider horizontal grey\"><i class=\"icon comments\"></i> {{ reply_count }}\n                </div>\n\n                <div class=\"comments-feed\">\n                    <div class=\"comment\" v-for=\"(reply, index) in replies\">\n                        <a class=\"avatar\" :href=\"'/users/' +reply.user_name\">\n                            <img :src=\"reply.avatar\">\n                        </a>\n                        <div class=\"content\">\n                            <div class=\"comment-header\">\n                                <div class=\"meta\">\n                                    <a class=\"author ui popover\" :href=\"'/users/' + reply.user_name\"> <i\n                                            class=\"icon user\"></i>{{ reply.user_name }}</a>\n                                    <div class=\"metadata\">\n                                        <span class=\"date\"><i class=\"icon wait\"></i>{{ reply.created_at }}</span>\n                                    </div>\n                                </div>\n                                <div class=\"reaction\">\n                                    <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                                        <a title=\"删除\" class=\"ui teal\" href=\"javascript:;\"\n                                           v-if=\"canDelComment(reply.user_id)\"\n                                           @click=\"commentDelete(index, reply.id)\"><i class=\"icon trash\"></i></a>\n                                        <a href=\"#comment_content\" :title=\"'回复'+reply.user_name\"\n                                           @click=\"replyOne(reply.user_name)\"\n                                           class=\"ui teal reply-btn\"><i class=\"icon reply\"></i></a>\n                                    </div>\n                                </div>\n                            </div>\n                            <div class=\"text comment-body markdown-reply\" v-html=\"reply.content_html\">\n                            </div>\n                        </div>\n                    </div>\n                </div>\n                <br>\n\n                <div class=\"comment-box\">\n                    <h3 class=\"ui header\" v-if=\"isChecked == 'false'\">\n                        <a href=\"\" class=\"login-required\">登录</a>\n                    </h3>\n                    <div class=\"ui warning message\">\n                        <i class=\"icon warning\"></i> 支持 markdown 语法、支持表情,请务进行语言攻击。\n                    </div>\n\n                    <form class=\"ui reply form\" @submit.prevent=\"functionReply\"\n                          accept-charset=\"UTF-8\" id=\"comment-composing-form\">\n                        <input type=\"hidden\" name=\"article_id\" value=\"\"/>\n\n                        <div class=\"field\">\n                    <textarea name=\"body\" required=\"请填写内容\" :class=\"requireLogin\" v-model=\"body\"\n                              id=\"comment_content\"></textarea></div>\n                        <button class=\"ui teal labeled icon button\" :disabled=\"isSubmiting ? true : false\"\n                                v-if=\"isChecked != 'false'\" type=\"submit\"\n                                id=\"comment-create-submit\">\n                            <i class=\"icon comment\"></i> {{ isSubmiting ? '提交中...' : '评论' }}\n                        </button>\n                        <!--<span class=\"help-inline\" title=\"Or Command + Enter\">Ctrl+Enter</span>-->\n                        <div class=\"box preview markdown-reply\" id=\"preview-box\" style=\"display: none\"></div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</template>\n<script>\n    import {stack_error} from 'config/helper'\n    import emojione from 'emojione';\n    export default {\n        props: {\n            questionId: {\n                type: String,\n                default() {\n                    return '0'\n                }\n            },\n            isChecked: {\n                type: String,\n                default() {\n                    return 'false'\n                }\n            },\n            userid: {\n                type: String,\n                default() {\n                    return ''\n                }\n            },\n            isadmin: {\n                default() {\n                    return null;\n                }\n            }\n        },\n        data()\n        {\n            return {\n                replies: [],\n                body: '',\n                isSubmiting: false,\n                votes: [],\n                reply_count: 0,\n                loading: true,\n            }\n        }\n        ,\n        computed: {\n            requireLogin()\n            {\n                return this.isChecked == 'false' ? 'login-required' : '';\n            },\n            noVote()\n            {\n                return this.votes.count < 1 ? true : false;\n            },\n            canVote()\n            {\n                if (this.userid < 1) return true;\n                let a = [];\n                this.votes.forEach((data) => {\n                    a.push(data.id)\n                });\n                var i = a.find((n) => n == this.userid);\n                if (!i) return true;\n                return false;\n            },\n\n        }\n        ,\n        mounted()\n        {\n            var url = 'reply/' + this.questionId + '/reply';\n            this.$http.get(url, {\n                params: {\n                    order_by: 'created_at'\n                }\n            }).then((response) => {\n                response.data.data.forEach((data) => {\n                    data.content_html = this.parse(data.content_raw);\n                    return data\n                });\n                this.replies = response.data.data;\n                this.reply_count = this.replies.length\n            });\n            this.loadVoteList()\n        }\n        ,\n        methods: {\n            canDelComment(uid)\n            {\n                if (this.isadmin || this.userid == uid) return true; // If nowUser has supper_admin role or is this comment's publish men\n\n                return false;\n            },\n            userCenter(user_name)\n            {\n                return '//users/' + user_name;\n            },\n            functionVote(type) {\n                var url = 'question/' + this.questionId + '/vote';\n                this.$http.post(url, {type: type}).then((response) => {\n                    toastr.info('操作成功');\n                    if (type == 'up') {\n                        this.votes.push(response.data.data);\n                    } else {\n                        this.loadVoteList()\n                    }\n\n                }).catch(({response}) => {\n                    this.isSubmiting = false;\n                    stack_error(response)\n                })\n            },\n            loadVoteList() {\n                var url = 'question/' + this.questionId + '/voteuser';\n                this.$http.get(url).then((response) => {\n                    this.votes = response.data;\n                    this.loading = false;\n                });\n            },\n            handleCount(type) {\n                if (type == 0) {\n                    this.reply_count += 1;\n                } else {\n                    this.reply_count -= 1;\n                }\n            },\n            parse(html)\n            {\n                marked.setOptions({\n                    highlight: (code) => {\n                        return hljs.highlightAuto(code).value\n                    }\n                });\n                return emojione.toImage(marked(html));\n            }\n            ,\n            functionReply()\n            {\n\n                const data = {\n                    body: this.body,\n                    question_id: this.questionId\n                };\n                this.isSubmiting = true;\n\n                this.$http.post('reply', data)\n                    .then((response) => { // 只要这里面报错了，就会执行 catch 方法\n                        let postResult = null;\n                        postResult = response.data.data;\n                        postResult.content_html = this.parse(postResult.content_raw);\n                        this.replies.push(postResult);\n                        this.body = '';\n                        this.handleCount(0);\n                        this.isSubmiting = false;\n                        $(\"#preview-box\").html(this.body);\n\n                        toastr.info('评论成功');\n                    })\n                    .catch(({response}) => {\n                        this.isSubmiting = false;\n                        stack_error(response)\n                    })\n\n            }\n            ,\n            replyOne(user_name)\n            {\n                this.body = '@' + user_name + ' ';\n            }\n            ,\n            commentDelete(index, id)\n            {\n                let defaults = this;\n                swal({\n                    title: \"\",\n                    text: \"确定要删除该评论么\",\n                    type: \"warning\",\n                    showCancelButton: true,\n                    cancelButtonText: \"取消\",\n                    confirmButtonText: \"确定\"\n                }, function () {\n                    defaults.$http.delete('reply/' + id)\n                        .then((response) => {\n                            defaults.replies.splice(index, 1);\n                            defaults.handleCount(1);\n                            toastr.info('评论删除成功');\n\n                        })\n                        .catch(({response}) => {\n                            stack_error(response)\n                        });\n                });\n            }\n        }\n    }\n</script>"
  },
  {
    "path": "resources/assets/js/components/VoteButton.vue",
    "content": "<template>\n    <div class=\"extra content\">\n        <button class=\" ui basic teal button fluid follow disabled\"  v-if=\"loading\"> 关注他 </button>\n        <button class=\" ui basic teal button fluid follow\"\n                v-else\n                :class=\"requireLogin\"\n                v-text=\"text\"\n                v-on:click=\"followUser\">\n        </button>\n    </div>\n</template>\n\n<script>\n    export default {\n        props: {\n            isChecked: {\n                type: String,\n                default() {\n                    return 'false'\n                }\n            },\n            user: {\n                type: String,\n                default() {\n                    return ''\n                }\n            }\n        },\n        data() {\n            return {\n                followed: false,\n                loading: true,\n            }\n        },\n        mounted() {\n            this.$http.get('user/followers/' + this.user).then(response => {\n                this.followed = response.data.followed;\n                this.loading = false;\n            })\n        },\n        computed: {\n            text() {\n                return this.followed ? '取消关注' : '关注他';\n            },\n            requireLogin()\n            {\n                return this.isChecked == 'false' ? 'login-required' : '';\n            },\n        },\n        methods: {\n            followUser() {\n                this.$http.post('user/follow', {'user': this.user}).then(response => {\n                    this.followed = response.data.followed;\n                    toastr.info('操作成功');\n                }).catch(({response}) => {\n                    toastr.error('出错了，请稍后重试');\n                })\n            }\n        }\n    }\n</script>"
  },
  {
    "path": "resources/assets/js/config/base.js",
    "content": "export const apiUrl = '/api/';\n"
  },
  {
    "path": "resources/assets/js/config/helper.js",
    "content": "export function stack_error(response) {\n    if ((typeof response.data.error !== 'string') && response.data.error) {\n        toastr.error(response.data.error.message)\n    } else if (typeof response.data == 'string') {\n        toastr.error(response.status + ' ' + response.statusText)\n    } else {\n        let data = response.data;\n        let errorcontent = '';\n\n        Object.keys(data).map(function (key, index) {\n            let value = data[key];\n\n            errorcontent += '<span style=\"color: #e74c3c\">' + value[0] + '</span><br>';\n        });\n        swal({\n            title: \"Error Text!\",\n            type: 'error',\n            text: errorcontent,\n            html: true\n        });\n    }\n}"
  },
  {
    "path": "resources/assets/js/config/menu.js",
    "content": "export default [\n    {\n        label: 'sidebar.dashboard',\n        icon : 'ion-ios-speedometer',\n        uri  : '/dashboard/home'\n    },\n    {\n        label: 'sidebar.user',\n        icon : 'ion-person-stalker',\n        uri  : '/dashboard/users'\n    },\n    {\n        label: 'sidebar.article',\n        icon : 'ion-ios-book',\n        uri  : '/dashboard/articles'\n    },\n    {\n        label: 'sidebar.discussion',\n        icon : 'ion-help-circled',\n        uri  : '/dashboard/discussions'\n    },\n    {\n        label: 'sidebar.comment',\n        icon : 'ion-chatbubble-working',\n        uri  : '/dashboard/comments'\n    },\n    {\n        label: 'sidebar.file',\n        icon : 'ion-ios-folder',\n        uri  : '/dashboard/files'\n    },\n    {\n        label: 'sidebar.tag',\n        icon : 'ion-ios-pricetags',\n        uri  : '/dashboard/tags'\n    },\n    {\n        label: 'sidebar.category',\n        icon : 'ion-ios-list',\n        uri  : '/dashboard/categories'\n    },\n    {\n        label: 'sidebar.link',\n        icon : 'ion-ios-world',\n        uri  : '/dashboard/links'\n    },\n    {\n        label: 'sidebar.visitor',\n        icon : 'ion-chatbubble-working',\n        uri  : '/dashboard/visitors'\n    },\n    {\n        label: 'sidebar.system',\n        icon : 'ion-gear-b',\n        uri  : '/dashboard/system'\n    }\n]"
  },
  {
    "path": "resources/assets/js/config/toastr.js",
    "content": "export default {\n    positionClass: \"toast-bottom-right\",\n    showDuration: \"300\",\n    hideDuration: \"1000\",\n    timeOut: \"5000\",\n    extendedTimeOut: \"1000\",\n    showEasing: \"swing\",\n    hideEasing: \"linear\",\n    showMethod: \"fadeIn\",\n    hideMethod: \"fadeOut\"\n}"
  },
  {
    "path": "resources/assets/js/front.app.js",
    "content": "// window.swal = require('sweetalert');\nwindow.Vue = require('vue');\nwindow.marked = require('marked');\nwindow.hljs = require('vendor/highlight.min.js');\n\n\nrequire('./bootstrap');\nrequire('./vendor/jquery.scroll.up');\nrequire('./../semantic/dist/semantic');\nrequire('./vendor/jquery-ui.min');\nrequire('./vendor/jquery.tocify.min');\nrequire('./vendor/jquery.pjax');\nrequire('./vendor/jquery.textcomplete'),\nrequire('simplemde/dist/simplemde.min');\nrequire('social-share.js/dist/js/social-share.min.js');\n\nwindow.toastr = require('toastr');\nwindow.innerHeight = 800;\n\nwindow.toastr.options = {\n    positionClass: \"toast-bottom-right\",\n    showDuration: \"300\",\n    hideDuration: \"1000\",\n    timeOut: \"5000\",\n    extendedTimeOut: \"1000\",\n    showEasing: \"swing\",\n    hideEasing: \"linear\",\n    showMethod: \"fadeIn\",\n    hideMethod: \"fadeOut\",\n    closeButton: true\n};\n\nimport httpPlugin from 'plugins/http';\n\nVue.use(httpPlugin);\n\nVue.component('comment', require('components/Comment.vue'));\nVue.component('parse', require('components/Parse.vue'));\nVue.component('voteButton', require('components/VoteButton.vue'));\nVue.component('avatar', require('components/Avatar.vue'));\nVue.component('myUpload', require('vue-image-crop-upload'));\n\nVue.component('reply', require('components/Reply.vue'));\n\nnew Vue({\n}).$mount('#codehaoshi');\n\n"
  },
  {
    "path": "resources/assets/js/front.js",
    "content": "/**\n * First we will load all of this project's JavaScript dependencies which\n * includes Vue and other libraries. It is a great starting point when\n * building robust, powerful web applications using Vue and Laravel.\n */\n\nrequire('./bootstrap');\nrequire('./vendor/jquery.scroll.up');\nrequire('./../semantic/dist/semantic');\nrequire('./vendor/jquery-ui.min');\nrequire('./vendor/jquery.tocify.min');\nrequire('./vendor/jquery.pjax');\n// require('./vendor/nprogress');\n// require('./vendor/sweetalert');\nrequire('./vendor/jquery.textcomplete'),\nrequire('simplemde/dist/simplemde.min');\nrequire('./main');\n\nwindow.toastr = require('toastr');\nwindow.innerHeight = 800;\n\nwindow.toastr.options = {\n    positionClass: \"toast-bottom-right\",\n    showDuration: \"300\",\n    hideDuration: \"1000\",\n    timeOut: \"5000\",\n    extendedTimeOut: \"1000\",\n    showEasing: \"swing\",\n    hideEasing: \"linear\",\n    showMethod: \"fadeIn\",\n    hideMethod: \"fadeOut\",\n    closeButton: true\n};\n"
  },
  {
    "path": "resources/assets/js/main.js",
    "content": "$(function () {\n    var original_title = document.title;\n\n    var GeekCenter = {\n        init: function () {\n            var self = this;\n            NProgress.start();\n            $(window).load(function () {\n                NProgress.done();\n            });\n            $(document).pjax('aaaaaaaaaa:not(a[target=\"_blank\"])', 'body', {\n                timeout: 1600,\n                maxCacheLength: 500\n            });\n            $(document).on('pjax:start', function () {\n                NProgress.start();\n            });\n            $(document).on('pjax:complete', function () {\n\n                original_title = document.title;\n                NProgress.done();\n                // self.siteBootUp();\n            });\n            $(document).on('pjax:end', function () {\n                NProgress.done();\n                self.siteBootUp();\n                // $('.popover').remove();\n            });\n            // Exclude links with a specific class\n            $(document).on(\"pjax:click\", \"a.no-pjax\", false);\n            self.siteBootUp();\n        },\n        /*\n         * Things to be execute when normal page load\n         * and pjax page load.\n         */\n        siteBootUp: function () {\n            var self = this;\n            self.initScrollup();\n            self.initSematicUI();\n            self.initSticky();\n            self.initTOC();\n            self.replyBtnShow();\n            self.initLogoutAlert();\n            self.initEnterKey();\n            self.initLoginRequired();\n            self.initEmoji();\n            self.initEditorPreview();\n            self.initOpenMenu();\n            // self.initTimeAgo();\n            // self.initCommentOnPressKey();\n            // self.initAjax();\n            // self.initIinfiniteScroll()\n\n        },\n        initOpenMenu: function(){\n            $('.ui.sidebar').sidebar('attach events', '.attach-sidebar');\n        },\n        // initIinfiniteScroll: function(){\n            // $('.jjscroll').jscroll({\n            //     loadingHtml: '<div style=\"padding:20px\">Loading...</div>',\n            //     padding: 20,\n            //     nextSelector: '.pagination li:last-child a',\n            //     contentSelector: '.jscroll',\n            //     pagingSelector: '.panel-footer',\n            //     maxPages: 2,\n            //     callback: function() {\n            //         $('.panel-footer').hide();\n            //     }\n            // });\n        // },\n        /**\n         * Automatically transform any Date format to human\n         * friendly format, all you need to do is add a\n         * `.timeago` class.\n         */\n        // initTimeAgo: function(){\n            // // moment.lang('zh-cn');\n            // $('.timeago').each(function(){\n            //     var time_str = $(this).text();\n            //     if(moment(time_str, \"YYYY-MM-DD HH:mm:ss\", true).isValid()) {\n            //         $(this).text(moment(time_str).fromNow());\n            //     }\n            //\n            //     $(this).addClass('popover-with-html');\n            //     $(this).attr('data-content', time_str);\n            // });\n        // },\n        // initAjax: function () {\n        //     $.ajaxSetup({\n        //         headers: {\n        //             'X-CSRF-TOKEN': $('meta[name=\"_token\"]').attr('content')\n        //         }\n        //     });\n        //     // this.initComment();\n        // },\n        // ***************\n        // initComment: function () {\n        //     var self = this;\n        //     var form = $('#comment-form');\n        //     var submitBtn = form.find('button[type=submit]');\n        //     var submitBtnVal = submitBtn.val();\n        //     var replies = $('.replies .list-group');\n        //     var preview = $('#preview-box');\n        //     var emptyBlock = $('#replies-empty-block');\n        //     var count = 0;\n        //\n        //     form.on('submit', function() {\n        //         var tpl = '';\n        //         var delTpl = '';\n        //         var voteTpl = '';\n        //         var introTpl = '';\n        //         var badgeTpl = '';\n        //         var total = $('.replies .total b');\n        //         count = replies.find('li').length + 1;\n        //         comment = $(this).find('textarea');\n        //         commentText = comment.val();\n        //\n        //\n        //         if ($.trim(commentText) !== '') {\n        //             submitBtn.text('提交中...').addClass('disabled').prop('disabled', true);\n        //             return ;\n        //         }\n        //\n        //\n        //     });\n        //\n        // },\n        // *********************************\n\n        /**\n         * Init post content preview\n         */\n        initEditorPreview: function () {\n            var self = this;\n            $(\"#comment_content\").focus(function (event) {\n                $(\"#preview-box\").fadeIn(1500);\n                $(\"#preview-lable\").fadeIn(1500);\n\n            });\n            $('#comment_content').keyup(function () {\n                self.runPreview();\n            });\n        },\n        /**\n         * do content preview\n         */\n        runPreview: function () {\n            var commentContent = $(\"#comment_content\");\n            var oldContent = commentContent.val();\n\n            if (oldContent) {\n                marked(oldContent, function (err, content) {\n                    $('#preview-box').html(content);\n                    emojify.run(document.getElementById('preview-box'));\n                });\n            }\n        },\n        /**\n         * Enable emoji everywhere.\n         */\n        initEmoji: function () {\n\n            emojify.setConfig({\n                img_dir: Config.cdnDomain + '/assets/images/emoji',\n                ignored_tags: {\n                    'SCRIPT': 1,\n                    'TEXTAREA': 1,\n                    'A': 1,\n                    'PRE': 1,\n                    'CODE': 1\n                }\n            });\n            emojify.run();\n            $('#comment_content').textcomplete([\n                { // emoji strategy\n                    match: /\\B:([\\-+\\w]*)$/,\n                    search: function (term, callback) {\n                        callback($.map(emojies, function (emoji) {\n                            return emoji.indexOf(term) === 0 ? emoji : null;\n                        }));\n                    },\n                    template: function (value) {\n                        return '<img src=\"' + Config.cdnDomain + 'assets/images/emoji/' + value + '.png\"></img>' + value;\n                    },\n                    replace: function (value) {\n                        return ':' + value + ': ';\n                    },\n                    index: 1,\n                    maxCount: 5\n                },\n            ]);\n        }\n        ,\n        /*\n         * local storage\n         */\n        initLocalStorage: function () {\n\n        }\n        ,\n        /*\n         * Use Ctrl + Enter for reply\n         */\n        // initCommentOnPressKey: function () {\n        //     $(document).on(\"keydown\", \"#comment_content\", function (e) {\n        //         if ((e.keyCode == 10 || e.keyCode == 13) && e.ctrlKey && $('#comment-create-submit').is(':enabled')) {\n        //             $(this).parents(\"form\").submit();\n        //             return false;\n        //         }\n        //     });\n        // }\n        // ,\n        initLoginRequired: function () {\n            $('.login-required').on('click', function (e) {\n                swal({\n                    title: \"\",\n                    text: \"请登录后再操作\",\n                    type: \"warning\",\n                    showCancelButton: true,\n                    cancelButtonText: \"取消\",\n                    confirmButtonText: \"前往登录\"\n                }, function () {\n                    location.href = '/login';\n                });\n\n                return false;\n            });\n        }\n        ,\n        initEnterKey: function () {\n            // 保存按钮 enter\n            document.onkeydown = function (event) {\n                var e = event || window.event || arguments.callee.caller.arguments[0];\n                if (e && e.keyCode == 13) { // enter 键\n                    $('.enterKeyBtn').click();\n                }\n            };\n        }\n        ,\n        initLogoutAlert: function () {\n            $('.login-out-btn').on('click', function (e) {\n                var langText = $(this).data('lang-loginout');\n                var href = $(this).attr('href');\n                swal({\n                    title: \"\",\n                    text: langText,\n                   type: \"warning\",\n                    showCancelButton: true,\n                    cancelButtonText: \"取消\",\n                    confirmButtonText: \"退出\"\n                }, function () {\n                    location.href = href;\n                });\n\n                return false;\n            });\n        }\n        ,\n        replyBtnShow: function () {\n            $('.comments-feed .comment').each(function () {\n                $(this).hover(function (event) {\n                    $(this).find('.reply-btn').show();\n                });\n                $(this).mouseleave(function (event) {\n                    $(this).find('.reply-btn').hide();\n                });\n\n            });\n        }\n        ,\n        initSematicUI: function () {\n            $('.ui.sticky').sticky();\n            $('.ui.popover').popup({\n                on: 'hover',\n                position: 'right center'\n            });\n            $('.ui.titlepop').popup({\n                on:'hover'\n            });\n            $('.selection.dropdown').dropdown() ;\n        }\n        ,\n        initTOC: function () {\n            $(\"#toc\").tocify({\n                context: '.article-content',\n                selectors: \"h2,h3\"\n            });\n        }\n        ,\n        initSticky: function () {\n            if ($(window).width() > 991) {\n                $(\"#sticker\").sticky({topSpacing: 20});\n            }\n        }\n        ,\n        initScrollup: function () {\n            $.scrollUp.init();\n        }\n        ,\n    };\n    window.GeekCenter = GeekCenter;\n});\n\n$(document).ready(function () {\n    GeekCenter.init();\n});\n"
  },
  {
    "path": "resources/assets/js/plugins/http/index.js",
    "content": "import axios from 'axios'\nimport { apiUrl } from 'config/base'\n\n/**\n * Create Axios\n */\nexport const http = axios.create({\n    baseURL: apiUrl,\n});\n\n/**\n * We'll load the axios HTTP library which allows us to easily issue requests\n * to our Laravel back-end. This library automatically handles sending the\n * CSRF token as a header based on the value of the \"XSRF\" token cookie.\n */\nhttp.defaults.headers.common = {\n    'X-CSRF-TOKEN': window.Laravel.csrfToken,\n    'X-Requested-With': 'XMLHttpRequest'\n};\n\n/**\n * Handle all error messages.\n */\nhttp.interceptors.response.use(function (response) {\n    return response;\n}, function (error) {\n    const { response } = error;\n\n    if ([401].indexOf(response.status) >= 0) {\n      if (response.status == 401 && response.data.error.message != 'Unauthorized') {\n        return Promise.reject(response);\n      }\n      window.location = '/login';\n    }\n\n    return Promise.reject(error);\n});\n\nexport default function install(Vue) {\n  Object.defineProperty(Vue.prototype, '$http', {\n    get() {\n      return http\n    },\n  })\n}\n"
  },
  {
    "path": "resources/assets/js/vendor/codemirror-4.inline-attachment.js",
    "content": "/*jslint newcap: true */\n/*global inlineAttachment: false */\n/**\n * CodeMirror version for inlineAttachment\n *\n * Call inlineAttachment.attach(editor) to attach to a codemirror instance\n */\n(function() {\n  'use strict';\n\n  var codeMirrorEditor = function(instance) {\n\n    if (!instance.getWrapperElement) {\n      throw \"Invalid CodeMirror object given\";\n    }\n\n    this.codeMirror = instance;\n  };\n\n  codeMirrorEditor.prototype.getValue = function() {\n    return this.codeMirror.getValue();\n  };\n\n  codeMirrorEditor.prototype.insertValue = function(val) {\n    this.codeMirror.replaceSelection(val);\n  };\n\n  codeMirrorEditor.prototype.setValue = function(val) {\n    var cursor = this.codeMirror.getCursor();\n    this.codeMirror.setValue(val);\n    this.codeMirror.setCursor(cursor);\n  };\n\n  /**\n   * Attach InlineAttachment to CodeMirror\n   *\n   * @param {CodeMirror} codeMirror\n   */\n  codeMirrorEditor.attach = function(codeMirror, options) {\n\n    options = options || {};\n\n    var editor = new codeMirrorEditor(codeMirror),\n      inlineattach = new inlineAttachment(options, editor),\n      el = codeMirror.getWrapperElement();\n\n    el.addEventListener('paste', function(e) {\n      inlineattach.onPaste(e);\n    }, false);\n\n    codeMirror.setOption('onDragEvent', function(data, e) {\n      if (e.type === \"drop\") {\n        e.stopPropagation();\n        e.preventDefault();\n        return inlineattach.onDrop(e);\n      }\n    });\n  };\n\n  var codeMirrorEditor4 = function(instance) {\n    codeMirrorEditor.call(this, instance);\n  };\n\n  codeMirrorEditor4.attach = function(codeMirror, options) {\n\n    options = options || {};\n\n    var editor = new codeMirrorEditor(codeMirror),\n      inlineattach = new inlineAttachment(options, editor),\n      el = codeMirror.getWrapperElement();\n\n    el.addEventListener('paste', function(e) {\n      inlineattach.onPaste(e);\n    }, false);\n\n    codeMirror.on('drop', function(data, e) {\n      if (inlineattach.onDrop(e)) {\n        e.stopPropagation();\n        e.preventDefault();\n        return true;\n      } else {\n        return false;\n      }\n    });\n  };\n\n  inlineAttachment.editors.codemirror4 = codeMirrorEditor4;\n\n})();"
  },
  {
    "path": "resources/assets/js/vendor/emoji.js",
    "content": "var emojies = [\n    '+1', '-1', '100', '1234', '8ball', 'a', 'ab', 'abc', 'abcd', 'accept',\n    'aerial_tramway', 'airplane', 'alarm_clock', 'alien', 'ambulance', 'anchor',\n    'angel', 'anger', 'angry', 'anguished', 'ant', 'apple', 'aquarius', 'aries',\n    'arrow_backward', 'arrow_double_down', 'arrow_double_up', 'arrow_down',\n    'arrow_down_small', 'arrow_forward', 'arrow_heading_down',\n    'arrow_heading_up', 'arrow_left', 'arrow_lower_left', 'arrow_lower_right',\n    'arrow_right', 'arrow_right_hook', 'arrow_up', 'arrow_up_down',\n    'arrow_up_small', 'arrow_upper_left', 'arrow_upper_right',\n    'arrows_clockwise', 'arrows_counterclockwise', 'art', 'articulated_lorry',\n    'astonished', 'athletic_shoe', 'atm', 'b', 'baby', 'baby_bottle',\n    'baby_chick', 'baby_symbol', 'back', 'baggage_claim', 'balloon',\n    'ballot_box_with_check', 'bamboo', 'banana', 'bangbang', 'bank', 'bar_chart',\n    'barber', 'baseball', 'basketball', 'bath', 'bathtub', 'battery', 'bear',\n    'bee', 'beer', 'beers', 'beetle', 'beginner', 'bell', 'bento', 'bicyclist',\n    'bike', 'bikini', 'bird', 'birthday', 'black_circle', 'black_joker',\n    'black_large_square', 'black_medium_small_square', 'black_medium_square',\n    'black_nib', 'black_small_square', 'black_square_button', 'blossom',\n    'blowfish', 'blue_book', 'blue_car', 'blue_heart', 'blush', 'boar', 'boat',\n    'bomb', 'book', 'bookmark', 'bookmark_tabs', 'books', 'boom', 'boot',\n    'bouquet', 'bow', 'bowling', 'bowtie', 'boy', 'bread', 'bride_with_veil',\n    'bridge_at_night', 'briefcase', 'broken_heart', 'bug', 'bulb',\n    'bullettrain_front', 'bullettrain_side', 'bus', 'busstop',\n    'bust_in_silhouette', 'busts_in_silhouette', 'cactus', 'cake', 'calendar',\n    'calling', 'camel', 'camera', 'cancer', 'candy', 'capital_abcd', 'capricorn',\n    'car', 'card_index', 'carousel_horse', 'cat', 'cat2', 'cd', 'chart',\n    'chart_with_downwards_trend', 'chart_with_upwards_trend', 'checkered_flag',\n    'cherries', 'cherry_blossom', 'chestnut', 'chicken', 'children_crossing',\n    'chocolate_bar', 'christmas_tree', 'church', 'cinema', 'circus_tent',\n    'city_sunrise', 'city_sunset', 'cl', 'clap', 'clapper', 'clipboard',\n    'clock1', 'clock10', 'clock1030', 'clock11', 'clock1130', 'clock12',\n    'clock1230', 'clock130', 'clock2', 'clock230', 'clock3', 'clock330',\n    'clock4', 'clock430', 'clock5', 'clock530', 'clock6', 'clock630', 'clock7',\n    'clock730', 'clock8', 'clock830', 'clock9', 'clock930', 'closed_book',\n    'closed_lock_with_key', 'closed_umbrella', 'cloud', 'clubs', 'cn',\n    'cocktail', 'coffee', 'cold_sweat', 'collision', 'computer', 'confetti_ball',\n    'confounded', 'confused', 'congratulations', 'construction',\n    'construction_worker', 'convenience_store', 'cookie', 'cool', 'cop',\n    'copyright', 'corn', 'couple', 'couple_with_heart', 'couplekiss', 'cow',\n    'cow2', 'credit_card', 'crescent_moon', 'crocodile', 'crossed_flags',\n    'crown', 'cry', 'crying_cat_face', 'crystal_ball', 'cupid', 'curly_loop',\n    'currency_exchange', 'curry', 'custard', 'customs', 'cyclone', 'dancer',\n    'dancers', 'dango', 'dart', 'dash', 'date', 'de', 'deciduous_tree',\n    'department_store', 'diamond_shape_with_a_dot_inside', 'diamonds',\n    'disappointed', 'disappointed_relieved', 'dizzy', 'dizzy_face',\n    'do_not_litter', 'dog', 'dog2', 'dollar', 'dolls', 'dolphin', 'door',\n    'doughnut', 'dragon', 'dragon_face', 'dress', 'dromedary_camel', 'droplet',\n    'dvd', 'e-mail', 'ear', 'ear_of_rice', 'earth_africa', 'earth_americas',\n    'earth_asia', 'egg', 'eggplant', 'eight', 'eight_pointed_black_star',\n    'eight_spoked_asterisk', 'electric_plug', 'elephant', 'email', 'end',\n    'envelope', 'envelope_with_arrow', 'es', 'euro', 'european_castle',\n    'european_post_office', 'evergreen_tree', 'exclamation', 'expressionless',\n    'eyeglasses', 'eyes', 'facepunch', 'factory', 'fallen_leaf', 'family',\n    'fast_forward', 'fax', 'fearful', 'feelsgood', 'feet', 'ferris_wheel',\n    'file_folder', 'finnadie', 'fire', 'fire_engine', 'fireworks',\n    'first_quarter_moon', 'first_quarter_moon_with_face', 'fish', 'fish_cake',\n    'fishing_pole_and_fish', 'fist', 'five', 'flags', 'flashlight',\n    'floppy_disk', 'flower_playing_cards', 'flushed', 'foggy', 'football',\n    'footprints', 'fork_and_knife', 'fountain', 'four', 'four_leaf_clover', 'fr',\n    'free', 'fried_shrimp', 'fries', 'frog', 'frowning', 'fu', 'fuelpump',\n    'full_moon', 'full_moon_with_face', 'game_die', 'gb', 'gem', 'gemini',\n    'ghost', 'gift', 'gift_heart', 'girl', 'globe_with_meridians', 'goat',\n    'goberserk', 'godmode', 'golf', 'grapes', 'green_apple', 'green_book',\n    'green_heart', 'grey_exclamation', 'grey_question', 'grimacing', 'grin',\n    'grinning', 'guardsman', 'guitar', 'gun', 'haircut', 'hamburger', 'hammer',\n    'hamster', 'hand', 'handbag', 'hankey', 'hash', 'hatched_chick',\n    'hatching_chick', 'headphones', 'hear_no_evil', 'heart', 'heart_decoration',\n    'heart_eyes', 'heart_eyes_cat', 'heartbeat', 'heartpulse', 'hearts',\n    'heavy_check_mark', 'heavy_division_sign', 'heavy_dollar_sign',\n    'heavy_exclamation_mark', 'heavy_minus_sign', 'heavy_multiplication_x',\n    'heavy_plus_sign', 'helicopter', 'herb', 'hibiscus', 'high_brightness',\n    'high_heel', 'hocho', 'honey_pot', 'honeybee', 'horse', 'horse_racing',\n    'hospital', 'hotel', 'hotsprings', 'hourglass', 'hourglass_flowing_sand',\n    'house', 'house_with_garden', 'hurtrealbad', 'hushed', 'ice_cream',\n    'icecream', 'id', 'ideograph_advantage', 'imp', 'inbox_tray',\n    'incoming_envelope', 'information_desk_person', 'information_source',\n    'innocent', 'interrobang', 'iphone', 'it', 'izakaya_lantern',\n    'jack_o_lantern', 'japan', 'japanese_castle', 'japanese_goblin',\n    'japanese_ogre', 'jeans', 'joy', 'joy_cat', 'jp', 'key', 'keycap_ten',\n    'kimono', 'kiss', 'kissing', 'kissing_cat', 'kissing_closed_eyes',\n    'kissing_heart', 'kissing_smiling_eyes', 'koala', 'koko', 'kr', 'lantern',\n    'large_blue_circle', 'large_blue_diamond', 'large_orange_diamond',\n    'last_quarter_moon', 'last_quarter_moon_with_face', 'laughing', 'leaves',\n    'ledger', 'left_luggage', 'left_right_arrow', 'leftwards_arrow_with_hook',\n    'lemon', 'leo', 'leopard', 'libra', 'light_rail', 'link', 'lips', 'lipstick',\n    'lock', 'lock_with_ink_pen', 'lollipop', 'loop', 'loudspeaker', 'love_hotel',\n    'love_letter', 'low_brightness', 'm', 'mag', 'mag_right', 'mahjong',\n    'mailbox', 'mailbox_closed', 'mailbox_with_mail', 'mailbox_with_no_mail',\n    'man', 'man_with_gua_pi_mao', 'man_with_turban', 'mans_shoe', 'maple_leaf',\n    'mask', 'massage', 'meat_on_bone', 'mega', 'melon', 'memo', 'mens', 'metal',\n    'metro', 'microphone', 'microscope', 'milky_way', 'minibus', 'minidisc',\n    'mobile_phone_off', 'money_with_wings', 'moneybag', 'monkey', 'monkey_face',\n    'monorail', 'moon', 'mortar_board', 'mount_fuji', 'mountain_bicyclist',\n    'mountain_cableway', 'mountain_railway', 'mouse', 'mouse2', 'movie_camera',\n    'moyai', 'muscle', 'mushroom', 'musical_keyboard', 'musical_note',\n    'musical_score', 'mute', 'nail_care', 'name_badge', 'neckbeard', 'necktie',\n    'negative_squared_cross_mark', 'neutral_face', 'new', 'new_moon',\n    'new_moon_with_face', 'newspaper', 'ng', 'nine', 'no_bell', 'no_bicycles',\n    'no_entry', 'no_entry_sign', 'no_good', 'no_mobile_phones', 'no_mouth',\n    'no_pedestrians', 'no_smoking', 'non-potable_water', 'nose', 'notebook',\n    'notebook_with_decorative_cover', 'notes', 'nut_and_bolt', 'o', 'o2',\n    'ocean', 'octocat', 'octopus', 'oden', 'office', 'ok', 'ok_hand', 'ok_woman',\n    'older_man', 'older_woman', 'on', 'oncoming_automobile', 'oncoming_bus',\n    'oncoming_police_car', 'oncoming_taxi', 'one', 'open_book',\n    'open_file_folder', 'open_hands', 'open_mouth', 'ophiuchus', 'orange_book',\n    'outbox_tray', 'ox', 'package', 'page_facing_up', 'page_with_curl', 'pager',\n    'palm_tree', 'panda_face', 'paperclip', 'parking', 'part_alternation_mark',\n    'partly_sunny', 'passport_control', 'paw_prints', 'peach', 'pear', 'pencil',\n    'pencil2', 'penguin', 'pensive', 'performing_arts', 'persevere',\n    'person_frowning', 'person_with_blond_hair', 'person_with_pouting_face',\n    'phone', 'pig', 'pig2', 'pig_nose', 'pill', 'pineapple', 'pisces', 'pizza',\n    'point_down', 'point_left', 'point_right', 'point_up', 'point_up_2',\n    'police_car', 'poodle', 'poop', 'post_office', 'postal_horn', 'postbox',\n    'potable_water', 'pouch', 'poultry_leg', 'pound', 'pouting_cat', 'pray',\n    'princess', 'punch', 'purple_heart', 'purse', 'pushpin',\n    'put_litter_in_its_place', 'question', 'rabbit', 'rabbit2', 'racehorse',\n    'radio', 'radio_button', 'rage', 'rage1', 'rage2', 'rage3', 'rage4',\n    'railway_car', 'rainbow', 'raised_hand', 'raised_hands', 'raising_hand',\n    'ram', 'ramen', 'rat', 'recycle', 'red_car', 'red_circle', 'registered',\n    'relaxed', 'relieved', 'repeat', 'repeat_one', 'restroom',\n    'revolving_hearts', 'rewind', 'ribbon', 'rice', 'rice_ball', 'rice_cracker',\n    'rice_scene', 'ring', 'rocket', 'roller_coaster', 'rooster', 'rose',\n    'rotating_light', 'round_pushpin', 'rowboat', 'ru', 'rugby_football',\n    'runner', 'running', 'running_shirt_with_sash', 'sa', 'sagittarius',\n    'sailboat', 'sake', 'sandal', 'santa', 'satellite', 'satisfied', 'saxophone',\n    'school', 'school_satchel', 'scissors', 'scorpius', 'scream', 'scream_cat',\n    'scroll', 'seat', 'secret', 'see_no_evil', 'seedling', 'seven', 'shaved_ice',\n    'sheep', 'shell', 'ship', 'shipit', 'shirt', 'shit', 'shoe', 'shower',\n    'signal_strength', 'six', 'six_pointed_star', 'ski', 'skull', 'sleeping',\n    'sleepy', 'slot_machine', 'small_blue_diamond', 'small_orange_diamond',\n    'small_red_triangle', 'small_red_triangle_down', 'smile', 'smile_cat',\n    'smiley', 'smiley_cat', 'smiling_imp', 'smirk', 'smirk_cat', 'smoking',\n    'snail', 'snake', 'snowboarder', 'snowflake', 'snowman', 'sob', 'soccer',\n    'soon', 'sos', 'sound', 'space_invader', 'spades', 'spaghetti', 'sparkle',\n    'sparkler', 'sparkles', 'sparkling_heart', 'speak_no_evil', 'speaker',\n    'speech_balloon', 'speedboat', 'squirrel', 'star', 'star2', 'stars',\n    'station', 'statue_of_liberty', 'steam_locomotive', 'stew', 'straight_ruler',\n    'strawberry', 'stuck_out_tongue', 'stuck_out_tongue_closed_eyes',\n    'stuck_out_tongue_winking_eye', 'sun_with_face', 'sunflower', 'sunglasses',\n    'sunny', 'sunrise', 'sunrise_over_mountains', 'surfer', 'sushi', 'suspect',\n    'suspension_railway', 'sweat', 'sweat_drops', 'sweat_smile', 'sweet_potato',\n    'swimmer', 'symbols', 'syringe', 'tada', 'tanabata_tree', 'tangerine',\n    'taurus', 'taxi', 'tea', 'telephone', 'telephone_receiver', 'telescope',\n    'tennis', 'tent', 'thought_balloon', 'three', 'thumbsdown', 'thumbsup',\n    'ticket', 'tiger', 'tiger2', 'tired_face', 'tm', 'toilet', 'tokyo_tower',\n    'tomato', 'tongue', 'top', 'tophat', 'tractor', 'traffic_light', 'train',\n    'train2', 'tram', 'triangular_flag_on_post', 'triangular_ruler', 'trident',\n    'triumph', 'trolleybus', 'trollface', 'trophy', 'tropical_drink',\n    'tropical_fish', 'truck', 'trumpet', 'tshirt', 'tulip', 'turtle', 'tv',\n    'twisted_rightwards_arrows', 'two', 'two_hearts', 'two_men_holding_hands',\n    'two_women_holding_hands', 'u5272', 'u5408', 'u55b6', 'u6307', 'u6708',\n    'u6709', 'u6e80', 'u7121', 'u7533', 'u7981', 'u7a7a', 'uk', 'umbrella',\n    'unamused', 'underage', 'unlock', 'up', 'us', 'v', 'vertical_traffic_light',\n    'vhs', 'vibration_mode', 'video_camera', 'video_game', 'violin', 'virgo',\n    'volcano', 'vs', 'walking', 'waning_crescent_moon', 'waning_gibbous_moon',\n    'warning', 'watch', 'water_buffalo', 'watermelon', 'wave', 'wavy_dash',\n    'waxing_crescent_moon', 'waxing_gibbous_moon', 'wc', 'weary', 'wedding',\n    'whale', 'whale2', 'wheelchair', 'white_check_mark', 'white_circle',\n    'white_flower', 'white_large_square', 'white_medium_small_square',\n    'white_medium_square', 'white_small_square', 'white_square_button',\n    'wind_chime', 'wine_glass', 'wink', 'wolf', 'woman', 'womans_clothes',\n    'womans_hat', 'womens', 'worried', 'wrench', 'x', 'yellow_heart', 'yen',\n    'yum', 'zap', 'zero', 'zzz'\n];\n"
  },
  {
    "path": "resources/assets/js/vendor/github_emoji.js",
    "content": "export default {\n  '+1': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7',\n  '-1': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v7',\n  '100': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4af.png?v7',\n  '1234': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f522.png?v7',\n  '1st_place_medal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f947.png?v7',\n  '2nd_place_medal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f948.png?v7',\n  '3rd_place_medal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f949.png?v7',\n  '8ball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b1.png?v7',\n  'a': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f170.png?v7',\n  'ab': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f18e.png?v7',\n  'abc': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f524.png?v7',\n  'abcd': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f521.png?v7',\n  'accept': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f251.png?v7',\n  'aerial_tramway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a1.png?v7',\n  'afghanistan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1eb.png?v7',\n  'airplane': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2708.png?v7',\n  'aland_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fd.png?v7',\n  'alarm_clock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f0.png?v7',\n  'albania': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f1.png?v7',\n  'alembic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2697.png?v7',\n  'algeria': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ff.png?v7',\n  'alien': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47d.png?v7',\n  'ambulance': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f691.png?v7',\n  'american_samoa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f8.png?v7',\n  'amphora': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3fa.png?v7',\n  'anchor': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2693.png?v7',\n  'andorra': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1e9.png?v7',\n  'angel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47c.png?v7',\n  'anger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a2.png?v7',\n  'angola': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f4.png?v7',\n  'angry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f620.png?v7',\n  'anguilla': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ee.png?v7',\n  'anguished': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f627.png?v7',\n  'ant': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41c.png?v7',\n  'antarctica': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f6.png?v7',\n  'antigua_barbuda': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ec.png?v7',\n  'apple': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34e.png?v7',\n  'aquarius': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2652.png?v7',\n  'argentina': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f7.png?v7',\n  'aries': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2648.png?v7',\n  'armenia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f2.png?v7',\n  'arrow_backward': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25c0.png?v7',\n  'arrow_double_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23ec.png?v7',\n  'arrow_double_up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23eb.png?v7',\n  'arrow_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b07.png?v7',\n  'arrow_down_small': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f53d.png?v7',\n  'arrow_forward': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25b6.png?v7',\n  'arrow_heading_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2935.png?v7',\n  'arrow_heading_up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2934.png?v7',\n  'arrow_left': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b05.png?v7',\n  'arrow_lower_left': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2199.png?v7',\n  'arrow_lower_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2198.png?v7',\n  'arrow_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/27a1.png?v7',\n  'arrow_right_hook': 'https://assets-cdn.github.com/images/icons/emoji/unicode/21aa.png?v7',\n  'arrow_up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b06.png?v7',\n  'arrow_up_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2195.png?v7',\n  'arrow_up_small': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f53c.png?v7',\n  'arrow_upper_left': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2196.png?v7',\n  'arrow_upper_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2197.png?v7',\n  'arrows_clockwise': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f503.png?v7',\n  'arrows_counterclockwise': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f504.png?v7',\n  'art': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a8.png?v7',\n  'articulated_lorry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69b.png?v7',\n  'artificial_satellite': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f0.png?v7',\n  'aruba': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fc.png?v7',\n  'asterisk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/002a-20e3.png?v7',\n  'astonished': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f632.png?v7',\n  'athletic_shoe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45f.png?v7',\n  'atm': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e7.png?v7',\n  'atom': 'https://assets-cdn.github.com/images/icons/emoji/atom.png?v7',\n  'atom_symbol': 'https://assets-cdn.github.com/images/icons/emoji/unicode/269b.png?v7',\n  'australia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1fa.png?v7',\n  'austria': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1f9.png?v7',\n  'avocado': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f951.png?v7',\n  'azerbaijan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ff.png?v7',\n  'b': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f171.png?v7',\n  'baby': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f476.png?v7',\n  'baby_bottle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37c.png?v7',\n  'baby_chick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f424.png?v7',\n  'baby_symbol': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bc.png?v7',\n  'back': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f519.png?v7',\n  'bacon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f953.png?v7',\n  'badminton': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f8.png?v7',\n  'baggage_claim': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c4.png?v7',\n  'baguette_bread': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f956.png?v7',\n  'bahamas': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f8.png?v7',\n  'bahrain': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ed.png?v7',\n  'balance_scale': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2696.png?v7',\n  'balloon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f388.png?v7',\n  'ballot_box': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5f3.png?v7',\n  'ballot_box_with_check': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2611.png?v7',\n  'bamboo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38d.png?v7',\n  'banana': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34c.png?v7',\n  'bangbang': 'https://assets-cdn.github.com/images/icons/emoji/unicode/203c.png?v7',\n  'bangladesh': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e9.png?v7',\n  'bank': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e6.png?v7',\n  'bar_chart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ca.png?v7',\n  'barbados': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e7.png?v7',\n  'barber': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f488.png?v7',\n  'baseball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26be.png?v7',\n  'basecamp': 'https://assets-cdn.github.com/images/icons/emoji/basecamp.png?v7',\n  'basecampy': 'https://assets-cdn.github.com/images/icons/emoji/basecampy.png?v7',\n  'basketball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c0.png?v7',\n  'basketball_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f9.png?v7',\n  'basketball_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f9-2640.png?v7',\n  'bat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f987.png?v7',\n  'bath': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c0.png?v7',\n  'bathtub': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c1.png?v7',\n  'battery': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50b.png?v7',\n  'beach_umbrella': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d6.png?v7',\n  'bear': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43b.png?v7',\n  'bed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cf.png?v7',\n  'bee': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41d.png?v7',\n  'beer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37a.png?v7',\n  'beers': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37b.png?v7',\n  'beetle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41e.png?v7',\n  'beginner': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f530.png?v7',\n  'belarus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1fe.png?v7',\n  'belgium': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ea.png?v7',\n  'belize': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ff.png?v7',\n  'bell': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f514.png?v7',\n  'bellhop_bell': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ce.png?v7',\n  'benin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ef.png?v7',\n  'bento': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f371.png?v7',\n  'bermuda': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f2.png?v7',\n  'bhutan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f9.png?v7',\n  'bicyclist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4.png?v7',\n  'bike': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b2.png?v7',\n  'biking_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4.png?v7',\n  'biking_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b4-2640.png?v7',\n  'bikini': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f459.png?v7',\n  'biohazard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2623.png?v7',\n  'bird': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f426.png?v7',\n  'birthday': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f382.png?v7',\n  'black_circle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26ab.png?v7',\n  'black_flag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f4.png?v7',\n  'black_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a4.png?v7',\n  'black_joker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f0cf.png?v7',\n  'black_large_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b1b.png?v7',\n  'black_medium_small_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25fe.png?v7',\n  'black_medium_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25fc.png?v7',\n  'black_nib': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2712.png?v7',\n  'black_small_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25aa.png?v7',\n  'black_square_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f532.png?v7',\n  'blonde_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f471.png?v7',\n  'blonde_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f471-2640.png?v7',\n  'blossom': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33c.png?v7',\n  'blowfish': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f421.png?v7',\n  'blue_book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d8.png?v7',\n  'blue_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f699.png?v7',\n  'blue_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f499.png?v7',\n  'blush': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60a.png?v7',\n  'boar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f417.png?v7',\n  'boat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f5.png?v7',\n  'bolivia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f4.png?v7',\n  'bomb': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a3.png?v7',\n  'book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png?v7',\n  'bookmark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f516.png?v7',\n  'bookmark_tabs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d1.png?v7',\n  'books': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4da.png?v7',\n  'boom': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a5.png?v7',\n  'boot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f462.png?v7',\n  'bosnia_herzegovina': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1e6.png?v7',\n  'botswana': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1fc.png?v7',\n  'bouquet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f490.png?v7',\n  'bow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f647.png?v7',\n  'bow_and_arrow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f9.png?v7',\n  'bowing_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f647.png?v7',\n  'bowing_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f647-2640.png?v7',\n  'bowling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b3.png?v7',\n  'bowtie': 'https://assets-cdn.github.com/images/icons/emoji/bowtie.png?v7',\n  'boxing_glove': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f94a.png?v7',\n  'boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f466.png?v7',\n  'brazil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f7.png?v7',\n  'bread': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35e.png?v7',\n  'bride_with_veil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f470.png?v7',\n  'bridge_at_night': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f309.png?v7',\n  'briefcase': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bc.png?v7',\n  'british_indian_ocean_territory': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f4.png?v7',\n  'british_virgin_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ec.png?v7',\n  'broken_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f494.png?v7',\n  'brunei': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f3.png?v7',\n  'bug': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41b.png?v7',\n  'building_construction': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d7.png?v7',\n  'bulb': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a1.png?v7',\n  'bulgaria': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ec.png?v7',\n  'bullettrain_front': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f685.png?v7',\n  'bullettrain_side': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f684.png?v7',\n  'burkina_faso': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1eb.png?v7',\n  'burrito': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32f.png?v7',\n  'burundi': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1ee.png?v7',\n  'bus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68c.png?v7',\n  'business_suit_levitating': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f574.png?v7',\n  'busstop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68f.png?v7',\n  'bust_in_silhouette': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f464.png?v7',\n  'busts_in_silhouette': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f465.png?v7',\n  'butterfly': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98b.png?v7',\n  'cactus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f335.png?v7',\n  'cake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f370.png?v7',\n  'calendar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c6.png?v7',\n  'call_me_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f919.png?v7',\n  'calling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f2.png?v7',\n  'cambodia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ed.png?v7',\n  'camel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42b.png?v7',\n  'camera': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f7.png?v7',\n  'camera_flash': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f8.png?v7',\n  'cameroon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f2.png?v7',\n  'camping': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d5.png?v7',\n  'canada': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e6.png?v7',\n  'canary_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1e8.png?v7',\n  'cancer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264b.png?v7',\n  'candle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f56f.png?v7',\n  'candy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36c.png?v7',\n  'canoe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f6.png?v7',\n  'cape_verde': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fb.png?v7',\n  'capital_abcd': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f520.png?v7',\n  'capricorn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2651.png?v7',\n  'car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f697.png?v7',\n  'card_file_box': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c3.png?v7',\n  'card_index': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c7.png?v7',\n  'card_index_dividers': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c2.png?v7',\n  'caribbean_netherlands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f6.png?v7',\n  'carousel_horse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a0.png?v7',\n  'carrot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f955.png?v7',\n  'cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f431.png?v7',\n  'cat2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f408.png?v7',\n  'cayman_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1fe.png?v7',\n  'cd': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bf.png?v7',\n  'central_african_republic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1eb.png?v7',\n  'chad': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1e9.png?v7',\n  'chains': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26d3.png?v7',\n  'champagne': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37e.png?v7',\n  'chart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b9.png?v7',\n  'chart_with_downwards_trend': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c9.png?v7',\n  'chart_with_upwards_trend': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c8.png?v7',\n  'checkered_flag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c1.png?v7',\n  'cheese': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f9c0.png?v7',\n  'cherries': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f352.png?v7',\n  'cherry_blossom': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f338.png?v7',\n  'chestnut': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f330.png?v7',\n  'chicken': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f414.png?v7',\n  'children_crossing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b8.png?v7',\n  'chile': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f1.png?v7',\n  'chipmunk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43f.png?v7',\n  'chocolate_bar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36b.png?v7',\n  'christmas_island': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fd.png?v7',\n  'christmas_tree': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f384.png?v7',\n  'church': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26ea.png?v7',\n  'cinema': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a6.png?v7',\n  'circus_tent': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3aa.png?v7',\n  'city_sunrise': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f307.png?v7',\n  'city_sunset': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f306.png?v7',\n  'cityscape': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d9.png?v7',\n  'cl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f191.png?v7',\n  'clamp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5dc.png?v7',\n  'clap': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44f.png?v7',\n  'clapper': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ac.png?v7',\n  'classical_building': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3db.png?v7',\n  'clinking_glasses': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f942.png?v7',\n  'clipboard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cb.png?v7',\n  'clock1': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f550.png?v7',\n  'clock10': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f559.png?v7',\n  'clock1030': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f565.png?v7',\n  'clock11': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55a.png?v7',\n  'clock1130': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f566.png?v7',\n  'clock12': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55b.png?v7',\n  'clock1230': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f567.png?v7',\n  'clock130': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55c.png?v7',\n  'clock2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f551.png?v7',\n  'clock230': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55d.png?v7',\n  'clock3': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f552.png?v7',\n  'clock330': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55e.png?v7',\n  'clock4': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f553.png?v7',\n  'clock430': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f55f.png?v7',\n  'clock5': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f554.png?v7',\n  'clock530': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f560.png?v7',\n  'clock6': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f555.png?v7',\n  'clock630': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f561.png?v7',\n  'clock7': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f556.png?v7',\n  'clock730': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f562.png?v7',\n  'clock8': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f557.png?v7',\n  'clock830': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f563.png?v7',\n  'clock9': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f558.png?v7',\n  'clock930': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f564.png?v7',\n  'closed_book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d5.png?v7',\n  'closed_lock_with_key': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f510.png?v7',\n  'closed_umbrella': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f302.png?v7',\n  'cloud': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2601.png?v7',\n  'cloud_with_lightning': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f329.png?v7',\n  'cloud_with_lightning_and_rain': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26c8.png?v7',\n  'cloud_with_rain': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f327.png?v7',\n  'cloud_with_snow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f328.png?v7',\n  'clown_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f921.png?v7',\n  'clubs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2663.png?v7',\n  'cn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f3.png?v7',\n  'cocktail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f378.png?v7',\n  'cocos_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e8.png?v7',\n  'coffee': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2615.png?v7',\n  'coffin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26b0.png?v7',\n  'cold_sweat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f630.png?v7',\n  'collision': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a5.png?v7',\n  'colombia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f4.png?v7',\n  'comet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2604.png?v7',\n  'comoros': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f2.png?v7',\n  'computer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bb.png?v7',\n  'computer_mouse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5b1.png?v7',\n  'confetti_ball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38a.png?v7',\n  'confounded': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f616.png?v7',\n  'confused': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f615.png?v7',\n  'congo_brazzaville': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ec.png?v7',\n  'congo_kinshasa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1e9.png?v7',\n  'congratulations': 'https://assets-cdn.github.com/images/icons/emoji/unicode/3297.png?v7',\n  'construction': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a7.png?v7',\n  'construction_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f477.png?v7',\n  'construction_worker_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f477.png?v7',\n  'construction_worker_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f477-2640.png?v7',\n  'control_knobs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f39b.png?v7',\n  'convenience_store': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ea.png?v7',\n  'cook_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f0.png?v7',\n  'cookie': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36a.png?v7',\n  'cool': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f192.png?v7',\n  'cop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e.png?v7',\n  'copyright': 'https://assets-cdn.github.com/images/icons/emoji/unicode/00a9.png?v7',\n  'corn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33d.png?v7',\n  'costa_rica': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1f7.png?v7',\n  'cote_divoire': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ee.png?v7',\n  'couch_and_lamp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cb.png?v7',\n  'couple': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46b.png?v7',\n  'couple_with_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f491.png?v7',\n  'couple_with_heart_man_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2764-1f468.png?v7',\n  'couple_with_heart_woman_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f491.png?v7',\n  'couple_with_heart_woman_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2764-1f469.png?v7',\n  'couplekiss_man_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2764-1f48b-1f468.png?v7',\n  'couplekiss_man_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48f.png?v7',\n  'couplekiss_woman_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2764-1f48b-1f469.png?v7',\n  'cow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42e.png?v7',\n  'cow2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f404.png?v7',\n  'cowboy_hat_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f920.png?v7',\n  'crab': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f980.png?v7',\n  'crayon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f58d.png?v7',\n  'credit_card': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b3.png?v7',\n  'crescent_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f319.png?v7',\n  'cricket': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cf.png?v7',\n  'croatia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f7.png?v7',\n  'crocodile': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40a.png?v7',\n  'croissant': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f950.png?v7',\n  'crossed_fingers': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f91e.png?v7',\n  'crossed_flags': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38c.png?v7',\n  'crossed_swords': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2694.png?v7',\n  'crown': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f451.png?v7',\n  'cry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f622.png?v7',\n  'crying_cat_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63f.png?v7',\n  'crystal_ball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52e.png?v7',\n  'cuba': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fa.png?v7',\n  'cucumber': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f952.png?v7',\n  'cupid': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f498.png?v7',\n  'curacao': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fc.png?v7',\n  'curly_loop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/27b0.png?v7',\n  'currency_exchange': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b1.png?v7',\n  'curry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35b.png?v7',\n  'custard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36e.png?v7',\n  'customs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c3.png?v7',\n  'cyclone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f300.png?v7',\n  'cyprus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1fe.png?v7',\n  'czech_republic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ff.png?v7',\n  'dagger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5e1.png?v7',\n  'dancer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f483.png?v7',\n  'dancers': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f.png?v7',\n  'dancing_men': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f-2642.png?v7',\n  'dancing_women': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46f.png?v7',\n  'dango': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f361.png?v7',\n  'dark_sunglasses': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f576.png?v7',\n  'dart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3af.png?v7',\n  'dash': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a8.png?v7',\n  'date': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c5.png?v7',\n  'de': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ea.png?v7',\n  'deciduous_tree': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f333.png?v7',\n  'deer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98c.png?v7',\n  'denmark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f0.png?v7',\n  'department_store': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ec.png?v7',\n  'derelict_house': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3da.png?v7',\n  'desert': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3dc.png?v7',\n  'desert_island': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3dd.png?v7',\n  'desktop_computer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a5.png?v7',\n  'detective': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f575.png?v7',\n  'diamond_shape_with_a_dot_inside': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a0.png?v7',\n  'diamonds': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2666.png?v7',\n  'disappointed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61e.png?v7',\n  'disappointed_relieved': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f625.png?v7',\n  'dizzy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ab.png?v7',\n  'dizzy_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f635.png?v7',\n  'djibouti': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1ef.png?v7',\n  'do_not_litter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6af.png?v7',\n  'dog': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f436.png?v7',\n  'dog2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f415.png?v7',\n  'dollar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b5.png?v7',\n  'dolls': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38e.png?v7',\n  'dolphin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42c.png?v7',\n  'dominica': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f2.png?v7',\n  'dominican_republic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e9-1f1f4.png?v7',\n  'door': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6aa.png?v7',\n  'doughnut': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f369.png?v7',\n  'dove': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f54a.png?v7',\n  'dragon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f409.png?v7',\n  'dragon_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f432.png?v7',\n  'dress': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f457.png?v7',\n  'dromedary_camel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42a.png?v7',\n  'drooling_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f924.png?v7',\n  'droplet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a7.png?v7',\n  'drum': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f941.png?v7',\n  'duck': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f986.png?v7',\n  'dvd': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c0.png?v7',\n  'e-mail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e7.png?v7',\n  'eagle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f985.png?v7',\n  'ear': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f442.png?v7',\n  'ear_of_rice': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33e.png?v7',\n  'earth_africa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30d.png?v7',\n  'earth_americas': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30e.png?v7',\n  'earth_asia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30f.png?v7',\n  'ecuador': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1e8.png?v7',\n  'egg': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f95a.png?v7',\n  'eggplant': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f346.png?v7',\n  'egypt': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ec.png?v7',\n  'eight': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0038-20e3.png?v7',\n  'eight_pointed_black_star': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2734.png?v7',\n  'eight_spoked_asterisk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2733.png?v7',\n  'el_salvador': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fb.png?v7',\n  'electric_plug': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50c.png?v7',\n  'electron': 'https://assets-cdn.github.com/images/icons/emoji/electron.png?v7',\n  'elephant': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f418.png?v7',\n  'email': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2709.png?v7',\n  'end': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51a.png?v7',\n  'envelope': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2709.png?v7',\n  'envelope_with_arrow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e9.png?v7',\n  'equatorial_guinea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f6.png?v7',\n  'eritrea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f7.png?v7',\n  'es': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f8.png?v7',\n  'estonia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ea.png?v7',\n  'ethiopia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1f9.png?v7',\n  'eu': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v7',\n  'euro': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b6.png?v7',\n  'european_castle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f0.png?v7',\n  'european_post_office': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e4.png?v7',\n  'european_union': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1fa.png?v7',\n  'evergreen_tree': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f332.png?v7',\n  'exclamation': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2757.png?v7',\n  'expressionless': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f611.png?v7',\n  'eye': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f441.png?v7',\n  'eye_speech_bubble': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f441-1f5e8.png?v7',\n  'eyeglasses': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f453.png?v7',\n  'eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f440.png?v7',\n  'face_with_head_bandage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f915.png?v7',\n  'face_with_thermometer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f912.png?v7',\n  'facepunch': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7',\n  'factory': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ed.png?v7',\n  'falkland_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f0.png?v7',\n  'fallen_leaf': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f342.png?v7',\n  'family': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46a.png?v7',\n  'family_man_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f466.png?v7',\n  'family_man_boy_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f466-1f466.png?v7',\n  'family_man_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467.png?v7',\n  'family_man_girl_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467-1f466.png?v7',\n  'family_man_girl_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f467-1f467.png?v7',\n  'family_man_man_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f466.png?v7',\n  'family_man_man_boy_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f466-1f466.png?v7',\n  'family_man_man_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467.png?v7',\n  'family_man_man_girl_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f466.png?v7',\n  'family_man_man_girl_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f468-1f467-1f467.png?v7',\n  'family_man_woman_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46a.png?v7',\n  'family_man_woman_boy_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f466-1f466.png?v7',\n  'family_man_woman_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467.png?v7',\n  'family_man_woman_girl_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f466.png?v7',\n  'family_man_woman_girl_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f469-1f467-1f467.png?v7',\n  'family_woman_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f466.png?v7',\n  'family_woman_boy_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f466-1f466.png?v7',\n  'family_woman_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467.png?v7',\n  'family_woman_girl_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467-1f466.png?v7',\n  'family_woman_girl_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f467-1f467.png?v7',\n  'family_woman_woman_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f466.png?v7',\n  'family_woman_woman_boy_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f466-1f466.png?v7',\n  'family_woman_woman_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467.png?v7',\n  'family_woman_woman_girl_boy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f466.png?v7',\n  'family_woman_woman_girl_girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f469-1f467-1f467.png?v7',\n  'faroe_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f4.png?v7',\n  'fast_forward': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23e9.png?v7',\n  'fax': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e0.png?v7',\n  'fearful': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f628.png?v7',\n  'feelsgood': 'https://assets-cdn.github.com/images/icons/emoji/feelsgood.png?v7',\n  'feet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43e.png?v7',\n  'female_detective': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f575-2640.png?v7',\n  'ferris_wheel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a1.png?v7',\n  'ferry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f4.png?v7',\n  'field_hockey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d1.png?v7',\n  'fiji': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1ef.png?v7',\n  'file_cabinet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5c4.png?v7',\n  'file_folder': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c1.png?v7',\n  'film_projector': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fd.png?v7',\n  'film_strip': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f39e.png?v7',\n  'finland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1ee.png?v7',\n  'finnadie': 'https://assets-cdn.github.com/images/icons/emoji/finnadie.png?v7',\n  'fire': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f525.png?v7',\n  'fire_engine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f692.png?v7',\n  'fireworks': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f386.png?v7',\n  'first_quarter_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f313.png?v7',\n  'first_quarter_moon_with_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31b.png?v7',\n  'fish': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41f.png?v7',\n  'fish_cake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f365.png?v7',\n  'fishing_pole_and_fish': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a3.png?v7',\n  'fist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270a.png?v7',\n  'fist_left': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f91b.png?v7',\n  'fist_oncoming': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7',\n  'fist_raised': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270a.png?v7',\n  'fist_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f91c.png?v7',\n  'five': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0035-20e3.png?v7',\n  'flags': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38f.png?v7',\n  'flashlight': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f526.png?v7',\n  'fleur_de_lis': 'https://assets-cdn.github.com/images/icons/emoji/unicode/269c.png?v7',\n  'flight_arrival': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ec.png?v7',\n  'flight_departure': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6eb.png?v7',\n  'flipper': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42c.png?v7',\n  'floppy_disk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4be.png?v7',\n  'flower_playing_cards': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b4.png?v7',\n  'flushed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f633.png?v7',\n  'fog': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32b.png?v7',\n  'foggy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f301.png?v7',\n  'football': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c8.png?v7',\n  'footprints': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f463.png?v7',\n  'fork_and_knife': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f374.png?v7',\n  'fountain': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f2.png?v7',\n  'fountain_pen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f58b.png?v7',\n  'four': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0034-20e3.png?v7',\n  'four_leaf_clover': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f340.png?v7',\n  'fox_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98a.png?v7',\n  'fr': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f7.png?v7',\n  'framed_picture': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5bc.png?v7',\n  'free': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f193.png?v7',\n  'french_guiana': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1eb.png?v7',\n  'french_polynesia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1eb.png?v7',\n  'french_southern_territories': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1eb.png?v7',\n  'fried_egg': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f373.png?v7',\n  'fried_shrimp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f364.png?v7',\n  'fries': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35f.png?v7',\n  'frog': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f438.png?v7',\n  'frowning': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f626.png?v7',\n  'frowning_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2639.png?v7',\n  'frowning_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d-2642.png?v7',\n  'frowning_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d.png?v7',\n  'fu': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f595.png?v7',\n  'fuelpump': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26fd.png?v7',\n  'full_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f315.png?v7',\n  'full_moon_with_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31d.png?v7',\n  'funeral_urn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26b1.png?v7',\n  'gabon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e6.png?v7',\n  'gambia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f2.png?v7',\n  'game_die': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b2.png?v7',\n  'gb': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v7',\n  'gear': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2699.png?v7',\n  'gem': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48e.png?v7',\n  'gemini': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264a.png?v7',\n  'georgia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ea.png?v7',\n  'ghana': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ed.png?v7',\n  'ghost': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47b.png?v7',\n  'gibraltar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ee.png?v7',\n  'gift': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f381.png?v7',\n  'gift_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49d.png?v7',\n  'girl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f467.png?v7',\n  'globe_with_meridians': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f310.png?v7',\n  'goal_net': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f945.png?v7',\n  'goat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f410.png?v7',\n  'goberserk': 'https://assets-cdn.github.com/images/icons/emoji/goberserk.png?v7',\n  'godmode': 'https://assets-cdn.github.com/images/icons/emoji/godmode.png?v7',\n  'golf': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f3.png?v7',\n  'golfing_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cc.png?v7',\n  'golfing_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cc-2640.png?v7',\n  'gorilla': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98d.png?v7',\n  'grapes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f347.png?v7',\n  'greece': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f7.png?v7',\n  'green_apple': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34f.png?v7',\n  'green_book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d7.png?v7',\n  'green_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49a.png?v7',\n  'green_salad': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f957.png?v7',\n  'greenland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f1.png?v7',\n  'grenada': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e9.png?v7',\n  'grey_exclamation': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2755.png?v7',\n  'grey_question': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2754.png?v7',\n  'grimacing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62c.png?v7',\n  'grin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f601.png?v7',\n  'grinning': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f600.png?v7',\n  'guadeloupe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f5.png?v7',\n  'guam': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fa.png?v7',\n  'guardsman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f482.png?v7',\n  'guardswoman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f482-2640.png?v7',\n  'guatemala': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f9.png?v7',\n  'guernsey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1ec.png?v7',\n  'guinea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f3.png?v7',\n  'guinea_bissau': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fc.png?v7',\n  'guitar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b8.png?v7',\n  'gun': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52b.png?v7',\n  'guyana': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1fe.png?v7',\n  'haircut': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f487.png?v7',\n  'haircut_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f487-2642.png?v7',\n  'haircut_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f487.png?v7',\n  'haiti': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f9.png?v7',\n  'hamburger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f354.png?v7',\n  'hammer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f528.png?v7',\n  'hammer_and_pick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2692.png?v7',\n  'hammer_and_wrench': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e0.png?v7',\n  'hamster': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f439.png?v7',\n  'hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270b.png?v7',\n  'handbag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45c.png?v7',\n  'handshake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f91d.png?v7',\n  'hankey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7',\n  'hash': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0023-20e3.png?v7',\n  'hatched_chick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f425.png?v7',\n  'hatching_chick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f423.png?v7',\n  'headphones': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a7.png?v7',\n  'hear_no_evil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f649.png?v7',\n  'heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2764.png?v7',\n  'heart_decoration': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49f.png?v7',\n  'heart_eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60d.png?v7',\n  'heart_eyes_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63b.png?v7',\n  'heartbeat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f493.png?v7',\n  'heartpulse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f497.png?v7',\n  'hearts': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2665.png?v7',\n  'heavy_check_mark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2714.png?v7',\n  'heavy_division_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2797.png?v7',\n  'heavy_dollar_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b2.png?v7',\n  'heavy_exclamation_mark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2757.png?v7',\n  'heavy_heart_exclamation': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2763.png?v7',\n  'heavy_minus_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2796.png?v7',\n  'heavy_multiplication_x': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2716.png?v7',\n  'heavy_plus_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2795.png?v7',\n  'helicopter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f681.png?v7',\n  'herb': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33f.png?v7',\n  'hibiscus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33a.png?v7',\n  'high_brightness': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f506.png?v7',\n  'high_heel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f460.png?v7',\n  'hocho': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52a.png?v7',\n  'hole': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f573.png?v7',\n  'honduras': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f3.png?v7',\n  'honey_pot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36f.png?v7',\n  'honeybee': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41d.png?v7',\n  'hong_kong': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1f0.png?v7',\n  'horse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f434.png?v7',\n  'horse_racing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c7.png?v7',\n  'hospital': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e5.png?v7',\n  'hot_pepper': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f336.png?v7',\n  'hotdog': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32d.png?v7',\n  'hotel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e8.png?v7',\n  'hotsprings': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2668.png?v7',\n  'hourglass': 'https://assets-cdn.github.com/images/icons/emoji/unicode/231b.png?v7',\n  'hourglass_flowing_sand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f3.png?v7',\n  'house': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e0.png?v7',\n  'house_with_garden': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e1.png?v7',\n  'houses': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d8.png?v7',\n  'hugs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f917.png?v7',\n  'hungary': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ed-1f1fa.png?v7',\n  'hurtrealbad': 'https://assets-cdn.github.com/images/icons/emoji/hurtrealbad.png?v7',\n  'hushed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62f.png?v7',\n  'ice_cream': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f368.png?v7',\n  'ice_hockey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d2.png?v7',\n  'ice_skate': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f8.png?v7',\n  'icecream': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f366.png?v7',\n  'iceland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f8.png?v7',\n  'id': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f194.png?v7',\n  'ideograph_advantage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f250.png?v7',\n  'imp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47f.png?v7',\n  'inbox_tray': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e5.png?v7',\n  'incoming_envelope': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e8.png?v7',\n  'india': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f3.png?v7',\n  'indonesia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1e9.png?v7',\n  'information_desk_person': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f481.png?v7',\n  'information_source': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2139.png?v7',\n  'innocent': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f607.png?v7',\n  'interrobang': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2049.png?v7',\n  'iphone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f1.png?v7',\n  'iran': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f7.png?v7',\n  'iraq': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f6.png?v7',\n  'ireland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1ea.png?v7',\n  'isle_of_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f2.png?v7',\n  'israel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f1.png?v7',\n  'it': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ee-1f1f9.png?v7',\n  'izakaya_lantern': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ee.png?v7',\n  'jack_o_lantern': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f383.png?v7',\n  'jamaica': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f2.png?v7',\n  'japan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fe.png?v7',\n  'japanese_castle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ef.png?v7',\n  'japanese_goblin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47a.png?v7',\n  'japanese_ogre': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f479.png?v7',\n  'jeans': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f456.png?v7',\n  'jersey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1ea.png?v7',\n  'jordan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f4.png?v7',\n  'joy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f602.png?v7',\n  'joy_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f639.png?v7',\n  'joystick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f579.png?v7',\n  'jp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ef-1f1f5.png?v7',\n  'kaaba': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f54b.png?v7',\n  'kazakhstan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ff.png?v7',\n  'kenya': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ea.png?v7',\n  'key': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f511.png?v7',\n  'keyboard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2328.png?v7',\n  'keycap_ten': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51f.png?v7',\n  'kick_scooter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f4.png?v7',\n  'kimono': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f458.png?v7',\n  'kiribati': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ee.png?v7',\n  'kiss': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48b.png?v7',\n  'kissing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f617.png?v7',\n  'kissing_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63d.png?v7',\n  'kissing_closed_eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61a.png?v7',\n  'kissing_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f618.png?v7',\n  'kissing_smiling_eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f619.png?v7',\n  'kiwi_fruit': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f95d.png?v7',\n  'knife': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52a.png?v7',\n  'koala': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f428.png?v7',\n  'koko': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f201.png?v7',\n  'kosovo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fd-1f1f0.png?v7',\n  'kr': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f7.png?v7',\n  'kuwait': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1fc.png?v7',\n  'kyrgyzstan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1ec.png?v7',\n  'label': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f7.png?v7',\n  'lantern': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ee.png?v7',\n  'laos': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e6.png?v7',\n  'large_blue_circle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f535.png?v7',\n  'large_blue_diamond': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f537.png?v7',\n  'large_orange_diamond': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f536.png?v7',\n  'last_quarter_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f317.png?v7',\n  'last_quarter_moon_with_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31c.png?v7',\n  'latin_cross': 'https://assets-cdn.github.com/images/icons/emoji/unicode/271d.png?v7',\n  'latvia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fb.png?v7',\n  'laughing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f606.png?v7',\n  'leaves': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f343.png?v7',\n  'lebanon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e7.png?v7',\n  'ledger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d2.png?v7',\n  'left_luggage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c5.png?v7',\n  'left_right_arrow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2194.png?v7',\n  'leftwards_arrow_with_hook': 'https://assets-cdn.github.com/images/icons/emoji/unicode/21a9.png?v7',\n  'lemon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34b.png?v7',\n  'leo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264c.png?v7',\n  'leopard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f406.png?v7',\n  'lesotho': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f8.png?v7',\n  'level_slider': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f39a.png?v7',\n  'liberia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f7.png?v7',\n  'libra': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264e.png?v7',\n  'libya': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fe.png?v7',\n  'liechtenstein': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1ee.png?v7',\n  'light_rail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f688.png?v7',\n  'link': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f517.png?v7',\n  'lion': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f981.png?v7',\n  'lips': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f444.png?v7',\n  'lipstick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f484.png?v7',\n  'lithuania': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f9.png?v7',\n  'lizard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98e.png?v7',\n  'lock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f512.png?v7',\n  'lock_with_ink_pen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50f.png?v7',\n  'lollipop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f36d.png?v7',\n  'loop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/27bf.png?v7',\n  'loud_sound': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50a.png?v7',\n  'loudspeaker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e2.png?v7',\n  'love_hotel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e9.png?v7',\n  'love_letter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48c.png?v7',\n  'low_brightness': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f505.png?v7',\n  'luxembourg': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1fa.png?v7',\n  'lying_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f925.png?v7',\n  'm': 'https://assets-cdn.github.com/images/icons/emoji/unicode/24c2.png?v7',\n  'macau': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f4.png?v7',\n  'macedonia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f0.png?v7',\n  'madagascar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ec.png?v7',\n  'mag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50d.png?v7',\n  'mag_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f50e.png?v7',\n  'mahjong': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f004.png?v7',\n  'mailbox': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4eb.png?v7',\n  'mailbox_closed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ea.png?v7',\n  'mailbox_with_mail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ec.png?v7',\n  'mailbox_with_no_mail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ed.png?v7',\n  'malawi': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fc.png?v7',\n  'malaysia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fe.png?v7',\n  'maldives': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fb.png?v7',\n  'male_detective': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f575.png?v7',\n  'mali': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f1.png?v7',\n  'malta': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f9.png?v7',\n  'man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468.png?v7',\n  'man_artist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3a8.png?v7',\n  'man_astronaut': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f680.png?v7',\n  'man_cartwheeling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f938-2642.png?v7',\n  'man_cook': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f373.png?v7',\n  'man_dancing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f57a.png?v7',\n  'man_facepalming': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f926-2642.png?v7',\n  'man_factory_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3ed.png?v7',\n  'man_farmer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f33e.png?v7',\n  'man_firefighter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f692.png?v7',\n  'man_health_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2695.png?v7',\n  'man_in_tuxedo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f935.png?v7',\n  'man_judge': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2696.png?v7',\n  'man_juggling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f939-2642.png?v7',\n  'man_mechanic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f527.png?v7',\n  'man_office_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f4bc.png?v7',\n  'man_pilot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-2708.png?v7',\n  'man_playing_handball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93e-2642.png?v7',\n  'man_playing_water_polo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93d-2642.png?v7',\n  'man_scientist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f52c.png?v7',\n  'man_shrugging': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f937-2642.png?v7',\n  'man_singer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3a4.png?v7',\n  'man_student': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f393.png?v7',\n  'man_teacher': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f3eb.png?v7',\n  'man_technologist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f468-1f4bb.png?v7',\n  'man_with_gua_pi_mao': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f472.png?v7',\n  'man_with_turban': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f473.png?v7',\n  'mandarin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7',\n  'mans_shoe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45e.png?v7',\n  'mantelpiece_clock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f570.png?v7',\n  'maple_leaf': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f341.png?v7',\n  'marshall_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ed.png?v7',\n  'martial_arts_uniform': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f94b.png?v7',\n  'martinique': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f6.png?v7',\n  'mask': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f637.png?v7',\n  'massage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f486.png?v7',\n  'massage_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f486-2642.png?v7',\n  'massage_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f486.png?v7',\n  'mauritania': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f7.png?v7',\n  'mauritius': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fa.png?v7',\n  'mayotte': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fe-1f1f9.png?v7',\n  'meat_on_bone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f356.png?v7',\n  'medal_military': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f396.png?v7',\n  'medal_sports': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c5.png?v7',\n  'mega': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e3.png?v7',\n  'melon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f348.png?v7',\n  'memo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png?v7',\n  'men_wrestling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93c-2642.png?v7',\n  'menorah': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f54e.png?v7',\n  'mens': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b9.png?v7',\n  'metal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f918.png?v7',\n  'metro': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f687.png?v7',\n  'mexico': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1fd.png?v7',\n  'micronesia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1eb-1f1f2.png?v7',\n  'microphone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a4.png?v7',\n  'microscope': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52c.png?v7',\n  'middle_finger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f595.png?v7',\n  'milk_glass': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f95b.png?v7',\n  'milky_way': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30c.png?v7',\n  'minibus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f690.png?v7',\n  'minidisc': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4bd.png?v7',\n  'mobile_phone_off': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f4.png?v7',\n  'moldova': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e9.png?v7',\n  'monaco': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e8.png?v7',\n  'money_mouth_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f911.png?v7',\n  'money_with_wings': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b8.png?v7',\n  'moneybag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b0.png?v7',\n  'mongolia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f3.png?v7',\n  'monkey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f412.png?v7',\n  'monkey_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f435.png?v7',\n  'monorail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69d.png?v7',\n  'montenegro': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ea.png?v7',\n  'montserrat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f8.png?v7',\n  'moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f314.png?v7',\n  'morocco': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1e6.png?v7',\n  'mortar_board': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f393.png?v7',\n  'mosque': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f54c.png?v7',\n  'motor_boat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e5.png?v7',\n  'motor_scooter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f5.png?v7',\n  'motorcycle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cd.png?v7',\n  'motorway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e3.png?v7',\n  'mount_fuji': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fb.png?v7',\n  'mountain': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f0.png?v7',\n  'mountain_bicyclist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5.png?v7',\n  'mountain_biking_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5.png?v7',\n  'mountain_biking_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b5-2640.png?v7',\n  'mountain_cableway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a0.png?v7',\n  'mountain_railway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69e.png?v7',\n  'mountain_snow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d4.png?v7',\n  'mouse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42d.png?v7',\n  'mouse2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f401.png?v7',\n  'movie_camera': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a5.png?v7',\n  'moyai': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5ff.png?v7',\n  'mozambique': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1ff.png?v7',\n  'mrs_claus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f936.png?v7',\n  'muscle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4aa.png?v7',\n  'mushroom': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f344.png?v7',\n  'musical_keyboard': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b9.png?v7',\n  'musical_note': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b5.png?v7',\n  'musical_score': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bc.png?v7',\n  'mute': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f507.png?v7',\n  'myanmar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f2.png?v7',\n  'nail_care': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f485.png?v7',\n  'name_badge': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4db.png?v7',\n  'namibia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1e6.png?v7',\n  'national_park': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3de.png?v7',\n  'nauru': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f7.png?v7',\n  'nauseated_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f922.png?v7',\n  'neckbeard': 'https://assets-cdn.github.com/images/icons/emoji/neckbeard.png?v7',\n  'necktie': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f454.png?v7',\n  'negative_squared_cross_mark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/274e.png?v7',\n  'nepal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f5.png?v7',\n  'nerd_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f913.png?v7',\n  'netherlands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f1.png?v7',\n  'neutral_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f610.png?v7',\n  'new': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f195.png?v7',\n  'new_caledonia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1e8.png?v7',\n  'new_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f311.png?v7',\n  'new_moon_with_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31a.png?v7',\n  'new_zealand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ff.png?v7',\n  'newspaper': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f0.png?v7',\n  'newspaper_roll': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5de.png?v7',\n  'next_track_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23ed.png?v7',\n  'ng': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f196.png?v7',\n  'ng_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f645-2642.png?v7',\n  'ng_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7',\n  'nicaragua': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ee.png?v7',\n  'niger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ea.png?v7',\n  'nigeria': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1ec.png?v7',\n  'night_with_stars': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f303.png?v7',\n  'nine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0039-20e3.png?v7',\n  'niue': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1fa.png?v7',\n  'no_bell': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f515.png?v7',\n  'no_bicycles': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b3.png?v7',\n  'no_entry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26d4.png?v7',\n  'no_entry_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ab.png?v7',\n  'no_good': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7',\n  'no_good_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f645-2642.png?v7',\n  'no_good_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f645.png?v7',\n  'no_mobile_phones': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f5.png?v7',\n  'no_mouth': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f636.png?v7',\n  'no_pedestrians': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b7.png?v7',\n  'no_smoking': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ad.png?v7',\n  'non-potable_water': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b1.png?v7',\n  'norfolk_island': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1eb.png?v7',\n  'north_korea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f5.png?v7',\n  'northern_mariana_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f2-1f1f5.png?v7',\n  'norway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f3-1f1f4.png?v7',\n  'nose': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f443.png?v7',\n  'notebook': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d3.png?v7',\n  'notebook_with_decorative_cover': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d4.png?v7',\n  'notes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b6.png?v7',\n  'nut_and_bolt': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f529.png?v7',\n  'o': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b55.png?v7',\n  'o2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f17e.png?v7',\n  'ocean': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30a.png?v7',\n  'octocat': 'https://assets-cdn.github.com/images/icons/emoji/octocat.png?v7',\n  'octopus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f419.png?v7',\n  'oden': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f362.png?v7',\n  'office': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e2.png?v7',\n  'oil_drum': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e2.png?v7',\n  'ok': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f197.png?v7',\n  'ok_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44c.png?v7',\n  'ok_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f646-2642.png?v7',\n  'ok_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f646.png?v7',\n  'old_key': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5dd.png?v7',\n  'older_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f474.png?v7',\n  'older_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f475.png?v7',\n  'om': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f549.png?v7',\n  'oman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f4-1f1f2.png?v7',\n  'on': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51b.png?v7',\n  'oncoming_automobile': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f698.png?v7',\n  'oncoming_bus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68d.png?v7',\n  'oncoming_police_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f694.png?v7',\n  'oncoming_taxi': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f696.png?v7',\n  'one': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0031-20e3.png?v7',\n  'open_book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d6.png?v7',\n  'open_file_folder': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c2.png?v7',\n  'open_hands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f450.png?v7',\n  'open_mouth': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62e.png?v7',\n  'open_umbrella': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2602.png?v7',\n  'ophiuchus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26ce.png?v7',\n  'orange': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7',\n  'orange_book': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d9.png?v7',\n  'orthodox_cross': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2626.png?v7',\n  'outbox_tray': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e4.png?v7',\n  'owl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f989.png?v7',\n  'ox': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f402.png?v7',\n  'package': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e6.png?v7',\n  'page_facing_up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c4.png?v7',\n  'page_with_curl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4c3.png?v7',\n  'pager': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4df.png?v7',\n  'paintbrush': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f58c.png?v7',\n  'pakistan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f0.png?v7',\n  'palau': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1fc.png?v7',\n  'palestinian_territories': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f8.png?v7',\n  'palm_tree': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f334.png?v7',\n  'panama': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1e6.png?v7',\n  'pancakes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f95e.png?v7',\n  'panda_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43c.png?v7',\n  'paperclip': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ce.png?v7',\n  'paperclips': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f587.png?v7',\n  'papua_new_guinea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ec.png?v7',\n  'paraguay': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1fe.png?v7',\n  'parasol_on_ground': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f1.png?v7',\n  'parking': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f17f.png?v7',\n  'part_alternation_mark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/303d.png?v7',\n  'partly_sunny': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26c5.png?v7',\n  'passenger_ship': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6f3.png?v7',\n  'passport_control': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6c2.png?v7',\n  'pause_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f8.png?v7',\n  'paw_prints': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43e.png?v7',\n  'peace_symbol': 'https://assets-cdn.github.com/images/icons/emoji/unicode/262e.png?v7',\n  'peach': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f351.png?v7',\n  'peanuts': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f95c.png?v7',\n  'pear': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f350.png?v7',\n  'pen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f58a.png?v7',\n  'pencil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dd.png?v7',\n  'pencil2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270f.png?v7',\n  'penguin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f427.png?v7',\n  'pensive': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f614.png?v7',\n  'performing_arts': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ad.png?v7',\n  'persevere': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f623.png?v7',\n  'person_fencing': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93a.png?v7',\n  'person_frowning': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64d.png?v7',\n  'person_with_blond_hair': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f471.png?v7',\n  'person_with_pouting_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e.png?v7',\n  'peru': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ea.png?v7',\n  'philippines': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1ed.png?v7',\n  'phone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/260e.png?v7',\n  'pick': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26cf.png?v7',\n  'pig': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f437.png?v7',\n  'pig2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f416.png?v7',\n  'pig_nose': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43d.png?v7',\n  'pill': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48a.png?v7',\n  'pineapple': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34d.png?v7',\n  'ping_pong': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d3.png?v7',\n  'pisces': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2653.png?v7',\n  'pitcairn_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f3.png?v7',\n  'pizza': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f355.png?v7',\n  'place_of_worship': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d0.png?v7',\n  'plate_with_cutlery': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37d.png?v7',\n  'play_or_pause_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23ef.png?v7',\n  'point_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f447.png?v7',\n  'point_left': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f448.png?v7',\n  'point_right': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f449.png?v7',\n  'point_up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/261d.png?v7',\n  'point_up_2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f446.png?v7',\n  'poland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f1.png?v7',\n  'police_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f693.png?v7',\n  'policeman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e.png?v7',\n  'policewoman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46e-2640.png?v7',\n  'poodle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f429.png?v7',\n  'poop': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7',\n  'popcorn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f37f.png?v7',\n  'portugal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f9.png?v7',\n  'post_office': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3e3.png?v7',\n  'postal_horn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ef.png?v7',\n  'postbox': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ee.png?v7',\n  'potable_water': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b0.png?v7',\n  'potato': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f954.png?v7',\n  'pouch': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45d.png?v7',\n  'poultry_leg': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f357.png?v7',\n  'pound': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b7.png?v7',\n  'pout': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f621.png?v7',\n  'pouting_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63e.png?v7',\n  'pouting_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e-2642.png?v7',\n  'pouting_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64e.png?v7',\n  'pray': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64f.png?v7',\n  'prayer_beads': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ff.png?v7',\n  'pregnant_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f930.png?v7',\n  'previous_track_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23ee.png?v7',\n  'prince': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f934.png?v7',\n  'princess': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f478.png?v7',\n  'printer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5a8.png?v7',\n  'puerto_rico': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f7.png?v7',\n  'punch': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44a.png?v7',\n  'purple_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49c.png?v7',\n  'purse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45b.png?v7',\n  'pushpin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cc.png?v7',\n  'put_litter_in_its_place': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ae.png?v7',\n  'qatar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f6-1f1e6.png?v7',\n  'question': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2753.png?v7',\n  'rabbit': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f430.png?v7',\n  'rabbit2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f407.png?v7',\n  'racehorse': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40e.png?v7',\n  'racing_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ce.png?v7',\n  'radio': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fb.png?v7',\n  'radio_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f518.png?v7',\n  'radioactive': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2622.png?v7',\n  'rage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f621.png?v7',\n  'rage1': 'https://assets-cdn.github.com/images/icons/emoji/rage1.png?v7',\n  'rage2': 'https://assets-cdn.github.com/images/icons/emoji/rage2.png?v7',\n  'rage3': 'https://assets-cdn.github.com/images/icons/emoji/rage3.png?v7',\n  'rage4': 'https://assets-cdn.github.com/images/icons/emoji/rage4.png?v7',\n  'railway_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f683.png?v7',\n  'railway_track': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e4.png?v7',\n  'rainbow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f308.png?v7',\n  'rainbow_flag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f3-1f308.png?v7',\n  'raised_back_of_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f91a.png?v7',\n  'raised_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270b.png?v7',\n  'raised_hand_with_fingers_splayed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f590.png?v7',\n  'raised_hands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64c.png?v7',\n  'raising_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b.png?v7',\n  'raising_hand_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b-2642.png?v7',\n  'raising_hand_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64b.png?v7',\n  'ram': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40f.png?v7',\n  'ramen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35c.png?v7',\n  'rat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f400.png?v7',\n  'record_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23fa.png?v7',\n  'recycle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/267b.png?v7',\n  'red_car': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f697.png?v7',\n  'red_circle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f534.png?v7',\n  'registered': 'https://assets-cdn.github.com/images/icons/emoji/unicode/00ae.png?v7',\n  'relaxed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/263a.png?v7',\n  'relieved': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60c.png?v7',\n  'reminder_ribbon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f397.png?v7',\n  'repeat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f501.png?v7',\n  'repeat_one': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f502.png?v7',\n  'rescue_worker_helmet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26d1.png?v7',\n  'restroom': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bb.png?v7',\n  'reunion': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1ea.png?v7',\n  'revolving_hearts': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49e.png?v7',\n  'rewind': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23ea.png?v7',\n  'rhinoceros': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f98f.png?v7',\n  'ribbon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f380.png?v7',\n  'rice': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35a.png?v7',\n  'rice_ball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f359.png?v7',\n  'rice_cracker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f358.png?v7',\n  'rice_scene': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f391.png?v7',\n  'right_anger_bubble': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5ef.png?v7',\n  'ring': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f48d.png?v7',\n  'robot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f916.png?v7',\n  'rocket': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f680.png?v7',\n  'rofl': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f923.png?v7',\n  'roll_eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f644.png?v7',\n  'roller_coaster': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a2.png?v7',\n  'romania': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1f4.png?v7',\n  'rooster': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f413.png?v7',\n  'rose': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f339.png?v7',\n  'rosette': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f5.png?v7',\n  'rotating_light': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a8.png?v7',\n  'round_pushpin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cd.png?v7',\n  'rowboat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3.png?v7',\n  'rowing_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3.png?v7',\n  'rowing_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a3-2640.png?v7',\n  'ru': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1fa.png?v7',\n  'rugby_football': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c9.png?v7',\n  'runner': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7',\n  'running': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7',\n  'running_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3.png?v7',\n  'running_shirt_with_sash': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bd.png?v7',\n  'running_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c3-2640.png?v7',\n  'rwanda': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1fc.png?v7',\n  'sa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f202.png?v7',\n  'sagittarius': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2650.png?v7',\n  'sailboat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f5.png?v7',\n  'sake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f376.png?v7',\n  'samoa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fc-1f1f8.png?v7',\n  'san_marino': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f2.png?v7',\n  'sandal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f461.png?v7',\n  'santa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f385.png?v7',\n  'sao_tome_principe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f9.png?v7',\n  'satellite': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4e1.png?v7',\n  'satisfied': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f606.png?v7',\n  'saudi_arabia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e6.png?v7',\n  'saxophone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b7.png?v7',\n  'school': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3eb.png?v7',\n  'school_satchel': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f392.png?v7',\n  'scissors': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2702.png?v7',\n  'scorpion': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f982.png?v7',\n  'scorpius': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264f.png?v7',\n  'scream': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f631.png?v7',\n  'scream_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f640.png?v7',\n  'scroll': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4dc.png?v7',\n  'seat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ba.png?v7',\n  'secret': 'https://assets-cdn.github.com/images/icons/emoji/unicode/3299.png?v7',\n  'see_no_evil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f648.png?v7',\n  'seedling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f331.png?v7',\n  'selfie': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f933.png?v7',\n  'senegal': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f3.png?v7',\n  'serbia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f7-1f1f8.png?v7',\n  'seven': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0037-20e3.png?v7',\n  'seychelles': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e8.png?v7',\n  'shallow_pan_of_food': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f958.png?v7',\n  'shamrock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2618.png?v7',\n  'shark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f988.png?v7',\n  'shaved_ice': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f367.png?v7',\n  'sheep': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f411.png?v7',\n  'shell': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f41a.png?v7',\n  'shield': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e1.png?v7',\n  'shinto_shrine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26e9.png?v7',\n  'ship': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a2.png?v7',\n  'shipit': 'https://assets-cdn.github.com/images/icons/emoji/shipit.png?v7',\n  'shirt': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f455.png?v7',\n  'shit': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a9.png?v7',\n  'shoe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45e.png?v7',\n  'shopping': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cd.png?v7',\n  'shopping_cart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d2.png?v7',\n  'shower': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bf.png?v7',\n  'shrimp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f990.png?v7',\n  'sierra_leone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f1.png?v7',\n  'signal_strength': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f6.png?v7',\n  'singapore': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ec.png?v7',\n  'sint_maarten': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fd.png?v7',\n  'six': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0036-20e3.png?v7',\n  'six_pointed_star': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52f.png?v7',\n  'ski': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bf.png?v7',\n  'skier': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26f7.png?v7',\n  'skull': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f480.png?v7',\n  'skull_and_crossbones': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2620.png?v7',\n  'sleeping': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f634.png?v7',\n  'sleeping_bed': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6cc.png?v7',\n  'sleepy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62a.png?v7',\n  'slightly_frowning_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f641.png?v7',\n  'slightly_smiling_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f642.png?v7',\n  'slot_machine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3b0.png?v7',\n  'slovakia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f0.png?v7',\n  'slovenia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ee.png?v7',\n  'small_airplane': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6e9.png?v7',\n  'small_blue_diamond': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f539.png?v7',\n  'small_orange_diamond': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f538.png?v7',\n  'small_red_triangle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f53a.png?v7',\n  'small_red_triangle_down': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f53b.png?v7',\n  'smile': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f604.png?v7',\n  'smile_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f638.png?v7',\n  'smiley': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f603.png?v7',\n  'smiley_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63a.png?v7',\n  'smiling_imp': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f608.png?v7',\n  'smirk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60f.png?v7',\n  'smirk_cat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f63c.png?v7',\n  'smoking': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ac.png?v7',\n  'snail': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40c.png?v7',\n  'snake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40d.png?v7',\n  'sneezing_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f927.png?v7',\n  'snowboarder': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c2.png?v7',\n  'snowflake': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2744.png?v7',\n  'snowman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26c4.png?v7',\n  'snowman_with_snow': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2603.png?v7',\n  'sob': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62d.png?v7',\n  'soccer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26bd.png?v7',\n  'solomon_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e7.png?v7',\n  'somalia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f4.png?v7',\n  'soon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51c.png?v7',\n  'sos': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f198.png?v7',\n  'sound': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f509.png?v7',\n  'south_africa': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1e6.png?v7',\n  'south_georgia_south_sandwich_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1f8.png?v7',\n  'south_sudan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f8.png?v7',\n  'space_invader': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f47e.png?v7',\n  'spades': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2660.png?v7',\n  'spaghetti': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f35d.png?v7',\n  'sparkle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2747.png?v7',\n  'sparkler': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f387.png?v7',\n  'sparkles': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2728.png?v7',\n  'sparkling_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f496.png?v7',\n  'speak_no_evil': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f64a.png?v7',\n  'speaker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f508.png?v7',\n  'speaking_head': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5e3.png?v7',\n  'speech_balloon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ac.png?v7',\n  'speedboat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a4.png?v7',\n  'spider': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f577.png?v7',\n  'spider_web': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f578.png?v7',\n  'spiral_calendar': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d3.png?v7',\n  'spiral_notepad': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d2.png?v7',\n  'spoon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f944.png?v7',\n  'squid': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f991.png?v7',\n  'squirrel': 'https://assets-cdn.github.com/images/icons/emoji/shipit.png?v7',\n  'sri_lanka': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1f0.png?v7',\n  'st_barthelemy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e7-1f1f1.png?v7',\n  'st_helena': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ed.png?v7',\n  'st_kitts_nevis': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f0-1f1f3.png?v7',\n  'st_lucia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f1-1f1e8.png?v7',\n  'st_pierre_miquelon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f5-1f1f2.png?v7',\n  'st_vincent_grenadines': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1e8.png?v7',\n  'stadium': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3df.png?v7',\n  'star': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7',\n  'star2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31f.png?v7',\n  'star_and_crescent': 'https://assets-cdn.github.com/images/icons/emoji/unicode/262a.png?v7',\n  'star_of_david': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2721.png?v7',\n  'stars': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f320.png?v7',\n  'station': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f689.png?v7',\n  'statue_of_liberty': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fd.png?v7',\n  'steam_locomotive': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f682.png?v7',\n  'stew': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f372.png?v7',\n  'stop_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f9.png?v7',\n  'stop_sign': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6d1.png?v7',\n  'stopwatch': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f1.png?v7',\n  'straight_ruler': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4cf.png?v7',\n  'strawberry': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f353.png?v7',\n  'stuck_out_tongue': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61b.png?v7',\n  'stuck_out_tongue_closed_eyes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61d.png?v7',\n  'stuck_out_tongue_winking_eye': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61c.png?v7',\n  'studio_microphone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f399.png?v7',\n  'stuffed_flatbread': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f959.png?v7',\n  'sudan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1e9.png?v7',\n  'sun_behind_large_cloud': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f325.png?v7',\n  'sun_behind_rain_cloud': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f326.png?v7',\n  'sun_behind_small_cloud': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f324.png?v7',\n  'sun_with_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f31e.png?v7',\n  'sunflower': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f33b.png?v7',\n  'sunglasses': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60e.png?v7',\n  'sunny': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2600.png?v7',\n  'sunrise': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f305.png?v7',\n  'sunrise_over_mountains': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f304.png?v7',\n  'surfer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4.png?v7',\n  'surfing_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4.png?v7',\n  'surfing_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c4-2640.png?v7',\n  'suriname': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1f7.png?v7',\n  'sushi': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f363.png?v7',\n  'suspect': 'https://assets-cdn.github.com/images/icons/emoji/suspect.png?v7',\n  'suspension_railway': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69f.png?v7',\n  'swaziland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ff.png?v7',\n  'sweat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f613.png?v7',\n  'sweat_drops': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a6.png?v7',\n  'sweat_smile': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f605.png?v7',\n  'sweden': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1ea.png?v7',\n  'sweet_potato': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f360.png?v7',\n  'swimmer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca.png?v7',\n  'swimming_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca.png?v7',\n  'swimming_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ca-2640.png?v7',\n  'switzerland': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e8-1f1ed.png?v7',\n  'symbols': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f523.png?v7',\n  'synagogue': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f54d.png?v7',\n  'syria': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f8-1f1fe.png?v7',\n  'syringe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f489.png?v7',\n  'taco': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32e.png?v7',\n  'tada': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f389.png?v7',\n  'taiwan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1fc.png?v7',\n  'tajikistan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ef.png?v7',\n  'tanabata_tree': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f38b.png?v7',\n  'tangerine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f34a.png?v7',\n  'tanzania': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ff.png?v7',\n  'taurus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2649.png?v7',\n  'taxi': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f695.png?v7',\n  'tea': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f375.png?v7',\n  'telephone': 'https://assets-cdn.github.com/images/icons/emoji/unicode/260e.png?v7',\n  'telephone_receiver': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4de.png?v7',\n  'telescope': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f52d.png?v7',\n  'tennis': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3be.png?v7',\n  'tent': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26fa.png?v7',\n  'thailand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ed.png?v7',\n  'thermometer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f321.png?v7',\n  'thinking': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f914.png?v7',\n  'thought_balloon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ad.png?v7',\n  'three': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0033-20e3.png?v7',\n  'thumbsdown': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44e.png?v7',\n  'thumbsup': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7',\n  'ticket': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ab.png?v7',\n  'tickets': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f39f.png?v7',\n  'tiger': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f42f.png?v7',\n  'tiger2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f405.png?v7',\n  'timer_clock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/23f2.png?v7',\n  'timor_leste': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f1.png?v7',\n  'tipping_hand_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f481-2642.png?v7',\n  'tipping_hand_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f481.png?v7',\n  'tired_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f62b.png?v7',\n  'tm': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2122.png?v7',\n  'togo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1ec.png?v7',\n  'toilet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6bd.png?v7',\n  'tokelau': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f0.png?v7',\n  'tokyo_tower': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fc.png?v7',\n  'tomato': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f345.png?v7',\n  'tonga': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f4.png?v7',\n  'tongue': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f445.png?v7',\n  'top': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51d.png?v7',\n  'tophat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3a9.png?v7',\n  'tornado': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32a.png?v7',\n  'tr': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f7.png?v7',\n  'trackball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5b2.png?v7',\n  'tractor': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69c.png?v7',\n  'traffic_light': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a5.png?v7',\n  'train': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68b.png?v7',\n  'train2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f686.png?v7',\n  'tram': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68a.png?v7',\n  'triangular_flag_on_post': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a9.png?v7',\n  'triangular_ruler': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4d0.png?v7',\n  'trident': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f531.png?v7',\n  'trinidad_tobago': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f9.png?v7',\n  'triumph': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f624.png?v7',\n  'trolleybus': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f68e.png?v7',\n  'trollface': 'https://assets-cdn.github.com/images/icons/emoji/trollface.png?v7',\n  'trophy': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3c6.png?v7',\n  'tropical_drink': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f379.png?v7',\n  'tropical_fish': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f420.png?v7',\n  'truck': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f69a.png?v7',\n  'trumpet': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ba.png?v7',\n  'tshirt': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f455.png?v7',\n  'tulip': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f337.png?v7',\n  'tumbler_glass': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f943.png?v7',\n  'tunisia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f3.png?v7',\n  'turkey': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f983.png?v7',\n  'turkmenistan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1f2.png?v7',\n  'turks_caicos_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1e8.png?v7',\n  'turtle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f422.png?v7',\n  'tuvalu': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1f9-1f1fb.png?v7',\n  'tv': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fa.png?v7',\n  'twisted_rightwards_arrows': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f500.png?v7',\n  'two': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0032-20e3.png?v7',\n  'two_hearts': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f495.png?v7',\n  'two_men_holding_hands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46c.png?v7',\n  'two_women_holding_hands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f46d.png?v7',\n  'u5272': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f239.png?v7',\n  'u5408': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f234.png?v7',\n  'u55b6': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f23a.png?v7',\n  'u6307': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f22f.png?v7',\n  'u6708': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f237.png?v7',\n  'u6709': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f236.png?v7',\n  'u6e80': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f235.png?v7',\n  'u7121': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f21a.png?v7',\n  'u7533': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f238.png?v7',\n  'u7981': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f232.png?v7',\n  'u7a7a': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f233.png?v7',\n  'uganda': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1ec.png?v7',\n  'uk': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ec-1f1e7.png?v7',\n  'ukraine': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1e6.png?v7',\n  'umbrella': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2614.png?v7',\n  'unamused': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f612.png?v7',\n  'underage': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f51e.png?v7',\n  'unicorn': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f984.png?v7',\n  'united_arab_emirates': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1e6-1f1ea.png?v7',\n  'unlock': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f513.png?v7',\n  'up': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f199.png?v7',\n  'upside_down_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f643.png?v7',\n  'uruguay': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1fe.png?v7',\n  'us': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1f8.png?v7',\n  'us_virgin_islands': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ee.png?v7',\n  'uzbekistan': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fa-1f1ff.png?v7',\n  'v': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270c.png?v7',\n  'vanuatu': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1fa.png?v7',\n  'vatican_city': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1e6.png?v7',\n  'venezuela': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1ea.png?v7',\n  'vertical_traffic_light': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6a6.png?v7',\n  'vhs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4fc.png?v7',\n  'vibration_mode': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f3.png?v7',\n  'video_camera': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4f9.png?v7',\n  'video_game': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3ae.png?v7',\n  'vietnam': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fb-1f1f3.png?v7',\n  'violin': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3bb.png?v7',\n  'virgo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/264d.png?v7',\n  'volcano': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f30b.png?v7',\n  'volleyball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3d0.png?v7',\n  'vs': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f19a.png?v7',\n  'vulcan_salute': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f596.png?v7',\n  'walking': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6.png?v7',\n  'walking_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6.png?v7',\n  'walking_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6b6-2640.png?v7',\n  'wallis_futuna': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fc-1f1eb.png?v7',\n  'waning_crescent_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f318.png?v7',\n  'waning_gibbous_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f316.png?v7',\n  'warning': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26a0.png?v7',\n  'wastebasket': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5d1.png?v7',\n  'watch': 'https://assets-cdn.github.com/images/icons/emoji/unicode/231a.png?v7',\n  'water_buffalo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f403.png?v7',\n  'watermelon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f349.png?v7',\n  'wave': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f44b.png?v7',\n  'wavy_dash': 'https://assets-cdn.github.com/images/icons/emoji/unicode/3030.png?v7',\n  'waxing_crescent_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f312.png?v7',\n  'waxing_gibbous_moon': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f314.png?v7',\n  'wc': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6be.png?v7',\n  'weary': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f629.png?v7',\n  'wedding': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f492.png?v7',\n  'weight_lifting_man': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cb.png?v7',\n  'weight_lifting_woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3cb-2640.png?v7',\n  'western_sahara': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ea-1f1ed.png?v7',\n  'whale': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f433.png?v7',\n  'whale2': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f40b.png?v7',\n  'wheel_of_dharma': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2638.png?v7',\n  'wheelchair': 'https://assets-cdn.github.com/images/icons/emoji/unicode/267f.png?v7',\n  'white_check_mark': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2705.png?v7',\n  'white_circle': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26aa.png?v7',\n  'white_flag': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f3f3.png?v7',\n  'white_flower': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4ae.png?v7',\n  'white_large_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/2b1c.png?v7',\n  'white_medium_small_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25fd.png?v7',\n  'white_medium_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25fb.png?v7',\n  'white_small_square': 'https://assets-cdn.github.com/images/icons/emoji/unicode/25ab.png?v7',\n  'white_square_button': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f533.png?v7',\n  'wilted_flower': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f940.png?v7',\n  'wind_chime': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f390.png?v7',\n  'wind_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f32c.png?v7',\n  'wine_glass': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f377.png?v7',\n  'wink': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f609.png?v7',\n  'wolf': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f43a.png?v7',\n  'woman': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469.png?v7',\n  'woman_artist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3a8.png?v7',\n  'woman_astronaut': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f680.png?v7',\n  'woman_cartwheeling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f938-2640.png?v7',\n  'woman_cook': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f373.png?v7',\n  'woman_facepalming': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f926-2640.png?v7',\n  'woman_factory_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3ed.png?v7',\n  'woman_farmer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f33e.png?v7',\n  'woman_firefighter': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f692.png?v7',\n  'woman_health_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2695.png?v7',\n  'woman_judge': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2696.png?v7',\n  'woman_juggling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f939-2640.png?v7',\n  'woman_mechanic': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f527.png?v7',\n  'woman_office_worker': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f4bc.png?v7',\n  'woman_pilot': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-2708.png?v7',\n  'woman_playing_handball': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93e-2640.png?v7',\n  'woman_playing_water_polo': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93d-2640.png?v7',\n  'woman_scientist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f52c.png?v7',\n  'woman_shrugging': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f937-2640.png?v7',\n  'woman_singer': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3a4.png?v7',\n  'woman_student': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f393.png?v7',\n  'woman_teacher': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f3eb.png?v7',\n  'woman_technologist': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f469-1f4bb.png?v7',\n  'woman_with_turban': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f473-2640.png?v7',\n  'womans_clothes': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f45a.png?v7',\n  'womans_hat': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f452.png?v7',\n  'women_wrestling': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f93c-2640.png?v7',\n  'womens': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f6ba.png?v7',\n  'world_map': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f5fa.png?v7',\n  'worried': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f61f.png?v7',\n  'wrench': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f527.png?v7',\n  'writing_hand': 'https://assets-cdn.github.com/images/icons/emoji/unicode/270d.png?v7',\n  'x': 'https://assets-cdn.github.com/images/icons/emoji/unicode/274c.png?v7',\n  'yellow_heart': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f49b.png?v7',\n  'yemen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1fe-1f1ea.png?v7',\n  'yen': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4b4.png?v7',\n  'yin_yang': 'https://assets-cdn.github.com/images/icons/emoji/unicode/262f.png?v7',\n  'yum': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f60b.png?v7',\n  'zambia': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1f2.png?v7',\n  'zap': 'https://assets-cdn.github.com/images/icons/emoji/unicode/26a1.png?v7',\n  'zero': 'https://assets-cdn.github.com/images/icons/emoji/unicode/0030-20e3.png?v7',\n  'zimbabwe': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f1ff-1f1fc.png?v7',\n  'zipper_mouth_face': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f910.png?v7',\n  'zzz': 'https://assets-cdn.github.com/images/icons/emoji/unicode/1f4a4.png?v7'\n}\n"
  },
  {
    "path": "resources/assets/js/vendor/inline-attachment.js",
    "content": "/*jslint newcap: true */\n/*global XMLHttpRequest: false, FormData: false */\n/*\n * Inline Text Attachment\n *\n * Author: Roy van Kaathoven\n * Contact: ik@royvankaathoven.nl\n */\n(function(document, window) {\n  'use strict';\n\n  var inlineAttachment = function(options, instance) {\n    this.settings = inlineAttachment.util.merge(options, inlineAttachment.defaults);\n    this.editor = instance;\n    this.filenameTag = '{filename}';\n    this.lastValue = null;\n  };\n\n  /**\n   * Will holds the available editors\n   *\n   * @type {Object}\n   */\n  inlineAttachment.editors = {};\n\n  /**\n   * Utility functions\n   */\n  inlineAttachment.util = {\n\n    /**\n     * Simple function to merge the given objects\n     *\n     * @param {Object[]} object Multiple object parameters\n     * @returns {Object}\n     */\n    merge: function() {\n      var result = {};\n      for (var i = arguments.length - 1; i >= 0; i--) {\n        var obj = arguments[i];\n        for (var k in obj) {\n          if (obj.hasOwnProperty(k)) {\n            result[k] = obj[k];\n          }\n        }\n      }\n      return result;\n    },\n\n    /**\n     * Append a line of text at the bottom, ensuring there aren't unnecessary newlines\n     *\n     * @param {String} appended Current content\n     * @param {String} previous Value which should be appended after the current content\n     */\n    appendInItsOwnLine: function(previous, appended) {\n      return (previous + \"\\n\\n[[D]]\" + appended)\n        .replace(/(\\n{2,})\\[\\[D\\]\\]/, \"\\n\\n\")\n        .replace(/^(\\n*)/, \"\");\n    },\n\n    /**\n     * Inserts the given value at the current cursor position of the textarea element\n     *\n     * @param  {HtmlElement} el\n     * @param  {String} value Text which will be inserted at the cursor position\n     */\n    insertTextAtCursor: function(el, text) {\n      var scrollPos = el.scrollTop,\n        strPos = 0,\n        browser = false,\n        range;\n\n      if ((el.selectionStart || el.selectionStart === '0')) {\n        browser = \"ff\";\n      } else if (document.selection) {\n        browser = \"ie\";\n      }\n\n      if (browser === \"ie\") {\n        el.focus();\n        range = document.selection.createRange();\n        range.moveStart('character', -el.value.length);\n        strPos = range.text.length;\n      } else if (browser === \"ff\") {\n        strPos = el.selectionStart;\n      }\n\n      var front = (el.value).substring(0, strPos);\n      var back = (el.value).substring(strPos, el.value.length);\n      el.value = front + text + back;\n      strPos = strPos + text.length;\n      if (browser === \"ie\") {\n        el.focus();\n        range = document.selection.createRange();\n        range.moveStart('character', -el.value.length);\n        range.moveStart('character', strPos);\n        range.moveEnd('character', 0);\n        range.select();\n      } else if (browser === \"ff\") {\n        el.selectionStart = strPos;\n        el.selectionEnd = strPos;\n        el.focus();\n      }\n      el.scrollTop = scrollPos;\n    }\n  };\n\n  /**\n   * Default configuration options\n   *\n   * @type {Object}\n   */\n  inlineAttachment.defaults = {\n    /**\n     * URL where the file will be send\n     */\n    uploadUrl: 'upload_attachment.php',\n\n    /**\n     * Which method will be used to send the file to the upload URL\n     */\n    uploadMethod: 'POST',\n\n    /**\n     * Name in which the file will be placed\n     */\n    uploadFieldName: 'file',\n\n    /**\n     * Extension which will be used when a file extension could not\n     * be detected\n     */\n    defaultExtension: 'png',\n\n    /**\n     * JSON field which refers to the uploaded file URL\n     */\n    jsonFieldName: 'filename',\n\n    /**\n     * Allowed MIME types\n     */\n    allowedTypes: [\n      'image/jpeg',\n      'image/png',\n      'image/jpg',\n      'image/gif'\n    ],\n\n    /**\n     * Text which will be inserted when dropping or pasting a file.\n     * Acts as a placeholder which will be replaced when the file is done with uploading\n     */\n    progressText: '![Uploading file...]()',\n\n    /**\n     * When a file has successfully been uploaded the progressText\n     * will be replaced by the urlText, the {filename} tag will be replaced\n     * by the filename that has been returned by the server\n     */\n    urlText: \"![file]({filename})\",\n\n    /**\n     * Text which will be used when uploading has failed\n     */\n    errorText: \"Error uploading file\",\n\n    /**\n     * Extra parameters which will be send when uploading a file\n     */\n    extraParams: {},\n\n    /**\n     * Extra headers which will be send when uploading a file\n     */\n    extraHeaders: {},\n\n    /**\n     * Before the file is send\n     */\n    beforeFileUpload: function() {\n      return true;\n    },\n\n    /**\n     * Triggers when a file is dropped or pasted\n     */\n    onFileReceived: function() {},\n\n    /**\n     * Custom upload handler\n     *\n     * @return {Boolean} when false is returned it will prevent default upload behavior\n     */\n    onFileUploadResponse: function() {\n      return true;\n    },\n\n    /**\n     * Custom error handler. Runs after removing the placeholder text and before the alert().\n     * Return false from this function to prevent the alert dialog.\n     *\n     * @return {Boolean} when false is returned it will prevent default error behavior\n     */\n    onFileUploadError: function() {\n      return true;\n    },\n\n    /**\n     * When a file has succesfully been uploaded\n     */\n    onFileUploaded: function() {}\n  };\n\n  /**\n   * Uploads the blob\n   *\n   * @param  {Blob} file blob data received from event.dataTransfer object\n   * @return {XMLHttpRequest} request object which sends the file\n   */\n  inlineAttachment.prototype.uploadFile = function(file) {\n    var me = this,\n      formData = new FormData(),\n      xhr = new XMLHttpRequest(),\n      settings = this.settings,\n      extension = settings.defaultExtension || settings.defualtExtension;\n\n    if (typeof settings.setupFormData === 'function') {\n      settings.setupFormData(formData, file);\n    }\n\n    // Attach the file. If coming from clipboard, add a default filename (only works in Chrome for now)\n    // http://stackoverflow.com/questions/6664967/how-to-give-a-blob-uploaded-as-formdata-a-file-name\n    if (file.name) {\n      var fileNameMatches = file.name.match(/\\.(.+)$/);\n      if (fileNameMatches) {\n        extension = fileNameMatches[1];\n      }\n    }\n\n    var remoteFilename = \"image-\" + Date.now() + \".\" + extension;\n    if (typeof settings.remoteFilename === 'function') {\n      remoteFilename = settings.remoteFilename(file);\n    }\n\n    formData.append(settings.uploadFieldName, file, remoteFilename);\n\n    // Append the extra parameters to the formdata\n    if (typeof settings.extraParams === \"object\") {\n      for (var key in settings.extraParams) {\n        if (settings.extraParams.hasOwnProperty(key)) {\n          formData.append(key, settings.extraParams[key]);\n        }\n      }\n    }\n\n    xhr.open('POST', settings.uploadUrl);\n\n    // Add any available extra headers\n    if (typeof settings.extraHeaders === \"object\") {\n        for (var header in settings.extraHeaders) {\n            if (settings.extraHeaders.hasOwnProperty(header)) {\n                xhr.setRequestHeader(header, settings.extraHeaders[header]);\n            }\n        }\n    }\n\n    xhr.onload = function() {\n      // If HTTP status is OK or Created\n      if (xhr.status === 200 || xhr.status === 201) {\n        me.onFileUploadResponse(xhr);\n      } else {\n        me.onFileUploadError(xhr);\n      }\n    };\n    if (settings.beforeFileUpload(xhr) !== false) {\n      xhr.send(formData);\n    }\n    return xhr;\n  };\n\n  /**\n   * Returns if the given file is allowed to handle\n   *\n   * @param {File} clipboard data file\n   */\n  inlineAttachment.prototype.isFileAllowed = function(file) {\n    if (file.kind === 'string') { return false; }\n    if (this.settings.allowedTypes.indexOf('*') === 0){\n      return true;\n    } else {\n      return this.settings.allowedTypes.indexOf(file.type) >= 0;\n    }\n  };\n\n  /**\n   * Handles upload response\n   *\n   * @param  {XMLHttpRequest} xhr\n   * @return {Void}\n   */\n  inlineAttachment.prototype.onFileUploadResponse = function(xhr) {\n    if (this.settings.onFileUploadResponse.call(this, xhr) !== false) {\n      var result = JSON.parse(xhr.responseText),\n        filename = result[this.settings.jsonFieldName];\n\n      if (result && filename) {\n        var newValue;\n        if (typeof this.settings.urlText === 'function') {\n          newValue = this.settings.urlText.call(this, filename, result);\n        } else {\n          newValue = this.settings.urlText.replace(this.filenameTag, filename);\n        }\n        var text = this.editor.getValue().replace(this.lastValue, newValue);\n        this.editor.setValue(text);\n        this.settings.onFileUploaded.call(this, filename);\n      }\n    }\n  };\n\n\n  /**\n   * Called when a file has failed to upload\n   *\n   * @param  {XMLHttpRequest} xhr\n   * @return {Void}\n   */\n  inlineAttachment.prototype.onFileUploadError = function(xhr) {\n    if (this.settings.onFileUploadError.call(this, xhr) !== false) {\n      var text = this.editor.getValue().replace(this.lastValue, \"\");\n      this.editor.setValue(text);\n    }\n  };\n\n  /**\n   * Called when a file has been inserted, either by drop or paste\n   *\n   * @param  {File} file\n   * @return {Void}\n   */\n  inlineAttachment.prototype.onFileInserted = function(file) {\n    if (this.settings.onFileReceived.call(this, file) !== false) {\n      this.lastValue = this.settings.progressText;\n      this.editor.insertValue(this.lastValue);\n    }\n  };\n\n\n  /**\n   * Called when a paste event occured\n   * @param  {Event} e\n   * @return {Boolean} if the event was handled\n   */\n  inlineAttachment.prototype.onPaste = function(e) {\n    var result = false,\n      clipboardData = e.clipboardData,\n      items;\n\n    if (typeof clipboardData === \"object\") {\n      items = clipboardData.items || clipboardData.files || [];\n\n      for (var i = 0; i < items.length; i++) {\n        var item = items[i];\n        if (this.isFileAllowed(item)) {\n          result = true;\n          this.onFileInserted(item.getAsFile());\n          this.uploadFile(item.getAsFile());\n        }\n      }\n    }\n\n    if (result) { e.preventDefault(); }\n\n    return result;\n  };\n\n  /**\n   * Called when a drop event occures\n   * @param  {Event} e\n   * @return {Boolean} if the event was handled\n   */\n  inlineAttachment.prototype.onDrop = function(e) {\n    var result = false;\n    for (var i = 0; i < e.dataTransfer.files.length; i++) {\n      var file = e.dataTransfer.files[i];\n      if (this.isFileAllowed(file)) {\n        result = true;\n        this.onFileInserted(file);\n        this.uploadFile(file);\n      }\n    }\n\n    return result;\n  };\n\n  window.inlineAttachment = inlineAttachment;\n\n})(document, window);\n"
  },
  {
    "path": "resources/assets/js/vendor/jquery.highlight.js",
    "content": "jQuery.fn.highlight=function(c){function e(b,c){var d=0;if(3==b.nodeType){var a=b.data.toUpperCase().indexOf(c),a=a-(b.data.substr(0,a).toUpperCase().length-b.data.substr(0,a).length);if(0<=a){d=document.createElement(\"span\");d.className=\"highlight\";a=b.splitText(a);a.splitText(c.length);var f=a.cloneNode(!0);d.appendChild(f);a.parentNode.replaceChild(d,a);d=1}}else if(1==b.nodeType&&b.childNodes&&!/(script|style)/i.test(b.tagName))for(a=0;a<b.childNodes.length;++a)a+=e(b.childNodes[a],c);return d} return this.length&&c&&c.length?this.each(function(){e(this,c.toUpperCase())}):this};jQuery.fn.removeHighlight=function(){return this.find(\"span.highlight\").each(function(){this.parentNode.firstChild.nodeName;with(this.parentNode)replaceChild(this.firstChild,this),normalize()}).end()};\n"
  },
  {
    "path": "resources/assets/js/vendor/jquery.jscroll.js",
    "content": "/*!\n * jScroll - jQuery Plugin for Infinite Scrolling / Auto-Paging\n * @see @link{http://jscroll.com}\n *\n * @copyright 2011-2017, Philip Klauzinski\n * @license Dual licensed under the MIT and GPL Version 2 licenses.\n * @author Philip Klauzinski (http://webtopian.com)\n * @version 2.3.7\n * @requires jQuery v1.4.3+\n * @preserve\n */\n(function($) {\n\n    'use strict';\n\n    // Define the jscroll namespace and default settings\n    $.jscroll = {\n        defaults: {\n            debug: false,\n            autoTrigger: true,\n            autoTriggerUntil: false,\n            loadingHtml: '<small>Loading...</small>',\n            loadingFunction: false,\n            padding: 0,\n            nextSelector: 'a:last',\n            contentSelector: '',\n            pagingSelector: '',\n            callback: false,\n            maxPages: 0,\n        }\n    };\n\n    // Constructor\n    var jScroll = function($e, options) {\n\n        // Private vars and methods\n        var _data = $e.data('jscroll'),\n            _userOptions = (typeof options === 'function') ? { callback: options } : options,\n            _options = $.extend({}, $.jscroll.defaults, _userOptions, _data || {}),\n            _isWindow = ($e.css('overflow-y') === 'visible'),\n            _$next = $e.find(_options.nextSelector).first(),\n            _$window = $(window),\n            _$body = $('body'),\n            _$scroll = _isWindow ? _$window : $e,\n            _nextHref = $.trim(_$next.attr('href') + ' ' + _options.contentSelector),\n            _maxPages = _options.maxPages,\n            _currentPage = 1,\n\n            // Check if a loading image is defined and preload\n            _preloadImage = function() {\n                var src = $(_options.loadingHtml).filter('img').attr('src');\n                if (src) {\n                    var image = new Image();\n                    image.src = src;\n                }\n            },\n\n            // Wrap inner content, if it isn't already\n            _wrapInnerContent = function() {\n                if (!$e.find('.jscroll-inner').length) {\n                    $e.contents().wrapAll('<div class=\"jscroll-inner\" />');\n                }\n            },\n\n            // Find the next link's parent, or add one, and hide it\n            _nextWrap = function($next) {\n                var $parent;\n                if (_options.pagingSelector) {\n                    $next.closest(_options.pagingSelector).hide();\n                } else {\n                    $parent = $next.parent().not('.jscroll-inner,.jscroll-added').addClass('jscroll-next-parent').hide();\n                    if (!$parent.length) {\n                        $next.wrap('<div class=\"jscroll-next-parent\" />').parent().hide();\n                    }\n                }\n            },\n\n            // Remove the jscroll behavior and data from an element\n            _destroy = function() {\n                return _$scroll.unbind('.jscroll')\n                    .removeData('jscroll')\n                    .find('.jscroll-inner').children().unwrap()\n                    .filter('.jscroll-added').children().unwrap();\n            },\n\n            // Observe the scroll event for when to trigger the next load\n            _observe = function() {\n                if ($e.is(':visible')) {\n                    _wrapInnerContent();\n                    var $inner = $e.find('div.jscroll-inner').first(),\n                        data = $e.data('jscroll'),\n                        borderTopWidth = parseInt($e.css('borderTopWidth'), 10),\n                        borderTopWidthInt = isNaN(borderTopWidth) ? 0 : borderTopWidth,\n                        iContainerTop = parseInt($e.css('paddingTop'), 10) + borderTopWidthInt,\n                        iTopHeight = _isWindow ? _$scroll.scrollTop() : $e.offset().top,\n                        innerTop = $inner.length ? $inner.offset().top : 0,\n                        iTotalHeight = Math.ceil(iTopHeight - innerTop + _$scroll.height() + iContainerTop);\n\n                    if (!data.waiting && iTotalHeight + _options.padding >= $inner.outerHeight()) {\n                        //data.nextHref = $.trim(data.nextHref + ' ' + _options.contentSelector);\n                        _debug('info', 'jScroll:', $inner.outerHeight() - iTotalHeight, 'from bottom. Loading next request...');\n                        if (_maxPages <= 0 ||  _currentPage <= _maxPages) {\n                            return _load();\n                        } else {\n                            $inner.find(_options.pagingSelector).last().show();\n                        }\n                    }\n                }\n            },\n\n            // Check if the href for the next set of content has been set\n            _checkNextHref = function(data) {\n                data = data || $e.data('jscroll');\n                if (!data || !data.nextHref) {\n                    _debug('warn', 'jScroll: nextSelector not found - destroying');\n                    _destroy();\n                    return false;\n                } else {\n                    _setBindings();\n                    return true;\n                }\n            },\n\n            _setBindings = function() {\n                var $next = $e.find(_options.nextSelector).first();\n                if (!$next.length) {\n                    return;\n                }\n                if (_options.autoTrigger && (_options.autoTriggerUntil === false || _options.autoTriggerUntil > 0)) {\n                    _nextWrap($next);\n                     var scrollingBodyHeight = _$body.height() - $e.offset().top,\n                        scrollingHeight = ($e.height() < scrollingBodyHeight) ? $e.height() : scrollingBodyHeight,\n                        windowHeight = ($e.offset().top - _$window.scrollTop() > 0) ? _$window.height() - ($e.offset().top - $(window).scrollTop()) : _$window.height();\n                    if (scrollingHeight <= windowHeight) {\n                        _observe();\n                    }\n                    _$scroll.unbind('.jscroll').bind('scroll.jscroll', function() {\n                        return _observe();\n                    });\n                    if (_options.autoTriggerUntil > 0) {\n                        _options.autoTriggerUntil--;\n                    }\n                } else {\n                    _$scroll.unbind('.jscroll');\n                    $next.bind('click.jscroll', function() {\n                        _nextWrap($next);\n                        _load();\n                        return false;\n                    });\n                }\n            },\n\n            // Load the next set of content, if available\n            _load = function() {\n                var $inner = $e.find('div.jscroll-inner').first(),\n                    data = $e.data('jscroll');\n\n                data.waiting = true;\n                $inner.append('<div class=\"jscroll-added\" />')\n                    .children('.jscroll-added').last()\n                    .html('<div class=\"jscroll-loading\" id=\"jscroll-loading\">' + _options.loadingHtml + '</div>')\n                    .promise()\n                    .done(function(){\n                        if (_options.loadingFunction) {\n                            _options.loadingFunction();\n                        }\n                    });\n\n                return $e.animate({scrollTop: $inner.outerHeight()}, 0, function() {\n                    var nextHref = data.nextHref;\n                    $inner.find('div.jscroll-added').last().load(nextHref, function(r, status) {\n                        if (status === 'error') {\n                            return _destroy();\n                        }\n                        var $next = $(this).find(_options.nextSelector).first();\n                        data.waiting = false;\n                        data.nextHref = $next.attr('href') ? $.trim($next.attr('href') + ' ' + _options.contentSelector) : false;\n                        $('.jscroll-next-parent', $e).remove(); // Remove the previous next link now that we have a new one\n                        _checkNextHref();\n                        if (_options.callback) {\n                            _options.callback.call(this, nextHref);\n                        }\n                        _currentPage++;\n                        _debug('dir', data);\n                    });\n                });\n            },\n\n            // Safe console debug - http://klauzinski.com/javascript/safe-firebug-console-in-javascript\n            _debug = function(m) {\n                if (_options.debug && typeof console === 'object' && (typeof m === 'object' || typeof console[m] === 'function')) {\n                    if (typeof m === 'object') {\n                        var args = [];\n                        for (var sMethod in m) {\n                            if (typeof console[sMethod] === 'function') {\n                                args = (m[sMethod].length) ? m[sMethod] : [m[sMethod]];\n                                console[sMethod].apply(console, args);\n                            } else {\n                                console.log.apply(console, args);\n                            }\n                        }\n                    } else {\n                        console[m].apply(console, Array.prototype.slice.call(arguments, 1));\n                    }\n                }\n            };\n\n        // Initialization\n        $e.data('jscroll', $.extend({}, _data, {initialized: true, waiting: false, nextHref: _nextHref}));\n        _wrapInnerContent();\n        _preloadImage();\n        _setBindings();\n\n        // Expose API methods via the jQuery.jscroll namespace, e.g. $('sel').jscroll.method()\n        $.extend($e.jscroll, {\n            destroy: _destroy\n        });\n        return $e;\n    };\n\n    // Define the jscroll plugin method and loop\n    $.fn.jscroll = function(m) {\n        return this.each(function() {\n            var $this = $(this),\n                data = $this.data('jscroll'), jscroll;\n\n            // Instantiate jScroll on this element if it hasn't been already\n            if (data && data.initialized) {\n                return;\n            }\n            jscroll = new jScroll($this, m);\n        });\n    };\n\n})(jQuery);"
  },
  {
    "path": "resources/assets/js/vendor/jquery.pjax.js",
    "content": "\n/*!\n * Copyright 2012, Chris Wanstrath\n * Released under the MIT License\n * https://github.com/defunkt/jquery-pjax\n */\n\n(function($){\n\n// When called on a container with a selector, fetches the href with\n// ajax into the container or with the data-pjax attribute on the link\n// itself.\n//\n// Tries to make sure the back button and ctrl+click work the way\n// you'd expect.\n//\n// Exported as $.fn.pjax\n//\n// Accepts a jQuery ajax options object that may include these\n// pjax specific options:\n//\n//\n// container - String selector for the element where to place the response body.\n//      push - Whether to pushState the URL. Defaults to true (of course).\n//   replace - Want to use replaceState instead? That's cool.\n//\n// For convenience the second parameter can be either the container or\n// the options object.\n//\n// Returns the jQuery object\nfunction fnPjax(selector, container, options) {\n  options = optionsFor(container, options)\n  return this.on('click.pjax', selector, function(event) {\n    var opts = options\n    if (!opts.container) {\n      opts = $.extend({}, options)\n      opts.container = $(this).attr('data-pjax')\n    }\n    handleClick(event, opts)\n  })\n}\n\n// Public: pjax on click handler\n//\n// Exported as $.pjax.click.\n//\n// event   - \"click\" jQuery.Event\n// options - pjax options\n//\n// Examples\n//\n//   $(document).on('click', 'a', $.pjax.click)\n//   // is the same as\n//   $(document).pjax('a')\n//\n// Returns nothing.\nfunction handleClick(event, container, options) {\n  options = optionsFor(container, options)\n\n  var link = event.currentTarget\n  var $link = $(link)\n\n  if (link.tagName.toUpperCase() !== 'A')\n    throw \"$.fn.pjax or $.pjax.click requires an anchor element\"\n\n  // Middle click, cmd click, and ctrl click should open\n  // links in a new tab as normal.\n  if ( event.which > 1 || event.metaKey || event.ctrlKey || event.shiftKey || event.altKey )\n    return\n\n  // Ignore cross origin links\n  if ( location.protocol !== link.protocol || location.hostname !== link.hostname )\n    return\n\n  // Ignore case when a hash is being tacked on the current URL\n  if ( link.href.indexOf('#') > -1 && stripHash(link) == stripHash(location) )\n    return\n\n  // Ignore event with default prevented\n  if (event.isDefaultPrevented())\n    return\n\n  var defaults = {\n    url: link.href,\n    container: $link.attr('data-pjax'),\n    target: link\n  }\n\n  var opts = $.extend({}, defaults, options)\n  var clickEvent = $.Event('pjax:click')\n  $link.trigger(clickEvent, [opts])\n\n  if (!clickEvent.isDefaultPrevented()) {\n    pjax(opts)\n    event.preventDefault()\n    $link.trigger('pjax:clicked', [opts])\n  }\n}\n\n// Public: pjax on form submit handler\n//\n// Exported as $.pjax.submit\n//\n// event   - \"click\" jQuery.Event\n// options - pjax options\n//\n// Examples\n//\n//  $(document).on('submit', 'form', function(event) {\n//    $.pjax.submit(event, '[data-pjax-container]')\n//  })\n//\n// Returns nothing.\nfunction handleSubmit(event, container, options) {\n  options = optionsFor(container, options)\n\n  var form = event.currentTarget\n  var $form = $(form)\n\n  if (form.tagName.toUpperCase() !== 'FORM')\n    throw \"$.pjax.submit requires a form element\"\n\n  var defaults = {\n    type: ($form.attr('method') || 'GET').toUpperCase(),\n    url: $form.attr('action'),\n    container: $form.attr('data-pjax'),\n    target: form\n  }\n\n  if (defaults.type !== 'GET' && window.FormData !== undefined) {\n    defaults.data = new FormData(form)\n    defaults.processData = false\n    defaults.contentType = false\n  } else {\n    // Can't handle file uploads, exit\n    if ($form.find(':file').length) {\n      return\n    }\n\n    // Fallback to manually serializing the fields\n    defaults.data = $form.serializeArray()\n  }\n\n  pjax($.extend({}, defaults, options))\n\n  event.preventDefault()\n}\n\n// Loads a URL with ajax, puts the response body inside a container,\n// then pushState()'s the loaded URL.\n//\n// Works just like $.ajax in that it accepts a jQuery ajax\n// settings object (with keys like url, type, data, etc).\n//\n// Accepts these extra keys:\n//\n// container - String selector for where to stick the response body.\n//      push - Whether to pushState the URL. Defaults to true (of course).\n//   replace - Want to use replaceState instead? That's cool.\n//\n// Use it just like $.ajax:\n//\n//   var xhr = $.pjax({ url: this.href, container: '#main' })\n//   console.log( xhr.readyState )\n//\n// Returns whatever $.ajax returns.\nfunction pjax(options) {\n  options = $.extend(true, {}, $.ajaxSettings, pjax.defaults, options)\n\n  if ($.isFunction(options.url)) {\n    options.url = options.url()\n  }\n\n  var hash = parseURL(options.url).hash\n\n  var containerType = $.type(options.container)\n  if (containerType !== 'string') {\n    throw \"expected string value for 'container' option; got \" + containerType\n  }\n  var context = options.context = $(options.container)\n  if (!context.length) {\n    throw \"the container selector '\" + options.container + \"' did not match anything\"\n  }\n\n  // We want the browser to maintain two separate internal caches: one\n  // for pjax'd partial page loads and one for normal page loads.\n  // Without adding this secret parameter, some browsers will often\n  // confuse the two.\n  if (!options.data) options.data = {}\n  if ($.isArray(options.data)) {\n    options.data.push({name: '_pjax', value: options.container})\n  } else {\n    options.data._pjax = options.container\n  }\n\n  function fire(type, args, props) {\n    if (!props) props = {}\n    props.relatedTarget = options.target\n    var event = $.Event(type, props)\n    context.trigger(event, args)\n    return !event.isDefaultPrevented()\n  }\n\n  var timeoutTimer\n\n  options.beforeSend = function(xhr, settings) {\n    // No timeout for non-GET requests\n    // Its not safe to request the resource again with a fallback method.\n    if (settings.type !== 'GET') {\n      settings.timeout = 0\n    }\n\n    xhr.setRequestHeader('X-PJAX', 'true')\n    xhr.setRequestHeader('X-PJAX-Container', options.container)\n\n    if (!fire('pjax:beforeSend', [xhr, settings]))\n      return false\n\n    if (settings.timeout > 0) {\n      timeoutTimer = setTimeout(function() {\n        if (fire('pjax:timeout', [xhr, options]))\n          xhr.abort('timeout')\n      }, settings.timeout)\n\n      // Clear timeout setting so jquerys internal timeout isn't invoked\n      settings.timeout = 0\n    }\n\n    var url = parseURL(settings.url)\n    if (hash) url.hash = hash\n    options.requestUrl = stripInternalParams(url)\n  }\n\n  options.complete = function(xhr, textStatus) {\n    if (timeoutTimer)\n      clearTimeout(timeoutTimer)\n\n    fire('pjax:complete', [xhr, textStatus, options])\n\n    fire('pjax:end', [xhr, options])\n  }\n\n  options.error = function(xhr, textStatus, errorThrown) {\n    var container = extractContainer(\"\", xhr, options)\n\n    var allowed = fire('pjax:error', [xhr, textStatus, errorThrown, options])\n    if (options.type == 'GET' && textStatus !== 'abort' && allowed) {\n      locationReplace(container.url)\n    }\n  }\n\n  options.success = function(data, status, xhr) {\n    var previousState = pjax.state\n\n    // If $.pjax.defaults.version is a function, invoke it first.\n    // Otherwise it can be a static string.\n    var currentVersion = typeof $.pjax.defaults.version === 'function' ?\n      $.pjax.defaults.version() :\n      $.pjax.defaults.version\n\n    var latestVersion = xhr.getResponseHeader('X-PJAX-Version')\n\n    var container = extractContainer(data, xhr, options)\n\n    var url = parseURL(container.url)\n    if (hash) {\n      url.hash = hash\n      container.url = url.href\n    }\n\n    // If there is a layout version mismatch, hard load the new url\n    if (currentVersion && latestVersion && currentVersion !== latestVersion) {\n      locationReplace(container.url)\n      return\n    }\n\n    // If the new response is missing a body, hard load the page\n    if (!container.contents) {\n      locationReplace(container.url)\n      return\n    }\n\n    pjax.state = {\n      id: options.id || uniqueId(),\n      url: container.url,\n      title: container.title,\n      container: options.container,\n      fragment: options.fragment,\n      timeout: options.timeout\n    }\n\n    if (options.push || options.replace) {\n      window.history.replaceState(pjax.state, container.title, container.url)\n    }\n\n    // Only blur the focus if the focused element is within the container.\n    var blurFocus = $.contains(context, document.activeElement)\n\n    // Clear out any focused controls before inserting new page contents.\n    if (blurFocus) {\n      try {\n        document.activeElement.blur()\n      } catch (e) { /* ignore */ }\n    }\n\n    if (container.title) document.title = container.title\n\n    fire('pjax:beforeReplace', [container.contents, options], {\n      state: pjax.state,\n      previousState: previousState\n    })\n    context.html(container.contents)\n\n    // FF bug: Won't autofocus fields that are inserted via JS.\n    // This behavior is incorrect. So if theres no current focus, autofocus\n    // the last field.\n    //\n    // http://www.w3.org/html/wg/drafts/html/master/forms.html\n    var autofocusEl = context.find('input[autofocus], textarea[autofocus]').last()[0]\n    if (autofocusEl && document.activeElement !== autofocusEl) {\n      autofocusEl.focus()\n    }\n\n    executeScriptTags(container.scripts)\n\n    var scrollTo = options.scrollTo\n\n    // Ensure browser scrolls to the element referenced by the URL anchor\n    if (hash) {\n      var name = decodeURIComponent(hash.slice(1))\n      var target = document.getElementById(name) || document.getElementsByName(name)[0]\n      if (target) scrollTo = $(target).offset().top\n    }\n\n    if (typeof scrollTo == 'number') $(window).scrollTop(scrollTo)\n\n    fire('pjax:success', [data, status, xhr, options])\n  }\n\n\n  // Initialize pjax.state for the initial page load. Assume we're\n  // using the container and options of the link we're loading for the\n  // back button to the initial page. This ensures good back button\n  // behavior.\n  if (!pjax.state) {\n    pjax.state = {\n      id: uniqueId(),\n      url: window.location.href,\n      title: document.title,\n      container: options.container,\n      fragment: options.fragment,\n      timeout: options.timeout\n    }\n    window.history.replaceState(pjax.state, document.title)\n  }\n\n  // Cancel the current request if we're already pjaxing\n  abortXHR(pjax.xhr)\n\n  pjax.options = options\n  var xhr = pjax.xhr = $.ajax(options)\n\n  if (xhr.readyState > 0) {\n    if (options.push && !options.replace) {\n      // Cache current container element before replacing it\n      cachePush(pjax.state.id, [options.container, cloneContents(context)])\n\n      window.history.pushState(null, \"\", options.requestUrl)\n    }\n\n    fire('pjax:start', [xhr, options])\n    fire('pjax:send', [xhr, options])\n  }\n\n  return pjax.xhr\n}\n\n// Public: Reload current page with pjax.\n//\n// Returns whatever $.pjax returns.\nfunction pjaxReload(container, options) {\n  var defaults = {\n    url: window.location.href,\n    push: false,\n    replace: true,\n    scrollTo: false\n  }\n\n  return pjax($.extend(defaults, optionsFor(container, options)))\n}\n\n// Internal: Hard replace current state with url.\n//\n// Work for around WebKit\n//   https://bugs.webkit.org/show_bug.cgi?id=93506\n//\n// Returns nothing.\nfunction locationReplace(url) {\n  window.history.replaceState(null, \"\", pjax.state.url)\n  window.location.replace(url)\n}\n\n\nvar initialPop = true\nvar initialURL = window.location.href\nvar initialState = window.history.state\n\n// Initialize $.pjax.state if possible\n// Happens when reloading a page and coming forward from a different\n// session history.\nif (initialState && initialState.container) {\n  pjax.state = initialState\n}\n\n// Non-webkit browsers don't fire an initial popstate event\nif ('state' in window.history) {\n  initialPop = false\n}\n\n// popstate handler takes care of the back and forward buttons\n//\n// You probably shouldn't use pjax on pages with other pushState\n// stuff yet.\nfunction onPjaxPopstate(event) {\n\n  // Hitting back or forward should override any pending PJAX request.\n  if (!initialPop) {\n    abortXHR(pjax.xhr)\n  }\n\n  var previousState = pjax.state\n  var state = event.state\n  var direction\n\n  if (state && state.container) {\n    // When coming forward from a separate history session, will get an\n    // initial pop with a state we are already at. Skip reloading the current\n    // page.\n    if (initialPop && initialURL == state.url) return\n\n    if (previousState) {\n      // If popping back to the same state, just skip.\n      // Could be clicking back from hashchange rather than a pushState.\n      if (previousState.id === state.id) return\n\n      // Since state IDs always increase, we can deduce the navigation direction\n      direction = previousState.id < state.id ? 'forward' : 'back'\n    }\n\n    var cache = cacheMapping[state.id] || []\n    var containerSelector = cache[0] || state.container\n    var container = $(containerSelector), contents = cache[1]\n\n    if (container.length) {\n      if (previousState) {\n        // Cache current container before replacement and inform the\n        // cache which direction the history shifted.\n        cachePop(direction, previousState.id, [containerSelector, cloneContents(container)])\n      }\n\n      var popstateEvent = $.Event('pjax:popstate', {\n        state: state,\n        direction: direction\n      })\n      container.trigger(popstateEvent)\n\n      var options = {\n        id: state.id,\n        url: state.url,\n        container: containerSelector,\n        push: false,\n        fragment: state.fragment,\n        timeout: state.timeout,\n        scrollTo: false\n      }\n\n      if (contents) {\n        container.trigger('pjax:start', [null, options])\n\n        pjax.state = state\n        if (state.title) document.title = state.title\n        var beforeReplaceEvent = $.Event('pjax:beforeReplace', {\n          state: state,\n          previousState: previousState\n        })\n        container.trigger(beforeReplaceEvent, [contents, options])\n        container.html(contents)\n\n        container.trigger('pjax:end', [null, options])\n      } else {\n        pjax(options)\n      }\n\n      // Force reflow/relayout before the browser tries to restore the\n      // scroll position.\n      container[0].offsetHeight // eslint-disable-line no-unused-expressions\n    } else {\n      locationReplace(location.href)\n    }\n  }\n  initialPop = false\n}\n\n// Fallback version of main pjax function for browsers that don't\n// support pushState.\n//\n// Returns nothing since it retriggers a hard form submission.\nfunction fallbackPjax(options) {\n  var url = $.isFunction(options.url) ? options.url() : options.url,\n      method = options.type ? options.type.toUpperCase() : 'GET'\n\n  var form = $('<form>', {\n    method: method === 'GET' ? 'GET' : 'POST',\n    action: url,\n    style: 'display:none'\n  })\n\n  if (method !== 'GET' && method !== 'POST') {\n    form.append($('<input>', {\n      type: 'hidden',\n      name: '_method',\n      value: method.toLowerCase()\n    }))\n  }\n\n  var data = options.data\n  if (typeof data === 'string') {\n    $.each(data.split('&'), function(index, value) {\n      var pair = value.split('=')\n      form.append($('<input>', {type: 'hidden', name: pair[0], value: pair[1]}))\n    })\n  } else if ($.isArray(data)) {\n    $.each(data, function(index, value) {\n      form.append($('<input>', {type: 'hidden', name: value.name, value: value.value}))\n    })\n  } else if (typeof data === 'object') {\n    var key\n    for (key in data)\n      form.append($('<input>', {type: 'hidden', name: key, value: data[key]}))\n  }\n\n  $(document.body).append(form)\n  form.submit()\n}\n\n// Internal: Abort an XmlHttpRequest if it hasn't been completed,\n// also removing its event handlers.\nfunction abortXHR(xhr) {\n  if ( xhr && xhr.readyState < 4) {\n    xhr.onreadystatechange = $.noop\n    xhr.abort()\n  }\n}\n\n// Internal: Generate unique id for state object.\n//\n// Use a timestamp instead of a counter since ids should still be\n// unique across page loads.\n//\n// Returns Number.\nfunction uniqueId() {\n  return (new Date).getTime()\n}\n\nfunction cloneContents(container) {\n  var cloned = container.clone()\n  // Unmark script tags as already being eval'd so they can get executed again\n  // when restored from cache. HAXX: Uses jQuery internal method.\n  cloned.find('script').each(function(){\n    if (!this.src) $._data(this, 'globalEval', false)\n  })\n  return cloned.contents()\n}\n\n// Internal: Strip internal query params from parsed URL.\n//\n// Returns sanitized url.href String.\nfunction stripInternalParams(url) {\n  url.search = url.search.replace(/([?&])(_pjax|_)=[^&]*/g, '').replace(/^&/, '')\n  return url.href.replace(/\\?($|#)/, '$1')\n}\n\n// Internal: Parse URL components and returns a Locationish object.\n//\n// url - String URL\n//\n// Returns HTMLAnchorElement that acts like Location.\nfunction parseURL(url) {\n  var a = document.createElement('a')\n  a.href = url\n  return a\n}\n\n// Internal: Return the `href` component of given URL object with the hash\n// portion removed.\n//\n// location - Location or HTMLAnchorElement\n//\n// Returns String\nfunction stripHash(location) {\n  return location.href.replace(/#.*/, '')\n}\n\n// Internal: Build options Object for arguments.\n//\n// For convenience the first parameter can be either the container or\n// the options object.\n//\n// Examples\n//\n//   optionsFor('#container')\n//   // => {container: '#container'}\n//\n//   optionsFor('#container', {push: true})\n//   // => {container: '#container', push: true}\n//\n//   optionsFor({container: '#container', push: true})\n//   // => {container: '#container', push: true}\n//\n// Returns options Object.\nfunction optionsFor(container, options) {\n  if (container && options) {\n    options = $.extend({}, options)\n    options.container = container\n    return options\n  } else if ($.isPlainObject(container)) {\n    return container\n  } else {\n    return {container: container}\n  }\n}\n\n// Internal: Filter and find all elements matching the selector.\n//\n// Where $.fn.find only matches descendants, findAll will test all the\n// top level elements in the jQuery object as well.\n//\n// elems    - jQuery object of Elements\n// selector - String selector to match\n//\n// Returns a jQuery object.\nfunction findAll(elems, selector) {\n  return elems.filter(selector).add(elems.find(selector))\n}\n\nfunction parseHTML(html) {\n  return $.parseHTML(html, document, true)\n}\n\n// Internal: Extracts container and metadata from response.\n//\n// 1. Extracts X-PJAX-URL header if set\n// 2. Extracts inline <title> tags\n// 3. Builds response Element and extracts fragment if set\n//\n// data    - String response data\n// xhr     - XHR response\n// options - pjax options Object\n//\n// Returns an Object with url, title, and contents keys.\nfunction extractContainer(data, xhr, options) {\n  var obj = {}, fullDocument = /<html/i.test(data)\n\n  // Prefer X-PJAX-URL header if it was set, otherwise fallback to\n  // using the original requested url.\n  var serverUrl = xhr.getResponseHeader('X-PJAX-URL')\n  obj.url = serverUrl ? stripInternalParams(parseURL(serverUrl)) : options.requestUrl\n\n  var $head, $body\n  // Attempt to parse response html into elements\n  if (fullDocument) {\n    $body = $(parseHTML(data.match(/<body[^>]*>([\\s\\S.]*)<\\/body>/i)[0]))\n    var head = data.match(/<head[^>]*>([\\s\\S.]*)<\\/head>/i)\n    $head = head != null ? $(parseHTML(head[0])) : $body\n  } else {\n    $head = $body = $(parseHTML(data))\n  }\n\n  // If response data is empty, return fast\n  if ($body.length === 0)\n    return obj\n\n  // If there's a <title> tag in the header, use it as\n  // the page's title.\n  obj.title = findAll($head, 'title').last().text()\n\n  if (options.fragment) {\n    var $fragment = $body\n    // If they specified a fragment, look for it in the response\n    // and pull it out.\n    if (options.fragment !== 'body') {\n      $fragment = findAll($fragment, options.fragment).first()\n    }\n\n    if ($fragment.length) {\n      obj.contents = options.fragment === 'body' ? $fragment : $fragment.contents()\n\n      // If there's no title, look for data-title and title attributes\n      // on the fragment\n      if (!obj.title)\n        obj.title = $fragment.attr('title') || $fragment.data('title')\n    }\n\n  } else if (!fullDocument) {\n    obj.contents = $body\n  }\n\n  // Clean up any <title> tags\n  if (obj.contents) {\n    // Remove any parent title elements\n    obj.contents = obj.contents.not(function() { return $(this).is('title') })\n\n    // Then scrub any titles from their descendants\n    obj.contents.find('title').remove()\n\n    // Gather all script[src] elements\n    obj.scripts = findAll(obj.contents, 'script[src]').remove()\n    obj.contents = obj.contents.not(obj.scripts)\n  }\n\n  // Trim any whitespace off the title\n  if (obj.title) obj.title = $.trim(obj.title)\n\n  return obj\n}\n\n// Load an execute scripts using standard script request.\n//\n// Avoids jQuery's traditional $.getScript which does a XHR request and\n// globalEval.\n//\n// scripts - jQuery object of script Elements\n//\n// Returns nothing.\nfunction executeScriptTags(scripts) {\n  if (!scripts) return\n\n  var existingScripts = $('script[src]')\n\n  scripts.each(function() {\n    var src = this.src\n    var matchedScripts = existingScripts.filter(function() {\n      return this.src === src\n    })\n    if (matchedScripts.length) return\n\n    var script = document.createElement('script')\n    var type = $(this).attr('type')\n    if (type) script.type = type\n    script.src = $(this).attr('src')\n    document.head.appendChild(script)\n  })\n}\n\n// Internal: History DOM caching class.\nvar cacheMapping      = {}\nvar cacheForwardStack = []\nvar cacheBackStack    = []\n\n// Push previous state id and container contents into the history\n// cache. Should be called in conjunction with `pushState` to save the\n// previous container contents.\n//\n// id    - State ID Number\n// value - DOM Element to cache\n//\n// Returns nothing.\nfunction cachePush(id, value) {\n  cacheMapping[id] = value\n  cacheBackStack.push(id)\n\n  // Remove all entries in forward history stack after pushing a new page.\n  trimCacheStack(cacheForwardStack, 0)\n\n  // Trim back history stack to max cache length.\n  trimCacheStack(cacheBackStack, pjax.defaults.maxCacheLength)\n}\n\n// Shifts cache from directional history cache. Should be\n// called on `popstate` with the previous state id and container\n// contents.\n//\n// direction - \"forward\" or \"back\" String\n// id        - State ID Number\n// value     - DOM Element to cache\n//\n// Returns nothing.\nfunction cachePop(direction, id, value) {\n  var pushStack, popStack\n  cacheMapping[id] = value\n\n  if (direction === 'forward') {\n    pushStack = cacheBackStack\n    popStack  = cacheForwardStack\n  } else {\n    pushStack = cacheForwardStack\n    popStack  = cacheBackStack\n  }\n\n  pushStack.push(id)\n  id = popStack.pop()\n  if (id) delete cacheMapping[id]\n\n  // Trim whichever stack we just pushed to to max cache length.\n  trimCacheStack(pushStack, pjax.defaults.maxCacheLength)\n}\n\n// Trim a cache stack (either cacheBackStack or cacheForwardStack) to be no\n// longer than the specified length, deleting cached DOM elements as necessary.\n//\n// stack  - Array of state IDs\n// length - Maximum length to trim to\n//\n// Returns nothing.\nfunction trimCacheStack(stack, length) {\n  while (stack.length > length)\n    delete cacheMapping[stack.shift()]\n}\n\n// Public: Find version identifier for the initial page load.\n//\n// Returns String version or undefined.\nfunction findVersion() {\n  return $('meta').filter(function() {\n    var name = $(this).attr('http-equiv')\n    return name && name.toUpperCase() === 'X-PJAX-VERSION'\n  }).attr('content')\n}\n\n// Install pjax functions on $.pjax to enable pushState behavior.\n//\n// Does nothing if already enabled.\n//\n// Examples\n//\n//     $.pjax.enable()\n//\n// Returns nothing.\nfunction enable() {\n  $.fn.pjax = fnPjax\n  $.pjax = pjax\n  $.pjax.enable = $.noop\n  $.pjax.disable = disable\n  $.pjax.click = handleClick\n  $.pjax.submit = handleSubmit\n  $.pjax.reload = pjaxReload\n  $.pjax.defaults = {\n    timeout: 650,\n    push: true,\n    replace: false,\n    type: 'GET',\n    dataType: 'html',\n    scrollTo: 0,\n    maxCacheLength: 20,\n    version: findVersion\n  }\n  $(window).on('popstate.pjax', onPjaxPopstate)\n}\n\n// Disable pushState behavior.\n//\n// This is the case when a browser doesn't support pushState. It is\n// sometimes useful to disable pushState for debugging on a modern\n// browser.\n//\n// Examples\n//\n//     $.pjax.disable()\n//\n// Returns nothing.\nfunction disable() {\n  $.fn.pjax = function() { return this }\n  $.pjax = fallbackPjax\n  $.pjax.enable = enable\n  $.pjax.disable = $.noop\n  $.pjax.click = $.noop\n  $.pjax.submit = $.noop\n  $.pjax.reload = function() { window.location.reload() }\n\n  $(window).off('popstate.pjax', onPjaxPopstate)\n}\n\n\n// Add the state property to jQuery's event object so we can use it in\n// $(window).bind('popstate')\nif ($.event.props && $.inArray('state', $.event.props) < 0) {\n  $.event.props.push('state')\n} else if (!('state' in $.Event.prototype)) {\n  $.event.addProp('state')\n}\n\n// Is pjax supported by this browser?\n$.support.pjax =\n  window.history && window.history.pushState && window.history.replaceState &&\n  // pushState isn't reliable on iOS until 5.\n  !navigator.userAgent.match(/((iPod|iPhone|iPad).+\\bOS\\s+[1-4]\\D|WebApps\\/.+CFNetwork)/)\n\nif ($.support.pjax) {\n  enable()\n} else {\n  disable()\n}\n\n})(jQuery)\n"
  },
  {
    "path": "resources/assets/js/vendor/jquery.scroll.up.js",
    "content": "(function ($, window, document) {\n    'use strict';\n\n    // Main function\n    $.fn.scrollUp = function (options) {\n\n        // Ensure that only one scrollUp exists\n        if (!$.data(document.body, 'scrollUp')) {\n            $.data(document.body, 'scrollUp', true);\n            $.fn.scrollUp.init(options);\n        }\n    };\n\n    // Init\n    $.fn.scrollUp.init = function (options) {\n\n        // Define vars\n        var o = $.fn.scrollUp.settings = $.extend({}, $.fn.scrollUp.defaults, options),\n            triggerVisible = false,\n            animIn, animOut, animSpeed, scrollDis, scrollEvent, scrollTarget, $self;\n\n        // Create element\n        if (o.scrollTrigger) {\n            $self = $(o.scrollTrigger);\n        } else {\n            $self = $('<a/>', {\n                id: o.scrollName,\n                href: '#top'\n            });\n        }\n\n        // Set scrollTitle if there is one\n        if (o.scrollTitle) {\n            $self.attr('title', o.scrollTitle);\n        }\n\n        $self.appendTo('body');\n\n        // If not using an image display text\n        if (!(o.scrollImg || o.scrollTrigger)) {\n            $self.html(o.scrollText);\n        }\n\n        // Minimum CSS to make the magic happen\n        $self.css({\n            display: 'none',\n            position: 'fixed',\n            zIndex: o.zIndex\n        });\n\n        // Active point overlay\n        if (o.activeOverlay) {\n            $('<div/>', {\n                id: o.scrollName + '-active'\n            }).css({\n                position: 'absolute',\n                'top': o.scrollDistance + 'px',\n                width: '100%',\n                borderTop: '1px dotted' + o.activeOverlay,\n                zIndex: o.zIndex\n            }).appendTo('body');\n        }\n\n        // Switch animation type\n        switch (o.animation) {\n            case 'fade':\n                animIn = 'fadeIn';\n                animOut = 'fadeOut';\n                animSpeed = o.animationSpeed;\n                break;\n\n            case 'slide':\n                animIn = 'slideDown';\n                animOut = 'slideUp';\n                animSpeed = o.animationSpeed;\n                break;\n\n            default:\n                animIn = 'show';\n                animOut = 'hide';\n                animSpeed = 0;\n        }\n\n        // If from top or bottom\n        if (o.scrollFrom === 'top') {\n            scrollDis = o.scrollDistance;\n        } else {\n            scrollDis = $(document).height() - $(window).height() - o.scrollDistance;\n        }\n\n        // Scroll function\n        scrollEvent = $(window).scroll(function () {\n            if ($(window).scrollTop() > scrollDis) {\n                if (!triggerVisible) {\n                    $self[animIn](animSpeed);\n                    triggerVisible = true;\n                }\n            } else {\n                if (triggerVisible) {\n                    $self[animOut](animSpeed);\n                    triggerVisible = false;\n                }\n            }\n        });\n\n        // how to call it (with a 1500ms timeout):\n        $(window).scrollEnd(function(){\n            $self[animOut](animSpeed);\n            triggerVisible = false;\n        }, 1200);\n\n        if (o.scrollTarget) {\n            if (typeof o.scrollTarget === 'number') {\n                scrollTarget = o.scrollTarget;\n            } else if (typeof o.scrollTarget === 'string') {\n                scrollTarget = Math.floor($(o.scrollTarget).offset().top);\n            }\n        } else {\n            scrollTarget = 0;\n        }\n\n        // To the top\n        $self.click(function (e) {\n            e.preventDefault();\n\n            $('html, body').animate({\n                scrollTop: scrollTarget\n            }, o.scrollSpeed, o.easingType);\n        });\n    };\n\n    // Defaults\n    $.fn.scrollUp.defaults = {\n        scrollName: 'scrollUp',      // Element ID\n        scrollDistance: 300,         // Distance from top/bottom before showing element (px)\n        scrollFrom: 'top',           // 'top' or 'bottom'\n        scrollSpeed: 300,            // Speed back to top (ms)\n        easingType: 'linear',        // Scroll to top easing (see http://easings.net/)\n        animation: 'fade',           // Fade, slide, none\n        animationSpeed: 200,         // Animation in speed (ms)\n        scrollTrigger: false,        // Set a custom triggering element. Can be an HTML string or jQuery object\n        scrollTarget: false,         // Set a custom target element for scrolling to. Can be element or number\n        scrollText: 'Scroll to top', // Text for element, can contain HTML\n        scrollTitle: false,          // Set a custom <a> title if required. Defaults to scrollText\n        scrollImg: false,            // Set true to use image\n        activeOverlay: false,        // Set CSS color to display scrollUp active point, e.g '#00FFFF'\n        zIndex: 2147483647           // Z-Index for the overlay\n    };\n\n    // Destroy scrollUp plugin and clean all modifications to the DOM\n    $.fn.scrollUp.destroy = function (scrollEvent) {\n        $.removeData(document.body, 'scrollUp');\n        $('#' + $.fn.scrollUp.settings.scrollName).remove();\n        $('#' + $.fn.scrollUp.settings.scrollName + '-active').remove();\n\n        // If 1.7 or above use the new .off()\n        if ($.fn.jquery.split('.')[1] >= 7) {\n            $(window).off('scroll', scrollEvent);\n\n            // Else use the old .unbind()\n        } else {\n            $(window).unbind('scroll', scrollEvent);\n        }\n    };\n\n    $.scrollUp = $.fn.scrollUp;\n\n})(jQuery, window, document);\n\n// extension:\n$.fn.scrollEnd = function(callback, timeout) {\n    $(this).scroll(function(){\n        var $this = $(this);\n        if ($this.data('scrollTimeout')) {\n            clearTimeout($this.data('scrollTimeout'));\n        }\n        $this.data('scrollTimeout', setTimeout(callback,timeout));\n    });\n};\n"
  },
  {
    "path": "resources/assets/js/vendor/jquery.textcomplete.js",
    "content": "/*!\n * jQuery.textcomplete.js\n *\n * Repositiory: https://github.com/yuku-t/jquery-textcomplete\n * License:     MIT\n * Author:      Yuku Takahashi\n */\n\n;(function ($) {\n\n  'use strict';\n\n  /**\n   * Exclusive execution control utility.\n   */\n  var lock = function (func) {\n    var free, locked, queuedArgsToReplay;\n    free = function () { locked = false; };\n    return function () {\n      var args = toArray(arguments);\n      if (locked) {\n        // Keep a copy of this argument list to replay later.\n        // OK to overwrite a previous value because we only replay the last one.\n        queuedArgsToReplay = args;\n        return;\n      }\n      locked = true;\n      var that = this;\n      args.unshift(function replayOrFree() {\n        if (queuedArgsToReplay) {\n          // Other request(s) arrived while we were locked.\n          // Now that the lock is becoming available, replay\n          // the latest such request, then call back here to\n          // unlock (or replay another request that arrived\n          // while this one was in flight).\n          var replayArgs = queuedArgsToReplay;\n          queuedArgsToReplay = undefined;\n          replayArgs.unshift(replayOrFree);\n          func.apply(that, replayArgs);\n        } else {\n          locked = false;\n        }\n      });\n      func.apply(this, args);\n    };\n  };\n\n  /**\n   * Convert arguments into a real array.\n   */\n  var toArray = function (args) {\n    var result;\n    result = Array.prototype.slice.call(args);\n    return result;\n  };\n\n  /**\n   * Get the styles of any element from property names.\n   */\n  var getStyles = (function () {\n    var color;\n    color = $('<div></div>').css(['color']).color;\n    if (typeof color !== 'undefined') {\n      return function ($el, properties) {\n        return $el.css(properties);\n      };\n    } else {  // for jQuery 1.8 or below\n      return function ($el, properties) {\n        var styles;\n        styles = {};\n        $.each(properties, function (i, property) {\n          styles[property] = $el.css(property);\n        });\n        return styles;\n      };\n    }\n  })();\n\n  /**\n   * Default template function.\n   */\n  var identity = function (obj) { return obj; };\n\n  /**\n   * Memoize a search function.\n   */\n  var memoize = function (func) {\n    var memo = {};\n    return function (term, callback) {\n      if (memo[term]) {\n        callback(memo[term]);\n      } else {\n        func.call(this, term, function (data) {\n          memo[term] = (memo[term] || []).concat(data);\n          callback.apply(null, arguments);\n        });\n      }\n    };\n  };\n\n  /**\n   * Determine if the array contains a given value.\n   */\n  var include = function (array, value) {\n    var i, l;\n    if (array.indexOf) return array.indexOf(value) != -1;\n    for (i = 0, l = array.length; i < l; i++) {\n      if (array[i] === value) return true;\n    }\n    return false;\n  };\n\n  /**\n   * Textarea manager class.\n   */\n  var Completer = (function () {\n    var html, css, $baseList, _id;\n\n    html = {\n      list: '<ul class=\"dropdown-menu\"></ul>'\n    };\n    css = {\n      // Removed the 'top' property to support the placement: 'top' option\n      list: {\n        position: 'absolute',\n        left: 0,\n        zIndex: '100',\n        display: 'none'\n      }\n    };\n    $baseList = $(html.list).css(css.list);\n    _id = 0;\n\n    function Completer($el, option) {\n      var focus;\n      this.el = $el.get(0);  // textarea element\n      focus = this.el === document.activeElement;\n      this.$el = $el;\n      this.id = 'textComplete' + _id++;\n      this.strategies = [];\n      this.option = option;\n      if (focus) {\n        this.initialize();\n        this.$el.focus();\n      } else {\n        this.$el.one('focus.textComplete', $.proxy(this.initialize, this));\n      }\n    }\n\n    /**\n     * Completer's public methods\n     */\n    $.extend(Completer.prototype, {\n\n      /**\n       * Prepare ListView and bind events.\n       */\n      initialize: function () {\n        var $list, globalEvents, appendTo, height;\n        $list = $baseList.clone();\n        this.listView = new ListView($list, this);\n        this.$el.on({\n          'keyup.textComplete': $.proxy(this.onKeyup, this),\n          'keydown.textComplete': $.proxy(this.listView.onKeydown, this.listView)\n        });\n        appendTo = this.option.appendTo;\n        if (appendTo) {\n          // Append ListView to specified element.\n          this.listView.appendTo(appendTo instanceof $ ? appendTo : $(appendTo));\n        } else {\n          this.listView.appendTo($('body'));\n        }\n        height = this.option.height;\n        if (height) {\n          $list.css(\"overflow-y\", \"auto\");\n          $list.height(height);\n        }\n        globalEvents = {};\n        globalEvents['click.' + this.id] = $.proxy(this.onClickDocument, this);\n        globalEvents['keyup.' + this.id] = $.proxy(this.onKeyupDocument, this);\n        $(document).on(globalEvents);\n      },\n\n      /**\n       * Register strategies to the completer.\n       */\n      register: function (strategies) {\n        this.strategies = this.strategies.concat(strategies);\n      },\n\n      /**\n       * Show autocomplete list next to the caret.\n       */\n      renderList: function (data) {\n        if (this.clearAtNext) {\n          this.listView.clear();\n          this.clearAtNext = false;\n        }\n        if (data.length) {\n          this.listView.strategy = this.strategy;\n          if (!this.listView.shown) {\n            this.listView\n                .setPosition(this.getCaretPosition())\n                .clear()\n                .activate();\n          }\n          data = data.slice(0, this.strategy.maxCount);\n          this.listView.render(data);\n        }\n\n        if (!this.listView.data.length && this.listView.shown) {\n          this.listView.deactivate();\n        }\n      },\n\n      searchCallbackFactory: function (free) {\n        var self = this;\n        return function (data, keep) {\n          self.renderList(data);\n          if (!keep) {\n            // This is the last callback for this search.\n            free();\n            self.clearAtNext = true;\n          }\n        };\n      },\n\n      /**\n       * Keyup event handler.\n       */\n      onKeyup: function (e) {\n        if (this.skipSearch(e)) { return; }\n        this.trigger(null, true);\n      },\n\n      /**\n       * Public interface for invoking textcomplete.\n       */\n      trigger: function (text, suppress) {\n        var searchQuery, term;\n        text || (text = this.getTextFromHeadToCaret());\n        searchQuery = this.extractSearchQuery(text);\n        if (searchQuery.length) {\n          term = searchQuery[1];\n          if (suppress && this.term === term) {\n            return; // Ignore shift-key or something.\n          }\n          this.term = term;\n          this.search(searchQuery);\n        } else {\n          this.term = null;\n          this.listView.deactivate();\n        }\n      },\n\n      /**\n       * Suppress searching if it returns true.\n       */\n      skipSearch: function (e) {\n        switch (e.keyCode) {\n          case 40: // DOWN\n          case 38: // UP\n            return true;\n        }\n        if (e.ctrlKey) switch (e.keyCode) {\n          case 78: // Ctrl-N\n          case 80: // Ctrl-P\n            return true;\n        }\n      },\n\n      onSelect: function (value) {\n        var pre, post, newSubStr, sel, range, selection, remainder;\n        pre = this.getTextFromHeadToCaret();\n        remainder = pre.length;\n\n        if (this.el.isContentEditable) {\n          sel = window.getSelection();\n          range = sel.getRangeAt(0);\n          selection = range.cloneRange();\n          selection.selectNodeContents(range.startContainer);\n          var content = selection.toString();\n          post = content.substring(range.startOffset);\n        } else {\n          post = this.el.value.substring(this.el.selectionEnd);\n        }\n\n        newSubStr = this.strategy.replace(value);\n\n        if ($.isArray(newSubStr)) {\n          post = newSubStr[1] + post;\n          newSubStr = newSubStr[0];\n        }\n\n        pre = pre.replace(this.strategy.match, newSubStr);\n\n        if (this.el.isContentEditable) {\n          range.selectNodeContents(range.startContainer);\n          range.deleteContents();\n          var node = document.createTextNode(pre + post);\n          range.insertNode(node);\n          range.setStart(node, pre.length);\n          range.collapse(true);\n          sel.removeAllRanges();\n          sel.addRange(range);\n        } else {\n          this.$el.val(pre + post);\n          this.el.selectionStart = this.el.selectionEnd = pre.length;\n        }\n\n        this.$el.trigger('change')\n                .trigger('textComplete:select', value);\n        this.el.focus();\n      },\n\n      /**\n       * Global click event handler.\n       */\n      onClickDocument: function (e) {\n        if (e.originalEvent && !e.originalEvent.keepTextCompleteDropdown) {\n          this.listView.deactivate();\n        }\n      },\n\n      /**\n       * Global keyup event handler.\n       */\n      onKeyupDocument: function (e) {\n        if (this.listView.shown && e.keyCode === 27) { // ESC\n          this.listView.deactivate();\n          this.$el.focus();\n        }\n      },\n\n      /**\n       * Remove all event handlers.\n       */\n      destroy: function () {\n        this.$el.off('.textComplete');\n        $(document).off('.' + this.id);\n        if (this.listView) { this.listView.destroy(); }\n        this.$el.removeData('textComplete');\n        this.$el = null;\n      },\n\n      // Helper methods\n      // ==============\n\n      getCaretPosition: function () {\n        var caretPosition, textareaOffset;\n        caretPosition = this.getCaretRelativePosition();\n        textareaOffset = this.$el.offset();\n        caretPosition.top += textareaOffset.top;\n        caretPosition.left += textareaOffset.left;\n        return caretPosition;\n      },\n\n      /**\n       * Returns caret's relative coordinates from textarea's left top corner.\n       */\n      getCaretRelativePosition: function () {\n        var properties, css, $div, $span, position, dir, scrollbar, range, node, $node;\n        if (!this.el.isContentEditable) {\n          // Browser native API does not provide the way to know the position of\n          // caret in pixels, so that here we use a kind of hack to accomplish\n          // the aim. First of all it puts a div element and completely copies\n          // the textarea's style to the element, then it inserts the text and a\n          // span element into the textarea.\n          // Consequently, the span element's position is the thing what we want.\n          properties = ['border-width', 'font-family', 'font-size', 'font-style',\n            'font-variant', 'font-weight', 'height', 'letter-spacing',\n            'word-spacing', 'line-height', 'text-decoration', 'text-align',\n            'width', 'padding-top', 'padding-right', 'padding-bottom',\n            'padding-left', 'margin-top', 'margin-right', 'margin-bottom',\n            'margin-left', 'border-style', 'box-sizing'\n          ];\n          scrollbar = this.$el[0].scrollHeight > this.$el[0].offsetHeight;\n          css = $.extend({\n            position: 'absolute',\n            overflow: scrollbar ? 'scroll' : 'auto',\n            'white-space': 'pre-wrap',\n            top: 0,\n            left: -9999,\n            direction: dir\n          }, getStyles(this.$el, properties));\n\n          $div = $('<div></div>').css(css).text(this.getTextFromHeadToCaret());\n          $span = $('<span></span>').text('.').appendTo($div);\n          this.$el.before($div);\n          position = $span.position();\n          position.top += $span.height() - this.$el.scrollTop();\n          $div.remove();\n        } else {\n          range = window.getSelection().getRangeAt(0).cloneRange();\n          node = document.createElement('span');\n          range.insertNode(node);\n          range.selectNodeContents(node);\n          range.deleteContents();\n          $node = $(node);\n          position = $node.offset();\n          position.left -= this.$el.offset().left;\n          position.top += $node.height() - this.$el.offset().top;\n        }\n        dir = this.$el.attr('dir') || this.$el.css('direction');\n        if (dir === 'rtl') { position.left -= this.listView.$el.width(); }\n        return position;\n      },\n\n      getTextFromHeadToCaret: function () {\n        var text, selectionEnd, range;\n        if (this.el.isContentEditable) {\n          if (window.getSelection) {\n            // IE9+ and non-IE\n            var range = window.getSelection().getRangeAt(0);\n            var selection = range.cloneRange();\n            selection.selectNodeContents(range.startContainer);\n            text = selection.toString().substring(0, range.startOffset);\n          }\n        } else {\n          selectionEnd = this.el.selectionEnd;\n          if (typeof selectionEnd === 'number') {\n            text = this.el.value.substring(0, selectionEnd);\n          } else if (document.selection) {\n            range = this.el.createTextRange();\n            range.moveStart('character', 0);\n            range.moveEnd('textedit');\n            text = range.text;\n          }\n        }\n        return text;\n      },\n\n      /**\n       * Parse the value of textarea and extract search query.\n       */\n      extractSearchQuery: function (text) {\n        var i, l, strategy, match;\n        for (i = 0, l = this.strategies.length; i < l; i++) {\n          strategy = this.strategies[i];\n          match = text.match(strategy.match);\n          if (match) { return [strategy, match[strategy.index]]; }\n        }\n        return [];\n      },\n\n      search: lock(function (free, searchQuery) {\n        var term;\n        this.strategy = searchQuery[0];\n        term = searchQuery[1];\n        this.strategy.search(term, this.searchCallbackFactory(free));\n      })\n    });\n\n    return Completer;\n  })();\n\n  /**\n   * Dropdown menu manager class.\n   */\n  var ListView = (function () {\n\n    function ListView($el, completer) {\n      this.data = [];\n      this.$el = $el;\n      this.index = 0;\n      this.completer = completer;\n      if (completer.option.listPosition) {\n        this.setPosition = completer.option.listPosition;\n      }\n\n      this.$el.on('mousedown.textComplete', 'li.textcomplete-item',\n                  $.proxy(this.onClick, this));\n      this.$el.on('mouseover.textComplete', 'li.textcomplete-item',\n                  $.proxy(this.onMouseover, this));\n    }\n\n    $.extend(ListView.prototype, {\n      shown: false,\n\n      render: function (data) {\n        var html, i, l, index, val, str;\n\n        html = '';\n\n        if(this.strategy.header) {\n          if ($.isFunction(this.strategy.header)) {\n            str = this.strategy.header(data);\n          } else {\n            str = this.strategy.header;\n          }\n          html += '<li class=\"textcomplete-header\">' + str + '</li>';\n        }\n\n        for (i = 0, l = data.length; i < l; i++) {\n          val = data[i];\n          if (include(this.data, val)) continue;\n          index = this.data.length;\n          this.data.push(val);\n          html += '<li class=\"textcomplete-item\" data-index=\"' + index + '\"><a>';\n          html +=   this.strategy.template(val);\n          html += '</a></li>';\n          if (this.data.length === this.strategy.maxCount) break;\n        }\n\n        if(this.strategy.footer) {\n          if ($.isFunction(this.strategy.footer)) {\n            str = this.strategy.footer(data);\n          } else {\n            str = this.strategy.footer;\n          }\n          html += '<li class=\"textcomplete-footer\">' + str + '</li>';\n        }\n\n        this.$el.append(html);\n        if (!this.data.length) {\n          this.deactivate();\n        } else {\n          this.activateIndexedItem();\n          this.setScroll();\n        }\n      },\n\n      clear: function () {\n        this.data = [];\n        this.$el.html('');\n        this.index = 0;\n        return this;\n      },\n\n      activateIndexedItem: function () {\n        this.$el.find('.active').removeClass('active');\n        this.getActiveItem().addClass('active');\n      },\n\n      getActiveItem: function () {\n        return $(this.$el.children('.textcomplete-item').get(this.index));\n      },\n\n      activate: function () {\n        if (!this.shown) {\n          this.$el.show();\n          this.completer.$el.trigger('textComplete:show');\n          this.shown = true;\n        }\n        return this;\n      },\n\n      deactivate: function () {\n        if (this.shown) {\n          this.$el.hide();\n          this.completer.$el.trigger('textComplete:hide');\n          this.shown = false;\n          this.data = [];\n          this.index = null;\n        }\n        return this;\n      },\n\n      setPosition: function (position) {\n        var fontSize;\n        // If the strategy has the 'placement' option set to 'top', move the\n        // position above the element\n        if(this.strategy.placement.indexOf('top') > -1) {\n          // Move it to be in line with the match character\n          fontSize = parseInt(this.$el.css('font-size'));\n          // Overwrite the position object to set the 'bottom' property instead of the top.\n          position = {\n            top: 'auto',\n            bottom: this.$el.parent().height() - position.top + fontSize,\n            left: position.left\n          };\n        } else {\n          // Overwrite 'bottom' property because once `placement: 'top'`\n          // strategy is shown, $el keeps the property.\n          position.bottom = 'auto';\n        }\n\n        if (this.strategy.placement.indexOf('absleft') > -1) {\n          position.left = 0;\n        }\n\n        if (this.strategy.placement.indexOf('absright') > -1) {\n          position.right = 0;\n          position.left = 'auto';\n        }\n\n        this.$el.css(position);\n        return this;\n      },\n\n      setScroll: function (e) {\n        var $activeItem = this.getActiveItem();\n        var itemTop = $activeItem.position().top;\n        var itemHeight = $activeItem.outerHeight();\n        var visibleHeight = this.$el.innerHeight();\n        var visibleTop = this.$el.scrollTop();\n        if (this.index === 0 || this.index === this.data.length - 1 || itemTop < 0) {\n          this.$el.scrollTop(itemTop + visibleTop);\n        } else if (itemTop + itemHeight > visibleHeight) {\n          this.$el.scrollTop(itemTop + itemHeight + visibleTop - visibleHeight);\n        }\n      },\n\n      select: function (index) {\n        var self = this;\n        this.completer.onSelect(this.data[index]);\n        // Deactive at next tick to allow other event handlers to know whether\n        // the dropdown has been shown or not.\n        setTimeout(function () { self.deactivate(); }, 0);\n      },\n\n      onKeydown: function (e) {\n        if (!this.shown) return;\n        var modifiers = e.ctrlKey || e.altKey || e.metaKey || e.shiftKey;\n        if (e.keyCode === 38 || (e.ctrlKey && e.keyCode === 80)) {         // UP, or Ctrl-P\n          e.preventDefault();\n          if (this.index === 0) {\n            this.index = this.data.length-1;\n          } else {\n            this.index -= 1;\n          }\n          this.activateIndexedItem();\n          this.setScroll();\n        } else if (e.keyCode === 40 || (e.ctrlKey && e.keyCode === 78)) {  // DOWN, or Ctrl-N\n          e.preventDefault();\n          if (this.index === this.data.length - 1) {\n            this.index = 0;\n          } else {\n            this.index += 1;\n          }\n          this.activateIndexedItem();\n          this.setScroll();\n        } else if (!modifiers && (e.keyCode === 13 || e.keyCode === 9)) {  // ENTER or TAB\n          e.preventDefault();\n          this.select(parseInt(this.getActiveItem().data('index'), 10));\n        }\n        else if (e.keyCode === 33) {                                       // PAGEUP\n          e.preventDefault();\n          var target = 0;\n          var threshold = this.getActiveItem().position().top - this.$el.innerHeight();\n          this.$el.children().each(function (i) {\n            if ($(this).position().top + $(this).outerHeight() > threshold) {\n              target = i;\n              return false;\n            }\n          });\n          this.index = target;\n          this.activateIndexedItem();\n          this.setScroll();\n        }\n        else if (e.keyCode === 34) {                                       // PAGEDOWN\n          e.preventDefault();\n          var target = this.data.length - 1;\n          var threshold = this.getActiveItem().position().top + this.$el.innerHeight();\n          this.$el.children().each(function (i) {\n            if ($(this).position().top > threshold) {\n              target = i;\n              return false;\n            }\n          });\n          this.index = target;\n          this.activateIndexedItem();\n          this.setScroll();\n        }\n      },\n\n      onClick: function (e) {\n        var $e = $(e.target);\n        e.preventDefault();\n        e.originalEvent.keepTextCompleteDropdown = true;\n        if (!$e.hasClass('textcomplete-item')) {\n          $e = $e.parents('li.textcomplete-item');\n        }\n        this.select(parseInt($e.data('index'), 10));\n      },\n\n      onMouseover: function (e){\n        var $e = $(e.target);\n        e.preventDefault();\n        if(!$e.hasClass('textcomplete-item')) {\n          $e = $e.parents('li.textcomplete-item');\n        }\n        this.index = parseInt($e.data('index'), 10)\n        this.activateIndexedItem();\n      },\n\n      destroy: function () {\n        this.deactivate();\n        this.$el.off('click.textComplete').remove();\n        this.$el = null;\n      },\n\n      appendTo: function ($el) {\n        $el.css({ position: 'relative' }).append(this.$el)\n      }\n    });\n\n    return ListView;\n  })();\n\n  $.fn.textcomplete = function (strategies, option) {\n    var i, l, strategy, dataKey;\n\n    dataKey = 'textComplete';\n    option || (option = {});\n\n    if (strategies === 'destroy') {\n      return this.each(function () {\n        var completer = $(this).data(dataKey);\n        if (completer) { completer.destroy(); }\n      });\n    }\n\n    for (i = 0, l = strategies.length; i < l; i++) {\n      strategy = strategies[i];\n      if (!strategy.template) {\n        strategy.template = identity;\n      }\n      if (strategy.index == null) {\n        strategy.index = 2;\n      }\n      if (strategy.placement == null) {\n        strategy.placement = '';\n      }\n      if (strategy.cache) {\n        strategy.search = memoize(strategy.search);\n      }\n      strategy.maxCount || (strategy.maxCount = 10);\n    }\n\n    return this.each(function () {\n      var $this, completer;\n      $this = $(this);\n      completer = $this.data(dataKey);\n      if (!completer) {\n        completer = new Completer($this, option);\n        $this.data(dataKey, completer);\n      }\n      completer.register(strategies);\n    });\n  };\n\n})(window.jQuery || window.Zepto);\n"
  },
  {
    "path": "resources/assets/js/vendor/nprogress.js",
    "content": "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\n;(function(root, factory) {\n\n  if (typeof define === 'function' && define.amd) {\n    define(factory);\n  } else if (typeof exports === 'object') {\n    module.exports = factory();\n  } else {\n    root.NProgress = factory();\n  }\n\n})(this, function() {\n  var NProgress = {};\n\n  NProgress.version = '0.1.6';\n\n  var Settings = NProgress.settings = {\n    minimum: 0.08,\n    easing: 'ease',\n    positionUsing: '',\n    speed: 200,\n    trickle: true,\n    trickleRate: 0.02,\n    trickleSpeed: 800,\n    showSpinner: true,\n    barSelector: '[role=\"bar\"]',\n    spinnerSelector: '[role=\"spinner\"]',\n    parent: 'body',\n    template: '<div class=\"bar\" role=\"bar\"><div class=\"peg\"></div></div><div class=\"spinner\" role=\"spinner\"><div class=\"spinner-icon\"></div></div>'\n  };\n\n  /**\n   * Updates configuration.\n   *\n   *     NProgress.configure({\n   *       minimum: 0.1\n   *     });\n   */\n  NProgress.configure = function(options) {\n    var key, value;\n    for (key in options) {\n      value = options[key];\n      if (value !== undefined && options.hasOwnProperty(key)) Settings[key] = value;\n    }\n\n    return this;\n  };\n\n  /**\n   * Last number.\n   */\n\n  NProgress.status = null;\n\n  /**\n   * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n   *\n   *     NProgress.set(0.4);\n   *     NProgress.set(1.0);\n   */\n\n  NProgress.set = function(n) {\n    var started = NProgress.isStarted();\n\n    n = clamp(n, Settings.minimum, 1);\n    NProgress.status = (n === 1 ? null : n);\n\n    var progress = NProgress.render(!started),\n        bar      = progress.querySelector(Settings.barSelector),\n        speed    = Settings.speed,\n        ease     = Settings.easing;\n\n    progress.offsetWidth; /* Repaint */\n\n    queue(function(next) {\n      // Set positionUsing if it hasn't already been set\n      if (Settings.positionUsing === '') Settings.positionUsing = NProgress.getPositioningCSS();\n\n      // Add transition\n      css(bar, barPositionCSS(n, speed, ease));\n\n      if (n === 1) {\n        // Fade out\n        css(progress, { \n          transition: 'none', \n          opacity: 1 \n        });\n        progress.offsetWidth; /* Repaint */\n\n        setTimeout(function() {\n          css(progress, { \n            transition: 'all ' + speed + 'ms linear', \n            opacity: 0 \n          });\n          setTimeout(function() {\n            NProgress.remove();\n            next();\n          }, speed);\n        }, speed);\n      } else {\n        setTimeout(next, speed);\n      }\n    });\n\n    return this;\n  };\n\n  NProgress.isStarted = function() {\n    return typeof NProgress.status === 'number';\n  };\n\n  /**\n   * Shows the progress bar.\n   * This is the same as setting the status to 0%, except that it doesn't go backwards.\n   *\n   *     NProgress.start();\n   *\n   */\n  NProgress.start = function() {\n    if (!NProgress.status) NProgress.set(0);\n\n    var work = function() {\n      setTimeout(function() {\n        if (!NProgress.status) return;\n        NProgress.trickle();\n        work();\n      }, Settings.trickleSpeed);\n    };\n\n    if (Settings.trickle) work();\n\n    return this;\n  };\n\n  /**\n   * Hides the progress bar.\n   * This is the *sort of* the same as setting the status to 100%, with the\n   * difference being `done()` makes some placebo effect of some realistic motion.\n   *\n   *     NProgress.done();\n   *\n   * If `true` is passed, it will show the progress bar even if its hidden.\n   *\n   *     NProgress.done(true);\n   */\n\n  NProgress.done = function(force) {\n    if (!force && !NProgress.status) return this;\n\n    return NProgress.inc(0.3 + 0.5 * Math.random()).set(1);\n  };\n\n  /**\n   * Increments by a random amount.\n   */\n\n  NProgress.inc = function(amount) {\n    var n = NProgress.status;\n\n    if (!n) {\n      return NProgress.start();\n    } else {\n      if (typeof amount !== 'number') {\n        amount = (1 - n) * clamp(Math.random() * n, 0.1, 0.95);\n      }\n\n      n = clamp(n + amount, 0, 0.994);\n      return NProgress.set(n);\n    }\n  };\n\n  NProgress.trickle = function() {\n    return NProgress.inc(Math.random() * Settings.trickleRate);\n  };\n\n  /**\n   * Waits for all supplied jQuery promises and\n   * increases the progress as the promises resolve.\n   * \n   * @param $promise jQUery Promise\n   */\n  (function() {\n    var initial = 0, current = 0;\n    \n    NProgress.promise = function($promise) {\n      if (!$promise || $promise.state() == \"resolved\") {\n        return this;\n      }\n      \n      if (current == 0) {\n        NProgress.start();\n      }\n      \n      initial++;\n      current++;\n      \n      $promise.always(function() {\n        current--;\n        if (current == 0) {\n            initial = 0;\n            NProgress.done();\n        } else {\n            NProgress.set((initial - current) / initial);\n        }\n      });\n      \n      return this;\n    };\n    \n  })();\n\n  /**\n   * (Internal) renders the progress bar markup based on the `template`\n   * setting.\n   */\n\n  NProgress.render = function(fromStart) {\n    if (NProgress.isRendered()) return document.getElementById('nprogress');\n\n    addClass(document.documentElement, 'nprogress-busy');\n    \n    var progress = document.createElement('div');\n    progress.id = 'nprogress';\n    progress.innerHTML = Settings.template;\n\n    var bar      = progress.querySelector(Settings.barSelector),\n        perc     = fromStart ? '-100' : toBarPerc(NProgress.status || 0),\n        parent   = document.querySelector(Settings.parent),\n        spinner;\n    \n    css(bar, {\n      transition: 'all 0 linear',\n      transform: 'translate3d(' + perc + '%,0,0)'\n    });\n\n    if (!Settings.showSpinner) {\n      spinner = progress.querySelector(Settings.spinnerSelector);\n      spinner && removeElement(spinner);\n    }\n\n    if (parent != document.body) {\n      addClass(parent, 'nprogress-custom-parent');\n    }\n\n    parent.appendChild(progress);\n    return progress;\n  };\n\n  /**\n   * Removes the element. Opposite of render().\n   */\n\n  NProgress.remove = function() {\n    removeClass(document.documentElement, 'nprogress-busy');\n    removeClass(document.querySelector(Settings.parent), 'nprogress-custom-parent')\n    var progress = document.getElementById('nprogress');\n    progress && removeElement(progress);\n  };\n\n  /**\n   * Checks if the progress bar is rendered.\n   */\n\n  NProgress.isRendered = function() {\n    return !!document.getElementById('nprogress');\n  };\n\n  /**\n   * Determine which positioning CSS rule to use.\n   */\n\n  NProgress.getPositioningCSS = function() {\n    // Sniff on document.body.style\n    var bodyStyle = document.body.style;\n\n    // Sniff prefixes\n    var vendorPrefix = ('WebkitTransform' in bodyStyle) ? 'Webkit' :\n                       ('MozTransform' in bodyStyle) ? 'Moz' :\n                       ('msTransform' in bodyStyle) ? 'ms' :\n                       ('OTransform' in bodyStyle) ? 'O' : '';\n\n    if (vendorPrefix + 'Perspective' in bodyStyle) {\n      // Modern browsers with 3D support, e.g. Webkit, IE10\n      return 'translate3d';\n    } else if (vendorPrefix + 'Transform' in bodyStyle) {\n      // Browsers without 3D support, e.g. IE9\n      return 'translate';\n    } else {\n      // Browsers without translate() support, e.g. IE7-8\n      return 'margin';\n    }\n  };\n\n  /**\n   * Helpers\n   */\n\n  function clamp(n, min, max) {\n    if (n < min) return min;\n    if (n > max) return max;\n    return n;\n  }\n\n  /**\n   * (Internal) converts a percentage (`0..1`) to a bar translateX\n   * percentage (`-100%..0%`).\n   */\n\n  function toBarPerc(n) {\n    return (-1 + n) * 100;\n  }\n\n\n  /**\n   * (Internal) returns the correct CSS for changing the bar's\n   * position given an n percentage, and speed and ease from Settings\n   */\n\n  function barPositionCSS(n, speed, ease) {\n    var barCSS;\n\n    if (Settings.positionUsing === 'translate3d') {\n      barCSS = { transform: 'translate3d('+toBarPerc(n)+'%,0,0)' };\n    } else if (Settings.positionUsing === 'translate') {\n      barCSS = { transform: 'translate('+toBarPerc(n)+'%,0)' };\n    } else {\n      barCSS = { 'margin-left': toBarPerc(n)+'%' };\n    }\n\n    barCSS.transition = 'all '+speed+'ms '+ease;\n\n    return barCSS;\n  }\n\n  /**\n   * (Internal) Queues a function to be executed.\n   */\n\n  var queue = (function() {\n    var pending = [];\n    \n    function next() {\n      var fn = pending.shift();\n      if (fn) {\n        fn(next);\n      }\n    }\n\n    return function(fn) {\n      pending.push(fn);\n      if (pending.length == 1) next();\n    };\n  })();\n\n  /**\n   * (Internal) Applies css properties to an element, similar to the jQuery \n   * css method.\n   *\n   * While this helper does assist with vendor prefixed property names, it \n   * does not perform any manipulation of values prior to setting styles.\n   */\n\n  var css = (function() {\n    var cssPrefixes = [ 'Webkit', 'O', 'Moz', 'ms' ],\n        cssProps    = {};\n\n    function camelCase(string) {\n      return string.replace(/^-ms-/, 'ms-').replace(/-([\\da-z])/gi, function(match, letter) {\n        return letter.toUpperCase();\n      });\n    }\n\n    function getVendorProp(name) {\n      var style = document.body.style;\n      if (name in style) return name;\n\n      var i = cssPrefixes.length,\n          capName = name.charAt(0).toUpperCase() + name.slice(1),\n          vendorName;\n      while (i--) {\n        vendorName = cssPrefixes[i] + capName;\n        if (vendorName in style) return vendorName;\n      }\n\n      return name;\n    }\n\n    function getStyleProp(name) {\n      name = camelCase(name);\n      return cssProps[name] || (cssProps[name] = getVendorProp(name));\n    }\n\n    function applyCss(element, prop, value) {\n      prop = getStyleProp(prop);\n      element.style[prop] = value;\n    }\n\n    return function(element, properties) {\n      var args = arguments,\n          prop, \n          value;\n\n      if (args.length == 2) {\n        for (prop in properties) {\n          value = properties[prop];\n          if (value !== undefined && properties.hasOwnProperty(prop)) applyCss(element, prop, value);\n        }\n      } else {\n        applyCss(element, args[1], args[2]);\n      }\n    }\n  })();\n\n  /**\n   * (Internal) Determines if an element or space separated list of class names contains a class name.\n   */\n\n  function hasClass(element, name) {\n    var list = typeof element == 'string' ? element : classList(element);\n    return list.indexOf(' ' + name + ' ') >= 0;\n  }\n\n  /**\n   * (Internal) Adds a class to an element.\n   */\n\n  function addClass(element, name) {\n    var oldList = classList(element),\n        newList = oldList + name;\n\n    if (hasClass(oldList, name)) return; \n\n    // Trim the opening space.\n    element.className = newList.substring(1);\n  }\n\n  /**\n   * (Internal) Removes a class from an element.\n   */\n\n  function removeClass(element, name) {\n    var oldList = classList(element),\n        newList;\n\n    if (!hasClass(element, name)) return;\n\n    // Replace the class name.\n    newList = oldList.replace(' ' + name + ' ', ' ');\n\n    // Trim the opening and closing spaces.\n    element.className = newList.substring(1, newList.length - 1);\n  }\n\n  /**\n   * (Internal) Gets a space separated list of the class names on the element. \n   * The list is wrapped with a single space on each end to facilitate finding \n   * matches within the list.\n   */\n\n  function classList(element) {\n    return (' ' + (element.className || '') + ' ').replace(/\\s+/gi, ' ');\n  }\n\n  /**\n   * (Internal) Removes an element from the DOM.\n   */\n\n  function removeElement(element) {\n    element && element.parentNode && element.parentNode.removeChild(element);\n  }\n\n  return NProgress;\n});\n\n"
  },
  {
    "path": "resources/assets/js/vendor/sweetalert.js",
    "content": "/*!\n * sweetalert2 v6.4.2\n * Released under the MIT License.\n */\n(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    (global.Sweetalert2 = factory());\n}(this, (function () { 'use strict';\n\nvar defaultParams = {\n  title: '',\n  titleText: '',\n  text: '',\n  html: '',\n  type: null,\n  customClass: '',\n  target: 'body',\n  animation: true,\n  allowOutsideClick: true,\n  allowEscapeKey: true,\n  allowEnterKey: true,\n  showConfirmButton: true,\n  showCancelButton: false,\n  preConfirm: null,\n  confirmButtonText: 'OK',\n  confirmButtonColor: '#8CD4F5',\n  confirmButtonClass: null,\n  cancelButtonText: 'Cancel',\n  cancelButtonColor: '#C1C1C1',\n  cancelButtonClass: null,\n  buttonsStyling: true,\n  reverseButtons: false,\n  focusCancel: false,\n  showCloseButton: false,\n  showLoaderOnConfirm: false,\n  imageUrl: null,\n  imageWidth: null,\n  imageHeight: null,\n  imageClass: null,\n  timer: null,\n  width: 500,\n  padding: 20,\n  background: '#fff',\n  input: null,\n  inputPlaceholder: '',\n  inputValue: '',\n  inputOptions: {},\n  inputAutoTrim: true,\n  inputClass: null,\n  inputAttributes: {},\n  inputValidator: null,\n  progressSteps: [],\n  currentProgressStep: null,\n  progressStepsDistance: '40px',\n  onOpen: null,\n  onClose: null\n};\n\nvar swalPrefix = 'swal2-';\n\nvar prefix = function prefix(items) {\n  var result = {};\n  for (var i in items) {\n    result[items[i]] = swalPrefix + items[i];\n  }\n  return result;\n};\n\nvar swalClasses = prefix(['container', 'shown', 'iosfix', 'modal', 'overlay', 'fade', 'show', 'hide', 'noanimation', 'close', 'title', 'content', 'spacer', 'confirm', 'cancel', 'icon', 'image', 'input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea', 'inputerror', 'validationerror', 'progresssteps', 'activeprogressstep', 'progresscircle', 'progressline', 'loading', 'styled']);\n\nvar iconTypes = prefix(['success', 'warning', 'info', 'question', 'error']);\n\n/*\n * Set hover, active and focus-states for buttons (source: http://www.sitepoint.com/javascript-generate-lighter-darker-color)\n */\nvar colorLuminance = function colorLuminance(hex, lum) {\n  // Validate hex string\n  hex = String(hex).replace(/[^0-9a-f]/gi, '');\n  if (hex.length < 6) {\n    hex = hex[0] + hex[0] + hex[1] + hex[1] + hex[2] + hex[2];\n  }\n  lum = lum || 0;\n\n  // Convert to decimal and change luminosity\n  var rgb = '#';\n  for (var i = 0; i < 3; i++) {\n    var c = parseInt(hex.substr(i * 2, 2), 16);\n    c = Math.round(Math.min(Math.max(0, c + c * lum), 255)).toString(16);\n    rgb += ('00' + c).substr(c.length);\n  }\n\n  return rgb;\n};\n\n/* global MouseEvent */\n\n// Remember state in cases where opening and handling a modal will fiddle with it.\nvar states = {\n  previousWindowKeyDown: null,\n  previousActiveElement: null,\n  previousBodyPadding: null\n};\n\n/*\n * Add modal + overlay to DOM\n */\nvar init = function init(params) {\n  if (typeof document === 'undefined') {\n    console.error('SweetAlert2 requires document to initialize');\n    return;\n  }\n\n  var container = document.createElement('div');\n  container.className = swalClasses.container;\n  container.innerHTML = sweetHTML;\n\n  var targetElement = document.querySelector(params.target);\n  if (!targetElement) {\n    console.warn('SweetAlert2: Can\\'t find the target \"' + params.target + '\"');\n    targetElement = document.body;\n  }\n  targetElement.appendChild(container);\n\n  var modal = getModal();\n  var input = getChildByClass(modal, swalClasses.input);\n  var file = getChildByClass(modal, swalClasses.file);\n  var range = modal.querySelector('.' + swalClasses.range + ' input');\n  var rangeOutput = modal.querySelector('.' + swalClasses.range + ' output');\n  var select = getChildByClass(modal, swalClasses.select);\n  var checkbox = modal.querySelector('.' + swalClasses.checkbox + ' input');\n  var textarea = getChildByClass(modal, swalClasses.textarea);\n\n  input.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  input.onkeydown = function (event) {\n    setTimeout(function () {\n      if (event.keyCode === 13 && params.allowEnterKey) {\n        event.stopPropagation();\n        sweetAlert.clickConfirm();\n      }\n    }, 0);\n  };\n\n  file.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  range.oninput = function () {\n    sweetAlert.resetValidationError();\n    rangeOutput.value = range.value;\n  };\n\n  range.onchange = function () {\n    sweetAlert.resetValidationError();\n    range.previousSibling.value = range.value;\n  };\n\n  select.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  checkbox.onchange = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  textarea.oninput = function () {\n    sweetAlert.resetValidationError();\n  };\n\n  return modal;\n};\n\n/*\n * Manipulate DOM\n */\n\nvar sweetHTML = ('\\n <div  role=\"dialog\" aria-labelledby=\"modalTitleId\" aria-describedby=\"modalContentId\" class=\"' + swalClasses.modal + '\" tabIndex=\"-1\" >\\n   <ul class=\"' + swalClasses.progresssteps + '\"></ul>\\n   <div class=\"' + swalClasses.icon + ' ' + iconTypes.error + '\">\\n     <span class=\"x-mark\"><span class=\"line left\"></span><span class=\"line right\"></span></span>\\n   </div>\\n   <div class=\"' + swalClasses.icon + ' ' + iconTypes.question + '\">?</div>\\n   <div class=\"' + swalClasses.icon + ' ' + iconTypes.warning + '\">!</div>\\n   <div class=\"' + swalClasses.icon + ' ' + iconTypes.info + '\">i</div>\\n   <div class=\"' + swalClasses.icon + ' ' + iconTypes.success + '\">\\n     <span class=\"line tip\"></span> <span class=\"line long\"></span>\\n     <div class=\"placeholder\"></div> <div class=\"fix\"></div>\\n   </div>\\n   <img class=\"' + swalClasses.image + '\">\\n   <h2 class=\"' + swalClasses.title + '\" id=\"modalTitleId\"></h2>\\n   <div id=\"modalContentId\" class=\"' + swalClasses.content + '\"></div>\\n   <input class=\"' + swalClasses.input + '\">\\n   <input type=\"file\" class=\"' + swalClasses.file + '\">\\n   <div class=\"' + swalClasses.range + '\">\\n     <output></output>\\n     <input type=\"range\">\\n   </div>\\n   <select class=\"' + swalClasses.select + '\"></select>\\n   <div class=\"' + swalClasses.radio + '\"></div>\\n   <label for=\"' + swalClasses.checkbox + '\" class=\"' + swalClasses.checkbox + '\">\\n     <input type=\"checkbox\">\\n   </label>\\n   <textarea class=\"' + swalClasses.textarea + '\"></textarea>\\n   <div class=\"' + swalClasses.validationerror + '\"></div>\\n   <hr class=\"' + swalClasses.spacer + '\">\\n   <button type=\"button\" role=\"button\" tabIndex=\"0\" class=\"' + swalClasses.confirm + '\">OK</button>\\n   <button type=\"button\" role=\"button\" tabIndex=\"0\" class=\"' + swalClasses.cancel + '\">Cancel</button>\\n   <span class=\"' + swalClasses.close + '\">&times;</span>\\n </div>\\n').replace(/(^|\\n)\\s*/g, '');\n\nvar getContainer = function getContainer() {\n  return document.body.querySelector('.' + swalClasses.container);\n};\n\nvar getModal = function getModal() {\n  return getContainer() ? getContainer().querySelector('.' + swalClasses.modal) : null;\n};\n\nvar getIcons = function getIcons() {\n  var modal = getModal();\n  return modal.querySelectorAll('.' + swalClasses.icon);\n};\n\nvar elementByClass = function elementByClass(className) {\n  return getContainer() ? getContainer().querySelector('.' + className) : null;\n};\n\nvar getTitle = function getTitle() {\n  return elementByClass(swalClasses.title);\n};\n\nvar getContent = function getContent() {\n  return elementByClass(swalClasses.content);\n};\n\nvar getImage = function getImage() {\n  return elementByClass(swalClasses.image);\n};\n\nvar getSpacer = function getSpacer() {\n  return elementByClass(swalClasses.spacer);\n};\n\nvar getProgressSteps = function getProgressSteps() {\n  return elementByClass(swalClasses.progresssteps);\n};\n\nvar getValidationError = function getValidationError() {\n  return elementByClass(swalClasses.validationerror);\n};\n\nvar getConfirmButton = function getConfirmButton() {\n  return elementByClass(swalClasses.confirm);\n};\n\nvar getCancelButton = function getCancelButton() {\n  return elementByClass(swalClasses.cancel);\n};\n\nvar getCloseButton = function getCloseButton() {\n  return elementByClass(swalClasses.close);\n};\n\nvar getFocusableElements = function getFocusableElements(focusCancel) {\n  var buttons = [getConfirmButton(), getCancelButton()];\n  if (focusCancel) {\n    buttons.reverse();\n  }\n  return buttons.concat(Array.prototype.slice.call(getModal().querySelectorAll('button:not([class^=' + swalPrefix + ']), input:not([type=hidden]), textarea, select')));\n};\n\nvar hasClass = function hasClass(elem, className) {\n  if (elem.classList) {\n    return elem.classList.contains(className);\n  }\n  return false;\n};\n\nvar focusInput = function focusInput(input) {\n  input.focus();\n\n  // place cursor at end of text in text input\n  if (input.type !== 'file') {\n    // http://stackoverflow.com/a/2345915/1331425\n    var val = input.value;\n    input.value = '';\n    input.value = val;\n  }\n};\n\nvar addClass = function addClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.add(className);\n  });\n};\n\nvar removeClass = function removeClass(elem, className) {\n  if (!elem || !className) {\n    return;\n  }\n  var classes = className.split(/\\s+/).filter(Boolean);\n  classes.forEach(function (className) {\n    elem.classList.remove(className);\n  });\n};\n\nvar getChildByClass = function getChildByClass(elem, className) {\n  for (var i = 0; i < elem.childNodes.length; i++) {\n    if (hasClass(elem.childNodes[i], className)) {\n      return elem.childNodes[i];\n    }\n  }\n};\n\nvar show = function show(elem, display) {\n  if (!display) {\n    display = 'block';\n  }\n  elem.style.opacity = '';\n  elem.style.display = display;\n};\n\nvar hide = function hide(elem) {\n  elem.style.opacity = '';\n  elem.style.display = 'none';\n};\n\nvar empty = function empty(elem) {\n  while (elem.firstChild) {\n    elem.removeChild(elem.firstChild);\n  }\n};\n\n// borrowed from jqeury $(elem).is(':visible') implementation\nvar isVisible = function isVisible(elem) {\n  return elem.offsetWidth || elem.offsetHeight || elem.getClientRects().length;\n};\n\nvar removeStyleProperty = function removeStyleProperty(elem, property) {\n  if (elem.style.removeProperty) {\n    elem.style.removeProperty(property);\n  } else {\n    elem.style.removeAttribute(property);\n  }\n};\n\nvar fireClick = function fireClick(node) {\n  if (!isVisible(node)) {\n    return false;\n  }\n\n  // Taken from http://www.nonobtrusive.com/2011/11/29/programatically-fire-crossbrowser-click-event-with-javascript/\n  // Then fixed for today's Chrome browser.\n  if (typeof MouseEvent === 'function') {\n    // Up-to-date approach\n    var mevt = new MouseEvent('click', {\n      view: window,\n      bubbles: false,\n      cancelable: true\n    });\n    node.dispatchEvent(mevt);\n  } else if (document.createEvent) {\n    // Fallback\n    var evt = document.createEvent('MouseEvents');\n    evt.initEvent('click', false, false);\n    node.dispatchEvent(evt);\n  } else if (document.createEventObject) {\n    node.fireEvent('onclick');\n  } else if (typeof node.onclick === 'function') {\n    node.onclick();\n  }\n};\n\nvar animationEndEvent = function () {\n  var testEl = document.createElement('div');\n  var transEndEventNames = {\n    'WebkitAnimation': 'webkitAnimationEnd',\n    'OAnimation': 'oAnimationEnd oanimationend',\n    'msAnimation': 'MSAnimationEnd',\n    'animation': 'animationend'\n  };\n  for (var i in transEndEventNames) {\n    if (transEndEventNames.hasOwnProperty(i) && testEl.style[i] !== undefined) {\n      return transEndEventNames[i];\n    }\n  }\n\n  return false;\n}();\n\n// Reset previous window keydown handler and focued element\nvar resetPrevState = function resetPrevState() {\n  window.onkeydown = states.previousWindowKeyDown;\n  if (states.previousActiveElement && states.previousActiveElement.focus) {\n    var x = window.scrollX;\n    var y = window.scrollY;\n    states.previousActiveElement.focus();\n    if (x && y) {\n      // IE has no scrollX/scrollY support\n      window.scrollTo(x, y);\n    }\n  }\n};\n\n// Measure width of scrollbar\n// https://github.com/twbs/bootstrap/blob/master/js/modal.js#L279-L286\nvar measureScrollbar = function measureScrollbar() {\n  var supportsTouch = 'ontouchstart' in window || navigator.msMaxTouchPoints;\n  if (supportsTouch) {\n    return 0;\n  }\n  var scrollDiv = document.createElement('div');\n  scrollDiv.style.width = '50px';\n  scrollDiv.style.height = '50px';\n  scrollDiv.style.overflow = 'scroll';\n  document.body.appendChild(scrollDiv);\n  var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth;\n  document.body.removeChild(scrollDiv);\n  return scrollbarWidth;\n};\n\n// JavaScript Debounce Function\n// Simplivied version of https://davidwalsh.name/javascript-debounce-function\nvar debounce = function debounce(func, wait) {\n  var timeout = void 0;\n  return function () {\n    var later = function later() {\n      timeout = null;\n      func();\n    };\n    clearTimeout(timeout);\n    timeout = setTimeout(later, wait);\n  };\n};\n\nvar _typeof = typeof Symbol === \"function\" && typeof Symbol.iterator === \"symbol\" ? function (obj) {\n  return typeof obj;\n} : function (obj) {\n  return obj && typeof Symbol === \"function\" && obj.constructor === Symbol && obj !== Symbol.prototype ? \"symbol\" : typeof obj;\n};\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nvar _extends = Object.assign || function (target) {\n  for (var i = 1; i < arguments.length; i++) {\n    var source = arguments[i];\n\n    for (var key in source) {\n      if (Object.prototype.hasOwnProperty.call(source, key)) {\n        target[key] = source[key];\n      }\n    }\n  }\n\n  return target;\n};\n\nvar modalParams = _extends({}, defaultParams);\nvar queue = [];\nvar swal2Observer = void 0;\n\n/*\n * Set type, text and actions on modal\n */\nvar setParameters = function setParameters(params) {\n  var modal = getModal() || init(params);\n\n  for (var param in params) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n    }\n  }\n\n  // set modal width and margin-left\n  modal.style.width = typeof params.width === 'number' ? params.width + 'px' : params.width;\n\n  modal.style.padding = params.padding + 'px';\n  modal.style.background = params.background;\n\n  var title = getTitle();\n  var content = getContent();\n  var confirmButton = getConfirmButton();\n  var cancelButton = getCancelButton();\n  var closeButton = getCloseButton();\n\n  // Title\n  if (params.titleText) {\n    title.innerText = params.titleText;\n  } else {\n    title.innerHTML = params.title.split('\\n').join('<br>');\n  }\n\n  // Content\n  if (params.text || params.html) {\n    if (_typeof(params.html) === 'object') {\n      content.innerHTML = '';\n      if (0 in params.html) {\n        for (var i = 0; i in params.html; i++) {\n          content.appendChild(params.html[i].cloneNode(true));\n        }\n      } else {\n        content.appendChild(params.html.cloneNode(true));\n      }\n    } else if (params.html) {\n      content.innerHTML = params.html;\n    } else if (params.text) {\n      content.textContent = params.text;\n    }\n    show(content);\n  } else {\n    hide(content);\n  }\n\n  // Close button\n  if (params.showCloseButton) {\n    show(closeButton);\n  } else {\n    hide(closeButton);\n  }\n\n  // Custom Class\n  modal.className = swalClasses.modal;\n  if (params.customClass) {\n    addClass(modal, params.customClass);\n  }\n\n  // Progress steps\n  var progressStepsContainer = getProgressSteps();\n  var currentProgressStep = parseInt(params.currentProgressStep === null ? sweetAlert.getQueueStep() : params.currentProgressStep, 10);\n  if (params.progressSteps.length) {\n    show(progressStepsContainer);\n    empty(progressStepsContainer);\n    if (currentProgressStep >= params.progressSteps.length) {\n      console.warn('SweetAlert2: Invalid currentProgressStep parameter, it should be less than progressSteps.length ' + '(currentProgressStep like JS arrays starts from 0)');\n    }\n    params.progressSteps.forEach(function (step, index) {\n      var circle = document.createElement('li');\n      addClass(circle, swalClasses.progresscircle);\n      circle.innerHTML = step;\n      if (index === currentProgressStep) {\n        addClass(circle, swalClasses.activeprogressstep);\n      }\n      progressStepsContainer.appendChild(circle);\n      if (index !== params.progressSteps.length - 1) {\n        var line = document.createElement('li');\n        addClass(line, swalClasses.progressline);\n        line.style.width = params.progressStepsDistance;\n        progressStepsContainer.appendChild(line);\n      }\n    });\n  } else {\n    hide(progressStepsContainer);\n  }\n\n  // Icon\n  var icons = getIcons();\n  for (var _i = 0; _i < icons.length; _i++) {\n    hide(icons[_i]);\n  }\n  if (params.type) {\n    var validType = false;\n    for (var iconType in iconTypes) {\n      if (params.type === iconType) {\n        validType = true;\n        break;\n      }\n    }\n    if (!validType) {\n      console.error('SweetAlert2: Unknown alert type: ' + params.type);\n      return false;\n    }\n    var icon = modal.querySelector('.' + swalClasses.icon + '.' + iconTypes[params.type]);\n    show(icon);\n\n    // Animate icon\n    switch (params.type) {\n      case 'success':\n        addClass(icon, 'animate');\n        addClass(icon.querySelector('.tip'), 'animate-success-tip');\n        addClass(icon.querySelector('.long'), 'animate-success-long');\n        break;\n      case 'error':\n        addClass(icon, 'animate-error-icon');\n        addClass(icon.querySelector('.x-mark'), 'animate-x-mark');\n        break;\n      case 'warning':\n        addClass(icon, 'pulse-warning');\n        break;\n      default:\n        break;\n    }\n  }\n\n  // Custom image\n  var image = getImage();\n  if (params.imageUrl) {\n    image.setAttribute('src', params.imageUrl);\n    show(image);\n\n    if (params.imageWidth) {\n      image.setAttribute('width', params.imageWidth);\n    } else {\n      image.removeAttribute('width');\n    }\n\n    if (params.imageHeight) {\n      image.setAttribute('height', params.imageHeight);\n    } else {\n      image.removeAttribute('height');\n    }\n\n    image.className = swalClasses.image;\n    if (params.imageClass) {\n      addClass(image, params.imageClass);\n    }\n  } else {\n    hide(image);\n  }\n\n  // Cancel button\n  if (params.showCancelButton) {\n    cancelButton.style.display = 'inline-block';\n  } else {\n    hide(cancelButton);\n  }\n\n  // Confirm button\n  if (params.showConfirmButton) {\n    removeStyleProperty(confirmButton, 'display');\n  } else {\n    hide(confirmButton);\n  }\n\n  // Buttons spacer\n  var spacer = getSpacer();\n  if (!params.showConfirmButton && !params.showCancelButton) {\n    hide(spacer);\n  } else {\n    show(spacer);\n  }\n\n  // Edit text on cancel and confirm buttons\n  confirmButton.innerHTML = params.confirmButtonText;\n  cancelButton.innerHTML = params.cancelButtonText;\n\n  // Set buttons to selected background colors\n  if (params.buttonsStyling) {\n    confirmButton.style.backgroundColor = params.confirmButtonColor;\n    cancelButton.style.backgroundColor = params.cancelButtonColor;\n  }\n\n  // Add buttons custom classes\n  confirmButton.className = swalClasses.confirm;\n  addClass(confirmButton, params.confirmButtonClass);\n  cancelButton.className = swalClasses.cancel;\n  addClass(cancelButton, params.cancelButtonClass);\n\n  // Buttons styling\n  if (params.buttonsStyling) {\n    addClass(confirmButton, swalClasses.styled);\n    addClass(cancelButton, swalClasses.styled);\n  } else {\n    removeClass(confirmButton, swalClasses.styled);\n    removeClass(cancelButton, swalClasses.styled);\n\n    confirmButton.style.backgroundColor = confirmButton.style.borderLeftColor = confirmButton.style.borderRightColor = '';\n    cancelButton.style.backgroundColor = cancelButton.style.borderLeftColor = cancelButton.style.borderRightColor = '';\n  }\n\n  // CSS animation\n  if (params.animation === true) {\n    removeClass(modal, swalClasses.noanimation);\n  } else {\n    addClass(modal, swalClasses.noanimation);\n  }\n};\n\n/*\n * Animations\n */\nvar openModal = function openModal(animation, onComplete) {\n  var container = getContainer();\n  var modal = getModal();\n\n  if (animation) {\n    addClass(modal, swalClasses.show);\n    addClass(container, swalClasses.fade);\n    removeClass(modal, swalClasses.hide);\n  } else {\n    removeClass(modal, swalClasses.fade);\n  }\n  show(modal);\n\n  // scrolling is 'hidden' until animation is done, after that 'auto'\n  container.style.overflowY = 'hidden';\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      container.style.overflowY = 'auto';\n    });\n  } else {\n    container.style.overflowY = 'auto';\n  }\n\n  addClass(document.documentElement, swalClasses.shown);\n  addClass(document.body, swalClasses.shown);\n  addClass(container, swalClasses.shown);\n  fixScrollbar();\n  iOSfix();\n  states.previousActiveElement = document.activeElement;\n  if (onComplete !== null && typeof onComplete === 'function') {\n    setTimeout(function () {\n      onComplete(modal);\n    });\n  }\n};\n\nvar fixScrollbar = function fixScrollbar() {\n  // for queues, do not do this more than once\n  if (states.previousBodyPadding !== null) {\n    return;\n  }\n  // if the body has overflow\n  if (document.body.scrollHeight > window.innerHeight) {\n    // add padding so the content doesn't shift after removal of scrollbar\n    states.previousBodyPadding = document.body.style.paddingRight;\n    document.body.style.paddingRight = measureScrollbar() + 'px';\n  }\n};\n\nvar undoScrollbar = function undoScrollbar() {\n  if (states.previousBodyPadding !== null) {\n    document.body.style.paddingRight = states.previousBodyPadding;\n    states.previousBodyPadding = null;\n  }\n};\n\n// Fix iOS scrolling http://stackoverflow.com/q/39626302/1331425\nvar iOSfix = function iOSfix() {\n  var iOS = /iPad|iPhone|iPod/.test(navigator.userAgent) && !window.MSStream;\n  if (iOS && !hasClass(document.body, swalClasses.iosfix)) {\n    var offset = document.body.scrollTop;\n    document.body.style.top = offset * -1 + 'px';\n    addClass(document.body, swalClasses.iosfix);\n  }\n};\n\nvar undoIOSfix = function undoIOSfix() {\n  if (hasClass(document.body, swalClasses.iosfix)) {\n    var offset = parseInt(document.body.style.top, 10);\n    removeClass(document.body, swalClasses.iosfix);\n    document.body.style.top = '';\n    document.body.scrollTop = offset * -1;\n  }\n};\n\n// SweetAlert entry point\nvar sweetAlert = function sweetAlert() {\n  for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {\n    args[_key] = arguments[_key];\n  }\n\n  if (args[0] === undefined) {\n    console.error('SweetAlert2 expects at least 1 attribute!');\n    return false;\n  }\n\n  var params = _extends({}, modalParams);\n\n  switch (_typeof(args[0])) {\n    case 'string':\n      params.title = args[0];\n      params.html = args[1];\n      params.type = args[2];\n\n      break;\n\n    case 'object':\n      _extends(params, args[0]);\n      params.extraParams = args[0].extraParams;\n\n      if (params.input === 'email' && params.inputValidator === null) {\n        params.inputValidator = function (email) {\n          return new Promise(function (resolve, reject) {\n            var emailRegex = /^[a-zA-Z0-9.+_-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,6}$/;\n            if (emailRegex.test(email)) {\n              resolve();\n            } else {\n              reject('Invalid email address');\n            }\n          });\n        };\n      }\n      break;\n\n    default:\n      console.error('SweetAlert2: Unexpected type of argument! Expected \"string\" or \"object\", got ' + _typeof(args[0]));\n      return false;\n  }\n\n  setParameters(params);\n\n  var container = getContainer();\n  var modal = getModal();\n\n  return new Promise(function (resolve, reject) {\n    // Close on timer\n    if (params.timer) {\n      modal.timeout = setTimeout(function () {\n        sweetAlert.closeModal(params.onClose);\n        reject('timer');\n      }, params.timer);\n    }\n\n    // Get input element by specified type or, if type isn't specified, by params.input\n    var getInput = function getInput(inputType) {\n      inputType = inputType || params.input;\n      if (!inputType) {\n        return null;\n      }\n      switch (inputType) {\n        case 'select':\n        case 'textarea':\n        case 'file':\n          return getChildByClass(modal, swalClasses[inputType]);\n        case 'checkbox':\n          return modal.querySelector('.' + swalClasses.checkbox + ' input');\n        case 'radio':\n          return modal.querySelector('.' + swalClasses.radio + ' input:checked') || modal.querySelector('.' + swalClasses.radio + ' input:first-child');\n        case 'range':\n          return modal.querySelector('.' + swalClasses.range + ' input');\n        default:\n          return getChildByClass(modal, swalClasses.input);\n      }\n    };\n\n    // Get the value of the modal input\n    var getInputValue = function getInputValue() {\n      var input = getInput();\n      if (!input) {\n        return null;\n      }\n      switch (params.input) {\n        case 'checkbox':\n          return input.checked ? 1 : 0;\n        case 'radio':\n          return input.checked ? input.value : null;\n        case 'file':\n          return input.files.length ? input.files[0] : null;\n        default:\n          return params.inputAutoTrim ? input.value.trim() : input.value;\n      }\n    };\n\n    // input autofocus\n    if (params.input) {\n      setTimeout(function () {\n        var input = getInput();\n        if (input) {\n          focusInput(input);\n        }\n      }, 0);\n    }\n\n    var confirm = function confirm(value) {\n      if (params.showLoaderOnConfirm) {\n        sweetAlert.showLoading();\n      }\n\n      if (params.preConfirm) {\n        params.preConfirm(value, params.extraParams).then(function (preConfirmValue) {\n          sweetAlert.closeModal(params.onClose);\n          resolve(preConfirmValue || value);\n        }, function (error) {\n          sweetAlert.hideLoading();\n          if (error) {\n            sweetAlert.showValidationError(error);\n          }\n        });\n      } else {\n        sweetAlert.closeModal(params.onClose);\n        resolve(value);\n      }\n    };\n\n    // Mouse interactions\n    var onButtonEvent = function onButtonEvent(event) {\n      var e = event || window.event;\n      var target = e.target || e.srcElement;\n      var confirmButton = getConfirmButton();\n      var cancelButton = getCancelButton();\n      var targetedConfirm = confirmButton === target || confirmButton.contains(target);\n      var targetedCancel = cancelButton === target || cancelButton.contains(target);\n\n      switch (e.type) {\n        case 'mouseover':\n        case 'mouseup':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.1);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.1);\n            }\n          }\n          break;\n        case 'mouseout':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = params.confirmButtonColor;\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = params.cancelButtonColor;\n            }\n          }\n          break;\n        case 'mousedown':\n          if (params.buttonsStyling) {\n            if (targetedConfirm) {\n              confirmButton.style.backgroundColor = colorLuminance(params.confirmButtonColor, -0.2);\n            } else if (targetedCancel) {\n              cancelButton.style.backgroundColor = colorLuminance(params.cancelButtonColor, -0.2);\n            }\n          }\n          break;\n        case 'click':\n          // Clicked 'confirm'\n          if (targetedConfirm && sweetAlert.isVisible()) {\n            sweetAlert.disableButtons();\n            if (params.input) {\n              (function () {\n                var inputValue = getInputValue();\n\n                if (params.inputValidator) {\n                  sweetAlert.disableInput();\n                  params.inputValidator(inputValue, params.extraParams).then(function () {\n                    sweetAlert.enableButtons();\n                    sweetAlert.enableInput();\n                    confirm(inputValue);\n                  }, function (error) {\n                    sweetAlert.enableButtons();\n                    sweetAlert.enableInput();\n                    if (error) {\n                      sweetAlert.showValidationError(error);\n                    }\n                  });\n                } else {\n                  confirm(inputValue);\n                }\n              })();\n            } else {\n              confirm(true);\n            }\n\n            // Clicked 'cancel'\n          } else if (targetedCancel && sweetAlert.isVisible()) {\n            sweetAlert.disableButtons();\n            sweetAlert.closeModal(params.onClose);\n            reject('cancel');\n          }\n          break;\n        default:\n      }\n    };\n\n    var buttons = modal.querySelectorAll('button');\n    for (var i = 0; i < buttons.length; i++) {\n      buttons[i].onclick = onButtonEvent;\n      buttons[i].onmouseover = onButtonEvent;\n      buttons[i].onmouseout = onButtonEvent;\n      buttons[i].onmousedown = onButtonEvent;\n    }\n\n    // Closing modal by close button\n    getCloseButton().onclick = function () {\n      sweetAlert.closeModal(params.onClose);\n      reject('close');\n    };\n\n    // Closing modal by overlay click\n    container.onclick = function (e) {\n      if (e.target !== container) {\n        return;\n      }\n      if (params.allowOutsideClick) {\n        sweetAlert.closeModal(params.onClose);\n        reject('overlay');\n      }\n    };\n\n    var confirmButton = getConfirmButton();\n    var cancelButton = getCancelButton();\n\n    // Reverse buttons (Confirm on the right side)\n    if (params.reverseButtons) {\n      confirmButton.parentNode.insertBefore(cancelButton, confirmButton);\n    } else {\n      confirmButton.parentNode.insertBefore(confirmButton, cancelButton);\n    }\n\n    // Focus handling\n    var setFocus = function setFocus(index, increment) {\n      var focusableElements = getFocusableElements(params.focusCancel);\n      // search for visible elements and select the next possible match\n      for (var _i2 = 0; _i2 < focusableElements.length; _i2++) {\n        index = index + increment;\n\n        // rollover to first item\n        if (index === focusableElements.length) {\n          index = 0;\n\n          // go to last item\n        } else if (index === -1) {\n          index = focusableElements.length - 1;\n        }\n\n        // determine if element is visible\n        var el = focusableElements[index];\n        if (isVisible(el)) {\n          return el.focus();\n        }\n      }\n    };\n\n    var handleKeyDown = function handleKeyDown(event) {\n      var e = event || window.event;\n      var keyCode = e.keyCode || e.which;\n\n      if ([9, 13, 32, 27].indexOf(keyCode) === -1) {\n        // Don't do work on keys we don't care about.\n        return;\n      }\n\n      var targetElement = e.target || e.srcElement;\n\n      var focusableElements = getFocusableElements(params.focusCancel);\n      var btnIndex = -1; // Find the button - note, this is a nodelist, not an array.\n      for (var _i3 = 0; _i3 < focusableElements.length; _i3++) {\n        if (targetElement === focusableElements[_i3]) {\n          btnIndex = _i3;\n          break;\n        }\n      }\n\n      // TAB\n      if (keyCode === 9) {\n        if (!e.shiftKey) {\n          // Cycle to the next button\n          setFocus(btnIndex, 1);\n        } else {\n          // Cycle to the prev button\n          setFocus(btnIndex, -1);\n        }\n        e.stopPropagation();\n        e.preventDefault();\n\n        // ENTER/SPACE\n      } else if (keyCode === 13 || keyCode === 32) {\n        if (btnIndex === -1 && params.allowEnterKey) {\n          // ENTER/SPACE clicked outside of a button.\n          if (params.focusCancel) {\n            fireClick(cancelButton, e);\n          } else {\n            fireClick(confirmButton, e);\n          }\n        }\n        // ESC\n      } else if (keyCode === 27 && params.allowEscapeKey === true) {\n        sweetAlert.closeModal(params.onClose);\n        reject('esc');\n      }\n    };\n\n    states.previousWindowKeyDown = window.onkeydown;\n    window.onkeydown = handleKeyDown;\n\n    // Loading state\n    if (params.buttonsStyling) {\n      confirmButton.style.borderLeftColor = params.confirmButtonColor;\n      confirmButton.style.borderRightColor = params.confirmButtonColor;\n    }\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.showLoading = sweetAlert.enableLoading = function () {\n      show(getSpacer());\n      show(confirmButton, 'inline-block');\n      addClass(confirmButton, swalClasses.loading);\n      addClass(modal, swalClasses.loading);\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    /**\n     * Show spinner instead of Confirm button and disable Cancel button\n     */\n    sweetAlert.hideLoading = sweetAlert.disableLoading = function () {\n      if (!params.showConfirmButton) {\n        hide(confirmButton);\n        if (!params.showCancelButton) {\n          hide(getSpacer());\n        }\n      }\n      removeClass(confirmButton, swalClasses.loading);\n      removeClass(modal, swalClasses.loading);\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.getTitle = function () {\n      return getTitle();\n    };\n    sweetAlert.getContent = function () {\n      return getContent();\n    };\n    sweetAlert.getInput = function () {\n      return getInput();\n    };\n    sweetAlert.getImage = function () {\n      return getImage();\n    };\n    sweetAlert.getConfirmButton = function () {\n      return getConfirmButton();\n    };\n    sweetAlert.getCancelButton = function () {\n      return getCancelButton();\n    };\n\n    sweetAlert.enableButtons = function () {\n      confirmButton.disabled = false;\n      cancelButton.disabled = false;\n    };\n\n    sweetAlert.disableButtons = function () {\n      confirmButton.disabled = true;\n      cancelButton.disabled = true;\n    };\n\n    sweetAlert.enableConfirmButton = function () {\n      confirmButton.disabled = false;\n    };\n\n    sweetAlert.disableConfirmButton = function () {\n      confirmButton.disabled = true;\n    };\n\n    sweetAlert.enableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i4 = 0; _i4 < radios.length; _i4++) {\n          radios[_i4].disabled = false;\n        }\n      } else {\n        input.disabled = false;\n      }\n    };\n\n    sweetAlert.disableInput = function () {\n      var input = getInput();\n      if (!input) {\n        return false;\n      }\n      if (input && input.type === 'radio') {\n        var radiosContainer = input.parentNode.parentNode;\n        var radios = radiosContainer.querySelectorAll('input');\n        for (var _i5 = 0; _i5 < radios.length; _i5++) {\n          radios[_i5].disabled = true;\n        }\n      } else {\n        input.disabled = true;\n      }\n    };\n\n    // Set modal min-height to disable scrolling inside the modal\n    sweetAlert.recalculateHeight = debounce(function () {\n      var modal = getModal();\n      if (!modal) {\n        return;\n      }\n      var prevState = modal.style.display;\n      modal.style.minHeight = '';\n      show(modal);\n      modal.style.minHeight = modal.scrollHeight + 1 + 'px';\n      modal.style.display = prevState;\n    }, 50);\n\n    // Show block with validation error\n    sweetAlert.showValidationError = function (error) {\n      var validationError = getValidationError();\n      validationError.innerHTML = error;\n      show(validationError);\n\n      var input = getInput();\n      if (input) {\n        focusInput(input);\n        addClass(input, swalClasses.inputerror);\n      }\n    };\n\n    // Hide block with validation error\n    sweetAlert.resetValidationError = function () {\n      var validationError = getValidationError();\n      hide(validationError);\n      sweetAlert.recalculateHeight();\n\n      var input = getInput();\n      if (input) {\n        removeClass(input, swalClasses.inputerror);\n      }\n    };\n\n    sweetAlert.getProgressSteps = function () {\n      return params.progressSteps;\n    };\n\n    sweetAlert.setProgressSteps = function (progressSteps) {\n      params.progressSteps = progressSteps;\n      setParameters(params);\n    };\n\n    sweetAlert.showProgressSteps = function () {\n      show(getProgressSteps());\n    };\n\n    sweetAlert.hideProgressSteps = function () {\n      hide(getProgressSteps());\n    };\n\n    sweetAlert.enableButtons();\n    sweetAlert.hideLoading();\n    sweetAlert.resetValidationError();\n\n    // inputs\n    var inputTypes = ['input', 'file', 'range', 'select', 'radio', 'checkbox', 'textarea'];\n    var input = void 0;\n    for (var _i6 = 0; _i6 < inputTypes.length; _i6++) {\n      var inputClass = swalClasses[inputTypes[_i6]];\n      var inputContainer = getChildByClass(modal, inputClass);\n      input = getInput(inputTypes[_i6]);\n\n      // set attributes\n      if (input) {\n        for (var j in input.attributes) {\n          if (input.attributes.hasOwnProperty(j)) {\n            var attrName = input.attributes[j].name;\n            if (attrName !== 'type' && attrName !== 'value') {\n              input.removeAttribute(attrName);\n            }\n          }\n        }\n        for (var attr in params.inputAttributes) {\n          input.setAttribute(attr, params.inputAttributes[attr]);\n        }\n      }\n\n      // set class\n      inputContainer.className = inputClass;\n      if (params.inputClass) {\n        addClass(inputContainer, params.inputClass);\n      }\n\n      hide(inputContainer);\n    }\n\n    var populateInputOptions = void 0;\n\n    (function () {\n      switch (params.input) {\n        case 'text':\n        case 'email':\n        case 'password':\n        case 'number':\n        case 'tel':\n          input = getChildByClass(modal, swalClasses.input);\n          input.value = params.inputValue;\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'file':\n          input = getChildByClass(modal, swalClasses.file);\n          input.placeholder = params.inputPlaceholder;\n          input.type = params.input;\n          show(input);\n          break;\n        case 'range':\n          var range = getChildByClass(modal, swalClasses.range);\n          var rangeInput = range.querySelector('input');\n          var rangeOutput = range.querySelector('output');\n          rangeInput.value = params.inputValue;\n          rangeInput.type = params.input;\n          rangeOutput.value = params.inputValue;\n          show(range);\n          break;\n        case 'select':\n          var select = getChildByClass(modal, swalClasses.select);\n          select.innerHTML = '';\n          if (params.inputPlaceholder) {\n            var placeholder = document.createElement('option');\n            placeholder.innerHTML = params.inputPlaceholder;\n            placeholder.value = '';\n            placeholder.disabled = true;\n            placeholder.selected = true;\n            select.appendChild(placeholder);\n          }\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var optionValue in inputOptions) {\n              var option = document.createElement('option');\n              option.value = optionValue;\n              option.innerHTML = inputOptions[optionValue];\n              if (params.inputValue === optionValue) {\n                option.selected = true;\n              }\n              select.appendChild(option);\n            }\n            show(select);\n            select.focus();\n          };\n          break;\n        case 'radio':\n          var radio = getChildByClass(modal, swalClasses.radio);\n          radio.innerHTML = '';\n          populateInputOptions = function populateInputOptions(inputOptions) {\n            for (var radioValue in inputOptions) {\n              var radioInput = document.createElement('input');\n              var radioLabel = document.createElement('label');\n              var radioLabelSpan = document.createElement('span');\n              radioInput.type = 'radio';\n              radioInput.name = swalClasses.radio;\n              radioInput.value = radioValue;\n              if (params.inputValue === radioValue) {\n                radioInput.checked = true;\n              }\n              radioLabelSpan.innerHTML = inputOptions[radioValue];\n              radioLabel.appendChild(radioInput);\n              radioLabel.appendChild(radioLabelSpan);\n              radioLabel.for = radioInput.id;\n              radio.appendChild(radioLabel);\n            }\n            show(radio);\n            var radios = radio.querySelectorAll('input');\n            if (radios.length) {\n              radios[0].focus();\n            }\n          };\n          break;\n        case 'checkbox':\n          var checkbox = getChildByClass(modal, swalClasses.checkbox);\n          var checkboxInput = getInput('checkbox');\n          checkboxInput.type = 'checkbox';\n          checkboxInput.value = 1;\n          checkboxInput.id = swalClasses.checkbox;\n          checkboxInput.checked = Boolean(params.inputValue);\n          var label = checkbox.getElementsByTagName('span');\n          if (label.length) {\n            checkbox.removeChild(label[0]);\n          }\n          label = document.createElement('span');\n          label.innerHTML = params.inputPlaceholder;\n          checkbox.appendChild(label);\n          show(checkbox);\n          break;\n        case 'textarea':\n          var textarea = getChildByClass(modal, swalClasses.textarea);\n          textarea.value = params.inputValue;\n          textarea.placeholder = params.inputPlaceholder;\n          show(textarea);\n          break;\n        case null:\n          break;\n        default:\n          console.error('SweetAlert2: Unexpected type of input! Expected \"text\", \"email\", \"password\", \"select\", \"checkbox\", \"textarea\" or \"file\", got \"' + params.input + '\"');\n          break;\n      }\n    })();\n\n    if (params.input === 'select' || params.input === 'radio') {\n      if (params.inputOptions instanceof Promise) {\n        sweetAlert.showLoading();\n        params.inputOptions.then(function (inputOptions) {\n          sweetAlert.hideLoading();\n          populateInputOptions(inputOptions);\n        });\n      } else if (_typeof(params.inputOptions) === 'object') {\n        populateInputOptions(params.inputOptions);\n      } else {\n        console.error('SweetAlert2: Unexpected type of inputOptions! Expected object or Promise, got ' + _typeof(params.inputOptions));\n      }\n    }\n\n    openModal(params.animation, params.onOpen);\n\n    // Focus the first element (input or button)\n    if (params.allowEnterKey) {\n      setFocus(-1, 1);\n    } else {\n      if (document.activeElement) {\n        document.activeElement.blur();\n      }\n    }\n\n    // fix scroll\n    getContainer().scrollTop = 0;\n\n    // Observe changes inside the modal and adjust height\n    if (typeof MutationObserver !== 'undefined' && !swal2Observer) {\n      swal2Observer = new MutationObserver(sweetAlert.recalculateHeight);\n      swal2Observer.observe(modal, { childList: true, characterData: true, subtree: true });\n    }\n  });\n};\n\n/*\n * Global function to determine if swal2 modal is shown\n */\nsweetAlert.isVisible = function () {\n  return !!getModal();\n};\n\n/*\n * Global function for chaining sweetAlert modals\n */\nsweetAlert.queue = function (steps) {\n  queue = steps;\n  var resetQueue = function resetQueue() {\n    queue = [];\n    document.body.removeAttribute('data-swal2-queue-step');\n  };\n  var queueResult = [];\n  return new Promise(function (resolve, reject) {\n    (function step(i, callback) {\n      if (i < queue.length) {\n        document.body.setAttribute('data-swal2-queue-step', i);\n\n        sweetAlert(queue[i]).then(function (result) {\n          queueResult.push(result);\n          step(i + 1, callback);\n        }, function (dismiss) {\n          resetQueue();\n          reject(dismiss);\n        });\n      } else {\n        resetQueue();\n        resolve(queueResult);\n      }\n    })(0);\n  });\n};\n\n/*\n * Global function for getting the index of current modal in queue\n */\nsweetAlert.getQueueStep = function () {\n  return document.body.getAttribute('data-swal2-queue-step');\n};\n\n/*\n * Global function for inserting a modal to the queue\n */\nsweetAlert.insertQueueStep = function (step, index) {\n  if (index && index < queue.length) {\n    return queue.splice(index, 0, step);\n  }\n  return queue.push(step);\n};\n\n/*\n * Global function for deleting a modal from the queue\n */\nsweetAlert.deleteQueueStep = function (index) {\n  if (typeof queue[index] !== 'undefined') {\n    queue.splice(index, 1);\n  }\n};\n\n/*\n * Global function to close sweetAlert\n */\nsweetAlert.close = sweetAlert.closeModal = function (onComplete) {\n  var container = getContainer();\n  var modal = getModal();\n  if (!modal) {\n    return;\n  }\n  removeClass(modal, swalClasses.show);\n  addClass(modal, swalClasses.hide);\n  clearTimeout(modal.timeout);\n\n  resetPrevState();\n\n  var removeModalAndResetState = function removeModalAndResetState() {\n    container.parentNode.removeChild(container);\n    removeClass(document.documentElement, swalClasses.shown);\n    removeClass(document.body, swalClasses.shown);\n    undoScrollbar();\n    undoIOSfix();\n  };\n\n  // If animation is supported, animate\n  if (animationEndEvent && !hasClass(modal, swalClasses.noanimation)) {\n    modal.addEventListener(animationEndEvent, function swalCloseEventFinished() {\n      modal.removeEventListener(animationEndEvent, swalCloseEventFinished);\n      if (hasClass(modal, swalClasses.hide)) {\n        removeModalAndResetState();\n      }\n    });\n  } else {\n    // Otherwise, remove immediately\n    removeModalAndResetState();\n  }\n  if (onComplete !== null && typeof onComplete === 'function') {\n    setTimeout(function () {\n      onComplete(modal);\n    });\n  }\n};\n\n/*\n * Global function to click 'Confirm' button\n */\nsweetAlert.clickConfirm = function () {\n  return getConfirmButton().click();\n};\n\n/*\n * Global function to click 'Cancel' button\n */\nsweetAlert.clickCancel = function () {\n  return getCancelButton().click();\n};\n\n/**\n * Set default params for each popup\n * @param {Object} userParams\n */\nsweetAlert.setDefaults = function (userParams) {\n  if (!userParams || (typeof userParams === 'undefined' ? 'undefined' : _typeof(userParams)) !== 'object') {\n    return console.error('SweetAlert2: the argument for setDefaults() is required and has to be a object');\n  }\n\n  for (var param in userParams) {\n    if (!defaultParams.hasOwnProperty(param) && param !== 'extraParams') {\n      console.warn('SweetAlert2: Unknown parameter \"' + param + '\"');\n      delete userParams[param];\n    }\n  }\n\n  _extends(modalParams, userParams);\n};\n\n/**\n * Reset default params for each popup\n */\nsweetAlert.resetDefaults = function () {\n  modalParams = _extends({}, defaultParams);\n};\n\nsweetAlert.noop = function () {};\n\nsweetAlert.version = '6.4.2';\n\nsweetAlert.default = sweetAlert;\n\nreturn sweetAlert;\n\n})));\nif (window.Sweetalert2) window.sweetAlert = window.swal = window.Sweetalert2;"
  },
  {
    "path": "resources/assets/sass/_variables.scss",
    "content": "\n// Body\n$body-bg: #f5f8fa;\n\n// Borders\n$laravel-border-color: darken($body-bg, 10%);\n$list-group-border: $laravel-border-color;\n$navbar-default-border: $laravel-border-color;\n$panel-default-border: $laravel-border-color;\n$panel-inner-border: $laravel-border-color;\n\n// Brands\n$brand-primary: #3097D1;\n$brand-info: #8eb4cb;\n$brand-success: #2ab27b;\n$brand-warning: #cbb956;\n$brand-danger: #bf5329;\n\n// Typography\n$icon-font-path: \"~bootstrap-sass/assets/fonts/bootstrap/\";\n$font-family-sans-serif: \"Raleway\", sans-serif;\n$font-size-base: 14px;\n$line-height-base: 1.6;\n$text-color: #636b6f;\n\n// Navbar\n$navbar-default-bg: #fff;\n\n// Buttons\n$btn-default-color: $text-color;\n\n// Inputs\n$input-border: lighten($text-color, 40%);\n$input-border-focus: lighten($brand-primary, 25%);\n$input-color-placeholder: lighten($text-color, 30%);\n\n// Panels\n$panel-default-heading-bg: #fff;\n"
  },
  {
    "path": "resources/assets/sass/app.scss",
    "content": "\n// Fonts\n@import url(\"https://fonts.googleapis.com/css?family=Raleway:300,400,600\");\n\n// Variables\n@import \"variables\";\n\n// Bootstrap\n@import \"node_modules/bootstrap-sass/assets/stylesheets/bootstrap\";\n"
  },
  {
    "path": "resources/assets/sass/front.scss",
    "content": "//@import \"node_modules/bootstrap-sass/assets/stylesheets/bootstrap\";\n@import \"vendor/reset-style\";\n@import \"../semantic/dist/semantic.css\";\n@import \"vendor/nprogress\";\n@import \"vendor/fluidbox\";\n@import \"vendor/jquery.tocify\";\n@import \"vendor/markdown\";\n@import \"vendor/toastr.min\";\n@import \"~simplemde/dist/simplemde.min.css\";\n@import \"vendor/emoji\";\n@import \"node_modules/sweetalert/dev/sweetalert.scss\";\n//// Share.js\n@import \"node_modules/social-share.js/src/css/share.scss\";\n\n// Base layouts page\nnav.ui.main.large.menu.top.stackable {\n  border-top: $nav-top-border solid 3px;\n}\n\n// Home page\n.ui.card.small-card {\n  .image img {\n    max-height: 150px;\n  }\n  .content {\n    .header {\n      font-size: 1em;\n      color: $black;\n      font-weight: bold;\n\n    }\n    .description {\n      font-size: 0.8em;\n    }\n  }\n  .extra .content {\n\n  }\n}\n\n.ui.card.small-card:hover {\n  .description {\n    display: block;\n  }\n}\n\n.ui.vertical.divider.home-page-divider {\n  left: 4%;\n}\n\n.avatar-a {\n  width: auto !important;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n.avatar-b {\n  cursor: pointer;\n}\n\n.right.floated.content.labels {\n  line-height: 29px;\n}\n\n.labels-time {\n  color: $gray-font;\n}\n\n.labels-time:hover {\n  cursor: pointer;\n}\n\n// footer\n.footer {\n  position: absolute;\n  bottom: 0;\n}\n\n.main.container, .footer {\n  -webkit-box-flex: 1;\n  flex: 1 0 auto;\n}\n\n.ui.inverted.segment.footer {\n  margin-top: 64px;\n  padding-top: 40px;\n  padding-bottom: 40px;\n}\n\n// Register page\n.column.reg {\n  margin: 50px 0 120px 0;\n}\n\n.auth-label {\n  float: left;\n  font-weight: 100 !important;\n}\n\nspan.icon-no {\n  margin-left: -8px;\n}\n\n.thirdlogin {\n  margin: 10px 0 20px 0 !important;\n  .left {\n    float: left;\n  }\n  .right {\n    float: right;\n  }\n}\n\n.column.reg {\n  max-width: 450px;\n}\n\n// Article list page\n.cat-article-image {\n  width: 400px !important;\n  height: 200px !important;\n}\n\n.ui.attached.tabular.menu {\n  margin-top: 30px;\n}\n\n.black-font a {\n  margin-bottom: 4px;\n  line-height: 18px;\n  display: inline-block;\n  overflow: hidden;\n  text-overflow: ellipsis;\n  white-space: nowrap;\n  width: 100%;\n  font-size: 13px;\n  color: #737373;\n}\n\na.ui.label.lable-list {\n  margin-bottom: 10px;\n  transform: scale(1);\n  transition: all 1s ease 0s;\n  -webkit-transform: scale(1);\n  -webkit-transform: all 1s ease 0s;\n}\n\na.ui.label.lable-list:hover {\n  transition: all 0.3s ease 0s;\n  -webkit-transform: scale(1.2);\n  -webkit-transform: all 1s ease 0s;\n}\n\n.ui.cards > .card > .extra, .ui.card > .extra {\n  padding: 0.75em 0.1em;\n}\n\n// Article info page\np.book-article-meta.description {\n  margin-top: -14px;\n}\n\n.info-labels {\n  a {\n    color: #2C662D;\n  }\n}\n\n.ui.message.basic.centerd.voted-box {\n  text-align: center;\n}\n\n.ui.message.basic.voted-box {\n  padding-top: 20px;\n  padding-bottom: 4px;\n}\n\n.ui.message.basic {\n  border: none;\n  box-shadow: none;\n  color: inherit;\n}\n\n.ui.message.basic {\n  background-color: #fff;\n}\n\n.ui.message.basic.voted-box .voted-users {\n  margin: 14px;\n  margin-bottom: 16px;\n}\n\n/*--------------\n    Comment\n---------------*/\ndiv#preview-box {\n  margin-top: 20px;\n  border: dashed 1px;\n  background: #faf5eb;\n}\n\n.ui.comments.comment-list {\n  max-width: inherit;\n  margin-top: 35px;\n\n  .ui.horizontal.divider {\n    margin: 34px 0px;\n  }\n}\n\n.ui.comments .comments-feed {\n  position: relative;\n\n  .reaction-emoji {\n    font-size: 20px;\n    margin-right: 12px;\n  }\n}\n\n.ui.comments .comments-feed:before {\n  position: absolute;\n  top: 0;\n  bottom: 0;\n  left: 79px;\n  display: block;\n  width: 2px;\n  content: \"\";\n  background-color: #d4dade;\n}\n\n.ui.comments .comment img.avatar, .ui.comments .comment .avatar img {\n  width: 50px;\n  height: 50px;\n  border: 1px solid #fff;\n  box-shadow: 0px 1px 10px 0 #a3b4bf;\n}\n\n.ui.comments .comments-feed .comment {\n  padding-left: 60px;\n  margin-bottom: 15px;\n  position: relative;\n}\n\n.ui.comments .comment .avatar {\n  margin-left: -66px;\n}\n\n.ui.comments .comment > .avatar ~ .content {\n  border: 1px solid #d3e0e9;\n  border-radius: 3px;\n  margin-left: 0px;\n  box-shadow: 0px 1px 10px 0 #e0e5e8;\n}\n\n.ui.comments .comment > .avatar ~ .content:before {\n  position: absolute;\n  top: 11px;\n  right: 100%;\n  left: 44px;\n  display: block;\n  width: 0;\n  height: 0;\n  pointer-events: none;\n  content: \" \";\n  border-color: transparent;\n  border-style: solid solid outset;\n  border-width: 8px;\n  border-right-color: #d4e0e8;\n}\n\n.ui.comments .comment .comment-body {\n  padding: 18px 15px;\n  background-color: #ffffff;\n  margin: 0px;\n}\n\n.ui.comments .comment .comment-header {\n  padding-right: 15px;\n  padding-left: 15px;\n  color: #767676;\n  background-color: #fff;\n  border-bottom: 1px solid #ddd;\n  border-top-left-radius: 3px;\n  border-top-right-radius: 3px;\n  position: relative;\n  .reaction {\n    position: absolute;\n    top: 0px;\n    right: 0px;\n    .ui.basic.button:hover {\n      background: transparent !important;\n    }\n    .ui.basic.button {\n      box-shadow: none;\n\n      .icon.smile {\n        font-size: 20px;\n      }\n    }\n\n    .header {\n      font-size: inherit;\n      font-weight: normal;\n    }\n  }\n  .meta {\n    max-width: 78%;\n    padding-top: 12px;\n    padding-bottom: 12px;\n  }\n\n}\n\n.ui.comments .comment .footer {\n  .ui.menu.reactions {\n    border: none;\n    border-top: 1px solid #d3e0e9;\n    border-radius: none;\n    box-shadow: none;\n\n    .item {\n      padding: 5px 15px;\n    }\n\n  }\n}\n\n.ui.statistics .statistic > .value, .ui.statistic > .value {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.6rem !important;\n  font-weight: normal;\n  line-height: 1em;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n// toc markdown\n#toc {\n  max-height: 800px;\n}\n.author-box .avatar-link {\n  margin: 28px;\n}\n#toc li.tocify-item:hover {\n  background: rgba(241, 244, 247, 0.78);\n}\n\n#toc .tocify-header {\n  text-indent: 0px;\n  padding: 2px 8px;\n}\n\n#toc li.tocify-item.active {\n  border-bottom: 1px solid #6cd4d0;\n  margin-bottom: -1px;\n}\n\n.tocify-extend-page {\n  display: none !important;\n}\n\n// User profile edit page\n.ui.form .field > label {\n  color: #a7a5a5;\n  font-weight: normal;\n}\n\n// User center page\n.content.user-info {\n  .header {\n    font-size: 2rem;\n  }\n  .description {\n    margin-top: 3px !important;\n  }\n}\n\n.bookmark.icon.intro {\n  margin-left: 5px;\n  margin-top: 10px;\n}\n\n// User center page\n.ui.feed .event {\n  margin-bottom: 12px;\n  border-bottom: 1px dashed #dae1ea;\n  padding: 0.81428571rem 0em;\n}\n\n.ui.tabular.menu .counter {\n  display: inline-block;\n  padding: 2px 6px;\n  font-size: 12px;\n  font-weight: 600;\n  line-height: 1;\n  color: #586069;\n  background-color: rgba(27, 31, 35, 0.08);\n  border-radius: 20px;\n  margin-left: 4px;\n}\n\n// Modify avatar\n.file-m {\n  position: absolute;\n  right: 0;\n  top: 0;\n  left: 0;\n  width: 100px;\n  height: 30px;\n  opacity: 0;\n  color: red;\n  cursor: pointer;\n}\n\n.btn-success-m {\n  position: relative;\n  width: 100px;\n  height: 30px;\n  color: #fff;\n  background-color: #1abc9c;\n  border-color: #1abc9c;\n  padding: 3px;\n}\n\n.btn-success-m:hover {\n  color: #fff;\n}\n\n// Messages center\n.ui.feed.no-messages {\n  text-align: center;\n  line-height: 45px;\n}\n\n.notifications {\n  a {\n    color: #008000;\n  }\n}\n\n.box {\n  background-color: #fff;\n  padding: 10px;\n  margin: 0 0 20px 0;\n  box-shadow: 0 0.2em 0 0 #ddd, 0 0 0 1px #ddd;\n}\n\n.ui.link.menu .item:hover, .ui.menu .dropdown.item:hover, .ui.menu .link.item:hover, .ui.menu a.item:hover {\n  cursor: pointer;\n  background: #fff;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.menu .violet.active.item, .ui.violet.menu .active.item {\n  color: #fff !important;\n  background: #00b5ad;\n}\n\n.ui.menu .violet.active.item, .ui.violet.menu .active.item:hover {\n  color: #fff !important;\n  background: #00b5ad;\n}\n\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #00b5ad;\n}\n\n// Notification Page\n\n.notify-list {\n  .description {\n    a {\n      color: #4183C4;\n    }\n    .button {\n      line-height: 0px;\n      padding: 10px 7px;\n    }\n  }\n}\n\n// Paginate page\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  line-height: 1.428571429;\n  text-decoration: none;\n  color: #00b5ad;\n  background-color: #fff;\n  border: 1px solid #ddd;\n  margin-left: -1px;\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-bottom-right-radius: 4px;\n  border-top-right-radius: 4px;\n}\n\n.pagination > li > a:hover, .pagination > li > a:focus,\n.pagination > li > span:hover,\n.pagination > li > span:focus {\n  z-index: 2;\n  color: #22ddde;\n  background-color: #eeeeee;\n  border-color: #ddd;\n}\n\n.pagination > .active > a, .pagination > .active > a:hover, .pagination > .active > a:focus,\n.pagination > .active > span,\n.pagination > .active > span:hover,\n.pagination > .active > span:focus {\n  z-index: 3;\n  color: #fff;\n  background-color: #00b5ad;\n  border-color: #00b5ad;\n  cursor: default;\n}\n\n.pagination > .disabled > span,\n.pagination > .disabled > span:hover,\n.pagination > .disabled > span:focus,\n.pagination > .disabled > a,\n.pagination > .disabled > a:hover,\n.pagination > .disabled > a:focus {\n  color: #777777;\n  background-color: #fff;\n  border-color: #ddd;\n  cursor: not-allowed;\n}\n\n.pagination-lg > li > a,\n.pagination-lg > li > span {\n  padding: 10px 16px;\n  font-size: 18px;\n  line-height: 1.3333333;\n}\n\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-bottom-right-radius: 6px;\n  border-top-right-radius: 6px;\n}\n\n.pagination-sm > li > a,\n.pagination-sm > li > span {\n  padding: 5px 10px;\n  font-size: 12px;\n  line-height: 1.5;\n}\n\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-bottom-right-radius: 3px;\n  border-top-right-radius: 3px;\n}\n\n.pager {\n  padding-left: 0;\n  margin: 20px 0;\n  list-style: none;\n  text-align: center;\n}\n\n.pager:before, .pager:after {\n  content: \" \";\n  display: table;\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: #fff;\n  border: 1px solid #ddd;\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: #777777;\n  background-color: #fff;\n  cursor: not-allowed;\n}\n\n// Search page\n.search-results {\n  padding: 20px;\n  line-height: 25px;\n\n  .panel-heading h3 {\n    color: #696969;\n    font-size: 15px;\n    margin-bottom: 12px;\n  }\n\n  a {\n    color: #333;\n  }\n  .result {\n    margin-bottom: 20px;\n  }\n  .user.result {\n    margin-top: 8px;\n    margin-bottom: 0px;\n  }\n\n  .result em {\n    color: #EB5424;\n    font-style: normal\n  }\n\n  .result .title {\n    font-size: 18px;\n  }\n\n  .result .title .badge {\n    background: #EBEDEE;\n    color: #9A9DA0;\n    font-weight: normal;\n    font-size: 12px;\n    margin-left: 4px\n  }\n\n  .result .info {\n    margin-bottom: 6px;\n    font-size: 12px\n  }\n\n  .result .info .url a {\n    color: #23863F\n  }\n\n  .result .info .date {\n    color: #999;\n    margin-left: 8px\n  }\n\n  .result .desc {\n    color: #666;\n    font-size: 14px;\n    word-break: break-all\n  }\n\n  .result .desc em {\n    color: #F86334\n  }\n\n  .user .info {\n    margin-top: 4px;\n    font-size: 14px\n  }\n\n  .user .info.number {\n    color: #666;\n    font-size: 13px\n  }\n  .highlight {\n    color: #e07b7a;\n  }\n  .role-label {\n    display: inline-block;\n    position: absolute;\n\n    a.label {\n      font-size: 85%;\n      font-weight: 100;\n      padding: 0.2em 1em .2em;\n      position: relative;\n      margin: 8px;\n      color: #fff;\n    }\n  }\n  .user-info {\n    padding-top: 8px;\n    padding-left: 8px;\n  }\n\n  hr {\n    margin-top: 15px;\n    margin-bottom: 15px;\n  }\n\n  .list-panel .panel-body {\n    padding: 0px;\n  }\n\n  .user.result .info .role-label {\n    position:  relative;\n  }\n  .avatar-small {\n    width: 26px;\n    height: 26px;\n  }\n}\n\n// Mobile menu page\n@media only screen and (max-width: 767px) {\n  .hidden-menu-m {\n    display: none!important;\n  }\n  .attach-sidebar {\n    display: block!important;\n  }\n\n}\n"
  },
  {
    "path": "resources/assets/sass/vendor/emoji.scss",
    "content": ".emoji {\n  width: 1.5em;\n  height: 1.5em;\n  display: inline-block;\n  margin-bottom: -0.25em;\n  background-size: contain;\n}\n\n/*--------------\n     emojify\n---------------*/\n.emoji {\n  width: 1.5em;\n  height: 1.5em;\n  display: inline-block;\n  margin-bottom: -0.25em;\n  background-size: contain;\n}\n\n/**\n * Emoji auto complete / @ usesr\n */\n.notification-index .list-group .list-group-item {\n  padding: 7px 15px;\n}\n\n.dropdown-menu img {\n  height: 22px;\n  width: 22px;\n  margin: 5px 10px 5px 2px;\n  vertical-align: middle;\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  list-style: none;\n  font-size: 14px;\n  text-align: left;\n  background-color: #fff;\n  border: 1px solid #ccc;\n  border: 1px solid rgba(0, 0, 0, 0.15);\n  border-radius: 4px;\n  box-shadow: 0 6px 12px rgba(0, 0, 0, 0.175);\n  background-clip: padding-box;\n}\n\n.dropdown-menu {\n  background-color: #fff;\n  color: inherit;\n  padding: 0px;\n}\n\n.dropdown-menu > li > a {\n  color: #777;\n  display: block;\n  border-bottom: 1px solid #e6e6e6;\n  line-height: 2.3;\n  cursor: pointer;\n  padding-left: 12px;\n}\n\n.dropdown-menu > li > a:hover, .dropdown-menu > li > a:focus, .dropdown-menu > li.textcomplete-item.active {\n  color: #060606;\n  background-color: #f5f8fa;\n}\n\n"
  },
  {
    "path": "resources/assets/sass/vendor/fluidbox.scss",
    "content": "// Variable\n$fluidbox__transition-duration: .5s !default;\n$fluidbox__overlay-bg-color: rgba(255,255,255,.85) !default;\n$fluidbox__animation-bg-color: $fluidbox__overlay-bg-color !default;\n\n// Animation\n@keyframes fluidboxLoading {\n  0%      { transform: translate(-50%, -50%) rotateX(0)       rotateY(0);         }\n  50%     { transform: translate(-50%, -50%) rotateX(-180deg) rotateY(0);         }\n  100%    { transform: translate(-50%, -50%) rotateX(-180deg) rotateY(-180deg);   }\n}\n\n// Rules\n.fluidbox {\n  outline: none;\n}\n.fluidbox__overlay {\n  background-color: $fluidbox__overlay-bg-color;\n  cursor: pointer;\n  cursor: zoom-out;\n  opacity: 0;\n  pointer-events: none;\n  position: fixed;\n  top: -100%;     /* Negative top and bottom is to fix some Safari cases where image got blurry */\n  left: 0;\n  bottom: -100%;  /* Negative top and bottom is to fix some Safari cases where image got blurry */\n  right: 0;\n  /* Transition time for overlay is halved to ensure that flickering doesn't happen */\n  transition: all $fluidbox__transition-duration ease-in-out;\n\n  .fluidbox--opened & { pointer-events: auto;}\n}\n.fluidbox__wrap {\n  background-position: center center;\n  background-size: cover;\n  margin: 0 auto;\n  position: relative;\n  transition: all $fluidbox__transition-duration ease-in-out;\n}\n.fluidbox__thumb {\n  transition: opacity 0s ease-in-out 0s;\n  /* To prevent flickering, we delay the showing of the image */\n  .fluidbox--closed & { transition: opacity 0s ease-in-out 0s; }\n}\n.fluidbox__ghost {\n  background-size: 100% 100%;\n  background-position: center center;\n  background-repeat: no-repeat;\n  position: absolute;\n  transition: opacity 0s 0s, transform $fluidbox__transition-duration 0s;\n\n  .fluidbox--opened & {\n    cursor: pointer;\n    cursor: -webkit-zoom-out;\n    cursor: -moz-zoom-out;\n    cursor: zoom-out;\n  }\n  .fluidbox--closed & {\n    transition: opacity 0s $fluidbox__transition-duration, transform $fluidbox__transition-duration 0s;\n  }\n}\n.fluidbox__loader {\n  opacity: 0;\n  perspective: 200px;\n  pointer-events: none;\n  position: absolute;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n\n  &::before {\n    /* You can replace this with any color you want, or even a loading gif if desired */\n    background-color: $fluidbox__animation-bg-color;\n    content: '';\n    transform-style: preserve-3d;\n    position: absolute;\n    top: 50%;\n    left: 50%;\n    width: 20%;\n    padding-bottom: 20%;\n    transform: translate(-50%, -50%);\n    transition-property: transform;\n    transition-duration: $fluidbox__transition-duration;\n    transition-delay: 0s;\n  }\n}\n\n.fluidbox--loading .fluidbox__loader {\n  opacity: 1;\n  transition: opacity $fluidbox__transition-duration ease-in-out $fluidbox__transition-duration;\n  &::before {\n    animation: fluidboxLoading 1s 0s infinite ease-in-out forwards;\n  }\n}\n\na.fluidbox {\n  cursor: zoom-in;\n}"
  },
  {
    "path": "resources/assets/sass/vendor/jquery.tocify.scss",
    "content": "/*\n * jquery.tocify.css 1.9.0\n * Author: @gregfranko\n */\n\n/* The Table of Contents container element */\n.tocify {\n    width: 20%;\n    max-height: 90%;\n    overflow: auto;\n    margin-left: 2%;\n    position: fixed;\n    border: 1px solid #ccc;\n    webkit-border-radius: 6px;\n    moz-border-radius: 6px;\n    border-radius: 6px;\n}\n\n/* The Table of Contents is composed of multiple nested unordered lists.  These styles remove the default styling of an unordered list because it is ugly. */\n.tocify ul, .tocify li {\n    list-style: none;\n    margin: 0;\n    padding: 0;\n    border: none;\n    line-height: 30px;\n}\n\n/* Top level header elements */\n.tocify-header {\n    text-indent: 10px;\n}\n\n/* Top level subheader elements.  These are the first nested items underneath a header element. */\n.tocify-subheader {\n    text-indent: 20px;\n    display: none;\n}\n\n/* Makes the font smaller for all subheader elements. */\n.tocify-subheader li {\n    font-size: 12px;\n}\n\n/* Further indents second level subheader elements. */\n.tocify-subheader .tocify-subheader {\n    text-indent: 30px;\n}\n\n/* Further indents third level subheader elements. You can continue this pattern if you have more nested elements. */\n.tocify-subheader .tocify-subheader .tocify-subheader {\n    text-indent: 40px;\n}\n\n/* Twitter Bootstrap Override Style */\n.nav-list > li > a, .nav-list .nav-header {\n    margin: 0px;\n}\n\n/* Twitter Bootstrap Override Style */\n.nav-list > li > a {\n    padding: 5px;\n}"
  },
  {
    "path": "resources/assets/sass/vendor/markdown.scss",
    "content": ".ui.segments .segment, .ui.segment.markdown-body {\n  font-size: 15px;\n  margin: 0px;\n}\n\n// for Fluidbox\n.editor-preview, .markdown-body, .markdown-reply {\n  overflow: visible;\n}\n\n.editor-preview-active-side, .editor-preview, .markdown-body, .markdown-reply {\n\n  font-size: 15px;\n\n  -ms-text-size-adjust: 100%;\n  -webkit-text-size-adjust: 100%;\n  line-height: 1.4;\n  line-height: 1.6;\n  word-wrap: break-word;\n\n  a {\n    background: transparent;\n  }\n\n  a:active,\n  a:hover {\n    outline: 0;\n  }\n\n  ol li {\n    margin: 8px 0;\n  }\n\n  pre[class*=language-] {\n    margin: 1.2em 0!important;\n  }\n\n  strong {\n    font-weight: bold;\n  }\n\n  h1 {\n    font-size: 2em;\n    margin: 0.67em 0;\n  }\n\n  img {\n    border: 0;\n  }\n\n  hr {\n    -moz-box-sizing: content-box;\n    box-sizing: content-box;\n    height: 0;\n  }\n\n  table {\n    border-collapse: collapse;\n    border-spacing: 0;\n  }\n\n  td,\n  th {\n    padding: 0;\n  }\n\n  * {\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n\n  a {\n    text-decoration: none;\n  }\n\n  a:hover,\n  a:focus,\n  a:active {\n    text-decoration: none;\n  }\n\n  hr {\n    height: 0;\n    overflow: hidden;\n    background: transparent;\n    border: 2px dashed #F0F4F6;\n    border-bottom: 0px;\n    margin: 18px auto;\n    width: 50%;\n  }\n\n  hr:before,\n  hr:after {\n    display: table;\n    content: \" \";\n  }\n\n  hr:after {\n    clear: both;\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    margin-top: 15px;\n    margin-bottom: 15px;\n    line-height: 1.1;\n  }\n\n  h1 {\n    font-size: 30px;\n  }\n\n  h2 {\n    font-size: 21px;\n  }\n\n  h3 {\n    font-size: 16px;\n  }\n\n  h4 {\n    font-size: 14px;\n  }\n\n  h5 {\n    font-size: 12px;\n  }\n\n  h6 {\n    font-size: 11px;\n  }\n\n  blockquote {\n    margin: 0;\n  }\n\n  blockquote p:last-child, blockquote ul:last-child, blockquote ol:last-child {\n    margin-bottom: 0;\n  }\n\n  ul,\n  ol {\n    padding: 0;\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  ol ol {\n    list-style-type: lower-roman;\n  }\n\n  dd {\n    margin-left: 0;\n  }\n\n  code,\n  pre {\n    font-family: monaco, Consolas, \"Liberation Mono\", Menlo, Courier, monospace;\n    font-size:1em;\n  }\n\n  pre {\n    margin-top: 0;\n    margin-bottom: 0;\n    overflow: auto;\n  }\n\n  .markdown-body>*:first-child {\n    margin-top: 0 !important;\n  }\n\n  .markdown-body>*:last-child {\n    margin-bottom: 0 !important;\n  }\n\n  .anchor {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    left: 0;\n    display: block;\n    padding-right: 6px;\n    padding-left: 30px;\n    margin-left: -30px;\n  }\n\n  .anchor:focus {\n    outline: none;\n  }\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    position: relative;\n    margin-top: 1.0em;\n    margin-bottom: 16px;\n    line-height: 1.4;\n  }\n\n  h1 {\n    padding-bottom: 0.3em;\n    font-size: 2.25em;\n    line-height: 1.2;\n    border-bottom: 1px solid #eee;\n  }\n\n  h2 {\n    padding-bottom: 0.3em;\n    font-size: 1.3em;\n    line-height: 1.225;\n    border-bottom: 1px solid #eee;\n  }\n\n  h3 {\n    font-size: 1.2em;\n    line-height: 1.43;\n  }\n\n  h4 {\n    font-size: 1.1em;\n  }\n\n  h5 {\n    font-size: 1.0em;\n  }\n\n  h6 {\n    font-size: 0.9em;\n    color: #777;\n  }\n\n  p,\n  blockquote,\n  ul,\n  ol,\n  dl,\n  table,\n  pre {\n    margin-top: 0;\n    margin-bottom: 10px;\n\n    line-height: 30px;\n  }\n\n  ul,\n  ol {\n    padding-left: 2em;\n    padding: 10px 20px 10px 30px;\n    color: #7d8688;\n  }\n\n  ol ol,\n  ol ul {\n    margin-top: 0;\n    margin-bottom: 0;\n  }\n\n  li>p {\n    margin-top: 16px;\n  }\n\n  dl {\n    padding: 0;\n  }\n\n  dl dt {\n    padding: 0;\n    margin-top: 16px;\n    font-size: 1em;\n    font-style: italic;\n    font-weight: bold;\n  }\n\n  dl dd {\n    padding: 0 16px;\n    margin-bottom: 16px;\n  }\n\n  blockquote {\n    font-size: inherit;\n    padding: 0 15px;\n    color: #777;\n    border-left: 4px solid #ddd;\n    code {\n      color: inherit;\n      background-color: transparent;\n      border: 1px solid #d1e0f3;\n    }\n  }\n\n  blockquote>:first-child {\n    margin-top: 20;\n  }\n\n  blockquote>:last-child {\n    margin-bottom: 20;\n  }\n\n  blockquote {\n    margin: 20px 0!important;\n    background-color: #f5f8fc;\n    padding: 1rem;\n    color: #8796A8;\n    border-left: none;\n  }\n\n  table {\n    display: block;\n    width: 100%;\n    overflow: auto;\n    margin: 25px 0;\n  }\n\n  table th {\n    font-weight: bold;\n  }\n\n  table th,\n  table td {\n    padding: 6px 13px;\n    border: 1px solid #ddd;\n  }\n\n  table tr {\n    background-color: #fff;\n    border-top: 1px solid #ccc;\n  }\n\n  table tr:nth-child(2n) {\n    background-color: #f8f8f8;\n  }\n\n  img {\n    max-width: 100%;\n    -moz-box-sizing: border-box;\n    box-sizing: border-box;\n  }\n\n  img:not(.emoji){\n    margin-bottom: 30px;\n    margin-top: 10px;\n  }\n  img.rm-style {\n    border: none;\n    box-shadow: none;\n    -moz-box-shadow: none;\n    -webkit-box-shadow: none;\n    margin-bottom: 0px;\n    margin-top: 0px;\n  }\n\n  code {\n    background: rgba(90, 87, 87, 0);\n    margin: 5px;\n    color: #858080;\n    border-radius: 4px;\n    background-color: #f9fafa;\n    border: 1px solid #e4e4e4;\n    max-width: 740px;\n    overflow-x: auto;\n    font-size: .9em;\n    padding: 1px 2px 1px;\n  }\n\n  code:before,\n  code:after {\n    letter-spacing: -0.2em;\n    content: \"\\00a0\";\n  }\n\n  pre>code {\n    padding: 0;\n    margin: 0;\n    font-size: 100%;\n    white-space: pre;\n    background: transparent;\n    border: 0;\n  }\n\n  .highlight {\n    margin-bottom: 16px;\n  }\n\n  .highlight pre,\n  pre {\n    padding: 14px;\n    overflow: auto;\n    line-height: 1.45;\n    border-radius: 3px;\n    color: #fff;\n    border: none;\n  }\n\n  .highlight pre {\n    margin-bottom: 0;\n  }\n\n  pre {\n    word-wrap: normal;\n    background: rgba(249, 248, 247, 0.53);\n    border: 1px solid #efefef;\n    box-shadow: 0 2px 5px 0 rgba(199, 199, 199, 0.16), 0 2px 10px 0 rgba(243, 243, 243, 0.12);\n    border-radius: 3px;\n  }\n\n  pre code {\n    display: block;\n    padding: 0;\n    margin: 0;\n    overflow: initial;\n    line-height: inherit;\n    word-wrap: normal;\n    background-color: transparent;\n    border: 0;\n  }\n\n  pre code:before,\n  pre code:after {\n    content: normal;\n  }\n\n  .highlight {\n    background: #ffffff;\n  }\n\n  .highlight .c {\n    color: #999988;\n    font-style: italic;\n  }\n\n  .highlight .err {\n    color: #a61717;\n    background-color: #e3d2d2;\n  }\n\n  .highlight .k {\n    font-weight: bold;\n  }\n\n  .highlight .o {\n    font-weight: bold;\n  }\n\n  .highlight .cm {\n    color: #999988;\n    font-style: italic;\n  }\n\n  .highlight .cp {\n    color: #999999;\n    font-weight: bold;\n  }\n\n  .highlight .c1 {\n    color: #999988;\n    font-style: italic;\n  }\n\n  .highlight .cs {\n    color: #999999;\n    font-weight: bold;\n    font-style: italic;\n  }\n\n  .highlight .gd {\n    color: #000000;\n    background-color: #ffdddd;\n  }\n\n  .highlight .gd .x {\n    color: #000000;\n    background-color: #ffaaaa;\n  }\n\n  .highlight .ge {\n    font-style: italic;\n  }\n\n  .highlight .gr {\n    color: #aa0000;\n  }\n\n  .highlight .gh {\n    color: #999999;\n  }\n\n  .highlight .gi {\n    color: #000000;\n    background-color: #ddffdd;\n  }\n\n  .highlight .gi .x {\n    color: #000000;\n    background-color: #aaffaa;\n  }\n\n  .highlight .go {\n    color: #888888;\n  }\n\n  .highlight .gp {\n    color: #555555;\n  }\n\n  .highlight .gs {\n    font-weight: bold;\n  }\n\n  .highlight .gu {\n    color: #800080;\n    font-weight: bold;\n  }\n\n  .highlight .gt {\n    color: #aa0000;\n  }\n\n  .highlight .kc {\n    font-weight: bold;\n  }\n\n  .highlight .kd {\n    font-weight: bold;\n  }\n\n  .highlight .kn {\n    font-weight: bold;\n  }\n\n  .highlight .kp {\n    font-weight: bold;\n  }\n\n  .highlight .kr {\n    font-weight: bold;\n  }\n\n  .highlight .kt {\n    color: #445588;\n    font-weight: bold;\n  }\n\n  .highlight .m {\n    color: #009999;\n  }\n\n  .highlight .s {\n    color: #dd1144;\n  }\n\n  .highlight .n {\n    color: #333333;\n  }\n\n  .highlight .na {\n    color: teal;\n  }\n\n  .highlight .nb {\n    color: #0086b3;\n  }\n\n  .highlight .nc {\n    color: #445588;\n    font-weight: bold;\n  }\n\n  .highlight .no {\n    color: teal;\n  }\n\n  .highlight .ni {\n    color: purple;\n  }\n\n  .highlight .ne {\n    color: #990000;\n    font-weight: bold;\n  }\n\n  .highlight .nf {\n    color: #990000;\n    font-weight: bold;\n  }\n\n  .highlight .nn {\n    color: #555555;\n  }\n\n  .highlight .nt {\n    color: navy;\n  }\n\n  .highlight .nv {\n    color: teal;\n  }\n\n  .highlight .ow {\n    font-weight: bold;\n  }\n\n  .highlight .w {\n    color: #bbbbbb;\n  }\n\n  .highlight .mf {\n    color: #009999;\n  }\n\n  .highlight .mh {\n    color: #009999;\n  }\n\n  .highlight .mi {\n    color: #009999;\n  }\n\n  .highlight .mo {\n    color: #009999;\n  }\n\n  .highlight .sb {\n    color: #dd1144;\n  }\n\n  .highlight .sc {\n    color: #dd1144;\n  }\n\n  .highlight .sd {\n    color: #dd1144;\n  }\n\n  .highlight .s2 {\n    color: #dd1144;\n  }\n\n  .highlight .se {\n    color: #dd1144;\n  }\n\n  .highlight .sh {\n    color: #dd1144;\n  }\n\n  .highlight .si {\n    color: #dd1144;\n  }\n\n  .highlight .sx {\n    color: #dd1144;\n  }\n\n  .highlight .sr {\n    color: #009926;\n  }\n\n  .highlight .s1 {\n    color: #dd1144;\n  }\n\n  .highlight .ss {\n    color: #990073;\n  }\n\n  .highlight .bp {\n    color: #999999;\n  }\n\n  .highlight .vc {\n    color: teal;\n  }\n\n  .highlight .vg {\n    color: teal;\n  }\n\n  .highlight .vi {\n    color: teal;\n  }\n\n  .highlight .il {\n    color: #009999;\n  }\n\n  .highlight .gc {\n    color: #999;\n    background-color: #EAF2F5;\n  }\n\n  pre.language-todo {\n\n    background: #fb6c53;\n    color: white;\n\n    code.language-todo {\n      color: white;\n      text-shadow: none;\n      font-weight: bold;\n    }\n  }\n}\n\n.markdown-reply {\n\n  h1,\n  h2,\n  h3,\n  h4,\n  h5,\n  h6 {\n    position: relative;\n    margin-top: .5em;\n    margin-bottom: 16px;\n    font-weight: bold;\n    line-height: 1.4;\n  }\n\n  h1 {\n    padding-bottom: 0.3em;\n    font-size: 1.4em;\n    line-height: 1.2;\n    border-bottom: 1px solid #eee;\n  }\n\n  h2 {\n    padding-bottom: 0.3em;\n    font-size: 1.25em;\n    line-height: 1.225;\n    border-bottom: 1px solid #eee;\n  }\n\n  h3 {\n    font-size: 1.2em;\n    line-height: 1.43;\n  }\n\n  h4 {\n    font-size: 1.1em;\n  }\n\n  h5 {\n    font-size: 1em;\n  }\n\n  h6 {\n    font-size: 1em;\n    color: #777;\n  }\n\n}\n\n.markdown-body > h2:first-child{\n  margin-top: 0.4em;\n}\n.markdown-body {\n\n  .ui.attached.block.header {\n    border: 1px solid #d3e0e9;\n  }\n}\n.ui.segments > .segment.markdown-body{\n  border-top: 0px;\n}\n\n.editor-preview-active-side pre > code {\n  font-size: 90%;\n}"
  },
  {
    "path": "resources/assets/sass/vendor/nprogress.scss",
    "content": "/* Make clicks pass-through */\n#nprogress {\n  pointer-events: none;\n}\n\n#nprogress .bar {\n  // background: #29d;\n  background: #29d;\n\n  position: fixed;\n  z-index: 1031;\n  top: 0;\n  left: 0;\n\n  width: 100%;\n  height: 3px;\n}\n\n/* Fancy blur effect */\n#nprogress .peg {\n  display: block;\n  position: absolute;\n  right: 0px;\n  width: 100px;\n  height: 100%;\n  box-shadow: 0 0 10px #29d, 0 0 5px #29d;\n  opacity: 1.0;\n\n  -webkit-transform: rotate(3deg) translate(0px, -4px);\n      -ms-transform: rotate(3deg) translate(0px, -4px);\n          transform: rotate(3deg) translate(0px, -4px);\n}\n\n/* Remove these to get rid of the spinner */\n#nprogress .spinner {\n  display: block;\n  position: fixed;\n  z-index: 1031;\n  top: 15px;\n  right: 15px;\n}\n\n#nprogress .spinner-icon {\n  width: 18px;\n  height: 18px;\n  box-sizing: border-box;\n\n  border: solid 2px transparent;\n  border-top-color: #29d;\n  border-left-color: #29d;\n  border-radius: 50%;\n\n  -webkit-animation: nprogress-spinner 400ms linear infinite;\n          animation: nprogress-spinner 400ms linear infinite;\n}\n\n.nprogress-custom-parent {\n  overflow: hidden;\n  position: relative;\n}\n\n.nprogress-custom-parent #nprogress .spinner,\n.nprogress-custom-parent #nprogress .bar {\n  position: absolute;\n}\n\n@-webkit-keyframes nprogress-spinner {\n  0%   { -webkit-transform: rotate(0deg); }\n  100% { -webkit-transform: rotate(360deg); }\n}\n@keyframes nprogress-spinner {\n  0%   { transform: rotate(0deg); }\n  100% { transform: rotate(360deg); }\n}\n"
  },
  {
    "path": "resources/assets/sass/vendor/reset-style.scss",
    "content": "$nav-top-border: #ff3b17;\n$notify-font-color: green;\n$global-info-btn-color: #01d18b;\n$global-color: #6435C9;\n$font-color: #fff;\n$default-font-color: #6435C9 !important;\n$body-color: #f3f3f4;\n$black: #000000;\n$gray-font: rgba(0, 0, 0, 0.4);\n$black-font: #525252;\n\n\nbody {\n  display: -webkit-box;\n  display: flex;\n  min-height: 100vh;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  flex-direction: column;\n  height: 100%;\n  color: #525252;\n  font-family: \"lato-regular\", \"Helvetica Neue\", Helvetica, Arial, \"Hiragino Sans GB\", \"Microsoft YaHei\", sans-serif;\n  background: #f3f3f4;\n  font-size: 14px;\n  position: relative;\n}\n#codehaoshi {\n  margin-bottom: 50px;\n}\n/*--------------\n     Footer\n---------------*/\n#footer {\n  -webkit-animation: fadein 3s; /* Safari, Chrome and Opera > 12.1 */\n  -moz-animation: fadein 3s; /* Firefox < 16 */\n  -ms-animation: fadein 3s; /* Internet Explorer */\n  -o-animation: fadein 3s; /* Opera < 12.1 */\n  animation: fadein 3s;\n}\n.pushable > .pusher {\n  min-height: auto!important;\n}\n\n@keyframes fadein {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n/* Firefox < 16 */\n@-moz-keyframes fadein {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n/* Safari, Chrome and Opera > 12.1 */\n@-webkit-keyframes fadein {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n/* Internet Explorer */\n@-ms-keyframes fadein {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n/* Opera < 12.1 */\n@-o-keyframes fadein {\n  from {\n    opacity: 0;\n  }\n  to {\n    opacity: 1;\n  }\n}\n\n.default-color {\n  background: $global-color !important;\n  color: $font-color !important;\n}\n\n.default-color-a {\n  color: $global-color !important;\n}\n\n.info-color-a {\n  color: $global-info-btn-color !important;\n}\n\n.default-font {\n  color: $default-font-color;\n}\n\nbody.pushable {\n  background: $body-color !important;\n  color: #636b6f;\n  font-family: Hiragino Sans GB, Helvetica, \"Microsoft YaHei\", \"Hiragino Sans GB\", Arial, sans-serif;\n}\n\nh1 {\n  font-size: 20px;\n  font-weight: normal;\n  margin-bottom: 20px;\n}\n\nh2 {\n  font-size: 1.2em;\n}\n\nli.tocify-item >a {\n  color: $black-font;\n}\na.no_marakdown {\n  color: $black-font;\n  text-decoration: none;\n}\n\na.no_marakdown:hover {\n  color: $black-font;\n}\n.ui.cards a.card:hover, .ui.link.cards .card:hover, a.ui.card:hover, .ui.link.card:hover {\n  cursor: auto;\n}\n\n.ui.divider {\n  color: $default-font-color !important;\n}\n\n.ui.vertical.divider:before, .ui.vertical.divider:after {\n  color: $default-font-color !important;\n}\n\n.ui.avatar.images .image, .ui.avatar.images img, .ui.avatar.images svg, .ui.avatar.image img, .ui.avatar.image svg, .ui.avatar.image {\n  margin-right: 0px !important;\n  padding-right: 0px !important;\n}\n\n.ui.list > .item a, .ui.list .list > .item a {\n  cursor: pointer;\n  line-height: 25px;\n}\n\n#scrollUp {\n  bottom: 20px;\n  right: 20px;\n  width: 38px;\n  height: 38px;\n  text-indent: -999999px;\n  background-image: url(/images/top.png);\n}\n\n.button {\n  color: $font-color !important;\n  font-weight: 100 !important;\n}\n\n.ginfo {\n  background-color: $global-info-btn-color !important;\n}\n\n.ui.items > .item > .image:not(.ui) {\n  width: auto;\n}\n\n.ui.secondary.segment {\n  background: $font-color;\n}\n\n.black-font {\n  color: $black-font !important;\n}\n\n.main.container .ui.statistics .statistic > .label, .main.container .ui.statistic > .label, .main.container .ui.statistics .statistic > .value, .main.container .ui.statistic > .value {\n  color: $global-info-btn-color;\n}\n\n"
  },
  {
    "path": "resources/assets/sass/vendor/simplemde.min.scss",
    "content": ".CodeMirror {\n    color: #000\n}\n.CodeMirror-lines {\n    padding: 4px 0\n}\n.CodeMirror pre {\n    padding: 0 4px\n}\n.CodeMirror-gutter-filler,\n.CodeMirror-scrollbar-filler {\n    background-color: #fff\n}\n.CodeMirror-gutters {\n    border-right: 1px solid #ddd;\n    background-color: #f7f7f7;\n    white-space: nowrap\n}\n.CodeMirror-linenumber {\n    padding: 0 3px 0 5px;\n    min-width: 20px;\n    text-align: right;\n    color: #999;\n    white-space: nowrap\n}\n.CodeMirror-guttermarker {\n    color: #000\n}\n.CodeMirror-guttermarker-subtle {\n    color: #999\n}\n.CodeMirror-cursor {\n    border-left: 1px solid #000;\n    border-right: none;\n    width: 0\n}\n.CodeMirror div.CodeMirror-secondarycursor {\n    border-left: 1px solid silver\n}\n.cm-fat-cursor .CodeMirror-cursor {\n    width: auto;\n    border: 0!important;\n    background: #7e7\n}\n.cm-fat-cursor div.CodeMirror-cursors {\n    z-index: 1\n}\n.cm-animate-fat-cursor {\n    width: auto;\n    border: 0;\n    -webkit-animation: blink 1.06s steps(1) infinite;\n    -moz-animation: blink 1.06s steps(1) infinite;\n    animation: blink 1.06s steps(1) infinite;\n    background-color: #7e7\n}\n@-moz-keyframes blink {\n    50% {\n        background-color: transparent\n    }\n}\n@-webkit-keyframes blink {\n    50% {\n        background-color: transparent\n    }\n}\n@keyframes blink {\n    50% {\n        background-color: transparent\n    }\n}\n.cm-tab {\n    display: inline-block;\n    text-decoration: inherit\n}\n.CodeMirror-ruler {\n    border-left: 1px solid #ccc;\n    position: absolute\n}\n.cm-s-default .cm-header {\n    color: #00f\n}\n.cm-s-default .cm-quote {\n    color: #090\n}\n.cm-negative {\n    color: #d44\n}\n.cm-positive {\n    color: #292\n}\n.cm-strong {\n    font-weight: 700\n}\n.cm-em {\n    font-style: italic\n}\n.cm-link {\n    text-decoration: underline\n}\n.cm-strikethrough {\n    text-decoration: line-through\n}\n.cm-s-default .cm-keyword {\n    color: #708\n}\n.cm-s-default .cm-atom {\n    color: #219\n}\n.cm-s-default .cm-number {\n    color: #164\n}\n.cm-s-default .cm-def {\n    color: #00f\n}\n.cm-s-default .cm-variable-2 {\n    color: #05a\n}\n.cm-s-default .cm-variable-3 {\n    color: #085\n}\n.cm-s-default .cm-comment {\n    color: #a50\n}\n.cm-s-default .cm-string {\n    color: #a11\n}\n.cm-s-default .cm-string-2 {\n    color: #f50\n}\n.cm-s-default .cm-meta,\n.cm-s-default .cm-qualifier {\n    color: #555\n}\n.cm-s-default .cm-builtin {\n    color: #30a\n}\n.cm-s-default .cm-bracket {\n    color: #997\n}\n.cm-s-default .cm-tag {\n    color: #170\n}\n.cm-s-default .cm-attribute {\n    color: #00c\n}\n.cm-s-default .cm-hr {\n    color: #999\n}\n.cm-s-default .cm-link {\n    color: #00c\n}\n.cm-invalidchar,\n.cm-s-default .cm-error {\n    color: red\n}\n.CodeMirror-composing {\n    border-bottom: 2px solid\n}\ndiv.CodeMirror span.CodeMirror-matchingbracket {\n    color: #0f0\n}\ndiv.CodeMirror span.CodeMirror-nonmatchingbracket {\n    color: #f22\n}\n.CodeMirror-matchingtag {\n    background: rgba(255, 150, 0, .3)\n}\n.CodeMirror-activeline-background {\n    background: #e8f2ff\n}\n.CodeMirror {\n    position: relative;\n    overflow: hidden;\n    background: #fff\n}\n.CodeMirror-scroll {\n    overflow: scroll!important;\n    margin-bottom: -30px;\n    margin-right: -30px;\n    padding-bottom: 30px;\n    height: 100%;\n    outline: 0;\n    position: relative\n}\n.CodeMirror-sizer {\n    position: relative;\n    border-right: 30px solid transparent\n}\n.CodeMirror-gutter-filler,\n.CodeMirror-hscrollbar,\n.CodeMirror-scrollbar-filler,\n.CodeMirror-vscrollbar {\n    position: absolute;\n    z-index: 6;\n    display: none\n}\n.CodeMirror-vscrollbar {\n    right: 0;\n    top: 0;\n    overflow-x: hidden;\n    overflow-y: scroll\n}\n.CodeMirror-hscrollbar {\n    bottom: 0;\n    left: 0;\n    overflow-y: hidden;\n    overflow-x: scroll\n}\n.CodeMirror-scrollbar-filler {\n    right: 0;\n    bottom: 0\n}\n.CodeMirror-gutter-filler {\n    left: 0;\n    bottom: 0\n}\n.CodeMirror-gutters {\n    position: absolute;\n    left: 0;\n    top: 0;\n    min-height: 100%;\n    z-index: 3\n}\n.CodeMirror-gutter {\n    white-space: normal;\n    height: 100%;\n    display: inline-block;\n    vertical-align: top;\n    margin-bottom: -30px\n}\n.CodeMirror-gutter-wrapper {\n    position: absolute;\n    z-index: 4;\n    background: 0 0!important;\n    border: none!important;\n    -webkit-user-select: none;\n    -moz-user-select: none;\n    user-select: none\n}\n.CodeMirror-gutter-background {\n    position: absolute;\n    top: 0;\n    bottom: 0;\n    z-index: 4\n}\n.CodeMirror-gutter-elt {\n    position: absolute;\n    cursor: default;\n    z-index: 4\n}\n.CodeMirror-lines {\n    cursor: text;\n    min-height: 1px\n}\n.CodeMirror pre {\n    -moz-border-radius: 0;\n    -webkit-border-radius: 0;\n    border-radius: 0;\n    border-width: 0;\n    background: 0 0;\n    font-family: inherit;\n    font-size: 16px;\n    margin: 0;\n    white-space: pre;\n    word-wrap: normal;\n    line-height: 30px;\n    color: inherit;\n    z-index: 2;\n    position: relative;\n    overflow: visible;\n    -webkit-tap-highlight-color: transparent;\n    -webkit-font-variant-ligatures: none;\n    font-variant-ligatures: none\n}\n.CodeMirror-wrap pre {\n    word-wrap: break-word;\n    white-space: pre-wrap;\n    word-break: normal\n}\n.CodeMirror-linebackground {\n    position: absolute;\n    left: 0;\n    right: 0;\n    top: 0;\n    bottom: 0;\n    z-index: 0\n}\n.CodeMirror-linewidget {\n    position: relative;\n    z-index: 2;\n    overflow: auto\n}\n.CodeMirror-code {\n    outline: 0\n}\n.CodeMirror-gutter,\n.CodeMirror-gutters,\n.CodeMirror-linenumber,\n.CodeMirror-scroll,\n.CodeMirror-sizer {\n    -moz-box-sizing: content-box;\n    box-sizing: content-box\n}\n.CodeMirror-measure {\n    position: absolute;\n    width: 100%;\n    height: 0;\n    overflow: hidden;\n    visibility: hidden\n}\n.CodeMirror-cursor {\n    position: absolute\n}\n.CodeMirror-measure pre {\n    position: static\n}\ndiv.CodeMirror-cursors {\n    visibility: hidden;\n    position: relative;\n    z-index: 3\n}\n.CodeMirror-focused div.CodeMirror-cursors,\ndiv.CodeMirror-dragcursors {\n    visibility: visible\n}\n.CodeMirror-selected {\n    background: #d9d9d9\n}\n.CodeMirror-focused .CodeMirror-selected,\n.CodeMirror-line::selection,\n.CodeMirror-line>span::selection,\n.CodeMirror-line>span>span::selection {\n    background: #d7d4f0\n}\n.CodeMirror-crosshair {\n    cursor: crosshair\n}\n.CodeMirror-line::-moz-selection,\n.CodeMirror-line>span::-moz-selection,\n.CodeMirror-line>span>span::-moz-selection {\n    background: #d7d4f0\n}\n.cm-searching {\n    background: #ffa;\n    background: rgba(255, 255, 0, .4)\n}\n.cm-force-border {\n    padding-right: .1px\n}\n@media print {\n    .CodeMirror div.CodeMirror-cursors {\n        visibility: hidden\n    }\n}\n.cm-tab-wrap-hack:after {\n    content: ''\n}\nspan.CodeMirror-selectedtext {\n    background: 0 0\n}\n.CodeMirror {\n    height: auto;\n    min-height: 300px;\n    border: 1px solid #ddd;\n    border-bottom-left-radius: 4px;\n    border-bottom-right-radius: 4px;\n    padding: 10px;\n    font: inherit;\n    z-index: 1\n}\n.CodeMirror-scroll {\n    min-height: 300px\n}\n.CodeMirror-fullscreen {\n    background: #fff;\n    position: fixed!important;\n    top: 50px;\n    left: 0;\n    right: 0;\n    bottom: 0;\n    height: auto;\n    z-index: 9\n}\n.CodeMirror-sided {\n    width: 50%!important\n}\n.editor-toolbar {\n    position: relative;\n    opacity: .6;\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    padding: 0 10px;\n    border-top: 1px solid #bbb;\n    border-left: 1px solid #bbb;\n    border-right: 1px solid #bbb;\n    border-top-left-radius: 4px;\n    border-top-right-radius: 4px\n}\n.editor-toolbar:after,\n.editor-toolbar:before {\n    display: block;\n    content: ' ';\n    height: 1px\n}\n.editor-toolbar:before {\n    margin-bottom: 8px\n}\n.editor-toolbar:after {\n    margin-top: 8px\n}\n.editor-toolbar:hover,\n.editor-wrapper input.title:focus,\n.editor-wrapper input.title:hover {\n    opacity: .8\n}\n.editor-toolbar.fullscreen {\n    width: 100%;\n    height: 50px;\n    overflow-x: auto;\n    overflow-y: hidden;\n    white-space: nowrap;\n    padding-top: 10px;\n    padding-bottom: 10px;\n    box-sizing: border-box;\n    background: #fff;\n    border: 0;\n    position: fixed;\n    top: 0;\n    left: 0;\n    opacity: 1;\n    z-index: 9\n}\n.editor-toolbar.fullscreen::before {\n    width: 20px;\n    height: 50px;\n    background: -moz-linear-gradient(left, rgba(255, 255, 255, 1) 0, rgba(255, 255, 255, 0) 100%);\n    background: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(255, 255, 255, 1)), color-stop(100%, rgba(255, 255, 255, 0)));\n    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 1) 0, rgba(255, 255, 255, 0) 100%);\n    background: -o-linear-gradient(left, rgba(255, 255, 255, 1) 0, rgba(255, 255, 255, 0) 100%);\n    background: -ms-linear-gradient(left, rgba(255, 255, 255, 1) 0, rgba(255, 255, 255, 0) 100%);\n    background: linear-gradient(to right, rgba(255, 255, 255, 1) 0, rgba(255, 255, 255, 0) 100%);\n    position: fixed;\n    top: 0;\n    left: 0;\n    margin: 0;\n    padding: 0\n}\n.editor-toolbar.fullscreen::after {\n    width: 20px;\n    height: 50px;\n    background: -moz-linear-gradient(left, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 1) 100%);\n    background: -webkit-gradient(linear, left top, right top, color-stop(0, rgba(255, 255, 255, 0)), color-stop(100%, rgba(255, 255, 255, 1)));\n    background: -webkit-linear-gradient(left, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 1) 100%);\n    background: -o-linear-gradient(left, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 1) 100%);\n    background: -ms-linear-gradient(left, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 1) 100%);\n    background: linear-gradient(to right, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 1) 100%);\n    position: fixed;\n    top: 0;\n    right: 0;\n    margin: 0;\n    padding: 0\n}\n.editor-toolbar a {\n    display: inline-block;\n    text-align: center;\n    text-decoration: none!important;\n    color: #2c3e50!important;\n    width: 30px;\n    height: 30px;\n    margin: 0;\n    border: 1px solid transparent;\n    border-radius: 3px;\n    cursor: pointer\n}\n.editor-toolbar a.active,\n.editor-toolbar a:hover {\n    background: #fcfcfc;\n    border-color: #95a5a6\n}\n.editor-toolbar a:before {\n    line-height: 30px\n}\n.editor-toolbar i.separator {\n    display: inline-block;\n    width: 0;\n    border-left: 1px solid #d9d9d9;\n    border-right: 1px solid #fff;\n    color: transparent;\n    text-indent: -10px;\n    margin: 0 6px\n}\n.editor-toolbar a.fa-header-x:after {\n    font-family: Arial, \"Helvetica Neue\", Helvetica, sans-serif;\n    font-size: 65%;\n    vertical-align: text-bottom;\n    position: relative;\n    top: 2px\n}\n.editor-toolbar a.fa-header-1:after {\n    content: \"1\"\n}\n.editor-toolbar a.fa-header-2:after {\n    content: \"2\"\n}\n.editor-toolbar a.fa-header-3:after {\n    content: \"3\"\n}\n.editor-toolbar a.fa-header-bigger:after {\n    content: \"▲\"\n}\n.editor-toolbar a.fa-header-smaller:after {\n    content: \"▼\"\n}\n.editor-toolbar.disabled-for-preview a:not(.no-disable) {\n    pointer-events: none;\n    background: #fff;\n    border-color: transparent;\n    text-shadow: inherit\n}\n@media only screen and (max-width: 700px) {\n    .editor-toolbar a.no-mobile {\n        display: none\n    }\n}\n.editor-statusbar {\n    padding: 8px 10px;\n    font-size: 12px;\n    color: #959694;\n    text-align: right\n}\n.editor-statusbar span {\n    display: inline-block;\n    min-width: 4em;\n    margin-left: 1em\n}\n.editor-preview,\n.editor-preview-side {\n    padding: 30px;\n    background: #fff;\n    overflow: auto;\n    display: none;\n    box-sizing: border-box\n}\n.editor-statusbar .lines:before {\n    content: 'lines: '\n}\n.editor-statusbar .words:before {\n    content: 'words: '\n}\n.editor-statusbar .characters:before {\n    content: 'characters: '\n}\n.editor-preview {\n    position: absolute;\n    width: 100%;\n    height: 100%;\n    top: 0;\n    left: 0;\n    z-index: 7\n}\n.editor-preview-side {\n    position: fixed;\n    bottom: 0;\n    width: 50%;\n    top: 50px;\n    right: 0;\n    z-index: 9;\n    border: 1px solid #ddd\n}\n.editor-preview-active,\n.editor-preview-active-side {\n    display: block\n}\n.editor-preview-side>p,\n.editor-preview>p {\n    margin-top: 0\n}\n.editor-preview pre,\n.editor-preview-side pre {\n    background: #3a3a3a;\n    margin-bottom: 10px\n}\n.editor-preview table td,\n.editor-preview table th,\n.editor-preview-side table td,\n.editor-preview-side table th {\n    border: 1px solid #ddd;\n    padding: 5px\n}\n.CodeMirror .CodeMirror-code .cm-tag {\n    color: #63a35c\n}\n.CodeMirror .CodeMirror-code .cm-attribute {\n    color: #795da3\n}\n.CodeMirror .CodeMirror-code .cm-string {\n    color: #183691\n}\n.CodeMirror .CodeMirror-selected {\n    background: #d9d9d9\n}\n.CodeMirror .CodeMirror-code .cm-header-1 {\n    font-size: 110%;\n    font-weight: bold;\n    color: #0aa4d8;\n    line-height: 200%\n}\n.CodeMirror .CodeMirror-code .cm-header-2 {\n    line-height: 160%;\n    font-size: 110%;\n    font-weight: bold;\n    color: #0aa4d8;\n}\n.CodeMirror .CodeMirror-code .cm-header-3 {\n    font-size: 105%;\n    font-weight: bold;\n    color: #0aa4d8;\n    line-height: 125%;\n}\n.CodeMirror .CodeMirror-code .cm-header-4 {\n    font-size: 102%;\n    font-weight: bold;\n    color: #0aa4d8;\n    line-height: 110%;\n}\n.CodeMirror .CodeMirror-code .cm-header-5 {\n    font-size: 100%;\n    font-weight: bold;\n    color: #0aa4d8;\n    line-height: 110%\n}\n.CodeMirror .CodeMirror-code .cm-header-6 {\n    font-size: 100%;\n    font-weight: bold;\n    color: #0aa4d8;\n    line-height: 110%\n}\n.CodeMirror .CodeMirror-code .cm-comment {\n    background: none;\n    border-radius: 2px;\n    color: #0aa4d8;\n}\n.CodeMirror .CodeMirror-code .cm-link {\n    color: #7f8c8d\n}\n.CodeMirror .CodeMirror-code .cm-url {\n    color: #aab2b3\n}\n.CodeMirror .CodeMirror-code .cm-strikethrough {\n    text-decoration: line-through\n}\n.CodeMirror .CodeMirror-placeholder {\n    opacity: .5\n}\n.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word) {\n    background: rgba(255, 0, 0, .15)\n}\n"
  },
  {
    "path": "resources/assets/sass/vendor/sweetalert.scss",
    "content": "// SweetAlert2\n// github.com/limonte/sweetalert2\n\n$white: #fff;\n$black: #000;\n$roman: #d55;\n$sienna: #f06e57;\n$tulip: #c4e6f5;\n$spindle: #b4dbed;\n$apricot: #ea7d7d;\n$corn: #f8d486;\n$manhattan: #f8bb86;\n\n$success:  #a5dc86;\n$error:    #f27474;\n$warning:  #f8bb86;\n$info:     #3fc3ee;\n$question: #87adbd;\n$success-border: rgba($success, .2);\n\n$overlay: rgba($black, .4);\n$input-box-shadow: rgba($black, .06);\n\n$transparent: rgba($black, 0);\n\nbody {\n  &.swal2-shown {\n    overflow-y: hidden;\n  }\n\n  &.swal2-iosfix {\n    position: fixed;\n    left: 0;\n    right: 0;\n  }\n}\n\n.swal2-container {\n  // centering\n  display: flex;\n  align-items: center;\n  position: fixed;\n  top: 0;\n  left: 0;\n  bottom: 0;\n  right: 0;\n  padding: 10px;\n\n  // backdrop\n  background-color: transparent;\n\n  z-index: 1060;\n\n  &.swal2-fade {\n    transition: background-color .1s;\n  }\n\n  &.swal2-shown {\n    background-color: $overlay;\n  }\n}\n\n.swal2-modal {\n  background-color: $white;\n  font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n  border-radius: 5px;\n  box-sizing: border-box;\n  text-align: center;\n  margin: auto;\n  overflow-x: hidden;\n  overflow-y: auto;\n  display: none;\n  position: relative;\n\n  &:focus {\n    outline: none;\n  }\n\n  &.swal2-loading {\n    overflow-y: hidden;\n  }\n\n  .swal2-title {\n    color: lighten($black, 35);\n    font-size: 30px;\n    text-align: center;\n    font-weight: 600;\n    text-transform: none;\n    position: relative;\n    margin: 0 0 .4em;\n    padding: 0;\n    display: block;\n  }\n\n  .swal2-spacer {\n    height: 10px;\n    color: transparent;\n    border: 0;\n  }\n\n  .swal2-styled {\n    border: 0;\n    border-radius: 3px;\n    box-shadow: none;\n    color: $white;\n    cursor: pointer;\n    font-size: 17px;\n    font-weight: 500;\n    margin: 0 5px;\n    padding: 10px 32px;\n\n    &:not(.swal2-loading) {\n      &[disabled] {\n        opacity: .4;\n        cursor: no-drop;\n      }\n    }\n\n    &.swal2-loading {\n      box-sizing: border-box;\n      border: 4px solid transparent;\n      border-color: transparent;\n      width: 40px;\n      height: 40px;\n      padding: 0;\n      margin: -2px 30px;\n      vertical-align: top;\n      background-color: transparent !important;\n      color: transparent;\n      cursor: default;\n      border-radius: 100%;\n      animation: rotate-loading 1.5s linear 0s infinite normal;\n      user-select: none;\n    }\n  }\n\n  .swal2-styled + .swal2-styled {\n    margin-top: 15px;\n  }\n\n  :not(.swal2-styled) {\n    &.swal2-loading {\n      &::after {\n        display: inline-block;\n        content: '';\n        margin-left: 5px;\n        vertical-align: -1px;\n        height: 6px;\n        width: 6px;\n        border: 3px solid lighten($black, 60);\n        border-right-color: transparent;\n        border-radius: 50%;\n        animation: rotate-loading 1.5s linear 0s infinite normal;\n      }\n    }\n  }\n\n  .swal2-image {\n    margin: 20px auto;\n    max-width: 100%;\n  }\n\n  .swal2-close {\n    font-size: 36px;\n    line-height: 36px;\n    font-family: serif;\n    position: absolute;\n    top: 5px;\n    right: 13px;\n    cursor: pointer;\n    color: lighten($black, 80);\n    transition: color .1s ease;\n\n    &:hover {\n      color: $roman;\n    }\n  }\n\n  > .swal2-input,\n  > .swal2-file,\n  > .swal2-textarea,\n  > .swal2-select,\n  > .swal2-radio,\n  > .swal2-checkbox {\n    display: none;\n  }\n\n  .swal2-content {\n    font-size: 18px;\n    text-align: center;\n    font-weight: 300;\n    position: relative;\n    float: none;\n    margin: 0;\n    padding: 0;\n    line-height: normal;\n    color: lighten($black, 33);\n  }\n\n  .swal2-input,\n  .swal2-file,\n  .swal2-textarea,\n  .swal2-select,\n  .swal2-radio,\n  .swal2-checkbox {\n    margin: 20px auto;\n  }\n\n  .swal2-input,\n  .swal2-file,\n  .swal2-textarea {\n    width: 100%;\n    box-sizing: border-box;\n    border-radius: 3px;\n    border: 1px solid lighten($black, 85);\n    font-size: 18px;\n    box-shadow: inset 0 1px 1px $input-box-shadow;\n    transition: border-color box-shadow .3s;\n\n    &.swal2-inputerror {\n      border-color: $sienna !important;\n    }\n\n    &:focus {\n      outline: none;\n      box-shadow: 0 0 3px $tulip;\n      border: 1px solid $spindle;\n\n      &::placeholder {\n        transition: opacity .3s .03s ease;\n        opacity: .8;\n      }\n    }\n\n    &::placeholder {\n      color: lighten($black, 90);\n    }\n  }\n\n  .swal2-range {\n    input {\n      float: left;\n      width: 80%;\n    }\n\n    output {\n      float: right;\n      width: 20%;\n      font-size: 20px;\n      font-weight: 600;\n      text-align: center;\n    }\n\n    input,\n    output {\n      height: 43px;\n      line-height: 43px;\n      vertical-align: middle;\n      margin: 20px auto;\n      padding: 0;\n    }\n  }\n\n  .swal2-input {\n    height: 43px;\n    padding: 0 12px;\n\n    &[type='number'] {\n      max-width: 150px;\n    }\n  }\n\n  .swal2-file {\n    font-size: 20px;\n  }\n\n  .swal2-textarea {\n    height: 108px;\n    padding: 12px;\n  }\n\n  .swal2-select {\n    color: lighten($black, 33);\n    font-size: inherit;\n    padding: 5px 10px;\n    min-width: 40%;\n    max-width: 100%;\n  }\n\n  .swal2-radio {\n    border: 0;\n\n    label {\n      &:not(:first-child) {\n        margin-left: 20px;\n      }\n    }\n\n    input,\n    span {\n      vertical-align: middle;\n    }\n\n    input {\n      margin: 0 3px 0 0;\n    }\n  }\n\n  .swal2-checkbox {\n    color: lighten($black, 33);\n\n    input,\n    span {\n      vertical-align: middle;\n    }\n  }\n\n  .swal2-validationerror {\n    background-color: lighten($black, 94);\n    margin: 0 -20px;\n    overflow: hidden;\n    padding: 10px;\n    color: lighten($black, 50);\n    font-size: 16px;\n    font-weight: 300;\n    display: none;\n\n    &::before {\n      content: '!';\n      display: inline-block;\n      width: 24px;\n      height: 24px;\n      border-radius: 50%;\n      background-color: $apricot;\n      color: $white;\n      line-height: 24px;\n      text-align: center;\n      margin-right: 10px;\n    }\n  }\n}\n\n@supports (-ms-accelerator: true) {\n  .swal2-range {\n    input {\n      width: 100% !important;\n    }\n\n    output {\n      display: none;\n    }\n  }\n}\n\n@media all and (-ms-high-contrast: none), (-ms-high-contrast: active) {\n  .swal2-range {\n    input {\n      width: 100% !important;\n    }\n\n    output {\n      display: none;\n    }\n  }\n}\n\n.swal2-icon {\n  width: 80px;\n  height: 80px;\n  border: 4px solid transparent;\n  border-radius: 50%;\n  margin: 20px auto 30px;\n  padding: 0;\n  position: relative;\n  box-sizing: content-box;\n  cursor: default;\n  user-select: none;\n\n  &.swal2-error {\n    border-color: $error;\n\n    .x-mark {\n      position: relative;\n      display: block;\n    }\n\n    .line {\n      position: absolute;\n      height: 5px;\n      width: 47px;\n      background-color: $error;\n      display: block;\n      top: 37px;\n      border-radius: 2px;\n\n      &.left {\n        transform: rotate(45deg);\n        left: 17px;\n      }\n\n      &.right {\n        transform: rotate(-45deg);\n        right: 16px;\n      }\n    }\n  }\n\n  &.swal2-warning {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n    color: $warning;\n    border-color: lighten($warning, 7);\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center;\n  }\n\n  &.swal2-info {\n    font-family: 'Open Sans', sans-serif;\n    color: $info;\n    border-color: lighten($info, 20);\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center;\n  }\n\n  &.swal2-question {\n    font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif;\n    color: $question;\n    border-color: lighten($question, 20);\n    font-size: 60px;\n    line-height: 80px;\n    text-align: center;\n  }\n\n  &.swal2-success {\n    border-color: $success;\n\n    &::before,\n    &::after { // Emulate moving circular line\n      content: '';\n      border-radius: 50%;\n      position: absolute;\n      width: 60px;\n      height: 120px;\n      background: $white;\n      transform: rotate(45deg);\n    }\n\n    &::before {\n      border-radius: 120px 0 0 120px;\n      top: -7px;\n      left: -33px;\n\n      transform: rotate(-45deg);\n      transform-origin: 60px 60px;\n    }\n\n    &::after {\n      border-radius: 0 120px 120px 0;\n      top: -11px;\n      left: 30px;\n\n      transform: rotate(-45deg);\n      transform-origin: 0 60px;\n    }\n\n    .placeholder { // Ring\n      width: 80px;\n      height: 80px;\n      border: 4px solid $success-border;\n      border-radius: 50%;\n      box-sizing: content-box;\n\n      position: absolute;\n      left: -4px;\n      top: -4px;\n      z-index: 2;\n    }\n\n    .fix { // Hide corners left from animation\n      width: 7px;\n      height: 90px;\n      background-color: $white;\n\n      position: absolute;\n      left: 28px;\n      top: 8px;\n      z-index: 1;\n\n      transform: rotate(-45deg);\n    }\n\n    .line {\n      height: 5px;\n      background-color: $success;\n      display: block;\n      border-radius: 2px;\n\n      position: absolute;\n      z-index: 2;\n\n      &.tip {\n        width: 25px;\n\n        left: 14px;\n        top: 46px;\n\n        transform: rotate(45deg);\n      }\n\n      &.long {\n        width: 47px;\n\n        right: 8px;\n        top: 38px;\n\n        transform: rotate(-45deg);\n      }\n    }\n  }\n}\n\n.swal2-progresssteps {\n  $lightblue: #add8e6;\n  $blue: #3085d6;\n\n  font-weight: 600;\n  margin: 0 0 20px;\n  padding: 0;\n\n  li {\n    display: inline-block;\n    position: relative;\n  }\n\n  .swal2-progresscircle {\n    background: $blue;\n    border-radius: 2em;\n    color: $white;\n    height: 2em;\n    line-height: 2em;\n    text-align: center;\n    width: 2em;\n    z-index: 20;\n\n    &:first-child {\n      margin-left: 0;\n    }\n\n    &:last-child {\n      margin-right: 0;\n    }\n\n    &.swal2-activeprogressstep {\n      background: $blue;\n\n      ~ .swal2-progresscircle {\n        background: $lightblue;\n      }\n\n      ~ .swal2-progressline {\n        background: $lightblue;\n      }\n    }\n  }\n\n  .swal2-progressline {\n    background: $blue;\n    height: .4em;\n    margin: 0 -1px;\n    z-index: 10;\n  }\n}\n\n\n// github.com/limonte/sweetalert2/issues/268\n[class^='swal2'] {\n  -webkit-tap-highlight-color: $transparent;\n}\n\n// Animations\n\n@mixin keyframes($animation-name) {\n  @keyframes #{$animation-name} {\n    @content;\n  }\n}\n\n@mixin animation($str) {\n  animation: #{$str};\n}\n\n\n// Modal animation\n\n@include keyframes(showSweetAlert) {\n  0% {\n    transform: scale(.7);\n  }\n\n  45% {\n    transform: scale(1.05);\n  }\n\n  80% {\n    transform: scale(.95);\n  }\n\n  100% {\n    transform: scale(1);\n  }\n}\n\n@include keyframes(hideSweetAlert) {\n  0% {\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  100% {\n    transform: scale(.5);\n    opacity: 0;\n  }\n}\n\n.swal2-show {\n  @include animation('showSweetAlert 0.3s');\n\n  &.swal2-noanimation {\n    @include animation('none');\n  }\n}\n\n.swal2-hide {\n  @include animation('hideSweetAlert 0.15s forwards');\n\n  &.swal2-noanimation {\n    @include animation('none');\n  }\n}\n\n\n\n// Success icon animation\n\n@include keyframes(animate-success-tip) {\n  0% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n\n  54% {\n    width: 0;\n    left: 1px;\n    top: 19px;\n  }\n\n  70% {\n    width: 50px;\n    left: -8px;\n    top: 37px;\n  }\n\n  84% {\n    width: 17px;\n    left: 21px;\n    top: 48px;\n  }\n\n  100% {\n    width: 25px;\n    left: 14px;\n    top: 45px;\n  }\n}\n\n@include keyframes(animate-success-long) {\n  0% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n\n  65% {\n    width: 0;\n    right: 46px;\n    top: 54px;\n  }\n\n  84% {\n    width: 55px;\n    right: 0;\n    top: 35px;\n  }\n\n  100% {\n    width: 47px;\n    right: 8px;\n    top: 38px;\n  }\n}\n\n@include keyframes(rotatePlaceholder) {\n  0% {\n    transform: rotate(-45deg);\n  }\n\n  5% {\n    transform: rotate(-45deg);\n  }\n\n  12% {\n    transform: rotate(-405deg);\n  }\n\n  100% {\n    transform: rotate(-405deg);\n  }\n}\n\n.animate-success-tip {\n  @include animation('animate-success-tip 0.75s');\n}\n\n.animate-success-long {\n  @include animation('animate-success-long 0.75s');\n}\n\n.swal2-success {\n  &.animate {\n    &::after {\n      @include animation('rotatePlaceholder 4.25s ease-in');\n    }\n  }\n}\n\n\n// Error icon animation\n\n@include keyframes(animate-error-icon) {\n  0% {\n    transform: rotateX(100deg);\n    opacity: 0;\n  }\n\n  100% {\n    transform: rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n.animate-error-icon {\n  @include animation('animate-error-icon 0.5s');\n}\n\n@include keyframes(animate-x-mark) {\n  0% {\n    transform: scale(.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n\n  50% {\n    transform: scale(.4);\n    margin-top: 26px;\n    opacity: 0;\n  }\n\n  80% {\n    transform: scale(1.15);\n    margin-top: -6px;\n  }\n\n  100% {\n    transform: scale(1);\n    margin-top: 0;\n    opacity: 1;\n  }\n}\n\n.animate-x-mark {\n  @include animation('animate-x-mark 0.5s');\n}\n\n@include keyframes(pulse-warning) {\n  0% {\n    border-color: $corn;\n  }\n\n  100% {\n    border-color: $manhattan;\n  }\n}\n\n.pulse-warning {\n  @include animation('pulse-warning 0.75s infinite alternate');\n}\n\n@include keyframes(rotate-loading) {\n  0% {\n    transform: rotate(0deg);\n  }\n\n  100% {\n    transform: rotate(360deg);\n  }\n}"
  },
  {
    "path": "resources/assets/sass/vendor/toastr.min.scss",
    "content": ".toast-title {\n  font-weight: 700\n}\n\n.toast-message {\n  -ms-word-wrap: break-word;\n  word-wrap: break-word\n}\n\n.toast-message a, .toast-message label {\n  color: #fff\n}\n\n.toast-message a:hover {\n  color: #ccc;\n  text-decoration: none\n}\n\n.toast-close-button {\n  position: relative;\n  right: -.3em;\n  top: -.3em;\n  float: right;\n  font-size: 20px;\n  font-weight: 700;\n  color: #fff;\n  -webkit-text-shadow: 0 1px 0 #fff;\n  text-shadow: 0 1px 0 #fff;\n  opacity: .8;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n  filter: alpha(opacity=80)\n}\n\n.toast-close-button:focus, .toast-close-button:hover {\n  color: #000;\n  text-decoration: none;\n  cursor: pointer;\n  opacity: .4;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n  filter: alpha(opacity=40)\n}\n\nbutton.toast-close-button {\n  padding: 0;\n  cursor: pointer;\n  background: 0 0;\n  border: 0;\n  -webkit-appearance: none\n}\n\n.toast-top-center {\n  top: 0;\n  right: 0;\n  width: 100%\n}\n\n.toast-bottom-center {\n  bottom: 0;\n  right: 0;\n  width: 100%\n}\n\n.toast-top-full-width {\n  top: 0;\n  right: 0;\n  width: 100%\n}\n\n.toast-bottom-full-width {\n  bottom: 0;\n  right: 0;\n  width: 100%\n}\n\n.toast-top-left {\n  top: 12px;\n  left: 12px\n}\n\n.toast-top-right {\n  top: 12px;\n  right: 12px\n}\n\n.toast-bottom-right {\n  right: 12px;\n  bottom: 12px\n}\n\n.toast-bottom-left {\n  bottom: 12px;\n  left: 12px\n}\n\n#toast-container {\n  position: fixed;\n  z-index: 999999;\n  pointer-events: none\n}\n\n#toast-container * {\n  -moz-box-sizing: border-box;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box\n}\n\n#toast-container > div {\n  position: relative;\n  pointer-events: auto;\n  overflow: hidden;\n  margin: 0 0 6px;\n  padding: 15px 15px 15px 50px;\n  width: 300px;\n  -moz-border-radius: 3px;\n  -webkit-border-radius: 3px;\n  border-radius: 3px;\n  background-position: 15px center;\n  background-repeat: no-repeat;\n  -moz-box-shadow: 0 0 12px #999;\n  -webkit-box-shadow: 0 0 12px #999;\n  box-shadow: 0 0 12px #999;\n  color: #fff;\n  opacity: .8;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=80);\n  filter: alpha(opacity=80)\n}\n\n#toast-container > :hover {\n  -moz-box-shadow: 0 0 12px #000;\n  -webkit-box-shadow: 0 0 12px #000;\n  box-shadow: 0 0 12px #000;\n  opacity: 1;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=100);\n  filter: alpha(opacity=100);\n  cursor: pointer\n}\n\n#toast-container > .toast-info {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGwSURBVEhLtZa9SgNBEMc9sUxxRcoUKSzSWIhXpFMhhYWFhaBg4yPYiWCXZxBLERsLRS3EQkEfwCKdjWJAwSKCgoKCcudv4O5YLrt7EzgXhiU3/4+b2ckmwVjJSpKkQ6wAi4gwhT+z3wRBcEz0yjSseUTrcRyfsHsXmD0AmbHOC9Ii8VImnuXBPglHpQ5wwSVM7sNnTG7Za4JwDdCjxyAiH3nyA2mtaTJufiDZ5dCaqlItILh1NHatfN5skvjx9Z38m69CgzuXmZgVrPIGE763Jx9qKsRozWYw6xOHdER+nn2KkO+Bb+UV5CBN6WC6QtBgbRVozrahAbmm6HtUsgtPC19tFdxXZYBOfkbmFJ1VaHA1VAHjd0pp70oTZzvR+EVrx2Ygfdsq6eu55BHYR8hlcki+n+kERUFG8BrA0BwjeAv2M8WLQBtcy+SD6fNsmnB3AlBLrgTtVW1c2QN4bVWLATaIS60J2Du5y1TiJgjSBvFVZgTmwCU+dAZFoPxGEEs8nyHC9Bwe2GvEJv2WXZb0vjdyFT4Cxk3e/kIqlOGoVLwwPevpYHT+00T+hWwXDf4AJAOUqWcDhbwAAAAASUVORK5CYII=) !important\n}\n\n#toast-container > .toast-error {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAHOSURBVEhLrZa/SgNBEMZzh0WKCClSCKaIYOED+AAKeQQLG8HWztLCImBrYadgIdY+gIKNYkBFSwu7CAoqCgkkoGBI/E28PdbLZmeDLgzZzcx83/zZ2SSXC1j9fr+I1Hq93g2yxH4iwM1vkoBWAdxCmpzTxfkN2RcyZNaHFIkSo10+8kgxkXIURV5HGxTmFuc75B2RfQkpxHG8aAgaAFa0tAHqYFfQ7Iwe2yhODk8+J4C7yAoRTWI3w/4klGRgR4lO7Rpn9+gvMyWp+uxFh8+H+ARlgN1nJuJuQAYvNkEnwGFck18Er4q3egEc/oO+mhLdKgRyhdNFiacC0rlOCbhNVz4H9FnAYgDBvU3QIioZlJFLJtsoHYRDfiZoUyIxqCtRpVlANq0EU4dApjrtgezPFad5S19Wgjkc0hNVnuF4HjVA6C7QrSIbylB+oZe3aHgBsqlNqKYH48jXyJKMuAbiyVJ8KzaB3eRc0pg9VwQ4niFryI68qiOi3AbjwdsfnAtk0bCjTLJKr6mrD9g8iq/S/B81hguOMlQTnVyG40wAcjnmgsCNESDrjme7wfftP4P7SP4N3CJZdvzoNyGq2c/HWOXJGsvVg+RA/k2MC/wN6I2YA2Pt8GkAAAAASUVORK5CYII=) !important\n}\n\n#toast-container > .toast-success {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAADsSURBVEhLY2AYBfQMgf///3P8+/evAIgvA/FsIF+BavYDDWMBGroaSMMBiE8VC7AZDrIFaMFnii3AZTjUgsUUWUDA8OdAH6iQbQEhw4HyGsPEcKBXBIC4ARhex4G4BsjmweU1soIFaGg/WtoFZRIZdEvIMhxkCCjXIVsATV6gFGACs4Rsw0EGgIIH3QJYJgHSARQZDrWAB+jawzgs+Q2UO49D7jnRSRGoEFRILcdmEMWGI0cm0JJ2QpYA1RDvcmzJEWhABhD/pqrL0S0CWuABKgnRki9lLseS7g2AlqwHWQSKH4oKLrILpRGhEQCw2LiRUIa4lwAAAABJRU5ErkJggg==) !important\n}\n\n#toast-container > .toast-warning {\n  background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABgAAAAYCAYAAADgdz34AAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAGYSURBVEhL5ZSvTsNQFMbXZGICMYGYmJhAQIJAICYQPAACiSDB8AiICQQJT4CqQEwgJvYASAQCiZiYmJhAIBATCARJy+9rTsldd8sKu1M0+dLb057v6/lbq/2rK0mS/TRNj9cWNAKPYIJII7gIxCcQ51cvqID+GIEX8ASG4B1bK5gIZFeQfoJdEXOfgX4QAQg7kH2A65yQ87lyxb27sggkAzAuFhbbg1K2kgCkB1bVwyIR9m2L7PRPIhDUIXgGtyKw575yz3lTNs6X4JXnjV+LKM/m3MydnTbtOKIjtz6VhCBq4vSm3ncdrD2lk0VgUXSVKjVDJXJzijW1RQdsU7F77He8u68koNZTz8Oz5yGa6J3H3lZ0xYgXBK2QymlWWA+RWnYhskLBv2vmE+hBMCtbA7KX5drWyRT/2JsqZ2IvfB9Y4bWDNMFbJRFmC9E74SoS0CqulwjkC0+5bpcV1CZ8NMej4pjy0U+doDQsGyo1hzVJttIjhQ7GnBtRFN1UarUlH8F3xict+HY07rEzoUGPlWcjRFRr4/gChZgc3ZL2d8oAAAAASUVORK5CYII=) !important\n}\n\n#toast-container.toast-bottom-center > div, #toast-container.toast-top-center > div {\n  width: 300px;\n  margin-left: auto;\n  margin-right: auto\n}\n\n#toast-container.toast-bottom-full-width > div, #toast-container.toast-top-full-width > div {\n  width: 96%;\n  margin-left: auto;\n  margin-right: auto\n}\n\n.toast {\n  background-color: #030303\n}\n\n.toast-success {\n  background-color: #01d18b\n}\n\n.toast-error {\n  background-color: #ff3b17\n}\n\n.toast-info {\n  background-color: #2f96b4\n}\n\n.toast-warning {\n  background-color: #f89406\n}\n\n.toast-progress {\n  position: absolute;\n  left: 0;\n  bottom: 0;\n  height: 4px;\n  background-color: #000;\n  opacity: .4;\n  -ms-filter: progid:DXImageTransform.Microsoft.Alpha(Opacity=40);\n  filter: alpha(opacity=40)\n}\n\n@media all and (max-width: 240px) {\n  #toast-container > div {\n    padding: 8px 8px 8px 50px;\n    width: 11em\n  }\n  #toast-container .toast-close-button {\n    right: -.2em;\n    top: -.2em\n  }\n}\n\n@media all and (min-width: 241px) and (max-width: 480px) {\n  #toast-container > div {\n    padding: 8px 8px 8px 50px;\n    width: 18em\n  }\n  #toast-container .toast-close-button {\n    right: -.2em;\n    top: -.2em\n  }\n}\n\n@media all and (min-width: 481px) and (max-width: 768px) {\n  #toast-container > div {\n    padding: 15px 15px 15px 50px;\n    width: 25em\n  }\n}"
  },
  {
    "path": "resources/assets/semantic/dist/components/accordion.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n          transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Menu */\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n          transform: rotate(180deg);\n}\n\n/* Header */\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/accordion.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/ad.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n.ui.ad:first-child {\n  margin: 0em;\n}\n.ui.ad:last-child {\n  margin: 0em;\n}\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n\n/* Leaderboard */\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n\n/* Square */\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n\n/* Small Rectangle */\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n\n/* Skyscraper */\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n\n/* Banner */\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n\n/* Leaderboard */\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n\n/* Panorama */\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n\n/* Netboard */\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n\n/* Large Mobile Banner */\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Mobile Sizes */\n.ui.mobile.ad {\n  display: none;\n}\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #FFFFFF;\n  font-size: 1em;\n  font-weight: bold;\n}\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/api.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/breadcrumb.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: inline-block;\n  margin: 0em 0em;\n  vertical-align: middle;\n}\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n          Content\n*******************************/\n\n\n/* Divider */\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n.ui.breadcrumb a {\n  color: #4183C4;\n}\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.78571429em 1em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/button.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #E0E1E2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #CACBCD;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #CACBCD;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n}\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #BABBBC;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, none;\n          box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #C0C1C2;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n          box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:hover {\n  background-color: #C0C1C2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.button:active {\n  background-color: #C0C1C2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n\n/* Specificity hack */\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #FFFFFF transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n          transform: translateY(0%);\n  right: auto;\n}\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n          transform: translateY(200%);\n  right: auto;\n}\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n          transform: scale(1.5);\n}\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n          transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  background: transparent none;\n  color: #FFFFFF;\n  text-shadow: none !important;\n}\n\n/* Group */\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n.ui.inverted.button:hover {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active / Focus */\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active Focus */\n.ui.inverted.button.active:focus {\n  background: #DCDDDE;\n  -webkit-box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n          box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n.ui.labeled.button > .label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  margin: 0px 0px 0px -1px !important;\n  padding: '';\n  font-size: 1em;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Tag */\n.ui.labeled.button > .tag.label:before {\n  width: 1.85em;\n  height: 1.85em;\n}\n\n/* Right */\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n\n/* Facebook */\n.ui.facebook.button {\n  background-color: #3B5998;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Twitter */\n.ui.twitter.button {\n  background-color: #55ACEE;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.twitter.button:hover {\n  background-color: #35a2f4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.twitter.button:active {\n  background-color: #2795e9;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Google Plus */\n.ui.google.plus.button {\n  background-color: #DD4B39;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.google.plus.button:hover {\n  background-color: #e0321c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.google.plus.button:active {\n  background-color: #c23321;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Linked In */\n.ui.linkedin.button {\n  background-color: #1F88BE;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* YouTube */\n.ui.youtube.button {\n  background-color: #CC181E;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Instagram */\n.ui.instagram.button {\n  background-color: #49769C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Pinterest */\n.ui.pinterest.button {\n  background-color: #BD081C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pinterest.button:hover {\n  background-color: #ac0013;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pinterest.button:active {\n  background-color: #8c0615;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* VK */\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #FFFFFF;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #FFFFFF;\n}\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #FFFFFF;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: 0.85714286em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: 0em 0.42857143em 0em -0.21428571em;\n}\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em !important;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #F8F8F8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n.ui.basic.buttons .button:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n          box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n.ui.basic.buttons .active.button {\n  -webkit-box-shadow: '' !important;\n          box-shadow: '' !important;\n}\n\n/* Standard Basic Inverted */\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #F9FAFB !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #FFFFFF;\n  text-shadow: none;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n          box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n  margin: 0em;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: '';\n  -webkit-box-shadow: -1px 0px 0px 0px transparent inset;\n          box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  -webkit-box-shadow: 1px 0px 0px 0px transparent inset;\n          box-shadow: 1px 0px 0px 0px transparent inset;\n}\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n\n/* Toggle (Modifies active state to give affordances) */\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21BA45 !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #FFFFFF;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n          box-shadow: 0px 0px 0px 1px transparent inset;\n}\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n\n/* Singular */\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n.ui.fluid.button {\n  display: block;\n}\n.ui.two.buttons {\n  width: 100%;\n}\n.ui.two.buttons > .button {\n  width: 50%;\n}\n.ui.three.buttons {\n  width: 100%;\n}\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n.ui.four.buttons {\n  width: 100%;\n}\n.ui.four.buttons > .button {\n  width: 25%;\n}\n.ui.five.buttons {\n  width: 100%;\n}\n.ui.five.buttons > .button {\n  width: 20%;\n}\n.ui.six.buttons {\n  width: 100%;\n}\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n.ui.seven.buttons {\n  width: 100%;\n}\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n.ui.eight.buttons {\n  width: 100%;\n}\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n.ui.nine.buttons {\n  width: 100%;\n}\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n.ui.ten.buttons {\n  width: 100%;\n}\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n.ui.eleven.buttons {\n  width: 100%;\n}\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n.ui.twelve.buttons {\n  width: 100%;\n}\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.black.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n          box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n          box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n          box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n          box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n          box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n          box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.grey.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #767676 inset !important;\n          box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  color: #767676 !important;\n}\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #838383 inset !important;\n          box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n          box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  color: #838383 !important;\n}\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #696969 inset !important;\n          box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  color: #909090 !important;\n}\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #909090 inset !important;\n          box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  color: #909090 !important;\n}\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n          box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n          box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n          box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #DCDDDE !important;\n}\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n          box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n          box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #A5673F;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.brown.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n          box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  color: #A5673F !important;\n}\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n          box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #90532b inset !important;\n          box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  color: #975b33 !important;\n}\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n          box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  color: #805031 !important;\n}\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #805031 inset !important;\n          box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  color: #805031 !important;\n}\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n          box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  color: #D67C1C;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n          box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n          box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n          box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #D67C1C !important;\n}\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n          box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #D67C1C !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.blue.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n          box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n          box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n          box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n          box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n          box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n          box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  color: #54C8FF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n          box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n          box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n          box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n          box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54C8FF !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.green.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n          box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n          box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n          box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n          box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n          box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n          box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  color: #2ECC40;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n          box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n          box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n          box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ECC40 !important;\n}\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n          box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ECC40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #F2711C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.orange.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n          box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  color: #F2711C !important;\n}\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n          box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n          box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  color: #f26202 !important;\n}\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n          box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  color: #cf590c !important;\n}\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n          box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  color: #cf590c !important;\n}\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n          box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  color: #FF851B;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n          box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n          box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #FF851B !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #E03997;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.pink.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n          box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  color: #E03997 !important;\n}\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n          box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n          box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  color: #e61a8d !important;\n}\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n          box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n          box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n          box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  color: #FF8EDF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #FF8EDF !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435C9;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.violet.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n          box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  color: #6435C9 !important;\n}\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n          box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n          box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  color: #5829bb !important;\n}\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n          box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n          box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n          box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  color: #A291FB;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n          box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n          box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n          box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n          box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #A291FB !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #A333C8;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.purple.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n          box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  color: #A333C8 !important;\n}\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n          box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n          box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  color: #9627ba !important;\n}\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9724be inset !important;\n          box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  color: #82299f !important;\n}\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #82299f inset !important;\n          box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  color: #82299f !important;\n}\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n          box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  color: #DC73FF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n          box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n          box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #DC73FF !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.red.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n          box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n          box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n          box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n          box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n          box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n          box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  color: #FF695E;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n          box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n          box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #FF695E !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00B5AD;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.teal.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n          box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  color: #00B5AD !important;\n}\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n          box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n          box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  color: #009c95 !important;\n}\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n          box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #00827c !important;\n}\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #00827c inset !important;\n          box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  color: #00827c !important;\n}\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n          box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  color: #6DFFFF;\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n          box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #3affff inset !important;\n          box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6DFFFF !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #B5CC18;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.olive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n          box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  color: #B5CC18 !important;\n}\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n          box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n          box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  color: #a7bd0d !important;\n}\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n          box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n          box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n          box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  color: #D9E778;\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n          box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n          box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n          box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #D9E778 !important;\n}\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n          box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #D9E778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #FBBD08;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.yellow.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n          box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  color: #FBBD08 !important;\n}\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n          box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n          box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  color: #eaae00 !important;\n}\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n          box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n          box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n          box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  color: #FFE21F;\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n          box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n          box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n          box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n          box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n          box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #FFE21F !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n\n/*--- Standard ---*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.primary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n          box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n          box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n          box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n          box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n          box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n\n/* Standard */\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.secondary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n          box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n          box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  color: #27292a !important;\n}\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n          box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #343637 !important;\n}\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n          box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n\n/* Standard */\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.positive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n          box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n          box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n          box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n          box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n          box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n\n/* Standard */\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n.ui.negative.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n          box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n          box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n          box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n          box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n          box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n.ui.buttons:not(.basic):not(.inverted) {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Clearfix */\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0em;\n}\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n.ui.vertical.buttons .button:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/card.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #FFFFFF;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  z-index: '';\n}\n.ui.card {\n  margin: 1em 0em;\n}\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n.ui.card:first-child {\n  margin-top: 0em;\n}\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.28571429em;\n}\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.68);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n}\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transform: translateY(-3px);\n          transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Orange */\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Yellow */\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Olive */\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Green */\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Teal */\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Blue */\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Violet */\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Purple */\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Pink */\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Brown */\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Grey */\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Black */\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n}\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n          box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.one.cards > .card {\n  width: 100%;\n}\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.seven.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.five.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.six.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/checkbox.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Checkbox\n*******************************/\n\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n/* HTML Checkbox */\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n  font-size: 1em;\n}\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #FFFFFF;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border: 1px solid #D4D4D5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Inside */\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n\n/*******************************\n           States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #F9FAFB;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.checkbox input:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n          transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n          transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Focus */\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Indeterminate */\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Focus */\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n.ui.slider.checkbox input {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n          transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: #545454 !important;\n}\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: 2rem;\n}\n\n/* Active Focus */\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: #000000 !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n.ui.toggle.checkbox input {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n          transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: -0.05rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Focus */\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185D0 !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Active Focus */\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: #0d71bb !important;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\n}\n\n/* Checkmark */\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/checkbox.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/comment.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  -webkit-box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n          transition-delay: 0.1s;\n}\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.comments {\n  font-size: 0.85714286rem;\n}\n.ui.small.comments {\n  font-size: 0.92857143rem;\n}\n.ui.comments {\n  font-size: 1rem;\n}\n.ui.large.comments {\n  font-size: 1.14285714rem;\n}\n.ui.big.comments {\n  font-size: 1.28571429rem;\n}\n.ui.huge.comments {\n  font-size: 1.42857143rem;\n}\n.ui.massive.comments {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/container.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Container\n*******************************/\n\n\n/* All Sizes */\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto !important;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n  .ui.grid.container {\n    width: auto !important;\n  }\n  .ui.relaxed.grid.container {\n    width: auto !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 723px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 723px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 723px  +  5rem ) !important;\n  }\n}\n\n/* Small Monitor */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 933px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 933px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 933px  +  5rem ) !important;\n  }\n}\n\n/* Large Monitor */\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n  .ui.grid.container {\n    width: calc( 1127px  +  2rem ) !important;\n  }\n  .ui.relaxed.grid.container {\n    width: calc( 1127px  +  3rem ) !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: calc( 1127px  +  5rem ) !important;\n  }\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Text Container */\n.ui.text.container {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n.ui.fluid.container {\n  width: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/dimmer.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(body) {\n  position: relative;\n}\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n          animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #FFFFFF;\n}\n\n/* Loose Coupling */\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/* Scrollbars */\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n          transform-style: '';\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transform-origin: center center;\n          transform-origin: center center;\n}\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n          filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease;\n  transition: 800ms -webkit-filter ease;\n  transition: 800ms filter ease;\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\n}\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n          filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n.ui.inverted.dimmer > .content > * {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/dimmer.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/divider.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n\n/* Allow divider between each column row */\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  line-height: 1;\n  text-align: center;\n}\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n}\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n.ui.vertical.divider:before {\n  top: -100%;\n}\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n            transform: none;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #FFFFFF;\n}\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/dropdown.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #FFFFFF;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: 0.85714286em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-touch-callout: none;\n}\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.78571429rem;\n  min-width: 10rem;\n}\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n  font-weight: normal;\n}\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n\n/* Icons / Flags / Labels / Image */\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.78571429rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  margin-top: -0.5em;\n  margin-bottom: -0.5em;\n  max-height: 2em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n\n/* Remove Menu Item Divider */\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n\n/* Dropdown Menu */\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n\n/* No Margin On Icon Button */\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n\n/* Displays like a select box */\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n          transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.71428571em;\n  background: #FFFFFF;\n  display: inline-block;\n  padding: 0.78571429em 2.1em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: 1.21428571em;\n  top: 0.78571429em;\n  right: 1em;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.91666667em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n}\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/* Menu Item */\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #FAFAFA;\n  padding: 0.78571429rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Active */\n.ui.selection.active.dropdown {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n.ui.selection.dropdown:focus {\n  border-color: #96C8DA;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.selection.dropdown:focus .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n.ui.selection.active.dropdown:hover {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.selection.active.dropdown:hover .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/* Empty Connecting Border */\n.ui.active.empty.selection.dropdown {\n  border-radius: 0.28571429rem !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n\n/* Search Selection */\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: 1px;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: 1px;\n  z-index: 3;\n}\n\n/* Search Selection */\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n}\n\n/* Used to size multi select input to character width */\n.ui.search.selection.dropdown > span.sizer {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(115, 115, 115, 0.87) !important;\n}\n\n/* Search Menu */\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n\n/* Multiple Selection */\n.ui.multiple.dropdown {\n  padding: 0.22619048em 2.1em 0.22619048em 0.35714286em;\n}\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.78571429em;\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n.ui.multiple.dropdown .dropdown.icon {\n  margin: '';\n  padding: '';\n}\n\n/* Text */\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: 0.14285714em !important;\n}\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n\n/* Prompt Text */\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  width: 2.2em;\n  line-height: 1.21428571em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.21428571em;\n  vertical-align: baseline;\n}\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.21428571em;\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Active\n----------------------*/\n\n\n/* Menu Item Active */\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n\n/* Menu Item Hover */\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: 1em !important;\n}\n.ui.loading.selection.dropdown > i.icon {\n  padding: 1.5em 1.28571429em !important;\n}\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n          animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.dropdown:not(.button) > input:focus + .default.text,\n.ui.default.dropdown:not(.button) > input:focus + .text {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n.ui.dropdown > .loading.menu {\n  left: 0px !important;\n  right: auto !important;\n}\n.ui.dropdown > .menu .loading.menu {\n  left: 100% !important;\n  right: auto !important;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n\n/* Selected Item */\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n\n/* Filtered Item */\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9F3A38;\n}\n.ui.selection.dropdown.error {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.selection.dropdown.error:hover {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #E0B4B4;\n}\n.ui.dropdown.error > .menu > .item {\n  color: #9F3A38;\n}\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #E0B4B4;\n}\n\n/* Item Hover */\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #FFF2F2;\n}\n\n/* Item Active */\n.ui.dropdown.error > .menu .active.item {\n  background-color: #FDCFCF;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n\n/* Disabled */\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Direction\n---------------*/\n\n\n/* Flyout Direction */\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Leftward Opening Menu */\n.ui.dropdown > .left.menu {\n  left: auto !important;\n  right: 0px !important;\n}\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto;\n  right: 100%;\n  margin: 0em -0.5em 0em 0em !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n  margin-right: 0em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n\n/* Upward Main Menu */\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n.ui.upward.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n          box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n.ui.upward.selection.dropdown.visible {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n.ui.upward.active.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n          box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n.ui.upward.active.selection.dropdown:hover .menu {\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/*  Selection Menu */\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n}\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 10.28571429rem;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 15.42857143rem;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n\n/* Displays without javascript */\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  border-radius: 0.28571429rem !important;\n}\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  background: #FFFFFF;\n  z-index: 2;\n}\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Top Right Pointing */\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n.ui.top.pointing.dropdown > .left.menu:after,\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto !important;\n  right: 1em !important;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n}\n\n/* Left Pointing */\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n          transform: rotate(-45deg);\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  margin: 0em 1em 0em 0em;\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n          transform: rotate(135deg);\n}\n\n/* Right Pointing */\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n          transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n          transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/* Upward pointing */\n.ui.pointing.upward.dropdown .menu,\n.ui.top.pointing.upward.dropdown .menu {\n  top: auto !important;\n  bottom: 100% !important;\n  margin: 0em 0em 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n.ui.pointing.upward.dropdown .menu:after,\n.ui.top.pointing.upward.dropdown .menu:after {\n  top: 100% !important;\n  bottom: auto !important;\n  -webkit-box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n  margin: -0.25em 0em 0em;\n}\n\n/* Right Pointing Upward */\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 1em 0em 0em;\n}\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Left Pointing Upward */\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 0em 1em;\n}\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n/* Dropdown Carets */\n@font-face {\n  font-family: 'Dropdown';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' /*rtl:'\\f0d9'*/;\n}\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" /*rtl:\"\\f0da\"*/;\n}\n\n/* Vertical Menu Dropdown */\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" /*rtl:\"\\f0d9\"*/;\n}\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/dropdown.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(!module.can.show() && module.is.remote()) {\n            module.debug('No API results retrieved, searching before show');\n            module.queryRemote(module.get.query(), module.show);\n          }\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n              ;\n              if(module.has.menuSearch() ) {\n                $module\n                  .on('blur' + eventNamespace, selector.search, module.event.search.blur)\n                ;\n              }\n              else {\n                $module\n                  .on('blur' + eventNamespace, module.event.blur)\n                ;\n              }\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              if(query || (!query && module.get.activeItem().length == 0)) {\n                module.select.firstUnfiltered();\n              }\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                if(settings.filterRemoteData) {\n                  module.filterItems(searchTerm);\n                }\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.string(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected && !module.is.multiple()) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(module.is.searchSelection() && !willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              // prevents IE11 bug where menu receives focus even though `tabindex=-1`\n              if(module.has.menuSearch()) {\n                $(document.activeElement).blur();\n              }\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value      = module.get.choiceValue($item),\n              searchText = module.get.choiceText($item, false),\n              text       = module.get.choiceText($item, true)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(searchText);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              // reset position\n              module.remove.upward();\n\n              if(module.can.openDownward($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {\n                module.set.leftward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.addClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.addClass(className.leftward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-' + metadata.value, escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.removeClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.removeClass(className.leftward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(value) +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(escapedValue) +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          leftward: function($subMenu) {\n            var $selectedMenu = $subMenu || $menu;\n            return $selectedMenu.hasClass(className.leftward);\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          remote: function() {\n            return settings.apiSettings && module.can.useAPI();\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-X')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          openDownward: function($subMenu) {\n            var\n              $currentMenu    = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen        = {},\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            if(module.is.verticallyScrollableContext()) {\n              calculations.menu.offset.top += calculations.context.scrollTop;\n            }\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          openRightward: function($subMenu) {\n            var\n              $currentMenu     = $subMenu || $menu,\n              canOpenRightward = true,\n              isOffscreenRight = false,\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollLeft : $context.scrollLeft(),\n                width      : $context.outerWidth()\n              },\n              menu: {\n                offset : $currentMenu.offset(),\n                width  : $currentMenu.outerWidth()\n              }\n            };\n            if(module.is.horizontallyScrollableContext()) {\n              calculations.menu.offset.left += calculations.context.scrollLeft;\n            }\n            isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);\n            if(isOffscreenRight) {\n              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);\n              canOpenRightward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenRightward;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n\n  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    leftward    : 'left',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/embed.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #DCDDDE;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  color: #FFFFFF;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n.ui.embed .icon:hover:before {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n.ui.active.embed > .embed {\n  display: block;\n}\n\n\n/*******************************\n        Video Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/embed.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/feed.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Event */\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  text-align: left;\n}\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Content */\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n\n/* Date inside Summary */\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #FF2733;\n}\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #EF404A;\n}\n\n/* First element */\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n.ui.feed {\n  font-size: 1rem;\n}\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/flag.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/* Sprite */\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"./../themes/default/assets/images/flags.png\") no-repeat -108px -1976px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -73px -1821px;\n}\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/form.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Elements\n*******************************/\n\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: 100%;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: 1.21428571em;\n}\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Text Area */\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n\n/* Block */\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n\n/* Block */\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  width: 0px;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: #FFFFFF !important;\n  border: 1px solid #E0B4B4 !important;\n  color: #9F3A38 !important;\n}\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: -0.25em 0em -0.5em 0.5em;\n}\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px 1px 1px;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #E5DFA1 !important;\n}\n\n/* Focus */\n.ui.form .field.field input:-webkit-autofill:focus {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #D5C315 !important;\n}\n\n/* Error */\n.ui.form .error.error input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n          box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  border-color: #E0B4B4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form ::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.form :focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/* Error Placeholder */\n.ui.form .error ::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n.ui.form .error ::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.form .error :focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n.ui.form .error :focus::-moz-placeholder {\n  color: #da9796;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n          box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n          box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n\n/* On Form */\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.success .icon.success.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n\n/* On Form */\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n\n/* On Form */\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.error .icon.error.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9F3A38;\n  color: #FFFFFF;\n}\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  border-radius: '';\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-appearance: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #E0B4B4 !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #EACBCB;\n  color: #9F3A38;\n}\n\n/* Hover */\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #FBE7E7;\n}\n\n/* Selected */\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #FBE7E7;\n}\n\n/* Active */\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #FDCFCF !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9F3A38;\n}\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9F3A38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: 0.45;\n}\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: 0.45;\n}\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n          animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n         Element Types\n*******************************/\n\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #DB2828;\n}\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Inverted Field */\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: #FFFFFF;\n  border-color: rgba(255, 255, 255, 0.1);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n\n/* Grouped Vertically */\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n\n/* Split fields */\n.ui.form .fields {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  margin: 0em -0.5em 1em;\n}\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Other Combinations */\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -ms-flex-wrap: wrap;\n        flex-wrap: wrap;\n  }\n  .ui[class*=\"equal width\"].form:not(.unstackable) .fields > .field,\n  .ui.form:not(.unstackable) [class*=\"equal width\"].fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n  }\n}\n\n/* Sizing Combinations */\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width: 767px) {\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {\n    width: 100% !important;\n  }\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.form {\n  font-size: 0.85714286rem;\n}\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n.ui.form {\n  font-size: 1rem;\n}\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n.ui.big.form {\n  font-size: 1.28571429rem;\n}\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n.ui.massive.form {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/form.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        regExp,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        determine: {\n          isValid: function() {\n            var\n              allValid = true\n            ;\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName, true) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          shorthandFields: function(fields) {\n            var\n              fieldKeys = Object.keys(fields),\n              firstRule = fields[fieldKeys[0]]\n            ;\n            return module.is.shorthandRules(firstRule);\n          },\n          // duck type rule test\n          shorthandRules: function(rules) {\n            return (typeof rules == 'string' || $.isArray(rules));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function(field) {\n            var\n              allValid = true\n            ;\n            if(field) {\n              module.verbose('Checking if field is valid', field);\n              return module.validate.field(validation[field], field, false);\n            }\n            else {\n              module.verbose('Checking if form is valid');\n              $.each(validation, function(fieldName, field) {\n                if( !module.is.valid(fieldName) ) {\n                  allValid = false;\n                }\n              });\n              return allValid;\n            }\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          fieldsFromShorthand: function(fields) {\n            var\n              fullFields = {}\n            ;\n            $.each(fields, function(name, rules) {\n              if(typeof rules == 'string') {\n                rules = [rules];\n              }\n              fullFields[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                fullFields[name].rules.push({ type: rule });\n              });\n            });\n            return fullFields;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\n                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\n                }\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            regExp          = settings.regExp;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if($field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(values[name] === undefined) {\n                      values[name] = (isChecked)\n                        ? true\n                        : false\n                      ;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if($field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        add: {\n          // alias\n          rule: function(name, rules) {\n            module.add.field(name, rules);\n          },\n          field: function(name, rules) {\n            var\n              newValidation = {}\n            ;\n            if(module.is.shorthandRules(rules)) {\n              rules = $.isArray(rules)\n                ? rules\n                : [rules]\n              ;\n              newValidation[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                newValidation[name].rules.push({ type: rule });\n              });\n            }\n            else {\n              newValidation[name] = rules;\n            }\n            validation = $.extend({}, validation, newValidation);\n            module.debug('Adding rules', newValidation, validation);\n          },\n          fields: function(fields) {\n            var\n              newValidation\n            ;\n            if(fields && module.is.shorthandFields(fields)) {\n              newValidation = module.get.fieldsFromShorthand(fields);\n            }\n            else {\n              newValidation = fields;\n            }\n            validation = $.extend({}, validation, newValidation);\n          },\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          rule: function(field, rule) {\n            var\n              rules = $.isArray(rule)\n                ? rule\n                : [rule]\n            ;\n            if(rule == undefined) {\n              module.debug('Removed all rules');\n              validation[field].rules = [];\n              return;\n            }\n            if(validation[field] == undefined || !$.isArray(validation[field].rules)) {\n              return;\n            }\n            $.each(validation[field].rules, function(index, rule) {\n              if(rules.indexOf(rule.type) !== -1) {\n                module.debug('Removed rule', rule.type);\n                validation[field].rules.splice(index, 1);\n              }\n            });\n          },\n          field: function(field) {\n            var\n              fields = $.isArray(field)\n                ? field\n                : [field]\n            ;\n            $.each(fields, function(index, field) {\n              module.remove.rule(field);\n            });\n          },\n          // alias\n          rules: function(field, rules) {\n            if($.isArray(field)) {\n              $.each(fields, function(index, field) {\n                module.remove.rule(field, rules);\n              });\n            }\n            else {\n              module.remove.rule(field, rules);\n            }\n          },\n          fields: function(fields) {\n            module.remove.field(fields);\n          },\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.determine.isValid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName, showErrors) {\n            showErrors = (showErrors !== undefined)\n              ? showErrors\n              : true\n            ;\n            if(typeof field == 'string') {\n              module.verbose('Validating field', field);\n              fieldName = field;\n              field     = validation[field];\n            }\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              if(showErrors) {\n                module.remove.prompt(identifier, fieldErrors);\n                settings.onValid.call($field);\n              }\n            }\n            else {\n              if(showErrors) {\n                formErrors = formErrors.concat(fieldErrors);\n                module.add.prompt(identifier, fieldErrors);\n                settings.onInvalid.call($field, fieldErrors);\n              }\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    htmlID  : /^[a-zA-Z][\\w:.-]*$/g,\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d+\\.?\\d*$/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // allow dashes in card\n      cardNumber = cardNumber.replace(/[\\-]/g, '');\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/grid.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Standard 16 column */\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n      -ms-flex-pack: inherit;\n          justify-content: inherit;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n\n/* Vertical padding when no rows */\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Collapse Margin on Consecutive Grid */\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n  margin: 1rem 1rem;\n}\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n\n/* Assume full width with one column */\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/* Celled Page */\n.ui.celled.page.grid {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n\n/* Sizing Combinations */\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n\n/* Mobile Sizing Combinations */\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* No space on top of first row */\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n/* Divided Row */\n.ui.grid > .divided.row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.grid > .divided.row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Inverted Divided */\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n          box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n          box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5;\n          box-shadow: 0px 0px 0px 1px #D4D4D5;\n}\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: 0px -1px 0px 0px #D4D4D5;\n          box-shadow: 0px -1px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n          box-shadow: -1px 0px 0px 0px #D4D4D5;\n}\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n.ui[class*=\"internally celled\"].grid {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  margin: 0em;\n}\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n\n/* Top Aligned */\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: top;\n  -ms-flex-item-align: start !important;\n      align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: middle;\n  -ms-flex-item-align: center !important;\n      align-self: center !important;\n}\n\n/* Bottom Aligned */\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  vertical-align: bottom;\n  -ms-flex-item-align: end !important;\n      align-self: flex-end !important;\n}\n\n/* Stretched */\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n\n/* Left Aligned */\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n\n/* Center Aligned */\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n\n/* Right Aligned */\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  -ms-flex-item-align: inherit;\n      align-self: inherit;\n}\n\n/* Justified */\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n      -ms-hyphens: auto;\n          hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #DB2828 !important;\n  color: #FFFFFF;\n}\n\n/* Orange */\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #F2711C !important;\n  color: #FFFFFF;\n}\n\n/* Yellow */\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF;\n}\n\n/* Olive */\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF;\n}\n\n/* Green */\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21BA45 !important;\n  color: #FFFFFF;\n}\n\n/* Teal */\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00B5AD !important;\n  color: #FFFFFF;\n}\n\n/* Blue */\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185D0 !important;\n  color: #FFFFFF;\n}\n\n/* Violet */\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435C9 !important;\n  color: #FFFFFF;\n}\n\n/* Purple */\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #A333C8 !important;\n  color: #FFFFFF;\n}\n\n/* Pink */\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #E03997 !important;\n  color: #FFFFFF;\n}\n\n/* Brown */\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #A5673F !important;\n  color: #FFFFFF;\n}\n\n/* Grey */\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #FFFFFF;\n}\n\n/* Black */\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n      -ms-flex-positive: 1;\n          flex-grow: 1;\n}\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n      -ms-flex-positive: 0;\n          flex-grow: 0;\n}\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/* Computer */\n@media only screen and (min-width: 992px) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: row-reverse;\n            flex-direction: row-reverse;\n  }\n  .ui[class*=\"computer vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n        -ms-flex-direction: column-reverse;\n            flex-direction: column-reverse;\n  }\n  \n/* Divided Reversed */\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n            box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Celled Reversed */\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n            box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    margin: 0em;\n  }\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n  \n/* Coupling */\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n  \n/* Don't pad inside segment or nested grid */\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n  \n/* Divided Stackable */\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n  .ui.stackable.celled.grid > .row {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/header.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Header\n*******************************/\n\n\n/* Standard */\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.28571429em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.header:first-child {\n  margin-top: -0.14285714em;\n}\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285714em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image:not(.icon),\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285714em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n.ui.header > .image:not(.icon):only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n.ui.header + p {\n  margin-top: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\nh2.ui.header {\n  font-size: 1.71428571rem;\n}\nh3.ui.header {\n  font-size: 1.28571429rem;\n}\nh4.ui.header {\n  font-size: 1.07142857rem;\n}\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n.ui.large.header {\n  font-size: 1.71428571em;\n}\n.ui.medium.header {\n  font-size: 1.28571429em;\n}\n.ui.small.header {\n  font-size: 1.07142857em;\n}\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n.ui.small.sub.header {\n  font-size: 0.78571429em;\n}\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #FFFFFF;\n}\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n.ui.inverted.attached.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: transparent;\n}\n.ui.inverted.block.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #DB2828 !important;\n}\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n.ui.red.dividing.header {\n  border-bottom: 2px solid #DB2828;\n}\n\n/* Inverted */\n.ui.inverted.red.header {\n  color: #FF695E !important;\n}\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #F2711C !important;\n}\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #F2711C;\n}\n\n/* Inverted */\n.ui.inverted.orange.header {\n  color: #FF851B !important;\n}\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #B5CC18 !important;\n}\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #B5CC18;\n}\n\n/* Inverted */\n.ui.inverted.olive.header {\n  color: #D9E778 !important;\n}\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #FBBD08 !important;\n}\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #FBBD08;\n}\n\n/* Inverted */\n.ui.inverted.yellow.header {\n  color: #FFE21F !important;\n}\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21BA45 !important;\n}\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21BA45;\n}\n\n/* Inverted */\n.ui.inverted.green.header {\n  color: #2ECC40 !important;\n}\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00B5AD !important;\n}\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00B5AD;\n}\n\n/* Inverted */\n.ui.inverted.teal.header {\n  color: #6DFFFF !important;\n}\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185D0 !important;\n}\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185D0;\n}\n\n/* Inverted */\n.ui.inverted.blue.header {\n  color: #54C8FF !important;\n}\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435C9 !important;\n}\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435C9;\n}\n\n/* Inverted */\n.ui.inverted.violet.header {\n  color: #A291FB !important;\n}\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #A333C8 !important;\n}\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #A333C8;\n}\n\n/* Inverted */\n.ui.inverted.purple.header {\n  color: #DC73FF !important;\n}\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #E03997 !important;\n}\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #E03997;\n}\n\n/* Inverted */\n.ui.inverted.pink.header {\n  color: #FF8EDF !important;\n}\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #A5673F !important;\n}\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #A5673F;\n}\n\n/* Inverted */\n.ui.inverted.brown.header {\n  color: #D67C1C !important;\n}\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n.ui.inverted.grey.header {\n  color: #DCDDDE !important;\n}\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n.ui.right.aligned.header {\n  text-align: right;\n}\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n.ui.justified.header {\n  text-align: justify;\n}\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #F3F4F5;\n  padding: 0.78571429rem 1rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n  border-radius: 0.28571429rem;\n}\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #FFFFFF;\n  padding: 0.78571429rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.block.header {\n  background: #F3F4F5;\n}\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28571429em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/icon.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"./../themes/default/assets/fonts/icons.eot\");\n  src: url(\"./../themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"./../themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"./../themes/default/assets/fonts/icons.woff\") format('woff'), url(\"./../themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"./../themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\ni.icon:before {\n  background: none !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n          animation: icon-loading 2s linear infinite;\n}\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\ni.icon.active {\n  opacity: 1 !important;\n}\ni.emphasized.icon {\n  opacity: 1 !important;\n}\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon,\ni.link.icons {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\ni.link.icon:hover,\ni.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n          box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\ni.circular.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n          transform: scale(-1, 1);\n}\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n          transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n          transform: rotate(90deg);\n}\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n          transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n          box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\ni.bordered.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n\n/* Inverted Shapes */\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\ni.inverted.icon {\n  color: #FFFFFF;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\ni.red.icon {\n  color: #DB2828 !important;\n}\ni.inverted.red.icon {\n  color: #FF695E !important;\n}\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\ni.orange.icon {\n  color: #F2711C !important;\n}\ni.inverted.orange.icon {\n  color: #FF851B !important;\n}\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\ni.yellow.icon {\n  color: #FBBD08 !important;\n}\ni.inverted.yellow.icon {\n  color: #FFE21F !important;\n}\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\ni.olive.icon {\n  color: #B5CC18 !important;\n}\ni.inverted.olive.icon {\n  color: #D9E778 !important;\n}\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\ni.green.icon {\n  color: #21BA45 !important;\n}\ni.inverted.green.icon {\n  color: #2ECC40 !important;\n}\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\ni.teal.icon {\n  color: #00B5AD !important;\n}\ni.inverted.teal.icon {\n  color: #6DFFFF !important;\n}\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\ni.blue.icon {\n  color: #2185D0 !important;\n}\ni.inverted.blue.icon {\n  color: #54C8FF !important;\n}\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\ni.violet.icon {\n  color: #6435C9 !important;\n}\ni.inverted.violet.icon {\n  color: #A291FB !important;\n}\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\ni.purple.icon {\n  color: #A333C8 !important;\n}\ni.inverted.purple.icon {\n  color: #DC73FF !important;\n}\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\ni.pink.icon {\n  color: #E03997 !important;\n}\ni.inverted.pink.icon {\n  color: #FF8EDF !important;\n}\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\ni.brown.icon {\n  color: #A5673F !important;\n}\ni.inverted.brown.icon {\n  color: #D67C1C !important;\n}\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\ni.grey.icon {\n  color: #767676 !important;\n}\ni.inverted.grey.icon {\n  color: #DCDDDE !important;\n}\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\ni.black.icon {\n  color: #1B1C1D !important;\n}\ni.inverted.black.icon {\n  color: #545454 !important;\n}\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: 0.4em;\n}\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: 0.5em;\n}\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.75em;\n}\ni.icon,\ni.icons {\n  font-size: 1em;\n}\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n          transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n          transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\n}\ni.icons .top.right.corner.icon {\n  top: 0;\n  left: auto;\n  right: 0;\n  bottom: auto;\n}\ni.icons .top.left.corner.icon {\n  top: 0;\n  left: 0;\n  right: auto;\n  bottom: auto;\n}\ni.icons .bottom.left.corner.icon {\n  top: auto;\n  left: 0;\n  right: auto;\n  bottom: 0;\n}\ni.icons .bottom.right.corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n}\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\n}\n/*\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n\n\n/*******************************\n            Icons\n*******************************/\n\n\n/* Web Content */\ni.icon.search:before {\n  content: \"\\f002\";\n}\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\ni.icon.signal:before {\n  content: \"\\f012\";\n}\ni.icon.setting:before {\n  content: \"\\f013\";\n}\ni.icon.home:before {\n  content: \"\\f015\";\n}\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\ni.icon.browser:before {\n  content: \"\\f022\";\n}\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\ni.icon.image:before {\n  content: \"\\f03e\";\n}\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\ni.icon.comment:before {\n  content: \"\\f075\";\n}\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\ni.icon.settings:before {\n  content: \"\\f085\";\n}\ni.icon.comments:before {\n  content: \"\\f086\";\n}\ni.icon.external:before {\n  content: \"\\f08e\";\n}\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\ni.icon.code:before {\n  content: \"\\f121\";\n}\ni.icon.protect:before {\n  content: \"\\f132\";\n}\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\ni.icon.bug:before {\n  content: \"\\f188\";\n}\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\ni.icon.history:before {\n  content: \"\\f1da\";\n}\ni.icon.options:before {\n  content: \"\\f1de\";\n}\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\ni.icon.alarm.mute:before {\n  content: \"\\f1f6\";\n}\ni.icon.alarm.mute.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\ni.icon.mouse.pointer:before {\n  content: \"\\f245\";\n}\ni.icon.hourglass.empty:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.start:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.half:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.end:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.full:before {\n  content: \"\\f254\";\n}\ni.icon.hand.pointer:before {\n  content: \"\\f25a\";\n}\ni.icon.trademark:before {\n  content: \"\\f25c\";\n}\ni.icon.registered:before {\n  content: \"\\f25d\";\n}\ni.icon.creative.commons:before {\n  content: \"\\f25e\";\n}\ni.icon.add.to.calendar:before {\n  content: \"\\f271\";\n}\ni.icon.remove.from.calendar:before {\n  content: \"\\f272\";\n}\ni.icon.delete.calendar:before {\n  content: \"\\f273\";\n}\ni.icon.checked.calendar:before {\n  content: \"\\f274\";\n}\ni.icon.industry:before {\n  content: \"\\f275\";\n}\ni.icon.shopping.bag:before {\n  content: \"\\f290\";\n}\ni.icon.shopping.basket:before {\n  content: \"\\f291\";\n}\ni.icon.hashtag:before {\n  content: \"\\f292\";\n}\ni.icon.percent:before {\n  content: \"\\f295\";\n}\ni.icon.handshake:before {\n  content: \"\\f2b5\";\n}\ni.icon.open.envelope:before {\n  content: \"\\f2b6\";\n}\ni.icon.open.envelope.outline:before {\n  content: \"\\f2b7\";\n}\ni.icon.address.book:before {\n  content: \"\\f2b9\";\n}\ni.icon.address.book.outline:before {\n  content: \"\\f2ba\";\n}\ni.icon.address.card:before {\n  content: \"\\f2bb\";\n}\ni.icon.address.card.outline:before {\n  content: \"\\f2bc\";\n}\ni.icon.id.badge:before {\n  content: \"\\f2c1\";\n}\ni.icon.id.card:before {\n  content: \"\\f2c2\";\n}\ni.icon.id.card.outline:before {\n  content: \"\\f2c3\";\n}\ni.icon.podcast:before {\n  content: \"\\f2ce\";\n}\ni.icon.window.maximize:before {\n  content: \"\\f2d0\";\n}\ni.icon.window.minimize:before {\n  content: \"\\f2d1\";\n}\ni.icon.window.restore:before {\n  content: \"\\f2d2\";\n}\ni.icon.window.close:before {\n  content: \"\\f2d3\";\n}\ni.icon.window.close.outline:before {\n  content: \"\\f2d4\";\n}\n\n/* User Actions */\ni.icon.wait:before {\n  content: \"\\f017\";\n}\ni.icon.download:before {\n  content: \"\\f019\";\n}\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\ni.icon.lock:before {\n  content: \"\\f023\";\n}\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\ni.icon.print:before {\n  content: \"\\f02f\";\n}\ni.icon.write:before {\n  content: \"\\f040\";\n}\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\ni.icon.theme:before {\n  content: \"\\f043\";\n}\ni.icon.edit:before {\n  content: \"\\f044\";\n}\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\ni.icon.share:before {\n  content: \"\\f064\";\n}\ni.icon.expand:before {\n  content: \"\\f065\";\n}\ni.icon.compress:before {\n  content: \"\\f066\";\n}\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\ni.icon.hide:before {\n  content: \"\\f070\";\n}\ni.icon.random:before {\n  content: \"\\f074\";\n}\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\ni.icon.upload:before {\n  content: \"\\f093\";\n}\ni.icon.call:before {\n  content: \"\\f095\";\n}\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\ni.icon.reply:before {\n  content: \"\\f112\";\n}\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\ni.icon.archive:before {\n  content: \"\\f187\";\n}\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\ni.icon.object.group:before {\n  content: \"\\f247\";\n}\ni.icon.object.ungroup:before {\n  content: \"\\f248\";\n}\ni.icon.clone:before {\n  content: \"\\f24d\";\n}\ni.icon.talk:before {\n  content: \"\\f27a\";\n}\ni.icon.talk.outline:before {\n  content: \"\\f27b\";\n}\n\n/* Messages */\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\ni.icon.help:before {\n  content: \"\\f128\";\n}\ni.icon.info:before {\n  content: \"\\f129\";\n}\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\ni.icon.help.circle.outline:before {\n  content: \"\\f29c\";\n}\n\n/* Users */\ni.icon.user:before {\n  content: \"\\f007\";\n}\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\ni.icon.student:before {\n  content: \"\\f19d\";\n}\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\ni.icon.user.circle:before {\n  content: \"\\f2bd\";\n}\ni.icon.user.circle.outline:before {\n  content: \"\\f2be\";\n}\ni.icon.user.outline:before {\n  content: \"\\f2c0\";\n}\n\n/* Gender & Sexuality */\ni.icon.female:before {\n  content: \"\\f182\";\n}\ni.icon.male:before {\n  content: \"\\f183\";\n}\ni.icon.woman:before {\n  content: \"\\f221\";\n}\ni.icon.man:before {\n  content: \"\\f222\";\n}\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\ni.icon.gay:before {\n  content: \"\\f227\";\n}\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\ni.icon.genderless:before {\n  content: \"\\f22d\";\n}\n\n/* Accessibility */\ni.icon.universal.access:before {\n  content: \"\\f29a\";\n}\ni.icon.wheelchair:before {\n  content: \"\\f29b\";\n}\ni.icon.blind:before {\n  content: \"\\f29d\";\n}\ni.icon.audio.description:before {\n  content: \"\\f29e\";\n}\ni.icon.volume.control.phone:before {\n  content: \"\\f2a0\";\n}\ni.icon.braille:before {\n  content: \"\\f2a1\";\n}\ni.icon.asl:before {\n  content: \"\\f2a3\";\n}\ni.icon.assistive.listening.systems:before {\n  content: \"\\f2a2\";\n}\ni.icon.deafness:before {\n  content: \"\\f2a4\";\n}\ni.icon.sign.language:before {\n  content: \"\\f2a7\";\n}\ni.icon.low.vision:before {\n  content: \"\\f2a8\";\n}\n\n/* View Adjustment */\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\ni.icon.road:before {\n  content: \"\\f018\";\n}\ni.icon.flag:before {\n  content: \"\\f024\";\n}\ni.icon.book:before {\n  content: \"\\f02d\";\n}\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\ni.icon.plane:before {\n  content: \"\\f072\";\n}\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\ni.icon.sun:before {\n  content: \"\\f185\";\n}\ni.icon.moon:before {\n  content: \"\\f186\";\n}\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\ni.icon.sticky.note:before {\n  content: \"\\f249\";\n}\ni.icon.sticky.note.outline:before {\n  content: \"\\f24a\";\n}\ni.icon.law:before {\n  content: \"\\f24e\";\n}\ni.icon.hand.peace:before {\n  content: \"\\f25b\";\n}\ni.icon.hand.rock:before {\n  content: \"\\f255\";\n}\ni.icon.hand.paper:before {\n  content: \"\\f256\";\n}\ni.icon.hand.scissors:before {\n  content: \"\\f257\";\n}\ni.icon.hand.lizard:before {\n  content: \"\\f258\";\n}\ni.icon.hand.spock:before {\n  content: \"\\f259\";\n}\ni.icon.tv:before {\n  content: \"\\f26c\";\n}\ni.icon.thermometer.full:before {\n  content: \"\\f2c7\";\n}\ni.icon.thermometer.three.quarters:before {\n  content: \"\\f2c8\";\n}\ni.icon.thermometer.half:before {\n  content: \"\\f2c9\";\n}\ni.icon.thermometer.quarter:before {\n  content: \"\\f2ca\";\n}\ni.icon.thermometer.empty:before {\n  content: \"\\f2cb\";\n}\ni.icon.shower:before {\n  content: \"\\f2cc\";\n}\ni.icon.bathtub:before {\n  content: \"\\f2cd\";\n}\ni.icon.snowflake:before {\n  content: \"\\f2dc\";\n}\n\n/* Shapes */\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\ni.icon.square.outline:before {\n  content: \"\\f096\";\n}\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\ni.icon.square:before {\n  content: \"\\f0c8\";\n}\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\ni.icon.circle:before {\n  content: \"\\f111\";\n}\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\ni.icon.move:before {\n  content: \"\\f047\";\n}\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\ni.icon.plus:before {\n  content: \"\\f067\";\n}\ni.icon.minus:before {\n  content: \"\\f068\";\n}\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\ni.icon.film:before {\n  content: \"\\f008\";\n}\ni.icon.sound:before {\n  content: \"\\f025\";\n}\ni.icon.photo:before {\n  content: \"\\f030\";\n}\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Mobile */\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\ni.icon.battery.full:before {\n  content: \"\\f240\";\n}\ni.icon.battery.high:before {\n  content: \"\\f241\";\n}\ni.icon.battery.medium:before {\n  content: \"\\f242\";\n}\ni.icon.battery.low:before {\n  content: \"\\f243\";\n}\ni.icon.battery.empty:before {\n  content: \"\\f244\";\n}\n\n/* Computer */\ni.icon.power:before {\n  content: \"\\f011\";\n}\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\ni.icon.game:before {\n  content: \"\\f11b\";\n}\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\ni.icon.file:before {\n  content: \"\\f15b\";\n}\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\ni.icon.fork:before {\n  content: \"\\f126\";\n}\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\ni.icon.server:before {\n  content: \"\\f233\";\n}\ni.icon.usb:before {\n  content: \"\\f287\";\n}\ni.icon.bluetooth:before {\n  content: \"\\f293\";\n}\ni.icon.bluetooth.alternative:before {\n  content: \"\\f294\";\n}\ni.icon.microchip:before {\n  content: \"\\f2db\";\n}\n\n/* Rating */\ni.icon.heart:before {\n  content: \"\\f004\";\n}\ni.icon.star:before {\n  content: \"\\f005\";\n}\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\ni.icon.smile:before {\n  content: \"\\f118\";\n}\ni.icon.frown:before {\n  content: \"\\f119\";\n}\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\ni.icon.music:before {\n  content: \"\\f001\";\n}\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\ni.icon.record:before {\n  content: \"\\f03d\";\n}\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\ni.icon.play:before {\n  content: \"\\f04b\";\n}\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\ni.icon.eject:before {\n  content: \"\\f052\";\n}\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\ni.icon.mute:before {\n  content: \"\\f131\";\n}\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\ni.icon.pause.circle:before {\n  content: \"\\f28b\";\n}\ni.icon.pause.circle.outline:before {\n  content: \"\\f28c\";\n}\ni.icon.stop.circle:before {\n  content: \"\\f28d\";\n}\ni.icon.stop.circle.outline:before {\n  content: \"\\f28e\";\n}\n\n/* Map, Locations, & Transportation */\ni.icon.marker:before {\n  content: \"\\f041\";\n}\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\ni.icon.university:before {\n  content: \"\\f19c\";\n}\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\ni.icon.bus:before {\n  content: \"\\f207\";\n}\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\ni.icon.train:before {\n  content: \"\\f238\";\n}\ni.icon.subway:before {\n  content: \"\\f239\";\n}\ni.icon.map.pin:before {\n  content: \"\\f276\";\n}\ni.icon.map.signs:before {\n  content: \"\\f277\";\n}\ni.icon.map.outline:before {\n  content: \"\\f278\";\n}\ni.icon.map:before {\n  content: \"\\f279\";\n}\n\n/* Tables */\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\ni.icon.font:before {\n  content: \"\\f031\";\n}\ni.icon.bold:before {\n  content: \"\\f032\";\n}\ni.icon.italic:before {\n  content: \"\\f033\";\n}\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\ni.icon.list:before {\n  content: \"\\f03a\";\n}\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\ni.icon.unlinkify:before {\n  content: \"\\f127\";\n}\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\ni.icon.text.cursor:before {\n  content: \"\\f246\";\n}\n\n/* Currency */\ni.icon.euro:before {\n  content: \"\\f153\";\n}\ni.icon.pound:before {\n  content: \"\\f154\";\n}\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\ni.icon.yen:before {\n  content: \"\\f157\";\n}\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\ni.icon.won:before {\n  content: \"\\f159\";\n}\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\ni.icon.lira:before {\n  content: \"\\f195\";\n}\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\ni.icon.japan.credit.bureau:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club:before {\n  content: \"\\f24c\";\n}\ni.icon.credit.card.alternative:before {\n  content: \"\\f283\";\n}\n/* Networks and Websites*/\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\ni.icon.facebook.f:before {\n  content: \"\\f09a\";\n}\ni.icon.github:before {\n  content: \"\\f09b\";\n}\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\ni.icon.xing:before {\n  content: \"\\f168\";\n}\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\ni.icon.adn:before {\n  content: \"\\f170\";\n}\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\ni.icon.apple:before {\n  content: \"\\f179\";\n}\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\ni.icon.android:before {\n  content: \"\\f17b\";\n}\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\ni.icon.dribble:before {\n  content: \"\\f17d\";\n}\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\ni.icon.trello:before {\n  content: \"\\f181\";\n}\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\ni.icon.vk:before {\n  content: \"\\f189\";\n}\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\ni.icon.vimeo.square:before {\n  content: \"\\f194\";\n}\ni.icon.slack:before {\n  content: \"\\f198\";\n}\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\ni.icon.facebook:before {\n  content: \"\\f230\";\n}\ni.icon.pinterest:before {\n  content: \"\\f231\";\n}\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\ni.icon.y.combinator:before {\n  content: \"\\f23b\";\n}\ni.icon.optinmonster:before {\n  content: \"\\f23c\";\n}\ni.icon.opencart:before {\n  content: \"\\f23d\";\n}\ni.icon.expeditedssl:before {\n  content: \"\\f23e\";\n}\ni.icon.gg:before {\n  content: \"\\f260\";\n}\ni.icon.gg.circle:before {\n  content: \"\\f261\";\n}\ni.icon.tripadvisor:before {\n  content: \"\\f262\";\n}\ni.icon.odnoklassniki:before {\n  content: \"\\f263\";\n}\ni.icon.odnoklassniki.square:before {\n  content: \"\\f264\";\n}\ni.icon.pocket:before {\n  content: \"\\f265\";\n}\ni.icon.wikipedia:before {\n  content: \"\\f266\";\n}\ni.icon.safari:before {\n  content: \"\\f267\";\n}\ni.icon.chrome:before {\n  content: \"\\f268\";\n}\ni.icon.firefox:before {\n  content: \"\\f269\";\n}\ni.icon.opera:before {\n  content: \"\\f26a\";\n}\ni.icon.internet.explorer:before {\n  content: \"\\f26b\";\n}\ni.icon.contao:before {\n  content: \"\\f26d\";\n}\ni.icon.\\35 00px:before {\n  content: \"\\f26e\";\n}\ni.icon.amazon:before {\n  content: \"\\f270\";\n}\ni.icon.houzz:before {\n  content: \"\\f27c\";\n}\ni.icon.vimeo:before {\n  content: \"\\f27d\";\n}\ni.icon.black.tie:before {\n  content: \"\\f27e\";\n}\ni.icon.fonticons:before {\n  content: \"\\f280\";\n}\ni.icon.reddit.alien:before {\n  content: \"\\f281\";\n}\ni.icon.microsoft.edge:before {\n  content: \"\\f282\";\n}\ni.icon.codiepie:before {\n  content: \"\\f284\";\n}\ni.icon.modx:before {\n  content: \"\\f285\";\n}\ni.icon.fort.awesome:before {\n  content: \"\\f286\";\n}\ni.icon.product.hunt:before {\n  content: \"\\f288\";\n}\ni.icon.mixcloud:before {\n  content: \"\\f289\";\n}\ni.icon.scribd:before {\n  content: \"\\f28a\";\n}\ni.icon.gitlab:before {\n  content: \"\\f296\";\n}\ni.icon.wpbeginner:before {\n  content: \"\\f297\";\n}\ni.icon.wpforms:before {\n  content: \"\\f298\";\n}\ni.icon.envira.gallery:before {\n  content: \"\\f299\";\n}\ni.icon.glide:before {\n  content: \"\\f2a5\";\n}\ni.icon.glide.g:before {\n  content: \"\\f2a6\";\n}\ni.icon.viadeo:before {\n  content: \"\\f2a9\";\n}\ni.icon.viadeo.square:before {\n  content: \"\\f2aa\";\n}\ni.icon.snapchat:before {\n  content: \"\\f2ab\";\n}\ni.icon.snapchat.ghost:before {\n  content: \"\\f2ac\";\n}\ni.icon.snapchat.square:before {\n  content: \"\\f2ad\";\n}\ni.icon.pied.piper.hat:before {\n  content: \"\\f2ae\";\n}\ni.icon.first.order:before {\n  content: \"\\f2b0\";\n}\ni.icon.yoast:before {\n  content: \"\\f2b1\";\n}\ni.icon.themeisle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.circle:before {\n  content: \"\\f2b3\";\n}\ni.icon.font.awesome:before {\n  content: \"\\f2b4\";\n}\ni.icon.linode:before {\n  content: \"\\f2b8\";\n}\ni.icon.quora:before {\n  content: \"\\f2c4\";\n}\ni.icon.free.code.camp:before {\n  content: \"\\f2c5\";\n}\ni.icon.telegram:before {\n  content: \"\\f2c6\";\n}\ni.icon.bandcamp:before {\n  content: \"\\f2d5\";\n}\ni.icon.grav:before {\n  content: \"\\f2d6\";\n}\ni.icon.etsy:before {\n  content: \"\\f2d7\";\n}\ni.icon.imdb:before {\n  content: \"\\f2d8\";\n}\ni.icon.ravelry:before {\n  content: \"\\f2d9\";\n}\ni.icon.eercast:before {\n  content: \"\\f2da\";\n}\ni.icon.superpowers:before {\n  content: \"\\f2dd\";\n}\ni.icon.wpexplorer:before {\n  content: \"\\f2de\";\n}\ni.icon.meetup:before {\n  content: \"\\f2e0\";\n}\n\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\ni.icon.video:before {\n  content: \"\\f008\";\n}\ni.icon.check:before {\n  content: \"\\f00c\";\n}\ni.icon.close:before {\n  content: \"\\f00d\";\n}\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\ni.icon.x:before {\n  content: \"\\f00d\";\n}\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\ni.icon.clock:before {\n  content: \"\\f017\";\n}\ni.icon.time:before {\n  content: \"\\f017\";\n}\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\ni.icon.camera:before {\n  content: \"\\f030\";\n}\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\ni.icon.compose:before {\n  content: \"\\f040\";\n}\ni.icon.point:before {\n  content: \"\\f041\";\n}\ni.icon.tint:before {\n  content: \"\\f043\";\n}\ni.icon.signup:before {\n  content: \"\\f044\";\n}\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\ni.icon.question.circle:before {\n  content: \"\\f059\";\n}\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\ni.icon.add:before {\n  content: \"\\f067\";\n}\ni.icon.exclamation.circle:before {\n  content: \"\\f06a\";\n}\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\ni.icon.exclamation.triangle:before {\n  content: \"\\f071\";\n}\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\ni.icon.chat:before {\n  content: \"\\f075\";\n}\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\ni.icon.key:before {\n  content: \"\\f084\";\n}\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\ni.icon.winner:before {\n  content: \"\\f091\";\n}\ni.icon.phone:before {\n  content: \"\\f095\";\n}\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\ni.icon.chain:before {\n  content: \"\\f0c1\";\n}\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\ni.icon.clipboard:before {\n  content: \"\\f0ea\";\n}\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\ni.icon.computer:before {\n  content: \"\\f108\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\ni.icon.broken.chain:before {\n  content: \"\\f127\";\n}\ni.icon.question:before {\n  content: \"\\f128\";\n}\ni.icon.exclamation:before {\n  content: \"\\f12a\";\n}\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\ni.icon.shield:before {\n  content: \"\\f132\";\n}\ni.icon.target:before {\n  content: \"\\f140\";\n}\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\ni.icon.eur:before {\n  content: \"\\f153\";\n}\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\ni.icon.usd:before {\n  content: \"\\f155\";\n}\ni.icon.inr:before {\n  content: \"\\f156\";\n}\ni.icon.cny:before {\n  content: \"\\f157\";\n}\ni.icon.rmb:before {\n  content: \"\\f157\";\n}\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\ni.icon.rouble:before {\n  content: \"\\f158\";\n}\ni.icon.rub:before {\n  content: \"\\f158\";\n}\ni.icon.krw:before {\n  content: \"\\f159\";\n}\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\ni.icon.zip:before {\n  content: \"\\f187\";\n}\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\ni.icon.try:before {\n  content: \"\\f195\";\n}\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\ni.icon.circle.outline:before {\n  content: \"\\f1db\";\n}\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\ni.icon.visa.card:before {\n  content: \"\\f1f0\";\n}\ni.icon.mastercard.card:before {\n  content: \"\\f1f1\";\n}\ni.icon.discover.card:before {\n  content: \"\\f1f2\";\n}\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\ni.icon.american.express.card:before {\n  content: \"\\f1f3\";\n}\ni.icon.stripe.card:before {\n  content: \"\\f1f5\";\n}\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\ni.icon.sheqel:before {\n  content: \"\\f20b\";\n}\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\ni.icon.venus:before {\n  content: \"\\f221\";\n}\ni.icon.mars:before {\n  content: \"\\f222\";\n}\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\ni.icon.intersex:before {\n  content: \"\\f224\";\n}\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\ni.icon.asexual:before {\n  content: \"\\f22d\";\n}\ni.icon.facebook.official:before {\n  content: \"\\f230\";\n}\ni.icon.user.plus:before {\n  content: \"\\f234\";\n}\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\ni.icon.bed:before {\n  content: \"\\f236\";\n}\ni.icon.yc:before {\n  content: \"\\f23b\";\n}\ni.icon.ycombinator:before {\n  content: \"\\f23b\";\n}\ni.icon.battery.four:before {\n  content: \"\\f240\";\n}\ni.icon.battery.three:before {\n  content: \"\\f241\";\n}\ni.icon.battery.three.quarters:before {\n  content: \"\\f241\";\n}\ni.icon.battery.two:before {\n  content: \"\\f242\";\n}\ni.icon.battery.half:before {\n  content: \"\\f242\";\n}\ni.icon.battery.one:before {\n  content: \"\\f243\";\n}\ni.icon.battery.quarter:before {\n  content: \"\\f243\";\n}\ni.icon.battery.zero:before {\n  content: \"\\f244\";\n}\ni.icon.i.cursor:before {\n  content: \"\\f246\";\n}\ni.icon.jcb:before {\n  content: \"\\f24b\";\n}\ni.icon.japan.credit.bureau.card:before {\n  content: \"\\f24b\";\n}\ni.icon.diners.club.card:before {\n  content: \"\\f24c\";\n}\ni.icon.balance:before {\n  content: \"\\f24e\";\n}\ni.icon.hourglass.outline:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.zero:before {\n  content: \"\\f250\";\n}\ni.icon.hourglass.one:before {\n  content: \"\\f251\";\n}\ni.icon.hourglass.two:before {\n  content: \"\\f252\";\n}\ni.icon.hourglass.three:before {\n  content: \"\\f253\";\n}\ni.icon.hourglass.four:before {\n  content: \"\\f254\";\n}\ni.icon.grab:before {\n  content: \"\\f255\";\n}\ni.icon.hand.victory:before {\n  content: \"\\f25b\";\n}\ni.icon.tm:before {\n  content: \"\\f25c\";\n}\ni.icon.r.circle:before {\n  content: \"\\f25d\";\n}\ni.icon.television:before {\n  content: \"\\f26c\";\n}\ni.icon.five.hundred.pixels:before {\n  content: \"\\f26e\";\n}\ni.icon.calendar.plus:before {\n  content: \"\\f271\";\n}\ni.icon.calendar.minus:before {\n  content: \"\\f272\";\n}\ni.icon.calendar.times:before {\n  content: \"\\f273\";\n}\ni.icon.calendar.check:before {\n  content: \"\\f274\";\n}\ni.icon.factory:before {\n  content: \"\\f275\";\n}\ni.icon.commenting:before {\n  content: \"\\f27a\";\n}\ni.icon.commenting.outline:before {\n  content: \"\\f27b\";\n}\ni.icon.edge:before {\n  content: \"\\f282\";\n}\ni.icon.ms.edge:before {\n  content: \"\\f282\";\n}\ni.icon.wordpress.beginner:before {\n  content: \"\\f297\";\n}\ni.icon.wordpress.forms:before {\n  content: \"\\f298\";\n}\ni.icon.envira:before {\n  content: \"\\f299\";\n}\ni.icon.question.circle.outline:before {\n  content: \"\\f29c\";\n}\ni.icon.assistive.listening.devices:before {\n  content: \"\\f2a2\";\n}\ni.icon.als:before {\n  content: \"\\f2a2\";\n}\ni.icon.ald:before {\n  content: \"\\f2a2\";\n}\ni.icon.asl.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.deaf:before {\n  content: \"\\f2a4\";\n}\ni.icon.american.sign.language.interpreting:before {\n  content: \"\\f2a3\";\n}\ni.icon.hard.of.hearing:before {\n  content: \"\\f2a4\";\n}\ni.icon.signing:before {\n  content: \"\\f2a7\";\n}\ni.icon.new.pied.piper:before {\n  content: \"\\f2ae\";\n}\ni.icon.theme.isle:before {\n  content: \"\\f2b2\";\n}\ni.icon.google.plus.official:before {\n  content: \"\\f2b3\";\n}\ni.icon.fa:before {\n  content: \"\\f2b4\";\n}\ni.icon.vcard:before {\n  content: \"\\f2bb\";\n}\ni.icon.vcard.outline:before {\n  content: \"\\f2bc\";\n}\ni.icon.drivers.license:before {\n  content: \"\\f2c2\";\n}\ni.icon.drivers.license.outline:before {\n  content: \"\\f2c3\";\n}\ni.icon.thermometer:before {\n  content: \"\\f2c7\";\n}\ni.icon.s15:before {\n  content: \"\\f2cd\";\n}\ni.icon.bath:before {\n  content: \"\\f2cd\";\n}\ni.icon.times.rectangle:before {\n  content: \"\\f2d3\";\n}\ni.icon.times.rectangle.outline:before {\n  content: \"\\f2d4\";\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/image.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\nimg.ui.image {\n  display: block;\n}\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.78571429rem;\n}\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/input.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Standard\n*******************************/\n\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.21428571em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67857143em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n\n/* browsers require these rules separate */\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n.ui.input input:-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input:not(.disabled) input[disabled] {\n  opacity: 0.45;\n}\n.ui.disabled.input input,\n.ui.input:not(.disabled) input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #FAFAFA;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: #85B7D9;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.8);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Error Placeholder */\n.ui.input.error input::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input::-moz-placeholder {\n  color: #e7bdbc;\n}\n.ui.input.error input:-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n/* Focused Error Placeholder */\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus::-moz-placeholder {\n  color: #da9796;\n}\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-radius: 0px !important;\n}\n\n/* Transparent Icon */\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n.ui.transparent.inverted.input {\n  color: #FFFFFF;\n}\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n\n/* Adjacent Label */\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  margin: 0;\n  font-size: 1em;\n}\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: #85B7D9;\n}\n\n/* Regular Label on Right */\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Corner Label */\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: 2.5em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: 3.25em !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: 2.5em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: 3.25em !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n}\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Input Focus */\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Button on Left */\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Input Focus */\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: #85B7D9 !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n\n/* Standard */\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.78571429em;\n}\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n.ui.input {\n  font-size: 1em;\n}\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/item.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: -webkit-box-shadow 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  z-index: '';\n}\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -ms-flex-item-align: top;\n      align-self: top;\n  padding-left: 1.5em;\n}\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -ms-flex-item-align: middle;\n      align-self: middle;\n  width: '';\n}\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n\n/* Generic */\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n\n/*-----Star----- */\n\n\n/* Icon */\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n.ui.items > .item > .content .active.favorite.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n\n/* Icon */\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n.ui.items > .item > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n\n/*******************************\n          Responsive\n*******************************/\n\n\n/* Default Image Width */\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: 767px) {\n  .ui.items:not(.unstackable) > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    margin: 2em 0em;\n  }\n  .ui.items:not(.unstackable) > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n  .ui.items:not(.unstackable) > .item > .image,\n  .ui.items:not(.unstackable) > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n  .ui.items:not(.unstackable) > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -ms-flex-item-align: start;\n      align-self: flex-start;\n}\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -ms-flex-item-align: center;\n      align-self: center;\n}\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n/*---------------\n   Unstackable\n----------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.unstackable.items > .item > .image,\n  .ui.unstackable.items > .item > .image > img {\n    width: 125px !important;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/label.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #E8E8E8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border: 0px solid transparent;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label:first-child {\n  margin-left: 0em;\n}\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: 2rem !important;\n}\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #E8E8E8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: inherit;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: none;\n  transition: none;\n}\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #FFFFFF !important;\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n          box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  border-color: #E8E8E8;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n.ui.corner.label {\n  background-color: transparent !important;\n}\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n          transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/* Inside Table */\n.ui.table td > .ui.ribbon.label {\n  left: calc( -0.78571429em  -  1.2em );\n}\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  0.78571429em  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.21428571rem 0.21428571rem 0em 0em;\n}\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.21428571rem 0.21428571rem;\n}\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.21428571rem 0em 0.28571429rem 0em;\n}\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.21428571rem 0em 0.28571429rem;\n}\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.21428571rem;\n}\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.21428571rem 0em;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #E0E0E0;\n  border-color: #E0E0E0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #D0D0D0;\n  border-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.active.label:before {\n  background-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #C8C8C8;\n  border-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #DB2828 !important;\n  border-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/* Basic */\n.ui.basic.red.label {\n  background-color: #FFFFFF !important;\n  color: #DB2828 !important;\n  border-color: #DB2828 !important;\n}\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: #FFFFFF !important;\n  color: #d01919 !important;\n  border-color: #d01919 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #F2711C !important;\n  border-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/* Basic */\n.ui.basic.orange.label {\n  background-color: #FFFFFF !important;\n  color: #F2711C !important;\n  border-color: #F2711C !important;\n}\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: #FFFFFF !important;\n  color: #f26202 !important;\n  border-color: #f26202 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/* Basic */\n.ui.basic.yellow.label {\n  background-color: #FFFFFF !important;\n  color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n}\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: #FFFFFF !important;\n  color: #eaae00 !important;\n  border-color: #eaae00 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.olive.label {\n  background-color: #FFFFFF !important;\n  color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n}\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: #FFFFFF !important;\n  color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21BA45 !important;\n  border-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n.ui.basic.green.label {\n  background-color: #FFFFFF !important;\n  color: #21BA45 !important;\n  border-color: #21BA45 !important;\n}\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: #FFFFFF !important;\n  color: #16ab39 !important;\n  border-color: #16ab39 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00B5AD !important;\n  border-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/* Basic */\n.ui.basic.teal.label {\n  background-color: #FFFFFF !important;\n  color: #00B5AD !important;\n  border-color: #00B5AD !important;\n}\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: #FFFFFF !important;\n  color: #009c95 !important;\n  border-color: #009c95 !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185D0 !important;\n  border-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/* Basic */\n.ui.basic.blue.label {\n  background-color: #FFFFFF !important;\n  color: #2185D0 !important;\n  border-color: #2185D0 !important;\n}\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: #FFFFFF !important;\n  color: #1678c2 !important;\n  border-color: #1678c2 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435C9 !important;\n  border-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/* Basic */\n.ui.basic.violet.label {\n  background-color: #FFFFFF !important;\n  color: #6435C9 !important;\n  border-color: #6435C9 !important;\n}\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: #FFFFFF !important;\n  color: #5829bb !important;\n  border-color: #5829bb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #A333C8 !important;\n  border-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/* Basic */\n.ui.basic.purple.label {\n  background-color: #FFFFFF !important;\n  color: #A333C8 !important;\n  border-color: #A333C8 !important;\n}\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: #FFFFFF !important;\n  color: #9627ba !important;\n  border-color: #9627ba !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #E03997 !important;\n  border-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/* Basic */\n.ui.basic.pink.label {\n  background-color: #FFFFFF !important;\n  color: #E03997 !important;\n  border-color: #E03997 !important;\n}\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: #FFFFFF !important;\n  color: #e61a8d !important;\n  border-color: #e61a8d !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #A5673F !important;\n  border-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.brown.label {\n  background-color: #FFFFFF !important;\n  color: #A5673F !important;\n  border-color: #A5673F !important;\n}\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: #FFFFFF !important;\n  color: #975b33 !important;\n  border-color: #975b33 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.grey.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.grey.label {\n  background-color: #FFFFFF !important;\n  color: #767676 !important;\n  border-color: #767676 !important;\n}\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: #FFFFFF !important;\n  color: #838383 !important;\n  border-color: #838383 !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n.ui.black.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n.ui.basic.black.label {\n  background-color: #FFFFFF !important;\n  color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n}\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: #FFFFFF !important;\n  color: #27292a !important;\n  border-color: #27292a !important;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: none #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Link */\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: none #FFFFFF;\n  color: #1e70bf;\n  -webkit-box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n          box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Pointing */\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n.ui.attached.pointing.label {\n  position: absolute;\n}\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: inherit;\n}\n\n/* Arrow */\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6666em;\n  height: 0.6666em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: 1em;\n}\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: 1px 0px 0px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px 1px 1px 0px;\n  top: auto;\n  right: auto;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: 0.6666em;\n}\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px 1px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: 0.6666em;\n}\n.ui[class*=\"right pointing\"].label:before {\n  border-width: 1px 1px 0px 0px;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: -1px;\n}\n\n/*--- Below ---*/\n\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: 1px;\n}\n\n/*--- Left ---*/\n\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: -1px;\n}\n\n/*--- Right ---*/\n\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: -1px;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 1rem;\n}\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 1.28571429rem;\n}\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 1.42857143rem;\n}\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/list.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* List Item */\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: top;\n}\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: 0.5em;\n}\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183C4;\n}\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183C4 !important;\n}\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Value */\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: 0.5em;\n}\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: 0.5em;\n}\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  line-height: 0.6;\n}\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.42857143em;\n}\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.42857143em;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: 1rem;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.85714286em;\n}\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.85714286em;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: 1.5rem;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.78571429em;\n}\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n.ui.list {\n  font-size: 1em;\n}\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/loader.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Loader\n*******************************/\n\n\n/* Standard Size */\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n          transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n          animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1rem;\n  height: 1rem;\n  margin: 0em 0em 0em -0.5rem;\n}\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  margin: 0em 0em 0em -0.57142857rem;\n}\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  margin: 0em 0em 0em -0.85714286rem;\n}\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  margin: 0em 0em 0em -1.14285714rem;\n}\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  margin: 0em 0em 0em -1.71428571rem;\n}\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  margin: 0em 0em 0em -1.85714286rem;\n}\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  margin: 0em 0em 0em -2.07142857rem;\n}\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  margin: 0em 0em 0em -2.28571429rem;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n\n/* Show inside active dimmer */\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.dimmer .ui.loader:after {\n  border-color: #FFFFFF transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n          animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n          animation-duration: 1.2s;\n}\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*-------------------\n        Sizes\n--------------------*/\n\n\n/* Loader */\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1rem;\n  height: 1rem;\n  font-size: 0.78571429em;\n}\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  font-size: 0.85714286em;\n}\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  font-size: 0.92857143em;\n}\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  font-size: 1em;\n}\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  font-size: 1.14285714em;\n}\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  font-size: 1.28571429em;\n}\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  font-size: 1.42857143em;\n}\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  font-size: 1.71428571em;\n}\n\n/* Text Loader */\n.ui.mini.text.loader {\n  min-width: 1rem;\n  padding-top: 1.78571429rem;\n}\n.ui.tiny.text.loader {\n  min-width: 1.14285714rem;\n  padding-top: 1.92857143rem;\n}\n.ui.small.text.loader {\n  min-width: 1.71428571rem;\n  padding-top: 2.5rem;\n}\n.ui.text.loader {\n  min-width: 2.28571429rem;\n  padding-top: 3.07142857rem;\n}\n.ui.large.text.loader {\n  min-width: 3.42857143rem;\n  padding-top: 4.21428571rem;\n}\n.ui.big.text.loader {\n  min-width: 3.71428571rem;\n  padding-top: 4.5rem;\n}\n.ui.huge.text.loader {\n  min-width: 4.14285714rem;\n  padding-top: 4.92857143rem;\n}\n.ui.massive.text.loader {\n  min-width: 4.57142857rem;\n  padding-top: 5.35714286rem;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n.ui.inverted.loader:after {\n  border-top-color: #FFFFFF;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n          transform: none;\n}\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/menu.css",
    "content": "/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1rem 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  line-height: 1.3;\n}\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.78571429em;\n  padding-top: 0.78571429em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n      -ms-flex-align: inherit;\n          align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: inherit;\n          flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n\n/* Dropdown Icon */\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #FFFFFF;\n  margin: 0em 0px 0px;\n  -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n      -ms-flex-direction: column !important;\n          flex-direction: column !important;\n}\n\n/* Menu Items */\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: 1em !important;\n  padding: 0.78571429em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  -webkit-box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n          box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.vertical.menu .dropdown.active.item {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Evenly Divided */\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-left: 1em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.78571429em;\n}\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.78571429em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n\n/*******************************\n          Coupling\n*******************************/\n\n\n/*--------------\n     Sidebar\n---------------*/\n\n\n/* Show vertical dividers below last */\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n\n/* Left Floated */\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0.28571429rem;\n}\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border: none;\n  background: none transparent;\n  border-bottom: 1px solid #D4D4D5;\n}\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  padding: 0.92857143em 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n.ui.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #D4D4D5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: calc(100% +  2px );\n  left: -1px;\n}\n\n/* Bottom Vertical Tabular */\n.ui.bottom.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-top: 1px solid #D4D4D5;\n}\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: none;\n}\n.ui.bottom.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: -1px 0px 0px 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem !important;\n}\n\n/* Vertical Tabular (Left) */\n.ui.vertical.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #D4D4D5;\n}\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n.ui.vertical.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Vertical Right Tabular */\n.ui.vertical.right.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: 1px solid #D4D4D5;\n}\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-left: none;\n}\n.ui.vertical.right.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px 0px 0px -1px;\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px !important;\n}\n\n/* Dropdown */\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Item */\n.ui.secondary.menu .item {\n  -ms-flex-item-align: center;\n      align-self: center;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  padding: 0.78571429em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: none;\n  background: none transparent;\n}\n\n/* Image */\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.menu .active.item {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n.ui.secondary.menu .active.item:hover {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n.ui.secondary.attached.menu {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: 0em -0.92857143em;\n}\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 1.33333333em;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -ms-flex-item-align: end;\n      align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n.ui.secondary.pointing.menu .text.item {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-color: #1B1C1D;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1B1C1D;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1B1C1D;\n}\n\n/* Inverted */\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #FFFFFF !important;\n}\n\n/* Hover */\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #FFFFFF;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  margin: 1em -0.5em;\n}\n.ui.text.menu .item {\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  -ms-flex-item-align: center;\n      align-self: center;\n  margin: 0em 0em;\n  padding: 0.35714286em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Border */\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/* Vertical Sub Menu */\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: 0em;\n}\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 0em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n.ui.text.pointing.menu .active.item:after {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.text.attached.menu {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Inverted */\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n\n/* Vertical Menu */\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1B1C1D;\n}\n\n/* Icon */\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n.ui.inverted.icon.menu .item {\n  color: #FFFFFF;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n\n/* Menu */\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n}\n\n/* Icon */\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.71428571em !important;\n  margin: 0em auto 0.5rem !important;\n}\n\n/* Fluid */\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: 1px;\n    background: rgba(34, 36, 38, 0.1);\n  }\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .left.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #DB2828 !important;\n  color: #DB2828 !important;\n}\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #F2711C !important;\n  color: #F2711C !important;\n}\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #FBBD08 !important;\n  color: #FBBD08 !important;\n}\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #B5CC18 !important;\n  color: #B5CC18 !important;\n}\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21BA45 !important;\n  color: #21BA45 !important;\n}\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00B5AD !important;\n  color: #00B5AD !important;\n}\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185D0 !important;\n  color: #2185D0 !important;\n}\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435C9 !important;\n  color: #6435C9 !important;\n}\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #A333C8 !important;\n  color: #A333C8 !important;\n}\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #E03997 !important;\n  color: #E03997 !important;\n}\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #A5673F !important;\n  color: #A5673F !important;\n}\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 0px solid transparent;\n  background: #1B1C1D;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Menu Item */\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n\n/* Disabled */\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #FFFFFF;\n}\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3D3E3F !important;\n  margin: 0em !important;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #FFFFFF !important;\n}\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3D3E3F !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Red */\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: #DB2828;\n}\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: #F2711C;\n}\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: #FBBD08;\n}\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: #B5CC18;\n}\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: #21BA45;\n}\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: #00B5AD;\n}\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: #2185D0;\n}\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: #6435C9;\n}\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: #A333C8;\n}\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: #E03997;\n}\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: #A5673F;\n}\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n}\n.ui.attached.item.menu {\n  margin: 0em -1px !important;\n}\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n.ui.menu.two.item .item {\n  width: 50%;\n}\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n.ui.menu.four.item .item {\n  width: 25%;\n}\n.ui.menu.five.item .item {\n  width: 20%;\n}\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n          transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n          transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n}\n\n/* Active */\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #FFFFFF;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Middle */\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n.ui.attached.menu:not(.tabular) {\n  border: 1px solid #D4D4D5;\n}\n.ui.attached.inverted.menu {\n  border: none;\n}\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.menu {\n  font-size: 0.78571429rem;\n}\n.ui.mini.vertical.menu {\n  width: 9rem;\n}\n\n/* Tiny */\n.ui.tiny.menu {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.vertical.menu {\n  width: 11rem;\n}\n\n/* Small */\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n.ui.menu {\n  font-size: 1rem;\n}\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n.ui.large.menu {\n  font-size: 1.07142857rem;\n}\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n.ui.huge.menu {\n  font-size: 1.14285714rem;\n}\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/* Big */\n.ui.big.menu {\n  font-size: 1.21428571rem;\n}\n.ui.big.vertical.menu {\n  width: 22rem;\n}\n\n/* Massive */\n.ui.massive.menu {\n  font-size: 1.28571429rem;\n}\n.ui.massive.vertical.menu {\n  width: 25rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/message.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #F8F8F9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.message:first-child {\n  margin-top: 0em;\n}\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n\n/* Header */\n.ui.message .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285714em 0em 0rem 0em;\n}\n\n/* Default font size */\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n.ui.compact.icon.message {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n          box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n.ui.attached.icon.message {\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 0 auto;\n          flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 1 auto;\n          flex: 1 1 auto;\n  vertical-align: middle;\n}\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n\n/* Positive */\n.ui.positive.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.positive.message,\n.ui.attached.positive.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.positive.message .header {\n  color: #1A531B;\n}\n\n/* Negative */\n.ui.negative.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.negative.message,\n.ui.attached.negative.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.negative.message .header {\n  color: #912D2B;\n}\n\n/* Info */\n.ui.info.message {\n  background-color: #F8FFFF;\n  color: #276F86;\n}\n.ui.info.message,\n.ui.attached.info.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.info.message .header {\n  color: #0E566C;\n}\n\n/* Warning */\n.ui.warning.message {\n  background-color: #FFFAF3;\n  color: #573A08;\n}\n.ui.warning.message,\n.ui.attached.warning.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.warning.message .header {\n  color: #794B02;\n}\n\n/* Error */\n.ui.error.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n.ui.error.message,\n.ui.attached.error.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.error.message .header {\n  color: #912D2B;\n}\n\n/* Success */\n.ui.success.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n.ui.success.message,\n.ui.attached.success.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.success.message .header {\n  color: #1A531B;\n}\n\n/* Colors */\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.red.message {\n  background-color: #FFE8E6;\n  color: #DB2828;\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.red.message .header {\n  color: #c82121;\n}\n.ui.orange.message {\n  background-color: #FFEDDE;\n  color: #F2711C;\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.orange.message .header {\n  color: #e7640d;\n}\n.ui.yellow.message {\n  background-color: #FFF8DB;\n  color: #B58105;\n  -webkit-box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n.ui.olive.message {\n  background-color: #FBFDEF;\n  color: #8ABC1E;\n  -webkit-box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n.ui.green.message {\n  background-color: #E5F9E7;\n  color: #1EBC30;\n  -webkit-box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.green.message .header {\n  color: #1aa62a;\n}\n.ui.teal.message {\n  background-color: #E1F7F7;\n  color: #10A3A3;\n  -webkit-box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n.ui.blue.message {\n  background-color: #DFF0FF;\n  color: #2185D0;\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n.ui.violet.message {\n  background-color: #EAE7FF;\n  color: #6435C9;\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n.ui.purple.message {\n  background-color: #F6E7FF;\n  color: #A333C8;\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.purple.message .header {\n  color: #922eb4;\n}\n.ui.pink.message {\n  background-color: #FFE3FB;\n  color: #E03997;\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.pink.message .header {\n  color: #dd238b;\n}\n.ui.brown.message {\n  background-color: #F1E2D3;\n  color: #A5673F;\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n          box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: 0.78571429em;\n}\n.ui.tiny.message {\n  font-size: 0.85714286em;\n}\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n.ui.message {\n  font-size: 1em;\n}\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n.ui.big.message {\n  font-size: 1.28571429em;\n}\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/modal.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n          box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #FFFFFF;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.28571429em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #FFFFFF;\n}\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n}\n\n/* Image */\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  width: '';\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"top aligned\"] {\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > [class*=\"middle aligned\"] {\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n.ui.modal > [class*=\"stretched\"] {\n  -ms-flex-item-align: stretch;\n      align-self: stretch;\n}\n\n/* Description */\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  min-width: 0px;\n  -ms-flex-item-align: top;\n      align-self: top;\n}\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n/*rtl:ignore*/\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: #F9FAFB;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n\n/* Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n  /*rtl:ignore*/\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n  /*rtl:ignore*/\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    -webkit-box-shadow: none;\n            box-shadow: none;\n  }\n  \n/* Let Buttons Stack */\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  -webkit-box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n          box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n  color: #FFFFFF;\n}\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n.ui.basic.modal > .header {\n  color: #FFFFFF;\n}\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width: 991px) {\n  .ui.basic.modal > .close {\n    color: #FFFFFF;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Scrolling\n---------------*/\n\n\n/* A modal that cannot fit on the page */\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n@media only screen and (max-width: 991px) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n}\n\n/* Scrolling Content */\n.ui.modal .scrolling.content {\n  max-height: calc(70vh);\n  overflow: auto;\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Mini */\n.ui.mini.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Mini Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.mini.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.mini.modal {\n    width: 35.2%;\n    margin: 0em 0em 0em -17.6%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.mini.modal {\n    width: 340px;\n    margin: 0em 0em 0em -170px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.mini.modal {\n    width: 360px;\n    margin: 0em 0em 0em -180px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.mini.modal {\n    width: 380px;\n    margin: 0em 0em 0em -190px;\n  }\n}\n\n/* mini */\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Tiny Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.tiny.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.tiny.modal {\n    width: 52.8%;\n    margin: 0em 0em 0em -26.4%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.tiny.modal {\n    width: 510px;\n    margin: 0em 0em 0em -255px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.tiny.modal {\n    width: 540px;\n    margin: 0em 0em 0em -270px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.tiny.modal {\n    width: 570px;\n    margin: 0em 0em 0em -285px;\n  }\n}\n\n/* Small */\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/modal.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        ignoreRepeatedEvents = false,\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals'\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer');\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(ignoreRepeatedEvents || settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          deny: function() {\n            if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.set.dimmerSettings();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          dimmerSettings: function() {\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                variation  : false,\n                closable   : 'auto',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n              $dimmer.addClass(className.inverted);\n            }\n            else {\n              $dimmer.removeClass(className.inverted);\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            else {\n              $dimmable.removeClass(className.blurring);\n            }\n            $context.dimmer('setting', dimmerSettings);\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    inverted   : 'inverted',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/nag.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  -webkit-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n          box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\na.ui.nag {\n  cursor: pointer;\n}\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #FFFFFF;\n}\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #FFFFFF;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Hover */\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #F3F4F5;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/nag.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/popup.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  \n/* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n          box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n    Tooltip\n---------------*/\n\n\n/* Content */\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: 1rem;\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n          transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n          box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/* Popup */\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n  font-size: 1rem;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: none;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  z-index: 1;\n}\n\n/* Default Position (Top Center) */\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n/* Animation */\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n[data-tooltip]:before {\n  opacity: 0;\n  -webkit-transform: rotate(45deg) scale(0) !important;\n          transform: rotate(45deg) scale(0) !important;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:after {\n  opacity: 1;\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n[data-tooltip]:hover:before {\n  -webkit-transform: rotate(45deg) scale(1) !important;\n          transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  -webkit-transform: translateX(-50%) scale(0) !important;\n          transform: translateX(-50%) scale(0) !important;\n}\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  -webkit-transform: translateX(-50%) scale(1) !important;\n          transform: translateX(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  -webkit-transform: translateY(-50%) scale(0) !important;\n          transform: translateY(-50%) scale(0) !important;\n}\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  -webkit-transform: translateY(-50%) scale(1) !important;\n          transform: translateY(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  -webkit-transform: scale(0) !important;\n          transform: scale(0) !important;\n}\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  -webkit-transform: scale(1) !important;\n          transform: scale(1) !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Arrow */\n[data-tooltip][data-inverted]:before {\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/* Arrow Position */\n[data-tooltip][data-inverted]:before {\n  background: #1B1C1D;\n}\n\n/* Popup  */\n[data-tooltip][data-inverted]:after {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n[data-tooltip][data-inverted]:after .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n/*--------------\n    Position\n---------------*/\n\n\n/* Top Center */\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-bottom: 0.5em;\n}\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Left */\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Right */\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Bottom Center */\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  -webkit-transform: translateX(-50%);\n          transform: translateX(-50%);\n  margin-top: 0.5em;\n}\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Left */\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Right */\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: 1em;\n  margin-left: -0.14285714rem;\n  margin-top: 0.07142857rem;\n}\n\n/* Left Center */\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: -0.14285714rem;\n  margin-right: -0.07142857rem;\n}\n\n/* Right Center */\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: 0.5em;\n  -webkit-transform: translateY(-50%);\n          transform: translateY(-50%);\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: -0.07142857rem;\n  margin-left: 0.14285714rem;\n}\n\n/* Arrow */\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-position~=\"top\"][data-tooltip]:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: #1B1C1D;\n}\n[data-position~=\"bottom\"][data-tooltip]:before {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n[data-position~=\"bottom\"][data-tooltip]:after {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n[data-position=\"left center\"][data-tooltip]:after {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  -webkit-transform-origin: right center;\n          transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:after {\n  -webkit-transform-origin: left center;\n          transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n.ui.top.popup {\n  margin: 0em 0em 0.71428571em;\n}\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n          transform-origin: left bottom;\n}\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n          transform-origin: center bottom;\n}\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n          transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n.ui.left.center.popup {\n  margin: 0em 0.71428571em 0em 0em;\n  -webkit-transform-origin: right 50%;\n          transform-origin: right 50%;\n}\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.71428571em;\n  -webkit-transform-origin: left 50%;\n          transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n.ui.bottom.popup {\n  margin: 0.71428571em 0em 0em;\n}\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n          transform-origin: left top;\n}\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n}\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n          transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.30714286em;\n  top: -0.30714286em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.left.popup:before {\n  top: -0.30714286em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.bottom.right.popup:before {\n  top: -0.30714286em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n          box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.30714286em;\n  left: 50%;\n  margin-left: -0.30714286em;\n}\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n/*rtl:rename*/\n.ui.top.left.popup:before {\n  bottom: -0.30714286em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n/*rtl:rename*/\n.ui.top.right.popup:before {\n  bottom: -0.30714286em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n/*rtl:rename*/\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.30714286em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n          box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n/*rtl:rename*/\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.30714286em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n          box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/* Arrow Color By Location */\n.ui.bottom.popup:before {\n  background: #FFFFFF;\n}\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: #FFFFFF;\n}\n.ui.top.popup:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n.ui.inverted.bottom.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: #1B1C1D;\n}\n.ui.inverted.top.popup:before {\n  background: #1B1C1D;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* Immediate Nested Grid */\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n          transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n@media only screen and (max-width: 767px) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: 250px;\n  }\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Inverted colors  */\n.ui.inverted.popup {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n.ui.inverted.popup:before {\n  background-color: #1B1C1D;\n  -webkit-box-shadow: none !important;\n          box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n.ui.popup {\n  font-size: 1rem;\n}\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/popup.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent($target);\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as target');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($target)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.popupVisible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === 'undefined');\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              module.bind.closeOnScroll();\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.bind.touchClose();\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.bind.clickaway();\n            }\n          },\n          closeOnScroll: function() {\n            module.verbose('Binding scroll close event to document');\n            $scrollContext\n              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n            ;\n          },\n          touchClose: function() {\n            module.verbose('Binding popup touchclose event to document');\n            $document\n              .on('touchstart' + elementNamespace, function(event) {\n                module.verbose('Touched away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          },\n          clickaway: function() {\n            module.verbose('Binding popup close event to document');\n            $document\n              .on('click' + elementNamespace, function(event) {\n                module.verbose('Clicked away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.popupVisible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active       : 'active',\n    animating    : 'animating',\n    dropdown     : 'dropdown',\n    fluid        : 'fluid',\n    loading      : 'loading',\n    popup        : 'ui popup',\n    position     : 'top left center bottom right',\n    visible      : 'visible',\n    popupVisible : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/progress.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Activity Bar */\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/* Indicating */\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #EFBC72;\n}\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #E6BB48;\n}\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #DDC928;\n}\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #B4D95C;\n}\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66DA81;\n}\n\n/* Indicating Label */\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #D95C5C;\n}\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n.ui.indicating.progress.success .label {\n  color: #1A531B;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21BA45 !important;\n}\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.success > .label {\n  color: #1A531B;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #F2C037 !important;\n}\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.warning > .label {\n  color: #794B02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #DB2828 !important;\n}\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n.ui.progress.error > .label {\n  color: #912D2B;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #FFFFFF;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n          animation: progress-active 2s ease infinite;\n}\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n          animation: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n.ui.inverted.progress .bar > .progress {\n  color: #F9FAFB;\n}\n.ui.inverted.progress > .label {\n  color: #FFFFFF;\n}\n.ui.inverted.progress.success > .label {\n  color: #21BA45;\n}\n.ui.inverted.progress.warning > .label {\n  color: #F2C037;\n}\n.ui.inverted.progress.error > .label {\n  color: #DB2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* bottom attached */\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n\n/* Red */\n.ui.red.progress .bar {\n  background-color: #DB2828;\n}\n.ui.red.inverted.progress .bar {\n  background-color: #FF695E;\n}\n\n/* Orange */\n.ui.orange.progress .bar {\n  background-color: #F2711C;\n}\n.ui.orange.inverted.progress .bar {\n  background-color: #FF851B;\n}\n\n/* Yellow */\n.ui.yellow.progress .bar {\n  background-color: #FBBD08;\n}\n.ui.yellow.inverted.progress .bar {\n  background-color: #FFE21F;\n}\n\n/* Olive */\n.ui.olive.progress .bar {\n  background-color: #B5CC18;\n}\n.ui.olive.inverted.progress .bar {\n  background-color: #D9E778;\n}\n\n/* Green */\n.ui.green.progress .bar {\n  background-color: #21BA45;\n}\n.ui.green.inverted.progress .bar {\n  background-color: #2ECC40;\n}\n\n/* Teal */\n.ui.teal.progress .bar {\n  background-color: #00B5AD;\n}\n.ui.teal.inverted.progress .bar {\n  background-color: #6DFFFF;\n}\n\n/* Blue */\n.ui.blue.progress .bar {\n  background-color: #2185D0;\n}\n.ui.blue.inverted.progress .bar {\n  background-color: #54C8FF;\n}\n\n/* Violet */\n.ui.violet.progress .bar {\n  background-color: #6435C9;\n}\n.ui.violet.inverted.progress .bar {\n  background-color: #A291FB;\n}\n\n/* Purple */\n.ui.purple.progress .bar {\n  background-color: #A333C8;\n}\n.ui.purple.inverted.progress .bar {\n  background-color: #DC73FF;\n}\n\n/* Pink */\n.ui.pink.progress .bar {\n  background-color: #E03997;\n}\n.ui.pink.inverted.progress .bar {\n  background-color: #FF8EDF;\n}\n\n/* Brown */\n.ui.brown.progress .bar {\n  background-color: #A5673F;\n}\n.ui.brown.inverted.progress .bar {\n  background-color: #D67C1C;\n}\n\n/* Grey */\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n.ui.grey.inverted.progress .bar {\n  background-color: #DCDDDE;\n}\n\n/* Black */\n.ui.black.progress .bar {\n  background-color: #1B1C1D;\n}\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n.ui.small.progress .bar {\n  height: 1em;\n}\n.ui.progress {\n  font-size: 1rem;\n}\n.ui.progress .bar {\n  height: 1.75em;\n}\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n\n/*******************************\n            Progress\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/progress.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        bind: {\n          transitionEnd: function(callback) {\n            var\n              transitionEnd = module.get.transitionEnd()\n            ;\n            $bar\n              .one(transitionEnd + eventNamespace, function(event) {\n                clearTimeout(module.failSafeTimer);\n                callback.call(this, event);\n              })\n            ;\n            module.failSafeTimer = setTimeout(function() {\n              $bar.triggerHandler(transitionEnd);\n            }, settings.duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            module.bind.transitionEnd(animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  // delay in ms for fail safe animation callback\n  failSafeDelay : 100,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/rail.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: calc( 300px  +  1em );\n}\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n.ui.very.close.rail {\n  width: calc( 300px  +  0.5em );\n}\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rail {\n  font-size: 0.85714286rem;\n}\n.ui.small.rail {\n  font-size: 0.92857143rem;\n}\n.ui.rail {\n  font-size: 1rem;\n}\n.ui.large.rail {\n  font-size: 1.14285714rem;\n}\n.ui.big.rail {\n  font-size: 1.28571429rem;\n}\n.ui.huge.rail {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rail {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/rating.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n      Standard\n--------------------*/\n\n\n/* Inactive Icon */\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Inactive */\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #FFE623 !important;\n  text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important;\n}\n\n/* Selected Star */\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FFCC00 !important;\n  text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #FF6D75 !important;\n  text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important;\n}\n\n/* Selected Heart */\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FF3000 !important;\n  text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*-------------------\n       Disabled\n--------------------*/\n\n\n/* disabled rating */\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n\n/* Selected Rating */\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n.ui.rating {\n  font-size: 1rem;\n}\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n\n/* Unfilled Star */\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n/* Active */\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/rating.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/reset.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Reset\n*******************************/\n\n\n/* Border-Box */\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: inherit;\n          box-sizing: inherit;\n}\nhtml {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  \n/* mobile firefox too! */\n}\n/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\nhtml {\n  line-height: 1.15;\n  \n/* 1 */\n  -ms-text-size-adjust: 100%;\n  \n/* 2 */\n  -webkit-text-size-adjust: 100%;\n  \n/* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n/**\n * Remove the margin in all browsers (opinionated).\n */\nbody {\n  margin: 0;\n}\n/**\n * Add the correct display in IE 9-.\n */\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\nfigcaption,\nfigure,\nmain {\n  \n/* 1 */\n  display: block;\n}\n/**\n * Add the correct margin in IE 8.\n */\nfigure {\n  margin: 1em 40px;\n}\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\nhr {\n  -webkit-box-sizing: content-box;\n          box-sizing: content-box;\n  \n/* 1 */\n  height: 0;\n  \n/* 1 */\n  overflow: visible;\n  \n/* 2 */\n}\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\npre {\n  font-family: monospace, monospace;\n  \n/* 1 */\n  font-size: 1em;\n  \n/* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\na {\n  background-color: transparent;\n  \n/* 1 */\n  -webkit-text-decoration-skip: objects;\n  \n/* 2 */\n}\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\nabbr[title] {\n  border-bottom: none;\n  \n/* 1 */\n  text-decoration: underline;\n  \n/* 2 */\n  -webkit-text-decoration: underline dotted;\n          text-decoration: underline dotted;\n  \n/* 2 */\n}\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\nb,\nstrong {\n  font-weight: inherit;\n}\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\nb,\nstrong {\n  font-weight: bolder;\n}\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  \n/* 1 */\n  font-size: 1em;\n  \n/* 2 */\n}\n/**\n * Add the correct font style in Android 4.3-.\n */\ndfn {\n  font-style: italic;\n}\n/**\n * Add the correct background and color in IE 9-.\n */\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n/**\n * Add the correct font size in all browsers.\n */\nsmall {\n  font-size: 80%;\n}\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\nsub {\n  bottom: -0.25em;\n}\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\naudio,\nvideo {\n  display: inline-block;\n}\n/**\n * Add the correct display in iOS 4-7.\n */\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n/**\n * Remove the border on images inside links in IE 10-.\n */\nimg {\n  border-style: none;\n}\n/**\n * Hide the overflow in IE.\n */\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif;\n  \n/* 1 */\n  font-size: 100%;\n  \n/* 1 */\n  line-height: 1.15;\n  \n/* 1 */\n  margin: 0;\n  \n/* 2 */\n}\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\nbutton,\ninput {\n  \n/* 1 */\n  overflow: visible;\n}\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\nbutton,\nselect {\n  \n/* 1 */\n  text-transform: none;\n}\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n  \n/* 2 */\n}\n/**\n * Remove the inner border and padding in Firefox.\n */\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n/**\n * Restore the focus styles unset by the previous rule.\n */\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n/**\n * Correct the padding in Firefox.\n */\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\nlegend {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  \n/* 1 */\n  color: inherit;\n  \n/* 2 */\n  display: table;\n  \n/* 1 */\n  max-width: 100%;\n  \n/* 1 */\n  padding: 0;\n  \n/* 3 */\n  white-space: normal;\n  \n/* 1 */\n}\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\nprogress {\n  display: inline-block;\n  \n/* 1 */\n  vertical-align: baseline;\n  \n/* 2 */\n}\n/**\n * Remove the default vertical scrollbar in IE.\n */\ntextarea {\n  overflow: auto;\n}\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n          box-sizing: border-box;\n  \n/* 1 */\n  padding: 0;\n  \n/* 2 */\n}\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n[type=\"search\"] {\n  -webkit-appearance: textfield;\n  \n/* 1 */\n  outline-offset: -2px;\n  \n/* 2 */\n}\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  \n/* 1 */\n  font: inherit;\n  \n/* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\ndetails,\nmenu {\n  display: block;\n}\n/*\n * Add the correct display in all browsers.\n */\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n/**\n * Add the correct display in IE 9-.\n */\ncanvas {\n  display: inline-block;\n}\n/**\n * Add the correct display in IE.\n */\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n/**\n * Add the correct display in IE 10-.\n */\n[hidden] {\n  display: none;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/reveal.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\n}\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n          transform: translateX(0%) !important;\n}\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n          transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n          transform: translateX(-100%) !important;\n}\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n          transform: translateX(100%) !important;\n}\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n          transform: translateY(-100%) !important;\n}\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n          transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n          transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n          transform: rotate(0deg);\n}\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n          transform-origin: bottom right;\n}\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n          transform: rotate(110deg);\n}\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n          transform-origin: bottom left;\n}\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n          transform: rotate(-110deg);\n}\n\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n          transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/search.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n          box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n          transform-origin: center top;\n  white-space: normal;\n  background: #FFFFFF;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid #D4D4D5;\n  z-index: 998;\n}\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n.ui.search > .results .result .title {\n  margin: -0.14285714em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n.ui.search > .results .result .price {\n  float: right;\n  color: #21BA45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n.ui.search > .results > .message .header {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #F3F4F5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #F9FAFB;\n}\n.ui.search .action:hover {\n  background: #E0E0E0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #F3F4F5;\n}\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n\n/*******************************\n           Types\n*******************************/\n\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: 0.28571429rem;\n}\n\n/* Remove input */\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: '';\n  top: 0em;\n  right: 0em;\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\n  transition: color 0.1s ease, opacity 0.1s ease;\n}\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  pointer-events: auto;\n}\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: 1.85714em;\n}\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: 1;\n  color: #DB2828;\n}\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n.ui.category.search > .results .category {\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n.ui.category.search > .results .category .result {\n  background: #FFFFFF;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.78571429em;\n}\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n.ui.search {\n  font-size: 1em;\n}\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/search.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className        = settings.className,\n        metadata         = settings.metadata,\n        regExp           = settings.regExp,\n        fields           = settings.fields,\n        selector         = settings.selector,\n        error            = settings.error,\n        namespace        = settings.namespace,\n\n        eventNamespace   = '.' + namespace,\n        moduleNamespace  = namespace + '-module',\n\n        $module          = $(this),\n        $prompt          = $module.find(selector.prompt),\n        $searchButton    = $module.find(selector.searchButton),\n        $results         = $module.find(selector.results),\n        $result          = $module.find(selector.result),\n        $category        = $module.find(selector.category),\n\n        element          = this,\n        instance         = $module.data(moduleNamespace),\n\n        disabledBubbled  = false,\n        resultsDismissed = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            if(settings.searchDelay) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.is.focused()) {\n                  module.query();\n                }\n              }, settings.searchDelay);\n            }\n            else {\n              module.query();\n            }\n          },\n          focus: function() {\n            module.set.focus();\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\n              module.query(function() {\n                if(module.can.show() ) {\n                  module.showResults();\n                }\n              });\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            resultsDismissed = false;\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result         = $module.find(selector.result),\n            $category       = $module.find(selector.category),\n            $activeResult   = $result.filter('.' + className.active),\n            currentIndex    = $result.index( $activeResult ),\n            resultSize      = $result.length,\n            hasActiveResult = $activeResult.length > 0,\n\n            keyCode         = event.which,\n            keys            = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.hideResults();\n            resultsDismissed = true;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow && hasActiveResult) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm, callback) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                  callback();\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                  callback();\n                },\n                onAbort : function(response) {\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            if(!event.target) {\n              return;\n            }\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target)\n            ;\n            return (isInDOM && $target.closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          callback = callback || function() {};\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n              callback();\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n                callback();\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm, callback);\n              }\n              else {\n                module.error(error.source);\n                callback();\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm, callback);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          },\n          results: function() {\n            if($results.length === 0) {\n              return false;\n            }\n            var\n              html = $results.html()\n            ;\n            return html != '';\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults(function() {\n              $results.empty();\n            });\n          }\n        },\n\n        showResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(resultsDismissed) {\n            return;\n          }\n          if(!module.is.visible() && module.has.results()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // Whether search should query current term on focus\n  searchOnFocus     : true,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/segment.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n\n/* Header */\n.ui.inverted.segment > .ui.header {\n  color: #FFFFFF;\n}\n\n/* Label */\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n.ui.basic.table.segment {\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  -webkit-box-shadow: '';\n          box-shadow: '';\n  z-index: auto;\n}\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #FFFFFF;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: '';\n          box-shadow: '';\n}\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n          transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n          transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/* Padded vertical */\n.ui.padded.segment.vertical.segment,\n.ui[class*=\"very padded\"].vertical.segment {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n\n/* Group */\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Only */\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Nested Group */\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n          flex: 1 1 auto;\n  -ms-flex: 1 1 0px;\n  \n/* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Border Fixes */\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n          animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n  }\n  to {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #DB2828 !important;\n}\n.ui.inverted.red.segment {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #F2711C !important;\n}\n.ui.inverted.orange.segment {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #FBBD08 !important;\n}\n.ui.inverted.yellow.segment {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #B5CC18 !important;\n}\n.ui.inverted.olive.segment {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21BA45 !important;\n}\n.ui.inverted.green.segment {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00B5AD !important;\n}\n.ui.inverted.teal.segment {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185D0 !important;\n}\n.ui.inverted.blue.segment {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435C9 !important;\n}\n.ui.inverted.violet.segment {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #A333C8 !important;\n}\n.ui.inverted.purple.segment {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #E03997 !important;\n}\n.ui.inverted.pink.segment {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #A5673F !important;\n}\n.ui.inverted.brown.segment {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676 !important;\n}\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1B1C1D !important;\n}\n.ui.inverted.black.segment {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Nested */\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.inverted.segment .inverted.segment {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Attached */\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n\n/* Secondary */\n.ui.secondary.segment {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.2)), to(rgba(255, 255, 255, 0.2)));\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n.ui.tertiary.segment {\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.6);\n}\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.35)), to(rgba(255, 255, 255, 0.35)));\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n          box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: 0.85714286rem;\n}\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: 0.92857143rem;\n}\n.ui.segments .segment,\n.ui.segment {\n  font-size: 1rem;\n}\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: 1.14285714rem;\n}\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: 1.28571429rem;\n}\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: 1.42857143rem;\n}\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/shape.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n          perspective: 2000px;\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n          transform-style: preserve-3d;\n}\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n.ui.shape .side {\n  display: none;\n}\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n          backface-visibility: visible !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #E6E6E6;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n          box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n     -moz-user-select: text;\n      -ms-user-select: text;\n          user-select: text;\n}\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n.ui.shape.animating .sides {\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/shape.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/sidebar.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sidebar\n*******************************/\n\n\n/* Sidebar Menu */\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n          transform: translate3d(0, -100%, 0);\n}\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n          transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 2;\n}\nbody.pushable > .pusher {\n  background: #FFFFFF;\n}\n\n/* Pusher should inherit background from context */\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n          box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n          transform: translate3d(260px, 0, 0);\n}\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n          transform: translate3d(-260px, 0, 0);\n}\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n          transform: translate3d(0, 36px, 0);\n}\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n          transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Width\n---------------*/\n\n\n/* Left / Right */\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n          transform: translate3d(150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n          transform: translate3d(60px, 0, 0);\n}\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n          transform: translate3d(350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n          transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n          transform: translate3d(-150px, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n          transform: translate3d(-60px, 0, 0);\n}\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n          transform: translate3d(-350px, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n          transform: translate3d(-475px, 0, 0);\n}\n\n\n/*******************************\n          Animations\n*******************************/\n\n\n/*--------------\n    Overlay\n---------------*/\n\n\n/* Set-up */\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n          transform: translate3d(-100%, 0%, 0);\n}\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n          transform: translate3d(100%, 0%, 0);\n}\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End - Sidebar */\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n          transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n          transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n\n/* Initial */\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n\n/* Initial */\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n\n/* Initial */\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n          transform: translate3d(0, -50%, 0);\n}\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n\n/* Initial */\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n          transform: translate3d(50%, 0, 0);\n}\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n          transform: translate3d(-50%, 0, 0);\n}\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n          transform: translate3d(0%, 50%, 0);\n}\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n          transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n          transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n\n/* Initial */\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n          transform: translate3d(-100%, 0, 0);\n}\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n          transform: translate3d(100%, 0, 0);\n}\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n          transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n          transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n          transform-origin: 75% 50%;\n}\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n          transform-origin: 25% 50%;\n}\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n          transform-origin: 50% 75%;\n}\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n          transform-origin: 50% 25%;\n}\n\n/* Animation */\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n          transform: translate3d(0, 0, 0);\n}\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n          transform: scale(0.75);\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/sidebar.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          // (This is no longer necessary in latest iOS)\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/site.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Page\n*******************************/\n\n@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin');\nhtml,\nbody {\n  height: 100%;\n}\nhtml {\n  font-size: 14px;\n}\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #FFFFFF;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.28571429em;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\nh2 {\n  font-size: 1.71428571rem;\n}\nh3 {\n  font-size: 1.28571429rem;\n}\nh4 {\n  font-size: 1.07142857rem;\n}\nh5 {\n  font-size: 1rem;\n}\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\np:first-child {\n  margin-top: 0em;\n}\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n\n/*******************************\n         Scrollbars\n*******************************/\n\n\n\n/*******************************\n          Highlighting\n*******************************/\n\n\n/* Site */\n::-webkit-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::-moz-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n::selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Force Simple Scrollbars */\nbody ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 10px;\n}\nbody ::-webkit-scrollbar-track {\n  background: rgba(0, 0, 0, 0.1);\n  border-radius: 0px;\n}\nbody ::-webkit-scrollbar-thumb {\n  cursor: pointer;\n  border-radius: 5px;\n  background: rgba(0, 0, 0, 0.25);\n  -webkit-transition: color 0.2s ease;\n  transition: color 0.2s ease;\n}\nbody ::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(0, 0, 0, 0.15);\n}\nbody ::-webkit-scrollbar-thumb:hover {\n  background: rgba(128, 135, 139, 0.8);\n}\n\n/* Inverted UI */\nbody .ui.inverted::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\nbody .ui.inverted::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n\n/*******************************\n        Global Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/site.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/state.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/statistic.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           Statistic\n*******************************/\n\n\n/* Standalone */\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Group\n*******************************/\n\n\n/* Grouped */\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n      -ms-flex-align: start;\n          align-items: flex-start;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n}\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1B1C1D;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n}\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #DB2828;\n}\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #F2711C;\n}\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #FBBD08;\n}\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #B5CC18;\n}\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21BA45;\n}\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00B5AD;\n}\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185D0;\n}\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435C9;\n}\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #A333C8;\n}\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #E03997;\n}\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #A5673F;\n}\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #FFFFFF;\n}\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #FF695E;\n}\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #FF851B;\n}\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #FFE21F;\n}\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #D9E778;\n}\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ECC40;\n}\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6DFFFF;\n}\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54C8FF;\n}\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #A291FB;\n}\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #DC73FF;\n}\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #FF8EDF;\n}\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #D67C1C;\n}\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #DCDDDE;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem !important;\n}\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Tiny */\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Small */\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Medium */\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem !important;\n}\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem !important;\n}\n\n/* Large */\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem !important;\n}\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/* Huge */\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem !important;\n}\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem !important;\n}\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/step.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  -webkit-box-align: stretch;\n      -ms-flex-align: stretch;\n          align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* First Steps */\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n      -ms-flex: 1 0 auto;\n          flex: 1 0 auto;\n  -ms-flex-wrap: wrap;\n      flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: row;\n          flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n      -ms-flex-align: center;\n          align-items: center;\n  -webkit-box-pack: center;\n      -ms-flex-pack: center;\n          justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/* Arrow */\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #FFFFFF;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n          transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n/* Last Step */\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/* Title */\n.ui.steps .step .title {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.steps .step > .description {\n  width: 100%;\n}\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n      -ms-flex: 0 1 auto;\n          flex: 0 1 auto;\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n      -ms-flex-positive: 1 0 auto;\n          flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -ms-flex-item-align: middle;\n      align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n.ui.ordered.steps .step > * {\n  display: block;\n  -ms-flex-item-align: middle;\n      align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n      -ms-flex-direction: column;\n          flex-direction: column;\n  overflow: visible;\n}\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n      -ms-flex-pack: start;\n          justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-right: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.vertical.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Arrow */\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n.ui.vertical.steps .step:last-child:after {\n  display: none;\n}\n.ui.vertical.steps .active.step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n\n/* Mobile (Default) */\n@media only screen and (max-width: 767px) {\n  .ui.steps:not(.unstackable) {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  .ui.steps:not(.unstackable) .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui.steps:not(.unstackable) .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui.steps:not(.unstackable) .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui.steps:not(.unstackable) .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui.steps:not(.unstackable) .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui.steps:not(.unstackable) .step > .icon,\n  .ui.ordered.steps:not(.unstackable) .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/* Link Hover */\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #F9FAFB;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n.ui.steps .step.active {\n  cursor: auto;\n  background: #F3F4F5;\n}\n.ui.steps .step.active:after {\n  background: #F3F4F5;\n}\n.ui.steps .step.active .title {\n  color: #4183C4;\n}\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n.ui.steps .step:after {\n  display: block;\n}\n.ui.steps .active.step:after {\n  display: block;\n}\n.ui.steps .step:last-child:after {\n  display: none;\n}\n.ui.steps .active.step:last-child:after {\n  display: none;\n}\n\n/* Active Hover */\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21BA45;\n}\n\n/* Disabled */\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #FFFFFF;\n  pointer-events: none;\n}\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.steps .disabled.step:after {\n  background: #FFFFFF;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n   Stackable\n---------------*/\n\n\n/* Tablet Or Below */\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n  }\n  \n/* Steps */\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n        -ms-flex-direction: column;\n            flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n  \n/* Arrow */\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n  \n/* Content */\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n  \n/* Icon */\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n\n/* Fluid */\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n\n/* Top */\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px 0;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n.ui.bottom.attached.steps {\n  margin: 0 -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -ms-flex-wrap: nowrap;\n      flex-wrap: nowrap;\n}\n.ui.one.steps > .step {\n  width: 100%;\n}\n.ui.two.steps > .step {\n  width: 50%;\n}\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n.ui.four.steps > .step {\n  width: 25%;\n}\n.ui.five.steps > .step {\n  width: 20%;\n}\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: 0.78571429rem;\n}\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: 0.85714286rem;\n}\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: 0.92857143rem;\n}\n.ui.steps .step,\n.ui.step {\n  font-size: 1rem;\n}\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: 1.14285714rem;\n}\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: 1.28571429rem;\n}\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: 1.42857143rem;\n}\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: 1.71428571rem;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff');\n}\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  \n/* '' */\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/sticky.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Bound */\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/sticky.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          if(settings.container) {\n            $container = $(settings.container);\n          }\n          else {\n            $container = $module.offsetParent();\n          }\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits          : ( (element.height + settings.offset) <= scrollContext.height),\n              sameHeight    : (element.height == context.height),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          minimumSize: function() {\n            $container\n              .css('min-height', '')\n            ;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            sameHeight     = cache.sameHeight,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n          if(elementVisible && !sameHeight) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.minimumSize();\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n  container      : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  // will only set container height if difference between context and container is larger than this number\n  jitter         : 5,\n\n  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)\n  setSize        : true,\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/tab.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n          animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n          box-shadow: 0px 0px 0px 1px transparent;\n}\n\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n\n\n/*******************************\n        User Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/tab.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\n              $tab\n                .empty()\n                .append($(html).clone(true))\n              ;\n            }\n            else {\n              if(evaluateScripts) {\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n                $tab.html(html);\n              }\n              else {\n                module.debug('Updating HTML', tabPath, html);\n                tab.innerHTML = html;\n              }\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n\n                  if(settings.loadOnce) {\n                    module.cache.add(fullTabPath, true);\n                  }\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\n                    setTimeout(function() {\n                      var\n                        $clone = $tab.children().clone(true)\n                      ;\n                      $clone = $clone.not('script');\n                      module.cache.add(fullTabPath, $clone);\n                    }, 0);\n                  }\n                  else {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(!settings.loadOnce) {\n                if(settings.evaluateScripts == 'once') {\n                  module.update.content(tabPath, cachedContent, false);\n                }\n                else {\n                  module.update.content(tabPath, cachedContent);\n                }\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/table.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Table\n*******************************/\n\n\n/* Prototype */\n.ui.table {\n  width: 100%;\n  background: #FFFFFF;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n.ui.table:first-child {\n  margin-top: 0em;\n}\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Parts\n*******************************/\n\n\n/* Table Content */\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n.ui.table thead {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.table thead th {\n  cursor: auto;\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.78571429em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n.ui.table tfoot {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429em 0.78571429em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n.ui.table td {\n  padding: 0.78571429em 0.78571429em;\n  text-align: inherit;\n}\n\n/* Icons */\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n.ui.table.segment {\n  padding: 0em;\n}\n.ui.table.segment:after {\n  display: none;\n}\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n            box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n  \n/* Definition Table */\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/* UI Image */\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: -1px -1px 0px 1px #FFFFFF;\n          box-shadow: -1px -1px 0px 1px #FFFFFF;\n}\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  -webkit-box-shadow: 1px 1px 0px 1px #FFFFFF;\n          box-shadow: 1px 1px 0px 1px #FFFFFF;\n}\n\n/* Remove Border */\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px -1px 0px 1px #FFFFFF;\n          box-shadow: 0px -1px 0px 1px #FFFFFF;\n}\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px 1px 0px 1px #FFFFFF;\n          box-shadow: 0px 1px 0px 1px #FFFFFF;\n}\n\n/* Highlight Defining Column */\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  text-transform: '';\n  -webkit-box-shadow: '';\n          box-shadow: '';\n  text-align: '';\n  font-size: 1em;\n  padding-left: '';\n  padding-right: '';\n}\n\n/* Fix 2nd Column */\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  -webkit-box-shadow: 0px 0px 0px #A3C293 inset;\n          box-shadow: 0px 0px 0px #A3C293 inset;\n}\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #FCFFF5 !important;\n  color: #2C662D !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n          box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n          box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n.ui.table tr.error,\n.ui.table td.error {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  -webkit-box-shadow: 0px 0px 0px #C9BA9B inset;\n          box-shadow: 0px 0px 0px #C9BA9B inset;\n}\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #FFFAF3 !important;\n  color: #573A08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  -webkit-box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n          box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n.ui.table tr.active,\n.ui.table td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n            box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n  \n/* Definition Table */\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    -webkit-box-shadow: none !important;\n            box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Selectable Cell Link */\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: 0.78571429em 0.78571429em;\n}\n\n/* Other States */\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n\n/* Middle */\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n          box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1em;\n  -webkit-box-shadow: none, none;\n          box-shadow: none, none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n\n/* Table Striping */\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/* Allow striped active hover */\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: #EFEFEF !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n\n/* Red */\n.ui.red.table {\n  border-top: 0.2em solid #DB2828;\n}\n.ui.inverted.red.table {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n.ui.orange.table {\n  border-top: 0.2em solid #F2711C;\n}\n.ui.inverted.orange.table {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n.ui.yellow.table {\n  border-top: 0.2em solid #FBBD08;\n}\n.ui.inverted.yellow.table {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n.ui.olive.table {\n  border-top: 0.2em solid #B5CC18;\n}\n.ui.inverted.olive.table {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n.ui.green.table {\n  border-top: 0.2em solid #21BA45;\n}\n.ui.inverted.green.table {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n.ui.teal.table {\n  border-top: 0.2em solid #00B5AD;\n}\n.ui.inverted.teal.table {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n.ui.blue.table {\n  border-top: 0.2em solid #2185D0;\n}\n.ui.inverted.blue.table {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n.ui.violet.table {\n  border-top: 0.2em solid #6435C9;\n}\n.ui.inverted.violet.table {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n.ui.purple.table {\n  border-top: 0.2em solid #A333C8;\n}\n.ui.inverted.purple.table {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n.ui.pink.table {\n  border-top: 0.2em solid #E03997;\n}\n.ui.inverted.pink.table {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n.ui.brown.table {\n  border-top: 0.2em solid #A5673F;\n}\n.ui.inverted.brown.table {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n.ui.black.table {\n  border-top: 0.2em solid #1B1C1D;\n}\n.ui.inverted.black.table {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n\n/* Grid Based */\n.ui.one.column.table td {\n  width: 100%;\n}\n.ui.two.column.table td {\n  width: 50%;\n}\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n.ui.four.column.table td {\n  width: 25%;\n}\n.ui.five.column.table td {\n  width: 20%;\n}\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n.ui.ten.column.table td {\n  width: 10%;\n}\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n     -moz-user-select: none;\n      -ms-user-select: none;\n          user-select: none;\n}\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n\n/* Text Color */\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #FFFFFF;\n}\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  -webkit-box-shadow: none;\n          box-shadow: none;\n}\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n.ui.basic.table td {\n  background: transparent;\n}\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n\n/* Small */\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/transition.css",
    "content": "/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n          animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n          animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n          animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n          animation-fill-mode: both;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/* Animating */\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n          backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  \n/*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n/* Disabled */\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n          animation-play-state: paused;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n          animation-iteration-count: infinite;\n}\n\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n}\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n          animation-name: browseIn;\n}\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n          animation-name: browseOutLeft;\n}\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n          animation-name: browseOutRight;\n}\n\n/* In */\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n            transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n            transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n            transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n            transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n            transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n          animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n          animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n          animation-name: dropIn;\n}\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n          animation-name: dropOut;\n}\n\n/* Drop */\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n            transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n          animation-name: fadeIn;\n}\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n          animation-name: fadeInUp;\n}\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n          animation-name: fadeInDown;\n}\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n          animation-name: fadeInLeft;\n}\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n          animation-name: fadeInRight;\n}\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n          animation-name: fadeOut;\n}\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n          animation-name: fadeOutUp;\n}\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n          animation-name: fadeOutDown;\n}\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n          animation-name: fadeOutLeft;\n}\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n          animation-name: fadeOutRight;\n}\n\n/* In */\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n            transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n            transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n}\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n            transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n            transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n}\n\n/* Out */\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n            transform: translateY(5%);\n  }\n}\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n            transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n            transform: translateY(-5%);\n  }\n}\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n            transform: translateX(5%);\n  }\n}\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n            transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n            transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n          animation-duration: 600ms;\n}\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n          animation-name: horizontalFlipIn;\n}\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n          animation-name: horizontalFlipOut;\n}\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n          animation-name: verticalFlipIn;\n}\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n          animation-name: verticalFlipOut;\n}\n\n/* In */\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n            transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n            transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n            transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n            transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n            transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n          animation-name: scaleIn;\n}\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n          animation-name: scaleOut;\n}\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n            transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n\n/* Inward */\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n          animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n          transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n          animation-name: flyIn;\n}\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n          animation-name: flyInUp;\n}\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n          animation-name: flyInDown;\n}\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n          animation-name: flyInLeft;\n}\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n          animation-name: flyInRight;\n}\n\n/* Outward */\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n          animation-name: flyOut;\n}\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n          animation-name: flyOutUp;\n}\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n          animation-name: flyOutDown;\n}\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n          animation-name: flyOutLeft;\n}\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n          animation-name: flyOutRight;\n}\n\n/* In */\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n            transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n            transform: scale3d(0.97, 0.97, 0.97);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n            transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n            transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n            transform: translate3d(0, 0, 0);\n  }\n}\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n            transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n            transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n            transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n            transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n            transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n            transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n            transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n            transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n            transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n            transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n            transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    -webkit-transform: none;\n            transform: none;\n  }\n}\n\n/* Out */\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n            transform: scale3d(0.9, 0.9, 0.9);\n  }\n  50%,\n  55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n            transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n            transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n            transform: translate3d(0, 10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n            transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n            transform: translate3d(0, 2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n            transform: translate3d(0, -10px, 0);\n  }\n  40%,\n  45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n            transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n            transform: translate3d(0, -2000px, 0);\n  }\n}\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n            transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n            transform: translate3d(-2000px, 0, 0);\n  }\n}\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n            transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n            transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n          animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n          animation-name: slideInX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n          animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n          animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n}\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n}\n\n/* Out */\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n            transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n            transform: scaleY(0);\n  }\n}\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n            transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n            transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n          animation-duration: 800ms;\n}\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n          animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n          animation-name: swingInY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n          transform-origin: top center;\n}\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n          animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n          transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n          transform-origin: center right;\n}\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n          animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n          transform-origin: center left;\n}\n\n/* In */\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n            transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n            transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n            transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n            transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n            transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n            transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n            transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n            transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n            transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n            transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n            transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n            transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n\n/*******************************\n       Static Animations\n*******************************/\n\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: flash;\n          animation-name: flash;\n}\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: shake;\n          animation-name: shake;\n}\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n          animation-name: bounce;\n}\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: tada;\n          animation-name: tada;\n}\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n          animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n          animation-name: pulse;\n}\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n          animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n          animation-name: jiggle;\n}\n\n/* Flash */\n@-webkit-keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n@keyframes flash {\n  0%,\n  50%,\n  100% {\n    opacity: 1;\n  }\n  25%,\n  75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n@-webkit-keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n@keyframes shake {\n  0%,\n  100% {\n    -webkit-transform: translateX(0);\n            transform: translateX(0);\n  }\n  10%,\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: translateX(-10px);\n            transform: translateX(-10px);\n  }\n  20%,\n  40%,\n  60%,\n  80% {\n    -webkit-transform: translateX(10px);\n            transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n@-webkit-keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n@keyframes bounce {\n  0%,\n  20%,\n  50%,\n  80%,\n  100% {\n    -webkit-transform: translateY(0);\n            transform: translateY(0);\n  }\n  40% {\n    -webkit-transform: translateY(-30px);\n            transform: translateY(-30px);\n  }\n  60% {\n    -webkit-transform: translateY(-15px);\n            transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n  }\n  10%,\n  20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n            transform: scale(0.9) rotate(-3deg);\n  }\n  30%,\n  50%,\n  70%,\n  90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n            transform: scale(1.1) rotate(3deg);\n  }\n  40%,\n  60%,\n  80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n            transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n            transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    -webkit-transform: scale(0.9);\n            transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    -webkit-transform: scale(1);\n            transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n            transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n            transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n            transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n            transform: scale3d(0.95, 1.05, 1);\n  }\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n            transform: scale3d(1.05, 0.95, 1);\n  }\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n            transform: scale3d(1, 1, 1);\n  }\n}\n\n\n/*******************************\n         Site Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/transition.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function(shouldDetermine) {\n            shouldDetermine = (shouldDetermine !== undefined)\n              ? shouldDetermine\n              : true\n            ;\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if(shouldDetermine && $module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              displayType       = module.get.displayType(false),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              if(!displayType) {\n                displayType = $clone\n                  .attr('class', elementClass)\n                  .removeAttr('style')\n                  .removeClass(className.hidden)\n                  .removeClass(className.visible)\n                  .show()\n                  .css('display')\n                ;\n                module.verbose('Determining final display state', displayType);\n                module.save.displayType(displayType);\n              }\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/components/visibility.js",
    "content": "/*!\n * # Semantic UI 2.2.11 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined) {\n                if($module.hasClass(className.visible)) {\n                  module.debug('Transition already occurred on this image, skipping animation');\n                  return;\n                }\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-x')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // compensate for scroll in context\n            if(module.is.verticallyScrollableContext()) {\n              element.offset.top += $context.scrollTop() - $context.offset().top;\n            }\n            if(module.is.horizontallyScrollableContext()) {\n              element.offset.left += $context.scrollLeft - $context.offset().left;\n            }\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.topVisible       = (screen.bottom >= element.top) && !element.bottomPassed;\n            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.topPassed;\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder',\n    visible     : 'visible'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/dist/semantic.css",
    "content": " /*\n * # Semantic UI - 2.2.11\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n@import url('https://fonts.googleapis.com/css?family=Lato:400,700,400italic,700italic&subset=latin');\n/*!\n * # Semantic UI 2.2.11 - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Reset\n*******************************/\n\n/* Border-Box */\n\n*,\n*:before,\n*:after {\n  -webkit-box-sizing: inherit;\n  box-sizing: inherit;\n}\n\nhtml {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\n\ninput[type=\"text\"],\ninput[type=\"email\"],\ninput[type=\"search\"],\ninput[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none;\n  /* mobile firefox too! */\n}\n\n/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\nhtml {\n  line-height: 1.15;\n  /* 1 */\n  -ms-text-size-adjust: 100%;\n  /* 2 */\n  -webkit-text-size-adjust: 100%;\n  /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain {\n  /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  -webkit-box-sizing: content-box;\n  box-sizing: content-box;\n  /* 1 */\n  height: 0;\n  /* 1 */\n  overflow: visible;\n  /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace;\n  /* 1 */\n  font-size: 1em;\n  /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent;\n  /* 1 */\n  -webkit-text-decoration-skip: objects;\n  /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none;\n  /* 1 */\n  text-decoration: underline;\n  /* 2 */\n  -webkit-text-decoration: underline dotted;\n  text-decoration: underline dotted;\n  /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace;\n  /* 1 */\n  font-size: 1em;\n  /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif;\n  /* 1 */\n  font-size: 100%;\n  /* 1 */\n  line-height: 1.15;\n  /* 1 */\n  margin: 0;\n  /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput {\n  /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect {\n  /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"],\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button;\n  /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  /* 1 */\n  color: inherit;\n  /* 2 */\n  display: table;\n  /* 1 */\n  max-width: 100%;\n  /* 1 */\n  padding: 0;\n  /* 3 */\n  white-space: normal;\n  /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block;\n  /* 1 */\n  vertical-align: baseline;\n  /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n  /* 1 */\n  padding: 0;\n  /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield;\n  /* 1 */\n  outline-offset: -2px;\n  /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button;\n  /* 1 */\n  font: inherit;\n  /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails,\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Page\n*******************************/\n\nhtml,\nbody {\n  height: 100%;\n}\n\nhtml {\n  font-size: 14px;\n}\n\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: hidden;\n  min-width: 320px;\n  background: #FFFFFF;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 14px;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  font-smoothing: antialiased;\n}\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  line-height: 1.28571429em;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  font-weight: bold;\n  padding: 0em;\n}\n\nh1 {\n  min-height: 1rem;\n  font-size: 2rem;\n}\n\nh2 {\n  font-size: 1.71428571rem;\n}\n\nh3 {\n  font-size: 1.28571429rem;\n}\n\nh4 {\n  font-size: 1.07142857rem;\n}\n\nh5 {\n  font-size: 1rem;\n}\n\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\n\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: 0em 0em 1em;\n  line-height: 1.4285em;\n}\n\np:first-child {\n  margin-top: 0em;\n}\n\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: #4183C4;\n  text-decoration: none;\n}\n\na:hover {\n  color: #1e70bf;\n  text-decoration: none;\n}\n\n/*******************************\n         Scrollbars\n*******************************/\n\n/*******************************\n          Highlighting\n*******************************/\n\n/* Site */\n\n::-webkit-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::-moz-selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n::selection {\n  background-color: #CCE2FF;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Form */\n\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\ntextarea::selection,\ninput::selection {\n  background-color: rgba(100, 100, 100, 0.4);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Force Simple Scrollbars */\n\nbody ::-webkit-scrollbar {\n  -webkit-appearance: none;\n  width: 10px;\n}\n\nbody ::-webkit-scrollbar-track {\n  background: rgba(0, 0, 0, 0.1);\n  border-radius: 0px;\n}\n\nbody ::-webkit-scrollbar-thumb {\n  cursor: pointer;\n  border-radius: 5px;\n  background: rgba(0, 0, 0, 0.25);\n  -webkit-transition: color 0.2s ease;\n  transition: color 0.2s ease;\n}\n\nbody ::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(0, 0, 0, 0.15);\n}\n\nbody ::-webkit-scrollbar-thumb:hover {\n  background: rgba(128, 135, 139, 0.8);\n}\n\n/* Inverted UI */\n\nbody .ui.inverted::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\n\nbody .ui.inverted::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\n\nbody .ui.inverted::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\n\nbody .ui.inverted::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n/*******************************\n        Global Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n  min-height: 1em;\n  outline: none;\n  border: none;\n  vertical-align: baseline;\n  background: #E0E1E2 none;\n  color: rgba(0, 0, 0, 0.6);\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em 0.25em 0em 0em;\n  padding: 0.78571429em 1.5em 0.78571429em;\n  text-transform: none;\n  text-shadow: none;\n  font-weight: bold;\n  line-height: 1em;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease;\n  transition: opacity 0.1s ease, background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  will-change: '';\n  -webkit-tap-highlight-color: transparent;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: #CACBCD;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.button:hover .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: #CACBCD;\n  color: rgba(0, 0, 0, 0.8);\n  background-image: '' !important;\n  -webkit-box-shadow: '' !important;\n  box-shadow: '' !important;\n}\n\n.ui.button:focus .icon {\n  opacity: 0.85;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: #BABBBC;\n  background-image: '';\n  color: rgba(0, 0, 0, 0.9);\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, none;\n  box-shadow: 0px 0px 0px 1px transparent inset, none;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: #C0C1C2;\n  background-image: none;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:hover {\n  background-color: #C0C1C2;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.button:active {\n  background-color: #C0C1C2;\n  background-image: none;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n/* Specificity hack */\n\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: 1;\n  pointer-events: auto;\n  -webkit-transition: all 0s linear, opacity 0.1s ease;\n  transition: all 0s linear, opacity 0.1s ease;\n}\n\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.15);\n}\n\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #FFFFFF transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n@-webkit-keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes button-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: #767676;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: 0.45 !important;\n  background-image: none !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n\n.ui.basic.buttons .ui.disabled.button {\n  border-color: rgba(34, 36, 38, 0.5);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: middle;\n  z-index: 1;\n}\n\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: 1.5em;\n}\n\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  -webkit-transition: right 0.3s ease 0s;\n  transition: right 0.3s ease 0s;\n}\n\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -0.5em;\n}\n\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  -webkit-transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, -webkit-transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease;\n  transition: top 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n\n.ui.vertical.animated.button .visible.content {\n  -webkit-transform: translateY(0%);\n  transform: translateY(0%);\n  right: auto;\n}\n\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  -webkit-transform: translateY(200%);\n  transform: translateY(200%);\n  right: auto;\n}\n\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  -webkit-transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, -webkit-transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease;\n  transition: opacity 0.3s ease, transform 0.3s ease, -webkit-transform 0.3s ease;\n}\n\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  transform: scale(1);\n}\n\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  -webkit-transform: scale(1.5);\n  transform: scale(1.5);\n}\n\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  -webkit-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  -webkit-transform: scale(1);\n  transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  background: transparent none;\n  color: #FFFFFF;\n  text-shadow: none !important;\n}\n\n/* Group */\n\n.ui.inverted.buttons .button {\n  margin: 0px 0px 0px -2px;\n}\n\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n\n.ui.inverted.vertical.buttons .button {\n  margin: 0px 0px -2px 0px;\n}\n\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n\n.ui.inverted.button:hover {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active / Focus */\n\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  box-shadow: 0px 0px 0px 2px #FFFFFF inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active Focus */\n\n.ui.inverted.button.active:focus {\n  background: #DCDDDE;\n  -webkit-box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  box-shadow: 0px 0px 0px 2px #DCDDDE inset !important;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n\n.ui.labeled.button > .label {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  margin: 0px 0px 0px -1px !important;\n  padding: '';\n  font-size: 1em;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Tag */\n\n.ui.labeled.button > .tag.label:before {\n  width: 1.85em;\n  height: 1.85em;\n}\n\n/* Right */\n\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n/* Facebook */\n\n.ui.facebook.button {\n  background-color: #3B5998;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.facebook.button:hover {\n  background-color: #304d8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.facebook.button:active {\n  background-color: #2d4373;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Twitter */\n\n.ui.twitter.button {\n  background-color: #55ACEE;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.twitter.button:hover {\n  background-color: #35a2f4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.twitter.button:active {\n  background-color: #2795e9;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Google Plus */\n\n.ui.google.plus.button {\n  background-color: #DD4B39;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.google.plus.button:hover {\n  background-color: #e0321c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.google.plus.button:active {\n  background-color: #c23321;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Linked In */\n\n.ui.linkedin.button {\n  background-color: #1F88BE;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:hover {\n  background-color: #147baf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.linkedin.button:active {\n  background-color: #186992;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* YouTube */\n\n.ui.youtube.button {\n  background-color: #CC181E;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.youtube.button:hover {\n  background-color: #bd0d13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.youtube.button:active {\n  background-color: #9e1317;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Instagram */\n\n.ui.instagram.button {\n  background-color: #49769C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.instagram.button:hover {\n  background-color: #3d698e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.instagram.button:active {\n  background-color: #395c79;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Pinterest */\n\n.ui.pinterest.button {\n  background-color: #BD081C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pinterest.button:hover {\n  background-color: #ac0013;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pinterest.button:active {\n  background-color: #8c0615;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* VK */\n\n.ui.vk.button {\n  background-color: #4D7198;\n  color: #FFFFFF;\n  background-image: none;\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.vk.button:hover {\n  background-color: #41648a;\n  color: #FFFFFF;\n}\n\n.ui.vk.button:active {\n  background-color: #3c5876;\n  color: #FFFFFF;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: 0.85714286em;\n  opacity: 0.8;\n  margin: 0em 0.42857143em 0em -0.21428571em;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  vertical-align: '';\n  color: '';\n}\n\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: 0em 0.42857143em 0em -0.21428571em;\n}\n\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: 0em -0.21428571em 0em 0.42857143em;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: 0.25em;\n}\n\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: 0.25em;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: 0.58928571em 1.125em 0.58928571em;\n}\n\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: 0.58928571em 0.58928571em 0.58928571em;\n}\n\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: 0.58928571em 3.69642857em 0.58928571em;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: 0.92857143rem;\n}\n\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: 1rem;\n}\n\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: 1.71428571rem;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: 0.78571429em 0.78571429em 0.78571429em;\n}\n\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: 0.9;\n  margin: 0em !important;\n  vertical-align: top;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: transparent none !important;\n  color: rgba(0, 0, 0, 0.6) !important;\n  font-weight: normal;\n  border-radius: 0.28571429rem;\n  text-transform: none;\n  text-shadow: none !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: #FFFFFF !important;\n  color: rgba(0, 0, 0, 0.8) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: #F8F8F8 !important;\n  color: rgba(0, 0, 0, 0.9) !important;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: rgba(0, 0, 0, 0.05) !important;\n  -webkit-box-shadow: '' !important;\n  box-shadow: '' !important;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n}\n\n/* Vertical */\n\n.ui.basic.buttons .button:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.35) inset, 0px 0px 0px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15) inset, 0px 1px 4px 0px rgba(34, 36, 38, 0.15) inset inset;\n}\n\n.ui.basic.buttons .active.button {\n  -webkit-box-shadow: '' !important;\n  box-shadow: '' !important;\n}\n\n/* Standard Basic Inverted */\n\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: #F9FAFB !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n}\n\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: rgba(255, 255, 255, 0.08) !important;\n  color: #FFFFFF !important;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.9) inset !important;\n}\n\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: rgba(255, 255, 255, 0.08);\n  color: #FFFFFF;\n  text-shadow: none;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.7) inset;\n}\n\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: rgba(255, 255, 255, 0.15);\n  -webkit-box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n  box-shadow: 0px 0px 0px 2px #ffffff inset !important;\n}\n\n/* Basic Group */\n\n.ui.basic.buttons .button {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: 4.07142857em !important;\n  padding-right: 1.5em !important;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n  margin: 0em;\n  width: 2.57142857em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: '';\n  -webkit-box-shadow: -1px 0px 0px 0px transparent inset;\n  box-shadow: -1px 0px 0px 0px transparent inset;\n}\n\n/* Left Labeled */\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: 4.07142857em !important;\n  padding-left: 1.5em !important;\n}\n\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  -webkit-box-shadow: 1px 0px 0px 0px transparent inset;\n  box-shadow: 1px 0px 0px 0px transparent inset;\n}\n\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: 0.28571429rem;\n}\n\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n/* Fluid Labeled */\n\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: 1.5em !important;\n  padding-right: 1.5em !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n/* Toggle (Modifies active state to give affordances) */\n\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: #21BA45 !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n.ui.button.toggle.active:hover {\n  background-color: #16ab39 !important;\n  text-shadow: none;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: 0.3em;\n  height: 2.57142857em;\n  z-index: 3;\n}\n\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: 500rem;\n  content: 'or';\n  top: 50%;\n  left: 50%;\n  background-color: #FFFFFF;\n  text-shadow: none;\n  margin-top: -0.89285714em;\n  margin-left: -0.89285714em;\n  width: 1.78571429em;\n  height: 1.78571429em;\n  line-height: 1.78571429em;\n  color: rgba(0, 0, 0, 0.4);\n  font-style: normal;\n  font-weight: bold;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset;\n  box-shadow: 0px 0px 0px 1px transparent inset;\n}\n\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n/* Singular */\n\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) !important;\n}\n\n/* Top / Bottom */\n\n.ui.attached.top.button {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.bottom.button {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Left / Right */\n\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n  padding-right: 0.75em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: 0.75em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/* Plural */\n\n.ui.attached.buttons {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: 2;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Left / Right */\n\n.ui[class*=\"left attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui[class*=\"right attached\"].buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: -1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: -1px;\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: -1px;\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n\n.ui.fluid.button {\n  display: block;\n}\n\n.ui.two.buttons {\n  width: 100%;\n}\n\n.ui.two.buttons > .button {\n  width: 50%;\n}\n\n.ui.three.buttons {\n  width: 100%;\n}\n\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n\n.ui.four.buttons {\n  width: 100%;\n}\n\n.ui.four.buttons > .button {\n  width: 25%;\n}\n\n.ui.five.buttons {\n  width: 100%;\n}\n\n.ui.five.buttons > .button {\n  width: 20%;\n}\n\n.ui.six.buttons {\n  width: 100%;\n}\n\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n\n.ui.seven.buttons {\n  width: 100%;\n}\n\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n\n.ui.eight.buttons {\n  width: 100%;\n}\n\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n\n.ui.nine.buttons {\n  width: 100%;\n}\n\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n\n.ui.ten.buttons {\n  width: 100%;\n}\n\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n\n.ui.eleven.buttons {\n  width: 100%;\n}\n\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n\n.ui.twelve.buttons {\n  width: 100%;\n}\n\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: auto;\n}\n\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Black ---*/\n\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.black.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: #2f3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: #0f0f10;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  box-shadow: 0px 0px 0px 1px #2f3032 inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  box-shadow: 0px 0px 0px 1px #0f0f10 inset !important;\n  color: #343637 !important;\n}\n\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: #000000;\n}\n\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: #000000;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #545454 !important;\n}\n\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  box-shadow: 0px 0px 0px 2px #000000 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: #767676;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.grey.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: #838383;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: #8a8a8a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: #909090;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: #696969;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  box-shadow: 0px 0px 0px 1px #767676 inset !important;\n  color: #767676 !important;\n}\n\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  box-shadow: 0px 0px 0px 1px #838383 inset !important;\n  color: #838383 !important;\n}\n\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  box-shadow: 0px 0px 0px 1px #8a8a8a inset !important;\n  color: #838383 !important;\n}\n\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  box-shadow: 0px 0px 0px 1px #696969 inset !important;\n  color: #909090 !important;\n}\n\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  box-shadow: 0px 0px 0px 1px #909090 inset !important;\n  color: #909090 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  box-shadow: 0px 0px 0px 2px #D4D4D5 inset !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: #c7c9cb;\n}\n\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: #cfd0d2;\n}\n\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: #c2c4c5;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  box-shadow: 0px 0px 0px 2px #c7c9cb inset !important;\n  color: #DCDDDE !important;\n}\n\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  box-shadow: 0px 0px 0px 2px #cfd0d2 inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  box-shadow: 0px 0px 0px 2px #c2c4c5 inset !important;\n  color: #FFFFFF !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: #A5673F;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.brown.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: #975b33;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: #90532b;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: #805031;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: #995a31;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  box-shadow: 0px 0px 0px 1px #A5673F inset !important;\n  color: #A5673F !important;\n}\n\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  box-shadow: 0px 0px 0px 1px #975b33 inset !important;\n  color: #975b33 !important;\n}\n\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  box-shadow: 0px 0px 0px 1px #90532b inset !important;\n  color: #975b33 !important;\n}\n\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  box-shadow: 0px 0px 0px 1px #995a31 inset !important;\n  color: #805031 !important;\n}\n\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  box-shadow: 0px 0px 0px 1px #805031 inset !important;\n  color: #805031 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  box-shadow: 0px 0px 0px 2px #D67C1C inset !important;\n  color: #D67C1C;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: #c86f11;\n}\n\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: #c16808;\n}\n\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: #cc6f0d;\n}\n\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: #a96216;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  box-shadow: 0px 0px 0px 2px #c86f11 inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  box-shadow: 0px 0px 0px 2px #c16808 inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  box-shadow: 0px 0px 0px 2px #cc6f0d inset !important;\n  color: #D67C1C !important;\n}\n\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  box-shadow: 0px 0px 0px 2px #a96216 inset !important;\n  color: #D67C1C !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.blue.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  box-shadow: 0px 0px 0px 2px #54C8FF inset !important;\n  color: #54C8FF;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: #2bbbff;\n}\n\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: #3ac0ff;\n}\n\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: #21b8ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  box-shadow: 0px 0px 0px 2px #2bbbff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  box-shadow: 0px 0px 0px 2px #3ac0ff inset !important;\n  color: #54C8FF !important;\n}\n\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  box-shadow: 0px 0px 0px 2px #21b8ff inset !important;\n  color: #54C8FF !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.green.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  box-shadow: 0px 0px 0px 2px #2ECC40 inset !important;\n  color: #2ECC40;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: #22be34;\n}\n\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: #19b82b;\n}\n\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: #1fc231;\n}\n\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: #25a233;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  box-shadow: 0px 0px 0px 2px #22be34 inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  box-shadow: 0px 0px 0px 2px #19b82b inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  box-shadow: 0px 0px 0px 2px #1fc231 inset !important;\n  color: #2ECC40 !important;\n}\n\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  box-shadow: 0px 0px 0px 2px #25a233 inset !important;\n  color: #2ECC40 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: #F2711C;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.orange.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: #f26202;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: #e55b00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: #cf590c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: #f56100;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  box-shadow: 0px 0px 0px 1px #F2711C inset !important;\n  color: #F2711C !important;\n}\n\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  box-shadow: 0px 0px 0px 1px #f26202 inset !important;\n  color: #f26202 !important;\n}\n\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  box-shadow: 0px 0px 0px 1px #e55b00 inset !important;\n  color: #f26202 !important;\n}\n\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  box-shadow: 0px 0px 0px 1px #f56100 inset !important;\n  color: #cf590c !important;\n}\n\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  box-shadow: 0px 0px 0px 1px #cf590c inset !important;\n  color: #cf590c !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  box-shadow: 0px 0px 0px 2px #FF851B inset !important;\n  color: #FF851B;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: #f17000;\n}\n\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: #ff7701;\n}\n\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: #e76b00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  box-shadow: 0px 0px 0px 2px #f17000 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff7701 inset !important;\n  color: #FF851B !important;\n}\n\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  box-shadow: 0px 0px 0px 2px #e76b00 inset !important;\n  color: #FF851B !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: #E03997;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.pink.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: #e61a8d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: #e10f85;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: #c71f7e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: #ea158d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  box-shadow: 0px 0px 0px 1px #E03997 inset !important;\n  color: #E03997 !important;\n}\n\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  box-shadow: 0px 0px 0px 1px #e61a8d inset !important;\n  color: #e61a8d !important;\n}\n\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  box-shadow: 0px 0px 0px 1px #e10f85 inset !important;\n  color: #e61a8d !important;\n}\n\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  box-shadow: 0px 0px 0px 1px #ea158d inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  box-shadow: 0px 0px 0px 1px #c71f7e inset !important;\n  color: #c71f7e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  box-shadow: 0px 0px 0px 2px #FF8EDF inset !important;\n  color: #FF8EDF;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: #ff65d3;\n}\n\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: #ff74d8;\n}\n\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: #ff5bd1;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff65d3 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff74d8 inset !important;\n  color: #FF8EDF !important;\n}\n\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff5bd1 inset !important;\n  color: #FF8EDF !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: #6435C9;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.violet.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: #5829bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: #4f20b5;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: #502aa1;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: #5626bf;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  box-shadow: 0px 0px 0px 1px #6435C9 inset !important;\n  color: #6435C9 !important;\n}\n\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  box-shadow: 0px 0px 0px 1px #5829bb inset !important;\n  color: #5829bb !important;\n}\n\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  box-shadow: 0px 0px 0px 1px #4f20b5 inset !important;\n  color: #5829bb !important;\n}\n\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  box-shadow: 0px 0px 0px 1px #5626bf inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  box-shadow: 0px 0px 0px 1px #502aa1 inset !important;\n  color: #502aa1 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  box-shadow: 0px 0px 0px 2px #A291FB inset !important;\n  color: #A291FB;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: #7d64ff;\n}\n\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: #8a73ff;\n}\n\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: #7860f9;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  box-shadow: 0px 0px 0px 2px #7d64ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  box-shadow: 0px 0px 0px 2px #8a73ff inset !important;\n  color: #A291FB !important;\n}\n\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  box-shadow: 0px 0px 0px 2px #7860f9 inset !important;\n  color: #A291FB !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: #A333C8;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.purple.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: #9627ba;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: #8f1eb4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: #82299f;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: #9724be;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  box-shadow: 0px 0px 0px 1px #A333C8 inset !important;\n  color: #A333C8 !important;\n}\n\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  box-shadow: 0px 0px 0px 1px #9627ba inset !important;\n  color: #9627ba !important;\n}\n\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  box-shadow: 0px 0px 0px 1px #8f1eb4 inset !important;\n  color: #9627ba !important;\n}\n\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  box-shadow: 0px 0px 0px 1px #9724be inset !important;\n  color: #82299f !important;\n}\n\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  box-shadow: 0px 0px 0px 1px #82299f inset !important;\n  color: #82299f !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  box-shadow: 0px 0px 0px 2px #DC73FF inset !important;\n  color: #DC73FF;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: #d24aff;\n}\n\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: #d65aff;\n}\n\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: #cf40ff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  box-shadow: 0px 0px 0px 2px #d24aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  box-shadow: 0px 0px 0px 2px #d65aff inset !important;\n  color: #DC73FF !important;\n}\n\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  box-shadow: 0px 0px 0px 2px #cf40ff inset !important;\n  color: #DC73FF !important;\n}\n\n/*--- Red ---*/\n\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.red.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  box-shadow: 0px 0px 0px 2px #FF695E inset !important;\n  color: #FF695E;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: #ff4335;\n}\n\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: #ff5144;\n}\n\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: #ff392b;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff4335 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  box-shadow: 0px 0px 0px 2px #ff5144 inset !important;\n  color: #FF695E !important;\n}\n\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  box-shadow: 0px 0px 0px 2px #ff392b inset !important;\n  color: #FF695E !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: #00B5AD;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.teal.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: #008c86;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: #00827c;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: #009c95;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  box-shadow: 0px 0px 0px 1px #00B5AD inset !important;\n  color: #00B5AD !important;\n}\n\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #009c95 !important;\n}\n\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  box-shadow: 0px 0px 0px 1px #008c86 inset !important;\n  color: #009c95 !important;\n}\n\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  box-shadow: 0px 0px 0px 1px #009c95 inset !important;\n  color: #00827c !important;\n}\n\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  box-shadow: 0px 0px 0px 1px #00827c inset !important;\n  color: #00827c !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  box-shadow: 0px 0px 0px 2px #6DFFFF inset !important;\n  color: #6DFFFF;\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: #44ffff;\n}\n\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: #54ffff;\n}\n\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: #3affff;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  box-shadow: 0px 0px 0px 2px #44ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  box-shadow: 0px 0px 0px 2px #54ffff inset !important;\n  color: #6DFFFF !important;\n}\n\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  box-shadow: 0px 0px 0px 2px #3affff inset !important;\n  color: #6DFFFF !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: #B5CC18;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.olive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: #a7bd0d;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: #a0b605;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: #8d9e13;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: #aac109;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  box-shadow: 0px 0px 0px 1px #B5CC18 inset !important;\n  color: #B5CC18 !important;\n}\n\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  box-shadow: 0px 0px 0px 1px #a7bd0d inset !important;\n  color: #a7bd0d !important;\n}\n\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  box-shadow: 0px 0px 0px 1px #a0b605 inset !important;\n  color: #a7bd0d !important;\n}\n\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  box-shadow: 0px 0px 0px 1px #aac109 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  box-shadow: 0px 0px 0px 1px #8d9e13 inset !important;\n  color: #8d9e13 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  box-shadow: 0px 0px 0px 2px #D9E778 inset !important;\n  color: #D9E778;\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: #d8ea5c;\n}\n\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: #daef47;\n}\n\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: #daed59;\n}\n\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: #cddf4d;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  box-shadow: 0px 0px 0px 2px #d8ea5c inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  box-shadow: 0px 0px 0px 2px #daef47 inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  box-shadow: 0px 0px 0px 2px #daed59 inset !important;\n  color: #D9E778 !important;\n}\n\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  box-shadow: 0px 0px 0px 2px #cddf4d inset !important;\n  color: #D9E778 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: #FBBD08;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.yellow.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: #daa300;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: #cd9903;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: #eaae00;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  box-shadow: 0px 0px 0px 1px #FBBD08 inset !important;\n  color: #FBBD08 !important;\n}\n\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #eaae00 !important;\n}\n\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  box-shadow: 0px 0px 0px 1px #daa300 inset !important;\n  color: #eaae00 !important;\n}\n\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  box-shadow: 0px 0px 0px 1px #eaae00 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  box-shadow: 0px 0px 0px 1px #cd9903 inset !important;\n  color: #cd9903 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  box-shadow: 0px 0px 0px 2px #FFE21F inset !important;\n  color: #FFE21F;\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: #f5d500;\n}\n\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: #ffdf05;\n}\n\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: #ebcd00;\n}\n\n/* Inverted Basic */\n\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  -webkit-box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  box-shadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5) inset !important;\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  -webkit-box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  box-shadow: 0px 0px 0px 2px #f5d500 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  -webkit-box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  box-shadow: 0px 0px 0px 2px #ffdf05 inset !important;\n  color: #FFE21F !important;\n}\n\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  -webkit-box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  box-shadow: 0px 0px 0px 2px #ebcd00 inset !important;\n  color: #FFE21F !important;\n}\n\n/*-------------------\n       Primary\n--------------------*/\n\n/*--- Standard ---*/\n\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: #2185D0;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.primary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: #1678c2;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: #0d71bb;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: #1a69a4;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: #1279c6;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  box-shadow: 0px 0px 0px 1px #2185D0 inset !important;\n  color: #2185D0 !important;\n}\n\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  box-shadow: 0px 0px 0px 1px #1678c2 inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  box-shadow: 0px 0px 0px 1px #0d71bb inset !important;\n  color: #1678c2 !important;\n}\n\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  box-shadow: 0px 0px 0px 1px #1279c6 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  box-shadow: 0px 0px 0px 1px #1a69a4 inset !important;\n  color: #1a69a4 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n/* Standard */\n\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: #1B1C1D;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.secondary.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: #2e3032;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: #343637;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: #27292a;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  box-shadow: 0px 0px 0px 1px #1B1C1D inset !important;\n  color: #1B1C1D !important;\n}\n\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  box-shadow: 0px 0px 0px 1px #2e3032 inset !important;\n  color: #27292a !important;\n}\n\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  box-shadow: 0px 0px 0px 1px #27292a inset !important;\n  color: #343637 !important;\n}\n\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  box-shadow: 0px 0px 0px 1px #343637 inset !important;\n  color: #343637 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n/* Standard */\n\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: #21BA45;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.positive.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: #16ab39;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: #0ea432;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: #198f35;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: #13ae38;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  box-shadow: 0px 0px 0px 1px #21BA45 inset !important;\n  color: #21BA45 !important;\n}\n\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  box-shadow: 0px 0px 0px 1px #16ab39 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  box-shadow: 0px 0px 0px 1px #0ea432 inset !important;\n  color: #16ab39 !important;\n}\n\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  box-shadow: 0px 0px 0px 1px #13ae38 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  box-shadow: 0px 0px 0px 1px #198f35 inset !important;\n  color: #198f35 !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n/* Standard */\n\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: #DB2828;\n  color: #FFFFFF;\n  text-shadow: none;\n  background-image: none;\n}\n\n.ui.negative.button {\n  -webkit-box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: #d01919;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: #ca1010;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: #b21e1e;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: #d41515;\n  color: #FFFFFF;\n  text-shadow: none;\n}\n\n/* Basic */\n\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  box-shadow: 0px 0px 0px 1px #DB2828 inset !important;\n  color: #DB2828 !important;\n}\n\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  box-shadow: 0px 0px 0px 1px #d01919 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  box-shadow: 0px 0px 0px 1px #ca1010 inset !important;\n  color: #d01919 !important;\n}\n\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  -webkit-box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  box-shadow: 0px 0px 0px 1px #d41515 inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  -webkit-box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  box-shadow: 0px 0px 0px 1px #b21e1e inset !important;\n  color: #b21e1e !important;\n}\n\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -1px;\n}\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: 0em 0.25em 0em 0em;\n}\n\n.ui.buttons:not(.basic):not(.inverted) {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Clearfix */\n\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n\n.ui.buttons .button {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: 0px 0px 0px 0px;\n}\n\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  -webkit-box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px transparent inset, 0px 0em 0px 0px rgba(34, 36, 38, 0.15) inset;\n}\n\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: 0.28571429rem;\n  border-bottom-left-radius: 0.28571429rem;\n}\n\n.ui.buttons .button:last-child {\n  border-top-right-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/* Vertical  Style */\n\n.ui.vertical.buttons {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: 0px 0px 0px 0px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0em;\n}\n\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n.ui.vertical.buttons .button:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Container\n*******************************/\n\n/* All Sizes */\n\n.ui.container {\n  display: block;\n  max-width: 100% !important;\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.container {\n    width: auto !important;\n    margin-left: 1em !important;\n    margin-right: 1em !important;\n  }\n\n  .ui.grid.container {\n    width: auto !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: auto !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: auto !important;\n  }\n}\n\n/* Tablet */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.container {\n    width: 723px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 723px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 723px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 723px  +  5rem ) !important;\n  }\n}\n\n/* Small Monitor */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.container {\n    width: 933px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 933px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 933px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 933px  +  5rem ) !important;\n  }\n}\n\n/* Large Monitor */\n\n@media only screen and (min-width: 1200px) {\n  .ui.container {\n    width: 1127px;\n    margin-left: auto !important;\n    margin-right: auto !important;\n  }\n\n  .ui.grid.container {\n    width: calc( 1127px  +  2rem ) !important;\n  }\n\n  .ui.relaxed.grid.container {\n    width: calc( 1127px  +  3rem ) !important;\n  }\n\n  .ui.very.relaxed.grid.container {\n    width: calc( 1127px  +  5rem ) !important;\n  }\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Text Container */\n\n.ui.text.container {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  max-width: 700px !important;\n  line-height: 1.5;\n}\n\n.ui.text.container {\n  font-size: 1.14285714rem;\n}\n\n/* Fluid */\n\n.ui.fluid.container {\n  width: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n\n.ui.justified.container {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: 1rem 0rem;\n  line-height: 1;\n  height: 0em;\n  font-weight: bold;\n  text-transform: uppercase;\n  letter-spacing: 0.05em;\n  color: rgba(0, 0, 0, 0.85);\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Allow divider between each column row */\n\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n  height: auto;\n  margin: '';\n  line-height: 1;\n  text-align: center;\n}\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n\n.ui.horizontal.divider:before {\n  background-position: right 1em top 50%;\n}\n\n.ui.horizontal.divider:after {\n  background-position: left 1em top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n  line-height: 0em;\n  text-align: center;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n}\n\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(255, 255, 255, 0.1);\n  width: 0%;\n  height: calc(100% -  1rem );\n}\n\n.ui.vertical.divider:before {\n  top: -100%;\n}\n\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: '';\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    -webkit-transform: none;\n    transform: none;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right 1em top 50%;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left 1em top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: 0rem;\n  font-size: 1rem;\n  height: 1em;\n  vertical-align: middle;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: #FFFFFF;\n}\n\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: rgba(34, 36, 38, 0.15) !important;\n  border-left-color: rgba(34, 36, 38, 0.15) !important;\n  border-bottom-color: rgba(255, 255, 255, 0.15) !important;\n  border-right-color: rgba(255, 255, 255, 0.15) !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: 2rem;\n  margin-bottom: 2rem;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: 1rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n  width: 16px;\n  height: 11px;\n  line-height: 11px;\n  vertical-align: baseline;\n  margin: 0em 0.5em 0em 0em;\n  text-decoration: inherit;\n  speak: none;\n  font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/* Sprite */\n\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(\"./themes/default/assets/images/flags.png\") no-repeat -108px -1976px;\n  width: 16px;\n  height: 11px;\n}\n\n/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\n\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\n\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\n\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\n\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\n\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\n\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\n\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\n\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\n\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\n\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\n\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\n\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\n\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\n\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\n\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\n\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\n\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\n\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\n\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\n\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\n\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\n\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\n\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\n\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\n\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\n\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\n\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\n\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\n\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\n\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\n\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\n\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\n\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\n\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\n\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\n\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\n\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\n\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\n\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\n\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\n\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\n\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\n\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\n\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\n\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\n\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\n\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\n\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\n\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\n\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\n\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\n\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\n\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\n\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\n\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\n\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\n\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\n\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\n\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\n\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\n\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\n\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\n\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\n\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\n\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\n\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\n\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\n\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\n\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\n\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\n\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\n\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\n\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\n\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\n\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\n\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\n\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\n\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\n\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\n\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\n\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\n\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\n\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\n\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\n\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\n\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\n\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\n\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\n\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\n\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\n\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\n\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\n\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\n\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\n\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\n\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\n\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\n\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\n\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\n\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\n\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\n\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\n\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\n\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\n\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\n\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\n\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\n\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\n\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\n\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\n\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\n\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\n\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\n\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\n\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\n\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\n\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\n\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\n\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\n\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\n\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\n\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\n\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\n\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\n\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\n\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\n\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\n\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\n\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\n\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\n\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\n\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\n\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\n\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\n\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\n\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\n\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\n\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\n\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\n\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -73px -1821px;\n}\n\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\n\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\n\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\n\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\n\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\n\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\n\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\n\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\n\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\n\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\n\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\n\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\n\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\n\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\n\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\n\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\n\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\n\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\n\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\n\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\n\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\n\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\n\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\n\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\n\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\n\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\n\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\n\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\n\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\n\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\n\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\n\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\n\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\n\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\n\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\n\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\n\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\n\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\n\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\n\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\n\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\n\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\n\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\n\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\n\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\n\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\n\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\n\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\n\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\n\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\n\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\n\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\n\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\n\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\n\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\n\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\n\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\n\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\n\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\n\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\n\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\n\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\n\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\n\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\n\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\n\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\n\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\n\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\n\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\n\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\n\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\n\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\n\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\n\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\n\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\n\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\n\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\n\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\n\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\n\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\n\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\n\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\n\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\n\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\n\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\n\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\n\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\n\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\n\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\n\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\n\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\n\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\n\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\n\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\n\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\n\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\n\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\n\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\n\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\n\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\n\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\n\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\n\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Header\n*******************************/\n\n/* Standard */\n\n.ui.header {\n  border: none;\n  margin: calc(2rem -  0.14285714em ) 0em 1rem;\n  padding: 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  line-height: 1.28571429em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.header:first-child {\n  margin-top: -0.14285714em;\n}\n\n.ui.header:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: 0em;\n  font-size: 1rem;\n  line-height: 1.2em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: 1;\n  font-size: 1.5em;\n  padding-top: 0.14285714em;\n  vertical-align: middle;\n}\n\n/* With Text Node */\n\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: 0.75rem;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image:not(.icon),\n.ui.header > img {\n  display: inline-block;\n  margin-top: 0.14285714em;\n  width: 2.5em;\n  height: auto;\n  vertical-align: middle;\n}\n\n.ui.header > .image:not(.icon):only-child,\n.ui.header > img:only-child {\n  margin-right: 0.75rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* After Image */\n\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: 0.75rem;\n  vertical-align: middle;\n}\n\n/* After Icon */\n\n.ui.header > .icon + .content {\n  padding-left: 0.75rem;\n  display: table-cell;\n  vertical-align: middle;\n}\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: '';\n  margin-left: 0.5rem;\n  vertical-align: middle;\n}\n\n/* Positioning */\n\n.ui.header + p {\n  margin-top: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: 2rem;\n}\n\nh2.ui.header {\n  font-size: 1.71428571rem;\n}\n\nh3.ui.header {\n  font-size: 1.28571429rem;\n}\n\nh4.ui.header {\n  font-size: 1.07142857rem;\n}\n\nh5.ui.header {\n  font-size: 1rem;\n}\n\n/* Sub Header */\n\nh1.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh2.ui.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\nh3.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh4.ui.header .sub.header {\n  font-size: 1rem;\n}\n\nh5.ui.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: 2em;\n}\n\n.ui.large.header {\n  font-size: 1.71428571em;\n}\n\n.ui.medium.header {\n  font-size: 1.28571429em;\n}\n\n.ui.small.header {\n  font-size: 1.07142857em;\n}\n\n.ui.tiny.header {\n  font-size: 1em;\n}\n\n/* Sub Header */\n\n.ui.huge.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.header .sub.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.small.header .sub.header {\n  font-size: 1rem;\n}\n\n.ui.tiny.header .sub.header {\n  font-size: 0.92857143rem;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: 0.14285714rem;\n  font-weight: bold;\n  font-size: 0.85714286em;\n  text-transform: uppercase;\n  color: '';\n}\n\n.ui.small.sub.header {\n  font-size: 0.78571429em;\n}\n\n.ui.sub.header {\n  font-size: 0.85714286em;\n}\n\n.ui.large.sub.header {\n  font-size: 0.92857143em;\n}\n\n.ui.huge.sub.header {\n  font-size: 1em;\n}\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: 2rem 0em 1rem;\n}\n\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.icon.header:first-child {\n  margin-top: 0em;\n}\n\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: 3em;\n  margin: 0em auto 0.5rem;\n  opacity: 1;\n}\n\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n\n.ui.icon.header .circular.icon {\n  font-size: 2em;\n}\n\n.ui.icon.header .square.icon {\n  font-size: 2em;\n}\n\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: #FFFFFF;\n}\n\n.ui.inverted.header .sub.header {\n  color: rgba(255, 255, 255, 0.8);\n}\n\n.ui.inverted.attached.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-color: transparent;\n}\n\n.ui.inverted.block.header {\n  background: #545454 -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #545454 -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #545454 linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.header {\n  color: #DB2828 !important;\n}\n\na.ui.red.header:hover {\n  color: #d01919 !important;\n}\n\n.ui.red.dividing.header {\n  border-bottom: 2px solid #DB2828;\n}\n\n/* Inverted */\n\n.ui.inverted.red.header {\n  color: #FF695E !important;\n}\n\na.ui.inverted.red.header:hover {\n  color: #ff5144 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.header {\n  color: #F2711C !important;\n}\n\na.ui.orange.header:hover {\n  color: #f26202 !important;\n}\n\n.ui.orange.dividing.header {\n  border-bottom: 2px solid #F2711C;\n}\n\n/* Inverted */\n\n.ui.inverted.orange.header {\n  color: #FF851B !important;\n}\n\na.ui.inverted.orange.header:hover {\n  color: #ff7701 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.header {\n  color: #B5CC18 !important;\n}\n\na.ui.olive.header:hover {\n  color: #a7bd0d !important;\n}\n\n.ui.olive.dividing.header {\n  border-bottom: 2px solid #B5CC18;\n}\n\n/* Inverted */\n\n.ui.inverted.olive.header {\n  color: #D9E778 !important;\n}\n\na.ui.inverted.olive.header:hover {\n  color: #d8ea5c !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.header {\n  color: #FBBD08 !important;\n}\n\na.ui.yellow.header:hover {\n  color: #eaae00 !important;\n}\n\n.ui.yellow.dividing.header {\n  border-bottom: 2px solid #FBBD08;\n}\n\n/* Inverted */\n\n.ui.inverted.yellow.header {\n  color: #FFE21F !important;\n}\n\na.ui.inverted.yellow.header:hover {\n  color: #ffdf05 !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.header {\n  color: #21BA45 !important;\n}\n\na.ui.green.header:hover {\n  color: #16ab39 !important;\n}\n\n.ui.green.dividing.header {\n  border-bottom: 2px solid #21BA45;\n}\n\n/* Inverted */\n\n.ui.inverted.green.header {\n  color: #2ECC40 !important;\n}\n\na.ui.inverted.green.header:hover {\n  color: #22be34 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.header {\n  color: #00B5AD !important;\n}\n\na.ui.teal.header:hover {\n  color: #009c95 !important;\n}\n\n.ui.teal.dividing.header {\n  border-bottom: 2px solid #00B5AD;\n}\n\n/* Inverted */\n\n.ui.inverted.teal.header {\n  color: #6DFFFF !important;\n}\n\na.ui.inverted.teal.header:hover {\n  color: #54ffff !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.header {\n  color: #2185D0 !important;\n}\n\na.ui.blue.header:hover {\n  color: #1678c2 !important;\n}\n\n.ui.blue.dividing.header {\n  border-bottom: 2px solid #2185D0;\n}\n\n/* Inverted */\n\n.ui.inverted.blue.header {\n  color: #54C8FF !important;\n}\n\na.ui.inverted.blue.header:hover {\n  color: #3ac0ff !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.header {\n  color: #6435C9 !important;\n}\n\na.ui.violet.header:hover {\n  color: #5829bb !important;\n}\n\n.ui.violet.dividing.header {\n  border-bottom: 2px solid #6435C9;\n}\n\n/* Inverted */\n\n.ui.inverted.violet.header {\n  color: #A291FB !important;\n}\n\na.ui.inverted.violet.header:hover {\n  color: #8a73ff !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.header {\n  color: #A333C8 !important;\n}\n\na.ui.purple.header:hover {\n  color: #9627ba !important;\n}\n\n.ui.purple.dividing.header {\n  border-bottom: 2px solid #A333C8;\n}\n\n/* Inverted */\n\n.ui.inverted.purple.header {\n  color: #DC73FF !important;\n}\n\na.ui.inverted.purple.header:hover {\n  color: #d65aff !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.header {\n  color: #E03997 !important;\n}\n\na.ui.pink.header:hover {\n  color: #e61a8d !important;\n}\n\n.ui.pink.dividing.header {\n  border-bottom: 2px solid #E03997;\n}\n\n/* Inverted */\n\n.ui.inverted.pink.header {\n  color: #FF8EDF !important;\n}\n\na.ui.inverted.pink.header:hover {\n  color: #ff74d8 !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.header {\n  color: #A5673F !important;\n}\n\na.ui.brown.header:hover {\n  color: #975b33 !important;\n}\n\n.ui.brown.dividing.header {\n  border-bottom: 2px solid #A5673F;\n}\n\n/* Inverted */\n\n.ui.inverted.brown.header {\n  color: #D67C1C !important;\n}\n\na.ui.inverted.brown.header:hover {\n  color: #c86f11 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.header {\n  color: #767676 !important;\n}\n\na.ui.grey.header:hover {\n  color: #838383 !important;\n}\n\n.ui.grey.dividing.header {\n  border-bottom: 2px solid #767676;\n}\n\n/* Inverted */\n\n.ui.inverted.grey.header {\n  color: #DCDDDE !important;\n}\n\na.ui.inverted.grey.header:hover {\n  color: #cfd0d2 !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n\n.ui.right.aligned.header {\n  text-align: right;\n}\n\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n\n.ui.justified.header {\n  text-align: justify;\n}\n\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: 0.5em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: 0.21428571rem;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.dividing.header .sub.header {\n  padding-bottom: 0.21428571rem;\n}\n\n.ui.dividing.header .icon {\n  margin-bottom: 0em;\n}\n\n.ui.inverted.dividing.header {\n  border-bottom-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: #F3F4F5;\n  padding: 0.78571429rem 1rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n  border-radius: 0.28571429rem;\n}\n\n.ui.tiny.block.header {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.block.header {\n  font-size: 0.92857143rem;\n}\n\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1rem;\n}\n\n.ui.large.block.header {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.block.header {\n  font-size: 1.42857143rem;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: #FFFFFF;\n  padding: 0.78571429rem 1rem;\n  margin-left: -1px;\n  margin-right: -1px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached.block.header {\n  background: #F3F4F5;\n}\n\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Attached Sizes */\n\n.ui.tiny.attached.header {\n  font-size: 0.85714286em;\n}\n\n.ui.small.attached.header {\n  font-size: 0.92857143em;\n}\n\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1em;\n}\n\n.ui.large.attached.header {\n  font-size: 1.14285714em;\n}\n\n.ui.huge.attached.header {\n  font-size: 1.42857143em;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: 1.28571429em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: url(\"./themes/default/assets/fonts/icons.eot\");\n  src: url(\"./themes/default/assets/fonts/icons.eot?#iefix\") format('embedded-opentype'), url(\"./themes/default/assets/fonts/icons.woff2\") format('woff2'), url(\"./themes/default/assets/fonts/icons.woff\") format('woff'), url(\"./themes/default/assets/fonts/icons.ttf\") format('truetype'), url(\"./themes/default/assets/fonts/icons.svg#icons\") format('svg');\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\n\ni.icon {\n  display: inline-block;\n  opacity: 1;\n  margin: 0em 0.25rem 0em 0em;\n  width: 1.18em;\n  height: 1em;\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\ni.icon:before {\n  background: none !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  -webkit-animation: icon-loading 2s linear infinite;\n  animation: icon-loading 2s linear infinite;\n}\n\n@-webkit-keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes icon-loading {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\n\ni.icon.active {\n  opacity: 1 !important;\n}\n\ni.emphasized.icon {\n  opacity: 1 !important;\n}\n\ni.disabled.icon {\n  opacity: 0.45 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon,\ni.link.icons {\n  cursor: pointer;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\ni.link.icon:hover,\ni.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n  padding: 0.5em 0.5em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  width: 2em !important;\n  height: 2em !important;\n}\n\ni.circular.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  -webkit-transform: scale(-1, 1);\n  transform: scale(-1, 1);\n}\n\ni.vertically.flipped.icon {\n  -webkit-transform: scale(1, -1);\n  transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  -webkit-transform: rotate(-90deg);\n  transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n  width: 2em;\n  height: 2em;\n  padding: 0.5em 0.41em !important;\n  -webkit-box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n  box-shadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n}\n\ni.bordered.inverted.icon {\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n/* Inverted Shapes */\n\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\ni.inverted.icon {\n  color: #FFFFFF;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\ni.red.icon {\n  color: #DB2828 !important;\n}\n\ni.inverted.red.icon {\n  color: #FF695E !important;\n}\n\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\ni.orange.icon {\n  color: #F2711C !important;\n}\n\ni.inverted.orange.icon {\n  color: #FF851B !important;\n}\n\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\ni.yellow.icon {\n  color: #FBBD08 !important;\n}\n\ni.inverted.yellow.icon {\n  color: #FFE21F !important;\n}\n\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\ni.olive.icon {\n  color: #B5CC18 !important;\n}\n\ni.inverted.olive.icon {\n  color: #D9E778 !important;\n}\n\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\ni.green.icon {\n  color: #21BA45 !important;\n}\n\ni.inverted.green.icon {\n  color: #2ECC40 !important;\n}\n\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\ni.teal.icon {\n  color: #00B5AD !important;\n}\n\ni.inverted.teal.icon {\n  color: #6DFFFF !important;\n}\n\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\ni.blue.icon {\n  color: #2185D0 !important;\n}\n\ni.inverted.blue.icon {\n  color: #54C8FF !important;\n}\n\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\ni.violet.icon {\n  color: #6435C9 !important;\n}\n\ni.inverted.violet.icon {\n  color: #A291FB !important;\n}\n\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\ni.purple.icon {\n  color: #A333C8 !important;\n}\n\ni.inverted.purple.icon {\n  color: #DC73FF !important;\n}\n\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\ni.pink.icon {\n  color: #E03997 !important;\n}\n\ni.inverted.pink.icon {\n  color: #FF8EDF !important;\n}\n\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\ni.brown.icon {\n  color: #A5673F !important;\n}\n\ni.inverted.brown.icon {\n  color: #D67C1C !important;\n}\n\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\ni.grey.icon {\n  color: #767676 !important;\n}\n\ni.inverted.grey.icon {\n  color: #DCDDDE !important;\n}\n\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\ni.black.icon {\n  color: #1B1C1D !important;\n}\n\ni.inverted.black.icon {\n  color: #545454 !important;\n}\n\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: 0.4em;\n}\n\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: 0.5em;\n}\n\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: 0.75em;\n}\n\ni.icon,\ni.icons {\n  font-size: 1em;\n}\n\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 1.5em;\n}\n\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 4em;\n}\n\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 8em;\n}\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\n\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\n\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  -webkit-transform: none;\n  transform: none;\n  margin-right: 0.25rem;\n}\n\n/* Corner Icon */\n\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  -webkit-transform: none;\n  transform: none;\n  font-size: 0.45em;\n  text-shadow: -1px -1px 0 #FFFFFF, 1px -1px 0 #FFFFFF, -1px 1px 0 #FFFFFF, 1px 1px 0 #FFFFFF;\n}\n\ni.icons .top.right.corner.icon {\n  top: 0;\n  left: auto;\n  right: 0;\n  bottom: auto;\n}\n\ni.icons .top.left.corner.icon {\n  top: 0;\n  left: 0;\n  right: auto;\n  bottom: auto;\n}\n\ni.icons .bottom.left.corner.icon {\n  top: auto;\n  left: 0;\n  right: auto;\n  bottom: 0;\n}\n\ni.icons .bottom.right.corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n}\n\ni.icons .inverted.corner.icon {\n  text-shadow: -1px -1px 0 #1B1C1D, 1px -1px 0 #1B1C1D, -1px 1px 0 #1B1C1D, 1px 1px 0 #1B1C1D;\n}\n\n/*\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n/*******************************\n            Icons\n*******************************/\n\n/* Web Content */\n\ni.icon.search:before {\n  content: \"\\f002\";\n}\n\ni.icon.mail.outline:before {\n  content: \"\\f003\";\n}\n\ni.icon.signal:before {\n  content: \"\\f012\";\n}\n\ni.icon.setting:before {\n  content: \"\\f013\";\n}\n\ni.icon.home:before {\n  content: \"\\f015\";\n}\n\ni.icon.inbox:before {\n  content: \"\\f01c\";\n}\n\ni.icon.browser:before {\n  content: \"\\f022\";\n}\n\ni.icon.tag:before {\n  content: \"\\f02b\";\n}\n\ni.icon.tags:before {\n  content: \"\\f02c\";\n}\n\ni.icon.image:before {\n  content: \"\\f03e\";\n}\n\ni.icon.calendar:before {\n  content: \"\\f073\";\n}\n\ni.icon.comment:before {\n  content: \"\\f075\";\n}\n\ni.icon.shop:before {\n  content: \"\\f07a\";\n}\n\ni.icon.comments:before {\n  content: \"\\f086\";\n}\n\ni.icon.external:before {\n  content: \"\\f08e\";\n}\n\ni.icon.privacy:before {\n  content: \"\\f084\";\n}\n\ni.icon.settings:before {\n  content: \"\\f085\";\n}\n\ni.icon.comments:before {\n  content: \"\\f086\";\n}\n\ni.icon.external:before {\n  content: \"\\f08e\";\n}\n\ni.icon.trophy:before {\n  content: \"\\f091\";\n}\n\ni.icon.payment:before {\n  content: \"\\f09d\";\n}\n\ni.icon.feed:before {\n  content: \"\\f09e\";\n}\n\ni.icon.alarm.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.tasks:before {\n  content: \"\\f0ae\";\n}\n\ni.icon.cloud:before {\n  content: \"\\f0c2\";\n}\n\ni.icon.lab:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.mail:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.dashboard:before {\n  content: \"\\f0e4\";\n}\n\ni.icon.comment.outline:before {\n  content: \"\\f0e5\";\n}\n\ni.icon.comments.outline:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.sitemap:before {\n  content: \"\\f0e8\";\n}\n\ni.icon.idea:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.alarm:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.terminal:before {\n  content: \"\\f120\";\n}\n\ni.icon.code:before {\n  content: \"\\f121\";\n}\n\ni.icon.protect:before {\n  content: \"\\f132\";\n}\n\ni.icon.calendar.outline:before {\n  content: \"\\f133\";\n}\n\ni.icon.ticket:before {\n  content: \"\\f145\";\n}\n\ni.icon.external.square:before {\n  content: \"\\f14c\";\n}\n\ni.icon.bug:before {\n  content: \"\\f188\";\n}\n\ni.icon.mail.square:before {\n  content: \"\\f199\";\n}\n\ni.icon.history:before {\n  content: \"\\f1da\";\n}\n\ni.icon.options:before {\n  content: \"\\f1de\";\n}\n\ni.icon.text.telephone:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.find:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.alarm.mute:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.alarm.mute.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.copyright:before {\n  content: \"\\f1f9\";\n}\n\ni.icon.at:before {\n  content: \"\\f1fa\";\n}\n\ni.icon.eyedropper:before {\n  content: \"\\f1fb\";\n}\n\ni.icon.paint.brush:before {\n  content: \"\\f1fc\";\n}\n\ni.icon.heartbeat:before {\n  content: \"\\f21e\";\n}\n\ni.icon.mouse.pointer:before {\n  content: \"\\f245\";\n}\n\ni.icon.hourglass.empty:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.start:before {\n  content: \"\\f251\";\n}\n\ni.icon.hourglass.half:before {\n  content: \"\\f252\";\n}\n\ni.icon.hourglass.end:before {\n  content: \"\\f253\";\n}\n\ni.icon.hourglass.full:before {\n  content: \"\\f254\";\n}\n\ni.icon.hand.pointer:before {\n  content: \"\\f25a\";\n}\n\ni.icon.trademark:before {\n  content: \"\\f25c\";\n}\n\ni.icon.registered:before {\n  content: \"\\f25d\";\n}\n\ni.icon.creative.commons:before {\n  content: \"\\f25e\";\n}\n\ni.icon.add.to.calendar:before {\n  content: \"\\f271\";\n}\n\ni.icon.remove.from.calendar:before {\n  content: \"\\f272\";\n}\n\ni.icon.delete.calendar:before {\n  content: \"\\f273\";\n}\n\ni.icon.checked.calendar:before {\n  content: \"\\f274\";\n}\n\ni.icon.industry:before {\n  content: \"\\f275\";\n}\n\ni.icon.shopping.bag:before {\n  content: \"\\f290\";\n}\n\ni.icon.shopping.basket:before {\n  content: \"\\f291\";\n}\n\ni.icon.hashtag:before {\n  content: \"\\f292\";\n}\n\ni.icon.percent:before {\n  content: \"\\f295\";\n}\n\ni.icon.handshake:before {\n  content: \"\\f2b5\";\n}\n\ni.icon.open.envelope:before {\n  content: \"\\f2b6\";\n}\n\ni.icon.open.envelope.outline:before {\n  content: \"\\f2b7\";\n}\n\ni.icon.address.book:before {\n  content: \"\\f2b9\";\n}\n\ni.icon.address.book.outline:before {\n  content: \"\\f2ba\";\n}\n\ni.icon.address.card:before {\n  content: \"\\f2bb\";\n}\n\ni.icon.address.card.outline:before {\n  content: \"\\f2bc\";\n}\n\ni.icon.id.badge:before {\n  content: \"\\f2c1\";\n}\n\ni.icon.id.card:before {\n  content: \"\\f2c2\";\n}\n\ni.icon.id.card.outline:before {\n  content: \"\\f2c3\";\n}\n\ni.icon.podcast:before {\n  content: \"\\f2ce\";\n}\n\ni.icon.window.maximize:before {\n  content: \"\\f2d0\";\n}\n\ni.icon.window.minimize:before {\n  content: \"\\f2d1\";\n}\n\ni.icon.window.restore:before {\n  content: \"\\f2d2\";\n}\n\ni.icon.window.close:before {\n  content: \"\\f2d3\";\n}\n\ni.icon.window.close.outline:before {\n  content: \"\\f2d4\";\n}\n\n/* User Actions */\n\ni.icon.wait:before {\n  content: \"\\f017\";\n}\n\ni.icon.download:before {\n  content: \"\\f019\";\n}\n\ni.icon.repeat:before {\n  content: \"\\f01e\";\n}\n\ni.icon.refresh:before {\n  content: \"\\f021\";\n}\n\ni.icon.lock:before {\n  content: \"\\f023\";\n}\n\ni.icon.bookmark:before {\n  content: \"\\f02e\";\n}\n\ni.icon.print:before {\n  content: \"\\f02f\";\n}\n\ni.icon.write:before {\n  content: \"\\f040\";\n}\n\ni.icon.adjust:before {\n  content: \"\\f042\";\n}\n\ni.icon.theme:before {\n  content: \"\\f043\";\n}\n\ni.icon.edit:before {\n  content: \"\\f044\";\n}\n\ni.icon.external.share:before {\n  content: \"\\f045\";\n}\n\ni.icon.ban:before {\n  content: \"\\f05e\";\n}\n\ni.icon.mail.forward:before {\n  content: \"\\f064\";\n}\n\ni.icon.share:before {\n  content: \"\\f064\";\n}\n\ni.icon.expand:before {\n  content: \"\\f065\";\n}\n\ni.icon.compress:before {\n  content: \"\\f066\";\n}\n\ni.icon.unhide:before {\n  content: \"\\f06e\";\n}\n\ni.icon.hide:before {\n  content: \"\\f070\";\n}\n\ni.icon.random:before {\n  content: \"\\f074\";\n}\n\ni.icon.retweet:before {\n  content: \"\\f079\";\n}\n\ni.icon.sign.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.pin:before {\n  content: \"\\f08d\";\n}\n\ni.icon.sign.in:before {\n  content: \"\\f090\";\n}\n\ni.icon.upload:before {\n  content: \"\\f093\";\n}\n\ni.icon.call:before {\n  content: \"\\f095\";\n}\n\ni.icon.remove.bookmark:before {\n  content: \"\\f097\";\n}\n\ni.icon.call.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.unlock:before {\n  content: \"\\f09c\";\n}\n\ni.icon.configure:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.filter:before {\n  content: \"\\f0b0\";\n}\n\ni.icon.wizard:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.undo:before {\n  content: \"\\f0e2\";\n}\n\ni.icon.exchange:before {\n  content: \"\\f0ec\";\n}\n\ni.icon.cloud.download:before {\n  content: \"\\f0ed\";\n}\n\ni.icon.cloud.upload:before {\n  content: \"\\f0ee\";\n}\n\ni.icon.reply:before {\n  content: \"\\f112\";\n}\n\ni.icon.reply.all:before {\n  content: \"\\f122\";\n}\n\ni.icon.erase:before {\n  content: \"\\f12d\";\n}\n\ni.icon.unlock.alternate:before {\n  content: \"\\f13e\";\n}\n\ni.icon.write.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.share.square:before {\n  content: \"\\f14d\";\n}\n\ni.icon.archive:before {\n  content: \"\\f187\";\n}\n\ni.icon.translate:before {\n  content: \"\\f1ab\";\n}\n\ni.icon.recycle:before {\n  content: \"\\f1b8\";\n}\n\ni.icon.send:before {\n  content: \"\\f1d8\";\n}\n\ni.icon.send.outline:before {\n  content: \"\\f1d9\";\n}\n\ni.icon.share.alternate:before {\n  content: \"\\f1e0\";\n}\n\ni.icon.share.alternate.square:before {\n  content: \"\\f1e1\";\n}\n\ni.icon.add.to.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.in.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.add.user:before {\n  content: \"\\f234\";\n}\n\ni.icon.remove.user:before {\n  content: \"\\f235\";\n}\n\ni.icon.object.group:before {\n  content: \"\\f247\";\n}\n\ni.icon.object.ungroup:before {\n  content: \"\\f248\";\n}\n\ni.icon.clone:before {\n  content: \"\\f24d\";\n}\n\ni.icon.talk:before {\n  content: \"\\f27a\";\n}\n\ni.icon.talk.outline:before {\n  content: \"\\f27b\";\n}\n\n/* Messages */\n\ni.icon.help.circle:before {\n  content: \"\\f059\";\n}\n\ni.icon.info.circle:before {\n  content: \"\\f05a\";\n}\n\ni.icon.warning.circle:before {\n  content: \"\\f06a\";\n}\n\ni.icon.warning.sign:before {\n  content: \"\\f071\";\n}\n\ni.icon.announcement:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.help:before {\n  content: \"\\f128\";\n}\n\ni.icon.info:before {\n  content: \"\\f129\";\n}\n\ni.icon.warning:before {\n  content: \"\\f12a\";\n}\n\ni.icon.birthday:before {\n  content: \"\\f1fd\";\n}\n\ni.icon.help.circle.outline:before {\n  content: \"\\f29c\";\n}\n\n/* Users */\n\ni.icon.user:before {\n  content: \"\\f007\";\n}\n\ni.icon.users:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.doctor:before {\n  content: \"\\f0f0\";\n}\n\ni.icon.handicap:before {\n  content: \"\\f193\";\n}\n\ni.icon.student:before {\n  content: \"\\f19d\";\n}\n\ni.icon.child:before {\n  content: \"\\f1ae\";\n}\n\ni.icon.spy:before {\n  content: \"\\f21b\";\n}\n\ni.icon.user.circle:before {\n  content: \"\\f2bd\";\n}\n\ni.icon.user.circle.outline:before {\n  content: \"\\f2be\";\n}\n\ni.icon.user.outline:before {\n  content: \"\\f2c0\";\n}\n\n/* Gender & Sexuality */\n\ni.icon.female:before {\n  content: \"\\f182\";\n}\n\ni.icon.male:before {\n  content: \"\\f183\";\n}\n\ni.icon.woman:before {\n  content: \"\\f221\";\n}\n\ni.icon.man:before {\n  content: \"\\f222\";\n}\n\ni.icon.non.binary.transgender:before {\n  content: \"\\f223\";\n}\n\ni.icon.intergender:before {\n  content: \"\\f224\";\n}\n\ni.icon.transgender:before {\n  content: \"\\f225\";\n}\n\ni.icon.lesbian:before {\n  content: \"\\f226\";\n}\n\ni.icon.gay:before {\n  content: \"\\f227\";\n}\n\ni.icon.heterosexual:before {\n  content: \"\\f228\";\n}\n\ni.icon.other.gender:before {\n  content: \"\\f229\";\n}\n\ni.icon.other.gender.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.other.gender.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.neuter:before {\n  content: \"\\f22c\";\n}\n\ni.icon.genderless:before {\n  content: \"\\f22d\";\n}\n\n/* Accessibility */\n\ni.icon.universal.access:before {\n  content: \"\\f29a\";\n}\n\ni.icon.wheelchair:before {\n  content: \"\\f29b\";\n}\n\ni.icon.blind:before {\n  content: \"\\f29d\";\n}\n\ni.icon.audio.description:before {\n  content: \"\\f29e\";\n}\n\ni.icon.volume.control.phone:before {\n  content: \"\\f2a0\";\n}\n\ni.icon.braille:before {\n  content: \"\\f2a1\";\n}\n\ni.icon.asl:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.assistive.listening.systems:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.deafness:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.sign.language:before {\n  content: \"\\f2a7\";\n}\n\ni.icon.low.vision:before {\n  content: \"\\f2a8\";\n}\n\n/* View Adjustment */\n\ni.icon.block.layout:before {\n  content: \"\\f009\";\n}\n\ni.icon.grid.layout:before {\n  content: \"\\f00a\";\n}\n\ni.icon.list.layout:before {\n  content: \"\\f00b\";\n}\n\ni.icon.zoom:before {\n  content: \"\\f00e\";\n}\n\ni.icon.zoom.out:before {\n  content: \"\\f010\";\n}\n\ni.icon.resize.vertical:before {\n  content: \"\\f07d\";\n}\n\ni.icon.resize.horizontal:before {\n  content: \"\\f07e\";\n}\n\ni.icon.maximize:before {\n  content: \"\\f0b2\";\n}\n\ni.icon.crop:before {\n  content: \"\\f125\";\n}\n\n/* Literal Objects */\n\ni.icon.cocktail:before {\n  content: \"\\f000\";\n}\n\ni.icon.road:before {\n  content: \"\\f018\";\n}\n\ni.icon.flag:before {\n  content: \"\\f024\";\n}\n\ni.icon.book:before {\n  content: \"\\f02d\";\n}\n\ni.icon.gift:before {\n  content: \"\\f06b\";\n}\n\ni.icon.leaf:before {\n  content: \"\\f06c\";\n}\n\ni.icon.fire:before {\n  content: \"\\f06d\";\n}\n\ni.icon.plane:before {\n  content: \"\\f072\";\n}\n\ni.icon.magnet:before {\n  content: \"\\f076\";\n}\n\ni.icon.lemon:before {\n  content: \"\\f094\";\n}\n\ni.icon.world:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.travel:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.shipping:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.money:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.legal:before {\n  content: \"\\f0e3\";\n}\n\ni.icon.lightning:before {\n  content: \"\\f0e7\";\n}\n\ni.icon.umbrella:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.treatment:before {\n  content: \"\\f0f1\";\n}\n\ni.icon.suitcase:before {\n  content: \"\\f0f2\";\n}\n\ni.icon.bar:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.flag.outline:before {\n  content: \"\\f11d\";\n}\n\ni.icon.flag.checkered:before {\n  content: \"\\f11e\";\n}\n\ni.icon.puzzle:before {\n  content: \"\\f12e\";\n}\n\ni.icon.fire.extinguisher:before {\n  content: \"\\f134\";\n}\n\ni.icon.rocket:before {\n  content: \"\\f135\";\n}\n\ni.icon.anchor:before {\n  content: \"\\f13d\";\n}\n\ni.icon.bullseye:before {\n  content: \"\\f140\";\n}\n\ni.icon.sun:before {\n  content: \"\\f185\";\n}\n\ni.icon.moon:before {\n  content: \"\\f186\";\n}\n\ni.icon.fax:before {\n  content: \"\\f1ac\";\n}\n\ni.icon.life.ring:before {\n  content: \"\\f1cd\";\n}\n\ni.icon.bomb:before {\n  content: \"\\f1e2\";\n}\n\ni.icon.soccer:before {\n  content: \"\\f1e3\";\n}\n\ni.icon.calculator:before {\n  content: \"\\f1ec\";\n}\n\ni.icon.diamond:before {\n  content: \"\\f219\";\n}\n\ni.icon.sticky.note:before {\n  content: \"\\f249\";\n}\n\ni.icon.sticky.note.outline:before {\n  content: \"\\f24a\";\n}\n\ni.icon.law:before {\n  content: \"\\f24e\";\n}\n\ni.icon.hand.peace:before {\n  content: \"\\f25b\";\n}\n\ni.icon.hand.rock:before {\n  content: \"\\f255\";\n}\n\ni.icon.hand.paper:before {\n  content: \"\\f256\";\n}\n\ni.icon.hand.scissors:before {\n  content: \"\\f257\";\n}\n\ni.icon.hand.lizard:before {\n  content: \"\\f258\";\n}\n\ni.icon.hand.spock:before {\n  content: \"\\f259\";\n}\n\ni.icon.tv:before {\n  content: \"\\f26c\";\n}\n\ni.icon.thermometer.full:before {\n  content: \"\\f2c7\";\n}\n\ni.icon.thermometer.three.quarters:before {\n  content: \"\\f2c8\";\n}\n\ni.icon.thermometer.half:before {\n  content: \"\\f2c9\";\n}\n\ni.icon.thermometer.quarter:before {\n  content: \"\\f2ca\";\n}\n\ni.icon.thermometer.empty:before {\n  content: \"\\f2cb\";\n}\n\ni.icon.shower:before {\n  content: \"\\f2cc\";\n}\n\ni.icon.bathtub:before {\n  content: \"\\f2cd\";\n}\n\ni.icon.snowflake:before {\n  content: \"\\f2dc\";\n}\n\n/* Shapes */\n\ni.icon.crosshairs:before {\n  content: \"\\f05b\";\n}\n\ni.icon.asterisk:before {\n  content: \"\\f069\";\n}\n\ni.icon.square.outline:before {\n  content: \"\\f096\";\n}\n\ni.icon.certificate:before {\n  content: \"\\f0a3\";\n}\n\ni.icon.square:before {\n  content: \"\\f0c8\";\n}\n\ni.icon.quote.left:before {\n  content: \"\\f10d\";\n}\n\ni.icon.quote.right:before {\n  content: \"\\f10e\";\n}\n\ni.icon.spinner:before {\n  content: \"\\f110\";\n}\n\ni.icon.circle:before {\n  content: \"\\f111\";\n}\n\ni.icon.ellipsis.horizontal:before {\n  content: \"\\f141\";\n}\n\ni.icon.ellipsis.vertical:before {\n  content: \"\\f142\";\n}\n\ni.icon.cube:before {\n  content: \"\\f1b2\";\n}\n\ni.icon.cubes:before {\n  content: \"\\f1b3\";\n}\n\ni.icon.circle.notched:before {\n  content: \"\\f1ce\";\n}\n\ni.icon.circle.thin:before {\n  content: \"\\f1db\";\n}\n\n/* Item Selection */\n\ni.icon.checkmark:before {\n  content: \"\\f00c\";\n}\n\ni.icon.remove:before {\n  content: \"\\f00d\";\n}\n\ni.icon.checkmark.box:before {\n  content: \"\\f046\";\n}\n\ni.icon.move:before {\n  content: \"\\f047\";\n}\n\ni.icon.add.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.minus.circle:before {\n  content: \"\\f056\";\n}\n\ni.icon.remove.circle:before {\n  content: \"\\f057\";\n}\n\ni.icon.check.circle:before {\n  content: \"\\f058\";\n}\n\ni.icon.remove.circle.outline:before {\n  content: \"\\f05c\";\n}\n\ni.icon.check.circle.outline:before {\n  content: \"\\f05d\";\n}\n\ni.icon.plus:before {\n  content: \"\\f067\";\n}\n\ni.icon.minus:before {\n  content: \"\\f068\";\n}\n\ni.icon.add.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.radio:before {\n  content: \"\\f10c\";\n}\n\ni.icon.minus.square:before {\n  content: \"\\f146\";\n}\n\ni.icon.minus.square.outline:before {\n  content: \"\\f147\";\n}\n\ni.icon.check.square:before {\n  content: \"\\f14a\";\n}\n\ni.icon.selected.radio:before {\n  content: \"\\f192\";\n}\n\ni.icon.plus.square.outline:before {\n  content: \"\\f196\";\n}\n\ni.icon.toggle.off:before {\n  content: \"\\f204\";\n}\n\ni.icon.toggle.on:before {\n  content: \"\\f205\";\n}\n\n/* Media */\n\ni.icon.film:before {\n  content: \"\\f008\";\n}\n\ni.icon.sound:before {\n  content: \"\\f025\";\n}\n\ni.icon.photo:before {\n  content: \"\\f030\";\n}\n\ni.icon.bar.chart:before {\n  content: \"\\f080\";\n}\n\ni.icon.camera.retro:before {\n  content: \"\\f083\";\n}\n\ni.icon.newspaper:before {\n  content: \"\\f1ea\";\n}\n\ni.icon.area.chart:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.chart:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.chart:before {\n  content: \"\\f201\";\n}\n\n/* Pointers */\n\ni.icon.arrow.circle.outline.down:before {\n  content: \"\\f01a\";\n}\n\ni.icon.arrow.circle.outline.up:before {\n  content: \"\\f01b\";\n}\n\ni.icon.chevron.left:before {\n  content: \"\\f053\";\n}\n\ni.icon.chevron.right:before {\n  content: \"\\f054\";\n}\n\ni.icon.arrow.left:before {\n  content: \"\\f060\";\n}\n\ni.icon.arrow.right:before {\n  content: \"\\f061\";\n}\n\ni.icon.arrow.up:before {\n  content: \"\\f062\";\n}\n\ni.icon.arrow.down:before {\n  content: \"\\f063\";\n}\n\ni.icon.chevron.up:before {\n  content: \"\\f077\";\n}\n\ni.icon.chevron.down:before {\n  content: \"\\f078\";\n}\n\ni.icon.pointing.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.pointing.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.pointing.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.pointing.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.arrow.circle.left:before {\n  content: \"\\f0a8\";\n}\n\ni.icon.arrow.circle.right:before {\n  content: \"\\f0a9\";\n}\n\ni.icon.arrow.circle.up:before {\n  content: \"\\f0aa\";\n}\n\ni.icon.arrow.circle.down:before {\n  content: \"\\f0ab\";\n}\n\ni.icon.caret.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.caret.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.caret.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.caret.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.angle.double.left:before {\n  content: \"\\f100\";\n}\n\ni.icon.angle.double.right:before {\n  content: \"\\f101\";\n}\n\ni.icon.angle.double.up:before {\n  content: \"\\f102\";\n}\n\ni.icon.angle.double.down:before {\n  content: \"\\f103\";\n}\n\ni.icon.angle.left:before {\n  content: \"\\f104\";\n}\n\ni.icon.angle.right:before {\n  content: \"\\f105\";\n}\n\ni.icon.angle.up:before {\n  content: \"\\f106\";\n}\n\ni.icon.angle.down:before {\n  content: \"\\f107\";\n}\n\ni.icon.chevron.circle.left:before {\n  content: \"\\f137\";\n}\n\ni.icon.chevron.circle.right:before {\n  content: \"\\f138\";\n}\n\ni.icon.chevron.circle.up:before {\n  content: \"\\f139\";\n}\n\ni.icon.chevron.circle.down:before {\n  content: \"\\f13a\";\n}\n\ni.icon.toggle.down:before {\n  content: \"\\f150\";\n}\n\ni.icon.toggle.up:before {\n  content: \"\\f151\";\n}\n\ni.icon.toggle.right:before {\n  content: \"\\f152\";\n}\n\ni.icon.long.arrow.down:before {\n  content: \"\\f175\";\n}\n\ni.icon.long.arrow.up:before {\n  content: \"\\f176\";\n}\n\ni.icon.long.arrow.left:before {\n  content: \"\\f177\";\n}\n\ni.icon.long.arrow.right:before {\n  content: \"\\f178\";\n}\n\ni.icon.arrow.circle.outline.right:before {\n  content: \"\\f18e\";\n}\n\ni.icon.arrow.circle.outline.left:before {\n  content: \"\\f190\";\n}\n\ni.icon.toggle.left:before {\n  content: \"\\f191\";\n}\n\n/* Mobile */\n\ni.icon.tablet:before {\n  content: \"\\f10a\";\n}\n\ni.icon.mobile:before {\n  content: \"\\f10b\";\n}\n\ni.icon.battery.full:before {\n  content: \"\\f240\";\n}\n\ni.icon.battery.high:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.medium:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.low:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.empty:before {\n  content: \"\\f244\";\n}\n\n/* Computer */\n\ni.icon.power:before {\n  content: \"\\f011\";\n}\n\ni.icon.trash.outline:before {\n  content: \"\\f014\";\n}\n\ni.icon.disk.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.desktop:before {\n  content: \"\\f108\";\n}\n\ni.icon.laptop:before {\n  content: \"\\f109\";\n}\n\ni.icon.game:before {\n  content: \"\\f11b\";\n}\n\ni.icon.keyboard:before {\n  content: \"\\f11c\";\n}\n\ni.icon.plug:before {\n  content: \"\\f1e6\";\n}\n\n/* File System */\n\ni.icon.trash:before {\n  content: \"\\f1f8\";\n}\n\ni.icon.file.outline:before {\n  content: \"\\f016\";\n}\n\ni.icon.folder:before {\n  content: \"\\f07b\";\n}\n\ni.icon.folder.open:before {\n  content: \"\\f07c\";\n}\n\ni.icon.file.text.outline:before {\n  content: \"\\f0f6\";\n}\n\ni.icon.folder.outline:before {\n  content: \"\\f114\";\n}\n\ni.icon.folder.open.outline:before {\n  content: \"\\f115\";\n}\n\ni.icon.level.up:before {\n  content: \"\\f148\";\n}\n\ni.icon.level.down:before {\n  content: \"\\f149\";\n}\n\ni.icon.file:before {\n  content: \"\\f15b\";\n}\n\ni.icon.file.text:before {\n  content: \"\\f15c\";\n}\n\ni.icon.file.pdf.outline:before {\n  content: \"\\f1c1\";\n}\n\ni.icon.file.word.outline:before {\n  content: \"\\f1c2\";\n}\n\ni.icon.file.excel.outline:before {\n  content: \"\\f1c3\";\n}\n\ni.icon.file.powerpoint.outline:before {\n  content: \"\\f1c4\";\n}\n\ni.icon.file.image.outline:before {\n  content: \"\\f1c5\";\n}\n\ni.icon.file.archive.outline:before {\n  content: \"\\f1c6\";\n}\n\ni.icon.file.audio.outline:before {\n  content: \"\\f1c7\";\n}\n\ni.icon.file.video.outline:before {\n  content: \"\\f1c8\";\n}\n\ni.icon.file.code.outline:before {\n  content: \"\\f1c9\";\n}\n\n/* Technologies */\n\ni.icon.qrcode:before {\n  content: \"\\f029\";\n}\n\ni.icon.barcode:before {\n  content: \"\\f02a\";\n}\n\ni.icon.rss:before {\n  content: \"\\f09e\";\n}\n\ni.icon.fork:before {\n  content: \"\\f126\";\n}\n\ni.icon.html5:before {\n  content: \"\\f13b\";\n}\n\ni.icon.css3:before {\n  content: \"\\f13c\";\n}\n\ni.icon.rss.square:before {\n  content: \"\\f143\";\n}\n\ni.icon.openid:before {\n  content: \"\\f19b\";\n}\n\ni.icon.database:before {\n  content: \"\\f1c0\";\n}\n\ni.icon.wifi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.server:before {\n  content: \"\\f233\";\n}\n\ni.icon.usb:before {\n  content: \"\\f287\";\n}\n\ni.icon.bluetooth:before {\n  content: \"\\f293\";\n}\n\ni.icon.bluetooth.alternative:before {\n  content: \"\\f294\";\n}\n\ni.icon.microchip:before {\n  content: \"\\f2db\";\n}\n\n/* Rating */\n\ni.icon.heart:before {\n  content: \"\\f004\";\n}\n\ni.icon.star:before {\n  content: \"\\f005\";\n}\n\ni.icon.empty.star:before {\n  content: \"\\f006\";\n}\n\ni.icon.thumbs.outline.up:before {\n  content: \"\\f087\";\n}\n\ni.icon.thumbs.outline.down:before {\n  content: \"\\f088\";\n}\n\ni.icon.star.half:before {\n  content: \"\\f089\";\n}\n\ni.icon.empty.heart:before {\n  content: \"\\f08a\";\n}\n\ni.icon.smile:before {\n  content: \"\\f118\";\n}\n\ni.icon.frown:before {\n  content: \"\\f119\";\n}\n\ni.icon.meh:before {\n  content: \"\\f11a\";\n}\n\ni.icon.star.half.empty:before {\n  content: \"\\f123\";\n}\n\ni.icon.thumbs.up:before {\n  content: \"\\f164\";\n}\n\ni.icon.thumbs.down:before {\n  content: \"\\f165\";\n}\n\n/* Audio */\n\ni.icon.music:before {\n  content: \"\\f001\";\n}\n\ni.icon.video.play.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.volume.off:before {\n  content: \"\\f026\";\n}\n\ni.icon.volume.down:before {\n  content: \"\\f027\";\n}\n\ni.icon.volume.up:before {\n  content: \"\\f028\";\n}\n\ni.icon.record:before {\n  content: \"\\f03d\";\n}\n\ni.icon.step.backward:before {\n  content: \"\\f048\";\n}\n\ni.icon.fast.backward:before {\n  content: \"\\f049\";\n}\n\ni.icon.backward:before {\n  content: \"\\f04a\";\n}\n\ni.icon.play:before {\n  content: \"\\f04b\";\n}\n\ni.icon.pause:before {\n  content: \"\\f04c\";\n}\n\ni.icon.stop:before {\n  content: \"\\f04d\";\n}\n\ni.icon.forward:before {\n  content: \"\\f04e\";\n}\n\ni.icon.fast.forward:before {\n  content: \"\\f050\";\n}\n\ni.icon.step.forward:before {\n  content: \"\\f051\";\n}\n\ni.icon.eject:before {\n  content: \"\\f052\";\n}\n\ni.icon.unmute:before {\n  content: \"\\f130\";\n}\n\ni.icon.mute:before {\n  content: \"\\f131\";\n}\n\ni.icon.video.play:before {\n  content: \"\\f144\";\n}\n\ni.icon.closed.captioning:before {\n  content: \"\\f20a\";\n}\n\ni.icon.pause.circle:before {\n  content: \"\\f28b\";\n}\n\ni.icon.pause.circle.outline:before {\n  content: \"\\f28c\";\n}\n\ni.icon.stop.circle:before {\n  content: \"\\f28d\";\n}\n\ni.icon.stop.circle.outline:before {\n  content: \"\\f28e\";\n}\n\n/* Map, Locations, & Transportation */\n\ni.icon.marker:before {\n  content: \"\\f041\";\n}\n\ni.icon.coffee:before {\n  content: \"\\f0f4\";\n}\n\ni.icon.food:before {\n  content: \"\\f0f5\";\n}\n\ni.icon.building.outline:before {\n  content: \"\\f0f7\";\n}\n\ni.icon.hospital:before {\n  content: \"\\f0f8\";\n}\n\ni.icon.emergency:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.first.aid:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.military:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.h:before {\n  content: \"\\f0fd\";\n}\n\ni.icon.location.arrow:before {\n  content: \"\\f124\";\n}\n\ni.icon.compass:before {\n  content: \"\\f14e\";\n}\n\ni.icon.space.shuttle:before {\n  content: \"\\f197\";\n}\n\ni.icon.university:before {\n  content: \"\\f19c\";\n}\n\ni.icon.building:before {\n  content: \"\\f1ad\";\n}\n\ni.icon.paw:before {\n  content: \"\\f1b0\";\n}\n\ni.icon.spoon:before {\n  content: \"\\f1b1\";\n}\n\ni.icon.car:before {\n  content: \"\\f1b9\";\n}\n\ni.icon.taxi:before {\n  content: \"\\f1ba\";\n}\n\ni.icon.tree:before {\n  content: \"\\f1bb\";\n}\n\ni.icon.bicycle:before {\n  content: \"\\f206\";\n}\n\ni.icon.bus:before {\n  content: \"\\f207\";\n}\n\ni.icon.ship:before {\n  content: \"\\f21a\";\n}\n\ni.icon.motorcycle:before {\n  content: \"\\f21c\";\n}\n\ni.icon.street.view:before {\n  content: \"\\f21d\";\n}\n\ni.icon.hotel:before {\n  content: \"\\f236\";\n}\n\ni.icon.train:before {\n  content: \"\\f238\";\n}\n\ni.icon.subway:before {\n  content: \"\\f239\";\n}\n\ni.icon.map.pin:before {\n  content: \"\\f276\";\n}\n\ni.icon.map.signs:before {\n  content: \"\\f277\";\n}\n\ni.icon.map.outline:before {\n  content: \"\\f278\";\n}\n\ni.icon.map:before {\n  content: \"\\f279\";\n}\n\n/* Tables */\n\ni.icon.table:before {\n  content: \"\\f0ce\";\n}\n\ni.icon.columns:before {\n  content: \"\\f0db\";\n}\n\ni.icon.sort:before {\n  content: \"\\f0dc\";\n}\n\ni.icon.sort.descending:before {\n  content: \"\\f0dd\";\n}\n\ni.icon.sort.ascending:before {\n  content: \"\\f0de\";\n}\n\ni.icon.sort.alphabet.ascending:before {\n  content: \"\\f15d\";\n}\n\ni.icon.sort.alphabet.descending:before {\n  content: \"\\f15e\";\n}\n\ni.icon.sort.content.ascending:before {\n  content: \"\\f160\";\n}\n\ni.icon.sort.content.descending:before {\n  content: \"\\f161\";\n}\n\ni.icon.sort.numeric.ascending:before {\n  content: \"\\f162\";\n}\n\ni.icon.sort.numeric.descending:before {\n  content: \"\\f163\";\n}\n\n/* Text Editor */\n\ni.icon.font:before {\n  content: \"\\f031\";\n}\n\ni.icon.bold:before {\n  content: \"\\f032\";\n}\n\ni.icon.italic:before {\n  content: \"\\f033\";\n}\n\ni.icon.text.height:before {\n  content: \"\\f034\";\n}\n\ni.icon.text.width:before {\n  content: \"\\f035\";\n}\n\ni.icon.align.left:before {\n  content: \"\\f036\";\n}\n\ni.icon.align.center:before {\n  content: \"\\f037\";\n}\n\ni.icon.align.right:before {\n  content: \"\\f038\";\n}\n\ni.icon.align.justify:before {\n  content: \"\\f039\";\n}\n\ni.icon.list:before {\n  content: \"\\f03a\";\n}\n\ni.icon.outdent:before {\n  content: \"\\f03b\";\n}\n\ni.icon.indent:before {\n  content: \"\\f03c\";\n}\n\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.cut:before {\n  content: \"\\f0c4\";\n}\n\ni.icon.copy:before {\n  content: \"\\f0c5\";\n}\n\ni.icon.attach:before {\n  content: \"\\f0c6\";\n}\n\ni.icon.save:before {\n  content: \"\\f0c7\";\n}\n\ni.icon.content:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.unordered.list:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.ordered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.strikethrough:before {\n  content: \"\\f0cc\";\n}\n\ni.icon.underline:before {\n  content: \"\\f0cd\";\n}\n\ni.icon.paste:before {\n  content: \"\\f0ea\";\n}\n\ni.icon.unlinkify:before {\n  content: \"\\f127\";\n}\n\ni.icon.superscript:before {\n  content: \"\\f12b\";\n}\n\ni.icon.subscript:before {\n  content: \"\\f12c\";\n}\n\ni.icon.header:before {\n  content: \"\\f1dc\";\n}\n\ni.icon.paragraph:before {\n  content: \"\\f1dd\";\n}\n\ni.icon.text.cursor:before {\n  content: \"\\f246\";\n}\n\n/* Currency */\n\ni.icon.euro:before {\n  content: \"\\f153\";\n}\n\ni.icon.pound:before {\n  content: \"\\f154\";\n}\n\ni.icon.dollar:before {\n  content: \"\\f155\";\n}\n\ni.icon.rupee:before {\n  content: \"\\f156\";\n}\n\ni.icon.yen:before {\n  content: \"\\f157\";\n}\n\ni.icon.ruble:before {\n  content: \"\\f158\";\n}\n\ni.icon.won:before {\n  content: \"\\f159\";\n}\n\ni.icon.bitcoin:before {\n  content: \"\\f15a\";\n}\n\ni.icon.lira:before {\n  content: \"\\f195\";\n}\n\ni.icon.shekel:before {\n  content: \"\\f20b\";\n}\n\n/* Payment Options */\n\ni.icon.paypal:before {\n  content: \"\\f1ed\";\n}\n\ni.icon.google.wallet:before {\n  content: \"\\f1ee\";\n}\n\ni.icon.visa:before {\n  content: \"\\f1f0\";\n}\n\ni.icon.mastercard:before {\n  content: \"\\f1f1\";\n}\n\ni.icon.discover:before {\n  content: \"\\f1f2\";\n}\n\ni.icon.american.express:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.paypal.card:before {\n  content: \"\\f1f4\";\n}\n\ni.icon.stripe:before {\n  content: \"\\f1f5\";\n}\n\ni.icon.japan.credit.bureau:before {\n  content: \"\\f24b\";\n}\n\ni.icon.diners.club:before {\n  content: \"\\f24c\";\n}\n\ni.icon.credit.card.alternative:before {\n  content: \"\\f283\";\n}\n\n/* Networks and Websites*/\n\ni.icon.twitter.square:before {\n  content: \"\\f081\";\n}\n\ni.icon.facebook.square:before {\n  content: \"\\f082\";\n}\n\ni.icon.linkedin.square:before {\n  content: \"\\f08c\";\n}\n\ni.icon.github.square:before {\n  content: \"\\f092\";\n}\n\ni.icon.twitter:before {\n  content: \"\\f099\";\n}\n\ni.icon.facebook.f:before {\n  content: \"\\f09a\";\n}\n\ni.icon.github:before {\n  content: \"\\f09b\";\n}\n\ni.icon.pinterest:before {\n  content: \"\\f0d2\";\n}\n\ni.icon.pinterest.square:before {\n  content: \"\\f0d3\";\n}\n\ni.icon.google.plus.square:before {\n  content: \"\\f0d4\";\n}\n\ni.icon.google.plus:before {\n  content: \"\\f0d5\";\n}\n\ni.icon.linkedin:before {\n  content: \"\\f0e1\";\n}\n\ni.icon.github.alternate:before {\n  content: \"\\f113\";\n}\n\ni.icon.maxcdn:before {\n  content: \"\\f136\";\n}\n\ni.icon.youtube.square:before {\n  content: \"\\f166\";\n}\n\ni.icon.youtube:before {\n  content: \"\\f167\";\n}\n\ni.icon.xing:before {\n  content: \"\\f168\";\n}\n\ni.icon.xing.square:before {\n  content: \"\\f169\";\n}\n\ni.icon.youtube.play:before {\n  content: \"\\f16a\";\n}\n\ni.icon.dropbox:before {\n  content: \"\\f16b\";\n}\n\ni.icon.stack.overflow:before {\n  content: \"\\f16c\";\n}\n\ni.icon.instagram:before {\n  content: \"\\f16d\";\n}\n\ni.icon.flickr:before {\n  content: \"\\f16e\";\n}\n\ni.icon.adn:before {\n  content: \"\\f170\";\n}\n\ni.icon.bitbucket:before {\n  content: \"\\f171\";\n}\n\ni.icon.bitbucket.square:before {\n  content: \"\\f172\";\n}\n\ni.icon.tumblr:before {\n  content: \"\\f173\";\n}\n\ni.icon.tumblr.square:before {\n  content: \"\\f174\";\n}\n\ni.icon.apple:before {\n  content: \"\\f179\";\n}\n\ni.icon.windows:before {\n  content: \"\\f17a\";\n}\n\ni.icon.android:before {\n  content: \"\\f17b\";\n}\n\ni.icon.linux:before {\n  content: \"\\f17c\";\n}\n\ni.icon.dribble:before {\n  content: \"\\f17d\";\n}\n\ni.icon.skype:before {\n  content: \"\\f17e\";\n}\n\ni.icon.foursquare:before {\n  content: \"\\f180\";\n}\n\ni.icon.trello:before {\n  content: \"\\f181\";\n}\n\ni.icon.gittip:before {\n  content: \"\\f184\";\n}\n\ni.icon.vk:before {\n  content: \"\\f189\";\n}\n\ni.icon.weibo:before {\n  content: \"\\f18a\";\n}\n\ni.icon.renren:before {\n  content: \"\\f18b\";\n}\n\ni.icon.pagelines:before {\n  content: \"\\f18c\";\n}\n\ni.icon.stack.exchange:before {\n  content: \"\\f18d\";\n}\n\ni.icon.vimeo.square:before {\n  content: \"\\f194\";\n}\n\ni.icon.slack:before {\n  content: \"\\f198\";\n}\n\ni.icon.wordpress:before {\n  content: \"\\f19a\";\n}\n\ni.icon.yahoo:before {\n  content: \"\\f19e\";\n}\n\ni.icon.google:before {\n  content: \"\\f1a0\";\n}\n\ni.icon.reddit:before {\n  content: \"\\f1a1\";\n}\n\ni.icon.reddit.square:before {\n  content: \"\\f1a2\";\n}\n\ni.icon.stumbleupon.circle:before {\n  content: \"\\f1a3\";\n}\n\ni.icon.stumbleupon:before {\n  content: \"\\f1a4\";\n}\n\ni.icon.delicious:before {\n  content: \"\\f1a5\";\n}\n\ni.icon.digg:before {\n  content: \"\\f1a6\";\n}\n\ni.icon.pied.piper:before {\n  content: \"\\f1a7\";\n}\n\ni.icon.pied.piper.alternate:before {\n  content: \"\\f1a8\";\n}\n\ni.icon.drupal:before {\n  content: \"\\f1a9\";\n}\n\ni.icon.joomla:before {\n  content: \"\\f1aa\";\n}\n\ni.icon.behance:before {\n  content: \"\\f1b4\";\n}\n\ni.icon.behance.square:before {\n  content: \"\\f1b5\";\n}\n\ni.icon.steam:before {\n  content: \"\\f1b6\";\n}\n\ni.icon.steam.square:before {\n  content: \"\\f1b7\";\n}\n\ni.icon.spotify:before {\n  content: \"\\f1bc\";\n}\n\ni.icon.deviantart:before {\n  content: \"\\f1bd\";\n}\n\ni.icon.soundcloud:before {\n  content: \"\\f1be\";\n}\n\ni.icon.vine:before {\n  content: \"\\f1ca\";\n}\n\ni.icon.codepen:before {\n  content: \"\\f1cb\";\n}\n\ni.icon.jsfiddle:before {\n  content: \"\\f1cc\";\n}\n\ni.icon.rebel:before {\n  content: \"\\f1d0\";\n}\n\ni.icon.empire:before {\n  content: \"\\f1d1\";\n}\n\ni.icon.git.square:before {\n  content: \"\\f1d2\";\n}\n\ni.icon.git:before {\n  content: \"\\f1d3\";\n}\n\ni.icon.hacker.news:before {\n  content: \"\\f1d4\";\n}\n\ni.icon.tencent.weibo:before {\n  content: \"\\f1d5\";\n}\n\ni.icon.qq:before {\n  content: \"\\f1d6\";\n}\n\ni.icon.wechat:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.slideshare:before {\n  content: \"\\f1e7\";\n}\n\ni.icon.twitch:before {\n  content: \"\\f1e8\";\n}\n\ni.icon.yelp:before {\n  content: \"\\f1e9\";\n}\n\ni.icon.lastfm:before {\n  content: \"\\f202\";\n}\n\ni.icon.lastfm.square:before {\n  content: \"\\f203\";\n}\n\ni.icon.ioxhost:before {\n  content: \"\\f208\";\n}\n\ni.icon.angellist:before {\n  content: \"\\f209\";\n}\n\ni.icon.meanpath:before {\n  content: \"\\f20c\";\n}\n\ni.icon.buysellads:before {\n  content: \"\\f20d\";\n}\n\ni.icon.connectdevelop:before {\n  content: \"\\f20e\";\n}\n\ni.icon.dashcube:before {\n  content: \"\\f210\";\n}\n\ni.icon.forumbee:before {\n  content: \"\\f211\";\n}\n\ni.icon.leanpub:before {\n  content: \"\\f212\";\n}\n\ni.icon.sellsy:before {\n  content: \"\\f213\";\n}\n\ni.icon.shirtsinbulk:before {\n  content: \"\\f214\";\n}\n\ni.icon.simplybuilt:before {\n  content: \"\\f215\";\n}\n\ni.icon.skyatlas:before {\n  content: \"\\f216\";\n}\n\ni.icon.facebook:before {\n  content: \"\\f230\";\n}\n\ni.icon.pinterest:before {\n  content: \"\\f231\";\n}\n\ni.icon.whatsapp:before {\n  content: \"\\f232\";\n}\n\ni.icon.viacoin:before {\n  content: \"\\f237\";\n}\n\ni.icon.medium:before {\n  content: \"\\f23a\";\n}\n\ni.icon.y.combinator:before {\n  content: \"\\f23b\";\n}\n\ni.icon.optinmonster:before {\n  content: \"\\f23c\";\n}\n\ni.icon.opencart:before {\n  content: \"\\f23d\";\n}\n\ni.icon.expeditedssl:before {\n  content: \"\\f23e\";\n}\n\ni.icon.gg:before {\n  content: \"\\f260\";\n}\n\ni.icon.gg.circle:before {\n  content: \"\\f261\";\n}\n\ni.icon.tripadvisor:before {\n  content: \"\\f262\";\n}\n\ni.icon.odnoklassniki:before {\n  content: \"\\f263\";\n}\n\ni.icon.odnoklassniki.square:before {\n  content: \"\\f264\";\n}\n\ni.icon.pocket:before {\n  content: \"\\f265\";\n}\n\ni.icon.wikipedia:before {\n  content: \"\\f266\";\n}\n\ni.icon.safari:before {\n  content: \"\\f267\";\n}\n\ni.icon.chrome:before {\n  content: \"\\f268\";\n}\n\ni.icon.firefox:before {\n  content: \"\\f269\";\n}\n\ni.icon.opera:before {\n  content: \"\\f26a\";\n}\n\ni.icon.internet.explorer:before {\n  content: \"\\f26b\";\n}\n\ni.icon.contao:before {\n  content: \"\\f26d\";\n}\n\ni.icon.\\35 00px:before {\n  content: \"\\f26e\";\n}\n\ni.icon.amazon:before {\n  content: \"\\f270\";\n}\n\ni.icon.houzz:before {\n  content: \"\\f27c\";\n}\n\ni.icon.vimeo:before {\n  content: \"\\f27d\";\n}\n\ni.icon.black.tie:before {\n  content: \"\\f27e\";\n}\n\ni.icon.fonticons:before {\n  content: \"\\f280\";\n}\n\ni.icon.reddit.alien:before {\n  content: \"\\f281\";\n}\n\ni.icon.microsoft.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.codiepie:before {\n  content: \"\\f284\";\n}\n\ni.icon.modx:before {\n  content: \"\\f285\";\n}\n\ni.icon.fort.awesome:before {\n  content: \"\\f286\";\n}\n\ni.icon.product.hunt:before {\n  content: \"\\f288\";\n}\n\ni.icon.mixcloud:before {\n  content: \"\\f289\";\n}\n\ni.icon.scribd:before {\n  content: \"\\f28a\";\n}\n\ni.icon.gitlab:before {\n  content: \"\\f296\";\n}\n\ni.icon.wpbeginner:before {\n  content: \"\\f297\";\n}\n\ni.icon.wpforms:before {\n  content: \"\\f298\";\n}\n\ni.icon.envira.gallery:before {\n  content: \"\\f299\";\n}\n\ni.icon.glide:before {\n  content: \"\\f2a5\";\n}\n\ni.icon.glide.g:before {\n  content: \"\\f2a6\";\n}\n\ni.icon.viadeo:before {\n  content: \"\\f2a9\";\n}\n\ni.icon.viadeo.square:before {\n  content: \"\\f2aa\";\n}\n\ni.icon.snapchat:before {\n  content: \"\\f2ab\";\n}\n\ni.icon.snapchat.ghost:before {\n  content: \"\\f2ac\";\n}\n\ni.icon.snapchat.square:before {\n  content: \"\\f2ad\";\n}\n\ni.icon.pied.piper.hat:before {\n  content: \"\\f2ae\";\n}\n\ni.icon.first.order:before {\n  content: \"\\f2b0\";\n}\n\ni.icon.yoast:before {\n  content: \"\\f2b1\";\n}\n\ni.icon.themeisle:before {\n  content: \"\\f2b2\";\n}\n\ni.icon.google.plus.circle:before {\n  content: \"\\f2b3\";\n}\n\ni.icon.font.awesome:before {\n  content: \"\\f2b4\";\n}\n\ni.icon.linode:before {\n  content: \"\\f2b8\";\n}\n\ni.icon.quora:before {\n  content: \"\\f2c4\";\n}\n\ni.icon.free.code.camp:before {\n  content: \"\\f2c5\";\n}\n\ni.icon.telegram:before {\n  content: \"\\f2c6\";\n}\n\ni.icon.bandcamp:before {\n  content: \"\\f2d5\";\n}\n\ni.icon.grav:before {\n  content: \"\\f2d6\";\n}\n\ni.icon.etsy:before {\n  content: \"\\f2d7\";\n}\n\ni.icon.imdb:before {\n  content: \"\\f2d8\";\n}\n\ni.icon.ravelry:before {\n  content: \"\\f2d9\";\n}\n\ni.icon.eercast:before {\n  content: \"\\f2da\";\n}\n\ni.icon.superpowers:before {\n  content: \"\\f2dd\";\n}\n\ni.icon.wpexplorer:before {\n  content: \"\\f2de\";\n}\n\ni.icon.meetup:before {\n  content: \"\\f2e0\";\n}\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before {\n  content: \"\\f004\";\n}\n\ni.icon.favorite:before {\n  content: \"\\f005\";\n}\n\ni.icon.video:before {\n  content: \"\\f008\";\n}\n\ni.icon.check:before {\n  content: \"\\f00c\";\n}\n\ni.icon.close:before {\n  content: \"\\f00d\";\n}\n\ni.icon.cancel:before {\n  content: \"\\f00d\";\n}\n\ni.icon.delete:before {\n  content: \"\\f00d\";\n}\n\ni.icon.x:before {\n  content: \"\\f00d\";\n}\n\ni.icon.zoom.in:before {\n  content: \"\\f00e\";\n}\n\ni.icon.magnify:before {\n  content: \"\\f00e\";\n}\n\ni.icon.shutdown:before {\n  content: \"\\f011\";\n}\n\ni.icon.clock:before {\n  content: \"\\f017\";\n}\n\ni.icon.time:before {\n  content: \"\\f017\";\n}\n\ni.icon.play.circle.outline:before {\n  content: \"\\f01d\";\n}\n\ni.icon.headphone:before {\n  content: \"\\f025\";\n}\n\ni.icon.camera:before {\n  content: \"\\f030\";\n}\n\ni.icon.video.camera:before {\n  content: \"\\f03d\";\n}\n\ni.icon.picture:before {\n  content: \"\\f03e\";\n}\n\ni.icon.pencil:before {\n  content: \"\\f040\";\n}\n\ni.icon.compose:before {\n  content: \"\\f040\";\n}\n\ni.icon.point:before {\n  content: \"\\f041\";\n}\n\ni.icon.tint:before {\n  content: \"\\f043\";\n}\n\ni.icon.signup:before {\n  content: \"\\f044\";\n}\n\ni.icon.plus.circle:before {\n  content: \"\\f055\";\n}\n\ni.icon.question.circle:before {\n  content: \"\\f059\";\n}\n\ni.icon.dont:before {\n  content: \"\\f05e\";\n}\n\ni.icon.minimize:before {\n  content: \"\\f066\";\n}\n\ni.icon.add:before {\n  content: \"\\f067\";\n}\n\ni.icon.exclamation.circle:before {\n  content: \"\\f06a\";\n}\n\ni.icon.attention:before {\n  content: \"\\f06a\";\n}\n\ni.icon.eye:before {\n  content: \"\\f06e\";\n}\n\ni.icon.exclamation.triangle:before {\n  content: \"\\f071\";\n}\n\ni.icon.shuffle:before {\n  content: \"\\f074\";\n}\n\ni.icon.chat:before {\n  content: \"\\f075\";\n}\n\ni.icon.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.shopping.cart:before {\n  content: \"\\f07a\";\n}\n\ni.icon.bar.graph:before {\n  content: \"\\f080\";\n}\n\ni.icon.key:before {\n  content: \"\\f084\";\n}\n\ni.icon.cogs:before {\n  content: \"\\f085\";\n}\n\ni.icon.discussions:before {\n  content: \"\\f086\";\n}\n\ni.icon.like.outline:before {\n  content: \"\\f087\";\n}\n\ni.icon.dislike.outline:before {\n  content: \"\\f088\";\n}\n\ni.icon.heart.outline:before {\n  content: \"\\f08a\";\n}\n\ni.icon.log.out:before {\n  content: \"\\f08b\";\n}\n\ni.icon.thumb.tack:before {\n  content: \"\\f08d\";\n}\n\ni.icon.winner:before {\n  content: \"\\f091\";\n}\n\ni.icon.phone:before {\n  content: \"\\f095\";\n}\n\ni.icon.bookmark.outline:before {\n  content: \"\\f097\";\n}\n\ni.icon.phone.square:before {\n  content: \"\\f098\";\n}\n\ni.icon.credit.card:before {\n  content: \"\\f09d\";\n}\n\ni.icon.hdd.outline:before {\n  content: \"\\f0a0\";\n}\n\ni.icon.bullhorn:before {\n  content: \"\\f0a1\";\n}\n\ni.icon.bell.outline:before {\n  content: \"\\f0a2\";\n}\n\ni.icon.hand.outline.right:before {\n  content: \"\\f0a4\";\n}\n\ni.icon.hand.outline.left:before {\n  content: \"\\f0a5\";\n}\n\ni.icon.hand.outline.up:before {\n  content: \"\\f0a6\";\n}\n\ni.icon.hand.outline.down:before {\n  content: \"\\f0a7\";\n}\n\ni.icon.globe:before {\n  content: \"\\f0ac\";\n}\n\ni.icon.wrench:before {\n  content: \"\\f0ad\";\n}\n\ni.icon.briefcase:before {\n  content: \"\\f0b1\";\n}\n\ni.icon.group:before {\n  content: \"\\f0c0\";\n}\n\ni.icon.linkify:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.chain:before {\n  content: \"\\f0c1\";\n}\n\ni.icon.flask:before {\n  content: \"\\f0c3\";\n}\n\ni.icon.sidebar:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.bars:before {\n  content: \"\\f0c9\";\n}\n\ni.icon.list.ul:before {\n  content: \"\\f0ca\";\n}\n\ni.icon.list.ol:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.numbered.list:before {\n  content: \"\\f0cb\";\n}\n\ni.icon.magic:before {\n  content: \"\\f0d0\";\n}\n\ni.icon.truck:before {\n  content: \"\\f0d1\";\n}\n\ni.icon.currency:before {\n  content: \"\\f0d6\";\n}\n\ni.icon.triangle.down:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.dropdown:before {\n  content: \"\\f0d7\";\n}\n\ni.icon.triangle.up:before {\n  content: \"\\f0d8\";\n}\n\ni.icon.triangle.left:before {\n  content: \"\\f0d9\";\n}\n\ni.icon.triangle.right:before {\n  content: \"\\f0da\";\n}\n\ni.icon.envelope:before {\n  content: \"\\f0e0\";\n}\n\ni.icon.conversation:before {\n  content: \"\\f0e6\";\n}\n\ni.icon.rain:before {\n  content: \"\\f0e9\";\n}\n\ni.icon.clipboard:before {\n  content: \"\\f0ea\";\n}\n\ni.icon.lightbulb:before {\n  content: \"\\f0eb\";\n}\n\ni.icon.bell:before {\n  content: \"\\f0f3\";\n}\n\ni.icon.ambulance:before {\n  content: \"\\f0f9\";\n}\n\ni.icon.medkit:before {\n  content: \"\\f0fa\";\n}\n\ni.icon.fighter.jet:before {\n  content: \"\\f0fb\";\n}\n\ni.icon.beer:before {\n  content: \"\\f0fc\";\n}\n\ni.icon.plus.square:before {\n  content: \"\\f0fe\";\n}\n\ni.icon.computer:before {\n  content: \"\\f108\";\n}\n\ni.icon.circle.outline:before {\n  content: \"\\f10c\";\n}\n\ni.icon.gamepad:before {\n  content: \"\\f11b\";\n}\n\ni.icon.star.half.full:before {\n  content: \"\\f123\";\n}\n\ni.icon.broken.chain:before {\n  content: \"\\f127\";\n}\n\ni.icon.question:before {\n  content: \"\\f128\";\n}\n\ni.icon.exclamation:before {\n  content: \"\\f12a\";\n}\n\ni.icon.eraser:before {\n  content: \"\\f12d\";\n}\n\ni.icon.microphone:before {\n  content: \"\\f130\";\n}\n\ni.icon.microphone.slash:before {\n  content: \"\\f131\";\n}\n\ni.icon.shield:before {\n  content: \"\\f132\";\n}\n\ni.icon.target:before {\n  content: \"\\f140\";\n}\n\ni.icon.play.circle:before {\n  content: \"\\f144\";\n}\n\ni.icon.pencil.square:before {\n  content: \"\\f14b\";\n}\n\ni.icon.eur:before {\n  content: \"\\f153\";\n}\n\ni.icon.gbp:before {\n  content: \"\\f154\";\n}\n\ni.icon.usd:before {\n  content: \"\\f155\";\n}\n\ni.icon.inr:before {\n  content: \"\\f156\";\n}\n\ni.icon.cny:before {\n  content: \"\\f157\";\n}\n\ni.icon.rmb:before {\n  content: \"\\f157\";\n}\n\ni.icon.jpy:before {\n  content: \"\\f157\";\n}\n\ni.icon.rouble:before {\n  content: \"\\f158\";\n}\n\ni.icon.rub:before {\n  content: \"\\f158\";\n}\n\ni.icon.krw:before {\n  content: \"\\f159\";\n}\n\ni.icon.btc:before {\n  content: \"\\f15a\";\n}\n\ni.icon.gratipay:before {\n  content: \"\\f184\";\n}\n\ni.icon.zip:before {\n  content: \"\\f187\";\n}\n\ni.icon.dot.circle.outline:before {\n  content: \"\\f192\";\n}\n\ni.icon.try:before {\n  content: \"\\f195\";\n}\n\ni.icon.graduation:before {\n  content: \"\\f19d\";\n}\n\ni.icon.circle.outline:before {\n  content: \"\\f1db\";\n}\n\ni.icon.sliders:before {\n  content: \"\\f1de\";\n}\n\ni.icon.weixin:before {\n  content: \"\\f1d7\";\n}\n\ni.icon.tty:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.teletype:before {\n  content: \"\\f1e4\";\n}\n\ni.icon.binoculars:before {\n  content: \"\\f1e5\";\n}\n\ni.icon.power.cord:before {\n  content: \"\\f1e6\";\n}\n\ni.icon.wi-fi:before {\n  content: \"\\f1eb\";\n}\n\ni.icon.visa.card:before {\n  content: \"\\f1f0\";\n}\n\ni.icon.mastercard.card:before {\n  content: \"\\f1f1\";\n}\n\ni.icon.discover.card:before {\n  content: \"\\f1f2\";\n}\n\ni.icon.amex:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.american.express.card:before {\n  content: \"\\f1f3\";\n}\n\ni.icon.stripe.card:before {\n  content: \"\\f1f5\";\n}\n\ni.icon.bell.slash:before {\n  content: \"\\f1f6\";\n}\n\ni.icon.bell.slash.outline:before {\n  content: \"\\f1f7\";\n}\n\ni.icon.area.graph:before {\n  content: \"\\f1fe\";\n}\n\ni.icon.pie.graph:before {\n  content: \"\\f200\";\n}\n\ni.icon.line.graph:before {\n  content: \"\\f201\";\n}\n\ni.icon.cc:before {\n  content: \"\\f20a\";\n}\n\ni.icon.sheqel:before {\n  content: \"\\f20b\";\n}\n\ni.icon.ils:before {\n  content: \"\\f20b\";\n}\n\ni.icon.plus.cart:before {\n  content: \"\\f217\";\n}\n\ni.icon.arrow.down.cart:before {\n  content: \"\\f218\";\n}\n\ni.icon.detective:before {\n  content: \"\\f21b\";\n}\n\ni.icon.venus:before {\n  content: \"\\f221\";\n}\n\ni.icon.mars:before {\n  content: \"\\f222\";\n}\n\ni.icon.mercury:before {\n  content: \"\\f223\";\n}\n\ni.icon.intersex:before {\n  content: \"\\f224\";\n}\n\ni.icon.venus.double:before {\n  content: \"\\f226\";\n}\n\ni.icon.female.homosexual:before {\n  content: \"\\f226\";\n}\n\ni.icon.mars.double:before {\n  content: \"\\f227\";\n}\n\ni.icon.male.homosexual:before {\n  content: \"\\f227\";\n}\n\ni.icon.venus.mars:before {\n  content: \"\\f228\";\n}\n\ni.icon.mars.stroke:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.alternate:before {\n  content: \"\\f229\";\n}\n\ni.icon.mars.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.stroke.vertical:before {\n  content: \"\\f22a\";\n}\n\ni.icon.mars.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.mars.stroke.horizontal:before {\n  content: \"\\f22b\";\n}\n\ni.icon.asexual:before {\n  content: \"\\f22d\";\n}\n\ni.icon.facebook.official:before {\n  content: \"\\f230\";\n}\n\ni.icon.user.plus:before {\n  content: \"\\f234\";\n}\n\ni.icon.user.times:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.close:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.cancel:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.delete:before {\n  content: \"\\f235\";\n}\n\ni.icon.user.x:before {\n  content: \"\\f235\";\n}\n\ni.icon.bed:before {\n  content: \"\\f236\";\n}\n\ni.icon.yc:before {\n  content: \"\\f23b\";\n}\n\ni.icon.ycombinator:before {\n  content: \"\\f23b\";\n}\n\ni.icon.battery.four:before {\n  content: \"\\f240\";\n}\n\ni.icon.battery.three:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.three.quarters:before {\n  content: \"\\f241\";\n}\n\ni.icon.battery.two:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.half:before {\n  content: \"\\f242\";\n}\n\ni.icon.battery.one:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.quarter:before {\n  content: \"\\f243\";\n}\n\ni.icon.battery.zero:before {\n  content: \"\\f244\";\n}\n\ni.icon.i.cursor:before {\n  content: \"\\f246\";\n}\n\ni.icon.jcb:before {\n  content: \"\\f24b\";\n}\n\ni.icon.japan.credit.bureau.card:before {\n  content: \"\\f24b\";\n}\n\ni.icon.diners.club.card:before {\n  content: \"\\f24c\";\n}\n\ni.icon.balance:before {\n  content: \"\\f24e\";\n}\n\ni.icon.hourglass.outline:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.zero:before {\n  content: \"\\f250\";\n}\n\ni.icon.hourglass.one:before {\n  content: \"\\f251\";\n}\n\ni.icon.hourglass.two:before {\n  content: \"\\f252\";\n}\n\ni.icon.hourglass.three:before {\n  content: \"\\f253\";\n}\n\ni.icon.hourglass.four:before {\n  content: \"\\f254\";\n}\n\ni.icon.grab:before {\n  content: \"\\f255\";\n}\n\ni.icon.hand.victory:before {\n  content: \"\\f25b\";\n}\n\ni.icon.tm:before {\n  content: \"\\f25c\";\n}\n\ni.icon.r.circle:before {\n  content: \"\\f25d\";\n}\n\ni.icon.television:before {\n  content: \"\\f26c\";\n}\n\ni.icon.five.hundred.pixels:before {\n  content: \"\\f26e\";\n}\n\ni.icon.calendar.plus:before {\n  content: \"\\f271\";\n}\n\ni.icon.calendar.minus:before {\n  content: \"\\f272\";\n}\n\ni.icon.calendar.times:before {\n  content: \"\\f273\";\n}\n\ni.icon.calendar.check:before {\n  content: \"\\f274\";\n}\n\ni.icon.factory:before {\n  content: \"\\f275\";\n}\n\ni.icon.commenting:before {\n  content: \"\\f27a\";\n}\n\ni.icon.commenting.outline:before {\n  content: \"\\f27b\";\n}\n\ni.icon.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.ms.edge:before {\n  content: \"\\f282\";\n}\n\ni.icon.wordpress.beginner:before {\n  content: \"\\f297\";\n}\n\ni.icon.wordpress.forms:before {\n  content: \"\\f298\";\n}\n\ni.icon.envira:before {\n  content: \"\\f299\";\n}\n\ni.icon.question.circle.outline:before {\n  content: \"\\f29c\";\n}\n\ni.icon.assistive.listening.devices:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.als:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.ald:before {\n  content: \"\\f2a2\";\n}\n\ni.icon.asl.interpreting:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.deaf:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.american.sign.language.interpreting:before {\n  content: \"\\f2a3\";\n}\n\ni.icon.hard.of.hearing:before {\n  content: \"\\f2a4\";\n}\n\ni.icon.signing:before {\n  content: \"\\f2a7\";\n}\n\ni.icon.new.pied.piper:before {\n  content: \"\\f2ae\";\n}\n\ni.icon.theme.isle:before {\n  content: \"\\f2b2\";\n}\n\ni.icon.google.plus.official:before {\n  content: \"\\f2b3\";\n}\n\ni.icon.fa:before {\n  content: \"\\f2b4\";\n}\n\ni.icon.vcard:before {\n  content: \"\\f2bb\";\n}\n\ni.icon.vcard.outline:before {\n  content: \"\\f2bc\";\n}\n\ni.icon.drivers.license:before {\n  content: \"\\f2c2\";\n}\n\ni.icon.drivers.license.outline:before {\n  content: \"\\f2c3\";\n}\n\ni.icon.thermometer:before {\n  content: \"\\f2c7\";\n}\n\ni.icon.s15:before {\n  content: \"\\f2cd\";\n}\n\ni.icon.bath:before {\n  content: \"\\f2cd\";\n}\n\ni.icon.times.rectangle:before {\n  content: \"\\f2d3\";\n}\n\ni.icon.times.rectangle.outline:before {\n  content: \"\\f2d4\";\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: transparent;\n}\n\nimg.ui.image {\n  display: block;\n}\n\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: 0.45;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: 0.3125em;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: 0.25em;\n  display: inline-block;\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui[class*=\"left spaced\"].image {\n  margin-left: 0.5em;\n  margin-right: 0em;\n}\n\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: 1em;\n  margin-bottom: 1em;\n}\n\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: 1em;\n  margin-left: 1em;\n}\n\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: 35px;\n  height: auto;\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: 80px;\n  height: auto;\n  font-size: 0.85714286rem;\n}\n\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: 150px;\n  height: auto;\n  font-size: 0.92857143rem;\n}\n\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: 300px;\n  height: auto;\n  font-size: 1rem;\n}\n\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: 450px;\n  height: auto;\n  font-size: 1.14285714rem;\n}\n\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: 600px;\n  height: auto;\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: 800px;\n  height: auto;\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: 960px;\n  height: auto;\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -0.25rem 0rem;\n}\n\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em 0.25rem 0.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Standard\n*******************************/\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: left;\n  line-height: 1.21428571em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  padding: 0.67857143em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.input input::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.input input::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.input input:-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input:not(.disabled) input[disabled] {\n  opacity: 0.45;\n}\n\n.ui.disabled.input input,\n.ui.input:not(.disabled) input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: rgba(0, 0, 0, 0.3);\n  background: #FAFAFA;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus {\n  border-color: #85B7D9;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.8);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Error Placeholder */\n\n.ui.input.error input::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.input.error input::-moz-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.input.error input:-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n/* Focused Error Placeholder */\n\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n\n.ui.input.error input:focus::-moz-placeholder {\n  color: #da9796;\n}\n\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n      Transparent\n---------------------*/\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border-radius: 0px !important;\n}\n\n/* Transparent Icon */\n\n.ui.transparent.icon.input > i.icon {\n  width: 1.1em;\n}\n\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: 2em !important;\n}\n\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: 2em !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n\n.ui.transparent.inverted.input {\n  color: #FFFFFF;\n}\n\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n  width: 2.67142857em;\n  opacity: 0.5;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: opacity 0.3s ease;\n  transition: opacity 0.3s ease;\n}\n\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n\n.ui.icon.input input {\n  padding-right: 2.67142857em !important;\n}\n\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: -0.5em;\n}\n\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n\n.ui.icon.input > i.circular.icon {\n  top: 0.35em;\n  right: 0.5em;\n}\n\n/* Left Icon Input */\n\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: 1px;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: 0.5em;\n}\n\n.ui[class*=\"left icon\"].input > input {\n  padding-left: 2.67142857em !important;\n  padding-right: 1em !important;\n}\n\n/* Focus */\n\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n/* Adjacent Label */\n\n.ui.labeled.input > .label {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  margin: 0;\n  font-size: 1em;\n}\n\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n}\n\n/* Regular Label on Left */\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: #85B7D9;\n}\n\n/* Regular Label on Right */\n\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Corner Label */\n\n.ui.labeled.input .corner.label {\n  top: 1px;\n  right: 1px;\n  font-size: 0.64285714em;\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Spacing with corner label */\n\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: 2.5em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: 3.25em !important;\n}\n\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: 1.25em;\n}\n\n/* Left Labeled */\n\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: 2.5em !important;\n}\n\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: 3.25em !important;\n}\n\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: 1.25em;\n}\n\n/* Corner Label Position  */\n\n.ui.input > .ui.corner.label {\n  top: 1px;\n  right: 1px;\n}\n\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: 1px;\n}\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n}\n\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: 0.78571429em;\n  padding-bottom: 0.78571429em;\n  margin: 0;\n}\n\n/* Button on Right */\n\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px;\n}\n\n/* Input Focus */\n\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: #85B7D9 !important;\n}\n\n/* Button on Left */\n\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Input Focus */\n\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: #85B7D9 !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n/* Standard */\n\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: 0.78571429em;\n}\n\n.ui.small.input {\n  font-size: 0.92857143em;\n}\n\n.ui.input {\n  font-size: 1em;\n}\n\n.ui.large.input {\n  font-size: 1.14285714em;\n}\n\n.ui.big.input {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.input {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.input {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: baseline;\n  margin: 0em 0.14285714em;\n  background-color: #E8E8E8;\n  background-image: none;\n  padding: 0.5833em 0.833em;\n  color: rgba(0, 0, 0, 0.6);\n  text-transform: none;\n  font-weight: bold;\n  border: 0px solid transparent;\n  border-radius: 0.28571429rem;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label:first-child {\n  margin-left: 0em;\n}\n\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\n\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: 0.5;\n  -webkit-transition: 0.1s opacity ease;\n  transition: 0.1s opacity ease;\n}\n\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: 2.1666em !important;\n}\n\n/* Icon */\n\n.ui.label > .icon {\n  width: auto;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Detail */\n\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: bold;\n  margin-left: 1em;\n  opacity: 0.8;\n}\n\n.ui.label > .detail .icon {\n  margin: 0em 0.25em 0em 0em;\n}\n\n/* Removable label */\n\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: 0.5em;\n  font-size: 0.92857143em;\n  opacity: 0.5;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em 0.5em 0.5em 0em;\n}\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: -0.29165em;\n}\n\n/* Remove border radius on attached segment */\n\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label {\n  border-top-left-radius: 0;\n}\n\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label {\n  border-top-right-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.left.attached.label {\n  border-bottom-left-radius: 0;\n}\n\n.ui.top.attached.segment > .ui.bottom.right.attached.label {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: 2rem !important;\n}\n\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: 2rem !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n  background: #E8E8E8;\n  padding: 0.5833em 0.833em 0.5833em 0.5em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n  height: 2.1666em;\n  margin: -0.5833em 0.5em -0.5833em -0.5em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui.image.label .detail {\n  background: rgba(0, 0, 0, 0.1);\n  margin: -0.5833em -0.833em -0.5833em 0.5em;\n  padding: 0.5833em 0.833em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  -webkit-transition: none;\n  transition: none;\n}\n\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n  position: absolute;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  top: 50%;\n  right: 100%;\n  content: '';\n  background-color: inherit;\n  background-image: none;\n  width: 1.56em;\n  height: 1.56em;\n  -webkit-transition: none;\n  transition: none;\n}\n\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -0.25em;\n  margin-top: -0.25em;\n  background-color: #FFFFFF !important;\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  box-shadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n  border-radius: 500rem;\n}\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n  border-color: #E8E8E8;\n  width: 4em;\n  height: 4em;\n  z-index: 1;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n/* Icon Label */\n\n.ui.corner.label {\n  background-color: transparent !important;\n}\n\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n  border-top: 0em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 4em solid transparent;\n  border-left: 0em solid transparent;\n  border-right-color: inherit;\n  -webkit-transition: border-color 0.1s ease;\n  transition: border-color 0.1s ease;\n}\n\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: 0.64285714em;\n  left: 0.78571429em;\n  font-size: 1.14285714em;\n  margin: 0em;\n}\n\n/* Left Corner */\n\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n\n.ui.left.corner.label:after {\n  border-top: 4em solid transparent;\n  border-right: 4em solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n  border-top-color: inherit;\n}\n\n.ui.left.corner.label .icon {\n  left: -0.78571429em;\n}\n\n/* Segment */\n\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n  border-color: rgba(0, 0, 0, 0.15);\n}\n\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n  border-style: solid;\n  border-width: 0em 1.2em 1.2em 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n  width: 0em;\n  height: 0em;\n}\n\n/* Positioning */\n\n.ui.ribbon.label {\n  left: calc( -1rem  -  1.2em );\n  margin-right: -1.2em;\n  padding-left: calc( 1rem  +  1.2em );\n  padding-right: 1.2em;\n}\n\n.ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  1rem  +  1.2em );\n  padding-left: 1.2em;\n  padding-right: calc( 1rem  +  1.2em );\n}\n\n/* Right Ribbon */\n\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  -webkit-transform: translateX(-100%);\n  transform: translateX(-100%);\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n  border-style: solid;\n  border-width: 1.2em 1.2em 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: 1rem;\n}\n\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: calc( 0.05rem  -  1.2em );\n}\n\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  -0.05rem  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/* Inside Table */\n\n.ui.table td > .ui.ribbon.label {\n  left: calc( -0.78571429em  -  1.2em );\n}\n\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: calc(100% +  0.78571429em  +  1.2em );\n  padding-left: 0.833em;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n  padding: 0.75em 1em;\n  border-radius: 0.21428571rem 0.21428571rem 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em 0.21428571rem 0.21428571rem;\n}\n\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: 0.21428571rem 0em 0.28571429rem 0em;\n}\n\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em 0.21428571rem 0em 0.28571429rem;\n}\n\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0.28571429rem 0em 0.21428571rem;\n}\n\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: 0.28571429rem 0em 0.21428571rem 0em;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: #E0E0E0;\n  border-color: #E0E0E0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: #D0D0D0;\n  border-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.active.label:before {\n  background-color: #D0D0D0;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: #C8C8C8;\n  border-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: #C8C8C8;\n  background-image: none;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: #DB2828 !important;\n  border-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.red.labels .label:hover,\na.ui.red.label:hover {\n  background-color: #d01919 !important;\n  border-color: #d01919 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.red.ribbon.label {\n  border-color: #b21e1e !important;\n}\n\n/* Basic */\n\n.ui.basic.red.label {\n  background-color: #FFFFFF !important;\n  color: #DB2828 !important;\n  border-color: #DB2828 !important;\n}\n\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: #FFFFFF !important;\n  color: #d01919 !important;\n  border-color: #d01919 !important;\n}\n\n/*--- Orange ---*/\n\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: #F2711C !important;\n  border-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover {\n  background-color: #f26202 !important;\n  border-color: #f26202 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.orange.ribbon.label {\n  border-color: #cf590c !important;\n}\n\n/* Basic */\n\n.ui.basic.orange.label {\n  background-color: #FFFFFF !important;\n  color: #F2711C !important;\n  border-color: #F2711C !important;\n}\n\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: #FFFFFF !important;\n  color: #f26202 !important;\n  border-color: #f26202 !important;\n}\n\n/*--- Yellow ---*/\n\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover {\n  background-color: #eaae00 !important;\n  border-color: #eaae00 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.yellow.ribbon.label {\n  border-color: #cd9903 !important;\n}\n\n/* Basic */\n\n.ui.basic.yellow.label {\n  background-color: #FFFFFF !important;\n  color: #FBBD08 !important;\n  border-color: #FBBD08 !important;\n}\n\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: #FFFFFF !important;\n  color: #eaae00 !important;\n  border-color: #eaae00 !important;\n}\n\n/*--- Olive ---*/\n\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover {\n  background-color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.olive.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n\n.ui.basic.olive.label {\n  background-color: #FFFFFF !important;\n  color: #B5CC18 !important;\n  border-color: #B5CC18 !important;\n}\n\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: #FFFFFF !important;\n  color: #a7bd0d !important;\n  border-color: #a7bd0d !important;\n}\n\n/*--- Green ---*/\n\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: #21BA45 !important;\n  border-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.green.labels .label:hover,\na.ui.green.label:hover {\n  background-color: #16ab39 !important;\n  border-color: #16ab39 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.green.ribbon.label {\n  border-color: #198f35 !important;\n}\n\n/* Basic */\n\n.ui.basic.green.label {\n  background-color: #FFFFFF !important;\n  color: #21BA45 !important;\n  border-color: #21BA45 !important;\n}\n\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: #FFFFFF !important;\n  color: #16ab39 !important;\n  border-color: #16ab39 !important;\n}\n\n/*--- Teal ---*/\n\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: #00B5AD !important;\n  border-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover {\n  background-color: #009c95 !important;\n  border-color: #009c95 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.teal.ribbon.label {\n  border-color: #00827c !important;\n}\n\n/* Basic */\n\n.ui.basic.teal.label {\n  background-color: #FFFFFF !important;\n  color: #00B5AD !important;\n  border-color: #00B5AD !important;\n}\n\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: #FFFFFF !important;\n  color: #009c95 !important;\n  border-color: #009c95 !important;\n}\n\n/*--- Blue ---*/\n\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: #2185D0 !important;\n  border-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover {\n  background-color: #1678c2 !important;\n  border-color: #1678c2 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.blue.ribbon.label {\n  border-color: #1a69a4 !important;\n}\n\n/* Basic */\n\n.ui.basic.blue.label {\n  background-color: #FFFFFF !important;\n  color: #2185D0 !important;\n  border-color: #2185D0 !important;\n}\n\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: #FFFFFF !important;\n  color: #1678c2 !important;\n  border-color: #1678c2 !important;\n}\n\n/*--- Violet ---*/\n\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: #6435C9 !important;\n  border-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover {\n  background-color: #5829bb !important;\n  border-color: #5829bb !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.violet.ribbon.label {\n  border-color: #502aa1 !important;\n}\n\n/* Basic */\n\n.ui.basic.violet.label {\n  background-color: #FFFFFF !important;\n  color: #6435C9 !important;\n  border-color: #6435C9 !important;\n}\n\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: #FFFFFF !important;\n  color: #5829bb !important;\n  border-color: #5829bb !important;\n}\n\n/*--- Purple ---*/\n\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: #A333C8 !important;\n  border-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover {\n  background-color: #9627ba !important;\n  border-color: #9627ba !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.purple.ribbon.label {\n  border-color: #82299f !important;\n}\n\n/* Basic */\n\n.ui.basic.purple.label {\n  background-color: #FFFFFF !important;\n  color: #A333C8 !important;\n  border-color: #A333C8 !important;\n}\n\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: #FFFFFF !important;\n  color: #9627ba !important;\n  border-color: #9627ba !important;\n}\n\n/*--- Pink ---*/\n\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: #E03997 !important;\n  border-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover {\n  background-color: #e61a8d !important;\n  border-color: #e61a8d !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.pink.ribbon.label {\n  border-color: #c71f7e !important;\n}\n\n/* Basic */\n\n.ui.basic.pink.label {\n  background-color: #FFFFFF !important;\n  color: #E03997 !important;\n  border-color: #E03997 !important;\n}\n\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: #FFFFFF !important;\n  color: #e61a8d !important;\n  border-color: #e61a8d !important;\n}\n\n/*--- Brown ---*/\n\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: #A5673F !important;\n  border-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover {\n  background-color: #975b33 !important;\n  border-color: #975b33 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.brown.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.brown.label {\n  background-color: #FFFFFF !important;\n  color: #A5673F !important;\n  border-color: #A5673F !important;\n}\n\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: #FFFFFF !important;\n  color: #975b33 !important;\n  border-color: #975b33 !important;\n}\n\n/*--- Grey ---*/\n\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: #767676 !important;\n  border-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover {\n  background-color: #838383 !important;\n  border-color: #838383 !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.grey.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.grey.label {\n  background-color: #FFFFFF !important;\n  color: #767676 !important;\n  border-color: #767676 !important;\n}\n\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: #FFFFFF !important;\n  color: #838383 !important;\n  border-color: #838383 !important;\n}\n\n/*--- Black ---*/\n\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/* Link */\n\n.ui.black.labels .label:hover,\na.ui.black.label:hover {\n  background-color: #27292a !important;\n  border-color: #27292a !important;\n  color: #FFFFFF !important;\n}\n\n/* Corner */\n\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n\n/* Ribbon */\n\n.ui.black.ribbon.label {\n  border-color: #805031 !important;\n}\n\n/* Basic */\n\n.ui.basic.black.label {\n  background-color: #FFFFFF !important;\n  color: #1B1C1D !important;\n  border-color: #1B1C1D !important;\n}\n\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: #FFFFFF !important;\n  color: #27292a !important;\n  border-color: #27292a !important;\n}\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: none #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Link */\n\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: none #FFFFFF;\n  color: #1e70bf;\n  -webkit-box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  box-shadow: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Pointing */\n\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  -webkit-box-sizing: border-box;\n  box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em 0.5em 0em 0em;\n  padding: 0.4em 0.833em;\n  min-width: 3em;\n  text-align: center;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: 2em;\n  min-height: 2em;\n  padding: 0.5em !important;\n  line-height: 1em;\n  text-align: center;\n  border-radius: 500rem;\n}\n\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: 0.5em;\n  height: 0.5em;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n\n.ui.attached.pointing.label {\n  position: absolute;\n}\n\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: inherit;\n}\n\n/* Arrow */\n\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  background-image: none;\n  z-index: 2;\n  width: 0.6666em;\n  height: 0.6666em;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n/*--- Above ---*/\n\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: 1em;\n}\n\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: 1px 0px 0px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n\n/*--- Below ---*/\n\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: 1em;\n}\n\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px 1px 1px 0px;\n  top: auto;\n  right: auto;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n\n/*--- Left ---*/\n\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: 0.6666em;\n}\n\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px 1px 1px;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*--- Right ---*/\n\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: 0.6666em;\n}\n\n.ui[class*=\"right pointing\"].label:before {\n  border-width: 1px 1px 0px 0px;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: -1px;\n}\n\n/*--- Below ---*/\n\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: 1px;\n}\n\n/*--- Left ---*/\n\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: -1px;\n}\n\n/*--- Right ---*/\n\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: -1px;\n}\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: 100;\n  top: -1em;\n  left: 100%;\n  margin: 0em 0em 0em -1.5em !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: 0.64285714rem;\n}\n\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: 0.71428571rem;\n}\n\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: 0.78571429rem;\n}\n\n.ui.labels .label,\n.ui.label {\n  font-size: 0.85714286rem;\n}\n\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: 1rem;\n}\n\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: none;\n  margin: 1em 0em;\n  padding: 0em 0em;\n}\n\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* List Item */\n\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\n\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: 0.75em 0em 0.25em 0.5em;\n}\n\n/* Child Item */\n\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: 0.14285714em 0em;\n  line-height: inherit;\n}\n\n/* Icon */\n\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: 0.07142857em;\n  padding-right: 0.28571429em;\n  vertical-align: top;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: top;\n}\n\n/* Image */\n\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: 0.5em;\n}\n\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: 1.14285714em;\n}\n\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em 0.5em;\n  vertical-align: top;\n}\n\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Description */\n\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: rgba(0, 0, 0, 0.7);\n}\n\n/* Child Link */\n\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: #4183C4;\n}\n\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linked Item Icons */\n\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Header Link */\n\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: #4183C4 !important;\n}\n\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: #1e70bf !important;\n}\n\n/* Floated Content */\n\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n  list-style-type: none;\n  list-style-position: outside;\n  padding: 0.21428571em 0em;\n  line-height: 1.14285714em;\n}\n\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: 1em;\n  font-size: 1rem;\n}\n\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: middle;\n}\n\n/* Padding on all elements */\n\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Horizontal List */\n\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em 0.25em 0em 0em;\n}\n\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3) !important;\n}\n\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: rgba(225, 225, 225, 0.3) !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Item Link */\n\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: #1e70bf;\n}\n\n/* Linking Content */\n\n.ui.inverted.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n.ui.inverted.list .item a:not(.ui):hover {\n  color: #1e70bf !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-transition: 0.1s color ease;\n  transition: 0.1s color ease;\n}\n\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: #ffffff;\n}\n\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: #ffffff;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: transparent;\n  padding: 0.5em 0.5em;\n  margin: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  border-radius: 0.5em;\n  -webkit-transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n  transition: 0.1s color ease, 0.1s padding-left ease, 0.1s background-color ease;\n}\n\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.selection.list.list > .item:hover,\n.ui.selection.list > .item:hover {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.9);\n}\n\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.5);\n}\n\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/* Celled / Divided Selection List */\n\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  -webkit-transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n  transition: 0.25s color ease 0.1s, 0.25s padding-left ease 0.1s, 0.25s background-color ease 0.1s;\n}\n\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: 1em;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: 1.25rem;\n}\n\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: -1.25rem;\n  content: '•';\n  opacity: 1;\n  color: inherit;\n  vertical-align: top;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: rgba(0, 0, 0, 0.87);\n}\n\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: 1.25rem;\n}\n\n/* Horizontal Bulleted */\n\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: 1.75rem;\n}\n\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\n\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: rgba(0, 0, 0, 0.87);\n}\n\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: 1.25rem;\n  list-style-type: none;\n}\n\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\n\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  pointer-events: none;\n  margin-left: -1.25rem;\n  counter-increment: ordered;\n  content: counters(ordered, \".\") \" \";\n  text-align: right;\n  color: rgba(0, 0, 0, 0.87);\n  vertical-align: middle;\n  opacity: 0.8;\n}\n\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: rgba(255, 255, 255, 0.7);\n}\n\n/* Value */\n\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\n\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\n\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: 1em;\n}\n\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: -2em;\n}\n\n/* Horizontal Ordered */\n\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\n\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.divided.list .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .item .list > .item {\n  border-top: none;\n}\n\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: 1px;\n}\n\n/* Divided bulleted */\n\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: 1.25rem;\n}\n\n/* Divided Ordered */\n\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: 1em;\n}\n\n/* Divided Selection */\n\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: 0.5em;\n}\n\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: 0.5em;\n}\n\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n\n/* Inverted */\n\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.celled.list > .item:last-child {\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Padding on all elements */\n\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: 0.21428571em;\n  padding-bottom: 0.21428571em;\n}\n\n/* Sub Menu */\n\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.bulleted.list .item .list {\n  margin-left: -1.25rem;\n  margin-right: -1.25rem;\n  padding-bottom: 0.21428571em;\n}\n\n/* Celled Ordered */\n\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: 1.25rem;\n}\n\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: 0.21428571em;\n}\n\n.ui.celled.ordered.list .list > .item {\n  padding-left: 1em;\n}\n\n/* Celled Horizontal */\n\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n  line-height: 0.6;\n}\n\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Inverted */\n\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: 1px solid rgba(255, 255, 255, 0.1);\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.42857143em;\n}\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.42857143em;\n}\n\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: 1rem;\n}\n\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: 1rem;\n}\n\n/* Very Relaxed */\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: 0.85714286em;\n}\n\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: 0.85714286em;\n}\n\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: 1.5rem;\n}\n\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: 1.5rem;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: 0.78571429em;\n}\n\n.ui.tiny.list {\n  font-size: 0.85714286em;\n}\n\n.ui.small.list {\n  font-size: 0.92857143em;\n}\n\n.ui.list {\n  font-size: 1em;\n}\n\n.ui.large.list {\n  font-size: 1.14285714em;\n}\n\n.ui.big.list {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.list {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.list {\n  font-size: 1.71428571em;\n}\n\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: 0.92857143rem;\n}\n\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: 1rem;\n}\n\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Loader\n*******************************/\n\n/* Standard Size */\n\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n/* Active Shape */\n\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n  -webkit-animation: loader 0.6s linear;\n  animation: loader 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n\n@-webkit-keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes loader {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: 1rem;\n  height: 1rem;\n  margin: 0em 0em 0em -0.5rem;\n}\n\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  margin: 0em 0em 0em -0.57142857rem;\n}\n\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  margin: 0em 0em 0em -0.85714286rem;\n}\n\n.ui.loader:before,\n.ui.loader:after {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  margin: 0em 0em 0em -1.14285714rem;\n}\n\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  margin: 0em 0em 0em -1.71428571rem;\n}\n\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  margin: 0em 0em 0em -1.85714286rem;\n}\n\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  margin: 0em 0em 0em -2.07142857rem;\n}\n\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  margin: 0em 0em 0em -2.28571429rem;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n/* Show inside active dimmer */\n\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n\n.ui.dimmer .ui.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.dimmer .ui.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.dimmer .ui.loader:after {\n  border-color: #FFFFFF transparent transparent;\n}\n\n/* White Dimmer (Inverted) */\n\n.ui.inverted.dimmer .ui.loader {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: rgba(0, 0, 0, 0.1);\n}\n\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: #767676 transparent transparent;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  -webkit-animation-direction: reverse;\n  animation-direction: reverse;\n  -webkit-animation-duration: 1.2s;\n  animation-duration: 1.2s;\n}\n\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*-------------------\n        Sizes\n--------------------*/\n\n/* Loader */\n\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: 1rem;\n  height: 1rem;\n  font-size: 0.78571429em;\n}\n\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: 1.14285714rem;\n  height: 1.14285714rem;\n  font-size: 0.85714286em;\n}\n\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: 1.71428571rem;\n  height: 1.71428571rem;\n  font-size: 0.92857143em;\n}\n\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: 2.28571429rem;\n  height: 2.28571429rem;\n  font-size: 1em;\n}\n\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: 3.42857143rem;\n  height: 3.42857143rem;\n  font-size: 1.14285714em;\n}\n\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: 3.71428571rem;\n  height: 3.71428571rem;\n  font-size: 1.28571429em;\n}\n\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: 4.14285714rem;\n  height: 4.14285714rem;\n  font-size: 1.42857143em;\n}\n\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: 4.57142857rem;\n  height: 4.57142857rem;\n  font-size: 1.71428571em;\n}\n\n/* Text Loader */\n\n.ui.mini.text.loader {\n  min-width: 1rem;\n  padding-top: 1.78571429rem;\n}\n\n.ui.tiny.text.loader {\n  min-width: 1.14285714rem;\n  padding-top: 1.92857143rem;\n}\n\n.ui.small.text.loader {\n  min-width: 1.71428571rem;\n  padding-top: 2.5rem;\n}\n\n.ui.text.loader {\n  min-width: 2.28571429rem;\n  padding-top: 3.07142857rem;\n}\n\n.ui.large.text.loader {\n  min-width: 3.42857143rem;\n  padding-top: 4.21428571rem;\n}\n\n.ui.big.text.loader {\n  min-width: 3.71428571rem;\n  padding-top: 4.5rem;\n}\n\n.ui.huge.text.loader {\n  min-width: 4.14285714rem;\n  padding-top: 4.92857143rem;\n}\n\n.ui.massive.text.loader {\n  min-width: 4.57142857rem;\n  padding-top: 5.35714286rem;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.loader:before {\n  border-color: rgba(255, 255, 255, 0.15);\n}\n\n.ui.inverted.loader:after {\n  border-top-color: #FFFFFF;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: middle;\n  margin: 0em;\n  left: 0em;\n  top: 0em;\n  -webkit-transform: none;\n  transform: none;\n}\n\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: 300px;\n  height: 100%;\n}\n\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em 2rem;\n  margin: 0em 0em 0em 2rem;\n}\n\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em 2rem 0em 0em;\n  margin: 0em 2rem 0em 0em;\n}\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: 302.5px;\n}\n\n.ui.left.dividing.rail {\n  padding: 0em 2.5rem 0em 0em;\n  margin: 0em 2.5rem 0em 0em;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.right.dividing.rail {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  padding: 0em 0em 0em 2.5rem;\n  margin: 0em 0em 0em 2.5rem;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: calc( 300px  +  1em );\n}\n\n.ui.close.left.rail {\n  padding: 0em 1em 0em 0em;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.close.right.rail {\n  padding: 0em 0em 0em 1em;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.very.close.rail {\n  width: calc( 300px  +  0.5em );\n}\n\n.ui.very.close.left.rail {\n  padding: 0em 0.5em 0em 0em;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em 0.5em;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.rail {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.rail {\n  font-size: 0.92857143rem;\n}\n\n.ui.rail {\n  font-size: 1rem;\n}\n\n.ui.large.rail {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.rail {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.rail {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.rail {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: 3 !important;\n  -webkit-transition: all 0.5s ease 0.1s;\n  transition: all 0.5s ease 0.1s;\n}\n\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: 2 !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: 4 !important;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s ease 0.1s;\n  transition: -webkit-transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s;\n  transition: transform 0.5s ease 0.1s, -webkit-transform 0.5s ease 0.1s;\n}\n\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .visible.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .hidden.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  -webkit-transform: translateX(0%) !important;\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.up.reveal > .hidden.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n.ui.slide.down.reveal > .hidden.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  -webkit-transform: translateY(0%) !important;\n  transform: translateY(0%) !important;\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n  margin: 0em;\n  -webkit-transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n  transition: transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s, -webkit-transform 0.5s cubic-bezier(0.175, 0.885, 0.32, 1) 0.1s;\n}\n\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  -webkit-transform: translateX(-100%) !important;\n  transform: translateX(-100%) !important;\n}\n\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  -webkit-transform: translateX(100%) !important;\n  transform: translateX(100%) !important;\n}\n\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  -webkit-transform: translateY(-100%) !important;\n  transform: translateY(-100%) !important;\n}\n\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  -webkit-transform: translateY(100%) !important;\n  transform: translateY(100%) !important;\n}\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  -webkit-transition-duration: 0.5s;\n  transition-duration: 0.5s;\n  -webkit-transform: rotate(0deg);\n  transform: rotate(0deg);\n}\n\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  -webkit-transform-origin: bottom right;\n  transform-origin: bottom right;\n}\n\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  -webkit-transform: rotate(110deg);\n  transform: rotate(110deg);\n}\n\n.ui.rotate.left.reveal > .visible.content {\n  -webkit-transform-origin: bottom left;\n  transform-origin: bottom left;\n}\n\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  -webkit-transform: rotate(-110deg);\n  transform: rotate(-110deg);\n}\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  -webkit-transform: none !important;\n  transform: none !important;\n}\n\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  -webkit-transition-delay: 0s !important;\n  transition-delay: 0s !important;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: 1rem !important;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  padding: 1em 1em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n/* Vertical */\n\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Header */\n\n.ui.inverted.segment > .ui.header {\n  color: #FFFFFF;\n}\n\n/* Label */\n\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: 2em;\n  padding-bottom: 2em;\n}\n\n.ui.grid.segment {\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n}\n\n/* Table */\n\n.ui.basic.table.segment {\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui[class*=\"very basic\"].table.segment {\n  padding: 1em 1em;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: 3em 0em;\n  -webkit-box-shadow: '';\n  box-shadow: '';\n  z-index: auto;\n}\n\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: #FFFFFF;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: '';\n  box-shadow: '';\n}\n\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  -webkit-transform: rotate(-1.2deg);\n  transform: rotate(-1.2deg);\n  top: 0;\n  z-index: -2;\n}\n\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  -webkit-transform: rotate(1.2deg);\n  transform: rotate(1.2deg);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: 3em;\n  margin-bottom: 0em;\n}\n\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: 3em;\n}\n\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: 1.4em;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -3px;\n  left: 0%;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: rgba(0, 0, 0, 0.03);\n  width: 100%;\n  height: 6px;\n  visibility: visible;\n}\n\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: rgba(0, 0, 0, 0.03);\n  border-top: 1px solid rgba(34, 36, 38, 0.35);\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very padded\"].segment {\n  padding: 3em;\n}\n\n/* Padded vertical */\n\n.ui.padded.segment.vertical.segment,\n.ui[class*=\"very padded\"].vertical.segment {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n\n.ui.compact.segments {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: 2em;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n            Groups\n*******************************/\n\n/* Group */\n\n.ui.segments {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  position: relative;\n  margin: 1rem 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n}\n\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n/* Nested Segment */\n\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em;\n  width: auto;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.segments:not(.horizontal) > .segment:first-child {\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: 0px;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Only */\n\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Nested Group */\n\n.ui.segments > .ui.segments {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 1rem 1rem;\n}\n\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n\n.ui.horizontal.segments {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  margin: 1rem 0em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Nested Horizontal Group */\n\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Horizontal Segment */\n\n.ui.horizontal.segments > .segment {\n  -webkit-box-flex: 1;\n  flex: 1 1 auto;\n  -ms-flex: 1 1 0px;\n  /* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* Border Fixes */\n\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: 0.45;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  -webkit-transition: all 0s linear;\n  transition: all 0s linear;\n}\n\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  border-radius: 0.28571429rem;\n  z-index: 100;\n}\n\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: segment-spin 0.6s linear;\n  animation: segment-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes segment-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: none transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: none;\n  border-radius: 0px;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.segment:not(.inverted) {\n  border-top: 2px solid #DB2828 !important;\n}\n\n.ui.inverted.red.segment {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\n.ui.orange.segment:not(.inverted) {\n  border-top: 2px solid #F2711C !important;\n}\n\n.ui.inverted.orange.segment {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\n.ui.yellow.segment:not(.inverted) {\n  border-top: 2px solid #FBBD08 !important;\n}\n\n.ui.inverted.yellow.segment {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\n.ui.olive.segment:not(.inverted) {\n  border-top: 2px solid #B5CC18 !important;\n}\n\n.ui.inverted.olive.segment {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\n.ui.green.segment:not(.inverted) {\n  border-top: 2px solid #21BA45 !important;\n}\n\n.ui.inverted.green.segment {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\n.ui.teal.segment:not(.inverted) {\n  border-top: 2px solid #00B5AD !important;\n}\n\n.ui.inverted.teal.segment {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\n.ui.blue.segment:not(.inverted) {\n  border-top: 2px solid #2185D0 !important;\n}\n\n.ui.inverted.blue.segment {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\n.ui.violet.segment:not(.inverted) {\n  border-top: 2px solid #6435C9 !important;\n}\n\n.ui.inverted.violet.segment {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\n.ui.purple.segment:not(.inverted) {\n  border-top: 2px solid #A333C8 !important;\n}\n\n.ui.inverted.purple.segment {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\n.ui.pink.segment:not(.inverted) {\n  border-top: 2px solid #E03997 !important;\n}\n\n.ui.inverted.pink.segment {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\n.ui.brown.segment:not(.inverted) {\n  border-top: 2px solid #A5673F !important;\n}\n\n.ui.inverted.brown.segment {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\n.ui.grey.segment:not(.inverted) {\n  border-top: 2px solid #767676 !important;\n}\n\n.ui.inverted.grey.segment {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\n.ui.black.segment:not(.inverted) {\n  border-top: 2px solid #1B1C1D !important;\n}\n\n.ui.inverted.black.segment {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: 1em;\n}\n\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: 1em;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Nested */\n\n.ui.inverted.segment .segment {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.segment .inverted.segment {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Attached */\n\n.ui.inverted.attached.segment {\n  border-color: #555555;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n/* Secondary */\n\n.ui.secondary.segment {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.secondary.inverted.segment {\n  background: #4c4f52 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.2)), to(rgba(255, 255, 255, 0.2)));\n  background: #4c4f52 -webkit-linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  background: #4c4f52 linear-gradient(rgba(255, 255, 255, 0.2) 0%, rgba(255, 255, 255, 0.2) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/* Tertiary */\n\n.ui.tertiary.segment {\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.tertiary.inverted.segment {\n  background: #717579 -webkit-gradient(linear, left top, left bottom, from(rgba(255, 255, 255, 0.35)), to(rgba(255, 255, 255, 0.35)));\n  background: #717579 -webkit-linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  background: #717579 linear-gradient(rgba(255, 255, 255, 0.35) 0%, rgba(255, 255, 255, 0.35) 100%);\n  color: rgba(255, 255, 255, 0.8);\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: 0.92857143rem;\n}\n\n.ui.segments .segment,\n.ui.segment {\n  font-size: 1rem;\n}\n\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  margin: 1em 0em;\n  background: '';\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  line-height: 1.14285714em;\n  border-radius: 0.28571429rem;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/* First Steps */\n\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  vertical-align: middle;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n  margin: 0em 0em;\n  padding: 1.14285714em 2em;\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0em;\n  border: none;\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/* Arrow */\n\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: 50%;\n  right: 0%;\n  border: medium none;\n  background-color: #FFFFFF;\n  width: 1.14285714em;\n  height: 1.14285714em;\n  border-style: solid;\n  border-color: rgba(34, 36, 38, 0.15);\n  border-width: 0px 1px 1px 0px;\n  -webkit-transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, opacity 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-transform: translateY(-50%) translateX(50%) rotate(-45deg);\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n\n.ui.steps .step:first-child {\n  padding-left: 2em;\n  border-radius: 0.28571429rem 0em 0em 0.28571429rem;\n}\n\n/* Last Step */\n\n.ui.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n\n.ui.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Title */\n\n.ui.steps .step .title {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  font-weight: bold;\n}\n\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n\n.ui.steps .step .description {\n  font-weight: normal;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.steps .step > .description {\n  width: 100%;\n}\n\n.ui.steps .step .title ~ .description {\n  margin-top: 0.25em;\n}\n\n/* Icon */\n\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: 2.5em;\n  margin: 0em 1rem 0em 0em;\n}\n\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n.ui.steps .step > .icon ~ .content {\n  -webkit-box-flex: 1 0 auto;\n  -ms-flex-positive: 1 0 auto;\n  flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  -ms-flex-item-align: middle;\n  align-self: middle;\n  margin-right: 1rem;\n  font-size: 2.5em;\n  counter-increment: ordered;\n  font-family: inherit;\n  font-weight: bold;\n}\n\n.ui.ordered.steps .step > * {\n  display: block;\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  overflow: visible;\n}\n\n.ui.vertical.steps .step {\n  -webkit-box-pack: start;\n  -ms-flex-pack: start;\n  justify-content: flex-start;\n  border-radius: 0em;\n  padding: 1.14285714em 2em;\n  border-right: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.vertical.steps .step:first-child {\n  padding: 1.14285714em 2em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.steps .step:only-child {\n  border-radius: 0.28571429rem;\n}\n\n/* Arrow */\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .step:after {\n  top: 50%;\n  right: 0%;\n  border-width: 0px 1px 1px 0px;\n}\n\n.ui.vertical.steps .step:after {\n  display: none;\n}\n\n.ui.vertical.steps .active.step:after {\n  display: block;\n}\n\n.ui.vertical.steps .step:last-child:after {\n  display: none;\n}\n\n.ui.vertical.steps .active.step:last-child:after {\n  display: block;\n}\n\n/*---------------\n    Responsive\n----------------*/\n\n/* Mobile (Default) */\n\n@media only screen and (max-width: 767px) {\n  .ui.steps:not(.unstackable) {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.steps:not(.unstackable) .step {\n    width: 100% !important;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui.steps:not(.unstackable) .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui.steps:not(.unstackable) .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui.steps:not(.unstackable) .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui.steps:not(.unstackable) .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui.steps:not(.unstackable) .step > .icon,\n  .ui.ordered.steps:not(.unstackable) .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Link Hover */\n\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: #F9FAFB;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Link Down */\n\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: #F3F4F5;\n  color: rgba(0, 0, 0, 0.9);\n}\n\n/* Active */\n\n.ui.steps .step.active {\n  cursor: auto;\n  background: #F3F4F5;\n}\n\n.ui.steps .step.active:after {\n  background: #F3F4F5;\n}\n\n.ui.steps .step.active .title {\n  color: #4183C4;\n}\n\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Active Arrow */\n\n.ui.steps .step:after {\n  display: block;\n}\n\n.ui.steps .active.step:after {\n  display: block;\n}\n\n.ui.steps .step:last-child:after {\n  display: none;\n}\n\n.ui.steps .active.step:last-child:after {\n  display: none;\n}\n\n/* Active Hover */\n\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: #DCDDDE;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Completed */\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: #21BA45;\n}\n\n/* Disabled */\n\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: #FFFFFF;\n  pointer-events: none;\n}\n\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.steps .disabled.step:after {\n  background: #FFFFFF;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n   Stackable\n---------------*/\n\n/* Tablet Or Below */\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].steps {\n    display: -webkit-inline-box;\n    display: -ms-inline-flexbox;\n    display: inline-flex;\n    overflow: visible;\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  /* Steps */\n\n  .ui[class*=\"tablet stackable\"].steps .step {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    border-radius: 0em;\n    padding: 1.14285714em 2em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:first-child {\n    padding: 1.14285714em 2em;\n    border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].steps .step:last-child {\n    border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  }\n\n  /* Arrow */\n\n  .ui[class*=\"tablet stackable\"].steps .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n\n  .ui[class*=\"tablet stackable\"].steps .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n\n  .ui[class*=\"tablet stackable\"].steps .step > .icon,\n  .ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n    margin: 0em 0em 1rem 0em;\n  }\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n/* Fluid */\n\n.ui.fluid.steps {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Top */\n\n.ui.attached.steps {\n  width: calc(100% +  2px ) !important;\n  margin: 0em -1px 0;\n  max-width: calc(100% +  2px );\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.attached.steps .step:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.attached.steps .step:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n/* Bottom */\n\n.ui.bottom.attached.steps {\n  margin: 0 -1px 0em;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  -ms-flex-wrap: nowrap;\n  flex-wrap: nowrap;\n}\n\n.ui.one.steps > .step {\n  width: 100%;\n}\n\n.ui.two.steps > .step {\n  width: 50%;\n}\n\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n\n.ui.four.steps > .step {\n  width: 25%;\n}\n\n.ui.five.steps > .step {\n  width: 20%;\n}\n\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: 0.92857143rem;\n}\n\n.ui.steps .step,\n.ui.step {\n  font-size: 1rem;\n}\n\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src: url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff');\n}\n\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800';\n  /* '' */\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: inline-block;\n  margin: 0em 0em;\n  vertical-align: middle;\n}\n\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n          Content\n*******************************/\n\n/* Divider */\n\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: 0.7;\n  margin: 0em 0.21428571rem 0em;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n  vertical-align: baseline;\n}\n\n/* Link */\n\n.ui.breadcrumb a {\n  color: #4183C4;\n}\n\n.ui.breadcrumb a:hover {\n  color: #1e70bf;\n}\n\n/* Icon Divider */\n\n.ui.breadcrumb .icon.divider {\n  font-size: 0.85714286em;\n  vertical-align: baseline;\n}\n\n/* Section */\n\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: 0em;\n  padding: 0em;\n}\n\n/* Loose Coupling */\n\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: 0.78571429em 1em;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: bold;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.breadcrumb {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.breadcrumb {\n  font-size: 0.92857143rem;\n}\n\n.ui.breadcrumb {\n  font-size: 1rem;\n}\n\n.ui.large.breadcrumb {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.breadcrumb {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.breadcrumb {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.breadcrumb {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Elements\n*******************************/\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: 1em 0em;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: 100%;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: 1.21428571em;\n}\n\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/* Text Area */\n\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: 0.78571429em 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  outline: none;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n  font-size: 1em;\n  line-height: 1.2857;\n  resize: vertical;\n}\n\n.ui.form textarea:not([rows]) {\n  height: 12em;\n  min-height: 8em;\n  max-height: 24em;\n}\n\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: top;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  padding: 0.62em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease, border-color 0.1s ease;\n  transition: color 0.1s ease, border-color 0.1s ease;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n/* Block */\n\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n/* Block */\n\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  width: 0px;\n}\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: #FFFFFF !important;\n  border: 1px solid #E0B4B4 !important;\n  color: #9F3A38 !important;\n}\n\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: -0.25em 0em -0.5em 0.5em;\n}\n\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px 1px 1px;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #E5DFA1 !important;\n}\n\n/* Focus */\n\n.ui.form .field.field input:-webkit-autofill:focus {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  box-shadow: 0px 0px 0px 100px #FFFFF0 inset !important;\n  border-color: #D5C315 !important;\n}\n\n/* Error */\n\n.ui.form .error.error input:-webkit-autofill {\n  -webkit-box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  box-shadow: 0px 0px 0px 100px #FFFAF0 inset !important;\n  border-color: #E0B4B4 !important;\n}\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.form ::-webkit-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form :-ms-input-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form ::-moz-placeholder {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.form :focus::-webkit-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.form :focus:-ms-input-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n.ui.form :focus::-moz-placeholder {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/* Error Placeholder */\n\n.ui.form .error ::-webkit-input-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.form .error :-ms-input-placeholder {\n  color: #e7bdbc !important;\n}\n\n.ui.form .error ::-moz-placeholder {\n  color: #e7bdbc;\n}\n\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: #da9796;\n}\n\n.ui.form .error :focus:-ms-input-placeholder {\n  color: #da9796 !important;\n}\n\n.ui.form .error :focus::-moz-placeholder {\n  color: #da9796;\n}\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n}\n\n.ui.form textarea:focus {\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #85B7D9;\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  box-shadow: 0px 0em 0em 0em rgba(34, 36, 38, 0.35) inset;\n  -webkit-appearance: none;\n}\n\n/*--------------------\n        Success\n---------------------*/\n\n/* On Form */\n\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.success .icon.success.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n/* On Form */\n\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n/* On Form */\n\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n\n.ui.form.error .icon.error.message:not(:empty) {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/* On Field(s) */\n\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: #9F3A38;\n  color: #FFFFFF;\n}\n\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  border-radius: '';\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n  color: #9F3A38;\n  -webkit-appearance: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Preserve Native Select Stylings */\n\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: #E0B4B4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: #E0B4B4 !important;\n}\n\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: #E0B4B4;\n}\n\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: #EACBCB;\n  color: #9F3A38;\n}\n\n/* Hover */\n\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: #FBE7E7;\n}\n\n/* Selected */\n\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: #FBE7E7;\n}\n\n/* Active */\n\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: #FDCFCF !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: #9F3A38;\n}\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: #9F3A38;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: 0.45;\n}\n\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: rgba(255, 255, 255, 0.8);\n  width: 100%;\n  height: 100%;\n  z-index: 100;\n}\n\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -1.5em 0em 0em -1.5em;\n  width: 3em;\n  height: 3em;\n  -webkit-animation: form-spin 0.6s linear;\n  animation: form-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1);\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: 101;\n}\n\n@-webkit-keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes form-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*******************************\n         Element Types\n*******************************/\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: -0.2em 0em 0em 0.2em;\n  content: '*';\n  color: #DB2828;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Inverted Field */\n\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: #FFFFFF;\n  border-color: rgba(255, 255, 255, 0.1);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n/* Grouped Vertically */\n\n.ui.form .grouped.fields {\n  display: block;\n  margin: 0em 0em 1em;\n}\n\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.form .grouped.fields > label {\n  margin: 0em 0em 0.28571429rem 0em;\n  color: rgba(0, 0, 0, 0.87);\n  font-size: 0.92857143em;\n  font-weight: bold;\n  text-transform: none;\n}\n\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: 0.5em 0em;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n/* Split fields */\n\n.ui.form .fields {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  margin: 0em -0.5em 1em;\n}\n\n.ui.form .fields > .field {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Other Combinations */\n\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: 50%;\n}\n\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: 33.33333333%;\n}\n\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: 25%;\n}\n\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: 20%;\n}\n\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: 16.66666667%;\n}\n\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: 14.28571429%;\n}\n\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: 12.5%;\n}\n\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: 11.11111111%;\n}\n\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: 10%;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form .fields {\n    -ms-flex-wrap: wrap;\n    flex-wrap: wrap;\n  }\n\n  .ui[class*=\"equal width\"].form:not(.unstackable) .fields > .field,\n  .ui.form:not(.unstackable) [class*=\"equal width\"].fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {\n    width: 100% !important;\n    margin: 0em 0em 1em;\n  }\n}\n\n/* Sizing Combinations */\n\n.ui.form .fields .wide.field {\n  width: 6.25%;\n  padding-left: 0.5em;\n  padding-right: 0.5em;\n}\n\n.ui.form .one.wide.field {\n  width: 6.25% !important;\n}\n\n.ui.form .two.wide.field {\n  width: 12.5% !important;\n}\n\n.ui.form .three.wide.field {\n  width: 18.75% !important;\n}\n\n.ui.form .four.wide.field {\n  width: 25% !important;\n}\n\n.ui.form .five.wide.field {\n  width: 31.25% !important;\n}\n\n.ui.form .six.wide.field {\n  width: 37.5% !important;\n}\n\n.ui.form .seven.wide.field {\n  width: 43.75% !important;\n}\n\n.ui.form .eight.wide.field {\n  width: 50% !important;\n}\n\n.ui.form .nine.wide.field {\n  width: 56.25% !important;\n}\n\n.ui.form .ten.wide.field {\n  width: 62.5% !important;\n}\n\n.ui.form .eleven.wide.field {\n  width: 68.75% !important;\n}\n\n.ui.form .twelve.wide.field {\n  width: 75% !important;\n}\n\n.ui.form .thirteen.wide.field {\n  width: 81.25% !important;\n}\n\n.ui.form .fourteen.wide.field {\n  width: 87.5% !important;\n}\n\n.ui.form .fifteen.wide.field {\n  width: 93.75% !important;\n}\n\n.ui.form .sixteen.wide.field {\n  width: 100% !important;\n}\n\n/* Swap to full width on mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {\n    width: 100% !important;\n  }\n\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: 0em 0em 1em;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: 0em 1em 0em 0em;\n}\n\n/* Inline Label */\n\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: 0.92857143em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: none;\n}\n\n/* Grouped Inline Label */\n\n.ui.form .inline.fields > label {\n  margin: 0.035714em 1em 0em 0em;\n}\n\n/* Inline Input */\n\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: middle;\n  font-size: 1em;\n}\n\n/* Label */\n\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em 0.85714286em 0em 0em;\n}\n\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n\n.ui.form .inline.fields .wide.field {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.form {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.form {\n  font-size: 0.92857143rem;\n}\n\n.ui.form {\n  font-size: 1rem;\n}\n\n.ui.large.form {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.form {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.form {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.form {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  margin-left: -1rem;\n  margin-right: -1rem;\n}\n\n.ui.relaxed.grid {\n  margin-left: -1.5rem;\n  margin-right: -1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid {\n  margin-left: -2.5rem;\n  margin-right: -2.5rem;\n}\n\n/* Preserve Rows Spacing on Consecutive Grids */\n\n.ui.grid + .grid {\n  margin-top: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Standard 16 column */\n\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n  width: 6.25%;\n  padding-left: 1rem;\n  padding-right: 1rem;\n  vertical-align: top;\n}\n\n.ui.grid > * {\n  padding-left: 1rem;\n  padding-right: 1rem;\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n  -webkit-box-pack: inherit;\n  -ms-flex-pack: inherit;\n  justify-content: inherit;\n  -webkit-box-align: stretch;\n  -ms-flex-align: stretch;\n  align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Vertical padding when no rows */\n\n.ui.grid > .column:not(.row) {\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: 100%;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Collapse Margin on Consecutive Grid */\n\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n\n.ui.grid .row + .ui.divider {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  margin: 1rem 1rem;\n}\n\n.ui.grid .column + .ui.vertical.divider {\n  height: calc(50% -  1rem );\n}\n\n/* Remove Border on Last Horizontal Segment */\n\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.page.grid {\n    width: auto;\n    padding-left: 0em;\n    padding-right: 0em;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 2em;\n    padding-right: 2em;\n  }\n}\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 3%;\n    padding-right: 3%;\n  }\n}\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 15%;\n    padding-right: 15%;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.page.grid {\n    width: auto;\n    margin-left: 0em;\n    margin-right: 0em;\n    padding-left: 23%;\n    padding-right: 23%;\n  }\n}\n\n/*-------------------\n     Column Count\n--------------------*/\n\n/* Assume full width with one column */\n\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: 100%;\n}\n\n/* Grid Based */\n\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: 100%;\n}\n\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: 50%;\n}\n\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: 33.33333333%;\n}\n\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: 25%;\n}\n\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: 20%;\n}\n\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: 16.66666667%;\n}\n\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: 14.28571429%;\n}\n\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: 12.5%;\n}\n\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: 11.11111111%;\n}\n\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: 10%;\n}\n\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: 9.09090909%;\n}\n\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: 8.33333333%;\n}\n\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: 7.69230769%;\n}\n\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: 7.14285714%;\n}\n\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: 6.66666667%;\n}\n\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: 6.25%;\n}\n\n/* Row Based Overrides */\n\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: 100% !important;\n}\n\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: 50% !important;\n}\n\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: 33.33333333% !important;\n}\n\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: 25% !important;\n}\n\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: 20% !important;\n}\n\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: 16.66666667% !important;\n}\n\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: 14.28571429% !important;\n}\n\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: 12.5% !important;\n}\n\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: 11.11111111% !important;\n}\n\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: 10% !important;\n}\n\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: 9.09090909% !important;\n}\n\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: 8.33333333% !important;\n}\n\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: 7.69230769% !important;\n}\n\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: 7.14285714% !important;\n}\n\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: 6.66666667% !important;\n}\n\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: 6.25% !important;\n}\n\n/* Celled Page */\n\n.ui.celled.page.grid {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n/* Sizing Combinations */\n\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: 6.25% !important;\n}\n\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: 12.5% !important;\n}\n\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: 18.75% !important;\n}\n\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: 25% !important;\n}\n\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: 31.25% !important;\n}\n\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: 37.5% !important;\n}\n\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: 43.75% !important;\n}\n\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: 50% !important;\n}\n\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: 56.25% !important;\n}\n\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: 62.5% !important;\n}\n\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: 68.75% !important;\n}\n\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: 75% !important;\n}\n\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: 81.25% !important;\n}\n\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: 87.5% !important;\n}\n\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: 93.75% !important;\n}\n\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: 100% !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n/* Mobile Sizing Combinations */\n\n@media only screen and (min-width: 320px) and (max-width: 767px) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n\n@media only screen and (min-width: 992px) {\n  .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: 100% !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n\n@media only screen and (min-width: 1920px) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: 6.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: 12.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: 18.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: 25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: 31.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: 37.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: 43.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: 50% !important;\n  }\n\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: 56.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: 62.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: 68.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: 75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: 81.25% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: 87.5% !important;\n  }\n\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: 93.75% !important;\n  }\n\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: 100% !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: 1.5rem;\n  padding-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: 2.5rem;\n  padding-right: 2.5rem;\n}\n\n/* Coupling with UI Divider */\n\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n}\n\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: 2.5rem;\n  margin-right: 2.5rem;\n}\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: 1rem;\n  margin-bottom: 1rem;\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/* No divider on first column on row */\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* No space on top of first row */\n\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n/* Divided Row */\n\n.ui.grid > .divided.row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.grid > .divided.row > .column:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n  width: calc(100% -  2rem );\n  height: 1px;\n  margin: 0% 1rem;\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Padded Horizontally Divided */\n\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Inverted Divided */\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n  box-shadow: -1px 0px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  -webkit-box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n  box-shadow: 0px -1px 0px 0px rgba(255, 255, 255, 0.1);\n}\n\n/* Relaxed */\n\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 1.5rem;\n  margin-right: 1.5rem;\n  width: calc(100% -  3rem );\n}\n\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: 5rem;\n  margin-right: 5rem;\n  width: calc(100% -  5rem );\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: 1em 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5;\n}\n\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: 0px -1px 0px 0px #D4D4D5;\n  box-shadow: 0px -1px 0px 0px #D4D4D5;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n  box-shadow: -1px 0px 0px 0px #D4D4D5;\n}\n\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: 1em;\n}\n\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: 1.5em;\n}\n\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: 2em;\n}\n\n/* Internally Celled */\n\n.ui[class*=\"internally celled\"].grid {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  margin: 0em;\n}\n\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n/* Top Aligned */\n\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: top;\n  -ms-flex-item-align: start !important;\n  align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: middle;\n  -ms-flex-item-align: center !important;\n  align-self: center !important;\n}\n\n/* Bottom Aligned */\n\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  vertical-align: bottom;\n  -ms-flex-item-align: end !important;\n  align-self: flex-end !important;\n}\n\n/* Stretched */\n\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: -webkit-inline-box !important;\n  display: -ms-inline-flexbox !important;\n  display: inline-flex !important;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n/* Left Aligned */\n\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n/* Center Aligned */\n\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n.ui[class*=\"center aligned\"].grid {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n/* Right Aligned */\n\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  -ms-flex-item-align: inherit;\n  align-self: inherit;\n}\n\n/* Justified */\n\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  -webkit-hyphens: auto;\n  -ms-hyphens: auto;\n  hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -1rem;\n  margin-bottom: -1rem;\n  padding-top: 1rem;\n  padding-bottom: 1rem;\n}\n\n/* Red */\n\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: #DB2828 !important;\n  color: #FFFFFF;\n}\n\n/* Orange */\n\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: #F2711C !important;\n  color: #FFFFFF;\n}\n\n/* Yellow */\n\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF;\n}\n\n/* Olive */\n\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF;\n}\n\n/* Green */\n\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: #21BA45 !important;\n  color: #FFFFFF;\n}\n\n/* Teal */\n\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: #00B5AD !important;\n  color: #FFFFFF;\n}\n\n/* Blue */\n\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: #2185D0 !important;\n  color: #FFFFFF;\n}\n\n/* Violet */\n\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: #6435C9 !important;\n  color: #FFFFFF;\n}\n\n/* Purple */\n\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: #A333C8 !important;\n  color: #FFFFFF;\n}\n\n/* Pink */\n\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: #E03997 !important;\n  color: #FFFFFF;\n}\n\n/* Brown */\n\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: #A5673F !important;\n  color: #FFFFFF;\n}\n\n/* Grey */\n\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: #767676 !important;\n  color: #FFFFFF;\n}\n\n/* Black */\n\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF;\n}\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n}\n\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  -webkit-box-flex: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n}\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n\n/* Tablet */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n\n/* Computer */\n\n@media only screen and (min-width: 992px) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    -webkit-box-orient: horizontal;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: row-reverse;\n    flex-direction: row-reverse;\n  }\n\n  .ui[class*=\"computer vertically reversed\"].grid {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: reverse;\n    -ms-flex-direction: column-reverse;\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: -1px 0px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Vertically Divided Reversed */\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n    box-shadow: 0px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  }\n\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Celled Reversed */\n\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    -webkit-box-shadow: -1px 0px 0px 0px #D4D4D5;\n    box-shadow: -1px 0px 0px 0px #D4D4D5;\n  }\n\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n    margin: 0em;\n  }\n\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: 20% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: 16.66666667% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: 14.28571429% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: 12.5% !important;\n  }\n}\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: 1rem !important;\n    padding-bottom: 1rem !important;\n    margin: 0em !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: 100% !important;\n  }\n\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: 50% !important;\n  }\n\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 33.33333333% !important;\n  }\n\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: 25% !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n    padding: 1rem 1rem !important;\n  }\n\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n\n  /* Coupling */\n\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n\n  /* Don't pad inside segment or nested grid */\n\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -1rem !important;\n    margin-right: -1rem !important;\n  }\n\n  /* Divided Stackable */\n\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: 1px solid rgba(255, 255, 255, 0.1);\n  }\n\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: 1px solid rgba(34, 36, 38, 0.15);\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n    padding-top: 2rem !important;\n    padding-bottom: 2rem !important;\n  }\n\n  .ui.stackable.celled.grid > .row {\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n\n@media only screen and (max-width: 767px) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Tablet Only Hide */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n\n@media only screen and (min-width: 992px) and (max-width: 1199px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n\n@media only screen and (min-width: 1200px) and (max-width: 1919px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n\n@media only screen and (min-width: 1920px) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1rem 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  font-weight: normal;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  min-height: 2.85714286em;\n}\n\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n\n.ui.menu:not(.vertical) > .menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  background: none;\n  padding: 0.92857143em 1.14285714em;\n  text-transform: none;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: normal;\n  -webkit-transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, box-shadow 0.1s ease, color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n.ui.menu > .item:first-child {\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem;\n}\n\n/* Border */\n\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n  width: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  line-height: 1.3;\n}\n\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: 0.9;\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n  padding-bottom: 0.78571429em;\n  padding-top: 0.78571429em;\n  font-size: 1em;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu > .grid,\n.ui.menu > .container {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: inherit;\n  -ms-flex-align: inherit;\n  align-items: inherit;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: inherit;\n  flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: 0em;\n  margin: -0.5em 0em;\n}\n\n.ui.menu .item > .input input {\n  font-size: 1em;\n  padding-top: 0.57142857em;\n  padding-bottom: 0.57142857em;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: '';\n  text-transform: normal;\n  font-weight: bold;\n}\n\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: 0em 0em 0.5em;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n/* Dropdown Icon */\n\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n/* Menu */\n\n.ui.menu .dropdown.item .menu {\n  left: 0px;\n  min-width: calc(100% - 1px);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  background: #FFFFFF;\n  margin: 0em 0px 0px;\n  -webkit-box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n  -webkit-box-orient: vertical !important;\n  -webkit-box-direction: normal !important;\n  -ms-flex-direction: column !important;\n  flex-direction: column !important;\n}\n\n/* Menu Items */\n\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: 1em !important;\n  padding: 0.78571429em 1.14285714em !important;\n  background: transparent !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n  text-transform: none !important;\n  font-weight: normal !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  -webkit-transition: none !important;\n  transition: none !important;\n}\n\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: rgba(0, 0, 0, 0.03) !important;\n  font-weight: bold !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: 1em !important;\n  float: none;\n  margin: 0em 0.75em 0em 0em;\n}\n\n/* Secondary */\n\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: 0.28571429rem;\n  margin-top: 0.35714286em;\n}\n\n/* Pointing */\n\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: 0.75em;\n}\n\n/* Inverted */\n\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/* Vertical */\n\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em 0em;\n  -webkit-box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0.28571429rem 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n.ui.vertical.menu .dropdown.active.item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Evenly Divided */\n\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-left: 1em;\n  padding: 0.3em 0.78571429em;\n}\n\n.ui.vertical.menu .item > .label {\n  background: #999999;\n  color: #FFFFFF;\n  margin-top: -0.15em;\n  margin-bottom: -0.15em;\n  padding: 0.3em 0.78571429em;\n}\n\n.ui.menu .item > .floating.label {\n  padding: 0.3em 0.78571429em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: -0.3em 0em;\n  width: 2.5em;\n}\n\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: auto;\n}\n\n/*******************************\n          Coupling\n*******************************/\n\n/*--------------\n     Sidebar\n---------------*/\n\n/* Show vertical dividers below last */\n\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: 1px solid rgba(34, 36, 38, 0.1);\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  font-weight: normal;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.menu .active.item > i.icon {\n  opacity: 1;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n/* Left Floated */\n\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-right: auto !important;\n}\n\n/* Right Floated */\n\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n/*--- Item ---*/\n\n.ui.vertical.menu .item {\n  display: block;\n  background: none;\n  border-top: none;\n  border-right: none;\n}\n\n.ui.vertical.menu > .item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px;\n}\n\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem;\n}\n\n/*--- Label ---*/\n\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n\n.ui.vertical.menu .item > i.icon {\n  width: 1.18em;\n  float: right;\n  margin: 0em 0em 0em 0.5em;\n}\n\n.ui.vertical.menu .item > .label + i.icon {\n  float: none;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/*--- Border ---*/\n\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: 1px;\n  background: rgba(34, 36, 38, 0.1);\n}\n\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n/*--- Sub Menu ---*/\n\n.ui.vertical.menu .item > .menu {\n  margin: 0.5em -1.14285714em 0em;\n}\n\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: 0.5em 1.33333333em;\n  font-size: 0.85714286em;\n  color: rgba(0, 0, 0, 0.5);\n}\n\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n\n.ui.vertical.menu .active.item {\n  background: rgba(0, 0, 0, 0.05);\n  border-radius: 0em;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: 0.28571429rem;\n}\n\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n\n.ui.vertical.menu .item .menu .active.item {\n  background-color: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border: none;\n  background: none transparent;\n  border-bottom: 1px solid #D4D4D5;\n}\n\n.ui.tabular.fluid.menu {\n  width: calc(100% +  2px ) !important;\n}\n\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  padding: 0.92857143em 1.42857143em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Active */\n\n.ui.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-top-width: 1px;\n  border-color: #D4D4D5;\n  font-weight: bold;\n  margin-bottom: -1px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0.28571429rem 0.28571429rem 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: calc(100% +  2px );\n  left: -1px;\n}\n\n/* Bottom Vertical Tabular */\n\n.ui.bottom.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-top: 1px solid #D4D4D5;\n}\n\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: none;\n}\n\n.ui.bottom.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: -1px 0px 0px 0px;\n  border-radius: 0px 0px 0.28571429rem 0.28571429rem !important;\n}\n\n/* Vertical Tabular (Left) */\n\n.ui.vertical.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: 1px solid #D4D4D5;\n}\n\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-right: none;\n}\n\n.ui.vertical.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px -1px 0px 0px;\n  border-radius: 0.28571429rem 0px 0px 0.28571429rem !important;\n}\n\n/* Vertical Right Tabular */\n\n.ui.vertical.right.tabular.menu {\n  background: none transparent;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: 1px solid #D4D4D5;\n}\n\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: 1px solid transparent;\n  border-bottom: 1px solid transparent;\n  border-top: 1px solid transparent;\n  border-left: none;\n}\n\n.ui.vertical.right.tabular.menu .active.item {\n  background: none #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n  border-color: #D4D4D5;\n  margin: 0px 0px 0px -1px;\n  border-radius: 0px 0.28571429rem 0.28571429rem 0px !important;\n}\n\n/* Dropdown */\n\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: 1px solid transparent;\n  border-right: 1px solid transparent;\n  border-top: 2px solid transparent;\n  border-bottom: none;\n}\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  vertical-align: middle;\n}\n\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.pagination.menu .item {\n  min-width: 3em;\n  text-align: center;\n}\n\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: 0.92857143em;\n  background-color: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: none;\n  margin-left: -0.35714286em;\n  margin-right: -0.35714286em;\n  border-radius: 0em;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Item */\n\n.ui.secondary.menu .item {\n  -ms-flex-item-align: center;\n  align-self: center;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: none;\n  padding: 0.78571429em 0.92857143em;\n  margin: 0em 0.35714286em;\n  background: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-radius: 0.28571429rem;\n}\n\n/* No Divider */\n\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: none;\n  background: none transparent;\n}\n\n/* Image */\n\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.menu .active.item {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  border-radius: 0.28571429rem;\n}\n\n/* Active Hover */\n\n.ui.secondary.menu .active.item:hover {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: rgba(255, 255, 255, 0.7) !important;\n}\n\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff !important;\n}\n\n.ui.secondary.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n/* Fix item margins */\n\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n\n.ui.secondary.attached.menu {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Sub Menu */\n\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: 0em -0.92857143em;\n}\n\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 1.33333333em;\n}\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: 0em 0em 0.35714286em;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: 2px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  -ms-flex-item-align: end;\n  align-self: flex-end;\n  margin: 0em 0em -2px;\n  padding: 0.85714286em 1.14285714em;\n  border-bottom-width: 2px;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Item Types */\n\n.ui.secondary.pointing.menu .header.item {\n  color: rgba(0, 0, 0, 0.85) !important;\n}\n\n.ui.secondary.pointing.menu .text.item {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Pressed */\n\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n/* Active */\n\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-color: #1B1C1D;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Hover */\n\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: #1B1C1D;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Dropdown */\n\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: transparent;\n}\n\n/* Vertical Pointing */\n\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: 2px;\n  border-right-style: solid;\n  border-right-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: 0em -2px 0em 0em;\n  border-right-width: 2px;\n}\n\n/* Vertical Active */\n\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: #1B1C1D;\n}\n\n/* Inverted */\n\n.ui.secondary.inverted.pointing.menu {\n  border-color: rgba(255, 255, 255, 0.1);\n}\n\n.ui.secondary.inverted.pointing.menu {\n  border-width: 2px;\n  border-color: rgba(34, 36, 38, 0.15);\n}\n\n.ui.secondary.inverted.pointing.menu .item {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: #FFFFFF !important;\n}\n\n/* Hover */\n\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active */\n\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: #FFFFFF;\n  color: #ffffff;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: none;\n  margin: 1em -0.5em;\n}\n\n.ui.text.menu .item {\n  border-radius: 0px;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -ms-flex-item-align: center;\n  align-self: center;\n  margin: 0em 0em;\n  padding: 0.35714286em 0.5em;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.6);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Border */\n\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.92857143em;\n  text-transform: uppercase;\n  font-weight: bold;\n}\n\n/* Image */\n\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n\n.ui.vertical.text.menu {\n  margin: 1em 0em;\n}\n\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n.ui.vertical.text.menu .item {\n  margin: 0.57142857em 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n\n.ui.vertical.text.menu .item > i.icon {\n  float: none;\n  margin: 0em 0.35714286em 0em 0em;\n}\n\n.ui.vertical.text.menu .header.item {\n  margin: 0.57142857em 0em 0.71428571em;\n}\n\n/* Vertical Sub Menu */\n\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: 0em;\n}\n\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: 0em;\n  padding: 0.5em 0em;\n}\n\n/*--- hover ---*/\n\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--- active hover ---*/\n\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n\n.ui.text.pointing.menu .active.item:after {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.text.attached.menu {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Inverted */\n\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n/* Vertical Menu */\n\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n\n.ui.icon.menu .item {\n  height: auto;\n  text-align: center;\n  color: #1B1C1D;\n}\n\n/* Icon */\n\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n\n.ui.inverted.icon.menu .item {\n  color: #FFFFFF;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n/* Menu */\n\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n\n.ui.labeled.icon.menu .item {\n  min-width: 6em;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n}\n\n/* Icon */\n\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: 1.71428571em !important;\n  margin: 0em auto 0.5rem !important;\n}\n\n/* Fluid */\n\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: 1px;\n    background: rgba(34, 36, 38, 0.1);\n  }\n\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .left.menu {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/*--- Standard Colors  ---*/\n\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: #DB2828 !important;\n  color: #DB2828 !important;\n}\n\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: #F2711C !important;\n  color: #F2711C !important;\n}\n\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: #FBBD08 !important;\n  color: #FBBD08 !important;\n}\n\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: #B5CC18 !important;\n  color: #B5CC18 !important;\n}\n\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: #21BA45 !important;\n  color: #21BA45 !important;\n}\n\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: #00B5AD !important;\n  color: #00B5AD !important;\n}\n\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: #2185D0 !important;\n  color: #2185D0 !important;\n}\n\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: #6435C9 !important;\n  color: #6435C9 !important;\n}\n\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: #A333C8 !important;\n  color: #A333C8 !important;\n}\n\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: #E03997 !important;\n  color: #E03997 !important;\n}\n\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: #A5673F !important;\n  color: #A5673F !important;\n}\n\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: #767676 !important;\n  color: #767676 !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: 0px solid transparent;\n  background: #1B1C1D;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Menu Item */\n\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: transparent;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.menu .item.menu {\n  background: transparent;\n}\n\n/*--- Border ---*/\n\n.ui.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n.ui.vertical.inverted.menu .item:before {\n  background: rgba(255, 255, 255, 0.08);\n}\n\n/* Sub Menu */\n\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: rgba(255, 255, 255, 0.5);\n}\n\n/* Header */\n\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: transparent;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Disabled */\n\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/*--- Hover ---*/\n\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: transparent;\n  color: #ffffff;\n}\n\n/*--- Pressed ---*/\n\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active {\n  background: rgba(255, 255, 255, 0.08);\n  color: #ffffff;\n}\n\n/*--- Active ---*/\n\n.ui.inverted.menu .active.item {\n  background: rgba(255, 255, 255, 0.15);\n  color: #ffffff !important;\n}\n\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: transparent;\n  color: #FFFFFF;\n}\n\n.ui.inverted.pointing.menu .active.item:after {\n  background: #3D3E3F !important;\n  margin: 0em !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n\n.ui.inverted.menu .active.item:hover {\n  background: rgba(255, 255, 255, 0.15);\n  color: #FFFFFF !important;\n}\n\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: #3D3E3F !important;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem 0.5rem 0rem 0rem;\n}\n\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem 0.5rem;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Red */\n\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: #DB2828;\n}\n\n.ui.inverted.red.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.red.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Orange */\n\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: #F2711C;\n}\n\n.ui.inverted.orange.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.orange.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Yellow */\n\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: #FBBD08;\n}\n\n.ui.inverted.yellow.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.yellow.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Olive */\n\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: #B5CC18;\n}\n\n.ui.inverted.olive.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.olive.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Green */\n\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: #21BA45;\n}\n\n.ui.inverted.green.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.green.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Teal */\n\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: #00B5AD;\n}\n\n.ui.inverted.teal.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.teal.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Blue */\n\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: #2185D0;\n}\n\n.ui.inverted.blue.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.blue.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Violet */\n\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: #6435C9;\n}\n\n.ui.inverted.violet.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.violet.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Purple */\n\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: #A333C8;\n}\n\n.ui.inverted.purple.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.purple.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Pink */\n\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: #E03997;\n}\n\n.ui.inverted.pink.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.pink.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Brown */\n\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: #A5673F;\n}\n\n.ui.inverted.brown.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.brown.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/* Grey */\n\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: #767676;\n}\n\n.ui.inverted.grey.menu .item:before {\n  background-color: rgba(34, 36, 38, 0.1);\n}\n\n.ui.inverted.grey.menu .active.item {\n  background-color: rgba(0, 0, 0, 0.1) !important;\n}\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: 0.92857143em;\n  padding-bottom: 0.92857143em;\n}\n\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: 1.14285714em;\n  padding-right: 1.14285714em;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n\n.ui.compact.menu .item:last-child {\n  border-radius: 0em 0.28571429rem 0.28571429rem 0em;\n}\n\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.attached.item.menu {\n  margin: 0em -1px !important;\n}\n\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.menu.two.item .item {\n  width: 50%;\n}\n\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n\n.ui.menu.four.item .item {\n  width: 25%;\n}\n\n.ui.menu.five.item .item {\n  width: 20%;\n}\n\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n\n.ui.fixed.menu + .ui.grid {\n  padding-top: 2.75rem;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  -webkit-transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n  margin: 0.5px 0em 0em;\n  width: 0.57142857em;\n  height: 0.57142857em;\n  border: none;\n  border-bottom: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n  z-index: 2;\n  -webkit-transition: background 0.1s ease;\n  transition: background 0.1s ease;\n}\n\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n  -webkit-transform: translateX(50%) translateY(-50%) rotate(45deg);\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -0.5px 0em 0em;\n  border: none;\n  border-top: 1px solid #D4D4D5;\n  border-right: 1px solid #D4D4D5;\n}\n\n/* Active */\n\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n\n.ui.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: #F2F2F2;\n}\n\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: #FFFFFF;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Middle */\n\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1rem;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1rem;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n\n.ui.top.attached.menu > .item:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n/* Tabular Attached */\n\n.ui.attached.menu:not(.tabular) {\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached.inverted.menu {\n  border: none;\n}\n\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n\n.ui.mini.menu {\n  font-size: 0.78571429rem;\n}\n\n.ui.mini.vertical.menu {\n  width: 9rem;\n}\n\n/* Tiny */\n\n.ui.tiny.menu {\n  font-size: 0.85714286rem;\n}\n\n.ui.tiny.vertical.menu {\n  width: 11rem;\n}\n\n/* Small */\n\n.ui.small.menu {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.vertical.menu {\n  width: 13rem;\n}\n\n/* Medium */\n\n.ui.menu {\n  font-size: 1rem;\n}\n\n.ui.vertical.menu {\n  width: 15rem;\n}\n\n/* Large */\n\n.ui.large.menu {\n  font-size: 1.07142857rem;\n}\n\n.ui.large.vertical.menu {\n  width: 18rem;\n}\n\n/* Huge */\n\n.ui.huge.menu {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.vertical.menu {\n  width: 20rem;\n}\n\n/* Big */\n\n.ui.big.menu {\n  font-size: 1.21428571rem;\n}\n\n.ui.big.vertical.menu {\n  width: 22rem;\n}\n\n/* Massive */\n\n.ui.massive.menu {\n  font-size: 1.28571429rem;\n}\n\n.ui.massive.vertical.menu {\n  width: 25rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: 1em 0em;\n  background: #F8F8F9;\n  padding: 1em 1.5em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease;\n  transition: opacity 0.1s ease, color 0.1s ease, background 0.1s ease, box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.message:first-child {\n  margin-top: 0em;\n}\n\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Header */\n\n.ui.message .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  margin: -0.14285714em 0em 0rem 0em;\n}\n\n/* Default font size */\n\n.ui.message .header:not(.ui) {\n  font-size: 1.14285714em;\n}\n\n/* Paragraph */\n\n.ui.message p {\n  opacity: 0.85;\n  margin: 0.75em 0em;\n}\n\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message .header + p {\n  margin-top: 0.25em;\n}\n\n/* List */\n\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: 0.85;\n  list-style-position: inside;\n  margin: 0.5em 0em 0em;\n}\n\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em 0.3em 1em;\n  padding: 0em;\n}\n\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n/* Icon */\n\n.ui.message > .icon {\n  margin-right: 0.6em;\n}\n\n/* Close Icon */\n\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: 0.78575em;\n  right: 0.5em;\n  opacity: 0.7;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -1px;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n\n.ui.icon.visible.visible.visible.visible.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n\n.ui.compact.icon.message {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: -1px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset;\n  margin-left: -1px;\n  margin-right: -1px;\n}\n\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: -1px;\n  border-radius: 0em;\n}\n\n.ui.bottom.attached.message {\n  margin-top: -1px;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n  box-shadow: 0em 0em 0em 1px rgba(34, 36, 38, 0.15) inset, 0px 1px 2px 0 rgba(34, 36, 38, 0.15);\n}\n\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: 1em;\n}\n\n.ui.attached.icon.message {\n  width: auto;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  width: 100%;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: middle;\n  font-size: 3em;\n  opacity: 0.8;\n}\n\n.ui.icon.message > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  vertical-align: middle;\n}\n\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: 0rem;\n}\n\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.22) inset, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*--------------\n     Types\n---------------*/\n\n/* Positive */\n\n.ui.positive.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n\n.ui.positive.message,\n.ui.attached.positive.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.positive.message .header {\n  color: #1A531B;\n}\n\n/* Negative */\n\n.ui.negative.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.negative.message,\n.ui.attached.negative.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.negative.message .header {\n  color: #912D2B;\n}\n\n/* Info */\n\n.ui.info.message {\n  background-color: #F8FFFF;\n  color: #276F86;\n}\n\n.ui.info.message,\n.ui.attached.info.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #A9D5DE inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.info.message .header {\n  color: #0E566C;\n}\n\n/* Warning */\n\n.ui.warning.message {\n  background-color: #FFFAF3;\n  color: #573A08;\n}\n\n.ui.warning.message,\n.ui.attached.warning.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #C9BA9B inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.warning.message .header {\n  color: #794B02;\n}\n\n/* Error */\n\n.ui.error.message {\n  background-color: #FFF6F6;\n  color: #9F3A38;\n}\n\n.ui.error.message,\n.ui.attached.error.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #E0B4B4 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.error.message .header {\n  color: #912D2B;\n}\n\n/* Success */\n\n.ui.success.message {\n  background-color: #FCFFF5;\n  color: #2C662D;\n}\n\n.ui.success.message,\n.ui.attached.success.message {\n  -webkit-box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #A3C293 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.success.message .header {\n  color: #1A531B;\n}\n\n/* Colors */\n\n.ui.inverted.message,\n.ui.black.message {\n  background-color: #1B1C1D;\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.red.message {\n  background-color: #FFE8E6;\n  color: #DB2828;\n  -webkit-box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #DB2828 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.red.message .header {\n  color: #c82121;\n}\n\n.ui.orange.message {\n  background-color: #FFEDDE;\n  color: #F2711C;\n  -webkit-box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #F2711C inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.orange.message .header {\n  color: #e7640d;\n}\n\n.ui.yellow.message {\n  background-color: #FFF8DB;\n  color: #B58105;\n  -webkit-box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #B58105 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.yellow.message .header {\n  color: #9c6f04;\n}\n\n.ui.olive.message {\n  background-color: #FBFDEF;\n  color: #8ABC1E;\n  -webkit-box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #8ABC1E inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.olive.message .header {\n  color: #7aa61a;\n}\n\n.ui.green.message {\n  background-color: #E5F9E7;\n  color: #1EBC30;\n  -webkit-box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #1EBC30 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.green.message .header {\n  color: #1aa62a;\n}\n\n.ui.teal.message {\n  background-color: #E1F7F7;\n  color: #10A3A3;\n  -webkit-box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #10A3A3 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.teal.message .header {\n  color: #0e8c8c;\n}\n\n.ui.blue.message {\n  background-color: #DFF0FF;\n  color: #2185D0;\n  -webkit-box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #2185D0 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.blue.message .header {\n  color: #1e77ba;\n}\n\n.ui.violet.message {\n  background-color: #EAE7FF;\n  color: #6435C9;\n  -webkit-box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #6435C9 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.violet.message .header {\n  color: #5a30b5;\n}\n\n.ui.purple.message {\n  background-color: #F6E7FF;\n  color: #A333C8;\n  -webkit-box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #A333C8 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.purple.message .header {\n  color: #922eb4;\n}\n\n.ui.pink.message {\n  background-color: #FFE3FB;\n  color: #E03997;\n  -webkit-box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #E03997 inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.pink.message .header {\n  color: #dd238b;\n}\n\n.ui.brown.message {\n  background-color: #F1E2D3;\n  color: #A5673F;\n  -webkit-box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n  box-shadow: 0px 0px 0px 1px #A5673F inset, 0px 0px 0px 0px rgba(0, 0, 0, 0);\n}\n\n.ui.brown.message .header {\n  color: #935b38;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: 0.78571429em;\n}\n\n.ui.tiny.message {\n  font-size: 0.85714286em;\n}\n\n.ui.small.message {\n  font-size: 0.92857143em;\n}\n\n.ui.message {\n  font-size: 1em;\n}\n\n.ui.large.message {\n  font-size: 1.14285714em;\n}\n\n.ui.big.message {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.message {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.message {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Table\n*******************************/\n\n/* Prototype */\n\n.ui.table {\n  width: 100%;\n  background: #FFFFFF;\n  margin: 1em 0em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-radius: 0.28571429rem;\n  text-align: left;\n  color: rgba(0, 0, 0, 0.87);\n  border-collapse: separate;\n  border-spacing: 0px;\n}\n\n.ui.table:first-child {\n  margin-top: 0em;\n}\n\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Parts\n*******************************/\n\n/* Table Content */\n\n.ui.table th,\n.ui.table td {\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n/* Headers */\n\n.ui.table thead {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.table thead th {\n  cursor: auto;\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.92857143em 0.78571429em;\n  vertical-align: inherit;\n  font-style: none;\n  font-weight: bold;\n  text-transform: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  border-left: none;\n}\n\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: 0.28571429rem 0em 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Footer */\n\n.ui.table tfoot {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  background: #F9FAFB;\n  text-align: inherit;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429em 0.78571429em;\n  vertical-align: middle;\n  font-style: normal;\n  font-weight: normal;\n  text-transform: none;\n}\n\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em 0.28571429rem;\n}\n\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/* Table Row */\n\n.ui.table tr td {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n\n.ui.table td {\n  padding: 0.78571429em 0.78571429em;\n  text-align: inherit;\n}\n\n/* Icons */\n\n.ui.table > .icon {\n  vertical-align: baseline;\n}\n\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n\n.ui.table.segment {\n  padding: 0em;\n}\n\n.ui.table.segment:after {\n  display: none;\n}\n\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n/* Responsive */\n\n@media only screen and (max-width: 767px) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    width: auto !important;\n    display: block !important;\n  }\n\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n\n  .ui.table:not(.unstackable) thead {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tfoot {\n    display: block;\n  }\n\n  .ui.table:not(.unstackable) tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em !important;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n\n  /* Definition Table */\n\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* UI Image */\n\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n\n.ui.structured.table thead th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.sortable.table thead th {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-right: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.structured.basic.table th {\n  border-left: none;\n  border-right: none;\n}\n\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n  border-right: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: -1px -1px 0px 1px #FFFFFF;\n  box-shadow: -1px -1px 0px 1px #FFFFFF;\n}\n\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: transparent;\n  font-weight: rgba(0, 0, 0, 0.4);\n  color: normal;\n  -webkit-box-shadow: 1px 1px 0px 1px #FFFFFF;\n  box-shadow: 1px 1px 0px 1px #FFFFFF;\n}\n\n/* Remove Border */\n\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px -1px 0px 1px #FFFFFF;\n  box-shadow: 0px -1px 0px 1px #FFFFFF;\n}\n\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  -webkit-box-shadow: 0px 1px 0px 1px #FFFFFF;\n  box-shadow: 0px 1px 0px 1px #FFFFFF;\n}\n\n/* Highlight Defining Column */\n\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: rgba(0, 0, 0, 0.03);\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  text-transform: '';\n  -webkit-box-shadow: '';\n  box-shadow: '';\n  text-align: '';\n  font-size: 1em;\n  padding-left: '';\n  padding-right: '';\n}\n\n/* Fix 2nd Column */\n\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.definition.table td:nth-child(2) {\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  -webkit-box-shadow: 0px 0px 0px #A3C293 inset;\n  box-shadow: 0px 0px 0px #A3C293 inset;\n}\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: #FCFFF5 !important;\n  color: #2C662D !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  -webkit-box-shadow: 0px 0px 0px #E0B4B4 inset;\n  box-shadow: 0px 0px 0px #E0B4B4 inset;\n}\n\n.ui.table tr.error,\n.ui.table td.error {\n  background: #FFF6F6 !important;\n  color: #9F3A38 !important;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  -webkit-box-shadow: 0px 0px 0px #C9BA9B inset;\n  box-shadow: 0px 0px 0px #C9BA9B inset;\n}\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: #FFFAF3 !important;\n  color: #573A08 !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  -webkit-box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n  box-shadow: 0px 0px 0px rgba(0, 0, 0, 0.87) inset;\n}\n\n.ui.table tr.active,\n.ui.table td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: 991px) {\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    width: 100% !important;\n    display: block !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: block;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: 1em;\n    padding-bottom: 1em;\n    -webkit-box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n    box-shadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: 0.25em 0.75em;\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n\n  /* Definition Table */\n\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    -webkit-box-shadow: none !important;\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: rgba(0, 0, 0, 0.05) !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: rgba(255, 255, 255, 0.08) !important;\n  color: #ffffff !important;\n}\n\n/* Selectable Cell Link */\n\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: 0.78571429em 0.78571429em;\n}\n\n/* Other States */\n\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: #fff4e4 !important;\n  color: #493107 !important;\n}\n\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: #E0E0E0 !important;\n  color: rgba(0, 0, 0, 0.87) !important;\n}\n\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: #f7ffe6 !important;\n  color: #275b28 !important;\n}\n\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: #ffe7e7 !important;\n  color: #943634 !important;\n}\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em -1px;\n  width: calc(100% +  2px );\n  max-width: calc(100% +  2px );\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid #D4D4D5;\n}\n\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: 0px;\n  margin-top: 1em;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: 0px;\n  margin-bottom: 1em;\n  -webkit-box-shadow: none, none;\n  box-shadow: none, none;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n/* Table Striping */\n\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 50, 0.02);\n}\n\n/* Stripes */\n\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(255, 255, 255, 0.05);\n}\n\n/* Allow striped active hover */\n\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: #EFEFEF !important;\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.table {\n  border-top: 0.2em solid #DB2828;\n}\n\n.ui.inverted.red.table {\n  background-color: #DB2828 !important;\n  color: #FFFFFF !important;\n}\n\n/* Orange */\n\n.ui.orange.table {\n  border-top: 0.2em solid #F2711C;\n}\n\n.ui.inverted.orange.table {\n  background-color: #F2711C !important;\n  color: #FFFFFF !important;\n}\n\n/* Yellow */\n\n.ui.yellow.table {\n  border-top: 0.2em solid #FBBD08;\n}\n\n.ui.inverted.yellow.table {\n  background-color: #FBBD08 !important;\n  color: #FFFFFF !important;\n}\n\n/* Olive */\n\n.ui.olive.table {\n  border-top: 0.2em solid #B5CC18;\n}\n\n.ui.inverted.olive.table {\n  background-color: #B5CC18 !important;\n  color: #FFFFFF !important;\n}\n\n/* Green */\n\n.ui.green.table {\n  border-top: 0.2em solid #21BA45;\n}\n\n.ui.inverted.green.table {\n  background-color: #21BA45 !important;\n  color: #FFFFFF !important;\n}\n\n/* Teal */\n\n.ui.teal.table {\n  border-top: 0.2em solid #00B5AD;\n}\n\n.ui.inverted.teal.table {\n  background-color: #00B5AD !important;\n  color: #FFFFFF !important;\n}\n\n/* Blue */\n\n.ui.blue.table {\n  border-top: 0.2em solid #2185D0;\n}\n\n.ui.inverted.blue.table {\n  background-color: #2185D0 !important;\n  color: #FFFFFF !important;\n}\n\n/* Violet */\n\n.ui.violet.table {\n  border-top: 0.2em solid #6435C9;\n}\n\n.ui.inverted.violet.table {\n  background-color: #6435C9 !important;\n  color: #FFFFFF !important;\n}\n\n/* Purple */\n\n.ui.purple.table {\n  border-top: 0.2em solid #A333C8;\n}\n\n.ui.inverted.purple.table {\n  background-color: #A333C8 !important;\n  color: #FFFFFF !important;\n}\n\n/* Pink */\n\n.ui.pink.table {\n  border-top: 0.2em solid #E03997;\n}\n\n.ui.inverted.pink.table {\n  background-color: #E03997 !important;\n  color: #FFFFFF !important;\n}\n\n/* Brown */\n\n.ui.brown.table {\n  border-top: 0.2em solid #A5673F;\n}\n\n.ui.inverted.brown.table {\n  background-color: #A5673F !important;\n  color: #FFFFFF !important;\n}\n\n/* Grey */\n\n.ui.grey.table {\n  border-top: 0.2em solid #767676;\n}\n\n.ui.inverted.grey.table {\n  background-color: #767676 !important;\n  color: #FFFFFF !important;\n}\n\n/* Black */\n\n.ui.black.table {\n  border-top: 0.2em solid #1B1C1D;\n}\n\n.ui.inverted.black.table {\n  background-color: #1B1C1D !important;\n  color: #FFFFFF !important;\n}\n\n/*--------------\n  Column Count\n---------------*/\n\n/* Grid Based */\n\n.ui.one.column.table td {\n  width: 100%;\n}\n\n.ui.two.column.table td {\n  width: 50%;\n}\n\n.ui.three.column.table td {\n  width: 33.33333333%;\n}\n\n.ui.four.column.table td {\n  width: 25%;\n}\n\n.ui.five.column.table td {\n  width: 20%;\n}\n\n.ui.six.column.table td {\n  width: 16.66666667%;\n}\n\n.ui.seven.column.table td {\n  width: 14.28571429%;\n}\n\n.ui.eight.column.table td {\n  width: 12.5%;\n}\n\n.ui.nine.column.table td {\n  width: 11.11111111%;\n}\n\n.ui.ten.column.table td {\n  width: 10%;\n}\n\n.ui.eleven.column.table td {\n  width: 9.09090909%;\n}\n\n.ui.twelve.column.table td {\n  width: 8.33333333%;\n}\n\n.ui.thirteen.column.table td {\n  width: 7.69230769%;\n}\n\n.ui.fourteen.column.table td {\n  width: 7.14285714%;\n}\n\n.ui.fifteen.column.table td {\n  width: 6.66666667%;\n}\n\n.ui.sixteen.column.table td {\n  width: 6.25%;\n}\n\n/* Column Width */\n\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: 6.25%;\n}\n\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: 12.5%;\n}\n\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: 18.75%;\n}\n\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: 25%;\n}\n\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: 31.25%;\n}\n\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: 37.5%;\n}\n\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: 43.75%;\n}\n\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: 50%;\n}\n\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: 56.25%;\n}\n\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: 62.5%;\n}\n\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: 68.75%;\n}\n\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: 75%;\n}\n\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: 81.25%;\n}\n\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: 87.5%;\n}\n\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: 93.75%;\n}\n\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: 100%;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: auto;\n  opacity: 0.8;\n  margin: 0em 0em 0em 0.5em;\n  font-family: 'Icons';\n}\n\n.ui.sortable.table thead th.ascending:after {\n  content: '\\f0d8';\n}\n\n.ui.sortable.table thead th.descending:after {\n  content: '\\f0d7';\n}\n\n/* Hover */\n\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: rgba(40, 40, 40, 0.3);\n}\n\n.ui.sortable.table thead th:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Sorted */\n\n.ui.sortable.table thead th.sorted {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n\n.ui.sortable.table thead th.sorted:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/* Inverted */\n\n.ui.inverted.sortable.table thead th.sorted {\n  background: rgba(255, 255, 255, 0.15) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.15) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.15) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th:hover {\n  background: rgba(255, 255, 255, 0.08) -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: rgba(255, 255, 255, 0.08) -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: rgba(255, 255, 255, 0.08) linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  color: #ffffff;\n}\n\n.ui.inverted.sortable.table thead th {\n  border-left-color: transparent;\n  border-right-color: transparent;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Text Color */\n\n.ui.inverted.table {\n  background: #333333;\n  color: rgba(255, 255, 255, 0.9);\n  border: none;\n}\n\n.ui.inverted.table th {\n  background-color: rgba(0, 0, 0, 0.15);\n  border-color: rgba(255, 255, 255, 0.1) !important;\n  color: rgba(255, 255, 255, 0.9) !important;\n}\n\n.ui.inverted.table tr td {\n  border-color: rgba(255, 255, 255, 0.1) !important;\n}\n\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: rgba(225, 225, 225, 0.3);\n}\n\n/* Definition */\n\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: #FFFFFF;\n}\n\n.ui.inverted.definition.table tr td:first-child {\n  background: rgba(255, 255, 255, 0.02);\n  color: #ffffff;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: transparent;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.basic.table th {\n  background: transparent;\n  border-left: none;\n}\n\n.ui.basic.table tbody tr {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.basic.table td {\n  background: transparent;\n}\n\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: rgba(0, 0, 0, 0.05) !important;\n}\n\n/* Very Basic */\n\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: '';\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: 1em;\n  padding-right: 1em;\n}\n\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: 1em 1em;\n}\n\n/* Very */\n\n.ui[class*=\"very padded\"].table th {\n  padding-left: 1.5em;\n  padding-right: 1.5em;\n}\n\n.ui[class*=\"very padded\"].table td {\n  padding: 1.5em 1.5em;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: 0.7em;\n  padding-right: 0.7em;\n}\n\n.ui.compact.table td {\n  padding: 0.5em 0.7em;\n}\n\n/* Very */\n\n.ui[class*=\"very compact\"].table th {\n  padding-left: 0.6em;\n  padding-right: 0.6em;\n}\n\n.ui[class*=\"very compact\"].table td {\n  padding: 0.4em 0.6em;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n/* Small */\n\n.ui.small.table {\n  font-size: 0.9em;\n}\n\n/* Standard */\n\n.ui.table {\n  font-size: 1em;\n}\n\n/* Large */\n\n.ui.large.table {\n  font-size: 1.1em;\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: hidden;\n  margin: 1em 0em;\n}\n\n.ui.ad:first-child {\n  margin: 0em;\n}\n\n.ui.ad:last-child {\n  margin: 0em;\n}\n\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n/* Leaderboard */\n\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n\n/* Half Page */\n\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n/* Square */\n\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n/* Small Rectangle */\n\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n/* Skyscraper */\n\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n/* Banner */\n\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n/* Leaderboard */\n\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n/* Panorama */\n\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n/* Netboard */\n\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n/*--------------\n     Mobile\n---------------*/\n\n/* Large Mobile Banner */\n\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Mobile Sizes */\n\n.ui.mobile.ad {\n  display: none;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.ui.test.ad {\n  position: relative;\n  background: #545454;\n}\n\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  content: 'Ad';\n  color: #FFFFFF;\n  font-size: 1em;\n  font-weight: bold;\n}\n\n.ui.mobile.test.ad:after {\n  font-size: 0.85714286em;\n}\n\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  width: 290px;\n  min-height: 0px;\n  background: #FFFFFF;\n  padding: 0em;\n  border: none;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  box-shadow: 0px 1px 3px 0px #D4D4D5, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease;\n  transition: box-shadow 0.1s ease, transform 0.1s ease, -webkit-box-shadow 0.1s ease, -webkit-transform 0.1s ease;\n  z-index: '';\n}\n\n.ui.card {\n  margin: 1em 0em;\n}\n\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n\n.ui.card:first-child {\n  margin-top: 0em;\n}\n\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: -0.875em -0.5em;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.cards > .card {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 0.875em 0.5em;\n  float: none;\n}\n\n/* Clearing */\n\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/* Consecutive Card Groups Preserve Row Spacing */\n\n.ui.cards ~ .ui.cards {\n  margin-top: 0.875em;\n}\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n  border-top: none !important;\n}\n\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  padding: 0em;\n  background: rgba(0, 0, 0, 0.05);\n}\n\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: none;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  -webkit-box-flex: 1;\n  -ms-flex-positive: 1;\n  flex-grow: 1;\n  border: none;\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  background: none;\n  margin: 0em;\n  padding: 1em 1em;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  font-size: 1em;\n  border-radius: 0em;\n}\n\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: '';\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: bold;\n  font-size: 1.28571429em;\n  margin-top: -0.21425em;\n  line-height: 1.28571429em;\n}\n\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description {\n  margin-top: 0.5em;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: middle;\n  width: '';\n}\n\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: 2em;\n  height: 2em;\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: rgba(0, 0, 0, 0.68);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: 0px -1px;\n  width: calc(100% +  2px );\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: '';\n  z-index: 10;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  -webkit-box-flex: 0;\n  -ms-flex-positive: 0;\n  flex-grow: 0;\n  border-top: 1px solid rgba(0, 0, 0, 0.05) !important;\n  position: static;\n  background: none;\n  width: auto;\n  margin: 0em 0em;\n  padding: 0.75em 1em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: #1e70bf;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.15), 0px 2px 10px 0px rgba(34, 36, 38, 0.25);\n}\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  -webkit-box-pack: center;\n  -ms-flex-pack: center;\n  justify-content: center;\n}\n\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  -webkit-transform: none;\n  transform: none;\n}\n\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: 5;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  box-shadow: 0px 1px 3px 0px #BCBDBD, 0px 0px 0px 1px #D4D4D5;\n  -webkit-transform: translateY(-3px);\n  transform: translateY(-3px);\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #DB2828, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #d01919, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Orange */\n\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #F2711C, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #f26202, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Yellow */\n\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #FBBD08, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #eaae00, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Olive */\n\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #B5CC18, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #a7bd0d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Green */\n\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #21BA45, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #16ab39, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Teal */\n\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #00B5AD, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #009c95, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Blue */\n\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #2185D0, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1678c2, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Violet */\n\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #6435C9, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #5829bb, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Purple */\n\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A333C8, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #9627ba, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Pink */\n\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #E03997, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #e61a8d, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Brown */\n\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #A5673F, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #975b33, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Grey */\n\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #767676, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #838383, 0px 1px 3px 0px #BCBDBD;\n}\n\n/* Black */\n\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #1B1C1D, 0px 1px 3px 0px #D4D4D5;\n}\n\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  -webkit-box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n  box-shadow: 0px 0px 0px 1px #D4D4D5, 0px 2px 0px 0px #27292a, 0px 1px 3px 0px #BCBDBD;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n.ui.one.cards > .card {\n  width: 100%;\n}\n\n.ui.two.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.two.cards > .card {\n  width: calc( 50%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.three.cards {\n  margin-left: -1em;\n  margin-right: -1em;\n}\n\n.ui.three.cards > .card {\n  width: calc( 33.33333333%  -  2em );\n  margin-left: 1em;\n  margin-right: 1em;\n}\n\n.ui.four.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.four.cards > .card {\n  width: calc( 25%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.five.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.five.cards > .card {\n  width: calc( 20%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.six.cards {\n  margin-left: -0.75em;\n  margin-right: -0.75em;\n}\n\n.ui.six.cards > .card {\n  width: calc( 16.66666667%  -  1.5em );\n  margin-left: 0.75em;\n  margin-right: 0.75em;\n}\n\n.ui.seven.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.seven.cards > .card {\n  width: calc( 14.28571429%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n.ui.eight.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.eight.cards > .card {\n  width: calc( 12.5%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 11px;\n}\n\n.ui.nine.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.nine.cards > .card {\n  width: calc( 11.11111111%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n  font-size: 10px;\n}\n\n.ui.ten.cards {\n  margin-left: -0.5em;\n  margin-right: -0.5em;\n}\n\n.ui.ten.cards > .card {\n  width: calc( 10%  -  1em );\n  margin-left: 0.5em;\n  margin-right: 0.5em;\n}\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.seven.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.seven.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.nine.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.ten.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.two.doubling.cards {\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.two.doubling.cards > .card {\n    width: 100%;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n\n  .ui.three.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.three.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.four.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.four.doubling.cards > .card {\n    width: calc( 50%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.five.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.five.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.six.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.six.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -1em;\n    margin-right: -1em;\n  }\n\n  .ui.eight.doubling.cards > .card {\n    width: calc( 33.33333333%  -  2em );\n    margin-left: 1em;\n    margin-right: 1em;\n  }\n\n  .ui.eight.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.eight.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.nine.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.nine.doubling.cards > .card {\n    width: calc( 25%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n\n  .ui.ten.doubling.cards {\n    margin-left: -0.75em;\n    margin-right: -0.75em;\n  }\n\n  .ui.ten.doubling.cards > .card {\n    width: calc( 20%  -  1.5em );\n    margin-left: 0.75em;\n    margin-right: 0.75em;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: 1em 1em;\n    padding: 0 !important;\n    width: calc( 100%  -  2em ) !important;\n  }\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: 1em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: 1.5em 0em;\n  max-width: 650px;\n}\n\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: none;\n  margin: 0.5em 0em 0em;\n  padding: 0.5em 0em 0em;\n  border: none;\n  border-top: none;\n  line-height: 1.2;\n}\n\n.ui.comments .comment:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: 0em 0em 0.5em 0.5em;\n  padding: 1em 0em 1em 1em;\n}\n\n.ui.comments .comment .comments:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n\n.ui.comments .comment .comments .comment {\n  border: none;\n  border-top: none;\n  background: none;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: block;\n  width: 2.5em;\n  height: auto;\n  float: left;\n  margin: 0.2em 0em 0em;\n}\n\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: 0.25rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n\n/* If there is an avatar move content over */\n\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: 3.5em;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n}\n\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n\n.ui.comments .comment a.author:hover {\n  color: #1e70bf;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: inline-block;\n  margin-left: 0.5em;\n  color: rgba(0, 0, 0, 0.4);\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em 0.5em 0em 0em;\n}\n\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: 0.25em 0em 0.5em;\n  font-size: 1em;\n  word-wrap: break-word;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.3;\n}\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: 0.875em;\n}\n\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em 0.75em 0em 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: 1em;\n}\n\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: 1em;\n}\n\n.ui.comments .reply.form textarea {\n  font-size: 1em;\n  height: 12em;\n}\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: -1.5em 0 -1em 1.25em;\n  padding: 3em 0em 2em 2.25em;\n  -webkit-box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n  -webkit-transition-delay: 0.1s;\n  transition-delay: 0.1s;\n}\n\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.comments {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.comments {\n  font-size: 0.92857143rem;\n}\n\n.ui.comments {\n  font-size: 1rem;\n}\n\n.ui.large.comments {\n  font-size: 1.14285714rem;\n}\n\n.ui.big.comments {\n  font-size: 1.28571429rem;\n}\n\n.ui.huge.comments {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.comments {\n  font-size: 1.71428571rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: 1em 0em;\n}\n\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Event */\n\n.ui.feed > .event {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  width: 100%;\n  padding: 0.21428571rem 0em;\n  margin: 0em;\n  background: none;\n  border-top: none;\n}\n\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n\n.ui.feed > .event > .label {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  width: 2.5em;\n  height: auto;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-align: left;\n}\n\n.ui.feed > .event > .label .icon {\n  opacity: 1;\n  font-size: 1.5em;\n  width: 100%;\n  padding: 0.25em;\n  background: none;\n  border: none;\n  border-radius: none;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .label img {\n  width: 100%;\n  height: auto;\n  border-radius: 500rem;\n}\n\n.ui.feed > .event > .label + .content {\n  margin: 0.5em 0em 0.35714286em 1.14285714em;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Content */\n\n.ui.feed > .event > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n  text-align: left;\n  word-wrap: break-word;\n}\n\n.ui.feed > .event:last-child > .content {\n  padding-bottom: 0em;\n}\n\n/* Link */\n\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: -0.5rem 0em 0em;\n  padding: 0em;\n  font-weight: normal;\n  font-size: 1em;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: 0em;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Summary Image */\n\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: auto;\n  height: 10em;\n  margin: -0.25em 0.25em 0em 0em;\n  border-radius: 0.25em;\n  vertical-align: middle;\n}\n\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: bold;\n  margin-right: 0em;\n  vertical-align: baseline;\n}\n\n.ui.feed > .event > .content .user img {\n  margin: -0.25em 0.25em 0em 0em;\n  width: auto;\n  height: 10em;\n  vertical-align: middle;\n}\n\n/*--------------\n   Inline Date\n---------------*/\n\n/* Date inside Summary */\n\n.ui.feed > .event > .content .summary > .date {\n  display: inline-block;\n  float: none;\n  font-weight: normal;\n  font-size: 0.85714286em;\n  font-style: normal;\n  margin: 0em 0em 0em 0.5em;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: 0.5em 0em 0em;\n  background: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Images */\n\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: 0em 0.25em 0em 0em;\n  width: 6em;\n}\n\n/* Text */\n\n.ui.feed > .event > .content .extra.text {\n  padding: 0em;\n  border-left: none;\n  font-size: 1em;\n  max-width: 500px;\n  line-height: 1.4285em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: inline-block;\n  font-size: 0.85714286em;\n  margin: 0.5em 0em 0em;\n  background: none;\n  border: none;\n  border-radius: 0;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  padding: 0em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: 0.75em;\n}\n\n.ui.feed > .event > .content .meta > *:after {\n  content: '';\n  color: rgba(0, 0, 0, 0.2);\n  top: 0em;\n  left: -1em;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n\n.ui.feed > .event > .content .meta .like {\n  color: '';\n  -webkit-transition: 0.2s color ease;\n  transition: 0.2s color ease;\n}\n\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: #FF2733;\n}\n\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: #EF404A;\n}\n\n/* First element */\n\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: pointer;\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.5);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: 0.92857143rem;\n}\n\n.ui.feed {\n  font-size: 1rem;\n}\n\n.ui.large.feed {\n  font-size: 1.14285714rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em 0em;\n  width: 100%;\n  min-height: 0px;\n  background: transparent;\n  padding: 0em;\n  border: none;\n  border-radius: 0rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: -webkit-box-shadow 0.1s ease;\n  transition: -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, -webkit-box-shadow 0.1s ease;\n  z-index: '';\n}\n\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: 1.5em 0em;\n}\n\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 0 auto;\n  flex: 0 0 auto;\n  display: block;\n  float: none;\n  margin: 0em;\n  padding: 0em;\n  max-height: '';\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: 0.125rem;\n  border: none;\n}\n\n.ui.items > .item > .image:only-child > img {\n  border-radius: 0rem;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 1 auto;\n  flex: 1 1 auto;\n  background: none;\n  margin: 0em;\n  padding: 0em;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  font-size: 1em;\n  border: none;\n  border-radius: 0em;\n}\n\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: auto;\n  display: block;\n  margin-left: 0em;\n  -ms-flex-item-align: top;\n  align-self: top;\n  padding-left: 1.5em;\n}\n\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: -0.21425em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Default Header Size */\n\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: 1.28571429em;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  -ms-flex-item-align: middle;\n  align-self: middle;\n  width: '';\n}\n\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: '';\n  height: '';\n  border-radius: 500rem;\n}\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: 0.6em;\n  max-width: auto;\n  font-size: 1em;\n  line-height: 1.4285em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em 0.5em;\n}\n\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: 0.5em 0em 0.5em;\n  font-size: 1em;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.6);\n}\n\n.ui.items > .item .meta * {\n  margin-right: 0.3em;\n}\n\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: 0.3em;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n\n.ui.items > .item > .content a:not(.ui) {\n  color: '';\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content a:not(.ui):hover {\n  color: '';\n}\n\n/* Header */\n\n.ui.items > .item > .content > a.header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.items > .item > .content > a.header:hover {\n  color: #1e70bf;\n}\n\n/* Meta */\n\n.ui.items > .item .meta > a:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: 1;\n  color: #FFB70A;\n}\n\n.ui.items > .item > .content .active.favorite.icon {\n  color: #FFE623;\n}\n\n/*-----Like----- */\n\n/* Icon */\n\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: 0.75;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n.ui.items > .item > .content .like.icon:hover {\n  opacity: 1;\n  color: #FF2733;\n}\n\n.ui.items > .item > .content .active.like.icon {\n  color: #FF2733;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: block;\n  position: relative;\n  background: none;\n  margin: 0.5rem 0em 0em;\n  width: 100%;\n  padding: 0em 0em 0em;\n  top: 0em;\n  left: 0em;\n  color: rgba(0, 0, 0, 0.4);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n  border-top: none;\n}\n\n.ui.items > .item .extra > * {\n  margin: 0.25rem 0.5rem 0.25rem 0em;\n}\n\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: 0.25rem 0em 0.25rem 0.5rem;\n}\n\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n/*******************************\n          Responsive\n*******************************/\n\n/* Default Image Width */\n\n.ui.items > .item > .image:not(.ui) {\n  width: 175px;\n}\n\n/* Tablet Only */\n\n@media only screen and (min-width: 768px) and (max-width: 991px) {\n  .ui.items > .item {\n    margin: 1em 0em;\n  }\n\n  .ui.items > .item > .image:not(.ui) {\n    width: 150px;\n  }\n\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em 1em;\n  }\n}\n\n/* Mobile Only */\n\n@media only screen and (max-width: 767px) {\n  .ui.items:not(.unstackable) > .item {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n    margin: 2em 0em;\n  }\n\n  .ui.items:not(.unstackable) > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n\n  .ui.items:not(.unstackable) > .item > .image,\n  .ui.items:not(.unstackable) > .item > .image > img {\n    max-width: 100% !important;\n    width: auto !important;\n    max-height: 250px !important;\n  }\n\n  .ui.items:not(.unstackable) > .item > .image + .content {\n    display: block;\n    padding: 1.5em 0em 0em;\n  }\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  -ms-flex-item-align: start;\n  align-self: flex-start;\n}\n\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  -ms-flex-item-align: center;\n  align-self: center;\n}\n\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  -ms-flex-item-align: end;\n  align-self: flex-end;\n}\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: 2em 0em;\n}\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  margin: 0em;\n  padding: 1em 0em;\n}\n\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: 0em !important;\n  padding-top: 0em !important;\n}\n\n.ui.divided.items > .item:last-child {\n  margin-bottom: 0em !important;\n  padding-bottom: 0em !important;\n}\n\n/* Relaxed Divided */\n\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: 1.5em 0em;\n}\n\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: 2em 0em;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: #1e70bf;\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: 1em;\n}\n\n/*---------------\n   Unstackable\n----------------*/\n\n@media only screen and (max-width: 767px) {\n  .ui.unstackable.items > .item > .image,\n  .ui.unstackable.items > .item > .image > img {\n    width: 125px !important;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Statistic\n*******************************/\n\n/* Standalone */\n\n.ui.statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 1em 0em;\n  max-width: auto;\n}\n\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em 1.5em;\n}\n\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Group\n*******************************/\n\n/* Grouped */\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-align: start;\n  -ms-flex-align: start;\n  align-items: flex-start;\n  -ms-flex-wrap: wrap;\n  flex-wrap: wrap;\n}\n\n.ui.statistics > .statistic {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em 1.5em 2em;\n  max-width: auto;\n}\n\n.ui.statistics {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1em -1.5em -2em;\n}\n\n/* Clearing */\n\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 4rem;\n  font-weight: normal;\n  line-height: 1em;\n  color: #1B1C1D;\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n  text-transform: uppercase;\n  text-align: center;\n}\n\n/* Top Label */\n\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: 0rem;\n}\n\n/* Bottom Label */\n\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: 0rem;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: 1em;\n  min-height: 2em;\n  font-weight: bold;\n  text-align: center;\n}\n\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: 3rem;\n  vertical-align: baseline;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n      Count\n---------------*/\n\n.ui.ten.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.ten.statistics .statistic {\n  min-width: 10%;\n  margin: 0em 0em 2em;\n}\n\n.ui.nine.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.nine.statistics .statistic {\n  min-width: 11.11111111%;\n  margin: 0em 0em 2em;\n}\n\n.ui.eight.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.eight.statistics .statistic {\n  min-width: 12.5%;\n  margin: 0em 0em 2em;\n}\n\n.ui.seven.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.seven.statistics .statistic {\n  min-width: 14.28571429%;\n  margin: 0em 0em 2em;\n}\n\n.ui.six.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.six.statistics .statistic {\n  min-width: 16.66666667%;\n  margin: 0em 0em 2em;\n}\n\n.ui.five.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.five.statistics .statistic {\n  min-width: 20%;\n  margin: 0em 0em 2em;\n}\n\n.ui.four.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.four.statistics .statistic {\n  min-width: 25%;\n  margin: 0em 0em 2em;\n}\n\n.ui.three.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.three.statistics .statistic {\n  min-width: 33.33333333%;\n  margin: 0em 0em 2em;\n}\n\n.ui.two.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.two.statistics .statistic {\n  min-width: 50%;\n  margin: 0em 0em 2em;\n}\n\n.ui.one.statistics {\n  margin: 0em 0em -2em;\n}\n\n.ui.one.statistics .statistic {\n  min-width: 100%;\n  margin: 0em 0em 2em;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n}\n\n.ui.horizontal.statistics {\n  -webkit-box-orient: vertical;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: column;\n  flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n\n.ui.horizontal.statistics .statistic {\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n  -webkit-box-align: center;\n  -ms-flex-align: center;\n  align-items: center;\n  max-width: none;\n  margin: 1em 0em;\n}\n\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: 1.18em;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em 0.75em;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: #DB2828;\n}\n\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: #F2711C;\n}\n\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: #FBBD08;\n}\n\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: #B5CC18;\n}\n\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: #21BA45;\n}\n\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: #00B5AD;\n}\n\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: #2185D0;\n}\n\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: #6435C9;\n}\n\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: #A333C8;\n}\n\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: #E03997;\n}\n\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: #A5673F;\n}\n\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: #767676;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: #FFFFFF;\n}\n\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: #FF695E;\n}\n\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: #FF851B;\n}\n\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: #FFE21F;\n}\n\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: #D9E778;\n}\n\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: #2ECC40;\n}\n\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: #6DFFFF;\n}\n\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: #54C8FF;\n}\n\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: #A291FB;\n}\n\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: #DC73FF;\n}\n\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: #FF8EDF;\n}\n\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: #D67C1C;\n}\n\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: #DCDDDE;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: 0em 2em 1em 0em;\n}\n\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: 0em 0em 1em 2em;\n}\n\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: 1.5rem !important;\n}\n\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: 1.5rem !important;\n}\n\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Tiny */\n\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Small */\n\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: 3rem !important;\n}\n\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: 2rem !important;\n}\n\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: 1rem !important;\n}\n\n/* Medium */\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: 4rem !important;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: 3rem !important;\n}\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: 2rem !important;\n}\n\n/* Large */\n\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: 5rem !important;\n}\n\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: 4rem !important;\n}\n\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/* Huge */\n\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: 6rem !important;\n}\n\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: 5rem !important;\n}\n\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: 2.5rem !important;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n    User Variable Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n\n.ui.accordion .accordion {\n  margin: 1em 0em 0em;\n  padding: 0em;\n}\n\n/* Title */\n\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n\n.ui.accordion .title:not(.ui) {\n  padding: 0.5em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Content */\n\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: '';\n  padding: 0.5em 0em 1em;\n}\n\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: inline-block;\n  float: none;\n  opacity: 1;\n  width: 1.25em;\n  height: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n  padding: 0em;\n  font-size: 1em;\n  -webkit-transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: opacity 0.1s ease, -webkit-transform 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease;\n  transition: transform 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease;\n  vertical-align: baseline;\n  -webkit-transform: none;\n  transform: none;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Menu */\n\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: 0em;\n}\n\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: right;\n  margin: 0.21425em 0em 0em 1em;\n  -webkit-transform: rotate(180deg);\n  transform: rotate(180deg);\n}\n\n/* Header */\n\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: 1em;\n  margin: 0em 0.25rem 0em 0rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  -webkit-transform: rotate(90deg);\n  transform: rotate(90deg);\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: 600px;\n}\n\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: 0.28571429rem;\n  background: #FFFFFF;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15);\n}\n\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: 0em;\n  padding: 0.75em 1em;\n  color: rgba(0, 0, 0, 0.4);\n  font-weight: bold;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  -webkit-transition: background 0.1s ease, color 0.1s ease;\n  transition: background 0.1s ease, color 0.1s ease;\n}\n\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n/* Content */\n\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n.ui.styled.accordion .accordion .content {\n  padding: 0em;\n  padding: 0.5em 1em 1.5em;\n}\n\n/* Hover */\n\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Active */\n\n.ui.styled.accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.styled.accordion .accordion .active.title {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: rgba(255, 255, 255, 0.9);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Accordion';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Checkbox\n*******************************/\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n  min-height: 17px;\n  font-size: 1rem;\n  line-height: 17px;\n  min-width: 17px;\n}\n\n/* HTML Checkbox */\n\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: 17px;\n  height: 17px;\n}\n\n/*--------------\n      Box\n---------------*/\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: 1.85714em;\n  outline: none;\n  font-size: 1em;\n}\n\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  content: '';\n  background: #FFFFFF;\n  border-radius: 0.21428571rem;\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  border: 1px solid #D4D4D5;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: 14px;\n  top: 0px;\n  left: 0px;\n  width: 17px;\n  height: 17px;\n  text-align: center;\n  opacity: 0;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease;\n  transition: border 0.1s ease, opacity 0.1s ease, transform 0.1s ease, box-shadow 0.1s ease, -webkit-transform 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Inside */\n\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-transition: color 0.1s ease;\n  transition: color 0.1s ease;\n}\n\n/* Outside */\n\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n/*******************************\n           States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: #F9FAFB;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input:active ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n.ui.checkbox input:focus ~ label {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: #FFFFFF;\n  border-color: rgba(34, 36, 38, 0.35);\n}\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: 1;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before {\n  background: #FFFFFF;\n  border-color: #96C8DA;\n}\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: 0.5;\n  color: #000000;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: 15px;\n}\n\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: 1.85714em;\n}\n\n/* Box */\n\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  -webkit-transform: none;\n  transform: none;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  top: 1px;\n  left: 0px;\n}\n\n/* Bullet */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: 15px;\n  height: 15px;\n  line-height: 15px;\n}\n\n/* Radio Checkbox */\n\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: 1px;\n  left: 0px;\n  width: 15px;\n  height: 15px;\n  border-radius: 500rem;\n  -webkit-transform: scale(0.46666667);\n  transform: scale(0.46666667);\n  background-color: rgba(0, 0, 0, 0.87);\n}\n\n/* Focus */\n\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Indeterminate */\n\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/* Active Focus */\n\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: #FFFFFF;\n}\n\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: 1.25rem;\n}\n\n/* Input */\n\n.ui.slider.checkbox input {\n  width: 3.5rem;\n  height: 1.25rem;\n}\n\n/* Label */\n\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: 4.5rem;\n  line-height: 1rem;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/* Line */\n\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n  top: 0.4rem;\n  background-color: rgba(0, 0, 0, 0.05);\n  width: 3.5rem;\n  height: 0.21428571rem;\n  -webkit-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease;\n  transition: background 0.3s ease;\n}\n\n/* Handle */\n\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: -0.25rem;\n  left: 0em;\n  -webkit-transform: none;\n  transform: none;\n  border-radius: 500rem;\n  -webkit-transition: left 0.3s ease;\n  transition: left 0.3s ease;\n}\n\n/* Focus */\n\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: rgba(0, 0, 0, 0.8);\n}\n\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: rgba(0, 0, 0, 0.15);\n}\n\n/* Active */\n\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: #545454 !important;\n}\n\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: 2rem;\n}\n\n/* Active Focus */\n\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: #000000 !important;\n}\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: 1.5rem;\n}\n\n/* Input */\n\n.ui.toggle.checkbox input {\n  width: 3.5rem;\n  height: 1.5rem;\n}\n\n/* Label */\n\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: 1.5rem;\n  padding-left: 4.5rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.toggle.checkbox label {\n  padding-top: 0.15em;\n}\n\n/* Switch */\n\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  -webkit-transform: none;\n  transform: none;\n  border: none;\n  top: 0rem;\n  background: rgba(0, 0, 0, 0.05);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  width: 3.5rem;\n  height: 1.5rem;\n  border-radius: 500rem;\n}\n\n/* Handle */\n\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: #FFFFFF -webkit-gradient(linear, left top, left bottom, from(transparent), to(rgba(0, 0, 0, 0.05)));\n  background: #FFFFFF -webkit-linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  background: #FFFFFF linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n  border: none;\n  -webkit-box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 1px 2px 0 rgba(34, 36, 38, 0.15), 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  width: 1.5rem;\n  height: 1.5rem;\n  top: 0rem;\n  left: 0em;\n  border-radius: 500rem;\n  -webkit-transition: background 0.3s ease, left 0.3s ease;\n  transition: background 0.3s ease, left 0.3s ease;\n}\n\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: -0.05rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Focus */\n\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Hover */\n\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: rgba(0, 0, 0, 0.15);\n  border: none;\n}\n\n/* Active */\n\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: #2185D0 !important;\n}\n\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: 2.15rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Active Focus */\n\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: rgba(0, 0, 0, 0.95) !important;\n}\n\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: #0d71bb !important;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: 3.5rem;\n}\n\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: 3.5rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype');\n}\n\n/* Checkmark */\n\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(body) {\n  position: relative;\n}\n\n.ui.dimmer {\n  display: none;\n  position: absolute;\n  top: 0em !important;\n  left: 0em !important;\n  width: 100%;\n  height: 100%;\n  text-align: center;\n  vertical-align: middle;\n  background-color: rgba(0, 0, 0, 0.85);\n  opacity: 0;\n  line-height: 1;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n  -webkit-animation-duration: 0.5s;\n  animation-duration: 0.5s;\n  -webkit-transition: background-color 0.5s linear;\n  transition: background-color 0.5s linear;\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/* Dimmer Content */\n\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.dimmer > .content > * {\n  display: table-cell;\n  vertical-align: middle;\n  color: #FFFFFF;\n}\n\n/* Loose Coupling */\n\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/* Scrollbars */\n\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-track {\n  background: rgba(255, 255, 255, 0.1);\n}\n\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {\n  background: rgba(255, 255, 255, 0.25);\n}\n\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {\n  background: rgba(255, 255, 255, 0.15);\n}\n\n.ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {\n  background: rgba(255, 255, 255, 0.35);\n}\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: hidden;\n}\n\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: 1;\n}\n\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: fixed;\n  -webkit-transform-style: '';\n  transform-style: '';\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transform-origin: center center;\n  transform-origin: center center;\n}\n\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\n\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(0px) grayscale(0);\n  filter: blur(0px) grayscale(0);\n  -webkit-transition: 800ms -webkit-filter ease;\n  transition: 800ms -webkit-filter ease;\n  transition: 800ms filter ease;\n  transition: 800ms filter ease, 800ms -webkit-filter ease;\n}\n\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  -webkit-filter: blur(5px) grayscale(0.7);\n  filter: blur(5px) grayscale(0.7);\n}\n\n/* Dimmer Color */\n\n.blurring.dimmable > .dimmer {\n  background-color: rgba(0, 0, 0, 0.6);\n}\n\n.blurring.dimmable > .inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.6);\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n.ui.inverted.dimmer > .content > * {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: rgba(0, 0, 0, 0);\n}\n\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: rgba(0, 0, 0, 0.85);\n  z-index: 1;\n}\n\n.ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0);\n}\n\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: rgba(255, 255, 255, 0.85);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: -webkit-max-content;\n  min-width: -moz-max-content;\n  min-width: max-content;\n  margin: 0em;\n  padding: 0em 0em;\n  background: #FFFFFF;\n  font-size: 1em;\n  text-shadow: none;\n  text-align: left;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n  z-index: 11;\n  will-change: transform, opacity;\n}\n\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: 0.85714286em;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: right;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: 1em;\n}\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  -webkit-transition: none;\n  transition: none;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: none;\n  height: auto;\n  text-align: left;\n  border-top: none;\n  line-height: 1em;\n  color: rgba(0, 0, 0, 0.87);\n  padding: 0.78571429rem 1.14285714rem !important;\n  font-size: 1rem;\n  text-transform: none;\n  font-weight: normal;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  -webkit-touch-callout: none;\n}\n\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: 1em !important;\n}\n\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: 1em !important;\n}\n\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: 0em;\n}\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: 1rem 0rem 0.75rem;\n  padding: 0em 1.14285714rem;\n  color: rgba(0, 0, 0, 0.85);\n  font-size: 0.78571429em;\n  font-weight: bold;\n  text-transform: uppercase;\n}\n\n.ui.dropdown .menu > .divider {\n  border-top: 1px solid rgba(34, 36, 38, 0.1);\n  height: 0em;\n  margin: 0.5em 0em;\n}\n\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  margin: 1.14285714rem 0.78571429rem;\n  min-width: 10rem;\n}\n\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: 0.5em 1em;\n}\n\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: 0.5em;\n  padding-bottom: 0.5em;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: right;\n  margin: 0em 0em 0em 1em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n  font-weight: normal;\n}\n\n.ui.dropdown .menu > .message:not(.ui) {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: 0% !important;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em -0.5em !important;\n  border-radius: 0.28571429rem !important;\n  z-index: 21 !important;\n}\n\n/* Hide Arrow */\n\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n/* Icons / Flags / Labels / Image */\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: 0em;\n}\n\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-top: 0em;\n}\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  margin-left: 0em;\n  float: none;\n  margin-right: 0.78571429rem;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  margin-top: -0.5em;\n  margin-bottom: -0.5em;\n  max-height: 2em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n/* Remove Menu Item Divider */\n\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Dropdown Menu */\n\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n/* No Margin On Icon Button */\n\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n/* Displays like a select box */\n\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  -webkit-transform: rotateZ(0deg);\n  transform: rotateZ(0deg);\n  min-width: 14em;\n  min-height: 2.71428571em;\n  background: #FFFFFF;\n  display: inline-block;\n  padding: 0.78571429em 2.1em 0.78571429em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: width 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease;\n  transition: box-shadow 0.1s ease, width 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: 10;\n}\n\nselect.ui.dropdown {\n  height: 38px;\n  padding: 0.5em;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  visibility: visible;\n}\n\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: 1.21428571em;\n  top: 0.78571429em;\n  right: 1em;\n  z-index: 3;\n  margin: -0.78571429em;\n  padding: 0.91666667em;\n  opacity: 0.8;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n/* Compact */\n\n.ui.compact.selection.dropdown {\n  min-width: 0px;\n}\n\n/*  Selection Menu */\n\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -1px;\n  min-width: calc(100% +  2px );\n  width: calc(100% +  2px );\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: 0.78571429rem 1.14285714rem;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.selection.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.selection.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.selection.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.selection.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/* Menu Item */\n\n.ui.selection.dropdown .menu > .item {\n  border-top: 1px solid #FAFAFA;\n  padding: 0.78571429rem 1.14285714rem !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n\n.ui.selection.dropdown:hover {\n  border-color: rgba(34, 36, 38, 0.35);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n/* Active */\n\n.ui.selection.active.dropdown {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Focus */\n\n.ui.selection.dropdown:focus {\n  border-color: #96C8DA;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.selection.dropdown:focus .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible */\n\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: normal;\n  color: rgba(0, 0, 0, 0.8);\n}\n\n/* Visible Hover */\n\n.ui.selection.active.dropdown:hover {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.selection.active.dropdown:hover .menu {\n  border-color: #96C8DA;\n  -webkit-box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 3px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Dropdown Icon */\n\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: 1;\n  z-index: 3;\n}\n\n/* Connecting Border */\n\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n/* Empty Connecting Border */\n\n.ui.active.empty.selection.dropdown {\n  border-radius: 0.28571429rem !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n/* Search Selection */\n\n.ui.search.dropdown {\n  min-width: '';\n}\n\n/* Search Dropdown */\n\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: 1px;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: 1px;\n  z-index: 3;\n}\n\n/* Search Selection */\n\n.ui.search.selection.dropdown > input.search {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n}\n\n/* Used to size multi select input to character width */\n\n.ui.search.selection.dropdown > span.sizer {\n  line-height: 1.21428571em;\n  padding: 0.67857143em 2.1em 0.67857143em 1em;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: 0.45;\n}\n\n.ui.active.search.dropdown input.search:focus + .text {\n  color: rgba(115, 115, 115, 0.87) !important;\n}\n\n/* Search Menu */\n\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.search.dropdown .menu {\n    max-height: 8.01428571rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.search.dropdown .menu {\n    max-height: 10.68571429rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.search.dropdown .menu {\n    max-height: 16.02857143rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.search.dropdown .menu {\n    max-height: 21.37142857rem;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n/* Multiple Selection */\n\n.ui.multiple.dropdown {\n  padding: 0.22619048em 2.1em 0.22619048em 0.35714286em;\n}\n\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n\n.ui.multiple.dropdown > .label {\n  -webkit-user-select: none;\n  -moz-user-select: none;\n  -ms-user-select: none;\n  user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: 1em;\n  padding: 0.35714286em 0.78571429em;\n  margin: 0.14285714rem 0.28571429rem 0.14285714rem 0em;\n  -webkit-box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n  box-shadow: 0px 0px 0px 1px rgba(34, 36, 38, 0.15) inset;\n}\n\n/* Dropdown Icon */\n\n.ui.multiple.dropdown .dropdown.icon {\n  margin: '';\n  padding: '';\n}\n\n/* Text */\n\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: 0.14285714em !important;\n}\n\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n/* Prompt Text */\n\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  line-height: 1.21428571em;\n}\n\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: 0.45238095em 0em 0.45238095em 0.64285714em;\n  width: 2.2em;\n  line-height: 1.21428571em;\n}\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: inherit;\n}\n\n.ui.inline.dropdown .dropdown.icon {\n  margin: 0em 0.5em 0em 0.21428571em;\n  vertical-align: baseline;\n}\n\n.ui.inline.dropdown > .text {\n  font-weight: bold;\n}\n\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: 0.21428571em;\n  border-radius: 0.28571429rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Active\n----------------------*/\n\n/* Menu Item Active */\n\n.ui.dropdown .menu .active.item {\n  background: transparent;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.95);\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  z-index: 12;\n}\n\n/*--------------------\n        Hover\n----------------------*/\n\n/* Menu Item Hover */\n\n.ui.dropdown .menu > .item:hover {\n  background: rgba(0, 0, 0, 0.05);\n  color: rgba(0, 0, 0, 0.95);\n  z-index: 13;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: 1em !important;\n}\n\n.ui.loading.selection.dropdown > i.icon {\n  padding: 1.5em 1.28571429em !important;\n}\n\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: dropdown-spin 0.6s linear;\n  animation: dropdown-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n}\n\n/* Coupling */\n\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n\n@-webkit-keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n@keyframes dropdown-spin {\n  from {\n    -webkit-transform: rotate(0deg);\n    transform: rotate(0deg);\n  }\n\n  to {\n    -webkit-transform: rotate(360deg);\n    transform: rotate(360deg);\n  }\n}\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: rgba(191, 191, 191, 0.87);\n}\n\n.ui.dropdown:not(.button) > input:focus + .default.text,\n.ui.default.dropdown:not(.button) > input:focus + .text {\n  color: rgba(115, 115, 115, 0.87);\n}\n\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  -webkit-transition: none;\n  transition: none;\n}\n\n/* Used To Check Position */\n\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n.ui.dropdown > .loading.menu {\n  left: 0px !important;\n  right: auto !important;\n}\n\n.ui.dropdown > .menu .loading.menu {\n  left: 100% !important;\n  right: auto !important;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n/* Selected Item */\n\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: rgba(0, 0, 0, 0.03);\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n/* Filtered Item */\n\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: #9F3A38;\n}\n\n.ui.selection.dropdown.error {\n  background: #FFF6F6;\n  border-color: #E0B4B4;\n}\n\n.ui.selection.dropdown.error:hover {\n  border-color: #E0B4B4;\n}\n\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: #E0B4B4;\n}\n\n.ui.dropdown.error > .menu > .item {\n  color: #9F3A38;\n}\n\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: #E0B4B4;\n}\n\n/* Item Hover */\n\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: #FFF2F2;\n}\n\n/* Item Active */\n\n.ui.dropdown.error > .menu .active.item {\n  background-color: #FDCFCF;\n}\n\n/*--------------------\n        Disabled\n----------------------*/\n\n/* Disabled */\n\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: 0.45;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Direction\n---------------*/\n\n/* Flyout Direction */\n\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n/* Default Side (Right) */\n\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/* Leftward Opening Menu */\n\n.ui.dropdown > .left.menu {\n  left: auto !important;\n  right: 0px !important;\n}\n\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto;\n  right: 100%;\n  margin: 0em -0.5em 0em 0em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: left;\n  margin: 0em 0em 0em 0em;\n}\n\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: 1em;\n  margin-right: 0em;\n}\n\n/*--------------\n     Upward\n---------------*/\n\n/* Upward Main Menu */\n\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Upward Sub Menu */\n\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em !important;\n}\n\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/* Selection */\n\n.ui.upward.selection.dropdown .menu {\n  border-top-width: 1px !important;\n  border-bottom-width: 0px !important;\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n.ui.upward.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n}\n\n/* Active Upward */\n\n.ui.active.upward.selection.dropdown {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Upward */\n\n.ui.upward.selection.dropdown.visible {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem !important;\n}\n\n/* Visible Hover Upward */\n\n.ui.upward.active.selection.dropdown:hover {\n  -webkit-box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n  box-shadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n}\n\n.ui.upward.active.selection.dropdown:hover .menu {\n  -webkit-box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n  box-shadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/*  Selection Menu */\n\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: none;\n}\n\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n\n@media all and (-ms-high-contrast: none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: calc(100% -  17px );\n  }\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 10.28571429rem;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 15.42857143rem;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: 20.57142857rem;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  -webkit-transition: opacity 0.1s ease;\n  transition: opacity 0.1s ease;\n}\n\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15) !important;\n  border-radius: 0.28571429rem !important;\n}\n\n.ui.floating.dropdown > .menu {\n  margin-top: 0.5em !important;\n  border-radius: 0.28571429rem !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  width: 0.5em;\n  height: 0.5em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  background: #FFFFFF;\n  z-index: 2;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 50%;\n  margin: 0em 0em 0em -0.25em;\n}\n\n/* Top Left Pointing */\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: 1em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Top Right Pointing */\n\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: 1em 0em 0em;\n}\n\n.ui.top.pointing.dropdown > .left.menu:after,\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: -0.25em;\n  left: auto !important;\n  right: 1em !important;\n  margin: 0em;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n}\n\n/* Left Pointing */\n\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(-45deg);\n  transform: rotate(-45deg);\n}\n\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n  transform: rotate(135deg);\n}\n\n/* Right Pointing */\n\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: -0.25em;\n  margin: 0em 0em 0em 0em;\n  -webkit-transform: rotate(135deg);\n  transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em 1em;\n}\n\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: -0.25em;\n  right: auto;\n  margin: 0em;\n  -webkit-transform: rotate(-135deg);\n  transform: rotate(-135deg);\n}\n\n/* Reverse Sub-Menu Direction */\n\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: 1em;\n  right: auto;\n}\n\n/* Bottom Right */\n\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: 1em;\n}\n\n/* Upward pointing */\n\n.ui.pointing.upward.dropdown .menu,\n.ui.top.pointing.upward.dropdown .menu {\n  top: auto !important;\n  bottom: 100% !important;\n  margin: 0em 0em 0.78571429rem;\n  border-radius: 0.28571429rem;\n}\n\n.ui.pointing.upward.dropdown .menu:after,\n.ui.top.pointing.upward.dropdown .menu:after {\n  top: 100% !important;\n  bottom: auto !important;\n  -webkit-box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 1px 1px 0px 0px rgba(34, 36, 38, 0.15);\n  margin: -0.25em 0em 0em;\n}\n\n/* Right Pointing Upward */\n\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 1em 0em 0em;\n}\n\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/* Left Pointing Upward */\n\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 0em 1em;\n}\n\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 1em 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: -1px -1px 0px 0px rgba(34, 36, 38, 0.15);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/* Dropdown Carets */\n\n@font-face {\n  font-family: 'Dropdown';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da' ;\n}\n\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\" ;\n}\n\n/* Vertical Menu Dropdown */\n\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\" ;\n}\n\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: #DCDDDE;\n  padding-bottom: 56.25%;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 0.5;\n  -webkit-transition: opacity 0.5s ease;\n  transition: opacity 0.5s ease;\n}\n\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  -webkit-transform: translateX(-50%) translateY(-50%);\n  transform: translateX(-50%) translateY(-50%);\n  color: #FFFFFF;\n  font-size: 6rem;\n  text-shadow: 0px 2px 10px rgba(34, 36, 38, 0.2);\n  -webkit-transition: opacity 0.5s ease, color 0.5s ease;\n  transition: opacity 0.5s ease, color 0.5s ease;\n  z-index: 10;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: -webkit-radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  background: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n  opacity: 1;\n}\n\n.ui.embed .icon:hover:before {\n  color: #FFFFFF;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n\n.ui.active.embed > .embed {\n  display: block;\n}\n\n/*******************************\n        Video Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: 100%;\n}\n\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: 75%;\n}\n\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: 56.25%;\n}\n\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: 42.85714286%;\n}\n/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: 1001;\n  top: 50%;\n  left: 50%;\n  text-align: left;\n  background: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  box-shadow: 1px 3px 3px 0px rgba(0, 0, 0, 0.2), 1px 3px 15px 2px rgba(0, 0, 0, 0.2);\n  -webkit-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n  border-radius: 0.28571429rem;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: 0.28571429rem;\n  border-top-right-radius: 0.28571429rem;\n}\n\n.ui.modal > :last-child {\n  border-bottom-left-radius: 0.28571429rem;\n  border-bottom-right-radius: 0.28571429rem;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: -2.5rem;\n  right: -2.5rem;\n  z-index: 1;\n  opacity: 0.8;\n  font-size: 1.25em;\n  color: #FFFFFF;\n  width: 2.25rem;\n  height: 2.25rem;\n  padding: 0.625rem 0rem 0rem 0rem;\n}\n\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  background: #FFFFFF;\n  margin: 0em;\n  padding: 1.25rem 1.5rem;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  color: rgba(0, 0, 0, 0.85);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.15);\n}\n\n.ui.modal > .header:not(.ui) {\n  font-size: 1.42857143rem;\n  line-height: 1.28571429em;\n  font-weight: bold;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: 1em;\n  line-height: 1.4;\n  padding: 1.5rem;\n  background: #FFFFFF;\n}\n\n.ui.modal > .image.content {\n  display: -webkit-box;\n  display: -ms-flexbox;\n  display: flex;\n  -webkit-box-orient: horizontal;\n  -webkit-box-direction: normal;\n  -ms-flex-direction: row;\n  flex-direction: row;\n}\n\n/* Image */\n\n.ui.modal > .content > .image {\n  display: block;\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  width: '';\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"top aligned\"] {\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > [class*=\"middle aligned\"] {\n  -ms-flex-item-align: middle;\n  align-self: middle;\n}\n\n.ui.modal > [class*=\"stretched\"] {\n  -ms-flex-item-align: stretch;\n  align-self: stretch;\n}\n\n/* Description */\n\n.ui.modal > .content > .description {\n  display: block;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  min-width: 0px;\n  -ms-flex-item-align: top;\n  align-self: top;\n}\n\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  -webkit-box-flex: 0;\n  -ms-flex: 0 1 auto;\n  flex: 0 1 auto;\n  min-width: '';\n  width: auto;\n  padding-left: 2em;\n}\n\n/*rtl:ignore*/\n\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: 8rem;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: #F9FAFB;\n  padding: 1rem 1rem;\n  border-top: 1px solid rgba(34, 36, 38, 0.15);\n  text-align: right;\n}\n\n.ui.modal .actions > .button {\n  margin-left: 0.75em;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n/* Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.modal {\n    width: 850px;\n    margin: 0em 0em 0em -425px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.modal {\n    width: 900px;\n    margin: 0em 0em 0em -450px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.modal {\n    width: 950px;\n    margin: 0em 0em 0em -475px;\n  }\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 991px) {\n  .ui.modal > .header {\n    padding-right: 2.25rem;\n  }\n\n  .ui.modal > .close {\n    top: 1.0535rem;\n    right: 1rem;\n    color: rgba(0, 0, 0, 0.87);\n  }\n}\n\n/* Mobile */\n\n@media only screen and (max-width: 767px) {\n  .ui.modal > .header {\n    padding: 0.75rem 1rem !important;\n    padding-right: 2.25rem !important;\n  }\n\n  .ui.modal > .content {\n    display: block;\n    padding: 1rem !important;\n  }\n\n  .ui.modal > .close {\n    top: 0.5rem !important;\n    right: 0.5rem !important;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .image.content {\n    -webkit-box-orient: vertical;\n    -webkit-box-direction: normal;\n    -ms-flex-direction: column;\n    flex-direction: column;\n  }\n\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: 0rem 0rem 1rem !important;\n  }\n\n  .ui.modal > .content > .image > i.icon {\n    font-size: 5rem;\n    text-align: center;\n  }\n\n  /*rtl:ignore*/\n\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: 1rem 0rem !important;\n    -webkit-box-shadow: none;\n    box-shadow: none;\n  }\n\n  /* Let Buttons Stack */\n\n  .ui.modal > .actions {\n    padding: 1rem 1rem 0rem !important;\n  }\n\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: 1rem;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  -webkit-box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n  box-shadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n  color: #FFFFFF;\n}\n\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n\n.ui.basic.modal > .header {\n  color: #FFFFFF;\n}\n\n.ui.basic.modal > .close {\n  top: 1rem;\n  right: 1.5rem;\n}\n\n.ui.inverted.dimmer > .basic.modal {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Tablet and Mobile */\n\n@media only screen and (max-width: 991px) {\n  .ui.basic.modal > .close {\n    color: #FFFFFF;\n  }\n}\n\n/*******************************\n             States\n*******************************/\n\n.ui.active.modal {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Scrolling\n---------------*/\n\n/* A modal that cannot fit on the page */\n\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: 3.5rem auto !important;\n}\n\n/* undetached scrolling */\n\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: 3.5rem !important;\n}\n\n/* Coupling with Sidebar */\n\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n\n@media only screen and (max-width: 991px) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: 1rem !important;\n    margin-bottom: 1rem !important;\n  }\n}\n\n/* Scrolling Content */\n\n.ui.modal .scrolling.content {\n  max-height: calc(70vh);\n  overflow: auto;\n}\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: 95% !important;\n  left: 2.5% !important;\n  margin: 1em auto;\n}\n\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n\n.ui.fullscreen.modal > .header {\n  padding-right: 2.25rem;\n}\n\n.ui.fullscreen.modal > .close {\n  top: 1.0535rem;\n  right: 1rem;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: 1rem;\n}\n\n/* Mini */\n\n.ui.mini.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Mini Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.mini.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.mini.modal {\n    width: 35.2%;\n    margin: 0em 0em 0em -17.6%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.mini.modal {\n    width: 340px;\n    margin: 0em 0em 0em -170px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.mini.modal {\n    width: 360px;\n    margin: 0em 0em 0em -180px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.mini.modal {\n    width: 380px;\n    margin: 0em 0em 0em -190px;\n  }\n}\n\n/* mini */\n\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Tiny Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.tiny.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.tiny.modal {\n    width: 52.8%;\n    margin: 0em 0em 0em -26.4%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.tiny.modal {\n    width: 510px;\n    margin: 0em 0em 0em -255px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.tiny.modal {\n    width: 540px;\n    margin: 0em 0em 0em -270px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.tiny.modal {\n    width: 570px;\n    margin: 0em 0em 0em -285px;\n  }\n}\n\n/* Small */\n\n.ui.small.modal > .header:not(.ui) {\n  font-size: 1.3em;\n}\n\n/* Small Modal Width */\n\n@media only screen and (max-width: 767px) {\n  .ui.small.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.small.modal {\n    width: 70.4%;\n    margin: 0em 0em 0em -35.2%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.small.modal {\n    width: 680px;\n    margin: 0em 0em 0em -340px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.small.modal {\n    width: 720px;\n    margin: 0em 0em 0em -360px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.small.modal {\n    width: 760px;\n    margin: 0em 0em 0em -380px;\n  }\n}\n\n/* Large Modal Width */\n\n.ui.large.modal > .header {\n  font-size: 1.6em;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.large.modal {\n    width: 95%;\n    margin: 0em 0em 0em -47.5%;\n  }\n}\n\n@media only screen and (min-width: 768px) {\n  .ui.large.modal {\n    width: 88%;\n    margin: 0em 0em 0em -44%;\n  }\n}\n\n@media only screen and (min-width: 992px) {\n  .ui.large.modal {\n    width: 1020px;\n    margin: 0em 0em 0em -510px;\n  }\n}\n\n@media only screen and (min-width: 1200px) {\n  .ui.large.modal {\n    width: 1080px;\n    margin: 0em 0em 0em -540px;\n  }\n}\n\n@media only screen and (min-width: 1920px) {\n  .ui.large.modal {\n    width: 1140px;\n    margin: 0em 0em 0em -570px;\n  }\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: 0.95;\n  position: relative;\n  top: 0em;\n  left: 0px;\n  z-index: 999;\n  min-height: 0em;\n  width: 100%;\n  margin: 0em;\n  padding: 0.75em 1em;\n  background: #555555;\n  -webkit-box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  box-shadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n  font-size: 1rem;\n  text-align: center;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n  -webkit-transition: 0.2s background ease;\n  transition: 0.2s background ease;\n}\n\na.ui.nag {\n  cursor: pointer;\n}\n\n.ui.nag > .title {\n  display: inline-block;\n  margin: 0em 0.5em;\n  color: #FFFFFF;\n}\n\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: 0.4;\n  position: absolute;\n  top: 50%;\n  right: 1em;\n  font-size: 1em;\n  margin: -0.5em 0em 0em;\n  color: #FFFFFF;\n  -webkit-transition: opacity 0.2s ease;\n  transition: opacity 0.2s ease;\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Hover */\n\n.ui.nag:hover {\n  background: #555555;\n  opacity: 1;\n}\n\n.ui.nag .close:hover {\n  opacity: 1;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n  top: auto;\n  bottom: 0em;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: #F3F4F5;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: 0em !important;\n}\n\n.ui.nags .nag:last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.bottom.nags .nag:last-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n  /* Fixes content being squished when inline (moz only) */\n  min-width: -webkit-min-content;\n  min-width: -moz-min-content;\n  min-width: min-content;\n  z-index: 1900;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: 250px;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n}\n\n.ui.popup > .header {\n  padding: 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1.14285714em;\n  line-height: 1.2;\n  font-weight: bold;\n}\n\n.ui.popup > .header + .content {\n  padding-top: 0.5em;\n}\n\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n    Tooltip\n---------------*/\n\n/* Content */\n\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: 1rem;\n  width: 0.71428571em;\n  height: 0.71428571em;\n  background: #FFFFFF;\n  -webkit-transform: rotate(45deg);\n  transform: rotate(45deg);\n  z-index: 2;\n  -webkit-box-shadow: 1px 1px 0px 0px #bababc;\n  box-shadow: 1px 1px 0px 0px #bababc;\n}\n\n/* Popup */\n\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n  font-size: 1rem;\n  border: 1px solid #D4D4D5;\n  line-height: 1.4285em;\n  max-width: none;\n  background: #FFFFFF;\n  padding: 0.833em 1em;\n  font-weight: normal;\n  font-style: normal;\n  color: rgba(0, 0, 0, 0.87);\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  z-index: 1;\n}\n\n/* Default Position (Top Center) */\n\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n/* Animation */\n\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n\n[data-tooltip]:before {\n  opacity: 0;\n  -webkit-transform: rotate(45deg) scale(0) !important;\n  transform: rotate(45deg) scale(0) !important;\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n\n[data-tooltip]:after {\n  opacity: 1;\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n  -webkit-transition: all 0.1s ease;\n  transition: all 0.1s ease;\n}\n\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n\n[data-tooltip]:hover:before {\n  -webkit-transform: rotate(45deg) scale(1) !important;\n  transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  -webkit-transform: translateX(-50%) scale(0) !important;\n  transform: translateX(-50%) scale(0) !important;\n}\n\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  -webkit-transform: translateX(-50%) scale(1) !important;\n  transform: translateX(-50%) scale(1) !important;\n}\n\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  -webkit-transform: translateY(-50%) scale(0) !important;\n  transform: translateY(-50%) scale(0) !important;\n}\n\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  -webkit-transform: translateY(-50%) scale(1) !important;\n  transform: translateY(-50%) scale(1) !important;\n}\n\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  -webkit-transform: scale(0) !important;\n  transform: scale(0) !important;\n}\n\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  -webkit-transform: scale(1) !important;\n  transform: scale(1) !important;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Arrow */\n\n[data-tooltip][data-inverted]:before {\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n/* Arrow Position */\n\n[data-tooltip][data-inverted]:before {\n  background: #1B1C1D;\n}\n\n/* Popup  */\n\n[data-tooltip][data-inverted]:after {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n[data-tooltip][data-inverted]:after .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n/*--------------\n    Position\n---------------*/\n\n/* Top Center */\n\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: #FFFFFF;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Left */\n\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Top Right */\n\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: 0.5em;\n}\n\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: 1em;\n  margin-left: -0.07142857rem;\n  margin-bottom: 0.14285714rem;\n}\n\n/* Bottom Center */\n\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  -webkit-transform: translateX(-50%);\n  transform: translateX(-50%);\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Left */\n\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 1em;\n  margin-left: -0.07142857rem;\n  margin-top: 0.14285714rem;\n}\n\n/* Bottom Right */\n\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: 0.5em;\n}\n\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: 1em;\n  margin-left: -0.14285714rem;\n  margin-top: 0.07142857rem;\n}\n\n/* Left Center */\n\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: 0.5em;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: -0.14285714rem;\n  margin-right: -0.07142857rem;\n}\n\n/* Right Center */\n\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: 0.5em;\n  -webkit-transform: translateY(-50%);\n  transform: translateY(-50%);\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: -0.07142857rem;\n  margin-left: 0.14285714rem;\n}\n\n/* Arrow */\n\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  background: #FFFFFF;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n[data-position~=\"top\"][data-tooltip]:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: #1B1C1D;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: #1B1C1D;\n}\n\n[data-position~=\"bottom\"][data-tooltip]:before {\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n[data-position~=\"bottom\"][data-tooltip]:after {\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n}\n\n[data-position=\"left center\"][data-tooltip]:before {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n[data-position=\"left center\"][data-tooltip]:after {\n  -webkit-transform-origin: right center;\n  transform-origin: right center;\n}\n\n[data-position=\"right center\"][data-tooltip]:before {\n  -webkit-transform-origin: right center;\n  transform-origin: right center;\n}\n\n[data-position=\"right center\"][data-tooltip]:after {\n  -webkit-transform-origin: left center;\n  transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n\n.ui.top.popup {\n  margin: 0em 0em 0.71428571em;\n}\n\n.ui.top.left.popup {\n  -webkit-transform-origin: left bottom;\n  transform-origin: left bottom;\n}\n\n.ui.top.center.popup {\n  -webkit-transform-origin: center bottom;\n  transform-origin: center bottom;\n}\n\n.ui.top.right.popup {\n  -webkit-transform-origin: right bottom;\n  transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n\n.ui.left.center.popup {\n  margin: 0em 0.71428571em 0em 0em;\n  -webkit-transform-origin: right 50%;\n  transform-origin: right 50%;\n}\n\n.ui.right.center.popup {\n  margin: 0em 0em 0em 0.71428571em;\n  -webkit-transform-origin: left 50%;\n  transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n\n.ui.bottom.popup {\n  margin: 0.71428571em 0em 0em;\n}\n\n.ui.bottom.left.popup {\n  -webkit-transform-origin: left top;\n  transform-origin: left top;\n}\n\n.ui.bottom.center.popup {\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n}\n\n.ui.bottom.right.popup {\n  -webkit-transform-origin: right top;\n  transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n/*--- Below ---*/\n\n.ui.bottom.center.popup:before {\n  margin-left: -0.30714286em;\n  top: -0.30714286em;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.left.popup {\n  margin-left: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.bottom.left.popup:before {\n  top: -0.30714286em;\n  left: 1em;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n.ui.bottom.right.popup {\n  margin-right: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.bottom.right.popup:before {\n  top: -0.30714286em;\n  right: 1em;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  -webkit-box-shadow: -1px -1px 0px 0px #bababc;\n  box-shadow: -1px -1px 0px 0px #bababc;\n}\n\n/*--- Above ---*/\n\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: -0.30714286em;\n  left: 50%;\n  margin-left: -0.30714286em;\n}\n\n.ui.top.left.popup {\n  margin-left: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.top.left.popup:before {\n  bottom: -0.30714286em;\n  left: 1em;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n\n.ui.top.right.popup {\n  margin-right: 0em;\n}\n\n/*rtl:rename*/\n\n.ui.top.right.popup:before {\n  bottom: -0.30714286em;\n  right: 1em;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n\n/*rtl:rename*/\n\n.ui.left.center.popup:before {\n  top: 50%;\n  right: -0.30714286em;\n  bottom: auto;\n  left: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: 1px -1px 0px 0px #bababc;\n  box-shadow: 1px -1px 0px 0px #bababc;\n}\n\n/*--- Right Center  ---*/\n\n/*rtl:rename*/\n\n.ui.right.center.popup:before {\n  top: 50%;\n  left: -0.30714286em;\n  bottom: auto;\n  right: auto;\n  margin-top: -0.30714286em;\n  -webkit-box-shadow: -1px 1px 0px 0px #bababc;\n  box-shadow: -1px 1px 0px 0px #bababc;\n}\n\n/* Arrow Color By Location */\n\n.ui.bottom.popup:before {\n  background: #FFFFFF;\n}\n\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: #FFFFFF;\n}\n\n.ui.top.popup:before {\n  background: #FFFFFF;\n}\n\n/* Inverted Arrow Color */\n\n.ui.inverted.bottom.popup:before {\n  background: #1B1C1D;\n}\n\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: #1B1C1D;\n}\n\n.ui.inverted.top.popup:before {\n  background: #1B1C1D;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n/* Immediate Nested Grid */\n\n.ui.popup > .ui.grid:not(.padded) {\n  width: calc(100% + 1.75rem);\n  margin: -0.7rem -0.875rem;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: -1;\n}\n\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n\n.ui.visible.popup {\n  -webkit-transform: translateZ(0px);\n  transform: translateZ(0px);\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: 350px;\n}\n\n.ui[class*=\"very wide\"].popup {\n  max-width: 550px;\n}\n\n@media only screen and (max-width: 767px) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: 250px;\n  }\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Inverted colors  */\n\n.ui.inverted.popup {\n  background: #1B1C1D;\n  color: #FFFFFF;\n  border: none;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.inverted.popup .header {\n  background-color: none;\n  color: #FFFFFF;\n}\n\n.ui.inverted.popup:before {\n  background-color: #1B1C1D;\n  -webkit-box-shadow: none !important;\n  box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.popup {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.popup {\n  font-size: 0.92857143rem;\n}\n\n.ui.popup {\n  font-size: 1rem;\n}\n\n.ui.large.popup {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.popup {\n  font-size: 1.42857143rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: none;\n  margin: 1em 0em 2.5em;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  background: rgba(0, 0, 0, 0.1);\n  padding: 0em;\n  border-radius: 0.28571429rem;\n}\n\n.ui.progress:first-child {\n  margin: 0em 0em 2.5em;\n}\n\n.ui.progress:last-child {\n  margin: 0em 0em 1.5em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Activity Bar */\n\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: relative;\n  width: 0%;\n  min-width: 2em;\n  background: #888888;\n  border-radius: 0.28571429rem;\n  -webkit-transition: width 0.1s ease, background-color 0.1s ease;\n  transition: width 0.1s ease, background-color 0.1s ease;\n}\n\n/* Percent Complete */\n\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: absolute;\n  width: auto;\n  font-size: 0.92857143em;\n  top: 50%;\n  right: 0.5em;\n  left: auto;\n  bottom: auto;\n  color: rgba(255, 255, 255, 0.7);\n  text-shadow: none;\n  margin-top: -0.5em;\n  font-weight: bold;\n  text-align: left;\n}\n\n/* Label */\n\n.ui.progress > .label {\n  position: absolute;\n  width: 100%;\n  font-size: 1em;\n  top: 100%;\n  right: auto;\n  left: 0%;\n  bottom: auto;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-shadow: none;\n  margin-top: 0.2em;\n  text-align: center;\n  -webkit-transition: color 0.4s ease;\n  transition: color 0.4s ease;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/* Indicating */\n\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: #D95C5C;\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: #EFBC72;\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: #E6BB48;\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: #DDC928;\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: #B4D95C;\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: #66DA81;\n}\n\n/* Indicating Label */\n\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Single Digits */\n\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: #D95C5C;\n}\n\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* Indicating Success */\n\n.ui.indicating.progress.success .label {\n  color: #1A531B;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: #21BA45 !important;\n}\n\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.success > .label {\n  color: #1A531B;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: #F2C037 !important;\n}\n\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.warning > .label {\n  color: #794B02;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: #DB2828 !important;\n}\n\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n.ui.progress.error > .label {\n  color: #912D2B;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: 2em;\n}\n\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: #FFFFFF;\n  border-radius: 0.28571429rem;\n  -webkit-animation: progress-active 2s ease infinite;\n  animation: progress-active 2s ease infinite;\n}\n\n@-webkit-keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n@keyframes progress-active {\n  0% {\n    opacity: 0.3;\n    width: 0;\n  }\n\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  -webkit-animation: none !important;\n  animation: none !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: rgba(255, 255, 255, 0.08);\n  border: none;\n}\n\n.ui.inverted.progress .bar {\n  background: #888888;\n}\n\n.ui.inverted.progress .bar > .progress {\n  color: #F9FAFB;\n}\n\n.ui.inverted.progress > .label {\n  color: #FFFFFF;\n}\n\n.ui.inverted.progress.success > .label {\n  color: #21BA45;\n}\n\n.ui.inverted.progress.warning > .label {\n  color: #F2C037;\n}\n\n.ui.inverted.progress.error > .label {\n  color: #DB2828;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* bottom attached */\n\n.ui.progress.attached {\n  background: transparent;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: 0.2rem;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Red */\n\n.ui.red.progress .bar {\n  background-color: #DB2828;\n}\n\n.ui.red.inverted.progress .bar {\n  background-color: #FF695E;\n}\n\n/* Orange */\n\n.ui.orange.progress .bar {\n  background-color: #F2711C;\n}\n\n.ui.orange.inverted.progress .bar {\n  background-color: #FF851B;\n}\n\n/* Yellow */\n\n.ui.yellow.progress .bar {\n  background-color: #FBBD08;\n}\n\n.ui.yellow.inverted.progress .bar {\n  background-color: #FFE21F;\n}\n\n/* Olive */\n\n.ui.olive.progress .bar {\n  background-color: #B5CC18;\n}\n\n.ui.olive.inverted.progress .bar {\n  background-color: #D9E778;\n}\n\n/* Green */\n\n.ui.green.progress .bar {\n  background-color: #21BA45;\n}\n\n.ui.green.inverted.progress .bar {\n  background-color: #2ECC40;\n}\n\n/* Teal */\n\n.ui.teal.progress .bar {\n  background-color: #00B5AD;\n}\n\n.ui.teal.inverted.progress .bar {\n  background-color: #6DFFFF;\n}\n\n/* Blue */\n\n.ui.blue.progress .bar {\n  background-color: #2185D0;\n}\n\n.ui.blue.inverted.progress .bar {\n  background-color: #54C8FF;\n}\n\n/* Violet */\n\n.ui.violet.progress .bar {\n  background-color: #6435C9;\n}\n\n.ui.violet.inverted.progress .bar {\n  background-color: #A291FB;\n}\n\n/* Purple */\n\n.ui.purple.progress .bar {\n  background-color: #A333C8;\n}\n\n.ui.purple.inverted.progress .bar {\n  background-color: #DC73FF;\n}\n\n/* Pink */\n\n.ui.pink.progress .bar {\n  background-color: #E03997;\n}\n\n.ui.pink.inverted.progress .bar {\n  background-color: #FF8EDF;\n}\n\n/* Brown */\n\n.ui.brown.progress .bar {\n  background-color: #A5673F;\n}\n\n.ui.brown.inverted.progress .bar {\n  background-color: #D67C1C;\n}\n\n/* Grey */\n\n.ui.grey.progress .bar {\n  background-color: #767676;\n}\n\n.ui.grey.inverted.progress .bar {\n  background-color: #DCDDDE;\n}\n\n/* Black */\n\n.ui.black.progress .bar {\n  background-color: #1B1C1D;\n}\n\n.ui.black.inverted.progress .bar {\n  background-color: #545454;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: 0.85714286rem;\n}\n\n.ui.tiny.progress .bar {\n  height: 0.5em;\n}\n\n.ui.small.progress {\n  font-size: 0.92857143rem;\n}\n\n.ui.small.progress .bar {\n  height: 1em;\n}\n\n.ui.progress {\n  font-size: 1rem;\n}\n\n.ui.progress .bar {\n  height: 1.75em;\n}\n\n.ui.large.progress {\n  font-size: 1.14285714rem;\n}\n\n.ui.large.progress .bar {\n  height: 2.5em;\n}\n\n.ui.big.progress {\n  font-size: 1.28571429rem;\n}\n\n.ui.big.progress .bar {\n  height: 3.5em;\n}\n\n/*******************************\n            Progress\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: -webkit-inline-box;\n  display: -ms-inline-flexbox;\n  display: inline-flex;\n  white-space: nowrap;\n  vertical-align: baseline;\n}\n\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  -webkit-box-flex: 1;\n  -ms-flex: 1 0 auto;\n  flex: 1 0 auto;\n  cursor: pointer;\n  width: 1.25em;\n  height: auto;\n  -webkit-transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n  transition: opacity 0.1s ease, background 0.1s ease, text-shadow 0.1s ease, color 0.1s ease;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n      Standard\n--------------------*/\n\n/* Inactive Icon */\n\n.ui.rating .icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n}\n\n/* Active Icon */\n\n.ui.rating .active.icon {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/* Selected Icon */\n\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: transparent;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Inactive */\n\n.ui.star.rating .icon {\n  width: 1.25em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none;\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon {\n  background: transparent !important;\n  color: #FFE623 !important;\n  text-shadow: 0px -1px 0px #DDC507, -1px 0px 0px #DDC507, 0px 1px 0px #DDC507, 1px 0px 0px #DDC507 !important;\n}\n\n/* Selected Star */\n\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FFCC00 !important;\n  text-shadow: 0px -1px 0px #E6A200, -1px 0px 0px #E6A200, 0px 1px 0px #E6A200, 1px 0px 0px #E6A200 !important;\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: 1.4em;\n  height: auto;\n  background: transparent;\n  color: rgba(0, 0, 0, 0.15);\n  text-shadow: none !important;\n}\n\n/* Active Heart */\n\n.ui.heart.rating .active.icon {\n  background: transparent !important;\n  color: #FF6D75 !important;\n  text-shadow: 0px -1px 0px #CD0707, -1px 0px 0px #CD0707, 0px 1px 0px #CD0707, 1px 0px 0px #CD0707 !important;\n}\n\n/* Selected Heart */\n\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: transparent !important;\n  color: #FF3000 !important;\n  text-shadow: 0px -1px 0px #AA0101, -1px 0px 0px #AA0101, 0px 1px 0px #AA0101, 1px 0px 0px #AA0101 !important;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n/* disabled rating */\n\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n/* Selected Rating */\n\n.ui.rating.selected .active.icon {\n  opacity: 1;\n}\n\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: 1;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: 0.78571429rem;\n}\n\n.ui.tiny.rating {\n  font-size: 0.85714286rem;\n}\n\n.ui.small.rating {\n  font-size: 0.92857143rem;\n}\n\n.ui.rating {\n  font-size: 1rem;\n}\n\n.ui.large.rating {\n  font-size: 1.14285714rem;\n}\n\n.ui.huge.rating {\n  font-size: 1.42857143rem;\n}\n\n.ui.massive.rating {\n  font-size: 2rem;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src: url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'), url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff');\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Unfilled Star */\n\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n\n/* Active Star */\n\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n\n/* Active */\n\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n  line-height: 1.21428571em;\n  padding: 0.67857143em 1em;\n  font-size: 1em;\n  background: #FFFFFF;\n  border: 1px solid rgba(34, 36, 38, 0.15);\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0em 0em 0em 0em transparent inset;\n  box-shadow: 0em 0em 0em 0em transparent inset;\n  -webkit-transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease;\n  transition: background-color 0.1s ease, color 0.1s ease, box-shadow 0.1s ease, border-color 0.1s ease, -webkit-box-shadow 0.1s ease;\n}\n\n.ui.search .prompt {\n  border-radius: 500rem;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  -webkit-transform-origin: center top;\n  transform-origin: center top;\n  white-space: normal;\n  background: #FFFFFF;\n  margin-top: 0.5em;\n  width: 18em;\n  border-radius: 0.28571429rem;\n  -webkit-box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 2px 4px 0px rgba(34, 36, 38, 0.12), 0px 2px 10px 0px rgba(34, 36, 38, 0.15);\n  border: 1px solid #D4D4D5;\n  z-index: 998;\n}\n\n.ui.search > .results > :first-child {\n  border-radius: 0.28571429rem 0.28571429rem 0em 0em;\n}\n\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em 0.28571429rem 0.28571429rem;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: 1em;\n  padding: 0.85714286em 1.14285714em;\n  color: rgba(0, 0, 0, 0.87);\n  line-height: 1.33;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n}\n\n.ui.search > .results .result:last-child {\n  border-bottom: none !important;\n}\n\n/* Image */\n\n.ui.search > .results .result .image {\n  float: right;\n  overflow: hidden;\n  background: none;\n  width: 5em;\n  height: 3em;\n  border-radius: 0.25em;\n}\n\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: 0em 6em 0em 0em;\n}\n\n.ui.search > .results .result .title {\n  margin: -0.14285714em 0em 0em;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-weight: bold;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result .description {\n  margin-top: 0;\n  font-size: 0.92857143em;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n.ui.search > .results .result .price {\n  float: right;\n  color: #21BA45;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: 1em 1em;\n}\n\n.ui.search > .results > .message .header {\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1rem;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results > .message .description {\n  margin-top: 0.25rem;\n  font-size: 1em;\n  color: rgba(0, 0, 0, 0.87);\n}\n\n/* View All Results */\n\n.ui.search > .results > .action {\n  display: block;\n  border-top: none;\n  background: #F3F4F5;\n  padding: 0.92857143em 1em;\n  color: rgba(0, 0, 0, 0.87);\n  font-weight: bold;\n  text-align: center;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: rgba(34, 36, 38, 0.35);\n  background: #FFFFFF;\n  color: rgba(0, 0, 0, 0.95);\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  margin: -0.64285714em 0em 0em -0.64285714em;\n  width: 1.28571429em;\n  height: 1.28571429em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: #F9FAFB;\n}\n\n.ui.search .action:hover {\n  background: #E0E0E0;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: #F3F4F5;\n}\n\n.ui.category.search > .results .category.active > .name {\n  color: rgba(0, 0, 0, 0.87);\n}\n\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: rgba(34, 36, 38, 0.1);\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n}\n\n.ui.search > .results .result.active .title {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n.ui.search > .results .result.active .description {\n  color: rgba(0, 0, 0, 0.85);\n}\n\n/*******************************\n           Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: 0.28571429rem;\n}\n\n/* Remove input */\n\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: '';\n  top: 0em;\n  right: 0em;\n  -webkit-transition: color 0.1s ease, opacity 0.1s ease;\n  transition: color 0.1s ease, opacity 0.1s ease;\n}\n\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: 0.8;\n  pointer-events: auto;\n}\n\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: 1.85714em;\n}\n\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: 1;\n  color: #DB2828;\n}\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: 28em;\n}\n\n/* Category */\n\n.ui.category.search > .results .category {\n  background: #F3F4F5;\n  -webkit-box-shadow: none;\n  box-shadow: none;\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n}\n\n/* Last Category */\n\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em 0.28571429rem 0em 0em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em 0.28571429rem 0em;\n}\n\n/* Category Result */\n\n.ui.category.search > .results .category .result {\n  background: #FFFFFF;\n  margin-left: 100px;\n  border-left: 1px solid rgba(34, 36, 38, 0.15);\n  border-bottom: 1px solid rgba(34, 36, 38, 0.1);\n  -webkit-transition: background 0.1s ease, border-color 0.1s ease;\n  transition: background 0.1s ease, border-color 0.1s ease;\n  padding: 0.85714286em 1.14285714em;\n}\n\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: none;\n}\n\n/* Category Result Name */\n\n.ui.category.search > .results .category > .name {\n  width: 100px;\n  background: transparent;\n  font-family: 'Lato', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n  font-size: 1em;\n  float: 1em;\n  float: left;\n  padding: 0.4em 1em;\n  font-weight: bold;\n  color: rgba(0, 0, 0, 0.4);\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: 0.78571429em;\n}\n\n.ui.small.search {\n  font-size: 0.92857143em;\n}\n\n.ui.search {\n  font-size: 1em;\n}\n\n.ui.large.search {\n  font-size: 1.14285714em;\n}\n\n.ui.big.search {\n  font-size: 1.28571429em;\n}\n\n.ui.huge.search {\n  font-size: 1.42857143em;\n}\n\n.ui.massive.search {\n  font-size: 1.71428571em;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: inline-block;\n  -webkit-perspective: 2000px;\n  perspective: 2000px;\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n.ui.shape .sides {\n  -webkit-transform-style: preserve-3d;\n  transform-style: preserve-3d;\n}\n\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n  margin: 0em !important;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n.ui.shape .side {\n  display: none;\n}\n\n.ui.shape .side * {\n  -webkit-backface-visibility: visible !important;\n  backface-visibility: visible !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: 15em;\n  height: 15em;\n  padding: 2em;\n  background-color: #E6E6E6;\n  color: rgba(0, 0, 0, 0.87);\n  -webkit-box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n  box-shadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n}\n\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n  text-align: center;\n  -webkit-user-select: text;\n  -moz-user-select: text;\n  -ms-user-select: text;\n  user-select: text;\n}\n\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: 2em;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: 100;\n}\n\n.ui.shape .hidden.side {\n  opacity: 0.6;\n}\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n\n.ui.shape.animating .sides {\n  -webkit-transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out;\n  transition: transform 0.6s ease-in-out, left 0.6s ease-in-out, width 0.6s ease-in-out, height 0.6s ease-in-out, -webkit-transform 0.6s ease-in-out;\n}\n\n.ui.shape.animating .side {\n  -webkit-transition: opacity 0.6s ease-in-out;\n  transition: opacity 0.6s ease-in-out;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sidebar\n*******************************/\n\n/* Sidebar Menu */\n\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: none;\n  transition: none;\n  will-change: transform;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: 102;\n}\n\n/* GPU Layers for Child Elements */\n\n.ui.sidebar > * {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n}\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  -webkit-transform: translate3d(0, -100%, 0);\n  transform: translate3d(0, -100%, 0);\n}\n\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  -webkit-transform: translate3d(0, 100%, 0);\n  transform: translate3d(0, 100%, 0);\n}\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\n\nbody.pushable {\n  background: #545454 !important;\n}\n\n/* Page Context */\n\n.pushable:not(body) {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  will-change: transform;\n  z-index: 101;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 2;\n}\n\nbody.pushable > .pusher {\n  background: #FFFFFF;\n}\n\n/* Pusher should inherit background from context */\n\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: rgba(0, 0, 0, 0.4);\n  overflow: hidden;\n  opacity: 0;\n  -webkit-transition: opacity 500ms;\n  transition: opacity 500ms;\n  will-change: opacity;\n  z-index: 1000;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  -webkit-box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n  box-shadow: 0px 0px 20px rgba(34, 36, 38, 0.15);\n}\n\n/* Visible On Load */\n\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(260px, 0, 0);\n  transform: translate3d(260px, 0, 0);\n}\n\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-260px, 0, 0);\n  transform: translate3d(-260px, 0, 0);\n}\n\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 36px, 0);\n  transform: translate3d(0, 36px, 0);\n}\n\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, -36px, 0);\n  transform: translate3d(0, -36px, 0);\n}\n\n/* opposite sides visible forces content overlay */\n\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Width\n---------------*/\n\n/* Left / Right */\n\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: 150px;\n}\n\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: 60px;\n}\n\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: 260px;\n}\n\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: 350px;\n}\n\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: 475px;\n}\n\n/* Left Visible */\n\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(150px, 0, 0);\n  transform: translate3d(150px, 0, 0);\n}\n\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(60px, 0, 0);\n  transform: translate3d(60px, 0, 0);\n}\n\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(350px, 0, 0);\n  transform: translate3d(350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  -webkit-transform: translate3d(475px, 0, 0);\n  transform: translate3d(475px, 0, 0);\n}\n\n/* Right Visible */\n\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-150px, 0, 0);\n  transform: translate3d(-150px, 0, 0);\n}\n\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-60px, 0, 0);\n  transform: translate3d(-60px, 0, 0);\n}\n\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-350px, 0, 0);\n  transform: translate3d(-350px, 0, 0);\n}\n\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  -webkit-transform: translate3d(-475px, 0, 0);\n  transform: translate3d(-475px, 0, 0);\n}\n\n/*******************************\n          Animations\n*******************************/\n\n/*--------------\n    Overlay\n---------------*/\n\n/* Set-up */\n\n.ui.overlay.sidebar {\n  z-index: 102;\n}\n\n/* Initial */\n\n.ui.left.overlay.sidebar {\n  -webkit-transform: translate3d(-100%, 0%, 0);\n  transform: translate3d(-100%, 0%, 0);\n}\n\n.ui.right.overlay.sidebar {\n  -webkit-transform: translate3d(100%, 0%, 0);\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End - Sidebar */\n\n.ui.visible.left.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.right.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.top.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n.ui.visible.bottom.overlay.sidebar {\n  -webkit-transform: translate3d(0%, 0%, 0);\n  transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  -webkit-transform: none !important;\n  transform: none !important;\n}\n\n/*--------------\n      Push\n---------------*/\n\n/* Initial */\n\n.ui.push.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.push.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.push.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.push.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.push.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n\n.ui.visible.push.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n    Uncover\n---------------*/\n\n/* Initial */\n\n.ui.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  z-index: 1;\n}\n\n/* End */\n\n.ui.visible.uncover.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/*--------------\n   Slide Along\n---------------*/\n\n/* Initial */\n\n.ui.slide.along.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.along.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.right.slide.along.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.top.slide.along.sidebar {\n  -webkit-transform: translate3d(0, -50%, 0);\n  transform: translate3d(0, -50%, 0);\n}\n\n.ui.bottom.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.along.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.along.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Slide Out\n---------------*/\n\n/* Initial */\n\n.ui.slide.out.sidebar {\n  z-index: 1;\n}\n\n/* Sidebar - Initial */\n\n.ui.left.slide.out.sidebar {\n  -webkit-transform: translate3d(50%, 0, 0);\n  transform: translate3d(50%, 0, 0);\n}\n\n.ui.right.slide.out.sidebar {\n  -webkit-transform: translate3d(-50%, 0, 0);\n  transform: translate3d(-50%, 0, 0);\n}\n\n.ui.top.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 50%, 0);\n  transform: translate3d(0%, 50%, 0);\n}\n\n.ui.bottom.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, -50%, 0);\n  transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n\n.ui.animating.slide.out.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n/* End */\n\n.ui.visible.slide.out.sidebar {\n  -webkit-transform: translate3d(0%, 0, 0);\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n/* Initial */\n\n.ui.scale.down.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n  z-index: 102;\n}\n\n/* Sidebar - Initial  */\n\n.ui.left.scale.down.sidebar {\n  -webkit-transform: translate3d(-100%, 0, 0);\n  transform: translate3d(-100%, 0, 0);\n}\n\n.ui.right.scale.down.sidebar {\n  -webkit-transform: translate3d(100%, 0, 0);\n  transform: translate3d(100%, 0, 0);\n}\n\n.ui.top.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, -100%, 0);\n  transform: translate3d(0%, -100%, 0);\n}\n\n.ui.bottom.scale.down.sidebar {\n  -webkit-transform: translate3d(0%, 100%, 0);\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n\n.ui.scale.down.left.sidebar ~ .pusher {\n  -webkit-transform-origin: 75% 50%;\n  transform-origin: 75% 50%;\n}\n\n.ui.scale.down.right.sidebar ~ .pusher {\n  -webkit-transform-origin: 25% 50%;\n  transform-origin: 25% 50%;\n}\n\n.ui.scale.down.top.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 75%;\n  transform-origin: 50% 75%;\n}\n\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  -webkit-transform-origin: 50% 25%;\n  transform-origin: 50% 25%;\n}\n\n/* Animation */\n\n.ui.animating.scale.down > .visible.ui.sidebar {\n  -webkit-transition: -webkit-transform 500ms ease;\n  transition: -webkit-transform 500ms ease;\n  transition: transform 500ms ease;\n  transition: transform 500ms ease, -webkit-transform 500ms ease;\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n\n.ui.visible.scale.down.sidebar {\n  -webkit-transform: translate3d(0, 0, 0);\n  transform: translate3d(0, 0, 0);\n}\n\n.ui.visible.scale.down.sidebar ~ .pusher {\n  -webkit-transform: scale(0.75);\n  transform: scale(0.75);\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  -webkit-transition: none;\n  transition: none;\n  z-index: 800;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Bound */\n\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n/*******************************\n         Theme Overrides\n*******************************/\n\n/*******************************\n         Site Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: 250px;\n}\n\n.ui.tab.loading * {\n  position: relative !important;\n  left: -10000px !important;\n}\n\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  border-radius: 500rem;\n  border: 0.2em solid rgba(0, 0, 0, 0.1);\n}\n\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 100px;\n  left: 50%;\n  margin: -1.25em 0em 0em -1.25em;\n  width: 2.5em;\n  height: 2.5em;\n  -webkit-animation: button-spin 0.6s linear;\n  animation: button-spin 0.6s linear;\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n  border-radius: 500rem;\n  border-color: #767676 transparent transparent;\n  border-style: solid;\n  border-width: 0.2em;\n  -webkit-box-shadow: 0px 0px 0px 1px transparent;\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/*******************************\n         Tab Overrides\n*******************************/\n\n/*******************************\n        User Overrides\n*******************************/\n/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  -webkit-animation-iteration-count: 1;\n  animation-iteration-count: 1;\n  -webkit-animation-duration: 300ms;\n  animation-duration: 300ms;\n  -webkit-animation-timing-function: ease;\n  animation-timing-function: ease;\n  -webkit-animation-fill-mode: both;\n  animation-fill-mode: both;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Animating */\n\n.animating.transition {\n  -webkit-backface-visibility: hidden;\n  backface-visibility: hidden;\n  visibility: visible !important;\n}\n\n/* Loading */\n\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n  /*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n\n/* Disabled */\n\n.disabled.transition {\n  -webkit-animation-play-state: paused;\n  animation-play-state: paused;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  -webkit-animation-iteration-count: infinite;\n  animation-iteration-count: infinite;\n}\n\n/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n}\n\n.transition.browse.in {\n  -webkit-animation-name: browseIn;\n  animation-name: browseIn;\n}\n\n.transition.browse.out,\n.transition.browse.left.out {\n  -webkit-animation-name: browseOutLeft;\n  animation-name: browseOutLeft;\n}\n\n.transition.browse.right.out {\n  -webkit-animation-name: browseOutRight;\n  animation-name: browseOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n@keyframes browseIn {\n  0% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n\n  10% {\n    -webkit-transform: scale(0.8) translateZ(0px);\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n\n  80% {\n    -webkit-transform: scale(1.05) translateZ(0px);\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n\n  100% {\n    -webkit-transform: scale(1) translateZ(0px);\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: -1;\n    -webkit-transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: -1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n\n  50% {\n    z-index: 1;\n    -webkit-transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n\n  80% {\n    opacity: 1;\n  }\n\n  100% {\n    z-index: 1;\n    -webkit-transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n  -webkit-animation-duration: 400ms;\n  animation-duration: 400ms;\n  -webkit-animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n  animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n\n.drop.transition.in {\n  -webkit-animation-name: dropIn;\n  animation-name: dropIn;\n}\n\n.drop.transition.out {\n  -webkit-animation-name: dropOut;\n  animation-name: dropOut;\n}\n\n/* Drop */\n\n@-webkit-keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@-webkit-keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0);\n    transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  -webkit-animation-name: fadeIn;\n  animation-name: fadeIn;\n}\n\n.transition[class*=\"fade up\"].in {\n  -webkit-animation-name: fadeInUp;\n  animation-name: fadeInUp;\n}\n\n.transition[class*=\"fade down\"].in {\n  -webkit-animation-name: fadeInDown;\n  animation-name: fadeInDown;\n}\n\n.transition[class*=\"fade left\"].in {\n  -webkit-animation-name: fadeInLeft;\n  animation-name: fadeInLeft;\n}\n\n.transition[class*=\"fade right\"].in {\n  -webkit-animation-name: fadeInRight;\n  animation-name: fadeInRight;\n}\n\n.transition.fade.out {\n  -webkit-animation-name: fadeOut;\n  animation-name: fadeOut;\n}\n\n.transition[class*=\"fade up\"].out {\n  -webkit-animation-name: fadeOutUp;\n  animation-name: fadeOutUp;\n}\n\n.transition[class*=\"fade down\"].out {\n  -webkit-animation-name: fadeOutDown;\n  animation-name: fadeOutDown;\n}\n\n.transition[class*=\"fade left\"].out {\n  -webkit-animation-name: fadeOutLeft;\n  animation-name: fadeOutLeft;\n}\n\n.transition[class*=\"fade right\"].out {\n  -webkit-animation-name: fadeOutRight;\n  animation-name: fadeOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n\n  100% {\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(10%);\n    transform: translateY(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateY(-10%);\n    transform: translateY(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n}\n\n@-webkit-keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(10%);\n    transform: translateX(10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@-webkit-keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translateX(-10%);\n    transform: translateX(-10%);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n\n  100% {\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(5%);\n    transform: translateY(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateY(0%);\n    transform: translateY(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateY(-5%);\n    transform: translateY(-5%);\n  }\n}\n\n@-webkit-keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(5%);\n    transform: translateX(5%);\n  }\n}\n\n@-webkit-keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    -webkit-transform: translateX(0%);\n    transform: translateX(0%);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translateX(-5%);\n    transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  -webkit-animation-duration: 600ms;\n  animation-duration: 600ms;\n}\n\n.horizontal.flip.transition.in {\n  -webkit-animation-name: horizontalFlipIn;\n  animation-name: horizontalFlipIn;\n}\n\n.horizontal.flip.transition.out {\n  -webkit-animation-name: horizontalFlipOut;\n  animation-name: horizontalFlipOut;\n}\n\n.vertical.flip.transition.in {\n  -webkit-animation-name: verticalFlipIn;\n  animation-name: verticalFlipIn;\n}\n\n.vertical.flip.transition.out {\n  -webkit-animation-name: verticalFlipOut;\n  animation-name: verticalFlipOut;\n}\n\n/* In */\n\n@-webkit-keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes horizontalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(-90deg);\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n\n@-webkit-keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n@keyframes verticalFlipIn {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes horizontalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateY(0deg);\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateY(90deg);\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes verticalFlipOut {\n  0% {\n    -webkit-transform: perspective(2000px) rotateX(0deg);\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(2000px) rotateX(-90deg);\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  -webkit-animation-name: scaleIn;\n  animation-name: scaleIn;\n}\n\n.scale.transition.out {\n  -webkit-animation-name: scaleOut;\n  animation-name: scaleOut;\n}\n\n@-webkit-keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale(0.8);\n    transform: scale(0.8);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n  }\n}\n\n/*--------------\n      Fly\n---------------*/\n\n/* Inward */\n\n.transition.fly {\n  -webkit-animation-duration: 0.6s;\n  animation-duration: 0.6s;\n  -webkit-transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n  transition-timing-function: cubic-bezier(0.215, 0.61, 0.355, 1);\n}\n\n.transition.fly.in {\n  -webkit-animation-name: flyIn;\n  animation-name: flyIn;\n}\n\n.transition[class*=\"fly up\"].in {\n  -webkit-animation-name: flyInUp;\n  animation-name: flyInUp;\n}\n\n.transition[class*=\"fly down\"].in {\n  -webkit-animation-name: flyInDown;\n  animation-name: flyInDown;\n}\n\n.transition[class*=\"fly left\"].in {\n  -webkit-animation-name: flyInLeft;\n  animation-name: flyInLeft;\n}\n\n.transition[class*=\"fly right\"].in {\n  -webkit-animation-name: flyInRight;\n  animation-name: flyInRight;\n}\n\n/* Outward */\n\n.transition.fly.out {\n  -webkit-animation-name: flyOut;\n  animation-name: flyOut;\n}\n\n.transition[class*=\"fly up\"].out {\n  -webkit-animation-name: flyOutUp;\n  animation-name: flyOutUp;\n}\n\n.transition[class*=\"fly down\"].out {\n  -webkit-animation-name: flyOutDown;\n  animation-name: flyOutDown;\n}\n\n.transition[class*=\"fly left\"].out {\n  -webkit-animation-name: flyOutLeft;\n  animation-name: flyOutLeft;\n}\n\n.transition[class*=\"fly right\"].out {\n  -webkit-animation-name: flyOutRight;\n  animation-name: flyOutRight;\n}\n\n/* In */\n\n@-webkit-keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n\n  20% {\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.03, 1.03, 1.03);\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n\n  80% {\n    -webkit-transform: scale3d(0.97, 0.97, 0.97);\n    transform: scale3d(0.97, 0.97, 0.97);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@-webkit-keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 1500px, 0);\n    transform: translate3d(0, 1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, -5px, 0);\n    transform: translate3d(0, -5px, 0);\n  }\n\n  100% {\n    -webkit-transform: translate3d(0, 0, 0);\n    transform: translate3d(0, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -1500px, 0);\n    transform: translate3d(0, -1500px, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 25px, 0);\n    transform: translate3d(0, 25px, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(0, 5px, 0);\n    transform: translate3d(0, 5px, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(1500px, 0, 0);\n    transform: translate3d(1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(-25px, 0, 0);\n    transform: translate3d(-25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(10px, 0, 0);\n    transform: translate3d(10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(-5px, 0, 0);\n    transform: translate3d(-5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@-webkit-keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    -webkit-transform: translate3d(-1500px, 0, 0);\n    transform: translate3d(-1500px, 0, 0);\n  }\n\n  60% {\n    opacity: 1;\n    -webkit-transform: translate3d(25px, 0, 0);\n    transform: translate3d(25px, 0, 0);\n  }\n\n  75% {\n    -webkit-transform: translate3d(-10px, 0, 0);\n    transform: translate3d(-10px, 0, 0);\n  }\n\n  90% {\n    -webkit-transform: translate3d(5px, 0, 0);\n    transform: translate3d(5px, 0, 0);\n  }\n\n  100% {\n    -webkit-transform: none;\n    transform: none;\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@keyframes flyOut {\n  20% {\n    -webkit-transform: scale3d(0.9, 0.9, 0.9);\n    transform: scale3d(0.9, 0.9, 0.9);\n  }\n\n  50%, 55% {\n    opacity: 1;\n    -webkit-transform: scale3d(1.1, 1.1, 1.1);\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scale3d(0.3, 0.3, 0.3);\n    transform: scale3d(0.3, 0.3, 0.3);\n  }\n}\n\n@-webkit-keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@keyframes flyOutUp {\n  20% {\n    -webkit-transform: translate3d(0, 10px, 0);\n    transform: translate3d(0, 10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, -20px, 0);\n    transform: translate3d(0, -20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, 2000px, 0);\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@keyframes flyOutDown {\n  20% {\n    -webkit-transform: translate3d(0, -10px, 0);\n    transform: translate3d(0, -10px, 0);\n  }\n\n  40%, 45% {\n    opacity: 1;\n    -webkit-transform: translate3d(0, 20px, 0);\n    transform: translate3d(0, 20px, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(0, -2000px, 0);\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n\n@-webkit-keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(20px, 0, 0);\n    transform: translate3d(20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(-2000px, 0, 0);\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n\n@-webkit-keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    -webkit-transform: translate3d(-20px, 0, 0);\n    transform: translate3d(-20px, 0, 0);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: translate3d(2000px, 0, 0);\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].in {\n  -webkit-animation-name: slideInY;\n  animation-name: slideInY;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].in {\n  -webkit-animation-name: slideInX;\n  animation-name: slideInX;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"slide up\"].out {\n  -webkit-animation-name: slideOutY;\n  animation-name: slideOutY;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"slide left\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"slide right\"].out {\n  -webkit-animation-name: slideOutX;\n  animation-name: slideOutX;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n}\n\n@-webkit-keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n\n  100% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleY(1);\n    transform: scaleY(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleY(0);\n    transform: scaleY(0);\n  }\n}\n\n@-webkit-keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    -webkit-transform: scaleX(1);\n    transform: scaleX(1);\n  }\n\n  100% {\n    opacity: 0;\n    -webkit-transform: scaleX(0);\n    transform: scaleX(0);\n  }\n}\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  -webkit-animation-duration: 800ms;\n  animation-duration: 800ms;\n}\n\n.transition[class*=\"swing down\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].in {\n  -webkit-animation-name: swingInX;\n  animation-name: swingInX;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].in {\n  -webkit-animation-name: swingInY;\n  animation-name: swingInY;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: top center;\n  transform-origin: top center;\n}\n\n.transition[class*=\"swing up\"].out {\n  -webkit-animation-name: swingOutX;\n  animation-name: swingOutX;\n  -webkit-transform-origin: bottom center;\n  transform-origin: bottom center;\n}\n\n.transition[class*=\"swing left\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center right;\n  transform-origin: center right;\n}\n\n.transition[class*=\"swing right\"].out {\n  -webkit-animation-name: swingOutY;\n  animation-name: swingOutY;\n  -webkit-transform-origin: center left;\n  transform-origin: center left;\n}\n\n/* In */\n\n@-webkit-keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@keyframes swingInX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(15deg);\n    transform: perspective(1000px) rotateX(15deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n\n@-webkit-keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n@keyframes swingInY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-17.5deg);\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n\n@-webkit-keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutX {\n  0% {\n    -webkit-transform: perspective(1000px) rotateX(0deg);\n    transform: perspective(1000px) rotateX(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateX(-7.5deg);\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateX(17.5deg);\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateX(-30deg);\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateX(90deg);\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n\n@-webkit-keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n@keyframes swingOutY {\n  0% {\n    -webkit-transform: perspective(1000px) rotateY(0deg);\n    transform: perspective(1000px) rotateY(0deg);\n  }\n\n  40% {\n    -webkit-transform: perspective(1000px) rotateY(7.5deg);\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n\n  60% {\n    -webkit-transform: perspective(1000px) rotateY(-10deg);\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n\n  80% {\n    -webkit-transform: perspective(1000px) rotateY(30deg);\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n\n  100% {\n    -webkit-transform: perspective(1000px) rotateY(-90deg);\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n/*******************************\n       Static Animations\n*******************************/\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: flash;\n  animation-name: flash;\n}\n\n.shake.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: shake;\n  animation-name: shake;\n}\n\n.bounce.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: bounce;\n  animation-name: bounce;\n}\n\n.tada.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: tada;\n  animation-name: tada;\n}\n\n.pulse.transition {\n  -webkit-animation-duration: 500ms;\n  animation-duration: 500ms;\n  -webkit-animation-name: pulse;\n  animation-name: pulse;\n}\n\n.jiggle.transition {\n  -webkit-animation-duration: 750ms;\n  animation-duration: 750ms;\n  -webkit-animation-name: jiggle;\n  animation-name: jiggle;\n}\n\n/* Flash */\n\n@-webkit-keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n\n@-webkit-keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n@keyframes shake {\n  0%, 100% {\n    -webkit-transform: translateX(0);\n    transform: translateX(0);\n  }\n\n  10%, 30%, 50%, 70%, 90% {\n    -webkit-transform: translateX(-10px);\n    transform: translateX(-10px);\n  }\n\n  20%, 40%, 60%, 80% {\n    -webkit-transform: translateX(10px);\n    transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n\n@-webkit-keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    -webkit-transform: translateY(0);\n    transform: translateY(0);\n  }\n\n  40% {\n    -webkit-transform: translateY(-30px);\n    transform: translateY(-30px);\n  }\n\n  60% {\n    -webkit-transform: translateY(-15px);\n    transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n\n@-webkit-keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n@keyframes tada {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n  }\n\n  10%, 20% {\n    -webkit-transform: scale(0.9) rotate(-3deg);\n    transform: scale(0.9) rotate(-3deg);\n  }\n\n  30%, 50%, 70%, 90% {\n    -webkit-transform: scale(1.1) rotate(3deg);\n    transform: scale(1.1) rotate(3deg);\n  }\n\n  40%, 60%, 80% {\n    -webkit-transform: scale(1.1) rotate(-3deg);\n    transform: scale(1.1) rotate(-3deg);\n  }\n\n  100% {\n    -webkit-transform: scale(1) rotate(0);\n    transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n\n@-webkit-keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n@keyframes pulse {\n  0% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n\n  50% {\n    -webkit-transform: scale(0.9);\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n\n  100% {\n    -webkit-transform: scale(1);\n    transform: scale(1);\n    opacity: 1;\n  }\n}\n\n/* Rubberband */\n\n@-webkit-keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n@keyframes jiggle {\n  0% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n\n  30% {\n    -webkit-transform: scale3d(1.25, 0.75, 1);\n    transform: scale3d(1.25, 0.75, 1);\n  }\n\n  40% {\n    -webkit-transform: scale3d(0.75, 1.25, 1);\n    transform: scale3d(0.75, 1.25, 1);\n  }\n\n  50% {\n    -webkit-transform: scale3d(1.15, 0.85, 1);\n    transform: scale3d(1.15, 0.85, 1);\n  }\n\n  65% {\n    -webkit-transform: scale3d(0.95, 1.05, 1);\n    transform: scale3d(0.95, 1.05, 1);\n  }\n\n  75% {\n    -webkit-transform: scale3d(1.05, 0.95, 1);\n    transform: scale3d(1.05, 0.95, 1);\n  }\n\n  100% {\n    -webkit-transform: scale3d(1, 1, 1);\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n/*******************************\n         Site Overrides\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/dist/semantic.js",
    "content": " /*\n * # Semantic UI - 2.2.11\n * https://github.com/Semantic-Org/Semantic-UI\n * http://www.semantic-ui.com/\n *\n * Copyright 2014 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*!\n * # Semantic UI 2.2.11 - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        regExp,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        determine: {\n          isValid: function() {\n            var\n              allValid = true\n            ;\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName, true) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          shorthandFields: function(fields) {\n            var\n              fieldKeys = Object.keys(fields),\n              firstRule = fields[fieldKeys[0]]\n            ;\n            return module.is.shorthandRules(firstRule);\n          },\n          // duck type rule test\n          shorthandRules: function(rules) {\n            return (typeof rules == 'string' || $.isArray(rules));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function(field) {\n            var\n              allValid = true\n            ;\n            if(field) {\n              module.verbose('Checking if field is valid', field);\n              return module.validate.field(validation[field], field, false);\n            }\n            else {\n              module.verbose('Checking if form is valid');\n              $.each(validation, function(fieldName, field) {\n                if( !module.is.valid(fieldName) ) {\n                  allValid = false;\n                }\n              });\n              return allValid;\n            }\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          fieldsFromShorthand: function(fields) {\n            var\n              fullFields = {}\n            ;\n            $.each(fields, function(name, rules) {\n              if(typeof rules == 'string') {\n                rules = [rules];\n              }\n              fullFields[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                fullFields[name].rules.push({ type: rule });\n              });\n            });\n            return fullFields;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\n                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\n                }\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            regExp          = settings.regExp;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if($field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(values[name] === undefined) {\n                      values[name] = (isChecked)\n                        ? true\n                        : false\n                      ;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if($field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        add: {\n          // alias\n          rule: function(name, rules) {\n            module.add.field(name, rules);\n          },\n          field: function(name, rules) {\n            var\n              newValidation = {}\n            ;\n            if(module.is.shorthandRules(rules)) {\n              rules = $.isArray(rules)\n                ? rules\n                : [rules]\n              ;\n              newValidation[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                newValidation[name].rules.push({ type: rule });\n              });\n            }\n            else {\n              newValidation[name] = rules;\n            }\n            validation = $.extend({}, validation, newValidation);\n            module.debug('Adding rules', newValidation, validation);\n          },\n          fields: function(fields) {\n            var\n              newValidation\n            ;\n            if(fields && module.is.shorthandFields(fields)) {\n              newValidation = module.get.fieldsFromShorthand(fields);\n            }\n            else {\n              newValidation = fields;\n            }\n            validation = $.extend({}, validation, newValidation);\n          },\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          rule: function(field, rule) {\n            var\n              rules = $.isArray(rule)\n                ? rule\n                : [rule]\n            ;\n            if(rule == undefined) {\n              module.debug('Removed all rules');\n              validation[field].rules = [];\n              return;\n            }\n            if(validation[field] == undefined || !$.isArray(validation[field].rules)) {\n              return;\n            }\n            $.each(validation[field].rules, function(index, rule) {\n              if(rules.indexOf(rule.type) !== -1) {\n                module.debug('Removed rule', rule.type);\n                validation[field].rules.splice(index, 1);\n              }\n            });\n          },\n          field: function(field) {\n            var\n              fields = $.isArray(field)\n                ? field\n                : [field]\n            ;\n            $.each(fields, function(index, field) {\n              module.remove.rule(field);\n            });\n          },\n          // alias\n          rules: function(field, rules) {\n            if($.isArray(field)) {\n              $.each(fields, function(index, field) {\n                module.remove.rule(field, rules);\n              });\n            }\n            else {\n              module.remove.rule(field, rules);\n            }\n          },\n          fields: function(fields) {\n            module.remove.field(fields);\n          },\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.determine.isValid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName, showErrors) {\n            showErrors = (showErrors !== undefined)\n              ? showErrors\n              : true\n            ;\n            if(typeof field == 'string') {\n              module.verbose('Validating field', field);\n              fieldName = field;\n              field     = validation[field];\n            }\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              if(showErrors) {\n                module.remove.prompt(identifier, fieldErrors);\n                settings.onValid.call($field);\n              }\n            }\n            else {\n              if(showErrors) {\n                formErrors = formErrors.concat(fieldErrors);\n                module.add.prompt(identifier, fieldErrors);\n                settings.onInvalid.call($field, fieldErrors);\n              }\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    htmlID  : /^[a-zA-Z][\\w:.-]*$/g,\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d+\\.?\\d*$/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // allow dashes in card\n      cardNumber = cardNumber.replace(/[\\-]/g, '');\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n\n/*!\n * # Semantic UI 2.2.11 - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n            module.setup.layout();\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module = $module.parent(selector.dropdown);\n            module.refresh();\n            module.setup.returnedObject();\n            // invoke method in context of current instance\n            if(methodInvoked) {\n              instance = module;\n              module.invoke(query);\n            }\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(!module.can.show() && module.is.remote()) {\n            module.debug('No API results retrieved, searching before show');\n            module.queryRemote(module.get.query(), module.show);\n          }\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n              ;\n              if(module.has.menuSearch() ) {\n                $module\n                  .on('blur' + eventNamespace, selector.search, module.event.search.blur)\n                ;\n              }\n              else {\n                $module\n                  .on('blur' + eventNamespace, module.event.blur)\n                ;\n              }\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              if(query || (!query && module.get.activeItem().length == 0)) {\n                module.select.firstUnfiltered();\n              }\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                if(settings.filterRemoteData) {\n                  module.filterItems(searchTerm);\n                }\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.string(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected && !module.is.multiple()) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(module.is.searchSelection() && !willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              module.setup.select();\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              // prevents IE11 bug where menu receives focus even though `tabindex=-1`\n              if(module.has.menuSearch()) {\n                $(document.activeElement).blur();\n              }\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value      = module.get.choiceValue($item),\n              searchText = module.get.choiceText($item, false),\n              text       = module.get.choiceText($item, true)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(searchText);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              // reset position\n              module.remove.upward();\n\n              if(module.can.openDownward($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {\n                module.set.leftward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.addClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.addClass(className.leftward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-' + metadata.value, escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.removeClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.removeClass(className.leftward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(value) +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(escapedValue) +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).length > 0  && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          leftward: function($subMenu) {\n            var $selectedMenu = $subMenu || $menu;\n            return $selectedMenu.hasClass(className.leftward);\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          remote: function() {\n            return settings.apiSettings && module.can.useAPI();\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-X')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          openDownward: function($subMenu) {\n            var\n              $currentMenu    = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen        = {},\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            if(module.is.verticallyScrollableContext()) {\n              calculations.menu.offset.top += calculations.context.scrollTop;\n            }\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          openRightward: function($subMenu) {\n            var\n              $currentMenu     = $subMenu || $menu,\n              canOpenRightward = true,\n              isOffscreenRight = false,\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollLeft : $context.scrollLeft(),\n                width      : $context.outerWidth()\n              },\n              menu: {\n                offset : $currentMenu.offset(),\n                width  : $currentMenu.outerWidth()\n              }\n            };\n            if(module.is.horizontallyScrollableContext()) {\n              calculations.menu.offset.left += calculations.context.scrollLeft;\n            }\n            isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);\n            if(isOffscreenRight) {\n              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);\n              canOpenRightward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenRightward;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n\n  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    leftward    : 'left',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        ignoreRepeatedEvents = false,\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals'\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer');\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(ignoreRepeatedEvents || settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          deny: function() {\n            if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.set.dimmerSettings();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          var\n            modalHeight = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height()\n            };\n          }\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            return ( ( module.cache.height + (settings.padding * 2) ) < module.cache.contextHeight);\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          dimmerSettings: function() {\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                variation  : false,\n                closable   : 'auto',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n              $dimmer.addClass(className.inverted);\n            }\n            else {\n              $dimmer.removeClass(className.inverted);\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            else {\n              $dimmable.removeClass(className.blurring);\n            }\n            $context.dimmer('setting', dimmerSettings);\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: -(module.cache.height / 2)\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    inverted   : 'inverted',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent($target);\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as target');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($target)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.popupVisible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === 'undefined');\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              module.bind.closeOnScroll();\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.bind.touchClose();\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.bind.clickaway();\n            }\n          },\n          closeOnScroll: function() {\n            module.verbose('Binding scroll close event to document');\n            $scrollContext\n              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n            ;\n          },\n          touchClose: function() {\n            module.verbose('Binding popup touchclose event to document');\n            $document\n              .on('touchstart' + elementNamespace, function(event) {\n                module.verbose('Touched away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          },\n          clickaway: function() {\n            module.verbose('Binding popup close event to document');\n            $document\n              .on('click' + elementNamespace, function(event) {\n                module.verbose('Clicked away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.popupVisible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active       : 'active',\n    animating    : 'animating',\n    dropdown     : 'dropdown',\n    fluid        : 'fluid',\n    loading      : 'loading',\n    popup        : 'ui popup',\n    position     : 'top left center bottom right',\n    visible      : 'visible',\n    popupVisible : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        bind: {\n          transitionEnd: function(callback) {\n            var\n              transitionEnd = module.get.transitionEnd()\n            ;\n            $bar\n              .one(transitionEnd + eventNamespace, function(event) {\n                clearTimeout(module.failSafeTimer);\n                callback.call(this, event);\n              })\n            ;\n            module.failSafeTimer = setTimeout(function() {\n              $bar.triggerHandler(transitionEnd);\n            }, settings.duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            module.bind.transitionEnd(animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  // delay in ms for fail safe animation callback\n  failSafeDelay : 100,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className        = settings.className,\n        metadata         = settings.metadata,\n        regExp           = settings.regExp,\n        fields           = settings.fields,\n        selector         = settings.selector,\n        error            = settings.error,\n        namespace        = settings.namespace,\n\n        eventNamespace   = '.' + namespace,\n        moduleNamespace  = namespace + '-module',\n\n        $module          = $(this),\n        $prompt          = $module.find(selector.prompt),\n        $searchButton    = $module.find(selector.searchButton),\n        $results         = $module.find(selector.results),\n        $result          = $module.find(selector.result),\n        $category        = $module.find(selector.category),\n\n        element          = this,\n        instance         = $module.data(moduleNamespace),\n\n        disabledBubbled  = false,\n        resultsDismissed = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            if(settings.searchDelay) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.is.focused()) {\n                  module.query();\n                }\n              }, settings.searchDelay);\n            }\n            else {\n              module.query();\n            }\n          },\n          focus: function() {\n            module.set.focus();\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\n              module.query(function() {\n                if(module.can.show() ) {\n                  module.showResults();\n                }\n              });\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            resultsDismissed = false;\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result         = $module.find(selector.result),\n            $category       = $module.find(selector.category),\n            $activeResult   = $result.filter('.' + className.active),\n            currentIndex    = $result.index( $activeResult ),\n            resultSize      = $result.length,\n            hasActiveResult = $activeResult.length > 0,\n\n            keyCode         = event.which,\n            keys            = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.hideResults();\n            resultsDismissed = true;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow && hasActiveResult) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm, callback) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                  callback();\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                  callback();\n                },\n                onAbort : function(response) {\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            if(!event.target) {\n              return;\n            }\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target)\n            ;\n            return (isInDOM && $target.closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          callback = callback || function() {};\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n              callback();\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n                callback();\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm, callback);\n              }\n              else {\n                module.error(error.source);\n                callback();\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm, callback);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          },\n          results: function() {\n            if($results.length === 0) {\n              return false;\n            }\n            var\n              html = $results.html()\n            ;\n            return html != '';\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults(function() {\n              $results.empty();\n            });\n          }\n        },\n\n        showResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(resultsDismissed) {\n            return;\n          }\n          if(!module.is.visible() && module.has.results()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // Whether search should query current term on focus\n  searchOnFocus     : true,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          // (This is no longer necessary in latest iOS)\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          if(settings.container) {\n            $container = $(settings.container);\n          }\n          else {\n            $container = $module.offsetParent();\n          }\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits          : ( (element.height + settings.offset) <= scrollContext.height),\n              sameHeight    : (element.height == context.height),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          minimumSize: function() {\n            $container\n              .css('min-height', '')\n            ;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            sameHeight     = cache.sameHeight,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n          if(elementVisible && !sameHeight) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.minimumSize();\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n  container      : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  // will only set container height if difference between context and container is larger than this number\n  jitter         : 5,\n\n  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)\n  setSize        : true,\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\n              $tab\n                .empty()\n                .append($(html).clone(true))\n              ;\n            }\n            else {\n              if(evaluateScripts) {\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n                $tab.html(html);\n              }\n              else {\n                module.debug('Updating HTML', tabPath, html);\n                tab.innerHTML = html;\n              }\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n\n                  if(settings.loadOnce) {\n                    module.cache.add(fullTabPath, true);\n                  }\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\n                    setTimeout(function() {\n                      var\n                        $clone = $tab.children().clone(true)\n                      ;\n                      $clone = $clone.not('script');\n                      module.cache.add(fullTabPath, $clone);\n                    }, 0);\n                  }\n                  else {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(!settings.loadOnce) {\n                if(settings.evaluateScripts == 'once') {\n                  module.update.content(tabPath, cachedContent, false);\n                }\n                else {\n                  module.update.content(tabPath, cachedContent);\n                }\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function(shouldDetermine) {\n            shouldDetermine = (shouldDetermine !== undefined)\n              ? shouldDetermine\n              : true\n            ;\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if(shouldDetermine && $module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              displayType       = module.get.displayType(false),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              if(!displayType) {\n                displayType = $clone\n                  .attr('class', elementClass)\n                  .removeAttr('style')\n                  .removeClass(className.hidden)\n                  .removeClass(className.visible)\n                  .show()\n                  .css('display')\n                ;\n                module.verbose('Determining final display state', displayType);\n                module.save.displayType(displayType);\n              }\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n\n/*!\n * # Semantic UI 2.2.11 - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined) {\n                if($module.hasClass(className.visible)) {\n                  module.debug('Transition already occurred on this image, skipping animation');\n                  return;\n                }\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-x')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // compensate for scroll in context\n            if(module.is.verticallyScrollableContext()) {\n              element.offset.top += $context.scrollTop() - $context.offset().top;\n            }\n            if(module.is.horizontallyScrollableContext()) {\n              element.offset.left += $context.scrollLeft - $context.offset().left;\n            }\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.topVisible       = (screen.bottom >= element.top) && !element.bottomPassed;\n            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.topPassed;\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder',\n    visible     : 'visible'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/gulpfile.js",
    "content": "/*******************************\n            Set-up\n*******************************/\n\nvar\n  gulp         = require('gulp-help')(require('gulp')),\n\n  // read user config to know what task to load\n  config       = require('./tasks/config/user'),\n\n  // watch changes\n  watch        = require('./tasks/watch'),\n\n  // build all files\n  build        = require('./tasks/build'),\n  buildJS      = require('./tasks/build/javascript'),\n  buildCSS     = require('./tasks/build/css'),\n  buildAssets  = require('./tasks/build/assets'),\n\n  // utility\n  clean        = require('./tasks/clean'),\n  version      = require('./tasks/version'),\n\n  // docs tasks\n  serveDocs    = require('./tasks/docs/serve'),\n  buildDocs    = require('./tasks/docs/build'),\n\n  // rtl\n  buildRTL     = require('./tasks/rtl/build'),\n  watchRTL     = require('./tasks/rtl/watch')\n;\n\n\n/*******************************\n             Tasks\n*******************************/\n\ngulp.task('default', false, [\n  'watch'\n]);\n\ngulp.task('watch', 'Watch for site/theme changes', watch);\n\ngulp.task('build', 'Builds all files from source', build);\ngulp.task('build-javascript', 'Builds all javascript from source', buildJS);\ngulp.task('build-css', 'Builds all css from source', buildCSS);\ngulp.task('build-assets', 'Copies all assets from source', buildAssets);\n\ngulp.task('clean', 'Clean dist folder', clean);\ngulp.task('version', 'Displays current version of Semantic', version);\n\n/*--------------\n      Docs\n---------------*/\n\n/*\n  Lets you serve files to a local documentation instance\n  https://github.com/Semantic-Org/Semantic-UI-Docs/\n*/\n\ngulp.task('serve-docs', 'Serve file changes to SUI Docs', serveDocs);\ngulp.task('build-docs', 'Build all files and add to SUI Docs', buildDocs);\n\n\n/*--------------\n      RTL\n---------------*/\n\nif(config.rtl) {\n  gulp.task('watch-rtl', 'Watch files as RTL', watchRTL);\n  gulp.task('build-rtl', 'Build all files as RTL', buildRTL);\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/api.js",
    "content": "/*!\n * # Semantic UI - API\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nvar\n  window = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.api = $.fn.api = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector = $allModules.selector || '',\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.api.settings, parameters)\n          : $.extend({}, $.fn.api.settings),\n\n        // internal aliases\n        namespace       = settings.namespace,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n        className       = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // element that creates request\n        $module         = $(this),\n        $form           = $module.closest(selector.form),\n\n        // context used for state\n        $context        = (settings.stateContext)\n          ? $(settings.stateContext)\n          : $module,\n\n        // request details\n        ajaxSettings,\n        requestSettings,\n        url,\n        data,\n        requestStartTime,\n\n        // standard module\n        element         = this,\n        context         = $context[0],\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          if(!methodInvoked) {\n            module.bind.events();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            var\n              triggerEvent = module.get.event()\n            ;\n            if( triggerEvent ) {\n              module.verbose('Attaching API events to element', triggerEvent);\n              $module\n                .on(triggerEvent + eventNamespace, module.event.trigger)\n              ;\n            }\n            else if(settings.on == 'now') {\n              module.debug('Querying API endpoint immediately');\n              module.query();\n            }\n          }\n        },\n\n        decode: {\n          json: function(response) {\n            if(response !== undefined && typeof response == 'string') {\n              try {\n               response = JSON.parse(response);\n              }\n              catch(e) {\n                // isnt json string\n              }\n            }\n            return response;\n          }\n        },\n\n        read: {\n          cachedResponse: function(url) {\n            var\n              response\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            response = sessionStorage.getItem(url);\n            module.debug('Using cached response', url, response);\n            response = module.decode.json(response);\n            return response;\n          }\n        },\n        write: {\n          cachedResponse: function(url, response) {\n            if(response && response === '') {\n              module.debug('Response empty, not caching', response);\n              return;\n            }\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            if( $.isPlainObject(response) ) {\n              response = JSON.stringify(response);\n            }\n            sessionStorage.setItem(url, response);\n            module.verbose('Storing cached response for url', url, response);\n          }\n        },\n\n        query: function() {\n\n          if(module.is.disabled()) {\n            module.debug('Element is disabled API request aborted');\n            return;\n          }\n\n          if(module.is.loading()) {\n            if(settings.interruptRequests) {\n              module.debug('Interrupting previous request');\n              module.abort();\n            }\n            else {\n              module.debug('Cancelling request, previous request is still pending');\n              return;\n            }\n          }\n\n          // pass element metadata to url (value, text)\n          if(settings.defaultData) {\n            $.extend(true, settings.urlData, module.get.defaultData());\n          }\n\n          // Add form content\n          if(settings.serializeForm) {\n            settings.data = module.add.formData(settings.data);\n          }\n\n          // call beforesend and get any settings changes\n          requestSettings = module.get.settings();\n\n          // check if before send cancelled request\n          if(requestSettings === false) {\n            module.cancelled = true;\n            module.error(error.beforeSend);\n            return;\n          }\n          else {\n            module.cancelled = false;\n          }\n\n          // get url\n          url = module.get.templatedURL();\n\n          if(!url && !module.is.mocked()) {\n            module.error(error.missingURL);\n            return;\n          }\n\n          // replace variables\n          url = module.add.urlData( url );\n          // missing url parameters\n          if( !url && !module.is.mocked()) {\n            return;\n          }\n\n          requestSettings.url = settings.base + url;\n\n          // look for jQuery ajax parameters in settings\n          ajaxSettings = $.extend(true, {}, settings, {\n            type       : settings.method || settings.type,\n            data       : data,\n            url        : settings.base + url,\n            beforeSend : settings.beforeXHR,\n            success    : function() {},\n            failure    : function() {},\n            complete   : function() {}\n          });\n\n          module.debug('Querying URL', ajaxSettings.url);\n          module.verbose('Using AJAX settings', ajaxSettings);\n          if(settings.cache === 'local' && module.read.cachedResponse(url)) {\n            module.debug('Response returned from local cache');\n            module.request = module.create.request();\n            module.request.resolveWith(context, [ module.read.cachedResponse(url) ]);\n            return;\n          }\n\n          if( !settings.throttle ) {\n            module.debug('Sending request', data, ajaxSettings.method);\n            module.send.request();\n          }\n          else {\n            if(!settings.throttleFirstRequest && !module.timer) {\n              module.debug('Sending request', data, ajaxSettings.method);\n              module.send.request();\n              module.timer = setTimeout(function(){}, settings.throttle);\n            }\n            else {\n              module.debug('Throttling request', settings.throttle);\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.timer) {\n                  delete module.timer;\n                }\n                module.debug('Sending throttled request', data, ajaxSettings.method);\n                module.send.request();\n              }, settings.throttle);\n            }\n          }\n\n        },\n\n        should: {\n          removeError: function() {\n            return ( settings.hideError === true || (settings.hideError === 'auto' && !module.is.form()) );\n          }\n        },\n\n        is: {\n          disabled: function() {\n            return ($module.filter(selector.disabled).length > 0);\n          },\n          expectingJSON: function() {\n            return settings.dataType === 'json' || settings.dataType === 'jsonp';\n          },\n          form: function() {\n            return $module.is('form') || $context.is('form');\n          },\n          mocked: function() {\n            return (settings.mockResponse || settings.mockResponseAsync || settings.response || settings.responseAsync);\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          loading: function() {\n            return (module.request)\n              ? (module.request.state() == 'pending')\n              : false\n            ;\n          },\n          abortedRequest: function(xhr) {\n            if(xhr && xhr.readyState !== undefined && xhr.readyState === 0) {\n              module.verbose('XHR request determined to be aborted');\n              return true;\n            }\n            else {\n              module.verbose('XHR request was not aborted');\n              return false;\n            }\n          },\n          validResponse: function(response) {\n            if( (!module.is.expectingJSON()) || !$.isFunction(settings.successTest) ) {\n              module.verbose('Response is not JSON, skipping validation', settings.successTest, response);\n              return true;\n            }\n            module.debug('Checking JSON returned success', settings.successTest, response);\n            if( settings.successTest(response) ) {\n              module.debug('Response passed success test', response);\n              return true;\n            }\n            else {\n              module.debug('Response failed success test', response);\n              return false;\n            }\n          }\n        },\n\n        was: {\n          cancelled: function() {\n            return (module.cancelled || false);\n          },\n          succesful: function() {\n            return (module.request && module.request.state() == 'resolved');\n          },\n          failure: function() {\n            return (module.request && module.request.state() == 'rejected');\n          },\n          complete: function() {\n            return (module.request && (module.request.state() == 'resolved' || module.request.state() == 'rejected') );\n          }\n        },\n\n        add: {\n          urlData: function(url, urlData) {\n            var\n              requiredVariables,\n              optionalVariables\n            ;\n            if(url) {\n              requiredVariables = url.match(settings.regExp.required);\n              optionalVariables = url.match(settings.regExp.optional);\n              urlData           = urlData || settings.urlData;\n              if(requiredVariables) {\n                module.debug('Looking for required URL variables', requiredVariables);\n                $.each(requiredVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(2, templatedString.length - 3)\n                      : templatedString.substr(1, templatedString.length - 2),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // remove value\n                  if(value === undefined) {\n                    module.error(error.requiredParameter, variable, url);\n                    url = false;\n                    return false;\n                  }\n                  else {\n                    module.verbose('Found required variable', variable, value);\n                    value = (settings.encodeParameters)\n                      ? module.get.urlEncodedValue(value)\n                      : value\n                    ;\n                    url = url.replace(templatedString, value);\n                  }\n                });\n              }\n              if(optionalVariables) {\n                module.debug('Looking for optional URL variables', requiredVariables);\n                $.each(optionalVariables, function(index, templatedString) {\n                  var\n                    // allow legacy {/$var} style\n                    variable = (templatedString.indexOf('$') !== -1)\n                      ? templatedString.substr(3, templatedString.length - 4)\n                      : templatedString.substr(2, templatedString.length - 3),\n                    value   = ($.isPlainObject(urlData) && urlData[variable] !== undefined)\n                      ? urlData[variable]\n                      : ($module.data(variable) !== undefined)\n                        ? $module.data(variable)\n                        : ($context.data(variable) !== undefined)\n                          ? $context.data(variable)\n                          : urlData[variable]\n                  ;\n                  // optional replacement\n                  if(value !== undefined) {\n                    module.verbose('Optional variable Found', variable, value);\n                    url = url.replace(templatedString, value);\n                  }\n                  else {\n                    module.verbose('Optional variable not found', variable);\n                    // remove preceding slash if set\n                    if(url.indexOf('/' + templatedString) !== -1) {\n                      url = url.replace('/' + templatedString, '');\n                    }\n                    else {\n                      url = url.replace(templatedString, '');\n                    }\n                  }\n                });\n              }\n            }\n            return url;\n          },\n          formData: function(data) {\n            var\n              canSerialize = ($.fn.serializeObject !== undefined),\n              formData     = (canSerialize)\n                ? $form.serializeObject()\n                : $form.serialize(),\n              hasOtherData\n            ;\n            data         = data || settings.data;\n            hasOtherData = $.isPlainObject(data);\n\n            if(hasOtherData) {\n              if(canSerialize) {\n                module.debug('Extending existing data with form data', data, formData);\n                data = $.extend(true, {}, data, formData);\n              }\n              else {\n                module.error(error.missingSerialize);\n                module.debug('Cant extend data. Replacing data with form data', data, formData);\n                data = formData;\n              }\n            }\n            else {\n              module.debug('Adding form data', formData);\n              data = formData;\n            }\n            return data;\n          }\n        },\n\n        send: {\n          request: function() {\n            module.set.loading();\n            module.request = module.create.request();\n            if( module.is.mocked() ) {\n              module.mockedXHR = module.create.mockedXHR();\n            }\n            else {\n              module.xhr = module.create.xhr();\n            }\n            settings.onRequest.call(context, module.request, module.xhr);\n          }\n        },\n\n        event: {\n          trigger: function(event) {\n            module.query();\n            if(event.type == 'submit' || event.type == 'click') {\n              event.preventDefault();\n            }\n          },\n          xhr: {\n            always: function() {\n              // nothing special\n            },\n            done: function(response, textStatus, xhr) {\n              var\n                context            = this,\n                elapsedTime        = (new Date().getTime() - requestStartTime),\n                timeLeft           = (settings.loadingDuration - elapsedTime),\n                translatedResponse = ( $.isFunction(settings.onResponse) )\n                  ? module.is.expectingJSON()\n                    ? settings.onResponse.call(context, $.extend(true, {}, response))\n                    : settings.onResponse.call(context, response)\n                  : false\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(translatedResponse) {\n                module.debug('Modified API response in onResponse callback', settings.onResponse, translatedResponse, response);\n                response = translatedResponse;\n              }\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.validResponse(response) ) {\n                  module.request.resolveWith(context, [response, xhr]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'invalid']);\n                }\n              }, timeLeft);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                context     = this,\n                elapsedTime = (new Date().getTime() - requestStartTime),\n                timeLeft    = (settings.loadingDuration - elapsedTime)\n              ;\n              timeLeft = (timeLeft > 0)\n                ? timeLeft\n                : 0\n              ;\n              if(timeLeft > 0) {\n                module.debug('Response completed early delaying state change by', timeLeft);\n              }\n              setTimeout(function() {\n                if( module.is.abortedRequest(xhr) ) {\n                  module.request.rejectWith(context, [xhr, 'aborted', httpMessage]);\n                }\n                else {\n                  module.request.rejectWith(context, [xhr, 'error', status, httpMessage]);\n                }\n              }, timeLeft);\n            }\n          },\n          request: {\n            done: function(response, xhr) {\n              module.debug('Successful API Response', response);\n              if(settings.cache === 'local' && url) {\n                module.write.cachedResponse(url, response);\n                module.debug('Saving server response locally', module.cache);\n              }\n              settings.onSuccess.call(context, response, $module, xhr);\n            },\n            complete: function(firstParameter, secondParameter) {\n              var\n                xhr,\n                response\n              ;\n              // have to guess callback parameters based on request success\n              if( module.was.succesful() ) {\n                response = firstParameter;\n                xhr      = secondParameter;\n              }\n              else {\n                xhr      = firstParameter;\n                response = module.get.responseFromXHR(xhr);\n              }\n              module.remove.loading();\n              settings.onComplete.call(context, response, $module, xhr);\n            },\n            fail: function(xhr, status, httpMessage) {\n              var\n                // pull response from xhr if available\n                response     = module.get.responseFromXHR(xhr),\n                errorMessage = module.get.errorFromRequest(response, status, httpMessage)\n              ;\n              if(status == 'aborted') {\n                module.debug('XHR Aborted (Most likely caused by page navigation or CORS Policy)', status, httpMessage);\n                settings.onAbort.call(context, status, $module, xhr);\n                return true;\n              }\n              else if(status == 'invalid') {\n                module.debug('JSON did not pass success test. A server-side error has most likely occurred', response);\n              }\n              else if(status == 'error') {\n                if(xhr !== undefined) {\n                  module.debug('XHR produced a server error', status, httpMessage);\n                  // make sure we have an error to display to console\n                  if( xhr.status != 200 && httpMessage !== undefined && httpMessage !== '') {\n                    module.error(error.statusMessage + httpMessage, ajaxSettings.url);\n                  }\n                  settings.onError.call(context, errorMessage, $module, xhr);\n                }\n              }\n\n              if(settings.errorDuration && status !== 'aborted') {\n                module.debug('Adding error state');\n                module.set.error();\n                if( module.should.removeError() ) {\n                  setTimeout(module.remove.error, settings.errorDuration);\n                }\n              }\n              module.debug('API Request failed', errorMessage, xhr);\n              settings.onFailure.call(context, response, $module, xhr);\n            }\n          }\n        },\n\n        create: {\n\n          request: function() {\n            // api request promise\n            return $.Deferred()\n              .always(module.event.request.complete)\n              .done(module.event.request.done)\n              .fail(module.event.request.fail)\n            ;\n          },\n\n          mockedXHR: function () {\n            var\n              // xhr does not simulate these properties of xhr but must return them\n              textStatus     = false,\n              status         = false,\n              httpMessage    = false,\n              responder      = settings.mockResponse      || settings.response,\n              asyncResponder = settings.mockResponseAsync || settings.responseAsync,\n              asyncCallback,\n              response,\n              mockedXHR\n            ;\n\n            mockedXHR = $.Deferred()\n              .always(module.event.xhr.complete)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n\n            if(responder) {\n              if( $.isFunction(responder) ) {\n                module.debug('Using specified synchronous callback', responder);\n                response = responder.call(context, requestSettings);\n              }\n              else {\n                module.debug('Using settings specified response', responder);\n                response = responder;\n              }\n              // simulating response\n              mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n            }\n            else if( $.isFunction(asyncResponder) ) {\n              asyncCallback = function(response) {\n                module.debug('Async callback returned response', response);\n\n                if(response) {\n                  mockedXHR.resolveWith(context, [ response, textStatus, { responseText: response }]);\n                }\n                else {\n                  mockedXHR.rejectWith(context, [{ responseText: response }, status, httpMessage]);\n                }\n              };\n              module.debug('Using specified async response callback', asyncResponder);\n              asyncResponder.call(context, requestSettings, asyncCallback);\n            }\n            return mockedXHR;\n          },\n\n          xhr: function() {\n            var\n              xhr\n            ;\n            // ajax request promise\n            xhr = $.ajax(ajaxSettings)\n              .always(module.event.xhr.always)\n              .done(module.event.xhr.done)\n              .fail(module.event.xhr.fail)\n            ;\n            module.verbose('Created server request', xhr, ajaxSettings);\n            return xhr;\n          }\n        },\n\n        set: {\n          error: function() {\n            module.verbose('Adding error state to element', $context);\n            $context.addClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Adding loading state to element', $context);\n            $context.addClass(className.loading);\n            requestStartTime = new Date().getTime();\n          }\n        },\n\n        remove: {\n          error: function() {\n            module.verbose('Removing error state from element', $context);\n            $context.removeClass(className.error);\n          },\n          loading: function() {\n            module.verbose('Removing loading state from element', $context);\n            $context.removeClass(className.loading);\n          }\n        },\n\n        get: {\n          responseFromXHR: function(xhr) {\n            return $.isPlainObject(xhr)\n              ? (module.is.expectingJSON())\n                ? module.decode.json(xhr.responseText)\n                : xhr.responseText\n              : false\n            ;\n          },\n          errorFromRequest: function(response, status, httpMessage) {\n            return ($.isPlainObject(response) && response.error !== undefined)\n              ? response.error // use json error message\n              : (settings.error[status] !== undefined) // use server error message\n                ? settings.error[status]\n                : httpMessage\n            ;\n          },\n          request: function() {\n            return module.request || false;\n          },\n          xhr: function() {\n            return module.xhr || false;\n          },\n          settings: function() {\n            var\n              runSettings\n            ;\n            runSettings = settings.beforeSend.call(context, settings);\n            if(runSettings) {\n              if(runSettings.success !== undefined) {\n                module.debug('Legacy success callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.success);\n                runSettings.onSuccess = runSettings.success;\n              }\n              if(runSettings.failure !== undefined) {\n                module.debug('Legacy failure callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.failure);\n                runSettings.onFailure = runSettings.failure;\n              }\n              if(runSettings.complete !== undefined) {\n                module.debug('Legacy complete callback detected', runSettings);\n                module.error(error.legacyParameters, runSettings.complete);\n                runSettings.onComplete = runSettings.complete;\n              }\n            }\n            if(runSettings === undefined) {\n              module.error(error.noReturnedValue);\n            }\n            if(runSettings === false) {\n              return runSettings;\n            }\n            return (runSettings !== undefined)\n              ? $.extend(true, {}, runSettings)\n              : $.extend(true, {}, settings)\n            ;\n          },\n          urlEncodedValue: function(value) {\n            var\n              decodedValue   = window.decodeURIComponent(value),\n              encodedValue   = window.encodeURIComponent(value),\n              alreadyEncoded = (decodedValue !== value)\n            ;\n            if(alreadyEncoded) {\n              module.debug('URL value is already encoded, avoiding double encoding', value);\n              return value;\n            }\n            module.verbose('Encoding value using encodeURIComponent', value, encodedValue);\n            return encodedValue;\n          },\n          defaultData: function() {\n            var\n              data = {}\n            ;\n            if( !$.isWindow(element) ) {\n              if( module.is.input() ) {\n                data.value = $module.val();\n              }\n              else if( module.is.form() ) {\n\n              }\n              else {\n                data.text = $module.text();\n              }\n            }\n            return data;\n          },\n          event: function() {\n            if( $.isWindow(element) || settings.on == 'now' ) {\n              module.debug('API called without element, no events attached');\n              return false;\n            }\n            else if(settings.on == 'auto') {\n              if( $module.is('input') ) {\n                return (element.oninput !== undefined)\n                  ? 'input'\n                  : (element.onpropertychange !== undefined)\n                    ? 'propertychange'\n                    : 'keyup'\n                ;\n              }\n              else if( $module.is('form') ) {\n                return 'submit';\n              }\n              else {\n                return 'click';\n              }\n            }\n            else {\n              return settings.on;\n            }\n          },\n          templatedURL: function(action) {\n            action = action || $module.data(metadata.action) || settings.action || false;\n            url    = $module.data(metadata.url) || settings.url || false;\n            if(url) {\n              module.debug('Using specified url', url);\n              return url;\n            }\n            if(action) {\n              module.debug('Looking up url for action', action, settings.api);\n              if(settings.api[action] === undefined && !module.is.mocked()) {\n                module.error(error.missingAction, settings.action, settings.api);\n                return;\n              }\n              url = settings.api[action];\n            }\n            else if( module.is.form() ) {\n              url = $module.attr('action') || $context.attr('action') || false;\n              module.debug('No url or action specified, defaulting to form action', url);\n            }\n            return url;\n          }\n        },\n\n        abort: function() {\n          var\n            xhr = module.get.xhr()\n          ;\n          if( xhr && xhr.state() !== 'resolved') {\n            module.debug('Cancelling API request');\n            xhr.abort();\n          }\n        },\n\n        // reset state\n        reset: function() {\n          module.remove.error();\n          module.remove.loading();\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                //'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.api.settings = {\n\n  name              : 'API',\n  namespace         : 'api',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // object containing all templates endpoints\n  api               : {},\n\n  // whether to cache responses\n  cache             : true,\n\n  // whether new requests should abort previous requests\n  interruptRequests : true,\n\n  // event binding\n  on                : 'auto',\n\n  // context for applying state classes\n  stateContext      : false,\n\n  // duration for loading state\n  loadingDuration   : 0,\n\n  // whether to hide errors after a period of time\n  hideError         : 'auto',\n\n  // duration for error state\n  errorDuration     : 2000,\n\n  // whether parameters should be encoded with encodeURIComponent\n  encodeParameters  : true,\n\n  // API action to use\n  action            : false,\n\n  // templated URL to use\n  url               : false,\n\n  // base URL to apply to all endpoints\n  base              : '',\n\n  // data that will\n  urlData           : {},\n\n  // whether to add default data to url data\n  defaultData          : true,\n\n  // whether to serialize closest form\n  serializeForm        : false,\n\n  // how long to wait before request should occur\n  throttle             : 0,\n\n  // whether to throttle first request or only repeated\n  throttleFirstRequest : true,\n\n  // standard ajax settings\n  method            : 'get',\n  data              : {},\n  dataType          : 'json',\n\n  // mock response\n  mockResponse      : false,\n  mockResponseAsync : false,\n\n  // aliases for mock\n  response          : false,\n  responseAsync     : false,\n\n  // callbacks before request\n  beforeSend  : function(settings) { return settings; },\n  beforeXHR   : function(xhr) {},\n  onRequest   : function(promise, xhr) {},\n\n  // after request\n  onResponse  : false, // function(response) { },\n\n  // response was successful, if JSON passed validation\n  onSuccess   : function(response, $module) {},\n\n  // request finished without aborting\n  onComplete  : function(response, $module) {},\n\n  // failed JSON success test\n  onFailure   : function(response, $module) {},\n\n  // server error\n  onError     : function(errorMessage, $module) {},\n\n  // request aborted\n  onAbort     : function(errorMessage, $module) {},\n\n  successTest : false,\n\n  // errors\n  error : {\n    beforeSend        : 'The before send function has aborted the request',\n    error             : 'There was an error with your request',\n    exitConditions    : 'API Request Aborted. Exit conditions met',\n    JSONParse         : 'JSON could not be parsed during error handling',\n    legacyParameters  : 'You are using legacy API success callback names',\n    method            : 'The method you called is not defined',\n    missingAction     : 'API action used but no url was defined',\n    missingSerialize  : 'jquery-serialize-object is required to add form data to an existing data object',\n    missingURL        : 'No URL specified for api event',\n    noReturnedValue   : 'The beforeSend callback must return a settings object, beforeSend ignored.',\n    noStorage         : 'Caching responses locally requires session storage',\n    parseError        : 'There was an error parsing your request',\n    requiredParameter : 'Missing a required URL parameter: ',\n    statusMessage     : 'Server gave an error: ',\n    timeout           : 'Your request timed out'\n  },\n\n  regExp  : {\n    required : /\\{\\$*[A-z0-9]+\\}/g,\n    optional : /\\{\\/\\$*[A-z0-9]+\\}/g,\n  },\n\n  className: {\n    loading : 'loading',\n    error   : 'error'\n  },\n\n  selector: {\n    disabled : '.disabled',\n    form      : 'form'\n  },\n\n  metadata: {\n    action  : 'action',\n    url     : 'url'\n  }\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/colorize.js",
    "content": "/*!\n * # Semantic UI - Colorize\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.colorize = function(parameters) {\n  var\n    settings          = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.fn.colorize.settings, parameters)\n      : $.extend({}, $.fn.colorize.settings),\n    // hoist arguments\n    moduleArguments = arguments || false\n  ;\n  $(this)\n    .each(function(instanceIndex) {\n\n      var\n        $module         = $(this),\n\n        mainCanvas      = $('<canvas />')[0],\n        imageCanvas     = $('<canvas />')[0],\n        overlayCanvas   = $('<canvas />')[0],\n\n        backgroundImage = new Image(),\n\n        // defs\n        mainContext,\n        imageContext,\n        overlayContext,\n\n        image,\n        imageName,\n\n        width,\n        height,\n\n        // shortcuts\n        colors    = settings.colors,\n        paths     = settings.paths,\n        namespace = settings.namespace,\n        error     = settings.error,\n\n        // boilerplate\n        instance   = $module.data('module-' + namespace),\n        module\n      ;\n\n      module = {\n\n        checkPreconditions: function() {\n          module.debug('Checking pre-conditions');\n\n          if( !$.isPlainObject(colors) || $.isEmptyObject(colors) ) {\n            module.error(error.undefinedColors);\n            return false;\n          }\n          return true;\n        },\n\n        async: function(callback) {\n          if(settings.async) {\n            setTimeout(callback, 0);\n          }\n          else {\n            callback();\n          }\n        },\n\n        getMetadata: function() {\n          module.debug('Grabbing metadata');\n          image     = $module.data('image') || settings.image || undefined;\n          imageName = $module.data('name')  || settings.name  || instanceIndex;\n          width     = settings.width        || $module.width();\n          height    = settings.height       || $module.height();\n          if(width === 0 || height === 0) {\n            module.error(error.undefinedSize);\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing with colors', colors);\n          if( module.checkPreconditions() ) {\n\n            module.async(function() {\n              module.getMetadata();\n              module.canvas.create();\n\n              module.draw.image(function() {\n                module.draw.colors();\n                module.canvas.merge();\n              });\n              $module\n                .data('module-' + namespace, module)\n              ;\n            });\n          }\n        },\n\n        redraw: function() {\n          module.debug('Redrawing image');\n          module.async(function() {\n            module.canvas.clear();\n            module.draw.colors();\n            module.canvas.merge();\n          });\n        },\n\n        change: {\n          color: function(colorName, color) {\n            module.debug('Changing color', colorName);\n            if(colors[colorName] === undefined) {\n              module.error(error.missingColor);\n              return false;\n            }\n            colors[colorName] = color;\n            module.redraw();\n          }\n        },\n\n        canvas: {\n          create: function() {\n            module.debug('Creating canvases');\n\n            mainCanvas.width     = width;\n            mainCanvas.height    = height;\n            imageCanvas.width    = width;\n            imageCanvas.height   = height;\n            overlayCanvas.width  = width;\n            overlayCanvas.height = height;\n\n            mainContext    = mainCanvas.getContext('2d');\n            imageContext   = imageCanvas.getContext('2d');\n            overlayContext = overlayCanvas.getContext('2d');\n\n            $module\n              .append( mainCanvas )\n            ;\n            mainContext    = $module.children('canvas')[0].getContext('2d');\n          },\n          clear: function(context) {\n            module.debug('Clearing canvas');\n            overlayContext.fillStyle = '#FFFFFF';\n            overlayContext.fillRect(0, 0, width, height);\n          },\n          merge: function() {\n            if( !$.isFunction(mainContext.blendOnto) ) {\n              module.error(error.missingPlugin);\n              return;\n            }\n            mainContext.putImageData( imageContext.getImageData(0, 0, width, height), 0, 0);\n            overlayContext.blendOnto(mainContext, 'multiply');\n          }\n        },\n\n        draw: {\n\n          image: function(callback) {\n            module.debug('Drawing image');\n            callback = callback || function(){};\n            if(image) {\n              backgroundImage.src    = image;\n              backgroundImage.onload = function() {\n                imageContext.drawImage(backgroundImage, 0, 0);\n                callback();\n              };\n            }\n            else {\n              module.error(error.noImage);\n              callback();\n            }\n          },\n\n          colors: function() {\n            module.debug('Drawing color overlays', colors);\n            $.each(colors, function(colorName, color) {\n              settings.onDraw(overlayContext, imageName, colorName, color);\n            });\n          }\n\n        },\n\n        debug: function(message, variableName) {\n          if(settings.debug) {\n            if(variableName !== undefined) {\n              console.info(settings.name + ': ' + message, variableName);\n            }\n            else {\n              console.info(settings.name + ': ' + message);\n            }\n          }\n        },\n        error: function(errorMessage) {\n          console.warn(settings.name + ': ' + errorMessage);\n        },\n        invoke: function(methodName, context, methodArguments) {\n          var\n            method\n          ;\n          methodArguments = methodArguments || Array.prototype.slice.call( arguments, 2 );\n\n          if(typeof methodName == 'string' && instance !== undefined) {\n            methodName = methodName.split('.');\n            $.each(methodName, function(index, name) {\n              if( $.isPlainObject( instance[name] ) ) {\n                instance = instance[name];\n                return true;\n              }\n              else if( $.isFunction( instance[name] ) ) {\n                method = instance[name];\n                return true;\n              }\n              module.error(settings.error.method);\n              return false;\n            });\n          }\n          return ( $.isFunction( method ) )\n            ? method.apply(context, methodArguments)\n            : false\n          ;\n        }\n\n      };\n      if(instance !== undefined && moduleArguments) {\n        // simpler than invoke realizing to invoke itself (and losing scope due prototype.call()\n        if(moduleArguments[0] == 'invoke') {\n          moduleArguments = Array.prototype.slice.call( moduleArguments, 1 );\n        }\n        return module.invoke(moduleArguments[0], this, Array.prototype.slice.call( moduleArguments, 1 ) );\n      }\n      // initializing\n      module.initialize();\n    })\n  ;\n  return this;\n};\n\n$.fn.colorize.settings = {\n  name      : 'Image Colorizer',\n  debug     : true,\n  namespace : 'colorize',\n\n  onDraw    : function(overlayContext, imageName, colorName, color) {},\n\n  // whether to block execution while updating canvas\n  async     : true,\n  // object containing names and default values of color regions\n  colors    : {},\n\n  metadata: {\n    image : 'image',\n    name  : 'name'\n  },\n\n  error: {\n    noImage         : 'No tracing image specified',\n    undefinedColors : 'No default colors specified.',\n    missingColor    : 'Attempted to change color that does not exist',\n    missingPlugin   : 'Blend onto plug-in must be included',\n    undefinedHeight : 'The width or height of image canvas could not be automatically determined. Please specify a height.'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/form.js",
    "content": "/*!\n * # Semantic UI - Form Validation\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.form = function(parameters) {\n  var\n    $allModules      = $(this),\n    moduleSelector   = $allModules.selector || '',\n\n    time             = new Date().getTime(),\n    performance      = [],\n\n    query            = arguments[0],\n    legacyParameters = arguments[1],\n    methodInvoked    = (typeof query == 'string'),\n    queryArguments   = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        $module     = $(this),\n        element     = this,\n\n        formErrors  = [],\n        keyHeldDown = false,\n\n        // set at run-time\n        $field,\n        $group,\n        $message,\n        $prompt,\n        $submit,\n        $clear,\n        $reset,\n\n        settings,\n        validation,\n\n        metadata,\n        selector,\n        className,\n        regExp,\n        error,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n\n        instance,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          // settings grabbed at run time\n          module.get.settings();\n          if(methodInvoked) {\n            if(instance === undefined) {\n              module.instantiate();\n            }\n            module.invoke(query);\n          }\n          else {\n            if(instance !== undefined) {\n              instance.invoke('destroy');\n            }\n            module.verbose('Initializing form validation', $module, settings);\n            module.bindEvents();\n            module.set.defaults();\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          module.removeEvents();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $field      = $module.find(selector.field);\n          $group      = $module.find(selector.group);\n          $message    = $module.find(selector.message);\n          $prompt     = $module.find(selector.prompt);\n\n          $submit     = $module.find(selector.submit);\n          $clear      = $module.find(selector.clear);\n          $reset      = $module.find(selector.reset);\n        },\n\n        submit: function() {\n          module.verbose('Submitting form', $module);\n          $module\n            .submit()\n          ;\n        },\n\n        attachEvents: function(selector, action) {\n          action = action || 'submit';\n          $(selector)\n            .on('click' + eventNamespace, function(event) {\n              module[action]();\n              event.preventDefault();\n            })\n          ;\n        },\n\n        bindEvents: function() {\n          module.verbose('Attaching form events');\n          $module\n            .on('submit' + eventNamespace, module.validate.form)\n            .on('blur'   + eventNamespace, selector.field, module.event.field.blur)\n            .on('click'  + eventNamespace, selector.submit, module.submit)\n            .on('click'  + eventNamespace, selector.reset, module.reset)\n            .on('click'  + eventNamespace, selector.clear, module.clear)\n          ;\n          if(settings.keyboardShortcuts) {\n            $module\n              .on('keydown' + eventNamespace, selector.field, module.event.field.keydown)\n            ;\n          }\n          $field\n            .each(function() {\n              var\n                $input     = $(this),\n                type       = $input.prop('type'),\n                inputEvent = module.get.changeEvent(type, $input)\n              ;\n              $(this)\n                .on(inputEvent + eventNamespace, module.event.field.change)\n              ;\n            })\n          ;\n        },\n\n        clear: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue) || '',\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('clear');\n              }\n              else if(isCheckbox) {\n                $field.prop('checked', false);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val('');\n              }\n            })\n          ;\n        },\n\n        reset: function() {\n          $field\n            .each(function () {\n              var\n                $field       = $(this),\n                $element     = $field.parent(),\n                $fieldGroup  = $field.closest($group),\n                $prompt      = $fieldGroup.find(selector.prompt),\n                defaultValue = $field.data(metadata.defaultValue),\n                isCheckbox   = $element.is(selector.uiCheckbox),\n                isDropdown   = $element.is(selector.uiDropdown),\n                isErrored    = $fieldGroup.hasClass(className.error)\n              ;\n              if(defaultValue === undefined) {\n                return;\n              }\n              if(isErrored) {\n                module.verbose('Resetting error on field', $fieldGroup);\n                $fieldGroup.removeClass(className.error);\n                $prompt.remove();\n              }\n              if(isDropdown) {\n                module.verbose('Resetting dropdown value', $element, defaultValue);\n                $element.dropdown('restore defaults');\n              }\n              else if(isCheckbox) {\n                module.verbose('Resetting checkbox value', $element, defaultValue);\n                $field.prop('checked', defaultValue);\n              }\n              else {\n                module.verbose('Resetting field value', $field, defaultValue);\n                $field.val(defaultValue);\n              }\n            })\n          ;\n        },\n\n        determine: {\n          isValid: function() {\n            var\n              allValid = true\n            ;\n            $.each(validation, function(fieldName, field) {\n              if( !( module.validate.field(field, fieldName, true) ) ) {\n                allValid = false;\n              }\n            });\n            return allValid;\n          }\n        },\n\n        is: {\n          bracketedRule: function(rule) {\n            return (rule.type && rule.type.match(settings.regExp.bracket));\n          },\n          shorthandFields: function(fields) {\n            var\n              fieldKeys = Object.keys(fields),\n              firstRule = fields[fieldKeys[0]]\n            ;\n            return module.is.shorthandRules(firstRule);\n          },\n          // duck type rule test\n          shorthandRules: function(rules) {\n            return (typeof rules == 'string' || $.isArray(rules));\n          },\n          empty: function($field) {\n            if(!$field || $field.length === 0) {\n              return true;\n            }\n            else if($field.is('input[type=\"checkbox\"]')) {\n              return !$field.is(':checked');\n            }\n            else {\n              return module.is.blank($field);\n            }\n          },\n          blank: function($field) {\n            return $.trim($field.val()) === '';\n          },\n          valid: function(field) {\n            var\n              allValid = true\n            ;\n            if(field) {\n              module.verbose('Checking if field is valid', field);\n              return module.validate.field(validation[field], field, false);\n            }\n            else {\n              module.verbose('Checking if form is valid');\n              $.each(validation, function(fieldName, field) {\n                if( !module.is.valid(fieldName) ) {\n                  allValid = false;\n                }\n              });\n              return allValid;\n            }\n          }\n        },\n\n        removeEvents: function() {\n          $module\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n          $submit\n            .off(eventNamespace)\n          ;\n          $field\n            .off(eventNamespace)\n          ;\n        },\n\n        event: {\n          field: {\n            keydown: function(event) {\n              var\n                $field       = $(this),\n                key          = event.which,\n                isInput      = $field.is(selector.input),\n                isCheckbox   = $field.is(selector.checkbox),\n                isInDropdown = ($field.closest(selector.uiDropdown).length > 0),\n                keyCode      = {\n                  enter  : 13,\n                  escape : 27\n                }\n              ;\n              if( key == keyCode.escape) {\n                module.verbose('Escape key pressed blurring field');\n                $field\n                  .blur()\n                ;\n              }\n              if(!event.ctrlKey && key == keyCode.enter && isInput && !isInDropdown && !isCheckbox) {\n                if(!keyHeldDown) {\n                  $field\n                    .one('keyup' + eventNamespace, module.event.field.keyup)\n                  ;\n                  module.submit();\n                  module.debug('Enter pressed on input submitting form');\n                }\n                keyHeldDown = true;\n              }\n            },\n            keyup: function() {\n              keyHeldDown = false;\n            },\n            blur: function(event) {\n              var\n                $field          = $(this),\n                $fieldGroup     = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if( $fieldGroup.hasClass(className.error) ) {\n                module.debug('Revalidating field', $field, validationRules);\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n              else if(settings.on == 'blur' || settings.on == 'change') {\n                if(validationRules) {\n                  module.validate.field( validationRules );\n                }\n              }\n            },\n            change: function(event) {\n              var\n                $field      = $(this),\n                $fieldGroup = $field.closest($group),\n                validationRules = module.get.validation($field)\n              ;\n              if(validationRules && (settings.on == 'change' || ( $fieldGroup.hasClass(className.error) && settings.revalidate) )) {\n                clearTimeout(module.timer);\n                module.timer = setTimeout(function() {\n                  module.debug('Revalidating field', $field,  module.get.validation($field));\n                  module.validate.field( validationRules );\n                }, settings.delay);\n              }\n            }\n          }\n\n        },\n\n        get: {\n          ancillaryValue: function(rule) {\n            if(!rule.type || (!rule.value && !module.is.bracketedRule(rule))) {\n              return false;\n            }\n            return (rule.value !== undefined)\n              ? rule.value\n              : rule.type.match(settings.regExp.bracket)[1] + ''\n            ;\n          },\n          ruleName: function(rule) {\n            if( module.is.bracketedRule(rule) ) {\n              return rule.type.replace(rule.type.match(settings.regExp.bracket)[0], '');\n            }\n            return rule.type;\n          },\n          changeEvent: function(type, $input) {\n            if(type == 'checkbox' || type == 'radio' || type == 'hidden' || $input.is('select')) {\n              return 'change';\n            }\n            else {\n              return module.get.inputEvent();\n            }\n          },\n          inputEvent: function() {\n            return (document.createElement('input').oninput !== undefined)\n              ? 'input'\n              : (document.createElement('input').onpropertychange !== undefined)\n                ? 'propertychange'\n                : 'keyup'\n            ;\n          },\n          fieldsFromShorthand: function(fields) {\n            var\n              fullFields = {}\n            ;\n            $.each(fields, function(name, rules) {\n              if(typeof rules == 'string') {\n                rules = [rules];\n              }\n              fullFields[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                fullFields[name].rules.push({ type: rule });\n              });\n            });\n            return fullFields;\n          },\n          prompt: function(rule, field) {\n            var\n              ruleName      = module.get.ruleName(rule),\n              ancillary     = module.get.ancillaryValue(rule),\n              prompt        = rule.prompt || settings.prompt[ruleName] || settings.text.unspecifiedRule,\n              requiresValue = (prompt.search('{value}') !== -1),\n              requiresName  = (prompt.search('{name}') !== -1),\n              $label,\n              $field,\n              name\n            ;\n            if(requiresName || requiresValue) {\n              $field = module.get.field(field.identifier);\n            }\n            if(requiresValue) {\n              prompt = prompt.replace('{value}', $field.val());\n            }\n            if(requiresName) {\n              $label = $field.closest(selector.group).find('label').eq(0);\n              name = ($label.length == 1)\n                ? $label.text()\n                : $field.prop('placeholder') || settings.text.unspecifiedField\n              ;\n              prompt = prompt.replace('{name}', name);\n            }\n            prompt = prompt.replace('{identifier}', field.identifier);\n            prompt = prompt.replace('{ruleValue}', ancillary);\n            if(!rule.prompt) {\n              module.verbose('Using default validation prompt for type', prompt, ruleName);\n            }\n            return prompt;\n          },\n          settings: function() {\n            if($.isPlainObject(parameters)) {\n              var\n                keys     = Object.keys(parameters),\n                isLegacySettings = (keys.length > 0)\n                  ? (parameters[keys[0]].identifier !== undefined && parameters[keys[0]].rules !== undefined)\n                  : false,\n                ruleKeys\n              ;\n              if(isLegacySettings) {\n                // 1.x (ducktyped)\n                settings   = $.extend(true, {}, $.fn.form.settings, legacyParameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, parameters);\n                module.error(settings.error.oldSyntax, element);\n                module.verbose('Extending settings from legacy parameters', validation, settings);\n              }\n              else {\n                // 2.x\n                if(parameters.fields && module.is.shorthandFields(parameters.fields)) {\n                  parameters.fields = module.get.fieldsFromShorthand(parameters.fields);\n                }\n                settings   = $.extend(true, {}, $.fn.form.settings, parameters);\n                validation = $.extend({}, $.fn.form.settings.defaults, settings.fields);\n                module.verbose('Extending settings', validation, settings);\n              }\n            }\n            else {\n              settings   = $.fn.form.settings;\n              validation = $.fn.form.settings.defaults;\n              module.verbose('Using default form validation', validation, settings);\n            }\n\n            // shorthand\n            namespace       = settings.namespace;\n            metadata        = settings.metadata;\n            selector        = settings.selector;\n            className       = settings.className;\n            regExp          = settings.regExp;\n            error           = settings.error;\n            moduleNamespace = 'module-' + namespace;\n            eventNamespace  = '.' + namespace;\n\n            // grab instance\n            instance = $module.data(moduleNamespace);\n\n            // refresh selector cache\n            module.refresh();\n          },\n          field: function(identifier) {\n            module.verbose('Finding field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if($field.filter('#' + identifier).length > 0 ) {\n              return $field.filter('#' + identifier);\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'\"]');\n            }\n            else if( $field.filter('[name=\"' + identifier +'[]\"]').length > 0 ) {\n              return $field.filter('[name=\"' + identifier +'[]\"]');\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]');\n            }\n            return $('<input/>');\n          },\n          fields: function(fields) {\n            var\n              $fields = $()\n            ;\n            $.each(fields, function(index, name) {\n              $fields = $fields.add( module.get.field(name) );\n            });\n            return $fields;\n          },\n          validation: function($field) {\n            var\n              fieldValidation,\n              identifier\n            ;\n            if(!validation) {\n              return false;\n            }\n            $.each(validation, function(fieldName, field) {\n              identifier = field.identifier || fieldName;\n              if( module.get.field(identifier)[0] == $field[0] ) {\n                field.identifier = identifier;\n                fieldValidation = field;\n              }\n            });\n            return fieldValidation || false;\n          },\n          value: function (field) {\n            var\n              fields = [],\n              results\n            ;\n            fields.push(field);\n            results = module.get.values.call(element, fields);\n            return results[field];\n          },\n          values: function (fields) {\n            var\n              $fields = $.isArray(fields)\n                ? module.get.fields(fields)\n                : $field,\n              values = {}\n            ;\n            $fields.each(function(index, field) {\n              var\n                $field     = $(field),\n                type       = $field.prop('type'),\n                name       = $field.prop('name'),\n                value      = $field.val(),\n                isCheckbox = $field.is(selector.checkbox),\n                isRadio    = $field.is(selector.radio),\n                isMultiple = (name.indexOf('[]') !== -1),\n                isChecked  = (isCheckbox)\n                  ? $field.is(':checked')\n                  : false\n              ;\n              if(name) {\n                if(isMultiple) {\n                  name = name.replace('[]', '');\n                  if(!values[name]) {\n                    values[name] = [];\n                  }\n                  if(isCheckbox) {\n                    if(isChecked) {\n                      values[name].push(value || true);\n                    }\n                    else {\n                      values[name].push(false);\n                    }\n                  }\n                  else {\n                    values[name].push(value);\n                  }\n                }\n                else {\n                  if(isRadio) {\n                    if(values[name] === undefined) {\n                      values[name] = (isChecked)\n                        ? true\n                        : false\n                      ;\n                    }\n                  }\n                  else if(isCheckbox) {\n                    if(isChecked) {\n                      values[name] = value || true;\n                    }\n                    else {\n                      values[name] = false;\n                    }\n                  }\n                  else {\n                    values[name] = value;\n                  }\n                }\n              }\n            });\n            return values;\n          }\n        },\n\n        has: {\n\n          field: function(identifier) {\n            module.verbose('Checking for existence of a field with identifier', identifier);\n            identifier = module.escape.string(identifier);\n            if(typeof identifier !== 'string') {\n              module.error(error.identifier, identifier);\n            }\n            if($field.filter('#' + identifier).length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[name=\"' + identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            else if( $field.filter('[data-' + metadata.validate + '=\"'+ identifier +'\"]').length > 0 ) {\n              return true;\n            }\n            return false;\n          }\n\n        },\n\n        escape: {\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        add: {\n          // alias\n          rule: function(name, rules) {\n            module.add.field(name, rules);\n          },\n          field: function(name, rules) {\n            var\n              newValidation = {}\n            ;\n            if(module.is.shorthandRules(rules)) {\n              rules = $.isArray(rules)\n                ? rules\n                : [rules]\n              ;\n              newValidation[name] = {\n                rules: []\n              };\n              $.each(rules, function(index, rule) {\n                newValidation[name].rules.push({ type: rule });\n              });\n            }\n            else {\n              newValidation[name] = rules;\n            }\n            validation = $.extend({}, validation, newValidation);\n            module.debug('Adding rules', newValidation, validation);\n          },\n          fields: function(fields) {\n            var\n              newValidation\n            ;\n            if(fields && module.is.shorthandFields(fields)) {\n              newValidation = module.get.fieldsFromShorthand(fields);\n            }\n            else {\n              newValidation = fields;\n            }\n            validation = $.extend({}, validation, newValidation);\n          },\n          prompt: function(identifier, errors) {\n            var\n              $field       = module.get.field(identifier),\n              $fieldGroup  = $field.closest($group),\n              $prompt      = $fieldGroup.children(selector.prompt),\n              promptExists = ($prompt.length !== 0)\n            ;\n            errors = (typeof errors == 'string')\n              ? [errors]\n              : errors\n            ;\n            module.verbose('Adding field error state', identifier);\n            $fieldGroup\n              .addClass(className.error)\n            ;\n            if(settings.inline) {\n              if(!promptExists) {\n                $prompt = settings.templates.prompt(errors);\n                $prompt\n                  .appendTo($fieldGroup)\n                ;\n              }\n              $prompt\n                .html(errors[0])\n              ;\n              if(!promptExists) {\n                if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                  module.verbose('Displaying error with css transition', settings.transition);\n                  $prompt.transition(settings.transition + ' in', settings.duration);\n                }\n                else {\n                  module.verbose('Displaying error with fallback javascript animation');\n                  $prompt\n                    .fadeIn(settings.duration)\n                  ;\n                }\n              }\n              else {\n                module.verbose('Inline errors are disabled, no inline error added', identifier);\n              }\n            }\n          },\n          errors: function(errors) {\n            module.debug('Adding form error messages', errors);\n            module.set.error();\n            $message\n              .html( settings.templates.error(errors) )\n            ;\n          }\n        },\n\n        remove: {\n          rule: function(field, rule) {\n            var\n              rules = $.isArray(rule)\n                ? rule\n                : [rule]\n            ;\n            if(rule == undefined) {\n              module.debug('Removed all rules');\n              validation[field].rules = [];\n              return;\n            }\n            if(validation[field] == undefined || !$.isArray(validation[field].rules)) {\n              return;\n            }\n            $.each(validation[field].rules, function(index, rule) {\n              if(rules.indexOf(rule.type) !== -1) {\n                module.debug('Removed rule', rule.type);\n                validation[field].rules.splice(index, 1);\n              }\n            });\n          },\n          field: function(field) {\n            var\n              fields = $.isArray(field)\n                ? field\n                : [field]\n            ;\n            $.each(fields, function(index, field) {\n              module.remove.rule(field);\n            });\n          },\n          // alias\n          rules: function(field, rules) {\n            if($.isArray(field)) {\n              $.each(fields, function(index, field) {\n                module.remove.rule(field, rules);\n              });\n            }\n            else {\n              module.remove.rule(field, rules);\n            }\n          },\n          fields: function(fields) {\n            module.remove.field(fields);\n          },\n          prompt: function(identifier) {\n            var\n              $field      = module.get.field(identifier),\n              $fieldGroup = $field.closest($group),\n              $prompt     = $fieldGroup.children(selector.prompt)\n            ;\n            $fieldGroup\n              .removeClass(className.error)\n            ;\n            if(settings.inline && $prompt.is(':visible')) {\n              module.verbose('Removing prompt for field', identifier);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                $prompt.transition(settings.transition + ' out', settings.duration, function() {\n                  $prompt.remove();\n                });\n              }\n              else {\n                $prompt\n                  .fadeOut(settings.duration, function(){\n                    $prompt.remove();\n                  })\n                ;\n              }\n            }\n          }\n        },\n\n        set: {\n          success: function() {\n            $module\n              .removeClass(className.error)\n              .addClass(className.success)\n            ;\n          },\n          defaults: function () {\n            $field\n              .each(function () {\n                var\n                  $field     = $(this),\n                  isCheckbox = ($field.filter(selector.checkbox).length > 0),\n                  value      = (isCheckbox)\n                    ? $field.is(':checked')\n                    : $field.val()\n                ;\n                $field.data(metadata.defaultValue, value);\n              })\n            ;\n          },\n          error: function() {\n            $module\n              .removeClass(className.success)\n              .addClass(className.error)\n            ;\n          },\n          value: function (field, value) {\n            var\n              fields = {}\n            ;\n            fields[field] = value;\n            return module.set.values.call(element, fields);\n          },\n          values: function (fields) {\n            if($.isEmptyObject(fields)) {\n              return;\n            }\n            $.each(fields, function(key, value) {\n              var\n                $field      = module.get.field(key),\n                $element    = $field.parent(),\n                isMultiple  = $.isArray(value),\n                isCheckbox  = $element.is(selector.uiCheckbox),\n                isDropdown  = $element.is(selector.uiDropdown),\n                isRadio     = ($field.is(selector.radio) && isCheckbox),\n                fieldExists = ($field.length > 0),\n                $multipleField\n              ;\n              if(fieldExists) {\n                if(isMultiple && isCheckbox) {\n                  module.verbose('Selecting multiple', value, $field);\n                  $element.checkbox('uncheck');\n                  $.each(value, function(index, value) {\n                    $multipleField = $field.filter('[value=\"' + value + '\"]');\n                    $element       = $multipleField.parent();\n                    if($multipleField.length > 0) {\n                      $element.checkbox('check');\n                    }\n                  });\n                }\n                else if(isRadio) {\n                  module.verbose('Selecting radio value', value, $field);\n                  $field.filter('[value=\"' + value + '\"]')\n                    .parent(selector.uiCheckbox)\n                      .checkbox('check')\n                  ;\n                }\n                else if(isCheckbox) {\n                  module.verbose('Setting checkbox value', value, $element);\n                  if(value === true) {\n                    $element.checkbox('check');\n                  }\n                  else {\n                    $element.checkbox('uncheck');\n                  }\n                }\n                else if(isDropdown) {\n                  module.verbose('Setting dropdown value', value, $element);\n                  $element.dropdown('set selected', value);\n                }\n                else {\n                  module.verbose('Setting field value', value, $field);\n                  $field.val(value);\n                }\n              }\n            });\n          }\n        },\n\n        validate: {\n\n          form: function(event, ignoreCallbacks) {\n            var\n              values = module.get.values(),\n              apiRequest\n            ;\n\n            // input keydown event will fire submit repeatedly by browser default\n            if(keyHeldDown) {\n              return false;\n            }\n\n            // reset errors\n            formErrors = [];\n            if( module.determine.isValid() ) {\n              module.debug('Form has no validation errors, submitting');\n              module.set.success();\n              if(ignoreCallbacks !== true) {\n                return settings.onSuccess.call(element, event, values);\n              }\n            }\n            else {\n              module.debug('Form has errors');\n              module.set.error();\n              if(!settings.inline) {\n                module.add.errors(formErrors);\n              }\n              // prevent ajax submit\n              if($module.data('moduleApi') !== undefined) {\n                event.stopImmediatePropagation();\n              }\n              if(ignoreCallbacks !== true) {\n                return settings.onFailure.call(element, formErrors, values);\n              }\n            }\n          },\n\n          // takes a validation object and returns whether field passes validation\n          field: function(field, fieldName, showErrors) {\n            showErrors = (showErrors !== undefined)\n              ? showErrors\n              : true\n            ;\n            if(typeof field == 'string') {\n              module.verbose('Validating field', field);\n              fieldName = field;\n              field     = validation[field];\n            }\n            var\n              identifier    = field.identifier || fieldName,\n              $field        = module.get.field(identifier),\n              $dependsField = (field.depends)\n                ? module.get.field(field.depends)\n                : false,\n              fieldValid  = true,\n              fieldErrors = []\n            ;\n            if(!field.identifier) {\n              module.debug('Using field name as identifier', identifier);\n              field.identifier = identifier;\n            }\n            if($field.prop('disabled')) {\n              module.debug('Field is disabled. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.optional && module.is.blank($field)){\n              module.debug('Field is optional and blank. Skipping', identifier);\n              fieldValid = true;\n            }\n            else if(field.depends && module.is.empty($dependsField)) {\n              module.debug('Field depends on another value that is not present or empty. Skipping', $dependsField);\n              fieldValid = true;\n            }\n            else if(field.rules !== undefined) {\n              $.each(field.rules, function(index, rule) {\n                if( module.has.field(identifier) && !( module.validate.rule(field, rule) ) ) {\n                  module.debug('Field is invalid', identifier, rule.type);\n                  fieldErrors.push(module.get.prompt(rule, field));\n                  fieldValid = false;\n                }\n              });\n            }\n            if(fieldValid) {\n              if(showErrors) {\n                module.remove.prompt(identifier, fieldErrors);\n                settings.onValid.call($field);\n              }\n            }\n            else {\n              if(showErrors) {\n                formErrors = formErrors.concat(fieldErrors);\n                module.add.prompt(identifier, fieldErrors);\n                settings.onInvalid.call($field, fieldErrors);\n              }\n              return false;\n            }\n            return true;\n          },\n\n          // takes validation rule and returns whether field passes rule\n          rule: function(field, rule) {\n            var\n              $field       = module.get.field(field.identifier),\n              type         = rule.type,\n              value        = $field.val(),\n              isValid      = true,\n              ancillary    = module.get.ancillaryValue(rule),\n              ruleName     = module.get.ruleName(rule),\n              ruleFunction = settings.rules[ruleName]\n            ;\n            if( !$.isFunction(ruleFunction) ) {\n              module.error(error.noRule, ruleName);\n              return;\n            }\n            // cast to string avoiding encoding special values\n            value = (value === undefined || value === '' || value === null)\n              ? ''\n              : $.trim(value + '')\n            ;\n            return ruleFunction.call($field, value, ancillary);\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      module.initialize();\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.form.settings = {\n\n  name              : 'Form',\n  namespace         : 'form',\n\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  fields            : false,\n\n  keyboardShortcuts : true,\n  on                : 'submit',\n  inline            : false,\n\n  delay             : 200,\n  revalidate        : true,\n\n  transition        : 'scale',\n  duration          : 200,\n\n  onValid           : function() {},\n  onInvalid         : function() {},\n  onSuccess         : function() { return true; },\n  onFailure         : function() { return false; },\n\n  metadata : {\n    defaultValue : 'default',\n    validate     : 'validate'\n  },\n\n  regExp: {\n    htmlID  : /^[a-zA-Z][\\w:.-]*$/g,\n    bracket : /\\[(.*)\\]/i,\n    decimal : /^\\d+\\.?\\d*$/,\n    email   : /^[a-z0-9!#$%&'*+\\/=?^_`{|}~.-]+@[a-z0-9]([a-z0-9-]*[a-z0-9])?(\\.[a-z0-9]([a-z0-9-]*[a-z0-9])?)*$/i,\n    escape  : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    flags   : /^\\/(.*)\\/(.*)?/,\n    integer : /^\\-?\\d+$/,\n    number  : /^\\-?\\d*(\\.\\d+)?$/,\n    url     : /(https?:\\/\\/(?:www\\.|(?!www))[^\\s\\.]+\\.[^\\s]{2,}|www\\.[^\\s]+\\.[^\\s]{2,})/i\n  },\n\n  text: {\n    unspecifiedRule  : 'Please enter a valid value',\n    unspecifiedField : 'This field'\n  },\n\n  prompt: {\n    empty                : '{name} must have a value',\n    checked              : '{name} must be checked',\n    email                : '{name} must be a valid e-mail',\n    url                  : '{name} must be a valid url',\n    regExp               : '{name} is not formatted correctly',\n    integer              : '{name} must be an integer',\n    decimal              : '{name} must be a decimal number',\n    number               : '{name} must be set to a number',\n    is                   : '{name} must be \"{ruleValue}\"',\n    isExactly            : '{name} must be exactly \"{ruleValue}\"',\n    not                  : '{name} cannot be set to \"{ruleValue}\"',\n    notExactly           : '{name} cannot be set to exactly \"{ruleValue}\"',\n    contain              : '{name} cannot contain \"{ruleValue}\"',\n    containExactly       : '{name} cannot contain exactly \"{ruleValue}\"',\n    doesntContain        : '{name} must contain  \"{ruleValue}\"',\n    doesntContainExactly : '{name} must contain exactly \"{ruleValue}\"',\n    minLength            : '{name} must be at least {ruleValue} characters',\n    length               : '{name} must be at least {ruleValue} characters',\n    exactLength          : '{name} must be exactly {ruleValue} characters',\n    maxLength            : '{name} cannot be longer than {ruleValue} characters',\n    match                : '{name} must match {ruleValue} field',\n    different            : '{name} must have a different value than {ruleValue} field',\n    creditCard           : '{name} must be a valid credit card number',\n    minCount             : '{name} must have at least {ruleValue} choices',\n    exactCount           : '{name} must have exactly {ruleValue} choices',\n    maxCount             : '{name} must have {ruleValue} or less choices'\n  },\n\n  selector : {\n    checkbox   : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    clear      : '.clear',\n    field      : 'input, textarea, select',\n    group      : '.field',\n    input      : 'input',\n    message    : '.error.message',\n    prompt     : '.prompt.label',\n    radio      : 'input[type=\"radio\"]',\n    reset      : '.reset:not([type=\"reset\"])',\n    submit     : '.submit:not([type=\"submit\"])',\n    uiCheckbox : '.ui.checkbox',\n    uiDropdown : '.ui.dropdown'\n  },\n\n  className : {\n    error   : 'error',\n    label   : 'ui prompt label',\n    pressed : 'down',\n    success : 'success'\n  },\n\n  error: {\n    identifier : 'You must specify a string identifier for each field',\n    method     : 'The method you called is not defined.',\n    noRule     : 'There is no rule matching the one you specified',\n    oldSyntax  : 'Starting in 2.0 forms now only take a single settings object. Validation settings converted to new syntax automatically.'\n  },\n\n  templates: {\n\n    // template that produces error message\n    error: function(errors) {\n      var\n        html = '<ul class=\"list\">'\n      ;\n      $.each(errors, function(index, value) {\n        html += '<li>' + value + '</li>';\n      });\n      html += '</ul>';\n      return $(html);\n    },\n\n    // template that produces label\n    prompt: function(errors) {\n      return $('<div/>')\n        .addClass('ui basic red pointing prompt label')\n        .html(errors[0])\n      ;\n    }\n  },\n\n  rules: {\n\n    // is not empty or blank string\n    empty: function(value) {\n      return !(value === undefined || '' === value || $.isArray(value) && value.length === 0);\n    },\n\n    // checkbox checked\n    checked: function() {\n      return ($(this).filter(':checked').length > 0);\n    },\n\n    // is most likely an email\n    email: function(value){\n      return $.fn.form.settings.regExp.email.test(value);\n    },\n\n    // value is most likely url\n    url: function(value) {\n      return $.fn.form.settings.regExp.url.test(value);\n    },\n\n    // matches specified regExp\n    regExp: function(value, regExp) {\n      if(regExp instanceof RegExp) {\n        return value.match(regExp);\n      }\n      var\n        regExpParts = regExp.match($.fn.form.settings.regExp.flags),\n        flags\n      ;\n      // regular expression specified as /baz/gi (flags)\n      if(regExpParts) {\n        regExp = (regExpParts.length >= 2)\n          ? regExpParts[1]\n          : regExp\n        ;\n        flags = (regExpParts.length >= 3)\n          ? regExpParts[2]\n          : ''\n        ;\n      }\n      return value.match( new RegExp(regExp, flags) );\n    },\n\n    // is valid integer or matches range\n    integer: function(value, range) {\n      var\n        intRegExp = $.fn.form.settings.regExp.integer,\n        min,\n        max,\n        parts\n      ;\n      if( !range || ['', '..'].indexOf(range) !== -1) {\n        // do nothing\n      }\n      else if(range.indexOf('..') == -1) {\n        if(intRegExp.test(range)) {\n          min = max = range - 0;\n        }\n      }\n      else {\n        parts = range.split('..', 2);\n        if(intRegExp.test(parts[0])) {\n          min = parts[0] - 0;\n        }\n        if(intRegExp.test(parts[1])) {\n          max = parts[1] - 0;\n        }\n      }\n      return (\n        intRegExp.test(value) &&\n        (min === undefined || value >= min) &&\n        (max === undefined || value <= max)\n      );\n    },\n\n    // is valid number (with decimal)\n    decimal: function(value) {\n      return $.fn.form.settings.regExp.decimal.test(value);\n    },\n\n    // is valid number\n    number: function(value) {\n      return $.fn.form.settings.regExp.number.test(value);\n    },\n\n    // is value (case insensitive)\n    is: function(value, text) {\n      text = (typeof text == 'string')\n        ? text.toLowerCase()\n        : text\n      ;\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      return (value == text);\n    },\n\n    // is value\n    isExactly: function(value, text) {\n      return (value == text);\n    },\n\n    // value is not another value (case insensitive)\n    not: function(value, notValue) {\n      value = (typeof value == 'string')\n        ? value.toLowerCase()\n        : value\n      ;\n      notValue = (typeof notValue == 'string')\n        ? notValue.toLowerCase()\n        : notValue\n      ;\n      return (value != notValue);\n    },\n\n    // value is not another value (case sensitive)\n    notExactly: function(value, notValue) {\n      return (value != notValue);\n    },\n\n    // value contains text (insensitive)\n    contains: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) !== -1);\n    },\n\n    // value contains text (case sensitive)\n    containsExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) !== -1);\n    },\n\n    // value contains text (insensitive)\n    doesntContain: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text, 'i') ) === -1);\n    },\n\n    // value contains text (case sensitive)\n    doesntContainExactly: function(value, text) {\n      // escape regex characters\n      text = text.replace($.fn.form.settings.regExp.escape, \"\\\\$&\");\n      return (value.search( new RegExp(text) ) === -1);\n    },\n\n    // is at least string length\n    minLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // see rls notes for 2.0.6 (this is a duplicate of minLength)\n    length: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length >= requiredLength)\n        : false\n      ;\n    },\n\n    // is exactly length\n    exactLength: function(value, requiredLength) {\n      return (value !== undefined)\n        ? (value.length == requiredLength)\n        : false\n      ;\n    },\n\n    // is less than length\n    maxLength: function(value, maxLength) {\n      return (value !== undefined)\n        ? (value.length <= maxLength)\n        : false\n      ;\n    },\n\n    // matches another field\n    match: function(value, identifier) {\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() == matchingValue.toString() )\n        : false\n      ;\n    },\n\n    // different than another field\n    different: function(value, identifier) {\n      // use either id or name of field\n      var\n        $form = $(this),\n        matchingValue\n      ;\n      if( $('[data-validate=\"'+ identifier +'\"]').length > 0 ) {\n        matchingValue = $('[data-validate=\"'+ identifier +'\"]').val();\n      }\n      else if($('#' + identifier).length > 0) {\n        matchingValue = $('#' + identifier).val();\n      }\n      else if($('[name=\"' + identifier +'\"]').length > 0) {\n        matchingValue = $('[name=\"' + identifier + '\"]').val();\n      }\n      else if( $('[name=\"' + identifier +'[]\"]').length > 0 ) {\n        matchingValue = $('[name=\"' + identifier +'[]\"]');\n      }\n      return (matchingValue !== undefined)\n        ? ( value.toString() !== matchingValue.toString() )\n        : false\n      ;\n    },\n\n    creditCard: function(cardNumber, cardTypes) {\n      var\n        cards = {\n          visa: {\n            pattern : /^4/,\n            length  : [16]\n          },\n          amex: {\n            pattern : /^3[47]/,\n            length  : [15]\n          },\n          mastercard: {\n            pattern : /^5[1-5]/,\n            length  : [16]\n          },\n          discover: {\n            pattern : /^(6011|622(12[6-9]|1[3-9][0-9]|[2-8][0-9]{2}|9[0-1][0-9]|92[0-5]|64[4-9])|65)/,\n            length  : [16]\n          },\n          unionPay: {\n            pattern : /^(62|88)/,\n            length  : [16, 17, 18, 19]\n          },\n          jcb: {\n            pattern : /^35(2[89]|[3-8][0-9])/,\n            length  : [16]\n          },\n          maestro: {\n            pattern : /^(5018|5020|5038|6304|6759|676[1-3])/,\n            length  : [12, 13, 14, 15, 16, 17, 18, 19]\n          },\n          dinersClub: {\n            pattern : /^(30[0-5]|^36)/,\n            length  : [14]\n          },\n          laser: {\n            pattern : /^(6304|670[69]|6771)/,\n            length  : [16, 17, 18, 19]\n          },\n          visaElectron: {\n            pattern : /^(4026|417500|4508|4844|491(3|7))/,\n            length  : [16]\n          }\n        },\n        valid         = {},\n        validCard     = false,\n        requiredTypes = (typeof cardTypes == 'string')\n          ? cardTypes.split(',')\n          : false,\n        unionPay,\n        validation\n      ;\n\n      if(typeof cardNumber !== 'string' || cardNumber.length === 0) {\n        return;\n      }\n\n      // allow dashes in card\n      cardNumber = cardNumber.replace(/[\\-]/g, '');\n\n      // verify card types\n      if(requiredTypes) {\n        $.each(requiredTypes, function(index, type){\n          // verify each card type\n          validation = cards[type];\n          if(validation) {\n            valid = {\n              length  : ($.inArray(cardNumber.length, validation.length) !== -1),\n              pattern : (cardNumber.search(validation.pattern) !== -1)\n            };\n            if(valid.length && valid.pattern) {\n              validCard = true;\n            }\n          }\n        });\n\n        if(!validCard) {\n          return false;\n        }\n      }\n\n      // skip luhn for UnionPay\n      unionPay = {\n        number  : ($.inArray(cardNumber.length, cards.unionPay.length) !== -1),\n        pattern : (cardNumber.search(cards.unionPay.pattern) !== -1)\n      };\n      if(unionPay.number && unionPay.pattern) {\n        return true;\n      }\n\n      // verify luhn, adapted from  <https://gist.github.com/2134376>\n      var\n        length        = cardNumber.length,\n        multiple      = 0,\n        producedValue = [\n          [0, 1, 2, 3, 4, 5, 6, 7, 8, 9],\n          [0, 2, 4, 6, 8, 1, 3, 5, 7, 9]\n        ],\n        sum           = 0\n      ;\n      while (length--) {\n        sum += producedValue[multiple][parseInt(cardNumber.charAt(length), 10)];\n        multiple ^= 1;\n      }\n      return (sum % 10 === 0 && sum > 0);\n    },\n\n    minCount: function(value, minCount) {\n      if(minCount == 0) {\n        return true;\n      }\n      if(minCount == 1) {\n        return (value !== '');\n      }\n      return (value.split(',').length >= minCount);\n    },\n\n    exactCount: function(value, exactCount) {\n      if(exactCount == 0) {\n        return (value === '');\n      }\n      if(exactCount == 1) {\n        return (value !== '' && value.search(',') === -1);\n      }\n      return (value.split(',').length == exactCount);\n    },\n\n    maxCount: function(value, maxCount) {\n      if(maxCount == 0) {\n        return false;\n      }\n      if(maxCount == 1) {\n        return (value.search(',') === -1);\n      }\n      return (value.split(',').length <= maxCount);\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/state.js",
    "content": "/*!\n * # Semantic UI - State\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.state = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    hasTouch        = ('ontouchstart' in document.documentElement),\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.state.settings, parameters)\n          : $.extend({}, $.fn.state.settings),\n\n        error           = settings.error,\n        metadata        = settings.metadata,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        states          = settings.states,\n        text            = settings.text,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n\n          // allow module to guess desired state based on element\n          if(settings.automatic) {\n            module.add.defaults();\n          }\n\n          // bind events with delegated events\n          if(settings.context && moduleSelector !== '') {\n            $(settings.context)\n              .on(moduleSelector, 'mouseenter' + eventNamespace, module.change.text)\n              .on(moduleSelector, 'mouseleave' + eventNamespace, module.reset.text)\n              .on(moduleSelector, 'click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          else {\n            $module\n              .on('mouseenter' + eventNamespace, module.change.text)\n              .on('mouseleave' + eventNamespace, module.reset.text)\n              .on('click'      + eventNamespace, module.toggle.state)\n            ;\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', instance);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $module = $(element);\n        },\n\n        add: {\n          defaults: function() {\n            var\n              userStates = parameters && $.isPlainObject(parameters.states)\n                ? parameters.states\n                : {}\n            ;\n            $.each(settings.defaults, function(type, typeStates) {\n              if( module.is[type] !== undefined && module.is[type]() ) {\n                module.verbose('Adding default states', type, element);\n                $.extend(settings.states, typeStates, userStates);\n              }\n            });\n          }\n        },\n\n        is: {\n\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          loading: function() {\n            return $module.hasClass(className.loading);\n          },\n          inactive: function() {\n            return !( $module.hasClass(className.active) );\n          },\n          state: function(state) {\n            if(className[state] === undefined) {\n              return false;\n            }\n            return $module.hasClass( className[state] );\n          },\n\n          enabled: function() {\n            return !( $module.is(settings.filter.active) );\n          },\n          disabled: function() {\n            return ( $module.is(settings.filter.active) );\n          },\n          textEnabled: function() {\n            return !( $module.is(settings.filter.text) );\n          },\n\n          // definitions for automatic type detection\n          button: function() {\n            return $module.is('.button:not(a, .submit)');\n          },\n          input: function() {\n            return $module.is('input');\n          },\n          progress: function() {\n            return $module.is('.ui.progress');\n          }\n        },\n\n        allow: function(state) {\n          module.debug('Now allowing state', state);\n          states[state] = true;\n        },\n        disallow: function(state) {\n          module.debug('No longer allowing', state);\n          states[state] = false;\n        },\n\n        allows: function(state) {\n          return states[state] || false;\n        },\n\n        enable: function() {\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          $module.addClass(className.disabled);\n        },\n\n        setState: function(state) {\n          if(module.allows(state)) {\n            $module.addClass( className[state] );\n          }\n        },\n\n        removeState: function(state) {\n          if(module.allows(state)) {\n            $module.removeClass( className[state] );\n          }\n        },\n\n        toggle: {\n          state: function() {\n            var\n              apiRequest,\n              requestCancelled\n            ;\n            if( module.allows('active') && module.is.enabled() ) {\n              module.refresh();\n              if($.fn.api !== undefined) {\n                apiRequest       = $module.api('get request');\n                requestCancelled = $module.api('was cancelled');\n                if( requestCancelled ) {\n                  module.debug('API Request cancelled by beforesend');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                else if(apiRequest) {\n                  module.listenTo(apiRequest);\n                  return;\n                }\n              }\n              module.change.state();\n            }\n          }\n        },\n\n        listenTo: function(apiRequest) {\n          module.debug('API request detected, waiting for state signal', apiRequest);\n          if(apiRequest) {\n            if(text.loading) {\n              module.update.text(text.loading);\n            }\n            $.when(apiRequest)\n              .then(function() {\n                if(apiRequest.state() == 'resolved') {\n                  module.debug('API request succeeded');\n                  settings.activateTest   = function(){ return true; };\n                  settings.deactivateTest = function(){ return true; };\n                }\n                else {\n                  module.debug('API request failed');\n                  settings.activateTest   = function(){ return false; };\n                  settings.deactivateTest = function(){ return false; };\n                }\n                module.change.state();\n              })\n            ;\n          }\n        },\n\n        // checks whether active/inactive state can be given\n        change: {\n\n          state: function() {\n            module.debug('Determining state change direction');\n            // inactive to active change\n            if( module.is.inactive() ) {\n              module.activate();\n            }\n            else {\n              module.deactivate();\n            }\n            if(settings.sync) {\n              module.sync();\n            }\n            settings.onChange.call(element);\n          },\n\n          text: function() {\n            if( module.is.textEnabled() ) {\n              if(module.is.disabled() ) {\n                module.verbose('Changing text to disabled text', text.hover);\n                module.update.text(text.disabled);\n              }\n              else if( module.is.active() ) {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.deactivate) {\n                  module.verbose('Changing text to deactivating text', text.deactivate);\n                  module.update.text(text.deactivate);\n                }\n              }\n              else {\n                if(text.hover) {\n                  module.verbose('Changing text to hover text', text.hover);\n                  module.update.text(text.hover);\n                }\n                else if(text.activate){\n                  module.verbose('Changing text to activating text', text.activate);\n                  module.update.text(text.activate);\n                }\n              }\n            }\n          }\n\n        },\n\n        activate: function() {\n          if( settings.activateTest.call(element) ) {\n            module.debug('Setting state to active');\n            $module\n              .addClass(className.active)\n            ;\n            module.update.text(text.active);\n            settings.onActivate.call(element);\n          }\n        },\n\n        deactivate: function() {\n          if( settings.deactivateTest.call(element) ) {\n            module.debug('Setting state to inactive');\n            $module\n              .removeClass(className.active)\n            ;\n            module.update.text(text.inactive);\n            settings.onDeactivate.call(element);\n          }\n        },\n\n        sync: function() {\n          module.verbose('Syncing other buttons to current state');\n          if( module.is.active() ) {\n            $allModules\n              .not($module)\n                .state('activate');\n          }\n          else {\n            $allModules\n              .not($module)\n                .state('deactivate')\n            ;\n          }\n        },\n\n        get: {\n          text: function() {\n            return (settings.selector.text)\n              ? $module.find(settings.selector.text).text()\n              : $module.html()\n            ;\n          },\n          textFor: function(state) {\n            return text[state] || false;\n          }\n        },\n\n        flash: {\n          text: function(text, duration, callback) {\n            var\n              previousText = module.get.text()\n            ;\n            module.debug('Flashing text message', text, duration);\n            text     = text     || settings.text.flash;\n            duration = duration || settings.flashDuration;\n            callback = callback || function() {};\n            module.update.text(text);\n            setTimeout(function(){\n              module.update.text(previousText);\n              callback.call(element);\n            }, duration);\n          }\n        },\n\n        reset: {\n          // on mouseout sets text to previous value\n          text: function() {\n            var\n              activeText   = text.active   || $module.data(metadata.storedText),\n              inactiveText = text.inactive || $module.data(metadata.storedText)\n            ;\n            if( module.is.textEnabled() ) {\n              if( module.is.active() && activeText) {\n                module.verbose('Resetting active text', activeText);\n                module.update.text(activeText);\n              }\n              else if(inactiveText) {\n                module.verbose('Resetting inactive text', activeText);\n                module.update.text(inactiveText);\n              }\n            }\n          }\n        },\n\n        update: {\n          text: function(text) {\n            var\n              currentText = module.get.text()\n            ;\n            if(text && text !== currentText) {\n              module.debug('Updating text', text);\n              if(settings.selector.text) {\n                $module\n                  .data(metadata.storedText, text)\n                  .find(settings.selector.text)\n                    .text(text)\n                ;\n              }\n              else {\n                $module\n                  .data(metadata.storedText, text)\n                  .html(text)\n                ;\n              }\n            }\n            else {\n              module.debug('Text is already set, ignoring update', text);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.state.settings = {\n\n  // module info\n  name           : 'State',\n\n  // debug output\n  debug          : false,\n\n  // verbose debug output\n  verbose        : false,\n\n  // namespace for events\n  namespace      : 'state',\n\n  // debug data includes performance\n  performance    : true,\n\n  // callback occurs on state change\n  onActivate     : function() {},\n  onDeactivate   : function() {},\n  onChange       : function() {},\n\n  // state test functions\n  activateTest   : function() { return true; },\n  deactivateTest : function() { return true; },\n\n  // whether to automatically map default states\n  automatic      : true,\n\n  // activate / deactivate changes all elements instantiated at same time\n  sync           : false,\n\n  // default flash text duration, used for temporarily changing text of an element\n  flashDuration  : 1000,\n\n  // selector filter\n  filter     : {\n    text   : '.loading, .disabled',\n    active : '.disabled'\n  },\n\n  context    : false,\n\n  // error\n  error: {\n    beforeSend : 'The before send function has cancelled state change',\n    method     : 'The method you called is not defined.'\n  },\n\n  // metadata\n  metadata: {\n    promise    : 'promise',\n    storedText : 'stored-text'\n  },\n\n  // change class on state\n  className: {\n    active   : 'active',\n    disabled : 'disabled',\n    error    : 'error',\n    loading  : 'loading',\n    success  : 'success',\n    warning  : 'warning'\n  },\n\n  selector: {\n    // selector for text node\n    text: false\n  },\n\n  defaults : {\n    input: {\n      disabled : true,\n      loading  : true,\n      active   : true\n    },\n    button: {\n      disabled : true,\n      loading  : true,\n      active   : true,\n    },\n    progress: {\n      active   : true,\n      success  : true,\n      warning  : true,\n      error    : true\n    }\n  },\n\n  states     : {\n    active   : true,\n    disabled : true,\n    error    : true,\n    loading  : true,\n    success  : true,\n    warning  : true\n  },\n\n  text     : {\n    disabled   : false,\n    flash      : false,\n    hover      : false,\n    active     : false,\n    inactive   : false,\n    activate   : false,\n    deactivate : false\n  }\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/visibility.js",
    "content": "/*!\n * # Semantic UI - Visibility\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.visibility = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue,\n\n    moduleCount    = $allModules.length,\n    loadedCount    = 0\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visibility.settings, parameters)\n          : $.extend({}, $.fn.visibility.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n        metadata        = settings.metadata,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $placeholder,\n\n        selector        = $module.selector || '',\n        instance        = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n        disabled        = false,\n\n        contextObserver,\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', settings);\n\n          module.setup.cache();\n\n          if( module.should.trackChanges() ) {\n\n            if(settings.type == 'image') {\n              module.setup.image();\n            }\n            if(settings.type == 'fixed') {\n              module.setup.fixed();\n            }\n\n            if(settings.observeChanges) {\n              module.observeChanges();\n            }\n            module.bind.events();\n          }\n\n          module.save.position();\n          if( !module.is.visible() ) {\n            module.error(error.visible, $module);\n          }\n\n          if(settings.initialCheck) {\n            module.checkVisibility();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.debug('Storing instance', module);\n          $module\n            .data(moduleNamespace, module)\n          ;\n          instance = module;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module');\n          if(observer) {\n            observer.disconnect();\n          }\n          if(contextObserver) {\n            contextObserver.disconnect();\n          }\n          $window\n            .off('load'   + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $context\n            .off('scroll'       + eventNamespace, module.event.scroll)\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n            module.remove.placeholder();\n          }\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            contextObserver = new MutationObserver(module.event.contextChanged);\n            observer        = new MutationObserver(module.event.changed);\n            contextObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding visibility events to scroll and resize');\n            if(settings.refreshOnLoad) {\n              $window\n                .on('load'   + eventNamespace, module.event.load)\n              ;\n            }\n            $window\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $context\n              .off('scroll'      + eventNamespace)\n              .on('scroll'       + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            module.verbose('DOM tree modified, updating visibility calculations');\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu');\n              module.refresh();\n            }, 100);\n          },\n          contextChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          resize: function() {\n            module.debug('Window resized');\n            if(settings.refreshOnResize) {\n              requestAnimationFrame(module.refresh);\n            }\n          },\n          load: function() {\n            module.debug('Page finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          // publishes scrollchange event on one scroll\n          scroll: function() {\n            if(settings.throttle) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              }, settings.throttle);\n            }\n            else {\n              requestAnimationFrame(function() {\n                $context.triggerHandler('scrollchange' + eventNamespace, [ $context.scrollTop() ]);\n              });\n            }\n          },\n          // subscribes to scrollchange\n          scrollchange: function(event, scrollPosition) {\n            module.checkVisibility(scrollPosition);\n          },\n        },\n\n        precache: function(images, callback) {\n          if (!(images instanceof Array)) {\n            images = [images];\n          }\n          var\n            imagesLength  = images.length,\n            loadedCounter = 0,\n            cache         = [],\n            cacheImage    = document.createElement('img'),\n            handleLoad    = function() {\n              loadedCounter++;\n              if (loadedCounter >= images.length) {\n                if ($.isFunction(callback)) {\n                  callback();\n                }\n              }\n            }\n          ;\n          while (imagesLength--) {\n            cacheImage         = document.createElement('img');\n            cacheImage.onload  = handleLoad;\n            cacheImage.onerror = handleLoad;\n            cacheImage.src     = images[imagesLength];\n            cache.push(cacheImage);\n          }\n        },\n\n        enableCallbacks: function() {\n          module.debug('Allowing callbacks to occur');\n          disabled = false;\n        },\n\n        disableCallbacks: function() {\n          module.debug('Disabling all callbacks temporarily');\n          disabled = true;\n        },\n\n        should: {\n          trackChanges: function() {\n            if(methodInvoked) {\n              module.debug('One time query, no need to bind events');\n              return false;\n            }\n            module.debug('Callbacks being attached');\n            return true;\n          }\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              occurred : {},\n              screen   : {},\n              element  : {},\n            };\n          },\n          image: function() {\n            var\n              src = $module.data(metadata.src)\n            ;\n            if(src) {\n              module.verbose('Lazy loading image', src);\n              settings.once           = true;\n              settings.observeChanges = false;\n\n              // show when top visible\n              settings.onOnScreen = function() {\n                module.debug('Image on screen', element);\n                module.precache(src, function() {\n                  module.set.image(src, function() {\n                    loadedCount++;\n                    if(loadedCount == moduleCount) {\n                      settings.onAllLoaded.call(this);\n                    }\n                    settings.onLoad.call(this);\n                  });\n                });\n              };\n            }\n          },\n          fixed: function() {\n            module.debug('Setting up fixed');\n            settings.once           = false;\n            settings.observeChanges = false;\n            settings.initialCheck   = true;\n            settings.refreshOnLoad  = true;\n            if(!parameters.transition) {\n              settings.transition = false;\n            }\n            module.create.placeholder();\n            module.debug('Added placeholder', $placeholder);\n            settings.onTopPassed = function() {\n              module.debug('Element passed, adding fixed position', $module);\n              module.show.placeholder();\n              module.set.fixed();\n              if(settings.transition) {\n                if($.fn.transition !== undefined) {\n                  $module.transition(settings.transition, settings.duration);\n                }\n              }\n            };\n            settings.onTopPassedReverse = function() {\n              module.debug('Element returned to position, removing fixed', $module);\n              module.hide.placeholder();\n              module.remove.fixed();\n            };\n          }\n        },\n\n        create: {\n          placeholder: function() {\n            module.verbose('Creating fixed position placeholder');\n            $placeholder = $module\n              .clone(false)\n              .css('display', 'none')\n              .addClass(className.placeholder)\n              .insertAfter($module)\n            ;\n          }\n        },\n\n        show: {\n          placeholder: function() {\n            module.verbose('Showing placeholder');\n            $placeholder\n              .css('display', 'block')\n              .css('visibility', 'hidden')\n            ;\n          }\n        },\n        hide: {\n          placeholder: function() {\n            module.verbose('Hiding placeholder');\n            $placeholder\n              .css('display', 'none')\n              .css('visibility', '')\n            ;\n          }\n        },\n\n        set: {\n          fixed: function() {\n            module.verbose('Setting element to fixed position');\n            $module\n              .addClass(className.fixed)\n              .css({\n                position : 'fixed',\n                top      : settings.offset + 'px',\n                left     : 'auto',\n                zIndex   : settings.zIndex\n              })\n            ;\n            settings.onFixed.call(element);\n          },\n          image: function(src, callback) {\n            $module\n              .attr('src', src)\n            ;\n            if(settings.transition) {\n              if( $.fn.transition !== undefined) {\n                if($module.hasClass(className.visible)) {\n                  module.debug('Transition already occurred on this image, skipping animation');\n                  return;\n                }\n                $module.transition(settings.transition, settings.duration, callback);\n              }\n              else {\n                $module.fadeIn(settings.duration, callback);\n              }\n            }\n            else {\n              $module.show();\n            }\n          }\n        },\n\n        is: {\n          onScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.onScreen;\n          },\n          offScreen: function() {\n            var\n              calculations   = module.get.elementCalculations()\n            ;\n            return calculations.offScreen;\n          },\n          visible: function() {\n            if(module.cache && module.cache.element) {\n              return !(module.cache.element.width === 0 && module.cache.element.offset.top === 0);\n            }\n            return false;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-x')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        refresh: function() {\n          module.debug('Refreshing constants (width/height)');\n          if(settings.type == 'fixed') {\n            module.resetFixed();\n          }\n          module.reset();\n          module.save.position();\n          if(settings.checkOnRefresh) {\n            module.checkVisibility();\n          }\n          settings.onRefresh.call(element);\n        },\n\n        resetFixed: function () {\n          module.remove.fixed();\n          module.remove.occurred();\n        },\n\n        reset: function() {\n          module.verbose('Resetting all cached values');\n          if( $.isPlainObject(module.cache) ) {\n            module.cache.screen = {};\n            module.cache.element = {};\n          }\n        },\n\n        checkVisibility: function(scroll) {\n          module.verbose('Checking visibility of element', module.cache.element);\n\n          if( !disabled && module.is.visible() ) {\n\n            // save scroll position\n            module.save.scroll(scroll);\n\n            // update calculations derived from scroll\n            module.save.calculations();\n\n            // percentage\n            module.passed();\n\n            // reverse (must be first)\n            module.passingReverse();\n            module.topVisibleReverse();\n            module.bottomVisibleReverse();\n            module.topPassedReverse();\n            module.bottomPassedReverse();\n\n            // one time\n            module.onScreen();\n            module.offScreen();\n            module.passing();\n            module.topVisible();\n            module.bottomVisible();\n            module.topPassed();\n            module.bottomPassed();\n\n            // on update callback\n            if(settings.onUpdate) {\n              settings.onUpdate.call(element, module.get.elementCalculations());\n            }\n          }\n        },\n\n        passed: function(amount, newCallback) {\n          var\n            calculations   = module.get.elementCalculations(),\n            amountInPixels\n          ;\n          // assign callback\n          if(amount && newCallback) {\n            settings.onPassed[amount] = newCallback;\n          }\n          else if(amount !== undefined) {\n            return (module.get.pixelsPassed(amount) > calculations.pixelsPassed);\n          }\n          else if(calculations.passing) {\n            $.each(settings.onPassed, function(amount, callback) {\n              if(calculations.bottomVisible || calculations.pixelsPassed > module.get.pixelsPassed(amount)) {\n                module.execute(callback, amount);\n              }\n              else if(!settings.once) {\n                module.remove.occurred(callback);\n              }\n            });\n          }\n        },\n\n        onScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOnScreen,\n            callbackName = 'onScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for onScreen', newCallback);\n            settings.onOnScreen = newCallback;\n          }\n          if(calculations.onScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOnScreen;\n          }\n        },\n\n        offScreen: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onOffScreen,\n            callbackName = 'offScreen'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for offScreen', newCallback);\n            settings.onOffScreen = newCallback;\n          }\n          if(calculations.offScreen) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.onOffScreen;\n          }\n        },\n\n        passing: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassing,\n            callbackName = 'passing'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing', newCallback);\n            settings.onPassing = newCallback;\n          }\n          if(calculations.passing) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return calculations.passing;\n          }\n        },\n\n\n        topVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisible,\n            callbackName = 'topVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible', newCallback);\n            settings.onTopVisible = newCallback;\n          }\n          if(calculations.topVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topVisible;\n          }\n        },\n\n        bottomVisible: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisible,\n            callbackName = 'bottomVisible'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible', newCallback);\n            settings.onBottomVisible = newCallback;\n          }\n          if(calculations.bottomVisible) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomVisible;\n          }\n        },\n\n        topPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassed,\n            callbackName = 'topPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed', newCallback);\n            settings.onTopPassed = newCallback;\n          }\n          if(calculations.topPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.topPassed;\n          }\n        },\n\n        bottomPassed: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassed,\n            callbackName = 'bottomPassed'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed', newCallback);\n            settings.onBottomPassed = newCallback;\n          }\n          if(calculations.bottomPassed) {\n            module.execute(callback, callbackName);\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return calculations.bottomPassed;\n          }\n        },\n\n        passingReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onPassingReverse,\n            callbackName = 'passingReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for passing reverse', newCallback);\n            settings.onPassingReverse = newCallback;\n          }\n          if(!calculations.passing) {\n            if(module.get.occurred('passing')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback !== undefined) {\n            return !calculations.passing;\n          }\n        },\n\n\n        topVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopVisibleReverse,\n            callbackName = 'topVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top visible reverse', newCallback);\n            settings.onTopVisibleReverse = newCallback;\n          }\n          if(!calculations.topVisible) {\n            if(module.get.occurred('topVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.topVisible;\n          }\n        },\n\n        bottomVisibleReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomVisibleReverse,\n            callbackName = 'bottomVisibleReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom visible reverse', newCallback);\n            settings.onBottomVisibleReverse = newCallback;\n          }\n          if(!calculations.bottomVisible) {\n            if(module.get.occurred('bottomVisible')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomVisible;\n          }\n        },\n\n        topPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onTopPassedReverse,\n            callbackName = 'topPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for top passed reverse', newCallback);\n            settings.onTopPassedReverse = newCallback;\n          }\n          if(!calculations.topPassed) {\n            if(module.get.occurred('topPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.onTopPassed;\n          }\n        },\n\n        bottomPassedReverse: function(newCallback) {\n          var\n            calculations = module.get.elementCalculations(),\n            callback     = newCallback || settings.onBottomPassedReverse,\n            callbackName = 'bottomPassedReverse'\n          ;\n          if(newCallback) {\n            module.debug('Adding callback for bottom passed reverse', newCallback);\n            settings.onBottomPassedReverse = newCallback;\n          }\n          if(!calculations.bottomPassed) {\n            if(module.get.occurred('bottomPassed')) {\n              module.execute(callback, callbackName);\n            }\n          }\n          else if(!settings.once) {\n            module.remove.occurred(callbackName);\n          }\n          if(newCallback === undefined) {\n            return !calculations.bottomPassed;\n          }\n        },\n\n        execute: function(callback, callbackName) {\n          var\n            calculations = module.get.elementCalculations(),\n            screen       = module.get.screenCalculations()\n          ;\n          callback = callback || false;\n          if(callback) {\n            if(settings.continuous) {\n              module.debug('Callback being called continuously', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n            else if(!module.get.occurred(callbackName)) {\n              module.debug('Conditions met', callbackName, calculations);\n              callback.call(element, calculations, screen);\n            }\n          }\n          module.save.occurred(callbackName);\n        },\n\n        remove: {\n          fixed: function() {\n            module.debug('Removing fixed position');\n            $module\n              .removeClass(className.fixed)\n              .css({\n                position : '',\n                top      : '',\n                left     : '',\n                zIndex   : ''\n              })\n            ;\n            settings.onUnfixed.call(element);\n          },\n          placeholder: function() {\n            module.debug('Removing placeholder content');\n            if($placeholder) {\n              $placeholder.remove();\n            }\n          },\n          occurred: function(callback) {\n            if(callback) {\n              var\n                occurred = module.cache.occurred\n              ;\n              if(occurred[callback] !== undefined && occurred[callback] === true) {\n                module.debug('Callback can now be called again', callback);\n                module.cache.occurred[callback] = false;\n              }\n            }\n            else {\n              module.cache.occurred = {};\n            }\n          }\n        },\n\n        save: {\n          calculations: function() {\n            module.verbose('Saving all calculations necessary to determine positioning');\n            module.save.direction();\n            module.save.screenCalculations();\n            module.save.elementCalculations();\n          },\n          occurred: function(callback) {\n            if(callback) {\n              if(module.cache.occurred[callback] === undefined || (module.cache.occurred[callback] !== true)) {\n                module.verbose('Saving callback occurred', callback);\n                module.cache.occurred[callback] = true;\n              }\n            }\n          },\n          scroll: function(scrollPosition) {\n            scrollPosition      = scrollPosition + settings.offset || $context.scrollTop() + settings.offset;\n            module.cache.scroll = scrollPosition;\n          },\n          direction: function() {\n            var\n              scroll     = module.get.scroll(),\n              lastScroll = module.get.lastScroll(),\n              direction\n            ;\n            if(scroll > lastScroll && lastScroll) {\n              direction = 'down';\n            }\n            else if(scroll < lastScroll && lastScroll) {\n              direction = 'up';\n            }\n            else {\n              direction = 'static';\n            }\n            module.cache.direction = direction;\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            var\n              element = module.cache.element,\n              screen  = module.get.screenSize()\n            ;\n            module.verbose('Saving element position');\n            // (quicker than $.extend)\n            element.fits          = (element.height < screen.height);\n            element.offset        = $module.offset();\n            element.width         = $module.outerWidth();\n            element.height        = $module.outerHeight();\n            // compensate for scroll in context\n            if(module.is.verticallyScrollableContext()) {\n              element.offset.top += $context.scrollTop() - $context.offset().top;\n            }\n            if(module.is.horizontallyScrollableContext()) {\n              element.offset.left += $context.scrollLeft - $context.offset().left;\n            }\n            // store\n            module.cache.element = element;\n            return element;\n          },\n          elementCalculations: function() {\n            var\n              screen     = module.get.screenCalculations(),\n              element    = module.get.elementPosition()\n            ;\n            // offset\n            if(settings.includeMargin) {\n              element.margin        = {};\n              element.margin.top    = parseInt($module.css('margin-top'), 10);\n              element.margin.bottom = parseInt($module.css('margin-bottom'), 10);\n              element.top    = element.offset.top - element.margin.top;\n              element.bottom = element.offset.top + element.height + element.margin.bottom;\n            }\n            else {\n              element.top    = element.offset.top;\n              element.bottom = element.offset.top + element.height;\n            }\n\n            // visibility\n            element.topPassed        = (screen.top >= element.top);\n            element.bottomPassed     = (screen.top >= element.bottom);\n            element.topVisible       = (screen.bottom >= element.top) && !element.bottomPassed;\n            element.bottomVisible    = (screen.bottom >= element.bottom) && !element.topPassed;\n            element.pixelsPassed     = 0;\n            element.percentagePassed = 0;\n\n            // meta calculations\n            element.onScreen  = (element.topVisible && !element.bottomPassed);\n            element.passing   = (element.topPassed && !element.bottomPassed);\n            element.offScreen = (!element.onScreen);\n\n            // passing calculations\n            if(element.passing) {\n              element.pixelsPassed     = (screen.top - element.top);\n              element.percentagePassed = (screen.top - element.top) / element.height;\n            }\n            module.cache.element = element;\n            module.verbose('Updated element calculations', element);\n            return element;\n          },\n          screenCalculations: function() {\n            var\n              scroll = module.get.scroll()\n            ;\n            module.save.direction();\n            module.cache.screen.top    = scroll;\n            module.cache.screen.bottom = scroll + module.cache.screen.height;\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            module.verbose('Saving window position');\n            module.cache.screen = {\n              height: $context.height()\n            };\n          },\n          position: function() {\n            module.save.screenSize();\n            module.save.elementPosition();\n          }\n        },\n\n        get: {\n          pixelsPassed: function(amount) {\n            var\n              element = module.get.elementCalculations()\n            ;\n            if(amount.search('%') > -1) {\n              return ( element.height * (parseInt(amount, 10) / 100) );\n            }\n            return parseInt(amount, 10);\n          },\n          occurred: function(callback) {\n            return (module.cache.occurred !== undefined)\n              ? module.cache.occurred[callback] || false\n              : false\n            ;\n          },\n          direction: function() {\n            if(module.cache.direction === undefined) {\n              module.save.direction();\n            }\n            return module.cache.direction;\n          },\n          elementPosition: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementPosition();\n            }\n            return module.cache.element;\n          },\n          elementCalculations: function() {\n            if(module.cache.element === undefined) {\n              module.save.elementCalculations();\n            }\n            return module.cache.element;\n          },\n          screenCalculations: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenCalculations();\n            }\n            return module.cache.screen;\n          },\n          screenSize: function() {\n            if(module.cache.screen === undefined) {\n              module.save.screenSize();\n            }\n            return module.cache.screen;\n          },\n          scroll: function() {\n            if(module.cache.scroll === undefined) {\n              module.save.scroll();\n            }\n            return module.cache.scroll;\n          },\n          lastScroll: function() {\n            if(module.cache.screen === undefined) {\n              module.debug('First scroll event, no last scroll could be found');\n              return false;\n            }\n            return module.cache.screen.top;\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        instance.save.scroll();\n        instance.save.calculations();\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visibility.settings = {\n\n  name                   : 'Visibility',\n  namespace              : 'visibility',\n\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  // whether to use mutation observers to follow changes\n  observeChanges         : true,\n\n  // check position immediately on init\n  initialCheck           : true,\n\n  // whether to refresh calculations after all page images load\n  refreshOnLoad          : true,\n\n  // whether to refresh calculations after page resize event\n  refreshOnResize        : true,\n\n  // should call callbacks on refresh event (resize, etc)\n  checkOnRefresh         : true,\n\n  // callback should only occur one time\n  once                   : true,\n\n  // callback should fire continuously whe evaluates to true\n  continuous             : false,\n\n  // offset to use with scroll top\n  offset                 : 0,\n\n  // whether to include margin in elements position\n  includeMargin          : false,\n\n  // scroll context for visibility checks\n  context                : window,\n\n  // visibility check delay in ms (defaults to animationFrame)\n  throttle               : false,\n\n  // special visibility type (image, fixed)\n  type                   : false,\n\n  // z-index to use with visibility 'fixed'\n  zIndex                 : '10',\n\n  // image only animation settings\n  transition             : 'fade in',\n  duration               : 1000,\n\n  // array of callbacks for percentage\n  onPassed               : {},\n\n  // standard callbacks\n  onOnScreen             : false,\n  onOffScreen            : false,\n  onPassing              : false,\n  onTopVisible           : false,\n  onBottomVisible        : false,\n  onTopPassed            : false,\n  onBottomPassed         : false,\n\n  // reverse callbacks\n  onPassingReverse       : false,\n  onTopVisibleReverse    : false,\n  onBottomVisibleReverse : false,\n  onTopPassedReverse     : false,\n  onBottomPassedReverse  : false,\n\n  // special callbacks for image\n  onLoad                 : function() {},\n  onAllLoaded            : function() {},\n\n  // special callbacks for fixed position\n  onFixed                : function() {},\n  onUnfixed              : function() {},\n\n  // utility callbacks\n  onUpdate               : false, // disabled by default for performance\n  onRefresh              : function(){},\n\n  metadata : {\n    src: 'src'\n  },\n\n  className: {\n    fixed       : 'fixed',\n    placeholder : 'placeholder',\n    visible     : 'visible'\n  },\n\n  error : {\n    method  : 'The method you called is not defined.',\n    visible : 'Element is hidden, you must call refresh after element becomes visible'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/behaviors/visit.js",
    "content": "/*!\n * # Semantic UI - Visit\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.visit = $.fn.visit = function(parameters) {\n  var\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.visit.settings, parameters)\n          : $.extend({}, $.fn.visit.settings),\n\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n        $displays       = $(),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n      module = {\n\n        initialize: function() {\n          if(settings.count) {\n            module.store(settings.key.count, settings.count);\n          }\n          else if(settings.id) {\n            module.add.id(settings.id);\n          }\n          else if(settings.increment && methodInvoked !== 'increment') {\n            module.increment();\n          }\n          module.add.display($module);\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of visit module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        increment: function(id) {\n          var\n            currentValue = module.get.count(),\n            newValue     = +(currentValue) + 1\n          ;\n          if(id) {\n            module.add.id(id);\n          }\n          else {\n            if(newValue > settings.limit && !settings.surpass) {\n              newValue = settings.limit;\n            }\n            module.debug('Incrementing visits', newValue);\n            module.store(settings.key.count, newValue);\n          }\n        },\n\n        decrement: function(id) {\n          var\n            currentValue = module.get.count(),\n            newValue     = +(currentValue) - 1\n          ;\n          if(id) {\n            module.remove.id(id);\n          }\n          else {\n            module.debug('Removing visit');\n            module.store(settings.key.count, newValue);\n          }\n        },\n\n        get: {\n          count: function() {\n            return +(module.retrieve(settings.key.count)) || 0;\n          },\n          idCount: function(ids) {\n            ids = ids || module.get.ids();\n            return ids.length;\n          },\n          ids: function(delimitedIDs) {\n            var\n              idArray = []\n            ;\n            delimitedIDs = delimitedIDs || module.retrieve(settings.key.ids);\n            if(typeof delimitedIDs === 'string') {\n              idArray = delimitedIDs.split(settings.delimiter);\n            }\n            module.verbose('Found visited ID list', idArray);\n            return idArray;\n          },\n          storageOptions: function(data) {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        has: {\n          visited: function(id, ids) {\n            var\n              visited = false\n            ;\n            ids = ids || module.get.ids();\n            if(id !== undefined && ids) {\n              $.each(ids, function(index, value){\n                if(value == id) {\n                  visited = true;\n                }\n              });\n            }\n            return visited;\n          }\n        },\n\n        set: {\n          count: function(value) {\n            module.store(settings.key.count, value);\n          },\n          ids: function(value) {\n            module.store(settings.key.ids, value);\n          }\n        },\n\n        reset: function() {\n          module.store(settings.key.count, 0);\n          module.store(settings.key.ids, null);\n        },\n\n        add: {\n          id: function(id) {\n            var\n              currentIDs = module.retrieve(settings.key.ids),\n              newIDs = (currentIDs === undefined || currentIDs === '')\n                ? id\n                : currentIDs + settings.delimiter + id\n            ;\n            if( module.has.visited(id) ) {\n              module.debug('Unique content already visited, not adding visit', id, currentIDs);\n            }\n            else if(id === undefined) {\n              module.debug('ID is not defined');\n            }\n            else {\n              module.debug('Adding visit to unique content', id);\n              module.store(settings.key.ids, newIDs);\n            }\n            module.set.count( module.get.idCount() );\n          },\n          display: function(selector) {\n            var\n              $element = $(selector)\n            ;\n            if($element.length > 0 && !$.isWindow($element[0])) {\n              module.debug('Updating visit count for element', $element);\n              $displays = ($displays.length > 0)\n                ? $displays.add($element)\n                : $element\n              ;\n            }\n          }\n        },\n\n        remove: {\n          id: function(id) {\n            var\n              currentIDs = module.get.ids(),\n              newIDs     = []\n            ;\n            if(id !== undefined && currentIDs !== undefined) {\n              module.debug('Removing visit to unique content', id, currentIDs);\n              $.each(currentIDs, function(index, value){\n                if(value !== id) {\n                  newIDs.push(value);\n                }\n              });\n              newIDs = newIDs.join(settings.delimiter);\n              module.store(settings.key.ids, newIDs );\n            }\n            module.set.count( module.get.idCount() );\n          }\n        },\n\n        check: {\n          limit: function(value) {\n            value = value || module.get.count();\n            if(settings.limit) {\n              if(value >= settings.limit) {\n                module.debug('Pages viewed exceeded limit, firing callback', value, settings.limit);\n                settings.onLimit.call(element, value);\n              }\n              module.debug('Limit not reached', value, settings.limit);\n              settings.onChange.call(element, value);\n            }\n            module.update.display(value);\n          }\n        },\n\n        update: {\n          display: function(value) {\n            value = value || module.get.count();\n            if($displays.length > 0) {\n              module.debug('Updating displayed view count', $displays);\n              $displays.html(value);\n            }\n          }\n        },\n\n        store: function(key, value) {\n          var\n            options = module.get.storageOptions(value)\n          ;\n          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n            window.localStorage.setItem(key, value);\n            module.debug('Value stored using local storage', key, value);\n          }\n          else if($.cookie !== undefined) {\n            $.cookie(key, value, options);\n            module.debug('Value stored using cookie', key, value, options);\n          }\n          else {\n            module.error(error.noCookieStorage);\n            return;\n          }\n          if(key == settings.key.count) {\n            module.check.limit(value);\n          }\n        },\n        retrieve: function(key, value) {\n          var\n            storedValue\n          ;\n          if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n            storedValue = window.localStorage.getItem(key);\n          }\n          // get by cookie\n          else if($.cookie !== undefined) {\n            storedValue = $.cookie(key);\n          }\n          else {\n            module.error(error.noCookieStorage);\n          }\n          if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n            storedValue = undefined;\n          }\n          return storedValue;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.visit.settings = {\n\n  name          : 'Visit',\n\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  namespace     : 'visit',\n\n  increment     : false,\n  surpass       : false,\n  count         : false,\n  limit         : false,\n\n  delimiter     : '&',\n  storageMethod : 'localstorage',\n\n  key           : {\n    count : 'visit-count',\n    ids   : 'visit-ids'\n  },\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  onLimit       : function() {},\n  onChange      : function() {},\n\n  error         : {\n    method          : 'The method you called is not defined',\n    missingPersist  : 'Using the persist setting requires the inclusion of PersistJS',\n    noCookieStorage : 'The default storage cookie requires $.cookie to be included.'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/breadcrumb.less",
    "content": "/*!\n * # Semantic UI - Breadcrumb\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'breadcrumb';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n           Breadcrumb\n*******************************/\n\n.ui.breadcrumb {\n  line-height: 1;\n  display: @display;\n  margin: @verticalMargin 0em;\n  vertical-align: @verticalAlign;\n}\n.ui.breadcrumb:first-child {\n  margin-top: 0em;\n}\n.ui.breadcrumb:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n          Content\n*******************************/\n\n/* Divider */\n.ui.breadcrumb .divider {\n  display: inline-block;\n  opacity: @dividerOpacity;\n  margin: 0em @dividerSpacing 0em;\n\n  font-size: @dividerSize;\n  color: @dividerColor;\n  vertical-align: @dividerVerticalAlign;\n}\n\n/* Link */\n.ui.breadcrumb a {\n  color: @linkColor;\n}\n.ui.breadcrumb a:hover {\n  color: @linkHoverColor;\n}\n\n\n/* Icon Divider */\n.ui.breadcrumb .icon.divider {\n  font-size: @iconDividerSize;\n  vertical-align: @iconDividerVerticalAlign;\n}\n\n/* Section */\n.ui.breadcrumb a.section {\n  cursor: pointer;\n}\n.ui.breadcrumb .section {\n  display: inline-block;\n  margin: @sectionMargin;\n  padding: @sectionPadding;\n}\n\n/* Loose Coupling */\n.ui.breadcrumb.segment {\n  display: inline-block;\n  padding: @segmentPadding;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.breadcrumb .active.section {\n  font-weight: @activeFontWeight;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.mini.breadcrumb {\n  font-size: @mini;\n}\n.ui.tiny.breadcrumb {\n  font-size: @tiny;\n}\n.ui.small.breadcrumb {\n  font-size: @small;\n}\n.ui.breadcrumb {\n  font-size: @medium;\n}\n.ui.large.breadcrumb {\n  font-size: @large;\n}\n.ui.big.breadcrumb {\n  font-size: @big;\n}\n.ui.huge.breadcrumb {\n  font-size: @huge;\n}\n.ui.massive.breadcrumb {\n  font-size: @massive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/form.less",
    "content": "/*!\n * # Semantic UI - Form\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'form';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Elements\n*******************************/\n\n/*--------------------\n        Form\n---------------------*/\n\n.ui.form {\n  position: relative;\n  max-width: 100%;\n}\n\n/*--------------------\n        Content\n---------------------*/\n\n.ui.form > p {\n  margin: @paragraphMargin;\n}\n\n/*--------------------\n        Field\n---------------------*/\n\n.ui.form .field {\n  clear: both;\n  margin: @fieldMargin;\n}\n\n.ui.form .field:last-child,\n.ui.form .fields:last-child .field {\n  margin-bottom: 0em;\n}\n\n.ui.form .fields .field {\n  clear: both;\n  margin: 0em;\n}\n\n\n/*--------------------\n        Labels\n---------------------*/\n\n.ui.form .field > label {\n  display: block;\n  margin: @labelMargin;\n  color: @labelColor;\n  font-size: @labelFontSize;\n  font-weight: @labelFontWeight;\n  text-transform: @labelTextTransform;\n}\n\n/*--------------------\n    Standard Inputs\n---------------------*/\n\n\n.ui.form textarea,\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  width: @inputWidth;\n  vertical-align: top;\n}\n\n/* Set max height on unusual input */\n.ui.form ::-webkit-datetime-edit,\n.ui.form ::-webkit-inner-spin-button {\n  height: @inputLineHeight;\n}\n\n.ui.form input:not([type]),\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"datetime-local\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"search\"],\n.ui.form input[type=\"tel\"],\n.ui.form input[type=\"time\"],\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"file\"],\n.ui.form input[type=\"url\"] {\n  font-family: @inputFont;\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  tap-highlight-color:  rgba(255, 255, 255, 0);\n\n  line-height: @inputLineHeight;\n  padding: @inputPadding;\n  font-size: @inputFontSize;\n\n  background: @inputBackground;\n  border: @inputBorder;\n  color: @inputColor;\n  border-radius: @inputBorderRadius;\n  box-shadow: @inputBoxShadow;\n  transition: @inputTransition;\n}\n\n/* Text Area */\n.ui.form textarea {\n  margin: 0em;\n  -webkit-appearance: none;\n  tap-highlight-color:  rgba(255, 255, 255, 0);\n\n  padding: @textAreaPadding;\n  font-size: @textAreaFontSize;\n  background: @textAreaBackground;\n  border: @textAreaBorder;\n  outline: none;\n  color: @inputColor;\n  border-radius: @inputBorderRadius;\n  box-shadow: @inputBoxShadow;\n  transition: @textAreaTransition;\n  font-size: @textAreaFontSize;\n  line-height: @textAreaLineHeight;\n  resize: @textAreaResize;\n}\n.ui.form textarea:not([rows]) {\n  height: @textAreaHeight;\n  min-height: @textAreaMinHeight;\n  max-height: @textAreaMaxHeight;\n}\n\n.ui.form textarea,\n.ui.form input[type=\"checkbox\"] {\n  vertical-align: @checkboxVerticalAlign;\n}\n\n/*--------------------------\n  Input w/ attached Button\n---------------------------*/\n\n.ui.form input.attached {\n  width: auto;\n}\n\n\n/*--------------------\n     Basic Select\n---------------------*/\n\n.ui.form select {\n  display: block;\n  height: auto;\n  width: 100%;\n  background: @selectBackground;\n  border: @selectBorder;\n  border-radius: @selectBorderRadius;\n  box-shadow: @selectBoxShadow;\n  padding: @selectPadding;\n  color: @selectColor;\n  transition: @selectTransition;\n}\n\n/*--------------------\n       Dropdown\n---------------------*/\n\n/* Block */\n.ui.form .field > .selection.dropdown {\n  width: 100%;\n}\n.ui.form .field > .selection.dropdown > .dropdown.icon {\n  float: right;\n}\n\n/* Inline */\n.ui.form .inline.fields .field > .selection.dropdown,\n.ui.form .inline.field > .selection.dropdown {\n  width: auto;\n}\n.ui.form .inline.fields .field > .selection.dropdown > .dropdown.icon,\n.ui.form .inline.field > .selection.dropdown > .dropdown.icon {\n  float: none;\n}\n\n/*--------------------\n       UI Input\n---------------------*/\n\n/* Block */\n.ui.form .field .ui.input,\n.ui.form .fields .field .ui.input,\n.ui.form .wide.field .ui.input {\n  width: 100%;\n}\n\n/* Inline  */\n.ui.form .inline.fields .field:not(.wide) .ui.input,\n.ui.form .inline.field:not(.wide) .ui.input {\n  width: auto;\n  vertical-align: middle;\n}\n\n/* Auto Input */\n.ui.form .fields .field .ui.input input,\n.ui.form .field .ui.input input {\n  width: auto;\n}\n\n/* Full Width Input */\n.ui.form .ten.fields .ui.input input,\n.ui.form .nine.fields .ui.input input,\n.ui.form .eight.fields .ui.input input,\n.ui.form .seven.fields .ui.input input,\n.ui.form .six.fields .ui.input input,\n.ui.form .five.fields .ui.input input,\n.ui.form .four.fields .ui.input input,\n.ui.form .three.fields .ui.input input,\n.ui.form .two.fields .ui.input input,\n.ui.form .wide.field .ui.input input {\n  flex: 1 0 auto;\n  width: 0px;\n}\n\n\n/*--------------------\n   Types of Messages\n---------------------*/\n\n.ui.form .success.message,\n.ui.form .warning.message,\n.ui.form .error.message {\n  display: none;\n}\n\n/* Assumptions */\n.ui.form .message:first-child {\n  margin-top: 0px;\n}\n\n/*--------------------\n   Validation Prompt\n---------------------*/\n\n.ui.form .field .prompt.label {\n  white-space: normal;\n  background: @promptBackground !important;\n  border: @promptBorder !important;\n  color: @promptTextColor !important;\n}\n.ui.form .inline.fields .field .prompt,\n.ui.form .inline.field .prompt {\n  vertical-align: top;\n  margin: @inlinePromptMargin;\n}\n.ui.form .inline.fields .field .prompt:before,\n.ui.form .inline.field .prompt:before {\n  border-width: 0px 0px @inlinePromptBorderWidth @inlinePromptBorderWidth;\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n      Autofilled\n---------------------*/\n\n.ui.form .field.field input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px @inputAutoFillBackground inset !important;\n  border-color: @inputAutoFillBorder !important;\n}\n\n/* Focus */\n.ui.form .field.field input:-webkit-autofill:focus {\n  box-shadow: 0px 0px 0px 100px @inputAutoFillFocusBackground inset !important;\n  border-color: @inputAutoFillFocusBorder !important;\n}\n\n/* Error */\n.ui.form .error.error input:-webkit-autofill {\n  box-shadow: 0px 0px 0px 100px @inputAutoFillErrorBackground inset !important;\n  border-color: @inputAutoFillErrorBorder !important;\n}\n\n\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n.ui.form ::-webkit-input-placeholder {\n  color: @inputPlaceholderColor;\n}\n.ui.form :-ms-input-placeholder {\n  color: @inputPlaceholderColor;\n}\n.ui.form ::-moz-placeholder {\n  color: @inputPlaceholderColor;\n}\n\n.ui.form :focus::-webkit-input-placeholder {\n  color: @inputPlaceholderFocusColor;\n}\n.ui.form :focus:-ms-input-placeholder {\n  color: @inputPlaceholderFocusColor;\n}\n.ui.form :focus::-moz-placeholder {\n  color: @inputPlaceholderFocusColor;\n}\n\n/* Error Placeholder */\n.ui.form .error ::-webkit-input-placeholder {\n  color: @inputErrorPlaceholderColor;\n}\n.ui.form .error :-ms-input-placeholder {\n  color: @inputErrorPlaceholderColor !important;\n}\n.ui.form .error ::-moz-placeholder {\n  color: @inputErrorPlaceholderColor;\n}\n\n.ui.form .error :focus::-webkit-input-placeholder {\n  color: @inputErrorPlaceholderFocusColor;\n}\n.ui.form .error :focus:-ms-input-placeholder {\n  color: @inputErrorPlaceholderFocusColor !important;\n}\n.ui.form .error :focus::-moz-placeholder {\n  color: @inputErrorPlaceholderFocusColor;\n}\n\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.form input:not([type]):focus,\n.ui.form input[type=\"date\"]:focus,\n.ui.form input[type=\"datetime-local\"]:focus,\n.ui.form input[type=\"email\"]:focus,\n.ui.form input[type=\"number\"]:focus,\n.ui.form input[type=\"password\"]:focus,\n.ui.form input[type=\"search\"]:focus,\n.ui.form input[type=\"tel\"]:focus,\n.ui.form input[type=\"time\"]:focus,\n.ui.form input[type=\"text\"]:focus,\n.ui.form input[type=\"file\"]:focus,\n.ui.form input[type=\"url\"]:focus {\n  color: @inputFocusColor;\n  border-color: @inputFocusBorderColor;\n  border-radius: @inputFocusBorderRadius;\n  background: @inputFocusBackground;\n  box-shadow: @inputFocusBoxShadow;\n}\n.ui.form textarea:focus {\n  color: @textAreaFocusColor;\n  border-color: @textAreaFocusBorderColor;\n  border-radius: @textAreaFocusBorderRadius;\n  background: @textAreaFocusBackground;\n  box-shadow: @textAreaFocusBoxShadow;\n  -webkit-appearance: none;\n}\n\n\n/*--------------------\n        Success\n---------------------*/\n\n/* On Form */\n.ui.form.success .success.message:not(:empty) {\n  display: block;\n}\n.ui.form.success .compact.success.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.success .icon.success.message:not(:empty) {\n  display: flex;\n}\n\n/*--------------------\n        Warning\n---------------------*/\n\n/* On Form */\n.ui.form.warning .warning.message:not(:empty) {\n  display: block;\n}\n.ui.form.warning .compact.warning.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.warning .icon.warning.message:not(:empty) {\n  display: flex;\n}\n\n/*--------------------\n        Error\n---------------------*/\n\n/* On Form */\n.ui.form.error .error.message:not(:empty) {\n  display: block;\n}\n.ui.form.error .compact.error.message:not(:empty) {\n  display: inline-block;\n}\n.ui.form.error .icon.error.message:not(:empty) {\n  display: flex;\n}\n\n/* On Field(s) */\n.ui.form .fields.error .field label,\n.ui.form .field.error label,\n.ui.form .fields.error .field .input,\n.ui.form .field.error .input {\n  color: @formErrorColor;\n}\n\n.ui.form .fields.error .field .corner.label,\n.ui.form .field.error .corner.label {\n  border-color: @formErrorColor;\n  color: @white;\n}\n\n.ui.form .fields.error .field textarea,\n.ui.form .fields.error .field select,\n.ui.form .fields.error .field input:not([type]),\n.ui.form .fields.error .field input[type=\"date\"],\n.ui.form .fields.error .field input[type=\"datetime-local\"],\n.ui.form .fields.error .field input[type=\"email\"],\n.ui.form .fields.error .field input[type=\"number\"],\n.ui.form .fields.error .field input[type=\"password\"],\n.ui.form .fields.error .field input[type=\"search\"],\n.ui.form .fields.error .field input[type=\"tel\"],\n.ui.form .fields.error .field input[type=\"time\"],\n.ui.form .fields.error .field input[type=\"text\"],\n.ui.form .fields.error .field input[type=\"file\"],\n.ui.form .fields.error .field input[type=\"url\"],\n.ui.form .field.error textarea,\n.ui.form .field.error select,\n.ui.form .field.error input:not([type]),\n.ui.form .field.error input[type=\"date\"],\n.ui.form .field.error input[type=\"datetime-local\"],\n.ui.form .field.error input[type=\"email\"],\n.ui.form .field.error input[type=\"number\"],\n.ui.form .field.error input[type=\"password\"],\n.ui.form .field.error input[type=\"search\"],\n.ui.form .field.error input[type=\"tel\"],\n.ui.form .field.error input[type=\"time\"],\n.ui.form .field.error input[type=\"text\"],\n.ui.form .field.error input[type=\"file\"],\n.ui.form .field.error input[type=\"url\"] {\n  background: @formErrorBackground;\n  border-color: @formErrorBorder;\n  color: @formErrorColor;\n  border-radius: @inputErrorBorderRadius;\n  box-shadow: @inputErrorBoxShadow;\n}\n.ui.form .field.error textarea:focus,\n.ui.form .field.error select:focus,\n.ui.form .field.error input:not([type]):focus,\n.ui.form .field.error input[type=\"date\"]:focus,\n.ui.form .field.error input[type=\"datetime-local\"]:focus,\n.ui.form .field.error input[type=\"email\"]:focus,\n.ui.form .field.error input[type=\"number\"]:focus,\n.ui.form .field.error input[type=\"password\"]:focus,\n.ui.form .field.error input[type=\"search\"]:focus,\n.ui.form .field.error input[type=\"tel\"]:focus,\n.ui.form .field.error input[type=\"time\"]:focus,\n.ui.form .field.error input[type=\"text\"]:focus,\n.ui.form .field.error input[type=\"file\"]:focus,\n.ui.form .field.error input[type=\"url\"]:focus {\n  background: @inputErrorFocusBackground;\n  border-color: @inputErrorFocusBorder;\n  color: @inputErrorFocusColor;\n\n  -webkit-appearance: none;\n  box-shadow: @inputErrorFocusBoxShadow;\n}\n\n/* Preserve Native Select Stylings */\n.ui.form .field.error select {\n  -webkit-appearance: menulist-button;\n}\n\n/*------------------\n    Dropdown Error\n--------------------*/\n\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .fields.error .field .ui.dropdown .item,\n.ui.form .field.error .ui.dropdown,\n.ui.form .field.error .ui.dropdown .text,\n.ui.form .field.error .ui.dropdown .item {\n  background: @formErrorBackground;\n  color: @formErrorColor;\n}\n.ui.form .fields.error .field .ui.dropdown,\n.ui.form .field.error .ui.dropdown {\n  border-color: @formErrorBorder !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover,\n.ui.form .field.error .ui.dropdown:hover {\n  border-color: @formErrorBorder !important;\n}\n.ui.form .fields.error .field .ui.dropdown:hover .menu,\n.ui.form .field.error .ui.dropdown:hover .menu {\n  border-color: @formErrorBorder;\n}\n.ui.form .fields.error .field .ui.multiple.selection.dropdown > .label,\n.ui.form .field.error .ui.multiple.selection.dropdown > .label {\n  background-color: @dropdownErrorLabelBackground;\n  color: @dropdownErrorLabelColor;\n}\n\n/* Hover */\n.ui.form .fields.error .field .ui.dropdown .menu .item:hover,\n.ui.form .field.error .ui.dropdown .menu .item:hover {\n  background-color: @dropdownErrorHoverBackground;\n}\n\n/* Selected */\n.ui.form .fields.error .field .ui.dropdown .menu .selected.item,\n.ui.form .field.error .ui.dropdown .menu .selected.item {\n  background-color: @dropdownErrorSelectedBackground;\n}\n\n\n/* Active */\n.ui.form .fields.error .field .ui.dropdown .menu .active.item,\n.ui.form .field.error .ui.dropdown .menu .active.item {\n  background-color: @dropdownErrorActiveBackground !important;\n}\n\n/*--------------------\n    Checkbox Error\n---------------------*/\n\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box {\n  color: @formErrorColor;\n}\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) label:before,\n.ui.form .fields.error .field .checkbox:not(.toggle):not(.slider) .box:before,\n.ui.form .field.error .checkbox:not(.toggle):not(.slider) .box:before {\n  background: @formErrorBackground;\n  border-color: @formErrorBorder;\n}\n.ui.form .fields.error .field .checkbox label:after,\n.ui.form .field.error .checkbox label:after,\n.ui.form .fields.error .field .checkbox .box:after,\n.ui.form .field.error .checkbox .box:after {\n  color: @formErrorColor;\n}\n\n/*--------------------\n       Disabled\n---------------------*/\n\n.ui.form .disabled.fields .field,\n.ui.form .disabled.field,\n.ui.form .field :disabled {\n  pointer-events: none;\n  opacity: @disabledOpacity;\n}\n.ui.form .field.disabled > label,\n.ui.form .fields.disabled > label {\n  opacity: @disabledLabelOpacity;\n}\n.ui.form .field.disabled :disabled {\n  opacity: 1;\n}\n\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.form {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n}\n.ui.loading.form:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: @loaderDimmerColor;\n  width: 100%;\n  height: 100%;\n  z-index: @loaderDimmerZIndex;\n}\n.ui.loading.form:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: form-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor @loaderFillColor @loaderFillColor @loaderFillColor;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: @loaderLineZIndex;\n}\n\n@keyframes form-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n         Element Types\n*******************************/\n\n/*--------------------\n     Required Field\n---------------------*/\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after,\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  margin: @requiredMargin;\n  content: @requiredContent;\n  color: @requiredColor;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > label:after,\n.ui.form .required.fields.grouped > label:after,\n.ui.form .required.field > label:after {\n  display: inline-block;\n  vertical-align: top;\n}\n\n.ui.form .required.fields:not(.grouped) > .field > .checkbox:after,\n.ui.form .required.field > .checkbox:after {\n  position: absolute;\n  top: 0%;\n  left: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------------\n    Inverted Colors\n---------------------*/\n\n.ui.inverted.form label,\n.ui.form .inverted.segment label,\n.ui.form .inverted.segment .ui.checkbox label,\n.ui.form .inverted.segment .ui.checkbox .box,\n.ui.inverted.form .ui.checkbox label,\n.ui.inverted.form .ui.checkbox .box,\n.ui.inverted.form .inline.fields > label,\n.ui.inverted.form .inline.fields .field > label,\n.ui.inverted.form .inline.fields .field > p,\n.ui.inverted.form .inline.field > label,\n.ui.inverted.form .inline.field > p {\n  color: @invertedLabelColor;\n}\n\n/* Inverted Field */\n.ui.inverted.form input:not([type]),\n.ui.inverted.form input[type=\"date\"],\n.ui.inverted.form input[type=\"datetime-local\"],\n.ui.inverted.form input[type=\"email\"],\n.ui.inverted.form input[type=\"number\"],\n.ui.inverted.form input[type=\"password\"],\n.ui.inverted.form input[type=\"search\"],\n.ui.inverted.form input[type=\"tel\"],\n.ui.inverted.form input[type=\"time\"],\n.ui.inverted.form input[type=\"text\"],\n.ui.inverted.form input[type=\"file\"],\n.ui.inverted.form input[type=\"url\"] {\n  background: @invertedInputBackground;\n  border-color: @invertedInputBorderColor;\n  color: @invertedInputColor;\n  box-shadow: @invertedInputBoxShadow;\n}\n\n\n/*--------------------\n     Field Groups\n---------------------*/\n\n/* Grouped Vertically */\n.ui.form .grouped.fields {\n  display: block;\n  margin: @groupedMargin;\n}\n.ui.form .grouped.fields:last-child {\n  margin-bottom: 0em;\n}\n\n.ui.form .grouped.fields > label {\n  margin: @groupedLabelMargin;\n  color: @groupedLabelColor;\n  font-size: @groupedLabelFontSize;\n  font-weight: @groupedLabelFontWeight;\n  text-transform: @groupedLabelTextTransform;\n}\n\n.ui.form .grouped.fields .field,\n.ui.form .grouped.inline.fields .field {\n  display: block;\n  margin: @groupedFieldMargin;\n  padding: 0em;\n}\n\n/*--------------------\n        Fields\n---------------------*/\n\n/* Split fields */\n.ui.form .fields {\n  display: flex;\n  flex-direction: row;\n  margin: @fieldsMargin;\n}\n.ui.form .fields > .field {\n  flex: 0 1 auto;\n  padding-left: (@gutterWidth / 2);\n  padding-right: (@gutterWidth / 2);\n}\n.ui.form .fields > .field:first-child {\n  border-left: none;\n  box-shadow: none;\n}\n\n/* Other Combinations */\n.ui.form .two.fields > .fields,\n.ui.form .two.fields > .field {\n  width: @twoColumn;\n}\n.ui.form .three.fields > .fields,\n.ui.form .three.fields > .field {\n  width: @threeColumn;\n}\n.ui.form .four.fields > .fields,\n.ui.form .four.fields > .field {\n  width: @fourColumn;\n}\n.ui.form .five.fields > .fields,\n.ui.form .five.fields > .field {\n  width: @fiveColumn;\n}\n.ui.form .six.fields > .fields,\n.ui.form .six.fields > .field {\n  width: @sixColumn;\n}\n.ui.form .seven.fields > .fields,\n.ui.form .seven.fields > .field {\n  width: @sevenColumn;\n}\n.ui.form .eight.fields > .fields,\n.ui.form .eight.fields > .field {\n  width: @eightColumn;\n}\n.ui.form .nine.fields > .fields,\n.ui.form .nine.fields > .field {\n  width: @nineColumn;\n}\n.ui.form .ten.fields > .fields,\n.ui.form .ten.fields > .field {\n  width: @tenColumn;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.form .fields {\n    flex-wrap: wrap;\n  }\n\n  .ui[class*=\"equal width\"].form:not(.unstackable) .fields > .field,\n  .ui.form:not(.unstackable) [class*=\"equal width\"].fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .six.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .seven.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .eight.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .nine.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .ten.fields:not(.unstackable) > .field {\n    width: @oneColumn !important;\n    margin: 0em 0em @rowDistance;\n  }\n}\n\n\n/* Sizing Combinations */\n.ui.form .fields .wide.field {\n  width: @oneWide;\n  padding-left: (@gutterWidth / 2);\n  padding-right: (@gutterWidth / 2);\n}\n\n.ui.form .one.wide.field {\n  width: @oneWide !important;\n}\n.ui.form .two.wide.field {\n  width: @twoWide !important;\n}\n.ui.form .three.wide.field {\n  width: @threeWide !important;\n}\n.ui.form .four.wide.field {\n  width: @fourWide !important;\n}\n.ui.form .five.wide.field {\n  width: @fiveWide !important;\n}\n.ui.form .six.wide.field {\n  width: @sixWide !important;\n}\n.ui.form .seven.wide.field {\n  width: @sevenWide !important;\n}\n.ui.form .eight.wide.field {\n  width: @eightWide !important;\n}\n.ui.form .nine.wide.field {\n  width: @nineWide !important;\n}\n.ui.form .ten.wide.field {\n  width: @tenWide !important;\n}\n.ui.form .eleven.wide.field {\n  width: @elevenWide !important;\n}\n.ui.form .twelve.wide.field {\n  width: @twelveWide !important;\n}\n.ui.form .thirteen.wide.field {\n  width: @thirteenWide !important;\n}\n.ui.form .fourteen.wide.field {\n  width: @fourteenWide !important;\n}\n.ui.form .fifteen.wide.field {\n  width: @fifteenWide !important;\n}\n.ui.form .sixteen.wide.field {\n  width: @sixteenWide !important;\n}\n\n/* Swap to full width on mobile */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .two.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .three.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .four.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .fields,\n  .ui.form:not(.unstackable) .five.fields:not(.unstackable) > .field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .two.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .three.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .four.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .five.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .six.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .seven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eight.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .nine.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .ten.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .eleven.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .twelve.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .thirteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fourteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .fifteen.wide.field,\n  .ui.form:not(.unstackable) .fields:not(.unstackable) > .sixteen.wide.field {\n    width: @oneColumn !important;\n  }\n  .ui.form .fields {\n    margin-bottom: 0em;\n  }\n}\n\n/*--------------------\n     Equal Width\n---------------------*/\n\n.ui[class*=\"equal width\"].form .fields > .field,\n.ui.form [class*=\"equal width\"].fields > .field {\n  width: 100%;\n  flex: 1 1 auto;\n}\n\n/*--------------------\n    Inline Fields\n---------------------*/\n\n.ui.form .inline.fields {\n  margin: @fieldMargin;\n  align-items: center;\n}\n.ui.form .inline.fields .field {\n  margin: 0em;\n  padding: @inlineFieldsMargin;\n}\n\n/* Inline Label */\n.ui.form .inline.fields > label,\n.ui.form .inline.fields .field > label,\n.ui.form .inline.fields .field > p,\n.ui.form .inline.field > label,\n.ui.form .inline.field > p {\n  display: inline-block;\n  width: auto;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  vertical-align: baseline;\n  font-size: @inlineLabelFontSize;\n  font-weight: @inlineLabelFontWeight;\n  color: @inlineLabelColor;\n  text-transform: @inlineLabelTextTransform;\n}\n\n/* Grouped Inline Label */\n.ui.form .inline.fields > label {\n  margin: @groupedInlineLabelMargin;\n}\n\n/* Inline Input */\n.ui.form .inline.fields .field > input,\n.ui.form .inline.fields .field > select,\n.ui.form .inline.field > input,\n.ui.form .inline.field > select {\n  display: inline-block;\n  width: auto;\n\n  margin-top: 0em;\n  margin-bottom: 0em;\n\n  vertical-align: middle;\n  font-size: @inlineInputSize;\n}\n\n/* Label */\n.ui.form .inline.fields .field > :first-child,\n.ui.form .inline.field > :first-child {\n  margin: 0em @inlineLabelDistance 0em 0em;\n}\n.ui.form .inline.fields .field > :only-child,\n.ui.form .inline.field > :only-child {\n  margin: 0em;\n}\n\n/* Wide */\n.ui.form .inline.fields .wide.field {\n  display: flex;\n  align-items: center;\n}\n.ui.form .inline.fields .wide.field > input,\n.ui.form .inline.fields .wide.field > select {\n  width: 100%;\n}\n\n\n/*--------------------\n        Sizes\n---------------------*/\n\n.ui.mini.form {\n  font-size: @mini;\n}\n.ui.tiny.form {\n  font-size: @tiny;\n}\n.ui.small.form {\n  font-size: @small;\n}\n.ui.form {\n  font-size: @medium;\n}\n.ui.large.form {\n  font-size: @large;\n}\n.ui.big.form {\n  font-size: @big;\n}\n.ui.huge.form {\n  font-size: @huge;\n}\n.ui.massive.form {\n  font-size: @massive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/grid.less",
    "content": "/*!\n * # Semantic UI - Grid\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'grid';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Standard\n*******************************/\n\n.ui.grid {\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  align-items: stretch;\n  padding: 0em;\n}\n\n/*----------------------\n      Remove Gutters\n-----------------------*/\n\n.ui.grid {\n  margin-top: -(@rowSpacing / 2);\n  margin-bottom: -(@rowSpacing / 2);\n  margin-left: -(@gutterWidth / 2);\n  margin-right: -(@gutterWidth / 2);\n}\n.ui.relaxed.grid  {\n  margin-left: -(@relaxedGutterWidth / 2);\n  margin-right: -(@relaxedGutterWidth / 2);\n}\n.ui[class*=\"very relaxed\"].grid  {\n  margin-left: -(@veryRelaxedGutterWidth / 2);\n  margin-right: -(@veryRelaxedGutterWidth / 2);\n}\n\n\n/* Preserve Rows Spacing on Consecutive Grids */\n.ui.grid + .grid {\n  margin-top: @consecutiveGridDistance;\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Standard 16 column */\n.ui.grid > .column:not(.row),\n.ui.grid > .row > .column {\n  position: relative;\n  display: inline-block;\n\n  width: @oneWide;\n  padding-left: (@gutterWidth / 2);\n  padding-right: (@gutterWidth / 2);\n  vertical-align: top;\n}\n\n.ui.grid > * {\n  padding-left: (@gutterWidth / 2);\n  padding-right: (@gutterWidth / 2);\n}\n\n/*-------------------\n        Rows\n--------------------*/\n\n.ui.grid > .row {\n  position: relative;\n  display: flex;\n  flex-direction: row;\n  flex-wrap: wrap;\n  justify-content: inherit;\n  align-items: stretch;\n  width: 100% !important;\n  padding: 0rem;\n  padding-top: (@rowSpacing / 2);\n  padding-bottom: (@rowSpacing / 2);\n}\n\n/*-------------------\n       Columns\n--------------------*/\n\n/* Vertical padding when no rows */\n.ui.grid > .column:not(.row) {\n  padding-top: (@rowSpacing / 2);\n  padding-bottom: (@rowSpacing / 2);\n}\n.ui.grid > .row > .column {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n/*-------------------\n      Content\n--------------------*/\n\n.ui.grid > .row > img,\n.ui.grid > .row > .column > img {\n  max-width: @columnMaxImageWidth;\n}\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Collapse Margin on Consecutive Grid */\n.ui.grid > .ui.grid:first-child {\n  margin-top: 0em;\n}\n.ui.grid > .ui.grid:last-child {\n  margin-bottom: 0em;\n}\n\n/* Segment inside Aligned Grid */\n.ui.grid .aligned.row > .column > .segment:not(.compact):not(.attached),\n.ui.aligned.grid .column > .segment:not(.compact):not(.attached) {\n  width: 100%;\n}\n\n/* Align Dividers with Gutter */\n.ui.grid .row + .ui.divider {\n  flex-grow: 1;\n  margin: (@rowSpacing / 2) (@gutterWidth / 2);\n}\n.ui.grid .column + .ui.vertical.divider {\n  height: ~\"calc(50% - \"(@rowSpacing/2)~\")\";\n}\n\n/* Remove Border on Last Horizontal Segment */\n.ui.grid > .row > .column:last-child > .horizontal.segment,\n.ui.grid > .column:last-child > .horizontal.segment {\n  box-shadow: none;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-----------------------\n       Page Grid\n-------------------------*/\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.page.grid {\n    width: @mobileWidth;\n    padding-left: @mobileGutter;\n    padding-right: @mobileGutter;\n    margin-left: 0em;\n    margin-right: 0em;\n  }\n}\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui.page.grid {\n    width: @tabletWidth;\n    margin-left: @tabletMargin;\n    margin-right: @tabletMargin;\n    padding-left: @tabletGutter;\n    padding-right: @tabletGutter;\n  }\n}\n@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {\n  .ui.page.grid {\n    width: @computerWidth;\n    margin-left: @computerMargin;\n    margin-right: @computerMargin;\n    padding-left: @computerGutter;\n    padding-right: @computerGutter;\n  }\n}\n@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor) {\n  .ui.page.grid {\n    width: @largeMonitorWidth;\n    margin-left: @largeMonitorMargin;\n    margin-right: @largeMonitorMargin;\n    padding-left: @largeMonitorGutter;\n    padding-right: @largeMonitorGutter;\n  }\n}\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui.page.grid {\n    width: @widescreenMonitorWidth;\n    margin-left: @widescreenMargin;\n    margin-right: @widescreenMargin;\n    padding-left: @widescreenMonitorGutter;\n    padding-right: @widescreenMonitorGutter;\n  }\n}\n\n\n/*-------------------\n     Column Count\n--------------------*/\n\n/* Assume full width with one column */\n.ui.grid > .column:only-child,\n.ui.grid > .row > .column:only-child {\n  width: @oneColumn;\n}\n\n/* Grid Based */\n.ui[class*=\"one column\"].grid > .row > .column,\n.ui[class*=\"one column\"].grid > .column:not(.row) {\n  width: @oneColumn;\n}\n.ui[class*=\"two column\"].grid > .row > .column,\n.ui[class*=\"two column\"].grid > .column:not(.row) {\n  width: @twoColumn;\n}\n.ui[class*=\"three column\"].grid > .row > .column,\n.ui[class*=\"three column\"].grid > .column:not(.row) {\n  width: @threeColumn;\n}\n.ui[class*=\"four column\"].grid > .row > .column,\n.ui[class*=\"four column\"].grid > .column:not(.row) {\n  width: @fourColumn;\n}\n.ui[class*=\"five column\"].grid > .row > .column,\n.ui[class*=\"five column\"].grid > .column:not(.row) {\n  width: @fiveColumn;\n}\n.ui[class*=\"six column\"].grid > .row > .column,\n.ui[class*=\"six column\"].grid > .column:not(.row) {\n  width: @sixColumn;\n}\n.ui[class*=\"seven column\"].grid > .row > .column,\n.ui[class*=\"seven column\"].grid > .column:not(.row) {\n  width: @sevenColumn;\n}\n.ui[class*=\"eight column\"].grid > .row > .column,\n.ui[class*=\"eight column\"].grid > .column:not(.row) {\n  width: @eightColumn;\n}\n.ui[class*=\"nine column\"].grid > .row > .column,\n.ui[class*=\"nine column\"].grid > .column:not(.row) {\n  width: @nineColumn;\n}\n.ui[class*=\"ten column\"].grid > .row > .column,\n.ui[class*=\"ten column\"].grid > .column:not(.row) {\n  width: @tenColumn;\n}\n.ui[class*=\"eleven column\"].grid > .row > .column,\n.ui[class*=\"eleven column\"].grid > .column:not(.row) {\n  width: @elevenColumn;\n}\n.ui[class*=\"twelve column\"].grid > .row > .column,\n.ui[class*=\"twelve column\"].grid > .column:not(.row) {\n  width: @twelveColumn;\n}\n.ui[class*=\"thirteen column\"].grid > .row > .column,\n.ui[class*=\"thirteen column\"].grid > .column:not(.row) {\n  width: @thirteenColumn;\n}\n.ui[class*=\"fourteen column\"].grid > .row > .column,\n.ui[class*=\"fourteen column\"].grid > .column:not(.row) {\n  width: @fourteenColumn;\n}\n.ui[class*=\"fifteen column\"].grid > .row > .column,\n.ui[class*=\"fifteen column\"].grid > .column:not(.row) {\n  width: @fifteenColumn;\n}\n.ui[class*=\"sixteen column\"].grid > .row > .column,\n.ui[class*=\"sixteen column\"].grid > .column:not(.row) {\n  width: @sixteenColumn;\n}\n\n/* Row Based Overrides */\n.ui.grid > [class*=\"one column\"].row > .column {\n  width: @oneColumn !important;\n}\n.ui.grid > [class*=\"two column\"].row > .column {\n  width: @twoColumn !important;\n}\n.ui.grid > [class*=\"three column\"].row > .column {\n  width: @threeColumn !important;\n}\n.ui.grid > [class*=\"four column\"].row > .column {\n  width: @fourColumn !important;\n}\n.ui.grid > [class*=\"five column\"].row > .column {\n  width: @fiveColumn !important;\n}\n.ui.grid > [class*=\"six column\"].row > .column {\n  width: @sixColumn !important;\n}\n.ui.grid > [class*=\"seven column\"].row > .column {\n  width: @sevenColumn !important;\n}\n.ui.grid > [class*=\"eight column\"].row > .column {\n  width: @eightColumn !important;\n}\n.ui.grid > [class*=\"nine column\"].row > .column {\n  width: @nineColumn !important;\n}\n.ui.grid > [class*=\"ten column\"].row > .column {\n  width: @tenColumn !important;\n}\n.ui.grid > [class*=\"eleven column\"].row > .column {\n  width: @elevenColumn !important;\n}\n.ui.grid > [class*=\"twelve column\"].row > .column {\n  width: @twelveColumn !important;\n}\n.ui.grid > [class*=\"thirteen column\"].row > .column {\n  width: @thirteenColumn !important;\n}\n.ui.grid > [class*=\"fourteen column\"].row > .column {\n  width: @fourteenColumn !important;\n}\n.ui.grid > [class*=\"fifteen column\"].row > .column {\n  width: @fifteenColumn !important;\n}\n.ui.grid > [class*=\"sixteen column\"].row > .column {\n  width: @sixteenColumn !important;\n}\n\n/* Celled Page */\n.ui.celled.page.grid {\n  box-shadow: none;\n}\n\n/*-------------------\n    Column Width\n--------------------*/\n\n/* Sizing Combinations */\n.ui.grid > .row > [class*=\"one wide\"].column,\n.ui.grid > .column.row > [class*=\"one wide\"].column,\n.ui.grid > [class*=\"one wide\"].column,\n.ui.column.grid > [class*=\"one wide\"].column {\n  width: @oneWide !important;\n}\n.ui.grid > .row > [class*=\"two wide\"].column,\n.ui.grid > .column.row > [class*=\"two wide\"].column,\n.ui.grid > [class*=\"two wide\"].column,\n.ui.column.grid > [class*=\"two wide\"].column {\n  width: @twoWide !important;\n}\n.ui.grid > .row > [class*=\"three wide\"].column,\n.ui.grid > .column.row > [class*=\"three wide\"].column,\n.ui.grid > [class*=\"three wide\"].column,\n.ui.column.grid > [class*=\"three wide\"].column {\n  width: @threeWide !important;\n}\n.ui.grid > .row > [class*=\"four wide\"].column,\n.ui.grid > .column.row > [class*=\"four wide\"].column,\n.ui.grid > [class*=\"four wide\"].column,\n.ui.column.grid > [class*=\"four wide\"].column {\n  width: @fourWide !important;\n}\n.ui.grid > .row > [class*=\"five wide\"].column,\n.ui.grid > .column.row > [class*=\"five wide\"].column,\n.ui.grid > [class*=\"five wide\"].column,\n.ui.column.grid > [class*=\"five wide\"].column {\n  width: @fiveWide !important;\n}\n.ui.grid > .row > [class*=\"six wide\"].column,\n.ui.grid > .column.row > [class*=\"six wide\"].column,\n.ui.grid > [class*=\"six wide\"].column,\n.ui.column.grid > [class*=\"six wide\"].column {\n  width: @sixWide !important;\n}\n.ui.grid > .row > [class*=\"seven wide\"].column,\n.ui.grid > .column.row > [class*=\"seven wide\"].column,\n.ui.grid > [class*=\"seven wide\"].column,\n.ui.column.grid > [class*=\"seven wide\"].column {\n  width: @sevenWide !important;\n}\n.ui.grid > .row > [class*=\"eight wide\"].column,\n.ui.grid > .column.row > [class*=\"eight wide\"].column,\n.ui.grid > [class*=\"eight wide\"].column,\n.ui.column.grid > [class*=\"eight wide\"].column {\n  width: @eightWide !important;\n}\n.ui.grid > .row > [class*=\"nine wide\"].column,\n.ui.grid > .column.row > [class*=\"nine wide\"].column,\n.ui.grid > [class*=\"nine wide\"].column,\n.ui.column.grid > [class*=\"nine wide\"].column {\n  width: @nineWide !important;\n}\n.ui.grid > .row > [class*=\"ten wide\"].column,\n.ui.grid > .column.row > [class*=\"ten wide\"].column,\n.ui.grid > [class*=\"ten wide\"].column,\n.ui.column.grid > [class*=\"ten wide\"].column {\n  width: @tenWide !important;\n}\n.ui.grid > .row > [class*=\"eleven wide\"].column,\n.ui.grid > .column.row > [class*=\"eleven wide\"].column,\n.ui.grid > [class*=\"eleven wide\"].column,\n.ui.column.grid > [class*=\"eleven wide\"].column {\n  width: @elevenWide !important;\n}\n.ui.grid > .row > [class*=\"twelve wide\"].column,\n.ui.grid > .column.row > [class*=\"twelve wide\"].column,\n.ui.grid > [class*=\"twelve wide\"].column,\n.ui.column.grid > [class*=\"twelve wide\"].column {\n  width: @twelveWide !important;\n}\n.ui.grid > .row > [class*=\"thirteen wide\"].column,\n.ui.grid > .column.row > [class*=\"thirteen wide\"].column,\n.ui.grid > [class*=\"thirteen wide\"].column,\n.ui.column.grid > [class*=\"thirteen wide\"].column {\n  width: @thirteenWide !important;\n}\n.ui.grid > .row > [class*=\"fourteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fourteen wide\"].column,\n.ui.grid > [class*=\"fourteen wide\"].column,\n.ui.column.grid > [class*=\"fourteen wide\"].column {\n  width: @fourteenWide !important;\n}\n.ui.grid > .row > [class*=\"fifteen wide\"].column,\n.ui.grid > .column.row > [class*=\"fifteen wide\"].column,\n.ui.grid > [class*=\"fifteen wide\"].column,\n.ui.column.grid > [class*=\"fifteen wide\"].column {\n  width: @fifteenWide !important;\n}\n.ui.grid > .row > [class*=\"sixteen wide\"].column,\n.ui.grid > .column.row > [class*=\"sixteen wide\"].column,\n.ui.grid > [class*=\"sixteen wide\"].column,\n.ui.column.grid > [class*=\"sixteen wide\"].column {\n  width: @sixteenWide !important;\n}\n\n/*----------------------\n    Width per Device\n-----------------------*/\n\n/* Mobile Sizing Combinations */\n@media only screen and (min-width: @mobileBreakpoint) and (max-width: @largestMobileScreen) {\n  .ui.grid > .row > [class*=\"one wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"one wide mobile\"].column,\n  .ui.grid > [class*=\"one wide mobile\"].column,\n  .ui.column.grid > [class*=\"one wide mobile\"].column {\n    width: @oneWide !important;\n  }\n  .ui.grid > .row > [class*=\"two wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"two wide mobile\"].column,\n  .ui.grid > [class*=\"two wide mobile\"].column,\n  .ui.column.grid > [class*=\"two wide mobile\"].column {\n    width: @twoWide !important;\n  }\n  .ui.grid > .row > [class*=\"three wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"three wide mobile\"].column,\n  .ui.grid > [class*=\"three wide mobile\"].column,\n  .ui.column.grid > [class*=\"three wide mobile\"].column {\n    width: @threeWide !important;\n  }\n  .ui.grid > .row > [class*=\"four wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"four wide mobile\"].column,\n  .ui.grid > [class*=\"four wide mobile\"].column,\n  .ui.column.grid > [class*=\"four wide mobile\"].column {\n    width: @fourWide !important;\n  }\n  .ui.grid > .row > [class*=\"five wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"five wide mobile\"].column,\n  .ui.grid > [class*=\"five wide mobile\"].column,\n  .ui.column.grid > [class*=\"five wide mobile\"].column {\n    width: @fiveWide !important;\n  }\n  .ui.grid > .row > [class*=\"six wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"six wide mobile\"].column,\n  .ui.grid > [class*=\"six wide mobile\"].column,\n  .ui.column.grid > [class*=\"six wide mobile\"].column {\n    width: @sixWide !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide mobile\"].column,\n  .ui.grid > [class*=\"seven wide mobile\"].column,\n  .ui.column.grid > [class*=\"seven wide mobile\"].column {\n    width: @sevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide mobile\"].column,\n  .ui.grid > [class*=\"eight wide mobile\"].column,\n  .ui.column.grid > [class*=\"eight wide mobile\"].column {\n    width: @eightWide !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide mobile\"].column,\n  .ui.grid > [class*=\"nine wide mobile\"].column,\n  .ui.column.grid > [class*=\"nine wide mobile\"].column {\n    width: @nineWide !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide mobile\"].column,\n  .ui.grid > [class*=\"ten wide mobile\"].column,\n  .ui.column.grid > [class*=\"ten wide mobile\"].column {\n    width: @tenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide mobile\"].column,\n  .ui.grid > [class*=\"eleven wide mobile\"].column,\n  .ui.column.grid > [class*=\"eleven wide mobile\"].column {\n    width: @elevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide mobile\"].column,\n  .ui.grid > [class*=\"twelve wide mobile\"].column,\n  .ui.column.grid > [class*=\"twelve wide mobile\"].column {\n    width: @twelveWide !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide mobile\"].column,\n  .ui.grid > [class*=\"thirteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"thirteen wide mobile\"].column {\n    width: @thirteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide mobile\"].column,\n  .ui.grid > [class*=\"fourteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fourteen wide mobile\"].column {\n    width: @fourteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide mobile\"].column,\n  .ui.grid > [class*=\"fifteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"fifteen wide mobile\"].column {\n    width: @fifteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide mobile\"].column,\n  .ui.grid > [class*=\"sixteen wide mobile\"].column,\n  .ui.column.grid > [class*=\"sixteen wide mobile\"].column {\n    width: @sixteenWide !important;\n  }\n}\n\n/* Tablet Sizing Combinations */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui.grid > .row > [class*=\"one wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"one wide tablet\"].column,\n  .ui.grid > [class*=\"one wide tablet\"].column,\n  .ui.column.grid > [class*=\"one wide tablet\"].column {\n    width: @oneWide !important;\n  }\n  .ui.grid > .row > [class*=\"two wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"two wide tablet\"].column,\n  .ui.grid > [class*=\"two wide tablet\"].column,\n  .ui.column.grid > [class*=\"two wide tablet\"].column {\n    width: @twoWide !important;\n  }\n  .ui.grid > .row > [class*=\"three wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"three wide tablet\"].column,\n  .ui.grid > [class*=\"three wide tablet\"].column,\n  .ui.column.grid > [class*=\"three wide tablet\"].column {\n    width: @threeWide !important;\n  }\n  .ui.grid > .row > [class*=\"four wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"four wide tablet\"].column,\n  .ui.grid > [class*=\"four wide tablet\"].column,\n  .ui.column.grid > [class*=\"four wide tablet\"].column {\n    width: @fourWide !important;\n  }\n  .ui.grid > .row > [class*=\"five wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"five wide tablet\"].column,\n  .ui.grid > [class*=\"five wide tablet\"].column,\n  .ui.column.grid > [class*=\"five wide tablet\"].column {\n    width: @fiveWide !important;\n  }\n  .ui.grid > .row > [class*=\"six wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"six wide tablet\"].column,\n  .ui.grid > [class*=\"six wide tablet\"].column,\n  .ui.column.grid > [class*=\"six wide tablet\"].column {\n    width: @sixWide !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide tablet\"].column,\n  .ui.grid > [class*=\"seven wide tablet\"].column,\n  .ui.column.grid > [class*=\"seven wide tablet\"].column {\n    width: @sevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide tablet\"].column,\n  .ui.grid > [class*=\"eight wide tablet\"].column,\n  .ui.column.grid > [class*=\"eight wide tablet\"].column {\n    width: @eightWide !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide tablet\"].column,\n  .ui.grid > [class*=\"nine wide tablet\"].column,\n  .ui.column.grid > [class*=\"nine wide tablet\"].column {\n    width: @nineWide !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide tablet\"].column,\n  .ui.grid > [class*=\"ten wide tablet\"].column,\n  .ui.column.grid > [class*=\"ten wide tablet\"].column {\n    width: @tenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide tablet\"].column,\n  .ui.grid > [class*=\"eleven wide tablet\"].column,\n  .ui.column.grid > [class*=\"eleven wide tablet\"].column {\n    width: @elevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide tablet\"].column,\n  .ui.grid > [class*=\"twelve wide tablet\"].column,\n  .ui.column.grid > [class*=\"twelve wide tablet\"].column {\n    width: @twelveWide !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide tablet\"].column,\n  .ui.grid > [class*=\"thirteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"thirteen wide tablet\"].column {\n    width: @thirteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide tablet\"].column,\n  .ui.grid > [class*=\"fourteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fourteen wide tablet\"].column {\n    width: @fourteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide tablet\"].column,\n  .ui.grid > [class*=\"fifteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"fifteen wide tablet\"].column {\n    width: @fifteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide tablet\"].column,\n  .ui.grid > [class*=\"sixteen wide tablet\"].column,\n  .ui.column.grid > [class*=\"sixteen wide tablet\"].column {\n    width: @sixteenWide !important;\n  }\n}\n\n/* Computer/Desktop Sizing Combinations */\n@media only screen and (min-width: @computerBreakpoint) {\n    .ui.grid > .row > [class*=\"one wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"one wide computer\"].column,\n  .ui.grid > [class*=\"one wide computer\"].column,\n  .ui.column.grid > [class*=\"one wide computer\"].column {\n    width: @oneWide !important;\n  }\n  .ui.grid > .row > [class*=\"two wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"two wide computer\"].column,\n  .ui.grid > [class*=\"two wide computer\"].column,\n  .ui.column.grid > [class*=\"two wide computer\"].column {\n    width: @twoWide !important;\n  }\n  .ui.grid > .row > [class*=\"three wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"three wide computer\"].column,\n  .ui.grid > [class*=\"three wide computer\"].column,\n  .ui.column.grid > [class*=\"three wide computer\"].column {\n    width: @threeWide !important;\n  }\n  .ui.grid > .row > [class*=\"four wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"four wide computer\"].column,\n  .ui.grid > [class*=\"four wide computer\"].column,\n  .ui.column.grid > [class*=\"four wide computer\"].column {\n    width: @fourWide !important;\n  }\n  .ui.grid > .row > [class*=\"five wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"five wide computer\"].column,\n  .ui.grid > [class*=\"five wide computer\"].column,\n  .ui.column.grid > [class*=\"five wide computer\"].column {\n    width: @fiveWide !important;\n  }\n  .ui.grid > .row > [class*=\"six wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"six wide computer\"].column,\n  .ui.grid > [class*=\"six wide computer\"].column,\n  .ui.column.grid > [class*=\"six wide computer\"].column {\n    width: @sixWide !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide computer\"].column,\n  .ui.grid > [class*=\"seven wide computer\"].column,\n  .ui.column.grid > [class*=\"seven wide computer\"].column {\n    width: @sevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide computer\"].column,\n  .ui.grid > [class*=\"eight wide computer\"].column,\n  .ui.column.grid > [class*=\"eight wide computer\"].column {\n    width: @eightWide !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide computer\"].column,\n  .ui.grid > [class*=\"nine wide computer\"].column,\n  .ui.column.grid > [class*=\"nine wide computer\"].column {\n    width: @nineWide !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide computer\"].column,\n  .ui.grid > [class*=\"ten wide computer\"].column,\n  .ui.column.grid > [class*=\"ten wide computer\"].column {\n    width: @tenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide computer\"].column,\n  .ui.grid > [class*=\"eleven wide computer\"].column,\n  .ui.column.grid > [class*=\"eleven wide computer\"].column {\n    width: @elevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide computer\"].column,\n  .ui.grid > [class*=\"twelve wide computer\"].column,\n  .ui.column.grid > [class*=\"twelve wide computer\"].column {\n    width: @twelveWide !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide computer\"].column,\n  .ui.grid > [class*=\"thirteen wide computer\"].column,\n  .ui.column.grid > [class*=\"thirteen wide computer\"].column {\n    width: @thirteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide computer\"].column,\n  .ui.grid > [class*=\"fourteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fourteen wide computer\"].column {\n    width: @fourteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide computer\"].column,\n  .ui.grid > [class*=\"fifteen wide computer\"].column,\n  .ui.column.grid > [class*=\"fifteen wide computer\"].column {\n    width: @fifteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide computer\"].column,\n  .ui.grid > [class*=\"sixteen wide computer\"].column,\n  .ui.column.grid > [class*=\"sixteen wide computer\"].column {\n    width: @sixteenWide !important;\n  }\n}\n\n/* Large Monitor Sizing Combinations */\n@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor){\n  .ui.grid > .row > [class*=\"one wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide large screen\"].column,\n  .ui.grid > [class*=\"one wide large screen\"].column,\n  .ui.column.grid > [class*=\"one wide large screen\"].column {\n    width: @oneWide !important;\n  }\n  .ui.grid > .row > [class*=\"two wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide large screen\"].column,\n  .ui.grid > [class*=\"two wide large screen\"].column,\n  .ui.column.grid > [class*=\"two wide large screen\"].column {\n    width: @twoWide !important;\n  }\n  .ui.grid > .row > [class*=\"three wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide large screen\"].column,\n  .ui.grid > [class*=\"three wide large screen\"].column,\n  .ui.column.grid > [class*=\"three wide large screen\"].column {\n    width: @threeWide !important;\n  }\n  .ui.grid > .row > [class*=\"four wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide large screen\"].column,\n  .ui.grid > [class*=\"four wide large screen\"].column,\n  .ui.column.grid > [class*=\"four wide large screen\"].column {\n    width: @fourWide !important;\n  }\n  .ui.grid > .row > [class*=\"five wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide large screen\"].column,\n  .ui.grid > [class*=\"five wide large screen\"].column,\n  .ui.column.grid > [class*=\"five wide large screen\"].column {\n    width: @fiveWide !important;\n  }\n  .ui.grid > .row > [class*=\"six wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide large screen\"].column,\n  .ui.grid > [class*=\"six wide large screen\"].column,\n  .ui.column.grid > [class*=\"six wide large screen\"].column {\n    width: @sixWide !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide large screen\"].column,\n  .ui.grid > [class*=\"seven wide large screen\"].column,\n  .ui.column.grid > [class*=\"seven wide large screen\"].column {\n    width: @sevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide large screen\"].column,\n  .ui.grid > [class*=\"eight wide large screen\"].column,\n  .ui.column.grid > [class*=\"eight wide large screen\"].column {\n    width: @eightWide !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide large screen\"].column,\n  .ui.grid > [class*=\"nine wide large screen\"].column,\n  .ui.column.grid > [class*=\"nine wide large screen\"].column {\n    width: @nineWide !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide large screen\"].column,\n  .ui.grid > [class*=\"ten wide large screen\"].column,\n  .ui.column.grid > [class*=\"ten wide large screen\"].column {\n    width: @tenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide large screen\"].column,\n  .ui.grid > [class*=\"eleven wide large screen\"].column,\n  .ui.column.grid > [class*=\"eleven wide large screen\"].column {\n    width: @elevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide large screen\"].column,\n  .ui.grid > [class*=\"twelve wide large screen\"].column,\n  .ui.column.grid > [class*=\"twelve wide large screen\"].column {\n    width: @twelveWide !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide large screen\"].column,\n  .ui.grid > [class*=\"thirteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide large screen\"].column {\n    width: @thirteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide large screen\"].column,\n  .ui.grid > [class*=\"fourteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide large screen\"].column {\n    width: @fourteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide large screen\"].column,\n  .ui.grid > [class*=\"fifteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide large screen\"].column {\n    width: @fifteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide large screen\"].column,\n  .ui.grid > [class*=\"sixteen wide large screen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide large screen\"].column {\n    width: @sixteenWide !important;\n  }\n}\n\n/* Widescreen Sizing Combinations */\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui.grid > .row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"one wide widescreen\"].column,\n  .ui.grid > [class*=\"one wide widescreen\"].column,\n  .ui.column.grid > [class*=\"one wide widescreen\"].column {\n    width: @oneWide !important;\n  }\n  .ui.grid > .row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"two wide widescreen\"].column,\n  .ui.grid > [class*=\"two wide widescreen\"].column,\n  .ui.column.grid > [class*=\"two wide widescreen\"].column {\n    width: @twoWide !important;\n  }\n  .ui.grid > .row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"three wide widescreen\"].column,\n  .ui.grid > [class*=\"three wide widescreen\"].column,\n  .ui.column.grid > [class*=\"three wide widescreen\"].column {\n    width: @threeWide !important;\n  }\n  .ui.grid > .row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"four wide widescreen\"].column,\n  .ui.grid > [class*=\"four wide widescreen\"].column,\n  .ui.column.grid > [class*=\"four wide widescreen\"].column {\n    width: @fourWide !important;\n  }\n  .ui.grid > .row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"five wide widescreen\"].column,\n  .ui.grid > [class*=\"five wide widescreen\"].column,\n  .ui.column.grid > [class*=\"five wide widescreen\"].column {\n    width: @fiveWide !important;\n  }\n  .ui.grid > .row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"six wide widescreen\"].column,\n  .ui.grid > [class*=\"six wide widescreen\"].column,\n  .ui.column.grid > [class*=\"six wide widescreen\"].column {\n    width: @sixWide !important;\n  }\n  .ui.grid > .row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"seven wide widescreen\"].column,\n  .ui.grid > [class*=\"seven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"seven wide widescreen\"].column {\n    width: @sevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eight wide widescreen\"].column,\n  .ui.grid > [class*=\"eight wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eight wide widescreen\"].column {\n    width: @eightWide !important;\n  }\n  .ui.grid > .row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"nine wide widescreen\"].column,\n  .ui.grid > [class*=\"nine wide widescreen\"].column,\n  .ui.column.grid > [class*=\"nine wide widescreen\"].column {\n    width: @nineWide !important;\n  }\n  .ui.grid > .row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"ten wide widescreen\"].column,\n  .ui.grid > [class*=\"ten wide widescreen\"].column,\n  .ui.column.grid > [class*=\"ten wide widescreen\"].column {\n    width: @tenWide !important;\n  }\n  .ui.grid > .row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"eleven wide widescreen\"].column,\n  .ui.grid > [class*=\"eleven wide widescreen\"].column,\n  .ui.column.grid > [class*=\"eleven wide widescreen\"].column {\n    width: @elevenWide !important;\n  }\n  .ui.grid > .row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"twelve wide widescreen\"].column,\n  .ui.grid > [class*=\"twelve wide widescreen\"].column,\n  .ui.column.grid > [class*=\"twelve wide widescreen\"].column {\n    width: @twelveWide !important;\n  }\n  .ui.grid > .row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"thirteen wide widescreen\"].column,\n  .ui.grid > [class*=\"thirteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"thirteen wide widescreen\"].column {\n    width: @thirteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fourteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fourteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fourteen wide widescreen\"].column {\n    width: @fourteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"fifteen wide widescreen\"].column,\n  .ui.grid > [class*=\"fifteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"fifteen wide widescreen\"].column {\n    width: @fifteenWide !important;\n  }\n  .ui.grid > .row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > .column.row > [class*=\"sixteen wide widescreen\"].column,\n  .ui.grid > [class*=\"sixteen wide widescreen\"].column,\n  .ui.column.grid > [class*=\"sixteen wide widescreen\"].column {\n    width: @sixteenWide !important;\n  }\n}\n\n/*----------------------\n        Centered\n-----------------------*/\n\n.ui.centered.grid,\n.ui.centered.grid > .row,\n.ui.grid > .centered.row {\n  text-align: center;\n  justify-content: center;\n}\n.ui.centered.grid > .column:not(.aligned):not(.justified):not(.row),\n.ui.centered.grid > .row > .column:not(.aligned):not(.justified),\n.ui.grid .centered.row > .column:not(.aligned):not(.justified) {\n  text-align: left;\n}\n\n.ui.grid > .centered.column,\n.ui.grid > .row > .centered.column {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*----------------------\n        Relaxed\n-----------------------*/\n\n.ui.relaxed.grid > .column:not(.row),\n.ui.relaxed.grid > .row > .column,\n.ui.grid > .relaxed.row > .column {\n  padding-left: (@relaxedGutterWidth / 2);\n  padding-right: (@relaxedGutterWidth / 2);\n}\n\n.ui[class*=\"very relaxed\"].grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].grid > .row > .column,\n.ui.grid > [class*=\"very relaxed\"].row > .column {\n  padding-left: (@veryRelaxedGutterWidth / 2);\n  padding-right: (@veryRelaxedGutterWidth / 2);\n}\n\n/* Coupling with UI Divider */\n.ui.relaxed.grid .row + .ui.divider,\n.ui.grid .relaxed.row + .ui.divider {\n  margin-left: (@relaxedGutterWidth / 2);\n  margin-right: (@relaxedGutterWidth / 2);\n}\n.ui[class*=\"very relaxed\"].grid .row + .ui.divider,\n.ui.grid [class*=\"very relaxed\"].row + .ui.divider {\n  margin-left: (@veryRelaxedGutterWidth / 2);\n  margin-right: (@veryRelaxedGutterWidth / 2);\n}\n\n\n/*----------------------\n        Padded\n-----------------------*/\n\n.ui.padded.grid:not(.vertically):not(.horizontally) {\n  margin: 0em !important;\n}\n[class*=\"horizontally padded\"].ui.grid {\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n}\n[class*=\"vertically padded\"].ui.grid {\n  margin-top: 0em !important;\n  margin-bottom: 0em !important;\n}\n\n/*----------------------\n       \"Floated\"\n-----------------------*/\n\n.ui.grid [class*=\"left floated\"].column {\n  margin-right: auto;\n}\n.ui.grid [class*=\"right floated\"].column {\n  margin-left: auto;\n}\n\n\n/*----------------------\n        Divided\n-----------------------*/\n\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: @dividedBorder;\n}\n\n/* Swap from padding to margin on columns to have dividers align */\n.ui[class*=\"vertically divided\"].grid > .column:not(.row),\n.ui[class*=\"vertically divided\"].grid > .row > .column {\n  margin-top: (@rowSpacing / 2);\n  margin-bottom: (@rowSpacing / 2);\n  padding-top: 0rem;\n  padding-bottom: 0rem;\n}\n.ui[class*=\"vertically divided\"].grid > .row {\n  margin-top: 0em;\n  margin-bottom: 0em;\n}\n\n\n\n/* No divider on first column on row */\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n.ui.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/* No space on top of first row */\n.ui[class*=\"vertically divided\"].grid > .row:first-child > .column {\n  margin-top: 0em;\n}\n\n\n/* Divided Row */\n.ui.grid > .divided.row > .column {\n  box-shadow: @dividedBorder;\n}\n.ui.grid > .divided.row > .column:first-child {\n  box-shadow: none;\n}\n\n/* Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row {\n  position: relative;\n}\n.ui[class*=\"vertically divided\"].grid > .row:before {\n  position: absolute;\n  content: \"\";\n  top: 0em;\n  left: 0px;\n\n  width: ~\"calc(100% - \"@gutterWidth~\")\";\n  height: 1px;\n\n  margin: 0% (@gutterWidth / 2);\n  box-shadow: @verticallyDividedBorder;\n}\n\n/* Padded Horizontally Divided */\n[class*=\"horizontally padded\"].ui.divided.grid,\n.ui.padded.divided.grid:not(.vertically):not(.horizontally) {\n  width: 100%;\n}\n\n/* First Row Vertically Divided */\n.ui[class*=\"vertically divided\"].grid > .row:first-child:before {\n  box-shadow: none;\n}\n\n/* Inverted Divided */\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row),\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column {\n  box-shadow: @dividedInvertedBorder;\n}\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .column:not(.row):first-child,\n.ui.inverted.divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n  box-shadow: none;\n}\n.ui.inverted[class*=\"vertically divided\"].grid > .row:before {\n  box-shadow: @verticallyDividedInvertedBorder;\n}\n\n/* Relaxed */\n.ui.relaxed[class*=\"vertically divided\"].grid > .row:before {\n  margin-left: (@relaxedGutterWidth / 2);\n  margin-right: (@relaxedGutterWidth / 2);\n  width: ~\"calc(100% - \"@relaxedGutterWidth~\")\";\n}\n.ui[class*=\"very relaxed\"][class*=\"vertically divided\"].grid > .row:before {\n  margin-left: @veryRelaxedGutterWidth;\n  margin-right: @veryRelaxedGutterWidth;\n  width: ~\"calc(100% - \"@veryRelaxedGutterWidth~\")\";\n}\n\n/*----------------------\n         Celled\n-----------------------*/\n\n.ui.celled.grid {\n  width: 100%;\n  margin: @celledMargin;\n  box-shadow: @celledGridDivider;\n}\n\n.ui.celled.grid > .row {\n  width: 100% !important;\n  margin: 0em;\n  padding: 0em;\n  box-shadow: @celledRowDivider;\n}\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  box-shadow: @celledColumnDivider;\n}\n\n.ui.celled.grid > .column:first-child,\n.ui.celled.grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n.ui.celled.grid > .column:not(.row),\n.ui.celled.grid > .row > .column {\n  padding: @celledPadding;\n}\n.ui.relaxed.celled.grid > .column:not(.row),\n.ui.relaxed.celled.grid > .row > .column {\n  padding: @celledRelaxedPadding;\n}\n.ui[class*=\"very relaxed\"].celled.grid > .column:not(.row),\n.ui[class*=\"very relaxed\"].celled.grid > .row > .column {\n  padding: @celledVeryRelaxedPadding;\n}\n\n/* Internally Celled */\n.ui[class*=\"internally celled\"].grid {\n  box-shadow: none;\n  margin: 0em;\n}\n.ui[class*=\"internally celled\"].grid > .row:first-child {\n  box-shadow: none;\n}\n.ui[class*=\"internally celled\"].grid > .row > .column:first-child {\n  box-shadow: none;\n}\n\n/*----------------------\n   Vertically Aligned\n-----------------------*/\n\n/* Top Aligned */\n.ui[class*=\"top aligned\"].grid > .column:not(.row),\n.ui[class*=\"top aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"top aligned\"].row > .column,\n.ui.grid > [class*=\"top aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"top aligned\"].column {\n  flex-direction: column;\n  vertical-align: top;\n  align-self: flex-start !important;\n}\n\n/* Middle Aligned */\n.ui[class*=\"middle aligned\"].grid > .column:not(.row),\n.ui[class*=\"middle aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"middle aligned\"].row > .column,\n.ui.grid > [class*=\"middle aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"middle aligned\"].column {\n  flex-direction: column;\n  vertical-align: middle;\n  align-self: center !important;\n}\n\n/* Bottom Aligned */\n.ui[class*=\"bottom aligned\"].grid > .column:not(.row),\n.ui[class*=\"bottom aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"bottom aligned\"].row > .column,\n.ui.grid > [class*=\"bottom aligned\"].column:not(.row),\n.ui.grid > .row > [class*=\"bottom aligned\"].column {\n  flex-direction: column;\n  vertical-align: bottom;\n  align-self: flex-end !important;\n}\n\n/* Stretched */\n.ui.stretched.grid > .row > .column,\n.ui.stretched.grid > .column,\n.ui.grid > .stretched.row > .column,\n.ui.grid > .stretched.column:not(.row),\n.ui.grid > .row > .stretched.column {\n  display: inline-flex !important;\n  align-self: stretch;\n  flex-direction: column;\n}\n\n.ui.stretched.grid > .row > .column > *,\n.ui.stretched.grid > .column > *,\n.ui.grid > .stretched.row > .column > *,\n.ui.grid > .stretched.column:not(.row) > *,\n.ui.grid > .row > .stretched.column > * {\n  flex-grow: 1;\n}\n\n/*----------------------\n  Horizontally Centered\n-----------------------*/\n\n/* Left Aligned */\n.ui[class*=\"left aligned\"].grid > .column,\n.ui[class*=\"left aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"left aligned\"].row > .column,\n.ui.grid > [class*=\"left aligned\"].column.column,\n.ui.grid > .row > [class*=\"left aligned\"].column.column {\n  text-align: left;\n  align-self: inherit;\n}\n\n/* Center Aligned */\n.ui[class*=\"center aligned\"].grid > .column,\n.ui[class*=\"center aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"center aligned\"].row > .column,\n.ui.grid > [class*=\"center aligned\"].column.column,\n.ui.grid > .row > [class*=\"center aligned\"].column.column {\n  text-align: center;\n  align-self: inherit;\n}\n.ui[class*=\"center aligned\"].grid {\n  justify-content: center;\n}\n\n/* Right Aligned */\n.ui[class*=\"right aligned\"].grid > .column,\n.ui[class*=\"right aligned\"].grid > .row > .column,\n.ui.grid > [class*=\"right aligned\"].row > .column,\n.ui.grid > [class*=\"right aligned\"].column.column,\n.ui.grid > .row > [class*=\"right aligned\"].column.column {\n  text-align: right;\n  align-self: inherit;\n}\n\n/* Justified */\n.ui.justified.grid > .column,\n.ui.justified.grid > .row > .column,\n.ui.grid > .justified.row > .column,\n.ui.grid > .justified.column.column,\n.ui.grid > .row > .justified.column.column {\n  text-align: justify;\n  hyphens: auto;\n}\n\n/*----------------------\n         Colored\n-----------------------*/\n\n.ui.grid > .row > .red.column,\n.ui.grid > .row > .orange.column,\n.ui.grid > .row > .yellow.column,\n.ui.grid > .row > .olive.column,\n.ui.grid > .row > .green.column,\n.ui.grid > .row > .teal.column,\n.ui.grid > .row > .blue.column,\n.ui.grid > .row > .violet.column,\n.ui.grid > .row > .purple.column,\n.ui.grid > .row > .pink.column,\n.ui.grid > .row > .brown.column,\n.ui.grid > .row > .grey.column,\n.ui.grid > .row > .black.column {\n  margin-top: -(@rowSpacing / 2);\n  margin-bottom: -(@rowSpacing / 2);\n  padding-top: (@rowSpacing / 2);\n  padding-bottom: (@rowSpacing / 2);\n}\n\n/* Red */\n.ui.grid > .red.row,\n.ui.grid > .red.column,\n.ui.grid > .row > .red.column {\n  background-color: @red !important;\n  color: @white;\n}\n/* Orange */\n.ui.grid > .orange.row,\n.ui.grid > .orange.column,\n.ui.grid > .row > .orange.column {\n  background-color: @orange !important;\n  color: @white;\n}\n/* Yellow */\n.ui.grid > .yellow.row,\n.ui.grid > .yellow.column,\n.ui.grid > .row > .yellow.column {\n  background-color: @yellow !important;\n  color: @white;\n}\n/* Olive */\n.ui.grid > .olive.row,\n.ui.grid > .olive.column,\n.ui.grid > .row > .olive.column {\n  background-color: @olive !important;\n  color: @white;\n}\n/* Green */\n.ui.grid > .green.row,\n.ui.grid > .green.column,\n.ui.grid > .row > .green.column {\n  background-color: @green !important;\n  color: @white;\n}\n/* Teal */\n.ui.grid > .teal.row,\n.ui.grid > .teal.column,\n.ui.grid > .row > .teal.column {\n  background-color: @teal !important;\n  color: @white;\n}\n/* Blue */\n.ui.grid > .blue.row,\n.ui.grid > .blue.column,\n.ui.grid > .row > .blue.column {\n  background-color: @blue !important;\n  color: @white;\n}\n/* Violet */\n.ui.grid > .violet.row,\n.ui.grid > .violet.column,\n.ui.grid > .row > .violet.column {\n  background-color: @violet !important;\n  color: @white;\n}\n/* Purple */\n.ui.grid > .purple.row,\n.ui.grid > .purple.column,\n.ui.grid > .row > .purple.column {\n  background-color: @purple !important;\n  color: @white;\n}\n/* Pink */\n.ui.grid > .pink.row,\n.ui.grid > .pink.column,\n.ui.grid > .row > .pink.column {\n  background-color: @pink !important;\n  color: @white;\n}\n/* Brown */\n.ui.grid > .brown.row,\n.ui.grid > .brown.column,\n.ui.grid > .row > .brown.column {\n  background-color: @brown !important;\n  color: @white;\n}\n/* Grey */\n.ui.grid > .grey.row,\n.ui.grid > .grey.column,\n.ui.grid > .row > .grey.column {\n  background-color: @grey !important;\n  color: @white;\n}\n/* Black */\n.ui.grid > .black.row,\n.ui.grid > .black.column,\n.ui.grid > .row > .black.column {\n  background-color: @black !important;\n  color: @white;\n}\n\n\n/*----------------------\n      Equal Width\n-----------------------*/\n\n.ui[class*=\"equal width\"].grid > .column:not(.row),\n.ui[class*=\"equal width\"].grid > .row > .column,\n.ui.grid > [class*=\"equal width\"].row > .column {\n  display: inline-block;\n  flex-grow: 1;\n}\n.ui[class*=\"equal width\"].grid > .wide.column,\n.ui[class*=\"equal width\"].grid > .row > .wide.column,\n.ui.grid > [class*=\"equal width\"].row > .wide.column {\n  flex-grow: 0;\n}\n\n\n/*----------------------\n        Reverse\n-----------------------*/\n\n\n/* Mobile */\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui[class*=\"mobile reversed\"].grid,\n  .ui[class*=\"mobile reversed\"].grid > .row,\n  .ui.grid > [class*=\"mobile reversed\"].row {\n    flex-direction: row-reverse;\n  }\n  .ui[class*=\"mobile vertically reversed\"].grid,\n  .ui.stackable[class*=\"mobile reversed\"] {\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: @dividedBorder;\n  }\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"mobile reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  /* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:first-child:before {\n    box-shadow: @verticallyDividedBorder;\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"mobile vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  /* Celled Reversed */\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: @celledColumnDivider;\n  }\n  .ui[class*=\"mobile reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui[class*=\"tablet reversed\"].grid,\n  .ui[class*=\"tablet reversed\"].grid > .row,\n  .ui.grid > [class*=\"tablet reversed\"].row {\n    flex-direction: row-reverse;\n  }\n  .ui[class*=\"tablet vertically reversed\"].grid {\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: @dividedBorder;\n  }\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"tablet reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  /* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:first-child:before {\n    box-shadow: @verticallyDividedBorder;\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"tablet vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  /* Celled Reversed */\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: @celledColumnDivider;\n  }\n  .ui[class*=\"tablet reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n/* Computer */\n@media only screen and (min-width: @computerBreakpoint) {\n  .ui[class*=\"computer reversed\"].grid,\n  .ui[class*=\"computer reversed\"].grid > .row,\n  .ui.grid > [class*=\"computer reversed\"].row {\n    flex-direction: row-reverse;\n  }\n  .ui[class*=\"computer vertically reversed\"].grid {\n    flex-direction: column-reverse;\n  }\n\n  /* Divided Reversed */\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:first-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:first-child {\n    box-shadow: @dividedBorder;\n  }\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .column:last-child,\n  .ui[class*=\"computer reversed\"].divided.grid:not([class*=\"vertically divided\"]) > .row > .column:last-child {\n    box-shadow: none;\n  }\n  /* Vertically Divided Reversed */\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:first-child:before {\n    box-shadow: @verticallyDividedBorder;\n  }\n  .ui.grid[class*=\"vertically divided\"][class*=\"computer vertically reversed\"] > .row:last-child:before {\n    box-shadow: none;\n  }\n  /* Celled Reversed */\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:first-child {\n    box-shadow: @celledColumnDivider;\n  }\n  .ui[class*=\"computer reversed\"].celled.grid > .row > .column:last-child {\n    box-shadow: none;\n  }\n}\n\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Tablet Only */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui.doubling.grid {\n    width: auto;\n  }\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    display: inline-block !important;\n    padding-top: (@rowSpacing / 2) !important;\n    padding-bottom: (@rowSpacing / 2) !important;\n    box-shadow: none !important;\n    margin: 0em;\n  }\n  .ui[class*=\"two column\"].doubling.grid > .row > .column,\n  .ui[class*=\"two column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling.row.row > .column {\n    width: @oneColumn !important;\n  }\n  .ui[class*=\"three column\"].doubling.grid > .row > .column,\n  .ui[class*=\"three column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling.row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"four column\"].doubling.grid > .row > .column,\n  .ui[class*=\"four column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling.row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"five column\"].doubling.grid > .row > .column,\n  .ui[class*=\"five column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling.row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"six column\"].doubling.grid > .row > .column,\n  .ui[class*=\"six column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling.row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"seven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling.row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"eight column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling.row.row > .column {\n    width: @fourColumn !important;\n  }\n  .ui[class*=\"nine column\"].doubling.grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling.row.row > .column {\n    width: @fourColumn !important;\n  }\n  .ui[class*=\"ten column\"].doubling.grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling.row.row > .column {\n    width: @fiveColumn !important;\n  }\n  .ui[class*=\"eleven column\"].doubling.grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling.row.row > .column {\n    width: @fiveColumn !important;\n  }\n  .ui[class*=\"twelve column\"].doubling.grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling.row.row > .column {\n    width: @sixColumn !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling.row.row > .column {\n    width: @sixColumn !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling.row.row > .column {\n    width: @sevenColumn !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling.row.row > .column {\n    width: @sevenColumn !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling.grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling.grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling.row.row > .column {\n    width: @eightColumn !important;\n  }\n}\n\n/* Mobile Only */\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.grid > .doubling.row,\n  .ui.doubling.grid > .row {\n    margin: 0em !important;\n    padding: 0em !important;\n  }\n  .ui.grid > .doubling.row > .column,\n  .ui.doubling.grid > .row > .column {\n    padding-top: (@rowSpacing / 2) !important;\n    padding-bottom: (@rowSpacing / 2) !important;\n    margin: 0em !important;\n    box-shadow: none !important;\n  }\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"two column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"two column\"].doubling:not(.stackable).row.row > .column {\n    width: @oneColumn !important;\n  }\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"three column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"three column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"four column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"four column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"five column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"five column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"six column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"six column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"seven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"seven column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eight column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eight column\"].doubling:not(.stackable).row.row > .column {\n    width: @twoColumn !important;\n  }\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"nine column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"nine column\"].doubling:not(.stackable).row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"ten column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"ten column\"].doubling:not(.stackable).row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"eleven column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"eleven column\"].doubling:not(.stackable).row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"twelve column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"twelve column\"].doubling:not(.stackable).row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"thirteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"thirteen column\"].doubling:not(.stackable).row.row > .column {\n    width: @threeColumn !important;\n  }\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fourteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fourteen column\"].doubling:not(.stackable).row.row > .column {\n    width: @fourColumn !important;\n  }\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"fifteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"fifteen column\"].doubling:not(.stackable).row.row > .column {\n    width: @fourColumn !important;\n  }\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .row > .column,\n  .ui[class*=\"sixteen column\"].doubling:not(.stackable).grid > .column:not(.row),\n  .ui.grid > [class*=\"sixteen column\"].doubling:not(.stackable).row.row > .column {\n    width: @fourColumn !important;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.stackable.grid {\n    width: auto;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n  .ui.stackable.grid > .row > .wide.column,\n  .ui.stackable.grid > .wide.column,\n  .ui.stackable.grid > .column.grid > .column,\n  .ui.stackable.grid > .column.row > .column,\n  .ui.stackable.grid > .row > .column,\n  .ui.stackable.grid > .column:not(.row),\n  .ui.grid > .stackable.stackable.row > .column {\n    width: 100% !important;\n    margin: 0em 0em !important;\n    box-shadow: none !important;\n    padding: (@stackableRowSpacing / 2) (@stackableGutter / 2) !important;\n  }\n  .ui.stackable.grid:not(.vertically) > .row {\n    margin: 0em;\n    padding: 0em;\n  }\n\n  /* Coupling */\n  .ui.container > .ui.stackable.grid > .column,\n  .ui.container > .ui.stackable.grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n\n  /* Don't pad inside segment or nested grid */\n  .ui.grid .ui.stackable.grid,\n  .ui.segment:not(.vertical) .ui.stackable.page.grid {\n    margin-left: -(@stackableGutter / 2) !important;\n    margin-right: -(@stackableGutter / 2) !important;\n  }\n\n  /* Divided Stackable */\n  .ui.stackable.divided.grid > .row:first-child > .column:first-child,\n  .ui.stackable.celled.grid > .row:first-child > .column:first-child,\n  .ui.stackable.divided.grid > .column:not(.row):first-child,\n  .ui.stackable.celled.grid > .column:not(.row):first-child {\n    border-top: none !important;\n  }\n  .ui.inverted.stackable.celled.grid > .column:not(.row),\n  .ui.inverted.stackable.divided.grid > .column:not(.row),\n  .ui.inverted.stackable.celled.grid > .row > .column,\n  .ui.inverted.stackable.divided.grid > .row > .column {\n    border-top: @stackableInvertedMobileBorder;\n  }\n\n  .ui.stackable.celled.grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.celled.grid > .row > .column,\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    border-top: @stackableMobileBorder;\n    box-shadow: none !important;\n    padding-top: @stackableRowSpacing !important;\n    padding-bottom: @stackableRowSpacing !important;\n  }\n\n  .ui.stackable.celled.grid > .row {\n    box-shadow: none !important;\n  }\n  .ui.stackable.divided:not(.vertically).grid > .column:not(.row),\n  .ui.stackable.divided:not(.vertically).grid > .row > .column {\n    padding-left: 0em !important;\n    padding-right: 0em !important;\n  }\n\n}\n\n/*----------------------\n     Only (Device)\n-----------------------*/\n\n\n/* These include arbitrary class repetitions for forced specificity */\n\n/* Mobile Only Hide */\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n/* Tablet Only Hide */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"computer only\"].grid.grid.grid:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].row:not(.tablet),\n  .ui.grid.grid.grid > [class*=\"computer only\"].column:not(.tablet),\n  .ui.grid.grid.grid > .row > [class*=\"computer only\"].column:not(.tablet) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Computer Only Hide */\n@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"large screen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"large screen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"large screen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Large Screen Only Hide */\n@media only screen and (min-width: @largeMonitorBreakpoint) and (max-width: @largestLargeMonitor) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"widescreen only\"].grid.grid.grid:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].row:not(.mobile),\n  .ui.grid.grid.grid > [class*=\"widescreen only\"].column:not(.mobile),\n  .ui.grid.grid.grid > .row > [class*=\"widescreen only\"].column:not(.mobile) {\n    display: none !important;\n  }\n}\n\n/* Widescreen Only Hide */\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui[class*=\"mobile only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"mobile only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"mobile only\"].column:not(.computer) {\n    display: none !important;\n  }\n  .ui[class*=\"tablet only\"].grid.grid.grid:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].row:not(.computer),\n  .ui.grid.grid.grid > [class*=\"tablet only\"].column:not(.computer),\n  .ui.grid.grid.grid > .row > [class*=\"tablet only\"].column:not(.computer) {\n    display: none !important;\n  }\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/menu.less",
    "content": "/*\n * # Semantic - Menu\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2015 Contributor\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'menu';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.menu {\n  display: flex;\n  margin: @margin;\n  font-family: @fontFamily;\n  background: @background;\n  font-weight: @fontWeight;\n  border: @border;\n  box-shadow: @boxShadow;\n  border-radius: @borderRadius;\n  min-height: @minHeight;\n}\n\n.ui.menu:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.menu:last-child {\n  margin-bottom: 0rem;\n}\n\n\n/*--------------\n    Sub-Menu\n---------------*/\n\n.ui.menu .menu {\n  margin: 0em;\n}\n\n.ui.menu:not(.vertical) > .menu {\n  display: flex;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.menu:not(.vertical) .item {\n  display: flex;\n  align-items: center;\n}\n\n.ui.menu .item {\n  position: relative;\n  vertical-align: middle;\n  line-height: 1;\n  text-decoration: none;\n  -webkit-tap-highlight-color: transparent;\n  flex: 0 0 auto;\n  user-select: none;\n\n  background: @itemBackground;\n  padding: @itemVerticalPadding @itemHorizontalPadding;\n  text-transform: @itemTextTransform;\n  color: @itemTextColor;\n  font-weight: @itemFontWeight;\n  transition: @itemTransition;\n}\n\n.ui.menu > .item:first-child {\n  border-radius: @borderRadius 0px 0px @borderRadius;\n}\n\n/* Border */\n.ui.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  right: 0px;\n  height: 100%;\n\n  width: @dividerSize;\n  background: @dividerBackground;\n}\n\n/*--------------\n  Text Content\n---------------*/\n\n.ui.menu .text.item > *,\n.ui.menu .item > a:not(.ui),\n.ui.menu .item > p:only-child {\n  user-select: text;\n  line-height: @textLineHeight;\n}\n.ui.menu .item > p:first-child {\n  margin-top: 0;\n}\n.ui.menu .item > p:last-child {\n  margin-bottom: 0;\n}\n\n/*--------------\n      Icons\n---------------*/\n\n.ui.menu .item > i.icon {\n  opacity: @iconOpacity;\n  float: @iconFloat;\n  margin: @iconMargin;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.menu:not(.vertical) .item > .button {\n  position: relative;\n  top: @buttonOffset;\n  margin: @buttonMargin;\n  padding-bottom: @buttonVerticalPadding;\n  padding-top: @buttonVerticalPadding;\n  font-size: @buttonSize;\n}\n\n/*----------------\n Grid / Container\n-----------------*/\n\n.ui.menu >  .grid,\n.ui.menu > .container {\n  display: flex;\n  align-items: inherit;\n  flex-direction: inherit;\n}\n\n/*--------------\n     Inputs\n---------------*/\n\n.ui.menu .item > .input {\n  width: 100%;\n}\n.ui.menu:not(.vertical) .item > .input {\n  position: relative;\n  top: @inputOffset;\n  margin: @inputVerticalMargin 0em;\n}\n.ui.menu .item > .input input {\n  font-size: @inputSize;\n  padding-top: @inputVerticalPadding;\n  padding-bottom: @inputVerticalPadding;\n}\n\n\n/*--------------\n     Header\n---------------*/\n\n.ui.menu .header.item,\n.ui.vertical.menu .header.item {\n  margin: 0em;\n  background: @headerBackground;\n  text-transform: @headerTextTransform;\n  font-weight: @headerWeight;\n}\n\n.ui.vertical.menu .item > .header:not(.ui) {\n  margin: @verticalHeaderMargin;\n  font-size: @verticalHeaderFontSize;\n  font-weight: @verticalHeaderFontWeight;\n}\n\n/*--------------\n    Dropdowns\n---------------*/\n\n\n/* Dropdown Icon */\n.ui.menu .item > i.dropdown.icon {\n  padding: 0em;\n  float: @dropdownIconFloat;\n  margin: 0em 0em 0em @dropdownIconDistance;\n}\n\n/* Menu */\n.ui.menu .dropdown.item .menu {\n  min-width: ~\"calc(100% - 1px)\";\n  border-radius: 0em 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius;\n  background: @dropdownBackground;\n  margin: @dropdownMenuDistance 0px 0px;\n  box-shadow: @dropdownMenuBoxShadow;\n  flex-direction: column !important;\n}\n\n\n/* Menu Items */\n.ui.menu .ui.dropdown .menu > .item {\n  margin: 0;\n  text-align: left;\n  font-size: @dropdownItemFontSize !important;\n  padding: @dropdownItemPadding !important;\n  background: @dropdownItemBackground !important;\n  color: @dropdownItemColor !important;\n  text-transform: @dropdownItemTextTransform !important;\n  font-weight: @dropdownItemFontWeight !important;\n  box-shadow: @dropdownItemBoxShadow !important;\n  transition: @dropdownItemTransition !important;\n}\n.ui.menu .ui.dropdown .menu > .item:hover {\n  background: @dropdownHoveredItemBackground !important;\n  color: @dropdownHoveredItemColor !important;\n}\n.ui.menu .ui.dropdown .menu > .selected.item {\n  background: @dropdownSelectedItemBackground !important;\n  color: @dropdownSelectedItemColor !important;\n}\n.ui.menu .ui.dropdown .menu > .active.item {\n  background: @dropdownActiveItemBackground !important;\n  font-weight: @dropdownActiveItemFontWeight !important;\n  color: @dropdownActiveItemColor !important;\n}\n\n.ui.menu .ui.dropdown.item .menu .item:not(.filtered) {\n  display: block;\n}\n.ui.menu .ui.dropdown .menu > .item .icon:not(.dropdown) {\n  display: inline-block;\n  font-size: @dropdownItemIconFontSize !important;\n  float: @dropdownItemIconFloat;\n  margin: @dropdownItemIconMargin;\n}\n\n\n/* Secondary */\n.ui.secondary.menu .dropdown.item > .menu,\n.ui.text.menu .dropdown.item > .menu {\n  border-radius: @dropdownMenuBorderRadius;\n  margin-top: @secondaryDropdownMenuDistance;\n}\n\n/* Pointing */\n.ui.menu .pointing.dropdown.item .menu {\n  margin-top: @pointingDropdownMenuDistance;\n}\n\n/* Inverted */\n.ui.inverted.menu .search.dropdown.item > .search,\n.ui.inverted.menu .search.dropdown.item > .text {\n  color: @invertedSelectionDropdownColor;\n}\n\n/* Vertical */\n.ui.vertical.menu .dropdown.item > .icon {\n  float: right;\n  content: \"\\f0da\";\n  margin-left: 1em;\n}\n.ui.vertical.menu .dropdown.item .menu {\n  left: 100%;\n  min-width: 0;\n  margin: 0em 0em 0em @dropdownMenuDistance;\n  box-shadow: @dropdownVerticalMenuBoxShadow;\n  border-radius: 0em @dropdownMenuBorderRadius @dropdownMenuBorderRadius @dropdownMenuBorderRadius;\n}\n.ui.vertical.menu .dropdown.item.upward .menu {\n  bottom: 0;\n}\n.ui.vertical.menu .dropdown.item:not(.upward) .menu {\n  top: 0;\n}\n.ui.vertical.menu .active.dropdown.item {\n  border-top-right-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.vertical.menu .dropdown.active.item {\n  box-shadow: none;\n}\n\n/* Evenly Divided */\n.ui.item.menu .dropdown .menu .item {\n  width: 100%;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n.ui.menu .item > .label {\n  background: @labelBackground;\n  color: @labelTextColor;\n  margin-left: @labelTextMargin;\n  padding: @labelVerticalPadding @labelHorizontalPadding;\n}\n.ui.vertical.menu .item > .label {\n  background: @labelBackground;\n  color: @labelTextColor;\n  margin-top: @labelOffset;\n  margin-bottom: @labelOffset;\n  padding: @labelVerticalPadding @labelHorizontalPadding;\n}\n.ui.menu .item > .floating.label {\n  padding: @labelVerticalPadding @labelHorizontalPadding;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.menu .item > img:not(.ui) {\n  display: inline-block;\n  vertical-align: middle;\n  margin: @imageMargin;\n  width: @imageWidth;\n}\n.ui.vertical.menu .item > img:not(.ui):only-child {\n  display: block;\n  max-width: 100%;\n  width: @verticalImageWidth;\n}\n\n/*******************************\n          Coupling\n*******************************/\n\n/*--------------\n     Sidebar\n---------------*/\n\n/* Show vertical dividers below last */\n\n.ui.vertical.sidebar.menu > .item:first-child:before {\n  display: block !important;\n}\n.ui.vertical.sidebar.menu > .item::before {\n  top: auto;\n  bottom: 0px;\n}\n\n/*--------------\n    Container\n---------------*/\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.menu > .ui.container {\n    width: 100% !important;\n    margin-left: 0em !important;\n    margin-right: 0em !important;\n  }\n}\n@media only screen and (min-width: @tabletBreakpoint) {\n  .ui.menu:not(.secondary):not(.text):not(.tabular):not(.borderless) > .container > .item:not(.right):not(.borderless):first-child {\n    border-left: @dividerSize solid @dividerBackground;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n\n.ui.link.menu .item:hover,\n.ui.menu .dropdown.item:hover,\n.ui.menu .link.item:hover,\n.ui.menu a.item:hover {\n  cursor: pointer;\n  background: @hoverItemBackground;\n  color: @hoverItemTextColor;\n}\n\n\n/*--------------\n     Pressed\n---------------*/\n\n.ui.link.menu .item:active,\n.ui.menu .link.item:active,\n.ui.menu a.item:active {\n  background: @pressedItemBackground;\n  color: @pressedItemTextColor;\n}\n\n\n/*--------------\n     Active\n---------------*/\n\n.ui.menu .active.item  {\n  background: @activeItemBackground;\n  color: @activeItemTextColor;\n  font-weight: @activeItemFontWeight;\n  box-shadow: @activeItemBoxShadow;\n}\n.ui.menu .active.item > i.icon {\n  opacity: @activeIconOpacity;\n}\n\n/*--------------\n  Active Hover\n---------------*/\n\n.ui.menu .active.item:hover,\n.ui.vertical.menu .active.item:hover {\n  background-color: @activeHoverItemBackground;\n  color: @activeHoverItemColor;\n}\n\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.menu .item.disabled,\n.ui.menu .item.disabled:hover {\n  cursor: default;\n  background-color: transparent !important;\n  color: @disabledTextColor;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n/*------------------\nFloated Menu / Item\n-------------------*/\n\n/* Left Floated */\n.ui.menu:not(.vertical) .left.item,\n.ui.menu:not(.vertical) .left.menu {\n  display: flex;\n  margin-right: auto !important;\n}\n/* Right Floated */\n.ui.menu:not(.vertical) .right.item,\n.ui.menu:not(.vertical) .right.menu {\n  display: flex;\n  margin-left: auto !important;\n}\n\n/* Swapped Borders */\n.ui.menu .right.item::before,\n.ui.menu .right.menu > .item::before {\n  right: auto;\n  left: 0;\n}\n\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.menu {\n  display: block;\n  flex-direction: column;\n  background: @verticalBackground;\n  box-shadow: @verticalBoxShadow;\n}\n\n/*--- Item ---*/\n.ui.vertical.menu .item {\n  display: block;\n  background: @verticalItemBackground;\n  border-top: none;\n  border-right: none;\n}\n.ui.vertical.menu > .item:first-child {\n  border-radius: @borderRadius @borderRadius 0px 0px;\n}\n.ui.vertical.menu > .item:last-child {\n  border-radius: 0px 0px @borderRadius @borderRadius;\n}\n\n/*--- Label ---*/\n.ui.vertical.menu .item > .label {\n  float: right;\n  text-align: center;\n}\n\n/*--- Icon ---*/\n.ui.vertical.menu .item > i.icon {\n  width: @iconWidth;\n  float: @verticalIconFloat;\n  margin: @verticalIconMargin;\n}\n.ui.vertical.menu .item > .label + i.icon {\n  float: @labelAndIconFloat;\n  margin: @labelAndIconMargin;\n}\n\n\n/*--- Border ---*/\n.ui.vertical.menu .item:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0px;\n  width: 100%;\n  height: @dividerSize;\n  background: @verticalDividerBackground;\n}\n\n.ui.vertical.menu .item:first-child:before {\n  display: none !important;\n}\n\n\n/*--- Sub Menu ---*/\n.ui.vertical.menu .item > .menu {\n  margin: @subMenuMargin;\n}\n.ui.vertical.menu .menu .item {\n  background: none;\n  padding: @subMenuVerticalPadding @subMenuHorizontalPadding;\n  font-size: @subMenuFontSize;\n  color: @subMenuTextColor;\n}\n.ui.vertical.menu .item .menu a.item:hover,\n.ui.vertical.menu .item .menu .link.item:hover {\n  color: @darkTextColor;\n}\n.ui.vertical.menu .menu .item:before {\n  display: none;\n}\n\n/* Vertical Active */\n.ui.vertical.menu .active.item {\n  background: @activeItemBackground;\n  border-radius: 0em;\n  box-shadow: @verticalActiveBoxShadow;\n}\n.ui.vertical.menu > .active.item:first-child {\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui.vertical.menu > .active.item:last-child {\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n.ui.vertical.menu > .active.item:only-child {\n  border-radius: @borderRadius;\n}\n.ui.vertical.menu .active.item .menu .active.item {\n  border-left: none;\n}\n.ui.vertical.menu .item .menu .active.item {\n  background-color: @subMenuActiveBackground;\n  font-weight: @subMenuActiveFontWeight;\n  color: @subMenuActiveTextColor;\n}\n\n\n/*--------------\n     Tabular\n---------------*/\n\n.ui.tabular.menu {\n  border-radius: 0em;\n  box-shadow: none !important;\n  border: none;\n  background: @tabularBackground;\n  border-bottom: @tabularBorderWidth solid @tabularBorderColor;\n}\n.ui.tabular.fluid.menu {\n  width: @tabularFluidWidth !important;\n}\n.ui.tabular.menu .item {\n  background: transparent;\n  border-bottom: none;\n\n  border-left: @tabularBorderWidth solid transparent;\n  border-right: @tabularBorderWidth solid transparent;\n  border-top: @tabularOppositeBorderWidth solid transparent;\n  padding: @tabularVerticalPadding @tabularHorizontalPadding;\n  color: @tabularTextColor;\n}\n.ui.tabular.menu .item:before {\n  display: none;\n}\n\n/* Hover */\n.ui.tabular.menu .item:hover {\n  background-color: transparent;\n  color: @tabularHoveredTextColor;\n}\n\n/* Active */\n.ui.tabular.menu .active.item {\n  background: @tabularActiveBackground;\n  color: @tabularActiveColor;\n  border-top-width: @tabularBorderWidth;\n  border-color: @tabularBorderColor;\n  font-weight: @tabularActiveWeight;\n  margin-bottom: -@tabularBorderWidth;\n  box-shadow: @tabularActiveBoxShadow;\n  border-radius: @tabularBorderRadius @tabularBorderRadius 0px 0px !important;\n}\n\n/* Coupling with segment for attachment */\n.ui.tabular.menu + .attached:not(.top).segment,\n.ui.tabular.menu + .attached:not(.top).segment + .attached:not(.top).segment {\n  border-top: none;\n  margin-left: 0px;\n  margin-top: 0px;\n  margin-right: 0px;\n  width: 100%;\n}\n.top.attached.segment + .ui.bottom.tabular.menu {\n  position: relative;\n  width: @tabularFluidWidth;\n  left: -@tabularFluidOffset;\n}\n\n/* Bottom Vertical Tabular */\n.ui.bottom.tabular.menu {\n  background: @tabularBackground;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-top: @tabularBorderWidth solid @tabularBorderColor;\n}\n.ui.bottom.tabular.menu .item {\n  background: none;\n  border-left: @tabularBorderWidth solid transparent;\n  border-right: @tabularBorderWidth solid transparent;\n  border-bottom: @tabularBorderWidth solid transparent;\n  border-top: none;\n}\n.ui.bottom.tabular.menu .active.item {\n  background: @tabularActiveBackground;\n  color: @tabularActiveColor;\n  border-color: @tabularBorderColor;\n  margin: -@tabularBorderWidth 0px 0px 0px;\n  border-radius: 0px 0px @tabularBorderRadius @tabularBorderRadius !important;\n}\n\n/* Vertical Tabular (Left) */\n.ui.vertical.tabular.menu {\n  background: @tabularVerticalBackground;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: @tabularBorderWidth solid @tabularBorderColor;\n}\n.ui.vertical.tabular.menu .item {\n  background: none;\n  border-left: @tabularBorderWidth solid transparent;\n  border-bottom: @tabularBorderWidth solid transparent;\n  border-top: @tabularBorderWidth solid transparent;\n  border-right: none;\n}\n.ui.vertical.tabular.menu .active.item {\n  background: @tabularActiveBackground;\n  color: @tabularActiveColor;\n  border-color: @tabularBorderColor;\n  margin: 0px -@tabularBorderWidth 0px 0px;\n  border-radius: @tabularBorderRadius 0px 0px @tabularBorderRadius !important;\n}\n\n/* Vertical Right Tabular */\n.ui.vertical.right.tabular.menu {\n  background: @tabularVerticalBackground;\n  border-radius: 0em;\n  box-shadow: none !important;\n  border-bottom: none;\n  border-right: none;\n  border-left: @tabularBorderWidth solid @tabularBorderColor;\n}\n.ui.vertical.right.tabular.menu .item {\n  background: none;\n  border-right: @tabularBorderWidth solid transparent;\n  border-bottom: @tabularBorderWidth solid transparent;\n  border-top: @tabularBorderWidth solid transparent;\n  border-left: none;\n}\n.ui.vertical.right.tabular.menu .active.item {\n  background: @tabularActiveBackground;\n  color: @tabularActiveColor;\n  border-color: @tabularBorderColor;\n  margin: 0px 0px 0px -@tabularBorderWidth;\n  border-radius: 0px @tabularBorderRadius @tabularBorderRadius 0px !important;\n}\n\n/* Dropdown */\n.ui.tabular.menu .active.dropdown.item {\n  margin-bottom: 0px;\n  border-left: @tabularBorderWidth solid transparent;\n  border-right: @tabularBorderWidth solid transparent;\n  border-top: @tabularOppositeBorderWidth solid transparent;\n  border-bottom: none;\n}\n\n\n\n/*--------------\n   Pagination\n---------------*/\n\n.ui.pagination.menu {\n  margin: 0em;\n  display: inline-flex;\n  vertical-align: middle;\n}\n.ui.pagination.menu .item:last-child {\n  border-radius: 0em @borderRadius @borderRadius 0em;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em @borderRadius @borderRadius 0em;\n}\n.ui.pagination.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.pagination.menu .item {\n  min-width: @paginationMinWidth;\n  text-align: center;\n}\n.ui.pagination.menu .icon.item i.icon {\n  vertical-align: top;\n}\n\n/* Active */\n.ui.pagination.menu .active.item {\n  border-top: none;\n  padding-top: @itemVerticalPadding;\n  background-color: @paginationActiveBackground;\n  color: @paginationActiveTextColor;\n  box-shadow: none;\n}\n\n/*--------------\n   Secondary\n---------------*/\n\n.ui.secondary.menu {\n  background: @secondaryBackground;\n  margin-left: -@secondaryItemSpacing;\n  margin-right: -@secondaryItemSpacing;\n  border-radius: 0em;\n  border: none;\n  box-shadow: none;\n}\n\n/* Item */\n.ui.secondary.menu .item {\n  align-self: center;\n  box-shadow: none;\n  border: none;\n  padding: @secondaryItemPadding;\n  margin: @secondaryItemMargin;\n  background: @secondaryItemBackground;\n  transition: @secondaryItemTransition;\n  border-radius: @secondaryItemBorderRadius;\n}\n\n/* No Divider */\n.ui.secondary.menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.secondary.menu .header.item {\n  border-radius: 0em;\n  border-right: @secondaryHeaderBorder;\n  background: @secondaryHeaderBackground;\n}\n\n/* Image */\n.ui.secondary.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/* Hover */\n.ui.secondary.menu .dropdown.item:hover,\n.ui.secondary.menu .link.item:hover,\n.ui.secondary.menu a.item:hover {\n  background: @secondaryHoverItemBackground;\n  color: @secondaryHoverItemColor;\n}\n\n/* Active */\n.ui.secondary.menu .active.item {\n  box-shadow: none;\n  background: @secondaryActiveItemBackground;\n  color: @secondaryActiveItemColor;\n  border-radius: @secondaryItemBorderRadius;\n}\n\n/* Active Hover */\n.ui.secondary.menu .active.item:hover {\n  box-shadow: none;\n  background: @secondaryActiveHoverItemBackground;\n  color: @secondaryActiveHoverItemColor;\n}\n\n\n/* Inverted */\n.ui.secondary.inverted.menu .link.item,\n.ui.secondary.inverted.menu a.item {\n  color: @secondaryInvertedColor !important;\n}\n.ui.secondary.inverted.menu .dropdown.item:hover,\n.ui.secondary.inverted.menu .link.item:hover,\n.ui.secondary.inverted.menu a.item:hover {\n  background: @secondaryInvertedHoverBackground;\n  color: @secondaryInvertedHoverColor !important;\n}\n.ui.secondary.inverted.menu .active.item {\n  background: @secondaryInvertedActiveBackground;\n  color: @secondaryInvertedActiveColor !important;\n}\n\n/* Fix item margins */\n.ui.secondary.item.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n.ui.secondary.item.menu .item:last-child {\n  margin-right: 0em;\n}\n.ui.secondary.attached.menu {\n  box-shadow: none;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu {\n  margin: @secondaryMenuSubMenuMargin;\n}\n.ui.vertical.secondary.menu .item:not(.dropdown) > .menu > .item {\n  margin: @secondaryMenuSubMenuItemMargin;\n  padding: @secondaryMenuSubMenuItemPadding;\n}\n\n\n/*---------------------\n   Secondary Vertical\n-----------------------*/\n\n.ui.secondary.vertical.menu > .item {\n  border: none;\n  margin: @secondaryVerticalItemMargin;\n  border-radius: @secondaryVerticalItemBorderRadius !important;\n}\n.ui.secondary.vertical.menu > .header.item {\n  border-radius: 0em;\n}\n\n/* Sub Menu */\n.ui.vertical.secondary.menu .item > .menu .item {\n  background-color: transparent;\n}\n\n/* Inverted */\n.ui.secondary.inverted.menu {\n  background-color: transparent;\n}\n\n/*---------------------\n   Secondary Pointing\n-----------------------*/\n\n.ui.secondary.pointing.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n  border-bottom: @secondaryPointingBorderWidth solid @secondaryPointingBorderColor;\n}\n\n.ui.secondary.pointing.menu .item {\n  border-bottom-color: transparent;\n  border-bottom-style: solid;\n  border-radius: 0em;\n  align-self: flex-end;\n\n  margin: 0em 0em -@secondaryPointingBorderWidth;\n  padding: @secondaryPointingItemVerticalPadding @secondaryPointingItemHorizontalPadding;\n  border-bottom-width: @secondaryPointingBorderWidth;\n  transition: @secondaryItemTransition;\n}\n\n/* Item Types */\n.ui.secondary.pointing.menu .header.item {\n  color: @secondaryPointingHeaderColor !important;\n}\n.ui.secondary.pointing.menu .text.item {\n  box-shadow: none !important;\n}\n.ui.secondary.pointing.menu .item:after {\n  display: none;\n}\n\n/* Hover */\n.ui.secondary.pointing.menu .dropdown.item:hover,\n.ui.secondary.pointing.menu .link.item:hover,\n.ui.secondary.pointing.menu a.item:hover {\n  background-color: transparent;\n  color: @secondaryPointingHoverTextColor;\n}\n\n/* Pressed */\n.ui.secondary.pointing.menu .dropdown.item:active,\n.ui.secondary.pointing.menu .link.item:active,\n.ui.secondary.pointing.menu a.item:active {\n  background-color: transparent;\n  border-color: @secondaryPointingBorderColor;\n}\n\n/* Active */\n.ui.secondary.pointing.menu .active.item {\n  background-color: transparent;\n  box-shadow: none;\n  border-color: @secondaryPointingActiveBorderColor;\n  font-weight: @secondaryPointingActiveFontWeight;\n  color: @secondaryPointingActiveTextColor;\n}\n\n/* Active Hover */\n.ui.secondary.pointing.menu .active.item:hover {\n  border-color: @secondaryPointingActiveHoverBorderColor;\n  color: @secondaryPointingActiveHoverTextColor;\n}\n\n/* Active Dropdown */\n.ui.secondary.pointing.menu .active.dropdown.item {\n  border-color: @secondaryPointingActiveDropdownBorderColor;\n}\n\n/* Vertical Pointing */\n.ui.secondary.vertical.pointing.menu {\n  border-bottom-width: 0px;\n  border-right-width: @secondaryPointingBorderWidth;\n  border-right-style: solid;\n  border-right-color: @secondaryPointingBorderColor;\n}\n.ui.secondary.vertical.pointing.menu .item {\n  border-bottom: none;\n  border-right-style: solid;\n  border-right-color: transparent;\n  border-radius: 0em !important;\n  margin: @secondaryVerticalPointingItemMargin;\n  border-right-width: @secondaryPointingBorderWidth;\n}\n\n/* Vertical Active */\n.ui.secondary.vertical.pointing.menu .active.item {\n  border-color: @secondaryPointingActiveBorderColor;\n}\n\n/* Inverted */\n.ui.secondary.inverted.pointing.menu {\n  border-color: @secondaryPointingInvertedBorderColor;\n}\n\n.ui.secondary.inverted.pointing.menu {\n  border-width: @secondaryPointingBorderWidth;\n  border-color: @secondaryPointingBorderColor;\n}\n.ui.secondary.inverted.pointing.menu .item {\n  color: @secondaryPointingInvertedItemTextColor;\n}\n.ui.secondary.inverted.pointing.menu .header.item {\n  color: @secondaryPointingInvertedItemHeaderColor !important;\n}\n\n/* Hover */\n.ui.secondary.inverted.pointing.menu .link.item:hover,\n.ui.secondary.inverted.pointing.menu a.item:hover {\n  color: @secondaryPointingInvertedItemHoverTextColor;\n}\n\n\n/* Active */\n.ui.secondary.inverted.pointing.menu .active.item {\n  border-color: @secondaryPointingInvertedActiveBorderColor;\n  color: @secondaryPointingInvertedActiveColor;\n}\n\n/*--------------\n    Text Menu\n---------------*/\n\n.ui.text.menu {\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n\n  margin: @textMenuMargin;\n}\n.ui.text.menu .item {\n  border-radius: 0px;\n  box-shadow: none;\n  align-self: center;\n  margin: @textMenuItemMargin;\n  padding: @textMenuItemPadding;\n  font-weight: @textMenuItemFontWeight;\n  color: @textMenuItemColor;\n  transition: @textMenuItemTransition;\n}\n\n/* Border */\n.ui.text.menu .item:before,\n.ui.text.menu .menu .item:before {\n  display: none !important;\n}\n\n/* Header */\n.ui.text.menu .header.item {\n  background-color: transparent;\n  opacity: 1;\n  color: @textMenuHeaderColor;\n  font-size: @textMenuHeaderSize;\n  text-transform: @textMenuHeaderTextTransform;\n  font-weight: @textMenuHeaderFontWeight;\n}\n\n/* Image */\n.ui.text.menu .item > img:not(.ui) {\n  margin: 0em;\n}\n\n/*--- fluid text ---*/\n.ui.text.item.menu .item {\n  margin: 0em;\n}\n\n/*--- vertical text ---*/\n.ui.vertical.text.menu {\n  margin: @textVerticalMenuMargin;\n}\n.ui.vertical.text.menu:first-child {\n  margin-top: 0rem;\n}\n.ui.vertical.text.menu:last-child {\n  margin-bottom: 0rem;\n}\n.ui.vertical.text.menu .item {\n  margin: @textVerticalMenuItemMargin;\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.vertical.text.menu .item > i.icon {\n  float: @textVerticalMenuIconFloat;\n  margin: @iconMargin;\n}\n.ui.vertical.text.menu .header.item {\n  margin: @textVerticalMenuHeaderMargin;\n}\n\n/* Vertical Sub Menu */\n.ui.vertical.text.menu .item:not(.dropdown) > .menu {\n  margin: @textMenuSubMenuMargin;\n}\n.ui.vertical.text.menu .item:not(.dropdown) > .menu > .item {\n  margin: @textMenuSubMenuItemMargin;\n  padding: @textMenuSubMenuItemPadding;\n}\n\n/*--- hover ---*/\n.ui.text.menu .item:hover {\n  opacity: 1;\n  background-color: transparent;\n}\n\n/*--- active ---*/\n.ui.text.menu .active.item {\n  background-color: transparent;\n  border: none;\n  box-shadow: none;\n  font-weight: @textMenuActiveItemFontWeight;\n  color: @textMenuActiveItemColor;\n}\n\n/*--- active hover ---*/\n.ui.text.menu .active.item:hover {\n  background-color: transparent;\n}\n\n/* Disable Bariations */\n.ui.text.pointing.menu .active.item:after {\n  box-shadow: none;\n}\n.ui.text.attached.menu {\n  box-shadow: none;\n}\n\n/* Inverted */\n.ui.inverted.text.menu,\n.ui.inverted.text.menu .item,\n.ui.inverted.text.menu .item:hover,\n.ui.inverted.text.menu .active.item {\n  background-color: transparent !important;\n}\n\n/* Fluid */\n.ui.fluid.text.menu {\n  margin-left: 0em;\n  margin-right: 0em;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n/* Vertical Menu */\n.ui.vertical.icon.menu {\n  display: inline-block;\n  width: auto;\n}\n\n/* Item */\n.ui.icon.menu .item {\n  height: auto;\n  text-align: @iconMenuTextAlign;\n  color: @iconMenuItemColor;\n}\n\n/* Icon */\n.ui.icon.menu .item > .icon:not(.dropdown) {\n  margin: 0;\n  opacity: 1;\n}\n\n/* Icon Gylph */\n.ui.icon.menu .icon:before {\n  opacity: 1;\n}\n\n/* (x) Item Icon */\n.ui.menu .icon.item > .icon {\n  width: auto;\n  margin: 0em auto;\n}\n\n/* Vertical Icon */\n.ui.vertical.icon.menu .item > .icon:not(.dropdown) {\n  display: block;\n  opacity: 1;\n  margin: 0em auto;\n  float: none;\n}\n\n/* Inverted */\n.ui.inverted.icon.menu .item {\n  color: @iconMenuInvertedItemColor;\n}\n\n/*--------------\n   Labeled Icon\n---------------*/\n\n/* Menu */\n.ui.labeled.icon.menu {\n  text-align: center;\n}\n\n/* Item */\n.ui.labeled.icon.menu  .item {\n  min-width: @labeledIconMinWidth;\n  flex-direction: column;\n}\n\n/* Icon */\n.ui.labeled.icon.menu .item > .icon:not(.dropdown) {\n  height: 1em;\n  display: block;\n  font-size: @labeledIconSize !important;\n  margin: 0em auto @labeledIconTextMargin !important;\n}\n\n/* Fluid */\n.ui.fluid.labeled.icon.menu > .item {\n  min-width: 0em;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.stackable.menu {\n    flex-direction: column;\n  }\n  .ui.stackable.menu .item {\n    width: 100% !important;\n  }\n  .ui.stackable.menu .item:before {\n    position: absolute;\n    content: '';\n    top: auto;\n    bottom: 0px;\n    left: 0px;\n    width: 100%;\n    height: @dividerSize;\n    background: @verticalDividerBackground;\n  }\n\n  .ui.stackable.menu .left.menu,\n  .ui.stackable.menu .left.item {\n    margin-right: 0 !important;\n  }\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .right.item {\n    margin-left: 0 !important;\n  }\n\n  .ui.stackable.menu .right.menu,\n  .ui.stackable.menu .left.menu {\n    flex-direction: column;\n  }\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/*--- Standard Colors  ---*/\n.ui.menu .red.active.item,\n.ui.red.menu .active.item {\n  border-color: @red !important;\n  color: @red !important;\n}\n.ui.menu .orange.active.item,\n.ui.orange.menu .active.item {\n  border-color: @orange !important;\n  color: @orange !important;\n}\n.ui.menu .yellow.active.item,\n.ui.yellow.menu .active.item {\n  border-color: @yellow !important;\n  color: @yellow !important;\n}\n.ui.menu .olive.active.item,\n.ui.olive.menu .active.item {\n  border-color: @olive !important;\n  color: @olive !important;\n}\n.ui.menu .green.active.item,\n.ui.green.menu .active.item {\n  border-color: @green !important;\n  color: @green !important;\n}\n.ui.menu .teal.active.item,\n.ui.teal.menu .active.item {\n  border-color: @teal !important;\n  color: @teal !important;\n}\n.ui.menu .blue.active.item,\n.ui.blue.menu .active.item {\n  border-color: @blue !important;\n  color: @blue !important;\n}\n.ui.menu .violet.active.item,\n.ui.violet.menu .active.item {\n  border-color: @violet !important;\n  color: @violet !important;\n}\n.ui.menu .purple.active.item,\n.ui.purple.menu .active.item {\n  border-color: @purple !important;\n  color: @purple !important;\n}\n.ui.menu .pink.active.item,\n.ui.pink.menu .active.item {\n  border-color: @pink !important;\n  color: @pink !important;\n}\n.ui.menu .brown.active.item,\n.ui.brown.menu .active.item {\n  border-color: @brown !important;\n  color: @brown !important;\n}\n.ui.menu .grey.active.item,\n.ui.grey.menu .active.item {\n  border-color: @grey !important;\n  color: @grey !important;\n}\n\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.menu {\n  border: @invertedBorder;\n  background: @invertedBackground;\n  box-shadow: @invertedBoxShadow;\n}\n\n/* Menu Item */\n.ui.inverted.menu .item,\n.ui.inverted.menu .item > a:not(.ui) {\n  background: @invertedItemBackground;\n  color: @invertedItemTextColor;\n}\n.ui.inverted.menu .item.menu {\n  background: @invertedSubMenuBackground;\n}\n\n/*--- Border ---*/\n.ui.inverted.menu .item:before {\n  background: @invertedDividerBackground;\n}\n.ui.vertical.inverted.menu .item:before {\n  background: @invertedVerticalDividerBackground;\n}\n\n/* Sub Menu */\n.ui.vertical.inverted.menu .menu .item,\n.ui.vertical.inverted.menu .menu .item a:not(.ui) {\n  color: @invertedSubMenuColor;\n}\n\n/* Header */\n.ui.inverted.menu .header.item {\n  margin: 0em;\n  background: @invertedHeaderBackground;\n  box-shadow: none;\n}\n\n/* Disabled */\n.ui.inverted.menu .item.disabled,\n.ui.inverted.menu .item.disabled:hover {\n  color: @invertedDisabledTextColor;\n}\n\n/*--- Hover ---*/\n.ui.link.inverted.menu .item:hover,\n.ui.inverted.menu .dropdown.item:hover,\n.ui.inverted.menu .link.item:hover,\n.ui.inverted.menu a.item:hover {\n  background: @invertedHoverBackground;\n  color: @invertedHoverColor;\n}\n.ui.vertical.inverted.menu .item .menu a.item:hover,\n.ui.vertical.inverted.menu .item .menu .link.item:hover {\n  background: @invertedSubMenuBackground;\n  color: @invertedSubMenuHoverColor;\n}\n\n/*--- Pressed ---*/\n.ui.inverted.menu a.item:active,\n.ui.inverted.menu .link.item:active{\n  background: @invertedMenuPressedBackground;\n  color: @invertedMenuPressedColor;\n}\n\n/*--- Active ---*/\n.ui.inverted.menu .active.item {\n  background: @invertedActiveBackground;\n  color: @invertedActiveColor !important;\n}\n.ui.inverted.vertical.menu .item .menu .active.item {\n  background: @invertedSubMenuActiveBackground;\n  color: @invertedSubMenuActiveColor;\n}\n.ui.inverted.pointing.menu .active.item:after {\n  background: @invertedArrowActiveColor !important;\n  margin: 0em !important;\n  box-shadow: none !important;\n  border: none !important;\n}\n\n/*--- Active Hover ---*/\n.ui.inverted.menu .active.item:hover {\n  background: @invertedActiveHoverBackground;\n  color: @invertedActiveHoverColor !important;\n}\n.ui.inverted.pointing.menu .active.item:hover:after {\n  background: @invertedArrowActiveHoverColor !important;\n}\n\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.floated.menu {\n  float: left;\n  margin: 0rem @floatedDistance 0rem 0rem;\n}\n.ui.floated.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.right.floated.menu {\n  float: right;\n  margin: 0rem 0rem 0rem @floatedDistance;\n}\n\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Red */\n.ui.inverted.menu .red.active.item,\n.ui.inverted.red.menu {\n  background-color: @red;\n}\n.ui.inverted.red.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.red.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Orange */\n.ui.inverted.menu .orange.active.item,\n.ui.inverted.orange.menu {\n  background-color: @orange;\n}\n.ui.inverted.orange.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.orange.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Yellow */\n.ui.inverted.menu .yellow.active.item,\n.ui.inverted.yellow.menu {\n  background-color: @yellow;\n}\n.ui.inverted.yellow.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.yellow.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Olive */\n.ui.inverted.menu .olive.active.item,\n.ui.inverted.olive.menu {\n  background-color: @olive;\n}\n.ui.inverted.olive.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.olive.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Green */\n.ui.inverted.menu .green.active.item,\n.ui.inverted.green.menu {\n  background-color: @green;\n}\n.ui.inverted.green.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.green.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Teal */\n.ui.inverted.menu .teal.active.item,\n.ui.inverted.teal.menu {\n  background-color: @teal;\n}\n.ui.inverted.teal.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.teal.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Blue */\n.ui.inverted.menu .blue.active.item,\n.ui.inverted.blue.menu {\n  background-color: @blue;\n}\n.ui.inverted.blue.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.blue.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Violet */\n.ui.inverted.menu .violet.active.item,\n.ui.inverted.violet.menu {\n  background-color: @violet;\n}\n.ui.inverted.violet.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.violet.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Purple */\n.ui.inverted.menu .purple.active.item,\n.ui.inverted.purple.menu {\n  background-color: @purple;\n}\n.ui.inverted.purple.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.purple.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Pink */\n.ui.inverted.menu .pink.active.item,\n.ui.inverted.pink.menu {\n  background-color: @pink;\n}\n.ui.inverted.pink.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.pink.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Brown */\n.ui.inverted.menu .brown.active.item,\n.ui.inverted.brown.menu {\n  background-color: @brown;\n}\n.ui.inverted.brown.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.brown.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n/* Grey */\n.ui.inverted.menu .grey.active.item,\n.ui.inverted.grey.menu {\n  background-color: @grey;\n}\n.ui.inverted.grey.menu .item:before {\n  background-color: @invertedColoredDividerBackground;\n}\n.ui.inverted.grey.menu .active.item {\n  background-color: @invertedColoredActiveBackground !important;\n}\n\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.menu .item,\n.ui.fitted.menu .item .menu .item,\n.ui.menu .fitted.item {\n  padding: 0em;\n}\n.ui.horizontally.fitted.menu .item,\n.ui.horizontally.fitted.menu .item .menu .item,\n.ui.menu .horizontally.fitted.item {\n  padding-top: @itemVerticalPadding;\n  padding-bottom: @itemVerticalPadding;\n}\n.ui.vertically.fitted.menu .item,\n.ui.vertically.fitted.menu .item .menu .item,\n.ui.menu .vertically.fitted.item {\n  padding-left: @itemHorizontalPadding;\n  padding-right: @itemHorizontalPadding;\n}\n\n/*--------------\n   Borderless\n---------------*/\n\n.ui.borderless.menu .item:before,\n.ui.borderless.menu .item .menu .item:before,\n.ui.menu .borderless.item:before {\n  background: none !important;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.menu {\n  display: inline-flex;\n  margin: 0em;\n  vertical-align: middle;\n}\n.ui.compact.vertical.menu {\n  display: inline-block;\n}\n.ui.compact.menu .item:last-child {\n  border-radius: 0em @borderRadius @borderRadius 0em;\n}\n.ui.compact.menu .item:last-child:before {\n  display: none;\n}\n.ui.compact.vertical.menu {\n  width: auto !important;\n}\n.ui.compact.vertical.menu .item:last-child::before {\n  display: block;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.menu.fluid,\n.ui.vertical.menu.fluid {\n  width: 100% !important;\n}\n\n\n/*-------------------\n      Evenly Sized\n--------------------*/\n\n.ui.item.menu,\n.ui.item.menu .item {\n  width: 100%;\n  padding-left: 0em !important;\n  padding-right: 0em !important;\n  margin-left: 0em !important;\n  margin-right: 0em !important;\n  text-align: center;\n  justify-content: center;\n}\n.ui.attached.item.menu {\n  margin: 0em @attachedHorizontalOffset !important;\n}\n\n.ui.item.menu .item:last-child:before {\n  display: none;\n}\n\n.ui.menu.two.item .item {\n  width: 50%;\n}\n.ui.menu.three.item .item {\n  width: 33.333%;\n}\n.ui.menu.four.item .item {\n  width: 25%;\n}\n.ui.menu.five.item .item {\n  width: 20%;\n}\n.ui.menu.six.item .item {\n  width: 16.666%;\n}\n.ui.menu.seven.item .item {\n  width: 14.285%;\n}\n.ui.menu.eight.item .item {\n  width: 12.500%;\n}\n.ui.menu.nine.item .item {\n  width: 11.11%;\n}\n.ui.menu.ten.item .item {\n  width: 10.0%;\n}\n.ui.menu.eleven.item .item {\n  width: 9.09%;\n}\n.ui.menu.twelve.item .item {\n  width: 8.333%;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.menu.fixed {\n  position: fixed;\n  z-index: 101;\n  margin: 0em;\n  width: 100%;\n}\n.ui.menu.fixed,\n.ui.menu.fixed .item:first-child,\n.ui.menu.fixed .item:last-child {\n  border-radius: 0px !important;\n}\n\n.ui.fixed.menu,\n.ui[class*=\"top fixed\"].menu {\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n}\n.ui[class*=\"top fixed\"].menu {\n  border-top: none;\n  border-left: none;\n  border-right: none;\n}\n.ui[class*=\"right fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-right: none;\n  top: 0px;\n  right: 0px;\n  left: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n.ui[class*=\"bottom fixed\"].menu {\n  border-bottom: none;\n  border-left: none;\n  border-right: none;\n  bottom: 0px;\n  left: 0px;\n  top: auto;\n  right: auto;\n}\n.ui[class*=\"left fixed\"].menu {\n  border-top: none;\n  border-bottom: none;\n  border-left: none;\n  top: 0px;\n  left: 0px;\n  right: auto;\n  bottom: auto;\n  width: auto;\n  height: 100%;\n}\n\n/* Coupling with Grid */\n.ui.fixed.menu + .ui.grid {\n  padding-top: @fixedPrecedingGridMargin;\n}\n\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.menu .item:after {\n  visibility: hidden;\n  position: absolute;\n  content: '';\n  top: 100%;\n  left: 50%;\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  background: none;\n\n  margin: (@arrowBorderWidth / 2) 0em 0em;\n  width: @arrowSize;\n  height: @arrowSize;\n\n  border: none;\n  border-bottom: @arrowBorder;\n  border-right: @arrowBorder;\n\n  z-index: @arrowZIndex;\n  transition: @arrowTransition;\n}\n.ui.vertical.pointing.menu .item:after {\n  position: absolute;\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  margin: 0em -(@arrowBorderWidth / 2) 0em 0em;\n\n  border: none;\n  border-top: @arrowBorder;\n  border-right: @arrowBorder;\n}\n\n/* Active */\n.ui.pointing.menu .active.item:after {\n  visibility: visible;\n}\n.ui.pointing.menu .active.dropdown.item:after {\n  visibility: hidden;\n}\n\n/* Don't double up pointers */\n.ui.pointing.menu .dropdown.active.item:after,\n.ui.pointing.menu .active.item .menu .active.item:after {\n  display: none;\n}\n\n/* Colors */\n.ui.pointing.menu .active.item:hover:after {\n  background-color: @arrowHoverColor;\n}\n.ui.pointing.menu .active.item:after {\n  background-color: @arrowActiveColor;\n}\n.ui.pointing.menu .active.item:hover:after {\n  background-color: @arrowActiveHoverColor;\n}\n\n.ui.vertical.pointing.menu .active.item:hover:after {\n  background-color: @arrowVerticalHoverColor;\n}\n.ui.vertical.pointing.menu .active.item:after {\n  background-color: @arrowVerticalActiveColor;\n}\n.ui.vertical.pointing.menu .menu .active.item:after {\n  background-color: @arrowVerticalSubMenuColor;\n}\n\n\n\n/*--------------\n    Attached\n---------------*/\n\n/* Middle */\n.ui.attached.menu {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em @attachedHorizontalOffset;\n  width: @attachedWidth;\n  max-width: @attachedWidth;\n  box-shadow: @attachedBoxShadow;\n}\n.ui.attached + .ui.attached.menu:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].menu {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: @attachedTopOffset;\n  margin-top: @verticalMargin;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui.menu[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].menu {\n  bottom: 0px;\n  margin-top: 0em;\n  top: @attachedBottomOffset;\n  margin-bottom: @verticalMargin;\n  box-shadow: @attachedBottomBoxShadow;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n.ui[class*=\"bottom attached\"].menu:last-child {\n  margin-bottom: 0em;\n}\n\n/* Attached Menu Item */\n.ui.top.attached.menu > .item:first-child {\n  border-radius: @borderRadius 0em 0em 0em;\n}\n.ui.bottom.attached.menu > .item:first-child {\n  border-radius: 0em 0em 0em @borderRadius;\n}\n\n/* Tabular Attached */\n.ui.attached.menu:not(.tabular) {\n  border: @attachedBorder;\n}\n.ui.attached.inverted.menu {\n  border: none;\n}\n.ui.attached.tabular.menu {\n  margin-left: 0;\n  margin-right: 0;\n  width: 100%;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n/* Mini */\n.ui.mini.menu {\n  font-size: @mini;\n}\n.ui.mini.vertical.menu {\n  width: @miniWidth;\n}\n\n/* Tiny */\n.ui.tiny.menu {\n  font-size: @tiny;\n}\n.ui.tiny.vertical.menu {\n  width: @tinyWidth;\n}\n\n/* Small */\n.ui.small.menu {\n  font-size: @small;\n}\n.ui.small.vertical.menu {\n  width: @smallWidth;\n}\n\n/* Medium */\n.ui.menu {\n  font-size: @medium;\n}\n.ui.vertical.menu {\n  width: @mediumWidth;\n}\n\n/* Large */\n.ui.large.menu {\n  font-size: @large;\n}\n.ui.large.vertical.menu {\n  width: @largeWidth;\n}\n\n/* Huge */\n.ui.huge.menu {\n  font-size: @huge;\n}\n.ui.huge.vertical.menu {\n  width: @hugeWidth;\n}\n\n/* Big */\n.ui.big.menu {\n  font-size: @big;\n}\n.ui.big.vertical.menu {\n  width: @bigWidth;\n}\n\n/* Massive */\n.ui.massive.menu {\n  font-size: @massive;\n}\n.ui.massive.vertical.menu {\n  width: @massiveWidth;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/message.less",
    "content": "/*!\n * # Semantic UI - Message\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'message';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Message\n*******************************/\n\n.ui.message {\n  position: relative;\n  min-height: 1em;\n  margin: @verticalMargin 0em;\n  background: @background;\n  padding: @padding;\n  line-height: @lineHeight;\n  color: @textColor;\n  transition: @transition;\n  border-radius: @borderRadius;\n  box-shadow: @boxShadow;\n}\n\n.ui.message:first-child {\n  margin-top: 0em;\n}\n.ui.message:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*--------------\n     Content\n---------------*/\n\n/* Header */\n.ui.message .header {\n  display: @headerDisplay;\n  font-family: @headerFont;\n  font-weight: @headerFontWeight;\n  margin: @headerMargin;\n}\n\n/* Default font size */\n.ui.message .header:not(.ui) {\n  font-size: @headerFontSize;\n}\n\n/* Paragraph */\n.ui.message p {\n  opacity: @messageTextOpacity;\n  margin: @messageParagraphMargin 0em;\n}\n.ui.message p:first-child {\n  margin-top: 0em;\n}\n.ui.message p:last-child {\n  margin-bottom: 0em;\n}\n.ui.message .header + p {\n  margin-top: @headerParagraphDistance;\n}\n\n/* List */\n.ui.message .list:not(.ui) {\n  text-align: left;\n  padding: 0em;\n  opacity: @listOpacity;\n  list-style-position: @listStylePosition;\n  margin: @listMargin 0em 0em;\n}\n.ui.message .list:not(.ui):first-child {\n  margin-top: 0em;\n}\n.ui.message .list:not(.ui):last-child {\n  margin-bottom: 0em;\n}\n.ui.message .list:not(.ui) li {\n  position: relative;\n  list-style-type: none;\n  margin: 0em 0em @listItemMargin @listItemIndent;\n  padding: 0em;\n}\n.ui.message .list:not(.ui) li:before {\n  position: absolute;\n  content: '•';\n  left: -1em;\n  height: 100%;\n  vertical-align: baseline;\n}\n.ui.message .list:not(.ui) li:last-child {\n  margin-bottom: 0em;\n}\n\n\n/* Icon */\n.ui.message > .icon {\n  margin-right: @iconDistance;\n}\n\n/* Close Icon */\n.ui.message > .close.icon {\n  cursor: pointer;\n  position: absolute;\n  margin: 0em;\n  top: @closeTopDistance;\n  right: @closeRightDistance;\n  opacity: @closeOpacity;\n  transition: @closeTransition;\n}\n.ui.message > .close.icon:hover {\n  opacity: 1;\n}\n\n/* First / Last Element */\n.ui.message > :first-child {\n  margin-top: 0em;\n}\n.ui.message > :last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.dropdown .menu > .message {\n  margin: 0px -@borderWidth;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Visible\n---------------*/\n\n.ui.visible.visible.visible.visible.message {\n  display: block;\n}\n\n.ui.icon.visible.visible.visible.visible.message {\n  display: flex;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n.ui.hidden.hidden.hidden.hidden.message {\n  display: none;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n    Compact\n---------------*/\n\n.ui.compact.message {\n  display: inline-block;\n}\n.ui.compact.icon.message {\n  display: inline-flex;\n}\n\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.message {\n  margin-bottom: @attachedYOffset;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n  box-shadow: @attachedBoxShadow;\n  margin-left: @attachedXOffset;\n  margin-right: @attachedXOffset;\n}\n.ui.attached + .ui.attached.message:not(.top):not(.bottom) {\n  margin-top: @attachedYOffset;\n  border-radius: 0em;\n}\n.ui.bottom.attached.message {\n  margin-top: @attachedYOffset;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n  box-shadow: @attachedBottomBoxShadow;\n}\n.ui.bottom.attached.message:not(:last-child) {\n  margin-bottom: @verticalMargin;\n}\n.ui.attached.icon.message {\n  width: auto;\n}\n\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.icon.message {\n  display: flex;\n  width: 100%;\n  align-items: center;\n}\n.ui.icon.message > .icon:not(.close) {\n  display: block;\n  flex: 0 0 auto;\n  width: auto;\n  line-height: 1;\n  vertical-align: @iconVerticalAlign;\n  font-size: @iconSize;\n  opacity: @iconOpacity;\n}\n.ui.icon.message > .content {\n  display: block;\n  flex: 1 1 auto;\n  vertical-align: @iconVerticalAlign;\n}\n\n\n.ui.icon.message .icon:not(.close) + .content {\n  padding-left: @iconContentDistance;\n}\n.ui.icon.message .circular.icon {\n  width: 1em;\n}\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.message {\n  box-shadow: @floatingBoxShadow;\n}\n\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.black.message {\n  background-color: @black;\n  color: @invertedTextColor;\n}\n\n/*--------------\n     Types\n---------------*/\n\n/* Positive */\n.ui.positive.message {\n  background-color: @positiveBackgroundColor;\n  color: @positiveTextColor;\n}\n.ui.positive.message,\n.ui.attached.positive.message {\n  box-shadow: @positiveBoxShadow;\n}\n.ui.positive.message .header {\n  color: @positiveHeaderColor;\n}\n\n/* Negative */\n.ui.negative.message {\n  background-color: @negativeBackgroundColor;\n  color: @negativeTextColor;\n}\n.ui.negative.message,\n.ui.attached.negative.message {\n  box-shadow: @negativeBoxShadow;\n}\n.ui.negative.message .header {\n  color: @negativeHeaderColor;\n}\n\n/* Info */\n.ui.info.message {\n  background-color: @infoBackgroundColor;\n  color: @infoTextColor;\n}\n.ui.info.message,\n.ui.attached.info.message {\n  box-shadow: @infoBoxShadow;\n}\n.ui.info.message .header {\n  color: @infoHeaderColor;\n}\n\n/* Warning */\n.ui.warning.message {\n  background-color: @warningBackgroundColor;\n  color: @warningTextColor;\n}\n.ui.warning.message,\n.ui.attached.warning.message {\n  box-shadow: @warningBoxShadow;\n}\n.ui.warning.message .header {\n  color: @warningHeaderColor;\n}\n\n/* Error */\n.ui.error.message {\n  background-color: @errorBackgroundColor;\n  color: @errorTextColor;\n}\n.ui.error.message,\n.ui.attached.error.message {\n  box-shadow: @errorBoxShadow;\n}\n.ui.error.message .header {\n  color: @errorHeaderColor;\n}\n\n/* Success */\n.ui.success.message {\n  background-color: @successBackgroundColor;\n  color: @successTextColor;\n}\n.ui.success.message,\n.ui.attached.success.message {\n  box-shadow: @successBoxShadow;\n}\n.ui.success.message .header {\n  color: @successHeaderColor;\n}\n\n\n/* Colors */\n.ui.inverted.message,\n.ui.black.message {\n  background-color: @black;\n  color: @invertedTextColor;\n}\n\n.ui.red.message {\n  background-color: @redBackground;\n  color: @redTextColor;\n  box-shadow: @redBoxShadow;\n}\n.ui.red.message .header {\n  color: @redHeaderColor;\n}\n\n.ui.orange.message {\n  background-color: @orangeBackground;\n  color: @orangeTextColor;\n  box-shadow: @orangeBoxShadow;\n}\n.ui.orange.message .header {\n  color: @orangeHeaderColor;\n}\n\n.ui.yellow.message {\n  background-color: @yellowBackground;\n  color: @yellowTextColor;\n  box-shadow: @yellowBoxShadow;\n}\n.ui.yellow.message .header {\n  color: @yellowHeaderColor;\n}\n\n.ui.olive.message {\n  background-color: @oliveBackground;\n  color: @oliveTextColor;\n  box-shadow: @oliveBoxShadow;\n}\n.ui.olive.message .header {\n  color: @oliveHeaderColor;\n}\n\n.ui.green.message {\n  background-color: @greenBackground;\n  color: @greenTextColor;\n  box-shadow: @greenBoxShadow;\n}\n.ui.green.message .header {\n  color: @greenHeaderColor;\n}\n\n.ui.teal.message {\n  background-color: @tealBackground;\n  color: @tealTextColor;\n  box-shadow: @tealBoxShadow;\n}\n.ui.teal.message .header {\n  color: @tealHeaderColor;\n}\n\n.ui.blue.message {\n  background-color: @blueBackground;\n  color: @blueTextColor;\n  box-shadow: @blueBoxShadow;\n}\n.ui.blue.message .header {\n  color: @blueHeaderColor;\n}\n\n.ui.violet.message {\n  background-color: @violetBackground;\n  color: @violetTextColor;\n  box-shadow: @violetBoxShadow;\n}\n.ui.violet.message .header {\n  color: @violetHeaderColor;\n}\n\n.ui.purple.message {\n  background-color: @purpleBackground;\n  color: @purpleTextColor;\n  box-shadow: @purpleBoxShadow;\n}\n.ui.purple.message .header {\n  color: @purpleHeaderColor;\n}\n\n.ui.pink.message {\n  background-color: @pinkBackground;\n  color: @pinkTextColor;\n  box-shadow: @pinkBoxShadow;\n}\n.ui.pink.message .header {\n  color: @pinkHeaderColor;\n}\n\n.ui.brown.message {\n  background-color: @brownBackground;\n  color: @brownTextColor;\n  box-shadow: @brownBoxShadow;\n}\n.ui.brown.message .header {\n  color: @brownHeaderColor;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.message {\n  font-size: @relativeMini;\n}\n.ui.tiny.message {\n  font-size: @relativeTiny;\n}\n.ui.small.message {\n  font-size: @relativeSmall;\n}\n.ui.message {\n  font-size: @relativeMedium;\n}\n.ui.large.message {\n  font-size: @relativeLarge;\n}\n.ui.big.message {\n  font-size: @relativeBig;\n}\n.ui.huge.message {\n  font-size: @relativeHuge;\n}\n.ui.massive.message {\n  font-size: @relativeMassive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/collections/table.less",
    "content": "/*!\n * # Semantic UI - Table\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'collection';\n@element : 'table';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Table\n*******************************/\n\n/* Prototype */\n.ui.table {\n  width: 100%;\n  background: @background;\n  margin: @margin;\n  border: @border;\n  box-shadow: @boxShadow;\n  border-radius: @borderRadius;\n  text-align: @textAlign;\n  color: @color;\n  border-collapse: @borderCollapse;\n  border-spacing: @borderSpacing;\n}\n\n.ui.table:first-child {\n  margin-top: 0em;\n}\n.ui.table:last-child {\n  margin-bottom: 0em;\n}\n\n/*******************************\n             Parts\n*******************************/\n\n/* Table Content */\n.ui.table th,\n.ui.table td {\n  transition: @transition;\n}\n\n/* Headers */\n.ui.table thead {\n  box-shadow: @headerBoxShadow;\n}\n.ui.table thead th {\n  cursor: auto;\n  background: @headerBackground;\n  text-align: @headerAlign;\n  color: @headerColor;\n  padding: @headerVerticalPadding @headerHorizontalPadding;\n  vertical-align: @headerVerticalAlign;\n  font-style: @headerFontStyle;\n  font-weight: @headerFontWeight;\n  text-transform: @headerTextTransform;\n  border-bottom: @headerBorder;\n  border-left: @headerDivider;\n}\n\n.ui.table thead tr > th:first-child {\n  border-left: none;\n}\n\n.ui.table thead tr:first-child > th:first-child {\n  border-radius: @borderRadius 0em 0em 0em;\n}\n.ui.table thead tr:first-child > th:last-child {\n  border-radius: 0em @borderRadius 0em 0em;\n}\n.ui.table thead tr:first-child > th:only-child {\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n\n/* Footer */\n.ui.table tfoot {\n  box-shadow: @footerBoxShadow;\n}\n.ui.table tfoot th {\n  cursor: auto;\n  border-top: @footerBorder;\n  background: @footerBackground;\n  text-align: @footerAlign;\n  color: @footerColor;\n  padding: @footerVerticalPadding @footerHorizontalPadding;\n  vertical-align: @footerVerticalAlign;\n  font-style: @footerFontStyle;\n  font-weight: @footerFontWeight;\n  text-transform: @footerTextTransform;\n}\n.ui.table tfoot tr > th:first-child {\n  border-left: none;\n}\n.ui.table tfoot tr:first-child > th:first-child {\n  border-radius: 0em 0em 0em @borderRadius;\n}\n.ui.table tfoot tr:first-child > th:last-child {\n  border-radius: 0em 0em @borderRadius 0em;\n}\n.ui.table tfoot tr:first-child > th:only-child {\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n\n/* Table Row */\n.ui.table tr td {\n  border-top: @rowBorder;\n}\n.ui.table tr:first-child td {\n  border-top: none;\n}\n\n/* Table Cells */\n.ui.table td {\n  padding: @cellVerticalPadding @cellHorizontalPadding;\n  text-align: @cellTextAlign;\n}\n\n/* Icons */\n.ui.table > .icon {\n  vertical-align: @iconVerticalAlign;\n}\n.ui.table > .icon:only-child {\n  margin: 0em;\n}\n\n/* Table Segment */\n.ui.table.segment {\n  padding: 0em;\n}\n.ui.table.segment:after {\n  display: none;\n}\n.ui.table.segment.stacked:after {\n  display: block;\n}\n\n\n/* Responsive */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.table:not(.unstackable) {\n    width: 100%;\n  }\n  .ui.table:not(.unstackable) tbody,\n  .ui.table:not(.unstackable) tr,\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td  {\n    display: block !important;\n    width: auto !important;\n    display: block !important;\n  }\n\n  .ui.table:not(.unstackable) {\n    padding: 0em;\n  }\n  .ui.table:not(.unstackable) thead {\n    display: @responsiveHeaderDisplay;\n  }\n  .ui.table:not(.unstackable) tfoot {\n    display: @responsiveFooterDisplay;\n  }\n  .ui.table:not(.unstackable) tr {\n    padding-top: @responsiveRowVerticalPadding;\n    padding-bottom: @responsiveRowVerticalPadding;\n    box-shadow: @responsiveRowBoxShadow;\n  }\n\n  .ui.table:not(.unstackable) tr > th,\n  .ui.table:not(.unstackable) tr > td {\n    background: none;\n    border: none !important;\n    padding: @responsiveCellVerticalPadding @responsiveCellHorizontalPadding !important;\n    box-shadow: @responsiveCellBoxShadow;\n  }\n  .ui.table:not(.unstackable) th:first-child,\n  .ui.table:not(.unstackable) td:first-child {\n    font-weight: bold;\n  }\n\n  /* Definition Table */\n  .ui.definition.table:not(.unstackable) thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n/* UI Image */\n.ui.table th .image,\n.ui.table th .image img,\n.ui.table td .image,\n.ui.table td .image img {\n  max-width: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Complex\n---------------*/\n\n.ui.structured.table {\n  border-collapse: collapse;\n}\n.ui.structured.table thead th {\n  border-left: @headerDivider;\n  border-right: @headerDivider;\n}\n.ui.structured.sortable.table thead th {\n  border-left: @sortableBorder;\n  border-right: @sortableBorder;\n}\n.ui.structured.basic.table th {\n  border-left: @basicTableHeaderDivider;\n  border-right: @basicTableHeaderDivider;\n}\n.ui.structured.celled.table tr th,\n.ui.structured.celled.table tr td {\n  border-left: @cellBorder;\n  border-right: @cellBorder;\n}\n\n/*--------------\n   Definition\n---------------*/\n\n.ui.definition.table thead:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: @definitionHeaderBackground;\n  font-weight: @definitionHeaderFontWeight;\n  color: @definitionHeaderColor;\n  box-shadow: -@borderWidth -@borderWidth 0px @borderWidth @definitionPageBackground;\n}\n\n.ui.definition.table tfoot:not(.full-width) th:first-child {\n  pointer-events: none;\n  background: @definitionFooterBackground;\n  font-weight: @definitionFooterColor;\n  color: @definitionFooterFontWeight;\n  box-shadow: @borderWidth @borderWidth 0px @borderWidth @definitionPageBackground;\n}\n\n/* Remove Border */\n.ui.celled.definition.table thead:not(.full-width) th:first-child {\n  box-shadow: 0px -@borderWidth 0px @borderWidth @definitionPageBackground;\n}\n.ui.celled.definition.table tfoot:not(.full-width) th:first-child {\n  box-shadow: 0px @borderWidth 0px @borderWidth @definitionPageBackground;\n}\n\n/* Highlight Defining Column */\n.ui.definition.table tr td:first-child:not(.ignored),\n.ui.definition.table tr td.definition {\n  background: @definitionColumnBackground;\n  font-weight: @definitionColumnFontWeight;\n  color: @definitionColumnColor;\n  text-transform: @definitionColumnTextTransform;\n  box-shadow: @definitionColumnBoxShadow;\n  text-align: @definitionColumnTextAlign;\n  font-size: @definitionColumnFontSize;\n  padding-left: @definitionColumnHorizontalPadding;\n  padding-right: @definitionColumnHorizontalPadding;\n}\n\n\n/* Fix 2nd Column */\n.ui.definition.table thead:not(.full-width) th:nth-child(2) {\n  border-left: @borderWidth solid @borderColor;\n}\n.ui.definition.table tfoot:not(.full-width) th:nth-child(2) {\n  border-left: @borderWidth solid @borderColor;\n}\n.ui.definition.table td:nth-child(2) {\n  border-left: @borderWidth solid @borderColor;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Positive\n---------------*/\n\n.ui.table tr.positive,\n.ui.table td.positive {\n  box-shadow: @positiveBoxShadow;\n}\n.ui.table tr.positive,\n.ui.table td.positive {\n  background: @positiveBackgroundColor !important;\n  color: @positiveColor !important;\n}\n\n/*--------------\n     Negative\n---------------*/\n\n.ui.table tr.negative,\n.ui.table td.negative {\n  box-shadow: @negativeBoxShadow;\n}\n.ui.table tr.negative,\n.ui.table td.negative {\n  background: @negativeBackgroundColor !important;\n  color: @negativeColor !important;\n}\n\n/*--------------\n      Error\n---------------*/\n\n.ui.table tr.error,\n.ui.table td.error {\n  box-shadow: @errorBoxShadow;\n}\n.ui.table tr.error,\n.ui.table td.error {\n  background: @errorBackgroundColor !important;\n  color: @errorColor !important;\n}\n/*--------------\n     Warning\n---------------*/\n\n.ui.table tr.warning,\n.ui.table td.warning {\n  box-shadow: @warningBoxShadow;\n}\n.ui.table tr.warning,\n.ui.table td.warning {\n  background: @warningBackgroundColor !important;\n  color: @warningColor !important;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.table tr.active,\n.ui.table td.active {\n  box-shadow: @activeBoxShadow;\n}\n.ui.table tr.active,\n.ui.table td.active {\n  background: @activeBackgroundColor !important;\n  color: @activeColor !important;\n}\n\n\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.table tr.disabled td,\n.ui.table tr td.disabled,\n.ui.table tr.disabled:hover,\n.ui.table tr:hover td.disabled {\n  pointer-events: none;\n  color: @disabledTextColor;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Stackable\n---------------*/\n\n@media only screen and (max-width : @largestTabletScreen) {\n\n  .ui[class*=\"tablet stackable\"].table,\n  .ui[class*=\"tablet stackable\"].table tbody,\n  .ui[class*=\"tablet stackable\"].table tr,\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td  {\n    display: block !important;\n    width: 100% !important;\n    display: block !important;\n  }\n\n  .ui[class*=\"tablet stackable\"].table {\n    padding: 0em;\n  }\n  .ui[class*=\"tablet stackable\"].table thead {\n    display: @responsiveHeaderDisplay;\n  }\n  .ui[class*=\"tablet stackable\"].table tfoot {\n    display: @responsiveFooterDisplay;\n  }\n  .ui[class*=\"tablet stackable\"].table tr {\n    padding-top: @responsiveRowVerticalPadding;\n    padding-bottom: @responsiveRowVerticalPadding;\n    box-shadow: @responsiveRowBoxShadow;\n  }\n  .ui[class*=\"tablet stackable\"].table tr > th,\n  .ui[class*=\"tablet stackable\"].table tr > td {\n    background: none;\n    border: none !important;\n    padding: @responsiveCellVerticalPadding @responsiveCellHorizontalPadding;\n    box-shadow: @responsiveCellBoxShadow;\n  }\n\n  /* Definition Table */\n  .ui.definition[class*=\"tablet stackable\"].table thead th:first-child {\n    box-shadow: none !important;\n  }\n}\n\n/*--------------\n Text Alignment\n---------------*/\n\n.ui.table[class*=\"left aligned\"],\n.ui.table [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.table[class*=\"center aligned\"],\n.ui.table [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.table[class*=\"right aligned\"],\n.ui.table [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n/*------------------\n Vertical Alignment\n------------------*/\n\n.ui.table[class*=\"top aligned\"],\n.ui.table [class*=\"top aligned\"] {\n  vertical-align: top;\n}\n.ui.table[class*=\"middle aligned\"],\n.ui.table [class*=\"middle aligned\"] {\n  vertical-align: middle;\n}\n.ui.table[class*=\"bottom aligned\"],\n.ui.table [class*=\"bottom aligned\"] {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Collapsing\n---------------*/\n\n.ui.table th.collapsing,\n.ui.table td.collapsing {\n  width: 1px;\n  white-space: nowrap;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.table {\n  table-layout: fixed;\n}\n\n.ui.fixed.table th,\n.ui.fixed.table td {\n  overflow: hidden;\n  text-overflow: ellipsis;\n}\n\n\n/*--------------\n   Selectable\n---------------*/\n\n.ui.selectable.table tbody tr:hover,\n.ui.table tbody tr td.selectable:hover {\n  background: @selectableBackground !important;\n  color: @selectableTextColor !important;\n}\n.ui.selectable.inverted.table tbody tr:hover,\n.ui.inverted.table tbody tr td.selectable:hover {\n  background: @selectableInvertedBackground !important;\n  color: @selectableInvertedTextColor !important;\n}\n\n/* Selectable Cell Link */\n.ui.table tbody tr td.selectable {\n  padding: 0em;\n}\n.ui.table tbody tr td.selectable > a:not(.ui) {\n  display: block;\n  color: inherit;\n  padding: @cellVerticalPadding @cellHorizontalPadding;\n}\n\n/* Other States */\n.ui.selectable.table tr.error:hover,\n.ui.table tr td.selectable.error:hover,\n.ui.selectable.table tr:hover td.error {\n  background: @errorBackgroundHover !important;\n  color: @errorColorHover !important;\n}\n.ui.selectable.table tr.warning:hover,\n.ui.table tr td.selectable.warning:hover,\n.ui.selectable.table tr:hover td.warning {\n  background: @warningBackgroundHover !important;\n  color: @warningColorHover !important;\n}\n.ui.selectable.table tr.active:hover,\n.ui.table tr td.selectable.active:hover,\n.ui.selectable.table tr:hover td.active {\n  background: @activeBackgroundColor !important;\n  color: @activeColor !important;\n}\n.ui.selectable.table tr.positive:hover,\n.ui.table tr td.selectable.positive:hover,\n.ui.selectable.table tr:hover td.positive {\n  background: @positiveBackgroundHover !important;\n  color: @positiveColorHover !important;\n}\n.ui.selectable.table tr.negative:hover,\n.ui.table tr td.selectable.negative:hover,\n.ui.selectable.table tr:hover td.negative {\n  background: @negativeBackgroundHover !important;\n  color: @negativeColorHover !important;\n}\n\n\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n.ui.attached.table {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em @attachedHorizontalOffset;\n  width: @attachedWidth;\n  max-width: @attachedWidth;\n  box-shadow: @attachedBoxShadow;\n  border: @attachedBorder;\n}\n.ui.attached + .ui.attached.table:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].table {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: @attachedTopOffset;\n  margin-top: @verticalMargin;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui.table[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui[class*=\"bottom attached\"].table {\n  bottom: 0px;\n  margin-top: 0em;\n  top: @attachedBottomOffset;\n  margin-bottom: @verticalMargin;\n  box-shadow: @attachedBottomBoxShadow;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n.ui[class*=\"bottom attached\"].table:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Striped\n---------------*/\n\n/* Table Striping */\n.ui.striped.table > tr:nth-child(2n),\n.ui.striped.table tbody tr:nth-child(2n) {\n  background-color: @stripedBackground;\n}\n\n/* Stripes */\n.ui.inverted.striped.table > tr:nth-child(2n),\n.ui.inverted.striped.table tbody tr:nth-child(2n) {\n  background-color: @invertedStripedBackground;\n}\n\n/* Allow striped active hover */\n.ui.striped.selectable.selectable.selectable.table tbody tr.active:hover {\n  background: @activeBackgroundHover !important;\n  color: @activeColorHover !important;\n}\n\n/*--------------\n   Single Line\n---------------*/\n\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n.ui.table[class*=\"single line\"],\n.ui.table [class*=\"single line\"] {\n  white-space: nowrap;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n.ui.red.table {\n  border-top: @coloredBorderSize solid @red;\n}\n.ui.inverted.red.table {\n  background-color: @red !important;\n  color: @white !important;\n}\n\n/* Orange */\n.ui.orange.table {\n  border-top: @coloredBorderSize solid @orange;\n}\n.ui.inverted.orange.table {\n  background-color: @orange !important;\n  color: @white !important;\n}\n\n/* Yellow */\n.ui.yellow.table {\n  border-top: @coloredBorderSize solid @yellow;\n}\n.ui.inverted.yellow.table {\n  background-color: @yellow !important;\n  color: @white !important;\n}\n\n/* Olive */\n.ui.olive.table {\n  border-top: @coloredBorderSize solid @olive;\n}\n.ui.inverted.olive.table {\n  background-color: @olive !important;\n  color: @white !important;\n}\n\n/* Green */\n.ui.green.table {\n  border-top: @coloredBorderSize solid @green;\n}\n.ui.inverted.green.table {\n  background-color: @green !important;\n  color: @white !important;\n}\n\n/* Teal */\n.ui.teal.table {\n  border-top: @coloredBorderSize solid @teal;\n}\n.ui.inverted.teal.table {\n  background-color: @teal !important;\n  color: @white !important;\n}\n\n/* Blue */\n.ui.blue.table {\n  border-top: @coloredBorderSize solid @blue;\n}\n.ui.inverted.blue.table {\n  background-color: @blue !important;\n  color: @white !important;\n}\n\n/* Violet */\n.ui.violet.table {\n  border-top: @coloredBorderSize solid @violet;\n}\n.ui.inverted.violet.table {\n  background-color: @violet !important;\n  color: @white !important;\n}\n\n/* Purple */\n.ui.purple.table {\n  border-top: @coloredBorderSize solid @purple;\n}\n.ui.inverted.purple.table {\n  background-color: @purple !important;\n  color: @white !important;\n}\n\n/* Pink */\n.ui.pink.table {\n  border-top: @coloredBorderSize solid @pink;\n}\n.ui.inverted.pink.table {\n  background-color: @pink !important;\n  color: @white !important;\n}\n\n/* Brown */\n.ui.brown.table {\n  border-top: @coloredBorderSize solid @brown;\n}\n.ui.inverted.brown.table {\n  background-color: @brown !important;\n  color: @white !important;\n}\n\n/* Grey */\n.ui.grey.table {\n  border-top: @coloredBorderSize solid @grey;\n}\n.ui.inverted.grey.table {\n  background-color: @grey !important;\n  color: @white !important;\n}\n\n/* Black */\n.ui.black.table {\n  border-top: @coloredBorderSize solid @black;\n}\n.ui.inverted.black.table {\n  background-color: @black !important;\n  color: @white !important;\n}\n\n\n/*--------------\n  Column Count\n---------------*/\n\n/* Grid Based */\n.ui.one.column.table td {\n  width: @oneColumn;\n}\n.ui.two.column.table td {\n  width: @twoColumn;\n}\n.ui.three.column.table td {\n  width: @threeColumn;\n}\n.ui.four.column.table td {\n  width: @fourColumn;\n}\n.ui.five.column.table td {\n  width: @fiveColumn;\n}\n.ui.six.column.table td {\n  width: @sixColumn;\n}\n.ui.seven.column.table td {\n  width: @sevenColumn;\n}\n.ui.eight.column.table td {\n  width: @eightColumn;\n}\n.ui.nine.column.table td {\n  width: @nineColumn;\n}\n.ui.ten.column.table td {\n  width: @tenColumn;\n}\n.ui.eleven.column.table td {\n  width: @elevenColumn;\n}\n.ui.twelve.column.table td {\n  width: @twelveColumn;\n}\n.ui.thirteen.column.table td {\n  width: @thirteenColumn;\n}\n.ui.fourteen.column.table td {\n  width: @fourteenColumn;\n}\n.ui.fifteen.column.table td {\n  width: @fifteenColumn;\n}\n.ui.sixteen.column.table td {\n  width: @sixteenColumn;\n}\n\n/* Column Width */\n.ui.table th.one.wide,\n.ui.table td.one.wide {\n  width: @oneWide;\n}\n.ui.table th.two.wide,\n.ui.table td.two.wide {\n  width: @twoWide;\n}\n.ui.table th.three.wide,\n.ui.table td.three.wide {\n  width: @threeWide;\n}\n.ui.table th.four.wide,\n.ui.table td.four.wide {\n  width: @fourWide;\n}\n.ui.table th.five.wide,\n.ui.table td.five.wide {\n  width: @fiveWide;\n}\n.ui.table th.six.wide,\n.ui.table td.six.wide {\n  width: @sixWide;\n}\n.ui.table th.seven.wide,\n.ui.table td.seven.wide {\n  width: @sevenWide;\n}\n.ui.table th.eight.wide,\n.ui.table td.eight.wide {\n  width: @eightWide;\n}\n.ui.table th.nine.wide,\n.ui.table td.nine.wide {\n  width: @nineWide;\n}\n.ui.table th.ten.wide,\n.ui.table td.ten.wide {\n  width: @tenWide;\n}\n.ui.table th.eleven.wide,\n.ui.table td.eleven.wide {\n  width: @elevenWide;\n}\n.ui.table th.twelve.wide,\n.ui.table td.twelve.wide {\n  width: @twelveWide;\n}\n.ui.table th.thirteen.wide,\n.ui.table td.thirteen.wide {\n  width: @thirteenWide;\n}\n.ui.table th.fourteen.wide,\n.ui.table td.fourteen.wide {\n  width: @fourteenWide;\n}\n.ui.table th.fifteen.wide,\n.ui.table td.fifteen.wide {\n  width: @fifteenWide;\n}\n.ui.table th.sixteen.wide,\n.ui.table td.sixteen.wide {\n  width: @sixteenWide;\n}\n\n/*--------------\n    Sortable\n---------------*/\n\n.ui.sortable.table thead th {\n  cursor: pointer;\n  white-space: nowrap;\n  border-left: @sortableBorder;\n  color: @sortableColor;\n}\n.ui.sortable.table thead th:first-child {\n  border-left: none;\n}\n.ui.sortable.table thead th.sorted,\n.ui.sortable.table thead th.sorted:hover {\n  user-select: none;\n}\n\n.ui.sortable.table thead th:after {\n  display: none;\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  content: '';\n  height: 1em;\n  width: @sortableIconWidth;\n  opacity: @sortableIconOpacity;\n  margin: 0em 0em 0em @sortableIconDistance;\n  font-family: @sortableIconFont;\n}\n.ui.sortable.table thead th.ascending:after {\n  content: @sortableIconAscending;\n}\n.ui.sortable.table thead th.descending:after {\n  content: @sortableIconDescending;\n}\n\n/* Hover */\n.ui.sortable.table th.disabled:hover {\n  cursor: auto;\n  color: @sortableDisabledColor;\n}\n.ui.sortable.table thead th:hover {\n  background: @sortableHoverBackground;\n  color: @sortableHoverColor;\n}\n\n/* Sorted */\n.ui.sortable.table thead th.sorted {\n  background: @sortableActiveBackground;\n  color: @sortableActiveColor;\n}\n.ui.sortable.table thead th.sorted:after {\n  display: inline-block;\n}\n\n/* Sorted Hover */\n.ui.sortable.table thead th.sorted:hover {\n  background: @sortableActiveHoverBackground;\n  color: @sortableActiveHoverColor;\n}\n\n/* Inverted */\n.ui.inverted.sortable.table thead th.sorted {\n  background: @sortableInvertedActiveBackground;\n  color: @sortableInvertedActiveColor;\n}\n.ui.inverted.sortable.table thead th:hover {\n  background: @sortableInvertedHoverBackground;\n  color: @sortableInvertedHoverColor;\n}\n.ui.inverted.sortable.table thead th {\n  border-left-color: @sortableInvertedBorderColor;\n  border-right-color: @sortableInvertedBorderColor;\n}\n\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Text Color */\n.ui.inverted.table {\n  background: @invertedBackground;\n  color: @invertedCellColor;\n  border: @invertedBorder;\n}\n.ui.inverted.table th {\n  background-color: @invertedHeaderBackground;\n  border-color: @invertedHeaderBorderColor !important;\n  color: @invertedHeaderColor !important;\n}\n.ui.inverted.table tr td {\n  border-color: @invertedCellBorderColor !important;\n}\n\n.ui.inverted.table tr.disabled td,\n.ui.inverted.table tr td.disabled,\n.ui.inverted.table tr.disabled:hover td,\n.ui.inverted.table tr:hover td.disabled {\n  pointer-events: none;\n  color: @invertedDisabledTextColor;\n}\n\n/* Definition */\n.ui.inverted.definition.table tfoot:not(.full-width) th:first-child,\n.ui.inverted.definition.table thead:not(.full-width) th:first-child {\n  background: @definitionPageBackground;\n}\n.ui.inverted.definition.table tr td:first-child {\n  background: @invertedDefinitionColumnBackground;\n  color: @invertedDefinitionColumnColor;\n}\n\n/*--------------\n   Collapsing\n---------------*/\n\n.ui.collapsing.table {\n  width: auto;\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.basic.table {\n  background: @basicTableBackground;\n  border: @basicTableBorder;\n  box-shadow: @basicBoxShadow;\n}\n.ui.basic.table thead,\n.ui.basic.table tfoot {\n  box-shadow: none;\n}\n.ui.basic.table th {\n  background: @basicTableHeaderBackground;\n  border-left: @basicTableHeaderDivider;\n}\n.ui.basic.table tbody tr {\n  border-bottom: @basicTableCellBorder;\n}\n.ui.basic.table td {\n  background: @basicTableCellBackground;\n}\n.ui.basic.striped.table tbody tr:nth-child(2n) {\n  background-color: @basicTableStripedBackground !important;\n}\n\n/* Very Basic */\n.ui[class*=\"very basic\"].table {\n  border: none;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td {\n  padding: @basicTableCellPadding;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:first-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:first-child {\n  padding-left: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) th:last-child,\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) td:last-child {\n  padding-right: 0em;\n}\n.ui[class*=\"very basic\"].table:not(.sortable):not(.striped) thead tr:first-child th {\n  padding-top: 0em;\n}\n\n/*--------------\n     Celled\n---------------*/\n\n.ui.celled.table tr th,\n.ui.celled.table tr td {\n  border-left: @cellBorder;\n}\n.ui.celled.table tr th:first-child,\n.ui.celled.table tr td:first-child {\n  border-left: none;\n}\n\n/*--------------\n     Padded\n---------------*/\n\n.ui.padded.table th {\n  padding-left: @paddedHorizontalPadding;\n  padding-right: @paddedHorizontalPadding;\n}\n.ui.padded.table th,\n.ui.padded.table td {\n  padding: @paddedVerticalPadding @paddedHorizontalPadding;\n}\n\n/* Very */\n.ui[class*=\"very padded\"].table th {\n  padding-left: @veryPaddedHorizontalPadding;\n  padding-right: @veryPaddedHorizontalPadding;\n}\n.ui[class*=\"very padded\"].table td {\n  padding: @veryPaddedVerticalPadding @veryPaddedHorizontalPadding;\n}\n\n/*--------------\n     Compact\n---------------*/\n\n.ui.compact.table th {\n  padding-left: @compactHorizontalPadding;\n  padding-right: @compactHorizontalPadding;\n}\n.ui.compact.table td {\n  padding: @compactVerticalPadding @compactHorizontalPadding;\n}\n\n/* Very */\n.ui[class*=\"very compact\"].table th {\n  padding-left: @veryCompactHorizontalPadding;\n  padding-right: @veryCompactHorizontalPadding;\n}\n.ui[class*=\"very compact\"].table td {\n  padding: @veryCompactVerticalPadding @veryCompactHorizontalPadding;\n}\n\n/*--------------\n      Sizes\n---------------*/\n\n/* Small */\n.ui.small.table {\n  font-size: @small;\n}\n\n/* Standard */\n.ui.table {\n  font-size: @medium;\n}\n\n/* Large */\n.ui.large.table {\n  font-size: @large;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/button.less",
    "content": "/*!\n * # Semantic UI - Button\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'button';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Button\n*******************************/\n\n.ui.button {\n  cursor: pointer;\n  display: inline-block;\n\n  min-height: 1em;\n\n  outline: none;\n  border: none;\n  vertical-align: @verticalAlign;\n  background: @background;\n  color: @textColor;\n\n  font-family: @fontFamily;\n\n  margin: 0em @horizontalMargin @verticalMargin 0em;\n  padding: @verticalPadding @horizontalPadding (@verticalPadding + @shadowOffset);\n\n  text-transform: @textTransform;\n  text-shadow: @textShadow;\n  font-weight: @fontWeight;\n  line-height: @lineHeight;\n  font-style: normal;\n  text-align: center;\n  text-decoration: none;\n\n  border-radius: @borderRadius;\n  box-shadow: @boxShadow;\n\n  user-select: none;\n  transition: @transition;\n  will-change: @willChange;\n\n  -webkit-tap-highlight-color: @tapColor;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.button:hover {\n  background-color: @hoverBackgroundColor;\n  background-image: @hoverBackgroundImage;\n  box-shadow: @hoverBoxShadow;\n  color: @hoverColor;\n}\n\n.ui.button:hover .icon {\n  opacity: @iconHoverOpacity;\n}\n\n/*--------------\n      Focus\n---------------*/\n\n.ui.button:focus {\n  background-color: @focusBackgroundColor;\n  color: @focusColor;\n  background-image: @focusBackgroundImage !important;\n  box-shadow: @focusBoxShadow !important;\n}\n\n.ui.button:focus .icon {\n  opacity: @iconFocusOpacity;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.button:active,\n.ui.active.button:active {\n  background-color: @downBackgroundColor;\n  background-image: @downBackgroundImage;\n  color: @downColor;\n  box-shadow: @downBoxShadow;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.button {\n  background-color: @activeBackgroundColor;\n  background-image: @activeBackgroundImage;\n  box-shadow: @activeBoxShadow;\n  color: @activeColor;\n}\n.ui.active.button:hover {\n  background-color: @activeHoverBackgroundColor;\n  background-image: @activeHoverBackgroundImage;\n  color: @activeHoverColor;\n}\n.ui.active.button:active {\n  background-color: @activeBackgroundColor;\n  background-image: @activeBackgroundImage;\n}\n\n\n/*--------------\n    Loading\n---------------*/\n\n/* Specificity hack */\n.ui.loading.loading.loading.loading.loading.loading.button {\n  position: relative;\n  cursor: default;\n  text-shadow: none !important;\n  color: transparent !important;\n  opacity: @loadingOpacity;\n  pointer-events: @loadingPointerEvents;\n  transition: @loadingTransition;\n}\n.ui.loading.button:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @invertedLoaderFillColor;\n}\n.ui.loading.button:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: button-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @invertedLoaderLineColor transparent transparent;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n.ui.labeled.icon.loading.button .icon {\n  background-color: transparent;\n  box-shadow: none;\n}\n\n@keyframes button-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n.ui.basic.loading.button:not(.inverted):before {\n  border-color: @loaderFillColor;\n}\n.ui.basic.loading.button:not(.inverted):after {\n  border-top-color: @loaderLineColor;\n}\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.buttons .disabled.button,\n.ui.disabled.button,\n.ui.button:disabled,\n.ui.disabled.button:hover,\n.ui.disabled.active.button {\n  cursor: default;\n  opacity: @disabledOpacity !important;\n  background-image: none !important;\n  box-shadow: none !important;\n  pointer-events: none !important;\n}\n\n/* Basic Group With Disabled */\n.ui.basic.buttons .ui.disabled.button {\n  border-color: @disabledBorderColor;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.button {\n  position: relative;\n  overflow: hidden;\n  padding-right: 0em !important;\n  vertical-align: @animatedVerticalAlign;\n  z-index: @animatedZIndex;\n}\n\n.ui.animated.button .content {\n  will-change: transform, opacity;\n}\n.ui.animated.button .visible.content {\n  position: relative;\n  margin-right: @horizontalPadding;\n}\n.ui.animated.button .hidden.content {\n  position: absolute;\n  width: 100%;\n}\n\n/* Horizontal */\n.ui.animated.button .visible.content,\n.ui.animated.button .hidden.content {\n  transition: right @animationDuration @animationEasing 0s;\n}\n.ui.animated.button .visible.content {\n  left: auto;\n  right: 0%;\n}\n.ui.animated.button .hidden.content {\n  top: 50%;\n  left: auto;\n  right: -100%;\n  margin-top: -(@lineHeight / 2);\n}\n.ui.animated.button:focus .visible.content,\n.ui.animated.button:hover .visible.content {\n  left: auto;\n  right: 200%;\n}\n.ui.animated.button:focus .hidden.content,\n.ui.animated.button:hover .hidden.content {\n  left: auto;\n  right: 0%;\n}\n\n/* Vertical */\n.ui.vertical.animated.button .visible.content,\n.ui.vertical.animated.button .hidden.content {\n  transition: top @animationDuration @animationEasing, transform @animationDuration @animationEasing;\n}\n.ui.vertical.animated.button .visible.content {\n  transform: translateY(0%);\n  right: auto;\n}\n.ui.vertical.animated.button .hidden.content {\n  top: -50%;\n  left: 0%;\n  right: auto;\n}\n.ui.vertical.animated.button:focus .visible.content,\n.ui.vertical.animated.button:hover .visible.content {\n  transform: translateY(200%);\n  right: auto;\n}\n.ui.vertical.animated.button:focus .hidden.content,\n.ui.vertical.animated.button:hover .hidden.content {\n  top: 50%;\n  right: auto;\n}\n\n/* Fade */\n.ui.fade.animated.button .visible.content,\n.ui.fade.animated.button .hidden.content {\n  transition: opacity @animationDuration @animationEasing, transform @animationDuration @animationEasing;\n}\n.ui.fade.animated.button .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 1;\n  transform: scale(1);\n}\n.ui.fade.animated.button .hidden.content {\n  opacity: 0;\n  left: 0%;\n  right: auto;\n  transform: scale(@fadeScaleHigh);\n}\n.ui.fade.animated.button:focus .visible.content,\n.ui.fade.animated.button:hover .visible.content {\n  left: auto;\n  right: auto;\n  opacity: 0;\n  transform: scale(@fadeScaleLow);\n}\n.ui.fade.animated.button:focus .hidden.content,\n.ui.fade.animated.button:hover .hidden.content {\n  left: 0%;\n  right: auto;\n  opacity: 1;\n  transform: scale(1);\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;\n  background: transparent none;\n  color: @white;\n  text-shadow: none !important;\n}\n\n/* Group */\n.ui.inverted.buttons .button {\n  margin: @invertedGroupButtonOffset;\n}\n.ui.inverted.buttons .button:first-child {\n  margin-left: 0em;\n}\n.ui.inverted.vertical.buttons .button {\n  margin: @invertedVerticalGroupButtonOffset;\n}\n.ui.inverted.vertical.buttons .button:first-child {\n  margin-top: 0em;\n}\n\n/* States */\n\n/* Hover */\n.ui.inverted.button:hover {\n  background: @white;\n  box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;\n  color: @hoverColor;\n}\n\n/* Active / Focus */\n.ui.inverted.button:focus,\n.ui.inverted.button.active {\n  background: @white;\n  box-shadow: 0px 0px 0px @invertedBorderSize @white inset !important;\n  color: @focusColor;\n}\n\n/* Active Focus */\n.ui.inverted.button.active:focus {\n  background: @midWhite;\n  box-shadow: 0px 0px 0px @invertedBorderSize @midWhite inset !important;\n  color: @focusColor;\n}\n\n\n/*-------------------\n    Labeled Button\n--------------------*/\n\n.ui.labeled.button:not(.icon) {\n  display: inline-flex;\n  flex-direction: row;\n  background: none !important;\n  padding: 0px !important;\n  border: none !important;\n  box-shadow: none !important;\n}\n\n.ui.labeled.button > .button {\n  margin: 0px;\n}\n.ui.labeled.button > .label {\n  display: flex;\n  align-items: @labeledLabelAlign;\n  margin: 0px 0px 0px @labeledLabelBorderOffset !important;\n  font-size: @labeledLabelFontSize;\n  padding: @labeledLabelPadding;\n  font-size: @labeledLabelFontSize;\n  border-color: @labeledLabelBorderColor;\n}\n\n/* Tag */\n.ui.labeled.button > .tag.label:before {\n  width: @labeledTagLabelSize;\n  height: @labeledTagLabelSize;\n}\n\n/* Right */\n.ui.labeled.button:not([class*=\"left labeled\"]) > .button {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.button:not([class*=\"left labeled\"]) > .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n/* Left Side */\n.ui[class*=\"left labeled\"].button > .button {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n.ui[class*=\"left labeled\"].button > .label {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n\n/*-------------------\n       Social\n--------------------*/\n\n/* Facebook */\n.ui.facebook.button {\n  background-color: @facebookColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.facebook.button:hover {\n  background-color: @facebookHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.facebook.button:active {\n  background-color: @facebookDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* Twitter */\n.ui.twitter.button {\n  background-color: @twitterColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.twitter.button:hover {\n  background-color: @twitterHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.twitter.button:active {\n  background-color: @twitterDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* Google Plus */\n.ui.google.plus.button {\n  background-color: @googlePlusColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.google.plus.button:hover {\n  background-color: @googlePlusHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.google.plus.button:active {\n  background-color: @googlePlusDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* Linked In */\n.ui.linkedin.button {\n  background-color: @linkedInColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.linkedin.button:hover {\n  background-color: @linkedInHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.linkedin.button:active {\n  background-color: @linkedInDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* YouTube */\n.ui.youtube.button {\n  background-color: @youtubeColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.youtube.button:hover {\n  background-color: @youtubeHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.youtube.button:active {\n  background-color: @youtubeDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* Instagram */\n.ui.instagram.button {\n  background-color: @instagramColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.instagram.button:hover {\n  background-color: @instagramHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.instagram.button:active {\n  background-color: @instagramDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* Pinterest */\n.ui.pinterest.button {\n  background-color: @pinterestColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.pinterest.button:hover {\n  background-color: @pinterestHoverColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n.ui.pinterest.button:active {\n  background-color: @pinterestDownColor;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n}\n\n/* VK */\n.ui.vk.button {\n  background-color: #4D7198;\n  color: @white;\n  background-image: @coloredBackgroundImage;\n  box-shadow: @coloredBoxShadow;\n}\n.ui.vk.button:hover {\n  background-color: @vkHoverColor;\n  color: @white;\n}\n.ui.vk.button:active {\n  background-color: @vkDownColor;\n  color: @white;\n}\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.button > .icon:not(.button) {\n  height: @iconHeight;\n  opacity: @iconOpacity;\n  margin: @iconMargin;\n  transition: @iconTransition;\n  vertical-align: @iconVerticalAlign;\n  color: @iconColor;\n}\n\n.ui.button:not(.icon) > .icon:not(.button):not(.dropdown) {\n  margin: @iconMargin;\n}\n.ui.button:not(.icon) > .right.icon:not(.button):not(.dropdown) {\n  margin: @rightIconMargin;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui[class*=\"left floated\"].buttons,\n.ui[class*=\"left floated\"].button {\n  float: left;\n  margin-left: 0em;\n  margin-right: @floatedMargin;\n}\n.ui[class*=\"right floated\"].buttons,\n.ui[class*=\"right floated\"].button {\n  float: right;\n  margin-right: 0em;\n  margin-left: @floatedMargin;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.buttons .button,\n.ui.compact.button {\n  padding: @compactVerticalPadding @compactHorizontalPadding ( @compactVerticalPadding + @shadowOffset );\n}\n.ui.compact.icon.buttons .button,\n.ui.compact.icon.button {\n  padding: @compactVerticalPadding @compactVerticalPadding ( @compactVerticalPadding + @shadowOffset );\n}\n.ui.compact.labeled.icon.buttons .button,\n.ui.compact.labeled.icon.button {\n  padding: @compactVerticalPadding (@compactHorizontalPadding + @labeledIconWidth) ( @compactVerticalPadding + @shadowOffset );\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.buttons .button,\n.ui.mini.buttons .or,\n.ui.mini.button {\n  font-size: @mini;\n}\n.ui.tiny.buttons .button,\n.ui.tiny.buttons .or,\n.ui.tiny.button {\n  font-size: @tiny;\n}\n.ui.small.buttons .button,\n.ui.small.buttons .or,\n.ui.small.button {\n  font-size: @small;\n}\n.ui.buttons .button,\n.ui.buttons .or,\n.ui.button {\n  font-size: @medium;\n}\n.ui.large.buttons .button,\n.ui.large.buttons .or,\n.ui.large.button {\n  font-size: @large;\n}\n.ui.big.buttons .button,\n.ui.big.buttons .or,\n.ui.big.button {\n  font-size: @big;\n}\n.ui.huge.buttons .button,\n.ui.huge.buttons .or,\n.ui.huge.button {\n  font-size: @huge;\n}\n.ui.massive.buttons .button,\n.ui.massive.buttons .or,\n.ui.massive.button {\n  font-size: @massive;\n}\n\n/*--------------\n    Icon Only\n---------------*/\n\n.ui.icon.buttons .button,\n.ui.icon.button {\n  padding: @verticalPadding @verticalPadding ( @verticalPadding + @shadowOffset );\n}\n.ui.icon.buttons .button > .icon,\n.ui.icon.button > .icon {\n  opacity: @iconButtonOpacity;\n  margin: 0em !important;\n  vertical-align: top;\n}\n\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.buttons .button,\n.ui.basic.button {\n  background: @basicBackground !important;\n  color: @basicTextColor !important;\n  font-weight: @basicFontWeight;\n  border-radius: @basicBorderRadius;\n  text-transform: @basicTextTransform;\n  text-shadow: none !important;\n  box-shadow: @basicBoxShadow;\n}\n.ui.basic.buttons {\n  box-shadow: @basicGroupBoxShadow;\n  border: @basicGroupBorder;\n  border-radius: @borderRadius;\n}\n.ui.basic.buttons .button {\n  border-radius: 0em;\n}\n\n.ui.basic.buttons .button:hover,\n.ui.basic.button:hover {\n  background: @basicHoverBackground !important;\n  color: @basicHoverTextColor !important;\n  box-shadow: @basicHoverBoxShadow;\n}\n.ui.basic.buttons .button:focus,\n.ui.basic.button:focus {\n  background: @basicFocusBackground !important;\n  color: @basicFocusTextColor !important;\n  box-shadow: @basicFocusBoxShadow;\n}\n.ui.basic.buttons .button:active,\n.ui.basic.button:active {\n  background: @basicDownBackground !important;\n  color: @basicDownTextColor !important;\n  box-shadow: @basicDownBoxShadow;\n}\n.ui.basic.buttons .active.button,\n.ui.basic.active.button {\n  background: @basicActiveBackground !important;\n  box-shadow: @basicActiveBoxShadow !important;\n  color: @basicActiveTextColor;\n}\n.ui.basic.buttons .active.button:hover,\n.ui.basic.active.button:hover {\n  background-color: @transparentBlack;\n}\n\n/* Vertical */\n.ui.basic.buttons .button:hover {\n  box-shadow: @basicHoverBoxShadow inset;\n}\n.ui.basic.buttons .button:active {\n  box-shadow: @basicDownBoxShadow inset;\n}\n.ui.basic.buttons .active.button {\n  box-shadow: @basicActiveBoxShadow !important;\n}\n\n/* Standard Basic Inverted */\n.ui.basic.inverted.buttons .button,\n.ui.basic.inverted.button {\n  background-color: transparent !important;\n  color: @offWhite !important;\n  box-shadow: @basicInvertedBoxShadow !important;\n}\n.ui.basic.inverted.buttons .button:hover,\n.ui.basic.inverted.button:hover {\n  color: @white !important;\n  box-shadow: @basicInvertedHoverBoxShadow !important;\n}\n.ui.basic.inverted.buttons .button:focus,\n.ui.basic.inverted.button:focus {\n  color: @white !important;\n  box-shadow: @basicInvertedFocusBoxShadow !important;\n}\n.ui.basic.inverted.buttons .button:active,\n.ui.basic.inverted.button:active {\n  background-color: @transparentWhite !important;\n  color: @white !important;\n  box-shadow: @basicInvertedDownBoxShadow !important;\n}\n.ui.basic.inverted.buttons .active.button,\n.ui.basic.inverted.active.button {\n  background-color: @transparentWhite;\n  color: @invertedTextColor;\n  text-shadow: @invertedTextShadow;\n  box-shadow: @basicInvertedActiveBoxShadow;\n}\n.ui.basic.inverted.buttons .active.button:hover,\n.ui.basic.inverted.active.button:hover {\n  background-color: @strongTransparentWhite;\n  box-shadow: @basicInvertedHoverBoxShadow !important;\n}\n\n\n/* Basic Group */\n.ui.basic.buttons .button {\n  border-left: @basicGroupBorder;\n  box-shadow: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left: none;\n}\n.ui.basic.vertical.buttons .button {\n  border-left-width: 0px;\n  border-top: @basicGroupBorder;\n}\n.ui.basic.vertical.buttons .button:first-child {\n  border-top-width: 0px;\n}\n\n\n\n/*--------------\n  Labeled Icon\n---------------*/\n\n.ui.labeled.icon.buttons .button,\n.ui.labeled.icon.button {\n  position: relative;\n  padding-left: @labeledIconPadding !important;\n  padding-right: @horizontalPadding !important;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  position: absolute;\n  height: 100%;\n  line-height: 1;\n  border-radius: 0px;\n  border-top-left-radius: inherit;\n  border-bottom-left-radius: inherit;\n  text-align: center;\n\n  margin: @labeledIconMargin;\n  width: @labeledIconWidth;\n  background-color: @labeledIconBackgroundColor;\n  color: @labeledIconColor;\n  box-shadow: @labeledIconLeftShadow;\n}\n\n/* Left Labeled */\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  top: 0em;\n  left: 0em;\n}\n\n/* Right Labeled */\n.ui[class*=\"right labeled\"].icon.button {\n  padding-right: @labeledIconPadding !important;\n  padding-left: @horizontalPadding !important;\n}\n.ui[class*=\"right labeled\"].icon.button > .icon {\n  left: auto;\n  right: 0em;\n  border-radius: 0px;\n  border-top-right-radius: inherit;\n  border-bottom-right-radius: inherit;\n  box-shadow: @labeledIconRightShadow;\n}\n\n\n.ui.labeled.icon.buttons > .button > .icon:before,\n.ui.labeled.icon.button > .icon:before,\n.ui.labeled.icon.buttons > .button > .icon:after,\n.ui.labeled.icon.button > .icon:after {\n  display: block;\n  position: absolute;\n  width: 100%;\n  top: 50%;\n  text-align: center;\n  transform: translateY(-50%);\n}\n\n.ui.labeled.icon.buttons .button > .icon {\n  border-radius: 0em;\n}\n.ui.labeled.icon.buttons .button:first-child > .icon {\n  border-top-left-radius: @borderRadius;\n  border-bottom-left-radius: @borderRadius;\n}\n.ui.labeled.icon.buttons .button:last-child > .icon {\n  border-top-right-radius: @borderRadius;\n  border-bottom-right-radius: @borderRadius;\n}\n.ui.vertical.labeled.icon.buttons .button:first-child > .icon {\n  border-radius: 0em;\n  border-top-left-radius: @borderRadius;\n}\n.ui.vertical.labeled.icon.buttons .button:last-child > .icon {\n  border-radius: 0em;\n  border-bottom-left-radius: @borderRadius;\n}\n\n/* Fluid Labeled */\n.ui.fluid[class*=\"left labeled\"].icon.button,\n.ui.fluid[class*=\"right labeled\"].icon.button {\n  padding-left: @horizontalPadding !important;\n  padding-right: @horizontalPadding !important;\n}\n\n\n\n\n/*--------------\n     Toggle\n---------------*/\n\n/* Toggle (Modifies active state to give affordances) */\n.ui.toggle.buttons .active.button,\n.ui.buttons .button.toggle.active,\n.ui.button.toggle.active {\n  background-color: @positiveColor !important;\n  box-shadow: none !important;\n  text-shadow: @invertedTextShadow;\n  color: @invertedTextColor !important;\n}\n.ui.button.toggle.active:hover {\n  background-color: @positiveColorHover !important;\n  text-shadow: @invertedTextShadow;\n  color: @invertedTextColor !important;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.button {\n  border-radius: 10em;\n}\n.ui.circular.button > .icon {\n  width: 1em;\n  vertical-align: baseline;\n}\n\n\n/*-------------------\n      Or Buttons\n--------------------*/\n\n.ui.buttons .or {\n  position: relative;\n  width: @orGap;\n  height: @orHeight;\n  z-index: @orZIndex;\n}\n.ui.buttons .or:before {\n  position: absolute;\n  text-align: center;\n  border-radius: @circularRadius;\n\n  content: @orText;\n  top: 50%;\n  left: 50%;\n  background-color: @orBackgroundColor;\n  text-shadow: @orTextShadow;\n\n  margin-top: @orVerticalOffset;\n  margin-left: @orHorizontalOffset;\n\n  width: @orCircleSize;\n  height: @orCircleSize;\n\n  line-height: @orLineHeight;\n  color: @orTextColor;\n\n  font-style: @orTextStyle;\n  font-weight: @orTextWeight;\n\n  box-shadow: @orBoxShadow;\n}\n.ui.buttons .or[data-text]:before {\n  content: attr(data-text);\n}\n\n/* Fluid Or */\n.ui.fluid.buttons .or {\n  width: 0em !important;\n}\n.ui.fluid.buttons .or:after {\n  display: none;\n}\n\n\n/*-------------------\n       Attached\n--------------------*/\n\n\n/* Singular */\n.ui.attached.button {\n  position: relative;\n  display: block;\n  margin: 0em;\n  border-radius: 0em;\n  box-shadow: @attachedBoxShadow !important;\n}\n\n/* Top / Bottom */\n.ui.attached.top.button {\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui.attached.bottom.button {\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n\n/* Left / Right */\n.ui.left.attached.button {\n  display: inline-block;\n  border-left: none;\n  text-align: right;\n\n  padding-right: @attachedHorizontalPadding;\n  border-radius: @borderRadius 0em 0em @borderRadius;\n}\n.ui.right.attached.button {\n  display: inline-block;\n  text-align: left;\n  padding-left: @attachedHorizontalPadding;\n  border-radius: 0em @borderRadius @borderRadius 0em;\n}\n\n/* Plural */\n.ui.attached.buttons {\n  position: relative;\n  display: flex;\n  border-radius: 0em;\n  width: auto !important;\n  z-index: @attachedZIndex;\n  margin-left: @attachedOffset;\n  margin-right: @attachedOffset;\n}\n.ui.attached.buttons .button {\n  margin: 0em;\n}\n.ui.attached.buttons .button:first-child {\n  border-radius: 0em;\n}\n.ui.attached.buttons .button:last-child {\n  border-radius: 0em;\n}\n\n/* Top / Bottom */\n.ui[class*=\"top attached\"].buttons {\n  margin-bottom: @attachedOffset;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:first-child {\n  border-radius: @borderRadius 0em 0em 0em;\n}\n.ui[class*=\"top attached\"].buttons .button:last-child {\n  border-radius: 0em @borderRadius 0em 0em;\n}\n\n.ui[class*=\"bottom attached\"].buttons {\n  margin-top: @attachedOffset;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n.ui[class*=\"bottom attached\"].buttons .button:first-child {\n  border-radius: 0em 0em 0em @borderRadius;\n}\n.ui[class*=\"bottom attached\"].buttons .button:last-child {\n  border-radius: 0em 0em @borderRadius 0em;\n}\n\n/* Left / Right */\n.ui[class*=\"left attached\"].buttons {\n  display: inline-flex;\n  margin-right: 0em;\n  margin-left: @attachedOffset;\n  border-radius: 0em @borderRadius @borderRadius 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:first-child {\n  margin-left: @attachedOffset;\n  border-radius: 0em @borderRadius 0em 0em;\n}\n.ui[class*=\"left attached\"].buttons .button:last-child {\n  margin-left: @attachedOffset;\n  border-radius: 0em 0em @borderRadius 0em;\n}\n\n.ui[class*=\"right attached\"].buttons {\n  display: inline-flex;\n  margin-left: 0em;\n  margin-right: @attachedOffset;\n  border-radius: @borderRadius 0em 0em @borderRadius;\n}\n.ui[class*=\"right attached\"].buttons .button:first-child {\n  margin-left: @attachedOffset;\n  border-radius: @borderRadius 0em 0em 0em;\n}\n.ui[class*=\"right attached\"].buttons .button:last-child {\n  margin-left: @attachedOffset;\n  border-radius: 0em 0em 0em @borderRadius;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.buttons,\n.ui.fluid.button {\n  width: 100%;\n}\n.ui.fluid.button {\n  display: block;\n}\n\n.ui.two.buttons {\n  width: 100%;\n}\n.ui.two.buttons > .button {\n  width: 50%;\n}\n\n.ui.three.buttons {\n  width: 100%;\n}\n.ui.three.buttons > .button {\n  width: 33.333%;\n}\n\n.ui.four.buttons {\n  width: 100%;\n}\n.ui.four.buttons > .button {\n  width: 25%;\n}\n\n.ui.five.buttons {\n  width: 100%;\n}\n.ui.five.buttons > .button {\n  width: 20%;\n}\n\n.ui.six.buttons {\n  width: 100%;\n}\n.ui.six.buttons > .button {\n  width: 16.666%;\n}\n\n.ui.seven.buttons {\n  width: 100%;\n}\n.ui.seven.buttons > .button {\n  width: 14.285%;\n}\n\n.ui.eight.buttons {\n  width: 100%;\n}\n.ui.eight.buttons > .button {\n  width: 12.500%;\n}\n\n.ui.nine.buttons {\n  width: 100%;\n}\n.ui.nine.buttons > .button {\n  width: 11.11%;\n}\n\n.ui.ten.buttons {\n  width: 100%;\n}\n.ui.ten.buttons > .button {\n  width: 10%;\n}\n\n.ui.eleven.buttons {\n  width: 100%;\n}\n.ui.eleven.buttons > .button {\n  width: 9.09%;\n}\n\n.ui.twelve.buttons {\n  width: 100%;\n}\n.ui.twelve.buttons > .button {\n  width: 8.3333%;\n}\n\n/* Fluid Vertical Buttons */\n.ui.fluid.vertical.buttons,\n.ui.fluid.vertical.buttons > .button {\n  display: flex;\n  width: auto;\n}\n\n.ui.two.vertical.buttons > .button {\n  height: 50%;\n}\n.ui.three.vertical.buttons > .button {\n  height: 33.333%;\n}\n.ui.four.vertical.buttons > .button {\n  height: 25%;\n}\n.ui.five.vertical.buttons > .button {\n  height: 20%;\n}\n.ui.six.vertical.buttons > .button {\n  height: 16.666%;\n}\n.ui.seven.vertical.buttons > .button {\n  height: 14.285%;\n}\n.ui.eight.vertical.buttons > .button {\n  height: 12.500%;\n}\n.ui.nine.vertical.buttons > .button {\n  height: 11.11%;\n}\n.ui.ten.vertical.buttons > .button {\n  height: 10%;\n}\n.ui.eleven.vertical.buttons > .button {\n  height: 9.09%;\n}\n.ui.twelve.vertical.buttons > .button {\n  height: 8.3333%;\n}\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Black ---*/\n.ui.black.buttons .button,\n.ui.black.button {\n  background-color: @black;\n  color: @blackTextColor;\n  text-shadow: @blackTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.black.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.black.buttons .button:hover,\n.ui.black.button:hover {\n  background-color: @blackHover;\n  color: @blackTextColor;\n  text-shadow: @blackTextShadow;\n}\n.ui.black.buttons .button:focus,\n.ui.black.button:focus {\n  background-color: @blackFocus;\n  color: @blackTextColor;\n  text-shadow: @blackTextShadow;\n}\n.ui.black.buttons .button:active,\n.ui.black.button:active {\n  background-color: @blackDown;\n  color: @blackTextColor;\n  text-shadow: @blackTextShadow;\n}\n.ui.black.buttons .active.button,\n.ui.black.buttons .active.button:active,\n.ui.black.active.button,\n.ui.black.button .active.button:active {\n  background-color: @blackActive;\n  color: @blackTextColor;\n  text-shadow: @blackTextShadow;\n}\n\n/* Basic */\n.ui.basic.black.buttons .button,\n.ui.basic.black.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @black inset !important;\n  color: @black !important;\n}\n.ui.basic.black.buttons .button:hover,\n.ui.basic.black.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blackHover inset !important;\n  color: @blackHover !important;\n}\n.ui.basic.black.buttons .button:focus,\n.ui.basic.black.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blackFocus inset !important;\n  color: @blackHover !important;\n}\n.ui.basic.black.buttons .active.button,\n.ui.basic.black.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blackActive inset !important;\n  color: @blackDown !important;\n}\n.ui.basic.black.buttons .button:active,\n.ui.basic.black.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blackDown inset !important;\n  color: @blackDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.black.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.black.buttons .button,\n.ui.inverted.black.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @solidBorderColor inset !important;\n  color: @invertedTextColor;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover,\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus,\n.ui.inverted.black.buttons .button.active,\n.ui.inverted.black.button.active,\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  box-shadow: none !important;\n  color: @lightBlackTextColor;\n}\n.ui.inverted.black.buttons .button:hover,\n.ui.inverted.black.button:hover {\n  background-color: @lightBlackHover;\n}\n.ui.inverted.black.buttons .button:focus,\n.ui.inverted.black.button:focus {\n  background-color: @lightBlackFocus;\n}\n.ui.inverted.black.buttons .active.button,\n.ui.inverted.black.active.button {\n  background-color: @lightBlackActive;\n}\n.ui.inverted.black.buttons .button:active,\n.ui.inverted.black.button:active {\n  background-color: @lightBlackDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.black.basic.buttons .button,\n.ui.inverted.black.buttons .basic.button,\n.ui.inverted.black.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.black.basic.buttons .button:hover,\n.ui.inverted.black.buttons .basic.button:hover,\n.ui.inverted.black.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackHover inset !important;\n  color: @white !important;\n}\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.buttons .button:focus,\n.ui.inverted.black.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackFocus inset !important;\n  color: @lightBlack !important;\n}\n.ui.inverted.black.basic.buttons .active.button,\n.ui.inverted.black.buttons .basic.active.button,\n.ui.inverted.black.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackActive inset !important;\n  color: @white !important;\n}\n.ui.inverted.black.basic.buttons .button:active,\n.ui.inverted.black.buttons .basic.button:active,\n.ui.inverted.black.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlackDown inset !important;\n  color: @white !important;\n}\n\n/*--- Grey ---*/\n.ui.grey.buttons .button,\n.ui.grey.button {\n  background-color: @grey;\n  color: @greyTextColor;\n  text-shadow: @greyTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.grey.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.grey.buttons .button:hover,\n.ui.grey.button:hover {\n  background-color: @greyHover;\n  color: @greyTextColor;\n  text-shadow: @greyTextShadow;\n}\n.ui.grey.buttons .button:focus,\n.ui.grey.button:focus {\n  background-color: @greyFocus;\n  color: @greyTextColor;\n  text-shadow: @greyTextShadow;\n}\n.ui.grey.buttons .button:active,\n.ui.grey.button:active {\n  background-color: @greyDown;\n  color: @greyTextColor;\n  text-shadow: @greyTextShadow;\n}\n.ui.grey.buttons .active.button,\n.ui.grey.buttons .active.button:active,\n.ui.grey.active.button,\n.ui.grey.button .active.button:active {\n  background-color: @greyActive;\n  color: @greyTextColor;\n  text-shadow: @greyTextShadow;\n}\n\n/* Basic */\n.ui.basic.grey.buttons .button,\n.ui.basic.grey.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @grey inset !important;\n  color: @grey !important;\n}\n.ui.basic.grey.buttons .button:hover,\n.ui.basic.grey.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greyHover inset !important;\n  color: @greyHover !important;\n}\n.ui.basic.grey.buttons .button:focus,\n.ui.basic.grey.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greyFocus inset !important;\n  color: @greyHover !important;\n}\n.ui.basic.grey.buttons .active.button,\n.ui.basic.grey.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greyActive inset !important;\n  color: @greyDown !important;\n}\n.ui.basic.grey.buttons .button:active,\n.ui.basic.grey.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greyDown inset !important;\n  color: @greyDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.grey.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.grey.buttons .button,\n.ui.inverted.grey.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @solidBorderColor inset !important;\n  color: @invertedTextColor;\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover,\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus,\n.ui.inverted.grey.buttons .button.active,\n.ui.inverted.grey.button.active,\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  box-shadow: none !important;\n  color: @lightGreyTextColor;\n}\n.ui.inverted.grey.buttons .button:hover,\n.ui.inverted.grey.button:hover {\n  background-color: @lightGreyHover;\n}\n.ui.inverted.grey.buttons .button:focus,\n.ui.inverted.grey.button:focus {\n  background-color: @lightGreyFocus;\n}\n.ui.inverted.grey.buttons .active.button,\n.ui.inverted.grey.active.button {\n  background-color: @lightGreyActive;\n}\n.ui.inverted.grey.buttons .button:active,\n.ui.inverted.grey.button:active {\n  background-color: @lightGreyDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.grey.basic.buttons .button,\n.ui.inverted.grey.buttons .basic.button,\n.ui.inverted.grey.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.grey.basic.buttons .button:hover,\n.ui.inverted.grey.buttons .basic.button:hover,\n.ui.inverted.grey.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyHover inset !important;\n  color: @white !important;\n}\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.buttons .button:focus,\n.ui.inverted.grey.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyFocus inset !important;\n  color: @lightGrey !important;\n}\n.ui.inverted.grey.basic.buttons .active.button,\n.ui.inverted.grey.buttons .basic.active.button,\n.ui.inverted.grey.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyActive inset !important;\n  color: @white !important;\n}\n.ui.inverted.grey.basic.buttons .button:active,\n.ui.inverted.grey.buttons .basic.button:active,\n.ui.inverted.grey.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreyDown inset !important;\n  color: @white !important;\n}\n\n\n/*--- Brown ---*/\n.ui.brown.buttons .button,\n.ui.brown.button {\n  background-color: @brown;\n  color: @brownTextColor;\n  text-shadow: @brownTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.brown.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.brown.buttons .button:hover,\n.ui.brown.button:hover {\n  background-color: @brownHover;\n  color: @brownTextColor;\n  text-shadow: @brownTextShadow;\n}\n.ui.brown.buttons .button:focus,\n.ui.brown.button:focus {\n  background-color: @brownFocus;\n  color: @brownTextColor;\n  text-shadow: @brownTextShadow;\n}\n.ui.brown.buttons .button:active,\n.ui.brown.button:active {\n  background-color: @brownDown;\n  color: @brownTextColor;\n  text-shadow: @brownTextShadow;\n}\n.ui.brown.buttons .active.button,\n.ui.brown.buttons .active.button:active,\n.ui.brown.active.button,\n.ui.brown.button .active.button:active {\n  background-color: @brownActive;\n  color: @brownTextColor;\n  text-shadow: @brownTextShadow;\n}\n\n/* Basic */\n.ui.basic.brown.buttons .button,\n.ui.basic.brown.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @brown inset !important;\n  color: @brown !important;\n}\n.ui.basic.brown.buttons .button:hover,\n.ui.basic.brown.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @brownHover inset !important;\n  color: @brownHover !important;\n}\n.ui.basic.brown.buttons .button:focus,\n.ui.basic.brown.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @brownFocus inset !important;\n  color: @brownHover !important;\n}\n.ui.basic.brown.buttons .active.button,\n.ui.basic.brown.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @brownActive inset !important;\n  color: @brownDown !important;\n}\n.ui.basic.brown.buttons .button:active,\n.ui.basic.brown.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @brownDown inset !important;\n  color: @brownDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.brown.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.brown.buttons .button,\n.ui.inverted.brown.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBrown inset !important;\n  color: @lightBrown;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover,\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus,\n.ui.inverted.brown.buttons .button.active,\n.ui.inverted.brown.button.active,\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  box-shadow: none !important;\n  color: @lightBrownTextColor;\n}\n.ui.inverted.brown.buttons .button:hover,\n.ui.inverted.brown.button:hover {\n  background-color: @lightBrownHover;\n}\n.ui.inverted.brown.buttons .button:focus,\n.ui.inverted.brown.button:focus {\n  background-color: @lightBrownFocus;\n}\n.ui.inverted.brown.buttons .active.button,\n.ui.inverted.brown.active.button {\n  background-color: @lightBrownActive;\n}\n.ui.inverted.brown.buttons .button:active,\n.ui.inverted.brown.button:active {\n  background-color: @lightBrownDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.brown.basic.buttons .button,\n.ui.inverted.brown.buttons .basic.button,\n.ui.inverted.brown.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.brown.basic.buttons .button:hover,\n.ui.inverted.brown.buttons .basic.button:hover,\n.ui.inverted.brown.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownHover inset !important;\n  color: @lightBrown !important;\n}\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.buttons .button:focus,\n.ui.inverted.brown.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownFocus inset !important;\n  color: @lightBrown !important;\n}\n.ui.inverted.brown.basic.buttons .active.button,\n.ui.inverted.brown.buttons .basic.active.button,\n.ui.inverted.brown.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownActive inset !important;\n  color: @lightBrown !important;\n}\n.ui.inverted.brown.basic.buttons .button:active,\n.ui.inverted.brown.buttons .basic.button:active,\n.ui.inverted.brown.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBrownDown inset !important;\n  color: @lightBrown !important;\n}\n\n/*--- Blue ---*/\n.ui.blue.buttons .button,\n.ui.blue.button {\n  background-color: @blue;\n  color: @blueTextColor;\n  text-shadow: @blueTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.blue.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.blue.buttons .button:hover,\n.ui.blue.button:hover {\n  background-color: @blueHover;\n  color: @blueTextColor;\n  text-shadow: @blueTextShadow;\n}\n.ui.blue.buttons .button:focus,\n.ui.blue.button:focus {\n  background-color: @blueFocus;\n  color: @blueTextColor;\n  text-shadow: @blueTextShadow;\n}\n.ui.blue.buttons .button:active,\n.ui.blue.button:active {\n  background-color: @blueDown;\n  color: @blueTextColor;\n  text-shadow: @blueTextShadow;\n}\n.ui.blue.buttons .active.button,\n.ui.blue.buttons .active.button:active,\n.ui.blue.active.button,\n.ui.blue.button .active.button:active {\n  background-color: @blueActive;\n  color: @blueTextColor;\n  text-shadow: @blueTextShadow;\n}\n\n/* Basic */\n.ui.basic.blue.buttons .button,\n.ui.basic.blue.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @blue inset !important;\n  color: @blue !important;\n}\n.ui.basic.blue.buttons .button:hover,\n.ui.basic.blue.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blueHover inset !important;\n  color: @blueHover !important;\n}\n.ui.basic.blue.buttons .button:focus,\n.ui.basic.blue.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blueFocus inset !important;\n  color: @blueHover !important;\n}\n.ui.basic.blue.buttons .active.button,\n.ui.basic.blue.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blueActive inset !important;\n  color: @blueDown !important;\n}\n.ui.basic.blue.buttons .button:active,\n.ui.basic.blue.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @blueDown inset !important;\n  color: @blueDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.blue.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.blue.buttons .button,\n.ui.inverted.blue.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlue inset !important;\n  color: @lightBlue;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover,\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus,\n.ui.inverted.blue.buttons .button.active,\n.ui.inverted.blue.button.active,\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  box-shadow: none !important;\n  color: @lightBlueTextColor;\n}\n.ui.inverted.blue.buttons .button:hover,\n.ui.inverted.blue.button:hover {\n  background-color: @lightBlueHover;\n}\n.ui.inverted.blue.buttons .button:focus,\n.ui.inverted.blue.button:focus {\n  background-color: @lightBlueFocus;\n}\n.ui.inverted.blue.buttons .active.button,\n.ui.inverted.blue.active.button {\n  background-color: @lightBlueActive;\n}\n.ui.inverted.blue.buttons .button:active,\n.ui.inverted.blue.button:active {\n  background-color: @lightBlueDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.blue.basic.buttons .button,\n.ui.inverted.blue.buttons .basic.button,\n.ui.inverted.blue.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.blue.basic.buttons .button:hover,\n.ui.inverted.blue.buttons .basic.button:hover,\n.ui.inverted.blue.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueHover inset !important;\n  color: @lightBlue !important;\n}\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.buttons .button:focus,\n.ui.inverted.blue.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueFocus inset !important;\n  color: @lightBlue !important;\n}\n.ui.inverted.blue.basic.buttons .active.button,\n.ui.inverted.blue.buttons .basic.active.button,\n.ui.inverted.blue.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueActive inset !important;\n  color: @lightBlue !important;\n}\n.ui.inverted.blue.basic.buttons .button:active,\n.ui.inverted.blue.buttons .basic.button:active,\n.ui.inverted.blue.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightBlueDown inset !important;\n  color: @lightBlue !important;\n}\n\n/*--- Green ---*/\n.ui.green.buttons .button,\n.ui.green.button {\n  background-color: @green;\n  color: @greenTextColor;\n  text-shadow: @greenTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.green.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.green.buttons .button:hover,\n.ui.green.button:hover {\n  background-color: @greenHover;\n  color: @greenTextColor;\n  text-shadow: @greenTextShadow;\n}\n.ui.green.buttons .button:focus,\n.ui.green.button:focus {\n  background-color: @greenFocus;\n  color: @greenTextColor;\n  text-shadow: @greenTextShadow;\n}\n.ui.green.buttons .button:active,\n.ui.green.button:active {\n  background-color: @greenDown;\n  color: @greenTextColor;\n  text-shadow: @greenTextShadow;\n}\n.ui.green.buttons .active.button,\n.ui.green.buttons .active.button:active,\n.ui.green.active.button,\n.ui.green.button .active.button:active {\n  background-color: @greenActive;\n  color: @greenTextColor;\n  text-shadow: @greenTextShadow;\n}\n\n\n/* Basic */\n.ui.basic.green.buttons .button,\n.ui.basic.green.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @green inset !important;\n  color: @green !important;\n}\n.ui.basic.green.buttons .button:hover,\n.ui.basic.green.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greenHover inset !important;\n  color: @greenHover !important;\n}\n.ui.basic.green.buttons .button:focus,\n.ui.basic.green.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greenFocus inset !important;\n  color: @greenHover !important;\n}\n.ui.basic.green.buttons .active.button,\n.ui.basic.green.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greenActive inset !important;\n  color: @greenDown !important;\n}\n.ui.basic.green.buttons .button:active,\n.ui.basic.green.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @greenDown inset !important;\n  color: @greenDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.green.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.green.buttons .button,\n.ui.inverted.green.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreen inset !important;\n  color: @lightGreen;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover,\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus,\n.ui.inverted.green.buttons .button.active,\n.ui.inverted.green.button.active,\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  box-shadow: none !important;\n  color: @greenTextColor;\n}\n.ui.inverted.green.buttons .button:hover,\n.ui.inverted.green.button:hover {\n  background-color: @lightGreenHover;\n}\n.ui.inverted.green.buttons .button:focus,\n.ui.inverted.green.button:focus {\n  background-color: @lightGreenFocus;\n}\n.ui.inverted.green.buttons .active.button,\n.ui.inverted.green.active.button {\n  background-color: @lightGreenActive;\n}\n.ui.inverted.green.buttons .button:active,\n.ui.inverted.green.button:active {\n  background-color: @lightGreenDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.green.basic.buttons .button,\n.ui.inverted.green.buttons .basic.button,\n.ui.inverted.green.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.green.basic.buttons .button:hover,\n.ui.inverted.green.buttons .basic.button:hover,\n.ui.inverted.green.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenHover inset !important;\n  color: @lightGreen !important;\n}\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.buttons .button:focus,\n.ui.inverted.green.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenFocus inset !important;\n  color: @lightGreen !important;\n}\n.ui.inverted.green.basic.buttons .active.button,\n.ui.inverted.green.buttons .basic.active.button,\n.ui.inverted.green.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenActive inset !important;\n  color: @lightGreen !important;\n}\n.ui.inverted.green.basic.buttons .button:active,\n.ui.inverted.green.buttons .basic.button:active,\n.ui.inverted.green.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightGreenDown inset !important;\n  color: @lightGreen !important;\n}\n\n/*--- Orange ---*/\n.ui.orange.buttons .button,\n.ui.orange.button {\n  background-color: @orange;\n  color: @orangeTextColor;\n  text-shadow: @orangeTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.orange.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.orange.buttons .button:hover,\n.ui.orange.button:hover {\n  background-color: @orangeHover;\n  color: @orangeTextColor;\n  text-shadow: @orangeTextShadow;\n}\n.ui.orange.buttons .button:focus,\n.ui.orange.button:focus {\n  background-color: @orangeFocus;\n  color: @orangeTextColor;\n  text-shadow: @orangeTextShadow;\n}\n.ui.orange.buttons .button:active,\n.ui.orange.button:active {\n  background-color: @orangeDown;\n  color: @orangeTextColor;\n  text-shadow: @orangeTextShadow;\n}\n.ui.orange.buttons .active.button,\n.ui.orange.buttons .active.button:active,\n.ui.orange.active.button,\n.ui.orange.button .active.button:active {\n  background-color: @orangeActive;\n  color: @orangeTextColor;\n  text-shadow: @orangeTextShadow;\n}\n\n/* Basic */\n.ui.basic.orange.buttons .button,\n.ui.basic.orange.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @orange inset !important;\n  color: @orange !important;\n}\n.ui.basic.orange.buttons .button:hover,\n.ui.basic.orange.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeHover inset !important;\n  color: @orangeHover !important;\n}\n.ui.basic.orange.buttons .button:focus,\n.ui.basic.orange.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeFocus inset !important;\n  color: @orangeHover !important;\n}\n.ui.basic.orange.buttons .active.button,\n.ui.basic.orange.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeActive inset !important;\n  color: @orangeDown !important;\n}\n.ui.basic.orange.buttons .button:active,\n.ui.basic.orange.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @orangeDown inset !important;\n  color: @orangeDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.orange.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.orange.buttons .button,\n.ui.inverted.orange.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOrange inset !important;\n  color: @lightOrange;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover,\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus,\n.ui.inverted.orange.buttons .button.active,\n.ui.inverted.orange.button.active,\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  box-shadow: none !important;\n  color: @lightOrangeTextColor;\n}\n.ui.inverted.orange.buttons .button:hover,\n.ui.inverted.orange.button:hover {\n  background-color: @lightOrangeHover;\n}\n.ui.inverted.orange.buttons .button:focus,\n.ui.inverted.orange.button:focus {\n  background-color: @lightOrangeFocus;\n}\n.ui.inverted.orange.buttons .active.button,\n.ui.inverted.orange.active.button {\n  background-color: @lightOrangeActive;\n}\n.ui.inverted.orange.buttons .button:active,\n.ui.inverted.orange.button:active {\n  background-color: @lightOrangeDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.orange.basic.buttons .button,\n.ui.inverted.orange.buttons .basic.button,\n.ui.inverted.orange.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.orange.basic.buttons .button:hover,\n.ui.inverted.orange.buttons .basic.button:hover,\n.ui.inverted.orange.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeHover inset !important;\n  color: @lightOrange !important;\n}\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.buttons .button:focus,\n.ui.inverted.orange.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeFocus inset !important;\n  color: @lightOrange !important;\n}\n.ui.inverted.orange.basic.buttons .active.button,\n.ui.inverted.orange.buttons .basic.active.button,\n.ui.inverted.orange.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeActive inset !important;\n  color: @lightOrange !important;\n}\n.ui.inverted.orange.basic.buttons .button:active,\n.ui.inverted.orange.buttons .basic.button:active,\n.ui.inverted.orange.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOrangeDown inset !important;\n  color: @lightOrange !important;\n}\n\n/*--- Pink ---*/\n.ui.pink.buttons .button,\n.ui.pink.button {\n  background-color: @pink;\n  color: @pinkTextColor;\n  text-shadow: @pinkTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.pink.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.pink.buttons .button:hover,\n.ui.pink.button:hover {\n  background-color: @pinkHover;\n  color: @pinkTextColor;\n  text-shadow: @pinkTextShadow;\n}\n.ui.pink.buttons .button:focus,\n.ui.pink.button:focus {\n  background-color: @pinkFocus;\n  color: @pinkTextColor;\n  text-shadow: @pinkTextShadow;\n}\n.ui.pink.buttons .button:active,\n.ui.pink.button:active {\n  background-color: @pinkDown;\n  color: @pinkTextColor;\n  text-shadow: @pinkTextShadow;\n}\n.ui.pink.buttons .active.button,\n.ui.pink.buttons .active.button:active,\n.ui.pink.active.button,\n.ui.pink.button .active.button:active {\n  background-color: @pinkActive;\n  color: @pinkTextColor;\n  text-shadow: @pinkTextShadow;\n}\n\n/* Basic */\n.ui.basic.pink.buttons .button,\n.ui.basic.pink.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @pink inset !important;\n  color: @pink !important;\n}\n.ui.basic.pink.buttons .button:hover,\n.ui.basic.pink.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkHover inset !important;\n  color: @pinkHover !important;\n}\n.ui.basic.pink.buttons .button:focus,\n.ui.basic.pink.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkFocus inset !important;\n  color: @pinkHover !important;\n}\n.ui.basic.pink.buttons .active.button,\n.ui.basic.pink.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkActive inset !important;\n  color: @pinkDown !important;\n}\n.ui.basic.pink.buttons .button:active,\n.ui.basic.pink.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @pinkDown inset !important;\n  color: @pinkDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.pink.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.pink.buttons .button,\n.ui.inverted.pink.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPink inset !important;\n  color: @lightPink;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover,\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus,\n.ui.inverted.pink.buttons .button.active,\n.ui.inverted.pink.button.active,\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  box-shadow: none !important;\n  color: @lightPinkTextColor;\n}\n.ui.inverted.pink.buttons .button:hover,\n.ui.inverted.pink.button:hover {\n  background-color: @lightPinkHover;\n}\n.ui.inverted.pink.buttons .button:focus,\n.ui.inverted.pink.button:focus {\n  background-color: @lightPinkFocus;\n}\n.ui.inverted.pink.buttons .active.button,\n.ui.inverted.pink.active.button {\n  background-color: @lightPinkActive;\n}\n.ui.inverted.pink.buttons .button:active,\n.ui.inverted.pink.button:active {\n  background-color: @lightPinkDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.pink.basic.buttons .button,\n.ui.inverted.pink.buttons .basic.button,\n.ui.inverted.pink.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.pink.basic.buttons .button:hover,\n.ui.inverted.pink.buttons .basic.button:hover,\n.ui.inverted.pink.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkHover inset !important;\n  color: @lightPink !important;\n}\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.buttons .button:focus,\n.ui.inverted.pink.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkFocus inset !important;\n  color: @lightPink !important;\n}\n.ui.inverted.pink.basic.buttons .active.button,\n.ui.inverted.pink.buttons .basic.active.button,\n.ui.inverted.pink.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkActive inset !important;\n  color: @lightPink !important;\n}\n.ui.inverted.pink.basic.buttons .button:active,\n.ui.inverted.pink.buttons .basic.button:active,\n.ui.inverted.pink.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPinkDown inset !important;\n  color: @lightPink !important;\n}\n\n\n/*--- Violet ---*/\n.ui.violet.buttons .button,\n.ui.violet.button {\n  background-color: @violet;\n  color: @violetTextColor;\n  text-shadow: @violetTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.violet.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.violet.buttons .button:hover,\n.ui.violet.button:hover {\n  background-color: @violetHover;\n  color: @violetTextColor;\n  text-shadow: @violetTextShadow;\n}\n.ui.violet.buttons .button:focus,\n.ui.violet.button:focus {\n  background-color: @violetFocus;\n  color: @violetTextColor;\n  text-shadow: @violetTextShadow;\n}\n.ui.violet.buttons .button:active,\n.ui.violet.button:active {\n  background-color: @violetDown;\n  color: @violetTextColor;\n  text-shadow: @violetTextShadow;\n}\n.ui.violet.buttons .active.button,\n.ui.violet.buttons .active.button:active,\n.ui.violet.active.button,\n.ui.violet.button .active.button:active {\n  background-color: @violetActive;\n  color: @violetTextColor;\n  text-shadow: @violetTextShadow;\n}\n\n/* Basic */\n.ui.basic.violet.buttons .button,\n.ui.basic.violet.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @violet inset !important;\n  color: @violet !important;\n}\n.ui.basic.violet.buttons .button:hover,\n.ui.basic.violet.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @violetHover inset !important;\n  color: @violetHover !important;\n}\n.ui.basic.violet.buttons .button:focus,\n.ui.basic.violet.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @violetFocus inset !important;\n  color: @violetHover !important;\n}\n.ui.basic.violet.buttons .active.button,\n.ui.basic.violet.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @violetActive inset !important;\n  color: @violetDown !important;\n}\n.ui.basic.violet.buttons .button:active,\n.ui.basic.violet.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @violetDown inset !important;\n  color: @violetDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.violet.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.violet.buttons .button,\n.ui.inverted.violet.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightViolet inset !important;\n  color: @lightViolet;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover,\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus,\n.ui.inverted.violet.buttons .button.active,\n.ui.inverted.violet.button.active,\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  box-shadow: none !important;\n  color: @lightVioletTextColor;\n}\n.ui.inverted.violet.buttons .button:hover,\n.ui.inverted.violet.button:hover {\n  background-color: @lightVioletHover;\n}\n.ui.inverted.violet.buttons .button:focus,\n.ui.inverted.violet.button:focus {\n  background-color: @lightVioletFocus;\n}\n.ui.inverted.violet.buttons .active.button,\n.ui.inverted.violet.active.button {\n  background-color: @lightVioletActive;\n}\n.ui.inverted.violet.buttons .button:active,\n.ui.inverted.violet.button:active {\n  background-color: @lightVioletDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.violet.basic.buttons .button,\n.ui.inverted.violet.buttons .basic.button,\n.ui.inverted.violet.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.violet.basic.buttons .button:hover,\n.ui.inverted.violet.buttons .basic.button:hover,\n.ui.inverted.violet.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletHover inset !important;\n  color: @lightViolet !important;\n}\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.buttons .button:focus,\n.ui.inverted.violet.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletFocus inset !important;\n  color: @lightViolet !important;\n}\n.ui.inverted.violet.basic.buttons .active.button,\n.ui.inverted.violet.buttons .basic.active.button,\n.ui.inverted.violet.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletActive inset !important;\n  color: @lightViolet !important;\n}\n.ui.inverted.violet.basic.buttons .button:active,\n.ui.inverted.violet.buttons .basic.button:active,\n.ui.inverted.violet.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightVioletDown inset !important;\n  color: @lightViolet !important;\n}\n\n/*--- Purple ---*/\n.ui.purple.buttons .button,\n.ui.purple.button {\n  background-color: @purple;\n  color: @purpleTextColor;\n  text-shadow: @purpleTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.purple.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.purple.buttons .button:hover,\n.ui.purple.button:hover {\n  background-color: @purpleHover;\n  color: @purpleTextColor;\n  text-shadow: @purpleTextShadow;\n}\n.ui.purple.buttons .button:focus,\n.ui.purple.button:focus {\n  background-color: @purpleFocus;\n  color: @purpleTextColor;\n  text-shadow: @purpleTextShadow;\n}\n.ui.purple.buttons .button:active,\n.ui.purple.button:active {\n  background-color: @purpleDown;\n  color: @purpleTextColor;\n  text-shadow: @purpleTextShadow;\n}\n.ui.purple.buttons .active.button,\n.ui.purple.buttons .active.button:active,\n.ui.purple.active.button,\n.ui.purple.button .active.button:active {\n  background-color: @purpleActive;\n  color: @purpleTextColor;\n  text-shadow: @purpleTextShadow;\n}\n\n/* Basic */\n.ui.basic.purple.buttons .button,\n.ui.basic.purple.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @purple inset !important;\n  color: @purple !important;\n}\n.ui.basic.purple.buttons .button:hover,\n.ui.basic.purple.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleHover inset !important;\n  color: @purpleHover !important;\n}\n.ui.basic.purple.buttons .button:focus,\n.ui.basic.purple.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleFocus inset !important;\n  color: @purpleHover !important;\n}\n.ui.basic.purple.buttons .active.button,\n.ui.basic.purple.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleActive inset !important;\n  color: @purpleDown !important;\n}\n.ui.basic.purple.buttons .button:active,\n.ui.basic.purple.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @purpleDown inset !important;\n  color: @purpleDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.purple.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.purple.buttons .button,\n.ui.inverted.purple.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPurple inset !important;\n  color: @lightPurple;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover,\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus,\n.ui.inverted.purple.buttons .button.active,\n.ui.inverted.purple.button.active,\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  box-shadow: none !important;\n  color: @lightPurpleTextColor;\n}\n.ui.inverted.purple.buttons .button:hover,\n.ui.inverted.purple.button:hover {\n  background-color: @lightPurpleHover;\n}\n.ui.inverted.purple.buttons .button:focus,\n.ui.inverted.purple.button:focus {\n  background-color: @lightPurpleFocus;\n}\n.ui.inverted.purple.buttons .active.button,\n.ui.inverted.purple.active.button {\n  background-color: @lightPurpleActive;\n}\n.ui.inverted.purple.buttons .button:active,\n.ui.inverted.purple.button:active {\n  background-color: @lightPurpleDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.purple.basic.buttons .button,\n.ui.inverted.purple.buttons .basic.button,\n.ui.inverted.purple.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.purple.basic.buttons .button:hover,\n.ui.inverted.purple.buttons .basic.button:hover,\n.ui.inverted.purple.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleHover inset !important;\n  color: @lightPurple !important;\n}\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.buttons .button:focus,\n.ui.inverted.purple.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleFocus inset !important;\n  color: @lightPurple !important;\n}\n.ui.inverted.purple.basic.buttons .active.button,\n.ui.inverted.purple.buttons .basic.active.button,\n.ui.inverted.purple.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleActive inset !important;\n  color: @lightPurple !important;\n}\n.ui.inverted.purple.basic.buttons .button:active,\n.ui.inverted.purple.buttons .basic.button:active,\n.ui.inverted.purple.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightPurpleDown inset !important;\n  color: @lightPurple !important;\n}\n\n/*--- Red ---*/\n.ui.red.buttons .button,\n.ui.red.button {\n  background-color: @red;\n  color: @redTextColor;\n  text-shadow: @redTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.red.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.red.buttons .button:hover,\n.ui.red.button:hover {\n  background-color: @redHover;\n  color: @redTextColor;\n  text-shadow: @redTextShadow;\n}\n.ui.red.buttons .button:focus,\n.ui.red.button:focus {\n  background-color: @redFocus;\n  color: @redTextColor;\n  text-shadow: @redTextShadow;\n}\n.ui.red.buttons .button:active,\n.ui.red.button:active {\n  background-color: @redDown;\n  color: @redTextColor;\n  text-shadow: @redTextShadow;\n}\n.ui.red.buttons .active.button,\n.ui.red.buttons .active.button:active,\n.ui.red.active.button,\n.ui.red.button .active.button:active {\n  background-color: @redActive;\n  color: @redTextColor;\n  text-shadow: @redTextShadow;\n}\n\n/* Basic */\n.ui.basic.red.buttons .button,\n.ui.basic.red.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @red inset !important;\n  color: @red !important;\n}\n.ui.basic.red.buttons .button:hover,\n.ui.basic.red.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @redHover inset !important;\n  color: @redHover !important;\n}\n.ui.basic.red.buttons .button:focus,\n.ui.basic.red.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @redFocus inset !important;\n  color: @redHover !important;\n}\n.ui.basic.red.buttons .active.button,\n.ui.basic.red.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @redActive inset !important;\n  color: @redDown !important;\n}\n.ui.basic.red.buttons .button:active,\n.ui.basic.red.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @redDown inset !important;\n  color: @redDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.red.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.red.buttons .button,\n.ui.inverted.red.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightRed inset !important;\n  color: @lightRed;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover,\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus,\n.ui.inverted.red.buttons .button.active,\n.ui.inverted.red.button.active,\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  box-shadow: none !important;\n  color: @lightRedTextColor;\n}\n.ui.inverted.red.buttons .button:hover,\n.ui.inverted.red.button:hover {\n  background-color: @lightRedHover;\n}\n.ui.inverted.red.buttons .button:focus,\n.ui.inverted.red.button:focus {\n  background-color: @lightRedFocus;\n}\n.ui.inverted.red.buttons .active.button,\n.ui.inverted.red.active.button {\n  background-color: @lightRedActive;\n}\n.ui.inverted.red.buttons .button:active,\n.ui.inverted.red.button:active {\n  background-color: @lightRedDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.red.basic.buttons .button,\n.ui.inverted.red.buttons .basic.button,\n.ui.inverted.red.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.red.basic.buttons .button:hover,\n.ui.inverted.red.buttons .basic.button:hover,\n.ui.inverted.red.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightRedHover inset !important;\n  color: @lightRed !important;\n}\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.buttons .button:focus,\n.ui.inverted.red.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightRedFocus inset !important;\n  color: @lightRed !important;\n}\n.ui.inverted.red.basic.buttons .active.button,\n.ui.inverted.red.buttons .basic.active.button,\n.ui.inverted.red.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightRedActive inset !important;\n  color: @lightRed !important;\n}\n.ui.inverted.red.basic.buttons .button:active,\n.ui.inverted.red.buttons .basic.button:active,\n.ui.inverted.red.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightRedDown inset !important;\n  color: @lightRed !important;\n}\n\n\n/*--- Teal ---*/\n.ui.teal.buttons .button,\n.ui.teal.button {\n  background-color: @teal;\n  color: @tealTextColor;\n  text-shadow: @tealTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.teal.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.teal.buttons .button:hover,\n.ui.teal.button:hover {\n  background-color: @tealHover;\n  color: @tealTextColor;\n  text-shadow: @tealTextShadow;\n}\n.ui.teal.buttons .button:focus,\n.ui.teal.button:focus {\n  background-color: @tealFocus;\n  color: @tealTextColor;\n  text-shadow: @tealTextShadow;\n}\n.ui.teal.buttons .button:active,\n.ui.teal.button:active {\n  background-color: @tealDown;\n  color: @tealTextColor;\n  text-shadow: @tealTextShadow;\n}\n.ui.teal.buttons .active.button,\n.ui.teal.buttons .active.button:active,\n.ui.teal.active.button,\n.ui.teal.button .active.button:active {\n  background-color: @tealActive;\n  color: @tealTextColor;\n  text-shadow: @tealTextShadow;\n}\n\n/* Basic */\n.ui.basic.teal.buttons .button,\n.ui.basic.teal.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @teal inset !important;\n  color: @teal !important;\n}\n.ui.basic.teal.buttons .button:hover,\n.ui.basic.teal.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @tealHover inset !important;\n  color: @tealHover !important;\n}\n.ui.basic.teal.buttons .button:focus,\n.ui.basic.teal.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @tealFocus inset !important;\n  color: @tealHover !important;\n}\n.ui.basic.teal.buttons .active.button,\n.ui.basic.teal.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @tealActive inset !important;\n  color: @tealDown !important;\n}\n.ui.basic.teal.buttons .button:active,\n.ui.basic.teal.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @tealDown inset !important;\n  color: @tealDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.teal.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.teal.buttons .button,\n.ui.inverted.teal.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightTeal inset !important;\n  color: @lightTeal;\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover,\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus,\n.ui.inverted.teal.buttons .button.active,\n.ui.inverted.teal.button.active,\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  box-shadow: none !important;\n  color: @lightTealTextColor;\n}\n.ui.inverted.teal.buttons .button:hover,\n.ui.inverted.teal.button:hover {\n  background-color: @lightTealHover;\n}\n.ui.inverted.teal.buttons .button:focus,\n.ui.inverted.teal.button:focus {\n  background-color: @lightTealFocus;\n}\n.ui.inverted.teal.buttons .active.button,\n.ui.inverted.teal.active.button {\n  background-color: @lightTealActive;\n}\n.ui.inverted.teal.buttons .button:active,\n.ui.inverted.teal.button:active {\n  background-color: @lightTealDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.teal.basic.buttons .button,\n.ui.inverted.teal.buttons .basic.button,\n.ui.inverted.teal.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.teal.basic.buttons .button:hover,\n.ui.inverted.teal.buttons .basic.button:hover,\n.ui.inverted.teal.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightTealHover inset !important;\n  color: @lightTeal !important;\n}\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.buttons .button:focus,\n.ui.inverted.teal.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightTealFocus inset !important;\n  color: @lightTeal !important;\n}\n.ui.inverted.teal.basic.buttons .active.button,\n.ui.inverted.teal.buttons .basic.active.button,\n.ui.inverted.teal.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightTealActive inset !important;\n  color: @lightTeal !important;\n}\n.ui.inverted.teal.basic.buttons .button:active,\n.ui.inverted.teal.buttons .basic.button:active,\n.ui.inverted.teal.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightTealDown inset !important;\n  color: @lightTeal !important;\n}\n\n\n/*--- Olive ---*/\n.ui.olive.buttons .button,\n.ui.olive.button {\n  background-color: @olive;\n  color: @oliveTextColor;\n  text-shadow: @oliveTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.olive.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.olive.buttons .button:hover,\n.ui.olive.button:hover {\n  background-color: @oliveHover;\n  color: @oliveTextColor;\n  text-shadow: @oliveTextShadow;\n}\n.ui.olive.buttons .button:focus,\n.ui.olive.button:focus {\n  background-color: @oliveFocus;\n  color: @oliveTextColor;\n  text-shadow: @oliveTextShadow;\n}\n.ui.olive.buttons .button:active,\n.ui.olive.button:active {\n  background-color: @oliveDown;\n  color: @oliveTextColor;\n  text-shadow: @oliveTextShadow;\n}\n.ui.olive.buttons .active.button,\n.ui.olive.buttons .active.button:active,\n.ui.olive.active.button,\n.ui.olive.button .active.button:active {\n  background-color: @oliveActive;\n  color: @oliveTextColor;\n  text-shadow: @oliveTextShadow;\n}\n\n/* Basic */\n.ui.basic.olive.buttons .button,\n.ui.basic.olive.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @olive inset !important;\n  color: @olive !important;\n}\n.ui.basic.olive.buttons .button:hover,\n.ui.basic.olive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveHover inset !important;\n  color: @oliveHover !important;\n}\n.ui.basic.olive.buttons .button:focus,\n.ui.basic.olive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveFocus inset !important;\n  color: @oliveHover !important;\n}\n.ui.basic.olive.buttons .active.button,\n.ui.basic.olive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveActive inset !important;\n  color: @oliveDown !important;\n}\n.ui.basic.olive.buttons .button:active,\n.ui.basic.olive.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @oliveDown inset !important;\n  color: @oliveDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.olive.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.olive.buttons .button,\n.ui.inverted.olive.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOlive inset !important;\n  color: @lightOlive;\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover,\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus,\n.ui.inverted.olive.buttons .button.active,\n.ui.inverted.olive.button.active,\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  box-shadow: none !important;\n  color: @lightOliveTextColor;\n}\n.ui.inverted.olive.buttons .button:hover,\n.ui.inverted.olive.button:hover {\n  background-color: @lightOliveHover;\n}\n.ui.inverted.olive.buttons .button:focus,\n.ui.inverted.olive.button:focus {\n  background-color: @lightOliveFocus;\n}\n.ui.inverted.olive.buttons .active.button,\n.ui.inverted.olive.active.button {\n  background-color: @lightOliveActive;\n}\n.ui.inverted.olive.buttons .button:active,\n.ui.inverted.olive.button:active {\n  background-color: @lightOliveDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.olive.basic.buttons .button,\n.ui.inverted.olive.buttons .basic.button,\n.ui.inverted.olive.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.olive.basic.buttons .button:hover,\n.ui.inverted.olive.buttons .basic.button:hover,\n.ui.inverted.olive.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveHover inset !important;\n  color: @lightOlive !important;\n}\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.buttons .button:focus,\n.ui.inverted.olive.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveFocus inset !important;\n  color: @lightOlive !important;\n}\n.ui.inverted.olive.basic.buttons .active.button,\n.ui.inverted.olive.buttons .basic.active.button,\n.ui.inverted.olive.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveActive inset !important;\n  color: @lightOlive !important;\n}\n.ui.inverted.olive.basic.buttons .button:active,\n.ui.inverted.olive.buttons .basic.button:active,\n.ui.inverted.olive.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightOliveDown inset !important;\n  color: @lightOlive !important;\n}\n\n/*--- Yellow ---*/\n.ui.yellow.buttons .button,\n.ui.yellow.button {\n  background-color: @yellow;\n  color: @yellowTextColor;\n  text-shadow: @yellowTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.yellow.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.yellow.buttons .button:hover,\n.ui.yellow.button:hover {\n  background-color: @yellowHover;\n  color: @yellowTextColor;\n  text-shadow: @yellowTextShadow;\n}\n.ui.yellow.buttons .button:focus,\n.ui.yellow.button:focus {\n  background-color: @yellowFocus;\n  color: @yellowTextColor;\n  text-shadow: @yellowTextShadow;\n}\n.ui.yellow.buttons .button:active,\n.ui.yellow.button:active {\n  background-color: @yellowDown;\n  color: @yellowTextColor;\n  text-shadow: @yellowTextShadow;\n}\n.ui.yellow.buttons .active.button,\n.ui.yellow.buttons .active.button:active,\n.ui.yellow.active.button,\n.ui.yellow.button .active.button:active {\n  background-color: @yellowActive;\n  color: @yellowTextColor;\n  text-shadow: @yellowTextShadow;\n}\n\n/* Basic */\n.ui.basic.yellow.buttons .button,\n.ui.basic.yellow.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @yellow inset !important;\n  color: @yellow !important;\n}\n.ui.basic.yellow.buttons .button:hover,\n.ui.basic.yellow.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowHover inset !important;\n  color: @yellowHover !important;\n}\n.ui.basic.yellow.buttons .button:focus,\n.ui.basic.yellow.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowFocus inset !important;\n  color: @yellowHover !important;\n}\n.ui.basic.yellow.buttons .active.button,\n.ui.basic.yellow.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowActive inset !important;\n  color: @yellowDown !important;\n}\n.ui.basic.yellow.buttons .button:active,\n.ui.basic.yellow.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @yellowDown inset !important;\n  color: @yellowDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.yellow.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/* Inverted */\n.ui.inverted.yellow.buttons .button,\n.ui.inverted.yellow.button {\n  background-color: transparent;\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightYellow inset !important;\n  color: @lightYellow;\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover,\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus,\n.ui.inverted.yellow.buttons .button.active,\n.ui.inverted.yellow.button.active,\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  box-shadow: none !important;\n  color: @lightYellowTextColor;\n}\n.ui.inverted.yellow.buttons .button:hover,\n.ui.inverted.yellow.button:hover {\n  background-color: @lightYellowHover;\n}\n.ui.inverted.yellow.buttons .button:focus,\n.ui.inverted.yellow.button:focus {\n  background-color: @lightYellowFocus;\n}\n.ui.inverted.yellow.buttons .active.button,\n.ui.inverted.yellow.active.button {\n  background-color: @lightYellowActive;\n}\n.ui.inverted.yellow.buttons .button:active,\n.ui.inverted.yellow.button:active {\n  background-color: @lightYellowDown;\n}\n\n/* Inverted Basic */\n.ui.inverted.yellow.basic.buttons .button,\n.ui.inverted.yellow.buttons .basic.button,\n.ui.inverted.yellow.basic.button {\n  background-color: transparent;\n  box-shadow: @basicInvertedBoxShadow !important;\n  color: @white !important;\n}\n.ui.inverted.yellow.basic.buttons .button:hover,\n.ui.inverted.yellow.buttons .basic.button:hover,\n.ui.inverted.yellow.basic.button:hover {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowHover inset !important;\n  color: @lightYellow !important;\n}\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.buttons .button:focus,\n.ui.inverted.yellow.basic.button:focus {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowFocus inset !important;\n  color: @lightYellow !important;\n}\n.ui.inverted.yellow.basic.buttons .active.button,\n.ui.inverted.yellow.buttons .basic.active.button,\n.ui.inverted.yellow.basic.active.button {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowActive inset !important;\n  color: @lightYellow !important;\n}\n.ui.inverted.yellow.basic.buttons .button:active,\n.ui.inverted.yellow.buttons .basic.button:active,\n.ui.inverted.yellow.basic.button:active {\n  box-shadow: 0px 0px 0px @invertedBorderSize @lightYellowDown inset !important;\n  color: @lightYellow !important;\n}\n\n\n/*-------------------\n       Primary\n--------------------*/\n\n/*--- Standard ---*/\n.ui.primary.buttons .button,\n.ui.primary.button {\n  background-color: @primaryColor;\n  color: @primaryTextColor;\n  text-shadow: @primaryTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.primary.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.primary.buttons .button:hover,\n.ui.primary.button:hover {\n  background-color: @primaryColorHover;\n  color: @primaryTextColor;\n  text-shadow: @primaryTextShadow;\n}\n.ui.primary.buttons .button:focus,\n.ui.primary.button:focus {\n  background-color: @primaryColorFocus;\n  color: @primaryTextColor;\n  text-shadow: @primaryTextShadow;\n}\n.ui.primary.buttons .button:active,\n.ui.primary.button:active {\n  background-color: @primaryColorDown;\n  color: @primaryTextColor;\n  text-shadow: @primaryTextShadow;\n}\n.ui.primary.buttons .active.button,\n.ui.primary.buttons .active.button:active,\n.ui.primary.active.button,\n.ui.primary.button .active.button:active {\n  background-color: @primaryColorActive;\n  color: @primaryTextColor;\n  text-shadow: @primaryTextShadow;\n}\n\n/* Basic */\n.ui.basic.primary.buttons .button,\n.ui.basic.primary.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @primaryColor inset !important;\n  color: @primaryColor !important;\n}\n.ui.basic.primary.buttons .button:hover,\n.ui.basic.primary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @primaryColorHover inset !important;\n  color: @primaryColorHover !important;\n}\n.ui.basic.primary.buttons .button:focus,\n.ui.basic.primary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @primaryColorFocus inset !important;\n  color: @primaryColorHover !important;\n}\n.ui.basic.primary.buttons .active.button,\n.ui.basic.primary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @primaryColorActive inset !important;\n  color: @primaryColorDown !important;\n}\n.ui.basic.primary.buttons .button:active,\n.ui.basic.primary.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @primaryColorDown inset !important;\n  color: @primaryColorDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/*-------------------\n      Secondary\n--------------------*/\n\n/* Standard */\n.ui.secondary.buttons .button,\n.ui.secondary.button {\n  background-color: @secondaryColor;\n  color: @secondaryTextColor;\n  text-shadow: @secondaryTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.secondary.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.secondary.buttons .button:hover,\n.ui.secondary.button:hover {\n  background-color: @secondaryColorHover;\n  color: @secondaryTextColor;\n  text-shadow: @secondaryTextShadow;\n}\n.ui.secondary.buttons .button:focus,\n.ui.secondary.button:focus {\n  background-color: @secondaryColorFocus;\n  color: @secondaryTextColor;\n  text-shadow: @secondaryTextShadow;\n}\n.ui.secondary.buttons .button:active,\n.ui.secondary.button:active {\n  background-color: @secondaryColorDown;\n  color: @secondaryTextColor;\n  text-shadow: @secondaryTextShadow;\n}\n.ui.secondary.buttons .active.button,\n.ui.secondary.buttons .active.button:active,\n.ui.secondary.active.button,\n.ui.secondary.button .active.button:active {\n  background-color: @secondaryColorActive;\n  color: @secondaryTextColor;\n  text-shadow: @secondaryTextShadow;\n}\n\n/* Basic */\n.ui.basic.secondary.buttons .button,\n.ui.basic.secondary.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @secondaryColor inset !important;\n  color: @secondaryColor !important;\n}\n.ui.basic.secondary.buttons .button:hover,\n.ui.basic.secondary.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @secondaryColorHover inset !important;\n  color: @secondaryColorHover !important;\n}\n.ui.basic.secondary.buttons .button:focus,\n.ui.basic.secondary.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @secondaryColorFocus inset !important;\n  color: @secondaryColorHover !important;\n}\n.ui.basic.secondary.buttons .active.button,\n.ui.basic.secondary.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @secondaryColorActive inset !important;\n  color: @secondaryColorDown !important;\n}\n.ui.basic.secondary.buttons .button:active,\n.ui.basic.secondary.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @secondaryColorDown inset !important;\n  color: @secondaryColorDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/*---------------\n    Positive\n----------------*/\n\n/* Standard */\n.ui.positive.buttons .button,\n.ui.positive.button {\n  background-color: @positiveColor;\n  color: @positiveTextColor;\n  text-shadow: @positiveTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.positive.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.positive.buttons .button:hover,\n.ui.positive.button:hover {\n  background-color: @positiveColorHover;\n  color: @positiveTextColor;\n  text-shadow: @positiveTextShadow;\n}\n.ui.positive.buttons .button:focus,\n.ui.positive.button:focus {\n  background-color: @positiveColorFocus;\n  color: @positiveTextColor;\n  text-shadow: @positiveTextShadow;\n}\n.ui.positive.buttons .button:active,\n.ui.positive.button:active {\n  background-color: @positiveColorDown;\n  color: @positiveTextColor;\n  text-shadow: @positiveTextShadow;\n}\n.ui.positive.buttons .active.button,\n.ui.positive.buttons .active.button:active,\n.ui.positive.active.button,\n.ui.positive.button .active.button:active {\n  background-color: @positiveColorActive;\n  color: @positiveTextColor;\n  text-shadow: @positiveTextShadow;\n}\n\n/* Basic */\n.ui.basic.positive.buttons .button,\n.ui.basic.positive.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @positiveColor inset !important;\n  color: @positiveColor !important;\n}\n.ui.basic.positive.buttons .button:hover,\n.ui.basic.positive.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @positiveColorHover inset !important;\n  color: @positiveColorHover !important;\n}\n.ui.basic.positive.buttons .button:focus,\n.ui.basic.positive.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @positiveColorFocus inset !important;\n  color: @positiveColorHover !important;\n}\n.ui.basic.positive.buttons .active.button,\n.ui.basic.positive.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @positiveColorActive inset !important;\n  color: @positiveColorDown !important;\n}\n.ui.basic.positive.buttons .button:active,\n.ui.basic.positive.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @positiveColorDown inset !important;\n  color: @positiveColorDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/*---------------\n     Negative\n----------------*/\n\n/* Standard */\n.ui.negative.buttons .button,\n.ui.negative.button {\n  background-color: @negativeColor;\n  color: @negativeTextColor;\n  text-shadow: @negativeTextShadow;\n  background-image: @coloredBackgroundImage;\n}\n.ui.negative.button {\n  box-shadow: @coloredBoxShadow;\n}\n.ui.negative.buttons .button:hover,\n.ui.negative.button:hover {\n  background-color: @negativeColorHover;\n  color: @negativeTextColor;\n  text-shadow: @negativeTextShadow;\n}\n.ui.negative.buttons .button:focus,\n.ui.negative.button:focus {\n  background-color: @negativeColorFocus;\n  color: @negativeTextColor;\n  text-shadow: @negativeTextShadow;\n}\n.ui.negative.buttons .button:active,\n.ui.negative.button:active {\n  background-color: @negativeColorDown;\n  color: @negativeTextColor;\n  text-shadow: @negativeTextShadow;\n}\n.ui.negative.buttons .active.button,\n.ui.negative.buttons .active.button:active,\n.ui.negative.active.button,\n.ui.negative.button .active.button:active {\n  background-color: @negativeColorActive;\n  color: @negativeTextColor;\n  text-shadow: @negativeTextShadow;\n}\n\n/* Basic */\n.ui.basic.negative.buttons .button,\n.ui.basic.negative.button {\n  box-shadow: 0px 0px 0px @basicBorderSize @negativeColor inset !important;\n  color: @negativeColor !important;\n}\n.ui.basic.negative.buttons .button:hover,\n.ui.basic.negative.button:hover {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @negativeColorHover inset !important;\n  color: @negativeColorHover !important;\n}\n.ui.basic.negative.buttons .button:focus,\n.ui.basic.negative.button:focus {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @negativeColorFocus inset !important;\n  color: @negativeColorHover !important;\n}\n.ui.basic.negative.buttons .active.button,\n.ui.basic.negative.active.button {\n  background: transparent !important;\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @negativeColorActive inset !important;\n  color: @negativeColorDown !important;\n}\n.ui.basic.negative.buttons .button:active,\n.ui.basic.negative.button:active {\n  box-shadow: 0px 0px 0px @basicColoredBorderSize @negativeColorDown inset !important;\n  color: @negativeColorDown !important;\n}\n.ui.buttons:not(.vertical) > .basic.primary.button:not(:first-child) {\n  margin-left: -@basicColoredBorderSize;\n}\n\n/*******************************\n            Groups\n*******************************/\n\n.ui.buttons {\n  display: inline-flex;\n  flex-direction: row;\n  font-size: 0em;\n  vertical-align: baseline;\n  margin: @verticalMargin @horizontalMargin 0em 0em;\n}\n.ui.buttons:not(.basic):not(.inverted) {\n  box-shadow: @groupBoxShadow;\n}\n\n/* Clearfix */\n.ui.buttons:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/* Standard Group */\n.ui.buttons .button {\n  flex: 1 0 auto;\n  margin: 0em;\n  border-radius: 0em;\n  margin: @groupButtonOffset;\n}\n.ui.buttons > .ui.button:not(.basic):not(.inverted),\n.ui.buttons:not(.basic):not(.inverted) > .button {\n  box-shadow: @groupButtonBoxShadow;\n}\n\n.ui.buttons .button:first-child {\n  border-left: none;\n  margin-left: 0em;\n  border-top-left-radius: @borderRadius;\n  border-bottom-left-radius: @borderRadius;\n}\n.ui.buttons .button:last-child {\n  border-top-right-radius: @borderRadius;\n  border-bottom-right-radius: @borderRadius;\n}\n\n/* Vertical  Style */\n.ui.vertical.buttons {\n  display: inline-flex;\n  flex-direction: column;\n}\n.ui.vertical.buttons .button {\n  display: block;\n  float: none;\n  width: 100%;\n  margin: @verticalGroupOffset;\n  box-shadow: @verticalBoxShadow;\n  border-radius: 0em;\n}\n.ui.vertical.buttons .button:first-child {\n  border-top-left-radius: @borderRadius;\n  border-top-right-radius: @borderRadius;\n}\n.ui.vertical.buttons .button:last-child {\n  margin-bottom: 0px;\n  border-bottom-left-radius: @borderRadius;\n  border-bottom-right-radius: @borderRadius;\n}\n.ui.vertical.buttons .button:only-child {\n  border-radius: @borderRadius;\n}\n\n.loadUIOverrides();\n\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/container.less",
    "content": "/*!\n * # Semantic UI - Container\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'container';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Container\n*******************************/\n\n/* All Sizes */\n.ui.container {\n  display: block;\n  max-width: @maxWidth !important;\n}\n\n/* Mobile */\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.container {\n    width: @mobileWidth !important;\n    margin-left: @mobileGutter !important;\n    margin-right: @mobileGutter !important;\n  }\n  .ui.grid.container {\n    width: @mobileGridWidth !important;\n  }\n  .ui.relaxed.grid.container {\n    width: @mobileRelaxedGridWidth !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: @mobileVeryRelaxedGridWidth !important;\n  }\n}\n\n/* Tablet */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui.container {\n    width: @tabletWidth;\n    margin-left: @tabletGutter !important;\n    margin-right: @tabletGutter !important;\n  }\n  .ui.grid.container {\n    width: @tabletGridWidth !important;\n  }\n  .ui.relaxed.grid.container {\n    width: @tabletRelaxedGridWidth !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: @tabletVeryRelaxedGridWidth !important;\n  }\n}\n\n/* Small Monitor */\n@media only screen and (min-width: @computerBreakpoint) and (max-width: @largestSmallMonitor) {\n  .ui.container {\n    width: @computerWidth;\n    margin-left: @computerGutter !important;\n    margin-right: @computerGutter !important;\n  }\n  .ui.grid.container {\n    width: @computerGridWidth !important;\n  }\n  .ui.relaxed.grid.container {\n    width: @computerRelaxedGridWidth !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: @computerVeryRelaxedGridWidth !important;\n  }\n}\n\n/* Large Monitor */\n@media only screen and (min-width: @largeMonitorBreakpoint) {\n  .ui.container {\n    width: @largeMonitorWidth;\n    margin-left: @largeMonitorGutter !important;\n    margin-right: @largeMonitorGutter !important;\n  }\n  .ui.grid.container {\n    width: @largeMonitorGridWidth !important;\n  }\n  .ui.relaxed.grid.container {\n    width: @largeMonitorRelaxedGridWidth !important;\n  }\n  .ui.very.relaxed.grid.container {\n    width: @largeMonitorVeryRelaxedGridWidth !important;\n  }\n}\n\n/*******************************\n             Types\n*******************************/\n\n\n/* Text Container */\n.ui.text.container {\n  font-family: @textFontFamily;\n  max-width: @textWidth !important;\n  line-height: @textLineHeight;\n}\n\n.ui.text.container {\n  font-size: @textSize;\n}\n\n/* Fluid */\n.ui.fluid.container {\n  width: 100%;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui[class*=\"left aligned\"].container {\n  text-align: left;\n}\n.ui[class*=\"center aligned\"].container {\n  text-align: center;\n}\n.ui[class*=\"right aligned\"].container {\n  text-align: right;\n}\n.ui.justified.container {\n  text-align: justify;\n  hyphens: auto;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/divider.less",
    "content": "/*!\n * # Semantic UI - Divider\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'divider';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n            Divider\n*******************************/\n\n.ui.divider {\n  margin: @margin;\n\n  line-height: 1;\n  height: 0em;\n\n  font-weight: @fontWeight;\n  text-transform: @textTransform;\n  letter-spacing: @letterSpacing;\n  color: @color;\n\n  user-select: none;\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*--------------\n      Basic\n---------------*/\n\n.ui.divider:not(.vertical):not(.horizontal) {\n  border-top: @shadowWidth solid @shadowColor;\n  border-bottom: @highlightWidth solid @highlightColor;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Allow divider between each column row */\n.ui.grid > .column + .divider,\n.ui.grid > .row > .column + .divider {\n  left: auto;\n}\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.divider {\n  display: table;\n  white-space: nowrap;\n\n  height: auto;\n  margin: @horizontalMargin;\n  line-height: 1;\n  text-align: center;\n}\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  content: '';\n  display: table-cell;\n  position: relative;\n  top: 50%;\n  width: 50%;\n  background-repeat: no-repeat;\n}\n\n.ui.horizontal.divider:before {\n  background-position: right @horizontalDividerMargin top 50%;\n}\n.ui.horizontal.divider:after {\n  background-position: left @horizontalDividerMargin top 50%;\n}\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.divider {\n  position: absolute;\n  z-index: 2;\n  top: 50%;\n  left: 50%;\n\n  margin: 0rem;\n  padding: 0em;\n  width: auto;\n  height: 50%;\n\n  line-height: 0em;\n  text-align: center;\n  transform: translateX(-50%);\n}\n\n.ui.vertical.divider:before,\n.ui.vertical.divider:after {\n  position: absolute;\n  left: 50%;\n  content: '';\n  z-index: 3;\n\n  border-left: @shadowWidth solid @shadowColor;\n  border-right: @highlightWidth solid @highlightColor;\n\n  width: 0%;\n  height: @verticalDividerHeight;\n}\n\n.ui.vertical.divider:before {\n  top: -100%;\n}\n.ui.vertical.divider:after {\n  top: auto;\n  bottom: 0px;\n}\n\n/* Inside grid */\n@media only screen and (max-width : @largestMobileScreen) {\n\n  .ui.stackable.grid .ui.vertical.divider,\n  .ui.grid .stackable.row .ui.vertical.divider {\n    display: table;\n    white-space: nowrap;\n    height: auto;\n    margin: @horizontalMargin;\n    overflow: hidden;\n    line-height: 1;\n    text-align: center;\n    position: static;\n    top: 0;\n    left: 0;\n    transform: none;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    position: static;\n    left: 0;\n    border-left: none;\n    border-right: none;\n    content: '';\n    display: table-cell;\n    position: relative;\n    top: 50%;\n    width: 50%;\n    background-repeat: no-repeat;\n  }\n\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before {\n    background-position: right @horizontalDividerMargin top 50%;\n  }\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-position: left @horizontalDividerMargin top 50%;\n  }\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.divider > .icon {\n  margin: @dividerIconMargin;\n  font-size: @dividerIconSize;\n  height: 1em;\n  vertical-align: middle;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n    Hidden\n---------------*/\n\n.ui.hidden.divider {\n  border-color: transparent !important;\n}\n.ui.hidden.divider:before,\n.ui.hidden.divider:after {\n  display: none;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.divider.inverted,\n.ui.vertical.inverted.divider,\n.ui.horizontal.inverted.divider {\n  color: @invertedTextColor;\n}\n.ui.divider.inverted,\n.ui.divider.inverted:after,\n.ui.divider.inverted:before {\n  border-top-color: @invertedShadowColor !important;\n  border-left-color: @invertedShadowColor !important;\n  border-bottom-color: @invertedHighlightColor !important;\n  border-right-color: @invertedHighlightColor !important;\n}\n\n/*--------------\n    Fitted\n---------------*/\n\n.ui.fitted.divider {\n  margin: 0em;\n}\n\n/*--------------\n    Clearing\n---------------*/\n\n.ui.clearing.divider {\n  clear: both;\n}\n\n/*--------------\n    Section\n---------------*/\n\n.ui.section.divider {\n  margin-top: @sectionMargin;\n  margin-bottom: @sectionMargin;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.divider {\n  font-size: @medium;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/flag.less",
    "content": "/*!\n * # Semantic UI - Flag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'flag';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n             Flag\n*******************************/\n\ni.flag:not(.icon) {\n  display: inline-block;\n\n  width: @width;\n  height: @height;\n\n  line-height: @height;\n  vertical-align: @verticalAlign;\n  margin: 0em @margin 0em 0em;\n\n  text-decoration: inherit;\n\n  speak: none;\n  font-smoothing: antialiased;\n  backface-visibility: hidden;\n}\n\n/* Sprite */\ni.flag:not(.icon):before {\n  display: inline-block;\n  content: '';\n  background: url(@spritePath) no-repeat -108px -1976px;\n  width: @width;\n  height: @height;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/header.less",
    "content": "/*!\n * # Semantic UI - Header\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'header';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n            Header\n*******************************/\n\n/* Standard */\n.ui.header {\n  border: none;\n  margin: @margin;\n  padding: @verticalPadding @horizontalPadding;\n  font-family: @fontFamily;\n  font-weight: @fontWeight;\n  line-height: @lineHeight;\n  text-transform: @textTransform;\n  color: @textColor;\n}\n\n.ui.header:first-child {\n  margin-top: @firstMargin;\n}\n.ui.header:last-child {\n  margin-bottom: @lastMargin;\n}\n\n/*--------------\n   Sub Header\n---------------*/\n\n.ui.header .sub.header {\n  display: block;\n  font-weight: normal;\n  padding: 0em;\n  margin: @subHeaderMargin;\n  font-size: @subHeaderFontSize;\n  line-height: @subHeaderLineHeight;\n  color: @subHeaderColor;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.header > .icon {\n  display: table-cell;\n  opacity: @iconOpacity;\n  font-size: @iconSize;\n  padding-top: @iconOffset;\n  vertical-align: @iconAlignment;\n}\n\n/* With Text Node */\n.ui.header .icon:only-child {\n  display: inline-block;\n  padding: 0em;\n  margin-right: @iconMargin;\n}\n\n/*-------------------\n        Image\n--------------------*/\n\n.ui.header > .image:not(.icon),\n.ui.header > img {\n  display: inline-block;\n  margin-top: @imageOffset;\n  width: @imageWidth;\n  height: @imageHeight;\n  vertical-align: @imageAlignment;\n}\n.ui.header > .image:not(.icon):only-child,\n.ui.header > img:only-child {\n  margin-right: @imageMargin;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.header .content {\n  display: inline-block;\n  vertical-align: @contentAlignment;\n}\n\n/* After Image */\n.ui.header > img + .content,\n.ui.header > .image + .content {\n  padding-left: @imageMargin;\n  vertical-align: @contentImageAlignment;\n}\n\n/* After Icon */\n.ui.header > .icon + .content {\n  padding-left: @iconMargin;\n  display: table-cell;\n  vertical-align: @contentIconAlignment;\n}\n\n\n/*--------------\n Loose Coupling\n---------------*/\n\n.ui.header .ui.label {\n  font-size: @labelSize;\n  margin-left: @labelDistance;\n  vertical-align: @labelVerticalAlign;\n}\n\n/* Positioning */\n.ui.header + p {\n  margin-top: @nextParagraphDistance;\n}\n\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/*--------------\n     Page\n---------------*/\n\nh1.ui.header {\n  font-size: @h1;\n}\nh2.ui.header {\n  font-size: @h2;\n}\nh3.ui.header {\n  font-size: @h3;\n}\nh4.ui.header {\n  font-size: @h4;\n}\nh5.ui.header {\n  font-size: @h5;\n}\n\n\n/* Sub Header */\nh1.ui.header .sub.header {\n  font-size: @h1SubHeaderFontSize;\n}\nh2.ui.header .sub.header {\n  font-size: @h2SubHeaderFontSize;\n}\nh3.ui.header .sub.header {\n  font-size: @h3SubHeaderFontSize;\n}\nh4.ui.header .sub.header {\n  font-size: @h4SubHeaderFontSize;\n}\nh5.ui.header .sub.header {\n  font-size: @h5SubHeaderFontSize;\n}\n\n\n/*--------------\n Content Heading\n---------------*/\n\n.ui.huge.header {\n  min-height: 1em;\n  font-size: @hugeFontSize;\n}\n.ui.large.header {\n  font-size: @largeFontSize;\n}\n.ui.medium.header {\n  font-size: @mediumFontSize;\n}\n.ui.small.header {\n  font-size: @smallFontSize;\n}\n.ui.tiny.header {\n  font-size: @tinyFontSize;\n}\n\n/* Sub Header */\n.ui.huge.header .sub.header {\n  font-size: @hugeSubHeaderFontSize;\n}\n.ui.large.header .sub.header {\n  font-size: @hugeSubHeaderFontSize;\n}\n.ui.header .sub.header {\n  font-size: @subHeaderFontSize;\n}\n.ui.small.header .sub.header {\n  font-size: @smallSubHeaderFontSize;\n}\n.ui.tiny.header .sub.header {\n  font-size: @tinySubHeaderFontSize;\n}\n\n/*--------------\n   Sub Heading\n---------------*/\n\n.ui.sub.header {\n  padding: 0em;\n  margin-bottom: @subHeadingDistance;\n  font-weight: @subHeadingFontWeight;\n  font-size: @subHeadingFontSize;\n  text-transform: @subHeadingTextTransform;\n  color: @subHeadingColor;\n}\n\n.ui.small.sub.header {\n  font-size: @smallSubHeadingSize;\n}\n.ui.sub.header {\n  font-size: @subHeadingFontSize;\n}\n.ui.large.sub.header {\n  font-size: @largeSubHeadingSize;\n}\n.ui.huge.sub.header {\n  font-size: @hugeSubHeadingSize;\n}\n\n\n\n/*-------------------\n        Icon\n--------------------*/\n\n.ui.icon.header {\n  display: inline-block;\n  text-align: center;\n  margin: @iconHeaderTopMargin 0em @iconHeaderBottomMargin;\n}\n.ui.icon.header:after {\n  content: '';\n  display: block;\n  height: 0px;\n  clear: both;\n  visibility: hidden;\n}\n\n.ui.icon.header:first-child {\n  margin-top: @iconHeaderFirstMargin;\n}\n.ui.icon.header .icon {\n  float: none;\n  display: block;\n  width: auto;\n  height: auto;\n  line-height: 1;\n  padding: 0em;\n  font-size: @iconHeaderSize;\n  margin: 0em auto @iconHeaderMargin;\n  opacity: @iconHeaderOpacity;\n}\n.ui.icon.header .content {\n  display: block;\n  padding: 0em;\n}\n.ui.icon.header .circular.icon {\n  font-size: @circularHeaderIconSize;\n}\n.ui.icon.header .square.icon {\n  font-size: @squareHeaderIconSize;\n}\n.ui.block.icon.header .icon {\n  margin-bottom: 0em;\n}\n.ui.icon.header.aligned {\n  margin-left: auto;\n  margin-right: auto;\n  display: block;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.disabled.header {\n  opacity: @disabledOpacity;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.header {\n  color: @invertedColor;\n}\n.ui.inverted.header .sub.header {\n  color: @invertedSubHeaderColor;\n}\n.ui.inverted.attached.header {\n  background: @invertedAttachedBackground;\n  box-shadow: none;\n  border-color: transparent;\n}\n.ui.inverted.block.header {\n  background: @invertedBlockBackground;\n  box-shadow: none;\n}\n.ui.inverted.block.header {\n  border-bottom: none;\n}\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n.ui.red.header {\n  color: @red !important;\n}\na.ui.red.header:hover {\n  color: @redHover !important;\n}\n.ui.red.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @red;\n}\n\n/* Inverted */\n.ui.inverted.red.header {\n  color: @lightRed !important;\n}\na.ui.inverted.red.header:hover {\n  color: @lightRedHover !important;\n}\n\n/*--- Orange ---*/\n.ui.orange.header {\n  color: @orange !important;\n}\na.ui.orange.header:hover {\n  color: @orangeHover !important;\n}\n.ui.orange.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @orange;\n}\n/* Inverted */\n.ui.inverted.orange.header {\n  color: @lightOrange !important;\n}\na.ui.inverted.orange.header:hover {\n  color: @lightOrangeHover !important;\n}\n\n/*--- Olive ---*/\n.ui.olive.header {\n  color: @olive !important;\n}\na.ui.olive.header:hover {\n  color: @oliveHover !important;\n}\n.ui.olive.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @olive;\n}\n/* Inverted */\n.ui.inverted.olive.header {\n  color: @lightOlive !important;\n}\na.ui.inverted.olive.header:hover {\n  color: @lightOliveHover !important;\n}\n\n/*--- Yellow ---*/\n.ui.yellow.header {\n  color: @yellow !important;\n}\na.ui.yellow.header:hover {\n  color: @yellowHover !important;\n}\n.ui.yellow.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @yellow;\n}\n/* Inverted */\n.ui.inverted.yellow.header {\n  color: @lightYellow !important;\n}\na.ui.inverted.yellow.header:hover {\n  color: @lightYellowHover !important;\n}\n\n/*--- Green ---*/\n.ui.green.header {\n  color: @green !important;\n}\na.ui.green.header:hover {\n  color: @greenHover !important;\n}\n.ui.green.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @green;\n}\n/* Inverted */\n.ui.inverted.green.header {\n  color: @lightGreen !important;\n}\na.ui.inverted.green.header:hover {\n  color: @lightGreenHover !important;\n}\n\n/*--- Teal ---*/\n.ui.teal.header {\n  color: @teal !important;\n}\na.ui.teal.header:hover {\n  color: @tealHover !important;\n}\n.ui.teal.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @teal;\n}\n/* Inverted */\n.ui.inverted.teal.header {\n  color: @lightTeal !important;\n}\na.ui.inverted.teal.header:hover {\n  color: @lightTealHover !important;\n}\n\n/*--- Blue ---*/\n.ui.blue.header {\n  color: @blue !important;\n}\na.ui.blue.header:hover {\n  color: @blueHover !important;\n}\n.ui.blue.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @blue;\n}\n/* Inverted */\n.ui.inverted.blue.header {\n  color: @lightBlue !important;\n}\na.ui.inverted.blue.header:hover {\n  color: @lightBlueHover !important;\n}\n\n/*--- Violet ---*/\n.ui.violet.header {\n  color: @violet !important;\n}\na.ui.violet.header:hover {\n  color: @violetHover !important;\n}\n.ui.violet.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @violet;\n}\n/* Inverted */\n.ui.inverted.violet.header {\n  color: @lightViolet !important;\n}\na.ui.inverted.violet.header:hover {\n  color: @lightVioletHover !important;\n}\n\n/*--- Purple ---*/\n.ui.purple.header {\n  color: @purple !important;\n}\na.ui.purple.header:hover {\n  color: @purpleHover !important;\n}\n.ui.purple.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @purple;\n}\n/* Inverted */\n.ui.inverted.purple.header {\n  color: @lightPurple !important;\n}\na.ui.inverted.purple.header:hover {\n  color: @lightPurpleHover !important;\n}\n\n/*--- Pink ---*/\n.ui.pink.header {\n  color: @pink !important;\n}\na.ui.pink.header:hover {\n  color: @pinkHover !important;\n}\n.ui.pink.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @pink;\n}\n/* Inverted */\n.ui.inverted.pink.header {\n  color: @lightPink !important;\n}\na.ui.inverted.pink.header:hover {\n  color: @lightPinkHover !important;\n}\n\n/*--- Brown ---*/\n.ui.brown.header {\n  color: @brown !important;\n}\na.ui.brown.header:hover {\n  color: @brownHover !important;\n}\n.ui.brown.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @brown;\n}\n/* Inverted */\n.ui.inverted.brown.header {\n  color: @lightBrown !important;\n}\na.ui.inverted.brown.header:hover {\n  color: @lightBrownHover !important;\n}\n\n/*--- Grey ---*/\n.ui.grey.header {\n  color: @grey !important;\n}\na.ui.grey.header:hover {\n  color: @greyHover !important;\n}\n.ui.grey.dividing.header {\n  border-bottom: @dividedColoredBorderWidth solid @grey;\n}\n/* Inverted */\n.ui.inverted.grey.header {\n  color: @lightGrey !important;\n}\na.ui.inverted.grey.header:hover {\n  color: @lightGreyHover !important;\n}\n\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.left.aligned.header {\n  text-align: left;\n}\n.ui.right.aligned.header {\n  text-align: right;\n}\n.ui.centered.header,\n.ui.center.aligned.header {\n  text-align: center;\n}\n.ui.justified.header {\n  text-align: justify;\n}\n.ui.justified.header:after {\n  display: inline-block;\n  content: '';\n  width: 100%;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.header,\n.ui[class*=\"left floated\"].header {\n  float: left;\n  margin-top: 0em;\n  margin-right: @floatedMargin;\n}\n.ui[class*=\"right floated\"].header {\n  float: right;\n  margin-top: 0em;\n  margin-left: @floatedMargin;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n\n.ui.fitted.header {\n  padding: 0em;\n}\n\n\n/*-------------------\n      Dividing\n--------------------*/\n\n.ui.dividing.header {\n  padding-bottom: @dividedBorderPadding;\n  border-bottom: @dividedBorder;\n}\n.ui.dividing.header .sub.header {\n  padding-bottom: @dividedSubHeaderPadding;\n}\n.ui.dividing.header .icon {\n  margin-bottom: @dividedIconPadding;\n}\n\n.ui.inverted.dividing.header {\n  border-bottom-color: @invertedDividedBorderColor;\n}\n\n\n/*-------------------\n        Block\n--------------------*/\n\n.ui.block.header {\n  background: @blockBackground;\n  padding: @blockVerticalPadding @blockHorizontalPadding;\n  box-shadow: @blockBoxShadow;\n  border: @blockBorder;\n  border-radius: @blockBorderRadius;\n}\n\n.ui.tiny.block.header {\n  font-size: @tinyBlock;\n}\n.ui.small.block.header {\n  font-size: @smallBlock;\n}\n.ui.block.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: @mediumBlock;\n}\n.ui.large.block.header {\n  font-size: @largeBlock;\n}\n.ui.huge.block.header {\n  font-size: @hugeBlock;\n}\n\n/*-------------------\n       Attached\n--------------------*/\n\n.ui.attached.header {\n  background: @attachedBackground;\n  padding: @attachedVerticalPadding @attachedHorizontalPadding;\n  margin-left: @attachedOffset;\n  margin-right: @attachedOffset;\n  box-shadow: @attachedBoxShadow;\n  border: @attachedBorder;\n}\n.ui.attached.block.header {\n  background: @blockBackground;\n}\n\n.ui.attached:not(.top):not(.bottom).header {\n  margin-top: 0em;\n  margin-bottom: 0em;\n  border-top: none;\n  border-radius: 0em;\n}\n.ui.top.attached.header {\n  margin-bottom: 0em;\n  border-radius: @attachedBorderRadius @attachedBorderRadius 0em 0em;\n}\n.ui.bottom.attached.header {\n  margin-top: 0em;\n  border-top: none;\n  border-radius: 0em 0em @attachedBorderRadius @attachedBorderRadius;\n}\n\n/* Attached Sizes */\n.ui.tiny.attached.header {\n  font-size: @tinyAttachedSize;\n}\n.ui.small.attached.header {\n  font-size: @smallAttachedSize;\n}\n.ui.attached.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: @mediumAttachedSize;\n}\n.ui.large.attached.header {\n  font-size: @largeAttachedSize;\n}\n.ui.huge.attached.header {\n  font-size: @hugeAttachedSize;\n}\n\n/*-------------------\n        Sizing\n--------------------*/\n\n.ui.header:not(h1):not(h2):not(h3):not(h4):not(h5):not(h6) {\n  font-size: @mediumFontSize;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/icon.less",
    "content": "/*!\n * # Semantic UI - Icon\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'icon';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n             Icon\n*******************************/\n\n@font-face {\n  font-family: 'Icons';\n  src: @fallbackSRC;\n  src: @src;\n  font-style: normal;\n  font-weight: normal;\n  font-variant: normal;\n  text-decoration: inherit;\n  text-transform: none;\n}\n\ni.icon {\n  display: inline-block;\n  opacity: @opacity;\n\n  margin: 0em @distanceFromText 0em 0em;\n\n  width: @width;\n  height: @height;\n\n  font-family: 'Icons';\n  font-style: normal;\n  font-weight: normal;\n  text-decoration: inherit;\n  text-align: center;\n\n  speak: none;\n  font-smoothing: antialiased;\n  -moz-osx-font-smoothing: grayscale;\n  -webkit-font-smoothing: antialiased;\n  backface-visibility: hidden;\n}\n\ni.icon:before {\n  background: none !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\ni.icon.loading {\n  height: 1em;\n  line-height: 1;\n  animation: icon-loading @loadingDuration linear infinite;\n}\n@keyframes icon-loading {\n from {\n    transform: rotate(0deg);\n }\n to {\n    transform: rotate(360deg);\n }\n}\n\n/*******************************\n             States\n*******************************/\n\ni.icon.hover {\n  opacity: 1 !important;\n}\n\ni.icon.active {\n  opacity: 1 !important;\n}\n\ni.emphasized.icon {\n  opacity: 1 !important;\n}\n\ni.disabled.icon {\n  opacity: @disabledOpacity !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n        Fitted\n--------------------*/\n\ni.fitted.icon {\n  width: auto;\n  margin: 0em;\n}\n\n/*-------------------\n         Link\n--------------------*/\n\ni.link.icon, i.link.icons {\n  cursor: pointer;\n  opacity: @linkOpacity;\n  transition: opacity @defaultDuration @defaultEasing;\n}\ni.link.icon:hover, i.link.icons:hover {\n  opacity: 1 !important;\n}\n\n/*-------------------\n      Circular\n--------------------*/\n\ni.circular.icon {\n  border-radius: 500em !important;\n  line-height: 1 !important;\n\n  padding: @circularPadding !important;\n  box-shadow: @circularShadow;\n\n  width: @circularSize !important;\n  height: @circularSize !important;\n}\ni.circular.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Flipped\n--------------------*/\n\ni.flipped.icon,\ni.horizontally.flipped.icon {\n  transform: scale(-1, 1);\n}\ni.vertically.flipped.icon {\n  transform: scale(1, -1);\n}\n\n/*-------------------\n      Rotated\n--------------------*/\n\ni.rotated.icon,\ni.right.rotated.icon,\ni.clockwise.rotated.icon {\n  transform: rotate(90deg);\n}\n\ni.left.rotated.icon,\ni.counterclockwise.rotated.icon {\n  transform: rotate(-90deg);\n}\n\n/*-------------------\n      Bordered\n--------------------*/\n\ni.bordered.icon {\n  line-height: 1;\n  vertical-align: baseline;\n\n  width: @borderedSize;\n  height: @borderedSize;\n  padding: @borderedVerticalPadding @borderedHorizontalPadding !important;\n  box-shadow: @borderedShadow;\n}\ni.bordered.inverted.icon {\n  border: none;\n  box-shadow: none;\n}\n\n/*-------------------\n      Inverted\n--------------------*/\n\n/* Inverted Shapes */\ni.inverted.bordered.icon,\ni.inverted.circular.icon {\n  background-color: @black !important;\n  color: @white !important;\n}\n\ni.inverted.icon {\n  color: @white;\n}\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\ni.red.icon {\n  color: @red !important;\n}\ni.inverted.red.icon {\n  color: @lightRed !important;\n}\ni.inverted.bordered.red.icon,\ni.inverted.circular.red.icon {\n  background-color: @red !important;\n  color: @white !important;\n}\n\n/* Orange */\ni.orange.icon {\n  color: @orange !important;\n}\ni.inverted.orange.icon {\n  color: @lightOrange !important;\n}\ni.inverted.bordered.orange.icon,\ni.inverted.circular.orange.icon {\n  background-color: @orange !important;\n  color: @white !important;\n}\n\n/* Yellow */\ni.yellow.icon {\n  color: @yellow !important;\n}\ni.inverted.yellow.icon {\n  color: @lightYellow !important;\n}\ni.inverted.bordered.yellow.icon,\ni.inverted.circular.yellow.icon {\n  background-color: @yellow !important;\n  color: @white !important;\n}\n\n/* Olive */\ni.olive.icon {\n  color: @olive !important;\n}\ni.inverted.olive.icon {\n  color: @lightOlive !important;\n}\ni.inverted.bordered.olive.icon,\ni.inverted.circular.olive.icon {\n  background-color: @olive !important;\n  color: @white !important;\n}\n\n/* Green */\ni.green.icon {\n  color: @green !important;\n}\ni.inverted.green.icon {\n  color: @lightGreen !important;\n}\ni.inverted.bordered.green.icon,\ni.inverted.circular.green.icon {\n  background-color: @green !important;\n  color: @white !important;\n}\n\n/* Teal */\ni.teal.icon {\n  color: @teal !important;\n}\ni.inverted.teal.icon {\n  color: @lightTeal !important;\n}\ni.inverted.bordered.teal.icon,\ni.inverted.circular.teal.icon {\n  background-color: @teal !important;\n  color: @white !important;\n}\n\n/* Blue */\ni.blue.icon {\n  color: @blue !important;\n}\ni.inverted.blue.icon {\n  color: @lightBlue !important;\n}\ni.inverted.bordered.blue.icon,\ni.inverted.circular.blue.icon {\n  background-color: @blue !important;\n  color: @white !important;\n}\n\n/* Violet */\ni.violet.icon {\n  color: @violet !important;\n}\ni.inverted.violet.icon {\n  color: @lightViolet !important;\n}\ni.inverted.bordered.violet.icon,\ni.inverted.circular.violet.icon {\n  background-color: @violet !important;\n  color: @white !important;\n}\n\n/* Purple */\ni.purple.icon {\n  color: @purple !important;\n}\ni.inverted.purple.icon {\n  color: @lightPurple !important;\n}\ni.inverted.bordered.purple.icon,\ni.inverted.circular.purple.icon {\n  background-color: @purple !important;\n  color: @white !important;\n}\n\n/* Pink */\ni.pink.icon {\n  color: @pink !important;\n}\ni.inverted.pink.icon {\n  color: @lightPink !important;\n}\ni.inverted.bordered.pink.icon,\ni.inverted.circular.pink.icon {\n  background-color: @pink !important;\n  color: @white !important;\n}\n\n/* Brown */\ni.brown.icon {\n  color: @brown !important;\n}\ni.inverted.brown.icon {\n  color: @lightBrown !important;\n}\ni.inverted.bordered.brown.icon,\ni.inverted.circular.brown.icon {\n  background-color: @brown !important;\n  color: @white !important;\n}\n\n/* Grey */\ni.grey.icon {\n  color: @grey !important;\n}\ni.inverted.grey.icon {\n  color: @lightGrey !important;\n}\ni.inverted.bordered.grey.icon,\ni.inverted.circular.grey.icon {\n  background-color: @grey !important;\n  color: @white !important;\n}\n\n/* Black */\ni.black.icon {\n  color: @black !important;\n}\ni.inverted.black.icon {\n  color: @lightBlack !important;\n}\ni.inverted.bordered.black.icon,\ni.inverted.circular.black.icon {\n  background-color: @black !important;\n  color: @white !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\ni.mini.icon,\ni.mini.icons {\n  line-height: 1;\n  font-size: @mini;\n}\ni.tiny.icon,\ni.tiny.icons {\n  line-height: 1;\n  font-size: @tiny;\n}\ni.small.icon,\ni.small.icons {\n  line-height: 1;\n  font-size: @small;\n}\ni.icon,\ni.icons {\n  font-size: @medium;\n}\ni.large.icon,\ni.large.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: @large;\n}\ni.big.icon,\ni.big.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: @big;\n}\ni.huge.icon,\ni.huge.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: @huge;\n}\ni.massive.icon,\ni.massive.icons {\n  line-height: 1;\n  vertical-align: middle;\n  font-size: @massive;\n}\n\n/*******************************\n            Groups\n*******************************/\n\ni.icons {\n  display: inline-block;\n  position: relative;\n  line-height: 1;\n}\n\ni.icons .icon {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  transform: translateX(-50%) translateY(-50%);\n  margin: 0em;\n  margin: 0;\n}\n\ni.icons .icon:first-child {\n  position: static;\n  width: auto;\n  height: auto;\n  vertical-align: top;\n  transform: none;\n  margin-right: @distanceFromText;\n}\n\n/* Corner Icon */\ni.icons .corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n  transform: none;\n  font-size: @cornerIconSize;\n  text-shadow: @cornerIconShadow;\n}\ni.icons .top.right.corner.icon {\n  top: 0;\n  left: auto;\n  right: 0;\n  bottom: auto;\n}\ni.icons .top.left.corner.icon {\n  top: 0;\n  left: 0;\n  right: auto;\n  bottom: auto;\n}\ni.icons .bottom.left.corner.icon {\n  top: auto;\n  left: 0;\n  right: auto;\n  bottom: 0;\n}\ni.icons .bottom.right.corner.icon {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 0;\n}\n\ni.icons .inverted.corner.icon {\n  text-shadow: @cornerIconInvertedShadow;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/image.less",
    "content": "/*!\n * # Semantic UI - Image\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'image';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n             Image\n*******************************/\n\n.ui.image {\n  position: relative;\n  display: inline-block;\n  vertical-align: middle;\n  max-width: 100%;\n  background-color: @placeholderColor;\n}\n\nimg.ui.image {\n  display: block;\n}\n\n.ui.image svg,\n.ui.image img {\n  display: block;\n  max-width: 100%;\n  height: auto;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.hidden.images,\n.ui.hidden.image {\n  display: none;\n}\n.ui.hidden.transition.images,\n.ui.hidden.transition.image {\n  display: block;\n  visibility: hidden;\n}\n\n\n.ui.disabled.images,\n.ui.disabled.image {\n  cursor: default;\n  opacity: @disabledOpacity;\n}\n\n\n/*******************************\n          Variations\n*******************************/\n\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.image,\n.ui.inline.image svg,\n.ui.inline.image img {\n  display: inline-block;\n}\n\n/*------------------\n  Vertical Aligned\n-------------------*/\n\n.ui.top.aligned.images .image,\n.ui.top.aligned.image,\n.ui.top.aligned.image svg,\n.ui.top.aligned.image img {\n  display: inline-block;\n  vertical-align: top;\n}\n.ui.middle.aligned.images .image,\n.ui.middle.aligned.image,\n.ui.middle.aligned.image svg,\n.ui.middle.aligned.image img {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.bottom.aligned.images .image,\n.ui.bottom.aligned.image,\n.ui.bottom.aligned.image svg,\n.ui.bottom.aligned.image img {\n  display: inline-block;\n  vertical-align: bottom;\n}\n\n/*--------------\n     Rounded\n---------------*/\n\n.ui.rounded.images .image,\n.ui.rounded.image,\n.ui.rounded.images .image > *,\n.ui.rounded.image > * {\n  border-radius: @roundedBorderRadius;\n}\n\n/*--------------\n    Bordered\n---------------*/\n\n.ui.bordered.images .image,\n.ui.bordered.images img,\n.ui.bordered.images svg,\n.ui.bordered.image img,\n.ui.bordered.image svg,\nimg.ui.bordered.image {\n  border: @imageBorder;\n}\n\n/*--------------\n    Circular\n---------------*/\n\n.ui.circular.images,\n.ui.circular.image {\n  overflow: hidden;\n}\n\n.ui.circular.images .image,\n.ui.circular.image,\n.ui.circular.images .image > *,\n.ui.circular.image > * {\n  -webkit-border-radius: @circularRadius;\n  -moz-border-radius: @circularRadius;\n  border-radius: @circularRadius;\n}\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.images,\n.ui.fluid.image,\n.ui.fluid.images img,\n.ui.fluid.images svg,\n.ui.fluid.image svg,\n.ui.fluid.image img {\n  display: block;\n  width: 100%;\n  height: auto;\n}\n\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.avatar.images .image,\n.ui.avatar.images img,\n.ui.avatar.images svg,\n.ui.avatar.image img,\n.ui.avatar.image svg,\n.ui.avatar.image {\n  margin-right: @avatarMargin;\n\n  display: inline-block;\n  width: @avatarSize;\n  height: @avatarSize;\n\n  -webkit-border-radius: @circularRadius;\n  -moz-border-radius: @circularRadius;\n  border-radius: @circularRadius;\n}\n\n/*-------------------\n       Spaced\n--------------------*/\n\n.ui.spaced.image {\n  display: inline-block !important;\n  margin-left: @spacedDistance;\n  margin-right: @spacedDistance;\n}\n\n.ui[class*=\"left spaced\"].image {\n  margin-left: @spacedDistance;\n  margin-right: 0em;\n}\n\n.ui[class*=\"right spaced\"].image {\n  margin-left: 0em;\n  margin-right: @spacedDistance;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.image,\n.ui.floated.images {\n  float: left;\n  margin-right: @floatedHorizontalMargin;\n  margin-bottom: @floatedVerticalMargin;\n}\n.ui.right.floated.images,\n.ui.right.floated.image {\n  float: right;\n  margin-right: 0em;\n  margin-bottom: @floatedVerticalMargin;\n  margin-left: @floatedHorizontalMargin;\n}\n\n.ui.floated.images:last-child,\n.ui.floated.image:last-child {\n  margin-bottom: 0em;\n}\n\n\n.ui.centered.images,\n.ui.centered.image {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.images .image,\n.ui.mini.images img,\n.ui.mini.images svg,\n.ui.mini.image {\n  width: @miniWidth;\n  height: auto;\n  font-size: @mini;\n}\n.ui.tiny.images .image,\n.ui.tiny.images img,\n.ui.tiny.images svg,\n.ui.tiny.image {\n  width: @tinyWidth;\n  height: auto;\n  font-size: @tiny;\n}\n.ui.small.images .image,\n.ui.small.images img,\n.ui.small.images svg,\n.ui.small.image {\n  width: @smallWidth;\n  height: auto;\n  font-size: @small;\n}\n.ui.medium.images .image,\n.ui.medium.images img,\n.ui.medium.images svg,\n.ui.medium.image {\n  width: @mediumWidth;\n  height: auto;\n  font-size: @medium;\n}\n.ui.large.images .image,\n.ui.large.images img,\n.ui.large.images svg,\n.ui.large.image {\n  width: @largeWidth;\n  height: auto;\n  font-size: @large;\n}\n.ui.big.images .image,\n.ui.big.images img,\n.ui.big.images svg,\n.ui.big.image {\n  width: @bigWidth;\n  height: auto;\n  font-size: @big;\n}\n.ui.huge.images .image,\n.ui.huge.images img,\n.ui.huge.images svg,\n.ui.huge.image {\n  width: @hugeWidth;\n  height: auto;\n  font-size: @huge;\n}\n.ui.massive.images .image,\n.ui.massive.images img,\n.ui.massive.images svg,\n.ui.massive.image {\n  width: @massiveWidth;\n  height: auto;\n  font-size: @massive;\n}\n\n\n/*******************************\n              Groups\n*******************************/\n\n.ui.images {\n  font-size: 0em;\n  margin: 0em -@imageHorizontalMargin 0rem;\n}\n\n.ui.images .image,\n.ui.images img,\n.ui.images svg {\n  display: inline-block;\n  margin: 0em @imageHorizontalMargin @imageVerticalMargin;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/input.less",
    "content": "/*!\n * # Semantic UI - Input\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'input';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n           Standard\n*******************************/\n\n\n/*--------------------\n        Inputs\n---------------------*/\n\n.ui.input {\n  position: relative;\n  font-weight: normal;\n  font-style: normal;\n  display: inline-flex;\n  color: @inputColor;\n}\n.ui.input input {\n  margin: 0em;\n  max-width: 100%;\n  flex: 1 0 auto;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  text-align: @textAlign;\n  line-height: @lineHeight;\n\n  font-family: @inputFont;\n  padding: @padding;\n\n  background: @background;\n  border: @border;\n  color: @inputColor;\n  border-radius: @borderRadius;\n  transition: @transition;\n\n  box-shadow: @boxShadow;\n}\n\n\n/*--------------------\n      Placeholder\n---------------------*/\n\n/* browsers require these rules separate */\n\n.ui.input input::-webkit-input-placeholder {\n  color: @placeholderColor;\n}\n.ui.input input::-moz-placeholder {\n  color: @placeholderColor;\n}\n.ui.input input:-ms-input-placeholder {\n  color: @placeholderColor;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n        Disabled\n---------------------*/\n\n.ui.disabled.input,\n.ui.input:not(.disabled) input[disabled] {\n  opacity: @disabledOpacity;\n}\n\n.ui.disabled.input input,\n.ui.input:not(.disabled) input[disabled] {\n  pointer-events: none;\n}\n\n/*--------------------\n        Active\n---------------------*/\n\n.ui.input input:active,\n.ui.input.down input {\n  border-color: @downBorderColor;\n  background: @downBackground;\n  color: @downColor;\n  box-shadow: @downBoxShadow;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.loading.input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @loaderFillColor;\n}\n.ui.loading.loading.input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: button-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor transparent transparent;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n\n/*--------------------\n        Focus\n---------------------*/\n\n.ui.input.focus input,\n.ui.input input:focus  {\n  border-color: @focusBorderColor;\n  background: @focusBackground;\n  color: @focusColor;\n  box-shadow: @focusBoxShadow;\n}\n.ui.input.focus input::-webkit-input-placeholder,\n.ui.input input:focus::-webkit-input-placeholder {\n  color: @placeholderFocusColor;\n}\n.ui.input.focus input::-moz-placeholder,\n.ui.input input:focus::-moz-placeholder {\n  color: @placeholderFocusColor;\n}\n.ui.input.focus input:-ms-input-placeholder,\n.ui.input input:focus:-ms-input-placeholder {\n  color: @placeholderFocusColor;\n}\n\n\n\n/*--------------------\n        Error\n---------------------*/\n\n.ui.input.error input {\n  background-color: @errorBackground;\n  border-color: @errorBorder;\n  color: @errorColor;\n  box-shadow: @errorBoxShadow;\n}\n\n/* Error Placeholder */\n.ui.input.error input::-webkit-input-placeholder {\n  color: @placeholderErrorColor;\n}\n.ui.input.error input::-moz-placeholder {\n  color: @placeholderErrorColor;\n}\n.ui.input.error input:-ms-input-placeholder {\n  color: @placeholderErrorColor !important;\n}\n\n/* Focused Error Placeholder */\n.ui.input.error input:focus::-webkit-input-placeholder {\n  color: @placeholderErrorFocusColor;\n}\n.ui.input.error input:focus::-moz-placeholder {\n  color: @placeholderErrorFocusColor;\n}\n.ui.input.error input:focus:-ms-input-placeholder {\n  color: @placeholderErrorFocusColor !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n      Transparent\n---------------------*/\n\n\n.ui.transparent.input input {\n  border-color: transparent !important;\n  background-color: transparent !important;\n  padding: 0em !important;\n  box-shadow: none !important;\n  border-radius: 0px !important;\n}\n\n/* Transparent Icon */\n.ui.transparent.icon.input > i.icon {\n  width: @transparentIconWidth;\n}\n.ui.transparent.icon.input > input {\n  padding-left: 0em !important;\n  padding-right: @transparentIconMargin !important;\n}\n.ui.transparent[class*=\"left icon\"].input > input {\n  padding-left: @transparentIconMargin !important;\n  padding-right: 0em !important;\n}\n\n/* Transparent Inverted */\n.ui.transparent.inverted.input {\n  color: @transparentInvertedColor;\n}\n.ui.transparent.inverted.input input {\n  color: inherit;\n}\n\n.ui.transparent.inverted.input input::-webkit-input-placeholder {\n  color: @transparentInvertedPlaceholderColor;\n}\n.ui.transparent.inverted.input input::-moz-placeholder {\n  color: @transparentInvertedPlaceholderColor;\n}\n.ui.transparent.inverted.input input:-ms-input-placeholder {\n  color: @transparentInvertedPlaceholderColor;\n}\n\n\n/*--------------------\n         Icon\n---------------------*/\n\n.ui.icon.input > i.icon {\n  cursor: default;\n  position: absolute;\n  line-height: 1;\n  text-align: center;\n  top: 0px;\n  right: 0px;\n  margin: 0em;\n  height: 100%;\n\n  width: @iconWidth;\n  opacity: @iconOpacity;\n  border-radius: 0em @borderRadius @borderRadius 0em;\n  transition: @iconTransition;\n}\n.ui.icon.input > i.icon:not(.link) {\n  pointer-events: none;\n}\n.ui.icon.input input {\n  padding-right: @iconMargin !important;\n}\n\n.ui.icon.input > i.icon:before,\n.ui.icon.input > i.icon:after {\n  left: 0;\n  position: absolute;\n  text-align: center;\n  top: 50%;\n  width: 100%;\n  margin-top: @iconOffset;\n}\n.ui.icon.input > i.link.icon {\n  cursor: pointer;\n}\n.ui.icon.input > i.circular.icon {\n  top: @circularIconVerticalOffset;\n  right: @circularIconHorizontalOffset;\n}\n\n/* Left Icon Input */\n.ui[class*=\"left icon\"].input > i.icon {\n  right: auto;\n  left: @borderWidth;\n  border-radius: @borderRadius 0em 0em @borderRadius;\n}\n.ui[class*=\"left icon\"].input > i.circular.icon {\n  right: auto;\n  left: @circularIconHorizontalOffset;\n}\n.ui[class*=\"left icon\"].input > input {\n  padding-left: @iconMargin !important;\n  padding-right: @horizontalPadding !important;\n}\n\n/* Focus */\n.ui.icon.input > input:focus ~ i.icon {\n  opacity: 1;\n}\n\n/*--------------------\n        Labeled\n---------------------*/\n\n/* Adjacent Label */\n.ui.labeled.input > .label {\n  flex: 0 0 auto;\n  margin: 0;\n  font-size: @relativeMedium;\n}\n.ui.labeled.input > .label:not(.corner) {\n  padding-top: @verticalPadding;\n  padding-bottom: @verticalPadding;\n}\n\n/* Regular Label on Left */\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child {\n  border-top-right-radius: 0px;\n  border-bottom-right-radius: 0px;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n  border-left-color: transparent;\n}\n.ui.labeled.input:not([class*=\"corner labeled\"]) .label:first-child + input:focus {\n  border-left-color: @focusBorderColor;\n}\n\n/* Regular Label on Right */\n.ui[class*=\"right labeled\"].input input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui[class*=\"right labeled\"].input input + .label {\n  border-top-left-radius: 0px;\n  border-bottom-left-radius: 0px;\n}\n\n.ui[class*=\"right labeled\"].input input:focus {\n  border-right-color: @focusBorderColor !important;\n}\n\n/* Corner Label */\n.ui.labeled.input .corner.label {\n  top: @labelCornerTop;\n  right: @labelCornerRight;\n  font-size: @labelCornerSize;\n  border-radius: 0em @borderRadius 0em 0em;\n}\n\n/* Spacing with corner label */\n.ui[class*=\"corner labeled\"]:not([class*=\"left corner labeled\"]).labeled.input input {\n  padding-right: @labeledMargin !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > input {\n  padding-right: @labeledIconInputMargin !important;\n}\n.ui[class*=\"corner labeled\"].icon.input:not([class*=\"left corner labeled\"]) > .icon {\n  margin-right: @labeledIconMargin;\n}\n\n/* Left Labeled */\n.ui[class*=\"left corner labeled\"].labeled.input input {\n  padding-left: @labeledMargin !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > input {\n  padding-left: @labeledIconInputMargin !important;\n}\n.ui[class*=\"left corner labeled\"].icon.input > .icon {\n  margin-left: @labeledIconMargin;\n}\n\n/* Corner Label Position  */\n.ui.input > .ui.corner.label {\n  top: @borderWidth;\n  right: @borderWidth;\n}\n.ui.input > .ui.left.corner.label {\n  right: auto;\n  left: @borderWidth;\n}\n\n\n/*--------------------\n        Action\n---------------------*/\n\n.ui.action.input > .button,\n.ui.action.input > .buttons {\n  display: flex;\n  align-items: center;\n  flex: 0 0 auto;\n}\n.ui.action.input > .button,\n.ui.action.input > .buttons > .button {\n  padding-top: @verticalPadding;\n  padding-bottom: @verticalPadding;\n  margin: 0;\n}\n\n/* Button on Right */\n.ui.action.input:not([class*=\"left action\"]) > input {\n  border-top-right-radius: 0px !important;\n  border-bottom-right-radius: 0px !important;\n  border-right-color: transparent !important;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .button:not(:first-child),\n.ui.action.input:not([class*=\"left action\"]) > .buttons:not(:first-child) > .button {\n  border-radius: 0px;\n}\n.ui.action.input:not([class*=\"left action\"]) > .dropdown:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .button:last-child,\n.ui.action.input:not([class*=\"left action\"]) > .buttons:last-child > .button {\n  border-radius: 0px @borderRadius @borderRadius 0px;\n}\n\n/* Input Focus */\n.ui.action.input:not([class*=\"left action\"]) input:focus {\n  border-right-color: @focusBorderColor !important;\n}\n\n/* Button on Left */\n.ui[class*=\"left action\"].input > input {\n  border-top-left-radius: 0px !important;\n  border-bottom-left-radius: 0px !important;\n  border-left-color: transparent !important;\n}\n.ui[class*=\"left action\"].input > .dropdown,\n.ui[class*=\"left action\"].input > .button,\n.ui[class*=\"left action\"].input > .buttons > .button {\n  border-radius: 0px;\n}\n.ui[class*=\"left action\"].input > .dropdown:first-child,\n.ui[class*=\"left action\"].input > .button:first-child,\n.ui[class*=\"left action\"].input > .buttons:first-child > .button {\n  border-radius: @borderRadius 0px 0px @borderRadius;\n}\n/* Input Focus */\n.ui[class*=\"left action\"].input > input:focus {\n  border-left-color: @focusBorderColor !important;\n}\n\n/*--------------------\n       Inverted\n---------------------*/\n\n/* Standard */\n.ui.inverted.input input {\n  border: none;\n}\n\n/*--------------------\n        Fluid\n---------------------*/\n\n.ui.fluid.input {\n  display: flex;\n}\n.ui.fluid.input > input {\n  width: 0px !important;\n}\n\n/*--------------------\n        Size\n---------------------*/\n\n.ui.mini.input {\n  font-size: @relativeMini;\n}\n.ui.small.input {\n  font-size: @relativeSmall;\n}\n.ui.input {\n  font-size: @relativeMedium;\n}\n.ui.large.input {\n  font-size: @relativeLarge;\n}\n.ui.big.input {\n  font-size: @relativeBig;\n}\n.ui.huge.input {\n  font-size: @relativeHuge;\n}\n.ui.massive.input {\n  font-size: @relativeMassive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/label.less",
    "content": "/*!\n * # Semantic UI - Label\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'label';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Label\n*******************************/\n\n.ui.label {\n  display: inline-block;\n  line-height: 1;\n  vertical-align: @verticalAlign;\n\n  margin: @verticalMargin @horizontalMargin;\n\n  background-color: @backgroundColor;\n  background-image: @backgroundImage;\n  padding: @verticalPadding @horizontalPadding;\n  color: @color;\n\n  text-transform: @textTransform;\n  font-weight: @fontWeight;\n\n  border: @border;\n  border-radius: @borderRadius;\n  transition: @transition;\n}\n\n.ui.label:first-child {\n  margin-left: 0em;\n}\n.ui.label:last-child {\n  margin-right: 0em;\n}\n\n/* Link */\na.ui.label {\n  cursor: pointer;\n}\n\n/* Inside Link */\n.ui.label > a {\n  cursor: pointer;\n  color: inherit;\n  opacity: @linkOpacity;\n  transition: @linkTransition;\n}\n.ui.label > a:hover {\n  opacity: 1;\n}\n\n/* Image */\n.ui.label > img {\n  width: auto !important;\n  vertical-align: middle;\n  height: @imageHeight !important;\n}\n\n/* Icon */\n.ui.label > .icon {\n  width: auto;\n  margin: 0em @iconDistance 0em 0em;\n}\n\n/* Detail */\n.ui.label > .detail {\n  display: inline-block;\n  vertical-align: top;\n  font-weight: @detailFontWeight;\n  margin-left: @detailMargin;\n  opacity: @detailOpacity;\n}\n.ui.label > .detail .icon {\n  margin: 0em @detailIconDistance 0em 0em;\n}\n\n\n/* Removable label */\n.ui.label > .close.icon,\n.ui.label > .delete.icon {\n  cursor: pointer;\n  margin-right: 0em;\n  margin-left: @deleteMargin;\n  font-size: @deleteSize;\n  opacity: @deleteOpacity;\n  transition: @deleteTransition;\n}\n.ui.label > .delete.icon:hover {\n  opacity: 1;\n}\n\n/*-------------------\n       Group\n--------------------*/\n\n.ui.labels > .label {\n  margin: 0em @groupHorizontalMargin @groupVerticalMargin 0em;\n}\n\n\n/*-------------------\n       Coupling\n--------------------*/\n\n.ui.header > .ui.label {\n  margin-top: @lineHeightOffset;\n}\n\n/* Remove border radius on attached segment */\n.ui.attached.segment > .ui.top.left.attached.label,\n.ui.bottom.attached.segment > .ui.top.left.attached.label  {\n  border-top-left-radius: 0;\n}\n.ui.attached.segment > .ui.top.right.attached.label,\n.ui.bottom.attached.segment > .ui.top.right.attached.label  {\n  border-top-right-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.left.attached.label  {\n  border-bottom-left-radius: 0;\n}\n.ui.top.attached.segment > .ui.bottom.right.attached.label  {\n  border-bottom-right-radius: 0;\n}\n\n/* Padding on next content after a label */\n.ui.top.attached.label:first-child + :not(.attached),\n.ui.top.attached.label + [class*=\"right floated\"] + * {\n  margin-top: @attachedSegmentPadding !important;\n}\n.ui.bottom.attached.label:first-child ~ :last-child:not(.attached) {\n  margin-top: 0em;\n  margin-bottom: @attachedSegmentPadding !important;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n.ui.image.label {\n  width: auto !important;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  max-width: 9999px;\n  vertical-align: baseline;\n  text-transform: none;\n\n  background: @imageLabelBackground;\n  padding: @imageLabelPadding;\n  border-radius: @imageLabelBorderRadius;\n  box-shadow: @imageLabelBoxShadow;\n}\n\n.ui.image.label img {\n  display: inline-block;\n  vertical-align: top;\n\n  height: @imageLabelImageHeight;\n  margin: @imageLabelImageMargin;\n  border-radius: @imageLabelImageBorderRadius;\n}\n\n.ui.image.label .detail {\n  background: @imageLabelDetailBackground;\n  margin: @imageLabelDetailMargin;\n  padding: @imageLabelDetailPadding;\n  border-radius: 0em @imageLabelBorderRadius @imageLabelBorderRadius 0em;\n}\n\n/*-------------------\n         Tag\n--------------------*/\n\n.ui.tag.labels .label,\n.ui.tag.label {\n  margin-left: 1em;\n  position: relative;\n  padding-left: @tagHorizontalPadding;\n  padding-right: @tagHorizontalPadding;\n\n  border-radius: 0em @borderRadius @borderRadius 0em;\n  transition: @tagTransition;\n}\n.ui.tag.labels .label:before,\n.ui.tag.label:before {\n    position: absolute;\n    transform: translateY(-50%) translateX(50%) rotate(-45deg);\n\n    top: @tagTriangleTopOffset;\n    right: @tagTriangleRightOffset;\n    content: '';\n\n    background-color: inherit;\n    background-image: @tagTriangleBackgroundImage;\n\n    width: @tagTriangleSize;\n    height: @tagTriangleSize;\n    transition: @tagTransition;\n}\n\n\n.ui.tag.labels .label:after,\n.ui.tag.label:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: -(@tagCircleSize / 2);\n\n  margin-top: -(@tagCircleSize / 2);\n  background-color: @tagCircleColor !important;\n  width: @tagCircleSize;\n  height: @tagCircleSize;\n\n  box-shadow: @tagCircleBoxShadow;\n  border-radius: @circularRadius;\n}\n\n\n/*-------------------\n    Corner Label\n--------------------*/\n\n.ui.corner.label {\n  position: absolute;\n  top: 0em;\n  right: 0em;\n  margin: 0em;\n  padding: 0em;\n  text-align: center;\n\n  border-color: @backgroundColor;\n\n  width: @cornerTriangleSize;\n  height: @cornerTriangleSize;\n  z-index: @cornerTriangleZIndex;\n  transition: @cornerTriangleTransition;\n}\n\n/* Icon Label */\n.ui.corner.label{\n  background-color: transparent !important;\n}\n.ui.corner.label:after {\n  position: absolute;\n  content: \"\";\n  right: 0em;\n  top: 0em;\n  z-index: -1;\n\n  width: 0em;\n  height: 0em;\n  background-color: transparent !important;\n\n  border-top: 0em solid transparent;\n  border-right: @cornerTriangleSize solid transparent;\n  border-bottom: @cornerTriangleSize solid transparent;\n  border-left: 0em solid transparent;\n\n  border-right-color: inherit;\n  transition: @cornerTriangleTransition;\n}\n\n.ui.corner.label .icon {\n  cursor: default;\n  position: relative;\n  top: @cornerIconTopOffset;\n  left: @cornerIconLeftOffset;\n  font-size: @cornerIconSize;\n  margin: 0em;\n}\n\n/* Left Corner */\n.ui.left.corner.label,\n.ui.left.corner.label:after {\n  right: auto;\n  left: 0em;\n}\n.ui.left.corner.label:after {\n  border-top: @cornerTriangleSize solid transparent;\n  border-right: @cornerTriangleSize solid transparent;\n  border-bottom: 0em solid transparent;\n  border-left: 0em solid transparent;\n\n  border-top-color: inherit;\n}\n.ui.left.corner.label .icon {\n  left: -@cornerIconLeftOffset;\n}\n\n/* Segment */\n.ui.segment > .ui.corner.label {\n  top: -1px;\n  right: -1px;\n}\n.ui.segment > .ui.left.corner.label {\n  right: auto;\n  left: -1px;\n}\n\n/*-------------------\n       Ribbon\n--------------------*/\n\n.ui.ribbon.label {\n  position: relative;\n  margin: 0em;\n  min-width: max-content;\n  border-radius: 0em @borderRadius @borderRadius 0em;\n  border-color: @ribbonShadowColor;\n}\n\n.ui.ribbon.label:after {\n  position: absolute;\n  content: '';\n\n  top: 100%;\n  left: 0%;\n  background-color: transparent !important;\n\n  border-style: solid;\n  border-width: 0em @ribbonTriangleSize @ribbonTriangleSize 0em;\n  border-color: transparent;\n  border-right-color: inherit;\n\n  width: 0em;\n  height: 0em;\n}\n/* Positioning */\n.ui.ribbon.label {\n  left: @ribbonOffset;\n  margin-right: -@ribbonTriangleSize;\n  padding-left: @ribbonDistance;\n  padding-right: @ribbonTriangleSize;\n}\n.ui[class*=\"right ribbon\"].label {\n  left: @rightRibbonOffset;\n  padding-left: @ribbonTriangleSize;\n  padding-right: @ribbonDistance;\n}\n\n/* Right Ribbon */\n.ui[class*=\"right ribbon\"].label {\n  text-align: left;\n  transform: translateX(-100%);\n  border-radius: @borderRadius 0em 0em @borderRadius;\n}\n.ui[class*=\"right ribbon\"].label:after {\n  left: auto;\n  right: 0%;\n\n  border-style: solid;\n  border-width: @ribbonTriangleSize @ribbonTriangleSize 0em 0em;\n  border-color: transparent;\n  border-top-color: inherit;\n}\n\n/* Inside Table */\n.ui.image > .ribbon.label,\n.ui.card .image > .ribbon.label {\n  position: absolute;\n  top: @ribbonImageTopDistance;\n}\n.ui.card .image > .ui.ribbon.label,\n.ui.image > .ui.ribbon.label {\n  left: @ribbonImageOffset;\n}\n.ui.card .image > .ui[class*=\"right ribbon\"].label,\n.ui.image > .ui[class*=\"right ribbon\"].label {\n  left: @rightRibbonImageOffset;\n  padding-left: @horizontalPadding;\n}\n\n/* Inside Table */\n.ui.table td > .ui.ribbon.label {\n  left: @ribbonTableOffset;\n}\n.ui.table td > .ui[class*=\"right ribbon\"].label {\n  left: @rightRibbonTableOffset;\n  padding-left: @horizontalPadding;\n}\n\n\n/*-------------------\n      Attached\n--------------------*/\n\n.ui[class*=\"top attached\"].label,\n.ui.attached.label {\n  width: 100%;\n  position: absolute;\n  margin: 0em;\n  top: 0em;\n  left: 0em;\n\n  padding: @attachedVerticalPadding @attachedHorizontalPadding;\n\n  border-radius: @attachedCornerBorderRadius @attachedCornerBorderRadius 0em 0em;\n}\n.ui[class*=\"bottom attached\"].label {\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em 0em @attachedCornerBorderRadius @attachedCornerBorderRadius;\n}\n\n.ui[class*=\"top left attached\"].label {\n  width: auto;\n  margin-top: 0em !important;\n  border-radius: @attachedCornerBorderRadius 0em @attachedBorderRadius 0em;\n}\n\n.ui[class*=\"top right attached\"].label {\n  width: auto;\n  left: auto;\n  right: 0em;\n  border-radius: 0em @attachedCornerBorderRadius 0em @attachedBorderRadius;\n}\n.ui[class*=\"bottom left attached\"].label {\n  width: auto;\n  top: auto;\n  bottom: 0em;\n  border-radius: 0em @attachedBorderRadius 0em @attachedCornerBorderRadius;\n}\n.ui[class*=\"bottom right attached\"].label {\n  top: auto;\n  bottom: 0em;\n  left: auto;\n  right: 0em;\n  width: auto;\n  border-radius: @attachedBorderRadius 0em @attachedCornerBorderRadius 0em;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n      Disabled\n--------------------*/\n\n.ui.label.disabled {\n  opacity: 0.5;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\na.ui.labels .label:hover,\na.ui.label:hover {\n  background-color: @labelHoverBackgroundColor;\n  border-color: @labelHoverBackgroundColor;\n\n  background-image: @labelHoverBackgroundImage;\n  color: @labelHoverTextColor;\n}\n.ui.labels a.label:hover:before,\na.ui.label:hover:before {\n  color: @labelHoverTextColor;\n}\n\n/*-------------------\n        Active\n--------------------*/\n\n.ui.active.label {\n  background-color: @labelActiveBackgroundColor;\n  border-color: @labelActiveBackgroundColor;\n\n  background-image: @labelActiveBackgroundImage;\n  color: @labelActiveTextColor;\n}\n.ui.active.label:before {\n  background-color: @labelActiveBackgroundColor;\n  background-image: @labelActiveBackgroundImage;\n  color: @labelActiveTextColor;\n}\n\n/*-------------------\n     Active Hover\n--------------------*/\n\na.ui.labels .active.label:hover,\na.ui.active.label:hover {\n  background-color: @labelActiveHoverBackgroundColor;\n  border-color: @labelActiveHoverBackgroundColor;\n\n  background-image: @labelActiveHoverBackgroundImage;\n  color: @labelActiveHoverTextColor;\n}\n.ui.labels a.active.label:ActiveHover:before,\na.ui.active.label:ActiveHover:before {\n  background-color: @labelActiveHoverBackgroundColor;\n  background-image: @labelActiveHoverBackgroundImage;\n  color: @labelActiveHoverTextColor;\n}\n\n\n/*-------------------\n      Visible\n--------------------*/\n\n.ui.labels.visible .label,\n.ui.label.visible:not(.dropdown) {\n  display: inline-block !important;\n}\n\n/*-------------------\n      Hidden\n--------------------*/\n\n.ui.labels.hidden .label,\n.ui.label.hidden {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Colors\n--------------------*/\n\n/*--- Red ---*/\n.ui.red.labels .label,\n.ui.red.label {\n  background-color: @red !important;\n  border-color: @red !important;\n  color: @redTextColor !important;\n}\n/* Link */\n.ui.red.labels .label:hover,\na.ui.red.label:hover{\n  background-color: @redHover !important;\n  border-color: @redHover !important;\n  color: @redHoverTextColor !important;\n}\n/* Corner */\n.ui.red.corner.label,\n.ui.red.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.red.ribbon.label {\n  border-color: @redRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.red.label {\n  background-color: @white !important;\n  color: @red !important;\n  border-color: @red !important;\n}\n.ui.basic.red.labels a.label:hover,\na.ui.basic.red.label:hover {\n  background-color: @white !important;\n  color: @redHover !important;\n  border-color: @redHover !important;\n}\n\n/*--- Orange ---*/\n.ui.orange.labels .label,\n.ui.orange.label {\n  background-color: @orange !important;\n  border-color: @orange !important;\n  color: @orangeTextColor !important;\n}\n/* Link */\n.ui.orange.labels .label:hover,\na.ui.orange.label:hover{\n  background-color: @orangeHover !important;\n  border-color: @orangeHover !important;\n  color: @orangeHoverTextColor !important;\n}\n/* Corner */\n.ui.orange.corner.label,\n.ui.orange.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.orange.ribbon.label {\n  border-color: @orangeRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.orange.label {\n  background-color: @white !important;\n  color: @orange !important;\n  border-color: @orange !important;\n}\n.ui.basic.orange.labels a.label:hover,\na.ui.basic.orange.label:hover {\n  background-color: @white !important;\n  color: @orangeHover !important;\n  border-color: @orangeHover !important;\n}\n\n/*--- Yellow ---*/\n.ui.yellow.labels .label,\n.ui.yellow.label {\n  background-color: @yellow !important;\n  border-color: @yellow !important;\n  color: @yellowTextColor !important;\n}\n/* Link */\n.ui.yellow.labels .label:hover,\na.ui.yellow.label:hover{\n  background-color: @yellowHover !important;\n  border-color: @yellowHover !important;\n  color: @yellowHoverTextColor !important;\n}\n/* Corner */\n.ui.yellow.corner.label,\n.ui.yellow.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.yellow.ribbon.label {\n  border-color: @yellowRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.yellow.label {\n  background-color: @white !important;\n  color: @yellow !important;\n  border-color: @yellow !important;\n}\n.ui.basic.yellow.labels a.label:hover,\na.ui.basic.yellow.label:hover {\n  background-color: @white !important;\n  color: @yellowHover !important;\n  border-color: @yellowHover !important;\n}\n\n/*--- Olive ---*/\n.ui.olive.labels .label,\n.ui.olive.label {\n  background-color: @olive !important;\n  border-color: @olive !important;\n  color: @oliveTextColor !important;\n}\n/* Link */\n.ui.olive.labels .label:hover,\na.ui.olive.label:hover{\n  background-color: @oliveHover !important;\n  border-color: @oliveHover !important;\n  color: @oliveHoverTextColor !important;\n}\n/* Corner */\n.ui.olive.corner.label,\n.ui.olive.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.olive.ribbon.label {\n  border-color: @greenRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.olive.label {\n  background-color: @white !important;\n  color: @olive !important;\n  border-color: @olive !important;\n}\n.ui.basic.olive.labels a.label:hover,\na.ui.basic.olive.label:hover {\n  background-color: @white !important;\n  color: @oliveHover !important;\n  border-color: @oliveHover !important;\n}\n\n/*--- Green ---*/\n.ui.green.labels .label,\n.ui.green.label {\n  background-color: @green !important;\n  border-color: @green !important;\n  color: @greenTextColor !important;\n}\n/* Link */\n.ui.green.labels .label:hover,\na.ui.green.label:hover{\n  background-color: @greenHover !important;\n  border-color: @greenHover !important;\n  color: @greenHoverTextColor !important;\n}\n/* Corner */\n.ui.green.corner.label,\n.ui.green.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.green.ribbon.label {\n  border-color: @greenRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.green.label {\n  background-color: @white !important;\n  color: @green !important;\n  border-color: @green !important;\n}\n.ui.basic.green.labels a.label:hover,\na.ui.basic.green.label:hover {\n  background-color: @white !important;\n  color: @greenHover !important;\n  border-color: @greenHover !important;\n}\n\n/*--- Teal ---*/\n.ui.teal.labels .label,\n.ui.teal.label {\n  background-color: @teal !important;\n  border-color: @teal !important;\n  color: @tealTextColor !important;\n}\n/* Link */\n.ui.teal.labels .label:hover,\na.ui.teal.label:hover{\n  background-color: @tealHover !important;\n  border-color: @tealHover !important;\n  color: @tealHoverTextColor !important;\n}\n/* Corner */\n.ui.teal.corner.label,\n.ui.teal.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.teal.ribbon.label {\n  border-color: @tealRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.teal.label {\n  background-color: @white !important;\n  color: @teal !important;\n  border-color: @teal !important;\n}\n.ui.basic.teal.labels a.label:hover,\na.ui.basic.teal.label:hover {\n  background-color: @white !important;\n  color: @tealHover !important;\n  border-color: @tealHover !important;\n}\n\n/*--- Blue ---*/\n.ui.blue.labels .label,\n.ui.blue.label {\n  background-color: @blue !important;\n  border-color: @blue !important;\n  color: @blueTextColor !important;\n}\n/* Link */\n.ui.blue.labels .label:hover,\na.ui.blue.label:hover{\n  background-color: @blueHover !important;\n  border-color: @blueHover !important;\n  color: @blueHoverTextColor !important;\n}\n/* Corner */\n.ui.blue.corner.label,\n.ui.blue.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.blue.ribbon.label {\n  border-color: @blueRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.blue.label {\n  background-color: @white !important;\n  color: @blue !important;\n  border-color: @blue !important;\n}\n.ui.basic.blue.labels a.label:hover,\na.ui.basic.blue.label:hover {\n  background-color: @white !important;\n  color: @blueHover !important;\n  border-color: @blueHover !important;\n}\n\n/*--- Violet ---*/\n.ui.violet.labels .label,\n.ui.violet.label {\n  background-color: @violet !important;\n  border-color: @violet !important;\n  color: @violetTextColor !important;\n}\n/* Link */\n.ui.violet.labels .label:hover,\na.ui.violet.label:hover{\n  background-color: @violetHover !important;\n  border-color: @violetHover !important;\n  color: @violetHoverTextColor !important;\n}\n/* Corner */\n.ui.violet.corner.label,\n.ui.violet.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.violet.ribbon.label {\n  border-color: @violetRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.violet.label {\n  background-color: @white !important;\n  color: @violet !important;\n  border-color: @violet !important;\n}\n.ui.basic.violet.labels a.label:hover,\na.ui.basic.violet.label:hover {\n  background-color: @white !important;\n  color: @violetHover !important;\n  border-color: @violetHover !important;\n}\n\n/*--- Purple ---*/\n.ui.purple.labels .label,\n.ui.purple.label {\n  background-color: @purple !important;\n  border-color: @purple !important;\n  color: @purpleTextColor !important;\n}\n/* Link */\n.ui.purple.labels .label:hover,\na.ui.purple.label:hover{\n  background-color: @purpleHover !important;\n  border-color: @purpleHover !important;\n  color: @purpleHoverTextColor !important;\n}\n/* Corner */\n.ui.purple.corner.label,\n.ui.purple.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.purple.ribbon.label {\n  border-color: @purpleRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.purple.label {\n  background-color: @white !important;\n  color: @purple !important;\n  border-color: @purple !important;\n}\n.ui.basic.purple.labels a.label:hover,\na.ui.basic.purple.label:hover {\n  background-color: @white !important;\n  color: @purpleHover !important;\n  border-color: @purpleHover !important;\n}\n\n/*--- Pink ---*/\n.ui.pink.labels .label,\n.ui.pink.label {\n  background-color: @pink !important;\n  border-color: @pink !important;\n  color: @pinkTextColor !important;\n}\n/* Link */\n.ui.pink.labels .label:hover,\na.ui.pink.label:hover{\n  background-color: @pinkHover !important;\n  border-color: @pinkHover !important;\n  color: @pinkHoverTextColor !important;\n}\n/* Corner */\n.ui.pink.corner.label,\n.ui.pink.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.pink.ribbon.label {\n  border-color: @pinkRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.pink.label {\n  background-color: @white !important;\n  color: @pink !important;\n  border-color: @pink !important;\n}\n.ui.basic.pink.labels a.label:hover,\na.ui.basic.pink.label:hover {\n  background-color: @white !important;\n  color: @pinkHover !important;\n  border-color: @pinkHover !important;\n}\n\n/*--- Brown ---*/\n.ui.brown.labels .label,\n.ui.brown.label {\n  background-color: @brown !important;\n  border-color: @brown !important;\n  color: @brownTextColor !important;\n}\n/* Link */\n.ui.brown.labels .label:hover,\na.ui.brown.label:hover{\n  background-color: @brownHover !important;\n  border-color: @brownHover !important;\n  color: @brownHoverTextColor !important;\n}\n/* Corner */\n.ui.brown.corner.label,\n.ui.brown.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.brown.ribbon.label {\n  border-color: @brownRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.brown.label {\n  background-color: @white !important;\n  color: @brown !important;\n  border-color: @brown !important;\n}\n.ui.basic.brown.labels a.label:hover,\na.ui.basic.brown.label:hover {\n  background-color: @white !important;\n  color: @brownHover !important;\n  border-color: @brownHover !important;\n}\n\n/*--- Grey ---*/\n.ui.grey.labels .label,\n.ui.grey.label {\n  background-color: @grey !important;\n  border-color: @grey !important;\n  color: @greyTextColor !important;\n}\n/* Link */\n.ui.grey.labels .label:hover,\na.ui.grey.label:hover{\n  background-color: @greyHover !important;\n  border-color: @greyHover !important;\n  color: @greyHoverTextColor !important;\n}\n/* Corner */\n.ui.grey.corner.label,\n.ui.grey.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.grey.ribbon.label {\n  border-color: @brownRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.grey.label {\n  background-color: @white !important;\n  color: @grey !important;\n  border-color: @grey !important;\n}\n.ui.basic.grey.labels a.label:hover,\na.ui.basic.grey.label:hover {\n  background-color: @white !important;\n  color: @greyHover !important;\n  border-color: @greyHover !important;\n}\n\n/*--- Black ---*/\n.ui.black.labels .label,\n.ui.black.label {\n  background-color: @black !important;\n  border-color: @black !important;\n  color: @blackTextColor !important;\n}\n/* Link */\n.ui.black.labels .label:hover,\na.ui.black.label:hover{\n  background-color: @blackHover !important;\n  border-color: @blackHover !important;\n  color: @blackHoverTextColor !important;\n}\n/* Corner */\n.ui.black.corner.label,\n.ui.black.corner.label:hover {\n  background-color: transparent !important;\n}\n/* Ribbon */\n.ui.black.ribbon.label {\n  border-color: @brownRibbonShadow !important;\n}\n/* Basic */\n.ui.basic.black.label {\n  background-color: @white !important;\n  color: @black !important;\n  border-color: @black !important;\n}\n.ui.basic.black.labels a.label:hover,\na.ui.basic.black.label:hover {\n  background-color: @white !important;\n  color: @blackHover !important;\n  border-color: @blackHover !important;\n}\n\n\n/*-------------------\n        Basic\n--------------------*/\n\n.ui.basic.label {\n  background: @basicBackground;\n  border: @basicBorder;\n  color: @basicColor;\n  box-shadow: @basicBoxShadow;\n}\n\n/* Link */\na.ui.basic.label:hover {\n  text-decoration: none;\n  background: @basicHoverBackground;\n  color: @basicHoverColor;\n  box-shadow: @basicHoverBorder;\n  box-shadow: @basicHoverBoxShadow;\n}\n\n/* Pointing */\n.ui.basic.pointing.label:before {\n  border-color: inherit;\n}\n\n\n/*-------------------\n       Fluid\n--------------------*/\n\n.ui.label.fluid,\n.ui.fluid.labels > .label {\n  width: 100%;\n  box-sizing: border-box;\n}\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.labels .label,\n.ui.inverted.label {\n  color: @invertedTextColor !important;\n}\n\n/*-------------------\n     Horizontal\n--------------------*/\n\n.ui.horizontal.labels .label,\n.ui.horizontal.label {\n  margin: 0em @horizontalLabelMargin 0em 0em;\n\n  padding: @horizontalLabelVerticalPadding @horizontalPadding;\n  min-width: @horizontalLabelMinWidth;\n  text-align: center;\n}\n\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.labels .label,\n.ui.circular.label {\n  min-width: @circularMinSize;\n  min-height: @circularMinSize;\n\n  padding: @circularPadding !important;\n\n  line-height: 1em;\n  text-align: center;\n  border-radius: @circularRadius;\n}\n.ui.empty.circular.labels .label,\n.ui.empty.circular.label {\n  min-width: 0em;\n  min-height: 0em;\n  overflow: hidden;\n  width: @emptyCircleSize;\n  height: @emptyCircleSize;\n  vertical-align: baseline;\n}\n\n/*-------------------\n       Pointing\n--------------------*/\n\n.ui.pointing.label {\n  position: relative;\n}\n\n.ui.attached.pointing.label {\n  position: absolute;\n}\n\n.ui.pointing.label:before {\n  background-color: inherit;\n  background-image: inherit;\n  border-width: none;\n  border-style: solid;\n  border-color: @pointingBorderColor;\n}\n/* Arrow */\n.ui.pointing.label:before {\n  position: absolute;\n  content: '';\n  transform: rotate(45deg);\n  background-image: none;\n\n  z-index: @pointingTriangleZIndex;\n  width: @pointingTriangleSize;\n  height: @pointingTriangleSize;\n  transition: @pointingTriangleTransition;\n}\n\n/*--- Above ---*/\n.ui.pointing.label,\n.ui[class*=\"pointing above\"].label {\n  margin-top: @pointingVerticalDistance;\n}\n.ui.pointing.label:before,\n.ui[class*=\"pointing above\"].label:before {\n  border-width: @borderWidth 0px 0px @borderWidth;\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 0%;\n  left: 50%;\n}\n/*--- Below ---*/\n.ui[class*=\"bottom pointing\"].label,\n.ui[class*=\"pointing below\"].label {\n  margin-top: 0em;\n  margin-bottom: @pointingVerticalDistance;\n}\n.ui[class*=\"bottom pointing\"].label:before,\n.ui[class*=\"pointing below\"].label:before {\n  border-width: 0px @borderWidth @borderWidth 0px;\n  top: auto;\n  right: auto;\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  top: 100%;\n  left: 50%;\n}\n/*--- Left ---*/\n.ui[class*=\"left pointing\"].label {\n  margin-top: 0em;\n  margin-left: @pointingHorizontalDistance;\n}\n.ui[class*=\"left pointing\"].label:before {\n  border-width: 0px 0px @borderWidth @borderWidth;\n  transform: translateX(-50%) translateY(-50%) rotate(45deg);\n  bottom: auto;\n  right: auto;\n  top: 50%;\n  left: 0em;\n}\n/*--- Right ---*/\n.ui[class*=\"right pointing\"].label {\n  margin-top: 0em;\n  margin-right: @pointingHorizontalDistance;\n}\n.ui[class*=\"right pointing\"].label:before {\n  border-width: @borderWidth @borderWidth 0px 0px;\n  transform: translateX(50%) translateY(-50%) rotate(45deg);\n  top: 50%;\n  right: 0%;\n  bottom: auto;\n  left: auto;\n}\n\n/* Basic Pointing */\n\n/*--- Above ---*/\n.ui.basic.pointing.label:before,\n.ui.basic[class*=\"pointing above\"].label:before {\n  margin-top: @basicPointingTriangleOffset;\n}\n/*--- Below ---*/\n.ui.basic[class*=\"bottom pointing\"].label:before,\n.ui.basic[class*=\"pointing below\"].label:before {\n  bottom: auto;\n  top: 100%;\n  margin-top: -@basicPointingTriangleOffset;\n}\n/*--- Left ---*/\n.ui.basic[class*=\"left pointing\"].label:before {\n  top: 50%;\n  left: @basicPointingTriangleOffset;\n}\n/*--- Right ---*/\n.ui.basic[class*=\"right pointing\"].label:before {\n  top: 50%;\n  right: @basicPointingTriangleOffset;\n}\n\n\n/*------------------\n   Floating Label\n-------------------*/\n\n.ui.floating.label {\n  position: absolute;\n  z-index: @floatingZIndex;\n  top: @floatingTopOffset;\n  left: 100%;\n  margin: 0em 0em 0em @floatingLeftOffset !important;\n}\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.labels .label,\n.ui.mini.label {\n  font-size: @mini;\n}\n.ui.tiny.labels .label,\n.ui.tiny.label {\n  font-size: @tiny;\n}\n.ui.small.labels .label,\n.ui.small.label {\n  font-size: @small;\n}\n.ui.labels .label,\n.ui.label {\n  font-size: @medium;\n}\n.ui.large.labels .label,\n.ui.large.label {\n  font-size: @large;\n}\n.ui.big.labels .label,\n.ui.big.label {\n  font-size: @big;\n}\n.ui.huge.labels .label,\n.ui.huge.label {\n  font-size: @huge;\n}\n.ui.massive.labels .label,\n.ui.massive.label {\n  font-size: @massive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/list.less",
    "content": "/*!\n * # Semantic UI - List\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'list';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            List\n*******************************/\n\nul.ui.list,\nol.ui.list,\n.ui.list {\n  list-style-type: @listStyleType;\n  margin: @margin;\n  padding: @verticalPadding @horizontalPadding;\n}\n\nul.ui.list:first-child,\nol.ui.list:first-child,\n.ui.list:first-child {\n  margin-top: 0em;\n  padding-top: 0em;\n}\n\nul.ui.list:last-child,\nol.ui.list:last-child,\n.ui.list:last-child {\n  margin-bottom: 0em;\n  padding-bottom: 0em;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* List Item */\nul.ui.list li,\nol.ui.list li,\n.ui.list > .item,\n.ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  list-style-type: @listStyleType;\n  list-style-position: @listStylePosition;\n\n  padding: @itemPadding;\n  line-height: @itemLineHeight;\n}\n\nul.ui.list > li:first-child:after,\nol.ui.list > li:first-child:after,\n.ui.list > .list > .item,\n.ui.list > .item:after {\n  content: '';\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\nul.ui.list li:first-child,\nol.ui.list li:first-child,\n.ui.list .list > .item:first-child,\n.ui.list > .item:first-child {\n  padding-top: 0em;\n}\nul.ui.list li:last-child,\nol.ui.list li:last-child,\n.ui.list .list > .item:last-child,\n.ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n/* Child List */\nul.ui.list ul,\nol.ui.list ol,\n.ui.list .list {\n  clear: both;\n  margin: 0em;\n  padding: @childListPadding;\n}\n\n/* Child Item */\nul.ui.list ul li,\nol.ui.list ol li,\n.ui.list .list > .item {\n  padding: @childItemPadding;\n  line-height: @childItemLineHeight;\n}\n\n\n/* Icon */\n.ui.list .list > .item > i.icon,\n.ui.list > .item > i.icon {\n  display: table-cell;\n  margin: 0em;\n  padding-top: @iconOffset;\n  padding-right: @iconDistance;\n  vertical-align: @iconContentVerticalAlign;\n  transition: @iconTransition;\n}\n.ui.list .list > .item > i.icon:only-child,\n.ui.list > .item > i.icon:only-child {\n  display: inline-block;\n  vertical-align: @iconVerticalAlign;\n}\n\n\n/* Image */\n.ui.list .list > .item > .image,\n.ui.list > .item > .image {\n  display: table-cell;\n  background-color: transparent;\n  margin: 0em;\n  vertical-align: @imageAlign;\n}\n.ui.list .list > .item > .image:not(:only-child):not(img),\n.ui.list > .item > .image:not(:only-child):not(img) {\n  padding-right: @imageDistance;\n}\n.ui.list .list > .item > .image img,\n.ui.list > .item > .image img {\n  vertical-align: @imageAlign;\n}\n\n.ui.list .list > .item > img.image,\n.ui.list .list > .item > .image:only-child,\n.ui.list > .item > img.image,\n.ui.list > .item > .image:only-child {\n  display: inline-block;\n}\n\n/* Content */\n.ui.list .list > .item > .content,\n.ui.list > .item > .content {\n  line-height: @contentLineHeight;\n}\n.ui.list .list > .item > .image + .content,\n.ui.list .list > .item > .icon + .content,\n.ui.list > .item > .image + .content,\n.ui.list > .item > .icon + .content {\n  display: table-cell;\n  padding: 0em 0em 0em @contentDistance;\n  vertical-align: @contentVerticalAlign;\n}\n.ui.list .list > .item > img.image + .content,\n.ui.list > .item > img.image + .content {\n  display: inline-block;\n}\n.ui.list .list > .item > .content > .list,\n.ui.list > .item > .content > .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n\n/* Header */\n.ui.list .list > .item .header,\n.ui.list > .item .header {\n  display: block;\n  margin: 0em;\n  font-family: @itemHeaderFontFamily;\n  font-weight: @itemHeaderFontWeight;\n  color: @itemHeaderColor;\n}\n\n/* Description */\n.ui.list .list > .item .description,\n.ui.list > .item .description {\n  display: block;\n  color: @itemDescriptionColor;\n}\n\n/* Child Link */\n.ui.list > .item a,\n.ui.list .list > .item a {\n  cursor: pointer;\n}\n\n/* Linking Item */\n.ui.list .list > a.item,\n.ui.list > a.item {\n  cursor: pointer;\n  color: @itemLinkColor;\n}\n.ui.list .list > a.item:hover,\n.ui.list > a.item:hover {\n  color: @itemLinkHoverColor;\n}\n\n/* Linked Item Icons */\n.ui.list .list > a.item i.icon,\n.ui.list > a.item i.icon {\n  color: @itemLinkIconColor;\n}\n\n/* Header Link */\n.ui.list .list > .item a.header,\n.ui.list > .item a.header {\n  cursor: pointer;\n  color: @itemHeaderLinkColor !important;\n}\n.ui.list .list > .item a.header:hover,\n.ui.list > .item a.header:hover {\n  color: @itemHeaderLinkHoverColor !important;\n}\n\n/* Floated Content */\n.ui[class*=\"left floated\"].list {\n  float: left;\n}\n.ui[class*=\"right floated\"].list {\n  float: right;\n}\n\n.ui.list .list > .item [class*=\"left floated\"],\n.ui.list > .item [class*=\"left floated\"] {\n  float: left;\n  margin: @leftFloatMargin;\n}\n.ui.list .list > .item [class*=\"right floated\"],\n.ui.list > .item [class*=\"right floated\"] {\n  float: right;\n  margin: @rightFloatMargin;\n}\n\n/*******************************\n            Coupling\n*******************************/\n\n.ui.menu .ui.list > .item,\n.ui.menu .ui.list .list > .item {\n  display: list-item;\n  table-layout: fixed;\n  background-color: transparent;\n\n  list-style-type: @listStyleType;\n  list-style-position: @listStylePosition;\n\n  padding: @itemVerticalPadding @itemHorizontalPadding;\n  line-height: @itemLineHeight;\n}\n.ui.menu .ui.list .list > .item:before,\n.ui.menu .ui.list > .item:before {\n  border: none;\n  background: none;\n}\n.ui.menu .ui.list .list > .item:first-child,\n.ui.menu .ui.list > .item:first-child {\n  padding-top: 0em;\n}\n.ui.menu .ui.list .list > .item:last-child,\n.ui.menu .ui.list > .item:last-child {\n  padding-bottom: 0em;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n/*-------------------\n      Horizontal\n--------------------*/\n\n.ui.horizontal.list {\n  display: inline-block;\n  font-size: 0em;\n}\n.ui.horizontal.list > .item {\n  display: inline-block;\n  margin-left: @horizontalSpacing;\n  font-size: 1rem;\n}\n.ui.horizontal.list:not(.celled) > .item:first-child {\n  margin-left: 0em !important;\n  padding-left: 0em !important;\n}\n.ui.horizontal.list .list {\n  padding-left: 0em;\n  padding-bottom: 0em;\n}\n\n.ui.horizontal.list > .item > .image,\n.ui.horizontal.list .list > .item > .image,\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list .list > .item > .icon,\n.ui.horizontal.list > .item > .content,\n.ui.horizontal.list .list > .item > .content {\n  vertical-align: @horizontalVerticalAlign;\n}\n\n/* Padding on all elements */\n.ui.horizontal.list > .item:first-child,\n.ui.horizontal.list > .item:last-child {\n  padding-top: @itemVerticalPadding;\n  padding-bottom: @itemVerticalPadding;\n}\n\n/* Horizontal List */\n.ui.horizontal.list > .item > i.icon {\n  margin: 0em;\n  padding: 0em @horizontalIconDistance 0em 0em;\n}\n.ui.horizontal.list > .item > .icon,\n.ui.horizontal.list > .item > .icon + .content {\n  float: none;\n  display: inline-block;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n.ui.list .list > .disabled.item,\n.ui.list > .disabled.item {\n  pointer-events: none;\n  color: @disabledColor !important;\n}\n.ui.inverted.list .list > .disabled.item,\n.ui.inverted.list > .disabled.item {\n  color: @invertedDisabledColor !important;\n}\n\n/*-------------------\n        Hover\n--------------------*/\n\n.ui.list .list > a.item:hover .icon,\n.ui.list > a.item:hover .icon {\n  color: @itemLinkIconHoverColor;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.list .list > a.item > .icon,\n.ui.inverted.list > a.item > .icon {\n  color: @invertedIconLinkColor;\n}\n.ui.inverted.list .list > .item .header,\n.ui.inverted.list > .item .header {\n  color: @invertedHeaderColor;\n}\n.ui.inverted.list .list > .item .description,\n.ui.inverted.list > .item .description {\n  color: @invertedDescriptionColor;\n}\n\n/* Item Link */\n.ui.inverted.list .list > a.item,\n.ui.inverted.list > a.item {\n  cursor: pointer;\n  color: @invertedItemLinkColor;\n}\n.ui.inverted.list .list > a.item:hover,\n.ui.inverted.list > a.item:hover {\n  color: @invertedItemLinkHoverColor;\n}\n\n\n/* Linking Content */\n.ui.inverted.list .item a:not(.ui) {\n  color: @invertedItemLinkColor !important;\n}\n.ui.inverted.list .item a:not(.ui):hover {\n  color: @invertedItemLinkHoverColor !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.list[class*=\"top aligned\"] .image,\n.ui.list[class*=\"top aligned\"] .content,\n.ui.list [class*=\"top aligned\"] {\n  vertical-align: top !important;\n}\n.ui.list[class*=\"middle aligned\"] .image,\n.ui.list[class*=\"middle aligned\"] .content,\n.ui.list [class*=\"middle aligned\"] {\n  vertical-align: middle !important;\n}\n.ui.list[class*=\"bottom aligned\"] .image,\n.ui.list[class*=\"bottom aligned\"] .content,\n.ui.list [class*=\"bottom aligned\"] {\n  vertical-align: bottom !important;\n}\n\n/*-------------------\n       Link\n--------------------*/\n\n.ui.link.list .item,\n.ui.link.list a.item,\n.ui.link.list .item a:not(.ui) {\n  color: @linkListItemColor;\n  transition: @linkListTransition;\n}\n.ui.link.list a.item:hover,\n.ui.link.list .item a:not(.ui):hover {\n  color: @linkListItemHoverColor;\n}\n.ui.link.list a.item:active,\n.ui.link.list .item a:not(.ui):active {\n  color: @linkListItemDownColor;\n}\n.ui.link.list .active.item,\n.ui.link.list .active.item a:not(.ui) {\n  color: @linkListItemActiveColor;\n}\n\n/* Inverted */\n.ui.inverted.link.list .item,\n.ui.inverted.link.list a.item,\n.ui.inverted.link.list .item a:not(.ui) {\n  color: @invertedLinkListItemColor;\n}\n.ui.inverted.link.list a.item:hover,\n.ui.inverted.link.list .item a:not(.ui):hover {\n  color: @invertedLinkListItemHoverColor;\n}\n.ui.inverted.link.list a.item:active,\n.ui.inverted.link.list .item a:not(.ui):active {\n  color: @invertedLinkListItemDownColor;\n}\n.ui.inverted.link.list a.active.item,\n.ui.inverted.link.list .active.item a:not(.ui) {\n  color: @invertedLinkListItemActiveColor;\n}\n\n/*-------------------\n      Selection\n--------------------*/\n\n.ui.selection.list .list > .item,\n.ui.selection.list > .item {\n  cursor: pointer;\n  background: @selectionListBackground;\n  padding: @selectionListItemVerticalPadding @selectionListItemHorizontalPadding;\n  margin: @selectionListItemMargin;\n  color: @selectionListColor;\n  border-radius: @selectionListItemBorderRadius;\n  transition: @selectionListTransition;\n}\n.ui.selection.list .list > .item:last-child,\n.ui.selection.list > .item:last-child {\n  margin-bottom: 0em;\n}\n.ui.selection.list.list >  .item:hover,\n.ui.selection.list > .item:hover {\n  background: @selectionListHoverBackground;\n  color: @selectionListHoverColor;\n}\n.ui.selection.list .list > .item:active,\n.ui.selection.list > .item:active {\n  background: @selectionListDownBackground;\n  color: @selectionListDownColor;\n}\n.ui.selection.list .list > .item.active,\n.ui.selection.list > .item.active {\n  background: @selectionListActiveBackground;\n  color: @selectionListActiveColor;\n}\n\n/* Inverted */\n.ui.inverted.selection.list > .item,\n.ui.inverted.selection.list > .item {\n  background: @invertedSelectionListBackground;\n  color: @invertedSelectionListColor;\n}\n.ui.inverted.selection.list > .item:hover,\n.ui.inverted.selection.list > .item:hover {\n  background: @invertedSelectionListHoverBackground;\n  color: @invertedSelectionListHoverColor;\n}\n.ui.inverted.selection.list > .item:active,\n.ui.inverted.selection.list > .item:active {\n  background: @invertedSelectionListDownBackground;\n  color: @invertedSelectionListDownColor;\n}\n.ui.inverted.selection.list > .item.active,\n.ui.inverted.selection.list > .item.active {\n  background: @invertedSelectionListActiveBackground;\n  color: @invertedSelectionListActiveColor;\n}\n\n/* Celled / Divided Selection List */\n.ui.celled.selection.list .list > .item,\n.ui.divided.selection.list .list > .item,\n.ui.celled.selection.list > .item,\n.ui.divided.selection.list > .item {\n  border-radius: 0em;\n}\n\n/*-------------------\n       Animated\n--------------------*/\n\n.ui.animated.list > .item {\n  transition: @animatedListTransition;\n}\n.ui.animated.list:not(.horizontal) > .item:hover {\n  padding-left: @animatedListIndent;\n}\n\n/*-------------------\n       Fitted\n--------------------*/\n.ui.fitted.list:not(.selection) .list > .item,\n.ui.fitted.list:not(.selection) > .item {\n  padding-left: 0em;\n  padding-right: 0em;\n}\n.ui.fitted.selection.list .list > .item,\n.ui.fitted.selection.list > .item {\n  margin-left: -@selectionListItemHorizontalPadding;\n  margin-right: -@selectionListItemHorizontalPadding;\n}\n\n/*-------------------\n      Bulleted\n--------------------*/\n\nul.ui.list,\n.ui.bulleted.list {\n  margin-left: @bulletDistance;\n}\nul.ui.list li,\n.ui.bulleted.list .list > .item,\n.ui.bulleted.list > .item {\n  position: relative;\n}\nul.ui.list li:before,\n.ui.bulleted.list .list > .item:before,\n.ui.bulleted.list > .item:before {\n  user-select: none;\n  pointer-events: none;\n  position: absolute;\n  top: auto;\n  left: auto;\n  font-weight: normal;\n  margin-left: @bulletOffset;\n  content: @bulletCharacter;\n  opacity: @bulletOpacity;\n  color: @bulletColor;\n  vertical-align: @bulletVerticalAlign;\n}\n\nul.ui.list li:before,\n.ui.bulleted.list .list > a.item:before,\n.ui.bulleted.list > a.item:before {\n  color: @bulletLinkColor;\n}\n\nul.ui.list ul,\n.ui.bulleted.list .list {\n  padding-left: @bulletChildDistance;\n}\n\n/* Horizontal Bulleted */\nul.ui.horizontal.bulleted.list,\n.ui.horizontal.bulleted.list {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li,\n.ui.horizontal.bulleted.list > .item {\n  margin-left: @horizontalBulletSpacing;\n}\nul.ui.horizontal.bulleted.list li:first-child,\n.ui.horizontal.bulleted.list > .item:first-child {\n  margin-left: 0em;\n}\nul.ui.horizontal.bulleted.list li::before,\n.ui.horizontal.bulleted.list > .item::before {\n  color: @horizontalBulletColor;\n}\nul.ui.horizontal.bulleted.list li:first-child::before,\n.ui.horizontal.bulleted.list > .item:first-child::before {\n  display: none;\n}\n\n/*-------------------\n       Ordered\n--------------------*/\n\nol.ui.list,\n.ui.ordered.list,\n.ui.ordered.list .list,\nol.ui.list ol {\n  counter-reset: ordered;\n  margin-left: @orderedCountDistance;\n  list-style-type: none;\n}\nol.ui.list li,\n.ui.ordered.list .list > .item,\n.ui.ordered.list > .item {\n  list-style-type: none;\n  position: relative;\n}\nol.ui.list li:before,\n.ui.ordered.list .list > .item:before,\n.ui.ordered.list > .item:before {\n  position: absolute;\n  top: auto;\n  left: auto;\n  user-select: none;\n  pointer-events: none;\n  margin-left: -(@orderedCountDistance);\n  counter-increment: @orderedCountName;\n  content: @orderedCountContent;\n  text-align: @orderedCountTextAlign;\n  color: @orderedCountColor;\n  vertical-align: @orderedCountVerticalAlign;\n  opacity: @orderedCountOpacity;\n}\n\nol.ui.inverted.list li:before,\n.ui.ordered.inverted.list .list > .item:before,\n.ui.ordered.inverted.list > .item:before {\n  color: @orderedInvertedCountColor;\n}\n\n/* Value */\n.ui.ordered.list > .list > .item[data-value],\n.ui.ordered.list > .item[data-value] {\n  content: attr(data-value);\n}\nol.ui.list li[value]:before {\n  content: attr(value);\n}\n\n/* Child Lists */\nol.ui.list ol,\n.ui.ordered.list .list {\n  margin-left: @orderedChildCountDistance;\n}\nol.ui.list ol li:before,\n.ui.ordered.list .list > .item:before {\n  margin-left: @orderedChildCountOffset;\n}\n\n/* Horizontal Ordered */\nol.ui.horizontal.list,\n.ui.ordered.horizontal.list {\n  margin-left: 0em;\n}\nol.ui.horizontal.list li:before,\n.ui.ordered.horizontal.list .list > .item:before,\n.ui.ordered.horizontal.list > .item:before {\n  position: static;\n  margin: 0em @horizontalOrderedCountDistance 0em 0em;\n}\n\n/*-------------------\n       Divided\n--------------------*/\n\n.ui.divided.list > .item {\n  border-top: @dividedBorder;\n}\n.ui.divided.list .list > .item {\n  border-top: @dividedChildListBorder;\n}\n.ui.divided.list .item .list > .item {\n  border-top: @dividedChildItemBorder;\n}\n.ui.divided.list .list > .item:first-child,\n.ui.divided.list > .item:first-child {\n  border-top: none;\n}\n\n/* Sub Menu */\n.ui.divided.list:not(.horizontal) .list > .item:first-child {\n  border-top-width: @dividedBorderWidth;\n}\n\n/* Divided bulleted */\n.ui.divided.bulleted.list:not(.horizontal),\n.ui.divided.bulleted.list .list {\n  margin-left: 0em;\n  padding-left: 0em;\n}\n.ui.divided.bulleted.list > .item:not(.horizontal) {\n  padding-left: @bulletDistance;\n}\n\n/* Divided Ordered */\n.ui.divided.ordered.list {\n  margin-left: 0em;\n}\n.ui.divided.ordered.list .list > .item,\n.ui.divided.ordered.list > .item {\n  padding-left: @orderedCountDistance;\n}\n.ui.divided.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: @itemVerticalPadding;\n}\n.ui.divided.ordered.list .item .list > .item {\n  padding-left: @orderedChildCountDistance;\n}\n\n/* Divided Selection */\n.ui.divided.selection.list .list > .item,\n.ui.divided.selection.list > .item {\n  margin: 0em;\n  border-radius: 0em;\n}\n\n/* Divided horizontal */\n.ui.divided.horizontal.list {\n  margin-left: 0em;\n}\n.ui.divided.horizontal.list > .item:not(:first-child) {\n  padding-left: @horizontalDividedSpacing;\n}\n.ui.divided.horizontal.list > .item:not(:last-child) {\n  padding-right: @horizontalDividedSpacing;\n}\n.ui.divided.horizontal.list > .item {\n  border-top: none;\n  border-left: @dividedBorder;\n  margin: 0em;\n  line-height: @horizontalDividedLineHeight;\n}\n.ui.horizontal.divided.list > .item:first-child {\n  border-left: none;\n}\n/* Inverted */\n.ui.divided.inverted.list > .item,\n.ui.divided.inverted.list > .list,\n.ui.divided.inverted.horizontal.list > .item {\n  border-color: @dividedInvertedBorderColor;\n}\n\n\n/*-------------------\n        Celled\n--------------------*/\n\n.ui.celled.list > .item,\n.ui.celled.list > .list {\n  border-top: @celledBorder;\n  padding-left: @celledHorizontalPadding;\n  padding-right: @celledHorizontalPadding;\n}\n.ui.celled.list > .item:last-child {\n  border-bottom: @celledBorder;\n}\n\n/* Padding on all elements */\n.ui.celled.list > .item:first-child,\n.ui.celled.list > .item:last-child {\n  padding-top: @itemVerticalPadding;\n  padding-bottom: @itemVerticalPadding;\n}\n\n/* Sub Menu */\n.ui.celled.list .item .list > .item {\n  border-width: 0px;\n}\n.ui.celled.list .list > .item:first-child {\n  border-top-width: 0px;\n}\n\n/* Celled Bulleted */\n.ui.celled.bulleted.list {\n  margin-left: 0em;\n}\n.ui.celled.bulleted.list .list > .item,\n.ui.celled.bulleted.list > .item {\n  padding-left: (@bulletDistance);\n}\n.ui.celled.bulleted.list .item .list {\n  margin-left: -(@bulletDistance);\n  margin-right: -(@bulletDistance);\n  padding-bottom: @itemVerticalPadding;\n}\n\n/* Celled Ordered */\n.ui.celled.ordered.list {\n  margin-left: 0em;\n}\n.ui.celled.ordered.list .list > .item,\n.ui.celled.ordered.list > .item {\n  padding-left: @orderedCountDistance;\n}\n.ui.celled.ordered.list .item .list {\n  margin-left: 0em;\n  margin-right: 0em;\n  padding-bottom: @itemVerticalPadding;\n}\n.ui.celled.ordered.list .list > .item {\n  padding-left: @orderedChildCountDistance;\n}\n\n/* Celled Horizontal */\n.ui.horizontal.celled.list {\n  margin-left: 0em;\n}\n.ui.horizontal.celled.list .list > .item,\n.ui.horizontal.celled.list > .item {\n  border-top: none;\n  border-left: @celledBorder;\n  margin: 0em;\n  padding-left: @horizontalCelledSpacing;\n  padding-right: @horizontalCelledSpacing;\n\n  line-height: @horizontalCelledLineHeight;\n}\n.ui.horizontal.celled.list .list > .item:last-child,\n.ui.horizontal.celled.list > .item:last-child {\n  border-bottom: none;\n  border-right: @celledBorder;\n}\n\n/* Inverted */\n.ui.celled.inverted.list > .item,\n.ui.celled.inverted.list > .list {\n  border-color: @celledInvertedBorder;\n}\n.ui.celled.inverted.horizontal.list .list > .item,\n.ui.celled.inverted.horizontal.list > .item {\n  border-color: @celledInvertedBorder;\n}\n\n/*-------------------\n       Relaxed\n--------------------*/\n\n.ui.relaxed.list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: @relaxedItemVerticalPadding;\n}\n.ui.relaxed.list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: @relaxedItemVerticalPadding;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:first-child),\n.ui.horizontal.relaxed.list > .item:not(:first-child) {\n  padding-left: @relaxedHorizontalPadding;\n}\n.ui.horizontal.relaxed.list .list > .item:not(:last-child),\n.ui.horizontal.relaxed.list > .item:not(:last-child) {\n  padding-right: @relaxedHorizontalPadding;\n}\n\n/* Very Relaxed */\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:first-child) {\n  padding-top: @veryRelaxedItemVerticalPadding;\n}\n.ui[class*=\"very relaxed\"].list:not(.horizontal) > .item:not(:last-child) {\n  padding-bottom: @veryRelaxedItemVerticalPadding;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:first-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:first-child) {\n  padding-left: @veryRelaxedHorizontalPadding;\n}\n.ui.horizontal[class*=\"very relaxed\"].list .list > .item:not(:last-child),\n.ui.horizontal[class*=\"very relaxed\"].list > .item:not(:last-child) {\n  padding-right: @veryRelaxedHorizontalPadding;\n}\n\n/*-------------------\n      Sizes\n--------------------*/\n\n.ui.mini.list {\n  font-size: @relativeMini;\n}\n.ui.tiny.list {\n  font-size: @relativeTiny;\n}\n.ui.small.list {\n  font-size: @relativeSmall;\n}\n.ui.list {\n  font-size: @relativeMedium;\n}\n.ui.large.list {\n  font-size: @relativeLarge;\n}\n.ui.big.list {\n  font-size: @relativeBig;\n}\n.ui.huge.list {\n  font-size: @relativeHuge;\n}\n.ui.massive.list {\n  font-size: @relativeMassive;\n}\n\n.ui.mini.horizontal.list .list > .item,\n.ui.mini.horizontal.list > .item {\n  font-size: @mini;\n}\n.ui.tiny.horizontal.list .list > .item,\n.ui.tiny.horizontal.list > .item {\n  font-size: @tiny;\n}\n.ui.small.horizontal.list .list > .item,\n.ui.small.horizontal.list > .item {\n  font-size: @small;\n}\n.ui.horizontal.list .list > .item,\n.ui.horizontal.list > .item {\n  font-size: @medium;\n}\n.ui.large.horizontal.list .list > .item,\n.ui.large.horizontal.list > .item {\n  font-size: @large;\n}\n.ui.big.horizontal.list .list > .item,\n.ui.big.horizontal.list > .item {\n  font-size: @big;\n}\n.ui.huge.horizontal.list .list > .item,\n.ui.huge.horizontal.list > .item {\n  font-size: @huge;\n}\n.ui.massive.horizontal.list .list > .item,\n.ui.massive.horizontal.list > .item {\n  font-size: @massive;\n}\n\n.loadUIOverrides();\n\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/loader.less",
    "content": "/*!\n * # Semantic UI - Loader\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'loader';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Loader\n*******************************/\n\n\n/* Standard Size */\n.ui.loader {\n  display: none;\n  position: absolute;\n  top: @loaderTopOffset;\n  left: @loaderLeftOffset;\n  margin: 0px;\n  text-align: center;\n  z-index: 1000;\n  transform: translateX(-50%) translateY(-50%);\n}\n\n/* Static Shape */\n.ui.loader:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @loaderFillColor;\n}\n\n/* Active Shape */\n.ui.loader:after {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 50%;\n  width: 100%;\n  height: 100%;\n\n  animation: loader @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @shapeBorderColor;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n/* Active Animation */\n@keyframes loader {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n/* Sizes */\n.ui.mini.loader:before,\n.ui.mini.loader:after {\n  width: @mini;\n  height: @mini;\n  margin: @miniOffset;\n}\n.ui.tiny.loader:before,\n.ui.tiny.loader:after {\n  width: @tiny;\n  height: @tiny;\n  margin: @tinyOffset;\n}\n.ui.small.loader:before,\n.ui.small.loader:after {\n  width: @small;\n  height: @small;\n  margin: @smallOffset;\n}\n.ui.loader:before,\n.ui.loader:after {\n  width: @medium;\n  height: @medium;\n  margin: @mediumOffset;\n}\n.ui.large.loader:before,\n.ui.large.loader:after {\n  width: @large;\n  height: @large;\n  margin: @largeOffset;\n}\n.ui.big.loader:before,\n.ui.big.loader:after {\n  width: @big;\n  height: @big;\n  margin: @bigOffset;\n}\n.ui.huge.loader:before,\n.ui.huge.loader:after {\n  width: @huge;\n  height: @huge;\n  margin: @hugeOffset;\n}\n.ui.massive.loader:before,\n.ui.massive.loader:after {\n  width: @massive;\n  height: @massive;\n  margin: @massiveOffset;\n}\n\n/*-------------------\n      Coupling\n--------------------*/\n\n/* Show inside active dimmer */\n.ui.dimmer .loader {\n  display: block;\n}\n\n/* Black Dimmer */\n.ui.dimmer .ui.loader {\n  color: @invertedLoaderTextColor;\n}\n.ui.dimmer .ui.loader:before {\n  border-color: @invertedLoaderFillColor;\n}\n.ui.dimmer .ui.loader:after {\n  border-color: @invertedShapeBorderColor;\n}\n\n/* White Dimmer (Inverted) */\n.ui.inverted.dimmer .ui.loader {\n  color: @loaderTextColor;\n}\n.ui.inverted.dimmer .ui.loader:before {\n  border-color: @loaderFillColor;\n}\n.ui.inverted.dimmer .ui.loader:after {\n  border-color: @shapeBorderColor;\n}\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n        Text\n--------------------*/\n\n.ui.text.loader {\n  width: auto !important;\n  height: auto !important;\n  text-align: center;\n  font-style: normal;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n.ui.indeterminate.loader:after {\n  animation-direction: @indeterminateDirection;\n  animation-duration: @indeterminateSpeed;\n}\n\n.ui.loader.active,\n.ui.loader.visible {\n  display: block;\n}\n.ui.loader.disabled,\n.ui.loader.hidden {\n  display: none;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*-------------------\n        Sizes\n--------------------*/\n\n\n/* Loader */\n.ui.inverted.dimmer .ui.mini.loader,\n.ui.mini.loader {\n  width: @mini;\n  height: @mini;\n  font-size: @miniFontSize;\n}\n.ui.inverted.dimmer .ui.tiny.loader,\n.ui.tiny.loader {\n  width: @tiny;\n  height: @tiny;\n  font-size: @tinyFontSize;\n}\n.ui.inverted.dimmer .ui.small.loader,\n.ui.small.loader {\n  width: @small;\n  height: @small;\n  font-size: @smallFontSize;\n}\n.ui.inverted.dimmer .ui.loader,\n.ui.loader {\n  width: @medium;\n  height: @medium;\n  font-size: @mediumFontSize;\n}\n.ui.inverted.dimmer .ui.large.loader,\n.ui.large.loader {\n  width: @large;\n  height: @large;\n  font-size: @largeFontSize;\n}\n.ui.inverted.dimmer .ui.big.loader,\n.ui.big.loader {\n  width: @big;\n  height: @big;\n  font-size: @bigFontSize;\n}\n.ui.inverted.dimmer .ui.huge.loader,\n.ui.huge.loader {\n  width: @huge;\n  height: @huge;\n  font-size: @hugeFontSize;\n}\n.ui.inverted.dimmer .ui.massive.loader,\n.ui.massive.loader {\n  width: @massive;\n  height: @massive;\n  font-size: @massiveFontSize;\n}\n\n/* Text Loader */\n.ui.mini.text.loader {\n  min-width: @mini;\n  padding-top: (@mini + @textDistance);\n}\n.ui.tiny.text.loader {\n  min-width: @tiny;\n  padding-top: (@tiny + @textDistance);\n}\n.ui.small.text.loader {\n  min-width: @small;\n  padding-top: (@small + @textDistance);\n}\n.ui.text.loader {\n  min-width: @medium;\n  padding-top: (@medium + @textDistance);\n}\n.ui.large.text.loader {\n  min-width: @large;\n  padding-top: (@large + @textDistance);\n}\n.ui.big.text.loader {\n  min-width: @big;\n  padding-top: (@big + @textDistance);\n}\n.ui.huge.text.loader {\n  min-width: @huge;\n  padding-top: (@huge + @textDistance);\n}\n.ui.massive.text.loader {\n  min-width: @massive;\n  padding-top: (@massive + @textDistance);\n}\n\n\n/*-------------------\n       Inverted\n--------------------*/\n\n.ui.inverted.loader {\n  color: @invertedLoaderTextColor\n}\n.ui.inverted.loader:before {\n  border-color: @invertedLoaderFillColor;\n}\n.ui.inverted.loader:after {\n  border-top-color: @invertedLoaderLineColor;\n}\n\n/*-------------------\n       Inline\n--------------------*/\n\n.ui.inline.loader {\n  position: relative;\n  vertical-align: @inlineVerticalAlign;\n  margin: @inlineMargin;\n  left: 0em;\n  top: 0em;\n  transform: none;\n}\n\n.ui.inline.loader.active,\n.ui.inline.loader.visible {\n  display: inline-block;\n}\n\n/* Centered Inline */\n.ui.centered.inline.loader.active,\n.ui.centered.inline.loader.visible {\n  display: block;\n  margin-left: auto;\n  margin-right: auto;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/rail.less",
    "content": "/*!\n * # Semantic UI - Rail\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'rail';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Rails\n*******************************/\n\n.ui.rail {\n  position: absolute;\n  top: 0%;\n  width: @width;\n  height: @height;\n}\n\n.ui.left.rail {\n  left: auto;\n  right: 100%;\n  padding: 0em @splitDistance 0em 0em;\n  margin: 0em @splitDistance 0em 0em;\n}\n\n.ui.right.rail {\n  left: 100%;\n  right: auto;\n  padding: 0em 0em 0em @splitDistance;\n  margin: 0em 0em 0em @splitDistance;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Internal\n---------------*/\n\n.ui.left.internal.rail {\n  left: 0%;\n  right: auto;\n  padding: 0em 0em 0em @splitDistance;\n  margin: 0em 0em 0em @splitDistance;\n}\n\n.ui.right.internal.rail {\n  left: auto;\n  right: 0%;\n  padding: 0em @splitDistance 0em 0em;\n  margin: 0em @splitDistance 0em 0em;\n}\n\n\n/*--------------\n    Dividing\n---------------*/\n\n.ui.dividing.rail {\n  width: @dividingWidth;\n}\n.ui.left.dividing.rail {\n  padding: 0em @splitDividingDistance 0em 0em;\n  margin: 0em @splitDividingDistance 0em 0em;\n  border-right: @dividingBorder;\n}\n.ui.right.dividing.rail {\n  border-left: @dividingBorder;\n  padding: 0em 0em 0em @splitDividingDistance;\n  margin: 0em 0em 0em @splitDividingDistance;\n}\n\n/*--------------\n    Distance\n---------------*/\n\n.ui.close.rail {\n  width: @closeWidth;\n}\n.ui.close.left.rail {\n  padding: 0em @splitCloseDistance 0em 0em;\n  margin: 0em @splitCloseDistance 0em 0em;\n}\n.ui.close.right.rail {\n  padding: 0em 0em 0em @splitCloseDistance;\n  margin: 0em 0em 0em @splitCloseDistance;\n}\n\n.ui.very.close.rail {\n  width: @veryCloseWidth;\n}\n.ui.very.close.left.rail {\n  padding: 0em @splitVeryCloseDistance 0em 0em;\n  margin: 0em @splitVeryCloseDistance 0em 0em;\n}\n.ui.very.close.right.rail {\n  padding: 0em 0em 0em @splitVeryCloseDistance;\n  margin: 0em 0em 0em @splitVeryCloseDistance;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n.ui.attached.left.rail,\n.ui.attached.right.rail {\n  padding: 0em;\n  margin: 0em;\n}\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.mini.rail {\n  font-size: @mini;\n}\n.ui.tiny.rail {\n  font-size: @tiny;\n}\n.ui.small.rail {\n  font-size: @small;\n}\n.ui.rail {\n  font-size: @medium;\n}\n.ui.large.rail {\n  font-size: @large;\n}\n.ui.big.rail {\n  font-size: @big;\n}\n.ui.huge.rail {\n  font-size: @huge;\n}\n.ui.massive.rail {\n  font-size: @massive;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/reveal.less",
    "content": "/*!\n * # Semantic UI - Reveal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'reveal';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Reveal\n*******************************/\n\n.ui.reveal  {\n  display: inherit;\n  position: relative !important;\n  font-size: 0em !important;\n}\n\n.ui.reveal > .visible.content {\n  position: absolute !important;\n  top: 0em !important;\n  left: 0em !important;\n  z-index: @topZIndex !important;\n  transition: @transition;\n}\n.ui.reveal > .hidden.content {\n  position: relative !important;\n  z-index: @bottomZIndex !important;\n}\n\n/* Make sure hovered element is on top of other reveal */\n.ui.active.reveal .visible.content,\n.ui.reveal:hover .visible.content {\n  z-index: @activeZIndex !important;\n}\n\n\n/*******************************\n              Types\n*******************************/\n\n\n/*--------------\n      Slide\n---------------*/\n\n.ui.slide.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.slide.reveal > .content {\n  display: block;\n  width: 100%;\n  float: left;\n\n  margin: 0em;\n  transition: @slideTransition;\n}\n\n.ui.slide.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.slide.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n  transform: translateX(100%) !important;\n}\n.ui.slide.active.reveal > .visible.content,\n.ui.slide.reveal:hover > .visible.content {\n  transform: translateX(-100%) !important;\n}\n.ui.slide.active.reveal > .hidden.content,\n.ui.slide.reveal:hover > .hidden.content {\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.right.reveal > .visible.content {\n  transform: translateX(0%) !important;\n}\n.ui.slide.right.reveal > .hidden.content {\n  transform: translateX(-100%) !important;\n}\n.ui.slide.right.active.reveal > .visible.content,\n.ui.slide.right.reveal:hover > .visible.content {\n  transform: translateX(100%) !important;\n}\n.ui.slide.right.active.reveal > .hidden.content,\n.ui.slide.right.reveal:hover > .hidden.content {\n  transform: translateX(0%) !important;\n}\n\n.ui.slide.up.reveal > .hidden.content {\n  transform: translateY(100%) !important;\n}\n.ui.slide.up.active.reveal > .visible.content,\n.ui.slide.up.reveal:hover > .visible.content {\n  transform: translateY(-100%) !important;\n}\n.ui.slide.up.active.reveal > .hidden.content,\n.ui.slide.up.reveal:hover > .hidden.content {\n  transform: translateY(0%) !important;\n}\n\n.ui.slide.down.reveal > .hidden.content {\n  transform: translateY(-100%) !important;\n}\n.ui.slide.down.active.reveal > .visible.content,\n.ui.slide.down.reveal:hover > .visible.content {\n  transform: translateY(100%) !important;\n}\n.ui.slide.down.active.reveal > .hidden.content,\n.ui.slide.down.reveal:hover > .hidden.content {\n  transform: translateY(0%) !important;\n}\n\n\n/*--------------\n      Fade\n---------------*/\n\n.ui.fade.reveal > .visible.content {\n  opacity: 1;\n}\n.ui.fade.active.reveal > .visible.content,\n.ui.fade.reveal:hover > .visible.content {\n  opacity: 0;\n}\n\n\n/*--------------\n      Move\n---------------*/\n\n.ui.move.reveal {\n  position: relative !important;\n  overflow: hidden !important;\n  white-space: nowrap;\n}\n\n.ui.move.reveal > .content {\n  display: block;\n  float: left;\n\n  margin: 0em;\n  transition: @moveTransition;\n}\n\n.ui.move.reveal > .visible.content {\n  position: relative !important;\n}\n.ui.move.reveal > .hidden.content {\n  position: absolute !important;\n  left: 0% !important;\n  width: 100% !important;\n}\n.ui.move.active.reveal > .visible.content,\n.ui.move.reveal:hover > .visible.content {\n  transform: translateX(-100%) !important;\n}\n.ui.move.right.active.reveal > .visible.content,\n.ui.move.right.reveal:hover > .visible.content {\n  transform: translateX(100%) !important;\n}\n.ui.move.up.active.reveal > .visible.content,\n.ui.move.up.reveal:hover > .visible.content {\n  transform: translateY(-100%) !important;\n}\n.ui.move.down.active.reveal > .visible.content,\n.ui.move.down.reveal:hover > .visible.content {\n  transform: translateY(100%) !important;\n}\n\n\n\n/*--------------\n     Rotate\n---------------*/\n\n.ui.rotate.reveal > .visible.content {\n  transition-duration: @transitionDuration;\n  transform: rotate(0deg);\n}\n\n.ui.rotate.reveal > .visible.content,\n.ui.rotate.right.reveal > .visible.content {\n  transform-origin: bottom right;\n}\n.ui.rotate.active.reveal > .visible.content,\n.ui.rotate.reveal:hover > .visible.content,\n.ui.rotate.right.active.reveal > .visible.content,\n.ui.rotate.right.reveal:hover > .visible.content {\n  transform: rotate(@rotateDegrees);\n}\n\n.ui.rotate.left.reveal > .visible.content {\n  transform-origin: bottom left;\n}\n.ui.rotate.left.active.reveal > .visible.content,\n.ui.rotate.left.reveal:hover > .visible.content {\n  transform: rotate(-@rotateDegrees);\n}\n\n/*******************************\n              States\n*******************************/\n\n.ui.disabled.reveal:hover > .visible.visible.content {\n  position: static !important;\n  display: block !important;\n  opacity: 1 !important;\n  top: 0 !important;\n  left: 0 !important;\n  right: auto !important;\n  bottom: auto !important;\n  transform: none !important;\n}\n.ui.disabled.reveal:hover > .hidden.hidden.content {\n  display: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.reveal {\n  overflow: visible;\n}\n\n/*--------------\n     Instant\n---------------*/\n\n.ui.instant.reveal > .content {\n  transition-delay: 0s !important;\n}\n\n\n/*--------------\n     Sizing\n---------------*/\n\n.ui.reveal > .content {\n  font-size: @medium !important;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/segment.less",
    "content": "/*!\n * # Semantic UI - Segment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'element';\n@element : 'segment';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Segment\n*******************************/\n\n.ui.segment {\n  position: relative;\n  background: @background;\n  box-shadow: @boxShadow;\n  margin: @margin;\n  padding: @padding;\n  border-radius: @borderRadius;\n  border: @border;\n}\n\n.ui.segment:first-child {\n  margin-top: 0em;\n}\n.ui.segment:last-child {\n  margin-bottom: 0em;\n}\n\n\n/* Vertical */\n.ui.vertical.segment {\n  margin: 0em;\n  padding-left: 0em;\n  padding-right: 0em;\n\n  background: none transparent;\n  border-radius: 0px;\n  box-shadow: none;\n  border: none;\n  border-bottom: @borderWidth solid @borderColor;\n}\n.ui.vertical.segment:last-child {\n  border-bottom: none;\n}\n\n\n/*-------------------\n    Loose Coupling\n--------------------*/\n\n/* Header */\n.ui.inverted.segment > .ui.header {\n  color: @white;\n}\n\n/* Label */\n.ui[class*=\"bottom attached\"].segment > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui[class*=\"top attached\"].segment > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"top attached\"].label {\n  border-top-left-radius: 0em;\n  border-top-right-radius: 0em;\n}\n.ui.attached.segment:not(.top):not(.bottom) > [class*=\"bottom attached\"].label {\n  border-bottom-left-radius: 0em;\n  border-bottom-right-radius: 0em;\n}\n\n/* Grid */\n.ui.page.grid.segment,\n.ui.grid > .row > .ui.segment.column,\n.ui.grid > .ui.segment.column {\n  padding-top: @pageGridMargin;\n  padding-bottom: @pageGridMargin;\n}\n.ui.grid.segment {\n  margin: @margin;\n  border-radius: @borderRadius;\n}\n\n/* Table */\n.ui.basic.table.segment {\n  background: @background;\n  border: @border;\n  box-shadow: @boxShadow;\n}\n.ui[class*=\"very basic\"].table.segment {\n  padding: @padding;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n/*-------------------\n        Piled\n--------------------*/\n\n.ui.piled.segments,\n.ui.piled.segment {\n  margin: @piledMargin 0em;\n  box-shadow: @piledBoxShadow;\n  z-index: @piledZIndex;\n}\n.ui.piled.segment:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment:last-child {\n  margin-bottom: 0em;\n}\n.ui.piled.segments:after,\n.ui.piled.segments:before,\n.ui.piled.segment:after,\n.ui.piled.segment:before {\n  background-color: @white;\n  visibility: visible;\n  content: '';\n  display: block;\n  height: 100%;\n  left: 0px;\n  position: absolute;\n  width: 100%;\n  border: @piledBorder;\n  box-shadow: @piledBoxShadow;\n}\n.ui.piled.segments:before,\n.ui.piled.segment:before {\n  transform: rotate(-@piledDegrees);\n  top: 0;\n  z-index: -2;\n}\n.ui.piled.segments:after,\n.ui.piled.segment:after {\n  transform: rotate(@piledDegrees);\n  top: 0;\n  z-index: -1;\n}\n\n/* Piled Attached */\n.ui[class*=\"top attached\"].piled.segment {\n  margin-top: @piledMargin;\n  margin-bottom: 0em;\n}\n.ui.piled.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n.ui.piled.segment[class*=\"bottom attached\"] {\n  margin-top: 0em;\n  margin-bottom: @piledMargin;\n}\n.ui.piled.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n       Stacked\n--------------------*/\n\n.ui.stacked.segment {\n  padding-bottom: @stackedPadding;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segments:after,\n.ui.stacked.segment:before,\n.ui.stacked.segment:after {\n  content: '';\n  position: absolute;\n  bottom: -(@stackedHeight / 2);\n  left: 0%;\n\n  border-top: 1px solid @borderColor;\n  background: @stackedPageBackground;\n\n  width: 100%;\n  height: @stackedHeight;\n  visibility: visible;\n}\n.ui.stacked.segments:before,\n.ui.stacked.segment:before {\n  display: none;\n}\n\n/* Add additional page */\n.ui.tall.stacked.segments:before,\n.ui.tall.stacked.segment:before {\n  display: block;\n  bottom: 0px;\n}\n\n/* Inverted */\n.ui.stacked.inverted.segments:before,\n.ui.stacked.inverted.segments:after,\n.ui.stacked.inverted.segment:before,\n.ui.stacked.inverted.segment:after {\n  background-color: @subtleTransparentBlack;\n  border-top: 1px solid @selectedBorderColor;\n}\n\n/*-------------------\n       Padded\n--------------------*/\n\n.ui.padded.segment {\n  padding: @paddedSegmentPadding;\n}\n\n.ui[class*=\"very padded\"].segment {\n  padding: @veryPaddedSegmentPadding;\n}\n\n/* Padded vertical */\n.ui.padded.segment.vertical.segment,\n.ui[class*=\"very padded\"].vertical.segment {\n  padding-left: 0px;\n  padding-right: 0px;\n}\n\n/*-------------------\n       Compact\n--------------------*/\n\n.ui.compact.segment {\n  display: table;\n}\n\n/* Compact Group */\n.ui.compact.segments {\n  display: inline-flex;\n}\n.ui.compact.segments .segment,\n.ui.segments .compact.segment {\n  display: block;\n  flex: 0 1 auto;\n}\n\n/*-------------------\n       Circular\n--------------------*/\n\n.ui.circular.segment {\n  display: table-cell;\n  padding: @circularPadding;\n  text-align: center;\n  vertical-align: middle;\n  border-radius: 500em;\n}\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.segments,\n.ui.raised.segment {\n  box-shadow: @raisedBoxShadow;\n}\n\n\n/*******************************\n            Groups\n*******************************/\n\n/* Group */\n.ui.segments {\n  flex-direction: column;\n  position: relative;\n  margin: @groupedMargin;\n  border: @groupedBorder;\n  box-shadow: @groupedBoxShadow;\n  border-radius: @groupedBorderRadius;\n}\n.ui.segments:first-child {\n  margin-top: 0em;\n}\n.ui.segments:last-child {\n  margin-bottom: 0em;\n}\n\n\n/* Nested Segment */\n.ui.segments > .segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: @groupedSegmentMargin;\n  width: @groupedSegmentWidth;\n  box-shadow: @groupedSegmentBoxShadow;\n  border: @groupedSegmentBorder;\n  border-top: @groupedSegmentDivider;\n}\n\n.ui.segments:not(.horizontal) > .segment:first-child {\n  top: @attachedTopOffset;\n  bottom: 0px;\n  border-top: none;\n  margin-top: 0em;\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: @attachedTopOffset;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n\n/* Bottom */\n.ui.segments:not(.horizontal) > .segment:last-child {\n  top: @attachedBottomOffset;\n  bottom: 0px;\n  margin-top: 0em;\n  margin-bottom: 0em;\n  box-shadow: @attachedBottomBoxShadow;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n\n/* Only */\n.ui.segments:not(.horizontal) > .segment:only-child {\n  border-radius: @borderRadius;\n}\n\n\n/* Nested Group */\n.ui.segments > .ui.segments {\n  border-top: @groupedSegmentDivider;\n  margin: @nestedGroupMargin;\n}\n.ui.segments > .segments:first-child {\n  border-top: none;\n}\n.ui.segments > .segment + .segments:not(.horizontal) {\n  margin-top: 0em;\n}\n\n/* Horizontal Group */\n.ui.horizontal.segments {\n  display: flex;\n  flex-direction: row;\n  background-color: transparent;\n  border-radius: 0px;\n  padding: 0em;\n  background-color: @background;\n  box-shadow: @boxShadow;\n  margin: @margin;\n  border-radius: @borderRadius;\n  border: @border;\n}\n\n/* Nested Horizontal Group */\n.ui.segments > .horizontal.segments {\n  margin: 0em;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-top: @groupedSegmentDivider;\n}\n\n/* Horizontal Segment */\n.ui.horizontal.segments > .segment {\n  flex: 1 1 auto;\n  -ms-flex: 1 1 0px; /* Solves #2550 MS Flex */\n  margin: 0em;\n  min-width: 0px;\n  background-color: transparent;\n  border-radius: 0px;\n  border: none;\n  box-shadow: none;\n  border-left: @borderWidth solid @borderColor;\n}\n\n/* Border Fixes */\n.ui.segments > .horizontal.segments:first-child {\n  border-top: none;\n}\n.ui.horizontal.segments > .segment:first-child {\n  border-left: none;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.segment {\n  opacity: @disabledOpacity;\n  color: @disabledTextColor;\n}\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.segment {\n  position: relative;\n  cursor: default;\n  pointer-events: none;\n  text-shadow: none !important;\n  color: transparent !important;\n  transition: all 0s linear;\n}\n.ui.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: 0%;\n  left: 0%;\n  background: @loaderDimmerColor;\n  width: 100%;\n  height: 100%;\n  border-radius: @borderRadius;\n  z-index: @loaderDimmerZIndex;\n}\n.ui.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: segment-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor @loaderFillColor @loaderFillColor @loaderFillColor;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n  visibility: visible;\n  z-index: @loaderLineZIndex;\n}\n\n@keyframes segment-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Basic\n--------------------*/\n\n.ui.basic.segment {\n  background: @basicBackground;\n  box-shadow: @basicBoxShadow;\n  border: @basicBorder;\n  border-radius: @basicBorderRadius;\n}\n\n/*-------------------\n       Clearing\n--------------------*/\n\n.ui.clearing.segment:after {\n  content: \".\";\n  display: block;\n  height: 0;\n  clear: both;\n  visibility: hidden;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n.ui.red.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @red !important;\n}\n.ui.inverted.red.segment {\n  background-color: @red !important;\n  color: @white !important;\n}\n\n/* Orange */\n.ui.orange.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @orange !important;\n}\n.ui.inverted.orange.segment {\n  background-color: @orange !important;\n  color: @white !important;\n}\n\n/* Yellow */\n.ui.yellow.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @yellow !important;\n}\n.ui.inverted.yellow.segment {\n  background-color: @yellow !important;\n  color: @white !important;\n}\n\n/* Olive */\n.ui.olive.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @olive !important;\n}\n.ui.inverted.olive.segment {\n  background-color: @olive !important;\n  color: @white !important;\n}\n\n/* Green */\n.ui.green.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @green !important;\n}\n.ui.inverted.green.segment {\n  background-color: @green !important;\n  color: @white !important;\n}\n\n/* Teal */\n.ui.teal.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @teal !important;\n}\n.ui.inverted.teal.segment {\n  background-color: @teal !important;\n  color: @white !important;\n}\n\n/* Blue */\n.ui.blue.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @blue !important;\n}\n.ui.inverted.blue.segment {\n  background-color: @blue !important;\n  color: @white !important;\n}\n\n/* Violet */\n.ui.violet.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @violet !important;\n}\n.ui.inverted.violet.segment {\n  background-color: @violet !important;\n  color: @white !important;\n}\n\n/* Purple */\n.ui.purple.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @purple !important;\n}\n.ui.inverted.purple.segment {\n  background-color: @purple !important;\n  color: @white !important;\n}\n\n/* Pink */\n.ui.pink.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @pink !important;\n}\n.ui.inverted.pink.segment {\n  background-color: @pink !important;\n  color: @white !important;\n}\n\n/* Brown */\n.ui.brown.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @brown !important;\n}\n.ui.inverted.brown.segment {\n  background-color: @brown !important;\n  color: @white !important;\n}\n\n/* Grey */\n.ui.grey.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @grey !important;\n}\n.ui.inverted.grey.segment {\n  background-color: @grey !important;\n  color: @white !important;\n}\n\n/* Black */\n.ui.black.segment:not(.inverted) {\n  border-top: @coloredBorderSize solid @black !important;\n}\n.ui.inverted.black.segment {\n  background-color: @black !important;\n  color: @white !important;\n}\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui[class*=\"left aligned\"].segment {\n  text-align: left;\n}\n.ui[class*=\"right aligned\"].segment {\n  text-align: right;\n}\n.ui[class*=\"center aligned\"].segment {\n  text-align: center;\n}\n\n/*-------------------\n       Floated\n--------------------*/\n\n.ui.floated.segment,\n.ui[class*=\"left floated\"].segment {\n  float: left;\n  margin-right: @floatedDistance;\n}\n.ui[class*=\"right floated\"].segment {\n  float: right;\n  margin-left: @floatedDistance;\n}\n\n\n/*-------------------\n      Inverted\n--------------------*/\n\n.ui.inverted.segment {\n  border: none;\n  box-shadow: none;\n}\n.ui.inverted.segment,\n.ui.primary.inverted.segment {\n  background: @invertedBackground;\n  color: @invertedTextColor;\n}\n\n/* Nested */\n.ui.inverted.segment .segment {\n  color: @textColor;\n}\n.ui.inverted.segment .inverted.segment {\n  color: @invertedTextColor;\n}\n\n/* Attached */\n.ui.inverted.attached.segment {\n  border-color: @solidWhiteBorderColor;\n}\n\n/*-------------------\n     Emphasis\n--------------------*/\n\n/* Secondary */\n.ui.secondary.segment {\n  background: @secondaryBackground;\n  color: @secondaryColor;\n}\n.ui.secondary.inverted.segment {\n  background: @secondaryInvertedBackground;\n  color: @secondaryInvertedColor;\n}\n\n/* Tertiary */\n.ui.tertiary.segment {\n  background: @tertiaryBackground;\n  color: @tertiaryColor;\n}\n.ui.tertiary.inverted.segment {\n  background: @tertiaryInvertedBackground;\n  color: @tertiaryInvertedColor;\n}\n\n\n/*-------------------\n      Attached\n--------------------*/\n\n/* Middle */\n.ui.attached.segment {\n  top: 0px;\n  bottom: 0px;\n  border-radius: 0px;\n  margin: 0em @attachedHorizontalOffset;\n  width: @attachedWidth;\n  max-width: @attachedWidth;\n  box-shadow: @attachedBoxShadow;\n  border: @attachedBorder;\n}\n.ui.attached:not(.message) + .ui.attached.segment:not(.top) {\n  border-top: none;\n}\n\n/* Top */\n.ui[class*=\"top attached\"].segment {\n  bottom: 0px;\n  margin-bottom: 0em;\n  top: @attachedTopOffset;\n  margin-top: @verticalMargin;\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n.ui.segment[class*=\"top attached\"]:first-child {\n  margin-top: 0em;\n}\n\n/* Bottom */\n.ui.segment[class*=\"bottom attached\"] {\n  bottom: 0px;\n  margin-top: 0em;\n  top: @attachedBottomOffset;\n  margin-bottom: @verticalMargin;\n  box-shadow: @attachedBottomBoxShadow;\n  border-radius: 0em 0em @borderRadius @borderRadius;\n}\n.ui.segment[class*=\"bottom attached\"]:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Size\n--------------------*/\n\n.ui.mini.segments .segment,\n.ui.mini.segment {\n  font-size: @mini;\n}\n.ui.tiny.segments .segment,\n.ui.tiny.segment {\n  font-size: @tiny;\n}\n.ui.small.segments .segment,\n.ui.small.segment {\n  font-size: @small;\n}\n.ui.segments .segment,\n.ui.segment {\n  font-size: @medium;\n}\n.ui.large.segments .segment,\n.ui.large.segment {\n  font-size: @large;\n}\n.ui.big.segments .segment,\n.ui.big.segment {\n  font-size: @big;\n}\n.ui.huge.segments .segment,\n.ui.huge.segment {\n  font-size: @huge;\n}\n.ui.massive.segments .segment,\n.ui.massive.segment {\n  font-size: @massive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/elements/step.less",
    "content": "/*!\n * # Semantic UI - Step\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n             Step\n*******************************/\n\n/*--------------\n   Load Theme\n---------------*/\n\n@type    : 'element';\n@element : 'step';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Plural\n*******************************/\n\n.ui.steps {\n  display: inline-flex;\n  flex-direction: row;\n  align-items: stretch;\n  margin: @stepMargin;\n  background: @stepsBackground;\n  box-shadow: @stepsBoxShadow;\n  line-height: @lineHeight;\n  border-radius: @stepsBorderRadius;\n  border: @stepsBorder;\n}\n\n/* First Steps */\n.ui.steps:first-child {\n  margin-top: 0em;\n}\n\n/* Last Steps */\n.ui.steps:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n           Singular\n*******************************/\n\n.ui.steps .step {\n  position: relative;\n  display: flex;\n  flex: 1 0 auto;\n  flex-wrap: wrap;\n  flex-direction: row;\n  vertical-align: middle;\n  align-items: center;\n  justify-content: @justifyContent;\n\n  margin: @verticalMargin @horizontalMargin;\n  padding: @verticalPadding @horizontalPadding;\n  background: @background;\n  color: @textColor;\n  box-shadow: @boxShadow;\n  border-radius: @borderRadius;\n  border: @border;\n  border-right: @divider;\n  transition: @transition;\n}\n\n/* Arrow */\n.ui.steps .step:after {\n  display: none;\n  position: absolute;\n  z-index: 2;\n  content: '';\n  top: @arrowTopOffset;\n  right: @arrowRightOffset;\n  border: medium none;\n  background-color: @arrowBackgroundColor;\n  width: @arrowSize;\n  height: @arrowSize;\n\n  border-style: solid;\n  border-color: @borderColor;\n  border-width: @arrowBorderWidth;\n\n  transition: @transition;\n  transform: translateY(-50%) translateX(50%) rotate(-45deg);\n}\n\n/* First Step */\n.ui.steps .step:first-child {\n  padding-left: @horizontalPadding;\n  border-radius: @stepsBorderRadius 0em 0em @stepsBorderRadius;\n}\n\n/* Last Step */\n.ui.steps .step:last-child {\n  border-radius: 0em @stepsBorderRadius @stepsBorderRadius 0em;\n}\n.ui.steps .step:last-child {\n  border-right: none;\n  margin-right: 0em;\n}\n\n/* Only Step */\n.ui.steps .step:only-child {\n  border-radius: @stepsBorderRadius;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n/* Title */\n.ui.steps .step .title {\n  font-family: @titleFontFamily;\n  font-size: @titleFontSize;\n  font-weight: @titleFontWeight;\n}\n.ui.steps .step > .title {\n  width: 100%;\n}\n\n/* Description */\n.ui.steps .step .description {\n  font-weight: @descriptionFontWeight;\n  font-size: @descriptionFontSize;\n  color: @descriptionColor;\n}\n.ui.steps .step > .description {\n  width: 100%;\n}\n.ui.steps .step .title ~ .description {\n  margin-top: @descriptionDistance;\n}\n\n/* Icon */\n.ui.steps .step > .icon {\n  line-height: 1;\n  font-size: @iconSize;\n  margin: 0em @iconDistance 0em 0em;\n}\n.ui.steps .step > .icon,\n.ui.steps .step > .icon ~ .content {\n  display: block;\n  flex: 0 1 auto;\n  align-self: @iconAlign;\n}\n.ui.steps .step > .icon ~ .content {\n  flex-grow: 1 0 auto;\n}\n\n/* Horizontal Icon */\n.ui.steps:not(.vertical) .step > .icon {\n  width: auto;\n}\n\n/* Link */\n.ui.steps .link.step,\n.ui.steps a.step {\n  cursor: pointer;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Ordered\n---------------*/\n\n.ui.ordered.steps {\n  counter-reset: ordered;\n}\n.ui.ordered.steps .step:before {\n  display: block;\n  position: static;\n  text-align: center;\n  content: counters(ordered, \".\");\n  align-self: @iconAlign;\n  margin-right: @iconDistance;\n  font-size: @iconSize;\n  counter-increment: ordered;\n  font-family: @orderedFontFamily;\n  font-weight: @orderedFontWeight;\n}\n\n.ui.ordered.steps .step > * {\n  display: block;\n  align-self: @iconAlign;\n}\n\n\n/*--------------\n    Vertical\n---------------*/\n\n.ui.vertical.steps {\n  display: inline-flex;\n  flex-direction: column;\n  overflow: visible;\n}\n.ui.vertical.steps .step {\n  justify-content: flex-start;\n  border-radius: @borderRadius;\n  padding: @verticalPadding @horizontalPadding;\n  border-right: none;\n  border-bottom: @verticalDivider;\n}\n.ui.vertical.steps .step:first-child {\n  padding: @verticalPadding @horizontalPadding;\n  border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;\n}\n.ui.vertical.steps .step:last-child {\n  border-bottom: none;\n  border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;\n}\n.ui.vertical.steps .step:only-child {\n  border-radius: @stepsBorderRadius;\n}\n\n\n/* Arrow */\n.ui.vertical.steps .step:after {\n  display: none;\n}\n.ui.vertical.steps .step:after {\n  top: @verticalArrowTopOffset;\n  right: @verticalArrowRightOffset;\n  border-width: @verticalArrowBorderWidth;\n}\n\n.ui.vertical.steps .step:after {\n  display: @verticalArrowDisplay;\n}\n.ui.vertical.steps .active.step:after {\n  display: @verticalActiveArrowDisplay;\n}\n.ui.vertical.steps .step:last-child:after {\n  display: @verticalLastArrowDisplay;\n}\n.ui.vertical.steps .active.step:last-child:after {\n  display: @verticalActiveLastArrowDisplay;\n}\n\n\n/*---------------\n    Responsive\n----------------*/\n\n/* Mobile (Default) */\n@media only screen and (max-width: (@largestMobileScreen)) {\n\n  .ui.steps:not(.unstackable) {\n    display: inline-flex;\n    overflow: visible;\n    flex-direction: column;\n  }\n  .ui.steps:not(.unstackable) .step {\n    width: 100% !important;\n    flex-direction: column;\n    border-radius: @borderRadius;\n    padding: @verticalPadding @horizontalPadding;\n  }\n  .ui.steps:not(.unstackable) .step:first-child {\n    padding: @verticalPadding @horizontalPadding;\n    border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;\n  }\n  .ui.steps:not(.unstackable) .step:last-child {\n    border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;\n  }\n\n  /* Arrow */\n  .ui.steps:not(.unstackable) .step:after {\n    display: none !important;\n  }\n\n  /* Content */\n  .ui.steps:not(.unstackable) .step .content {\n    text-align: center;\n  }\n\n  /* Icon */\n  .ui.steps:not(.unstackable) .step > .icon,\n  .ui.ordered.steps:not(.unstackable) .step:before {\n    margin: 0em 0em @mobileIconDistance 0em;\n  }\n\n}\n\n/*******************************\n             States\n*******************************/\n\n/* Link Hover */\n.ui.steps .link.step:hover::after,\n.ui.steps .link.step:hover,\n.ui.steps a.step:hover::after,\n.ui.steps a.step:hover {\n  background: @hoverBackground;\n  color: @hoverColor;\n}\n\n/* Link Down */\n.ui.steps .link.step:active::after,\n.ui.steps .link.step:active,\n.ui.steps a.step:active::after,\n.ui.steps a.step:active {\n  background: @downBackground;\n  color: @downColor;\n}\n\n/* Active */\n.ui.steps .step.active {\n  cursor: auto;\n  background: @activeBackground;\n}\n.ui.steps .step.active:after {\n  background: @activeBackground;\n}\n.ui.steps .step.active .title {\n  color: @activeColor;\n}\n.ui.ordered.steps .step.active:before,\n.ui.steps .active.step .icon {\n  color: @activeIconColor;\n}\n\n/* Active Arrow */\n.ui.steps .step:after {\n  display: @arrowDisplay;\n}\n.ui.steps .active.step:after {\n  display: @activeArrowDisplay;\n}\n.ui.steps .step:last-child:after {\n  display: @lastArrowDisplay;\n}\n.ui.steps .active.step:last-child:after {\n  display: @activeLastArrowDisplay;\n}\n\n/* Active Hover */\n.ui.steps .link.active.step:hover::after,\n.ui.steps .link.active.step:hover,\n.ui.steps a.active.step:hover::after,\n.ui.steps a.active.step:hover {\n  cursor: pointer;\n  background: @activeHoverBackground;\n  color: @activeHoverColor;\n}\n\n/* Completed */\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  color: @completedColor;\n}\n\n/* Disabled */\n.ui.steps .disabled.step {\n  cursor: auto;\n  background: @disabledBackground;\n  pointer-events: none;\n}\n.ui.steps .disabled.step,\n.ui.steps .disabled.step .title,\n.ui.steps .disabled.step .description {\n  color: @disabledColor;\n}\n.ui.steps .disabled.step:after {\n  background: @disabledBackground;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n   Stackable\n---------------*/\n\n/* Tablet Or Below */\n@media only screen and (max-width: @largestTabletScreen) {\n\n.ui[class*=\"tablet stackable\"].steps {\n  display: inline-flex;\n  overflow: visible;\n  flex-direction: column;\n}\n\n/* Steps */\n.ui[class*=\"tablet stackable\"].steps .step {\n  flex-direction: column;\n  border-radius: @borderRadius;\n  padding: @verticalPadding @horizontalPadding;\n}\n.ui[class*=\"tablet stackable\"].steps .step:first-child {\n  padding: @verticalPadding @horizontalPadding;\n  border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;\n}\n.ui[class*=\"tablet stackable\"].steps .step:last-child {\n  border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;\n}\n\n/* Arrow */\n.ui[class*=\"tablet stackable\"].steps .step:after {\n  display: none !important;\n}\n\n/* Content */\n.ui[class*=\"tablet stackable\"].steps .step .content {\n  text-align: center;\n}\n\n/* Icon */\n.ui[class*=\"tablet stackable\"].steps .step > .icon,\n.ui[class*=\"tablet stackable\"].ordered.steps .step:before {\n  margin: 0em 0em @mobileIconDistance 0em;\n}\n\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n/* Fluid */\n.ui.fluid.steps {\n  display: flex;\n  width: 100%;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* Top */\n.ui.attached.steps {\n  width: @attachedWidth !important;\n  margin: 0em @attachedHorizontalOffset @attachedVerticalOffset;\n  max-width: @attachedWidth;\n  border-radius: @stepsBorderRadius @stepsBorderRadius 0em 0em;\n}\n.ui.attached.steps .step:first-child {\n  border-radius: @stepsBorderRadius 0em 0em 0em;\n}\n.ui.attached.steps .step:last-child {\n  border-radius: 0em @stepsBorderRadius 0em 0em;\n}\n\n/* Bottom */\n.ui.bottom.attached.steps {\n  margin: @attachedVerticalOffset @attachedHorizontalOffset 0em;\n  border-radius: 0em 0em @stepsBorderRadius @stepsBorderRadius;\n}\n.ui.bottom.attached.steps .step:first-child {\n  border-radius: 0em 0em 0em @stepsBorderRadius;\n}\n.ui.bottom.attached.steps .step:last-child {\n  border-radius: 0em 0em @stepsBorderRadius 0em;\n}\n\n/*-------------------\n    Evenly Divided\n--------------------*/\n\n.ui.one.steps,\n.ui.two.steps,\n.ui.three.steps,\n.ui.four.steps,\n.ui.five.steps,\n.ui.six.steps,\n.ui.seven.steps,\n.ui.eight.steps {\n  width: 100%;\n}\n.ui.one.steps > .step,\n.ui.two.steps > .step,\n.ui.three.steps > .step,\n.ui.four.steps > .step,\n.ui.five.steps > .step,\n.ui.six.steps > .step,\n.ui.seven.steps > .step,\n.ui.eight.steps > .step {\n  flex-wrap: nowrap;\n}\n.ui.one.steps > .step {\n  width: 100%;\n}\n.ui.two.steps > .step {\n  width: 50%;\n}\n.ui.three.steps > .step {\n  width: 33.333%;\n}\n.ui.four.steps > .step {\n  width: 25%;\n}\n.ui.five.steps > .step {\n  width: 20%;\n}\n.ui.six.steps > .step {\n  width: 16.666%;\n}\n.ui.seven.steps > .step {\n  width: 14.285%;\n}\n.ui.eight.steps > .step {\n  width: 12.500%;\n}\n\n/*-------------------\n       Sizes\n--------------------*/\n\n\n.ui.mini.steps .step,\n.ui.mini.step {\n  font-size: @mini;\n}\n.ui.tiny.steps .step,\n.ui.tiny.step {\n  font-size: @tiny;\n}\n.ui.small.steps .step,\n.ui.small.step {\n  font-size: @small;\n}\n.ui.steps .step,\n.ui.step {\n  font-size: @medium;\n}\n.ui.large.steps .step,\n.ui.large.step {\n  font-size: @large;\n}\n.ui.big.steps .step,\n.ui.big.step {\n  font-size: @big;\n}\n.ui.huge.steps .step,\n.ui.huge.step {\n  font-size: @huge;\n}\n.ui.massive.steps .step,\n.ui.massive.step {\n  font-size: @massive;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/globals/reset.less",
    "content": "/*!\n * # Semantic UI - Reset\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'global';\n@element : 'reset';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Reset\n*******************************/\n\n/* Border-Box */\n*,\n*:before,\n*:after {\n  box-sizing: inherit;\n}\nhtml {\n  box-sizing: border-box;\n}\n\n/* iPad Input Shadows */\ninput[type=\"text\"], input[type=\"email\"], input[type=\"search\"], input[type=\"password\"] {\n  -webkit-appearance: none;\n  -moz-appearance: none; /* mobile firefox too! */\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/globals/site.js",
    "content": "/*!\n * # Semantic UI - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n$.site = $.fn.site = function(parameters) {\n  var\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    settings        = ( $.isPlainObject(parameters) )\n      ? $.extend(true, {}, $.site.settings, parameters)\n      : $.extend({}, $.site.settings),\n\n    namespace       = settings.namespace,\n    error           = settings.error,\n\n    eventNamespace  = '.' + namespace,\n    moduleNamespace = 'module-' + namespace,\n\n    $document       = $(document),\n    $module         = $document,\n    element         = this,\n    instance        = $module.data(moduleNamespace),\n\n    module,\n    returnedValue\n  ;\n  module = {\n\n    initialize: function() {\n      module.instantiate();\n    },\n\n    instantiate: function() {\n      module.verbose('Storing instance of site', module);\n      instance = module;\n      $module\n        .data(moduleNamespace, module)\n      ;\n    },\n\n    normalize: function() {\n      module.fix.console();\n      module.fix.requestAnimationFrame();\n    },\n\n    fix: {\n      console: function() {\n        module.debug('Normalizing window.console');\n        if (console === undefined || console.log === undefined) {\n          module.verbose('Console not available, normalizing events');\n          module.disable.console();\n        }\n        if (typeof console.group == 'undefined' || typeof console.groupEnd == 'undefined' || typeof console.groupCollapsed == 'undefined') {\n          module.verbose('Console group not available, normalizing events');\n          window.console.group = function() {};\n          window.console.groupEnd = function() {};\n          window.console.groupCollapsed = function() {};\n        }\n        if (typeof console.markTimeline == 'undefined') {\n          module.verbose('Mark timeline not available, normalizing events');\n          window.console.markTimeline = function() {};\n        }\n      },\n      consoleClear: function() {\n        module.debug('Disabling programmatic console clearing');\n        window.console.clear = function() {};\n      },\n      requestAnimationFrame: function() {\n        module.debug('Normalizing requestAnimationFrame');\n        if(window.requestAnimationFrame === undefined) {\n          module.debug('RequestAnimationFrame not available, normalizing event');\n          window.requestAnimationFrame = window.requestAnimationFrame\n            || window.mozRequestAnimationFrame\n            || window.webkitRequestAnimationFrame\n            || window.msRequestAnimationFrame\n            || function(callback) { setTimeout(callback, 0); }\n          ;\n        }\n      }\n    },\n\n    moduleExists: function(name) {\n      return ($.fn[name] !== undefined && $.fn[name].settings !== undefined);\n    },\n\n    enabled: {\n      modules: function(modules) {\n        var\n          enabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(module.moduleExists(name)) {\n            enabledModules.push(name);\n          }\n        });\n        return enabledModules;\n      }\n    },\n\n    disabled: {\n      modules: function(modules) {\n        var\n          disabledModules = []\n        ;\n        modules = modules || settings.modules;\n        $.each(modules, function(index, name) {\n          if(!module.moduleExists(name)) {\n            disabledModules.push(name);\n          }\n        });\n        return disabledModules;\n      }\n    },\n\n    change: {\n      setting: function(setting, value, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? (modules === 'all')\n            ? settings.modules\n            : [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            namespace = (module.moduleExists(name))\n              ? $.fn[name].settings.namespace || false\n              : true,\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', setting, value, name);\n            $.fn[name].settings[setting] = value;\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', setting, value);\n              }\n            }\n          }\n        });\n      },\n      settings: function(newSettings, modules, modifyExisting) {\n        modules = (typeof modules === 'string')\n          ? [modules]\n          : modules || settings.modules\n        ;\n        modifyExisting = (modifyExisting !== undefined)\n          ? modifyExisting\n          : true\n        ;\n        $.each(modules, function(index, name) {\n          var\n            $existingModules\n          ;\n          if(module.moduleExists(name)) {\n            module.verbose('Changing default setting', newSettings, name);\n            $.extend(true, $.fn[name].settings, newSettings);\n            if(modifyExisting && namespace) {\n              $existingModules = $(':data(module-' + namespace + ')');\n              if($existingModules.length > 0) {\n                module.verbose('Modifying existing settings', $existingModules);\n                $existingModules[name]('setting', newSettings);\n              }\n            }\n          }\n        });\n      }\n    },\n\n    enable: {\n      console: function() {\n        module.console(true);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling debug for modules', modules);\n        module.change.setting('debug', true, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Enabling verbose debug for modules', modules);\n        module.change.setting('verbose', true, modules, modifyExisting);\n      }\n    },\n    disable: {\n      console: function() {\n        module.console(false);\n      },\n      debug: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling debug for modules', modules);\n        module.change.setting('debug', false, modules, modifyExisting);\n      },\n      verbose: function(modules, modifyExisting) {\n        modules = modules || settings.modules;\n        module.debug('Disabling verbose debug for modules', modules);\n        module.change.setting('verbose', false, modules, modifyExisting);\n      }\n    },\n\n    console: function(enable) {\n      if(enable) {\n        if(instance.cache.console === undefined) {\n          module.error(error.console);\n          return;\n        }\n        module.debug('Restoring console function');\n        window.console = instance.cache.console;\n      }\n      else {\n        module.debug('Disabling console function');\n        instance.cache.console = window.console;\n        window.console = {\n          clear          : function(){},\n          error          : function(){},\n          group          : function(){},\n          groupCollapsed : function(){},\n          groupEnd       : function(){},\n          info           : function(){},\n          log            : function(){},\n          markTimeline   : function(){},\n          warn           : function(){}\n        };\n      }\n    },\n\n    destroy: function() {\n      module.verbose('Destroying previous site for', $module);\n      $module\n        .removeData(moduleNamespace)\n      ;\n    },\n\n    cache: {},\n\n    setting: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, settings, name);\n      }\n      else if(value !== undefined) {\n        settings[name] = value;\n      }\n      else {\n        return settings[name];\n      }\n    },\n    internal: function(name, value) {\n      if( $.isPlainObject(name) ) {\n        $.extend(true, module, name);\n      }\n      else if(value !== undefined) {\n        module[name] = value;\n      }\n      else {\n        return module[name];\n      }\n    },\n    debug: function() {\n      if(settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.debug.apply(console, arguments);\n        }\n      }\n    },\n    verbose: function() {\n      if(settings.verbose && settings.debug) {\n        if(settings.performance) {\n          module.performance.log(arguments);\n        }\n        else {\n          module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n          module.verbose.apply(console, arguments);\n        }\n      }\n    },\n    error: function() {\n      module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n      module.error.apply(console, arguments);\n    },\n    performance: {\n      log: function(message) {\n        var\n          currentTime,\n          executionTime,\n          previousTime\n        ;\n        if(settings.performance) {\n          currentTime   = new Date().getTime();\n          previousTime  = time || currentTime;\n          executionTime = currentTime - previousTime;\n          time          = currentTime;\n          performance.push({\n            'Element'        : element,\n            'Name'           : message[0],\n            'Arguments'      : [].slice.call(message, 1) || '',\n            'Execution Time' : executionTime\n          });\n        }\n        clearTimeout(module.performance.timer);\n        module.performance.timer = setTimeout(module.performance.display, 500);\n      },\n      display: function() {\n        var\n          title = settings.name + ':',\n          totalTime = 0\n        ;\n        time = false;\n        clearTimeout(module.performance.timer);\n        $.each(performance, function(index, data) {\n          totalTime += data['Execution Time'];\n        });\n        title += ' ' + totalTime + 'ms';\n        if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n          console.groupCollapsed(title);\n          if(console.table) {\n            console.table(performance);\n          }\n          else {\n            $.each(performance, function(index, data) {\n              console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n            });\n          }\n          console.groupEnd();\n        }\n        performance = [];\n      }\n    },\n    invoke: function(query, passedArguments, context) {\n      var\n        object = instance,\n        maxDepth,\n        found,\n        response\n      ;\n      passedArguments = passedArguments || queryArguments;\n      context         = element         || context;\n      if(typeof query == 'string' && object !== undefined) {\n        query    = query.split(/[\\. ]/);\n        maxDepth = query.length - 1;\n        $.each(query, function(depth, value) {\n          var camelCaseValue = (depth != maxDepth)\n            ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n            : query\n          ;\n          if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n            object = object[camelCaseValue];\n          }\n          else if( object[camelCaseValue] !== undefined ) {\n            found = object[camelCaseValue];\n            return false;\n          }\n          else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n            object = object[value];\n          }\n          else if( object[value] !== undefined ) {\n            found = object[value];\n            return false;\n          }\n          else {\n            module.error(error.method, query);\n            return false;\n          }\n        });\n      }\n      if ( $.isFunction( found ) ) {\n        response = found.apply(context, passedArguments);\n      }\n      else if(found !== undefined) {\n        response = found;\n      }\n      if($.isArray(returnedValue)) {\n        returnedValue.push(response);\n      }\n      else if(returnedValue !== undefined) {\n        returnedValue = [returnedValue, response];\n      }\n      else if(response !== undefined) {\n        returnedValue = response;\n      }\n      return found;\n    }\n  };\n\n  if(methodInvoked) {\n    if(instance === undefined) {\n      module.initialize();\n    }\n    module.invoke(query);\n  }\n  else {\n    if(instance !== undefined) {\n      module.destroy();\n    }\n    module.initialize();\n  }\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.site.settings = {\n\n  name        : 'Site',\n  namespace   : 'site',\n\n  error : {\n    console : 'Console cannot be restored, most likely it was overwritten outside of module',\n    method : 'The method you called is not defined.'\n  },\n\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  modules: [\n    'accordion',\n    'api',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'form',\n    'modal',\n    'nag',\n    'popup',\n    'rating',\n    'shape',\n    'sidebar',\n    'state',\n    'sticky',\n    'tab',\n    'transition',\n    'visit',\n    'visibility'\n  ],\n\n  siteNamespace   : 'site',\n  namespaceStub   : {\n    cache     : {},\n    config    : {},\n    sections  : {},\n    section   : {},\n    utilities : {}\n  }\n\n};\n\n// allows for selection of elements with data attributes\n$.extend($.expr[ \":\" ], {\n  data: ($.expr.createPseudo)\n    ? $.expr.createPseudo(function(dataName) {\n        return function(elem) {\n          return !!$.data(elem, dataName);\n        };\n      })\n    : function(elem, i, match) {\n      // support: jQuery < 1.8\n      return !!$.data(elem, match[ 3 ]);\n    }\n});\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/globals/site.less",
    "content": "/*!\n * # Semantic UI - Site\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'global';\n@element : 'site';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Page\n*******************************/\n\n.loadFonts();\n\nhtml,\nbody {\n  height: 100%;\n}\n\nhtml {\n  font-size: @emSize;\n}\n\nbody {\n  margin: 0px;\n  padding: 0px;\n  overflow-x: @pageOverflowX;\n  min-width: @pageMinWidth;\n  background: @pageBackground;\n  font-family: @pageFont;\n  font-size: @fontSize;\n  line-height: @lineHeight;\n  color: @textColor;\n  font-smoothing: @fontSmoothing;\n}\n\n/*******************************\n             Headers\n*******************************/\n\nh1,\nh2,\nh3,\nh4,\nh5 {\n  font-family: @headerFont;\n  line-height: @headerLineHeight;\n  margin: @headerMargin;\n  font-weight: @headerFontWeight;\n  padding: 0em;\n}\n\nh1 {\n  min-height: 1rem;\n  font-size: @h1;\n}\nh2 {\n  font-size: @h2;\n}\nh3 {\n  font-size: @h3;\n}\nh4 {\n  font-size: @h4;\n}\nh5 {\n  font-size: @h5;\n}\n\nh1:first-child,\nh2:first-child,\nh3:first-child,\nh4:first-child,\nh5:first-child {\n  margin-top: 0em;\n}\n\nh1:last-child,\nh2:last-child,\nh3:last-child,\nh4:last-child,\nh5:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n             Text\n*******************************/\n\np {\n  margin: @paragraphMargin;\n  line-height: @paragraphLineHeight;\n}\np:first-child {\n  margin-top: 0em;\n}\np:last-child {\n  margin-bottom: 0em;\n}\n\n/*-------------------\n        Links\n--------------------*/\n\na {\n  color: @linkColor;\n  text-decoration: @linkUnderline;\n}\na:hover {\n  color: @linkHoverColor;\n  text-decoration: @linkHoverUnderline;\n}\n\n\n/*******************************\n         Scrollbars\n*******************************/\n\n.addScrollbars() when (@useCustomScrollbars) {\n\n  /* Force Simple Scrollbars */\n  body ::-webkit-scrollbar {\n    -webkit-appearance: none;\n    width: @customScrollbarWidth;\n  }\n  body ::-webkit-scrollbar-track {\n    background: @trackBackground;\n    border-radius: @trackBorderRadius;\n  }\n  body ::-webkit-scrollbar-thumb {\n    cursor: pointer;\n    border-radius: @thumbBorderRadius;\n    background: @thumbBackground;\n    transition: @thumbTransition;\n  }\n  body ::-webkit-scrollbar-thumb:window-inactive {\n    background: @thumbInactiveBackground;\n  }\n  body ::-webkit-scrollbar-thumb:hover {\n    background: @thumbHoverBackground;\n  }\n\n  /* Inverted UI */\n  body .ui.inverted::-webkit-scrollbar-track {\n    background: @trackInvertedBackground;\n  }\n  body .ui.inverted::-webkit-scrollbar-thumb {\n    background: @thumbInvertedBackground;\n  }\n  body .ui.inverted::-webkit-scrollbar-thumb:window-inactive {\n    background: @thumbInvertedInactiveBackground;\n  }\n  body .ui.inverted::-webkit-scrollbar-thumb:hover {\n    background: @thumbInvertedHoverBackground;\n  }\n}\n\n/*******************************\n          Highlighting\n*******************************/\n\n/* Site */\n::-webkit-selection {\n  background-color: @highlightBackground;\n  color: @highlightColor;\n}\n::-moz-selection {\n  background-color: @highlightBackground;\n  color: @highlightColor;\n}\n::selection {\n  background-color: @highlightBackground;\n  color: @highlightColor;\n}\n\n/* Form */\ntextarea::-webkit-selection,\ninput::-webkit-selection {\n  background-color: @inputHighlightBackground;\n  color: @inputHighlightColor;\n}\ntextarea::-moz-selection,\ninput::-moz-selection {\n  background-color: @inputHighlightBackground;\n  color: @inputHighlightColor;\n}\ntextarea::selection,\ninput::selection {\n  background-color: @inputHighlightBackground;\n  color: @inputHighlightColor;\n}\n\n.addScrollbars();\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/accordion.js",
    "content": "/*!\n * # Semantic UI - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.accordion = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.accordion.settings, parameters)\n          : $.extend({}, $.fn.accordion.settings),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        $module  = $(this),\n        $title   = $module.find(selector.title),\n        $content = $module.find(selector.content),\n\n        element  = this,\n        instance = $module.data(moduleNamespace),\n        observer,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous instance', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $title   = $module.find(selector.title);\n          $content = $module.find(selector.content);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding delegated events');\n            $module\n              .on(settings.on + eventNamespace, selector.trigger, module.event.click)\n            ;\n          }\n        },\n\n        event: {\n          click: function() {\n            module.toggle.call(this);\n          }\n        },\n\n        toggle: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive && !isAnimating),\n            isOpening   = (!isActive && isAnimating)\n          ;\n          module.debug('Toggling visibility of content', $activeTitle);\n          if(isOpen || isOpening) {\n            if(settings.collapsible) {\n              module.close.call($activeTitle);\n            }\n            else {\n              module.debug('Cannot close accordion content collapsing is disabled');\n            }\n          }\n          else {\n            module.open.call($activeTitle);\n          }\n        },\n\n        open: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating = $activeContent.hasClass(className.animating),\n            isActive    = $activeContent.hasClass(className.active),\n            isOpen      = (isActive || isAnimating)\n          ;\n          if(isOpen) {\n            module.debug('Accordion already open, skipping', $activeContent);\n            return;\n          }\n          module.debug('Opening accordion content', $activeTitle);\n          settings.onOpening.call($activeContent);\n          if(settings.exclusive) {\n            module.closeOthers.call($activeTitle);\n          }\n          $activeTitle\n            .addClass(className.active)\n          ;\n          $activeContent\n            .stop(true, true)\n            .addClass(className.animating)\n          ;\n          if(settings.animateChildren) {\n            if($.fn.transition !== undefined && $module.transition('is supported')) {\n              $activeContent\n                .children()\n                  .transition({\n                    animation   : 'fade in',\n                    queue       : false,\n                    useFailSafe : true,\n                    debug       : settings.debug,\n                    verbose     : settings.verbose,\n                    duration    : settings.duration\n                  })\n              ;\n            }\n            else {\n              $activeContent\n                .children()\n                  .stop(true, true)\n                  .animate({\n                    opacity: 1\n                  }, settings.duration, module.resetOpacity)\n              ;\n            }\n          }\n          $activeContent\n            .slideDown(settings.duration, settings.easing, function() {\n              $activeContent\n                .removeClass(className.animating)\n                .addClass(className.active)\n              ;\n              module.reset.display.call(this);\n              settings.onOpen.call(this);\n              settings.onChange.call(this);\n            })\n          ;\n        },\n\n        close: function(query) {\n          var\n            $activeTitle = (query !== undefined)\n              ? (typeof query === 'number')\n                ? $title.eq(query)\n                : $(query).closest(selector.title)\n              : $(this).closest(selector.title),\n            $activeContent = $activeTitle.next($content),\n            isAnimating    = $activeContent.hasClass(className.animating),\n            isActive       = $activeContent.hasClass(className.active),\n            isOpening      = (!isActive && isAnimating),\n            isClosing      = (isActive && isAnimating)\n          ;\n          if((isActive || isOpening) && !isClosing) {\n            module.debug('Closing accordion content', $activeContent);\n            settings.onClosing.call($activeContent);\n            $activeTitle\n              .removeClass(className.active)\n            ;\n            $activeContent\n              .stop(true, true)\n              .addClass(className.animating)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $activeContent\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      queue       : false,\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $activeContent\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $activeContent\n              .slideUp(settings.duration, settings.easing, function() {\n                $activeContent\n                  .removeClass(className.animating)\n                  .removeClass(className.active)\n                ;\n                module.reset.display.call(this);\n                settings.onClose.call(this);\n                settings.onChange.call(this);\n              })\n            ;\n          }\n        },\n\n        closeOthers: function(index) {\n          var\n            $activeTitle = (index !== undefined)\n              ? $title.eq(index)\n              : $(this).closest(selector.title),\n            $parentTitles    = $activeTitle.parents(selector.content).prev(selector.title),\n            $activeAccordion = $activeTitle.closest(selector.accordion),\n            activeSelector   = selector.title + '.' + className.active + ':visible',\n            activeContent    = selector.content + '.' + className.active + ':visible',\n            $openTitles,\n            $nestedTitles,\n            $openContents\n          ;\n          if(settings.closeNested) {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $openContents = $openTitles.next($content);\n          }\n          else {\n            $openTitles   = $activeAccordion.find(activeSelector).not($parentTitles);\n            $nestedTitles = $activeAccordion.find(activeContent).find(activeSelector).not($parentTitles);\n            $openTitles   = $openTitles.not($nestedTitles);\n            $openContents = $openTitles.next($content);\n          }\n          if( ($openTitles.length > 0) ) {\n            module.debug('Exclusive enabled, closing other content', $openTitles);\n            $openTitles\n              .removeClass(className.active)\n            ;\n            $openContents\n              .removeClass(className.animating)\n              .stop(true, true)\n            ;\n            if(settings.animateChildren) {\n              if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $openContents\n                  .children()\n                    .transition({\n                      animation   : 'fade out',\n                      useFailSafe : true,\n                      debug       : settings.debug,\n                      verbose     : settings.verbose,\n                      duration    : settings.duration\n                    })\n                ;\n              }\n              else {\n                $openContents\n                  .children()\n                    .stop(true, true)\n                    .animate({\n                      opacity: 0\n                    }, settings.duration, module.resetOpacity)\n                ;\n              }\n            }\n            $openContents\n              .slideUp(settings.duration , settings.easing, function() {\n                $(this).removeClass(className.active);\n                module.reset.display.call(this);\n              })\n            ;\n          }\n        },\n\n        reset: {\n\n          display: function() {\n            module.verbose('Removing inline display from element', this);\n            $(this).css('display', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n          opacity: function() {\n            module.verbose('Removing inline opacity from element', this);\n            $(this).css('opacity', '');\n            if( $(this).attr('style') === '') {\n              $(this)\n                .attr('style', '')\n                .removeAttr('style')\n              ;\n            }\n          },\n\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          module.debug('Changing internal', name, value);\n          if(value !== undefined) {\n            if( $.isPlainObject(name) ) {\n              $.extend(true, module, name);\n            }\n            else {\n              module[name] = value;\n            }\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.accordion.settings = {\n\n  name            : 'Accordion',\n  namespace       : 'accordion',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  on              : 'click', // event on title that opens accordion\n\n  observeChanges  : true,  // whether accordion should automatically refresh on DOM insertion\n\n  exclusive       : true,  // whether a single accordion content panel should be open at once\n  collapsible     : true,  // whether accordion content can be closed\n  closeNested     : false, // whether nested content should be closed when a panel is closed\n  animateChildren : true,  // whether children opacity should be animated\n\n  duration        : 350, // duration of animation\n  easing          : 'easeOutQuad', // easing equation for animation\n\n\n  onOpening       : function(){}, // callback before open animation\n  onOpen          : function(){}, // callback after open animation\n  onClosing       : function(){}, // callback before closing animation\n  onClose         : function(){}, // callback after closing animation\n  onChange        : function(){}, // callback after closing or opening animation\n\n  error: {\n    method : 'The method you called is not defined'\n  },\n\n  className   : {\n    active    : 'active',\n    animating : 'animating'\n  },\n\n  selector    : {\n    accordion : '.accordion',\n    title     : '.title',\n    trigger   : '.title',\n    content   : '.content'\n  }\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/accordion.less",
    "content": "/*!\n * # Semantic UI - Accordion\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'accordion';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Accordion\n*******************************/\n\n.ui.accordion,\n.ui.accordion .accordion {\n  max-width: 100%;\n}\n.ui.accordion .accordion {\n  margin: @childAccordionMargin;\n  padding: @childAccordionPadding;\n}\n\n/* Title */\n.ui.accordion .title,\n.ui.accordion .accordion .title {\n  cursor: pointer;\n}\n\n/* Default Styling */\n.ui.accordion .title:not(.ui) {\n  padding: @titlePadding;\n  font-family: @titleFont;\n  font-size: @titleFontSize;\n  color: @titleColor;\n}\n\n/* Content */\n.ui.accordion .title ~ .content,\n.ui.accordion .accordion .title ~ .content {\n  display: none;\n}\n\n/* Default Styling */\n.ui.accordion:not(.styled) .title ~ .content:not(.ui),\n.ui.accordion:not(.styled) .accordion .title ~ .content:not(.ui) {\n  margin: @contentMargin;\n  padding: @contentPadding;\n}\n.ui.accordion:not(.styled) .title ~ .content:not(.ui):last-child {\n  padding-bottom: 0em;\n}\n\n/* Arrow */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  display: @iconDisplay;\n  float: @iconFloat;\n  opacity: @iconOpacity;\n  width: @iconWidth;\n  height: @iconHeight;\n  margin: @iconMargin;\n  padding: @iconPadding;\n  font-size: @iconFontSize;\n  transition: @iconTransition;\n  vertical-align: @iconVerticalAlign;\n  transform: @iconTransform;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n/* Menu */\n.ui.accordion.menu .item .title {\n  display: block;\n  padding: @menuTitlePadding;\n}\n.ui.accordion.menu .item .title > .dropdown.icon {\n  float: @menuIconFloat;\n  margin: @menuIconMargin;\n  transform: @menuIconTransform;\n}\n\n/* Header */\n.ui.accordion .ui.header .dropdown.icon {\n  font-size: @iconFontSize;\n  margin: @iconMargin;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.accordion .active.title .dropdown.icon,\n.ui.accordion .accordion .active.title .dropdown.icon {\n  transform: @activeIconTransform;\n}\n\n.ui.accordion.menu .item .active.title > .dropdown.icon {\n  transform: @activeIconTransform;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n     Styled\n---------------*/\n\n.ui.styled.accordion {\n  width: @styledWidth;\n}\n\n.ui.styled.accordion,\n.ui.styled.accordion .accordion {\n  border-radius: @styledBorderRadius;\n  background: @styledBackground;\n  box-shadow: @styledBoxShadow;\n}\n.ui.styled.accordion .title,\n.ui.styled.accordion .accordion .title {\n  margin: @styledTitleMargin;\n  padding: @styledTitlePadding;\n  color: @styledTitleColor;\n  font-weight: @styledTitleFontWeight;\n  border-top: @styledTitleBorder;\n  transition: @styledTitleTransition;\n}\n.ui.styled.accordion > .title:first-child,\n.ui.styled.accordion .accordion .title:first-child {\n  border-top: none;\n}\n\n\n/* Content */\n.ui.styled.accordion .content,\n.ui.styled.accordion .accordion .content {\n  margin: @styledContentMargin;\n  padding: @styledContentPadding;\n}\n.ui.styled.accordion .accordion .content {\n  padding: @styledChildContentMargin;\n  padding: @styledChildContentPadding;\n}\n\n\n/* Hover */\n.ui.styled.accordion .title:hover,\n.ui.styled.accordion .active.title,\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: @styledTitleHoverBackground;\n  color: @styledTitleHoverColor;\n}\n.ui.styled.accordion .accordion .title:hover,\n.ui.styled.accordion .accordion .active.title {\n  background: @styledHoverChildTitleBackground;\n  color: @styledHoverChildTitleColor;\n}\n\n\n/* Active */\n.ui.styled.accordion .active.title {\n  background: @styledActiveTitleBackground;\n  color: @styledActiveTitleColor;\n}\n.ui.styled.accordion .accordion .active.title {\n  background: @styledActiveChildTitleBackground;\n  color: @styledActiveChildTitleColor;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Active\n---------------*/\n\n.ui.accordion .active.content,\n.ui.accordion .accordion .active.content {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.accordion,\n.ui.fluid.accordion .accordion {\n  width: 100%;\n}\n\n/*--------------\n     Inverted\n---------------*/\n\n.ui.inverted.accordion .title:not(.ui) {\n  color: @invertedTitleColor;\n}\n\n.loadUIOverrides();\n\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/checkbox.js",
    "content": "/*!\n * # Semantic UI - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.checkbox = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = $.extend(true, {}, $.fn.checkbox.settings, parameters),\n\n        className       = settings.className,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $label          = $(this).children(selector.label),\n        $input          = $(this).children(selector.input),\n        input           = $input[0],\n\n        initialLoad     = false,\n        shortcutPressed = false,\n        instance        = $module.data(moduleNamespace),\n\n        observer,\n        element         = this,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.verbose('Initializing checkbox', settings);\n\n          module.create.label();\n          module.bind.events();\n\n          module.set.tabbable();\n          module.hide.input();\n\n          module.observeChanges();\n          module.instantiate();\n          module.setup();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying module');\n          module.unbind.events();\n          module.show.input();\n          $module.removeData(moduleNamespace);\n        },\n\n        fix: {\n          reference: function() {\n            if( $module.is(selector.input) ) {\n              module.debug('Behavior called on <input> adjusting invoked element');\n              $module = $module.closest(selector.checkbox);\n              module.refresh();\n            }\n          }\n        },\n\n        setup: function() {\n          module.set.initialLoad();\n          if( module.is.indeterminate() ) {\n            module.debug('Initial value is indeterminate');\n            module.indeterminate();\n          }\n          else if( module.is.checked() ) {\n            module.debug('Initial value is checked');\n            module.check();\n          }\n          else {\n            module.debug('Initial value is unchecked');\n            module.uncheck();\n          }\n          module.remove.initialLoad();\n        },\n\n        refresh: function() {\n          $label = $module.children(selector.label);\n          $input = $module.children(selector.input);\n          input  = $input[0];\n        },\n\n        hide: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be unselectable');\n            $input.addClass(className.hidden);\n          }\n        },\n        show: {\n          input: function() {\n            module.verbose('Modifying <input> z-index to be selectable');\n            $input.removeClass(className.hidden);\n          }\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, updating selector cache');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $element = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($element.length > 0) {\n            module.debug('Attaching checkbox events to element', selector, event);\n            $element\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound);\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            if( $target.is(selector.input) ) {\n              module.verbose('Using default check action on initialized checkbox');\n              return;\n            }\n            if( $target.is(selector.link) ) {\n              module.debug('Clicking link inside checkbox, skipping toggle');\n              return;\n            }\n            module.toggle();\n            $input.focus();\n            event.preventDefault();\n          },\n          keydown: function(event) {\n            var\n              key     = event.which,\n              keyCode = {\n                enter  : 13,\n                space  : 32,\n                escape : 27\n              }\n            ;\n            if(key == keyCode.escape) {\n              module.verbose('Escape key pressed blurring field');\n              $input.blur();\n              shortcutPressed = true;\n            }\n            else if(!event.ctrlKey && ( key == keyCode.space || key == keyCode.enter) ) {\n              module.verbose('Enter/space key pressed, toggling checkbox');\n              module.toggle();\n              shortcutPressed = true;\n            }\n            else {\n              shortcutPressed = false;\n            }\n          },\n          keyup: function(event) {\n            if(shortcutPressed) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        check: function() {\n          if( !module.should.allowCheck() ) {\n            return;\n          }\n          module.debug('Checking checkbox', $input);\n          module.set.checked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onChecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        uncheck: function() {\n          if( !module.should.allowUncheck() ) {\n            return;\n          }\n          module.debug('Unchecking checkbox');\n          module.set.unchecked();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onUnchecked.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        indeterminate: function() {\n          if( module.should.allowIndeterminate() ) {\n            module.debug('Checkbox is already indeterminate');\n            return;\n          }\n          module.debug('Making checkbox indeterminate');\n          module.set.indeterminate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onIndeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        determinate: function() {\n          if( module.should.allowDeterminate() ) {\n            module.debug('Checkbox is already determinate');\n            return;\n          }\n          module.debug('Making checkbox determinate');\n          module.set.determinate();\n          if( !module.should.ignoreCallbacks() ) {\n            settings.onDeterminate.call(input);\n            settings.onChange.call(input);\n          }\n        },\n\n        enable: function() {\n          if( module.is.enabled() ) {\n            module.debug('Checkbox is already enabled');\n            return;\n          }\n          module.debug('Enabling checkbox');\n          module.set.enabled();\n          settings.onEnable.call(input);\n          // preserve legacy callbacks\n          settings.onEnabled.call(input);\n        },\n\n        disable: function() {\n          if( module.is.disabled() ) {\n            module.debug('Checkbox is already disabled');\n            return;\n          }\n          module.debug('Disabling checkbox');\n          module.set.disabled();\n          settings.onDisable.call(input);\n          // preserve legacy callbacks\n          settings.onDisabled.call(input);\n        },\n\n        get: {\n          radios: function() {\n            var\n              name = module.get.name()\n            ;\n            return $('input[name=\"' + name + '\"]').closest(selector.checkbox);\n          },\n          otherRadios: function() {\n            return module.get.radios().not($module);\n          },\n          name: function() {\n            return $input.attr('name');\n          }\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          },\n          radio: function() {\n            return ($input.hasClass(className.radio) || $input.attr('type') == 'radio');\n          },\n          indeterminate: function() {\n            return $input.prop('indeterminate') !== undefined && $input.prop('indeterminate');\n          },\n          checked: function() {\n            return $input.prop('checked') !== undefined && $input.prop('checked');\n          },\n          disabled: function() {\n            return $input.prop('disabled') !== undefined && $input.prop('disabled');\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          determinate: function() {\n            return !module.is.indeterminate();\n          },\n          unchecked: function() {\n            return !module.is.checked();\n          }\n        },\n\n        should: {\n          allowCheck: function() {\n            if(module.is.determinate() && module.is.checked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow check, checkbox is already checked');\n              return false;\n            }\n            if(settings.beforeChecked.apply(input) === false) {\n              module.debug('Should not allow check, beforeChecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowUncheck: function() {\n            if(module.is.determinate() && module.is.unchecked() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow uncheck, checkbox is already unchecked');\n              return false;\n            }\n            if(settings.beforeUnchecked.apply(input) === false) {\n              module.debug('Should not allow uncheck, beforeUnchecked cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowIndeterminate: function() {\n            if(module.is.indeterminate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow indeterminate, checkbox is already indeterminate');\n              return false;\n            }\n            if(settings.beforeIndeterminate.apply(input) === false) {\n              module.debug('Should not allow indeterminate, beforeIndeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          allowDeterminate: function() {\n            if(module.is.determinate() && !module.should.forceCallbacks() ) {\n              module.debug('Should not allow determinate, checkbox is already determinate');\n              return false;\n            }\n            if(settings.beforeDeterminate.apply(input) === false) {\n              module.debug('Should not allow determinate, beforeDeterminate cancelled');\n              return false;\n            }\n            return true;\n          },\n          forceCallbacks: function() {\n            return (module.is.initialLoad() && settings.fireOnInit);\n          },\n          ignoreCallbacks: function() {\n            return (initialLoad && !settings.fireOnInit);\n          }\n        },\n\n        can: {\n          change: function() {\n            return !( $module.hasClass(className.disabled) || $module.hasClass(className.readOnly) || $input.prop('disabled') || $input.prop('readonly') );\n          },\n          uncheck: function() {\n            return (typeof settings.uncheckable === 'boolean')\n              ? settings.uncheckable\n              : !module.is.radio()\n            ;\n          }\n        },\n\n        set: {\n          initialLoad: function() {\n            initialLoad = true;\n          },\n          checked: function() {\n            module.verbose('Setting class to checked');\n            $module\n              .removeClass(className.indeterminate)\n              .addClass(className.checked)\n            ;\n            if( module.is.radio() ) {\n              module.uncheckOthers();\n            }\n            if(!module.is.indeterminate() && module.is.checked()) {\n              module.debug('Input is already checked, skipping input property change');\n              return;\n            }\n            module.verbose('Setting state to checked', input);\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', true)\n            ;\n            module.trigger.change();\n          },\n          unchecked: function() {\n            module.verbose('Removing checked class');\n            $module\n              .removeClass(className.indeterminate)\n              .removeClass(className.checked)\n            ;\n            if(!module.is.indeterminate() &&  module.is.unchecked() ) {\n              module.debug('Input is already unchecked');\n              return;\n            }\n            module.debug('Setting state to unchecked');\n            $input\n              .prop('indeterminate', false)\n              .prop('checked', false)\n            ;\n            module.trigger.change();\n          },\n          indeterminate: function() {\n            module.verbose('Setting class to indeterminate');\n            $module\n              .addClass(className.indeterminate)\n            ;\n            if( module.is.indeterminate() ) {\n              module.debug('Input is already indeterminate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to indeterminate');\n            $input\n              .prop('indeterminate', true)\n            ;\n            module.trigger.change();\n          },\n          determinate: function() {\n            module.verbose('Removing indeterminate class');\n            $module\n              .removeClass(className.indeterminate)\n            ;\n            if( module.is.determinate() ) {\n              module.debug('Input is already determinate, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to determinate');\n            $input\n              .prop('indeterminate', false)\n            ;\n          },\n          disabled: function() {\n            module.verbose('Setting class to disabled');\n            $module\n              .addClass(className.disabled)\n            ;\n            if( module.is.disabled() ) {\n              module.debug('Input is already disabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to disabled');\n            $input\n              .prop('disabled', 'disabled')\n            ;\n            module.trigger.change();\n          },\n          enabled: function() {\n            module.verbose('Removing disabled class');\n            $module.removeClass(className.disabled);\n            if( module.is.enabled() ) {\n              module.debug('Input is already enabled, skipping input property change');\n              return;\n            }\n            module.debug('Setting state to enabled');\n            $input\n              .prop('disabled', false)\n            ;\n            module.trigger.change();\n          },\n          tabbable: function() {\n            module.verbose('Adding tabindex to checkbox');\n            if( $input.attr('tabindex') === undefined) {\n              $input.attr('tabindex', 0);\n            }\n          }\n        },\n\n        remove: {\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n\n        create: {\n          label: function() {\n            if($input.prevAll(selector.label).length > 0) {\n              $input.prev(selector.label).detach().insertAfter($input);\n              module.debug('Moving existing label', $label);\n            }\n            else if( !module.has.label() ) {\n              $label = $('<label>').insertAfter($input);\n              module.debug('Creating label', $label);\n            }\n          }\n        },\n\n        has: {\n          label: function() {\n            return ($label.length > 0);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching checkbox events');\n            $module\n              .on('click'   + eventNamespace, module.event.click)\n              .on('keydown' + eventNamespace, selector.input, module.event.keydown)\n              .on('keyup'   + eventNamespace, selector.input, module.event.keyup)\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            module.debug('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        uncheckOthers: function() {\n          var\n            $radios = module.get.otherRadios()\n          ;\n          module.debug('Unchecking other radios', $radios);\n          $radios.removeClass(className.checked);\n        },\n\n        toggle: function() {\n          if( !module.can.change() ) {\n            if(!module.is.radio()) {\n              module.debug('Checkbox is read-only or disabled, ignoring toggle');\n            }\n            return;\n          }\n          if( module.is.indeterminate() || module.is.unchecked() ) {\n            module.debug('Currently unchecked');\n            module.check();\n          }\n          else if( module.is.checked() && module.can.uncheck() ) {\n            module.debug('Currently checked');\n            module.uncheck();\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.checkbox.settings = {\n\n  name                : 'Checkbox',\n  namespace           : 'checkbox',\n\n  silent              : false,\n  debug               : false,\n  verbose             : true,\n  performance         : true,\n\n  // delegated event context\n  uncheckable         : 'auto',\n  fireOnInit          : false,\n\n  onChange            : function(){},\n\n  beforeChecked       : function(){},\n  beforeUnchecked     : function(){},\n  beforeDeterminate   : function(){},\n  beforeIndeterminate : function(){},\n\n  onChecked           : function(){},\n  onUnchecked         : function(){},\n\n  onDeterminate       : function() {},\n  onIndeterminate     : function() {},\n\n  onEnable            : function(){},\n  onDisable           : function(){},\n\n  // preserve misspelled callbacks (will be removed in 3.0)\n  onEnabled           : function(){},\n  onDisabled          : function(){},\n\n  className       : {\n    checked       : 'checked',\n    indeterminate : 'indeterminate',\n    disabled      : 'disabled',\n    hidden        : 'hidden',\n    radio         : 'radio',\n    readOnly      : 'read-only'\n  },\n\n  error     : {\n    method       : 'The method you called is not defined'\n  },\n\n  selector : {\n    checkbox : '.ui.checkbox',\n    label    : 'label, .box',\n    input    : 'input[type=\"checkbox\"], input[type=\"radio\"]',\n    link     : 'a[href]'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/checkbox.less",
    "content": "/*!\n * # Semantic UI - Checkbox\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'checkbox';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n           Checkbox\n*******************************/\n\n\n/*--------------\n    Content\n---------------*/\n\n.ui.checkbox {\n  position: relative;\n  display: inline-block;\n  backface-visibility: hidden;\n  outline: none;\n  vertical-align: baseline;\n  font-style: normal;\n\n  min-height: @checkboxSize;\n  font-size: @medium;\n  line-height: @checkboxLineHeight;\n  min-width: @checkboxSize;\n}\n\n/* HTML Checkbox */\n.ui.checkbox input[type=\"checkbox\"],\n.ui.checkbox input[type=\"radio\"] {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  opacity: 0 !important;\n  outline: none;\n  z-index: 3;\n  width: @checkboxSize;\n  height: @checkboxSize;\n}\n\n\n/*--------------\n      Box\n---------------*/\n\n\n.ui.checkbox .box,\n.ui.checkbox label {\n  cursor: auto;\n  position: relative;\n  display: block;\n  padding-left: @labelDistance;\n  outline: none;\n  font-size: @labelFontSize;\n}\n\n.ui.checkbox .box:before,\n.ui.checkbox label:before {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n\n  width: @checkboxSize;\n  height: @checkboxSize;\n  content: '';\n\n  background: @checkboxBackground;\n  border-radius: @checkboxBorderRadius;\n\n  transition: @checkboxTransition;\n  border: @checkboxBorder;\n}\n\n/*--------------\n    Checkmark\n---------------*/\n\n.ui.checkbox .box:after,\n.ui.checkbox label:after {\n  position: absolute;\n  font-size: @checkboxCheckFontSize;\n  top: @checkboxCheckTop;\n  left: @checkboxCheckLeft;\n  width: @checkboxCheckSize;\n  height: @checkboxCheckSize;\n  text-align: center;\n\n  opacity: 0;\n  color: @checkboxColor;\n  transition: @checkboxTransition;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Inside */\n.ui.checkbox label,\n.ui.checkbox + label {\n  color: @labelColor;\n  transition: @labelTransition;\n}\n\n/* Outside */\n.ui.checkbox + label {\n  vertical-align: middle;\n}\n\n\n/*******************************\n           States\n*******************************/\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.checkbox .box:hover::before,\n.ui.checkbox label:hover::before {\n  background: @checkboxHoverBackground;\n  border-color: @checkboxHoverBorderColor;\n}\n.ui.checkbox label:hover,\n.ui.checkbox + label:hover {\n  color: @labelHoverColor;\n}\n\n/*--------------\n      Down\n---------------*/\n\n.ui.checkbox .box:active::before,\n.ui.checkbox label:active::before {\n  background: @checkboxPressedBackground;\n  border-color: @checkboxPressedBorderColor;\n}\n.ui.checkbox .box:active::after,\n.ui.checkbox label:active::after {\n  color: @checkboxPressedColor;\n}\n.ui.checkbox input:active ~ label {\n  color: @labelPressedColor;\n}\n\n/*--------------\n     Focus\n---------------*/\n\n.ui.checkbox input:focus ~ .box:before,\n.ui.checkbox input:focus ~ label:before {\n  background: @checkboxFocusBackground;\n  border-color: @checkboxFocusBorderColor;\n}\n.ui.checkbox input:focus ~ .box:after,\n.ui.checkbox input:focus ~ label:after {\n  color: @checkboxFocusCheckColor;\n}\n.ui.checkbox input:focus ~ label {\n  color: @labelFocusColor;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.checkbox input:checked ~ .box:before,\n.ui.checkbox input:checked ~ label:before {\n  background: @checkboxActiveBackground;\n  border-color: @checkboxActiveBorderColor;\n}\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  opacity: @checkboxActiveCheckOpacity;\n  color: @checkboxActiveCheckColor;\n}\n\n/*--------------\n  Indeterminate\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:before {\n  background: @checkboxIndeterminateBackground;\n  border-color: @checkboxIndeterminateBorderColor;\n}\n.ui.checkbox input:not([type=radio]):indeterminate ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate ~ label:after {\n  opacity: @checkboxIndeterminateCheckOpacity;\n  color: @checkboxIndeterminateCheckColor;\n}\n\n/*--------------\n  Active Focus\n---------------*/\n\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:before,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:before,\n.ui.checkbox input:checked:focus ~ .box:before,\n.ui.checkbox input:checked:focus ~ label:before  {\n  background: @checkboxActiveFocusBackground;\n  border-color: @checkboxActiveFocusBorderColor;\n}\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ .box:after,\n.ui.checkbox input:not([type=radio]):indeterminate:focus ~ label:after,\n.ui.checkbox input:checked:focus ~ .box:after,\n.ui.checkbox input:checked:focus ~ label:after {\n  color: @checkboxActiveFocusCheckColor;\n}\n\n\n/*--------------\n    Read-Only\n---------------*/\n\n.ui.read-only.checkbox,\n.ui.read-only.checkbox label {\n  cursor: default;\n}\n\n\n/*--------------\n     Disabled\n---------------*/\n\n.ui.disabled.checkbox .box:after,\n.ui.disabled.checkbox label,\n.ui.checkbox input[disabled] ~ .box:after,\n.ui.checkbox input[disabled] ~ label {\n  cursor: default !important;\n  opacity: @disabledCheckboxOpacity;\n  color: @disabledCheckboxLabelColor;\n}\n\n/*--------------\n     Hidden\n---------------*/\n\n/* Initialized checkbox moves input below element\n to prevent manually triggering */\n.ui.checkbox input.hidden {\n  z-index: -1;\n}\n\n/* Selectable Label */\n.ui.checkbox input.hidden + label {\n  cursor: pointer;\n  user-select: none;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*--------------\n     Radio\n---------------*/\n\n.ui.radio.checkbox {\n  min-height: @radioSize;\n}\n\n.ui.radio.checkbox .box,\n.ui.radio.checkbox label {\n  padding-left: @radioLabelDistance;\n}\n\n/* Box */\n.ui.radio.checkbox .box:before,\n.ui.radio.checkbox label:before {\n  content: '';\n  transform: none;\n\n  width: @radioSize;\n  height: @radioSize;\n  border-radius: @circularRadius;\n  top: @radioTop;\n  left: @radioLeft;\n}\n\n/* Bullet */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  border: none;\n  content: '' !important;\n  width: @radioSize;\n  height: @radioSize;\n  line-height: @radioSize;\n}\n\n/* Radio Checkbox */\n.ui.radio.checkbox .box:after,\n.ui.radio.checkbox label:after {\n  top: @bulletTop;\n  left: @bulletLeft;\n  width: @radioSize;\n  height: @radioSize;\n  border-radius: @bulletRadius;\n  transform: scale(@bulletScale);\n  background-color: @bulletColor;\n}\n\n/* Focus */\n.ui.radio.checkbox input:focus ~ .box:before,\n.ui.radio.checkbox input:focus ~ label:before {\n  background-color: @radioFocusBackground;\n}\n.ui.radio.checkbox input:focus ~ .box:after,\n.ui.radio.checkbox input:focus ~ label:after {\n  background-color: @radioFocusBulletColor;\n}\n\n/* Indeterminate */\n.ui.radio.checkbox input:indeterminate ~ .box:after,\n.ui.radio.checkbox input:indeterminate ~ label:after {\n  opacity: 0;\n}\n\n/* Active */\n.ui.radio.checkbox input:checked ~ .box:before,\n.ui.radio.checkbox input:checked ~ label:before {\n  background-color: @radioActiveBackground;\n}\n.ui.radio.checkbox input:checked ~ .box:after,\n.ui.radio.checkbox input:checked ~ label:after {\n  background-color: @radioActiveBulletColor;\n}\n\n/* Active Focus */\n.ui.radio.checkbox input:focus:checked ~ .box:before,\n.ui.radio.checkbox input:focus:checked ~ label:before {\n  background-color: @radioActiveFocusBackground;\n}\n.ui.radio.checkbox input:focus:checked ~ .box:after,\n.ui.radio.checkbox input:focus:checked ~ label:after {\n  background-color: @radioActiveFocusBulletColor;\n}\n\n/*--------------\n     Slider\n---------------*/\n\n.ui.slider.checkbox {\n  min-height: @sliderHeight;\n}\n\n/* Input */\n.ui.slider.checkbox input {\n  width: @sliderWidth;\n  height: @sliderHeight;\n}\n\n/* Label */\n.ui.slider.checkbox .box,\n.ui.slider.checkbox label {\n  padding-left: @sliderLabelDistance;\n  line-height: @sliderLabelLineHeight;\n  color: @sliderOffLabelColor;\n}\n\n/* Line */\n.ui.slider.checkbox .box:before,\n.ui.slider.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  transform: none;\n  border: none !important;\n  left: 0em;\n  z-index: 1;\n\n  top: @sliderLineVerticalOffset;\n\n  background-color: @sliderLineColor;\n  width: @sliderLineWidth;\n  height: @sliderLineHeight;\n\n  transform: none;\n  border-radius: @sliderLineRadius;\n  transition: @sliderLineTransition;\n\n}\n\n/* Handle */\n.ui.slider.checkbox .box:after,\n.ui.slider.checkbox label:after {\n  background: @handleBackground;\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n\n  border: none;\n  box-shadow: @handleBoxShadow;\n  width: @sliderHandleSize;\n  height: @sliderHandleSize;\n  top: @sliderHandleOffset;\n  left: 0em;\n  transform: none;\n\n  border-radius: @circularRadius;\n  transition: @sliderHandleTransition;\n}\n\n/* Focus */\n.ui.slider.checkbox input:focus ~ .box:before,\n.ui.slider.checkbox input:focus ~ label:before {\n  background-color: @toggleFocusColor;\n  border: none;\n}\n\n/* Hover */\n.ui.slider.checkbox .box:hover,\n.ui.slider.checkbox label:hover {\n  color: @sliderHoverLabelColor;\n}\n.ui.slider.checkbox .box:hover::before,\n.ui.slider.checkbox label:hover::before {\n  background: @sliderHoverLaneBackground;\n}\n\n/* Active */\n.ui.slider.checkbox input:checked ~ .box,\n.ui.slider.checkbox input:checked ~ label {\n  color: @sliderOnLabelColor !important;\n}\n.ui.slider.checkbox input:checked ~ .box:before,\n.ui.slider.checkbox input:checked ~ label:before {\n  background-color: @sliderOnLineColor !important;\n}\n.ui.slider.checkbox input:checked ~ .box:after,\n.ui.slider.checkbox input:checked ~ label:after {\n  left: @sliderTravelDistance;\n}\n\n/* Active Focus */\n.ui.slider.checkbox input:focus:checked ~ .box,\n.ui.slider.checkbox input:focus:checked ~ label {\n  color: @sliderOnFocusLabelColor !important;\n}\n.ui.slider.checkbox input:focus:checked ~ .box:before,\n.ui.slider.checkbox input:focus:checked ~ label:before {\n  background-color: @sliderOnFocusLineColor !important;\n}\n\n\n/*--------------\n     Toggle\n---------------*/\n\n.ui.toggle.checkbox {\n  min-height: @toggleHeight;\n}\n\n/* Input */\n.ui.toggle.checkbox input {\n  width: @toggleWidth;\n  height: @toggleHeight;\n}\n\n/* Label */\n.ui.toggle.checkbox .box,\n.ui.toggle.checkbox label {\n  min-height: @toggleHandleSize;\n  padding-left: @toggleLabelDistance;\n  color: @toggleOffLabelColor;\n}\n.ui.toggle.checkbox label {\n  padding-top: @toggleLabelOffset;\n}\n\n/* Switch */\n.ui.toggle.checkbox .box:before,\n.ui.toggle.checkbox label:before {\n  display: block;\n  position: absolute;\n  content: '';\n  z-index: 1;\n  transform: none;\n  border: none;\n\n  top: @toggleLaneVerticalOffset;\n\n  background: @toggleLaneBackground;\n  box-shadow: @toggleLaneBoxShadow;\n  width: @toggleLaneWidth;\n  height: @toggleLaneHeight;\n  border-radius: @toggleHandleRadius;\n}\n\n/* Handle */\n.ui.toggle.checkbox .box:after,\n.ui.toggle.checkbox label:after {\n  background: @handleBackground;\n  position: absolute;\n  content: '' !important;\n  opacity: 1;\n  z-index: 2;\n\n  border: none;\n  box-shadow: @handleBoxShadow;\n  width: @toggleHandleSize;\n  height: @toggleHandleSize;\n  top: @toggleHandleOffset;\n  left: 0em;\n\n  border-radius: @circularRadius;\n  transition: @toggleHandleTransition;\n}\n\n.ui.toggle.checkbox input ~ .box:after,\n.ui.toggle.checkbox input ~ label:after {\n  left: @toggleOffOffset;\n  box-shadow: @toggleOffHandleBoxShadow;\n}\n\n/* Focus */\n.ui.toggle.checkbox input:focus ~ .box:before,\n.ui.toggle.checkbox input:focus ~ label:before {\n  background-color: @toggleFocusColor;\n  border: none;\n}\n\n/* Hover */\n.ui.toggle.checkbox .box:hover::before,\n.ui.toggle.checkbox label:hover::before {\n  background-color: @toggleHoverColor;\n  border: none;\n}\n\n/* Active */\n.ui.toggle.checkbox input:checked ~ .box,\n.ui.toggle.checkbox input:checked ~ label {\n  color: @toggleOnLabelColor !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:before,\n.ui.toggle.checkbox input:checked ~ label:before {\n  background-color: @toggleOnLaneColor !important;\n}\n.ui.toggle.checkbox input:checked ~ .box:after,\n.ui.toggle.checkbox input:checked ~ label:after {\n  left: @toggleOnOffset;\n  box-shadow: @toggleOnHandleBoxShadow;\n}\n\n\n/* Active Focus */\n.ui.toggle.checkbox input:focus:checked ~ .box,\n.ui.toggle.checkbox input:focus:checked ~ label {\n  color: @toggleOnFocusLabelColor !important;\n}\n.ui.toggle.checkbox input:focus:checked ~ .box:before,\n.ui.toggle.checkbox input:focus:checked ~ label:before {\n  background-color: @toggleOnFocusLaneColor !important;\n}\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Fitted\n---------------*/\n\n.ui.fitted.checkbox .box,\n.ui.fitted.checkbox label {\n  padding-left: 0em !important;\n}\n\n.ui.fitted.toggle.checkbox,\n.ui.fitted.toggle.checkbox {\n  width: @toggleWidth;\n}\n\n.ui.fitted.slider.checkbox,\n.ui.fitted.slider.checkbox {\n  width: @sliderWidth;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/dimmer.js",
    "content": "/*!\n * # Semantic UI - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dimmer = function(parameters) {\n  var\n    $allModules     = $(this),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dimmer.settings, parameters)\n          : $.extend({}, $.fn.dimmer.settings),\n\n        selector        = settings.selector,\n        namespace       = settings.namespace,\n        className       = settings.className,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n        moduleSelector  = $allModules.selector || '',\n\n        clickEvent      = ('ontouchstart' in document.documentElement)\n          ? 'touchstart'\n          : 'click',\n\n        $module = $(this),\n        $dimmer,\n        $dimmable,\n\n        element   = this,\n        instance  = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        preinitialize: function() {\n          if( module.is.dimmer() ) {\n\n            $dimmable = $module.parent();\n            $dimmer   = $module;\n          }\n          else {\n            $dimmable = $module;\n            if( module.has.dimmer() ) {\n              if(settings.dimmerName) {\n                $dimmer = $dimmable.find(selector.dimmer).filter('.' + settings.dimmerName);\n              }\n              else {\n                $dimmer = $dimmable.find(selector.dimmer);\n              }\n            }\n            else {\n              $dimmer = module.create();\n            }\n            module.set.variation();\n          }\n        },\n\n        initialize: function() {\n          module.debug('Initializing dimmer', settings);\n\n          module.bind.events();\n          module.set.dimmable();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module', $dimmer);\n          module.unbind.events();\n          module.remove.variation();\n          $dimmable\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            if(settings.on == 'hover') {\n              $dimmable\n                .on('mouseenter' + eventNamespace, module.show)\n                .on('mouseleave' + eventNamespace, module.hide)\n              ;\n            }\n            else if(settings.on == 'click') {\n              $dimmable\n                .on(clickEvent + eventNamespace, module.toggle)\n              ;\n            }\n            if( module.is.page() ) {\n              module.debug('Setting as a page dimmer', $dimmable);\n              module.set.pageDimmer();\n            }\n\n            if( module.is.closable() ) {\n              module.verbose('Adding dimmer close event', $dimmer);\n              $dimmable\n                .on(clickEvent + eventNamespace, selector.dimmer, module.event.click)\n              ;\n            }\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $module\n              .removeData(moduleNamespace)\n            ;\n            $dimmable\n              .off(eventNamespace)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            module.verbose('Determining if event occured on dimmer', event);\n            if( $dimmer.find(event.target).length === 0 || $(event.target).is(selector.content) ) {\n              module.hide();\n              event.stopImmediatePropagation();\n            }\n          }\n        },\n\n        addContent: function(element) {\n          var\n            $content = $(element)\n          ;\n          module.debug('Add content to dimmer', $content);\n          if($content.parent()[0] !== $dimmer[0]) {\n            $content.detach().appendTo($dimmer);\n          }\n        },\n\n        create: function() {\n          var\n            $element = $( settings.template.dimmer() )\n          ;\n          if(settings.dimmerName) {\n            module.debug('Creating named dimmer', settings.dimmerName);\n            $element.addClass(settings.dimmerName);\n          }\n          $element\n            .appendTo($dimmable)\n          ;\n          return $element;\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Showing dimmer', $dimmer, settings);\n          if( (!module.is.dimmed() || module.is.animating()) && module.is.enabled() ) {\n            module.animate.show(callback);\n            settings.onShow.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is already shown or disabled');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.dimmed() || module.is.animating() ) {\n            module.debug('Hiding dimmer', $dimmer);\n            module.animate.hide(callback);\n            settings.onHide.call(element);\n            settings.onChange.call(element);\n          }\n          else {\n            module.debug('Dimmer is not visible');\n          }\n        },\n\n        toggle: function() {\n          module.verbose('Toggling dimmer visibility', $dimmer);\n          if( !module.is.dimmed() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              if(settings.opacity !== 'auto') {\n                module.set.opacity();\n              }\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' in',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.set.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.set.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Showing dimmer animation with javascript');\n              module.set.dimmed();\n              if(settings.opacity == 'auto') {\n                settings.opacity = 0.8;\n              }\n              $dimmer\n                .stop()\n                .css({\n                  opacity : 0,\n                  width   : '100%',\n                  height  : '100%'\n                })\n                .fadeTo(module.get.duration(), settings.opacity, function() {\n                  $dimmer.removeAttr('style');\n                  module.set.active();\n                  callback();\n                })\n              ;\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(settings.useCSS && $.fn.transition !== undefined && $dimmer.transition('is supported')) {\n              module.verbose('Hiding dimmer with css');\n              $dimmer\n                .transition({\n                  animation   : settings.transition + ' out',\n                  queue       : false,\n                  duration    : module.get.duration(),\n                  useFailSafe : true,\n                  onStart     : function() {\n                    module.remove.dimmed();\n                  },\n                  onComplete  : function() {\n                    module.remove.active();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.verbose('Hiding dimmer with javascript');\n              module.remove.dimmed();\n              $dimmer\n                .stop()\n                .fadeOut(module.get.duration(), function() {\n                  module.remove.active();\n                  $dimmer.removeAttr('style');\n                  callback();\n                })\n              ;\n            }\n          }\n        },\n\n        get: {\n          dimmer: function() {\n            return $dimmer;\n          },\n          duration: function() {\n            if(typeof settings.duration == 'object') {\n              if( module.is.active() ) {\n                return settings.duration.hide;\n              }\n              else {\n                return settings.duration.show;\n              }\n            }\n            return settings.duration;\n          }\n        },\n\n        has: {\n          dimmer: function() {\n            if(settings.dimmerName) {\n              return ($module.find(selector.dimmer).filter('.' + settings.dimmerName).length > 0);\n            }\n            else {\n              return ( $module.find(selector.dimmer).length > 0 );\n            }\n          }\n        },\n\n        is: {\n          active: function() {\n            return $dimmer.hasClass(className.active);\n          },\n          animating: function() {\n            return ( $dimmer.is(':animated') || $dimmer.hasClass(className.animating) );\n          },\n          closable: function() {\n            if(settings.closable == 'auto') {\n              if(settings.on == 'hover') {\n                return false;\n              }\n              return true;\n            }\n            return settings.closable;\n          },\n          dimmer: function() {\n            return $module.hasClass(className.dimmer);\n          },\n          dimmable: function() {\n            return $module.hasClass(className.dimmable);\n          },\n          dimmed: function() {\n            return $dimmable.hasClass(className.dimmed);\n          },\n          disabled: function() {\n            return $dimmable.hasClass(className.disabled);\n          },\n          enabled: function() {\n            return !module.is.disabled();\n          },\n          page: function () {\n            return $dimmable.is('body');\n          },\n          pageDimmer: function() {\n            return $dimmer.hasClass(className.pageDimmer);\n          }\n        },\n\n        can: {\n          show: function() {\n            return !$dimmer.hasClass(className.disabled);\n          }\n        },\n\n        set: {\n          opacity: function(opacity) {\n            var\n              color      = $dimmer.css('background-color'),\n              colorArray = color.split(','),\n              isRGB      = (colorArray && colorArray.length == 3),\n              isRGBA     = (colorArray && colorArray.length == 4)\n            ;\n            opacity    = settings.opacity === 0 ? 0 : settings.opacity || opacity;\n            if(isRGB || isRGBA) {\n              colorArray[3] = opacity + ')';\n              color         = colorArray.join(',');\n            }\n            else {\n              color = 'rgba(0, 0, 0, ' + opacity + ')';\n            }\n            module.debug('Setting opacity to', opacity);\n            $dimmer.css('background-color', color);\n          },\n          active: function() {\n            $dimmer.addClass(className.active);\n          },\n          dimmable: function() {\n            $dimmable.addClass(className.dimmable);\n          },\n          dimmed: function() {\n            $dimmable.addClass(className.dimmed);\n          },\n          pageDimmer: function() {\n            $dimmer.addClass(className.pageDimmer);\n          },\n          disabled: function() {\n            $dimmer.addClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.addClass(variation);\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $dimmer\n              .removeClass(className.active)\n            ;\n          },\n          dimmed: function() {\n            $dimmable.removeClass(className.dimmed);\n          },\n          disabled: function() {\n            $dimmer.removeClass(className.disabled);\n          },\n          variation: function(variation) {\n            variation = variation || settings.variation;\n            if(variation) {\n              $dimmer.removeClass(variation);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      module.preinitialize();\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.dimmer.settings = {\n\n  name        : 'Dimmer',\n  namespace   : 'dimmer',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  // name to distinguish between multiple dimmers in context\n  dimmerName  : false,\n\n  // whether to add a variation type\n  variation   : false,\n\n  // whether to bind close events\n  closable    : 'auto',\n\n  // whether to use css animations\n  useCSS      : true,\n\n  // css animation to use\n  transition  : 'fade',\n\n  // event to bind to\n  on          : false,\n\n  // overriding opacity value\n  opacity     : 'auto',\n\n  // transition durations\n  duration    : {\n    show : 500,\n    hide : 500\n  },\n\n  onChange    : function(){},\n  onShow      : function(){},\n  onHide      : function(){},\n\n  error   : {\n    method   : 'The method you called is not defined.'\n  },\n\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    dimmable   : 'dimmable',\n    dimmed     : 'dimmed',\n    dimmer     : 'dimmer',\n    disabled   : 'disabled',\n    hide       : 'hide',\n    pageDimmer : 'page',\n    show       : 'show'\n  },\n\n  selector: {\n    dimmer   : '> .ui.dimmer',\n    content  : '.ui.dimmer > .content, .ui.dimmer > .content > .center'\n  },\n\n  template: {\n    dimmer: function() {\n     return $('<div />').attr('class', 'ui dimmer');\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/dimmer.less",
    "content": "/*!\n * # Semantic UI - Dimmer\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'dimmer';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Dimmer\n*******************************/\n\n.dimmable:not(body) {\n  position: @dimmablePosition;\n}\n\n.ui.dimmer {\n  display: none;\n  position: @dimmerPosition;\n  top: 0em !important;\n  left: 0em !important;\n\n  width: 100%;\n  height: 100%;\n\n  text-align: @textAlign;\n  vertical-align: @verticalAlign;\n\n  background-color: @backgroundColor;\n  opacity: @hiddenOpacity;\n  line-height: @lineHeight;\n\n  animation-fill-mode: both;\n  animation-duration: @duration;\n  transition: @transition;\n\n  user-select: none;\n  will-change: opacity;\n  z-index: @zIndex;\n}\n\n/* Dimmer Content */\n.ui.dimmer > .content {\n  width: 100%;\n  height: 100%;\n  display: @contentDisplay;\n  user-select: text;\n}\n.ui.dimmer > .content > * {\n  display: @contentChildDisplay;\n  vertical-align: @verticalAlign;\n  color: @textColor;\n}\n\n\n/* Loose Coupling */\n.ui.segment > .ui.dimmer {\n  border-radius: inherit !important;\n}\n\n/* Scrollbars */\n.addScrollbars() when (@useCustomScrollbars) {\n  .ui.dimmer:not(.inverted)::-webkit-scrollbar-track {\n    background: @trackInvertedBackground;\n  }\n  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb {\n    background: @thumbInvertedBackground;\n  }\n  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:window-inactive {\n    background: @thumbInvertedInactiveBackground;\n  }\n  .ui.dimmer:not(.inverted)::-webkit-scrollbar-thumb:hover {\n    background: @thumbInvertedHoverBackground;\n  }\n}\n.addScrollbars();\n\n/*******************************\n            States\n*******************************/\n\n.animating.dimmable:not(body),\n.dimmed.dimmable:not(body) {\n  overflow: @overflow;\n}\n\n.dimmed.dimmable > .ui.animating.dimmer,\n.dimmed.dimmable > .ui.visible.dimmer,\n.ui.active.dimmer {\n  display: block;\n  opacity: @visibleOpacity;\n}\n\n.ui.disabled.dimmer {\n  width: 0 !important;\n  height: 0 !important;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n      Page\n---------------*/\n\n.ui.page.dimmer {\n  position: @pageDimmerPosition;\n  transform-style: @transformStyle;\n  perspective: @perspective;\n  transform-origin: center center;\n}\n\nbody.animating.in.dimmable,\nbody.dimmed.dimmable {\n  overflow: hidden;\n}\n\nbody.dimmable > .dimmer {\n  position: fixed;\n}\n\n/*--------------\n    Blurring\n---------------*/\n\n.blurring.dimmable > :not(.dimmer) {\n  filter: @blurredStartFilter;\n  transition: @blurredTransition;\n}\n.blurring.dimmed.dimmable > :not(.dimmer) {\n  filter: @blurredEndFilter;\n}\n\n/* Dimmer Color */\n.blurring.dimmable > .dimmer {\n  background-color: @blurredBackgroundColor;\n}\n.blurring.dimmable > .inverted.dimmer {\n  background-color: @blurredInvertedBackgroundColor;\n}\n\n/*--------------\n    Aligned\n---------------*/\n\n.ui.dimmer > .top.aligned.content > * {\n  vertical-align: top;\n}\n.ui.dimmer > .bottom.aligned.content > * {\n  vertical-align: bottom;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.dimmer {\n  background-color: @invertedBackgroundColor;\n}\n.ui.inverted.dimmer > .content > * {\n  color: @textColor;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n.ui.simple.dimmer {\n  display: block;\n  overflow: hidden;\n  opacity: 1;\n  width: 0%;\n  height: 0%;\n  z-index: -100;\n  background-color: @simpleStartBackgroundColor;\n}\n.dimmed.dimmable > .ui.simple.dimmer {\n  overflow: visible;\n  opacity: 1;\n  width: 100%;\n  height: 100%;\n  background-color: @simpleEndBackgroundColor;\n  z-index: @simpleZIndex;\n}\n\n.ui.simple.inverted.dimmer {\n  background-color: @simpleInvertedStartBackgroundColor;\n}\n.dimmed.dimmable > .ui.simple.inverted.dimmer {\n  background-color: @simpleInvertedEndBackgroundColor;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/dropdown.js",
    "content": "/*!\n * # Semantic UI - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.dropdown = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = ('ontouchstart' in document.documentElement),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function(elementIndex) {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.dropdown.settings, parameters)\n          : $.extend({}, $.fn.dropdown.settings),\n\n        className       = settings.className,\n        message         = settings.message,\n        fields          = settings.fields,\n        keys            = settings.keys,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        selector        = settings.selector,\n        error           = settings.error,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $text           = $module.find(selector.text),\n        $search         = $module.find(selector.search),\n        $sizer          = $module.find(selector.sizer),\n        $input          = $module.find(selector.input),\n        $icon           = $module.find(selector.icon),\n\n        $combo = ($module.prev().find(selector.text).length > 0)\n          ? $module.prev().find(selector.text)\n          : $module.prev(),\n\n        $menu           = $module.children(selector.menu),\n        $item           = $menu.find(selector.item),\n\n        activated       = false,\n        itemActivated   = false,\n        internalChange  = false,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        initialLoad,\n        pageLostFocus,\n        willRefocus,\n        elementNamespace,\n        id,\n        selectObserver,\n        menuObserver,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing dropdown', settings);\n\n          if( module.is.alreadySetup() ) {\n            module.setup.reference();\n          }\n          else {\n\n            module.setup.layout();\n\n            if(settings.values) {\n              module.change.values(settings.values);\n            }\n\n            module.refreshData();\n\n            module.save.defaults();\n            module.restore.selected();\n\n            module.create.id();\n            module.bind.events();\n\n            module.observeChanges();\n            module.instantiate();\n          }\n\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of dropdown', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous dropdown', $module);\n          module.remove.tabbable();\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          $menu\n            .off(eventNamespace)\n          ;\n          $document\n            .off(elementNamespace)\n          ;\n          module.disconnect.menuObserver();\n          module.disconnect.selectObserver();\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            selectObserver = new MutationObserver(module.event.select.mutation);\n            menuObserver   = new MutationObserver(module.event.menu.mutation);\n            module.debug('Setting up mutation observer', selectObserver, menuObserver);\n            module.observe.select();\n            module.observe.menu();\n          }\n        },\n\n        disconnect: {\n          menuObserver: function() {\n            if(menuObserver) {\n              menuObserver.disconnect();\n            }\n          },\n          selectObserver: function() {\n            if(selectObserver) {\n              selectObserver.disconnect();\n            }\n          }\n        },\n        observe: {\n          select: function() {\n            if(module.has.input()) {\n              selectObserver.observe($module[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          menu: function() {\n            if(module.has.menu()) {\n              menuObserver.observe($menu[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          }\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2, 8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          },\n          userChoice: function(values) {\n            var\n              $userChoices,\n              $userChoice,\n              isUserValue,\n              html\n            ;\n            values = values || module.get.userValues();\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            $.each(values, function(index, value) {\n              if(module.get.item(value) === false) {\n                html         = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $userChoice  = $('<div />')\n                  .html(html)\n                  .attr('data-' + metadata.value, value)\n                  .attr('data-' + metadata.text, value)\n                  .addClass(className.addition)\n                  .addClass(className.item)\n                ;\n                if(settings.hideAdditions) {\n                  $userChoice.addClass(className.hidden);\n                }\n                $userChoices = ($userChoices === undefined)\n                  ? $userChoice\n                  : $userChoices.add($userChoice)\n                ;\n                module.verbose('Creating user choices for value', value, $userChoice);\n              }\n            });\n            return $userChoices;\n          },\n          userLabels: function(value) {\n            var\n              userValues = module.get.userValues()\n            ;\n            if(userValues) {\n              module.debug('Adding user labels', userValues);\n              $.each(userValues, function(index, value) {\n                module.verbose('Adding custom user value');\n                module.add.label(value, value);\n              });\n            }\n          },\n          menu: function() {\n            $menu = $('<div />')\n              .addClass(className.menu)\n              .appendTo($module)\n            ;\n          },\n          sizer: function() {\n            $sizer = $('<span />')\n              .addClass(className.sizer)\n              .insertAfter($search)\n            ;\n          }\n        },\n\n        search: function(query) {\n          query = (query !== undefined)\n            ? query\n            : module.get.query()\n          ;\n          module.verbose('Searching for query', query);\n          if(module.has.minCharacters(query)) {\n            module.filter(query);\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        select: {\n          firstUnfiltered: function() {\n            module.verbose('Selecting first non-filtered element');\n            module.remove.selectedItem();\n            $item\n              .not(selector.unselectable)\n              .not(selector.addition + selector.hidden)\n                .eq(0)\n                .addClass(className.selected)\n            ;\n          },\n          nextAvailable: function($selected) {\n            $selected = $selected.eq(0);\n            var\n              $nextAvailable = $selected.nextAll(selector.item).not(selector.unselectable).eq(0),\n              $prevAvailable = $selected.prevAll(selector.item).not(selector.unselectable).eq(0),\n              hasNext        = ($nextAvailable.length > 0)\n            ;\n            if(hasNext) {\n              module.verbose('Moving selection to', $nextAvailable);\n              $nextAvailable.addClass(className.selected);\n            }\n            else {\n              module.verbose('Moving selection to', $prevAvailable);\n              $prevAvailable.addClass(className.selected);\n            }\n          }\n        },\n\n        setup: {\n          api: function() {\n            var\n              apiSettings = {\n                debug   : settings.debug,\n                urlData : {\n                  value : module.get.value(),\n                  query : module.get.query()\n                },\n                on    : false\n              }\n            ;\n            module.verbose('First request, initializing API');\n            $module\n              .api(apiSettings)\n            ;\n          },\n          layout: function() {\n            if( $module.is('select') ) {\n              module.setup.select();\n              module.setup.returnedObject();\n            }\n            if( !module.has.menu() ) {\n              module.create.menu();\n            }\n            if( module.is.search() && !module.has.search() ) {\n              module.verbose('Adding search input');\n              $search = $('<input />')\n                .addClass(className.search)\n                .prop('autocomplete', 'off')\n                .insertBefore($text)\n              ;\n            }\n            if( module.is.multiple() && module.is.searchSelection() && !module.has.sizer()) {\n              module.create.sizer();\n            }\n            if(settings.allowTab) {\n              module.set.tabbable();\n            }\n          },\n          select: function() {\n            var\n              selectValues  = module.get.selectValues()\n            ;\n            module.debug('Dropdown initialized on a select', selectValues);\n            if( $module.is('select') ) {\n              $input = $module;\n            }\n            // see if select is placed correctly already\n            if($input.parent(selector.dropdown).length > 0) {\n              module.debug('UI dropdown already exists. Creating dropdown menu only');\n              $module = $input.closest(selector.dropdown);\n              if( !module.has.menu() ) {\n                module.create.menu();\n              }\n              $menu = $module.children(selector.menu);\n              module.setup.menu(selectValues);\n            }\n            else {\n              module.debug('Creating entire dropdown from select');\n              $module = $('<div />')\n                .attr('class', $input.attr('class') )\n                .addClass(className.selection)\n                .addClass(className.dropdown)\n                .html( templates.dropdown(selectValues) )\n                .insertBefore($input)\n              ;\n              if($input.hasClass(className.multiple) && $input.prop('multiple') === false) {\n                module.error(error.missingMultiple);\n                $input.prop('multiple', true);\n              }\n              if($input.is('[multiple]')) {\n                module.set.multiple();\n              }\n              if ($input.prop('disabled')) {\n                module.debug('Disabling dropdown');\n                $module.addClass(className.disabled);\n              }\n              $input\n                .removeAttr('class')\n                .detach()\n                .prependTo($module)\n              ;\n            }\n            module.refresh();\n          },\n          menu: function(values) {\n            $menu.html( templates.menu(values, fields));\n            $item = $menu.find(selector.item);\n          },\n          reference: function() {\n            module.debug('Dropdown behavior was called on select, replacing with closest dropdown');\n            // replace module reference\n            $module  = $module.parent(selector.dropdown);\n            instance = $module.data(moduleNamespace);\n            element  = $module.get(0);\n            module.refresh();\n            module.setup.returnedObject();\n          },\n          returnedObject: function() {\n            var\n              $firstModules = $allModules.slice(0, elementIndex),\n              $lastModules  = $allModules.slice(elementIndex + 1)\n            ;\n            // adjust all modules to use correct reference\n            $allModules = $firstModules.add($module).add($lastModules);\n          }\n        },\n\n        refresh: function() {\n          module.refreshSelectors();\n          module.refreshData();\n        },\n\n        refreshItems: function() {\n          $item = $menu.find(selector.item);\n        },\n\n        refreshSelectors: function() {\n          module.verbose('Refreshing selector cache');\n          $text   = $module.find(selector.text);\n          $search = $module.find(selector.search);\n          $input  = $module.find(selector.input);\n          $icon   = $module.find(selector.icon);\n          $combo  = ($module.prev().find(selector.text).length > 0)\n            ? $module.prev().find(selector.text)\n            : $module.prev()\n          ;\n          $menu    = $module.children(selector.menu);\n          $item    = $menu.find(selector.item);\n        },\n\n        refreshData: function() {\n          module.verbose('Refreshing cached metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n        },\n\n        clearData: function() {\n          module.verbose('Clearing metadata');\n          $item\n            .removeData(metadata.text)\n            .removeData(metadata.value)\n          ;\n          $module\n            .removeData(metadata.defaultText)\n            .removeData(metadata.defaultValue)\n            .removeData(metadata.placeholderText)\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Toggling menu visibility');\n          if( !module.is.active() ) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(!module.can.show() && module.is.remote()) {\n            module.debug('No API results retrieved, searching before show');\n            module.queryRemote(module.get.query(), module.show);\n          }\n          if( module.can.show() && !module.is.active() ) {\n            module.debug('Showing dropdown');\n            if(module.has.message() && !(module.has.maxSelections() || module.has.allResultsFiltered()) ) {\n              module.remove.message();\n            }\n            if(module.is.allFiltered()) {\n              return true;\n            }\n            if(settings.onShow.call(element) !== false) {\n              module.animate.show(function() {\n                if( module.can.click() ) {\n                  module.bind.intent();\n                }\n                if(module.has.menuSearch()) {\n                  module.focusSearch();\n                }\n                module.set.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.active() ) {\n            module.debug('Hiding dropdown');\n            if(settings.onHide.call(element) !== false) {\n              module.animate.hide(function() {\n                module.remove.visible();\n                callback.call(element);\n              });\n            }\n          }\n        },\n\n        hideOthers: function() {\n          module.verbose('Finding other dropdowns to hide');\n          $allModules\n            .not($module)\n              .has(selector.menu + '.' + className.visible)\n                .dropdown('hide')\n          ;\n        },\n\n        hideMenu: function() {\n          module.verbose('Hiding menu  instantaneously');\n          module.remove.active();\n          module.remove.visible();\n          $menu.transition('hide');\n        },\n\n        hideSubMenus: function() {\n          var\n            $subMenus = $menu.children(selector.item).find(selector.menu)\n          ;\n          module.verbose('Hiding sub menus', $subMenus);\n          $subMenus.transition('hide');\n        },\n\n        bind: {\n          events: function() {\n            if(hasTouch) {\n              module.bind.touchEvents();\n            }\n            module.bind.keyboardEvents();\n            module.bind.inputEvents();\n            module.bind.mouseEvents();\n          },\n          touchEvents: function() {\n            module.debug('Touch device detected binding additional touch events');\n            if( module.is.searchSelection() ) {\n              // do nothing special yet\n            }\n            else if( module.is.single() ) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.test.toggle)\n              ;\n            }\n            $menu\n              .on('touchstart' + eventNamespace, selector.item, module.event.item.mouseenter)\n            ;\n          },\n          keyboardEvents: function() {\n            module.verbose('Binding keyboard events');\n            $module\n              .on('keydown' + eventNamespace, module.event.keydown)\n            ;\n            if( module.has.search() ) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.search, module.event.input)\n              ;\n            }\n            if( module.is.multiple() ) {\n              $document\n                .on('keydown' + elementNamespace, module.event.document.keydown)\n              ;\n            }\n          },\n          inputEvents: function() {\n            module.verbose('Binding input change events');\n            $module\n              .on('change' + eventNamespace, selector.input, module.event.change)\n            ;\n          },\n          mouseEvents: function() {\n            module.verbose('Binding mouse events');\n            if(module.is.multiple()) {\n              $module\n                .on('click'   + eventNamespace, selector.label,  module.event.label.click)\n                .on('click'   + eventNamespace, selector.remove, module.event.remove.click)\n              ;\n            }\n            if( module.is.searchSelection() ) {\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('mousedown' + eventNamespace, selector.menu,   module.event.menu.mousedown)\n                .on('mouseup'   + eventNamespace, selector.menu,   module.event.menu.mouseup)\n                .on('click'     + eventNamespace, selector.icon,   module.event.icon.click)\n                .on('focus'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('click'     + eventNamespace, selector.search, module.event.search.focus)\n                .on('blur'      + eventNamespace, selector.search, module.event.search.blur)\n                .on('click'     + eventNamespace, selector.text,   module.event.text.focus)\n              ;\n              if(module.is.multiple()) {\n                $module\n                  .on('click' + eventNamespace, module.event.click)\n                ;\n              }\n            }\n            else {\n              if(settings.on == 'click') {\n                $module\n                  .on('click' + eventNamespace, selector.icon, module.event.icon.click)\n                  .on('click' + eventNamespace, module.event.test.toggle)\n                ;\n              }\n              else if(settings.on == 'hover') {\n                $module\n                  .on('mouseenter' + eventNamespace, module.delay.show)\n                  .on('mouseleave' + eventNamespace, module.delay.hide)\n                ;\n              }\n              else {\n                $module\n                  .on(settings.on + eventNamespace, module.toggle)\n                ;\n              }\n              $module\n                .on('mousedown' + eventNamespace, module.event.mousedown)\n                .on('mouseup'   + eventNamespace, module.event.mouseup)\n                .on('focus'     + eventNamespace, module.event.focus)\n              ;\n              if(module.has.menuSearch() ) {\n                $module\n                  .on('blur' + eventNamespace, selector.search, module.event.search.blur)\n                ;\n              }\n              else {\n                $module\n                  .on('blur' + eventNamespace, module.event.blur)\n                ;\n              }\n            }\n            $menu\n              .on('mouseenter' + eventNamespace, selector.item, module.event.item.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.item, module.event.item.mouseleave)\n              .on('click'      + eventNamespace, selector.item, module.event.item.click)\n            ;\n          },\n          intent: function() {\n            module.verbose('Binding hide intent event to document');\n            if(hasTouch) {\n              $document\n                .on('touchstart' + elementNamespace, module.event.test.touch)\n                .on('touchmove'  + elementNamespace, module.event.test.touch)\n              ;\n            }\n            $document\n              .on('click' + elementNamespace, module.event.test.hide)\n            ;\n          }\n        },\n\n        unbind: {\n          intent: function() {\n            module.verbose('Removing hide intent event from document');\n            if(hasTouch) {\n              $document\n                .off('touchstart' + elementNamespace)\n                .off('touchmove' + elementNamespace)\n              ;\n            }\n            $document\n              .off('click' + elementNamespace)\n            ;\n          }\n        },\n\n        filter: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            afterFiltered = function() {\n              if(module.is.multiple()) {\n                module.filterActive();\n              }\n              if(query || (!query && module.get.activeItem().length == 0)) {\n                module.select.firstUnfiltered();\n              }\n              if( module.has.allResultsFiltered() ) {\n                if( settings.onNoResults.call(element, searchTerm) ) {\n                  if(settings.allowAdditions) {\n                    if(settings.hideAdditions) {\n                      module.verbose('User addition with no menu, setting empty style');\n                      module.set.empty();\n                      module.hideMenu();\n                    }\n                  }\n                  else {\n                    module.verbose('All items filtered, showing message', searchTerm);\n                    module.add.message(message.noResults);\n                  }\n                }\n                else {\n                  module.verbose('All items filtered, hiding dropdown', searchTerm);\n                  module.hideMenu();\n                }\n              }\n              else {\n                module.remove.empty();\n                module.remove.message();\n              }\n              if(settings.allowAdditions) {\n                module.add.userSuggestion(query);\n              }\n              if(module.is.searchSelection() && module.can.show() && module.is.focusedOnSearch() ) {\n                module.show();\n              }\n            }\n          ;\n          if(settings.useLabels && module.has.maxSelections()) {\n            return;\n          }\n          if(settings.apiSettings) {\n            if( module.can.useAPI() ) {\n              module.queryRemote(searchTerm, function() {\n                if(settings.filterRemoteData) {\n                  module.filterItems(searchTerm);\n                }\n                afterFiltered();\n              });\n            }\n            else {\n              module.error(error.noAPI);\n            }\n          }\n          else {\n            module.filterItems(searchTerm);\n            afterFiltered();\n          }\n        },\n\n        queryRemote: function(query, callback) {\n          var\n            apiSettings = {\n              errorDuration : false,\n              cache         : 'local',\n              throttle      : settings.throttle,\n              urlData       : {\n                query: query\n              },\n              onError: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onFailure: function() {\n                module.add.message(message.serverError);\n                callback();\n              },\n              onSuccess : function(response) {\n                module.remove.message();\n                module.setup.menu({\n                  values: response[fields.remoteValues]\n                });\n                callback();\n              }\n            }\n          ;\n          if( !$module.api('get request') ) {\n            module.setup.api();\n          }\n          apiSettings = $.extend(true, {}, apiSettings, settings.apiSettings);\n          $module\n            .api('setting', apiSettings)\n            .api('query')\n          ;\n        },\n\n        filterItems: function(query) {\n          var\n            searchTerm = (query !== undefined)\n              ? query\n              : module.get.query(),\n            results          =  null,\n            escapedTerm      = module.escape.string(searchTerm),\n            beginsWithRegExp = new RegExp('^' + escapedTerm, 'igm')\n          ;\n          // avoid loop if we're matching nothing\n          if( module.has.query() ) {\n            results = [];\n\n            module.verbose('Searching for matching values', searchTerm);\n            $item\n              .each(function(){\n                var\n                  $choice = $(this),\n                  text,\n                  value\n                ;\n                if(settings.match == 'both' || settings.match == 'text') {\n                  text = String(module.get.choiceText($choice, false));\n                  if(text.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, text)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n                if(settings.match == 'both' || settings.match == 'value') {\n                  value = String(module.get.choiceValue($choice, text));\n                  if(value.search(beginsWithRegExp) !== -1) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === 'exact' && module.exactSearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                  else if (settings.fullTextSearch === true && module.fuzzySearch(searchTerm, value)) {\n                    results.push(this);\n                    return true;\n                  }\n                }\n              })\n            ;\n          }\n          module.debug('Showing only matched items', searchTerm);\n          module.remove.filteredItem();\n          if(results) {\n            $item\n              .not(results)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n        exactSearch: function (query, term) {\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(term.indexOf(query) > -1) {\n             return true;\n          }\n          return false;\n        },\n        filterActive: function() {\n          if(settings.useLabels) {\n            $item.filter('.' + className.active)\n              .addClass(className.filtered)\n            ;\n          }\n        },\n\n        focusSearch: function(skipHandler) {\n          if( module.has.search() && !module.is.focusedOnSearch() ) {\n            if(skipHandler) {\n              $module.off('focus' + eventNamespace, selector.search);\n              $search.focus();\n              $module.on('focus'  + eventNamespace, selector.search, module.event.search.focus);\n            }\n            else {\n              $search.focus();\n            }\n          }\n        },\n\n        forceSelection: function() {\n          var\n            $currentlySelected = $item.not(className.filtered).filter('.' + className.selected).eq(0),\n            $activeItem        = $item.not(className.filtered).filter('.' + className.active).eq(0),\n            $selectedItem      = ($currentlySelected.length > 0)\n              ? $currentlySelected\n              : $activeItem,\n            hasSelected = ($selectedItem.length > 0)\n          ;\n          if(hasSelected && !module.is.multiple()) {\n            module.debug('Forcing partial selection to selected item', $selectedItem);\n            module.event.item.click.call($selectedItem, {}, true);\n            return;\n          }\n          else {\n            if(settings.allowAdditions) {\n              module.set.selected(module.get.query());\n              module.remove.searchTerm();\n            }\n            else {\n              module.remove.searchTerm();\n            }\n          }\n        },\n\n        change: {\n          values: function(values) {\n            if(!settings.allowAdditions) {\n              module.clear();\n            }\n            module.debug('Creating dropdown with specified values', values);\n            module.setup.menu({values: values});\n            $.each(values, function(index, item) {\n              if(item.selected == true) {\n                module.debug('Setting initial selection to', item.value);\n                module.set.selected(item.value);\n                return true;\n              }\n            });\n          }\n        },\n\n        event: {\n          change: function() {\n            if(!internalChange) {\n              module.debug('Input changed, updating selection');\n              module.set.selected();\n            }\n          },\n          focus: function() {\n            if(settings.showOnFocus && !activated && module.is.hidden() && !pageLostFocus) {\n              module.show();\n            }\n          },\n          blur: function(event) {\n            pageLostFocus = (document.activeElement === this);\n            if(!activated && !pageLostFocus) {\n              module.remove.activeLabel();\n              module.hide();\n            }\n          },\n          mousedown: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = true;\n            }\n            else {\n              // prevents focus callback from occurring on mousedown\n              activated = true;\n            }\n          },\n          mouseup: function() {\n            if(module.is.searchSelection()) {\n              // prevent menu hiding on immediate re-focus\n              willRefocus = false;\n            }\n            else {\n              activated = false;\n            }\n          },\n          click: function(event) {\n            var\n              $target = $(event.target)\n            ;\n            // focus search\n            if($target.is($module)) {\n              if(!module.is.focusedOnSearch()) {\n                module.focusSearch();\n              }\n              else {\n                module.show();\n              }\n            }\n          },\n          search: {\n            focus: function() {\n              activated = true;\n              if(module.is.multiple()) {\n                module.remove.activeLabel();\n              }\n              if(settings.showOnFocus) {\n                module.search();\n              }\n            },\n            blur: function(event) {\n              pageLostFocus = (document.activeElement === this);\n              if(module.is.searchSelection() && !willRefocus) {\n                if(!itemActivated && !pageLostFocus) {\n                  if(settings.forceSelection) {\n                    module.forceSelection();\n                  }\n                  module.hide();\n                }\n              }\n              willRefocus = false;\n            }\n          },\n          icon: {\n            click: function(event) {\n              module.toggle();\n            }\n          },\n          text: {\n            focus: function(event) {\n              activated = true;\n              module.focusSearch();\n            }\n          },\n          input: function(event) {\n            if(module.is.multiple() || module.is.searchSelection()) {\n              module.set.filtered();\n            }\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.search, settings.delay.search);\n          },\n          label: {\n            click: function(event) {\n              var\n                $label        = $(this),\n                $labels       = $module.find(selector.label),\n                $activeLabels = $labels.filter('.' + className.active),\n                $nextActive   = $label.nextAll('.' + className.active),\n                $prevActive   = $label.prevAll('.' + className.active),\n                $range = ($nextActive.length > 0)\n                  ? $label.nextUntil($nextActive).add($activeLabels).add($label)\n                  : $label.prevUntil($prevActive).add($activeLabels).add($label)\n              ;\n              if(event.shiftKey) {\n                $activeLabels.removeClass(className.active);\n                $range.addClass(className.active);\n              }\n              else if(event.ctrlKey) {\n                $label.toggleClass(className.active);\n              }\n              else {\n                $activeLabels.removeClass(className.active);\n                $label.addClass(className.active);\n              }\n              settings.onLabelSelect.apply(this, $labels.filter('.' + className.active));\n            }\n          },\n          remove: {\n            click: function() {\n              var\n                $label = $(this).parent()\n              ;\n              if( $label.hasClass(className.active) ) {\n                // remove all selected labels\n                module.remove.activeLabels();\n              }\n              else {\n                // remove this label only\n                module.remove.activeLabels( $label );\n              }\n            }\n          },\n          test: {\n            toggle: function(event) {\n              var\n                toggleBehavior = (module.is.multiple())\n                  ? module.show\n                  : module.toggle\n              ;\n              if(module.is.bubbledLabelClick(event) || module.is.bubbledIconClick(event)) {\n                return;\n              }\n              if( module.determine.eventOnElement(event, toggleBehavior) ) {\n                event.preventDefault();\n              }\n            },\n            touch: function(event) {\n              module.determine.eventOnElement(event, function() {\n                if(event.type == 'touchstart') {\n                  module.timer = setTimeout(function() {\n                    module.hide();\n                  }, settings.delay.touch);\n                }\n                else if(event.type == 'touchmove') {\n                  clearTimeout(module.timer);\n                }\n              });\n              event.stopPropagation();\n            },\n            hide: function(event) {\n              module.determine.eventInModule(event, module.hide);\n            }\n          },\n          select: {\n            mutation: function(mutations) {\n              module.debug('<select> modified, recreating menu');\n              var\n                isSelectMutation = false\n              ;\n              $.each(mutations, function(index, mutation) {\n                if($(mutation.target).is('select') || $(mutation.addedNodes).is('select')) {\n                  isSelectMutation = true;\n                  return true;\n                }\n              });\n              if(isSelectMutation) {\n                module.disconnect.selectObserver();\n                module.refresh();\n                module.setup.select();\n                module.set.selected();\n                module.observe.select();\n              }\n            }\n          },\n          menu: {\n            mutation: function(mutations) {\n              var\n                mutation   = mutations[0],\n                $addedNode = mutation.addedNodes\n                  ? $(mutation.addedNodes[0])\n                  : $(false),\n                $removedNode = mutation.removedNodes\n                  ? $(mutation.removedNodes[0])\n                  : $(false),\n                $changedNodes  = $addedNode.add($removedNode),\n                isUserAddition = $changedNodes.is(selector.addition) || $changedNodes.closest(selector.addition).length > 0,\n                isMessage      = $changedNodes.is(selector.message)  || $changedNodes.closest(selector.message).length > 0\n              ;\n              if(isUserAddition || isMessage) {\n                module.debug('Updating item selector cache');\n                module.refreshItems();\n              }\n              else {\n                module.debug('Menu modified, updating selector cache');\n                module.refresh();\n              }\n            },\n            mousedown: function() {\n              itemActivated = true;\n            },\n            mouseup: function() {\n              itemActivated = false;\n            }\n          },\n          item: {\n            mouseenter: function(event) {\n              var\n                $target        = $(event.target),\n                $item          = $(this),\n                $subMenu       = $item.children(selector.menu),\n                $otherMenus    = $item.siblings(selector.item).children(selector.menu),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              if( !isBubbledEvent && hasSubMenu ) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Showing sub-menu', $subMenu);\n                  $.each($otherMenus, function() {\n                    module.animate.hide(false, $(this));\n                  });\n                  module.animate.show(false, $subMenu);\n                }, settings.delay.show);\n                event.preventDefault();\n              }\n            },\n            mouseleave: function(event) {\n              var\n                $subMenu = $(this).children(selector.menu)\n              ;\n              if($subMenu.length > 0) {\n                clearTimeout(module.itemTimer);\n                module.itemTimer = setTimeout(function() {\n                  module.verbose('Hiding sub-menu', $subMenu);\n                  module.animate.hide(false, $subMenu);\n                }, settings.delay.hide);\n              }\n            },\n            click: function (event, skipRefocus) {\n              var\n                $choice        = $(this),\n                $target        = (event)\n                  ? $(event.target)\n                  : $(''),\n                $subMenu       = $choice.find(selector.menu),\n                text           = module.get.choiceText($choice),\n                value          = module.get.choiceValue($choice, text),\n                hasSubMenu     = ($subMenu.length > 0),\n                isBubbledEvent = ($subMenu.find($target).length > 0)\n              ;\n              // prevents IE11 bug where menu receives focus even though `tabindex=-1`\n              if(module.has.menuSearch()) {\n                $(document.activeElement).blur();\n              }\n              if(!isBubbledEvent && (!hasSubMenu || settings.allowCategorySelection)) {\n                if(module.is.searchSelection()) {\n                  if(settings.allowAdditions) {\n                    module.remove.userAddition();\n                  }\n                  module.remove.searchTerm();\n                  if(!module.is.focusedOnSearch() && !(skipRefocus == true)) {\n                    module.focusSearch(true);\n                  }\n                }\n                if(!settings.useLabels) {\n                  module.remove.filteredItem();\n                  module.set.scrollPosition($choice);\n                }\n                module.determine.selectAction.call(this, text, value);\n              }\n            }\n          },\n\n          document: {\n            // label selection should occur even when element has no focus\n            keydown: function(event) {\n              var\n                pressedKey    = event.which,\n                isShortcutKey = module.is.inObject(pressedKey, keys)\n              ;\n              if(isShortcutKey) {\n                var\n                  $label            = $module.find(selector.label),\n                  $activeLabel      = $label.filter('.' + className.active),\n                  activeValue       = $activeLabel.data(metadata.value),\n                  labelIndex        = $label.index($activeLabel),\n                  labelCount        = $label.length,\n                  hasActiveLabel    = ($activeLabel.length > 0),\n                  hasMultipleActive = ($activeLabel.length > 1),\n                  isFirstLabel      = (labelIndex === 0),\n                  isLastLabel       = (labelIndex + 1 == labelCount),\n                  isSearch          = module.is.searchSelection(),\n                  isFocusedOnSearch = module.is.focusedOnSearch(),\n                  isFocused         = module.is.focused(),\n                  caretAtStart      = (isFocusedOnSearch && module.get.caretPosition() === 0),\n                  $nextLabel\n                ;\n                if(isSearch && !hasActiveLabel && !isFocusedOnSearch) {\n                  return;\n                }\n\n                if(pressedKey == keys.leftArrow) {\n                  // activate previous label\n                  if((isFocused || caretAtStart) && !hasActiveLabel) {\n                    module.verbose('Selecting previous label');\n                    $label.last().addClass(className.active);\n                  }\n                  else if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting previous label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding previous label to selection');\n                    }\n                    if(isFirstLabel && !hasMultipleActive) {\n                      $activeLabel.addClass(className.active);\n                    }\n                    else {\n                      $activeLabel.prev(selector.siblingLabel)\n                        .addClass(className.active)\n                        .end()\n                      ;\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.rightArrow) {\n                  // activate first label\n                  if(isFocused && !hasActiveLabel) {\n                    $label.first().addClass(className.active);\n                  }\n                  // activate next label\n                  if(hasActiveLabel) {\n                    if(!event.shiftKey) {\n                      module.verbose('Selecting next label');\n                      $label.removeClass(className.active);\n                    }\n                    else {\n                      module.verbose('Adding next label to selection');\n                    }\n                    if(isLastLabel) {\n                      if(isSearch) {\n                        if(!isFocusedOnSearch) {\n                          module.focusSearch();\n                        }\n                        else {\n                          $label.removeClass(className.active);\n                        }\n                      }\n                      else if(hasMultipleActive) {\n                        $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                      }\n                      else {\n                        $activeLabel.addClass(className.active);\n                      }\n                    }\n                    else {\n                      $activeLabel.next(selector.siblingLabel).addClass(className.active);\n                    }\n                    event.preventDefault();\n                  }\n                }\n                else if(pressedKey == keys.deleteKey || pressedKey == keys.backspace) {\n                  if(hasActiveLabel) {\n                    module.verbose('Removing active labels');\n                    if(isLastLabel) {\n                      if(isSearch && !isFocusedOnSearch) {\n                        module.focusSearch();\n                      }\n                    }\n                    $activeLabel.last().next(selector.siblingLabel).addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                    event.preventDefault();\n                  }\n                  else if(caretAtStart && !hasActiveLabel && pressedKey == keys.backspace) {\n                    module.verbose('Removing last label on input backspace');\n                    $activeLabel = $label.last().addClass(className.active);\n                    module.remove.activeLabels($activeLabel);\n                  }\n                }\n                else {\n                  $activeLabel.removeClass(className.active);\n                }\n              }\n            }\n          },\n\n          keydown: function(event) {\n            var\n              pressedKey    = event.which,\n              isShortcutKey = module.is.inObject(pressedKey, keys)\n            ;\n            if(isShortcutKey) {\n              var\n                $currentlySelected = $item.not(selector.unselectable).filter('.' + className.selected).eq(0),\n                $activeItem        = $menu.children('.' + className.active).eq(0),\n                $selectedItem      = ($currentlySelected.length > 0)\n                  ? $currentlySelected\n                  : $activeItem,\n                $visibleItems = ($selectedItem.length > 0)\n                  ? $selectedItem.siblings(':not(.' + className.filtered +')').addBack()\n                  : $menu.children(':not(.' + className.filtered +')'),\n                $subMenu              = $selectedItem.children(selector.menu),\n                $parentMenu           = $selectedItem.closest(selector.menu),\n                inVisibleMenu         = ($parentMenu.hasClass(className.visible) || $parentMenu.hasClass(className.animating) || $parentMenu.parent(selector.menu).length > 0),\n                hasSubMenu            = ($subMenu.length> 0),\n                hasSelectedItem       = ($selectedItem.length > 0),\n                selectedIsSelectable  = ($selectedItem.not(selector.unselectable).length > 0),\n                delimiterPressed      = (pressedKey == keys.delimiter && settings.allowAdditions && module.is.multiple()),\n                isAdditionWithoutMenu = (settings.allowAdditions && settings.hideAdditions && (pressedKey == keys.enter || delimiterPressed) && selectedIsSelectable),\n                $nextItem,\n                isSubMenuItem,\n                newIndex\n              ;\n              // allow selection with menu closed\n              if(isAdditionWithoutMenu) {\n                module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                module.event.item.click.call($selectedItem, event);\n                if(module.is.searchSelection()) {\n                  module.remove.searchTerm();\n                }\n              }\n\n              // visible menu keyboard shortcuts\n              if( module.is.visible() ) {\n\n                // enter (select or open sub-menu)\n                if(pressedKey == keys.enter || delimiterPressed) {\n                  if(pressedKey == keys.enter && hasSelectedItem && hasSubMenu && !settings.allowCategorySelection) {\n                    module.verbose('Pressed enter on unselectable category, opening sub menu');\n                    pressedKey = keys.rightArrow;\n                  }\n                  else if(selectedIsSelectable) {\n                    module.verbose('Selecting item from keyboard shortcut', $selectedItem);\n                    module.event.item.click.call($selectedItem, event);\n                    if(module.is.searchSelection()) {\n                      module.remove.searchTerm();\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // sub-menu actions\n                if(hasSelectedItem) {\n\n                  if(pressedKey == keys.leftArrow) {\n\n                    isSubMenuItem = ($parentMenu[0] !== $menu[0]);\n\n                    if(isSubMenuItem) {\n                      module.verbose('Left key pressed, closing sub-menu');\n                      module.animate.hide(false, $parentMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $parentMenu\n                        .closest(selector.item)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n\n                  // right arrow (show sub-menu)\n                  if(pressedKey == keys.rightArrow) {\n                    if(hasSubMenu) {\n                      module.verbose('Right key pressed, opening sub-menu');\n                      module.animate.show(false, $subMenu);\n                      $selectedItem\n                        .removeClass(className.selected)\n                      ;\n                      $subMenu\n                        .find(selector.item).eq(0)\n                          .addClass(className.selected)\n                      ;\n                      event.preventDefault();\n                    }\n                  }\n                }\n\n                // up arrow (traverse menu up)\n                if(pressedKey == keys.upArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $selectedItem.prevAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($visibleItems.index( $nextItem ) < 0) {\n                    module.verbose('Up key pressed but reached top of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Up key pressed, changing active item');\n                    $selectedItem\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // down arrow (traverse menu down)\n                if(pressedKey == keys.downArrow) {\n                  $nextItem = (hasSelectedItem && inVisibleMenu)\n                    ? $nextItem = $selectedItem.nextAll(selector.item + ':not(' + selector.unselectable + ')').eq(0)\n                    : $item.eq(0)\n                  ;\n                  if($nextItem.length === 0) {\n                    module.verbose('Down key pressed but reached bottom of current menu');\n                    event.preventDefault();\n                    return;\n                  }\n                  else {\n                    module.verbose('Down key pressed, changing active item');\n                    $item\n                      .removeClass(className.selected)\n                    ;\n                    $nextItem\n                      .addClass(className.selected)\n                    ;\n                    module.set.scrollPosition($nextItem);\n                    if(settings.selectOnKeydown && module.is.single()) {\n                      module.set.selectedItem($nextItem);\n                    }\n                  }\n                  event.preventDefault();\n                }\n\n                // page down (show next page)\n                if(pressedKey == keys.pageUp) {\n                  module.scrollPage('up');\n                  event.preventDefault();\n                }\n                if(pressedKey == keys.pageDown) {\n                  module.scrollPage('down');\n                  event.preventDefault();\n                }\n\n                // escape (close menu)\n                if(pressedKey == keys.escape) {\n                  module.verbose('Escape key pressed, closing dropdown');\n                  module.hide();\n                }\n\n              }\n              else {\n                // delimiter key\n                if(delimiterPressed) {\n                  event.preventDefault();\n                }\n                // down arrow (open menu)\n                if(pressedKey == keys.downArrow && !module.is.visible()) {\n                  module.verbose('Down key pressed, showing dropdown');\n                  module.show();\n                  event.preventDefault();\n                }\n              }\n            }\n            else {\n              if( !module.has.search() ) {\n                module.set.selectedLetter( String.fromCharCode(pressedKey) );\n              }\n            }\n          }\n        },\n\n        trigger: {\n          change: function() {\n            var\n              events       = document.createEvent('HTMLEvents'),\n              inputElement = $input[0]\n            ;\n            if(inputElement) {\n              module.verbose('Triggering native change event');\n              events.initEvent('change', true, false);\n              inputElement.dispatchEvent(events);\n            }\n          }\n        },\n\n        determine: {\n          selectAction: function(text, value) {\n            module.verbose('Determining action', settings.action);\n            if( $.isFunction( module.action[settings.action] ) ) {\n              module.verbose('Triggering preset action', settings.action, text, value);\n              module.action[ settings.action ].call(element, text, value, this);\n            }\n            else if( $.isFunction(settings.action) ) {\n              module.verbose('Triggering user action', settings.action, text, value);\n              settings.action.call(element, text, value, this);\n            }\n            else {\n              module.error(error.action, settings.action);\n            }\n          },\n          eventInModule: function(event, callback) {\n            var\n              $target    = $(event.target),\n              inDocument = ($target.closest(document.documentElement).length > 0),\n              inModule   = ($target.closest($module).length > 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inDocument && !inModule) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown, canceling callback');\n              return false;\n            }\n          },\n          eventOnElement: function(event, callback) {\n            var\n              $target      = $(event.target),\n              $label       = $target.closest(selector.siblingLabel),\n              inVisibleDOM = document.body.contains(event.target),\n              notOnLabel   = ($module.find($label).length === 0),\n              notInMenu    = ($target.closest($menu).length === 0)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if(inVisibleDOM && notOnLabel && notInMenu) {\n              module.verbose('Triggering event', callback);\n              callback();\n              return true;\n            }\n            else {\n              module.verbose('Event occurred in dropdown menu, canceling callback');\n              return false;\n            }\n          }\n        },\n\n        action: {\n\n          nothing: function() {},\n\n          activate: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.selected(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          select: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            if( module.can.activate( $(element) ) ) {\n              module.set.value(value, $(element));\n              if(module.is.multiple() && !module.is.allFiltered()) {\n                return;\n              }\n              else {\n                module.hideAndClear();\n              }\n            }\n          },\n\n          combo: function(text, value, element) {\n            value = (value !== undefined)\n              ? value\n              : text\n            ;\n            module.set.selected(value, $(element));\n            module.hideAndClear();\n          },\n\n          hide: function(text, value, element) {\n            module.set.value(value, text);\n            module.hideAndClear();\n          }\n\n        },\n\n        get: {\n          id: function() {\n            return id;\n          },\n          defaultText: function() {\n            return $module.data(metadata.defaultText);\n          },\n          defaultValue: function() {\n            return $module.data(metadata.defaultValue);\n          },\n          placeholderText: function() {\n            if(settings.placeholder != 'auto' && typeof settings.placeholder == 'string') {\n              return settings.placeholder;\n            }\n            return $module.data(metadata.placeholderText) || '';\n          },\n          text: function() {\n            return $text.text();\n          },\n          query: function() {\n            return $.trim($search.val());\n          },\n          searchWidth: function(value) {\n            value = (value !== undefined)\n              ? value\n              : $search.val()\n            ;\n            $sizer.text(value);\n            // prevent rounding issues\n            return Math.ceil( $sizer.width() + 1);\n          },\n          selectionCount: function() {\n            var\n              values = module.get.values(),\n              count\n            ;\n            count = ( module.is.multiple() )\n              ? $.isArray(values)\n                ? values.length\n                : 0\n              : (module.get.value() !== '')\n                ? 1\n                : 0\n            ;\n            return count;\n          },\n          transition: function($subMenu) {\n            return (settings.transition == 'auto')\n              ? module.is.upward($subMenu)\n                ? 'slide up'\n                : 'slide down'\n              : settings.transition\n            ;\n          },\n          userValues: function() {\n            var\n              values = module.get.values()\n            ;\n            if(!values) {\n              return false;\n            }\n            values = $.isArray(values)\n              ? values\n              : [values]\n            ;\n            return $.grep(values, function(value) {\n              return (module.get.item(value) === false);\n            });\n          },\n          uniqueArray: function(array) {\n            return $.grep(array, function (value, index) {\n                return $.inArray(value, array) === index;\n            });\n          },\n          caretPosition: function() {\n            var\n              input = $search.get(0),\n              range,\n              rangeLength\n            ;\n            if('selectionStart' in input) {\n              return input.selectionStart;\n            }\n            else if (document.selection) {\n              input.focus();\n              range       = document.selection.createRange();\n              rangeLength = range.text.length;\n              range.moveStart('character', -input.value.length);\n              return range.text.length - rangeLength;\n            }\n          },\n          value: function() {\n            var\n              value = ($input.length > 0)\n                ? $input.val()\n                : $module.data(metadata.value),\n              isEmptyMultiselect = ($.isArray(value) && value.length === 1 && value[0] === '')\n            ;\n            // prevents placeholder element from being selected when multiple\n            return (value === undefined || isEmptyMultiselect)\n              ? ''\n              : value\n            ;\n          },\n          values: function() {\n            var\n              value = module.get.value()\n            ;\n            if(value === '') {\n              return '';\n            }\n            return ( !module.has.selectInput() && module.is.multiple() )\n              ? (typeof value == 'string') // delimited string\n                ? value.split(settings.delimiter)\n                : ''\n              : value\n            ;\n          },\n          remoteValues: function() {\n            var\n              values = module.get.values(),\n              remoteValues = false\n            ;\n            if(values) {\n              if(typeof values == 'string') {\n                values = [values];\n              }\n              $.each(values, function(index, value) {\n                var\n                  name = module.read.remoteData(value)\n                ;\n                module.verbose('Restoring value from session data', name, value);\n                if(name) {\n                  if(!remoteValues) {\n                    remoteValues = {};\n                  }\n                  remoteValues[value] = name;\n                }\n              });\n            }\n            return remoteValues;\n          },\n          choiceText: function($choice, preserveHTML) {\n            preserveHTML = (preserveHTML !== undefined)\n              ? preserveHTML\n              : settings.preserveHTML\n            ;\n            if($choice) {\n              if($choice.find(selector.menu).length > 0) {\n                module.verbose('Retrieving text of element with sub-menu');\n                $choice = $choice.clone();\n                $choice.find(selector.menu).remove();\n                $choice.find(selector.menuIcon).remove();\n              }\n              return ($choice.data(metadata.text) !== undefined)\n                ? $choice.data(metadata.text)\n                : (preserveHTML)\n                  ? $.trim($choice.html())\n                  : $.trim($choice.text())\n              ;\n            }\n          },\n          choiceValue: function($choice, choiceText) {\n            choiceText = choiceText || module.get.choiceText($choice);\n            if(!$choice) {\n              return false;\n            }\n            return ($choice.data(metadata.value) !== undefined)\n              ? String( $choice.data(metadata.value) )\n              : (typeof choiceText === 'string')\n                ? $.trim(choiceText.toLowerCase())\n                : String(choiceText)\n            ;\n          },\n          inputEvent: function() {\n            var\n              input = $search[0]\n            ;\n            if(input) {\n              return (input.oninput !== undefined)\n                ? 'input'\n                : (input.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n              ;\n            }\n            return false;\n          },\n          selectValues: function() {\n            var\n              select = {}\n            ;\n            select.values = [];\n            $module\n              .find('option')\n                .each(function() {\n                  var\n                    $option  = $(this),\n                    name     = $option.html(),\n                    disabled = $option.attr('disabled'),\n                    value    = ( $option.attr('value') !== undefined )\n                      ? $option.attr('value')\n                      : name\n                  ;\n                  if(settings.placeholder === 'auto' && value === '') {\n                    select.placeholder = name;\n                  }\n                  else {\n                    select.values.push({\n                      name     : name,\n                      value    : value,\n                      disabled : disabled\n                    });\n                  }\n                })\n            ;\n            if(settings.placeholder && settings.placeholder !== 'auto') {\n              module.debug('Setting placeholder value to', settings.placeholder);\n              select.placeholder = settings.placeholder;\n            }\n            if(settings.sortSelect) {\n              select.values.sort(function(a, b) {\n                return (a.name > b.name)\n                  ? 1\n                  : -1\n                ;\n              });\n              module.debug('Retrieved and sorted values from select', select);\n            }\n            else {\n              module.debug('Retrieved values from select', select);\n            }\n            return select;\n          },\n          activeItem: function() {\n            return $item.filter('.'  + className.active);\n          },\n          selectedItem: function() {\n            var\n              $selectedItem = $item.not(selector.unselectable).filter('.'  + className.selected)\n            ;\n            return ($selectedItem.length > 0)\n              ? $selectedItem\n              : $item.eq(0)\n            ;\n          },\n          itemWithAdditions: function(value) {\n            var\n              $items       = module.get.item(value),\n              $userItems   = module.create.userChoice(value),\n              hasUserItems = ($userItems && $userItems.length > 0)\n            ;\n            if(hasUserItems) {\n              $items = ($items.length > 0)\n                ? $items.add($userItems)\n                : $userItems\n              ;\n            }\n            return $items;\n          },\n          item: function(value, strict) {\n            var\n              $selectedItem = false,\n              shouldSearch,\n              isMultiple\n            ;\n            value = (value !== undefined)\n              ? value\n              : ( module.get.values() !== undefined)\n                ? module.get.values()\n                : module.get.text()\n            ;\n            shouldSearch = (isMultiple)\n              ? (value.length > 0)\n              : (value !== undefined && value !== null)\n            ;\n            isMultiple = (module.is.multiple() && $.isArray(value));\n            strict     = (value === '' || value === 0)\n              ? true\n              : strict || false\n            ;\n            if(shouldSearch) {\n              $item\n                .each(function() {\n                  var\n                    $choice       = $(this),\n                    optionText    = module.get.choiceText($choice),\n                    optionValue   = module.get.choiceValue($choice, optionText)\n                  ;\n                  // safe early exit\n                  if(optionValue === null || optionValue === undefined) {\n                    return;\n                  }\n                  if(isMultiple) {\n                    if($.inArray( String(optionValue), value) !== -1 || $.inArray(optionText, value) !== -1) {\n                      $selectedItem = ($selectedItem)\n                        ? $selectedItem.add($choice)\n                        : $choice\n                      ;\n                    }\n                  }\n                  else if(strict) {\n                    module.verbose('Ambiguous dropdown value using strict type check', $choice, value);\n                    if( optionValue === value || optionText === value) {\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                  else {\n                    if( String(optionValue) == String(value) || optionText == value) {\n                      module.verbose('Found select item by value', optionValue, value);\n                      $selectedItem = $choice;\n                      return true;\n                    }\n                  }\n                })\n              ;\n            }\n            return $selectedItem;\n          }\n        },\n\n        check: {\n          maxSelections: function(selectionCount) {\n            if(settings.maxSelections) {\n              selectionCount = (selectionCount !== undefined)\n                ? selectionCount\n                : module.get.selectionCount()\n              ;\n              if(selectionCount >= settings.maxSelections) {\n                module.debug('Maximum selection count reached');\n                if(settings.useLabels) {\n                  $item.addClass(className.filtered);\n                  module.add.message(message.maxSelections);\n                }\n                return true;\n              }\n              else {\n                module.verbose('No longer at maximum selection count');\n                module.remove.message();\n                module.remove.filteredItem();\n                if(module.is.searchSelection()) {\n                  module.filterItems();\n                }\n                return false;\n              }\n            }\n            return true;\n          }\n        },\n\n        restore: {\n          defaults: function() {\n            module.clear();\n            module.restore.defaultText();\n            module.restore.defaultValue();\n          },\n          defaultText: function() {\n            var\n              defaultText     = module.get.defaultText(),\n              placeholderText = module.get.placeholderText\n            ;\n            if(defaultText === placeholderText) {\n              module.debug('Restoring default placeholder text', defaultText);\n              module.set.placeholderText(defaultText);\n            }\n            else {\n              module.debug('Restoring default text', defaultText);\n              module.set.text(defaultText);\n            }\n          },\n          placeholderText: function() {\n            module.set.placeholderText();\n          },\n          defaultValue: function() {\n            var\n              defaultValue = module.get.defaultValue()\n            ;\n            if(defaultValue !== undefined) {\n              module.debug('Restoring default value', defaultValue);\n              if(defaultValue !== '') {\n                module.set.value(defaultValue);\n                module.set.selected();\n              }\n              else {\n                module.remove.activeItem();\n                module.remove.selectedItem();\n              }\n            }\n          },\n          labels: function() {\n            if(settings.allowAdditions) {\n              if(!settings.useLabels) {\n                module.error(error.labels);\n                settings.useLabels = true;\n              }\n              module.debug('Restoring selected values');\n              module.create.userLabels();\n            }\n            module.check.maxSelections();\n          },\n          selected: function() {\n            module.restore.values();\n            if(module.is.multiple()) {\n              module.debug('Restoring previously selected values and labels');\n              module.restore.labels();\n            }\n            else {\n              module.debug('Restoring previously selected values');\n            }\n          },\n          values: function() {\n            // prevents callbacks from occurring on initial load\n            module.set.initialLoad();\n            if(settings.apiSettings && settings.saveRemoteData && module.get.remoteValues()) {\n              module.restore.remoteValues();\n            }\n            else {\n              module.set.selected();\n            }\n            module.remove.initialLoad();\n          },\n          remoteValues: function() {\n            var\n              values = module.get.remoteValues()\n            ;\n            module.debug('Recreating selected from session data', values);\n            if(values) {\n              if( module.is.single() ) {\n                $.each(values, function(value, name) {\n                  module.set.text(name);\n                });\n              }\n              else {\n                $.each(values, function(value, name) {\n                  module.add.label(value, name);\n                });\n              }\n            }\n          }\n        },\n\n        read: {\n          remoteData: function(value) {\n            var\n              name\n            ;\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            name = sessionStorage.getItem(value);\n            return (name !== undefined)\n              ? name\n              : false\n            ;\n          }\n        },\n\n        save: {\n          defaults: function() {\n            module.save.defaultText();\n            module.save.placeholderText();\n            module.save.defaultValue();\n          },\n          defaultValue: function() {\n            var\n              value = module.get.value()\n            ;\n            module.verbose('Saving default value as', value);\n            $module.data(metadata.defaultValue, value);\n          },\n          defaultText: function() {\n            var\n              text = module.get.text()\n            ;\n            module.verbose('Saving default text as', text);\n            $module.data(metadata.defaultText, text);\n          },\n          placeholderText: function() {\n            var\n              text\n            ;\n            if(settings.placeholder !== false && $text.hasClass(className.placeholder)) {\n              text = module.get.text();\n              module.verbose('Saving placeholder text as', text);\n              $module.data(metadata.placeholderText, text);\n            }\n          },\n          remoteData: function(name, value) {\n            if(window.Storage === undefined) {\n              module.error(error.noStorage);\n              return;\n            }\n            module.verbose('Saving remote data to session storage', value, name);\n            sessionStorage.setItem(value, name);\n          }\n        },\n\n        clear: function() {\n          if(module.is.multiple() && settings.useLabels) {\n            module.remove.labels();\n          }\n          else {\n            module.remove.activeItem();\n            module.remove.selectedItem();\n          }\n          module.set.placeholderText();\n          module.clearValue();\n        },\n\n        clearValue: function() {\n          module.set.value('');\n        },\n\n        scrollPage: function(direction, $selectedItem) {\n          var\n            $currentItem  = $selectedItem || module.get.selectedItem(),\n            $menu         = $currentItem.closest(selector.menu),\n            menuHeight    = $menu.outerHeight(),\n            currentScroll = $menu.scrollTop(),\n            itemHeight    = $item.eq(0).outerHeight(),\n            itemsPerPage  = Math.floor(menuHeight / itemHeight),\n            maxScroll     = $menu.prop('scrollHeight'),\n            newScroll     = (direction == 'up')\n              ? currentScroll - (itemHeight * itemsPerPage)\n              : currentScroll + (itemHeight * itemsPerPage),\n            $selectableItem = $item.not(selector.unselectable),\n            isWithinRange,\n            $nextSelectedItem,\n            elementIndex\n          ;\n          elementIndex      = (direction == 'up')\n            ? $selectableItem.index($currentItem) - itemsPerPage\n            : $selectableItem.index($currentItem) + itemsPerPage\n          ;\n          isWithinRange = (direction == 'up')\n            ? (elementIndex >= 0)\n            : (elementIndex < $selectableItem.length)\n          ;\n          $nextSelectedItem = (isWithinRange)\n            ? $selectableItem.eq(elementIndex)\n            : (direction == 'up')\n              ? $selectableItem.first()\n              : $selectableItem.last()\n          ;\n          if($nextSelectedItem.length > 0) {\n            module.debug('Scrolling page', direction, $nextSelectedItem);\n            $currentItem\n              .removeClass(className.selected)\n            ;\n            $nextSelectedItem\n              .addClass(className.selected)\n            ;\n            if(settings.selectOnKeydown && module.is.single()) {\n              module.set.selectedItem($nextSelectedItem);\n            }\n            $menu\n              .scrollTop(newScroll)\n            ;\n          }\n        },\n\n        set: {\n          filtered: function() {\n            var\n              isMultiple       = module.is.multiple(),\n              isSearch         = module.is.searchSelection(),\n              isSearchMultiple = (isMultiple && isSearch),\n              searchValue      = (isSearch)\n                ? module.get.query()\n                : '',\n              hasSearchValue   = (typeof searchValue === 'string' && searchValue.length > 0),\n              searchWidth      = module.get.searchWidth(),\n              valueIsSet       = searchValue !== ''\n            ;\n            if(isMultiple && hasSearchValue) {\n              module.verbose('Adjusting input width', searchWidth, settings.glyphWidth);\n              $search.css('width', searchWidth);\n            }\n            if(hasSearchValue || (isSearchMultiple && valueIsSet)) {\n              module.verbose('Hiding placeholder text');\n              $text.addClass(className.filtered);\n            }\n            else if(!isMultiple || (isSearchMultiple && !valueIsSet)) {\n              module.verbose('Showing placeholder text');\n              $text.removeClass(className.filtered);\n            }\n          },\n          empty: function() {\n            $module.addClass(className.empty);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          placeholderText: function(text) {\n            text = text || module.get.placeholderText();\n            module.debug('Setting placeholder text', text);\n            module.set.text(text);\n            $text.addClass(className.placeholder);\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Added tabindex to searchable dropdown');\n              $search\n                .val('')\n                .attr('tabindex', 0)\n              ;\n              $menu\n                .attr('tabindex', -1)\n              ;\n            }\n            else {\n              module.debug('Added tabindex to dropdown');\n              if( $module.attr('tabindex') === undefined) {\n                $module\n                  .attr('tabindex', 0)\n                ;\n                $menu\n                  .attr('tabindex', -1)\n                ;\n              }\n            }\n          },\n          initialLoad: function() {\n            module.verbose('Setting initial load');\n            initialLoad = true;\n          },\n          activeItem: function($item) {\n            if( settings.allowAdditions && $item.filter(selector.addition).length > 0 ) {\n              $item.addClass(className.filtered);\n            }\n            else {\n              $item.addClass(className.active);\n            }\n          },\n          partialSearch: function(text) {\n            var\n              length = module.get.query().length\n            ;\n            $search.val( text.substr(0 , length));\n          },\n          scrollPosition: function($item, forceScroll) {\n            var\n              edgeTolerance = 5,\n              $menu,\n              hasActive,\n              offset,\n              itemHeight,\n              itemOffset,\n              menuOffset,\n              menuScroll,\n              menuHeight,\n              abovePage,\n              belowPage\n            ;\n\n            $item       = $item || module.get.selectedItem();\n            $menu       = $item.closest(selector.menu);\n            hasActive   = ($item && $item.length > 0);\n            forceScroll = (forceScroll !== undefined)\n              ? forceScroll\n              : false\n            ;\n            if($item && $menu.length > 0 && hasActive) {\n              itemOffset = $item.position().top;\n\n              $menu.addClass(className.loading);\n              menuScroll = $menu.scrollTop();\n              menuOffset = $menu.offset().top;\n              itemOffset = $item.offset().top;\n              offset     = menuScroll - menuOffset + itemOffset;\n              if(!forceScroll) {\n                menuHeight = $menu.height();\n                belowPage  = menuScroll + menuHeight < (offset + edgeTolerance);\n                abovePage  = ((offset - edgeTolerance) < menuScroll);\n              }\n              module.debug('Scrolling to active item', offset);\n              if(forceScroll || abovePage || belowPage) {\n                $menu.scrollTop(offset);\n              }\n              $menu.removeClass(className.loading);\n            }\n          },\n          text: function(text) {\n            if(settings.action !== 'select') {\n              if(settings.action == 'combo') {\n                module.debug('Changing combo button text', text, $combo);\n                if(settings.preserveHTML) {\n                  $combo.html(text);\n                }\n                else {\n                  $combo.text(text);\n                }\n              }\n              else {\n                if(text !== module.get.placeholderText()) {\n                  $text.removeClass(className.placeholder);\n                }\n                module.debug('Changing text', text, $text);\n                $text\n                  .removeClass(className.filtered)\n                ;\n                if(settings.preserveHTML) {\n                  $text.html(text);\n                }\n                else {\n                  $text.text(text);\n                }\n              }\n            }\n          },\n          selectedItem: function($item) {\n            var\n              value      = module.get.choiceValue($item),\n              searchText = module.get.choiceText($item, false),\n              text       = module.get.choiceText($item, true)\n            ;\n            module.debug('Setting user selection to item', $item);\n            module.remove.activeItem();\n            module.set.partialSearch(searchText);\n            module.set.activeItem($item);\n            module.set.selected(value, $item);\n            module.set.text(text);\n          },\n          selectedLetter: function(letter) {\n            var\n              $selectedItem         = $item.filter('.' + className.selected),\n              alreadySelectedLetter = $selectedItem.length > 0 && module.has.firstLetter($selectedItem, letter),\n              $nextValue            = false,\n              $nextItem\n            ;\n            // check next of same letter\n            if(alreadySelectedLetter) {\n              $nextItem = $selectedItem.nextAll($item).eq(0);\n              if( module.has.firstLetter($nextItem, letter) ) {\n                $nextValue  = $nextItem;\n              }\n            }\n            // check all values\n            if(!$nextValue) {\n              $item\n                .each(function(){\n                  if(module.has.firstLetter($(this), letter)) {\n                    $nextValue = $(this);\n                    return false;\n                  }\n                })\n              ;\n            }\n            // set next value\n            if($nextValue) {\n              module.verbose('Scrolling to next value with letter', letter);\n              module.set.scrollPosition($nextValue);\n              $selectedItem.removeClass(className.selected);\n              $nextValue.addClass(className.selected);\n              if(settings.selectOnKeydown && module.is.single()) {\n                module.set.selectedItem($nextValue);\n              }\n            }\n          },\n          direction: function($menu) {\n            if(settings.direction == 'auto') {\n              // reset position\n              module.remove.upward();\n\n              if(module.can.openDownward($menu)) {\n                module.remove.upward($menu);\n              }\n              else {\n                module.set.upward($menu);\n              }\n              if(!module.is.leftward($menu) && !module.can.openRightward($menu)) {\n                module.set.leftward($menu);\n              }\n            }\n            else if(settings.direction == 'upward') {\n              module.set.upward($menu);\n            }\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.addClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.addClass(className.leftward);\n          },\n          value: function(value, text, $selected) {\n            var\n              escapedValue = module.escape.value(value),\n              hasInput     = ($input.length > 0),\n              isAddition   = !module.has.value(value),\n              currentValue = module.get.values(),\n              stringValue  = (value !== undefined)\n                ? String(value)\n                : value,\n              newValue\n            ;\n            if(hasInput) {\n              if(!settings.allowReselection && stringValue == currentValue) {\n                module.verbose('Skipping value update already same value', value, currentValue);\n                if(!module.is.initialLoad()) {\n                  return;\n                }\n              }\n\n              if( module.is.single() && module.has.selectInput() && module.can.extendSelect() ) {\n                module.debug('Adding user option', value);\n                module.add.optionValue(value);\n              }\n              module.debug('Updating input value', escapedValue, currentValue);\n              internalChange = true;\n              $input\n                .val(escapedValue)\n              ;\n              if(settings.fireOnInit === false && module.is.initialLoad()) {\n                module.debug('Input native change event ignored on initial load');\n              }\n              else {\n                module.trigger.change();\n              }\n              internalChange = false;\n            }\n            else {\n              module.verbose('Storing value in metadata', escapedValue, $input);\n              if(escapedValue !== currentValue) {\n                $module.data(metadata.value, stringValue);\n              }\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onChange);\n            }\n            else {\n              settings.onChange.call(element, value, text, $selected);\n            }\n          },\n          active: function() {\n            $module\n              .addClass(className.active)\n            ;\n          },\n          multiple: function() {\n            $module.addClass(className.multiple);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          exactly: function(value, $selectedItem) {\n            module.debug('Setting selected to exact values');\n            module.clear();\n            module.set.selected(value, $selectedItem);\n          },\n          selected: function(value, $selectedItem) {\n            var\n              isMultiple = module.is.multiple(),\n              $userSelectedItem\n            ;\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n            if(!$selectedItem) {\n              return;\n            }\n            module.debug('Setting selected menu item to', $selectedItem);\n            if(module.is.multiple()) {\n              module.remove.searchWidth();\n            }\n            if(module.is.single()) {\n              module.remove.activeItem();\n              module.remove.selectedItem();\n            }\n            else if(settings.useLabels) {\n              module.remove.selectedItem();\n            }\n            // select each item\n            $selectedItem\n              .each(function() {\n                var\n                  $selected      = $(this),\n                  selectedText   = module.get.choiceText($selected),\n                  selectedValue  = module.get.choiceValue($selected, selectedText),\n\n                  isFiltered     = $selected.hasClass(className.filtered),\n                  isActive       = $selected.hasClass(className.active),\n                  isUserValue    = $selected.hasClass(className.addition),\n                  shouldAnimate  = (isMultiple && $selectedItem.length == 1)\n                ;\n                if(isMultiple) {\n                  if(!isActive || isUserValue) {\n                    if(settings.apiSettings && settings.saveRemoteData) {\n                      module.save.remoteData(selectedText, selectedValue);\n                    }\n                    if(settings.useLabels) {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.add.label(selectedValue, selectedText, shouldAnimate);\n                      module.set.activeItem($selected);\n                      module.filterActive();\n                      module.select.nextAvailable($selectedItem);\n                    }\n                    else {\n                      module.add.value(selectedValue, selectedText, $selected);\n                      module.set.text(module.add.variables(message.count));\n                      module.set.activeItem($selected);\n                    }\n                  }\n                  else if(!isFiltered) {\n                    module.debug('Selected active value, removing label');\n                    module.remove.selected(selectedValue);\n                  }\n                }\n                else {\n                  if(settings.apiSettings && settings.saveRemoteData) {\n                    module.save.remoteData(selectedText, selectedValue);\n                  }\n                  module.set.text(selectedText);\n                  module.set.value(selectedValue, selectedText, $selected);\n                  $selected\n                    .addClass(className.active)\n                    .addClass(className.selected)\n                  ;\n                }\n              })\n            ;\n          }\n        },\n\n        add: {\n          label: function(value, text, shouldAnimate) {\n            var\n              $next  = module.is.searchSelection()\n                ? $search\n                : $text,\n              escapedValue = module.escape.value(value),\n              $label\n            ;\n            $label =  $('<a />')\n              .addClass(className.label)\n              .attr('data-' + metadata.value, escapedValue)\n              .html(templates.label(escapedValue, text))\n            ;\n            $label = settings.onLabelCreate.call($label, escapedValue, text);\n\n            if(module.has.label(value)) {\n              module.debug('Label already exists, skipping', escapedValue);\n              return;\n            }\n            if(settings.label.variation) {\n              $label.addClass(settings.label.variation);\n            }\n            if(shouldAnimate === true) {\n              module.debug('Animating in label', $label);\n              $label\n                .addClass(className.hidden)\n                .insertBefore($next)\n                .transition(settings.label.transition, settings.label.duration)\n              ;\n            }\n            else {\n              module.debug('Adding selection label', $label);\n              $label\n                .insertBefore($next)\n              ;\n            }\n          },\n          message: function(message) {\n            var\n              $message = $menu.children(selector.message),\n              html     = settings.templates.message(module.add.variables(message))\n            ;\n            if($message.length > 0) {\n              $message\n                .html(html)\n              ;\n            }\n            else {\n              $message = $('<div/>')\n                .html(html)\n                .addClass(className.message)\n                .appendTo($menu)\n              ;\n            }\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(hasOption) {\n              return;\n            }\n            // temporarily disconnect observer\n            module.disconnect.selectObserver();\n            if( module.is.single() ) {\n              module.verbose('Removing previous user addition');\n              $input.find('option.' + className.addition).remove();\n            }\n            $('<option/>')\n              .prop('value', escapedValue)\n              .addClass(className.addition)\n              .html(value)\n              .appendTo($input)\n            ;\n            module.verbose('Adding user addition as an <option>', value);\n            module.observe.select();\n          },\n          userSuggestion: function(value) {\n            var\n              $addition         = $menu.children(selector.addition),\n              $existingItem     = module.get.item(value),\n              alreadyHasValue   = $existingItem && $existingItem.not(selector.addition).length,\n              hasUserSuggestion = $addition.length > 0,\n              html\n            ;\n            if(settings.useLabels && module.has.maxSelections()) {\n              return;\n            }\n            if(value === '' || alreadyHasValue) {\n              $addition.remove();\n              return;\n            }\n            if(hasUserSuggestion) {\n              $addition\n                .data(metadata.value, value)\n                .data(metadata.text, value)\n                .attr('data-' + metadata.value, value)\n                .attr('data-' + metadata.text, value)\n                .removeClass(className.filtered)\n              ;\n              if(!settings.hideAdditions) {\n                html = settings.templates.addition( module.add.variables(message.addResult, value) );\n                $addition\n                  .html(html)\n                ;\n              }\n              module.verbose('Replacing user suggestion with new value', $addition);\n            }\n            else {\n              $addition = module.create.userChoice(value);\n              $addition\n                .prependTo($menu)\n              ;\n              module.verbose('Adding item choice to menu corresponding with user choice addition', $addition);\n            }\n            if(!settings.hideAdditions || module.is.allFiltered()) {\n              $addition\n                .addClass(className.selected)\n                .siblings()\n                .removeClass(className.selected)\n              ;\n            }\n            module.refreshItems();\n          },\n          variables: function(message, term) {\n            var\n              hasCount    = (message.search('{count}') !== -1),\n              hasMaxCount = (message.search('{maxCount}') !== -1),\n              hasTerm     = (message.search('{term}') !== -1),\n              values,\n              count,\n              query\n            ;\n            module.verbose('Adding templated variables to message', message);\n            if(hasCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{count}', count);\n            }\n            if(hasMaxCount) {\n              count  = module.get.selectionCount();\n              message = message.replace('{maxCount}', settings.maxSelections);\n            }\n            if(hasTerm) {\n              query   = term || module.get.query();\n              message = message.replace('{term}', query);\n            }\n            return message;\n          },\n          value: function(addedValue, addedText, $selectedItem) {\n            var\n              currentValue = module.get.values(),\n              newValue\n            ;\n            if(addedValue === '') {\n              module.debug('Cannot select blank values from multiselect');\n              return;\n            }\n            // extend current array\n            if($.isArray(currentValue)) {\n              newValue = currentValue.concat([addedValue]);\n              newValue = module.get.uniqueArray(newValue);\n            }\n            else {\n              newValue = [addedValue];\n            }\n            // add values\n            if( module.has.selectInput() ) {\n              if(module.can.extendSelect()) {\n                module.debug('Adding value to select', addedValue, newValue, $input);\n                module.add.optionValue(addedValue);\n              }\n            }\n            else {\n              newValue = newValue.join(settings.delimiter);\n              module.debug('Setting hidden input to delimited value', newValue, $input);\n            }\n\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('Skipping onadd callback on initial load', settings.onAdd);\n            }\n            else {\n              settings.onAdd.call(element, addedValue, addedText, $selectedItem);\n            }\n            module.set.value(newValue, addedValue, addedText, $selectedItem);\n            module.check.maxSelections();\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          activeLabel: function() {\n            $module.find(selector.label).removeClass(className.active);\n          },\n          empty: function() {\n            $module.removeClass(className.empty);\n          },\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          },\n          upward: function($currentMenu) {\n            var $element = $currentMenu || $module;\n            $element.removeClass(className.upward);\n          },\n          leftward: function($currentMenu) {\n            var $element = $currentMenu || $menu;\n            $element.removeClass(className.leftward);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          activeItem: function() {\n            $item.removeClass(className.active);\n          },\n          filteredItem: function() {\n            if(settings.useLabels && module.has.maxSelections() ) {\n              return;\n            }\n            if(settings.useLabels && module.is.multiple()) {\n              $item.not('.' + className.active).removeClass(className.filtered);\n            }\n            else {\n              $item.removeClass(className.filtered);\n            }\n            module.remove.empty();\n          },\n          optionValue: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $option      = $input.find('option[value=\"' + module.escape.string(escapedValue) + '\"]'),\n              hasOption    = ($option.length > 0)\n            ;\n            if(!hasOption || !$option.hasClass(className.addition)) {\n              return;\n            }\n            // temporarily disconnect observer\n            if(selectObserver) {\n              selectObserver.disconnect();\n              module.verbose('Temporarily disconnecting mutation observer');\n            }\n            $option.remove();\n            module.verbose('Removing user addition as an <option>', escapedValue);\n            if(selectObserver) {\n              selectObserver.observe($input[0], {\n                childList : true,\n                subtree   : true\n              });\n            }\n          },\n          message: function() {\n            $menu.children(selector.message).remove();\n          },\n          searchWidth: function() {\n            $search.css('width', '');\n          },\n          searchTerm: function() {\n            module.verbose('Cleared search term');\n            $search.val('');\n            module.set.filtered();\n          },\n          userAddition: function() {\n            $item.filter(selector.addition).remove();\n          },\n          selected: function(value, $selectedItem) {\n            $selectedItem = (settings.allowAdditions)\n              ? $selectedItem || module.get.itemWithAdditions(value)\n              : $selectedItem || module.get.item(value)\n            ;\n\n            if(!$selectedItem) {\n              return false;\n            }\n\n            $selectedItem\n              .each(function() {\n                var\n                  $selected     = $(this),\n                  selectedText  = module.get.choiceText($selected),\n                  selectedValue = module.get.choiceValue($selected, selectedText)\n                ;\n                if(module.is.multiple()) {\n                  if(settings.useLabels) {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    module.remove.label(selectedValue);\n                  }\n                  else {\n                    module.remove.value(selectedValue, selectedText, $selected);\n                    if(module.get.selectionCount() === 0) {\n                      module.set.placeholderText();\n                    }\n                    else {\n                      module.set.text(module.add.variables(message.count));\n                    }\n                  }\n                }\n                else {\n                  module.remove.value(selectedValue, selectedText, $selected);\n                }\n                $selected\n                  .removeClass(className.filtered)\n                  .removeClass(className.active)\n                ;\n                if(settings.useLabels) {\n                  $selected.removeClass(className.selected);\n                }\n              })\n            ;\n          },\n          selectedItem: function() {\n            $item.removeClass(className.selected);\n          },\n          value: function(removedValue, removedText, $removedItem) {\n            var\n              values = module.get.values(),\n              newValue\n            ;\n            if( module.has.selectInput() ) {\n              module.verbose('Input is <select> removing selected option', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              module.remove.optionValue(removedValue);\n            }\n            else {\n              module.verbose('Removing from delimited values', removedValue);\n              newValue = module.remove.arrayValue(removedValue, values);\n              newValue = newValue.join(settings.delimiter);\n            }\n            if(settings.fireOnInit === false && module.is.initialLoad()) {\n              module.verbose('No callback on initial load', settings.onRemove);\n            }\n            else {\n              settings.onRemove.call(element, removedValue, removedText, $removedItem);\n            }\n            module.set.value(newValue, removedText, $removedItem);\n            module.check.maxSelections();\n          },\n          arrayValue: function(removedValue, values) {\n            if( !$.isArray(values) ) {\n              values = [values];\n            }\n            values = $.grep(values, function(value){\n              return (removedValue != value);\n            });\n            module.verbose('Removed value from delimited string', removedValue, values);\n            return values;\n          },\n          label: function(value, shouldAnimate) {\n            var\n              $labels       = $module.find(selector.label),\n              $removedLabel = $labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(value) +'\"]')\n            ;\n            module.verbose('Removing label', $removedLabel);\n            $removedLabel.remove();\n          },\n          activeLabels: function($activeLabels) {\n            $activeLabels = $activeLabels || $module.find(selector.label).filter('.' + className.active);\n            module.verbose('Removing active label selections', $activeLabels);\n            module.remove.labels($activeLabels);\n          },\n          labels: function($labels) {\n            $labels = $labels || $module.find(selector.label);\n            module.verbose('Removing labels', $labels);\n            $labels\n              .each(function(){\n                var\n                  $label      = $(this),\n                  value       = $label.data(metadata.value),\n                  stringValue = (value !== undefined)\n                    ? String(value)\n                    : value,\n                  isUserValue = module.is.userValue(stringValue)\n                ;\n                if(settings.onLabelRemove.call($label, value) === false) {\n                  module.debug('Label remove callback cancelled removal');\n                  return;\n                }\n                module.remove.message();\n                if(isUserValue) {\n                  module.remove.value(stringValue);\n                  module.remove.label(stringValue);\n                }\n                else {\n                  // selected will also remove label\n                  module.remove.selected(stringValue);\n                }\n              })\n            ;\n          },\n          tabbable: function() {\n            if( module.is.searchSelection() ) {\n              module.debug('Searchable dropdown initialized');\n              $search\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n            else {\n              module.debug('Simple selection dropdown initialized');\n              $module\n                .removeAttr('tabindex')\n              ;\n              $menu\n                .removeAttr('tabindex')\n              ;\n            }\n          }\n        },\n\n        has: {\n          menuSearch: function() {\n            return (module.has.search() && $search.closest($menu).length > 0);\n          },\n          search: function() {\n            return ($search.length > 0);\n          },\n          sizer: function() {\n            return ($sizer.length > 0);\n          },\n          selectInput: function() {\n            return ( $input.is('select') );\n          },\n          minCharacters: function(searchTerm) {\n            if(settings.minCharacters) {\n              searchTerm = (searchTerm !== undefined)\n                ? String(searchTerm)\n                : String(module.get.query())\n              ;\n              return (searchTerm.length >= settings.minCharacters);\n            }\n            return true;\n          },\n          firstLetter: function($item, letter) {\n            var\n              text,\n              firstLetter\n            ;\n            if(!$item || $item.length === 0 || typeof letter !== 'string') {\n              return false;\n            }\n            text        = module.get.choiceText($item, false);\n            letter      = letter.toLowerCase();\n            firstLetter = String(text).charAt(0).toLowerCase();\n            return (letter == firstLetter);\n          },\n          input: function() {\n            return ($input.length > 0);\n          },\n          items: function() {\n            return ($item.length > 0);\n          },\n          menu: function() {\n            return ($menu.length > 0);\n          },\n          message: function() {\n            return ($menu.children(selector.message).length !== 0);\n          },\n          label: function(value) {\n            var\n              escapedValue = module.escape.value(value),\n              $labels      = $module.find(selector.label)\n            ;\n            return ($labels.filter('[data-' + metadata.value + '=\"' + module.escape.string(escapedValue) +'\"]').length > 0);\n          },\n          maxSelections: function() {\n            return (settings.maxSelections && module.get.selectionCount() >= settings.maxSelections);\n          },\n          allResultsFiltered: function() {\n            var\n              $normalResults = $item.not(selector.addition)\n            ;\n            return ($normalResults.filter(selector.unselectable).length === $normalResults.length);\n          },\n          userSuggestion: function() {\n            return ($menu.children(selector.addition).length > 0);\n          },\n          query: function() {\n            return (module.get.query() !== '');\n          },\n          value: function(value) {\n            var\n              values   = module.get.values(),\n              hasValue = $.isArray(values)\n               ? values && ($.inArray(value, values) !== -1)\n               : (values == value)\n            ;\n            return (hasValue)\n              ? true\n              : false\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          bubbledLabelClick: function(event) {\n            return $(event.target).is('select, input') && $module.closest('label').length > 0;\n          },\n          bubbledIconClick: function(event) {\n            return $(event.target).closest($icon).length > 0;\n          },\n          alreadySetup: function() {\n            return ($module.is('select') && $module.parent(selector.dropdown).data(moduleNamespace) !== undefined && $module.prev().length === 0);\n          },\n          animating: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.transition && $subMenu.transition('is animating')\n              : $menu.transition    && $menu.transition('is animating')\n            ;\n          },\n          leftward: function($subMenu) {\n            var $selectedMenu = $subMenu || $menu;\n            return $selectedMenu.hasClass(className.leftward);\n          },\n          disabled: function() {\n            return $module.hasClass(className.disabled);\n          },\n          focused: function() {\n            return (document.activeElement === $module[0]);\n          },\n          focusedOnSearch: function() {\n            return (document.activeElement === $search[0]);\n          },\n          allFiltered: function() {\n            return( (module.is.multiple() || module.has.search()) && !(settings.hideAdditions == false && module.has.userSuggestion()) && !module.has.message() && module.has.allResultsFiltered() );\n          },\n          hidden: function($subMenu) {\n            return !module.is.visible($subMenu);\n          },\n          initialLoad: function() {\n            return initialLoad;\n          },\n          inObject: function(needle, object) {\n            var\n              found = false\n            ;\n            $.each(object, function(index, property) {\n              if(property == needle) {\n                found = true;\n                return true;\n              }\n            });\n            return found;\n          },\n          multiple: function() {\n            return $module.hasClass(className.multiple);\n          },\n          remote: function() {\n            return settings.apiSettings && module.can.useAPI();\n          },\n          single: function() {\n            return !module.is.multiple();\n          },\n          selectMutation: function(mutations) {\n            var\n              selectChanged = false\n            ;\n            $.each(mutations, function(index, mutation) {\n              if(mutation.target && $(mutation.target).is('select')) {\n                selectChanged = true;\n                return true;\n              }\n            });\n            return selectChanged;\n          },\n          search: function() {\n            return $module.hasClass(className.search);\n          },\n          searchSelection: function() {\n            return ( module.has.search() && $search.parent(selector.dropdown).length === 1 );\n          },\n          selection: function() {\n            return $module.hasClass(className.selection);\n          },\n          userValue: function(value) {\n            return ($.inArray(value, module.get.userValues()) !== -1);\n          },\n          upward: function($menu) {\n            var $element = $menu || $module;\n            return $element.hasClass(className.upward);\n          },\n          visible: function($subMenu) {\n            return ($subMenu)\n              ? $subMenu.hasClass(className.visible)\n              : $menu.hasClass(className.visible)\n            ;\n          },\n          verticallyScrollableContext: function() {\n            var\n              overflowY = ($context.get(0) !== window)\n                ? $context.css('overflow-y')\n                : false\n            ;\n            return (overflowY == 'auto' || overflowY == 'scroll');\n          },\n          horizontallyScrollableContext: function() {\n            var\n              overflowX = ($context.get(0) !== window)\n                ? $context.css('overflow-X')\n                : false\n            ;\n            return (overflowX == 'auto' || overflowX == 'scroll');\n          }\n        },\n\n        can: {\n          activate: function($item) {\n            if(settings.useLabels) {\n              return true;\n            }\n            if(!module.has.maxSelections()) {\n              return true;\n            }\n            if(module.has.maxSelections() && $item.hasClass(className.active)) {\n              return true;\n            }\n            return false;\n          },\n          openDownward: function($subMenu) {\n            var\n              $currentMenu    = $subMenu || $menu,\n              canOpenDownward = true,\n              onScreen        = {},\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollTop : $context.scrollTop(),\n                height    : $context.outerHeight()\n              },\n              menu : {\n                offset: $currentMenu.offset(),\n                height: $currentMenu.outerHeight()\n              }\n            };\n            if(module.is.verticallyScrollableContext()) {\n              calculations.menu.offset.top += calculations.context.scrollTop;\n            }\n            onScreen = {\n              above : (calculations.context.scrollTop) <= calculations.menu.offset.top - calculations.menu.height,\n              below : (calculations.context.scrollTop + calculations.context.height) >= calculations.menu.offset.top + calculations.menu.height\n            };\n            if(onScreen.below) {\n              module.verbose('Dropdown can fit in context downward', onScreen);\n              canOpenDownward = true;\n            }\n            else if(!onScreen.below && !onScreen.above) {\n              module.verbose('Dropdown cannot fit in either direction, favoring downward', onScreen);\n              canOpenDownward = true;\n            }\n            else {\n              module.verbose('Dropdown cannot fit below, opening upward', onScreen);\n              canOpenDownward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenDownward;\n          },\n          openRightward: function($subMenu) {\n            var\n              $currentMenu     = $subMenu || $menu,\n              canOpenRightward = true,\n              isOffscreenRight = false,\n              calculations\n            ;\n            $currentMenu\n              .addClass(className.loading)\n            ;\n            calculations = {\n              context: {\n                scrollLeft : $context.scrollLeft(),\n                width      : $context.outerWidth()\n              },\n              menu: {\n                offset : $currentMenu.offset(),\n                width  : $currentMenu.outerWidth()\n              }\n            };\n            if(module.is.horizontallyScrollableContext()) {\n              calculations.menu.offset.left += calculations.context.scrollLeft;\n            }\n            isOffscreenRight = (calculations.menu.offset.left + calculations.menu.width >= calculations.context.scrollLeft + calculations.context.width);\n            if(isOffscreenRight) {\n              module.verbose('Dropdown cannot fit in context rightward', isOffscreenRight);\n              canOpenRightward = false;\n            }\n            $currentMenu.removeClass(className.loading);\n            return canOpenRightward;\n          },\n          click: function() {\n            return (hasTouch || settings.on == 'click');\n          },\n          extendSelect: function() {\n            return settings.allowAdditions || settings.apiSettings;\n          },\n          show: function() {\n            return !module.is.disabled() && (module.has.items() || module.has.message());\n          },\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          }\n        },\n\n        animate: {\n          show: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  module.hideSubMenus();\n                  module.hideOthers();\n                  module.set.active();\n                },\n              transition\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            module.verbose('Doing menu show animation', $currentMenu);\n            module.set.direction($subMenu);\n            transition = module.get.transition($subMenu);\n            if( module.is.selection() ) {\n              module.set.scrollPosition(module.get.selectedItem(), true);\n            }\n            if( module.is.hidden($currentMenu) || module.is.animating($currentMenu) ) {\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('show');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' in',\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    duration   : settings.duration,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition, transition);\n              }\n            }\n          },\n          hide: function(callback, $subMenu) {\n            var\n              $currentMenu = $subMenu || $menu,\n              duration = ($subMenu)\n                ? (settings.duration * 0.9)\n                : settings.duration,\n              start = ($subMenu)\n                ? function() {}\n                : function() {\n                  if( module.can.click() ) {\n                    module.unbind.intent();\n                  }\n                  module.remove.active();\n                },\n              transition = module.get.transition($subMenu)\n            ;\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if( module.is.visible($currentMenu) || module.is.animating($currentMenu) ) {\n              module.verbose('Doing menu hide animation', $currentMenu);\n\n              if(transition == 'none') {\n                start();\n                $currentMenu.transition('hide');\n                callback.call(element);\n              }\n              else if($.fn.transition !== undefined && $module.transition('is supported')) {\n                $currentMenu\n                  .transition({\n                    animation  : transition + ' out',\n                    duration   : settings.duration,\n                    debug      : settings.debug,\n                    verbose    : settings.verbose,\n                    queue      : true,\n                    onStart    : start,\n                    onComplete : function() {\n                      callback.call(element);\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.transition);\n              }\n            }\n          }\n        },\n\n        hideAndClear: function() {\n          module.remove.searchTerm();\n          if( module.has.maxSelections() ) {\n            return;\n          }\n          if(module.has.search()) {\n            module.hide(function() {\n              module.remove.filteredItem();\n            });\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        delay: {\n          show: function() {\n            module.verbose('Delaying show event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.show, settings.delay.show);\n          },\n          hide: function() {\n            module.verbose('Delaying hide event to ensure user intent');\n            clearTimeout(module.timer);\n            module.timer = setTimeout(module.hide, settings.delay.hide);\n          }\n        },\n\n        escape: {\n          value: function(value) {\n            var\n              multipleValues = $.isArray(value),\n              stringValue    = (typeof value === 'string'),\n              isUnparsable   = (!stringValue && !multipleValues),\n              hasQuotes      = (stringValue && value.search(regExp.quote) !== -1),\n              values         = []\n            ;\n            if(isUnparsable || !hasQuotes) {\n              return value;\n            }\n            module.debug('Encoding quote values for use in select', value);\n            if(multipleValues) {\n              $.each(value, function(index, value){\n                values.push(value.replace(regExp.quote, '&quot;'));\n              });\n              return values;\n            }\n            return value.replace(regExp.quote, '&quot;');\n          },\n          string: function(text) {\n            text =  String(text);\n            return text.replace(regExp.escape, '\\\\$&');\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : $allModules\n  ;\n};\n\n$.fn.dropdown.settings = {\n\n  silent                 : false,\n  debug                  : false,\n  verbose                : false,\n  performance            : true,\n\n  on                     : 'click',    // what event should show menu action on item selection\n  action                 : 'activate', // action on item selection (nothing, activate, select, combo, hide, function(){})\n\n  values                 : false,      // specify values to use for dropdown\n\n  apiSettings            : false,\n  selectOnKeydown        : true,       // Whether selection should occur automatically when keyboard shortcuts used\n  minCharacters          : 0,          // Minimum characters required to trigger API call\n\n  filterRemoteData       : false,      // Whether API results should be filtered after being returned for query term\n  saveRemoteData         : true,       // Whether remote name/value pairs should be stored in sessionStorage to allow remote data to be restored on page refresh\n\n  throttle               : 200,        // How long to wait after last user input to search remotely\n\n  context                : window,     // Context to use when determining if on screen\n  direction              : 'auto',     // Whether dropdown should always open in one direction\n  keepOnScreen           : true,       // Whether dropdown should check whether it is on screen before showing\n\n  match                  : 'both',     // what to match against with search selection (both, text, or label)\n  fullTextSearch         : false,      // search anywhere in value (set to 'exact' to require exact matches)\n\n  placeholder            : 'auto',     // whether to convert blank <select> values to placeholder text\n  preserveHTML           : true,       // preserve html when selecting value\n  sortSelect             : false,      // sort selection on init\n\n  forceSelection         : true,       // force a choice on blur with search selection\n\n  allowAdditions         : false,      // whether multiple select should allow user added values\n  hideAdditions          : true,      // whether or not to hide special message prompting a user they can enter a value\n\n  maxSelections          : false,      // When set to a number limits the number of selections to this count\n  useLabels              : true,       // whether multiple select should filter currently active selections from choices\n  delimiter              : ',',        // when multiselect uses normal <input> the values will be delimited with this character\n\n  showOnFocus            : true,       // show menu on focus\n  allowReselection       : false,      // whether current value should trigger callbacks when reselected\n  allowTab               : true,       // add tabindex to element\n  allowCategorySelection : false,      // allow elements with sub-menus to be selected\n\n  fireOnInit             : false,      // Whether callbacks should fire when initializing dropdown values\n\n  transition             : 'auto',     // auto transition will slide down or up based on direction\n  duration               : 200,        // duration of transition\n\n  glyphWidth             : 1.037,      // widest glyph width in em (W is 1.037 em) used to calculate multiselect input width\n\n  // label settings on multi-select\n  label: {\n    transition : 'scale',\n    duration   : 200,\n    variation  : false\n  },\n\n  // delay before event\n  delay : {\n    hide   : 300,\n    show   : 200,\n    search : 20,\n    touch  : 50\n  },\n\n  /* Callbacks */\n  onChange      : function(value, text, $selected){},\n  onAdd         : function(value, text, $selected){},\n  onRemove      : function(value, text, $selected){},\n\n  onLabelSelect : function($selectedLabels){},\n  onLabelCreate : function(value, text) { return $(this); },\n  onLabelRemove : function(value) { return true; },\n  onNoResults   : function(searchTerm) { return true; },\n  onShow        : function(){},\n  onHide        : function(){},\n\n  /* Component */\n  name           : 'Dropdown',\n  namespace      : 'dropdown',\n\n  message: {\n    addResult     : 'Add <b>{term}</b>',\n    count         : '{count} selected',\n    maxSelections : 'Max {maxCount} selections',\n    noResults     : 'No results found.',\n    serverError   : 'There was an error contacting the server'\n  },\n\n  error : {\n    action          : 'You called a dropdown action that was not defined',\n    alreadySetup    : 'Once a select has been initialized behaviors must be called on the created ui dropdown',\n    labels          : 'Allowing user additions currently requires the use of labels.',\n    missingMultiple : '<select> requires multiple property to be set to correctly preserve multiple values',\n    method          : 'The method you called is not defined.',\n    noAPI           : 'The API module is required to load resources remotely',\n    noStorage       : 'Saving remote data requires session storage',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>'\n  },\n\n  regExp : {\n    escape   : /[-[\\]{}()*+?.,\\\\^$|#\\s]/g,\n    quote    : /\"/g\n  },\n\n  metadata : {\n    defaultText     : 'defaultText',\n    defaultValue    : 'defaultValue',\n    placeholderText : 'placeholder',\n    text            : 'text',\n    value           : 'value'\n  },\n\n  // property names for remote query\n  fields: {\n    remoteValues : 'results',  // grouping for api results\n    values       : 'values',   // grouping for all dropdown values\n    disabled     : 'disabled', // whether value should be disabled\n    name         : 'name',     // displayed dropdown text\n    value        : 'value',    // actual dropdown value\n    text         : 'text'      // displayed text when selected\n  },\n\n  keys : {\n    backspace  : 8,\n    delimiter  : 188, // comma\n    deleteKey  : 46,\n    enter      : 13,\n    escape     : 27,\n    pageUp     : 33,\n    pageDown   : 34,\n    leftArrow  : 37,\n    upArrow    : 38,\n    rightArrow : 39,\n    downArrow  : 40\n  },\n\n  selector : {\n    addition     : '.addition',\n    dropdown     : '.ui.dropdown',\n    hidden       : '.hidden',\n    icon         : '> .dropdown.icon',\n    input        : '> input[type=\"hidden\"], > select',\n    item         : '.item',\n    label        : '> .label',\n    remove       : '> .label > .delete.icon',\n    siblingLabel : '.label',\n    menu         : '.menu',\n    message      : '.message',\n    menuIcon     : '.dropdown.icon',\n    search       : 'input.search, .menu > .search > input, .menu input.search',\n    sizer        : '> input.sizer',\n    text         : '> .text:not(.icon)',\n    unselectable : '.disabled, .filtered'\n  },\n\n  className : {\n    active      : 'active',\n    addition    : 'addition',\n    animating   : 'animating',\n    disabled    : 'disabled',\n    empty       : 'empty',\n    dropdown    : 'ui dropdown',\n    filtered    : 'filtered',\n    hidden      : 'hidden transition',\n    item        : 'item',\n    label       : 'ui label',\n    loading     : 'loading',\n    menu        : 'menu',\n    message     : 'message',\n    multiple    : 'multiple',\n    placeholder : 'default',\n    sizer       : 'sizer',\n    search      : 'search',\n    selected    : 'selected',\n    selection   : 'selection',\n    upward      : 'upward',\n    leftward    : 'left',\n    visible     : 'visible'\n  }\n\n};\n\n/* Templates */\n$.fn.dropdown.settings.templates = {\n\n  // generates dropdown from select values\n  dropdown: function(select) {\n    var\n      placeholder = select.placeholder || false,\n      values      = select.values || {},\n      html        = ''\n    ;\n    html +=  '<i class=\"dropdown icon\"></i>';\n    if(select.placeholder) {\n      html += '<div class=\"default text\">' + placeholder + '</div>';\n    }\n    else {\n      html += '<div class=\"text\"></div>';\n    }\n    html += '<div class=\"menu\">';\n    $.each(select.values, function(index, option) {\n      html += (option.disabled)\n        ? '<div class=\"disabled item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n        : '<div class=\"item\" data-value=\"' + option.value + '\">' + option.name + '</div>'\n      ;\n    });\n    html += '</div>';\n    return html;\n  },\n\n  // generates just menu from select\n  menu: function(response, fields) {\n    var\n      values = response[fields.values] || {},\n      html   = ''\n    ;\n    $.each(values, function(index, option) {\n      var\n        maybeText = (option[fields.text])\n          ? 'data-text=\"' + option[fields.text] + '\"'\n          : '',\n        maybeDisabled = (option[fields.disabled])\n          ? 'disabled '\n          : ''\n      ;\n      html += '<div class=\"'+ maybeDisabled +'item\" data-value=\"' + option[fields.value] + '\"' + maybeText + '>'\n      html +=   option[fields.name];\n      html += '</div>';\n    });\n    return html;\n  },\n\n  // generates label for multiselect\n  label: function(value, text) {\n    return text + '<i class=\"delete icon\"></i>';\n  },\n\n\n  // generates messages like \"No results\"\n  message: function(message) {\n    return message;\n  },\n\n  // generates user addition to selection menu\n  addition: function(choice) {\n    return choice;\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/dropdown.less",
    "content": "/*!\n * # Semantic UI - Dropdown\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'dropdown';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Dropdown\n*******************************/\n\n.ui.dropdown {\n  cursor: pointer;\n  position: relative;\n  display: inline-block;\n  outline: none;\n  text-align: left;\n  transition: @transition;\n\n  -webkit-tap-highlight-color: rgba(0, 0, 0, 0);\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n      Menu\n---------------*/\n\n.ui.dropdown .menu {\n  cursor: auto;\n  position: absolute;\n  display: none;\n  outline: none;\n  top: 100%;\n  min-width: max-content;\n  transition: @menuTransition;\n\n  margin: @menuMargin;\n  padding: @menuPadding;\n  background: @menuBackground;\n\n  font-size: @relativeMedium;\n  text-shadow: none;\n  text-align: @menuTextAlign;\n\n  box-shadow: @menuBoxShadow;\n  border: @menuBorder;\n  border-radius: @menuBorderRadius;\n  transition: @menuTransition;\n  z-index: @menuZIndex;\n  will-change: transform, opacity;\n}\n\n.ui.dropdown .menu > * {\n  white-space: nowrap;\n}\n\n\n/*--------------\n  Hidden Input\n---------------*/\n\n.ui.dropdown > input:not(.search):first-child,\n.ui.dropdown > select {\n  display: none !important;\n}\n\n/*--------------\n Dropdown Icon\n---------------*/\n\n.ui.dropdown > .dropdown.icon {\n  position: relative;\n  width: auto;\n  font-size: @dropdownIconSize;\n  margin: @dropdownIconMargin;\n}\n.ui.dropdown .menu > .item .dropdown.icon {\n  width: auto;\n  float: @itemDropdownIconFloat;\n  margin: @itemDropdownIconMargin;\n}\n.ui.dropdown .menu > .item .dropdown.icon + .text {\n  margin-right: @itemDropdownIconDistance;\n}\n\n\n/*--------------\n      Text\n---------------*/\n\n.ui.dropdown > .text {\n  display: inline-block;\n  transition: @textTransition;\n}\n\n/*--------------\n    Menu Item\n---------------*/\n\n.ui.dropdown .menu > .item {\n  position: relative;\n  cursor: pointer;\n  display: block;\n  border: @itemBorder;\n  height: @itemHeight;\n  text-align: @itemTextAlign;\n\n  border-top: @itemDivider;\n  line-height: @itemLineHeight;\n  font-size: @itemFontSize;\n  color: @itemColor;\n\n  padding: @itemPadding !important;\n  font-size: @itemFontSize;\n  text-transform: @itemTextTransform;\n  font-weight: @itemFontWeight;\n  box-shadow: @itemBoxShadow;\n  -webkit-touch-callout: none;\n}\n.ui.dropdown .menu > .item:first-child {\n  border-top-width: 0px;\n}\n\n/*--------------\n  Floated Content\n---------------*/\n\n.ui.dropdown > .text > [class*=\"right floated\"],\n.ui.dropdown .menu .item > [class*=\"right floated\"] {\n  float: right !important;\n  margin-right: 0em !important;\n  margin-left: @floatedDistance !important;\n}\n.ui.dropdown > .text > [class*=\"left floated\"],\n.ui.dropdown .menu .item > [class*=\"left floated\"] {\n  float: left !important;\n  margin-left: 0em !important;\n  margin-right: @floatedDistance !important;\n}\n\n.ui.dropdown .menu .item > .icon.floated,\n.ui.dropdown .menu .item > .flag.floated,\n.ui.dropdown .menu .item > .image.floated,\n.ui.dropdown .menu .item > img.floated {\n  margin-top: @itemLineHeightOffset;\n}\n\n\n/*--------------\n  Menu Divider\n---------------*/\n\n.ui.dropdown .menu > .header {\n  margin: @menuHeaderMargin;\n  padding: @menuHeaderPadding;\n  color: @menuHeaderColor;\n  font-size: @menuHeaderFontSize;\n  font-weight: @menuHeaderFontWeight;\n  text-transform: @menuHeaderTextTransform;\n}\n\n.ui.dropdown .menu > .divider {\n  border-top: @menuDividerBorder;\n  height: 0em;\n  margin: @menuDividerMargin;\n}\n\n.ui.dropdown .menu > .input {\n  width: auto;\n  display: flex;\n  margin: @menuInputMargin;\n  min-width: @menuInputMinWidth;\n}\n.ui.dropdown .menu > .header + .input {\n  margin-top: 0em;\n}\n.ui.dropdown .menu > .input:not(.transparent) input {\n  padding: @menuInputPadding;\n}\n.ui.dropdown .menu > .input:not(.transparent) .button,\n.ui.dropdown .menu > .input:not(.transparent) .icon,\n.ui.dropdown .menu > .input:not(.transparent) .label {\n  padding-top: @menuInputVerticalPadding;\n  padding-bottom: @menuInputVerticalPadding;\n}\n\n/*-----------------\n  Item Description\n-------------------*/\n\n.ui.dropdown > .text > .description,\n.ui.dropdown .menu > .item > .description {\n  float: @itemDescriptionFloat;\n  margin: @itemDescriptionMargin;\n  color: @itemDescriptionColor;\n}\n\n/*-----------------\n       Message\n-------------------*/\n\n.ui.dropdown .menu > .message {\n  padding: @messagePadding;\n  font-weight: @messageFontWeight;\n}\n.ui.dropdown .menu > .message:not(.ui) {\n  color: @messageColor;\n}\n\n/*--------------\n    Sub Menu\n---------------*/\n\n.ui.dropdown .menu .menu {\n  top: @subMenuTop !important;\n  left: @subMenuLeft;\n  right: @subMenuRight;\n  margin: @subMenuMargin !important;\n  border-radius: @subMenuBorderRadius !important;\n  z-index: @subMenuZIndex !important;\n}\n\n/* Hide Arrow */\n.ui.dropdown .menu .menu:after {\n  display: none;\n}\n\n/*--------------\n   Sub Elements\n---------------*/\n\n/* Icons / Flags / Labels / Image */\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image {\n  margin-top: @textLineHeightOffset;\n}\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img  {\n  margin-top: @itemLineHeightOffset;\n}\n\n.ui.dropdown > .text > .icon,\n.ui.dropdown > .text > .label,\n.ui.dropdown > .text > .flag,\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .icon,\n.ui.dropdown .menu > .item > .label,\n.ui.dropdown .menu > .item > .flag,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img  {\n  margin-left: 0em;\n  float: @itemElementFloat;\n  margin-right: @itemElementDistance;\n}\n\n/*--------------\n     Image\n---------------*/\n\n.ui.dropdown > .text > img,\n.ui.dropdown > .text > .image,\n.ui.dropdown .menu > .item > .image,\n.ui.dropdown .menu > .item > img {\n  display: inline-block;\n  vertical-align: top;\n  width: auto;\n  margin-top: @menuImageVerticalMargin;\n  margin-bottom: @menuImageVerticalMargin;\n  max-height: @menuImageMaxHeight;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n\n/*--------------\n      Menu\n---------------*/\n\n/* Remove Menu Item Divider */\n.ui.dropdown .ui.menu > .item:before,\n.ui.menu .ui.dropdown .menu > .item:before {\n  display: none;\n}\n\n/* Prevent Menu Item Border */\n.ui.menu .ui.dropdown .menu .active.item {\n  border-left: none;\n}\n\n/* Automatically float dropdown menu right on last menu item */\n.ui.menu .right.menu .dropdown:last-child .menu,\n.ui.menu .right.dropdown.item .menu,\n.ui.buttons > .ui.dropdown:last-child .menu {\n  left: auto;\n  right: 0em;\n}\n\n/*--------------\n      Label\n---------------*/\n\n/* Dropdown Menu */\n.ui.label.dropdown .menu {\n  min-width: 100%;\n}\n\n/*--------------\n     Button\n---------------*/\n\n/* No Margin On Icon Button */\n.ui.dropdown.icon.button > .dropdown.icon {\n  margin: 0em;\n}\n.ui.button.dropdown .menu {\n  min-width: 100%;\n}\n\n\n\n/*******************************\n              Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n/* Displays like a select box */\n.ui.selection.dropdown {\n  cursor: pointer;\n  word-wrap: break-word;\n  line-height: 1em;\n  white-space: normal;\n  outline: 0;\n  transform: rotateZ(0deg);\n\n  min-width: @selectionMinWidth;\n  min-height: @selectionMinHeight;\n\n  background: @selectionBackground;\n  display: @selectionDisplay;\n  padding: @selectionPadding;\n  color: @selectionTextColor;\n  box-shadow: @selectionBoxShadow;\n  border: @selectionBorder;\n  border-radius: @selectionBorderRadius;\n  transition: @selectionTransition;\n}\n.ui.selection.dropdown.visible,\n.ui.selection.dropdown.active {\n  z-index: @selectionZIndex;\n}\n\nselect.ui.dropdown {\n  height: @selectHeight;\n  padding: @selectPadding;\n  border: @selectBorder;\n  visibility: @selectVisibility;\n}\n.ui.selection.dropdown > .search.icon,\n.ui.selection.dropdown > .delete.icon,\n.ui.selection.dropdown > .dropdown.icon {\n  cursor: pointer;\n  position: absolute;\n  width: auto;\n  height: auto;\n  line-height: @searchSelectionLineHeight;\n  top: @selectionVerticalPadding;\n  right: @selectionHorizontalPadding;\n  z-index: @selectionIconZIndex;\n  margin: @selectionIconMargin;\n  padding: @selectionIconPadding;\n  opacity: @selectionIconOpacity;\n  transition: @selectionIconTransition;\n}\n\n/* Compact */\n.ui.compact.selection.dropdown {\n  min-width:  0px;\n}\n\n/*  Selection Menu */\n.ui.selection.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  border-top-width: 0px !important;\n  width: auto;\n  outline: none;\n  margin: 0px -@menuBorderWidth;\n  min-width: @menuMinWidth;\n  width: @menuMinWidth;\n\n  border-radius: @selectionMenuBorderRadius;\n  box-shadow: @selectionMenuBoxShadow;\n  transition: @selectionMenuTransition;\n}\n.ui.selection.dropdown .menu:after,\n.ui.selection.dropdown .menu:before {\n  display: none;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.selection.dropdown .menu > .message {\n  padding: @selectionMessagePadding;\n}\n\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.selection.dropdown .menu {\n    max-height: @selectionMobileMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @tabletBreakpoint) {\n  .ui.selection.dropdown .menu {\n    max-height: @selectionTabletMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @computerBreakpoint) {\n  .ui.selection.dropdown .menu {\n    max-height: @selectionComputerMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui.selection.dropdown .menu {\n    max-height: @selectionWidescreenMaxMenuHeight;\n  }\n}\n\n/* Menu Item */\n.ui.selection.dropdown .menu > .item {\n  border-top: @selectionItemDivider;\n  padding: @selectionItemPadding !important;\n  white-space: normal;\n  word-wrap: normal;\n}\n\n/* User Item */\n.ui.selection.dropdown .menu > .hidden.addition.item {\n  display: none;\n}\n\n/* Hover */\n.ui.selection.dropdown:hover {\n  border-color: @selectionHoverBorderColor;\n  box-shadow: @selectionHoverBoxShadow;\n}\n\n/* Active */\n.ui.selection.active.dropdown {\n  border-color: @selectionVisibleBorderColor;\n  box-shadow: @selectionVisibleBoxShadow;\n}\n.ui.selection.active.dropdown .menu {\n  border-color: @selectionVisibleBorderColor;\n  box-shadow: @selectionVisibleMenuBoxShadow;\n}\n\n/* Focus */\n.ui.selection.dropdown:focus {\n  border-color: @selectionFocusBorderColor;\n  box-shadow: @selectionFocusBoxShadow;\n}\n.ui.selection.dropdown:focus .menu {\n  border-color: @selectionFocusBorderColor;\n  box-shadow: @selectionFocusMenuBoxShadow;\n}\n\n/* Visible */\n.ui.selection.visible.dropdown > .text:not(.default) {\n  font-weight: @selectionVisibleTextFontWeight;\n  color: @selectionVisibleTextColor;\n}\n\n/* Visible Hover */\n.ui.selection.active.dropdown:hover {\n  border-color: @selectionActiveHoverBorderColor;\n  box-shadow: @selectionActiveHoverBoxShadow;\n}\n.ui.selection.active.dropdown:hover .menu {\n  border-color: @selectionActiveHoverBorderColor;\n  box-shadow: @selectionActiveHoverMenuBoxShadow;\n}\n\n/* Dropdown Icon */\n.ui.active.selection.dropdown > .dropdown.icon,\n.ui.visible.selection.dropdown > .dropdown.icon {\n  opacity: @selectionVisibleIconOpacity;\n  z-index: 3;\n}\n\n/* Connecting Border */\n.ui.active.selection.dropdown {\n  border-bottom-left-radius: @selectionVisibleConnectingBorder !important;\n  border-bottom-right-radius: @selectionVisibleConnectingBorder !important;\n}\n\n/* Empty Connecting Border */\n.ui.active.empty.selection.dropdown {\n  border-radius: @selectionBorderRadius !important;\n  box-shadow: @selectionBoxShadow !important;\n}\n.ui.active.empty.selection.dropdown .menu {\n  border: none !important;\n  box-shadow: none !important;\n}\n\n/*--------------\n   Searchable\n---------------*/\n\n/* Search Selection */\n.ui.search.dropdown {\n  min-width: @searchMinWidth;\n}\n\n/* Search Dropdown */\n.ui.search.dropdown > input.search {\n  background: none transparent !important;\n  border: none !important;\n  box-shadow: none !important;\n  cursor: text;\n  top: 0em;\n  left: @textCursorSpacing;\n  width: 100%;\n  outline: none;\n  -webkit-tap-highlight-color: rgba(255, 255, 255, 0);\n  padding: inherit;\n}\n\n/* Text Layering */\n.ui.search.dropdown > input.search {\n  position: absolute;\n  z-index: 2;\n}\n.ui.search.dropdown > .text {\n  cursor: text;\n  position: relative;\n  left: @textCursorSpacing;\n  z-index: 3;\n}\n\n/* Search Selection */\n.ui.search.selection.dropdown > input.search {\n  line-height: @searchSelectionLineHeight;\n  padding: @searchSelectionInputPadding;\n}\n\n/* Used to size multi select input to character width */\n.ui.search.selection.dropdown > span.sizer {\n  line-height: @searchSelectionLineHeight;\n  padding: @searchSelectionInputPadding;\n  display: none;\n  white-space: pre;\n}\n\n/* Active/Visible Search */\n.ui.search.dropdown.active > input.search,\n.ui.search.dropdown.visible > input.search {\n  cursor: auto;\n}\n.ui.search.dropdown.active > .text,\n.ui.search.dropdown.visible > .text {\n  pointer-events: none;\n}\n\n/* Filtered Text */\n.ui.active.search.dropdown input.search:focus + .text .icon,\n.ui.active.search.dropdown input.search:focus + .text .flag {\n  opacity: @selectionTextUnderlayIconOpacity;\n}\n.ui.active.search.dropdown input.search:focus + .text {\n  color: @selectionTextUnderlayColor !important;\n}\n\n/* Search Menu */\n.ui.search.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n}\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.search.dropdown .menu {\n    max-height: @searchMobileMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @tabletBreakpoint) {\n  .ui.search.dropdown .menu {\n    max-height: @searchTabletMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @computerBreakpoint) {\n  .ui.search.dropdown .menu {\n    max-height: @searchComputerMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui.search.dropdown .menu {\n    max-height: @searchWidescreenMaxMenuHeight;\n  }\n}\n\n/*--------------\n    Multiple\n---------------*/\n\n/* Multiple Selection */\n.ui.multiple.dropdown {\n  padding: @multipleSelectionPadding;\n}\n.ui.multiple.dropdown .menu {\n  cursor: auto;\n}\n\n/* Multiple Search Selection */\n.ui.multiple.search.dropdown,\n.ui.multiple.search.dropdown > input.search {\n  cursor: text;\n}\n\n/* Selection Label */\n.ui.multiple.dropdown > .label {\n  user-select: none;\n  display: inline-block;\n  vertical-align: top;\n  white-space: normal;\n  font-size: @labelSize;\n  padding: @labelPadding;\n  margin: @labelMargin;\n  box-shadow: @labelBoxShadow;\n}\n\n/* Dropdown Icon */\n.ui.multiple.dropdown .dropdown.icon {\n  margin: @multipleSelectionDropdownIconMargin;\n  padding: @multipleSelectionDropdownIconPadding;\n}\n\n/* Text */\n.ui.multiple.dropdown > .text {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: @multipleSelectionChildMargin;\n  line-height: @multipleSelectionChildLineHeight;\n}\n.ui.multiple.dropdown > .label ~ input.search {\n  margin-left: @multipleSelectionSearchAfterLabelDistance !important;\n}\n.ui.multiple.dropdown > .label ~ .text {\n  display: none;\n}\n\n/*-----------------\n  Multiple Search\n-----------------*/\n\n/* Prompt Text */\n.ui.multiple.search.dropdown > .text {\n  display: inline-block;\n  position: absolute;\n  top: 0;\n  left: 0;\n  padding: inherit;\n  margin: @multipleSelectionChildMargin;\n  line-height: @multipleSelectionChildLineHeight;\n}\n\n.ui.multiple.search.dropdown > .label ~ .text {\n  display: none;\n}\n\n/* Search */\n.ui.multiple.search.dropdown > input.search {\n  position: static;\n  padding: 0;\n  max-width: 100%;\n  margin: @multipleSelectionChildMargin;\n  width: @multipleSelectionSearchStartWidth;\n  line-height: @multipleSelectionChildLineHeight;\n}\n\n\n/*--------------\n     Inline\n---------------*/\n\n.ui.inline.dropdown {\n  cursor: pointer;\n  display: inline-block;\n  color: @inlineTextColor;\n}\n.ui.inline.dropdown .dropdown.icon {\n  margin: @inlineIconMargin;\n  vertical-align: baseline;\n}\n.ui.inline.dropdown > .text {\n  font-weight: @inlineTextFontWeight;\n}\n.ui.inline.dropdown .menu {\n  cursor: auto;\n  margin-top: @inlineMenuDistance;\n  border-radius: @inlineMenuBorderRadius;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n\n/*--------------------\n        Active\n----------------------*/\n\n/* Menu Item Active */\n.ui.dropdown .menu .active.item {\n  background: @activeItemBackground;\n  font-weight: @activeItemFontWeight;\n  color: @activeItemColor;\n  box-shadow: @activeItemBoxShadow;\n  z-index: @activeItemZIndex;\n}\n\n\n/*--------------------\n        Hover\n----------------------*/\n\n/* Menu Item Hover */\n.ui.dropdown .menu > .item:hover {\n  background: @hoveredItemBackground;\n  color: @hoveredItemColor;\n  z-index: @hoveredZIndex;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.dropdown > i.icon {\n  height: @relative14px !important;\n}\n.ui.loading.selection.dropdown > i.icon {\n  padding: @relative21px @relative18px !important;\n}\n.ui.loading.dropdown > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @loaderFillColor;\n}\n.ui.loading.dropdown > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n  box-shadow: 0px 0px 0px 1px transparent;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: dropdown-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor transparent transparent;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n}\n\n/* Coupling */\n.ui.loading.dropdown.button > i.icon:before,\n.ui.loading.dropdown.button > i.icon:after {\n  display: none;\n}\n\n@keyframes dropdown-spin {\n  from {\n    transform: rotate(0deg);\n  }\n  to {\n    transform: rotate(360deg);\n  }\n}\n\n\n/*--------------------\n     Default Text\n----------------------*/\n\n.ui.dropdown:not(.button) > .default.text,\n.ui.default.dropdown:not(.button) > .text {\n  color: @defaultTextColor;\n}\n.ui.dropdown:not(.button) > input:focus ~ .default.text,\n.ui.default.dropdown:not(.button) > input:focus ~ .text {\n  color: @defaultTextFocusColor;\n}\n/*--------------------\n        Loading\n----------------------*/\n\n.ui.loading.dropdown > .text {\n  transition: none;\n}\n\n/* Used To Check Position */\n.ui.dropdown .loading.menu {\n  display: block;\n  visibility: hidden;\n  z-index: @loadingZIndex;\n}\n.ui.dropdown > .loading.menu {\n  left: 0px !important;\n  right: auto !important;\n}\n.ui.dropdown > .menu .loading.menu {\n  left: 100% !important;\n  right: auto !important;\n}\n\n/*--------------------\n    Keyboard Select\n----------------------*/\n\n/* Selected Item */\n.ui.dropdown.selected,\n.ui.dropdown .menu .selected.item {\n  background: @selectedBackground;\n  color: @selectedColor;\n}\n\n\n/*--------------------\n    Search Filtered\n----------------------*/\n\n/* Filtered Item */\n.ui.dropdown > .filtered.text {\n  visibility: hidden;\n}\n.ui.dropdown .filtered.item {\n  display: none !important;\n}\n\n\n/*--------------------\n        Error\n----------------------*/\n\n.ui.dropdown.error,\n.ui.dropdown.error > .text,\n.ui.dropdown.error > .default.text {\n  color: @errorTextColor;\n}\n\n.ui.selection.dropdown.error {\n  background: @errorBackgroundColor;\n  border-color: @errorBorderColor;\n}\n.ui.selection.dropdown.error:hover {\n  border-color: @errorBorderColor;\n}\n\n.ui.dropdown.error > .menu,\n.ui.dropdown.error > .menu .menu {\n  border-color: @errorBorderColor;\n}\n.ui.dropdown.error > .menu > .item {\n  color: @errorItemTextColor;\n}\n.ui.multiple.selection.error.dropdown > .label {\n  border-color: @errorBorderColor;\n}\n\n/* Item Hover */\n.ui.dropdown.error > .menu > .item:hover {\n  background-color: @errorItemHoverBackground;\n}\n\n/* Item Active */\n.ui.dropdown.error > .menu .active.item {\n  background-color: @errorItemActiveBackground;\n}\n\n\n\n/*--------------------\n        Disabled\n----------------------*/\n\n/* Disabled */\n.ui.disabled.dropdown,\n.ui.dropdown .menu > .disabled.item {\n  cursor: default;\n  pointer-events: none;\n  opacity: @disabledOpacity;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Direction\n---------------*/\n\n/* Flyout Direction */\n.ui.dropdown .menu {\n  left: 0px;\n}\n\n\n/* Default Side (Right) */\n.ui.dropdown .right.menu > .menu,\n.ui.dropdown .menu .right.menu {\n  left: 100% !important;\n  right: auto !important;\n  border-radius: @subMenuBorderRadius !important;\n}\n\n/* Leftward Opening Menu */\n.ui.dropdown > .left.menu {\n  left: auto !important;\n  right: 0px !important;\n}\n\n.ui.dropdown > .left.menu .menu,\n.ui.dropdown .menu .left.menu {\n  left: auto;\n  right: 100%;\n  margin: @leftSubMenuMargin !important;\n  border-radius: @leftSubMenuBorderRadius !important;\n}\n\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: @leftMenuDropdownIconFloat;\n  margin: @leftMenuDropdownIconMargin;\n}\n.ui.dropdown .item .left.dropdown.icon,\n.ui.dropdown .left.menu .item .dropdown.icon {\n  width: auto;\n  float: @leftMenuDropdownIconFloat;\n  margin: @leftMenuDropdownIconMargin;\n}\n.ui.dropdown .item .left.dropdown.icon + .text,\n.ui.dropdown .left.menu .item .dropdown.icon + .text {\n  margin-left: @itemDropdownIconDistance;\n  margin-right: 0em;\n}\n\n\n/*--------------\n     Upward\n---------------*/\n\n/* Upward Main Menu */\n.ui.upward.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  box-shadow: @upwardMenuBoxShadow;\n  border-radius: @upwardMenuBorderRadius;\n}\n\n/* Upward Sub Menu */\n.ui.dropdown .upward.menu {\n  top: auto !important;\n  bottom: 0 !important;\n}\n\n/* Active Upward */\n.ui.simple.upward.active.dropdown,\n.ui.simple.upward.dropdown:hover {\n  border-radius: @borderRadius @borderRadius 0em 0em !important;\n}\n.ui.upward.dropdown.button:not(.pointing):not(.floating).active {\n  border-radius: @borderRadius @borderRadius 0em 0em;\n}\n\n/* Selection */\n.ui.upward.selection.dropdown .menu {\n  border-top-width: @menuBorderWidth !important;\n  border-bottom-width: 0px !important;\n  box-shadow: @upwardSelectionMenuBoxShadow;\n}\n.ui.upward.selection.dropdown:hover {\n  box-shadow: @upwardSelectionHoverBoxShadow;\n}\n\n/* Active Upward */\n.ui.active.upward.selection.dropdown {\n  border-radius: @upwardSelectionVisibleBorderRadius !important;\n}\n\n/* Visible Upward */\n.ui.upward.selection.dropdown.visible {\n  box-shadow: @upwardSelectionVisibleBoxShadow;\n  border-radius: @upwardSelectionVisibleBorderRadius !important;\n}\n\n/* Visible Hover Upward */\n.ui.upward.active.selection.dropdown:hover {\n  box-shadow: @upwardSelectionActiveHoverBoxShadow;\n}\n.ui.upward.active.selection.dropdown:hover .menu {\n  box-shadow: @upwardSelectionActiveHoverMenuBoxShadow;\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/*  Selection Menu */\n.ui.scrolling.dropdown .menu,\n.ui.dropdown .scrolling.menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n}\n\n.ui.scrolling.dropdown .menu {\n  overflow-x: hidden;\n  overflow-y: auto;\n  backface-visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n  min-width: 100% !important;\n  width: auto !important;\n}\n\n.ui.dropdown .scrolling.menu {\n  position: static;\n  overflow-y: auto;\n  border: none;\n  box-shadow: none !important;\n  border-radius: 0 !important;\n  margin: 0 !important;\n  min-width: 100% !important;\n  width: auto !important;\n  border-top: @menuBorder;\n}\n.ui.scrolling.dropdown .menu .item.item.item,\n.ui.dropdown .scrolling.menu > .item.item.item {\n  border-top: @scrollingMenuItemBorder;\n}\n.ui.scrolling.dropdown .menu .item:first-child,\n.ui.dropdown .scrolling.menu .item:first-child {\n  border-top: none;\n}\n.ui.dropdown > .animating.menu .scrolling.menu,\n.ui.dropdown > .visible.menu .scrolling.menu {\n  display: block;\n}\n\n/* Scrollbar in IE */\n@media all and (-ms-high-contrast:none) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    min-width: ~\"calc(100% - \"@scrollbarWidth~\")\";\n  }\n}\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: @scrollingMobileMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @tabletBreakpoint) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: @scrollingTabletMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @computerBreakpoint) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: @scrollingComputerMaxMenuHeight;\n  }\n}\n@media only screen and (min-width: @widescreenMonitorBreakpoint) {\n  .ui.scrolling.dropdown .menu,\n  .ui.dropdown .scrolling.menu {\n    max-height: @scrollingWidescreenMaxMenuHeight;\n  }\n}\n\n/*--------------\n     Simple\n---------------*/\n\n/* Displays without javascript */\n\n.ui.simple.dropdown .menu:before,\n.ui.simple.dropdown .menu:after {\n  display: none;\n}\n.ui.simple.dropdown .menu {\n  position: absolute;\n  display: block;\n  overflow: hidden;\n  top: -9999px !important;\n  opacity: 0;\n  width: 0;\n  height: 0;\n  transition: @simpleTransition;\n}\n\n.ui.simple.active.dropdown,\n.ui.simple.dropdown:hover {\n  border-bottom-left-radius: 0em !important;\n  border-bottom-right-radius: 0em !important;\n}\n\n.ui.simple.active.dropdown > .menu,\n.ui.simple.dropdown:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 100% !important;\n  opacity: 1;\n}\n.ui.simple.dropdown > .menu > .item:active > .menu,\n.ui.simple.dropdown:hover > .menu > .item:hover > .menu {\n  overflow: visible;\n  width: auto;\n  height: auto;\n  top: 0% !important;\n  left: 100% !important;\n  opacity: 1;\n}\n.ui.simple.disabled.dropdown:hover .menu {\n  display: none;\n  height: 0px;\n  width: 0px;\n  overflow: hidden;\n}\n\n/* Visible */\n.ui.simple.visible.dropdown > .menu {\n  display: block;\n}\n\n/*--------------\n      Fluid\n---------------*/\n\n.ui.fluid.dropdown {\n  display: block;\n  width: 100%;\n  min-width: 0em;\n}\n.ui.fluid.dropdown > .dropdown.icon {\n  float: right;\n}\n\n\n/*--------------\n    Floating\n---------------*/\n\n.ui.floating.dropdown .menu {\n  left: 0;\n  right: auto;\n  box-shadow: @floatingMenuBoxShadow !important;\n  border-radius: @floatingMenuBorderRadius !important;\n}\n.ui.floating.dropdown > .menu {\n  margin-top: @floatingMenuDistance !important;\n  border-radius: @floatingMenuBorderRadius !important;\n}\n\n/*--------------\n     Pointing\n---------------*/\n\n.ui.pointing.dropdown > .menu {\n  top: 100%;\n  margin-top: @pointingMenuDistance;\n  border-radius: @pointingMenuBorderRadius;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  display: block;\n  position: absolute;\n  pointer-events: none;\n  content: '';\n  visibility: visible;\n  transform: rotate(45deg);\n\n  width: @pointingArrowSize;\n  height: @pointingArrowSize;\n  box-shadow: @pointingArrowBoxShadow;\n  background: @pointingArrowBackground;\n  z-index: @pointingArrowZIndex;\n}\n\n.ui.pointing.dropdown > .menu:after {\n  top: @pointingArrowOffset;\n  left: 50%;\n  margin: 0em 0em 0em @pointingArrowOffset;\n}\n\n/* Top Left Pointing */\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  left: 0%;\n  right: auto;\n  margin: @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.top.left.pointing.dropdown > .menu:after {\n  top: @pointingArrowOffset;\n  left: @pointingArrowDistanceFromEdge;\n  right: auto;\n  margin: 0em;\n  transform: rotate(45deg);\n}\n/* Top Right Pointing */\n.ui.top.right.pointing.dropdown > .menu {\n  top: 100%;\n  bottom: auto;\n  right: 0%;\n  left: auto;\n  margin: @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.top.pointing.dropdown > .left.menu:after,\n.ui.top.right.pointing.dropdown > .menu:after {\n  top: @pointingArrowOffset;\n  left: auto !important;\n  right: @pointingArrowDistanceFromEdge !important;\n  margin: 0em;\n  transform: rotate(45deg);\n}\n\n/* Left Pointing */\n.ui.left.pointing.dropdown > .menu {\n  top: 0%;\n  left: 100%;\n  right: auto;\n  margin: 0em 0em 0em @pointingArrowDistanceFromEdge;\n}\n.ui.left.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: @pointingArrowOffset;\n  margin: 0em 0em 0em 0em;\n  transform: rotate(-45deg);\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu {\n  left: auto !important;\n  right: 100% !important;\n  margin: 0em @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.left:not(.top):not(.bottom).pointing.dropdown > .left.menu:after {\n  top: 1em;\n  left: auto;\n  right: @pointingArrowOffset;\n  margin: 0em 0em 0em 0em;\n  transform: rotate(135deg);\n}\n\n\n/* Right Pointing */\n.ui.right.pointing.dropdown > .menu {\n  top: 0%;\n  left: auto;\n  right: 100%;\n  margin: 0em @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.right.pointing.dropdown > .menu:after {\n  top: 1em;\n  left: auto;\n  right: @pointingArrowOffset;\n  margin: 0em 0em 0em 0em;\n  transform: rotate(135deg);\n}\n\n/* Bottom Pointing */\n.ui.bottom.pointing.dropdown > .menu {\n  top: auto;\n  bottom: 100%;\n  left: 0%;\n  right: auto;\n  margin: 0em 0em @pointingArrowDistanceFromEdge ;\n}\n.ui.bottom.pointing.dropdown > .menu:after {\n  top: auto;\n  bottom: @pointingArrowOffset;\n  right: auto;\n  margin: 0em;\n  transform: rotate(-135deg);\n}\n/* Reverse Sub-Menu Direction */\n.ui.bottom.pointing.dropdown > .menu .menu {\n  top: auto !important;\n  bottom: 0px !important;\n}\n\n/* Bottom Left */\n.ui.bottom.left.pointing.dropdown > .menu {\n  left: 0%;\n  right: auto;\n}\n.ui.bottom.left.pointing.dropdown > .menu:after {\n  left: @pointingArrowDistanceFromEdge;\n  right: auto;\n}\n\n/* Bottom Right */\n.ui.bottom.right.pointing.dropdown > .menu {\n  right: 0%;\n  left: auto;\n}\n.ui.bottom.right.pointing.dropdown > .menu:after {\n  left: auto;\n  right: @pointingArrowDistanceFromEdge;\n}\n\n/* Upward pointing */\n.ui.pointing.upward.dropdown .menu,\n.ui.top.pointing.upward.dropdown .menu {\n  top: auto !important;\n  bottom: 100% !important;\n  margin: 0em 0em @pointingMenuDistance;\n  border-radius: @pointingUpwardMenuBorderRadius;\n}\n.ui.pointing.upward.dropdown .menu:after,\n.ui.top.pointing.upward.dropdown .menu:after {\n  top: 100% !important;\n  bottom: auto !important;\n  box-shadow: @pointingUpwardArrowBoxShadow;\n  margin: @pointingArrowOffset 0em 0em;\n}\n\n/* Right Pointing Upward */\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em @pointingArrowDistanceFromEdge 0em 0em;\n}\n.ui.right.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em @pointingArrowDistanceFromEdge 0em;\n  box-shadow: @pointingArrowBoxShadow;\n}\n\n\n/* Left Pointing Upward */\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em 0em @pointingArrowDistanceFromEdge;\n}\n.ui.left.pointing.upward.dropdown:not(.top):not(.bottom) .menu:after {\n  top: auto !important;\n  bottom: 0 !important;\n  margin: 0em 0em @pointingArrowDistanceFromEdge 0em;\n  box-shadow: @pointingArrowBoxShadow;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/embed.js",
    "content": "/*!\n * # Semantic UI - Embed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.embed = function(parameters) {\n\n  var\n    $allModules     = $(this),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.embed.settings, parameters)\n          : $.extend({}, $.fn.embed.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        sources         = settings.sources,\n        error           = settings.error,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        templates       = settings.templates,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $window         = $(window),\n        $module         = $(this),\n        $placeholder    = $module.find(selector.placeholder),\n        $icon           = $module.find(selector.icon),\n        $embed          = $module.find(selector.embed),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing embed');\n          module.determine.autoplay();\n          module.create();\n          module.bind.events();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance of embed');\n          module.reset();\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $placeholder = $module.find(selector.placeholder);\n          $icon        = $module.find(selector.icon);\n          $embed       = $module.find(selector.embed);\n        },\n\n        bind: {\n          events: function() {\n            if( module.has.placeholder() ) {\n              module.debug('Adding placeholder events');\n              $module\n                .on('click' + eventNamespace, selector.placeholder, module.createAndShow)\n                .on('click' + eventNamespace, selector.icon, module.createAndShow)\n              ;\n            }\n          }\n        },\n\n        create: function() {\n          var\n            placeholder = module.get.placeholder()\n          ;\n          if(placeholder) {\n            module.createPlaceholder();\n          }\n          else {\n            module.createAndShow();\n          }\n        },\n\n        createPlaceholder: function(placeholder) {\n          var\n            icon  = module.get.icon(),\n            url   = module.get.url(),\n            embed = module.generate.embed(url)\n          ;\n          placeholder = placeholder || module.get.placeholder();\n          $module.html( templates.placeholder(placeholder, icon) );\n          module.debug('Creating placeholder for embed', placeholder, icon);\n        },\n\n        createEmbed: function(url) {\n          module.refresh();\n          url = url || module.get.url();\n          $embed = $('<div/>')\n            .addClass(className.embed)\n            .html( module.generate.embed(url) )\n            .appendTo($module)\n          ;\n          settings.onCreate.call(element, url);\n          module.debug('Creating embed object', $embed);\n        },\n\n        changeEmbed: function(url) {\n          $embed\n            .html( module.generate.embed(url) )\n          ;\n        },\n\n        createAndShow: function() {\n          module.createEmbed();\n          module.show();\n        },\n\n        // sets new embed\n        change: function(source, id, url) {\n          module.debug('Changing video to ', source, id, url);\n          $module\n            .data(metadata.source, source)\n            .data(metadata.id, id)\n          ;\n          if(url) {\n            $module.data(metadata.url, url);\n          }\n          else {\n            $module.removeData(metadata.url);\n          }\n          if(module.has.embed()) {\n            module.changeEmbed();\n          }\n          else {\n            module.create();\n          }\n        },\n\n        // clears embed\n        reset: function() {\n          module.debug('Clearing embed and showing placeholder');\n          module.remove.active();\n          module.remove.embed();\n          module.showPlaceholder();\n          settings.onReset.call(element);\n        },\n\n        // shows current embed\n        show: function() {\n          module.debug('Showing embed');\n          module.set.active();\n          settings.onDisplay.call(element);\n        },\n\n        hide: function() {\n          module.debug('Hiding embed');\n          module.showPlaceholder();\n        },\n\n        showPlaceholder: function() {\n          module.debug('Showing placeholder image');\n          module.remove.active();\n          settings.onPlaceholderDisplay.call(element);\n        },\n\n        get: {\n          id: function() {\n            return settings.id || $module.data(metadata.id);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          },\n          icon: function() {\n            return (settings.icon)\n              ? settings.icon\n              : ($module.data(metadata.icon) !== undefined)\n                ? $module.data(metadata.icon)\n                : module.determine.icon()\n            ;\n          },\n          source: function(url) {\n            return (settings.source)\n              ? settings.source\n              : ($module.data(metadata.source) !== undefined)\n                ? $module.data(metadata.source)\n                : module.determine.source()\n            ;\n          },\n          type: function() {\n            var source = module.get.source();\n            return (sources[source] !== undefined)\n              ? sources[source].type\n              : false\n            ;\n          },\n          url: function() {\n            return (settings.url)\n              ? settings.url\n              : ($module.data(metadata.url) !== undefined)\n                ? $module.data(metadata.url)\n                : module.determine.url()\n            ;\n          }\n        },\n\n        determine: {\n          autoplay: function() {\n            if(module.should.autoplay()) {\n              settings.autoplay = true;\n            }\n          },\n          source: function(url) {\n            var\n              matchedSource = false\n            ;\n            url = url || module.get.url();\n            if(url) {\n              $.each(sources, function(name, source) {\n                if(url.search(source.domain) !== -1) {\n                  matchedSource = name;\n                  return false;\n                }\n              });\n            }\n            return matchedSource;\n          },\n          icon: function() {\n            var\n              source = module.get.source()\n            ;\n            return (sources[source] !== undefined)\n              ? sources[source].icon\n              : false\n            ;\n          },\n          url: function() {\n            var\n              id     = settings.id     || $module.data(metadata.id),\n              source = settings.source || $module.data(metadata.source),\n              url\n            ;\n            url = (sources[source] !== undefined)\n              ? sources[source].url.replace('{id}', id)\n              : false\n            ;\n            if(url) {\n              $module.data(metadata.url, url);\n            }\n            return url;\n          }\n        },\n\n\n        set: {\n          active: function() {\n            $module.addClass(className.active);\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          embed: function() {\n            $embed.empty();\n          }\n        },\n\n        encode: {\n          parameters: function(parameters) {\n            var\n              urlString = [],\n              index\n            ;\n            for (index in parameters) {\n              urlString.push( encodeURIComponent(index) + '=' + encodeURIComponent( parameters[index] ) );\n            }\n            return urlString.join('&amp;');\n          }\n        },\n\n        generate: {\n          embed: function(url) {\n            module.debug('Generating embed html');\n            var\n              source = module.get.source(),\n              html,\n              parameters\n            ;\n            url = module.get.url(url);\n            if(url) {\n              parameters = module.generate.parameters(source);\n              html       = templates.iframe(url, parameters);\n            }\n            else {\n              module.error(error.noURL, $module);\n            }\n            return html;\n          },\n          parameters: function(source, extraParameters) {\n            var\n              parameters = (sources[source] && sources[source].parameters !== undefined)\n                ? sources[source].parameters(settings)\n                : {}\n            ;\n            extraParameters = extraParameters || settings.parameters;\n            if(extraParameters) {\n              parameters = $.extend({}, parameters, extraParameters);\n            }\n            parameters = settings.onEmbed(parameters);\n            return module.encode.parameters(parameters);\n          }\n        },\n\n        has: {\n          embed: function() {\n            return ($embed.length > 0);\n          },\n          placeholder: function() {\n            return settings.placeholder || $module.data(metadata.placeholder);\n          }\n        },\n\n        should: {\n          autoplay: function() {\n            return (settings.autoplay === 'auto')\n              ? (settings.placeholder || $module.data(metadata.placeholder) !== undefined)\n              : settings.autoplay\n            ;\n          }\n        },\n\n        is: {\n          video: function() {\n            return module.get.type() == 'video';\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.embed.settings = {\n\n  name        : 'Embed',\n  namespace   : 'embed',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  icon     : false,\n  source   : false,\n  url      : false,\n  id       : false,\n\n  // standard video settings\n  autoplay  : 'auto',\n  color     : '#444444',\n  hd        : true,\n  brandedUI : false,\n\n  // additional parameters to include with the embed\n  parameters: false,\n\n  onDisplay            : function() {},\n  onPlaceholderDisplay : function() {},\n  onReset              : function() {},\n  onCreate             : function(url) {},\n  onEmbed              : function(parameters) {\n    return parameters;\n  },\n\n  metadata    : {\n    id          : 'id',\n    icon        : 'icon',\n    placeholder : 'placeholder',\n    source      : 'source',\n    url         : 'url'\n  },\n\n  error : {\n    noURL  : 'No URL specified',\n    method : 'The method you called is not defined'\n  },\n\n  className : {\n    active : 'active',\n    embed  : 'embed'\n  },\n\n  selector : {\n    embed       : '.embed',\n    placeholder : '.placeholder',\n    icon        : '.icon'\n  },\n\n  sources: {\n    youtube: {\n      name   : 'youtube',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'youtube.com',\n      url    : '//www.youtube.com/embed/{id}',\n      parameters: function(settings) {\n        return {\n          autohide       : !settings.brandedUI,\n          autoplay       : settings.autoplay,\n          color          : settings.color || undefined,\n          hq             : settings.hd,\n          jsapi          : settings.api,\n          modestbranding : !settings.brandedUI\n        };\n      }\n    },\n    vimeo: {\n      name   : 'vimeo',\n      type   : 'video',\n      icon   : 'video play',\n      domain : 'vimeo.com',\n      url    : '//player.vimeo.com/video/{id}',\n      parameters: function(settings) {\n        return {\n          api      : settings.api,\n          autoplay : settings.autoplay,\n          byline   : settings.brandedUI,\n          color    : settings.color || undefined,\n          portrait : settings.brandedUI,\n          title    : settings.brandedUI\n        };\n      }\n    }\n  },\n\n  templates: {\n    iframe : function(url, parameters) {\n      var src = url;\n      if (parameters) {\n          src += '?' + parameters;\n      }\n      return ''\n        + '<iframe src=\"' + src + '\"'\n        + ' width=\"100%\" height=\"100%\"'\n        + ' frameborder=\"0\" scrolling=\"no\" webkitAllowFullScreen mozallowfullscreen allowFullScreen></iframe>'\n      ;\n    },\n    placeholder : function(image, icon) {\n      var\n        html = ''\n      ;\n      if(icon) {\n        html += '<i class=\"' + icon + ' icon\"></i>';\n      }\n      if(image) {\n        html += '<img class=\"placeholder\" src=\"' + image + '\">';\n      }\n      return html;\n    }\n  },\n\n  // NOT YET IMPLEMENTED\n  api     : false,\n  onPause : function() {},\n  onPlay  : function() {},\n  onStop  : function() {}\n\n};\n\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/embed.less",
    "content": "/*!\n * # Semantic UI - Video\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'embed';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Types\n*******************************/\n\n.ui.embed {\n  position: relative;\n  position: relative;\n  max-width: 100%;\n  height: 0px;\n  overflow: hidden;\n  background: @background;\n  padding-bottom: @widescreenRatio;\n}\n\n/*-----------------\n  Embedded Content\n------------------*/\n\n.ui.embed iframe,\n.ui.embed embed,\n.ui.embed object {\n  position: absolute;\n  border: none;\n  width: 100%;\n  height: 100%;\n  top: 0px;\n  left: 0px;\n  margin: 0em;\n  padding: 0em;\n}\n\n/*-----------------\n      Embed\n------------------*/\n\n.ui.embed > .embed {\n  display: none;\n}\n\n/*--------------\n   Placeholder\n---------------*/\n\n.ui.embed > .placeholder {\n  position: absolute;\n  cursor: pointer;\n  top: 0px;\n  left: 0px;\n  display: block;\n  width: 100%;\n  height: 100%;\n  background-color: @placeholderBackground;\n}\n\n/*--------------\n      Icon\n---------------*/\n\n.ui.embed > .icon {\n  cursor: pointer;\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  width: 100%;\n  height: 100%;\n  z-index: 2;\n}\n.ui.embed > .icon:after {\n  position: absolute;\n  top: 0%;\n  left: 0%;\n  width: 100%;\n  height: 100%;\n  z-index: 3;\n  content: '';\n  background: @placeholderBackground;\n  opacity: @placeholderBackgroundOpacity;\n  transition: @placeholderBackgroundTransition;\n}\n.ui.embed > .icon:before {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  z-index: 4;\n  transform: translateX(-50%) translateY(-50%);\n\n  color: @iconColor;\n  font-size: @iconSize;\n  text-shadow: @iconShadow;\n  transition: @iconTransition;\n  z-index: @iconZIndex;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Hover\n---------------*/\n\n.ui.embed .icon:hover:after {\n  background: @hoverPlaceholderBackground;\n  opacity: @hoverPlaceholderBackgroundOpacity;\n}\n.ui.embed .icon:hover:before {\n  color: @hoverIconColor;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.embed > .icon,\n.ui.active.embed > .placeholder {\n  display: none;\n}\n.ui.active.embed > .embed {\n  display: block;\n}\n\n.loadUIOverrides();\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.square.embed {\n  padding-bottom: @squareRatio;\n}\n.ui[class*=\"4:3\"].embed {\n  padding-bottom: @standardRatio;\n}\n.ui[class*=\"16:9\"].embed {\n  padding-bottom: @widescreenRatio;\n}\n.ui[class*=\"21:9\"].embed {\n  padding-bottom: @ultraWidescreenRatio;\n}\n\n\n\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/modal.js",
    "content": "/*!\n * # Semantic UI - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.modal = function(parameters) {\n  var\n    $allModules    = $(this),\n    $window        = $(window),\n    $document      = $(document),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings    = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.modal.settings, parameters)\n          : $.extend({}, $.fn.modal.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n        $close          = $module.find(selector.close),\n\n        $allModals,\n        $otherModals,\n        $focusedElement,\n        $dimmable,\n        $dimmer,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        ignoreRepeatedEvents = false,\n\n        elementEventNamespace,\n        id,\n        observer,\n        module\n      ;\n      module  = {\n\n        initialize: function() {\n          module.verbose('Initializing dimmer', $context);\n\n          module.create.id();\n          module.create.dimmer();\n          module.refreshModals();\n\n          module.bind.events();\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of modal');\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        create: {\n          dimmer: function() {\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals'\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            module.debug('Creating dimmer');\n            $dimmable = $context.dimmer(dimmerSettings);\n            if(settings.detachable) {\n              module.verbose('Modal is detachable, moving content into dimmer');\n              $dimmable.dimmer('add content', $module);\n            }\n            else {\n              module.set.undetached();\n            }\n            $dimmer = $dimmable.dimmer('get dimmer');\n          },\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementEventNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous modal');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n          $window.off(elementEventNamespace);\n          $dimmer.off(elementEventNamespace);\n          $close.off(eventNamespace);\n          $context.dimmer('destroy');\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            observer = new MutationObserver(function(mutations) {\n              module.debug('DOM tree modified, refreshing');\n              module.refresh();\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        refresh: function() {\n          module.remove.scrolling();\n          module.cacheSizes();\n          module.set.screenHeight();\n          module.set.type();\n          module.set.position();\n        },\n\n        refreshModals: function() {\n          $otherModals = $module.siblings(selector.modal);\n          $allModals   = $otherModals.add($module);\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching modal events to element', selector, event);\n            $toggle\n              .off(eventNamespace)\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Attaching events');\n            $module\n              .on('click' + eventNamespace, selector.close, module.event.close)\n              .on('click' + eventNamespace, selector.approve, module.event.approve)\n              .on('click' + eventNamespace, selector.deny, module.event.deny)\n            ;\n            $window\n              .on('resize' + elementEventNamespace, module.event.resize)\n            ;\n          }\n        },\n\n        get: {\n          id: function() {\n            return (Math.random().toString(16) + '000000000').substr(2,8);\n          }\n        },\n\n        event: {\n          approve: function() {\n            if(ignoreRepeatedEvents || settings.onApprove.call(element, $(this)) === false) {\n              module.verbose('Approve callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          deny: function() {\n            if(ignoreRepeatedEvents || settings.onDeny.call(element, $(this)) === false) {\n              module.verbose('Deny callback returned false cancelling hide');\n              return;\n            }\n            ignoreRepeatedEvents = true;\n            module.hide(function() {\n              ignoreRepeatedEvents = false;\n            });\n          },\n          close: function() {\n            module.hide();\n          },\n          click: function(event) {\n            var\n              $target   = $(event.target),\n              isInModal = ($target.closest(selector.modal).length > 0),\n              isInDOM   = $.contains(document.documentElement, event.target)\n            ;\n            if(!isInModal && isInDOM) {\n              module.debug('Dimmer clicked, hiding all modals');\n              if( module.is.active() ) {\n                module.remove.clickaway();\n                if(settings.allowMultiple) {\n                  module.hide();\n                }\n                else {\n                  module.hideAll();\n                }\n              }\n            }\n          },\n          debounce: function(method, delay) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(method, delay);\n          },\n          keyboard: function(event) {\n            var\n              keyCode   = event.which,\n              escapeKey = 27\n            ;\n            if(keyCode == escapeKey) {\n              if(settings.closable) {\n                module.debug('Escape key pressed hiding modal');\n                module.hide();\n              }\n              else {\n                module.debug('Escape key pressed, but closable is set to false');\n              }\n              event.preventDefault();\n            }\n          },\n          resize: function() {\n            if( $dimmable.dimmer('is active') && ( module.is.animating() || module.is.active() ) ) {\n              requestAnimationFrame(module.refresh);\n            }\n          }\n        },\n\n        toggle: function() {\n          if( module.is.active() || module.is.animating() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.set.dimmerSettings();\n          module.showModal(callback);\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.refreshModals();\n          module.hideModal(callback);\n        },\n\n        showModal: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.animating() || !module.is.active() ) {\n\n            module.showDimmer();\n            module.cacheSizes();\n            module.set.position();\n            module.set.screenHeight();\n            module.set.type();\n            module.set.clickaway();\n\n            if( !settings.allowMultiple && module.others.active() ) {\n              module.hideOthers(module.showModal);\n            }\n            else {\n              if(settings.allowMultiple && settings.detachable) {\n                $module.detach().appendTo($dimmer);\n              }\n              settings.onShow.call(element);\n              if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n                module.debug('Showing modal with css animations');\n                $module\n                  .transition({\n                    debug       : settings.debug,\n                    animation   : settings.transition + ' in',\n                    queue       : settings.queue,\n                    duration    : settings.duration,\n                    useFailSafe : true,\n                    onComplete : function() {\n                      settings.onVisible.apply(element);\n                      if(settings.keyboardShortcuts) {\n                        module.add.keyboardShortcuts();\n                      }\n                      module.save.focus();\n                      module.set.active();\n                      if(settings.autofocus) {\n                        module.set.autofocus();\n                      }\n                      callback();\n                    }\n                  })\n                ;\n              }\n              else {\n                module.error(error.noTransition);\n              }\n            }\n          }\n          else {\n            module.debug('Modal is already visible');\n          }\n        },\n\n        hideModal: function(callback, keepDimmed) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.debug('Hiding modal');\n          if(settings.onHide.call(element, $(this)) === false) {\n            module.verbose('Hide callback returned false cancelling hide');\n            return;\n          }\n\n          if( module.is.animating() || module.is.active() ) {\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.remove.active();\n              $module\n                .transition({\n                  debug       : settings.debug,\n                  animation   : settings.transition + ' out',\n                  queue       : settings.queue,\n                  duration    : settings.duration,\n                  useFailSafe : true,\n                  onStart     : function() {\n                    if(!module.others.active() && !keepDimmed) {\n                      module.hideDimmer();\n                    }\n                    if(settings.keyboardShortcuts) {\n                      module.remove.keyboardShortcuts();\n                    }\n                  },\n                  onComplete : function() {\n                    settings.onHidden.call(element);\n                    module.restore.focus();\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        showDimmer: function() {\n          if($dimmable.dimmer('is animating') || !$dimmable.dimmer('is active') ) {\n            module.debug('Showing dimmer');\n            $dimmable.dimmer('show');\n          }\n          else {\n            module.debug('Dimmer already visible');\n          }\n        },\n\n        hideDimmer: function() {\n          if( $dimmable.dimmer('is animating') || ($dimmable.dimmer('is active')) ) {\n            $dimmable.dimmer('hide', function() {\n              module.remove.clickaway();\n              module.remove.screenHeight();\n            });\n          }\n          else {\n            module.debug('Dimmer is not visible cannot hide');\n            return;\n          }\n        },\n\n        hideAll: function(callback) {\n          var\n            $visibleModals = $allModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding all visible modals');\n            module.hideDimmer();\n            $visibleModals\n              .modal('hide modal', callback)\n            ;\n          }\n        },\n\n        hideOthers: function(callback) {\n          var\n            $visibleModals = $otherModals.filter('.' + className.active + ', .' + className.animating)\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( $visibleModals.length > 0 ) {\n            module.debug('Hiding other modals', $otherModals);\n            $visibleModals\n              .modal('hide modal', callback, true)\n            ;\n          }\n        },\n\n        others: {\n          active: function() {\n            return ($otherModals.filter('.' + className.active).length > 0);\n          },\n          animating: function() {\n            return ($otherModals.filter('.' + className.animating).length > 0);\n          }\n        },\n\n\n        add: {\n          keyboardShortcuts: function() {\n            module.verbose('Adding keyboard shortcuts');\n            $document\n              .on('keyup' + eventNamespace, module.event.keyboard)\n            ;\n          }\n        },\n\n        save: {\n          focus: function() {\n            $focusedElement = $(document.activeElement).blur();\n          }\n        },\n\n        restore: {\n          focus: function() {\n            if($focusedElement && $focusedElement.length > 0) {\n              $focusedElement.focus();\n            }\n          }\n        },\n\n        remove: {\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .off('click' + elementEventNamespace)\n              ;\n            }\n          },\n          bodyStyle: function() {\n            if($body.attr('style') === '') {\n              module.verbose('Removing style attribute');\n              $body.removeAttr('style');\n            }\n          },\n          screenHeight: function() {\n            module.debug('Removing page height');\n            $body\n              .css('height', '')\n            ;\n          },\n          keyboardShortcuts: function() {\n            module.verbose('Removing keyboard shortcuts');\n            $document\n              .off('keyup' + eventNamespace)\n            ;\n          },\n          scrolling: function() {\n            $dimmable.removeClass(className.scrolling);\n            $module.removeClass(className.scrolling);\n          }\n        },\n\n        cacheSizes: function() {\n          $module.addClass(className.loading);\n          var\n            scrollHeight = $module.prop('scrollHeight'),\n            modalHeight  = $module.outerHeight()\n          ;\n          if(module.cache === undefined || modalHeight !== 0) {\n            module.cache = {\n              pageHeight    : $(document).outerHeight(),\n              height        : modalHeight + settings.offset,\n              scrollHeight  : scrollHeight + settings.offset,\n              contextHeight : (settings.context == 'body')\n                ? $(window).height()\n                : $dimmable.height(),\n            };\n            module.cache.topOffset = -(module.cache.height / 2);\n          }\n          $module.removeClass(className.loading);\n          module.debug('Caching modal and container sizes', module.cache);\n        },\n\n        can: {\n          fit: function() {\n            var\n              contextHeight  = module.cache.contextHeight,\n              verticalCenter = module.cache.contextHeight / 2,\n              topOffset      = module.cache.topOffset,\n              scrollHeight   = module.cache.scrollHeight,\n              height         = module.cache.height,\n              paddingHeight  = settings.padding,\n              startPosition  = (verticalCenter + topOffset)\n            ;\n            return (scrollHeight > height)\n              ? (startPosition + scrollHeight + paddingHeight < contextHeight)\n              : (height + (paddingHeight * 2) < contextHeight)\n            ;\n          }\n        },\n\n        is: {\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return $module.transition('is supported')\n              ? $module.transition('is animating')\n              : $module.is(':visible')\n            ;\n          },\n          scrolling: function() {\n            return $dimmable.hasClass(className.scrolling);\n          },\n          modernBrowser: function() {\n            // appName for IE11 reports 'Netscape' can no longer use\n            return !(window.ActiveXObject || \"ActiveXObject\" in window);\n          }\n        },\n\n        set: {\n          autofocus: function() {\n            var\n              $inputs    = $module.find('[tabindex], :input').filter(':visible'),\n              $autofocus = $inputs.filter('[autofocus]'),\n              $input     = ($autofocus.length > 0)\n                ? $autofocus.first()\n                : $inputs.first()\n            ;\n            if($input.length > 0) {\n              $input.focus();\n            }\n          },\n          clickaway: function() {\n            if(settings.closable) {\n              $dimmer\n                .on('click' + elementEventNamespace, module.event.click)\n              ;\n            }\n          },\n          dimmerSettings: function() {\n            if($.fn.dimmer === undefined) {\n              module.error(error.dimmer);\n              return;\n            }\n            var\n              defaultSettings = {\n                debug      : settings.debug,\n                dimmerName : 'modals',\n                variation  : false,\n                closable   : 'auto',\n                duration   : {\n                  show     : settings.duration,\n                  hide     : settings.duration\n                }\n              },\n              dimmerSettings = $.extend(true, defaultSettings, settings.dimmerSettings)\n            ;\n            if(settings.inverted) {\n              dimmerSettings.variation = (dimmerSettings.variation !== undefined)\n                ? dimmerSettings.variation + ' inverted'\n                : 'inverted'\n              ;\n              $dimmer.addClass(className.inverted);\n            }\n            else {\n              $dimmer.removeClass(className.inverted);\n            }\n            if(settings.blurring) {\n              $dimmable.addClass(className.blurring);\n            }\n            else {\n              $dimmable.removeClass(className.blurring);\n            }\n            $context.dimmer('setting', dimmerSettings);\n          },\n          screenHeight: function() {\n            if( module.can.fit() ) {\n              $body.css('height', '');\n            }\n            else {\n              module.debug('Modal is taller than page content, resizing page height');\n              $body\n                .css('height', module.cache.height + (settings.padding * 2) )\n              ;\n            }\n          },\n          active: function() {\n            $module.addClass(className.active);\n          },\n          scrolling: function() {\n            $dimmable.addClass(className.scrolling);\n            $module.addClass(className.scrolling);\n          },\n          type: function() {\n            if(module.can.fit()) {\n              module.verbose('Modal fits on screen');\n              if(!module.others.active() && !module.others.animating()) {\n                module.remove.scrolling();\n              }\n            }\n            else {\n              module.verbose('Modal cannot fit on screen setting to scrolling');\n              module.set.scrolling();\n            }\n          },\n          position: function() {\n            module.verbose('Centering modal on page', module.cache);\n            if(module.can.fit()) {\n              $module\n                .css({\n                  top: '',\n                  marginTop: module.cache.topOffset\n                })\n              ;\n            }\n            else {\n              $module\n                .css({\n                  marginTop : '',\n                  top       : $document.scrollTop()\n                })\n              ;\n            }\n          },\n          undetached: function() {\n            $dimmable.addClass(className.undetached);\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.modal.settings = {\n\n  name           : 'Modal',\n  namespace      : 'modal',\n\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n\n  observeChanges : false,\n\n  allowMultiple  : false,\n  detachable     : true,\n  closable       : true,\n  autofocus      : true,\n\n  inverted       : false,\n  blurring       : false,\n\n  dimmerSettings : {\n    closable : false,\n    useCSS   : true\n  },\n\n  // whether to use keyboard shortcuts\n  keyboardShortcuts: true,\n\n  context    : 'body',\n\n  queue      : false,\n  duration   : 500,\n  offset     : 0,\n  transition : 'scale',\n\n  // padding with edge of page\n  padding    : 50,\n\n  // called before show animation\n  onShow     : function(){},\n\n  // called after show animation\n  onVisible  : function(){},\n\n  // called before hide animation\n  onHide     : function(){ return true; },\n\n  // called after hide animation\n  onHidden   : function(){},\n\n  // called after approve selector match\n  onApprove  : function(){ return true; },\n\n  // called after deny selector match\n  onDeny     : function(){ return true; },\n\n  selector    : {\n    close    : '> .close',\n    approve  : '.actions .positive, .actions .approve, .actions .ok',\n    deny     : '.actions .negative, .actions .deny, .actions .cancel',\n    modal    : '.ui.modal'\n  },\n  error : {\n    dimmer    : 'UI Dimmer, a required component is not included in this page',\n    method    : 'The method you called is not defined.',\n    notFound  : 'The element you specified could not be found'\n  },\n  className : {\n    active     : 'active',\n    animating  : 'animating',\n    blurring   : 'blurring',\n    inverted   : 'inverted',\n    loading    : 'loading',\n    scrolling  : 'scrolling',\n    undetached : 'undetached'\n  }\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/modal.less",
    "content": "/*!\n * # Semantic UI - Modal\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'modal';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Modal\n*******************************/\n\n.ui.modal {\n  display: none;\n  position: fixed;\n  z-index: @zIndex;\n\n  top: 50%;\n  left: 50%;\n  text-align: left;\n\n  background: @background;\n  border: @border;\n  box-shadow: @boxShadow;\n  transform-origin: @transformOrigin;\n\n  border-radius: @borderRadius;\n  user-select: text;\n  will-change: top, left, margin, transform, opacity;\n}\n\n.ui.modal > :first-child:not(.icon),\n.ui.modal > .icon:first-child + * {\n  border-top-left-radius: @borderRadius;\n  border-top-right-radius: @borderRadius;\n}\n\n.ui.modal > :last-child {\n  border-bottom-left-radius: @borderRadius;\n  border-bottom-right-radius: @borderRadius;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/*--------------\n     Close\n---------------*/\n\n.ui.modal > .close {\n  cursor: pointer;\n  position: absolute;\n  top: @closeTop;\n  right: @closeRight;\n  z-index: 1;\n\n  opacity: @closeOpacity;\n  font-size: @closeSize;\n  color: @closeColor;\n\n  width: @closeHitbox;\n  height: @closeHitbox;\n  padding: @closePadding;\n}\n.ui.modal > .close:hover {\n  opacity: 1;\n}\n\n/*--------------\n     Header\n---------------*/\n\n.ui.modal > .header {\n  display: block;\n  font-family: @headerFontFamily;\n  background: @headerBackground;\n  margin: @headerMargin;\n  padding: @headerPadding;\n  box-shadow: @headerBoxShadow;\n\n  color: @headerColor;\n  border-bottom: @headerBorder;\n}\n.ui.modal > .header:not(.ui) {\n  font-size: @headerFontSize;\n  line-height: @headerLineHeight;\n  font-weight: @headerFontWeight;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.modal > .content {\n  display: block;\n  width: 100%;\n  font-size: @contentFontSize;\n  line-height: @contentLineHeight;\n  padding: @contentPadding;\n  background: @contentBackground;\n}\n.ui.modal > .image.content {\n  display: flex;\n  flex-direction: row;\n}\n\n/* Image */\n.ui.modal > .content > .image {\n  display: block;\n  flex: 0 1 auto;\n  width: @imageWidth;\n  align-self: @imageVerticalAlign;\n}\n.ui.modal > [class*=\"top aligned\"] {\n  align-self: top;\n}\n.ui.modal > [class*=\"middle aligned\"] {\n  align-self: middle;\n}\n.ui.modal > [class*=\"stretched\"] {\n  align-self: stretch;\n}\n\n/* Description */\n.ui.modal > .content > .description {\n  display: block;\n  flex: 1 0 auto;\n  min-width: 0px;\n  align-self: @descriptionVerticalAlign;\n}\n\n.ui.modal > .content > .icon + .description,\n.ui.modal > .content > .image + .description {\n  flex: 0 1 auto;\n  min-width: @descriptionMinWidth;\n  width: @descriptionWidth;\n  padding-left: @descriptionDistance;\n}\n\n/*rtl:ignore*/\n.ui.modal > .content > .image > i.icon {\n  margin: 0em;\n  opacity: 1;\n  width: auto;\n  line-height: 1;\n  font-size: @imageIconSize;\n}\n\n/*--------------\n     Actions\n---------------*/\n\n.ui.modal > .actions {\n  background: @actionBackground;\n  padding: @actionPadding;\n  border-top: @actionBorder;\n  text-align: @actionAlign;\n}\n.ui.modal .actions > .button {\n  margin-left: @buttonDistance;\n}\n\n/*-------------------\n       Responsive\n--------------------*/\n\n/* Modal Width */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.modal {\n    width: @mobileWidth;\n    margin: @mobileMargin;\n  }\n}\n@media only screen and (min-width : @tabletBreakpoint) {\n  .ui.modal {\n    width: @tabletWidth;\n    margin: @tabletMargin;\n  }\n}\n@media only screen and (min-width : @computerBreakpoint) {\n  .ui.modal {\n    width: @computerWidth;\n    margin: @computerMargin;\n  }\n}\n@media only screen and (min-width : @largeMonitorBreakpoint) {\n  .ui.modal {\n    width: @largeMonitorWidth;\n    margin: @largeMonitorMargin;\n  }\n}\n@media only screen and (min-width : @widescreenMonitorBreakpoint) {\n  .ui.modal {\n    width: @widescreenMonitorWidth;\n    margin: @widescreenMonitorMargin;\n  }\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width : @largestTabletScreen) {\n  .ui.modal > .header {\n    padding-right: @closeHitbox;\n  }\n  .ui.modal > .close {\n    top: @innerCloseTop;\n    right: @innerCloseRight;\n    color: @innerCloseColor;\n  }\n}\n\n/* Mobile */\n@media only screen and (max-width : @largestMobileScreen) {\n\n  .ui.modal > .header {\n    padding: @mobileHeaderPadding !important;\n    padding-right: @closeHitbox !important;\n  }\n  .ui.modal > .content {\n    display: block;\n    padding: @mobileContentPadding !important;\n  }\n  .ui.modal > .close {\n    top: @mobileCloseTop !important;\n    right: @mobileCloseRight !important;\n  }\n\n  /*rtl:ignore*/\n  .ui.modal .image.content {\n    flex-direction: column;\n  }\n  .ui.modal .content > .image {\n    display: block;\n    max-width: 100%;\n    margin: 0em auto !important;\n    text-align: center;\n    padding: @mobileImagePadding !important;\n  }\n  .ui.modal > .content > .image > i.icon {\n    font-size: @mobileImageIconSize;\n    text-align: center;\n  }\n\n  /*rtl:ignore*/\n  .ui.modal .content > .description {\n    display: block;\n    width: 100% !important;\n    margin: 0em !important;\n    padding: @mobileDescriptionPadding !important;\n    box-shadow: none;\n  }\n\n  /* Let Buttons Stack */\n  .ui.modal > .actions {\n    padding: @mobileActionPadding !important;\n  }\n  .ui.modal .actions > .buttons,\n  .ui.modal .actions > .button {\n    margin-bottom: @mobileButtonDistance;\n  }\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.inverted.dimmer > .ui.modal {\n  box-shadow: @invertedBoxShadow;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.basic.modal {\n  background-color: transparent;\n  border: none;\n  border-radius: 0em;\n  box-shadow: none !important;\n  color: @basicModalColor;\n}\n.ui.basic.modal > .header,\n.ui.basic.modal > .content,\n.ui.basic.modal > .actions {\n  background-color: transparent;\n}\n.ui.basic.modal > .header {\n  color: @basicModalHeaderColor;\n}\n.ui.basic.modal > .close {\n  top: @basicModalCloseTop;\n  right: @basicModalCloseRight;\n}\n\n.ui.inverted.dimmer > .basic.modal {\n  color: @basicInvertedModalColor;\n}\n.ui.inverted.dimmer > .ui.basic.modal > .header {\n  color: @basicInvertedModalHeaderColor;\n}\n\n/* Tablet and Mobile */\n@media only screen and (max-width : @largestTabletScreen) {\n  .ui.basic.modal > .close {\n    color: @basicInnerCloseColor;\n  }\n}\n\n\n/*******************************\n             States\n*******************************/\n\n.ui.loading.modal {\n  display: block;\n  visibility: hidden;\n  z-index: @loadingZIndex;\n}\n\n.ui.active.modal {\n  display: block;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n    Scrolling\n---------------*/\n\n/* A modal that cannot fit on the page */\n.scrolling.dimmable.dimmed {\n  overflow: hidden;\n}\n.scrolling.dimmable.dimmed > .dimmer {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.dimmable > .dimmer {\n  position: fixed;\n}\n.modals.dimmer .ui.scrolling.modal {\n  position: static !important;\n  margin: @scrollingMargin auto !important;\n}\n\n/* undetached scrolling */\n.scrolling.undetached.dimmable.dimmed {\n  overflow: auto;\n  -webkit-overflow-scrolling: touch;\n}\n.scrolling.undetached.dimmable.dimmed > .dimmer {\n  overflow: hidden;\n}\n.scrolling.undetached.dimmable .ui.scrolling.modal {\n  position: absolute;\n  left: 50%;\n  margin-top: @scrollingMargin !important;\n}\n\n/* Coupling with Sidebar */\n.undetached.dimmable.dimmed > .pusher {\n  z-index: auto;\n}\n\n@media only screen and (max-width : @largestTabletScreen) {\n  .modals.dimmer .ui.scrolling.modal {\n    margin-top: @mobileScrollingMargin !important;\n    margin-bottom: @mobileScrollingMargin !important;\n  }\n}\n\n/* Scrolling Content */\n\n.ui.modal .scrolling.content {\n  max-height: @scrollingContentMaxHeight;\n  overflow: auto;\n}\n\n\n/*--------------\n   Full Screen\n---------------*/\n\n.ui.fullscreen.modal {\n  width: @fullScreenWidth !important;\n  left: @fullScreenOffset !important;\n  margin: @fullScreenMargin;\n}\n.ui.fullscreen.scrolling.modal {\n  left: 0em !important;\n}\n.ui.fullscreen.modal > .header {\n  padding-right: @closeHitbox;\n}\n.ui.fullscreen.modal > .close {\n  top: @innerCloseTop;\n  right: @innerCloseRight;\n  color: @innerCloseColor;\n}\n\n\n/*--------------\n      Size\n---------------*/\n\n.ui.modal {\n  font-size: @medium;\n}\n\n/* Mini */\n.ui.mini.modal > .header:not(.ui) {\n  font-size: @miniHeaderSize;\n}\n\n/* Mini Modal Width */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.mini.modal {\n    width: @miniMobileWidth;\n    margin: @miniMobileMargin;\n  }\n}\n@media only screen and (min-width : @tabletBreakpoint) {\n  .ui.mini.modal {\n    width: @miniTabletWidth;\n    margin: @miniTabletMargin;\n  }\n}\n@media only screen and (min-width : @computerBreakpoint) {\n  .ui.mini.modal {\n    width: @miniComputerWidth;\n    margin: @miniComputerMargin;\n  }\n}\n@media only screen and (min-width : @largeMonitorBreakpoint) {\n  .ui.mini.modal {\n    width: @miniLargeMonitorWidth;\n    margin: @miniLargeMonitorMargin;\n  }\n}\n@media only screen and (min-width : @widescreenMonitorBreakpoint) {\n  .ui.mini.modal {\n    width: @miniWidescreenMonitorWidth;\n    margin: @miniWidescreenMonitorMargin;\n  }\n}\n\n/* mini */\n.ui.small.modal > .header:not(.ui) {\n  font-size: @miniHeaderSize;\n}\n\n/* Tiny Modal Width */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.tiny.modal {\n    width: @tinyMobileWidth;\n    margin: @tinyMobileMargin;\n  }\n}\n@media only screen and (min-width : @tabletBreakpoint) {\n  .ui.tiny.modal {\n    width: @tinyTabletWidth;\n    margin: @tinyTabletMargin;\n  }\n}\n@media only screen and (min-width : @computerBreakpoint) {\n  .ui.tiny.modal {\n    width: @tinyComputerWidth;\n    margin: @tinyComputerMargin;\n  }\n}\n@media only screen and (min-width : @largeMonitorBreakpoint) {\n  .ui.tiny.modal {\n    width: @tinyLargeMonitorWidth;\n    margin: @tinyLargeMonitorMargin;\n  }\n}\n@media only screen and (min-width : @widescreenMonitorBreakpoint) {\n  .ui.tiny.modal {\n    width: @tinyWidescreenMonitorWidth;\n    margin: @tinyWidescreenMonitorMargin;\n  }\n}\n\n/* Small */\n.ui.small.modal > .header:not(.ui) {\n  font-size: @smallHeaderSize;\n}\n\n/* Small Modal Width */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.small.modal {\n    width: @smallMobileWidth;\n    margin: @smallMobileMargin;\n  }\n}\n@media only screen and (min-width : @tabletBreakpoint) {\n  .ui.small.modal {\n    width: @smallTabletWidth;\n    margin: @smallTabletMargin;\n  }\n}\n@media only screen and (min-width : @computerBreakpoint) {\n  .ui.small.modal {\n    width: @smallComputerWidth;\n    margin: @smallComputerMargin;\n  }\n}\n@media only screen and (min-width : @largeMonitorBreakpoint) {\n  .ui.small.modal {\n    width: @smallLargeMonitorWidth;\n    margin: @smallLargeMonitorMargin;\n  }\n}\n@media only screen and (min-width : @widescreenMonitorBreakpoint) {\n  .ui.small.modal {\n    width: @smallWidescreenMonitorWidth;\n    margin: @smallWidescreenMonitorMargin;\n  }\n}\n\n/* Large Modal Width */\n.ui.large.modal > .header {\n  font-size: @largeHeaderSize;\n}\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.large.modal {\n    width: @largeMobileWidth;\n    margin: @largeMobileMargin;\n  }\n}\n@media only screen and (min-width : @tabletBreakpoint) {\n  .ui.large.modal {\n    width: @largeTabletWidth;\n    margin: @largeTabletMargin;\n  }\n}\n@media only screen and (min-width : @computerBreakpoint) {\n  .ui.large.modal {\n    width: @largeComputerWidth;\n    margin: @largeComputerMargin;\n  }\n}\n@media only screen and (min-width : @largeMonitorBreakpoint) {\n  .ui.large.modal {\n    width: @largeLargeMonitorWidth;\n    margin: @largeLargeMonitorMargin;\n  }\n}\n@media only screen and (min-width : @widescreenMonitorBreakpoint) {\n  .ui.large.modal {\n    width: @largeWidescreenMonitorWidth;\n    margin: @largeWidescreenMonitorMargin;\n  }\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/nag.js",
    "content": "/*!\n * # Semantic UI - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.nag = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.nag.settings, parameters)\n          : $.extend({}, $.fn.nag.settings),\n\n        className       = settings.className,\n        selector        = settings.selector,\n        error           = settings.error,\n        namespace       = settings.namespace,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = namespace + '-module',\n\n        $module         = $(this),\n\n        $close          = $module.find(selector.close),\n        $context        = (settings.context)\n          ? $(settings.context)\n          : $('body'),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        moduleOffset,\n        moduleHeight,\n\n        contextWidth,\n        contextHeight,\n        contextOffset,\n\n        yOffset,\n        yPosition,\n\n        timer,\n        module,\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); }\n      ;\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing element');\n\n          $module\n            .on('click' + eventNamespace, selector.close, module.dismiss)\n            .data(moduleNamespace, module)\n          ;\n\n          if(settings.detachable && $module.parent()[0] !== $context[0]) {\n            $module\n              .detach()\n              .prependTo($context)\n            ;\n          }\n\n          if(settings.displayTime > 0) {\n            setTimeout(module.hide, settings.displayTime);\n          }\n          module.show();\n        },\n\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        show: function() {\n          if( module.should.show() && !$module.is(':visible') ) {\n            module.debug('Showing nag', settings.animation.show);\n            if(settings.animation.show == 'fade') {\n              $module\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            else {\n              $module\n                .slideDown(settings.duration, settings.easing)\n              ;\n            }\n          }\n        },\n\n        hide: function() {\n          module.debug('Showing nag', settings.animation.hide);\n          if(settings.animation.show == 'fade') {\n            $module\n              .fadeIn(settings.duration, settings.easing)\n            ;\n          }\n          else {\n            $module\n              .slideUp(settings.duration, settings.easing)\n            ;\n          }\n        },\n\n        onHide: function() {\n          module.debug('Removing nag', settings.animation.hide);\n          $module.remove();\n          if (settings.onHide) {\n            settings.onHide();\n          }\n        },\n\n        dismiss: function(event) {\n          if(settings.storageMethod) {\n            module.storage.set(settings.key, settings.value);\n          }\n          module.hide();\n          event.stopImmediatePropagation();\n          event.preventDefault();\n        },\n\n        should: {\n          show: function() {\n            if(settings.persist) {\n              module.debug('Persistent nag is set, can show nag');\n              return true;\n            }\n            if( module.storage.get(settings.key) != settings.value.toString() ) {\n              module.debug('Stored value is not set, can show nag', module.storage.get(settings.key));\n              return true;\n            }\n            module.debug('Stored value is set, cannot show nag', module.storage.get(settings.key));\n            return false;\n          }\n        },\n\n        get: {\n          storageOptions: function() {\n            var\n              options = {}\n            ;\n            if(settings.expires) {\n              options.expires = settings.expires;\n            }\n            if(settings.domain) {\n              options.domain = settings.domain;\n            }\n            if(settings.path) {\n              options.path = settings.path;\n            }\n            return options;\n          }\n        },\n\n        clear: function() {\n          module.storage.remove(settings.key);\n        },\n\n        storage: {\n          set: function(key, value) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.setItem(key, value);\n              module.debug('Value stored using local storage', key, value);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.setItem(key, value);\n              module.debug('Value stored using session storage', key, value);\n            }\n            else if($.cookie !== undefined) {\n              $.cookie(key, value, options);\n              module.debug('Value stored using cookie', key, value, options);\n            }\n            else {\n              module.error(error.noCookieStorage);\n              return;\n            }\n          },\n          get: function(key, value) {\n            var\n              storedValue\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              storedValue = window.localStorage.getItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              storedValue = window.sessionStorage.getItem(key);\n            }\n            // get by cookie\n            else if($.cookie !== undefined) {\n              storedValue = $.cookie(key);\n            }\n            else {\n              module.error(error.noCookieStorage);\n            }\n            if(storedValue == 'undefined' || storedValue == 'null' || storedValue === undefined || storedValue === null) {\n              storedValue = undefined;\n            }\n            return storedValue;\n          },\n          remove: function(key) {\n            var\n              options = module.get.storageOptions()\n            ;\n            if(settings.storageMethod == 'localstorage' && window.localStorage !== undefined) {\n              window.localStorage.removeItem(key);\n            }\n            else if(settings.storageMethod == 'sessionstorage' && window.sessionStorage !== undefined) {\n              window.sessionStorage.removeItem(key);\n            }\n            // store by cookie\n            else if($.cookie !== undefined) {\n              $.removeCookie(key, options);\n            }\n            else {\n              module.error(error.noStorage);\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.nag.settings = {\n\n  name        : 'Nag',\n\n  silent      : false,\n  debug       : false,\n  verbose     : false,\n  performance : true,\n\n  namespace   : 'Nag',\n\n  // allows cookie to be overridden\n  persist     : false,\n\n  // set to zero to require manually dismissal, otherwise hides on its own\n  displayTime : 0,\n\n  animation   : {\n    show : 'slide',\n    hide : 'slide'\n  },\n\n  context       : false,\n  detachable    : false,\n\n  expires       : 30,\n  domain        : false,\n  path          : '/',\n\n  // type of storage to use\n  storageMethod : 'cookie',\n\n  // value to store in dismissed localstorage/cookie\n  key           : 'nag',\n  value         : 'dismiss',\n\n  error: {\n    noCookieStorage : '$.cookie is not included. A storage solution is required.',\n    noStorage       : 'Neither $.cookie or store is defined. A storage solution is required for storing state',\n    method          : 'The method you called is not defined.'\n  },\n\n  className     : {\n    bottom : 'bottom',\n    fixed  : 'fixed'\n  },\n\n  selector      : {\n    close : '.close.icon'\n  },\n\n  speed         : 500,\n  easing        : 'easeOutQuad',\n\n  onHide: function() {}\n\n};\n\n// Adds easing\n$.extend( $.easing, {\n  easeOutQuad: function (x, t, b, c, d) {\n    return -c *(t/=d)*(t-2) + b;\n  }\n});\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/nag.less",
    "content": "/*!\n * # Semantic UI - Nag\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'nag';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Nag\n*******************************/\n\n.ui.nag {\n  display: none;\n  opacity: @opacity;\n  position: @position;\n\n  top: @top;\n  left: 0px;\n  z-index: @zIndex;\n\n  min-height: @minHeight;\n  width: @width;\n\n  margin: @margin;\n  padding: @padding;\n\n  background: @background;\n  box-shadow: @boxShadow;\n\n  font-size: @fontSize;\n  text-align: @textAlign;\n  color: @color;\n\n  border-radius: @topBorderRadius;\n  transition: @transition;\n}\n\na.ui.nag {\n  cursor: pointer;\n}\n\n.ui.nag > .title {\n  display: inline-block;\n  margin: @titleMargin;\n  color: @titleColor;\n}\n\n\n.ui.nag > .close.icon {\n  cursor: pointer;\n  opacity: @closeOpacity;\n\n  position: absolute;\n  top: @closeTop;\n  right: @closeRight;\n\n  font-size: @closeSize;\n\n  margin: @closeMargin;\n  color: @closeColor;\n  transition: @closeTransition;\n}\n\n\n\n/*******************************\n             States\n*******************************/\n\n/* Hover */\n.ui.nag:hover {\n  background: @nagHoverBackground;\n  opacity: @nagHoverOpacity;\n}\n\n.ui.nag .close:hover {\n  opacity: @closeHoverOpacity;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n     Static\n---------------*/\n\n.ui.overlay.nag {\n  position: absolute;\n  display: block;\n}\n\n/*--------------\n     Fixed\n---------------*/\n\n.ui.fixed.nag {\n  position: fixed;\n}\n\n/*--------------\n     Bottom\n---------------*/\n\n.ui.bottom.nags,\n.ui.bottom.nag {\n  border-radius: @bottomBorderRadius;\n  top: auto;\n  bottom: @bottom;\n}\n\n/*--------------\n     White\n---------------*/\n\n.ui.inverted.nags .nag,\n.ui.inverted.nag {\n  background-color: @invertedBackground;\n  color: @darkTextColor;\n}\n.ui.inverted.nags .nag .close,\n.ui.inverted.nags .nag .title,\n.ui.inverted.nag .close,\n.ui.inverted.nag .title {\n  color: @lightTextColor;\n}\n\n\n/*******************************\n           Groups\n*******************************/\n\n.ui.nags .nag {\n  border-radius: @groupedBorderRadius !important;\n}\n.ui.nags .nag:last-child {\n  border-radius: @topBorderRadius;\n}\n.ui.bottom.nags .nag:last-child {\n  border-radius: @bottomBorderRadius;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/popup.js",
    "content": "/*!\n * # Semantic UI - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.popup = function(parameters) {\n  var\n    $allModules    = $(this),\n    $document      = $(document),\n    $window        = $(window),\n    $body          = $('body'),\n\n    moduleSelector = $allModules.selector || '',\n\n    hasTouch       = (true),\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.popup.settings, parameters)\n          : $.extend({}, $.fn.popup.settings),\n\n        selector           = settings.selector,\n        className          = settings.className,\n        error              = settings.error,\n        metadata           = settings.metadata,\n        namespace          = settings.namespace,\n\n        eventNamespace     = '.' + settings.namespace,\n        moduleNamespace    = 'module-' + namespace,\n\n        $module            = $(this),\n        $context           = $(settings.context),\n        $scrollContext     = $(settings.scrollContext),\n        $boundary          = $(settings.boundary),\n        $target            = (settings.target)\n          ? $(settings.target)\n          : $module,\n\n        $popup,\n        $offsetParent,\n\n        searchDepth        = 0,\n        triedPositions     = false,\n        openedWithTouch    = false,\n\n        element            = this,\n        instance           = $module.data(moduleNamespace),\n\n        documentObserver,\n        elementNamespace,\n        id,\n        module\n      ;\n\n      module = {\n\n        // binds events\n        initialize: function() {\n          module.debug('Initializing', $module);\n          module.createID();\n          module.bind.events();\n          if(!module.exists() && settings.preserve) {\n            module.create();\n          }\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', documentObserver);\n          }\n        },\n\n        refresh: function() {\n          if(settings.popup) {\n            $popup = $(settings.popup).eq(0);\n          }\n          else {\n            if(settings.inline) {\n              $popup = $target.nextAll(selector.popup).eq(0);\n              settings.popup = $popup;\n            }\n          }\n          if(settings.popup) {\n            $popup.addClass(className.loading);\n            $offsetParent = module.get.offsetParent();\n            $popup.removeClass(className.loading);\n            if(settings.movePopup && module.has.popup() && module.get.offsetParent($popup)[0] !== $offsetParent[0]) {\n              module.debug('Moving popup to the same offset parent as target');\n              $popup\n                .detach()\n                .appendTo($offsetParent)\n              ;\n            }\n          }\n          else {\n            $offsetParent = (settings.inline)\n              ? module.get.offsetParent($target)\n              : module.has.popup()\n                ? module.get.offsetParent($popup)\n                : $body\n            ;\n          }\n          if( $offsetParent.is('html') && $offsetParent[0] !== $body[0] ) {\n            module.debug('Setting page as offset parent');\n            $offsetParent = $body;\n          }\n          if( module.get.variation() ) {\n            module.set.variation();\n          }\n        },\n\n        reposition: function() {\n          module.refresh();\n          module.set.position();\n        },\n\n        destroy: function() {\n          module.debug('Destroying previous module');\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          // remove element only if was created dynamically\n          if($popup && !settings.preserve) {\n            module.removePopup();\n          }\n          // clear all timeouts\n          clearTimeout(module.hideTimer);\n          clearTimeout(module.showTimer);\n          // remove events\n          module.unbind.close();\n          module.unbind.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        event: {\n          start:  function(event) {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.show\n                : settings.delay\n            ;\n            clearTimeout(module.hideTimer);\n            if(!openedWithTouch) {\n              module.showTimer = setTimeout(module.show, delay);\n            }\n          },\n          end:  function() {\n            var\n              delay = ($.isPlainObject(settings.delay))\n                ? settings.delay.hide\n                : settings.delay\n            ;\n            clearTimeout(module.showTimer);\n            module.hideTimer = setTimeout(module.hide, delay);\n          },\n          touchstart: function(event) {\n            openedWithTouch = true;\n            module.show();\n          },\n          resize: function() {\n            if( module.is.visible() ) {\n              module.set.position();\n            }\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          hideGracefully: function(event) {\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target),\n              inPopup = ($target.closest(selector.popup).length > 0)\n            ;\n            // don't close on clicks inside popup\n            if(event && !inPopup && isInDOM) {\n              module.debug('Click occurred outside popup hiding popup');\n              module.hide();\n            }\n            else {\n              module.debug('Click was inside popup, keeping popup open');\n            }\n          }\n        },\n\n        // generates popup html from metadata\n        create: function() {\n          var\n            html      = module.get.html(),\n            title     = module.get.title(),\n            content   = module.get.content()\n          ;\n\n          if(html || content || title) {\n            module.debug('Creating pop-up html');\n            if(!html) {\n              html = settings.templates.popup({\n                title   : title,\n                content : content\n              });\n            }\n            $popup = $('<div/>')\n              .addClass(className.popup)\n              .data(metadata.activator, $module)\n              .html(html)\n            ;\n            if(settings.inline) {\n              module.verbose('Inserting popup element inline', $popup);\n              $popup\n                .insertAfter($module)\n              ;\n            }\n            else {\n              module.verbose('Appending popup element to body', $popup);\n              $popup\n                .appendTo( $context )\n              ;\n            }\n            module.refresh();\n            module.set.variation();\n\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n            settings.onCreate.call($popup, element);\n          }\n          else if($target.next(selector.popup).length !== 0) {\n            module.verbose('Pre-existing popup found');\n            settings.inline = true;\n            settings.popup  = $target.next(selector.popup).data(metadata.activator, $module);\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else if(settings.popup) {\n            $(settings.popup).data(metadata.activator, $module);\n            module.verbose('Used popup specified in settings');\n            module.refresh();\n            if(settings.hoverable) {\n              module.bind.popup();\n            }\n          }\n          else {\n            module.debug('No content specified skipping display', element);\n          }\n        },\n\n        createID: function() {\n          id = (Math.random().toString(16) + '000000000').substr(2, 8);\n          elementNamespace = '.' + id;\n          module.verbose('Creating unique id for element', id);\n        },\n\n        // determines popup state\n        toggle: function() {\n          module.debug('Toggling pop-up');\n          if( module.is.hidden() ) {\n            module.debug('Popup is hidden, showing pop-up');\n            module.unbind.close();\n            module.show();\n          }\n          else {\n            module.debug('Popup is visible, hiding pop-up');\n            module.hide();\n          }\n        },\n\n        show: function(callback) {\n          callback = callback || function(){};\n          module.debug('Showing pop-up', settings.transition);\n          if(module.is.hidden() && !( module.is.active() && module.is.dropdown()) ) {\n            if( !module.exists() ) {\n              module.create();\n            }\n            if(settings.onShow.call($popup, element) === false) {\n              module.debug('onShow callback returned false, cancelling popup animation');\n              return;\n            }\n            else if(!settings.preserve && !settings.popup) {\n              module.refresh();\n            }\n            if( $popup && module.set.position() ) {\n              module.save.conditions();\n              if(settings.exclusive) {\n                module.hideAll();\n              }\n              module.animate.show(callback);\n            }\n          }\n        },\n\n\n        hide: function(callback) {\n          callback = callback || function(){};\n          if( module.is.visible() || module.is.animating() ) {\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            module.remove.visible();\n            module.unbind.close();\n            module.restore.conditions();\n            module.animate.hide(callback);\n          }\n        },\n\n        hideAll: function() {\n          $(selector.popup)\n            .filter('.' + className.popupVisible)\n            .each(function() {\n              $(this)\n                .data(metadata.activator)\n                  .popup('hide')\n              ;\n            })\n          ;\n        },\n        exists: function() {\n          if(!$popup) {\n            return false;\n          }\n          if(settings.inline || settings.popup) {\n            return ( module.has.popup() );\n          }\n          else {\n            return ( $popup.closest($context).length >= 1 )\n              ? true\n              : false\n            ;\n          }\n        },\n\n        removePopup: function() {\n          if( module.has.popup() && !settings.popup) {\n            module.debug('Removing popup', $popup);\n            $popup.remove();\n            $popup = undefined;\n            settings.onRemove.call($popup, element);\n          }\n        },\n\n        save: {\n          conditions: function() {\n            module.cache = {\n              title: $module.attr('title')\n            };\n            if (module.cache.title) {\n              $module.removeAttr('title');\n            }\n            module.verbose('Saving original attributes', module.cache.title);\n          }\n        },\n        restore: {\n          conditions: function() {\n            if(module.cache && module.cache.title) {\n              $module.attr('title', module.cache.title);\n              module.verbose('Restoring original attributes', module.cache.title);\n            }\n            return true;\n          }\n        },\n        supports: {\n          svg: function() {\n            return (typeof SVGGraphicsElement === 'undefined');\n          }\n        },\n        animate: {\n          show: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              module.set.visible();\n              $popup\n                .transition({\n                  animation  : settings.transition + ' in',\n                  queue      : false,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    module.bind.close();\n                    callback.call($popup, element);\n                    settings.onVisible.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          },\n          hide: function(callback) {\n            callback = $.isFunction(callback) ? callback : function(){};\n            module.debug('Hiding pop-up');\n            if(settings.onHide.call($popup, element) === false) {\n              module.debug('onHide callback returned false, cancelling popup animation');\n              return;\n            }\n            if(settings.transition && $.fn.transition !== undefined && $module.transition('is supported')) {\n              $popup\n                .transition({\n                  animation  : settings.transition + ' out',\n                  queue      : false,\n                  duration   : settings.duration,\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  onComplete : function() {\n                    module.reset();\n                    callback.call($popup, element);\n                    settings.onHidden.call($popup, element);\n                  }\n                })\n              ;\n            }\n            else {\n              module.error(error.noTransition);\n            }\n          }\n        },\n\n        change: {\n          content: function(html) {\n            $popup.html(html);\n          }\n        },\n\n        get: {\n          html: function() {\n            $module.removeData(metadata.html);\n            return $module.data(metadata.html) || settings.html;\n          },\n          title: function() {\n            $module.removeData(metadata.title);\n            return $module.data(metadata.title) || settings.title;\n          },\n          content: function() {\n            $module.removeData(metadata.content);\n            return $module.data(metadata.content) || $module.attr('title') || settings.content;\n          },\n          variation: function() {\n            $module.removeData(metadata.variation);\n            return $module.data(metadata.variation) || settings.variation;\n          },\n          popup: function() {\n            return $popup;\n          },\n          popupOffset: function() {\n            return $popup.offset();\n          },\n          calculations: function() {\n            var\n              targetElement    = $target[0],\n              isWindow         = ($boundary[0] == window),\n              targetPosition   = (settings.inline || (settings.popup && settings.movePopup))\n                ? $target.position()\n                : $target.offset(),\n              screenPosition = (isWindow)\n                ? { top: 0, left: 0 }\n                : $boundary.offset(),\n              calculations   = {},\n              scroll = (isWindow)\n                ? { top: $window.scrollTop(), left: $window.scrollLeft() }\n                : { top: 0, left: 0},\n              screen\n            ;\n            calculations = {\n              // element which is launching popup\n              target : {\n                element : $target[0],\n                width   : $target.outerWidth(),\n                height  : $target.outerHeight(),\n                top     : targetPosition.top,\n                left    : targetPosition.left,\n                margin  : {}\n              },\n              // popup itself\n              popup : {\n                width  : $popup.outerWidth(),\n                height : $popup.outerHeight()\n              },\n              // offset container (or 3d context)\n              parent : {\n                width  : $offsetParent.outerWidth(),\n                height : $offsetParent.outerHeight()\n              },\n              // screen boundaries\n              screen : {\n                top  : screenPosition.top,\n                left : screenPosition.left,\n                scroll: {\n                  top  : scroll.top,\n                  left : scroll.left\n                },\n                width  : $boundary.width(),\n                height : $boundary.height()\n              }\n            };\n\n            // add in container calcs if fluid\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              calculations.container = {\n                width: $popup.parent().outerWidth()\n              };\n              calculations.popup.width = calculations.container.width;\n            }\n\n            // add in margins if inline\n            calculations.target.margin.top = (settings.inline)\n              ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-top'), 10)\n              : 0\n            ;\n            calculations.target.margin.left = (settings.inline)\n              ? module.is.rtl()\n                ? parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-right'), 10)\n                : parseInt( window.getComputedStyle(targetElement).getPropertyValue('margin-left'), 10)\n              : 0\n            ;\n            // calculate screen boundaries\n            screen = calculations.screen;\n            calculations.boundary = {\n              top    : screen.top + screen.scroll.top,\n              bottom : screen.top + screen.scroll.top + screen.height,\n              left   : screen.left + screen.scroll.left,\n              right  : screen.left + screen.scroll.left + screen.width\n            };\n            return calculations;\n          },\n          id: function() {\n            return id;\n          },\n          startEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseenter';\n            }\n            else if(settings.on == 'focus') {\n              return 'focus';\n            }\n            return false;\n          },\n          scrollEvent: function() {\n            return 'scroll';\n          },\n          endEvent: function() {\n            if(settings.on == 'hover') {\n              return 'mouseleave';\n            }\n            else if(settings.on == 'focus') {\n              return 'blur';\n            }\n            return false;\n          },\n          distanceFromBoundary: function(offset, calculations) {\n            var\n              distanceFromBoundary = {},\n              popup,\n              boundary\n            ;\n            calculations = calculations || module.get.calculations();\n\n            // shorthand\n            popup        = calculations.popup;\n            boundary     = calculations.boundary;\n\n            if(offset) {\n              distanceFromBoundary = {\n                top    : (offset.top - boundary.top),\n                left   : (offset.left - boundary.left),\n                right  : (boundary.right - (offset.left + popup.width) ),\n                bottom : (boundary.bottom - (offset.top + popup.height) )\n              };\n              module.verbose('Distance from boundaries determined', offset, distanceFromBoundary);\n            }\n            return distanceFromBoundary;\n          },\n          offsetParent: function($target) {\n            var\n              element = ($target !== undefined)\n                ? $target[0]\n                : $module[0],\n              parentNode = element.parentNode,\n              $node    = $(parentNode)\n            ;\n            if(parentNode) {\n              var\n                is2D     = ($node.css('transform') === 'none'),\n                isStatic = ($node.css('position') === 'static'),\n                isHTML   = $node.is('html')\n              ;\n              while(parentNode && !isHTML && isStatic && is2D) {\n                parentNode = parentNode.parentNode;\n                $node    = $(parentNode);\n                is2D     = ($node.css('transform') === 'none');\n                isStatic = ($node.css('position') === 'static');\n                isHTML   = $node.is('html');\n              }\n            }\n            return ($node && $node.length > 0)\n              ? $node\n              : $()\n            ;\n          },\n          positions: function() {\n            return {\n              'top left'      : false,\n              'top center'    : false,\n              'top right'     : false,\n              'bottom left'   : false,\n              'bottom center' : false,\n              'bottom right'  : false,\n              'left center'   : false,\n              'right center'  : false\n            };\n          },\n          nextPosition: function(position) {\n            var\n              positions          = position.split(' '),\n              verticalPosition   = positions[0],\n              horizontalPosition = positions[1],\n              opposite = {\n                top    : 'bottom',\n                bottom : 'top',\n                left   : 'right',\n                right  : 'left'\n              },\n              adjacent = {\n                left   : 'center',\n                center : 'right',\n                right  : 'left'\n              },\n              backup = {\n                'top left'      : 'top center',\n                'top center'    : 'top right',\n                'top right'     : 'right center',\n                'right center'  : 'bottom right',\n                'bottom right'  : 'bottom center',\n                'bottom center' : 'bottom left',\n                'bottom left'   : 'left center',\n                'left center'   : 'top left'\n              },\n              adjacentsAvailable = (verticalPosition == 'top' || verticalPosition == 'bottom'),\n              oppositeTried = false,\n              adjacentTried = false,\n              nextPosition  = false\n            ;\n            if(!triedPositions) {\n              module.verbose('All available positions available');\n              triedPositions = module.get.positions();\n            }\n\n            module.debug('Recording last position tried', position);\n            triedPositions[position] = true;\n\n            if(settings.prefer === 'opposite') {\n              nextPosition  = [opposite[verticalPosition], horizontalPosition];\n              nextPosition  = nextPosition.join(' ');\n              oppositeTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying opposite strategy', nextPosition);\n            }\n            if((settings.prefer === 'adjacent') && adjacentsAvailable ) {\n              nextPosition  = [verticalPosition, adjacent[horizontalPosition]];\n              nextPosition  = nextPosition.join(' ');\n              adjacentTried = (triedPositions[nextPosition] === true);\n              module.debug('Trying adjacent strategy', nextPosition);\n            }\n            if(adjacentTried || oppositeTried) {\n              module.debug('Using backup position', nextPosition);\n              nextPosition = backup[position];\n            }\n            return nextPosition;\n          }\n        },\n\n        set: {\n          position: function(position, calculations) {\n\n            // exit conditions\n            if($target.length === 0 || $popup.length === 0) {\n              module.error(error.notFound);\n              return;\n            }\n            var\n              offset,\n              distanceAway,\n              target,\n              popup,\n              parent,\n              positioning,\n              popupOffset,\n              distanceFromBoundary\n            ;\n\n            calculations = calculations || module.get.calculations();\n            position     = position     || $module.data(metadata.position) || settings.position;\n\n            offset       = $module.data(metadata.offset) || settings.offset;\n            distanceAway = settings.distanceAway;\n\n            // shorthand\n            target = calculations.target;\n            popup  = calculations.popup;\n            parent = calculations.parent;\n\n            if(target.width === 0 && target.height === 0 && !module.is.svg(target.element)) {\n              module.debug('Popup target is hidden, no action taken');\n              return false;\n            }\n\n            if(settings.inline) {\n              module.debug('Adding margin to calculation', target.margin);\n              if(position == 'left center' || position == 'right center') {\n                offset       +=  target.margin.top;\n                distanceAway += -target.margin.left;\n              }\n              else if (position == 'top left' || position == 'top center' || position == 'top right') {\n                offset       += target.margin.left;\n                distanceAway -= target.margin.top;\n              }\n              else {\n                offset       += target.margin.left;\n                distanceAway += target.margin.top;\n              }\n            }\n\n            module.debug('Determining popup position from calculations', position, calculations);\n\n            if (module.is.rtl()) {\n              position = position.replace(/left|right/g, function (match) {\n                return (match == 'left')\n                  ? 'right'\n                  : 'left'\n                ;\n              });\n              module.debug('RTL: Popup position updated', position);\n            }\n\n            // if last attempt use specified last resort position\n            if(searchDepth == settings.maxSearchDepth && typeof settings.lastResort === 'string') {\n              position = settings.lastResort;\n            }\n\n            switch (position) {\n              case 'top left':\n                positioning = {\n                  top    : 'auto',\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + offset,\n                  right  : 'auto'\n                };\n              break;\n              case 'top center':\n                positioning = {\n                  bottom : parent.height - target.top + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  top    : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'top right':\n                positioning = {\n                  bottom :  parent.height - target.top + distanceAway,\n                  right  :  parent.width - target.left - target.width - offset,\n                  top    : 'auto',\n                  left   : 'auto'\n                };\n              break;\n              case 'left center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  right  : parent.width - target.left + distanceAway,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n              case 'right center':\n                positioning = {\n                  top    : target.top + (target.height / 2) - (popup.height / 2) + offset,\n                  left   : target.left + target.width + distanceAway,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom left':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom center':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  left   : target.left + (target.width / 2) - (popup.width / 2) + offset,\n                  bottom : 'auto',\n                  right  : 'auto'\n                };\n              break;\n              case 'bottom right':\n                positioning = {\n                  top    : target.top + target.height + distanceAway,\n                  right  : parent.width - target.left  - target.width - offset,\n                  left   : 'auto',\n                  bottom : 'auto'\n                };\n              break;\n            }\n            if(positioning === undefined) {\n              module.error(error.invalidPosition, position);\n            }\n\n            module.debug('Calculated popup positioning values', positioning);\n\n            // tentatively place on stage\n            $popup\n              .css(positioning)\n              .removeClass(className.position)\n              .addClass(position)\n              .addClass(className.loading)\n            ;\n\n            popupOffset = module.get.popupOffset();\n\n            // see if any boundaries are surpassed with this tentative position\n            distanceFromBoundary = module.get.distanceFromBoundary(popupOffset, calculations);\n\n            if( module.is.offstage(distanceFromBoundary, position) ) {\n              module.debug('Position is outside viewport', position);\n              if(searchDepth < settings.maxSearchDepth) {\n                searchDepth++;\n                position = module.get.nextPosition(position);\n                module.debug('Trying new position', position);\n                return ($popup)\n                  ? module.set.position(position, calculations)\n                  : false\n                ;\n              }\n              else {\n                if(settings.lastResort) {\n                  module.debug('No position found, showing with last position');\n                }\n                else {\n                  module.debug('Popup could not find a position to display', $popup);\n                  module.error(error.cannotPlace, element);\n                  module.remove.attempts();\n                  module.remove.loading();\n                  module.reset();\n                  settings.onUnplaceable.call($popup, element);\n                  return false;\n                }\n              }\n            }\n            module.debug('Position is on stage', position);\n            module.remove.attempts();\n            module.remove.loading();\n            if( settings.setFluidWidth && module.is.fluid() ) {\n              module.set.fluidWidth(calculations);\n            }\n            return true;\n          },\n\n          fluidWidth: function(calculations) {\n            calculations = calculations || module.get.calculations();\n            module.debug('Automatically setting element width to parent width', calculations.parent.width);\n            $popup.css('width', calculations.container.width);\n          },\n\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation && module.has.popup() ) {\n              module.verbose('Adding variation to popup', variation);\n              $popup.addClass(variation);\n            }\n          },\n\n          visible: function() {\n            $module.addClass(className.visible);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $popup.removeClass(className.loading);\n          },\n          variation: function(variation) {\n            variation = variation || module.get.variation();\n            if(variation) {\n              module.verbose('Removing variation', variation);\n              $popup.removeClass(variation);\n            }\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          attempts: function() {\n            module.verbose('Resetting all searched positions');\n            searchDepth    = 0;\n            triedPositions = false;\n          }\n        },\n\n        bind: {\n          events: function() {\n            module.debug('Binding popup events to module');\n            if(settings.on == 'click') {\n              $module\n                .on('click' + eventNamespace, module.toggle)\n              ;\n            }\n            if(settings.on == 'hover' && hasTouch) {\n              $module\n                .on('touchstart' + eventNamespace, module.event.touchstart)\n              ;\n            }\n            if( module.get.startEvent() ) {\n              $module\n                .on(module.get.startEvent() + eventNamespace, module.event.start)\n                .on(module.get.endEvent() + eventNamespace, module.event.end)\n              ;\n            }\n            if(settings.target) {\n              module.debug('Target set to element', $target);\n            }\n            $window.on('resize' + elementNamespace, module.event.resize);\n          },\n          popup: function() {\n            module.verbose('Allowing hover events on popup to prevent closing');\n            if( $popup && module.has.popup() ) {\n              $popup\n                .on('mouseenter' + eventNamespace, module.event.start)\n                .on('mouseleave' + eventNamespace, module.event.end)\n              ;\n            }\n          },\n          close: function() {\n            if(settings.hideOnScroll === true || (settings.hideOnScroll == 'auto' && settings.on != 'click')) {\n              module.bind.closeOnScroll();\n            }\n            if(settings.on == 'hover' && openedWithTouch) {\n              module.bind.touchClose();\n            }\n            if(settings.on == 'click' && settings.closable) {\n              module.bind.clickaway();\n            }\n          },\n          closeOnScroll: function() {\n            module.verbose('Binding scroll close event to document');\n            $scrollContext\n              .one(module.get.scrollEvent() + elementNamespace, module.event.hideGracefully)\n            ;\n          },\n          touchClose: function() {\n            module.verbose('Binding popup touchclose event to document');\n            $document\n              .on('touchstart' + elementNamespace, function(event) {\n                module.verbose('Touched away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          },\n          clickaway: function() {\n            module.verbose('Binding popup close event to document');\n            $document\n              .on('click' + elementNamespace, function(event) {\n                module.verbose('Clicked away from popup');\n                module.event.hideGracefully.call(element, event);\n              })\n            ;\n          }\n        },\n\n        unbind: {\n          events: function() {\n            $window\n              .off(elementNamespace)\n            ;\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          close: function() {\n            $document\n              .off(elementNamespace)\n            ;\n            $scrollContext\n              .off(elementNamespace)\n            ;\n          },\n        },\n\n        has: {\n          popup: function() {\n            return ($popup && $popup.length > 0);\n          }\n        },\n\n        is: {\n          offstage: function(distanceFromBoundary, position) {\n            var\n              offstage = []\n            ;\n            // return boundaries that have been surpassed\n            $.each(distanceFromBoundary, function(direction, distance) {\n              if(distance < -settings.jitter) {\n                module.debug('Position exceeds allowable distance from edge', direction, distance, position);\n                offstage.push(direction);\n              }\n            });\n            if(offstage.length > 0) {\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          svg: function(element) {\n            return module.supports.svg() && (element instanceof SVGGraphicsElement);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          animating: function() {\n            return ($popup !== undefined && $popup.hasClass(className.animating) );\n          },\n          fluid: function() {\n            return ($popup !== undefined && $popup.hasClass(className.fluid));\n          },\n          visible: function() {\n            return ($popup !== undefined && $popup.hasClass(className.popupVisible));\n          },\n          dropdown: function() {\n            return $module.hasClass(className.dropdown);\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          rtl: function () {\n            return $module.css('direction') == 'rtl';\n          }\n        },\n\n        reset: function() {\n          module.remove.visible();\n          if(settings.preserve) {\n            if($.fn.transition !== undefined) {\n              $popup\n                .transition('remove transition')\n              ;\n            }\n          }\n          else {\n            module.removePopup();\n          }\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.popup.settings = {\n\n  name           : 'Popup',\n\n  // module settings\n  silent         : false,\n  debug          : false,\n  verbose        : false,\n  performance    : true,\n  namespace      : 'popup',\n\n  // whether it should use dom mutation observers\n  observeChanges : true,\n\n  // callback only when element added to dom\n  onCreate       : function(){},\n\n  // callback before element removed from dom\n  onRemove       : function(){},\n\n  // callback before show animation\n  onShow         : function(){},\n\n  // callback after show animation\n  onVisible      : function(){},\n\n  // callback before hide animation\n  onHide         : function(){},\n\n  // callback when popup cannot be positioned in visible screen\n  onUnplaceable  : function(){},\n\n  // callback after hide animation\n  onHidden       : function(){},\n\n  // when to show popup\n  on             : 'hover',\n\n  // element to use to determine if popup is out of boundary\n  boundary       : window,\n\n  // whether to add touchstart events when using hover\n  addTouchEvents : true,\n\n  // default position relative to element\n  position       : 'top left',\n\n  // name of variation to use\n  variation      : '',\n\n  // whether popup should be moved to context\n  movePopup      : true,\n\n  // element which popup should be relative to\n  target         : false,\n\n  // jq selector or element that should be used as popup\n  popup          : false,\n\n  // popup should remain inline next to activator\n  inline         : false,\n\n  // popup should be removed from page on hide\n  preserve       : false,\n\n  // popup should not close when being hovered on\n  hoverable      : false,\n\n  // explicitly set content\n  content        : false,\n\n  // explicitly set html\n  html           : false,\n\n  // explicitly set title\n  title          : false,\n\n  // whether automatically close on clickaway when on click\n  closable       : true,\n\n  // automatically hide on scroll\n  hideOnScroll   : 'auto',\n\n  // hide other popups on show\n  exclusive      : false,\n\n  // context to attach popups\n  context        : 'body',\n\n  // context for binding scroll events\n  scrollContext  : window,\n\n  // position to prefer when calculating new position\n  prefer         : 'opposite',\n\n  // specify position to appear even if it doesn't fit\n  lastResort     : false,\n\n  // delay used to prevent accidental refiring of animations due to user error\n  delay        : {\n    show : 50,\n    hide : 70\n  },\n\n  // whether fluid variation should assign width explicitly\n  setFluidWidth  : true,\n\n  // transition settings\n  duration       : 200,\n  transition     : 'scale',\n\n  // distance away from activating element in px\n  distanceAway   : 0,\n\n  // number of pixels an element is allowed to be \"offstage\" for a position to be chosen (allows for rounding)\n  jitter         : 2,\n\n  // offset on aligning axis from calculated position\n  offset         : 0,\n\n  // maximum times to look for a position before failing (9 positions total)\n  maxSearchDepth : 15,\n\n  error: {\n    invalidPosition : 'The position you specified is not a valid position',\n    cannotPlace     : 'Popup does not fit within the boundaries of the viewport',\n    method          : 'The method you called is not defined.',\n    noTransition    : 'This module requires ui transitions <https://github.com/Semantic-Org/UI-Transition>',\n    notFound        : 'The target or popup you specified does not exist on the page'\n  },\n\n  metadata: {\n    activator : 'activator',\n    content   : 'content',\n    html      : 'html',\n    offset    : 'offset',\n    position  : 'position',\n    title     : 'title',\n    variation : 'variation'\n  },\n\n  className   : {\n    active       : 'active',\n    animating    : 'animating',\n    dropdown     : 'dropdown',\n    fluid        : 'fluid',\n    loading      : 'loading',\n    popup        : 'ui popup',\n    position     : 'top left center bottom right',\n    visible      : 'visible',\n    popupVisible : 'visible'\n  },\n\n  selector    : {\n    popup    : '.ui.popup'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    popup: function(text) {\n      var\n        html   = '',\n        escape = $.fn.popup.settings.templates.escape\n      ;\n      if(typeof text !== undefined) {\n        if(typeof text.title !== undefined && text.title) {\n          text.title = escape(text.title);\n          html += '<div class=\"header\">' + text.title + '</div>';\n        }\n        if(typeof text.content !== undefined && text.content) {\n          text.content = escape(text.content);\n          html += '<div class=\"content\">' + text.content + '</div>';\n        }\n      }\n      return html;\n    }\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/popup.less",
    "content": "/*!\n * # Semantic UI - Popup\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'popup';\n\n@import (multiple) '../../theme.config';\n\n\n/*******************************\n            Popup\n*******************************/\n\n.ui.popup {\n  display: none;\n  position: absolute;\n  top: 0px;\n  right: 0px;\n\n  /* Fixes content being squished when inline (moz only) */\n  min-width: min-content;\n  z-index: @zIndex;\n\n  border: @border;\n  line-height: @lineHeight;\n  max-width: @maxWidth;\n  background: @background;\n\n  padding: @verticalPadding @horizontalPadding;\n  font-weight: @fontWeight;\n  font-style: @fontStyle;\n  color: @color;\n\n  border-radius: @borderRadius;\n  box-shadow: @boxShadow;\n}\n.ui.popup > .header {\n  padding: 0em;\n\n  font-family: @headerFont;\n  font-size: @headerFontSize;\n  line-height: @headerLineHeight;\n  font-weight: bold;\n}\n.ui.popup > .header + .content {\n  padding-top: @headerDistance;\n}\n\n.ui.popup:before {\n  position: absolute;\n  content: '';\n  width: @arrowSize;\n  height: @arrowSize;\n\n  background: @arrowBackground;\n  transform: rotate(45deg);\n\n  z-index: @arrowZIndex;\n  box-shadow: @arrowBoxShadow;\n}\n\n/*******************************\n            Types\n*******************************/\n\n/*--------------\n    Tooltip\n---------------*/\n\n/* Content */\n[data-tooltip] {\n  position: relative;\n}\n\n/* Arrow */\n[data-tooltip]:before {\n  pointer-events: none;\n  position: absolute;\n  content: '';\n  font-size: @medium;\n  width: @arrowSize;\n  height: @arrowSize;\n\n  background: @tooltipArrowBackground;\n  transform: rotate(45deg);\n\n  z-index: @arrowZIndex;\n  box-shadow: @tooltipArrowBoxShadow;\n}\n\n/* Popup */\n[data-tooltip]:after {\n  pointer-events: none;\n  content: attr(data-tooltip);\n  position: absolute;\n  text-transform: none;\n  text-align: left;\n  white-space: nowrap;\n\n  font-size: @tooltipFontSize;\n\n  border: @tooltipBorder;\n  line-height: @tooltipLineHeight;\n  max-width: @tooltipMaxWidth;\n  background: @tooltipBackground;\n\n  padding: @tooltipPadding;\n  font-weight: @tooltipFontWeight;\n  font-style: @tooltipFontStyle;\n  color: @tooltipColor;\n\n  border-radius: @tooltipBorderRadius;\n  box-shadow: @tooltipBoxShadow;\n  z-index: @tooltipZIndex;\n}\n\n/* Default Position (Top Center) */\n[data-tooltip]:not([data-position]):before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: @tooltipArrowBottomBackground;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-bottom: -@tooltipArrowVerticalOffset;\n}\n[data-tooltip]:not([data-position]):after {\n  left: 50%;\n  transform: translateX(-50%);\n  bottom: 100%;\n  margin-bottom: @tooltipDistanceAway;\n}\n\n/* Animation */\n[data-tooltip]:before,\n[data-tooltip]:after {\n  pointer-events: none;\n  visibility: hidden;\n}\n[data-tooltip]:before {\n  opacity: 0;\n  transform: rotate(45deg) scale(0) !important;\n  transform-origin: center top;\n  transition:\n    all @tooltipDuration @tooltipEasing\n  ;\n}\n[data-tooltip]:after {\n  opacity: 1;\n  transform-origin: center bottom;\n  transition:\n    all @tooltipDuration @tooltipEasing\n  ;\n}\n[data-tooltip]:hover:before,\n[data-tooltip]:hover:after {\n  visibility: visible;\n  pointer-events: auto;\n}\n[data-tooltip]:hover:before {\n  transform: rotate(45deg) scale(1) !important;\n  opacity: 1;\n}\n\n/* Animation Position */\n[data-tooltip]:after,\n[data-tooltip][data-position=\"top center\"]:after,\n[data-tooltip][data-position=\"bottom center\"]:after {\n  transform: translateX(-50%) scale(0) !important;\n}\n[data-tooltip]:hover:after,\n[data-tooltip][data-position=\"bottom center\"]:hover:after {\n  transform: translateX(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"left center\"]:after,\n[data-tooltip][data-position=\"right center\"]:after {\n  transform: translateY(-50%) scale(0) !important;\n}\n[data-tooltip][data-position=\"left center\"]:hover:after,\n[data-tooltip][data-position=\"right center\"]:hover:after {\n  transform: translateY(-50%) scale(1) !important;\n}\n[data-tooltip][data-position=\"top left\"]:after,\n[data-tooltip][data-position=\"top right\"]:after,\n[data-tooltip][data-position=\"bottom left\"]:after,\n[data-tooltip][data-position=\"bottom right\"]:after {\n  transform: scale(0) !important;\n}\n[data-tooltip][data-position=\"top left\"]:hover:after,\n[data-tooltip][data-position=\"top right\"]:hover:after,\n[data-tooltip][data-position=\"bottom left\"]:hover:after,\n[data-tooltip][data-position=\"bottom right\"]:hover:after {\n  transform: scale(1) !important;\n}\n\n\n/*--------------\n    Inverted\n---------------*/\n\n/* Arrow */\n[data-tooltip][data-inverted]:before {\n  box-shadow: none !important;\n}\n\n/* Arrow Position */\n[data-tooltip][data-inverted]:before {\n  background: @invertedArrowBottomBackground;\n}\n\n/* Popup  */\n[data-tooltip][data-inverted]:after {\n  background: @tooltipInvertedBackground;\n  color: @tooltipInvertedColor;\n  border: @tooltipInvertedBorder;\n  box-shadow: @tooltipInvertedBoxShadow;\n}\n[data-tooltip][data-inverted]:after .header {\n  background-color: @tooltipInvertedHeaderBackground;\n  color: @tooltipInvertedHeaderColor;\n}\n\n/*--------------\n    Position\n---------------*/\n\n/* Top Center */\n[data-position=\"top center\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 50%;\n  bottom: 100%;\n  transform: translateX(-50%);\n  margin-bottom: @tooltipDistanceAway;\n}\n[data-position=\"top center\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: 50%;\n  background: @tooltipArrowTopBackground;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-bottom: -@tooltipArrowVerticalOffset;\n}\n\n/* Top Left */\n[data-position=\"top left\"][data-tooltip]:after {\n  top: auto;\n  right: auto;\n  left: 0;\n  bottom: 100%;\n  margin-bottom: @tooltipDistanceAway;\n}\n[data-position=\"top left\"][data-tooltip]:before {\n  top: auto;\n  right: auto;\n  bottom: 100%;\n  left: @arrowDistanceFromEdge;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-bottom: -@tooltipArrowVerticalOffset;\n}\n\n/* Top Right */\n[data-position=\"top right\"][data-tooltip]:after {\n  top: auto;\n  left: auto;\n  right: 0;\n  bottom: 100%;\n  margin-bottom: @tooltipDistanceAway;\n}\n[data-position=\"top right\"][data-tooltip]:before {\n  top: auto;\n  left: auto;\n  bottom: 100%;\n  right: @arrowDistanceFromEdge;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-bottom: -@tooltipArrowVerticalOffset;\n}\n\n\n/* Bottom Center */\n[data-position=\"bottom center\"][data-tooltip]:after {\n  bottom: auto;\n  right: auto;\n  left: 50%;\n  top: 100%;\n  transform: translateX(-50%);\n  margin-top: @tooltipDistanceAway;\n}\n[data-position=\"bottom center\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: 50%;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-top: -@tooltipArrowVerticalOffset;\n}\n\n/* Bottom Left */\n[data-position=\"bottom left\"][data-tooltip]:after {\n  left: 0;\n  top: 100%;\n  margin-top: @tooltipDistanceAway;\n}\n[data-position=\"bottom left\"][data-tooltip]:before {\n  bottom: auto;\n  right: auto;\n  top: 100%;\n  left: @arrowDistanceFromEdge;\n  margin-left: @tooltipArrowHorizontalOffset;\n  margin-top: -@tooltipArrowVerticalOffset;\n}\n\n/* Bottom Right */\n[data-position=\"bottom right\"][data-tooltip]:after {\n  right: 0;\n  top: 100%;\n  margin-top: @tooltipDistanceAway;\n}\n[data-position=\"bottom right\"][data-tooltip]:before {\n  bottom: auto;\n  left: auto;\n  top: 100%;\n  right: @arrowDistanceFromEdge;\n  margin-left: @tooltipArrowVerticalOffset;\n  margin-top: -@tooltipArrowHorizontalOffset;\n}\n\n/* Left Center */\n[data-position=\"left center\"][data-tooltip]:after {\n  right: 100%;\n  top: 50%;\n  margin-right: @tooltipDistanceAway;\n  transform: translateY(-50%);\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  right: 100%;\n  top: 50%;\n  margin-top: @tooltipArrowVerticalOffset;\n  margin-right: @tooltipArrowHorizontalOffset;\n}\n\n/* Right Center */\n[data-position=\"right center\"][data-tooltip]:after {\n  left: 100%;\n  top: 50%;\n  margin-left: @tooltipDistanceAway;\n  transform: translateY(-50%);\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  left: 100%;\n  top: 50%;\n  margin-top: @tooltipArrowHorizontalOffset;\n  margin-left: -@tooltipArrowVerticalOffset;\n}\n\n/* Arrow */\n[data-position~=\"bottom\"][data-tooltip]:before {\n  background: @arrowTopBackground;\n  box-shadow: @bottomArrowBoxShadow;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  background: @arrowCenterBackground;\n  box-shadow: @leftArrowBoxShadow;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  background: @arrowCenterBackground;\n  box-shadow: @rightArrowBoxShadow;\n}\n[data-position~=\"top\"][data-tooltip]:before {\n  background: @arrowBottomBackground;\n}\n\n/* Inverted Arrow Color */\n[data-inverted][data-position~=\"bottom\"][data-tooltip]:before {\n  background: @invertedArrowTopBackground;\n  box-shadow: @bottomArrowBoxShadow;\n}\n[data-inverted][data-position=\"left center\"][data-tooltip]:before {\n  background: @invertedArrowCenterBackground;\n  box-shadow: @leftArrowBoxShadow;\n}\n[data-inverted][data-position=\"right center\"][data-tooltip]:before {\n  background: @invertedArrowCenterBackground;\n  box-shadow: @rightArrowBoxShadow;\n}\n[data-inverted][data-position~=\"top\"][data-tooltip]:before {\n  background: @invertedArrowBottomBackground;\n}\n\n[data-position~=\"bottom\"][data-tooltip]:before {\n  transform-origin: center bottom;\n}\n[data-position~=\"bottom\"][data-tooltip]:after {\n  transform-origin: center top;\n}\n[data-position=\"left center\"][data-tooltip]:before {\n  transform-origin: top center;\n}\n[data-position=\"left center\"][data-tooltip]:after {\n  transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:before {\n  transform-origin: right center;\n}\n[data-position=\"right center\"][data-tooltip]:after {\n  transform-origin: left center;\n}\n\n/*--------------\n     Spacing\n---------------*/\n\n.ui.popup {\n  margin: 0em;\n}\n\n/* Extending from Top */\n.ui.top.popup {\n  margin: 0em 0em @popupDistanceAway;\n}\n.ui.top.left.popup {\n  transform-origin: left bottom;\n}\n.ui.top.center.popup {\n  transform-origin: center bottom;\n}\n.ui.top.right.popup {\n  transform-origin: right bottom;\n}\n\n/* Extending from Vertical Center */\n.ui.left.center.popup {\n  margin: 0em @popupDistanceAway 0em 0em;\n  transform-origin: right 50%;\n}\n.ui.right.center.popup {\n  margin: 0em 0em 0em @popupDistanceAway;\n  transform-origin: left 50%;\n}\n\n/* Extending from Bottom */\n.ui.bottom.popup {\n  margin: @popupDistanceAway 0em 0em;\n}\n.ui.bottom.left.popup {\n  transform-origin: left top;\n}\n.ui.bottom.center.popup {\n  transform-origin: center top;\n}\n.ui.bottom.right.popup {\n  transform-origin: right top;\n}\n\n/*--------------\n     Pointer\n---------------*/\n\n/*--- Below ---*/\n.ui.bottom.center.popup:before {\n  margin-left: @arrowOffset;\n  top: @arrowOffset;\n  left: 50%;\n  right: auto;\n  bottom: auto;\n  box-shadow: @bottomArrowBoxShadow;\n}\n\n.ui.bottom.left.popup {\n  margin-left: @boxArrowOffset;\n}\n/*rtl:rename*/\n.ui.bottom.left.popup:before {\n  top: @arrowOffset;\n  left: @arrowDistanceFromEdge;\n  right: auto;\n  bottom: auto;\n  margin-left: 0em;\n  box-shadow: @bottomArrowBoxShadow;\n}\n\n.ui.bottom.right.popup {\n  margin-right: @boxArrowOffset;\n}\n/*rtl:rename*/\n.ui.bottom.right.popup:before {\n  top: @arrowOffset;\n  right: @arrowDistanceFromEdge;\n  bottom: auto;\n  left: auto;\n  margin-left: 0em;\n  box-shadow: @bottomArrowBoxShadow;\n}\n\n/*--- Above ---*/\n.ui.top.center.popup:before {\n  top: auto;\n  right: auto;\n  bottom: @arrowOffset;\n  left: 50%;\n  margin-left: @arrowOffset;\n}\n.ui.top.left.popup {\n  margin-left: @boxArrowOffset;\n}\n/*rtl:rename*/\n.ui.top.left.popup:before {\n  bottom: @arrowOffset;\n  left: @arrowDistanceFromEdge;\n  top: auto;\n  right: auto;\n  margin-left: 0em;\n}\n.ui.top.right.popup {\n  margin-right: @boxArrowOffset;\n}\n/*rtl:rename*/\n.ui.top.right.popup:before {\n  bottom: @arrowOffset;\n  right: @arrowDistanceFromEdge;\n  top: auto;\n  left: auto;\n  margin-left: 0em;\n}\n\n/*--- Left Center ---*/\n/*rtl:rename*/\n.ui.left.center.popup:before {\n  top: 50%;\n  right: @arrowOffset;\n  bottom: auto;\n  left: auto;\n  margin-top: @arrowOffset;\n  box-shadow: @leftArrowBoxShadow;\n}\n\n/*--- Right Center  ---*/\n/*rtl:rename*/\n.ui.right.center.popup:before {\n  top: 50%;\n  left: @arrowOffset;\n  bottom: auto;\n  right: auto;\n  margin-top: @arrowOffset;\n  box-shadow: @rightArrowBoxShadow;\n}\n\n/* Arrow Color By Location */\n.ui.bottom.popup:before {\n  background: @arrowTopBackground;\n}\n.ui.right.center.popup:before,\n.ui.left.center.popup:before {\n  background: @arrowCenterBackground;\n}\n.ui.top.popup:before {\n  background: @arrowBottomBackground;\n}\n\n/* Inverted Arrow Color */\n.ui.inverted.bottom.popup:before {\n  background: @invertedArrowTopBackground;\n}\n.ui.inverted.right.center.popup:before,\n.ui.inverted.left.center.popup:before {\n  background: @invertedArrowCenterBackground;\n}\n.ui.inverted.top.popup:before {\n  background: @invertedArrowBottomBackground;\n}\n\n\n/*******************************\n            Coupling\n*******************************/\n\n/* Immediate Nested Grid */\n.ui.popup > .ui.grid:not(.padded) {\n  width: @nestedGridWidth;\n  margin: @nestedGridMargin;\n}\n\n/*******************************\n            States\n*******************************/\n\n.ui.loading.popup {\n  display: block;\n  visibility: hidden;\n  z-index: @loadingZIndex;\n}\n\n.ui.animating.popup,\n.ui.visible.popup {\n  display: block;\n}\n\n.ui.visible.popup {\n  transform: translateZ(0px);\n  backface-visibility: hidden;\n}\n\n\n/*******************************\n            Variations\n*******************************/\n\n/*--------------\n     Basic\n---------------*/\n\n.ui.basic.popup:before {\n  display: none;\n}\n\n\n/*--------------\n     Wide\n---------------*/\n\n.ui.wide.popup {\n  max-width: @wideWidth;\n}\n.ui[class*=\"very wide\"].popup {\n  max-width: @veryWideWidth;\n}\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.wide.popup,\n  .ui[class*=\"very wide\"].popup {\n    max-width: @maxWidth;\n  }\n}\n\n\n/*--------------\n     Fluid\n---------------*/\n\n.ui.fluid.popup {\n  width: 100%;\n  max-width: none;\n}\n\n\n/*--------------\n     Colors\n---------------*/\n\n/* Inverted colors  */\n.ui.inverted.popup {\n  background: @invertedBackground;\n  color: @invertedColor;\n  border: @invertedBorder;\n  box-shadow: @invertedBoxShadow;\n}\n.ui.inverted.popup .header {\n  background-color: @invertedHeaderBackground;\n  color: @invertedHeaderColor;\n}\n.ui.inverted.popup:before {\n  background-color: @invertedArrowColor;\n  box-shadow: none !important;\n}\n\n/*--------------\n     Flowing\n---------------*/\n\n.ui.flowing.popup {\n  max-width: none;\n}\n\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.mini.popup {\n  font-size: @mini;\n}\n.ui.tiny.popup {\n  font-size: @tiny;\n}\n.ui.small.popup {\n  font-size: @small;\n}\n.ui.popup {\n  font-size: @medium;\n}\n.ui.large.popup {\n  font-size: @large;\n}\n.ui.huge.popup {\n  font-size: @huge;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/progress.js",
    "content": "/*!\n * # Semantic UI - Progress\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\nvar\n  global = (typeof window != 'undefined' && window.Math == Math)\n    ? window\n    : (typeof self != 'undefined' && self.Math == Math)\n      ? self\n      : Function('return this')()\n;\n\n$.fn.progress = function(parameters) {\n  var\n    $allModules    = $(this),\n\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.progress.settings, parameters)\n          : $.extend({}, $.fn.progress.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        namespace       = settings.namespace,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $bar            = $(this).find(selector.bar),\n        $progress       = $(this).find(selector.progress),\n        $label          = $(this).find(selector.label),\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        animating = false,\n        transitionEnd,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing progress bar', settings);\n\n          module.set.duration();\n          module.set.transitionEvent();\n\n          module.read.metadata();\n          module.read.settings();\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of progress', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying previous progress for', $module);\n          clearInterval(instance.interval);\n          module.remove.state();\n          $module.removeData(moduleNamespace);\n          instance = undefined;\n        },\n\n        reset: function() {\n          module.remove.nextValue();\n          module.update.progress(0);\n        },\n\n        complete: function() {\n          if(module.percent === undefined || module.percent < 100) {\n            module.remove.progressPoll();\n            module.set.percent(100);\n          }\n        },\n\n        read: {\n          metadata: function() {\n            var\n              data = {\n                percent : $module.data(metadata.percent),\n                total   : $module.data(metadata.total),\n                value   : $module.data(metadata.value)\n              }\n            ;\n            if(data.percent) {\n              module.debug('Current percent value set from metadata', data.percent);\n              module.set.percent(data.percent);\n            }\n            if(data.total) {\n              module.debug('Total value set from metadata', data.total);\n              module.set.total(data.total);\n            }\n            if(data.value) {\n              module.debug('Current value set from metadata', data.value);\n              module.set.value(data.value);\n              module.set.progress(data.value);\n            }\n          },\n          settings: function() {\n            if(settings.total !== false) {\n              module.debug('Current total set in settings', settings.total);\n              module.set.total(settings.total);\n            }\n            if(settings.value !== false) {\n              module.debug('Current value set in settings', settings.value);\n              module.set.value(settings.value);\n              module.set.progress(module.value);\n            }\n            if(settings.percent !== false) {\n              module.debug('Current percent set in settings', settings.percent);\n              module.set.percent(settings.percent);\n            }\n          }\n        },\n\n        bind: {\n          transitionEnd: function(callback) {\n            var\n              transitionEnd = module.get.transitionEnd()\n            ;\n            $bar\n              .one(transitionEnd + eventNamespace, function(event) {\n                clearTimeout(module.failSafeTimer);\n                callback.call(this, event);\n              })\n            ;\n            module.failSafeTimer = setTimeout(function() {\n              $bar.triggerHandler(transitionEnd);\n            }, settings.duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        increment: function(incrementValue) {\n          var\n            maxValue,\n            startValue,\n            newValue\n          ;\n          if( module.has.total() ) {\n            startValue     = module.get.value();\n            incrementValue = incrementValue || 1;\n            newValue       = startValue + incrementValue;\n          }\n          else {\n            startValue     = module.get.percent();\n            incrementValue = incrementValue || module.get.randomValue();\n\n            newValue       = startValue + incrementValue;\n            maxValue       = 100;\n            module.debug('Incrementing percentage by', startValue, newValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n        decrement: function(decrementValue) {\n          var\n            total     = module.get.total(),\n            startValue,\n            newValue\n          ;\n          if(total) {\n            startValue     =  module.get.value();\n            decrementValue =  decrementValue || 1;\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing value by', decrementValue, startValue);\n          }\n          else {\n            startValue     =  module.get.percent();\n            decrementValue =  decrementValue || module.get.randomValue();\n            newValue       =  startValue - decrementValue;\n            module.debug('Decrementing percentage by', decrementValue, startValue);\n          }\n          newValue = module.get.normalizedValue(newValue);\n          module.set.progress(newValue);\n        },\n\n        has: {\n          progressPoll: function() {\n            return module.progressPoll;\n          },\n          total: function() {\n            return (module.get.total() !== false);\n          }\n        },\n\n        get: {\n          text: function(templateText) {\n            var\n              value   = module.value                || 0,\n              total   = module.total                || 0,\n              percent = (animating)\n                ? module.get.displayPercent()\n                : module.percent || 0,\n              left = (module.total > 0)\n                ? (total - value)\n                : (100 - percent)\n            ;\n            templateText = templateText || '';\n            templateText = templateText\n              .replace('{value}', value)\n              .replace('{total}', total)\n              .replace('{left}', left)\n              .replace('{percent}', percent)\n            ;\n            module.verbose('Adding variables to progress bar text', templateText);\n            return templateText;\n          },\n\n          normalizedValue: function(value) {\n            if(value < 0) {\n              module.debug('Value cannot decrement below 0');\n              return 0;\n            }\n            if(module.has.total()) {\n              if(value > module.total) {\n                module.debug('Value cannot increment above total', module.total);\n                return module.total;\n              }\n            }\n            else if(value > 100 ) {\n              module.debug('Value cannot increment above 100 percent');\n              return 100;\n            }\n            return value;\n          },\n\n          updateInterval: function() {\n            if(settings.updateInterval == 'auto') {\n              return settings.duration;\n            }\n            return settings.updateInterval;\n          },\n\n          randomValue: function() {\n            module.debug('Generating random increment percentage');\n            return Math.floor((Math.random() * settings.random.max) + settings.random.min);\n          },\n\n          numericValue: function(value) {\n            return (typeof value === 'string')\n              ? (value.replace(/[^\\d.]/g, '') !== '')\n                ? +(value.replace(/[^\\d.]/g, ''))\n                : false\n              : value\n            ;\n          },\n\n          transitionEnd: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          // gets current displayed percentage (if animating values this is the intermediary value)\n          displayPercent: function() {\n            var\n              barWidth       = $bar.width(),\n              totalWidth     = $module.width(),\n              minDisplay     = parseInt($bar.css('min-width'), 10),\n              displayPercent = (barWidth > minDisplay)\n                ? (barWidth / totalWidth * 100)\n                : module.percent\n            ;\n            return (settings.precision > 0)\n              ? Math.round(displayPercent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(displayPercent)\n            ;\n          },\n\n          percent: function() {\n            return module.percent || 0;\n          },\n          value: function() {\n            return module.nextValue || module.value || 0;\n          },\n          total: function() {\n            return module.total || false;\n          }\n        },\n\n        create: {\n          progressPoll: function() {\n            module.progressPoll = setTimeout(function() {\n              module.update.toNextValue();\n              module.remove.progressPoll();\n            }, module.get.updateInterval());\n          },\n        },\n\n        is: {\n          complete: function() {\n            return module.is.success() || module.is.warning() || module.is.error();\n          },\n          success: function() {\n            return $module.hasClass(className.success);\n          },\n          warning: function() {\n            return $module.hasClass(className.warning);\n          },\n          error: function() {\n            return $module.hasClass(className.error);\n          },\n          active: function() {\n            return $module.hasClass(className.active);\n          },\n          visible: function() {\n            return $module.is(':visible');\n          }\n        },\n\n        remove: {\n          progressPoll: function() {\n            module.verbose('Removing progress poll timer');\n            if(module.progressPoll) {\n              clearTimeout(module.progressPoll);\n              delete module.progressPoll;\n            }\n          },\n          nextValue: function() {\n            module.verbose('Removing progress value stored for next update');\n            delete module.nextValue;\n          },\n          state: function() {\n            module.verbose('Removing stored state');\n            delete module.total;\n            delete module.percent;\n            delete module.value;\n          },\n          active: function() {\n            module.verbose('Removing active state');\n            $module.removeClass(className.active);\n          },\n          success: function() {\n            module.verbose('Removing success state');\n            $module.removeClass(className.success);\n          },\n          warning: function() {\n            module.verbose('Removing warning state');\n            $module.removeClass(className.warning);\n          },\n          error: function() {\n            module.verbose('Removing error state');\n            $module.removeClass(className.error);\n          }\n        },\n\n        set: {\n          barWidth: function(value) {\n            if(value > 100) {\n              module.error(error.tooHigh, value);\n            }\n            else if (value < 0) {\n              module.error(error.tooLow, value);\n            }\n            else {\n              $bar\n                .css('width', value + '%')\n              ;\n              $module\n                .attr('data-percent', parseInt(value, 10))\n              ;\n            }\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting progress bar transition duration', duration);\n            $bar\n              .css({\n                'transition-duration':  duration\n              })\n            ;\n          },\n          percent: function(percent) {\n            percent = (typeof percent == 'string')\n              ? +(percent.replace('%', ''))\n              : percent\n            ;\n            // round display percentage\n            percent = (settings.precision > 0)\n              ? Math.round(percent * (10 * settings.precision)) / (10 * settings.precision)\n              : Math.round(percent)\n            ;\n            module.percent = percent;\n            if( !module.has.total() ) {\n              module.value = (settings.precision > 0)\n                ? Math.round( (percent / 100) * module.total * (10 * settings.precision)) / (10 * settings.precision)\n                : Math.round( (percent / 100) * module.total * 10) / 10\n              ;\n              if(settings.limitValues) {\n                module.value = (module.value > 100)\n                  ? 100\n                  : (module.value < 0)\n                    ? 0\n                    : module.value\n                ;\n              }\n            }\n            module.set.barWidth(percent);\n            module.set.labelInterval();\n            module.set.labels();\n            settings.onChange.call(element, percent, module.value, module.total);\n          },\n          labelInterval: function() {\n            var\n              animationCallback = function() {\n                module.verbose('Bar finished animating, removing continuous label updates');\n                clearInterval(module.interval);\n                animating = false;\n                module.set.labels();\n              }\n            ;\n            clearInterval(module.interval);\n            module.bind.transitionEnd(animationCallback);\n            animating = true;\n            module.interval = setInterval(function() {\n              var\n                isInDOM = $.contains(document.documentElement, element)\n              ;\n              if(!isInDOM) {\n                clearInterval(module.interval);\n                animating = false;\n              }\n              module.set.labels();\n            }, settings.framerate);\n          },\n          labels: function() {\n            module.verbose('Setting both bar progress and outer label text');\n            module.set.barLabel();\n            module.set.state();\n          },\n          label: function(text) {\n            text = text || '';\n            if(text) {\n              text = module.get.text(text);\n              module.verbose('Setting label to text', text);\n              $label.text(text);\n            }\n          },\n          state: function(percent) {\n            percent = (percent !== undefined)\n              ? percent\n              : module.percent\n            ;\n            if(percent === 100) {\n              if(settings.autoSuccess && !(module.is.warning() || module.is.error() || module.is.success())) {\n                module.set.success();\n                module.debug('Automatically triggering success at 100%');\n              }\n              else {\n                module.verbose('Reached 100% removing active state');\n                module.remove.active();\n                module.remove.progressPoll();\n              }\n            }\n            else if(percent > 0) {\n              module.verbose('Adjusting active progress bar label', percent);\n              module.set.active();\n            }\n            else {\n              module.remove.active();\n              module.set.label(settings.text.active);\n            }\n          },\n          barLabel: function(text) {\n            if(text !== undefined) {\n              $progress.text( module.get.text(text) );\n            }\n            else if(settings.label == 'ratio' && module.total) {\n              module.verbose('Adding ratio to bar label');\n              $progress.text( module.get.text(settings.text.ratio) );\n            }\n            else if(settings.label == 'percent') {\n              module.verbose('Adding percentage to bar label');\n              $progress.text( module.get.text(settings.text.percent) );\n            }\n          },\n          active: function(text) {\n            text = text || settings.text.active;\n            module.debug('Setting active state');\n            if(settings.showActivity && !module.is.active() ) {\n              $module.addClass(className.active);\n            }\n            module.remove.warning();\n            module.remove.error();\n            module.remove.success();\n            text = settings.onLabelUpdate('active', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onActive.call(element, module.value, module.total);\n            });\n          },\n          success : function(text) {\n            text = text || settings.text.success || settings.text.active;\n            module.debug('Setting success state');\n            $module.addClass(className.success);\n            module.remove.active();\n            module.remove.warning();\n            module.remove.error();\n            module.complete();\n            if(settings.text.success) {\n              text = settings.onLabelUpdate('success', text, module.value, module.total);\n              module.set.label(text);\n            }\n            else {\n              text = settings.onLabelUpdate('active', text, module.value, module.total);\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onSuccess.call(element, module.total);\n            });\n          },\n          warning : function(text) {\n            text = text || settings.text.warning;\n            module.debug('Setting warning state');\n            $module.addClass(className.warning);\n            module.remove.active();\n            module.remove.success();\n            module.remove.error();\n            module.complete();\n            text = settings.onLabelUpdate('warning', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onWarning.call(element, module.value, module.total);\n            });\n          },\n          error : function(text) {\n            text = text || settings.text.error;\n            module.debug('Setting error state');\n            $module.addClass(className.error);\n            module.remove.active();\n            module.remove.success();\n            module.remove.warning();\n            module.complete();\n            text = settings.onLabelUpdate('error', text, module.value, module.total);\n            if(text) {\n              module.set.label(text);\n            }\n            module.bind.transitionEnd(function() {\n              settings.onError.call(element, module.value, module.total);\n            });\n          },\n          transitionEvent: function() {\n            transitionEnd = module.get.transitionEnd();\n          },\n          total: function(totalValue) {\n            module.total = totalValue;\n          },\n          value: function(value) {\n            module.value = value;\n          },\n          progress: function(value) {\n            if(!module.has.progressPoll()) {\n              module.debug('First update in progress update interval, immediately updating', value);\n              module.update.progress(value);\n              module.create.progressPoll();\n            }\n            else {\n              module.debug('Updated within interval, setting next update to use new value', value);\n              module.set.nextValue(value);\n            }\n          },\n          nextValue: function(value) {\n            module.nextValue = value;\n          }\n        },\n\n        update: {\n          toNextValue: function() {\n            var\n              nextValue = module.nextValue\n            ;\n            if(nextValue) {\n              module.debug('Update interval complete using last updated value', nextValue);\n              module.update.progress(nextValue);\n              module.remove.nextValue();\n            }\n          },\n          progress: function(value) {\n            var\n              percentComplete\n            ;\n            value = module.get.numericValue(value);\n            if(value === false) {\n              module.error(error.nonNumeric, value);\n            }\n            value = module.get.normalizedValue(value);\n            if( module.has.total() ) {\n              module.set.value(value);\n              percentComplete = (value / module.total) * 100;\n              module.debug('Calculating percent complete from total', percentComplete);\n              module.set.percent( percentComplete );\n            }\n            else {\n              percentComplete = value;\n              module.debug('Setting value to exact percentage value', percentComplete);\n              module.set.percent( percentComplete );\n            }\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.progress.settings = {\n\n  name         : 'Progress',\n  namespace    : 'progress',\n\n  silent       : false,\n  debug        : false,\n  verbose      : false,\n  performance  : true,\n\n  random       : {\n    min : 2,\n    max : 5\n  },\n\n  duration       : 300,\n\n  updateInterval : 'auto',\n\n  autoSuccess    : true,\n  showActivity   : true,\n  limitValues    : true,\n\n  label          : 'percent',\n  precision      : 0,\n  framerate      : (1000 / 30), /// 30 fps\n\n  percent        : false,\n  total          : false,\n  value          : false,\n\n  // delay in ms for fail safe animation callback\n  failSafeDelay : 100,\n\n  onLabelUpdate : function(state, text, value, total){\n    return text;\n  },\n  onChange      : function(percent, value, total){},\n  onSuccess     : function(total){},\n  onActive      : function(value, total){},\n  onError       : function(value, total){},\n  onWarning     : function(value, total){},\n\n  error    : {\n    method     : 'The method you called is not defined.',\n    nonNumeric : 'Progress value is non numeric',\n    tooHigh    : 'Value specified is above 100%',\n    tooLow     : 'Value specified is below 0%'\n  },\n\n  regExp: {\n    variable: /\\{\\$*[A-z0-9]+\\}/g\n  },\n\n  metadata: {\n    percent : 'percent',\n    total   : 'total',\n    value   : 'value'\n  },\n\n  selector : {\n    bar      : '> .bar',\n    label    : '> .label',\n    progress : '.bar > .progress'\n  },\n\n  text : {\n    active  : false,\n    error   : false,\n    success : false,\n    warning : false,\n    percent : '{percent}%',\n    ratio   : '{value} of {total}'\n  },\n\n  className : {\n    active  : 'active',\n    error   : 'error',\n    success : 'success',\n    warning : 'warning'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/progress.less",
    "content": "/*!\n * # Semantic UI - Progress Bar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'progress';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Progress\n*******************************/\n\n.ui.progress {\n  position: relative;\n  display: block;\n  max-width: 100%;\n  border: @border;\n  margin: @margin;\n  box-shadow: @boxShadow;\n  background: @background;\n  padding: @padding;\n  border-radius: @borderRadius;\n}\n\n.ui.progress:first-child {\n  margin: @firstMargin;\n}\n.ui.progress:last-child {\n  margin: @lastMargin;\n}\n\n/*******************************\n            Content\n*******************************/\n\n/* Activity Bar */\n.ui.progress .bar {\n  display: block;\n  line-height: 1;\n  position: @barPosition;\n  width: @barInitialWidth;\n  min-width: @barMinWidth;\n  background: @barBackground;\n  border-radius: @barBorderRadius;\n  transition: @barTransition;\n}\n\n/* Percent Complete */\n.ui.progress .bar > .progress {\n  white-space: nowrap;\n  position: @progressPosition;\n  width: @progressWidth;\n  font-size: @progressSize;\n  top: @progressTop;\n  right: @progressRight;\n  left: @progressLeft;\n  bottom: @progressBottom;\n  color: @progressColor;\n  text-shadow: @progressTextShadow;\n  margin-top: @progressOffset;\n  font-weight: @progressFontWeight;\n  text-align: @progressTextAlign;\n}\n\n/* Label */\n.ui.progress > .label {\n  position: absolute;\n  width: @labelWidth;\n  font-size: @labelSize;\n  top: @labelTop;\n  right: @labelRight;\n  left: @labelLeft;\n  bottom: @labelBottom;\n  color: @labelColor;\n  font-weight: @labelFontWeight;\n  text-shadow: @labelTextShadow;\n  margin-top: @labelOffset;\n  text-align: @labelTextAlign;\n  transition: @labelTransition;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n\n/* Indicating */\n.ui.indicating.progress[data-percent^=\"1\"] .bar,\n.ui.indicating.progress[data-percent^=\"2\"] .bar {\n  background-color: @indicatingFirstColor;\n}\n.ui.indicating.progress[data-percent^=\"3\"] .bar {\n  background-color: @indicatingSecondColor;\n}\n.ui.indicating.progress[data-percent^=\"4\"] .bar,\n.ui.indicating.progress[data-percent^=\"5\"] .bar {\n  background-color: @indicatingThirdColor;\n}\n.ui.indicating.progress[data-percent^=\"6\"] .bar {\n  background-color: @indicatingFourthColor;\n}\n.ui.indicating.progress[data-percent^=\"7\"] .bar,\n.ui.indicating.progress[data-percent^=\"8\"] .bar {\n  background-color: @indicatingFifthColor;\n}\n.ui.indicating.progress[data-percent^=\"9\"] .bar,\n.ui.indicating.progress[data-percent^=\"100\"] .bar {\n  background-color: @indicatingSixthColor;\n}\n\n/* Indicating Label */\n.ui.indicating.progress[data-percent^=\"1\"] .label,\n.ui.indicating.progress[data-percent^=\"2\"] .label {\n  color: @indicatingFirstLabelColor;\n}\n.ui.indicating.progress[data-percent^=\"3\"] .label {\n  color: @indicatingSecondLabelColor;\n}\n.ui.indicating.progress[data-percent^=\"4\"] .label,\n.ui.indicating.progress[data-percent^=\"5\"] .label {\n  color: @indicatingThirdLabelColor;\n}\n.ui.indicating.progress[data-percent^=\"6\"] .label {\n  color: @indicatingFourthLabelColor;\n}\n.ui.indicating.progress[data-percent^=\"7\"] .label,\n.ui.indicating.progress[data-percent^=\"8\"] .label {\n  color: @indicatingFifthLabelColor;\n}\n.ui.indicating.progress[data-percent^=\"9\"] .label,\n.ui.indicating.progress[data-percent^=\"100\"] .label {\n  color: @indicatingSixthLabelColor;\n}\n\n/* Single Digits */\n.ui.indicating.progress[data-percent=\"1\"] .bar,\n.ui.indicating.progress[data-percent=\"2\"] .bar,\n.ui.indicating.progress[data-percent=\"3\"] .bar,\n.ui.indicating.progress[data-percent=\"4\"] .bar,\n.ui.indicating.progress[data-percent=\"5\"] .bar,\n.ui.indicating.progress[data-percent=\"6\"] .bar,\n.ui.indicating.progress[data-percent=\"7\"] .bar,\n.ui.indicating.progress[data-percent=\"8\"] .bar,\n.ui.indicating.progress[data-percent=\"9\"] .bar {\n  background-color: @indicatingFirstColor;\n}\n.ui.indicating.progress[data-percent=\"1\"] .label,\n.ui.indicating.progress[data-percent=\"2\"] .label,\n.ui.indicating.progress[data-percent=\"3\"] .label,\n.ui.indicating.progress[data-percent=\"4\"] .label,\n.ui.indicating.progress[data-percent=\"5\"] .label,\n.ui.indicating.progress[data-percent=\"6\"] .label,\n.ui.indicating.progress[data-percent=\"7\"] .label,\n.ui.indicating.progress[data-percent=\"8\"] .label,\n.ui.indicating.progress[data-percent=\"9\"] .label {\n  color: @indicatingFirstLabelColor;\n}\n\n/* Indicating Success */\n.ui.indicating.progress.success .label {\n  color: @successHeaderColor;\n}\n\n/*******************************\n             States\n*******************************/\n\n\n/*--------------\n     Success\n---------------*/\n\n.ui.progress.success .bar {\n  background-color: @successColor !important;\n}\n.ui.progress.success .bar,\n.ui.progress.success .bar::after {\n  animation: none !important;\n}\n.ui.progress.success > .label {\n  color: @successHeaderColor;\n}\n\n/*--------------\n     Warning\n---------------*/\n\n.ui.progress.warning .bar {\n  background-color: @warningColor !important;\n}\n.ui.progress.warning .bar,\n.ui.progress.warning .bar::after {\n  animation: none !important;\n}\n.ui.progress.warning > .label {\n  color: @warningHeaderColor;\n}\n\n/*--------------\n     Error\n---------------*/\n\n.ui.progress.error .bar {\n  background-color: @errorColor !important;\n}\n.ui.progress.error .bar,\n.ui.progress.error .bar::after {\n  animation: none !important;\n}\n.ui.progress.error > .label {\n  color: @errorHeaderColor;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.active.progress .bar {\n  position: relative;\n  min-width: @activeMinWidth;\n}\n.ui.active.progress .bar::after {\n  content: '';\n  opacity: 0;\n\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  right: 0px;\n  bottom: 0px;\n  background: @activePulseColor;\n\n  border-radius: @barBorderRadius;\n\n  animation: progress-active @activePulseDuration @defaultEasing infinite;\n}\n@keyframes progress-active {\n  0% {\n    opacity: @activePulseMaxOpacity;\n    width: 0;\n  }\n  90% {\n  }\n  100% {\n    opacity: 0;\n    width: 100%;\n  }\n}\n\n/*--------------\n    Disabled\n---------------*/\n\n.ui.disabled.progress {\n  opacity: 0.35;\n}\n.ui.disabled.progress .bar,\n.ui.disabled.progress .bar::after {\n  animation: none !important;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.progress {\n  background: @invertedBackground;\n  border: @invertedBorder;\n}\n.ui.inverted.progress .bar {\n  background: @invertedBarBackground;\n}\n.ui.inverted.progress .bar > .progress {\n  color: @invertedProgressColor;\n}\n.ui.inverted.progress > .label {\n  color: @invertedLabelColor;\n}\n.ui.inverted.progress.success > .label {\n  color: @successColor;\n}\n.ui.inverted.progress.warning > .label {\n  color: @warningColor;\n}\n.ui.inverted.progress.error > .label {\n  color: @errorColor;\n}\n\n/*--------------\n    Attached\n---------------*/\n\n/* bottom attached */\n.ui.progress.attached {\n  background: @attachedBackground;\n  position: relative;\n  border: none;\n  margin: 0em;\n}\n.ui.progress.attached,\n.ui.progress.attached .bar {\n  display: block;\n  height: @attachedHeight;\n  padding: 0px;\n  overflow: hidden;\n  border-radius: 0em 0em @attachedBorderRadius @attachedBorderRadius;\n}\n.ui.progress.attached .bar {\n  border-radius: 0em;\n}\n\n/* top attached */\n.ui.progress.top.attached,\n.ui.progress.top.attached .bar {\n  top: 0px;\n  border-radius: @attachedBorderRadius @attachedBorderRadius 0em 0em;\n}\n.ui.progress.top.attached .bar {\n  border-radius: 0em;\n}\n\n/* Coupling */\n.ui.segment > .ui.attached.progress,\n.ui.card > .ui.attached.progress {\n  position: absolute;\n  top: auto;\n  left: 0;\n  bottom: 100%;\n  width: 100%;\n}\n.ui.segment > .ui.bottom.attached.progress,\n.ui.card > .ui.bottom.attached.progress {\n  top: 100%;\n  bottom: auto;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n/* Red */\n.ui.red.progress .bar {\n  background-color: @red;\n}\n.ui.red.inverted.progress .bar {\n  background-color: @lightRed;\n}\n\n/* Orange */\n.ui.orange.progress .bar {\n  background-color: @orange;\n}\n.ui.orange.inverted.progress .bar {\n  background-color: @lightOrange;\n}\n\n/* Yellow */\n.ui.yellow.progress .bar {\n  background-color: @yellow;\n}\n.ui.yellow.inverted.progress .bar {\n  background-color: @lightYellow;\n}\n\n/* Olive */\n.ui.olive.progress .bar {\n  background-color: @olive;\n}\n.ui.olive.inverted.progress .bar {\n  background-color: @lightOlive;\n}\n\n/* Green */\n.ui.green.progress .bar {\n  background-color: @green;\n}\n.ui.green.inverted.progress .bar {\n  background-color: @lightGreen;\n}\n\n/* Teal */\n.ui.teal.progress .bar {\n  background-color: @teal;\n}\n.ui.teal.inverted.progress .bar {\n  background-color: @lightTeal;\n}\n\n/* Blue */\n.ui.blue.progress .bar {\n  background-color: @blue;\n}\n.ui.blue.inverted.progress .bar {\n  background-color: @lightBlue;\n}\n\n/* Violet */\n.ui.violet.progress .bar {\n  background-color: @violet;\n}\n.ui.violet.inverted.progress .bar {\n  background-color: @lightViolet;\n}\n\n/* Purple */\n.ui.purple.progress .bar {\n  background-color: @purple;\n}\n.ui.purple.inverted.progress .bar {\n  background-color: @lightPurple;\n}\n\n/* Pink */\n.ui.pink.progress .bar {\n  background-color: @pink;\n}\n.ui.pink.inverted.progress .bar {\n  background-color: @lightPink;\n}\n\n/* Brown */\n.ui.brown.progress .bar {\n  background-color: @brown;\n}\n.ui.brown.inverted.progress .bar {\n  background-color: @lightBrown;\n}\n\n/* Grey */\n.ui.grey.progress .bar {\n  background-color: @grey;\n}\n.ui.grey.inverted.progress .bar {\n  background-color: @lightGrey;\n}\n\n/* Black */\n.ui.black.progress .bar {\n  background-color: @black;\n}\n.ui.black.inverted.progress .bar {\n  background-color: @lightBlack;\n}\n\n/*--------------\n     Sizes\n---------------*/\n\n.ui.tiny.progress {\n  font-size: @tiny;\n}\n.ui.tiny.progress .bar {\n  height: @tinyBarHeight;\n}\n\n.ui.small.progress {\n  font-size: @small;\n}\n.ui.small.progress .bar {\n  height: @smallBarHeight;\n}\n\n.ui.progress {\n  font-size: @medium;\n}\n.ui.progress .bar {\n  height: @barHeight;\n}\n\n.ui.large.progress {\n  font-size: @large;\n}\n.ui.large.progress .bar {\n  height: @largeBarHeight;\n}\n\n.ui.big.progress {\n  font-size: @big;\n}\n.ui.big.progress .bar {\n  height: @bigBarHeight;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/rating.js",
    "content": "/*!\n * # Semantic UI - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.rating = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.rating.settings, parameters)\n          : $.extend({}, $.fn.rating.settings),\n\n        namespace       = settings.namespace,\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        element         = this,\n        instance        = $(this).data(moduleNamespace),\n\n        $module         = $(this),\n        $icon           = $module.find(selector.icon),\n\n        initialLoad,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing rating module', settings);\n\n          if($icon.length === 0) {\n            module.setup.layout();\n          }\n\n          if(settings.interactive) {\n            module.enable();\n          }\n          else {\n            module.disable();\n          }\n          module.set.initialLoad();\n          module.set.rating( module.get.initialRating() );\n          module.remove.initialLoad();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Instantiating module', settings);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance', instance);\n          module.remove.events();\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          $icon   = $module.find(selector.icon);\n        },\n\n        setup: {\n          layout: function() {\n            var\n              maxRating = module.get.maxRating(),\n              html      = $.fn.rating.settings.templates.icon(maxRating)\n            ;\n            module.debug('Generating icon html dynamically');\n            $module\n              .html(html)\n            ;\n            module.refresh();\n          }\n        },\n\n        event: {\n          mouseenter: function() {\n            var\n              $activeIcon = $(this)\n            ;\n            $activeIcon\n              .nextAll()\n                .removeClass(className.selected)\n            ;\n            $module\n              .addClass(className.selected)\n            ;\n            $activeIcon\n              .addClass(className.selected)\n                .prevAll()\n                .addClass(className.selected)\n            ;\n          },\n          mouseleave: function() {\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n            ;\n          },\n          click: function() {\n            var\n              $activeIcon   = $(this),\n              currentRating = module.get.rating(),\n              rating        = $icon.index($activeIcon) + 1,\n              canClear      = (settings.clearable == 'auto')\n               ? ($icon.length === 1)\n               : settings.clearable\n            ;\n            if(canClear && currentRating == rating) {\n              module.clearRating();\n            }\n            else {\n              module.set.rating( rating );\n            }\n          }\n        },\n\n        clearRating: function() {\n          module.debug('Clearing current rating');\n          module.set.rating(0);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events');\n            $module\n              .on('mouseenter' + eventNamespace, selector.icon, module.event.mouseenter)\n              .on('mouseleave' + eventNamespace, selector.icon, module.event.mouseleave)\n              .on('click'      + eventNamespace, selector.icon, module.event.click)\n            ;\n          }\n        },\n\n        remove: {\n          events: function() {\n            module.verbose('Removing events');\n            $module\n              .off(eventNamespace)\n            ;\n          },\n          initialLoad: function() {\n            initialLoad = false;\n          }\n        },\n\n        enable: function() {\n          module.debug('Setting rating to interactive mode');\n          module.bind.events();\n          $module\n            .removeClass(className.disabled)\n          ;\n        },\n\n        disable: function() {\n          module.debug('Setting rating to read-only mode');\n          module.remove.events();\n          $module\n            .addClass(className.disabled)\n          ;\n        },\n\n        is: {\n          initialLoad: function() {\n            return initialLoad;\n          }\n        },\n\n        get: {\n          initialRating: function() {\n            if($module.data(metadata.rating) !== undefined) {\n              $module.removeData(metadata.rating);\n              return $module.data(metadata.rating);\n            }\n            return settings.initialRating;\n          },\n          maxRating: function() {\n            if($module.data(metadata.maxRating) !== undefined) {\n              $module.removeData(metadata.maxRating);\n              return $module.data(metadata.maxRating);\n            }\n            return settings.maxRating;\n          },\n          rating: function() {\n            var\n              currentRating = $icon.filter('.' + className.active).length\n            ;\n            module.verbose('Current rating retrieved', currentRating);\n            return currentRating;\n          }\n        },\n\n        set: {\n          rating: function(rating) {\n            var\n              ratingIndex = (rating - 1 >= 0)\n                ? (rating - 1)\n                : 0,\n              $activeIcon = $icon.eq(ratingIndex)\n            ;\n            $module\n              .removeClass(className.selected)\n            ;\n            $icon\n              .removeClass(className.selected)\n              .removeClass(className.active)\n            ;\n            if(rating > 0) {\n              module.verbose('Setting current rating to', rating);\n              $activeIcon\n                .prevAll()\n                .addBack()\n                  .addClass(className.active)\n              ;\n            }\n            if(!module.is.initialLoad()) {\n              settings.onRate.call(element, rating);\n            }\n          },\n          initialLoad: function() {\n            initialLoad = true;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.rating.settings = {\n\n  name          : 'Rating',\n  namespace     : 'rating',\n\n  slent         : false,\n  debug         : false,\n  verbose       : false,\n  performance   : true,\n\n  initialRating : 0,\n  interactive   : true,\n  maxRating     : 4,\n  clearable     : 'auto',\n\n  fireOnInit    : false,\n\n  onRate        : function(rating){},\n\n  error         : {\n    method    : 'The method you called is not defined',\n    noMaximum : 'No maximum rating specified. Cannot generate HTML automatically'\n  },\n\n\n  metadata: {\n    rating    : 'rating',\n    maxRating : 'maxRating'\n  },\n\n  className : {\n    active   : 'active',\n    disabled : 'disabled',\n    selected : 'selected',\n    loading  : 'loading'\n  },\n\n  selector  : {\n    icon : '.icon'\n  },\n\n  templates: {\n    icon: function(maxRating) {\n      var\n        icon = 1,\n        html = ''\n      ;\n      while(icon <= maxRating) {\n        html += '<i class=\"icon\"></i>';\n        icon++;\n      }\n      return html;\n    }\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/rating.less",
    "content": "/*!\n * # Semantic UI - Rating\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'rating';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n           Rating\n*******************************/\n\n.ui.rating {\n  display: inline-flex;\n  white-space: @whiteSpace;\n  vertical-align: @verticalAlign;\n}\n.ui.rating:last-child {\n  margin-right: 0em;\n}\n\n/* Icon */\n.ui.rating .icon {\n  padding: 0em;\n  margin: 0em;\n  text-align: center;\n  font-weight: normal;\n  font-style: normal;\n  flex: 1 0 auto;\n  cursor: @iconCursor;\n  width: @iconWidth;\n  height: @iconHeight;\n  transition: @iconTransition;\n}\n\n\n/*******************************\n             Types\n*******************************/\n\n\n/*-------------------\n      Standard\n--------------------*/\n\n/* Inactive Icon */\n.ui.rating .icon {\n  background: @inactiveBackground;\n  color: @inactiveColor;\n}\n\n/* Active Icon */\n.ui.rating .active.icon {\n  background: @activeBackground;\n  color: @activeColor;\n}\n\n/* Selected Icon */\n.ui.rating .icon.selected,\n.ui.rating .icon.selected.active {\n  background: @selectedBackground;\n  color: @selectedColor;\n}\n\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Inactive */\n.ui.star.rating .icon {\n  width: @starIconWidth;\n  height: @starIconHeight;\n  background: @starInactiveBackground;\n  color: @starInactiveColor;\n  text-shadow: @starInactiveTextShadow;\n}\n\n/* Active Star */\n.ui.star.rating .active.icon {\n  background: @starActiveBackground !important;\n  color: @starActiveColor !important;\n  text-shadow: @starActiveTextShadow !important;\n}\n\n/* Selected Star */\n.ui.star.rating .icon.selected,\n.ui.star.rating .icon.selected.active {\n  background: @starSelectedBackground !important;\n  color: @starSelectedColor !important;\n  text-shadow: @starSelectedTextShadow !important;\n}\n\n\n/*-------------------\n        Heart\n--------------------*/\n\n.ui.heart.rating .icon {\n  width: @heartIconWidth;\n  height: @heartIconHeight;\n  background: @heartInactiveBackground;\n  color: @heartInactiveColor;\n  text-shadow: @heartInactiveTextShadow !important;\n}\n\n/* Active Heart */\n.ui.heart.rating .active.icon {\n  background: @heartActiveBackground !important;\n  color: @heartActiveColor !important;\n  text-shadow: @heartActiveTextShadow !important;\n}\n\n/* Selected Heart */\n.ui.heart.rating .icon.selected,\n.ui.heart.rating .icon.selected.active {\n  background: @heartSelectedBackground !important;\n  color: @heartSelectedColor !important;\n  text-shadow: @heartSelectedTextShadow !important;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n       Disabled\n--------------------*/\n\n/* disabled rating */\n.ui.disabled.rating .icon {\n  cursor: default;\n}\n\n\n/*-------------------\n   User Interactive\n--------------------*/\n\n/* Selected Rating */\n.ui.rating.selected .active.icon {\n  opacity: @interactiveActiveIconOpacity;\n}\n.ui.rating.selected .icon.selected,\n.ui.rating .icon.selected {\n  opacity: @interactiveSelectedIconOpacity;\n}\n\n\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.mini.rating {\n  font-size: @mini;\n}\n.ui.tiny.rating {\n  font-size: @tiny;\n}\n.ui.small.rating {\n  font-size: @small;\n}\n.ui.rating {\n  font-size: @medium;\n}\n.ui.large.rating {\n  font-size: @large;\n}\n.ui.huge.rating {\n  font-size: @huge;\n}\n.ui.massive.rating {\n  font-size: @massive;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/search.js",
    "content": "/*!\n * # Semantic UI - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.search = function(parameters) {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n  $(this)\n    .each(function() {\n      var\n        settings          = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.search.settings, parameters)\n          : $.extend({}, $.fn.search.settings),\n\n        className        = settings.className,\n        metadata         = settings.metadata,\n        regExp           = settings.regExp,\n        fields           = settings.fields,\n        selector         = settings.selector,\n        error            = settings.error,\n        namespace        = settings.namespace,\n\n        eventNamespace   = '.' + namespace,\n        moduleNamespace  = namespace + '-module',\n\n        $module          = $(this),\n        $prompt          = $module.find(selector.prompt),\n        $searchButton    = $module.find(selector.searchButton),\n        $results         = $module.find(selector.results),\n        $result          = $module.find(selector.result),\n        $category        = $module.find(selector.category),\n\n        element          = this,\n        instance         = $module.data(moduleNamespace),\n\n        disabledBubbled  = false,\n        resultsDismissed = false,\n\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module');\n          module.determine.searchFields();\n          module.bind.events();\n          module.set.type();\n          module.create.results();\n          module.instantiate();\n        },\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n        destroy: function() {\n          module.verbose('Destroying instance');\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.debug('Refreshing selector cache');\n          $prompt         = $module.find(selector.prompt);\n          $searchButton   = $module.find(selector.searchButton);\n          $category       = $module.find(selector.category);\n          $results        = $module.find(selector.results);\n          $result         = $module.find(selector.result);\n        },\n\n        refreshResults: function() {\n          $results = $module.find(selector.results);\n          $result  = $module.find(selector.result);\n        },\n\n        bind: {\n          events: function() {\n            module.verbose('Binding events to search');\n            if(settings.automatic) {\n              $module\n                .on(module.get.inputEvent() + eventNamespace, selector.prompt, module.event.input)\n              ;\n              $prompt\n                .attr('autocomplete', 'off')\n              ;\n            }\n            $module\n              // prompt\n              .on('focus'     + eventNamespace, selector.prompt, module.event.focus)\n              .on('blur'      + eventNamespace, selector.prompt, module.event.blur)\n              .on('keydown'   + eventNamespace, selector.prompt, module.handleKeyboard)\n              // search button\n              .on('click'     + eventNamespace, selector.searchButton, module.query)\n              // results\n              .on('mousedown' + eventNamespace, selector.results, module.event.result.mousedown)\n              .on('mouseup'   + eventNamespace, selector.results, module.event.result.mouseup)\n              .on('click'     + eventNamespace, selector.result,  module.event.result.click)\n            ;\n          }\n        },\n\n        determine: {\n          searchFields: function() {\n            // this makes sure $.extend does not add specified search fields to default fields\n            // this is the only setting which should not extend defaults\n            if(parameters && parameters.searchFields !== undefined) {\n              settings.searchFields = parameters.searchFields;\n            }\n          }\n        },\n\n        event: {\n          input: function() {\n            if(settings.searchDelay) {\n              clearTimeout(module.timer);\n              module.timer = setTimeout(function() {\n                if(module.is.focused()) {\n                  module.query();\n                }\n              }, settings.searchDelay);\n            }\n            else {\n              module.query();\n            }\n          },\n          focus: function() {\n            module.set.focus();\n            if(settings.searchOnFocus && module.has.minimumCharacters() ) {\n              module.query(function() {\n                if(module.can.show() ) {\n                  module.showResults();\n                }\n              });\n            }\n          },\n          blur: function(event) {\n            var\n              pageLostFocus = (document.activeElement === this),\n              callback      = function() {\n                module.cancel.query();\n                module.remove.focus();\n                module.timer = setTimeout(module.hideResults, settings.hideDelay);\n              }\n            ;\n            if(pageLostFocus) {\n              return;\n            }\n            resultsDismissed = false;\n            if(module.resultsClicked) {\n              module.debug('Determining if user action caused search to close');\n              $module\n                .one('click.close' + eventNamespace, selector.results, function(event) {\n                  if(module.is.inMessage(event) || disabledBubbled) {\n                    $prompt.focus();\n                    return;\n                  }\n                  disabledBubbled = false;\n                  if( !module.is.animating() && !module.is.hidden()) {\n                    callback();\n                  }\n                })\n              ;\n            }\n            else {\n              module.debug('Input blurred without user action, closing results');\n              callback();\n            }\n          },\n          result: {\n            mousedown: function() {\n              module.resultsClicked = true;\n            },\n            mouseup: function() {\n              module.resultsClicked = false;\n            },\n            click: function(event) {\n              module.debug('Search result selected');\n              var\n                $result = $(this),\n                $title  = $result.find(selector.title).eq(0),\n                $link   = $result.is('a[href]')\n                  ? $result\n                  : $result.find('a[href]').eq(0),\n                href    = $link.attr('href')   || false,\n                target  = $link.attr('target') || false,\n                title   = $title.html(),\n                // title is used for result lookup\n                value   = ($title.length > 0)\n                  ? $title.text()\n                  : false,\n                results = module.get.results(),\n                result  = $result.data(metadata.result) || module.get.result(value, results),\n                returnedValue\n              ;\n              if( $.isFunction(settings.onSelect) ) {\n                if(settings.onSelect.call(element, result, results) === false) {\n                  module.debug('Custom onSelect callback cancelled default select action');\n                  disabledBubbled = true;\n                  return;\n                }\n              }\n              module.hideResults();\n              if(value) {\n                module.set.value(value);\n              }\n              if(href) {\n                module.verbose('Opening search link found in result', $link);\n                if(target == '_blank' || event.ctrlKey) {\n                  window.open(href);\n                }\n                else {\n                  window.location.href = (href);\n                }\n              }\n            }\n          }\n        },\n        handleKeyboard: function(event) {\n          var\n            // force selector refresh\n            $result         = $module.find(selector.result),\n            $category       = $module.find(selector.category),\n            $activeResult   = $result.filter('.' + className.active),\n            currentIndex    = $result.index( $activeResult ),\n            resultSize      = $result.length,\n            hasActiveResult = $activeResult.length > 0,\n\n            keyCode         = event.which,\n            keys            = {\n              backspace : 8,\n              enter     : 13,\n              escape    : 27,\n              upArrow   : 38,\n              downArrow : 40\n            },\n            newIndex\n          ;\n          // search shortcuts\n          if(keyCode == keys.escape) {\n            module.verbose('Escape key pressed, blurring search field');\n            module.hideResults();\n            resultsDismissed = true;\n          }\n          if( module.is.visible() ) {\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, selecting active result');\n              if( $result.filter('.' + className.active).length > 0 ) {\n                module.event.result.click.call($result.filter('.' + className.active), event);\n                event.preventDefault();\n                return false;\n              }\n            }\n            else if(keyCode == keys.upArrow && hasActiveResult) {\n              module.verbose('Up key pressed, changing active result');\n              newIndex = (currentIndex - 1 < 0)\n                ? currentIndex\n                : currentIndex - 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n            else if(keyCode == keys.downArrow) {\n              module.verbose('Down key pressed, changing active result');\n              newIndex = (currentIndex + 1 >= resultSize)\n                ? currentIndex\n                : currentIndex + 1\n              ;\n              $category\n                .removeClass(className.active)\n              ;\n              $result\n                .removeClass(className.active)\n                .eq(newIndex)\n                  .addClass(className.active)\n                  .closest($category)\n                    .addClass(className.active)\n              ;\n              event.preventDefault();\n            }\n          }\n          else {\n            // query shortcuts\n            if(keyCode == keys.enter) {\n              module.verbose('Enter key pressed, executing query');\n              module.query();\n              module.set.buttonPressed();\n              $prompt.one('keyup', module.remove.buttonFocus);\n            }\n          }\n        },\n\n        setup: {\n          api: function(searchTerm, callback) {\n            var\n              apiSettings = {\n                debug             : settings.debug,\n                on                : false,\n                cache             : true,\n                action            : 'search',\n                urlData           : {\n                  query : searchTerm\n                },\n                onSuccess         : function(response) {\n                  module.parse.response.call(element, response, searchTerm);\n                  callback();\n                },\n                onFailure         : function() {\n                  module.displayMessage(error.serverError);\n                  callback();\n                },\n                onAbort : function(response) {\n                },\n                onError           : module.error\n              },\n              searchHTML\n            ;\n            $.extend(true, apiSettings, settings.apiSettings);\n            module.verbose('Setting up API request', apiSettings);\n            $module.api(apiSettings);\n          }\n        },\n\n        can: {\n          useAPI: function() {\n            return $.fn.api !== undefined;\n          },\n          show: function() {\n            return module.is.focused() && !module.is.visible() && !module.is.empty();\n          },\n          transition: function() {\n            return settings.transition && $.fn.transition !== undefined && $module.transition('is supported');\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $results.hasClass(className.animating);\n          },\n          hidden: function() {\n            return $results.hasClass(className.hidden);\n          },\n          inMessage: function(event) {\n            if(!event.target) {\n              return;\n            }\n            var\n              $target = $(event.target),\n              isInDOM = $.contains(document.documentElement, event.target)\n            ;\n            return (isInDOM && $target.closest(selector.message).length > 0);\n          },\n          empty: function() {\n            return ($results.html() === '');\n          },\n          visible: function() {\n            return ($results.filter(':visible').length > 0);\n          },\n          focused: function() {\n            return ($prompt.filter(':focus').length > 0);\n          }\n        },\n\n        get: {\n          inputEvent: function() {\n            var\n              prompt = $prompt[0],\n              inputEvent   = (prompt !== undefined && prompt.oninput !== undefined)\n                ? 'input'\n                : (prompt !== undefined && prompt.onpropertychange !== undefined)\n                  ? 'propertychange'\n                  : 'keyup'\n            ;\n            return inputEvent;\n          },\n          value: function() {\n            return $prompt.val();\n          },\n          results: function() {\n            var\n              results = $module.data(metadata.results)\n            ;\n            return results;\n          },\n          result: function(value, results) {\n            var\n              lookupFields = ['title', 'id'],\n              result       = false\n            ;\n            value = (value !== undefined)\n              ? value\n              : module.get.value()\n            ;\n            results = (results !== undefined)\n              ? results\n              : module.get.results()\n            ;\n            if(settings.type === 'category') {\n              module.debug('Finding result that matches', value);\n              $.each(results, function(index, category) {\n                if($.isArray(category.results)) {\n                  result = module.search.object(value, category.results, lookupFields)[0];\n                  // don't continue searching if a result is found\n                  if(result) {\n                    return false;\n                  }\n                }\n              });\n            }\n            else {\n              module.debug('Finding result in results object', value);\n              result = module.search.object(value, results, lookupFields)[0];\n            }\n            return result || false;\n          },\n        },\n\n        select: {\n          firstResult: function() {\n            module.verbose('Selecting first result');\n            $result.first().addClass(className.active);\n          }\n        },\n\n        set: {\n          focus: function() {\n            $module.addClass(className.focus);\n          },\n          loading: function() {\n            $module.addClass(className.loading);\n          },\n          value: function(value) {\n            module.verbose('Setting search input value', value);\n            $prompt\n              .val(value)\n            ;\n          },\n          type: function(type) {\n            type = type || settings.type;\n            if(settings.type == 'category') {\n              $module.addClass(settings.type);\n            }\n          },\n          buttonPressed: function() {\n            $searchButton.addClass(className.pressed);\n          }\n        },\n\n        remove: {\n          loading: function() {\n            $module.removeClass(className.loading);\n          },\n          focus: function() {\n            $module.removeClass(className.focus);\n          },\n          buttonPressed: function() {\n            $searchButton.removeClass(className.pressed);\n          }\n        },\n\n        query: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          var\n            searchTerm = module.get.value(),\n            cache = module.read.cache(searchTerm)\n          ;\n          callback = callback || function() {};\n          if( module.has.minimumCharacters() )  {\n            if(cache) {\n              module.debug('Reading result from cache', searchTerm);\n              module.save.results(cache.results);\n              module.addResults(cache.html);\n              module.inject.id(cache.results);\n              callback();\n            }\n            else {\n              module.debug('Querying for', searchTerm);\n              if($.isPlainObject(settings.source) || $.isArray(settings.source)) {\n                module.search.local(searchTerm);\n                callback();\n              }\n              else if( module.can.useAPI() ) {\n                module.search.remote(searchTerm, callback);\n              }\n              else {\n                module.error(error.source);\n                callback();\n              }\n            }\n            settings.onSearchQuery.call(element, searchTerm);\n          }\n          else {\n            module.hideResults();\n          }\n        },\n\n        search: {\n          local: function(searchTerm) {\n            var\n              results = module.search.object(searchTerm, settings.content),\n              searchHTML\n            ;\n            module.set.loading();\n            module.save.results(results);\n            module.debug('Returned local search results', results);\n\n            searchHTML = module.generateResults({\n              results: results\n            });\n            module.remove.loading();\n            module.addResults(searchHTML);\n            module.inject.id(results);\n            module.write.cache(searchTerm, {\n              html    : searchHTML,\n              results : results\n            });\n          },\n          remote: function(searchTerm, callback) {\n            callback = $.isFunction(callback)\n              ? callback\n              : function(){}\n            ;\n            if($module.api('is loading')) {\n              $module.api('abort');\n            }\n            module.setup.api(searchTerm, callback);\n            $module\n              .api('query')\n            ;\n          },\n          object: function(searchTerm, source, searchFields) {\n            var\n              results      = [],\n              fuzzyResults = [],\n              searchExp    = searchTerm.toString().replace(regExp.escape, '\\\\$&'),\n              matchRegExp  = new RegExp(regExp.beginsWith + searchExp, 'i'),\n\n              // avoid duplicates when pushing results\n              addResult = function(array, result) {\n                var\n                  notResult      = ($.inArray(result, results) == -1),\n                  notFuzzyResult = ($.inArray(result, fuzzyResults) == -1)\n                ;\n                if(notResult && notFuzzyResult) {\n                  array.push(result);\n                }\n              }\n            ;\n            source = source || settings.source;\n            searchFields = (searchFields !== undefined)\n              ? searchFields\n              : settings.searchFields\n            ;\n\n            // search fields should be array to loop correctly\n            if(!$.isArray(searchFields)) {\n              searchFields = [searchFields];\n            }\n\n            // exit conditions if no source\n            if(source === undefined || source === false) {\n              module.error(error.source);\n              return [];\n            }\n\n            // iterate through search fields looking for matches\n            $.each(searchFields, function(index, field) {\n              $.each(source, function(label, content) {\n                var\n                  fieldExists = (typeof content[field] == 'string')\n                ;\n                if(fieldExists) {\n                  if( content[field].search(matchRegExp) !== -1) {\n                    // content starts with value (first in results)\n                    addResult(results, content);\n                  }\n                  else if(settings.searchFullText && module.fuzzySearch(searchTerm, content[field]) ) {\n                    // content fuzzy matches (last in results)\n                    addResult(fuzzyResults, content);\n                  }\n                }\n              });\n            });\n            return $.merge(results, fuzzyResults);\n          }\n        },\n\n        fuzzySearch: function(query, term) {\n          var\n            termLength  = term.length,\n            queryLength = query.length\n          ;\n          if(typeof query !== 'string') {\n            return false;\n          }\n          query = query.toLowerCase();\n          term  = term.toLowerCase();\n          if(queryLength > termLength) {\n            return false;\n          }\n          if(queryLength === termLength) {\n            return (query === term);\n          }\n          search: for (var characterIndex = 0, nextCharacterIndex = 0; characterIndex < queryLength; characterIndex++) {\n            var\n              queryCharacter = query.charCodeAt(characterIndex)\n            ;\n            while(nextCharacterIndex < termLength) {\n              if(term.charCodeAt(nextCharacterIndex++) === queryCharacter) {\n                continue search;\n              }\n            }\n            return false;\n          }\n          return true;\n        },\n\n        parse: {\n          response: function(response, searchTerm) {\n            var\n              searchHTML = module.generateResults(response)\n            ;\n            module.verbose('Parsing server response', response);\n            if(response !== undefined) {\n              if(searchTerm !== undefined && response[fields.results] !== undefined) {\n                module.addResults(searchHTML);\n                module.inject.id(response[fields.results]);\n                module.write.cache(searchTerm, {\n                  html    : searchHTML,\n                  results : response[fields.results]\n                });\n                module.save.results(response[fields.results]);\n              }\n            }\n          }\n        },\n\n        cancel: {\n          query: function() {\n            if( module.can.useAPI() ) {\n              $module.api('abort');\n            }\n          }\n        },\n\n        has: {\n          minimumCharacters: function() {\n            var\n              searchTerm    = module.get.value(),\n              numCharacters = searchTerm.length\n            ;\n            return (numCharacters >= settings.minCharacters);\n          },\n          results: function() {\n            if($results.length === 0) {\n              return false;\n            }\n            var\n              html = $results.html()\n            ;\n            return html != '';\n          }\n        },\n\n        clear: {\n          cache: function(value) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(!value) {\n              module.debug('Clearing cache', value);\n              $module.removeData(metadata.cache);\n            }\n            else if(value && cache && cache[value]) {\n              module.debug('Removing value from cache', value);\n              delete cache[value];\n              $module.data(metadata.cache, cache);\n            }\n          }\n        },\n\n        read: {\n          cache: function(name) {\n            var\n              cache = $module.data(metadata.cache)\n            ;\n            if(settings.cache) {\n              module.verbose('Checking cache for generated html for query', name);\n              return (typeof cache == 'object') && (cache[name] !== undefined)\n                ? cache[name]\n                : false\n              ;\n            }\n            return false;\n          }\n        },\n\n        create: {\n          id: function(resultIndex, categoryIndex) {\n            var\n              resultID      = (resultIndex + 1), // not zero indexed\n              categoryID    = (categoryIndex + 1),\n              firstCharCode,\n              letterID,\n              id\n            ;\n            if(categoryIndex !== undefined) {\n              // start char code for \"A\"\n              letterID = String.fromCharCode(97 + categoryIndex);\n              id          = letterID + resultID;\n              module.verbose('Creating category result id', id);\n            }\n            else {\n              id = resultID;\n              module.verbose('Creating result id', id);\n            }\n            return id;\n          },\n          results: function() {\n            if($results.length === 0) {\n              $results = $('<div />')\n                .addClass(className.results)\n                .appendTo($module)\n              ;\n            }\n          }\n        },\n\n        inject: {\n          result: function(result, resultIndex, categoryIndex) {\n            module.verbose('Injecting result into results');\n            var\n              $selectedResult = (categoryIndex !== undefined)\n                ? $results\n                    .children().eq(categoryIndex)\n                      .children(selector.result).eq(resultIndex)\n                : $results\n                    .children(selector.result).eq(resultIndex)\n            ;\n            module.verbose('Injecting results metadata', $selectedResult);\n            $selectedResult\n              .data(metadata.result, result)\n            ;\n          },\n          id: function(results) {\n            module.debug('Injecting unique ids into results');\n            var\n              // since results may be object, we must use counters\n              categoryIndex = 0,\n              resultIndex   = 0\n            ;\n            if(settings.type === 'category') {\n              // iterate through each category result\n              $.each(results, function(index, category) {\n                resultIndex = 0;\n                $.each(category.results, function(index, value) {\n                  var\n                    result = category.results[index]\n                  ;\n                  if(result.id === undefined) {\n                    result.id = module.create.id(resultIndex, categoryIndex);\n                  }\n                  module.inject.result(result, resultIndex, categoryIndex);\n                  resultIndex++;\n                });\n                categoryIndex++;\n              });\n            }\n            else {\n              // top level\n              $.each(results, function(index, value) {\n                var\n                  result = results[index]\n                ;\n                if(result.id === undefined) {\n                  result.id = module.create.id(resultIndex);\n                }\n                module.inject.result(result, resultIndex);\n                resultIndex++;\n              });\n            }\n            return results;\n          }\n        },\n\n        save: {\n          results: function(results) {\n            module.verbose('Saving current search results to metadata', results);\n            $module.data(metadata.results, results);\n          }\n        },\n\n        write: {\n          cache: function(name, value) {\n            var\n              cache = ($module.data(metadata.cache) !== undefined)\n                ? $module.data(metadata.cache)\n                : {}\n            ;\n            if(settings.cache) {\n              module.verbose('Writing generated html to cache', name, value);\n              cache[name] = value;\n              $module\n                .data(metadata.cache, cache)\n              ;\n            }\n          }\n        },\n\n        addResults: function(html) {\n          if( $.isFunction(settings.onResultsAdd) ) {\n            if( settings.onResultsAdd.call($results, html) === false ) {\n              module.debug('onResultsAdd callback cancelled default action');\n              return false;\n            }\n          }\n          if(html) {\n            $results\n              .html(html)\n            ;\n            module.refreshResults();\n            if(settings.selectFirstResult) {\n              module.select.firstResult();\n            }\n            module.showResults();\n          }\n          else {\n            module.hideResults(function() {\n              $results.empty();\n            });\n          }\n        },\n\n        showResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(resultsDismissed) {\n            return;\n          }\n          if(!module.is.visible() && module.has.results()) {\n            if( module.can.transition() ) {\n              module.debug('Showing results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' in',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Showing results with javascript');\n              $results\n                .stop()\n                .fadeIn(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsOpen.call($results);\n          }\n        },\n        hideResults: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if( module.is.visible() ) {\n            if( module.can.transition() ) {\n              module.debug('Hiding results with css animations');\n              $results\n                .transition({\n                  animation  : settings.transition + ' out',\n                  debug      : settings.debug,\n                  verbose    : settings.verbose,\n                  duration   : settings.duration,\n                  onComplete : function() {\n                    callback();\n                  },\n                  queue      : true\n                })\n              ;\n            }\n            else {\n              module.debug('Hiding results with javascript');\n              $results\n                .stop()\n                .fadeOut(settings.duration, settings.easing)\n              ;\n            }\n            settings.onResultsClose.call($results);\n          }\n        },\n\n        generateResults: function(response) {\n          module.debug('Generating html from response', response);\n          var\n            template       = settings.templates[settings.type],\n            isProperObject = ($.isPlainObject(response[fields.results]) && !$.isEmptyObject(response[fields.results])),\n            isProperArray  = ($.isArray(response[fields.results]) && response[fields.results].length > 0),\n            html           = ''\n          ;\n          if(isProperObject || isProperArray ) {\n            if(settings.maxResults > 0) {\n              if(isProperObject) {\n                if(settings.type == 'standard') {\n                  module.error(error.maxResults);\n                }\n              }\n              else {\n                response[fields.results] = response[fields.results].slice(0, settings.maxResults);\n              }\n            }\n            if($.isFunction(template)) {\n              html = template(response, fields);\n            }\n            else {\n              module.error(error.noTemplate, false);\n            }\n          }\n          else if(settings.showNoResults) {\n            html = module.displayMessage(error.noResults, 'empty');\n          }\n          settings.onResults.call(element, response);\n          return html;\n        },\n\n        displayMessage: function(text, type) {\n          type = type || 'standard';\n          module.debug('Displaying message', text, type);\n          module.addResults( settings.templates.message(text, type) );\n          return settings.templates.message(text, type);\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.search.settings = {\n\n  name              : 'Search',\n  namespace         : 'search',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  // template to use (specified in settings.templates)\n  type              : 'standard',\n\n  // minimum characters required to search\n  minCharacters     : 1,\n\n  // whether to select first result after searching automatically\n  selectFirstResult : false,\n\n  // API config\n  apiSettings       : false,\n\n  // object to search\n  source            : false,\n\n  // Whether search should query current term on focus\n  searchOnFocus     : true,\n\n  // fields to search\n  searchFields   : [\n    'title',\n    'description'\n  ],\n\n  // field to display in standard results template\n  displayField   : '',\n\n  // whether to include fuzzy results in local search\n  searchFullText : true,\n\n  // whether to add events to prompt automatically\n  automatic      : true,\n\n  // delay before hiding menu after blur\n  hideDelay      : 0,\n\n  // delay before searching\n  searchDelay    : 200,\n\n  // maximum results returned from local\n  maxResults     : 7,\n\n  // whether to store lookups in local cache\n  cache          : true,\n\n  // whether no results errors should be shown\n  showNoResults  : true,\n\n  // transition settings\n  transition     : 'scale',\n  duration       : 200,\n  easing         : 'easeOutExpo',\n\n  // callbacks\n  onSelect       : false,\n  onResultsAdd   : false,\n\n  onSearchQuery  : function(query){},\n  onResults      : function(response){},\n\n  onResultsOpen  : function(){},\n  onResultsClose : function(){},\n\n  className: {\n    animating : 'animating',\n    active    : 'active',\n    empty     : 'empty',\n    focus     : 'focus',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    results   : 'results',\n    pressed   : 'down'\n  },\n\n  error : {\n    source      : 'Cannot search. No source used, and Semantic API module was not included',\n    noResults   : 'Your search returned no results',\n    logging     : 'Error in debug logging, exiting.',\n    noEndpoint  : 'No search endpoint was specified',\n    noTemplate  : 'A valid template name was not specified.',\n    serverError : 'There was an issue querying the server.',\n    maxResults  : 'Results must be an array to use maxResults setting',\n    method      : 'The method you called is not defined.'\n  },\n\n  metadata: {\n    cache   : 'cache',\n    results : 'results',\n    result  : 'result'\n  },\n\n  regExp: {\n    escape     : /[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g,\n    beginsWith : '(?:\\s|^)'\n  },\n\n  // maps api response attributes to internal representation\n  fields: {\n    categories      : 'results',     // array of categories (category view)\n    categoryName    : 'name',        // name of category (category view)\n    categoryResults : 'results',     // array of results (category view)\n    description     : 'description', // result description\n    image           : 'image',       // result image\n    price           : 'price',       // result price\n    results         : 'results',     // array of results (standard)\n    title           : 'title',       // result title\n    url             : 'url',         // result url\n    action          : 'action',      // \"view more\" object name\n    actionText      : 'text',        // \"view more\" text\n    actionURL       : 'url'          // \"view more\" url\n  },\n\n  selector : {\n    prompt       : '.prompt',\n    searchButton : '.search.button',\n    results      : '.results',\n    message      : '.results > .message',\n    category     : '.category',\n    result       : '.result',\n    title        : '.title, .name'\n  },\n\n  templates: {\n    escape: function(string) {\n      var\n        badChars     = /[&<>\"'`]/g,\n        shouldEscape = /[&<>\"'`]/,\n        escape       = {\n          \"&\": \"&amp;\",\n          \"<\": \"&lt;\",\n          \">\": \"&gt;\",\n          '\"': \"&quot;\",\n          \"'\": \"&#x27;\",\n          \"`\": \"&#x60;\"\n        },\n        escapedChar  = function(chr) {\n          return escape[chr];\n        }\n      ;\n      if(shouldEscape.test(string)) {\n        return string.replace(badChars, escapedChar);\n      }\n      return string;\n    },\n    message: function(message, type) {\n      var\n        html = ''\n      ;\n      if(message !== undefined && type !== undefined) {\n        html +=  ''\n          + '<div class=\"message ' + type + '\">'\n        ;\n        // message type\n        if(type == 'empty') {\n          html += ''\n            + '<div class=\"header\">No Results</div class=\"header\">'\n            + '<div class=\"description\">' + message + '</div class=\"description\">'\n          ;\n        }\n        else {\n          html += ' <div class=\"description\">' + message + '</div>';\n        }\n        html += '</div>';\n      }\n      return html;\n    },\n    category: function(response, fields) {\n      var\n        html = '',\n        escape = $.fn.search.settings.templates.escape\n      ;\n      if(response[fields.categoryResults] !== undefined) {\n\n        // each category\n        $.each(response[fields.categoryResults], function(index, category) {\n          if(category[fields.results] !== undefined && category.results.length > 0) {\n\n            html  += '<div class=\"category\">';\n\n            if(category[fields.categoryName] !== undefined) {\n              html += '<div class=\"name\">' + category[fields.categoryName] + '</div>';\n            }\n\n            // each item inside category\n            $.each(category.results, function(index, result) {\n              if(result[fields.url]) {\n                html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n              }\n              else {\n                html  += '<a class=\"result\">';\n              }\n              if(result[fields.image] !== undefined) {\n                html += ''\n                  + '<div class=\"image\">'\n                  + ' <img src=\"' + result[fields.image] + '\">'\n                  + '</div>'\n                ;\n              }\n              html += '<div class=\"content\">';\n              if(result[fields.price] !== undefined) {\n                html += '<div class=\"price\">' + result[fields.price] + '</div>';\n              }\n              if(result[fields.title] !== undefined) {\n                html += '<div class=\"title\">' + result[fields.title] + '</div>';\n              }\n              if(result[fields.description] !== undefined) {\n                html += '<div class=\"description\">' + result[fields.description] + '</div>';\n              }\n              html  += ''\n                + '</div>'\n              ;\n              html += '</a>';\n            });\n            html  += ''\n              + '</div>'\n            ;\n          }\n        });\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    },\n    standard: function(response, fields) {\n      var\n        html = ''\n      ;\n      if(response[fields.results] !== undefined) {\n\n        // each result\n        $.each(response[fields.results], function(index, result) {\n          if(result[fields.url]) {\n            html  += '<a class=\"result\" href=\"' + result[fields.url] + '\">';\n          }\n          else {\n            html  += '<a class=\"result\">';\n          }\n          if(result[fields.image] !== undefined) {\n            html += ''\n              + '<div class=\"image\">'\n              + ' <img src=\"' + result[fields.image] + '\">'\n              + '</div>'\n            ;\n          }\n          html += '<div class=\"content\">';\n          if(result[fields.price] !== undefined) {\n            html += '<div class=\"price\">' + result[fields.price] + '</div>';\n          }\n          if(result[fields.title] !== undefined) {\n            html += '<div class=\"title\">' + result[fields.title] + '</div>';\n          }\n          if(result[fields.description] !== undefined) {\n            html += '<div class=\"description\">' + result[fields.description] + '</div>';\n          }\n          html  += ''\n            + '</div>'\n          ;\n          html += '</a>';\n        });\n\n        if(response[fields.action]) {\n          html += ''\n          + '<a href=\"' + response[fields.action][fields.actionURL] + '\" class=\"action\">'\n          +   response[fields.action][fields.actionText]\n          + '</a>';\n        }\n        return html;\n      }\n      return false;\n    }\n  }\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/search.less",
    "content": "/*!\n * # Semantic UI - Search\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'search';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n             Search\n*******************************/\n\n.ui.search {\n  position: relative;\n}\n\n.ui.search > .prompt {\n  margin: 0em;\n  outline: none;\n  -webkit-appearance: none;\n  -webkit-tap-highlight-color:  rgba(255, 255, 255, 0);\n\n  text-shadow: none;\n  font-style: normal;\n  font-weight: normal;\n\n  line-height: @promptLineHeight;\n  padding: @promptPadding;\n  font-size: @promptFontSize;\n\n  background: @promptBackground;\n  border: @promptBorder;\n  color: @promptColor;\n  box-shadow: @promptBoxShadow;\n  transition: @promptTransition;\n}\n\n.ui.search .prompt {\n  border-radius: @promptBorderRadius;\n}\n\n\n/*--------------\n     Icon\n---------------*/\n\n.ui.search .prompt ~ .search.icon {\n  cursor: pointer;\n}\n\n/*--------------\n    Results\n---------------*/\n\n.ui.search > .results {\n  display: none;\n\n  position: absolute;\n  top: 100%;\n  left: 0%;\n  transform-origin: center top;\n  white-space: normal;\n\n  background: @resultsBackground;\n\n  margin-top: @resultsDistance;\n  width: @resultsWidth;\n\n  border-radius: @resultsBorderRadius;\n  box-shadow: @resultsBoxShadow;\n  border: @resultsBorder;\n  z-index: @resultsZIndex;\n}\n.ui.search > .results > :first-child {\n  border-radius: @resultsBorderRadius @resultsBorderRadius 0em 0em;\n}\n.ui.search > .results > :last-child {\n  border-radius: 0em 0em @resultsBorderRadius @resultsBorderRadius;\n}\n\n/*--------------\n    Result\n---------------*/\n\n.ui.search > .results .result {\n  cursor: pointer;\n  display: block;\n  overflow: hidden;\n  font-size: @resultFontSize;\n  padding: @resultPadding;\n  color: @resultTextColor;\n  line-height: @resultLineHeight;\n  border-bottom: @resultDivider;\n}\n.ui.search > .results .result:last-child {\n  border-bottom: @resultLastDivider !important;\n}\n\n/* Image */\n.ui.search > .results .result .image {\n  float: @resultImageFloat;\n  overflow: hidden;\n  background: @resultImageBackground;\n  width: @resultImageWidth;\n  height: @resultImageHeight;\n  border-radius: @resultImageBorderRadius;\n}\n.ui.search > .results .result .image img {\n  display: block;\n  width: auto;\n  height: 100%;\n}\n\n/*--------------\n      Info\n---------------*/\n\n.ui.search > .results .result .image + .content {\n  margin: @resultImageMargin;\n}\n\n.ui.search > .results .result .title {\n  margin: @resultTitleMargin;\n  font-family: @resultTitleFont;\n  font-weight: @resultTitleFontWeight;\n  font-size: @resultTitleFontSize;\n  color: @resultTitleColor;\n}\n.ui.search > .results .result .description {\n  margin-top: @resultDescriptionDistance;\n  font-size: @resultDescriptionFontSize;\n  color: @resultDescriptionColor;\n}\n.ui.search > .results .result .price {\n  float: @resultPriceFloat;\n  color: @resultPriceColor;\n}\n\n/*--------------\n    Message\n---------------*/\n\n.ui.search > .results > .message {\n  padding: @messageVerticalPadding @messageHorizontalPadding;\n}\n.ui.search > .results > .message .header {\n  font-family: @headerFont;\n  font-size: @messageHeaderFontSize;\n  font-weight: @messageHeaderFontWeight;\n  color: @messageHeaderColor;\n}\n.ui.search > .results > .message .description {\n  margin-top: @messageDescriptionDistance;\n  font-size: @messageDescriptionFontSize;\n  color: @messageDescriptionColor;\n}\n\n/* View All Results */\n.ui.search > .results > .action {\n  display: block;\n  border-top: @actionBorder;\n  background: @actionBackground;\n  padding: @actionPadding;\n  color: @actionColor;\n  font-weight: @actionFontWeight;\n  text-align: @actionAlign;\n}\n\n\n/*******************************\n            States\n*******************************/\n\n/*--------------------\n       Focus\n---------------------*/\n\n.ui.search > .prompt:focus {\n  border-color: @promptFocusBorderColor;\n  background: @promptFocusBackground;\n  color: @promptFocusColor;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.loading.search .input > i.icon:before {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @loaderFillColor;\n}\n.ui.loading.search .input > i.icon:after {\n  position: absolute;\n  content: '';\n  top: 50%;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: button-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor transparent transparent;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n\n/*--------------\n      Hover\n---------------*/\n\n.ui.search > .results .result:hover,\n.ui.category.search > .results .category .result:hover {\n  background: @resultHoverBackground;\n}\n.ui.search .action:hover {\n  background: @actionHoverBackground;\n}\n\n/*--------------\n      Active\n---------------*/\n\n.ui.category.search > .results .category.active {\n  background: @categoryActiveBackground;\n}\n.ui.category.search > .results .category.active > .name {\n  color: @categoryNameActiveColor;\n}\n\n.ui.search > .results .result.active,\n.ui.category.search > .results .category .result.active {\n  position: relative;\n  border-left-color: @resultActiveBorderLeft;\n  background: @resultActiveBackground;\n  box-shadow: @resultActiveBoxShadow;\n}\n.ui.search > .results .result.active .title {\n  color: @resultActiveTitleColor;\n}\n.ui.search > .results .result.active .description {\n  color: @resultActiveDescriptionColor;\n}\n\n/*******************************\n           Types\n*******************************/\n\n/*--------------\n    Selection\n---------------*/\n\n.ui.search.selection .prompt {\n  border-radius: @selectionPromptBorderRadius;\n}\n\n/* Remove input */\n.ui.search.selection > .icon.input > .remove.icon {\n  pointer-events: none;\n  position: absolute;\n  left: auto;\n  opacity: 0;\n  color: @selectionCloseIconColor;\n  top: @selectionCloseTop;\n  right: @selectionCloseRight;\n  transition: @selectionCloseTransition;\n}\n.ui.search.selection > .icon.input > .active.remove.icon {\n  cursor: pointer;\n  opacity: @selectionCloseIconOpacity;\n  pointer-events: auto;\n}\n.ui.search.selection > .icon.input:not([class*=\"left icon\"]) > .icon ~ .remove.icon {\n  right: @selectionCloseIconInputRight;\n}\n.ui.search.selection > .icon.input > .remove.icon:hover {\n  opacity: @selectionCloseIconHoverOpacity;\n  color: @selectionCloseIconHoverColor;\n}\n\n\n/*--------------\n    Category\n---------------*/\n\n.ui.category.search .results {\n  width: @categoryResultsWidth;\n}\n\n/* Category */\n.ui.category.search > .results .category {\n  background: @categoryBackground;\n  box-shadow: @categoryBoxShadow;\n  border-bottom: @categoryDivider;\n  transition: @categoryTransition;\n}\n\n/* Last Category */\n.ui.category.search > .results .category:last-child {\n  border-bottom: none;\n}\n\n/* First / Last */\n.ui.category.search > .results .category:first-child .name + .result {\n  border-radius: 0em @resultsBorderRadius 0em 0em;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-radius: 0em 0em @resultsBorderRadius 0em;\n}\n\n/* Category Result */\n.ui.category.search > .results .category .result {\n  background: @categoryResultBackground;\n  margin-left: @categoryNameWidth;\n  border-left: @categoryResultLeftBorder;\n  border-bottom: @categoryResultDivider;\n  transition: @categoryResultTransition;\n  padding: @categoryResultPadding;\n}\n.ui.category.search > .results .category:last-child .result:last-child {\n  border-bottom: @categoryResultLastDivider;\n}\n\n/* Category Result Name */\n.ui.category.search > .results .category > .name {\n  width: @categoryNameWidth;\n  background: @categoryNameBackground;\n  font-family: @categoryNameFont;\n  font-size: @categoryNameFontSize;\n  float: @categoryNameFontSize;\n  float: @categoryNameFloat;\n  padding: @categoryNamePadding;\n  font-weight: @categoryNameFontWeight;\n  color: @categoryNameColor;\n}\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n     Left / Right\n--------------------*/\n\n.ui[class*=\"left aligned\"].search > .results {\n  right: auto;\n  left: 0%;\n}\n.ui[class*=\"right aligned\"].search > .results {\n  right: 0%;\n  left: auto;\n}\n\n/*--------------\n    Fluid\n---------------*/\n\n.ui.fluid.search .results {\n  width: 100%;\n}\n\n\n/*--------------\n      Sizes\n---------------*/\n\n.ui.mini.search {\n  font-size: @relativeMini;\n}\n.ui.small.search {\n  font-size: @relativeSmall;\n}\n.ui.search {\n  font-size: @relativeMedium;\n}\n.ui.large.search {\n  font-size: @relativeLarge;\n}\n.ui.big.search {\n  font-size: @relativeBig;\n}\n.ui.huge.search {\n  font-size: @relativeHuge;\n}\n.ui.massive.search {\n  font-size: @relativeMassive;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/shape.js",
    "content": "/*!\n * # Semantic UI - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.shape = function(parameters) {\n  var\n    $allModules     = $(this),\n    $body           = $('body'),\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        moduleSelector = $allModules.selector || '',\n        settings       = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.shape.settings, parameters)\n          : $.extend({}, $.fn.shape.settings),\n\n        // internal aliases\n        namespace     = settings.namespace,\n        selector      = settings.selector,\n        error         = settings.error,\n        className     = settings.className,\n\n        // define namespaces for modules\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        // selector cache\n        $module       = $(this),\n        $sides        = $module.find(selector.sides),\n        $side         = $module.find(selector.side),\n\n        // private variables\n        nextIndex = false,\n        $activeSide,\n        $nextSide,\n\n        // standard module\n        element       = this,\n        instance      = $module.data(moduleNamespace),\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.verbose('Initializing module for', element);\n          module.set.defaultSide();\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache for', element);\n          $module = $(element);\n          $sides  = $(this).find(selector.shape);\n          $side   = $(this).find(selector.side);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          var\n            shape          = $sides[0] || document.createElement('div'),\n            fakeAssignment = shape.offsetWidth\n          ;\n        },\n\n        animate: function(propertyObject, callback) {\n          module.verbose('Animating box with properties', propertyObject);\n          callback = callback || function(event) {\n            module.verbose('Executing animation callback');\n            if(event !== undefined) {\n              event.stopPropagation();\n            }\n            module.reset();\n            module.set.active();\n          };\n          settings.beforeChange.call($nextSide[0]);\n          if(module.get.transitionEvent()) {\n            module.verbose('Starting CSS animation');\n            $module\n              .addClass(className.animating)\n            ;\n            $sides\n              .css(propertyObject)\n              .one(module.get.transitionEvent(), callback)\n            ;\n            module.set.duration(settings.duration);\n            requestAnimationFrame(function() {\n              $module\n                .addClass(className.animating)\n              ;\n              $activeSide\n                .addClass(className.hidden)\n              ;\n            });\n          }\n          else {\n            callback();\n          }\n        },\n\n        queue: function(method) {\n          module.debug('Queueing animation of', method);\n          $sides\n            .one(module.get.transitionEvent(), function() {\n              module.debug('Executing queued animation');\n              setTimeout(function(){\n                $module.shape(method);\n              }, 0);\n            })\n          ;\n        },\n\n        reset: function() {\n          module.verbose('Animating states reset');\n          $module\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          // removeAttr style does not consistently work in safari\n          $sides\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n          $side\n            .attr('style', '')\n            .removeAttr('style')\n            .removeClass(className.hidden)\n          ;\n          $nextSide\n            .removeClass(className.animating)\n            .attr('style', '')\n            .removeAttr('style')\n          ;\n        },\n\n        is: {\n          complete: function() {\n            return ($side.filter('.' + className.active)[0] == $nextSide[0]);\n          },\n          animating: function() {\n            return $module.hasClass(className.animating);\n          }\n        },\n\n        set: {\n\n          defaultSide: function() {\n            $activeSide = $module.find('.' + settings.className.active);\n            $nextSide   = ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n            nextIndex = false;\n            module.verbose('Active side set to', $activeSide);\n            module.verbose('Next side set to', $nextSide);\n          },\n\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            module.verbose('Setting animation duration', duration);\n            if(settings.duration || settings.duration === 0) {\n              $sides.add($side)\n                .css({\n                  '-webkit-transition-duration': duration,\n                  '-moz-transition-duration': duration,\n                  '-ms-transition-duration': duration,\n                  '-o-transition-duration': duration,\n                  'transition-duration': duration\n                })\n              ;\n            }\n          },\n\n          currentStageSize: function() {\n            var\n              $activeSide = $module.find('.' + settings.className.active),\n              width       = $activeSide.outerWidth(true),\n              height      = $activeSide.outerHeight(true)\n            ;\n            $module\n              .css({\n                width: width,\n                height: height\n              })\n            ;\n          },\n\n          stageSize: function() {\n            var\n              $clone      = $module.clone().addClass(className.loading),\n              $activeSide = $clone.find('.' + settings.className.active),\n              $nextSide   = (nextIndex)\n                ? $clone.find(selector.side).eq(nextIndex)\n                : ( $activeSide.next(selector.side).length > 0 )\n                  ? $activeSide.next(selector.side)\n                  : $clone.find(selector.side).first(),\n              newWidth    = (settings.width == 'next')\n                ? $nextSide.outerWidth(true)\n                : (settings.width == 'initial')\n                  ? $module.width()\n                  : settings.width,\n              newHeight    = (settings.height == 'next')\n                ? $nextSide.outerHeight(true)\n                : (settings.height == 'initial')\n                  ? $module.height()\n                  : settings.height\n            ;\n            $activeSide.removeClass(className.active);\n            $nextSide.addClass(className.active);\n            $clone.insertAfter($module);\n            $clone.remove();\n            if(settings.width != 'auto') {\n              $module.css('width', newWidth + settings.jitter);\n              module.verbose('Specifying width during animation', newWidth);\n            }\n            if(settings.height != 'auto') {\n              $module.css('height', newHeight + settings.jitter);\n              module.verbose('Specifying height during animation', newHeight);\n            }\n          },\n\n          nextSide: function(selector) {\n            nextIndex = selector;\n            $nextSide = $side.filter(selector);\n            nextIndex = $side.index($nextSide);\n            if($nextSide.length === 0) {\n              module.set.defaultSide();\n              module.error(error.side);\n            }\n            module.verbose('Next side manually set to', $nextSide);\n          },\n\n          active: function() {\n            module.verbose('Setting new side to active', $nextSide);\n            $side\n              .removeClass(className.active)\n            ;\n            $nextSide\n              .addClass(className.active)\n            ;\n            settings.onChange.call($nextSide[0]);\n            module.set.defaultSide();\n          }\n        },\n\n        flip: {\n\n          up: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping up', $nextSide);\n              var\n                transform = module.get.transform.up()\n              ;\n              module.set.stageSize();\n              module.stage.above();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip up');\n            }\n          },\n\n          down: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping down', $nextSide);\n              var\n                transform = module.get.transform.down()\n              ;\n              module.set.stageSize();\n              module.stage.below();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip down');\n            }\n          },\n\n          left: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping left', $nextSide);\n              var\n                transform = module.get.transform.left()\n              ;\n              module.set.stageSize();\n              module.stage.left();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip left');\n            }\n          },\n\n          right: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping right', $nextSide);\n              var\n                transform = module.get.transform.right()\n              ;\n              module.set.stageSize();\n              module.stage.right();\n              module.animate(transform);\n            }\n            else {\n              module.queue('flip right');\n            }\n          },\n\n          over: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping over', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.over() );\n            }\n            else {\n              module.queue('flip over');\n            }\n          },\n\n          back: function() {\n            if(module.is.complete() && !module.is.animating() && !settings.allowRepeats) {\n              module.debug('Side already visible', $nextSide);\n              return;\n            }\n            if( !module.is.animating()) {\n              module.debug('Flipping back', $nextSide);\n              module.set.stageSize();\n              module.stage.behind();\n              module.animate(module.get.transform.back() );\n            }\n            else {\n              module.queue('flip back');\n            }\n          }\n\n        },\n\n        get: {\n\n          transform: {\n            up: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(-90deg)'\n              };\n            },\n\n            down: function() {\n              var\n                translate = {\n                  y: -(($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                  z: -($activeSide.outerHeight(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateY(' + translate.y + 'px) translateZ('+ translate.z + 'px) rotateX(90deg)'\n              };\n            },\n\n            left: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(90deg)'\n              };\n            },\n\n            right: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2),\n                  z : -($activeSide.outerWidth(true) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) translateZ(' + translate.z + 'px) rotateY(-90deg)'\n              };\n            },\n\n            over: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(180deg)'\n              };\n            },\n\n            back: function() {\n              var\n                translate = {\n                  x : -(($activeSide.outerWidth(true) - $nextSide.outerWidth(true)) / 2)\n                }\n              ;\n              return {\n                transform: 'translateX(' + translate.x + 'px) rotateY(-180deg)'\n              };\n            }\n          },\n\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          },\n\n          nextSide: function() {\n            return ( $activeSide.next(selector.side).length > 0 )\n              ? $activeSide.next(selector.side)\n              : $module.find(selector.side).first()\n            ;\n          }\n\n        },\n\n        stage: {\n\n          above: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as above', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          below: function() {\n            var\n              box = {\n                origin : (($activeSide.outerHeight(true) - $nextSide.outerHeight(true)) / 2),\n                depth  : {\n                  active : ($nextSide.outerHeight(true) / 2),\n                  next   : ($activeSide.outerHeight(true) / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as below', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'top'       : box.origin + 'px',\n                'transform' : 'rotateX(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          left: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          right: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as left', $nextSide, box);\n            $sides\n              .css({\n                'transform' : 'translateZ(-' + box.depth.active + 'px)'\n              })\n            ;\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg) translateZ(' + box.depth.active + 'px)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(90deg) translateZ(' + box.depth.next + 'px)'\n              })\n            ;\n          },\n\n          behind: function() {\n            var\n              height = {\n                active : $activeSide.outerWidth(true),\n                next   : $nextSide.outerWidth(true)\n              },\n              box = {\n                origin : ( ( height.active - height.next ) / 2),\n                depth  : {\n                  active : (height.next / 2),\n                  next   : (height.active / 2)\n                }\n              }\n            ;\n            module.verbose('Setting the initial animation position as behind', $nextSide, box);\n            $activeSide\n              .css({\n                'transform' : 'rotateY(0deg)'\n              })\n            ;\n            $nextSide\n              .addClass(className.animating)\n              .css({\n                'left'      : box.origin + 'px',\n                'transform' : 'rotateY(-180deg)'\n              })\n            ;\n          }\n        },\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.shape.settings = {\n\n  // module info\n  name : 'Shape',\n\n  // hide all debug content\n  silent     : false,\n\n  // debug content outputted to console\n  debug      : false,\n\n  // verbose debug output\n  verbose    : false,\n\n  // fudge factor in pixels when swapping from 2d to 3d (can be useful to correct rounding errors)\n  jitter     : 0,\n\n  // performance data output\n  performance: true,\n\n  // event namespace\n  namespace  : 'shape',\n\n  // width during animation, can be set to 'auto', initial', 'next' or pixel amount\n  width: 'initial',\n\n  // height during animation, can be set to 'auto', 'initial', 'next' or pixel amount\n  height: 'initial',\n\n  // callback occurs on side change\n  beforeChange : function() {},\n  onChange     : function() {},\n\n  // allow animation to same side\n  allowRepeats: false,\n\n  // animation duration\n  duration   : false,\n\n  // possible errors\n  error: {\n    side   : 'You tried to switch to a side that does not exist.',\n    method : 'The method you called is not defined'\n  },\n\n  // classnames used\n  className   : {\n    animating : 'animating',\n    hidden    : 'hidden',\n    loading   : 'loading',\n    active    : 'active'\n  },\n\n  // selectors used\n  selector    : {\n    sides : '.sides',\n    side  : '.side'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/shape.less",
    "content": "/*!\n * # Semantic UI - Shape\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'shape';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n              Shape\n*******************************/\n\n.ui.shape {\n  position: relative;\n  vertical-align: top;\n  display: @display;\n  perspective: @perspective;\n  transition: @transition;\n}\n\n.ui.shape .sides {\n  transform-style: preserve-3d;\n}\n\n.ui.shape .side {\n  opacity: 1;\n  width: 100%;\n\n  margin: @sideMargin !important;\n  backface-visibility: @backfaceVisibility;\n}\n\n.ui.shape .side {\n  display: none;\n}\n\n.ui.shape .side * {\n  backface-visibility: visible !important;\n}\n\n/*******************************\n             Types\n*******************************/\n\n.ui.cube.shape .side {\n  min-width: @cubeSize;\n  height: @cubeSize;\n\n  padding: @cubePadding;\n\n  background-color: @cubeBackground;\n  color: @cubeTextColor;\n  box-shadow: @cubeBoxShadow;\n}\n.ui.cube.shape .side > .content {\n  width: 100%;\n  height: 100%;\n  display: table;\n\n  text-align: @cubeTextAlign;\n  user-select: text;\n}\n.ui.cube.shape .side > .content > div {\n  display: table-cell;\n  vertical-align: middle;\n  font-size: @cubeFontSize;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.ui.text.shape.animating .sides {\n  position: static;\n}\n.ui.text.shape .side {\n  white-space: nowrap;\n}\n.ui.text.shape .side > * {\n  white-space: normal;\n}\n\n\n/*******************************\n             States\n*******************************/\n\n/*--------------\n    Loading\n---------------*/\n\n.ui.loading.shape {\n  position: absolute;\n  top: -9999px;\n  left: -9999px;\n}\n\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.shape .animating.side {\n  position: absolute;\n  top: 0px;\n  left: 0px;\n  display: block;\n  z-index: @animatingZIndex;\n}\n.ui.shape .hidden.side {\n  opacity: @hiddenSideOpacity;\n}\n\n\n/*--------------\n      CSS\n---------------*/\n\n.ui.shape.animating .sides {\n  position: absolute;\n}\n.ui.shape.animating .sides {\n  transition: @transition;\n}\n.ui.shape.animating .side {\n  transition: @sideTransition;\n}\n\n/*--------------\n     Active\n---------------*/\n\n.ui.shape .active.side {\n  display: block;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/sidebar.js",
    "content": "/*!\n * # Semantic UI - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sidebar = function(parameters) {\n  var\n    $allModules     = $(this),\n    $window         = $(window),\n    $document       = $(document),\n    $html           = $('html'),\n    $head           = $('head'),\n\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sidebar.settings, parameters)\n          : $.extend({}, $.fn.sidebar.settings),\n\n        selector        = settings.selector,\n        className       = settings.className,\n        namespace       = settings.namespace,\n        regExp          = settings.regExp,\n        error           = settings.error,\n\n        eventNamespace  = '.' + namespace,\n        moduleNamespace = 'module-' + namespace,\n\n        $module         = $(this),\n        $context        = $(settings.context),\n\n        $sidebars       = $module.children(selector.sidebar),\n        $fixed          = $context.children(selector.fixed),\n        $pusher         = $context.children(selector.pusher),\n        $style,\n\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        elementNamespace,\n        id,\n        currentScroll,\n        transitionEvent,\n\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n          module.debug('Initializing sidebar', parameters);\n\n          module.create.id();\n\n          transitionEvent = module.get.transitionEvent();\n\n          // avoids locking rendering if initialized in onReady\n          if(settings.delaySetup) {\n            requestAnimationFrame(module.setup.layout);\n          }\n          else {\n            module.setup.layout();\n          }\n\n          requestAnimationFrame(function() {\n            module.setup.cache();\n          });\n\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        create: {\n          id: function() {\n            id = (Math.random().toString(16) + '000000000').substr(2,8);\n            elementNamespace = '.' + id;\n            module.verbose('Creating unique id for element', id);\n          }\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', $module);\n          $module\n            .off(eventNamespace)\n            .removeData(moduleNamespace)\n          ;\n          if(module.is.ios()) {\n            module.remove.ios();\n          }\n          // bound by uuid\n          $context.off(elementNamespace);\n          $window.off(elementNamespace);\n          $document.off(elementNamespace);\n        },\n\n        event: {\n          clickaway: function(event) {\n            var\n              clickedInPusher = ($pusher.find(event.target).length > 0 || $pusher.is(event.target)),\n              clickedContext  = ($context.is(event.target))\n            ;\n            if(clickedInPusher) {\n              module.verbose('User clicked on dimmed page');\n              module.hide();\n            }\n            if(clickedContext) {\n              module.verbose('User clicked on dimmable context (scaled out page)');\n              module.hide();\n            }\n          },\n          touch: function(event) {\n            //event.stopPropagation();\n          },\n          containScroll: function(event) {\n            if(element.scrollTop <= 0)  {\n              element.scrollTop = 1;\n            }\n            if((element.scrollTop + element.offsetHeight) >= element.scrollHeight) {\n              element.scrollTop = element.scrollHeight - element.offsetHeight - 1;\n            }\n          },\n          scroll: function(event) {\n            if( $(event.target).closest(selector.sidebar).length === 0 ) {\n              event.preventDefault();\n            }\n          }\n        },\n\n        bind: {\n          clickaway: function() {\n            module.verbose('Adding clickaway events to context', $context);\n            if(settings.closable) {\n              $context\n                .on('click'    + elementNamespace, module.event.clickaway)\n                .on('touchend' + elementNamespace, module.event.clickaway)\n              ;\n            }\n          },\n          scrollLock: function() {\n            if(settings.scrollLock) {\n              module.debug('Disabling page scroll');\n              $window\n                .on('DOMMouseScroll' + elementNamespace, module.event.scroll)\n              ;\n            }\n            module.verbose('Adding events to contain sidebar scroll');\n            $document\n              .on('touchmove' + elementNamespace, module.event.touch)\n            ;\n            $module\n              .on('scroll' + eventNamespace, module.event.containScroll)\n            ;\n          }\n        },\n        unbind: {\n          clickaway: function() {\n            module.verbose('Removing clickaway events from context', $context);\n            $context.off(elementNamespace);\n          },\n          scrollLock: function() {\n            module.verbose('Removing scroll lock from page');\n            $document.off(elementNamespace);\n            $window.off(elementNamespace);\n            $module.off('scroll' + eventNamespace);\n          }\n        },\n\n        add: {\n          inlineCSS: function() {\n            var\n              width     = module.cache.width  || $module.outerWidth(),\n              height    = module.cache.height || $module.outerHeight(),\n              isRTL     = module.is.rtl(),\n              direction = module.get.direction(),\n              distance  = {\n                left   : width,\n                right  : -width,\n                top    : height,\n                bottom : -height\n              },\n              style\n            ;\n\n            if(isRTL){\n              module.verbose('RTL detected, flipping widths');\n              distance.left = -width;\n              distance.right = width;\n            }\n\n            style  = '<style>';\n\n            if(direction === 'left' || direction === 'right') {\n              module.debug('Adding CSS rules for animation distance', width);\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                + ' }'\n              ;\n            }\n            else if(direction === 'top' || direction == 'bottom') {\n              style  += ''\n                + ' .ui.visible.' + direction + '.sidebar ~ .fixed,'\n                + ' .ui.visible.' + direction + '.sidebar ~ .pusher {'\n                + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                + ' }'\n              ;\n            }\n\n            /* IE is only browser not to create context with transforms */\n            /* https://www.w3.org/Bugs/Public/show_bug.cgi?id=16328 */\n            if( module.is.ie() ) {\n              if(direction === 'left' || direction === 'right') {\n                module.debug('Adding CSS rules for animation distance', width);\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + '           transform: translate3d('+ distance[direction] + 'px, 0, 0);'\n                  + ' }'\n                ;\n              }\n              else if(direction === 'top' || direction == 'bottom') {\n                style  += ''\n                  + ' body.pushable > .ui.visible.' + direction + '.sidebar ~ .pusher:after {'\n                  + '   -webkit-transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + '           transform: translate3d(0, ' + distance[direction] + 'px, 0);'\n                  + ' }'\n                ;\n              }\n              /* opposite sides visible forces content overlay */\n              style += ''\n                + ' body.pushable > .ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher:after,'\n                + ' body.pushable > .ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher:after {'\n                + '   -webkit-transform: translate3d(0px, 0, 0);'\n                + '           transform: translate3d(0px, 0, 0);'\n                + ' }'\n              ;\n            }\n            style += '</style>';\n            $style = $(style)\n              .appendTo($head)\n            ;\n            module.debug('Adding sizing css to head', $style);\n          }\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing selector cache');\n          $context  = $(settings.context);\n          $sidebars = $context.children(selector.sidebar);\n          $pusher   = $context.children(selector.pusher);\n          $fixed    = $context.children(selector.fixed);\n          module.clear.cache();\n        },\n\n        refreshSidebars: function() {\n          module.verbose('Refreshing other sidebars');\n          $sidebars = $context.children(selector.sidebar);\n        },\n\n        repaint: function() {\n          module.verbose('Forcing repaint event');\n          element.style.display = 'none';\n          var ignored = element.offsetHeight;\n          element.scrollTop = element.scrollTop;\n          element.style.display = '';\n        },\n\n        setup: {\n          cache: function() {\n            module.cache = {\n              width  : $module.outerWidth(),\n              height : $module.outerHeight(),\n              rtl    : ($module.css('direction') == 'rtl')\n            };\n          },\n          layout: function() {\n            if( $context.children(selector.pusher).length === 0 ) {\n              module.debug('Adding wrapper element for sidebar');\n              module.error(error.pusher);\n              $pusher = $('<div class=\"pusher\" />');\n              $context\n                .children()\n                  .not(selector.omitted)\n                  .not($sidebars)\n                  .wrapAll($pusher)\n              ;\n              module.refresh();\n            }\n            if($module.nextAll(selector.pusher).length === 0 || $module.nextAll(selector.pusher)[0] !== $pusher[0]) {\n              module.debug('Moved sidebar to correct parent element');\n              module.error(error.movedSidebar, element);\n              $module.detach().prependTo($context);\n              module.refresh();\n            }\n            module.clear.cache();\n            module.set.pushable();\n            module.set.direction();\n          }\n        },\n\n        attachEvents: function(selector, event) {\n          var\n            $toggle = $(selector)\n          ;\n          event = $.isFunction(module[event])\n            ? module[event]\n            : module.toggle\n          ;\n          if($toggle.length > 0) {\n            module.debug('Attaching sidebar events to element', selector, event);\n            $toggle\n              .on('click' + eventNamespace, event)\n            ;\n          }\n          else {\n            module.error(error.notFound, selector);\n          }\n        },\n\n        show: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.hidden()) {\n            module.refreshSidebars();\n            if(settings.overlay)  {\n              module.error(error.overlay);\n              settings.transition = 'overlay';\n            }\n            module.refresh();\n            if(module.othersActive()) {\n              module.debug('Other sidebars currently visible');\n              if(settings.exclusive) {\n                // if not overlay queue animation after hide\n                if(settings.transition != 'overlay') {\n                  module.hideOthers(module.show);\n                  return;\n                }\n                else {\n                  module.hideOthers();\n                }\n              }\n              else {\n                settings.transition = 'overlay';\n              }\n            }\n            module.pushPage(function() {\n              callback.call(element);\n              settings.onShow.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onVisible.call(element);\n          }\n          else {\n            module.debug('Sidebar is already visible');\n          }\n        },\n\n        hide: function(callback) {\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(module.is.visible() || module.is.animating()) {\n            module.debug('Hiding sidebar', callback);\n            module.refreshSidebars();\n            module.pullPage(function() {\n              callback.call(element);\n              settings.onHidden.call(element);\n            });\n            settings.onChange.call(element);\n            settings.onHide.call(element);\n          }\n        },\n\n        othersAnimating: function() {\n          return ($sidebars.not($module).filter('.' + className.animating).length > 0);\n        },\n        othersVisible: function() {\n          return ($sidebars.not($module).filter('.' + className.visible).length > 0);\n        },\n        othersActive: function() {\n          return(module.othersVisible() || module.othersAnimating());\n        },\n\n        hideOthers: function(callback) {\n          var\n            $otherSidebars = $sidebars.not($module).filter('.' + className.visible),\n            sidebarCount   = $otherSidebars.length,\n            callbackCount  = 0\n          ;\n          callback = callback || function(){};\n          $otherSidebars\n            .sidebar('hide', function() {\n              callbackCount++;\n              if(callbackCount == sidebarCount) {\n                callback();\n              }\n            })\n          ;\n        },\n\n        toggle: function() {\n          module.verbose('Determining toggled direction');\n          if(module.is.hidden()) {\n            module.show();\n          }\n          else {\n            module.hide();\n          }\n        },\n\n        pushPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition === 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            dim,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          if(settings.transition == 'scale down') {\n            module.scrollToTop();\n          }\n          module.set.transition(transition);\n          module.repaint();\n          animate = function() {\n            module.bind.clickaway();\n            module.add.inlineCSS();\n            module.set.animating();\n            module.set.visible();\n          };\n          dim = function() {\n            module.set.dimmed();\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.bind.scrollLock();\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n          if(settings.dimPage && !module.othersVisible()) {\n            requestAnimationFrame(dim);\n          }\n        },\n\n        pullPage: function(callback) {\n          var\n            transition = module.get.transition(),\n            $transition = (transition == 'overlay' || module.othersActive())\n              ? $module\n              : $pusher,\n            animate,\n            transitionEnd\n          ;\n          callback = $.isFunction(callback)\n            ? callback\n            : function(){}\n          ;\n          module.verbose('Removing context push state', module.get.direction());\n\n          module.unbind.clickaway();\n          module.unbind.scrollLock();\n\n          animate = function() {\n            module.set.transition(transition);\n            module.set.animating();\n            module.remove.visible();\n            if(settings.dimPage && !module.othersVisible()) {\n              $pusher.removeClass(className.dimmed);\n            }\n          };\n          transitionEnd = function(event) {\n            if( event.target == $transition[0] ) {\n              $transition.off(transitionEvent + elementNamespace, transitionEnd);\n              module.remove.animating();\n              module.remove.transition();\n              module.remove.inlineCSS();\n              if(transition == 'scale down' || (settings.returnScroll && module.is.mobile()) ) {\n                module.scrollBack();\n              }\n              callback.call(element);\n            }\n          };\n          $transition.off(transitionEvent + elementNamespace);\n          $transition.on(transitionEvent + elementNamespace, transitionEnd);\n          requestAnimationFrame(animate);\n        },\n\n        scrollToTop: function() {\n          module.verbose('Scrolling to top of page to avoid animation issues');\n          currentScroll = $(window).scrollTop();\n          $module.scrollTop(0);\n          window.scrollTo(0, 0);\n        },\n\n        scrollBack: function() {\n          module.verbose('Scrolling back to original page position');\n          window.scrollTo(0, currentScroll);\n        },\n\n        clear: {\n          cache: function() {\n            module.verbose('Clearing cached dimensions');\n            module.cache = {};\n          }\n        },\n\n        set: {\n\n          // ios only (scroll on html not document). This prevent auto-resize canvas/scroll in ios\n          // (This is no longer necessary in latest iOS)\n          ios: function() {\n            $html.addClass(className.ios);\n          },\n\n          // container\n          pushed: function() {\n            $context.addClass(className.pushed);\n          },\n          pushable: function() {\n            $context.addClass(className.pushable);\n          },\n\n          // pusher\n          dimmed: function() {\n            $pusher.addClass(className.dimmed);\n          },\n\n          // sidebar\n          active: function() {\n            $module.addClass(className.active);\n          },\n          animating: function() {\n            $module.addClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.addClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.addClass(className[direction]);\n          },\n          visible: function() {\n            $module.addClass(className.visible);\n          },\n          overlay: function() {\n            $module.addClass(className.overlay);\n          }\n        },\n        remove: {\n\n          inlineCSS: function() {\n            module.debug('Removing inline css styles', $style);\n            if($style && $style.length > 0) {\n              $style.remove();\n            }\n          },\n\n          // ios scroll on html not document\n          ios: function() {\n            $html.removeClass(className.ios);\n          },\n\n          // context\n          pushed: function() {\n            $context.removeClass(className.pushed);\n          },\n          pushable: function() {\n            $context.removeClass(className.pushable);\n          },\n\n          // sidebar\n          active: function() {\n            $module.removeClass(className.active);\n          },\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          transition: function(transition) {\n            transition = transition || module.get.transition();\n            $module.removeClass(transition);\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            $module.removeClass(className[direction]);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          overlay: function() {\n            $module.removeClass(className.overlay);\n          }\n        },\n\n        get: {\n          direction: function() {\n            if($module.hasClass(className.top)) {\n              return className.top;\n            }\n            else if($module.hasClass(className.right)) {\n              return className.right;\n            }\n            else if($module.hasClass(className.bottom)) {\n              return className.bottom;\n            }\n            return className.left;\n          },\n          transition: function() {\n            var\n              direction = module.get.direction(),\n              transition\n            ;\n            transition = ( module.is.mobile() )\n              ? (settings.mobileTransition == 'auto')\n                ? settings.defaultTransition.mobile[direction]\n                : settings.mobileTransition\n              : (settings.transition == 'auto')\n                ? settings.defaultTransition.computer[direction]\n                : settings.transition\n            ;\n            module.verbose('Determined transition', transition);\n            return transition;\n          },\n          transitionEvent: function() {\n            var\n              element     = document.createElement('element'),\n              transitions = {\n                'transition'       :'transitionend',\n                'OTransition'      :'oTransitionEnd',\n                'MozTransition'    :'transitionend',\n                'WebkitTransition' :'webkitTransitionEnd'\n              },\n              transition\n            ;\n            for(transition in transitions){\n              if( element.style[transition] !== undefined ){\n                return transitions[transition];\n              }\n            }\n          }\n        },\n\n        is: {\n\n          ie: function() {\n            var\n              isIE11 = (!(window.ActiveXObject) && 'ActiveXObject' in window),\n              isIE   = ('ActiveXObject' in window)\n            ;\n            return (isIE11 || isIE);\n          },\n\n          ios: function() {\n            var\n              userAgent      = navigator.userAgent,\n              isIOS          = userAgent.match(regExp.ios),\n              isMobileChrome = userAgent.match(regExp.mobileChrome)\n            ;\n            if(isIOS && !isMobileChrome) {\n              module.verbose('Browser was found to be iOS', userAgent);\n              return true;\n            }\n            else {\n              return false;\n            }\n          },\n          mobile: function() {\n            var\n              userAgent    = navigator.userAgent,\n              isMobile     = userAgent.match(regExp.mobile)\n            ;\n            if(isMobile) {\n              module.verbose('Browser was found to be mobile', userAgent);\n              return true;\n            }\n            else {\n              module.verbose('Browser is not mobile, using regular transition', userAgent);\n              return false;\n            }\n          },\n          hidden: function() {\n            return !module.is.visible();\n          },\n          visible: function() {\n            return $module.hasClass(className.visible);\n          },\n          // alias\n          open: function() {\n            return module.is.visible();\n          },\n          closed: function() {\n            return module.is.hidden();\n          },\n          vertical: function() {\n            return $module.hasClass(className.top);\n          },\n          animating: function() {\n            return $context.hasClass(className.animating);\n          },\n          rtl: function () {\n            if(module.cache.rtl === undefined) {\n              module.cache.rtl = ($module.css('direction') == 'rtl');\n            }\n            return module.cache.rtl;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      }\n    ;\n\n    if(methodInvoked) {\n      if(instance === undefined) {\n        module.initialize();\n      }\n      module.invoke(query);\n    }\n    else {\n      if(instance !== undefined) {\n        module.invoke('destroy');\n      }\n      module.initialize();\n    }\n  });\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sidebar.settings = {\n\n  name              : 'Sidebar',\n  namespace         : 'sidebar',\n\n  silent            : false,\n  debug             : false,\n  verbose           : false,\n  performance       : true,\n\n  transition        : 'auto',\n  mobileTransition  : 'auto',\n\n  defaultTransition : {\n    computer: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    },\n    mobile: {\n      left   : 'uncover',\n      right  : 'uncover',\n      top    : 'overlay',\n      bottom : 'overlay'\n    }\n  },\n\n  context           : 'body',\n  exclusive         : false,\n  closable          : true,\n  dimPage           : true,\n  scrollLock        : false,\n  returnScroll      : false,\n  delaySetup        : false,\n\n  duration          : 500,\n\n  onChange          : function(){},\n  onShow            : function(){},\n  onHide            : function(){},\n\n  onHidden          : function(){},\n  onVisible         : function(){},\n\n  className         : {\n    active    : 'active',\n    animating : 'animating',\n    dimmed    : 'dimmed',\n    ios       : 'ios',\n    pushable  : 'pushable',\n    pushed    : 'pushed',\n    right     : 'right',\n    top       : 'top',\n    left      : 'left',\n    bottom    : 'bottom',\n    visible   : 'visible'\n  },\n\n  selector: {\n    fixed   : '.fixed',\n    omitted : 'script, link, style, .ui.modal, .ui.dimmer, .ui.nag, .ui.fixed',\n    pusher  : '.pusher',\n    sidebar : '.ui.sidebar'\n  },\n\n  regExp: {\n    ios          : /(iPad|iPhone|iPod)/g,\n    mobileChrome : /(CriOS)/g,\n    mobile       : /Mobile|iP(hone|od|ad)|Android|BlackBerry|IEMobile|Kindle|NetFront|Silk-Accelerated|(hpw|web)OS|Fennec|Minimo|Opera M(obi|ini)|Blazer|Dolfin|Dolphin|Skyfire|Zune/g\n  },\n\n  error   : {\n    method       : 'The method you called is not defined.',\n    pusher       : 'Had to add pusher element. For optimal performance make sure body content is inside a pusher element',\n    movedSidebar : 'Had to move sidebar. For optimal performance make sure sidebar and pusher are direct children of your body tag',\n    overlay      : 'The overlay setting is no longer supported, use animation: overlay',\n    notFound     : 'There were no elements that matched the specified selector'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/sidebar.less",
    "content": "/*!\n * # Semantic UI - Sidebar\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'sidebar';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Sidebar\n*******************************/\n\n/* Sidebar Menu */\n.ui.sidebar {\n  position: fixed;\n  top: 0;\n  left: 0;\n\n  backface-visibility: hidden;\n  transition: none;\n  will-change: transform;\n  transform: translate3d(0, 0, 0);\n  visibility: hidden;\n  -webkit-overflow-scrolling: touch;\n\n  height: 100% !important;\n  max-height: 100%;\n  border-radius: 0em !important;\n  margin: 0em !important;\n  overflow-y: auto !important;\n  z-index: @topLayer;\n}\n\n/* GPU Layers for Child Elements */\n.ui.sidebar > * {\n  backface-visibility: hidden;\n}\n\n\n/*--------------\n   Direction\n---------------*/\n\n.ui.left.sidebar {\n  right: auto;\n  left: 0px;\n  transform: translate3d(-100%, 0, 0);\n}\n.ui.right.sidebar {\n  right: 0px !important;\n  left: auto !important;\n  transform: translate3d(100%, 0%, 0);\n}\n\n.ui.top.sidebar,\n.ui.bottom.sidebar {\n  width: 100% !important;\n  height: auto !important;\n}\n.ui.top.sidebar {\n  top: 0px !important;\n  bottom: auto !important;\n  transform: translate3d(0, -100%, 0);\n}\n.ui.bottom.sidebar {\n  top: auto !important;\n  bottom: 0px !important;\n  transform: translate3d(0, 100%, 0);\n}\n\n\n/*--------------\n     Pushable\n---------------*/\n\n.pushable {\n  height: 100%;\n  overflow-x: hidden;\n  padding: 0em !important;\n}\n\n/* Whole Page */\nbody.pushable {\n  background: @canvasBackground !important;\n}\n\n/* Page Context */\n.pushable:not(body) {\n  transform: translate3d(0, 0, 0);\n}\n.pushable:not(body) > .ui.sidebar,\n.pushable:not(body) > .fixed,\n.pushable:not(body) > .pusher:after {\n  position: absolute;\n}\n\n\n/*--------------\n     Fixed\n---------------*/\n\n.pushable > .fixed {\n  position: fixed;\n  backface-visibility: hidden;\n\n  transition: transform @duration @easing;\n  will-change: transform;\n  z-index: @fixedLayer;\n}\n\n/*--------------\n     Page\n---------------*/\n\n.pushable > .pusher {\n  position: relative;\n  backface-visibility: hidden;\n  overflow: hidden;\n  min-height: 100%;\n  transition: transform @duration @easing;\n  z-index: @middleLayer;\n}\n\nbody.pushable > .pusher {\n  background: @pageBackground;\n}\n\n/* Pusher should inherit background from context */\n.pushable > .pusher {\n  background: inherit;\n}\n\n/*--------------\n     Dimmer\n---------------*/\n\n.pushable > .pusher:after {\n  position: fixed;\n  top: 0px;\n  right: 0px;\n  content: '';\n  background-color: @dimmerColor;\n  overflow: hidden;\n  opacity: 0;\n  transition: @dimmerTransition;\n  will-change: opacity;\n  z-index: @dimmerLayer;\n}\n\n/*--------------\n    Coupling\n---------------*/\n\n.ui.sidebar.menu .item {\n  border-radius: 0em !important;\n}\n\n/*******************************\n            States\n*******************************/\n\n/*--------------\n     Dimmed\n---------------*/\n\n.pushable > .pusher.dimmed:after {\n  width: 100% !important;\n  height: 100% !important;\n  opacity: 1 !important;\n}\n\n/*--------------\n    Animating\n---------------*/\n\n.ui.animating.sidebar {\n  visibility: visible;\n}\n\n/*--------------\n     Visible\n---------------*/\n\n.ui.visible.sidebar {\n  visibility: visible;\n  transform: translate3d(0, 0, 0);\n}\n\n/* Shadow Direction */\n.ui.left.visible.sidebar,\n.ui.right.visible.sidebar {\n  box-shadow: @horizontalBoxShadow;\n}\n.ui.top.visible.sidebar,\n.ui.bottom.visible.sidebar {\n  box-shadow: @verticalBoxShadow;\n}\n\n/* Visible On Load */\n.ui.visible.left.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .pusher {\n  transform: translate3d(@width, 0, 0);\n}\n.ui.visible.right.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .pusher {\n  transform: translate3d(-@width, 0, 0);\n}\n.ui.visible.top.sidebar ~ .fixed,\n.ui.visible.top.sidebar ~ .pusher {\n  transform: translate3d(0, @height, 0);\n}\n.ui.visible.bottom.sidebar ~ .fixed,\n.ui.visible.bottom.sidebar ~ .pusher {\n  transform: translate3d(0, -@height, 0);\n}\n\n/* opposite sides visible forces content overlay */\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .fixed,\n.ui.visible.left.sidebar ~ .ui.visible.right.sidebar ~ .pusher,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .fixed,\n.ui.visible.right.sidebar ~ .ui.visible.left.sidebar ~ .pusher {\n  transform: translate3d(0, 0, 0);\n}\n\n/*--------------\n       iOS\n---------------*/\n\n\n/*******************************\n          Variations\n*******************************/\n\n/*--------------\n     Width\n---------------*/\n\n/* Left / Right */\n.ui.thin.left.sidebar,\n.ui.thin.right.sidebar {\n  width: @thinWidth;\n}\n.ui[class*=\"very thin\"].left.sidebar,\n.ui[class*=\"very thin\"].right.sidebar {\n  width: @veryThinWidth;\n}\n.ui.left.sidebar,\n.ui.right.sidebar {\n  width: @width;\n}\n.ui.wide.left.sidebar,\n.ui.wide.right.sidebar {\n  width: @wideWidth;\n}\n.ui[class*=\"very wide\"].left.sidebar,\n.ui[class*=\"very wide\"].right.sidebar {\n  width: @veryWideWidth;\n}\n\n/* Left Visible */\n.ui.visible.thin.left.sidebar ~ .fixed,\n.ui.visible.thin.left.sidebar ~ .pusher {\n  transform: translate3d(@thinWidth, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].left.sidebar ~ .pusher {\n  transform: translate3d(@veryThinWidth, 0, 0);\n}\n.ui.visible.wide.left.sidebar ~ .fixed,\n.ui.visible.wide.left.sidebar ~ .pusher {\n  transform: translate3d(@wideWidth, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].left.sidebar ~ .pusher {\n  transform: translate3d(@veryWideWidth, 0, 0);\n}\n\n/* Right Visible */\n.ui.visible.thin.right.sidebar ~ .fixed,\n.ui.visible.thin.right.sidebar ~ .pusher {\n  transform: translate3d(-@thinWidth, 0, 0);\n}\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very thin\"].right.sidebar ~ .pusher {\n  transform: translate3d(-@veryThinWidth, 0, 0);\n}\n.ui.visible.wide.right.sidebar ~ .fixed,\n.ui.visible.wide.right.sidebar ~ .pusher {\n  transform: translate3d(-@wideWidth, 0, 0);\n}\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .fixed,\n.ui.visible[class*=\"very wide\"].right.sidebar ~ .pusher {\n  transform: translate3d(-@veryWideWidth, 0, 0);\n}\n\n\n\n/*******************************\n          Animations\n*******************************/\n\n/*--------------\n    Overlay\n---------------*/\n\n/* Set-up */\n.ui.overlay.sidebar {\n  z-index: @topLayer;\n}\n\n/* Initial */\n.ui.left.overlay.sidebar {\n  transform: translate3d(-100%, 0%, 0);\n}\n.ui.right.overlay.sidebar {\n  transform: translate3d(100%, 0%, 0);\n}\n.ui.top.overlay.sidebar {\n  transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.overlay.sidebar {\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Animation */\n.animating.ui.overlay.sidebar,\n.ui.visible.overlay.sidebar {\n  transition: transform @duration @easing;\n}\n\n/* End - Sidebar */\n.ui.visible.left.overlay.sidebar {\n  transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.right.overlay.sidebar {\n  transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.top.overlay.sidebar {\n  transform: translate3d(0%, 0%, 0);\n}\n.ui.visible.bottom.overlay.sidebar {\n  transform: translate3d(0%, 0%, 0);\n}\n\n/* End - Pusher */\n.ui.visible.overlay.sidebar ~ .fixed,\n.ui.visible.overlay.sidebar ~ .pusher {\n  transform: none !important;\n}\n\n\n\n/*--------------\n      Push\n---------------*/\n\n/* Initial */\n.ui.push.sidebar {\n  transition: transform @duration @easing;\n  z-index: @topLayer;\n}\n\n/* Sidebar - Initial */\n.ui.left.push.sidebar {\n  transform: translate3d(-100%, 0, 0);\n}\n.ui.right.push.sidebar {\n  transform: translate3d(100%, 0, 0);\n}\n.ui.top.push.sidebar {\n  transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.push.sidebar {\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* End */\n.ui.visible.push.sidebar {\n  transform: translate3d(0%, 0, 0);\n}\n\n\n/*--------------\n    Uncover\n---------------*/\n\n/* Initial */\n.ui.uncover.sidebar {\n  transform: translate3d(0, 0, 0);\n  z-index: @bottomLayer;\n}\n\n/* End */\n.ui.visible.uncover.sidebar {\n  transform: translate3d(0, 0, 0);\n  transition: transform @duration @easing;\n}\n\n\n/*--------------\n   Slide Along\n---------------*/\n\n/* Initial */\n.ui.slide.along.sidebar {\n  z-index: @bottomLayer;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.along.sidebar {\n  transform: translate3d(-50%, 0, 0);\n}\n.ui.right.slide.along.sidebar {\n  transform: translate3d(50%, 0, 0);\n}\n.ui.top.slide.along.sidebar {\n  transform: translate3d(0, -50%, 0);\n}\n.ui.bottom.slide.along.sidebar {\n  transform: translate3d(0%, 50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.along.sidebar {\n  transition: transform @duration @easing;\n}\n\n/* End */\n.ui.visible.slide.along.sidebar {\n  transform: translate3d(0%, 0, 0);\n}\n\n\n/*--------------\n   Slide Out\n---------------*/\n\n/* Initial */\n.ui.slide.out.sidebar {\n  z-index: @bottomLayer;\n}\n\n/* Sidebar - Initial */\n.ui.left.slide.out.sidebar {\n  transform: translate3d(50%, 0, 0);\n}\n.ui.right.slide.out.sidebar {\n  transform: translate3d(-50%, 0, 0);\n}\n.ui.top.slide.out.sidebar {\n  transform: translate3d(0%, 50%, 0);\n}\n.ui.bottom.slide.out.sidebar {\n  transform: translate3d(0%, -50%, 0);\n}\n\n/* Animation */\n.ui.animating.slide.out.sidebar {\n  transition: transform @duration @easing;\n}\n\n/* End */\n.ui.visible.slide.out.sidebar {\n  transform: translate3d(0%, 0, 0);\n}\n\n/*--------------\n   Scale Down\n---------------*/\n\n/* Initial */\n.ui.scale.down.sidebar {\n  transition: transform @duration @easing;\n  z-index: @topLayer;\n}\n\n/* Sidebar - Initial  */\n.ui.left.scale.down.sidebar {\n  transform: translate3d(-100%, 0, 0);\n}\n.ui.right.scale.down.sidebar {\n  transform: translate3d(100%, 0, 0);\n}\n.ui.top.scale.down.sidebar {\n  transform: translate3d(0%, -100%, 0);\n}\n.ui.bottom.scale.down.sidebar {\n  transform: translate3d(0%, 100%, 0);\n}\n\n/* Pusher - Initial */\n.ui.scale.down.left.sidebar ~ .pusher {\n  transform-origin: 75% 50%;\n}\n.ui.scale.down.right.sidebar ~ .pusher {\n  transform-origin: 25% 50%;\n}\n.ui.scale.down.top.sidebar ~ .pusher {\n  transform-origin: 50% 75%;\n}\n.ui.scale.down.bottom.sidebar ~ .pusher {\n  transform-origin: 50% 25%;\n}\n\n/* Animation */\n.ui.animating.scale.down > .visible.ui.sidebar {\n  transition: transform @duration @easing;\n}\n.ui.visible.scale.down.sidebar ~ .pusher,\n.ui.animating.scale.down.sidebar ~ .pusher {\n  display: block !important;\n  width: 100%;\n  height: 100%;\n  overflow: hidden !important;\n}\n\n/* End */\n.ui.visible.scale.down.sidebar {\n  transform: translate3d(0, 0, 0);\n}\n.ui.visible.scale.down.sidebar ~ .pusher {\n  transform: scale(0.75);\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/sticky.js",
    "content": "/*!\n * # Semantic UI - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.sticky = function(parameters) {\n  var\n    $allModules    = $(this),\n    moduleSelector = $allModules.selector || '',\n\n    time           = new Date().getTime(),\n    performance    = [],\n\n    query          = arguments[0],\n    methodInvoked  = (typeof query == 'string'),\n    queryArguments = [].slice.call(arguments, 1),\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n        settings              = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.sticky.settings, parameters)\n          : $.extend({}, $.fn.sticky.settings),\n\n        className             = settings.className,\n        namespace             = settings.namespace,\n        error                 = settings.error,\n\n        eventNamespace        = '.' + namespace,\n        moduleNamespace       = 'module-' + namespace,\n\n        $module               = $(this),\n        $window               = $(window),\n        $scroll               = $(settings.scrollContext),\n        $container,\n        $context,\n\n        selector              = $module.selector || '',\n        instance              = $module.data(moduleNamespace),\n\n        requestAnimationFrame = window.requestAnimationFrame\n          || window.mozRequestAnimationFrame\n          || window.webkitRequestAnimationFrame\n          || window.msRequestAnimationFrame\n          || function(callback) { setTimeout(callback, 0); },\n\n        element         = this,\n\n        documentObserver,\n        observer,\n        module\n      ;\n\n      module      = {\n\n        initialize: function() {\n\n          module.determineContainer();\n          module.determineContext();\n          module.verbose('Initializing sticky', settings, $container);\n\n          module.save.positions();\n          module.checkErrors();\n          module.bind.events();\n\n          if(settings.observeChanges) {\n            module.observeChanges();\n          }\n          module.instantiate();\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous instance');\n          module.reset();\n          if(documentObserver) {\n            documentObserver.disconnect();\n          }\n          if(observer) {\n            observer.disconnect();\n          }\n          $window\n            .off('load' + eventNamespace, module.event.load)\n            .off('resize' + eventNamespace, module.event.resize)\n          ;\n          $scroll\n            .off('scrollchange' + eventNamespace, module.event.scrollchange)\n          ;\n          $module.removeData(moduleNamespace);\n        },\n\n        observeChanges: function() {\n          if('MutationObserver' in window) {\n            documentObserver = new MutationObserver(module.event.documentChanged);\n            observer         = new MutationObserver(module.event.changed);\n            documentObserver.observe(document, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe(element, {\n              childList : true,\n              subtree   : true\n            });\n            observer.observe($context[0], {\n              childList : true,\n              subtree   : true\n            });\n            module.debug('Setting up mutation observer', observer);\n          }\n        },\n\n        determineContainer: function() {\n          if(settings.container) {\n            $container = $(settings.container);\n          }\n          else {\n            $container = $module.offsetParent();\n          }\n        },\n\n        determineContext: function() {\n          if(settings.context) {\n            $context = $(settings.context);\n          }\n          else {\n            $context = $container;\n          }\n          if($context.length === 0) {\n            module.error(error.invalidContext, settings.context, $module);\n            return;\n          }\n        },\n\n        checkErrors: function() {\n          if( module.is.hidden() ) {\n            module.error(error.visible, $module);\n          }\n          if(module.cache.element.height > module.cache.context.height) {\n            module.reset();\n            module.error(error.elementSize, $module);\n            return;\n          }\n        },\n\n        bind: {\n          events: function() {\n            $window\n              .on('load' + eventNamespace, module.event.load)\n              .on('resize' + eventNamespace, module.event.resize)\n            ;\n            // pub/sub pattern\n            $scroll\n              .off('scroll' + eventNamespace)\n              .on('scroll' + eventNamespace, module.event.scroll)\n              .on('scrollchange' + eventNamespace, module.event.scrollchange)\n            ;\n          }\n        },\n\n        event: {\n          changed: function(mutations) {\n            clearTimeout(module.timer);\n            module.timer = setTimeout(function() {\n              module.verbose('DOM tree modified, updating sticky menu', mutations);\n              module.refresh();\n            }, 100);\n          },\n          documentChanged: function(mutations) {\n            [].forEach.call(mutations, function(mutation) {\n              if(mutation.removedNodes) {\n                [].forEach.call(mutation.removedNodes, function(node) {\n                  if(node == element || $(node).find(element).length > 0) {\n                    module.debug('Element removed from DOM, tearing down events');\n                    module.destroy();\n                  }\n                });\n              }\n            });\n          },\n          load: function() {\n            module.verbose('Page contents finished loading');\n            requestAnimationFrame(module.refresh);\n          },\n          resize: function() {\n            module.verbose('Window resized');\n            requestAnimationFrame(module.refresh);\n          },\n          scroll: function() {\n            requestAnimationFrame(function() {\n              $scroll.triggerHandler('scrollchange' + eventNamespace, $scroll.scrollTop() );\n            });\n          },\n          scrollchange: function(event, scrollPosition) {\n            module.stick(scrollPosition);\n            settings.onScroll.call(element);\n          }\n        },\n\n        refresh: function(hardRefresh) {\n          module.reset();\n          if(!settings.context) {\n            module.determineContext();\n          }\n          if(hardRefresh) {\n            module.determineContainer();\n          }\n          module.save.positions();\n          module.stick();\n          settings.onReposition.call(element);\n        },\n\n        supports: {\n          sticky: function() {\n            var\n              $element = $('<div/>'),\n              element = $element[0]\n            ;\n            $element.addClass(className.supported);\n            return($element.css('position').match('sticky'));\n          }\n        },\n\n        save: {\n          lastScroll: function(scroll) {\n            module.lastScroll = scroll;\n          },\n          elementScroll: function(scroll) {\n            module.elementScroll = scroll;\n          },\n          positions: function() {\n            var\n              scrollContext = {\n                height : $scroll.height()\n              },\n              element = {\n                margin: {\n                  top    : parseInt($module.css('margin-top'), 10),\n                  bottom : parseInt($module.css('margin-bottom'), 10),\n                },\n                offset : $module.offset(),\n                width  : $module.outerWidth(),\n                height : $module.outerHeight()\n              },\n              context = {\n                offset : $context.offset(),\n                height : $context.outerHeight()\n              },\n              container = {\n                height: $container.outerHeight()\n              }\n            ;\n            if( !module.is.standardScroll() ) {\n              module.debug('Non-standard scroll. Removing scroll offset from element offset');\n\n              scrollContext.top  = $scroll.scrollTop();\n              scrollContext.left = $scroll.scrollLeft();\n\n              element.offset.top  += scrollContext.top;\n              context.offset.top  += scrollContext.top;\n              element.offset.left += scrollContext.left;\n              context.offset.left += scrollContext.left;\n            }\n            module.cache = {\n              fits          : ( (element.height + settings.offset) <= scrollContext.height),\n              sameHeight    : (element.height == context.height),\n              scrollContext : {\n                height : scrollContext.height\n              },\n              element: {\n                margin : element.margin,\n                top    : element.offset.top - element.margin.top,\n                left   : element.offset.left,\n                width  : element.width,\n                height : element.height,\n                bottom : element.offset.top + element.height\n              },\n              context: {\n                top           : context.offset.top,\n                height        : context.height,\n                bottom        : context.offset.top + context.height\n              }\n            };\n            module.set.containerSize();\n\n            module.stick();\n            module.debug('Caching element positions', module.cache);\n          }\n        },\n\n        get: {\n          direction: function(scroll) {\n            var\n              direction = 'down'\n            ;\n            scroll = scroll || $scroll.scrollTop();\n            if(module.lastScroll !== undefined) {\n              if(module.lastScroll < scroll) {\n                direction = 'down';\n              }\n              else if(module.lastScroll > scroll) {\n                direction = 'up';\n              }\n            }\n            return direction;\n          },\n          scrollChange: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            return (module.lastScroll)\n              ? (scroll - module.lastScroll)\n              : 0\n            ;\n          },\n          currentElementScroll: function() {\n            if(module.elementScroll) {\n              return module.elementScroll;\n            }\n            return ( module.is.top() )\n              ? Math.abs(parseInt($module.css('top'), 10))    || 0\n              : Math.abs(parseInt($module.css('bottom'), 10)) || 0\n            ;\n          },\n\n          elementScroll: function(scroll) {\n            scroll = scroll || $scroll.scrollTop();\n            var\n              element        = module.cache.element,\n              scrollContext  = module.cache.scrollContext,\n              delta          = module.get.scrollChange(scroll),\n              maxScroll      = (element.height - scrollContext.height + settings.offset),\n              elementScroll  = module.get.currentElementScroll(),\n              possibleScroll = (elementScroll + delta)\n            ;\n            if(module.cache.fits || possibleScroll < 0) {\n              elementScroll = 0;\n            }\n            else if(possibleScroll > maxScroll ) {\n              elementScroll = maxScroll;\n            }\n            else {\n              elementScroll = possibleScroll;\n            }\n            return elementScroll;\n          }\n        },\n\n        remove: {\n          lastScroll: function() {\n            delete module.lastScroll;\n          },\n          elementScroll: function(scroll) {\n            delete module.elementScroll;\n          },\n          minimumSize: function() {\n            $container\n              .css('min-height', '')\n            ;\n          },\n          offset: function() {\n            $module.css('margin-top', '');\n          }\n        },\n\n        set: {\n          offset: function() {\n            module.verbose('Setting offset on element', settings.offset);\n            $module\n              .css('margin-top', settings.offset)\n            ;\n          },\n          containerSize: function() {\n            var\n              tagName = $container.get(0).tagName\n            ;\n            if(tagName === 'HTML' || tagName == 'body') {\n              // this can trigger for too many reasons\n              //module.error(error.container, tagName, $module);\n              module.determineContainer();\n            }\n            else {\n              if( Math.abs($container.outerHeight() - module.cache.context.height) > settings.jitter) {\n                module.debug('Context has padding, specifying exact height for container', module.cache.context.height);\n                $container.css({\n                  height: module.cache.context.height\n                });\n              }\n            }\n          },\n          minimumSize: function() {\n            var\n              element   = module.cache.element\n            ;\n            $container\n              .css('min-height', element.height)\n            ;\n          },\n          scroll: function(scroll) {\n            module.debug('Setting scroll on element', scroll);\n            if(module.elementScroll == scroll) {\n              return;\n            }\n            if( module.is.top() ) {\n              $module\n                .css('bottom', '')\n                .css('top', -scroll)\n              ;\n            }\n            if( module.is.bottom() ) {\n              $module\n                .css('top', '')\n                .css('bottom', scroll)\n              ;\n            }\n          },\n          size: function() {\n            if(module.cache.element.height !== 0 && module.cache.element.width !== 0) {\n              element.style.setProperty('width',  module.cache.element.width  + 'px', 'important');\n              element.style.setProperty('height', module.cache.element.height + 'px', 'important');\n            }\n          }\n        },\n\n        is: {\n          standardScroll: function() {\n            return ($scroll[0] == window);\n          },\n          top: function() {\n            return $module.hasClass(className.top);\n          },\n          bottom: function() {\n            return $module.hasClass(className.bottom);\n          },\n          initialPosition: function() {\n            return (!module.is.fixed() && !module.is.bound());\n          },\n          hidden: function() {\n            return (!$module.is(':visible'));\n          },\n          bound: function() {\n            return $module.hasClass(className.bound);\n          },\n          fixed: function() {\n            return $module.hasClass(className.fixed);\n          }\n        },\n\n        stick: function(scroll) {\n          var\n            cachedPosition = scroll || $scroll.scrollTop(),\n            cache          = module.cache,\n            fits           = cache.fits,\n            sameHeight     = cache.sameHeight,\n            element        = cache.element,\n            scrollContext  = cache.scrollContext,\n            context        = cache.context,\n            offset         = (module.is.bottom() && settings.pushing)\n              ? settings.bottomOffset\n              : settings.offset,\n            scroll         = {\n              top    : cachedPosition + offset,\n              bottom : cachedPosition + offset + scrollContext.height\n            },\n            direction      = module.get.direction(scroll.top),\n            elementScroll  = (fits)\n              ? 0\n              : module.get.elementScroll(scroll.top),\n\n            // shorthand\n            doesntFit      = !fits,\n            elementVisible = (element.height !== 0)\n          ;\n          if(elementVisible && !sameHeight) {\n\n            if( module.is.initialPosition() ) {\n              if(scroll.top >= context.bottom) {\n                module.debug('Initial element position is bottom of container');\n                module.bindBottom();\n              }\n              else if(scroll.top > element.top) {\n                if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Initial element position is bottom of container');\n                  module.bindBottom();\n                }\n                else {\n                  module.debug('Initial element position is fixed');\n                  module.fixTop();\n                }\n              }\n\n            }\n            else if( module.is.fixed() ) {\n\n              // currently fixed top\n              if( module.is.top() ) {\n                if( scroll.top <= element.top ) {\n                  module.debug('Fixed element reached top of container');\n                  module.setInitialPosition();\n                }\n                else if( (element.height + scroll.top - elementScroll) >= context.bottom ) {\n                  module.debug('Fixed element reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n              }\n\n              // currently fixed bottom\n              else if(module.is.bottom() ) {\n\n                // top edge\n                if( (scroll.bottom - element.height) <= element.top) {\n                  module.debug('Bottom fixed rail has reached top of container');\n                  module.setInitialPosition();\n                }\n                // bottom edge\n                else if(scroll.bottom >= context.bottom) {\n                  module.debug('Bottom fixed rail has reached bottom of container');\n                  module.bindBottom();\n                }\n                // scroll element if larger than screen\n                else if(doesntFit) {\n                  module.set.scroll(elementScroll);\n                  module.save.lastScroll(scroll.top);\n                  module.save.elementScroll(elementScroll);\n                }\n\n              }\n            }\n            else if( module.is.bottom() ) {\n              if( scroll.top <= element.top ) {\n                module.debug('Jumped from bottom fixed to top fixed, most likely used home/end button');\n                module.setInitialPosition();\n              }\n              else {\n                if(settings.pushing) {\n                  if(module.is.bound() && scroll.bottom <= context.bottom ) {\n                    module.debug('Fixing bottom attached element to bottom of browser.');\n                    module.fixBottom();\n                  }\n                }\n                else {\n                  if(module.is.bound() && (scroll.top <= context.bottom - element.height) ) {\n                    module.debug('Fixing bottom attached element to top of browser.');\n                    module.fixTop();\n                  }\n                }\n              }\n            }\n          }\n        },\n\n        bindTop: function() {\n          module.debug('Binding element to top of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : '',\n              marginBottom : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.bottom)\n            .addClass(className.bound)\n            .addClass(className.top)\n          ;\n          settings.onTop.call(element);\n          settings.onUnstick.call(element);\n        },\n        bindBottom: function() {\n          module.debug('Binding element to bottom of parent container');\n          module.remove.offset();\n          $module\n            .css({\n              left         : '',\n              top          : ''\n            })\n            .removeClass(className.fixed)\n            .removeClass(className.top)\n            .addClass(className.bound)\n            .addClass(className.bottom)\n          ;\n          settings.onBottom.call(element);\n          settings.onUnstick.call(element);\n        },\n\n        setInitialPosition: function() {\n          module.debug('Returning to initial position');\n          module.unfix();\n          module.unbind();\n        },\n\n\n        fixTop: function() {\n          module.debug('Fixing element to top of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.bottom)\n            .addClass(className.fixed)\n            .addClass(className.top)\n          ;\n          settings.onStick.call(element);\n        },\n\n        fixBottom: function() {\n          module.debug('Sticking element to bottom of page');\n          if(settings.setSize) {\n            module.set.size();\n          }\n          module.set.minimumSize();\n          module.set.offset();\n          $module\n            .css({\n              left         : module.cache.element.left,\n              bottom       : '',\n              marginBottom : ''\n            })\n            .removeClass(className.bound)\n            .removeClass(className.top)\n            .addClass(className.fixed)\n            .addClass(className.bottom)\n          ;\n          settings.onStick.call(element);\n        },\n\n        unbind: function() {\n          if( module.is.bound() ) {\n            module.debug('Removing container bound position on element');\n            module.remove.offset();\n            $module\n              .removeClass(className.bound)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n          }\n        },\n\n        unfix: function() {\n          if( module.is.fixed() ) {\n            module.debug('Removing fixed position on element');\n            module.remove.minimumSize();\n            module.remove.offset();\n            $module\n              .removeClass(className.fixed)\n              .removeClass(className.top)\n              .removeClass(className.bottom)\n            ;\n            settings.onUnstick.call(element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting elements position');\n          module.unbind();\n          module.unfix();\n          module.resetCSS();\n          module.remove.offset();\n          module.remove.lastScroll();\n        },\n\n        resetCSS: function() {\n          $module\n            .css({\n              width  : '',\n              height : ''\n            })\n          ;\n          $container\n            .css({\n              height: ''\n            })\n          ;\n        },\n\n        setting: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            settings[name] = value;\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 0);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n$.fn.sticky.settings = {\n\n  name           : 'Sticky',\n  namespace      : 'sticky',\n\n  silent         : false,\n  debug          : false,\n  verbose        : true,\n  performance    : true,\n\n  // whether to stick in the opposite direction on scroll up\n  pushing        : false,\n\n  context        : false,\n  container      : false,\n\n  // Context to watch scroll events\n  scrollContext  : window,\n\n  // Offset to adjust scroll\n  offset         : 0,\n\n  // Offset to adjust scroll when attached to bottom of screen\n  bottomOffset   : 0,\n\n  // will only set container height if difference between context and container is larger than this number\n  jitter         : 5,\n\n  // set width of sticky element when it is fixed to page (used to make sure 100% width is maintained if no fixed size set)\n  setSize        : true,\n\n  // Whether to automatically observe changes with Mutation Observers\n  observeChanges : false,\n\n  // Called when position is recalculated\n  onReposition   : function(){},\n\n  // Called on each scroll\n  onScroll       : function(){},\n\n  // Called when element is stuck to viewport\n  onStick        : function(){},\n\n  // Called when element is unstuck from viewport\n  onUnstick      : function(){},\n\n  // Called when element reaches top of context\n  onTop          : function(){},\n\n  // Called when element reaches bottom of context\n  onBottom       : function(){},\n\n  error         : {\n    container      : 'Sticky element must be inside a relative container',\n    visible        : 'Element is hidden, you must call refresh after element becomes visible. Use silent setting to surpress this warning in production.',\n    method         : 'The method you called is not defined.',\n    invalidContext : 'Context specified does not exist',\n    elementSize    : 'Sticky element is larger than its container, cannot create sticky.'\n  },\n\n  className : {\n    bound     : 'bound',\n    fixed     : 'fixed',\n    supported : 'native',\n    top       : 'top',\n    bottom    : 'bottom'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/sticky.less",
    "content": "/*!\n * # Semantic UI - Sticky\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'sticky';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Sticky\n*******************************/\n\n.ui.sticky {\n  position: static;\n  transition: @transition;\n  z-index: @zIndex;\n}\n\n/*******************************\n            States\n*******************************/\n\n/* Bound */\n.ui.sticky.bound {\n  position: absolute;\n  left: auto;\n  right: auto;\n}\n\n/* Fixed */\n.ui.sticky.fixed {\n  position: fixed;\n  left: auto;\n  right: auto;\n}\n\n/* Bound/Fixed Position */\n.ui.sticky.bound.top,\n.ui.sticky.fixed.top {\n  top: 0px;\n  bottom: auto;\n}\n.ui.sticky.bound.bottom,\n.ui.sticky.fixed.bottom {\n  top: auto;\n  bottom: 0px;\n}\n\n\n/*******************************\n            Types\n*******************************/\n\n.ui.native.sticky {\n  position: -webkit-sticky;\n  position: -moz-sticky;\n  position: -ms-sticky;\n  position: -o-sticky;\n  position: sticky;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/tab.js",
    "content": "/*!\n * # Semantic UI - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.tab = function(parameters) {\n\n  var\n    // use window context if none specified\n    $allModules     = $.isFunction(this)\n        ? $(window)\n        : $(this),\n\n    moduleSelector  = $allModules.selector || '',\n    time            = new Date().getTime(),\n    performance     = [],\n\n    query           = arguments[0],\n    methodInvoked   = (typeof query == 'string'),\n    queryArguments  = [].slice.call(arguments, 1),\n\n    initializedHistory = false,\n    returnedValue\n  ;\n\n  $allModules\n    .each(function() {\n      var\n\n        settings        = ( $.isPlainObject(parameters) )\n          ? $.extend(true, {}, $.fn.tab.settings, parameters)\n          : $.extend({}, $.fn.tab.settings),\n\n        className       = settings.className,\n        metadata        = settings.metadata,\n        selector        = settings.selector,\n        error           = settings.error,\n\n        eventNamespace  = '.' + settings.namespace,\n        moduleNamespace = 'module-' + settings.namespace,\n\n        $module         = $(this),\n        $context,\n        $tabs,\n\n        cache           = {},\n        firstLoad       = true,\n        recursionDepth  = 0,\n        element         = this,\n        instance        = $module.data(moduleNamespace),\n\n        activeTabPath,\n        parameterArray,\n        module,\n\n        historyEvent\n\n      ;\n\n      module = {\n\n        initialize: function() {\n          module.debug('Initializing tab menu item', $module);\n          module.fix.callbacks();\n          module.determineTabs();\n\n          module.debug('Determining tabs', settings.context, $tabs);\n          // set up automatic routing\n          if(settings.auto) {\n            module.set.auto();\n          }\n          module.bind.events();\n\n          if(settings.history && !initializedHistory) {\n            module.initializeHistory();\n            initializedHistory = true;\n          }\n\n          module.instantiate();\n        },\n\n        instantiate: function () {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, module)\n          ;\n        },\n\n        destroy: function() {\n          module.debug('Destroying tabs', $module);\n          $module\n            .removeData(moduleNamespace)\n            .off(eventNamespace)\n          ;\n        },\n\n        bind: {\n          events: function() {\n            // if using $.tab don't add events\n            if( !$.isWindow( element ) ) {\n              module.debug('Attaching tab activation events to element', $module);\n              $module\n                .on('click' + eventNamespace, module.event.click)\n              ;\n            }\n          }\n        },\n\n        determineTabs: function() {\n          var\n            $reference\n          ;\n\n          // determine tab context\n          if(settings.context === 'parent') {\n            if($module.closest(selector.ui).length > 0) {\n              $reference = $module.closest(selector.ui);\n              module.verbose('Using closest UI element as parent', $reference);\n            }\n            else {\n              $reference = $module;\n            }\n            $context = $reference.parent();\n            module.verbose('Determined parent element for creating context', $context);\n          }\n          else if(settings.context) {\n            $context = $(settings.context);\n            module.verbose('Using selector for tab context', settings.context, $context);\n          }\n          else {\n            $context = $('body');\n          }\n          // find tabs\n          if(settings.childrenOnly) {\n            $tabs = $context.children(selector.tabs);\n            module.debug('Searching tab context children for tabs', $context, $tabs);\n          }\n          else {\n            $tabs = $context.find(selector.tabs);\n            module.debug('Searching tab context for tabs', $context, $tabs);\n          }\n        },\n\n        fix: {\n          callbacks: function() {\n            if( $.isPlainObject(parameters) && (parameters.onTabLoad || parameters.onTabInit) ) {\n              if(parameters.onTabLoad) {\n                parameters.onLoad = parameters.onTabLoad;\n                delete parameters.onTabLoad;\n                module.error(error.legacyLoad, parameters.onLoad);\n              }\n              if(parameters.onTabInit) {\n                parameters.onFirstLoad = parameters.onTabInit;\n                delete parameters.onTabInit;\n                module.error(error.legacyInit, parameters.onFirstLoad);\n              }\n              settings = $.extend(true, {}, $.fn.tab.settings, parameters);\n            }\n          }\n        },\n\n        initializeHistory: function() {\n          module.debug('Initializing page state');\n          if( $.address === undefined ) {\n            module.error(error.state);\n            return false;\n          }\n          else {\n            if(settings.historyType == 'state') {\n              module.debug('Using HTML5 to manage state');\n              if(settings.path !== false) {\n                $.address\n                  .history(true)\n                  .state(settings.path)\n                ;\n              }\n              else {\n                module.error(error.path);\n                return false;\n              }\n            }\n            $.address\n              .bind('change', module.event.history.change)\n            ;\n          }\n        },\n\n        event: {\n          click: function(event) {\n            var\n              tabPath = $(this).data(metadata.tab)\n            ;\n            if(tabPath !== undefined) {\n              if(settings.history) {\n                module.verbose('Updating page state', event);\n                $.address.value(tabPath);\n              }\n              else {\n                module.verbose('Changing tab', event);\n                module.changeTab(tabPath);\n              }\n              event.preventDefault();\n            }\n            else {\n              module.debug('No tab specified');\n            }\n          },\n          history: {\n            change: function(event) {\n              var\n                tabPath   = event.pathNames.join('/') || module.get.initialPath(),\n                pageTitle = settings.templates.determineTitle(tabPath) || false\n              ;\n              module.performance.display();\n              module.debug('History change event', tabPath, event);\n              historyEvent = event;\n              if(tabPath !== undefined) {\n                module.changeTab(tabPath);\n              }\n              if(pageTitle) {\n                $.address.title(pageTitle);\n              }\n            }\n          }\n        },\n\n        refresh: function() {\n          if(activeTabPath) {\n            module.debug('Refreshing tab', activeTabPath);\n            module.changeTab(activeTabPath);\n          }\n        },\n\n        cache: {\n\n          read: function(cacheKey) {\n            return (cacheKey !== undefined)\n              ? cache[cacheKey]\n              : false\n            ;\n          },\n          add: function(cacheKey, content) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Adding cached content for', cacheKey);\n            cache[cacheKey] = content;\n          },\n          remove: function(cacheKey) {\n            cacheKey = cacheKey || activeTabPath;\n            module.debug('Removing cached content for', cacheKey);\n            delete cache[cacheKey];\n          }\n        },\n\n        set: {\n          auto: function() {\n            var\n              url = (typeof settings.path == 'string')\n                ? settings.path.replace(/\\/$/, '') + '/{$tab}'\n                : '/{$tab}'\n            ;\n            module.verbose('Setting up automatic tab retrieval from server', url);\n            if($.isPlainObject(settings.apiSettings)) {\n              settings.apiSettings.url = url;\n            }\n            else {\n              settings.apiSettings = {\n                url: url\n              };\n            }\n          },\n          loading: function(tabPath) {\n            var\n              $tab      = module.get.tabElement(tabPath),\n              isLoading = $tab.hasClass(className.loading)\n            ;\n            if(!isLoading) {\n              module.verbose('Setting loading state for', $tab);\n              $tab\n                .addClass(className.loading)\n                .siblings($tabs)\n                  .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onRequest.call($tab[0], tabPath);\n              }\n            }\n          },\n          state: function(state) {\n            $.address.value(state);\n          }\n        },\n\n        changeTab: function(tabPath) {\n          var\n            pushStateAvailable = (window.history && window.history.pushState),\n            shouldIgnoreLoad   = (pushStateAvailable && settings.ignoreFirstLoad && firstLoad),\n            remoteContent      = (settings.auto || $.isPlainObject(settings.apiSettings) ),\n            // only add default path if not remote content\n            pathArray = (remoteContent && !shouldIgnoreLoad)\n              ? module.utilities.pathToArray(tabPath)\n              : module.get.defaultPathArray(tabPath)\n          ;\n          tabPath = module.utilities.arrayToPath(pathArray);\n          $.each(pathArray, function(index, tab) {\n            var\n              currentPathArray   = pathArray.slice(0, index + 1),\n              currentPath        = module.utilities.arrayToPath(currentPathArray),\n\n              isTab              = module.is.tab(currentPath),\n              isLastIndex        = (index + 1 == pathArray.length),\n\n              $tab               = module.get.tabElement(currentPath),\n              $anchor,\n              nextPathArray,\n              nextPath,\n              isLastTab\n            ;\n            module.verbose('Looking for tab', tab);\n            if(isTab) {\n              module.verbose('Tab was found', tab);\n              // scope up\n              activeTabPath  = currentPath;\n              parameterArray = module.utilities.filterArray(pathArray, currentPathArray);\n\n              if(isLastIndex) {\n                isLastTab = true;\n              }\n              else {\n                nextPathArray = pathArray.slice(0, index + 2);\n                nextPath      = module.utilities.arrayToPath(nextPathArray);\n                isLastTab     = ( !module.is.tab(nextPath) );\n                if(isLastTab) {\n                  module.verbose('Tab parameters found', nextPathArray);\n                }\n              }\n              if(isLastTab && remoteContent) {\n                if(!shouldIgnoreLoad) {\n                  module.activate.navigation(currentPath);\n                  module.fetch.content(currentPath, tabPath);\n                }\n                else {\n                  module.debug('Ignoring remote content on first tab load', currentPath);\n                  firstLoad = false;\n                  module.cache.add(tabPath, $tab.html());\n                  module.activate.all(currentPath);\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                return false;\n              }\n              else {\n                module.debug('Opened local tab', currentPath);\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n              }\n\n            }\n            else if(tabPath.search('/') == -1 && tabPath !== '') {\n              // look for in page anchor\n              $anchor     = $('#' + tabPath + ', a[name=\"' + tabPath + '\"]');\n              currentPath = $anchor.closest('[data-tab]').data(metadata.tab);\n              $tab        = module.get.tabElement(currentPath);\n              // if anchor exists use parent tab\n              if($anchor && $anchor.length > 0 && currentPath) {\n                module.debug('Anchor link used, opening parent tab', $tab, $anchor);\n                if( !$tab.hasClass(className.active) ) {\n                  setTimeout(function() {\n                    module.scrollTo($anchor);\n                  }, 0);\n                }\n                module.activate.all(currentPath);\n                if( !module.cache.read(currentPath) ) {\n                  module.cache.add(currentPath, true);\n                  module.debug('First time tab loaded calling tab init');\n                  settings.onFirstLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                }\n                settings.onLoad.call($tab[0], currentPath, parameterArray, historyEvent);\n                return false;\n              }\n            }\n            else {\n              module.error(error.missingTab, $module, $context, currentPath);\n              return false;\n            }\n          });\n        },\n\n        scrollTo: function($element) {\n          var\n            scrollOffset = ($element && $element.length > 0)\n              ? $element.offset().top\n              : false\n          ;\n          if(scrollOffset !== false) {\n            module.debug('Forcing scroll to an in-page link in a hidden tab', scrollOffset, $element);\n            $(document).scrollTop(scrollOffset);\n          }\n        },\n\n        update: {\n          content: function(tabPath, html, evaluateScripts) {\n            var\n              $tab = module.get.tabElement(tabPath),\n              tab  = $tab[0]\n            ;\n            evaluateScripts = (evaluateScripts !== undefined)\n              ? evaluateScripts\n              : settings.evaluateScripts\n            ;\n            if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && typeof html !== 'string') {\n              $tab\n                .empty()\n                .append($(html).clone(true))\n              ;\n            }\n            else {\n              if(evaluateScripts) {\n                module.debug('Updating HTML and evaluating inline scripts', tabPath, html);\n                $tab.html(html);\n              }\n              else {\n                module.debug('Updating HTML', tabPath, html);\n                tab.innerHTML = html;\n              }\n            }\n          }\n        },\n\n        fetch: {\n\n          content: function(tabPath, fullTabPath) {\n            var\n              $tab        = module.get.tabElement(tabPath),\n              apiSettings = {\n                dataType         : 'html',\n                encodeParameters : false,\n                on               : 'now',\n                cache            : settings.alwaysRefresh,\n                headers          : {\n                  'X-Remote': true\n                },\n                onSuccess : function(response) {\n                  if(settings.cacheType == 'response') {\n                    module.cache.add(fullTabPath, response);\n                  }\n                  module.update.content(tabPath, response);\n                  if(tabPath == activeTabPath) {\n                    module.debug('Content loaded', tabPath);\n                    module.activate.tab(tabPath);\n                  }\n                  else {\n                    module.debug('Content loaded in background', tabPath);\n                  }\n                  settings.onFirstLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n                  settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n\n                  if(settings.loadOnce) {\n                    module.cache.add(fullTabPath, true);\n                  }\n                  else if(typeof settings.cacheType == 'string' && settings.cacheType.toLowerCase() == 'dom' && $tab.children().length > 0) {\n                    setTimeout(function() {\n                      var\n                        $clone = $tab.children().clone(true)\n                      ;\n                      $clone = $clone.not('script');\n                      module.cache.add(fullTabPath, $clone);\n                    }, 0);\n                  }\n                  else {\n                    module.cache.add(fullTabPath, $tab.html());\n                  }\n                },\n                urlData: {\n                  tab: fullTabPath\n                }\n              },\n              request         = $tab.api('get request') || false,\n              existingRequest = ( request && request.state() === 'pending' ),\n              requestSettings,\n              cachedContent\n            ;\n\n            fullTabPath   = fullTabPath || tabPath;\n            cachedContent = module.cache.read(fullTabPath);\n\n\n            if(settings.cache && cachedContent) {\n              module.activate.tab(tabPath);\n              module.debug('Adding cached content', fullTabPath);\n              if(!settings.loadOnce) {\n                if(settings.evaluateScripts == 'once') {\n                  module.update.content(tabPath, cachedContent, false);\n                }\n                else {\n                  module.update.content(tabPath, cachedContent);\n                }\n              }\n              settings.onLoad.call($tab[0], tabPath, parameterArray, historyEvent);\n            }\n            else if(existingRequest) {\n              module.set.loading(tabPath);\n              module.debug('Content is already loading', fullTabPath);\n            }\n            else if($.api !== undefined) {\n              requestSettings = $.extend(true, {}, settings.apiSettings, apiSettings);\n              module.debug('Retrieving remote content', fullTabPath, requestSettings);\n              module.set.loading(tabPath);\n              $tab.api(requestSettings);\n            }\n            else {\n              module.error(error.api);\n            }\n          }\n        },\n\n        activate: {\n          all: function(tabPath) {\n            module.activate.tab(tabPath);\n            module.activate.navigation(tabPath);\n          },\n          tab: function(tabPath) {\n            var\n              $tab          = module.get.tabElement(tabPath),\n              $deactiveTabs = (settings.deactivate == 'siblings')\n                ? $tab.siblings($tabs)\n                : $tabs.not($tab),\n              isActive      = $tab.hasClass(className.active)\n            ;\n            module.verbose('Showing tab content for', $tab);\n            if(!isActive) {\n              $tab\n                .addClass(className.active)\n              ;\n              $deactiveTabs\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n              if($tab.length > 0) {\n                settings.onVisible.call($tab[0], tabPath);\n              }\n            }\n          },\n          navigation: function(tabPath) {\n            var\n              $navigation         = module.get.navElement(tabPath),\n              $deactiveNavigation = (settings.deactivate == 'siblings')\n                ? $navigation.siblings($allModules)\n                : $allModules.not($navigation),\n              isActive    = $navigation.hasClass(className.active)\n            ;\n            module.verbose('Activating tab navigation for', $navigation, tabPath);\n            if(!isActive) {\n              $navigation\n                .addClass(className.active)\n              ;\n              $deactiveNavigation\n                .removeClass(className.active + ' ' + className.loading)\n              ;\n            }\n          }\n        },\n\n        deactivate: {\n          all: function() {\n            module.deactivate.navigation();\n            module.deactivate.tabs();\n          },\n          navigation: function() {\n            $allModules\n              .removeClass(className.active)\n            ;\n          },\n          tabs: function() {\n            $tabs\n              .removeClass(className.active + ' ' + className.loading)\n            ;\n          }\n        },\n\n        is: {\n          tab: function(tabName) {\n            return (tabName !== undefined)\n              ? ( module.get.tabElement(tabName).length > 0 )\n              : false\n            ;\n          }\n        },\n\n        get: {\n          initialPath: function() {\n            return $allModules.eq(0).data(metadata.tab) || $tabs.eq(0).data(metadata.tab);\n          },\n          path: function() {\n            return $.address.value();\n          },\n          // adds default tabs to tab path\n          defaultPathArray: function(tabPath) {\n            return module.utilities.pathToArray( module.get.defaultPath(tabPath) );\n          },\n          defaultPath: function(tabPath) {\n            var\n              $defaultNav = $allModules.filter('[data-' + metadata.tab + '^=\"' + tabPath + '/\"]').eq(0),\n              defaultTab  = $defaultNav.data(metadata.tab) || false\n            ;\n            if( defaultTab ) {\n              module.debug('Found default tab', defaultTab);\n              if(recursionDepth < settings.maxDepth) {\n                recursionDepth++;\n                return module.get.defaultPath(defaultTab);\n              }\n              module.error(error.recursion);\n            }\n            else {\n              module.debug('No default tabs found for', tabPath, $tabs);\n            }\n            recursionDepth = 0;\n            return tabPath;\n          },\n          navElement: function(tabPath) {\n            tabPath = tabPath || activeTabPath;\n            return $allModules.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n          },\n          tabElement: function(tabPath) {\n            var\n              $fullPathTab,\n              $simplePathTab,\n              tabPathArray,\n              lastTab\n            ;\n            tabPath        = tabPath || activeTabPath;\n            tabPathArray   = module.utilities.pathToArray(tabPath);\n            lastTab        = module.utilities.last(tabPathArray);\n            $fullPathTab   = $tabs.filter('[data-' + metadata.tab + '=\"' + tabPath + '\"]');\n            $simplePathTab = $tabs.filter('[data-' + metadata.tab + '=\"' + lastTab + '\"]');\n            return ($fullPathTab.length > 0)\n              ? $fullPathTab\n              : $simplePathTab\n            ;\n          },\n          tab: function() {\n            return activeTabPath;\n          }\n        },\n\n        utilities: {\n          filterArray: function(keepArray, removeArray) {\n            return $.grep(keepArray, function(keepValue) {\n              return ( $.inArray(keepValue, removeArray) == -1);\n            });\n          },\n          last: function(array) {\n            return $.isArray(array)\n              ? array[ array.length - 1]\n              : false\n            ;\n          },\n          pathToArray: function(pathName) {\n            if(pathName === undefined) {\n              pathName = activeTabPath;\n            }\n            return typeof pathName == 'string'\n              ? pathName.split('/')\n              : [pathName]\n            ;\n          },\n          arrayToPath: function(pathArray) {\n            return $.isArray(pathArray)\n              ? pathArray.join('/')\n              : false\n            ;\n          }\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                module.error(error.method, query);\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return found;\n        }\n      };\n      if(methodInvoked) {\n        if(instance === undefined) {\n          module.initialize();\n        }\n        module.invoke(query);\n      }\n      else {\n        if(instance !== undefined) {\n          instance.invoke('destroy');\n        }\n        module.initialize();\n      }\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n\n};\n\n// shortcut for tabbed content with no defined navigation\n$.tab = function() {\n  $(window).tab.apply(this, arguments);\n};\n\n$.fn.tab.settings = {\n\n  name            : 'Tab',\n  namespace       : 'tab',\n\n  silent          : false,\n  debug           : false,\n  verbose         : false,\n  performance     : true,\n\n  auto            : false,      // uses pjax style endpoints fetching content from same url with remote-content headers\n  history         : false,      // use browser history\n  historyType     : 'hash',     // #/ or html5 state\n  path            : false,      // base path of url\n\n  context         : false,      // specify a context that tabs must appear inside\n  childrenOnly    : false,      // use only tabs that are children of context\n  maxDepth        : 25,         // max depth a tab can be nested\n\n  deactivate      : 'siblings', // whether tabs should deactivate sibling menu elements or all elements initialized together\n\n  alwaysRefresh   : false,      // load tab content new every tab click\n  cache           : true,       // cache the content requests to pull locally\n  loadOnce        : false,      // Whether tab data should only be loaded once when using remote content\n  cacheType       : 'response', // Whether to cache exact response, or to html cache contents after scripts execute\n  ignoreFirstLoad : false,      // don't load remote content on first load\n\n  apiSettings     : false,      // settings for api call\n  evaluateScripts : 'once',     // whether inline scripts should be parsed (true/false/once). Once will not re-evaluate on cached content\n\n  onFirstLoad : function(tabPath, parameterArray, historyEvent) {}, // called first time loaded\n  onLoad      : function(tabPath, parameterArray, historyEvent) {}, // called on every load\n  onVisible   : function(tabPath, parameterArray, historyEvent) {}, // called every time tab visible\n  onRequest   : function(tabPath, parameterArray, historyEvent) {}, // called ever time a tab beings loading remote content\n\n  templates : {\n    determineTitle: function(tabArray) {} // returns page title for path\n  },\n\n  error: {\n    api        : 'You attempted to load content without API module',\n    method     : 'The method you called is not defined',\n    missingTab : 'Activated tab cannot be found. Tabs are case-sensitive.',\n    noContent  : 'The tab you specified is missing a content url.',\n    path       : 'History enabled, but no path was specified',\n    recursion  : 'Max recursive depth reached',\n    legacyInit : 'onTabInit has been renamed to onFirstLoad in 2.0, please adjust your code.',\n    legacyLoad : 'onTabLoad has been renamed to onLoad in 2.0. Please adjust your code',\n    state      : 'History requires Asual\\'s Address library <https://github.com/asual/jquery-address>'\n  },\n\n  metadata : {\n    tab    : 'tab',\n    loaded : 'loaded',\n    promise: 'promise'\n  },\n\n  className   : {\n    loading : 'loading',\n    active  : 'active'\n  },\n\n  selector    : {\n    tabs : '.ui.tab',\n    ui   : '.ui'\n  }\n\n};\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/tab.less",
    "content": "/*!\n * # Semantic UI - Tab\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'tab';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n           UI Tabs\n*******************************/\n\n.ui.tab {\n  display: none;\n}\n\n/*******************************\n             States\n*******************************/\n\n/*--------------------\n       Active\n---------------------*/\n\n.ui.tab.active,\n.ui.tab.open {\n  display: block;\n}\n\n/*--------------------\n       Loading\n---------------------*/\n\n.ui.tab.loading {\n  position: relative;\n  overflow: hidden;\n  display: block;\n  min-height: @loadingMinHeight;\n}\n.ui.tab.loading * {\n  position: @loadingContentPosition !important;\n  left: @loadingContentOffset !important;\n}\n\n.ui.tab.loading:before,\n.ui.tab.loading.segment:before {\n  position: absolute;\n  content: '';\n  top: @loaderDistanceFromTop;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  border-radius: @circularRadius;\n  border: @loaderLineWidth solid @loaderFillColor;\n}\n.ui.tab.loading:after,\n.ui.tab.loading.segment:after {\n  position: absolute;\n  content: '';\n  top: @loaderDistanceFromTop;\n  left: 50%;\n\n  margin: @loaderMargin;\n  width: @loaderSize;\n  height: @loaderSize;\n\n  animation: button-spin @loaderSpeed linear;\n  animation-iteration-count: infinite;\n\n  border-radius: @circularRadius;\n\n  border-color: @loaderLineColor transparent transparent;\n  border-style: solid;\n  border-width: @loaderLineWidth;\n\n  box-shadow: 0px 0px 0px 1px transparent;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/transition.js",
    "content": "/*!\n * # Semantic UI - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n;(function ($, window, document, undefined) {\n\n\"use strict\";\n\nwindow = (typeof window != 'undefined' && window.Math == Math)\n  ? window\n  : (typeof self != 'undefined' && self.Math == Math)\n    ? self\n    : Function('return this')()\n;\n\n$.fn.transition = function() {\n  var\n    $allModules     = $(this),\n    moduleSelector  = $allModules.selector || '',\n\n    time            = new Date().getTime(),\n    performance     = [],\n\n    moduleArguments = arguments,\n    query           = moduleArguments[0],\n    queryArguments  = [].slice.call(arguments, 1),\n    methodInvoked   = (typeof query === 'string'),\n\n    requestAnimationFrame = window.requestAnimationFrame\n      || window.mozRequestAnimationFrame\n      || window.webkitRequestAnimationFrame\n      || window.msRequestAnimationFrame\n      || function(callback) { setTimeout(callback, 0); },\n\n    returnedValue\n  ;\n  $allModules\n    .each(function(index) {\n      var\n        $module  = $(this),\n        element  = this,\n\n        // set at run time\n        settings,\n        instance,\n\n        error,\n        className,\n        metadata,\n        animationEnd,\n        animationName,\n\n        namespace,\n        moduleNamespace,\n        eventNamespace,\n        module\n      ;\n\n      module = {\n\n        initialize: function() {\n\n          // get full settings\n          settings        = module.get.settings.apply(element, moduleArguments);\n\n          // shorthand\n          className       = settings.className;\n          error           = settings.error;\n          metadata        = settings.metadata;\n\n          // define namespace\n          eventNamespace  = '.' + settings.namespace;\n          moduleNamespace = 'module-' + settings.namespace;\n          instance        = $module.data(moduleNamespace) || module;\n\n          // get vendor specific events\n          animationEnd    = module.get.animationEndEvent();\n\n          if(methodInvoked) {\n            methodInvoked = module.invoke(query);\n          }\n\n          // method not invoked, lets run an animation\n          if(methodInvoked === false) {\n            module.verbose('Converted arguments into settings object', settings);\n            if(settings.interval) {\n              module.delay(settings.animate);\n            }\n            else  {\n              module.animate();\n            }\n            module.instantiate();\n          }\n        },\n\n        instantiate: function() {\n          module.verbose('Storing instance of module', module);\n          instance = module;\n          $module\n            .data(moduleNamespace, instance)\n          ;\n        },\n\n        destroy: function() {\n          module.verbose('Destroying previous module for', element);\n          $module\n            .removeData(moduleNamespace)\n          ;\n        },\n\n        refresh: function() {\n          module.verbose('Refreshing display type on next animation');\n          delete module.displayType;\n        },\n\n        forceRepaint: function() {\n          module.verbose('Forcing element repaint');\n          var\n            $parentElement = $module.parent(),\n            $nextElement = $module.next()\n          ;\n          if($nextElement.length === 0) {\n            $module.detach().appendTo($parentElement);\n          }\n          else {\n            $module.detach().insertBefore($nextElement);\n          }\n        },\n\n        repaint: function() {\n          module.verbose('Repainting element');\n          var\n            fakeAssignment = element.offsetWidth\n          ;\n        },\n\n        delay: function(interval) {\n          var\n            direction = module.get.animationDirection(),\n            shouldReverse,\n            delay\n          ;\n          if(!direction) {\n            direction = module.can.transition()\n              ? module.get.direction()\n              : 'static'\n            ;\n          }\n          interval = (interval !== undefined)\n            ? interval\n            : settings.interval\n          ;\n          shouldReverse = (settings.reverse == 'auto' && direction == className.outward);\n          delay = (shouldReverse || settings.reverse == true)\n            ? ($allModules.length - index) * settings.interval\n            : index * settings.interval\n          ;\n          module.debug('Delaying animation by', delay);\n          setTimeout(module.animate, delay);\n        },\n\n        animate: function(overrideSettings) {\n          settings = overrideSettings || settings;\n          if(!module.is.supported()) {\n            module.error(error.support);\n            return false;\n          }\n          module.debug('Preparing animation', settings.animation);\n          if(module.is.animating()) {\n            if(settings.queue) {\n              if(!settings.allowRepeats && module.has.direction() && module.is.occurring() && module.queuing !== true) {\n                module.debug('Animation is currently occurring, preventing queueing same animation', settings.animation);\n              }\n              else {\n                module.queue(settings.animation);\n              }\n              return false;\n            }\n            else if(!settings.allowRepeats && module.is.occurring()) {\n              module.debug('Animation is already occurring, will not execute repeated animation', settings.animation);\n              return false;\n            }\n            else {\n              module.debug('New animation started, completing previous early', settings.animation);\n              instance.complete();\n            }\n          }\n          if( module.can.animate() ) {\n            module.set.animating(settings.animation);\n          }\n          else {\n            module.error(error.noAnimation, settings.animation, element);\n          }\n        },\n\n        reset: function() {\n          module.debug('Resetting animation to beginning conditions');\n          module.remove.animationCallbacks();\n          module.restore.conditions();\n          module.remove.animating();\n        },\n\n        queue: function(animation) {\n          module.debug('Queueing animation of', animation);\n          module.queuing = true;\n          $module\n            .one(animationEnd + '.queue' + eventNamespace, function() {\n              module.queuing = false;\n              module.repaint();\n              module.animate.apply(this, settings);\n            })\n          ;\n        },\n\n        complete: function (event) {\n          module.debug('Animation complete', settings.animation);\n          module.remove.completeCallback();\n          module.remove.failSafe();\n          if(!module.is.looping()) {\n            if( module.is.outward() ) {\n              module.verbose('Animation is outward, hiding element');\n              module.restore.conditions();\n              module.hide();\n            }\n            else if( module.is.inward() ) {\n              module.verbose('Animation is outward, showing element');\n              module.restore.conditions();\n              module.show();\n            }\n            else {\n              module.verbose('Static animation completed');\n              module.restore.conditions();\n              settings.onComplete.call(element);\n            }\n          }\n        },\n\n        force: {\n          visible: function() {\n            var\n              style          = $module.attr('style'),\n              userStyle      = module.get.userStyle(),\n              displayType    = module.get.displayType(),\n              overrideStyle  = userStyle + 'display: ' + displayType + ' !important;',\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== displayType) {\n              module.verbose('Overriding default display to show element', displayType);\n              $module\n                .attr('style', overrideStyle)\n              ;\n            }\n            else if(emptyStyle) {\n              $module.removeAttr('style');\n            }\n          },\n          hidden: function() {\n            var\n              style          = $module.attr('style'),\n              currentDisplay = $module.css('display'),\n              emptyStyle     = (style === undefined || style === '')\n            ;\n            if(currentDisplay !== 'none' && !module.is.hidden()) {\n              module.verbose('Overriding default display to hide element');\n              $module\n                .css('display', 'none')\n              ;\n            }\n            else if(emptyStyle) {\n              $module\n                .removeAttr('style')\n              ;\n            }\n          }\n        },\n\n        has: {\n          direction: function(animation) {\n            var\n              hasDirection = false\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              $.each(animation, function(index, word){\n                if(word === className.inward || word === className.outward) {\n                  hasDirection = true;\n                }\n              });\n            }\n            return hasDirection;\n          },\n          inlineDisplay: function() {\n            var\n              style = $module.attr('style') || ''\n            ;\n            return $.isArray(style.match(/display.*?;/, ''));\n          }\n        },\n\n        set: {\n          animating: function(animation) {\n            var\n              animationClass,\n              direction\n            ;\n            // remove previous callbacks\n            module.remove.completeCallback();\n\n            // determine exact animation\n            animation      = animation || settings.animation;\n            animationClass = module.get.animationClass(animation);\n\n            // save animation class in cache to restore class names\n            module.save.animation(animationClass);\n\n            // override display if necessary so animation appears visibly\n            module.force.visible();\n\n            module.remove.hidden();\n            module.remove.direction();\n\n            module.start.animation(animationClass);\n\n          },\n          duration: function(animationName, duration) {\n            duration = duration || settings.duration;\n            duration = (typeof duration == 'number')\n              ? duration + 'ms'\n              : duration\n            ;\n            if(duration || duration === 0) {\n              module.verbose('Setting animation duration', duration);\n              $module\n                .css({\n                  'animation-duration':  duration\n                })\n              ;\n            }\n          },\n          direction: function(direction) {\n            direction = direction || module.get.direction();\n            if(direction == className.inward) {\n              module.set.inward();\n            }\n            else {\n              module.set.outward();\n            }\n          },\n          looping: function() {\n            module.debug('Transition set to loop');\n            $module\n              .addClass(className.looping)\n            ;\n          },\n          hidden: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.hidden)\n            ;\n          },\n          inward: function() {\n            module.debug('Setting direction to inward');\n            $module\n              .removeClass(className.outward)\n              .addClass(className.inward)\n            ;\n          },\n          outward: function() {\n            module.debug('Setting direction to outward');\n            $module\n              .removeClass(className.inward)\n              .addClass(className.outward)\n            ;\n          },\n          visible: function() {\n            $module\n              .addClass(className.transition)\n              .addClass(className.visible)\n            ;\n          }\n        },\n\n        start: {\n          animation: function(animationClass) {\n            animationClass = animationClass || module.get.animationClass();\n            module.debug('Starting tween', animationClass);\n            $module\n              .addClass(animationClass)\n              .one(animationEnd + '.complete' + eventNamespace, module.complete)\n            ;\n            if(settings.useFailSafe) {\n              module.add.failSafe();\n            }\n            module.set.duration(settings.duration);\n            settings.onStart.call(element);\n          }\n        },\n\n        save: {\n          animation: function(animation) {\n            if(!module.cache) {\n              module.cache = {};\n            }\n            module.cache.animation = animation;\n          },\n          displayType: function(displayType) {\n            if(displayType !== 'none') {\n              $module.data(metadata.displayType, displayType);\n            }\n          },\n          transitionExists: function(animation, exists) {\n            $.fn.transition.exists[animation] = exists;\n            module.verbose('Saving existence of transition', animation, exists);\n          }\n        },\n\n        restore: {\n          conditions: function() {\n            var\n              animation = module.get.currentAnimation()\n            ;\n            if(animation) {\n              $module\n                .removeClass(animation)\n              ;\n              module.verbose('Removing animation class', module.cache);\n            }\n            module.remove.duration();\n          }\n        },\n\n        add: {\n          failSafe: function() {\n            var\n              duration = module.get.duration()\n            ;\n            module.timer = setTimeout(function() {\n              $module.triggerHandler(animationEnd);\n            }, duration + settings.failSafeDelay);\n            module.verbose('Adding fail safe timer', module.timer);\n          }\n        },\n\n        remove: {\n          animating: function() {\n            $module.removeClass(className.animating);\n          },\n          animationCallbacks: function() {\n            module.remove.queueCallback();\n            module.remove.completeCallback();\n          },\n          queueCallback: function() {\n            $module.off('.queue' + eventNamespace);\n          },\n          completeCallback: function() {\n            $module.off('.complete' + eventNamespace);\n          },\n          display: function() {\n            $module.css('display', '');\n          },\n          direction: function() {\n            $module\n              .removeClass(className.inward)\n              .removeClass(className.outward)\n            ;\n          },\n          duration: function() {\n            $module\n              .css('animation-duration', '')\n            ;\n          },\n          failSafe: function() {\n            module.verbose('Removing fail safe timer', module.timer);\n            if(module.timer) {\n              clearTimeout(module.timer);\n            }\n          },\n          hidden: function() {\n            $module.removeClass(className.hidden);\n          },\n          visible: function() {\n            $module.removeClass(className.visible);\n          },\n          looping: function() {\n            module.debug('Transitions are no longer looping');\n            if( module.is.looping() ) {\n              module.reset();\n              $module\n                .removeClass(className.looping)\n              ;\n            }\n          },\n          transition: function() {\n            $module\n              .removeClass(className.visible)\n              .removeClass(className.hidden)\n            ;\n          }\n        },\n        get: {\n          settings: function(animation, duration, onComplete) {\n            // single settings object\n            if(typeof animation == 'object') {\n              return $.extend(true, {}, $.fn.transition.settings, animation);\n            }\n            // all arguments provided\n            else if(typeof onComplete == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : onComplete,\n                duration   : duration\n              });\n            }\n            // only duration provided\n            else if(typeof duration == 'string' || typeof duration == 'number') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation,\n                duration  : duration\n              });\n            }\n            // duration is actually settings object\n            else if(typeof duration == 'object') {\n              return $.extend({}, $.fn.transition.settings, duration, {\n                animation : animation\n              });\n            }\n            // duration is actually callback\n            else if(typeof duration == 'function') {\n              return $.extend({}, $.fn.transition.settings, {\n                animation  : animation,\n                onComplete : duration\n              });\n            }\n            // only animation provided\n            else {\n              return $.extend({}, $.fn.transition.settings, {\n                animation : animation\n              });\n            }\n          },\n          animationClass: function(animation) {\n            var\n              animationClass = animation || settings.animation,\n              directionClass = (module.can.transition() && !module.has.direction())\n                ? module.get.direction() + ' '\n                : ''\n            ;\n            return className.animating + ' '\n              + className.transition + ' '\n              + directionClass\n              + animationClass\n            ;\n          },\n          currentAnimation: function() {\n            return (module.cache && module.cache.animation !== undefined)\n              ? module.cache.animation\n              : false\n            ;\n          },\n          currentDirection: function() {\n            return module.is.inward()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          direction: function() {\n            return module.is.hidden() || !module.is.visible()\n              ? className.inward\n              : className.outward\n            ;\n          },\n          animationDirection: function(animation) {\n            var\n              direction\n            ;\n            animation = animation || settings.animation;\n            if(typeof animation === 'string') {\n              animation = animation.split(' ');\n              // search animation name for out/in class\n              $.each(animation, function(index, word){\n                if(word === className.inward) {\n                  direction = className.inward;\n                }\n                else if(word === className.outward) {\n                  direction = className.outward;\n                }\n              });\n            }\n            // return found direction\n            if(direction) {\n              return direction;\n            }\n            return false;\n          },\n          duration: function(duration) {\n            duration = duration || settings.duration;\n            if(duration === false) {\n              duration = $module.css('animation-duration') || 0;\n            }\n            return (typeof duration === 'string')\n              ? (duration.indexOf('ms') > -1)\n                ? parseFloat(duration)\n                : parseFloat(duration) * 1000\n              : duration\n            ;\n          },\n          displayType: function(shouldDetermine) {\n            shouldDetermine = (shouldDetermine !== undefined)\n              ? shouldDetermine\n              : true\n            ;\n            if(settings.displayType) {\n              return settings.displayType;\n            }\n            if(shouldDetermine && $module.data(metadata.displayType) === undefined) {\n              // create fake element to determine display state\n              module.can.transition(true);\n            }\n            return $module.data(metadata.displayType);\n          },\n          userStyle: function(style) {\n            style = style || $module.attr('style') || '';\n            return style.replace(/display.*?;/, '');\n          },\n          transitionExists: function(animation) {\n            return $.fn.transition.exists[animation];\n          },\n          animationStartEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationstart',\n                'OAnimation'      :'oAnimationStart',\n                'MozAnimation'    :'mozAnimationStart',\n                'WebkitAnimation' :'webkitAnimationStart'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          },\n          animationEndEvent: function() {\n            var\n              element     = document.createElement('div'),\n              animations  = {\n                'animation'       :'animationend',\n                'OAnimation'      :'oAnimationEnd',\n                'MozAnimation'    :'mozAnimationEnd',\n                'WebkitAnimation' :'webkitAnimationEnd'\n              },\n              animation\n            ;\n            for(animation in animations){\n              if( element.style[animation] !== undefined ){\n                return animations[animation];\n              }\n            }\n            return false;\n          }\n\n        },\n\n        can: {\n          transition: function(forced) {\n            var\n              animation         = settings.animation,\n              transitionExists  = module.get.transitionExists(animation),\n              displayType       = module.get.displayType(false),\n              elementClass,\n              tagName,\n              $clone,\n              currentAnimation,\n              inAnimation,\n              directionExists\n            ;\n            if( transitionExists === undefined || forced) {\n              module.verbose('Determining whether animation exists');\n              elementClass = $module.attr('class');\n              tagName      = $module.prop('tagName');\n\n              $clone = $('<' + tagName + ' />').addClass( elementClass ).insertAfter($module);\n              currentAnimation = $clone\n                .addClass(animation)\n                .removeClass(className.inward)\n                .removeClass(className.outward)\n                .addClass(className.animating)\n                .addClass(className.transition)\n                .css('animationName')\n              ;\n              inAnimation = $clone\n                .addClass(className.inward)\n                .css('animationName')\n              ;\n              if(!displayType) {\n                displayType = $clone\n                  .attr('class', elementClass)\n                  .removeAttr('style')\n                  .removeClass(className.hidden)\n                  .removeClass(className.visible)\n                  .show()\n                  .css('display')\n                ;\n                module.verbose('Determining final display state', displayType);\n                module.save.displayType(displayType);\n              }\n\n              $clone.remove();\n              if(currentAnimation != inAnimation) {\n                module.debug('Direction exists for animation', animation);\n                directionExists = true;\n              }\n              else if(currentAnimation == 'none' || !currentAnimation) {\n                module.debug('No animation defined in css', animation);\n                return;\n              }\n              else {\n                module.debug('Static animation found', animation, displayType);\n                directionExists = false;\n              }\n              module.save.transitionExists(animation, directionExists);\n            }\n            return (transitionExists !== undefined)\n              ? transitionExists\n              : directionExists\n            ;\n          },\n          animate: function() {\n            // can transition does not return a value if animation does not exist\n            return (module.can.transition() !== undefined);\n          }\n        },\n\n        is: {\n          animating: function() {\n            return $module.hasClass(className.animating);\n          },\n          inward: function() {\n            return $module.hasClass(className.inward);\n          },\n          outward: function() {\n            return $module.hasClass(className.outward);\n          },\n          looping: function() {\n            return $module.hasClass(className.looping);\n          },\n          occurring: function(animation) {\n            animation = animation || settings.animation;\n            animation = '.' + animation.replace(' ', '.');\n            return ( $module.filter(animation).length > 0 );\n          },\n          visible: function() {\n            return $module.is(':visible');\n          },\n          hidden: function() {\n            return $module.css('visibility') === 'hidden';\n          },\n          supported: function() {\n            return(animationEnd !== false);\n          }\n        },\n\n        hide: function() {\n          module.verbose('Hiding element');\n          if( module.is.animating() ) {\n            module.reset();\n          }\n          element.blur(); // IE will trigger focus change if element is not blurred before hiding\n          module.remove.display();\n          module.remove.visible();\n          module.set.hidden();\n          module.force.hidden();\n          settings.onHide.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        show: function(display) {\n          module.verbose('Showing element', display);\n          module.remove.hidden();\n          module.set.visible();\n          module.force.visible();\n          settings.onShow.call(element);\n          settings.onComplete.call(element);\n          // module.repaint();\n        },\n\n        toggle: function() {\n          if( module.is.visible() ) {\n            module.hide();\n          }\n          else {\n            module.show();\n          }\n        },\n\n        stop: function() {\n          module.debug('Stopping current animation');\n          $module.triggerHandler(animationEnd);\n        },\n\n        stopAll: function() {\n          module.debug('Stopping all animation');\n          module.remove.queueCallback();\n          $module.triggerHandler(animationEnd);\n        },\n\n        clear: {\n          queue: function() {\n            module.debug('Clearing animation queue');\n            module.remove.queueCallback();\n          }\n        },\n\n        enable: function() {\n          module.verbose('Starting animation');\n          $module.removeClass(className.disabled);\n        },\n\n        disable: function() {\n          module.debug('Stopping animation');\n          $module.addClass(className.disabled);\n        },\n\n        setting: function(name, value) {\n          module.debug('Changing setting', name, value);\n          if( $.isPlainObject(name) ) {\n            $.extend(true, settings, name);\n          }\n          else if(value !== undefined) {\n            if($.isPlainObject(settings[name])) {\n              $.extend(true, settings[name], value);\n            }\n            else {\n              settings[name] = value;\n            }\n          }\n          else {\n            return settings[name];\n          }\n        },\n        internal: function(name, value) {\n          if( $.isPlainObject(name) ) {\n            $.extend(true, module, name);\n          }\n          else if(value !== undefined) {\n            module[name] = value;\n          }\n          else {\n            return module[name];\n          }\n        },\n        debug: function() {\n          if(!settings.silent && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.debug = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.debug.apply(console, arguments);\n            }\n          }\n        },\n        verbose: function() {\n          if(!settings.silent && settings.verbose && settings.debug) {\n            if(settings.performance) {\n              module.performance.log(arguments);\n            }\n            else {\n              module.verbose = Function.prototype.bind.call(console.info, console, settings.name + ':');\n              module.verbose.apply(console, arguments);\n            }\n          }\n        },\n        error: function() {\n          if(!settings.silent) {\n            module.error = Function.prototype.bind.call(console.error, console, settings.name + ':');\n            module.error.apply(console, arguments);\n          }\n        },\n        performance: {\n          log: function(message) {\n            var\n              currentTime,\n              executionTime,\n              previousTime\n            ;\n            if(settings.performance) {\n              currentTime   = new Date().getTime();\n              previousTime  = time || currentTime;\n              executionTime = currentTime - previousTime;\n              time          = currentTime;\n              performance.push({\n                'Name'           : message[0],\n                'Arguments'      : [].slice.call(message, 1) || '',\n                'Element'        : element,\n                'Execution Time' : executionTime\n              });\n            }\n            clearTimeout(module.performance.timer);\n            module.performance.timer = setTimeout(module.performance.display, 500);\n          },\n          display: function() {\n            var\n              title = settings.name + ':',\n              totalTime = 0\n            ;\n            time = false;\n            clearTimeout(module.performance.timer);\n            $.each(performance, function(index, data) {\n              totalTime += data['Execution Time'];\n            });\n            title += ' ' + totalTime + 'ms';\n            if(moduleSelector) {\n              title += ' \\'' + moduleSelector + '\\'';\n            }\n            if($allModules.length > 1) {\n              title += ' ' + '(' + $allModules.length + ')';\n            }\n            if( (console.group !== undefined || console.table !== undefined) && performance.length > 0) {\n              console.groupCollapsed(title);\n              if(console.table) {\n                console.table(performance);\n              }\n              else {\n                $.each(performance, function(index, data) {\n                  console.log(data['Name'] + ': ' + data['Execution Time']+'ms');\n                });\n              }\n              console.groupEnd();\n            }\n            performance = [];\n          }\n        },\n        // modified for transition to return invoke success\n        invoke: function(query, passedArguments, context) {\n          var\n            object = instance,\n            maxDepth,\n            found,\n            response\n          ;\n          passedArguments = passedArguments || queryArguments;\n          context         = element         || context;\n          if(typeof query == 'string' && object !== undefined) {\n            query    = query.split(/[\\. ]/);\n            maxDepth = query.length - 1;\n            $.each(query, function(depth, value) {\n              var camelCaseValue = (depth != maxDepth)\n                ? value + query[depth + 1].charAt(0).toUpperCase() + query[depth + 1].slice(1)\n                : query\n              ;\n              if( $.isPlainObject( object[camelCaseValue] ) && (depth != maxDepth) ) {\n                object = object[camelCaseValue];\n              }\n              else if( object[camelCaseValue] !== undefined ) {\n                found = object[camelCaseValue];\n                return false;\n              }\n              else if( $.isPlainObject( object[value] ) && (depth != maxDepth) ) {\n                object = object[value];\n              }\n              else if( object[value] !== undefined ) {\n                found = object[value];\n                return false;\n              }\n              else {\n                return false;\n              }\n            });\n          }\n          if ( $.isFunction( found ) ) {\n            response = found.apply(context, passedArguments);\n          }\n          else if(found !== undefined) {\n            response = found;\n          }\n\n          if($.isArray(returnedValue)) {\n            returnedValue.push(response);\n          }\n          else if(returnedValue !== undefined) {\n            returnedValue = [returnedValue, response];\n          }\n          else if(response !== undefined) {\n            returnedValue = response;\n          }\n          return (found !== undefined)\n            ? found\n            : false\n          ;\n        }\n      };\n      module.initialize();\n    })\n  ;\n  return (returnedValue !== undefined)\n    ? returnedValue\n    : this\n  ;\n};\n\n// Records if CSS transition is available\n$.fn.transition.exists = {};\n\n$.fn.transition.settings = {\n\n  // module info\n  name          : 'Transition',\n\n  // hide all output from this component regardless of other settings\n  silent        : false,\n\n  // debug content outputted to console\n  debug         : false,\n\n  // verbose debug output\n  verbose       : false,\n\n  // performance data output\n  performance   : true,\n\n  // event namespace\n  namespace     : 'transition',\n\n  // delay between animations in group\n  interval      : 0,\n\n  // whether group animations should be reversed\n  reverse       : 'auto',\n\n  // animation callback event\n  onStart       : function() {},\n  onComplete    : function() {},\n  onShow        : function() {},\n  onHide        : function() {},\n\n  // whether timeout should be used to ensure callback fires in cases animationend does not\n  useFailSafe   : true,\n\n  // delay in ms for fail safe\n  failSafeDelay : 100,\n\n  // whether EXACT animation can occur twice in a row\n  allowRepeats  : false,\n\n  // Override final display type on visible\n  displayType   : false,\n\n  // animation duration\n  animation     : 'fade',\n  duration      : false,\n\n  // new animations will occur after previous ones\n  queue         : true,\n\n  metadata : {\n    displayType: 'display'\n  },\n\n  className   : {\n    animating  : 'animating',\n    disabled   : 'disabled',\n    hidden     : 'hidden',\n    inward     : 'in',\n    loading    : 'loading',\n    looping    : 'looping',\n    outward    : 'out',\n    transition : 'transition',\n    visible    : 'visible'\n  },\n\n  // possible errors\n  error: {\n    noAnimation : 'Element is no longer attached to DOM. Unable to animate.  Use silent setting to surpress this warning in production.',\n    repeated    : 'That animation is already occurring, cancelling repeated animation',\n    method      : 'The method you called is not defined',\n    support     : 'This browser does not support CSS animations'\n  }\n\n};\n\n\n})( jQuery, window, document );\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/modules/transition.less",
    "content": "/*!\n * # Semantic UI - Transition\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'module';\n@element : 'transition';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n          Transitions\n*******************************/\n\n.transition {\n  animation-iteration-count: 1;\n  animation-duration: @transitionDefaultDuration;\n  animation-timing-function: @transitionDefaultEasing;\n  animation-fill-mode: @transitionDefaultFill;\n}\n\n/*******************************\n            States\n*******************************/\n\n\n/* Animating */\n.animating.transition {\n  backface-visibility: @backfaceVisibility;\n  visibility: visible !important;\n}\n\n/* Loading */\n.loading.transition {\n  position: absolute;\n  top: -99999px;\n  left: -99999px;\n}\n\n/* Hidden */\n.hidden.transition {\n  display: none;\n  visibility: hidden;\n}\n\n/* Visible */\n.visible.transition {\n  display: block !important;\n  visibility: visible !important;\n/*  backface-visibility: @backfaceVisibility;\n  transform: @use3DAcceleration;*/\n}\n\n/* Disabled */\n.disabled.transition {\n  animation-play-state: paused;\n}\n\n/*******************************\n          Variations\n*******************************/\n\n.looping.transition {\n  animation-iteration-count: infinite;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/ad.less",
    "content": "/*!\n * # Semantic UI - Ad\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Copyright 2013 Contributors\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'ad';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n         Advertisement\n*******************************/\n\n.ui.ad {\n  display: block;\n  overflow: @overflow;\n  margin: @margin;\n}\n\n.ui.ad:first-child {\n  margin: 0em;\n}\n\n.ui.ad:last-child {\n  margin: 0em;\n}\n\n.ui.ad iframe {\n  margin: 0em;\n  padding: 0em;\n  border: none;\n  overflow: hidden;\n}\n\n/*--------------\n     Common\n---------------*/\n\n/* Leaderboard */\n.ui.leaderboard.ad {\n  width: 728px;\n  height: 90px;\n}\n\n/* Medium Rectangle */\n.ui[class*=\"medium rectangle\"].ad {\n  width: 300px;\n  height: 250px;\n}\n\n/* Large Rectangle */\n.ui[class*=\"large rectangle\"].ad {\n  width: 336px;\n  height: 280px;\n}\n/* Half Page */\n.ui[class*=\"half page\"].ad {\n  width: 300px;\n  height: 600px;\n}\n\n/*--------------\n     Square\n---------------*/\n\n/* Square */\n.ui.square.ad {\n  width: 250px;\n  height: 250px;\n}\n\n/* Small Square */\n.ui[class*=\"small square\"].ad {\n  width: 200px;\n  height: 200px;\n}\n\n/*--------------\n    Rectangle\n---------------*/\n\n/* Small Rectangle */\n.ui[class*=\"small rectangle\"].ad {\n  width: 180px;\n  height: 150px;\n}\n\n/* Vertical Rectangle */\n.ui[class*=\"vertical rectangle\"].ad {\n  width: 240px;\n  height: 400px;\n}\n\n/*--------------\n     Button\n---------------*/\n\n.ui.button.ad {\n  width: 120px;\n  height: 90px;\n}\n.ui[class*=\"square button\"].ad {\n  width: 125px;\n  height: 125px;\n}\n.ui[class*=\"small button\"].ad {\n  width: 120px;\n  height: 60px;\n}\n\n/*--------------\n   Skyscrapers\n---------------*/\n\n/* Skyscraper */\n.ui.skyscraper.ad {\n  width: 120px;\n  height: 600px;\n}\n\n/* Wide Skyscraper */\n.ui[class*=\"wide skyscraper\"].ad {\n  width: 160px;\n}\n\n/*--------------\n     Banners\n---------------*/\n\n/* Banner */\n.ui.banner.ad {\n  width: 468px;\n  height: 60px;\n}\n\n/* Vertical Banner */\n.ui[class*=\"vertical banner\"].ad {\n  width: 120px;\n  height: 240px;\n}\n\n/* Top Banner */\n.ui[class*=\"top banner\"].ad {\n  width: 930px;\n  height: 180px;\n}\n\n/* Half Banner */\n.ui[class*=\"half banner\"].ad {\n  width: 234px;\n  height: 60px;\n}\n\n/*--------------\n    Boards\n---------------*/\n\n/* Leaderboard */\n.ui[class*=\"large leaderboard\"].ad {\n  width: 970px;\n  height: 90px;\n}\n\n/* Billboard */\n.ui.billboard.ad {\n  width: 970px;\n  height: 250px;\n}\n\n/*--------------\n    Panorama\n---------------*/\n\n/* Panorama */\n.ui.panorama.ad {\n  width: 980px;\n  height: 120px;\n}\n\n/*--------------\n     Netboard\n---------------*/\n\n/* Netboard */\n.ui.netboard.ad {\n  width: 580px;\n  height: 400px;\n}\n\n\n\n/*--------------\n     Mobile\n---------------*/\n\n/* Large Mobile Banner */\n.ui[class*=\"large mobile banner\"].ad {\n  width: 320px;\n  height: 100px;\n}\n\n/* Mobile Leaderboard */\n.ui[class*=\"mobile leaderboard\"].ad {\n  width: 320px;\n  height: 50px;\n}\n\n/*******************************\n             Types\n*******************************/\n\n/* Mobile Sizes */\n.ui.mobile.ad {\n  display: none;\n}\n\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.mobile.ad {\n    display: block;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n.ui.centered.ad {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n.ui.test.ad {\n  position: relative;\n  background: @testBackground;\n}\n.ui.test.ad:after {\n  position: absolute;\n  top: 50%;\n  left: 50%;\n  width: 100%;\n  text-align: center;\n  transform: translateX(-50%) translateY(-50%);\n\n  content: @testText;\n  color: @testColor;\n  font-size: @testFontSize;\n  font-weight: @testFontWeight;\n}\n.ui.mobile.test.ad:after {\n  font-size: @testMobileFontSize;\n}\n.ui.test.ad[data-text]:after {\n  content: attr(data-text);\n}\n\n.loadUIOverrides();"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/card.less",
    "content": "/*!\n * # Semantic UI - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'card';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Card\n---------------*/\n\n.ui.cards > .card,\n.ui.card {\n  max-width: 100%;\n  position: relative;\n  display: @display;\n  flex-direction: column;\n\n  width: @width;\n  min-height: @minHeight;\n  background: @background;\n  padding: @padding;\n\n  border: @border;\n  border-radius: @borderRadius;\n  box-shadow: @boxShadow;\n  transition: @transition;\n  z-index: @zIndex;\n}\n.ui.card {\n  margin: @margin;\n}\n\n.ui.cards > .card a,\n.ui.card a {\n  cursor: pointer;\n}\n\n.ui.card:first-child {\n  margin-top: 0em;\n}\n.ui.card:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Cards\n---------------*/\n\n.ui.cards {\n  display: @groupDisplay;\n  margin: @groupMargin;\n  flex-wrap: wrap;\n}\n\n.ui.cards > .card {\n  display: @groupCardDisplay;\n  margin: @groupCardMargin;\n  float: @groupCardFloat;\n}\n\n/* Clearing */\n.ui.cards:after,\n.ui.card:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n\n/* Consecutive Card Groups Preserve Row Spacing */\n.ui.cards ~ .ui.cards {\n  margin-top: @consecutiveGroupDistance;\n}\n\n\n/*--------------\n  Rounded Edges\n---------------*/\n\n.ui.cards > .card > :first-child,\n.ui.card > :first-child {\n  border-radius: @borderRadius @borderRadius 0em 0em !important;\n  border-top: none !important;\n}\n\n.ui.cards > .card > :last-child,\n.ui.card > :last-child {\n  border-radius: 0em 0em @borderRadius @borderRadius !important;\n}\n\n.ui.cards > .card > :only-child,\n.ui.card > :only-child {\n  border-radius: @borderRadius !important;\n}\n\n/*--------------\n     Images\n---------------*/\n\n.ui.cards > .card > .image,\n.ui.card > .image {\n  position: relative;\n  display: block;\n  flex: 0 0 auto;\n  padding: @imagePadding;\n  background: @imageBackground;\n}\n.ui.cards > .card > .image > img,\n.ui.card > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: inherit;\n}\n.ui.cards > .card > .image:not(.ui) > img,\n.ui.card > .image:not(.ui) > img {\n  border: @imageBorder;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.cards > .card > .content,\n.ui.card > .content {\n  flex-grow: 1;\n  border: @contentBorder;\n  border-top: @contentDivider;\n  background: @contentBackground;\n  margin: @contentMargin;\n  padding: @contentPadding;\n  box-shadow: @contentBoxShadow;\n  font-size: @contentFontSize;\n  border-radius: @contentBorderRadius;\n}\n\n.ui.cards > .card > .content:after,\n.ui.card > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.cards > .card > .content > .header,\n.ui.card > .content > .header {\n  display: block;\n  margin: @headerMargin;\n  font-family: @headerFont;\n  color: @headerColor;\n}\n\n/* Default Header Size */\n.ui.cards > .card > .content > .header:not(.ui),\n.ui.card > .content > .header:not(.ui) {\n  font-weight: @headerFontWeight;\n  font-size: @headerFontSize;\n  margin-top: @headerLineHeightOffset;\n  line-height: @headerLineHeight;\n}\n\n.ui.cards > .card > .content > .meta + .description,\n.ui.cards > .card > .content > .header + .description,\n.ui.card > .content > .meta + .description,\n.ui.card > .content > .header + .description  {\n  margin-top: @descriptionDistance;\n}\n\n/*----------------\n Floated Content\n-----------------*/\n\n.ui.cards > .card  [class*=\"left floated\"],\n.ui.card [class*=\"left floated\"] {\n  float: left;\n}\n.ui.cards > .card [class*=\"right floated\"],\n.ui.card [class*=\"right floated\"] {\n  float: right;\n}\n\n/*--------------\n     Aligned\n---------------*/\n\n.ui.cards > .card  [class*=\"left aligned\"],\n.ui.card [class*=\"left aligned\"] {\n  text-align: left;\n}\n.ui.cards > .card [class*=\"center aligned\"],\n.ui.card [class*=\"center aligned\"] {\n  text-align: center;\n}\n.ui.cards > .card [class*=\"right aligned\"],\n.ui.card [class*=\"right aligned\"] {\n  text-align: right;\n}\n\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.cards > .card .content img,\n.ui.card .content img {\n  display: inline-block;\n  vertical-align: @contentImageVerticalAlign;\n  width: @contentImageWidth;\n}\n.ui.cards > .card img.avatar,\n.ui.cards > .card .avatar img,\n.ui.card img.avatar,\n.ui.card .avatar img {\n  width: @avatarSize;\n  height: @avatarSize;\n  border-radius: @avatarBorderRadius;\n}\n\n\n/*--------------\n   Description\n---------------*/\n\n.ui.cards > .card > .content > .description,\n.ui.card > .content > .description {\n  clear: both;\n  color: @descriptionColor;\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.cards > .card > .content p,\n.ui.card > .content p {\n  margin: 0em 0em @paragraphDistance;\n}\n.ui.cards > .card > .content p:last-child,\n.ui.card > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.cards > .card .meta,\n.ui.card .meta {\n  font-size: @metaFontSize;\n  color: @metaColor;\n}\n.ui.cards > .card .meta *,\n.ui.card .meta * {\n  margin-right: @metaSpacing;\n}\n.ui.cards > .card .meta :last-child,\n.ui.card .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.cards > .card .meta [class*=\"right floated\"],\n.ui.card .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: @metaSpacing;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n.ui.cards > .card > .content a:not(.ui),\n.ui.card > .content a:not(.ui) {\n  color: @contentLinkColor;\n  transition: @contentLinkTransition;\n}\n.ui.cards > .card > .content a:not(.ui):hover,\n.ui.card > .content a:not(.ui):hover {\n  color: @contentLinkHoverColor;\n}\n\n/* Header */\n.ui.cards > .card > .content > a.header,\n.ui.card > .content > a.header {\n  color: @headerLinkColor;\n}\n.ui.cards > .card > .content > a.header:hover,\n.ui.card > .content > a.header:hover {\n  color: @headerLinkHoverColor;\n}\n\n/* Meta */\n.ui.cards > .card .meta > a:not(.ui),\n.ui.card .meta > a:not(.ui) {\n  color: @metaLinkColor;\n}\n.ui.cards > .card .meta > a:not(.ui):hover,\n.ui.card .meta > a:not(.ui):hover {\n  color: @metaLinkHoverColor;\n}\n\n/*--------------\n     Buttons\n---------------*/\n\n.ui.cards > .card > .buttons,\n.ui.card > .buttons,\n.ui.cards > .card > .button,\n.ui.card > .button {\n  margin: @buttonMargin;\n  width: @buttonWidth;\n}\n\n/*--------------\n      Dimmer\n---------------*/\n\n.ui.cards > .card .dimmer,\n.ui.card .dimmer {\n  background-color: @dimmerColor;\n  z-index: @dimmerZIndex;\n}\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n.ui.cards > .card > .content .star.icon,\n.ui.card > .content .star.icon {\n  cursor: pointer;\n  opacity: @actionOpacity;\n  transition: @actionTransition;\n}\n.ui.cards > .card > .content .star.icon:hover,\n.ui.card > .content .star.icon:hover {\n  opacity: @actionHoverOpacity;\n  color: @starColor;\n}\n.ui.cards > .card > .content .active.star.icon,\n.ui.card > .content .active.star.icon {\n  color: @starActiveColor;\n}\n\n/*-----Like----- */\n\n/* Icon */\n.ui.cards > .card > .content .like.icon,\n.ui.card > .content .like.icon {\n  cursor: pointer;\n  opacity: @actionOpacity;\n  transition: @actionTransition;\n}\n.ui.cards > .card > .content .like.icon:hover,\n.ui.card > .content .like.icon:hover {\n  opacity: @actionHoverOpacity;\n  color: @likeColor;\n}\n.ui.cards > .card > .content .active.like.icon,\n.ui.card > .content .active.like.icon {\n  color: @likeActiveColor;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.cards > .card > .extra,\n.ui.card > .extra {\n  max-width: 100%;\n  min-height: 0em !important;\n  flex-grow: 0;\n  border-top: @extraDivider !important;\n  position: @extraPosition;\n  background: @extraBackground;\n  width: @extraWidth;\n  margin: @extraMargin;\n  padding: @extraPadding;\n  top: @extraTop;\n  left: @extraLeft;\n  color: @extraColor;\n  box-shadow: @extraBoxShadow;\n  transition: @extraTransition;\n}\n.ui.cards > .card > .extra a:not(.ui),\n.ui.card > .extra a:not(.ui) {\n  color: @extraLinkColor;\n}\n.ui.cards > .card > .extra a:not(.ui):hover,\n.ui.card > .extra a:not(.ui):hover {\n  color: @extraLinkHoverColor;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*-------------------\n       Raised\n--------------------*/\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: @raisedShadow;\n}\n.ui.raised.cards a.card:hover,\n.ui.link.cards .raised.card:hover,\na.ui.raised.card:hover,\n.ui.link.raised.card:hover {\n  box-shadow: @raisedShadowHover;\n}\n\n.ui.raised.cards > .card,\n.ui.raised.card {\n  box-shadow: @raisedShadow;\n}\n/*-------------------\n       Centered\n--------------------*/\n\n.ui.centered.cards {\n  justify-content: center;\n}\n.ui.centered.card {\n  margin-left: auto;\n  margin-right: auto;\n}\n\n/*-------------------\n        Fluid\n--------------------*/\n\n.ui.fluid.card {\n  width: 100%;\n  max-width: 9999px;\n}\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.cards a.card,\n.ui.link.cards .card,\na.ui.card,\n.ui.link.card {\n  transform: none;\n}\n\n\n.ui.cards a.card:hover,\n.ui.link.cards .card:hover,\na.ui.card:hover,\n.ui.link.card:hover {\n  cursor: pointer;\n  z-index: @linkHoverZIndex;\n  background: @linkHoverBackground;\n  border: @linkHoverBorder;\n  box-shadow: @linkHoverBoxShadow;\n  transform: @linkHoverTransform;\n}\n\n/*-------------------\n       Colors\n--------------------*/\n\n/* Red */\n.ui.red.cards > .card,\n.ui.cards > .red.card,\n.ui.red.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @red,\n    @shadowBoxShadow\n  ;\n}\n.ui.red.cards > .card:hover,\n.ui.cards > .red.card:hover,\n.ui.red.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @redHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Orange */\n.ui.orange.cards > .card,\n.ui.cards > .orange.card,\n.ui.orange.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @orange,\n    @shadowBoxShadow\n  ;\n}\n.ui.orange.cards > .card:hover,\n.ui.cards > .orange.card:hover,\n.ui.orange.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @orangeHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Yellow */\n.ui.yellow.cards > .card,\n.ui.cards > .yellow.card,\n.ui.yellow.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @yellow,\n    @shadowBoxShadow\n  ;\n}\n.ui.yellow.cards > .card:hover,\n.ui.cards > .yellow.card:hover,\n.ui.yellow.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @yellowHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Olive */\n.ui.olive.cards > .card,\n.ui.cards > .olive.card,\n.ui.olive.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @olive,\n    @shadowBoxShadow\n  ;\n}\n.ui.olive.cards > .card:hover,\n.ui.cards > .olive.card:hover,\n.ui.olive.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @oliveHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Green */\n.ui.green.cards > .card,\n.ui.cards > .green.card,\n.ui.green.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @green,\n    @shadowBoxShadow\n  ;\n}\n.ui.green.cards > .card:hover,\n.ui.cards > .green.card:hover,\n.ui.green.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @greenHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Teal */\n.ui.teal.cards > .card,\n.ui.cards > .teal.card,\n.ui.teal.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @teal,\n    @shadowBoxShadow\n  ;\n}\n.ui.teal.cards > .card:hover,\n.ui.cards > .teal.card:hover,\n.ui.teal.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @tealHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Blue */\n.ui.blue.cards > .card,\n.ui.cards > .blue.card,\n.ui.blue.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @blue,\n    @shadowBoxShadow\n  ;\n}\n.ui.blue.cards > .card:hover,\n.ui.cards > .blue.card:hover,\n.ui.blue.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @blueHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Violet */\n.ui.violet.cards > .card,\n.ui.cards > .violet.card,\n.ui.violet.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @violet,\n    @shadowBoxShadow\n  ;\n}\n.ui.violet.cards > .card:hover,\n.ui.cards > .violet.card:hover,\n.ui.violet.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @violetHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Purple */\n.ui.purple.cards > .card,\n.ui.cards > .purple.card,\n.ui.purple.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @purple,\n    @shadowBoxShadow\n  ;\n}\n.ui.purple.cards > .card:hover,\n.ui.cards > .purple.card:hover,\n.ui.purple.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @purpleHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Pink */\n.ui.pink.cards > .card,\n.ui.cards > .pink.card,\n.ui.pink.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @pink,\n    @shadowBoxShadow\n  ;\n}\n.ui.pink.cards > .card:hover,\n.ui.cards > .pink.card:hover,\n.ui.pink.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @pinkHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Brown */\n.ui.brown.cards > .card,\n.ui.cards > .brown.card,\n.ui.brown.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @brown,\n    @shadowBoxShadow\n  ;\n}\n.ui.brown.cards > .card:hover,\n.ui.cards > .brown.card:hover,\n.ui.brown.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @brownHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Grey */\n.ui.grey.cards > .card,\n.ui.cards > .grey.card,\n.ui.grey.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @grey,\n    @shadowBoxShadow\n  ;\n}\n.ui.grey.cards > .card:hover,\n.ui.cards > .grey.card:hover,\n.ui.grey.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @greyHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/* Black */\n.ui.black.cards > .card,\n.ui.cards > .black.card,\n.ui.black.card {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @black,\n    @shadowBoxShadow\n  ;\n}\n.ui.black.cards > .card:hover,\n.ui.cards > .black.card:hover,\n.ui.black.card:hover {\n  box-shadow:\n    @borderShadow,\n    0px @coloredShadowDistance 0px 0px @blackHover,\n    @shadowHoverBoxShadow\n  ;\n}\n\n/*--------------\n   Card Count\n---------------*/\n\n.ui.one.cards {\n  margin-left: @oneCardOffset;\n  margin-right: @oneCardOffset;\n}\n.ui.one.cards > .card {\n  width: @oneCard;\n}\n\n.ui.two.cards {\n  margin-left: @twoCardOffset;\n  margin-right: @twoCardOffset;\n}\n.ui.two.cards > .card {\n  width: @twoCard;\n  margin-left: @twoCardSpacing;\n  margin-right: @twoCardSpacing;\n}\n\n.ui.three.cards {\n  margin-left: @threeCardOffset;\n  margin-right: @threeCardOffset;\n}\n.ui.three.cards > .card {\n  width: @threeCard;\n  margin-left: @threeCardSpacing;\n  margin-right: @threeCardSpacing;\n}\n\n.ui.four.cards {\n  margin-left: @fourCardOffset;\n  margin-right: @fourCardOffset;\n}\n.ui.four.cards > .card {\n  width: @fourCard;\n  margin-left: @fourCardSpacing;\n  margin-right: @fourCardSpacing;\n}\n\n.ui.five.cards {\n  margin-left: @fiveCardOffset;\n  margin-right: @fiveCardOffset;\n}\n.ui.five.cards > .card {\n  width: @fiveCard;\n  margin-left: @fiveCardSpacing;\n  margin-right: @fiveCardSpacing;\n}\n\n.ui.six.cards {\n  margin-left: @sixCardOffset;\n  margin-right: @sixCardOffset;\n}\n.ui.six.cards > .card {\n  width: @sixCard;\n  margin-left: @sixCardSpacing;\n  margin-right: @sixCardSpacing;\n}\n\n.ui.seven.cards {\n  margin-left: @sevenCardOffset;\n  margin-right: @sevenCardOffset;\n}\n.ui.seven.cards > .card {\n  width: @sevenCard;\n  margin-left: @sevenCardSpacing;\n  margin-right: @sevenCardSpacing;\n}\n\n.ui.eight.cards {\n  margin-left: @eightCardOffset;\n  margin-right: @eightCardOffset;\n}\n.ui.eight.cards > .card {\n  width: @eightCard;\n  margin-left: @eightCardSpacing;\n  margin-right: @eightCardSpacing;\n  font-size: 11px;\n}\n\n.ui.nine.cards {\n  margin-left: @nineCardOffset;\n  margin-right: @nineCardOffset;\n}\n.ui.nine.cards > .card {\n  width: @nineCard;\n  margin-left: @nineCardSpacing;\n  margin-right: @nineCardSpacing;\n  font-size: 10px;\n}\n\n.ui.ten.cards {\n  margin-left: @tenCardOffset;\n  margin-right: @tenCardOffset;\n}\n.ui.ten.cards > .card {\n  width: @tenCard;\n  margin-left: @tenCardSpacing;\n  margin-right: @tenCardSpacing;\n}\n\n\n/*-------------------\n      Doubling\n--------------------*/\n\n/* Mobile Only */\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.two.doubling.cards {\n    margin-left: @oneCardOffset;\n    margin-right: @oneCardOffset;\n  }\n  .ui.two.doubling.cards > .card {\n    width: @oneCard;\n    margin-left: @oneCardSpacing;\n    margin-right: @oneCardSpacing;\n  }\n  .ui.three.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.three.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.four.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.four.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.five.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.five.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.six.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.six.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.seven.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.seven.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n}\n\n/* Tablet Only */\n@media only screen and (min-width : @tabletBreakpoint) and (max-width : @largestTabletScreen) {\n  .ui.two.doubling.cards {\n    margin-left: @oneCardOffset;\n    margin-right: @oneCardOffset;\n  }\n  .ui.two.doubling.cards > .card {\n    width: @oneCard;\n    margin-left: @oneCardSpacing;\n    margin-right: @oneCardSpacing;\n  }\n  .ui.three.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.three.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.four.doubling.cards {\n    margin-left: @twoCardOffset;\n    margin-right: @twoCardOffset;\n  }\n  .ui.four.doubling.cards > .card {\n    width: @twoCard;\n    margin-left: @twoCardSpacing;\n    margin-right: @twoCardSpacing;\n  }\n  .ui.five.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.five.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.six.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.six.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: @threeCardOffset;\n    margin-right: @threeCardOffset;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: @threeCard;\n    margin-left: @threeCardSpacing;\n    margin-right: @threeCardSpacing;\n  }\n  .ui.eight.doubling.cards {\n    margin-left: @fourCardOffset;\n    margin-right: @fourCardOffset;\n  }\n  .ui.eight.doubling.cards > .card {\n    width: @fourCard;\n    margin-left: @fourCardSpacing;\n    margin-right: @fourCardSpacing;\n  }\n  .ui.nine.doubling.cards {\n    margin-left: @fourCardOffset;\n    margin-right: @fourCardOffset;\n  }\n  .ui.nine.doubling.cards > .card {\n    width: @fourCard;\n    margin-left: @fourCardSpacing;\n    margin-right: @fourCardSpacing;\n  }\n  .ui.ten.doubling.cards {\n    margin-left: @fiveCardOffset;\n    margin-right: @fiveCardOffset;\n  }\n  .ui.ten.doubling.cards > .card {\n    width: @fiveCard;\n    margin-left: @fiveCardSpacing;\n    margin-right: @fiveCardSpacing;\n  }\n}\n\n/*-------------------\n      Stackable\n--------------------*/\n\n@media only screen and (max-width : @largestMobileScreen) {\n  .ui.stackable.cards {\n    display: block !important;\n  }\n  .ui.stackable.cards .card:first-child {\n    margin-top: 0em !important;\n  }\n  .ui.stackable.cards > .card {\n    display: block !important;\n    height: auto !important;\n    margin: @stackableRowSpacing @stackableCardSpacing;\n    padding: 0 !important;\n    width: @stackableMargin !important;\n  }\n}\n\n\n/*--------------\n      Size\n---------------*/\n\n.ui.cards > .card {\n  font-size: @medium;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/comment.less",
    "content": "/*!\n * # Semantic UI - Comment\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'comment';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Standard\n*******************************/\n\n\n/*--------------\n    Comments\n---------------*/\n\n.ui.comments {\n  margin: @margin;\n  max-width: @maxWidth;\n}\n\n.ui.comments:first-child {\n  margin-top: 0em;\n}\n.ui.comments:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n     Comment\n---------------*/\n\n.ui.comments .comment {\n  position: relative;\n  background: @commentBackground;\n  margin: @commentMargin;\n  padding: @commentPadding;\n  border: @commentBorder;\n  border-top: @commentDivider;\n  line-height: @commentLineHeight;\n}\n.ui.comments .comment:first-child {\n  margin-top: @firstCommentMargin;\n  padding-top: @firstCommentPadding;\n}\n\n\n/*--------------------\n    Nested Comments\n---------------------*/\n\n.ui.comments .comment .comments {\n  margin: @nestedCommentsMargin;\n  padding: @nestedCommentsPadding;\n}\n.ui.comments .comment .comments:before{\n  position: absolute;\n  top: 0px;\n  left: 0px;\n}\n.ui.comments .comment .comments .comment {\n  border: @nestedCommentBorder;\n  border-top: @nestedCommentDivider;\n  background: @nestedCommentBackground;\n}\n\n/*--------------\n     Avatar\n---------------*/\n\n.ui.comments .comment .avatar {\n  display: @avatarDisplay;\n  width: @avatarWidth;\n  height: @avatarHeight;\n  float: @avatarFloat;\n  margin: @avatarMargin;\n}\n.ui.comments .comment img.avatar,\n.ui.comments .comment .avatar img {\n  display: block;\n  margin: 0em auto;\n  width: 100%;\n  height: 100%;\n  border-radius: @avatarBorderRadius;\n}\n\n/*--------------\n     Content\n---------------*/\n\n.ui.comments .comment > .content {\n  display: block;\n}\n/* If there is an avatar move content over */\n.ui.comments .comment > .avatar ~ .content {\n  margin-left: @contentMargin;\n}\n\n/*--------------\n     Author\n---------------*/\n\n.ui.comments .comment .author {\n  font-size: @authorFontSize;\n  color: @authorColor;\n  font-weight: @authorFontWeight;\n}\n.ui.comments .comment a.author {\n  cursor: pointer;\n}\n.ui.comments .comment a.author:hover {\n  color: @authorHoverColor;\n}\n\n/*--------------\n     Metadata\n---------------*/\n\n.ui.comments .comment .metadata {\n  display: @metadataDisplay;\n  margin-left: @metadataSpacing;\n  color: @metadataColor;\n  font-size: @metadataFontSize;\n}\n.ui.comments .comment .metadata > * {\n  display: inline-block;\n  margin: 0em @metadataContentSpacing 0em 0em;\n}\n.ui.comments .comment .metadata > :last-child {\n  margin-right: 0em;\n}\n\n/*--------------------\n     Comment Text\n---------------------*/\n\n.ui.comments .comment .text {\n  margin: @textMargin;\n  font-size: @textFontSize;\n  word-wrap: @textWordWrap;\n  color: @textColor;\n  line-height: @textLineHeight;\n}\n\n\n/*--------------------\n     User Actions\n---------------------*/\n\n.ui.comments .comment .actions {\n  font-size: @actionFontSize;\n}\n.ui.comments .comment .actions a {\n  cursor: pointer;\n  display: inline-block;\n  margin: 0em @actionContentDistance 0em 0em;\n  color: @actionLinkColor;\n}\n.ui.comments .comment .actions a:last-child {\n  margin-right: 0em;\n}\n.ui.comments .comment .actions a.active,\n.ui.comments .comment .actions a:hover {\n  color: @actionLinkHoverColor;\n}\n\n/*--------------------\n      Reply Form\n---------------------*/\n\n.ui.comments > .reply.form {\n  margin-top: @replyDistance;\n}\n.ui.comments .comment .reply.form {\n  width: 100%;\n  margin-top: @commentReplyDistance;\n}\n.ui.comments .reply.form textarea {\n  font-size: @replyFontSize;\n  height: @replyHeight;\n}\n\n/*******************************\n            State\n*******************************/\n\n.ui.collapsed.comments,\n.ui.comments .collapsed.comments,\n.ui.comments .collapsed.comment {\n  display: none;\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------------\n        Threaded\n---------------------*/\n\n.ui.threaded.comments .comment .comments {\n  margin: @threadedCommentMargin;\n  padding: @threadedCommentPadding;\n  box-shadow: @threadedCommentBoxShadow;\n}\n\n/*--------------------\n        Minimal\n---------------------*/\n\n.ui.minimal.comments .comment .actions {\n  opacity: 0;\n  position: @minimalActionPosition;\n  top: @minimalActionTop;\n  right: @minimalActionRight;\n  left: @minimalActionLeft;\n  transition: @minimalTransition;\n  transition-delay: @minimalTransitionDelay;\n}\n.ui.minimal.comments .comment > .content:hover > .actions {\n  opacity: 1;\n}\n\n\n/*-------------------\n        Sizes\n--------------------*/\n\n.ui.mini.comments {\n  font-size: @mini;\n}\n.ui.tiny.comments {\n  font-size: @tiny;\n}\n.ui.small.comments {\n  font-size: @small;\n}\n.ui.comments {\n  font-size: @medium;\n}\n.ui.large.comments {\n  font-size: @large;\n}\n.ui.big.comments {\n  font-size: @big;\n}\n.ui.huge.comments {\n  font-size: @huge;\n}\n.ui.massive.comments {\n  font-size: @massive;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/feed.less",
    "content": "/*!\n * # Semantic UI - Feed\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'feed';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n         Activity Feed\n*******************************/\n\n.ui.feed {\n  margin: @margin;\n}\n.ui.feed:first-child {\n  margin-top: 0em;\n}\n.ui.feed:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n/* Event */\n.ui.feed > .event {\n  display: flex;\n  flex-direction: row;\n  width: @eventWidth;\n  padding: @eventPadding;\n  margin: @eventMargin;\n  background: @eventBackground;\n  border-top: @eventDivider;\n}\n.ui.feed > .event:first-child {\n  border-top: 0px;\n  padding-top: 0em;\n}\n.ui.feed > .event:last-child {\n  padding-bottom: 0em;\n}\n\n/* Event Label */\n.ui.feed > .event > .label {\n  display: block;\n  flex: 0 0 auto;\n  width: @labelWidth;\n  height: @labelHeight;\n  align-self: @labelAlignSelf;\n  text-align: @labelTextAlign;\n}\n.ui.feed > .event > .label .icon {\n  opacity: @iconLabelOpacity;\n  font-size: @iconLabelSize;\n  width: @iconLabelWidth;\n  padding: @iconLabelPadding;\n  background: @iconLabelBackground;\n  border: @iconLabelBorder;\n  border-radius: @iconLabelBorderRadius;\n  color: @iconLabelColor;\n}\n.ui.feed > .event > .label img {\n  width: @imageLabelWidth;\n  height: @imageLabelHeight;\n  border-radius: @imageLabelBorderRadius;\n}\n.ui.feed > .event > .label + .content {\n  margin: @labeledContentMargin;\n}\n\n/*--------------\n     Content\n---------------*/\n\n/* Content */\n.ui.feed > .event > .content {\n  display: block;\n  flex: 1 1 auto;\n  align-self: @contentAlignSelf;\n  text-align: @contentTextAlign;\n  word-wrap: @contentWordWrap;\n}\n.ui.feed > .event:last-child > .content {\n  padding-bottom: @lastLabeledContentPadding;\n}\n\n/* Link */\n.ui.feed > .event > .content a {\n  cursor: pointer;\n}\n\n/*--------------\n      Date\n---------------*/\n\n.ui.feed > .event > .content .date {\n  margin: @dateMargin;\n  padding: @datePadding;\n  color: @dateColor;\n  font-weight: @dateFontWeight;\n  font-size: @dateFontSize;\n  font-style: @dateFontStyle;\n  color: @dateColor;\n}\n\n/*--------------\n     Summary\n---------------*/\n\n.ui.feed > .event > .content .summary {\n  margin: @summaryMargin;\n  font-size: @summaryFontSize;\n  font-weight: @summaryFontWeight;\n  color: @summaryColor;\n}\n\n/* Summary Image */\n.ui.feed > .event > .content .summary img {\n  display: inline-block;\n  width: @summaryImageWidth;\n  height: @summaryImageHeight;\n  margin: @summaryImageMargin;\n  border-radius: @summaryImageBorderRadius;\n  vertical-align: @summaryImageVerticalAlign;\n}\n/*--------------\n      User\n---------------*/\n\n.ui.feed > .event > .content .user {\n  display: inline-block;\n  font-weight: @userFontWeight;\n  margin-right: @userDistance;\n  vertical-align: baseline;\n}\n.ui.feed > .event > .content .user img {\n  margin: @userImageMargin;\n  width: @userImageWidth;\n  height: @userImageHeight;\n  vertical-align: @userImageVerticalAlign;\n}\n/*--------------\n   Inline Date\n---------------*/\n\n/* Date inside Summary */\n.ui.feed > .event > .content .summary > .date {\n  display: @summaryDateDisplay;\n  float: @summaryDateFloat;\n  font-weight: @summaryDateFontWeight;\n  font-size: @summaryDateFontSize;\n  font-style: @summaryDateFontStyle;\n  margin: @summaryDateMargin;\n  padding: @summaryDatePadding;\n  color: @summaryDateColor;\n}\n\n/*--------------\n  Extra Summary\n---------------*/\n\n.ui.feed > .event > .content .extra {\n  margin: @extraMargin;\n  background: @extraBackground;\n  padding: @extraPadding;\n  color: @extraColor;\n}\n\n/* Images */\n.ui.feed > .event > .content .extra.images img {\n  display: inline-block;\n  margin: @extraImageMargin;\n  width: @extraImageWidth;\n}\n\n/* Text */\n.ui.feed > .event > .content .extra.text {\n  padding: @extraTextPadding;\n  border-left: @extraTextPointer;\n  font-size: @extraTextFontSize;\n  max-width: @extraTextMaxWidth;\n  line-height: @extraTextLineHeight;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.feed > .event > .content .meta {\n  display: @metadataDisplay;\n  font-size: @metadataFontSize;\n  margin: @metadataMargin;\n  background: @metadataBackground;\n  border: @metadataBorder;\n  border-radius: @metadataBorderRadius;\n  box-shadow: @metadataBoxShadow;\n  padding: @metadataPadding;\n  color: @metadataColor;\n}\n\n.ui.feed > .event > .content .meta > * {\n  position: relative;\n  margin-left: @metadataElementSpacing;\n}\n.ui.feed > .event > .content .meta > *:after {\n  content: @metadataDivider;\n  color: @metadataDividerColor;\n  top: 0em;\n  left: @metadataDividerOffset;\n  opacity: 1;\n  position: absolute;\n  vertical-align: top;\n}\n\n.ui.feed > .event > .content .meta .like {\n  color: @likeColor;\n  transition: @likeTransition;\n}\n.ui.feed > .event > .content .meta .like:hover .icon {\n  color: @likeHoverColor;\n}\n.ui.feed > .event > .content .meta .active.like .icon {\n  color: @likeActiveColor;\n}\n\n/* First element */\n.ui.feed > .event > .content .meta > :first-child {\n  margin-left: 0em;\n}\n.ui.feed > .event > .content .meta > :first-child::after {\n  display: none;\n}\n\n/* Action */\n.ui.feed > .event > .content .meta a,\n.ui.feed > .event > .content .meta > .icon {\n  cursor: @metadataActionCursor;\n  opacity: @metadataActionOpacity;\n  color: @metadataActionColor;\n  transition: @metadataActionTransition;\n}\n.ui.feed > .event > .content .meta a:hover,\n.ui.feed > .event > .content .meta a:hover .icon,\n.ui.feed > .event > .content .meta > .icon:hover {\n  color: @metadataActionHoverColor;\n}\n\n\n\n/*******************************\n            Variations\n*******************************/\n\n.ui.small.feed {\n  font-size: @small;\n}\n.ui.feed {\n  font-size: @medium;\n}\n.ui.large.feed {\n  font-size: @large;\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/item.less",
    "content": "/*!\n * # Semantic UI - Item\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'item';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n            Standard\n*******************************/\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item {\n  display: @display;\n  margin: @itemSpacing 0em;\n  width: @width;\n  min-height: @minHeight;\n  background: @background;\n  padding: @padding;\n\n  border: @border;\n  border-radius: @borderRadius;\n  box-shadow: @boxShadow;\n  transition: @transition;\n  z-index: @zIndex;\n}\n.ui.items > .item a {\n  cursor: pointer;\n}\n\n/*--------------\n      Items\n---------------*/\n\n.ui.items {\n  margin: @groupMargin;\n}\n\n.ui.items:first-child {\n  margin-top: 0em !important;\n}\n.ui.items:last-child {\n  margin-bottom: 0em !important;\n}\n\n/*--------------\n      Item\n---------------*/\n\n.ui.items > .item:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n.ui.items > .item:first-child {\n  margin-top: 0em;\n}\n.ui.items > .item:last-child {\n  margin-bottom: 0em;\n}\n\n\n\n/*--------------\n     Images\n---------------*/\n\n.ui.items > .item > .image {\n  position: relative;\n  flex: 0 0 auto;\n  display: @imageDisplay;\n  float: @imageFloat;\n  margin: @imageMargin;\n  padding: @imagePadding;\n  max-height: @imageMaxHeight;\n  align-self: @imageVerticalAlign;\n}\n.ui.items > .item > .image > img {\n  display: block;\n  width: 100%;\n  height: auto;\n  border-radius: @imageBorderRadius;\n  border: @imageBorder;\n}\n\n.ui.items > .item > .image:only-child > img {\n  border-radius: @borderRadius;\n}\n\n\n/*--------------\n     Content\n---------------*/\n\n.ui.items > .item > .content {\n  display: block;\n  flex: 1 1 auto;\n  background: @contentBackground;\n  margin: @contentMargin;\n  padding: @contentPadding;\n  box-shadow: @contentBoxShadow;\n  font-size: @contentFontSize;\n  border: @contentBorder;\n  border-radius: @contentBorderRadius;\n}\n.ui.items > .item > .content:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.items > .item > .image + .content {\n  min-width: 0;\n  width: @contentWidth;\n  display: @contentDisplay;\n  margin-left: @contentOffset;\n  align-self: @contentVerticalAlign;\n  padding-left: @contentImageDistance;\n}\n\n.ui.items > .item > .content > .header {\n  display: inline-block;\n  margin: @headerMargin;\n  font-family: @headerFont;\n  font-weight: @headerFontWeight;\n  color: @headerColor;\n}\n/* Default Header Size */\n.ui.items > .item > .content > .header:not(.ui) {\n  font-size: @headerFontSize;\n}\n\n/*--------------\n     Floated\n---------------*/\n\n.ui.items > .item [class*=\"left floated\"] {\n  float: left;\n}\n.ui.items > .item [class*=\"right floated\"] {\n  float: right;\n}\n\n\n/*--------------\n  Content Image\n---------------*/\n\n.ui.items > .item .content img {\n  align-self: @contentImageVerticalAlign;\n  width: @contentImageWidth;\n}\n.ui.items > .item img.avatar,\n.ui.items > .item .avatar img {\n  width: @avatarSize;\n  height: @avatarSize;\n  border-radius: @avatarBorderRadius;\n}\n\n\n/*--------------\n   Description\n---------------*/\n\n.ui.items > .item > .content > .description {\n  margin-top: @descriptionDistance;\n  max-width: @descriptionMaxWidth;\n  font-size: @descriptionFontSize;\n  line-height: @descriptionLineHeight;\n  color: @descriptionColor;\n}\n\n/*--------------\n    Paragraph\n---------------*/\n\n.ui.items > .item > .content p {\n  margin: 0em 0em @paragraphDistance;\n}\n.ui.items > .item > .content p:last-child {\n  margin-bottom: 0em;\n}\n\n/*--------------\n      Meta\n---------------*/\n\n.ui.items > .item .meta {\n  margin: @metaMargin;\n  font-size: @metaFontSize;\n  line-height: @metaLineHeight;\n  color: @metaColor;\n}\n.ui.items > .item .meta * {\n  margin-right: @metaSpacing;\n}\n.ui.items > .item .meta :last-child {\n  margin-right: 0em;\n}\n\n.ui.items > .item .meta [class*=\"right floated\"] {\n  margin-right: 0em;\n  margin-left: @metaSpacing;\n}\n\n/*--------------\n      Links\n---------------*/\n\n/* Generic */\n.ui.items > .item > .content a:not(.ui) {\n  color: @contentLinkColor;\n  transition: @contentLinkTransition;\n}\n.ui.items > .item > .content a:not(.ui):hover {\n  color: @contentLinkHoverColor;\n}\n\n/* Header */\n.ui.items > .item > .content > a.header {\n  color: @headerLinkColor;\n}\n.ui.items > .item > .content > a.header:hover {\n  color: @headerLinkHoverColor;\n}\n\n/* Meta */\n.ui.items > .item .meta > a:not(.ui) {\n  color: @metaLinkColor;\n}\n.ui.items > .item .meta > a:not(.ui):hover {\n  color: @metaLinkHoverColor;\n}\n\n\n\n/*--------------\n     Labels\n---------------*/\n\n/*-----Star----- */\n\n/* Icon */\n.ui.items > .item > .content .favorite.icon {\n  cursor: pointer;\n  opacity: @actionOpacity;\n  transition: @actionTransition;\n}\n.ui.items > .item > .content .favorite.icon:hover {\n  opacity: @actionHoverOpacity;\n  color: @favoriteColor;\n}\n.ui.items > .item > .content .active.favorite.icon {\n  color: @favoriteActiveColor;\n}\n\n/*-----Like----- */\n\n/* Icon */\n.ui.items > .item > .content .like.icon {\n  cursor: pointer;\n  opacity: @actionOpacity;\n  transition: @actionTransition;\n}\n.ui.items > .item > .content .like.icon:hover {\n  opacity: @actionHoverOpacity;\n  color: @likeColor;\n}\n.ui.items > .item > .content .active.like.icon {\n  color: @likeActiveColor;\n}\n\n/*----------------\n  Extra Content\n-----------------*/\n\n.ui.items > .item .extra {\n  display: @extraDisplay;\n  position: @extraPosition;\n  background: @extraBackground;\n  margin: @extraMargin;\n  width: @extraWidth;\n  padding: @extraPadding;\n  top: @extraTop;\n  left: @extraLeft;\n  color: @extraColor;\n  box-shadow: @extraBoxShadow;\n  transition: @extraTransition;\n  border-top: @extraDivider;\n}\n.ui.items > .item .extra > * {\n  margin: (@extraRowSpacing / 2) @extraHorizontalSpacing (@extraRowSpacing / 2) 0em;\n}\n.ui.items > .item .extra > [class*=\"right floated\"] {\n  margin: (@extraRowSpacing / 2) 0em (@extraRowSpacing / 2) @extraHorizontalSpacing;\n}\n\n.ui.items > .item .extra:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n\n/*******************************\n          Responsive\n*******************************/\n\n/* Default Image Width */\n.ui.items > .item > .image:not(.ui) {\n  width: @imageWidth;\n}\n\n\n/* Tablet Only */\n@media only screen and (min-width: @tabletBreakpoint) and (max-width: @largestTabletScreen) {\n  .ui.items > .item {\n    margin: @tabletItemSpacing 0em;\n  }\n  .ui.items > .item > .image:not(.ui) {\n    width: @tabletImageWidth;\n  }\n  .ui.items > .item > .image + .content {\n    display: block;\n    padding: 0em 0em 0em @tabletContentImageDistance;\n  }\n\n}\n\n/* Mobile Only */\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.items:not(.unstackable) > .item {\n    flex-direction: column;\n    margin: @mobileItemSpacing 0em;\n  }\n  .ui.items:not(.unstackable) > .item > .image {\n    display: block;\n    margin-left: auto;\n    margin-right: auto;\n  }\n  .ui.items:not(.unstackable) > .item > .image,\n  .ui.items:not(.unstackable) > .item > .image > img {\n    max-width: 100% !important;\n    width: @mobileImageWidth !important;\n    max-height: @mobileImageMaxHeight !important;\n  }\n  .ui.items:not(.unstackable) > .item > .image + .content {\n    display: block;\n    padding: @mobileContentImageDistance 0em 0em;\n  }\n}\n\n\n/*******************************\n           Variations\n*******************************/\n\n\n/*-------------------\n       Aligned\n--------------------*/\n\n.ui.items > .item > .image + [class*=\"top aligned\"].content {\n  align-self: flex-start;\n}\n.ui.items > .item > .image + [class*=\"middle aligned\"].content {\n  align-self: center;\n}\n.ui.items > .item > .image + [class*=\"bottom aligned\"].content {\n  align-self: flex-end;\n}\n\n\n/*--------------\n     Relaxed\n---------------*/\n\n.ui.relaxed.items > .item {\n  margin: @relaxedItemSpacing 0em;\n}\n.ui[class*=\"very relaxed\"].items > .item {\n  margin: @veryRelaxedItemSpacing 0em;\n}\n\n\n/*-------------------\n      Divided\n--------------------*/\n\n.ui.divided.items > .item {\n  border-top: @dividedBorder;\n  margin: @dividedMargin;\n  padding: @dividedPadding;\n}\n.ui.divided.items > .item:first-child {\n  border-top: none;\n  margin-top: @dividedFirstLastMargin !important;\n  padding-top: @dividedFirstLastPadding !important;\n}\n.ui.divided.items > .item:last-child {\n  margin-bottom: @dividedFirstLastMargin !important;\n  padding-bottom: @dividedFirstLastPadding !important;\n}\n\n/* Relaxed Divided */\n.ui.relaxed.divided.items > .item {\n  margin: 0em;\n  padding: @relaxedItemSpacing 0em;\n}\n.ui[class*=\"very relaxed\"].divided.items > .item {\n  margin: 0em;\n  padding: @veryRelaxedItemSpacing 0em;\n}\n\n\n/*-------------------\n        Link\n--------------------*/\n\n.ui.items a.item:hover,\n.ui.link.items > .item:hover {\n  cursor: pointer;\n}\n\n.ui.items a.item:hover .content .header,\n.ui.link.items > .item:hover .content .header {\n  color: @headerLinkHoverColor;\n}\n\n\n/*--------------\n      Size\n---------------*/\n\n.ui.items > .item {\n  font-size: @relativeMedium;\n}\n\n/*---------------\n   Unstackable\n----------------*/\n\n@media only screen and (max-width: @largestMobileScreen) {\n  .ui.unstackable.items > .item > .image,\n  .ui.unstackable.items > .item > .image > img {\n    width: @unstackableMobileImageWidth !important;\n  }\n}\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/definitions/views/statistic.less",
    "content": "/*!\n * # Semantic UI - Statistic\n * http://github.com/semantic-org/semantic-ui/\n *\n *\n * Released under the MIT license\n * http://opensource.org/licenses/MIT\n *\n */\n\n/*******************************\n            Theme\n*******************************/\n\n@type    : 'view';\n@element : 'statistic';\n\n@import (multiple) '../../theme.config';\n\n/*******************************\n           Statistic\n*******************************/\n\n/* Standalone */\n.ui.statistic {\n  display: inline-flex;\n  flex-direction: column;\n  margin: @margin;\n  max-width: @maxWidth;\n}\n\n.ui.statistic + .ui.statistic {\n  margin: 0em 0em 0em @horizontalSpacing;\n}\n\n.ui.statistic:first-child {\n  margin-top: 0em;\n}\n.ui.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n\n\n/*******************************\n            Group\n*******************************/\n\n/* Grouped */\n.ui.statistics {\n  display: flex;\n  align-items: flex-start;\n  flex-wrap: wrap;\n}\n.ui.statistics > .statistic {\n  display: inline-flex;\n  flex: 0 1 auto;\n  flex-direction: column;\n  margin: @elementMargin;\n  max-width: @elementMaxWidth;\n}\n.ui.statistics {\n  display: flex;\n  margin: @groupMargin;\n}\n\n/* Clearing */\n.ui.statistics:after {\n  display: block;\n  content: ' ';\n  height: 0px;\n  clear: both;\n  overflow: hidden;\n  visibility: hidden;\n}\n\n.ui.statistics:first-child {\n  margin-top: 0em;\n}\n.ui.statistics:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*******************************\n            Content\n*******************************/\n\n\n/*--------------\n      Value\n---------------*/\n\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-family: @valueFont;\n  font-size: @valueSize;\n  font-weight: @valueFontWeight;\n  line-height: @valueLineHeight;\n  color: @valueColor;\n  text-transform: @valueTextTransform;\n  text-align: @textAlign;\n}\n\n/*--------------\n     Label\n---------------*/\n\n.ui.statistics .statistic > .label,\n.ui.statistic > .label {\n  font-family: @labelFont;\n  font-size: @labelSize;\n  font-weight: @labelFontWeight;\n  color: @labelColor;\n  text-transform: @labelTextTransform;\n  text-align: @textAlign;\n}\n\n/* Top Label */\n.ui.statistics .statistic > .label ~ .value,\n.ui.statistic > .label ~ .value {\n  margin-top: @topLabelDistance;\n}\n\n/* Bottom Label */\n.ui.statistics .statistic > .value ~ .label,\n.ui.statistic > .value ~ .label {\n  margin-top: @bottomLabelDistance;\n}\n\n\n\n/*******************************\n             Types\n*******************************/\n\n/*--------------\n   Icon Value\n---------------*/\n\n.ui.statistics .statistic > .value .icon,\n.ui.statistic > .value .icon {\n  opacity: 1;\n  width: auto;\n  margin: 0em;\n}\n\n/*--------------\n   Text Value\n---------------*/\n\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  line-height: @textValueLineHeight;\n  min-height: @textValueMinHeight;\n  font-weight: @textValueFontWeight;\n  text-align: center;\n}\n.ui.statistics .statistic > .text.value + .label,\n.ui.statistic > .text.value + .label {\n  text-align: center;\n}\n\n/*--------------\n   Image Value\n---------------*/\n\n.ui.statistics .statistic > .value img,\n.ui.statistic > .value img {\n  max-height: @imageHeight;\n  vertical-align: @imageVerticalAlign;\n}\n\n\n\n/*******************************\n            Variations\n*******************************/\n\n\n/*--------------\n      Count\n---------------*/\n\n\n.ui.ten.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.ten.statistics .statistic {\n  min-width: @tenColumn;\n  margin: @itemMargin;\n}\n\n.ui.nine.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.nine.statistics .statistic {\n  min-width: @nineColumn;\n  margin: @itemMargin;\n}\n\n.ui.eight.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.eight.statistics .statistic {\n  min-width: @eightColumn;\n  margin: @itemMargin;\n}\n\n.ui.seven.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.seven.statistics .statistic {\n  min-width: @sevenColumn;\n  margin: @itemMargin;\n}\n\n.ui.six.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.six.statistics .statistic {\n  min-width: @sixColumn;\n  margin: @itemMargin;\n}\n\n.ui.five.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.five.statistics .statistic {\n  min-width: @fiveColumn;\n  margin: @itemMargin;\n}\n\n.ui.four.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.four.statistics .statistic {\n  min-width: @fourColumn;\n  margin: @itemMargin;\n}\n\n.ui.three.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.three.statistics .statistic {\n  min-width: @threeColumn;\n  margin: @itemMargin;\n}\n\n.ui.two.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.two.statistics .statistic {\n  min-width: @twoColumn;\n  margin: @itemMargin;\n}\n\n.ui.one.statistics {\n  margin: @itemGroupMargin;\n}\n.ui.one.statistics .statistic {\n  min-width: @oneColumn;\n  margin: @itemMargin;\n}\n\n\n\n\n/*--------------\n   Horizontal\n---------------*/\n\n.ui.horizontal.statistic {\n  flex-direction: row;\n  align-items: center;\n}\n.ui.horizontal.statistics {\n  flex-direction: column;\n  margin: 0em;\n  max-width: none;\n}\n.ui.horizontal.statistics .statistic {\n  flex-direction: row;\n  align-items: center;\n  max-width: none;\n  margin: @horizontalGroupElementMargin;\n}\n\n.ui.horizontal.statistic > .text.value,\n.ui.horizontal.statistics > .statistic > .text.value {\n  min-height: 0em !important;\n}\n.ui.horizontal.statistics .statistic > .value .icon,\n.ui.horizontal.statistic > .value .icon {\n  width: @iconWidth;\n}\n\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  display: inline-block;\n  vertical-align: middle;\n}\n.ui.horizontal.statistics .statistic > .label,\n.ui.horizontal.statistic > .label {\n  display: inline-block;\n  vertical-align: middle;\n  margin: 0em 0em 0em @horizontalLabelDistance;\n}\n\n/*--------------\n     Colors\n---------------*/\n\n.ui.red.statistics .statistic > .value,\n.ui.statistics .red.statistic > .value,\n.ui.red.statistic > .value {\n  color: @red;\n}\n.ui.orange.statistics .statistic > .value,\n.ui.statistics .orange.statistic > .value,\n.ui.orange.statistic > .value {\n  color: @orange;\n}\n.ui.yellow.statistics .statistic > .value,\n.ui.statistics .yellow.statistic > .value,\n.ui.yellow.statistic > .value {\n  color: @yellow;\n}\n.ui.olive.statistics .statistic > .value,\n.ui.statistics .olive.statistic > .value,\n.ui.olive.statistic > .value {\n  color: @olive;\n}\n.ui.green.statistics .statistic > .value,\n.ui.statistics .green.statistic > .value,\n.ui.green.statistic > .value {\n  color: @green;\n}\n.ui.teal.statistics .statistic > .value,\n.ui.statistics .teal.statistic > .value,\n.ui.teal.statistic > .value {\n  color: @teal;\n}\n.ui.blue.statistics .statistic > .value,\n.ui.statistics .blue.statistic > .value,\n.ui.blue.statistic > .value {\n  color: @blue;\n}\n.ui.violet.statistics .statistic > .value,\n.ui.statistics .violet.statistic > .value,\n.ui.violet.statistic > .value {\n  color: @violet;\n}\n.ui.purple.statistics .statistic > .value,\n.ui.statistics .purple.statistic > .value,\n.ui.purple.statistic > .value {\n  color: @purple;\n}\n.ui.pink.statistics .statistic > .value,\n.ui.statistics .pink.statistic > .value,\n.ui.pink.statistic > .value {\n  color: @pink;\n}\n.ui.brown.statistics .statistic > .value,\n.ui.statistics .brown.statistic > .value,\n.ui.brown.statistic > .value {\n  color: @brown;\n}\n.ui.grey.statistics .statistic > .value,\n.ui.statistics .grey.statistic > .value,\n.ui.grey.statistic > .value {\n  color: @grey;\n}\n\n/*--------------\n    Inverted\n---------------*/\n\n.ui.inverted.statistics .statistic > .value,\n.ui.inverted.statistic .value {\n  color: @invertedValueColor;\n}\n.ui.inverted.statistics .statistic > .label,\n.ui.inverted.statistic .label {\n  color: @invertedLabelColor;\n}\n\n.ui.inverted.red.statistics .statistic > .value,\n.ui.statistics .inverted.red.statistic > .value,\n.ui.inverted.red.statistic > .value {\n  color: @lightRed;\n}\n.ui.inverted.orange.statistics .statistic > .value,\n.ui.statistics .inverted.orange.statistic > .value,\n.ui.inverted.orange.statistic > .value {\n  color: @lightOrange;\n}\n.ui.inverted.yellow.statistics .statistic > .value,\n.ui.statistics .inverted.yellow.statistic > .value,\n.ui.inverted.yellow.statistic > .value {\n  color: @lightYellow;\n}\n.ui.inverted.olive.statistics .statistic > .value,\n.ui.statistics .inverted.olive.statistic > .value,\n.ui.inverted.olive.statistic > .value {\n  color: @lightOlive;\n}\n.ui.inverted.green.statistics .statistic > .value,\n.ui.statistics .inverted.green.statistic > .value,\n.ui.inverted.green.statistic > .value {\n  color: @lightGreen;\n}\n.ui.inverted.teal.statistics .statistic > .value,\n.ui.statistics .inverted.teal.statistic > .value,\n.ui.inverted.teal.statistic > .value {\n  color: @lightTeal;\n}\n.ui.inverted.blue.statistics .statistic > .value,\n.ui.statistics .inverted.blue.statistic > .value,\n.ui.inverted.blue.statistic > .value {\n  color: @lightBlue;\n}\n.ui.inverted.violet.statistics .statistic > .value,\n.ui.statistics .inverted.violet.statistic > .value,\n.ui.inverted.violet.statistic > .value {\n  color: @lightViolet;\n}\n.ui.inverted.purple.statistics .statistic > .value,\n.ui.statistics .inverted.purple.statistic > .value,\n.ui.inverted.purple.statistic > .value {\n  color: @lightPurple;\n}\n.ui.inverted.pink.statistics .statistic > .value,\n.ui.statistics .inverted.pink.statistic > .value,\n.ui.inverted.pink.statistic > .value {\n  color: @lightPink;\n}\n.ui.inverted.brown.statistics .statistic > .value,\n.ui.statistics .inverted.brown.statistic > .value,\n.ui.inverted.brown.statistic > .value {\n  color: @lightBrown;\n}\n.ui.inverted.grey.statistics .statistic > .value,\n.ui.statistics .inverted.grey.statistic > .value,\n.ui.inverted.grey.statistic > .value {\n  color: @lightGrey;\n}\n\n/*--------------\n    Floated\n---------------*/\n\n.ui[class*=\"left floated\"].statistic {\n  float: left;\n  margin: @leftFloatedMargin;\n}\n.ui[class*=\"right floated\"].statistic {\n  float: right;\n  margin: @rightFloatedMargin;\n}\n.ui.floated.statistic:last-child {\n  margin-bottom: 0em;\n}\n\n\n/*--------------\n     Sizes\n---------------*/\n\n\n/* Mini */\n.ui.mini.statistics .statistic > .value,\n.ui.mini.statistic > .value {\n  font-size: @miniValueSize !important;\n}\n.ui.mini.horizontal.statistics .statistic > .value,\n.ui.mini.horizontal.statistic > .value {\n  font-size: @miniHorizontalValueSize !important;\n}\n.ui.mini.statistics .statistic > .text.value,\n.ui.mini.statistic > .text.value {\n  font-size: @miniTextValueSize !important;\n}\n\n\n/* Tiny */\n.ui.tiny.statistics .statistic > .value,\n.ui.tiny.statistic > .value {\n  font-size: @tinyValueSize !important;\n}\n.ui.tiny.horizontal.statistics .statistic > .value,\n.ui.tiny.horizontal.statistic > .value {\n  font-size: @tinyHorizontalValueSize !important;\n}\n.ui.tiny.statistics .statistic > .text.value,\n.ui.tiny.statistic > .text.value {\n  font-size: @tinyTextValueSize !important;\n}\n\n/* Small */\n.ui.small.statistics .statistic > .value,\n.ui.small.statistic > .value {\n  font-size: @smallValueSize !important;\n}\n.ui.small.horizontal.statistics .statistic > .value,\n.ui.small.horizontal.statistic > .value {\n  font-size: @smallHorizontalValueSize !important;\n}\n.ui.small.statistics .statistic > .text.value,\n.ui.small.statistic > .text.value {\n  font-size: @smallTextValueSize !important;\n}\n\n/* Medium */\n.ui.statistics .statistic > .value,\n.ui.statistic > .value {\n  font-size: @valueSize !important;\n}\n.ui.horizontal.statistics .statistic > .value,\n.ui.horizontal.statistic > .value {\n  font-size: @horizontalValueSize !important;\n}\n.ui.statistics .statistic > .text.value,\n.ui.statistic > .text.value {\n  font-size: @textValueSize !important;\n}\n\n/* Large */\n.ui.large.statistics .statistic > .value,\n.ui.large.statistic > .value {\n  font-size: @largeValueSize !important;\n}\n.ui.large.horizontal.statistics .statistic > .value,\n.ui.large.horizontal.statistic > .value {\n  font-size: @largeHorizontalValueSize !important;\n}\n.ui.large.statistics .statistic > .text.value,\n.ui.large.statistic > .text.value {\n  font-size: @largeTextValueSize !important;\n}\n\n/* Huge */\n.ui.huge.statistics .statistic > .value,\n.ui.huge.statistic > .value {\n  font-size: @hugeValueSize !important;\n}\n.ui.huge.horizontal.statistics .statistic > .value,\n.ui.huge.horizontal.statistic > .value {\n  font-size: @hugeHorizontalValueSize !important;\n}\n.ui.huge.statistics .statistic > .text.value,\n.ui.huge.statistic > .text.value {\n  font-size: @hugeTextValueSize !important;\n}\n\n\n.loadUIOverrides();\n"
  },
  {
    "path": "resources/assets/semantic/src/semantic.less",
    "content": "/*\n\n███████╗███████╗███╗   ███╗ █████╗ ███╗   ██╗████████╗██╗ ██████╗    ██╗   ██╗██╗\n██╔════╝██╔════╝████╗ ████║██╔══██╗████╗  ██║╚══██╔══╝██║██╔════╝    ██║   ██║██║\n███████╗█████╗  ██╔████╔██║███████║██╔██╗ ██║   ██║   ██║██║         ██║   ██║██║\n╚════██║██╔══╝  ██║╚██╔╝██║██╔══██║██║╚██╗██║   ██║   ██║██║         ██║   ██║██║\n███████║███████╗██║ ╚═╝ ██║██║  ██║██║ ╚████║   ██║   ██║╚██████╗    ╚██████╔╝██║\n╚══════╝╚══════╝╚═╝     ╚═╝╚═╝  ╚═╝╚═╝  ╚═══╝   ╚═╝   ╚═╝ ╚═════╝     ╚═════╝ ╚═╝\n\n  Import this file into your LESS project to use Semantic UI without build tools\n*/\n\n/* Global */\n& { @import \"definitions/globals/reset\"; }\n& { @import \"definitions/globals/site\"; }\n\n/* Elements */\n& { @import \"definitions/elements/button\"; }\n& { @import \"definitions/elements/container\"; }\n& { @import \"definitions/elements/divider\"; }\n& { @import \"definitions/elements/flag\"; }\n& { @import \"definitions/elements/header\"; }\n& { @import \"definitions/elements/icon\"; }\n& { @import \"definitions/elements/image\"; }\n& { @import \"definitions/elements/input\"; }\n& { @import \"definitions/elements/label\"; }\n& { @import \"definitions/elements/list\"; }\n& { @import \"definitions/elements/loader\"; }\n& { @import \"definitions/elements/rail\"; }\n& { @import \"definitions/elements/reveal\"; }\n& { @import \"definitions/elements/segment\"; }\n& { @import \"definitions/elements/step\"; }\n\n/* Collections */\n& { @import \"definitions/collections/breadcrumb\"; }\n& { @import \"definitions/collections/form\"; }\n& { @import \"definitions/collections/grid\"; }\n& { @import \"definitions/collections/menu\"; }\n& { @import \"definitions/collections/message\"; }\n& { @import \"definitions/collections/table\"; }\n\n/* Views */\n& { @import \"definitions/views/ad\"; }\n& { @import \"definitions/views/card\"; }\n& { @import \"definitions/views/comment\"; }\n& { @import \"definitions/views/feed\"; }\n& { @import \"definitions/views/item\"; }\n& { @import \"definitions/views/statistic\"; }\n\n/* Modules */\n& { @import \"definitions/modules/accordion\"; }\n& { @import \"definitions/modules/checkbox\"; }\n& { @import \"definitions/modules/dimmer\"; }\n& { @import \"definitions/modules/dropdown\"; }\n& { @import \"definitions/modules/embed\"; }\n& { @import \"definitions/modules/modal\"; }\n& { @import \"definitions/modules/nag\"; }\n& { @import \"definitions/modules/popup\"; }\n& { @import \"definitions/modules/progress\"; }\n& { @import \"definitions/modules/rating\"; }\n& { @import \"definitions/modules/search\"; }\n& { @import \"definitions/modules/shape\"; }\n& { @import \"definitions/modules/sidebar\"; }\n& { @import \"definitions/modules/sticky\"; }\n& { @import \"definitions/modules/tab\"; }\n& { @import \"definitions/modules/transition\"; }\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/breadcrumb.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/breadcrumb.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/form.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/form.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/grid.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/grid.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/menu.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/menu.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/message.overrides",
    "content": "/*******************************\n        Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/message.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/table.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/collections/table.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/button.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/button.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/container.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/container.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/divider.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/divider.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/flag.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/flag.variables",
    "content": "/*-------------------\n   Flag Variables\n--------------------*/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/header.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/header.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/icon.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/icon.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/image.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/image.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/input.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/input.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/label.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/label.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/list.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/list.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/loader.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/loader.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/rail.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/rail.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/reveal.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/reveal.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/segment.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/segment.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/step.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/elements/step.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/globals/reset.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/globals/reset.variables",
    "content": "/*******************************\n     User Global Variables\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/globals/site.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/globals/site.variables",
    "content": "/*******************************\n     User Global Variables\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/accordion.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/accordion.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/chatroom.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/chatroom.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/checkbox.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/checkbox.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/dimmer.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/dimmer.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/dropdown.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/dropdown.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/embed.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/embed.variables",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/site/modules/modal.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/modal.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/nag.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/nag.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/popup.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/popup.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/progress.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/progress.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/rating.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/rating.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/search.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/search.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/shape.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/shape.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/sidebar.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/sidebar.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/sticky.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/sticky.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/tab.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/tab.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/transition.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/modules/transition.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/ad.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/ad.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/card.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/card.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/comment.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/comment.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/feed.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/feed.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/item.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/item.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/statistic.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/site/views/statistic.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/theme.config",
    "content": "/*\n\n████████╗██╗  ██╗███████╗███╗   ███╗███████╗███████╗\n╚══██╔══╝██║  ██║██╔════╝████╗ ████║██╔════╝██╔════╝\n   ██║   ███████║█████╗  ██╔████╔██║█████╗  ███████╗\n   ██║   ██╔══██║██╔══╝  ██║╚██╔╝██║██╔══╝  ╚════██║\n   ██║   ██║  ██║███████╗██║ ╚═╝ ██║███████╗███████║\n   ╚═╝   ╚═╝  ╚═╝╚══════╝╚═╝     ╚═╝╚══════╝╚══════╝\n\n*/\n\n/*******************************\n        Theme Selection\n*******************************/\n\n/* To override a theme for an individual element\n   specify theme name below\n*/\n\n/* Global */\n@site       : 'default';\n@reset      : 'default';\n\n/* Elements */\n@button     : 'default';\n@container  : 'default';\n@divider    : 'default';\n@flag       : 'default';\n@header     : 'default';\n@icon       : 'default';\n@image      : 'default';\n@input      : 'default';\n@label      : 'default';\n@list       : 'default';\n@loader     : 'default';\n@rail       : 'default';\n@reveal     : 'default';\n@segment    : 'default';\n@step       : 'default';\n\n/* Collections */\n@breadcrumb : 'default';\n@form       : 'default';\n@grid       : 'default';\n@menu       : 'default';\n@message    : 'default';\n@table      : 'default';\n\n/* Modules */\n@accordion  : 'default';\n@checkbox   : 'default';\n@dimmer     : 'default';\n@dropdown   : 'default';\n@embed      : 'default';\n@modal      : 'default';\n@nag        : 'default';\n@popup      : 'default';\n@progress   : 'default';\n@rating     : 'default';\n@search     : 'default';\n@shape      : 'default';\n@sidebar    : 'default';\n@sticky     : 'default';\n@tab        : 'default';\n@transition : 'default';\n\n/* Views */\n@ad         : 'default';\n@card       : 'default';\n@comment    : 'default';\n@feed       : 'default';\n@item       : 'default';\n@statistic  : 'default';\n\n/*******************************\n            Folders\n*******************************/\n\n/* Path to theme packages */\n@themesFolder : 'themes';\n\n/* Path to site override folder */\n@siteFolder   : 'site/';\n\n\n/*******************************\n         Import Theme\n*******************************/\n\n@import \"theme.less\";\n\n/* End Config */"
  },
  {
    "path": "resources/assets/semantic/src/theme.less",
    "content": "/*******************************\n        Import Directives\n*******************************/\n\n/*------------------\n       Theme\n-------------------*/\n\n@theme: @@element;\n\n/*--------------------\n   Site Variables\n---------------------*/\n\n/* Default site.variables */\n@import \"@{themesFolder}/default/globals/site.variables\";\n\n/* Packaged site.variables */\n@import \"@{themesFolder}/@{site}/globals/site.variables\";\n\n/* Component's site.variables */\n@import (optional) \"@{themesFolder}/@{theme}/globals/site.variables\";\n\n/* Site theme site.variables */\n@import (optional) \"@{siteFolder}/globals/site.variables\";\n\n\n/*-------------------\n Component Variables\n---------------------*/\n\n/* Default */\n@import \"@{themesFolder}/default/@{type}s/@{element}.variables\";\n\n/* Packaged Theme */\n@import (optional) \"@{themesFolder}/@{theme}/@{type}s/@{element}.variables\";\n\n/* Site Theme */\n@import (optional) \"@{siteFolder}/@{type}s/@{element}.variables\";\n\n\n/*******************************\n             Mix-ins\n*******************************/\n\n/*------------------\n       Fonts\n-------------------*/\n\n.loadFonts() when (@importGoogleFonts) {\n  @import url('@{googleProtocol}fonts.googleapis.com/css?family=@{googleFontRequest}');\n}\n\n/*------------------\n     Overrides\n-------------------*/\n\n.loadUIOverrides() {\n  @import (optional) \"@{themesFolder}/@{theme}/@{type}s/@{element}.overrides\";\n  @import (optional) \"@{siteFolder}/@{type}s/@{element}.overrides\";\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/amazon/elements/button.overrides",
    "content": ".ui.button {\n  background-image: linear-gradient(center top , #F7F8FA, #E7E9EC) repeat scroll 0 0 rgba(0, 0, 0, 0);\n}\n\n.ui.primary.button {\n  color: #111111;\n  border: 1px solid;\n  border-color: #C59F43 #AA8326 #957321;\n}\n.ui.primary.button:hover {\n  border-color: #C59F43 #AA8326 #957321;\n  color: #111111;\n}\n\n.ui.secondary.button {\n  border: 1px solid;\n  border-color: #3D444C #2F353B #2C3137;\n}\n.ui.secondary.button:hover {\n  border-color: #32373E #24282D #212429;\n}\n\n\n.ui.labeled.icon.buttons .button > .icon,\n.ui.labeled.icon.button > .icon {\n  padding-bottom: 0.48em;\n  padding-top: 0.48em;\n  position: absolute;\n  text-align: center;\n  width: 2em;\n  height: 2em;\n  top: 0.35em;\n  left: 0.4em;\n  border-radius: 3px;\n}\n.ui.right.labeled.icon.buttons .button > .icon,\n.ui.right.labeled.icon.button > .icon {\n  left: auto;\n  right: 0.4em;\n  border-radius: 3px;\n}\n\n.ui.basic.labeled.icon.buttons .button > .icon,\n.ui.basic.labeled.icon.button > .icon {\n  padding-top: 0.4em !important;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/amazon/elements/button.variables",
    "content": "/*-------------------\n   Button Variables\n--------------------*/\n\n/* Button Variables */\n@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;\n@textTransform: none;\n@textColor: #111111;\n@fontWeight: normal;\n@transition:\n  opacity @defaultDuration @defaultEasing,\n  background-color @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  background @defaultDuration @defaultEasing\n;\n\n@hoverBackgroundColor: #E0E0E0;\n\n@borderRadius: 3px;\n@verticalPadding: 0.8em;\n@horizontalPadding: 1.75em;\n\n@backgroundColor: #F7F8FA;\n@backgroundImage: linear-gradient(rgba(255, 255, 255, 0), rgba(0, 0, 0, 0.1));\n@boxShadow:\n  0 1px 0 1px rgba(255, 255, 255, 0.3) inset,\n  0 0 0 1px #ADB2BB inset\n;\n\n@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.2));\n@coloredBoxShadow:\n  0px 1px 0px 0px rgba(255, 255, 255, 0.2) inset\n;\n\n@downBoxShadow:\n  0 0 0 1px #ADB2BB inset,\n  0 1px 3px rgba(0, 0, 0, 0.2) inset\n;\n\n@labeledIconBackgroundColor: #313A43;\n@labeledIconColor: #FFFFFF;\n@labeledIconBorder: transparent;\n\n@black: #444C55;\n@orange: #F4CC67;\n\n@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.1));\n@primaryColor: @orange;\n@secondaryColor: @black;\n\n@mini: 10px;\n@tiny: 11px;\n@small: 12px;\n@medium: 13px;\n@large: 14px;\n@big: 16px;\n@huge: 18px;\n@massive: 22px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/amazon/globals/site.variables",
    "content": "/*******************************\n     User Global Variables\n*******************************/\n\n@pageMinWidth  : 1049px;\n@pageOverflowX : visible;\n\n@emSize: 13px;\n@fontSize : 13px;\n@fontName : 'Arial';\n@importGoogleFonts : false;\n\n@h1: 2.25em;\n\n@defaultBorderRadius: 0.30769em; /* 4px @ 13em */\n\n@disabledOpacity: 0.3;\n\n@black: #444C55;\n@orange: #FDE07B;\n\n@linkColor: #0066C0;\n@linkHoverColor: #C45500;\n@linkHoverUnderline: underline;\n\n@borderColor: rgba(0, 0, 0, 0.13);\n@solidBorderColor: #DDDDDD;\n@internalBorderColor: rgba(0, 0, 0, 0.06);\n@selectedBorderColor: #51A7E8;\n\n/* Breakpoints */\n@largeMonitorBreakpoint: 1049px;\n@computerBreakpoint: @largeMonitorBreakpoint;\n@tabletBreakpoint: @largeMonitorBreakpoint;\n\n/* Colors */\n@blue: #80A6CD;\n@green: #60B044;\n@orange: #D26911;\n\n\n@infoBackgroundColor: #E6F1F6;\n@infoTextColor: #4E575B;"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/collections/table.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/collections/table.variables",
    "content": "/*-------------------\n   Table Variables\n--------------------*/\n\n@headerBackground: @white;\n@footerBackground: @white;\n\n@cellVerticalPadding: 1em;\n@cellHorizontalPadding: 1em;\n\n@stateMarkerWidth: 1px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/button.variables",
    "content": "/*-------------------\n   Button Variables\n--------------------*/\n\n/* Button Variables */\n@textTransform: none;\n@fontWeight: normal;\n@textColor: #333333;\n\n@primaryColor: #333333;\n\n@borderRadius: 0.25em;\n\n@backgroundColor: #EEEEEE;\n@backgroundImage: none;\n@boxShadow: none;\n\n@hoverBackgroundColor: #DDDDDD;\n@hoverBackgroundImage: none;\n@hoverBoxShadow: none;\n\n@downBackgroundColor: #D0D0D0;\n@downBackgroundImage: none;\n@downBoxShadow: none;\n\n@activeBackgroundColor: #CCCCCC;\n@activeBackgroundImage: none;\n@activeBoxShadow: none;\n\n@verticalBoxShadow: none;\n\n@loadingBackgroundColor: #F0F0F0;\n\n@labeledIconLeftShadow: none;\n@labeledIconRightShadow: none;\n\n@mini: 0.6rem;\n@tiny: 0.7rem;\n@small: 0.85rem;\n@medium: 0.92rem;\n@large: 1rem;\n@big: 1.125rem;\n@huge: 1.25rem;\n@massive: 1.3rem;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/icon.overrides",
    "content": "/* basic.icons available */\ni.icon.circle.attention:before { content: '\\2757'; } /* '❗' */\ni.icon.circle.help:before { content: '\\e704'; } /* '' */\ni.icon.circle.info:before { content: '\\e705'; } /* '' */\ni.icon.add:before { content: '\\2795'; } /* '➕' */\n\ni.icon.chart:before { content: '📈'; } /* '\\1f4c8' */\ni.icon.chart.bar:before { content: '📊'; } /* '\\1f4ca' */\ni.icon.chart.pie:before { content: '\\e7a2'; } /* '' */\n\ni.icon.resize.full:before { content: '\\e744'; } /* '' */\ni.icon.resize.horizontal:before { content: '\\2b0d'; } /* '⬍' */\ni.icon.resize.small:before { content: '\\e746'; } /* '' */\ni.icon.resize.vertical:before { content: '\\2b0c'; } /* '⬌' */\n\ni.icon.down:before { content: '\\2193'; } /* '↓' */\ni.icon.down.triangle:before { content: '\\25be'; } /* '▾' */\ni.icon.down.arrow:before { content: '\\e75c'; } /* '' */\n\ni.icon.left:before { content: '\\2190'; } /* '←' */\ni.icon.left.triangle:before { content: '\\25c2'; } /* '◂' */\ni.icon.left.arrow:before { content: '\\e75d'; } /* '' */\n\ni.icon.right:before { content: '\\2192'; } /* '→' */\ni.icon.right.triangle:before { content: '\\25b8'; } /* '▸' */\ni.icon.right.arrow:before { content: '\\e75e'; } /* '' */\n\ni.icon.up:before { content: '\\2191'; } /* '↑' */\ni.icon.up.triangle:before { content: '\\25b4'; } /* '▴' */\ni.icon.up.arrow:before { content: '\\e75f'; } /* '' */\n\ni.icon.folder:before { content: '\\e810'; } /* '' */\ni.icon.open.folder:before { content: '📂'; } /* '\\1f4c2' */\n\ni.icon.globe:before { content: '𝌍'; } /* '\\1d30d' */\ni.icon.desk.globe:before { content: '🌐'; } /* '\\1f310' */\n\ni.icon.star:before { content: '\\e801'; } /* '' */\ni.icon.star.empty:before { content: '\\e800'; } /* '' */\ni.icon.star.half:before { content: '\\e701'; } /* '' */\n\ni.icon.lock:before { content: '🔒'; } /* '\\1f512' */\ni.icon.unlock:before { content: '🔓'; } /* '\\1f513' */\n\ni.icon.layout.grid:before { content: '\\e80c'; } /* '' */\ni.icon.layout.block:before { content: '\\e708'; } /* '' */\ni.icon.layout.list:before { content: '\\e80b'; } /* '' */\n\ni.icon.heart.empty:before { content: '\\2661'; } /* '♡' */\ni.icon.heart:before { content: '\\2665'; } /* '♥' */\n\n\ni.icon.asterisk:before { content: '\\2731'; } /* '✱' */\ni.icon.attachment:before { content: '📎'; } /* '\\1f4ce' */\ni.icon.attention:before { content: '\\26a0'; } /* '⚠' */\ni.icon.trophy:before { content: '🏉'; } /* '\\1f3c9' */\ni.icon.barcode:before { content: '\\e792'; } /* '' */\ni.icon.cart:before { content: '\\e813'; } /* '' */\ni.icon.block:before { content: '🚫'; } /* '\\1f6ab' */\ni.icon.book:before { content: '📖'; }\ni.icon.bookmark:before { content: '🔖'; } /* '\\1f516' */\ni.icon.calendar:before { content: '📅'; } /* '\\1f4c5' */\ni.icon.cancel:before { content: '\\2716'; } /* '✖' */\ni.icon.close:before { content: '\\e80d'; } /* '' */\ni.icon.color:before { content: '\\e794'; } /* '' */\ni.icon.chat:before { content: '\\e720'; } /* '' */\ni.icon.check:before { content: '\\2611'; } /* '☑' */\ni.icon.time:before { content: '🕔'; } /* '\\1f554' */\ni.icon.cloud:before { content: '\\2601'; } /* '☁' */\ni.icon.code:before { content: '\\e714'; } /* '' */\ni.icon.email:before { content: '\\40'; } /* '@' */\ni.icon.settings:before { content: '\\26ef'; } /* '⛯' */\ni.icon.setting:before { content: '\\2699'; } /* '⚙' */\ni.icon.comment:before { content: '\\e802'; } /* '' */\ni.icon.clockwise.counter:before { content: '\\27f2'; } /* '⟲' */\ni.icon.clockwise:before { content: '\\27f3'; } /* '⟳' */\ni.icon.cube:before { content: '\\e807'; } /* '' */\ni.icon.direction:before { content: '\\27a2'; } /* '➢' */\ni.icon.doc:before { content: '📄'; } /* '\\1f4c4' */\ni.icon.docs:before { content: '\\e736'; } /* '' */\ni.icon.dollar:before { content: '💵'; } /* '\\1f4b5' */\ni.icon.paint:before { content: '\\e7b5'; } /* '' */\ni.icon.edit:before { content: '\\270d'; } /* '✍' */\ni.icon.eject:before { content: '\\2ecf'; } /* '⻏' */\ni.icon.export:before { content: '\\e715'; } /* '' */\ni.icon.hide:before  { content: '\\e70b'; } /* '' */\ni.icon.unhide:before { content: '\\e80f'; } /* '' */\ni.icon.facebook:before { content: '\\f301'; } /* '' */\ni.icon.fast-forward:before { content: '\\e804'; } /* '' */\ni.icon.fire:before { content: '🔥'; } /* '\\1f525' */\ni.icon.flag:before { content: '\\2691'; } /* '⚑' */\ni.icon.lightning:before { content: '\\26a1'; } /* '⚡' */\ni.icon.lab:before { content: '\\68'; } /* 'h' */\ni.icon.flight:before { content: '\\2708'; } /* '✈' */\ni.icon.forward:before { content: '\\27a6'; } /* '➦' */\ni.icon.gift:before { content: '🎁'; } /* '\\1f381' */\ni.icon.github:before { content: '\\f308'; } /* '' */\ni.icon.globe:before { content: '\\e817'; } /* '' */\ni.icon.headphones:before { content: '🎧'; } /* '\\1f3a7' */\ni.icon.question:before { content: '\\2753'; } /* '❓' */\ni.icon.home:before { content: '\\2302'; } /* '⌂' */\ni.icon.i:before { content: '\\2139'; } /* 'ℹ' */\ni.icon.idea:before { content: '💡'; } /* '\\1f4a1' */\ni.icon.open:before { content: '🔗'; } /* '\\1f517' */\ni.icon.content:before { content: '\\e782'; } /* '' */\ni.icon.location:before { content: '\\e724'; } /* '' */\ni.icon.mail:before { content: '\\2709'; } /* '✉' */\ni.icon.mic:before { content: '🎤'; } /* '\\1f3a4' */\ni.icon.minus:before { content: '\\2d'; } /* '-' */\ni.icon.money:before { content: '💰'; } /* '\\1f4b0' */\ni.icon.off:before { content: '\\e78e'; } /* '' */\ni.icon.pause:before { content: '\\e808'; } /* '' */\ni.icon.photos:before { content: '\\e812'; } /* '' */\ni.icon.photo:before { content: '🌄'; } /* '\\1f304' */\ni.icon.pin:before { content: '📌'; } /* '\\1f4cc' */\ni.icon.play:before { content: '\\e809'; } /* '' */\ni.icon.plus:before { content: '\\2b'; } /* '+' */\ni.icon.print:before { content: '\\e716'; } /* '' */\ni.icon.rss:before { content: '\\e73a'; } /* '' */\ni.icon.search:before { content: '🔍'; } /* '\\1f50d' */\ni.icon.shuffle:before { content: '\\e803'; } /* '' */\ni.icon.tag:before { content: '\\e80a'; } /* '' */\ni.icon.tags:before { content: '\\e70d'; } /* '' */\ni.icon.terminal:before { content: '\\e7ac'; } /* '' */\ni.icon.thumbs.down:before { content: '👎'; } /* '\\1f44e' */\ni.icon.thumbs.up:before { content: '👍'; } /* '\\1f44d' */\ni.icon.to-end:before { content: '\\e806'; } /* '' */\ni.icon.to-start:before { content: '\\e805'; } /* '' */\ni.icon.top.list:before { content: '🏆'; } /* '\\1f3c6' */\ni.icon.trash:before { content: '\\e729'; } /* '' */\ni.icon.twitter:before { content: '\\f303'; } /* '' */\ni.icon.upload:before { content: '\\e711'; } /* '' */\ni.icon.user.add:before { content: '\\e700'; } /* '' */\ni.icon.user:before { content: '👤'; } /* '\\1f464' */\ni.icon.community:before { content: '\\e814'; } /* '' */\ni.icon.users:before { content: '👥'; } /* '\\1f465' */\ni.icon.id:before { content: '\\e722'; } /* '' */\ni.icon.url:before { content: '🔗'; } /* '\\1f517' */\ni.icon.zoom.in:before { content: '\\e750'; } /* '' */\ni.icon.zoom.out:before { content: '\\e751'; } /* '' */\n\n/*--------------\n   Spacing Fix\n---------------*/\n\n/* dropdown arrows are to the right */\ni.dropdown.icon {\n  margin: 0em 0em 0em 0.5em;\n}\n\n/* stars are usually consecutive */\ni.icon.star {\n  width: auto;\n  margin: 0em;\n}\n\n/* left side basic.icons */\ni.icon.left {\n  width: auto;\n  margin: 0em 0.5em 0em 0em;\n}\n\n/* right side basic.icons */\ni.icon.search,\ni.icon.up,\ni.icon.down,\ni.icon.right {\n  width: auto;\n  margin: 0em 0em 0em 0.5em;\n}\n\n/*--------------\n     Aliases\n---------------*/\n\n/* aliases for convenience */\ni.icon.delete:before { content: '\\e80d'; } /* '' */\ni.icon.dropdown:before { content: '\\25be'; } /* '▾' */\n\ni.icon.help:before { content: '\\e704'; } /* '' */\ni.icon.info:before { content: '\\e705'; } /* '' */\ni.icon.error:before { content: '\\e80d'; } /* '' */\n\ni.icon.dislike:before { content: '\\2661'; } /* '♡' */\ni.icon.like:before { content: '\\2665'; } /* '♥' */\n\ni.icon.eye:before { content: '\\e80f'; } /* '' */\ni.icon.eye.hidden:before { content: '\\e70b'; } /* '' */\ni.icon.date:before { content: '📅'; } /* '\\1f4c5' */\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/icon.variables",
    "content": "/*-------------------\n   Icon Variables\n--------------------*/\n\n@fontPath  : \"../../themes/basic/assets/fonts\";\n\n@src:\n  url(\"@{fontPath}/@{fontName}.eot?#iefix\") format('embedded-opentype'),\n  url(\"@{fontPath}/@{fontName}.woff\") format('woff'),\n  url(\"@{fontPath}/@{fontName}.ttf\") format('truetype'),\n  url(\"@{fontPath}/@{fontName}.svg#icons\") format('svg')\n;"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/step.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.steps .step:after {\n  display: none !important;\n}\n.ui.steps .step {\n  border-radius: 500px !important;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/elements/step.variables",
    "content": "/*-------------------\n   Step Variables\n--------------------*/\n\n/* Stepss */\n@stepsBorder: none;\n@stepsBorderRadius: @circularRadius;\n\n/* Step */\n@border: none;\n@divider: none;\n@background: transparent;\n@borderRadius: @circularRadius;\n@iconDistance: 0.8em;\n@arrowDisplay: none;\n\n@activeBackground: @midWhite;\n@activeArrowDisplay: none;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/globals/reset.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n/* No Additional Resets */"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/globals/reset.variables",
    "content": "/*******************************\n             Reset\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/modules/progress.overrides",
    "content": "/*******************************\n            Progress\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/modules/progress.variables",
    "content": "/*******************************\n            Progress\n*******************************/\n\n@background: transparent;\n@border: none;\n@padding: 0em;\n\n@progressLeft: 0em;\n@progressWidth: 100%;\n@progressTextAlign: center;\n\n@labelFontWeight: normal;\n@labelTextAlign: left;\n@labelHeight: 1.5em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/views/card.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/basic/views/card.variables",
    "content": "/*******************************\n             Card\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n@width: 250px;\n@background: transparent;\n@border: none;\n@boxShadow: none;\n\n@contentPadding: 1em 0em;\n\n@rowSpacing: 1.5em;\n@groupCardMargin: 0em @horizontalSpacing @rowSpacing;\n\n@extraBackground: transparent;\n@extraDivider: none;\n@extraBoxShadow: none;\n@extraPadding: 0.5em 0em;\n\n@extraLinkColor: @textColor;\n@extraLinkHoverColor: @linkHoverColor;\n\n@headerFontSize: @relativeLarge;\n@headerLinkColor: @textColor;\n@headerLinkHoverColor: @linkHoverColor;\n\n@imageBorderRadius: @borderRadius;\n@imageBorder: 1px solid @borderColor;\n\n@linkHoverBackground: transparent;\n@linkHoverBoxShadow: none;"
  },
  {
    "path": "resources/assets/semantic/src/themes/bookish/elements/header.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n@import url(http://fonts.googleapis.com/css?family=Karma);\n\nh1.ui.header,\n.ui.huge.header {\n  font-weight: bold;\n}\n\nh2.ui.header,\n.ui.large.header {\n  font-weight: bold;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/bookish/elements/header.variables",
    "content": "/*-------------------\n       Header\n--------------------*/\n\n@headerFont : 'Karma', 'Times New Roman', serif;\n@fontWeight: normal;\n\n@iconSize: 1.5em;\n@iconOffset: 0.2em;\n@iconAlignment: top;\n\n@subHeaderFontSize: 0.85rem;\n\n@dividedBorder: 1px dotted rgba(0, 0, 0, 0.2);\n\n/* Block Header */\n@blockVerticalPadding: 1.3em;\n@blockHorizontalPadding: 1em;\n\n/* Attached  */\n@attachedBackground: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.03)) repeat scroll 0 0 #F8F8F8;\n@attachedVerticalPadding: 1.3;\n@attachedHorizontalPadding: 1em;\n\n/* HTML Headings */\n@h1: 1.75rem;\n@h2: 1.33rem;\n@h3: 1.33rem;\n@h4: 1rem;\n@h5: 0.9rem;\n\n/* Sizing */\n@hugeFontSize: 1.75em;\n@largeFontSize: 1.33em;\n@mediumFontSize: 1.33em;\n@smallFontSize: 1em;\n@tinyFontSize: 0.9em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/bootstrap3/elements/button.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/bootstrap3/elements/button.variables",
    "content": "/*-------------------\n   Button Variables\n--------------------*/\n\n/* Button Variables */\n@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;\n@textTransform: none;\n@fontWeight: normal;\n@textColor: rgba(51, 51, 51, 1);\n\n@borderRadius: @4px;\n\n@lineHeight: 1.42857;\n@verticalPadding: 0.8571em;\n@horizontalPadding: 0.8571em;\n\n@backgroundColor: @white;\n@backgroundImage: none;\n\n\n@borderBoxShadowColor: rgba(0, 0, 0, 0.14);\n\n@green: #5CB85C;\n@red: #D9534F;\n@blue: #337AB7;\n@green: #60B044;\n@orange: #F0AD4E;\n\n@primaryColor: @blue;\n@secondaryColor: @green;\n\n@labeledIconBackgroundColor: transparent;\n\n@basicBorderSize: 0px;\n@basicColoredBorderSize: 0px;\n@invertedBorderSize: 0px;\n\n@basicActiveBackground: transparent;\n@basicHoverBackground: transparent;\n@basicDownBoxShadow:\n  0px 0px 0px 1px #ADADAD inset,\n  0 3px 5px rgba(0, 0, 0, 0.125) inset\n;\n\n@groupButtonOffset: 0px 0px 0px -1px;\n@verticalGroupOffset: 0px 0px -1px 0px;\n\n/* States */\n\n@hoverBackgroundColor: #E6E6E6;\n@hoverBoxShadow:\n  0px 0px 0px 1px #ADADAD inset\n;\n\n@downBackgroundColor: #E6E6E6;\n@downBoxShadow:\n  0px 0px 0px 1px #ADADAD inset,\n  0 3px 5px rgba(0, 0, 0, 0.125) inset\n;\n\n@activeBackgroundColor: #E6E6E6;\n\n@disabledOpacity: 0.65;"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/collections/form.overrides",
    "content": "/*-------------------\n   Form Variables\n--------------------*/\n\n.ui.form .selection.dropdown {\n  padding: 1.1em 1.2em;\n  border-width: 2px;\n}\n.ui.form .selection.dropdown .menu {\n  min-width: calc(100% + 4px);\n  margin: 0 -2px;\n  border-width: 2px;\n}\n.ui.form .selection.dropdown input {\n  padding: inherit;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/collections/form.variables",
    "content": "/*-------------------\n   Form Variables\n--------------------*/\n\n@labelTextTransform: uppercase;\n@labelFontSize: 0.8em;\n\n@inputPadding: 1em 1.2em;\n@inputBorder: 2px solid @borderColor;"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/collections/menu.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/collections/menu.variables",
    "content": "/*******************************\n             Menu\n*******************************/\n\n@background: @darkWhite;\n@boxShadow: none;\n@dividerSize: 0px;\n\n@verticalBoxShadow: 0px 0px 0px 2px @borderColor inset;\n@verticalActiveBoxShadow: none;\n\n@itemVerticalPadding: 1.25em;\n@itemHorizontalPadding: 2em;\n@itemFontWeight: bold;\n\n@activeItemBackground: @primaryColor;\n@activeItemTextColor: @white;\n@activeHoverItemBackground: @primaryColorHover;\n@activeHoverItemColor: @white;\n\n@secondaryItemPadding: @relativeSmall @relativeMedium;\n\n@secondaryActiveItemBackground: @primaryColor;\n@secondaryActiveItemColor: @white;\n@secondaryActiveHoverItemBackground: @primaryColorHover;\n@secondaryActiveHoverItemColor: @white;\n\n@secondaryPointingBorderWidth: 4px;\n@secondaryPointingActiveBorderColor: @primaryColor;\n@secondaryPointingActiveTextColor: @primaryColor;\n\n@arrowSize: 1em;\n@arrowActiveColor: @primaryColor;\n@arrowActiveHoverColor: @primaryColorHover;\n@arrowBorder: transparent;\n\n@paginationActiveBackground: @lightGrey;\n\n@borderColor: @darkWhite;\n@tabularBorderWidth: 2px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro);\n\n.ui.labeled.icon.buttons > .button > .icon,\n.ui.labeled.icon.button > .icon {\n  box-shadow:\n    -1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset,\n    -1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset\n  ;\n}\n\n.ui.right.labeled.icon.buttons .button .icon,\n.ui.right.labeled.icon.button .icon {\n  box-shadow:\n    1px 0px 0px 0px rgba(255, 255, 255, 0.2) inset,\n    1px 0px 0px 0px rgba(0, 0, 0, 0.05) inset\n  ;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/elements/button.variables",
    "content": "/*-------------------\n   Button Variables\n--------------------*/\n\n/* Button Variables */\n@pageFont: 'Source Sans Pro', Arial, sans-serif;\n\n@textTransform: none;\n@fontWeight: normal;\n@textColor: #333333;\n\n@verticalPadding: 1.1em;\n@horizontalPadding: 2.5em;\n@invertedBorderSize: 3px;\n\n@basicBorderRadius: 0.4em;\n@basicFontWeight: bold;\n@basicTextTransform: uppercase;\n\n@blue: #4A88CB;\n@primaryColor: @blue;\n\n@borderRadius: 0.25em;\n\n@backgroundColor: #E6EAED;\n@backgroundImage: none;\n@boxShadow: none;\n\n@hoverBackgroundColor: #DDDDDD;\n@hoverBackgroundImage: none;\n@hoverBoxShadow: none;\n\n@downBackgroundColor: #D0D0D0;\n@downBackgroundImage: none;\n@downBoxShadow: none;\n\n@activeBackgroundColor: #CCCCCC;\n@activeBackgroundImage: none;\n@activeBoxShadow: none;\n\n@verticalBoxShadow: none;\n\n@loadingBackgroundColor: #F0F0F0;\n\n@compactVerticalPadding: (@verticalPadding * 0.5);\n@compactHorizontalPadding: (@horizontalPadding * 0.5);\n\n@labeledIconBackgroundColor: transparent;\n\n@mini: 0.7rem;\n@tiny: 0.75rem;\n@small: 0.8rem;\n@medium: 0.92rem;\n@large: 1rem;\n@big: 1.125rem;\n@huge: 1.2rem;\n@massive: 1.3rem;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/elements/header.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n@import url(http://fonts.googleapis.com/css?family=Source+Sans+Pro);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/elements/header.variables",
    "content": "/*-------------------\n       Header\n--------------------*/\n\n@headerFont : 'Source Sans Pro', Helvetica Neue, Helvetica, Arial, sans-serif;\n@fontWeight: bold;\n@textTransform: none;\n\n/* HTML Headings */\n@h1: 1.33rem;\n@h2: 1.2rem;\n@h3: 1rem;\n@h4: 0.9rem;\n@h5: 0.8rem;\n\n/* Sizing */\n@hugeFontSize: 1.33em;\n@largeFontSize: 1.2em;\n@mediumFontSize: 1em;\n@smallFontSize: 0.9em;\n@tinyFontSize: 0.8em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/modules/accordion.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.styled.accordion .accordion .active.title {\n  border-bottom: 1px solid rgba(0, 0, 0, 0.1);\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/modules/accordion.variables",
    "content": "/*-------------------\n   Accordion Variables\n--------------------*/\n\n@iconMargin: 0em 0.5em 0em 0em;\n\n@styledActiveTitleBackground: @subtleGradient;\n@styledActiveTitleColor: @primaryColor;\n\n@styledActiveChildTitleBackground: transparent;\n\n@styledTitlePadding: 1.25em;\n@styledTitleFontWeight: bold;\n@styledContentPadding: 1.5em 3.25em;\n@styledChildContentPadding: @styledContentPadding;"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/views/comment.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.comments .comment {\n  border-radius: 0.5em;\n  box-shadow: 0px 1px 1px 1px rgba(0, 0, 0, 0.1);\n}\n.ui.comments .comment .comments .comment {\n  border: 1px solid rgba(0, 0, 0, 0.1);\n  box-shadow: none;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/chubby/views/comment.variables",
    "content": "/*******************************\n            Comments\n*******************************/\n\n/*-------------------\n      Elements\n--------------------*/\n\n/* Comment */\n@commentBackground: #FFFFFF;\n@commentMargin: 1em 0em 0em;\n@commentPadding: 1em 1.5em;\n@commentBorder: 1px solid rgba(0, 0, 0, 0.1);\n@commentDivider: 1px solid rgba(0, 0, 0, 0.1);\n@firstCommentMargin: 1em;\n@firstCommentPadding: 1em;\n\n/* Nested Comment */\n@nestedCommentsMargin: 0em 0em 0.5em 0.5em;\n@nestedCommentsPadding: 1em 0em 0em 1em;\n@nestedCommentBackground: #F0F0F0;\n\n/* Avatar */\n@avatarWidth: 3.5em;\n@avatarSpacing: 1.5em;\n@avatarBorderRadius: @circularRadius;\n\n/* Content */\n@contentMargin: @avatarWidth + @avatarSpacing;\n\n/* Author */\n@authorFontSize: 1em;\n@authorColor: @primaryColor;\n@authorHoverColor: @primaryColorHover;\n@authorFontWeight: bold;\n\n@metadataDisplay: block;\n@metadataSpacing: 0em;\n@metadataColor: @textColor;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Threaded */\n@threadedCommentMargin: -1.5em 0 -1em  (@avatarWidth / 2);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/collections/table.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/collections/table.variables",
    "content": "/*******************************\n            Table\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@boxShadow: @subtleGradient;\n\n@headerBackground: @subtleGradient;\n@headerBoxShadow: @subtleShadow;\n@footerBoxShadow: 0px -1px 1px 0px rgba(0, 0, 0, 0.05);\n@footerBackground: rgba(0, 0, 0, 0.05);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/elements/button.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n/* Shadow */\n@shadowDistance: 0em;\n@shadowOffset: (@shadowDistance / 2);\n@shadowBoxShadow: 0px -@shadowDistance 0px 0px @borderColor inset;\n@backgroundColor: #FAFAFA;\n@backgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.09));\n@boxShadow:\n  0px 0px 0px 1px @borderColor inset,\n  @shadowBoxShadow\n;\n\n/* Padding */\n@verticalPadding: 0.8em;\n@horizontalPadding: 1.5em;\n\n\n/*-------------------\n        Group\n--------------------*/\n\n@groupBoxShadow: none;\n@groupButtonBoxShadow:\n  0px 0px 0px 1px @borderColor inset,\n  @shadowBoxShadow\n;\n@verticalBoxShadow: 0px 0px 0px 1px @borderColor inset;\n@groupButtonOffset: 0px 0px 0px -1px;\n@verticalGroupOffset: 0px 0px -1px 0px;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Hovered */\n@hoverBackgroundColor: '';\n@hoverBackgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.13));\n@hoverBoxShadow: '';\n@hoverColor: @hoveredTextColor;\n@iconHoverOpacity: 0.85;\n\n/* Focused */\n@focusBackgroundColor: '';\n@focusBackgroundImage: '';\n@focusBoxShadow:\n  0px 0px 1px rgba(81, 167, 232, 0.8) inset,\n  0px 0px 3px 2px rgba(81, 167, 232, 0.8)\n;\n@focusColor: @hoveredTextColor;\n@iconFocusOpacity: 0.85;\n\n/* Pressed Down */\n@downBackgroundColor: #F1F1F1;\n@downBackgroundImage: '';\n@downBoxShadow:\n  0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,\n  0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important\n;\n@downColor: @pressedTextColor;\n\n/* Active */\n@activeBackgroundColor: #DADADA;\n@activeBackgroundImage: none;\n@activeColor: @selectedTextColor;\n@activeBoxShadow:\n  0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,\n  0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important\n;\n\n/* Active + Hovered */\n@activeHoverBackgroundColor: #DADADA;\n@activeHoverBackgroundImage: none;\n@activeHoverBoxShadow:\n  0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,\n  0px 1px 4px 0px rgba(0, 0, 0, 0.1) inset !important\n;\n@activeHoverColor: @selectedTextColor;\n\n/* Loading */\n@loadingBackgroundColor: #FFFFFF;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Labeled Icon */\n@labeledIconBackgroundColor: rgba(0, 0, 0, 0.05);\n@labeledIconLeftShadow: -1px 0px 0px 0px @labeledIconBorder inset;\n@labeledIconRightShadow: 1px 0px 0px 0px @labeledIconBorder inset;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/elements/header.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/elements/header.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@headerFont: 'Open Sans', Arial, sans-serif;\n\n@blockBackground: @offWhite @subtleGradient;\n@blockBoxShadow: @subtleShadow;"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/modules/progress.overrides",
    "content": "/*******************************\n            Progress\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/modules/progress.variables",
    "content": "/*******************************\n            Progress\n*******************************/\n\n@background: rgba(0, 0, 0, 0.05);\n@boxShadow: 0px 0px 4px rgba(0, 0, 0, 0.1) inset;\n@barBackground: @subtleGradient #888888;\n@border: 1px solid @borderColor;\n@padding: @relative3px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/views/card.overrides",
    "content": "/*******************************\n             Item\n*******************************/\n/*-------------------\n         View\n--------------------*/\n\n/* Item */\n@background: #FFFFFF;\n@borderRadius: 0.325rem;\n@display: block;\n@float: left;\n@margin: 0em @horizontalSpacing @rowSpacing;\n@minHeight: 0px;\n@padding: 0em;\n@width: 300px;\n@boxShadow:\n  0px 0px 0px 1px @borderColor,\n  0px 3px 0px 0px @borderColor\n;\n@border: none;\n@zIndex: '';\n\n/* Item Group */\n@horizontalSpacing: 0.5em;\n@rowSpacing: 2.5em;\n@groupMargin: 1em -@horizontalSpacing;\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Image */\n@imageBackground: @transparentBlack;\n@imagePadding: 0em;\n@imageBorderRadius: @borderRadius @borderRadius 0em 0em;\n@imageBoxShadow: none;\n@imageBorder: none;\n\n/* Content */\n@contentMargin: 0em;\n@contentPadding: 0.75em 1em;\n@contentFontSize: 1em;\n@contentBorder: none;\n@contentBorderRadius: 0em;\n@contentBoxShadow: none;\n\n/* Title */\n@titleMargin: 0em;\n@titleFont: @headerFont;\n@titleFontWeight: bold;\n@titleFontSize: 1.25em;\n@titleColor: @darkTextColor;\n\n/* Metadata */\n@metaColor: @lightTextColor;\n\n/* Description */\n@descriptionDistance: 0.75em;\n@descriptionColor: @lightTextColor;\n\n/* Image */\n@imageSpacing: 0.25em;\n@contentImageWidth: 2em;\n@contentImageVerticalAlign: middle;\n\n/* Paragraph */\n@paragraphDistance: 0.1em;\n\n/* Additional Content */\n@extraDisplay: absolute;\n@extraTop: 100%;\n@extraLeft: 0em;\n@extraWidth: 100%;\n\n@extraPadding: 0.5em 0.75em;\n@extraColor: @lightTextColor;\n@extraTransition: color @defaultDuration @defaultEasing;\n\n/*-------------------\n       States\n--------------------*/\n\n@hoverCursor: pointer;\n@hoverZIndex: 5;\n@hoverBorder: none;\n@hoverBoxShadow:\n  0px 0px 0px 1px @selectedBorderColor,\n  0px 3px 0px 0px @selectedBorderColor\n;\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Sizes */\n@medium: 1em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/classic/views/card.variables",
    "content": "/*******************************\n             Card\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n/* Shadow */\n@shadowDistance: 0em;\n@padding: 0em;\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Additional Content */\n@extraDivider: 1px solid rgba(0, 0, 0, 0.05);\n@extraBackground: #FAFAFA @subtleGradient;\n@extraPadding: 0.75em 1em;\n@extraBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.15);\n@extraColor: @lightTextColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/colored/modules/checkbox.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/colored/modules/checkbox.variables",
    "content": "/* Checkbox */\n@checkboxActiveBackground: @primaryColor;\n@checkboxActiveBorderColor: @primaryColor;\n@checkboxActiveCheckColor: @white;\n\n@checkboxActiveFocusBackground: @primaryColorFocus;\n@checkboxActiveFocusBorderColor: @primaryColorFocus;\n@checkboxActiveFocusCheckColor: @white;\n\n@checkboxTransition: none;\n\n/* Radio */\n@radioActiveBackground: @white;\n@radioActiveBorderColor: @primaryColor;\n@radioActiveBulletColor: @primaryColor;\n\n@radioActiveFocusBackground: @white;\n@radioActiveFocusBorderColor: @primaryColorFocus;\n@radioActiveFocusBulletColor: @primaryColorFocus;\n\n/* Slider */\n@sliderOnLineColor: @primaryColor;\n@sliderOnFocusLineColor: @primaryColorFocus;\n\n/* Handle */\n@handleBackground: @white @subtleGradient;\n@handleBoxShadow:\n  0px 0px 0px 1px @selectedBorderColor inset\n;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/breadcrumb.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/breadcrumb.variables",
    "content": "/*******************************\n          Breadcrumb\n*******************************/\n\n/*-------------------\n     Breadcrumb\n--------------------*/\n\n@verticalMargin: 0em;\n@display: inline-block;\n@verticalAlign: middle;\n\n@dividerSpacing: @3px;\n@dividerOpacity: 0.7;\n@dividerColor: @lightTextColor;\n\n@dividerSize: @relativeSmall;\n@dividerVerticalAlign: baseline;\n\n@iconDividerSize: @relativeTiny;\n@iconDividerVerticalAlign: baseline;\n\n@sectionMargin: 0em;\n@sectionPadding: 0em;\n\n/* Coupling */\n@segmentPadding: @relativeMini @relativeMedium;\n\n/*-------------------\n       States\n--------------------*/\n\n@activeFontWeight: bold;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/form.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/form.variables",
    "content": "/*******************************\n             Form\n*******************************/\n\n/*-------------------\n       Elements\n--------------------*/\n\n/* Form */\n@gutterWidth: 1em;\n@rowDistance: 1em;\n\n/* Text */\n@paragraphMargin: @rowDistance 0em;\n\n/* Field */\n@fieldMargin: 0em 0em @rowDistance;\n\n/* Fields */\n@fieldsMargin: 0em -(@gutterWidth / 2) @rowDistance;\n\n/* Form Label */\n@labelDistance: @4px;\n@labelMargin: 0em 0em @labelDistance 0em;\n@labelFontSize: @relativeSmall;\n@labelFontWeight: bold;\n@labelTextTransform: none;\n@labelColor: @textColor;\n\n/* Input */\n@inputFont: @pageFont;\n@inputWidth: 100%;\n@inputFontSize: 1em;\n@inputPadding: (@inputVerticalPadding + ((1em - @inputLineHeight) / 2)) @inputHorizontalPadding;\n@inputBorder: 1px solid @borderColor;\n@inputBorderRadius: @absoluteBorderRadius;\n@inputColor: @textColor;\n@inputTransition:\n  color @defaultDuration @defaultEasing,\n  border-color @defaultDuration @defaultEasing\n;\n@inputBoxShadow: 0em 0em 0em 0em transparent inset;\n\n/* Select */\n@selectBackground: @white;\n@selectBorderRadius: @inputBorderRadius;\n@selectBorder: @inputBorder;\n@selectPadding: 0.62em @inputHorizontalPadding;\n@selectBoxShadow: @inputBoxShadow;\n@selectTransition: @inputTransition;\n@selectColor: @inputColor;\n\n/* Text Area */\n@textAreaPadding: @inputVerticalPadding @inputHorizontalPadding;\n@textAreaHeight: 12em;\n@textAreaResize: vertical;\n@textAreaLineHeight: 1.2857;\n@textAreaMinHeight: 8em;\n@textAreaMaxHeight: 24em;\n@textAreaBackground: @inputBackground;\n@textAreaBorder: @inputBorder;\n@textAreaFontSize: @inputFontSize;\n@textAreaTransition: @inputTransition;\n\n/* Checkbox */\n@checkboxVerticalAlign: top;\n@checkboxLabelFontSize: 1em;\n@checkboxLabelTextTransform: @labelTextTransform;\n\n/* Inline Validation Prompt */\n@promptBackground: @white;\n@promptBorderColor: @formErrorBorder;\n@promptBorder: 1px solid @promptBorderColor;\n@promptTextColor: @formErrorColor;\n@inlinePromptMargin: -0.25em 0em -0.5em 0.5em;\n@inlinePromptBorderWidth: 1px;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Focus */\n@inputFocusPointerSize: 0px;\n\n/* Input Focus */\n@inputFocusBackground: @inputBackground;\n@inputFocusBorderColor: @focusedFormBorderColor;\n@inputFocusColor: @selectedTextColor;\n@inputFocusBoxShadow: @inputFocusPointerSize 0em 0em 0em @selectedBorderColor inset;\n@inputFocusBorderRadius: @inputBorderRadius;\n\n/* Text Area Focus */\n@textAreaFocusBackground: @inputFocusBackground;\n@textAreaFocusBorderColor: @inputFocusBorderColor;\n@textAreaFocusColor: @inputFocusColor;\n@textAreaFocusBoxShadow: @inputFocusBoxShadow;\n@textAreaFocusBorderRadius: @inputFocusBorderRadius;\n\n/* Disabled */\n@disabledLabelOpacity: @disabledOpacity;\n\n/* Errored Input */\n@formErrorColor: @negativeTextColor;\n@formErrorBorder: @negativeBorderColor;\n@formErrorBackground: @negativeBackgroundColor;\n\n/* AutoFill */\n@inputAutoFillBackground: #FFFFF0;\n@inputAutoFillBorder: #E5DFA1;\n@inputAutoFillFocusBackground: @inputAutoFillBackground;\n@inputAutoFillFocusBorder: #D5C315;\n@inputAutoFillErrorBackground: #FFFAF0;\n@inputAutoFillErrorBorder: #E0B4B4;\n\n\n/* Input Error */\n@inputErrorBorderRadius: '';\n@inputErrorBoxShadow: none;\n\n/* Dropdown Error */\n@dropdownErrorHoverBackground: #FBE7E7;\n@dropdownErrorSelectedBackground: @dropdownErrorHoverBackground;\n@dropdownErrorActiveBackground: #FDCFCF;\n@dropdownErrorLabelBackground: #EACBCB;\n@dropdownErrorLabelColor: @errorTextColor;\n\n/* Focused Error */\n@inputErrorFocusBackground: @negativeBackgroundColor;\n@inputErrorFocusColor: @negativeTextColor;\n@inputErrorFocusBorder: @negativeBorderColor;\n@inputErrorFocusBoxShadow: none;\n\n/* Placeholder Error */\n@inputErrorPlaceholderColor: lighten(@formErrorColor, 40);\n@inputErrorPlaceholderFocusColor: lighten(@formErrorColor, 30);\n\n/* Loading Dimmer */\n@loaderDimmerColor: rgba(255, 255, 255, 0.8);\n@loaderDimmerZIndex: 100;\n\n/* Loading Spinner */\n@loaderSize: 3em;\n@loaderLineZIndex: 101;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Required */\n@requiredContent: '*';\n@requiredColor: @negativeColor;\n@requiredVerticalOffset: -0.2em;\n@requiredDistance: 0.2em;\n@requiredMargin: @requiredVerticalOffset 0em 0em @requiredDistance;\n\n/* Inverted */\n@invertedInputBackground: @inputBackground;\n@invertedInputBorderColor: @whiteBorderColor;\n@invertedInputBoxShadow: @inputBoxShadow;\n@invertedInputColor: @inputColor;\n@invertedLabelColor: @invertedTextColor;\n@invertedInputBoxShadow: none;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Grouped Fields */\n@groupedMargin: @fieldMargin;\n@groupedFieldMargin: 0.5em 0em;\n\n@groupedLabelDistance: @labelDistance;\n@groupedLabelColor: @labelColor;\n@groupedLabelMargin: @labelMargin;\n@groupedLabelFontSize: @labelFontSize;\n@groupedLabelFontWeight: @labelFontWeight;\n@groupedLabelTextTransform: @labelTextTransform;\n\n\n/* Inline */\n@inlineInputSize: @relativeMedium;\n\n@inlineLabelDistance: @relativeTiny;\n@inlineLabelColor: @labelColor;\n@inlineLabelFontSize: @labelFontSize;\n@inlineLabelFontWeight: @labelFontWeight;\n@inlineLabelTextTransform: @labelTextTransform;\n\n@groupedInlineLabelMargin: 0.035714em 1em 0em 0em;\n\n/*-------------------\n       Groups\n--------------------*/\n\n@inlineFieldsMargin: 0em 1em 0em 0em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/grid.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/grid.variables",
    "content": "/*******************************\n             Grid\n*******************************/\n\n/* Inherited From Site */\n\n// @mobileBreakpoint\n// @tabletBreakpoint\n// @computerBreakpoint\n// @largeMonitorBreakpoint\n// @widescreenMonitorBreakpoint\n\n/*******************************\n            Grid\n*******************************/\n\n@minWidth: 320px;\n\n@gutterWidth: 2rem;\n@rowSpacing: 2rem;\n\n@tableWidth: ~\"calc(100% + \"@gutterWidth~\")\";\n@columnMaxImageWidth: 100%;\n\n@consecutiveGridDistance: (@rowSpacing / 2);\n\n/*******************************\n           Variations\n*******************************/\n\n/*--------------\n     Relaxed\n---------------*/\n\n@relaxedGutterWidth: 3rem;\n@veryRelaxedGutterWidth: 5rem;\n\n/*--------------\n     Divided\n---------------*/\n\n@dividedBorder: -1px 0px 0px 0px @borderColor;\n@verticallyDividedBorder: 0px -1px 0px 0px @borderColor;\n\n@dividedInvertedBorder: -1px 0px 0px 0px @whiteBorderColor;\n@verticallyDividedInvertedBorder: 0px -1px 0px 0px @whiteBorderColor;\n\n/*--------------\n    Celled\n---------------*/\n\n@celledMargin: 1em 0em;\n@celledWidth: 1px;\n@celledBorderColor: @solidBorderColor;\n\n@celledPadding: 1em;\n@celledRelaxedPadding: 1.5em;\n@celledVeryRelaxedPadding: 2em;\n\n@celledGridDivider: 0px 0px 0px @celledWidth @celledBorderColor;\n@celledRowDivider: 0px (-@celledWidth) 0px 0px @celledBorderColor;\n@celledColumnDivider: (-@celledWidth) 0px 0px 0px @celledBorderColor;\n\n\n/*--------------\n    Stackable\n---------------*/\n\n@stackableRowSpacing: @rowSpacing;\n@stackableGutter: @gutterWidth;\n@stackableMobileBorder: 1px solid @borderColor;\n@stackableInvertedMobileBorder: 1px solid @whiteBorderColor;\n\n\n/*******************************\n             Legacy\n*******************************/\n\n/*--------------\n     Page\n---------------*/\n\n/* Legacy (DO NOT USE)\n */\n@mobileWidth: auto;\n@mobileMargin: 0em;\n@mobileGutter: 0em;\n\n@tabletWidth: auto;\n@tabletMargin: 0em;\n@tabletGutter: 2em;\n\n@computerWidth: auto;\n@computerMargin: 0em;\n@computerGutter: 3%;\n\n@largeMonitorWidth: auto;\n@largeMonitorMargin: 0em;\n@largeMonitorGutter: 15%;\n\n@widescreenMonitorWidth: auto;\n@widescreenMargin: 0em;\n@widescreenMonitorGutter: 23%;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/menu.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/menu.variables",
    "content": "/*******************************\n             Menu\n*******************************/\n\n/*-------------------\n      Collection\n--------------------*/\n\n/* Menu */\n@verticalMargin: @medium;\n@horizontalMargin: 0em;\n@margin: @verticalMargin @horizontalMargin;\n@background: #FFFFFF;\n@fontFamily: @pageFont;\n@itemBackground: none;\n@fontWeight: normal;\n@borderWidth: 1px;\n@border: @borderWidth solid @borderColor;\n@boxShadow: @subtleShadow;\n@borderRadius: @defaultBorderRadius;\n@minHeight: (@itemVerticalPadding * 2) + 1em;\n\n/* Menu Item */\n@itemVerticalPadding: @relativeSmall;\n@itemHorizontalPadding: @relativeLarge;\n@itemTextTransform: none;\n@itemTransition:\n  background @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing\n;\n@itemFontWeight: normal;\n@itemTextColor: @textColor;\n\n/* Divider */\n@dividerSize: 1px;\n@dividerBackground: @internalBorderColor;\n\n/* Sub Menu */\n@subMenuDistance: 0.5em;\n@subMenuMargin: @subMenuDistance -@itemHorizontalPadding 0em;\n@subMenuFontSize: @relativeTiny;\n@subMenuTextColor: rgba(0, 0, 0, 0.5);\n\n@subMenuIndent: 0em;\n@subMenuHorizontalPadding: (@itemHorizontalPadding / @tinySize) + @subMenuIndent;\n@subMenuVerticalPadding: 0.5em;\n\n/* Text Item */\n@textLineHeight: 1.3;\n\n/*--------------\n    Elements\n---------------*/\n\n/* Icon */\n@iconFloat: none;\n@iconMargin: 0em @relative5px 0em 0em;\n@iconOpacity: 0.9;\n\n/* Dropdown Icon */\n@dropdownIconFloat: right;\n@dropdownIconDistance: 1em;\n\n/* Header */\n@headerBackground: '';\n@headerWeight: bold;\n@headerTextTransform: normal;\n\n/* Vertical Icon */\n@verticalIconFloat: right;\n@verticalIconMargin: 0em 0em 0em 0.5em;\n\n/* Vertical Header */\n@verticalHeaderMargin: 0em 0em 0.5em;\n@verticalHeaderFontSize: @relativeMedium;\n@verticalHeaderFontWeight: bold;\n\n/* Pointing Arrow */\n@arrowSize: @relative8px;\n@arrowBorderWidth: 1px;\n@arrowBorder: @arrowBorderWidth solid @solidBorderColor;\n@arrowTransition: background @defaultDuration @defaultEasing;\n@arrowZIndex: 2;\n\n@arrowHoverColor: #F2F2F2;\n@arrowActiveColor: @arrowHoverColor;\n@arrowActiveHoverColor: @arrowActiveColor;\n\n@arrowVerticalHoverColor: @arrowHoverColor;\n@arrowVerticalActiveColor: @arrowActiveColor;\n@arrowVerticalSubMenuColor: @white;\n\n/*--------------\n    Couplings\n---------------*/\n\n/* Button */\n@buttonSize: @relativeMedium;\n@buttonOffset: 0em;\n@buttonMargin: -0.5em 0em;\n@buttonVerticalPadding: @relativeMini;\n\n/* Input */\n@inputSize: @relativeMedium;\n@inputVerticalMargin: -0.5em;\n@inputOffset: 0em;\n@inputVerticalPadding: @relative8px;\n\n/* Image */\n@imageMargin: -0.3em 0em;\n@imageWidth: 2.5em;\n@verticalImageWidth: auto;\n\n/* Label */\n@labelOffset: -0.15em;\n@labelBackground: #999999;\n@labelTextColor: @white;\n\n@labelTextMargin: 1em;\n@labelVerticalPadding: 0.3em;\n@labelHorizontalPadding: @relativeMini;\n\n@labelAndIconFloat: none;\n@labelAndIconMargin: 0em 0.5em 0em 0em;\n\n/* Dropdown in Menu */\n@dropdownMenuBoxShadow: 0px 1px 3px 0px rgba(0, 0, 0, 0.08);\n\n@dropdownBackground: #FFFFFF;\n@dropdownMenuDistance: 0em;\n@dropdownMenuBorderRadius: @borderRadius;\n\n@dropdownItemFontSize: @relativeMedium;\n@dropdownItemPadding: @relativeMini @relativeLarge;\n@dropdownItemBackground: transparent;\n@dropdownItemColor: @textColor;\n@dropdownItemTextTransform: none;\n@dropdownItemFontWeight: normal;\n@dropdownItemBoxShadow: none;\n@dropdownItemTransition: none;\n\n@dropdownItemIconFloat: none;\n@dropdownItemIconFontSize: @relativeMedium;\n@dropdownItemIconMargin: 0em 0.75em 0em 0em;\n\n@dropdownHoveredItemBackground: @transparentBlack;\n@dropdownHoveredItemColor: @selectedTextColor;\n\n/* Dropdown Variations */\n@dropdownVerticalMenuBoxShadow: 0 1px 3px 0px rgba(0, 0, 0, 0.08);\n@secondaryDropdownMenuDistance: @relative5px;\n@pointingDropdownMenuDistance: 0.75em;\n@invertedSelectionDropdownColor: @invertedTextColor;\n\n/*--------------\n     States\n---------------*/\n\n/* Hovered Item */\n@hoverItemBackground: @subtleTransparentBlack;\n@hoverItemTextColor: @selectedTextColor;\n\n/* Pressed Item */\n@pressedItemBackground: @subtleTransparentBlack;\n@pressedItemTextColor: @hoverItemTextColor;\n\n\n/* Active Item */\n@activeItemBackground: @transparentBlack;\n@activeItemTextColor: @selectedTextColor;\n@activeItemFontWeight: normal;\n@activeIconOpacity: 1;\n@activeItemBoxShadow: none;\n\n/* Active Hovered Item */\n@activeHoverItemBackground: @transparentBlack;\n@activeHoverItemColor: @selectedTextColor;\n\n/* Selected Dropdown */\n@dropdownSelectedItemBackground: @transparentBlack;\n@dropdownSelectedItemColor: @selectedTextColor;\n\n/* Active Dropdown */\n@dropdownActiveItemBackground: @subtleTransparentBlack;\n@dropdownActiveItemColor: @selectedTextColor;\n@dropdownActiveItemFontWeight: bold;\n\n/* Active Sub Menu */\n@subMenuActiveBackground: transparent;\n@subMenuActiveTextColor: @activeItemTextColor;\n@subMenuActiveFontWeight: bold;\n\n\n/*--------------\n     Types\n---------------*/\n\n/* Vertical */\n@verticalBoxShadow: @boxShadow;\n@verticalPointerWidth: 2px;\n@verticalBackground: #FFFFFF;\n@verticalItemBackground: none;\n@verticalDividerBackground: @dividerBackground;\n\n@verticalActiveBoxShadow: none;\n\n\n/* Secondary */\n@secondaryBackground: none;\n@secondaryMargin: 0em -@secondaryItemSpacing;\n@secondaryItemBackground: none;\n@secondaryItemSpacing: @relative5px;\n@secondaryItemMargin: 0em @secondaryItemSpacing;\n@secondaryItemVerticalPadding: @relativeMini;\n@secondaryItemHorizontalPadding: @relativeSmall;\n@secondaryItemPadding: @relativeMini @relativeSmall;\n@secondaryItemBorderRadius: @defaultBorderRadius;\n@secondaryItemTransition: color @defaultDuration @defaultEasing;\n@secondaryItemColor: @unselectedTextColor;\n\n@secondaryHoverItemBackground: @transparentBlack;\n@secondaryHoverItemColor: @selectedTextColor;\n\n@secondaryActiveItemBackground: @transparentBlack;\n@secondaryActiveItemColor: @selectedTextColor;\n@secondaryActiveHoverItemBackground: @transparentBlack;\n@secondaryActiveHoverItemColor: @selectedTextColor;\n\n@secondaryActiveHoveredItemBackground: @transparentBlack;\n@secondaryActiveHoveredItemColor: @selectedTextColor;\n\n@secondaryHeaderBackground: none transparent;\n@secondaryHeaderBorder: none;\n\n@secondaryItemVerticalSpacing: @secondaryItemSpacing;\n@secondaryVerticalItemMargin: 0em 0em @secondaryItemVerticalSpacing;\n@secondaryVerticalItemBorderRadius: @defaultBorderRadius;\n\n@secondaryMenuSubMenuMargin: 0em -@secondaryItemHorizontalPadding;\n@secondaryMenuSubMenuItemMargin: 0em;\n@secondarySubMenuHorizontalPadding: (@itemHorizontalPadding / @tinySize) + @subMenuIndent;\n@secondaryMenuSubMenuItemPadding: @relative7px @secondarySubMenuHorizontalPadding;\n\n/* Pointing */\n@secondaryPointingBorderWidth: 2px;\n@secondaryPointingBorderColor: @borderColor;\n@secondaryPointingItemVerticalPadding: @relativeTiny;\n@secondaryPointingItemHorizontalPadding: @relativeLarge;\n\n@secondaryPointingHoverTextColor: @textColor;\n\n@secondaryPointingActiveBorderColor: @black;\n@secondaryPointingActiveTextColor: @selectedTextColor;\n@secondaryPointingActiveFontWeight: bold;\n\n@secondaryPointingActiveDropdownBorderColor: transparent;\n\n@secondaryPointingActiveHoverBorderColor: @secondaryPointingActiveBorderColor;\n@secondaryPointingActiveHoverTextColor: @secondaryPointingActiveTextColor;\n\n@secondaryPointingHeaderColor: @darkTextColor;\n@secondaryVerticalPointingItemMargin: 0em -@secondaryPointingBorderWidth 0em 0em;\n\n\n/* Inverted Secondary */\n@secondaryInvertedColor: @invertedLightTextColor;\n\n@secondaryInvertedHoverBackground: @transparentWhite;\n@secondaryInvertedHoverColor: @invertedSelectedTextColor;\n\n@secondaryInvertedActiveBackground: @strongTransparentWhite;\n@secondaryInvertedActiveColor: @invertedSelectedTextColor;\n\n/* Inverted Pointing */\n@secondaryPointingInvertedBorderColor: @whiteBorderColor;\n@secondaryPointingInvertedItemTextColor: @invertedTextColor;\n@secondaryPointingInvertedItemHeaderColor: @white;\n@secondaryPointingInvertedItemHoverTextColor: @selectedTextColor;\n@secondaryPointingInvertedActiveBorderColor: @white;\n@secondaryPointingInvertedActiveColor: @invertedSelectedTextColor;\n\n\n/* Tiered */\n@tieredActiveItemBackground: #FCFCFC;\n@tieredActiveMenuBackground: #FCFCFC;\n\n@tieredSubMenuTextTransform: normal;\n@tieredSubMenuFontWeight: normal;\n\n@tieredSubMenuColor: @lightTextColor;\n\n@tieredSubMenuHoverBackground: none transparent;\n@tieredSubMenuHoverColor: @hoveredTextColor;\n\n@tieredSubMenuActiveBackground: none transparent;\n@tieredSubMenuActiveColor: @selectedTextColor;\n\n@tieredInvertedSubMenuBackground: rgba(0, 0, 0, 0.2);\n\n\n/* Icon */\n@iconMenuTextAlign: center;\n@iconMenuItemColor: @black;\n@iconMenuInvertedItemColor: @white;\n\n\n/* Tabular */\n@tabularBorderColor: @solidBorderColor;\n@tabularBackgroundColor: transparent;\n@tabularBackground: none @tabularBackgroundColor;\n@tabularBorderWidth: 1px;\n@tabularOppositeBorderWidth: @tabularBorderWidth + 1px;\n@tabularVerticalPadding: @itemVerticalPadding;\n@tabularHorizontalPadding: @relativeHuge;\n@tabularBorderRadius: @defaultBorderRadius;\n@tabularTextColor: @itemTextColor;\n\n@tabularHoveredTextColor: @hoveredTextColor;\n\n@tabularVerticalBackground: none @tabularBackgroundColor;\n\n@tabularFluidOffset: 1px;\n@tabularFluidWidth: ~\"calc(100% + \"(@tabularFluidOffset * 2)~\")\";\n\n@tabularActiveBackground: none @white;\n@tabularActiveColor: @selectedTextColor;\n@tabularActiveBoxShadow: none;\n@tabularActiveWeight: bold;\n\n\n\n/* Pagination */\n@paginationMinWidth: 3em;\n@paginationActiveBackground: @transparentBlack;\n@paginationActiveTextColor: @selectedTextColor;\n\n/* Labeled Icon */\n@labeledIconItemHorizontalPadding: @relativeMassive;\n@labeledIconSize: @relativeMassive;\n@labeledIconMinWidth: 6em;\n@labeledIconTextMargin: 0.5rem;\n\n\n/* Text */\n@textMenuItemSpacing: @relative7px;\n@textMenuMargin: @relativeMedium -(@textMenuItemSpacing);\n@textMenuItemColor: @mutedTextColor;\n@textMenuItemFontWeight: normal;\n@textMenuItemMargin: 0em 0em;\n@textMenuItemPadding: @relative5px @textMenuItemSpacing;\n@textMenuItemTransition: opacity @defaultDuration @defaultEasing;\n\n@textMenuSubMenuMargin: 0em;\n@textMenuSubMenuItemMargin: 0em;\n@textMenuSubMenuItemPadding: @relative7px 0em;\n\n@textMenuActiveItemFontWeight: normal;\n@textMenuActiveItemColor: @selectedTextColor;\n\n@textMenuHeaderSize: @relativeSmall;\n@textMenuHeaderColor: @darkTextColor;\n@textMenuHeaderFontWeight: bold;\n@textMenuHeaderTextTransform: uppercase;\n\n@textVerticalMenuMargin: @relativeMedium 0em;\n@textVerticalMenuHeaderMargin: @relative8px 0em @relative10px;\n@textVerticalMenuItemMargin: @relative8px 0em;\n\n@textVerticalMenuIconFloat: none;\n@textVerticalMenuIconMargin: @iconMargin;\n\n\n/*--------------\n   Variations\n---------------*/\n\n/* Inverted */\n@invertedBackground: @black;\n@invertedBoxShadow: none;\n@invertedBorder: 0px solid transparent;\n@invertedHeaderBackground: transparent;\n\n@invertedItemBackground: transparent;\n@invertedItemTextColor: @invertedTextColor;\n\n/* Inverted Sub Menu */\n@invertedSubMenuBackground: transparent;\n@invertedSubMenuColor: @invertedUnselectedTextColor;\n\n/* Inverted Hover */\n@invertedHoverBackground: @transparentWhite;\n@invertedHoverColor: @invertedSelectedTextColor;\n\n@invertedSubMenuHoverBackground: transparent;\n@invertedSubMenuHoverColor: @invertedSelectedTextColor;\n\n/* Pressed */\n@invertedMenuPressedBackground: @transparentWhite;\n@invertedMenuPressedColor: @invertedSelectedTextColor;\n\n/* Inverted Active */\n@invertedActiveBackground: @strongTransparentWhite;\n@invertedActiveColor: @invertedSelectedTextColor;\n@invertedArrowActiveColor: #3D3E3F;\n\n/* Inverted Active Hover  */\n@invertedActiveHoverBackground: @invertedActiveBackground;\n@invertedActiveHoverColor: @white;\n@invertedArrowActiveHoverColor: @invertedArrowActiveColor;\n\n@invertedSubMenuActiveBackground: transparent;\n@invertedSubMenuActiveColor: @white;\n\n/* Inverted Menu Divider */\n@invertedDividerBackground: rgba(255, 255, 255, 0.08);\n@invertedVerticalDividerBackground: @invertedDividerBackground;\n\n/* Inverted Colored */\n@invertedColoredDividerBackground: @dividerBackground;\n@invertedColoredActiveBackground: @strongTransparentBlack;\n\n/* Fixed */\n@fixedPrecedingGridMargin: 2.75rem;\n\n/* Floated */\n@floatedDistance: 0.5rem;\n\n/* Attached */\n@attachedTopOffset: 0px;\n@attachedBottomOffset: 0px;\n@attachedHorizontalOffset: -@borderWidth;\n@attachedWidth: ~\"calc(100% + \"-@attachedHorizontalOffset * 2~\")\";\n@attachedBoxShadow: none;\n@attachedBorder: @borderWidth solid @solidBorderColor;\n@attachedBottomBoxShadow:\n  @boxShadow,\n  @attachedBoxShadow\n;\n\n/* Resize large sizes */\n@mini: @11px;\n@tiny: @12px;\n@small: @13px;\n@large: @15px;\n@huge: @16px;\n@big: @17px;\n@massive: @18px;\n\n/* Sizes */\n@miniWidth: 9rem;\n@tinyWidth: 11rem;\n@smallWidth: 13rem;\n@mediumWidth: 15rem;\n@largeWidth: 18rem;\n@hugeWidth: 20rem;\n@bigWidth: 22rem;\n@massiveWidth: 25rem;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/message.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/message.variables",
    "content": "/*******************************\n            Message\n*******************************/\n\n// @textColor\n\n/*-------------------\n       Elements\n--------------------*/\n\n@verticalMargin: 1em;\n@verticalPadding: 1em;\n@horizontalPadding: 1.5em;\n@padding: @verticalPadding @horizontalPadding;\n@background: #F8F8F9;\n@lineHeightOffset: ((@lineHeight - 1em) / 2);\n\n@borderRadius: @defaultBorderRadius;\n@borderWidth: 1px;\n@borderShadow: 0px 0px 0px @borderWidth @strongBorderColor inset;\n@shadowShadow: 0px 0px 0px 0px rgba(0, 0, 0, 0);\n@boxShadow:\n  @borderShadow,\n  @shadowShadow\n;\n\n@transition:\n  opacity @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  background @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing\n;\n\n/* Header */\n@headerFontSize: @relativeLarge;\n@headerFontWeight: bold;\n@headerDisplay: block;\n@headerDistance: 0rem;\n@headerMargin: -@headerLineHeightOffset 0em @headerDistance 0em;\n@headerParagraphDistance: 0.25em;\n\n/* Paragraph */\n@messageTextOpacity: 0.85;\n@messageParagraphMargin: 0.75em;\n\n/* List */\n@listOpacity: 0.85;\n@listStylePosition: inside;\n@listMargin: 0.5em;\n@listItemIndent: 1em;\n@listItemMargin: 0.3em;\n\n/* Icon */\n@iconDistance: 0.6em;\n\n/* Close Icon */\n@closeTopDistance: @verticalPadding - @lineHeightOffset;\n@closeRightDistance: 0.5em;\n@closeOpacity: 0.7;\n@closeTransition: opacity @defaultDuration @defaultEasing;\n\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Icon Message */\n@iconSize: 3em;\n@iconOpacity: 0.8;\n@iconContentDistance: 0rem;\n@iconVerticalAlign: middle;\n\n/* Attached */\n@attachedXOffset: -1px;\n@attachedYOffset: -1px;\n@attachedBoxShadow: 0em 0em 0em @borderWidth @borderColor inset;\n@attachedBottomBoxShadow:\n  @attachedBoxShadow,\n  @subtleShadow\n;\n\n/* Floating */\n@floatingBoxShadow:\n  @borderShadow,\n  @floatingShadow\n;\n\n/* Colors */\n@redBoxShadow:\n  0px 0px 0px @borderWidth @redBorderColor inset,\n  @shadowShadow\n;\n@orangeBoxShadow:\n  0px 0px 0px @borderWidth @orangeBorderColor inset,\n  @shadowShadow\n;\n@yellowBoxShadow:\n  0px 0px 0px @borderWidth @yellowBorderColor inset,\n  @shadowShadow\n;\n@oliveBoxShadow:\n  0px 0px 0px @borderWidth @oliveBorderColor inset,\n  @shadowShadow\n;\n@greenBoxShadow:\n  0px 0px 0px @borderWidth @greenBorderColor inset,\n  @shadowShadow\n;\n@tealBoxShadow:\n  0px 0px 0px @borderWidth @tealBorderColor inset,\n  @shadowShadow\n;\n@blueBoxShadow:\n  0px 0px 0px @borderWidth @blueBorderColor inset,\n  @shadowShadow\n;\n@violetBoxShadow:\n  0px 0px 0px @borderWidth @violetBorderColor inset,\n  @shadowShadow\n;\n@purpleBoxShadow:\n  0px 0px 0px @borderWidth @purpleBorderColor inset,\n  @shadowShadow\n;\n@pinkBoxShadow:\n  0px 0px 0px @borderWidth @pinkBorderColor inset,\n  @shadowShadow\n;\n@brownBoxShadow:\n  0px 0px 0px @borderWidth @brownBorderColor inset,\n  @shadowShadow\n;\n\n/* Warning / Positive / Negative / Info */\n@positiveBoxShadow:\n  0px 0px 0px @borderWidth @positiveBorderColor inset,\n  @shadowShadow\n;\n@negativeBoxShadow:\n  0px 0px 0px @borderWidth @negativeBorderColor inset,\n  @shadowShadow\n;\n@infoBoxShadow:\n  0px 0px 0px @borderWidth @infoBorderColor inset,\n  @shadowShadow\n;\n@warningBoxShadow:\n  0px 0px 0px @borderWidth @warningBorderColor inset,\n  @shadowShadow\n;\n@errorBoxShadow:\n  0px 0px 0px @borderWidth @errorBorderColor inset,\n  @shadowShadow\n;\n@successBoxShadow:\n  0px 0px 0px @borderWidth @successBorderColor inset,\n  @shadowShadow\n;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/table.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/default/collections/table.variables",
    "content": "/*******************************\n             Table\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@verticalMargin: 1em;\n@horizontalMargin: 0em;\n@margin: @verticalMargin @horizontalMargin;\n@borderCollapse: separate;\n@borderSpacing: 0px;\n@borderRadius: @defaultBorderRadius;\n@transition:\n  background @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing\n;\n@background: @white;\n@color: @textColor;\n@borderWidth: 1px;\n@border: @borderWidth solid @borderColor;\n@boxShadow: none;\n@textAlign: left;\n\n/*--------------\n     Parts\n---------------*/\n\n/* Table Row */\n@rowBorder: 1px solid @internalBorderColor;\n\n/* Table Cell */\n@cellVerticalPadding: @relativeMini;\n@cellHorizontalPadding: @relativeMini;\n@cellVerticalAlign: inherit;\n@cellTextAlign: inherit;\n@cellBorder: 1px solid @internalBorderColor;\n\n/* Table Header */\n@headerBorder: 1px solid @internalBorderColor;\n@headerDivider: none;\n@headerBackground: @offWhite;\n@headerAlign: inherit;\n@headerVerticalAlign: inherit;\n@headerColor: @textColor;\n@headerVerticalPadding: @relativeSmall;\n@headerHorizontalPadding: @cellHorizontalPadding;\n@headerFontStyle: none;\n@headerFontWeight: bold;\n@headerTextTransform: none;\n@headerBoxShadow: none;\n\n/* Table Footer */\n@footerBoxShadow: none;\n@footerBorder: 1px solid @borderColor;\n@footerDivider: none;\n@footerBackground: @offWhite;\n@footerAlign: inherit;\n@footerVerticalAlign: middle;\n@footerColor: @textColor;\n@footerVerticalPadding: @cellVerticalPadding;\n@footerHorizontalPadding: @cellHorizontalPadding;\n@footerFontStyle: normal;\n@footerFontWeight: normal;\n@footerTextTransform: none;\n\n/* Responsive Size */\n@responsiveHeaderDisplay: block;\n@responsiveFooterDisplay: block;\n@responsiveRowVerticalPadding: 1em;\n@responsiveRowBoxShadow: 0px -1px 0px 0px rgba(0, 0, 0, 0.1) inset !important;\n@responsiveCellVerticalPadding: 0.25em;\n@responsiveCellHorizontalPadding: 0.75em;\n@responsiveCellBoxShadow: none !important;\n\n/*-------------------\n       Types\n--------------------*/\n\n/* Definition */\n@definitionPageBackground: @white;\n\n@definitionHeaderBackground: transparent;\n@definitionHeaderColor: @unselectedTextColor;\n@definitionHeaderFontWeight: normal;\n\n@definitionFooterBackground: @definitionHeaderBackground;\n@definitionFooterColor: @definitionHeaderColor;\n@definitionFooterFontWeight: @definitionHeaderFontWeight;\n\n@definitionColumnBackground: @subtleTransparentBlack;\n@definitionColumnFontWeight: bold;\n@definitionColumnColor: @selectedTextColor;\n@definitionColumnFontSize: @relativeMedium;\n@definitionColumnTextTransform: '';\n@definitionColumnBoxShadow: '';\n@definitionColumnTextAlign: '';\n@definitionColumnHorizontalPadding: '';\n\n\n/*--------------\n    Couplings\n---------------*/\n\n@iconVerticalAlign: baseline;\n\n/*--------------\n     States\n---------------*/\n\n@stateMarkerWidth: 0px;\n\n/* Positive */\n@positiveColor: @positiveTextColor;\n@positiveBoxShadow: @stateMarkerWidth 0px 0px @positiveBorderColor inset;\n@positiveBackgroundHover: darken(@positiveBackgroundColor, 3);\n@positiveColorHover: darken(@positiveColor, 3);\n\n/* Negative */\n@negativeColor: @negativeTextColor;\n@negativeBoxShadow: @stateMarkerWidth 0px 0px @negativeBorderColor inset;\n@negativeBackgroundHover: darken(@negativeBackgroundColor, 3);\n@negativeColorHover: darken(@negativeColor, 3);\n\n/* Error */\n@errorColor: @errorTextColor;\n@errorBoxShadow: @stateMarkerWidth 0px 0px @errorBorderColor inset;\n@errorBackgroundHover: darken(@errorBackgroundColor, 3);\n@errorColorHover: darken(@errorColor, 3);\n\n/* Warning */\n@warningColor: @warningTextColor;\n@warningBoxShadow: @stateMarkerWidth 0px 0px @warningBorderColor inset;\n@warningBackgroundHover: darken(@warningBackgroundColor, 3);\n@warningColorHover: darken(@warningColor, 3);\n\n/* Active */\n@activeColor: @textColor;\n@activeBackgroundColor: #E0E0E0;\n@activeBoxShadow: @stateMarkerWidth 0px 0px @activeColor inset;\n\n@activeBackgroundHover: #EFEFEF;\n@activeColorHover: @selectedTextColor;\n\n/*--------------\n     Types\n---------------*/\n\n/* Attached */\n@attachedTopOffset: 0px;\n@attachedBottomOffset: 0px;\n@attachedHorizontalOffset: -@borderWidth;\n@attachedWidth: ~\"calc(100% + \"-@attachedHorizontalOffset * 2~\")\";\n@attachedBoxShadow: none;\n@attachedBorder: @borderWidth solid @solidBorderColor;\n@attachedBottomBoxShadow:\n  @boxShadow,\n  @attachedBoxShadow\n;\n\n/* Striped */\n@stripedBackground: rgba(0, 0, 50, 0.02);\n@invertedStripedBackground: rgba(255, 255, 255, 0.05);\n\n/* Selectable */\n@selectableBackground: @transparentBlack;\n@selectableTextColor: @selectedTextColor;\n@selectableInvertedBackground: @transparentWhite;\n@selectableInvertedTextColor: @invertedSelectedTextColor;\n\n/* Sortable */\n@sortableBackground: '';\n@sortableColor: @textColor;\n\n@sortableBorder: 1px solid @borderColor;\n@sortableIconWidth: auto;\n@sortableIconDistance: 0.5em;\n@sortableIconOpacity: 0.8;\n@sortableIconFont: 'Icons';\n@sortableIconAscending: '\\f0d8';\n@sortableIconDescending: '\\f0d7';\n@sortableDisabledColor: @disabledTextColor;\n\n@sortableHoverBackground: @transparentBlack;\n@sortableHoverColor: @hoveredTextColor;\n\n@sortableActiveBackground: @transparentBlack;\n@sortableActiveColor: @selectedTextColor;\n\n@sortableActiveHoverBackground: @transparentBlack;\n@sortableActiveHoverColor: @selectedTextColor;\n\n@sortableInvertedBorderColor: transparent;\n@sortableInvertedHoverBackground: @transparentWhite @subtleGradient;\n@sortableInvertedHoverColor: @invertedHoveredTextColor;\n@sortableInvertedActiveBackground: @strongTransparentWhite @subtleGradient;\n@sortableInvertedActiveColor: @invertedSelectedTextColor;\n\n/* Colors */\n@coloredBorderSize: 0.2em;\n@coloredBorderRadius: 0em 0em @borderRadius @borderRadius;\n\n/* Inverted */\n@invertedBackground: #333333;\n@invertedBorder: none;\n@invertedCellBorderColor: @whiteBorderColor;\n@invertedCellColor: @invertedTextColor;\n\n@invertedHeaderBackground: @veryStrongTransparentBlack;\n@invertedHeaderColor: @invertedTextColor;\n@invertedHeaderBorderColor: @invertedCellBorderColor;\n\n@invertedDefinitionColumnBackground: @subtleTransparentWhite;\n@invertedDefinitionColumnColor: @invertedSelectedTextColor;\n@invertedDefinitionColumnFontWeight: bold;\n\n/* Basic */\n@basicTableBackground: transparent;\n@basicTableBorder: @borderWidth solid @borderColor;\n@basicBoxShadow: none;\n\n@basicTableHeaderBackground: transparent;\n@basicTableCellBackground: transparent;\n@basicTableHeaderDivider: none;\n@basicTableCellBorder: 1px solid rgba(0, 0, 0, 0.1);\n@basicTableCellPadding: '';\n@basicTableStripedBackground: @transparentBlack;\n\n/* Padded */\n@paddedVerticalPadding: 1em;\n@paddedHorizontalPadding: 1em;\n@veryPaddedVerticalPadding: 1.5em;\n@veryPaddedHorizontalPadding: 1.5em;\n\n/* Compact */\n@compactVerticalPadding: 0.5em;\n@compactHorizontalPadding: 0.7em;\n@veryCompactVerticalPadding: 0.4em;\n@veryCompactHorizontalPadding: 0.6em;\n\n\n/* Sizes */\n@small: 0.9em;\n@medium: 1em;\n@large: 1.1em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/button.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/button.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n/* Button */\n@verticalMargin: 0em;\n@horizontalMargin: 0.25em;\n@backgroundColor: #E0E1E2;\n@backgroundImage: none;\n@background: @backgroundColor @backgroundImage;\n@lineHeight: 1em;\n\n/* Button defaults to using same height as input globally */\n@verticalPadding: @inputVerticalPadding;\n@horizontalPadding: 1.5em;\n\n/* Text */\n@textTransform: none;\n@tapColor: transparent;\n@fontFamily: @pageFont;\n@fontWeight: bold;\n@textColor: rgba(0, 0, 0, 0.6);\n@textShadow: none;\n@invertedTextShadow: @textShadow;\n@borderRadius: @defaultBorderRadius;\n@verticalAlign: baseline;\n\n/* Internal Shadow */\n@shadowDistance: 0em;\n@shadowOffset: (@shadowDistance / 2);\n@shadowBoxShadow: 0px -@shadowDistance 0px 0px @borderColor inset;\n\n/* Box Shadow */\n@borderBoxShadowColor: transparent;\n@borderBoxShadowWidth: 1px;\n@borderBoxShadow: 0px 0px 0px @borderBoxShadowWidth @borderBoxShadowColor inset;\n@boxShadow:\n  @borderBoxShadow,\n  @shadowBoxShadow\n;\n\n/* Icon */\n@iconHeight: @relativeTiny;\n@iconOpacity: 0.8;\n@iconDistance: @relative6px;\n@iconColor: '';\n@iconTransition: opacity @defaultDuration @defaultEasing;\n@iconVerticalAlign: '';\n\n@iconMargin: 0em @iconDistance 0em -(@iconDistance / 2);\n@rightIconMargin: 0em -(@iconDistance / 2) 0em @iconDistance;\n\n/* Loader */\n@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);\n\n@transition:\n  opacity @defaultDuration @defaultEasing,\n  background-color @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing,\n  background @defaultDuration @defaultEasing\n;\n/*\n@willChange: box-shadow, transform, opacity, color, background;\n*/\n@willChange: '';\n\n/*-------------------\n        Group\n--------------------*/\n\n@groupBoxShadow: none;\n@groupButtonBoxShadow: @boxShadow;\n@verticalBoxShadow: none;\n@groupButtonOffset: 0px 0px 0px 0px;\n@verticalGroupOffset: 0px 0px 0px 0px;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Hovered */\n@hoverBackgroundColor: #CACBCD;\n@hoverBackgroundImage: @backgroundImage;\n@hoverBoxShadow: @boxShadow;\n@hoverColor: @hoveredTextColor;\n@iconHoverOpacity: 0.85;\n\n/* Focused */\n@focusBackgroundColor: @hoverBackgroundColor;\n@focusBackgroundImage: '';\n@focusBoxShadow: '';\n@focusColor: @hoveredTextColor;\n@iconFocusOpacity: 0.85;\n\n/* Disabled */\n@disabledBackgroundImage: none;\n@disabledBoxShadow: none;\n\n/* Pressed Down */\n@downBackgroundColor: #BABBBC;\n@downBackgroundImage: '';\n@downPressedShadow: none;\n@downBoxShadow:\n  @borderBoxShadow,\n  @downPressedShadow\n;\n@downColor: @pressedTextColor;\n\n/* Active */\n@activeBackgroundColor: #C0C1C2;\n@activeBackgroundImage: none;\n@activeColor: @selectedTextColor;\n@activeBoxShadow: @borderBoxShadow;\n\n/* Active + Hovered */\n@activeHoverBackgroundColor: @activeBackgroundColor;\n@activeHoverBackgroundImage: none;\n@activeHoverColor: @activeColor;\n@activeHoverBoxShadow: @activeBoxShadow;\n\n/* Loading */\n@loadingOpacity: 1;\n@loadingPointerEvents: auto;\n@loadingTransition:\n  all 0s linear,\n  opacity @defaultDuration @defaultEasing\n;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Or */\n@orText: 'or';\n\n@orGap: 0.3em;\n@orHeight: (@verticalPadding * 2) + 1em;\n@orZIndex: 3;\n\n@orCircleDistanceToEdge: (@verticalPadding);\n@orCircleSize: @orHeight - @orCircleDistanceToEdge;\n@orLineHeight: (@orCircleSize);\n@orBoxShadow: @borderBoxShadow;\n\n@orVerticalOffset: -(@orCircleSize / 2);\n@orHorizontalOffset: -(@orCircleSize / 2);\n\n@orBackgroundColor: @white;\n@orTextShadow: @invertedTextShadow;\n@orTextStyle: normal;\n@orTextWeight: bold;\n@orTextColor: @lightTextColor;\n\n\n@orSpacerHeight: @verticalPadding;\n@orSpacerColor: transparent;\n\n/* Icon */\n@iconButtonOpacity: 0.9;\n\n/* Labeled */\n@labeledLabelFontSize: @medium;\n@labeledLabelAlign: center;\n@labeledLabelPadding: '';\n@labeledLabelFontSize: @relativeMedium;\n@labeledLabelBorderColor: @borderColor;\n@labeledLabelBorderOffset: -@borderBoxShadowWidth;\n@labeledTagLabelSize: 1.85em; /* hypotenuse of triangle */\n@labeledIconMargin: 0em;\n\n/* Labeled Icon */\n@labeledIconWidth: 1em + (@verticalPadding * 2);\n@labeledIconBackgroundColor: rgba(0, 0, 0, 0.05);\n@labeledIconPadding: (@horizontalPadding + @labeledIconWidth);\n@labeledIconBorder: transparent;\n@labeledIconColor: '';\n\n@labeledIconLeftShadow: -1px 0px 0px 0px @labeledIconBorder inset;\n@labeledIconRightShadow: 1px 0px 0px 0px @labeledIconBorder inset;\n\n\n/* Inverted */\n@invertedBorderSize: 2px;\n@invertedTextColor: @white;\n@invertedTextHoverColor: @hoverColor;\n@invertedGroupButtonOffset: 0px 0px 0px -(@invertedBorderSize);\n@invertedVerticalGroupButtonOffset: 0px 0px -(@invertedBorderSize) 0px;\n\n/* Basic */\n@basicBorderRadius: @borderRadius;\n@basicBorderSize: 1px;\n@basicTextColor: @textColor;\n@basicColoredBorderSize: 1px;\n\n@basicBackground: transparent none;\n@basicFontWeight: normal;\n@basicBorder: 1px solid @borderColor;\n@basicBoxShadow: 0px 0px 0px @basicBorderSize @borderColor inset;\n@basicLoadingColor: @offWhite;\n@basicTextTransform: none;\n\n/* Basic Hover */\n@basicHoverBackground: #FFFFFF;\n@basicHoverTextColor: @hoveredTextColor;\n@basicHoverBoxShadow:\n  0px 0px 0px @basicBorderSize @selectedBorderColor inset,\n  0px 0px 0px 0px @borderColor inset\n;\n/* Basic Focus */\n@basicFocusBackground: @basicHoverBackground;\n@basicFocusTextColor: @basicHoverTextColor;\n@basicFocusBoxShadow: @basicHoverBoxShadow;\n\n/* Basic Down */\n@basicDownBackground: #F8F8F8;\n@basicDownTextColor: @pressedTextColor;\n@basicDownBoxShadow:\n  0px 0px 0px @basicBorderSize rgba(0, 0, 0, 0.15) inset,\n  0px 1px 4px 0px @borderColor inset\n;\n/* Basic Active */\n@basicActiveBackground: @transparentBlack;\n@basicActiveBoxShadow: '';\n@basicActiveTextColor: @selectedTextColor;\n\n/* Basic Inverted */\n@basicInvertedBackground: transparent;\n@basicInvertedFocusBackground: transparent;\n@basicInvertedDownBackground: @transparentWhite;\n@basicInvertedActiveBackground: @transparentWhite;\n\n@basicInvertedBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.5) inset;\n@basicInvertedHoverBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 1) inset;\n@basicInvertedFocusBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 1) inset;\n@basicInvertedDownBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.9) inset;\n@basicInvertedActiveBoxShadow: 0px 0px 0px @invertedBorderSize rgba(255, 255, 255, 0.7) inset;\n\n@basicInvertedColor: @darkWhite;\n@basicInvertedHoverColor: @darkWhiteHover;\n@basicInvertedDownColor: @darkWhiteActive;\n@basicInvertedActiveColor: @invertedTextColor;\n\n\n/* Basic Group */\n@basicGroupBorder: @basicBorderSize solid @borderColor;\n@basicGroupBoxShadow: none;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Colors */\n@coloredBackgroundImage: none;\n@coloredBoxShadow: @shadowBoxShadow;\n\n/* Colored */\n@brownTextColor: @invertedTextColor;\n@brownTextShadow: @invertedTextShadow;\n@redTextColor: @invertedTextColor;\n@redTextShadow: @invertedTextShadow;\n@orangeTextColor: @invertedTextColor;\n@orangeTextShadow: @invertedTextShadow;\n@greenTextColor: @invertedTextColor;\n@greenTextShadow: @invertedTextShadow;\n@blueTextColor: @invertedTextColor;\n@blueTextShadow: @invertedTextShadow;\n@violetTextColor: @invertedTextColor;\n@violetTextShadow: @invertedTextShadow;\n@purpleTextColor: @invertedTextColor;\n@purpleTextShadow: @invertedTextShadow;\n@pinkTextColor: @invertedTextColor;\n@pinkTextShadow: @invertedTextShadow;\n@blackTextColor: @invertedTextColor;\n@blackTextShadow: @invertedTextShadow;\n@oliveTextColor: @invertedTextColor;\n@oliveTextShadow: @invertedTextShadow;\n@yellowTextColor: @invertedTextColor;\n@yellowTextShadow: @invertedTextShadow;\n@tealTextColor: @invertedTextColor;\n@tealTextShadow: @invertedTextShadow;\n@greyTextColor: @invertedTextColor;\n@greyTextShadow: @invertedTextShadow;\n\n/* Inverted */\n@lightBrownTextColor: @invertedTextColor;\n@lightBrownTextShadow: @invertedTextShadow;\n@lightRedTextColor: @invertedTextColor;\n@lightRedTextShadow: @invertedTextShadow;\n@lightOrangeTextColor: @invertedTextColor;\n@lightOrangeTextShadow: @invertedTextShadow;\n@lightGreenTextColor: @invertedTextColor;\n@lightGreenTextShadow: @invertedTextShadow;\n@lightBlueTextColor: @invertedTextColor;\n@lightBlueTextShadow: @invertedTextShadow;\n@lightVioletTextColor: @invertedTextColor;\n@lightVioletTextShadow: @invertedTextShadow;\n@lightPurpleTextColor: @invertedTextColor;\n@lightPurpleTextShadow: @invertedTextShadow;\n@lightPinkTextColor: @invertedTextColor;\n@lightPinkTextShadow: @invertedTextShadow;\n@lightBlackTextColor: @invertedTextColor;\n@lightBlackTextShadow: @invertedTextShadow;\n@lightOliveTextColor: @textColor;\n@lightOliveTextShadow: @textShadow;\n@lightYellowTextColor: @textColor;\n@lightYellowTextShadow: @textShadow;\n@lightTealTextColor: @textColor;\n@lightTealTextShadow: @textShadow;\n@lightGreyTextColor: @textColor;\n@lightGreyTextShadow: @textShadow;\n\n\n/* Ordinality */\n@primaryBackgroundImage: @coloredBackgroundImage;\n@primaryTextColor: @invertedTextColor;\n@primaryTextShadow: @invertedTextShadow;\n@primaryBoxShadow: @coloredBoxShadow;\n\n@secondaryBackgroundImage: @coloredBackgroundImage;\n@secondaryTextColor: @invertedTextColor;\n@secondaryTextShadow: @invertedTextShadow;\n@secondaryBoxShadow: @coloredBoxShadow;\n\n@positiveBackgroundImage: @coloredBackgroundImage;\n@positiveTextColor: @invertedTextColor;\n@positiveTextShadow: @invertedTextShadow;\n@positiveBoxShadow: @coloredBoxShadow;\n\n@negativeBackgroundImage: @coloredBackgroundImage;\n@negativeTextColor: @invertedTextColor;\n@negativeTextShadow: @invertedTextShadow;\n@negativeBoxShadow: @coloredBoxShadow;\n\n/* Compact */\n@compactVerticalPadding: (@verticalPadding * 0.75);\n@compactHorizontalPadding: (@horizontalPadding * 0.75);\n\n/* Attached */\n@attachedOffset: -1px;\n@attachedBoxShadow: 0px 0px 0px 1px @borderColor;\n@attachedHorizontalPadding: 0.75em;\n@attachedZIndex: 2;\n\n/* Floated */\n@floatedMargin: 0.25em;\n\n/* Animated */\n@animatedVerticalAlign: middle;\n@animatedZIndex: 1;\n@animationDuration: 0.3s;\n@animationEasing: ease;\n@fadeScaleHigh: 1.5;\n@fadeScaleLow: 0.75;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/container.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/container.variables",
    "content": "/*******************************\n            Container\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n/* Minimum Gutter is used to determine  the maximum container width for a given device */\n\n@maxWidth: 100%;\n\n/* Devices */\n@mobileMinimumGutter: 0em;\n@mobileWidth: auto;\n@mobileGutter: 1em;\n\n@tabletMinimumGutter: (@emSize  * 1);\n@tabletWidth: @tabletBreakpoint - (@tabletMinimumGutter * 2) - @scrollbarWidth;\n@tabletGutter: auto;\n\n@computerMinimumGutter: (@emSize  * 1.5);\n@computerWidth: @computerBreakpoint - (@computerMinimumGutter * 2) - @scrollbarWidth;\n@computerGutter: auto;\n\n@largeMonitorMinimumGutter: (@emSize  * 2);\n@largeMonitorWidth: @largeMonitorBreakpoint - (@largeMonitorMinimumGutter * 2) - @scrollbarWidth;\n@largeMonitorGutter: auto;\n\n/* Coupling (Add Negative Margin to container size) */\n@gridGutterWidth: 2rem;\n@relaxedGridGutterWidth: 3rem;\n@veryRelaxedGridGutterWidth: 5rem;\n\n@mobileGridWidth: @mobileWidth;\n@tabletGridWidth: ~\"calc(\"@tabletWidth~\" + \"@gridGutterWidth~\")\";\n@computerGridWidth: ~\"calc(\"@computerWidth~\" + \"@gridGutterWidth~\")\";\n@largeMonitorGridWidth: ~\"calc(\"@largeMonitorWidth~\" + \"@gridGutterWidth~\")\";\n\n@mobileRelaxedGridWidth: @mobileWidth;\n@tabletRelaxedGridWidth: ~\"calc(\"@tabletWidth~\" + \"@relaxedGridGutterWidth~\")\";\n@computerRelaxedGridWidth: ~\"calc(\"@computerWidth~\" + \"@relaxedGridGutterWidth~\")\";\n@largeMonitorRelaxedGridWidth: ~\"calc(\"@largeMonitorWidth~\" + \"@relaxedGridGutterWidth~\")\";\n\n@mobileVeryRelaxedGridWidth: @mobileWidth;\n@tabletVeryRelaxedGridWidth: ~\"calc(\"@tabletWidth~\" + \"@veryRelaxedGridGutterWidth~\")\";\n@computerVeryRelaxedGridWidth: ~\"calc(\"@computerWidth~\" + \"@veryRelaxedGridGutterWidth~\")\";\n@largeMonitorVeryRelaxedGridWidth: ~\"calc(\"@largeMonitorWidth~\" + \"@veryRelaxedGridGutterWidth~\")\";\n\n/*-------------------\n       Types\n--------------------*/\n\n/* Text */\n@textWidth: 700px;\n@textFontFamily: @pageFont;\n@textLineHeight: 1.5;\n@textSize: @large;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/divider.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n\n.ui.horizontal.divider:before,\n.ui.horizontal.divider:after {\n  background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n}\n\n@media only screen and (max-width : (@tabletBreakpoint - 1px)) {\n  .ui.stackable.grid .ui.vertical.divider:before,\n  .ui.grid .stackable.row .ui.vertical.divider:before,\n  .ui.stackable.grid .ui.vertical.divider:after,\n  .ui.grid .stackable.row .ui.vertical.divider:after {\n    background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABaAAAAACCAYAAACuTHuKAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAyFpVFh0WE1MOmNvbS5hZG9iZS54bXAAAAAAADw/eHBhY2tldCBiZWdpbj0i77u/IiBpZD0iVzVNME1wQ2VoaUh6cmVTek5UY3prYzlkIj8+IDx4OnhtcG1ldGEgeG1sbnM6eD0iYWRvYmU6bnM6bWV0YS8iIHg6eG1wdGs9IkFkb2JlIFhNUCBDb3JlIDUuNS1jMDE0IDc5LjE1MTQ4MSwgMjAxMy8wMy8xMy0xMjowOToxNSAgICAgICAgIj4gPHJkZjpSREYgeG1sbnM6cmRmPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5LzAyLzIyLXJkZi1zeW50YXgtbnMjIj4gPHJkZjpEZXNjcmlwdGlvbiByZGY6YWJvdXQ9IiIgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIiB4bWxuczp4bXBNTT0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL21tLyIgeG1sbnM6c3RSZWY9Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9zVHlwZS9SZXNvdXJjZVJlZiMiIHhtcDpDcmVhdG9yVG9vbD0iQWRvYmUgUGhvdG9zaG9wIENDIChXaW5kb3dzKSIgeG1wTU06SW5zdGFuY2VJRD0ieG1wLmlpZDo1OThBRDY4OUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyIgeG1wTU06RG9jdW1lbnRJRD0ieG1wLmRpZDo1OThBRDY4QUNDMTYxMUU0OUE3NUVGOEJDMzMzMjE2NyI+IDx4bXBNTTpEZXJpdmVkRnJvbSBzdFJlZjppbnN0YW5jZUlEPSJ4bXAuaWlkOjU5OEFENjg3Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3IiBzdFJlZjpkb2N1bWVudElEPSJ4bXAuZGlkOjU5OEFENjg4Q0MxNjExRTQ5QTc1RUY4QkMzMzMyMTY3Ii8+IDwvcmRmOkRlc2NyaXB0aW9uPiA8L3JkZjpSREY+IDwveDp4bXBtZXRhPiA8P3hwYWNrZXQgZW5kPSJyIj8+VU513gAAADVJREFUeNrs0DENACAQBDBIWLGBJQby/mUcJn5sJXQmOQMAAAAAAJqt+2prAAAAAACg2xdgANk6BEVuJgyMAAAAAElFTkSuQmCC');\n  }\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/divider.variables",
    "content": "/*******************************\n            Divider\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@margin: 1rem 0rem;\n\n@highlightWidth: 1px;\n@highlightColor: @whiteBorderColor;\n\n@shadowWidth: 1px;\n@shadowColor: @borderColor;\n\n/* Text */\n@letterSpacing: 0.05em;\n@fontWeight: bold;\n@color: @darkTextColor;\n@textTransform: uppercase;\n\n/*-------------------\n       Coupling\n--------------------*/\n\n/* Icon */\n@dividerIconSize: 1rem;\n@dividerIconMargin: 0rem;\n\n\n/*******************************\n         Variations\n*******************************/\n\n/* Horizontal / Vertical */\n@horizontalMargin: '';\n@horizontalDividerMargin: 1em;\n@horizontalRulerOffset: ~\"calc(-50% - \"(@horizontalDividerMargin)~\")\";\n\n@verticalDividerMargin: 1rem;\n@verticalDividerHeight: ~\"calc(100% - \"(@verticalDividerMargin)~\")\";\n\n/* Inverted */\n@invertedTextColor: @white;\n@invertedHighlightColor: rgba(255, 255, 255, 0.15);\n@invertedShadowColor: @borderColor;\n\n/* Section */\n@sectionMargin: 2rem;\n\n/* Sizes */\n@medium: 1rem;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/flag.overrides",
    "content": "/* Flag Sprite Based On http://www.famfamfam.com/lab/icons/flags/ */\n\n/*******************************\n         Theme Overrides\n*******************************/\n\ni.flag.ad:before,\ni.flag.andorra:before {\n  background-position: 0px 0px;\n}\ni.flag.ae:before,\ni.flag.united.arab.emirates:before,\ni.flag.uae:before {\n  background-position: 0px -26px;\n}\ni.flag.af:before,\ni.flag.afghanistan:before {\n  background-position: 0px -52px;\n}\ni.flag.ag:before,\ni.flag.antigua:before {\n  background-position: 0px -78px;\n}\ni.flag.ai:before,\ni.flag.anguilla:before {\n  background-position: 0px -104px;\n}\ni.flag.al:before,\ni.flag.albania:before {\n  background-position: 0px -130px;\n}\ni.flag.am:before,\ni.flag.armenia:before {\n  background-position: 0px -156px;\n}\ni.flag.an:before,\ni.flag.netherlands.antilles:before {\n  background-position: 0px -182px;\n}\ni.flag.ao:before,\ni.flag.angola:before {\n  background-position: 0px -208px;\n}\ni.flag.ar:before,\ni.flag.argentina:before {\n  background-position: 0px -234px;\n}\ni.flag.as:before,\ni.flag.american.samoa:before {\n  background-position: 0px -260px;\n}\ni.flag.at:before,\ni.flag.austria:before {\n  background-position: 0px -286px;\n}\ni.flag.au:before,\ni.flag.australia:before {\n  background-position: 0px -312px;\n}\ni.flag.aw:before,\ni.flag.aruba:before {\n  background-position: 0px -338px;\n}\ni.flag.ax:before,\ni.flag.aland.islands:before {\n  background-position: 0px -364px;\n}\ni.flag.az:before,\ni.flag.azerbaijan:before {\n  background-position: 0px -390px;\n}\ni.flag.ba:before,\ni.flag.bosnia:before {\n  background-position: 0px -416px;\n}\ni.flag.bb:before,\ni.flag.barbados:before {\n  background-position: 0px -442px;\n}\ni.flag.bd:before,\ni.flag.bangladesh:before {\n  background-position: 0px -468px;\n}\ni.flag.be:before,\ni.flag.belgium:before {\n  background-position: 0px -494px;\n}\ni.flag.bf:before,\ni.flag.burkina.faso:before {\n  background-position: 0px -520px;\n}\ni.flag.bg:before,\ni.flag.bulgaria:before {\n  background-position: 0px -546px;\n}\ni.flag.bh:before,\ni.flag.bahrain:before {\n  background-position: 0px -572px;\n}\ni.flag.bi:before,\ni.flag.burundi:before {\n  background-position: 0px -598px;\n}\ni.flag.bj:before,\ni.flag.benin:before {\n  background-position: 0px -624px;\n}\ni.flag.bm:before,\ni.flag.bermuda:before {\n  background-position: 0px -650px;\n}\ni.flag.bn:before,\ni.flag.brunei:before {\n  background-position: 0px -676px;\n}\ni.flag.bo:before,\ni.flag.bolivia:before {\n  background-position: 0px -702px;\n}\ni.flag.br:before,\ni.flag.brazil:before {\n  background-position: 0px -728px;\n}\ni.flag.bs:before,\ni.flag.bahamas:before {\n  background-position: 0px -754px;\n}\ni.flag.bt:before,\ni.flag.bhutan:before {\n  background-position: 0px -780px;\n}\ni.flag.bv:before,\ni.flag.bouvet.island:before {\n  background-position: 0px -806px;\n}\ni.flag.bw:before,\ni.flag.botswana:before {\n  background-position: 0px -832px;\n}\ni.flag.by:before,\ni.flag.belarus:before {\n  background-position: 0px -858px;\n}\ni.flag.bz:before,\ni.flag.belize:before {\n  background-position: 0px -884px;\n}\ni.flag.ca:before,\ni.flag.canada:before {\n  background-position: 0px -910px;\n}\ni.flag.cc:before,\ni.flag.cocos.islands:before {\n  background-position: 0px -962px;\n}\ni.flag.cd:before,\ni.flag.congo:before {\n  background-position: 0px -988px;\n}\ni.flag.cf:before,\ni.flag.central.african.republic:before {\n  background-position: 0px -1014px;\n}\ni.flag.cg:before,\ni.flag.congo.brazzaville:before {\n  background-position: 0px -1040px;\n}\ni.flag.ch:before,\ni.flag.switzerland:before {\n  background-position: 0px -1066px;\n}\ni.flag.ci:before,\ni.flag.cote.divoire:before {\n  background-position: 0px -1092px;\n}\ni.flag.ck:before,\ni.flag.cook.islands:before {\n  background-position: 0px -1118px;\n}\ni.flag.cl:before,\ni.flag.chile:before {\n  background-position: 0px -1144px;\n}\ni.flag.cm:before,\ni.flag.cameroon:before {\n  background-position: 0px -1170px;\n}\ni.flag.cn:before,\ni.flag.china:before {\n  background-position: 0px -1196px;\n}\ni.flag.co:before,\ni.flag.colombia:before {\n  background-position: 0px -1222px;\n}\ni.flag.cr:before,\ni.flag.costa.rica:before {\n  background-position: 0px -1248px;\n}\ni.flag.cs:before,\ni.flag.serbia:before {\n  background-position: 0px -1274px;\n}\ni.flag.cu:before,\ni.flag.cuba:before {\n  background-position: 0px -1300px;\n}\ni.flag.cv:before,\ni.flag.cape.verde:before {\n  background-position: 0px -1326px;\n}\ni.flag.cx:before,\ni.flag.christmas.island:before {\n  background-position: 0px -1352px;\n}\ni.flag.cy:before,\ni.flag.cyprus:before {\n  background-position: 0px -1378px;\n}\ni.flag.cz:before,\ni.flag.czech.republic:before {\n  background-position: 0px -1404px;\n}\ni.flag.de:before,\ni.flag.germany:before {\n  background-position: 0px -1430px;\n}\ni.flag.dj:before,\ni.flag.djibouti:before {\n  background-position: 0px -1456px;\n}\ni.flag.dk:before,\ni.flag.denmark:before {\n  background-position: 0px -1482px;\n}\ni.flag.dm:before,\ni.flag.dominica:before {\n  background-position: 0px -1508px;\n}\ni.flag.do:before,\ni.flag.dominican.republic:before {\n  background-position: 0px -1534px;\n}\ni.flag.dz:before,\ni.flag.algeria:before {\n  background-position: 0px -1560px;\n}\ni.flag.ec:before,\ni.flag.ecuador:before {\n  background-position: 0px -1586px;\n}\ni.flag.ee:before,\ni.flag.estonia:before {\n  background-position: 0px -1612px;\n}\ni.flag.eg:before,\ni.flag.egypt:before {\n  background-position: 0px -1638px;\n}\ni.flag.eh:before,\ni.flag.western.sahara:before {\n  background-position: 0px -1664px;\n}\ni.flag.er:before,\ni.flag.eritrea:before {\n  background-position: 0px -1716px;\n}\ni.flag.es:before,\ni.flag.spain:before {\n  background-position: 0px -1742px;\n}\ni.flag.et:before,\ni.flag.ethiopia:before {\n  background-position: 0px -1768px;\n}\ni.flag.eu:before,\ni.flag.european.union:before {\n  background-position: 0px -1794px;\n}\ni.flag.fi:before,\ni.flag.finland:before {\n  background-position: 0px -1846px;\n}\ni.flag.fj:before,\ni.flag.fiji:before {\n  background-position: 0px -1872px;\n}\ni.flag.fk:before,\ni.flag.falkland.islands:before {\n  background-position: 0px -1898px;\n}\ni.flag.fm:before,\ni.flag.micronesia:before {\n  background-position: 0px -1924px;\n}\ni.flag.fo:before,\ni.flag.faroe.islands:before {\n  background-position: 0px -1950px;\n}\ni.flag.fr:before,\ni.flag.france:before {\n  background-position: 0px -1976px;\n}\ni.flag.ga:before,\ni.flag.gabon:before {\n  background-position: -36px 0px;\n}\ni.flag.gb:before,\ni.flag.united.kingdom:before {\n  background-position: -36px -26px;\n}\ni.flag.gd:before,\ni.flag.grenada:before {\n  background-position: -36px -52px;\n}\ni.flag.ge:before,\ni.flag.georgia:before {\n  background-position: -36px -78px;\n}\ni.flag.gf:before,\ni.flag.french.guiana:before {\n  background-position: -36px -104px;\n}\ni.flag.gh:before,\ni.flag.ghana:before {\n  background-position: -36px -130px;\n}\ni.flag.gi:before,\ni.flag.gibraltar:before {\n  background-position: -36px -156px;\n}\ni.flag.gl:before,\ni.flag.greenland:before {\n  background-position: -36px -182px;\n}\ni.flag.gm:before,\ni.flag.gambia:before {\n  background-position: -36px -208px;\n}\ni.flag.gn:before,\ni.flag.guinea:before {\n  background-position: -36px -234px;\n}\ni.flag.gp:before,\ni.flag.guadeloupe:before {\n  background-position: -36px -260px;\n}\ni.flag.gq:before,\ni.flag.equatorial.guinea:before {\n  background-position: -36px -286px;\n}\ni.flag.gr:before,\ni.flag.greece:before {\n  background-position: -36px -312px;\n}\ni.flag.gs:before,\ni.flag.sandwich.islands:before {\n  background-position: -36px -338px;\n}\ni.flag.gt:before,\ni.flag.guatemala:before {\n  background-position: -36px -364px;\n}\ni.flag.gu:before,\ni.flag.guam:before {\n  background-position: -36px -390px;\n}\ni.flag.gw:before,\ni.flag.guinea-bissau:before {\n  background-position: -36px -416px;\n}\ni.flag.gy:before,\ni.flag.guyana:before {\n  background-position: -36px -442px;\n}\ni.flag.hk:before,\ni.flag.hong.kong:before {\n  background-position: -36px -468px;\n}\ni.flag.hm:before,\ni.flag.heard.island:before {\n  background-position: -36px -494px;\n}\ni.flag.hn:before,\ni.flag.honduras:before {\n  background-position: -36px -520px;\n}\ni.flag.hr:before,\ni.flag.croatia:before {\n  background-position: -36px -546px;\n}\ni.flag.ht:before,\ni.flag.haiti:before {\n  background-position: -36px -572px;\n}\ni.flag.hu:before,\ni.flag.hungary:before {\n  background-position: -36px -598px;\n}\ni.flag.id:before,\ni.flag.indonesia:before {\n  background-position: -36px -624px;\n}\ni.flag.ie:before,\ni.flag.ireland:before {\n  background-position: -36px -650px;\n}\ni.flag.il:before,\ni.flag.israel:before {\n  background-position: -36px -676px;\n}\ni.flag.in:before,\ni.flag.india:before {\n  background-position: -36px -702px;\n}\ni.flag.io:before,\ni.flag.indian.ocean.territory:before {\n  background-position: -36px -728px;\n}\ni.flag.iq:before,\ni.flag.iraq:before {\n  background-position: -36px -754px;\n}\ni.flag.ir:before,\ni.flag.iran:before {\n  background-position: -36px -780px;\n}\ni.flag.is:before,\ni.flag.iceland:before {\n  background-position: -36px -806px;\n}\ni.flag.it:before,\ni.flag.italy:before {\n  background-position: -36px -832px;\n}\ni.flag.jm:before,\ni.flag.jamaica:before {\n  background-position: -36px -858px;\n}\ni.flag.jo:before,\ni.flag.jordan:before {\n  background-position: -36px -884px;\n}\ni.flag.jp:before,\ni.flag.japan:before {\n  background-position: -36px -910px;\n}\ni.flag.ke:before,\ni.flag.kenya:before {\n  background-position: -36px -936px;\n}\ni.flag.kg:before,\ni.flag.kyrgyzstan:before {\n  background-position: -36px -962px;\n}\ni.flag.kh:before,\ni.flag.cambodia:before {\n  background-position: -36px -988px;\n}\ni.flag.ki:before,\ni.flag.kiribati:before {\n  background-position: -36px -1014px;\n}\ni.flag.km:before,\ni.flag.comoros:before {\n  background-position: -36px -1040px;\n}\ni.flag.kn:before,\ni.flag.saint.kitts.and.nevis:before {\n  background-position: -36px -1066px;\n}\ni.flag.kp:before,\ni.flag.north.korea:before {\n  background-position: -36px -1092px;\n}\ni.flag.kr:before,\ni.flag.south.korea:before {\n  background-position: -36px -1118px;\n}\ni.flag.kw:before,\ni.flag.kuwait:before {\n  background-position: -36px -1144px;\n}\ni.flag.ky:before,\ni.flag.cayman.islands:before {\n  background-position: -36px -1170px;\n}\ni.flag.kz:before,\ni.flag.kazakhstan:before {\n  background-position: -36px -1196px;\n}\ni.flag.la:before,\ni.flag.laos:before {\n  background-position: -36px -1222px;\n}\ni.flag.lb:before,\ni.flag.lebanon:before {\n  background-position: -36px -1248px;\n}\ni.flag.lc:before,\ni.flag.saint.lucia:before {\n  background-position: -36px -1274px;\n}\ni.flag.li:before,\ni.flag.liechtenstein:before {\n  background-position: -36px -1300px;\n}\ni.flag.lk:before,\ni.flag.sri.lanka:before {\n  background-position: -36px -1326px;\n}\ni.flag.lr:before,\ni.flag.liberia:before {\n  background-position: -36px -1352px;\n}\ni.flag.ls:before,\ni.flag.lesotho:before {\n  background-position: -36px -1378px;\n}\ni.flag.lt:before,\ni.flag.lithuania:before {\n  background-position: -36px -1404px;\n}\ni.flag.lu:before,\ni.flag.luxembourg:before {\n  background-position: -36px -1430px;\n}\ni.flag.lv:before,\ni.flag.latvia:before {\n  background-position: -36px -1456px;\n}\ni.flag.ly:before,\ni.flag.libya:before {\n  background-position: -36px -1482px;\n}\ni.flag.ma:before,\ni.flag.morocco:before {\n  background-position: -36px -1508px;\n}\ni.flag.mc:before,\ni.flag.monaco:before {\n  background-position: -36px -1534px;\n}\ni.flag.md:before,\ni.flag.moldova:before {\n  background-position: -36px -1560px;\n}\ni.flag.me:before,\ni.flag.montenegro:before {\n  background-position: -36px -1586px;\n}\ni.flag.mg:before,\ni.flag.madagascar:before {\n  background-position: -36px -1613px;\n}\ni.flag.mh:before,\ni.flag.marshall.islands:before {\n  background-position: -36px -1639px;\n}\ni.flag.mk:before,\ni.flag.macedonia:before {\n  background-position: -36px -1665px;\n}\ni.flag.ml:before,\ni.flag.mali:before {\n  background-position: -36px -1691px;\n}\ni.flag.mm:before,\ni.flag.myanmar:before,\ni.flag.burma:before {\n  background-position: -73px -1821px;\n}\ni.flag.mn:before,\ni.flag.mongolia:before {\n  background-position: -36px -1743px;\n}\ni.flag.mo:before,\ni.flag.macau:before {\n  background-position: -36px -1769px;\n}\ni.flag.mp:before,\ni.flag.northern.mariana.islands:before {\n  background-position: -36px -1795px;\n}\ni.flag.mq:before,\ni.flag.martinique:before {\n  background-position: -36px -1821px;\n}\ni.flag.mr:before,\ni.flag.mauritania:before {\n  background-position: -36px -1847px;\n}\ni.flag.ms:before,\ni.flag.montserrat:before {\n  background-position: -36px -1873px;\n}\ni.flag.mt:before,\ni.flag.malta:before {\n  background-position: -36px -1899px;\n}\ni.flag.mu:before,\ni.flag.mauritius:before {\n  background-position: -36px -1925px;\n}\ni.flag.mv:before,\ni.flag.maldives:before {\n  background-position: -36px -1951px;\n}\ni.flag.mw:before,\ni.flag.malawi:before {\n  background-position: -36px -1977px;\n}\ni.flag.mx:before,\ni.flag.mexico:before {\n  background-position: -72px 0px;\n}\ni.flag.my:before,\ni.flag.malaysia:before {\n  background-position: -72px -26px;\n}\ni.flag.mz:before,\ni.flag.mozambique:before {\n  background-position: -72px -52px;\n}\ni.flag.na:before,\ni.flag.namibia:before {\n  background-position: -72px -78px;\n}\ni.flag.nc:before,\ni.flag.new.caledonia:before {\n  background-position: -72px -104px;\n}\ni.flag.ne:before,\ni.flag.niger:before {\n  background-position: -72px -130px;\n}\ni.flag.nf:before,\ni.flag.norfolk.island:before {\n  background-position: -72px -156px;\n}\ni.flag.ng:before,\ni.flag.nigeria:before {\n  background-position: -72px -182px;\n}\ni.flag.ni:before,\ni.flag.nicaragua:before {\n  background-position: -72px -208px;\n}\ni.flag.nl:before,\ni.flag.netherlands:before {\n  background-position: -72px -234px;\n}\ni.flag.no:before,\ni.flag.norway:before {\n  background-position: -72px -260px;\n}\ni.flag.np:before,\ni.flag.nepal:before {\n  background-position: -72px -286px;\n}\ni.flag.nr:before,\ni.flag.nauru:before {\n  background-position: -72px -312px;\n}\ni.flag.nu:before,\ni.flag.niue:before {\n  background-position: -72px -338px;\n}\ni.flag.nz:before,\ni.flag.new.zealand:before {\n  background-position: -72px -364px;\n}\ni.flag.om:before,\ni.flag.oman:before {\n  background-position: -72px -390px;\n}\ni.flag.pa:before,\ni.flag.panama:before {\n  background-position: -72px -416px;\n}\ni.flag.pe:before,\ni.flag.peru:before {\n  background-position: -72px -442px;\n}\ni.flag.pf:before,\ni.flag.french.polynesia:before {\n  background-position: -72px -468px;\n}\ni.flag.pg:before,\ni.flag.new.guinea:before {\n  background-position: -72px -494px;\n}\ni.flag.ph:before,\ni.flag.philippines:before {\n  background-position: -72px -520px;\n}\ni.flag.pk:before,\ni.flag.pakistan:before {\n  background-position: -72px -546px;\n}\ni.flag.pl:before,\ni.flag.poland:before {\n  background-position: -72px -572px;\n}\ni.flag.pm:before,\ni.flag.saint.pierre:before {\n  background-position: -72px -598px;\n}\ni.flag.pn:before,\ni.flag.pitcairn.islands:before {\n  background-position: -72px -624px;\n}\ni.flag.pr:before,\ni.flag.puerto.rico:before {\n  background-position: -72px -650px;\n}\ni.flag.ps:before,\ni.flag.palestine:before {\n  background-position: -72px -676px;\n}\ni.flag.pt:before,\ni.flag.portugal:before {\n  background-position: -72px -702px;\n}\ni.flag.pw:before,\ni.flag.palau:before {\n  background-position: -72px -728px;\n}\ni.flag.py:before,\ni.flag.paraguay:before {\n  background-position: -72px -754px;\n}\ni.flag.qa:before,\ni.flag.qatar:before {\n  background-position: -72px -780px;\n}\ni.flag.re:before,\ni.flag.reunion:before {\n  background-position: -72px -806px;\n}\ni.flag.ro:before,\ni.flag.romania:before {\n  background-position: -72px -832px;\n}\ni.flag.rs:before,\ni.flag.serbia:before {\n  background-position: -72px -858px;\n}\ni.flag.ru:before,\ni.flag.russia:before {\n  background-position: -72px -884px;\n}\ni.flag.rw:before,\ni.flag.rwanda:before {\n  background-position: -72px -910px;\n}\ni.flag.sa:before,\ni.flag.saudi.arabia:before {\n  background-position: -72px -936px;\n}\ni.flag.sb:before,\ni.flag.solomon.islands:before {\n  background-position: -72px -962px;\n}\ni.flag.sc:before,\ni.flag.seychelles:before {\n  background-position: -72px -988px;\n}\ni.flag.gb.sct:before,\ni.flag.scotland:before {\n  background-position: -72px -1014px;\n}\ni.flag.sd:before,\ni.flag.sudan:before {\n  background-position: -72px -1040px;\n}\ni.flag.se:before,\ni.flag.sweden:before {\n  background-position: -72px -1066px;\n}\ni.flag.sg:before,\ni.flag.singapore:before {\n  background-position: -72px -1092px;\n}\ni.flag.sh:before,\ni.flag.saint.helena:before {\n  background-position: -72px -1118px;\n}\ni.flag.si:before,\ni.flag.slovenia:before {\n  background-position: -72px -1144px;\n}\ni.flag.sj:before,\ni.flag.svalbard:before,\ni.flag.jan.mayen:before {\n  background-position: -72px -1170px;\n}\ni.flag.sk:before,\ni.flag.slovakia:before {\n  background-position: -72px -1196px;\n}\ni.flag.sl:before,\ni.flag.sierra.leone:before {\n  background-position: -72px -1222px;\n}\ni.flag.sm:before,\ni.flag.san.marino:before {\n  background-position: -72px -1248px;\n}\ni.flag.sn:before,\ni.flag.senegal:before {\n  background-position: -72px -1274px;\n}\ni.flag.so:before,\ni.flag.somalia:before {\n  background-position: -72px -1300px;\n}\ni.flag.sr:before,\ni.flag.suriname:before {\n  background-position: -72px -1326px;\n}\ni.flag.st:before,\ni.flag.sao.tome:before {\n  background-position: -72px -1352px;\n}\ni.flag.sv:before,\ni.flag.el.salvador:before {\n  background-position: -72px -1378px;\n}\ni.flag.sy:before,\ni.flag.syria:before {\n  background-position: -72px -1404px;\n}\ni.flag.sz:before,\ni.flag.swaziland:before {\n  background-position: -72px -1430px;\n}\ni.flag.tc:before,\ni.flag.caicos.islands:before {\n  background-position: -72px -1456px;\n}\ni.flag.td:before,\ni.flag.chad:before {\n  background-position: -72px -1482px;\n}\ni.flag.tf:before,\ni.flag.french.territories:before {\n  background-position: -72px -1508px;\n}\ni.flag.tg:before,\ni.flag.togo:before {\n  background-position: -72px -1534px;\n}\ni.flag.th:before,\ni.flag.thailand:before {\n  background-position: -72px -1560px;\n}\ni.flag.tj:before,\ni.flag.tajikistan:before {\n  background-position: -72px -1586px;\n}\ni.flag.tk:before,\ni.flag.tokelau:before {\n  background-position: -72px -1612px;\n}\ni.flag.tl:before,\ni.flag.timorleste:before {\n  background-position: -72px -1638px;\n}\ni.flag.tm:before,\ni.flag.turkmenistan:before {\n  background-position: -72px -1664px;\n}\ni.flag.tn:before,\ni.flag.tunisia:before {\n  background-position: -72px -1690px;\n}\ni.flag.to:before,\ni.flag.tonga:before {\n  background-position: -72px -1716px;\n}\ni.flag.tr:before,\ni.flag.turkey:before {\n  background-position: -72px -1742px;\n}\ni.flag.tt:before,\ni.flag.trinidad:before {\n  background-position: -72px -1768px;\n}\ni.flag.tv:before,\ni.flag.tuvalu:before {\n  background-position: -72px -1794px;\n}\ni.flag.tw:before,\ni.flag.taiwan:before {\n  background-position: -72px -1820px;\n}\ni.flag.tz:before,\ni.flag.tanzania:before {\n  background-position: -72px -1846px;\n}\ni.flag.ua:before,\ni.flag.ukraine:before {\n  background-position: -72px -1872px;\n}\ni.flag.ug:before,\ni.flag.uganda:before {\n  background-position: -72px -1898px;\n}\ni.flag.um:before,\ni.flag.us.minor.islands:before {\n  background-position: -72px -1924px;\n}\ni.flag.us:before,\ni.flag.america:before,\ni.flag.united.states:before {\n  background-position: -72px -1950px;\n}\ni.flag.uy:before,\ni.flag.uruguay:before {\n  background-position: -72px -1976px;\n}\ni.flag.uz:before,\ni.flag.uzbekistan:before {\n  background-position: -108px 0px;\n}\ni.flag.va:before,\ni.flag.vatican.city:before {\n  background-position: -108px -26px;\n}\ni.flag.vc:before,\ni.flag.saint.vincent:before {\n  background-position: -108px -52px;\n}\ni.flag.ve:before,\ni.flag.venezuela:before {\n  background-position: -108px -78px;\n}\ni.flag.vg:before,\ni.flag.british.virgin.islands:before {\n  background-position: -108px -104px;\n}\ni.flag.vi:before,\ni.flag.us.virgin.islands:before {\n  background-position: -108px -130px;\n}\ni.flag.vn:before,\ni.flag.vietnam:before {\n  background-position: -108px -156px;\n}\ni.flag.vu:before,\ni.flag.vanuatu:before {\n  background-position: -108px -182px;\n}\ni.flag.gb.wls:before,\ni.flag.wales:before {\n  background-position: -108px -208px;\n}\ni.flag.wf:before,\ni.flag.wallis.and.futuna:before {\n  background-position: -108px -234px;\n}\ni.flag.ws:before,\ni.flag.samoa:before {\n  background-position: -108px -260px;\n}\ni.flag.ye:before,\ni.flag.yemen:before {\n  background-position: -108px -286px;\n}\ni.flag.yt:before,\ni.flag.mayotte:before {\n  background-position: -108px -312px;\n}\ni.flag.za:before,\ni.flag.south.africa:before {\n  background-position: -108px -338px;\n}\ni.flag.zm:before,\ni.flag.zambia:before {\n  background-position: -108px -364px;\n}\ni.flag.zw:before,\ni.flag.zimbabwe:before {\n  background-position: -108px -390px;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/flag.variables",
    "content": "/*******************************\n            Flag\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@spritePath: \"@{imagePath}/flags.png\";\n@width: 16px;\n@height: 11px;\n@verticalAlign: baseline;\n@margin: 0.5em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/header.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/header.variables",
    "content": "/*******************************\n            Header\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@textTransform: none;\n@fontFamily: @headerFont;\n@fontWeight: @headerFontWeight;\n@lineHeight: @headerLineHeight;\n@lineHeightOffset: @headerLineHeightOffset;\n\n@topMargin: @headerTopMargin;\n@bottomMargin: @headerBottomMargin;\n@margin: @topMargin 0em @bottomMargin;\n\n@firstMargin: -@lineHeightOffset;\n@lastMargin: 0em;\n@horizontalPadding: 0em;\n@verticalPadding: 0em;\n\n/* Sub Heading */\n@subHeadingDistance: @2px;\n@subHeadingFontSize: @relativeTiny;\n@subHeadingFontWeight: bold;\n@subHeadingTextTransform: uppercase;\n@subHeadingColor: '';\n\n@smallSubHeadingSize: @relativeMini;\n@largeSubHeadingSize: @relativeSmall;\n@hugeSubHeadingSize: @relativeMedium;\n\n/* Sub Header */\n@subHeaderMargin: 0em;\n@subHeaderLineHeight: 1.2em;\n@subHeaderColor: @mutedTextColor;\n\n/* Icon */\n@iconOpacity: 1;\n@iconSize: 1.5em;\n@iconOffset: 0em;\n@iconMargin: 0.75rem;\n@iconAlignment: middle;\n\n/* Image */\n@imageWidth: 2.5em;\n@imageHeight: auto;\n@imageOffset: @lineHeightOffset;\n@imageMargin: @iconMargin;\n@imageAlignment: middle;\n\n/* Label */\n@labelSize: '';\n@labelDistance: 0.5rem;\n@labelVerticalAlign: middle;\n\n/* Content */\n@contentAlignment: top;\n@contentIconAlignment: middle;\n@contentImageAlignment: middle;\n\n/* Paragraph after Header */\n@nextParagraphDistance: 0em;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Sizing */\n@hugeFontSize   : unit(@h1, em);\n@largeFontSize  : unit(@h2, em);\n@mediumFontSize : unit(@h3, em);\n@smallFontSize  : unit(@h4, em);\n@tinyFontSize   : unit(@h5, em);\n\n/* Sub Header */\n@h1SubHeaderFontSize: @large;\n@h2SubHeaderFontSize: @large;\n@h3SubHeaderFontSize: @medium;\n@h4SubHeaderFontSize: @medium;\n@h5SubHeaderFontSize: @small;\n\n@hugeSubHeaderFontSize  : @h1SubHeaderFontSize;\n@largeSubHeaderFontSize : @h2SubHeaderFontSize;\n@subHeaderFontSize      : @h3SubHeaderFontSize;\n@smallSubHeaderFontSize : @h4SubHeaderFontSize;\n@tinySubHeaderFontSize  : @h5SubHeaderFontSize;\n\n/* Icon Header */\n@iconHeaderSize: 3em;\n@iconHeaderOpacity: 1;\n@iconHeaderMargin: 0.5rem;\n@circularHeaderIconSize: 2em;\n@squareHeaderIconSize: 2em;\n\n/* No Line Height Offset */\n@iconHeaderTopMargin: 2rem;\n@iconHeaderBottomMargin: @bottomMargin;\n@iconHeaderFirstMargin: 0em;\n\n/* Divided */\n@dividedBorderWidth: 1px;\n@dividedBorder: @dividedBorderWidth solid @borderColor;\n@dividedColoredBorderWidth: 2px;\n\n@dividedBorderPadding: @3px;\n@dividedSubHeaderPadding: @3px;\n@dividedIconPadding: 0em;\n\n/* Block */\n@blockBackground: @darkWhite;\n@blockBoxShadow: none;\n@blockBorderWidth: 1px;\n@blockBorder: @blockBorderWidth solid @solidBorderColor;\n@blockHorizontalPadding: @medium;\n@blockVerticalPadding: @mini;\n@blockBorderRadius: @defaultBorderRadius;\n\n@tinyBlock: @tiny;\n@smallBlock: @small;\n@mediumBlock: @medium;\n@largeBlock: @large;\n@hugeBlock: @huge;\n\n/* Attached */\n@attachedOffset: -1px;\n@attachedBoxShadow: none;\n@attachedBorder: 1px solid @solidBorderColor;\n@attachedVerticalPadding: @blockVerticalPadding;\n@attachedHorizontalPadding: @blockHorizontalPadding;\n@attachedBackground: @white;\n@attachedBorderRadius: @blockBorderRadius;\n\n@tinyAttachedSize: @relativeTiny;\n@smallAttachedSize: @relativeSmall;\n@mediumAttachedSize: @relativeMedium;\n@largeAttachedSize: @relativeLarge;\n@bigAttachedSize: @relativeBig;\n@hugeAttachedSize: @relativeHuge;\n\n/* Inverted */\n@invertedColor: @white;\n@invertedSubHeaderColor: @invertedMutedTextColor;\n@invertedDividedBorderColor: @whiteBorderColor;\n@invertedBlockBackground: @lightBlack @subtleGradient;\n@invertedAttachedBackground: @invertedBlockBackground;\n\n/* Floated */\n@floatedMargin: 0.5em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/icon.overrides",
    "content": "/*\n * Font Awesome 4.7.0 by @davegandy - http://fontawesome.io - @fontawesome\n * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)\n */\n\n/*******************************\n\nSemantic-UI integration of font-awesome :\n\n///class names are separated\ni.icon.circle => i.icon.circle\ni.icon.circle-o => i.icon.circle.outline\n\n//abbreviation are replaced by full letters:\ni.icon.ellipsis-h => i.icon.ellipsis.horizontal\ni.icon.ellipsis-v => i.icon.ellipsis.vertical\n.alpha => .i.icon.alphabet\n.asc => .i.icon.ascending\n.desc => .i.icon.descending\n.alt =>.alternate\n\nASCII order is conserved for easier maintenance.\n\nIcons that only have one style 'outline', 'square' etc do not require this class\nfor instance `lemon icon` not `lemon outline icon` since there is only one lemon\n\n*******************************/\n\n/*******************************\n            Icons\n*******************************/\n\n/* Web Content */\ni.icon.search:before { content: \"\\f002\"; }\ni.icon.mail.outline:before { content: \"\\f003\"; }\ni.icon.signal:before { content: \"\\f012\"; }\ni.icon.setting:before { content: \"\\f013\"; }\ni.icon.home:before { content: \"\\f015\"; }\ni.icon.inbox:before { content: \"\\f01c\"; }\ni.icon.browser:before { content: \"\\f022\"; }\ni.icon.tag:before { content: \"\\f02b\"; }\ni.icon.tags:before { content: \"\\f02c\"; }\ni.icon.image:before { content: \"\\f03e\"; }\ni.icon.calendar:before { content: \"\\f073\"; }\ni.icon.comment:before { content: \"\\f075\"; }\ni.icon.shop:before { content: \"\\f07a\"; }\ni.icon.comments:before { content: \"\\f086\"; }\ni.icon.external:before { content: \"\\f08e\"; }\ni.icon.privacy:before { content: \"\\f084\"; }\ni.icon.settings:before { content: \"\\f085\"; }\ni.icon.comments:before { content: \"\\f086\"; }\ni.icon.external:before { content: \"\\f08e\"; }\ni.icon.trophy:before { content: \"\\f091\"; }\ni.icon.payment:before { content: \"\\f09d\"; }\ni.icon.feed:before { content: \"\\f09e\"; }\ni.icon.alarm.outline:before { content: \"\\f0a2\"; }\ni.icon.tasks:before { content: \"\\f0ae\"; }\ni.icon.cloud:before { content: \"\\f0c2\"; }\ni.icon.lab:before { content: \"\\f0c3\"; }\ni.icon.mail:before { content: \"\\f0e0\"; }\ni.icon.dashboard:before { content: \"\\f0e4\"; }\ni.icon.comment.outline:before { content: \"\\f0e5\"; }\ni.icon.comments.outline:before { content: \"\\f0e6\"; }\ni.icon.sitemap:before { content: \"\\f0e8\"; }\ni.icon.idea:before { content: \"\\f0eb\"; }\ni.icon.alarm:before { content: \"\\f0f3\"; }\ni.icon.terminal:before { content: \"\\f120\"; }\ni.icon.code:before { content: \"\\f121\"; }\ni.icon.protect:before { content: \"\\f132\"; }\ni.icon.calendar.outline:before { content: \"\\f133\"; }\ni.icon.ticket:before { content: \"\\f145\"; }\ni.icon.external.square:before { content: \"\\f14c\"; }\ni.icon.bug:before { content: \"\\f188\"; }\ni.icon.mail.square:before { content: \"\\f199\"; }\ni.icon.history:before { content: \"\\f1da\"; }\ni.icon.options:before { content: \"\\f1de\"; }\ni.icon.text.telephone:before { content: \"\\f1e4\"; }\ni.icon.find:before { content: \"\\f1e5\"; }\ni.icon.alarm.mute:before { content: \"\\f1f6\"; }\ni.icon.alarm.mute.outline:before { content: \"\\f1f7\"; }\ni.icon.copyright:before { content: \"\\f1f9\"; }\ni.icon.at:before { content: \"\\f1fa\"; }\ni.icon.eyedropper:before { content: \"\\f1fb\"; }\ni.icon.paint.brush:before { content: \"\\f1fc\"; }\ni.icon.heartbeat:before { content: \"\\f21e\"; }\ni.icon.mouse.pointer:before { content: \"\\f245\"; }\ni.icon.hourglass.empty:before { content: \"\\f250\"; }\ni.icon.hourglass.start:before { content: \"\\f251\"; }\ni.icon.hourglass.half:before { content: \"\\f252\"; }\ni.icon.hourglass.end:before { content: \"\\f253\"; }\ni.icon.hourglass.full:before { content: \"\\f254\"; }\ni.icon.hand.pointer:before { content: \"\\f25a\"; }\ni.icon.trademark:before { content: \"\\f25c\"; }\ni.icon.registered:before { content: \"\\f25d\"; }\ni.icon.creative.commons:before { content: \"\\f25e\"; }\ni.icon.add.to.calendar:before { content: \"\\f271\"; }\ni.icon.remove.from.calendar:before { content: \"\\f272\"; }\ni.icon.delete.calendar:before { content: \"\\f273\"; }\ni.icon.checked.calendar:before { content: \"\\f274\"; }\ni.icon.industry:before { content: \"\\f275\"; }\ni.icon.shopping.bag:before { content: \"\\f290\"; }\ni.icon.shopping.basket:before { content: \"\\f291\"; }\ni.icon.hashtag:before { content: \"\\f292\"; }\ni.icon.percent:before { content: \"\\f295\"; }\ni.icon.handshake:before { content: \"\\f2b5\"; }\ni.icon.open.envelope:before { content: \"\\f2b6\"; }\ni.icon.open.envelope.outline:before { content: \"\\f2b7\"; }\ni.icon.address.book:before { content: \"\\f2b9\"; }\ni.icon.address.book.outline:before { content: \"\\f2ba\"; }\ni.icon.address.card:before { content: \"\\f2bb\"; }\ni.icon.address.card.outline:before { content: \"\\f2bc\"; }\ni.icon.id.badge:before { content: \"\\f2c1\"; }\ni.icon.id.card:before { content: \"\\f2c2\"; }\ni.icon.id.card.outline:before { content: \"\\f2c3\"; }\ni.icon.podcast:before { content: \"\\f2ce\"; }\ni.icon.window.maximize:before { content: \"\\f2d0\"; }\ni.icon.window.minimize:before { content: \"\\f2d1\"; }\ni.icon.window.restore:before { content: \"\\f2d2\"; }\ni.icon.window.close:before { content: \"\\f2d3\"; }\ni.icon.window.close.outline:before { content: \"\\f2d4\"; }\n\n/* User Actions */\ni.icon.wait:before { content: \"\\f017\"; }\ni.icon.download:before { content: \"\\f019\"; }\ni.icon.repeat:before { content: \"\\f01e\"; }\ni.icon.refresh:before { content: \"\\f021\"; }\ni.icon.lock:before { content: \"\\f023\"; }\ni.icon.bookmark:before { content: \"\\f02e\"; }\ni.icon.print:before { content: \"\\f02f\"; }\ni.icon.write:before { content: \"\\f040\"; }\ni.icon.adjust:before { content: \"\\f042\"; }\ni.icon.theme:before { content: \"\\f043\"; }\ni.icon.edit:before { content: \"\\f044\"; }\ni.icon.external.share:before { content: \"\\f045\"; }\ni.icon.ban:before { content: \"\\f05e\"; }\ni.icon.mail.forward:before { content: \"\\f064\"; }\ni.icon.share:before { content: \"\\f064\"; }\ni.icon.expand:before { content: \"\\f065\"; }\ni.icon.compress:before { content: \"\\f066\"; }\ni.icon.unhide:before { content: \"\\f06e\"; }\ni.icon.hide:before { content: \"\\f070\"; }\ni.icon.random:before { content: \"\\f074\"; }\ni.icon.retweet:before { content: \"\\f079\"; }\ni.icon.sign.out:before { content: \"\\f08b\"; }\ni.icon.pin:before { content: \"\\f08d\"; }\ni.icon.sign.in:before { content: \"\\f090\"; }\ni.icon.upload:before { content: \"\\f093\"; }\ni.icon.call:before { content: \"\\f095\"; }\ni.icon.remove.bookmark:before { content: \"\\f097\"; }\ni.icon.call.square:before { content: \"\\f098\"; }\ni.icon.unlock:before { content: \"\\f09c\"; }\ni.icon.configure:before { content: \"\\f0ad\"; }\ni.icon.filter:before { content: \"\\f0b0\"; }\ni.icon.wizard:before { content: \"\\f0d0\"; }\ni.icon.undo:before { content: \"\\f0e2\"; }\ni.icon.exchange:before { content: \"\\f0ec\"; }\ni.icon.cloud.download:before { content: \"\\f0ed\"; }\ni.icon.cloud.upload:before { content: \"\\f0ee\"; }\ni.icon.reply:before { content: \"\\f112\"; }\ni.icon.reply.all:before { content: \"\\f122\"; }\ni.icon.erase:before { content: \"\\f12d\"; }\ni.icon.unlock.alternate:before { content: \"\\f13e\"; }\ni.icon.write.square:before { content: \"\\f14b\"; }\ni.icon.share.square:before { content: \"\\f14d\"; }\ni.icon.archive:before { content: \"\\f187\"; }\ni.icon.translate:before { content: \"\\f1ab\"; }\ni.icon.recycle:before { content: \"\\f1b8\"; }\ni.icon.send:before { content: \"\\f1d8\"; }\ni.icon.send.outline:before { content: \"\\f1d9\"; }\ni.icon.share.alternate:before { content: \"\\f1e0\"; }\ni.icon.share.alternate.square:before { content: \"\\f1e1\"; }\ni.icon.add.to.cart:before { content: \"\\f217\"; }\ni.icon.in.cart:before { content: \"\\f218\"; }\ni.icon.add.user:before { content: \"\\f234\"; }\ni.icon.remove.user:before { content: \"\\f235\"; }\ni.icon.object.group:before { content: \"\\f247\"; }\ni.icon.object.ungroup:before { content: \"\\f248\"; }\ni.icon.clone:before { content: \"\\f24d\"; }\ni.icon.talk:before { content: \"\\f27a\"; }\ni.icon.talk.outline:before { content: \"\\f27b\"; }\n\n/* Messages */\ni.icon.help.circle:before { content: \"\\f059\"; }\ni.icon.info.circle:before { content: \"\\f05a\"; }\ni.icon.warning.circle:before { content: \"\\f06a\"; }\ni.icon.warning.sign:before { content: \"\\f071\"; }\ni.icon.announcement:before { content: \"\\f0a1\"; }\ni.icon.help:before { content: \"\\f128\"; }\ni.icon.info:before { content: \"\\f129\"; }\ni.icon.warning:before { content: \"\\f12a\"; }\ni.icon.birthday:before { content: \"\\f1fd\"; }\ni.icon.help.circle.outline:before { content: \"\\f29c\"; }\n\n/* Users */\ni.icon.user:before { content: \"\\f007\"; }\ni.icon.users:before { content: \"\\f0c0\"; }\ni.icon.doctor:before { content: \"\\f0f0\"; }\ni.icon.handicap:before { content: \"\\f193\"; }\ni.icon.student:before { content: \"\\f19d\"; }\ni.icon.child:before { content: \"\\f1ae\"; }\ni.icon.spy:before { content: \"\\f21b\"; }\ni.icon.user.circle:before { content: \"\\f2bd\"; }\ni.icon.user.circle.outline:before { content: \"\\f2be\"; }\ni.icon.user.outline:before { content: \"\\f2c0\"; }\n\n/* Gender & Sexuality */\ni.icon.female:before { content: \"\\f182\"; }\ni.icon.male:before { content: \"\\f183\"; }\ni.icon.woman:before { content: \"\\f221\"; }\ni.icon.man:before { content: \"\\f222\"; }\ni.icon.non.binary.transgender:before { content: \"\\f223\"; }\ni.icon.intergender:before { content: \"\\f224\"; }\ni.icon.transgender:before { content: \"\\f225\"; }\ni.icon.lesbian:before { content: \"\\f226\"; }\ni.icon.gay:before { content: \"\\f227\"; }\ni.icon.heterosexual:before { content: \"\\f228\"; }\ni.icon.other.gender:before { content: \"\\f229\"; }\ni.icon.other.gender.vertical:before { content: \"\\f22a\"; }\ni.icon.other.gender.horizontal:before { content: \"\\f22b\"; }\ni.icon.neuter:before { content: \"\\f22c\"; }\ni.icon.genderless:before { content: \"\\f22d\"; }\n\n/* Accessibility */\ni.icon.universal.access:before { content: \"\\f29a\"; }\ni.icon.wheelchair:before { content: \"\\f29b\"; }\ni.icon.blind:before { content: \"\\f29d\"; }\ni.icon.audio.description:before { content: \"\\f29e\"; }\ni.icon.volume.control.phone:before { content: \"\\f2a0\"; }\ni.icon.braille:before { content: \"\\f2a1\"; }\ni.icon.asl:before { content: \"\\f2a3\"; }\ni.icon.assistive.listening.systems:before { content: \"\\f2a2\"; }\ni.icon.deafness:before { content: \"\\f2a4\"; }\ni.icon.sign.language:before { content: \"\\f2a7\"; }\ni.icon.low.vision:before { content: \"\\f2a8\"; }\n\n/* View Adjustment */\ni.icon.block.layout:before { content: \"\\f009\"; }\ni.icon.grid.layout:before { content: \"\\f00a\"; }\ni.icon.list.layout:before { content: \"\\f00b\"; }\ni.icon.zoom:before { content: \"\\f00e\"; }\ni.icon.zoom.out:before { content: \"\\f010\"; }\ni.icon.resize.vertical:before { content: \"\\f07d\"; }\ni.icon.resize.horizontal:before { content: \"\\f07e\"; }\ni.icon.maximize:before { content: \"\\f0b2\"; }\ni.icon.crop:before { content: \"\\f125\"; }\n\n/* Literal Objects */\ni.icon.cocktail:before { content: \"\\f000\"; }\ni.icon.road:before { content: \"\\f018\"; }\ni.icon.flag:before { content: \"\\f024\"; }\ni.icon.book:before { content: \"\\f02d\"; }\ni.icon.gift:before { content: \"\\f06b\"; }\ni.icon.leaf:before { content: \"\\f06c\"; }\ni.icon.fire:before { content: \"\\f06d\"; }\ni.icon.plane:before { content: \"\\f072\"; }\ni.icon.magnet:before { content: \"\\f076\"; }\ni.icon.lemon:before { content: \"\\f094\"; }\ni.icon.world:before { content: \"\\f0ac\"; }\ni.icon.travel:before { content: \"\\f0b1\"; }\ni.icon.shipping:before { content: \"\\f0d1\"; }\ni.icon.money:before { content: \"\\f0d6\"; }\ni.icon.legal:before { content: \"\\f0e3\"; }\ni.icon.lightning:before { content: \"\\f0e7\"; }\ni.icon.umbrella:before { content: \"\\f0e9\"; }\ni.icon.treatment:before { content: \"\\f0f1\"; }\ni.icon.suitcase:before { content: \"\\f0f2\"; }\ni.icon.bar:before { content: \"\\f0fc\"; }\ni.icon.flag.outline:before { content: \"\\f11d\"; }\ni.icon.flag.checkered:before { content: \"\\f11e\"; }\ni.icon.puzzle:before { content: \"\\f12e\"; }\ni.icon.fire.extinguisher:before { content: \"\\f134\"; }\ni.icon.rocket:before { content: \"\\f135\"; }\ni.icon.anchor:before { content: \"\\f13d\"; }\ni.icon.bullseye:before { content: \"\\f140\"; }\ni.icon.sun:before { content: \"\\f185\"; }\ni.icon.moon:before { content: \"\\f186\"; }\ni.icon.fax:before { content: \"\\f1ac\"; }\ni.icon.life.ring:before { content: \"\\f1cd\"; }\ni.icon.bomb:before { content: \"\\f1e2\"; }\ni.icon.soccer:before { content: \"\\f1e3\"; }\ni.icon.calculator:before { content: \"\\f1ec\"; }\ni.icon.diamond:before { content: \"\\f219\"; }\ni.icon.sticky.note:before { content: \"\\f249\"; }\ni.icon.sticky.note.outline:before { content: \"\\f24a\"; }\ni.icon.law:before { content: \"\\f24e\"; }\ni.icon.hand.peace:before { content: \"\\f25b\"; }\ni.icon.hand.rock:before { content: \"\\f255\"; }\ni.icon.hand.paper:before { content: \"\\f256\"; }\ni.icon.hand.scissors:before { content: \"\\f257\"; }\ni.icon.hand.lizard:before { content: \"\\f258\"; }\ni.icon.hand.spock:before { content: \"\\f259\"; }\ni.icon.tv:before { content: \"\\f26c\"; }\ni.icon.thermometer.full:before { content: \"\\f2c7\"; }\ni.icon.thermometer.three.quarters:before { content: \"\\f2c8\"; }\ni.icon.thermometer.half:before { content: \"\\f2c9\"; }\ni.icon.thermometer.quarter:before { content: \"\\f2ca\"; }\ni.icon.thermometer.empty:before { content: \"\\f2cb\"; }\ni.icon.shower:before { content: \"\\f2cc\"; }\ni.icon.bathtub:before { content: \"\\f2cd\"; }\ni.icon.snowflake:before { content: \"\\f2dc\"; }\n\n/* Shapes */\ni.icon.crosshairs:before { content: \"\\f05b\"; }\ni.icon.asterisk:before { content: \"\\f069\"; }\ni.icon.square.outline:before { content: \"\\f096\"; }\ni.icon.certificate:before { content: \"\\f0a3\"; }\ni.icon.square:before { content: \"\\f0c8\"; }\ni.icon.quote.left:before { content: \"\\f10d\"; }\ni.icon.quote.right:before { content: \"\\f10e\"; }\ni.icon.spinner:before { content: \"\\f110\"; }\ni.icon.circle:before { content: \"\\f111\"; }\ni.icon.ellipsis.horizontal:before { content: \"\\f141\"; }\ni.icon.ellipsis.vertical:before { content: \"\\f142\"; }\ni.icon.cube:before { content: \"\\f1b2\"; }\ni.icon.cubes:before { content: \"\\f1b3\"; }\ni.icon.circle.notched:before { content: \"\\f1ce\"; }\ni.icon.circle.thin:before { content: \"\\f1db\"; }\n\n/* Item Selection */\ni.icon.checkmark:before { content: \"\\f00c\"; }\ni.icon.remove:before { content: \"\\f00d\"; }\ni.icon.checkmark.box:before { content: \"\\f046\"; }\ni.icon.move:before { content: \"\\f047\"; }\ni.icon.add.circle:before { content: \"\\f055\"; }\ni.icon.minus.circle:before { content: \"\\f056\"; }\ni.icon.remove.circle:before { content: \"\\f057\"; }\ni.icon.check.circle:before { content: \"\\f058\"; }\ni.icon.remove.circle.outline:before { content: \"\\f05c\"; }\ni.icon.check.circle.outline:before { content: \"\\f05d\"; }\ni.icon.plus:before { content: \"\\f067\"; }\ni.icon.minus:before { content: \"\\f068\"; }\ni.icon.add.square:before { content: \"\\f0fe\"; }\ni.icon.radio:before { content: \"\\f10c\"; }\ni.icon.minus.square:before { content: \"\\f146\"; }\ni.icon.minus.square.outline:before { content: \"\\f147\"; }\ni.icon.check.square:before { content: \"\\f14a\"; }\ni.icon.selected.radio:before { content: \"\\f192\"; }\ni.icon.plus.square.outline:before { content: \"\\f196\"; }\ni.icon.toggle.off:before { content: \"\\f204\"; }\ni.icon.toggle.on:before { content: \"\\f205\"; }\n\n/* Media */\ni.icon.film:before { content: \"\\f008\"; }\ni.icon.sound:before { content: \"\\f025\"; }\ni.icon.photo:before { content: \"\\f030\"; }\ni.icon.bar.chart:before { content: \"\\f080\"; }\ni.icon.camera.retro:before { content: \"\\f083\"; }\ni.icon.newspaper:before { content: \"\\f1ea\"; }\ni.icon.area.chart:before { content: \"\\f1fe\"; }\ni.icon.pie.chart:before { content: \"\\f200\"; }\ni.icon.line.chart:before { content: \"\\f201\"; }\n\n/* Pointers */\ni.icon.arrow.circle.outline.down:before { content: \"\\f01a\"; }\ni.icon.arrow.circle.outline.up:before { content: \"\\f01b\"; }\ni.icon.chevron.left:before { content: \"\\f053\"; }\ni.icon.chevron.right:before { content: \"\\f054\"; }\ni.icon.arrow.left:before { content: \"\\f060\"; }\ni.icon.arrow.right:before { content: \"\\f061\"; }\ni.icon.arrow.up:before { content: \"\\f062\"; }\ni.icon.arrow.down:before { content: \"\\f063\"; }\ni.icon.chevron.up:before { content: \"\\f077\"; }\ni.icon.chevron.down:before { content: \"\\f078\"; }\ni.icon.pointing.right:before { content: \"\\f0a4\"; }\ni.icon.pointing.left:before { content: \"\\f0a5\"; }\ni.icon.pointing.up:before { content: \"\\f0a6\"; }\ni.icon.pointing.down:before { content: \"\\f0a7\"; }\ni.icon.arrow.circle.left:before { content: \"\\f0a8\"; }\ni.icon.arrow.circle.right:before { content: \"\\f0a9\"; }\ni.icon.arrow.circle.up:before { content: \"\\f0aa\"; }\ni.icon.arrow.circle.down:before { content: \"\\f0ab\"; }\ni.icon.caret.down:before { content: \"\\f0d7\"; }\ni.icon.caret.up:before { content: \"\\f0d8\"; }\ni.icon.caret.left:before { content: \"\\f0d9\"; }\ni.icon.caret.right:before { content: \"\\f0da\"; }\ni.icon.angle.double.left:before { content: \"\\f100\"; }\ni.icon.angle.double.right:before { content: \"\\f101\"; }\ni.icon.angle.double.up:before { content: \"\\f102\"; }\ni.icon.angle.double.down:before { content: \"\\f103\"; }\ni.icon.angle.left:before { content: \"\\f104\"; }\ni.icon.angle.right:before { content: \"\\f105\"; }\ni.icon.angle.up:before { content: \"\\f106\"; }\ni.icon.angle.down:before { content: \"\\f107\"; }\ni.icon.chevron.circle.left:before { content: \"\\f137\"; }\ni.icon.chevron.circle.right:before { content: \"\\f138\"; }\ni.icon.chevron.circle.up:before { content: \"\\f139\"; }\ni.icon.chevron.circle.down:before { content: \"\\f13a\"; }\ni.icon.toggle.down:before { content: \"\\f150\"; }\ni.icon.toggle.up:before { content: \"\\f151\"; }\ni.icon.toggle.right:before { content: \"\\f152\"; }\ni.icon.long.arrow.down:before { content: \"\\f175\"; }\ni.icon.long.arrow.up:before { content: \"\\f176\"; }\ni.icon.long.arrow.left:before { content: \"\\f177\"; }\ni.icon.long.arrow.right:before { content: \"\\f178\"; }\ni.icon.arrow.circle.outline.right:before { content: \"\\f18e\"; }\ni.icon.arrow.circle.outline.left:before { content: \"\\f190\"; }\ni.icon.toggle.left:before { content: \"\\f191\"; }\n\n/* Mobile */\ni.icon.tablet:before { content: \"\\f10a\"; }\ni.icon.mobile:before { content: \"\\f10b\"; }\ni.icon.battery.full:before { content: \"\\f240\"; }\ni.icon.battery.high:before { content: \"\\f241\"; }\ni.icon.battery.medium:before { content: \"\\f242\"; }\ni.icon.battery.low:before { content: \"\\f243\"; }\ni.icon.battery.empty:before { content: \"\\f244\"; }\n\n/* Computer */\ni.icon.power:before { content: \"\\f011\"; }\ni.icon.trash.outline:before { content: \"\\f014\"; }\ni.icon.disk.outline:before { content: \"\\f0a0\"; }\ni.icon.desktop:before { content: \"\\f108\"; }\ni.icon.laptop:before { content: \"\\f109\"; }\ni.icon.game:before { content: \"\\f11b\"; }\ni.icon.keyboard:before { content: \"\\f11c\"; }\ni.icon.plug:before { content: \"\\f1e6\"; }\n\n/* File System */\ni.icon.trash:before { content: \"\\f1f8\"; }\ni.icon.file.outline:before { content: \"\\f016\"; }\ni.icon.folder:before { content: \"\\f07b\"; }\ni.icon.folder.open:before { content: \"\\f07c\"; }\ni.icon.file.text.outline:before { content: \"\\f0f6\"; }\ni.icon.folder.outline:before { content: \"\\f114\"; }\ni.icon.folder.open.outline:before { content: \"\\f115\"; }\ni.icon.level.up:before { content: \"\\f148\"; }\ni.icon.level.down:before { content: \"\\f149\"; }\ni.icon.file:before { content: \"\\f15b\"; }\ni.icon.file.text:before { content: \"\\f15c\"; }\ni.icon.file.pdf.outline:before { content: \"\\f1c1\"; }\ni.icon.file.word.outline:before { content: \"\\f1c2\"; }\ni.icon.file.excel.outline:before { content: \"\\f1c3\"; }\ni.icon.file.powerpoint.outline:before { content: \"\\f1c4\"; }\ni.icon.file.image.outline:before { content: \"\\f1c5\"; }\ni.icon.file.archive.outline:before { content: \"\\f1c6\"; }\ni.icon.file.audio.outline:before { content: \"\\f1c7\"; }\ni.icon.file.video.outline:before { content: \"\\f1c8\"; }\ni.icon.file.code.outline:before { content: \"\\f1c9\"; }\n\n/* Technologies */\ni.icon.qrcode:before { content: \"\\f029\"; }\ni.icon.barcode:before { content: \"\\f02a\"; }\ni.icon.rss:before { content: \"\\f09e\"; }\ni.icon.fork:before { content: \"\\f126\"; }\ni.icon.html5:before { content: \"\\f13b\"; }\ni.icon.css3:before { content: \"\\f13c\"; }\ni.icon.rss.square:before { content: \"\\f143\"; }\ni.icon.openid:before { content: \"\\f19b\"; }\ni.icon.database:before { content: \"\\f1c0\"; }\ni.icon.wifi:before { content: \"\\f1eb\"; }\ni.icon.server:before { content: \"\\f233\"; }\ni.icon.usb:before { content: \"\\f287\"; }\ni.icon.bluetooth:before { content: \"\\f293\"; }\ni.icon.bluetooth.alternative:before { content: \"\\f294\"; }\ni.icon.microchip:before { content: \"\\f2db\"; }\n\n/* Rating */\ni.icon.heart:before { content: \"\\f004\"; }\ni.icon.star:before { content: \"\\f005\"; }\ni.icon.empty.star:before { content: \"\\f006\"; }\ni.icon.thumbs.outline.up:before { content: \"\\f087\"; }\ni.icon.thumbs.outline.down:before { content: \"\\f088\"; }\ni.icon.star.half:before { content: \"\\f089\"; }\ni.icon.empty.heart:before { content: \"\\f08a\"; }\ni.icon.smile:before { content: \"\\f118\"; }\ni.icon.frown:before { content: \"\\f119\"; }\ni.icon.meh:before { content: \"\\f11a\"; }\ni.icon.star.half.empty:before { content: \"\\f123\"; }\ni.icon.thumbs.up:before { content: \"\\f164\"; }\ni.icon.thumbs.down:before { content: \"\\f165\"; }\n\n/* Audio */\ni.icon.music:before { content: \"\\f001\"; }\ni.icon.video.play.outline:before { content: \"\\f01d\"; }\ni.icon.volume.off:before { content: \"\\f026\"; }\ni.icon.volume.down:before { content: \"\\f027\"; }\ni.icon.volume.up:before { content: \"\\f028\"; }\ni.icon.record:before { content: \"\\f03d\"; }\ni.icon.step.backward:before { content: \"\\f048\"; }\ni.icon.fast.backward:before { content: \"\\f049\"; }\ni.icon.backward:before { content: \"\\f04a\"; }\ni.icon.play:before { content: \"\\f04b\"; }\ni.icon.pause:before { content: \"\\f04c\"; }\ni.icon.stop:before { content: \"\\f04d\"; }\ni.icon.forward:before { content: \"\\f04e\"; }\ni.icon.fast.forward:before { content: \"\\f050\"; }\ni.icon.step.forward:before { content: \"\\f051\"; }\ni.icon.eject:before { content: \"\\f052\"; }\ni.icon.unmute:before { content: \"\\f130\"; }\ni.icon.mute:before { content: \"\\f131\"; }\ni.icon.video.play:before { content: \"\\f144\"; }\ni.icon.closed.captioning:before { content: \"\\f20a\"; }\ni.icon.pause.circle:before { content: \"\\f28b\"; }\ni.icon.pause.circle.outline:before { content: \"\\f28c\"; }\ni.icon.stop.circle:before { content: \"\\f28d\"; }\ni.icon.stop.circle.outline:before { content: \"\\f28e\"; }\n\n/* Map, Locations, & Transportation */\ni.icon.marker:before { content: \"\\f041\"; }\ni.icon.coffee:before { content: \"\\f0f4\"; }\ni.icon.food:before { content: \"\\f0f5\"; }\ni.icon.building.outline:before { content: \"\\f0f7\"; }\ni.icon.hospital:before { content: \"\\f0f8\"; }\ni.icon.emergency:before { content: \"\\f0f9\"; }\ni.icon.first.aid:before { content: \"\\f0fa\"; }\ni.icon.military:before { content: \"\\f0fb\"; }\ni.icon.h:before { content: \"\\f0fd\"; }\ni.icon.location.arrow:before { content: \"\\f124\"; }\ni.icon.compass:before { content: \"\\f14e\"; }\ni.icon.space.shuttle:before { content: \"\\f197\"; }\ni.icon.university:before { content: \"\\f19c\"; }\ni.icon.building:before { content: \"\\f1ad\"; }\ni.icon.paw:before { content: \"\\f1b0\"; }\ni.icon.spoon:before { content: \"\\f1b1\"; }\ni.icon.car:before { content: \"\\f1b9\"; }\ni.icon.taxi:before { content: \"\\f1ba\"; }\ni.icon.tree:before { content: \"\\f1bb\"; }\ni.icon.bicycle:before { content: \"\\f206\"; }\ni.icon.bus:before { content: \"\\f207\"; }\ni.icon.ship:before { content: \"\\f21a\"; }\ni.icon.motorcycle:before { content: \"\\f21c\"; }\ni.icon.street.view:before { content: \"\\f21d\"; }\ni.icon.hotel:before { content: \"\\f236\"; }\ni.icon.train:before { content: \"\\f238\"; }\ni.icon.subway:before { content: \"\\f239\"; }\ni.icon.map.pin:before { content: \"\\f276\"; }\ni.icon.map.signs:before { content: \"\\f277\"; }\ni.icon.map.outline:before { content: \"\\f278\"; }\ni.icon.map:before { content: \"\\f279\"; }\n\n/* Tables */\ni.icon.table:before { content: \"\\f0ce\"; }\ni.icon.columns:before { content: \"\\f0db\"; }\ni.icon.sort:before { content: \"\\f0dc\"; }\ni.icon.sort.descending:before { content: \"\\f0dd\"; }\ni.icon.sort.ascending:before { content: \"\\f0de\"; }\ni.icon.sort.alphabet.ascending:before { content: \"\\f15d\"; }\ni.icon.sort.alphabet.descending:before { content: \"\\f15e\"; }\ni.icon.sort.content.ascending:before { content: \"\\f160\"; }\ni.icon.sort.content.descending:before { content: \"\\f161\"; }\ni.icon.sort.numeric.ascending:before { content: \"\\f162\"; }\ni.icon.sort.numeric.descending:before { content: \"\\f163\"; }\n\n/* Text Editor */\ni.icon.font:before { content: \"\\f031\"; }\ni.icon.bold:before { content: \"\\f032\"; }\ni.icon.italic:before { content: \"\\f033\"; }\ni.icon.text.height:before { content: \"\\f034\"; }\ni.icon.text.width:before { content: \"\\f035\"; }\ni.icon.align.left:before { content: \"\\f036\"; }\ni.icon.align.center:before { content: \"\\f037\"; }\ni.icon.align.right:before { content: \"\\f038\"; }\ni.icon.align.justify:before { content: \"\\f039\"; }\ni.icon.list:before { content: \"\\f03a\"; }\ni.icon.outdent:before { content: \"\\f03b\"; }\ni.icon.indent:before { content: \"\\f03c\"; }\ni.icon.linkify:before { content: \"\\f0c1\"; }\ni.icon.cut:before { content: \"\\f0c4\"; }\ni.icon.copy:before { content: \"\\f0c5\"; }\ni.icon.attach:before { content: \"\\f0c6\"; }\ni.icon.save:before { content: \"\\f0c7\"; }\ni.icon.content:before { content: \"\\f0c9\"; }\ni.icon.unordered.list:before { content: \"\\f0ca\"; }\ni.icon.ordered.list:before { content: \"\\f0cb\"; }\ni.icon.strikethrough:before { content: \"\\f0cc\"; }\ni.icon.underline:before { content: \"\\f0cd\"; }\ni.icon.paste:before { content: \"\\f0ea\"; }\ni.icon.unlinkify:before { content: \"\\f127\"; }\ni.icon.superscript:before { content: \"\\f12b\"; }\ni.icon.subscript:before { content: \"\\f12c\"; }\ni.icon.header:before { content: \"\\f1dc\"; }\ni.icon.paragraph:before { content: \"\\f1dd\"; }\ni.icon.text.cursor:before { content: \"\\f246\"; }\n\n/* Currency */\ni.icon.euro:before { content: \"\\f153\"; }\ni.icon.pound:before { content: \"\\f154\"; }\ni.icon.dollar:before { content: \"\\f155\"; }\ni.icon.rupee:before { content: \"\\f156\"; }\ni.icon.yen:before { content: \"\\f157\"; }\ni.icon.ruble:before { content: \"\\f158\"; }\ni.icon.won:before { content: \"\\f159\"; }\ni.icon.bitcoin:before { content: \"\\f15a\"; }\ni.icon.lira:before { content: \"\\f195\"; }\ni.icon.shekel:before { content: \"\\f20b\"; }\n\n/* Payment Options */\ni.icon.paypal:before { content: \"\\f1ed\"; }\ni.icon.google.wallet:before { content: \"\\f1ee\"; }\ni.icon.visa:before { content: \"\\f1f0\"; }\ni.icon.mastercard:before { content: \"\\f1f1\"; }\ni.icon.discover:before { content: \"\\f1f2\"; }\ni.icon.american.express:before { content: \"\\f1f3\"; }\ni.icon.paypal.card:before { content: \"\\f1f4\"; }\ni.icon.stripe:before { content: \"\\f1f5\"; }\ni.icon.japan.credit.bureau:before { content: \"\\f24b\"; }\ni.icon.diners.club:before { content: \"\\f24c\"; }\ni.icon.credit.card.alternative:before { content: \"\\f283\"; }\n\n/* Networks and Websites*/\ni.icon.twitter.square:before { content: \"\\f081\"; }\ni.icon.facebook.square:before { content: \"\\f082\"; }\ni.icon.linkedin.square:before { content: \"\\f08c\"; }\ni.icon.github.square:before { content: \"\\f092\"; }\ni.icon.twitter:before { content: \"\\f099\"; }\ni.icon.facebook.f:before { content: \"\\f09a\"; }\ni.icon.github:before { content: \"\\f09b\"; }\ni.icon.pinterest:before { content: \"\\f0d2\"; }\ni.icon.pinterest.square:before { content: \"\\f0d3\"; }\ni.icon.google.plus.square:before { content: \"\\f0d4\"; }\ni.icon.google.plus:before { content: \"\\f0d5\"; }\ni.icon.linkedin:before { content: \"\\f0e1\"; }\ni.icon.github.alternate:before { content: \"\\f113\"; }\ni.icon.maxcdn:before { content: \"\\f136\"; }\ni.icon.youtube.square:before { content: \"\\f166\"; }\ni.icon.youtube:before { content: \"\\f167\"; }\ni.icon.xing:before { content: \"\\f168\"; }\ni.icon.xing.square:before { content: \"\\f169\"; }\ni.icon.youtube.play:before { content: \"\\f16a\"; }\ni.icon.dropbox:before { content: \"\\f16b\"; }\ni.icon.stack.overflow:before { content: \"\\f16c\"; }\ni.icon.instagram:before { content: \"\\f16d\"; }\ni.icon.flickr:before { content: \"\\f16e\"; }\ni.icon.adn:before { content: \"\\f170\"; }\ni.icon.bitbucket:before { content: \"\\f171\"; }\ni.icon.bitbucket.square:before { content: \"\\f172\"; }\ni.icon.tumblr:before { content: \"\\f173\"; }\ni.icon.tumblr.square:before { content: \"\\f174\"; }\ni.icon.apple:before { content: \"\\f179\"; }\ni.icon.windows:before { content: \"\\f17a\"; }\ni.icon.android:before { content: \"\\f17b\"; }\ni.icon.linux:before { content: \"\\f17c\"; }\ni.icon.dribble:before { content: \"\\f17d\"; }\ni.icon.skype:before { content: \"\\f17e\"; }\ni.icon.foursquare:before { content: \"\\f180\"; }\ni.icon.trello:before { content: \"\\f181\"; }\ni.icon.gittip:before { content: \"\\f184\"; }\ni.icon.vk:before { content: \"\\f189\"; }\ni.icon.weibo:before { content: \"\\f18a\"; }\ni.icon.renren:before { content: \"\\f18b\"; }\ni.icon.pagelines:before { content: \"\\f18c\"; }\ni.icon.stack.exchange:before { content: \"\\f18d\"; }\ni.icon.vimeo.square:before { content: \"\\f194\"; }\ni.icon.slack:before { content: \"\\f198\"; }\ni.icon.wordpress:before { content: \"\\f19a\"; }\ni.icon.yahoo:before { content: \"\\f19e\"; }\ni.icon.google:before { content: \"\\f1a0\"; }\ni.icon.reddit:before { content: \"\\f1a1\"; }\ni.icon.reddit.square:before { content: \"\\f1a2\"; }\ni.icon.stumbleupon.circle:before { content: \"\\f1a3\"; }\ni.icon.stumbleupon:before { content: \"\\f1a4\"; }\ni.icon.delicious:before { content: \"\\f1a5\"; }\ni.icon.digg:before { content: \"\\f1a6\"; }\ni.icon.pied.piper:before { content: \"\\f1a7\"; }\ni.icon.pied.piper.alternate:before { content: \"\\f1a8\"; }\ni.icon.drupal:before { content: \"\\f1a9\"; }\ni.icon.joomla:before { content: \"\\f1aa\"; }\ni.icon.behance:before { content: \"\\f1b4\"; }\ni.icon.behance.square:before { content: \"\\f1b5\"; }\ni.icon.steam:before { content: \"\\f1b6\"; }\ni.icon.steam.square:before { content: \"\\f1b7\"; }\ni.icon.spotify:before { content: \"\\f1bc\"; }\ni.icon.deviantart:before { content: \"\\f1bd\"; }\ni.icon.soundcloud:before { content: \"\\f1be\"; }\ni.icon.vine:before { content: \"\\f1ca\"; }\ni.icon.codepen:before { content: \"\\f1cb\"; }\ni.icon.jsfiddle:before { content: \"\\f1cc\"; }\ni.icon.rebel:before { content: \"\\f1d0\"; }\ni.icon.empire:before { content: \"\\f1d1\"; }\ni.icon.git.square:before { content: \"\\f1d2\"; }\ni.icon.git:before { content: \"\\f1d3\"; }\ni.icon.hacker.news:before { content: \"\\f1d4\"; }\ni.icon.tencent.weibo:before { content: \"\\f1d5\"; }\ni.icon.qq:before { content: \"\\f1d6\"; }\ni.icon.wechat:before { content: \"\\f1d7\"; }\ni.icon.slideshare:before { content: \"\\f1e7\"; }\ni.icon.twitch:before { content: \"\\f1e8\"; }\ni.icon.yelp:before { content: \"\\f1e9\"; }\ni.icon.lastfm:before { content: \"\\f202\"; }\ni.icon.lastfm.square:before { content: \"\\f203\"; }\ni.icon.ioxhost:before { content: \"\\f208\"; }\ni.icon.angellist:before { content: \"\\f209\"; }\ni.icon.meanpath:before { content: \"\\f20c\"; }\ni.icon.buysellads:before { content: \"\\f20d\"; }\ni.icon.connectdevelop:before { content: \"\\f20e\"; }\ni.icon.dashcube:before { content: \"\\f210\"; }\ni.icon.forumbee:before { content: \"\\f211\"; }\ni.icon.leanpub:before { content: \"\\f212\"; }\ni.icon.sellsy:before { content: \"\\f213\"; }\ni.icon.shirtsinbulk:before { content: \"\\f214\"; }\ni.icon.simplybuilt:before { content: \"\\f215\"; }\ni.icon.skyatlas:before { content: \"\\f216\"; }\ni.icon.facebook:before { content: \"\\f230\"; }\ni.icon.pinterest:before { content: \"\\f231\"; }\ni.icon.whatsapp:before { content: \"\\f232\"; }\ni.icon.viacoin:before { content: \"\\f237\"; }\ni.icon.medium:before { content: \"\\f23a\"; }\ni.icon.y.combinator:before { content: \"\\f23b\"; }\ni.icon.optinmonster:before { content: \"\\f23c\"; }\ni.icon.opencart:before { content: \"\\f23d\"; }\ni.icon.expeditedssl:before { content: \"\\f23e\"; }\ni.icon.gg:before { content: \"\\f260\"; }\ni.icon.gg.circle:before { content: \"\\f261\"; }\ni.icon.tripadvisor:before { content: \"\\f262\"; }\ni.icon.odnoklassniki:before { content: \"\\f263\"; }\ni.icon.odnoklassniki.square:before { content: \"\\f264\"; }\ni.icon.pocket:before { content: \"\\f265\"; }\ni.icon.wikipedia:before { content: \"\\f266\"; }\ni.icon.safari:before { content: \"\\f267\"; }\ni.icon.chrome:before { content: \"\\f268\"; }\ni.icon.firefox:before { content: \"\\f269\"; }\ni.icon.opera:before { content: \"\\f26a\"; }\ni.icon.internet.explorer:before { content: \"\\f26b\"; }\ni.icon.contao:before { content: \"\\f26d\"; }\ni.icon.\\35 00px:before { content: \"\\f26e\"; }\ni.icon.amazon:before { content: \"\\f270\"; }\ni.icon.houzz:before { content: \"\\f27c\"; }\ni.icon.vimeo:before { content: \"\\f27d\"; }\ni.icon.black.tie:before { content: \"\\f27e\"; }\ni.icon.fonticons:before { content: \"\\f280\"; }\ni.icon.reddit.alien:before { content: \"\\f281\"; }\ni.icon.microsoft.edge:before { content: \"\\f282\"; }\ni.icon.codiepie:before { content: \"\\f284\"; }\ni.icon.modx:before { content: \"\\f285\"; }\ni.icon.fort.awesome:before { content: \"\\f286\"; }\ni.icon.product.hunt:before { content: \"\\f288\"; }\ni.icon.mixcloud:before { content: \"\\f289\"; }\ni.icon.scribd:before { content: \"\\f28a\"; }\ni.icon.gitlab:before { content: \"\\f296\"; }\ni.icon.wpbeginner:before { content: \"\\f297\"; }\ni.icon.wpforms:before { content: \"\\f298\"; }\ni.icon.envira.gallery:before { content: \"\\f299\"; }\ni.icon.glide:before { content: \"\\f2a5\"; }\ni.icon.glide.g:before { content: \"\\f2a6\"; }\ni.icon.viadeo:before { content: \"\\f2a9\"; }\ni.icon.viadeo.square:before { content: \"\\f2aa\"; }\ni.icon.snapchat:before { content: \"\\f2ab\"; }\ni.icon.snapchat.ghost:before { content: \"\\f2ac\"; }\ni.icon.snapchat.square:before { content: \"\\f2ad\"; }\ni.icon.pied.piper.hat:before { content: \"\\f2ae\"; }\ni.icon.first.order:before { content: \"\\f2b0\"; }\ni.icon.yoast:before { content: \"\\f2b1\"; }\ni.icon.themeisle:before { content: \"\\f2b2\"; }\ni.icon.google.plus.circle:before { content: \"\\f2b3\"; }\ni.icon.font.awesome:before { content: \"\\f2b4\"; }\ni.icon.linode:before { content: \"\\f2b8\"; }\ni.icon.quora:before { content: \"\\f2c4\"; }\ni.icon.free.code.camp:before { content: \"\\f2c5\"; }\ni.icon.telegram:before { content: \"\\f2c6\"; }\ni.icon.bandcamp:before { content: \"\\f2d5\"; }\ni.icon.grav:before { content: \"\\f2d6\"; }\ni.icon.etsy:before { content: \"\\f2d7\"; }\ni.icon.imdb:before { content: \"\\f2d8\"; }\ni.icon.ravelry:before { content: \"\\f2d9\"; }\ni.icon.eercast:before { content: \"\\f2da\"; }\ni.icon.superpowers:before { content: \"\\f2dd\"; }\ni.icon.wpexplorer:before { content: \"\\f2de\"; }\ni.icon.meetup:before { content: \"\\f2e0\"; }\n\n/*******************************\n            Aliases\n*******************************/\n\ni.icon.like:before { content: \"\\f004\"; }\ni.icon.favorite:before { content: \"\\f005\"; }\ni.icon.video:before { content: \"\\f008\"; }\ni.icon.check:before { content: \"\\f00c\"; }\ni.icon.close:before { content: \"\\f00d\"; }\ni.icon.cancel:before { content: \"\\f00d\"; }\ni.icon.delete:before { content: \"\\f00d\"; }\ni.icon.x:before { content: \"\\f00d\"; }\ni.icon.zoom.in:before { content: \"\\f00e\"; }\ni.icon.magnify:before { content: \"\\f00e\"; }\ni.icon.shutdown:before { content: \"\\f011\"; }\ni.icon.clock:before { content: \"\\f017\"; }\ni.icon.time:before { content: \"\\f017\"; }\ni.icon.play.circle.outline:before { content: \"\\f01d\"; }\ni.icon.headphone:before { content: \"\\f025\"; }\ni.icon.camera:before { content: \"\\f030\"; }\ni.icon.video.camera:before { content: \"\\f03d\"; }\ni.icon.picture:before { content: \"\\f03e\"; }\ni.icon.pencil:before { content: \"\\f040\"; }\ni.icon.compose:before { content: \"\\f040\"; }\ni.icon.point:before { content: \"\\f041\"; }\ni.icon.tint:before { content: \"\\f043\"; }\ni.icon.signup:before { content: \"\\f044\"; }\ni.icon.plus.circle:before { content: \"\\f055\"; }\ni.icon.question.circle:before { content: \"\\f059\"; }\ni.icon.dont:before { content: \"\\f05e\"; }\ni.icon.minimize:before { content: \"\\f066\"; }\ni.icon.add:before { content: \"\\f067\"; }\ni.icon.exclamation.circle:before { content: \"\\f06a\"; }\ni.icon.attention:before { content: \"\\f06a\"; }\ni.icon.eye:before { content: \"\\f06e\"; }\ni.icon.exclamation.triangle:before { content: \"\\f071\"; }\ni.icon.shuffle:before { content: \"\\f074\"; }\ni.icon.chat:before { content: \"\\f075\"; }\ni.icon.cart:before { content: \"\\f07a\"; }\ni.icon.shopping.cart:before { content: \"\\f07a\"; }\ni.icon.bar.graph:before { content: \"\\f080\"; }\ni.icon.key:before { content: \"\\f084\"; }\ni.icon.cogs:before { content: \"\\f085\"; }\ni.icon.discussions:before { content: \"\\f086\"; }\ni.icon.like.outline:before { content: \"\\f087\"; }\ni.icon.dislike.outline:before { content: \"\\f088\"; }\ni.icon.heart.outline:before { content: \"\\f08a\"; }\ni.icon.log.out:before { content: \"\\f08b\"; }\ni.icon.thumb.tack:before { content: \"\\f08d\"; }\ni.icon.winner:before { content: \"\\f091\"; }\ni.icon.phone:before { content: \"\\f095\"; }\ni.icon.bookmark.outline:before { content: \"\\f097\"; }\ni.icon.phone.square:before { content: \"\\f098\"; }\ni.icon.credit.card:before { content: \"\\f09d\"; }\ni.icon.hdd.outline:before { content: \"\\f0a0\"; }\ni.icon.bullhorn:before { content: \"\\f0a1\"; }\ni.icon.bell.outline:before { content: \"\\f0a2\"; }\ni.icon.hand.outline.right:before { content: \"\\f0a4\"; }\ni.icon.hand.outline.left:before { content: \"\\f0a5\"; }\ni.icon.hand.outline.up:before { content: \"\\f0a6\"; }\ni.icon.hand.outline.down:before { content: \"\\f0a7\"; }\ni.icon.globe:before { content: \"\\f0ac\"; }\ni.icon.wrench:before { content: \"\\f0ad\"; }\ni.icon.briefcase:before { content: \"\\f0b1\"; }\ni.icon.group:before { content: \"\\f0c0\"; }\ni.icon.linkify:before { content: \"\\f0c1\"; }\ni.icon.chain:before { content: \"\\f0c1\"; }\ni.icon.flask:before { content: \"\\f0c3\"; }\ni.icon.sidebar:before { content: \"\\f0c9\"; }\ni.icon.bars:before { content: \"\\f0c9\"; }\ni.icon.list.ul:before { content: \"\\f0ca\"; }\ni.icon.list.ol:before { content: \"\\f0cb\"; }\ni.icon.numbered.list:before { content: \"\\f0cb\"; }\ni.icon.magic:before { content: \"\\f0d0\"; }\ni.icon.truck:before { content: \"\\f0d1\"; }\ni.icon.currency:before { content: \"\\f0d6\"; }\ni.icon.triangle.down:before { content: \"\\f0d7\"; }\ni.icon.dropdown:before { content: \"\\f0d7\"; }\ni.icon.triangle.up:before { content: \"\\f0d8\"; }\ni.icon.triangle.left:before { content: \"\\f0d9\"; }\ni.icon.triangle.right:before { content: \"\\f0da\"; }\ni.icon.envelope:before { content: \"\\f0e0\"; }\ni.icon.conversation:before { content: \"\\f0e6\"; }\ni.icon.rain:before { content: \"\\f0e9\"; }\ni.icon.clipboard:before { content: \"\\f0ea\"; }\ni.icon.lightbulb:before { content: \"\\f0eb\"; }\ni.icon.bell:before { content: \"\\f0f3\"; }\ni.icon.ambulance:before { content: \"\\f0f9\"; }\ni.icon.medkit:before { content: \"\\f0fa\"; }\ni.icon.fighter.jet:before { content: \"\\f0fb\"; }\ni.icon.beer:before { content: \"\\f0fc\"; }\ni.icon.plus.square:before { content: \"\\f0fe\"; }\ni.icon.computer:before { content: \"\\f108\"; }\ni.icon.circle.outline:before { content: \"\\f10c\"; }\ni.icon.gamepad:before { content: \"\\f11b\"; }\ni.icon.star.half.full:before { content: \"\\f123\"; }\ni.icon.broken.chain:before { content: \"\\f127\"; }\ni.icon.question:before { content: \"\\f128\"; }\ni.icon.exclamation:before { content: \"\\f12a\"; }\ni.icon.eraser:before { content: \"\\f12d\"; }\ni.icon.microphone:before { content: \"\\f130\"; }\ni.icon.microphone.slash:before { content: \"\\f131\"; }\ni.icon.shield:before { content: \"\\f132\"; }\ni.icon.target:before { content: \"\\f140\"; }\ni.icon.play.circle:before { content: \"\\f144\"; }\ni.icon.pencil.square:before { content: \"\\f14b\"; }\ni.icon.eur:before { content: \"\\f153\"; }\ni.icon.gbp:before { content: \"\\f154\"; }\ni.icon.usd:before { content: \"\\f155\"; }\ni.icon.inr:before { content: \"\\f156\"; }\ni.icon.cny:before { content: \"\\f157\"; }\ni.icon.rmb:before { content: \"\\f157\"; }\ni.icon.jpy:before { content: \"\\f157\"; }\ni.icon.rouble:before { content: \"\\f158\"; }\ni.icon.rub:before { content: \"\\f158\"; }\ni.icon.krw:before { content: \"\\f159\"; }\ni.icon.btc:before { content: \"\\f15a\"; }\ni.icon.gratipay:before { content: \"\\f184\"; }\ni.icon.zip:before { content: \"\\f187\"; }\ni.icon.dot.circle.outline:before { content: \"\\f192\"; }\ni.icon.try:before { content: \"\\f195\"; }\ni.icon.graduation:before { content: \"\\f19d\"; }\ni.icon.circle.outline:before { content: \"\\f1db\"; }\ni.icon.sliders:before { content: \"\\f1de\"; }\ni.icon.weixin:before { content: \"\\f1d7\"; }\ni.icon.tty:before { content: \"\\f1e4\"; }\ni.icon.teletype:before { content: \"\\f1e4\"; }\ni.icon.binoculars:before { content: \"\\f1e5\"; }\ni.icon.power.cord:before { content: \"\\f1e6\"; }\ni.icon.wi-fi:before { content: \"\\f1eb\"; }\ni.icon.visa.card:before { content: \"\\f1f0\"; }\ni.icon.mastercard.card:before { content: \"\\f1f1\"; }\ni.icon.discover.card:before { content: \"\\f1f2\"; }\ni.icon.amex:before { content: \"\\f1f3\"; }\ni.icon.american.express.card:before { content: \"\\f1f3\"; }\ni.icon.stripe.card:before { content: \"\\f1f5\"; }\ni.icon.bell.slash:before { content: \"\\f1f6\"; }\ni.icon.bell.slash.outline:before { content: \"\\f1f7\"; }\ni.icon.area.graph:before { content: \"\\f1fe\"; }\ni.icon.pie.graph:before { content: \"\\f200\"; }\ni.icon.line.graph:before { content: \"\\f201\"; }\ni.icon.cc:before { content: \"\\f20a\"; }\ni.icon.sheqel:before { content: \"\\f20b\"; }\ni.icon.ils:before { content: \"\\f20b\"; }\ni.icon.plus.cart:before { content: \"\\f217\"; }\ni.icon.arrow.down.cart:before { content: \"\\f218\"; }\ni.icon.detective:before { content: \"\\f21b\"; }\ni.icon.venus:before { content: \"\\f221\"; }\ni.icon.mars:before { content: \"\\f222\"; }\ni.icon.mercury:before { content: \"\\f223\"; }\ni.icon.intersex:before { content: \"\\f224\"; }\ni.icon.venus.double:before { content: \"\\f226\"; }\ni.icon.female.homosexual:before { content: \"\\f226\"; }\ni.icon.mars.double:before { content: \"\\f227\"; }\ni.icon.male.homosexual:before { content: \"\\f227\"; }\ni.icon.venus.mars:before { content: \"\\f228\"; }\ni.icon.mars.stroke:before { content: \"\\f229\"; }\ni.icon.mars.alternate:before { content: \"\\f229\"; }\ni.icon.mars.vertical:before { content: \"\\f22a\"; }\ni.icon.mars.stroke.vertical:before { content: \"\\f22a\"; }\ni.icon.mars.horizontal:before { content: \"\\f22b\"; }\ni.icon.mars.stroke.horizontal:before { content: \"\\f22b\"; }\ni.icon.asexual:before { content: \"\\f22d\"; }\ni.icon.facebook.official:before { content: \"\\f230\"; }\ni.icon.user.plus:before { content: \"\\f234\"; }\ni.icon.user.times:before { content: \"\\f235\"; }\ni.icon.user.close:before { content: \"\\f235\"; }\ni.icon.user.cancel:before { content: \"\\f235\"; }\ni.icon.user.delete:before { content: \"\\f235\"; }\ni.icon.user.x:before { content: \"\\f235\"; }\ni.icon.bed:before { content: \"\\f236\"; }\ni.icon.yc:before { content: \"\\f23b\"; }\ni.icon.ycombinator:before { content: \"\\f23b\"; }\ni.icon.battery.four:before { content: \"\\f240\"; }\ni.icon.battery.three:before { content: \"\\f241\"; }\ni.icon.battery.three.quarters:before { content: \"\\f241\"; }\ni.icon.battery.two:before { content: \"\\f242\"; }\ni.icon.battery.half:before { content: \"\\f242\"; }\ni.icon.battery.one:before { content: \"\\f243\"; }\ni.icon.battery.quarter:before { content: \"\\f243\"; }\ni.icon.battery.zero:before { content: \"\\f244\"; }\ni.icon.i.cursor:before { content: \"\\f246\"; }\ni.icon.jcb:before { content: \"\\f24b\"; }\ni.icon.japan.credit.bureau.card:before { content: \"\\f24b\"; }\ni.icon.diners.club.card:before { content: \"\\f24c\"; }\ni.icon.balance:before { content: \"\\f24e\"; }\ni.icon.hourglass.outline:before { content: \"\\f250\"; }\ni.icon.hourglass.zero:before { content: \"\\f250\"; }\ni.icon.hourglass.one:before { content: \"\\f251\"; }\ni.icon.hourglass.two:before { content: \"\\f252\"; }\ni.icon.hourglass.three:before { content: \"\\f253\"; }\ni.icon.hourglass.four:before { content: \"\\f254\"; }\ni.icon.grab:before { content: \"\\f255\"; }\ni.icon.hand.victory:before { content: \"\\f25b\"; }\ni.icon.tm:before { content: \"\\f25c\"; }\ni.icon.r.circle:before { content: \"\\f25d\"; }\ni.icon.television:before { content: \"\\f26c\"; }\ni.icon.five.hundred.pixels:before { content: \"\\f26e\"; }\ni.icon.calendar.plus:before { content: \"\\f271\"; }\ni.icon.calendar.minus:before { content: \"\\f272\"; }\ni.icon.calendar.times:before { content: \"\\f273\"; }\ni.icon.calendar.check:before { content: \"\\f274\"; }\ni.icon.factory:before { content: \"\\f275\"; }\ni.icon.commenting:before { content: \"\\f27a\"; }\ni.icon.commenting.outline:before { content: \"\\f27b\"; }\ni.icon.edge:before { content: \"\\f282\"; }\ni.icon.ms.edge:before { content: \"\\f282\"; }\ni.icon.wordpress.beginner:before { content: \"\\f297\"; }\ni.icon.wordpress.forms:before { content: \"\\f298\"; }\ni.icon.envira:before { content: \"\\f299\"; }\ni.icon.question.circle.outline:before { content: \"\\f29c\"; }\ni.icon.assistive.listening.devices:before { content: \"\\f2a2\"; }\ni.icon.als:before { content: \"\\f2a2\"; }\ni.icon.ald:before { content: \"\\f2a2\"; }\ni.icon.asl.interpreting:before { content: \"\\f2a3\"; }\ni.icon.deaf:before { content: \"\\f2a4\"; }\ni.icon.american.sign.language.interpreting:before { content: \"\\f2a3\"; }\ni.icon.hard.of.hearing:before { content: \"\\f2a4\"; }\ni.icon.signing:before { content: \"\\f2a7\"; }\ni.icon.new.pied.piper:before { content: \"\\f2ae\"; }\ni.icon.theme.isle:before { content: \"\\f2b2\"; }\ni.icon.google.plus.official:before { content: \"\\f2b3\"; }\ni.icon.fa:before { content: \"\\f2b4\"; }\ni.icon.vcard:before { content: \"\\f2bb\"; }\ni.icon.vcard.outline:before { content: \"\\f2bc\"; }\ni.icon.drivers.license:before { content: \"\\f2c2\"; }\ni.icon.drivers.license.outline:before { content: \"\\f2c3\"; }\ni.icon.thermometer:before { content: \"\\f2c7\"; }\ni.icon.s15:before { content: \"\\f2cd\"; }\ni.icon.bath:before { content: \"\\f2cd\"; }\ni.icon.times.rectangle:before { content: \"\\f2d3\"; }\ni.icon.times.rectangle.outline:before { content: \"\\f2d4\"; }\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/icon.variables",
    "content": "/*******************************\n             Icon\n*******************************/\n\n/*-------------------\n   Icon Variables\n--------------------*/\n\n@fontName: 'icons';\n@fallbackSRC: url(\"@{fontPath}/@{fontName}.eot\");\n@src:\n  url(\"@{fontPath}/@{fontName}.eot?#iefix\") format('embedded-opentype'),\n  url(\"@{fontPath}/@{fontName}.woff2\") format('woff2'),\n  url(\"@{fontPath}/@{fontName}.woff\") format('woff'),\n  url(\"@{fontPath}/@{fontName}.ttf\") format('truetype'),\n  url(\"@{fontPath}/@{fontName}.svg#icons\") format('svg')\n;\n\n@opacity: 1;\n@width: @iconWidth;\n@height: 1em;\n@distanceFromText: 0.25rem;\n\n\n/* Variations */\n\n@linkOpacity: 0.8;\n@linkDuration: 0.3s;\n@loadingDuration: 2s;\n\n@circularSize: 2em;\n@circularPadding: 0.5em 0.5em;\n@circularShadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n\n@borderedSize: 2em;\n@borderedVerticalPadding: ((@borderedSize - @height) / 2);\n@borderedHorizontalPadding: ((@borderedSize - @width) / 2);\n@borderedShadow: 0em 0em 0em 0.1em rgba(0, 0, 0, 0.1) inset;\n\n@cornerIconSize: 0.45em;\n@cornerIconStroke: 1px;\n@cornerIconShadow:\n  -@cornerIconStroke -@cornerIconStroke 0 @white,\n   @cornerIconStroke -@cornerIconStroke 0 @white,\n  -@cornerIconStroke  @cornerIconStroke 0 @white,\n   @cornerIconStroke  @cornerIconStroke 0 @white\n;\n@cornerIconInvertedShadow:\n  -@cornerIconStroke -@cornerIconStroke 0 @black,\n   @cornerIconStroke -@cornerIconStroke 0 @black,\n  -@cornerIconStroke  @cornerIconStroke 0 @black,\n   @cornerIconStroke  @cornerIconStroke 0 @black\n;\n\n@mini: 0.4em;\n@tiny: 0.5em;\n@small: 0.75em;\n@medium: 1em;\n@large: 1.5em;\n@big: 2em;\n@huge: 4em;\n@massive: 8em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/image.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/image.variables",
    "content": "/*******************************\n            Image\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@placeholderColor: transparent;\n@roundedBorderRadius: 0.3125em;\n\n@imageHorizontalMargin: 0.25rem;\n@imageVerticalMargin: 0.5rem;\n@imageBorder: 1px solid rgba(0, 0, 0, 0.1);\n\n/*-------------------\n       Types\n--------------------*/\n\n/* Avatar */\n@avatarSize: 2em;\n@avatarMargin: 0.25em;\n\n\n/*-------------------\n       Variations\n--------------------*/\n\n/* Spaced */\n@spacedDistance: 0.5em;\n\n/* Floated */\n@floatedHorizontalMargin: 1em;\n@floatedVerticalMargin: 1em;\n\n/* Size */\n@miniWidth: 35px;\n@tinyWidth: 80px;\n@smallWidth: 150px;\n@mediumWidth: 300px;\n@largeWidth: 450px;\n@bigWidth: 600px;\n@hugeWidth: 800px;\n@massiveWidth: 960px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/input.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/input.variables",
    "content": "/*******************************\n            Input\n*******************************/\n\n/*-------------------\n      Element\n--------------------*/\n\n@inputFont: @pageFont;\n@verticalPadding: @inputVerticalPadding;\n@horizontalPadding: @inputHorizontalPadding;\n\n@lineHeight: @inputLineHeight;\n@lineHeightOffset: ((@lineHeight - 1em) / 2);\n\n@padding: (@verticalPadding - @lineHeightOffset) @horizontalPadding;\n\n@textAlign: left;\n@background: @inputBackground;\n@borderWidth: 1px;\n@border: @borderWidth solid @borderColor;\n@boxShadow: none;\n\n@borderRadius: @defaultBorderRadius;\n@transition:\n  box-shadow @defaultDuration @defaultEasing,\n  border-color @defaultDuration @defaultEasing\n;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Icon Input */\n@iconWidth: (@verticalPadding * 2) + @glyphWidth;\n@iconOpacity: 0.5;\n@iconFocusOpacity: 1;\n@iconOffset: -0.5em;\n\n@iconDistance: 0em;\n@iconMargin: @iconWidth + @iconDistance;\n@iconTransition: opacity 0.3s @defaultEasing;\n\n@transparentIconWidth: @glyphWidth;\n@transparentIconMargin: 2em;\n\n/* Circular Icon Input */\n@circularIconVerticalOffset: 0.35em;\n@circularIconHorizontalOffset: 0.5em;\n\n/* Labeled Input */\n@labelCornerTop: @borderWidth;\n@labelCornerRight: @borderWidth;\n@labelCornerSize: @relative9px;\n@labelSize: 1em;\n@labelVerticalPadding: (@verticalPadding - @lineHeightOffset);\n\n@labeledMargin: 2.5em;\n@labeledIconInputMargin: 3.25em;\n@labeledIconMargin: 1.25em;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Placeholder */\n@placeholderColor: @inputPlaceholderColor;\n@placeholderFocusColor: @inputPlaceholderFocusColor;\n\n/* Down */\n@downBorderColor: rgba(0, 0, 0, 0.3);\n@downBackground: #FAFAFA;\n@downColor: @textColor;\n@downBoxShadow: none;\n\n/* Focus */\n@focusBorderColor: @focusedFormBorderColor;\n@focusBackground: @background;\n@focusColor: @hoveredTextColor;\n@focusBoxShadow: none;\n\n/* Error */\n@errorBackground: @negativeBackgroundColor;\n@errorColor: @negativeTextColor;\n@errorBorder: @negativeBorderColor;\n@errorBoxShadow: none;\n\n@placeholderErrorColor: lighten(@errorColor, 40);\n@placeholderErrorFocusColor: lighten(@errorColor, 30);\n\n/* Loader */\n@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Inverted */\n@transparentInvertedPlaceholderColor: @invertedUnselectedTextColor;\n@transparentInvertedColor: @white;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/label.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/label.variables",
    "content": "/*******************************\n             Label\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@verticalAlign: baseline;\n@verticalMargin: 0em;\n@horizontalMargin: @relative2px;\n@backgroundColor: #E8E8E8;\n@color: @mutedTextColor;\n@backgroundImage: none;\n@verticalPadding: 0.5833em; /* medium is not @emSize custom value required */\n@horizontalPadding: 0.833em;\n@borderRadius: @absoluteBorderRadius;\n@textTransform: none;\n@fontWeight: bold;\n@borderWidth: 1px;\n@border: 0px solid transparent;\n\n@lineHeightOffset: -(@verticalPadding / 2);\n\n@labelTransitionDuration: @defaultDuration;\n@labelTransitionEasing: @defaultEasing;\n@transition: background @labelTransitionDuration @labelTransitionEasing;\n\n/* Group */\n@groupVerticalMargin: 0.5em;\n@groupHorizontalMargin: 0.5em;\n\n/*-------------------\n        Parts\n--------------------*/\n\n/* Link */\n@linkOpacity: 0.5;\n@linkTransition: @labelTransitionDuration opacity @labelTransitionEasing;\n\n/* Icon */\n@iconDistance: 0.75em;\n\n/* Image */\n@imageHeight: (1em + @verticalPadding * 2);\n\n/* Detail */\n@detailFontWeight: bold;\n@detailOpacity: 0.8;\n@detailIconDistance: 0.25em;\n@detailMargin: 1em;\n\n/* Delete */\n@deleteOpacity: @linkOpacity;\n@deleteSize: @relativeSmall;\n@deleteMargin: 0.5em;\n@deleteTransition: background @labelTransitionDuration @labelTransitionEasing;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Image Label */\n@imageLabelBackground: @backgroundColor;\n@imageLabelVerticalPadding: @verticalPadding;\n@imageLabelHorizontalPadding: @horizontalPadding;\n@imageLabelTextDistance: 0.5em;\n@imageLabelDetailDistance: @imageLabelTextDistance;\n@imageLabelBorderRadius: @borderRadius;\n@imageLabelBoxShadow: none;\n@imageLabelPadding: @imageLabelVerticalPadding @imageLabelHorizontalPadding @imageLabelVerticalPadding @imageLabelTextDistance;\n\n@imageLabelImageMargin: -@verticalPadding @imageLabelTextDistance -@verticalPadding -@imageLabelTextDistance;\n@imageLabelImageBorderRadius: @imageLabelBorderRadius 0em 0em @imageLabelBorderRadius;\n@imageLabelImageHeight: @imageHeight;\n\n@imageLabelDetailBackground: @strongTransparentBlack;\n@imageLabelDetailPadding: @imageLabelVerticalPadding @imageLabelHorizontalPadding;\n@imageLabelDetailMargin: -@imageLabelVerticalPadding -@imageLabelHorizontalPadding -@imageLabelVerticalPadding @imageLabelDetailDistance;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Hover */\n@labelHoverBackgroundColor: #E0E0E0;\n@labelHoverBackgroundImage: none;\n@labelHoverTextColor: @hoveredTextColor;\n\n/* Active */\n@labelActiveBackgroundColor: #D0D0D0;\n@labelActiveBackgroundImage: none;\n@labelActiveTextColor: @selectedTextColor;\n\n/* Active Hover */\n@labelActiveHoverBackgroundColor: #C8C8C8;\n@labelActiveHoverBackgroundImage: none;\n@labelActiveHoverTextColor: @selectedTextColor;\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Basic */\n@basicBackground: none @white;\n@basicBorderWidth: 1px;\n@basicBorder: @basicBorderWidth solid @borderColor;\n@basicColor: @textColor;\n@basicBoxShadow: none;\n\n@basicHoverBackground: @basicBackground;\n@basicHoverColor: @linkHoverColor;\n@basicHoverBorder: @basicBorder;\n@basicHoverBoxShadow: @basicBoxShadow;\n\n/* Tag */\n@tagCircleColor: @white;\n@tagCircleSize: 0.5em;\n@tagHorizontalPadding: 1.5em;\n@tagCircleBoxShadow: 0 -1px 1px 0 rgba(0, 0, 0, 0.3);\n@tagTriangleRightOffset: 100%;\n@tagTriangleTopOffset: 50%;\n@tagTriangleSize: 1.56em;\n@tagTriangleBackgroundImage: none;\n@tagTransition: none; /* Avoids error with background: inherit; on animation */\n\n/* Ribbon */\n@ribbonTriangleSize: 1.2em;\n@ribbonShadowColor: rgba(0, 0, 0, 0.15);\n\n@ribbonMargin: 1rem;\n@ribbonOffset: ~\"calc(\"-@ribbonMargin~\" - \"@ribbonTriangleSize~\")\";\n@ribbonDistance: ~\"calc(\"@ribbonMargin~\" + \"@ribbonTriangleSize~\")\";\n@rightRibbonOffset:  ~\"calc(100% + \"@ribbonMargin~\" + \"@ribbonTriangleSize~\")\";\n\n@ribbonImageTopDistance: 1rem;\n@ribbonImageMargin: -0.05rem; /* Rounding Offset on Triangle */\n@ribbonImageOffset: ~\"calc(\"-@ribbonImageMargin~\" - \"@ribbonTriangleSize~\")\";\n@rightRibbonImageOffset:  ~\"calc(100% + \"@ribbonImageMargin~\" + \"@ribbonTriangleSize~\")\";\n\n@ribbonTableMargin: @relativeMini; /* Rounding Offset on Triangle */\n@ribbonTableOffset: ~\"calc(\"-@ribbonTableMargin~\" - \"@ribbonTriangleSize~\")\";\n@rightRibbonTableOffset:  ~\"calc(100% + \"@ribbonTableMargin~\" + \"@ribbonTriangleSize~\")\";\n\n\n/* Colors */\n@redTextColor: @white;\n@orangeTextColor: @white;\n@yellowTextColor: @white;\n@oliveTextColor: @white;\n@greenTextColor: @white;\n@tealTextColor: @white;\n@blueTextColor: @white;\n@violetTextColor: @white;\n@purpleTextColor: @white;\n@pinkTextColor: @white;\n@brownTextColor: @white;\n@greyTextColor: @white;\n@blackTextColor: @white;\n\n@redHoverTextColor: @white;\n@orangeHoverTextColor: @white;\n@yellowHoverTextColor: @white;\n@oliveHoverTextColor: @white;\n@greenHoverTextColor: @white;\n@tealHoverTextColor: @white;\n@blueHoverTextColor: @white;\n@violetHoverTextColor: @white;\n@purpleHoverTextColor: @white;\n@pinkHoverTextColor: @white;\n@brownHoverTextColor: @white;\n@greyHoverTextColor: @white;\n@blackHoverTextColor: @white;\n\n@redRibbonShadow: darken(@red, 10);\n@orangeRibbonShadow: darken(@orange, 10);\n@yellowRibbonShadow: darken(@yellow, 10);\n@oliveRibbonShadow: darken(@olive, 10);\n@greenRibbonShadow: darken(@green, 10);\n@tealRibbonShadow: darken(@teal, 10);\n@blueRibbonShadow: darken(@blue, 10);\n@violetRibbonShadow: darken(@violet, 10);\n@purpleRibbonShadow: darken(@purple, 10);\n@pinkRibbonShadow: darken(@pink, 10);\n@brownRibbonShadow: darken(@brown, 10);\n@greyRibbonShadow: darken(@grey, 10);\n@blackRibbonShadow: darken(@black, 10);\n\n/* Attached */\n@attachedSegmentPadding: 2rem;\n@attachedVerticalPadding: 0.75em;\n@attachedHorizontalPadding: 1em;\n\n@attachedCornerBorderRadius: @3px;\n@attachedBorderRadius: @borderRadius;\n\n/* Corner */\n@cornerSizeRatio: 1;\n@cornerTransition: color @labelTransitionDuration @labelTransitionEasing;\n@cornerTriangleSize: 4em;\n@cornerTriangleTransition: border-color @labelTransitionDuration @labelTransitionEasing;\n@cornerTriangleZIndex: 1;\n\n@cornerIconSize: @relativeLarge;\n@cornerIconTopOffset: @relative9px;\n@cornerIconLeftOffset: @relative11px;\n\n/* Corner Text */\n@cornerTextWidth: 3em;\n@cornerTextWeight: bold;\n@cornerTextSize: 1em;\n\n/* Horizontal */\n@horizontalLabelMinWidth: 3em;\n@horizontalLabelMargin: 0.5em;\n@horizontalLabelVerticalPadding: 0.4em;\n\n/* Circular Padding */\n@circularPadding: 0.5em;\n@circularMinSize: 2em;\n@emptyCircleSize: 0.5em;\n\n/* Pointing */\n@pointingBorderColor: inherit;\n@pointingBorderWidth: @borderWidth;\n@pointingVerticalDistance: 1em;\n@pointingTriangleSize: 0.6666em;\n@pointingHorizontalDistance: @pointingTriangleSize;\n\n@pointingTriangleTransition: background @labelTransitionDuration @labelTransitionEasing;\n@pointingTriangleZIndex: 2;\n\n/* Basic Pointing */\n@basicPointingTriangleOffset: -@pointingBorderWidth;\n\n/* Floating */\n@floatingTopOffset: -1em;\n@floatingLeftOffset: -1.5em;\n@floatingZIndex: 100;\n\n/*-------------------\n        Group\n--------------------*/\n\n/* Sizing */\n@mini    : @9px;\n@tiny    : @10px;\n@small   : @11px;\n@medium  : @12px;\n@large   : @absoluteMedium;\n@big     : @absoluteBig;\n@huge    : @absoluteHuge;\n@massive : @absoluteMassive;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/list.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/list.variables",
    "content": "/*******************************\n             List\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n/* List */\n@listStyleType: none;\n@listStylePosition: outside;\n@margin: 1em 0em;\n@verticalPadding: 0em;\n@horizontalPadding: 0em;\n\n/* List Item */\n@itemVerticalPadding: @relative3px;\n@itemHorizontalPadding: 0em;\n@itemPadding: @itemVerticalPadding @itemHorizontalPadding;\n@itemLineHeight: @relativeLarge;\n\n/* Sub List */\n@childListPadding: 0.75em 0em 0.25em 0.5em;\n@childListIndent: 1em;\n\n/* Sub List Item */\n@childItemVerticalPadding: @relative2px;\n@childItemHorizontalPadding: 0em;\n@childItemPadding: @childItemVerticalPadding @childItemHorizontalPadding;\n@childItemLineHeight: inherit;\n\n/*-------------------\n      Elements\n--------------------*/\n\n/* Icon */\n@iconDistance: @relative4px;\n@iconOffset: 0em;\n@iconTransition: color @defaultDuration @defaultEasing;\n@iconVerticalAlign: top;\n@iconContentVerticalAlign: top;\n\n/* Image */\n@imageDistance: 0.5em;\n@imageAlign: top;\n\n/* Content */\n@contentDistance: 0.5em;\n@contentLineHeight: @itemLineHeight;\n@contentLineHeightOffset: (@contentLineHeight - 1em) / 2;\n@contentVerticalAlign: top;\n\n/* Header */\n@itemHeaderFontFamily: @headerFont;\n@itemHeaderFontWeight: bold;\n@itemHeaderColor: @textColor;\n\n/* Description */\n@itemDescriptionColor: rgba(0, 0, 0, 0.7);\n\n/* Link */\n@itemLinkColor: @linkColor;\n@itemLinkHoverColor: @linkHoverColor;\n\n/* Header Link */\n@itemHeaderLinkColor: @itemLinkColor;\n@itemHeaderLinkHoverColor: @itemLinkHoverColor;\n\n/* Linked Icon */\n@itemLinkIconColor: @lightTextColor;\n@itemLinkIconHoverColor: @textColor;\n@invertedIconLinkColor: @invertedLightTextColor;\n\n/*-------------------\n        States\n--------------------*/\n\n@disabledColor: @disabledTextColor;\n@invertedDisabledColor: @invertedDisabledTextColor;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Float */\n@floatDistance: 1em;\n@leftFloatMargin: 0em @floatDistance 0em 0em;\n@rightFloatMargin: 0em 0em 0em @floatDistance;\n\n/* Horizontal */\n@horizontalSpacing: 1em;\n@horizontalIconDistance: 0.25em;\n@horizontalVerticalAlign: middle;\n\n/* Inverted */\n@invertedListIconColor: @invertedLightTextColor;\n@invertedHeaderColor: @invertedTextColor;\n@invertedDescriptionColor: @invertedLightTextColor;\n@invertedItemLinkColor: @invertedTextColor;\n@invertedItemLinkHoverColor: @linkHoverColor;\n\n/* Link List */\n@linkListItemColor: @unselectedTextColor;\n@linkListItemHoverColor: @hoveredTextColor;\n@linkListItemDownColor: @pressedTextColor;\n@linkListItemActiveColor: @selectedTextColor;\n@linkListTransition:\n  @defaultDuration color @defaultEasing\n;\n\n/* Inverted Link List */\n@invertedLinkListItemColor: @invertedUnselectedTextColor;\n@invertedLinkListItemHoverColor: @invertedHoveredTextColor;\n@invertedLinkListItemDownColor: @invertedPressedTextColor;\n@invertedLinkListItemActiveColor: @invertedSelectedTextColor;\n\n/* Selection List */\n@selectionListItemMargin: 0em;\n@selectionListItemBorderRadius: 0.5em;\n@selectionListItemVerticalPadding: 0.5em;\n@selectionListItemHorizontalPadding: 0.5em;\n@selectionListTransition:\n  @defaultDuration color @defaultEasing,\n  @defaultDuration padding-left @defaultEasing,\n  @defaultDuration background-color @defaultEasing\n;\n\n/* Selection List States */\n@selectionListBackground: transparent;\n@selectionListColor: @unselectedTextColor;\n@selectionListHoverBackground: @subtleTransparentBlack;\n@selectionListHoverColor: @hoveredTextColor;\n@selectionListDownBackground: @transparentBlack;\n@selectionListDownColor: @pressedTextColor;\n@selectionListActiveBackground: @transparentBlack;\n@selectionListActiveColor: @selectedTextColor;\n\n/* Inverted Selection List */\n@invertedSelectionListBackground: transparent;\n@invertedSelectionListColor: @invertedUnselectedTextColor;\n@invertedSelectionListHoverBackground: @subtleTransparentWhite;\n@invertedSelectionListHoverColor: @invertedHoveredTextColor;\n@invertedSelectionListDownBackground: @transparentWhite;\n@invertedSelectionListDownColor: @invertedPressedTextColor;\n@invertedSelectionListActiveBackground: @transparentWhite;\n@invertedSelectionListActiveColor: @invertedSelectedTextColor;\n\n/* Animated List */\n@animatedDuration: 0.25s;\n@animatedDelay: 0.1s;\n@animatedListTransition:\n  @animatedDuration color @defaultEasing @animatedDelay,\n  @animatedDuration padding-left @defaultEasing @animatedDelay,\n  @animatedDuration background-color @defaultEasing @animatedDelay\n;\n@animatedListIndent: 1em;\n\n/* Bulleted */\n@bulletDistance: 1.25rem;\n@bulletOffset: -@bulletDistance;\n\n@bulletOpacity: 1;\n@bulletCharacter: '•';\n@bulletColor: inherit;\n@bulletLinkColor: @textColor;\n@bulletVerticalAlign: top;\n@bulletChildDistance: @bulletDistance;\n\n/* Horizontal Bullets */\n@horizontalBulletColor: @textColor;\n@horizontalBulletSpacing: @bulletDistance + 0.5em;\n\n/* Ordered List */\n@orderedCountName: ordered;\n@orderedCountContent: counters(ordered, \".\") \" \";\n@orderedCountColor: @textColor;\n@orderedCountDistance: 1.25rem;\n@orderedCountOpacity: 0.8;\n@orderedCountTextAlign: right;\n@orderedCountVerticalAlign: middle;\n\n@orderedChildCountDistance: 1em;\n@orderedChildCountOffset: -2em;\n\n@orderedInvertedCountColor: @invertedLightTextColor;\n\n/* Horizontal Ordered */\n@horizontalOrderedCountDistance: 0.5em;\n\n/* Divided */\n@dividedBorderWidth: 1px;\n@dividedBorder: @dividedBorderWidth solid @borderColor;\n@dividedInvertedBorderColor: @whiteBorderColor;\n@dividedChildListBorder: none;\n@dividedChildItemBorder: none;\n\n/* Divided Horizontal */\n@horizontalDividedSpacing: (@horizontalSpacing / 2);\n@horizontalDividedLineHeight: 0.6;\n\n/* Divided */\n@celledBorderWidth: 1px;\n@celledBorder: @celledBorderWidth solid @borderColor;\n@celledInvertedBorder: @dividedBorderWidth solid @whiteBorderColor;\n@celledHorizontalPadding: 0.5em;\n@celledChildListBorder: none;\n@celledChildItemBorder: none;\n\n/* Divided Horizontal */\n@horizontalCelledSpacing: (@horizontalSpacing / 2);\n@horizontalCelledLineHeight: 0.6;\n\n/* Relaxed */\n@relaxedItemVerticalPadding: @relative6px;\n@relaxedChildItemVerticalPadding: @relative3px;\n@relaxedHeaderMargin: 0.25rem;\n@relaxedHorizontalPadding: 1rem;\n\n/* Very Relaxed */\n@veryRelaxedItemVerticalPadding: @relative12px;\n@veryRelaxedChildItemVerticalPadding: @relative4px;\n@veryRelaxedHeaderMargin: 0.5rem;\n@veryRelaxedHorizontalPadding: 1.5rem;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/loader.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/loader.variables",
    "content": "/*******************************\n             Loader\n*******************************/\n\n/* Some global loader styles defined in site.variables */\n// @loaderSpeed\n// @loaderLineWidth\n// @loaderFillColor\n// @loaderLineColor\n// @invertedLoaderFillColor\n// @invertedLoaderLineColor\n\n/*-------------------\n      Standard\n--------------------*/\n\n@loaderTopOffset: 50%;\n@loaderLeftOffset: 50%;\n\n@shapeBorderColor: @loaderLineColor transparent transparent;\n@invertedShapeBorderColor: @invertedLoaderLineColor transparent transparent;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Text */\n@textDistance: @relativeMini;\n@loaderTextColor: @textColor;\n@invertedLoaderTextColor: @invertedTextColor;\n\n/*-------------------\n        States\n--------------------*/\n\n@indeterminateDirection: reverse;\n@indeterminateSpeed: (2 * @loaderSpeed);\n\n/*-------------------\n      Variations\n--------------------*/\n\n@inlineVerticalAlign: middle;\n@inlineMargin: 0em;\n\n/* Exact Sizes (Avoids Rounding Errors) */\n@mini    : @14px;\n@tiny    : @16px;\n@small   : @24px;\n@medium  : @32px;\n@large   : @48px;\n@big     : @52px;\n@huge    : @58px;\n@massive : @64px;\n\n@miniOffset: 0em 0em 0em -(@mini / 2);\n@tinyOffset: 0em 0em 0em -(@tiny / 2);\n@smallOffset: 0em 0em 0em -(@small / 2);\n@mediumOffset: 0em 0em 0em -(@medium / 2);\n@largeOffset: 0em 0em 0em -(@large / 2);\n@bigOffset: 0em 0em 0em -(@big / 2);\n@hugeOffset: 0em 0em 0em -(@huge / 2);\n@massiveOffset: 0em 0em 0em -(@massive / 2);\n\n@tinyFontSize: @relativeTiny;\n@miniFontSize: @relativeMini;\n@smallFontSize: @relativeSmall;\n@mediumFontSize: @relativeMedium;\n@largeFontSize: @relativeLarge;\n@bigFontSize: @relativeBig;\n@hugeFontSize: @relativeHuge;\n@massiveFontSize: @relativeMassive;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/rail.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/rail.variables",
    "content": "/*******************************\n            Rail\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@width: 300px;\n@height: 100%;\n\n@distance: 4rem;\n@splitDistance: (@distance / 2);\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Close */\n@closeDistance: 2em;\n@veryCloseDistance: 1em;\n\n@splitCloseDistance: (@closeDistance / 2);\n@splitVeryCloseDistance: (@veryCloseDistance / 2);\n\n@closeWidth: ~\"calc(\"@width~\" + \"@splitCloseDistance~\")\";\n@veryCloseWidth: ~\"calc(\"@width~\" + \"@splitVeryCloseDistance~\")\";\n\n/* Dividing */\n@dividingBorder: 1px solid @borderColor;\n@dividingDistance: 5rem;\n@splitDividingDistance: (@dividingDistance / 2);\n@dividingWidth: @width + @splitDividingDistance;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/reveal.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/reveal.variables",
    "content": "/*******************************\n            Reveal\n*******************************/\n\n@transitionDelay: 0.1s;\n@transitionDuration: 0.5s;\n@transitionEasing: cubic-bezier(0.175, 0.885, 0.320, 1);\n@transition: all @transitionDuration @defaultEasing @transitionDelay;\n\n@bottomZIndex: 2;\n@topZIndex: 3;\n@activeZIndex: 4;\n\n/* Types */\n@rotateDegrees: 110deg;\n@moveTransition: transform @transitionDuration @transitionEasing @transitionDelay;\n@slideTransition: transform @transitionDuration @defaultEasing @transitionDelay;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/segment.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/segment.variables",
    "content": "/*******************************\n            Segment\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@background: @white;\n@borderWidth: 1px;\n@border: @borderWidth solid @borderColor;\n\n@boxShadow: @subtleShadow;\n@verticalPadding: 1em;\n@horizontalPadding: 1em;\n@padding: @verticalPadding @horizontalPadding;\n\n@verticalMargin: 1rem;\n@horizontalMargin: 0em;\n@margin: @verticalMargin @horizontalMargin;\n@borderRadius: @defaultBorderRadius;\n\n/*-------------------\n       Group\n--------------------*/\n\n@groupedMargin: @margin;\n@groupedBorder: @border;\n@groupedBoxShadow: @boxShadow;\n@groupedBorderRadius: @borderRadius;\n\n@nestedGroupMargin: @verticalMargin @verticalMargin;\n\n@groupedSegmentBorder: none;\n@groupedSegmentDivider: @border;\n@groupedSegmentMargin: 0em;\n@groupedSegmentWidth: auto;\n@groupedSegmentBoxShadow: none;\n\n/*-------------------\n       Coupling\n--------------------*/\n\n/* Page Grid Segment */\n@pageGridMargin: (2 * @verticalPadding);\n\n/*******************************\n            States\n*******************************/\n\n/* Loading Dimmer */\n@loaderDimmerColor: rgba(255, 255, 255, 0.8);\n@loaderDimmerZIndex: 100;\n\n/* Loading Spinner */\n@loaderSize: 3em;\n@loaderLineZIndex: 101;\n\n\n/*******************************\n            Variations\n*******************************/\n\n/* Piled */\n@piledZIndex: auto;\n@piledMargin: 3em;\n@piledBoxShadow: '';\n@piledDegrees: 1.2deg;\n@piledBorder: @border;\n\n/* Circular */\n@circularPadding: 2em;\n\n/* Stacked */\n@stackedHeight: 6px;\n@stackedPageBackground: @subtleTransparentBlack;\n@stackedPadding: @verticalPadding + (0.4em);\n@tallStackedPadding: @verticalPadding + (0.8em);\n\n/* Raised */\n@raisedBoxShadow: @floatingShadow;\n\n/* Padded */\n@paddedSegmentPadding: 1.5em;\n@veryPaddedSegmentPadding: 3em;\n\n/* Attached */\n@attachedTopOffset: 0px;\n@attachedBottomOffset: 0px;\n@attachedHorizontalOffset: -@borderWidth;\n@attachedWidth: ~\"calc(100% + \"-@attachedHorizontalOffset * 2~\")\";\n@attachedBoxShadow: none;\n@attachedBorder: @borderWidth solid @solidBorderColor;\n@attachedBottomBoxShadow:\n  @boxShadow,\n  @attachedBoxShadow\n;\n\n/* Inverted */\n@invertedBackground: @black;\n\n/* Floated */\n@floatedDistance: 1em;\n\n/* Basic */\n@basicBackground: none transparent;\n@basicBorder: none;\n@basicBoxShadow: none;\n@basicBorderRadius: 0px;\n\n/* Colors */\n@coloredBorderSize: 2px;\n\n/* Ordinality */\n@secondaryBackground: @darkWhite;\n@secondaryColor: @mutedTextColor;\n\n@tertiaryBackground:  @midWhite;\n@tertiaryColor: @mutedTextColor;\n\n@secondaryInvertedLightness: 0.2;\n@secondaryInvertedBackground:\n  lighten(@black, (@secondaryInvertedLightness * 100))\n  linear-gradient(\n    rgba(255, 255, 255, @secondaryInvertedLightness) 0%,\n    rgba(255, 255, 255, @secondaryInvertedLightness) 100%\n  )\n;\n@secondaryInvertedColor: @invertedMutedTextColor;\n\n@tertiaryInvertedLightness: 0.35;\n@tertiaryInvertedBackground:\n  lighten(@black, (@tertiaryInvertedLightness * 100))\n  linear-gradient(\n    rgba(255, 255, 255, @tertiaryInvertedLightness) 0%,\n    rgba(255, 255, 255, @tertiaryInvertedLightness) 100%\n  )\n;\n@tertiaryInvertedColor: @invertedMutedTextColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/step.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Step';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;;base64,AAEAAAAOAIAAAwBgT1MvMj3hSQEAAADsAAAAVmNtYXDQEhm3AAABRAAAAUpjdnQgBkn/lAAABuwAAAAcZnBnbYoKeDsAAAcIAAAJkWdhc3AAAAAQAAAG5AAAAAhnbHlm32cEdgAAApAAAAC2aGVhZAErPHsAAANIAAAANmhoZWEHUwNNAAADgAAAACRobXR4CykAAAAAA6QAAAAMbG9jYQA4AFsAAAOwAAAACG1heHAApgm8AAADuAAAACBuYW1lzJ0aHAAAA9gAAALNcG9zdK69QJgAAAaoAAAAO3ByZXCSoZr/AAAQnAAAAFYAAQO4AZAABQAIAnoCvAAAAIwCegK8AAAB4AAxAQIAAAIABQMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUGZFZABA6ADoAQNS/2oAWgMLAE8AAAABAAAAAAAAAAAAAwAAAAMAAAAcAAEAAAAAAEQAAwABAAAAHAAEACgAAAAGAAQAAQACAADoAf//AAAAAOgA//8AABgBAAEAAAAAAAAAAAEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAADpAKYABUAHEAZDwEAAQFCAAIBAmoAAQABagAAAGEUFxQDEisBFAcBBiInASY0PwE2Mh8BATYyHwEWA6QP/iAQLBD+6g8PTBAsEKQBbhAsEEwPAhYWEP4gDw8BFhAsEEwQEKUBbxAQTBAAAAH//f+xA18DCwAMABJADwABAQpDAAAACwBEFRMCESsBFA4BIi4CPgEyHgEDWXLG6MhuBnq89Lp+AV51xHR0xOrEdHTEAAAAAAEAAAABAADDeRpdXw889QALA+gAAAAAzzWYjQAAAADPNWBN//3/sQOkAwsAAAAIAAIAAAAAAAAAAQAAA1L/agBaA+gAAP/3A6QAAQAAAAAAAAAAAAAAAAAAAAMD6AAAA+gAAANZAAAAAAAAADgAWwABAAAAAwAWAAEAAAAAAAIABgATAG4AAAAtCZEAAAAAAAAAEgDeAAEAAAAAAAAANQAAAAEAAAAAAAEACAA1AAEAAAAAAAIABwA9AAEAAAAAAAMACABEAAEAAAAAAAQACABMAAEAAAAAAAUACwBUAAEAAAAAAAYACABfAAEAAAAAAAoAKwBnAAEAAAAAAAsAEwCSAAMAAQQJAAAAagClAAMAAQQJAAEAEAEPAAMAAQQJAAIADgEfAAMAAQQJAAMAEAEtAAMAAQQJAAQAEAE9AAMAAQQJAAUAFgFNAAMAAQQJAAYAEAFjAAMAAQQJAAoAVgFzAAMAAQQJAAsAJgHJQ29weXJpZ2h0IChDKSAyMDE0IGJ5IG9yaWdpbmFsIGF1dGhvcnMgQCBmb250ZWxsby5jb21mb250ZWxsb1JlZ3VsYXJmb250ZWxsb2ZvbnRlbGxvVmVyc2lvbiAxLjBmb250ZWxsb0dlbmVyYXRlZCBieSBzdmcydHRmIGZyb20gRm9udGVsbG8gcHJvamVjdC5odHRwOi8vZm9udGVsbG8uY29tAEMAbwBwAHkAcgBpAGcAaAB0ACAAKABDACkAIAAyADAAMQA0ACAAYgB5ACAAbwByAGkAZwBpAG4AYQBsACAAYQB1AHQAaABvAHIAcwAgAEAAIABmAG8AbgB0AGUAbABsAG8ALgBjAG8AbQBmAG8AbgB0AGUAbABsAG8AUgBlAGcAdQBsAGEAcgBmAG8AbgB0AGUAbABsAG8AZgBvAG4AdABlAGwAbABvAFYAZQByAHMAaQBvAG4AIAAxAC4AMABmAG8AbgB0AGUAbABsAG8ARwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABzAHYAZwAyAHQAdABmACAAZgByAG8AbQAgAEYAbwBuAHQAZQBsAGwAbwAgAHAAcgBvAGoAZQBjAHQALgBoAHQAdABwADoALwAvAGYAbwBuAHQAZQBsAGwAbwAuAGMAbwBtAAAAAAIAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAQIBAwljaGVja21hcmsGY2lyY2xlAAAAAAEAAf//AA8AAAAAAAAAAAAAAAAAAAAAADIAMgML/7EDC/+xsAAssCBgZi2wASwgZCCwwFCwBCZasARFW1ghIyEbilggsFBQWCGwQFkbILA4UFghsDhZWSCwCkVhZLAoUFghsApFILAwUFghsDBZGyCwwFBYIGYgiophILAKUFhgGyCwIFBYIbAKYBsgsDZQWCGwNmAbYFlZWRuwACtZWSOwAFBYZVlZLbACLCBFILAEJWFkILAFQ1BYsAUjQrAGI0IbISFZsAFgLbADLCMhIyEgZLEFYkIgsAYjQrIKAAIqISCwBkMgiiCKsAArsTAFJYpRWGBQG2FSWVgjWSEgsEBTWLAAKxshsEBZI7AAUFhlWS2wBCywB0MrsgACAENgQi2wBSywByNCIyCwACNCYbCAYrABYLAEKi2wBiwgIEUgsAJFY7ABRWJgRLABYC2wBywgIEUgsAArI7ECBCVgIEWKI2EgZCCwIFBYIbAAG7AwUFiwIBuwQFlZI7AAUFhlWbADJSNhRESwAWAtsAgssQUFRbABYUQtsAkssAFgICCwCUNKsABQWCCwCSNCWbAKQ0qwAFJYILAKI0JZLbAKLCC4BABiILgEAGOKI2GwC0NgIIpgILALI0IjLbALLEtUWLEHAURZJLANZSN4LbAMLEtRWEtTWLEHAURZGyFZJLATZSN4LbANLLEADENVWLEMDEOwAWFCsAorWbAAQ7ACJUKxCQIlQrEKAiVCsAEWIyCwAyVQWLEBAENgsAQlQoqKIIojYbAJKiEjsAFhIIojYbAJKiEbsQEAQ2CwAiVCsAIlYbAJKiFZsAlDR7AKQ0dgsIBiILACRWOwAUViYLEAABMjRLABQ7AAPrIBAQFDYEItsA4ssQAFRVRYALAMI0IgYLABYbUNDQEACwBCQopgsQ0FK7BtKxsiWS2wDyyxAA4rLbAQLLEBDistsBEssQIOKy2wEiyxAw4rLbATLLEEDistsBQssQUOKy2wFSyxBg4rLbAWLLEHDistsBcssQgOKy2wGCyxCQ4rLbAZLLAIK7EABUVUWACwDCNCIGCwAWG1DQ0BAAsAQkKKYLENBSuwbSsbIlktsBossQAZKy2wGyyxARkrLbAcLLECGSstsB0ssQMZKy2wHiyxBBkrLbAfLLEFGSstsCAssQYZKy2wISyxBxkrLbAiLLEIGSstsCMssQkZKy2wJCwgPLABYC2wJSwgYLANYCBDI7ABYEOwAiVhsAFgsCQqIS2wJiywJSuwJSotsCcsICBHICCwAkVjsAFFYmAjYTgjIIpVWCBHICCwAkVjsAFFYmAjYTgbIVktsCgssQAFRVRYALABFrAnKrABFTAbIlktsCkssAgrsQAFRVRYALABFrAnKrABFTAbIlktsCosIDWwAWAtsCssALADRWOwAUVisAArsAJFY7ABRWKwACuwABa0AAAAAABEPiM4sSoBFSotsCwsIDwgRyCwAkVjsAFFYmCwAENhOC2wLSwuFzwtsC4sIDwgRyCwAkVjsAFFYmCwAENhsAFDYzgtsC8ssQIAFiUgLiBHsAAjQrACJUmKikcjRyNhIFhiGyFZsAEjQrIuAQEVFCotsDAssAAWsAQlsAQlRyNHI2GwBkUrZYouIyAgPIo4LbAxLLAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjILAIQyCKI0cjRyNhI0ZgsARDsIBiYCCwACsgiophILACQ2BkI7ADQ2FkUFiwAkNhG7ADQ2BZsAMlsIBiYSMgILAEJiNGYTgbI7AIQ0awAiWwCENHI0cjYWAgsARDsIBiYCMgsAArI7AEQ2CwACuwBSVhsAUlsIBisAQmYSCwBCVgZCOwAyVgZFBYIRsjIVkjICCwBCYjRmE4WS2wMiywABYgICCwBSYgLkcjRyNhIzw4LbAzLLAAFiCwCCNCICAgRiNHsAArI2E4LbA0LLAAFrADJbACJUcjRyNhsABUWC4gPCMhG7ACJbACJUcjRyNhILAFJbAEJUcjRyNhsAYlsAUlSbACJWGwAUVjIyBYYhshWWOwAUViYCMuIyAgPIo4IyFZLbA1LLAAFiCwCEMgLkcjRyNhIGCwIGBmsIBiIyAgPIo4LbA2LCMgLkawAiVGUlggPFkusSYBFCstsDcsIyAuRrACJUZQWCA8WS6xJgEUKy2wOCwjIC5GsAIlRlJYIDxZIyAuRrACJUZQWCA8WS6xJgEUKy2wOSywMCsjIC5GsAIlRlJYIDxZLrEmARQrLbA6LLAxK4ogIDywBCNCijgjIC5GsAIlRlJYIDxZLrEmARQrsARDLrAmKy2wOyywABawBCWwBCYgLkcjRyNhsAZFKyMgPCAuIzixJgEUKy2wPCyxCAQlQrAAFrAEJbAEJSAuRyNHI2EgsAQjQrAGRSsgsGBQWCCwQFFYswIgAyAbswImAxpZQkIjIEewBEOwgGJgILAAKyCKimEgsAJDYGQjsANDYWRQWLACQ2EbsANDYFmwAyWwgGJhsAIlRmE4IyA8IzgbISAgRiNHsAArI2E4IVmxJgEUKy2wPSywMCsusSYBFCstsD4ssDErISMgIDywBCNCIzixJgEUK7AEQy6wJistsD8ssAAVIEewACNCsgABARUUEy6wLCotsEAssAAVIEewACNCsgABARUUEy6wLCotsEEssQABFBOwLSotsEIssC8qLbBDLLAAFkUjIC4gRoojYTixJgEUKy2wRCywCCNCsEMrLbBFLLIAADwrLbBGLLIAATwrLbBHLLIBADwrLbBILLIBATwrLbBJLLIAAD0rLbBKLLIAAT0rLbBLLLIBAD0rLbBMLLIBAT0rLbBNLLIAADkrLbBOLLIAATkrLbBPLLIBADkrLbBQLLIBATkrLbBRLLIAADsrLbBSLLIAATsrLbBTLLIBADsrLbBULLIBATsrLbBVLLIAAD4rLbBWLLIAAT4rLbBXLLIBAD4rLbBYLLIBAT4rLbBZLLIAADorLbBaLLIAATorLbBbLLIBADorLbBcLLIBATorLbBdLLAyKy6xJgEUKy2wXiywMiuwNistsF8ssDIrsDcrLbBgLLAAFrAyK7A4Ky2wYSywMysusSYBFCstsGIssDMrsDYrLbBjLLAzK7A3Ky2wZCywMyuwOCstsGUssDQrLrEmARQrLbBmLLA0K7A2Ky2wZyywNCuwNystsGgssDQrsDgrLbBpLLA1Ky6xJgEUKy2waiywNSuwNistsGsssDUrsDcrLbBsLLA1K7A4Ky2wbSwrsAhlsAMkUHiwARUwLQAAAEu4AMhSWLEBAY5ZuQgACABjILABI0SwAyNwsgQoCUVSRLIKAgcqsQYBRLEkAYhRWLBAiFixBgNEsSYBiFFYuAQAiFixBgFEWVlZWbgB/4WwBI2xBQBEAAA=) format('truetype'),\n    url(data:application/font-woff;charset=utf-8;base64,d09GRgABAAAAAAoUAA4AAAAAEPQAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABPUy8yAAABRAAAAEQAAABWPeFJAWNtYXAAAAGIAAAAOgAAAUrQEhm3Y3Z0IAAAAcQAAAAUAAAAHAZJ/5RmcGdtAAAB2AAABPkAAAmRigp4O2dhc3AAAAbUAAAACAAAAAgAAAAQZ2x5ZgAABtwAAACuAAAAtt9nBHZoZWFkAAAHjAAAADUAAAA2ASs8e2hoZWEAAAfEAAAAIAAAACQHUwNNaG10eAAAB+QAAAAMAAAADAspAABsb2NhAAAH8AAAAAgAAAAIADgAW21heHAAAAf4AAAAIAAAACAApgm8bmFtZQAACBgAAAF3AAACzcydGhxwb3N0AAAJkAAAACoAAAA7rr1AmHByZXAAAAm8AAAAVgAAAFaSoZr/eJxjYGTewTiBgZWBg6mKaQ8DA0MPhGZ8wGDIyMTAwMTAysyAFQSkuaYwOLxgeMHIHPQ/iyGKmZvBHyjMCJIDAPe9C2B4nGNgYGBmgGAZBkYGEHAB8hjBfBYGDSDNBqQZGZgYGF4w/v8PUvCCAURLMELVAwEjG8OIBwBk5AavAAB4nGNgQANGDEbM3P83gjAAELQD4XicnVXZdtNWFJU8ZHASOmSgoA7X3DhQ68qEKRgwaSrFdiEdHAitBB2kDHTkncc+62uOQrtWH/m07n09JLR0rbYsls++R1tn2DrnRhwjKn0aiGvUoZKXA6msPZZK90lc13Uvj5UMBnFdthJPSZuonSRKat3sUC7xWOsqWSdYJ+PlIFZPVZ5noAziFB5lSUQbRBuplyZJ4onjJ4kWZxAfJUkgJaMQp9LIUEI1GsRS1aFM6dCr1xNx00DKRqMedVhU90PFJ8c1p9SsA0YqVznCFevVRr4bpwMve5DEOsGzrYcxHnisfpQqkIqR6cg/dkpOlIaBVHHUoVbi6DCTX/eRTCrNQKaMYkWl7oG43f102xYxPXQ6vi5KlUaqurnOKJrt0fGogygP2cbppNzQ2fbw5RlTVKtdcbPtQGYNXErJbHSfRAAdJlLj6QFONZwCqRn1R8XZ588BEslclKo8VTKHegOZMzt7cTHtbiersnCknwcyb3Z2452HQ6dXh3/R+hdM4cxHj+Jifj5C+lBqfiJOJKVGWMzyp4YfcVcgQrkxiAsXyuBThDl0RdrZZl3jtTH2hs/5SqlhPQna6KP4fgr9TiQrHGdRo/VInM1j13Wt3GdQS7W7Fzsyr0OVIu7vCwuuM+eEYZ4WC1VfnvneBTT/Bohn/EDeNIVL+5YpSrRvm6JMu2iKCu0SVKVdNsUU7YoppmnPmmKG9h1TzNKeMzLj/8vc55H7HN7xkJv2XeSmfQ+5ad9HbtoPkJtWITdtHblpLyA3rUZu2lWjOnYEGgZpF1IVQdA0svph3Fab9UDWjDR8aWDyLmLI+upER521tcofxX914gsHcmmip7siF5viLq/bFj483e6rj5pG3bDV+MaR8jAeRnocmtBZ+c3hv+1N3S6a7jKqMugBFUwKwABl7UAC0zrbCaT1mqf48gdgXIZ4zkpDtVSfO4am7+V5X/exOfG+x+3GLrdcd3kJWdYNcmP28N9SZKrrH+UtrVQnR6wrJ49VaxhDKrwour6SlHu0tRu/KKmy8l6U1srnk5CbPYMbQlu27mGwI0xpyiUeXlOlKD3UUo6yQyxvKco84JSLC1qGxLgOdQ9qa8TpoXoYGwshhqG0vRBwSCldFd+0ynfxHqtr2Oj4xRXh6XpyEhGf4ir7UfBU10b96A7avGbdMoMpVaqn+4xPsa/b9lFZaaSOsxe3VAfXNOsaORXTT+Rr4HRvOGjdAz1UfDRBI1U1x+jGKGM0ljXl3wR0MVZ+w2jVYvs93E+dpFWsuUuY7JsT9+C0u/0q+7WcW0bW/dcGvW3kip8jMb8tCvw7B2K3ZA3UO5OBGAvIWdAYxhYmdxiug23EbfY/Jqf/34aFRXJXOxq7eerD1ZNRJXfZ8rjLTXZZ16M2R9VOGvsIjS0PN+bY4XIstsRgQbb+wf8x7gF3aVEC4NDIZZiI2nShnurh6h6rsW04VxIBds2x43QAegAuQd8cu9bzCYD13CPnLsB9cgh2yCH4lByCz8i5BfA5OQRfkEMwIIdgl5w7AA/IIXhIDsEeOQSPyNkE+JIcgq/IIYjJIUjIuQ3wmByCJ+QQfE0OwTdGrk5k/pYH2QD6zqKbQKmdGhzaOGRGrk3Y+zxY9oFFZB9aROqRkesT6lMeLPV7i0j9wSJSfzRyY0L9iQdL/dkiUn+xiNRnxpeZIymvDp7zjg7+BJfqrV4AAAAAAQAB//8AD3icY2BkAALmJUwzGEQZZBwk+RkZGBmdGJgYmbIYgMwsoGSiiLgIs5A2owg7I5uSOqOaiT2jmZE8I5gQY17C/09BQEfg3yt+fh8gvYQxD0j68DOJiQn8U+DnZxQDcQUEljLmCwBpBgbG/3//b2SOZ+Zm4GEQcuAH2sblDLSEm8FFVJhJEGgLH6OSHpMdo5EcI3Nk0bEXJ/LYqvZ82VXHGFd6pKTkyCsQwQAAq+QkqAAAeJxjYGRgYADiw5VSsfH8Nl8ZuJlfAEUYzpvO6IXQCb7///7fyLyEmRvI5WBgAokCAFb/DJAAAAB4nGNgZGBgDvqfxRDF/IKB4f935iUMQBEUwAwAi5YFpgPoAAAD6AAAA1kAAAAAAAAAOABbAAEAAAADABYAAQAAAAAAAgAGABMAbgAAAC0JkQAAAAB4nHWQy2rCQBSG//HSi0JbWui2sypKabxgN4IgWHTTbqS4LTHGJBIzMhkFX6Pv0IfpS/RZ+puMpShNmMx3vjlz5mQAXOMbAvnzxJGzwBmjnAs4Rc9ykf7Zcon8YrmMKt4sn9C/W67gAYHlKm7wwQqidM5ogU/LAlfi0nIBF+LOcpH+0XKJ3LNcxq14tXxC71muYCJSy1Xci6+BWm11FIRG1gZ12W62OnK6lYoqStxYumsTKp3KvpyrxPhxrBxPLfc89oN17Op9uJ8nvk4jlciW09yrkZ/42jX+bFc93QRtY+ZyrtVSDm2GXGm18D3jhMasuo3G3/MwgMIKW2hEvKoQBhI12jrnNppooUOaMkMyM8+KkMBFTONizR1htpIy7nPMGSW0PjNisgOP3+WRH5MC7o9ZRR+tHsYT0u6MKPOSfTns7jBrREqyTDezs9/eU2x4WpvWcNeuS511JTE8qCF5H7u1BY1H72S3Ymi7aPD95/9+AN1fhEsAeJxjYGKAAC4G7ICZgYGRiZGZMzkjNTk7N7Eomy05syg5J5WBAQBE1QZBAABLuADIUlixAQGOWbkIAAgAYyCwASNEsAMjcLIEKAlFUkSyCgIHKrEGAUSxJAGIUViwQIhYsQYDRLEmAYhRWLgEAIhYsQYBRFlZWVm4Af+FsASNsQUARAAA) format('woff')\n  ;\n}\n.ui.steps .step.completed > .icon:before,\n.ui.ordered.steps .step.completed:before {\n  font-family: 'Step';\n  content: '\\e800'; /* '' */\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/elements/step.variables",
    "content": "/*******************************\n             Step\n*******************************/\n\n/*-------------------\n       Group\n--------------------*/\n\n@stepMargin: 1em 0em;\n@stepsBorderRadius: @defaultBorderRadius;\n@stepsBackground: '';\n@stepsBoxShadow: none;\n@stepsBorder: 1px solid @borderColor;\n\n/*-------------------\n      Element\n--------------------*/\n\n@verticalMargin: 0em;\n@horizontalMargin: 0em;\n\n@arrowSize: @relativeLarge;\n@verticalPadding: @relativeLarge;\n@horizontalPadding: 2em;\n\n@transition:\n  background-color @defaultDuration @defaultEasing,\n  opacity @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing\n;\n@lineHeight: @relativeLarge;\n@alignItems: center;\n@justifyContent: center;\n@backgroundColor: @white;\n@background: @backgroundColor;\n@borderRadius: 0em;\n@borderWidth: 1px;\n@boxShadow: none;\n@border: none;\n@divider: @borderWidth solid @borderColor;\n\n/* Icon */\n@iconDistance: 1rem;\n@iconSize: 2.5em;\n@iconAlign: middle;\n\n/* Title */\n@titleFontFamily: @headerFont;\n@titleFontWeight: bold;\n@titleFontSize: @relativeLarge;\n@titleColor: @darkTextColor;\n\n/* Description */\n@descriptionDistance: 0.25em;\n@descriptionFontSize: @relativeSmall;\n@descriptionFontWeight: normal;\n@descriptionColor: @textColor;\n\n\n/* Arrow */\n@arrowBackgroundColor: @backgroundColor;\n@arrowTopOffset: 50%;\n@arrowRightOffset: 0%;\n@arrowBorderWidth: 0px @borderWidth @borderWidth 0px;\n\n@arrowDisplay: block;\n@lastArrowDisplay: none;\n\n@activeArrowDisplay: block;\n@activeLastArrowDisplay: none;\n\n/* Mobile */\n@mobileIconDistance: @iconDistance;\n\n/*-------------------\n       Types\n--------------------*/\n\n/* Vertical */\n@verticalDivider: @divider;\n@verticalArrowTopOffset: 50%;\n@verticalArrowRightOffset: 0%;\n@verticalArrowBorderWidth: 0px @borderWidth @borderWidth 0px;\n\n@verticalArrowDisplay: none;\n@verticalLastArrowDisplay: @verticalArrowDisplay;\n\n@verticalActiveArrowDisplay: block;\n@verticalActiveLastArrowDisplay: block;\n\n/*-------------------\n      Variations\n--------------------*/\n\n@attachedHorizontalOffset: -@borderWidth;\n@attachedVerticalOffset: 0;\n@attachedWidth: ~\"calc(100% + \"-@attachedHorizontalOffset * 2~\")\";\n\n@orderedFontFamily: inherit;\n@orderedFontWeight: bold;\n\n/*-------------------\n       States\n--------------------*/\n\n/* Completed */\n@completedColor: @positiveColor;\n\n/* Hover */\n@hoverBackground: @offWhite;\n@hoverColor: @hoveredTextColor;\n\n/* Down */\n@downBackground: @darkWhite;\n@downColor: @pressedTextColor;\n\n/* Active */\n@activeBackground: @darkWhite;\n@activeColor: @linkColor;\n@activeIconColor: @darkTextColor;\n\n/* Active + Hover */\n@activeHoverBackground: @lightGrey;\n@activeHoverColor: @textColor;\n\n\n/* Disabled */\n@disabledBackground: @background;\n@disabledColor: @disabledTextColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/globals/reset.overrides",
    "content": "/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */\n\n/* Document\n   ========================================================================== */\n\n/**\n * 1. Correct the line height in all browsers.\n * 2. Prevent adjustments of font size after orientation changes in\n *    IE on Windows Phone and in iOS.\n */\n\nhtml {\n  line-height: 1.15; /* 1 */\n  -ms-text-size-adjust: 100%; /* 2 */\n  -webkit-text-size-adjust: 100%; /* 2 */\n}\n\n/* Sections\n   ========================================================================== */\n\n/**\n * Remove the margin in all browsers (opinionated).\n */\n\nbody {\n  margin: 0;\n}\n\n/**\n * Add the correct display in IE 9-.\n */\n\narticle,\naside,\nfooter,\nheader,\nnav,\nsection {\n  display: block;\n}\n\n/**\n * Correct the font size and margin on `h1` elements within `section` and\n * `article` contexts in Chrome, Firefox, and Safari.\n */\n\nh1 {\n  font-size: 2em;\n  margin: 0.67em 0;\n}\n\n/* Grouping content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n * 1. Add the correct display in IE.\n */\n\nfigcaption,\nfigure,\nmain { /* 1 */\n  display: block;\n}\n\n/**\n * Add the correct margin in IE 8.\n */\n\nfigure {\n  margin: 1em 40px;\n}\n\n/**\n * 1. Add the correct box sizing in Firefox.\n * 2. Show the overflow in Edge and IE.\n */\n\nhr {\n  box-sizing: content-box; /* 1 */\n  height: 0; /* 1 */\n  overflow: visible; /* 2 */\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\npre {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/* Text-level semantics\n   ========================================================================== */\n\n/**\n * 1. Remove the gray background on active links in IE 10.\n * 2. Remove gaps in links underline in iOS 8+ and Safari 8+.\n */\n\na {\n  background-color: transparent; /* 1 */\n  -webkit-text-decoration-skip: objects; /* 2 */\n}\n\n/**\n * 1. Remove the bottom border in Chrome 57- and Firefox 39-.\n * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.\n */\n\nabbr[title] {\n  border-bottom: none; /* 1 */\n  text-decoration: underline; /* 2 */\n  text-decoration: underline dotted; /* 2 */\n}\n\n/**\n * Prevent the duplicate application of `bolder` by the next rule in Safari 6.\n */\n\nb,\nstrong {\n  font-weight: inherit;\n}\n\n/**\n * Add the correct font weight in Chrome, Edge, and Safari.\n */\n\nb,\nstrong {\n  font-weight: bolder;\n}\n\n/**\n * 1. Correct the inheritance and scaling of font size in all browsers.\n * 2. Correct the odd `em` font sizing in all browsers.\n */\n\ncode,\nkbd,\nsamp {\n  font-family: monospace, monospace; /* 1 */\n  font-size: 1em; /* 2 */\n}\n\n/**\n * Add the correct font style in Android 4.3-.\n */\n\ndfn {\n  font-style: italic;\n}\n\n/**\n * Add the correct background and color in IE 9-.\n */\n\nmark {\n  background-color: #ff0;\n  color: #000;\n}\n\n/**\n * Add the correct font size in all browsers.\n */\n\nsmall {\n  font-size: 80%;\n}\n\n/**\n * Prevent `sub` and `sup` elements from affecting the line height in\n * all browsers.\n */\n\nsub,\nsup {\n  font-size: 75%;\n  line-height: 0;\n  position: relative;\n  vertical-align: baseline;\n}\n\nsub {\n  bottom: -0.25em;\n}\n\nsup {\n  top: -0.5em;\n}\n\n/* Embedded content\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\naudio,\nvideo {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in iOS 4-7.\n */\n\naudio:not([controls]) {\n  display: none;\n  height: 0;\n}\n\n/**\n * Remove the border on images inside links in IE 10-.\n */\n\nimg {\n  border-style: none;\n}\n\n/**\n * Hide the overflow in IE.\n */\n\nsvg:not(:root) {\n  overflow: hidden;\n}\n\n/* Forms\n   ========================================================================== */\n\n/**\n * 1. Change the font styles in all browsers (opinionated).\n * 2. Remove the margin in Firefox and Safari.\n */\n\nbutton,\ninput,\noptgroup,\nselect,\ntextarea {\n  font-family: sans-serif; /* 1 */\n  font-size: 100%; /* 1 */\n  line-height: 1.15; /* 1 */\n  margin: 0; /* 2 */\n}\n\n/**\n * Show the overflow in IE.\n * 1. Show the overflow in Edge.\n */\n\nbutton,\ninput { /* 1 */\n  overflow: visible;\n}\n\n/**\n * Remove the inheritance of text transform in Edge, Firefox, and IE.\n * 1. Remove the inheritance of text transform in Firefox.\n */\n\nbutton,\nselect { /* 1 */\n  text-transform: none;\n}\n\n/**\n * 1. Prevent a WebKit bug where (2) destroys native `audio` and `video`\n *    controls in Android 4.\n * 2. Correct the inability to style clickable types in iOS and Safari.\n */\n\nbutton,\nhtml [type=\"button\"], /* 1 */\n[type=\"reset\"],\n[type=\"submit\"] {\n  -webkit-appearance: button; /* 2 */\n}\n\n/**\n * Remove the inner border and padding in Firefox.\n */\n\nbutton::-moz-focus-inner,\n[type=\"button\"]::-moz-focus-inner,\n[type=\"reset\"]::-moz-focus-inner,\n[type=\"submit\"]::-moz-focus-inner {\n  border-style: none;\n  padding: 0;\n}\n\n/**\n * Restore the focus styles unset by the previous rule.\n */\n\nbutton:-moz-focusring,\n[type=\"button\"]:-moz-focusring,\n[type=\"reset\"]:-moz-focusring,\n[type=\"submit\"]:-moz-focusring {\n  outline: 1px dotted ButtonText;\n}\n\n/**\n * Correct the padding in Firefox.\n */\n\nfieldset {\n  padding: 0.35em 0.75em 0.625em;\n}\n\n/**\n * 1. Correct the text wrapping in Edge and IE.\n * 2. Correct the color inheritance from `fieldset` elements in IE.\n * 3. Remove the padding so developers are not caught out when they zero out\n *    `fieldset` elements in all browsers.\n */\n\nlegend {\n  box-sizing: border-box; /* 1 */\n  color: inherit; /* 2 */\n  display: table; /* 1 */\n  max-width: 100%; /* 1 */\n  padding: 0; /* 3 */\n  white-space: normal; /* 1 */\n}\n\n/**\n * 1. Add the correct display in IE 9-.\n * 2. Add the correct vertical alignment in Chrome, Firefox, and Opera.\n */\n\nprogress {\n  display: inline-block; /* 1 */\n  vertical-align: baseline; /* 2 */\n}\n\n/**\n * Remove the default vertical scrollbar in IE.\n */\n\ntextarea {\n  overflow: auto;\n}\n\n/**\n * 1. Add the correct box sizing in IE 10-.\n * 2. Remove the padding in IE 10-.\n */\n\n[type=\"checkbox\"],\n[type=\"radio\"] {\n  box-sizing: border-box; /* 1 */\n  padding: 0; /* 2 */\n}\n\n/**\n * Correct the cursor style of increment and decrement buttons in Chrome.\n */\n\n[type=\"number\"]::-webkit-inner-spin-button,\n[type=\"number\"]::-webkit-outer-spin-button {\n  height: auto;\n}\n\n/**\n * 1. Correct the odd appearance in Chrome and Safari.\n * 2. Correct the outline style in Safari.\n */\n\n[type=\"search\"] {\n  -webkit-appearance: textfield; /* 1 */\n  outline-offset: -2px; /* 2 */\n}\n\n/**\n * Remove the inner padding and cancel buttons in Chrome and Safari on macOS.\n */\n\n[type=\"search\"]::-webkit-search-cancel-button,\n[type=\"search\"]::-webkit-search-decoration {\n  -webkit-appearance: none;\n}\n\n/**\n * 1. Correct the inability to style clickable types in iOS and Safari.\n * 2. Change font properties to `inherit` in Safari.\n */\n\n::-webkit-file-upload-button {\n  -webkit-appearance: button; /* 1 */\n  font: inherit; /* 2 */\n}\n\n/* Interactive\n   ========================================================================== */\n\n/*\n * Add the correct display in IE 9-.\n * 1. Add the correct display in Edge, IE, and Firefox.\n */\n\ndetails, /* 1 */\nmenu {\n  display: block;\n}\n\n/*\n * Add the correct display in all browsers.\n */\n\nsummary {\n  display: list-item;\n}\n\n/* Scripting\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 9-.\n */\n\ncanvas {\n  display: inline-block;\n}\n\n/**\n * Add the correct display in IE.\n */\n\ntemplate {\n  display: none;\n}\n\n/* Hidden\n   ========================================================================== */\n\n/**\n * Add the correct display in IE 10-.\n */\n\n[hidden] {\n  display: none;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/globals/reset.variables",
    "content": "/*******************************\n             Reset\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/globals/site.overrides",
    "content": "/*******************************\n        Global Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/globals/site.variables",
    "content": "/*******************************\n         Site Settings\n*******************************/\n\n/*-------------------\n       Fonts\n--------------------*/\n\n@fontName          : 'Lato';\n@fontSmoothing     : antialiased;\n\n@headerFont        : @fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif;\n@pageFont          : @fontName, 'Helvetica Neue', Arial, Helvetica, sans-serif;\n\n@googleFontName    : @fontName;\n@importGoogleFonts : true;\n@googleFontSizes   : '400,700,400italic,700italic';\n@googleSubset      : 'latin';\n\n@googleProtocol    : 'https://';\n@googleFontRequest : '@{googleFontName}:@{googleFontSizes}&subset=@{googleSubset}';\n\n/*-------------------\n      Base Sizes\n--------------------*/\n\n/* This is the single variable that controls them all */\n@emSize   : 14px;\n\n/* The size of page text  */\n@fontSize : 14px;\n\n\n/*-------------------\n    Border Radius\n--------------------*/\n\n/* See Power-user section below\n   for explanation of @px variables\n*/\n@relativeBorderRadius: @relative4px;\n@absoluteBorderRadius: @4px;\n\n@defaultBorderRadius: @absoluteBorderRadius;\n\n/*-------------------\n    Brand Colors\n--------------------*/\n\n@primaryColor        : @blue;\n@secondaryColor      : @black;\n\n@lightPrimaryColor   : @lightBlue;\n@lightSecondaryColor : @lightBlack;\n\n/*--------------\n  Page Heading\n---------------*/\n\n@headerFontWeight : bold;\n@headerLineHeight : unit((18 / 14), em);\n\n@h1 : unit((28 / 14), rem);\n@h2 : unit((24 / 14), rem);\n@h3 : unit((18 / 14), rem);\n@h4 : unit((15 / 14), rem);\n@h5 : unit((14 / 14), rem);\n\n/*--------------\n   Form Input\n---------------*/\n\n/* This adjusts the default form input across all elements */\n@inputBackground        : @white;\n@inputVerticalPadding   : @relative11px;\n@inputHorizontalPadding : @relative14px;\n@inputPadding           : @inputVerticalPadding @inputHorizontalPadding;\n\n/* Input Text Color */\n@inputColor: @textColor;\n@inputPlaceholderColor: lighten(@inputColor, 75);\n@inputPlaceholderFocusColor: lighten(@inputColor, 45);\n\n/* Line Height Default For Inputs in Browser (Descendors are 17px at 14px base em) */\n@inputLineHeight: unit((17 / 14), em);\n\n/*-------------------\n    Focused Input\n--------------------*/\n\n/* Used on inputs, textarea etc */\n@focusedFormBorderColor: #85B7D9;\n\n/* Used on dropdowns, other larger blocks */\n@focusedFormMutedBorderColor: #96C8DA;\n\n/*-------------------\n        Sizes\n--------------------*/\n\n/*\n  Sizes are all expressed in terms of 14px/em (default em)\n  This ensures these \"ratios\" remain constant despite changes in EM\n*/\n\n@miniSize        : (11 / 14);\n@tinySize        : (12 / 14);\n@smallSize       : (13 / 14);\n@mediumSize      : (14 / 14);\n@largeSize       : (16 / 14);\n@bigSize         : (18 / 14);\n@hugeSize        : (20 / 14);\n@massiveSize     : (24 / 14);\n\n\n/*-------------------\n        Page\n--------------------*/\n\n@pageBackground      : #FFFFFF;\n@pageOverflowX       : hidden;\n\n@lineHeight          : 1.4285em;\n@textColor           : rgba(0, 0, 0, 0.87);\n\n/*-------------------\n      Paragraph\n--------------------*/\n\n@paragraphMargin     : 0em 0em 1em;\n@paragraphLineHeight : @lineHeight;\n\n/*-------------------\n       Links\n--------------------*/\n\n@linkColor           : #4183C4;\n@linkUnderline       : none;\n@linkHoverColor      : darken(saturate(@linkColor, 20), 15, relative);\n@linkHoverUnderline  : @linkUnderline;\n\n/*-------------------\n    Scroll Bars\n--------------------*/\n\n@useCustomScrollbars: true;\n\n@customScrollbarWidth: 10px;\n\n@trackBackground: rgba(0, 0, 0, 0.1);\n@trackBorderRadius: 0px;\n\n@thumbBorderRadius: 5px;\n@thumbBackground: rgba(0, 0, 0, 0.25);\n@thumbTransition: color 0.2s ease;\n\n@thumbInactiveBackground: rgba(0, 0, 0, 0.15);\n@thumbHoverBackground: rgba(128, 135, 139, 0.8);\n\n/* Inverted */\n@trackInvertedBackground: rgba(255, 255, 255, 0.1);\n@thumbInvertedBackground: rgba(255, 255, 255, 0.25);\n@thumbInvertedInactiveBackground: rgba(255, 255, 255, 0.15);\n@thumbInvertedHoverBackground: rgba(255, 255, 255, 0.35);\n\n/*-------------------\n  Highlighted Text\n--------------------*/\n\n@highlightBackground      : #CCE2FF;\n@highlightColor           : @textColor;\n\n@inputHighlightBackground : rgba(100, 100, 100, 0.4);\n@inputHighlightColor      : @textColor;\n\n\n/*-------------------\n       Loader\n--------------------*/\n\n@loaderSize              : @relativeBig;\n@loaderSpeed             : 0.6s;\n@loaderLineWidth         : 0.2em;\n@loaderFillColor         : rgba(0, 0, 0, 0.1);\n@loaderLineColor         : @grey;\n\n@invertedLoaderFillColor : rgba(255, 255, 255, 0.15);\n@invertedLoaderLineColor : @white;\n\n/*-------------------\n        Grid\n--------------------*/\n\n@columnCount: 16;\n\n/*-------------------\n     Transitions\n--------------------*/\n\n@defaultDuration : 0.1s;\n@defaultEasing   : ease;\n\n/*-------------------\n     Breakpoints\n--------------------*/\n\n@mobileBreakpoint            : 320px;\n@tabletBreakpoint            : 768px;\n@computerBreakpoint          : 992px;\n@largeMonitorBreakpoint      : 1200px;\n@widescreenMonitorBreakpoint : 1920px;\n\n/*-------------------\n      Site Colors\n--------------------*/\n\n/*---  Colors  ---*/\n@red              : #DB2828;\n@orange           : #F2711C;\n@yellow           : #FBBD08;\n@olive            : #B5CC18;\n@green            : #21BA45;\n@teal             : #00B5AD;\n@blue             : #2185D0;\n@violet           : #6435C9;\n@purple           : #A333C8;\n@pink             : #E03997;\n@brown            : #A5673F;\n@grey             : #767676;\n@black            : #1B1C1D;\n\n/*---  Light Colors  ---*/\n@lightRed         : #FF695E;\n@lightOrange      : #FF851B;\n@lightYellow      : #FFE21F;\n@lightOlive       : #D9E778;\n@lightGreen       : #2ECC40;\n@lightTeal        : #6DFFFF;\n@lightBlue        : #54C8FF;\n@lightViolet      : #A291FB;\n@lightPurple      : #DC73FF;\n@lightPink        : #FF8EDF;\n@lightBrown       : #D67C1C;\n@lightGrey        : #DCDDDE;\n@lightBlack       : #545454;\n\n/*---   Neutrals  ---*/\n@fullBlack        : #000000;\n@offWhite         : #F9FAFB;\n@darkWhite        : #F3F4F5;\n@midWhite         : #DCDDDE;\n@white            : #FFFFFF;\n\n/*--- Colored Backgrounds ---*/\n@redBackground    : #FFE8E6;\n@orangeBackground : #FFEDDE;\n@yellowBackground : #FFF8DB;\n@oliveBackground  : #FBFDEF;\n@greenBackground  : #E5F9E7;\n@tealBackground   : #E1F7F7;\n@blueBackground   : #DFF0FF;\n@violetBackground : #EAE7FF;\n@purpleBackground : #F6E7FF;\n@pinkBackground   : #FFE3FB;\n@brownBackground  : #F1E2D3;\n\n/*--- Colored Headers ---*/\n@redHeaderColor    : darken(@redTextColor, 5);\n@oliveHeaderColor  : darken(@oliveTextColor, 5);\n@greenHeaderColor  : darken(@greenTextColor, 5);\n@yellowHeaderColor : darken(@yellowTextColor, 5);\n@blueHeaderColor   : darken(@blueTextColor, 5);\n@tealHeaderColor   : darken(@tealTextColor, 5);\n@pinkHeaderColor   : darken(@pinkTextColor, 5);\n@violetHeaderColor : darken(@violetTextColor, 5);\n@purpleHeaderColor : darken(@purpleTextColor, 5);\n@orangeHeaderColor : darken(@orangeTextColor, 5);\n@brownHeaderColor  : darken(@brownTextColor, 5);\n\n/*--- Colored Text ---*/\n@redTextColor    : @red;\n@orangeTextColor : @orange;\n@yellowTextColor : #B58105; // Yellow text is difficult to read\n@oliveTextColor  : #8ABC1E; // Olive is difficult to read\n@greenTextColor  : #1EBC30; // Green is difficult to read\n@tealTextColor   : #10A3A3; // Teal text is difficult to read\n@blueTextColor   : @blue;\n@violetTextColor : @violet;\n@purpleTextColor : @purple;\n@pinkTextColor   : @pink;\n@brownTextColor  : @brown;\n\n/*--- Colored Border ---*/\n@redBorderColor    : @redTextColor;\n@orangeBorderColor : @orangeTextColor;\n@yellowBorderColor : @yellowTextColor;\n@oliveBorderColor  : @oliveTextColor;\n@greenBorderColor  : @greenTextColor;\n@tealBorderColor   : @tealTextColor;\n@blueBorderColor   : @blueTextColor;\n@violetBorderColor : @violetTextColor;\n@purpleBorderColor : @purpleTextColor;\n@pinkBorderColor   : @pinkTextColor;\n@brownBorderColor  : @brownTextColor;\n\n/*-------------------\n     Alpha Colors\n--------------------*/\n\n@subtleTransparentBlack     : rgba(0, 0, 0, 0.03);\n@transparentBlack           : rgba(0, 0, 0, 0.05);\n@strongTransparentBlack     : rgba(0, 0, 0, 0.10);\n@veryStrongTransparentBlack : rgba(0, 0, 0, 0.15);\n\n@subtleTransparentWhite     : rgba(255, 255, 255, 0.02);\n@transparentWhite           : rgba(255, 255, 255, 0.08);\n@strongTransparentWhite     : rgba(255, 255, 255, 0.15);\n\n/*-------------------\n       Accents\n--------------------*/\n\n/* Differentiating Neutrals */\n@subtleGradient: linear-gradient(transparent, @transparentBlack);\n\n/* Differentiating Layers */\n@subtleShadow:\n  0px 1px 2px 0 @borderColor\n;\n@floatingShadow:\n  0px 2px 4px 0px rgba(34, 36, 38, 0.12),\n  0px 2px 10px 0px rgba(34, 36, 38, 0.15)\n;\n\n/*******************************\n           Power-User\n*******************************/\n\n\n/*-------------------\n    Emotive Colors\n--------------------*/\n\n/* Positive */\n@positiveColor           : @green;\n@positiveBackgroundColor : #FCFFF5;\n@positiveBorderColor     : #A3C293;\n@positiveHeaderColor     : #1A531B;\n@positiveTextColor       : #2C662D;\n\n/* Negative */\n@negativeColor           : @red;\n@negativeBackgroundColor : #FFF6F6;\n@negativeBorderColor     : #E0B4B4;\n@negativeHeaderColor     : #912D2B;\n@negativeTextColor       : #9F3A38;\n\n/* Info */\n@infoColor              : #31CCEC;\n@infoBackgroundColor    : #F8FFFF;\n@infoBorderColor        : #A9D5DE;\n@infoHeaderColor        : #0E566C;\n@infoTextColor          : #276F86;\n\n/* Warning */\n@warningColor           : #F2C037;\n@warningBorderColor     : #C9BA9B;\n@warningBackgroundColor : #FFFAF3;\n@warningHeaderColor     : #794B02;\n@warningTextColor       : #573A08;\n\n/*-------------------\n        Paths\n--------------------*/\n\n/* For source only. Modified in gulp for dist */\n@imagePath : '../../themes/default/assets/images';\n@fontPath  : '../../themes/default/assets/fonts';\n\n/*-------------------\n       Em Sizes\n--------------------*/\n\n/*\n  This rounds @size values to the closest pixel then expresses that value in (r)em.\n  This ensures all size values round to exact pixels\n*/\n@mini            : unit( round(@miniSize * @emSize) / @emSize, rem);\n@tiny            : unit( round(@tinySize * @emSize) / @emSize, rem);\n@small           : unit( round(@smallSize * @emSize) / @emSize, rem);\n@medium          : unit( round(@mediumSize * @emSize) / @emSize, rem);\n@large           : unit( round(@largeSize * @emSize) / @emSize, rem);\n@big             : unit( round(@bigSize * @emSize) / @emSize, rem);\n@huge            : unit( round(@hugeSize * @emSize) / @emSize, rem);\n@massive         : unit( round(@massiveSize * @emSize) / @emSize, rem);\n\n/* em */\n@relativeMini    : unit( round(@miniSize * @emSize) / @emSize, em);\n@relativeTiny    : unit( round(@tinySize * @emSize) / @emSize, em);\n@relativeSmall   : unit( round(@smallSize * @emSize) / @emSize, em);\n@relativeMedium  : unit( round(@mediumSize * @emSize) / @emSize, em);\n@relativeLarge   : unit( round(@largeSize * @emSize) / @emSize, em);\n@relativeBig     : unit( round(@bigSize * @emSize) / @emSize, em);\n@relativeHuge    : unit( round(@hugeSize * @emSize) / @emSize, em);\n@relativeMassive : unit( round(@massiveSize * @emSize) / @emSize, em);\n\n/* rem */\n@absoluteMini    : unit( round(@miniSize * @emSize) / @emSize, rem);\n@absoluteTiny    : unit( round(@tinySize * @emSize) / @emSize, rem);\n@absoluteSmall   : unit( round(@smallSize * @emSize) / @emSize, rem);\n@absoluteMedium  : unit( round(@mediumSize * @emSize) / @emSize, rem);\n@absoluteLarge   : unit( round(@largeSize * @emSize) / @emSize, rem);\n@absoluteBig     : unit( round(@bigSize * @emSize) / @emSize, rem);\n@absoluteHuge    : unit( round(@hugeSize * @emSize) / @emSize, rem);\n@absoluteMassive : unit( round(@massiveSize * @emSize) / @emSize, rem);\n\n/*-------------------\n       Icons\n--------------------*/\n\n/* Maximum Glyph Width of Icon */\n@iconWidth : 1.18em;\n\n/*-------------------\n     Neutral Text\n--------------------*/\n\n@darkTextColor               : rgba(0, 0, 0, 0.85);\n@mutedTextColor              : rgba(0, 0, 0, 0.6);\n@lightTextColor              : rgba(0, 0, 0, 0.4);\n\n@unselectedTextColor         : rgba(0, 0, 0, 0.4);\n@hoveredTextColor            : rgba(0, 0, 0, 0.8);\n@pressedTextColor            : rgba(0, 0, 0, 0.9);\n@selectedTextColor           : rgba(0, 0, 0, 0.95);\n@disabledTextColor           : rgba(0, 0, 0, 0.2);\n\n@invertedTextColor           : rgba(255, 255, 255, 0.9);\n@invertedMutedTextColor      : rgba(255, 255, 255, 0.8);\n@invertedLightTextColor      : rgba(255, 255, 255, 0.7);\n@invertedUnselectedTextColor : rgba(255, 255, 255, 0.5);\n@invertedHoveredTextColor    : rgba(255, 255, 255, 1);\n@invertedPressedTextColor    : rgba(255, 255, 255, 1);\n@invertedSelectedTextColor   : rgba(255, 255, 255, 1);\n@invertedDisabledTextColor   : rgba(255, 255, 255, 0.2);\n\n/*-------------------\n     Brand Colors\n--------------------*/\n\n@facebookColor   : #3B5998;\n@twitterColor    : #55ACEE;\n@googlePlusColor : #DD4B39;\n@linkedInColor   : #1F88BE;\n@youtubeColor    : #CC181E;\n@pinterestColor  : #BD081C;\n@vkColor         : #4D7198;\n@instagramColor  : #49769C;\n\n/*-------------------\n      Borders\n--------------------*/\n\n@circularRadius                : 500rem;\n\n@borderColor               : rgba(34, 36, 38, 0.15);\n@strongBorderColor         : rgba(34, 36, 38, 0.22);\n@internalBorderColor       : rgba(34, 36, 38, 0.1);\n@selectedBorderColor       : rgba(34, 36, 38, 0.35);\n@strongSelectedBorderColor : rgba(34, 36, 38, 0.5);\n@disabledBorderColor       : rgba(34, 36, 38, 0.5);\n\n@solidInternalBorderColor  : #FAFAFA;\n@solidBorderColor          : #D4D4D5;\n@solidSelectedBorderColor  : #BCBDBD;\n\n@whiteBorderColor              : rgba(255, 255, 255, 0.1);\n@selectedWhiteBorderColor      : rgba(255, 255, 255, 0.8);\n\n@solidWhiteBorderColor         : #555555;\n@selectedSolidWhiteBorderColor : #999999;\n\n\n/*-------------------\n    Derived Values\n--------------------*/\n\n/* Loaders Position Offset */\n@loaderOffset : -(@loaderSize / 2);\n@loaderMargin : @loaderOffset 0em 0em @loaderOffset;\n\n/* Rendered Scrollbar Width */\n@scrollbarWidth: 17px;\n\n/* Maximum Single Character Glyph Width, aka Capital \"W\" */\n@glyphWidth: 1.1em;\n\n/* Used to match floats with text */\n@lineHeightOffset       : ((@lineHeight - 1em) / 2);\n@headerLineHeightOffset : (@headerLineHeight - 1em) / 2;\n\n/* Header Spacing */\n@headerTopMargin    : ~\"calc(2rem - \"@headerLineHeightOffset~\")\";\n@headerBottomMargin : 1rem;\n@headerMargin       : @headerTopMargin 0em @headerBottomMargin;\n\n/* Minimum Mobile Width */\n@pageMinWidth       : 320px;\n\n/* Positive / Negative Dupes */\n@successBackgroundColor : @positiveBackgroundColor;\n@successColor           : @positiveColor;\n@successBorderColor     : @positiveBorderColor;\n@successHeaderColor     : @positiveHeaderColor;\n@successTextColor       : @positiveTextColor;\n\n@errorBackgroundColor   : @negativeBackgroundColor;\n@errorColor             : @negativeColor;\n@errorBorderColor       : @negativeBorderColor;\n@errorHeaderColor       : @negativeHeaderColor;\n@errorTextColor         : @negativeTextColor;\n\n\n/* Responsive */\n@largestMobileScreen : (@tabletBreakpoint - 1px);\n@largestTabletScreen : (@computerBreakpoint - 1px);\n@largestSmallMonitor : (@largeMonitorBreakpoint - 1px);\n@largestLargeMonitor : (@widescreenMonitorBreakpoint - 1px);\n\n\n/*-------------------\n  Exact Pixel Values\n--------------------*/\n/*\n  These are used to specify exact pixel values in em\n  for things like borders that remain constantly\n  sized as emSize adjusts\n\n  Since there are many more sizes than names for sizes,\n  these are named by their original pixel values.\n\n*/\n\n@1px  : unit( (1 / @emSize), rem);\n@2px  : unit( (2 / @emSize), rem);\n@3px  : unit( (3 / @emSize), rem);\n@4px  : unit( (4 / @emSize), rem);\n@5px  : unit( (5 / @emSize), rem);\n@6px  : unit( (6 / @emSize), rem);\n@7px  : unit( (7 / @emSize), rem);\n@8px  : unit( (8 / @emSize), rem);\n@9px  : unit( (9 / @emSize), rem);\n@10px : unit( (10 / @emSize), rem);\n@11px : unit( (11 / @emSize), rem);\n@12px : unit( (12 / @emSize), rem);\n@13px : unit( (13 / @emSize), rem);\n@14px : unit( (14 / @emSize), rem);\n@15px : unit( (15 / @emSize), rem);\n@16px : unit( (16 / @emSize), rem);\n@17px : unit( (17 / @emSize), rem);\n@18px : unit( (18 / @emSize), rem);\n@19px : unit( (19 / @emSize), rem);\n@20px : unit( (20 / @emSize), rem);\n@21px : unit( (21 / @emSize), rem);\n@22px : unit( (22 / @emSize), rem);\n@23px : unit( (23 / @emSize), rem);\n@24px : unit( (24 / @emSize), rem);\n@25px : unit( (25 / @emSize), rem);\n@26px : unit( (26 / @emSize), rem);\n@27px : unit( (27 / @emSize), rem);\n@28px : unit( (28 / @emSize), rem);\n@29px : unit( (29 / @emSize), rem);\n@30px : unit( (30 / @emSize), rem);\n@31px : unit( (31 / @emSize), rem);\n@32px : unit( (32 / @emSize), rem);\n@33px : unit( (33 / @emSize), rem);\n@34px : unit( (34 / @emSize), rem);\n@35px : unit( (35 / @emSize), rem);\n@36px : unit( (36 / @emSize), rem);\n@37px : unit( (37 / @emSize), rem);\n@38px : unit( (38 / @emSize), rem);\n@39px : unit( (39 / @emSize), rem);\n@40px : unit( (40 / @emSize), rem);\n@41px : unit( (41 / @emSize), rem);\n@42px : unit( (42 / @emSize), rem);\n@43px : unit( (43 / @emSize), rem);\n@44px : unit( (44 / @emSize), rem);\n@45px : unit( (45 / @emSize), rem);\n@46px : unit( (46 / @emSize), rem);\n@47px : unit( (47 / @emSize), rem);\n@48px : unit( (48 / @emSize), rem);\n@49px : unit( (49 / @emSize), rem);\n@50px : unit( (50 / @emSize), rem);\n@51px : unit( (51 / @emSize), rem);\n@52px : unit( (52 / @emSize), rem);\n@53px : unit( (53 / @emSize), rem);\n@54px : unit( (54 / @emSize), rem);\n@55px : unit( (55 / @emSize), rem);\n@56px : unit( (56 / @emSize), rem);\n@57px : unit( (57 / @emSize), rem);\n@58px : unit( (58 / @emSize), rem);\n@59px : unit( (59 / @emSize), rem);\n@60px : unit( (60 / @emSize), rem);\n@61px : unit( (61 / @emSize), rem);\n@62px : unit( (62 / @emSize), rem);\n@63px : unit( (63 / @emSize), rem);\n@64px : unit( (64 / @emSize), rem);\n\n@relative1px  : unit( (1 / @emSize), em);\n@relative2px  : unit( (2 / @emSize), em);\n@relative3px  : unit( (3 / @emSize), em);\n@relative4px  : unit( (4 / @emSize), em);\n@relative5px  : unit( (5 / @emSize), em);\n@relative6px  : unit( (6 / @emSize), em);\n@relative7px  : unit( (7 / @emSize), em);\n@relative8px  : unit( (8 / @emSize), em);\n@relative9px  : unit( (9 / @emSize), em);\n@relative10px : unit( (10 / @emSize), em);\n@relative11px : unit( (11 / @emSize), em);\n@relative12px : unit( (12 / @emSize), em);\n@relative13px : unit( (13 / @emSize), em);\n@relative14px : unit( (14 / @emSize), em);\n@relative15px : unit( (15 / @emSize), em);\n@relative16px : unit( (16 / @emSize), em);\n@relative17px : unit( (17 / @emSize), em);\n@relative18px : unit( (18 / @emSize), em);\n@relative19px : unit( (19 / @emSize), em);\n@relative20px : unit( (20 / @emSize), em);\n@relative21px : unit( (21 / @emSize), em);\n@relative22px : unit( (22 / @emSize), em);\n@relative23px : unit( (23 / @emSize), em);\n@relative24px : unit( (24 / @emSize), em);\n@relative25px : unit( (25 / @emSize), em);\n@relative26px : unit( (26 / @emSize), em);\n@relative27px : unit( (27 / @emSize), em);\n@relative28px : unit( (28 / @emSize), em);\n@relative29px : unit( (29 / @emSize), em);\n@relative30px : unit( (30 / @emSize), em);\n@relative31px : unit( (31 / @emSize), em);\n@relative32px : unit( (32 / @emSize), em);\n@relative33px : unit( (33 / @emSize), em);\n@relative34px : unit( (34 / @emSize), em);\n@relative35px : unit( (35 / @emSize), em);\n@relative36px : unit( (36 / @emSize), em);\n@relative37px : unit( (37 / @emSize), em);\n@relative38px : unit( (38 / @emSize), em);\n@relative39px : unit( (39 / @emSize), em);\n@relative40px : unit( (40 / @emSize), em);\n@relative41px : unit( (41 / @emSize), em);\n@relative42px : unit( (42 / @emSize), em);\n@relative43px : unit( (43 / @emSize), em);\n@relative44px : unit( (44 / @emSize), em);\n@relative45px : unit( (45 / @emSize), em);\n@relative46px : unit( (46 / @emSize), em);\n@relative47px : unit( (47 / @emSize), em);\n@relative48px : unit( (48 / @emSize), em);\n@relative49px : unit( (49 / @emSize), em);\n@relative50px : unit( (50 / @emSize), em);\n@relative51px : unit( (51 / @emSize), em);\n@relative52px : unit( (52 / @emSize), em);\n@relative53px : unit( (53 / @emSize), em);\n@relative54px : unit( (54 / @emSize), em);\n@relative55px : unit( (55 / @emSize), em);\n@relative56px : unit( (56 / @emSize), em);\n@relative57px : unit( (57 / @emSize), em);\n@relative58px : unit( (58 / @emSize), em);\n@relative59px : unit( (59 / @emSize), em);\n@relative60px : unit( (60 / @emSize), em);\n@relative61px : unit( (61 / @emSize), em);\n@relative62px : unit( (62 / @emSize), em);\n@relative63px : unit( (63 / @emSize), em);\n@relative64px : unit( (64 / @emSize), em);\n\n/* Columns */\n@oneWide        : (1 / @columnCount * 100%);\n@twoWide        : (2 / @columnCount * 100%);\n@threeWide      : (3 / @columnCount * 100%);\n@fourWide       : (4 / @columnCount * 100%);\n@fiveWide       : (5 / @columnCount * 100%);\n@sixWide        : (6 / @columnCount * 100%);\n@sevenWide      : (7 / @columnCount * 100%);\n@eightWide      : (8 / @columnCount * 100%);\n@nineWide       : (9 / @columnCount * 100%);\n@tenWide        : (10 / @columnCount * 100%);\n@elevenWide     : (11 / @columnCount * 100%);\n@twelveWide     : (12 / @columnCount * 100%);\n@thirteenWide   : (13 / @columnCount * 100%);\n@fourteenWide   : (14 / @columnCount * 100%);\n@fifteenWide    : (15 / @columnCount * 100%);\n@sixteenWide    : (16 / @columnCount * 100%);\n\n@oneColumn      : (1 / 1 * 100%);\n@twoColumn      : (1 / 2 * 100%);\n@threeColumn    : (1 / 3 * 100%);\n@fourColumn     : (1 / 4 * 100%);\n@fiveColumn     : (1 / 5 * 100%);\n@sixColumn      : (1 / 6 * 100%);\n@sevenColumn    : (1 / 7 * 100%);\n@eightColumn    : (1 / 8 * 100%);\n@nineColumn     : (1 / 9 * 100%);\n@tenColumn      : (1 / 10 * 100%);\n@elevenColumn   : (1 / 11 * 100%);\n@twelveColumn   : (1 / 12 * 100%);\n@thirteenColumn : (1 / 13 * 100%);\n@fourteenColumn : (1 / 14 * 100%);\n@fifteenColumn  : (1 / 15 * 100%);\n@sixteenColumn  : (1 / 16 * 100%);\n\n\n/*******************************\n             States\n*******************************/\n\n/*-------------------\n      Disabled\n--------------------*/\n\n@disabledOpacity: 0.45;\n@disabledTextColor: rgba(40, 40, 40, 0.3);\n@invertedDisabledTextColor: rgba(225, 225, 225, 0.3);\n\n/*-------------------\n        Hover\n--------------------*/\n\n/*---  Shadows  ---*/\n@floatingShadowHover:\n  0px 2px 4px 0px rgba(34, 36, 38, 0.15),\n  0px 2px 10px 0px rgba(34, 36, 38, 0.25)\n;\n\n/*---  Colors  ---*/\n@primaryColorHover    : saturate(darken(@primaryColor, 5), 10, relative);\n@secondaryColorHover  : saturate(lighten(@secondaryColor, 5), 10, relative);\n\n@redHover             : saturate(darken(@red, 5), 10, relative);\n@orangeHover          : saturate(darken(@orange, 5), 10, relative);\n@yellowHover          : saturate(darken(@yellow, 5), 10, relative);\n@oliveHover           : saturate(darken(@olive, 5), 10, relative);\n@greenHover           : saturate(darken(@green, 5), 10, relative);\n@tealHover            : saturate(darken(@teal, 5), 10, relative);\n@blueHover            : saturate(darken(@blue, 5), 10, relative);\n@violetHover          : saturate(darken(@violet, 5), 10, relative);\n@purpleHover          : saturate(darken(@purple, 5), 10, relative);\n@pinkHover            : saturate(darken(@pink, 5), 10, relative);\n@brownHover           : saturate(darken(@brown, 5), 10, relative);\n\n@lightRedHover        : saturate(darken(@lightRed, 5), 10, relative);\n@lightOrangeHover     : saturate(darken(@lightOrange, 5), 10, relative);\n@lightYellowHover     : saturate(darken(@lightYellow, 5), 10, relative);\n@lightOliveHover      : saturate(darken(@lightOlive, 5), 10, relative);\n@lightGreenHover      : saturate(darken(@lightGreen, 5), 10, relative);\n@lightTealHover       : saturate(darken(@lightTeal, 5), 10, relative);\n@lightBlueHover       : saturate(darken(@lightBlue, 5), 10, relative);\n@lightVioletHover     : saturate(darken(@lightViolet, 5), 10, relative);\n@lightPurpleHover     : saturate(darken(@lightPurple, 5), 10, relative);\n@lightPinkHover       : saturate(darken(@lightPink, 5), 10, relative);\n@lightBrownHover      : saturate(darken(@lightBrown, 5), 10, relative);\n@lightGreyHover       : saturate(darken(@lightGrey, 5), 10, relative);\n@lightBlackHover      : saturate(darken(@fullBlack, 5), 10, relative);\n\n/*---  Emotive  ---*/\n@positiveColorHover   : saturate(darken(@positiveColor, 5), 10, relative);\n@negativeColorHover   : saturate(darken(@negativeColor, 5), 10, relative);\n\n/*---  Brand   ---*/\n@facebookHoverColor   : saturate(darken(@facebookColor, 5), 10, relative);\n@twitterHoverColor    : saturate(darken(@twitterColor, 5), 10, relative);\n@googlePlusHoverColor : saturate(darken(@googlePlusColor, 5), 10, relative);\n@linkedInHoverColor   : saturate(darken(@linkedInColor, 5), 10, relative);\n@youtubeHoverColor    : saturate(darken(@youtubeColor, 5), 10, relative);\n@instagramHoverColor  : saturate(darken(@instagramColor, 5), 10, relative);\n@pinterestHoverColor  : saturate(darken(@pinterestColor, 5), 10, relative);\n@vkHoverColor         : saturate(darken(@vkColor, 5), 10, relative);\n\n/*---  Dark Tones  ---*/\n@fullBlackHover       : lighten(@fullBlack, 5);\n@blackHover           : lighten(@black, 5);\n@greyHover            : lighten(@grey, 5);\n\n/*---  Light Tones  ---*/\n@whiteHover           : darken(@white, 5);\n@offWhiteHover        : darken(@offWhite, 5);\n@darkWhiteHover       : darken(@darkWhite, 5);\n\n/*-------------------\n        Focus\n--------------------*/\n\n/*---  Colors  ---*/\n@primaryColorFocus    : saturate(darken(@primaryColor, 8), 20, relative);\n@secondaryColorFocus  : saturate(lighten(@secondaryColor, 8), 20, relative);\n\n@redFocus             : saturate(darken(@red, 8), 20, relative);\n@orangeFocus          : saturate(darken(@orange, 8), 20, relative);\n@yellowFocus          : saturate(darken(@yellow, 8), 20, relative);\n@oliveFocus           : saturate(darken(@olive, 8), 20, relative);\n@greenFocus           : saturate(darken(@green, 8), 20, relative);\n@tealFocus            : saturate(darken(@teal, 8), 20, relative);\n@blueFocus            : saturate(darken(@blue, 8), 20, relative);\n@violetFocus          : saturate(darken(@violet, 8), 20, relative);\n@purpleFocus          : saturate(darken(@purple, 8), 20, relative);\n@pinkFocus            : saturate(darken(@pink, 8), 20, relative);\n@brownFocus           : saturate(darken(@brown, 8), 20, relative);\n\n@lightRedFocus        : saturate(darken(@lightRed, 8), 20, relative);\n@lightOrangeFocus     : saturate(darken(@lightOrange, 8), 20, relative);\n@lightYellowFocus     : saturate(darken(@lightYellow, 8), 20, relative);\n@lightOliveFocus      : saturate(darken(@lightOlive, 8), 20, relative);\n@lightGreenFocus      : saturate(darken(@lightGreen, 8), 20, relative);\n@lightTealFocus       : saturate(darken(@lightTeal, 8), 20, relative);\n@lightBlueFocus       : saturate(darken(@lightBlue, 8), 20, relative);\n@lightVioletFocus     : saturate(darken(@lightViolet, 8), 20, relative);\n@lightPurpleFocus     : saturate(darken(@lightPurple, 8), 20, relative);\n@lightPinkFocus       : saturate(darken(@lightPink, 8), 20, relative);\n@lightBrownFocus      : saturate(darken(@lightBrown, 8), 20, relative);\n@lightGreyFocus       : saturate(darken(@lightGrey, 8), 20, relative);\n@lightBlackFocus      : saturate(darken(@fullBlack, 8), 20, relative);\n\n/*---  Emotive  ---*/\n@positiveColorFocus   : saturate(darken(@positiveColor, 8), 20, relative);\n@negativeColorFocus   : saturate(darken(@negativeColor, 8), 20, relative);\n\n/*---  Brand   ---*/\n@facebookFocusColor   : saturate(darken(@facebookColor, 8), 20, relative);\n@twitterFocusColor    : saturate(darken(@twitterColor, 8), 20, relative);\n@googlePlusFocusColor : saturate(darken(@googlePlusColor, 8), 20, relative);\n@linkedInFocusColor   : saturate(darken(@linkedInColor, 8), 20, relative);\n@youtubeFocusColor    : saturate(darken(@youtubeColor, 8), 20, relative);\n@instagramFocusColor  : saturate(darken(@instagramColor, 8), 20, relative);\n@pinterestFocusColor  : saturate(darken(@pinterestColor, 8), 20, relative);\n@vkFocusColor         : saturate(darken(@vkColor, 8), 20, relative);\n\n/*---  Dark Tones  ---*/\n@fullBlackFocus       : lighten(@fullBlack, 8);\n@blackFocus           : lighten(@black, 8);\n@greyFocus            : lighten(@grey, 8);\n\n/*---  Light Tones  ---*/\n@whiteFocus           : darken(@white, 8);\n@offWhiteFocus        : darken(@offWhite, 8);\n@darkWhiteFocus       : darken(@darkWhite, 8);\n\n\n/*-------------------\n    Down (:active)\n--------------------*/\n\n/*---  Colors  ---*/\n@primaryColorDown    : darken(@primaryColor, 10);\n@secondaryColorDown  : lighten(@secondaryColor, 10);\n\n@redDown             : darken(@red, 10);\n@orangeDown          : darken(@orange, 10);\n@yellowDown          : darken(@yellow, 10);\n@oliveDown           : darken(@olive, 10);\n@greenDown           : darken(@green, 10);\n@tealDown            : darken(@teal, 10);\n@blueDown            : darken(@blue, 10);\n@violetDown          : darken(@violet, 10);\n@purpleDown          : darken(@purple, 10);\n@pinkDown            : darken(@pink, 10);\n@brownDown           : darken(@brown, 10);\n\n@lightRedDown        : darken(@lightRed, 10);\n@lightOrangeDown     : darken(@lightOrange, 10);\n@lightYellowDown     : darken(@lightYellow, 10);\n@lightOliveDown      : darken(@lightOlive, 10);\n@lightGreenDown      : darken(@lightGreen, 10);\n@lightTealDown       : darken(@lightTeal, 10);\n@lightBlueDown       : darken(@lightBlue, 10);\n@lightVioletDown     : darken(@lightViolet, 10);\n@lightPurpleDown     : darken(@lightPurple, 10);\n@lightPinkDown       : darken(@lightPink, 10);\n@lightBrownDown      : darken(@lightBrown, 10);\n@lightGreyDown       : darken(@lightGrey, 10);\n@lightBlackDown      : darken(@fullBlack, 10);\n\n/*---  Emotive  ---*/\n@positiveColorDown   : darken(@positiveColor, 10);\n@negativeColorDown   : darken(@negativeColor, 10);\n\n/*---  Brand   ---*/\n@facebookDownColor   : darken(@facebookColor, 10);\n@twitterDownColor    : darken(@twitterColor, 10);\n@googlePlusDownColor : darken(@googlePlusColor, 10);\n@linkedInDownColor   : darken(@linkedInColor, 10);\n@youtubeDownColor    : darken(@youtubeColor, 10);\n@instagramDownColor  : darken(@instagramColor, 10);\n@pinterestDownColor  : darken(@pinterestColor, 10);\n@vkDownColor         : darken(@vkColor, 10);\n\n/*---  Dark Tones  ---*/\n@fullBlackDown       : lighten(@fullBlack, 10);\n@blackDown           : lighten(@black, 10);\n@greyDown            : lighten(@grey, 10);\n\n/*---  Light Tones  ---*/\n@whiteDown           : darken(@white, 10);\n@offWhiteDown        : darken(@offWhite, 10);\n@darkWhiteDown       : darken(@darkWhite, 10);\n\n\n/*-------------------\n        Active\n--------------------*/\n\n/*---  Colors  ---*/\n@primaryColorActive    : saturate(darken(@primaryColor, 5), 15, relative);\n@secondaryColorActive  : saturate(lighten(@secondaryColor, 5), 15, relative);\n\n@redActive             : saturate(darken(@red, 5), 15, relative);\n@orangeActive          : saturate(darken(@orange, 5), 15, relative);\n@yellowActive          : saturate(darken(@yellow, 5), 15, relative);\n@oliveActive           : saturate(darken(@olive, 5), 15, relative);\n@greenActive           : saturate(darken(@green, 5), 15, relative);\n@tealActive            : saturate(darken(@teal, 5), 15, relative);\n@blueActive            : saturate(darken(@blue, 5), 15, relative);\n@violetActive          : saturate(darken(@violet, 5), 15, relative);\n@purpleActive          : saturate(darken(@purple, 5), 15, relative);\n@pinkActive            : saturate(darken(@pink, 5), 15, relative);\n@brownActive           : saturate(darken(@brown, 5), 15, relative);\n\n@lightRedActive        : saturate(darken(@lightRed, 5), 15, relative);\n@lightOrangeActive     : saturate(darken(@lightOrange, 5), 15, relative);\n@lightYellowActive     : saturate(darken(@lightYellow, 5), 15, relative);\n@lightOliveActive      : saturate(darken(@lightOlive, 5), 15, relative);\n@lightGreenActive      : saturate(darken(@lightGreen, 5), 15, relative);\n@lightTealActive       : saturate(darken(@lightTeal, 5), 15, relative);\n@lightBlueActive       : saturate(darken(@lightBlue, 5), 15, relative);\n@lightVioletActive     : saturate(darken(@lightViolet, 5), 15, relative);\n@lightPurpleActive     : saturate(darken(@lightPurple, 5), 15, relative);\n@lightPinkActive       : saturate(darken(@lightPink, 5), 15, relative);\n@lightBrownActive      : saturate(darken(@lightBrown, 5), 15, relative);\n@lightGreyActive       : saturate(darken(@lightGrey, 5), 15, relative);\n@lightBlackActive      : saturate(darken(@fullBlack, 5), 15, relative);\n\n/*---  Emotive  ---*/\n@positiveColorActive   : saturate(darken(@positiveColor, 5), 15, relative);\n@negativeColorActive   : saturate(darken(@negativeColor, 5), 15, relative);\n\n/*---  Brand   ---*/\n@facebookActiveColor   : saturate(darken(@facebookColor, 5), 15, relative);\n@twitterActiveColor    : saturate(darken(@twitterColor, 5), 15, relative);\n@googlePlusActiveColor : saturate(darken(@googlePlusColor, 5), 15, relative);\n@linkedInActiveColor   : saturate(darken(@linkedInColor, 5), 15, relative);\n@youtubeActiveColor    : saturate(darken(@youtubeColor, 5), 15, relative);\n@instagramActiveColor  : saturate(darken(@instagramColor, 5), 15, relative);\n@pinterestActiveColor  : saturate(darken(@pinterestColor, 5), 15, relative);\n@vkActiveColor         : saturate(darken(@vkColor, 5), 15, relative);\n\n/*---  Dark Tones  ---*/\n@fullBlackActive       : darken(@fullBlack, 5);\n@blackActive           : darken(@black, 5);\n@greyActive            : darken(@grey, 5);\n\n/*---  Light Tones  ---*/\n@whiteActive           : darken(@white, 5);\n@offWhiteActive        : darken(@offWhite, 5);\n@darkWhiteActive       : darken(@darkWhite, 5);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/accordion.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n@font-face {\n  font-family: 'Accordion';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfOIKAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zryj6HgAAAFwAAAAyGhlYWT/0IhHAAACOAAAADZoaGVhApkB5wAAAnAAAAAkaG10eAJuABIAAAKUAAAAGGxvY2EAjABWAAACrAAAAA5tYXhwAAgAFgAAArwAAAAgbmFtZfC1n04AAALcAAABPHBvc3QAAwAAAAAEGAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQASAEkAtwFuABMAADc0PwE2FzYXFh0BFAcGJwYvASY1EgaABQgHBQYGBQcIBYAG2wcGfwcBAQcECf8IBAcBAQd/BgYAAAAAAQAAAEkApQFuABMAADcRNDc2MzIfARYVFA8BBiMiJyY1AAUGBwgFgAYGgAUIBwYFWwEACAUGBoAFCAcFgAYGBQcAAAABAAAAAQAAqWYls18PPPUACwIAAAAAAM/9o+4AAAAAz/2j7gAAAAAAtwFuAAAACAACAAAAAAAAAAEAAAHg/+AAAAIAAAAAAAC3AAEAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAQAAAAC3ABIAtwAAAAAAAAAKABQAHgBCAGQAAAABAAAABgAUAAEAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype'),\n    url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAASwAAoAAAAABGgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAS0AAAEtFpovuE9TLzIAAAIkAAAAYAAAAGAIIweQY21hcAAAAoQAAABMAAAATA984gpnYXNwAAAC0AAAAAgAAAAIAAAAEGhlYWQAAALYAAAANgAAADb/0IhHaGhlYQAAAxAAAAAkAAAAJAKZAedobXR4AAADNAAAABgAAAAYAm4AEm1heHAAAANMAAAABgAAAAYABlAAbmFtZQAAA1QAAAE8AAABPPC1n05wb3N0AAAEkAAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLa/iU+HQFHQAAAHkPHQAAAH4RHQAAAAkdAAABJBIABwEBBw0PERQZHnJhdGluZ3JhdGluZ3UwdTF1MjB1RjBEOXVGMERBAAACAYkABAAGAQEEBwoNVp38lA78lA78lA77lA773Z33bxWLkI2Qj44I9xT3FAWOj5CNkIuQi4+JjoePiI2Gi4YIi/uUBYuGiYeHiIiHh4mGi4aLho2Ijwj7FPcUBYeOiY+LkAgO+92L5hWL95QFi5CNkI6Oj4+PjZCLkIuQiY6HCPcU+xQFj4iNhouGi4aJh4eICPsU+xQFiIeGiYaLhouHjYePiI6Jj4uQCA74lBT4lBWLDAoAAAAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDZ//3//wAB/+MPKwADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAADfYOJZfDzz1AAsCAAAAAADP/aPuAAAAAM/9o+4AAAAAALcBbgAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAAAtwABAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAAAAAAAAEAAAAAtwASALcAAAAAUAAABgAAAAAADgCuAAEAAAAAAAEADAAAAAEAAAAAAAIADgBAAAEAAAAAAAMADAAiAAEAAAAAAAQADABOAAEAAAAAAAUAFgAMAAEAAAAAAAYABgAuAAEAAAAAAAoANABaAAMAAQQJAAEADAAAAAMAAQQJAAIADgBAAAMAAQQJAAMADAAiAAMAAQQJAAQADABOAAMAAQQJAAUAFgAMAAMAAQQJAAYADAA0AAMAAQQJAAoANABaAHIAYQB0AGkAbgBnAFYAZQByAHMAaQBvAG4AIAAxAC4AMAByAGEAdABpAG4AZ3JhdGluZwByAGEAdABpAG4AZwBSAGUAZwB1AGwAYQByAHIAYQB0AGkAbgBnAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')\n  ;\n  font-weight: normal;\n  font-style: normal;\n}\n\n/* Dropdown Icon */\n.ui.accordion .title .dropdown.icon,\n.ui.accordion .accordion .title .dropdown.icon {\n  font-family: Accordion;\n  line-height: 1;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.accordion .title .dropdown.icon:before,\n.ui.accordion .accordion .title .dropdown.icon:before {\n  content: '\\f0da'/*rtl:'\\f0d9'*/;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/accordion.variables",
    "content": "/*******************************\n           Accordion\n*******************************/\n\n@boxShadow: none;\n\n/* Title */\n@titleFont: @headerFont;\n@titlePadding: 0.5em 0em;\n@titleFontSize: 1em;\n@titleColor: @textColor;\n\n/* Icon */\n@iconOpacity: 1;\n@iconFontSize: 1em;\n@iconFloat: none;\n@iconWidth: 1.25em;\n@iconHeight: 1em;\n@iconDisplay: inline-block;\n@iconMargin: 0em 0.25rem 0em 0rem;\n@iconPadding: 0em;\n@iconTransition:\n  transform @defaultDuration @defaultEasing,\n  opacity @defaultDuration @defaultEasing\n;\n@iconVerticalAlign: baseline;\n@iconTransform: none;\n\n/* Child Accordion */\n@childAccordionMargin: 1em 0em 0em;\n@childAccordionPadding: 0em;\n\n/* Content */\n@contentMargin: '';\n@contentPadding: 0.5em 0em 1em;\n\n/*-------------------\n       Coupling\n--------------------*/\n\n@menuTitlePadding: 0em;\n@menuIconFloat: right;\n@menuIconMargin: @lineHeightOffset 0em 0em 1em;\n@menuIconTransform: rotate(180deg);\n\n\n/*-------------------\n       States\n--------------------*/\n\n@activeIconTransform: rotate(90deg);\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Styled */\n@styledWidth: 600px;\n@styledBackground: @white;\n@styledBorderRadius: @defaultBorderRadius;\n@styledBoxShadow:\n  @subtleShadow,\n  0px 0px 0px 1px @borderColor\n;\n\n/* Content */\n@styledContentMargin: 0em;\n@styledContentPadding: 0.5em 1em 1.5em;\n\n/* Child Content */\n@styledChildContentMargin: 0em;\n@styledChildContentPadding: @styledContentPadding;\n\n/* Styled Title */\n@styledTitleMargin: 0em;\n@styledTitlePadding: 0.75em 1em;\n@styledTitleFontWeight: bold;\n@styledTitleColor: @unselectedTextColor;\n@styledTitleTransition: background-color @defaultDuration @defaultEasing;\n@styledTitleBorder: 1px solid @borderColor;\n@styledTitleTransition:\n  background @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing\n;\n\n/* Styled Title States */\n@styledTitleHoverBackground: transparent;\n@styledTitleHoverColor: @textColor;\n@styledActiveTitleBackground: transparent;\n@styledActiveTitleColor: @selectedTextColor;\n\n/* Styled Child Title States */\n@styledHoverChildTitleBackground: @styledTitleHoverBackground;\n@styledHoverChildTitleColor: @styledTitleHoverColor;\n@styledActiveChildTitleBackground: @styledActiveTitleBackground;\n@styledActiveChildTitleColor: @styledActiveTitleColor;\n\n/* Inverted */\n@invertedTitleColor: @invertedTextColor;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/chatroom.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/chatroom.variables",
    "content": "/*******************************\n            Chatroom\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/checkbox.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Checkbox';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMg8SBD8AAAC8AAAAYGNtYXAYVtCJAAABHAAAAFRnYXNwAAAAEAAAAXAAAAAIZ2x5Zn4huwUAAAF4AAABYGhlYWQGPe1ZAAAC2AAAADZoaGVhB30DyAAAAxAAAAAkaG10eBBKAEUAAAM0AAAAHGxvY2EAmgESAAADUAAAABBtYXhwAAkALwAAA2AAAAAgbmFtZSC8IugAAAOAAAABknBvc3QAAwAAAAAFFAAAACAAAwMTAZAABQAAApkCzAAAAI8CmQLMAAAB6wAzAQkAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADoAgPA/8AAQAPAAEAAAAABAAAAAAAAAAAAAAAgAAAAAAADAAAAAwAAABwAAQADAAAAHAADAAEAAAAcAAQAOAAAAAoACAACAAIAAQAg6AL//f//AAAAAAAg6AD//f//AAH/4xgEAAMAAQAAAAAAAAAAAAAAAQAB//8ADwABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAEUAUQO7AvgAGgAAARQHAQYjIicBJjU0PwE2MzIfAQE2MzIfARYVA7sQ/hQQFhcQ/uMQEE4QFxcQqAF2EBcXEE4QAnMWEP4UEBABHRAXFhBOEBCoAXcQEE4QFwAAAAABAAABbgMlAkkAFAAAARUUBwYjISInJj0BNDc2MyEyFxYVAyUQEBf9SRcQEBAQFwK3FxAQAhJtFxAQEBAXbRcQEBAQFwAAAAABAAAASQMlA24ALAAAARUUBwYrARUUBwYrASInJj0BIyInJj0BNDc2OwE1NDc2OwEyFxYdATMyFxYVAyUQEBfuEBAXbhYQEO4XEBAQEBfuEBAWbhcQEO4XEBACEm0XEBDuFxAQEBAX7hAQF20XEBDuFxAQEBAX7hAQFwAAAQAAAAIAAHRSzT9fDzz1AAsEAAAAAADRsdR3AAAAANGx1HcAAAAAA7sDbgAAAAgAAgAAAAAAAAABAAADwP/AAAAEAAAAAAADuwABAAAAAAAAAAAAAAAAAAAABwQAAAAAAAAAAAAAAAIAAAAEAABFAyUAAAMlAAAAAAAAAAoAFAAeAE4AcgCwAAEAAAAHAC0AAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAIAAAAAQAAAAAAAgAHAGkAAQAAAAAAAwAIADkAAQAAAAAABAAIAH4AAQAAAAAABQALABgAAQAAAAAABgAIAFEAAQAAAAAACgAaAJYAAwABBAkAAQAQAAgAAwABBAkAAgAOAHAAAwABBAkAAwAQAEEAAwABBAkABAAQAIYAAwABBAkABQAWACMAAwABBAkABgAQAFkAAwABBAkACgA0ALBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhWZXJzaW9uIDIuMABWAGUAcgBzAGkAbwBuACAAMgAuADBDaGVja2JveABDAGgAZQBjAGsAYgBvAHhDaGVja2JveABDAGgAZQBjAGsAYgBvAHhSZWd1bGFyAFIAZQBnAHUAbABhAHJDaGVja2JveABDAGgAZQBjAGsAYgBvAHhGb250IGdlbmVyYXRlZCBieSBJY29Nb29uLgBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('truetype')\n  ;\n}\n\n/* Checkmark */\n.ui.checkbox label:after,\n.ui.checkbox .box:after {\n  font-family: 'Checkbox';\n}\n\n/* Checked */\n.ui.checkbox input:checked ~ .box:after,\n.ui.checkbox input:checked ~ label:after {\n  content: '\\e800';\n}\n\n/* Indeterminate */\n.ui.checkbox input:indeterminate ~ .box:after,\n.ui.checkbox input:indeterminate ~ label:after {\n  font-size: 12px;\n  content: '\\e801';\n}\n\n\n/*  UTF Reference\n.check:before { content: '\\e800'; }\n.dash:before  { content: '\\e801'; }\n.plus:before { content: '\\e802'; }\n*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/checkbox.variables",
    "content": "/*******************************\n            Checkbox\n*******************************/\n\n@checkboxSize: 17px;\n@checkboxColor: @textColor;\n@checkboxLineHeight: @checkboxSize;\n\n\n/* Label */\n@labelDistance: 1.85714em; /* 26px @ 14/em */\n\n/* Checkbox */\n@checkboxBackground: @white;\n@checkboxBorder: 1px solid @solidBorderColor;\n@checkboxBorderRadius: @3px;\n@checkboxTransition:\n  border @defaultDuration @defaultEasing,\n  opacity @defaultDuration @defaultEasing,\n  transform @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing\n;\n\n/* Checkmark */\n@checkboxCheckFontSize: 14px;\n@checkboxCheckTop: 0px;\n@checkboxCheckLeft: 0px;\n@checkboxCheckSize: @checkboxSize;\n\n/* Label */\n@labelFontSize: @relativeMedium;\n@labelColor: @textColor;\n@labelTransition: color @defaultDuration @defaultEasing;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Hover */\n@checkboxHoverBackground: @checkboxBackground;\n@checkboxHoverBorderColor: @selectedBorderColor;\n@labelHoverColor: @hoveredTextColor;\n\n/* Pressed */\n@checkboxPressedBackground: @offWhite;\n@checkboxPressedBorderColor: @selectedBorderColor;\n@checkboxPressedColor: @selectedTextColor;\n@labelPressedColor: @selectedTextColor;\n\n/* Focus */\n@checkboxFocusBackground: @white;\n@checkboxFocusBorderColor: @focusedFormMutedBorderColor;\n@checkboxFocusCheckColor: @selectedTextColor;\n@labelFocusColor: @selectedTextColor;\n\n/* Active */\n@labelActiveColor: @selectedTextColor;\n@checkboxActiveBackground: @white;\n@checkboxActiveBorderColor: @selectedBorderColor;\n@checkboxActiveCheckColor: @selectedTextColor;\n@checkboxActiveCheckOpacity: 1;\n\n/* Active Focus */\n@checkboxActiveFocusBackground: @white;\n@checkboxActiveFocusBorderColor: @checkboxFocusBorderColor;\n@checkboxActiveFocusCheckColor: @selectedTextColor;\n\n/* Indeterminate */\n@checkboxIndeterminateBackground: @checkboxActiveBackground;\n@checkboxIndeterminateBorderColor: @checkboxActiveBorderColor;\n@checkboxIndeterminateCheckOpacity: 1;\n@checkboxIndeterminateCheckColor: @checkboxActiveCheckColor;\n\n/* Disabled */\n@disabledCheckboxOpacity: 0.5;\n@disabledCheckboxLabelColor: rgba(0, 0, 0, 1);\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Radio */\n/* Uses px to avoid rounding issues with circles */\n\n@radioSize: 15px;\n@radioTop: 1px;\n@radioLeft: 0px;\n@radioLabelDistance: @labelDistance;\n\n@bulletTop: 1px;\n@bulletLeft: 0px;\n@bulletScale: (7 / 15); /* 7px as unitless value from radio size */\n@bulletColor: @textColor;\n@bulletRadius: @circularRadius;\n\n@radioFocusBackground: @checkboxFocusBackground;\n@radioFocusBulletColor: @checkboxFocusCheckColor;\n\n@radioActiveBackground: @checkboxActiveBackground;\n@radioActiveBulletColor: @checkboxActiveCheckColor;\n\n@radioActiveFocusBackground: @checkboxActiveFocusBackground;\n@radioActiveFocusBulletColor: @checkboxActiveFocusCheckColor;\n\n/* Slider & Toggle Handle */\n@handleBackground: @white @subtleGradient;\n@handleBoxShadow:\n  @subtleShadow,\n  0px 0px 0px 1px @borderColor inset\n;\n\n/* Slider */\n@sliderHandleSize: 1.5rem;\n@sliderLineWidth: 3.5rem;\n@sliderTransitionDuration: 0.3s;\n\n@sliderHandleOffset: (1rem - @sliderHandleSize) / 2;\n@sliderHandleTransition: left @sliderTransitionDuration @defaultEasing;\n\n@sliderWidth: @sliderLineWidth;\n@sliderHeight: (@sliderHandleSize + @sliderHandleOffset);\n\n@sliderLineHeight: @3px;\n@sliderLineVerticalOffset: 0.4rem;\n@sliderLineColor: @transparentBlack;\n@sliderLineRadius: @circularRadius;\n@sliderLineTransition: background @sliderTransitionDuration @defaultEasing;\n\n@sliderTravelDistance: @sliderLineWidth - @sliderHandleSize;\n\n@sliderLabelDistance: @sliderLineWidth + 1rem;\n@sliderOffLabelColor: @unselectedTextColor;\n\n@sliderLabelLineHeight: 1rem;\n\n/* Slider States */\n@sliderHoverLaneBackground: @veryStrongTransparentBlack;\n@sliderHoverLabelColor: @hoveredTextColor;\n\n@sliderOnLineColor: @lightBlack;\n@sliderOnLabelColor: @selectedTextColor;\n\n@sliderOnFocusLineColor: @lightBlackFocus;\n@sliderOnFocusLabelColor: @sliderOnLabelColor;\n\n\n\n/* Toggle */\n@toggleLaneWidth: 3.5rem;\n@toggleHandleSize: 1.5rem;\n@toggleTransitionDuration: 0.2s;\n\n@toggleWidth: @toggleLaneWidth;\n@toggleHeight: @toggleHandleSize;\n\n@toggleHandleRadius: @circularRadius;\n@toggleHandleOffset: 0rem;\n@toggleHandleTransition:\n  background @sliderTransitionDuration @defaultEasing,\n  left @sliderTransitionDuration @defaultEasing\n;\n\n@toggleLaneBackground: @transparentBlack;\n@toggleLaneHeight: @toggleHandleSize;\n@toggleLaneBoxShadow: none;\n@toggleLaneVerticalOffset: 0rem;\n@toggleOffOffset: -0.05rem;\n@toggleOnOffset: (@toggleLaneWidth - @toggleHandleSize) + 0.15rem;\n\n@toggleLabelDistance: @toggleLaneWidth + 1rem;\n@toggleLabelLineHeight: 1.5rem;\n@toggleLabelOffset: 0.15em;\n\n\n@toggleFocusColor: @veryStrongTransparentBlack;\n@toggleHoverColor: @toggleFocusColor;\n\n@toggleOffLabelColor: @checkboxColor;\n@toggleOffHandleBoxShadow: none;\n\n@toggleOnLabelColor: @selectedTextColor;\n@toggleOnLaneColor: @primaryColor;\n\n@toggleOnHandleBoxShadow: none;\n\n@toggleOnFocusLaneColor: @primaryColorFocus;\n@toggleOnFocusLabelColor: @toggleOnLabelColor;\n\n\n\n/*-------------------\n      Variations\n--------------------*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/dimmer.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/dimmer.variables",
    "content": "/*******************************\n            Dimmer\n*******************************/\n\n@dimmablePosition: relative;\n@dimmerPosition: absolute;\n\n@backgroundColor: rgba(0, 0, 0 , 0.85);\n@lineHeight: 1;\n@perspective: 2000px;\n\n@duration: 0.5s;\n@transition:\n  background-color @duration linear\n;\n@zIndex: 1000;\n@textAlign: center;\n@verticalAlign: middle;\n@textColor: @white;\n@overflow: hidden;\n\n@blurredStartFilter: ~\"blur(0px) grayscale(0)\";\n@blurredEndFilter: ~\"blur(5px) grayscale(0.7)\";\n@blurredTransition: 800ms filter @defaultEasing;\n\n@blurredBackgroundColor: rgba(0, 0, 0, 0.6);\n@blurredInvertedBackgroundColor: rgba(255, 255, 255, 0.6);\n\n/* Hidden (Default) */\n@hiddenOpacity: 0;\n\n/* Content */\n@contentDisplay: table;\n@contentChildDisplay: table-cell;\n\n/* Visible */\n@visibleOpacity: 1;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Page Dimmer*/\n@transformStyle: '';\n@pageDimmerPosition: fixed;\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Inverted */\n@invertedBackgroundColor: rgba(255, 255, 255, 0.85);\n@invertedTextColor: @textColor;\n\n/* Simple */\n@simpleZIndex: 1;\n@simpleStartBackgroundColor: rgba(0, 0, 0, 0);\n@simpleEndBackgroundColor: @backgroundColor;\n@simpleInvertedStartBackgroundColor: rgba(255, 255, 255, 0);\n@simpleInvertedEndBackgroundColor: @invertedBackgroundColor;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/dropdown.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n/* Dropdown Carets */\n@font-face {\n  font-family: 'Dropdown';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),\n    url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')\n  ;\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da'/*rtl:'\\f0d9'*/;\n}\n\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\"/*rtl:\"\\f0da\"*/;\n}\n\n/* Vertical Menu Dropdown */\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\"/*rtl:\"\\f0d9\"*/;\n}\n\n/* Icons for Reference\n.dropdown.down.icon {\n  content: \"\\f0d7\";\n}\n.dropdown.up.icon {\n  content: \"\\f0d8\";\n}\n.dropdown.left.icon {\n  content: \"\\f0d9\";\n}\n.dropdown.icon.icon {\n  content: \"\\f0da\";\n}\n*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/dropdown.variables",
    "content": "/*******************************\n            Dropdown\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@transition:\n  box-shadow @defaultDuration @defaultEasing,\n  width @defaultDuration @defaultEasing\n;\n@borderRadius: @defaultBorderRadius;\n\n@raisedShadow: 0px 2px 3px 0px @borderColor;\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Icon */\n@dropdownIconSize: @relative12px;\n@dropdownIconMargin: 0em 0em 0em 1em;\n\n/* Current Text */\n@textTransition: none;\n\n/* Menu */\n@menuBackground: #FFFFFF;\n@menuMargin: 0em;\n@menuPadding: 0em 0em;\n@menuTop: 100%;\n@menuTextAlign: left;\n\n@menuBorderWidth: 1px;\n@menuBorderColor: @borderColor;\n@menuBorder: @menuBorderWidth solid @menuBorderColor;\n@menuBoxShadow: @raisedShadow;\n@menuBorderRadius: @borderRadius;\n@menuTransition: opacity @defaultDuration @defaultEasing;\n@menuMinWidth: ~\"calc(100% + \"(@menuBorderWidth * 2)~\")\";\n@menuZIndex: 11;\n\n/* Text */\n@textLineHeight: 1em;\n@textLineHeightOffset: (@textLineHeight - 1em);\n@textCursorSpacing: 1px;\n\n/* Menu Item */\n@itemFontSize: @medium;\n@itemTextAlign: left;\n@itemBorder: none;\n@itemHeight: auto;\n@itemDivider: none;\n@itemColor: @textColor;\n@itemVerticalPadding: @mini;\n@itemHorizontalPadding: @large;\n@itemPadding: @itemVerticalPadding @itemHorizontalPadding;\n@itemFontWeight: normal;\n@itemLineHeight: 1em;\n@itemLineHeightOffset: (@itemLineHeight - 1em);\n@itemTextTransform: none;\n@itemBoxShadow: none;\n\n/* Sub Menu */\n@subMenuTop: 0%;\n@subMenuLeft: 100%;\n@subMenuRight: auto;\n@subMenuDistanceAway: -0.5em;\n@subMenuMargin: 0em 0em 0em @subMenuDistanceAway;\n@subMenuBorderRadius: @borderRadius;\n@subMenuZIndex: 21;\n\n/* Menu Header */\n@menuHeaderColor: @darkTextColor;\n@menuHeaderFontSize: @relative11px;\n@menuHeaderFontWeight: bold;\n@menuHeaderTextTransform: uppercase;\n@menuHeaderMargin: 1rem 0rem 0.75rem;\n@menuHeaderPadding: 0em @itemHorizontalPadding;\n\n/* Menu Divider */\n@menuDividerMargin: 0.5em 0em;\n@menuDividerColor: @internalBorderColor;\n@menuDividerSize: 1px;\n@menuDividerBorder: @menuDividerSize solid @menuDividerColor;\n\n/* Menu Input */\n@menuInputMargin: @large @mini;\n@menuInputMinWidth: 10rem;\n@menuInputVerticalPadding: 0.5em;\n@menuInputHorizontalPadding: @inputHorizontalPadding;\n@menuInputPadding: @menuInputVerticalPadding @menuInputHorizontalPadding;\n\n/* Menu Image */\n@menuImageMaxHeight: 2em;\n@menuImageVerticalMargin: -(@menuImageMaxHeight - 1em) / 2;\n\n/* Item Sub-Element */\n@itemElementFloat: none;\n@itemElementDistance: @mini;\n\n/* Sub-Menu Dropdown Icon */\n@itemDropdownIconDistance: 1em;\n@itemDropdownIconFloat: right;\n@itemDropdownIconMargin: @itemLineHeightOffset 0em 0em @itemDropdownIconDistance;\n\n/* Description */\n@itemDescriptionFloat: right;\n@itemDescriptionMargin: 0em 0em 0em 1em;\n@itemDescriptionColor: @lightTextColor;\n\n/* Message */\n@messagePadding: @selectionItemPadding;\n@messageFontWeight: normal;\n@messageColor: @unselectedTextColor;\n\n/* Floated Content */\n@floatedDistance: 1em;\n\n/*-------------------\n        Types\n--------------------*/\n\n/*------------\n   Selection\n--------------*/\n\n@selectionMinWidth: 14em;\n@selectionVerticalPadding: @inputVerticalPadding;\n@selectionHorizontalPadding: @inputHorizontalPadding;\n@selectionBorderEmWidth:  @relative1px;\n@selectionMinHeight: @inputLineHeight + (@selectionVerticalPadding * 2) - @selectionBorderEmWidth;\n@selectionBackground: @inputBackground;\n@selectionDisplay: inline-block;\n@selectionIconDistance: @inputHorizontalPadding + @glyphWidth;\n@selectionPadding: @selectionVerticalPadding @selectionIconDistance @selectionVerticalPadding @selectionHorizontalPadding;\n@selectionZIndex: 10;\n\n@selectionItemDivider: 1px solid @solidInternalBorderColor;\n@selectionMessagePadding: @selectionItemPadding;\n\n/* <select> */\n@selectBorder: 1px solid @borderColor;\n@selectPadding: 0.5em;\n@selectVisibility: visible;\n@selectHeight: 38px;\n\n@selectionTextColor: @textColor;\n\n@selectionTextUnderlayIconOpacity: @disabledOpacity;\n@selectionTextUnderlayColor: @inputPlaceholderFocusColor;\n\n@selectionBoxShadow: none;\n@selectionBorderColor: @borderColor;\n@selectionBorder: 1px solid @selectionBorderColor;\n@selectionBorderRadius: @borderRadius;\n\n@selectionIconOpacity: 0.8;\n@selectionIconZIndex: 3;\n@selectionIconHitbox: @selectionVerticalPadding;\n@selectionIconMargin: -@selectionIconHitbox;\n@selectionIconPadding: @selectionIconHitbox / @dropdownIconSize;\n@selectionIconTransition: opacity @defaultDuration @defaultEasing;\n\n@selectionMenuBorderRadius: 0em 0em @borderRadius @borderRadius;\n@selectionMenuBoxShadow: @raisedShadow;\n@selectionMenuItemBoxShadow: none;\n\n@selectionItemHorizontalPadding: @itemHorizontalPadding;\n@selectionItemVerticalPadding: @itemVerticalPadding;\n@selectionItemPadding: @selectionItemVerticalPadding @selectionItemHorizontalPadding;\n\n@selectionTransition: @transition;\n@selectionMenuTransition: @menuTransition;\n\n/* Responsive */\n@selectionMobileMaxItems: 3;\n@selectionTabletMaxItems: 4;\n@selectionComputerMaxItems: 6;\n@selectionWidescreenMaxItems: 8;\n\n/* Derived */\n@selectedBorderEMWidth: 0.1em; /* 1px / em size */\n@selectionItemHeight: (@selectionItemVerticalPadding * 2) + @itemLineHeight + @selectedBorderEMWidth;\n@selectionMobileMaxMenuHeight: (@selectionItemHeight * @selectionMobileMaxItems);\n@selectionTabletMaxMenuHeight: (@selectionItemHeight * @selectionTabletMaxItems);\n@selectionComputerMaxMenuHeight: (@selectionItemHeight * @selectionComputerMaxItems);\n@selectionWidescreenMaxMenuHeight: (@selectionItemHeight * @selectionWidescreenMaxItems);\n\n/* Hover */\n@selectionHoverBorderColor: @selectedBorderColor;\n@selectionHoverBoxShadow: none;\n\n/* Focus */\n@selectionFocusBorderColor: @focusedFormMutedBorderColor;\n@selectionFocusBoxShadow: none;\n@selectionFocusMenuBoxShadow: @raisedShadow;\n\n/* Visible */\n@selectionVisibleTextFontWeight: normal;\n@selectionVisibleTextColor: @hoveredTextColor;\n\n@selectionVisibleBorderColor: @focusedFormMutedBorderColor;\n@selectionVisibleBoxShadow: @raisedShadow;\n@selectionVisibleMenuBoxShadow: @raisedShadow;\n\n/* Visible Hover */\n@selectionActiveHoverBorderColor: @focusedFormMutedBorderColor;\n@selectionActiveHoverBoxShadow: @selectionVisibleBoxShadow;\n@selectionActiveHoverMenuBoxShadow: @selectionVisibleMenuBoxShadow;\n\n@selectionVisibleConnectingBorder: 0em;\n@selectionVisibleIconOpacity: 1;\n\n/*--------------\n     Search\n--------------*/\n\n@searchMinWidth: '';\n\n/* Search Selection */\n@searchSelectionLineHeight: @inputLineHeight;\n@searchSelectionLineHeightOffset: ((@searchSelectionLineHeight - 1em) / 2);\n@searchSelectionVerticalPadding: (@selectionVerticalPadding - @searchSelectionLineHeightOffset);\n@searchSelectionHorizontalPadding: @selectionHorizontalPadding;\n@searchSelectionInputPadding: @searchSelectionVerticalPadding @selectionIconDistance @searchSelectionVerticalPadding @searchSelectionHorizontalPadding;\n\n@searchMobileMaxMenuHeight: @selectionMobileMaxMenuHeight;\n@searchTabletMaxMenuHeight: @selectionTabletMaxMenuHeight;\n@searchComputerMaxMenuHeight: @selectionComputerMaxMenuHeight;\n@searchWidescreenMaxMenuHeight: @selectionWidescreenMaxMenuHeight;\n\n/* Inline */\n@inlineIconMargin: 0em @relative7px 0em @relative3px;\n@inlineTextColor: inherit;\n@inlineTextFontWeight: bold;\n@inlineMenuDistance: @relative3px;\n@inlineMenuBorderRadius: @borderRadius;\n\n\n/*--------------\n    Multiple\n--------------*/\n\n/* Split Actual Padding Between Child and Parent (allows for label spacing) */\n@multipleSelectionVerticalPadding: (@searchSelectionVerticalPadding * (1/3));\n@multipleSelectionLeftPadding: @relative5px;\n@multipleSelectionRightPadding: @selectionIconDistance;\n@multipleSelectionPadding: @multipleSelectionVerticalPadding @multipleSelectionRightPadding @multipleSelectionVerticalPadding @multipleSelectionLeftPadding;\n\n/* Child Elements */\n@multipleSelectionChildVerticalMargin: (@searchSelectionVerticalPadding * (2/3));\n@multipleSelectionChildLeftMargin: (@inputHorizontalPadding - @multipleSelectionLeftPadding);\n@multipleSelectionChildMargin: @multipleSelectionChildVerticalMargin 0em @multipleSelectionChildVerticalMargin @multipleSelectionChildLeftMargin;\n@multipleSelectionChildLineHeight: @relative17px;\n@multipleSelectionSearchStartWidth: (@glyphWidth * 2);\n\n/* Dropdown Icon */\n@multipleSelectionDropdownIconMargin: '';\n@multipleSelectionDropdownIconPadding: '';\n\n@multipleSelectionSearchAfterLabelDistance: @relative2px;\n\n/* Selection Label */\n@labelSize: @relativeMedium;\n@labelHorizontalMargin: @4px;\n@labelVerticalMargin: @2px;\n@labelMargin: @labelVerticalMargin @labelHorizontalMargin @labelVerticalMargin 0em;\n@labelBorderWidth: 1px;\n@labelBoxShadow: 0px 0px 0px @labelBorderWidth @borderColor inset;\n\n@labelVerticalPadding: @relative5px;\n@labelHorizontalPadding: @relativeMini;\n@labelPadding: @labelVerticalPadding @labelHorizontalPadding;\n\n/*-------------------\n       States\n--------------------*/\n\n/* Hovered */\n@hoveredItemBackground: @transparentBlack;\n@hoveredItemColor: @selectedTextColor;\n@hoveredZIndex: @menuZIndex + 2;\n\n/* Default Text */\n@defaultTextColor: @inputPlaceholderColor;\n@defaultTextFocusColor: @inputPlaceholderFocusColor;\n\n/* Loading */\n@loadingZIndex: -1;\n\n/* Active Menu Item */\n@activeItemZIndex: @menuZIndex + 1;\n@activeItemBackground: transparent;\n@activeItemBoxShadow: none;\n@activeItemFontWeight: bold;\n@activeItemColor: @selectedTextColor;\n\n/* Selected */\n@selectedBackground: @subtleTransparentBlack;\n@selectedColor: @selectedTextColor;\n\n/* Error */\n@errorLabelBackground: #EACBCB;\n@errorLabelColor: @errorTextColor;\n\n@errorItemTextColor: @errorTextColor;\n@errorItemHoverBackground: #FFF2F2;\n@errorItemActiveBackground: #FDCFCF;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Scrolling */\n@scrollingMenuWidth: 100%;\n@scrollingMenuItemBorder: none;\n@scrollingMenuRightItemPadding: ~\"calc(\"(@itemHorizontalPadding)~\" + \"(@scrollbarWidth)~\")\";\n\n@scrollingMobileMaxItems: 4;\n@scrollingTabletMaxItems: 6;\n@scrollingComputerMaxItems: 8;\n@scrollingWidescreenMaxItems: 12;\n\n@scrollingBorderEMWidth: 0em; /* 0px / em size */\n@scrollingItemHeight: (@itemVerticalPadding * 2) + @itemLineHeight + @scrollingBorderEMWidth;\n@scrollingMobileMaxMenuHeight: (@scrollingItemHeight * @scrollingMobileMaxItems);\n@scrollingTabletMaxMenuHeight: (@scrollingItemHeight * @scrollingTabletMaxItems);\n@scrollingComputerMaxMenuHeight: (@scrollingItemHeight * @scrollingComputerMaxItems);\n@scrollingWidescreenMaxMenuHeight: (@scrollingItemHeight * @selectionWidescreenMaxItems);\n\n/* Upward */\n@upwardSelectionVisibleBorderRadius: @selectionVisibleConnectingBorder @selectionVisibleConnectingBorder @borderRadius @borderRadius;\n@upwardMenuBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n@upwardSelectionMenuBoxShadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n@upwardMenuBorderRadius: @borderRadius @borderRadius 0em 0em;\n@upwardSelectionHoverBoxShadow: 0px 0px 2px 0px rgba(0, 0, 0, 0.05);\n@upwardSelectionVisibleBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.08);\n@upwardSelectionActiveHoverBoxShadow: 0px 0px 3px 0px rgba(0, 0, 0, 0.05);\n@upwardSelectionActiveHoverMenuBoxShadow: 0px -2px 3px 0px rgba(0, 0, 0, 0.08);\n\n/* Flyout Direction */\n@leftMenuDropdownIconFloat: left;\n@leftMenuDropdownIconMargin: @itemLineHeightOffset 0em 0em 0em;\n\n/* Left */\n@leftSubMenuBorderRadius: @borderRadius;\n@leftSubMenuMargin: 0em @subMenuDistanceAway 0em 0em;\n\n/* Simple */\n@simpleTransitionDuration: @defaultDuration;\n@simpleTransition: opacity @simpleTransitionDuration @defaultEasing;\n\n/* Floating */\n@floatingMenuDistance: 0.5em;\n@floatingMenuBoxShadow: @floatingShadow;\n@floatingMenuBorderRadius: @borderRadius;\n\n/* Pointing */\n@pointingArrowOffset: -(@pointingArrowSize / 2);\n@pointingArrowDistanceFromEdge: 1em;\n\n@pointingArrowBackground: @white;\n@pointingArrowZIndex: 2;\n@pointingArrowBoxShadow: -@menuBorderWidth -@menuBorderWidth 0px 0px @menuBorderColor;\n@pointingArrowSize: @relative7px;\n\n@pointingMenuDistance: @mini;\n@pointingMenuBorderRadius: @borderRadius;\n@pointingArrowBoxShadow: -@menuBorderWidth -@menuBorderWidth 0px 0px @menuBorderColor;\n\n/* Pointing Upward */\n@pointingUpwardMenuBorderRadius: @borderRadius;\n@pointingUpwardArrowBoxShadow: @menuBorderWidth @menuBorderWidth 0px 0px @menuBorderColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/embed.overrides",
    "content": "/*******************************\n        Video Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/embed.variables",
    "content": "/*******************************\n             Video\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n/* Simple */\n@background: @lightGrey;\n@transitionDuration: 0.5s;\n@transitionEasing: @defaultEasing;\n\n/* Placeholder */\n@placeholderUnderlay: @background;\n\n/* Placeholder Overlayed Background */\n@placeholderBackground: radial-gradient(transparent 45%, rgba(0, 0, 0, 0.3));\n@placeholderBackgroundOpacity: 0.5;\n@placeholderBackgroundTransition: opacity @transitionDuration @transitionEasing;\n\n/* Icon */\n@iconBackground: @veryStrongTransparentBlack;\n@iconSize: 6rem;\n@iconTransition:\n  opacity @transitionDuration @transitionEasing,\n  color @transitionDuration @transitionEasing\n;\n@iconColor: @white;\n@iconShadow:\n  0px 2px 10px rgba(34, 36, 38, 0.2)\n;\n@iconZIndex: 10;\n\n/*-------------------\n       States\n--------------------*/\n\n/* Hover */\n@hoverPlaceholderBackground: @placeholderBackground;\n@hoverPlaceholderBackgroundOpacity: 1;\n@hoverIconColor: @white;\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Aspect Ratios */\n@squareRatio: (1/1) * 100%;\n@widescreenRatio: (9/16) * 100%;\n@ultraWidescreenRatio: (9/21) * 100%;\n@standardRatio: (3/4) * 100%;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/modal.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/modal.variables",
    "content": "/*******************************\n             Modal\n*******************************/\n\n@background: @white;\n@border: none;\n@zIndex: 1001;\n@borderRadius: @defaultBorderRadius;\n@transformOrigin: 50% 25%;\n@boxShadow:\n  1px 3px 3px 0px rgba(0, 0, 0, 0.2),\n  1px 3px 15px 2px rgba(0, 0, 0, 0.2)\n;\n\n/* Close Icon */\n@closeOpacity: 0.8;\n@closeSize: 1.25em;\n@closeColor: @white;\n\n@closeHitbox: 2.25rem;\n@closeDistance: 0.25rem;\n@closeHitBoxOffset: (@closeHitbox - 1rem) / 2;\n@closePadding: @closeHitBoxOffset 0rem 0rem 0rem;\n@closeTop: -(@closeDistance + @closeHitbox);\n@closeRight: -(@closeDistance + @closeHitbox);\n\n/* Header */\n@headerMargin: 0em;\n@headerVerticalPadding: 1.25rem;\n@headerHorizontalPadding: 1.5rem;\n@headerPadding: @headerVerticalPadding @headerHorizontalPadding;\n@headerBackground: @white;\n@headerColor: @darkTextColor;\n@headerFontSize: @huge;\n@headerBoxShadow: none;\n@headerFontWeight: bold;\n@headerFontFamily: @headerFont;\n@headerBorder: 1px solid @borderColor;\n\n/* Content */\n@contentFontSize: 1em;\n@contentPadding: 1.5rem;\n@contentLineHeight: 1.4;\n@contentBackground: #FFFFFF;\n\n/* Image / Description */\n@imageWidth: '';\n@imageIconSize: 8rem;\n@imageVerticalAlign: top;\n\n@descriptionDistance: 2em;\n@descriptionMinWidth: '';\n@descriptionWidth: auto;\n@descriptionVerticalAlign: top;\n\n/* Modal Actions */\n@actionBorder: 1px solid @borderColor;\n@actionBackground: @offWhite;\n@actionPadding: 1rem 1rem;\n@actionAlign: right;\n\n@buttonDistance: 0.75em;\n\n/* Inner Close Position (Tablet/Mobile) */\n@innerCloseTop: (@headerVerticalPadding - @closeHitBoxOffset + (@lineHeight - 1em));\n@innerCloseRight: 1rem;\n@innerCloseColor: @textColor;\n\n/* Mobile Positions */\n@mobileHeaderPadding: 0.75rem 1rem;\n@mobileContentPadding: 1rem;\n@mobileImagePadding: 0rem 0rem 1rem;\n@mobileDescriptionPadding: 1rem 0rem ;\n@mobileButtonDistance: 1rem;\n@mobileActionPadding: 1rem 1rem (1rem - @mobileButtonDistance);\n@mobileImageIconSize: 5rem;\n@mobileCloseTop: 0.5rem;\n@mobileCloseRight: 0.5rem;\n\n/* Responsive Widths */\n@mobileWidth: 95%;\n@tabletWidth: 88%;\n@computerWidth: 850px;\n@largeMonitorWidth: 900px;\n@widescreenMonitorWidth: 950px;\n\n@mobileMargin: 0em 0em 0em -(@mobileWidth / 2);\n@tabletMargin: 0em 0em 0em -(@tabletWidth / 2);\n@computerMargin: 0em 0em 0em -(@computerWidth / 2);\n@largeMonitorMargin: 0em 0em 0em -(@largeMonitorWidth / 2);\n@widescreenMonitorMargin: 0em 0em 0em -(@widescreenMonitorWidth / 2);\n\n@fullScreenWidth: 95%;\n@fullScreenOffset: (100% - @fullScreenWidth) / 2;\n@fullScreenMargin: 1em auto;\n\n/* Coupling */\n@invertedBoxShadow: 1px 3px 10px 2px rgba(0, 0, 0, 0.2);\n\n/*-------------------\n       States\n--------------------*/\n\n@loadingZIndex: -1;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Basic */\n@basicModalHeaderColor: @white;\n@basicModalColor: @white;\n@basicModalCloseTop: 1rem;\n@basicModalCloseRight: 1.5rem;\n@basicInnerCloseColor: @white;\n\n@basicInvertedModalColor: @textColor;\n@basicInvertedModalHeaderColor: @darkTextColor;\n\n/* Scrolling Margin */\n@scrollingMargin: 3.5rem;\n@mobileScrollingMargin: 1rem;\n\n/* Scrolling Content */\n@scrollingContentMaxHeight: calc(80vh - 10em);\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Size Widths */\n@miniRatio: 0.4;\n@tinyRatio: 0.6;\n@smallRatio: 0.8;\n@largeRatio: 1.2;\n\n/* Derived Responsive Sizes */\n@miniHeaderSize: 1.3em;\n@miniMobileWidth: @mobileWidth;\n@miniTabletWidth: (@tabletWidth * @miniRatio);\n@miniComputerWidth: (@computerWidth * @miniRatio);\n@miniLargeMonitorWidth: (@largeMonitorWidth * @miniRatio);\n@miniWidescreenMonitorWidth: (@widescreenMonitorWidth * @miniRatio);\n\n@miniMobileMargin: 0em 0em 0em -(@miniMobileWidth / 2);\n@miniTabletMargin: 0em 0em 0em -(@miniTabletWidth / 2);\n@miniComputerMargin: 0em 0em 0em -(@miniComputerWidth / 2);\n@miniLargeMonitorMargin: 0em 0em 0em -(@miniLargeMonitorWidth / 2);\n@miniWidescreenMonitorMargin: 0em 0em 0em -(@miniWidescreenMonitorWidth / 2);\n\n@tinyHeaderSize: 1.3em;\n@tinyMobileWidth: @mobileWidth;\n@tinyTabletWidth: (@tabletWidth * @tinyRatio);\n@tinyComputerWidth: (@computerWidth * @tinyRatio);\n@tinyLargeMonitorWidth: (@largeMonitorWidth * @tinyRatio);\n@tinyWidescreenMonitorWidth: (@widescreenMonitorWidth * @tinyRatio);\n\n@tinyMobileMargin: 0em 0em 0em -(@tinyMobileWidth / 2);\n@tinyTabletMargin: 0em 0em 0em -(@tinyTabletWidth / 2);\n@tinyComputerMargin: 0em 0em 0em -(@tinyComputerWidth / 2);\n@tinyLargeMonitorMargin: 0em 0em 0em -(@tinyLargeMonitorWidth / 2);\n@tinyWidescreenMonitorMargin: 0em 0em 0em -(@tinyWidescreenMonitorWidth / 2);\n\n@smallHeaderSize: 1.3em;\n@smallMobileWidth: @mobileWidth;\n@smallTabletWidth: (@tabletWidth * @smallRatio);\n@smallComputerWidth: (@computerWidth * @smallRatio);\n@smallLargeMonitorWidth: (@largeMonitorWidth * @smallRatio);\n@smallWidescreenMonitorWidth: (@widescreenMonitorWidth * @smallRatio);\n\n@smallMobileMargin: 0em 0em 0em -(@smallMobileWidth / 2);\n@smallTabletMargin: 0em 0em 0em -(@smallTabletWidth / 2);\n@smallComputerMargin: 0em 0em 0em -(@smallComputerWidth / 2);\n@smallLargeMonitorMargin: 0em 0em 0em -(@smallLargeMonitorWidth / 2);\n@smallWidescreenMonitorMargin: 0em 0em 0em -(@smallWidescreenMonitorWidth / 2);\n\n@largeHeaderSize: 1.6em;\n@largeMobileWidth: @mobileWidth;\n@largeTabletWidth: @tabletWidth;\n@largeComputerWidth: (@computerWidth * @largeRatio);\n@largeLargeMonitorWidth: (@largeMonitorWidth * @largeRatio);\n@largeWidescreenMonitorWidth: (@widescreenMonitorWidth * @largeRatio);\n\n@largeMobileMargin: 0em 0em 0em -(@largeMobileWidth / 2);\n@largeTabletMargin: 0em 0em 0em -(@largeTabletWidth / 2);\n@largeComputerMargin: 0em 0em 0em -(@largeComputerWidth / 2);\n@largeLargeMonitorMargin: 0em 0em 0em -(@largeLargeMonitorWidth / 2);\n@largeWidescreenMonitorMargin: 0em 0em 0em -(@largeWidescreenMonitorWidth / 2);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/nag.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/nag.variables",
    "content": "/*******************************\n             Nag\n*******************************/\n\n/*--------------\n   Collection\n---------------*/\n\n@position: relative;\n@width: 100%;\n@zIndex: 999;\n@margin: 0em;\n\n@background: #555555;\n@opacity: 0.95;\n@minHeight: 0em;\n@padding: 0.75em 1em;\n@lineHeight: 1em;\n@boxShadow: 0px 1px 2px 0px rgba(0, 0, 0, 0.2);\n\n@fontSize: 1rem;\n@textAlign: center;\n@color: @textColor;\n\n@transition: 0.2s background ease;\n\n\n/*--------------\n    Elements\n---------------*/\n\n/* Title */\n@titleColor: @white;\n@titleMargin: 0em 0.5em;\n\n@closeSize: 1em;\n@closeMargin: (-@closeSize / 2) 0em 0em;\n@closeTop: 50%;\n@closeRight: 1em;\n@closeColor: @white;\n@closeTransition: opacity 0.2s ease;\n@closeOpacity: 0.4;\n\n\n/*--------------\n      States\n---------------*/\n\n/* Hover */\n@nagHoverBackground: @background;\n@nagHoverOpacity: 1;\n\n@closeHoverOpacity: 1;\n\n/*--------------\n   Variations\n---------------*/\n\n/* Top / Bottom */\n@top: 0em;\n@bottom: 0em;\n@borderRadius: @defaultBorderRadius;\n@topBorderRadius: 0em 0em @borderRadius @borderRadius;\n@bottomBorderRadius: @borderRadius @borderRadius 0em 0em;\n\n/* Inverted */\n@invertedBackground: @darkWhite;\n\n/*--------------\n      Plural\n---------------*/\n\n@groupedBorderRadius: 0em;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/popup.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/popup.variables",
    "content": "/*******************************\n             Popup\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@zIndex: 1900;\n@background: @white;\n\n@maxWidth: 250px;\n@borderColor: @solidBorderColor;\n@borderWidth: 1px;\n@boxShadow: @floatingShadow;\n@color: @textColor;\n\n@verticalPadding: 0.833em;\n@horizontalPadding: 1em;\n@fontWeight: normal;\n@fontStyle: normal;\n@borderRadius: @defaultBorderRadius;\n\n/*-------------------\n       Parts\n--------------------*/\n\n/* Placement */\n@arrowSize: @relative10px;\n@arrowWidth: 1em;\n@arrowDistanceFromEdge: 1em;\n@boxArrowOffset: 0em;\n@popupDistanceAway: @arrowSize;\n\n\n/* Header */\n@headerFontFamily: @headerFont;\n@headerFontSize: @relativeLarge;\n@headerDistance: @relative7px;\n@headerLineHeight: 1.2;\n\n/* Content Border */\n@border: @borderWidth solid @borderColor;\n\n/* Arrow */\n@arrowBackground: @white;\n@arrowZIndex: 2;\n@arrowJitter: 0.05em;\n@arrowOffset: -(@arrowSize / 2) + @arrowJitter;\n\n@arrowStroke: @borderWidth;\n@arrowColor: darken(@borderColor, 10);\n\n/* Arrow color by position */\n@arrowTopBackground: @arrowBackground;\n@arrowCenterBackground: @arrowBackground;\n@arrowBottomBackground: @arrowBackground;\n\n@arrowBoxShadow: @arrowStroke @arrowStroke 0px 0px @arrowColor;\n@leftArrowBoxShadow: @arrowStroke -@arrowStroke 0px 0px @arrowColor;\n@rightArrowBoxShadow: -@arrowStroke @arrowStroke 0px 0px @arrowColor;\n@bottomArrowBoxShadow: -@arrowStroke -@arrowStroke 0px 0px @arrowColor;\n\n/*-------------------\n       Types\n--------------------*/\n\n/* Tooltip */\n@tooltipBackground: @background;\n@tooltipBorderRadius: @borderRadius;\n@tooltipPadding: @verticalPadding @horizontalPadding;\n@tooltipFontWeight: @fontWeight;\n@tooltipFontStyle: @fontStyle;\n@tooltipColor: @color;\n@tooltipBorder: @border;\n@tooltipBoxShadow: @boxShadow;\n@tooltipMaxWidth: none;\n@tooltipFontSize: @medium;\n@tooltipLineHeight: @lineHeight;\n@tooltipDistanceAway: @relative7px;\n@tooltipZIndex: 1;\n@tooltipDuration: @defaultDuration;\n@tooltipEasing: @defaultEasing;\n\n/* Inverted */\n@tooltipInvertedBackground: @invertedBackground;\n@tooltipInvertedColor: @invertedColor;\n@tooltipInvertedBorder: @invertedBorder;\n@tooltipInvertedBoxShadow: @invertedBoxShadow;\n@tooltipInvertedHeaderBackground: @invertedHeaderBackground;\n@tooltipInvertedHeaderColor: @invertedHeaderColor;\n\n/* Arrow */\n@tooltipArrowVerticalOffset: -@2px;\n@tooltipArrowHorizontalOffset: -@1px;\n@tooltipArrowBoxShadow: @arrowBoxShadow;\n@tooltipArrowBackground: @arrowBackground;\n@tooltipArrowTopBackground: @arrowTopBackground;\n@tooltipArrowCenterBackground: @arrowCenterBackground;\n@tooltipArrowBottomBackground: @arrowBottomBackground;\n\n/*-------------------\n       Coupling\n--------------------*/\n\n/* Grid Inside Popup */\n@nestedGridMargin: -0.7rem -0.875rem; /* (padding * @medium) */\n@nestedGridWidth: ~\"calc(100% + 1.75rem)\";\n\n/*-------------------\n       States\n--------------------*/\n\n@loadingZIndex: -1;\n\n/*-------------------\n       Variations\n--------------------*/\n\n/* Wide */\n@wideWidth: 350px;\n@veryWideWidth: 550px;\n\n/* Inverted */\n@invertedBackground: @black;\n@invertedColor: @white;\n@invertedBorder: none;\n@invertedBoxShadow: none;\n\n@invertedHeaderBackground: none;\n@invertedHeaderColor: @white;\n@invertedArrowColor: @invertedBackground;\n\n/* Arrow color by position */\n@invertedArrowTopBackground: @invertedBackground;\n@invertedArrowCenterBackground: @invertedBackground;\n@invertedArrowBottomBackground: @invertedBackground;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/progress.overrides",
    "content": "/*******************************\n            Progress\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/progress.variables",
    "content": "/*******************************\n            Progress\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@verticalSpacing: 1em;\n@margin: @verticalSpacing 0em (@labelHeight + @verticalSpacing);\n@firstMargin: 0em 0em (@labelHeight + @verticalSpacing);\n@lastMargin: 0em 0em (@labelHeight);\n\n@background: @strongTransparentBlack;\n@border: none;\n@boxShadow: none;\n@padding: 0em;\n@borderRadius: @defaultBorderRadius;\n\n/* Bar */\n@barPosition: relative;\n@barHeight: 1.75em;\n@barBackground: #888888;\n@barBorderRadius: @borderRadius;\n@barTransitionEasing: @defaultEasing;\n@barTransitionDuration: @defaultDuration;\n@barTransition:\n  width @barTransitionDuration @barTransitionEasing,\n  background-color @barTransitionDuration @barTransitionEasing\n;\n@barInitialWidth: 0%;\n@barMinWidth: 2em;\n\n/* Progress Bar Label */\n@progressWidth: auto;\n@progressSize: @relativeSmall;\n@progressPosition: absolute;\n@progressTop: 50%;\n@progressRight: 0.5em;\n@progressLeft: auto;\n@progressBottom: auto;\n@progressOffset: -0.5em;\n@progressColor: @invertedLightTextColor;\n@progressTextShadow: none;\n@progressFontWeight: bold;\n@progressTextAlign: left;\n\n/* Label */\n@labelWidth: 100%;\n@labelHeight: 1.5em;\n@labelSize: 1em;\n@labelPosition: absolute;\n@labelTop: 100%;\n@labelLeft: 0%;\n@labelRight: auto;\n@labelBottom: auto;\n@labelOffset: (@labelHeight - 1.3em);\n@labelColor: @textColor;\n@labelTextShadow: none;\n@labelFontWeight: bold;\n@labelTextAlign: center;\n@labelTransition: color 0.4s @defaultEasing;\n\n/*-------------------\n        Types\n--------------------*/\n\n@indicatingFirstColor: #D95C5C;\n@indicatingSecondColor: #EFBC72;\n@indicatingThirdColor: #E6BB48;\n@indicatingFourthColor: #DDC928;\n@indicatingFifthColor: #B4D95C;\n@indicatingSixthColor: #66DA81;\n\n@indicatingFirstLabelColor: @textColor;\n@indicatingSecondLabelColor: @textColor;\n@indicatingThirdLabelColor: @textColor;\n@indicatingFourthLabelColor: @textColor;\n@indicatingFifthLabelColor: @textColor;\n@indicatingSixthLabelColor: @textColor;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Active */\n@activePulseColor: @white;\n@activePulseMaxOpacity: 0.3;\n@activePulseDuration: 2s;\n@activeMinWidth: @barMinWidth;\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Attached */\n@attachedBackground: transparent;\n@attachedHeight: 0.2rem;\n@attachedBorderRadius: @borderRadius;\n\n/* Inverted */\n@invertedBackground: @transparentWhite;\n@invertedBorder: none;\n@invertedBarBackground: @barBackground;\n@invertedProgressColor: @offWhite;\n@invertedLabelColor: @white;\n\n/* Sizing */\n@tinyBarHeight: 0.5em;\n@smallBarHeight: 1em;\n@largeBarHeight: 2.5em;\n@bigBarHeight: 3.5em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/rating.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n@font-face {\n  font-family: 'Rating';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjCBsAAAC8AAAAYGNtYXCj2pm8AAABHAAAAKRnYXNwAAAAEAAAAcAAAAAIZ2x5ZlJbXMYAAAHIAAARnGhlYWQBGAe5AAATZAAAADZoaGVhA+IB/QAAE5wAAAAkaG10eCzgAEMAABPAAAAAcGxvY2EwXCxOAAAUMAAAADptYXhwACIAnAAAFGwAAAAgbmFtZfC1n04AABSMAAABPHBvc3QAAwAAAAAVyAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADxZQHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEAJAAAAAgACAABAAAAAEAIOYF8AbwDfAj8C7wbvBw8Irwl/Cc8SPxZf/9//8AAAAAACDmAPAE8AzwI/Au8G7wcPCH8JfwnPEj8WT//f//AAH/4xoEEAYQAQ/sD+IPow+iD4wPgA98DvYOtgADAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAH//wAPAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAIAAP/tAgAB0wAKABUAAAEvAQ8BFwc3Fyc3BQc3Jz8BHwEHFycCALFPT7GAHp6eHoD/AHAWW304OH1bFnABGRqgoBp8sFNTsHyyOnxYEnFxElh8OgAAAAACAAD/7QIAAdMACgASAAABLwEPARcHNxcnNwUxER8BBxcnAgCxT0+xgB6enh6A/wA4fVsWcAEZGqCgGnywU1OwfLIBHXESWHw6AAAAAQAA/+0CAAHTAAoAAAEvAQ8BFwc3Fyc3AgCxT0+xgB6enh6AARkaoKAafLBTU7B8AAAAAAEAAAAAAgABwAArAAABFA4CBzEHDgMjIi4CLwEuAzU0PgIzMh4CFz4DMzIeAhUCAAcMEgugBgwMDAYGDAwMBqALEgwHFyg2HhAfGxkKChkbHxAeNigXAS0QHxsZCqAGCwkGBQkLBqAKGRsfEB42KBcHDBILCxIMBxcoNh4AAAAAAgAAAAACAAHAACsAWAAAATQuAiMiDgIHLgMjIg4CFRQeAhcxFx4DMzI+Aj8BPgM1DwEiFCIGMTAmIjQjJy4DNTQ+AjMyHgIfATc+AzMyHgIVFA4CBwIAFyg2HhAfGxkKChkbHxAeNigXBwwSC6AGDAwMBgYMDAwGoAsSDAdbogEBAQEBAaIGCgcEDRceEQkREA4GLy8GDhARCREeFw0EBwoGAS0eNigXBwwSCwsSDAcXKDYeEB8bGQqgBgsJBgUJCwagChkbHxA+ogEBAQGiBg4QEQkRHhcNBAcKBjQ0BgoHBA0XHhEJERAOBgABAAAAAAIAAcAAMQAAARQOAgcxBw4DIyIuAi8BLgM1ND4CMzIeAhcHFwc3Jzc+AzMyHgIVAgAHDBILoAYMDAwGBgwMDAagCxIMBxcoNh4KFRMSCC9wQLBwJwUJCgkFHjYoFwEtEB8bGQqgBgsJBgUJCwagChkbHxAeNigXAwUIBUtAoMBAOwECAQEXKDYeAAABAAAAAAIAAbcAKgAAEzQ3NjMyFxYXFhcWFzY3Njc2NzYzMhcWFRQPAQYjIi8BJicmJyYnJicmNQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGBwExPyMkBgYLCgkKCgoKCQoLBgYkIz8/QawFBawCBgUNDg4OFRQTAAAAAQAAAA0B2wHSACYAABM0PwI2FzYfAhYVFA8BFxQVFAcGByYvAQcGByYnJjU0PwEnJjUAEI9BBQkIBkCPEAdoGQMDBgUGgIEGBQYDAwEYaAcBIwsCFoEMAQEMgRYCCwYIZJABBQUFAwEBAkVFAgEBAwUFAwOQZAkFAAAAAAIAAAANAdsB0gAkAC4AABM0PwI2FzYfAhYVFA8BFxQVFAcmLwEHBgcmJyY1ND8BJyY1HwEHNxcnNy8BBwAQj0EFCQgGQI8QB2gZDAUGgIEGBQYDAwEYaAc/WBVsaxRXeDY2ASMLAhaBDAEBDIEWAgsGCGSQAQUNAQECRUUCAQEDBQUDA5BkCQURVXg4OHhVEW5uAAABACMAKQHdAXwAGgAANzQ/ATYXNh8BNzYXNh8BFhUUDwEGByYvASY1IwgmCAwLCFS8CAsMCCYICPUIDAsIjgjSCwkmCQEBCVS7CQEBCSYJCg0H9gcBAQePBwwAAAEAHwAfAXMBcwAsAAA3ND8BJyY1ND8BNjMyHwE3NjMyHwEWFRQPARcWFRQPAQYjIi8BBwYjIi8BJjUfCFRUCAgnCAwLCFRUCAwLCCcICFRUCAgnCAsMCFRUCAsMCCcIYgsIVFQIDAsIJwgIVFQICCcICwwIVFQICwwIJwgIVFQICCcIDAAAAAACAAAAJQFJAbcAHwArAAA3NTQ3NjsBNTQ3NjMyFxYdATMyFxYdARQHBiMhIicmNTczNTQnJiMiBwYdAQAICAsKJSY1NCYmCQsICAgIC/7tCwgIW5MWFR4fFRZApQsICDc0JiYmJjQ3CAgLpQsICAgIC8A3HhYVFRYeNwAAAQAAAAcBbgG3ACEAADcRNDc2NzYzITIXFhcWFREUBwYHBiMiLwEHBiMiJyYnJjUABgUKBgYBLAYGCgUGBgUKBQcOCn5+Cg4GBgoFBicBcAoICAMDAwMICAr+kAoICAQCCXl5CQIECAgKAAAAAwAAACUCAAFuABgAMQBKAAA3NDc2NzYzMhcWFxYVFAcGBwYjIicmJyY1MxYXFjMyNzY3JicWFRQHBiMiJyY1NDcGBzcUFxYzMjc2NTQ3NjMyNzY1NCcmIyIHBhUABihDREtLREMoBgYoQ0RLS0RDKAYlJjk5Q0M5OSYrQREmJTU1JSYRQSuEBAQGBgQEEREZBgQEBAQGJBkayQoKQSgoKChBCgoKCkEoJycoQQoKOiMjIyM6RCEeIjUmJSUmNSIeIUQlBgQEBAQGGBIRBAQGBgQEGhojAAAABQAAAAkCAAGJACwAOABRAGgAcAAANzQ3Njc2MzIXNzYzMhcWFxYXFhcWFxYVFDEGBwYPAQYjIicmNTQ3JicmJyY1MxYXNyYnJjU0NwYHNxQXFjMyNzY1NDc2MzI3NjU0JyYjIgcGFRc3Njc2NyYnNxYXFhcWFRQHBgcGBwYjPwEWFRQHBgcABitBQU0ZGhADBQEEBAUFBAUEBQEEHjw8Hg4DBQQiBQ0pIyIZBiUvSxYZDg4RQSuEBAQGBgQEEREZBgQEBAQGJBkaVxU9MzQiIDASGxkZEAYGCxQrODk/LlACFxYlyQsJQycnBRwEAgEDAwIDAwIBAwUCNmxsNhkFFAMFBBUTHh8nCQtKISgSHBsfIh4hRCUGBAQEBAYYEhEEBAYGBAQaGiPJJQUiIjYzISASGhkbCgoKChIXMRsbUZANCyghIA8AAAMAAAAAAbcB2wA5AEoAlAAANzU0NzY7ATY3Njc2NzY3Njc2MzIXFhcWFRQHMzIXFhUUBxYVFAcUFRQHFgcGKwEiJyYnJisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzMyFxYXFhcWFxYXFhcWOwEyNTQnNjc2NTQnNjU0JyYnNjc2NTQnJisBNDc2NTQnJiMGBwYHBgcGBwYHBgcGBwYHBgcGBwYrARUACwoQTgodEQ4GBAMFBgwLDxgTEwoKDjMdFhYOAgoRARkZKCUbGxsjIQZSEAoLJQUFCAcGBQUGBwgFBUkJBAUFBAQHBwMDBwcCPCUjNwIJBQUFDwMDBAkGBgsLDmUODgoJGwgDAwYFDAYQAQUGAwQGBgYFBgUGBgQJSbcPCwsGJhUPCBERExMMCgkJFBQhGxwWFR4ZFQoKFhMGBh0WKBcXBgcMDAoLDxIHBQYGBQcIBQYGBQgSAQEBAQICAQEDAgEULwgIBQoLCgsJDhQHCQkEAQ0NCg8LCxAdHREcDQ4IEBETEw0GFAEHBwUECAgFBQUFAgO3AAADAAD/2wG3AbcAPABNAJkAADc1NDc2OwEyNzY3NjsBMhcWBxUWFRQVFhUUBxYVFAcGKwEWFRQHBgcGIyInJicmJyYnJicmJyYnIyInJjU3FBcWMzI3NjU0JyYjIgcGFRczMhcWFxYXFhcWFxYXFhcWFxYXFhcWFzI3NjU0JyY1MzI3NjU0JyYjNjc2NTQnNjU0JyYnNjU0JyYrASIHIgcGBwYHBgcGIwYrARUACwoQUgYhJRsbHiAoGRkBEQoCDhYWHTMOCgoTExgPCwoFBgIBBAMFDhEdCk4QCgslBQUIBwYFBQYHCAUFSQkEBgYFBgUGBgYEAwYFARAGDAUGAwMIGwkKDg5lDgsLBgYJBAMDDwUFBQkCDg4ZJSU8AgcHAwMHBwQEBQUECbe3DwsKDAwHBhcWJwIWHQYGExYKChUZHhYVHRoiExQJCgsJDg4MDAwNBg4WJQcLCw+kBwUGBgUHCAUGBgUIpAMCBQYFBQcIBAUHBwITBwwTExERBw0OHBEdHRALCw8KDQ0FCQkHFA4JCwoLCgUICBgMCxUDAgEBAgMBAQG3AAAAAQAAAA0A7gHSABQAABM0PwI2FxEHBgcmJyY1ND8BJyY1ABCPQQUJgQYFBgMDARhoBwEjCwIWgQwB/oNFAgEBAwUFAwOQZAkFAAAAAAIAAAAAAgABtwAqAFkAABM0NzYzMhcWFxYXFhc2NzY3Njc2MzIXFhUUDwEGIyIvASYnJicmJyYnJjUzFB8BNzY1NCcmJyYnJicmIyIHBgcGBwYHBiMiJyYnJicmJyYjIgcGBwYHBgcGFQAkJUARExIQEAsMCgoMCxAQEhMRQCUkQbIGBwcGsgMFBQsKCQkGByU1pqY1BgYJCg4NDg0PDhIRDg8KCgcFCQkFBwoKDw4REg4PDQ4NDgoJBgYBMT8jJAYGCwoJCgoKCgkKCwYGJCM/P0GsBQWsAgYFDQ4ODhUUEzA1oJ82MBcSEgoLBgcCAgcHCwsKCQgHBwgJCgsLBwcCAgcGCwoSEhcAAAACAAAABwFuAbcAIQAoAAA3ETQ3Njc2MyEyFxYXFhURFAcGBwYjIi8BBwYjIicmJyY1PwEfAREhEQAGBQoGBgEsBgYKBQYGBQoFBw4Kfn4KDgYGCgUGJZIZef7cJwFwCggIAwMDAwgICv6QCggIBAIJeXkJAgQICAoIjRl0AWP+nQAAAAABAAAAJQHbAbcAMgAANzU0NzY7ATU0NzYzMhcWHQEUBwYrASInJj0BNCcmIyIHBh0BMzIXFh0BFAcGIyEiJyY1AAgIC8AmJjQ1JiUFBQgSCAUFFhUfHhUWHAsICAgIC/7tCwgIQKULCAg3NSUmJiU1SQgFBgYFCEkeFhUVFh43CAgLpQsICAgICwAAAAIAAQANAdsB0gAiAC0AABM2PwI2MzIfAhYXFg8BFxYHBiMiLwEHBiMiJyY/AScmNx8CLwE/AS8CEwEDDJBABggJBUGODgIDCmcYAgQCCAMIf4IFBgYEAgEZaQgC7hBbEgINSnkILgEBJggCFYILC4IVAggICWWPCgUFA0REAwUFCo9lCQipCTBmEw1HEhFc/u0AAAADAAAAAAHJAbcAFAAlAHkAADc1NDc2OwEyFxYdARQHBisBIicmNTcUFxYzMjc2NTQnJiMiBwYVFzU0NzYzNjc2NzY3Njc2NzY3Njc2NzY3NjMyFxYXFhcWFxYXFhUUFRQHBgcGBxQHBgcGBzMyFxYVFAcWFRYHFgcGBxYHBgcjIicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQFBQgGDw8OFAkFBAQBAQMCAQIEBAYFBw4KCgcHBQQCAwEBAgMDAgYCAgIBAU8XEBAQBQEOBQUECwMREiYlExYXDAwWJAoHBQY3twcGBQUGB7cIBQUFBQgkBwYFBQYHCAUGBgUIJLcHBQYBEBATGQkFCQgGBQwLBgcICQUGAwMFBAcHBgYICQQEBwsLCwYGCgIDBAMCBBEQFhkSDAoVEhAREAsgFBUBBAUEBAcMAQUFCAAAAAADAAD/2wHJAZIAFAAlAHkAADcUFxYXNxY3Nj0BNCcmBycGBwYdATc0NzY3FhcWFRQHBicGJyY1FzU0NzY3Fjc2NzY3NjcXNhcWBxYXFgcWBxQHFhUUBwYHJxYXFhcWFRYXFhcWFRQVFAcGBwYHBgcGBwYnBicmJyYnJicmJyYnJicmJyYnJiciJyY1AAUGB1MHBQYGBQdTBwYFJQUFCAcGBQUGBwgFBWQGBQcKJBYMDBcWEyUmEhEDCwQFBQ4BBRAQEBdPAQECAgIGAgMDAgEBAwIEBQcHCgoOBwUGBAQCAQIDAQEEBAUJFA4PDwYIBQWlBwYFAQEBBwQJtQkEBwEBAQUGB7eTBwYEAQEEBgcJBAYBAQYECZS4BwYEAgENBwUCBgMBAQEXEyEJEhAREBcIDhAaFhEPAQEFAgQCBQELBQcKDAkIBAUHCgUGBwgDBgIEAQEHBQkIBwUMCwcECgcGCRoREQ8CBgQIAAAAAQAAAAEAAJth57dfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAAAAAAoAFAAeAEoAcACKAMoBQAGIAcwCCgJUAoICxgMEAzoDpgRKBRgF7AYSBpgG2gcgB2oIGAjOAAAAAQAAABwAmgAFAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('truetype'),\n    url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AABcUAAoAAAAAFswAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAEuEAABLho6TvIE9TLzIAABPYAAAAYAAAAGAIIwgbY21hcAAAFDgAAACkAAAApKPambxnYXNwAAAU3AAAAAgAAAAIAAAAEGhlYWQAABTkAAAANgAAADYBGAe5aGhlYQAAFRwAAAAkAAAAJAPiAf1obXR4AAAVQAAAAHAAAABwLOAAQ21heHAAABWwAAAABgAAAAYAHFAAbmFtZQAAFbgAAAE8AAABPPC1n05wb3N0AAAW9AAAACAAAAAgAAMAAAEABAQAAQEBB3JhdGluZwABAgABADr4HAL4GwP4GAQeCgAZU/+Lix4KABlT/4uLDAeLZviU+HQFHQAAAP0PHQAAAQIRHQAAAAkdAAAS2BIAHQEBBw0PERQZHiMoLTI3PEFGS1BVWl9kaW5zeH2Ch4xyYXRpbmdyYXRpbmd1MHUxdTIwdUU2MDB1RTYwMXVFNjAydUU2MDN1RTYwNHVFNjA1dUYwMDR1RjAwNXVGMDA2dUYwMEN1RjAwRHVGMDIzdUYwMkV1RjA2RXVGMDcwdUYwODd1RjA4OHVGMDg5dUYwOEF1RjA5N3VGMDlDdUYxMjN1RjE2NHVGMTY1AAACAYkAGgAcAgABAAQABwAKAA0AVgCWAL0BAgGMAeQCbwLwA4cD5QR0BQMFdgZgB8MJkQtxC7oM2Q1jDggOmRAYEZr8lA78lA78lA77lA74lPetFftFpTz3NDz7NPtFcfcU+xBt+0T3Mt73Mjht90T3FPcQBfuU+0YV+wRRofcQMOP3EZ3D9wXD+wX3EXkwM6H7EPsExQUO+JT3rRX7RaU89zQ8+zT7RXH3FPsQbftE9zLe9zI4bfdE9xT3EAX7lPtGFYuLi/exw/sF9xF5MDOh+xD7BMUFDviU960V+0WlPPc0PPs0+0Vx9xT7EG37RPcy3vcyOG33RPcU9xAFDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iu2i7J4pm6mqLKetovci81JizoIDviU98EVi9xJzTqLYItkeHBucKhknmCLOotJSYs6i2CeZKhwCIuL9zT7NAWbe5t7m4ubi5ubm5sI9zT3NAWopp6yi7YIME0V+zb7NgWKioqKiouKi4qMiowI+zb3NgV6m4Ghi6OLubCwuYuji6GBm3oIule6vwWbnKGVo4u5i7Bmi12Lc4F1ensIDviU98EVi2B4ZG5wCIuL+zT7NAV7e3t7e4t7i3ube5sI+zT3NAVupniyi7aL3M3N3Iuni6WDoX4IXED3BEtL+zT3RPdU+wTLssYFl46YjZiL3IvNSYs6CA6L98UVi7WXrKOio6Otl7aLlouXiZiHl4eWhZaEloSUhZKFk4SShZKEkpKSkZOSkpGUkZaSCJaSlpGXj5iPl42Wi7aLrX+jc6N0l2qLYYthdWBgYAj7RvtABYeIh4mGi4aLh42Hjgj7RvdABYmNiY2Hj4iOhpGDlISUhZWFlIWVhpaHmYaYiZiLmAgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuHioiJiImIiIqHi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOZ4v3txWLkpCPlo0I9yOgzPcWBY6SkI+Ri5CLkIePhAjL+xb3I3YFlomQh4uEi4aJh4aGCCMmpPsjBYuKi4mLiIuCh4aDi4iLh4yHjQj7FM/7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwjKeRXjN3b7DfcAxPZSd/cN4t/7DJ1V9wFV+wEFDq73ZhWLk42RkZEIsbIFkZCRjpOLkouSiJCGCN8291D3UAWQkJKOkouTi5GIkYYIsWQFkYaNhIuEi4OJhYWFCPuJ+4kFhYWFiYOLhIuEjYaRCPsi9yIFhZCJkouSCA77AartFYuSjpKQkAjf3zffBYaQiJKLk4uSjpKQkAiysgWRkJGOk4uSi5KIkIYI3zff3wWQkJKOk4uSi5KIkIYIsmQFkIaOhIuEi4OIhIaGCDc33zcFkIaOhIuEi4OIhYaFCGRkBYaGhIiEi4OLhI6GkAg33zc3BYaGhIiEi4OLhY6FkAhksgWGkYiRi5MIDvtLi8sVi/c5BYuSjpKQkJCQko6SiwiVi4vCBYuul6mkpKSkqpiui66LqX6kcqRymG2LaAiLVJSLBZKLkoiQhpCGjoSLhAiL+zkFi4OIhYaGhoWEiYSLCPuniwWEi4SNhpGGkIiRi5MI5vdUFfcni4vCBYufhJx8mn2ZepJ3i3aLeoR9fX18g3qLdwiLVAUO+yaLshWL+AQFi5GNkY+RjpCQj5KNj42PjI+LCPfAiwWPi4+Kj4mRiZCHj4aPhY2Fi4UIi/wEBYuEiYWHhoeGhoeFiIiKhoqHi4GLhI6EkQj7EvcN+xL7DQWEhYOIgouHi4eLh42EjoaPiJCHkImRi5IIDov3XRWLko2Rj5Kltq+vuKW4pbuZvYu9i7t9uHG4ca9npWCPhI2Fi4SLhYmEh4RxYGdoXnAIXnFbflmLWYtbmF6lXqZnrnG2h5KJkouRCLCLFaRkq2yxdLF0tH+4i7iLtJexorGiq6qksm64Z61goZZ3kXaLdItnfm1ycnJybX9oiwhoi22XcqRypH6pi6+LopGglp9gdWdpbl4I9xiwFYuHjIiOiI6IjoqPi4+LjoyOjo2OjY6Lj4ubkJmXl5eWmZGbi4+LjoyOjo2OjY6LjwiLj4mOiY6IjYiNh4tzi3eCenp6eoJ3i3MIDov3XRWLko2Sj5GouK+utqW3pbqYvouci5yJnIgIm6cFjY6NjI+LjIuNi42JjYqOio+JjomOiY6KjomOiY6JjoqNioyKjomMiYuHi4qLiouLCHdnbVVjQ2NDbVV3Zwh9cgWJiIiJiIuJi36SdJiIjYmOi46LjY+UlJlvl3KcdJ90oHeie6WHkYmSi5IIsIsVqlq0Z711CKGzBXqXfpqCnoKdhp6LoIuikaCWn2B1Z2luXgj3GLAVi4eMiI6IjoiOio+Lj4uOjI6OjY6NjouPi5uQmZeXl5aZkZuLj4uOjI6OjY6NjouPCIuPiY6JjoiNiI2Hi3OLd4J6enp6gneLcwji+10VoLAFtI+wmK2hrqKnqKKvdq1wp2uhCJ2rBZ1/nHycepx6mHqWeY+EjYWLhIuEiYWHhIR/gH1+fG9qaXJmeWV5Y4Jhiwi53BXb9yQFjIKMg4uEi3CDc3x1fHV3fHOBCA6L1BWL90sFi5WPlJKSkpKTj5aLCNmLBZKPmJqepJaZlZeVlY+Qj5ONl42WjpeOmI+YkZWTk5OSk46Vi5uLmYiYhZiFlIGSfgiSfo55i3WLeYd5gXgIvosFn4uchJl8mn2Seot3i3qGfIJ9jYSLhYuEi3yIfoR+i4eLh4uHi3eGen99i3CDdnt8CHt8dYNwiwhmiwV5i3mNeY95kHeRc5N1k36Ph4sIOYsFgIuDjoSShJKHlIuVCLCdFYuGjIePiI+Hj4mQi5CLj42Pj46OjY+LkIuQiZCIjoePh42Gi4aLh4mHh4eIioaLhgjUeRWUiwWNi46Lj4qOi4+KjYqOi4+Kj4mQio6KjYqNio+Kj4mQio6KjIqzfquEpIsIrosFr4uemouri5CKkYqQkY6QkI6SjpKNkouSi5KJkoiRlZWQlouYi5CKkImRiZGJj4iOCJGMkI+PlI+UjZKLkouViJODk4SSgo+CiwgmiwWLlpCalJ6UnpCbi5aLnoiYhJSFlH+QeYuGhoeDiYCJf4h/h3+IfoWBg4KHh4SCgH4Ii4qIiYiGh4aIh4mIiIiIh4eGh4aHh4eHiIiHiIeHiIiHiIeKh4mIioiLCIKLi/tLBQ6L90sVi/dLBYuVj5OSk5KSk46WiwjdiwWPi5iPoZOkk6CRnZCdj56Nn4sIq4sFpougg5x8m3yTd4txCIuJBZd8kHuLd4uHi4eLh5J+jn6LfIuEi4SJhZR9kHyLeot3hHp8fH19eoR3iwhYiwWVeI95i3mLdIh6hH6EfoKBfoV+hX2He4uBi4OPg5KFkYaTh5SHlYiTipOKk4qTiJMIiZSIkYiPgZSBl4CaeKR+moSPCD2LBYCLg4+EkoSSh5SLlQiw9zgVi4aMh4+Ij4ePiZCLkIuPjY+Pjo6Nj4uQi5CJkIiOh4+HjYaLhouHiYeHh4iKhouGCNT7OBWUiwWOi46Kj4mPio+IjoiPh4+IjoePiI+Hj4aPho6HjoiNiI6Hj4aOho6Ii4qWfpKDj4YIk4ORgY5+j36OgI1/jYCPg5CGnYuXj5GUkpSOmYuei5aGmoKfgp6GmouWCPCLBZSLlI+SkpOTjpOLlYuSiZKHlIeUho+Fi46PjY+NkY2RjJCLkIuYhpaBlY6RjZKLkgiLkomSiJKIkoaQhY6MkIyRi5CLm4aXgpOBkn6Pe4sIZosFcotrhGN9iouIioaJh4qHiomKiYqIioaKh4mHioiKiYuHioiLh4qIi4mLCIKLi/tLBQ77lIv3txWLkpCPlo0I9yOgzPcWBY6SkI+RiwiL/BL7FUcFh4mHioiLh4uIjImOiY6KjouPi4yLjYyOCKP3IyPwBYaQiZCLjwgOi/fFFYu1l6yjoqOjrZe2i5aLl4mYh5eHloWWhJaElIWShZOEkoWShJKSkpGTkpKRlJGWkgiWkpaRl4+Yj5eNlou2i61/o3OjdJdqi2GLYXVgYGAI+0b7QAWHiIeJhouGi4eNh44I+0b3QAWJjYmNh4+IjoaRg5SElIWVhZSFlYaWh5mGmImYi5gIsIsVi2ucaa9oCPc6+zT3OvczBa+vnK2Lq4ubiZiHl4eXhpSFkoSSg5GCj4KQgo2CjYONgYuBi4KLgIl/hoCGgIWChAiBg4OFhISEhYaFhoaIhoaJhYuFi4aNiJCGkIaRhJGEkoORgZOCkoCRgJB/kICNgosIgYuBi4OJgomCiYKGgoeDhYSEhYSGgod/h3+Jfot7CA77JouyFYv4BAWLkY2Rj5GOkJCPko2PjY+Mj4sI98CLBY+Lj4qPiZGJkIePho+FjYWLhQiL/AQFi4SJhYeGh4aGh4WIiIqGioeLgYuEjoSRCPsS9w37EvsNBYSFg4iCi4eLh4uHjYSOho+IkIeQiZGLkgiwkxX3JvchpHL3DfsIi/f3+7iLi/v3BQ5ni8sVi/c5BYuSjpKQkJCQko6Siwj3VIuLwgWLrpippKSkpKmYrouvi6l+pHKkcpdti2gIi0IFi4aKhoeIh4eHiYaLCHmLBYaLh42Hj4eOipCLkAiL1AWLn4OcfZp9mXqSdot3i3qEfX18fIR6i3cIi1SniwWSi5KIkIaQho6Ei4QIi/s5BYuDiIWGhoaFhImEiwj7p4sFhIuEjYaRhpCIkYuTCA5njPe6FYyQkI6UjQj3I6DM9xYFj5KPj5GLkIuQh4+ECMv7FvcjdgWUiZCIjYaNhoiFhYUIIyak+yMFjIWKhomHiYiIiYaLiIuHjIeNCPsUz/sVRwWHiYeKiIuHi4eNiY6Jj4uQjJEIo/cjI/AFhZGJkY2QCPeB+z0VnILlW3rxiJ6ZmNTS+wydgpxe54v7pwUOZ4vCFYv3SwWLkI2Pjo+Pjo+NkIsI3osFkIuPiY6Ij4eNh4uGCIv7SwWLhomHh4eIh4eKhosIOIsFhouHjIePiI+Jj4uQCLCvFYuGjIePh46IkImQi5CLj42Pjo6PjY+LkIuQiZCIjoePh42Gi4aLhomIh4eIioaLhgjvZxWL90sFi5CNj46Oj4+PjZCLj4ySkJWWlZaVl5SXmJuVl5GRjo6OkI6RjZCNkIyPjI6MkY2TCIySjJGMj4yPjZCOkY6RjpCPjo6Pj42Qi5SLk4qSiZKJkYiPiJCIjoiPho6GjYeMhwiNh4yGjIaMhYuHi4iLiIuHi4eLg4uEiYSJhImFiYeJh4mFh4WLioqJiomJiIqJiokIi4qKiIqJCNqLBZqLmIWWgJaAkH+LfIt6hn2Af46DjYSLhIt9h36Cf4+Bi3+HgImAhYKEhI12hnmAfgh/fXiDcosIZosFfot+jHyOfI5/joOOg41/j32Qc5N8j4SMhouHjYiOh4+Jj4uQCA5ni/c5FYuGjYaOiI+Hj4mQiwjeiwWQi4+Njo+Pjo2Qi5AIi/dKBYuQiZCHjoiPh42Giwg4iwWGi4eJh4eIiImGi4YIi/tKBbD3JhWLkIyPj4+OjpCNkIuQi4+Jj4iOh42Hi4aLhomHiIeHh4eKhouGi4aMiI+Hj4qPi5AI7/snFYv3SwWLkI2Qj46Oj4+NkIuSi5qPo5OZkJePk46TjZeOmo6ajpiMmIsIsIsFpIueg5d9ln6Qeol1koSRgo2Aj4CLgIeAlH+Pfot9i4WJhIiCloCQfIt7i3yFfoGACICAfoZ8iwg8iwWMiIyJi4mMiYyJjYmMiIyKi4mPhI2GjYeNh42GjYOMhIyEi4SLhouHi4iLiYuGioYIioWKhomHioeJh4iGh4eIh4aIh4iFiISJhImDioKLhouHjYiPh4+Ij4iRiJGJkIqPCIqPipGKkomTipGKj4qOiZCJkYiQiJCIjoWSgZZ+nIKXgZaBloGWhJGHi4aLh42HjwiIjomQi48IDviUFPiUFYsMCgAAAAADAgABkAAFAAABTAFmAAAARwFMAWYAAAD1ABkAhAAAAAAAAAAAAAAAAAAAAAEQAAAAAAAAAAAAAAAAAAAAAEAAAPFlAeD/4P/gAeAAIAAAAAEAAAAAAAAAAAAAACAAAAAAAAIAAAADAAAAFAADAAEAAAAUAAQAkAAAACAAIAAEAAAAAQAg5gXwBvAN8CPwLvBu8HDwivCX8JzxI/Fl//3//wAAAAAAIOYA8ATwDPAj8C7wbvBw8Ifwl/Cc8SPxZP/9//8AAf/jGgQQBhABD+wP4g+jD6IPjA+AD3wO9g62AAMAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAEAAJrVlLJfDzz1AAsCAAAAAADP/GODAAAAAM/8Y4MAAP/bAgAB2wAAAAgAAgAAAAAAAAABAAAB4P/gAAACAAAAAAACAAABAAAAAAAAAAAAAAAAAAAAHAAAAAAAAAAAAAAAAAEAAAACAAAAAgAAAAIAAAACAAAAAgAAAAIAAAACAAAAAdwAAAHcAAACAAAjAZMAHwFJAAABbgAAAgAAAAIAAAACAAAAAgAAAAEAAAACAAAAAW4AAAHcAAAB3AABAdwAAAHcAAAAAFAAABwAAAAAAA4ArgABAAAAAAABAAwAAAABAAAAAAACAA4AQAABAAAAAAADAAwAIgABAAAAAAAEAAwATgABAAAAAAAFABYADAABAAAAAAAGAAYALgABAAAAAAAKADQAWgADAAEECQABAAwAAAADAAEECQACAA4AQAADAAEECQADAAwAIgADAAEECQAEAAwATgADAAEECQAFABYADAADAAEECQAGAAwANAADAAEECQAKADQAWgByAGEAdABpAG4AZwBWAGUAcgBzAGkAbwBuACAAMQAuADAAcgBhAHQAaQBuAGdyYXRpbmcAcgBhAHQAaQBuAGcAUgBlAGcAdQBsAGEAcgByAGEAdABpAG4AZwBGAG8AbgB0ACAAZwBlAG4AZQByAGEAdABlAGQAIABiAHkAIABJAGMAbwBNAG8AbwBuAC4AAwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA==) format('woff')\n  ;\n  font-weight: normal;\n  font-style: normal;\n}\n.ui.rating .icon {\n  font-family: 'Rating';\n  line-height: 1;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n/* Empty Star */\n.ui.rating .icon:before {\n  content: '\\f005';\n}\n/* Active Star */\n.ui.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/*-------------------\n        Star\n--------------------*/\n\n/* Unfilled Star */\n.ui.star.rating .icon:before {\n  content: '\\f005';\n}\n/* Active Star */\n.ui.star.rating .active.icon:before {\n  content: '\\f005';\n}\n\n/* Partial */\n.ui.star.rating .partial.icon:before {\n  content: '\\f006';\n}\n.ui.star.rating .partial.icon {\n  content: '\\f005';\n}\n\n/*-------------------\n        Heart\n--------------------*/\n\n/* Empty Heart\n.ui.heart.rating .icon:before {\n  content: '\\f08a';\n}\n*/\n.ui.heart.rating .icon:before {\n  content: '\\f004';\n}\n/* Active */\n.ui.heart.rating .active.icon:before {\n  content: '\\f004';\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/rating.variables",
    "content": "/*******************************\n             Rating\n*******************************/\n\n@margin: 0em @relativeMini;\n@whiteSpace: nowrap;\n@verticalAlign: baseline;\n\n@iconCursor: pointer;\n@iconWidth: 1.25em;\n@iconHeight: auto;\n@iconTransition:\n  opacity @defaultDuration @defaultEasing,\n  background @defaultDuration @defaultEasing,\n  text-shadow @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing\n;\n\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Standard */\n@inactiveBackground: transparent;\n@inactiveColor: rgba(0, 0, 0, 0.15);\n\n@selectedBackground: @inactiveBackground;\n@selectedColor: @textColor;\n\n@activeBackground: @inactiveBackground;\n@activeColor: @darkTextColor;\n\n/* Star */\n@starIconWidth: @iconWidth;\n@starIconHeight: @iconHeight;\n@starShadowWidth: 1px;\n\n@starInactiveBackground: @inactiveBackground;\n@starInactiveColor: @inactiveColor;\n@starInactiveTextShadow: none;\n\n@starActiveBackground: @activeBackground;\n@starActiveColor: #FFE623;\n@starActiveShadowColor: #DDC507;\n@starActiveTextShadow:\n  0px -@starShadowWidth 0px @starActiveShadowColor,\n  -@starShadowWidth 0px 0px @starActiveShadowColor,\n  0px @starShadowWidth 0px @starActiveShadowColor,\n  @starShadowWidth 0px 0px @starActiveShadowColor\n;\n\n@starSelectedBackground: @selectedBackground;\n@starSelectedColor: #FFCC00;\n@starSelectedShadowColor: #E6A200;\n@starSelectedTextShadow:\n  0px -@starShadowWidth 0px @starSelectedShadowColor,\n  -@starShadowWidth 0px 0px @starSelectedShadowColor,\n  0px @starShadowWidth 0px @starSelectedShadowColor,\n  @starShadowWidth 0px 0px @starSelectedShadowColor\n;\n\n/* Heart */\n@heartIconWidth: 1.4em;\n@heartIconHeight: @iconHeight;\n@heartShadowWidth: 1px;\n\n@heartInactiveBackground: @inactiveBackground;\n@heartInactiveColor: @inactiveColor;\n@heartInactiveTextShadow: none;\n\n@heartActiveBackground: @activeBackground;\n@heartActiveColor: #FF6D75;\n@heartActiveShadowColor: #CD0707;\n@heartActiveTextShadow:\n  0px -@heartShadowWidth 0px @heartActiveShadowColor,\n  -@heartShadowWidth 0px 0px @heartActiveShadowColor,\n  0px @heartShadowWidth 0px @heartActiveShadowColor,\n  @heartShadowWidth 0px 0px @heartActiveShadowColor\n;\n\n@heartSelectedBackground: @selectedBackground;\n@heartSelectedColor: #FF3000;\n@heartSelectedShadowColor: #AA0101;\n@heartSelectedTextShadow:\n  0px -@heartShadowWidth 0px @heartSelectedShadowColor,\n  -@heartShadowWidth 0px 0px @heartSelectedShadowColor,\n  0px @heartShadowWidth 0px @heartSelectedShadowColor,\n  @heartShadowWidth 0px 0px @heartSelectedShadowColor\n;\n\n/*-------------------\n        States\n--------------------*/\n\n@interactiveActiveIconOpacity: 1;\n@interactiveSelectedIconOpacity: 1;\n\n/*-------------------\n      Variations\n--------------------*/\n\n@massive: 2rem;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/search.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/search.variables",
    "content": "/*******************************\n            Search\n*******************************/\n\n/* Search Prompt */\n@promptBackground: @inputBackground;\n@promptVerticalPadding: @inputVerticalPadding;\n@promptHorizontalPadding: @inputHorizontalPadding;\n@promptLineHeight: @inputLineHeight;\n@promptFontSize: @relativeMedium;\n@promptPadding: (@promptVerticalPadding + ((1em - @promptLineHeight) / 2)) @promptHorizontalPadding;\n@promptBorder: 1px solid @borderColor;\n@promptBorderRadius: @circularRadius;\n@promptColor: @textColor;\n@promptTransition:\n  background-color @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing,\n  border-color @defaultDuration @defaultEasing\n;\n@promptBoxShadow: 0em 0em 0em 0em transparent inset;\n\n/* Result Box */\n@resultsWidth: 18em;\n@resultsBackground: #FFFFFF;\n@resultsDistance: 0.5em;\n@resultsBorderRadius: @defaultBorderRadius;\n@resultsBorder: 1px solid @solidBorderColor;\n@resultsBoxShadow: @floatingShadow;\n\n/* Result */\n@resultFontSize: 1em;\n@resultVerticalPadding: @relativeTiny;\n@resultHorizontalPadding: @relativeLarge;\n@resultPadding: @resultVerticalPadding @resultHorizontalPadding;\n@resultTextColor: @textColor;\n@resultLineHeight: 1.33;\n@resultDivider: 1px solid @internalBorderColor;\n@resultLastDivider: none;\n\n/* Result Image */\n@resultImageFloat: right;\n@resultImageBackground: none;\n@resultImageWidth: 5em;\n@resultImageHeight: 3em;\n@resultImageBorderRadius: 0.25em;\n@resultImageMargin: 0em 6em 0em 0em;\n\n/* Result Content */\n@resultTitleFont: @headerFont;\n@resultTitleMargin: -@headerLineHeightOffset 0em 0em;\n@resultTitleFontWeight: bold;\n@resultTitleFontSize: @relativeMedium;\n@resultTitleColor: @darkTextColor;\n\n/* Description */\n@resultDescriptionFontSize: @relativeSmall;\n@resultDescriptionDistance: 0;\n@resultDescriptionColor: @lightTextColor;\n\n/* Price */\n@resultPriceFloat: right;\n@resultPriceColor: @green;\n\n/* Special Message */\n@messageVerticalPadding: 1em;\n@messageHorizontalPadding: 1em;\n@messageHeaderFontSize: @medium;\n@messageHeaderFontWeight: bold;\n@messageHeaderColor: @textColor;\n@messageDescriptionDistance: 0.25rem;\n@messageDescriptionFontSize: 1em;\n@messageDescriptionColor: @textColor;\n\n/* All Results Link */\n@actionBorder: none;\n@actionBackground: @darkWhite;\n@actionPadding: @relativeSmall @relativeMedium;\n@actionColor: @textColor;\n@actionFontWeight: bold;\n@actionAlign: center;\n\n\n/*******************************\n            States\n*******************************/\n\n/* Focus */\n@promptFocusBackground: @promptBackground;\n@promptFocusBorderColor: @selectedBorderColor;\n@promptFocusColor: @selectedTextColor;\n\n/* Hover */\n@resultHoverBackground: @offWhite;\n@actionHoverBackground: #E0E0E0;\n\n/* Loading */\n@invertedLoaderFillColor: rgba(0, 0, 0, 0.15);\n\n/* Active Category */\n@categoryActiveBackground: @darkWhite;\n@categoryNameActiveColor: @textColor;\n\n/* Active Result */\n@resultActiveBorderLeft: @internalBorderColor;\n@resultActiveBackground: @darkWhite;\n@resultActiveBoxShadow: none;\n@resultActiveTitleColor: @darkTextColor;\n@resultActiveDescriptionColor: @darkTextColor;\n@resultsZIndex: 998;\n\n\n/*******************************\n            Types\n*******************************/\n\n/* Selection */\n@selectionPromptBorderRadius: @defaultBorderRadius;\n\n@selectionCloseTop: 0em;\n@selectionCloseTransition:\n  color @defaultDuration @defaultEasing,\n  opacity @defaultDuration @defaultEasing\n;\n@selectionCloseRight: 0em;\n@selectionCloseIconOpacity: 0.8;\n@selectionCloseIconColor: '';\n@selectionCloseIconHoverOpacity: 1;\n@selectionCloseIconHoverColor: @red;\n\n@selectionCloseIconInputRight: 1.85714em;\n\n/* Category */\n@categoryBackground: @darkWhite;\n@categoryBoxShadow: none;\n@categoryDivider: 1px solid @internalBorderColor;\n@categoryTransition:\n  background @defaultDuration @defaultEasing,\n  border-color @defaultDuration @defaultEasing\n;\n\n@categoryResultsWidth: 28em;\n\n@categoryResultBackground: @white;\n@categoryResultLeftBorder: 1px solid @borderColor;\n@categoryResultDivider: @resultDivider;\n@categoryResultLastDivider: none;\n@categoryResultPadding: @resultPadding;\n@categoryResultTransition: @categoryTransition;\n\n@categoryNameWidth: 100px;\n@categoryNameBackground: transparent;\n@categoryNameFont: @pageFont;\n@categoryNameFontSize: 1em;\n@categoryNameFloat: left;\n@categoryNamePadding: 0.4em 1em;\n@categoryNameFontWeight: bold;\n@categoryNameColor: @lightTextColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/shape.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/shape.variables",
    "content": "/*******************************\n             Shape\n*******************************/\n\n@display: inline-block;\n\n/* Animating */\n@perspective: 2000px;\n\n@duration: 0.6s;\n@easing: ease-in-out;\n\n@hiddenSideOpacity: 0.6;\n@animatingZIndex: 100;\n\n@transition:\n  transform @duration @easing,\n  left @duration @easing,\n  width @duration @easing,\n  height @duration @easing\n;\n@sideTransition: opacity @duration @easing;\n@backfaceVisibility: hidden;\n\n/* Side */\n@sideMargin: 0em;\n\n/*--------------\n      Types\n---------------*/\n\n/* Cube */\n@cubeSize: 15em;\n@cubeBackground: #E6E6E6;\n@cubePadding: 2em;\n@cubeTextColor: @textColor;\n@cubeBoxShadow: 0px 0px 2px rgba(0, 0, 0, 0.3);\n\n@cubeTextAlign: center;\n@cubeFontSize: 2em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/sidebar.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/sidebar.variables",
    "content": "/*******************************\n             Sidebar\n*******************************/\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Animation */\n@perspective: 1500px;\n@duration: 500ms;\n@easing: @defaultEasing;\n\n/* Dimmer */\n@dimmerColor: rgba(0, 0, 0, 0.4);\n@dimmerTransition: opacity @duration;\n\n/* Color below page */\n@canvasBackground: @lightBlack;\n\n/* Shadow */\n@boxShadow: 0px 0px 20px @borderColor;\n@horizontalBoxShadow: @boxShadow;\n@verticalBoxShadow: @boxShadow;\n\n/* Layering */\n@bottomLayer: 1;\n@middleLayer: 2;\n@fixedLayer: 101;\n@topLayer: 102;\n@dimmerLayer: 1000;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Width */\n@veryThinWidth: 60px;\n@thinWidth: 150px;\n@width: 260px;\n@wideWidth: 350px;\n@veryWideWidth: 475px;\n\n/* Height */\n@height: 36px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/sticky.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/sticky.variables",
    "content": "/*******************************\n            Sticky\n*******************************/\n\n@transitionDuration: @defaultDuration;\n@transition: none;\n@zIndex: 800;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/tab.overrides",
    "content": "/*******************************\n         Tab Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/tab.variables",
    "content": "/*******************************\n              Tab\n*******************************/\n\n/* Loading */\n@loadingMinHeight: 250px;\n@loadingContentPosition: relative;\n@loadingContentOffset: -10000px;\n\n@loaderDistanceFromTop: 100px;\n@loaderSize: 2.5em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/transition.overrides",
    "content": "/*******************************\n          Transitions\n*******************************/\n\n/*\n  Some transitions adapted from Animate CSS\n  https://github.com/daneden/animate.css\n\n  Additional transitions adapted from Glide\n  by Nick Pettit - https://github.com/nickpettit/glide\n*/\n\n/*--------------\n     Browse\n---------------*/\n\n.transition.browse {\n  animation-duration: 500ms;\n}\n.transition.browse.in {\n  animation-name: browseIn;\n}\n.transition.browse.out,\n.transition.browse.left.out {\n  animation-name: browseOutLeft;\n}\n.transition.browse.right.out {\n  animation-name: browseOutRight;\n}\n\n/* In */\n@keyframes browseIn {\n  0% {\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n  }\n  10% {\n    transform: scale(0.8) translateZ(0px);\n    z-index: -1;\n    opacity: 0.7;\n  }\n  80% {\n    transform: scale(1.05) translateZ(0px);\n    opacity: 1;\n    z-index: 999;\n  }\n  100% {\n    transform: scale(1) translateZ(0px);\n    z-index: 999;\n  }\n}\n\n/* Out */\n@keyframes browseOutLeft {\n  0% {\n    z-index: 999;\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: -1;\n    transform: translateX(-105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: -1;\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n@keyframes browseOutRight {\n  0% {\n    z-index: 999;\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg);\n  }\n  50% {\n    z-index: 1;\n    transform: translateX(105%) rotateY(35deg) rotateX(10deg) translateZ(-10px);\n  }\n  80% {\n    opacity: 1;\n  }\n  100% {\n    z-index: 1;\n    transform: translateX(0%) rotateY(0deg) rotateX(0deg) translateZ(-10px);\n    opacity: 0;\n  }\n}\n\n\n/*--------------\n     Drop\n---------------*/\n\n.drop.transition {\n  transform-origin: top center;\n  animation-duration: 400ms;\n  animation-timing-function: cubic-bezier(0.34, 1.61, 0.7, 1);\n}\n.drop.transition.in {\n  animation-name: dropIn;\n}\n.drop.transition.out {\n  animation-name: dropOut;\n}\n\n/* Drop */\n@keyframes dropIn {\n  0% {\n    opacity: 0;\n    transform: scale(0);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n@keyframes dropOut {\n  0% {\n    opacity: 1;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0);\n  }\n}\n\n/*--------------\n      Fade\n---------------*/\n\n.transition.fade.in {\n  animation-name: fadeIn;\n}\n.transition[class*=\"fade up\"].in {\n  animation-name: fadeInUp;\n}\n.transition[class*=\"fade down\"].in {\n  animation-name: fadeInDown;\n}\n.transition[class*=\"fade left\"].in {\n  animation-name: fadeInLeft;\n}\n.transition[class*=\"fade right\"].in {\n  animation-name: fadeInRight;\n}\n\n.transition.fade.out {\n  animation-name: fadeOut;\n}\n.transition[class*=\"fade up\"].out {\n  animation-name: fadeOutUp;\n}\n.transition[class*=\"fade down\"].out {\n  animation-name: fadeOutDown;\n}\n.transition[class*=\"fade left\"].out {\n  animation-name: fadeOutLeft;\n}\n.transition[class*=\"fade right\"].out {\n  animation-name: fadeOutRight;\n}\n\n/* In */\n@keyframes fadeIn {\n  0% {\n    opacity: 0;\n  }\n  100% {\n    opacity: 1;\n  }\n}\n@keyframes fadeInUp {\n  0% {\n    opacity: 0;\n    transform: translateY(10%);\n  }\n  100% {\n    opacity: 1;\n    transform: translateY(0%);\n  }\n}\n@keyframes fadeInDown {\n  0% {\n    opacity: 0;\n    transform: translateY(-10%);\n  }\n  100% {\n    opacity: 1;\n    transform: translateY(0%);\n  }\n}\n@keyframes fadeInLeft {\n  0% {\n    opacity: 0;\n    transform: translateX(10%);\n  }\n  100% {\n    opacity: 1;\n    transform: translateX(0%);\n  }\n}\n@keyframes fadeInRight {\n  0% {\n    opacity: 0;\n    transform: translateX(-10%);\n  }\n  100% {\n    opacity: 1;\n    transform: translateX(0%);\n  }\n}\n\n/* Out */\n@keyframes fadeOut {\n  0% {\n    opacity: 1;\n  }\n  100% {\n    opacity: 0;\n  }\n}\n@keyframes fadeOutUp {\n  0% {\n    opacity: 1;\n    transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    transform: translateY(5%);\n  }\n}\n@keyframes fadeOutDown {\n  0% {\n    opacity: 1;\n    transform: translateY(0%);\n  }\n  100% {\n    opacity: 0;\n    transform: translateY(-5%);\n  }\n}\n@keyframes fadeOutLeft {\n  0% {\n    opacity: 1;\n    transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    transform: translateX(5%);\n  }\n}\n@keyframes fadeOutRight {\n  0% {\n    opacity: 1;\n    transform: translateX(0%);\n  }\n  100% {\n    opacity: 0;\n    transform: translateX(-5%);\n  }\n}\n\n/*--------------\n     Flips\n---------------*/\n\n.flip.transition.in,\n.flip.transition.out {\n  animation-duration: 600ms;\n}\n.horizontal.flip.transition.in {\n  animation-name: horizontalFlipIn;\n}\n.horizontal.flip.transition.out {\n  animation-name: horizontalFlipOut;\n}\n.vertical.flip.transition.in {\n  animation-name: verticalFlipIn;\n}\n.vertical.flip.transition.out {\n  animation-name: verticalFlipOut;\n}\n\n/* In */\n@keyframes horizontalFlipIn {\n  0% {\n    transform: perspective(2000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  100% {\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n}\n@keyframes verticalFlipIn {\n  0% {\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n  100% {\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n}\n\n/* Out */\n@keyframes horizontalFlipOut {\n  0% {\n    transform: perspective(2000px) rotateY(0deg);\n    opacity: 1;\n  }\n  100% {\n    transform: perspective(2000px) rotateY(90deg);\n    opacity: 0;\n  }\n}\n@keyframes verticalFlipOut {\n  0% {\n    transform: perspective(2000px) rotateX(0deg);\n    opacity: 1;\n  }\n  100% {\n    transform: perspective(2000px) rotateX(-90deg);\n    opacity: 0;\n  }\n}\n\n/*--------------\n      Scale\n---------------*/\n\n.scale.transition.in {\n  animation-name: scaleIn;\n}\n.scale.transition.out {\n  animation-name: scaleOut;\n}\n\n@keyframes scaleIn {\n  0% {\n    opacity: 0;\n    transform: scale(0.8);\n  }\n  100% {\n    opacity: 1;\n    transform: scale(1);\n  }\n}\n\n/* Out */\n@keyframes scaleOut {\n  0% {\n    opacity: 1;\n    transform: scale(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale(0.9);\n  }\n}\n\n\n/*--------------\n      Fly\n---------------*/\n\n/* Inward */\n.transition.fly {\n  animation-duration: 0.6s;\n  transition-timing-function: cubic-bezier(0.215, 0.610, 0.355, 1.000);\n}\n.transition.fly.in {\n  animation-name: flyIn;\n}\n.transition[class*=\"fly up\"].in {\n  animation-name: flyInUp;\n}\n.transition[class*=\"fly down\"].in {\n  animation-name: flyInDown;\n}\n.transition[class*=\"fly left\"].in {\n  animation-name: flyInLeft;\n}\n.transition[class*=\"fly right\"].in {\n  animation-name: flyInRight;\n}\n\n/* Outward */\n.transition.fly.out {\n  animation-name: flyOut;\n}\n.transition[class*=\"fly up\"].out {\n  animation-name: flyOutUp;\n}\n.transition[class*=\"fly down\"].out {\n  animation-name: flyOutDown;\n}\n.transition[class*=\"fly left\"].out {\n  animation-name: flyOutLeft;\n}\n.transition[class*=\"fly right\"].out {\n  animation-name: flyOutRight;\n}\n\n/* In */\n@keyframes flyIn {\n  0% {\n    opacity: 0;\n    transform: scale3d(.3, .3, .3);\n  }\n  20% {\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n  40% {\n    transform: scale3d(.9, .9, .9);\n  }\n  60% {\n    opacity: 1;\n    transform: scale3d(1.03, 1.03, 1.03);\n  }\n  80% {\n    transform: scale3d(.97, .97, .97);\n  }\n  100% {\n    opacity: 1;\n    transform: scale3d(1, 1, 1);\n  }\n}\n@keyframes flyInUp {\n  0% {\n    opacity: 0;\n    transform: translate3d(0, 1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(0, -20px, 0);\n  }\n  75% {\n    transform: translate3d(0, 10px, 0);\n  }\n  90% {\n    transform: translate3d(0, -5px, 0);\n  }\n  100% {\n    transform: translate3d(0, 0, 0);\n  }\n}\n@keyframes flyInDown {\n  0% {\n    opacity: 0;\n    transform: translate3d(0, -1500px, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(0, 25px, 0);\n  }\n  75% {\n    transform: translate3d(0, -10px, 0);\n  }\n  90% {\n    transform: translate3d(0, 5px, 0);\n  }\n  100% {\n    transform: none;\n  }\n}\n@keyframes flyInLeft {\n  0% {\n    opacity: 0;\n    transform: translate3d(1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(-25px, 0, 0);\n  }\n  75% {\n    transform: translate3d(10px, 0, 0);\n  }\n  90% {\n    transform: translate3d(-5px, 0, 0);\n  }\n  100% {\n    transform: none;\n  }\n}\n@keyframes flyInRight {\n  0% {\n    opacity: 0;\n    transform: translate3d(-1500px, 0, 0);\n  }\n  60% {\n    opacity: 1;\n    transform: translate3d(25px, 0, 0);\n  }\n  75% {\n    transform: translate3d(-10px, 0, 0);\n  }\n  90% {\n    transform: translate3d(5px, 0, 0);\n  }\n  100% {\n    transform: none;\n  }\n}\n\n/* Out */\n@keyframes flyOut {\n  20% {\n    transform: scale3d(.9, .9, .9);\n  }\n  50%, 55% {\n    opacity: 1;\n    transform: scale3d(1.1, 1.1, 1.1);\n  }\n  100% {\n    opacity: 0;\n    transform: scale3d(.3, .3, .3);\n  }\n}\n@keyframes flyOutUp {\n  20% {\n    transform: translate3d(0, 10px, 0);\n  }\n  40%, 45% {\n    opacity: 1;\n    transform: translate3d(0, -20px, 0);\n  }\n  100% {\n    opacity: 0;\n    transform: translate3d(0, 2000px, 0);\n  }\n}\n@keyframes flyOutDown {\n  20% {\n    transform: translate3d(0, -10px, 0);\n  }\n  40%, 45% {\n    opacity: 1;\n    transform: translate3d(0, 20px, 0);\n  }\n  100% {\n    opacity: 0;\n    transform: translate3d(0, -2000px, 0);\n  }\n}\n@keyframes flyOutRight {\n  20% {\n    opacity: 1;\n    transform: translate3d(20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    transform: translate3d(-2000px, 0, 0);\n  }\n}\n@keyframes flyOutLeft {\n  20% {\n    opacity: 1;\n    transform: translate3d(-20px, 0, 0);\n  }\n  100% {\n    opacity: 0;\n    transform: translate3d(2000px, 0, 0);\n  }\n}\n\n/*--------------\n     Slide\n---------------*/\n\n.transition.slide.in,\n.transition[class*=\"slide down\"].in {\n  animation-name: slideInY;\n  transform-origin: top center;\n}\n.transition[class*=\"slide up\"].in {\n  animation-name: slideInY;\n  transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].in {\n  animation-name: slideInX;\n  transform-origin: center right;\n}\n.transition[class*=\"slide right\"].in {\n  animation-name: slideInX;\n  transform-origin: center left;\n}\n\n.transition.slide.out,\n.transition[class*=\"slide down\"].out {\n  animation-name: slideOutY;\n  transform-origin: top center;\n}\n.transition[class*=\"slide up\"].out {\n  animation-name: slideOutY;\n  transform-origin: bottom center;\n}\n.transition[class*=\"slide left\"].out {\n  animation-name: slideOutX;\n  transform-origin: center right;\n}\n.transition[class*=\"slide right\"].out {\n  animation-name: slideOutX;\n  transform-origin: center left;\n}\n\n/* In */\n@keyframes slideInY {\n  0% {\n    opacity: 0;\n    transform: scaleY(0);\n  }\n  100% {\n    opacity: 1;\n    transform: scaleY(1);\n  }\n}\n@keyframes slideInX {\n  0% {\n    opacity: 0;\n    transform: scaleX(0);\n  }\n  100% {\n    opacity: 1;\n    transform: scaleX(1);\n  }\n}\n\n/* Out */\n@keyframes slideOutY {\n  0% {\n    opacity: 1;\n    transform: scaleY(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scaleY(0);\n  }\n}\n@keyframes slideOutX {\n  0% {\n    opacity: 1;\n    transform: scaleX(1);\n  }\n  100% {\n    opacity: 0;\n    transform: scaleX(0);\n  }\n}\n\n\n/*--------------\n     Swing\n---------------*/\n\n.transition.swing {\n  animation-duration: 800ms;\n}\n\n.transition[class*=\"swing down\"].in {\n  animation-name: swingInX;\n  transform-origin: top center;\n}\n.transition[class*=\"swing up\"].in {\n  animation-name: swingInX;\n  transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].in {\n  animation-name: swingInY;\n  transform-origin: center right;\n}\n.transition[class*=\"swing right\"].in {\n  animation-name: swingInY;\n  transform-origin: center left;\n}\n\n.transition.swing.out,\n.transition[class*=\"swing down\"].out {\n  animation-name: swingOutX;\n  transform-origin: top center;\n}\n.transition[class*=\"swing up\"].out {\n  animation-name: swingOutX;\n  transform-origin: bottom center;\n}\n.transition[class*=\"swing left\"].out {\n  animation-name: swingOutY;\n  transform-origin: center right;\n}\n.transition[class*=\"swing right\"].out {\n  animation-name: swingOutY;\n  transform-origin: center left;\n}\n\n/* In */\n@keyframes swingInX {\n  0% {\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  60% {\n    transform: perspective(1000px) rotateX(15deg);\n  }\n  80% {\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  100% {\n    transform: perspective(1000px) rotateX(0deg);\n  }\n}\n@keyframes swingInY {\n  0% {\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n  40% {\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  60% {\n    transform: perspective(1000px) rotateY(-17.5deg);\n  }\n  80% {\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n  100% {\n    transform: perspective(1000px) rotateY(0deg);\n  }\n}\n\n/* Out */\n@keyframes swingOutX {\n  0% {\n    transform: perspective(1000px) rotateX(0deg);\n  }\n  40% {\n    transform: perspective(1000px) rotateX(-7.5deg);\n  }\n  60% {\n    transform: perspective(1000px) rotateX(17.5deg);\n  }\n  80% {\n    transform: perspective(1000px) rotateX(-30deg);\n    opacity: 1;\n  }\n  100% {\n    transform: perspective(1000px) rotateX(90deg);\n    opacity: 0;\n  }\n}\n@keyframes swingOutY {\n  0% {\n    transform: perspective(1000px) rotateY(0deg);\n  }\n  40% {\n    transform: perspective(1000px) rotateY(7.5deg);\n  }\n  60% {\n    transform: perspective(1000px) rotateY(-10deg);\n  }\n  80% {\n    transform: perspective(1000px) rotateY(30deg);\n    opacity: 1;\n  }\n  100% {\n    transform: perspective(1000px) rotateY(-90deg);\n    opacity: 0;\n  }\n}\n\n\n/*******************************\n       Static Animations\n*******************************/\n\n/*--------------\n    Emphasis\n---------------*/\n\n.flash.transition {\n  animation-duration: 750ms;\n  animation-name: flash;\n}\n.shake.transition {\n  animation-duration: 750ms;\n  animation-name: shake;\n}\n.bounce.transition {\n  animation-duration: 750ms;\n  animation-name: bounce;\n}\n.tada.transition {\n  animation-duration: 750ms;\n  animation-name: tada;\n}\n.pulse.transition {\n  animation-duration: 500ms;\n  animation-name: pulse;\n}\n.jiggle.transition {\n  animation-duration: 750ms;\n  animation-name: jiggle;\n}\n\n/* Flash */\n@keyframes flash {\n  0%, 50%, 100% {\n    opacity: 1;\n  }\n  25%, 75% {\n    opacity: 0;\n  }\n}\n\n/* Shake */\n@keyframes shake {\n  0%, 100% {\n    transform: translateX(0);\n  }\n  10%, 30%, 50%, 70%, 90% {\n    transform: translateX(-10px);\n  }\n  20%, 40%, 60%, 80% {\n    transform: translateX(10px);\n  }\n}\n\n/* Bounce */\n@keyframes bounce {\n  0%, 20%, 50%, 80%, 100% {\n    transform: translateY(0);\n  }\n  40% {\n    transform: translateY(-30px);\n  }\n  60% {\n    transform: translateY(-15px);\n  }\n}\n\n/* Tada */\n@keyframes tada {\n  0% {\n    transform: scale(1);\n  }\n  10%, 20% {\n    transform: scale(0.9) rotate(-3deg);\n  }\n  30%, 50%, 70%, 90% {\n    transform: scale(1.1) rotate(3deg);\n  }\n  40%, 60%, 80% {\n    transform: scale(1.1) rotate(-3deg);\n  }\n  100% {\n    transform: scale(1) rotate(0);\n  }\n}\n\n/* Pulse */\n@keyframes pulse {\n  0% {\n    transform: scale(1);\n    opacity: 1;\n  }\n  50% {\n    transform: scale(0.9);\n    opacity: 0.7;\n  }\n  100% {\n    transform: scale(1);\n    opacity: 1;\n  }\n\n}\n\n/* Rubberband */\n@keyframes jiggle {\n  0% {\n    transform: scale3d(1, 1, 1);\n  }\n  30% {\n    transform: scale3d(1.25, 0.75, 1);\n  }\n  40% {\n    transform: scale3d(0.75, 1.25, 1);\n  }\n  50% {\n    transform: scale3d(1.15, 0.85, 1);\n  }\n  65% {\n    transform: scale3d(.95, 1.05, 1);\n  }\n  75% {\n    transform: scale3d(1.05, .95, 1);\n  }\n  100% {\n    transform: scale3d(1, 1, 1);\n  }\n}\n\n\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/modules/transition.variables",
    "content": "/*******************************\n          Transition\n*******************************/\n\n@transitionDefaultEasing: @defaultEasing;\n@transitionDefaultFill: both;\n@transitionDefaultDuration: 300ms;\n\n@use3DAcceleration: translateZ(0);\n@backfaceVisibility: hidden;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/ad.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/ad.variables",
    "content": "/*******************************\n          Advertisement\n*******************************/\n\n@margin: 1em 0em;\n@overflow: hidden;\n\n@testBackground: @lightBlack;\n@testColor: @white;\n@testFontWeight: bold;\n@testText: 'Ad';\n@testFontSize: @relativeMedium;\n@testMobileFontSize: @relativeTiny;"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/card.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/card.variables",
    "content": "/*******************************\n             Card\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n/* Shadow */\n@shadowDistance: 1px;\n@shadowBoxShadow: 0px @shadowDistance 3px 0px @solidBorderColor;\n\n/* Card */\n@fontFamily: @pageFont;\n@display: flex;\n@background: @white;\n@borderRadius: @defaultBorderRadius;\n@margin: 1em 0em;\n@minHeight: 0px;\n@padding: 0em;\n@width: 290px;\n@borderWidth: 1px;\n@borderShadow: 0px 0px 0px @borderWidth @solidBorderColor;\n@boxShadow:\n  @shadowBoxShadow,\n  @borderShadow\n;\n@border: none;\n@zIndex: '';\n@transition:\n  box-shadow @defaultDuration @defaultEasing,\n  transform @defaultDuration @defaultEasing\n;\n\n/* Card Group */\n@horizontalSpacing: 1em;\n@rowSpacing: 1.75em;\n\n@groupMargin: -(@rowSpacing / 2) -(@horizontalSpacing / 2);\n@groupDisplay: flex;\n\n@groupCardFloat: none;\n@groupCardDisplay: flex;\n@groupCardMargin: (@rowSpacing / 2) (@horizontalSpacing / 2);\n\n/* Consecutive Cards */\n@consecutiveGroupDistance: (@rowSpacing / 2);\n\n/*-------------------\n       Content\n--------------------*/\n\n\n/* Image */\n@imageBackground: @transparentBlack;\n@imagePadding: 0em;\n@imageBorder: none;\n@imageBoxShadow: none;\n@imageBorder: none;\n\n/* Content */\n@contentDivider: @borderWidth solid @internalBorderColor;\n@contentMargin: 0em;\n@contentBackground: none;\n@contentPadding: 1em 1em;\n@contentFontSize: 1em;\n@contentBorderRadius: 0em;\n@contentBoxShadow: none;\n@contentBorder: none;\n\n\n/* Header */\n@headerMargin: '';\n@headerFontWeight: bold;\n@headerFontSize: @relativeBig;\n@headerLineHeightOffset: -(@lineHeight - 1em) / 2;\n@headerColor: @darkTextColor;\n\n/* Metadata */\n@metaFontSize: @relativeMedium;\n@metaSpacing: 0.3em;\n@metaColor: @lightTextColor;\n\n/* Icons */\n@actionOpacity: 0.75;\n@actionHoverOpacity: 1;\n@actionTransition: color @defaultDuration @defaultEasing;\n\n@starColor: #FFB70A;\n@starActiveColor: #FFE623;\n\n@likeColor: #FF2733;\n@likeActiveColor: #FF2733;\n\n/* Links */\n@contentLinkColor: '';\n@contentLinkHoverColor: '';\n@contentLinkTransition: color @defaultDuration @defaultEasing;\n\n@headerLinkColor: @headerColor;\n@headerLinkHoverColor: @linkHoverColor;\n\n@metaLinkColor: @lightTextColor;\n@metaLinkHoverColor: @textColor;\n\n/* Description */\n@descriptionDistance: 0.5em;\n@descriptionColor: rgba(0, 0, 0, 0.68);\n\n/* Content Image */\n@contentImageWidth: '';\n@contentImageVerticalAlign: middle;\n\n/* Avatar Image */\n@avatarSize: 2em;\n@avatarBorderRadius: @circularRadius;\n\n/* Paragraph */\n@paragraphDistance: 0.5em;\n\n/* Dimmer */\n@dimmerZIndex: 10;\n@dimmerColor: '';\n\n/* Additional Content */\n@extraDivider: 1px solid rgba(0, 0, 0, 0.05);\n@extraBackground: none;\n@extraPosition: static;\n@extraWidth: auto;\n@extraTop: 0em;\n@extraLeft: 0em;\n@extraMargin: 0em 0em;\n@extraPadding: 0.75em 1em;\n@extraBoxShadow: none;\n@extraColor: @lightTextColor;\n@extraTransition: color @defaultDuration @defaultEasing;\n\n/* Extra Links */\n@extraLinkColor: @unselectedTextColor;\n@extraLinkHoverColor: @linkHoverColor;\n\n/* Buttons */\n@buttonMargin: 0px -@borderWidth;\n@buttonWidth: ~\"calc(100% + \"(@borderWidth * 2)~\")\";\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Link */\n@linkHoverBackground: @white;\n@linkHoverBorder: @border;\n@linkHoverZIndex: 5;\n@linkHoverRaiseDistance: 3px;\n@linkHoverTransform: translateY(-@linkHoverRaiseDistance);\n\n@shadowHoverBoxShadow: 0px @shadowDistance @linkHoverRaiseDistance 0px @solidSelectedBorderColor;\n@linkHoverBoxShadow:\n  @shadowHoverBoxShadow,\n  @borderShadow\n;\n\n\n/* Raised */\n@raisedShadow:\n  @borderShadow,\n  @floatingShadow\n;\n@raisedShadowHover:\n  @borderShadow,\n  @floatingShadowHover\n;\n\n/* Card Count */\n@wideCardSpacing: 1em;\n@cardSpacing: 0.75em;\n@smallCardSpacing: 0.5em;\n\n@oneCardSpacing: 0em;\n@twoCardSpacing: @wideCardSpacing;\n@threeCardSpacing: @wideCardSpacing;\n@fourCardSpacing: @cardSpacing;\n@fiveCardSpacing: @cardSpacing;\n@sixCardSpacing: @cardSpacing;\n@sevenCardSpacing: @smallCardSpacing;\n@eightCardSpacing: @smallCardSpacing;\n@nineCardSpacing: @smallCardSpacing;\n@tenCardSpacing: @smallCardSpacing;\n\n@oneCard: @oneColumn;\n@oneCardOffset: 0em;\n@twoCard: ~\"calc(\"@twoColumn~\" - \"(@twoCardSpacing * 2)~\")\";\n@twoCardOffset: -@twoCardSpacing;\n@threeCard: ~\"calc(\"@threeColumn~\" - \"(@threeCardSpacing * 2)~\")\";\n@threeCardOffset: -@threeCardSpacing;\n@fourCard: ~\"calc(\"@fourColumn~\" - \"(@fourCardSpacing * 2)~\")\";\n@fourCardOffset: -@fourCardSpacing;\n@fiveCard: ~\"calc(\"@fiveColumn~\" - \"(@fiveCardSpacing * 2)~\")\";\n@fiveCardOffset: -@fiveCardSpacing;\n@sixCard: ~\"calc(\"@sixColumn~\" - \"(@sixCardSpacing * 2)~\")\";\n@sixCardOffset: -@sixCardSpacing;\n@sevenCard: ~\"calc(\"@sevenColumn~\" - \"(@sevenCardSpacing * 2)~\")\";\n@sevenCardOffset: -@sevenCardSpacing;\n@eightCard: ~\"calc(\"@eightColumn~\" - \"(@sevenCardSpacing * 2)~\")\";\n@eightCardOffset: -@sevenCardSpacing;\n@nineCard: ~\"calc(\"@nineColumn~\" - \"(@nineCardSpacing * 2)~\")\";\n@nineCardOffset: -@nineCardSpacing;\n@tenCard: ~\"calc(\"@tenColumn~\" - \"(@tenCardSpacing * 2)~\")\";\n@tenCardOffset: -@tenCardSpacing;\n\n/* Stackable */\n@stackableRowSpacing: 1em;\n@stackableCardSpacing: 1em;\n@stackableMargin: ~\"calc(\"@oneColumn~\" - \"(@stackableCardSpacing * 2)~\")\";\n\n/* Sizes */\n@medium: 1em;\n\n/* Colored */\n@coloredShadowDistance: 2px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/comment.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/comment.variables",
    "content": "/*******************************\n            Comments\n*******************************/\n\n\n/*-------------------\n       View\n--------------------*/\n\n@maxWidth: 650px;\n@margin: 1.5em 0em;\n\n/*-------------------\n      Elements\n--------------------*/\n\n/* Comment */\n@commentBackground: none;\n@commentMargin: 0.5em 0em 0em;\n@commentPadding: 0.5em 0em 0em;\n@commentDivider: none;\n@commentBorder: none;\n@commentLineHeight: 1.2;\n@firstCommentMargin: 0em;\n@firstCommentPadding: 0em;\n\n/* Nested Comment */\n@nestedCommentsMargin: 0em 0em 0.5em 0.5em;\n@nestedCommentsPadding: 1em 0em 1em 1em;\n\n@nestedCommentDivider: none;\n@nestedCommentBorder: none;\n@nestedCommentBackground: none;\n\n/* Avatar */\n@avatarDisplay: block;\n@avatarFloat: left;\n@avatarWidth: 2.5em;\n@avatarHeight: auto;\n@avatarSpacing: 1em;\n@avatarMargin: (@commentLineHeight - 1em) 0em 0em;\n@avatarBorderRadius: 0.25rem;\n\n/* Content */\n@contentMargin: @avatarWidth + @avatarSpacing;\n\n/* Author */\n@authorFontSize: 1em;\n@authorColor: @textColor;\n@authorHoverColor: @linkHoverColor;\n@authorFontWeight: bold;\n\n/* Metadata */\n@metadataDisplay: inline-block;\n@metadataFontSize: 0.875em;\n@metadataSpacing: 0.5em;\n@metadataContentSpacing: 0.5em;\n@metadataColor: @lightTextColor;\n\n/* Text */\n@textFontSize: 1em;\n@textMargin: 0.25em 0em 0.5em;\n@textWordWrap: break-word;\n@textLineHeight: 1.3;\n\n/* Actions */\n@actionFontSize: 0.875em;\n@actionContentDistance: 0.75em;\n@actionLinkColor: @unselectedTextColor;\n@actionLinkHoverColor: @hoveredTextColor;\n\n/* Reply */\n@replyDistance: 1em;\n@replyHeight: 12em;\n@replyFontSize: 1em;\n\n@commentReplyDistance: @replyDistance;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Threaded */\n@threadedCommentMargin: -1.5em 0 -1em  (@avatarWidth / 2);\n@threadedCommentPadding: 3em 0em 2em 2.25em;\n@threadedCommentBoxShadow: -1px 0px 0px @borderColor;\n\n\n/* Minimal */\n@minimalActionPosition: absolute;\n@minimalActionTop: 0px;\n@minimalActionRight: 0px;\n@minimalActionLeft: auto;\n\n@minimalTransitionDelay: 0.1s;\n@minimalEasing: @defaultEasing;\n@minimalDuration: 0.2s;\n@minimalTransition: opacity @minimalDuration @minimalEasing;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/feed.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/feed.variables",
    "content": "/*******************************\n             Feed\n*******************************/\n\n/*-------------------\n        Feed\n--------------------*/\n\n@margin: 1em 0em;\n\n/*-------------------\n      Elements\n--------------------*/\n\n/* Event */\n@eventWidth: 100%;\n@eventPadding: @3px 0em;\n@eventMargin: 0em;\n@eventBackground: none;\n@eventDivider: none;\n\n/* Event Label */\n@labelWidth: 2.5em;\n@labelHeight: auto;\n@labelAlignSelf: stretch;\n@labelTextAlign: left;\n\n/* Icon Label */\n@iconLabelOpacity: 1;\n@iconLabelWidth: 100%;\n@iconLabelSize: 1.5em;\n@iconLabelPadding: 0.25em;\n@iconLabelBackground: none;\n@iconLabelBorderRadius: none;\n@iconLabelBorder: none;\n@iconLabelColor: rgba(0, 0, 0, 0.6);\n\n/* Image Label */\n@imageLabelWidth: 100%;\n@imageLabelHeight: auto;\n@imageLabelBorderRadius: @circularRadius;\n\n/* Content w/ Label */\n@labeledContentMargin: 0.5em 0em @relative5px @relativeLarge;\n@lastLabeledContentPadding: 0em;\n\n/* Content */\n@contentAlignSelf: stretch;\n@contentTextAlign: left;\n@contentWordWrap: break-word;\n\n/* Date */\n@dateMargin: -0.5rem 0em 0em;\n@datePadding: 0em;\n@dateColor: @lightTextColor;\n@dateFontSize: @relativeMedium;\n@dateFontWeight: normal;\n@dateFontStyle: normal;\n\n/* Summary */\n@summaryMargin: 0em;\n@summaryFontSize: @relativeMedium;\n@summaryFontWeight: bold;\n@summaryColor: @textColor;\n\n/* Summary Image */\n@summaryImageWidth: auto;\n@summaryImageHeight: 10em;\n@summaryImageMargin: -0.25em 0.25em 0em 0em;\n@summaryImageVerticalAlign: middle;\n@summaryImageBorderRadius: 0.25em;\n\n/* Summary Date */\n@summaryDateDisplay: inline-block;\n@summaryDateFloat: none;\n@summaryDateMargin: 0em 0em 0em 0.5em;\n@summaryDatePadding: 0em;\n@summaryDateFontSize: @relativeTiny;\n@summaryDateFontWeight: @dateFontWeight;\n@summaryDateFontStyle: @dateFontStyle;\n@summaryDateColor: @dateColor;\n\n/* User */\n@userFontWeight: bold;\n@userDistance: 0em;\n@userImageWidth: @summaryImageWidth;\n@userImageHeight: @summaryImageHeight;\n@userImageMargin: @summaryImageMargin;\n@userImageVerticalAlign: @summaryImageVerticalAlign;\n\n/* Extra Summary Data */\n@extraMargin: 0.5em 0em 0em;\n@extraBackground: none;\n@extraPadding: 0em;\n@extraColor: @textColor;\n\n/* Extra Images */\n@extraImageMargin: 0em 0.25em 0em 0em;\n@extraImageWidth: 6em;\n\n/* Extra Text */\n@extraTextPadding: 0em;\n@extraTextPointer: none;\n@extraTextFontSize: @relativeMedium;\n@extraTextLineHeight: @lineHeight;\n@extraTextMaxWidth: 500px;\n\n/* Metadata Group */\n@metadataDisplay: inline-block;\n@metadataFontSize: @relativeTiny;\n@metadataMargin: 0.5em 0em 0em;\n@metadataBackground: none;\n@metadataBorder: none;\n@metadataBorderRadius: 0;\n@metadataBoxShadow: none;\n@metadataPadding: 0em;\n@metadataColor: rgba(0, 0, 0, 0.6);\n\n@metadataElementSpacing: 0.75em;\n\n/* Like */\n@likeColor: '';\n@likeHoverColor: #FF2733;\n@likeActiveColor: #EF404A;\n@likeTransition: 0.2s color ease;\n\n/* Metadata Divider */\n@metadataDivider: '';\n@metadataDividerColor: rgba(0, 0, 0, 0.2);\n@metadataDividerOffset: -1em;\n\n@metadataActionCursor: pointer;\n@metadataActionOpacity: 1;\n@metadataActionColor: rgba(0, 0, 0, 0.5);\n@metadataActionTransition: color @defaultDuration @defaultEasing;\n\n@metadataActionHoverColor: @selectedTextColor;\n\n/*-------------------\n      Variations\n--------------------*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/item.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/item.variables",
    "content": "/*******************************\n             Item\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n/* Group */\n@groupMargin: 1.5em 0em;\n\n/* Item */\n@display: flex;\n@background: transparent;\n@borderRadius: 0rem;\n@minHeight: 0px;\n@padding: 0em;\n@width: 100%;\n@boxShadow: none;\n@border: none;\n@zIndex: '';\n@transition: box-shadow @defaultDuration @defaultEasing;\n\n/* Responsive */\n@itemSpacing: 1em;\n@imageWidth: 175px;\n@contentImageDistance: 1.5em;\n\n@tabletItemSpacing: 1em;\n@tabletImageWidth: 150px;\n@tabletContentImageDistance: 1em;\n\n@mobileItemSpacing: 2em;\n@mobileImageWidth: auto;\n@mobileImageMaxHeight: 250px;\n@mobileContentImageDistance: 1.5em;\n\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Image */\n@imageDisplay: block;\n@imageFloat: none;\n@imageMaxHeight: '';\n@imageVerticalAlign: top;\n@imageMargin: 0em;\n@imagePadding: 0em;\n@imageBorder: none;\n@imageBorderRadius: 0.125rem;\n@imageBoxShadow: none;\n@imageBorder: none;\n\n/* Content */\n@contentDisplay: block;\n@contentVerticalAlign: top;\n\n@contentWidth: auto;\n@contentOffset: 0em;\n@contentBackground: none;\n@contentMargin: 0em;\n@contentPadding: 0em;\n@contentFontSize: 1em;\n@contentBorder: none;\n@contentBorderRadius: 0em;\n@contentBoxShadow: none;\n\n/* Header */\n@headerMargin: -@lineHeightOffset 0em 0em;\n@headerFontWeight: bold;\n@headerFontSize: @relativeBig;\n@headerColor: @darkTextColor;\n\n/* Metadata */\n@metaMargin: 0.5em 0em 0.5em;\n@metaFontSize: 1em;\n@metaLineHeight: 1em;\n@metaSpacing: 0.3em;\n@metaColor: rgba(0, 0, 0, 0.6);\n\n/* Icons */\n@actionOpacity: 0.75;\n@actionHoverOpacity: 1;\n@actionTransition: color @defaultDuration @defaultEasing;\n\n/* Actions */\n@favoriteColor: #FFB70A;\n@favoriteActiveColor: #FFE623;\n@likeColor: #FF2733;\n@likeActiveColor: #FF2733;\n\n/* Links */\n@headerLinkColor: @headerColor;\n@headerLinkHoverColor: @linkHoverColor;\n@metaLinkColor: @lightTextColor;\n@metaLinkHoverColor: @textColor;\n@contentLinkColor: '';\n@contentLinkHoverColor: '';\n@contentLinkTransition: color @defaultDuration @defaultEasing;\n\n\n/* Description */\n@descriptionDistance: 0.6em;\n@descriptionMaxWidth: auto;\n@descriptionFontSize: 1em;\n@descriptionLineHeight: @lineHeight;\n@descriptionColor: @textColor;\n\n/* Content Image */\n@contentImageWidth: '';\n@contentImageVerticalAlign: middle;\n\n/* Avatar Image */\n@avatarSize: @contentImageWidth;\n@avatarBorderRadius: @circularRadius;\n\n/* Paragraph */\n@paragraphDistance: 0.5em;\n\n/* Additional Content */\n@extraDivider: none;\n@extraHorizontalSpacing: 0.5rem;\n@extraRowSpacing: 0.5rem;\n\n@extraBackground: none;\n@extraDisplay: block;\n@extraPosition: relative;\n@extraMargin: (1rem - @extraRowSpacing) 0em 0em;\n@extraTop: 0em;\n@extraLeft: 0em;\n@extraWidth: 100%;\n@extraPadding: 0em 0em 0em;\n@extraBoxShadow: none;\n@extraColor: @lightTextColor;\n@extraTransition: color @defaultDuration @defaultEasing;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Relaxed */\n@relaxedItemSpacing: 1.5em;\n@veryRelaxedItemSpacing: 2em;\n\n/* Divided */\n@dividedBorder: 1px solid @borderColor;\n@dividedMargin: 0em;\n@dividedPadding: 1em 0em;\n\n@dividedFirstLastMargin: 0em;\n@dividedFirstLastPadding: 0em;\n\n\n/* Unstackable */\n@unstackableMobileImageWidth: 125px;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/statistic.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/default/views/statistic.variables",
    "content": "/*******************************\n           Statistic\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n@margin: 1em 0em;\n@textAlign: center;\n@maxWidth: auto;\n\n/* Group */\n@horizontalSpacing: 1.5em;\n@rowSpacing: 2em;\n@groupMargin: 1em -@horizontalSpacing -@rowSpacing;\n\n/* Group Element */\n@elementMargin: 0em @horizontalSpacing @rowSpacing;\n@elementMaxWidth: @maxWidth;\n\n/*-------------------\n       Content\n--------------------*/\n\n/* Value */\n@valueFont: @pageFont;\n@valueFontWeight: normal;\n@valueLineHeight: 1em;\n@valueColor: @black;\n@valueTextTransform: uppercase;\n\n/* Label */\n@labelSize: @relativeMedium;\n@topLabelDistance: 0rem;\n@bottomLabelDistance: 0rem;\n@labelFont: @headerFont;\n@labelFontWeight: bold;\n@labelColor: @textColor;\n@labelLineHeight: @relativeLarge;\n@labelTextTransform: uppercase;\n\n/* Text */\n@textValueLineHeight: 1em;\n@textValueMinHeight: 2em;\n@textValueFontWeight: bold;\n\n/* Label Image */\n@imageHeight: 3rem;\n@imageVerticalAlign: baseline;\n\n/*-------------------\n      Types\n--------------------*/\n\n@horizontalGroupElementMargin: 1em 0em;\n@horizontalLabelDistance: 0.75em;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Floated */\n@leftFloatedMargin: 0em 2em 1em 0em;\n@rightFloatedMargin: 0em 0em 1em 2em;\n\n/* Inverted */\n@invertedValueColor: @white;\n@invertedLabelColor: @invertedTextColor;\n\n/* Item Width */\n@itemGroupMargin: 0em 0em -@rowSpacing;\n@itemMargin: 0em 0em @rowSpacing;\n\n/* Size */\n@miniTextValueSize: 1rem;\n@miniValueSize: 1.5rem;\n@miniHorizontalValueSize: 1.5rem;\n\n@tinyTextValueSize: 1rem;\n@tinyValueSize: 2rem;\n@tinyHorizontalValueSize: 2rem;\n\n@smallTextValueSize: 1rem;\n@smallValueSize: 3rem;\n@smallHorizontalValueSize: 2rem;\n\n@textValueSize: 2rem;\n@valueSize: 4rem;\n@horizontalValueSize: 3rem;\n\n@largeTextValueSize: 2.5rem;\n@largeValueSize: 5rem;\n@largeHorizontalValueSize: 4rem;\n\n@hugeTextValueSize: 2.5rem;\n@hugeValueSize: 6rem;\n@hugeHorizontalValueSize: 5rem;"
  },
  {
    "path": "resources/assets/semantic/src/themes/duo/elements/loader.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/duo/elements/loader.variables",
    "content": "/*******************************\n             Loader\n*******************************/\n\n@shapeBorderColor: @primaryColor @primaryColor @secondaryColor @secondaryColor;\n@invertedShapeBorderColor: @lightPrimaryColor @lightPrimaryColor @lightSecondaryColor @lightSecondaryColor;"
  },
  {
    "path": "resources/assets/semantic/src/themes/fixed-width/collections/grid.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/fixed-width/collections/grid.variables",
    "content": "/* Fixed Page Grid */\n\n@mobileWidth: auto;\n@mobileMargin: 0em;\n@mobileGutter: 0em;\n\n@tabletWidth: auto;\n@tabletMargin: 0em;\n@tabletGutter: 8%;\n\n@computerWidth: 960px;\n@computerMargin: auto;\n@computerGutter: 0;\n\n@largeMonitorWidth: 1180px;\n@largeMonitorMargin: auto;\n@largeMonitorGutter: 0;\n\n@widescreenMonitorWidth: 1300px;\n@widescreenMargin: auto;\n@widescreenMonitorGutter: 0;\n\n@tableWidth: '';"
  },
  {
    "path": "resources/assets/semantic/src/themes/fixed-width/modules/modal.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/fixed-width/modules/modal.variables",
    "content": "\n/* Responsive Widths */\n@modalComputerWidth: 700px;\n@modalLargeMonitorWidth: 800px;\n@modalWidescreenMonitorWidth: 850px;\n\n@modalComputerMargin: 0em 0em 0em -(@modalComputerWidth / 2);\n@modalLargeMonitorMargin: 0em 0em 0em -(@modalLargeMonitorWidth / 2);\n@modalWidescreenMonitorMargin: 0em 0em 0em -(@modalWidescreenMonitorWidth / 2);\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Sizes */\n@modalSmallRatio: 0.6;\n@modalLargeRatio: 1.2;\n\n/* Derived Responsive Sizes */\n@modalSmallHeaderSize: 1.3em;\n@modalSmallComputerWidth: (@modalComputerWidth * @modalSmallRatio);\n@modalSmallLargeMonitorWidth: (@modalLargeMonitorWidth * @modalSmallRatio);\n@modalSmallWidescreenMonitorWidth: (@modalWidescreenMonitorWidth * @modalSmallRatio);\n\n@modalSmallComputerMargin: 0em 0em 0em -(@modalSmallComputerWidth / 2);\n@modalSmallLargeMonitorMargin: 0em 0em 0em -(@modalSmallLargeMonitorWidth / 2);\n@modalSmallWidescreenMonitorMargin: 0em 0em 0em -(@modalSmallWidescreenMonitorWidth / 2);\n\n@modalLargeHeaderSize: 1.3em;\n@modalLargeComputerWidth: (@modalComputerWidth * @modalLargeRatio);\n@modalLargeLargeMonitorWidth: (@modalLargeMonitorWidth * @modalLargeRatio);\n@modalLargeWidescreenMonitorWidth: (@modalWidescreenMonitorWidth * @modalLargeRatio);\n\n@modalLargeComputerMargin: 0em 0em 0em -(@modalLargeComputerWidth / 2);\n@modalLargeLargeMonitorMargin: 0em 0em 0em -(@modalLargeLargeMonitorWidth / 2);\n@modalLargeWidescreenMonitorMargin: 0em 0em 0em -(@modalLargeWidescreenMonitorWidth / 2);"
  },
  {
    "path": "resources/assets/semantic/src/themes/flat/collections/form.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.form input[type=\"text\"],\n.ui.form input[type=\"email\"],\n.ui.form input[type=\"date\"],\n.ui.form input[type=\"password\"],\n.ui.form input[type=\"number\"],\n.ui.form input[type=\"url\"],\n.ui.form input[type=\"tel\"] {\n  border-bottom: 1px solid #DDDDDD;\n}\n\n.ui.form .selection.dropdown {\n  border: none;\n  box-shadow: none !important;\n  border-bottom: 1px solid #DDDDDD;\n  border-radius: 0em !important;\n}\n.ui.form .selection.dropdown > .menu {\n  border-top-width: 1px !important;\n  border-radius: @defaultBorderRadius !important;\n}\n\n.ui.form .ui.icon.input > .icon {\n  width: 1em;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/flat/collections/form.variables",
    "content": "/*******************************\n             Form\n*******************************/\n\n/*-------------------\n       Elements\n--------------------*/\n\n\n/* Text */\n@paragraphMargin: 1em 0em;\n\n/* Field */\n@fieldMargin: 0em 0em 1em;\n\n/* Form Label */\n@labelFontSize: @relative11px;\n@labelTextTransform: uppercase;\n\n@groupedLabelTextTransform: none;\n\n/* Input */\n@inputHorizontalPadding: 0.5em;\n@inputBackground: transparent;\n@inputBorder: none;\n@inputBorderRadius: 0em;\n@inputBoxShadow: none;\n@invertedInputColor: @invertedTextColor;\n\n@textAreaPadding: 1em;\n@textAreaBackground: transparent;\n@textAreaFocusBackground: #EEEEEE;\n@textAreaBorder: 1px solid #DDDDDD;\n\n/* Divider */\n@dividerMargin: 1em 0em;\n\n/* Validation Prompt */\n@validationMargin: 0em 0em 0em 1em;\n@validationArrowOffset: -0.3em;\n\n/*-------------------\n        States\n--------------------*/\n\n/* Disabled */\n\n/* Focus */\n@inputFocusPointerSize: 0px;\n@inputErrorPointerSize: 0px;\n\n/* Dropdown Error */\n@dropdownErrorHoverBackground: #FFF2F2;\n@dropdownErrorActiveBackground: #FDCFCF;\n\n/* Focused Error */\n@inputErrorFocusBackground: @negativeBackgroundColor;\n@inputErrorFocusColor: @negativeColorHover;\n@inputErrorFocusBorder: @negativeBorderColor;\n@inputErrorFocusBoxShadow: @inputErrorPointerSize 0em 0em 0em @negativeColorHover inset;\n\n/* Placeholder */\n@inputPlaceholderColor: lighten(@inputColor, 55);\n@inputPlaceholderFocusColor: lighten(@inputColor, 35);\n@inputErrorPlaceholderColor: lighten(@formErrorColor, 10);\n@inputErrorPlaceholderFocusColor: lighten(@formErrorColor, 5);\n\n/* Loading */\n@formLoaderDimmerColor: rgba(255, 255, 255, 0.6);\n@formLoaderPath: \"@{imagePath}/loader-large.gif\";\n@formLoaderPosition: 50% 50%;\n\n/* (x) Wide Field */\n@gutterWidth: 1.5em;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/flat/globals/site.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/flat/globals/site.variables",
    "content": "/*******************************\n         Site Settings\n*******************************/\n\n/*-------------------\n        Paths\n--------------------*/\n\n@imagePath : \"../../themes/default/assets/images\";\n@fontPath  : \"../../themes/default/assets/fonts\";\n\n/*-------------------\n       Fonts\n--------------------*/\n\n@headerFont    : \"Open Sans\", \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n@pageFont      : \"Open Sans\", \"Helvetica Neue\", Arial, Helvetica, sans-serif;\n@fontSmoothing : antialiased;\n\n/*-------------------\n      Site Colors\n--------------------*/\n\n/*---  Colors  ---*/\n@blue             : #0074D9;\n@green            : #2ECC40;\n@orange           : #FF851B;\n@pink             : #D9499A;\n@purple           : #A24096;\n@red              : #FF4136;\n@teal             : #39CCCC;\n@yellow           : #FFCB08;\n\n@black            : #191919;\n@grey             : #CCCCCC;\n@white            : #FFFFFF;\n\n/*---  Light Colors  ---*/\n@lightBlue        : #54C8FF;\n@lightGreen       : #2ECC40;\n@lightOrange      : #FF851B;\n@lightPink        : #FF8EDF;\n@lightPurple      : #CDC6FF;\n@lightRed         : #FF695E;\n@lightTeal        : #6DFFFF;\n@lightYellow      : #FFE21F;\n\n@primaryColor     : @blue;\n@secondaryColor   : @black;\n\n\n/*-------------------\n        Page\n--------------------*/\n\n@bodyBackground      : #FCFCFC;\n@fontSize            : 14px;\n@textColor           : rgba(0, 0, 0, 0.8);\n\n@headerMargin        : 1em 0em 1rem;\n@paragraphMargin     : 0em 0em 1em;\n\n@linkColor           : #009FDA;\n@linkUnderline       : none;\n@linkHoverColor      : lighten( @linkColor, 5);\n@linkHoverUnderline  : @linkUnderline;\n\n@highlightBackground : #FFFFCC;\n@highlightColor      : @textColor;\n\n\n\n/*-------------------\n  Background Colors\n--------------------*/\n\n@subtleTransparentBlack : rgba(0, 0, 0, 0.03);\n@transparentBlack       : rgba(0, 0, 0, 0.05);\n@strongTransparentBlack : rgba(0, 0, 0, 0.10);\n\n@subtleTransparentWhite : rgba(255, 255, 255, 0.01);\n@transparentWhite       : rgba(255, 255, 255, 0.05);\n@strongTransparentWhite : rgba(255, 255, 255, 0.01);\n\n/* Used for differentiating neutrals */\n@subtleGradient: linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n\n/* Used for differentiating layers */\n@subtleShadow: 0px 1px 2px 0 rgba(0, 0, 0, 0.05);\n\n\n/*-------------------\n        Grid\n--------------------*/\n\n@columnCount: 16;\n\n/*-------------------\n     Breakpoints\n--------------------*/\n\n@mobileBreakpoint            : 320px;\n@tabletBreakpoint            : 768px;\n@computerBreakpoint          : 992px;\n@largeMonitorBreakpoint      : 1400px;\n@widescreenMonitorBreakpoint : 1900px;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/breadcrumb.variables",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n\n@dividerOpacity: 1;\n@dividerSpacing: 0;\n@dividerSize: @big;\n@dividerColor: inherit;\n\n@huge: 1.5384em;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/form.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.selection.dropdown {\n  background-color: #FAFAFA;\n  box-shadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;\n  border-color: #CCCCCC;\n}\n\n.ui.selection.dropdown:focus {\n  box-shadow:\n    0px 1px 2px rgba(0, 0, 0, 0.075) inset,\n    0px 0px 5px rgba(81, 167, 232, 0.5)\n  ;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/form.variables",
    "content": "/*******************************\n            Form\n*******************************/\n\n/*-------------------\n       Elements\n--------------------*/\n\n@inputBackground: #FAFAFA;\n@inputBorder: 1px solid #CCCCCC;\n@inputBoxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;\n@inputBorderRadius: 3px;\n\n@labelFontWeight: bold;\n@labelDistance: 6px;\n\n/*-------------------\n        States\n--------------------*/\n\n@inputFocusBackground: #FFFFFF;\n@inputFocusBoxShadow:\n  0px 1px 2px rgba(0, 0, 0, 0.075) inset,\n  0px 0px 5px rgba(81, 167, 232, 0.5)\n;\n@inputFocusBorderColor: #51A7E8;\n@inputFocusBorderRadius: @inputBorderRadius;\n\n/*-------------------\n        Types\n--------------------*/\n\n\n/*-------------------\n      Variations\n--------------------*/\n\n/*-------------------\n       Groups\n--------------------*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/grid.variables",
    "content": "\n@gutterWidth: 1.538rem;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/menu.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.menu .item > .label {\n  box-shadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/menu.variables",
    "content": "/*-------------------\n      Collection\n--------------------*/\n\n@itemVerticalPadding: 1em;\n@itemHorizontalPadding: 1.25em;\n\n@background: #FFFFFF linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.05));\n@fontWeight: normal;\n\n@activeBorderSize: 0em;\n\n@hoverBackground: rgba(0, 0, 0, 0.02);\n@downBackground: rgba(0, 0, 0, 0.06);\n\n@activeBackground: rgba(0, 0, 0, 0.04);\n@activeHoverBackground: rgba(0, 0, 0, 0.04);\n\n\n@headerBackground: rgba(0, 0, 0, 0.08);\n\n@subMenuMargin: 0.5em -0.6em 0;\n@subMenuHorizontalPadding: 0.7em;\n\n@arrowHoverColor: #EEEEEE;\n@arrowActiveColor: #EEEEEE;\n@arrowVerticalHoverColor: #F4F4F4;\n@arrowVerticalActiveColor: #F4F4F4;\n\n@dividerBackground: #E8E8E8;\n@verticalDividerBackground: #E8E8E8;\n\n/*-------------------\n      Elements\n--------------------*/\n\n@buttonOffset: -0.15em;\n@buttonVerticalPadding: 0.75em;\n\n/*-------------------\n        Types\n--------------------*/\n\n@paginationMinWidth: 3.5em;\n\n@tieredActiveItemBackground: #F5F5F5;\n@tieredActiveMenuBackground: #F5F5F5;\n\n/*-------------------\n      Variations\n--------------------*/\n\n@verticalBackground: #FFFFFF;\n@verticalItemBackground: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.02));\n\n@invertedBackground: @black linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.0));\n@invertedBoxShadow             :\n  0px 1px 2px 0px rgba(0, 0, 0, 0.15),\n  0px 0px 0px 1px rgba(255, 255, 255, 0.15)\n;\n@secondaryVerticalPadding: 0.75em;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/message.overrides",
    "content": ".ui.info.message {\n  background: linear-gradient(#D8EBF8, #D0E3EF);\n}\n.ui.error.message {\n  background: linear-gradient(#F8D8D8, #EFD0D0);\n}\n.ui.warning.message {\n  background: linear-gradient(#FFE3C8, #F5DAC0);\n}\n.ui.success.message {\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/message.variables",
    "content": "@background: linear-gradient(rgba(255, 255, 255, 0.1), rgba(0, 0, 0, 0.05)) #FEFEFE;\n@boxShadow:\n  0px 0px 0px 1px rgba(255, 255, 255, 0.3) inset,\n  0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset\n;\n@verticalPadding: 15px;\n@horizontalPadding: 15px;\n\n@headerFontSize: 1.15em;\n\n@infoTextColor: #264C72;\n@warningTextColor: #613A00;\n@errorTextColor: #991111;\n\n@floatingBoxShadow:\n  0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset,\n  0px 2px 3px 0px rgba(0, 0, 0, 0.1),\n  0px 0px 0px 1px rgba(0, 0, 0, 0.05) inset\n;\n\n@infoBorderColor: #97C1DA;\n@errorBorderColor: #DA9797;\n@warningBorderColor: #DCA874;\n\n@small: 12px;\n@medium: 13px;\n@large: 14px;\n@huge: 16px;\n@massive: 18px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/collections/table.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n\n@background: #F8F8F8;\n\n@cellVerticalPadding: @relative6px;\n@cellHorizontalPadding: @relative8px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/button.variables",
    "content": "/*-------------------\n   Button Variables\n--------------------*/\n\n/* Button Variables */\n@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;\n@textTransform: none;\n@fontWeight: bold;\n@textColor: #333333;\n\n@textShadow: 0px 1px 0px rgba(255, 255, 255, 0.9);\n@invertedTextShadow: 0px -1px 0px rgba(0, 0, 0, 0.25);\n\n@borderRadius: @relativeBorderRadius;\n\n@verticalPadding: 0.75em;\n@horizontalPadding: 1.15em;\n\n@backgroundColor: #FAFAFA;\n@backgroundImage: linear-gradient(rgba(255, 255, 255, 0.15), rgba(0, 0, 0, 0.1));\n@boxShadow:\n  0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,\n  0 0 0 1px rgba(0, 0, 0, 0.13) inset,\n  0 1px 3px rgba(0, 0, 0, 0.05)\n;\n\n@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.2), rgba(0, 0, 0, 0.2));\n@coloredBoxShadow:\n  0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,\n  0 0 0 1px rgba(0, 0, 0, 0.1) inset,\n  0 1px 3px rgba(0, 0, 0, 0.05)\n;\n\n@hoverBackgroundColor: #E0E0E0;\n@hoverBackgroundImage: linear-gradient(rgba(0, 0, 0, 0), rgba(0, 0, 0, 0.08));\n@hoverBoxShadow: @boxShadow;\n\n@downBackgroundColor: '';\n@downBackgroundImage: '';\n@downBoxShadow:\n  0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,\n  0 0 0 1px rgba(0, 0, 0, 0.13) inset,\n  0 3px 5px rgba(0, 0, 0, 0.15) inset !important\n;\n@activeBackgroundColor: #DFDFDF;\n@activeBackgroundImage: none;\n@activeBoxShadow:\n  0 -1px 0 0 rgba(0, 0, 0, 0.05) inset,\n  0 0 0 1px rgba(0, 0, 0, 0.13) inset,\n  0 3px 5px rgba(0, 0, 0, 0.1) inset !important\n;\n\n@labeledIconBackgroundColor: transparent;\n@labeledIconBorder: transparent;\n@labeledIconPadding: (@horizontalPadding + 2.25em);\n\n@basicFontWeight: bold;\n@basicTextColor: @linkColor;\n@basicHoverTextColor: @linkHoverColor;\n\n@basicHoverBackground: #E0E0E0;\n\n@blue: #3072B3;\n@green: #60B044;\n@black: #5D5D5D;\n\n@primaryColor: @blue;\n@secondaryColor: @black;\n\n@mini: 0.6rem;\n@tiny: 0.7rem;\n@small: 0.85rem;\n@medium: 0.92rem;\n@large: 1rem;\n@big: 1.125rem;\n@huge: 1.25rem;\n@massive: 1.3rem;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/header.variables",
    "content": "/*******************************\n            Header\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@iconMargin: @4px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/icon.overrides",
    "content": "/* Octicons */\n\n.icon.alert:before { content: '\\f02d'} /*  */\n.icon.alignment.align:before { content: '\\f08a'} /*  */\n.icon.alignment.aligned.to:before { content: '\\f08e'} /*  */\n.icon.alignment.unalign:before { content: '\\f08b'} /*  */\n.icon.arrow.down:before { content: '\\f03f'} /*  */\n.icon.arrow.left:before { content: '\\f040'} /*  */\n.icon.arrow.right:before { content: '\\f03e'} /*  */\n.icon.arrow.small.down:before { content: '\\f0a0'} /*  */\n.icon.arrow.small.left:before { content: '\\f0a1'} /*  */\n.icon.arrow.small.right:before { content: '\\f071'} /*  */\n.icon.arrow.small.up:before { content: '\\f09f'} /*  */\n.icon.arrow.up:before { content: '\\f03d'} /*  */\n.icon.beer:before { content: '\\f069'} /*  */\n.icon.book:before { content: '\\f007'} /*  */\n.icon.bookmark:before { content: '\\f07b'} /*  */\n.icon.briefcase:before { content: '\\f0d3'} /*  */\n.icon.broadcast:before { content: '\\f048'} /*  */\n.icon.browser:before { content: '\\f0c5'} /*  */\n.icon.bug:before { content: '\\f091'} /*  */\n.icon.calendar:before { content: '\\f068'} /*  */\n.icon.check:before { content: '\\f03a'} /*  */\n.icon.checklist:before { content: '\\f076'} /*  */\n.icon.chevron.down:before { content: '\\f0a3'} /*  */\n.icon.chevron.left:before { content: '\\f0a4'} /*  */\n.icon.chevron.right:before { content: '\\f078'} /*  */\n.icon.chevron.up:before { content: '\\f0a2'} /*  */\n.icon.circle.slash:before { content: '\\f084'} /*  */\n.icon.circuit.board:before { content: '\\f0d6'} /*  */\n.icon.clippy:before { content: '\\f035'} /*  */\n.icon.clock:before { content: '\\f046'} /*  */\n.icon.cloud.download:before { content: '\\f00b'} /*  */\n.icon.cloud.upload:before { content: '\\f00c'} /*  */\n.icon.code:before { content: '\\f05f'} /*  */\n.icon.color.mode:before { content: '\\f065'} /*  */\n.icon.comment.add:before,\n.icon.comment:before { content: '\\f02b'} /*  */\n.icon.comment.discussion:before { content: '\\f04f'} /*  */\n.icon.credit.card:before { content: '\\f045'} /*  */\n.icon.dash:before { content: '\\f0ca'} /*  */\n.icon.dashboard:before { content: '\\f07d'} /*  */\n.icon.database:before { content: '\\f096'} /*  */\n.icon.device.camera:before { content: '\\f056'} /*  */\n.icon.device.camera.video:before { content: '\\f057'} /*  */\n.icon.device.desktop:before { content: '\\f27c'} /*  */\n.icon.device.mobile:before { content: '\\f038'} /*  */\n.icon.diff:before { content: '\\f04d'} /*  */\n.icon.diff.added:before { content: '\\f06b'} /*  */\n.icon.diff.ignored:before { content: '\\f099'} /*  */\n.icon.diff.modified:before { content: '\\f06d'} /*  */\n.icon.diff.removed:before { content: '\\f06c'} /*  */\n.icon.diff.renamed:before { content: '\\f06e'} /*  */\n.icon.ellipsis:before { content: '\\f09a'} /*  */\n.icon.eye.unwatch:before,\n.icon.eye.watch:before,\n.icon.eye:before { content: '\\f04e'} /*  */\n.icon.file.binary:before { content: '\\f094'} /*  */\n.icon.file.code:before { content: '\\f010'} /*  */\n.icon.file.directory:before { content: '\\f016'} /*  */\n.icon.file.media:before { content: '\\f012'} /*  */\n.icon.file.pdf:before { content: '\\f014'} /*  */\n.icon.file.submodule:before { content: '\\f017'} /*  */\n.icon.file.symlink.directory:before { content: '\\f0b1'} /*  */\n.icon.file.symlink.file:before { content: '\\f0b0'} /*  */\n.icon.file.text:before { content: '\\f011'} /*  */\n.icon.file.zip:before { content: '\\f013'} /*  */\n.icon.flame:before { content: '\\f0d2'} /*  */\n.icon.fold:before { content: '\\f0cc'} /*  */\n.icon.gear:before { content: '\\f02f'} /*  */\n.icon.gift:before { content: '\\f042'} /*  */\n.icon.gist:before { content: '\\f00e'} /*  */\n.icon.gist.secret:before { content: '\\f08c'} /*  */\n.icon.git.branch.create:before,\n.icon.git.branch.delete:before,\n.icon.git.branch:before { content: '\\f020'} /*  */\n.icon.git.commit:before { content: '\\f01f'} /*  */\n.icon.git.compare:before { content: '\\f0ac'} /*  */\n.icon.git.merge:before { content: '\\f023'} /*  */\n.icon.git.pull.request.abandoned:before,\n.icon.git.pull.request:before { content: '\\f009'} /*  */\n.icon.globe:before { content: '\\f0b6'} /*  */\n.icon.graph:before { content: '\\f043'} /*  */\n.icon.heart:before { content: '\\2665'} /* ♥ */\n.icon.history:before { content: '\\f07e'} /*  */\n.icon.home:before { content: '\\f08d'} /*  */\n.icon.horizontal.rule:before { content: '\\f070'} /*  */\n.icon.hourglass:before { content: '\\f09e'} /*  */\n.icon.hubot:before { content: '\\f09d'} /*  */\n.icon.inbox:before { content: '\\f0cf'} /*  */\n.icon.info:before { content: '\\f059'} /*  */\n.icon.issue.closed:before { content: '\\f028'} /*  */\n.icon.issue.opened:before { content: '\\f026'} /*  */\n.icon.issue.reopened:before { content: '\\f027'} /*  */\n.icon.jersey:before { content: '\\f019'} /*  */\n.icon.jump.down:before { content: '\\f072'} /*  */\n.icon.jump.left:before { content: '\\f0a5'} /*  */\n.icon.jump.right:before { content: '\\f0a6'} /*  */\n.icon.jump.up:before { content: '\\f073'} /*  */\n.icon.key:before { content: '\\f049'} /*  */\n.icon.keyboard:before { content: '\\f00d'} /*  */\n.icon.law:before { content: '\\f0d8'} /*  */\n.icon.light.bulb:before { content: '\\f000'} /*  */\n.icon.linkify:before { content: '\\f05c'} /*  */\n.icon.linkify.external:before { content: '\\f07f'} /*  */\n.icon.list.ordered:before { content: '\\f062'} /*  */\n.icon.list.unordered:before { content: '\\f061'} /*  */\n.icon.location:before { content: '\\f060'} /*  */\n.icon.gist.private:before,\n.icon.mirror.private:before,\n.icon.git.fork.private:before,\n.icon.lock:before { content: '\\f06a'} /*  */\n.icon.logo.github:before { content: '\\f092'} /*  */\n.icon.mail:before { content: '\\f03b'} /*  */\n.icon.mail.read:before { content: '\\f03c'} /*  */\n.icon.mail.reply:before { content: '\\f051'} /*  */\n.icon.mark.github:before { content: '\\f00a'} /*  */\n.icon.markdown:before { content: '\\f0c9'} /*  */\n.icon.megaphone:before { content: '\\f077'} /*  */\n.icon.mention:before { content: '\\f0be'} /*  */\n.icon.microscope:before { content: '\\f089'} /*  */\n.icon.milestone:before { content: '\\f075'} /*  */\n.icon.mirror.public:before,\n.icon.mirror:before { content: '\\f024'} /*  */\n.icon.mortar.board:before { content: '\\f0d7'} /*  */\n.icon.move.down:before { content: '\\f0a8'} /*  */\n.icon.move.left:before { content: '\\f074'} /*  */\n.icon.move.right:before { content: '\\f0a9'} /*  */\n.icon.move.up:before { content: '\\f0a7'} /*  */\n.icon.mute:before { content: '\\f080'} /*  */\n.icon.no.newline:before { content: '\\f09c'} /*  */\n.icon.octoface:before { content: '\\f008'} /*  */\n.icon.organization:before { content: '\\f037'} /*  */\n.icon.package:before { content: '\\f0c4'} /*  */\n.icon.paintcan:before { content: '\\f0d1'} /*  */\n.icon.pencil:before { content: '\\f058'} /*  */\n.icon.person.add:before,\n.icon.person.follow:before,\n.icon.person:before { content: '\\f018'} /*  */\n.icon.pin:before { content: '\\f041'} /*  */\n.icon.playback.fast.forward:before { content: '\\f0bd'} /*  */\n.icon.playback.pause:before { content: '\\f0bb'} /*  */\n.icon.playback.play:before { content: '\\f0bf'} /*  */\n.icon.playback.rewind:before { content: '\\f0bc'} /*  */\n.icon.plug:before { content: '\\f0d4'} /*  */\n.icon.repo.create:before,\n.icon.gist.new:before,\n.icon.file.directory.create:before,\n.icon.file.add:before,\n.icon.plus:before { content: '\\f05d'} /*  */\n.icon.podium:before { content: '\\f0af'} /*  */\n.icon.primitive.dot:before { content: '\\f052'} /*  */\n.icon.primitive.square:before { content: '\\f053'} /*  */\n.icon.pulse:before { content: '\\f085'} /*  */\n.icon.puzzle:before { content: '\\f0c0'} /*  */\n.icon.question:before { content: '\\f02c'} /*  */\n.icon.quote:before { content: '\\f063'} /*  */\n.icon.radio.tower:before { content: '\\f030'} /*  */\n.icon.repo.delete:before,\n.icon.repo:before { content: '\\f001'} /*  */\n.icon.repo.clone:before { content: '\\f04c'} /*  */\n.icon.repo.force.push:before { content: '\\f04a'} /*  */\n.icon.gist.fork:before,\n.icon.repo.forked:before { content: '\\f002'} /*  */\n.icon.repo.pull:before { content: '\\f006'} /*  */\n.icon.repo.push:before { content: '\\f005'} /*  */\n.icon.rocket:before { content: '\\f033'} /*  */\n.icon.rss:before { content: '\\f034'} /*  */\n.icon.ruby:before { content: '\\f047'} /*  */\n.icon.screen.full:before { content: '\\f066'} /*  */\n.icon.screen.normal:before { content: '\\f067'} /*  */\n.icon.search.save:before,\n.icon.search:before { content: '\\f02e'} /*  */\n.icon.server:before { content: '\\f097'} /*  */\n.icon.settings:before { content: '\\f07c'} /*  */\n.icon.log.in:before,\n.icon.sign.in:before { content: '\\f036'} /*  */\n.icon.log.out:before,\n.icon.sign.out:before { content: '\\f032'} /*  */\n.icon.split:before { content: '\\f0c6'} /*  */\n.icon.squirrel:before { content: '\\f0b2'} /*  */\n.icon.star.add:before,\n.icon.star.delete:before,\n.icon.star:before { content: '\\f02a'} /*  */\n.icon.steps:before { content: '\\f0c7'} /*  */\n.icon.stop:before { content: '\\f08f'} /*  */\n.icon.repo.sync:before,\n.icon.sync:before { content: '\\f087'} /*  */\n.icon.tag.remove:before,\n.icon.tag.add:before,\n.icon.tag:before { content: '\\f015'} /*  */\n.icon.telescope:before { content: '\\f088'} /*  */\n.icon.terminal:before { content: '\\f0c8'} /*  */\n.icon.three.bars:before { content: '\\f05e'} /*  */\n.icon.thumbsdown:before { content: '\\f0db'} /*  */\n.icon.thumbsup:before { content: '\\f0da'} /*  */\n.icon.tools:before { content: '\\f031'} /*  */\n.icon.trashcan:before { content: '\\f0d0'} /*  */\n.icon.triangle.down:before { content: '\\f05b'} /*  */\n.icon.triangle.left:before { content: '\\f044'} /*  */\n.icon.triangle.right:before { content: '\\f05a'} /*  */\n.icon.triangle.up:before { content: '\\f0aa'} /*  */\n.icon.unfold:before { content: '\\f039'} /*  */\n.icon.unmute:before { content: '\\f0ba'} /*  */\n.icon.versions:before { content: '\\f064'} /*  */\n.icon.remove.close:before,\n.icon.x:before { content: '\\f081'} /*  */\n.icon.zap:before { content: '\\26A1'} /* ⚡ */\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/icon.variables",
    "content": "@fontPath: '../../themes/github/assets/fonts';\n@fontName: 'octicons';\n@fallbackSRC: '';\n\n@width: 1em;\n@height: 1em;\n\n@small: 13px;\n@medium: 16px;\n@large: 18px;\n@big : 20px;\n@huge: 28px;\n@massive: 32px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/image.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n\n@miniWidth: 20px;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/input.overrides",
    "content": "/*******************************\n            Input\n*******************************/\n\n/* Labeled Input has padding */\n.ui.labeled.input {\n  background-color: @white;\n  border: @borderWidth solid @borderColor;\n  border-radius: @borderRadius !important;\n}\n.ui.labeled.input input {\n  box-shadow: none !important;\n  border: none !important;\n}\n.ui.labeled.input .label {\n  font-weight: normal;\n  align-self: center;\n  font-size: 12px;\n  margin: @2px;\n  border-radius: @borderRadius !important;\n  padding: @relative5px @relative8px !important;\n}\n\n/* GitHub Uses Focus Group with class name added */\n.ui.labeled.input.focused {\n  border-color: @focusBorderColor;\n  box-shadow: @focusBoxShadow;\n}\n.ui.labeled.input.focused .label {\n  background-color: #E1EAF5;\n  color: #4078C0;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/input.variables",
    "content": "/*******************************\n            Input\n*******************************/\n\n@boxShadow: 0 1px 2px rgba(0, 0, 0, 0.075) inset;\n\n@verticalPadding: @relative7px;\n@horizontalPadding: @relative8px;\n\n@borderColor: #CCCCCC;\n\n@focusBorderColor: #51A7E8;\n@focusBoxShadow:\n  0 1px 2px rgba(0, 0, 0, 0.075) inset,\n  0 0 5px rgba(81, 167, 232, 0.5)\n;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/label.overrides",
    "content": "/*******************************\n         Site Overrides\n*******************************/\n\n/* Notification Label on GitHub */\n.ui.floating.blue.label {\n  border: 2px solid #f3f3f3 !important;\n  background-image: linear-gradient(#7aa1d3, #4078c0) !important;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/label.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/segment.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/segment.variables",
    "content": "/*******************************\n            Standard\n*******************************/\n\n/*-------------------\n       Segment\n--------------------*/\n\n@segmentBorderWidth: 1px;\n@border: 1px solid #D8DEE2;\n@boxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075);\n\n@verticalPadding: 20px;\n@horizontalPadding: 20px;\n\n@borderRadius: 4px;\n\n/*******************************\n            Variations\n*******************************/\n\n\n/* Raised */\n@raisedBoxShadow: 0px 1px 3px rgba(0, 0, 0, 0.075);\n\n/* Colors */\n@coloredBorderSize: 0.5em;\n\n/* Ordinality */\n@secondaryBackground: #F9F9F9;\n@secondaryColor: @textColor;\n\n@tertiaryBackground:  #F0F0F0;\n@tertiaryColor: @textColor;\n\n@secondaryInvertedBackground: #555555;\n@secondaryInvertedColor: @textColor;\n\n@tertiaryInvertedBackground: #333333;\n@tertiaryInvertedColor: @textColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/step.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.steps .step:after {\n  display: none;\n}\n.ui.steps .completed.step:before {\n  opacity: 0.5;\n}\n\n.ui.steps .step.active:after {\n  display: block;\n  border: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-left: 1px solid rgba(0, 0, 0, 0.2);\n}\n.ui.vertical.steps .step.active:after {\n  display: block;\n  border: none;\n  top: 50%;\n  right: 0%;\n  border-left: none;\n  border-bottom: 1px solid rgba(0, 0, 0, 0.2);\n  border-right: 1px solid rgba(0, 0, 0, 0.2);\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/elements/step.variables",
    "content": "/*-------------------\n   Step Variables\n--------------------*/\n\n/* Step */\n@background: transparent linear-gradient(transparent, rgba(0, 0, 0, 0.07));\n@verticalPadding: 1em;\n\n@arrowDisplay: none;\n@lastArrowDisplay: none;\n@activeArrowDisplay: block;\n@activeLastArrowDisplay: block;\n\n/* Group */\n@stepsBackground: #FFFFFF;\n@stepsBoxShadow: 0px 0px 1px 0px rgba(0, 0, 0, 0.15);\n\n/* States */\n@activeBackground: #FFFFFF;\n@activeIconColor: @darkTextColor;\n\n/* Arrow */\n@arrowTopOffset: 100%;\n@arrowRightOffset: 50%;\n@arrowBorderColor: rgba(0, 0, 0, 0.2);\n@arrowBorderWidth: 0px 0px @borderWidth @borderWidth;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/globals/site.variables",
    "content": "/*******************************\n     User Global Variables\n*******************************/\n\n@pageMinWidth  : 1049px;\n@pageOverflowX : visible;\n\n@emSize: 13px;\n@fontSize : 13px;\n@fontName : 'Arial';\n@importGoogleFonts : false;\n\n@h1: 2.25em;\n\n@defaultBorderRadius: 0.2307em;\n\n@disabledOpacity: 0.3;\n\n/* Colors */\n@blue: #80A6CD;\n@green: #78CB5B;\n@orange: #D26911;\n@black: #333333;\n@primaryColor: @green;\n@secondaryColor: @black;\n\n/* Links */\n@linkColor: #4078C0;\n@linkHoverColor: @linkColor;\n@linkHoverUnderline: underline;\n\n/* Borders */\n@borderColor: rgba(0, 0, 0, 0.13);\n@solidBorderColor: #DDDDDD;\n@internalBorderColor: rgba(0, 0, 0, 0.06);\n@selectedBorderColor: #51A7E8;\n\n/* Breakpoints */\n@largeMonitorBreakpoint: 1049px;\n@computerBreakpoint: @largeMonitorBreakpoint;\n@tabletBreakpoint: @largeMonitorBreakpoint;\n\n@infoBackgroundColor: #E6F1F6;\n\n@infoTextColor: #4E575B;\n@warningTextColor: #613A00;\n@errorTextColor: #991111;"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/modules/dropdown.overrides",
    "content": "/*******************************\n        User Overrides\n*******************************/\n\n/* Smaller Icon */\n.ui.dropdown > .dropdown.icon {\n  font-size: 12px;\n}\n\n\n/* Dropdown Carets */\n@font-face {\n  font-family: 'Dropdown';\n  src:\n    url(data:application/x-font-ttf;charset=utf-8;base64,AAEAAAALAIAAAwAwT1MvMggjB5AAAAC8AAAAYGNtYXAPfuIIAAABHAAAAExnYXNwAAAAEAAAAWgAAAAIZ2x5Zjo82LgAAAFwAAABVGhlYWQAQ88bAAACxAAAADZoaGVhAwcB6QAAAvwAAAAkaG10eAS4ABIAAAMgAAAAIGxvY2EBNgDeAAADQAAAABJtYXhwAAoAFgAAA1QAAAAgbmFtZVcZpu4AAAN0AAABRXBvc3QAAwAAAAAEvAAAACAAAwIAAZAABQAAAUwBZgAAAEcBTAFmAAAA9QAZAIQAAAAAAAAAAAAAAAAAAAABEAAAAAAAAAAAAAAAAAAAAABAAADw2gHg/+D/4AHgACAAAAABAAAAAAAAAAAAAAAgAAAAAAACAAAAAwAAABQAAwABAAAAFAAEADgAAAAKAAgAAgACAAEAIPDa//3//wAAAAAAIPDX//3//wAB/+MPLQADAAEAAAAAAAAAAAAAAAEAAf//AA8AAQAAAAAAAAAAAAIAADc5AQAAAAABAAAAAAAAAAAAAgAANzkBAAAAAAEAAAAAAAAAAAACAAA3OQEAAAAAAQAAAIABJQElABMAABM0NzY3BTYXFhUUDwEGJwYvASY1AAUGBwEACAUGBoAFCAcGgAUBEgcGBQEBAQcECQYHfwYBAQZ/BwYAAQAAAG4BJQESABMAADc0PwE2MzIfARYVFAcGIyEiJyY1AAWABgcIBYAGBgUI/wAHBgWABwaABQWABgcHBgUFBgcAAAABABIASQC3AW4AEwAANzQ/ATYXNhcWHQEUBwYnBi8BJjUSBoAFCAcFBgYFBwgFgAbbBwZ/BwEBBwQJ/wgEBwEBB38GBgAAAAABAAAASQClAW4AEwAANxE0NzYzMh8BFhUUDwEGIyInJjUABQYHCAWABgaABQgHBgVbAQAIBQYGgAUIBwWABgYFBwAAAAEAAAABAADZuaKOXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAAAAACgAUAB4AQgBkAIgAqgAAAAEAAAAIABQAAQAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAOAK4AAQAAAAAAAQAOAAAAAQAAAAAAAgAOAEcAAQAAAAAAAwAOACQAAQAAAAAABAAOAFUAAQAAAAAABQAWAA4AAQAAAAAABgAHADIAAQAAAAAACgA0AGMAAwABBAkAAQAOAAAAAwABBAkAAgAOAEcAAwABBAkAAwAOACQAAwABBAkABAAOAFUAAwABBAkABQAWAA4AAwABBAkABgAOADkAAwABBAkACgA0AGMAaQBjAG8AbQBvAG8AbgBWAGUAcgBzAGkAbwBuACAAMQAuADAAaQBjAG8AbQBvAG8Abmljb21vb24AaQBjAG8AbQBvAG8AbgBSAGUAZwB1AGwAYQByAGkAYwBvAG0AbwBvAG4ARgBvAG4AdAAgAGcAZQBuAGUAcgBhAHQAZQBkACAAYgB5ACAASQBjAG8ATQBvAG8AbgAuAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=) format('truetype'),\n    url(data:application/font-woff;charset=utf-8;base64,d09GRk9UVE8AAAVwAAoAAAAABSgAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABDRkYgAAAA9AAAAdkAAAHZLDXE/09TLzIAAALQAAAAYAAAAGAIIweQY21hcAAAAzAAAABMAAAATA9+4ghnYXNwAAADfAAAAAgAAAAIAAAAEGhlYWQAAAOEAAAANgAAADYAQ88baGhlYQAAA7wAAAAkAAAAJAMHAelobXR4AAAD4AAAACAAAAAgBLgAEm1heHAAAAQAAAAABgAAAAYACFAAbmFtZQAABAgAAAFFAAABRVcZpu5wb3N0AAAFUAAAACAAAAAgAAMAAAEABAQAAQEBCGljb21vb24AAQIAAQA6+BwC+BsD+BgEHgoAGVP/i4seCgAZU/+LiwwHi2v4lPh0BR0AAACIDx0AAACNER0AAAAJHQAAAdASAAkBAQgPERMWGyAlKmljb21vb25pY29tb29udTB1MXUyMHVGMEQ3dUYwRDh1RjBEOXVGMERBAAACAYkABgAIAgABAAQABwAKAA0AVgCfAOgBL/yUDvyUDvyUDvuUDvtvi/emFYuQjZCOjo+Pj42Qiwj3lIsFkIuQiY6Hj4iNhouGi4aJh4eHCPsU+xQFiIiGiYaLhouHjYeOCPsU9xQFiI+Jj4uQCA77b4v3FBWLkI2Pjo8I9xT3FAWPjo+NkIuQi5CJjogI9xT7FAWPh42Hi4aLhomHh4eIiIaJhosI+5SLBYaLh42HjoiPiY+LkAgO+92d928Vi5CNkI+OCPcU9xQFjo+QjZCLkIuPiY6Hj4iNhouGCIv7lAWLhomHh4iIh4eJhouGi4aNiI8I+xT3FAWHjomPi5AIDvvdi+YVi/eUBYuQjZCOjo+Pj42Qi5CLkImOhwj3FPsUBY+IjYaLhouGiYeHiAj7FPsUBYiHhomGi4aLh42Hj4iOiY+LkAgO+JQU+JQViwwKAAAAAAMCAAGQAAUAAAFMAWYAAABHAUwBZgAAAPUAGQCEAAAAAAAAAAAAAAAAAAAAARAAAAAAAAAAAAAAAAAAAAAAQAAA8NoB4P/g/+AB4AAgAAAAAQAAAAAAAAAAAAAAIAAAAAAAAgAAAAMAAAAUAAMAAQAAABQABAA4AAAACgAIAAIAAgABACDw2v/9//8AAAAAACDw1//9//8AAf/jDy0AAwABAAAAAAAAAAAAAAABAAH//wAPAAEAAAABAAA5emozXw889QALAgAAAAAA0ABHWAAAAADQAEdYAAAAAAElAW4AAAAIAAIAAAAAAAAAAQAAAeD/4AAAAgAAAAAAASUAAQAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAABAAAAASUAAAElAAAAtwASALcAAAAAUAAACAAAAAAADgCuAAEAAAAAAAEADgAAAAEAAAAAAAIADgBHAAEAAAAAAAMADgAkAAEAAAAAAAQADgBVAAEAAAAAAAUAFgAOAAEAAAAAAAYABwAyAAEAAAAAAAoANABjAAMAAQQJAAEADgAAAAMAAQQJAAIADgBHAAMAAQQJAAMADgAkAAMAAQQJAAQADgBVAAMAAQQJAAUAFgAOAAMAAQQJAAYADgA5AAMAAQQJAAoANABjAGkAYwBvAG0AbwBvAG4AVgBlAHIAcwBpAG8AbgAgADEALgAwAGkAYwBvAG0AbwBvAG5pY29tb29uAGkAYwBvAG0AbwBvAG4AUgBlAGcAdQBsAGEAcgBpAGMAbwBtAG8AbwBuAEYAbwBuAHQAIABnAGUAbgBlAHIAYQB0AGUAZAAgAGIAeQAgAEkAYwBvAE0AbwBvAG4ALgAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA) format('woff')\n  ;\n  font-weight: normal;\n  font-style: normal;\n}\n\n.ui.dropdown > .dropdown.icon {\n  font-family: 'Dropdown';\n  line-height: 1;\n  height: 1em;\n  width: 1.23em;\n  backface-visibility: hidden;\n  font-weight: normal;\n  font-style: normal;\n  text-align: center;\n}\n\n.ui.dropdown > .dropdown.icon {\n  width: auto;\n}\n.ui.dropdown > .dropdown.icon:before {\n  content: '\\f0d7';\n}\n\n/* Sub Menu */\n.ui.dropdown .menu .item .dropdown.icon:before {\n  content: '\\f0da'/*rtl:'\\f0d9'*/;\n}\n\n.ui.dropdown .item .left.dropdown.icon:before,\n.ui.dropdown .left.menu .item .dropdown.icon:before {\n  content: \"\\f0d9\"/*rtl:\"\\f0da\"*/;\n}\n\n/* Vertical Menu Dropdown */\n.ui.vertical.menu .dropdown.item > .dropdown.icon:before {\n  content: \"\\f0da\"/*rtl:\"\\f0d9\"*/;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/modules/dropdown.variables",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n\n@transition:\n  width @defaultDuration @defaultEasing\n;\n\n@menuPadding: 0px;\n\n@itemVerticalPadding: @relative8px;\n@itemHorizontalPadding: @relative14px;\n\n@dropdownIconMargin: 0em 0em 0em 2px;\n\n@raisedBoxShadow: 0px 3px 12px rgba(0, 0, 0, 0.15);\n\n@menuPadding: @relative5px 0px;\n\n@menuHeaderMargin: 0em;\n@menuHeaderPadding: @relative6px @itemHorizontalPadding;\n@menuHeaderFontSize: @relative12px;\n@menuHeaderTextTransform: none;\n@menuHeaderFontWeight: normal;\n@menuHeaderColor: #767676;\n\n@menuDividerMargin: @relative8px 0em;\n\n@disabledOpacity: 0.6;\n\n/* States */\n@hoveredItemBackground: #4078C0;\n@hoveredItemColor: @white;\n\n@pointingArrowSize: @relative9px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/github/modules/popup.variables",
    "content": "/*******************************\n             Popup\n*******************************/\n\n\n@small: @relative10px;\n@medium: @relative11px;\n@large: @relative13px;\n\n@verticalPadding: @relative7px;\n@horizontalPadding: @relative11px;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/gmail/collections/message.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/gmail/collections/message.variables",
    "content": "@background: #F3F3F3;\n\n@boxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;\n@borderRadius: 4px;\n@verticalPadding: 7px;\n@horizontalPadding: 15px;\n\n@headerFontSize: 1em;\n\n@floatingBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2);\n\n@iconSize: 1.5em;\n@iconDistance: 1em;\n\n@warningBackgroundColor: #F9EDBE;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/instagram/views/card.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n\n@import url(http://fonts.googleapis.com/css?family=Montserrat:700,400);\n\n.ui.cards > .card,\n.ui.card {\n  font-family: 'Montserrat';\n  font-size-adjust: 0.5;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/instagram/views/card.variables",
    "content": "/*******************************\n             Card\n*******************************/\n\n/*-------------------\n         View\n--------------------*/\n\n@borderBoxShadow: none;\n@shadowBoxShadow: none;\n@boxShadow: none;\n\n\n@internalBorderColor: #EDEDEE;\n@border: 1px solid #EDEDEE;\n\n@contentPadding: 14px 20px;\n\n@metaColor: #A5A7AA;\n\n@linkHoverRaiseDistance: 0px;\n@linkHoverBoxShadow: none;\n@linkHoverBorder: 1px solid #D0D0D8;"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/collections/menu.overrides",
    "content": "@import url(https://fonts.googleapis.com/css?family=Roboto);\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/collections/menu.variables",
    "content": "/*******************************\n             Menu\n*******************************/\n\n@fontFamily: 'Roboto', Arial, sans-serif;\n@boxShadow: 0px 1px 6px rgba(0, 0, 0, 0.2);\n@dividerSize: 0px;\n\n@itemVerticalPadding: @relativeLarge;\n@itemHorizontalPadding: @relativeLarge;"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/button.overrides",
    "content": "@import url(https://fonts.googleapis.com/css?family=Roboto);\n\n.ui.primary.button:hover {\n  box-shadow:\n    0px 0px 0px 1px rgba(0, 0, 0, 0.3) inset,\n    0px 2px 3px 0px rgba(0, 0, 0, 0.35) !important\n  ;\n}\n\n.ui.secondary.button:hover {\n  box-shadow:\n    0px 0px 0px 1px rgba(0, 0, 0, 0.2) inset,\n    0px 2px 3px 0px rgba(0, 0, 0, 0.3) !important\n  ;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/button.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@googleFontName : 'Roboto';\n@pageFont       : 'Roboto', Arial, sans-serif;\n\n@medium: 13px;\n\n@verticalPadding   : 0.8em;\n@horizontalPadding : 0.8em;\n@borderRadius      : @relative3px;\n@color             : #222222;\n@fontWeight        : normal;\n@textTransform     : none;\n\n@backgroundColor      : @white;\n@backgroundImage      : linear-gradient(transparent, rgba(0, 0, 0, 0.02));\n\n@solidBorderColor: #DDDDDD;\n\n@borderBoxShadowColor: @solidBorderColor;\n@borderBoxShadow: 0px 0px 0px 1px @solidBorderColor inset;\n@shadowBoxShadow: 0px 0px 0px 0px transparent;\n\n@transition:\n  opacity 0.3s @defaultEasing,\n  background-color 0.3s @defaultEasing,\n  color 0.3s @defaultEasing,\n  box-shadow 0.3s @defaultEasing,\n  background 0.3s @defaultEasing\n;\n/*-------------------\n        State\n--------------------*/\n\n@hoverBackgroundColor: @white;\n@hoverBoxShadow:\n  @borderBoxShadow,\n  0px 2px 3px 0px rgba(0, 0, 0, 0.2) !important\n;\n\n@downBackgroundColor: @white;\n@downBackgroundImage: linear-gradient(rgba(0, 0, 0, 0.04), rgba(0, 0, 0, 0.04));\n@downTextColor: #222222;\n@downBoxShadow: @borderBoxShadow;\n\n@activeBackgroundColor: #F0F0F0;\n@activeBoxShadow: 0px 0px 0px 1px #DDDDDD;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Basic */\n@basicBorderSize: 0px;\n@basicBorderRadius: 4px;\n@basicColoredBorderSize: 1px;\n@basicHoverBackground: @white;\n@basicHoverBoxShadow: @hoverBoxShadow;\n@basicDownBackground: @white;\n@basicDownBoxShadow: @downBoxShadow;\n\n@basicActiveBackground: #FFFFFF;\n@basicActiveBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2);\n\n/* Labeled */\n@labeledIconBackgroundColor: transparent;\n@labeledIconWidth: 2em;\n\n@labeledLabelBorderOffset: 0px;\n\n/* Colored */\n@coloredBackgroundImage : @subtleGradient;\n@coloredBoxShadow       : 0px 0px 0px 1px rgba(0, 0, 0, 0.1) inset;\n\n/* Primary */\n@primaryColor       : #4184F3;\n@primaryBoxShadow   : 0px 0px 0px 1px #0157E4 inset;\n\n/* Secondary */\n@secondaryColor           : #EEEEEE;\n@secondaryBackgroundImage : @backgroundImage;\n@secondaryTextColor       : @textColor;\n@secondaryBoxShadow       : @borderBoxShadow;\n\n/* Emotive */\n@positiveColor: #3D9400;\n@negativeColor: #D34836;\n\n/* Inverted */\n@invertedBorderSize: 1px;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/header.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n@import url(https://fonts.googleapis.com/css?family=Roboto);\n\nh1.ui.header,\n.ui.huge.header {\n  font-weight: normal;\n}\n\nh2.ui.header,\n.ui.large.header {\n  font-weight: normal;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/header.variables",
    "content": "/*-------------------\n       Header\n--------------------*/\n\n@headerFont : 'Roboto', Arial, sans-serif;\n@fontWeight: normal;\n\n@iconSize: 2em;\n@iconOffset: 0.2em;\n@iconAlignment: top;\n\n@subHeaderFontSize: 1rem;\n\n\n/* HTML Headings */\n@h1 : 2.25rem;\n@h2 : 2rem;\n@h3 : 1.75rem;\n@h4 : 1.5rem;\n@h5 : 1.25rem;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/icon.overrides",
    "content": "/* Material Design Icons */\n\ni.icon.threed.rotation:before { content: '\\e84d'}\ni.icon.ac.unit:before { content: '\\eb3b'}\ni.icon.access.alarm:before { content: '\\e190'}\ni.icon.access.alarms:before { content: '\\e191'}\ni.icon.access.time:before { content: '\\e192'}\ni.icon.accessibility:before { content: '\\e84e'}\ni.icon.accessible:before { content: '\\e914'}\ni.icon.account.balance:before { content: '\\e84f'}\ni.icon.account.balance.wallet:before { content: '\\e850'}\ni.icon.account.box:before { content: '\\e851'}\ni.icon.account.circle:before { content: '\\e853'}\ni.icon.adb:before { content: '\\e60e'}\ni.icon.add:before { content: '\\e145'}\ni.icon.add.a.photo:before { content: '\\e439'}\ni.icon.add.alarm:before { content: '\\e193'}\ni.icon.add.alert:before { content: '\\e003'}\ni.icon.add.box:before { content: '\\e146'}\ni.icon.add.circle:before { content: '\\e147'}\ni.icon.add.circle.outline:before { content: '\\e148'}\ni.icon.add.location:before { content: '\\e567'}\ni.icon.add.shopping.cart:before { content: '\\e854'}\ni.icon.add.to.photos:before { content: '\\e39d'}\ni.icon.add.to.queue:before { content: '\\e05c'}\ni.icon.adjust:before { content: '\\e39e'}\ni.icon.airline.seat.flat:before { content: '\\e630'}\ni.icon.airline.seat.flat.angled:before { content: '\\e631'}\ni.icon.airline.seat.individual.suite:before { content: '\\e632'}\ni.icon.airline.seat.legroom.extra:before { content: '\\e633'}\ni.icon.airline.seat.legroom.normal:before { content: '\\e634'}\ni.icon.airline.seat.legroom.reduced:before { content: '\\e635'}\ni.icon.airline.seat.recline.extra:before { content: '\\e636'}\ni.icon.airline.seat.recline.normal:before { content: '\\e637'}\ni.icon.airplanemode.active:before { content: '\\e195'}\ni.icon.airplanemode.inactive:before { content: '\\e194'}\ni.icon.airplay:before { content: '\\e055'}\ni.icon.airport.shuttle:before { content: '\\eb3c'}\ni.icon.alarm:before { content: '\\e855'}\ni.icon.alarm.add:before { content: '\\e856'}\ni.icon.alarm.off:before { content: '\\e857'}\ni.icon.alarm.on:before { content: '\\e858'}\ni.icon.album:before { content: '\\e019'}\ni.icon.all.inclusive:before { content: '\\eb3d'}\ni.icon.all.out:before { content: '\\e90b'}\ni.icon.android:before { content: '\\e859'}\ni.icon.announcement:before { content: '\\e85a'}\ni.icon.apps:before { content: '\\e5c3'}\ni.icon.archive:before { content: '\\e149'}\ni.icon.arrow.back:before { content: '\\e5c4'}\ni.icon.arrow.downward:before { content: '\\e5db'}\ni.icon.arrow.drop.down:before { content: '\\e5c5'}\ni.icon.arrow.drop.down.circle:before { content: '\\e5c6'}\ni.icon.arrow.drop.up:before { content: '\\e5c7'}\ni.icon.arrow.forward:before { content: '\\e5c8'}\ni.icon.arrow.upward:before { content: '\\e5d8'}\ni.icon.art.track:before { content: '\\e060'}\ni.icon.aspect.ratio:before { content: '\\e85b'}\ni.icon.assessment:before { content: '\\e85c'}\ni.icon.assignment:before { content: '\\e85d'}\ni.icon.assignment.ind:before { content: '\\e85e'}\ni.icon.assignment.late:before { content: '\\e85f'}\ni.icon.assignment.return:before { content: '\\e860'}\ni.icon.assignment.returned:before { content: '\\e861'}\ni.icon.assignment.turned.in:before { content: '\\e862'}\ni.icon.assistant:before { content: '\\e39f'}\ni.icon.assistant.photo:before { content: '\\e3a0'}\ni.icon.attach.file:before { content: '\\e226'}\ni.icon.attach.money:before { content: '\\e227'}\ni.icon.attachment:before { content: '\\e2bc'}\ni.icon.audiotrack:before { content: '\\e3a1'}\ni.icon.autorenew:before { content: '\\e863'}\ni.icon.av.timer:before { content: '\\e01b'}\ni.icon.backspace:before { content: '\\e14a'}\ni.icon.backup:before { content: '\\e864'}\ni.icon.battery.alert:before { content: '\\e19c'}\ni.icon.battery.charging.full:before { content: '\\e1a3'}\ni.icon.battery.full:before { content: '\\e1a4'}\ni.icon.battery.std:before { content: '\\e1a5'}\ni.icon.battery.unknown:before { content: '\\e1a6'}\ni.icon.beach.access:before { content: '\\eb3e'}\ni.icon.beenhere:before { content: '\\e52d'}\ni.icon.block:before { content: '\\e14b'}\ni.icon.bluetooth:before { content: '\\e1a7'}\ni.icon.bluetooth.audio:before { content: '\\e60f'}\ni.icon.bluetooth.connected:before { content: '\\e1a8'}\ni.icon.bluetooth.disabled:before { content: '\\e1a9'}\ni.icon.bluetooth.searching:before { content: '\\e1aa'}\ni.icon.blur.circular:before { content: '\\e3a2'}\ni.icon.blur.linear:before { content: '\\e3a3'}\ni.icon.blur.off:before { content: '\\e3a4'}\ni.icon.blur.on:before { content: '\\e3a5'}\ni.icon.book:before { content: '\\e865'}\ni.icon.bookmark:before { content: '\\e866'}\ni.icon.bookmark.border:before { content: '\\e867'}\ni.icon.border.all:before { content: '\\e228'}\ni.icon.border.bottom:before { content: '\\e229'}\ni.icon.border.clear:before { content: '\\e22a'}\ni.icon.border.color:before { content: '\\e22b'}\ni.icon.border.horizontal:before { content: '\\e22c'}\ni.icon.border.inner:before { content: '\\e22d'}\ni.icon.border.left:before { content: '\\e22e'}\ni.icon.border.outer:before { content: '\\e22f'}\ni.icon.border.right:before { content: '\\e230'}\ni.icon.border.style:before { content: '\\e231'}\ni.icon.border.top:before { content: '\\e232'}\ni.icon.border.vertical:before { content: '\\e233'}\ni.icon.branding.watermark:before { content: '\\e06b'}\ni.icon.brightness.one:before { content: '\\e3a6'}\ni.icon.brightness.two:before { content: '\\e3a7'}\ni.icon.brightness.three:before { content: '\\e3a8'}\ni.icon.brightness.four:before { content: '\\e3a9'}\ni.icon.brightness.five:before { content: '\\e3aa'}\ni.icon.brightness.six:before { content: '\\e3ab'}\ni.icon.brightness.seven:before { content: '\\e3ac'}\ni.icon.brightness.auto:before { content: '\\e1ab'}\ni.icon.brightness.high:before { content: '\\e1ac'}\ni.icon.brightness.low:before { content: '\\e1ad'}\ni.icon.brightness.medium:before { content: '\\e1ae'}\ni.icon.broken.image:before { content: '\\e3ad'}\ni.icon.brush:before { content: '\\e3ae'}\ni.icon.bubble.chart:before { content: '\\e6dd'}\ni.icon.bug.report:before { content: '\\e868'}\ni.icon.build:before { content: '\\e869'}\ni.icon.burst.mode:before { content: '\\e43c'}\ni.icon.business:before { content: '\\e0af'}\ni.icon.business.center:before { content: '\\eb3f'}\ni.icon.cached:before { content: '\\e86a'}\ni.icon.cake:before { content: '\\e7e9'}\ni.icon.call:before { content: '\\e0b0'}\ni.icon.call.end:before { content: '\\e0b1'}\ni.icon.call.made:before { content: '\\e0b2'}\ni.icon.call.merge:before { content: '\\e0b3'}\ni.icon.call.missed:before { content: '\\e0b4'}\ni.icon.call.missed.outgoing:before { content: '\\e0e4'}\ni.icon.call.received:before { content: '\\e0b5'}\ni.icon.call.split:before { content: '\\e0b6'}\ni.icon.call.to.action:before { content: '\\e06c'}\ni.icon.camera:before { content: '\\e3af'}\ni.icon.camera.alt:before { content: '\\e3b0'}\ni.icon.camera.enhance:before { content: '\\e8fc'}\ni.icon.camera.front:before { content: '\\e3b1'}\ni.icon.camera.rear:before { content: '\\e3b2'}\ni.icon.camera.roll:before { content: '\\e3b3'}\ni.icon.cancel:before { content: '\\e5c9'}\ni.icon.card.giftcard:before { content: '\\e8f6'}\ni.icon.card.membership:before { content: '\\e8f7'}\ni.icon.card.travel:before { content: '\\e8f8'}\ni.icon.casino:before { content: '\\eb40'}\ni.icon.cast:before { content: '\\e307'}\ni.icon.cast.connected:before { content: '\\e308'}\ni.icon.center.focus.strong:before { content: '\\e3b4'}\ni.icon.center.focus.weak:before { content: '\\e3b5'}\ni.icon.change.history:before { content: '\\e86b'}\ni.icon.chat:before { content: '\\e0b7'}\ni.icon.chat.bubble:before { content: '\\e0ca'}\ni.icon.chat.bubble.outline:before { content: '\\e0cb'}\ni.icon.check:before { content: '\\e5ca'}\ni.icon.check.box:before { content: '\\e834'}\ni.icon.check.box.outline.blank:before { content: '\\e835'}\ni.icon.check.circle:before { content: '\\e86c'}\ni.icon.chevron.left:before { content: '\\e5cb'}\ni.icon.chevron.right:before { content: '\\e5cc'}\ni.icon.child.care:before { content: '\\eb41'}\ni.icon.child.friendly:before { content: '\\eb42'}\ni.icon.chrome.reader.mode:before { content: '\\e86d'}\ni.icon.class:before { content: '\\e86e'}\ni.icon.clear:before { content: '\\e14c'}\ni.icon.clear.all:before { content: '\\e0b8'}\ni.icon.close:before { content: '\\e5cd'}\ni.icon.closed.caption:before { content: '\\e01c'}\ni.icon.cloud:before { content: '\\e2bd'}\ni.icon.cloud.circle:before { content: '\\e2be'}\ni.icon.cloud.done:before { content: '\\e2bf'}\ni.icon.cloud.download:before { content: '\\e2c0'}\ni.icon.cloud.off:before { content: '\\e2c1'}\ni.icon.cloud.queue:before { content: '\\e2c2'}\ni.icon.cloud.upload:before { content: '\\e2c3'}\ni.icon.code:before { content: '\\e86f'}\ni.icon.collections:before { content: '\\e3b6'}\ni.icon.collections.bookmark:before { content: '\\e431'}\ni.icon.color.lens:before { content: '\\e3b7'}\ni.icon.colorize:before { content: '\\e3b8'}\ni.icon.comment:before { content: '\\e0b9'}\ni.icon.compare:before { content: '\\e3b9'}\ni.icon.compare.arrows:before { content: '\\e915'}\ni.icon.computer:before { content: '\\e30a'}\ni.icon.confirmation.number:before { content: '\\e638'}\ni.icon.contact.mail:before { content: '\\e0d0'}\ni.icon.contact.phone:before { content: '\\e0cf'}\ni.icon.contacts:before { content: '\\e0ba'}\ni.icon.content.copy:before { content: '\\e14d'}\ni.icon.content.cut:before { content: '\\e14e'}\ni.icon.content.paste:before { content: '\\e14f'}\ni.icon.control.point:before { content: '\\e3ba'}\ni.icon.control.point.duplicate:before { content: '\\e3bb'}\ni.icon.copyright:before { content: '\\e90c'}\ni.icon.create:before { content: '\\e150'}\ni.icon.create.new.folder:before { content: '\\e2cc'}\ni.icon.credit.card:before { content: '\\e870'}\ni.icon.crop:before { content: '\\e3be'}\ni.icon.crop.sixteen.nine:before { content: '\\e3bc'}\ni.icon.crop.three.two:before { content: '\\e3bd'}\ni.icon.crop.five.four:before { content: '\\e3bf'}\ni.icon.crop.seven.five:before { content: '\\e3c0'}\ni.icon.crop.din:before { content: '\\e3c1'}\ni.icon.crop.free:before { content: '\\e3c2'}\ni.icon.crop.landscape:before { content: '\\e3c3'}\ni.icon.crop.original:before { content: '\\e3c4'}\ni.icon.crop.portrait:before { content: '\\e3c5'}\ni.icon.crop.rotate:before { content: '\\e437'}\ni.icon.crop.square:before { content: '\\e3c6'}\ni.icon.dashboard:before { content: '\\e871'}\ni.icon.data.usage:before { content: '\\e1af'}\ni.icon.date.range:before { content: '\\e916'}\ni.icon.dehaze:before { content: '\\e3c7'}\ni.icon.delete:before { content: '\\e872'}\ni.icon.delete.forever:before { content: '\\e92b'}\ni.icon.delete.sweep:before { content: '\\e16c'}\ni.icon.description:before { content: '\\e873'}\ni.icon.desktop.mac:before { content: '\\e30b'}\ni.icon.desktop.windows:before { content: '\\e30c'}\ni.icon.details:before { content: '\\e3c8'}\ni.icon.developer.board:before { content: '\\e30d'}\ni.icon.developer.mode:before { content: '\\e1b0'}\ni.icon.device.hub:before { content: '\\e335'}\ni.icon.devices:before { content: '\\e1b1'}\ni.icon.devices.other:before { content: '\\e337'}\ni.icon.dialer.sip:before { content: '\\e0bb'}\ni.icon.dialpad:before { content: '\\e0bc'}\ni.icon.directions:before { content: '\\e52e'}\ni.icon.directions.bike:before { content: '\\e52f'}\ni.icon.directions.boat:before { content: '\\e532'}\ni.icon.directions.bus:before { content: '\\e530'}\ni.icon.directions.car:before { content: '\\e531'}\ni.icon.directions.railway:before { content: '\\e534'}\ni.icon.directions.run:before { content: '\\e566'}\ni.icon.directions.subway:before { content: '\\e533'}\ni.icon.directions.transit:before { content: '\\e535'}\ni.icon.directions.walk:before { content: '\\e536'}\ni.icon.disc.full:before { content: '\\e610'}\ni.icon.dns:before { content: '\\e875'}\ni.icon.do.not.disturb:before { content: '\\e612'}\ni.icon.do.not.disturb.alt:before { content: '\\e611'}\ni.icon.do.not.disturb.off:before { content: '\\e643'}\ni.icon.do.not.disturb.on:before { content: '\\e644'}\ni.icon.dock:before { content: '\\e30e'}\ni.icon.domain:before { content: '\\e7ee'}\ni.icon.done:before { content: '\\e876'}\ni.icon.done.all:before { content: '\\e877'}\ni.icon.donut.large:before { content: '\\e917'}\ni.icon.donut.small:before { content: '\\e918'}\ni.icon.drafts:before { content: '\\e151'}\ni.icon.drag.handle:before { content: '\\e25d'}\ni.icon.drive.eta:before { content: '\\e613'}\ni.icon.dvr:before { content: '\\e1b2'}\ni.icon.edit:before { content: '\\e3c9'}\ni.icon.edit.location:before { content: '\\e568'}\ni.icon.eject:before { content: '\\e8fb'}\ni.icon.email:before { content: '\\e0be'}\ni.icon.enhanced.encryption:before { content: '\\e63f'}\ni.icon.equalizer:before { content: '\\e01d'}\ni.icon.error:before { content: '\\e000'}\ni.icon.error.outline:before { content: '\\e001'}\ni.icon.euro.symbol:before { content: '\\e926'}\ni.icon.ev.station:before { content: '\\e56d'}\ni.icon.event:before { content: '\\e878'}\ni.icon.event.available:before { content: '\\e614'}\ni.icon.event.busy:before { content: '\\e615'}\ni.icon.event.note:before { content: '\\e616'}\ni.icon.event.seat:before { content: '\\e903'}\ni.icon.exit.to.app:before { content: '\\e879'}\ni.icon.expand.less:before { content: '\\e5ce'}\ni.icon.expand.more:before { content: '\\e5cf'}\ni.icon.explicit:before { content: '\\e01e'}\ni.icon.explore:before { content: '\\e87a'}\ni.icon.exposure:before { content: '\\e3ca'}\ni.icon.exposure.neg.1:before { content: '\\e3cb'}\ni.icon.exposure.neg.2:before { content: '\\e3cc'}\ni.icon.exposure.plus.1:before { content: '\\e3cd'}\ni.icon.exposure.plus.2:before { content: '\\e3ce'}\ni.icon.exposure.zero:before { content: '\\e3cf'}\ni.icon.extension:before { content: '\\e87b'}\ni.icon.face:before { content: '\\e87c'}\ni.icon.fast.forward:before { content: '\\e01f'}\ni.icon.fast.rewind:before { content: '\\e020'}\ni.icon.favorite:before { content: '\\e87d'}\ni.icon.favorite.border:before { content: '\\e87e'}\ni.icon.featured.play.list:before { content: '\\e06d'}\ni.icon.featured.video:before { content: '\\e06e'}\ni.icon.feedback:before { content: '\\e87f'}\ni.icon.fiber.dvr:before { content: '\\e05d'}\ni.icon.fiber.manual.record:before { content: '\\e061'}\ni.icon.fiber.new:before { content: '\\e05e'}\ni.icon.fiber.pin:before { content: '\\e06a'}\ni.icon.fiber.smart.record:before { content: '\\e062'}\ni.icon.file.download:before { content: '\\e2c4'}\ni.icon.file.upload:before { content: '\\e2c6'}\ni.icon.filter:before { content: '\\e3d3'}\ni.icon.filter.1:before { content: '\\e3d0'}\ni.icon.filter.2:before { content: '\\e3d1'}\ni.icon.filter.3:before { content: '\\e3d2'}\ni.icon.filter.4:before { content: '\\e3d4'}\ni.icon.filter.5:before { content: '\\e3d5'}\ni.icon.filter.6:before { content: '\\e3d6'}\ni.icon.filter.7:before { content: '\\e3d7'}\ni.icon.filter.8:before { content: '\\e3d8'}\ni.icon.filter.9:before { content: '\\e3d9'}\ni.icon.filter.9.plus:before { content: '\\e3da'}\ni.icon.filter.b.and.w:before { content: '\\e3db'}\ni.icon.filter.center.focus:before { content: '\\e3dc'}\ni.icon.filter.drama:before { content: '\\e3dd'}\ni.icon.filter.frames:before { content: '\\e3de'}\ni.icon.filter.hdr:before { content: '\\e3df'}\ni.icon.filter.list:before { content: '\\e152'}\ni.icon.filter.none:before { content: '\\e3e0'}\ni.icon.filter.tilt.shift:before { content: '\\e3e2'}\ni.icon.filter.vintage:before { content: '\\e3e3'}\ni.icon.find.in.page:before { content: '\\e880'}\ni.icon.find.replace:before { content: '\\e881'}\ni.icon.fingerprint:before { content: '\\e90d'}\ni.icon.first.page:before { content: '\\e5dc'}\ni.icon.fitness.center:before { content: '\\eb43'}\ni.icon.flag:before { content: '\\e153'}\ni.icon.flare:before { content: '\\e3e4'}\ni.icon.flash.auto:before { content: '\\e3e5'}\ni.icon.flash.off:before { content: '\\e3e6'}\ni.icon.flash.on:before { content: '\\e3e7'}\ni.icon.flight:before { content: '\\e539'}\ni.icon.flight.land:before { content: '\\e904'}\ni.icon.flight.takeoff:before { content: '\\e905'}\ni.icon.flip:before { content: '\\e3e8'}\ni.icon.flip.to.back:before { content: '\\e882'}\ni.icon.flip.to.front:before { content: '\\e883'}\ni.icon.folder:before { content: '\\e2c7'}\ni.icon.folder.open:before { content: '\\e2c8'}\ni.icon.folder.shared:before { content: '\\e2c9'}\ni.icon.folder.special:before { content: '\\e617'}\ni.icon.font.download:before { content: '\\e167'}\ni.icon.format.align.center:before { content: '\\e234'}\ni.icon.format.align.justify:before { content: '\\e235'}\ni.icon.format.align.left:before { content: '\\e236'}\ni.icon.format.align.right:before { content: '\\e237'}\ni.icon.format.bold:before { content: '\\e238'}\ni.icon.format.clear:before { content: '\\e239'}\ni.icon.format.color.fill:before { content: '\\e23a'}\ni.icon.format.color.reset:before { content: '\\e23b'}\ni.icon.format.color.text:before { content: '\\e23c'}\ni.icon.format.indent.decrease:before { content: '\\e23d'}\ni.icon.format.indent.increase:before { content: '\\e23e'}\ni.icon.format.italic:before { content: '\\e23f'}\ni.icon.format.line.spacing:before { content: '\\e240'}\ni.icon.format.list.bulleted:before { content: '\\e241'}\ni.icon.format.list.numbered:before { content: '\\e242'}\ni.icon.format.paint:before { content: '\\e243'}\ni.icon.format.quote:before { content: '\\e244'}\ni.icon.format.shapes:before { content: '\\e25e'}\ni.icon.format.size:before { content: '\\e245'}\ni.icon.format.strikethrough:before { content: '\\e246'}\ni.icon.format.textdirection.l.to.r:before { content: '\\e247'}\ni.icon.format.textdirection.r.to.l:before { content: '\\e248'}\ni.icon.format.underlined:before { content: '\\e249'}\ni.icon.forum:before { content: '\\e0bf'}\ni.icon.forward:before { content: '\\e154'}\ni.icon.forward.ten:before { content: '\\e056'}\ni.icon.forward.thirty:before { content: '\\e057'}\ni.icon.forward.five:before { content: '\\e058'}\ni.icon.free.breakfast:before { content: '\\eb44'}\ni.icon.fullscreen:before { content: '\\e5d0'}\ni.icon.fullscreen.exit:before { content: '\\e5d1'}\ni.icon.functions:before { content: '\\e24a'}\ni.icon.g.translate:before { content: '\\e927'}\ni.icon.gamepad:before { content: '\\e30f'}\ni.icon.games:before { content: '\\e021'}\ni.icon.gavel:before { content: '\\e90e'}\ni.icon.gesture:before { content: '\\e155'}\ni.icon.get.app:before { content: '\\e884'}\ni.icon.gif:before { content: '\\e908'}\ni.icon.golf.course:before { content: '\\eb45'}\ni.icon.gps.fixed:before { content: '\\e1b3'}\ni.icon.gps.not.fixed:before { content: '\\e1b4'}\ni.icon.gps.off:before { content: '\\e1b5'}\ni.icon.grade:before { content: '\\e885'}\ni.icon.gradient:before { content: '\\e3e9'}\ni.icon.grain:before { content: '\\e3ea'}\ni.icon.graphic.eq:before { content: '\\e1b8'}\ni.icon.grid.off:before { content: '\\e3eb'}\ni.icon.grid.on:before { content: '\\e3ec'}\ni.icon.group:before { content: '\\e7ef'}\ni.icon.group.add:before { content: '\\e7f0'}\ni.icon.group.work:before { content: '\\e886'}\ni.icon.hd:before { content: '\\e052'}\ni.icon.hdr.off:before { content: '\\e3ed'}\ni.icon.hdr.on:before { content: '\\e3ee'}\ni.icon.hdr.strong:before { content: '\\e3f1'}\ni.icon.hdr.weak:before { content: '\\e3f2'}\ni.icon.headset:before { content: '\\e310'}\ni.icon.headset.mic:before { content: '\\e311'}\ni.icon.healing:before { content: '\\e3f3'}\ni.icon.hearing:before { content: '\\e023'}\ni.icon.help:before { content: '\\e887'}\ni.icon.help.outline:before { content: '\\e8fd'}\ni.icon.high.quality:before { content: '\\e024'}\ni.icon.highlight:before { content: '\\e25f'}\ni.icon.highlight.off:before { content: '\\e888'}\ni.icon.history:before { content: '\\e889'}\ni.icon.home:before { content: '\\e88a'}\ni.icon.hot.tub:before { content: '\\eb46'}\ni.icon.hotel:before { content: '\\e53a'}\ni.icon.hourglass.empty:before { content: '\\e88b'}\ni.icon.hourglass.full:before { content: '\\e88c'}\ni.icon.http:before { content: '\\e902'}\ni.icon.https:before { content: '\\e88d'}\ni.icon.image:before { content: '\\e3f4'}\ni.icon.image.aspect.ratio:before { content: '\\e3f5'}\ni.icon.import.contacts:before { content: '\\e0e0'}\ni.icon.import.export:before { content: '\\e0c3'}\ni.icon.important.devices:before { content: '\\e912'}\ni.icon.inbox:before { content: '\\e156'}\ni.icon.indeterminate.check.box:before { content: '\\e909'}\ni.icon.info:before { content: '\\e88e'}\ni.icon.info.outline:before { content: '\\e88f'}\ni.icon.input:before { content: '\\e890'}\ni.icon.insert.chart:before { content: '\\e24b'}\ni.icon.insert.comment:before { content: '\\e24c'}\ni.icon.insert.drive.file:before { content: '\\e24d'}\ni.icon.insert.emoticon:before { content: '\\e24e'}\ni.icon.insert.invitation:before { content: '\\e24f'}\ni.icon.insert.link:before { content: '\\e250'}\ni.icon.insert.photo:before { content: '\\e251'}\ni.icon.invert.colors:before { content: '\\e891'}\ni.icon.invert.colors.off:before { content: '\\e0c4'}\ni.icon.iso:before { content: '\\e3f6'}\ni.icon.keyboard:before { content: '\\e312'}\ni.icon.keyboard.arrow.down:before { content: '\\e313'}\ni.icon.keyboard.arrow.left:before { content: '\\e314'}\ni.icon.keyboard.arrow.right:before { content: '\\e315'}\ni.icon.keyboard.arrow.up:before { content: '\\e316'}\ni.icon.keyboard.backspace:before { content: '\\e317'}\ni.icon.keyboard.capslock:before { content: '\\e318'}\ni.icon.keyboard.hide:before { content: '\\e31a'}\ni.icon.keyboard.return:before { content: '\\e31b'}\ni.icon.keyboard.tab:before { content: '\\e31c'}\ni.icon.keyboard.voice:before { content: '\\e31d'}\ni.icon.kitchen:before { content: '\\eb47'}\ni.icon.label:before { content: '\\e892'}\ni.icon.label.outline:before { content: '\\e893'}\ni.icon.landscape:before { content: '\\e3f7'}\ni.icon.language:before { content: '\\e894'}\ni.icon.laptop:before { content: '\\e31e'}\ni.icon.laptop.chromebook:before { content: '\\e31f'}\ni.icon.laptop.mac:before { content: '\\e320'}\ni.icon.laptop.windows:before { content: '\\e321'}\ni.icon.last.page:before { content: '\\e5dd'}\ni.icon.launch:before { content: '\\e895'}\ni.icon.layers:before { content: '\\e53b'}\ni.icon.layers.clear:before { content: '\\e53c'}\ni.icon.leak.add:before { content: '\\e3f8'}\ni.icon.leak.remove:before { content: '\\e3f9'}\ni.icon.lens:before { content: '\\e3fa'}\ni.icon.library.add:before { content: '\\e02e'}\ni.icon.library.books:before { content: '\\e02f'}\ni.icon.library.music:before { content: '\\e030'}\ni.icon.lightbulb.outline:before { content: '\\e90f'}\ni.icon.line.style:before { content: '\\e919'}\ni.icon.line.weight:before { content: '\\e91a'}\ni.icon.linear.scale:before { content: '\\e260'}\ni.icon.link:before { content: '\\e157'}\ni.icon.linked.camera:before { content: '\\e438'}\ni.icon.list:before { content: '\\e896'}\ni.icon.live.help:before { content: '\\e0c6'}\ni.icon.live.tv:before { content: '\\e639'}\ni.icon.local.activity:before { content: '\\e53f'}\ni.icon.local.airport:before { content: '\\e53d'}\ni.icon.local.atm:before { content: '\\e53e'}\ni.icon.local.bar:before { content: '\\e540'}\ni.icon.local.cafe:before { content: '\\e541'}\ni.icon.local.car.wash:before { content: '\\e542'}\ni.icon.local.convenience.store:before { content: '\\e543'}\ni.icon.local.dining:before { content: '\\e556'}\ni.icon.local.drink:before { content: '\\e544'}\ni.icon.local.florist:before { content: '\\e545'}\ni.icon.local.gas.station:before { content: '\\e546'}\ni.icon.local.grocery.store:before { content: '\\e547'}\ni.icon.local.hospital:before { content: '\\e548'}\ni.icon.local.hotel:before { content: '\\e549'}\ni.icon.local.laundry.service:before { content: '\\e54a'}\ni.icon.local.library:before { content: '\\e54b'}\ni.icon.local.mall:before { content: '\\e54c'}\ni.icon.local.movies:before { content: '\\e54d'}\ni.icon.local.offer:before { content: '\\e54e'}\ni.icon.local.parking:before { content: '\\e54f'}\ni.icon.local.pharmacy:before { content: '\\e550'}\ni.icon.local.phone:before { content: '\\e551'}\ni.icon.local.pizza:before { content: '\\e552'}\ni.icon.local.play:before { content: '\\e553'}\ni.icon.local.post.office:before { content: '\\e554'}\ni.icon.local.printshop:before { content: '\\e555'}\ni.icon.local.see:before { content: '\\e557'}\ni.icon.local.shipping:before { content: '\\e558'}\ni.icon.local.taxi:before { content: '\\e559'}\ni.icon.location.city:before { content: '\\e7f1'}\ni.icon.location.disabled:before { content: '\\e1b6'}\ni.icon.location.off:before { content: '\\e0c7'}\ni.icon.location.on:before { content: '\\e0c8'}\ni.icon.location.searching:before { content: '\\e1b7'}\ni.icon.lock:before { content: '\\e897'}\ni.icon.lock.open:before { content: '\\e898'}\ni.icon.lock.outline:before { content: '\\e899'}\ni.icon.looks:before { content: '\\e3fc'}\ni.icon.looks.3:before { content: '\\e3fb'}\ni.icon.looks.4:before { content: '\\e3fd'}\ni.icon.looks.5:before { content: '\\e3fe'}\ni.icon.looks.6:before { content: '\\e3ff'}\ni.icon.looks.one:before { content: '\\e400'}\ni.icon.looks.two:before { content: '\\e401'}\ni.icon.loop:before { content: '\\e028'}\ni.icon.loupe:before { content: '\\e402'}\ni.icon.low.priority:before { content: '\\e16d'}\ni.icon.loyalty:before { content: '\\e89a'}\ni.icon.mail:before { content: '\\e158'}\ni.icon.mail.outline:before { content: '\\e0e1'}\ni.icon.map:before { content: '\\e55b'}\ni.icon.markunread:before { content: '\\e159'}\ni.icon.markunread.mailbox:before { content: '\\e89b'}\ni.icon.memory:before { content: '\\e322'}\ni.icon.menu:before { content: '\\e5d2'}\ni.icon.merge.type:before { content: '\\e252'}\ni.icon.message:before { content: '\\e0c9'}\ni.icon.mic:before { content: '\\e029'}\ni.icon.mic.none:before { content: '\\e02a'}\ni.icon.mic.off:before { content: '\\e02b'}\ni.icon.mms:before { content: '\\e618'}\ni.icon.mode.comment:before { content: '\\e253'}\ni.icon.mode.edit:before { content: '\\e254'}\ni.icon.monetization.on:before { content: '\\e263'}\ni.icon.money.off:before { content: '\\e25c'}\ni.icon.monochrome.photos:before { content: '\\e403'}\ni.icon.mood:before { content: '\\e7f2'}\ni.icon.mood.bad:before { content: '\\e7f3'}\ni.icon.more:before { content: '\\e619'}\ni.icon.more.horiz:before { content: '\\e5d3'}\ni.icon.more.vert:before { content: '\\e5d4'}\ni.icon.motorcycle:before { content: '\\e91b'}\ni.icon.mouse:before { content: '\\e323'}\ni.icon.move.to.inbox:before { content: '\\e168'}\ni.icon.movie:before { content: '\\e02c'}\ni.icon.movie.creation:before { content: '\\e404'}\ni.icon.movie.filter:before { content: '\\e43a'}\ni.icon.multiline.chart:before { content: '\\e6df'}\ni.icon.music.note:before { content: '\\e405'}\ni.icon.music.video:before { content: '\\e063'}\ni.icon.my.location:before { content: '\\e55c'}\ni.icon.nature:before { content: '\\e406'}\ni.icon.nature.people:before { content: '\\e407'}\ni.icon.navigate.before:before { content: '\\e408'}\ni.icon.navigate.next:before { content: '\\e409'}\ni.icon.navigation:before { content: '\\e55d'}\ni.icon.near.me:before { content: '\\e569'}\ni.icon.network.cell:before { content: '\\e1b9'}\ni.icon.network.check:before { content: '\\e640'}\ni.icon.network.locked:before { content: '\\e61a'}\ni.icon.network.wifi:before { content: '\\e1ba'}\ni.icon.new.releases:before { content: '\\e031'}\ni.icon.next.week:before { content: '\\e16a'}\ni.icon.nfc:before { content: '\\e1bb'}\ni.icon.no.encryption:before { content: '\\e641'}\ni.icon.no.sim:before { content: '\\e0cc'}\ni.icon.not.interested:before { content: '\\e033'}\ni.icon.note:before { content: '\\e06f'}\ni.icon.note.add:before { content: '\\e89c'}\ni.icon.notifications:before { content: '\\e7f4'}\ni.icon.notifications.active:before { content: '\\e7f7'}\ni.icon.notifications.none:before { content: '\\e7f5'}\ni.icon.notifications.off:before { content: '\\e7f6'}\ni.icon.notifications.paused:before { content: '\\e7f8'}\ni.icon.offline.pin:before { content: '\\e90a'}\ni.icon.ondemand.video:before { content: '\\e63a'}\ni.icon.opacity:before { content: '\\e91c'}\ni.icon.open.in.browser:before { content: '\\e89d'}\ni.icon.open.in.new:before { content: '\\e89e'}\ni.icon.open.with:before { content: '\\e89f'}\ni.icon.pages:before { content: '\\e7f9'}\ni.icon.pageview:before { content: '\\e8a0'}\ni.icon.palette:before { content: '\\e40a'}\ni.icon.pan.tool:before { content: '\\e925'}\ni.icon.panorama:before { content: '\\e40b'}\ni.icon.panorama.fish.eye:before { content: '\\e40c'}\ni.icon.panorama.horizontal:before { content: '\\e40d'}\ni.icon.panorama.vertical:before { content: '\\e40e'}\ni.icon.panorama.wide.angle:before { content: '\\e40f'}\ni.icon.party.mode:before { content: '\\e7fa'}\ni.icon.pause:before { content: '\\e034'}\ni.icon.pause.circle.filled:before { content: '\\e035'}\ni.icon.pause.circle.outline:before { content: '\\e036'}\ni.icon.payment:before { content: '\\e8a1'}\ni.icon.people:before { content: '\\e7fb'}\ni.icon.people.outline:before { content: '\\e7fc'}\ni.icon.perm.camera.mic:before { content: '\\e8a2'}\ni.icon.perm.contact.calendar:before { content: '\\e8a3'}\ni.icon.perm.data.setting:before { content: '\\e8a4'}\ni.icon.perm.device.information:before { content: '\\e8a5'}\ni.icon.perm.identity:before { content: '\\e8a6'}\ni.icon.perm.media:before { content: '\\e8a7'}\ni.icon.perm.phone.msg:before { content: '\\e8a8'}\ni.icon.perm.scan.wifi:before { content: '\\e8a9'}\ni.icon.person:before { content: '\\e7fd'}\ni.icon.person.add:before { content: '\\e7fe'}\ni.icon.person.outline:before { content: '\\e7ff'}\ni.icon.person.pin:before { content: '\\e55a'}\ni.icon.person.pin.circle:before { content: '\\e56a'}\ni.icon.personal.video:before { content: '\\e63b'}\ni.icon.pets:before { content: '\\e91d'}\ni.icon.phone:before { content: '\\e0cd'}\ni.icon.phone.android:before { content: '\\e324'}\ni.icon.phone.bluetooth.speaker:before { content: '\\e61b'}\ni.icon.phone.forwarded:before { content: '\\e61c'}\ni.icon.phone.in.talk:before { content: '\\e61d'}\ni.icon.phone.iphone:before { content: '\\e325'}\ni.icon.phone.locked:before { content: '\\e61e'}\ni.icon.phone.missed:before { content: '\\e61f'}\ni.icon.phone.paused:before { content: '\\e620'}\ni.icon.phonelink:before { content: '\\e326'}\ni.icon.phonelink.erase:before { content: '\\e0db'}\ni.icon.phonelink.lock:before { content: '\\e0dc'}\ni.icon.phonelink.off:before { content: '\\e327'}\ni.icon.phonelink.ring:before { content: '\\e0dd'}\ni.icon.phonelink.setup:before { content: '\\e0de'}\ni.icon.photo:before { content: '\\e410'}\ni.icon.photo.album:before { content: '\\e411'}\ni.icon.photo.camera:before { content: '\\e412'}\ni.icon.photo.filter:before { content: '\\e43b'}\ni.icon.photo.library:before { content: '\\e413'}\ni.icon.photo.size.select.actual:before { content: '\\e432'}\ni.icon.photo.size.select.large:before { content: '\\e433'}\ni.icon.photo.size.select.small:before { content: '\\e434'}\ni.icon.picture.as.pdf:before { content: '\\e415'}\ni.icon.picture.in.picture:before { content: '\\e8aa'}\ni.icon.picture.in.picture.alt:before { content: '\\e911'}\ni.icon.pie.chart:before { content: '\\e6c4'}\ni.icon.pie.chart.outlined:before { content: '\\e6c5'}\ni.icon.pin.drop:before { content: '\\e55e'}\ni.icon.place:before { content: '\\e55f'}\ni.icon.play.arrow:before { content: '\\e037'}\ni.icon.play.circle.filled:before { content: '\\e038'}\ni.icon.play.circle.outline:before { content: '\\e039'}\ni.icon.play.for.work:before { content: '\\e906'}\ni.icon.playlist.add:before { content: '\\e03b'}\ni.icon.playlist.add.check:before { content: '\\e065'}\ni.icon.playlist.play:before { content: '\\e05f'}\ni.icon.plus.one:before { content: '\\e800'}\ni.icon.poll:before { content: '\\e801'}\ni.icon.polymer:before { content: '\\e8ab'}\ni.icon.pool:before { content: '\\eb48'}\ni.icon.portable.wifi.off:before { content: '\\e0ce'}\ni.icon.portrait:before { content: '\\e416'}\ni.icon.power:before { content: '\\e63c'}\ni.icon.power.input:before { content: '\\e336'}\ni.icon.power.settings.new:before { content: '\\e8ac'}\ni.icon.pregnant.woman:before { content: '\\e91e'}\ni.icon.present.to.all:before { content: '\\e0df'}\ni.icon.print:before { content: '\\e8ad'}\ni.icon.priority.high:before { content: '\\e645'}\ni.icon.public:before { content: '\\e80b'}\ni.icon.publish:before { content: '\\e255'}\ni.icon.query.builder:before { content: '\\e8ae'}\ni.icon.question.answer:before { content: '\\e8af'}\ni.icon.queue:before { content: '\\e03c'}\ni.icon.queue.music:before { content: '\\e03d'}\ni.icon.queue.play.next:before { content: '\\e066'}\ni.icon.radio:before { content: '\\e03e'}\ni.icon.radio.button.checked:before { content: '\\e837'}\ni.icon.radio.button.unchecked:before { content: '\\e836'}\ni.icon.rate.review:before { content: '\\e560'}\ni.icon.receipt:before { content: '\\e8b0'}\ni.icon.recent.actors:before { content: '\\e03f'}\ni.icon.record.voice.over:before { content: '\\e91f'}\ni.icon.redeem:before { content: '\\e8b1'}\ni.icon.redo:before { content: '\\e15a'}\ni.icon.refresh:before { content: '\\e5d5'}\ni.icon.remove:before { content: '\\e15b'}\ni.icon.remove.circle:before { content: '\\e15c'}\ni.icon.remove.circle.outline:before { content: '\\e15d'}\ni.icon.remove.from.queue:before { content: '\\e067'}\ni.icon.remove.red.eye:before { content: '\\e417'}\ni.icon.remove.shopping.cart:before { content: '\\e928'}\ni.icon.reorder:before { content: '\\e8fe'}\ni.icon.repeat:before { content: '\\e040'}\ni.icon.repeat.one:before { content: '\\e041'}\ni.icon.replay:before { content: '\\e042'}\ni.icon.replay.ten:before { content: '\\e059'}\ni.icon.replay.thirty:before { content: '\\e05a'}\ni.icon.replay.five:before { content: '\\e05b'}\ni.icon.reply:before { content: '\\e15e'}\ni.icon.reply.all:before { content: '\\e15f'}\ni.icon.report:before { content: '\\e160'}\ni.icon.report.problem:before { content: '\\e8b2'}\ni.icon.restaurant:before { content: '\\e56c'}\ni.icon.restaurant.menu:before { content: '\\e561'}\ni.icon.restore:before { content: '\\e8b3'}\ni.icon.restore.page:before { content: '\\e929'}\ni.icon.ring.volume:before { content: '\\e0d1'}\ni.icon.room:before { content: '\\e8b4'}\ni.icon.room.service:before { content: '\\eb49'}\ni.icon.rotate.ninety.degrees.ccw:before { content: '\\e418'}\ni.icon.rotate.left:before { content: '\\e419'}\ni.icon.rotate.right:before { content: '\\e41a'}\ni.icon.rounded.corner:before { content: '\\e920'}\ni.icon.router:before { content: '\\e328'}\ni.icon.rowing:before { content: '\\e921'}\ni.icon.rss.feed:before { content: '\\e0e5'}\ni.icon.rv.hookup:before { content: '\\e642'}\ni.icon.satellite:before { content: '\\e562'}\ni.icon.save:before { content: '\\e161'}\ni.icon.scanner:before { content: '\\e329'}\ni.icon.schedule:before { content: '\\e8b5'}\ni.icon.school:before { content: '\\e80c'}\ni.icon.screen.lock.landscape:before { content: '\\e1be'}\ni.icon.screen.lock.portrait:before { content: '\\e1bf'}\ni.icon.screen.lock.rotation:before { content: '\\e1c0'}\ni.icon.screen.rotation:before { content: '\\e1c1'}\ni.icon.screen.share:before { content: '\\e0e2'}\ni.icon.sd.card:before { content: '\\e623'}\ni.icon.sd.storage:before { content: '\\e1c2'}\ni.icon.search:before { content: '\\e8b6'}\ni.icon.security:before { content: '\\e32a'}\ni.icon.select.all:before { content: '\\e162'}\ni.icon.send:before { content: '\\e163'}\ni.icon.sentiment.dissatisfied:before { content: '\\e811'}\ni.icon.sentiment.neutral:before { content: '\\e812'}\ni.icon.sentiment.satisfied:before { content: '\\e813'}\ni.icon.sentiment.very.dissatisfied:before { content: '\\e814'}\ni.icon.sentiment.very.satisfied:before { content: '\\e815'}\ni.icon.settings:before { content: '\\e8b8'}\ni.icon.settings.applications:before { content: '\\e8b9'}\ni.icon.settings.backup.restore:before { content: '\\e8ba'}\ni.icon.settings.bluetooth:before { content: '\\e8bb'}\ni.icon.settings.brightness:before { content: '\\e8bd'}\ni.icon.settings.cell:before { content: '\\e8bc'}\ni.icon.settings.ethernet:before { content: '\\e8be'}\ni.icon.settings.input.antenna:before { content: '\\e8bf'}\ni.icon.settings.input.component:before { content: '\\e8c0'}\ni.icon.settings.input.composite:before { content: '\\e8c1'}\ni.icon.settings.input.hdmi:before { content: '\\e8c2'}\ni.icon.settings.input.svideo:before { content: '\\e8c3'}\ni.icon.settings.overscan:before { content: '\\e8c4'}\ni.icon.settings.phone:before { content: '\\e8c5'}\ni.icon.settings.power:before { content: '\\e8c6'}\ni.icon.settings.remote:before { content: '\\e8c7'}\ni.icon.settings.system.daydream:before { content: '\\e1c3'}\ni.icon.settings.voice:before { content: '\\e8c8'}\ni.icon.share:before { content: '\\e80d'}\ni.icon.shop:before { content: '\\e8c9'}\ni.icon.shop.two:before { content: '\\e8ca'}\ni.icon.shopping.basket:before { content: '\\e8cb'}\ni.icon.shopping.cart:before { content: '\\e8cc'}\ni.icon.short.text:before { content: '\\e261'}\ni.icon.show.chart:before { content: '\\e6e1'}\ni.icon.shuffle:before { content: '\\e043'}\ni.icon.signal.cellular.four.bar:before { content: '\\e1c8'}\ni.icon.signal.cellular.connected.no.internet.4.bar:before { content: '\\e1cd'}\ni.icon.signal.cellular.no.sim:before { content: '\\e1ce'}\ni.icon.signal.cellular.null:before { content: '\\e1cf'}\ni.icon.signal.cellular.off:before { content: '\\e1d0'}\ni.icon.signal.wifi.four.bar:before { content: '\\e1d8'}\ni.icon.signal.wifi.four.bar.lock:before { content: '\\e1d9'}\ni.icon.signal.wifi.off:before { content: '\\e1da'}\ni.icon.sim.card:before { content: '\\e32b'}\ni.icon.sim.card.alert:before { content: '\\e624'}\ni.icon.skip.next:before { content: '\\e044'}\ni.icon.skip.previous:before { content: '\\e045'}\ni.icon.slideshow:before { content: '\\e41b'}\ni.icon.slow.motion.video:before { content: '\\e068'}\ni.icon.smartphone:before { content: '\\e32c'}\ni.icon.smoke.free:before { content: '\\eb4a'}\ni.icon.smoking.rooms:before { content: '\\eb4b'}\ni.icon.sms:before { content: '\\e625'}\ni.icon.sms.failed:before { content: '\\e626'}\ni.icon.snooze:before { content: '\\e046'}\ni.icon.sort:before { content: '\\e164'}\ni.icon.sort.by.alpha:before { content: '\\e053'}\ni.icon.spa:before { content: '\\eb4c'}\ni.icon.space.bar:before { content: '\\e256'}\ni.icon.speaker:before { content: '\\e32d'}\ni.icon.speaker.group:before { content: '\\e32e'}\ni.icon.speaker.notes:before { content: '\\e8cd'}\ni.icon.speaker.notes.off:before { content: '\\e92a'}\ni.icon.speaker.phone:before { content: '\\e0d2'}\ni.icon.spellcheck:before { content: '\\e8ce'}\ni.icon.star:before { content: '\\e838'}\ni.icon.star.border:before { content: '\\e83a'}\ni.icon.star.half:before { content: '\\e839'}\ni.icon.stars:before { content: '\\e8d0'}\ni.icon.stay.current.landscape:before { content: '\\e0d3'}\ni.icon.stay.current.portrait:before { content: '\\e0d4'}\ni.icon.stay.primary.landscape:before { content: '\\e0d5'}\ni.icon.stay.primary.portrait:before { content: '\\e0d6'}\ni.icon.stop:before { content: '\\e047'}\ni.icon.stop.screen.share:before { content: '\\e0e3'}\ni.icon.storage:before { content: '\\e1db'}\ni.icon.store:before { content: '\\e8d1'}\ni.icon.store.mall.directory:before { content: '\\e563'}\ni.icon.straighten:before { content: '\\e41c'}\ni.icon.streetview:before { content: '\\e56e'}\ni.icon.strikethrough.s:before { content: '\\e257'}\ni.icon.style:before { content: '\\e41d'}\ni.icon.subdirectory.arrow.left:before { content: '\\e5d9'}\ni.icon.subdirectory.arrow.right:before { content: '\\e5da'}\ni.icon.subject:before { content: '\\e8d2'}\ni.icon.subscriptions:before { content: '\\e064'}\ni.icon.subtitles:before { content: '\\e048'}\ni.icon.subway:before { content: '\\e56f'}\ni.icon.supervisor.account:before { content: '\\e8d3'}\ni.icon.surround.sound:before { content: '\\e049'}\ni.icon.swap.calls:before { content: '\\e0d7'}\ni.icon.swap.horiz:before { content: '\\e8d4'}\ni.icon.swap.vert:before { content: '\\e8d5'}\ni.icon.swap.vertical.circle:before { content: '\\e8d6'}\ni.icon.switch.camera:before { content: '\\e41e'}\ni.icon.switch.video:before { content: '\\e41f'}\ni.icon.sync:before { content: '\\e627'}\ni.icon.sync.disabled:before { content: '\\e628'}\ni.icon.sync.problem:before { content: '\\e629'}\ni.icon.system.update:before { content: '\\e62a'}\ni.icon.system.update.alt:before { content: '\\e8d7'}\ni.icon.tab:before { content: '\\e8d8'}\ni.icon.tab.unselected:before { content: '\\e8d9'}\ni.icon.tablet:before { content: '\\e32f'}\ni.icon.tablet.android:before { content: '\\e330'}\ni.icon.tablet.mac:before { content: '\\e331'}\ni.icon.tag.faces:before { content: '\\e420'}\ni.icon.tap.and.play:before { content: '\\e62b'}\ni.icon.terrain:before { content: '\\e564'}\ni.icon.text.fields:before { content: '\\e262'}\ni.icon.text.format:before { content: '\\e165'}\ni.icon.textsms:before { content: '\\e0d8'}\ni.icon.texture:before { content: '\\e421'}\ni.icon.theaters:before { content: '\\e8da'}\ni.icon.thumb.down:before { content: '\\e8db'}\ni.icon.thumb.up:before { content: '\\e8dc'}\ni.icon.thumbs.up.down:before { content: '\\e8dd'}\ni.icon.time.to.leave:before { content: '\\e62c'}\ni.icon.timelapse:before { content: '\\e422'}\ni.icon.timeline:before { content: '\\e922'}\ni.icon.timer:before { content: '\\e425'}\ni.icon.timer.ten:before { content: '\\e423'}\ni.icon.timer.three:before { content: '\\e424'}\ni.icon.timer.off:before { content: '\\e426'}\ni.icon.title:before { content: '\\e264'}\ni.icon.toc:before { content: '\\e8de'}\ni.icon.today:before { content: '\\e8df'}\ni.icon.toll:before { content: '\\e8e0'}\ni.icon.tonality:before { content: '\\e427'}\ni.icon.touch.app:before { content: '\\e913'}\ni.icon.toys:before { content: '\\e332'}\ni.icon.track.changes:before { content: '\\e8e1'}\ni.icon.traffic:before { content: '\\e565'}\ni.icon.train:before { content: '\\e570'}\ni.icon.tram:before { content: '\\e571'}\ni.icon.transfer.within.a.station:before { content: '\\e572'}\ni.icon.transform:before { content: '\\e428'}\ni.icon.translate:before { content: '\\e8e2'}\ni.icon.trending.down:before { content: '\\e8e3'}\ni.icon.trending.flat:before { content: '\\e8e4'}\ni.icon.trending.up:before { content: '\\e8e5'}\ni.icon.tune:before { content: '\\e429'}\ni.icon.turned.in:before { content: '\\e8e6'}\ni.icon.turned.in.not:before { content: '\\e8e7'}\ni.icon.tv:before { content: '\\e333'}\ni.icon.unarchive:before { content: '\\e169'}\ni.icon.undo:before { content: '\\e166'}\ni.icon.unfold.less:before { content: '\\e5d6'}\ni.icon.unfold.more:before { content: '\\e5d7'}\ni.icon.update:before { content: '\\e923'}\ni.icon.usb:before { content: '\\e1e0'}\ni.icon.verified.user:before { content: '\\e8e8'}\ni.icon.vertical.align.bottom:before { content: '\\e258'}\ni.icon.vertical.align.center:before { content: '\\e259'}\ni.icon.vertical.align.top:before { content: '\\e25a'}\ni.icon.vibration:before { content: '\\e62d'}\ni.icon.video.call:before { content: '\\e070'}\ni.icon.video.label:before { content: '\\e071'}\ni.icon.video.library:before { content: '\\e04a'}\ni.icon.videocam:before { content: '\\e04b'}\ni.icon.videocam.off:before { content: '\\e04c'}\ni.icon.videogame.asset:before { content: '\\e338'}\ni.icon.view.agenda:before { content: '\\e8e9'}\ni.icon.view.array:before { content: '\\e8ea'}\ni.icon.view.carousel:before { content: '\\e8eb'}\ni.icon.view.column:before { content: '\\e8ec'}\ni.icon.view.comfy:before { content: '\\e42a'}\ni.icon.view.compact:before { content: '\\e42b'}\ni.icon.view.day:before { content: '\\e8ed'}\ni.icon.view.headline:before { content: '\\e8ee'}\ni.icon.view.list:before { content: '\\e8ef'}\ni.icon.view.module:before { content: '\\e8f0'}\ni.icon.view.quilt:before { content: '\\e8f1'}\ni.icon.view.stream:before { content: '\\e8f2'}\ni.icon.view.week:before { content: '\\e8f3'}\ni.icon.vignette:before { content: '\\e435'}\ni.icon.visibility:before { content: '\\e8f4'}\ni.icon.visibility.off:before { content: '\\e8f5'}\ni.icon.voice.chat:before { content: '\\e62e'}\ni.icon.voicemail:before { content: '\\e0d9'}\ni.icon.volume.down:before { content: '\\e04d'}\ni.icon.volume.mute:before { content: '\\e04e'}\ni.icon.volume.off:before { content: '\\e04f'}\ni.icon.volume.up:before { content: '\\e050'}\ni.icon.vpn.key:before { content: '\\e0da'}\ni.icon.vpn.lock:before { content: '\\e62f'}\ni.icon.wallpaper:before { content: '\\e1bc'}\ni.icon.warning:before { content: '\\e002'}\ni.icon.watch:before { content: '\\e334'}\ni.icon.watch.later:before { content: '\\e924'}\ni.icon.wb.auto:before { content: '\\e42c'}\ni.icon.wb.cloudy:before { content: '\\e42d'}\ni.icon.wb.incandescent:before { content: '\\e42e'}\ni.icon.wb.iridescent:before { content: '\\e436'}\ni.icon.wb.sunny:before { content: '\\e430'}\ni.icon.wc:before { content: '\\e63d'}\ni.icon.web:before { content: '\\e051'}\ni.icon.web.asset:before { content: '\\e069'}\ni.icon.weekend:before { content: '\\e16b'}\ni.icon.whatshot:before { content: '\\e80e'}\ni.icon.widgets:before { content: '\\e1bd'}\ni.icon.wifi:before { content: '\\e63e'}\ni.icon.wifi.lock:before { content: '\\e1e1'}\ni.icon.wifi.tethering:before { content: '\\e1e2'}\ni.icon.work:before { content: '\\e8f9'}\ni.icon.wrap.text:before { content: '\\e25b'}\ni.icon.youtube.searched.for:before { content: '\\e8fa'}\ni.icon.zoom.in:before { content: '\\e8ff'}\ni.icon.zoom.out:before { content: '\\e900'}\ni.icon.zoom.out.map:before { content: '\\e56b'}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/elements/icon.variables",
    "content": "@fontPath  : '../../themes/material/assets/fonts';\n\n@width: 1em;\n@height: 1em;\n\n@small: 13px;\n@medium: 16px;\n@large: 18px;\n@big : 20px;\n@huge: 28px;\n@massive: 32px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/globals/site.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/material/globals/site.variables",
    "content": "/*******************************\n         Site Settings\n*******************************/\n\n/*-------------------\n       Fonts\n--------------------*/\n\n@headerFont        : 'Roboto', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n@pageFont          : 'Roboto', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n@googleFontName    : 'Roboto';\n\n/*-------------------\n      Base Sizes\n--------------------*/\n\n@emSize            : 14px;\n@fontSize          : 13px;\n\n/*--------------\n      Page\n---------------*/\n\n@pageBackground      : #F9F9F9;\n@lineHeight          : 1.33;\n@textColor           : #212121;\n\n/*--------------\n  Page Heading\n---------------*/\n\n@headerLineHeight : 1.33em;\n@headerFontWeight : 400;\n\n@h1               : 2.25rem;\n@h2               : 2rem;\n@h3               : 1.75rem;\n@h4               : 1.5rem;\n@h5               : 1.25rem;\n\n\n/*-------------------\n        Paths\n--------------------*/\n\n@imagePath : '../../themes/material/assets/images';\n@fontPath  : '../../themes/material/assets/fonts';\n\n/*--------------\n   Paragraphs\n---------------*/\n\n@paragraphLineHeight: 1.7em;\n\n/*-------------------\n      Site Colors\n--------------------*/\n\n/*---  Colors  ---*/\n@black            : #1B1C1D;\n@blue             : #2196F3;\n@green            : #4CAF50;\n@grey             : #9E9E9E;\n@orange           : #FF9800;\n@pink             : #E91E63;\n@purple           : #9C27B0;\n@red              : #F44336;\n@teal             : #1de9b6;\n@yellow           : #FFEB3B;\n\n/*---  Light Colors  ---*/\n@lightBlack       : #333333;\n@lightBlue        : #2979FF;\n@lightGreen       : #00E676;\n@lightOrange      : #FF9100;\n@lightPink        : #F50057;\n@lightPurple      : #D500F9;\n@lightRed         : #FF1744;\n@lightTeal        : #1DE9B6;\n@lightYellow      : #FFEA00;\n\n/*---   Neutrals  ---*/\n@fullBlack        : #000000;\n@darkGrey         : #AAAAAA;\n@lightGrey        : #DCDDDE;\n@offWhite         : #FAFAFA;\n@darkWhite        : #F0F0F0;\n@white            : #FFFFFF;\n\n/*-------------------\n    Brand Colors\n--------------------*/\n\n@primaryColor        : @blue;\n@secondaryColor      : @grey;\n\n@lightPrimaryColor   : @lightBlue;\n@lightSecondaryColor : @lightGrey;\n\n/*-------------------\n      Paragraph\n--------------------*/\n\n@paragraphMargin     : 0em 0em 1.53em;\n\n/*-------------------\n       Links\n--------------------*/\n\n@linkColor           : #009FDA;\n@linkUnderline       : none;\n@linkHoverColor      : lighten(@linkColor, 5);\n@linkHoverUnderline  : @linkUnderline;\n\n/*-------------------\n  Highlighted Text\n--------------------*/\n\n@highlightBackground : #009FDA;\n@highlightColor      : @white;\n\n/*-------------------\n       Accents\n--------------------*/\n\n/* 4px @ default em */\n@relativeBorderRadius: @relative4px;\n@absoluteBorderRadius: 4px;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/modules/dropdown.overrides",
    "content": "@import url(https://fonts.googleapis.com/css?family=Roboto:400,700);\n\n.ui.dropdown {\n  font-family: 'Roboto';\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/modules/dropdown.variables",
    "content": "/*******************************\n             Menu\n*******************************/\n\n@menuBorderRadius: @borderRadius;\n@menuBorderColor: #DADADA;\n@menuBoxShadow: 0px 2px 4px rgba(0, 0, 0, 0.2);\n\n@menuPadding: @relative8px 0em;\n@itemVerticalPadding: 1em;\n@itemHorizontalPadding: 1.5em;\n\n@menuHeaderFontSize: @small;\n@menuHeaderFontWeight: bold;\n@menuHeaderTextTransform: none;\n\n@selectionBorderEmWidth: 0em;\n@selectionItemDivider: none;\n\n@labelBoxShadow: none;"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/modules/modal.overrides",
    "content": "@import url(https://fonts.googleapis.com/css?family=Roboto);\n\n.ui.modal .header {\n  font-family: \"Roboto\", Arial, Sans-serif !important;\n  font-weight: 400 !important;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/material/modules/modal.variables",
    "content": "@boxShadow: 0px 10px 18px rgba(0, 0, 0, 0.22);\n@borderRadius: 0em;\n\n\n@headerBackground: @white;\n@headerVerticalPadding: 1.7142rem;\n@headerHorizontalPadding: 1.7142rem;\n@headerFontWeight: 400;\n@headerFontFamily: 'Roboto', \"Helvetica Neue\", Arial, sans-serif;\n@headerBorder: none;\n\n@contentPadding: 1rem 2rem 2rem;\n\n@actionBorder: none;\n@actionBackground: @white;"
  },
  {
    "path": "resources/assets/semantic/src/themes/pulsar/elements/loader.overrides",
    "content": "/*******************************\n         Theme Overrides\n*******************************/\n\n.ui.loader:after {\n  -webkit-animation: loader-pulsar 2s infinite linear;\n  animation: loader-pulsar 2s infinite linear;\n}\n\n@-webkit-keyframes loader-pulsar {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    opacity: 0;\n  }\n  20% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n  40% {\n    -webkit-transform: rotate(740deg);\n            transform: rotate(740deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: rotate(1120deg);\n            transform: rotate(1120deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: rotate(1440deg);\n            transform: rotate(1440deg);\n  }\n  100% {\n    -webkit-transform: rotate(1800deg);\n            transform: rotate(1800deg);\n    opacity: 0;\n  }\n}\n\n@keyframes loader-pulsar {\n  0% {\n    -webkit-transform: rotate(0deg);\n            transform: rotate(0deg);\n    opacity: 0;\n  }\n  20% {\n    -webkit-transform: rotate(360deg);\n            transform: rotate(360deg);\n  }\n  40% {\n    -webkit-transform: rotate(740deg);\n            transform: rotate(740deg);\n    opacity: 1;\n  }\n  60% {\n    -webkit-transform: rotate(1120deg);\n            transform: rotate(1120deg);\n    opacity: 1;\n  }\n  80% {\n    -webkit-transform: rotate(1440deg);\n            transform: rotate(1440deg);\n  }\n  100% {\n    -webkit-transform: rotate(1800deg);\n            transform: rotate(1800deg);\n    opacity: 0;\n  }\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/pulsar/elements/loader.variables",
    "content": "/*******************************\n             Loader\n*******************************/\n\n@loaderSpeed: 2s;\n@loaderLineColor: @primaryColor;\n@invertedLoaderLineColor: @lightPrimaryColor;\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/raised/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/raised/elements/button.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n\n@backgroundColor: #F8F8F8;\n@backgroundImage: linear-gradient(transparent, rgba(0, 0, 0, 0.05));\n@verticalAlign: middle;\n@borderRadius: 0.4em;\n@borderBoxShadowColor: @borderColor;\n\n/* Shadow */\n@shadowDistance: 0.3em;\n@verticalPadding: 1em;\n@horizontalPadding: 2em;\n\n/* transition box shadow as well */\n@transition:\n  opacity @defaultDuration @defaultEasing,\n  background-color @defaultDuration @defaultEasing,\n  box-shadow @defaultDuration @defaultEasing,\n  color @defaultDuration @defaultEasing,\n  background @defaultDuration @defaultEasing\n;"
  },
  {
    "path": "resources/assets/semantic/src/themes/resetcss/globals/reset.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n/**\n * Eric Meyer's Reset CSS v2.0 (http://meyerweb.com/eric/tools/css/reset/)\n * http://cssreset.com\n */\n\nhtml, body, div, span, applet, object, iframe,\nh1, h2, h3, h4, h5, h6, p, blockquote, pre,\na, abbr, acronym, address, big, cite, code,\ndel, dfn, em, img, ins, kbd, q, s, samp,\nsmall, strike, strong, sub, sup, tt, var,\nb, u, i, center,\ndl, dt, dd, ol, ul, li,\nfieldset, form, label, legend,\ntable, caption, tbody, tfoot, thead, tr, th, td,\narticle, aside, canvas, details, embed,\nfigure, figcaption, footer, header, hgroup,\nmenu, nav, output, ruby, section, summary,\ntime, mark, audio, video {\n  margin: 0;\n  padding: 0;\n  border: 0;\n  font-size: 100%;\n  font: inherit;\n  vertical-align: baseline;\n}\n/* HTML5 display-role reset for older browsers */\narticle, aside, details, figcaption, figure,\nfooter, header, hgroup, menu, nav, section {\n  display: block;\n}\nbody {\n  line-height: 1;\n}\nol, ul {\n  list-style: none;\n}\nblockquote, q {\n  quotes: none;\n}\nblockquote:before, blockquote:after,\nq:before, q:after {\n  content: '';\n  content: none;\n}\ntable {\n  border-collapse: collapse;\n  border-spacing: 0;\n}"
  },
  {
    "path": "resources/assets/semantic/src/themes/resetcss/globals/reset.variables",
    "content": "/*******************************\n             Reset\n*******************************/"
  },
  {
    "path": "resources/assets/semantic/src/themes/round/elements/button.overrides",
    "content": ""
  },
  {
    "path": "resources/assets/semantic/src/themes/round/elements/button.variables",
    "content": "/*******************************\n            Button\n*******************************/\n\n/*-------------------\n       Element\n--------------------*/\n@borderRadius: @circularRadius;\n@textTransform: uppercase;\n@backgroundColor: #FFFFFF;\n@backgroundImage: none;\n@fontWeight: bold;\n@textColor: rgba(0, 0, 0, 0.6);\n@boxShadow:\n  0px 0px 0px 2px rgba(0, 0, 0, 0.2) inset\n;\n\n/* Padding */\n@verticalPadding: 1.25em;\n@horizontalPadding: 3em;\n\n/* Icon */\n@iconOpacity: 0.8;\n@iconDistance: 0.4em;\n@iconTransition: opacity @defaultDuration @defaultEasing;\n@iconMargin: 0em @iconDistance 0em -(@iconDistance / 2);\n@iconVerticalAlign: top;\n\n/*-------------------\n        Group\n--------------------*/\n\n@verticalBoxShadow: 0px 0px 0px 1px @borderColor inset;\n\n\n/*-------------------\n        States\n--------------------*/\n\n@hoverBackgroundColor: #FAFAFA;\n@hoverBackgroundImage: none;\n@hoverBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.3) inset;\n\n@downBackgroundColor: #F0F0F0;\n@downBackgroundImage: none;\n@downBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.35) inset !important;\n\n@activeBackgroundColor: #DDDDDD;\n@activeBackgroundImage: none;\n@activeBoxShadow: 0px 0px 0px 2px rgba(0, 0, 0, 0.3) inset !important;\n\n@loadingBackgroundColor: #FFFFFF;\n\n/*-------------------\n        Types\n--------------------*/\n\n/* Labeled Icon */\n@labeledIconWidth: 1em + (@verticalPadding * 2);\n@labeledIconBackgroundColor: transparent;\n@labeledIconPadding: (@horizontalPadding + 1em);\n@labeledIconBorder: rgba(0, 0, 0, 0.05);\n@labeledIconColor: '';\n\n@labeledIconLeftShadow: none;\n@labeledIconRightShadow: none;\n\n/* Basic */\n@basicBoxShadow: 0px 0px 0px 1px @borderColor;\n@iconOffset: 0.05em;\n@basicLoadingColor: #FFFFFF;\n\n@basicHoverBackground: #FAFAFA;\n@basicHoverBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.15);\n\n@basicDownBackground: rgba(0, 0, 0, 0.02);\n@basicDownBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.2);\n\n@basicActiveBackground: @transparentBlack;\n@basicActiveColor: @selectedTextColor;\n\n/* Basic Inverted */\n@basicInvertedBackground: transparent;\n@basicInvertedHoverBackground: transparent;\n@basicInvertedDownBackground: @transparentWhite;\n@basicInvertedActiveBackground: @transparentWhite;\n\n@basicInvertedBoxShadow: 0px 0px 0px 2px rgba(255, 255, 255, 0.5);\n@basicInvertedHoverBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;\n@basicInvertedDownBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;\n@basicInvertedActiveBoxShadow: 0px 0px 0px 2px @selectedWhiteBorderColor;\n\n@basicInvertedColor: @darkWhite;\n@basicInvertedHoverColor: @darkWhiteHover;\n@basicInvertedDownColor: @darkWhiteActive;\n@basicInvertedActiveColor: @invertedTextColor;\n\n\n/* Basic Group */\n@basicGroupBorder: 1px solid @borderColor;\n@basicGroupBoxShadow: 0px 0px 0px 1px @borderColor;\n\n/*-------------------\n      Variations\n--------------------*/\n\n/* Colors */\n@coloredBackgroundImage: linear-gradient(rgba(255, 255, 255, 0.05), rgba(0, 0, 0, 0.1));\n@coloredBoxShadow: @shadowBoxShadow;\n\n/* Compact */\n@compactVerticalPadding: (@verticalPadding * 0.75);\n@compactHorizontalPadding: (@horizontalPadding * 0.75);\n\n/* Attached */\n@attachedOffset: -1px;\n@attachedBoxShadow: 0px 0px 0px 1px rgba(0, 0, 0, 0.1);\n@attachedHorizontalPadding: 0.75em;\n\n/* Floated */\n@floatedMargin: 0.25em;\n\n/* Animated */\n@animationDuration: 0.3s;\n@animationEasing: ease;\n@fadeScaleHigh: 1.5;\n@fadeScaleLow: 0.75;\n\n/* Sizing */\n@mini: 0.7rem;\n@tiny: 0.8rem;\n@small: 0.875rem;\n@medium: 1rem;\n@large: 1.125rem;\n@big: 1.25rem;\n@huge: 1.375rem;\n@massive: 1.5rem;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/rtl/globals/site.overrides",
    "content": "/*******************************\n        Global Overrides\n*******************************/\n\n/* Import Droid Arabic Kufi */\n@import 'http://fonts.googleapis.com/earlyaccess/droidarabickufi.css';\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/rtl/globals/site.variables",
    "content": "/*******************************\n         Site Settings\n*******************************/\n\n/*-------------------\n       Fonts\n--------------------*/\n\n@googleFontName    : 'Droid Sans';\n\n/* Kufi imported in site.overrides */\n@headerFont        : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n@pageFont          : 'Droid Arabic Kufi', 'Droid Sans', 'Helvetica Neue', Arial, Helvetica, sans-serif;\n\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/striped/modules/progress.overrides",
    "content": "/*******************************\n            Progress\n*******************************/\n\n.ui.progress .bar {\n  background-size: 30px 30px;\n  background-image:\n    linear-gradient(\n      135deg, rgba(255, 255, 255, 0.08) 25%, transparent 25%,\n      transparent 50%, rgba(255, 255, 255, 0.08) 50%, rgba(255, 255, 255, 0.08) 75%,\n      transparent 75%, transparent\n    )\n  ;\n}\n\n.ui.progress.active .bar:after {\n  animation: none;\n}\n.ui.progress.active .bar {\n  animation: progress-striped 3s linear infinite;\n}\n@keyframes progress-striped {\n  0% {\n    background-position: 0px 0;\n  }\n  100% {\n    background-position: 60px 0;\n  }\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/striped/modules/progress.variables",
    "content": "/*******************************\n            Progress\n*******************************/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/timeline/views/feed.overrides",
    "content": "/*******************************\n    User Variable Overrides\n*******************************/\n\n.ui.feed > .event .label {\n  border-left: 3px solid #DDDDDD;\n}\n.ui.feed > .event:last-child .label {\n  border-left-color: transparent;\n}\n\n.ui.feed > .event > .label {\n  margin-left: 1.6em;\n}\n\n.ui.feed > .event > .label > img,\n.ui.feed > .event > .label > .icon {\n  background-color: #009FDA;\n  border-radius: 500rem;\n  color: #FFFFFF;\n  width: 3rem;\n  height: 3rem;\n  line-height: 1.5;\n  left: -1.6rem;\n  opacity: 1;\n  position: relative;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/timeline/views/feed.variables",
    "content": "/*******************************\n             Feed\n*******************************/\n\n/*-------------------\n      Elements\n--------------------*/\n\n@eventMargin: 0em;\n@eventDivider: none;\n@eventPadding: 0em;\n\n/* Event Label */\n@labelWidth: 3em;\n@labelHeight: auto;\n\n@labeledContentMargin: 0.75em 0em 2em 0.75em;\n\n/* Icon */\n@iconLabelBackground: @primaryColor;\n@iconLabelBorderRadius: @circularRadius;\n@iconLabelColor: @white;\n\n/* Metadata Group */\n@metadataDisplay: inline-block;\n@metadataMargin: 1em 0em 0em;\n@metadataBackground: @white @subtleGradient;\n@metadataBorder: 1px solid @solidBorderColor;\n@metadataBorderRadius: 0.25em;\n@metadataBoxShadow: 0 1px 1px rgba(0, 0, 0, 0.05);\n@metadataPadding: 0.5em 1em;\n@metadataColor: rgba(0, 0, 0, 0.6);\n\n/*-------------------\n      Variations\n--------------------*/\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/twitter/elements/button.overrides",
    "content": "/*******************************\n           Overrides\n*******************************/\n\n.ui.primary.button {\n  box-shadow:\n    0px 0px 0px 1px #3B88C3 inset,\n    0 2px 0 rgba(255, 255, 255, 0.15) inset\n  ;\n}\n.ui.primary.button > .icon {\n  color: #FFFFFF;\n}\n"
  },
  {
    "path": "resources/assets/semantic/src/themes/twitter/elements/button.variables",
    "content": "/*-------------------\n   Global Variables\n--------------------*/\n\n@pageFont: Helvetica Neue, Helvetica, Arial, sans-serif;\n@textColor: #66757F;\n@blue: #55ACEE;\n\n/*-------------------\n   Button Variables\n--------------------*/\n\n@backgroundColor: #F5F8FA;\n@backgroundImage: linear-gradient(@white, @backgroundColor);\n@color: #66757F;\n@borderBoxShadowColor: #E1E8ED;\n\n@textTransform: none;\n@fontWeight: bold;\n@textColor: #333333;\n\n@horizontalPadding: 1.284em;\n@verticalPadding: 0.8571em;\n\n@activeBackgroundColor: rgba(0, 0, 0, 0.1);\n\n@primaryColor: @blue;\n@coloredBackgroundImage: @subtleGradient;\n\n\n/*-------------------\n        States\n--------------------*/\n\n@hoverBackgroundColor: #E1E8ED;\n@hoverBackgroundImage: linear-gradient(@white, @hoverBackgroundColor);\n@hoverColor: #292F33;\n\n@downBackgroundColor: #E1E8ED;\n@downColor: #292F33;\n@downPressedShadow: 0px 1px 4px rgba(0, 0, 0, 0.2) inset;\n\n@labeledIconBackgroundColor: rgba(85, 172, 238, 0.05);\n@labeledIconBorder: rgba(0, 0, 0, 0.1);\n"
  },
  {
    "path": "resources/assets/semantic/tasks/README.md",
    "content": "## Tasks\n\n* Watch - Compile only changed files from source\n* Build - Build all files from source\n* Version - Output version number\n* Install - Run Installer to Set-up Paths\n\n## How to use\n\nThese tasks can be imported into your own gulpfile allowing you to avoid using Semantic's build tools\n\n```javascript\nvar\n  watch = require('path/to/semantic/tasks/watch')\n;\ngulp.task('watch ui', watch);\n```\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/components/create.js",
    "content": "/*******************************\n     Create Component Repos\n*******************************/\n\n/*\n This will create individual component repositories for each SUI component\n\n  * copy component files from release\n  * create commonjs files as index.js for NPM release\n  * create release notes that filter only items related to component\n  * custom package.json file from template\n  * create bower.json from template\n  * create README from template\n  * create meteor.js file\n*/\n\nvar\n  gulp            = require('gulp'),\n\n  // node dependencies\n  console         = require('better-console'),\n  del             = require('del'),\n  fs              = require('fs'),\n  path            = require('path'),\n  runSequence     = require('run-sequence'),\n\n  // admin dependencies\n  concatFileNames = require('gulp-concat-filenames'),\n  debug           = require('gulp-debug'),\n  flatten         = require('gulp-flatten'),\n  git             = require('gulp-git'),\n  jsonEditor      = require('gulp-json-editor'),\n  plumber         = require('gulp-plumber'),\n  rename          = require('gulp-rename'),\n  replace         = require('gulp-replace'),\n  tap             = require('gulp-tap'),\n  util            = require('gulp-util'),\n\n  // config\n  config          = require('../../config/user'),\n  release         = require('../../config/admin/release'),\n  project         = require('../../config/project/release'),\n\n  // shorthand\n  version         = project.version,\n  output          = config.paths.output\n\n;\n\n\nmodule.exports = function(callback) {\n  var\n    stream,\n    index,\n    tasks = []\n  ;\n\n  for(index in release.components) {\n\n    var\n      component = release.components[index]\n    ;\n\n    // streams... designed to save time and make coding fun...\n    (function(component) {\n\n      var\n        outputDirectory      = path.join(release.outputRoot, component),\n        isJavascript         = fs.existsSync(output.compressed + component + '.js'),\n        isCSS                = fs.existsSync(output.compressed + component + '.css'),\n        capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),\n        packageName          = release.packageRoot + component,\n        repoName             = release.componentRepoRoot + capitalizedComponent,\n        gitURL               = 'https://github.com/' + release.org + '/' + repoName + '.git',\n        repoURL              = 'https://github.com/' + release.org + '/' + repoName + '/',\n        concatSettings = {\n          newline : '',\n          root    : outputDirectory,\n          prepend : \"    '\",\n          append  : \"',\"\n        },\n        regExp               = {\n          match            : {\n            // templated values\n            name      : '{component}',\n            titleName : '{Component}',\n            version   : '{version}',\n            files     : '{files}',\n            // release notes\n            spacedVersions    : /(###.*\\n)\\n+(?=###)/gm,\n            spacedLists       : /(^- .*\\n)\\n+(?=^-)/gm,\n            trim              : /^\\s+|\\s+$/g,\n            unrelatedNotes    : new RegExp('^((?!(^.*(' + component + ').*$|###.*)).)*$', 'gmi'),\n            whitespace        : /\\n\\s*\\n\\s*\\n/gm,\n            // npm\n            componentExport   : /(.*)\\$\\.fn\\.\\w+\\s*=\\s*function\\(([^\\)]*)\\)\\s*{/g,\n            componentReference: '$.fn.' + component,\n            settingsExport    : /\\$\\.fn\\.\\w+\\.settings\\s*=/g,\n            settingsReference : /\\$\\.fn\\.\\w+\\.settings/g,\n            trailingComma     : /,(?=[^,]*$)/,\n            jQuery            : /jQuery/g,\n          },\n          replace : {\n            // readme\n            name              : component,\n            titleName         : capitalizedComponent,\n            // release notes\n            spacedVersions    : '',\n            spacedLists       : '$1',\n            trim              : '',\n            unrelatedNotes    : '',\n            whitespace        : '\\n\\n',\n            // npm\n            componentExport   :  'var _module = module;\\n$1module.exports = function($2) {',\n            componentReference:  '_module.exports',\n            settingsExport    :  'module.exports.settings =',\n            settingsReference :  '_module.exports.settings',\n            jQuery            :  'require(\"jquery\")'\n          }\n        },\n        task = {\n          all      : component + ' creating',\n          repo     : component + ' create repo',\n          bower    : component + ' create bower.json',\n          readme   : component + ' create README',\n          npm      : component + ' create NPM Module',\n          notes    : component + ' create release notes',\n          composer : component + ' create composer.json',\n          package  : component + ' create package.json',\n          meteor   : component + ' create meteor package.js',\n        },\n        // paths to includable assets\n        manifest = {\n          assets    : outputDirectory + '/assets/**/' + component + '?(s).*',\n          component : outputDirectory + '/' + component + '+(.js|.css)'\n        }\n      ;\n\n      // copy dist files into output folder adjusting asset paths\n      gulp.task(task.repo, false, function() {\n        return gulp.src(release.source + component + '.*')\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(replace(release.paths.source, release.paths.output))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // create npm module\n      gulp.task(task.npm, false, function() {\n        return gulp.src(release.source + component + '!(*.min|*.map).js')\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(replace(regExp.match.componentExport, regExp.replace.componentExport))\n          .pipe(replace(regExp.match.componentReference, regExp.replace.componentReference))\n          .pipe(replace(regExp.match.settingsExport, regExp.replace.settingsExport))\n          .pipe(replace(regExp.match.settingsReference, regExp.replace.settingsReference))\n          .pipe(replace(regExp.match.jQuery, regExp.replace.jQuery))\n          .pipe(rename('index.js'))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // create readme\n      gulp.task(task.readme, false, function() {\n        return gulp.src(release.templates.readme)\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(replace(regExp.match.name, regExp.replace.name))\n          .pipe(replace(regExp.match.titleName, regExp.replace.titleName))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // extend bower.json\n      gulp.task(task.bower, false, function() {\n        return gulp.src(release.templates.bower)\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(jsonEditor(function(bower) {\n            bower.name = packageName;\n            bower.description = capitalizedComponent + ' - Semantic UI';\n            if(isJavascript) {\n              if(isCSS) {\n                bower.main = [\n                  component + '.js',\n                  component + '.css'\n                ];\n              }\n              else {\n                bower.main = [\n                  component + '.js'\n                ];\n              }\n              bower.dependencies = {\n                jquery: '>=1.8'\n              };\n            }\n            else {\n              bower.main = [\n                component + '.css'\n              ];\n            }\n            return bower;\n          }))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // extend package.json\n      gulp.task(task.package, false, function() {\n        return gulp.src(release.templates.package)\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(jsonEditor(function(npm) {\n            if(isJavascript) {\n              npm.dependencies = {\n                jquery: 'x.x.x'\n              };\n              npm.main = 'index.js';\n            }\n            npm.name = packageName;\n            if(version) {\n              npm.version = version;\n            }\n            npm.title       = 'Semantic UI - ' + capitalizedComponent;\n            npm.description = 'Single component release of ' + component;\n            npm.repository  = {\n              type : 'git',\n              url  : gitURL\n            };\n            return npm;\n          }))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // extend composer.json\n      gulp.task(task.composer, false, function() {\n        return gulp.src(release.templates.composer)\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(jsonEditor(function(composer) {\n            if(isJavascript) {\n              composer.dependencies = {\n                jquery: 'x.x.x'\n              };\n              composer.main = component + '.js';\n            }\n            composer.name = 'semantic/' + component;\n            if(version) {\n              composer.version = version;\n            }\n            composer.description = 'Single component release of ' + component;\n            return composer;\n          }))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // create release notes\n      gulp.task(task.notes, false, function() {\n        return gulp.src(release.templates.notes)\n          .pipe(plumber())\n          .pipe(flatten())\n          // Remove release notes for lines not mentioning component\n          .pipe(replace(regExp.match.unrelatedNotes, regExp.replace.unrelatedNotes))\n          .pipe(replace(regExp.match.whitespace, regExp.replace.whitespace))\n          .pipe(replace(regExp.match.spacedVersions, regExp.replace.spacedVersions))\n          .pipe(replace(regExp.match.spacedLists, regExp.replace.spacedLists))\n          .pipe(replace(regExp.match.trim, regExp.replace.trim))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      // Creates meteor package.js\n      gulp.task(task.meteor, function() {\n        var\n          filenames = ''\n        ;\n        return gulp.src(manifest.component)\n          .pipe(concatFileNames('empty.txt', concatSettings))\n          .pipe(tap(function(file) {\n            filenames += file.contents;\n          }))\n          .on('end', function() {\n            gulp.src(manifest.assets)\n              .pipe(concatFileNames('empty.txt', concatSettings))\n              .pipe(tap(function(file) {\n                filenames += file.contents;\n              }))\n              .on('end', function() {\n                // remove trailing slash\n                filenames = filenames.replace(regExp.match.trailingComma, '').trim();\n                gulp.src(release.templates.meteor.component)\n                  .pipe(plumber())\n                  .pipe(flatten())\n                  .pipe(replace(regExp.match.name, regExp.replace.name))\n                  .pipe(replace(regExp.match.titleName, regExp.replace.titleName))\n                  .pipe(replace(regExp.match.version, version))\n                  .pipe(replace(regExp.match.files, filenames))\n                  .pipe(rename(release.files.meteor))\n                  .pipe(gulp.dest(outputDirectory))\n                ;\n              })\n            ;\n          })\n        ;\n      });\n\n\n      // synchronous tasks in orchestrator? I think not\n      gulp.task(task.all, false, function(callback) {\n        runSequence([\n          task.repo,\n          task.npm,\n          task.bower,\n          task.readme,\n          task.package,\n          task.composer,\n          task.notes,\n          task.meteor\n        ], callback);\n      });\n\n      tasks.push(task.all);\n\n    })(component);\n  }\n\n  runSequence(tasks, callback);\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/components/init.js",
    "content": "/*******************************\n          Init Repos\n*******************************/\n\n/*\n\n This task pulls the latest version of each component from GitHub\n\n  * Creates new repo if doesnt exist (locally & GitHub)\n  * Adds remote it doesnt exists\n  * Pulls latest changes from repo\n\n*/\n\nvar\n  gulp      = require('gulp'),\n\n  // node dependencies\n  console   = require('better-console'),\n  del       = require('del'),\n  fs        = require('fs'),\n  path      = require('path'),\n  git       = require('gulp-git'),\n  githubAPI = require('github'),\n  mkdirp    = require('mkdirp'),\n\n  // admin files\n  github    = require('../../config/admin/github.js'),\n  release   = require('../../config/admin/release'),\n  project   = require('../../config/project/release'),\n\n\n  // oAuth configuration for GitHub\n  oAuth     = fs.existsSync(__dirname + '/../../config/admin/oauth.js')\n    ? require('../../config/admin/oauth')\n    : false,\n\n  // shorthand\n  version         = project.version\n;\n\nmodule.exports = function(callback) {\n\n  var\n    index = -1,\n    total = release.components.length,\n    timer,\n    stream,\n    stepRepo\n  ;\n\n  if(!oAuth) {\n    console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');\n    return;\n  }\n\n  // Do Git commands synchronously per component, to avoid issues\n  stepRepo = function() {\n\n    index = index + 1;\n\n    if(index >= total) {\n      callback();\n      return;\n    }\n\n    var\n      component            = release.components[index]\n      outputDirectory      = path.resolve(release.outputRoot + component),\n      capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),\n      repoName             = release.componentRepoRoot + capitalizedComponent,\n\n      gitOptions           = { cwd: outputDirectory },\n      pullOptions          = { args: '-q', cwd: outputDirectory, quiet: true },\n      resetOptions         = { args: '-q --hard', cwd: outputDirectory, quiet: true },\n\n      gitURL               = 'https://github.com/' + release.org + '/' + repoName + '.git',\n      repoURL              = 'https://github.com/' + release.org + '/' + repoName + '/',\n      localRepoSetup       = fs.existsSync(path.join(outputDirectory, '.git'))\n    ;\n\n    console.log('Processing repository: ' + outputDirectory);\n\n    // create folder if doesn't exist\n    if( !fs.existsSync(outputDirectory) ) {\n      mkdirp.sync(outputDirectory);\n    }\n\n    // clean folder\n    if(release.outputRoot.search('../repos') == 0) {\n      console.info('Cleaning dir', outputDirectory);\n      del.sync([outputDirectory + '**/*'], {silent: true, force: true});\n    }\n\n    // set-up local repo\n    function setupRepo() {\n      if(localRepoSetup) {\n        addRemote();\n      }\n      else {\n        initRepo();\n      }\n    }\n\n    function initRepo() {\n      console.info('Initializing repository for ' + component);\n      git.init(gitOptions, function(error) {\n        if(error) {\n          console.error('Error initializing repo', error);\n        }\n        addRemote();\n      });\n    }\n\n    function createRepo() {\n      console.info('Creating GitHub repo ' + repoURL);\n      github.repos.createFromOrg({\n        org      : release.org,\n        name     : repoName,\n        homepage : release.homepage\n      }, function() {\n        setupRepo();\n      });\n    }\n\n    function addRemote() {\n      console.info('Adding remote origin as ' + gitURL);\n      git.addRemote('origin', gitURL, gitOptions, function(){\n        pullFiles();\n      });\n    }\n\n    function pullFiles() {\n      console.info('Pulling ' + component + ' files');\n      git.pull('origin', 'master', pullOptions, function(error) {\n        resetFiles();\n      });\n    }\n\n    function resetFiles() {\n      console.info('Resetting files to head');\n      git.reset('HEAD', resetOptions, function(error) {\n        nextRepo();\n      });\n    }\n\n    function nextRepo() {\n      //console.log('Sleeping for 1 second...');\n      // avoid rate throttling\n      global.clearTimeout(timer);\n      timer = global.setTimeout(function() {\n        stepRepo()\n      }, 0);\n    }\n\n\n    if(localRepoSetup) {\n      pullFiles();\n    }\n    else {\n      setupRepo();\n      // createRepo() only use to create remote repo (easier to do manually)\n    }\n\n  };\n\n  stepRepo();\n\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/components/update.js",
    "content": "/*******************************\n          Update Repos\n*******************************/\n\n/*\n\n This task update all SUI individual component repos with new versions of components\n\n  * Commits changes from create repo\n  * Pushes changes to GitHub\n  * Tag new releases if version changed in main repo\n\n*/\n\nvar\n  gulp           = require('gulp'),\n\n  // node dependencies\n  console        = require('better-console'),\n  fs             = require('fs'),\n  path           = require('path'),\n  git            = require('gulp-git'),\n  githubAPI      = require('github'),\n  requireDotFile = require('require-dot-file'),\n\n  // admin files\n  github         = require('../../config/admin/github.js'),\n  release        = require('../../config/admin/release'),\n  project        = require('../../config/project/release'),\n\n\n  // oAuth configuration for GitHub\n  oAuth          = fs.existsSync(__dirname + '/../../config/admin/oauth.js')\n    ? require('../../config/admin/oauth')\n    : false,\n\n  // shorthand\n  version = project.version\n;\n\nmodule.exports = function(callback) {\n\n  var\n    index = -1,\n    total = release.components.length,\n    timer,\n    stream,\n    stepRepo\n  ;\n\n  if(!oAuth) {\n    console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');\n    return;\n  }\n\n  // Do Git commands synchronously per component, to avoid issues\n  stepRepo = function() {\n\n    index = index + 1;\n    if(index >= total) {\n      callback();\n      return;\n    }\n\n    var\n      component            = release.components[index],\n      outputDirectory      = path.resolve(path.join(release.outputRoot, component)),\n      capitalizedComponent = component.charAt(0).toUpperCase() + component.slice(1),\n      repoName             = release.componentRepoRoot + capitalizedComponent,\n\n      gitURL               = 'https://github.com/' + release.org + '/' + repoName + '.git',\n      repoURL              = 'https://github.com/' + release.org + '/' + repoName + '/',\n\n      commitArgs = (oAuth.name !== undefined && oAuth.email !== undefined)\n        ? '--author \"' + oAuth.name + ' <' + oAuth.email + '>\"'\n        : '',\n\n      componentPackage = fs.existsSync(outputDirectory + 'package.json' )\n        ? require(outputDirectory + 'package.json')\n        : false,\n\n      isNewVersion  = (version && componentPackage.version != version),\n\n      commitMessage = (isNewVersion)\n        ? 'Updated component to version ' + version\n        : 'Updated files from main repo',\n\n      gitOptions      = { cwd: outputDirectory },\n      commitOptions   = { args: commitArgs, cwd: outputDirectory },\n      releaseOptions  = { tag_name: version, owner: release.org, repo: repoName },\n\n      fileModeOptions = { args : 'config core.fileMode false', cwd: outputDirectory },\n      usernameOptions = { args : 'config user.name \"' + oAuth.name + '\"', cwd: outputDirectory },\n      emailOptions    = { args : 'config user.email \"' + oAuth.email + '\"', cwd: outputDirectory },\n      versionOptions =  { args : 'rev-parse --verify HEAD', cwd: outputDirectory },\n\n      localRepoSetup  = fs.existsSync(path.join(outputDirectory, '.git')),\n      canProceed      = true\n    ;\n\n\n    console.info('Processing repository:' + outputDirectory);\n\n    function setConfig() {\n      git.exec(fileModeOptions, function() {\n        git.exec(usernameOptions, function () {\n          git.exec(emailOptions, function () {\n            commitFiles();\n          });\n        });\n      });\n    }\n\n\n    // standard path\n    function commitFiles() {\n      // commit files\n      console.info('Committing ' + component + ' files', commitArgs);\n      gulp.src('./', gitOptions)\n        .pipe(git.add(gitOptions))\n        .pipe(git.commit(commitMessage, commitOptions))\n        .on('error', function(error) {\n          // canProceed = false; bug in git commit <https://github.com/stevelacy/gulp-git/issues/49>\n        })\n        .on('finish', function(callback) {\n          if(canProceed) {\n            pushFiles();\n          }\n          else {\n            console.info('Nothing new to commit');\n            nextRepo();\n          }\n        })\n      ;\n    }\n\n    // push changes to remote\n    function pushFiles() {\n      console.info('Pushing files for ' + component);\n      git.push('origin', 'master', { args: '', cwd: outputDirectory }, function(error) {\n        console.info('Push completed successfully');\n        getSHA();\n      });\n    }\n\n    // gets SHA of last commit\n    function getSHA() {\n      git.exec(versionOptions, function(error, version) {\n        version = version.trim();\n        createRelease(version);\n      });\n    }\n\n    // create release on GitHub.com\n    function createRelease(version) {\n      if(version) {\n        releaseOptions.target_commitish = version;\n      }\n      github.repos.createRelease(releaseOptions, function() {\n        nextRepo();\n      });\n    }\n\n    // Steps to next repository\n    function nextRepo() {\n      console.log('Sleeping for 1 second...');\n      // avoid rate throttling\n      global.clearTimeout(timer);\n      timer = global.setTimeout(stepRepo, 1000);\n    }\n\n\n    if(localRepoSetup) {\n      setConfig();\n    }\n    else {\n      console.error('Repository must be setup before running update components');\n    }\n\n  };\n\n  stepRepo();\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/distributions/create.js",
    "content": "/*******************************\n     Create Distributions\n*******************************/\n\n/*\n This will create individual distribution repositories for each SUI distribution\n\n  * copy distribution files to release\n  * update package.json file\n*/\n\nvar\n  gulp            = require('gulp'),\n\n  // node dependencies\n  console         = require('better-console'),\n  del             = require('del'),\n  fs              = require('fs'),\n  path            = require('path'),\n  runSequence     = require('run-sequence'),\n  mergeStream     = require('merge-stream'),\n\n  // admin dependencies\n  concatFileNames = require('gulp-concat-filenames'),\n  debug           = require('gulp-debug'),\n  flatten         = require('gulp-flatten'),\n  git             = require('gulp-git'),\n  jsonEditor      = require('gulp-json-editor'),\n  plumber         = require('gulp-plumber'),\n  rename          = require('gulp-rename'),\n  replace         = require('gulp-replace'),\n  tap             = require('gulp-tap'),\n\n  // config\n  config          = require('../../config/user'),\n  release         = require('../../config/admin/release'),\n  project         = require('../../config/project/release'),\n\n  // shorthand\n  version         = project.version,\n  output          = config.paths.output\n\n;\n\n\nmodule.exports = function(callback) {\n  var\n    stream,\n    index,\n    tasks = []\n  ;\n\n  for(index in release.distributions) {\n\n    var\n      distribution = release.distributions[index]\n    ;\n\n    // streams... designed to save time and make coding fun...\n    (function(distribution) {\n\n      var\n        distLowerCase   = distribution.toLowerCase(),\n        outputDirectory = path.join(release.outputRoot, distLowerCase),\n        packageFile     = path.join(outputDirectory, release.files.npm),\n        repoName        = release.distRepoRoot + distribution,\n        regExp          = {\n          match : {\n            files   : '{files}',\n            version : '{version}'\n          }\n        },\n        task = {\n          all     : distribution + ' copying files',\n          repo    : distribution + ' create repo',\n          meteor  : distribution + ' create meteor package.js',\n          package : distribution + ' create package.json'\n        },\n        gatherFiles,\n        createList\n      ;\n\n      // get files for meteor\n      gatherFiles = function(dir) {\n        var\n          dir   = dir || path.resolve('.'),\n          list  = fs.readdirSync(dir),\n          omitted = [\n            '.git',\n            'node_modules',\n            'package.js',\n            'LICENSE',\n            'README.md',\n            'package.json',\n            'bower.json',\n            '.gitignore'\n          ],\n          files = []\n        ;\n        list.forEach(function(file) {\n          var\n            isOmitted = (omitted.indexOf(file) > -1),\n            filePath  = path.join(dir, file),\n            stat      = fs.statSync(filePath)\n          ;\n          if(!isOmitted) {\n            if(stat && stat.isDirectory()) {\n              files = files.concat(gatherFiles(filePath));\n            }\n            else {\n              files.push(filePath.replace(outputDirectory + path.sep, ''));\n            }\n          }\n        });\n        return files;\n      };\n\n      // spaces out list correctly\n      createList = function(files) {\n        var filenames = '';\n        for(var file in files) {\n          if(file == (files.length - 1) ) {\n            filenames += \"'\" + files[file] + \"'\";\n          }\n          else {\n            filenames += \"'\" + files[file] + \"',\\n    \";\n          }\n        }\n        return filenames;\n      };\n\n\n      gulp.task(task.meteor, function() {\n        var\n          files     = gatherFiles(outputDirectory),\n          filenames = createList(files)\n        ;\n        gulp.src(release.templates.meteor[distLowerCase])\n          .pipe(plumber())\n          .pipe(flatten())\n          .pipe(replace(regExp.match.version, version))\n          .pipe(replace(regExp.match.files, filenames))\n          .pipe(rename(release.files.meteor))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      if(distribution == 'CSS') {\n        gulp.task(task.repo, function() {\n          var\n            themes,\n            components,\n            releases\n          ;\n          themes = gulp.src('dist/themes/default/**/*', { base: 'dist/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          components = gulp.src('dist/components/*', { base: 'dist/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          releases = gulp.src('dist/*', { base: 'dist/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          return mergeStream(themes, components, releases);\n        });\n      }\n      else if(distribution == 'LESS') {\n        gulp.task(task.repo, function() {\n          var\n            definitions,\n            themeImport,\n            themeConfig,\n            siteTheme,\n            themes\n          ;\n          definitions = gulp.src('src/definitions/**/*', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          themeImport = gulp.src('src/semantic.less', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          themeImport = gulp.src('src/theme.less', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          themeConfig = gulp.src('src/theme.config.example', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          siteTheme = gulp.src('src/_site/**/*', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          themes = gulp.src('src/themes/**/*', { base: 'src/' })\n            .pipe(gulp.dest(outputDirectory))\n          ;\n          return mergeStream(definitions, themeImport, themeConfig, siteTheme, themes);\n        });\n      }\n\n      // extend package.json\n      gulp.task(task.package, function() {\n        return gulp.src(packageFile)\n          .pipe(plumber())\n          .pipe(jsonEditor(function(package) {\n            if(version) {\n              package.version = version;\n            }\n            return package;\n          }))\n          .pipe(gulp.dest(outputDirectory))\n        ;\n      });\n\n      tasks.push(task.meteor);\n      tasks.push(task.repo);\n      tasks.push(task.package);\n\n    })(distribution);\n  }\n  runSequence(tasks, callback);\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/distributions/init.js",
    "content": "/*******************************\n        Init Dist Repos\n*******************************/\n\n/*\n\n This task pulls the latest version of distribution from GitHub\n\n  * Creates new repo if doesnt exist (locally & GitHub)\n  * Adds remote it doesnt exists\n  * Pulls latest changes from repo\n\n*/\n\nvar\n  gulp      = require('gulp'),\n\n  // node dependencies\n  console   = require('better-console'),\n  del       = require('del'),\n  fs        = require('fs'),\n  path      = require('path'),\n  git       = require('gulp-git'),\n  githubAPI = require('github'),\n  mkdirp    = require('mkdirp'),\n\n  // admin files\n  github    = require('../../config/admin/github.js'),\n  release   = require('../../config/admin/release'),\n  project   = require('../../config/project/release'),\n\n\n  // oAuth configuration for GitHub\n  oAuth     = fs.existsSync(__dirname + '/../../config/admin/oauth.js')\n    ? require('../../config/admin/oauth')\n    : false,\n\n  // shorthand\n  version = project.version\n;\n\nmodule.exports = function(callback) {\n\n  var\n    index = -1,\n    total = release.distributions.length,\n    timer,\n    stream,\n    stepRepo\n  ;\n\n  if(!oAuth) {\n    console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');\n    return;\n  }\n\n  // Do Git commands synchronously per component, to avoid issues\n  stepRepo = function() {\n\n    index = index + 1;\n\n    if(index >= total) {\n      callback();\n      return;\n    }\n\n    var\n      component          = release.distributions[index],\n      lowerCaseComponent = component.toLowerCase(),\n      outputDirectory    = path.resolve(release.outputRoot + lowerCaseComponent),\n      repoName           = release.distRepoRoot + component,\n\n      gitOptions         = { cwd: outputDirectory },\n      pullOptions        = { args: '-q', cwd: outputDirectory, quiet: true },\n      resetOptions       = { args: '-q --hard', cwd: outputDirectory, quiet: true },\n      gitURL             = 'git@github.com:' + release.org + '/' + repoName + '.git',\n      repoURL            = 'https://github.com/' + release.org + '/' + repoName + '/',\n      localRepoSetup     = fs.existsSync(path.join(outputDirectory, '.git'))\n    ;\n\n    console.log('Processing repository: ' + outputDirectory);\n\n    // create folder if doesn't exist\n    if( !fs.existsSync(outputDirectory) ) {\n      mkdirp.sync(outputDirectory);\n    }\n\n    // clean folder\n    if(release.outputRoot.search('../repos') == 0) {\n      console.info('Cleaning dir', outputDirectory);\n      del.sync([outputDirectory + '**/*'], {silent: true, force: true});\n    }\n\n    // set-up local repo\n    function setupRepo() {\n      if(localRepoSetup) {\n        addRemote();\n      }\n      else {\n        initRepo();\n      }\n    }\n\n    function initRepo() {\n      console.info('Initializing repository for ' + component);\n      git.init(gitOptions, function(error) {\n        if(error) {\n          console.error('Error initializing repo', error);\n        }\n        addRemote();\n      });\n    }\n\n    function createRepo() {\n      console.info('Creating GitHub repo ' + repoURL);\n      github.repos.createFromOrg({\n        org      : release.org,\n        name     : repoName,\n        homepage : release.homepage\n      }, function() {\n        setupRepo();\n      });\n    }\n\n    function addRemote() {\n      console.info('Adding remote origin as ' + gitURL);\n      git.addRemote('origin', gitURL, gitOptions, function(){\n        pullFiles();\n      });\n    }\n\n    function pullFiles() {\n      console.info('Pulling ' + component + ' files');\n      git.pull('origin', 'master', pullOptions, function(error) {\n        resetFiles();\n      });\n    }\n\n    function resetFiles() {\n      console.info('Resetting files to head');\n      git.reset('HEAD', resetOptions, function(error) {\n        nextRepo();\n      });\n    }\n\n    function nextRepo() {\n      //console.log('Sleeping for 1 second...');\n      // avoid rate throttling\n      global.clearTimeout(timer);\n      timer = global.setTimeout(function() {\n        stepRepo()\n      }, 0);\n    }\n\n\n    if(localRepoSetup) {\n      pullFiles();\n    }\n    else {\n      setupRepo();\n      // createRepo() only use to create remote repo (easier to do manually)\n    }\n\n  };\n\n  stepRepo();\n\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/distributions/update.js",
    "content": "/*******************************\n          Update Repos\n*******************************/\n\n/*\n\n This task update all SUI individual distribution repos with new versions of distributions\n\n  * Commits changes from create repo\n  * Pushes changes to GitHub\n  * Tag new releases if version changed in main repo\n\n*/\n\nvar\n  gulp           = require('gulp'),\n\n  // node dependencies\n  console        = require('better-console'),\n  fs             = require('fs'),\n  path           = require('path'),\n  git            = require('gulp-git'),\n  githubAPI      = require('github'),\n  requireDotFile = require('require-dot-file'),\n\n  // admin files\n  github         = require('../../config/admin/github.js'),\n  release        = require('../../config/admin/release'),\n  project        = require('../../config/project/release'),\n\n\n  // oAuth configuration for GitHub\n  oAuth          = fs.existsSync(__dirname + '/../../config/admin/oauth.js')\n    ? require('../../config/admin/oauth')\n    : false,\n\n  // shorthand\n  version = project.version\n;\n\nmodule.exports = function(callback) {\n\n  var\n    index = -1,\n    total = release.distributions.length,\n    timer,\n    stream,\n    stepRepo\n  ;\n\n  if(!oAuth) {\n    console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');\n    return;\n  }\n\n  // Do Git commands synchronously per distribution, to avoid issues\n  stepRepo = function() {\n\n    index = index + 1;\n    if(index >= total) {\n      callback();\n      return;\n    }\n\n    var\n      distribution         = release.distributions[index],\n      outputDirectory      = path.resolve(path.join(release.outputRoot, distribution.toLowerCase() )),\n      repoName             = release.distRepoRoot + distribution,\n\n      commitArgs = (oAuth.name !== undefined && oAuth.email !== undefined)\n        ? '--author \"' + oAuth.name + ' <' + oAuth.email + '>\"'\n        : '',\n\n      distributionPackage = fs.existsSync(outputDirectory + 'package.json' )\n        ? require(outputDirectory + 'package.json')\n        : false,\n\n      isNewVersion  = (version && distributionPackage.version != version),\n\n      commitMessage = (isNewVersion)\n        ? 'Updated distribution to version ' + version\n        : 'Updated files from main repo',\n\n      gitOptions      = { cwd: outputDirectory },\n      commitOptions   = { args: commitArgs, cwd: outputDirectory },\n      releaseOptions  = { tag_name: version, owner: release.org, repo: repoName },\n\n      fileModeOptions = { args : 'config core.fileMode false', cwd: outputDirectory },\n      usernameOptions = { args : 'config user.name \"' + oAuth.name + '\"', cwd: outputDirectory },\n      emailOptions    = { args : 'config user.email \"' + oAuth.email + '\"', cwd: outputDirectory },\n      versionOptions =  { args : 'rev-parse --verify HEAD', cwd: outputDirectory },\n\n      localRepoSetup  = fs.existsSync(path.join(outputDirectory, '.git')),\n      canProceed      = true\n    ;\n\n\n    console.info('Processing repository:' + outputDirectory);\n\n    function setConfig() {\n      git.exec(fileModeOptions, function() {\n        git.exec(usernameOptions, function () {\n          git.exec(emailOptions, function () {\n            commitFiles();\n          });\n        });\n      });\n    }\n\n    // standard path\n    function commitFiles() {\n      // commit files\n      console.info('Committing ' + distribution + ' files', commitArgs);\n      gulp.src('./', gitOptions)\n        .pipe(git.add(gitOptions))\n        .pipe(git.commit(commitMessage, commitOptions))\n        .on('error', function(error) {\n          // canProceed = false; bug in git commit <https://github.com/stevelacy/gulp-git/issues/49>\n        })\n        .on('finish', function(callback) {\n          if(canProceed) {\n            pushFiles();\n          }\n          else {\n            console.info('Nothing new to commit');\n            nextRepo();\n          }\n        })\n      ;\n    }\n\n    // push changes to remote\n    function pushFiles() {\n      console.info('Pushing files for ' + distribution);\n      git.push('origin', 'master', { args: '', cwd: outputDirectory }, function(error) {\n        console.info('Push completed successfully');\n        getSHA();\n      });\n    }\n\n    // gets SHA of last commit\n    function getSHA() {\n      git.exec(versionOptions, function(error, version) {\n        version = version.trim();\n        createRelease(version);\n      });\n    }\n\n    // create release on GitHub.com\n    function createRelease(version) {\n      if(version) {\n        releaseOptions.target_commitish = version;\n      }\n      github.repos.createRelease(releaseOptions, function() {\n        nextRepo();\n      });\n    }\n\n    // Steps to next repository\n    function nextRepo() {\n      console.log('Sleeping for 1 second...');\n      // avoid rate throttling\n      global.clearTimeout(timer);\n      timer = global.setTimeout(stepRepo, 500);\n    }\n\n\n    if(localRepoSetup) {\n      setConfig();\n    }\n    else {\n      console.error('Repository must be setup before running update distributions');\n    }\n\n  };\n\n  stepRepo();\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/publish.js",
    "content": "/*******************************\n          Release All\n*******************************/\n\n/*\n This task update all SUI individual component repos with new versions of components\n\n  * Commits changes from create components to GitHub and Tags\n\n*/\n\nvar\n  runSequence = require('run-sequence')\n;\n\n/* Release All */\nmodule.exports = function(callback) {\n\n  runSequence(\n    'update distributions', // commit less/css versions to github\n    'update components', // commit components to github\n    callback\n  );\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/register.js",
    "content": "/*******************************\n          Register PM\n*******************************/\n\n/*\n  Task to register component repos with Package Managers\n  * Registers component with bower\n  * Registers component with NPM\n*/\n\nvar\n  // node dependencies\n  process = require('child_process'),\n\n  // config\n  release = require('../config/admin/release'),\n\n  // register components and distributions\n  repos   = release.distributions.concat(release.components),\n  total   = repos.length,\n  index   = -1,\n\n  stream,\n  stepRepo\n;\n\nmodule.exports = function(callback) {\n\n  console.log('Registering repos with package managers');\n\n  // Do Git commands synchronously per component, to avoid issues\n  stepRepo = function() {\n    index = index + 1;\n    if(index >= total) {\n      callback();\n      return;\n    }\n    var\n      repo            = repos[index].toLowerCase(),\n      outputDirectory = release.outputRoot + repo + '/',\n      exec            = process.exec,\n      execSettings    = {cwd: outputDirectory},\n      updateNPM       = 'npm publish'\n    ;\n\n    /* Register with NPM */\n    exec(updateNPM, execSettings, function(err, stdout, stderr) {\n      console.log(err, stdout, stderr);\n      stepRepo();\n    });\n\n  };\n  stepRepo();\n};\n\n"
  },
  {
    "path": "resources/assets/semantic/tasks/admin/release.js",
    "content": "/*******************************\n          Release\n*******************************/\n\n/*\n This task update all SUI individual component repos with new versions of components\n\n  * Initializes repositories with current versions\n  * Creates local files at ../distributions/ with each repo for release\n\n*/\n\nvar\n  runSequence = require('run-sequence')\n;\n\n/* Release All */\nmodule.exports = function(callback) {\n\n  runSequence(\n    //'build', // build Semantic\n    'init distributions', // sync with current github version\n    'create distributions', // update each repo with changes from master repo\n    'init components', // sync with current github version\n    'create components', // update each repo\n    callback\n  );\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/build/assets.js",
    "content": "/*******************************\n          Build Task\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // gulp dependencies\n  chmod        = require('gulp-chmod'),\n  gulpif       = require('gulp-if'),\n\n  // config\n  config       = require('../config/user'),\n  tasks        = require('../config/tasks'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  log          = tasks.log\n;\n\nmodule.exports = function(callback) {\n\n  console.info('Building assets');\n\n  // copy assets\n  return gulp.src(source.themes + '/**/assets/**/*.*')\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.themes))\n  ;\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/build/css.js",
    "content": "/*******************************\n          Build Task\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n\n  // gulp dependencies\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  flatten      = require('gulp-flatten'),\n  gulpif       = require('gulp-if'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  runSequence  = require('run-sequence'),\n\n  // config\n  config       = require('../config/user'),\n  tasks        = require('../config/tasks'),\n  install      = require('../config/project/install'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n;\n\n// add internal tasks (concat release)\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function(callback) {\n\n  var\n    tasksCompleted = 0,\n    maybeCallback  = function() {\n      tasksCompleted++;\n      if(tasksCompleted === 2) {\n        callback();\n      }\n    },\n\n    stream,\n    compressedStream,\n    uncompressedStream\n  ;\n\n  console.info('Building CSS');\n\n  if( !install.isSetup() ) {\n    console.error('Cannot build files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  // unified css stream\n  stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')\n    .pipe(plumber(settings.plumber.less))\n    .pipe(less(settings.less))\n    .pipe(autoprefixer(settings.prefix))\n    .pipe(replace(comments.variables.in, comments.variables.out))\n    .pipe(replace(comments.license.in, comments.license.out))\n    .pipe(replace(comments.large.in, comments.large.out))\n    .pipe(replace(comments.small.in, comments.small.out))\n    .pipe(replace(comments.tiny.in, comments.tiny.out))\n    .pipe(flatten())\n  ;\n\n  // two concurrent streams from same source to concat release\n  uncompressedStream = stream.pipe(clone());\n  compressedStream   = stream.pipe(clone());\n\n  // uncompressed component css\n  uncompressedStream\n    .pipe(plumber())\n    .pipe(replace(assets.source, assets.uncompressed))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      runSequence('package uncompressed css', maybeCallback);\n    })\n  ;\n\n  // compressed component css\n  compressedStream = stream\n    .pipe(plumber())\n    .pipe(clone())\n    .pipe(replace(assets.source, assets.compressed))\n    .pipe(minifyCSS(settings.minify))\n    .pipe(rename(settings.rename.minCSS))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      runSequence('package compressed css', maybeCallback);\n    })\n  ;\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/build/javascript.js",
    "content": "/*******************************\n          Build Task\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n\n  // gulp dependencies\n  chmod        = require('gulp-chmod'),\n  flatten      = require('gulp-flatten'),\n  gulpif       = require('gulp-if'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  uglify       = require('gulp-uglify'),\n\n  // config\n  config       = require('../config/user'),\n  tasks        = require('../config/tasks'),\n  install      = require('../config/project/install'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n;\n\n// add internal tasks (concat release)\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function(callback) {\n\n  var\n    stream,\n    compressedStream,\n    uncompressedStream\n  ;\n\n  console.info('Building Javascript');\n\n  if( !install.isSetup() ) {\n    console.error('Cannot build files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  // copy source javascript\n  gulp.src(source.definitions + '/**/' + globs.components + '.js')\n    .pipe(plumber())\n    .pipe(flatten())\n    .pipe(replace(comments.license.in, comments.license.out))\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(print(log.created))\n    .pipe(uglify(settings.uglify))\n    .pipe(rename(settings.rename.minJS))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(print(log.created))\n    .on('end', function() {\n      gulp.start('package compressed js');\n      gulp.start('package uncompressed js');\n      callback();\n    })\n  ;\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/build.js",
    "content": "/*******************************\n          Build Task\n*******************************/\n\nvar\n  // dependencies\n  gulp         = require('gulp-help')(require('gulp')),\n  runSequence  = require('run-sequence'),\n\n  // config\n  config       = require('./config/user'),\n  install      = require('./config/project/install'),\n\n  // task sequence\n  tasks        = []\n;\n\n\n// sub-tasks\nif(config.rtl) {\n  require('./collections/rtl')(gulp);\n}\nrequire('./collections/build')(gulp);\n\n\nmodule.exports = function(callback) {\n\n  console.info('Building Semantic');\n\n  if( !install.isSetup() ) {\n    console.error('Cannot find semantic.json. Run \"gulp install\" to set-up Semantic');\n    return 1;\n  }\n\n  // check for right-to-left (RTL) language\n  if(config.rtl === true || config.rtl === 'Yes') {\n    gulp.start('build-rtl');\n    return;\n  }\n\n  if(config.rtl == 'both') {\n    tasks.push('build-rtl');\n  }\n\n  tasks.push('build-javascript');\n  tasks.push('build-css');\n  tasks.push('build-assets');\n\n  runSequence(tasks, callback);\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/check-install.js",
    "content": "/*******************************\n         Check Install\n*******************************/\n\nvar\n  // node dependencies\n  gulp         = require('gulp'),\n  fs           = require('fs'),\n  console      = require('better-console'),\n  install      = require('./config/project/install')\n;\n\n// export task\nmodule.exports = function() {\n\n  setTimeout(function() {\n    if( !install.isSetup() ) {\n      console.log('Starting install...');\n      gulp.start('install');\n      return;\n    }\n    else {\n      gulp.start('watch');\n    }\n  }, 50); // Delay to allow console.clear to remove messages from check event\n\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/clean.js",
    "content": "/*******************************\n          Clean Task\n*******************************/\n\nvar\n  del    = require('del'),\n  config = require('./config/user'),\n  tasks  = require('./config/tasks')\n;\n\n// cleans distribution files\nmodule.exports = function(callback) {\n  return del([config.paths.clean], tasks.settings.del, callback);\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/collections/README.md",
    "content": "## How to use\n\nThese are collections of tasks that are imported together.\n\nTo import them into gulp:\n```javascript\nvar\n  gulp    = require('gulp'),\n  // modified to point to semantic folder\n  install = require('tasks/collections/install')\n;\ngulp = install(gulp);\n\n// tasks are now injected and ready to be used\ngulp.start('install');\n```"
  },
  {
    "path": "resources/assets/semantic/tasks/collections/admin.js",
    "content": "/*******************************\n     Admin Task Collection\n*******************************/\n\n/*\n  This are tasks to be run by project maintainers\n  - Creating Component Repos\n  - Syncing with GitHub via APIs\n  - Modifying package files\n*/\n\n/*******************************\n             Tasks\n*******************************/\n\n\nmodule.exports = function(gulp) {\n  var\n    // less/css distributions\n    initComponents      = require('../admin/components/init'),\n    createComponents    = require('../admin/components/create'),\n    updateComponents    = require('../admin/components/update'),\n\n    // single component releases\n    initDistributions   = require('../admin/distributions/init'),\n    createDistributions = require('../admin/distributions/create'),\n    updateDistributions = require('../admin/distributions/update'),\n\n    release             = require('../admin/release'),\n    publish             = require('../admin/publish'),\n    register            = require('../admin/register')\n  ;\n\n  /* Release */\n  gulp.task('init distributions', 'Grabs each component from GitHub', initDistributions);\n  gulp.task('create distributions', 'Updates files in each repo', createDistributions);\n  gulp.task('init components', 'Grabs each component from GitHub', initComponents);\n  gulp.task('create components', 'Updates files in each repo', createComponents);\n\n  /* Publish */\n  gulp.task('update distributions', 'Commits component updates from create to GitHub', updateDistributions);\n  gulp.task('update components', 'Commits component updates from create to GitHub', updateComponents);\n\n  /* Tasks */\n  gulp.task('release', 'Stages changes in GitHub repos for all distributions', release);\n  gulp.task('publish', 'Publishes all releases (components, package)', publish);\n  gulp.task('register', 'Registers all packages with NPM', register);\n\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/collections/build.js",
    "content": "/*******************************\n        Define Sub-Tasks\n*******************************/\n\nmodule.exports = function(gulp) {\n\n  var\n    // build sub-tasks\n    buildJS      = require('./../build/javascript'),\n    buildCSS     = require('./../build/css'),\n    buildAssets  = require('./../build/assets')\n  ;\n\n  // in case these tasks are undefined during import, less make sure these are available in scope\n  gulp.task('build-javascript', 'Builds all javascript from source', buildJS);\n  gulp.task('build-css', 'Builds all css from source', buildCSS);\n  gulp.task('build-assets', 'Copies all assets from source', buildAssets);\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/collections/internal.js",
    "content": "/*******************************\n    Internal Task Collection\n*******************************/\n\n/* These tasks create packaged files from **dist** components\n   Not intended to be called directly by a user because\n   these do not build fresh from **src**\n*/\n\nmodule.exports = function(gulp) {\n\n  var\n    // node dependencies\n    fs         = require('fs'),\n    chmod      = require('gulp-chmod'),\n    concat     = require('gulp-concat'),\n    concatCSS  = require('gulp-concat-css'),\n    clone      = require('gulp-clone'),\n    dedupe     = require('gulp-dedupe'),\n    gulpif     = require('gulp-if'),\n    header     = require('gulp-header'),\n    less       = require('gulp-less'),\n    minifyCSS  = require('gulp-clean-css'),\n    plumber    = require('gulp-plumber'),\n    print      = require('gulp-print'),\n    rename     = require('gulp-rename'),\n    replace    = require('gulp-replace'),\n    uglify     = require('gulp-uglify'),\n\n    // user config\n    config     = require('./../config/user'),\n    docsConfig = require('./../config/docs'),\n\n    // install config\n    tasks      = require('./../config/tasks'),\n    release    = require('./../config/project/release'),\n\n    // shorthand\n    globs      = config.globs,\n    assets     = config.paths.assets,\n    output     = config.paths.output,\n\n    banner     = tasks.banner,\n    filenames  = tasks.filenames,\n    log        = tasks.log,\n    settings   = tasks.settings\n  ;\n\n  /*--------------\n      Packaged\n  ---------------*/\n\n  gulp.task('package uncompressed css', function() {\n    return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n      .pipe(plumber())\n      .pipe(dedupe())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(header(banner, settings.header))\n        .pipe(gulp.dest(output.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package compressed css', function() {\n    return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n      .pipe(plumber())\n      .pipe(dedupe())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(minifyCSS(settings.concatMinify))\n        .pipe(header(banner, settings.header))\n        .pipe(gulp.dest(output.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package uncompressed js', function() {\n    return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')\n      .pipe(plumber())\n      .pipe(dedupe())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concat(filenames.concatenatedJS))\n        .pipe(header(banner, settings.header))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package compressed js', function() {\n    return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.js')\n      .pipe(plumber())\n      .pipe(dedupe())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concat(filenames.concatenatedMinifiedJS))\n        .pipe(uglify(settings.concatUglify))\n        .pipe(header(banner, settings.header))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  /*--------------\n        RTL\n  ---------------*/\n\n  if(config.rtl) {\n\n    gulp.task('package uncompressed rtl css', function () {\n      return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignoredRTL + '.rtl.css')\n        .pipe(dedupe())\n        .pipe(replace(assets.uncompressed, assets.packaged))\n        .pipe(concatCSS(filenames.concatenatedRTLCSS, settings.concatCSS))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n          .pipe(header(banner, settings.header))\n          .pipe(gulp.dest(output.packaged))\n          .pipe(print(log.created))\n      ;\n    });\n\n    gulp.task('package compressed rtl css', function () {\n      return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignoredRTL + '.rtl.css')\n        .pipe(dedupe())\n        .pipe(replace(assets.uncompressed, assets.packaged))\n        .pipe(concatCSS(filenames.concatenatedMinifiedRTLCSS, settings.concatCSS))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n          .pipe(minifyCSS(settings.concatMinify))\n          .pipe(header(banner, settings.header))\n          .pipe(gulp.dest(output.packaged))\n          .pipe(print(log.created))\n      ;\n    });\n\n    gulp.task('package uncompressed docs css', function() {\n      return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n        .pipe(dedupe())\n        .pipe(plumber())\n        .pipe(replace(assets.uncompressed, assets.packaged))\n        .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n          .pipe(gulp.dest(output.packaged))\n          .pipe(print(log.created))\n      ;\n    });\n\n    gulp.task('package compressed docs css', function() {\n      return gulp.src(output.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n        .pipe(dedupe())\n        .pipe(plumber())\n        .pipe(replace(assets.uncompressed, assets.packaged))\n        .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))\n          .pipe(minifyCSS(settings.concatMinify))\n          .pipe(header(banner, settings.header))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n          .pipe(gulp.dest(output.packaged))\n          .pipe(print(log.created))\n      ;\n    });\n\n  }\n\n  /*--------------\n        Docs\n  ---------------*/\n\n  var\n    docsOutput = docsConfig.paths.output\n  ;\n\n  gulp.task('package uncompressed docs css', function() {\n    return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n      .pipe(dedupe())\n      .pipe(plumber())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concatCSS(filenames.concatenatedCSS, settings.concatCSS))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(docsOutput.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package compressed docs css', function() {\n    return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.css')\n      .pipe(dedupe())\n      .pipe(plumber())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concatCSS(filenames.concatenatedMinifiedCSS, settings.concatCSS))\n        .pipe(minifyCSS(settings.concatMinify))\n        .pipe(header(banner, settings.header))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(docsOutput.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package uncompressed docs js', function() {\n    return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.js')\n      .pipe(dedupe())\n      .pipe(plumber())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concat(filenames.concatenatedJS))\n        .pipe(header(banner, settings.header))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(docsOutput.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n  gulp.task('package compressed docs js', function() {\n    return gulp.src(docsOutput.uncompressed + '/**/' + globs.components + globs.ignored + '.js')\n      .pipe(dedupe())\n      .pipe(plumber())\n      .pipe(replace(assets.uncompressed, assets.packaged))\n      .pipe(concat(filenames.concatenatedMinifiedJS))\n        .pipe(uglify(settings.concatUglify))\n        .pipe(header(banner, settings.header))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(docsOutput.packaged))\n        .pipe(print(log.created))\n    ;\n  });\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/collections/rtl.js",
    "content": "/*******************************\n        Define Sub-Tasks\n*******************************/\n\nmodule.exports = function(gulp) {\n\n  var\n    // rtl\n    buildRTL     = require('./../rtl/build'),\n    watchRTL     = require('./../rtl/watch')\n  ;\n\n  gulp.task('watch-rtl', 'Build all files as RTL', watchRTL);\n  gulp.task('build-rtl', 'Watch files as RTL ', buildRTL);\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/github.js",
    "content": "/*******************************\n          GitHub Login\n*******************************/\n/*\n  Logs into GitHub using OAuth\n*/\n\nvar\n  fs          = require('fs'),\n  path        = require('path'),\n  githubAPI   = require('github'),\n\n  // stores oauth info for GitHub API\n  oAuthConfig = path.join(__dirname, 'oauth.js'),\n  oAuth       = fs.existsSync(oAuthConfig)\n    ? require(oAuthConfig)\n    : false,\n  github\n;\n\nif(!oAuth) {\n  console.error('Must add oauth token for GitHub in tasks/config/admin/oauth.js');\n}\n\ngithub = new githubAPI({\n  version    : '3.0.0',\n  debug      : true,\n  protocol   : 'https',\n  timeout    : 5000\n});\n\ngithub.authenticate({\n  type: 'oauth',\n  token: oAuth.token\n});\n\nmodule.exports = github;\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/oauth.example.js",
    "content": "/*\n Used to import GitHub Auth Token\n To Automate GitHub Updates\n*/\n\nmodule.exports = {\n  token    : 'AN-OAUTH2-TOKEN',\n  username : 'github-username',\n  name     : 'Your Name',\n  email    : 'user@email.com'\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/release.js",
    "content": "/*******************************\n        Release Settings\n*******************************/\n\n// release settings\nmodule.exports = {\n\n  // path to components for repos\n  source     : './dist/components/',\n\n  // modified asset paths for component repos\n  paths: {\n    source : '../themes/default/assets/',\n    output : 'assets/'\n  },\n\n  templates: {\n    bower    : './tasks/config/admin/templates/bower.json',\n    composer : './tasks/config/admin/templates/composer.json',\n    package  : './tasks/config/admin/templates/package.json',\n    meteor   : {\n      css       : './tasks/config/admin/templates/css-package.js',\n      component : './tasks/config/admin/templates/component-package.js',\n      less      : './tasks/config/admin/templates/less-package.js',\n    },\n    readme : './tasks/config/admin/templates/README.md',\n    notes  : './RELEASE-NOTES.md'\n  },\n\n  org         : 'Semantic-Org',\n  repo        : 'Semantic-UI',\n\n  // files created for package managers\n  files: {\n    composer : 'composer.json',\n    config   : 'semantic.json',\n    npm      : 'package.json',\n    meteor   : 'package.js'\n  },\n\n  // root name for distribution repos\n  distRepoRoot      : 'Semantic-UI-',\n\n  // root name for single component repos\n  componentRepoRoot : 'UI-',\n\n  // root name for package managers\n  packageRoot          : 'semantic-ui-',\n\n  // root path to repos\n  outputRoot  : '../repos/',\n\n  homepage    : 'http://www.semantic-ui.com',\n\n  // distributions that get separate repos\n  distributions: [\n    'LESS',\n    'CSS'\n  ],\n\n  // components that get separate repositories for bower/npm\n  components : [\n    'accordion',\n    'ad',\n    'api',\n    'breadcrumb',\n    'button',\n    'card',\n    'checkbox',\n    'comment',\n    'container',\n    'dimmer',\n    'divider',\n    'dropdown',\n    'embed',\n    'feed',\n    'flag',\n    'form',\n    'grid',\n    'header',\n    'icon',\n    'image',\n    'input',\n    'item',\n    'label',\n    'list',\n    'loader',\n    'menu',\n    'message',\n    'modal',\n    'nag',\n    'popup',\n    'progress',\n    'rail',\n    'rating',\n    'reset',\n    'reveal',\n    'search',\n    'segment',\n    'shape',\n    'sidebar',\n    'site',\n    'statistic',\n    'step',\n    'sticky',\n    'tab',\n    'table',\n    'transition',\n    'visibility'\n  ]\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/README.md",
    "content": "# Semantic {Component}\n\nThis repository contains pre-compiled {component} files using the default themes. This is intended for use in projects that do not need all the bells and whistles of Semantic UI, and want to keep file size to a minimum.\n\nFor the latest changes please see the [Release Notes](https://github.com/Semantic-Org/UI-{Component}/blob/master/RELEASE-NOTES.md)\n\n**Special Note**\nAn update in `2.0.8` has fixed an issue which may have prevented some single component modules from working correctly. Please see notes in [this pull request](https://github.com/Semantic-Org/Semantic-UI/pull/2816).\n\nIf you're looking for the full version of Semantic including all components and build tools [check out the main project repository](https://github.com/Semantic-Org/Semantic-UI/tree/1.0)\n\n#### To install with Bower\n```\nbower install semantic-ui-{component}\n```\n\n#### To install with NPM\n```\nnpm install semantic-ui-{component}\n```\n\n#### To install with Meteor\n```\nmeteor add semantic:ui-{component}\n```\n\n\n## Addendum\n\nThis element's definitions (required class names, html structures) are available in the [UI Docs](http://www.semantic-ui.com)\n\nPlease consider checking out [all the benefits to theming](http://www.learnsemantic.com/guide/expert.html) before using these stand-alone releases.\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/bower.json",
    "content": "{\n  \"name\"        : \"Component\",\n  \"description\" : \"Component distribution\",\n  \"homepage\"    : \"http://www.semantic-ui.com\",\n  \"author\": {\n    \"name\" : \"Jack Lukic\",\n    \"web\"  : \"http://www.jacklukic.com\"\n  },\n  \"ignore\": [\n    \"./index.js\"\n  ],\n  \"keywords\": [\n    \"semantic\",\n    \"ui\",\n    \"css3\",\n    \"framework\"\n  ],\n  \"license\" : [\n    \"http://semantic-ui.mit-license.org/\"\n  ],\n  \"ignore\": [\n    \"docs\",\n    \"node\",\n    \"server\",\n    \"spec\",\n    \"src\",\n    \"test\"\n  ]\n}\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/component-package.js",
    "content": "\nPackage.describe({\n  name    : 'semantic:ui-{component}',\n  summary : 'Semantic UI - {Component}: Single component release',\n  version : '{version}',\n  git     : 'git://github.com/Semantic-Org/UI-{Component}.git',\n});\n\nPackage.onUse(function(api) {\n  api.versionsFrom('1.0');\n  api.addFiles([\n    {files}\n  ], 'client');\n});\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/composer.json",
    "content": "{\n  \"name\"        : \"semantic/ui\",\n  \"description\" : \"Semantic empowers designers and developers by creating a shared vocabulary for UI.\",\n  \"homepage\"    : \"http://www.semantic-ui.com\",\n  \"authors\": [\n    {\n      \"name\" : \"Jack Lukic\",\n      \"email\": \"jacklukic@gmail.com\",\n      \"web\"  : \"http://www.jacklukic.com\",\n      \"role\" : \"Creator\"\n    }\n  ],\n  \"keywords\": [\n    \"semantic\",\n    \"ui\",\n    \"css\",\n    \"framework\"\n  ],\n  \"license\" : \"MIT\"\n}"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/css-package.js",
    "content": "var\n  where = 'client' // Adds files only to the client\n;\n\nPackage.describe({\n  name    : 'semantic:ui-css',\n  summary : 'Semantic UI - CSS Release of Semantic UI',\n  version : '{version}',\n  git     : 'git://github.com/Semantic-Org/Semantic-UI-CSS.git',\n});\n\nPackage.onUse(function(api) {\n\n  api.versionsFrom('1.0');\n\n  api.use('jquery', 'client');\n\n  api.addFiles([\n    // icons\n    'themes/default/assets/fonts/icons.eot',\n    'themes/default/assets/fonts/icons.svg',\n    'themes/default/assets/fonts/icons.ttf',\n    'themes/default/assets/fonts/icons.woff',\n    'themes/default/assets/fonts/icons.woff2',\n\n    // flags\n    'themes/default/assets/images/flags.png',\n\n    // release\n    'semantic.css',\n    'semantic.js'\n  ], 'client');\n\n});\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/less-package.js",
    "content": "var\n  where = 'client' // Adds files only to the client\n;\n\nPackage.describe({\n  name    : 'semantic:ui',\n  summary : 'Semantic UI - LESS Release of Semantic UI',\n  version : '{version}',\n  git     : 'git://github.com/Semantic-Org/Semantic-UI-LESS.git',\n});\n\nPackage.onUse(function(api) {\n\n  api.versionsFrom('1.0');\n  api.use('less', 'client');\n\n  api.addFiles([\n    {files}\n  ], 'client');\n\n});\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/admin/templates/package.json",
    "content": "{\n  \"name\": \"semantic\",\n  \"version\": \"1.0.0\",\n  \"title\": \"Semantic UI\",\n  \"description\": \"Semantic empowers designers and developers by creating a shared vocabulary for UI.\",\n  \"homepage\": \"http://www.semantic-ui.com\",\n  \"author\": \"Jack Lukic <jack@semantic-ui.com>\",\n  \"license\": \"MIT\",\n  \"repository\": {\n    \"type\": \"git\",\n    \"url\": \"git://github.com/Semantic-Org/Semantic-UI.git\"\n  },\n  \"bugs\": {\n    \"url\": \"https://github.com/Semantic-Org/Semantic-UI/issues\"\n  },\n  \"devDependencies\": {}\n}\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/defaults.js",
    "content": "/*******************************\n          Default Paths\n*******************************/\n\nmodule.exports = {\n\n  // base path added to all other paths\n  base : '',\n\n  // base path when installed with npm\n  pmRoot: 'semantic/',\n\n  // octal permission for output files, i.e. 644 (false does not adjust)\n  permission : 744,\n\n  // whether to generate rtl files\n  rtl        : false,\n\n  // file paths\n  files: {\n    config   : 'semantic.json',\n    site     : 'src/site',\n    theme    : 'src/theme.config'\n  },\n\n  // folder paths\n  paths: {\n    source: {\n      config      : 'src/theme.config',\n      definitions : 'src/definitions/',\n      site        : 'src/site/',\n      themes      : 'src/themes/'\n    },\n    output: {\n      packaged     : 'dist/',\n      uncompressed : 'dist/components/',\n      compressed   : 'dist/components/',\n      themes       : 'dist/themes/'\n    },\n    clean : 'dist/'\n  },\n\n  // components to include in package\n  components: [\n\n    // global\n    'reset',\n    'site',\n\n    // elements\n    'button',\n    'container',\n    'divider',\n    'flag',\n    'header',\n    'icon',\n    'image',\n    'input',\n    'label',\n    'list',\n    'loader',\n    'rail',\n    'reveal',\n    'segment',\n    'step',\n\n    // collections\n    'breadcrumb',\n    'form',\n    'grid',\n    'menu',\n    'message',\n    'table',\n\n    // views\n    'ad',\n    'card',\n    'comment',\n    'feed',\n    'item',\n    'statistic',\n\n    // modules\n    'accordion',\n    'checkbox',\n    'dimmer',\n    'dropdown',\n    'embed',\n    'modal',\n    'nag',\n    'popup',\n    'progress',\n    'rating',\n    'search',\n    'shape',\n    'sidebar',\n    'sticky',\n    'tab',\n    'transition',\n\n    // behaviors\n    'api',\n    'form',\n    'state',\n    'visibility'\n  ],\n\n  // whether to load admin tasks\n  admin: false,\n\n  // globs used for matching file patterns\n  globs      : {\n    ignored    : '!(*.min|*.map|*.rtl)',\n    ignoredRTL : '!(*.min|*.map)'\n  }\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/docs.js",
    "content": "/*******************************\n             Docs\n*******************************/\n\n/* Paths used for \"serve-docs\" and \"build-docs\" tasks */\nmodule.exports = {\n  base: '',\n  globs: {\n    eco: '**/*.html.eco'\n  },\n  paths: {\n    clean: '../docs/out/dist/',\n    source: {\n      config      : 'src/theme.config',\n      definitions : 'src/definitions/',\n      site        : 'src/site/',\n      themes      : 'src/themes/'\n    },\n    output: {\n      examples     : '../docs/out/examples/',\n      less         : '../docs/out/src/',\n      metadata     : '../docs/out/',\n      packaged     : '../docs/out/dist/',\n      uncompressed : '../docs/out/dist/components/',\n      compressed   : '../docs/out/dist/components/',\n      themes       : '../docs/out/dist/themes/'\n    },\n    template: {\n      eco: '../docs/server/documents/'\n    },\n  }\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/npm/gulpfile.js",
    "content": "/*******************************\n            Set-up\n*******************************/\n\nvar\n  gulp         = require('gulp-help')(require('gulp')),\n\n  // read user config to know what task to load\n  config       = require('./tasks/config/user'),\n\n  // watch changes\n  watch        = require('./tasks/watch'),\n\n  // build all files\n  build        = require('./tasks/build'),\n  buildJS      = require('./tasks/build/javascript'),\n  buildCSS     = require('./tasks/build/css'),\n  buildAssets  = require('./tasks/build/assets'),\n\n  // utility\n  clean        = require('./tasks/clean'),\n  version      = require('./tasks/version'),\n\n  // docs tasks\n  serveDocs    = require('./tasks/docs/serve'),\n  buildDocs    = require('./tasks/docs/build'),\n\n  // rtl\n  buildRTL     = require('./tasks/rtl/build'),\n  watchRTL     = require('./tasks/rtl/watch')\n;\n\n\n/*******************************\n             Tasks\n*******************************/\n\ngulp.task('default', false, [\n  'watch'\n]);\n\ngulp.task('watch', 'Watch for site/theme changes', watch);\n\ngulp.task('build', 'Builds all files from source', build);\ngulp.task('build-javascript', 'Builds all javascript from source', buildJS);\ngulp.task('build-css', 'Builds all css from source', buildCSS);\ngulp.task('build-assets', 'Copies all assets from source', buildAssets);\n\ngulp.task('clean', 'Clean dist folder', clean);\ngulp.task('version', 'Displays current version of Semantic', version);\n\n/*--------------\n      Docs\n---------------*/\n\n/*\n  Lets you serve files to a local documentation instance\n  https://github.com/Semantic-Org/Semantic-UI-Docs/\n*/\n\ngulp.task('serve-docs', 'Serve file changes to SUI Docs', serveDocs);\ngulp.task('build-docs', 'Build all files and add to SUI Docs', buildDocs);\n\n\n/*--------------\n      RTL\n---------------*/\n\nif(config.rtl) {\n  gulp.task('watch-rtl', 'Watch files as RTL', watchRTL);\n  gulp.task('build-rtl', 'Build all files as RTL', buildRTL);\n}\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/project/config.js",
    "content": "/*******************************\n            Set-up\n*******************************/\n\nvar\n  extend   = require('extend'),\n  fs       = require('fs'),\n  path     = require('path'),\n\n  defaults = require('../defaults')\n;\n\n\n/*******************************\n            Exports\n*******************************/\n\nmodule.exports = {\n\n  getPath: function(file, directory) {\n    var\n      configPath,\n      walk = function(directory) {\n        var\n          nextDirectory = path.resolve( path.join(directory, path.sep, '..') ),\n          currentPath   = path.normalize( path.join(directory, file) )\n        ;\n        if( fs.existsSync(currentPath) ) {\n          // found file\n          configPath = path.normalize(directory);\n          return;\n        }\n        else {\n          // reached file system root, let's stop\n          if(nextDirectory == directory) {\n            return;\n          }\n          // otherwise recurse\n          walk(nextDirectory, file);\n        }\n      }\n    ;\n\n    // start walk from outside require-dot-files directory\n    file      = file || defaults.files.config;\n    directory = directory || path.join(__dirname, path.sep, '..');\n    walk(directory);\n    return configPath || '';\n  },\n\n  // adds additional derived values to a config object\n  addDerivedValues: function(config) {\n\n    config = config || extend(false, {}, defaults);\n\n    /*--------------\n       File Paths\n    ---------------*/\n\n    var\n      configPath = this.getPath(),\n      sourcePaths = {},\n      outputPaths = {},\n      folder\n    ;\n\n    // resolve paths (config location + base + path)\n    for(folder in config.paths.source) {\n      if(config.paths.source.hasOwnProperty(folder)) {\n        sourcePaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.source[folder]));\n      }\n    }\n    for(folder in config.paths.output) {\n      if(config.paths.output.hasOwnProperty(folder)) {\n        outputPaths[folder] = path.resolve(path.join(configPath, config.base, config.paths.output[folder]));\n      }\n    }\n\n    // set config paths to full paths\n    config.paths.source = sourcePaths;\n    config.paths.output = outputPaths;\n\n    // resolve \"clean\" command path\n    config.paths.clean = path.resolve( path.join(configPath, config.base, config.paths.clean) );\n\n    /*--------------\n        CSS URLs\n    ---------------*/\n\n    // determine asset paths in css by finding relative path between themes and output\n    // force forward slashes\n\n    config.paths.assets = {\n      source       : '../../themes', // source asset path is always the same\n      uncompressed : './' + path.relative(config.paths.output.uncompressed, config.paths.output.themes).replace(/\\\\/g, '/'),\n      compressed   : './' + path.relative(config.paths.output.compressed, config.paths.output.themes).replace(/\\\\/g, '/'),\n      packaged     : './' + path.relative(config.paths.output.packaged, config.paths.output.themes).replace(/\\\\/g, '/')\n    };\n\n    /*--------------\n       Permission\n    ---------------*/\n\n    if(config.permission) {\n      config.hasPermissions = true;\n    }\n    else {\n      // pass blank object to avoid causing errors\n      config.permission     = {};\n      config.hasPermissions = false;\n    }\n\n    /*--------------\n         Globs\n    ---------------*/\n\n    if(!config.globs) {\n      config.globs = {};\n    }\n\n    // remove duplicates from component array\n    if(config.components instanceof Array) {\n      config.components = config.components.filter(function(component, index) {\n        return config.components.indexOf(component) == index;\n      });\n    }\n\n    // takes component object and creates file glob matching selected components\n    config.globs.components = (typeof config.components == 'object')\n      ? (config.components.length > 1)\n        ? '{' + config.components.join(',') + '}'\n        : config.components[0]\n      : '{' + defaults.components.join(',') + '}'\n    ;\n\n    return config;\n\n  }\n\n};\n\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/project/install.js",
    "content": "/*******************************\n            Set-up\n*******************************/\n\nvar\n  fs             = require('fs'),\n  path           = require('path'),\n  defaults       = require('../defaults'),\n  release        = require('./release'),\n\n  requireDotFile = require('require-dot-file')\n;\n\n/*******************************\n          When to Ask\n*******************************/\n\n/* Preconditions for install questions */\n\nvar when = {\n\n  // path\n  changeRoot: function(questions) {\n    return (questions.useRoot !== undefined && questions.useRoot !== true);\n  },\n\n  // permissions\n  changePermissions: function(questions) {\n    return (questions.changePermissions && questions.changePermissions === true);\n  },\n\n  // install\n  hasConfig: function() {\n    return requireDotFile('semantic.json', process.cwd());\n  },\n\n  allowOverwrite: function(questions) {\n    return (questions.overwrite === undefined || questions.overwrite == 'yes');\n  },\n  notAuto: function(questions) {\n    return (questions.install !== 'auto' && (questions.overwrite === undefined || questions.overwrite == 'yes'));\n  },\n  custom: function(questions) {\n    return (questions.install === 'custom' && (questions.overwrite === undefined || questions.overwrite == 'yes'));\n  },\n  express: function(questions) {\n    return (questions.install === 'express' && (questions.overwrite === undefined || questions.overwrite == 'yes'));\n  },\n\n  // customize\n  customize: function(questions) {\n    return (questions.customize === true);\n  },\n  primaryColor: function(questions) {\n    return (questions.primaryColor);\n  },\n  secondaryColor: function(questions) {\n    return (questions.secondaryColor);\n  }\n};\n\n/*******************************\n        Response Filters\n*******************************/\n\n/* Filters to user input from install questions */\n\nvar filter = {\n  removeTrailingSlash: function(path) {\n    return path.replace(/(\\/$|\\\\$)+/mg, '');\n  }\n};\n\n/*******************************\n          Configuration\n*******************************/\n\nmodule.exports = {\n\n  // check whether install is setup\n  isSetup: function() {\n    return when.hasConfig();\n  },\n\n  // detect whether there is a semantic.json configuration and that the auto-install option is set to true\n  shouldAutoInstall: function() {\n    var\n      config = when.hasConfig()\n    ;\n    return config['autoInstall'];\n  },\n\n  // checks if files are in a PM directory\n  getPackageManager: function(directory) {\n    var\n      // returns last matching result (avoid sub-module detection)\n      walk = function(directory) {\n        var\n          pathArray     = directory.split(path.sep),\n          folder        = pathArray[pathArray.length - 1],\n          nextDirectory = path.join(directory, path.sep, '..')\n        ;\n        if( folder == 'bower_components') {\n          return {\n            name: 'Bower',\n            root: nextDirectory\n          };\n        }\n        else if(folder == 'node_modules') {\n         return {\n            name: 'NPM',\n            root: nextDirectory\n          };\n        }\n        else if(folder == 'composer') {\n         return {\n            name: 'Composer',\n            root: nextDirectory\n          };\n        }\n        if(path.resolve(directory) == path.resolve(nextDirectory)) {\n          return false;\n        }\n        // recurse downward\n        return walk(nextDirectory);\n      }\n    ;\n    // start walk from current directory if none specified\n    directory = directory || (__dirname + path.sep);\n    return walk(directory);\n  },\n\n  // checks if files is PMed submodule\n  isSubModule: function(directory) {\n    var\n      moduleFolders = 0,\n      walk = function(directory) {\n        var\n          pathArray     = directory.split(path.sep),\n          folder        = pathArray[pathArray.length - 2],\n          nextDirectory = path.join(directory, path.sep, '..')\n        ;\n        if( folder == 'bower_components') {\n          moduleFolders++;\n        }\n        else if(folder == 'node_modules') {\n          moduleFolders++;\n        }\n        else if(folder == 'composer') {\n          moduleFolders++;\n        }\n        if(path.resolve(directory) == path.resolve(nextDirectory)) {\n          return (moduleFolders > 1);\n        }\n        // recurse downward\n        return walk(nextDirectory);\n      }\n    ;\n    // start walk from current directory if none specified\n    directory = directory || (__dirname + path.sep);\n    return walk(directory);\n  },\n\n\n  createJSON: function(answers) {\n    var\n      json = {\n        paths: {\n          source: {},\n          output: {}\n        }\n      }\n    ;\n\n    // add components\n    if(answers.components) {\n      json.components = answers.components;\n    }\n\n    // add rtl choice\n    if(answers.rtl) {\n      json.rtl = answers.rtl;\n    }\n\n    // add permissions\n    if(answers.permission) {\n      json.permission = answers.permission;\n    }\n\n    // add path to semantic\n    if(answers.semanticRoot) {\n      json.base = path.normalize(answers.semanticRoot);\n    }\n\n    // record version number to avoid re-installing on same version\n    json.version = release.version;\n\n    // add dist folder paths\n    if(answers.dist) {\n      answers.dist = path.normalize(answers.dist);\n\n      json.paths.output = {\n        packaged     : path.normalize(answers.dist + '/'),\n        uncompressed : path.normalize(answers.dist + '/components/'),\n        compressed   : path.normalize(answers.dist + '/components/'),\n        themes       : path.normalize(answers.dist + '/themes/')\n      };\n    }\n\n    // add site path\n    if(answers.site) {\n      json.paths.source.site = path.normalize(answers.site + '/');\n    }\n    if(answers.packaged) {\n      json.paths.output.packaged = path.normalize(answers.packaged + '/');\n    }\n    if(answers.compressed) {\n      json.paths.output.compressed = path.normalize(answers.compressed + '/');\n    }\n    if(answers.uncompressed) {\n      json.paths.output.uncompressed = path.normalize(answers.uncompressed + '/');\n    }\n    return json;\n  },\n\n  // files cleaned up after install\n  setupFiles: [\n    './src/theme.config.example',\n    './semantic.json.example',\n    './src/_site'\n  ],\n\n  regExp: {\n    // used to match siteFolder variable in theme.less\n    siteVariable: /@siteFolder .*\\'(.*)/mg\n  },\n\n  // source paths (when installing)\n  source: {\n    config       : './semantic.json.example',\n    definitions  : './src/definitions',\n    gulpFile     : './gulpfile.js',\n    lessImport   : './src/semantic.less',\n    site         : './src/_site',\n    tasks        : './tasks',\n    themeConfig  : './src/theme.config.example',\n    themeImport  : './src/theme.less',\n    themes       : './src/themes',\n    defaultTheme : './src/themes/default',\n    userGulpFile : './tasks/config/npm/gulpfile.js'\n  },\n\n  // expected final filenames\n  files: {\n    config      : 'semantic.json',\n    lessImport  : 'src/semantic.less',\n    site        : 'src/site',\n    themeConfig : 'src/theme.config',\n    themeImport : 'src/theme.less'\n  },\n\n  // folder paths to files relative to root\n  folders: {\n    config       : './',\n    definitions  : 'src/definitions/',\n    lessImport   : 'src/',\n    modules      : 'node_modules/',\n    site         : 'src/site/',\n    tasks        : 'tasks/',\n    themeConfig  : 'src/',\n    themeImport  : 'src/',\n    themes       : 'src/themes/',\n\n    defaultTheme : 'default/' // only path that is relative to another directory and not root\n  },\n\n  // questions asked during install\n  questions: {\n\n    root: [\n      {\n        type    : 'list',\n        name    : 'useRoot',\n        message :\n          '{packageMessage} Is this your project folder? {root}',\n        choices: [\n          {\n            name  : 'Yes',\n            value : true\n          },\n          {\n            name  : 'No, let me specify',\n            value : false\n          }\n        ]\n      },\n      {\n        type    : 'input',\n        name    : 'customRoot',\n        message : 'Please enter the absolute path to your project root',\n        default : '/my/project/path',\n        when    : when.changeRoot\n      },\n      {\n        type    : 'input',\n        name    : 'semanticRoot',\n        message : 'Where should we put Semantic UI inside your project?',\n        default : 'semantic/'\n      }\n    ],\n\n    setup: [\n      {\n        type: 'list',\n        name: 'overwrite',\n        message: 'It looks like you have a semantic.json file already.',\n        when: when.hasConfig,\n        choices: [\n          {\n            name: 'Yes, extend my current settings.',\n            value: 'yes'\n          },\n          {\n            name: 'Skip install',\n            value: 'no'\n          }\n        ]\n      },\n      {\n        type: 'list',\n        name: 'install',\n        message: 'Set-up Semantic UI',\n        when: when.allowOverwrite,\n        choices: [\n          {\n            name: 'Automatic (Use default locations and all components)',\n            value: 'auto'\n          },\n          {\n            name: 'Express (Set components and output folder)',\n            value: 'express'\n          },\n          {\n            name: 'Custom (Customize all src/dist values)',\n            value: 'custom'\n          }\n        ]\n      },\n      {\n        type: 'checkbox',\n        name: 'components',\n        message: 'What components should we include in the package?',\n\n        // duplicated manually from tasks/defaults.js with additional property\n        choices: [\n          { name: \"reset\", checked: true },\n          { name: \"site\", checked: true },\n          { name: \"button\", checked: true },\n          { name: \"container\", checked: true },\n          { name: \"divider\", checked: true },\n          { name: \"flag\", checked: true },\n          { name: \"header\", checked: true },\n          { name: \"icon\", checked: true },\n          { name: \"image\", checked: true },\n          { name: \"input\", checked: true },\n          { name: \"label\", checked: true },\n          { name: \"list\", checked: true },\n          { name: \"loader\", checked: true },\n          { name: \"rail\", checked: true },\n          { name: \"reveal\", checked: true },\n          { name: \"segment\", checked: true },\n          { name: \"step\", checked: true },\n          { name: \"breadcrumb\", checked: true },\n          { name: \"form\", checked: true },\n          { name: \"grid\", checked: true },\n          { name: \"menu\", checked: true },\n          { name: \"message\", checked: true },\n          { name: \"table\", checked: true },\n          { name: \"ad\", checked: true },\n          { name: \"card\", checked: true },\n          { name: \"comment\", checked: true },\n          { name: \"feed\", checked: true },\n          { name: \"item\", checked: true },\n          { name: \"statistic\", checked: true },\n          { name: \"accordion\", checked: true },\n          { name: \"checkbox\", checked: true },\n          { name: \"dimmer\", checked: true },\n          { name: \"dropdown\", checked: true },\n          { name: \"embed\", checked: true },\n          { name: \"modal\", checked: true },\n          { name: \"nag\", checked: true },\n          { name: \"popup\", checked: true },\n          { name: \"progress\", checked: true },\n          { name: \"rating\", checked: true },\n          { name: \"search\", checked: true },\n          { name: \"shape\", checked: true },\n          { name: \"sidebar\", checked: true },\n          { name: \"sticky\", checked: true },\n          { name: \"tab\", checked: true },\n          { name: \"transition\", checked: true },\n          { name: \"api\", checked: true },\n          { name: \"form\", checked: true },\n          { name: \"state\", checked: true },\n          { name: \"visibility\", checked: true }\n        ],\n        when: when.notAuto\n      },\n      {\n        type: 'list',\n        name: 'changePermissions',\n        when: when.notAuto,\n        message: 'Should we set permissions on outputted files?',\n        choices: [\n          {\n            name: 'No',\n            value: false\n          },\n          {\n            name: 'Yes',\n            value: true\n          }\n        ]\n      },\n      {\n        type: 'input',\n        name: 'permission',\n        message: 'What octal file permission should outputted files receive?',\n        default: defaults.permission,\n        when: when.changePermissions\n      },\n      {\n        type: 'list',\n        name: 'rtl',\n        message: 'Do you use a RTL (Right-To-Left) language?',\n        when: when.notAuto,\n        choices: [\n          {\n            name: 'No',\n            value: false\n          },\n          {\n            name: 'Yes',\n            value: true\n          },\n          {\n            name: 'Build Both',\n            value: 'both'\n          }\n        ]\n      },\n      {\n        type: 'input',\n        name: 'dist',\n        message: 'Where should we output Semantic UI?',\n        default: defaults.paths.output.packaged,\n        filter: filter.removeTrailingSlash,\n        when: when.express\n      },\n      {\n        type: 'input',\n        name: 'site',\n        message: 'Where should we put your site folder?',\n        default: defaults.paths.source.site,\n        filter: filter.removeTrailingSlash,\n        when: when.custom\n      },\n      {\n        type: 'input',\n        name: 'packaged',\n        message: 'Where should we output a packaged version?',\n        default: defaults.paths.output.packaged,\n        filter: filter.removeTrailingSlash,\n        when: when.custom\n      },\n      {\n        type: 'input',\n        name: 'compressed',\n        message: 'Where should we output compressed components?',\n        default: defaults.paths.output.compressed,\n        filter: filter.removeTrailingSlash,\n        when: when.custom\n      },\n      {\n        type: 'input',\n        name: 'uncompressed',\n        message: 'Where should we output uncompressed components?',\n        default: defaults.paths.output.uncompressed,\n        filter: filter.removeTrailingSlash,\n        when: when.custom\n      }\n    ],\n\n\n    cleanup: [\n      {\n        type: 'list',\n        name: 'cleanup',\n        message: 'Should we remove set-up files?',\n        choices: [\n          {\n            name: 'Yes (re-install will require redownloading semantic).',\n            value: 'yes'\n          },\n          {\n            name: 'No Thanks',\n            value: 'no'\n          }\n        ]\n      },\n      {\n        type: 'list',\n        name: 'build',\n        message: 'Do you want to build Semantic now?',\n        choices: [\n          {\n            name: 'Yes',\n            value: 'yes'\n          },\n          {\n            name: 'No',\n            value: 'no'\n          }\n        ]\n      },\n    ],\n    site: [\n      {\n        type: 'list',\n        name: 'customize',\n        message: 'You have not yet customized your site, can we help you do that?',\n        choices: [\n          {\n            name: 'Yes, ask me a few questions',\n            value: true\n          },\n          {\n            name: 'No I\\'ll do it myself',\n            value: false\n          }\n        ]\n      },\n      {\n        type: 'list',\n        name: 'headerFont',\n        message: 'Select your header font',\n        choices: [\n          {\n            name: 'Helvetica Neue, Arial, sans-serif',\n            value: 'Helvetica Neue, Arial, sans-serif;'\n          },\n          {\n            name: 'Lato (Google Fonts)',\n            value: 'Lato'\n          },\n          {\n            name: 'Open Sans (Google Fonts)',\n            value: 'Open Sans'\n          },\n          {\n            name: 'Source Sans Pro (Google Fonts)',\n            value: 'Source Sans Pro'\n          },\n          {\n            name: 'Droid (Google Fonts)',\n            value: 'Droid'\n          },\n          {\n            name: 'I\\'ll choose on my own',\n            value: false\n          }\n        ],\n        when: when.customize\n      },\n      {\n        type: 'list',\n        name: 'pageFont',\n        message: 'Select your page font',\n        choices: [\n          {\n            name: 'Helvetica Neue, Arial, sans-serif',\n            value: 'Helvetica Neue, Arial, sans-serif;'\n          },\n          {\n            name: 'Lato (Import from Google Fonts)',\n            value: 'Lato'\n          },\n          {\n            name: 'Open Sans (Import from Google Fonts)',\n            value: 'Open Sans'\n          },\n          {\n            name: 'Source Sans Pro (Import from Google Fonts)',\n            value: 'Source Sans Pro'\n          },\n          {\n            name: 'Droid (Google Fonts)',\n            value: 'Droid'\n          },\n          {\n            name: 'I\\'ll choose on my own',\n            value: false\n          }\n        ],\n        when: when.customize\n      },\n      {\n        type: 'list',\n        name: 'fontSize',\n        message: 'Select your base font size',\n        default: '14px',\n        choices: [\n          {\n            name: '12px',\n          },\n          {\n            name: '13px',\n          },\n          {\n            name: '14px (Recommended)',\n            value: '14px'\n          },\n          {\n            name: '15px',\n          },\n          {\n            name: '16px',\n          },\n          {\n            name: 'I\\'ll choose on my own',\n            value: false\n          }\n        ],\n        when: when.customize\n      },\n      {\n        type: 'list',\n        name: 'primaryColor',\n        message: 'Select the closest name for your primary brand color',\n        default: '14px',\n        choices: [\n          {\n            name: 'Blue'\n          },\n          {\n            name: 'Green'\n          },\n          {\n            name: 'Orange'\n          },\n          {\n            name: 'Pink'\n          },\n          {\n            name: 'Purple'\n          },\n          {\n            name: 'Red'\n          },\n          {\n            name: 'Teal'\n          },\n          {\n            name: 'Yellow'\n          },\n          {\n            name: 'Black'\n          },\n          {\n            name: 'I\\'ll choose on my own',\n            value: false\n          }\n        ],\n        when: when.customize\n      },\n      {\n        type: 'input',\n        name: 'PrimaryHex',\n        message: 'Enter a hexcode for your primary brand color',\n        when: when.primaryColor\n      },\n      {\n        type: 'list',\n        name: 'secondaryColor',\n        message: 'Select the closest name for your secondary brand color',\n        default: '14px',\n        choices: [\n          {\n            name: 'Blue'\n          },\n          {\n            name: 'Green'\n          },\n          {\n            name: 'Orange'\n          },\n          {\n            name: 'Pink'\n          },\n          {\n            name: 'Purple'\n          },\n          {\n            name: 'Red'\n          },\n          {\n            name: 'Teal'\n          },\n          {\n            name: 'Yellow'\n          },\n          {\n            name: 'Black'\n          },\n          {\n            name: 'I\\'ll choose on my own',\n            value: false\n          }\n        ],\n        when: when.customize\n      },\n      {\n        type: 'input',\n        name: 'secondaryHex',\n        message: 'Enter a hexcode for your secondary brand color',\n        when: when.secondaryColor\n      }\n    ]\n\n  },\n\n  settings: {\n\n    /* Rename Files */\n    rename: {\n      json : { extname : '.json' }\n    },\n\n    /* Copy Install Folders */\n    wrench: {\n\n      // overwrite existing files update & install (default theme / definition)\n      overwrite: {\n        forceDelete       : true,\n        excludeHiddenUnix : true,\n        preserveFiles     : false\n      },\n\n      // only create files that don't exist (site theme update)\n      merge: {\n        forceDelete       : false,\n        excludeHiddenUnix : true,\n        preserveFiles     : true\n      }\n\n    }\n  }\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/project/release.js",
    "content": "/*******************************\n         Release Config\n*******************************/\n\nvar\n  requireDotFile = require('require-dot-file'),\n  config,\n  npmPackage,\n  version\n;\n\n\n/*******************************\n         Derived Values\n*******************************/\n\ntry {\n  config = requireDotFile('semantic.json');\n}\ncatch(error) {}\n\n\ntry {\n  npmPackage = require('../../../package.json');\n}\ncatch(error) {\n  // generate fake package\n  npmPackage = {\n    name: 'Unknown',\n    version: 'x.x'\n  };\n}\n\n// looks for version in config or package.json (whichever is available)\nversion = (npmPackage && npmPackage.version !== undefined && npmPackage.name == 'semantic-ui')\n  ? npmPackage.version\n  : config.version\n;\n\n\n/*******************************\n             Export\n*******************************/\n\nmodule.exports = {\n\n  title      : 'Semantic UI',\n  repository : 'https://github.com/Semantic-Org/Semantic-UI',\n  url        : 'http://www.semantic-ui.com/',\n\n  banner: ''\n    + ' /*' + '\\n'\n    + ' * # <%= title %> - <%= version %>' + '\\n'\n    + ' * <%= repository %>' + '\\n'\n    + ' * <%= url %>' + '\\n'\n    + ' *' + '\\n'\n    + ' * Copyright 2014 Contributors' + '\\n'\n    + ' * Released under the MIT license' + '\\n'\n    + ' * http://opensource.org/licenses/MIT' + '\\n'\n    + ' *' + '\\n'\n    + ' */' + '\\n',\n\n  version    : version\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/tasks.js",
    "content": "var\n  console = require('better-console'),\n  config  = require('./user'),\n  release = require('./project/release')\n;\n\n\nmodule.exports = {\n\n  banner : release.banner,\n\n  log: {\n    created: function(file) {\n      return 'Created: ' + file;\n    },\n    modified: function(file) {\n      return 'Modified: ' + file;\n    }\n  },\n\n  filenames: {\n    concatenatedCSS            : 'semantic.css',\n    concatenatedJS             : 'semantic.js',\n    concatenatedMinifiedCSS    : 'semantic.min.css',\n    concatenatedMinifiedJS     : 'semantic.min.js',\n    concatenatedRTLCSS         : 'semantic.rtl.css',\n    concatenatedMinifiedRTLCSS : 'semantic.rtl.min.css'\n  },\n\n  regExp: {\n\n    comments: {\n\n      // remove all comments from config files (.variable)\n      variables : {\n        in  : /(\\/\\*[\\s\\S]+?\\*\\/+)[\\s\\S]+?\\/\\* End Config \\*\\//,\n        out : '$1',\n      },\n\n      // add version to first comment\n      license: {\n        in  : /(^\\/\\*[\\s\\S]+)(# Semantic UI )([\\s\\S]+?\\*\\/)/,\n        out : '$1$2' + release.version + ' $3'\n      },\n\n      // adds uniform spacing around comments\n      large: {\n        in  : /(\\/\\*\\*\\*\\*[\\s\\S]+?\\*\\/)/mg,\n        out : '\\n\\n$1\\n'\n      },\n      small: {\n        in  : /(\\/\\*---[\\s\\S]+?\\*\\/)/mg,\n        out : '\\n$1\\n'\n      },\n      tiny: {\n        in  : /(\\/\\* [\\s\\S]+? \\*\\/)/mg,\n        out : '\\n$1'\n      }\n    },\n\n    theme: /.*(\\/|\\\\)themes(\\/|\\\\).*?(?=(\\/|\\\\))/mg\n\n  },\n\n  settings: {\n\n    /* Remove Files in Clean */\n    del: {\n      silent : true\n    },\n\n    concatCSS: {\n      rebaseUrls: false\n    },\n\n    /* Comment Banners */\n    header: {\n      title      : release.title,\n      version    : release.version,\n      repository : release.repository,\n      url        : release.url\n    },\n\n    plumber: {\n      less: {\n        errorHandler: function(error) {\n          var\n            regExp = {\n              variable : /@(\\S.*?)\\s/,\n              theme    : /themes[\\/\\\\]+(.*?)[\\/\\\\].*/,\n              element  : /[\\/\\\\]([^\\/\\\\*]*)\\.overrides/\n            },\n            theme,\n            element\n          ;\n          if(error.filename.match(/theme.less/)) {\n            if(error.line == 5) {\n              element  = regExp.variable.exec(error.message)[1];\n              if(element) {\n                console.error('Missing theme.config value for ', element);\n              }\n              console.error('Most likely new UI was added in an update. You will need to add missing elements from theme.config.example');\n            }\n            if(error.line == 46) {\n              element = regExp.element.exec(error.message)[1];\n              theme   = regExp.theme.exec(error.message)[1];\n              console.error(theme + ' is not an available theme for ' + element);\n            }\n          }\n          else {\n            console.log(error);\n          }\n          this.emit('end');\n        }\n      }\n    },\n\n    /* What Browsers to Prefix */\n    prefix: {\n      browsers: [\n        'last 2 versions',\n        '> 1%',\n        'opera 12.1',\n        'bb 10',\n        'android 4'\n      ]\n    },\n\n    /* File Renames */\n    rename: {\n      minJS     : { extname : '.min.js' },\n      minCSS    : { extname : '.min.css' },\n      rtlCSS    : { extname : '.rtl.css' },\n      rtlMinCSS : { extname : '.rtl.min.css' }\n    },\n\n    /* Minified CSS Concat */\n    minify: {\n      processImport       : false,\n      restructuring       : false,\n      keepSpecialComments : 1,\n      roundingPrecision   : -1,\n    },\n\n    /* Minified JS Settings */\n    uglify: {\n      mangle   : true,\n      output: {\n        comments: 'some'\n      }\n    },\n\n    /* Minified Concat CSS Settings */\n    concatMinify: {\n      processImport       : false,\n      restructuring       : false,\n      keepSpecialComments : false,\n      roundingPrecision   : -1,\n    },\n\n    /* Minified Concat JS */\n    concatUglify: {\n      mangle   : true,\n      output: {\n        comments: 'some'\n      }\n    }\n\n  }\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/config/user.js",
    "content": "/*******************************\n             Set-up\n*******************************/\n\nvar\n  // npm dependencies\n  extend          = require('extend'),\n  fs              = require('fs'),\n  path            = require('path'),\n  requireDotFile  = require('require-dot-file'),\n\n  // semantic.json defaults\n  defaults        = require('./defaults'),\n  config          = require('./project/config'),\n\n  // Final config object\n  gulpConfig = {},\n\n  // semantic.json settings\n  userConfig\n\n;\n\n\n/*******************************\n          User Config\n*******************************/\n\ntry {\n  // looks for config file across all parent directories\n  userConfig = requireDotFile('semantic.json');\n}\ncatch(error) {\n  if(error.code === 'MODULE_NOT_FOUND') {\n    console.error('No semantic.json config found');\n  }\n}\n\n// extend user config with defaults\ngulpConfig = (!userConfig)\n  ? extend(true, {}, defaults)\n  : extend(false, {}, defaults, userConfig)\n;\n\n/*******************************\n       Add Derived Values\n*******************************/\n\n// adds calculated values\nconfig.addDerivedValues(gulpConfig);\n\n\n/*******************************\n             Export\n*******************************/\n\nmodule.exports = gulpConfig;\n\n"
  },
  {
    "path": "resources/assets/semantic/tasks/docs/build.js",
    "content": "/*******************************\n           Build Docs\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n  map          = require('map-stream'),\n\n  // gulp dependencies\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  flatten      = require('gulp-flatten'),\n  gulpif       = require('gulp-if'),\n  header       = require('gulp-header'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  uglify       = require('gulp-uglify'),\n\n  // user config\n  config       = require('../config/docs'),\n\n  // install config\n  tasks        = require('../config/tasks'),\n  configSetup  = require('../config/project/config'),\n  install      = require('../config/project/install'),\n\n  // metadata parsing\n  metadata     = require('./metadata'),\n\n  // shorthand\n  globs,\n  assets,\n  output,\n  source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n;\n\n// add internal tasks (concat release)\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function(callback) {\n\n  var\n    stream,\n    compressedStream,\n    uncompressedStream\n  ;\n\n  // use a different config\n  config = configSetup.addDerivedValues(config);\n\n  // shorthand\n  globs  = config.globs;\n  assets = config.paths.assets;\n  output = config.paths.output;\n  source = config.paths.source;\n\n  /*--------------\n   Parse metadata\n   ---------------*/\n\n  // parse all *.html.eco in docs repo, data will end up in\n  // metadata.result object.  Note this assumes that the docs\n  // repository is present and in proper directory location as\n  // specified by docs.json.\n  console.info('Building Metadata');\n  gulp.src(config.paths.template.eco + globs.eco)\n    .pipe(map(metadata.parser))\n    .on('end', function() {\n      fs.writeFile(output.metadata + '/metadata.json', JSON.stringify(metadata.result, null, 2));\n    })\n  ;\n\n  /*--------------\n    Copy Examples\n  ---------------*/\n\n  console.info('Copying examples');\n  // copy src/ to server\n  gulp.src('examples/**/*.*')\n    .pipe(gulp.dest(output.examples))\n    .pipe(print(log.created))\n  ;\n\n  /*--------------\n     Copy Source\n  ---------------*/\n\n  console.info('Copying LESS source');\n  // copy src/ to server\n  gulp.src('src/**/*.*')\n    .pipe(gulp.dest(output.less))\n    .pipe(print(log.created))\n  ;\n\n  /*--------------\n        Build\n  ---------------*/\n\n  console.info('Building Semantic for docs');\n\n  if( !install.isSetup() ) {\n    console.error('Cannot build files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  // unified css stream\n  stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')\n    .pipe(plumber())\n    .pipe(less(settings.less))\n    .pipe(autoprefixer(settings.prefix))\n    .pipe(flatten())\n  ;\n\n  // two concurrent streams from same source to concat release\n  uncompressedStream = stream.pipe(clone());\n  compressedStream   = stream.pipe(clone());\n\n  uncompressedStream\n    .pipe(plumber())\n    .pipe(replace(comments.variables.in, comments.variables.out))\n    .pipe(replace(comments.large.in, comments.large.out))\n    .pipe(replace(comments.small.in, comments.small.out))\n    .pipe(replace(comments.tiny.in, comments.tiny.out))\n    .pipe(replace(assets.source, assets.uncompressed))\n    .pipe(header(banner, settings.header))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      gulp.start('package uncompressed docs css');\n    })\n  ;\n\n  compressedStream = stream\n    .pipe(plumber())\n    .pipe(clone())\n    .pipe(replace(assets.source, assets.compressed))\n    .pipe(minifyCSS(settings.minify))\n    .pipe(rename(settings.rename.minCSS))\n    .pipe(header(banner, settings.header))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      callback();\n      gulp.start('package compressed docs css');\n    })\n  ;\n\n  // copy assets\n  gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*')\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.themes))\n  ;\n\n  // copy source javascript\n  gulp.src(source.definitions + '/**/' + globs.components + '.js')\n    .pipe(plumber())\n    .pipe(flatten())\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(print(log.created))\n    .pipe(uglify(settings.uglify))\n    .pipe(rename(settings.rename.minJS))\n    .pipe(header(banner, settings.header))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(print(log.created))\n    .on('end', function() {\n      gulp.start('package compressed docs js');\n      gulp.start('package uncompressed docs js');\n    })\n  ;\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/docs/metadata.js",
    "content": "\n/*******************************\n           Summarize Docs\n*******************************/\n\nvar\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n  YAML         = require('yamljs')\n;\n\nvar data = {};\n\n/**\n * Test for prefix in string.\n * @param {string} str\n * @param {string} prefix\n * @return {boolean}\n */\nfunction startsWith(str, prefix) {\n  return str.indexOf(prefix) === 0;\n};\n\nfunction inArray(needle, haystack) {\n  var length = haystack.length;\n  for(var i = 0; i < length; i++) {\n      if(haystack[i] == needle) return true;\n  }\n  return false;\n}\n\n/**\n * Parses a file for metadata and stores result in data object.\n * @param {File} file - object provided by map-stream.\n * @param {function(?,File)} - callback provided by map-stream to\n * reply when done.\n */\nfunction parser(file, callback) {\n  // file exit conditions\n  if(file.isNull()) {\n    return callback(null, file); // pass along\n  }\n\n  if(file.isStream()) {\n    return callback(new Error('Streaming not supported'));\n  }\n\n  try {\n\n    var\n      /** @type {string} */\n      text     = String(file.contents.toString('utf8')),\n      lines    = text.split('\\n'),\n      filename = file.path.substring(0, file.path.length - 4),\n      key      = 'server/documents',\n      position = filename.indexOf(key)\n    ;\n\n    // exit conditions\n    if(!lines) {\n      return;\n    }\n    if(position < 0) {\n      return callback(null, file);\n    }\n\n    filename = filename.substring(position + key.length + 1, filename.length);\n\n    var\n      lineCount = lines.length,\n      active    = false,\n      yaml      = [],\n      categories = [\n        'UI Element',\n        'UI Global',\n        'UI Collection',\n        'UI View',\n        'UI Module',\n        'UI Behavior'\n      ],\n      index,\n      meta,\n      line\n    ;\n\n    for(index = 0; index < lineCount; index++) {\n\n      line = lines[index];\n\n      // Wait for metadata block to begin\n      if(!active) {\n        if(startsWith(line, '---')) {\n          active = true;\n        }\n        continue;\n      }\n      // End of metadata block, stop parsing.\n      if(startsWith(line, '---')) {\n        break;\n      }\n      yaml.push(line);\n    }\n\n\n    // Parse yaml.\n    meta = YAML.parse(yaml.join('\\n'));\n    if(meta && meta.type && meta.title && inArray(meta.type, categories) ) {\n      meta.category = meta.type;\n      meta.filename = filename;\n      meta.url      = '/' + filename;\n      meta.title    = meta.title;\n      // Primary key will by filepath\n      data[meta.element] = meta;\n    }\n    else {\n      // skip\n      // console.log(meta);\n    }\n\n\n  }\n\n  catch(error) {\n    console.log(error, filename);\n  }\n\n  callback(null, file);\n\n}\n\n/**\n * Export function expected by map-stream.\n */\nmodule.exports = {\n  result : data,\n  parser : parser\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/docs/serve.js",
    "content": "/*******************************\n           Serve Docs\n*******************************/\nvar\n  gulp         = require('gulp'),\n\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n\n  // gulp dependencies\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  gulpif       = require('gulp-if'),\n  header       = require('gulp-header'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  uglify       = require('gulp-uglify'),\n  util         = require('gulp-util'),\n  watch        = require('gulp-watch'),\n\n  // user config\n  config       = require('../config/docs'),\n\n  // task config\n  tasks        = require('../config/tasks'),\n  configSetup  = require('../config/project/config'),\n  install      = require('../config/project/install'),\n\n  // shorthand\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings,\n\n  globs,\n  assets,\n  output,\n  source\n;\n\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function () {\n\n  // use a different config\n  config = configSetup.addDerivedValues(config);\n\n  // shorthand\n  globs  = config.globs;\n  assets = config.paths.assets;\n  output = config.paths.output;\n  source = config.paths.source;\n\n\n  /*--------------\n     Copy Source\n  ---------------*/\n\n  gulp\n    .watch([\n      'src/**/*.*'\n    ], function(file) {\n      console.clear();\n      return gulp.src(file.path, {\n          base: 'src/'\n        })\n        .pipe(gulp.dest(output.less))\n        .pipe(print(log.created))\n      ;\n    })\n  ;\n\n  /*--------------\n    Copy Examples\n  ---------------*/\n\n  gulp\n    .watch([\n      'examples/**/*.*'\n    ], function(file) {\n      console.clear();\n      return gulp.src(file.path, {\n          base: 'examples/'\n        })\n        .pipe(gulp.dest(output.examples))\n        .pipe(print(log.created))\n      ;\n    })\n  ;\n\n  /*--------------\n      Watch CSS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.config,\n      source.definitions   + '/**/*.less',\n      source.site          + '/**/*.{overrides,variables}',\n      source.themes        + '/**/*.{overrides,variables}'\n    ], function(file) {\n\n      var\n        lessPath,\n\n        stream,\n        compressedStream,\n        uncompressedStream,\n\n        isDefinition,\n        isPackagedTheme,\n        isSiteTheme,\n        isConfig\n      ;\n\n      // log modified file\n      gulp.src(file.path)\n        .pipe(print(log.modified))\n      ;\n\n      /*--------------\n         Find Source\n      ---------------*/\n\n      // recompile on *.override , *.variable change\n      isConfig        = (file.path.indexOf('theme.config') !== -1 || file.path.indexOf('site.variables') !== -1);\n      isPackagedTheme = (file.path.indexOf(source.themes) !== -1);\n      isSiteTheme     = (file.path.indexOf(source.site) !== -1);\n      isDefinition    = (file.path.indexOf(source.definitions) !== -1);\n\n      if(isConfig) {\n        // console.info('Rebuilding all files');\n        // cant rebuild paths are wrong\n        // gulp.start('build-docs');\n        return;\n      }\n      else if(isPackagedTheme) {\n        console.log('Change detected in packaged theme');\n        lessPath = util.replaceExtension(file.path, '.less');\n        lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);\n      }\n      else if(isSiteTheme) {\n        console.log('Change detected in site theme');\n        lessPath = util.replaceExtension(file.path, '.less');\n        lessPath = lessPath.replace(source.site, source.definitions);\n      }\n      else {\n        console.log('Change detected in definition');\n        lessPath = file.path;\n      }\n\n      /*--------------\n        Create CSS\n      ---------------*/\n\n      if( fs.existsSync(lessPath) ) {\n\n        // unified css stream\n        stream = gulp.src(lessPath)\n          .pipe(plumber())\n          .pipe(less(settings.less))\n          .pipe(replace(comments.variables.in, comments.variables.out))\n          .pipe(replace(comments.large.in, comments.large.out))\n          .pipe(replace(comments.small.in, comments.small.out))\n          .pipe(replace(comments.tiny.in, comments.tiny.out))\n          .pipe(autoprefixer(settings.prefix))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        ;\n\n        // use 2 concurrent streams from same pipe\n        uncompressedStream = stream.pipe(clone());\n        compressedStream   = stream.pipe(clone());\n\n        uncompressedStream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.uncompressed))\n          .pipe(header(banner, settings.header))\n          .pipe(gulp.dest(output.uncompressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package uncompressed docs css');\n          })\n        ;\n\n        compressedStream = stream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.compressed))\n          .pipe(minifyCSS(settings.minify))\n          .pipe(rename(settings.rename.minCSS))\n          .pipe(header(banner, settings.header))\n          .pipe(gulp.dest(output.compressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package compressed docs css');\n          })\n        ;\n\n      }\n      else {\n        console.log('Cannot find UI definition at path', lessPath);\n      }\n    })\n  ;\n\n  /*--------------\n      Watch JS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.definitions   + '/**/*.js'\n    ], function(file) {\n      gulp.src(file.path)\n        .pipe(plumber())\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.uncompressed))\n        .pipe(print(log.created))\n        .pipe(uglify(settings.uglify))\n        .pipe(rename(settings.rename.minJS))\n        .pipe(gulp.dest(output.compressed))\n        .pipe(print(log.created))\n        .on('end', function() {\n          gulp.start('package compressed docs js');\n          gulp.start('package uncompressed docs js');\n        })\n      ;\n    })\n  ;\n\n  /*--------------\n    Watch Assets\n  ---------------*/\n\n  // only copy assets that match component names (or their plural)\n  gulp\n    .watch([\n      source.themes   + '/**/assets/**/' + globs.components + '?(s).*'\n    ], function(file) {\n      // copy assets\n      gulp.src(file.path, { base: source.themes })\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.themes))\n        .pipe(print(log.created))\n      ;\n    })\n  ;\n\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/install.js",
    "content": "/*******************************\n         Install Task\n*******************************/\n\n/*\n   Install tasks\n\n   For more notes\n\n   * Runs automatically after npm update (hooks)\n   * (NPM) Install - Will ask for where to put semantic (outside pm folder)\n   * (NPM) Upgrade - Will look for semantic install, copy over files and update if new version\n   * Standard installer runs asking for paths to site files etc\n\n*/\n\nvar\n  gulp           = require('gulp'),\n\n  // node dependencies\n  console        = require('better-console'),\n  extend         = require('extend'),\n  fs             = require('fs'),\n  mkdirp         = require('mkdirp'),\n  path           = require('path'),\n  runSequence    = require('run-sequence'),\n\n  // gulp dependencies\n  chmod          = require('gulp-chmod'),\n  del            = require('del'),\n  jsonEditor     = require('gulp-json-editor'),\n  plumber        = require('gulp-plumber'),\n  prompt         = require('prompt-sui'),\n  rename         = require('gulp-rename'),\n  replace        = require('gulp-replace'),\n  requireDotFile = require('require-dot-file'),\n  wrench         = require('wrench-sui'),\n\n  // install config\n  install        = require('./config/project/install'),\n\n  // user config\n  config         = require('./config/user'),\n\n  // release config (name/title/etc)\n  release        = require('./config/project/release'),\n\n  // shorthand\n  questions      = install.questions,\n  files          = install.files,\n  folders        = install.folders,\n  regExp         = install.regExp,\n  settings       = install.settings,\n  source         = install.source\n;\n\n// Export install task\nmodule.exports = function (callback) {\n\nvar\n  currentConfig = requireDotFile('semantic.json'),\n  manager       = install.getPackageManager(),\n  rootQuestions = questions.root,\n  installFolder = false,\n  answers\n;\n\nconsole.clear();\n\n/* Test NPM install\nmanager = {\n  name : 'NPM',\n  root : path.normalize(__dirname + '/../')\n};\n*/\n\n\n/* Don't do end user config if SUI is a sub-module */\nif( install.isSubModule() ) {\n  console.info('SUI is a sub-module, skipping end-user install');\n  return;\n}\n\n/*-----------------\n    Update SUI\n-----------------*/\n\n// run update scripts if semantic.json exists\nif(currentConfig && manager.name === 'NPM') {\n\n  var\n    updateFolder = path.join(manager.root, currentConfig.base),\n    updatePaths  = {\n      config       : path.join(manager.root, files.config),\n      tasks        : path.join(updateFolder, folders.tasks),\n      themeImport  : path.join(updateFolder, folders.themeImport),\n      definition   : path.join(currentConfig.paths.source.definitions),\n      site         : path.join(currentConfig.paths.source.site),\n      theme        : path.join(currentConfig.paths.source.themes),\n      defaultTheme : path.join(currentConfig.paths.source.themes, folders.defaultTheme)\n    }\n  ;\n\n  // duck-type if there is a project installed\n  if( fs.existsSync(updatePaths.definition) ) {\n\n    // perform update if new version\n    if(currentConfig.version !== release.version) {\n      console.log('Updating Semantic UI from ' + currentConfig.version + ' to ' + release.version);\n\n      console.info('Updating ui definitions...');\n      wrench.copyDirSyncRecursive(source.definitions, updatePaths.definition, settings.wrench.overwrite);\n\n      console.info('Updating default theme...');\n      wrench.copyDirSyncRecursive(source.themes, updatePaths.theme, settings.wrench.merge);\n      wrench.copyDirSyncRecursive(source.defaultTheme, updatePaths.defaultTheme, settings.wrench.overwrite);\n\n      console.info('Updating tasks...');\n      wrench.copyDirSyncRecursive(source.tasks, updatePaths.tasks, settings.wrench.overwrite);\n\n      console.info('Updating gulpfile.js');\n      gulp.src(source.userGulpFile)\n        .pipe(plumber())\n        .pipe(gulp.dest(updateFolder))\n      ;\n\n      // copy theme import\n      console.info('Updating theme import file');\n      gulp.src(source.themeImport)\n        .pipe(plumber())\n        .pipe(gulp.dest(updatePaths.themeImport))\n      ;\n\n      console.info('Adding new site theme files...');\n      wrench.copyDirSyncRecursive(source.site, updatePaths.site, settings.wrench.merge);\n\n      console.info('Updating version...');\n\n      // update version number in semantic.json\n      gulp.src(updatePaths.config)\n        .pipe(plumber())\n        .pipe(rename(settings.rename.json)) // preserve file extension\n        .pipe(jsonEditor({\n          version: release.version\n        }))\n        .pipe(gulp.dest(manager.root))\n      ;\n\n      console.info('Update complete! Run \"\\x1b[92mgulp build\\x1b[0m\" to rebuild dist/ files.');\n\n      return;\n    }\n    else {\n      console.log('Current version of Semantic UI already installed');\n      return;\n    }\n\n  }\n  else {\n    console.error('Cannot locate files to update at path: ', updatePaths.definition);\n    console.log('Running installer');\n  }\n\n}\n\n/*--------------\n Determine Root\n---------------*/\n\n// PM that supports Build Tools (NPM Only Now)\nif(manager.name == 'NPM') {\n  rootQuestions[0].message = rootQuestions[0].message\n    .replace('{packageMessage}', 'We detected you are using ' + manager.name + ' Nice!')\n    .replace('{root}', manager.root)\n  ;\n  // set default path to detected PM root\n  rootQuestions[0].default = manager.root;\n  rootQuestions[1].default = manager.root;\n\n  // insert PM questions after \"Install Type\" question\n  Array.prototype.splice.apply(questions.setup, [2, 0].concat(rootQuestions));\n\n  // omit cleanup questions for managed install\n  questions.cleanup = [];\n}\n\n\n/*--------------\n   Create SUI\n---------------*/\n\ngulp.task('run setup', function() {\n\n  // If auto-install is switched on, we skip the configuration section and simply reuse the configuration from semantic.json\n  if(install.shouldAutoInstall()) {\n    answers = {\n      overwrite    : 'yes',\n      install      : 'auto',\n      useRoot      : true,\n      semanticRoot : currentConfig.base\n    };\n  }\n  else {\n    return gulp\n      .src('gulpfile.js')\n      .pipe(prompt.prompt(questions.setup, function(setupAnswers) {\n        // hoist\n        answers = setupAnswers;\n      }))\n    ;\n  }\n});\n\ngulp.task('create install files', function(callback) {\n\n  /*--------------\n   Exit Conditions\n  ---------------*/\n\n  // if config exists and user specifies not to proceed\n  if(answers.overwrite !== undefined && answers.overwrite == 'no') {\n    return;\n  }\n  console.clear();\n  if(install.shouldAutoInstall()) {\n    console.log('Auto-Installing (Without User Interaction)');\n  }\n  else {\n    console.log('Installing');\n  }\n  console.log('------------------------------');\n\n\n  /*--------------\n        Paths\n  ---------------*/\n\n  var\n    installPaths = {\n      config            : files.config,\n      configFolder      : folders.config,\n      site              : answers.site || folders.site,\n      themeConfig       : files.themeConfig,\n      themeConfigFolder : folders.themeConfig\n    }\n  ;\n\n  /*--------------\n    NPM Install\n  ---------------*/\n\n  // Check if PM install\n  if(manager && (answers.useRoot || answers.customRoot)) {\n\n    // Set root to custom root path if set\n    if(answers.customRoot) {\n      if(answers.customRoot === '') {\n        console.log('Unable to proceed, invalid project root');\n        return;\n      }\n      manager.root = answers.customRoot;\n    }\n\n    // special install paths only for PM install\n    installPaths = extend(false, {}, installPaths, {\n      definition   : folders.definitions,\n      lessImport   : folders.lessImport,\n      tasks        : folders.tasks,\n      theme        : folders.themes,\n      defaultTheme : path.join(folders.themes, folders.defaultTheme),\n      themeImport  : folders.themeImport\n    });\n\n    // add project root to semantic root\n    installFolder = path.join(manager.root, answers.semanticRoot);\n\n    // add install folder to all output paths\n    for(var destination in installPaths) {\n      if( installPaths.hasOwnProperty(destination) ) {\n        // config goes in project root, rest in install folder\n        installPaths[destination] = (destination == 'config' || destination == 'configFolder')\n          ? path.normalize( path.join(manager.root, installPaths[destination]) )\n          : path.normalize( path.join(installFolder, installPaths[destination]) )\n        ;\n      }\n    }\n\n    // create project folders\n    try {\n      mkdirp.sync(installFolder);\n      mkdirp.sync(installPaths.definition);\n      mkdirp.sync(installPaths.theme);\n      mkdirp.sync(installPaths.tasks);\n    }\n    catch(error) {\n      console.error('NPM does not have permissions to create folders at your specified path. Adjust your folders permissions and run \"npm install\" again');\n    }\n\n    console.log('Installing to \\x1b[92m' + answers.semanticRoot + '\\x1b[0m');\n\n    console.info('Copying UI definitions');\n    wrench.copyDirSyncRecursive(source.definitions, installPaths.definition, settings.wrench.overwrite);\n\n    console.info('Copying UI themes');\n    wrench.copyDirSyncRecursive(source.themes, installPaths.theme, settings.wrench.merge);\n    wrench.copyDirSyncRecursive(source.defaultTheme, installPaths.defaultTheme, settings.wrench.overwrite);\n\n    console.info('Copying gulp tasks');\n    wrench.copyDirSyncRecursive(source.tasks, installPaths.tasks, settings.wrench.overwrite);\n\n    // copy theme import\n    console.info('Adding theme files');\n    gulp.src(source.themeImport)\n      .pipe(plumber())\n      .pipe(gulp.dest(installPaths.themeImport))\n    ;\n    gulp.src(source.lessImport)\n      .pipe(plumber())\n      .pipe(gulp.dest(installPaths.lessImport))\n    ;\n\n    // create gulp file\n    console.info('Creating gulpfile.js');\n    gulp.src(source.userGulpFile)\n      .pipe(plumber())\n      .pipe(gulp.dest(installFolder))\n    ;\n\n  }\n\n\n  /*--------------\n     Site Theme\n  ---------------*/\n\n  // Copy _site templates folder to destination\n  if( fs.existsSync(installPaths.site) ) {\n    console.info('Site folder exists, merging files (no overwrite)', installPaths.site);\n  }\n  else {\n    console.info('Creating site theme folder', installPaths.site);\n  }\n  wrench.copyDirSyncRecursive(source.site, installPaths.site, settings.wrench.merge);\n\n  /*--------------\n    Theme Config\n  ---------------*/\n\n  gulp.task('create theme.config', function() {\n    var\n      // determine path to site theme folder from theme config\n      // force CSS path variable to use forward slashes for paths\n      pathToSite   = path.relative(path.resolve(installPaths.themeConfigFolder), path.resolve(installPaths.site)).replace(/\\\\/g,'/'),\n      siteVariable = \"@siteFolder   : '\" + pathToSite + \"/';\"\n    ;\n\n    // rewrite site variable in theme.less\n    console.info('Adjusting @siteFolder to: ', pathToSite + '/');\n\n    if(fs.existsSync(installPaths.themeConfig)) {\n      console.info('Modifying src/theme.config (LESS config)', installPaths.themeConfig);\n      return gulp.src(installPaths.themeConfig)\n        .pipe(plumber())\n        .pipe(replace(regExp.siteVariable, siteVariable))\n        .pipe(gulp.dest(installPaths.themeConfigFolder))\n      ;\n    }\n    else {\n      console.info('Creating src/theme.config (LESS config)', installPaths.themeConfig);\n      return gulp.src(source.themeConfig)\n        .pipe(plumber())\n        .pipe(rename({ extname : '' }))\n        .pipe(replace(regExp.siteVariable, siteVariable))\n        .pipe(gulp.dest(installPaths.themeConfigFolder))\n      ;\n    }\n  });\n\n  /*--------------\n    Semantic.json\n  ---------------*/\n\n  gulp.task('create semantic.json', function() {\n\n    var\n      jsonConfig = install.createJSON(answers)\n    ;\n\n    // adjust variables in theme.less\n    if( fs.existsSync(installPaths.config) ) {\n      console.info('Extending config file (semantic.json)', installPaths.config);\n      return gulp.src(installPaths.config)\n        .pipe(plumber())\n        .pipe(rename(settings.rename.json)) // preserve file extension\n        .pipe(jsonEditor(jsonConfig))\n        .pipe(gulp.dest(installPaths.configFolder))\n      ;\n    }\n    else {\n      console.info('Creating config file (semantic.json)', installPaths.config);\n      return gulp.src(source.config)\n        .pipe(plumber())\n        .pipe(rename({ extname : '' })) // remove .template from ext\n        .pipe(jsonEditor(jsonConfig))\n        .pipe(gulp.dest(installPaths.configFolder))\n      ;\n    }\n\n  });\n\n  runSequence(\n    'create theme.config',\n    'create semantic.json',\n    callback\n  );\n\n});\n\ngulp.task('clean up install', function() {\n\n  // Completion Message\n  if(installFolder && !install.shouldAutoInstall()) {\n    console.log('\\n Setup Complete! \\n Installing Peer Dependencies. \\x1b[0;31mPlease refrain from ctrl + c\\x1b[0m... \\n After completion navigate to \\x1b[92m' + answers.semanticRoot + '\\x1b[0m and run \"\\x1b[92mgulp build\\x1b[0m\" to build');\n    process.exit(0);\n  }\n  else {\n    console.log('');\n    console.log('');\n  }\n\n  // If auto-install is switched on, we skip the configuration section and simply build the dependencies\n  if(install.shouldAutoInstall()) {\n    return gulp.start('build');\n  }\n  else {\n    return gulp\n      .src('gulpfile.js')\n      .pipe(prompt.prompt(questions.cleanup, function(answers) {\n        if(answers.cleanup == 'yes') {\n          del(install.setupFiles);\n        }\n        if(answers.build == 'yes') {\n          gulp.start('build');\n        }\n      }))\n    ;\n  }\n\n\n});\n\nrunSequence(\n  'run setup',\n  'create install files',\n  'clean up install',\n  callback\n);\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/rtl/build.js",
    "content": "/*******************************\n          Build Task\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // node dependencies\n  fs           = require('fs'),\n\n  // gulp dependencies\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  flatten      = require('gulp-flatten'),\n  gulpif       = require('gulp-if'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  rtlcss       = require('gulp-rtlcss'),\n  uglify       = require('gulp-uglify'),\n\n  // user config\n  config       = require('../config/user'),\n\n  // install config\n  tasks        = require('../config/tasks'),\n  install      = require('../config/project/install'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n;\n\n// add internal tasks (concat release)\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function(callback) {\n\n  var\n    stream,\n    compressedStream,\n    uncompressedStream\n  ;\n\n  console.info('Building Semantic');\n\n  if( !install.isSetup() ) {\n    console.error('Cannot build files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  // unified css stream\n  stream = gulp.src(source.definitions + '/**/' + globs.components + '.less')\n    .pipe(plumber())\n    .pipe(less(settings.less))\n    .pipe(autoprefixer(settings.prefix))\n    .pipe(rtlcss())\n    .pipe(replace(comments.variables.in, comments.variables.out))\n    .pipe(replace(comments.license.in, comments.license.out))\n    .pipe(replace(comments.large.in, comments.large.out))\n    .pipe(replace(comments.small.in, comments.small.out))\n    .pipe(replace(comments.tiny.in, comments.tiny.out))\n    .pipe(flatten())\n  ;\n\n  // two concurrent streams from same source to concat release\n  uncompressedStream = stream.pipe(clone());\n  compressedStream   = stream.pipe(clone());\n\n  uncompressedStream\n    .pipe(plumber())\n    .pipe(replace(assets.source, assets.uncompressed))\n    .pipe(rename(settings.rename.rtlCSS))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      gulp.start('package uncompressed rtl css');\n    })\n  ;\n\n  compressedStream = stream\n    .pipe(plumber())\n    .pipe(clone())\n    .pipe(replace(assets.source, assets.compressed))\n    .pipe(minifyCSS(settings.minify))\n    .pipe(rename(settings.rename.rtlMinCSS))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      callback();\n      gulp.start('package compressed rtl css');\n    })\n  ;\n\n  // copy assets\n  gulp.src(source.themes + '/**/assets/**/' + globs.components + '?(s).*')\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.themes))\n  ;\n\n  // copy source javascript\n  gulp.src(source.definitions + '/**/' + globs.components + '.js')\n    .pipe(plumber())\n    .pipe(flatten())\n    .pipe(replace(comments.license.in, comments.license.out))\n    .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n    .pipe(gulp.dest(output.uncompressed))\n    .pipe(print(log.created))\n    .pipe(uglify(settings.uglify))\n    .pipe(rename(settings.rename.minJS))\n    .pipe(gulp.dest(output.compressed))\n    .pipe(print(log.created))\n    .on('end', function() {\n      gulp.start('package compressed js');\n      gulp.start('package uncompressed js');\n    })\n  ;\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/rtl/watch.js",
    "content": "/*******************************\n           Watch Task\n*******************************/\n\nvar\n  gulp         = require('gulp'),\n\n  // node deps\n  console      = require('better-console'),\n  fs           = require('fs'),\n\n  // gulp deps\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  gulpif       = require('gulp-if'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  rtlcss       = require('gulp-rtlcss'),\n  uglify       = require('gulp-uglify'),\n  util         = require('gulp-util'),\n  watch        = require('gulp-watch'),\n\n  // user config\n  config       = require('../config/user'),\n\n  // task config\n  tasks        = require('../config/tasks'),\n  install      = require('../config/project/install'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n\n;\n\n// add internal tasks (concat release)\nrequire('../collections/internal')(gulp);\n\nmodule.exports = function(callback) {\n\n  if( !install.isSetup() ) {\n    console.error('Cannot watch files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  console.clear();\n  console.log('Watching source files for changes');\n\n  /*--------------\n      Watch CSS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.config,\n      source.definitions   + '/**/*.less',\n      source.site          + '/**/*.{overrides,variables}',\n      source.themes        + '/**/*.{overrides,variables}'\n    ], function(file) {\n\n      var\n        lessPath,\n\n        stream,\n        compressedStream,\n        uncompressedStream,\n\n        isDefinition,\n        isPackagedTheme,\n        isSiteTheme,\n        isConfig\n      ;\n\n      // log modified file\n      gulp.src(file.path)\n        .pipe(print(log.modified))\n      ;\n\n      /*--------------\n         Find Source\n      ---------------*/\n\n      // recompile on *.override , *.variable change\n      isConfig        = (file.path.indexOf('.config') !== -1);\n      isPackagedTheme = (file.path.indexOf(source.themes) !== -1);\n      isSiteTheme     = (file.path.indexOf(source.site) !== -1);\n      isDefinition    = (file.path.indexOf(source.definitions) !== -1);\n\n\n      if(isConfig) {\n        console.log('Change detected in theme config');\n        // cant tell which theme was changed in theme.config, rebuild all\n        gulp.start('build');\n      }\n      else if(isPackagedTheme) {\n        console.log('Change detected in packaged theme');\n        lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);\n        lessPath = util.replaceExtension(file.path, '.less');\n      }\n      else if(isSiteTheme) {\n        console.log('Change detected in site theme');\n        lessPath = lessPath.replace(source.site, source.definitions);\n        lessPath = util.replaceExtension(file.path, '.less');\n      }\n      else if(isDefinition) {\n        console.log('Change detected in definition');\n        lessPath = util.replaceExtension(file.path, '.less');\n      }\n\n      /*--------------\n         Create CSS\n      ---------------*/\n\n      if( fs.existsSync(lessPath) ) {\n\n        // unified css stream\n        stream = gulp.src(lessPath)\n          .pipe(plumber())\n          .pipe(less(settings.less))\n          .pipe(replace(comments.variables.in, comments.variables.out))\n          .pipe(replace(comments.license.in, comments.license.out))\n          .pipe(replace(comments.large.in, comments.large.out))\n          .pipe(replace(comments.small.in, comments.small.out))\n          .pipe(replace(comments.tiny.in, comments.tiny.out))\n          .pipe(autoprefixer(settings.prefix))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n          .pipe(rtlcss())\n        ;\n\n        // use 2 concurrent streams from same pipe\n        uncompressedStream = stream.pipe(clone());\n        compressedStream   = stream.pipe(clone());\n\n        uncompressedStream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.uncompressed))\n          .pipe(rename(settings.rename.rtlCSS))\n          .pipe(gulp.dest(output.uncompressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package uncompressed rtl css');\n          })\n        ;\n\n        compressedStream = stream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.compressed))\n          .pipe(minifyCSS(settings.minify))\n          .pipe(rename(settings.rename.minCSS))\n          .pipe(rename(settings.rename.rtlMinCSS))\n          .pipe(gulp.dest(output.compressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package compressed rtl css');\n          })\n        ;\n\n      }\n      else {\n        console.log('Cannot find UI definition at path', lessPath);\n      }\n    })\n  ;\n\n  /*--------------\n      Watch JS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.definitions   + '/**/*.js'\n    ], function(file) {\n      gulp.src(file.path)\n        .pipe(plumber())\n        .pipe(replace(comments.license.in, comments.license.out))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.uncompressed))\n        .pipe(print(log.created))\n        .pipe(uglify(settings.uglify))\n        .pipe(rename(settings.rename.minJS))\n        .pipe(gulp.dest(output.compressed))\n        .pipe(print(log.created))\n        .on('end', function() {\n          gulp.start('package compressed js');\n          gulp.start('package uncompressed js');\n        })\n      ;\n    })\n  ;\n\n  /*--------------\n    Watch Assets\n  ---------------*/\n\n  // only copy assets that match component names (or their plural)\n  gulp\n    .watch([\n      source.themes   + '/**/assets/**/' + globs.components + '?(s).*'\n    ], function(file) {\n      // copy assets\n      gulp.src(file.path, { base: source.themes })\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.themes))\n        .pipe(print(log.created))\n      ;\n    })\n  ;\n\n};\n"
  },
  {
    "path": "resources/assets/semantic/tasks/version.js",
    "content": "/*******************************\n          Version Task\n*******************************/\n\nvar\n  release = require('./config/project/release')\n;\n\nmodule.exports = function(callback) {\n  console.log(release.title + ' ' + release.version);\n};"
  },
  {
    "path": "resources/assets/semantic/tasks/watch.js",
    "content": "/*******************************\n           Watch Task\n*******************************/\n\nvar\n  gulp         = require('gulp-help')(require('gulp')),\n\n  // node dependencies\n  console      = require('better-console'),\n  fs           = require('fs'),\n\n  // gulp dependencies\n  autoprefixer = require('gulp-autoprefixer'),\n  chmod        = require('gulp-chmod'),\n  clone        = require('gulp-clone'),\n  gulpif       = require('gulp-if'),\n  less         = require('gulp-less'),\n  minifyCSS    = require('gulp-clean-css'),\n  plumber      = require('gulp-plumber'),\n  print        = require('gulp-print'),\n  rename       = require('gulp-rename'),\n  replace      = require('gulp-replace'),\n  uglify       = require('gulp-uglify'),\n  util         = require('gulp-util'),\n  watch        = require('gulp-watch'),\n\n  // user config\n  config       = require('./config/user'),\n\n  // task config\n  tasks        = require('./config/tasks'),\n  install      = require('./config/project/install'),\n\n  // shorthand\n  globs        = config.globs,\n  assets       = config.paths.assets,\n  output       = config.paths.output,\n  source       = config.paths.source,\n\n  banner       = tasks.banner,\n  comments     = tasks.regExp.comments,\n  log          = tasks.log,\n  settings     = tasks.settings\n\n;\n\n// add tasks referenced using gulp.run (sub-tasks)\nif(config.rtl) {\n  require('./collections/rtl')(gulp);\n}\nrequire('./collections/internal')(gulp);\n\n\n// export task\nmodule.exports = function(callback) {\n\n  if( !install.isSetup() ) {\n    console.error('Cannot watch files. Run \"gulp install\" to set-up Semantic');\n    return;\n  }\n\n  // check for right-to-left (RTL) language\n  if(config.rtl == 'both') {\n    gulp.start('watch-rtl');\n  }\n  if(config.rtl === true || config.rtl === 'Yes') {\n    gulp.start('watch-rtl');\n    return;\n  }\n\n  //console.clear();\n  console.log('Watching source files for changes');\n\n  /*--------------\n      Watch CSS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.config,\n      source.definitions   + '/**/*.less',\n      source.site          + '/**/*.{overrides,variables}',\n      source.themes        + '/**/*.{overrides,variables}'\n    ], function(file) {\n\n      var\n        lessPath,\n\n        stream,\n        compressedStream,\n        uncompressedStream,\n\n        isDefinition,\n        isPackagedTheme,\n        isSiteTheme,\n        isConfig\n      ;\n\n      // log modified file\n      gulp.src(file.path)\n        .pipe(print(log.modified))\n      ;\n\n      /*--------------\n         Find Source\n      ---------------*/\n\n      // recompile on *.override , *.variable change\n      isConfig        = (file.path.indexOf('theme.config') !== -1 || file.path.indexOf('site.variables') !== -1);\n      isPackagedTheme = (file.path.indexOf(source.themes) !== -1);\n      isSiteTheme     = (file.path.indexOf(source.site) !== -1);\n      isDefinition    = (file.path.indexOf(source.definitions) !== -1);\n\n      if(isConfig) {\n        console.info('Rebuilding all UI');\n        // impossible to tell which file was updated in theme.config, rebuild all\n        gulp.start('build-css');\n        return;\n      }\n      else if(isPackagedTheme) {\n        console.log('Change detected in packaged theme');\n        lessPath = util.replaceExtension(file.path, '.less');\n        lessPath = lessPath.replace(tasks.regExp.theme, source.definitions);\n      }\n      else if(isSiteTheme) {\n        console.log('Change detected in site theme');\n        lessPath = util.replaceExtension(file.path, '.less');\n        lessPath = lessPath.replace(source.site, source.definitions);\n      }\n      else {\n        console.log('Change detected in definition');\n        lessPath = file.path;\n      }\n\n      /*--------------\n         Create CSS\n      ---------------*/\n\n      if( fs.existsSync(lessPath) ) {\n\n        // unified css stream\n        stream = gulp.src(lessPath)\n          .pipe(plumber(settings.plumber.less))\n          .pipe(less(settings.less))\n          .pipe(print(log.created))\n          .pipe(replace(comments.variables.in, comments.variables.out))\n          .pipe(replace(comments.license.in, comments.license.out))\n          .pipe(replace(comments.large.in, comments.large.out))\n          .pipe(replace(comments.small.in, comments.small.out))\n          .pipe(replace(comments.tiny.in, comments.tiny.out))\n          .pipe(autoprefixer(settings.prefix))\n          .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        ;\n\n        // use 2 concurrent streams from same pipe\n        uncompressedStream = stream.pipe(clone());\n        compressedStream   = stream.pipe(clone());\n\n        uncompressedStream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.uncompressed))\n          .pipe(gulp.dest(output.uncompressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package uncompressed css');\n          })\n        ;\n\n        compressedStream = stream\n          .pipe(plumber())\n          .pipe(replace(assets.source, assets.compressed))\n          .pipe(minifyCSS(settings.minify))\n          .pipe(rename(settings.rename.minCSS))\n          .pipe(gulp.dest(output.compressed))\n          .pipe(print(log.created))\n          .on('end', function() {\n            gulp.start('package compressed css');\n          })\n        ;\n      }\n      else {\n        console.log('Cannot find UI definition at path', lessPath);\n      }\n    })\n  ;\n\n  /*--------------\n      Watch JS\n  ---------------*/\n\n  gulp\n    .watch([\n      source.definitions   + '/**/*.js'\n    ], function(file) {\n      gulp.src(file.path)\n        .pipe(plumber())\n        .pipe(replace(comments.license.in, comments.license.out))\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.uncompressed))\n        .pipe(print(log.created))\n        .pipe(uglify(settings.uglify))\n        .pipe(rename(settings.rename.minJS))\n        .pipe(gulp.dest(output.compressed))\n        .pipe(print(log.created))\n        .on('end', function() {\n          gulp.start('package compressed js');\n          gulp.start('package uncompressed js');\n        })\n      ;\n    })\n  ;\n\n  /*--------------\n    Watch Assets\n  ---------------*/\n\n  // only copy assets that match component names (or their plural)\n  gulp\n    .watch([\n      source.themes   + '/**/assets/**/*.*'\n    ], function(file) {\n      // copy assets\n      gulp.src(file.path, { base: source.themes })\n        .pipe(gulpif(config.hasPermission, chmod(config.permission)))\n        .pipe(gulp.dest(output.themes))\n        .pipe(print(log.created))\n      ;\n    })\n  ;\n\n};\n"
  },
  {
    "path": "resources/lang/en/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed' => 'These credentials do not match our records.',\n    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',\n\n];\n"
  },
  {
    "path": "resources/lang/en/codehaoshi.php",
    "content": "<?php\nreturn [\n  'sigin' => 'signin'\n];"
  },
  {
    "path": "resources/lang/en/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Previous',\n    'next' => 'Next &raquo;',\n\n];\n"
  },
  {
    "path": "resources/lang/en/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reset Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => 'Passwords must be at least six characters and match the confirmation.',\n    'reset' => 'Your password has been reset!',\n    'sent' => 'We have e-mailed your password reset link!',\n    'token' => 'This password reset token is invalid.',\n    'user' => \"We can't find a user with that e-mail address.\",\n\n];\n"
  },
  {
    "path": "resources/lang/en/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | as the size rules. Feel free to tweak each of these messages here.\n    |\n    */\n\n    'accepted'             => 'The :attribute must be accepted.',\n    'active_url'           => 'The :attribute is not a valid URL.',\n    'after'                => 'The :attribute must be a date after :date.',\n    'after_or_equal'       => 'The :attribute must be a date after or equal to :date.',\n    'alpha'                => 'The :attribute may only contain letters.',\n    'alpha_dash'           => 'The :attribute may only contain letters, numbers, and dashes.',\n    'alpha_num'            => 'The :attribute may only contain letters and numbers.',\n    'array'                => 'The :attribute must be an array.',\n    'before'               => 'The :attribute must be a date before :date.',\n    'before_or_equal'      => 'The :attribute must be a date before or equal to :date.',\n    'between'              => [\n        'numeric' => 'The :attribute must be between :min and :max.',\n        'file'    => 'The :attribute must be between :min and :max kilobytes.',\n        'string'  => 'The :attribute must be between :min and :max characters.',\n        'array'   => 'The :attribute must have between :min and :max items.',\n    ],\n    'boolean'              => 'The :attribute field must be true or false.',\n    'confirmed'            => 'The :attribute confirmation does not match.',\n    'date'                 => 'The :attribute is not a valid date.',\n    'date_format'          => 'The :attribute does not match the format :format.',\n    'different'            => 'The :attribute and :other must be different.',\n    'digits'               => 'The :attribute must be :digits digits.',\n    'digits_between'       => 'The :attribute must be between :min and :max digits.',\n    'dimensions'           => 'The :attribute has invalid image dimensions.',\n    'distinct'             => 'The :attribute field has a duplicate value.',\n    'email'                => 'The :attribute must be a valid email address.',\n    'exists'               => 'The selected :attribute is invalid.',\n    'file'                 => 'The :attribute must be a file.',\n    'filled'               => 'The :attribute field must have a value.',\n    'image'                => 'The :attribute must be an image.',\n    'in'                   => 'The selected :attribute is invalid.',\n    'in_array'             => 'The :attribute field does not exist in :other.',\n    'integer'              => 'The :attribute must be an integer.',\n    'ip'                   => 'The :attribute must be a valid IP address.',\n    'ipv4'                 => 'The :attribute must be a valid IPv4 address.',\n    'ipv6'                 => 'The :attribute must be a valid IPv6 address.',\n    'json'                 => 'The :attribute must be a valid JSON string.',\n    'max'                  => [\n        'numeric' => 'The :attribute may not be greater than :max.',\n        'file'    => 'The :attribute may not be greater than :max kilobytes.',\n        'string'  => 'The :attribute may not be greater than :max characters.',\n        'array'   => 'The :attribute may not have more than :max items.',\n    ],\n    'mimes'                => 'The :attribute must be a file of type: :values.',\n    'mimetypes'            => 'The :attribute must be a file of type: :values.',\n    'min'                  => [\n        'numeric' => 'The :attribute must be at least :min.',\n        'file'    => 'The :attribute must be at least :min kilobytes.',\n        'string'  => 'The :attribute must be at least :min characters.',\n        'array'   => 'The :attribute must have at least :min items.',\n    ],\n    'not_in'               => 'The selected :attribute is invalid.',\n    'numeric'              => 'The :attribute must be a number.',\n    'present'              => 'The :attribute field must be present.',\n    'regex'                => 'The :attribute format is invalid.',\n    'required'             => 'The :attribute field is required.',\n    'required_if'          => 'The :attribute field is required when :other is :value.',\n    'required_unless'      => 'The :attribute field is required unless :other is in :values.',\n    'required_with'        => 'The :attribute field is required when :values is present.',\n    'required_with_all'    => 'The :attribute field is required when :values is present.',\n    'required_without'     => 'The :attribute field is required when :values is not present.',\n    'required_without_all' => 'The :attribute field is required when none of :values are present.',\n    'same'                 => 'The :attribute and :other must match.',\n    'size'                 => [\n        'numeric' => 'The :attribute must be :size.',\n        'file'    => 'The :attribute must be :size kilobytes.',\n        'string'  => 'The :attribute must be :size characters.',\n        'array'   => 'The :attribute must contain :size items.',\n    ],\n    'string'               => 'The :attribute must be a string.',\n    'timezone'             => 'The :attribute must be a valid zone.',\n    'unique'               => 'The :attribute has already been taken.',\n    'uploaded'             => 'The :attribute failed to upload.',\n    'url'                  => 'The :attribute format is invalid.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom' => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [],\n\n];\n"
  },
  {
    "path": "resources/lang/th/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'   => 'ข้อมูลที่ใช้ในการยืนยันตัวตนไม่ถูกต้อง',\n    'throttle' => 'คุณได้พยายามเข้าระบบหลายครั้งเกินไป กรุณาลองใหม่ใน :seconds วินาทีข้างหน้า.',\n\n];\n"
  },
  {
    "path": "resources/lang/th/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; ก่อนหน้า',\n    'next'     => 'ถัดไป &raquo;',\n\n];\n"
  },
  {
    "path": "resources/lang/th/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => 'รหัสผ่านต้องมีความยาวอย่างน้อยหกตัวอักษรและต้องตรงกับช่องยืนยันรหัสผ่าน',\n    'reset'    => 'ทำการตั้งค่ารหัสผ่านใหม่แล้ว',\n    'sent'     => 'ส่งเครื่องช่วยเตือนความจำรหัสผ่านแล้ว!',\n    'token'    => 'ชุดรหัสสำหรับการเปลี่ยนรหัสผ่านไม่ถูกต้อง',\n    'user'     => 'ไม่พบผู้ใช้งานที่ตรงกับอีเมล์นี้',\n\n];\n"
  },
  {
    "path": "resources/lang/th/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => 'ข้อมูล :attribute ต้องผ่านการยอมรับก่อน',\n    'active_url'           => 'ข้อมูล :attribute ต้องเป็น URL เท่านั้น',\n    'after'                => 'ข้อมูล :attribute ต้องเป็นวันที่หลังจาก :date.',\n    'after_or_equal'       => 'The :attribute must be a date after or equal to :date.',\n    'alpha'                => 'ข้อมูล :attribute ต้องเป็นตัวอักษรภาษาอังกฤษเท่านั้น',\n    'alpha_dash'           => 'ข้อมูล :attribute ต้องเป็นตัวอักษรภาษาอังกฤษ ตัวเลข และ _ เท่านั้น',\n    'alpha_num'            => 'ข้อมูล :attribute ต้องเป็นตัวอักษรภาษาอังกฤษ ตัวเลข เท่านั้น',\n    'array'                => 'ข้อมูล :attribute ต้องเป็น array เท่านั้น',\n    'before'               => 'ข้อมูล :attribute ต้องเป็นวันที่ก่อน :date.',\n    'before_or_equal'      => 'The :attribute must be a date before or equal to :date.',\n    'between'              => [\n        'numeric' => 'ข้อมูล :attribute ต้องอยู่ในช่วงระหว่าง :min - :max.',\n        'file'    => 'ข้อมูล :attribute ต้องอยู่ในช่วงระหว่าง :min - :max กิโลไบต์',\n        'string'  => 'ข้อมูล :attribute ต้องอยู่ในช่วงระหว่าง :min - :max ตัวอักษร',\n        'array'   => 'ข้อมูล :attribute ต้องอยู่ในช่วงระหว่าง :min - :max ค่า',\n    ],\n    'boolean'              => 'ข้อมูล :attribute ต้องเป็นจริง หรือเท็จ เท่านั้น',\n    'confirmed'            => 'ข้อมูล :attribute ไม่ตรงกัน',\n    'date'                 => 'ข้อมูล :attribute ต้องเป็นวันที่',\n    'date_format'          => 'ข้อมูล :attribute ไม่ตรงกับข้อมูลกำหนด :format.',\n    'different'            => 'ข้อมูล :attribute และ :other ต้องไม่เท่ากัน',\n    'digits'               => 'ข้อมูล :attribute ต้องเป็น :digits',\n    'digits_between'       => 'ข้อมูล :attribute ต้องอยู่ในช่วงระหว่าง :min ถึง :max',\n    'dimensions'           => 'The :attribute has invalid image dimensions.',\n    'distinct'             => 'ข้อมูล :attribute มีค่าที่ซ้ำกัน',\n    'email'                => 'ข้อมูล :attribute ต้องเป็นอีเมล์',\n    'exists'               => 'ข้อมูล ที่ถูกเลือกจาก :attribute ไม่ถูกต้อง',\n    'file'                 => 'The :attribute must be a file.',\n    'filled'               => 'ข้อมูล :attribute จำเป็นต้องกรอก',\n    'image'                => 'ข้อมูล :attribute ต้องเป็นรูปภาพ',\n    'in'                   => 'ข้อมูล ที่ถูกเลือกใน :attribute ไม่ถูกต้อง',\n    'in_array'             => 'ข้อมูล :attribute ไม่มีอยู่ภายในค่าของ :other',\n    'integer'              => 'ข้อมูล :attribute ต้องเป็นตัวเลข',\n    'ip'                   => 'ข้อมูล :attribute ต้องเป็น IP',\n    'ipv4'                 => 'The :attribute must be a valid IPv4 address.',\n    'ipv6'                 => 'The :attribute must be a valid IPv6 address.',\n    'json'                 => 'ข้อมูล :attribute ต้องเป็นอักขระ JSON ที่สมบูรณ์',\n    'max'                  => [\n        'numeric' => 'ข้อมูล :attribute ต้องมีจำนวนไม่เกิน :max.',\n        'file'    => 'ข้อมูล :attribute ต้องมีจำนวนไม่เกิน :max กิโลไบต์',\n        'string'  => 'ข้อมูล :attribute ต้องมีจำนวนไม่เกิน :max ตัวอักษร',\n        'array'   => 'ข้อมูล :attribute ต้องมีจำนวนไม่เกิน :max ค่า',\n    ],\n    'mimes'                => 'ข้อมูล :attribute ต้องเป็นชนิดไฟล์: :values.',\n    'mimetypes'            => 'ข้อมูล :attribute ต้องเป็นชนิดไฟล์: :values.',\n    'min'                  => [\n        'numeric' => 'ข้อมูล :attribute ต้องมีจำนวนอย่างน้อย :min.',\n        'file'    => 'ข้อมูล :attribute ต้องมีจำนวนอย่างน้อย :min กิโลไบต์',\n        'string'  => 'ข้อมูล :attribute ต้องมีจำนวนอย่างน้อย :min ตัวอักษร',\n        'array'   => 'ข้อมูล :attribute ต้องมีจำนวนอย่างน้อย :min ค่า',\n    ],\n    'not_in'               => 'ข้อมูล ที่เลือกจาก :attribute ไม่ถูกต้อง',\n    'numeric'              => 'ข้อมูล :attribute ต้องเป็นตัวเลข',\n    'present'              => 'ข้อมูล :attribute ต้องเป็นปัจจุบัน',\n    'regex'                => 'ข้อมูล :attribute มีรูปแบบไม่ถูกต้อง',\n    'required'             => 'ข้อมูล :attribute จำเป็นต้องกรอก',\n    'required_if'          => 'ข้อมูล :attribute จำเป็นต้องกรอกเมื่อ :other เป็น :value.',\n    'required_unless'      => 'ข้อมูล :attribute จำเป็นต้องกรอกเว้นแต่ :other เป็น :values.',\n    'required_with'        => 'ข้อมูล :attribute จำเป็นต้องกรอกเมื่อ :values มีค่า',\n    'required_with_all'    => 'ข้อมูล :attribute จำเป็นต้องกรอกเมื่อ :values มีค่าทั้งหมด',\n    'required_without'     => 'ข้อมูล :attribute จำเป็นต้องกรอกเมื่อ :values ไม่มีค่า',\n    'required_without_all' => 'ข้อมูล :attribute จำเป็นต้องกรอกเมื่อ :values ไม่มีค่าทั้งหมด',\n    'same'                 => 'ข้อมูล :attribute และ :other ต้องถูกต้อง',\n    'size'                 => [\n        'numeric' => 'ข้อมูล :attribute ต้องเท่ากับ :size',\n        'file'    => 'ข้อมูล :attribute ต้องเท่ากับ :size กิโลไบต์',\n        'string'  => 'ข้อมูล :attribute ต้องเท่ากับ :size ตัวอักษร',\n        'array'   => 'ข้อมูล :attribute ต้องเท่ากับ :size ค่า',\n    ],\n    'string'               => 'ข้อมูล :attribute ต้องเป็นอักขระ',\n    'timezone'             => 'ข้อมูล :attribute ต้องเป็นข้อมูลเขตเวลาที่ถูกต้อง',\n    'unique'               => 'ข้อมูล :attribute ไม่สามารถใช้ได้',\n    'uploaded'             => 'The :attribute failed to upload.',\n    'url'                  => 'ข้อมูล :attribute ไม่ถูกต้อง',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom'               => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes' => [\n        //\n    ],\n\n];\n"
  },
  {
    "path": "resources/lang/tk/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'   => 'These credentials do not match our records.',\n    'throttle' => 'Too many login attempts. Please try again in :seconds seconds.',\n\n];\n"
  },
  {
    "path": "resources/lang/tk/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; Öňki',\n    'next'     => 'Indiki &raquo;',\n\n];\n"
  },
  {
    "path": "resources/lang/tk/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => 'Açarsöz 6 harpdan ybarat bolup, tassyklamasy bilen deň bolmaly.',\n    'reset'    => 'Açarsöz üýtgedildi!',\n    'sent'     => 'Açarsöz ýatlatmasy ugradyldy!',\n    'token'    => 'Açarsöz tazeleme söz birligi ýalňyş.',\n    'user'     => 'Bu e-mail adrese degişli ulanyjy tapylmady.',\n\n];\n"
  },
  {
    "path": "resources/lang/tk/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute kabul edilmelidir.',\n    'active_url'           => ':attribute dogry URL bolmalydyr.',\n    'after'                => ':attribute şundan has köne sene bolmalydyr :date.',\n    'after_or_equal'       => 'The :attribute must be a date after or equal to :date.',\n    'alpha'                => ':attribute dine harplardan durmalydyr.',\n    'alpha_dash'           => ':attribute dine harplardan, sanlardan we tirelerden durmalydyr.',\n    'alpha_num'            => ':attribute dine harplardan we sanlardan durmalydyr.',\n    'array'                => ':attribute ýygyndy bolmalydyr.',\n    'before'               => ':attribute şundan has irki sene bolmalydyr :date.',\n    'before_or_equal'      => 'The :attribute must be a date before or equal to :date.',\n    'between'              => [\n        'numeric' => ':attribute :min - :max arasynda bolmalydyr.',\n        'file'    => ':attribute :min - :max kilobaýt arasynda bolmalydyr.',\n        'string'  => ':attribute :min - :max harplar arasynda bolmalydyr.',\n        'array'   => ':attribute :min - :max arasynda madda eýe bolmalydyr.',\n    ],\n    'boolean'              => ':attribute diňe dogry ýada ýalňyş bolmalydyr.',\n    'confirmed'            => ':attribute tassyklamasy deň däl.',\n    'date'                 => ':attribute dogry sene bolmalydyr.',\n    'date_format'          => ':attribute :format formatyna deň däl.',\n    'different'            => ':attribute bilen :other birbirinden tapawutly bolmalydyr.',\n    'digits'               => ':attribute :digits san bolmalydyr.',\n    'digits_between'       => ':attribute :min bilen :max arasynda san bolmalydyr.',\n    'dimensions'           => 'The :attribute has invalid image dimensions.',\n    'distinct'             => 'The :attribute field has a duplicate value.',\n    'email'                => ':attribute formaty ýalňyş.',\n    'exists'               => 'Saýlanan :attribute ýalňyş.',\n    'file'                 => 'The :attribute must be a file.',\n    'filled'               => ':attribute meýdany zerur.',\n    'image'                => ':attribute surat bolmalydyr.',\n    'in'                   => ':attribute mukdary ýalňyş.',\n    'in_array'             => 'The :attribute field does not exist in :other.',\n    'integer'              => ':attribute san bolmalydyr.',\n    'ip'                   => ':attribute dogry IP adres bolmalydyr.',\n    'ipv4'                 => 'The :attribute must be a valid IPv4 address.',\n    'ipv6'                 => 'The :attribute must be a valid IPv6 address.',\n    'json'                 => 'The :attribute must be a valid JSON string.',\n    'max'                  => [\n        'numeric' => ':attribute :max den kiçi bolmalydyr.',\n        'file'    => ':attribute :max kilobaýtdan kiçi bolmalydyr.',\n        'string'  => ':attribute :max harpdan kiçi bolmalydyr.',\n        'array'   => ':attribute iň az :max maddadan ybarat bolmalydyr.',\n    ],\n    'mimes'                => ':attribute faýlň formaty :values bolmalydyr.',\n    'mimetypes'            => ':attribute faýlň formaty :values bolmalydyr.',\n    'min'                  => [\n        'numeric' => ':attribute mukdary :min dan köp bolmalydyr.',\n        'file'    => ':attribute mukdary :min kilobaýtdan köp bolmalydyr.',\n        'string'  => ':attribute mukdary :min harpdan köp bolmalydyr.',\n        'array'   => ':attribute iň az :min harpdan bolmalydyr.',\n    ],\n    'not_in'               => 'Saýlanan :attribute geçersiz.',\n    'numeric'              => ':attribute san bolmalydyr.',\n    'present'              => 'The :attribute field must be present.',\n    'regex'                => ':attribute formaty ýalňyş.',\n    'required'             => ':attribute meýdany zerur.',\n    'required_if'          => ':attribute meýdany, :other :value hümmetine eýe bolanynda zerurdyr.',\n    'required_unless'      => 'The :attribute field is required unless :other is in :values.',\n    'required_with'        => ':attribute meýdany :values bar bolanda zerurdyr.',\n    'required_with_all'    => ':attribute meýdany haýsyda bolsa bir :values bar bolanda zerurdyr.',\n    'required_without'     => ':attribute meýdany :values ýok bolanda zerurdyr.',\n    'required_without_all' => ':attribute meýdany :values dan haýsyda bolsa biri ýok bolanda zerurdyr.',\n    'same'                 => ':attribute bilen :other deň bolmalydyr.',\n    'size'                 => [\n        'numeric' => ':attribute :size sandan ybarat bolmalydyr.',\n        'file'    => ':attribute :size kilobaýt bolmalydyr.',\n        'string'  => ':attribute :size harp bolmalydyr.',\n        'array'   => ':attribute :size madda eýe bolmalydyr.',\n    ],\n    'string'               => 'The :attribute must be a string.',\n    'timezone'             => ':attribute dogry zolak bolmalydyr.',\n    'unique'               => ':attribute önden hasaba alyndy.',\n    'uploaded'             => 'The :attribute failed to upload.',\n    'url'                  => ':attribute formaty ýalňyş.',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention \"attribute.rule\" to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom'               => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of \"email\". This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes'           => [\n        //\n    ],\n\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/ar/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'رسالة استثناء: :message',\n    'exception_trace' => 'تتبع الإستثناء: :trace',\n    'exception_message_title' => 'رسالة استثناء',\n    'exception_trace_title' => 'تتبع الإستثناء',\n\n    'backup_failed_subject' => 'أخفق النسخ الاحتياطي لل :application_name',\n    'backup_failed_body' => 'مهم: حدث خطأ أثناء النسخ الاحتياطي :application_name',\n\n    'backup_successful_subject' => 'نسخ احتياطي جديد ناجح ل :application_name',\n    'backup_successful_subject_title' => 'نجاح النسخ الاحتياطي الجديد!',\n    'backup_successful_body' => 'أخبار عظيمة، نسخة احتياطية جديدة ل :application_name تم إنشاؤها بنجاح على القرص المسمى :disk_name.',\n\n    'cleanup_failed_subject' => 'فشل تنظيف النسخ الاحتياطي للتطبيق :application_name .',\n    'cleanup_failed_body' => 'حدث خطأ أثناء تنظيف النسخ الاحتياطية ل :application_name',\n\n    'cleanup_successful_subject' => 'تنظيف النسخ الاحتياطية ل :application_name تمت بنجاح',\n    'cleanup_successful_subject_title' => 'تنظيف النسخ الاحتياطية تم بنجاح!',\n    'cleanup_successful_body' => 'تنظيف النسخ الاحتياطية ل :application_name على القرص المسمى :disk_name تم بنجاح.',\n\n    'healthy_backup_found_subject' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name صحية',\n    'healthy_backup_found_subject_title' => 'النسخ الاحتياطية ل :application_name صحية',\n    'healthy_backup_found_body' => 'تعتبر النسخ الاحتياطية ل :application_name صحية. عمل جيد!',\n\n    'unhealthy_backup_found_subject' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية',\n    'unhealthy_backup_found_subject_title' => 'مهم: النسخ الاحتياطية ل :application_name غير صحية. :problem',\n    'unhealthy_backup_found_body' => 'النسخ الاحتياطية ل :application_name على القرص :disk_name غير صحية.',\n    'unhealthy_backup_found_not_reachable' => 'لا يمكن الوصول إلى وجهة النسخ الاحتياطي. :error',\n    'unhealthy_backup_found_empty' => 'لا توجد نسخ احتياطية لهذا التطبيق على الإطلاق.',\n    'unhealthy_backup_found_old' => 'تم إنشاء أحدث النسخ الاحتياطية في :date وتعتبر قديمة جدا.',\n    'unhealthy_backup_found_unknown' => 'عذرا، لا يمكن تحديد سبب دقيق.',\n    'unhealthy_backup_found_full' => 'النسخ الاحتياطية تستخدم الكثير من التخزين. الاستخدام الحالي هو :disk_usage وهو أعلى من الحد المسموح به من :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/da/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Fejlbesked: :message',\n    'exception_trace' => 'Fejl trace: :trace',\n    'exception_message_title' => 'Fejlbesked',\n    'exception_trace_title' => 'Fejl trace',\n\n    'backup_failed_subject' => 'Backup af :application_name fejlede',\n    'backup_failed_body' => 'Vigtigt: Der skete en fejl under backup af :application_name',\n\n    'backup_successful_subject' => 'Ny backup af :application_name oprettet',\n    'backup_successful_subject_title' => 'Ny backup!',\n    'backup_successful_body' => 'Gode nyheder - der blev oprettet en ny backup af :application_name på disken :disk_name.',\n\n    'cleanup_failed_subject' => 'Oprydning af backups for :application_name fejlede.',\n    'cleanup_failed_body' => 'Der skete en fejl under oprydning af backups for :application_name',\n\n    'cleanup_successful_subject' => 'Oprydning af backups for :application_name gennemført',\n    'cleanup_successful_subject_title' => 'Backup oprydning gennemført!',\n    'cleanup_successful_body' => 'Oprydningen af backups for :application_name på disken :disk_name er gennemført.',\n\n    'healthy_backup_found_subject' => 'Alle backups for :application_name på disken :disk_name er OK',\n    'healthy_backup_found_subject_title' => 'Alle backups for :application_name er OK',\n    'healthy_backup_found_body' => 'Alle backups for :application_name er ok. Godt gået!',\n\n    'unhealthy_backup_found_subject' => 'Vigtigt: Backups for :application_name fejlbehæftede',\n    'unhealthy_backup_found_subject_title' => 'Vigtigt: Backups for :application_name er fejlbehæftede. :problem',\n    'unhealthy_backup_found_body' => 'Backups for :application_name på disken :disk_name er fejlbehæftede.',\n    'unhealthy_backup_found_not_reachable' => 'Backup destinationen kunne ikke findes. :error',\n    'unhealthy_backup_found_empty' => 'Denne applikation har ingen backups overhovedet.',\n    'unhealthy_backup_found_old' => 'Den seneste backup fra :date er for gammel.',\n    'unhealthy_backup_found_unknown' => 'Beklager, en præcis årsag kunne ikke findes.',\n    'unhealthy_backup_found_full' => 'Backups bruger for meget plads. Nuværende disk forbrug er :disk_usage, hvilket er mere end den tilladte grænse på :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/de/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Fehlermeldung: :message',\n    'exception_trace' => 'Fehlerverfolgung: :trace',\n    'exception_message_title' => 'Fehlermeldung',\n    'exception_trace_title' => 'Fehlerverfolgung',\n\n    'backup_failed_subject' => 'Backup von :application_name konnte nicht erstellt werden',\n    'backup_failed_body' => 'Wichtig: Beim Backup von :application_name ist ein Fehler aufgetreten',\n\n    'backup_successful_subject' => 'Erfolgreiches neues Backup von :application_name',\n    'backup_successful_subject_title' => 'Erfolgreiches neues Backup!',\n    'backup_successful_body' => 'Gute Nachrichten, ein neues Backup von :application_name wurde erfolgreich erstellt und in :disk_name gepeichert.',\n\n    'cleanup_failed_subject' => 'Aufräumen der Backups von :application_name schlug fehl.',\n    'cleanup_failed_body' => 'Beim aufräumen der Backups von :application_name ist ein Fehler aufgetreten',\n\n    'cleanup_successful_subject' => 'Aufräumen der Backups von :application_name backups erfolgreich',\n    'cleanup_successful_subject_title' => 'Aufräumen der Backups erfolgreich!',\n    'cleanup_successful_body' => 'Aufräumen der Backups von :application_name in :disk_name war erfolgreich.',\n\n    'healthy_backup_found_subject' => 'Die Backups von :application_name in :disk_name sind gesund',\n    'healthy_backup_found_subject_title' => 'Die Backups von :application_name sind Gesund',\n    'healthy_backup_found_body' => 'Die Backups von :application_name wurden als gesund eingestuft. Gute Arbeit!',\n\n    'unhealthy_backup_found_subject' => 'Wichtig: Die Backups für :application_name sind nicht gesund',\n    'unhealthy_backup_found_subject_title' => 'Wichtig: Die Backups für :application_name sind ungesund. :problem',\n    'unhealthy_backup_found_body' => 'Die Backups für :application_name in :disk_name sind ungesund.',\n    'unhealthy_backup_found_not_reachable' => 'Das Backup Ziel konnte nicht erreicht werden. :error',\n    'unhealthy_backup_found_empty' => 'Es gibt für die Anwendung noch gar keine Backups.',\n    'unhealthy_backup_found_old' => 'Das letzte Backup am :date ist zu lange her.',\n    'unhealthy_backup_found_unknown' => 'Sorry, ein genauer Grund konnte nicht gefunden werden.',\n    'unhealthy_backup_found_full' => 'Die Backups verbrauchen zu viel Platz. Aktuell wird :disk_usage belegt, dass ist höher als das erlaubte Limit von :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/en/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception message: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception message',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Failed back up of :application_name',\n    'backup_failed_body' => 'Important: An error occurred while backing up :application_name',\n\n    'backup_successful_subject' => 'Successful new backup of :application_name',\n    'backup_successful_subject_title' => 'Successful new backup!',\n    'backup_successful_body' => 'Great news, a new backup of :application_name was successfully created on the disk named :disk_name.',\n\n    'cleanup_failed_subject' => 'Cleaning up the backups of :application_name failed.',\n    'cleanup_failed_body' => 'An error occurred while cleaning up the backups of :application_name',\n\n    'cleanup_successful_subject' => 'Clean up of :application_name backups successful',\n    'cleanup_successful_subject_title' => 'Clean up of backups successful!',\n    'cleanup_successful_body' => 'The clean up of the :application_name backups on the disk named :disk_name was successful.',\n\n    'healthy_backup_found_subject' => 'The backups for :application_name on disk :disk_name are healthy',\n    'healthy_backup_found_subject_title' => 'The backups for :application_name are healthy',\n    'healthy_backup_found_body' => 'The backups for :application_name are considered healthy. Good job!',\n\n    'unhealthy_backup_found_subject' => 'Important: The backups for :application_name are unhealthy',\n    'unhealthy_backup_found_subject_title' => 'Important: The backups for :application_name are unhealthy. :problem',\n    'unhealthy_backup_found_body' => 'The backups for :application_name on disk :disk_name are unhealthy.',\n    'unhealthy_backup_found_not_reachable' => 'The backup destination cannot be reached. :error',\n    'unhealthy_backup_found_empty' => 'There are no backups of this application at all.',\n    'unhealthy_backup_found_old' => 'The latest backup made on :date is considered too old.',\n    'unhealthy_backup_found_unknown' => 'Sorry, an exact reason cannot be determined.',\n    'unhealthy_backup_found_full' => 'The backups are using too much storage. Current usage is :disk_usage which is higher than the allowed limit of :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/es/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Mensaje de la excepción: :message',\n    'exception_trace' => 'Traza de la excepción: :trace',\n    'exception_message_title' => 'Mensaje de la excepción',\n    'exception_trace_title' => 'Traza de la excepción',\n\n    'backup_failed_subject' => 'Copia de seguridad de :application_name fallida',\n    'backup_failed_body' => 'Importante: Ocurrió un error al realizar la copia de seguridad de :application_name',\n\n    'backup_successful_subject' => 'Se completó con éxito la copia de seguridad de :application_name',\n    'backup_successful_subject_title' => '¡Nueva copia de seguridad creada con éxito!',\n    'backup_successful_body' => 'Buenas noticias, una nueva copia de seguridad de :application_name fue creada con éxito en el disco llamado :disk_name.',\n\n    'cleanup_failed_subject' => 'La limpieza de copias de seguridad de :application_name falló.',\n    'cleanup_failed_body' => 'Ocurrió un error mientras se realizaba la limpieza de copias de seguridad de :application_name',\n\n    'cleanup_successful_subject' => 'La limpieza de copias de seguridad de :application_name se completó con éxito',\n    'cleanup_successful_subject_title' => '!Limpieza de copias de seguridad completada con éxito!',\n    'cleanup_successful_body' => 'La limpieza de copias de seguridad de :application_name en el disco llamado :disk_name se completo con éxito.',\n\n    'healthy_backup_found_subject' => 'Las copias de seguridad de :application_name en el disco :disk_name están en buen estado',\n    'healthy_backup_found_subject_title' => 'Las copias de seguridad de :application_name están en buen estado',\n    'healthy_backup_found_body' => 'Las copias de seguridad de :application_name se consideran en buen estado. ¡Buen trabajo!',\n\n    'unhealthy_backup_found_subject' => 'Importante: Las copias de seguridad de :application_name están en mal estado',\n    'unhealthy_backup_found_subject_title' => 'Importante: Las copias de seguridad de :application_name están en mal estado. :problem',\n    'unhealthy_backup_found_body' => 'Las copias de seguridad de :application_name en el disco :disk_name están en mal estado.',\n    'unhealthy_backup_found_not_reachable' => 'No se puede acceder al destino de la copia de seguridad. :error',\n    'unhealthy_backup_found_empty' => 'No existe ninguna copia de seguridad de esta aplicación.',\n    'unhealthy_backup_found_old' => 'La última copia de seguriad hecha en :date es demasiado antigua.',\n    'unhealthy_backup_found_unknown' => 'Lo siento, no es posible determinar la razón exacta.',\n    'unhealthy_backup_found_full' => 'Las copias de seguridad  están ocupando demasiado espacio. El espacio utilizado actualmente es :disk_usage el cual es mayor que el límite permitido de :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/fr/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Message de l\\'exception: :message',\n    'exception_trace' => 'Trace de l\\'exception: :trace',\n    'exception_message_title' => 'Message de l\\'exception',\n    'exception_trace_title' => 'Trace de l\\'exception',\n\n    'backup_failed_subject' => 'Échec de la sauvegarde de :application_name',\n    'backup_failed_body' => 'Important : Une erreur est survenue lors de la sauvegarde de :application_name',\n\n    'backup_successful_subject' => 'Succès de la sauvegarde de :application_name',\n    'backup_successful_subject_title' => 'Sauvegarde créée avec succès !',\n    'backup_successful_body' => 'Bonne nouvelle, une nouvelle sauvegarde de :application_name a été créé avec succès sur le disque nommé :disk_name.',\n\n    'cleanup_failed_subject' => 'Le nettoyage des sauvegardes de :application_name a echoué.',\n    'cleanup_failed_body' => 'Une erreur est survenue lors du nettoyage des sauvegardes de :application_name',\n\n    'cleanup_successful_subject' => 'Succès du nettoyage des sauvegardes de :application_name',\n    'cleanup_successful_subject_title' => 'Sauvegardes nettoyées avec succès !',\n    'cleanup_successful_body' => 'Le nettoyage des sauvegardes de :application_name sur le disque nommé :disk_name a été effectué avec succès.',\n\n    'healthy_backup_found_subject' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont saines.',\n    'healthy_backup_found_subject_title' => 'Les sauvegardes pour :application_name sont saines',\n    'healthy_backup_found_body' => 'Les sauvegardes pour :application_name sont considérées saines. Bon travail !',\n\n    'unhealthy_backup_found_subject' => 'Important : Les sauvegardes pour :application_name sont corrompues',\n    'unhealthy_backup_found_subject_title' => 'Important : Les sauvegardes pour :application_name sont corrompues. :problem',\n    'unhealthy_backup_found_body' => 'Les sauvegardes pour :application_name sur le disque :disk_name sont corrompues.',\n    'unhealthy_backup_found_not_reachable' => 'La destination de la sauvegarde n\\'est pas accessible. :error',\n    'unhealthy_backup_found_empty' => 'Il n\\'y a aucune sauvegarde pour cette application.',\n    'unhealthy_backup_found_old' => 'La dernière sauvegarde du :date est considérée trop vieille',\n    'unhealthy_backup_found_unknown' => 'Désolé, une raison exacte ne peut être déterminée',\n    'unhealthy_backup_found_full' => 'Les sauvegardes utilisent trop de place. L\\'utilisation actuelle est de :disk_usage alors que la limite allouée est de :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/pt-BR/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Exception message: :message',\n    'exception_trace' => 'Exception trace: :trace',\n    'exception_message_title' => 'Exception message',\n    'exception_trace_title' => 'Exception trace',\n\n    'backup_failed_subject' => 'Falha no backup da aplicação :application_name',\n    'backup_failed_body' => 'Importante: Ocorreu um erro ao fazer o backup da aplicação :application_name',\n\n    'backup_successful_subject' => 'Backup realizado com sucesso: :application_name',\n    'backup_successful_subject_title' => 'Backup Realizado com sucesso!',\n    'backup_successful_body' => 'Boas notícias, um novo backup da aplicação :application_name foi criado no disco :disk_name.',\n\n    'cleanup_failed_subject' => 'Falha na limpeza dos backups da aplicação :application_name.',\n    'cleanup_failed_body' => 'Um erro ocorreu ao fazer a limpeza dos backups da aplicação :application_name',\n\n    'cleanup_successful_subject' => 'Limpeza dos backups da aplicação :application_name concluída!',\n    'cleanup_successful_subject_title' => 'Limpeza dos backups concluída!',\n    'cleanup_successful_body' => 'A limpeza dos backups da aplicação :application_name no disco :disk_name foi concluída.',\n\n    'healthy_backup_found_subject' => 'Os backups da aplicação :application_name no disco :disk_name estão em dia',\n    'healthy_backup_found_subject_title' => 'Os backups da aplicação :application_name estão em dia',\n    'healthy_backup_found_body' => 'Os backups da aplicação :application_name estão em dia. Bom trabalho!',\n\n    'unhealthy_backup_found_subject' => 'Importante: Os backups da aplicação :application_name não estão em dia',\n    'unhealthy_backup_found_subject_title' => 'Importante: Os backups da aplicação :application_name não estão em dia. :problem',\n    'unhealthy_backup_found_body' => 'Os backups da aplicação :application_name no disco :disk_name não estão em dia.',\n    'unhealthy_backup_found_not_reachable' => 'O destino dos backups não pode ser alcançado. :error',\n    'unhealthy_backup_found_empty' => 'Não existem backups para essa aplicação.',\n    'unhealthy_backup_found_old' => 'O último backup realizado em :date é considerado muito antigo.',\n    'unhealthy_backup_found_unknown' => 'Desculpe, a exata razão não pode ser encontrada.',\n    'unhealthy_backup_found_full' => 'Os backups estão usando muito espaço de armazenamento. A utilização atual é de :disk_usage, o que é maior que o limite permitido de :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/ro/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Cu excepția mesajului: :message',\n    'exception_trace' => 'Urmă excepţie: :trace',\n    'exception_message_title' => 'Mesaj de excepție',\n    'exception_trace_title' => 'Urmă excepţie',\n\n    'backup_failed_subject' => 'Nu s-a putut face copie de rezervă pentru :application_name',\n    'backup_failed_body' => 'Important: A apărut o eroare în timpul generării copiei de rezervă pentru :application_name',\n\n    'backup_successful_subject' => 'Copie de rezervă efectuată cu succes pentru :application_name',\n    'backup_successful_subject_title' => 'O nouă copie de rezervă a fost efectuată cu succes!',\n    'backup_successful_body' => 'Vești bune, o nouă copie de rezervă pentru :application_name a fost creată cu succes pe discul cu numele :disk_name.',\n\n    'cleanup_failed_subject' => 'Curățarea copiilor de rezervă pentru :application_name nu a reușit.',\n    'cleanup_failed_body' => 'A apărut o eroare în timpul curățirii copiilor de rezervă pentru :application_name',\n\n    'cleanup_successful_subject' => 'Curățarea copiilor de rezervă pentru :application_name a fost făcută cu succes',\n    'cleanup_successful_subject_title' => 'Curățarea copiilor de rezervă a fost făcută cu succes!',\n    'cleanup_successful_body' => 'Curățarea copiilor de rezervă pentru :application_name de pe discul cu numele :disk_name a fost făcută cu succes.',\n\n    'healthy_backup_found_subject' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name sunt în regulă',\n    'healthy_backup_found_subject_title' => 'Copiile de rezervă pentru :application_name sunt în regulă',\n    'healthy_backup_found_body' => 'Copiile de rezervă pentru :application_name sunt considerate în regulă. Bună treabă!',\n\n    'unhealthy_backup_found_subject' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă',\n    'unhealthy_backup_found_subject_title' => 'Important: Copiile de rezervă pentru :application_name nu sunt în regulă. :problem',\n    'unhealthy_backup_found_body' => 'Copiile de rezervă pentru :application_name de pe discul :disk_name nu sunt în regulă.',\n    'unhealthy_backup_found_not_reachable' => 'Nu se poate ajunge la destinația copiilor de rezervă. :error',\n    'unhealthy_backup_found_empty' => 'Nu există copii de rezervă ale acestei aplicații.',\n    'unhealthy_backup_found_old' => 'Cea mai recentă copie de rezervă făcută la :date este considerată prea veche.',\n    'unhealthy_backup_found_unknown' => 'Ne pare rău, un motiv exact nu poate fi determinat.',\n    'unhealthy_backup_found_full' => 'Copiile de rezervă folosesc prea mult spațiu de stocare. Utilizarea curentă este de :disk_usage care este mai mare decât limita permisă de :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/ru/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Сообщение об ошибке: :message',\n    'exception_trace' => 'Сведения об ошибке: :trace',\n    'exception_message_title' => 'Сообщение об ошибке',\n    'exception_trace_title' => 'Сведения об ошибке',\n\n    'backup_failed_subject' => 'Не удалось сделать резервную копию :application_name',\n    'backup_failed_body' => 'Внимание: Произошла ошибка во время резервного копирования :application_name',\n\n    'backup_successful_subject' => 'Успешно создана новая резервная копия :application_name',\n    'backup_successful_subject_title' => 'Успешно создана новая резервная копия!',\n    'backup_successful_body' => 'Отличная новость, новая резервная копия :application_name успешно создана и сохранена на диск :disk_name.',\n\n    'cleanup_failed_subject' => 'Не удалось очистить резервные копии :application_name',\n    'cleanup_failed_body' => 'Произошла ошибка при очистке резервных копий :application_name',\n\n    'cleanup_successful_subject' => 'Очистка от резервных копий :application_name прошла успешно',\n    'cleanup_successful_subject_title' => 'Очистка резервных копий прошла удачно!',\n    'cleanup_successful_body' => 'Очистка от старых резервных копий :application_name на диске :disk_name прошла удачно.',\n\n    'healthy_backup_found_subject' => 'Резервная копия :application_name с диска :disk_name установлена',\n    'healthy_backup_found_subject_title' => 'Резервная копия :application_name установлена',\n    'healthy_backup_found_body' => 'Резервная копия :application_name успешно установлена. Хорошая работа!',\n\n    'unhealthy_backup_found_subject' => 'Внимание: резервная копия :application_name не установилась',\n    'unhealthy_backup_found_subject_title' => 'Внимание: резервная копия для :application_name не установилась. :problem',\n    'unhealthy_backup_found_body' => 'Резервная копия для :application_name на диске :disk_name не установилась.',\n    'unhealthy_backup_found_not_reachable' => 'Резервная копия не смогла установиться. :error',\n    'unhealthy_backup_found_empty' => 'Резервные копии для этого приложения отсутствуют.',\n    'unhealthy_backup_found_old' => 'Последнее резервное копирование создано :date является устаревшим.',\n    'unhealthy_backup_found_unknown' => 'Извините, точная причина не может быть определена.',\n    'unhealthy_backup_found_full' => 'Резервные копии используют слишком много памяти. Используется :disk_usage что выше допустимого предела: :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/vendor/laravel-backup/uk/notifications.php",
    "content": "<?php\n\nreturn [\n    'exception_message' => 'Повідомлення про помилку: :message',\n    'exception_trace' => 'Деталі помилки: :trace',\n    'exception_message_title' => 'Повідомлення помилки',\n    'exception_trace_title' => 'Деталі помилки',\n\n    'backup_failed_subject' => 'Не вдалось зробити резервну копію :application_name',\n    'backup_failed_body' => 'Увага: Трапилась помилка під час резервного копіювання :application_name',\n\n    'backup_successful_subject' => 'Успішне резервне копіювання :application_name',\n    'backup_successful_subject_title' => 'Успішно створена резервна копія!',\n    'backup_successful_body' => 'Чудова новина, нова резервна копія :application_name успішно створена і збережена на диск :disk_name.',\n\n    'cleanup_failed_subject' => 'Не вдалось очистити резервні копії :application_name',\n    'cleanup_failed_body' => 'Сталася помилка під час очищення резервних копій :application_name',\n\n    'cleanup_successful_subject' => 'Успішне очищення від резервних копій :application_name',\n    'cleanup_successful_subject_title' => 'Очищення резервних копій пройшло вдало!',\n    'cleanup_successful_body' => 'Очищенно від старих резервних копій :application_name на диску :disk_name пойшло успішно.',\n\n    'healthy_backup_found_subject' => 'Резервна копія :application_name з диску :disk_name установлена',\n    'healthy_backup_found_subject_title' => 'Резервна копія :application_name установлена',\n    'healthy_backup_found_body' => 'Резервна копія :application_name успішно установлена. Хороша робота!',\n\n    'unhealthy_backup_found_subject' => 'Увага: резервна копія :application_name не установилась',\n    'unhealthy_backup_found_subject_title' => 'Увага: резервна копія для :application_name не установилась. :problem',\n    'unhealthy_backup_found_body' => 'Резервна копія для :application_name на диску :disk_name не установилась.',\n    'unhealthy_backup_found_not_reachable' => 'Резервна копія не змогла установитись. :error',\n    'unhealthy_backup_found_empty' => 'Резервні копії для цього додатку відсутні.',\n    'unhealthy_backup_found_old' => 'Останнє резервне копіювання створено :date є застарілим.',\n    'unhealthy_backup_found_unknown' => 'Вибачте, але ми не змогли визначити точну причину.',\n    'unhealthy_backup_found_full' => 'Резервні копії використовують занадто багато пам`яті. Використовується :disk_usage що вище за допустиму межу :disk_limit.',\n];\n"
  },
  {
    "path": "resources/lang/zh-CN/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'   => '用户名或密码错误。',\n    'throttle' => '您的尝试登录次数过多. 请 :seconds 秒后再试。',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-CN/codehaoshi.php",
    "content": "<?php\nreturn [\n    'login' => '登录',\n    'login_Successful' => '登录成功!',\n    'sorry,your account has been disabled.' => '您的账号已被禁用!',\n    'operation succeeded.' => '操作成功',\n    'Operation succeed.' => '操作成功',\n    'signOut' => '退出登录',\n    'Sorry, this socialite account has been registed.' => '绑定失败：你的 :driver 账号已被其他用户使用. T_T',\n    'Are you sure want to logout?' => '你确定要退出登录?',\n    'Dashboard' => '管理后台',\n    'Reply' => '评论',\n    'Signin' => '登录',\n    'No comments' => '暂无评论',\n    'Total Reply Count' => '回复数量',\n    'Total Comment Count' => '评论数量',\n    'Record some cool articles.' => '一些实用的代码片段或技术文章。',\n    'A hodgepodge of problems.' => '那些年踩过的坑。',\n];"
  },
  {
    "path": "resources/lang/zh-CN/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; 上一页',\n    'next'     => '下一页 &raquo;',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-CN/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => '密码至少是六位字符并且匹配。',\n    'reset'    => '密码重置成功！',\n    'sent'     => '密码重置邮件已发送！',\n    'token'    => '密码重置令牌无效。',\n    'user'     => '找不到该邮箱对应的用户。',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-CN/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => ':attribute 必须接受。',\n    'active_url'           => ':attribute 不是一个有效的网址。',\n    'after'                => ':attribute 必须要晚于 :date。',\n    'after_or_equal'       => ':attribute 必须要等于 :date 或更晚。',\n    'alpha'                => ':attribute 只能由字母组成。',\n    'alpha_dash'           => ':attribute 只能由字母、数字和斜杠组成。',\n    'alpha_num'            => ':attribute 只能由字母和数字组成。',\n    'array'                => ':attribute 必须是一个数组。',\n    'before'               => ':attribute 必须要早于 :date。',\n    'before_or_equal'      => ':attribute 必须要等于 :date 或更早。',\n    'between'              => [\n        'numeric' => ':attribute 必须介于 :min - :max 之间。',\n        'file'    => ':attribute 必须介于 :min - :max kb 之间。',\n        'string'  => ':attribute 必须介于 :min - :max 个字符之间。',\n        'array'   => ':attribute 必须只有 :min - :max 个单元。',\n    ],\n    'boolean'              => ':attribute 必须为布尔值。',\n    'confirmed'            => ':attribute 两次输入不一致。',\n    'date'                 => ':attribute 不是一个有效的日期。',\n    'date_format'          => ':attribute 的格式必须为 :format。',\n    'different'            => ':attribute 和 :other 必须不同。',\n    'digits'               => ':attribute 必须是 :digits 位的数字。',\n    'digits_between'       => ':attribute 必须是介于 :min 和 :max 位的数字。',\n    'dimensions'           => ':attribute 图片尺寸不正确。',\n    'distinct'             => ':attribute 已经存在。',\n    'email'                => ':attribute 不是一个合法的邮箱。',\n    'exists'               => ':attribute 不存在。',\n    'file'                 => ':attribute 必须是文件。',\n    'filled'               => ':attribute 不能为空。',\n    'image'                => ':attribute 必须是图片。',\n    'in'                   => '已选的属性 :attribute 非法。',\n    'in_array'             => ':attribute 没有在 :other 中。',\n    'integer'              => ':attribute 必须是整数。',\n    'ip'                   => ':attribute 必须是有效的 IP 地址。',\n    'ipv4'                 => ':attribute 必须是有效的 IPv4 地址。',\n    'ipv6'                 => ':attribute 必须是有效的 IPv6 地址。',\n    'json'                 => ':attribute 必须是正确的 JSON 格式。',\n    'max'                  => [\n        'numeric' => ':attribute 不能大于 :max。',\n        'file'    => ':attribute 不能大于 :max kb。',\n        'string'  => ':attribute 不能大于 :max 个字符。',\n        'array'   => ':attribute 最多只有 :max 个单元。',\n    ],\n    'mimes'                => ':attribute 必须是一个 :values 类型的文件。',\n    'mimetypes'            => ':attribute 必须是一个 :values 类型的文件。',\n    'min'                  => [\n        'numeric' => ':attribute 必须大于等于 :min。',\n        'file'    => ':attribute 大小不能小于 :min kb。',\n        'string'  => ':attribute 至少为 :min 个字符。',\n        'array'   => ':attribute 至少有 :min 个单元。',\n    ],\n    'not_in'               => '已选的属性 :attribute 非法。',\n    'numeric'              => ':attribute 必须是一个数字。',\n    'present'              => ':attribute 必须存在。',\n    'regex'                => ':attribute 格式不正确。',\n    'required'             => ':attribute 不能为空。',\n    'required_if'          => '当 :other 为 :value 时 :attribute 不能为空。',\n    'required_unless'      => '当 :other 不为 :value 时 :attribute 不能为空。',\n    'required_with'        => '当 :values 存在时 :attribute 不能为空。',\n    'required_with_all'    => '当 :values 存在时 :attribute 不能为空。',\n    'required_without'     => '当 :values 不存在时 :attribute 不能为空。',\n    'required_without_all' => '当 :values 都不存在时 :attribute 不能为空。',\n    'same'                 => ':attribute 和 :other 必须相同。',\n    'size'                 => [\n        'numeric' => ':attribute 大小必须为 :size。',\n        'file'    => ':attribute 大小必须为 :size kb。',\n        'string'  => ':attribute 必须是 :size 个字符。',\n        'array'   => ':attribute 必须为 :size 个单元。',\n    ],\n    'string'               => ':attribute 必须是一个字符串。',\n    'timezone'             => ':attribute 必须是一个合法的时区值。',\n    'unique'               => ':attribute 已经存在。',\n    'uploaded'             => ':attribute 上传失败。',\n    'url'                  => ':attribute 格式不正确。',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom'               => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes'           => [\n        'name'                  => '名称',\n        'username'              => '用户名',\n        'email'                 => '邮箱',\n        'first_name'            => '名',\n        'last_name'             => '姓',\n        'password'              => '密码',\n        'password_confirmation' => '确认密码',\n        'city'                  => '城市',\n        'country'               => '国家',\n        'address'               => '地址',\n        'phone'                 => '电话',\n        'mobile'                => '手机',\n        'age'                   => '年龄',\n        'sex'                   => '性别',\n        'gender'                => '性别',\n        'day'                   => '天',\n        'month'                 => '月',\n        'year'                  => '年',\n        'hour'                  => '时',\n        'minute'                => '分',\n        'second'                => '秒',\n        'title'                 => '标题',\n        'content'               => '内容',\n        'description'           => '描述',\n        'excerpt'               => '摘要',\n        'date'                  => '日期',\n        'time'                  => '时间',\n        'available'             => '可用的',\n        'size'                  => '大小',\n    ],\n\n];\n"
  },
  {
    "path": "resources/lang/zh-HK/auth.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Authentication Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used during authentication for various\n    | messages that we need to display to the user. You are free to modify\n    | these language lines according to your application's requirements.\n    |\n    */\n\n    'failed'   => '用戶名或密碼錯誤',\n    'throttle' => '登入次數過多，請在 :seconds 秒後再試。',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-HK/pagination.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Pagination Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used by the paginator library to build\n    | the simple pagination links. You are free to change them to anything\n    | you want to customize your views to better match your application.\n    |\n    */\n\n    'previous' => '&laquo; 上一頁',\n    'next'     => '下一頁 &raquo;',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-HK/passwords.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Password Reminder Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are the default lines which match reasons\n    | that are given by the password broker for a password update attempt\n    | has failed, such as for an invalid token or invalid new password.\n    |\n    */\n\n    'password' => '密碼至少為六位字符且與密碼確認欄位的輸入相符。',\n    'reset'    => '密碼重設已完成！',\n    'sent'     => '密碼重設電郵經已寄出！',\n    'token'    => '密碼重設碼不正確。',\n    'user'     => '找不到該電郵地址所對應的用戶。',\n\n];\n"
  },
  {
    "path": "resources/lang/zh-HK/validation.php",
    "content": "<?php\n\nreturn [\n\n    /*\n    |--------------------------------------------------------------------------\n    | Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines contain the default error messages used by\n    | the validator class. Some of these rules have multiple versions such\n    | such as the size rules. Feel free to tweak each of these messages.\n    |\n    */\n\n    'accepted'             => '必須接受 :attribute。',\n    'active_url'           => ':attribute 並非一個有效的網址。',\n    'after'                => ':attribute 必須要晚於 :date。',\n    'after_or_equal'       => ':attribute 必須要等於 :date 或更晚。',\n    'alpha'                => ':attribute 只能以字母組成。',\n    'alpha_dash'           => ':attribute 只能以字母、數字及斜線組成。',\n    'alpha_num'            => ':attribute 只能以字母及數字組成。',\n    'array'                => ':attribute 必須為陣列。',\n    'before'               => ':attribute 必須要早於 :date。',\n    'before_or_equal'      => ':attribute 必須要等於 :date 或更早。',\n    'between'              => [\n        'numeric' => ':attribute 必須介乎 :min 至 :max 之間。',\n        'file'    => ':attribute 必須介乎 :min 至 :max kb 之間。 ',\n        'string'  => ':attribute 必須介乎 :min 至 :max 個字符之間。',\n        'array'   => ':attribute: 必須有 :min 至 :max 個項目。',\n    ],\n    'boolean'              => ':attribute 必須是布爾值。',\n    'confirmed'            => ':attribute 確認欄位的輸入並不相符。',\n    'date'                 => ':attribute 並非一個有效的日期。',\n    'date_format'          => ':attribute 與 :format 格式不相符。',\n    'different'            => ':attribute 與 :other 必須不同。',\n    'digits'               => ':attribute 必須是 :digits 位數字。',\n    'digits_between'       => ':attribute 必須介乎 :min 至 :max 位數字。',\n    'dimensions'           => ':attribute 圖片尺寸不正確。',\n    'distinct'             => ':attribute 已經存在。',\n    'email'                => ':attribute 必須是有效的電郵地址。',\n    'exists'               => ':attribute 不存在。',\n    'file'                 => ':attribute 必須是文件。',\n    'filled'               => ':attribute 不能留空。',\n    'image'                => ':attribute 必須是一張圖片。',\n    'in'                   => '所揀選的 :attribute 選項無效。',\n    'in_array'             => ':attribute 沒有在 :other 中。',\n    'integer'              => ':attribute 必須是一個整數。',\n    'ip'                   => ':attribute 必須是一個有效的 IP 地址。',\n    'ipv4'                 => ':attribute 必須是一個有效的 IPv4 地址。',\n    'ipv6'                 => ':attribute 必須是一個有效的 IPv6 地址。',\n    'json'                 => ':attribute 必須是正確的 JSON 格式。',\n    'max'                  => [\n        'numeric' => ':attribute 不能大於 :max。',\n        'file'    => ':attribute 不能大於 :max kb。',\n        'string'  => ':attribute 不能多於 :max 個字符。',\n        'array'   => ':attribute 不能多於 :max 個項目。',\n    ],\n    'mimes'                => ':attribute 必須為 :values 的檔案。',\n    'mimetypes'            => ':attribute 必須為 :values 的檔案。',\n    'min'                  => [\n        'numeric' => ':attribute 不能小於 :min。',\n        'file'    => ':attribute 不能小於 :min kb。',\n        'string'  => ':attribute 不能小於 :min 個字符。',\n        'array'   => ':attribute 不能小於 :min 個項目。',\n    ],\n    'not_in'               => '所揀選的 :attribute 選項無效。',\n    'numeric'              => ':attribute 必須為一個數字。',\n    'present'              => ':attribute 必須存在。',\n    'regex'                => ':attribute 的格式錯誤。',\n    'required'             => ':attribute 不能留空。',\n    'required_if'          => '當 :other 是 :value 時 :attribute 不能留空。',\n    'required_unless'      => '當 :other 不是 :value 時 :attribute 不能留空。',\n    'required_with'        => '當 :values 出現時 :attribute 不能留空。',\n    'required_with_all'    => '當 :values 出現時 :attribute 不能留空。',\n    'required_without'     => '當 :values 留空時 :attribute field 不能留空。',\n    'required_without_all' => '當 :values 都不出現時 :attribute 不能留空。',\n    'same'                 => ':attribute 與 :other 必須相同。',\n    'size'                 => [\n        'numeric' => ':attribute 的大小必須是 :size。',\n        'file'    => ':attribute 的大小必須是 :size kb。',\n        'string'  => ':attribute 必須是 :size 個字符。',\n        'array'   => ':attribute 必須是 :size 個單元。',\n    ],\n    'string'               => ':attribute 必須是一個字符串',\n    'timezone'             => ':attribute 必須是一個正確的時區值。',\n    'unique'               => ':attribute 已經存在。',\n    'uploaded'             => ':attribute 上傳失敗。',\n    'url'                  => ':attribute 的格式錯誤。',\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Language Lines\n    |--------------------------------------------------------------------------\n    |\n    | Here you may specify custom validation messages for attributes using the\n    | convention 'attribute.rule' to name the lines. This makes it quick to\n    | specify a specific custom language line for a given attribute rule.\n    |\n    */\n\n    'custom'               => [\n        'attribute-name' => [\n            'rule-name' => 'custom-message',\n        ],\n    ],\n\n    /*\n    |--------------------------------------------------------------------------\n    | Custom Validation Attributes\n    |--------------------------------------------------------------------------\n    |\n    | The following language lines are used to swap attribute place-holders\n    | with something more reader friendly such as E-Mail Address instead\n    | of 'email'. This simply helps us make messages a little cleaner.\n    |\n    */\n\n    'attributes'           => [\n        'name'                  => '名稱',\n        'username'              => '使用者名',\n        'email'                 => '電郵',\n        'first_name'            => '名',\n        'last_name'             => '姓',\n        'password'              => '密碼',\n        'password_confirmation' => '確認密碼',\n        'city'                  => '城市',\n        'country'               => '國家',\n        'address'               => '地址',\n        'phone'                 => '電話',\n        'mobile'                => '手機',\n        'age'                   => '年齡',\n        'sex'                   => '性別',\n        'gender'                => '性別',\n        'day'                   => '天',\n        'month'                 => '月',\n        'year'                  => '年',\n        'hour'                  => '時',\n        'minute'                => '分',\n        'second'                => '秒',\n        'title'                 => '標題',\n        'content'               => '內容',\n        'description'           => '描述',\n        'excerpt'               => '摘要',\n        'date'                  => '日期',\n        'time'                  => '時間',\n        'available'             => '可用的',\n        'size'                  => '大小',\n    ],\n\n];\n"
  },
  {
    "path": "resources/views/activities/article.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"content\">\n        <div class=\"vote-user\">\n           <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui popover title\" data-content=\"{{ $v->title }}\"> {{ $v->title }}  </a>\n        </div>\n    </div>\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/followings.blade.php",
    "content": "<div class=\"ui huge horizontal divided list\">\n\n    @foreach($activities as $v)\n        <div class=\"item\">\n            <a href=\"{{ route('user_center',['user_name' =>$v->user_name ] ) }}\" class=\"ui popover\" data-title=\"{{ $v->user_name }}\" data-content=\"{{ $v->introduction }}\" >\n                <img class=\"ui avatar image\" src=\"{{ $v->avatar }}\" >\n            </a>\n        </div>\n    @endforeach\n</div>"
  },
  {
    "path": "resources/views/activities/question.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"content\">\n        <div class=\"vote-user\">\n           <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui popover title\" data-content=\"{{ $v->title }}\"> {{ $v->title }}  </a>\n        </div>\n    </div>\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/type/user-comment-article.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"label\">\n        <a href=\"{{ route('user_center',['user_name' =>$v->user->user_name ] ) }}\" class=\"ui popover\"\n           data-title=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->introduction }}\">\n            <img src=\"{{ $v->user->avatar }}\"/>\n        </a>\n    </div>\n    <div class=\"content\">\n        <div class=\"date\">\n            {{--用户 <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">--}}\n                {{--{{ $v->data['user_name'] }} &nbsp;--}}\n            {{--</a>--}}\n            评论了文章：\n        </div>\n        <div class=\"\">\n            <a href=\"{{ route('article.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"  title=\"{{ $v->data['article_title'] }}\">\n                {{ $v->data['article_title'] }}\n            </a>\n        </div>\n\n    </div>\n\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/type/user-followed-user.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"label\">\n        <a href=\"{{ route('user_center',['user_name' =>$v->user->user_name ] ) }}\" class=\"ui popover\"\n           data-title=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->introduction }}\">\n            <img src=\"{{ $v->user->avatar }}\"/>\n        </a>\n    </div>\n    <div class=\"content\">\n        <div class=\"date\">\n            关注了用户：\n        </div>\n        <div class=\"\">\n            <a href=\"{{ route('user_center', ['user_name' => $v->data['following_user_name']]) }}\" class=\"title\"  title=\"{{ $v->data['following_user_name'] }}\">\n                {{ $v->data['following_user_name'] }}\n            </a>\n        </div>\n\n    </div>\n\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/type/user-reply-question.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"label\">\n        <a href=\"{{ route('user_center',['user_name' =>$v->user->user_name ] ) }}\" class=\"ui popover\"\n           data-title=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->introduction }}\">\n            <img src=\"{{ $v->user->avatar }}\"/>\n        </a>\n    </div>\n    <div class=\"content\">\n        <div class=\"date\">\n            {{--用户 <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">--}}\n                {{--{{ $v->data['user_name'] }} &nbsp;--}}\n            {{--</a>--}}\n            回复了问题：\n        </div>\n        <div class=\"\">\n            <a href=\"{{ route('question.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"  title=\"{{ $v->data['article_title'] }}\">\n                {{ $v->data['article_title'] }}\n            </a>\n        </div>\n\n    </div>\n\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/type/user-upvote-article.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"label\">\n        <a href=\"{{ route('user_center',['user_name' =>$v->user->user_name ] ) }}\" class=\"ui popover\"\n           data-title=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->introduction }}\">\n            <img src=\"{{ $v->user->avatar }}\"/>\n        </a>\n    </div>\n    <div class=\"content\">\n        <div class=\"date\">\n            赞了文章：\n        </div>\n        <div class=\"\">\n            <a href=\"{{ route('article.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"  title=\"{{ $v->data['article_title'] }}\">\n                {{ $v->data['article_title'] }}\n            </a>\n        </div>\n\n    </div>\n\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/type/user-upvote-question.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"label\">\n        <a href=\"{{ route('user_center',['user_name' =>$v->user->user_name ] ) }}\" class=\"ui popover\"\n           data-title=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->introduction }}\">\n            <img src=\"{{ $v->user->avatar }}\"/>\n        </a>\n    </div>\n    <div class=\"content\">\n        <div class=\"date\">\n            赞了问题：\n        </div>\n        <div class=\"\">\n            <a href=\"{{ route('question.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"  title=\"{{ $v->data['article_title'] }}\">\n                {{ $v->data['article_title'] }}\n            </a>\n        </div>\n\n    </div>\n\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}</a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/activities/voted.blade.php",
    "content": "<div class=\"event\">\n    <div class=\"content\">\n        <div class=\"vote-user\">\n            @if($v->type == 'UserUpvoteArticle')\n                <i class=\"icon file text\"></i>\n                <a href=\"{{ route('article.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"\n                   title=\"{{ $v->data['article_title'] }}\">\n                    {{ $v->data['article_title'] }}\n                </a>\n            @else\n                <i class=\"icon help circle\"></i>\n                <a href=\"{{ route('question.show', ['slug' => $v->data['article_slug']]) }}\" class=\"title\"\n                   title=\"{{ $v->data['article_title'] }}\">\n                    {{ $v->data['article_title'] }}\n                </a>\n            @endif\n        </div>\n    </div>\n    <div class=\"item-meta\">\n        <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> {{ getDateWithSub($v->created_at) }}\n        </a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/articles/all-articles.blade.php",
    "content": "@extends('layouts.base')\n@section('title','资源-所有文章')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">所有资源</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"file text icon\"></i>\n                            所有文章</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n\n                        @forelse($articles as $v)\n                            <div class=\"item\">\n                                <div class=\"right floated content labels\">\n                                    @foreach($v->tags as $tag)\n                                        <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\">\n                                            <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                        </a>\n                                    @endforeach\n                                    <span class=\"labels-time\" title=\"评论数\">{{ $v->comment_count }}</span>/\n                                    <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                    <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                    <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                </div>\n                                <img class=\"ui avatar image avatar-b popover\"\n                                     onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                     alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                     src=\"{{ $v->user->avatar }}\">\n                                <div class=\"content\">\n                                    <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                                        <div class=\"ui popover\" style=\"font-weight: bold\"\n                                             data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                    </a>\n                                    {{ str_limit($v->description, 70) }}\n                                </div>\n                            </div>\n                        @empty\n                            <div class=\"ui feed no-messages\">\n                                <a class=\"text-center alert alert-info\">!\n                                    (=￣ω￣=) ··· 还没有数据噢。\n                                </a>\n                            </div>\n                        @endforelse\n                        <div class=\"panel-footer \" style=\"display: block;\">\n                            <!-- Pager -->\n                            {{ $articles->appends(request()->except('page'))->links() }}\n                        </div>\n                    </div>\n\n\n                </div>\n\n\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/articles/article-list.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $category->name }}-资源-文章分类\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('article.all') }}\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">{{ $category->name }}</div>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"ui centered grid container stackable\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui  segment\">\n                <div class=\"content extra-padding\">\n                    <div class=\"book header\">\n                        <div class=\"ui items\">\n                            <div class=\"item\">\n                                <div class=\"image\">\n                                    <img class=\"ui image image-shadow cat-article-image \"\n                                         src=\"{{ $category->image_url }}\">\n                                </div>\n                                <div class=\"content\">\n                                    <div class=\"header\" style=\"width:100%\"> {{ $category->name }}</div>\n                                    <div class=\"description\">\n                                        <p><b class=\"ui text orange\">文章数量：{{ $category->article_count }} </b></p>\n                                        {{ $category->description }}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui  attached tabular menu \">\n                        <span class=\"item active \" > <i class=\"grey content icon\"></i> 文章列表 </span>\n                    </div>\n                    <br>\n                    @include('articles.partials.article-list-form')\n                </div>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n            @include('articles.partials.right-item')\n        </div>\n\n    </div>\n\n@endsection"
  },
  {
    "path": "resources/views/articles/create.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    创作文章\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('article.all') }}\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">创作文章</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"ui warning message\">\n                    <ul class=\"list\">\n                        <li>1.请文明推文。</li>\n                    </ul>\n                </div>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" action=\"{{ route('articles.store') }}\" method=\"post\">\n                    {{ csrf_field() }}\n                    <div class=\"field\">\n                        <label>所属分类</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"category_id\" value=\"{{ old('category_id') }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">请选择分类</div>\n                            <div class=\"menu\">\n                                @foreach($catList as $v)\n                                    <div class=\"item\" data-value=\"{{ $v->id }}\">{{ $v->name }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标签</label>\n                        <div class=\"ui multiple selection dropdown\" multiple=\"2\">\n                            <!-- This will receive comma separated value like OH,TX,WY !-->\n                            <input name=\"tags\" type=\"hidden\" value=\"{{ old('tags') }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">选择标签</div>\n                            <div class=\"menu\">\n                                @foreach($tagList as  $tag)\n                                    <div class=\"item\" data-value=\"{{ $tag->id }}\">{{ $tag->tag }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标题</label>\n                        <input type=\"text\" name=\"title\" placeholder=\"标题\" value=\"{{ old('title') }}\">\n\n                        @if ($errors->has('title'))\n                            <div class=\"ui compact red message\" style=\"padding: 0px 12px 0px 0px;\">\n                                <p><i class=\"icon warning\"></i>{{ $errors->first('title') }}</p>\n                            </div>\n                        @endif\n                    </div>\n                    <div class=\"field\">\n                        <label>简单描述</label>\n                        <textarea rows=\"2\" name=\"description\">{{ old('description') }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>内容</label>\n                        <textarea id=\"topic_content\" name=\"content\"></textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>是否保存为草稿</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"is_draft\" value=\"{{ old('is_draft')?:'no' }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">是否保存为草稿</div>\n                            <div class=\"menu\">\n                                <div class=\"item\" data-value=\"no\">否</div>\n                                <div class=\"item\" data-value=\"yes\">是</div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui buttons\">\n                        <button class=\"ui orange button\" type=\"reset\">重置</button>\n                        <div class=\"or\"></div>\n                        <button class=\"ui positive button\" type=\"submit\">提交</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新文章</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentArticles as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新问答</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentQuestions as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui sticky\">\n                <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n                    <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                        <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n                    </div>\n                    <div class=\"extra\">\n                        @foreach($tags as $tag)\n                            <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                               class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                        @endforeach\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n    </div>\n@endsection\n\n@section('script')\n    {{--<script src=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.js\"></script>--}}\n    <script src= {{ mix('assets/js/editor.js') }}></script>\n    <link rel=\"stylesheet\" href=\"{{ mix('assets/css/editor.css') }}\">\n    {{--<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.css\">--}}\n    <script>\n        $(document).ready(function () {\n            /*Markdown ------------start */\n            var simplemde = new SimpleMDE({\n                spellChecker: false,\n                autosave: {\n                    enabled: true,\n                    delay: 2000,\n                    unique_id: \"topic_content{{ isset($info) ? $info->id . '_' . str_slug($info->updated_at) : '' }}\"\n                },\n                forceSync: true,\n                tabSize: 4,\n                toolbar: [\n                    \"bold\", \"italic\", \"heading\", \"|\", \"quote\", \"code\", \"table\",\n                    \"horizontal-rule\", \"unordered-list\", \"ordered-list\", \"|\",\n                    \"link\", \"image\", \"|\", \"side-by-side\", 'fullscreen', \"|\",\n                    {\n                        name: \"guide\",\n                        action: function customFunction(editor) {\n                            var win = window.open('https://github.com/riku/Markdown-Syntax-CN/blob/master/syntax.md', '_blank');\n                            if (win) {\n                                //Browser has allowed it to be opened\n                                win.focus();\n                            } else {\n                                //Browser has blocked it\n                                alert('Please allow popups for this website');\n                            }\n                        },\n                        className: \"fa fa-info-circle\",\n                        title: \"Markdown 语法！\",\n                    },\n                ],\n                element: document.getElementById(\"topic_content\"),\n            });\n\n            inlineAttachment.editors.codemirror4.attach(simplemde.codemirror, {\n                uploadUrl: Laravel.uploadImage,\n                extraParams: {\n                    '_token': Laravel.csrfToken,\n                },\n                onFileUploadResponse: function (xhr) {\n                    var result = JSON.parse(xhr.responseText),\n                        filename = result[this.settings.jsonFieldName];\n\n                    if (result && filename) {\n                        var newValue;\n                        if (typeof this.settings.urlText === 'function') {\n                            newValue = this.settings.urlText.call(this, filename, result);\n                        } else {\n                            newValue = this.settings.urlText.replace(this.filenameTag, filename);\n                        }\n                        var text = this.editor.getValue().replace(this.lastValue, newValue);\n                        this.editor.setValue(text);\n                        this.settings.onFileUploaded.call(this, filename);\n                    }\n                    return false;\n                }\n            });\n        });\n    </script>\n    @include('form-validate.auth.v-topic')\n@endsection"
  },
  {
    "path": "resources/views/articles/edit.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    更新文章\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('article.all') }}\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">更新文章</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"ui warning message\">\n                    <ul class=\"list\">\n                        <li>1.请文明提问。</li>\n                        <li>2.提交问题前，请先搜索，如重复问题将删除。</li>\n                    </ul>\n                </div>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" action=\"{{ route('articles.update' ,['id' => $info->id]) }}\" method=\"post\">\n                    {{ csrf_field() }}\n                    <div class=\"field\">\n                        <label>所属分类</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"category_id\" value=\"{{ $info->category_id }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">{{ $info->category_id }}</div>\n                            <div class=\"menu\">\n                                @foreach($catList as $v)\n                                    <div class=\"item\" data-value=\"{{ $v->id }}\">{{ $v->name }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标签</label>\n                        <div class=\"ui multiple selection dropdown\" multiple=\"2\">\n                            <!-- This will receive comma separated value like OH,TX,WY !-->\n                            <input name=\"tags\" type=\"hidden\" value=\"{{ $infoTag }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">选择标签</div>\n                            <div class=\"menu\">\n                                @foreach($tagList as  $tag)\n                                    <div class=\"item\" data-value=\"{{ $tag->id }}\">{{ $tag->tag }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标题</label>\n                        <input type=\"text\" name=\"title\" placeholder=\"标题\" value=\"{{ $info->title }}\">\n\n                        @if ($errors->has('title'))\n                            <div class=\"ui compact red message\" style=\"padding: 0px 12px 0px 0px;\">\n                                <p><i class=\"icon warning\"></i>{{ $errors->first('title') }}</p>\n                            </div>\n                        @endif\n                    </div>\n                    <div class=\"field\">\n                        <label>简单描述</label>\n                        <textarea rows=\"2\" name=\"description\">{{ $info->description }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>内容</label>\n                        <textarea id=\"topic_content\" name=\"content\">{{ json_decode($info->content)->raw }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>是否保存为草稿</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"is_draft\" value=\"{{ $info->is_draft }}\">\n                            <input type=\"hidden\" name=\"slug\" value=\"{{ $info->slug }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">是否保存为草稿</div>\n                            <div class=\"menu\">\n                                <div class=\"item\" data-value=\"no\">否</div>\n                                <div class=\"item\" data-value=\"yes\">是</div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"ui buttons\">\n                        <button class=\"ui orange button\" type=\"reset\">重置</button>\n                        <div class=\"or\"></div>\n                        <button class=\"ui positive button\" type=\"submit\">提交</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新文章</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentArticles as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新问答</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentQuestions as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui sticky\">\n                <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n                    <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                        <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n                    </div>\n                    <div class=\"extra\">\n                        @foreach($tags as $tag)\n                            <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                               class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                        @endforeach\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n    </div>\n@endsection\n\n@section('script')\n    {{--<script src=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.js\"></script>--}}\n    <script src = {{ mix('assets/js/editor.js') }}></script>\n    <link rel=\"stylesheet\" href=\"{{ mix('assets/css/editor.css') }}\">\n    {{--<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.css\">--}}\n    <script>\n        $(document).ready(function () {\n            /*Markdown ------------start */\n            var simplemde = new SimpleMDE({\n                spellChecker: false,\n                autosave: {\n                    enabled: true,\n                    delay: 2000,\n                    unique_id: \"topic_content{{ isset($info) ? $info->id . '_' . str_slug($info->updated_at) : '' }}\"\n                },\n                forceSync: true,\n                tabSize: 4,\n                toolbar: [\n                    \"bold\", \"italic\", \"heading\", \"|\", \"quote\", \"code\", \"table\",\n                    \"horizontal-rule\", \"unordered-list\", \"ordered-list\", \"|\",\n                    \"link\", \"image\", \"|\", \"side-by-side\", 'fullscreen', \"|\",\n                    {\n                        name: \"guide\",\n                        action: function customFunction(editor) {\n                            var win = window.open('https://github.com/riku/Markdown-Syntax-CN/blob/master/syntax.md', '_blank');\n                            if (win) {\n                                //Browser has allowed it to be opened\n                                win.focus();\n                            } else {\n                                //Browser has blocked it\n                                alert('Please allow popups for this website');\n                            }\n                        },\n                        className: \"fa fa-info-circle\",\n                        title: \"Markdown 语法！\",\n                    },\n                ],\n                element: document.getElementById(\"topic_content\"),\n            });\n\n        inlineAttachment.editors.codemirror4.attach(simplemde.codemirror, {\n            uploadUrl: Laravel.uploadImage,\n            extraParams: {\n                '_token': Laravel.csrfToken,\n            },\n            onFileUploadResponse: function(xhr) {\n                var result = JSON.parse(xhr.responseText),\n                    filename = result[this.settings.jsonFieldName];\n\n                if (result && filename) {\n                    var newValue;\n                    if (typeof this.settings.urlText === 'function') {\n                        newValue = this.settings.urlText.call(this, filename, result);\n                    } else {\n                        newValue = this.settings.urlText.replace(this.filenameTag, filename);\n                    }\n                    var text = this.editor.getValue().replace(this.lastValue, newValue);\n                    this.editor.setValue(text);\n                    this.settings.onFileUploaded.call(this, filename);\n                }\n                return false;\n            }\n        });\n        });\n    </script>\n    @include('form-validate.auth.v-topic')\n@endsection"
  },
  {
    "path": "resources/views/articles/partials/article-info-form.blade.php",
    "content": "<div class=\"ui readme markdown-body content-body\">\n    {!! $info->content['html'] !!}\n</div>"
  },
  {
    "path": "resources/views/articles/partials/article-list-form.blade.php",
    "content": "<ul class=\"sorted_table tree \">\n    <div class=\"jscroll\">\n        <div class=\"ui celled list\">\n            @forelse($articles as $v)\n                <div class=\"item\">\n                    <div class=\"right floated content labels\">\n                        @foreach($v->tags as $tag)\n                            @break($loop->index >0)\n                            <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\">\n                                <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                            </a>\n                        @endforeach\n                        <span class=\"labels-time\" title=\"评论数\">{{ $v->comment_count }}</span>/\n                        <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                        <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                        <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                    </div>\n                    <img class=\"ui avatar image avatar-b popover\"\n                         onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                         alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                         src=\"{{ $v->user->avatar }}\">\n                    <div class=\"content\">\n                        <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                            <div class=\"ui popover\" style=\"font-weight: bold\"\n                                 data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 60) }}</div>\n                        </a>\n                        {{ str_limit($v->description, 60) }}\n                    </div>\n                </div>\n            @empty\n                <div class=\"ui feed no-messages\">\n                    <p class=\"text-center alert alert-info\">!\n                        (=￣ω￣=) ··· 还没有数据噢。\n                    </p>\n                </div>\n            @endforelse\n            <div class=\"panel-footer \" style=\"display: block;\">\n                <!-- Pager -->\n                {{ $articles->appends(request()->except('page'))->links() }}\n            </div>\n        </div>\n    </div>\n</ul>\n"
  },
  {
    "path": "resources/views/articles/partials/info-right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\"> {{ config('codehaoshi.notice.info_page_article') }}</span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui segment\">\n        <div class=\"ui three statistics\">\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->vote_count }}</div>\n                <div class=\"label\">点赞</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->view_count }}</div>\n                <div class=\"label\">浏览</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->comment_count }}</div>\n                <div class=\"label\">评论</div>\n            </div>\n        </div>\n\n        <br>\n    </div>\n</div>\n<div class=\"ui stackable cards\">\n    <div class=\"ui  card column author-box grid\" style=\"margin-top: 20px;\">\n\n        <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n            <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 文章作者</div>\n        </div>\n\n        <a href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\" class=\"avatar-link \">\n            <img class=\"ui centered circular tiny image popover\" data-content=\"{{ $info->user->user_name }}\"\n                 src=\"{{ $info->user->avatar }}\"/>\n        </a>\n\n        <div class=\"extra content ui center aligned container\">\n            <a class=\"header\"\n               href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\">{{ $info->user->user_name }}</a>\n            <div class=\"description\">{{ $info->user->introduction }}</div>\n        </div>\n        @if(!Auth::check())\n            <vote-button is-checked=\"false\" user=\"{{ $info->user_id }}\"></vote-button>\n        @else\n            <vote-button is-checked=\"true\" user=\"{{ $info->user_id }}\"></vote-button>\n        @endif\n\n    </div>\n</div>\n<div class=\"ui segments\">\n    <div class=\"ui segment\">\n        <p><i class=\"wait icon\"></i>最新文章</p>\n    </div>\n    <div class=\"ui secondary violet segment\">\n        <div class=\"ui list\">\n            @foreach( $recentArticles as $k=>$v)\n                <div class=\" black-font\">\n                    <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                       data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                </div>\n            @endforeach\n\n        </div>\n    </div>\n</div>\n\n<div class=\"ui sticky\" style=\"padding-top:20px;\">\n    <div class=\"ui  card column author-box grid \" id=\"toc\"></div>\n</div>\n\n"
  },
  {
    "path": "resources/views/articles/partials/right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"fire icon\"></i>热门文章</p>\n        </div>\n        <div class=\"ui secondary violet segment\">\n            <div class=\"ui list\">\n                @foreach( $hotArticles as $k=>$v)\n                    <div class=\" black-font\">\n                        <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                           data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                    </div>\n                @endforeach\n            </div>\n        </div>\n    </div>\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"wait icon\"></i>最新文章</p>\n        </div>\n        <div class=\"ui secondary violet segment sticky\">\n            <div class=\"ui list\">\n                @foreach( $recentArticles as $k=>$v)\n                    <div class=\" black-font\">\n                        <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                           data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                    </div>\n                @endforeach\n\n            </div>\n        </div>\n    </div>\n    <div class=\"ui sticky\">\n        <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n            <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n            </div>\n            <div class=\"extra\">\n                @foreach($tags as $tag)\n                    <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                       class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                @endforeach\n            </div>\n\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/articles/partials/show.blade.php.old",
    "content": "@extends('layouts.base')\n@section('title','文章详情')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/all_articles\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <a href=\"articles\" class=\"section\">{{ $info->category->name }}</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">{{ $info->title }}</div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <h1>\n                        <span style=\"line-height: 34px;\">{{ $info->title }}</span>\n                    </h1>\n                    <p class=\"book-article-meta ui description\">\n                        <i class=\"attach icon\"></i>\n                        {{ $info->description }}\n                    </p>\n                    <p class=\"book-article-meta description\">\n                        <i class=\"wait icon\"></i> <span class=\"header\">Post on </span> <span\n                                class=\"default-color-a\">{{ substr($info->created_at, 0, -8) }}</span>\n                        <span class=\"header\">by</span>\n                        <a href=\"\"><i class=\"icon user\"></i> <span class=\"ui popover default-color-a\" data-title=\"ucer\"\n                                                                   data-content=\"好好学习，天天向上\">{{ $info->user->user_name }}</span></a>\n                    </p>\n                </div>\n                <div class=\"ui divider\"></div>\n                <div class=\"ui readme markdown-body content-body\" >\n                    <parse content=\"{{ $info->content['raw']  }}\"></parse>\n\n                </div>\n            </div>\n            <div>\n                <a class=\"ui basic button small  popover\" data-content=\"1.4. 如何正确阅读本书？\" href=\"\"><i\n                            class=\"icon arrow left\"></i> 上一篇</a>\n                <a class=\"ui basic button small popover right floated\" data-content=\"1.6. 发行说明\" href=\"\">下一篇 <i\n                            class=\"icon arrow right\"></i></a>\n            </div>\n            <div class=\"ui message basic\">\n                <div class=\"social-share share-component\">\n                    分享\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n\n            @if(!Auth::check())\n                <comment  article-id=\"{{ $info->id }}\" is-checked=\"false\"  comment_count=\"{{ $info->comment_count }}\"></comment>\n            @else\n                <comment user-avatar=\"{{ $authUser->avatar }}\"  userid=\"{{ $authUser->id }}\" article-id=\"{{ $info->id }}\" is-checked=\"true\" :comment_count=\"{{ $info->comment_count }}\"></comment>\n            @endif\n        </div>\n        <div class=\"four wide column\">\n            @include('articles.partials.info-right-item')\n        </div>\n    </div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/articles/show.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $info->title }}-资源-{{ $info->category->name }}-文章详情\n@endsection\n@section('meta')\n    <meta name=\"keywords\" content=\"{{ $info->title }}\"/>\n    <meta name=\"description\" content=\"{{ $info->description }}\"/>\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('article.all') }}\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ url('/a/'.$info->category->slug) }}\" class=\"section\">{{ $info->category->name }}</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">{{ $info->title }}</div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <h1>\n                        <span style=\"line-height: 34px;\">{{ $info->title }}</span>\n                    </h1>\n                    <p class=\"book-article-meta ui description\">\n                        <i class=\"attach icon\"></i>\n                        {{ $info->description }}\n                    </p>\n                    <p class=\"book-article-meta description\">\n                        <i class=\"wait icon\"></i> <span class=\"header\">Post on </span> <span\n                                class=\"default-color-a\">{{ substr($info->created_at, 0, -8) }}</span>\n                        <span class=\"header\">by</span>\n                        <a href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\"><i\n                                    class=\"icon user\"></i> <span class=\"ui popover default-color-a\"\n                                                                 data-title=\"{{ $info->user->user_name }}\"\n                                                                 data-content=\"{{ $info->user->introduction }}\">{{ $info->user->user_name }}</span></a>\n                    </p>\n                </div>\n                <div class=\"ui divider\"></div>\n                <div class=\"ui readme markdown-body content-body\">\n                    <parse content=\"{{ json_decode($info->content)->raw  }}\"></parse>\n                    <div class=\"ui info message\">\n                        <div class=\"ui list\">\n                            <div class=\"item\">\n                                <i class=\"folder open grey icon\"></i>\n                                <div class=\"content\">\n                                    <span class=\"black-font\">分类:</span>\n                                    <a href=\"{{ url('/a/'.$info->category->slug) }}\" class=\"ui popover\"\n                                       style=\"color: #2C662D\"\n                                       data-content=\"{{ $info->category->name }}\">{{ $info->category->name }}</a>\n                                </div>\n                            </div>\n                            <div class=\"item\">\n                                <i class=\" tags grey icon\"></i>\n                                <div class=\"content\"><span class=\"black-font\">标签:</span>\n                                    <span class=\"info-labels\">\n                                        @foreach($info->tags as $tag)\n                                            <a class=\"item ui popover\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                                               data-content=\"{{ $tag->tag }}\">{{ $tag->tag }}</a>\n                                        @endforeach\n                                    </span>\n                                </div>\n                            </div>\n                            <div class=\"item\">\n                                <i class=\"warning sign orange icon\"></i>\n                                <div class=\"content\"><span class=\"black-font\">原创声明:</span> <span>如无特别说明，均为作者原创文章。未经允许，不得转载!</span>\n                                </div>\n                            </div>\n                        </div>\n                        @if( Auth::check() && $authUser->is_admin == 'yes' && $authUser->hasRole('supper_admin'))\n                            <a href=\"{{ route('articles.edit', ['slug' => $info->id] ) }}\" class=\"ui teal button\"> <i class=\"edit icon\"></i> 修改 </a>\n                        @endif\n                    </div>\n                </div>\n            </div>\n            <div style=\"min-height: 30px\">\n                @unless(!$prev)\n                    <a class=\"ui basic button small  popover\" data-content=\"{{ $prev['title'] }}\"\n                       href=\"{{ route('article.show', ['slug' => $prev['slug']]) }}\"><i class=\"icon arrow left\"></i> 上一篇</a>\n                @endunless\n\n                @unless(!$next)\n                    <a class=\"ui basic button small  popover right floated\" data-content=\"{{ $next['title'] }}\"\n                       href=\"{{ route('article.show', ['slug' => $next['slug']]) }}\"><i class=\"icon arrow right\"></i>\n                        下一篇</a>\n                @endunless\n            </div>\n            <div class=\"ui message basic\">\n                @if(config('codehaoshi.social_share.article_share'))\n                    <div class=\"social-share share-component\"\n                         data-title=\"{{ $info->title }}\"\n                         data-description=\"{{ $info->title }}\"\n                         {{ config('codehaoshi.social_share.sites') ? \"data-sites=\" . config('codehaoshi.social_share.sites') : '' }}\n                         {{ config('codehaoshi.social_share.mobile_sites') ? \"data-mobile-sites=\" . config('codehaoshi.social_share.mobile_sites') : '' }}\n                         initialized>\n                    </div>\n                @endif\n                <div class=\"clearfix\"></div>\n            </div>\n\n            @if(!Auth::check())\n                <comment article-id=\"{{ $info->id }}\" is-checked=\"false\"></comment>\n            @else\n                <comment user-avatar=\"{{ $authUser->avatar }}\" userid=\"{{ $authUser->id }}\" article-id=\"{{ $info->id }}\"\n                         isadmin=\"{{ $authUser->hasRole('supper_admin') }}\"\n                         is-checked=\"true\"></comment>\n            @endif\n        </div>\n        <div class=\"four wide column\">\n            @include('articles.partials.info-right-item')\n        </div>\n    </div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/auth/passwords/email.blade.php",
    "content": "@extends('layouts.base')\n@section('title','找回密码')\n\n@section('content')\n    <div class=\"ui  aligned center aligned grid register container\">\n        <div class=\"six wide column \">\n            <h2>密码找回</h2>\n            <div class=\"ui divider\"></div>\n            <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"{{ route('password.email') }}\" required=\"\"\n                  accept-charset=\"UTF-8\" enctype=\"multipart/form-data\">\n                {{ csrf_field() }}\n                <div class=\"ui action input\">\n                    <input type=\"text\" value=\"@if(session('old-email') && session('status')){{ trim(session('old-email')) }}@else{{ trim(old('email')) }}@endif\" name=\"email\">\n                    {{--<input type=\"text\" value=\"18313852226@sina.cn\" name=\"email\">--}}\n                    <button class=\"ui teal right  icon button\">\n                        <i class=\"send icon\"></i>\n                        发送验证码\n                    </button>\n                </div>\n                @if ($errors->has('email'))\n                <div class=\"ui compact red message\" style=\"padding: 5px 0px;\">\n                        <p> <i class=\"icon warning\"></i>{{ $errors->first('email') }}</p>\n                </div>\n                @endif\n                @if (session('status'))\n                <div class=\"ui compact info message\" style=\"padding: 5px 3px;\">\n                    <p> <i class=\"check icon\"></i>邮件发送成功，<a href=\"#\" target=\"_blank\" id=\"goEmail\" style=\"color: #2bd6bb\"> 登录邮箱查收?</a></p>\n                </div>\n                    @endif\n            </form>\n\n        </div>\n    </div>\n@endsection\n\n@section('script')\n    <script>\n        var hash={ 'qq.com': 'http://mail.qq.com', 'gmail.com': 'http://mail.google.com', 'sina.com': 'http://mail.sina.com.cn', 'sina.cn': 'http://mail.sina.com.cn', '163.com': 'http://mail.163.com', '126.com': 'http://mail.126.com', 'yeah.net': 'http://www.yeah.net/', 'sohu.com': 'http://mail.sohu.com/', 'tom.com': 'http://mail.tom.com/', 'sogou.com': 'http://mail.sogou.com/', '139.com': 'http://mail.10086.cn/', 'hotmail.com': 'http://www.hotmail.com', 'live.com': 'http://login.live.com/', 'live.cn': 'http://login.live.cn/', 'live.com.cn': 'http://login.live.com.cn', '189.com': 'http://webmail16.189.cn/webmail/', 'yahoo.com.cn': 'http://mail.cn.yahoo.com/', 'yahoo.cn': 'http://mail.cn.yahoo.com/', 'eyou.com': 'http://www.eyou.com/', '21cn.com': 'http://mail.21cn.com/', '188.com': 'http://www.188.com/', 'foxmail.coom': 'http://www.foxmail.com' };\n        $(function(){\n            var mail = \"{{ session('old-email') }}\";\n                var url = mail.split('@')[1];\n                for (var j in hash){\n                    $(\"#goEmail\").attr(\"href\", hash[url]);\n                }\n        })\n    </script>\n@endsection\n\n"
  },
  {
    "path": "resources/views/auth/passwords/reset.blade.php",
    "content": "@extends('layouts.app')\n\n@section('content')\n<div class=\"container\">\n    <div class=\"row\">\n        <div class=\"col-md-8 col-md-offset-2\">\n            <div class=\"panel panel-default\">\n                <div class=\"panel-heading\">密码重置</div>\n\n                <div class=\"panel-body\">\n                    @if (session('status'))\n                        <div class=\"alert alert-success\">\n                            {{ session('status') }}\n                        </div>\n                    @endif\n\n                    <form class=\"form-horizontal\" method=\"POST\" action=\"{{ route('password.request') }}\">\n                        {{ csrf_field() }}\n\n                        <input type=\"hidden\" name=\"token\" value=\"{{ $token }}\">\n\n                        <div class=\"form-group{{ $errors->has('email') ? ' has-error' : '' }}\">\n                            <label for=\"email\" class=\"col-md-4 control-label\">邮箱</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"email\" type=\"email\" class=\"form-control\" name=\"email\" value=\"{{ $email or old('email') }}\" required autofocus>\n\n                                @if ($errors->has('email'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('email') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password') ? ' has-error' : '' }}\">\n                            <label for=\"password\" class=\"col-md-4 control-label\">密码</label>\n\n                            <div class=\"col-md-6\">\n                                <input id=\"password\" type=\"password\" class=\"form-control\" name=\"password\" required>\n\n                                @if ($errors->has('password'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group{{ $errors->has('password_confirmation') ? ' has-error' : '' }}\">\n                            <label for=\"password-confirm\" class=\"col-md-4 control-label\">确认密码</label>\n                            <div class=\"col-md-6\">\n                                <input id=\"password-confirm\" type=\"password\" class=\"form-control\" name=\"password_confirmation\" required>\n\n                                @if ($errors->has('password_confirmation'))\n                                    <span class=\"help-block\">\n                                        <strong>{{ $errors->first('password_confirmation') }}</strong>\n                                    </span>\n                                @endif\n                            </div>\n                        </div>\n\n                        <div class=\"form-group\">\n                            <div class=\"col-md-6 col-md-offset-4\">\n                                <button type=\"submit\" class=\"btn btn-primary\">\n                                   提交\n                                </button>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@endsection\n"
  },
  {
    "path": "resources/views/auth/signin.blade.php",
    "content": "@extends('layouts.base')\n@section('title','用户登录')\n@section('style')\n@endsection\n\n\n@section('content')\n    <div class=\"ui  aligned center aligned grid register\">\n        <div class=\"column reg\">\n            <form class=\"ui large form\" id=\"enterKeyBtn\" action=\"{{ url('login') }}\" method=\"post\">\n                {{ csrf_field() }}\n                <div class=\"ui stacked segment\">\n                    <div class=\"field {{ $errors->has('email') ? 'error' : '' }}\">\n                        <label class=\"auth-label\">账号:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"user icon\"></i>\n                            <input type=\"text\" name=\"email\" placeholder=\"邮箱登录\" value=\"{{ old('email') }}\">\n                        </div>\n                        @if ($errors->has('email'))\n                            <div class=\"ui basic red pointing prompt label transition visible\">{{ $errors->first('email') }}</div>\n                        @endif\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">密码：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password\" placeholder=\"\">\n                        </div>\n                    </div>\n                    @if ($errors->has('password'))\n                        <div class=\"ui basic red pointing prompt label transition visible\">{{ $errors->first('password') }}</div>\n                    @endif\n                    <div class=\"ui fluid   ginfo submit button\">登录</div>\n                    <div class=\"row thirdlogin\">\n                        <a class=\"info-color-a left\" href=\" {{ route('thirdlogin') }}\"><i class=\"github icon\"></i> <span\n                                    class=\"icon-no\">使用github登录</span></a>\n                        <a class=\"info-color-a right\" href=\"\"><i class=\"qq icon\"></i> <span\n                                    class=\"icon-no\">使用QQ登录</span></a>\n                    </div>\n                </div>\n\n                <div class=\"ui error message\"></div>\n\n            </form>\n\n            <div class=\"ui message\">\n                忘记密码?<a href=\"{{ route('password.request') }}\">找回密码</a>\n            </div>\n        </div>\n    </div>\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n@endsection\n\n"
  },
  {
    "path": "resources/views/auth/signup.blade.php",
    "content": "@extends('layouts.base')\n@section('title','用户注册')\n@section('style')\n@endsection\n\n\n@section('content')\n    <div class=\"ui  aligned center aligned grid register\">\n        <div class=\"column reg\">\n            <form class=\"ui large form\" method=\"post\" action=\"{{ url('register') }}\">\n                {{ csrf_field() }}\n                <div class=\"ui stacked segment\">\n                    <div class=\"field\">\n                        <label class=\"auth-label\">用户名:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"user icon\"></i>\n                            <input type=\"text\" name=\"user_name\" placeholder=\"用户名英文或数字组成\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">邮箱：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"mail icon\"></i>\n                            <input type=\"text\" name=\"email\" placeholder=\"将作为登录账号\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">密码：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password\" placeholder=\"至少6位\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">确认密码:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password_confirmation\" placeholder=\"\">\n                        </div>\n                    </div>\n                    <div class=\"ui fluid   ginfo submit button\">立即注册</div>\n                    <div class=\"row thirdlogin\">\n                        <a class=\"info-color-a left\" href=\" {{ route('thirdlogin') }}\"><i class=\"github icon\"></i> <span class=\"icon-no\">使用github登录</span></a>\n                        <a class=\"info-color-a right\" href=\"\"><i class=\"qq icon\"></i> <span class=\"icon-no\">使用QQ登录</span></a>\n                    </div>\n                </div>\n\n                <div class=\"ui error message\"></div>\n\n            </form>\n\n            <div class=\"ui message\">\n                已经拥有账号?<a href=\"login\">登录</a>\n            </div>\n        </div>\n    </div>\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n@endsection\n\n"
  },
  {
    "path": "resources/views/dashboard/abouts/about-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>关于我们列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                        <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                            <div style=\"text-align:right\">\n\n                                <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/abouts/create') }}\">添加</a>\n                            </div>\n                            <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                                所有关于我们\n                            </div>\n                            <button onclick=\"window.history.go(-1);\" class=\"roll-nav roll-left J_tabLeft\"><i\n                                        class=\"fa fa-backward\"></i></button>\n                        </div>\n                    <div class=\"ibox-content\">\n                        <div class=\"table-responsive \">\n                            <table class=\"table table-hover\">\n                                <thead>\n                                <tr class=\"long-tr\">\n                                    {{--<th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>--}}\n                                    <th>ID</th>\n                                    <th>标题</th>\n                                    <th>是否启用</th>\n                                    <th>添加时间</th>\n                                    <th>操作 - <span>数据量：</span>【 {{ count($lists) }} 】</th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                @forelse( $lists as $v )\n                                    <tr class=\"long-td\">\n                                        {{--<td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>--}}\n                                        <td>{{ $v->id }}</td>\n                                        <td>{{ $v->title }}</td>\n                                        <td>\n                                            @if( $v->is_enabled == 'no')\n                                                <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                                                   data-id=\"{{ $v->id }}\" data-column=\"is_enabled\" data-table=\"abouts\" data-msg=\"启用\" data-todo=\"1\"\n                                                   data-cur=\"非启用\" onclick=\"changeStatus(this)\"> 非启用</i>\n                                            @else\n                                                <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                                                   data-id=\"{{ $v->id }}\" data-column=\"is_enabled\" data-table=\"abouts\" data-msg=\"非启用\"\n                                                   data-todo=\"0\" data-cur=\"启用\" onclick=\"changeStatus(this)\">启用</i>\n                                            @endif\n                                        </td>\n                                        <td>{{ $v->created_at }}</td>\n                                        <td>\n                                            <a target=\"_self\" title=\"编辑\"\n                                               href=\"{{ dashboardUrl('/abouts/'.$v->id.'/edit') }}\">\n                                                <span class=\"fa fa-pencil-square-o\"> </span>&nbsp;编辑\n                                            </a>&nbsp;&nbsp;\n                                            <a href=\"{{ route('about') }}\" target=\"_blank\" title=\"预览\"><span\n                                                        class=\"fa fa-eye\"></span>&nbsp;预览</a>&nbsp;&nbsp;\n                                            <a href=\"javascript:;\" class=\"btn-warning btn-xs\" onclick=\"delBtn(this)\"\n                                               data-id=\"0\"\n                                               data-name=\"{{ $v->name }}\"\n                                               data-url=\"{{ dashboardUrl('/abouts/'.$v->id.'/delete') }}\">\n                                                <i class=\"fa fa-trash-o\"></i> 删除\n                                            </a>\n                                        </td>\n                                    </tr>\n                                @empty\n                                    <tr>\n                                        <td colspan=\"20\"\n                                            style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">\n                                            暂无数据\n                                        </td>\n                                    </tr>\n                                @endforelse\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/abouts/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>关于我们添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 关于我们添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\"\n                                       placeholder=\"标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\"></textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">状态：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"is_enabled\">\n                                        <option value=\"yes\">启用</option>\n                                        <option value=\"no\">非启用</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        element: document.getElementById(\"editor\"),\n        placeholder: 'Please input the article content.',\n        autoDownloadFontAwesome: true,\n        forceSync: false,\n        tabSize: 8,\n        lineWrapping: false\n    });\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        $(\"textarea[name=content]\").val(simplemde.value());\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入关于我们标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=content]\").val(), '请输入 content') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/abouts/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/abouts/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>关于我们添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 关于我们添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\" value=\"{{ $info->title }}\"\n                                       placeholder=\"标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\">{{ json_decode($info->content)->raw }}</textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">状态：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"is_enabled\">\n                                        <option value=\"yes\" @if($info->is_enabled == 'yes') selected @endif>启用</option>\n                                        <option value=\"no\" @if($info->is_enabled == 'no') selected @endif>非启用</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        element: document.getElementById(\"editor\"),\n        placeholder: 'Please input the article content.',\n        autoDownloadFontAwesome: true,\n        forceSync: false,\n        tabSize: 8,\n        lineWrapping: false\n    });\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        $(\"textarea[name=content]\").val(simplemde.value());\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入关于我们标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=content]\").val(), '请输入 content') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/abouts/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/article-categories/category-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章分类列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                        <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                            <div style=\"text-align:right\">\n\n                                <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/articleCategory/create') }}\">添加分类</a>\n                            </div>\n                            <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                                所有文章分类\n                            </div>\n                            <button onclick=\"window.history.go(-1);\" class=\"roll-nav roll-left J_tabLeft\"><i\n                                        class=\"fa fa-backward\"></i></button>\n                        </div>\n                    <div class=\"ibox-content\">\n                        <div class=\"table-responsive \">\n                            <table class=\"table table-hover\">\n                                <thead>\n                                <tr class=\"long-tr\">\n                                    {{--<th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>--}}\n                                    <th>ID</th>\n                                    <th>名称</th>\n                                    <th>图片</th>\n                                    <th>别名</th>\n                                    <th width=\"5%\">权重</th>\n                                    <th>文章数量</th>\n                                    <th>描述</th>\n                                    <th>添加时间</th>\n                                    <th>操作 - <span>数据量：</span>【 {{ count($lists) }} 】</th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                @forelse( $lists as $v )\n                                    <tr class=\"long-td\">\n                                        {{--<td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>--}}\n                                        <td>{{ $v->id }}</td>\n                                        <td>{{ $v->name }}</td>\n                                        <td>\n                                            <a>\n                                                <img src=\"{{ $v->image_url }}\" class=\"fancybox\" width=\"40\" height=\"30\"\n                                                     href=\"{{ $v->image_url }}\" title=\"{{ $v->name }}\"\n                                                     alt=\" {{ $v->name }}\">\n                                            </a>\n                                        </td>\n                                        <td>{{ $v->slug }}</td>\n                                        <td>\n                                            <input type=\"number\" value=\"{{ $v->weight }}\" data-id=\"{{ $v->id }}\" data-column=\"weight\" data-table=\"article_categories\" data-msg=\"排序修改成功\" onchange=\"updateSort(this)\"  style=\"text-align:center;\" onkeyup=\"this.value=this.value.replace(/[^\\d]/g,'')\" class=\"form-control\">\n                                        </td>\n                                        <td>{{ $v->article_count }}</td>\n                                        <td>{{ $v->description }}</td>\n                                        <td>{{ $v->created_at }}</td>\n                                        <td>\n                                            <a target=\"_self\" title=\"编辑\"\n                                               href=\"{{ dashboardUrl('/articleCategory/'.$v->id.'/edit') }}\">\n                                                <span class=\"fa fa-pencil-square-o\"> </span>&nbsp;编辑\n                                            </a>&nbsp;&nbsp;\n                                            <a href=\"javascript:;\" class=\"btn-warning btn-xs\" onclick=\"delBtn(this)\"\n                                               data-id=\"0\"\n                                               data-name=\"{{ $v->name }}\"\n                                               data-url=\"{{ dashboardUrl('/articleCategory/'.$v->id.'/delete') }}\">\n                                                <i class=\"fa fa-trash-o\"></i> 删除\n                                            </a>\n                                        </td>\n                                    </tr>\n                                @empty\n                                    <tr>\n                                        <td colspan=\"20\"\n                                            style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">\n                                            暂无数据\n                                        </td>\n                                    </tr>\n                                @endforelse\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/article-categories/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章分类添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 分类添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\"\n                                       placeholder=\"分类名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\"\n                                       placeholder=\"分类别名\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类别名，只能由 3-40 位数字英文字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">封面图片：</label>\n                            <div class=\"input-group col-sm-1\">\n                                <a class=\"btn btn-info\" href=\"javascript:void(0);\" style=\"float: left\"\n                                   uploader=\"image_url\"\n                                   data-url=\"{{ url('file/upload') }}\" data-path=\"temp\">+ 浏览文件\n                                    <input type=\"hidden\" name=\"image_url\" id=\"image_url\">\n                                </a>\n                                <img height=\"100px\" id=\"image_url_img\"\n                                     style=\"float:left;margin-left: 120px;margin-top: -50px;\"\n                                     onerror=\"this.src='/assets/dashboard/images/no_img.jpg'\" src=\"\"/>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">样式：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"style\"\n                                       placeholder=\"violet\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入分类名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=image_url]\").val(), '请上传分类图片') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入分类描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/articleCategory/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/article-categories/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章分类修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 分类修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\" value=\"{{ $info->name }}\"\n                                       placeholder=\"分类名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\" value=\"{{ $info->slug }}\"\n                                       placeholder=\"分类别名\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类别名，只能由 3-40 位数字英文字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">封面图片：</label>\n                            <div class=\"input-group col-sm-1\">\n                                <a class=\"btn btn-info\" href=\"javascript:void(0);\" style=\"float: left\"\n                                   uploader=\"image_url\"\n                                   data-url=\"{{ url('file/upload') }}\" data-path=\"temp\">+ 浏览文件\n                                    <input type=\"hidden\" name=\"image_url\" id=\"image_url\" value=\"{{ $info->image_url }}\">\n                                </a>\n                                <img height=\"100px\" id=\"image_url_img\"\n                                     style=\"float:left;margin-left: 120px;margin-top: -50px;\"\n                                     onerror=\"this.src='/assets/dashboard/images/no_img.jpg'\"\n                                     src=\"{{ $info->image_url }}\"/>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">样式：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"style\" value=\"{{ $info->style }}\"\n                                       placeholder=\"violet\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\" value=\"{{ $info->weight }}\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入分类名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=image_url]\").val(), '请上传分类图片') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入分类描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/articleCategory/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/articles/ajax-article-list.blade.php",
    "content": "<div class=\"table-responsive \">\n    <table class=\"table table-hover\">\n        <thead>\n        <tr class=\"long-tr\">\n            <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID </th>\n            <th><i class=\"fa fa-file-text\" style=\"margin-right: 3px\"></i>文章标题</th>\n            <th>别名</th>\n            <th>描述</th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('vote_count');\">点赞数\n                    @if( $order == 'vote_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('view_count');\">查看數\n                    @if( $order == 'view_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('comment_count');\">评论数\n                    @if( $order == 'comment_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('weight');\">权重\n                    @if( $order == 'weight')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th>优秀</th>\n            <th>热门</th>\n            <th>私人</th>\n            <th>草稿</th>\n            <th>发布时间</th>\n            <th>操作 - <span>数据量：</span>【 {{ $lists->total() }} 】</th>\n        </tr>\n        </thead>\n        <tbody>\n        @forelse( $lists as $v )\n            <tr class=\"long-td\">\n                <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                <td>{{ str_limit($v->title, 20) }}</td>\n                <td> {{ str_limit($v->slug, 15) }}</td>\n                <td>{{ str_limit($v->description, 20) }}</td>\n                <td>{{ $v->vote_count }}</td>\n                <td> {{ $v->view_count }}</td>\n                <td> {{ $v->comment_count }}</td>\n                <td>\n                    <input type=\"number\" value=\"{{ $v->weight }}\" data-id=\"{{ $v->id }}\" data-column=\"weight\" data-table=\"articles\" data-msg=\"排序修改成功\" onchange=\"updateSort(this)\"  style=\"text-align:center;\" onkeyup=\"this.value=this.value.replace(/[^\\d]/g,'')\" class=\"form-control\">\n                </td>\n                <td>\n                    @if( $v->is_excellent == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_excellent\" data-table=\"articles\" data-msg=\"优秀\" data-todo=\"1\"\n                           data-cur=\"非优秀\" onclick=\"changeStatus(this)\"> 非优秀</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_excellent\" data-table=\"articles\" data-msg=\"非优秀\"\n                           data-todo=\"0\" data-cur=\"优秀\" onclick=\"changeStatus(this)\"> 优秀</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->is_hot == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_hot\" data-table=\"articles\" data-msg=\"热门\" data-todo=\"1\"\n                           data-cur=\"非热门\" onclick=\"changeStatus(this)\"> 非热门</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_hot\" data-table=\"articles\" data-msg=\"非热门\"\n                           data-todo=\"0\" data-cur=\"热门\" onclick=\"changeStatus(this)\"> 热门</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->only_owner_can_see == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"only_owner_can_see\" data-table=\"articles\" data-msg=\"私有\" data-todo=\"1\"\n                           data-cur=\"非私有\" onclick=\"changeStatus(this)\"> 非私有</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"only_owner_can_see\" data-table=\"articles\" data-msg=\"非私有\"\n                           data-todo=\"0\" data-cur=\"私有\" onclick=\"changeStatus(this)\"> 私有</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->is_draft == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_draft\" data-table=\"articles\" data-msg=\"草稿\" data-todo=\"1\"\n                           data-cur=\"非草稿\" onclick=\"changeStatus(this)\"> 非草稿</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_draft\" data-table=\"articles\" data-msg=\"非草稿\"\n                           data-todo=\"0\" data-cur=\"草稿\" onclick=\"changeStatus(this)\"> 草稿</i>\n                    @endif\n\n                </td>\n                <td>{{ $v->published_at }}</td>\n                <td>\n                    <a href=\"{{ dashboardUrl('/article/'.$v->id.'/edit') }}\">\n                        <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                    </a>&nbsp;&nbsp;\n                    <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" target=\"_blank\" title=\"预览\"><span\n                                class=\"fa fa-eye\"></span>&nbsp;预览</a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                       data-name=\"{{ $v->title }}\" data-url=\"{{ dashboardUrl('/article/'.$v->id.'/delete') }}\">\n                        <i class=\"fa fa-trash-o\"></i> 删除\n                    </a>\n                </td>\n            </tr>\n        @empty\n            <tr>\n                <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n            </tr>\n        @endforelse\n        </tbody>\n    </table>\n    <div class=\"pull-right\">\n        {!! preg_replace(\"(<a[^>]*page[=|/](\\d+).+?>(.+?)<\\/a>)\",\"<a data-p=$1 href='javascript:void($1);'>$2</a>\",$lists->links()) !!}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    //分页\n    $('.pagination a').click(function () {\n        form = 'subForm';//表单id 全局变量\n        p = $(this).data('p');//当前分页\n        turl = \"/dashboard/article/ajaxArticles\" + \"?page=\" + p;//url\n        ajaxList(form, turl);\n    });\n</script>"
  },
  {
    "path": "resources/views/dashboard/articles/article-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                        <div style=\"text-align:right\">\n                            <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/article/create') }}\">添加文章</a>\n                        </div>\n                        <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                            所有文章\n                        </div>\n                        <button onclick=\"window.history.go(-1);\" class=\"roll-nav roll-left J_tabLeft\"><i\n                                    class=\"fa fa-backward\"></i></button>\n                    </div>\n\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"cat_id\">\n                                        <option value=\"\">所属分类</option>\n                                        @foreach($category_list as $v)\n                                            <option value=\"{{ $v->id }}\">{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_draft\">\n                                        <option value=\"\">是否草稿</option>\n                                        <option value=\"no\">非草稿</option>\n                                        <option value=\"yes\">草稿</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_excellent\">\n                                        <option value=\"\">是否优秀</option>\n                                        <option value=\"no\">非优秀</option>\n                                        <option value=\"yes\">优秀</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_hot\">\n                                        <option value=\"\">是否热门</option>\n                                        <option value=\"no\">非热门</option>\n                                        <option value=\"yes\">热门</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"only_owner_can_see\">\n                                        <option value=\"\">是否私人</option>\n                                        <option value=\"no\">非私人</option>\n                                        <option value=\"yes\">私人</option>\n                                    </select>\n                                </div>\n                                <input type=\"hidden\" name=\"order\" value=\"\">\n                                <input type=\"hidden\" name=\"sort\" value=\"asc\">\n                                <div class=\"col-sm-2\">\n                                    <div class=\"input-group\">\n                                        <input type=\"text\" class=\"form-control\" name=\"keywords\" value=\"\"\n                                               placeholder=\"输入文章标题\"/>\n                                        <span class=\"input-group-btn\">\n                                        <button type=\"submit\"\n                                                onclick=\"ajaxList('subForm','/dashboard/article/ajaxArticles')\"\n                                                class=\"btn btn-primary\"><i class=\"fa fa-search\"></i> 搜索</button>\n                                    </span>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div id=\"ajax_return\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- 加载动画 -->\n<div class=\"spiner-example\">\n    <div class=\"sk-spinner sk-spinner-three-bounce\">\n        <div class=\"sk-bounce1\"></div>\n        <div class=\"sk-bounce2\"></div>\n        <div class=\"sk-bounce3\"></div>\n    </div>\n</div>\n<div class=\"zTreeDemoBackground left\" style=\"display: none;float: left;margin-left:-50px\" id=\"role\">\n    <input type=\"hidden\" id=\"nodeid\">\n    <div class=\"form-group\">\n        <div class=\"col-sm-5 col-sm-offset-2\">\n            <ul id=\"treeType\" class=\"ztree\"></ul>\n        </div>\n    </div>\n    <div class=\"row cl\">\n        <div class=\"col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3\">\n            <input type=\"button\" value=\"提交\" class=\"btn btn-primary\" id=\"postform\"/>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n<script type=\"text/javascript\">\n    //第一页\n    $(document).ready(function () {\n        form = 'subForm';//表单id 全局变量\n        p = 1;//当前分页\n        turl = '/dashboard/article/ajaxArticles?page=' + p;//url\n        ajaxList(form, turl);\n    });\n    // 点击排序\n    function ajaxSort(field)\n    {\n        var sort =$(\"input[name=sort]\").val();\n        $(\"input[name='order']\").val(field);\n        if(sort=='asc'){\n            $(\"input[name=sort]\").val('desc');\n        }else{\n            $(\"input[name=sort]\").val('asc');\n        }\n        ajaxList('subForm',turl);\n    }\n</script>\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/articles/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 文章添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\"\n                                       placeholder=\"文章标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  文章标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章分类：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"category_id\">\n                                        <option value=\"\">选择分类</option>\n                                        @foreach($catList as $v)\n                                            <option value=\"{{ $v->id }}\">{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\"></textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章标签：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple size=\"2\"\n                                            id=\"tags\" data-placeholder=\"点击选择文章标签\">\n                                        @foreach($tagList as $tag)\n                                            <option value=\"{{ $tag->id }}\">{{ $tag->tag }}</option>\n                                        @endforeach\n                                    </select>\n                                    <input type=\"hidden\" name=\"tags\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>文章标签，建议最多选择两个</span>\n\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章相关属性：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple\n                                            id=\"attribute\" data-placeholder=\"点击选择文章相关属性\">\n                                        <option value=\"1\">优秀文章</option>\n                                        <option value=\"2\">热门文章</option>\n                                        <option value=\"3\">私人文章</option>\n                                        <option value=\"4\">草稿</option>\n                                    </select>\n                                    <input type=\"hidden\" name=\"attribute\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>优秀文章、热门文章(推荐)、私人文章(仅自己可见)、草稿</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">发布时间：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input class=\"form-control layer-date\" placeholder=\"YYYY-MM-DD hh:mm:ss\"\n                                       name=\"published_at\" time_plugin=\"published_at\">\n                                <label class=\"laydate-icon\"></label>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\"\n                                       value=\"50\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        spellChecker: false,\n        autosave: {\n            enabled: true,\n            delay: 2000,\n            unique_id: \"dashboard_article_create_content\"\n        },\n        element: document.getElementById(\"editor\"),\n        forceSync: true,\n        tabSize: 4,\n    });\n\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入文章标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"select[name=category_id]\").val(), '请选择文章分类') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入文章描述') == false) {\n            return false;\n        }\n        $(\"textarea[name=content]\").val(simplemde.value());\n        ajaxFormBtn(\"{{ dashboardUrl('/article/store') }}\", 'btnForm');\n    });\n\n\n    /*选择商品多选下拉框 ------------start */\n    //多选初始化\n    $(function () {\n        $(\"#tags\").chosen({\n            max_selected_options: 2,\n            no_results_text: '无匹配项',\n            display_selected_options: false\n        });\n    });\n    //获取选中的值\n    $('#attribute').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=attribute]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n    $('#tags').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=tags]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/articles/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>文章修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 文章修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\" value=\"{{ $info->title }}\"\n                                       placeholder=\"文章标题\">\n                                <input type=\"hidden\" name=\"slug\"  value=\"{{ $info->slug }}\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  文章标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章分类：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"category_id\">\n                                        <option value=\"\">选择分类</option>\n                                        @foreach($catList as $v)\n                                            <option value=\"{{ $v->id }}\"\n                                                    @if($info->category_id == $v->id) selected @endif>{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\">{{ json_decode($info->content)->raw }}</textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章标签：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple size=\"2\"\n                                            id=\"tags\" data-placeholder=\"点击选择文章标签\">\n                                        @foreach($tagList as $tag)\n                                            <option value=\"{{ $tag->id }}\"\n                                                    @if(in_array($tag->id,$tags)) selected @endif>{{ $tag->tag }}</option>\n                                        @endforeach\n                                    </select>\n                                    <input type=\"hidden\" name=\"tags\" value=\"{{ implode(',', $tags) }}\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>文章标签，建议最多选择两个</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">文章相关属性：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple\n                                            id=\"attribute\" data-placeholder=\"点击选择文章相关属性\">\n                                        <option value=\"1\" @if($info->is_excellent == 'yes') selected @endif >优秀文章\n                                        </option>\n                                        <option value=\"2\" @if($info->is_hot == 'yes') selected @endif>热门文章</option>\n                                        <option value=\"3\" @if($info->only_owner_can_see == 'yes') selected @endif>私人文章\n                                        </option>\n                                        <option value=\"4\" @if($info->is_draft == 'yes') selected @endif>草稿</option>\n                                    </select>\n                                    <input type=\"hidden\" name=\"attribute\" value=\"{{ $attribute }}\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>优秀文章、热门文章(推荐)、私人文章(仅自己可见)、草稿</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">发布时间：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input class=\"form-control layer-date\" time_plugin=\"start_time\" placeholder=\"请填写发布时间\"\n                                       name=\"published_at\" value=\"{{ $info->published_at }}\">\n                                <label class=\"laydate-icon\"></label>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\" value=\"{{ $info->weight }}\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        spellChecker: false,\n        autosave: {\n            enabled: true,\n            delay: 2000,\n            unique_id: \"dashboard_article_edit_content{{ $info->id . '_' . str_slug($info->update_at)}}\"\n        },\n        element: document.getElementById(\"editor\"),\n        forceSync: true,\n        tabSize: 4,\n    });\n\n    {{--    simplemde.value({{$info->content }});--}}\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入文章标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"select[name=category_id]\").val(), '请选择文章分类') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入文章描述') == false) {\n            return false;\n        }\n        $(\"textarea[name=content]\").val(simplemde.value());\n        ajaxFormBtn(\"{{ dashboardUrl('/article/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n\n    /*选择商品多选下拉框 ------------start */\n    //多选初始化\n    $(function () {\n        $(\"#tags\").chosen({\n            max_selected_options: 2,\n            no_results_text: '无匹配项',\n            display_selected_options: false\n        });\n    });\n    //获取选中的值\n    $('#attribute').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=attribute]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n    $('#tags').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=tags]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/index/index.blade.php",
    "content": "@extends('dashboard.layouts.base')\n@section('content')\n<!-- 加载动画 -->\n<div class=\"row J_mainContent\" id=\"content-main\" >\n    <iframe class=\"J_iframe\" name=\"iframe0\" width=\"100%\" height=\"100% \"\n            src=\"{{ dashboardUrl('/welcome') }}\" frameborder=\"0\"\n            data-id=\"index_v1.html\" seamless>\n    </iframe>\n</div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/dashboard/index/welcome.blade.php",
    "content": "@include('dashboard.layouts.partials.head')\n<div class=\"wrapper wrapper-content\">\n    <div class=\"alert alert-danger alert-dismissable\">\n        <button aria-hidden=\"true\" data-dismiss=\"alert\" class=\"close\" type=\"button\">×</button>\n        <div>尊敬的【{$admin_info.role_name}】{$admin_info.user_name}<span id=\"weather\"></span></div>\n    </div>\n\n    <!-- 上方tab -->\n    <div class=\"row\">\n        <div class=\"col-sm-3\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <span class=\"label pull-right\">日</span>\n                    <span class=\"label pull-right\">周</span>\n                    <span class=\"label label-success pull-right\">月</span>\n                    <h5>收入</h5>\n                </div>\n                <div class=\"ibox-content\">\n                    <h1 class=\"no-margins\">40 886,200</h1>\n                    <small>总收入</small>\n                </div>\n            </div>\n        </div>\n        <div class=\"col-sm-3\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <span class=\"label pull-right\">日</span>\n                    <span class=\"label pull-right\">周</span>\n                    <span class=\"label label-success pull-right\">月</span>\n                    <h5>订单</h5>\n                </div>\n                <div class=\"ibox-content\">\n                    <h1 class=\"no-margins\">275,800</h1>\n                    <small>总订单</small>\n                </div>\n            </div>\n        </div>\n        <div class=\"col-sm-3\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <span class=\"label pull-right\">日</span>\n                    <span class=\"label pull-right\">周</span>\n                    <span class=\"label label-success pull-right\">月</span>\n                    <h5>注册</h5>\n                </div>\n                <div class=\"ibox-content\">\n                    <h1 class=\"no-margins\">106,120</h1>\n                    <small>新增</small>\n                </div>\n            </div>\n        </div>\n        <div class=\"col-sm-3\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <a href=\"#question\">\n                        <i class=\"fa fa-question\" style=\"color:red;margin-left:10px\" data-container=\"body\" data-toggle=\"popover\" data-placement=\"bottom\"\n                           data-content=\"日活跃用户 = 当日登录游戏的用户 - 当日新增用户数(去重)@@@@@@@@月活跃用户 = 最近30天登录游戏的用户 - 最近30天新增用户(去重)\"></i>\n                    </a>\n                    <span class=\"label pull-right\">日</span>\n                    <span class=\"label pull-right\">周</span>\n                    <span class=\"label label-success pull-right\">月</span>\n                    <h5>活跃用户</h5>\n                </div>\n                <div class=\"ibox-content\">\n                    <h1 class=\"no-margins\">80,600</h1>\n                    <small>7月</small>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <!-- 中间折线 -->\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"col-sm-6\">\n                <div class=\"panel panel-info\">\n                    <div class=\"panel-heading\">\n                        <i class=\"fa fa-cogs\"></i> 系统信息\n                    </div>\n                    <div class=\"panel-body\">\n                        <p><i class=\"fa fa-sitemap\"></i> 框架版本：ThinkPHP{$sys_info.think_v}\n                        </p>\n                        <p><i class=\"fa fa-windows\"></i> 服务环境：{$sys_info.web_server}\n                        </p>\n                        <p><i class=\"fa fa-futbol-o\"></i> 服务器操作系统：{$sys_info.os}\n                        </p>\n                        <p><i class=\"fa fa-tag\"></i> 服务器域名/IP：{$sys_info.domain} [ {$sys_info.ip} ]\n                        </p>\n                        <p><i class=\"fa fa-credit-card\"></i> PHP 版本：{$sys_info.phpv}\n                        </p>\n                        <p><i class=\"fa fa-tint\"></i> Mysql版本：{$sys_info.mysql_version}\n                        </p>\n                        <p><i class=\"fa fa-sort\"></i> GD版本：{$sys_info.gdinfo}\n                        </p>\n                        <p><i class=\"fa fa-warning\"></i> 上传附件限制：{$sys_info.fileupload}\n                        </p>\n                        <p><i class=\"fa fa-unlock\"></i> 最大占用内存：{$sys_info.memory_limit}\n                        </p>\n                        <p><i class=\"fa fa-times-circle\"></i> 最大执行时间：{$sys_info.max_ex_time}\n                        </p>\n                        <p><i class=\"fa fa-spinner\"></i> url支持：{$sys_info.curl}\n                        </p>\n                    </div>\n                </div>\n            </div>\n            <div class=\"col-sm-6\">\n                <div class=\"panel panel-primary\">\n                    <div class=\"panel-heading\">\n                        <i class=\"fa fa-user\"></i> 开发者信息\n                    </div>\n                    <div class=\"panel-body\">\n                        <p><i class=\"fa fa-cubes\"></i> 程序版本：<a href=\"\">{$sys_info.version}</a>\n                        </p>\n                        <p><i class=\"fa fa-user\"></i> 开发者：<a href=\"\">漂过太平洋</a>\n                        </p>\n                        <p><i class=\"fa fa-send-o\"></i> 博客：<a href=\"http://zhjaa.online\" target=\"_blank\">http://zhjaa.online</a>\n                        </p>\n                        <p><i class=\"fa fa-qq\"></i> QQ：<a href=\"http://wpa.qq.com/msgrd?v=3&amp;uin=185429135&amp;site=qq&amp;menu=yes\" target=\"_blank\">185429135</a>\n                        </p>\n                        <p><i class=\"fa fa-weixin\"></i> 微信：<a href=\"javascript:;\">jj-185429135</a>\n                        </p>\n                        <p><i class=\"fa fa-credit-card\"></i> 支付宝：<a href=\"javascript:;\" class=\"支付宝信息\">185429135@qq.com / **杰</a>\n                        </p>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n{include file=\"public/footer\" /}\n<script src=\"/static/admin/js/jquery.leoweather.min.js\"></script>\n<script type=\"text/javascript\">\n    $('#weather').leoweather({city:'昆明',format:'，{时段}好！<span id=\"colock\">现在时间是：<strong>{年}年{月}月{日}日 星期{周} {时}:{分}:{秒}</strong>，</span> <b>{城市}天气</b> {天气} 风级{风级} 气温{夜间气温}℃ ~ {白天气温}℃'});\n</script>\n\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/layouts/base.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    @include('dashboard.layouts.partials.head')\n    @yield('style')\n</head>\n<body class=\"fixed-sidebar full-height-layout gray-bg\" style=\"overflow:hidden\">\n<div id=\"wrapper\">\n@include('dashboard.layouts.partials.left')\n    <!--右侧部分开始-->\n    <div id=\"page-wrapper\" class=\"gray-bg dashbard-1\">\n        @include('dashboard.layouts.partials.body_head')\n       @yield('content')\n        <div class=\"footer\">\n            <div class=\"pull-right\">&copy; 2017 漂过太平洋后台管理 版权所有\n            </div>\n        </div>\n    </div>\n    <!--右侧部分结束-->\n    <!--右侧边栏开始-->\n@include('dashboard.layouts.partials.right')\n    <!--右侧边栏结束-->\n</div>\n@include('dashboard.layouts.partials.footer')\n@yield('script')\n<script src=\"/assets/dashboard/js/plugins/metisMenu/jquery.metisMenu.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/slimscroll/jquery.slimscroll.min.js\"></script>\n<script src=\"/assets/dashboard/js/hplus.min.js?v=4.1.0\"></script>\n<script src=\"/assets/dashboard/js/contabs.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/pace/pace.min.js\"></script>\n<script type=\"text/javascript\">\n    //退出登录\n    $(document).ready(function(){\n        $(\"#logout\").click(function(){\n            layer.confirm('你确定要退出吗？', {icon: 3}, function(index){\n                layer.close(index);\n                window.location.href=\"{:url('Admin/loginOut')}\";\n            });\n        });\n    });\n\n    //清除缓存\n    $(function(){\n        $(\"#cache\").click(function(){\n            layer.confirm('你确定要清除缓存吗？', {icon: 3}, function(index){\n                layer.close(index);\n                window.location.href=\"\";\n            });\n        });\n    });\n</script>\n</body>\n\n</html>\n"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/body_head.blade.php",
    "content": "<div class=\"row border-bottom\">\n    <nav class=\"navbar navbar-static-top\" role=\"navigation\" style=\"margin-bottom: 0\">\n        <div class=\"navbar-header\"><a class=\"navbar-minimalize minimalize-styl-2 btn btn-primary \" href=\"#\"><i\n                class=\"fa fa-bars\"></i> </a>\n        </div>\n        <ul class=\"nav navbar-top-links navbar-right\">\n            <li class=\"dropdown hidden-xs\">\n                <a class=\"right-sidebar-toggle\" aria-expanded=\"false\">\n                    <i class=\"fa fa-tasks\"></i> 主题\n                </a>\n            </li>\n        </ul>\n    </nav>\n</div>\n<div class=\"row content-tabs\">\n    <button class=\"roll-nav roll-left J_tabLeft\"><i class=\"fa fa-backward\"></i>\n    </button>\n    <nav class=\"page-tabs J_menuTabs\">\n        <div class=\"page-tabs-content\">\n            <a href=\"javascript:;\" class=\"active J_menuTab\" data-id=\"index_v1.html\">首页</a>\n        </div>\n    </nav>\n    <button class=\"roll-nav roll-right J_tabRight\"><i class=\"fa fa-forward\"></i>\n    </button>\n    <div class=\"btn-group roll-nav roll-right\">\n        <button class=\"dropdown J_tabClose\" data-toggle=\"dropdown\">常用操作<span class=\"caret\"></span>\n\n        </button>\n        <ul role=\"menu\" class=\"dropdown-menu dropdown-menu-right\">\n            <li class=\"J_tabGo\"><a>前进</a>\n            </li>\n            <li class=\"J_tabBack\"><a>后退</a>\n            </li>\n            <li class=\"J_tabFresh\"><a>刷新</a>\n            </li>\n            <li class=\"divider\"></li>\n            <li class=\"J_tabShowActive\"><a>定位当前选项卡</a>\n            </li>\n            <li class=\"divider\"></li>\n            <li class=\"J_tabCloseAll\"><a>关闭全部选项卡</a>\n            </li>\n            <li class=\"J_tabCloseOther\"><a>关闭其他选项卡</a>\n            </li>\n        </ul>\n    </div>\n    <a href=\"javascript:;\" id=\"logout\" class=\"roll-nav roll-right J_tabExit\"><i class=\"fa fa fa-sign-out\"></i>\n        退出</a>\n</div>"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/footer.blade.php",
    "content": "<script src=\"/assets/dashboard/js/jquery.min.js?v=2.1.4\"></script>\n<script src=\"/assets/dashboard/js/bootstrap.min.js?v=3.3.6\"></script>\n<script src=\"/assets/dashboard/js/content.min.js?v=1.0.0\"></script>\n<script src=\"/assets/dashboard/js/plugins/chosen/chosen.jquery.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/iCheck/icheck.min.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/layer/laydate/laydate.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/sweetalert/sweetalert.min.js\"></script>\n<script src=\"/assets/dashboard/js/plugins/switchery/switchery.js\"></script><!--IOS开关样式-->\n<script src=\"/assets/dashboard/js/plugins/slimscroll/jquery.slimscroll.min.js\"></script>\n<script src=\"/assets/dashboard/js/jquery.form.js\"></script>\n<script src=\"/assets/dashboard/js/layer/layer.js\"></script>\n<script src=\"/assets/dashboard/js/laypage/laypage.js\"></script>\n<script src=\"/assets/dashboard/js/laytpl/laytpl.js\"></script>\n<script src=\"/assets/dashboard/js/global.js\"></script>\n<script src=\"/assets/dashboard/js/jquery.easyui.min.js\"></script>\n<!--引入CSS-->\n<link rel=\"stylesheet\" type=\"text/css\" href=\"/assets/dashboard/webupload/webuploader.css\">\n<script type=\"text/javascript\" src=\"/assets/dashboard/webupload/webuploader.min.js\"></script>\n\n<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/zTree/zTreeStyle.css\" type=\"text/css\">\n<script type=\"text/javascript\" src=\"/assets/dashboard/js/plugins/zTree/jquery.ztree.core-3.5.js\"></script>\n<script type=\"text/javascript\" src=\"/assets/dashboard/js/plugins/zTree/jquery.ztree.excheck-3.5.js\"></script>\n<script type=\"text/javascript\" src=\"/assets/dashboard/js/plugins/zTree/jquery.ztree.exedit-3.5.js\"></script>\n\n<script src=\"/assets/dashboard/js/plugins/fancybox/jquery.fancybox.js\"></script>\n<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/fancybox/jquery.fancybox.css\">\n\n\n<script src=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.js\"></script>\n<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.css\">\n<script>\n    $.ajaxSetup({\n        headers: {\n            'X-CSRF-TOKEN': $('meta[name=\"csrf-token\"]').attr('content')\n        }\n    });\n    $(document).ready(function () {\n        $(\".fancybox\").fancybox({openEffect: \"none\", closeEffect: \"none\"})\n        $(\".i-checks\").iCheck({checkboxClass: \"icheckbox_square-green\", radioClass: \"iradio_square-green\",})\n    });\n    var config = {\n        '.chosen-select': {},\n    };\n    for (var selector in config) {\n        $(selector).chosen(config[selector]);\n    }\n</script>"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/head.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n<meta charset=\"utf-8\">\n<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n<link rel=\"shortcut icon\" href=\"favicon.ico\">\n<link href=\"/assets/dashboard/css/bootstrap.min.css?v=3.3.6\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/font-awesome.min.css?v=4.4.0\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/animate.min.css\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/plugins/iCheck/custom.css\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/plugins/chosen/chosen.css\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/plugins/switchery/switchery.css\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/style.min.css?v=4.1.0\" rel=\"stylesheet\">\n<link href=\"/assets/dashboard/css/plugins/sweetalert/sweetalert.css\" rel=\"stylesheet\">\n<title>漂过太平洋-后台管理系统</title>\n<style type=\"text/css\">\n    .long-tr th{\n        text-align: center\n    }\n    .long-td td{\n        text-align: center\n    }\n</style>"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/header.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <meta charset=\"utf-8\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <link rel=\"shortcut icon\" href=\"favicon.ico\">\n    <link href=\"/assets/dashboard/css/bootstrap.min.css?v=3.3.6\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/font-awesome.min.css?v=4.4.0\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/animate.min.css\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/plugins/iCheck/custom.css\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/plugins/chosen/chosen.css\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/plugins/switchery/switchery.css\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/style.min.css?v=4.1.0\" rel=\"stylesheet\">\n    <link href=\"/assets/dashboard/css/plugins/sweetalert/sweetalert.css\" rel=\"stylesheet\">\n\n    <style type=\"text/css\">\n    .long-tr th{\n        text-align: center\n    }\n    .long-td td{\n        text-align: center\n    }\n\n    </style>\n"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/left.blade.php",
    "content": "<!--左侧导航开始-->\n<nav class=\"navbar-default navbar-static-side\" role=\"navigation\">\n    <div class=\"nav-close\"><i class=\"fa fa-times-circle\"></i>\n    </div>\n    <div class=\"sidebar-collapse\">\n        <ul class=\"nav\" id=\"side-menu\">\n            <li class=\"nav-header\">\n                <div class=\"dropdown profile-element\">\n                    <span><img alt=\"image\" class=\"img-circle\" style=\"max-width: 80px\" src=\"{{ Auth::User()->avatar }}\"/></span>\n                    <a data-toggle=\"dropdown\" class=\"dropdown-toggle\" href=\"#\">\n                            <span class=\"clear\">\n                                <span class=\"block m-t-xs\"><strong\n                                            class=\"font-bold\">{{ Auth::User()->user_name }}</strong></span>\n                                <span class=\"text-muted text-xs block\">总后台管理员<b class=\"caret\"></b></span>\n                            </span>\n                    </a>\n                    <ul class=\"dropdown-menu animated fadeInRight m-t-xs\">\n                        <li><a href=\"javascript:;\" id=\"cache\">清除缓存</a></li>\n                        <li><a href=\"{{ url('/') }}\">返回主站</a></li>\n                    </ul>\n                </div>\n            </li>\n            @foreach( $menu_list as $menu)\n                <li class=\"menu\">\n                    <a href=\"#\">\n                        <i class=\"fa fa-{{ $menu['style'] }}\"></i>\n                        <span class=\"nav-label\">{{ $menu['name'] }} </span>\n                        <span class=\"fa arrow\"></span>\n                    </a>\n                    <ul class=\"nav nav-second-level\">\n                        @forelse ($menu['sun'] as $v)\n                            <li>\n                                <a class=\"J_menuItem\" href=\"{{ $v['href'] }}\">{{ $v['name'] }}</a>\n                            </li>\n                        @empty\n                        @endforelse\n                    </ul>\n                </li>\n            @endforeach\n        </ul>\n    </div>\n</nav>\n<!--左侧导航结束-->"
  },
  {
    "path": "resources/views/dashboard/layouts/partials/right.blade.php",
    "content": "<!--右侧边栏开始-->\n<div id=\"right-sidebar\">\n    <div class=\"sidebar-container\">\n        <ul class=\"nav nav-tabs navs-3\">\n            <li class=\"active\">\n                <a data-toggle=\"tab\" href=\"#tab-1\">\n                    <i class=\"fa fa-gear\"></i> 主题\n                </a>\n            </li>\n        </ul>\n        <div class=\"tab-content\">\n            <div id=\"tab-1\" class=\"tab-pane active\">\n                <div class=\"sidebar-title\">\n                    <h3> <i class=\"fa fa-comments-o\"></i> 主题设置</h3>\n                    <small><i class=\"fa fa-tim\"></i> 你可以从这里选择和预览主题的布局和样式，这些设置会被保存在本地，下次打开的时候会直接应用这些设置。</small>\n                </div>\n                <div class=\"skin-setttings\">\n                    <div class=\"title\">主题设置</div>\n                    <div class=\"setings-item\">\n                        <span>收起左侧菜单</span>\n                        <div class=\"switch\">\n                            <div class=\"onoffswitch\">\n                                <input type=\"checkbox\" name=\"collapsemenu\" class=\"onoffswitch-checkbox\" id=\"collapsemenu\">\n                                <label class=\"onoffswitch-label\" for=\"collapsemenu\">\n                                    <span class=\"onoffswitch-inner\"></span>\n                                    <span class=\"onoffswitch-switch\"></span>\n                                </label>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"setings-item\">\n                        <span>固定顶部</span>\n\n                        <div class=\"switch\">\n                            <div class=\"onoffswitch\">\n                                <input type=\"checkbox\" name=\"fixednavbar\" class=\"onoffswitch-checkbox\" id=\"fixednavbar\">\n                                <label class=\"onoffswitch-label\" for=\"fixednavbar\">\n                                    <span class=\"onoffswitch-inner\"></span>\n                                    <span class=\"onoffswitch-switch\"></span>\n                                </label>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"setings-item\">\n                                <span>\n                        固定宽度\n                    </span>\n\n                        <div class=\"switch\">\n                            <div class=\"onoffswitch\">\n                                <input type=\"checkbox\" name=\"boxedlayout\" class=\"onoffswitch-checkbox\" id=\"boxedlayout\">\n                                <label class=\"onoffswitch-label\" for=\"boxedlayout\">\n                                    <span class=\"onoffswitch-inner\"></span>\n                                    <span class=\"onoffswitch-switch\"></span>\n                                </label>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"title\">皮肤选择</div>\n                    <div class=\"setings-item default-skin nb\">\n                                <span class=\"skin-name \">\n                         <a href=\"#\" class=\"s-skin-0\">\n                             默认皮肤\n                         </a>\n                    </span>\n                    </div>\n                    <div class=\"setings-item blue-skin nb\">\n                                <span class=\"skin-name \">\n                        <a href=\"#\" class=\"s-skin-1\">\n                            蓝色主题\n                        </a>\n                    </span>\n                    </div>\n                    <div class=\"setings-item yellow-skin nb\">\n                                <span class=\"skin-name \">\n                        <a href=\"#\" class=\"s-skin-3\">\n                            黄色/紫色主题\n                        </a>\n                    </span>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!--右侧边栏结束-->\n"
  },
  {
    "path": "resources/views/dashboard/links/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>友情链接添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 友情链接添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\"\n                                       placeholder=\"标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">类型：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"type\">\n                                        <option value=\"link\">友链</option>\n                                        <option value=\"recommend\">推荐资源</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">url：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"link\"\n                                       placeholder=\"url\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  link</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">状态：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"is_enabled\">\n                                        <option value=\"yes\">启用</option>\n                                        <option value=\"no\">非启用</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入友情链接标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=link]\").val(), '请输入 url') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/links/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/links/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>友情链接修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 友情链接修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\" value=\"{{ $info->title }}\"\n                                       placeholder=\"标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">类型：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"type\">\n                                        <option value=\"link\" @if($info->type == 'link') selected @endif>友链</option>\n                                        <option value=\"recommend\" @if($info->type == 'recommend') selected @endif>推荐资源</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">url：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"link\" value=\"{{ $info->link }}\"\n                                       placeholder=\"url\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  link</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">状态：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-1\">\n                                    <select class=\"form-control m-b\" id=\"attribute\" name=\"is_enabled\">\n                                        <option value=\"yes\" @if($info->is_enabled == 'yes') selected @endif>启用</option>\n                                        <option value=\"no\" @if($info->is_enabled == 'no') selected @endif>非启用</option>\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入友情链接标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=link]\").val(), '请输入 url') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/links/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/links/link-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>友情链接列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                        <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                            <div style=\"text-align:right\">\n\n                                <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/links/create') }}\">添加</a>\n                            </div>\n                            <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                                所有友情链接\n                            </div>\n                            <button onclick=\"window.history.go(-1);\" class=\"roll-nav roll-left J_tabLeft\"><i\n                                        class=\"fa fa-backward\"></i></button>\n                        </div>\n                    <div class=\"ibox-content\">\n                        <div class=\"table-responsive \">\n                            <table class=\"table table-hover\">\n                                <thead>\n                                <tr class=\"long-tr\">\n                                    {{--<th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>--}}\n                                    <th>ID</th>\n                                    <th>标题</th>\n                                    <th>类型</th>\n                                    <th>链接</th>\n                                    <th>是否启用</th>\n                                    <th>添加时间</th>\n                                    <th>操作 - <span>数据量：</span>【 {{ count($lists) }} 】</th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                @forelse( $lists as $v )\n                                    <tr class=\"long-td\">\n                                        {{--<td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>--}}\n                                        <td>{{ $v->id }}</td>\n                                        <td>{{ $v->title }}</td>\n                                        <td> {{ $v->type }} </td>\n                                        <td>{{ $v->link }}</td>\n                                        <td>\n                                            @if( $v->is_enabled == 'no')\n                                                <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                                                   data-id=\"{{ $v->id }}\" data-column=\"is_enabled\" data-table=\"links\" data-msg=\"启用\" data-todo=\"1\"\n                                                   data-cur=\"非启用\" onclick=\"changeStatus(this)\"> 非启用</i>\n                                            @else\n                                                <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                                                   data-id=\"{{ $v->id }}\" data-column=\"is_enabled\" data-table=\"links\" data-msg=\"非启用\"\n                                                   data-todo=\"0\" data-cur=\"启用\" onclick=\"changeStatus(this)\">启用</i>\n                                            @endif\n                                        </td>\n                                        <td>{{ $v->created_at }}</td>\n                                        <td>\n                                            <a target=\"_self\" title=\"编辑\"\n                                               href=\"{{ dashboardUrl('/links/'.$v->id.'/edit') }}\">\n                                                <span class=\"fa fa-pencil-square-o\"> </span>&nbsp;编辑\n                                            </a>&nbsp;&nbsp;\n                                            <a href=\"javascript:;\" class=\"btn-warning btn-xs\" onclick=\"delBtn(this)\"\n                                               data-id=\"0\"\n                                               data-name=\"{{ $v->name }}\"\n                                               data-url=\"{{ dashboardUrl('/links/'.$v->id.'/delete') }}\">\n                                                <i class=\"fa fa-trash-o\"></i> 删除\n                                            </a>\n                                        </td>\n                                    </tr>\n                                @empty\n                                    <tr>\n                                        <td colspan=\"20\"\n                                            style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">\n                                            暂无数据\n                                        </td>\n                                    </tr>\n                                @endforelse\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/permissions/ajax-permission-list.blade.php",
    "content": "<div class=\"table-responsive \">\n    <table class=\"table table-bordered table-hover\">\n        <thead>\n        <tr class=\"long-tr\">\n            <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>\n            <th>名称</th>\n            <th>显示名称</th>\n            <th>描述</th>\n            <th>添加时间</th>\n            <th>操作</th>\n        </tr>\n        </thead>\n        <tbody>\n        @forelse( $lists as $v )\n            <tr class=\"long-td\">\n                <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                <td>{{ $v->name }}</td>\n                <td>{{ $v->display_name }}</td>\n                <td>{{ $v->description }}</td>\n                <td>{{ $v->created_at }}</td>\n                <td>\n                    <a href=\"{{ dashboardUrl('/permission/'.$v->id.'/edit') }}\" class=\"btn btn-primary btn-xs\">\n                        <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                    </a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                       data-name=\"{{ $v->name }}\" data-url=\"{{ dashboardUrl('/permission/'.$v->id.'/delete') }}\">\n                        <i class=\"fa fa-trash-o\"></i> 删除\n                    </a>\n                </td>\n            </tr>\n        @empty\n            <tr>\n                <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n            </tr>\n        @endforelse\n        </tbody>\n    </table>\n    <div class=\"pull-right\">\n        {!! preg_replace(\"(<a[^>]*page[=|/](\\d+).+?>(.+?)<\\/a>)\",\"<a data-p=$1 href='javascript:void($1);'>$2</a>\",$lists->links()) !!}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    //分页\n    $('.pagination a').click(function () {\n        form = 'subForm';//表单id 全局变量\n        p = $(this).data('p');//当前分页\n        turl = \"/dashboard/permission/ajaxPermissions\" + \"?page=\" + p;//url\n        ajaxList(form, turl);\n    });\n\n</script>"
  },
  {
    "path": "resources/views/dashboard/permissions/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>权限添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 权限添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权限名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\"\n                                       placeholder=\"权限名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权限名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">显示名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"display_name\"\n                                       placeholder=\"显示名称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入权限名称') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入权限描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/permission/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/permissions/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>修改角色</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 修改角色</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">角色名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\" value=\"{{ $info->name }}\"\n                                       placeholder=\"角色名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  角色名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">显示名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"display_name\"\n                                       value=\"{{ $info->display_name }}\"\n                                       placeholder=\"显示名称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入角色名称') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入角色描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/permission/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/permissions/permission-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>权限列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5>权限列表</h5>\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2\">\n                                    <div class=\"input-group\">\n                                        <input type=\"text\" class=\"form-control\" name=\"keywords\" value=\"\"\n                                               placeholder=\"输入权限名称\"/>\n                                        <span class=\"input-group-btn\">\n                                        <button type=\"submit\" onclick=\"ajaxList('subForm','/dashboard/permission/ajaxPermissions')\"\n                                                class=\"btn btn-primary\"><i class=\"fa fa-search\"></i> 搜索</button>\n                                    </span>\n                                    </div>\n                                </div>\n                                <div class=\"col-sm-2 pull-right\">\n                                    <div class=\"btn-group pull-right\" role=\"group\" style=\"clear: both\">\n                                        <a href=\"{{ dashboardUrl('/permission/create') }}\"\n                                           class=\"btn btn-outline btn-default \"><i class=\"fa fa-plus\"></i> </a>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div id=\"ajax_return\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- 加载动画 -->\n<div class=\"spiner-example\">\n    <div class=\"sk-spinner sk-spinner-three-bounce\">\n        <div class=\"sk-bounce1\"></div>\n        <div class=\"sk-bounce2\"></div>\n        <div class=\"sk-bounce3\"></div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n<script type=\"text/javascript\">\n    //第一页\n    $(document).ready(function () {\n        form = 'subForm';//表单id 全局变量\n        p = 1;//当前分页\n        turl = '/dashboard/permission/ajaxPermissions?page=' + p;//url\n        ajaxList(form, turl);\n    });\n</script>\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/question-categories/category-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题分类列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                        <div style=\"text-align:right\">\n                            <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/questionCategory/create') }}\">添加分类</a>\n                        </div>\n                        <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                            所有问题分类\n                        </div>\n                    </div>\n                    <div class=\"ibox-content\">\n                        <div class=\"table-responsive \">\n                            <table class=\"table table-hover\">\n                                <thead>\n                                <tr class=\"long-tr\">\n                                    <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>\n                                    <th>名称</th>\n                                    <th>图片</th>\n                                    <th>别名</th>\n                                    <th width=\"5%\">权重</th>\n                                    <th>文章数量</th>\n                                    <th>描述</th>\n                                    <th>添加时间</th>\n                                    <th>操作 - <span>数据量：</span>【 {{ count($lists) }} 】</th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                @forelse( $lists as $v )\n                                    <tr class=\"long-td\">\n                                        <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                                        <td>{{ $v->name }}</td>\n                                        <td>\n                                            <a>\n                                                <img src=\"{{ $v->image_url }}\" class=\"fancybox\" width=\"40\" height=\"30\"\n                                                     href=\"{{ $v->image_url }}\" title=\"{{ $v->name }}\"\n                                                     alt=\" {{ $v->name }}\">\n                                            </a>\n                                        </td>\n                                        <td>{{ $v->slug }}</td>\n                                        <td>\n                                            <input type=\"number\" value=\"{{ $v->weight }}\" data-id=\"{{ $v->id }}\" data-column=\"weight\" data-table=\"question_categories\" data-msg=\"排序修改成功\" onchange=\"updateSort(this)\"  style=\"text-align:center;\" onkeyup=\"this.value=this.value.replace(/[^\\d]/g,'')\" class=\"form-control\">\n                                        </td>\n                                        <td>{{ $v->question_count }}</td>\n                                        <td>{{ $v->description }}</td>\n                                        <td>{{ $v->created_at }}</td>\n                                        <td>\n                                            <a target=\"_self\" title=\"编辑\"\n                                               href=\"{{ dashboardUrl('/questionCategory/'.$v->id.'/edit') }}\">\n                                                <span class=\"fa fa-pencil-square-o\"> </span>&nbsp;编辑\n                                            </a>&nbsp;&nbsp;\n                                            <a href=\"javascript:;\" class=\"btn-warning btn-xs\" onclick=\"delBtn(this)\"\n                                               data-id=\"0\"\n                                               data-name=\"{{ $v->name }}\"\n                                               data-url=\"{{ dashboardUrl('/questionCategory/'.$v->id.'/delete') }}\">\n                                                <i class=\"fa fa-trash-o\"></i> 删除\n                                            </a>\n                                        </td>\n                                    </tr>\n                                @empty\n                                    <tr>\n                                        <td colspan=\"20\"\n                                            style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">\n                                            暂无数据\n                                        </td>\n                                    </tr>\n                                @endforelse\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/question-categories/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题分类添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 分类添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\"\n                                       placeholder=\"分类名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\"\n                                       placeholder=\"分类别名\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类别名，只能由 3-40 位数字英文字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">封面图片：</label>\n                            <div class=\"input-group col-sm-1\">\n                                <a class=\"btn btn-info\" href=\"javascript:void(0);\" style=\"float: left\"\n                                   uploader=\"image_url\"\n                                   data-url=\"{{ url('file/upload') }}\" data-path=\"temp\">+ 浏览文件\n                                    <input type=\"hidden\" name=\"image_url\" id=\"image_url\">\n                                </a>\n                                <img height=\"100px\" id=\"image_url_img\"\n                                     style=\"float:left;margin-left: 120px;margin-top: -50px;\"\n                                     onerror=\"this.src='/assets/dashboard/images/no_img.jpg'\" src=\"\"/>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">样式：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"style\"\n                                       placeholder=\"violet\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入分类名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=image_url]\").val(), '请上传分类图片') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入分类描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/questionCategory/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/question-categories/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题分类修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 分类修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\" value=\"{{ $info->name }}\"\n                                       placeholder=\"分类名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">分类别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\" value=\"{{ $info->slug }}\"\n                                       placeholder=\"分类别名\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  分类别名，只能由 3-40 位数字英文字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">封面图片：</label>\n                            <div class=\"input-group col-sm-1\">\n                                <a class=\"btn btn-info\" href=\"javascript:void(0);\" style=\"float: left\"\n                                   uploader=\"image_url\"\n                                   data-url=\"{{ url('file/upload') }}\" data-path=\"temp\">+ 浏览文件\n                                    <input type=\"hidden\" name=\"image_url\" id=\"image_url\" value=\"{{ $info->image_url }}\">\n                                </a>\n                                <img height=\"100px\" id=\"image_url_img\"\n                                     style=\"float:left;margin-left: 120px;margin-top: -50px;\"\n                                     onerror=\"this.src='/assets/dashboard/images/no_img.jpg'\"\n                                     src=\"{{ $info->image_url }}\"/>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">样式：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"style\" value=\"{{ $info->style }}\"\n                                       placeholder=\"violet\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\" value=\"{{ $info->weight }}\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入分类名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"input[name=image_url]\").val(), '请上传分类图片') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入分类描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/questionCategory/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/questions/ajax-question-list.blade.php",
    "content": "<div class=\"table-responsive \">\n    <table class=\"table table-hover\">\n        <thead>\n        <tr class=\"long-tr\">\n            <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID </th>\n            <th><i class=\"fa fa-file-text\" style=\"margin-right: 3px\"></i>问题标题</th>\n            <th>别名</th>\n            <th>描述</th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('vote_count');\">点赞数\n                    @if( $order == 'vote_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('view_count');\">查看數\n                    @if( $order == 'view_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('reply_count');\">评论数\n                    @if( $order == 'reply_count')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th width=\"5%\"> <a href=\"javascript:ajaxSort('weight');\">权重\n                    @if( $order == 'weight')\n                        <span style=\"color: #000000\"><i class=\"fa\n                        @if( $sort == 'asc') fa-arrow-up\n                            @else  fa-arrow-down\n                        @endif \"> </i></span>\n                    @endif\n                </a> </th>\n            <th>优秀</th>\n            <th>热门</th>\n            <th>私人</th>\n            <th>草稿</th>\n            <th>发布时间</th>\n            <th>操作 - <span>数据量：</span>【 {{ $lists->total() }} 】</th>\n        </tr>\n        </thead>\n        <tbody>\n        @forelse( $lists as $v )\n            <tr class=\"long-td\">\n                <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                <td>{{ str_limit($v->title, 20) }}</td>\n                <td> {{ str_limit($v->slug, 15) }}</td>\n                <td>{{ str_limit($v->description, 20) }}</td>\n                <td>{{ $v->vote_count }}</td>\n                <td> {{ $v->view_count }}</td>\n                <td> {{ $v->reply_count }}</td>\n                <td>\n                    <input type=\"number\" value=\"{{ $v->weight }}\" data-id=\"{{ $v->id }}\" data-column=\"weight\" data-table=\"questions\" data-msg=\"排序修改成功\" onchange=\"updateSort(this)\"  style=\"text-align:center;\" onkeyup=\"this.value=this.value.replace(/[^\\d]/g,'')\" class=\"form-control\">\n                </td>\n                <td>\n                    @if( $v->is_excellent == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_excellent\" data-table=\"questions\" data-msg=\"优秀\" data-todo=\"1\"\n                           data-cur=\"非优秀\" onclick=\"changeStatus(this)\"> 非优秀</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_excellent\" data-table=\"questions\" data-msg=\"非优秀\"\n                           data-todo=\"0\" data-cur=\"优秀\" onclick=\"changeStatus(this)\"> 优秀</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->is_hot == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_hot\" data-table=\"questions\" data-msg=\"热门\" data-todo=\"1\"\n                           data-cur=\"非热门\" onclick=\"changeStatus(this)\"> 非热门</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_hot\" data-table=\"questions\" data-msg=\"非热门\"\n                           data-todo=\"0\" data-cur=\"热门\" onclick=\"changeStatus(this)\"> 热门</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->only_owner_can_see == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"only_owner_can_see\" data-table=\"questions\" data-msg=\"私有\" data-todo=\"1\"\n                           data-cur=\"非私有\" onclick=\"changeStatus(this)\"> 非私有</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"only_owner_can_see\" data-table=\"questions\" data-msg=\"非私有\"\n                           data-todo=\"0\" data-cur=\"私有\" onclick=\"changeStatus(this)\"> 私有</i>\n                    @endif\n                </td>\n                <td>\n                    @if( $v->is_draft == 'no')\n                        <i class=\"fa fa-close text-navy change-status hover-point\" data-value=\"yes\" data-cv=\"no\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_draft\" data-table=\"questions\" data-msg=\"草稿\" data-todo=\"1\"\n                           data-cur=\"非草稿\" onclick=\"changeStatus(this)\"> 非草稿</i>\n                    @else\n                        <i class=\"fa fa-check text-navy change-status hover-point\" data-value=\"no\" data-cv=\"yes\"\n                           data-id=\"{{ $v->id }}\" data-column=\"is_draft\" data-table=\"questions\" data-msg=\"非草稿\"\n                           data-todo=\"0\" data-cur=\"草稿\" onclick=\"changeStatus(this)\"> 草稿</i>\n                    @endif\n\n                </td>\n                <td>{{ $v->published_at }}</td>\n                <td>\n                    <a href=\"{{ dashboardUrl('/question/'.$v->id.'/edit') }}\">\n                        <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                    </a>&nbsp;&nbsp;\n                    <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" target=\"_blank\" title=\"预览\"><span\n                                class=\"fa fa-eye\"></span>&nbsp;预览</a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                       data-name=\"{{ $v->title }}\" data-url=\"{{ dashboardUrl('/question/'.$v->id.'/delete') }}\">\n                        <i class=\"fa fa-trash-o\"></i> 删除\n                    </a>\n                </td>\n            </tr>\n        @empty\n            <tr>\n                <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n            </tr>\n        @endforelse\n        </tbody>\n    </table>\n    <div class=\"pull-right\">\n        {!! preg_replace(\"(<a[^>]*page[=|/](\\d+).+?>(.+?)<\\/a>)\",\"<a data-p=$1 href='javascript:void($1);'>$2</a>\",$lists->links()) !!}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    //分页\n    $('.pagination a').click(function () {\n        form = 'subForm';//表单id 全局变量\n        p = $(this).data('p');//当前分页\n        turl = \"/dashboard/question/ajaxQuestions\" + \"?page=\" + p;//url\n        ajaxList(form, turl);\n    });\n</script>"
  },
  {
    "path": "resources/views/dashboard/questions/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 问题添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\"\n                                       placeholder=\"问题标题\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  问题标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题分类：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"category_id\">\n                                        <option value=\"\">选择分类</option>\n                                        @foreach($catList as $v)\n                                            <option value=\"{{ $v->id }}\">{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\"></textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题标签：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple size=\"2\"\n                                            id=\"tags\" data-placeholder=\"点击选择问题标签\">\n                                        @foreach($tagList as $tag)\n                                            <option value=\"{{ $tag->id }}\">{{ $tag->tag }}</option>\n                                        @endforeach\n                                    </select>\n                                    <input type=\"hidden\" name=\"tags\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>问题标签，建议最多选择两个</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题相关属性：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple\n                                            id=\"attribute\" data-placeholder=\"点击选择问题相关属性\">\n                                        <option value=\"1\">优秀问题</option>\n                                        <option value=\"2\">热门问题</option>\n                                        <option value=\"3\">私人问题</option>\n                                        <option value=\"4\">草稿</option>\n                                    </select>\n                                    <input type=\"hidden\" name=\"attribute\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>优秀问题、热门问题(推荐)、私人问题(仅自己可见)、草稿</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">发布时间：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input class=\"form-control layer-date\" placeholder=\"YYYY-MM-DD hh:mm:ss\"\n                                       name=\"published_at\" time_plugin=\"published_at\">\n                                <label class=\"laydate-icon\"></label>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\"\n                                       value=\"50\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        spellChecker: false,\n        autosave: {\n            enabled: true,\n            delay: 2000,\n            unique_id: \"dashboard_question_create_content\"\n        },\n        element: document.getElementById(\"editor\"),\n        autoDownloadFontAwesome: true,\n        forceSync: true,\n        tabSize: 4,\n    });\n\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入问题标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"select[name=category_id]\").val(), '请选择问题分类') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入问题描述') == false) {\n            return false;\n        }\n        $(\"textarea[name=content]\").val(simplemde.value());\n        ajaxFormBtn(\"{{ dashboardUrl('/question/store') }}\", 'btnForm');\n    });\n\n\n    /*选择商品多选下拉框 ------------start */\n    //多选初始化\n    $(function () {\n        $(\"#tags\").chosen({\n            max_selected_options: 2,\n            no_results_text: '无匹配项',\n            display_selected_options: false\n        });\n    });\n    //获取选中的值\n    $('#attribute').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=attribute]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n    $('#tags').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=tags]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/questions/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 问题修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题标题：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"title\" value=\"{{ $info->title }}\"\n                                       placeholder=\"问题标题\">\n                                <input type=\"hidden\" name=\"slug\"  value=\"{{ $info->slug }}\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  问题标题</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题分类：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"category_id\">\n                                        <option value=\"\">选择分类</option>\n                                        @foreach($catList as $v)\n                                            <option value=\"{{ $v->id }}\"\n                                                    @if($info->category_id == $v->id) selected @endif>{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">内容：</label>\n                            <div class=\"input-group col-sm-8\">\n                                <textarea name=\"content\" id=\"editor\" class=\"form-control\"\n                                          placeholder=\"内容\">{{ json_decode($info->content)->raw }}</textarea>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题标签：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple size=\"2\"\n                                            id=\"tags\" data-placeholder=\"点击选择问题标签\">\n                                        @foreach($tagList as $tag)\n                                            <option value=\"{{ $tag->id }}\"\n                                                    @if(in_array($tag->id,$tags)) selected @endif>{{ $tag->tag }}</option>\n                                        @endforeach\n                                    </select>\n                                    <input type=\"hidden\" name=\"tags\" value=\"{{ implode(',', $tags) }}\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>问题标签，建议最多选择两个</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">问题相关属性：</label>\n                            <div class=\"form-group\">\n                                <div class=\"col-md-4\">\n                                    <select class=\"form-control m-b chosen-select\" multiple\n                                            id=\"attribute\" data-placeholder=\"点击选择问题相关属性\">\n                                        <option value=\"1\" @if($info->is_excellent == 'yes') selected @endif >优秀问题\n                                        </option>\n                                        <option value=\"2\" @if($info->is_hot == 'yes') selected @endif>热门问题</option>\n                                        <option value=\"3\" @if($info->only_owner_can_see == 'yes') selected @endif>私人问题\n                                        </option>\n                                        <option value=\"4\" @if($info->is_draft == 'yes') selected @endif>草稿</option>\n                                    </select>\n                                    <input type=\"hidden\" name=\"attribute\" value=\"{{ $attribute }}\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>优秀问题、热门问题(推荐)、私人问题(仅自己可见)、草稿</span>\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">发布时间：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input class=\"form-control layer-date\" time_plugin=\"start_time\" placeholder=\"请填写发布时间\"\n                                       name=\"published_at\" value=\"{{ $info->published_at }}\">\n                                <label class=\"laydate-icon\"></label>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">权重：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"number\" class=\"form-control\" name=\"weight\" value=\"{{ $info->weight }}\"\n                                       placeholder=\"0\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  权重，关系到排序</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                            class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n\n    /*Markdown ------------start */\n    var simplemde = new SimpleMDE({\n        spellChecker: false,\n        autosave: {\n            enabled: true,\n            delay: 2000,\n            unique_id: \"dashboard_question_edit_content{{ $info->id . '_' . str_slug($info->update_at)}}\"\n        },\n        element: document.getElementById(\"editor\"),\n        forceSync: true,\n        tabSize: 4,\n    });\n\n    {{--    simplemde.value({{$info->content }});--}}\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=title]\").val(), '请输入问题标题') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"select[name=category_id]\").val(), '请选择问题分类') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入问题描述') == false) {\n            return false;\n        }\n        $(\"textarea[name=content]\").val(simplemde.value());\n        ajaxFormBtn(\"{{ dashboardUrl('/question/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n\n    /*选择商品多选下拉框 ------------start */\n    //多选初始化\n    $(function () {\n        $(\"#tags\").chosen({\n            max_selected_options: 2,\n            no_results_text: '无匹配项',\n            display_selected_options: false\n        });\n    });\n    //获取选中的值\n    $('#attribute').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=attribute]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n    $('#tags').on('change', function (e, params) {\n        var data = '';\n        $(\"input[name=tags]\").val($(this).val());\n        $('.chosen-choices li a').each(function (index, el) {\n            if (index == 0) {\n                data += $(this).text();\n            } else {\n                data += ',' + $(this).text();\n            }\n        });\n\n    });\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/questions/question-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>问题列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <div style=\"margin-bottom:20px;\" class=\"row content-tabs\">\n                        <div style=\"text-align:right\">\n                            <a class=\"btn btn-primary\" href=\"{{ dashboardUrl('/question/create') }}\">添加问题</a>\n                        </div>\n                        <div style=\"text-align:center;font-size:1.2em; margin-top:-40px; font-size:14px; font-weight:bold;\">\n                            所有问题\n                        </div>\n                        <button onclick=\"window.history.go(-1);\" class=\"roll-nav roll-left J_tabLeft\"><i\n                                    class=\"fa fa-backward\"></i></button>\n                    </div>\n\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"cat_id\">\n                                        <option value=\"\">所属分类</option>\n                                        @foreach($category_list as $v)\n                                            <option value=\"{{ $v->id }}\">{{ $v->name }}</option>\n                                        @endforeach\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_draft\">\n                                        <option value=\"\">是否草稿</option>\n                                        <option value=\"no\">非草稿</option>\n                                        <option value=\"yes\">草稿</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_excellent\">\n                                        <option value=\"\">是否优秀</option>\n                                        <option value=\"no\">非优秀</option>\n                                        <option value=\"yes\">优秀</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"is_hot\">\n                                        <option value=\"\">是否热门</option>\n                                        <option value=\"no\">非热门</option>\n                                        <option value=\"yes\">热门</option>\n                                    </select>\n                                </div>\n                                <div class=\"col-sm-1\">\n                                    <select class=\"form-control m-b chosen-select\" name=\"only_owner_can_see\">\n                                        <option value=\"\">是否私人</option>\n                                        <option value=\"no\">非私人</option>\n                                        <option value=\"yes\">私人</option>\n                                    </select>\n                                </div>\n                                <input type=\"hidden\" name=\"order\" value=\"\">\n                                <input type=\"hidden\" name=\"sort\" value=\"asc\">\n                                <div class=\"col-sm-2\">\n                                    <div class=\"input-group\">\n                                        <input type=\"text\" class=\"form-control\" name=\"keywords\" value=\"\"\n                                               placeholder=\"输入问题标题\"/>\n                                        <span class=\"input-group-btn\">\n                                        <button type=\"submit\"\n                                                onclick=\"ajaxList('subForm','/dashboard/question/ajaxQuestions')\"\n                                                class=\"btn btn-primary\"><i class=\"fa fa-search\"></i> 搜索</button>\n                                    </span>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div id=\"ajax_return\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- 加载动画 -->\n<div class=\"spiner-example\">\n    <div class=\"sk-spinner sk-spinner-three-bounce\">\n        <div class=\"sk-bounce1\"></div>\n        <div class=\"sk-bounce2\"></div>\n        <div class=\"sk-bounce3\"></div>\n    </div>\n</div>\n<div class=\"zTreeDemoBackground left\" style=\"display: none;float: left;margin-left:-50px\" id=\"role\">\n    <input type=\"hidden\" id=\"nodeid\">\n    <div class=\"form-group\">\n        <div class=\"col-sm-5 col-sm-offset-2\">\n            <ul id=\"treeType\" class=\"ztree\"></ul>\n        </div>\n    </div>\n    <div class=\"row cl\">\n        <div class=\"col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3\">\n            <input type=\"button\" value=\"提交\" class=\"btn btn-primary\" id=\"postform\"/>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n<script type=\"text/javascript\">\n    //第一页\n    $(document).ready(function () {\n        form = 'subForm';//表单id 全局变量\n        p = 1;//当前分页\n        turl = '/dashboard/question/ajaxQuestions?page=' + p;//url\n        ajaxList(form, turl);\n    });\n    // 点击排序\n    function ajaxSort(field)\n    {\n        var sort =$(\"input[name=sort]\").val();\n        $(\"input[name='order']\").val(field);\n        if(sort=='asc'){\n            $(\"input[name=sort]\").val('desc');\n        }else{\n            $(\"input[name=sort]\").val('asc');\n        }\n        ajaxList('subForm',turl);\n    }\n</script>\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/roles/ajax-role-list.blade.php",
    "content": "<div class=\"table-responsive \">\n    <table class=\"table table-bordered table-hover\">\n        <thead>\n        <tr class=\"long-tr\">\n            <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>\n            <th>名称</th>\n            <th>显示名称</th>\n            <th>描述</th>\n            <th>添加时间</th>\n            <th>操作</th>\n        </tr>\n        </thead>\n        <tbody>\n        @forelse( $lists as $v )\n            <tr class=\"long-td\">\n                <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                <td>{{ $v->name }}</td>\n                <td>{{ $v->display_name }}</td>\n                <td>{{ $v->description }}</td>\n                <td>{{ $v->created_at }}</td>\n                <td>\n                    <a href=\"{{ dashboardUrl('/role/'.$v->id.'/edit') }}\" class=\"btn btn-primary btn-xs\">\n                        <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                    </a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\"  onclick=\"giveRolePermissions({{ $v->id }})\" title=\"分配权限\"><span class=\"fa fa-key\"></span>&nbsp;权限</a>&nbsp;\n                    <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                       data-name=\"{{ $v->name }}\" data-url=\"{{ dashboardUrl('/role/'.$v->id.'/delete') }}\">\n                        <i class=\"fa fa-trash-o\"></i> 删除\n                    </a>\n                </td>\n            </tr>\n        @empty\n            <tr>\n                <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n            </tr>\n        @endforelse\n        </tbody>\n    </table>\n    <div class=\"pull-right\">\n        {!! preg_replace(\"(<a[^>]*page[=|/](\\d+).+?>(.+?)<\\/a>)\",\"<a data-p=$1 href='javascript:void($1);'>$2</a>\",$lists->links()) !!}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    //分页\n    $('.pagination a').click(function () {\n        form = 'subForm';//表单id 全局变量\n        p = $(this).data('p');//当前分页\n        turl = \"/dashboard/role/ajaxRoles\" + \"?page=\" + p;//url\n        ajaxList(form, turl);\n    });\n\n    /*管理员-角色-添加*/  //分配权限\n    function giveRolePermissions(id){\n        $(\"#nodeid\").val(id);\n        index2 = layer.load(0, {shade: false});\n        $.getJSON(\"{{ dashboardUrl('/role/permissions') }}\", {'type' : 'post', 'id' : id}, function(res){\n            layer.close(index2);\n            if(res.status == 1){\n                zNodes = JSON.parse(res.data);\n                index = layer.open({\n                    type: 1,\n                    area:['300px', '400px'],\n                    title:'角色分配',\n                    skin: 'layui-layer-demo',\n                    content: $('#role')\n                });\n\n                layer.style(index, {\n                    top: '5%'\n                });\n                var setting = {\n                    check:{\n                        enable:true\n                    },\n                    data: {\n                        simpleData: {\n                            enable: true\n                        }\n                    }\n                };\n                $.fn.zTree.init($(\"#treeType\"), setting, zNodes);\n                var zTree = $.fn.zTree.getZTreeObj(\"treeType\");\n                zTree.expandAll(true);\n\n            }else{\n                msg(res.msg);\n            }\n        });\n    }\n    //确认分配权限\n    $(\"#postform\").click(function(){\n        var zTree = $.fn.zTree.getZTreeObj(\"treeType\");\n        var nodes = zTree.getCheckedNodes(true);\n        var NodeString = '';\n        $.each(nodes, function (n, value) {\n            if(n>0){\n                NodeString += ',';\n            }\n            NodeString += value.id;\n        });\n        var id = $(\"#nodeid\").val();\n        $.post(\"{{ dashboardUrl('/role/permissions') }}\", {'type' : 'give', 'id' : id, 'data' : NodeString}, function(res){\n            layer.close(index);\n            if(res.status == 1){\n                msg(res.msg,{icon:1,time:1500,shade: 0.1});\n            }else{\n                msg(res.msg);\n            }\n        }, 'json')\n    })\n</script>"
  },
  {
    "path": "resources/views/dashboard/roles/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>角色添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 角色添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">角色名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\"\n                                       placeholder=\"角色名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  角色名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">显示名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"display_name\"\n                                       placeholder=\"显示名称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入角色名称') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入角色描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/role/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/roles/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>修改角色</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 修改角色</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">角色名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"name\" value=\"{{ $info->name }}\"\n                                       placeholder=\"角色名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  角色名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">显示名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"display_name\"\n                                       value=\"{{ $info->display_name }}\"\n                                       placeholder=\"显示名称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\">{{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=name]\").val(), '请输入角色名称') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入角色描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/role/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/roles/role-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>角色列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5>角色列表</h5>\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2\">\n                                    <div class=\"input-group\">\n                                        <input type=\"text\" class=\"form-control\" name=\"keywords\" value=\"\"\n                                               placeholder=\"输入角色名称\"/>\n                                        <span class=\"input-group-btn\">\n                                        <button type=\"submit\" onclick=\"ajaxList('subForm','/dashboard/role/ajaxRoles')\"\n                                                class=\"btn btn-primary\"><i class=\"fa fa-search\"></i> 搜索</button>\n                                    </span>\n                                    </div>\n                                </div>\n                                <div class=\"col-sm-2 pull-right\">\n                                    <div class=\"btn-group pull-right\" role=\"group\" style=\"clear: both\">\n                                        <a href=\"{{ dashboardUrl('/role/create') }}\"\n                                           class=\"btn btn-outline btn-default \"><i class=\"fa fa-plus\"></i> </a>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div id=\"ajax_return\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- 加载动画 -->\n<div class=\"spiner-example\">\n    <div class=\"sk-spinner sk-spinner-three-bounce\">\n        <div class=\"sk-bounce1\"></div>\n        <div class=\"sk-bounce2\"></div>\n        <div class=\"sk-bounce3\"></div>\n    </div>\n</div>\n<div class=\"zTreeDemoBackground left\" style=\"display: none;float: left;margin-left: -50px\" id=\"role\">\n    <input type=\"hidden\" id=\"nodeid\">\n    <div class=\"form-group\">\n        <div class=\"col-sm-5 col-sm-offset-2\">\n            <ul id=\"treeType\" class=\"ztree\"></ul>\n        </div>\n    </div>\n    <div class=\"row cl\">\n        <div class=\"col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3\">\n            <input type=\"button\" value=\"提交\" class=\"btn btn-primary\" id=\"postform\"/>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n<script type=\"text/javascript\">\n    //第一页\n    $(document).ready(function () {\n        form = 'subForm';//表单id 全局变量\n        p = 1;//当前分页\n        turl = '/dashboard/role/ajaxRoles?page=' + p;//url\n        ajaxList(form, turl);\n    });\n</script>\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/tags/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>标签添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 标签添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标签名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"tag\"\n                                       placeholder=\"标签名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标签名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\"\n                                       placeholder=\"别名\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"></textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <label class=\"col-sm-3 control-label\">样式：</label>\n                                <div class=\"input-group col-sm-4\">\n                                    <input type=\"text\" class=\"form-control\" name=\"style\"\n                                           placeholder=\"violet\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                                </div>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=tag]\").val(), '请输入标签名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入标签描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/tag/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/tags/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>标签修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 标签修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">标签名称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"tag\" value=\"{{ $info->tag }}\"\n                                       placeholder=\"标签名称\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  标签名称</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">别名：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"slug\" value=\"{{ $info->slug }}\"\n                                       placeholder=\"别名\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed \"></div>\n                        <div class=\"form-group avalue\">\n                            <label class=\"col-sm-3 control-label\">描述：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <textarea type=\"text\" rows=\"5\" name=\"description\" class=\"form-control\"\n                                          placeholder=\"描述\"> {{ $info->description }}</textarea>\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  256个字符以内</span>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <label class=\"col-sm-3 control-label\">样式：</label>\n                                <div class=\"input-group col-sm-4\">\n                                    <input type=\"text\" class=\"form-control\" name=\"style\" value=\"{{ $info->style }}\"\n                                           placeholder=\"violet\">\n                                    <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>\n                                    purple、violet、red、orange、olive、green、teal、blue、black</span>\n                                </div>\n                            </div>\n                            <div class=\"hr-line-dashed\"></div>\n                            <div class=\"form-group\">\n                                <div class=\"col-sm-4 col-sm-offset-3\">\n                                    <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                    <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i\n                                                class=\"fa fa-close\"></i>\n                                        返回</a>\n                                </div>\n                            </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n\n        if (isEmpty('', $(\"input[name=tag]\").val(), '请输入标签名称') == false) {\n            return false;\n        }\n        if (prexRule(/^[a-z0-9_-]{3,40}$/, $(\"input[name=slug]\").val(), '别名只能由 3-40 位的数字、字母、下划线组成') == false) {\n            return false;\n        }\n        if (isEmpty('', $(\"textarea[name=description]\").val(), '请输入标签描述') == false) {\n            return false;\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/tag/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/tags/tag-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>标签列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5>标签列表</h5>\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2 pull-right\">\n                                    <div class=\"btn-group pull-right\" role=\"group\" style=\"clear: both\">\n                                        <a href=\"{{ dashboardUrl('/tag/create') }}\"\n                                           class=\"btn btn-outline btn-default \"><i class=\"fa fa-plus\"></i> </a>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"table-responsive \">\n                            <table class=\"table table-bordered table-hover\">\n                                <thead>\n                                <tr class=\"long-tr\">\n                                    <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>\n                                    <th>名称(tag)</th>\n                                    <th>别名</th>\n                                    <th>描述</th>\n                                    <th>添加时间</th>\n                                    <th>操作</th>\n                                </tr>\n                                </thead>\n                                <tbody>\n                                @forelse( $lists as $v )\n                                    <tr class=\"long-td\">\n                                        <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                                        <td>{{ $v->tag }}</td>\n                                        <td>{{ $v->slug }}</td>\n                                        <td>{{ $v->description }}</td>\n                                        <td>{{ $v->created_at }}</td>\n                                        <td>\n                                            <a href=\"{{ dashboardUrl('/tag/'.$v->id.'/edit') }}\" class=\"btn btn-primary btn-xs\">\n                                                <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                                            </a>&nbsp;&nbsp;\n                                            <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                                               data-name=\"{{ $v->tag }}\" data-url=\"{{ dashboardUrl('/tag/'.$v->id.'/delete') }}\">\n                                                <i class=\"fa fa-trash-o\"></i> 删除\n                                            </a>\n                                        </td>\n                                    </tr>\n                                @empty\n                                    <tr>\n                                        <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n                                    </tr>\n                                @endforelse\n                                </tbody>\n                            </table>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n</body>\n"
  },
  {
    "path": "resources/views/dashboard/users/ajax-user-list.blade.php",
    "content": "<div class=\"table-responsive \">\n    <table class=\"table table-bordered table-hover\">\n        <thead>\n        <tr class=\"long-tr\">\n            <th><input type=\"checkbox\" onclick=\"checkAll(this)\">ID</th>\n            <th>账号</th>\n            <th>头像</th>\n            <th>邮箱</th>\n            <th>注册源</th>\n            <th>后台管理员</th>\n            <th>注册时间</th>\n            <th>最近活跃时间</th>\n            <th>操作</th>\n        </tr>\n        </thead>\n        <tbody>\n        @forelse( $lists as $v )\n            <tr class=\"long-td\">\n                <td><input type=\"checkbox\" name=\"ids[]\" value=\"{{ $v->id }}\">{{ $v->id }}</td>\n                <td>{{ $v->user_name }}</td>\n                <td>\n                    <a>\n                        <img src=\"{{  $v->avatar }}\" class=\"img-circle fancybox\" href=\"{{ $v->avatar }}\" title=\"{{ $v->user_name }}\" style=\"width:35px;height:35px\"\n                             onerror=\"this.src='/assets/dashboard/images/head_default.gif'\"/>\n                    </a>\n                </td>\n                <td>{{ $v->email }}</td>\n                <td>{{ $v->register_source }}</td>\n                <td> {{ $v->is_admin }}</td>\n                <td>{{ $v->created_at }}</td>\n                <td>{{ $v->last_actived_at }}</td>\n                <td>\n                    <a href=\"{{ dashboardUrl('/user/'.$v->id.'/edit') }}\" class=\"btn btn-primary btn-xs\">\n                        <i class=\"fa fa-pencil-square-o\"></i> 编辑\n                    </a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\"  onclick=\"giveUserRoles({{ $v->id }})\" title=\"分配角色\"><span class=\"fa fa-key\"></span>&nbsp;角色</a>&nbsp;&nbsp;\n                    <a href=\"javascript:;\" class=\"btn btn-danger btn-xs\" onclick=\"delBtn(this)\" data-id=\"0\"\n                       data-name=\"{{ $v->user_name }}\" data-url=\"{{ dashboardUrl('/user/'.$v->id.'/delete') }}\">\n                        <i class=\"fa fa-trash-o\"></i> 删除\n                    </a>\n                </td>\n            </tr>\n        @empty\n            <tr>\n                <td colspan=\"20\" style=\"padding-top:10px;padding-bottom:10px;font-size:16px;text-align:center\">暂无数据</td>\n            </tr>\n        @endforelse\n        </tbody>\n    </table>\n    <div class=\"pull-right\">\n        {!! preg_replace(\"(<a[^>]*page[=|/](\\d+).+?>(.+?)<\\/a>)\",\"<a data-p=$1 href='javascript:void($1);'>$2</a>\",$lists->links()) !!}\n    </div>\n</div>\n<script type=\"text/javascript\">\n    //分页\n    $('.pagination a').click(function () {\n        form = 'subForm';//表单id 全局变量\n        p = $(this).data('p');//当前分页\n        turl = \"/dashboard/user/ajaxUsers\" + \"?page=\" + p;//url\n        ajaxList(form, turl);\n    });\n\n    /*管理员-角色-添加*/  //分配权限\n    function giveUserRoles(id){\n        $(\"#nodeid\").val(id);\n        index2 = layer.load(0, {shade: false});\n        $.getJSON(\"{{ dashboardUrl('/user/roles') }}\", {'type' : 'post', 'id' : id}, function(res){\n            layer.close(index2);\n            if(res.status == 1){\n                zNodes = JSON.parse(res.data);\n                index = layer.open({\n                    type: 1,\n                    area:['300px', '400px'],\n                    title:'角色分配',\n                    skin: 'layui-layer-demo',\n                    content: $('#role')\n                });\n\n                layer.style(index, {\n                    top: '5%'\n                });\n                var setting = {\n                    check:{\n                        enable:true\n                    },\n                    data: {\n                        simpleData: {\n                            enable: true\n                        }\n                    }\n                };\n                $.fn.zTree.init($(\"#treeType\"), setting, zNodes);\n                var zTree = $.fn.zTree.getZTreeObj(\"treeType\");\n                zTree.expandAll(true);\n\n            }else{\n                msg(res.msg);\n            }\n        });\n    }\n    //确认分配权限\n    $(\"#postform\").click(function(){\n        var zTree = $.fn.zTree.getZTreeObj(\"treeType\");\n        var nodes = zTree.getCheckedNodes(true);\n        var NodeString = '';\n        $.each(nodes, function (n, value) {\n            if(n>0){\n                NodeString += ',';\n            }\n            NodeString += value.id;\n        });\n        var id = $(\"#nodeid\").val();\n        $.post(\"{{ dashboardUrl('/user/roles') }}\", {'type' : 'give', 'id' : id, 'data' : NodeString}, function(res){\n            layer.close(index);\n            if(res.status == 1){\n                msg(res.msg,{icon:1,time:1500,shade: 0.1});\n            }else{\n                msg(res.msg);\n            }\n        }, 'json')\n    })\n</script>"
  },
  {
    "path": "resources/views/dashboard/users/create.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>用户添加</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 用户添加</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\" accept-charset=\"UTF-8\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">账号：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"user_name\"\n                                       placeholder=\"账号\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  用户名英文或数字组成,将作为登录账号</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">昵称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"nickname\"\n                                       placeholder=\"昵称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">邮箱：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"email\"\n                                       placeholder=\"邮箱\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i> 必填</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">密码：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"password\" class=\"form-control\" name=\"password\" value=\"\" placeholder=\"密码\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i> 登录密码。由6-18位之间的数字、字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">确认密码：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"password\" class=\"form-control\" name=\"password_confirmation\"\n                                       placeholder=\"确认密码\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">是否是后台管理员：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <div class=\"radio i-checks\">\n                                    <input type=\"radio\" name='is_admin' value=\"yes\"/>是&nbsp;&nbsp;\n                                    <input type=\"radio\" name='is_admin' value=\"no\" checked/>否\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n        if (prexRule(/^[a-zA-Z0-9]+$/, $(\"input[name=user_name]\").val(), '账号只能由数字和英文字母组成') == false) {\n            return false;\n        }\n        if (prexRule(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, $(\"input[name=email]\").val(), '请输入正确的邮箱') == false) {\n            return false;\n        }\n        var password = $(\"input[name=password]\").val();\n        var password_c = $(\"input[name=password_confirmation]\").val();\n        if (prexRule(/^[a-z0-9_-]{6,18}$/, password, '密码只能是6-18位之间的数字、字母、下划线') == false) {\n            return false;\n        }\n        if (!password || $.trim(password) != $.trim(password_c)) {\n            layer.msg('两次输入的密码不一致', {icon: 5, time: 2000}, function (index) {\n                layer.close(index);\n            });\n            return false;\n        }\n\n        ajaxFormBtn(\"{{ dashboardUrl('/user/store') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/users/edit.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>用户修改</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5 class=\"fa fa-bars\"> 用户修改</h5>\n                    <div class=\"ibox-tools\">\n                        <a href=\"javascript:history.go(-1)\" title=\"返回\">\n                            <i class=\"fa fa-reply\"> 返回</i>\n                        </a>\n                    </div>\n                </div>\n                <div class=\"ibox-content\">\n                    <form class=\"form-horizontal m-t\" id=\"btnForm\" accept-charset=\"UTF-8\">\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">账号：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"user_name\"\n                                       placeholder=\"账号\" value=\"{{ $info->user_name }}\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i>  用户名英文或数字组成,将作为登录账号</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">昵称：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"nickname\" value=\"{{ $info->nickname }}\"\n                                placeholder=\"昵称\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">邮箱：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"text\" class=\"form-control\" name=\"email\" value=\"{{ $info->email }}\"\n                                placeholder=\"邮箱\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i> 必填</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">密码：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"password\" class=\"form-control\" name=\"password\" value=\"\" placeholder=\"密码\">\n                                <span class=\"help-block m-b-none\"><i class=\"fa fa-info-circle\"></i> 登录密码。由6-18位之间的数字、字母、下划线组成</span>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">确认密码：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <input type=\"password\" class=\"form-control\" name=\"password_confirmation\"\n                                       placeholder=\"确认密码\">\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <label class=\"col-sm-3 control-label\">是否是后台管理员：</label>\n                            <div class=\"input-group col-sm-4\">\n                                <div class=\"radio i-checks\">\n                                    <input type=\"radio\" name='is_admin' value=\"yes\"\n                                           @unless($info->is_admin == 'no') checked @endunless/>是&nbsp;&nbsp;\n                                    <input type=\"radio\" name='is_admin' value=\"no\"\n                                           @unless($info->is_admin == 'yes') checked @endunless/>否\n                                </div>\n                            </div>\n                        </div>\n                        <div class=\"hr-line-dashed\"></div>\n                        <div class=\"form-group\">\n                            <div class=\"col-sm-4 col-sm-offset-3\">\n                                <a class=\"btn btn-primary saveBtn\" id=\"saveBtn\"><i class=\"fa fa-save\"></i> 保存</a>&nbsp;&nbsp;&nbsp;\n                                <a class=\"btn btn-danger\" href=\"javascript:history.go(-1);\"><i class=\"fa fa-close\"></i>\n                                    返回</a>\n                            </div>\n                        </div>\n                    </form>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n\n<script>\n    /*表单提交*/\n    $(\"#saveBtn\").click(function () {\n        if (prexRule(/^[a-zA-Z0-9]+$/, $(\"input[name=user_name]\").val(), '账号只能由数字和英文字母组成') == false) {\n            return false;\n        }\n        if (prexRule(/^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/, $(\"input[name=email]\").val(), '请输入正确的邮箱') == false) {\n            return false;\n        }\n        var password = $(\"input[name=password]\").val();\n        var password_c = $(\"input[name=password_confirmation]\").val();\n        if (password || password_c) {\n            if (prexRule(/^[a-z0-9_-]{6,18}$/, password, '密码只能是6-18位之间的数字、字母、下划线') == false) {\n                return false;\n            }\n            if (!password || $.trim(password) != $.trim(password_c)) {\n                layer.msg('两次输入的密码不一致', {icon: 5, time: 2000}, function (index) {\n                    layer.close(index);\n                });\n                return false;\n            }\n        }\n        ajaxFormBtn(\"{{ dashboardUrl('/user/'.$info->id.'/update') }}\", 'btnForm');\n    });\n\n</script>\n</body>\n</html>"
  },
  {
    "path": "resources/views/dashboard/users/user-list.blade.php",
    "content": "@include('dashboard.layouts.partials.header')\n<title>用户列表</title>\n</head>\n<body class=\"gray-bg\">\n<div class=\"wrapper wrapper-content animated fadeInRight\">\n    <div class=\"row\">\n        <div class=\"col-sm-12\">\n            <div class=\"ibox float-e-margins\">\n                <div class=\"ibox-title\">\n                    <h5>用户列表</h5>\n                    <div class=\"ibox-content\">\n                        <form action=\"\" id=\"subForm\" onsubmit=\"return false\" method=\"post\">\n                            <div class=\"row\">\n                                <div class=\"col-sm-2\" >\n                                    <div class=\"input-group\">\n                                        <input type=\"text\"  class=\"form-control\" name=\"keywords\" value=\"\" placeholder=\"输入手机号或邮箱\" />\n                                        <span class=\"input-group-btn\">\n                                        <button type=\"submit\"  onclick=\"ajaxList('subForm','/dashboard/user/ajaxUsers')\" class=\"btn btn-primary\"><i class=\"fa fa-search\"></i> 搜索</button>\n                                    </span>\n                                    </div>\n                                </div>\n                                <div class=\"col-sm-2 pull-right\">\n                                    <div class=\"btn-group pull-right\"  role=\"group\" style=\"clear: both\">\n                                        <a href=\"{{ dashboardUrl('/user/create') }}\" class=\"btn btn-outline btn-default \"><i class=\"fa fa-plus\"></i> </a>\n                                    </div>\n                                </div>\n                            </div>\n                        </form>\n\n                        <div class=\"hr-line-dashed\"></div>\n                        <div id=\"ajax_return\"></div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>\n<!-- 加载动画 -->\n<div class=\"spiner-example\">\n    <div class=\"sk-spinner sk-spinner-three-bounce\">\n        <div class=\"sk-bounce1\"></div>\n        <div class=\"sk-bounce2\"></div>\n        <div class=\"sk-bounce3\"></div>\n    </div>\n</div>\n<div class=\"zTreeDemoBackground left\" style=\"display: none;float: left;margin-left:-50px\" id=\"role\">\n    <input type=\"hidden\" id=\"nodeid\">\n    <div class=\"form-group\">\n        <div class=\"col-sm-5 col-sm-offset-2\">\n            <ul id=\"treeType\" class=\"ztree\"></ul>\n        </div>\n    </div>\n    <div class=\"row cl\">\n        <div class=\"col-xs-8 col-sm-9 col-xs-offset-4 col-sm-offset-3\">\n            <input type=\"button\" value=\"提交\" class=\"btn btn-primary\" id=\"postform\"/>\n        </div>\n    </div>\n</div>\n@include('dashboard.layouts.partials.footer')\n<script type=\"text/javascript\">\n    //第一页\n    $(document).ready(function(){\n        form = 'subForm';//表单id 全局变量\n        p = 1;//当前分页\n        turl = '/dashboard/user/ajaxUsers?page='+p;//url\n        ajaxList(form,turl);\n    });\n</script>\n</body>\n"
  },
  {
    "path": "resources/views/errors/403.blade.php",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\t<title>Error 403 - Forbidden</title>\n\t<meta name=\"viewport\" content=\"width=device-width\">\n\t<style type=\"text/css\">\n\n\t\tarticle, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }\n\t\taudio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }\n\t\taudio:not([controls]) { display: none; }\n\t\t[hidden] { display: none; }\n\t\thtml { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n\t\thtml, button, input, select, textarea { font-family: sans-serif; color: #222; }\n\t\tbody { margin: 0; font-size: 1em; line-height: 1.4; }\n\t\t::-moz-selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\t::selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\ta { color: #00e; }\n\t\ta:visited { color: #551a8b; }\n\t\ta:hover { color: #06e; }\n\t\ta:focus { outline: thin dotted; }\n\t\ta:hover, a:active { outline: 0; }\n\t\tabbr[title] { border-bottom: 1px dotted; }\n\t\tb, strong { font-weight: bold; }\n\t\tblockquote { margin: 1em 40px; }\n\t\tdfn { font-style: italic; }\n\t\thr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }\n\t\tins { background: #ff9; color: #000; text-decoration: none; }\n\t\tmark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }\n\t\tpre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }\n\t\tpre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }\n\t\tq { quotes: none; }\n\t\tq:before, q:after { content: \"\"; content: none; }\n\t\tsmall { font-size: 85%; }\n\t\tsub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n\t\tsup { top: -0.5em; }\n\t\tsub { bottom: -0.25em; }\n\t\tul, ol { margin: 1em 0; padding: 0 0 0 40px; }\n\t\tdd { margin: 0 0 0 40px; }\n\t\tnav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }\n\t\timg { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }\n\t\tsvg:not(:root) { overflow: hidden; }\n\t\tfigure { margin: 0; }\n\t\tform { margin: 0; }\n\t\tfieldset { border: 0; margin: 0; padding: 0; }\n\t\tlabel { cursor: pointer; }\n\t\tlegend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }\n\t\tbutton, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }\n\t\tbutton, input { line-height: normal; }\n\t\tbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }\n\t\tbutton[disabled], input[disabled] { cursor: default; }\n\t\tinput[type=\"checkbox\"], input[type=\"radio\"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }\n\t\tinput[type=\"search\"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }\n\t\tinput[type=\"search\"]::-webkit-search-decoration, input[type=\"search\"]::-webkit-search-cancel-button { -webkit-appearance: none; }\n\t\tbutton::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }\n\t\ttextarea { overflow: auto; vertical-align: top; resize: vertical; }\n\t\tinput:valid, textarea:valid {  }\n\t\tinput:invalid, textarea:invalid { background-color: #f0dddd; }\n\t\ttable { border-collapse: collapse; border-spacing: 0; }\n\t\ttd { vertical-align: top; }\n\n\t\tbody\n\t\t{\n\t\t\tfont-family:'Droid Sans', sans-serif;\n\t\t\tfont-size:10pt;\n\t\t\tcolor:#555;\n\t\t\tline-height: 25px;\n\t\t}\n\n\t\t.wrapper\n\t\t{\n\t\t\twidth:760px;\n\t\t\tmargin:0 auto 5em auto;\n\t\t}\n\n\t\t.main\n\t\t{\n\t\t\toverflow:hidden;\n\t\t}\n\n\t\t.error-spacer\n\t\t{\n\t\t\theight:4em;\n\t\t}\n\n\t\ta, a:visited\n\t\t{\n\t\t\tcolor:#2972A3;\n\t\t}\n\n\t\ta:hover\n\t\t{\n\t\t\tcolor:#72ADD4;\n\t\t}\n\t</style>\n</head>\n<body>\n\t<div class=\"wrapper\">\n\t\t<div class=\"error-spacer\"></div>\n\t\t<div role=\"main\" class=\"main\">\n\t\t\t<?php $messages = array('We need a map.', 'I think we\\'re lost.', 'We took a wrong turn.'); ?>\n\n\t\t\t<h1>Unn</h1>\n\n\t\t\t<h2>Server Error: 403 (Forbidden)</h2>\n\n\t\t\t<hr>\n\n\t\t\t<h3>What does this mean?</h3>\n\n\t\t\t<p>\n\t\t\t\tWe couldn't find the page you requested on our servers. We're really sorry\n\t\t\t\tabout that. It's our fault, not yours. We'll work hard to get this page\n\t\t\t\tback online as soon as possible.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tPerhaps you would like to go to our <a href=\"{{{ URL::to('/') }}}\">home page</a>?\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/errors/404.blade.php",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\t<title>Error 404 - Not Found</title>\n\t<meta name=\"viewport\" content=\"width=device-width\">\n\t<style type=\"text/css\">\n\n\t\tarticle, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }\n\t\taudio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }\n\t\taudio:not([controls]) { display: none; }\n\t\t[hidden] { display: none; }\n\t\thtml { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n\t\thtml, button, input, select, textarea { font-family: sans-serif; color: #222; }\n\t\tbody { margin: 0; font-size: 1em; line-height: 1.4; }\n\t\t::-moz-selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\t::selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\ta { color: #00e; }\n\t\ta:visited { color: #551a8b; }\n\t\ta:hover { color: #06e; }\n\t\ta:focus { outline: thin dotted; }\n\t\ta:hover, a:active { outline: 0; }\n\t\tabbr[title] { border-bottom: 1px dotted; }\n\t\tb, strong { font-weight: bold; }\n\t\tblockquote { margin: 1em 40px; }\n\t\tdfn { font-style: italic; }\n\t\thr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }\n\t\tins { background: #ff9; color: #000; text-decoration: none; }\n\t\tmark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }\n\t\tpre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }\n\t\tpre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }\n\t\tq { quotes: none; }\n\t\tq:before, q:after { content: \"\"; content: none; }\n\t\tsmall { font-size: 85%; }\n\t\tsub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n\t\tsup { top: -0.5em; }\n\t\tsub { bottom: -0.25em; }\n\t\tul, ol { margin: 1em 0; padding: 0 0 0 40px; }\n\t\tdd { margin: 0 0 0 40px; }\n\t\tnav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }\n\t\timg { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }\n\t\tsvg:not(:root) { overflow: hidden; }\n\t\tfigure { margin: 0; }\n\t\tform { margin: 0; }\n\t\tfieldset { border: 0; margin: 0; padding: 0; }\n\t\tlabel { cursor: pointer; }\n\t\tlegend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }\n\t\tbutton, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }\n\t\tbutton, input { line-height: normal; }\n\t\tbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }\n\t\tbutton[disabled], input[disabled] { cursor: default; }\n\t\tinput[type=\"checkbox\"], input[type=\"radio\"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }\n\t\tinput[type=\"search\"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }\n\t\tinput[type=\"search\"]::-webkit-search-decoration, input[type=\"search\"]::-webkit-search-cancel-button { -webkit-appearance: none; }\n\t\tbutton::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }\n\t\ttextarea { overflow: auto; vertical-align: top; resize: vertical; }\n\t\tinput:valid, textarea:valid {  }\n\t\tinput:invalid, textarea:invalid { background-color: #f0dddd; }\n\t\ttable { border-collapse: collapse; border-spacing: 0; }\n\t\ttd { vertical-align: top; }\n\n\t\tbody\n\t\t{\n\t\t\tfont-family:'Droid Sans', sans-serif;\n\t\t\tfont-size:10pt;\n\t\t\tcolor:#555;\n\t\t\tline-height: 25px;\n\t\t}\n\n\t\t.wrapper\n\t\t{\n\t\t\twidth:760px;\n\t\t\tmargin:0 auto 5em auto;\n\t\t}\n\n\t\t.main\n\t\t{\n\t\t\toverflow:hidden;\n\t\t}\n\n\t\t.error-spacer\n\t\t{\n\t\t\theight:4em;\n\t\t}\n\n\t\ta, a:visited\n\t\t{\n\t\t\tcolor:#2972A3;\n\t\t}\n\n\t\ta:hover\n\t\t{\n\t\t\tcolor:#72ADD4;\n\t\t}\n\t</style>\n</head>\n<body>\n\t<div class=\"wrapper\">\n\t\t<div class=\"error-spacer\"></div>\n\t\t<div role=\"main\" class=\"main\">\n\t\t\t<?php $messages = array('We need a map.', 'I think we\\'re lost.', 'We took a wrong turn.'); ?>\n\n\t\t\t<h1><?php echo $messages[mt_rand(0, 2)]; ?></h1>\n\n\t\t\t<h2>Server Error: 404 (Not Found)</h2>\n\n\t\t\t<hr>\n\n\t\t\t<h3>What does this mean?</h3>\n\n\t\t\t<p>\n\t\t\t\tWe couldn't find the page you requested on our servers. We're really sorry\n\t\t\t\tabout that. It's our fault, not yours. We'll work hard to get this page\n\t\t\t\tback online as soon as possible.\n\t\t\t</p>\n\n\t\t\t<p>\n\t\t\t\tPerhaps you would like to go to our <a href=\"{{{ URL::to('/') }}}\">home page</a>?\n\t\t\t</p>\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/errors/500.blade.php",
    "content": "<!doctype html>\n<html lang=\"en\">\n<head>\n\t<meta charset=\"utf-8\">\n\t<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\">\n\t<title>Error 500 - Internal Server Error</title>\n\t<meta name=\"viewport\" content=\"width=device-width\">\n\t<style type=\"text/css\">\n\n\t\tarticle, aside, details, figcaption, figure, footer, header, hgroup, nav, section { display: block; }\n\t\taudio, canvas, video { display: inline-block; *display: inline; *zoom: 1; }\n\t\taudio:not([controls]) { display: none; }\n\t\t[hidden] { display: none; }\n\t\thtml { font-size: 100%; -webkit-text-size-adjust: 100%; -ms-text-size-adjust: 100%; }\n\t\thtml, button, input, select, textarea { font-family: sans-serif; color: #222; }\n\t\tbody { margin: 0; font-size: 1em; line-height: 1.4; }\n\t\t::-moz-selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\t::selection { background: #E37B52; color: #fff; text-shadow: none; }\n\t\ta { color: #00e; }\n\t\ta:visited { color: #551a8b; }\n\t\ta:hover { color: #06e; }\n\t\ta:focus { outline: thin dotted; }\n\t\ta:hover, a:active { outline: 0; }\n\t\tabbr[title] { border-bottom: 1px dotted; }\n\t\tb, strong { font-weight: bold; }\n\t\tblockquote { margin: 1em 40px; }\n\t\tdfn { font-style: italic; }\n\t\thr { display: block; height: 1px; border: 0; border-top: 1px solid #ccc; margin: 1em 0; padding: 0; }\n\t\tins { background: #ff9; color: #000; text-decoration: none; }\n\t\tmark { background: #ff0; color: #000; font-style: italic; font-weight: bold; }\n\t\tpre, code, kbd, samp { font-family: monospace, serif; _font-family: 'courier new', monospace; font-size: 1em; }\n\t\tpre { white-space: pre; white-space: pre-wrap; word-wrap: break-word; }\n\t\tq { quotes: none; }\n\t\tq:before, q:after { content: \"\"; content: none; }\n\t\tsmall { font-size: 85%; }\n\t\tsub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; }\n\t\tsup { top: -0.5em; }\n\t\tsub { bottom: -0.25em; }\n\t\tul, ol { margin: 1em 0; padding: 0 0 0 40px; }\n\t\tdd { margin: 0 0 0 40px; }\n\t\tnav ul, nav ol { list-style: none; list-style-image: none; margin: 0; padding: 0; }\n\t\timg { border: 0; -ms-interpolation-mode: bicubic; vertical-align: middle; }\n\t\tsvg:not(:root) { overflow: hidden; }\n\t\tfigure { margin: 0; }\n\t\tform { margin: 0; }\n\t\tfieldset { border: 0; margin: 0; padding: 0; }\n\t\tlabel { cursor: pointer; }\n\t\tlegend { border: 0; *margin-left: -7px; padding: 0; white-space: normal; }\n\t\tbutton, input, select, textarea { font-size: 100%; margin: 0; vertical-align: baseline; *vertical-align: middle; }\n\t\tbutton, input { line-height: normal; }\n\t\tbutton, input[type=\"button\"], input[type=\"reset\"], input[type=\"submit\"] { cursor: pointer; -webkit-appearance: button; *overflow: visible; }\n\t\tbutton[disabled], input[disabled] { cursor: default; }\n\t\tinput[type=\"checkbox\"], input[type=\"radio\"] { box-sizing: border-box; padding: 0; *width: 13px; *height: 13px; }\n\t\tinput[type=\"search\"] { -webkit-appearance: textfield; -moz-box-sizing: content-box; -webkit-box-sizing: content-box; box-sizing: content-box; }\n\t\tinput[type=\"search\"]::-webkit-search-decoration, input[type=\"search\"]::-webkit-search-cancel-button { -webkit-appearance: none; }\n\t\tbutton::-moz-focus-inner, input::-moz-focus-inner { border: 0; padding: 0; }\n\t\ttextarea { overflow: auto; vertical-align: top; resize: vertical; }\n\t\tinput:valid, textarea:valid {  }\n\t\tinput:invalid, textarea:invalid { background-color: #f0dddd; }\n\t\ttable { border-collapse: collapse; border-spacing: 0; }\n\t\ttd { vertical-align: top; }\n\n\t\tbody\n\t\t{\n\t\t\tfont-family:'Droid Sans', sans-serif;\n\t\t\tfont-size:10pt;\n\t\t\tcolor:#555;\n\t\t\tline-height: 25px;\n\t\t}\n\n\t\t.wrapper\n\t\t{\n\t\t\twidth:760px;\n\t\t\tmargin:0 auto 5em auto;\n\t\t}\n\n\t\t.main\n\t\t{\n\t\t\toverflow:hidden;\n\t\t}\n\n\t\t.error-spacer\n\t\t{\n\t\t\theight:4em;\n\t\t}\n\n\t\ta, a:visited\n\t\t{\n\t\t\tcolor:#2972A3;\n\t\t}\n\n\t\ta:hover\n\t\t{\n\t\t\tcolor:#72ADD4;\n\t\t}\n\t</style>\n</head>\n<body>\n\t<div class=\"wrapper\">\n\t\t<div class=\"error-spacer\"></div>\n\t\t<div role=\"main\" class=\"main\">\n\n\t\t\t<h1>有错误发生！</h1>\n\n\t\t\t<h2>Server Error: 500 (Internal Server Error)</h2>\n\n\t\t\t<hr>\n\n\t\t\t<p>\n\t\t\t\t请联系 <a href=\"{{ route('user_center', ['user_name' => 'Ucer']) }}\">站长</a> 进行反馈。\n            </p>\n\n\t\t</div>\n\t</div>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/form-validate/auth/v-register.blade.php",
    "content": "<script>\n    $(document)\n        .ready(function () {\n            $('.ui.form')\n                .form({\n                    fields: {\n                        name: {\n                            identifier: 'user_name',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入用户名'\n                                },\n                                {\n                                    type: 'regExp[/^[a-zA-Z0-9]+$/]',\n                                    prompt: '用户名只能由数字和英文字母组成'\n                                }\n                            ]\n                        },\n                        email: {\n                            identifier: 'email',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入邮箱'\n                                },\n                                {\n                                    type: 'email',\n                                    prompt: '邮箱格式不正确'\n                                }\n                            ]\n                        },\n                        password: {\n                            identifier: 'password',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入密码'\n                                },\n                                {\n                                    type: 'minLength[6]',\n                                    prompt: '密码长度至少为6位'\n                                }\n                            ]\n                        },\n                        old_password: {\n                            identifier: 'old_password',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入原密码'\n                                },\n                                {\n                                    type: 'minLength[6]',\n                                    prompt: '原密码长度至少为6位'\n                                }\n                            ]\n                        },\n                        password_confirmation: {\n                            identifier: 'password_confirmation',\n                            rules: [\n                                {\n                                    type: 'match[password]',\n                                    prompt: '确认密码必须和密码一致'\n                                }\n                            ]\n                        },\n                        bio: {\n                            identifier: 'bio',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入个人简介'\n                                },\n                                {\n                                    type: 'minLength[6]',\n                                    prompt: '个人简介至少6个长度'\n                                }\n                            ]\n                        }\n                    },\n                    inline: true,\n                    on: 'blur'\n                });\n        })\n    ;\n</script>\n"
  },
  {
    "path": "resources/views/form-validate/auth/v-topic.blade.php",
    "content": "<script>\n    $(document)\n        .ready(function () {\n            $('.ui.form')\n                .form({\n                    fields: {\n                        category_id: {\n                            identifier: 'category_id',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请选择所属分类'\n                                }\n                            ]\n                        },\n                        title: {\n                            identifier: 'title',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '标题不能为空'\n                                },\n                                {\n                                    type: 'minLength[3]',\n                                    prompt: '标题长度至少为3位'\n                                },\n                                {\n                                    type: 'maxLength[60]',\n                                    prompt: '标题长度至多为60位'\n                                }\n                            ]\n                        },\n                        description: {\n                            identifier: 'description',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '描述不能为空'\n                                },\n                                {\n                                    type: 'minLength[3]',\n                                    prompt: '标题长度至少为3位'\n                                },\n                                {\n                                    type: 'maxLength[200]',\n                                    prompt: '标题长度至多为200位'\n                                }\n                            ]\n                        },\n                        bio: {\n                            identifier: 'bio',\n                            rules: [\n                                {\n                                    type: 'empty',\n                                    prompt: '请输入个人简介'\n                                },\n                                {\n                                    type: 'minLength[6]',\n                                    prompt: '个人简介至少6个长度'\n                                }\n                            ]\n                        }\n                    },\n                    inline: true,\n                    on: 'blur'\n                });\n        })\n    ;\n</script>\n"
  },
  {
    "path": "resources/views/layouts/app.blade.php",
    "content": "<!DOCTYPE html>\n<html lang=\"{{ app()->getLocale() }}\">\n<head>\n    <meta charset=\"utf-8\">\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\">\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1\">\n\n    <!-- CSRF Token -->\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n\n    <title>{{ config('app.name', 'Laravel') }}</title>\n\n    <!-- Styles -->\n    <link href=\"{{ asset('css/app.css') }}\" rel=\"stylesheet\">\n</head>\n<body>\n    <div id=\"app\">\n        <nav class=\"navbar navbar-default navbar-static-top\">\n            <div class=\"container\">\n                <div class=\"navbar-header\">\n\n                    <!-- Collapsed Hamburger -->\n                    <button type=\"button\" class=\"navbar-toggle collapsed\" data-toggle=\"collapse\" data-target=\"#app-navbar-collapse\">\n                        <span class=\"sr-only\">Toggle Navigation</span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                        <span class=\"icon-bar\"></span>\n                    </button>\n\n                    <!-- Branding Image -->\n                    <a class=\"navbar-brand\" href=\"{{ url('/') }}\">\n                        {{ config('app.name', 'Laravel') }}\n                    </a>\n                </div>\n\n                <div class=\"collapse navbar-collapse\" id=\"app-navbar-collapse\">\n                    <!-- Left Side Of Navbar -->\n                    <ul class=\"nav navbar-nav\">\n                        &nbsp;\n                    </ul>\n\n                    <!-- Right Side Of Navbar -->\n                    <ul class=\"nav navbar-nav navbar-right\">\n                        <!-- Authentication Links -->\n                        @if (Auth::guest())\n                            <li><a href=\"{{ route('login') }}\">Login</a></li>\n                            <li><a href=\"{{ route('register') }}\">Register</a></li>\n                        @else\n                            <li class=\"dropdown\">\n                                <a href=\"#\" class=\"dropdown-toggle\" data-toggle=\"dropdown\" role=\"button\" aria-expanded=\"false\">\n                                    {{ Auth::user()->name }} <span class=\"caret\"></span>\n                                </a>\n\n                                <ul class=\"dropdown-menu\" role=\"menu\">\n                                    <li>\n                                        <a href=\"{{ route('logout') }}\"\n                                            onclick=\"event.preventDefault();\n                                                     document.getElementById('logout-form').submit();\">\n                                            Logout\n                                        </a>\n\n                                        <form id=\"logout-form\" action=\"{{ route('logout') }}\" method=\"POST\" style=\"display: none;\">\n                                            {{ csrf_field() }}\n                                        </form>\n                                    </li>\n                                </ul>\n                            </li>\n                        @endif\n                    </ul>\n                </div>\n            </div>\n        </nav>\n\n        @yield('content')\n    </div>\n\n    <!-- Scripts -->\n    <script src=\"{{ asset('js/app.js') }}\"></script>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/base.blade.php",
    "content": "<!DOCTYPE html>\n<html>\n<head>\n    <!-- Standard Meta -->\n    <meta name=\"baidu-site-verification\" content=\"SEGRBySjTy\"/>\n    <meta charset=\"utf-8\"/>\n    <meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge,chrome=1\"/>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, maximum-scale=1.0\">\n    <meta name=\"csrf-token\" content=\"{{ csrf_token() }}\">\n    <meta name=\"site\" content=\"http://codehaoshi\"/>\n    <meta name=\"author\" content=\"Ucer\"/>\n    @section('meta')\n        <meta name=\"keywords\" content=\"php,code,视频教程,laravel,php框架,文档,教程,中文,学习,社区,开源,php新手,php7,laravel5,php教程\"/>\n        <meta name=\"description\" content=\"Code好事是Laravel 和 PHP 开发笔记记录，记录编程中碰到的各种坑\"/>\n    @show\n\n    <title>@yield('title'){{ config('app.name') }} - 记录代码、问题笔记 - Powered by Ucer</title>\n    <link rel=\"shortcut icon\" href=\"{{ config('app.url') }}favicon.png\"/>\n    <link rel=\"stylesheet\" href=\"{{ mix('assets/css/styles.css') }}\">\n    <!-- Scripts -->\n    <script>\n\n        window.Laravel = <?php echo json_encode([\n            'csrfToken' => csrf_token(),\n            'uploadImage' => route('upload_image'),\n        ]); ?>\n    </script>\n    @yield('style')\n</head>\n\n<body class=\"show-page articles-show-page pushable  pushable\">\n\n@include('layouts/partials/sidebar-menu')\n\n<div class=\"main container pusher\">\n    <div id=\"codehaoshi\">\n        @include('layouts/partials/navbar')\n        @yield('content')\n    </div>\n</div>\n@include('layouts/partials/footer')\n\n<script src=\"{{ mix('assets/js/front.app.js') }}\"></script>\n<script src=\"{{ mix('assets/js/styles.js') }}\"></script>\n\n\n<script type=\"text/javascript\">\n    var status = '{{ session()->get('toastrMsg.status') }}';\n\n    var msg = '{{ session()->get('toastrMsg.msg') }}';\n    switch (status) {\n        case 'success':\n            toastr.success(msg);\n            break;\n        case 'error':\n            toastr.error(msg);\n            break;\n        case 'info':\n            toastr.info(msg);\n            break;\n        case 'warning':\n            toastr.warning(msg);\n            break;\n    }\n\n    $('#flash-overlay-modal').modal();\n    Config = {\n        'cdnDomain': '{{ getCdnDomain() }}',\n    };\n</script>\n\n\n@yield('script')\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/layouts/partials/footer.blade.php",
    "content": "<div class=\"ui inverted vertical footer segment\">\n    <div class=\"ui center aligned container\">\n        <div class=\"ui stackable inverted divided grid\">\n            <div class=\"four wide column\">\n                <h4 class=\"ui inverted header\">友链</h4>\n                <div class=\"ui inverted link list\">\n                    @foreach($linkList as $v)\n                        <a href=\"{{ $v->link }}\" class=\"item no_marakdown\" target=\"_blank\">{{ $v->title }}</a>\n                    @endforeach\n                </div>\n            </div>\n            <div class=\"four wide column\">\n                <h4 class=\"ui inverted header\">资源推荐</h4>\n                <div class=\"ui inverted link list\">\n                    @foreach($recommendList as $v)\n                        <a href=\"{{ $v->link }}\" class=\"item no_marakdown\" target=\"_blank\">{{ $v->title }}</a>\n                    @endforeach\n                </div>\n            </div>\n            <div class=\"eight wide column\">\n                <h4 class=\"ui inverted  header\">Code好事</h4>\n                <p>\n                    1.好记性不如烂笔头,动起来\n                </p>\n                <p>\n                    2.走过的路、踩过的坑\n                </p>\n            </div>\n        </div>\n\n        <div class=\"ui inverted section divider\"></div>\n        <div>\n\n            <p style=\"font-size:0.9em; margin-top:20px;margin-bottom: -8px;color: rgb(137, 137, 140);\"\n               class=\"ui inverted \">\n                © 2017 Powered by <a href=\"http://weibo.com/5652504009/profile?rightmod=1&wvr=6&mod=personinfo\"\n                                     target=\"_blank\" style=\"color: inherit;\">Ucer</a>\n                <span style=\"color: #e27575;font-size: 14px;\">❤</span>\n            </p>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/layouts/partials/messages.blade.php",
    "content": "@if(session()->get('succ'))\n@endif"
  },
  {
    "path": "resources/views/layouts/partials/navbar.blade.php",
    "content": "<nav class=\"ui main large  menu top stackable \">\n    <a class=\"attach-sidebar item\" style=\"display: none\"> <i class=\"sidebar icon\"></i> </a>\n    <div class=\"ui container hidden-menu-m\">\n        <a href=\"/\" class=\"header item \">\n            {{ config('app.name') }}\n            <div class=\"ui left pointing  violet  label \"\n                 style=\"font-weight: normal;\"> {{ config('codehaoshi.description') }}</div>\n        </a>\n        <div class=\"ui simple item dropdown article stackable nav-user-item hidden-menu-m\">资源 <i\n                    class=\"dropdown icon\"></i>\n            <div class=\"menu\">\n                @foreach($categoryList as $v)\n                    <a href=\"{{ url('/a/'.$v['slug']) }}\" class=\"item\">{{ $v['name'] }}</a>\n                @endforeach\n            </div>\n        </div>\n        <div class=\"ui simple item dropdown article stackable nav-user-item hidden-menu-m\">问答 <i\n                    class=\"dropdown icon\"></i>\n            <div class=\"menu\">\n                @foreach($questionCategoryList as $v)\n                    <a href=\"{{ url('/q/'.$v['slug']) }}\" class=\"item\">{{ $v['name'] }}</a>\n                @endforeach\n            </div>\n        </div>\n        <a href=\"{{ route('about') }}\" class=\"item hidden-menu-m\">关于本站</a>\n        <div class=\"ui fluid category search item \">\n            <div class=\"ui search\">\n                <form method=\"GET\" action=\"{{ route('search') }}\" accept-charset=\"UTF-8\">\n                    <div class=\"ui icon input\">\n                        <input type=\"text\" placeholder=\"Search...\" class=\"prompt\" name=\"q\"\n                               value=\"{{ request()->get('q')? : '' }}\" required>\n                        <i class=\"search icon\"></i>\n                    </div>\n                </form>\n\n                <div class=\"results\"></div>\n            </div>\n        </div>\n\n        <div class=\"right menu\">\n            {{--<div class=\"ui simple item dropdown article stackable nav-user-item\">Language <i class=\"dropdown icon\"></i>--}}\n            {{--<div class=\"menu\">--}}\n            {{--<a class=\"item\">English</a>--}}\n            {{--<a class=\"item\">Russian</a>--}}\n            {{--<a class=\"item\">Spanish</a>--}}\n            {{--</div>--}}\n            {{--</div>--}}\n\n\n            @if(Auth::check())\n                <div class=\"ui simple item dropdown article stackable nav-user-item\">\n                    <i class=\"add large icon violet\"></i>\n                    <div class=\"ui menu stackable\" tabindex=\"-1\">\n                        @if($authUser->is_admin == 'yes' && $authUser->hasRole('supper_admin'))\n                            <a href=\"{{ route('articles.create') }}\" class=\"item\">\n                                创作文章\n                            </a>\n                        @endif\n                        <a href=\"{{ route('questions.create') }}\" class=\"item\">\n                            发起问题\n                        </a>\n                    </div>\n                </div>\n                <a class=\"item\" href=\"{{ route('notifications.unread') }}\" title=\"消息通知\">\n                    <span class=\"ui basic circular label notification\"\n                          id=\"notification-count\">{{ $authUser->unreadNotifications()->count() }}</span>\n                </a>\n                <div class=\"ui simple item dropdown article stackable nav-user-item\">\n                    <img class=\"ui avatar image\"\n                         src=\"{{ $authUser->avatar }}\">\n                    &nbsp;\n                    {{ $authUser->user_name }} <i class=\"dropdown icon\"></i>\n                    <div class=\"ui menu stackable\" tabindex=\"-1\">\n                        @if($authUser->is_admin == 'yes')\n                            <a href=\"{{ dashboardUrl('/') }}\" class=\"item no-pjax\">\n                                <i class=\"dashboard icon\"></i>\n                                {{ lang('Dashboard') }}\n                            </a>\n                        @endif\n                        <a href=\"{{ route('user_center', ['user_name' => $authUser->user_name]) }}\" class=\"item\">\n                            <i class=\"icon user\"></i>\n                            个人中心\n                        </a>\n                        <a href=\"{{ route('users.edit',['id' => $authUser->id]) }}\" class=\"item\">\n                            <i class=\"icon cogs\"></i>\n                            资料修改\n                        </a>\n                        <a href=\"{{ route('logout') }}\" data-lang-loginout=\" {{ lang('Are you sure want to logout?') }}\"\n                           class=\"item login-out-btn\">\n                            <i class=\"icon sign out\"></i>\n                            {{ lang('signOut') }}\n                        </a>\n                    </div>\n                </div>\n            @else\n                <div class=\"item\">\n                    <a href=\"{{ url('register') }}\">\n                        <div class=\"ui ginfo button \">注 册</div>\n                    </a>\n                </div>\n                <div class=\"item\">\n                    <a href=\"{{ url('login') }}\">\n                        <div class=\"ui black button\">登 录</div>\n                    </a>\n                </div>\n            @endif\n        </div> {{--right menu--}}\n\n    </div>\n</nav> {{--top navbar--}}\n\n"
  },
  {
    "path": "resources/views/layouts/partials/sidebar-menu.blade.php",
    "content": "<!-- Sidebar Menu -->\n<div class=\"ui vertical sidebar menu\">\n    <form method=\"GET\" action=\"{{ route('search') }}\" accept-charset=\"UTF-8\">\n        <div class=\"item\">\n            <div class=\"ui input\">\n                <input type=\"text\" placeholder=\"Search...\" class=\"prompt\" name=\"q\"\n                       value=\"{{ request()->get('q')? : '' }}\" required>\n            </div>\n        </div>\n    </form>\n    <div class=\"item\">\n        <div class=\"header\"> 资源</div>\n        <div class=\"menu article\">\n            @foreach($categoryList as $v)\n                <a href=\"{{ url('/a/'.$v['slug']) }}\" class=\"item\">{{ $v['name'] }}</a>\n            @endforeach\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"header\"> 问答</div>\n        <div class=\"menu article\">\n            @foreach($questionCategoryList as $v)\n                <a href=\"{{ url('/q/'.$v['slug']) }}\" class=\"item\">{{ $v['name'] }}</a>\n            @endforeach\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"header\"> 站点</div>\n        <div class=\"menu article\">\n            <a href=\"{{ route('about') }}\" class=\"item\">关于本站</a>\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"header\"> 权限</div>\n        @if(Auth::check())\n            @if($authUser->is_admin == 'yes' && $authUser->hasRole('supper_admin'))\n                <a href=\"{{ route('articles.create') }}\" class=\"item\">\n                    创作文章\n                </a>\n            @endif\n            <a href=\"{{ route('questions.create') }}\" class=\"item\">\n                发起问题\n            </a>\n        @endif\n    </div>\n    <div class=\"item\">\n        <div class=\"header\">用户相关</div>\n        @if(Auth::check())\n            <a class=\"item\" href=\"{{ route('notifications.unread') }}\"\n               title=\"消息通知\"> {{ $authUser->unreadNotifications()->count() }} 条通知</a>\n            <div class=\"ui simple item dropdown article stackable nav-user-item\">\n                <img class=\"ui avatar image\" src=\"{{ $authUser->avatar }}\"> &nbsp; {{ $authUser->user_name }} <i\n                        class=\"dropdown icon\"></i>\n                @if($authUser->is_admin == 'yes')\n                    <a href=\"{{ dashboardUrl('/') }}\" class=\"item no-pjax\">\n                        <i class=\"dashboard icon\"></i>\n                        {{ lang('Dashboard') }}\n                    </a>\n                @endif\n                <a href=\"{{ route('user_center', ['user_name' => $authUser->user_name]) }}\" class=\"item\">\n                    <i class=\"icon user\"></i>\n                    个人中心\n                </a>\n                <a href=\"{{ route('users.edit',['id' => $authUser->id]) }}\" class=\"item\">\n                    <i class=\"icon cogs\"></i>\n                    资料修改\n                </a>\n                <a href=\"{{ route('logout') }}\"\n                   data-lang-loginout=\" {{ lang('Are you sure want to logout?') }}\" class=\"ite login-out-btn\">\n                    <i class=\"icon sign out\"></i>\n                    {{ lang('signOut') }}\n                </a>\n            </div>\n        @else\n            <div class=\"item\">\n                <a href=\"{{ url('register') }}\">\n                    <div class=\"ui ginfo button \">注 册</div>\n                </a>\n            </div>\n            <div class=\"item\">\n                <a href=\"{{ url('login') }}\">\n                    <div class=\"ui black button\">登 录</div>\n                </a>\n            </div>\n        @endif\n\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/messages/message.blade.php",
    "content": "@extends('layouts.base')\n@section('title','私信')\n@section('content')\n\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">消息中心</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\">\n        @include('messages.partials.left-bar')\n        <div class=\"twelve wide column\">\n            <div class=\"ui stacked segment\">\n                <div class=\"content extra-padding\">\n                    <h1> <i class=\"mail outline icon\"></i> 我的私信 </h1>\n                    <div class=\"ui divider\"></div>\n                    <div class=\"ui feed\">\n                        <div class=\"event \">\n                            <a class=\"label\" href=\"\">\n                                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&e=1501052322&token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:jx9iK89Xd8ZYygJDasJk-1dToV0=\"\n                                     alt=\"ucer\">\n                            </a>\n                            <div class=\"content\">\n                                <div class=\"ucer\">\n                                    <a href=\"\"> Ucer </a>\n                                    <span class=\"meta\"> ⋅ 于 ⋅ <span class=\"timeago\">2个月前</span> </span>：\n                                </div>\n                                <div class=\"extra text markdown-reply\">\n                                    <p>请按照这个页面指示\n                                    </p>\n                                </div>\n                                <div class=\"meta\">\n                                    <div class=\"message-meta\">\n                                        <p>\n                                            <a href=\"\" class=\"normalize-link-color \">\n                                                <i class=\"icon commenting outline\" aria-hidden=\"true\"></i>\n                                                查看对话\n                                            </a>\n                                        </p>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/messages/notifications.blade.php",
    "content": "@extends('layouts.base')\n@section('title','通知消息')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">消息中心</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\">\n        @include('messages.partials.left-bar')\n        <div class=\"twelve wide column\">\n            <div class=\"ui stacked segment\">\n                <div class=\"content extra-padding\">\n                    <h1><i class=\"bell outline icon\"></i> 我的提醒 </h1>\n                    <div class=\"ui divider\"></div>\n                    @if(count($notifications))\n                        @foreach($notifications as $v)\n                            @include('notifications.'. snake_case(class_basename($v->type), '-'))\n                        @endforeach\n                    @else\n                        <div class=\"ui feed no-messages\">\n                            <a class=\"text-center alert alert-info\">暂无提醒消息!</a>\n                        </div>\n                    @endif\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/messages/partials/left-bar.blade.php",
    "content": "<div class=\"four wide column box\">\n    <div class=\"ui fluid large vertical pointing  violet menu\" style=\"border: 1px solid #d3e0e9;\">\n        <a class=\"item @if(request()->url() == route('notifications.messages')) active @endif\" href=\"{{ route('notifications.messages') }}\">\n            <i class=\"icon envelope nofloat outline grey\"></i> &nbsp;私信\n        </a>\n\n        <a class=\"item @if(request()->url() == route('notifications.index')) active @endif\" href=\"{{  route('notifications.index') }}\">\n            <i class=\"icon bell nofloat outline grey\"></i> &nbsp;通知消息\n        </a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/notifications/new-user-follow-notification.blade.php",
    "content": "<div class=\"ui list  notification-list\">\n    <div class=\"item\">\n        <i class=\"heart icon\"></i>\n        <div class=\"content notify-list\">\n            <a class=\"header\" style=\"color:#525252!important;\">用户关注通知：</a>\n            <div class=\"description\">\n                <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">\n                    {{ $v->data['user_name'] }} &nbsp;\n                </a>\n                关注了您\n                {{--<span class=\"ui mini grey basic button right floated\">delete</span>--}}\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/notifications/received-comment.blade.php",
    "content": "<div class=\"ui list  notification-list\">\n    <div class=\"item\">\n        <i class=\"comment icon\"></i>\n        <div class=\"content notify-list\">\n            <a class=\"header\" style=\"color:#525252!important;\">文章评论通知：</a>\n            <div class=\"description\">\n                <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">\n                    {{ $v->data['user_name'] }} &nbsp;\n                </a>\n                评论了您的文章：\n                <a href=\"{{ route('article.show', ['slug' => $v->data['article_slug']]) }}\"\n                   title=\"{{ $v->data['article_title'] }}\">\n                    {{ $v->data['article_title'] }}\n                </a>\n                {{--<span class=\"ui mini grey basic button right floated\">delete</span>--}}\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/notifications/received-reply.blade.php",
    "content": "<div class=\"ui list  notification-list\">\n    <div class=\"item\">\n        <i class=\"comment icon\"></i>\n        <div class=\"content notify-list\">\n            <a class=\"header\" style=\"color:#525252!important;\">问题回复通知：</a>\n            <div class=\"description\">\n                <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">\n                    {{ $v->data['user_name'] }} &nbsp;\n                </a>\n                回复了您的问题：\n                <a href=\"{{ route('question.show', ['slug' => $v->data['question_slug']]) }}\"\n                   title=\"{{ $v->data['question_title'] }}\">\n                    {{ $v->data['question_title'] }}\n                </a>\n                {{--<span class=\"ui mini grey basic button right floated\">delete</span>--}}\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/notifications/user-vote-article.blade.php",
    "content": "<div class=\"ui list  notification-list\">\n    <div class=\"item\">\n        <i class=\"thumbs up icon\"></i>\n        <div class=\"content notify-list\">\n            <a class=\"header\" style=\"color:#525252!important;\">文章点赞通知：</a>\n            <div class=\"description\">\n                <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">\n                    {{ $v->data['user_name'] }} &nbsp;\n                </a>\n                赞了您的文章：\n                <a href=\"{{ route('article.show', ['slug' => $v->data['article_slug']]) }}\"\n                   title=\"{{ $v->data['article_title'] }}\">\n                    {{ $v->data['article_title'] }}\n                </a>\n                {{--<span class=\"ui mini grey basic button right floated\">delete</span>--}}\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/notifications/user-vote-question.blade.php",
    "content": "<div class=\"ui list  notification-list\">\n    <div class=\"item\">\n        <i class=\"thumbs up icon\"></i>\n        <div class=\"content notify-list\">\n            <a class=\"header\" style=\"color:#525252!important;\">问题点赞通知：</a>\n            <div class=\"description\">\n                <a href=\"{{ route('user_center',['user_name' =>$v->data['user_name'] ] ) }}\">\n                    {{ $v->data['user_name'] }} &nbsp;\n                </a>\n                赞了您的问题：\n                <a href=\"{{ route('question.show', ['slug' => $v->data['question_slug']]) }}\"\n                   title=\"{{ $v->data['question_title'] }}\">\n                    {{ $v->data['question_title'] }}\n                </a>\n                {{--<span class=\"ui mini grey basic button right floated\">delete</span>--}}\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/pages/about.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    关于本站\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">关于本站</div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <h3 class=\"ui center aligned teal  segment\"><i class=\"at icon\"></i>关于我们</h3>\n                <div class=\"ui divider\"></div>\n                <div class=\"ui readme markdown-body content-body\">\n                    @if($info)\n                    <parse content=\"{{ json_decode($info->content)->raw  }}\"></parse>\n                        @else\n                        <div class=\"ui feed no-messages\">\n                            <p class=\"text-center alert alert-info\">!\n                                (=￣ω￣=) ··· 小编正在努力敲打键盘中。。。\n                            </p>\n                        </div>\n                    @endif\n                </div>\n            </div>\n        </div>\n        <div class=\"four wide column\">\n\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新文章</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentArticles as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新问答</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentQuestions as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui sticky\">\n                <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n                    <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                        <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n                    </div>\n                    <div class=\"extra\">\n                        @foreach($tags as $tag)\n                            <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                               class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                        @endforeach\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/pages/home.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    Code好事 - 首页\n@endsection\n@section('content')\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">{{ lang(config('codehaoshi.notice.home_page_article')) }}</span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            @include('pages/partials/information-channel')\n\n            <div class=\"ui container floating  violet segment\" id=\"notify\">\n                <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n                    <span class=\"default-font\">{{ lang(config('codehaoshi.notice.home_page_question')) }} </span>\n                </p>\n            </div> {{--notify--}}\n\n            @include('pages.partials.question-channel')\n\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    @include('pages.partials.hot-article')\n                    <h4 class=\"ui horizontal divider header default-color-a\"><i class=\"bar chart icon\"></i> {{ config('app.name') }}</h4>\n                    @include('pages.partials.hot-question')\n\n                </div>\n            </div>\n        </div>\n    </div> {{--pagebody--}}\n@endsection\n"
  },
  {
    "path": "resources/views/pages/partials/hot-article.blade.php",
    "content": "<p class=\"book-article-meta\">\n    <p><i class=\"file text icon\"></i>\n        精华文章</p>\n</p>\n\n<div class=\"ui celled list\">\n    @forelse($tenExcellentArticles as $v)\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                @foreach($v->tags as $tag)\n                    @break($loop->index >0)\n                    <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\">\n                        <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                    </a>\n                @endforeach\n                <span class=\"labels-time\" title=\"评论数\">{{ $v->comment_count }}</span>/\n                <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n            </div>\n            <img class=\"ui avatar image avatar-b popover\"\n                 onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                 alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\" src=\"{{ $v->user->avatar }}\">\n            <div class=\"content\">\n                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                    <div class=\"ui popover\" style=\"font-weight: bold\"\n                         data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 80) }}</div>\n                </a>\n                {{ str_limit($v->description, 100) }}\n            </div>\n        </div>\n    @empty\n        <div class=\"ui feed no-messages\">\n            <p class=\"text-center alert alert-info\">!\n                (=￣ω￣=) ··· 还没有数据噢。\n            </p>\n        </div>\n    @endforelse\n\n</div>\n"
  },
  {
    "path": "resources/views/pages/partials/hot-question.blade.php",
    "content": "<p class=\"book-article-meta\">\n    <p><i class=\"help circle icon\"></i>\n        精华问题</p>\n</p>\n\n<div class=\"ui celled list\">\n    @forelse($tenExcellentQuestions as $v)\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                @foreach($v->tags as $tag)\n                    @break($loop->index >0)\n                    <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\">\n                        <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                    </a>\n                @endforeach\n                <span class=\"labels-time\" title=\"回复数\">{{ $v->reply_count }}</span>/\n                <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n            </div>\n            <img class=\"ui avatar image avatar-b popover\"\n                 onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                 alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\" src=\"{{ $v->user->avatar }}\">\n            <div class=\"content\">\n                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                    <div class=\"ui popover\" style=\"font-weight: bold\"\n                         data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 80) }}</div>\n                </a>\n                {{ str_limit($v->description, 100) }}\n            </div>\n        </div>\n    @empty\n        <div class=\"ui feed no-messages\">\n            <p class=\"text-center alert alert-info\">!\n                (=￣ω￣=) ··· 还没有数据噢。\n            </p>\n        </div>\n    @endforelse\n\n</div>\n"
  },
  {
    "path": "resources/views/pages/partials/information-channel.blade.php",
    "content": "<div class=\"ui middle aligned centered grid\">\n    <div class=\"row\">\n        <div class=\"ui grid 992px-1200px\">\n            <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"fire icon\"></i>&nbsp;&nbsp;资讯频道\n            </div>\n        </div>\n        <div class=\"ui ten wide column\">\n            <div class=\"ui two stackable link cards\">\n                @forelse($categoryList as $v)\n                <div class=\"card\">\n                    <a href=\"{{ url('/a/'. $v->slug) }}\" class=\"image\">\n                        <img data-src=\"{{ $v->image_url }}\"   src=\"data:image/gif;base64,R0lGODlhAQABAAA\n       AACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==\" class=\"lazeload\">\n                    </a>\n                    <div class=\"content\">\n                        <a href=\"{{ url('/a/'. $v->slug) }}\" class=\"header\">{{ $v->name }}</a>\n                        <div class=\"description\">{{ $v->description }}</div>\n                    </div>\n                    <div class=\"extra content green\">\n                        <span class=\"right floated\">\n                            @if($v->recent_update)\n                                更新于 {{ getDateWithSub($v->recent_update) }}\n                                @else\n                                努力更新中. . .\n                            @endif\n                        </span>\n                        <span><i class=\"file text icon\"></i> {{ $v->article_count }}篇文章</span>\n                    </div>\n                </div>\n                @empty\n                    <div class=\"ui feed no-messages\">\n                        <p class=\"text-center alert alert-info\">!\n                            (=￣ω￣=) ··· 还没有数据噢。\n                        </p>\n                    </div>\n                @endforelse\n            </div>\n        </div>\n    </div>\n</div> {{--资讯频道--}}\n"
  },
  {
    "path": "resources/views/pages/partials/information-channel.blade.php.old",
    "content": "<div class=\"ui four wide column center container\">\n    <div class=\"ui grid\">\n        <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"fire icon\"></i>&nbsp;&nbsp;资讯频道\n        </div>\n    </div>\n    <div class=\"ui link cards\">\n        <div class=\"card\">\n            <div class=\"image\">\n                <img src=\"http://codehaoshi.app/images/article-cat.png\">\n            </div>\n            <div class=\"content\">\n                <div class=\"header\">Matt Giampietro</div>\n                <div class=\"meta\">\n                    <a>好友</a>\n                </div>\n                <div class=\"description\">Matthew is an interior designer living in New York.</div>\n            </div>\n            <div class=\"extra content\">\n                <span class=\"right floated\">2013年加入 </span>\n                <span><i class=\"user icon\"></i> 75 Friends </span>\n            </div>\n        </div>\n    </div>\n</div>\n\n<div class=\"ui middle aligned four column centered grid\">\n    <div class=\"row\">\n        <div class=\"ui grid\">\n            <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"fire icon\"></i>&nbsp;&nbsp;资讯频道\n            </div>\n        </div>\n        <div class=\"column\">\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"{{ $categoryList['0']->image_url }}\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"{{ url('/a/'.$categoryList['0']->slug) }}\">\n                        <div class=\"header\">{{ $categoryList['0']->name }}</div>\n                    </a>\n                    <div class=\"description\">{{ $categoryList['0']->description }}</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于 {{ $categoryList['0']->created_at->diffForHumans() }}</span>\n                    <span><i class=\"file text icon\"></i> {{ $categoryList['0']->article_count }}篇文章</span>\n                </div>\n            </div>\n        </div>\n        <div class=\"column\">\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"{{ $categoryList['1']->image_url }}\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"{{ url('/a/'.$categoryList['1']->slug) }}\">\n                        <div class=\"header\">{{ $categoryList['1']->name }}</div>\n                    </a>\n                    <div class=\"description\">{{ $categoryList['1']->description }}</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于 {{ $categoryList['1']->created_at->diffForHumans() }}</span>\n                    <span><i class=\"file text icon\"></i> {{ $categoryList['1']->article_count }}篇文章</span>\n                </div>\n            </div>\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"{{ $categoryList['2']->image_url }}\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"{{ url('/a/'.$categoryList['2']->slug) }}\">\n                        <div class=\"header\">{{ $categoryList['2']->name }}</div>\n                    </a>\n                    <div class=\"description\">{{ $categoryList['2']->description }}</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于 {{ $categoryList['2']->created_at->diffForHumans() }}</span>\n                    <span><i class=\"file text icon\"></i> {{ $categoryList['2']->article_count }}篇文章</span>\n                </div>\n            </div>\n        </div>\n        <div class=\"column\">\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"{{ $categoryList['3']->image_url }}\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"{{ url('/a/'.$categoryList['3']->slug) }}\">\n                        <div class=\"header\">{{ $categoryList['3']->name }}</div>\n                    </a>\n                    <div class=\"description\">{{ $categoryList['3']->description }}</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于 {{ $categoryList['3']->created_at->diffForHumans() }}</span>\n                    <span><i class=\"file text icon\"></i> {{ $categoryList['3']->article_count }}篇文章</span>\n                </div>\n            </div>\n        </div>\n    </div>\n</div> {{--资讯频道--}}\n"
  },
  {
    "path": "resources/views/pages/partials/question-channel.blade.php",
    "content": "<div class=\"ui middle aligned centered grid\">\n    <div class=\"row\">\n        <div class=\"ui grid 992px-1200px\">\n            <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"hand paper icon\"></i>&nbsp;&nbsp;问答频道\n            </div>\n        </div>\n        <div class=\"ui ten wide column\">\n            <div class=\"ui two stackable link cards\">\n                @forelse($questionCategoryList as $v)\n                    <div class=\"card\">\n                        <a href=\"{{ url('/q/'. $v->slug) }}\" class=\"image\">\n                            <img src=\"{{ $v->image_url }}\">\n                        </a>\n                        <div class=\"content\">\n                            <a href=\"{{ url('/q/'. $v->slug) }}\" class=\"header\">{{ $v->name }}</a>\n                            <div class=\"description\">{{ $v->description }}</div>\n                        </div>\n                        <div class=\"extra content green\">\n                            <span class=\"right floated\">\n                                @if($v->recent_update)\n                                    更新于 {{ getDateWithSub($v->recent_update) }}\n                                @else\n                                    努力更新中. . .\n                                @endif\n                         </span>\n                            <span><i class=\"file text icon\"></i> {{ $v->question_count }}个问题</span>\n                        </div>\n                    </div>\n                @empty\n                    <div class=\"ui feed no-messages\">\n                        <p class=\"text-center alert alert-info\">!\n                            (=￣ω￣=) ··· 还没有数据噢。\n                        </p>\n                    </div>\n                @endforelse\n            </div>\n        </div>\n    </div>\n</div> {{--资讯频道--}}\n\n"
  },
  {
    "path": "resources/views/pages/search.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $query }}-搜索\n@endsection\n@section('content')\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui container grid\">\n                <div class=\"column\">\n                    <div class=\"ui breadcrumb\">\n                        <a href=\"/\" class=\"section\">首页</a>\n                        <span class=\"divider\">/</span>\n                        <div class=\"active section\">搜索</div>\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                    <div class=\"ui message info\">\n                        <div class=\"header\">全站搜索</div>\n                        <ul class=\"list\">\n                            <i class=\"icon search large green\"></i> 关于 “{{ $query }}” 的搜索结果，{{ count($article_search) }}\n                            篇文章， {{count($question_search) }} 个问题 。\n                        </ul>\n                    </div>\n                    </p>\n                    <div class=\"ui centered grid container stackable search-result\">\n                        <div class=\"ui very relaxed list seven wide column\">\n                            @if(count($article_search))\n                                @foreach($article_search as $v)\n                                    <div class=\"item\">\n                                        <div class=\"content\">\n                                            <a class=\"header\" href=\"{{ route('article.show', ['slug' => $v->slug]) }}\">\n                                                <i class=\"file text outline icon\"></i>\n                                                {{ str_limit($v->title, 55) }}\n                                            </a>\n                                            <div class=\"description\"> {{ str_limit($v->description, 70) }}</div>\n                                            <div class=\"description\"><i\n                                                        class=\"icon wait\"></i>{{ str_limit($v->created_at,10,'') }}\n                                            </div>\n                                        </div>\n                                    </div>\n                                @endforeach\n                            @endif\n                        </div>\n                        <div class=\"ui very relaxed list seven wide column right floated\">\n                            @if(count($question_search))\n                                @foreach($question_search as $v)\n                                    <div class=\"item\">\n                                        <div class=\"content\">\n                                            <a class=\"header\" href=\"{{ route('question.show', ['slug' => $v->slug]) }}\">\n                                                <i class=\"help circle outline icon\"></i>\n                                                {{ str_limit($v->title, 55) }}\n                                            </a>\n                                            <div class=\"description\"> {{ str_limit($v->description, 70) }}</div>\n                                            <div class=\"description\"><i\n                                                        class=\"icon wait\"></i>{{ str_limit($v->created_at,10,'') }}\n                                            </div>\n                                        </div>\n                                    </div>\n                                @endforeach\n                            @endif\n                        </div>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n    </div>\n                    @endsection\n                    @section('script')\n\n                        <script type=\"text/javascript\">\n\n                            $(document).ready(function () {\n                                var query = '{{ $query }}';\n                                var results = query.match(/(\"[^\"]+\"|[^\"\\s]+)/g);\n                                results.forEach(function (entry) {\n                                    $('.search-results').highlight(entry);\n                                });\n                            });\n\n                        </script>\n@endsection"
  },
  {
    "path": "resources/views/questions/all-questions.blade.php",
    "content": "@extends('layouts.base')\n@section('title','问答-所有问题')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">所有问题</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"file text icon\"></i>\n                            所有问题</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n\n                        @forelse($questions as $v)\n                            <div class=\"item\">\n                                <div class=\"right floated content labels\">\n                                    @foreach($v->tags as $tag)\n                                        <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\">\n                                            <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                        </a>\n                                    @endforeach\n                                    <span class=\"labels-time\" title=\"回复数\">{{ $v->reply_count }}</span>/\n                                    <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                    <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                    <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                </div>\n                                <img class=\"ui avatar image avatar-b popover\"\n                                     onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                     alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                     src=\"{{ $v->user->avatar }}\">\n                                <div class=\"content\">\n                                    <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                                        <div class=\"ui popover\" style=\"font-weight: bold\"\n                                             data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                    </a>\n                                    {{ str_limit($v->description, 70) }}\n                                </div>\n                            </div>\n                        @empty\n                            <div class=\"ui feed no-messages\">\n                                <p class=\"text-center alert alert-info\">!\n                                    (=￣ω￣=) ··· 还没有数据噢。\n                                </p>\n                            </div>\n                        @endforelse\n                        <div class=\"panel-footer \" style=\"display: block;\">\n                            <!-- Pager -->\n                            {{ $questions->appends(request()->except('page'))->links() }}\n                        </div>\n                    </div>\n\n\n                </div>\n\n\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/questions/create.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    发起问题\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('question.all') }}\" class=\"section\">问答</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">发起问题</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"ui warning message\">\n                    <ul class=\"list\">\n                        <li>1.请文明提问。</li>\n                        <li>2.提交问题前，请先搜索，如重复问题将删除。</li>\n                    </ul>\n                </div>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" action=\"{{ route('questions.store') }}\" method=\"post\">\n                    {{ csrf_field() }}\n                    <div class=\"field\">\n                        <label>所属分类</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"category_id\" value=\"{{ old('category_id') }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">请选择分类</div>\n                            <div class=\"menu\">\n                                @foreach($catList as $v)\n                                    <div class=\"item\" data-value=\"{{ $v->id }}\">{{ $v->name }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标签</label>\n                        <div class=\"ui multiple selection dropdown\" multiple=\"2\">\n                            <!-- This will receive comma separated value like OH,TX,WY !-->\n                            <input name=\"tags\" type=\"hidden\" value=\"{{ old('tags') }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">选择标签</div>\n                            <div class=\"menu\">\n                                @foreach($tagList as  $tag)\n                                    <div class=\"item\" data-value=\"{{ $tag->id }}\">{{ $tag->tag }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标题</label>\n                        <input type=\"text\" name=\"title\" placeholder=\"标题\" value=\"{{ old('title') }}\">\n\n                        @if ($errors->has('title'))\n                            <div class=\"ui compact red message\" style=\"padding: 0px 12px 0px 0px;\">\n                                <p><i class=\"icon warning\"></i>{{ $errors->first('title') }}</p>\n                            </div>\n                        @endif\n                    </div>\n                    <div class=\"field\">\n                        <label>简单描述</label>\n                        <textarea rows=\"2\" name=\"description\">{{ old('description') }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>内容</label>\n                        <textarea id=\"topic_content\" name=\"content\"></textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>是否保存为草稿</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"is_draft\" value=\"{{ old('is_draft')?:'no' }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">是否保存为草稿</div>\n                            <div class=\"menu\">\n                                <div class=\"item\" data-value=\"no\">否</div>\n                                <div class=\"item\" data-value=\"yes\">是</div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui buttons\">\n                        <button class=\"ui orange button\" type=\"reset\">重置</button>\n                        <div class=\"or\"></div>\n                        <button class=\"ui positive button\" type=\"submit\">提交</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新文章</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentArticles as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新问答</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentQuestions as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui sticky\">\n                <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n                    <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                        <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n                    </div>\n                    <div class=\"extra\">\n                        @foreach($tags as $tag)\n                            <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                               class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                        @endforeach\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n    </div>\n@endsection\n\n@section('script')\n    {{--<script src=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.js\"></script>--}}\n    <script src= {{ mix('assets/js/editor.js') }}></script>\n    <link rel=\"stylesheet\" href=\"{{ mix('assets/css/editor.css') }}\">\n    {{--<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.css\">--}}\n    <script>\n        $(document).ready(function () {\n            /*Markdown ------------start */\n            var simplemde = new SimpleMDE({\n                spellChecker: false,\n                autosave: {\n                    enabled: true,\n                    delay: 2000,\n                    unique_id: \"topic_content{{ isset($info) ? $info->id . '_' . str_slug($info->updated_at) : '' }}\"\n                },\n                forceSync: true,\n                tabSize: 4,\n                toolbar: [\n                    \"bold\", \"italic\", \"heading\", \"|\", \"quote\", \"code\", \"table\",\n                    \"horizontal-rule\", \"unordered-list\", \"ordered-list\", \"|\",\n                    \"link\", \"image\", \"|\", \"side-by-side\", 'fullscreen', \"|\",\n                    {\n                        name: \"guide\",\n                        action: function customFunction(editor) {\n                            var win = window.open('https://github.com/riku/Markdown-Syntax-CN/blob/master/syntax.md', '_blank');\n                            if (win) {\n                                //Browser has allowed it to be opened\n                                win.focus();\n                            } else {\n                                //Browser has blocked it\n                                alert('Please allow popups for this website');\n                            }\n                        },\n                        className: \"fa fa-info-circle\",\n                        title: \"Markdown 语法！\",\n                    },\n                ],\n                element: document.getElementById(\"topic_content\"),\n            });\n\n            inlineAttachment.editors.codemirror4.attach(simplemde.codemirror, {\n                uploadUrl: Laravel.uploadImage,\n                extraParams: {\n                    '_token': Laravel.csrfToken,\n                },\n                onFileUploadResponse: function (xhr) {\n                    var result = JSON.parse(xhr.responseText),\n                        filename = result[this.settings.jsonFieldName];\n\n                    if (result && filename) {\n                        var newValue;\n                        if (typeof this.settings.urlText === 'function') {\n                            newValue = this.settings.urlText.call(this, filename, result);\n                        } else {\n                            newValue = this.settings.urlText.replace(this.filenameTag, filename);\n                        }\n                        var text = this.editor.getValue().replace(this.lastValue, newValue);\n                        this.editor.setValue(text);\n                        this.settings.onFileUploaded.call(this, filename);\n                    }\n                    return false;\n                }\n            });\n        });\n    </script>\n    @include('form-validate.auth.v-topic')\n@endsection"
  },
  {
    "path": "resources/views/questions/edit.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    更新问题\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('question.all') }}\" class=\"section\">问答</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">更新问题</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"ui warning message\">\n                    <ul class=\"list\">\n                        <li>1.请文明提问。</li>\n                        <li>2.提交问题前，请先搜索，如重复问题将删除。</li>\n                    </ul>\n                </div>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" action=\"{{ route('questions.update' ,['id' => $info->id]) }}\" method=\"post\">\n                    {{ csrf_field() }}\n                    <div class=\"field\">\n                        <label>所属分类</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"category_id\" value=\"{{ $info->category_id }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">{{ $info->category_id }}</div>\n                            <div class=\"menu\">\n                                @foreach($catList as $v)\n                                    <div class=\"item\" data-value=\"{{ $v->id }}\">{{ $v->name }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标签</label>\n                        <div class=\"ui multiple selection dropdown\" multiple=\"2\">\n                            <!-- This will receive comma separated value like OH,TX,WY !-->\n                            <input name=\"tags\" type=\"hidden\" value=\"{{ $infoTag }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">选择标签</div>\n                            <div class=\"menu\">\n                                @foreach($tagList as  $tag)\n                                    <div class=\"item\" data-value=\"{{ $tag->id }}\">{{ $tag->tag }}</div>\n                                @endforeach\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label>标题</label>\n                        <input type=\"text\" name=\"title\" placeholder=\"标题\" value=\"{{ $info->title }}\">\n\n                        @if ($errors->has('title'))\n                            <div class=\"ui compact red message\" style=\"padding: 0px 12px 0px 0px;\">\n                                <p><i class=\"icon warning\"></i>{{ $errors->first('title') }}</p>\n                            </div>\n                        @endif\n                    </div>\n                    <div class=\"field\">\n                        <label>简单描述</label>\n                        <textarea rows=\"2\" name=\"description\">{{ $info->description }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>内容</label>\n                        <textarea id=\"topic_content\" name=\"content\">{{ json_decode($info->content)->raw }}</textarea>\n                    </div>\n                    <div class=\"field\">\n                        <label>是否保存为草稿</label>\n                        <div class=\"ui selection dropdown\">\n                            <input type=\"hidden\" name=\"is_draft\" value=\"{{ $info->is_draft }}\">\n                            <input type=\"hidden\" name=\"slug\" value=\"{{ $info->slug }}\">\n                            <i class=\"dropdown icon\"></i>\n                            <div class=\"default text\">是否保存为草稿</div>\n                            <div class=\"menu\">\n                                <div class=\"item\" data-value=\"no\">否</div>\n                                <div class=\"item\" data-value=\"yes\">是</div>\n                            </div>\n                        </div>\n                    </div>\n\n                    <div class=\"ui buttons\">\n                        <button class=\"ui orange button\" type=\"reset\">重置</button>\n                        <div class=\"or\"></div>\n                        <button class=\"ui positive button\" type=\"submit\">提交</button>\n                    </div>\n                </form>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新文章</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentArticles as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui segments\">\n                <div class=\"ui segment\">\n                    <p><i class=\"wait icon\"></i>最新问答</p>\n                </div>\n                <div class=\"ui secondary violet segment\">\n                    <div class=\"ui list\">\n                        @foreach( $recentQuestions as $k=>$v)\n                            <div class=\" black-font\">\n                                <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                                   data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                            </div>\n                        @endforeach\n\n                    </div>\n                </div>\n            </div>\n            <div class=\"ui sticky\">\n                <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n                    <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                        <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n                    </div>\n                    <div class=\"extra\">\n                        @foreach($tags as $tag)\n                            <a href=\"{{ url('tag',['slug' => $tag->slug]) }}\"\n                               class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                        @endforeach\n                    </div>\n\n                </div>\n            </div>\n        </div>\n\n    </div>\n@endsection\n\n@section('script')\n    {{--<script src=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.js\"></script>--}}\n    <script src = {{ mix('assets/js/editor.js') }}></script>\n    <link rel=\"stylesheet\" href=\"{{ mix('assets/css/editor.css') }}\">\n    {{--<link rel=\"stylesheet\" href=\"/assets/dashboard/js/plugins/simplemde/latest/simplemde.min.css\">--}}\n    <script>\n        $(document).ready(function () {\n            /*Markdown ------------start */\n            var simplemde = new SimpleMDE({\n                spellChecker: false,\n                autosave: {\n                    enabled: true,\n                    delay: 2000,\n                    unique_id: \"topic_content{{ isset($info) ? $info->id . '_' . str_slug($info->updated_at) : '' }}\"\n                },\n                forceSync: true,\n                tabSize: 4,\n                toolbar: [\n                    \"bold\", \"italic\", \"heading\", \"|\", \"quote\", \"code\", \"table\",\n                    \"horizontal-rule\", \"unordered-list\", \"ordered-list\", \"|\",\n                    \"link\", \"image\", \"|\", \"side-by-side\", 'fullscreen', \"|\",\n                    {\n                        name: \"guide\",\n                        action: function customFunction(editor) {\n                            var win = window.open('https://github.com/riku/Markdown-Syntax-CN/blob/master/syntax.md', '_blank');\n                            if (win) {\n                                //Browser has allowed it to be opened\n                                win.focus();\n                            } else {\n                                //Browser has blocked it\n                                alert('Please allow popups for this website');\n                            }\n                        },\n                        className: \"fa fa-info-circle\",\n                        title: \"Markdown 语法！\",\n                    },\n                ],\n                element: document.getElementById(\"topic_content\"),\n            });\n\n        inlineAttachment.editors.codemirror4.attach(simplemde.codemirror, {\n            uploadUrl: Laravel.uploadImage,\n            extraParams: {\n                '_token': Laravel.csrfToken,\n            },\n            onFileUploadResponse: function(xhr) {\n                var result = JSON.parse(xhr.responseText),\n                    filename = result[this.settings.jsonFieldName];\n\n                if (result && filename) {\n                    var newValue;\n                    if (typeof this.settings.urlText === 'function') {\n                        newValue = this.settings.urlText.call(this, filename, result);\n                    } else {\n                        newValue = this.settings.urlText.replace(this.filenameTag, filename);\n                    }\n                    var text = this.editor.getValue().replace(this.lastValue, newValue);\n                    this.editor.setValue(text);\n                    this.settings.onFileUploaded.call(this, filename);\n                }\n                return false;\n            }\n        });\n        });\n    </script>\n    @include('form-validate.auth.v-topic')\n@endsection"
  },
  {
    "path": "resources/views/questions/partials/info-right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\"> {{ config('codehaoshi.notice.info_page_article') }}</span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui segment\">\n        <div class=\"ui three statistics\">\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->vote_count }}</div>\n                <div class=\"label\">点赞</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->view_count }}</div>\n                <div class=\"label\">浏览</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">{{ $info->reply_count }}</div>\n                <div class=\"label\">回复</div>\n            </div>\n        </div>\n\n        <br>\n    </div>\n</div>\n<div class=\"ui stackable cards\">\n    <div class=\"ui  card column author-box grid\" style=\"margin-top: 20px;\">\n\n        <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n            <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 问题作者</div>\n        </div>\n\n        <a href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\" class=\"avatar-link \" >\n            <img class=\"ui centered circular tiny image popover\" data-content=\"{{ $info->user->user_name }}\"\n                 src=\"{{ $info->user->avatar }}\"/>\n        </a>\n\n        <div class=\"extra content ui center aligned container\">\n            <a class=\"header\" href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\">{{ $info->user->user_name }}</a>\n            <div class=\"description\">{{ $info->user->introduction }}</div>\n        </div>\n        @if(!Auth::check())\n            <vote-button is-checked=\"false\" user=\"{{ $info->user_id }}\"></vote-button>\n        @else\n            <vote-button is-checked=\"true\" user=\"{{ $info->user_id }}\"></vote-button>\n        @endif\n\n    </div>\n</div>\n<div class=\"ui segments\">\n    <div class=\"ui segment\">\n        <p><i class=\"wait icon\"></i>最新问题</p>\n    </div>\n    <div class=\"ui secondary violet segment sticky\">\n        <div class=\"ui list\">\n            @foreach( $recentQuestions as $k=>$v)\n                <div class=\" black-font\">\n                    <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                       data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                </div>\n            @endforeach\n\n        </div>\n    </div>\n</div>\n\n{{--<div class=\"ui sticky\" style=\"padding-top:20px\">--}}\n{{--<div class=\"ui  card column author-box grid \"  id=\"toc\">--}}\n{{--</div>--}}\n{{--</div>--}}\n{{--<div class=\"ui sticky  card column author-box grid \" id=\"toc\" style=\"min-height: 200px\"></div>--}}\n<div class=\"ui sticky\" style=\"padding-top:20px;\">\n    <div class=\"ui  card column author-box grid \" id=\"toc\"></div>\n</div>\n\n"
  },
  {
    "path": "resources/views/questions/partials/question-info-form.blade.php",
    "content": "<div class=\"ui readme markdown-body content-body\">\n    {!! $info->content['html'] !!}\n</div>"
  },
  {
    "path": "resources/views/questions/partials/question-list-form.blade.php",
    "content": "<ul class=\"sorted_table tree \">\n    <div class=\"jscroll\">\n        <div class=\"ui celled list\">\n            @forelse($questions as $v)\n                <div class=\"item\">\n                    <div class=\"right floated content labels\">\n                        @foreach($v->tags as $tag)\n                            @break($loop->index >0)\n                            <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\">\n                                <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                            </a>\n                        @endforeach\n                        <span class=\"labels-time\" title=\"回复数\">{{ $v->reply_count }}</span>/\n                        <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                        <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                        <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                    </div>\n                    <img class=\"ui avatar image avatar-b popover\"\n                         onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                         alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                         src=\"{{ $v->user->avatar }}\">\n                    <div class=\"content\">\n                        <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"no_marakdown\">\n                            <div class=\"ui popover\" style=\"font-weight: bold\"\n                                 data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 60) }}</div>\n                        </a>\n                        {{ str_limit($v->description, 60) }}\n                    </div>\n                </div>\n            @empty\n                <div class=\"ui feed no-messages\">\n                    <p class=\"text-center alert alert-info\">!\n                        (=￣ω￣=) ··· 还没有数据噢。\n                    </p>\n                </div>\n            @endforelse\n            <div class=\"panel-footer \" style=\"display: block;\">\n                <!-- Pager -->\n                {{ $questions->appends(request()->except('page'))->links() }}\n            </div>\n        </div>\n    </div>\n</ul>\n"
  },
  {
    "path": "resources/views/questions/partials/right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"fire icon\"></i>热门问题</p>\n        </div>\n        <div class=\"ui secondary violet segment\">\n            <div class=\"ui list\">\n                @foreach( $hotQuestions as $k=>$v)\n                    <div class=\" black-font\">\n                        <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                           data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                    </div>\n                @endforeach\n            </div>\n        </div>\n    </div>\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"wait icon\"></i>最新问题</p>\n        </div>\n        <div class=\"ui secondary violet segment sticky\">\n            <div class=\"ui list\">\n                @foreach( $recentQuestions as $k=>$v)\n                    <div class=\" black-font\">\n                        <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\" class=\"ui titlepop\"\n                           data-content=\"{{ $v->title }}\">{{ $k+1 }}.{{ $v->title }}</a>\n                    </div>\n                @endforeach\n\n            </div>\n        </div>\n    </div>\n    <div class=\"ui sticky\">\n        <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n            <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签墙</div>\n            </div>\n            <div class=\"extra\">\n                @foreach($tags as $tag)\n                    <a href=\"{{ url('tag',['tag' => $tag->slug, 'type' => 'q']) }}\"\n                       class=\"ui  {{ getTagWeight($tag->weight) }} {{ $tag->style }} label lable-list\">{{ $tag->tag }}</a>\n                @endforeach\n            </div>\n\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/questions/question-list.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $category->name }}-问答-问题分类\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('question.all') }}\" class=\"section\">问题</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">{{ $category->name }}</div>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"ui centered grid container stackable\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui  segment\">\n                <div class=\"content extra-padding\">\n                    <div class=\"book header\">\n                        <div class=\"ui items\">\n                            <div class=\"item\">\n                                <div class=\"image\">\n                                    <img class=\"ui image image-shadow cat-article-image \"\n                                         src=\"{{ $category->image_url }}\">\n                                </div>\n                                <div class=\"content\">\n                                    <div class=\"header\" style=\"width:100%\"> {{ $category->name }}</div>\n                                    <div class=\"description\">\n                                        <p><b class=\"ui text orange\">问题数量：{{ $category->question_count }} </b></p>\n                                        {{ $category->description }}\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui  attached tabular menu \">\n                        <span class=\"item active \" > <i class=\"grey content icon\"></i> 问题列表 </span>\n                    </div>\n                    <br>\n                    @include('questions.partials.question-list-form')\n                </div>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n            @include('questions.partials.right-item')\n        </div>\n\n    </div>\n\n@endsection"
  },
  {
    "path": "resources/views/questions/show.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $info->title }}-问答-{{ $info->category->name }}-问题详情\n@endsection\n@section('meta')\n    <meta name=\"keywords\" content=\"{{ $info->title }}\"/>\n    <meta name=\"description\" content=\"{{ $info->description }}\"/>\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ route('question.all') }}\" class=\"section\">问答</a>\n                <span class=\"divider\">/</span>\n                <a href=\"{{ url('/q/'.$info->category->slug) }}\" class=\"section\">{{ $info->category->name }}</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">{{ $info->title }}</div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <h1>\n                        <span style=\"line-height: 34px;\">{{ $info->title }}</span>\n                    </h1>\n                    <p class=\"book-article-meta ui description\">\n                        <i class=\"attach icon\"></i>\n                        {{ $info->description }}\n                    </p>\n                    <p class=\"book-article-meta description\">\n                        <i class=\"wait icon\"></i> <span class=\"header\">Post on </span> <span\n                                class=\"default-color-a\">{{ substr($info->created_at, 0, -8) }}</span>\n                        <span class=\"header\">by</span>\n                        <a href=\"{{ route('user_center', ['user_name' => $info->user->user_name]) }}\"><i\n                                    class=\"icon user\"></i> <span class=\"ui popover default-color-a\"\n                                                                 data-title=\"{{ $info->user->user_name }}\"\n                                                                 data-content=\"{{ $info->user->introduction }}\">{{ $info->user->user_name }}</span></a>\n                    </p>\n                </div>\n                <div class=\"ui divider\"></div>\n                <div class=\"ui readme markdown-body content-body\">\n                    <parse content=\"{{ json_decode($info->content)->raw  }}\"></parse>\n                    <div class=\"ui info message\">\n                        <div class=\"ui list\">\n                            <div class=\"item\">\n                                <i class=\"folder open grey icon\"></i>\n                                <div class=\"content\">\n                                    <span class=\"black-font\">分类:</span>\n                                    <a href=\"{{ url('/q/'.$info->category->slug) }}\" class=\"ui popover\"\n                                       style=\"color: #2C662D\"\n                                       data-content=\"{{ $info->category->name }}\">{{ $info->category->name }}</a>\n                                </div>\n                            </div>\n                            <div class=\"item\">\n                                <i class=\" tags grey icon\"></i>\n                                <div class=\"content\"><span class=\"black-font\">标签:</span>\n                                    <span class=\"info-labels\">\n                                        @foreach($info->tags as $tag)\n                                            <a class=\"item ui popover\"\n                                               href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\"\n                                               data-content=\"{{ $tag->tag }}\">{{ $tag->tag }}</a>\n                                        @endforeach\n                                    </span>\n                                </div>\n                            </div>\n                            <div class=\"item\">\n                                <i class=\"warning sign orange icon\"></i>\n                                <div class=\"content\"><span class=\"black-font\">原创声明:</span> <span>如无特别说明，均为作者原创问题。未经允许，不得转载!</span>\n                                </div>\n                            </div>\n                        </div>\n                        @if( Auth::check() && $authUser->is_admin == 'yes' && $authUser->hasRole('supper_admin'))\n                            <a href=\"{{ route('questions.edit', ['slug' => $info->id] ) }}\" class=\"ui teal button\"> <i class=\"edit icon\"></i> 修改 </a>\n                        @endif\n                    </div>\n                </div>\n            </div>\n            <div style=\"min-height: 30px\">\n                @unless(!$prev)\n                    <a class=\"ui basic button small  popover\" data-content=\"{{ $prev['title'] }}\"\n                       href=\"{{ route('question.show', ['slug' => $prev['slug']]) }}\"><i class=\"icon arrow left\"></i>\n                        上个问题</a>\n                @endunless\n\n                @unless(!$next)\n                    <a class=\"ui basic button small  popover right floated\" data-content=\"{{ $next['title'] }}\"\n                       href=\"{{ route('question.show', ['slug' => $next['slug']]) }}\"><i class=\"icon arrow right\"></i>\n                        下个问题</a>\n                @endunless\n            </div>\n            <div class=\"ui message basic\">\n                @if(config('codehaoshi.social_share.article_share'))\n                    <div class=\"social-share share-component\"\n                         data-title=\"{{ $info->title }}\"\n                         data-description=\"{{ $info->title }}\"\n                         {{ config('codehaoshi.social_share.sites') ? \"data-sites=\" . config('codehaoshi.social_share.sites') : '' }}\n                         {{ config('codehaoshi.social_share.mobile_sites') ? \"data-mobile-sites=\" . config('codehaoshi.social_share.mobile_sites') : '' }}\n                         initialized>\n                    </div>\n                @endif\n                <div class=\"clearfix\"></div>\n            </div>\n\n            @if(!Auth::check())\n                <reply question-id=\"{{ $info->id }}\" is-checked=\"false\"></reply>\n            @else\n                <reply user-avatar=\"{{ $authUser->avatar }}\" userid=\"{{ $authUser->id }}\" question-id=\"{{ $info->id }}\"\n                       isadmin=\"{{ $authUser->hasRole('supper_admin') }}\"\n                       is-checked=\"true\"></reply>\n            @endif\n        </div>\n        <div class=\"four wide column\">\n            @include('questions.partials.info-right-item')\n        </div>\n    </div>\n@endsection\n\n"
  },
  {
    "path": "resources/views/static-pages/article/all-articles.blade.php",
    "content": "@extends('layouts.base')\n@section('title','所有文章')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">资源</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"file text icon\"></i>\n                            所有文章</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui violet horizontal label\">php</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">php workmen 的正确使用方式</div>\n                                </a>\n                                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui green horizontal label\">php</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">php workmen 的正确使用方式</div>\n                                </a>\n                                <span class=\"labels-p\"> workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .</span>\n\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui yellow horizontal label\">php</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">php workmen 的正确使用方式</div>\n                                </a>\n                                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui violet horizontal label\">php</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">php workmen 的正确使用方式</div>\n                                </a>\n                                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n                            </div>\n                        </div>\n\n\n                    </div>\n\n\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/article/article-info.blade.php",
    "content": "@extends('layouts.base')\n@section('title','文章详情')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/all_articles\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <a href=\"articles\" class=\"section\">php编程</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">php workenman 如何正确使用</div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <h1>\n                        <span style=\"line-height: 34px;\">php workenman 如何正确使用</span>\n                    </h1>\n                    <p class=\"book-article-meta ui description\">\n                        <i class=\"attach icon\"></i>\n                        workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . . workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n                    </p>\n                    <p class=\"book-article-meta description\">\n                        <i class=\"wait icon\"></i> <span class=\"header\">Post on </span> <span class=\"default-color-a\">2017年3月1日</span>\n                        <span class=\"header\">by</span>\n                        <a href=\"\"><i class=\"icon user\"></i> <span class=\"ui popover default-color-a\" data-title=\"ucer\"\n                                                                   data-content=\"好好学习，天天向上\">ucer</span></a>\n                    </p>\n                </div>\n                <div class=\"ui divider\"></div>\n                @include('static-pages.article.partials.article-info-form')\n            </div>\n            <div>\n                <a class=\"ui basic button small  popover\" data-content=\"1.4. 如何正确阅读本书？\" href=\"\"><i class=\"icon arrow left\"></i> 上一篇</a>\n                <a class=\"ui basic button small popover right floated\" data-content=\"1.6. 发行说明\" href=\"\">下一篇 <i class=\"icon arrow right\"></i></a>\n            </div>\n            <div class=\"ui message basic\">\n                <div class=\"social-share share-component\">\n                    分享\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div class=\"ui message basic centerd voted-box\">\n                <div class=\"buttons\">\n                    <div class=\"ui button kb-star-big basic teal  login-required\" data-act=\"star\" data-id=\"501\"><i class=\"icon thumbs up\"></i> <span class=\"state\">点赞</span></div>\n                </div>\n                <div class=\"voted-users\">\n                    <a href=\"https://fsdhub.com/wph3629709\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/2491_1501131226.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:9rFFU7YeTxuotnTpYJE11q2PdJI=\">\n                    </a>\n                    <a href=\"https://fsdhub.com/hebin\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1049_1495468400.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:5yhyWspv9uYxpUpyNnsoVa8lFGk=\">\n                    </a>\n                    <a href=\"https://fsdhub.com/Mike_Maldini\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1177_1496197821.png?imageView2/1/w/100/h/100\">\n                    </a>\n                    <a href=\"https://fsdhub.com/zhoujiping\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/921_1495068558.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:xuMjMIgElR58cWPB39dQb14lZQ0=\">\n                    </a>\n                </div>\n            </div>\n            @include('static-pages.article.partials.article-comment')\n        </div>\n        <div class=\"four wide column\">\n            @include('static-pages.article.partials.info-right-item')\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/article/article-list.blade.php",
    "content": "@extends('layouts.base')\n@section('title','文章列表')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/all_articles\" class=\"section\">资源</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">php编程</div>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"ui centered grid container stackable\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui  segment\">\n                <div class=\"content extra-padding\">\n                    <div class=\"book header\">\n                        <div class=\"ui items\">\n                            <div class=\"item\">\n                                <div class=\"image\">\n                                    <img class=\"ui image image-shadow cat-article-image \"\n                                         src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                                </div>\n                                <div class=\"content\">\n                                    <div class=\"header\" style=\"width:100%\"> 编程语言</div>\n                                    <div class=\"description\">\n                                        <p><b class=\"ui text orange\">文章数量：69 </b></p>\n                                        java、php、日常记java、php、日常记录java、php、日常记录录\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui  attached tabular menu violet\">\n                        <span class=\"item active violet\" href=\"\"> <i class=\"grey content icon\"></i> 文章列表 </span>\n                    </div>\n                    <br>\n                    @include('static-pages.article.partials.article-list-form')\n                </div>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n            @include('static-pages.article.partials.right-item')\n        </div>\n\n    </div>\n\n@endsection"
  },
  {
    "path": "resources/views/static-pages/article/partials/article-comment.blade.php",
    "content": "<div class=\"ui threaded comments comment-list \">\n\n    <div id=\"comments\"></div>\n\n    <div class=\"ui divider horizontal grey\"><i class=\"icon comments\"></i> 评论数量: 1</div>\n\n    <div class=\"comments-feed\">\n        <div class=\"comment comment-436\">\n            <div id=\"comments\"></div>\n            <a class=\"avatar\" href=\"https://fsdhub.com/iHero\">\n                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1661_1498013381.jpeg?imageView2/1/w/100/h/100&amp;e=1501301149&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:8RTZu1zmRq2stdIiQmlyQmNIEwU=\">\n            </a>\n            <div class=\"content\">\n                <div class=\"comment-header\">\n                    <div class=\"meta\">\n                        <a class=\"author\" href=\"https://fsdhub.com/iHero\">iHero</a>\n                        <div class=\"metadata\">\n                            <span class=\"date\">1个月前</span>\n                        </div>\n                    </div>\n                    <div class=\"reaction\">\n                        <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                            <a href=\"javascript:void(0)\" title=\"回复 iHero\"\n                               class=\"ui teal reply-btn\" style=\"display: none;\"><i class=\"icon reply\"></i></a>\n\n                            <div class=\"menu\" tabindex=\"-1\"></div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"text comment-body markdown-reply\">\n                    <p>主机上的提示符 “&gt;” 是怎么修改的？ </p>\n                </div>\n            </div>\n        </div>\n        <div class=\"comment comment-436\">\n            <div id=\"comments-436\"></div>\n            <a class=\"avatar\" href=\"https://fsdhub.com/iHero\">\n                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1661_1498013381.jpeg?imageView2/1/w/100/h/100&amp;e=1501301149&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:8RTZu1zmRq2stdIiQmlyQmNIEwU=\">\n            </a>\n            <div class=\"content\">\n                <div class=\"comment-header\">\n                    <div class=\"meta\">\n                        <a class=\"author\" href=\"https://fsdhub.com/iHero\">iHero</a>\n                        <div class=\"metadata\">\n                            <span class=\"date\">1个月前</span>\n                        </div>\n                    </div>\n                    <div class=\"reaction\">\n                        <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                            <a href=\"javascript:void(0)\" onclick=\"replyOne('iHero');\" title=\"回复 iHero\"\n                               class=\"ui teal reply-btn\" style=\"display: none;\"><i class=\"icon reply\"></i></a>\n                            <div class=\"menu\" tabindex=\"-1\"></div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"text comment-body markdown-reply\">\n                    <p>主机上的提示符 “&gt;” 是怎么修改的？ </p>\n                </div>\n            </div>\n        </div>\n    </div>\n    <br>\n\n    <div class=\"\">\n        @if(!Auth::check())\n            <h3 class=\"ui header\">\n                <a href=\"\" class=\"login-required\">请登录</a>\n            </h3>\n        @endif\n        <div class=\"ui warning message\">\n            <i class=\"icon warning\"></i> 支持 markdown 语法、支持表情,请务进行语言攻击。\n        </div>\n\n        <form class=\"ui reply form\" method=\"POST\" action=\"{{ route('replies.store') }}\"\n              accept-charset=\"UTF-8\" id=\"comment-composing-form\">\n\n            <input type=\"hidden\" name=\"article_id\" value=\"{{ $info->id }}\"/>\n\n            <div class=\"field\">\n                    <textarea name=\"content\" id=\"comment-composing-box\" required=\"\"\n                              class=\"@if(!Auth::check()) login-required @endif\"></textarea>\n            </div>\n            <button class=\"ui primary labeled icon button @if(!Auth::check()) login-required @endif\" type=\"submit\"\n                    id=\"comment-composing-submit\">\n                <i class=\"icon comment\"></i> 评论\n            </button>\n        </form>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/article/partials/article-info-form.blade.php",
    "content": "<div class=\"ui readme markdown-body content-body\">\n    {!! $info->content['html'] !!}\n    <div class=\"ui success message\">\n        <div class=\"ui list\">\n            <div class=\"item\">\n                <i class=\"folder open grey icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">分类:</span> <span>编程语言</span></div>\n            </div>\n            <div class=\"item\">\n                <i class=\" tags grey icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">标签:</span>\n                    <span class=\"info-labels\">\n                        <a href=\"\">php</a>\n                        <a href=\"\">java</a>\n                    </span>\n                </div>\n            </div>\n            <div class=\"item\">\n                <i class=\"warning sign orange icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">原创声明:</span> <span>如无特别说明，均为作者原创文章。未经允许，不得转载!</span></div>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/article/partials/article-list-form.blade.php",
    "content": "<ul class=\"sorted_table tree \">\n    <div class=\"ui celled list\">\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui violet horizontal label\">php</div>\n                </a>\n                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"articleinfo\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">php workmen 的正确使用方式</div>\n                </a>\n                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php</div>\n                </a>\n                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">php workmen 的正确使用方式</div>\n                </a>\n                <span class=\"labels-p\"> workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui yellow horizontal label\">php</div>\n                </a>\n                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">php workmen 的正确使用方式</div>\n                </a>\n                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui violet horizontal label\">php</div>\n                </a>\n                <span class=\"labels-time\" title=\"评论数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n                 src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">php workmen 的正确使用方式</div>\n                </a>\n                workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n            </div>\n        </div>\n    </div>\n</ul>\n"
  },
  {
    "path": "resources/views/static-pages/article/partials/info-right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">一坑一成长.天天踩坑天天长! </span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui segment\">\n        <div class=\"ui three statistics\">\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">4</div>\n                <div class=\"label\">点赞</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">1859</div>\n                <div class=\"label\">浏览</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">1</div>\n                <div class=\"label\">评论</div>\n            </div>\n        </div>\n\n        <br>\n    </div>\n</div>\n    <div class=\"ui stackable cards\">\n        <div class=\"ui  card column author-box grid\" style=\"margin-top: 20px;\">\n\n            <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 作者</div>\n            </div>\n\n            <a href=\"https://fsdhub.com/Summer\" class=\"avatar-link\">\n                <img class=\"ui centered circular tiny image \"\n                     src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&amp;e=1501052322&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:jx9iK89Xd8ZYygJDasJk-1dToV0=\">\n            </a>\n\n            <div class=\"extra content ui center aligned container\">\n                <a class=\"header\" href=\"https://fsdhub.com/Summer\">Ucer</a>\n                <div class=\"description\">Good good study,day day up.</div>\n            </div>\n            <div class=\"extra content\">\n                <button class=\"login-required ui basic teal button fluid follow\" data-act=\"follow\" data-id=\"1\"><span\n                            class=\"state\">关注</span></button>\n            </div>\n\n        </div>\n    </div>\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"fire icon\"></i>最新文章</p>\n        </div>\n        <div class=\"ui secondary violet segment sticky\">\n            <div class=\"ui list\">\n                <div class=\" black-font\">\n                    <a href=\"article_info\">1.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\"black-font\">\n                    <a href=\"article_info\">2.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\" black-font\">\n                    <a href=\"article_info\">3.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"ui sticky  card column author-box grid \"  id=\"toc\"> </div>\n\n"
  },
  {
    "path": "resources/views/static-pages/article/partials/right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">一坑一成长.天天踩坑天天长! </span>\n        </p>\n    </div> {{--notify--}}\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p> <i class=\"fire icon\"></i>热门文章</p>\n        </div>\n        <div class=\"ui secondary violet segment\">\n            <div class=\"ui list\">\n                <div class=\" black-font\">\n                    <a href=\"article_info\">1.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\"black-font\">\n                    <a href=\"article_info\">2.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\" black-font\">\n                    <a href=\"article_info\">3.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui sticky\" >\n        <div class=\"ui  card column  grid\" style=\"margin-top: 20px;\">\n            <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 标签云</div>\n            </div>\n            <div class=\"extra\">\n                <a class=\"ui mini violet label lable-list\">Red</a>\n                <a class=\"ui mini violet label lable-list\">Red</a>\n                <a class=\"ui mini violet label lable-list\">Red</a>\n                <a class=\"ui mini violet label lable-list\">Red</a>\n                <a class=\"ui mini violet label lable-list\">Red</a>\n                <a class=\"ui big green label lable-list\">Red</a>\n                <a class=\"ui teal violet label lable-list\">Red</a>\n                <a class=\"ui teal violet label lable-list\">Red</a>\n                <a class=\"ui teal violet label lable-list\">Red</a>\n\n            </div>\n\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/article/test.blade.php",
    "content": "@extends('layouts.base')\n@section('content')\n    <div class=\"ui centered grid container books-page\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui  segment\">\n                <div class=\"content extra-padding\">\n                    <div class=\"book header\">\n                        <div class=\"ui items\">\n                            <div class=\"item\">\n                                <div class=\"image\">\n                                    <img class=\"ui image image-shadow \"\n                                         src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                                </div>\n                                <div class=\"content\">\n                                    <div class=\"header\" style=\"width:100%\"> 编程语言</div>\n                                    <div class=\"description\">\n                                        <p><b class=\"ui text orange\">文章数量：69 </b></p>\n                                        java、php、日常记java、php、日常记录java、php、日常记录录\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui  attached tabular menu\">\n                        <a class=\"item active\" data-tab=\"first\" href=\"\"> <i class=\"grey content icon\"></i> 文章列表 </a>\n                    </div>\n                    <br>\n                    <ul class=\"sorted_table tree \">\n\n                        <li class=\"item\">\n                            <i class=\"blue folder icon\"></i> 2017-03\n                            <ol class=\"chapter-container\">\n                                <div class=\"ui relaxed divided items\">\n                                    <li class=\"item\">\n                                        <div class=\"ui small image\">\n                                            <img src=\"http://www.semantic-ui.cn/examples/assets/images/wireframe/image.png\">\n                                        </div>\n                                        <div class=\"content\">\n                                            <a class=\"header\">Content Header</a>\n                                            <div class=\"meta\">\n                                                <a>Date</a>\n                                                <a>Category</a>\n                                            </div>\n                                            <div class=\"description\">\n                                                A description which may flow for several lines and give context to the\n                                                content.\n                                            </div>\n                                            <div class=\"extra\">\n                                                <div class=\"ui right floated primary button\">\n                                                    Primary\n                                                    <i class=\"right chevron icon\"></i>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </li>\n                                    <li class=\"item\">\n                                        <div class=\"ui small image\">\n                                            <img src=\"http://www.semantic-ui.cn/examples/assets/images/wireframe/image.png\">\n                                        </div>\n                                        <div class=\"content\">\n                                            <a class=\"header\">Content Header</a>\n                                            <div class=\"meta\">\n                                                <a>Date</a>\n                                                <a>Category</a>\n                                            </div>\n                                            <div class=\"description\">\n                                                A description which may flow for several lines and give context to the\n                                                content.\n                                            </div>\n                                            <div class=\"extra\">\n                                                <div class=\"ui right floated primary button\">\n                                                    Primary\n                                                    <i class=\"right chevron icon\"></i>\n                                                </div>\n                                            </div>\n                                        </div>\n                                    </li>\n                                </div>\n                                <li class=\"item\">\n                                    <i class=\"grey file text outline icon\"></i>\n                                    <a href=\"\" class=\"\">\n                                        <div class=\"ui green horizontal small label\">php</div>\n                                        1.1. 序言 </a>\n                                    <span class=\"pull-right ui text grey\"> <i class=\"icon lock \"></i> </span>\n                                </li>\n                            </ol>\n                        </li>\n                    </ul>\n                </div>\n            </div>\n        </div>\n\n        <div class=\"four wide column\"></div>\n\n    </div>\n\n@endsection"
  },
  {
    "path": "resources/views/static-pages/auth/login.blade.php",
    "content": "@extends('layouts.base')\n@section('title','用户登录')\n@section('style')\n@endsection\n\n\n@section('content')\n    <div class=\"ui  aligned center aligned grid register\">\n        <div class=\"column reg\">\n            <form class=\"ui large form\">\n                <div class=\"ui stacked segment\">\n                    <div class=\"field\">\n                        <label class=\"auth-label\">账号:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"user icon\"></i>\n                            <input type=\"text\" name=\"email\" placeholder=\"邮箱\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">密码：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password\" placeholder=\"\">\n                        </div>\n                    </div>\n                    <div class=\"ui fluid   ginfo submit button\">登录</div>\n                    <div class=\"row thirdlogin\">\n                        <a class=\"info-color-a left\" href=\"\"><i class=\"github icon\"></i> <span class=\"icon-no\">使用github登录</span></a>\n                        <a class=\"info-color-a right\" href=\"\"><i class=\"github icon\"></i> <span class=\"icon-no\">使用github登录</span></a>\n                    </div>\n                </div>\n\n                <div class=\"ui error message\"></div>\n\n            </form>\n\n            <div class=\"ui message\">\n                忘记密码?<a href=\"\">找回密码</a>\n            </div>\n        </div>\n    </div>\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n@endsection\n\n"
  },
  {
    "path": "resources/views/static-pages/auth/register.blade.php",
    "content": "@extends('layouts.base')\n@section('title','用户注册')\n@section('style')\n@endsection\n\n\n@section('content')\n    <div class=\"ui  aligned center aligned grid register\">\n        <div class=\"column reg\">\n            <form class=\"ui large form\">\n                <div class=\"ui stacked segment\">\n                    <div class=\"field\">\n                        <label class=\"auth-label\">用户名:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"user icon\"></i>\n                            <input type=\"text\" name=\"user_name\" placeholder=\"用户名英文或数字组成\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">邮箱：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"mail icon\"></i>\n                            <input type=\"text\" name=\"email\" placeholder=\"将作为登录账号\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">密码：</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password\" placeholder=\"至少6位\">\n                        </div>\n                    </div>\n                    <div class=\"field\">\n                        <label class=\"auth-label\">确认密码:</label>\n                        <div class=\"ui left icon input\">\n                            <i class=\"lock icon\"></i>\n                            <input type=\"password\" name=\"password_confirmation\" placeholder=\"\">\n                        </div>\n                    </div>\n                    <div class=\"ui fluid   ginfo submit button\">立即注册</div>\n                    <div class=\"row thirdlogin\">\n                        <a class=\"info-color-a left\" href=\" {{ route('thirdlogin') }}\"><i class=\"github icon\"></i> <span class=\"icon-no\">使用github登录</span></a>\n                        <a class=\"info-color-a right\" href=\"\"><i class=\"qq icon\"></i> <span class=\"icon-no\">使用QQ登录</span></a>\n                    </div>\n                </div>\n\n                <div class=\"ui error message\"></div>\n\n            </form>\n\n            <div class=\"ui message\">\n                已经拥有账号?<a href=\"login\">登录</a>\n            </div>\n        </div>\n    </div>\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n@endsection\n\n"
  },
  {
    "path": "resources/views/static-pages/home.blade.php",
    "content": "@extends('layouts.base')\n\n@section('content')\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">一坑一成长.天天踩坑天天长!</span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            @include('static-pages/partials/information-channel')\n\n            <div class=\"ui container floating  violet segment\" id=\"notify\">\n                <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n                    <span class=\"default-font\">一问一成长.天天提问天天长! </span>\n                </p>\n            </div> {{--notify--}}\n\n            @include('static-pages/partials/question-channel')\n\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    @include('static-pages/partials/hot-article')\n                    <h4 class=\"ui horizontal divider header default-color-a\"><i class=\"bar chart icon\"></i> {{ config('app.name') }}</h4>\n                    @include('static-pages/partials/hot-question')\n\n                </div>\n            </div>\n        </div>\n    </div> {{--pagebody--}}\n@endsection\n"
  },
  {
    "path": "resources/views/static-pages/messages/message.blade.php",
    "content": "@extends('layouts.base')\n@section('title','私信')\n@section('content')\n    <div class=\"ui centered grid container stackable\">\n        @include('static-pages.messages.partials.left-bar')\n        <div class=\"twelve wide column\">\n            <div class=\"ui stacked segment\">\n                <div class=\"content extra-padding\">\n                    <h1> <i class=\"mail outline icon\"></i> 我的私信 </h1>\n                    <div class=\"ui divider\"></div>\n                    <div class=\"ui feed\">\n                        <div class=\"event \">\n                            <a class=\"label\" href=\"\">\n                                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&e=1501052322&token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:jx9iK89Xd8ZYygJDasJk-1dToV0=\"\n                                     alt=\"ucer\">\n                            </a>\n                            <div class=\"content\">\n                                <div class=\"ucer\">\n                                    <a href=\"\"> Ucer </a>\n                                    <span class=\"meta\"> ⋅ 于 ⋅ <span class=\"timeago\">2个月前</span> </span>：\n                                </div>\n                                <div class=\"extra text markdown-reply\">\n                                    <p>请按照这个页面指示\n                                    </p>\n                                </div>\n                                <div class=\"meta\">\n                                    <div class=\"message-meta\">\n                                        <p>\n                                            <a href=\"https://fsdhub.com/messages/8\" class=\"normalize-link-color \">\n                                                <i class=\"icon commenting outline\" aria-hidden=\"true\"></i>\n                                                查看对话\n                                            </a>\n                                        </p>\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/messages/notifications.blade.php",
    "content": "@extends('layouts.base')\n@section('title','通知消息')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">消息中心</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable\">\n        @include('static-pages.messages.partials.left-bar')\n        <div class=\"twelve wide column\">\n            <div class=\"ui stacked segment\">\n                <div class=\"content extra-padding\">\n                    <h1> <i class=\"bell outline icon\"></i> 我的提醒 </h1>\n                    <div class=\"ui divider\"></div>\n                    <div class=\"ui feed no-messages\">\n                        <a  class=\"text-center alert alert-info\">暂无提醒消息!</a>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/messages/partials/left-bar.blade.php",
    "content": "<div class=\"four wide column \">\n    <div class=\"ui fluid large vertical pointing  violet menu\" style=\"border: 1px solid #d3e0e9;\">\n        <a class=\"item\" href=\"/messages\">\n            <i class=\"icon envelope nofloat grey\"></i> &nbsp;私信\n\n        </a>\n\n        <a class=\"item @if(request()->url() == route('notifications.index')) active @endif\"\n           href=\"{{ route('notifications.index') }}\">\n            <i class=\"icon bell nofloat grey\"></i> &nbsp;通知消息\n        </a>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/static-pages/partials/hot-article.blade.php",
    "content": "<p class=\"book-article-meta\">\n    <a href=\"\"><i class=\"file text icon\"></i>\n        热门资讯</a>\n    <span class=\"divider\">/</span>\n</p>\n\n<div class=\"ui celled list\">\n    <div class=\"item\">\n        <div class=\"right floated content labels\">\n            <a class=\"item\">\n                <div class=\"ui violet horizontal label\">php</div>\n            </a>\n            <span class=\"labels-time\" title=\"评论数\">0</span>/\n            <span class=\"labels-time\" title=\"点赞数\">13</span>/\n            <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n            <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n        </div>\n        <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n             src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n        <div class=\"content\">\n            <a href=\"\" title=\"php workmen 的正确使用方式\">\n                <div class=\"header\">php workmen 的正确使用方式</div>\n            </a>\n            workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"right floated content labels\">\n            <a class=\"item\">\n                <div class=\"ui green horizontal label\">php</div>\n            </a>\n            <span class=\"labels-time\" title=\"评论数\">0</span>/\n            <span class=\"labels-time\" title=\"点赞数\">13</span>/\n            <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n            <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n        </div>\n        <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n             src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n        <div class=\"content\">\n            <a href=\"\" title=\"php workmen 的正确使用方式\">\n                <div class=\"header\">php workmen 的正确使用方式</div>\n            </a>\n            <span class=\"labels-p\"> workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .</span>\n\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"right floated content labels\">\n            <a class=\"item\">\n                <div class=\"ui yellow horizontal label\">php</div>\n            </a>\n            <span class=\"labels-time\" title=\"评论数\">0</span>/\n            <span class=\"labels-time\" title=\"点赞数\">13</span>/\n            <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n            <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n        </div>\n        <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n             src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n        <div class=\"content\">\n            <a href=\"\" title=\"php workmen 的正确使用方式\">\n                <div class=\"header\">php workmen 的正确使用方式</div>\n            </a>\n            workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n        </div>\n    </div>\n    <div class=\"item\">\n        <div class=\"right floated content labels\">\n            <a class=\"item\">\n                <div class=\"ui violet horizontal label\">php</div>\n            </a>\n            <span class=\"labels-time\" title=\"评论数\">0</span>/\n            <span class=\"labels-time\" title=\"点赞数\">13</span>/\n            <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n            <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n        </div>\n        <img class=\"ui avatar image avatar-b\" alt=\"ucer\" title=\"ucer\"\n             src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n        <div class=\"content\">\n            <a href=\"\" title=\"php workmen 的正确使用方式\">\n                <div class=\"header\">php workmen 的正确使用方式</div>\n            </a>\n            workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n        </div>\n    </div>\n\n\n</div>\n"
  },
  {
    "path": "resources/views/static-pages/partials/hot-question.blade.php",
    "content": "<p class=\"book-article-meta\">\n    <a href=\"\"><i class=\"help circle icon\"></i>\n        精华问答</a>\n    <span class=\"divider\">/</span>\n</p>\n\n<div class=\"ui six wide column\">\n    <div class=\"ui celled list\">\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui purple horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui yellow horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n    </div>\n</div>\n"
  },
  {
    "path": "resources/views/static-pages/partials/hot-question.blade.php___jb_tmp___",
    "content": ""
  },
  {
    "path": "resources/views/static-pages/partials/information-channel.blade.php",
    "content": "<div class=\"ui middle aligned four column centered grid\">\n    <div class=\"row\">\n        <div class=\"ui grid\">\n            <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"fire icon\"></i>&nbsp;&nbsp;资讯频道\n            </div>\n        </div>\n        @foreach($categoryAndQuestions->categoryList as $v)\n            @if($loop->first)\n                <div class=\"column\">\n                    <div class=\" ui link card small-card \">\n                        <div class=\"image\">\n                            <img src=\"{{ $v->image_url }}\">\n                        </div>\n                        <div class=\"content\">\n                            <a href=\"\">\n                                <div class=\"header\">{{ $v->name }}</div>\n                            </a>\n                            <div class=\"description\">{{ $v->description }}</div>\n                        </div>\n                        <div class=\"extra content green\">\n                            <span class=\"right floated\">更新于 {{ $v->created_at->diffForHumans() }}</span>\n                            <span><i class=\"file text icon\"></i> {{ $v->article_count }}篇文章</span>\n                        </div>\n                    </div>\n                </div>\n            @endif\n        @endforeach\n    </div>\n</div> {{--资讯频道--}}\n"
  },
  {
    "path": "resources/views/static-pages/partials/question-channel.blade.php",
    "content": "\n\n<div class=\"ui middle aligned four column centered grid\">\n    <div class=\"row\">\n        <div class=\"ui grid\">\n            <div class=\"ui vertical divider home-page-divider default-color-a\"><i class=\"hand paper icon\"></i>&nbsp;&nbsp;问答频道\n            </div>\n        </div>\n        <div class=\"column\">\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"\">\n                        <div class=\"header\">编程问题</div>\n                    </a>\n                    <div class=\"description\">php、java、c++</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于1天前</span>\n                    <span><i class=\"help circle icon\"></i>30个问题</span>\n                </div>\n            </div>\n        </div>\n        <div class=\"column\">\n\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"\">\n                        <div class=\"header\">编程问题</div>\n                    </a>\n                    <div class=\"description\">php、java、c++</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于1天前</span>\n                    <span><i class=\"help circle icon\"></i>30个问题</span>\n                </div>\n            </div>\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"\">\n                        <div class=\"header\">编程问题</div>\n                    </a>\n                    <div class=\"description\">php、java、c++</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于1天前</span>\n                    <span><i class=\"help circle icon\"></i>30个问题</span>\n                </div>\n            </div>\n\n        </div>\n        <div class=\"column\">\n            <div class=\" ui link card small-card \">\n                <div class=\"image\">\n                    <img src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                </div>\n                <div class=\"content\">\n                    <a href=\"\">\n                        <div class=\"header\">编程问题</div>\n                    </a>\n                    <div class=\"description\">php、java、c++</div>\n                </div>\n                <div class=\"extra content green\">\n                    <span class=\"right floated\">更新于1天前</span>\n                    <span><i class=\"help circle icon\"></i>30个问题</span>\n                </div>\n            </div>\n\n        </div>\n    </div>\n</div> {{--资讯频道--}}\n\n"
  },
  {
    "path": "resources/views/static-pages/questions/all-questions.blade.php",
    "content": "@extends('layouts.base')\n@section('title','所有问题')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">问答</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"file text icon\"></i>\n                            所有问题</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui green horizontal label\">php编程</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"/questioninfo\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                                </a>\n                                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui green horizontal label\">php编程</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"/questioninfo\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                                </a>\n                                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui green horizontal label\">php编程</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"/questioninfo\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                                </a>\n                                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n                            </div>\n                        </div>\n                        <div class=\"item\">\n                            <div class=\"right floated content labels\">\n                                <a class=\"item\">\n                                    <div class=\"ui green horizontal label\">php编程</div>\n                                </a>\n                                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n                            </div>\n                            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n                            <div class=\"content\">\n                                <a href=\"/questioninfo\" title=\"php workmen 的正确使用方式\">\n                                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                                </a>\n                                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n                            </div>\n                        </div>\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/questions/partials/article-comment.blade.php",
    "content": "<div class=\"ui threaded comments comment-list \">\n\n    <div id=\"comments\"></div>\n\n    <div class=\"ui divider horizontal grey\"><i class=\"icon comments\"></i> 评论数量: 1</div>\n\n    <div class=\"comments-feed\">\n        <div class=\"comment comment-436\">\n            <div id=\"comments\"></div>\n            <a class=\"avatar\" href=\"https://fsdhub.com/iHero\">\n                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1661_1498013381.jpeg?imageView2/1/w/100/h/100&amp;e=1501301149&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:8RTZu1zmRq2stdIiQmlyQmNIEwU=\">\n            </a>\n            <div class=\"content\">\n                <div class=\"comment-header\">\n                    <div class=\"meta\">\n                        <a class=\"author\" href=\"https://fsdhub.com/iHero\">iHero</a>\n                        <div class=\"metadata\">\n                            <span class=\"date\">1个月前</span>\n                        </div>\n                    </div>\n                    <div class=\"reaction\">\n                        <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                            <a href=\"javascript:void(0)\"  title=\"回复 iHero\"\n                               class=\"ui teal reply-btn\" style=\"display: none;\"><i class=\"icon reply\"></i></a>\n\n                            <div class=\"menu\" tabindex=\"-1\"></div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"text comment-body markdown-reply\">\n                    <p>主机上的提示符 “&gt;” 是怎么修改的？ </p>\n                </div>\n            </div>\n        </div>\n        <div class=\"comment comment-436\">\n            <div id=\"comments-436\"></div>\n            <a class=\"avatar\" href=\"https://fsdhub.com/iHero\">\n                <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1661_1498013381.jpeg?imageView2/1/w/100/h/100&amp;e=1501301149&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:8RTZu1zmRq2stdIiQmlyQmNIEwU=\">\n            </a>\n            <div class=\"content\">\n                <div class=\"comment-header\">\n                    <div class=\"meta\">\n                        <a class=\"author\" href=\"https://fsdhub.com/iHero\">iHero</a>\n                        <div class=\"metadata\">\n                            <span class=\"date\">1个月前</span>\n                        </div>\n                    </div>\n                    <div class=\"reaction\">\n                        <div class=\"ui floating basic icon dropdown button\" tabindex=\"0\">\n                            <a href=\"javascript:void(0)\" onclick=\"replyOne('iHero');\" title=\"回复 iHero\"\n                               class=\"ui teal reply-btn\" style=\"display: none;\"><i class=\"icon reply\"></i></a>\n                            <div class=\"menu\" tabindex=\"-1\"></div>\n                        </div>\n                    </div>\n                </div>\n                <div class=\"text comment-body markdown-reply\">\n                    <p>主机上的提示符 “&gt;” 是怎么修改的？ </p>\n                </div>\n            </div>\n        </div>\n    </div>\n    <br>\n\n    <div class=\"\">\n        <h3 class=\"ui header\">\n            <a href=\"\" class=\"login-required\">请登录</a>\n        </h3>\n        <div class=\"ui warning message\">\n            <i class=\"icon warning\"></i> 支持 markdown 语法,请务进行语言攻击。\n        </div>\n\n        <form class=\"ui reply form\" method=\"POST\" action=\"https://fsdhub.com/articles/501/comments\"\n              accept-charset=\"UTF-8\" id=\"comment-composing-form\">\n            <input type=\"hidden\" name=\"_token\" value=\"LxnH1HhdWUTZXQanduLzUHiVcEc5k6Z0zTK6skAC\">\n\n            <div class=\"field\">\n                <textarea name=\"body_original\" id=\"comment-composing-box\" required=\"\" class=\"login-required\"></textarea>\n            </div>\n            <button class=\"ui primary labeled icon button login-required\" type=\"submit\" id=\"comment-composing-submit\">\n                <i class=\"icon comment\"></i> 评论\n            </button>\n        </form>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/questions/partials/info-right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">一坑一成长.天天踩坑天天长! </span>\n        </p>\n    </div> {{--notify--}}\n\n    <div class=\"ui segment\">\n        <div class=\"ui three statistics\">\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">4</div>\n                <div class=\"label\">点赞</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">1859</div>\n                <div class=\"label\">浏览</div>\n            </div>\n            <div class=\"ui mini statistic\">\n                <div class=\"value\">1</div>\n                <div class=\"label\">评论</div>\n            </div>\n        </div>\n\n        <br>\n    </div>\n</div>\n    <div class=\"ui stackable cards\">\n        <div class=\"ui  card column author-box grid\" style=\"margin-top: 20px;\">\n\n            <div class=\"ui fluid\" style=\"margin-top: 20px;\">\n                <div class=\"ui teal ribbon label\"><i class=\"star icon\"></i> 作者</div>\n            </div>\n\n            <a href=\"https://fsdhub.com/Summer\" class=\"avatar-link\">\n                <img class=\"ui centered circular tiny image \"\n                     src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&amp;e=1501052322&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:jx9iK89Xd8ZYygJDasJk-1dToV0=\">\n            </a>\n\n            <div class=\"extra content ui center aligned container\">\n                <a class=\"header\" href=\"https://fsdhub.com/Summer\">Ucer</a>\n                <div class=\"description\">Good good study,day day up.</div>\n            </div>\n            <div class=\"extra content\">\n                <button class=\"login-required ui basic teal button fluid follow\" data-act=\"follow\" data-id=\"1\"><span\n                            class=\"state\">关注</span></button>\n            </div>\n\n        </div>\n    </div>\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p><i class=\"fire icon\"></i>最新文章</p>\n        </div>\n        <div class=\"ui secondary violet segment sticky\">\n            <div class=\"ui list\">\n                <div class=\" black-font\">\n                    <a href=\"article_info\">1.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\"black-font\">\n                    <a href=\"article_info\">2.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n                <div class=\" black-font\">\n                    <a href=\"article_info\">3.热门文章一热门文章一热门文章一热门文章一热门文章一</a>\n                </div>\n            </div>\n        </div>\n    </div>\n\n    <div class=\"ui sticky  card column author-box grid \"  id=\"toc\"> </div>\n\n"
  },
  {
    "path": "resources/views/static-pages/questions/partials/question-info-form.blade.php",
    "content": "<div class=\"ui readme markdown-body content-body\">\n\n    <div name=\"排版规范\" data-unique=\"排版规范\"></div>\n    <h2 id=\"排版规范\">排版规范<a href=\"#排版规范\" class=\"anchorific\">#</a></h2>\n    <p>此文档遵循 <a href=\"https://github.com/sparanoid/chinese-copywriting-guidelines\">中文排版指南</a> 规范，并在此之上遵守以下约定：</p>\n    <ul>\n        <li>英文的左右保持一个空白，避免中英文字黏在一起；</li>\n        <li>使用全角标点符号；</li>\n        <li>严格遵循 Markdown 语法；</li>\n        <li>原文中的双引号（\" \"）请代换成中文的引号（「」符号怎么打出来见 <a href=\"http://zhihu.com/question/19755746/answer/27233392\">这里</a>）；</li>\n        <li>「<code>加亮</code>」和「<strong>加粗</strong>」和「[链接]()」都需要在左右保持一个空格。</li>\n    </ul>\n\n    <div name=\"命令行提示符\" data-unique=\"命令行提示符\"></div>\n    <h2 id=\"命令行提示符\">命令行提示符<a href=\"#命令行提示符\" class=\"anchorific\">#</a></h2>\n    <p>在本书的教授过程中，我将使用 <code>$</code> 符号来作为命令行提示符，如：</p>\n    <pre class=\" language-bash\"><code class=\" language-bash\">$ <span class=\"token keyword\">echo</span> <span\n                    class=\"token string\">\"Hello Laravel!\"</span>\nHello Laravel<span class=\"token operator\">!</span></code></pre>\n    <p>带有 <code>$</code> 符号的第一行代码指的是我们在命令行端口中输入的命令 <code>echo \"Hello Laravel!\"</code>。<code>echo</code> 是 Unix\n        系统中常用的输出命令，用于输出指定字符串。第二行的 <code>Hello Laravel!</code> 是运行命令后的输出信息。后面我们会使用这种风格来表示命令行的输入与输出，因此你在复制命令行的时候要注意不要把\n        <code>$</code> 和输出信息也复制进去了。</p>\n    <p>由于接下来的教程有时会在两个不同的机器环境上（本机环境和虚拟机环境，大部分情况下是在虚拟机环境上）来调用命令行输入，因此我们约定，在本机上调用的命令输入使用 <code>&gt;</code> 符号，在虚拟机上调用的命令使用\n        <code>$</code> 符号。</p>\n    <p>以下命令行运行在虚拟机里：</p>\n    <pre class=\" language-bash\"><code class=\" language-bash\">$ <span class=\"token keyword\">echo</span> <span\n                    class=\"token string\">\"I am in VM!\"</span>\nI am <span class=\"token keyword\">in</span> VM<span class=\"token operator\">!</span></code></pre>\n    <p>以下命令行运行在 <strong>主机</strong> 上：</p>\n    <pre class=\" language-bash\"><code class=\" language-bash\"><span class=\"token operator\">&gt;</span> <span\n                    class=\"token keyword\">echo</span> <span class=\"token string\">\"I am in Host Machine!\"</span>\nI am <span class=\"token keyword\">in</span> Host Machine<span class=\"token operator\">!</span></code></pre>\n    <div name=\"相对文件路径\" data-unique=\"相对文件路径\"></div>\n    <h2 id=\"相对文件路径\">相对文件路径<a href=\"#相对文件路径\" class=\"anchorific\">#</a></h2>\n    <p>针对每个人不同的工作环境，本书将统一默认为项目的根目录，而不是项目在文件系统中的完整路径。</p>\n    <p>例如在我电脑中 <code>UsersController.php</code> 文件的完整路径为：</p>\n    <pre class=\" language-php\"><code class=\"  language-php\"><span class=\"token operator\">/</span>Users<span\n                    class=\"token operator\">/</span>aufree<span class=\"token operator\">/</span>Code<span\n                    class=\"token operator\">/</span>sample<span class=\"token operator\">/</span>app<span\n                    class=\"token operator\">/</span>Http<span class=\"token operator\">/</span>Controllers<span\n                    class=\"token operator\">/</span>UsersController<span\n                    class=\"token punctuation\">.</span>php</code></pre>\n    <p>但在本书中，文件名路径参照的是项目的根目录，显示如下：</p>\n    <pre class=\" language-php\"><code class=\"  language-php\">app<span class=\"token operator\">/</span>Http<span\n                    class=\"token operator\">/</span>Controllers<span class=\"token operator\">/</span>UsersController<span\n                    class=\"token punctuation\">.</span>php</code></pre>\n    <p>这样就能保证每个人看到的路径名称都一致了。</p>\n    <div name=\"竖排'...'代码省略\" data-unique=\"竖排'...'代码省略\"></div>\n    <h2 id=\"竖排--代码省略\">竖排 '...' 代码省略<a href=\"#竖排--代码省略\" class=\"anchorific\">#</a></h2>\n    <p>最后，为了保持文章的篇幅简洁，我会将一些不必要的代码使用竖排的 <code>.</code> 来代替，你在复制本文代码块的时候，切记不要将 <code>.</code> 也一同复制进去。演示代码如下：</p>\n    <pre class=\" language-php\"><code class=\" language-php\"><span class=\"token delimiter\">&lt;?php</span>\n\n<span class=\"token keyword\">namespace</span> <span class=\"token package\">App<span class=\"token punctuation\">\\</span>Http<span\n                        class=\"token punctuation\">\\</span>Controllers</span><span class=\"token punctuation\">;</span>\n<span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">.</span>\n<span class=\"token punctuation\">.</span>\n<span class=\"token keyword\">class</span> <span class=\"token class-name\">UsersController</span> <span\n                    class=\"token keyword\">extends</span> <span class=\"token class-name\">Controller</span>\n<span class=\"token punctuation\">{</span>\n    <span class=\"token keyword\">public</span> <span class=\"token keyword\">function</span> <span class=\"token function\">index</span><span\n                    class=\"token punctuation\">(</span><span class=\"token punctuation\">)</span>\n    <span class=\"token punctuation\">{</span>\n        <span class=\"token variable\">$users</span> <span class=\"token operator\">=</span> <span\n                    class=\"token scope\">User<span class=\"token punctuation\">::</span></span><span\n                    class=\"token function\">all</span><span class=\"token punctuation\">(</span><span\n                    class=\"token punctuation\">)</span><span class=\"token punctuation\">;</span>\n        <span class=\"token keyword\">return</span> <span class=\"token function\">view</span><span\n                    class=\"token punctuation\">(</span><span class=\"token string\">'users.index'</span><span\n                    class=\"token punctuation\">,</span> <span class=\"token function\">compact</span><span\n                    class=\"token punctuation\">(</span><span class=\"token string\">'users'</span><span\n                    class=\"token punctuation\">)</span><span class=\"token punctuation\">)</span><span\n                    class=\"token punctuation\">;</span>\n    <span class=\"token punctuation\">}</span>\n<span class=\"token punctuation\">}</span>\n        </code></pre>\n\n    <div class=\"ui success message\">\n        <div class=\"ui list\">\n            <div class=\"item\">\n                <i class=\"folder open grey icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">分类:</span> <span>编程语言</span></div>\n            </div>\n            <div class=\"item\">\n                <i class=\" tags grey icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">标签:</span>\n                    <span class=\"info-labels\">\n                        <a href=\"\">php</a>\n                        <a href=\"\">java</a>\n                    </span>\n                </div>\n            </div>\n            <div class=\"item\">\n                <i class=\"warning sign orange icon\"></i>\n                <div class=\"content\"><span class=\"black-font\">原创声明:</span> <span>如无特别说明，均为作者原创文章。未经允许，不得转载!</span></div>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/questions/partials/question-list-form.blade.php",
    "content": "<ul class=\"sorted_table tree \">\n    <div class=\"ui celled list\">\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"/questioninfo\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n        <div class=\"item\">\n            <div class=\"right floated content labels\">\n                <a class=\"item\">\n                    <div class=\"ui green horizontal label\">php编程</div>\n                </a>\n                <span class=\"labels-time\" title=\"回答数\">0</span>/\n                <span class=\"labels-time\" title=\"点赞数\">13</span>/\n                <span class=\"labels-time\" title=\"收藏数\">3</span>&nbsp;&nbsp;&nbsp;\n                <span class=\"labels-time\" title=\"发布时间\">3天前</span>\n            </div>\n            <img class=\"ui avatar image avatar-b\"  alt=\"ucer\" title=\"ucer\" src=\"http://www.semantic-ui.cn/images/avatar/small/helen.jpg\">\n            <div class=\"content\">\n                <a href=\"\" title=\"php workmen 的正确使用方式\">\n                    <div class=\"header\">Ubuntu 16.04 怎么安装 php?</div>\n                </a>\n                <span class=\"labels-p\"> Ubuntu 16.04 上怎么安装 php 最新版本 . . .</span>\n\n            </div>\n        </div>\n    </div>\n</ul>\n"
  },
  {
    "path": "resources/views/static-pages/questions/partials/right-item.blade.php",
    "content": "<div class=\"item header\">\n    <div class=\"ui container floating  violet segment\" id=\"notify\">\n        <p><i class=\"volume up icon \"></i>&nbsp;&nbsp;\n            <span class=\"default-font\">一坑一成长.天天踩坑天天长! </span>\n        </p>\n    </div> {{--notify--}}\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p> <i class=\"diamond icon\"></i>精华问题</p>\n        </div>\n        <div class=\"ui secondary violet segment\">\n            <div class=\"ui list\">\n                <div class=\" black-font\">\n                    <a href=\"article_info\">1.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n                <div class=\"black-font\">\n                    <a href=\"article_info\">2.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n                <div class=\" black-font\">\n                    <a href=\"article_info\">3.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui segments\">\n        <div class=\"ui segment\">\n            <p> <i class=\"wait icon\"></i>最新问题</p>\n        </div>\n        <div class=\"ui secondary violet segment\">\n            <div class=\"ui list\">\n                <div class=\" black-font\">\n                    <a href=\"article_info\">1.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n                <div class=\"black-font\">\n                    <a href=\"article_info\">2.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n                <div class=\" black-font\">\n                    <a href=\"article_info\">3.Ubuntu 16.04 怎么安装 php?</a>\n                </div>\n            </div>\n        </div>\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/questions/question-info.blade.php",
    "content": "@extends('layouts.base')\n@section('title','文章详情')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/all_questions\" class=\"section\">问答</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/questions\" class=\"section\">php编程</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">php workenman 如何正确使用</div>\n            </div>\n        </div>\n    </div>\n\n\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <h1>\n                        <span style=\"line-height: 34px;\">php workenman 如何正确使用</span>\n                    </h1>\n                    <p class=\"book-article-meta ui description\">\n                        <i class=\"attach icon\"></i>\n                        workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . . workmen 是 php 的一个 socket 框架,专门用来做客服系统/聊天室 . . .\n                    </p>\n                    <p class=\"book-article-meta description\">\n                        <i class=\"wait icon\"></i> <span class=\"header\">Post on </span> <span class=\"default-color-a\">2017年3月1日</span>\n                        <span class=\"header\">by</span>\n                        <a href=\"\"><i class=\"icon user\"></i> <span class=\"ui popover default-color-a\" data-title=\"ucer\"\n                                                                   data-content=\"好好学习，天天向上\">ucer</span></a>\n                    </p>\n                </div>\n                <div class=\"ui divider\"></div>\n                @include('static-pages.questions.partials.question-info-form')\n            </div>\n            <div>\n                <a class=\"ui basic button small  popover\" data-content=\"1.4. 如何正确阅读本书？\" href=\"\"><i class=\"icon arrow left\"></i> 上一篇</a>\n                <a class=\"ui basic button small popover right floated\" data-content=\"1.6. 发行说明\" href=\"\">下一篇 <i class=\"icon arrow right\"></i></a>\n            </div>\n            <div class=\"ui message basic\">\n                <div class=\"social-share share-component\">\n                    分享\n                </div>\n                <div class=\"clearfix\"></div>\n            </div>\n            <div class=\"ui message basic centerd voted-box\">\n                <div class=\"buttons\">\n                    <div class=\"ui button kb-star-big basic teal  login-required\" data-act=\"star\" data-id=\"501\"><i class=\"icon thumbs up\"></i> <span class=\"state\">点赞</span></div>\n                </div>\n                <div class=\"voted-users\">\n                    <a href=\"https://fsdhub.com/wph3629709\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/2491_1501131226.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:9rFFU7YeTxuotnTpYJE11q2PdJI=\">\n                    </a>\n                    <a href=\"https://fsdhub.com/hebin\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1049_1495468400.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:5yhyWspv9uYxpUpyNnsoVa8lFGk=\">\n                    </a>\n                    <a href=\"https://fsdhub.com/Mike_Maldini\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/1177_1496197821.png?imageView2/1/w/100/h/100\">\n                    </a>\n                    <a href=\"https://fsdhub.com/zhoujiping\">\n                        <img class=\"ui image avatar image-33 stargazer\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/921_1495068558.jpeg?imageView2/1/w/100/h/100&amp;e=1501300089&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:xuMjMIgElR58cWPB39dQb14lZQ0=\">\n                    </a>\n                </div>\n            </div>\n            @include('static-pages.article.partials.article-comment')\n        </div>\n        <div class=\"four wide column\">\n            @include('static-pages.article.partials.info-right-item')\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/static-pages/questions/question-list.blade.php",
    "content": "@extends('layouts.base')\n@section('title','问题列表')\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <a href=\"/all_questions\" class=\"section\">问答</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">编程语言</div>\n            </div>\n        </div>\n\n    </div>\n\n    <div class=\"ui centered grid container stackable\">\n        <div class=\"twelve wide column\">\n            <div class=\"ui  segment\">\n                <div class=\"content extra-padding\">\n                    <div class=\"book header\">\n                        <div class=\"ui items\">\n                            <div class=\"item\">\n                                <div class=\"image\">\n                                    <img class=\"ui image image-shadow cat-article-image \"\n                                         src=\"http://www.semantic-ui.cn/images/avatar2/large/matthew.png\">\n                                </div>\n                                <div class=\"content\">\n                                    <div class=\"header\" style=\"width:100%\"> 编程语言</div>\n                                    <div class=\"description\">\n                                        <p><b class=\"ui text orange\">问题数量：69 </b></p>\n                                        java、php、日常记java、php、日常记录java、php、日常记录录\n                                    </div>\n                                </div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"ui  attached tabular menu violet\">\n                        <span class=\"item active violet\" href=\"\"> <i class=\"grey content icon\"></i> 问题列表 </span>\n                    </div>\n                    <br>\n                    @include('static-pages.questions.partials.question-list-form')\n                </div>\n            </div>\n        </div>\n\n        <div class=\"four wide column\">\n            @include('static-pages.questions.partials.right-item')\n        </div>\n\n    </div>\n\n@endsection"
  },
  {
    "path": "resources/views/static-pages/user/center.blade.php",
    "content": "@extends('layouts.base')\n@section('title','个人中心')\n\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">个人中心</div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable userspace\">\n        <div class=\"four wide column \">\n            <div class=\"ui stackable cards\">\n                <div class=\"ui card\">\n                    <div class=\"ui list\" style=\"margin-top: 6px;margin-left: 4px;\">\n                        <div class=\"item\">\n                            <img  class=\"ui centered circular tiny image\" src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&e=1501052322&token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:jx9iK89Xd8ZYygJDasJk-1dToV0=\">\n                            <div class=\"content user-info\">\n                                <a class=\"header title\">ucer</a>\n                                <div class=\"description\"> 第 &nbsp;1&nbsp;位会员 </div>\n                                <div class=\"description\"> 注册于&nbsp;<span class=\"labels-time\">3年前</span> </div>\n                            </div>\n                        </div>\n                        <div class=\"description labels-time\" > <i class=\"rss icon\"></i> 好好学习，天天向上,好好学习，天天向上</div>\n                    </div>\n                    <div class=\"content\" >\n                            <div class=\"ui three statistics \">\n                                <div class=\"ui mini statistic\">\n                                        <div class=\"value labels-time\">4</div>\n                                        <div class=\"label\"><a href=\"\">关注者</a></div>\n                                </div>\n                                <div class=\"ui mini statistic\">\n                                    <div class=\"value\">11</div>\n                                    <div class=\"label\"><a href=\"\">问题</a></div>\n                                </div>\n                                <div class=\"ui mini statistic\">\n                                    <div class=\"value\">1859</div>\n                                    <div class=\"label\"><a href=\"\">文章</a></div>\n                                </div>\n                            </div>\n                    </div>\n                    <div class=\"extra content center\">\n                        <p style=\"margin-left: 2px\"> <i class=\"marker icon\"></i> 云南 大理 </p>\n                        <div style=\"text-align: center\">\n                        <a class=\"ui circular violet icon button\" title=\"github 主页\">\n                            <i class=\"github icon\"></i>\n                        </a>\n                        <a class=\"ui circular google green icon button \" title=\"个人网站\">\n                            <i class=\"chrome icon\"></i>\n                        </a></div>\n                    </div>\n                    <div class=\"extra content\">\n                        <button class=\" ui basic  button fluid follow\" data-act=\"unfollow\" data-id=\"397\"><span class=\"state\">已关注</span></button>\n                    </div>\n\n                </div>\n            </div>\n        </div>\n        <div class=\"twelve wide column\">\n            @include('static-pages.user.partials.right-item')\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/static-pages/user/edit.blade.php",
    "content": "@extends('layouts.base')\n@section('title','资料修改')\n\n@section('content')\n    @include('static-pages.user.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改资料</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"\" required=\"\" accept-charset=\"UTF-8\" enctype=\"multipart/form-data\">\n\n                    <div class=\"field\">\n                        <label for=\"name-field\">用户名：</label>\n                        <input class=\"form-control\" disabled=\"disabled\" type=\"text\" name=\"user_name\"  value=\"Ucer\" required=\"\">\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"company-field\">邮箱：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"email\" disabled=\"disabled\"  value=\"185429135@qq.com\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"real_name-field\">Github 用户名：（请注意和 github 上保持一致）</label>\n                        <input class=\"form-control\" type=\"text\" name=\"github_name\"  value=\"Ucer\" required=\"\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"real_name-field\">昵称：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"nickname\" id=\"real_name-field\" value=\"漂过太平洋\" required=\"\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"website-field\">个人网站：(如：example.com，不需要加 http 头前缀 https://)</label>\n                        <input class=\"form-control\" type=\"text\" name=\"website\" id=\"website-field\" value=\"\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"company-field\">所在公司：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"company\" id=\"company-field\" value=\"\">\n                    </div>\n\n                    <div class=\"required field\">\n                        <label for=\"city-field\">所在城市：(如： 云南 大理)</label>\n                        <input class=\"form-control\" type=\"text\" name=\"city\" id=\"city-field\" value=\"云南 大理\">\n                    </div>\n\n                    <div class=\"required field\">\n                        <label for=\"bio-field\">个人简介：（请一句话介绍你自己，大部分情况下会在你的头像和名字旁边显示）</label>\n                        <textarea rows=\"3\" id=\"bio-field\" name=\"bio\" placeholder=\"至少6个长度\" required></textarea>\n                    </div>\n                    <div class=\"ui error message\"></div>\n\n                    <button class=\"ui primary labeled icon button\" type=\"submit\">\n                        <i class=\"save icon\"></i>\n                        保存\n                    </button>\n                </form>\n\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n"
  },
  {
    "path": "resources/views/static-pages/user/email.blade.php",
    "content": "@extends('layouts.base')\n@section('title','资料修改')\n\n@section('content')\n    @include('static-pages.user.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改绑定邮箱</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"\" required=\"\" accept-charset=\"UTF-8\" enctype=\"multipart/form-data\">\n                    <div class=\"field\">\n                        <label for=\"email-field\">邮箱：(绑定邮箱后可以用邮箱登录）</label>\n                        <input class=\"form-control\"  type=\"text\" name=\"email\"  value=\"18313852226@sina.cn\" required>\n                    </div>\n                    <div class=\"ui error message\"></div>\n\n                    <button class=\"ui primary labeled icon button\" type=\"submit\">\n                        <i class=\"edit icon\"></i>\n                        绑定到新的邮箱\n                    </button>\n                </form>\n            </div>\n        </div>\n\n    </div>\n    </div>\n    @endsection\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n"
  },
  {
    "path": "resources/views/static-pages/user/partials/left-menu.blade.php",
    "content": "<div class=\"ui container grid\">\n    <div class=\"column\">\n        <div class=\"ui breadcrumb\">\n            <a href=\"/\" class=\"section\">首页</a>\n            <span class=\"divider\">/</span>\n            <div class=\"active section\">个人信息修改</div>\n        </div>\n    </div>\n</div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"four wide column\">\n            <div class=\"ui  vertical pointing violet menu\">\n                <a href=\"/profile/edit\" class=\"item active\">个人信息修改 </a>\n                <a href=\"/profile/password\" class=\"item\">密码修改 </a>\n                <a href=\"/profile/email\" class=\"item \">修改绑定邮箱 </a>\n            </div>\n        </div>\n"
  },
  {
    "path": "resources/views/static-pages/user/partials/right-item.blade.php",
    "content": "<div class=\"ui stacked segment\">\n    <div class=\"ui teal ribbon label\"><i class=\"trophy icon\"></i> 个人中心</div>\n\n    <div class=\"content extra-padding\">\n        <div class=\"ui attached tabular menu stackable\">\n\n            <a class=\"item active\" data-tab=\"first\" href=\"\"><i class=\"icon feed\"></i> 动态</a>\n\n            <a class=\"item \"  data-tab=\"first1\"  href=\"\"><i class=\"icon file text outline\"></i> 问题 <span class=\"counter\">0</span> </a>\n\n            <a href=\"\" class=\"item \"><i class=\"icon user\"></i> 关注者 <span class=\"counter\">1</span> </a>\n\n            <a href=\"\" class=\"item \"><i class=\"icon thumbs up\"></i> 赞过 <span class=\"counter\">2</span> </a>\n\n        </div>\n\n        <div class=\"ui feed\">\n            <div class=\"event\">\n                <div class=\"label\">\n                    <a href=\"https://fsdhub.com/Ucer\">\n                        <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&amp;e=1501473548&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:dJurzzrZ1iOh4z956kf44FQf314=\">\n                    </a>\n                </div>\n                <div class=\"content\">\n                    <div class=\"vote-user\">\n                        用户 <a href=\"\">Ucer</a> 关注了用户 <i class=\"icon user grey\"></i> <a href=\"\" class=\"title\"> Ucer </a>\n                    </div>\n                </div>\n                <div class=\"item-meta\">\n                    <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> 20分钟前</a>\n                </div>\n            </div>\n            <div class=\"event\">\n                <div class=\"label\">\n                    <a href=\"https://fsdhub.com/Ucer\">\n                        <img src=\"https://fsdhubcdn.phphub.org/uploads/avatars/397_1493859845.jpeg?imageView2/1/w/200/h/200&amp;e=1501473646&amp;token=2vxC9mwLd9SS1hS_uqfK99SsyG2qVm-BWFXuVl96:1GhEIj46nctlBNSJBYcX8YugKzI=\">\n                    </a>\n                </div>\n                <div class=\"content\">\n                    <div class=\"date\">\n                        用户 <a href=\"\">Ucer</a> 评论了\n                    </div>\n                    <div class=\"\">\n                        <a href=\"\" class=\"title\"> 下一步的学习建议 </a>\n                    </div>\n\n                </div>\n\n                <div class=\"item-meta\">\n                    <a class=\"ui label basic light grey\" href=\"\"><i class=\"clock icon\"></i> 3周前</a>\n                </div>\n            </div>\n\n        </div>\n\n    </div>\n</div>"
  },
  {
    "path": "resources/views/static-pages/user/password.blade.php",
    "content": "@extends('layouts.base')\n@section('title','修改密码')\n\n@section('content')\n    @include('static-pages.user.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改密码</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"\" required=\"\" accept-charset=\"UTF-8\" enctype=\"multipart/form-data\">\n                    <div class=\"field\">\n                        <label for=\"name-field\">旧密码：</label>\n                        <input class=\"form-control\" type=\"password\" name=\"old_password\" >\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"name-field\">新密码：</label>\n                        <input class=\"form-control\" type=\"password\" name=\"password\" placeholder=\"至少6个长度\" >\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"name-field\">确认密码：</label>\n                        <input class=\"form-control\" type=\"password\" name=\"password_confirmation\" >\n                    </div>\n                    <div class=\"ui error message\"></div>\n                    <button class=\"ui primary labeled icon button\" type=\"submit\">\n                        <i class=\"save icon\"></i>\n                        保存\n                    </button>\n                </form>\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n"
  },
  {
    "path": "resources/views/tags/show-article.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $tag->tag }}-标签\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">{{ $tag->tag }}</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"file text icon\"></i>\n                            匹配的文章</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n\n                        @forelse($articles as $v)\n                            <div class=\"item\">\n                                <div class=\"right floated content labels\">\n                                    @foreach($v->tags as $tag)\n                                        <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\">\n                                            <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                        </a>\n                                    @endforeach\n                                    <span class=\"labels-time\" title=\"评论数\">{{ $v->comment_count }}</span>/\n                                    <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                    <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                    <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                </div>\n                                <img class=\"ui avatar image avatar-b popover\"\n                                     onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                     alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                     src=\"{{ $v->user->avatar }}\">\n                                <div class=\"content\">\n                                    <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\">\n                                        <div class=\"ui popover\" style=\"font-weight: bold\"\n                                             data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                    </a>\n                                    {{ str_limit($v->description, 70) }}\n                                </div>\n                            </div>\n                        @empty\n                            <div class=\"ui feed no-messages\">\n                                <p class=\"text-center alert alert-info\">!\n                                    (=￣ω￣=) ··· 还没有相关文章哦。\n                                </p>\n                            </div>\n                        @endforelse\n                        <h4 class=\"ui horizontal divider header default-color-a\"><i\n                                    class=\"bar chart icon\"></i> {{ config('app.name') }}</h4>\n                        <p class=\"book-article-meta\">\n                            <a href=\"\"><i class=\"help circle icon\"></i>\n                                匹配的问答</a>\n                            <span class=\"divider\">/</span>\n                        </p>\n\n                            @forelse($questions as $v)\n                                <div class=\"item\">\n                                    <div class=\"right floated content labels\">\n                                        @foreach($v->tags as $tag)\n                                            <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\">\n                                                <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                            </a>\n                                        @endforeach\n                                        <span class=\"labels-time\" title=\"回复数\">{{ $v->reply_count }}</span>/\n                                        <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                        <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                        <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                    </div>\n                                    <img class=\"ui avatar image avatar-b popover\"\n                                         onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                         alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                         src=\"{{ $v->user->avatar }}\">\n                                    <div class=\"content\">\n                                        <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\">\n                                            <div class=\"ui popover\" style=\"font-weight: bold\"\n                                                 data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                        </a>\n                                        {{ str_limit($v->description, 70) }}\n                                    </div>\n                                </div>\n                            @empty\n                                <div class=\"ui feed no-messages\">\n                                    <p class=\"text-center alert alert-info\">!\n                                        (=￣ω￣=) ··· 还没有相关文章哦。\n                                    </p>\n                                </div>\n                            @endforelse\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/tags/show-question.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    {{ $tag->tag }}-标签\n@endsection\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <span class=\"active section\">{{ $tag->tag }}</span>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui  grid container stackable\">\n        <div class=\"sixteen wide column\">\n            <div class=\"ui segment article-content\">\n                <div class=\"extra-padding\">\n                    <p class=\"book-article-meta\">\n                        <a href=\"\"><i class=\"help circle icon\"></i>\n                            匹配的问答</a>\n                        <span class=\"divider\">/</span>\n                    </p>\n\n                    <div class=\"ui celled list\">\n\n                        @forelse($questions as $v)\n                            <div class=\"item\">\n                                <div class=\"right floated content labels\">\n                                    @foreach($v->tags as $tag)\n                                        <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug, 'type' => 'q']) }}\">\n                                            <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                        </a>\n                                    @endforeach\n                                    <span class=\"labels-time\" title=\"回复数\">{{ $v->reply_count }}</span>/\n                                    <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                    <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                    <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                </div>\n                                <img class=\"ui avatar image avatar-b popover\"\n                                     onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                     alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                     src=\"{{ $v->user->avatar }}\">\n                                <div class=\"content\">\n                                    <a href=\"{{ route('question.show', ['slug' => $v->slug]) }}\">\n                                        <div class=\"ui popover\" style=\"font-weight: bold\"\n                                             data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                    </a>\n                                    {{ str_limit($v->description, 70) }}\n                                </div>\n                            </div>\n                        @empty\n                            <div class=\"ui feed no-messages\">\n                                <a class=\"text-center alert alert-info\">!\n                                    (=￣ω￣=) ··· 还没有相关问题哦。\n                                </a>\n                            </div>\n                        @endforelse\n                        <h4 class=\"ui horizontal divider header default-color-a\"><i\n                                    class=\"bar chart icon\"></i> {{ config('app.name') }}</h4>\n                        <p class=\"book-article-meta\">\n                            <a href=\"\"><i class=\"file text icon\"></i>\n                                匹配的文章</a>\n                            <span class=\"divider\">/</span>\n                        </p>\n\n                        @forelse($articles as $v)\n                            <div class=\"item\">\n                                <div class=\"right floated content labels\">\n                                    @foreach($v->tags as $tag)\n                                        <a class=\"item\" href=\"{{ url('tag',['slug' => $tag->slug]) }}\">\n                                            <div class=\"ui {{ $tag->style }} horizontal label\">{{ $tag->tag }}</div>\n                                        </a>\n                                    @endforeach\n                                    <span class=\"labels-time\" title=\"评论数\">{{ $v->comment_count }}</span>/\n                                    <span class=\"labels-time\" title=\"点赞数\">{{ $v->vote_count }}</span>/\n                                    <span class=\"labels-time\" title=\"查看数\">{{ $v->view_count }}</span>&nbsp;&nbsp;&nbsp;\n                                    <span class=\"labels-time\" title=\"发布时间\">{{ $v->created_at->diffForHumans() }}</span>\n                                </div>\n                                <img class=\"ui avatar image avatar-b popover\"\n                                     onclick=\"location.href= '{{ route('user_center', ['user_name' => $v->user->user_name]) }}'\"\n                                     alt=\"{{ $v->user->user_name }}\" data-content=\"{{ $v->user->user_name }}\"\n                                     src=\"{{ $v->user->avatar }}\">\n                                <div class=\"content\">\n                                    <a href=\"{{ route('article.show', ['slug' => $v->slug]) }}\">\n                                        <div class=\"ui popover\" style=\"font-weight: bold\"\n                                             data-content=\"{{ $v->title }}\">{{ str_limit($v->title, 70) }}</div>\n                                    </a>\n                                    {{ str_limit($v->description, 70) }}\n                                </div>\n                            </div>\n                        @empty\n                            <div class=\"ui feed no-messages\">\n                                <a class=\"text-center alert alert-info\">!\n                                    (=￣ω￣=) ··· 还没有相关文章哦。\n                                </a>\n                            </div>\n                        @endforelse\n\n                    </div>\n                </div>\n            </div>\n        </div>\n    </div>\n@endsection"
  },
  {
    "path": "resources/views/users/edit-email.blade.php",
    "content": "@extends('layouts.base')\n@section('title','修改绑定邮箱-资料修改')\n\n@section('content')\n    @include('users.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改绑定邮箱</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"\" required=\"\" accept-charset=\"UTF-8\" enctype=\"multipart/form-data\">\n                    <div class=\"field\">\n                        <label for=\"email-field\">邮箱：(绑定邮箱后可以用邮箱登录）</label>\n                        <input class=\"form-control\"  type=\"text\" name=\"email\"  value=\"\" required>\n                    </div>\n                    <div class=\"ui error message\"></div>\n\n                    <button class=\"ui teal disabled labeled icon button\" type=\"submit\">\n                        <i class=\"edit icon\"></i>\n                        绑定到新的邮箱\n                    </button>\n                </form>\n            </div>\n        </div>\n\n    </div>\n    </div>\n    @endsection\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n"
  },
  {
    "path": "resources/views/users/edit-password.blade.php",
    "content": "@extends('layouts.base')\n@section('title','修改密码-资料修改')\n\n@section('content')\n    @include('users.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改密码</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" role=\"form\" method=\"POST\" action=\"{{ route('users.update_password', $info->id) }}\">\n                    {{ csrf_field() }} {{ method_field('Patch') }}\n                    <div class=\"field\">\n                        <label for=\"name-field\">新密码：</label>\n                        <input class=\"form-control\" type=\"password\" name=\"password\" placeholder=\"至少6个长度\" >\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"name-field\">确认密码：</label>\n                        <input class=\"form-control\" type=\"password\" name=\"password_confirmation\" >\n                    </div>\n                    <div class=\"ui error message\"></div>\n                    <button class=\"ui teal labeled icon button\" type=\"submit\">\n                        <i class=\"save icon\"></i>\n                        保存\n                    </button>\n                </form>\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection\n@section('script')\n    @include('form-validate/auth/v-register')\n@endsection\n"
  },
  {
    "path": "resources/views/users/edit.blade.php",
    "content": "@extends('layouts.base')\n@section('title','资料修改')\n\n@section('content')\n    @include('users.partials.left-menu')\n\n    <div class=\"twelve wide column\">\n        <div class=\"ui stacked segment\">\n            <div class=\"content\">\n                <h2>修改资料</h2>\n                <div class=\"ui divider\"></div>\n                <form class=\"ui form\" method=\"post\" action=\"{{ route('users.update', $info->id) }}\" >\n                    {{ csrf_field() }} {{ method_field('Patch') }}\n                    <div class=\"field\">\n                        <label for=\"user_name-field\">用户名：</label>\n                        <input class=\"form-control\" disabled=\"disabled\" type=\"text\" name=\"user_name\"\n                               value=\"{{ $info->user_name }}\">\n                    </div>\n                    <div class=\"field\">\n                        <label for=\"email-field\">邮箱：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"email\" disabled=\"disabled\"\n                               value=\"{{ $info->email }}\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"github_name-field\">Github 用户名：（请注意和 github 上保持一致）</label>\n                        <input class=\"form-control\" type=\"text\" name=\"github_name\" value=\"{{ $info->github_name }}\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"nickname-field\">昵称：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"nickname\" value=\"{{ $info->nickname }}\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"personal_website-field\">个人网站：(如：example.com，不需要加 http 头前缀 https://)</label>\n                        <input class=\"form-control\" type=\"text\" name=\"personal_website\"\n                               value=\"{{ $info->personal_website }}\">\n                    </div>\n\n                    <div class=\"field\">\n                        <label for=\"company-field\">所在公司：</label>\n                        <input class=\"form-control\" type=\"text\" name=\"company\" value=\"{{ $info->company }}\">\n                    </div>\n\n                    <div class=\" field\">\n                        <label for=\"city-field\">所在城市：(如： 云南 大理)</label>\n                        <input class=\"form-control\" type=\"text\" name=\"city\" value=\"{{ $info->city }}\">\n                    </div>\n\n                    {{--<div class=\"required field\">--}}\n                    <div class=\"field\">\n                        <label for=\"introduction-field\">个人简介：（请一句话介绍你自己，大部分情况下会在你的头像和名字旁边显示）</label>\n                        <textarea rows=\"3\" name=\"introduction\"\n                                  placeholder=\"请一句话介绍你自己\">{{ $info->introduction }}</textarea>\n                    </div>\n                    <div class=\"ui error message\"></div>\n\n                    <button class=\"ui teal labeled icon button\" type=\"submit\">\n                        <i class=\"save icon\"></i>\n                        保存\n                    </button>\n                </form>\n\n            </div>\n        </div>\n    </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/users/partials/left-menu.blade.php",
    "content": "<div class=\"ui container grid\">\n    <div class=\"column\">\n        <div class=\"ui breadcrumb\">\n            <a href=\"/\" class=\"section\">首页</a>\n            <span class=\"divider\">/</span>\n            <div class=\"active section\">个人信息修改</div>\n        </div>\n    </div>\n</div>\n    <div class=\"ui centered grid container stackable\" id=\"content\">\n        <div class=\"four wide column\">\n            <div class=\"ui  vertical pointing violet menu\">\n                <a href=\"{{ route('users.edit', ['id' => $authUser->id]) }}\" class=\"item @if(request()->url() == route('users.edit', ['id' => $authUser->id])) active @endif\">个人信息修改 </a>\n                <a href=\"{{ route('users.edit_password', ['id' => $authUser->id]) }}\" class=\"item @if(request()->url() == route('users.edit_password', ['id' => $authUser->id])) active @endif\">密码修改 </a>\n                <a href=\"{{ route('users.edit_email', ['id' => $authUser->id]) }}\" class=\"item @if(request()->url() == route('users.edit_email', ['id' => $authUser->id])) active @endif\">修改绑定邮箱 </a>\n            </div>\n        </div>\n"
  },
  {
    "path": "resources/views/users/partials/right-item.blade.php",
    "content": "<div class=\"ui stacked segment\">\n    <div class=\"ui teal ribbon label\"><i class=\"trophy icon\"></i>\n\n        @if(!$authUser)\n            {{ $info->user_name.'我的' }}个人中心\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我的':$info->user_name.'的'}}个人中心\n        @endif\n        </div>\n\n    <div class=\"content extra-padding\">\n        <div class=\"ui attached tabular menu stackable\">\n\n            <a class=\"item @if($nowUrl == $defaultView) active @endif\" data-tab=\"first\" href=\"{{ $defaultView }}\"><i class=\"icon feed\"></i> 动态</a>\n            <a class=\"item @if($nowUrl== $articleView ) active @endif\" data-tab=\"first1\" href=\"{{ $articleView  }}\"><i class=\"icon file text outline\"></i> 文章 <span class=\"counter\">{{ $info->article_count }}</span> </a>\n            <a class=\"item @if($nowUrl== $questionView ) active @endif\" data-tab=\"first1\" href=\"{{ $questionView  }}\"><i class=\"help circle icon outline\"></i> 问题 <span class=\"counter\">{{ $info->question_count }}</span> </a>\n            <a class=\"item @if($nowUrl == $followedView) active @endif\" href=\"{{ $followedView }}\"><i class=\"icon user outline\"></i> 关注者 <span class=\"counter\">{{  $info->followers->count()}}</span> </a>\n            <a class=\"item @if($nowUrl == $followingView) active @endif\" href=\"{{ $followingView }}\"><i class=\"icon user outline\"></i> 正在关注的人 <span class=\"counter\">{{  $info->followings->count()}}</span> </a>\n            <a class=\"item @if($nowUrl == $voteView) active @endif\" href=\"{{ $voteView }}\" ><i class=\"icon heart\"></i> 关注的 </a>\n\n        </div>\n\n        <div class=\"ui feed\">\n            @if(count($activities))\n                @if($nowUrl == $followingView || $nowUrl == $followedView)\n                    @include('activities.followings')\n                @else\n                    @foreach($activities as $v)\n                        @if($nowUrl == $defaultView)\n                            @include('activities.type.'. snake_case(class_basename($v->type), '-'))\n                        @elseif($nowUrl == $articleView)\n                            @include('activities.article')\n                        @elseif($nowUrl == $questionView)\n                            @include('activities.question')\n                        @elseif($nowUrl == $voteView)\n                            @include('activities.voted')\n                        @endif\n                    @endforeach\n                        {{ $activities->appends(request()->except('page'))->links() }}\n                @endif\n            @else\n                <div class=\"ui feed no-messages\">\n                    <p class=\"text-center alert alert-info\"> (=￣ω￣=) ···还没任何动静噢!</p>\n                </div>\n            @endif\n\n        </div>\n\n    </div>\n</div>"
  },
  {
    "path": "resources/views/users/personal-center.blade.php",
    "content": "@extends('layouts.base')\n@section('title')\n    @if($view == null)\n        @if(!$authUser)\n            {{ $info->user_name.'的' }}动态\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我的':$info->user_name.'的' }}动态\n        @endif\n    @elseif($view == 'article')\n        @if(!$authUser)\n            {{ $info->user_name.'发过的' }}文章\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我发过的':$info->user_name.'发过的' }}文章\n        @endif\n    @elseif($view == 'question')\n        @if(!$authUser)\n            {{ $info->user_name.'碰到的' }}问题\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我碰到的':$info->user_name.'碰到的' }}问题\n        @endif\n    @elseif($view == 'following')\n        @if(!$authUser)\n            {{ $info->user_name }}关注的人\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我':$info->user_name}}关注的人\n        @endif\n    @elseif($view == 'followed')\n        @if(!$authUser)\n            {{ $info->user_name }}的关注者\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我':$info->user_name}}的关注者\n        @endif\n    @elseif($view == 'vote')\n        @if(!$authUser)\n            {{ $info->user_name}}赞过的\n        @else\n            {{ $authUser->user_name == $info->user_name ? '我':$info->user_name}}赞过的\n        @endif\n    @endif\n    -个人中心\n@endsection\n\n@section('content')\n    <div class=\"ui container grid\">\n        <div class=\"column\">\n            <div class=\"ui breadcrumb\">\n                <a href=\"/\" class=\"section\">首页</a>\n                <span class=\"divider\">/</span>\n                <div class=\"active section\">\n                    @if(!$authUser)\n                        {{ $info->user_name.'我的' }}个人中心\n                    @else\n                        {{ $authUser->user_name == $info->user_name ? '我的':$info->user_name.'的'}}个人中心\n                    @endif\n                </div>\n            </div>\n        </div>\n    </div>\n    <div class=\"ui centered grid container stackable userspace\">\n        <div class=\"four wide column \">\n            <div class=\"ui stackable cards\">\n                <div class=\"ui card\">\n                    <avatar src=\"{{ $info->avatar }}\"\n                            id=\"{{ $info->id }}\"\n                            user_name=\"{{ $info->user_name }}\"\n                            now_user=\"{{ $authUser? $authUser->user_name:'' }}\"\n                            introduction=\"{{ $info->introduction }}\"\n                            is_supperadmin=\"{{ $authUser? $authUser->hasRole('supper_admin') : null }}\"\n                            time=\"{{ $info->created_at->diffForHumans() }}\">\n                    </avatar>\n                    <div class=\"content\">\n                        <div class=\"ui three statistics \">\n                            <div class=\"ui mini statistic\">\n                                <div class=\"value labels-time\">{{ $info->follower_count }}</div>\n                                <div class=\"label\"><a\n                                            href=\"{{ route('user_center', ['user_name' => $info->user_name, 'view' => 'followed']) }}\"\n                                            class=\"ui popover\" data-content=\"他的关注者\">关注者</a></div>\n                            </div>\n                            <div class=\"ui mini statistic\">\n                                <div class=\"value\">0</div>\n                                <div class=\"label\"><a href=\"\" class=\"ui popover\" data-content=\"碰到的问题\">问题</a></div>\n                            </div>\n                            <div class=\"ui mini statistic\">\n                                <div class=\"value\">{{ $info->article_count }}</div>\n                                <div class=\"label\"><a\n                                            href=\"{{ route('user_center', ['user_name' => $info->user_name, 'view' => 'article']) }}\"\n                                            class=\"ui popover\" data-content=\"记录过的文章\">文章</a></div>\n                            </div>\n                        </div>\n                    </div>\n                    <div class=\"extra content center\">\n                        <p style=\"margin-left: 2px\"><i class=\"marker icon\"></i> {{ $info->city }}</p>\n                        <div style=\"text-align: center\">\n                            <a class=\"ui circular violet icon button\" title=\"github 主页\"\n                               href=\"https://github.com/{{ $info->github_name }}\" target=\"_blank\">\n                                <i class=\"github icon\"></i>\n                            </a>\n                            <a class=\"ui circular google green icon button \" title=\"个人网站\"\n                               href=\"//{{ $info->personal_website }}\" target=\"_blank\">\n                                <i class=\"chrome icon\"></i>\n                            </a></div>\n                    </div>\n                    <div class=\"extra content\">\n                        @if(!Auth::check())\n                            <vote-button is-checked=\"false\"></vote-button>\n                        @else\n                            <vote-button is-checked=\"true\" user=\"{{ $info->id }}\"></vote-button>\n                        @endif\n                    </div>\n\n                </div>\n            </div>\n        </div>\n        <div class=\"twelve wide column\">\n            @include('users.partials.right-item')\n        </div>\n    </div>\n@endsection\n"
  },
  {
    "path": "resources/views/vendor/mail/html/button.blade.php",
    "content": "<table class=\"action\" align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td align=\"center\">\n            <table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                    <td align=\"center\">\n                        <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n                            <tr>\n                                <td>\n                                    <a href=\"{{ $url }}\" class=\"button button-{{ $color or 'blue' }}\" target=\"_blank\">{{ $slot }}</a>\n                                </td>\n                            </tr>\n                        </table>\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/footer.blade.php",
    "content": "<tr>\n    <td>\n        <table class=\"footer\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\">\n            <tr>\n                <td class=\"content-cell\" align=\"center\">\n                    {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n                </td>\n            </tr>\n        </table>\n    </td>\n</tr>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/header.blade.php",
    "content": "<tr>\n    <td class=\"header\">\n        <a href=\"{{ $url }}\">\n            {{ $slot }}\n        </a>\n    </td>\n</tr>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/layout.blade.php",
    "content": "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\">\n<head>\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\" />\n</head>\n<body>\n    <style>\n        @media only screen and (max-width: 600px) {\n            .inner-body {\n                width: 100% !important;\n            }\n\n            .footer {\n                width: 100% !important;\n            }\n        }\n\n        @media only screen and (max-width: 500px) {\n            .button {\n                width: 100% !important;\n            }\n        }\n    </style>\n\n    <table class=\"wrapper\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n        <tr>\n            <td align=\"center\">\n                <table class=\"content\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                    {{ $header or '' }}\n\n                    <!-- Email Body -->\n                    <tr>\n                        <td class=\"body\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                            <table class=\"inner-body\" align=\"center\" width=\"570\" cellpadding=\"0\" cellspacing=\"0\">\n                                <!-- Body content -->\n                                <tr>\n                                    <td class=\"content-cell\">\n                                        {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n\n                                        {{ $subcopy or '' }}\n                                    </td>\n                                </tr>\n                            </table>\n                        </td>\n                    </tr>\n\n                    {{ $footer or '' }}\n                </table>\n            </td>\n        </tr>\n    </table>\n</body>\n</html>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/message.blade.php",
    "content": "@component('mail::layout')\n    {{-- Header --}}\n    @slot('header')\n        @component('mail::header', ['url' => config('app.url')])\n            {{ config('app.name') }}\n        @endcomponent\n    @endslot\n\n    {{-- Body --}}\n    {{ $slot }}\n\n    {{-- Subcopy --}}\n    @isset($subcopy)\n        @slot('subcopy')\n            @component('mail::subcopy')\n                {{ $subcopy }}\n            @endcomponent\n        @endslot\n    @endisset\n\n    {{-- Footer --}}\n    @slot('footer')\n        @component('mail::footer')\n            &copy; {{ date('Y') }} {{ config('app.name') }}. All rights reserved.\n        @endcomponent\n    @endslot\n@endcomponent\n"
  },
  {
    "path": "resources/views/vendor/mail/html/panel.blade.php",
    "content": "<table class=\"panel\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td class=\"panel-content\">\n            <table width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                    <td class=\"panel-item\">\n                        {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/promotion/button.blade.php",
    "content": "<table width=\"100%\" border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td align=\"center\">\n            <table border=\"0\" cellpadding=\"0\" cellspacing=\"0\">\n                <tr>\n                    <td>\n                        <a href=\"{{ $url }}\" class=\"button button-green\" target=\"_blank\">{{ $slot }}</a>\n                    </td>\n                </tr>\n            </table>\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/promotion.blade.php",
    "content": "<table class=\"promotion\" align=\"center\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td align=\"center\">\n            {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/subcopy.blade.php",
    "content": "<table class=\"subcopy\" width=\"100%\" cellpadding=\"0\" cellspacing=\"0\">\n    <tr>\n        <td>\n            {{ Illuminate\\Mail\\Markdown::parse($slot) }}\n        </td>\n    </tr>\n</table>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/table.blade.php",
    "content": "<div class=\"table\">\n{{ Illuminate\\Mail\\Markdown::parse($slot) }}\n</div>\n"
  },
  {
    "path": "resources/views/vendor/mail/html/themes/default.css",
    "content": "/* Base */\n\nbody, body *:not(html):not(style):not(br):not(tr):not(code) {\n    font-family: Avenir, Helvetica, sans-serif;\n    box-sizing: border-box;\n}\n\nbody {\n    background-color: #f5f8fa;\n    color: #74787E;\n    height: 100%;\n    hyphens: auto;\n    line-height: 1.4;\n    margin: 0;\n    -moz-hyphens: auto;\n    -ms-word-break: break-all;\n    width: 100% !important;\n    -webkit-hyphens: auto;\n    -webkit-text-size-adjust: none;\n    word-break: break-all;\n    word-break: break-word;\n}\n\np,\nul,\nol,\nblockquote {\n    line-height: 1.4;\n    text-align: left;\n}\n\na {\n    color: #3869D4;\n}\n\na img {\n    border: none;\n}\n\n/* Typography */\n\nh1 {\n    color: #2F3133;\n    font-size: 19px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh2 {\n    color: #2F3133;\n    font-size: 16px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\nh3 {\n    color: #2F3133;\n    font-size: 14px;\n    font-weight: bold;\n    margin-top: 0;\n    text-align: left;\n}\n\np {\n    color: #74787E;\n    font-size: 16px;\n    line-height: 1.5em;\n    margin-top: 0;\n    text-align: left;\n}\n\np.sub {\n    font-size: 12px;\n}\n\nimg {\n    max-width: 100%;\n}\n\n/* Layout */\n\n.wrapper {\n    background-color: #f5f8fa;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.content {\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n/* Header */\n\n.header {\n    padding: 25px 0;\n    text-align: center;\n}\n\n.header a {\n    color: #bbbfc3;\n    font-size: 19px;\n    font-weight: bold;\n    text-decoration: none;\n    text-shadow: 0 1px 0 white;\n}\n\n/* Body */\n\n.body {\n    background-color: #FFFFFF;\n    border-bottom: 1px solid #EDEFF2;\n    border-top: 1px solid #EDEFF2;\n    margin: 0;\n    padding: 0;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.inner-body {\n    background-color: #FFFFFF;\n    margin: 0 auto;\n    padding: 0;\n    width: 570px;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n}\n\n/* Subcopy */\n\n.subcopy {\n    border-top: 1px solid #EDEFF2;\n    margin-top: 25px;\n    padding-top: 25px;\n}\n\n.subcopy p {\n    font-size: 12px;\n}\n\n/* Footer */\n\n.footer {\n    margin: 0 auto;\n    padding: 0;\n    text-align: center;\n    width: 570px;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 570px;\n}\n\n.footer p {\n    color: #AEAEAE;\n    font-size: 12px;\n    text-align: center;\n}\n\n/* Tables */\n\n.table table {\n    margin: 30px auto;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.table th {\n    border-bottom: 1px solid #EDEFF2;\n    padding-bottom: 8px;\n}\n\n.table td {\n    color: #74787E;\n    font-size: 15px;\n    line-height: 18px;\n    padding: 10px 0;\n}\n\n.content-cell {\n    padding: 35px;\n}\n\n/* Buttons */\n\n.action {\n    margin: 30px auto;\n    padding: 0;\n    text-align: center;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.button {\n    border-radius: 3px;\n    box-shadow: 0 2px 3px rgba(0, 0, 0, 0.16);\n    color: #FFF;\n    display: inline-block;\n    text-decoration: none;\n    -webkit-text-size-adjust: none;\n}\n\n.button-blue {\n    background-color: #3097D1;\n    border-top: 10px solid #3097D1;\n    border-right: 18px solid #3097D1;\n    border-bottom: 10px solid #3097D1;\n    border-left: 18px solid #3097D1;\n}\n\n.button-green {\n    background-color: #2ab27b;\n    border-top: 10px solid #2ab27b;\n    border-right: 18px solid #2ab27b;\n    border-bottom: 10px solid #2ab27b;\n    border-left: 18px solid #2ab27b;\n}\n\n.button-red {\n    background-color: #bf5329;\n    border-top: 10px solid #bf5329;\n    border-right: 18px solid #bf5329;\n    border-bottom: 10px solid #bf5329;\n    border-left: 18px solid #bf5329;\n}\n\n/* Panels */\n\n.panel {\n    margin: 0 0 21px;\n}\n\n.panel-content {\n    background-color: #EDEFF2;\n    padding: 16px;\n}\n\n.panel-item {\n    padding: 0;\n}\n\n.panel-item p:last-of-type {\n    margin-bottom: 0;\n    padding-bottom: 0;\n}\n\n/* Promotions */\n\n.promotion {\n    background-color: #FFFFFF;\n    border: 2px dashed #9BA2AB;\n    margin: 0;\n    margin-bottom: 25px;\n    margin-top: 25px;\n    padding: 24px;\n    width: 100%;\n    -premailer-cellpadding: 0;\n    -premailer-cellspacing: 0;\n    -premailer-width: 100%;\n}\n\n.promotion h1 {\n    text-align: center;\n}\n\n.promotion p {\n    font-size: 15px;\n    text-align: center;\n}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/button.blade.php",
    "content": "{{ $slot }}: {{ $url }}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/footer.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/header.blade.php",
    "content": "[{{ $slot }}]({{ $url }})\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/layout.blade.php",
    "content": "{!! strip_tags($header) !!}\n\n{!! strip_tags($slot) !!}\n@isset($subcopy)\n\n{!! strip_tags($subcopy) !!}\n@endisset\n\n{!! strip_tags($footer) !!}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/message.blade.php",
    "content": "@component('mail::layout')\n    {{-- Header --}}\n    @slot('header')\n        @component('mail::header', ['url' => config('app.url')])\n            {{ config('app.name') }}\n        @endcomponent\n    @endslot\n\n    {{-- Body --}}\n    {{ $slot }}\n\n    {{-- Subcopy --}}\n    @isset($subcopy)\n        @slot('subcopy')\n            @component('mail::subcopy')\n                {{ $subcopy }}\n            @endcomponent\n        @endslot\n    @endisset\n\n    {{-- Footer --}}\n    @slot('footer')\n        @component('mail::footer')\n            © {{ date('Y') }} {{ config('app.name') }}. All rights reserved.\n        @endcomponent\n    @endslot\n@endcomponent\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/panel.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/promotion/button.blade.php",
    "content": "[{{ $slot }}]({{ $url }})\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/promotion.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/subcopy.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/mail/markdown/table.blade.php",
    "content": "{{ $slot }}\n"
  },
  {
    "path": "resources/views/vendor/notifications/email.blade.php",
    "content": "@component('mail::message')\n{{-- Greeting --}}\n@if (! empty($greeting))\n# {{ $greeting }}\n@else\n@if ($level == 'error')\n# Whoops!\n@else\n# Hello!\n@endif\n@endif\n\n{{-- Intro Lines --}}\n@foreach ($introLines as $line)\n{{ $line }}\n\n@endforeach\n\n{{-- Action Button --}}\n@isset($actionText)\n<?php\n    switch ($level) {\n        case 'success':\n            $color = 'green';\n            break;\n        case 'error':\n            $color = 'red';\n            break;\n        default:\n            $color = 'blue';\n    }\n?>\n@component('mail::button', ['url' => $actionUrl, 'color' => $color])\n{{ $actionText }}\n@endcomponent\n@endisset\n\n{{-- Outro Lines --}}\n@foreach ($outroLines as $line)\n{{ $line }}\n\n@endforeach\n\n{{-- Salutation --}}\n@if (! empty($salutation))\n{{ $salutation }}\n@else\nRegards,<br>{{ config('app.name') }}\n@endif\n\n{{-- Subcopy --}}\n@isset($actionText)\n@component('mail::subcopy')\nIf you’re having trouble clicking the \"{{ $actionText }}\" button, copy and paste the URL below\ninto your web browser: [{{ $actionUrl }}]({{ $actionUrl }})\n@endcomponent\n@endisset\n@endcomponent\n"
  },
  {
    "path": "resources/views/vendor/pagination/bootstrap-4.blade.php",
    "content": "@if ($paginator->hasPages())\n    <ul class=\"pagination\">\n        {{-- Previous Page Link --}}\n        @if ($paginator->onFirstPage())\n            <li class=\"page-item disabled\"><span class=\"page-link\">&laquo;</span></li>\n        @else\n            <li class=\"page-item\"><a class=\"page-link\" href=\"{{ $paginator->previousPageUrl() }}\" rel=\"prev\">&laquo;</a></li>\n        @endif\n\n        {{-- Pagination Elements --}}\n        @foreach ($elements as $element)\n            {{-- \"Three Dots\" Separator --}}\n            @if (is_string($element))\n                <li class=\"page-item disabled\"><span class=\"page-link\">{{ $element }}</span></li>\n            @endif\n\n            {{-- Array Of Links --}}\n            @if (is_array($element))\n                @foreach ($element as $page => $url)\n                    @if ($page == $paginator->currentPage())\n                        <li class=\"page-item active\"><span class=\"page-link\">{{ $page }}</span></li>\n                    @else\n                        <li class=\"page-item\"><a class=\"page-link\" href=\"{{ $url }}\">{{ $page }}</a></li>\n                    @endif\n                @endforeach\n            @endif\n        @endforeach\n\n        {{-- Next Page Link --}}\n        @if ($paginator->hasMorePages())\n            <li class=\"page-item\"><a class=\"page-link\" href=\"{{ $paginator->nextPageUrl() }}\" rel=\"next\">&raquo;</a></li>\n        @else\n            <li class=\"page-item disabled\"><span class=\"page-link\">&raquo;</span></li>\n        @endif\n    </ul>\n@endif\n"
  },
  {
    "path": "resources/views/vendor/pagination/default.blade.php",
    "content": "@if ($paginator->hasPages())\n    <ul class=\"pagination\">\n        {{-- Previous Page Link --}}\n        @if ($paginator->onFirstPage())\n            <li class=\"disabled\"><span>&laquo;</span></li>\n        @else\n            <li><a href=\"{{ $paginator->previousPageUrl() }}\" rel=\"prev\">&laquo;</a></li>\n        @endif\n\n        {{-- Pagination Elements --}}\n        @foreach ($elements as $element)\n            {{-- \"Three Dots\" Separator --}}\n            @if (is_string($element))\n                <li class=\"disabled\"><span>{{ $element }}</span></li>\n            @endif\n\n            {{-- Array Of Links --}}\n            @if (is_array($element))\n                @foreach ($element as $page => $url)\n                    @if ($page == $paginator->currentPage())\n                        <li class=\"active\"><span>{{ $page }}</span></li>\n                    @else\n                        <li><a href=\"{{ $url }}\">{{ $page }}</a></li>\n                    @endif\n                @endforeach\n            @endif\n        @endforeach\n\n        {{-- Next Page Link --}}\n        @if ($paginator->hasMorePages())\n            <li><a href=\"{{ $paginator->nextPageUrl() }}\" rel=\"next\">&raquo;</a></li>\n        @else\n            <li class=\"disabled\"><span>&raquo;</span></li>\n        @endif\n    </ul>\n@endif\n"
  },
  {
    "path": "resources/views/vendor/pagination/simple-bootstrap-4.blade.php",
    "content": "@if ($paginator->hasPages())\n    <ul class=\"pagination\">\n        {{-- Previous Page Link --}}\n        @if ($paginator->onFirstPage())\n            <li class=\"page-item disabled\"><span class=\"page-link\">@lang('pagination.previous')</span></li>\n        @else\n            <li class=\"page-item\"><a class=\"page-link\" href=\"{{ $paginator->previousPageUrl() }}\" rel=\"prev\">@lang('pagination.previous')</a></li>\n        @endif\n\n        {{-- Next Page Link --}}\n        @if ($paginator->hasMorePages())\n            <li class=\"page-item\"><a class=\"page-link\" href=\"{{ $paginator->nextPageUrl() }}\" rel=\"next\">@lang('pagination.next')</a></li>\n        @else\n            <li class=\"page-item disabled\"><span class=\"page-link\">@lang('pagination.next')</span></li>\n        @endif\n    </ul>\n@endif\n"
  },
  {
    "path": "resources/views/vendor/pagination/simple-default.blade.php",
    "content": "@if ($paginator->hasPages())\n    <ul class=\"pagination\">\n        {{-- Previous Page Link --}}\n        @if ($paginator->onFirstPage())\n            <li class=\"disabled\"><span>@lang('pagination.previous')</span></li>\n        @else\n            <li><a href=\"{{ $paginator->previousPageUrl() }}\" rel=\"prev\">@lang('pagination.previous')</a></li>\n        @endif\n\n        {{-- Next Page Link --}}\n        @if ($paginator->hasMorePages())\n            <li><a href=\"{{ $paginator->nextPageUrl() }}\" rel=\"next\">@lang('pagination.next')</a></li>\n        @else\n            <li class=\"disabled\"><span>@lang('pagination.next')</span></li>\n        @endif\n    </ul>\n@endif\n"
  },
  {
    "path": "routes/api.php",
    "content": "<?php\n\nuse Illuminate\\Http\\Request;\n\n/*\n|--------------------------------------------------------------------------\n| API Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register API routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| is assigned the \"api\" middleware group. Enjoy building your API!\n|\n*/\n\n//Route::middleware('auth:api')->get('/user', function (Request $request) {\n//    return $request->user();\n//});\n\n\n// ## =============================\n// Authtication\n// ================================ ##\nRoute::group([\n    'namespace' => 'Api',\n    'middleware' => ['api']\n], function () {\n    // Article Comment\n    Route::get('comment/{article_id}/comment', 'CommentController@show');\n    Route::get('/article/{article_id}/voteuser', 'ArticleController@voteUser');\n    // Question Comment\n    Route::get('reply/{question_id}/reply', 'ReplyController@show');\n    Route::get('/question/{question_id}/voteuser', 'QuestionController@voteUser');\n\n    Route::group([\n        'middleware' => ['auth:api']\n    ], function () {\n        Route::post('/comment', 'CommentController@store');\n        Route::delete('/comment/{comment_id}', 'CommentController@destroy');\n        Route::post('/article/{article_id}/vote', 'ArticleController@vote');\n        Route::get('/user/followers/{id}', 'FollowerController@index');\n        Route::post('/user/follow', 'FollowerController@doFollow');\n        Route::post('file/upload', 'UploadController@fileUpload');\n\n\n        Route::post('/reply', 'ReplyController@store');\n        Route::delete('/reply/{question_id}', 'ReplyController@destroy');\n        Route::post('/question/{question_id}/vote', 'QuestionController@vote');\n    });\n\n});\n"
  },
  {
    "path": "routes/channels.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Broadcast Channels\n|--------------------------------------------------------------------------\n|\n| Here you may register all of the event broadcasting channels that your\n| application supports. The given channel authorization callbacks are\n| used to check if an authenticated user can listen to the channel.\n|\n*/\n\nBroadcast::channel('App.User.{id}', function ($user, $id) {\n    return (int) $user->id === (int) $id;\n});\n"
  },
  {
    "path": "routes/console.php",
    "content": "<?php\n\nuse Illuminate\\Foundation\\Inspiring;\n\n/*\n|--------------------------------------------------------------------------\n| Console Routes\n|--------------------------------------------------------------------------\n|\n| This file is where you may define all of your Closure based console\n| commands. Each Closure is bound to a command instance allowing a\n| simple approach to interacting with each command's IO methods.\n|\n*/\n\nArtisan::command('inspire', function () {\n    $this->comment(Inspiring::quote());\n})->describe('Display an inspiring quote');\n"
  },
  {
    "path": "routes/web.php",
    "content": "<?php\n\n/*\n|--------------------------------------------------------------------------\n| Web Routes\n|--------------------------------------------------------------------------\n|\n| Here is where you can register web routes for your application. These\n| routes are loaded by the RouteServiceProvider within a group which\n| contains the \"web\" middleware group. Now create something great!\n|\n*/\n\n\n// ## =============================\n// Message\n// ================================ ##\nRoute::group(['prefix' => 'notifications', 'middleware' => 'auth'], function () {\n    Route::get('unread', 'NotificationsController@unread')->name('notifications.unread');\n    Route::get('/', 'NotificationsController@index')->name('notifications.index');\n    Route::get('messages', 'NotificationsController@messages')->name('notifications.messages');\n});\n\n// ## =============================\n// User center\n// ================================ ##\nRoute::get('users/{user_name}/{view?}', 'ActivityController@index')->name('user_center');\nRoute::group(['prefix' => 'user', 'middleware' => 'auth'], function () {\n    Route::get('/{id}/edit', 'UserController@edit')->name('users.edit');\n    Route::patch('/{id}', 'UserController@update')->name('users.update');\n    Route::get('/password/{id}/edit', 'UserController@editPassword')->name('users.edit_password');\n    Route::patch('/password/{id}/update', 'UserController@updatePassword')->name('users.update_password');\n    Route::get('/{id}/email', 'UserController@editEmail')->name('users.edit_email');\n});\n\n\n// ## =============================\n// Api\n// ================================ ##\nRoute::group(['namespace' => 'Api', 'middleware' => ['auth']], function () {\n    // File Upload\n    Route::post('file/upload', 'UploadController@fileUpload');\n});\n\n// ## =============================\n// Authtication\n// ================================ ##\nAuth::routes();\nRoute::group(['middleware' => ['auth', 'admin']], function () {\n    Route::get('logs', '\\Rap2hpoutre\\LaravelLogViewer\\LogViewerController@index');\n});\nRoute::get('login/github', 'Auth\\LoginController@redirectToGithubProvider')->name('thirdlogin');\nRoute::get('login/github/callback', 'Auth\\LoginController@handleGithubProviderCallback');\nRoute::get('/logout', 'Auth\\LoginController@logout')->name('logout');\nRoute::get('/search', 'PagesController@search')->name('search');\nRoute::get('/about', 'PagesController@about')->name('about');\n\n// ## =============================\n// Home Pages\n// ================================ ##\nRoute::get('/', 'PagesController@home')->name('home');\nRoute::get('/article/all', 'ArticlesController@allArticles')->name('article.all');\nRoute::get('/article/{slug}', 'ArticlesController@show')->name('article.show');\nRoute::get('/a/{slug}', 'ArticlesController@index')->name('article_list');\n\nRoute::get('/q/{slug}', 'QuestionsController@index')->name('question_list');\nRoute::get('/question/all', 'QuestionsController@allQuestions')->name('question.all'); // 注意的路由须序\nRoute::get('/question/{slug}', 'QuestionsController@show')->name('question.show');\n// Tag\nRoute::group(['prefix' => 'tag'], function () {\n    Route::get('/', 'TagController@index');\n    Route::get('{tag}/{type?}', 'TagController@show')->where(['type' => '[q]']); //type 不存在则是从文章点进来的， type=q 则是从问题点进来的\n});\n\n// Questions push and update\nRoute::group(['prefix' => 'questions', 'middleware' => ['auth']], function () {\n    Route::get('/', 'QuestionsController@create')->name('questions.create');\n    Route::post('/store', 'QuestionsController@store')->name('questions.store');\n    Route::get('/{id}/edit', 'QuestionsController@edit')->name('questions.edit')->middleware('admin')->middleware('role:supper_admin');\n    Route::post('/{id}/update', 'QuestionsController@update')->name('questions.update')->middleware('admin')->middleware('role:supper_admin');\n});\nRoute::group(['prefix' => 'articles', 'middleware' => ['auth', 'role:supper_admin', 'admin']], function () {\n    Route::get('/', 'ArticlesController@create')->name('articles.create');\n    Route::post('/store', 'ArticlesController@store')->name('articles.store');\n    Route::get('/{id}/edit', 'ArticlesController@edit')->name('articles.edit');\n    Route::post('/{id}/update', 'ArticlesController@update')->name('articles.update');\n});\nRoute::post('/upload_image', 'QuestionsController@uploadImage')->name('upload_image')->middleware('auth');\n\n// 语言配置\n\n\n// ##  =================================\n// Dashboard\n// ===================================== ##\nRoute::group(['prefix' => 'dashboard', 'namespace' => 'Dashboard', 'middleware' => ['auth', 'admin']], function () {\n    Route::get('/', 'IndexController@index');\n    Route::get('welcome', 'IndexController@welcome');\n    Route::get('commonStatus', 'IndexController@commonStatusHandle');\n\n    // ## =================================\n    // User manage\n    // ================================ ##\n    Route::group(['prefix' => 'user', 'middleware' => 'role:supper_admin'], function () {\n        Route::get('/', 'UsersController@users');\n        Route::post('ajaxUsers/{page?}', 'UsersController@ajaxUsers');\n        Route::get('create', 'UsersController@create');\n        Route::post('store', 'UsersController@store');\n        Route::get('{id}/edit', 'UsersController@edit')->name('users.show');\n        Route::post('{id}/update', 'UsersController@update');\n        Route::post('{id}/delete', 'UsersController@destroy');\n        Route::get('roles', 'UsersController@giveUserRoles');\n        Route::post('roles', 'UsersController@giveUserRolesStore');\n\n    });\n    Route::group(['prefix' => 'role', 'middleware' => 'role:supper_admin'], function () {\n        Route::get('/', 'RolesController@roles');\n        Route::post('ajaxRoles/{page?}', 'RolesController@ajaxRoles');\n        Route::get('create', 'RolesController@create');\n        Route::post('store', 'RolesController@store');\n        Route::get('{id}/edit', 'RolesController@edit');\n        Route::post('{id}/update', 'RolesController@update');\n        Route::post('{id}/delete', 'RolesController@destroy');\n        Route::get('permissions', 'RolesController@giveRolePermissions');\n        Route::post('permissions', 'RolesController@giveRolePermissionsStore');\n    });\n    Route::group(['prefix' => 'permission', 'middleware' => 'role:supper_admin'], function () {\n        Route::get('/', 'PermissionsController@roles');\n        Route::post('ajaxPermissions/{page?}', 'PermissionsController@ajaxPermissions');\n        Route::get('create', 'PermissionsController@create');\n        Route::post('store', 'PermissionsController@store');\n        Route::get('{id}/edit', 'PermissionsController@edit');\n        Route::post('{id}/update', 'PermissionsController@update');\n        Route::post('{id}/delete', 'PermissionsController@destroy');\n    });\n\n    // ## =================================\n    // Content manage\n    // ================================ ##\n    Route::group(['prefix' => 'articleCategory'], function () {\n        Route::get('/', 'ArticleCategoryController@articleCategories');\n        Route::post('ajaxArticleCategories/{page?}', 'ArticleCategoryController@ajaxArticleCategories');\n        Route::get('create', 'ArticleCategoryController@create');\n        Route::post('store', 'ArticleCategoryController@store');\n        Route::get('{id}/edit', 'ArticleCategoryController@edit');\n        Route::post('{id}/update', 'ArticleCategoryController@update');\n        Route::post('{id}/delete', 'ArticleCategoryController@destroy');\n    });\n    Route::group(['prefix' => 'article'], function () {\n        Route::get('/', 'ArticlesController@articles');\n        Route::post('ajaxArticles/{page?}', 'ArticlesController@ajaxArticles');\n        Route::get('create', 'ArticlesController@create');\n        Route::post('store', 'ArticlesController@store');\n        Route::get('{id}/edit', 'ArticlesController@edit');\n        Route::post('{id}/update', 'ArticlesController@update');\n        Route::post('{id}/delete', 'ArticlesController@destroy');\n    });\n    Route::group(['prefix' => 'tag'], function () {\n        Route::get('/', 'TagsController@tags');\n        Route::get('create', 'TagsController@create');\n        Route::post('store', 'TagsController@store');\n        Route::get('{id}/edit', 'TagsController@edit');\n        Route::post('{id}/update', 'TagsController@update');\n        Route::post('{id}/delete', 'TagsController@destroy');\n    });\n\n\n    // ## =================================\n    // Question manage\n    // ================================ ##\n    Route::group(['prefix' => 'questionCategory'], function () {\n        Route::get('/', 'QuestionCategoryController@questionCategories');\n        Route::post('ajaxQuestionCategories/{page?}', 'QuestionCategoryController@ajaxQuestionCategories');\n        Route::get('create', 'QuestionCategoryController@create');\n        Route::post('store', 'QuestionCategoryController@store');\n        Route::get('{id}/edit', 'QuestionCategoryController@edit');\n        Route::post('{id}/update', 'QuestionCategoryController@update');\n        Route::post('{id}/delete', 'QuestionCategoryController@destroy');\n    });\n    Route::group(['prefix' => 'question'], function () {\n        Route::get('/', 'QuestionsController@questions');\n        Route::post('ajaxQuestions/{page?}', 'QuestionsController@ajaxQuestions');\n        Route::get('create', 'QuestionsController@create');\n        Route::post('store', 'QuestionsController@store');\n        Route::get('{id}/edit', 'QuestionsController@edit');\n        Route::post('{id}/update', 'QuestionsController@update');\n        Route::post('{id}/delete', 'QuestionsController@destroy');\n    });\n\n    // Links manage\n    Route::group(['prefix' => 'links'], function () {\n        Route::get('/', 'LinksController@links');\n        Route::get('create', 'LinksController@create');\n        Route::post('store', 'LinksController@store');\n        Route::get('{id}/edit', 'LinksController@edit');\n        Route::post('{id}/update', 'LinksController@update');\n        Route::post('{id}/delete', 'LinksController@destroy');\n    });\n    Route::group(['prefix' => 'abouts', 'middleware' => 'role:supper_admin'], function () {\n        Route::get('/', 'AboutsController@abouts');\n        Route::get('create', 'AboutsController@create');\n        Route::post('store', 'AboutsController@store');\n        Route::get('{id}/edit', 'AboutsController@edit');\n        Route::post('{id}/update', 'AboutsController@update');\n        Route::post('{id}/delete', 'AboutsController@destroy');\n    });\n\n});\n\n\n"
  },
  {
    "path": "semantic.json",
    "content": "{\n  \"base\": \"resources/assets/semantic\",\n  \"paths\": {\n    \"source\": {\n      \"config\": \"src/theme.config\",\n      \"definitions\": \"src/definitions/\",\n      \"site\": \"src/site/\",\n      \"themes\": \"src/themes/\"\n    },\n    \"output\": {\n      \"packaged\": \"dist/\",\n      \"uncompressed\": \"dist/components/\",\n      \"compressed\": \"dist/components/\",\n      \"themes\": \"dist/themes/\"\n    },\n    \"clean\": \"dist/\"\n  },\n  \"permission\": false,\n  \"autoInstall\": false,\n  \"rtl\": false,\n  \"components\": [\n    \"reset\",\n    \"site\",\n    \"button\",\n    \"container\",\n    \"divider\",\n    \"flag\",\n    \"header\",\n    \"icon\",\n    \"image\",\n    \"input\",\n    \"label\",\n    \"list\",\n    \"loader\",\n    \"rail\",\n    \"reveal\",\n    \"segment\",\n    \"step\",\n    \"breadcrumb\",\n    \"form\",\n    \"grid\",\n    \"menu\",\n    \"message\",\n    \"table\",\n    \"ad\",\n    \"card\",\n    \"comment\",\n    \"feed\",\n    \"item\",\n    \"statistic\",\n    \"accordion\",\n    \"checkbox\",\n    \"dimmer\",\n    \"dropdown\",\n    \"embed\",\n    \"modal\",\n    \"nag\",\n    \"popup\",\n    \"progress\",\n    \"rating\",\n    \"search\",\n    \"shape\",\n    \"sidebar\",\n    \"sticky\",\n    \"tab\",\n    \"transition\",\n    \"api\",\n    \"form\",\n    \"state\",\n    \"visibility\"\n  ],\n  \"version\": \"2.2.13\"\n}"
  },
  {
    "path": "server.php",
    "content": "<?php\n\n/**\n * Laravel - A PHP Framework For Web Artisans\n *\n * @package  Laravel\n * @author   Taylor Otwell <taylor@laravel.com>\n */\n\n$uri = urldecode(\n    parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH)\n);\n\n// This file allows us to emulate Apache's \"mod_rewrite\" functionality from the\n// built-in PHP web server. This provides a convenient way to test a Laravel\n// application without having installed a \"real\" web server software here.\nif ($uri !== '/' && file_exists(__DIR__.'/public'.$uri)) {\n    return false;\n}\n\nrequire_once __DIR__.'/public/index.php';\n"
  },
  {
    "path": "storage/app/.gitignore",
    "content": "*\n!public/\n!.gitignore\n"
  },
  {
    "path": "storage/debugbar/.gitignore",
    "content": "*\n!.gitignore"
  },
  {
    "path": "storage/framework/.gitignore",
    "content": "config.php\nroutes.php\nschedule-*\ncompiled.php\nservices.json\nevents.scanned.php\nroutes.scanned.php\ndown\n"
  },
  {
    "path": "storage/framework/cache/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/sessions/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/testing/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/framework/views/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "storage/logs/.gitignore",
    "content": "*\n!.gitignore\n"
  },
  {
    "path": "tests/CreatesApplication.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Contracts\\Console\\Kernel;\n\ntrait CreatesApplication\n{\n    /**\n     * Creates the application.\n     *\n     * @return \\Illuminate\\Foundation\\Application\n     */\n    public function createApplication()\n    {\n        $app = require __DIR__.'/../bootstrap/app.php';\n\n        $app->make(Kernel::class)->bootstrap();\n\n        return $app;\n    }\n}\n"
  },
  {
    "path": "tests/Feature/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Feature;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\WithoutMiddleware;\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $response = $this->get('/');\n\n        $response->assertStatus(200);\n    }\n}\n"
  },
  {
    "path": "tests/TestCase.php",
    "content": "<?php\n\nnamespace Tests;\n\nuse Illuminate\\Foundation\\Testing\\TestCase as BaseTestCase;\n\nabstract class TestCase extends BaseTestCase\n{\n    use CreatesApplication;\n}\n"
  },
  {
    "path": "tests/Unit/ExampleTest.php",
    "content": "<?php\n\nnamespace Tests\\Unit;\n\nuse Tests\\TestCase;\nuse Illuminate\\Foundation\\Testing\\DatabaseMigrations;\nuse Illuminate\\Foundation\\Testing\\DatabaseTransactions;\n\nclass ExampleTest extends TestCase\n{\n    /**\n     * A basic test example.\n     *\n     * @return void\n     */\n    public function testBasicTest()\n    {\n        $this->assertTrue(true);\n    }\n}\n"
  },
  {
    "path": "webpack.mix.js",
    "content": "let mix = require('laravel-mix');\nconst path = require('path');\n\n/*\n |--------------------------------------------------------------------------\n | Mix Asset Management\n |--------------------------------------------------------------------------\n |\n | Mix provides a clean, fluent API for defining some Webpack build steps\n | for your Laravel application. By default, we are compiling the Sass\n | file for the application as well as bundling up all the JS files.\n |\n */\n\n\nmix.sass('resources/assets/sass/front.scss', 'public/assets/css/styles.css').version();\n\nmix.js('resources/assets/js/front.app.js', 'public/assets/js/front.app.js').version();\n\nmix.scripts([\n    'resources/assets/js/vendor/nprogress.js',\n    'resources/assets/js/vendor/sweetalert.min.js',\n    'resources/assets/js/vendor/emojify.min.js',\n    'resources/assets/js/vendor/emoji.js',\n    'resources/assets/js/vendor/marked.min.js',\n    'resources/assets/js/vendor/monent.min.js',\n    'resources/assets/js/vendor/jquery.jscroll.js',\n    'resources/assets/js/vendor/jquery.highlight.js',\n    'resources/assets/js/main.js'\n], 'public/assets/js/styles.js').version();\n\nmix.scripts([\n    'resources/assets/js/vendor/inline-attachment.js',\n    'resources/assets/js/vendor/codemirror-4.inline-attachment.js',\n    'resources/assets/js/vendor/simplemde.min.js',\n], 'public/assets/js/editor.js').version();\nmix.sass('resources/assets/sass/vendor/simplemde.min.scss', 'public/assets/css/editor.css').version();\n\nmix.webpackConfig({\n    resolve: {\n        alias: {\n            'components': 'assets/js/components',\n            'config': 'assets/js/config',\n            'lang': 'assets/js/lang',\n            'plugins': 'assets/js/plugins',\n            'vendor': 'assets/js/vendor',\n            'views': 'assets/js/views',\n        },\n        modules: [\n            'node_modules',\n            path.resolve(__dirname, \"resources\")\n        ]\n    }\n});\n\n\n"
  }
]